summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYury German <blueknight@gentoo.org>2019-05-22 00:42:33 -0400
committerYury German <blueknight@gentoo.org>2019-05-22 00:42:33 -0400
commite89abce1b01dda89efdf230101d1aa3c877b3b6c (patch)
treecfb27a564c1f4cfff30d18dbf591efd48283b154
parentAdding Twentyninetten (diff)
downloadblogs-gentoo-e89abce1b01dda89efdf230101d1aa3c877b3b6c.tar.gz
blogs-gentoo-e89abce1b01dda89efdf230101d1aa3c877b3b6c.tar.bz2
blogs-gentoo-e89abce1b01dda89efdf230101d1aa3c877b3b6c.zip
Updating of Plugins and Themes
List of Plugins updates -- akismet.4.1.2 google-authenticator.0.52 jetpack.7.3.1 List of Themes Updates -- mantra.3.2.0 twentyfifteen.2.5 twentyfourteen.2.7 Signed-off-by: Yury German <blueknight@gentoo.org>
-rw-r--r--plugins/akismet/_inc/akismet.css6
-rw-r--r--plugins/akismet/_inc/akismet.js9
-rw-r--r--plugins/akismet/akismet.php4
-rw-r--r--plugins/akismet/class.akismet-admin.php4
-rw-r--r--plugins/akismet/class.akismet.php45
-rw-r--r--plugins/akismet/readme.txt13
-rw-r--r--plugins/akismet/views/get.php6
-rw-r--r--plugins/akismet/wrapper.php3
-rw-r--r--plugins/google-authenticator/google-authenticator.php15
-rw-r--r--plugins/google-authenticator/lang/google-authenticator-nl_NL.mobin0 -> 7309 bytes
-rw-r--r--plugins/google-authenticator/lang/google-authenticator-nl_NL.po317
-rw-r--r--plugins/google-authenticator/lang/google-authenticator-pt_BR.mobin0 -> 2971 bytes
-rw-r--r--plugins/google-authenticator/lang/google-authenticator-pt_BR.po123
-rw-r--r--plugins/google-authenticator/readme.txt13
-rw-r--r--plugins/jetpack/.svnignore8
-rw-r--r--plugins/jetpack/3rd-party/3rd-party.php23
-rw-r--r--plugins/jetpack/3rd-party/bbpress.php50
-rw-r--r--plugins/jetpack/3rd-party/beaverbuilder.php20
-rw-r--r--plugins/jetpack/3rd-party/bitly.php34
-rw-r--r--plugins/jetpack/3rd-party/buddypress.php9
-rw-r--r--plugins/jetpack/3rd-party/class.jetpack-amp-support.php300
-rw-r--r--plugins/jetpack/3rd-party/class.jetpack-modules-overrides.php143
-rw-r--r--plugins/jetpack/3rd-party/debug-bar.php19
-rw-r--r--plugins/jetpack/3rd-party/debug-bar/class.jetpack-search-debug-bar.php173
-rw-r--r--plugins/jetpack/3rd-party/debug-bar/debug-bar.css56
-rw-r--r--plugins/jetpack/3rd-party/debug-bar/debug-bar.js22
-rw-r--r--plugins/jetpack/3rd-party/domain-mapping.php113
-rw-r--r--plugins/jetpack/3rd-party/polldaddy.php7
-rw-r--r--plugins/jetpack/3rd-party/qtranslate-x.php19
-rw-r--r--plugins/jetpack/3rd-party/vaultpress.php42
-rw-r--r--plugins/jetpack/3rd-party/woocommerce-services.php133
-rw-r--r--plugins/jetpack/3rd-party/woocommerce.php105
-rw-r--r--plugins/jetpack/3rd-party/wpml.php62
-rw-r--r--plugins/jetpack/CODE-OF-CONDUCT.md28
-rw-r--r--plugins/jetpack/_inc/accessible-focus.js19
-rw-r--r--plugins/jetpack/_inc/blocks/contact-info/view.css1
-rw-r--r--plugins/jetpack/_inc/blocks/contact-info/view.js1
-rw-r--r--plugins/jetpack/_inc/blocks/contact-info/view.rtl.css1
-rw-r--r--plugins/jetpack/_inc/blocks/editor-beta.css1
-rw-r--r--plugins/jetpack/_inc/blocks/editor-beta.js25
-rw-r--r--plugins/jetpack/_inc/blocks/editor-beta.rtl.css1
-rw-r--r--plugins/jetpack/_inc/blocks/editor.css1
-rw-r--r--plugins/jetpack/_inc/blocks/editor.js25
-rw-r--r--plugins/jetpack/_inc/blocks/editor.rtl.css1
-rw-r--r--plugins/jetpack/_inc/blocks/gif/view.css1
-rw-r--r--plugins/jetpack/_inc/blocks/gif/view.js1
-rw-r--r--plugins/jetpack/_inc/blocks/gif/view.rtl.css1
-rw-r--r--plugins/jetpack/_inc/blocks/images/map-theme_black_and_white-1ead5946ca104d83676d6e3410e1d733.jpgbin85291 -> 0 bytes
-rw-r--r--plugins/jetpack/_inc/blocks/images/map-theme_default-2ceb449b599dbcbe2a90fead5a5f3824.jpgbin113462 -> 0 bytes
-rw-r--r--plugins/jetpack/_inc/blocks/images/map-theme_satellite-c74dc129bda9502fb0fb362bb627577e.jpgbin160272 -> 0 bytes
-rw-r--r--plugins/jetpack/_inc/blocks/images/map-theme_terrain-2b6e6c1c8d09cbdc58a4c0653be1a6e3.jpgbin108702 -> 0 bytes
-rw-r--r--plugins/jetpack/_inc/blocks/images/oval-3cc7669d571aef4e12f34b349e42d390.svg19
-rw-r--r--plugins/jetpack/_inc/blocks/images/paypal-button-1e53882e702881f8dfd958c141e65383.pngbin7496 -> 0 bytes
-rw-r--r--plugins/jetpack/_inc/blocks/images/paypal-button-2x-fe4d34770a47484f401cecbb892f8456.pngbin8186 -> 0 bytes
-rw-r--r--plugins/jetpack/_inc/blocks/index.json25
-rw-r--r--plugins/jetpack/_inc/blocks/mailchimp/view.css1
-rw-r--r--plugins/jetpack/_inc/blocks/mailchimp/view.js1
-rw-r--r--plugins/jetpack/_inc/blocks/mailchimp/view.rtl.css1
-rw-r--r--plugins/jetpack/_inc/blocks/map/view.css1
-rw-r--r--plugins/jetpack/_inc/blocks/map/view.js1
-rw-r--r--plugins/jetpack/_inc/blocks/map/view.rtl.css1
-rw-r--r--plugins/jetpack/_inc/blocks/repeat-visitor/view.js7
-rw-r--r--plugins/jetpack/_inc/blocks/slideshow/view.css1
-rw-r--r--plugins/jetpack/_inc/blocks/slideshow/view.js1
-rw-r--r--plugins/jetpack/_inc/blocks/slideshow/view.rtl.css1
-rw-r--r--plugins/jetpack/_inc/blocks/tiled-gallery/view.css1
-rw-r--r--plugins/jetpack/_inc/blocks/tiled-gallery/view.js1
-rw-r--r--plugins/jetpack/_inc/blocks/tiled-gallery/view.rtl.css1
-rw-r--r--plugins/jetpack/_inc/blocks/vendors~map/mapbox-gl.css1
-rw-r--r--plugins/jetpack/_inc/blocks/vendors~map/mapbox-gl.js1
-rw-r--r--plugins/jetpack/_inc/blocks/vendors~map/mapbox-gl.rtl.css1
-rw-r--r--plugins/jetpack/_inc/blocks/vendors~swiper.css1
-rw-r--r--plugins/jetpack/_inc/blocks/vendors~swiper.js1
-rw-r--r--plugins/jetpack/_inc/blocks/vendors~swiper.rtl.css1
-rw-r--r--plugins/jetpack/_inc/build/accessible-focus.min.js2
-rw-r--r--plugins/jetpack/_inc/build/admin.dops-style.css2681
-rw-r--r--plugins/jetpack/_inc/build/admin.dops-style.rtl.css2682
-rw-r--r--plugins/jetpack/_inc/build/admin.js1
-rw-r--r--plugins/jetpack/_inc/build/after-the-deadline/atd-autoproofread.min.js6
-rw-r--r--plugins/jetpack/_inc/build/after-the-deadline/atd-nonvis-editor-plugin.min.js5
-rw-r--r--plugins/jetpack/_inc/build/after-the-deadline/atd.core.min.js9
-rw-r--r--plugins/jetpack/_inc/build/after-the-deadline/jquery.atd.min.js17
-rw-r--r--plugins/jetpack/_inc/build/after-the-deadline/tinymce/editor_plugin.min.js18
-rw-r--r--plugins/jetpack/_inc/build/after-the-deadline/tinymce/plugin.min.js21
-rw-r--r--plugins/jetpack/_inc/build/carousel/jetpack-carousel.min.js4
-rw-r--r--plugins/jetpack/_inc/build/comment-likes/comment-like-count.min.js2
-rw-r--r--plugins/jetpack/_inc/build/contact-form/js/editor-view.min.js3
-rw-r--r--plugins/jetpack/_inc/build/contact-form/js/grunion-admin.min.js3
-rw-r--r--plugins/jetpack/_inc/build/contact-form/js/grunion-frontend.min.js2
-rw-r--r--plugins/jetpack/_inc/build/contact-form/js/grunion.min.js4
-rw-r--r--plugins/jetpack/_inc/build/contact-form/js/tinymce-plugin-form-button.min.js3
-rw-r--r--plugins/jetpack/_inc/build/custom-css/custom-css/js/core-customizer-css-preview.min.js4
-rw-r--r--plugins/jetpack/_inc/build/custom-css/custom-css/js/core-customizer-css.core-4.9.min.js2
-rw-r--r--plugins/jetpack/_inc/build/custom-css/custom-css/js/core-customizer-css.min.js2
-rw-r--r--plugins/jetpack/_inc/build/custom-css/custom-css/js/css-editor.min.js4
-rw-r--r--plugins/jetpack/_inc/build/custom-css/custom-css/js/use-codemirror.min.js3
-rw-r--r--plugins/jetpack/_inc/build/custom-post-types/comics/comics.min.js4
-rw-r--r--plugins/jetpack/_inc/build/custom-post-types/js/many-items.min.js3
-rw-r--r--plugins/jetpack/_inc/build/custom-post-types/js/menu-checkboxes.min.js3
-rw-r--r--plugins/jetpack/_inc/build/custom-post-types/js/nova-drag-drop.min.js4
-rw-r--r--plugins/jetpack/_inc/build/facebook-embed.min.js3
-rw-r--r--plugins/jetpack/_inc/build/gallery-settings.min.js5
-rw-r--r--plugins/jetpack/_inc/build/idc-notice.min.js3
-rw-r--r--plugins/jetpack/_inc/build/infinite-scroll/infinity.min.js4
-rw-r--r--plugins/jetpack/_inc/build/jetpack-admin.min.js2
-rw-r--r--plugins/jetpack/_inc/build/jetpack-connection-banner.min.js3
-rw-r--r--plugins/jetpack/_inc/build/jetpack-jitm.min.js2
-rw-r--r--plugins/jetpack/_inc/build/jetpack-modules.min.js2
-rw-r--r--plugins/jetpack/_inc/build/jetpack-modules.models.min.js2
-rw-r--r--plugins/jetpack/_inc/build/jetpack-modules.views.min.js2
-rw-r--r--plugins/jetpack/_inc/build/jquery.jetpack-resize.min.js24
-rw-r--r--plugins/jetpack/_inc/build/jquery.spin.min.js6
-rw-r--r--plugins/jetpack/_inc/build/lazy-images/js/lazy-images.min.js30
-rw-r--r--plugins/jetpack/_inc/build/likes/post-count-jetpack.min.js2
-rw-r--r--plugins/jetpack/_inc/build/likes/post-count.min.js3
-rw-r--r--plugins/jetpack/_inc/build/likes/queuehandler.min.js3
-rw-r--r--plugins/jetpack/_inc/build/masterbar/tracks-events.min.js3
-rw-r--r--plugins/jetpack/_inc/build/minileven/theme/pub/minileven/js/small-menu.min.js7
-rw-r--r--plugins/jetpack/_inc/build/photon/photon.min.js3
-rw-r--r--plugins/jetpack/_inc/build/postmessage.min.js25
-rw-r--r--plugins/jetpack/_inc/build/related-posts/related-posts-customizer.min.js5
-rw-r--r--plugins/jetpack/_inc/build/related-posts/related-posts.min.js4
-rw-r--r--plugins/jetpack/_inc/build/sharedaddy/admin-sharing.min.js4
-rw-r--r--plugins/jetpack/_inc/build/sharedaddy/sharing.min.js4
-rw-r--r--plugins/jetpack/_inc/build/shortcodes/js/brightcove.min.js3
-rw-r--r--plugins/jetpack/_inc/build/shortcodes/js/gist.min.js2
-rw-r--r--plugins/jetpack/_inc/build/shortcodes/js/instagram.min.js3
-rw-r--r--plugins/jetpack/_inc/build/shortcodes/js/jmpress.min.js22
-rw-r--r--plugins/jetpack/_inc/build/shortcodes/js/main.min.js2
-rw-r--r--plugins/jetpack/_inc/build/shortcodes/js/quiz.min.js2
-rw-r--r--plugins/jetpack/_inc/build/shortcodes/js/recipes-printthis.min.js42
-rw-r--r--plugins/jetpack/_inc/build/shortcodes/js/recipes.min.js3
-rw-r--r--plugins/jetpack/_inc/build/shortcodes/js/slideshow-shortcode.min.js4
-rw-r--r--plugins/jetpack/_inc/build/spin.min.js7
-rw-r--r--plugins/jetpack/_inc/build/static-ie-notice.html7
-rw-r--r--plugins/jetpack/_inc/build/static-noscript-notice.html1
-rw-r--r--plugins/jetpack/_inc/build/static-version-notice.html1
-rw-r--r--plugins/jetpack/_inc/build/static.html1
-rw-r--r--plugins/jetpack/_inc/build/style.min.css2
-rw-r--r--plugins/jetpack/_inc/build/style.min.rtl.css4
-rw-r--r--plugins/jetpack/_inc/build/tiled-gallery/tiled-gallery/tiled-gallery.min.js3
-rw-r--r--plugins/jetpack/_inc/build/twitter-timeline.min.js3
-rw-r--r--plugins/jetpack/_inc/build/videopress/js/editor-view.min.js3
-rw-r--r--plugins/jetpack/_inc/build/videopress/js/media-video-widget-extensions.min.js2
-rw-r--r--plugins/jetpack/_inc/build/videopress/js/videopress-plupload.min.js3
-rw-r--r--plugins/jetpack/_inc/build/videopress/js/videopress-uploader.min.js3
-rw-r--r--plugins/jetpack/_inc/build/widget-visibility/widget-conditions/widget-conditions.min.js7
-rw-r--r--plugins/jetpack/_inc/build/widgets/contact-info/contact-info-admin.min.js2
-rw-r--r--plugins/jetpack/_inc/build/widgets/customizer-utils.min.js3
-rw-r--r--plugins/jetpack/_inc/build/widgets/eu-cookie-law/eu-cookie-law-admin.min.js2
-rw-r--r--plugins/jetpack/_inc/build/widgets/eu-cookie-law/eu-cookie-law.min.js2
-rw-r--r--plugins/jetpack/_inc/build/widgets/gallery/js/admin.min.js4
-rw-r--r--plugins/jetpack/_inc/build/widgets/gallery/js/gallery.min.js2
-rw-r--r--plugins/jetpack/_inc/build/widgets/google-translate/google-translate.min.js5
-rw-r--r--plugins/jetpack/_inc/build/widgets/milestone/admin.min.js2
-rw-r--r--plugins/jetpack/_inc/build/widgets/milestone/milestone.min.js3
-rw-r--r--plugins/jetpack/_inc/build/widgets/search/js/search-widget-admin.min.js3
-rw-r--r--plugins/jetpack/_inc/build/widgets/search/js/search-widget.min.js2
-rw-r--r--plugins/jetpack/_inc/build/widgets/simple-payments/customizer.min.js4
-rw-r--r--plugins/jetpack/_inc/build/widgets/social-icons/social-icons-admin.min.js2
-rw-r--r--plugins/jetpack/_inc/build/widgets/twitter-timeline-admin.min.js2
-rw-r--r--plugins/jetpack/_inc/class.jetpack-provision.php284
-rw-r--r--plugins/jetpack/_inc/facebook-embed.js36
-rw-r--r--plugins/jetpack/_inc/fonts/automatticons/automatticons.eotbin8292 -> 0 bytes
-rw-r--r--plugins/jetpack/_inc/fonts/automatticons/automatticons.svg44
-rw-r--r--plugins/jetpack/_inc/fonts/automatticons/automatticons.ttfbin12012 -> 0 bytes
-rw-r--r--plugins/jetpack/_inc/fonts/automatticons/automatticons.woffbin8944 -> 0 bytes
-rw-r--r--plugins/jetpack/_inc/fonts/jetpack/jetpack.eotbin1654 -> 0 bytes
-rw-r--r--plugins/jetpack/_inc/fonts/jetpack/jetpack.svg33
-rw-r--r--plugins/jetpack/_inc/fonts/jetpack/jetpack.ttfbin1480 -> 0 bytes
-rw-r--r--plugins/jetpack/_inc/fonts/jetpack/jetpack.woffbin1056 -> 0 bytes
-rw-r--r--plugins/jetpack/_inc/footer.php6
-rw-r--r--plugins/jetpack/_inc/gallery-settings.js33
-rw-r--r--plugins/jetpack/_inc/genericons.php13
-rw-r--r--plugins/jetpack/_inc/genericons/COPYING.txt9
-rw-r--r--plugins/jetpack/_inc/genericons/LICENSE.txt339
-rw-r--r--plugins/jetpack/_inc/genericons/README.md218
-rw-r--r--plugins/jetpack/_inc/genericons/genericons.css11
-rw-r--r--plugins/jetpack/_inc/genericons/genericons/Genericons.eotbin22374 -> 0 bytes
-rw-r--r--plugins/jetpack/_inc/genericons/genericons/Genericons.svg537
-rw-r--r--plugins/jetpack/_inc/genericons/genericons/Genericons.ttfbin22188 -> 0 bytes
-rw-r--r--plugins/jetpack/_inc/genericons/genericons/Genericons.woffbin13988 -> 0 bytes
-rw-r--r--plugins/jetpack/_inc/genericons/genericons/genericons.css263
-rw-r--r--plugins/jetpack/_inc/genericons/genericons/rtl/genericons-rtl.css265
-rw-r--r--plugins/jetpack/_inc/header.php2
-rw-r--r--plugins/jetpack/_inc/idc-notice.js231
-rw-r--r--plugins/jetpack/_inc/jetpack-admin.js58
-rw-r--r--plugins/jetpack/_inc/jetpack-connection-banner.js83
-rw-r--r--plugins/jetpack/_inc/jetpack-jitm.js187
-rw-r--r--plugins/jetpack/_inc/jetpack-modules.js71
-rw-r--r--plugins/jetpack/_inc/jetpack-modules.models.js72
-rw-r--r--plugins/jetpack/_inc/jetpack-modules.views.js62
-rw-r--r--plugins/jetpack/_inc/jetpack-server-sandbox.php63
-rw-r--r--plugins/jetpack/_inc/jetpack-strings.php801
-rw-r--r--plugins/jetpack/_inc/jquery.jetpack-resize.js285
-rw-r--r--plugins/jetpack/_inc/jquery.spin.js104
-rw-r--r--plugins/jetpack/_inc/lib/admin-pages/class.jetpack-admin-page.php352
-rw-r--r--plugins/jetpack/_inc/lib/admin-pages/class.jetpack-landing-page.php3
-rw-r--r--plugins/jetpack/_inc/lib/admin-pages/class.jetpack-react-page.php422
-rw-r--r--plugins/jetpack/_inc/lib/admin-pages/class.jetpack-settings-page.php154
-rw-r--r--plugins/jetpack/_inc/lib/class.color.php755
-rw-r--r--plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php3327
-rw-r--r--plugins/jetpack/_inc/lib/class.jetpack-automatic-install-skin.php111
-rw-r--r--plugins/jetpack/_inc/lib/class.jetpack-iframe-embed.php84
-rw-r--r--plugins/jetpack/_inc/lib/class.jetpack-keyring-service-helper.php204
-rw-r--r--plugins/jetpack/_inc/lib/class.jetpack-password-checker.php1288
-rw-r--r--plugins/jetpack/_inc/lib/class.jetpack-photon-image-sizes.php182
-rw-r--r--plugins/jetpack/_inc/lib/class.jetpack-photon-image.php243
-rw-r--r--plugins/jetpack/_inc/lib/class.jetpack-search-performance-logger.php83
-rw-r--r--plugins/jetpack/_inc/lib/class.media-extractor.php436
-rw-r--r--plugins/jetpack/_inc/lib/class.media-summary.php354
-rw-r--r--plugins/jetpack/_inc/lib/class.media.php505
-rw-r--r--plugins/jetpack/_inc/lib/core-api/class-wpcom-rest-field-controller.php330
-rw-r--r--plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-module-endpoints.php1769
-rw-r--r--plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-site-endpoints.php60
-rw-r--r--plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-widgets-endpoints.php56
-rw-r--r--plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-xmlrpc-consumer-endpoint.php39
-rw-r--r--plugins/jetpack/_inc/lib/core-api/load-wpcom-endpoints.php40
-rw-r--r--plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/business-hours.php49
-rw-r--r--plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-mailchimp.php79
-rw-r--r--plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/gutenberg-available-extensions.php71
-rw-r--r--plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/hello.php22
-rw-r--r--plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/publicize-connection-test-results.php121
-rw-r--r--plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/publicize-connections.php194
-rw-r--r--plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/publicize-services.php167
-rw-r--r--plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/service-api-keys.php281
-rw-r--r--plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/sites-posts-featured-media-url.php37
-rw-r--r--plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/subscribers.php62
-rw-r--r--plugins/jetpack/_inc/lib/core-api/wpcom-fields/attachment-fields-videopress.php171
-rw-r--r--plugins/jetpack/_inc/lib/core-api/wpcom-fields/post-fields-publicize-connections.php353
-rw-r--r--plugins/jetpack/_inc/lib/debugger/0-load.php13
-rw-r--r--plugins/jetpack/_inc/lib/debugger/class-jetpack-cxn-test-base.php302
-rw-r--r--plugins/jetpack/_inc/lib/debugger/class-jetpack-cxn-tests.php338
-rw-r--r--plugins/jetpack/_inc/lib/debugger/class-jetpack-debugger.php530
-rw-r--r--plugins/jetpack/_inc/lib/functions.wp-notify.php353
-rw-r--r--plugins/jetpack/_inc/lib/icalendar-reader.php913
-rw-r--r--plugins/jetpack/_inc/lib/jetpack-wpes-query-builder/jetpack-wpes-query-builder.php341
-rw-r--r--plugins/jetpack/_inc/lib/jetpack-wpes-query-builder/jetpack-wpes-query-parser.php683
-rw-r--r--plugins/jetpack/_inc/lib/markdown/0-load.php6
-rw-r--r--plugins/jetpack/_inc/lib/markdown/README.md19
-rw-r--r--plugins/jetpack/_inc/lib/markdown/extra.php3207
-rw-r--r--plugins/jetpack/_inc/lib/markdown/gfm.php400
-rw-r--r--plugins/jetpack/_inc/lib/plugins.php132
-rw-r--r--plugins/jetpack/_inc/lib/tonesque.php237
-rw-r--r--plugins/jetpack/_inc/lib/tracks/class.tracks-client.php191
-rw-r--r--plugins/jetpack/_inc/lib/tracks/class.tracks-event.php149
-rw-r--r--plugins/jetpack/_inc/lib/tracks/client.php130
-rw-r--r--plugins/jetpack/_inc/lib/tracks/tracks-ajax.js63
-rw-r--r--plugins/jetpack/_inc/lib/tracks/tracks-callables.js72
-rw-r--r--plugins/jetpack/_inc/lib/widgets.php776
-rw-r--r--plugins/jetpack/_inc/postmessage.js438
-rw-r--r--plugins/jetpack/_inc/social-logos.php14
-rw-r--r--plugins/jetpack/_inc/social-logos/social-logos.css257
-rw-r--r--plugins/jetpack/_inc/social-logos/social-logos.eotbin9982 -> 0 bytes
-rw-r--r--plugins/jetpack/_inc/social-logos/social-logos.html428
-rw-r--r--plugins/jetpack/_inc/social-logos/social-logos.min.css1
-rw-r--r--plugins/jetpack/_inc/social-logos/social-logos.ttfbin9792 -> 0 bytes
-rw-r--r--plugins/jetpack/_inc/social-logos/social-logos.woffbin17984 -> 0 bytes
-rw-r--r--plugins/jetpack/_inc/social-logos/social-logos.woff2bin5628 -> 0 bytes
-rw-r--r--plugins/jetpack/_inc/spin.js349
-rw-r--r--plugins/jetpack/_inc/twitter-timeline.js10
-rw-r--r--plugins/jetpack/bin/build-asset-cdn-json.php20
-rwxr-xr-xplugins/jetpack/bin/partner-cancel.sh68
-rwxr-xr-xplugins/jetpack/bin/partner-provision.sh228
-rw-r--r--plugins/jetpack/changelog.txt4247
-rw-r--r--plugins/jetpack/class.frame-nonce-preview.php119
-rw-r--r--plugins/jetpack/class.jetpack-admin.php280
-rw-r--r--plugins/jetpack/class.jetpack-affiliate.php78
-rw-r--r--plugins/jetpack/class.jetpack-autoupdate.php302
-rw-r--r--plugins/jetpack/class.jetpack-bbpress-json-api-compat.php98
-rw-r--r--plugins/jetpack/class.jetpack-cli.php1515
-rw-r--r--plugins/jetpack/class.jetpack-client-server.php290
-rw-r--r--plugins/jetpack/class.jetpack-client.php388
-rw-r--r--plugins/jetpack/class.jetpack-connection-banner.php324
-rw-r--r--plugins/jetpack/class.jetpack-constants.php94
-rw-r--r--plugins/jetpack/class.jetpack-data.php128
-rw-r--r--plugins/jetpack/class.jetpack-debugger.php6
-rw-r--r--plugins/jetpack/class.jetpack-error.php3
-rw-r--r--plugins/jetpack/class.jetpack-gutenberg.php662
-rw-r--r--plugins/jetpack/class.jetpack-heartbeat.php165
-rw-r--r--plugins/jetpack/class.jetpack-idc.php700
-rw-r--r--plugins/jetpack/class.jetpack-ixr-client.php135
-rw-r--r--plugins/jetpack/class.jetpack-jitm.php408
-rw-r--r--plugins/jetpack/class.jetpack-modules-list-table.php345
-rw-r--r--plugins/jetpack/class.jetpack-network-sites-list-table.php148
-rw-r--r--plugins/jetpack/class.jetpack-network.php776
-rw-r--r--plugins/jetpack/class.jetpack-options.php592
-rw-r--r--plugins/jetpack/class.jetpack-plan.php231
-rw-r--r--plugins/jetpack/class.jetpack-post-images.php790
-rw-r--r--plugins/jetpack/class.jetpack-signature.php266
-rw-r--r--plugins/jetpack/class.jetpack-tracks.php92
-rw-r--r--plugins/jetpack/class.jetpack-twitter-cards.php270
-rw-r--r--plugins/jetpack/class.jetpack-user-agent.php1475
-rw-r--r--plugins/jetpack/class.jetpack-xmlrpc-server.php786
-rw-r--r--plugins/jetpack/class.jetpack.php7389
-rw-r--r--plugins/jetpack/class.json-api-endpoints.php2091
-rw-r--r--plugins/jetpack/class.json-api.php782
-rw-r--r--plugins/jetpack/class.photon.php1265
-rw-r--r--plugins/jetpack/composer.json26
-rw-r--r--plugins/jetpack/css/dashboard-widget-rtl.css186
-rw-r--r--plugins/jetpack/css/dashboard-widget-rtl.css.map1
-rw-r--r--plugins/jetpack/css/dashboard-widget-rtl.css.min.map0
-rw-r--r--plugins/jetpack/css/dashboard-widget-rtl.min.css3
-rw-r--r--plugins/jetpack/css/dashboard-widget.css186
-rw-r--r--plugins/jetpack/css/dashboard-widget.css.map1
-rw-r--r--plugins/jetpack/css/dashboard-widget.css.min.map0
-rw-r--r--plugins/jetpack/css/dashboard-widget.min.css3
-rw-r--r--plugins/jetpack/css/jetpack-admin-jitm-rtl.css478
-rw-r--r--plugins/jetpack/css/jetpack-admin-jitm-rtl.css.map1
-rw-r--r--plugins/jetpack/css/jetpack-admin-jitm-rtl.css.min.map0
-rw-r--r--plugins/jetpack/css/jetpack-admin-jitm-rtl.min.css3
-rw-r--r--plugins/jetpack/css/jetpack-admin-jitm.css478
-rw-r--r--plugins/jetpack/css/jetpack-admin-jitm.css.map1
-rw-r--r--plugins/jetpack/css/jetpack-admin-jitm.css.min.map0
-rw-r--r--plugins/jetpack/css/jetpack-admin-jitm.min.css3
-rw-r--r--plugins/jetpack/css/jetpack-admin-rtl.css1494
-rw-r--r--plugins/jetpack/css/jetpack-admin-rtl.css.map1
-rw-r--r--plugins/jetpack/css/jetpack-admin-rtl.css.min.map0
-rw-r--r--plugins/jetpack/css/jetpack-admin-rtl.min.css3
-rw-r--r--plugins/jetpack/css/jetpack-admin.css1494
-rw-r--r--plugins/jetpack/css/jetpack-admin.css.map1
-rw-r--r--plugins/jetpack/css/jetpack-admin.css.min.map0
-rw-r--r--plugins/jetpack/css/jetpack-admin.min.css3
-rw-r--r--plugins/jetpack/css/jetpack-banners-rtl.css477
-rw-r--r--plugins/jetpack/css/jetpack-banners-rtl.css.map1
-rw-r--r--plugins/jetpack/css/jetpack-banners-rtl.css.min.map0
-rw-r--r--plugins/jetpack/css/jetpack-banners-rtl.min.css3
-rw-r--r--plugins/jetpack/css/jetpack-banners.css477
-rw-r--r--plugins/jetpack/css/jetpack-banners.css.map1
-rw-r--r--plugins/jetpack/css/jetpack-banners.css.min.map0
-rw-r--r--plugins/jetpack/css/jetpack-banners.min.css3
-rw-r--r--plugins/jetpack/css/jetpack-icons-rtl.css24
-rw-r--r--plugins/jetpack/css/jetpack-icons-rtl.css.map1
-rw-r--r--plugins/jetpack/css/jetpack-icons-rtl.css.min.map0
-rw-r--r--plugins/jetpack/css/jetpack-icons-rtl.min.css3
-rw-r--r--plugins/jetpack/css/jetpack-icons.css24
-rw-r--r--plugins/jetpack/css/jetpack-icons.css.map1
-rw-r--r--plugins/jetpack/css/jetpack-icons.css.min.map0
-rw-r--r--plugins/jetpack/css/jetpack-icons.min.css3
-rw-r--r--plugins/jetpack/css/jetpack-idc-admin-bar-rtl.css33
-rw-r--r--plugins/jetpack/css/jetpack-idc-admin-bar-rtl.css.map1
-rw-r--r--plugins/jetpack/css/jetpack-idc-admin-bar-rtl.css.min.map0
-rw-r--r--plugins/jetpack/css/jetpack-idc-admin-bar-rtl.min.css3
-rw-r--r--plugins/jetpack/css/jetpack-idc-admin-bar.css33
-rw-r--r--plugins/jetpack/css/jetpack-idc-admin-bar.css.map1
-rw-r--r--plugins/jetpack/css/jetpack-idc-admin-bar.css.min.map0
-rw-r--r--plugins/jetpack/css/jetpack-idc-admin-bar.min.css3
-rw-r--r--plugins/jetpack/css/jetpack-idc-rtl.css217
-rw-r--r--plugins/jetpack/css/jetpack-idc-rtl.css.map1
-rw-r--r--plugins/jetpack/css/jetpack-idc-rtl.css.min.map0
-rw-r--r--plugins/jetpack/css/jetpack-idc-rtl.min.css3
-rw-r--r--plugins/jetpack/css/jetpack-idc.css217
-rw-r--r--plugins/jetpack/css/jetpack-idc.css.map1
-rw-r--r--plugins/jetpack/css/jetpack-idc.css.min.map0
-rw-r--r--plugins/jetpack/css/jetpack-idc.min.css3
-rw-r--r--plugins/jetpack/css/jetpack-rtl.css30
-rw-r--r--plugins/jetpack/css/jetpack.css30
-rw-r--r--plugins/jetpack/extensions/README.md40
-rw-r--r--plugins/jetpack/extensions/blocks/business-hours/business-hours.php132
-rw-r--r--plugins/jetpack/extensions/blocks/contact-info/class-jetpack-contact-info-block.php114
-rw-r--r--plugins/jetpack/extensions/blocks/contact-info/contact-info.php40
-rw-r--r--plugins/jetpack/extensions/blocks/gif/gif.php67
-rw-r--r--plugins/jetpack/extensions/blocks/mailchimp/mailchimp.php136
-rw-r--r--plugins/jetpack/extensions/blocks/map/map.php37
-rw-r--r--plugins/jetpack/extensions/blocks/markdown/markdown.php20
-rw-r--r--plugins/jetpack/extensions/blocks/repeat-visitor/repeat-visitor.php41
-rw-r--r--plugins/jetpack/extensions/blocks/slideshow/slideshow.php35
-rw-r--r--plugins/jetpack/extensions/blocks/tiled-gallery/tiled-gallery.php46
-rw-r--r--plugins/jetpack/extensions/blocks/vr/vr.php10
-rw-r--r--plugins/jetpack/extensions/blocks/wordads/wordads.php121
-rw-r--r--plugins/jetpack/functions.compat.php90
-rw-r--r--plugins/jetpack/functions.gallery.php101
-rw-r--r--plugins/jetpack/functions.global.php208
-rw-r--r--plugins/jetpack/functions.opengraph.php400
-rw-r--r--plugins/jetpack/functions.photon.php317
-rw-r--r--plugins/jetpack/images/apps.svg98
-rw-r--r--plugins/jetpack/images/apps/triple-devices.svg1
-rw-r--r--plugins/jetpack/images/block-picker.pngbin17264 -> 0 bytes
-rw-r--r--plugins/jetpack/images/cf-ss.pngbin27513 -> 0 bytes
-rw-r--r--plugins/jetpack/images/characters.svg1
-rw-r--r--plugins/jetpack/images/cloud-based.svg1
-rw-r--r--plugins/jetpack/images/connect-jetpack.svg1
-rw-r--r--plugins/jetpack/images/connect-plug.svg19
-rw-r--r--plugins/jetpack/images/customize-theme-2.svg248
-rw-r--r--plugins/jetpack/images/customize-theme.svg1
-rw-r--r--plugins/jetpack/images/generating-cash-2.svg1
-rw-r--r--plugins/jetpack/images/get-apps.svg1
-rw-r--r--plugins/jetpack/images/jetpack-design.svg1
-rw-r--r--plugins/jetpack/images/jetpack-google-analytics.svg1
-rw-r--r--plugins/jetpack/images/jetpack-gutenberg.svg1
-rw-r--r--plugins/jetpack/images/jetpack-icon.jpgbin9872 -> 0 bytes
-rw-r--r--plugins/jetpack/images/jetpack-logo-green.svg13
-rw-r--r--plugins/jetpack/images/jetpack-logo.pngbin706 -> 0 bytes
-rw-r--r--plugins/jetpack/images/jetpack-logo.svg27
-rw-r--r--plugins/jetpack/images/jetpack-marketing.svg1
-rw-r--r--plugins/jetpack/images/jetpack-performance-icon.svg1
-rw-r--r--plugins/jetpack/images/jetpack-performance.svg1
-rw-r--r--plugins/jetpack/images/jetpack-powering-up.svg229
-rw-r--r--plugins/jetpack/images/jetpack-search-icon.svg1
-rw-r--r--plugins/jetpack/images/jetpack-search.svg281
-rw-r--r--plugins/jetpack/images/jetpack-security.svg1
-rw-r--r--plugins/jetpack/images/jetpack-site-activity.svg1
-rw-r--r--plugins/jetpack/images/jetpack-spam.svg1
-rw-r--r--plugins/jetpack/images/jetpack-speed-icon.svg1
-rw-r--r--plugins/jetpack/images/jetpack-speed.svg1
-rw-r--r--plugins/jetpack/images/jetpack-support.svg1
-rw-r--r--plugins/jetpack/images/jetpack-themes.svg1
-rw-r--r--plugins/jetpack/images/jetpack-updates.svg1
-rw-r--r--plugins/jetpack/images/jetpack-video-hosting.svg1
-rw-r--r--plugins/jetpack/images/jetpack-welcome.svg205
-rw-r--r--plugins/jetpack/images/jetpack-wordads.svg1
-rw-r--r--plugins/jetpack/images/jupiter.svg1
-rw-r--r--plugins/jetpack/images/man-and-laptop.svg1
-rw-r--r--plugins/jetpack/images/people-around-page.svg1
-rw-r--r--plugins/jetpack/images/plans/plan-business.svg1
-rw-r--r--plugins/jetpack/images/plans/plan-free.svg1
-rw-r--r--plugins/jetpack/images/plans/plan-personal.svg1
-rw-r--r--plugins/jetpack/images/plans/plan-premium.svg1
-rw-r--r--plugins/jetpack/images/rss/blue-large.pngbin1743 -> 0 bytes
-rw-r--r--plugins/jetpack/images/rss/blue-medium.pngbin1175 -> 0 bytes
-rw-r--r--plugins/jetpack/images/rss/blue-small.pngbin578 -> 0 bytes
-rw-r--r--plugins/jetpack/images/rss/green-large.pngbin1603 -> 0 bytes
-rw-r--r--plugins/jetpack/images/rss/green-medium.pngbin1011 -> 0 bytes
-rw-r--r--plugins/jetpack/images/rss/green-small.pngbin494 -> 0 bytes
-rw-r--r--plugins/jetpack/images/rss/orange-large.pngbin2495 -> 0 bytes
-rw-r--r--plugins/jetpack/images/rss/orange-medium.pngbin1582 -> 0 bytes
-rw-r--r--plugins/jetpack/images/rss/orange-small.pngbin652 -> 0 bytes
-rw-r--r--plugins/jetpack/images/rss/pink-large.pngbin3458 -> 0 bytes
-rw-r--r--plugins/jetpack/images/rss/pink-medium.pngbin1499 -> 0 bytes
-rw-r--r--plugins/jetpack/images/rss/pink-small.pngbin630 -> 0 bytes
-rw-r--r--plugins/jetpack/images/rss/purple-large.pngbin3617 -> 0 bytes
-rw-r--r--plugins/jetpack/images/rss/purple-medium.pngbin1622 -> 0 bytes
-rw-r--r--plugins/jetpack/images/rss/purple-small.pngbin630 -> 0 bytes
-rw-r--r--plugins/jetpack/images/rss/red-large.pngbin3388 -> 0 bytes
-rw-r--r--plugins/jetpack/images/rss/red-medium.pngbin1536 -> 0 bytes
-rw-r--r--plugins/jetpack/images/rss/red-small.pngbin595 -> 0 bytes
-rw-r--r--plugins/jetpack/images/rss/silver-large.pngbin1946 -> 0 bytes
-rw-r--r--plugins/jetpack/images/rss/silver-medium.pngbin806 -> 0 bytes
-rw-r--r--plugins/jetpack/images/rss/silver-small.pngbin331 -> 0 bytes
-rw-r--r--plugins/jetpack/images/security.svg1
-rw-r--r--plugins/jetpack/images/stars-full.svg1
-rw-r--r--plugins/jetpack/images/stars-left.svg3
-rw-r--r--plugins/jetpack/images/stars-right.svg3
-rw-r--r--plugins/jetpack/images/stats-example-lrg.pngbin60642 -> 0 bytes
-rw-r--r--plugins/jetpack/images/stats-example-med.pngbin31238 -> 0 bytes
-rw-r--r--plugins/jetpack/images/stats-example-sm.pngbin14556 -> 0 bytes
-rw-r--r--plugins/jetpack/images/stats-people.svg1
-rw-r--r--plugins/jetpack/images/stats-smiley.gifbin50 -> 0 bytes
-rw-r--r--plugins/jetpack/images/stats.svg32
-rw-r--r--plugins/jetpack/images/themes.svg1
-rw-r--r--plugins/jetpack/images/white-clouds-reverse.svg16
-rw-r--r--plugins/jetpack/images/white-clouds.svg3
-rw-r--r--plugins/jetpack/images/wordads.svg1
-rw-r--r--plugins/jetpack/jetpack.php163
-rw-r--r--plugins/jetpack/json-api-config.php15
-rw-r--r--plugins/jetpack/json-endpoints.php132
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-add-widget-endpoint.php103
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-autosave-post-v1-1-endpoint.php111
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-bulk-delete-post-endpoint.php68
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-bulk-restore-post-endpoint.php69
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-bulk-update-comments-endpoint.php219
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-comment-endpoint.php207
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-delete-media-endpoint.php58
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-delete-media-v1-1-endpoint.php69
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-edit-media-v1-2-endpoint.php428
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-autosave-v1-1-endpoint.php72
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comment-counts-endpoint.php72
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comment-endpoint.php38
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comment-history-endpoint.php53
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comments-tree-endpoint.php187
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comments-tree-v1-1-endpoint.php92
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comments-tree-v1-2-endpoint.php148
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-customcss.php58
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-media-endpoint.php49
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-media-v1-1-endpoint.php64
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-media-v1-2-endpoint.php72
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-counts-v1-1-endpoint.php137
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-endpoint.php81
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-v1-1-endpoint.php73
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-endpoint.php735
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-v1-2-endpoint.php62
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-taxonomies-endpoint.php144
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-taxonomy-endpoint.php59
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-get-term-endpoint.php54
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-comments-endpoint.php309
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-embeds-endpoint.php60
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-media-endpoint.php82
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-media-v1-1-endpoint.php288
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-media-v1-2-endpoint.php77
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-type-taxonomies-endpoint.php98
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-types-endpoint.php116
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-endpoint.php353
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-v1-1-endpoint.php529
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-v1-2-endpoint.php433
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-roles-endpoint.php135
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-shortcodes-endpoint.php48
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-terms-endpoint.php112
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-list-users-endpoint.php177
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-menus-v1-1-endpoint.php824
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-post-endpoint.php658
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-post-v1-1-endpoint.php353
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-render-embed-endpoint.php75
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-render-embed-reversal-endpoint.php108
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-render-endpoint.php145
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-render-shortcode-endpoint.php71
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-sharing-buttons-endpoint.php644
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-endpoint.php863
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-v1-2-endpoint.php164
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-v1-3-endpoint.php157
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-v1-4-endpoint.php127
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-site-user-endpoint.php221
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-taxonomy-endpoint.php30
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-comment-endpoint.php393
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-customcss.php86
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-media-endpoint.php80
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-media-v1-1-endpoint.php134
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-endpoint.php921
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-1-endpoint.php1005
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-2-endpoint.php873
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-site-homepage-endpoint.php77
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-site-logo-endpoint.php96
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-taxonomy-endpoint.php314
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-term-endpoint.php238
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-update-user-endpoint.php165
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-upload-media-endpoint.php94
-rw-r--r--plugins/jetpack/json-endpoints/class.wpcom-json-api-upload-media-v1-1-endpoint.php176
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-check-capabilities-endpoint.php26
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-core-endpoint.php20
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-core-modify-endpoint.php75
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-cron-endpoint.php252
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-endpoint.php115
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-comment-backup-endpoint.php52
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-database-object-backup-endpoint.php97
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-option-backup-endpoint.php35
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-post-backup-endpoint.php31
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-term-backup-endpoint.php32
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-user-backup-endpoint.php32
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-jps-woocommerce-connect-endpoint.php58
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-log-endpoint.php16
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-maybe-auto-update-endpoint.php32
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-modules-endpoint.php125
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-modules-get-endpoint.php6
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-modules-list-endpoint.php13
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-modules-modify-endpoint.php62
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-delete-endpoint.php78
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-endpoint.php321
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-get-endpoint.php28
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-install-endpoint.php96
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-list-endpoint.php36
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-modify-endpoint.php420
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-modify-v1-2-endpoint.php191
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-new-endpoint.php136
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-sync-endpoint.php319
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-active-endpoint.php50
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-delete-endpoint.php60
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-endpoint.php178
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-get-endpoint.php6
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-install-endpoint.php173
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-list-endpoint.php13
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-modify-endpoint.php130
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-new-endpoint.php83
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-translations-endpoint.php20
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-translations-modify-endpoint.php29
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-updates-status-endpoint.php34
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-user-connect-endpoint.php30
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-user-create-endpoint.php72
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.wpcom-json-api-get-option-endpoint.php41
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/class.wpcom-json-api-update-option-endpoint.php31
-rw-r--r--plugins/jetpack/json-endpoints/jetpack/json-api-jetpack-endpoints.php1232
-rw-r--r--plugins/jetpack/languages/jetpack-af.mobin12920 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-ary.mobin168034 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-az.mobin125957 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-bg_BG.mobin234980 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-bs_BA.mobin47041 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-ca.mobin56874 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-ckb.mobin75531 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-cs_CZ.mobin79810 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-cy.mobin67666 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-da_DK.mobin43005 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-es_MX.mobin269203 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-gd.mobin45801 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-gl_ES.mobin271096 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-hu_HU.mobin158501 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-is_IS.mobin44896 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-ka_GE.mobin2669 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-lt_LT.mobin18838 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-lv.mobin5090 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-mk_MK.mobin21138 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-ms_MY.mobin24910 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-my_MM.mobin18713 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-nn_NO.mobin23836 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-pl_PL.mobin174734 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-pt_PT.mobin61949 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-sa_IN.mobin1075 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-si_LK.mobin39529 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-sl_SI.mobin9766 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-sr_RS.mobin46126 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-te.mobin26461 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-th.mobin29342 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-uk.mobin53602 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-ur.mobin5171 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/jetpack-vi.mobin27771 -> 0 bytes
-rw-r--r--plugins/jetpack/languages/json/jetpack-af-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-ar-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-ary-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-az-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-bg_BG-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-bs_BA-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-ca-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-ckb-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-cs_CZ-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-cy-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-da_DK-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-de_DE-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-de_DE_formal-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-el-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-en_AU-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-en_CA-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-en_GB-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-en_NZ-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-en_ZA-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-eo-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-es_AR-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-es_CL-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-es_CR-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-es_ES-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-es_MX-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-es_VE-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-fa_IR-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-fi-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-fr_BE-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-fr_FR-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-gd-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-gl_ES-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-he_IL-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-hr-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-hu_HU-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-id_ID-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-is_IS-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-it_IT-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-ja-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-ka_GE-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-ko_KR-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-lt_LT-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-lv-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-mk_MK-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-ms_MY-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-my_MM-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-nb_NO-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-nl_NL-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-nl_NL_formal-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-nn_NO-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-pl_PL-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-pt_BR-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-pt_PT-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-ro_RO-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-ru_RU-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-sa_IN-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-si_LK-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-sk_SK-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-sl_SI-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-sq-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-sr_RS-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-sv_SE-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-te-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-th-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-tr_TR-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-uk-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-ur-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-vi-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-zh_CN-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-zh_HK-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/json/jetpack-zh_TW-1bac79e646a8bf4081a5011ab72d5807.json1
-rw-r--r--plugins/jetpack/languages/readme.txt15
-rw-r--r--plugins/jetpack/locales.php2396
-rw-r--r--plugins/jetpack/modules/after-the-deadline.php364
-rw-r--r--plugins/jetpack/modules/after-the-deadline/atd-autoproofread.js93
-rw-r--r--plugins/jetpack/modules/after-the-deadline/atd-nonvis-editor-plugin.js268
-rw-r--r--plugins/jetpack/modules/after-the-deadline/atd-rtl.css122
-rw-r--r--plugins/jetpack/modules/after-the-deadline/atd-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/after-the-deadline/atd.core.js640
-rw-r--r--plugins/jetpack/modules/after-the-deadline/atd.css121
-rw-r--r--plugins/jetpack/modules/after-the-deadline/atd.min.css2
-rw-r--r--plugins/jetpack/modules/after-the-deadline/button.gifbin515 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/after-the-deadline/config-options.php143
-rw-r--r--plugins/jetpack/modules/after-the-deadline/config-unignore.php155
-rw-r--r--plugins/jetpack/modules/after-the-deadline/jquery.atd.js436
-rw-r--r--plugins/jetpack/modules/after-the-deadline/proxy.php113
-rw-r--r--plugins/jetpack/modules/after-the-deadline/rtl/atd-rtl.css124
-rw-r--r--plugins/jetpack/modules/after-the-deadline/tinymce/atdbuttontr.gifbin123 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/after-the-deadline/tinymce/css/content-rtl.css19
-rw-r--r--plugins/jetpack/modules/after-the-deadline/tinymce/css/content-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/after-the-deadline/tinymce/css/content.css18
-rw-r--r--plugins/jetpack/modules/after-the-deadline/tinymce/css/content.min.css2
-rw-r--r--plugins/jetpack/modules/after-the-deadline/tinymce/editor_plugin.js479
-rw-r--r--plugins/jetpack/modules/after-the-deadline/tinymce/plugin.js427
-rw-r--r--plugins/jetpack/modules/blocks.php6
-rw-r--r--plugins/jetpack/modules/calypsoify/README.md4
-rw-r--r--plugins/jetpack/modules/calypsoify/class.jetpack-calypsoify.php373
-rw-r--r--plugins/jetpack/modules/calypsoify/gutenberg-styles/button.scss143
-rw-r--r--plugins/jetpack/modules/calypsoify/mods-gutenberg.js23
-rw-r--r--plugins/jetpack/modules/calypsoify/mods.js68
-rw-r--r--plugins/jetpack/modules/calypsoify/style-gutenberg-rtl.min.css4
-rw-r--r--plugins/jetpack/modules/calypsoify/style-gutenberg.min.css2
-rw-r--r--plugins/jetpack/modules/calypsoify/style-rtl.min.css4
-rw-r--r--plugins/jetpack/modules/calypsoify/style.min.css2
-rw-r--r--plugins/jetpack/modules/carousel.php16
-rw-r--r--plugins/jetpack/modules/carousel/images/arrows-2x.pngbin10063 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/carousel/images/arrows.pngbin4529 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/carousel/images/carousel-likereblog-2x.pngbin1096 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/carousel/images/carousel-likereblog.pngbin547 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/carousel/images/carousel-link-2x.pngbin867 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/carousel/images/carousel-link.pngbin431 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/carousel/images/carousel-sprite-2x.pngbin2076 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/carousel/images/carousel-sprite.pngbin1318 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/carousel/jetpack-carousel-rtl.css1
-rw-r--r--plugins/jetpack/modules/carousel/jetpack-carousel.css1129
-rw-r--r--plugins/jetpack/modules/carousel/jetpack-carousel.js1609
-rw-r--r--plugins/jetpack/modules/carousel/jetpack-carousel.php820
-rw-r--r--plugins/jetpack/modules/carousel/rtl/jetpack-carousel-rtl.css1130
-rw-r--r--plugins/jetpack/modules/comment-likes.php205
-rw-r--r--plugins/jetpack/modules/comment-likes/admin-style.css45
-rw-r--r--plugins/jetpack/modules/comment-likes/comment-like-count.js38
-rw-r--r--plugins/jetpack/modules/comments.php42
-rw-r--r--plugins/jetpack/modules/comments/admin.php210
-rw-r--r--plugins/jetpack/modules/comments/base.php308
-rw-r--r--plugins/jetpack/modules/comments/comments.php626
-rw-r--r--plugins/jetpack/modules/contact-form.php29
-rw-r--r--plugins/jetpack/modules/contact-form/admin.php894
-rw-r--r--plugins/jetpack/modules/contact-form/class-grunion-contact-form-endpoint.php52
-rw-r--r--plugins/jetpack/modules/contact-form/css/editor-inline-editing-style-rtl.css825
-rw-r--r--plugins/jetpack/modules/contact-form/css/editor-inline-editing-style-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/contact-form/css/editor-inline-editing-style.css764
-rw-r--r--plugins/jetpack/modules/contact-form/css/editor-inline-editing-style.min.css2
-rw-r--r--plugins/jetpack/modules/contact-form/css/editor-style-rtl.css613
-rw-r--r--plugins/jetpack/modules/contact-form/css/editor-style-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/contact-form/css/editor-style.css554
-rw-r--r--plugins/jetpack/modules/contact-form/css/editor-style.min.css2
-rw-r--r--plugins/jetpack/modules/contact-form/css/editor-ui-rtl.css27
-rw-r--r--plugins/jetpack/modules/contact-form/css/editor-ui-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/contact-form/css/editor-ui.css26
-rw-r--r--plugins/jetpack/modules/contact-form/css/editor-ui.min.css2
-rw-r--r--plugins/jetpack/modules/contact-form/css/grunion-rtl.css1
-rw-r--r--plugins/jetpack/modules/contact-form/css/grunion.css91
-rw-r--r--plugins/jetpack/modules/contact-form/css/jquery-ui-datepicker.css160
-rw-r--r--plugins/jetpack/modules/contact-form/grunion-contact-form.php3479
-rw-r--r--plugins/jetpack/modules/contact-form/grunion-editor-view.php299
-rw-r--r--plugins/jetpack/modules/contact-form/grunion-form-view.php266
-rw-r--r--plugins/jetpack/modules/contact-form/images/blank-screen-akismet.pngbin2270 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/contact-form/images/blank-screen-button.pngbin1823 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/contact-form/images/grunion-form-2x.pngbin153 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/contact-form/images/grunion-form.pngbin188 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/contact-form/images/grunion-remove-field-2x.pngbin201 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/contact-form/images/grunion-remove-field-hover-2x.pngbin207 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/contact-form/images/grunion-remove-field-hover.gifbin144 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/contact-form/images/grunion-remove-field.gifbin139 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/contact-form/images/grunion-remove-option-2x.pngbin99 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/contact-form/images/grunion-remove-option-hover-2x.pngbin94 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/contact-form/images/grunion-remove-option-hover.gifbin73 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/contact-form/images/grunion-remove-option.gifbin73 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/contact-form/js/editor-view.js238
-rw-r--r--plugins/jetpack/modules/contact-form/js/grunion-admin.js29
-rw-r--r--plugins/jetpack/modules/contact-form/js/grunion-frontend.js3
-rw-r--r--plugins/jetpack/modules/contact-form/js/grunion.js813
-rw-r--r--plugins/jetpack/modules/contact-form/js/tinymce-plugin-form-button.js34
-rw-r--r--plugins/jetpack/modules/copy-post.php338
-rw-r--r--plugins/jetpack/modules/custom-content-types.php53
-rw-r--r--plugins/jetpack/modules/custom-css.php92
-rw-r--r--plugins/jetpack/modules/custom-css/csstidy/class.csstidy.php1246
-rw-r--r--plugins/jetpack/modules/custom-css/csstidy/class.csstidy_ctype.php46
-rw-r--r--plugins/jetpack/modules/custom-css/csstidy/class.csstidy_optimise.php938
-rw-r--r--plugins/jetpack/modules/custom-css/csstidy/class.csstidy_print.php410
-rw-r--r--plugins/jetpack/modules/custom-css/csstidy/cssparse-rtl.css119
-rw-r--r--plugins/jetpack/modules/custom-css/csstidy/cssparse-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/custom-css/csstidy/cssparse.css118
-rw-r--r--plugins/jetpack/modules/custom-css/csstidy/cssparse.min.css2
-rw-r--r--plugins/jetpack/modules/custom-css/csstidy/cssparsed-rtl.css30
-rw-r--r--plugins/jetpack/modules/custom-css/csstidy/cssparsed-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/custom-css/csstidy/cssparsed.css29
-rw-r--r--plugins/jetpack/modules/custom-css/csstidy/cssparsed.min.css2
-rw-r--r--plugins/jetpack/modules/custom-css/csstidy/data-wp.inc.php102
-rw-r--r--plugins/jetpack/modules/custom-css/csstidy/data.inc.php693
-rw-r--r--plugins/jetpack/modules/custom-css/csstidy/lang.inc.php308
-rw-r--r--plugins/jetpack/modules/custom-css/csstidy/wordpress-standard.tpl10
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css-4.7.php1165
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css.php1866
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/css/blank.css1
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/css/codemirror-rtl.css262
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/css/codemirror-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/css/codemirror.css262
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/css/codemirror.min.css2
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/css/css-editor-rtl.css33
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/css/css-editor-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/css/css-editor.css32
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/css/css-editor.min.css2
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/css/customizer-control.css150
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/css/rtl/codemirror-rtl.css260
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/css/use-codemirror-rtl.css7
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/css/use-codemirror-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/css/use-codemirror.css6
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/css/use-codemirror.min.css2
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/js/codemirror.min.js11
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/js/core-customizer-css-preview.js42
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/js/core-customizer-css.core-4.9.js85
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/js/core-customizer-css.js192
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/js/css-editor.js84
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/js/use-codemirror.js47
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/preprocessors.php58
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/preprocessors/lessc.inc.php3768
-rw-r--r--plugins/jetpack/modules/custom-css/custom-css/preprocessors/scss.inc.php4383
-rw-r--r--plugins/jetpack/modules/custom-css/migrate-to-core.php243
-rw-r--r--plugins/jetpack/modules/custom-post-types/comics.php533
-rw-r--r--plugins/jetpack/modules/custom-post-types/comics/admin.css7
-rw-r--r--plugins/jetpack/modules/custom-post-types/comics/comics-rtl.css31
-rw-r--r--plugins/jetpack/modules/custom-post-types/comics/comics-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/custom-post-types/comics/comics.css30
-rw-r--r--plugins/jetpack/modules/custom-post-types/comics/comics.js121
-rw-r--r--plugins/jetpack/modules/custom-post-types/comics/comics.min.css2
-rw-r--r--plugins/jetpack/modules/custom-post-types/comics/rtl/comics-rtl.css32
-rw-r--r--plugins/jetpack/modules/custom-post-types/css/edit-items.css24
-rw-r--r--plugins/jetpack/modules/custom-post-types/css/many-items.css14
-rw-r--r--plugins/jetpack/modules/custom-post-types/css/nova-font.css30
-rw-r--r--plugins/jetpack/modules/custom-post-types/css/nova.css110
-rw-r--r--plugins/jetpack/modules/custom-post-types/css/portfolio-shortcode.css131
-rw-r--r--plugins/jetpack/modules/custom-post-types/css/testimonial-shortcode.css102
-rw-r--r--plugins/jetpack/modules/custom-post-types/js/many-items.js112
-rw-r--r--plugins/jetpack/modules/custom-post-types/js/menu-checkboxes.js51
-rw-r--r--plugins/jetpack/modules/custom-post-types/js/nova-drag-drop.js54
-rw-r--r--plugins/jetpack/modules/custom-post-types/nova.php1298
-rw-r--r--plugins/jetpack/modules/custom-post-types/portfolios.php930
-rw-r--r--plugins/jetpack/modules/custom-post-types/testimonial.php763
-rw-r--r--plugins/jetpack/modules/debug.php6
-rw-r--r--plugins/jetpack/modules/enhanced-distribution.php67
-rw-r--r--plugins/jetpack/modules/geo-location.php81
-rw-r--r--plugins/jetpack/modules/geo-location/class.jetpack-geo-location.php425
-rw-r--r--plugins/jetpack/modules/google-analytics.php15
-rw-r--r--plugins/jetpack/modules/google-analytics/classes/wp-google-analytics-legacy.php256
-rw-r--r--plugins/jetpack/modules/google-analytics/classes/wp-google-analytics-options.php70
-rw-r--r--plugins/jetpack/modules/google-analytics/classes/wp-google-analytics-universal.php410
-rw-r--r--plugins/jetpack/modules/google-analytics/classes/wp-google-analytics-utils.php63
-rw-r--r--plugins/jetpack/modules/google-analytics/wp-google-analytics.php76
-rw-r--r--plugins/jetpack/modules/gplus-authorship.php6
-rw-r--r--plugins/jetpack/modules/gravatar-hovercards.php302
-rw-r--r--plugins/jetpack/modules/holiday-snow.php6
-rw-r--r--plugins/jetpack/modules/infinite-scroll.php270
-rw-r--r--plugins/jetpack/modules/infinite-scroll/infinity.css164
-rw-r--r--plugins/jetpack/modules/infinite-scroll/infinity.js750
-rw-r--r--plugins/jetpack/modules/infinite-scroll/infinity.php1664
-rw-r--r--plugins/jetpack/modules/infinite-scroll/themes/twentyeleven.css45
-rw-r--r--plugins/jetpack/modules/infinite-scroll/themes/twentyeleven.php44
-rw-r--r--plugins/jetpack/modules/infinite-scroll/themes/twentyfifteen-rtl.css216
-rw-r--r--plugins/jetpack/modules/infinite-scroll/themes/twentyfifteen.css216
-rw-r--r--plugins/jetpack/modules/infinite-scroll/themes/twentyfifteen.php28
-rw-r--r--plugins/jetpack/modules/infinite-scroll/themes/twentyfourteen.css111
-rw-r--r--plugins/jetpack/modules/infinite-scroll/themes/twentyfourteen.php48
-rw-r--r--plugins/jetpack/modules/infinite-scroll/themes/twentyseventeen-rtl.css168
-rw-r--r--plugins/jetpack/modules/infinite-scroll/themes/twentyseventeen.css168
-rw-r--r--plugins/jetpack/modules/infinite-scroll/themes/twentyseventeen.php58
-rw-r--r--plugins/jetpack/modules/infinite-scroll/themes/twentysixteen-rtl.css161
-rw-r--r--plugins/jetpack/modules/infinite-scroll/themes/twentysixteen.css161
-rw-r--r--plugins/jetpack/modules/infinite-scroll/themes/twentysixteen.php43
-rw-r--r--plugins/jetpack/modules/infinite-scroll/themes/twentyten.css25
-rw-r--r--plugins/jetpack/modules/infinite-scroll/themes/twentyten.php55
-rw-r--r--plugins/jetpack/modules/infinite-scroll/themes/twentythirteen.css90
-rw-r--r--plugins/jetpack/modules/infinite-scroll/themes/twentythirteen.php28
-rw-r--r--plugins/jetpack/modules/infinite-scroll/themes/twentytwelve.css33
-rw-r--r--plugins/jetpack/modules/infinite-scroll/themes/twentytwelve.php43
-rw-r--r--plugins/jetpack/modules/json-api.php12
-rw-r--r--plugins/jetpack/modules/latex.php122
-rw-r--r--plugins/jetpack/modules/lazy-images.php40
-rw-r--r--plugins/jetpack/modules/lazy-images/images/1x1.trans.gifbin42 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/lazy-images/js/lazy-images.js870
-rw-r--r--plugins/jetpack/modules/lazy-images/lazy-images.php353
-rw-r--r--plugins/jetpack/modules/likes.php644
-rw-r--r--plugins/jetpack/modules/likes/jetpack-likes-master-iframe.php38
-rw-r--r--plugins/jetpack/modules/likes/jetpack-likes-settings.php729
-rw-r--r--plugins/jetpack/modules/likes/post-count-jetpack.js18
-rw-r--r--plugins/jetpack/modules/likes/post-count.js62
-rw-r--r--plugins/jetpack/modules/likes/queuehandler.js384
-rw-r--r--plugins/jetpack/modules/likes/style.css233
-rw-r--r--plugins/jetpack/modules/manage.php37
-rw-r--r--plugins/jetpack/modules/manage/activate-admin.php95
-rw-r--r--plugins/jetpack/modules/manage/confirm-admin.php112
-rw-r--r--plugins/jetpack/modules/markdown.php29
-rw-r--r--plugins/jetpack/modules/markdown/easy-markdown.php812
-rw-r--r--plugins/jetpack/modules/masterbar.php26
-rw-r--r--plugins/jetpack/modules/masterbar/masterbar.php1038
-rw-r--r--plugins/jetpack/modules/masterbar/overrides.css61
-rw-r--r--plugins/jetpack/modules/masterbar/rtl-admin-bar.php52
-rw-r--r--plugins/jetpack/modules/masterbar/tracks-events.js159
-rw-r--r--plugins/jetpack/modules/minileven.php136
-rw-r--r--plugins/jetpack/modules/minileven/images/wp-app-devices.pngbin1014 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/minileven/minileven.php344
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/comments.php52
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/content-gallery.php83
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/content.php63
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/footer.php61
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/functions.php273
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/header.php70
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/image.php108
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/inc/custom-header.php107
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/inc/fonts/genericons-regular-webfont.eotbin7475 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/inc/fonts/genericons-regular-webfont.svg81
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/inc/fonts/genericons-regular-webfont.ttfbin13516 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/inc/fonts/genericons-regular-webfont.woffbin8676 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/inc/template-tags.php96
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/inc/tweaks.php103
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/index.php75
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/js/small-menu.js36
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/page.php47
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/rtl.css574
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/screenshot.pngbin58138 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/searchform.php12
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/sidebar.php12
-rw-r--r--plugins/jetpack/modules/minileven/theme/pub/minileven/style.css1588
-rw-r--r--plugins/jetpack/modules/mobile-push.php6
-rw-r--r--plugins/jetpack/modules/module-extras.php71
-rw-r--r--plugins/jetpack/modules/module-headings.php359
-rw-r--r--plugins/jetpack/modules/module-info.php714
-rw-r--r--plugins/jetpack/modules/monitor.php200
-rw-r--r--plugins/jetpack/modules/notes.php198
-rw-r--r--plugins/jetpack/modules/omnisearch.php6
-rw-r--r--plugins/jetpack/modules/photon-cdn.php298
-rw-r--r--plugins/jetpack/modules/photon-cdn/jetpack-manifest.php434
-rw-r--r--plugins/jetpack/modules/photon.php22
-rw-r--r--plugins/jetpack/modules/photon/photon.js55
-rw-r--r--plugins/jetpack/modules/plugin-search.php602
-rw-r--r--plugins/jetpack/modules/plugin-search/plugin-search.css84
-rw-r--r--plugins/jetpack/modules/plugin-search/plugin-search.js264
-rw-r--r--plugins/jetpack/modules/plugin-search/psh-128.pngbin12524 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/plugin-search/psh-256.pngbin27512 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/plugin-search/psh.svg1
-rw-r--r--plugins/jetpack/modules/post-by-email.php208
-rw-r--r--plugins/jetpack/modules/post-by-email/post-by-email-rtl.css7
-rw-r--r--plugins/jetpack/modules/post-by-email/post-by-email-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/post-by-email/post-by-email.css6
-rw-r--r--plugins/jetpack/modules/post-by-email/post-by-email.js128
-rw-r--r--plugins/jetpack/modules/post-by-email/post-by-email.min.css2
-rw-r--r--plugins/jetpack/modules/protect.php923
-rw-r--r--plugins/jetpack/modules/protect/blocked-login-page.php611
-rw-r--r--plugins/jetpack/modules/protect/config-ui.php70
-rw-r--r--plugins/jetpack/modules/protect/math-fallback.php158
-rw-r--r--plugins/jetpack/modules/protect/protect-dashboard-widget-rtl.css117
-rw-r--r--plugins/jetpack/modules/protect/protect-dashboard-widget-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/protect/protect-dashboard-widget.css116
-rw-r--r--plugins/jetpack/modules/protect/protect-dashboard-widget.min.css2
-rw-r--r--plugins/jetpack/modules/protect/protect.pngbin14439 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/protect/shared-functions.php316
-rw-r--r--plugins/jetpack/modules/protect/transient-cleanup.php58
-rw-r--r--plugins/jetpack/modules/publicize.php80
-rw-r--r--plugins/jetpack/modules/publicize/enhanced-open-graph.php129
-rw-r--r--plugins/jetpack/modules/publicize/publicize-jetpack.php753
-rw-r--r--plugins/jetpack/modules/publicize/publicize.php1249
-rw-r--r--plugins/jetpack/modules/publicize/ui.php657
-rw-r--r--plugins/jetpack/modules/pwa.php42
-rw-r--r--plugins/jetpack/modules/pwa/class.jetpack-pwa-helpers.php62
-rw-r--r--plugins/jetpack/modules/pwa/class.jetpack-pwa-manifest.php95
-rw-r--r--plugins/jetpack/modules/pwa/images/wp-192.pngbin6584 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/pwa/images/wp-512.pngbin16496 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/random-redirect.php6
-rw-r--r--plugins/jetpack/modules/related-posts.php77
-rw-r--r--plugins/jetpack/modules/related-posts/class.related-posts-customize.php300
-rw-r--r--plugins/jetpack/modules/related-posts/jetpack-related-posts.php1801
-rw-r--r--plugins/jetpack/modules/related-posts/related-posts-customizer.js30
-rw-r--r--plugins/jetpack/modules/related-posts/related-posts-rtl.css1
-rw-r--r--plugins/jetpack/modules/related-posts/related-posts.css315
-rw-r--r--plugins/jetpack/modules/related-posts/related-posts.js267
-rw-r--r--plugins/jetpack/modules/related-posts/rtl/related-posts-rtl.css190
-rw-r--r--plugins/jetpack/modules/search.php18
-rw-r--r--plugins/jetpack/modules/search/class.jetpack-search-helpers.php699
-rw-r--r--plugins/jetpack/modules/search/class.jetpack-search-template-tags.php225
-rw-r--r--plugins/jetpack/modules/search/class.jetpack-search.php1874
-rw-r--r--plugins/jetpack/modules/seo-tools.php39
-rw-r--r--plugins/jetpack/modules/seo-tools/jetpack-seo-posts.php63
-rw-r--r--plugins/jetpack/modules/seo-tools/jetpack-seo-titles.php301
-rw-r--r--plugins/jetpack/modules/seo-tools/jetpack-seo-utils.php126
-rw-r--r--plugins/jetpack/modules/seo-tools/jetpack-seo.php206
-rw-r--r--plugins/jetpack/modules/sharedaddy.php29
-rw-r--r--plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.css453
-rw-r--r--plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/sharedaddy/admin-sharing.css452
-rw-r--r--plugins/jetpack/modules/sharedaddy/admin-sharing.js446
-rw-r--r--plugins/jetpack/modules/sharedaddy/admin-sharing.min.css2
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/after-the-deadline@2x.pngbin1068 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/comments@2x.pngbin763 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/contact-form@2x.pngbin539 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/custom.pngbin445 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/custom@2x.pngbin1147 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/designfloat.pngbin833 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/digg.pngbin530 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/digg@2x.pngbin872 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/divider.pngbin94 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/divider@2x.pngbin116 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/draggy.pngbin107 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/draggy@2x.pngbin109 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/email.pngbin209 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/email@2x.pngbin927 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/ember.pngbin533 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/enhanced-distribution@2x.pngbin757 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/facebook.pngbin568 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/facebook@2x.pngbin1036 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/feed.pngbin761 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/icon-facebook-2x.pngbin1027 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/icon-facebook.pngbin581 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/icon-twitter-2x.pngbin1414 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/icon-twitter.pngbin523 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/icon-wordpress-2x.pngbin592 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/icon-wordpress.pngbin666 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/kindle.pngbin750 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/kindle@2x.pngbin1505 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/linkedin-horizontal.pngbin2115 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/linkedin-horizontal@2x.pngbin2975 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/linkedin-nocount.pngbin1564 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/linkedin-nocount@2x.pngbin1736 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/linkedin-smart.pngbin2115 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/linkedin-smart@2x.pngbin2975 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/linkedin-vertical.pngbin2274 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/linkedin-vertical@2x.pngbin2653 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/linkedin.pngbin360 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/linkedin@2x.pngbin944 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/loading.gifbin2530 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/more.pngbin285 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/more@2x.pngbin798 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/pinterest.pngbin624 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/pinterest@2x.pngbin1310 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/pocket.pngbin367 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/pocket@2x.pngbin504 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/print.pngbin209 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/print@2x.pngbin1052 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/reddit.pngbin881 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/reddit@2x.pngbin1500 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/rss.pngbin870 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/rss@2x.pngbin1775 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/share-bg.pngbin82 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/sharing-hidden.pngbin213 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/sharing-hidden@2x.pngbin106 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-digg.pngbin793 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-digg@2x.pngbin1147 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-facebook.pngbin1427 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-facebook@2x.pngbin830 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-like.pngbin1620 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-like@2x.pngbin3800 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-pinterest.pngbin1235 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-pinterest@2x.pngbin2170 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-pocket.pngbin641 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-pocket@2x.pngbin1272 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-reddit.pngbin1572 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-reddit@2x.pngbin2601 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-skype.pngbin1688 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-skype@2x.pngbin4019 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-stumbleupon.pngbin552 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-stumbleupon@2x.pngbin2072 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-tumblr.pngbin1531 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-tumblr@2x.pngbin4179 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-twitter.pngbin1952 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/smart-twitter@2x.pngbin1691 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/tumblr.pngbin742 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/tumblr@2x.pngbin926 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/twitter.pngbin523 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/twitter@2x.pngbin1302 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/wordpress.pngbin667 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/images/wordpress@2x.pngbin1344 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/sharedaddy/recaptcha.php188
-rw-r--r--plugins/jetpack/modules/sharedaddy/sharedaddy.php289
-rw-r--r--plugins/jetpack/modules/sharedaddy/sharing-service.php938
-rw-r--r--plugins/jetpack/modules/sharedaddy/sharing-sources.php1801
-rw-r--r--plugins/jetpack/modules/sharedaddy/sharing.css752
-rw-r--r--plugins/jetpack/modules/sharedaddy/sharing.js437
-rw-r--r--plugins/jetpack/modules/sharedaddy/sharing.php619
-rw-r--r--plugins/jetpack/modules/shortcodes.php196
-rw-r--r--plugins/jetpack/modules/shortcodes/archiveorg-book.php130
-rw-r--r--plugins/jetpack/modules/shortcodes/archiveorg.php160
-rw-r--r--plugins/jetpack/modules/shortcodes/archives.php75
-rw-r--r--plugins/jetpack/modules/shortcodes/audio.php6
-rw-r--r--plugins/jetpack/modules/shortcodes/bandcamp.php229
-rw-r--r--plugins/jetpack/modules/shortcodes/brightcove.php295
-rw-r--r--plugins/jetpack/modules/shortcodes/cartodb.php21
-rw-r--r--plugins/jetpack/modules/shortcodes/class.filter-embedded-html-objects.php294
-rw-r--r--plugins/jetpack/modules/shortcodes/codepen.php10
-rw-r--r--plugins/jetpack/modules/shortcodes/crowdsignal.php610
-rw-r--r--plugins/jetpack/modules/shortcodes/css/quiz.css56
-rw-r--r--plugins/jetpack/modules/shortcodes/css/recipes-print-rtl.css1
-rw-r--r--plugins/jetpack/modules/shortcodes/css/recipes-print-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/shortcodes/css/recipes-print.css36
-rw-r--r--plugins/jetpack/modules/shortcodes/css/recipes-print.min.css2
-rw-r--r--plugins/jetpack/modules/shortcodes/css/recipes-rtl.css1
-rw-r--r--plugins/jetpack/modules/shortcodes/css/recipes-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/shortcodes/css/recipes.css36
-rw-r--r--plugins/jetpack/modules/shortcodes/css/recipes.min.css2
-rw-r--r--plugins/jetpack/modules/shortcodes/css/slideshow-shortcode-rtl.css145
-rw-r--r--plugins/jetpack/modules/shortcodes/css/slideshow-shortcode-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/shortcodes/css/slideshow-shortcode.css157
-rw-r--r--plugins/jetpack/modules/shortcodes/css/slideshow-shortcode.min.css2
-rw-r--r--plugins/jetpack/modules/shortcodes/css/style.css188
-rw-r--r--plugins/jetpack/modules/shortcodes/dailymotion.php341
-rw-r--r--plugins/jetpack/modules/shortcodes/diggthis.php11
-rw-r--r--plugins/jetpack/modules/shortcodes/email-subscribe.php6
-rw-r--r--plugins/jetpack/modules/shortcodes/facebook.php74
-rw-r--r--plugins/jetpack/modules/shortcodes/flatio.php11
-rw-r--r--plugins/jetpack/modules/shortcodes/flickr.php200
-rw-r--r--plugins/jetpack/modules/shortcodes/getty.php222
-rw-r--r--plugins/jetpack/modules/shortcodes/gist.php141
-rw-r--r--plugins/jetpack/modules/shortcodes/googleapps.php255
-rw-r--r--plugins/jetpack/modules/shortcodes/googlemaps.php115
-rw-r--r--plugins/jetpack/modules/shortcodes/googleplus.php29
-rw-r--r--plugins/jetpack/modules/shortcodes/googlevideo.php31
-rw-r--r--plugins/jetpack/modules/shortcodes/gravatar.php163
-rw-r--r--plugins/jetpack/modules/shortcodes/houzz.php29
-rw-r--r--plugins/jetpack/modules/shortcodes/hulu.php275
-rw-r--r--plugins/jetpack/modules/shortcodes/images/collapse.pngbin2072 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/shortcodes/images/expand.pngbin2039 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/shortcodes/images/slide-nav.pngbin5704 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/shortcodes/img/slideshow-controls-2x.pngbin1944 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/shortcodes/img/slideshow-controls.pngbin1009 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/shortcodes/img/slideshow-loader.gifbin13545 -> 0 bytes
-rw-r--r--plugins/jetpack/modules/shortcodes/instagram.php243
-rw-r--r--plugins/jetpack/modules/shortcodes/js/brightcove.js29
-rw-r--r--plugins/jetpack/modules/shortcodes/js/gist.js28
-rw-r--r--plugins/jetpack/modules/shortcodes/js/instagram.js21
-rw-r--r--plugins/jetpack/modules/shortcodes/js/jmpress.js2710
-rw-r--r--plugins/jetpack/modules/shortcodes/js/jquery.cycle.min.js9
-rw-r--r--plugins/jetpack/modules/shortcodes/js/main.js258
-rw-r--r--plugins/jetpack/modules/shortcodes/js/quiz.js55
-rw-r--r--plugins/jetpack/modules/shortcodes/js/recipes-printthis.js289
-rw-r--r--plugins/jetpack/modules/shortcodes/js/recipes.js11
-rw-r--r--plugins/jetpack/modules/shortcodes/js/slideshow-shortcode.js194
-rw-r--r--plugins/jetpack/modules/shortcodes/kickstarter.php80
-rw-r--r--plugins/jetpack/modules/shortcodes/mailchimp.php226
-rw-r--r--plugins/jetpack/modules/shortcodes/medium.php71
-rw-r--r--plugins/jetpack/modules/shortcodes/mixcloud.php75
-rw-r--r--plugins/jetpack/modules/shortcodes/pinterest.php50
-rw-r--r--plugins/jetpack/modules/shortcodes/polldaddy.php4
-rw-r--r--plugins/jetpack/modules/shortcodes/presentations.php465
-rw-r--r--plugins/jetpack/modules/shortcodes/quiz.php309
-rw-r--r--plugins/jetpack/modules/shortcodes/recipe.php515
-rw-r--r--plugins/jetpack/modules/shortcodes/scribd.php62
-rw-r--r--plugins/jetpack/modules/shortcodes/sitemap.php30
-rw-r--r--plugins/jetpack/modules/shortcodes/slideshare.php121
-rw-r--r--plugins/jetpack/modules/shortcodes/slideshow.php316
-rw-r--r--plugins/jetpack/modules/shortcodes/soundcloud.php327
-rw-r--r--plugins/jetpack/modules/shortcodes/spotify.php97
-rw-r--r--plugins/jetpack/modules/shortcodes/ted.php78
-rw-r--r--plugins/jetpack/modules/shortcodes/tweet.php276
-rw-r--r--plugins/jetpack/modules/shortcodes/twitchtv.php74
-rw-r--r--plugins/jetpack/modules/shortcodes/twitter-timeline.php56
-rw-r--r--plugins/jetpack/modules/shortcodes/unavailable.php78
-rw-r--r--plugins/jetpack/modules/shortcodes/untappd-menu.php69
-rw-r--r--plugins/jetpack/modules/shortcodes/upcoming-events.php36
-rw-r--r--plugins/jetpack/modules/shortcodes/ustream.php135
-rw-r--r--plugins/jetpack/modules/shortcodes/videopress.php20
-rw-r--r--plugins/jetpack/modules/shortcodes/vimeo.php301
-rw-r--r--plugins/jetpack/modules/shortcodes/vine.php68
-rw-r--r--plugins/jetpack/modules/shortcodes/vr.php136
-rw-r--r--plugins/jetpack/modules/shortcodes/wordads.php64
-rw-r--r--plugins/jetpack/modules/shortcodes/wufoo.php89
-rw-r--r--plugins/jetpack/modules/shortcodes/youtube.php396
-rw-r--r--plugins/jetpack/modules/shortlinks.php136
-rw-r--r--plugins/jetpack/modules/simple-payments/paypal-express-checkout.js212
-rw-r--r--plugins/jetpack/modules/simple-payments/simple-payments.css129
-rw-r--r--plugins/jetpack/modules/simple-payments/simple-payments.php683
-rw-r--r--plugins/jetpack/modules/site-icon.php6
-rw-r--r--plugins/jetpack/modules/site-icon/site-icon-functions.php29
-rw-r--r--plugins/jetpack/modules/sitemaps.php42
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemap-buffer-fallback.php146
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemap-buffer-image-fallback.php56
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemap-buffer-image.php68
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemap-buffer-master-fallback.php38
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemap-buffer-master.php44
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemap-buffer-news-fallback.php56
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemap-buffer-news.php68
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemap-buffer-page-fallback.php55
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemap-buffer-page.php67
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemap-buffer-video-fallback.php56
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemap-buffer-video.php68
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemap-buffer.php325
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemap-builder.php1468
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemap-constants.php216
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemap-finder.php116
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemap-librarian.php431
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemap-logger.php86
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemap-state.php144
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemap-stylist.php783
-rw-r--r--plugins/jetpack/modules/sitemaps/sitemaps.php578
-rw-r--r--plugins/jetpack/modules/social-links.php6
-rw-r--r--plugins/jetpack/modules/sso.php1155
-rw-r--r--plugins/jetpack/modules/sso/class.jetpack-sso-helpers.php325
-rw-r--r--plugins/jetpack/modules/sso/class.jetpack-sso-notices.php203
-rw-r--r--plugins/jetpack/modules/sso/jetpack-sso-login-rtl.css177
-rw-r--r--plugins/jetpack/modules/sso/jetpack-sso-login-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/sso/jetpack-sso-login.css176
-rw-r--r--plugins/jetpack/modules/sso/jetpack-sso-login.js32
-rw-r--r--plugins/jetpack/modules/sso/jetpack-sso-login.min.css2
-rw-r--r--plugins/jetpack/modules/stats.php1845
-rw-r--r--plugins/jetpack/modules/subscriptions.php787
-rw-r--r--plugins/jetpack/modules/subscriptions/readme.md12
-rw-r--r--plugins/jetpack/modules/subscriptions/subscriptions.css29
-rw-r--r--plugins/jetpack/modules/subscriptions/views.php755
-rw-r--r--plugins/jetpack/modules/theme-tools.php70
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentyfifteen-rtl.css744
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentyfifteen.css769
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentyfifteen.php35
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentyfourteen-rtl.css370
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentyfourteen.css365
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentyfourteen.php73
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentynineteen-rtl.css1
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentynineteen.css374
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentynineteen.php126
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentyseventeen.php13
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentysixteen-rtl.css832
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentysixteen.css827
-rw-r--r--plugins/jetpack/modules/theme-tools/compat/twentysixteen.php68
-rw-r--r--plugins/jetpack/modules/theme-tools/content-options.php137
-rw-r--r--plugins/jetpack/modules/theme-tools/content-options/author-bio.php60
-rw-r--r--plugins/jetpack/modules/theme-tools/content-options/blog-display.php240
-rw-r--r--plugins/jetpack/modules/theme-tools/content-options/customizer.js217
-rw-r--r--plugins/jetpack/modules/theme-tools/content-options/customizer.php482
-rw-r--r--plugins/jetpack/modules/theme-tools/content-options/featured-images-fallback.php161
-rw-r--r--plugins/jetpack/modules/theme-tools/content-options/featured-images.php84
-rw-r--r--plugins/jetpack/modules/theme-tools/content-options/post-details.php150
-rw-r--r--plugins/jetpack/modules/theme-tools/featured-content.php722
-rw-r--r--plugins/jetpack/modules/theme-tools/infinite-scroll.php50
-rw-r--r--plugins/jetpack/modules/theme-tools/js/suggest.js4
-rw-r--r--plugins/jetpack/modules/theme-tools/random-redirect.php83
-rw-r--r--plugins/jetpack/modules/theme-tools/responsive-videos.php152
-rw-r--r--plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.css10
-rw-r--r--plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.js67
-rw-r--r--plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.min.js1
-rw-r--r--plugins/jetpack/modules/theme-tools/site-breadcrumbs.php79
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo.php46
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control-rtl.css12
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control.css49
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control.min.css1
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo-control.php109
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo.php377
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/inc/compat.php44
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/inc/functions.php176
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.js155
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.min.js1
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-header-text.js24
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-header-text.min.js1
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/js/site-logo.js43
-rw-r--r--plugins/jetpack/modules/theme-tools/site-logo/js/site-logo.min.js1
-rw-r--r--plugins/jetpack/modules/theme-tools/social-links.php252
-rw-r--r--plugins/jetpack/modules/theme-tools/social-menu.php113
-rw-r--r--plugins/jetpack/modules/theme-tools/social-menu/icon-functions.php175
-rw-r--r--plugins/jetpack/modules/theme-tools/social-menu/social-menu.css197
-rw-r--r--plugins/jetpack/modules/theme-tools/social-menu/social-menu.svg134
-rw-r--r--plugins/jetpack/modules/tiled-gallery.php42
-rw-r--r--plugins/jetpack/modules/tiled-gallery/math/class-constrained-array-rounding.php77
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery.php295
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/rtl/tiled-gallery-rtl.css96
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/carousel-container.php20
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/circle-layout.php3
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/partials/carousel-image-args.php25
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/partials/item.php65
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/rectangular-layout.php31
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/square-layout.php27
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-circle.php8
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-item.php107
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-layout.php110
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-rectangular.php223
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-rtl.css1
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-shape.php209
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-square.php70
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery.css94
-rw-r--r--plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery.js176
-rw-r--r--plugins/jetpack/modules/tonesque.php6
-rw-r--r--plugins/jetpack/modules/vaultpress.php33
-rw-r--r--plugins/jetpack/modules/verification-tools.php29
-rw-r--r--plugins/jetpack/modules/verification-tools/blog-verification-tools.php84
-rw-r--r--plugins/jetpack/modules/verification-tools/verification-tools-utils.php45
-rw-r--r--plugins/jetpack/modules/videopress.php26
-rw-r--r--plugins/jetpack/modules/videopress/class.jetpack-videopress.php340
-rw-r--r--plugins/jetpack/modules/videopress/class.videopress-ajax.php103
-rw-r--r--plugins/jetpack/modules/videopress/class.videopress-cli.php167
-rw-r--r--plugins/jetpack/modules/videopress/class.videopress-edit-attachment.php388
-rw-r--r--plugins/jetpack/modules/videopress/class.videopress-gutenberg.php169
-rw-r--r--plugins/jetpack/modules/videopress/class.videopress-options.php59
-rw-r--r--plugins/jetpack/modules/videopress/class.videopress-player.php880
-rw-r--r--plugins/jetpack/modules/videopress/class.videopress-scheduler.php197
-rw-r--r--plugins/jetpack/modules/videopress/class.videopress-video.php378
-rw-r--r--plugins/jetpack/modules/videopress/class.videopress-xmlrpc.php173
-rw-r--r--plugins/jetpack/modules/videopress/css/editor-rtl.css60
-rw-r--r--plugins/jetpack/modules/videopress/css/editor-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/videopress/css/editor.css59
-rw-r--r--plugins/jetpack/modules/videopress/css/editor.min.css2
-rw-r--r--plugins/jetpack/modules/videopress/css/videopress-editor-style-rtl.css22
-rw-r--r--plugins/jetpack/modules/videopress/css/videopress-editor-style-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/videopress/css/videopress-editor-style.css21
-rw-r--r--plugins/jetpack/modules/videopress/css/videopress-editor-style.min.css2
-rw-r--r--plugins/jetpack/modules/videopress/editor-media-view.php236
-rw-r--r--plugins/jetpack/modules/videopress/js/editor-view.js264
-rw-r--r--plugins/jetpack/modules/videopress/js/media-video-widget-extensions.js45
-rw-r--r--plugins/jetpack/modules/videopress/js/videopress-plupload.js461
-rw-r--r--plugins/jetpack/modules/videopress/js/videopress-uploader.js157
-rw-r--r--plugins/jetpack/modules/videopress/shortcode.php248
-rw-r--r--plugins/jetpack/modules/videopress/utility-functions.php692
-rw-r--r--plugins/jetpack/modules/videopress/videopress-admin-rtl.css106
-rw-r--r--plugins/jetpack/modules/videopress/videopress-admin-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/videopress/videopress-admin.css105
-rw-r--r--plugins/jetpack/modules/videopress/videopress-admin.min.css2
-rw-r--r--plugins/jetpack/modules/widget-visibility.php15
-rw-r--r--plugins/jetpack/modules/widget-visibility/widget-conditions.php852
-rw-r--r--plugins/jetpack/modules/widget-visibility/widget-conditions/rtl/widget-conditions-rtl.css115
-rw-r--r--plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions-rtl.css116
-rw-r--r--plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.css117
-rw-r--r--plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.js265
-rw-r--r--plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.min.css2
-rw-r--r--plugins/jetpack/modules/widgets.php97
-rw-r--r--plugins/jetpack/modules/widgets/authors.php271
-rw-r--r--plugins/jetpack/modules/widgets/authors/style.css25
-rw-r--r--plugins/jetpack/modules/widgets/blog-stats.php173
-rw-r--r--plugins/jetpack/modules/widgets/contact-info.php391
-rw-r--r--plugins/jetpack/modules/widgets/contact-info/contact-info-admin.js8
-rw-r--r--plugins/jetpack/modules/widgets/contact-info/contact-info-map.css4
-rw-r--r--plugins/jetpack/modules/widgets/customizer-controls.css6
-rw-r--r--plugins/jetpack/modules/widgets/customizer-utils.js95
-rw-r--r--plugins/jetpack/modules/widgets/eu-cookie-law.php301
-rw-r--r--plugins/jetpack/modules/widgets/eu-cookie-law/eu-cookie-law-admin.js30
-rw-r--r--plugins/jetpack/modules/widgets/eu-cookie-law/eu-cookie-law.js63
-rw-r--r--plugins/jetpack/modules/widgets/eu-cookie-law/form.php277
-rw-r--r--plugins/jetpack/modules/widgets/eu-cookie-law/style.css105
-rw-r--r--plugins/jetpack/modules/widgets/eu-cookie-law/widget.php25
-rw-r--r--plugins/jetpack/modules/widgets/facebook-likebox.php309
-rw-r--r--plugins/jetpack/modules/widgets/facebook-likebox/style.css3
-rw-r--r--plugins/jetpack/modules/widgets/flickr.php218
-rw-r--r--plugins/jetpack/modules/widgets/flickr/form.php93
-rw-r--r--plugins/jetpack/modules/widgets/flickr/style.css16
-rw-r--r--plugins/jetpack/modules/widgets/flickr/widget.php13
-rw-r--r--plugins/jetpack/modules/widgets/gallery.php464
-rw-r--r--plugins/jetpack/modules/widgets/gallery/css/admin-rtl.css12
-rw-r--r--plugins/jetpack/modules/widgets/gallery/css/admin-rtl.min.css1
-rw-r--r--plugins/jetpack/modules/widgets/gallery/css/admin.css11
-rw-r--r--plugins/jetpack/modules/widgets/gallery/css/admin.min.css2
-rw-r--r--plugins/jetpack/modules/widgets/gallery/css/rtl/admin-rtl.css13
-rw-r--r--plugins/jetpack/modules/widgets/gallery/js/admin.js225
-rw-r--r--plugins/jetpack/modules/widgets/gallery/js/gallery.js10
-rw-r--r--plugins/jetpack/modules/widgets/gallery/templates/form.php89
-rw-r--r--plugins/jetpack/modules/widgets/goodreads.php157
-rw-r--r--plugins/jetpack/modules/widgets/goodreads/css/goodreads.css48
-rw-r--r--plugins/jetpack/modules/widgets/goodreads/css/rtl/goodreads-rtl.css50
-rw-r--r--plugins/jetpack/modules/widgets/google-translate.php203
-rw-r--r--plugins/jetpack/modules/widgets/google-translate/google-translate.js20
-rw-r--r--plugins/jetpack/modules/widgets/gravatar-profile.css46
-rw-r--r--plugins/jetpack/modules/widgets/gravatar-profile.php435
-rw-r--r--plugins/jetpack/modules/widgets/image-widget.php274
-rw-r--r--plugins/jetpack/modules/widgets/image-widget/style.css13
-rw-r--r--plugins/jetpack/modules/widgets/internet-defense-league.php153
-rw-r--r--plugins/jetpack/modules/widgets/mailchimp.php103
-rw-r--r--plugins/jetpack/modules/widgets/migrate-to-core/gallery-widget.php198
-rw-r--r--plugins/jetpack/modules/widgets/migrate-to-core/image-widget.php220
-rw-r--r--plugins/jetpack/modules/widgets/milestone.php5
-rw-r--r--plugins/jetpack/modules/widgets/milestone/admin.js25
-rw-r--r--plugins/jetpack/modules/widgets/milestone/milestone.js52
-rw-r--r--plugins/jetpack/modules/widgets/milestone/milestone.php683
-rw-r--r--plugins/jetpack/modules/widgets/milestone/style-admin.css50
-rw-r--r--plugins/jetpack/modules/widgets/my-community.php297
-rw-r--r--plugins/jetpack/modules/widgets/my-community/style.css35
-rw-r--r--plugins/jetpack/modules/widgets/rsslinks-widget.php242
-rw-r--r--plugins/jetpack/modules/widgets/search.php815
-rw-r--r--plugins/jetpack/modules/widgets/search/css/search-widget-admin-ui.css87
-rw-r--r--plugins/jetpack/modules/widgets/search/css/search-widget-frontend.css66
-rw-r--r--plugins/jetpack/modules/widgets/search/js/search-widget-admin.js360
-rw-r--r--plugins/jetpack/modules/widgets/search/js/search-widget.js15
-rw-r--r--plugins/jetpack/modules/widgets/simple-payments.php544
-rw-r--r--plugins/jetpack/modules/widgets/simple-payments/admin-warning.php16
-rw-r--r--plugins/jetpack/modules/widgets/simple-payments/customizer.css80
-rw-r--r--plugins/jetpack/modules/widgets/simple-payments/customizer.js390
-rw-r--r--plugins/jetpack/modules/widgets/simple-payments/form.php205
-rw-r--r--plugins/jetpack/modules/widgets/simple-payments/style.css8
-rw-r--r--plugins/jetpack/modules/widgets/simple-payments/widget.php33
-rw-r--r--plugins/jetpack/modules/widgets/social-icons.php685
-rw-r--r--plugins/jetpack/modules/widgets/social-icons/social-icons-admin.css94
-rw-r--r--plugins/jetpack/modules/widgets/social-icons/social-icons-admin.js111
-rw-r--r--plugins/jetpack/modules/widgets/social-icons/social-icons.css75
-rw-r--r--plugins/jetpack/modules/widgets/social-media-icons.php346
-rw-r--r--plugins/jetpack/modules/widgets/social-media-icons/style.css49
-rw-r--r--plugins/jetpack/modules/widgets/top-posts.php674
-rw-r--r--plugins/jetpack/modules/widgets/top-posts/style.css114
-rw-r--r--plugins/jetpack/modules/widgets/twitter-timeline-admin.js35
-rw-r--r--plugins/jetpack/modules/widgets/twitter-timeline.php503
-rw-r--r--plugins/jetpack/modules/widgets/upcoming-events.php131
-rw-r--r--plugins/jetpack/modules/widgets/wordpress-post-widget.php116
-rw-r--r--plugins/jetpack/modules/widgets/wordpress-post-widget/class.jetpack-display-posts-widget-base.php843
-rw-r--r--plugins/jetpack/modules/widgets/wordpress-post-widget/class.jetpack-display-posts-widget.php274
-rw-r--r--plugins/jetpack/modules/widgets/wordpress-post-widget/style.css24
-rw-r--r--plugins/jetpack/modules/woocommerce-analytics/classes/wp-woocommerce-analytics-universal.php399
-rw-r--r--plugins/jetpack/modules/woocommerce-analytics/wp-woocommerce-analytics.php94
-rw-r--r--plugins/jetpack/modules/wordads.php18
-rw-r--r--plugins/jetpack/modules/wordads/css/style.css63
-rw-r--r--plugins/jetpack/modules/wordads/php/admin.php49
-rw-r--r--plugins/jetpack/modules/wordads/php/api.php143
-rw-r--r--plugins/jetpack/modules/wordads/php/cron.php48
-rw-r--r--plugins/jetpack/modules/wordads/php/networks/amazon.php3
-rw-r--r--plugins/jetpack/modules/wordads/php/params.php226
-rw-r--r--plugins/jetpack/modules/wordads/php/widgets.php115
-rw-r--r--plugins/jetpack/modules/wordads/wordads.php598
-rw-r--r--plugins/jetpack/modules/wpcc.php6
-rw-r--r--plugins/jetpack/modules/wpgroho.js38
-rw-r--r--plugins/jetpack/readme.txt168
-rw-r--r--plugins/jetpack/require-lib.php35
-rw-r--r--plugins/jetpack/sal/class.json-api-date.php88
-rw-r--r--plugins/jetpack/sal/class.json-api-links.php283
-rw-r--r--plugins/jetpack/sal/class.json-api-metadata.php39
-rw-r--r--plugins/jetpack/sal/class.json-api-platform-jetpack.php14
-rw-r--r--plugins/jetpack/sal/class.json-api-platform.php25
-rw-r--r--plugins/jetpack/sal/class.json-api-post-base.php682
-rw-r--r--plugins/jetpack/sal/class.json-api-post-jetpack.php37
-rw-r--r--plugins/jetpack/sal/class.json-api-site-base.php637
-rw-r--r--plugins/jetpack/sal/class.json-api-site-jetpack-base.php169
-rw-r--r--plugins/jetpack/sal/class.json-api-site-jetpack.php192
-rw-r--r--plugins/jetpack/sal/class.json-api-token.php60
-rw-r--r--plugins/jetpack/scss/_utilities/_accessibility.scss30
-rw-r--r--plugins/jetpack/scss/_utilities/_grid.scss75
-rw-r--r--plugins/jetpack/scss/_utilities/mixins/_breakpoint.scss46
-rw-r--r--plugins/jetpack/scss/atoms/_animations.scss18
-rw-r--r--plugins/jetpack/scss/atoms/_buttons.scss137
-rw-r--r--plugins/jetpack/scss/atoms/colors/_colors.scss16
-rw-r--r--plugins/jetpack/scss/atoms/icons/_automatticons.scss32
-rw-r--r--plugins/jetpack/scss/atoms/typography/_functions.scss12
-rw-r--r--plugins/jetpack/scss/atoms/typography/_variables.scss31
-rw-r--r--plugins/jetpack/scss/dashboard-widget.scss14
-rw-r--r--plugins/jetpack/scss/jetpack-admin-jitm.scss417
-rw-r--r--plugins/jetpack/scss/jetpack-admin.scss15
-rw-r--r--plugins/jetpack/scss/jetpack-banners.scss4
-rw-r--r--plugins/jetpack/scss/jetpack-icons.scss26
-rw-r--r--plugins/jetpack/scss/jetpack-idc-admin-bar.scss30
-rw-r--r--plugins/jetpack/scss/jetpack-idc.scss206
-rw-r--r--plugins/jetpack/scss/molecules/_nav-horizontal.scss25
-rw-r--r--plugins/jetpack/scss/organisms/_banners.scss443
-rw-r--r--plugins/jetpack/scss/pages/_manage.scss40
-rw-r--r--plugins/jetpack/scss/pages/_protect.scss90
-rw-r--r--plugins/jetpack/scss/templates/_connection-landing.scss82
-rw-r--r--plugins/jetpack/scss/templates/_main.scss634
-rw-r--r--plugins/jetpack/scss/templates/_settings.scss373
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-actions.php470
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-defaults.php589
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-functions.php403
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-json-deflate-array-codec.php84
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-listener.php316
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-module-attachments.php55
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-module-callables.php269
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-module-comments.php194
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-module-constants.php125
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-module-full-sync.php366
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-module-import.php87
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-module-menus.php78
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-module-meta.php62
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-module-network-options.php116
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-module-options.php173
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-module-plugins.php289
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-module-posts.php428
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-module-protect.php23
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-module-stats.php28
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-module-terms.php120
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-module-themes.php612
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-module-updates.php321
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-module-users.php492
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-module-woocommerce.php335
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-module-wp-super-cache.php79
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-module.php160
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-modules.php104
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-queue.php478
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-sender.php416
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-server.php106
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-settings.php179
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-simple-codec.php24
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-users.php81
-rw-r--r--plugins/jetpack/sync/class.jetpack-sync-wp-replicastore.php801
-rw-r--r--plugins/jetpack/sync/interface.jetpack-sync-codec.php14
-rw-r--r--plugins/jetpack/sync/interface.jetpack-sync-replicastore.php140
-rw-r--r--plugins/jetpack/uninstall.php34
-rw-r--r--plugins/jetpack/views/admin/must-connect-main-blog.php16
-rw-r--r--plugins/jetpack/views/admin/network-activated-notice.php5
-rw-r--r--plugins/jetpack/views/admin/network-admin-alert.php6
-rw-r--r--plugins/jetpack/views/admin/network-admin-footer.php6
-rw-r--r--plugins/jetpack/views/admin/network-admin-header.php4
-rw-r--r--plugins/jetpack/views/admin/network-settings.php87
-rw-r--r--plugins/jetpack/wpml-config.xml10
-rw-r--r--themes/mantra/admin/main.php10
-rw-r--r--themes/mantra/admin/settings.php11
-rw-r--r--themes/mantra/content/content-aside.php2
-rw-r--r--themes/mantra/content/content-chat.php2
-rw-r--r--themes/mantra/content/content-image.php2
-rw-r--r--themes/mantra/content/content-link.php2
-rw-r--r--themes/mantra/content/content-quote.php2
-rw-r--r--themes/mantra/content/content-status.php2
-rw-r--r--themes/mantra/functions.php2
-rw-r--r--themes/mantra/includes/custom-styles.php62
-rw-r--r--themes/mantra/includes/theme-functions.php12
-rw-r--r--themes/mantra/readme.txt13
-rw-r--r--themes/mantra/resources/css/style-mobile.css9
-rw-r--r--themes/mantra/style.css94
-rw-r--r--themes/twentyfifteen/content-link.php2
-rw-r--r--themes/twentyfifteen/content-page.php2
-rw-r--r--themes/twentyfifteen/content-search.php2
-rw-r--r--themes/twentyfifteen/content.php2
-rw-r--r--themes/twentyfifteen/functions.php4
-rw-r--r--themes/twentyfifteen/header.php1
-rw-r--r--themes/twentyfifteen/image.php2
-rw-r--r--themes/twentyfifteen/inc/template-tags.php18
-rw-r--r--themes/twentyfifteen/readme.txt10
-rw-r--r--themes/twentyfifteen/style.css4
-rw-r--r--themes/twentyfourteen/content-aside.php2
-rw-r--r--themes/twentyfourteen/content-audio.php2
-rw-r--r--themes/twentyfourteen/content-featured-post.php2
-rw-r--r--themes/twentyfourteen/content-gallery.php2
-rw-r--r--themes/twentyfourteen/content-image.php2
-rw-r--r--themes/twentyfourteen/content-link.php2
-rw-r--r--themes/twentyfourteen/content-page.php2
-rw-r--r--themes/twentyfourteen/content-quote.php2
-rw-r--r--themes/twentyfourteen/content-video.php2
-rw-r--r--themes/twentyfourteen/content.php2
-rw-r--r--themes/twentyfourteen/functions.php2
-rw-r--r--themes/twentyfourteen/header.php1
-rw-r--r--themes/twentyfourteen/image.php2
-rw-r--r--themes/twentyfourteen/inc/template-tags.php18
-rw-r--r--themes/twentyfourteen/inc/widgets.php2
-rw-r--r--themes/twentyfourteen/page-templates/contributors.php2
-rw-r--r--themes/twentyfourteen/readme.txt10
-rw-r--r--themes/twentyfourteen/style.css2
1523 files changed, 751 insertions, 245676 deletions
diff --git a/plugins/akismet/_inc/akismet.css b/plugins/akismet/_inc/akismet.css
index d051c011..bc56f061 100644
--- a/plugins/akismet/_inc/akismet.css
+++ b/plugins/akismet/_inc/akismet.css
@@ -80,9 +80,11 @@ table.comments td.comment p a:after {
display: inline-block !important;
}
.checkforspam-progress {
- padding-left: 1ex;
display: none;
}
+.checkforspam.checking .checkforspam-progress {
+ padding-left: 1ex;
+}
.checkforspam.button-disabled .checkforspam-progress {
display: inline;
}
@@ -246,7 +248,6 @@ table.comments td.comment p a:after {
font-size: 140px;
color: #769F33;
font-family: Georgia, "Times New Roman", Times, serif;
- z-index: 1;
}
.akismet_activate .aa_button {
@@ -312,7 +313,6 @@ table.comments td.comment p a:after {
margin-left: 25px;
color: #E5F2B1;
font-size: 15px;
- z-index: 1000;
}
.akismet_activate .aa_description strong {
diff --git a/plugins/akismet/_inc/akismet.js b/plugins/akismet/_inc/akismet.js
index 8ed3add1..6cb85e6c 100644
--- a/plugins/akismet/_inc/akismet.js
+++ b/plugins/akismet/_inc/akismet.js
@@ -146,10 +146,15 @@ jQuery( function ( $ ) {
} );
} );
- $('.checkforspam:not(.button-disabled)').click( function(e) {
+ $( '.checkforspam' ).click( function( e ) {
e.preventDefault();
- $('.checkforspam:not(.button-disabled)').addClass('button-disabled');
+ if ( $( this ).hasClass( 'button-disabled' ) ) {
+ window.location.href = $( this ).data( 'success-url' ).replace( '__recheck_count__', 0 ).replace( '__spam_count__', 0 );
+ return;
+ }
+
+ $('.checkforspam').addClass('button-disabled').addClass( 'checking' );
$('.checkforspam-spinner').addClass( 'spinner' ).addClass( 'is-active' );
// Update the label on the "Check for Spam" button to use the active "Checking for Spam" language.
diff --git a/plugins/akismet/akismet.php b/plugins/akismet/akismet.php
index 2e07b3ef..49608e5a 100644
--- a/plugins/akismet/akismet.php
+++ b/plugins/akismet/akismet.php
@@ -6,7 +6,7 @@
Plugin Name: Akismet Anti-Spam
Plugin URI: https://akismet.com/
Description: Used by millions, Akismet is quite possibly the best way in the world to <strong>protect your blog from spam</strong>. It keeps your site protected even while you sleep. To get started: activate the Akismet plugin and then go to your Akismet Settings page to set up your API key.
-Version: 4.1.1
+Version: 4.1.2
Author: Automattic
Author URI: https://automattic.com/wordpress-plugins/
License: GPLv2 or later
@@ -37,7 +37,7 @@ if ( !function_exists( 'add_action' ) ) {
exit;
}
-define( 'AKISMET_VERSION', '4.1.1' );
+define( 'AKISMET_VERSION', '4.1.2' );
define( 'AKISMET__MINIMUM_WP_VERSION', '4.0' );
define( 'AKISMET__PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
define( 'AKISMET_DELETE_LIMIT', 100000 );
diff --git a/plugins/akismet/class.akismet-admin.php b/plugins/akismet/class.akismet-admin.php
index 07a4d193..f0766ebe 100644
--- a/plugins/akismet/class.akismet-admin.php
+++ b/plugins/akismet/class.akismet-admin.php
@@ -390,9 +390,9 @@ class Akismet_Admin {
$comments_count = wp_count_comments();
echo '</div>';
- echo '<div class="alignleft">';
+ echo '<div class="alignleft actions">';
echo '<a
- class="button-secondary checkforspam"
+ class="button-secondary checkforspam' . ( $comments_count->moderated == 0 ? ' button-disabled' : '' ) . '"
href="' . esc_url( $link ) . '"
data-active-label="' . esc_attr( __( 'Checking for Spam', 'akismet' ) ) . '"
data-progress-label-format="' . esc_attr( __( '(%1$s%)', 'akismet' ) ) . '"
diff --git a/plugins/akismet/class.akismet.php b/plugins/akismet/class.akismet.php
index 7dc8ba91..f24fd63d 100644
--- a/plugins/akismet/class.akismet.php
+++ b/plugins/akismet/class.akismet.php
@@ -65,6 +65,11 @@ class Akismet {
}
public static function verify_key( $key, $ip = null ) {
+ // Shortcut for obviously invalid keys.
+ if ( strlen( $key ) != 12 ) {
+ return 'invalid';
+ }
+
$response = self::check_key_status( $key, $ip );
if ( $response[1] != 'valid' && $response[1] != 'invalid' )
@@ -1178,6 +1183,10 @@ class Akismet {
}
public static function load_form_js() {
+ if ( function_exists( 'is_amp_endpoint' ) && is_amp_endpoint() ) {
+ return;
+ }
+
wp_register_script( 'akismet-form', plugin_dir_url( __FILE__ ) . '_inc/form.js', array(), AKISMET_VERSION, true );
wp_enqueue_script( 'akismet-form' );
}
@@ -1333,9 +1342,16 @@ p {
if ( !empty( $args[1] ) ) {
$post_id = url_to_postid( $args[1] );
- // If this gets through the pre-check, make sure we properly identify the outbound request as a pingback verification
- Akismet::pingback_forwarded_for( null, $args[0] );
- add_filter( 'http_request_args', array( 'Akismet', 'pingback_forwarded_for' ), 10, 2 );
+ // If pingbacks aren't open on this post, we'll still check whether this request is part of a potential DDOS,
+ // but indicate to the server that pingbacks are indeed closed so we don't include this request in the user's stats,
+ // since the user has already done their part by disabling pingbacks.
+ $pingbacks_closed = false;
+
+ $post = get_post( $post_id );
+
+ if ( ! $post || ! pings_open( $post ) ) {
+ $pingbacks_closed = true;
+ }
$comment = array(
'comment_author_url' => $args[0],
@@ -1346,6 +1362,7 @@ p {
'comment_type' => 'pingback',
'akismet_pre_check' => '1',
'comment_pingback_target' => $args[1],
+ 'pingbacks_closed' => $pingbacks_closed ? '1' : '0',
);
$comment = Akismet::auto_check_comment( $comment );
@@ -1356,29 +1373,7 @@ p {
}
}
}
-
- public static function pingback_forwarded_for( $r, $url ) {
- static $urls = array();
-
- // Call this with $r == null to prime the callback to add headers on a specific URL
- if ( is_null( $r ) && !in_array( $url, $urls ) ) {
- $urls[] = $url;
- }
-
- // Add X-Pingback-Forwarded-For header, but only for requests to a specific URL (the apparent pingback source)
- if ( is_array( $r ) && is_array( $r['headers'] ) && !isset( $r['headers']['X-Pingback-Forwarded-For'] ) && in_array( $url, $urls ) ) {
- $remote_ip = preg_replace( '/[^a-fx0-9:.,]/i', '', $_SERVER['REMOTE_ADDR'] );
-
- // Note: this assumes REMOTE_ADDR is correct, and it may not be if a reverse proxy or CDN is in use
- $r['headers']['X-Pingback-Forwarded-For'] = $remote_ip;
- // Also identify the request as a pingback verification in the UA string so it appears in logs
- $r['user-agent'] .= '; verifying pingback from ' . $remote_ip;
- }
-
- return $r;
- }
-
/**
* Ensure that we are loading expected scalar values from akismet_as_submitted commentmeta.
*
diff --git a/plugins/akismet/readme.txt b/plugins/akismet/readme.txt
index 41495d86..15526e9a 100644
--- a/plugins/akismet/readme.txt
+++ b/plugins/akismet/readme.txt
@@ -2,8 +2,8 @@
Contributors: matt, ryan, andy, mdawaffe, tellyworth, josephscott, lessbloat, eoigal, cfinke, automattic, jgs, procifer, stephdau
Tags: akismet, comments, spam, antispam, anti-spam, anti spam, comment moderation, comment spam, contact form spam, spam comments
Requires at least: 4.0
-Tested up to: 5.1
-Stable tag: 4.1.1
+Tested up to: 5.2
+Stable tag: 4.1.2
License: GPLv2 or later
Akismet checks your comments and contact form submissions against our global database of spam to protect you and your site from malicious content.
@@ -30,6 +30,15 @@ Upload the Akismet plugin to your blog, Activate it, then enter your [Akismet.co
== Changelog ==
+= 4.1.2 =
+*Release Date - 14 May 2019*
+
+* Fixed a conflict between the Akismet setup banner and other plugin notices.
+* Reduced the number of API requests made by the plugin when attempting to verify the API key.
+* Include additional data in the pingback pre-check API request to help make the stats more accurate.
+* Fixed a bug that was enabling the "Check for Spam" button when no comments were eligible to be checked.
+* Improved Akismet's AMP compatibility.
+
= 4.1.1 =
*Release Date - 31 January 2019*
diff --git a/plugins/akismet/views/get.php b/plugins/akismet/views/get.php
index bfd34c7c..b1abe0eb 100644
--- a/plugins/akismet/views/get.php
+++ b/plugins/akismet/views/get.php
@@ -1,3 +1,9 @@
+<?php
+
+//phpcs:disable VariableAnalysis
+// There are "undefined" variables here because they're defined in the code that includes this file as a template.
+
+?>
<form name="akismet_activate" action="https://akismet.com/get/" method="POST" target="_blank">
<input type="hidden" name="passback_url" value="<?php echo esc_url( Akismet_Admin::get_page_url() ); ?>"/>
<input type="hidden" name="blog" value="<?php echo esc_url( get_option( 'home' ) ); ?>"/>
diff --git a/plugins/akismet/wrapper.php b/plugins/akismet/wrapper.php
index f687e099..2dfe8705 100644
--- a/plugins/akismet/wrapper.php
+++ b/plugins/akismet/wrapper.php
@@ -206,7 +206,8 @@ function akismet_kill_proxy_check( $option ) {
return 0;
}
function akismet_pingback_forwarded_for( $r, $url ) {
- return Akismet::pingback_forwarded_for( $r, $url );
+ // This functionality is now in core.
+ return false;
}
function akismet_pre_check_pingback( $method ) {
return Akismet::pre_check_pingback( $method );
diff --git a/plugins/google-authenticator/google-authenticator.php b/plugins/google-authenticator/google-authenticator.php
index 6c19c17c..5d5f8601 100644
--- a/plugins/google-authenticator/google-authenticator.php
+++ b/plugins/google-authenticator/google-authenticator.php
@@ -4,14 +4,17 @@ Plugin Name: Google Authenticator
Plugin URI: https://github.com/ivankruchkoff/google-authenticator
Description: Two-Factor Authentication for WordPress using the Android/iPhone/Blackberry app as One Time Password generator.
Author: Ivan Kruchkoff
-Version: 0.51
+Version: 0.52
Author URI: https://github.com/ivankruchkoff
-Compatibility: WordPress 5.1
+Compatibility: WordPress 5.2
Text Domain: google-authenticator
Domain Path: /lang
----------------------------------------------------------------------------
+
+ Thanks to Fabio Zumbi for Portuguese translation.
+ Thanks to Guido Schalkx for the Dutch translation.
Thanks to Henrik Schack for creating / maintaining versions 0.20 to 0.48
Thanks to Ivan Kruchkoff for his UX improvements in user signup.
Thanks to Bryan Ruiz for his Base32 encode/decode class, found at php.net.
@@ -312,15 +315,15 @@ function user_setup_page() {
),
array(
'text' => __( 'iOS: Google Authenticator', 'google-authenticator' ),
- 'link' => 'https://itunes.apple.com/app/authy/id494168017',
+ 'link' => 'https://itunes.apple.com/app/google-authenticator/id388497605',
),
array(
'text' => __( 'Android: Authy', 'google-authenticator' ),
- 'link' => 'https://itunes.apple.com/app/authy/id494168017',
+ 'link' => 'https://play.google.com/store/apps/details?id=com.authy.authy',
),
array(
'text' => __( 'Android: Google Authenticator', 'google-authenticator' ),
- 'link' => 'https://itunes.apple.com/app/authy/id494168017',
+ 'link' => 'https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2',
),
array(
'text' => __( 'Windows Phone', 'google-authenticator' ),
@@ -540,7 +543,7 @@ function network_admin_setup_page() {
function loginform() {
echo "\t<p>\n";
echo "\t\t<label title=\"".__('If you don\'t have Google Authenticator enabled for your WordPress account, leave this field empty.','google-authenticator')."\">".__('Google Authenticator code','google-authenticator')."<span id=\"google-auth-info\"></span><br />\n";
- echo "\t\t<input type=\"text\" name=\"googleotp\" id=\"googleotp\" class=\"input\" value=\"\" size=\"20\" style=\"ime-mode: inactive;\" /></label>\n";
+ echo "\t\t<input type=\"text\" name=\"googleotp\" id=\"googleotp\" class=\"input\" value=\"\" size=\"20\" style=\"ime-mode: inactive;\" autocomplete=\"off\" /></label>\n";
echo "\t</p>\n";
}
diff --git a/plugins/google-authenticator/lang/google-authenticator-nl_NL.mo b/plugins/google-authenticator/lang/google-authenticator-nl_NL.mo
new file mode 100644
index 00000000..0fbdcb13
--- /dev/null
+++ b/plugins/google-authenticator/lang/google-authenticator-nl_NL.mo
Binary files differ
diff --git a/plugins/google-authenticator/lang/google-authenticator-nl_NL.po b/plugins/google-authenticator/lang/google-authenticator-nl_NL.po
new file mode 100644
index 00000000..2e0fc09b
--- /dev/null
+++ b/plugins/google-authenticator/lang/google-authenticator-nl_NL.po
@@ -0,0 +1,317 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Google Authenticator\n"
+"POT-Creation-Date: 2019-04-12 17:20+0200\n"
+"PO-Revision-Date: 2019-04-12 17:38+0200\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: nl_NL\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.2.1\n"
+"X-Poedit-Basepath: ..\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Poedit-Flags-xgettext: --add-comments=translators:\n"
+"X-Poedit-WPHeader: google-authenticator.php\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
+"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
+"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
+"X-Poedit-SearchPath-0: .\n"
+"X-Poedit-SearchPathExcluded-0: *.js\n"
+
+#. Plugin Name of the plugin/theme
+#: google-authenticator.php:196 google-authenticator.php:199
+#: google-authenticator.php:202
+msgid "Google Authenticator"
+msgstr ""
+
+#: google-authenticator.php:280
+msgid ""
+"OTP code doesn't match supplied secret, please check you've configured "
+"Authenticator correctly."
+msgstr ""
+"OTP-code komt niet overeen met de opgegeven geheime code, controleer of je "
+"de Authenticator goed hebt ingesteld."
+
+#: google-authenticator.php:289
+msgid ""
+"Congratulations, you have successfully enabled Google Authenticator for your "
+"account"
+msgstr ""
+"Gefeliciteerd, je hebt Google Authenticator met succes ingeschakeld voor je "
+"account"
+
+#: google-authenticator.php:310
+msgid "iOS: Authy"
+msgstr ""
+
+#: google-authenticator.php:314
+msgid "iOS: Google Authenticator"
+msgstr ""
+
+#: google-authenticator.php:318
+msgid "Android: Authy"
+msgstr ""
+
+#: google-authenticator.php:322
+msgid "Android: Google Authenticator"
+msgstr ""
+
+#: google-authenticator.php:326
+msgid "Windows Phone"
+msgstr ""
+
+#: google-authenticator.php:330
+msgid "Chrome Browser"
+msgstr ""
+
+#: google-authenticator.php:334
+msgid "Desktop"
+msgstr ""
+
+#: google-authenticator.php:342 google-authenticator.php:433
+#: google-authenticator.php:715 google-authenticator.php:936
+msgid "Google Authenticator Settings"
+msgstr "Google Authenticator instellingen"
+
+#: google-authenticator.php:346
+msgid ""
+"If you haven't already done so, please install the Authy or Google "
+"Authenticator app on your mobile device from the App Store:"
+msgstr ""
+"Mocht je dit nog niet gedaan hebben, installeer dan de Authy of Google "
+"Authenticator app vanuit de App Store op je mobiele apparaat:"
+
+#: google-authenticator.php:352
+msgid ""
+"The easiest way to enable your account is to add an account by scanning the "
+"QR code using the app."
+msgstr ""
+"De makkelijkste manier om je account in te schakelen is een account toe te "
+"voegen door het scannen van de QR-code met de app."
+
+#: google-authenticator.php:354
+msgid ""
+"An account can also be added by typing in the secret. After you've added "
+"your account to the App, please type the code you see on the screen into the "
+"Authenticator Code field and press the Verify Authenticator Code button."
+msgstr ""
+"Een account kan ook worden toegevoegd door de geheim code in te typen. Nadat "
+"je je account hebt toegevoegd in de app, type je de code die je op het "
+"scherm ziet in het veld Authenticatiecode en druk je op de knop Verifieer "
+"authenticatiecode."
+
+#: google-authenticator.php:357
+msgid ""
+"If the account setup was successful, you will be logged out, and will need "
+"to login again using your Username, Password and Authenticator code "
+"generated using the App on your mobile device."
+msgstr ""
+"Als het instellen van het account is gelukt, wordt je uitgelogd en moet je "
+"opnieuw inloggen met je gebruikersnaam, wachtwoord en authenticatiecode die "
+"in de app op je mobiele apparaat wordt gegenereerd."
+
+#: google-authenticator.php:436
+msgid "Successfullly saved your settings for the network"
+msgstr "Instellingen succesvol opgeslagen voor het netwerk"
+
+#: google-authenticator.php:438
+msgid "Successfullly saved your settings for the site"
+msgstr "Instellingen succesvol opgeslagen voor de site"
+
+#: google-authenticator.php:443
+msgid "Network Settings"
+msgstr "Netwerk instellingen"
+
+#: google-authenticator.php:447
+msgid "Only use network-wide settings, ignoring site settings."
+msgstr ""
+"Gebruik alleen instellingen voor het hele netwerk en negeer de instellingen "
+"van de site."
+
+#: google-authenticator.php:453
+msgid "Two Screen Signin"
+msgstr "Aanmelden op twee schermen"
+
+#: google-authenticator.php:457
+msgid "Ask for authenticator code on secondary login screen"
+msgstr "Vraag naar de authenticatiecode op een secundair inlogscherm"
+
+#: google-authenticator.php:461
+msgid "Roles requiring Google Authenticator Enabled"
+msgstr "Rollen waarbij gebruik Google Authenticator is vereist"
+
+#: google-authenticator.php:469
+msgid "Network-wide settings in effect, only a super admin can modify them."
+msgstr ""
+"Netwerk brede instellingen zijn van kracht, alleen een super-beheerder kan "
+"deze wijzigen."
+
+#: google-authenticator.php:471
+msgid "Change network wide Google Authenticator settings"
+msgstr "Verander netwerk brede Google Authenticator instellingen"
+
+#: google-authenticator.php:511
+msgid ""
+"Sorry, you can't disable checks for this role as it's enabled at the network "
+"level."
+msgstr ""
+"Sorry, je kunt de controles voor deze rol niet uitschakelen omdat deze op "
+"het netwerkniveau is ingeschakeld."
+
+#: google-authenticator.php:513
+#, php-format
+msgid ""
+"Sorry, this role is enabled at the network level and can only be disabled "
+"via the <a href=\"%s\">network settings</a>"
+msgstr ""
+"Sorry, deze rol is ingeschakeld op netwerkniveau en kan alleen worden "
+"uitgeschakeld via de <a href=“%s”>netwerkinstellingen</a>"
+
+#: google-authenticator.php:542
+msgid ""
+"If you don't have Google Authenticator enabled for your WordPress account, "
+"leave this field empty."
+msgstr ""
+"Als Google Authenticator niet is ingeschakeld voor je WordPress-account, "
+"laat dit veld dan leeg."
+
+#: google-authenticator.php:542
+msgid "Google Authenticator code"
+msgstr "Google Authenticator-code"
+
+#: google-authenticator.php:615
+msgid "<strong>ERROR</strong>: The Google Authenticator password is incorrect."
+msgstr "<strong>ERROR</strong>: De Google Authenticator-wachtwoord is onjuist."
+
+#: google-authenticator.php:619 google-authenticator.php:640
+msgid ""
+"<strong>ERROR</strong>: The Google Authenticator code is incorrect or has "
+"expired."
+msgstr ""
+"<strong>ERROR</strong>: De Google Authenticator-code is onjuist of verlopen."
+
+#: google-authenticator.php:635
+msgid "Secondary Login Screen"
+msgstr "Secundair inlogscherm"
+
+#: google-authenticator.php:638
+msgid "<strong>ERROR</strong>: The Google Authenticator code is missing."
+msgstr "<strong>ERROR</strong>: De Google Authenticator-code ontbreekt."
+
+#: google-authenticator.php:652
+msgid ""
+"Please enter the Google Authenticator code using the app on your device."
+msgstr ""
+"Voer de Google Authenticator-code in met behulp van de app op je mobiele "
+"apparaat."
+
+#: google-authenticator.php:654
+msgid "Log In"
+msgstr "Inloggen"
+
+#: google-authenticator.php:722 google-authenticator.php:948
+msgid "Active"
+msgstr "Actief"
+
+#: google-authenticator.php:731
+msgid "Relaxed mode"
+msgstr "Ontspannen modus"
+
+#: google-authenticator.php:733
+msgid ""
+" Relaxed mode allows for more time drifting on your phone clock (&#177;4 "
+"min)."
+msgstr ""
+" Ontspannen modus geeft meer ruimte voor een afwijkende klok op je mobiele "
+"apparaat (&#177;4 min)."
+
+#: google-authenticator.php:740
+msgid "Description"
+msgstr "Omschrijving"
+
+#: google-authenticator.php:741
+msgid ""
+" Description that you'll see in the Google Authenticator app on your phone."
+msgstr ""
+" Omschrijving die je ziet in de Google Authenticator app op je mobiele "
+"apparaat."
+
+#: google-authenticator.php:745
+msgid "Secret"
+msgstr "Geheime code"
+
+#: google-authenticator.php:749
+msgid "Create new secret"
+msgstr "Nieuw geheime code maken"
+
+#: google-authenticator.php:750
+msgid "Show/Hide QR code"
+msgstr "Toon/verberg QR-code"
+
+#: google-authenticator.php:762
+msgid "Scan this with the Google Authenticator app."
+msgstr "Scan dit met de Google Authenticator-app."
+
+#: google-authenticator.php:774
+msgid "Enable App password"
+msgstr "Schakel in App-wachtwoord"
+
+#: google-authenticator.php:776
+msgid " Enabling an App password will decrease your overall login security."
+msgstr ""
+" Als je een App-wachtwoord inschakelt, wordt je totale inlog beveiliging "
+"minder."
+
+#: google-authenticator.php:784
+msgid "Create new password"
+msgstr "Nieuw wachtwoord maken"
+
+#: google-authenticator.php:785
+msgid ""
+" Password is not stored in cleartext, this is your only chance to see it."
+msgstr ""
+" Wachtwoord wordt niet als platte tekst opgeslagen, dit is je enige kans om "
+"het te zien."
+
+#: google-authenticator.php:793
+msgid "Authenticator Code"
+msgstr "Authenticatiecode"
+
+#: google-authenticator.php:794
+msgid ""
+"After adding the site to your google authy account, add your authenticator "
+"code here."
+msgstr ""
+"Na het toevoegen van de site aan je Google Authy-account, voeg je hier je "
+"authenticatiecode toe."
+
+#: google-authenticator.php:800
+msgid "Verify Authenticator Code"
+msgstr "Verifieer authenticatiecode"
+
+#: google-authenticator.php:941
+msgid "Hide settings from user"
+msgstr "Verberg gebruikers instellingen"
+
+#. Plugin URI of the plugin/theme
+msgid "https://github.com/ivankruchkoff/google-authenticator"
+msgstr ""
+
+#. Description of the plugin/theme
+msgid ""
+"Two-Factor Authentication for WordPress using the Android/iPhone/Blackberry "
+"app as One Time Password generator."
+msgstr ""
+"Twee-staps-authenticatie voor WordPress met behulp van de Android/iPhone/"
+"Blackberry app als eenmalig wachtwoord generator."
+
+#. Author of the plugin/theme
+msgid "Ivan Kruchkoff"
+msgstr ""
+
+#. Author URI of the plugin/theme
+msgid "https://github.com/ivankruchkoff"
+msgstr ""
diff --git a/plugins/google-authenticator/lang/google-authenticator-pt_BR.mo b/plugins/google-authenticator/lang/google-authenticator-pt_BR.mo
new file mode 100644
index 00000000..e318239e
--- /dev/null
+++ b/plugins/google-authenticator/lang/google-authenticator-pt_BR.mo
Binary files differ
diff --git a/plugins/google-authenticator/lang/google-authenticator-pt_BR.po b/plugins/google-authenticator/lang/google-authenticator-pt_BR.po
new file mode 100644
index 00000000..54c213fa
--- /dev/null
+++ b/plugins/google-authenticator/lang/google-authenticator-pt_BR.po
@@ -0,0 +1,123 @@
+# Copyright (C) 2010 Google Authenticator
+# This file is distributed under the same license as the Google Authenticator package.
+msgid ""
+msgstr ""
+"Project-Id-Version: Google Authenticator 0.37\n"
+"Report-Msgid-Bugs-To: http://wordpress.org/tag/google-authenticator\n"
+"POT-Creation-Date: 2011-08-21 14:25:45+00:00\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2014-01-11 10:07+0100\n"
+"Last-Translator: \n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"X-Generator: Poedit 1.6.3\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Language: pt_BR\n"
+
+#: google-authenticator.php:131
+msgid ""
+"If you don't have Google Authenticator enabled for your WordPress account, "
+"leave this field empty."
+msgstr "Se você não tiver o Google Authenticator ativado para sua conta do WordPress, deixe este campo vazio."
+
+#: google-authenticator.php:131
+msgid "Google Authenticator code"
+msgstr "Código do Google Authenticator"
+
+#: google-authenticator.php:176
+msgid "<strong>ERROR</strong>: The Google Authenticator password is incorrect."
+msgstr "<strong>ERRO</strong>: a senha do Google Authenticator está incorreta."
+
+#: google-authenticator.php:179
+msgid ""
+"<strong>ERROR</strong>: The Google Authenticator code is incorrect or has "
+"expired."
+msgstr "<strong>ERRO</strong>: o código do Google Authenticator está incorreto ou expirou."
+
+#: google-authenticator.php:215
+msgid "WordPress Blog"
+msgstr "Blog WordPress"
+
+#: google-authenticator.php:218 google-authenticator.php:392
+msgid "Google Authenticator Settings"
+msgstr "Configurações do Google Authenticator"
+
+#: google-authenticator.php:223 google-authenticator.php:396
+msgid "Active"
+msgstr "Ativar"
+
+#: google-authenticator.php:235
+msgid "Relaxed mode"
+msgstr "Modo relaxado"
+
+#: google-authenticator.php:237
+msgid ""
+" Relaxed mode allows for more time drifting on your phone clock (&#177;4 "
+"min)."
+msgstr "O modo relaxado permite mais tempo à deriva no relógio do seu telefone (&#177;4 min)."
+
+#: google-authenticator.php:242
+msgid "Description"
+msgstr "Descrição"
+
+#: google-authenticator.php:243
+msgid ""
+" Description that you'll see in the Google Authenticator app on your phone."
+msgstr "Descrição que você verá no aplicativo Google Authenticator em seu telefone."
+
+#: google-authenticator.php:247
+msgid "Secret"
+msgstr "Secreto"
+
+#: google-authenticator.php:250
+msgid "Create new secret"
+msgstr "Crie um novo segredo"
+
+#: google-authenticator.php:251
+msgid "Show/Hide QR code"
+msgstr "Mostar/Esconder QR Code"
+
+#: google-authenticator.php:259
+msgid "Scan this with the Google Authenticator app."
+msgstr "Escaneie isso com o aplicativo Google Authenticator."
+
+#: google-authenticator.php:264
+msgid "Enable App password"
+msgstr "Ativar senha do aplicativo"
+
+#: google-authenticator.php:266
+msgid " Enabling an App password will decrease your overall login security."
+msgstr "Ativar uma senha de aplicativo diminuirá sua segurança geral de login."
+
+#: google-authenticator.php:274
+msgid "Create new password"
+msgstr "Crie uma nova senha"
+
+#: google-authenticator.php:275
+msgid ""
+" Password is not stored in cleartext, this is your only chance to see it."
+msgstr "A senha não é armazenada em texto puro, essa é sua única chance de vê-la."
+
+#. Plugin Name of the plugin/theme
+msgid "Google Authenticator"
+msgstr "Google Authenticator"
+
+#. Plugin URI of the plugin/theme
+msgid "http://henrik.schack.dk/google-authenticator-for-wordpress"
+msgstr "http://henrik.schack.dk/google-authenticator-for-wordpress"
+
+#. Description of the plugin/theme
+msgid ""
+"Two-Factor Authentication for WordPress using the Android/iPhone/Blackberry "
+"app as One Time Password generator."
+msgstr "Autenticação de dois fatores para WordPress usando o aplicativo Android / iPhone / Blackberry como gerador de senha única."
+
+#. Author of the plugin/theme
+msgid "Henrik Schack"
+msgstr "Henrik Schack"
+
+#. Author URI of the plugin/theme
+msgid "http://henrik.schack.dk/"
+msgstr "http://henrik.schack.dk/"
+
diff --git a/plugins/google-authenticator/readme.txt b/plugins/google-authenticator/readme.txt
index d21c547f..a35ef72e 100644
--- a/plugins/google-authenticator/readme.txt
+++ b/plugins/google-authenticator/readme.txt
@@ -2,8 +2,8 @@
Contributors: ivankk
Tags: authentication,otp,password,security,login,android,iphone,blackberry
Requires at least: 4.5
-Tested up to: 5.1
-Stable tag: 0.51
+Tested up to: 5.2
+Stable tag: 0.52
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -80,6 +80,10 @@ please remember to remove the "Check credentials on all login attempts" checkmar
4. Google Authenticator app on Android
== Changelog ==
+= 0.52 =
+* Add a Dutch translation
+* Add a Portuguese translation
+
= 0.51 =
* Fix a regression that broke app passwords
@@ -116,7 +120,6 @@ please remember to remove the "Check credentials on all login attempts" checkmar
* App password hash function switched to one that doesn't have rainbow tables available.
* PHP notices occurring during app password login removed.
-
= 0.44 =
* Installation/FAQ section updated.
* Simplified Chinese translation by Kaijia Feng added.
@@ -166,6 +169,10 @@ please remember to remove the "Check credentials on all login attempts" checkmar
Thanks to:
+[Fabio Zumbi](https://github.com/FabioZumbi12) for the Portuguese translation
+
+[Guido Schalkx](https://www.guidoschalkx.com/) for the Dutch translation.
+
[Henrik.Schack](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=henrik%40schack%2edk&lc=US&item_name=Google%20Authenticator&item_number=Google%20Authenticator&no_shipping=0&no_note=1&tax=0&bn=PP%2dDonationsBF&charset=UTF%2d8) for writing/maintaining versions 0.20 through 0.48
[Tobias Bäthge](http://tobias.baethge.com/) for his code rewrite and German translation.
diff --git a/plugins/jetpack/.svnignore b/plugins/jetpack/.svnignore
deleted file mode 100644
index 5c764ee9..00000000
--- a/plugins/jetpack/.svnignore
+++ /dev/null
@@ -1,8 +0,0 @@
-.git/
-.gitignore
-.travis.yml
-readme.md
-tests/
-_inc/lib/icalendar-reader.php
-modules/shortcodes/upcoming-events.php
-modules/widgets/upcoming-events.php
diff --git a/plugins/jetpack/3rd-party/3rd-party.php b/plugins/jetpack/3rd-party/3rd-party.php
deleted file mode 100644
index d04506fb..00000000
--- a/plugins/jetpack/3rd-party/3rd-party.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-/**
- * Placeholder to load 3rd party plugin tweaks until a legit system
- * is architected
- */
-
-require_once( JETPACK__PLUGIN_DIR . '3rd-party/buddypress.php' );
-require_once( JETPACK__PLUGIN_DIR . '3rd-party/wpml.php' );
-require_once( JETPACK__PLUGIN_DIR . '3rd-party/bitly.php' );
-require_once( JETPACK__PLUGIN_DIR . '3rd-party/bbpress.php' );
-require_once( JETPACK__PLUGIN_DIR . '3rd-party/woocommerce.php' );
-require_once( JETPACK__PLUGIN_DIR . '3rd-party/domain-mapping.php' );
-require_once( JETPACK__PLUGIN_DIR . '3rd-party/qtranslate-x.php' );
-require_once( JETPACK__PLUGIN_DIR . '3rd-party/vaultpress.php' );
-require_once( JETPACK__PLUGIN_DIR . '3rd-party/beaverbuilder.php' );
-require_once( JETPACK__PLUGIN_DIR . '3rd-party/debug-bar.php' );
-require_once( JETPACK__PLUGIN_DIR . '3rd-party/class.jetpack-modules-overrides.php' );
-
-// We can't load this conditionally since polldaddy add the call in class constuctor.
-require_once( JETPACK__PLUGIN_DIR . '3rd-party/polldaddy.php' );
-require_once( JETPACK__PLUGIN_DIR . '3rd-party/woocommerce-services.php' );
-require_once( JETPACK__PLUGIN_DIR . '3rd-party/class.jetpack-amp-support.php' );
diff --git a/plugins/jetpack/3rd-party/bbpress.php b/plugins/jetpack/3rd-party/bbpress.php
deleted file mode 100644
index 0af7e028..00000000
--- a/plugins/jetpack/3rd-party/bbpress.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-add_action( 'init', 'jetpack_bbpress_compat', 11 ); // Priority 11 needed to ensure sharing_display is loaded.
-
-/**
- * Adds Jetpack + bbPress Compatibility filters.
- *
- * @author Brandon Kraft
- * @since 3.7.1
- */
-function jetpack_bbpress_compat() {
- if ( function_exists( 'sharing_display' ) ) {
- add_filter( 'bbp_get_topic_content', 'sharing_display', 19 );
- add_action( 'bbp_template_after_single_forum', 'jetpack_sharing_bbpress' );
- add_action( 'bbp_template_after_single_topic', 'jetpack_sharing_bbpress' );
- }
-
- /**
- * Enable Markdown support for bbpress post types.
- *
- * @author Brandon Kraft
- * @since 6.0.0
- */
- if ( function_exists( 'bbp_get_topic_post_type' ) ) {
- add_post_type_support( bbp_get_topic_post_type(), 'wpcom-markdown' );
- add_post_type_support( bbp_get_reply_post_type(), 'wpcom-markdown' );
- add_post_type_support( bbp_get_forum_post_type(), 'wpcom-markdown' );
- }
-
- /**
- * Use Photon for all images in Topics and replies.
- *
- * @since 4.9.0
- */
- if ( class_exists( 'Jetpack_Photon' ) && Jetpack::is_module_active( 'photon' ) ) {
- add_filter( 'bbp_get_topic_content', array( 'Jetpack_Photon', 'filter_the_content' ), 999999 );
- add_filter( 'bbp_get_reply_content', array( 'Jetpack_Photon', 'filter_the_content' ), 999999 );
- }
-}
-
-/**
- * Display Jetpack "Sharing" buttons on bbPress 2.x forums/ topics/ lead topics/ replies.
- *
- * Determination if the sharing buttons should display on the post type is handled within sharing_display().
- *
- * @author David Decker
- * @since 3.7.0
- */
-function jetpack_sharing_bbpress() {
- sharing_display( null, true );
-}
diff --git a/plugins/jetpack/3rd-party/beaverbuilder.php b/plugins/jetpack/3rd-party/beaverbuilder.php
deleted file mode 100644
index b3215ca2..00000000
--- a/plugins/jetpack/3rd-party/beaverbuilder.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-/**
- * Beaverbuilder Compatibility.
- */
-class Jetpack_BeaverBuilderCompat {
-
- function __construct() {
- add_action( 'init', array( $this, 'beaverbuilder_refresh' ) );
- }
-
- /**
- * If masterbar module is active force BeaverBuilder to refresh when publishing a layout.
- */
- function beaverbuilder_refresh() {
- if ( Jetpack::is_module_active( 'masterbar' ) ) {
- add_filter( 'fl_builder_should_refresh_on_publish', '__return_true' );
- }
- }
-}
-new Jetpack_BeaverBuilderCompat();
diff --git a/plugins/jetpack/3rd-party/bitly.php b/plugins/jetpack/3rd-party/bitly.php
deleted file mode 100644
index d9b744a5..00000000
--- a/plugins/jetpack/3rd-party/bitly.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-/*
- * Fixes issues with the Official Bitly for WordPress
- * https://wordpress.org/plugins/bitly/
- */
-if( class_exists( 'Bitly' ) ) {
-
- if( isset( $GLOBALS['bitly'] ) ) {
- if ( method_exists( $GLOBALS['bitly'], 'og_tags' ) ) {
- remove_action( 'wp_head', array( $GLOBALS['bitly'], 'og_tags' ) );
- }
-
- add_action( 'wp_head', 'jetpack_bitly_og_tag', 100 );
- }
-
-}
-
-/**
- * jetpack_bitly_og_tag
- *
- * @return null
- */
-function jetpack_bitly_og_tag() {
- if( has_filter( 'wp_head', 'jetpack_og_tags') === false ) {
- // Add the bitly part again back if we don't have any jetpack_og_tags added
- if ( method_exists( $GLOBALS['bitly'], 'og_tags' ) ) {
- $GLOBALS['bitly']->og_tags();
- }
- } elseif ( isset( $GLOBALS['posts'] ) && $GLOBALS['posts'][0]->ID > 0 ) {
- printf( "<meta property=\"bitly:url\" content=\"%s\" /> \n", esc_attr( $GLOBALS['bitly']->get_bitly_link_for_post_id( $GLOBALS['posts'][0]->ID ) ) );
- }
-
-}
diff --git a/plugins/jetpack/3rd-party/buddypress.php b/plugins/jetpack/3rd-party/buddypress.php
deleted file mode 100644
index 9ae35f3c..00000000
--- a/plugins/jetpack/3rd-party/buddypress.php
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php
-
-add_filter( 'bp_core_pre_avatar_handle_upload', 'blobphoto' );
-function blobphoto( $bool ) {
-
- add_filter( 'jetpack_photon_skip_image', '__return_true' );
-
- return $bool;
-}
diff --git a/plugins/jetpack/3rd-party/class.jetpack-amp-support.php b/plugins/jetpack/3rd-party/class.jetpack-amp-support.php
deleted file mode 100644
index 87e021b5..00000000
--- a/plugins/jetpack/3rd-party/class.jetpack-amp-support.php
+++ /dev/null
@@ -1,300 +0,0 @@
-<?php
-
-/**
- * Manages compatibility with the amp-wp plugin
- *
- * @see https://github.com/Automattic/amp-wp
- */
-class Jetpack_AMP_Support {
-
- static function init() {
-
- // enable stats
- if ( Jetpack::is_module_active( 'stats' ) ) {
- add_action( 'amp_post_template_footer', array( 'Jetpack_AMP_Support', 'add_stats_pixel' ) );
- }
-
- // Sharing.
- add_filter( 'jetpack_sharing_display_markup', array( 'Jetpack_AMP_Support', 'render_sharing_html' ), 10, 2 );
-
- // enforce freedom mode for videopress
- add_filter( 'videopress_shortcode_options', array( 'Jetpack_AMP_Support', 'videopress_enable_freedom_mode' ) );
-
- // include Jetpack og tags when rendering native AMP head
- add_action( 'amp_post_template_head', array( 'Jetpack_AMP_Support', 'amp_post_jetpack_og_tags' ) );
-
- // Post rendering changes for legacy AMP
- add_action( 'pre_amp_render_post', array( 'Jetpack_AMP_Support', 'amp_disable_the_content_filters' ) );
-
- // Add post template metadata for legacy AMP
- add_filter( 'amp_post_template_metadata', array( 'Jetpack_AMP_Support', 'amp_post_template_metadata' ), 10, 2 );
- }
-
- static function admin_init() {
- // disable Likes metabox for post editor if AMP canonical disabled
- add_filter( 'post_flair_disable', array( 'Jetpack_AMP_Support', 'is_amp_canonical' ), 99 );
- }
-
- static function is_amp_canonical() {
- return function_exists( 'amp_is_canonical' ) && amp_is_canonical();
- }
-
- static function is_amp_request() {
- $is_amp_request = ( function_exists( 'is_amp_endpoint' ) && is_amp_endpoint() );
-
- /**
- * Returns true if the current request should return valid AMP content.
- *
- * @since 6.2.0
- *
- * @param boolean $is_amp_request Is this request supposed to return valid AMP content?
- */
- return apply_filters( 'jetpack_is_amp_request', $is_amp_request );
- }
-
- static function amp_disable_the_content_filters() {
- if ( defined( 'WPCOM') && WPCOM ) {
- add_filter( 'videopress_show_2015_player', '__return_true' );
- add_filter( 'protected_embeds_use_form_post', '__return_false' );
- remove_filter( 'the_title', 'widont' );
- }
-
- remove_filter( 'pre_kses', array( 'Filter_Embedded_HTML_Objects', 'filter' ), 11 );
- remove_filter( 'pre_kses', array( 'Filter_Embedded_HTML_Objects', 'maybe_create_links' ), 100 );
- }
-
- /**
- * Add Jetpack stats pixel.
- *
- * @since 6.2.1
- */
- static function add_stats_pixel() {
- if ( ! has_action( 'wp_footer', 'stats_footer' ) ) {
- return;
- }
- stats_render_amp_footer( stats_build_view_data() );
- }
-
- /**
- * Add publisher and image metadata to legacy AMP post.
- *
- * @since 6.2.0
- *
- * @param array $metadata Metadata array.
- * @param WP_Post $post Post.
- * @return array Modified metadata array.
- */
- static function amp_post_template_metadata( $metadata, $post ) {
- if ( isset( $metadata['publisher'] ) && ! isset( $metadata['publisher']['logo'] ) ) {
- $metadata = self::add_site_icon_to_metadata( $metadata );
- }
-
- if ( ! isset( $metadata['image'] ) ) {
- $metadata = self::add_image_to_metadata( $metadata, $post );
- }
-
- return $metadata;
- }
-
- /**
- * Add blavatar to legacy AMP post metadata.
- *
- * @since 6.2.0
- *
- * @param array $metadata Metadata.
- * @return array Metadata.
- */
- static function add_site_icon_to_metadata( $metadata ) {
- $size = 60;
-
- if ( function_exists( 'blavatar_domain' ) ) {
- $metadata['publisher']['logo'] = array(
- '@type' => 'ImageObject',
- 'url' => blavatar_url( blavatar_domain( site_url() ), 'img', $size, self::staticize_subdomain( 'https://wordpress.com/i/favicons/apple-touch-icon-60x60.png' ) ),
- 'width' => $size,
- 'height' => $size,
- );
- } else if ( $site_icon_url = Jetpack_Sync_Functions::site_icon_url( $size ) ) {
- $metadata['publisher']['logo'] = array(
- '@type' => 'ImageObject',
- 'url' => $site_icon_url,
- 'width' => $size,
- 'height' => $size,
- );
- }
-
- return $metadata;
- }
-
- /**
- * Add image to legacy AMP post metadata.
- *
- * @since 6.2.0
- *
- * @param array $metadata Metadata.
- * @param WP_Post $post Post.
- * @return array Metadata.
- */
- static function add_image_to_metadata( $metadata, $post ) {
- $image = Jetpack_PostImages::get_image( $post->ID, array(
- 'fallback_to_avatars' => true,
- 'avatar_size' => 200,
- // AMP already attempts these.
- 'from_thumbnail' => false,
- 'from_attachment' => false,
- ) );
-
- if ( empty( $image ) ) {
- return self::add_fallback_image_to_metadata( $metadata );
- }
-
- if ( ! isset( $image['src_width'] ) ) {
- $dimensions = self::extract_image_dimensions_from_getimagesize( array(
- $image['src'] => false,
- ) );
-
- if ( false !== $dimensions[ $image['src'] ] ) {
- $image['src_width'] = $dimensions['width'];
- $image['src_height'] = $dimensions['height'];
- }
- }
-
- $metadata['image'] = array(
- '@type' => 'ImageObject',
- 'url' => $image['src'],
- );
- if ( isset( $image['src_width'] ) ) {
- $metadata['image']['width'] = $image['src_width'];
- }
- if ( isset( $image['src_width'] ) ) {
- $metadata['image']['height'] = $image['src_height'];
- }
-
- return $metadata;
- }
-
- /**
- * Add fallback image to legacy AMP post metadata.
- *
- * @since 6.2.0
- *
- * @param array $metadata Metadata.
- * @return array Metadata.
- */
- static function add_fallback_image_to_metadata( $metadata ) {
- /** This filter is documented in functions.opengraph.php */
- $default_image = apply_filters( 'jetpack_open_graph_image_default', 'https://wordpress.com/i/blank.jpg' );
-
- $metadata['image'] = array(
- '@type' => 'ImageObject',
- 'url' => self::staticize_subdomain( $default_image ),
- 'width' => 200,
- 'height' => 200,
- );
-
- return $metadata;
- }
-
- static function staticize_subdomain( $domain ) {
- // deal with WPCOM vs Jetpack
- if ( function_exists( 'staticize_subdomain' ) ) {
- return staticize_subdomain( $domain );
- } else {
- return Jetpack::staticize_subdomain( $domain );
- }
- }
-
- /**
- * Extract image dimensions via wpcom/imagesize, only on WPCOM
- *
- * @since 6.2.0
- *
- * @param array $dimensions Dimensions.
- * @return array Dimensions.
- */
- static function extract_image_dimensions_from_getimagesize( $dimensions ) {
- if ( ! ( defined('WPCOM') && WPCOM && function_exists( 'require_lib' ) ) ) {
- return $dimensions;
- }
- require_lib( 'wpcom/imagesize' );
-
- foreach ( $dimensions as $url => $value ) {
- if ( is_array( $value ) ) {
- continue;
- }
- $result = wpcom_getimagesize( $url );
- if ( is_array( $result ) ) {
- $dimensions[ $url ] = array(
- 'width' => $result[0],
- 'height' => $result[1],
- );
- }
- }
-
- return $dimensions;
- }
-
- static function amp_post_jetpack_og_tags() {
- Jetpack::init()->check_open_graph();
- if ( function_exists( 'jetpack_og_tags' ) ) {
- jetpack_og_tags();
- }
- }
-
- static function videopress_enable_freedom_mode( $options ) {
- if ( self::is_amp_request() ) {
- $options['freedom'] = true;
- }
- return $options;
- }
-
- static function render_sharing_html( $markup, $sharing_enabled ) {
- if ( ! self::is_amp_request() ) {
- return $markup;
- }
-
- remove_action( 'wp_footer', 'sharing_add_footer' );
- if ( empty( $sharing_enabled ) ) {
- return $markup;
- }
- $supported_services = array(
- 'facebook' => array(
- /** This filter is documented in modules/sharedaddy/sharing-sources.php */
- 'data-param-app_id' => apply_filters( 'jetpack_sharing_facebook_app_id', '249643311490' ),
- ),
- 'twitter' => array(),
- 'pinterest' => array(),
- 'whatsapp' => array(),
- 'google-plus-1' => array(
- 'type' => 'gplus',
- ),
- 'tumblr' => array(),
- 'linkedin' => array(),
- );
- $sharing_links = array();
- foreach ( $sharing_enabled['visible'] as $id => $service ) {
- if ( ! isset( $supported_services[ $id ] ) ) {
- $sharing_links[] = "<!-- not supported: $id -->";
- continue;
- }
- $args = array_merge(
- array(
- 'type' => $id,
- ),
- $supported_services[ $id ]
- );
- $sharing_link = '<amp-social-share';
- foreach ( $args as $key => $value ) {
- $sharing_link .= sprintf( ' %s="%s"', sanitize_key( $key ), esc_attr( $value ) );
- }
- $sharing_link .= '></amp-social-share>';
- $sharing_links[] = $sharing_link;
- }
- return preg_replace( '#(?<=<div class="sd-content">).+?(?=</div>)#s', implode( '', $sharing_links ), $markup );
- }
-}
-
-add_action( 'init', array( 'Jetpack_AMP_Support', 'init' ), 1 );
-
-add_action( 'admin_init', array( 'Jetpack_AMP_Support', 'admin_init' ), 1 );
-
diff --git a/plugins/jetpack/3rd-party/class.jetpack-modules-overrides.php b/plugins/jetpack/3rd-party/class.jetpack-modules-overrides.php
deleted file mode 100644
index f0d86be9..00000000
--- a/plugins/jetpack/3rd-party/class.jetpack-modules-overrides.php
+++ /dev/null
@@ -1,143 +0,0 @@
-<?php
-
-/**
- * Provides methods for dealing with module overrides.
- *
- * @since 5.9.0
- */
-class Jetpack_Modules_Overrides {
- /**
- * Used to cache module overrides so that we minimize how many times we appy the
- * option_jetpack_active_modules filter.
- *
- * @var null|array
- */
- private $overrides = null;
-
- /**
- * Clears the $overrides member used for caching.
- *
- * Since get_overrides() can be passed a falsey value to skip caching, this is probably
- * most useful for clearing cache between tests.
- *
- * @return void
- */
- public function clear_cache() {
- $this->overrides = null;
- }
-
- /**
- * Returns true if there is a filter on the jetpack_active_modules option.
- *
- * @return bool Whether there is a filter on the jetpack_active_modules option.
- */
- public function do_overrides_exist() {
- return (bool) ( has_filter( 'option_jetpack_active_modules' ) || has_filter( 'jetpack_active_modules' ) );
- }
-
- /**
- * Gets the override for a given module.
- *
- * @param string $module_slug The module's slug.
- * @param boolean $use_cache Whether or not cached overrides should be used.
- *
- * @return bool|string False if no override for module. 'active' or 'inactive' if there is an override.
- */
- public function get_module_override( $module_slug, $use_cache = true ) {
- $overrides = $this->get_overrides( $use_cache );
-
- if ( ! isset( $overrides[ $module_slug ] ) ) {
- return false;
- }
-
- return $overrides[ $module_slug ];
- }
-
- /**
- * Returns an array of module overrides where the key is the module slug and the value
- * is true if the module is forced on and false if the module is forced off.
- *
- * @param bool $use_cache Whether or not cached overrides should be used.
- *
- * @return array The array of module overrides.
- */
- public function get_overrides( $use_cache = true ) {
- if ( $use_cache && ! is_null( $this->overrides ) ) {
- return $this->overrides;
- }
-
- if ( ! $this->do_overrides_exist() ) {
- return array();
- }
-
- $available_modules = Jetpack::get_available_modules();
-
- /**
- * First, let's get all modules that have been forced on.
- */
-
- /** This filter is documented in wp-includes/option.php */
- $filtered = apply_filters( 'option_jetpack_active_modules', array() );
-
- /** This filter is documented in class.jetpack.php */
- $filtered = apply_filters( 'jetpack_active_modules', $filtered );
-
- $forced_on = array_diff( $filtered, array() );
-
- /**
- * Second, let's get all modules forced off.
- */
-
- /** This filter is documented in wp-includes/option.php */
- $filtered = apply_filters( 'option_jetpack_active_modules', $available_modules );
-
- /** This filter is documented in class.jetpack.php */
- $filtered = apply_filters( 'jetpack_active_modules', $filtered );
-
- $forced_off = array_diff( $available_modules, $filtered );
-
- /**
- * Last, build the return value.
- */
- $return_value = array();
- foreach ( $forced_on as $on ) {
- $return_value[ $on ] = 'active';
- }
-
- foreach ( $forced_off as $off ) {
- $return_value[ $off ] = 'inactive';
- }
-
- $this->overrides = $return_value;
-
- return $return_value;
- }
-
- /**
- * A reference to an instance of this class.
- *
- * @var Jetpack_Modules_Overrides
- */
- private static $instance = null;
-
- /**
- * Returns the singleton instance of Jetpack_Modules_Overrides
- *
- * @return Jetpack_Modules_Overrides
- */
- public static function instance() {
- if ( is_null( self::$instance ) ) {
- self::$instance = new Jetpack_Modules_Overrides();
- }
-
- return self::$instance;
- }
-
- /**
- * Private construct to enforce singleton.
- */
- private function __construct() {
- }
-}
-
-Jetpack_Modules_Overrides::instance();
diff --git a/plugins/jetpack/3rd-party/debug-bar.php b/plugins/jetpack/3rd-party/debug-bar.php
deleted file mode 100644
index a6449903..00000000
--- a/plugins/jetpack/3rd-party/debug-bar.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-/**
- * Checks if the search module is active, and if so, will initialize the singleton instance
- * of Jetpack_Search_Debug_Bar and add it to the array of debug bar panels.
- *
- * @param array $panels The array of debug bar panels.
- * @return array $panel The array of debug bar panels with our added panel.
- */
-function init_jetpack_search_debug_bar( $panels ) {
- if ( ! Jetpack::is_module_active( 'search' ) ) {
- return $panels;
- }
-
- require_once dirname( __FILE__ ) . '/debug-bar/class.jetpack-search-debug-bar.php';
- $panels[] = Jetpack_Search_Debug_Bar::instance();
- return $panels;
-}
-add_filter( 'debug_bar_panels', 'init_jetpack_search_debug_bar' );
diff --git a/plugins/jetpack/3rd-party/debug-bar/class.jetpack-search-debug-bar.php b/plugins/jetpack/3rd-party/debug-bar/class.jetpack-search-debug-bar.php
deleted file mode 100644
index 025f7c21..00000000
--- a/plugins/jetpack/3rd-party/debug-bar/class.jetpack-search-debug-bar.php
+++ /dev/null
@@ -1,173 +0,0 @@
-<?php
-
-/**
- * Singleton class instantiated by Jetpack_Searc_Debug_Bar::instance() that handles
- * rendering the Jetpack Search debug bar menu item and panel.
- */
-class Jetpack_Search_Debug_Bar extends Debug_Bar_Panel {
- /**
- * Holds singleton instance
- *
- * @var Jetpack_Search_Debug_Bar
- */
- protected static $instance = null;
-
- /**
- * The title to use in the debug bar navigation
- *
- * @var string
- */
- public $title;
-
- /**
- * Constructor
- */
- public function __construct() {
- $this->title( esc_html__( 'Jetpack Search', 'jetpack' ) );
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
- add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
- add_action( 'login_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
- add_action( 'enqueue_embed_scripts', array( $this, 'enqueue_scripts' ) );
- }
-
- /**
- * Returns the singleton instance of Jetpack_Search_Debug_Bar
- *
- * @return Jetpack_Search_Debug_Bar
- */
- public static function instance() {
- if ( is_null( self::$instance ) ) {
- self::$instance = new Jetpack_Search_Debug_Bar();
- }
- return self::$instance;
- }
-
- /**
- * Enqueues styles for our panel in the debug bar
- *
- * @return void
- */
- public function enqueue_scripts() {
- // Do not enqueue scripts if we haven't already enqueued Debug Bar or Query Monitor styles.
- if ( ! wp_style_is( 'debug-bar' ) && ! wp_style_is( 'query-monitor' ) ) {
- return;
- }
-
- wp_enqueue_style(
- 'jetpack-search-debug-bar',
- plugins_url( '3rd-party/debug-bar/debug-bar.css', JETPACK__PLUGIN_FILE )
- );
- wp_enqueue_script(
- 'jetpack-search-debug-bar',
- plugins_url( '3rd-party/debug-bar/debug-bar.js', JETPACK__PLUGIN_FILE ),
- array( 'jquery' )
- );
- }
-
- /**
- * Should the Jetpack Search Debug Bar show?
- *
- * Since we've previously done a check for the search module being activated, let's just return true.
- * Later on, we can update this to only show when `is_search()` is true.
- *
- * @return boolean
- */
- public function is_visible() {
- return true;
- }
-
- /**
- * Renders the panel content
- *
- * @return void
- */
- public function render() {
- if ( ! class_exists( 'Jetpack_Search' ) ) {
- return;
- }
-
- $jetpack_search = Jetpack_Search::instance();
- $last_query_info = $jetpack_search->get_last_query_info();
-
- // If not empty, let's reshuffle the order of some things.
- if ( ! empty( $last_query_info ) ) {
- $args = $last_query_info['args'];
- $response = $last_query_info['response'];
- $response_code = $last_query_info['response_code'];
-
- unset( $last_query_info['args'] );
- unset( $last_query_info['response'] );
- unset( $last_query_info['response_code'] );
-
- if ( is_null( $last_query_info['es_time'] ) ) {
- $last_query_info['es_time'] = esc_html_x(
- 'cache hit',
- 'displayed in search results when results are cached',
- 'jetpack'
- );
- }
-
- $temp = array_merge(
- array( 'response_code' => $response_code ),
- array( 'args' => $args ),
- $last_query_info,
- array( 'response' => $response )
- );
-
- $last_query_info = $temp;
- }
- ?>
- <div class="jetpack-search-debug-bar">
- <h2><?php esc_html_e( 'Last query information:', 'jetpack' ); ?></h2>
- <?php if ( empty( $last_query_info ) ) : ?>
- <?php echo esc_html_x( 'None', 'Text displayed when there is no information', 'jetpack' ); ?>
- <?php
- else :
- foreach ( $last_query_info as $key => $info ) :
- ?>
- <h3><?php echo esc_html( $key ); ?></h3>
- <?php
- if ( 'response' !== $key && 'args' !== $key ) :
- ?>
- <pre><?php print_r( esc_html( $info ) ); ?></pre>
- <?php
- else :
- $this->render_json_toggle( $info );
- endif;
- ?>
- <?php
- endforeach;
- endif;
- ?>
- </div><!-- Closes .jetpack-search-debug-bar -->
- <?php
- }
-
- /**
- * Responsible for rendering the HTML necessary for the JSON toggle
- *
- * @param array $value The resonse from the API as an array.
- * @return void
- */
- public function render_json_toggle( $value ) {
- ?>
- <div class="json-toggle-wrap">
- <pre class="json"><?php
- // esc_html() will not double-encode entities (&amp; -> &amp;amp;).
- // If any entities are part of the JSON blob, we want to re-encoode them
- // (double-encode them) so that they are displayed correctly in the debug
- // bar.
- // Use _wp_specialchars() "manually" to ensure entities are encoded correctly.
- echo _wp_specialchars(
- wp_json_encode( $value ),
- ENT_NOQUOTES, // Don't need to encode quotes (output is for a text node).
- 'UTF-8', // wp_json_encode() outputs UTF-8 (really just ASCII), not the blog's charset.
- true // Do "double-encode" existing HTML entities
- );
- ?></pre>
- <span class="pretty toggle"><?php echo esc_html_x( 'Pretty', 'label for formatting JSON', 'jetpack' ); ?></span>
- <span class="ugly toggle"><?php echo esc_html_x( 'Minify', 'label for formatting JSON', 'jetpack' ); ?></span>
- </div>
- <?php
- }
-}
diff --git a/plugins/jetpack/3rd-party/debug-bar/debug-bar.css b/plugins/jetpack/3rd-party/debug-bar/debug-bar.css
deleted file mode 100644
index 2cc922c4..00000000
--- a/plugins/jetpack/3rd-party/debug-bar/debug-bar.css
+++ /dev/null
@@ -1,56 +0,0 @@
-.jetpack-search-debug-bar h2,
-.qm-debug-bar-output .jetpack-search-debug-bar h2 {
- float: none !important;
- padding: 0 !important;
- text-align: left !important;
-}
-
-.qm-debug-bar-output .jetpack-search-debug-bar h2 {
- margin-top: 1em !important;
-}
-
-.qm-debug-bar-output .jetpack-search-debug-bar h2:first-child {
- margin-top: .5em !important;
-}
-
-.debug-menu-target h3 {
- padding-top: 0
-}
-
-.jetpack-search-debug-output-toggle .print-r {
- display: none;
-}
-
-.json-toggle-wrap {
- position: relative;
-}
-
-.json-toggle-wrap .toggle {
- position: absolute;
- bottom: 10px;
- right: 10px;
- background: #fff;
- border: 1px solid #000;
- cursor: pointer;
- padding: 2px 4px;
-}
-
-.json-toggle-wrap .ugly {
- display: none;
-}
-
-.json-toggle-wrap.pretty .pretty {
- display: none;
-}
-
-.json-toggle-wrap.pretty .ugly {
- display: inline;
-}
-
-.jetpack-search-debug-bar pre {
- white-space: pre-wrap;
- white-space: -moz-pre-wrap;
- white-space: -pre-wrap;
- white-space: -o-pre-wrap;
- word-wrap: break-word;
-}
diff --git a/plugins/jetpack/3rd-party/debug-bar/debug-bar.js b/plugins/jetpack/3rd-party/debug-bar/debug-bar.js
deleted file mode 100644
index 5043cf10..00000000
--- a/plugins/jetpack/3rd-party/debug-bar/debug-bar.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/* global jQuery, JSON */
-
-( function( $ ) {
- $( document ).ready( function() {
- $( '.jetpack-search-debug-bar .json-toggle-wrap .toggle' ).click( function() {
- var t = $( this ),
- wrap = t.closest( '.json-toggle-wrap' ),
- pre = wrap.find( 'pre' ),
- content = pre.text(),
- isPretty = wrap.hasClass( 'pretty' );
-
- if ( ! isPretty ) {
- pre.text( JSON.stringify( JSON.parse( content ), null, 2 ) );
- } else {
- content.replace( '\t', '' ).replace( '\n', '' ).replace( ' ', '' );
- pre.text( JSON.stringify( JSON.parse( content ) ) );
- }
-
- wrap.toggleClass( 'pretty' );
- } );
- } );
-} )( jQuery );
diff --git a/plugins/jetpack/3rd-party/domain-mapping.php b/plugins/jetpack/3rd-party/domain-mapping.php
deleted file mode 100644
index 6079ac32..00000000
--- a/plugins/jetpack/3rd-party/domain-mapping.php
+++ /dev/null
@@ -1,113 +0,0 @@
-<?php
-
-/**
- * Class Jetpack_3rd_Party_Domain_Mapping
- *
- * This class contains methods that are used to provide compatibility between Jetpack sync and domain mapping plugins.
- */
-class Jetpack_3rd_Party_Domain_Mapping {
-
- /**
- * @var Jetpack_3rd_Party_Domain_Mapping
- **/
- private static $instance = null;
-
- /**
- * An array of methods that are used to hook the Jetpack sync filters for home_url and site_url to a mapping plugin.
- *
- * @var array
- */
- static $test_methods = array(
- 'hook_wordpress_mu_domain_mapping',
- 'hook_wpmu_dev_domain_mapping'
- );
-
- static function init() {
- if ( is_null( self::$instance ) ) {
- self::$instance = new Jetpack_3rd_Party_Domain_Mapping;
- }
-
- return self::$instance;
- }
-
- private function __construct() {
- add_action( 'plugins_loaded', array( $this, 'attempt_to_hook_domain_mapping_plugins' ) );
- }
-
- /**
- * This function is called on the plugins_loaded action and will loop through the $test_methods
- * to try and hook a domain mapping plugin to the Jetpack sync filters for the home_url and site_url callables.
- */
- function attempt_to_hook_domain_mapping_plugins() {
- if ( ! Jetpack_Constants::is_defined( 'SUNRISE' ) ) {
- return;
- }
-
- $hooked = false;
- $count = count( self::$test_methods );
- for ( $i = 0; $i < $count && ! $hooked; $i++ ) {
- $hooked = call_user_func( array( $this, self::$test_methods[ $i ] ) );
- }
- }
-
- /**
- * This method will test for a constant and function that are known to be used with Donncha's WordPress MU
- * Domain Mapping plugin. If conditions are met, we hook the domain_mapping_siteurl() function to Jetpack sync
- * filters for home_url and site_url callables.
- *
- * @return bool
- */
- function hook_wordpress_mu_domain_mapping() {
- if ( ! Jetpack_Constants::is_defined( 'SUNRISE_LOADED' ) || ! $this->function_exists( 'domain_mapping_siteurl' ) ) {
- return false;
- }
-
- add_filter( 'jetpack_sync_home_url', 'domain_mapping_siteurl' );
- add_filter( 'jetpack_sync_site_url', 'domain_mapping_siteurl' );
-
- return true;
- }
-
- /**
- * This method will test for a class and method known to be used in WPMU Dev's domain mapping plugin. If the
- * method exists, then we'll hook the swap_to_mapped_url() to our Jetpack sync filters for home_url and site_url.
- *
- * @return bool
- */
- function hook_wpmu_dev_domain_mapping() {
- if ( ! $this->class_exists( 'domain_map' ) || ! $this->method_exists( 'domain_map', 'utils' ) ) {
- return false;
- }
-
- $utils = $this->get_domain_mapping_utils_instance();
- add_filter( 'jetpack_sync_home_url', array( $utils, 'swap_to_mapped_url' ) );
- add_filter( 'jetpack_sync_site_url', array( $utils, 'swap_to_mapped_url' ) );
-
- return true;
- }
-
- /*
- * Utility Methods
- *
- * These methods are very minimal, and in most cases, simply pass on arguments. Why create them you ask?
- * So that we can test.
- */
-
- public function method_exists( $class, $method ) {
- return method_exists( $class, $method );
- }
-
- public function class_exists( $class ) {
- return class_exists( $class );
- }
-
- public function function_exists( $function ) {
- return function_exists( $function );
- }
-
- public function get_domain_mapping_utils_instance() {
- return domain_map::utils();
- }
-}
-
-Jetpack_3rd_Party_Domain_Mapping::init();
diff --git a/plugins/jetpack/3rd-party/polldaddy.php b/plugins/jetpack/3rd-party/polldaddy.php
deleted file mode 100644
index ec484829..00000000
--- a/plugins/jetpack/3rd-party/polldaddy.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-class Jetpack_Sync {
- static function sync_options() {
- _deprecated_function( __METHOD__, 'jetpack-4.2', 'jetpack_options_whitelist filter' );
- }
-}
diff --git a/plugins/jetpack/3rd-party/qtranslate-x.php b/plugins/jetpack/3rd-party/qtranslate-x.php
deleted file mode 100644
index 07390b05..00000000
--- a/plugins/jetpack/3rd-party/qtranslate-x.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-/**
- * Prevent qTranslate X from redirecting REST calls.
- *
- * @since 5.3
- *
- * @param string $url_lang Language URL to redirect to.
- * @param string $url_orig Original URL.
- * @param array $url_info Pieces of original URL.
- *
- * @return bool
- */
-function jetpack_no_qtranslate_rest_url_redirect( $url_lang, $url_orig, $url_info ) {
- if ( false !== strpos( $url_info['wp-path'], 'wp-json/jetpack' ) ) {
- return false;
- }
- return $url_lang;
-}
-add_filter( 'qtranslate_language_detect_redirect', 'jetpack_no_qtranslate_rest_url_redirect', 10, 3 );
diff --git a/plugins/jetpack/3rd-party/vaultpress.php b/plugins/jetpack/3rd-party/vaultpress.php
deleted file mode 100644
index 17f47aeb..00000000
--- a/plugins/jetpack/3rd-party/vaultpress.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/**
- * Notify user that VaultPress has been disabled. Hide VaultPress notice that requested attention.
- *
- * @since 5.8
- */
-function jetpack_vaultpress_rewind_enabled_notice() {
- // The deactivation is performed here because there may be pages that admin_init runs on,
- // such as admin_ajax, that could deactivate the plugin without showing this notification.
- deactivate_plugins( 'vaultpress/vaultpress.php' );
-
- // Remove WP core notice that says that the plugin was activated.
- if ( isset( $_GET['activate'] ) ) {
- unset( $_GET['activate'] );
- }
- ?>
- <div class="notice notice-success vp-deactivated">
- <h2 style="margin-bottom: 0.25em;"><?php _e( 'Jetpack is now handling your backups.', 'jetpack' ); ?></h2>
- <p><?php _e( 'VaultPress is no longer needed and has been deactivated.', 'jetpack' ); ?></p>
- </div>
- <style>#vp-notice{display:none;}</style>
- <?php
-}
-
-/**
- * If Rewind is enabled, remove its entry in sidebar, deactivate VaultPress, and show a notification.
- *
- * @since 5.8
- */
-function jetpack_vaultpress_rewind_check() {
- if ( Jetpack::is_active() &&
- Jetpack::is_plugin_active( 'vaultpress/vaultpress.php' ) &&
- Jetpack::is_rewind_enabled()
- ) {
- remove_submenu_page( 'jetpack', 'vaultpress' );
-
- add_action( 'admin_notices', 'jetpack_vaultpress_rewind_enabled_notice' );
- }
-}
-
-add_action( 'admin_init', 'jetpack_vaultpress_rewind_check', 11 );
diff --git a/plugins/jetpack/3rd-party/woocommerce-services.php b/plugins/jetpack/3rd-party/woocommerce-services.php
deleted file mode 100644
index b868697f..00000000
--- a/plugins/jetpack/3rd-party/woocommerce-services.php
+++ /dev/null
@@ -1,133 +0,0 @@
-<?php
-
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-class WC_Services_Installer {
-
- /**
- * @var Jetpack
- **/
- private $jetpack;
-
- /**
- * @var WC_Services_Installer
- **/
- private static $instance = null;
-
- static function init() {
- if ( is_null( self::$instance ) ) {
- self::$instance = new WC_Services_Installer();
- }
- return self::$instance;
- }
-
- public function __construct() {
- $this->jetpack = Jetpack::init();
-
- add_action( 'admin_init', array( $this, 'add_error_notice' ) );
- add_action( 'admin_init', array( $this, 'try_install' ) );
- }
-
- /**
- * Verify the intent to install WooCommerce Services, and kick off installation.
- */
- public function try_install() {
- if ( ! isset( $_GET['wc-services-action'] ) ) {
- return;
- }
- check_admin_referer( 'wc-services-install' );
-
- $result = false;
-
- switch ( $_GET['wc-services-action'] ) {
- case 'install':
- if ( current_user_can( 'install_plugins' ) ) {
- $this->jetpack->stat( 'jitm', 'wooservices-install-' . JETPACK__VERSION );
- $result = $this->install();
- if ( $result ) {
- $result = $this->activate();
- }
- }
- break;
-
- case 'activate':
- if ( current_user_can( 'activate_plugins' ) ) {
- $this->jetpack->stat( 'jitm', 'wooservices-activate-' . JETPACK__VERSION );
- $result = $this->activate();
- }
- break;
- }
-
- $redirect = isset( $_GET['redirect'] ) ? admin_url( $_GET['redirect'] ) : wp_get_referer();
-
- if ( $result ) {
- $this->jetpack->stat( 'jitm', 'wooservices-activated-' . JETPACK__VERSION );
- } else {
- $redirect = add_query_arg( 'wc-services-install-error', true, $redirect );
- }
-
- wp_safe_redirect( $redirect );
-
- exit;
- }
-
- /**
- * Set up installation error admin notice.
- */
- public function add_error_notice() {
- if ( ! empty( $_GET['wc-services-install-error'] ) ) {
- add_action( 'admin_notices', array( $this, 'error_notice' ) );
- }
- }
-
- /**
- * Notify the user that the installation of WooCommerce Services failed.
- */
- public function error_notice() {
- ?>
- <div class="notice notice-error is-dismissible">
- <p><?php _e( 'There was an error installing WooCommerce Services.', 'jetpack' ); ?></p>
- </div>
- <?php
- }
-
- /**
- * Download and install the WooCommerce Services plugin.
- *
- * @return bool result of installation
- */
- private function install() {
- include_once( ABSPATH . '/wp-admin/includes/admin.php' );
- include_once( ABSPATH . '/wp-admin/includes/plugin-install.php' );
- include_once( ABSPATH . '/wp-admin/includes/plugin.php' );
- include_once( ABSPATH . '/wp-admin/includes/class-wp-upgrader.php' );
- include_once( ABSPATH . '/wp-admin/includes/class-plugin-upgrader.php' );
-
- $api = plugins_api( 'plugin_information', array( 'slug' => 'woocommerce-services' ) );
-
- if ( is_wp_error( $api ) ) {
- return false;
- }
-
- $upgrader = new Plugin_Upgrader( new Automatic_Upgrader_Skin() );
- $result = $upgrader->install( $api->download_link );
-
- return true === $result;
- }
-
- /**
- * Activate the WooCommerce Services plugin.
- *
- * @return bool result of activation
- */
- private function activate() {
- $result = activate_plugin( 'woocommerce-services/woocommerce-services.php' );
-
- // activate_plugin() returns null on success
- return is_null( $result );
- }
-}
-
-WC_Services_Installer::init();
diff --git a/plugins/jetpack/3rd-party/woocommerce.php b/plugins/jetpack/3rd-party/woocommerce.php
deleted file mode 100644
index 78a307b6..00000000
--- a/plugins/jetpack/3rd-party/woocommerce.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-/**
- * This file contains compatibility functions for WooCommerce to improve Jetpack feature support.
- */
-add_action( 'woocommerce_init', 'jetpack_woocommerce_integration' );
-
-function jetpack_woocommerce_integration() {
- /**
- * Double check WooCommerce exists - unlikely to fail due to the hook being used but better safe than sorry.
- */
- if ( ! class_exists( 'WooCommerce' ) ) {
- return;
- }
-
- add_action( 'woocommerce_share', 'jetpack_woocommerce_social_share_icons', 10 );
-
- /**
- * Wrap in function exists check since this requires WooCommerce 3.3+.
- */
- if ( function_exists( 'wc_get_default_products_per_row' ) ) {
- add_filter( 'infinite_scroll_render_callbacks', 'jetpack_woocommerce_infinite_scroll_render_callback', 10 );
- add_action( 'wp_enqueue_scripts', 'jetpack_woocommerce_infinite_scroll_style', 10 );
- }
-}
-
-/*
- * Make sure the social sharing icons show up under the product's short description
- */
-function jetpack_woocommerce_social_share_icons() {
- if ( function_exists( 'sharing_display' ) ) {
- remove_filter( 'the_content', 'sharing_display', 19 );
- remove_filter( 'the_excerpt', 'sharing_display', 19 );
- echo sharing_display();
- }
-}
-
-/**
- * Remove sharing display from account, cart, and checkout pages in WooCommerce.
- */
-function jetpack_woocommerce_remove_share() {
- /**
- * Double check WooCommerce exists - unlikely to fail due to the hook being used but better safe than sorry.
- */
- if ( ! class_exists( 'WooCommerce' ) ) {
- return;
- }
-
- if ( is_cart() || is_checkout() || is_account_page() ) {
- remove_filter( 'the_content', 'sharing_display', 19 );
- if ( class_exists( 'Jetpack_Likes' ) ) {
- remove_filter( 'the_content', array( Jetpack_Likes::init(), 'post_likes' ), 30, 1 );
- }
- }
-}
-add_action( 'loop_start', 'jetpack_woocommerce_remove_share' );
-
-/**
- * Add a callback for WooCommerce product rendering in infinite scroll.
- *
- * @param array $callbacks
- * @return array
- */
-function jetpack_woocommerce_infinite_scroll_render_callback( $callbacks ) {
- $callbacks[] = 'jetpack_woocommerce_infinite_scroll_render';
- return $callbacks;
-}
-
-/**
- * Add a default renderer for WooCommerce products within infinite scroll.
- */
-function jetpack_woocommerce_infinite_scroll_render() {
- if ( ! is_shop() && ! is_product_taxonomy() && ! is_product_category() && ! is_product_tag() ) {
- return;
- }
-
- woocommerce_product_loop_start();
-
- while ( have_posts() ) {
- the_post();
- wc_get_template_part( 'content', 'product' );
- }
-
- woocommerce_product_loop_end();
-}
-
-/**
- * Basic styling when infinite scroll is active only.
- */
-function jetpack_woocommerce_infinite_scroll_style() {
- $custom_css = "
- .infinite-scroll .woocommerce-pagination {
- display: none;
- }";
- wp_add_inline_style( 'woocommerce-layout', $custom_css );
-}
-
-function jetpack_woocommerce_lazy_images_compat() {
- wp_add_inline_script( 'wc-cart-fragments', "
- jQuery( 'body' ).bind( 'wc_fragments_refreshed', function() {
- jQuery( 'body' ).trigger( 'jetpack-lazy-images-load' );
- } );
- " );
-}
-
-add_action( 'wp_enqueue_scripts', 'jetpack_woocommerce_lazy_images_compat', 11 );
diff --git a/plugins/jetpack/3rd-party/wpml.php b/plugins/jetpack/3rd-party/wpml.php
deleted file mode 100644
index 219cb37d..00000000
--- a/plugins/jetpack/3rd-party/wpml.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-/**
- * Only load these if WPML plugin is installed and active.
- */
-
-/**
- * Load routines only if WPML is loaded.
- *
- * @since 4.4.0
- */
-function wpml_jetpack_init() {
- add_action( 'jetpack_widget_get_top_posts', 'wpml_jetpack_widget_get_top_posts', 10, 3 );
- add_filter( 'grunion_contact_form_field_html', 'grunion_contact_form_field_html_filter', 10, 3 );
-}
-add_action( 'wpml_loaded', 'wpml_jetpack_init' );
-
-/**
- * Filter the Top Posts and Pages by language.
- *
- * @param array $posts Array of the most popular posts.
- * @param array $post_ids Array of Post IDs.
- * @param string $count Number of Top Posts we want to display.
- *
- * @return array
- */
-function wpml_jetpack_widget_get_top_posts( $posts, $post_ids, $count ) {
- global $sitepress;
-
- foreach ( $posts as $k => $post ) {
- $lang_information = wpml_get_language_information( $post['post_id'] );
- if ( ! is_wp_error( $lang_information ) ) {
- $post_language = substr( $lang_information['locale'], 0, 2 );
- if ( $post_language !== $sitepress->get_current_language() ) {
- unset( $posts[ $k ] );
- }
- }
- }
-
- return $posts;
-}
-
-/**
- * Filter the HTML of the Contact Form and output the one requested by language.
- *
- * @param string $r Contact Form HTML output.
- * @param string $field_label Field label.
- * @param int|null $id Post ID.
- *
- * @return string
- */
-function grunion_contact_form_field_html_filter( $r, $field_label, $id ){
- global $sitepress;
-
- if ( function_exists( 'icl_translate' ) ) {
- if ( $sitepress->get_current_language() !== $sitepress->get_default_language() ) {
- $label_translation = icl_translate( 'jetpack ', $field_label . '_label', $field_label );
- $r = str_replace( $field_label, $label_translation, $r );
- }
- }
-
- return $r;
-}
diff --git a/plugins/jetpack/CODE-OF-CONDUCT.md b/plugins/jetpack/CODE-OF-CONDUCT.md
deleted file mode 100644
index 21043481..00000000
--- a/plugins/jetpack/CODE-OF-CONDUCT.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# Contributor Code of Conduct
-
-As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
-
-We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality.
-
-Examples of unacceptable behavior by participants include:
-
-* The use of sexualized language or imagery
-* Personal attacks
-* Trolling or insulting/derogatory comments
-* Public or private harassment
-* Publishing other's private information, such as physical or electronic addresses, without explicit permission
-* Other unethical or unprofessional conduct
-
-Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
-
-By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these principles to every aspect of managing this project. Project maintainers who do not follow or enforce the Code of Conduct may be permanently removed from the project team.
-
-This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community.
-
-Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by emailing a project maintainer via [this contact form](https://developer.wordpress.com/contact/?g21-subject=Code%20of%20Conduct), with a subject that includes `Code of Conduct`. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. Maintainers are obligated to maintain confidentiality with regard to the reporter of an incident.
-
-
-This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.3.0, available at [http://contributor-covenant.org/version/1/3/0/][version]
-
-[homepage]: http://contributor-covenant.org
-[version]: http://contributor-covenant.org/version/1/3/0/
diff --git a/plugins/jetpack/_inc/accessible-focus.js b/plugins/jetpack/_inc/accessible-focus.js
deleted file mode 100644
index 44608c2b..00000000
--- a/plugins/jetpack/_inc/accessible-focus.js
+++ /dev/null
@@ -1,19 +0,0 @@
-var keyboardNavigation = false,
- keyboardNavigationKeycodes = [ 9, 32, 37, 38, 39, 40 ]; // keyCodes for tab, space, left, up, right, down respectively
-
-document.addEventListener( 'keydown', function( event ) {
- if ( keyboardNavigation ) {
- return;
- }
- if ( keyboardNavigationKeycodes.indexOf( event.keyCode ) !== -1 ) {
- keyboardNavigation = true;
- document.documentElement.classList.add( 'accessible-focus' );
- }
-} );
-document.addEventListener( 'mouseup', function() {
- if ( ! keyboardNavigation ) {
- return;
- }
- keyboardNavigation = false;
- document.documentElement.classList.remove( 'accessible-focus' );
-} );
diff --git a/plugins/jetpack/_inc/blocks/contact-info/view.css b/plugins/jetpack/_inc/blocks/contact-info/view.css
deleted file mode 100644
index df73d91a..00000000
--- a/plugins/jetpack/_inc/blocks/contact-info/view.css
+++ /dev/null
@@ -1 +0,0 @@
-.wp-block-jetpack-contact-info{margin-bottom:1.5em} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/contact-info/view.js b/plugins/jetpack/_inc/blocks/contact-info/view.js
deleted file mode 100644
index da674620..00000000
--- a/plugins/jetpack/_inc/blocks/contact-info/view.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,t){for(var n in t)e[n]=t[n]}(window,function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=288)}({288:function(e,t,n){n(38),e.exports=n(289)},289:function(e,t,n){"use strict";n.r(t);n(72)},33:function(e,t,n){"object"==typeof window&&window.Jetpack_Block_Assets_Base_Url&&(n.p=window.Jetpack_Block_Assets_Base_Url)},38:function(e,t,n){"use strict";n.r(t);n(33)},72:function(e,t,n){}})); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/contact-info/view.rtl.css b/plugins/jetpack/_inc/blocks/contact-info/view.rtl.css
deleted file mode 100644
index df73d91a..00000000
--- a/plugins/jetpack/_inc/blocks/contact-info/view.rtl.css
+++ /dev/null
@@ -1 +0,0 @@
-.wp-block-jetpack-contact-info{margin-bottom:1.5em} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/editor-beta.css b/plugins/jetpack/_inc/blocks/editor-beta.css
deleted file mode 100644
index 6498f945..00000000
--- a/plugins/jetpack/_inc/blocks/editor-beta.css
+++ /dev/null
@@ -1 +0,0 @@
-.wp-block-jetpack-business-hours{overflow:hidden}.wp-block-jetpack-business-hours .business-hours__row{display:flex}.wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add,.wp-block-jetpack-business-hours .business-hours__row.business-hours-row__closed{margin-bottom:20px}.wp-block-jetpack-business-hours .business-hours__row .business-hours__day{width:44%;display:flex;align-items:baseline}.wp-block-jetpack-business-hours .business-hours__row .business-hours__day .business-hours__day-name{width:60%;font-weight:700;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.wp-block-jetpack-business-hours .business-hours__row .business-hours__day .components-form-toggle{margin-right:4px}.wp-block-jetpack-business-hours .business-hours__row .business-hours__hours{width:44%;margin:0;display:flex;align-items:center;flex-wrap:wrap}.wp-block-jetpack-business-hours .business-hours__row .business-hours__hours .components-base-control{display:inline-block;margin-bottom:0;width:48%}.wp-block-jetpack-business-hours .business-hours__row .business-hours__hours .components-base-control.business-hours__open{margin-right:4%}.wp-block-jetpack-business-hours .business-hours__row .business-hours__hours .components-base-control .components-base-control__label{margin-bottom:0}.wp-block-jetpack-business-hours .business-hours__remove{align-self:flex-end;margin-bottom:8px;text-align:center;width:10%}.wp-block-jetpack-business-hours .business-hours-row__add button:hover{box-shadow:none!important}.wp-block-jetpack-business-hours .business-hours__remove button{display:block;margin:0 auto}.wp-block-jetpack-business-hours .business-hours-row__add .components-button.is-default:active,.wp-block-jetpack-business-hours .business-hours-row__add .components-button.is-default:focus,.wp-block-jetpack-business-hours .business-hours-row__add .components-button.is-default:hover,.wp-block-jetpack-business-hours .business-hours__remove .components-button.is-default:active,.wp-block-jetpack-business-hours .business-hours__remove .components-button.is-default:focus,.wp-block-jetpack-business-hours .business-hours__remove .components-button.is-default:hover{background:none;box-shadow:none}@media (max-width:1080px){.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row{flex-wrap:wrap}.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__day,.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__remove{display:none}.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row .business-hours__day{width:100%}.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row .business-hours__hours{width:78%}.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row .business-hours__remove{width:18%}}@media (max-width:600px){.wp-block-jetpack-business-hours .business-hours__row{flex-wrap:wrap}.wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__day,.wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__remove{display:none}.wp-block-jetpack-business-hours .business-hours__row .business-hours__day{width:100%}.wp-block-jetpack-business-hours .business-hours__row .business-hours__hours{width:78%}.wp-block-jetpack-business-hours .business-hours__row .business-hours__remove{width:18%}}.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row{flex-wrap:wrap}.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__day,.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__remove{display:none}.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row .business-hours__day{width:100%}.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row .business-hours__hours{width:78%}.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row .business-hours__remove{width:18%}.jetpack-contact-form{padding:10px 18px}.jetpack-contact-form.has-intro{padding:0}.jetpack-contact-form .components-placeholder{padding:24px}.jetpack-contact-form .components-placeholder input[type=text]{width:100%;outline-width:0;outline-style:none;line-height:16px}.jetpack-contact-form .components-placeholder .components-placeholder__label svg{margin-right:1ch}.jetpack-contact-form .components-placeholder .components-placeholder__fieldset,.jetpack-contact-form .components-placeholder .help-message{text-align:left}.jetpack-contact-form .components-placeholder .help-message{width:100%;margin:-18px 0 28px}.jetpack-contact-form .components-placeholder .components-base-control{margin-bottom:16px;width:100%}.jetpack-contact-form__intro-message{margin:0 0 16px}.jetpack-contact-form__create{width:100%}.jetpack-field-label{display:flex;flex-direction:row}.jetpack-field-label .components-base-control{margin-top:-1px;margin-bottom:-3px}.jetpack-field-label .components-base-control .components-form-toggle{margin:2px 8px 0 0}.jetpack-field-label .required{color:#dc3232}.jetpack-field-label .components-toggle-control .components-base-control__field{margin-bottom:0}.jetpack-field-label__input{flex-grow:1;min-height:unset;padding:0}.jetpack-field-label__input.jetpack-field-label__input.jetpack-field-label__input{border-color:#fff;border-radius:0;font-weight:600;margin:0 0 2px;padding:0}.jetpack-field-label__input.jetpack-field-label__input.jetpack-field-label__input:focus{border-color:#fff;box-shadow:none}input.components-text-control__input{line-height:16px}.jetpack-field .components-text-control__input.components-text-control__input{width:100%}.jetpack-field .components-text-control__input,.jetpack-field .components-textarea-control__input{color:#72777c;padding:10px 8px}.jetpack-field-checkbox__checkbox.jetpack-field-checkbox__checkbox.jetpack-field-checkbox__checkbox{float:left}.jetpack-field-multiple__list.jetpack-field-multiple__list{list-style-type:none;margin:0}.jetpack-field-multiple__list.jetpack-field-multiple__list:empty{display:none}[data-type="jetpack/field-select"] .jetpack-field-multiple__list.jetpack-field-multiple__list{border:1px solid #8d96a0;border-radius:4px;padding:4px}.jetpack-option{display:flex;align-items:center;margin:0}.jetpack-option__type.jetpack-option__type{margin-top:0}.jetpack-option__input.jetpack-option__input.jetpack-option__input{border-color:#fff;border-radius:0;flex-grow:1}.jetpack-option__input.jetpack-option__input.jetpack-option__input:hover{border-color:#357cb5}.jetpack-option__input.jetpack-option__input.jetpack-option__input:focus{border-color:#e3e5e8;box-shadow:none}.jetpack-option__remove.jetpack-option__remove{padding:6px;vertical-align:bottom}.jetpack-field-multiple__add-option{margin-left:-6px;padding:4px 8px 4px 4px}.jetpack-field-multiple__add-option svg{margin-right:12px}.jetpack-field-checkbox .components-base-control__label{display:flex;align-items:center}.jetpack-field-checkbox .components-base-control__label .jetpack-field-label{flex-grow:1}.jetpack-field-checkbox .components-base-control__label .jetpack-field-label__input{font-size:13px;font-weight:400;padding-left:10px}@media (min-width:481px){.jetpack-contact-form-shortcode-preview{padding:24px}}.jetpack-contact-form-shortcode-preview{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;line-height:1.4em;display:block;position:relative;margin:0 auto;padding:16px;box-sizing:border-box;background:#fff;box-shadow:0 0 0 1px rgba(200,215,225,.5),0 1px 2px #e9eff3}.jetpack-contact-form-shortcode-preview:after{content:".";display:block;height:0;clear:both;visibility:hidden}.jetpack-contact-form-shortcode-preview>div{margin-top:24px}.jetpack-contact-form-shortcode-preview>div:first-child{margin-top:0}.jetpack-contact-form-shortcode-preview label{display:block;font-size:14px;font-weight:600;margin-bottom:5px}.jetpack-contact-form-shortcode-preview input[type=email],.jetpack-contact-form-shortcode-preview input[type=tel],.jetpack-contact-form-shortcode-preview input[type=text],.jetpack-contact-form-shortcode-preview input[type=url]{border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;margin:0;padding:7px 14px;width:100%;color:#2e4453;font-size:16px;line-height:1.5;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-shadow:none}.jetpack-contact-form-shortcode-preview input[type=email]:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=text]:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=url]:-ms-input-placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview input[type=email]::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=text]::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=url]::-ms-input-placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview input[type=email]::placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]::placeholder,.jetpack-contact-form-shortcode-preview input[type=text]::placeholder,.jetpack-contact-form-shortcode-preview input[type=url]::placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview input[type=email]:hover,.jetpack-contact-form-shortcode-preview input[type=tel]:hover,.jetpack-contact-form-shortcode-preview input[type=text]:hover,.jetpack-contact-form-shortcode-preview input[type=url]:hover{border-color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=email]:focus,.jetpack-contact-form-shortcode-preview input[type=tel]:focus,.jetpack-contact-form-shortcode-preview input[type=text]:focus,.jetpack-contact-form-shortcode-preview input[type=url]:focus{border-color:#0087be;outline:none;box-shadow:0 0 0 2px #78dcfa}.jetpack-contact-form-shortcode-preview input[type=email]:focus::-ms-clear,.jetpack-contact-form-shortcode-preview input[type=tel]:focus::-ms-clear,.jetpack-contact-form-shortcode-preview input[type=text]:focus::-ms-clear,.jetpack-contact-form-shortcode-preview input[type=url]:focus::-ms-clear{display:none}.jetpack-contact-form-shortcode-preview input[type=email]:disabled,.jetpack-contact-form-shortcode-preview input[type=tel]:disabled,.jetpack-contact-form-shortcode-preview input[type=text]:disabled,.jetpack-contact-form-shortcode-preview input[type=url]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;-webkit-text-fill-color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=email]:disabled:hover,.jetpack-contact-form-shortcode-preview input[type=tel]:disabled:hover,.jetpack-contact-form-shortcode-preview input[type=text]:disabled:hover,.jetpack-contact-form-shortcode-preview input[type=url]:disabled:hover{cursor:default}.jetpack-contact-form-shortcode-preview input[type=email]:disabled:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]:disabled:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=text]:disabled:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=url]:disabled:-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=email]:disabled::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]:disabled::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=text]:disabled::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=url]:disabled::-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=email]:disabled::placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]:disabled::placeholder,.jetpack-contact-form-shortcode-preview input[type=text]:disabled::placeholder,.jetpack-contact-form-shortcode-preview input[type=url]:disabled::placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview textarea{border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;margin:0;padding:7px 14px;height:92px;width:100%;color:#2e4453;font-size:16px;line-height:1.5;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-shadow:none}.jetpack-contact-form-shortcode-preview textarea:-ms-input-placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview textarea::-ms-input-placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview textarea::placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview textarea:hover{border-color:#a8bece}.jetpack-contact-form-shortcode-preview textarea:focus{border-color:#0087be;outline:none;box-shadow:0 0 0 2px #78dcfa}.jetpack-contact-form-shortcode-preview textarea:focus::-ms-clear{display:none}.jetpack-contact-form-shortcode-preview textarea:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;-webkit-text-fill-color:#a8bece}.jetpack-contact-form-shortcode-preview textarea:disabled:hover{cursor:default}.jetpack-contact-form-shortcode-preview textarea:disabled:-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview textarea:disabled::-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview textarea:disabled::placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=checkbox]{-webkit-appearance:none;display:inline-block;box-sizing:border-box;margin:2px 0 0;width:16px;height:16px;float:left;outline:0;padding:0;box-shadow:none;background-color:#fff;border:1px solid #c8d7e1;color:#2e4453;font-size:16px;line-height:0;text-align:center;vertical-align:middle;-moz-appearance:none;appearance:none;transition:all .15s ease-in-out;clear:none;cursor:pointer}.jetpack-contact-form-shortcode-preview input[type=checkbox]:checked:before{content:"\f147";font-family:Dashicons;margin:-3px 0 0 -4px;float:left;display:inline-block;vertical-align:middle;width:16px;font-size:20px;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;color:#00aadc}.jetpack-contact-form-shortcode-preview input[type=checkbox]:disabled:checked:before{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=checkbox]:hover{border-color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=checkbox]:focus{border-color:#0087be;outline:none;box-shadow:0 0 0 2px #78dcfa}.jetpack-contact-form-shortcode-preview input[type=checkbox]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;opacity:1}.jetpack-contact-form-shortcode-preview input[type=checkbox]:disabled:hover{cursor:default}.jetpack-contact-form-shortcode-preview input[type=checkbox]+span{display:block;font-weight:400;margin-left:24px}.jetpack-contact-form-shortcode-preview input[type=radio]{color:#2e4453;font-size:16px;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-sizing:border-box;-webkit-appearance:none;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:2px 4px 0 0;float:left;outline:0;padding:0;text-align:center;vertical-align:middle;width:16px;min-width:16px;-moz-appearance:none;appearance:none;border-radius:50%;line-height:10px}.jetpack-contact-form-shortcode-preview input[type=radio]:hover{border-color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=radio]:focus{border-color:#0087be;outline:none;box-shadow:0 0 0 2px #78dcfa}.jetpack-contact-form-shortcode-preview input[type=radio]:focus::-ms-clear{display:none}.jetpack-contact-form-shortcode-preview input[type=radio]:checked:before{float:left;display:inline-block;content:"\2022";margin:3px;width:8px;height:8px;text-indent:-9999px;background:#00aadc;vertical-align:middle;border-radius:50%;animation:grow .2s ease-in-out}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;opacity:1;-webkit-text-fill-color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled:hover{cursor:default}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled:-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled::-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled::placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled:checked:before{background:#e9eff3}.jetpack-contact-form-shortcode-preview input[type=radio]+span{display:block;font-weight:400;margin-left:24px}@keyframes grow{0%{transform:scale(.3)}60%{transform:scale(1.15)}to{transform:scale(1)}}.jetpack-contact-form-shortcode-preview select{background:#fff url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE1LjUgNkwxNyA3LjVsLTYuNzUgNi43NUwzLjUgNy41IDUgNmw1LjI1IDUuMjVMMTUuNSA2eiIgZmlsbD0iI0M4RDdFMSIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) no-repeat right 10px center;border-radius:4px;border:solid #c8d7e1;border-width:1px 1px 2px;color:#2e4453;cursor:pointer;display:inline-block;margin:0;outline:0;overflow:hidden;font-size:14px;line-height:21px;font-weight:600;text-overflow:ellipsis;text-decoration:none;vertical-align:top;white-space:nowrap;box-sizing:border-box;padding:2px 32px 2px 14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;font-family:sans-serif}.jetpack-contact-form-shortcode-preview select:hover{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE1LjUgNkwxNyA3LjVsLTYuNzUgNi43NUwzLjUgNy41IDUgNmw1LjI1IDUuMjVMMTUuNSA2eiIgZmlsbD0iI2E4YmVjZSIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+)}.jetpack-contact-form-shortcode-preview select:focus{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE1LjUgNkwxNyA3LjVsLTYuNzUgNi43NUwzLjUgNy41IDUgNmw1LjI1IDUuMjVMMTUuNSA2eiIgZmlsbD0iIzJlNDQ1MyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);border-color:#00aadc;box-shadow:0 0 0 2px #78dcfa;outline:0;-moz-outline:none;-moz-user-focus:ignore}.jetpack-contact-form-shortcode-preview select:disabled,.jetpack-contact-form-shortcode-preview select:hover:disabled{background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE1LjUgNkwxNyA3LjVsLTYuNzUgNi43NUwzLjUgNy41IDUgNmw1LjI1IDUuMjVMMTUuNSA2eiIgZmlsbD0iI2U5ZWZmMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) no-repeat right 10px center}.jetpack-contact-form-shortcode-preview select.is-compact{min-width:0;padding:0 20px 2px 6px;margin:0 4px;background-position:right 5px center;background-size:12px 12px}.jetpack-contact-form-shortcode-preview label+select,.jetpack-contact-form-shortcode-preview label select{display:block;min-width:200px}.jetpack-contact-form-shortcode-preview label+select.is-compact,.jetpack-contact-form-shortcode-preview label select.is-compact{display:inline-block;min-width:0}.jetpack-contact-form-shortcode-preview select::-ms-expand{display:none}.jetpack-contact-form-shortcode-preview select::-ms-value{background:none;color:#2e4453}.jetpack-contact-form-shortcode-preview select:-moz-focusring{color:transparent;text-shadow:0 0 0 #2e4453}.jetpack-contact-form-shortcode-preview input[type=submit]{vertical-align:baseline;background:#fff;border:solid #c8d7e1;border-width:1px 1px 2px;color:#2e4453;cursor:pointer;display:inline-block;margin:24px 0 0;outline:0;overflow:hidden;font-weight:500;text-overflow:ellipsis;text-decoration:none;vertical-align:top;box-sizing:border-box;font-size:14px;line-height:21px;border-radius:4px;padding:7px 14px 9px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.jetpack-contact-form-shortcode-preview input[type=submit]:hover{border-color:#a8bece;color:#2e4453}.jetpack-contact-form-shortcode-preview input[type=submit]:active{border-width:2px 1px 1px}.jetpack-contact-form-shortcode-preview input[type=submit]:visited{color:#2e4453}.jetpack-contact-form-shortcode-preview input[type=submit]:focus{border-color:#00aadc;box-shadow:0 0 0 2px #78dcfa}.help-message{display:flex;font-size:13px;line-height:1.4em;margin-bottom:1em;margin-top:-.5em}.help-message svg{margin-right:5px;min-width:24px}.help-message>span{margin-top:2px}.help-message.help-message-is-error{color:#eb0001}.help-message.help-message-is-error svg{fill:#eb0001}.jetpack-contact-info-block{padding:10px 18px}.jetpack-contact-info-block .editor-plain-text.editor-plain-text:focus{box-shadow:none}.jetpack-contact-info-block .editor-plain-text{flex-grow:1;min-height:unset;padding:0;box-shadow:none;font-family:inherit;font-size:inherit;color:inherit;line-height:inherit;border:none}.wp-block-jetpack-contact-info{margin-bottom:1.5em}.wp-block-jetpack-gif{clear:both;margin:0 0 20px}.wp-block-jetpack-gif figure{margin:0;position:relative;width:100%}.wp-block-jetpack-gif iframe{border:0;left:0;height:100%;position:absolute;top:0;width:100%}.wp-block-jetpack-gif.aligncenter{text-align:center}.wp-block-jetpack-gif.alignleft,.wp-block-jetpack-gif.alignright{min-width:300px}.wp-block-jetpack-gif .wp-block-jetpack-gif-caption{margin-top:.5em;margin-bottom:1em;color:#555d66;text-align:center}.wp-block-jetpack-gif .wp-block-jetpack-gif-wrapper{height:0;margin:0;padding:calc(56.2% + 12px) 0 0;position:relative;width:100%}.wp-block-jetpack-gif figure{transition:padding-top 125ms ease-in-out}.wp-block-jetpack-gif .components-base-control__field{text-align:center}.wp-block-jetpack-gif .wp-block-jetpack-gif_cover{background:none;border:none;height:100%;left:0;margin:0;padding:0;position:absolute;top:0;width:100%;z-index:1}.wp-block-jetpack-gif .wp-block-jetpack-gif_cover:focus{outline:none}.wp-block-jetpack-gif .wp-block-jetpack-gif_input-container{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center;margin:0 auto;max-width:400px;width:100%;z-index:1}.wp-block-jetpack-gif .wp-block-jetpack-gif_input-container .components-base-control__label{height:0;margin:0;text-indent:-9999px}.wp-block-jetpack-gif .wp-block-jetpack-gif_input{flex-grow:1;margin-right:.5em}.wp-block-jetpack-gif .wp-block-jetpack-gif_thumbnails-container{display:flex;margin:-2px 0 2px -2px;overflow-x:auto;width:calc(100% + 4px)}.wp-block-jetpack-gif .wp-block-jetpack-gif_thumbnails-container::-webkit-scrollbar{display:none}.wp-block-jetpack-gif .wp-block-jetpack-gif_thumbnail-container{align-items:center;background-size:cover;background-repeat:no-repeat;background-position:50% 50%;border:none;border-radius:3px;cursor:pointer;display:flex;justify-content:center;margin:2px;padding:0 0 calc(10% - 4px);width:calc(10% - 4px)}.wp-block-jetpack-gif .wp-block-jetpack-gif_thumbnail-container:hover{box-shadow:0 0 0 1px #555d66}.wp-block-jetpack-gif .wp-block-jetpack-gif_thumbnail-container:focus{box-shadow:0 0 0 2px #00a0d2;outline:0}.components-panel__body-gif-branding svg{display:block;margin:0 auto;max-width:200px}.components-panel__body-gif-branding svg path{fill:#ccc}.wp-block-jetpack-mailchimp.is-processing form{display:none}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification{display:none;margin-bottom:1.5em;padding:.75em}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.is-visible{display:block}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.wp-block-jetpack-mailchimp_error{background-color:#eb0001;color:#fff}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.wp-block-jetpack-mailchimp_processing{background-color:rgba(0,0,0,.025)}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.wp-block-jetpack-mailchimp_success{background-color:#008a00;color:#fff}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification{display:block}.wp-block-jetpack-mailchimp .editor-rich-text__inline-toolbar{pointer-events:none}.wp-block-jetpack-mailchimp .editor-rich-text__inline-toolbar .components-toolbar{pointer-events:all}.wp-block-jetpack-mailchimp.wp-block-jetpack-mailchimp_notication-audition>:not(.wp-block-jetpack-mailchimp_notification){display:none}.wp-block-jetpack-mailchimp .jetpack-submit-button,.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_text-input{margin-bottom:1.5rem}.wp-block-jetpack-mailchimp .wp-block-button .wp-block-button__link{margin-top:0}.component__add-point{position:absolute;left:50%;top:50%;width:32px;height:38px;margin-top:-19px;margin-left:-16px;background-image:url(images/oval-3cc7669d571aef4e12f34b349e42d390.svg);background-repeat:no-repeat;text-indent:-9999px}.component__add-point,.component__add-point.components-button:not(:disabled):not([aria-disabled=true]):focus,.component__add-point:active,.component__add-point:focus,.component__add-point__popover .components-button:not(:disabled):not([aria-disabled=true]):focus{box-shadow:none;background-color:transparent}.component__add-point__popover .components-popover__content{padding:.1rem}.component__add-point__popover .components-location-search{margin:.5rem}.component__add-point__close{margin:0;padding:0;border:none;box-shadow:none;float:right}.component__add-point__close path{color:#aaa}.edit-post-settings-sidebar__panel-block .component__locations__panel{margin-bottom:1em}.edit-post-settings-sidebar__panel-block .component__locations__panel:empty{display:none}.edit-post-settings-sidebar__panel-block .component__locations__panel .components-panel__body:first-child{border-top:none}.edit-post-settings-sidebar__panel-block .component__locations__panel .components-panel__body,.edit-post-settings-sidebar__panel-block .component__locations__panel .components-panel__body:first-child,.edit-post-settings-sidebar__panel-block .component__locations__panel .components-panel__body:last-child{max-width:100%;margin:0}.edit-post-settings-sidebar__panel-block .component__locations__panel .components-panel__body button{padding-right:40px}.component__locations__delete-btn{padding:0}.component__locations__delete-btn svg{margin-right:.4em}.wp-block-jetpack-map-marker{width:32px;height:38px;opacity:.9}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button{border:1px solid #d3d3d3;border-radius:100%;width:56px;height:56px;margin:2px;text-indent:-9999px;background-color:#d3d3d3;background-position:50%;background-repeat:no-repeat;background-size:contain;transform:scale(1);transition:transform .2s ease}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button:hover{transform:scale(1.1)}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button.is-selected{border-color:#000}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button.is-theme-default{background-image:url(images/map-theme_default-2ceb449b599dbcbe2a90fead5a5f3824.jpg)}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button.is-theme-black_and_white{background-image:url(images/map-theme_black_and_white-1ead5946ca104d83676d6e3410e1d733.jpg)}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button.is-theme-satellite{background-image:url(images/map-theme_satellite-c74dc129bda9502fb0fb362bb627577e.jpg)}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button.is-theme-terrain{background-image:url(images/map-theme_terrain-2b6e6c1c8d09cbdc58a4c0653be1a6e3.jpg)}.wp-block-jetpack-map .wp-block-jetpack-map__gm-container{width:100%;overflow:hidden;background:#d3d3d3;min-height:400px;text-align:left}.wp-block-jetpack-map .mapboxgl-popup{max-width:300px}.wp-block-jetpack-map .mapboxgl-popup h3{font-size:1.3125em;font-weight:400;margin-bottom:.5rem}.wp-block-jetpack-map .mapboxgl-popup p{margin-bottom:0}.wp-block-jetpack-map__delete-btn{padding:0}.wp-block-jetpack-map__delete-btn svg{margin-right:.4em}.wp-block-jetpack-map-components-text-control-api-key{margin-right:4px}.wp-block-jetpack-map-components-text-control-api-key.components-base-control .components-base-control__field{margin-bottom:0}.wp-block-jetpack-map-components-text-control-api-key-submit.is-large{height:31px}.wp-block-jetpack-map-components-text-control-api-key-submit:disabled{opacity:1}.wp-block[data-type="jetpack/map"] .components-placeholder__label svg{fill:currentColor;margin-right:1ch}.wp-block-jetpack-markdown__placeholder{opacity:.62;pointer-events:none}.editor-block-list__block .wp-block-jetpack-markdown__preview{min-height:1.8em;line-height:1.8}.editor-block-list__block .wp-block-jetpack-markdown__preview>*{margin-top:32px;margin-bottom:32px}.editor-block-list__block .wp-block-jetpack-markdown__preview h1,.editor-block-list__block .wp-block-jetpack-markdown__preview h2,.editor-block-list__block .wp-block-jetpack-markdown__preview h3{line-height:1.4}.editor-block-list__block .wp-block-jetpack-markdown__preview h1{font-size:2.44em}.editor-block-list__block .wp-block-jetpack-markdown__preview h2{font-size:1.95em}.editor-block-list__block .wp-block-jetpack-markdown__preview h3{font-size:1.56em}.editor-block-list__block .wp-block-jetpack-markdown__preview h4{font-size:1.25em;line-height:1.5}.editor-block-list__block .wp-block-jetpack-markdown__preview h5{font-size:1em}.editor-block-list__block .wp-block-jetpack-markdown__preview h6{font-size:.8em}.editor-block-list__block .wp-block-jetpack-markdown__preview hr{border:none;border-bottom:2px solid #8f98a1;margin:2em auto;max-width:100px}.editor-block-list__block .wp-block-jetpack-markdown__preview p{line-height:1.8}.editor-block-list__block .wp-block-jetpack-markdown__preview blockquote{border-left:4px solid #000;margin-left:0;margin-right:0;padding-left:1em}.editor-block-list__block .wp-block-jetpack-markdown__preview blockquote p{line-height:1.5;margin:1em 0}.editor-block-list__block .wp-block-jetpack-markdown__preview ol,.editor-block-list__block .wp-block-jetpack-markdown__preview ul{margin-left:1.3em;padding-left:1.3em}.editor-block-list__block .wp-block-jetpack-markdown__preview li p{margin:0}.editor-block-list__block .wp-block-jetpack-markdown__preview code,.editor-block-list__block .wp-block-jetpack-markdown__preview pre{color:#23282d;font-family:Menlo,Consolas,monaco,monospace}.editor-block-list__block .wp-block-jetpack-markdown__preview code{background:#f3f4f5;border-radius:2px;font-size:inherit;padding:2px}.editor-block-list__block .wp-block-jetpack-markdown__preview pre{border-radius:4px;border:1px solid #e2e4e7;font-size:14px;padding:.8em 1em}.editor-block-list__block .wp-block-jetpack-markdown__preview pre code{background:transparent;padding:0}.editor-block-list__block .wp-block-jetpack-markdown__preview table{overflow-x:auto;border-collapse:collapse;width:100%}.editor-block-list__block .wp-block-jetpack-markdown__preview tbody,.editor-block-list__block .wp-block-jetpack-markdown__preview tfoot,.editor-block-list__block .wp-block-jetpack-markdown__preview thead{width:100%;min-width:240px}.editor-block-list__block .wp-block-jetpack-markdown__preview td,.editor-block-list__block .wp-block-jetpack-markdown__preview th{padding:.5em;border:1px solid}.wp-block-jetpack-markdown .wp-block-jetpack-markdown__editor{font-family:Menlo,Consolas,monaco,monospace;font-size:14px}.wp-block-jetpack-markdown .wp-block-jetpack-markdown__editor:focus{border-color:transparent;box-shadow:0 0 0 transparent}.jetpack-publicize-message-box{background-color:#edeff0;border-radius:4px}.jetpack-publicize-message-box textarea{width:100%}.jetpack-publicize-character-count{padding-bottom:5px;padding-left:5px}.jetpack-publicize__connections-list{list-style-type:none;margin:13px 0}.publicize-jetpack-connection-container{display:flex}.jetpack-publicize-gutenberg-social-icon{fill:#555d66;margin-right:5px}.jetpack-publicize-gutenberg-social-icon.is-facebook{fill:#39579a}.jetpack-publicize-gutenberg-social-icon.is-twitter{fill:#55acee}.jetpack-publicize-gutenberg-social-icon.is-linkedin{fill:#0976b4}.jetpack-publicize-gutenberg-social-icon.is-tumblr{fill:#35465c}.jetpack-publicize-gutenberg-social-icon.is-google-plus{fill:#df4a32}.jetpack-publicize-connection-label{flex:1;margin-right:5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.jetpack-publicize-connection-label .jetpack-publicize-connection-label-copy,.jetpack-publicize-connection-label .jetpack-publicize-gutenberg-social-icon{display:inline-block;vertical-align:middle}.jetpack-publicize-connection-toggle{margin-top:3px}.jetpack-publicize-notice.components-notice{margin-left:0;margin-right:0;margin-bottom:13px}.jetpack-publicize-notice .components-button+.components-button{margin-top:5px}.jetpack-publicize-message-note{display:inline-block;margin-bottom:4px;margin-top:13px}.jetpack-publicize-add-connection-wrapper{margin:15px 0}.jetpack-publicize-add-connection-container{display:flex}.jetpack-publicize-add-connection-container a{cursor:pointer}.jetpack-publicize-add-connection-container span{vertical-align:middle}.jetpack-publicize__connections-list .components-notice{margin:5px 0 10px}.edit-post-more-menu__content .components-icon-button .jetpack-logo,.edit-post-pinned-plugins .components-icon-button .jetpack-logo{width:20px;height:20px}.edit-post-more-menu__content .components-icon-button .jetpack-logo{margin-right:4px}.edit-post-pinned-plugins .components-icon-button.is-toggled .jetpack-logo,.edit-post-pinned-plugins .components-icon-button.is-toggled .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button.is-toggled .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button.is-toggled:hover .jetpack-logo,.edit-post-pinned-plugins .components-icon-button.is-toggled:hover .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button.is-toggled:hover .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button:hover .jetpack-logo,.edit-post-pinned-plugins .components-icon-button:hover .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button:hover .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button:not(.is-toggled) .jetpack-logo,.edit-post-pinned-plugins .components-icon-button:not(.is-toggled) .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button:not(.is-toggled) .jetpack-logo__icon-triangle{stroke:none!important}.edit-post-pinned-plugins .components-icon-button.is-toggled .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button.is-toggled:hover .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button:hover .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button:not(.is-toggled) .jetpack-logo__icon-circle{fill:#00be28!important}.edit-post-pinned-plugins .components-icon-button.is-toggled .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button.is-toggled:hover .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button:hover .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button:not(.is-toggled) .jetpack-logo__icon-triangle{fill:#fff!important}.jp-related-posts-i2__row{display:flex;margin-top:1.5rem}.jp-related-posts-i2__row:first-child{margin-top:0}.jp-related-posts-i2__row[data-post-count="3"] .jp-related-posts-i2__post{max-width:calc(33% - 20px)}.jp-related-posts-i2__row[data-post-count="1"] .jp-related-posts-i2__post,.jp-related-posts-i2__row[data-post-count="2"] .jp-related-posts-i2__post{max-width:calc(50% - 20px)}.jp-related-posts-i2__post{flex-grow:1;flex-basis:0;margin:0 10px;display:flex;flex-direction:column}.jp-related-posts-i2__post-context,.jp-related-posts-i2__post-date,.jp-related-posts-i2__post-heading,.jp-related-posts-i2__post-img-link{flex-direction:row}.jp-related-posts-i2__post-image-placeholder,.jp-related-posts-i2__post-img-link{order:-1}.jp-related-posts-i2__post-heading{margin:.5rem 0;font-size:1rem;line-height:1.2em}.jp-related-posts-i2__post-link{display:block;width:100%;line-height:1.2em;margin:.2em 0}.jp-related-posts-i2__post-img{width:100%}.jp-related-posts-i2__post-image-placeholder{display:block;position:relative;margin:0 auto;max-width:350px}.jp-related-posts-i2__post-image-placeholder-icon{position:absolute;top:calc(50% - 12px);left:calc(50% - 12px)}.jp-relatedposts-i2[data-layout=list] .jp-related-posts-i2__row{margin-top:0;display:block}.jp-relatedposts-i2[data-layout=list] .jp-related-posts-i2__post{max-width:none;margin:1rem 0 0}.jp-relatedposts-i2[data-layout=list] .jp-related-posts-i2__post-image-placeholder{max-width:350px;margin:0}.jp-relatedposts-i2[data-layout=list] .jp-related-posts-i2__post-img-link{margin-top:1rem}.wp-block-jetpack-repeat-visitor .components-notice{margin:1em 0 0}.wp-block-jetpack-repeat-visitor .components-radio-control__option{text-align:left}.wp-block-jetpack-repeat-visitor .components-notice__content{margin:.5em 0;font-size:.8em}.wp-block-jetpack-repeat-visitor .components-notice__content .components-base-control{display:inline-block;max-width:8em;vertical-align:middle}.wp-block-jetpack-repeat-visitor .components-notice__content .components-base-control .components-base-control__field{margin-bottom:0}.wp-block-jetpack-repeat-visitor-placeholder{min-height:inherit}.wp-block-jetpack-repeat-visitor-placeholder .components-placeholder__label svg{margin-right:.5ch}.wp-block-jetpack-repeat-visitor-placeholder .components-placeholder__fieldset{flex-wrap:nowrap}.wp-block-jetpack-repeat-visitor-placeholder .components-placeholder__fieldset .components-base-control{flex-basis:100%}.wp-block-jetpack-repeat-visitor-placeholder .components-base-control__help{color:#eb0001;font-size:13px}.wp-block-jetpack-repeat-visitor--is-unselected .wp-block-jetpack-repeat-visitor-placeholder{display:none}.wp-block-jetpack-repeat-visitor-threshold{margin-right:20px}.wp-block-jetpack-repeat-visitor-threshold .components-text-control__input{width:5em;text-align:center}.jetpack-clipboard-input{display:flex}.jetpack-clipboard-input .components-clipboard-button{margin:2px 0 0 6px}.wp-block-jetpack-simple-payments .simple-payments__help-message{display:flex;font-size:13px;line-height:1.4em;margin-bottom:1em;margin-top:-.5em}.wp-block-jetpack-simple-payments .simple-payments__help-message svg{margin-right:5px;min-width:24px}.wp-block-jetpack-simple-payments .simple-payments__help-message>span{margin-top:2px}.wp-block-jetpack-simple-payments .simple-payments__help-message.simple-payments__help-message-is-error{color:#eb0001}.wp-block-jetpack-simple-payments .simple-payments__help-message.simple-payments__help-message-is-error svg{fill:#eb0001}.simple-payments__loading{animation:simple-payments-loading 1.6s ease-in-out infinite}@keyframes simple-payments-loading{0%{opacity:.5}50%{opacity:.7}to{opacity:.5}}.jetpack-simple-payments-wrapper{margin-bottom:1.5em}body .jetpack-simple-payments-wrapper .jetpack-simple-payments-details p{margin:0 0 1.5em;padding:0}.jetpack-simple-payments-product{display:flex;flex-direction:column}.jetpack-simple-payments-product-image{flex:0 0 30%;margin-bottom:1.5em}.jetpack-simple-payments-image{box-sizing:border-box;min-width:70px;padding-top:100%;position:relative}.jetpack-simple-payments-image img{border:0;border-radius:0;height:auto;left:50%;margin:0;max-height:100%;max-width:100%;padding:0;position:absolute;top:50%;transform:translate(-50%,-50%);width:auto}.jetpack-simple-payments-price p,.jetpack-simple-payments-title p{font-weight:700}.jetpack-simple-payments-purchase-box{align-items:flex-start;display:flex}.jetpack-simple-payments-items{flex:0 0 auto;margin-right:10px}input[type=number].jetpack-simple-payments-items-number{background:#fff;font-size:16px;line-height:1;max-width:60px;padding:4px 8px}@media screen and (min-width:400px){.jetpack-simple-payments-product{flex-direction:row}.jetpack-simple-payments-product-image+.jetpack-simple-payments-details{flex-basis:70%;padding-left:1em}}.wp-block-jetpack-simple-payments{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;display:grid;grid-template-columns:200px auto;grid-column-gap:10px}.wp-block-jetpack-simple-payments .simple-payments__field .components-base-control__label{display:none}.wp-block-jetpack-simple-payments .simple-payments__field .components-base-control__field{margin-bottom:1em}.wp-block-jetpack-simple-payments .simple-payments__field textarea{display:block}.wp-block-jetpack-simple-payments .simple-payments__field-has-error .components-text-control__input,.wp-block-jetpack-simple-payments .simple-payments__field-has-error .components-textarea-control__input{border-color:#eb0001}.wp-block-jetpack-simple-payments .simple-payments__price-container{display:flex;flex-wrap:wrap}.wp-block-jetpack-simple-payments .simple-payments__price-container .simple-payments__field{margin-right:10px}.wp-block-jetpack-simple-payments .simple-payments__price-container .simple-payments__help-message{flex:1 1 100%;margin-top:0}.wp-block-jetpack-simple-payments .simple-payments__field-price .components-text-control__input{max-width:90px}.wp-block-jetpack-simple-payments .simple-payments__field-email .components-text-control__input{max-width:400px}.wp-block-jetpack-simple-payments .simple-payments__field-multiple .components-toggle-control__label{line-height:1.4em}.wp-block-jetpack-simple-payments .simple-payments__field-content .components-textarea-control__input{min-height:32px}.wp-block-jetpack-slideshow{margin-bottom:1.5em;position:relative}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container{width:100%;overflow:hidden;opacity:0}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container.wp-swiper-initialized{opacity:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container .wp-block-jetpack-slideshow_slide,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container .wp-block-jetpack-slideshow_swiper-wrappper{padding:0;margin:0;line-height:normal}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_slide{background:rgba(0,0,0,.1);display:flex;height:100%;width:100%}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_slide figure{align-items:center;display:flex;height:100%;justify-content:center;margin:0;position:relative;width:100%}.wp-block-jetpack-slideshow .swiper-container-fade .wp-block-jetpack-slideshow_slide{background:#f6f6f6}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_image{display:block;height:auto;max-height:100%;max-width:100%;width:auto;-o-object-fit:contain;object-fit:contain}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev{background-color:rgba(0,0,0,.5);background-position:50%;background-repeat:no-repeat;background-size:24px;border:0;border-radius:4px;box-shadow:none;height:48px;margin:-24px 0 0;padding:0;transition:background-color .25s;width:48px}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next:hover,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause:hover,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev:hover{background-color:rgba(0,0,0,.75)}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev:focus{outline:thin dotted #fff;outline-offset:-4px}.wp-block-jetpack-slideshow .swiper-button-next.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .swiper-button-prev.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .wp-block-jetpack-slideshow_button-prev,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M5.88 4.12L13.76 12l-7.88 7.88L8 22l10-10L8 2z' fill='%23fff'/%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3C/svg%3E")}.wp-block-jetpack-slideshow .swiper-button-prev.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .swiper-button-next.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .wp-block-jetpack-slideshow_button-next,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M18 4.12L10.12 12 18 19.88 15.88 22l-10-10 10-10z' fill='%23fff'/%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3C/svg%3E")}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M6 19h4V5H6v14zm8-14v14h4V5h-4z' fill='%23fff'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");display:none;margin-top:0;position:absolute;right:10px;top:10px;z-index:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_autoplay-paused .wp-block-jetpack-slideshow_button-pause{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M8 5v14l11-7z' fill='%23fff'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E")}.wp-block-jetpack-slideshow[data-autoplay=true] .wp-block-jetpack-slideshow_button-pause{display:block}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_caption.gallery-caption{background-color:rgba(0,0,0,.5);box-sizing:border-box;bottom:0;color:#fff;cursor:text;left:0;margin:0!important;padding:.75em;position:absolute;right:0;text-align:initial;z-index:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_caption.gallery-caption a{color:inherit}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets{bottom:0;line-height:24px;padding:10px 0 2px;position:relative}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet{background:currentColor;color:currentColor;height:16px;opacity:.5;transform:scale(.75);transition:opacity .25s,transform .25s;vertical-align:top;width:16px}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet:hover{opacity:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet:focus{outline:thin dotted;outline-offset:0}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet-active{background-color:currentColor;opacity:1;transform:scale(1)}.wp-block-jetpack-slideshow__add-item{margin-top:4px;width:100%}.wp-block-jetpack-slideshow__add-item .components-button.wp-block-jetpack-slideshow__add-item-button,.wp-block-jetpack-slideshow__add-item .components-form-file-upload{width:100%;height:100%}.wp-block-jetpack-slideshow__add-item .components-button.wp-block-jetpack-slideshow__add-item-button{display:flex;flex-direction:column;justify-content:center;box-shadow:none;border:none;border-radius:0;min-height:100px}.wp-block-jetpack-slideshow__add-item .components-button.wp-block-jetpack-slideshow__add-item-button .dashicon{margin-top:10px}.wp-block-jetpack-slideshow__add-item .components-button.wp-block-jetpack-slideshow__add-item-button:focus,.wp-block-jetpack-slideshow__add-item .components-button.wp-block-jetpack-slideshow__add-item-button:hover{border:1px solid #555d66}.wp-block-jetpack-slideshow_slide .components-spinner{position:absolute;top:50%;left:50%;margin-top:-9px;margin-left:-9px}.wp-block-jetpack-slideshow_slide.is-transient img{opacity:.3}.wp-block-jetpack-tiled-gallery{margin:0 auto 1.5em}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__item img{border-radius:50%}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row{flex-grow:1;width:100%}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-1 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-1 .tiled-gallery__col{width:100%}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-2 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-2 .tiled-gallery__col{width:calc((100% - 4px)/2)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-3 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-3 .tiled-gallery__col{width:calc((100% - 8px)/3)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-4 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-4 .tiled-gallery__col{width:calc((100% - 12px)/4)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-5 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-5 .tiled-gallery__col{width:calc((100% - 16px)/5)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-6 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-6 .tiled-gallery__col{width:calc((100% - 20px)/6)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-7 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-7 .tiled-gallery__col{width:calc((100% - 24px)/7)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-8 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-8 .tiled-gallery__col{width:calc((100% - 28px)/8)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-9 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-9 .tiled-gallery__col{width:calc((100% - 32px)/9)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-10 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-10 .tiled-gallery__col{width:calc((100% - 36px)/10)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-11 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-11 .tiled-gallery__col{width:calc((100% - 40px)/11)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-12 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-12 .tiled-gallery__col{width:calc((100% - 44px)/12)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-13 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-13 .tiled-gallery__col{width:calc((100% - 48px)/13)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-14 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-14 .tiled-gallery__col{width:calc((100% - 52px)/14)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-15 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-15 .tiled-gallery__col{width:calc((100% - 56px)/15)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-16 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-16 .tiled-gallery__col{width:calc((100% - 60px)/16)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-17 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-17 .tiled-gallery__col{width:calc((100% - 64px)/17)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-18 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-18 .tiled-gallery__col{width:calc((100% - 68px)/18)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-19 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-19 .tiled-gallery__col{width:calc((100% - 72px)/19)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-20 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-20 .tiled-gallery__col{width:calc((100% - 76px)/20)}.wp-block-jetpack-tiled-gallery.is-style-columns .tiled-gallery__item,.wp-block-jetpack-tiled-gallery.is-style-rectangular .tiled-gallery__item{display:flex}.tiled-gallery__gallery{width:100%;display:flex;padding:0;flex-wrap:wrap}.tiled-gallery__row{width:100%;display:flex;flex-direction:row;justify-content:center;margin:0}.tiled-gallery__row+.tiled-gallery__row{margin-top:4px}.tiled-gallery__col{display:flex;flex-direction:column;justify-content:center;margin:0}.tiled-gallery__col+.tiled-gallery__col{margin-left:4px}.tiled-gallery__item{justify-content:center;margin:0;overflow:hidden;padding:0;position:relative}.tiled-gallery__item.filter__black-and-white{filter:grayscale(100%)}.tiled-gallery__item.filter__sepia{filter:sepia(100%)}.tiled-gallery__item.filter__1977{position:relative;filter:contrast(1.1) brightness(1.1) saturate(1.3)}.tiled-gallery__item.filter__1977 img{width:100%;z-index:1}.tiled-gallery__item.filter__1977:before{z-index:2}.tiled-gallery__item.filter__1977:after,.tiled-gallery__item.filter__1977:before{content:"";display:block;height:100%;width:100%;top:0;left:0;position:absolute;pointer-events:none}.tiled-gallery__item.filter__1977:after{z-index:3;background:rgba(243,106,188,.3);mix-blend-mode:screen}.tiled-gallery__item.filter__clarendon{position:relative;filter:contrast(1.2) saturate(1.35)}.tiled-gallery__item.filter__clarendon img{width:100%;z-index:1}.tiled-gallery__item.filter__clarendon:before{z-index:2}.tiled-gallery__item.filter__clarendon:after,.tiled-gallery__item.filter__clarendon:before{content:"";display:block;height:100%;width:100%;top:0;left:0;position:absolute;pointer-events:none}.tiled-gallery__item.filter__clarendon:after{z-index:3}.tiled-gallery__item.filter__clarendon:before{background:rgba(127,187,227,.2);mix-blend-mode:overlay}.tiled-gallery__item.filter__gingham{position:relative;filter:brightness(1.05) hue-rotate(-10deg)}.tiled-gallery__item.filter__gingham img{width:100%;z-index:1}.tiled-gallery__item.filter__gingham:before{z-index:2}.tiled-gallery__item.filter__gingham:after,.tiled-gallery__item.filter__gingham:before{content:"";display:block;height:100%;width:100%;top:0;left:0;position:absolute;pointer-events:none}.tiled-gallery__item.filter__gingham:after{z-index:3;background:#e6e6fa;mix-blend-mode:soft-light}.tiled-gallery__item+.tiled-gallery__item{margin-top:4px}.tiled-gallery__item>img{background-color:rgba(0,0,0,.1)}.tiled-gallery__item>a,.tiled-gallery__item>a>img,.tiled-gallery__item>img{display:block;height:auto;margin:0;max-width:100%;-o-object-fit:cover;object-fit:cover;-o-object-position:center;object-position:center;padding:0;width:100%}@keyframes tiled-gallery-img-placeholder{0%{background-color:#f6f6f6}50%{background-color:hsla(0,0%,96.5%,.5)}to{background-color:#f6f6f6}}.wp-block-jetpack-tiled-gallery{padding-left:4px;padding-right:4px}.wp-block-jetpack-tiled-gallery .tiled-gallery__item>img:focus{outline:none}.wp-block-jetpack-tiled-gallery .tiled-gallery__item>img{animation:tiled-gallery-img-placeholder 1.6s ease-in-out infinite}.wp-block-jetpack-tiled-gallery .tiled-gallery__item.is-selected{outline:4px solid #0085ba;filter:none}.wp-block-jetpack-tiled-gallery .tiled-gallery__item.is-selected:after,.wp-block-jetpack-tiled-gallery .tiled-gallery__item.is-selected:before{content:none}.wp-block-jetpack-tiled-gallery .tiled-gallery__item.is-transient img{opacity:.3}.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item{margin-top:4px;width:100%}.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-button.tiled-gallery__add-item-button,.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-form-file-upload{width:100%;height:100%}.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-button.tiled-gallery__add-item-button{display:flex;flex-direction:column;justify-content:center;box-shadow:none;border:none;border-radius:0;min-height:100px}.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-button.tiled-gallery__add-item-button .dashicon{margin-top:10px}.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-button.tiled-gallery__add-item-button:focus,.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-button.tiled-gallery__add-item-button:hover{border:1px solid #555d66}.wp-block-jetpack-tiled-gallery .tiled-gallery__item__inline-menu{background-color:#0085ba;display:inline-flex;padding:0 0 2px 2px;position:absolute;right:0;top:0}.wp-block-jetpack-tiled-gallery .tiled-gallery__item__inline-menu .components-button,.wp-block-jetpack-tiled-gallery .tiled-gallery__item__inline-menu .components-button:focus,.wp-block-jetpack-tiled-gallery .tiled-gallery__item__inline-menu .components-button:hover{color:#fff}.wp-block-jetpack-tiled-gallery .tiled-gallery__item__remove{padding:0}.wp-block-jetpack-tiled-gallery .tiled-gallery__item .components-spinner{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.editor-block-preview__content .wp-block-jetpack-tiled-gallery .editor-media-placeholder{display:none}.wp-block-jetpack-tiled-gallery .tiled-gallery__media-placeholder-icon{height:20px;margin-right:1ch;width:20px}.tiled-gallery__filter-picker-menu{padding:7px}.tiled-gallery__filter-picker-menu .components-menu-item__button+.components-menu-item__button{margin-top:2px}.tiled-gallery__filter-picker-menu .components-menu-item__button.is-active{color:#191e23;box-shadow:0 0 0 2px #555d66!important}.wp-block-jetpack-wordads{background:#fff}[data-type="jetpack/wordads"][data-align=center] .jetpack-wordads__ad{margin:0 auto}.jetpack-wordads__ad{display:flex;overflow:hidden;flex-direction:column;max-width:100%}.jetpack-wordads__ad .components-placeholder{flex-grow:2}.jetpack-wordads__ad .components-toggle-control__label{line-height:1.4em}.jetpack-wordads__ad .components-base-control__field{padding:7px}.jetpack-wordads-leaderboard .components-placeholder{min-height:90px}.jetpack-wordads-mobile_leaderboard .components-placeholder{min-height:72px}.wp-block-jetpack-wordads__format-picker{padding:7px}.wp-block-jetpack-wordads__format-picker .components-menu-item__button+.components-menu-item__button{margin-top:2px}.wp-block-jetpack-wordads__format-picker .components-menu-item__button.is-active{color:#191e23;box-shadow:0 0 0 2px #555d66!important}.jetpack-seo-message-box{background-color:#edeff0;border-radius:4px}.jetpack-seo-message-box textarea{width:100%}.jetpack-seo-character-count{padding-bottom:5px;padding-left:5px}.wp-block-jetpack-vr{position:relative;max-width:525px;margin-left:auto;margin-right:auto;overflow:hidden}.wp-block-jetpack-vr .components-placeholder__fieldset{justify-content:space-around} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/editor-beta.js b/plugins/jetpack/_inc/blocks/editor-beta.js
deleted file mode 100644
index 977562cc..00000000
--- a/plugins/jetpack/_inc/blocks/editor-beta.js
+++ /dev/null
@@ -1,25 +0,0 @@
-!function(e,t){for(var n in t)e[n]=t[n]}(window,function(e){function t(t){for(var n,r,a=t[0],o=t[1],s=0,c=[];s<a.length;s++)r=a[s],i[r]&&c.push(i[r][0]),i[r]=0;for(n in o)Object.prototype.hasOwnProperty.call(o,n)&&(e[n]=o[n]);for(l&&l(t);c.length;)c.shift()()}var n={},r={2:0},i={2:0};function a(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,a),r.l=!0,r.exports}a.e=function(e){var t=[];r[e]?t.push(r[e]):0!==r[e]&&{9:1,10:1}[e]&&t.push(r[e]=new Promise(function(t,n){for(var r="rtl"===document.dir?({9:"vendors~map/mapbox-gl",10:"vendors~swiper"}[e]||e)+".rtl.css":({9:"vendors~map/mapbox-gl",10:"vendors~swiper"}[e]||e)+".css",i=a.p+r,o=document.getElementsByTagName("link"),s=0;s<o.length;s++){var c=(u=o[s]).getAttribute("data-href")||u.getAttribute("href");if("stylesheet"===u.rel&&(c===r||c===i))return t()}var l=document.getElementsByTagName("style");for(s=0;s<l.length;s++){var u;if((c=(u=l[s]).getAttribute("data-href"))===r||c===i)return t()}var p=document.createElement("link");p.rel="stylesheet",p.type="text/css",p.setAttribute("data-webpack",!0),p.onload=t,p.onerror=function(t){var r=t&&t.target&&t.target.src||i,a=new Error("Loading CSS chunk "+e+" failed.\n("+r+")");a.request=r,n(a)},p.href=i,document.getElementsByTagName("head")[0].appendChild(p)}).then(function(){r[e]=0}));var n=i[e];if(0!==n)if(n)t.push(n[2]);else{var o=new Promise(function(t,r){n=i[e]=[t,r]});t.push(n[2]=o);var s,c=document.createElement("script");c.charset="utf-8",c.timeout=120,a.nc&&c.setAttribute("nonce",a.nc),c.src=function(e){return a.p+""+({9:"vendors~map/mapbox-gl",10:"vendors~swiper"}[e]||e)+".js"}(e),s=function(t){c.onerror=c.onload=null,clearTimeout(l);var n=i[e];if(0!==n){if(n){var r=t&&("load"===t.type?"missing":t.type),a=t&&t.target&&t.target.src,o=new Error("Loading chunk "+e+" failed.\n("+r+": "+a+")");o.type=r,o.request=a,n[1](o)}i[e]=void 0}};var l=setTimeout(function(){s({type:"timeout",target:c})},12e4);c.onerror=c.onload=s,document.head.appendChild(c)}return Promise.all(t)},a.m=e,a.c=n,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)a.d(n,r,function(t){return e[t]}.bind(null,r));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a.oe=function(e){throw console.error(e),e};var o=window.webpackJsonp=window.webpackJsonp||[],s=o.push.bind(o);o.push=t,o=o.slice();for(var c=0;c<o.length;c++)t(o[c]);var l=s;return a(a.s=283)}([function(e,t){e.exports=wp.element},function(e,t,n){"use strict";n.d(t,"a",function(){return s}),n.d(t,"b",function(){return c}),n.d(t,"c",function(){return l});var r=n(21),i=n.n(r),a=n(15),o=function(e){var t=i()(e);return t.push("jetpack"),t};function s(){return a.__.apply(void 0,i()(o(arguments)))}function c(){return a._n.apply(void 0,i()(o(arguments)))}function l(){return a._x.apply(void 0,i()(o(arguments)))}},function(e,t){e.exports=wp.components},function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(e,t){e.exports=function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}},function(e,t){e.exports=window.lodash},function(e,t){e.exports=wp.editor},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t,n){var r=n(70),i=n(4);e.exports=function(e,t){return!t||"object"!==r(t)&&"function"!=typeof t?i(e):t}},function(e,t){function n(t){return e.exports=n=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},n(t)}e.exports=n},function(e,t,n){var r=n(71);e.exports=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&r(e,t)}},function(e,t){function n(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}e.exports=function(e,t,r){return t&&n(e.prototype,t),r&&n(e,r),e}},function(e,t,n){var r;
-/*!
- Copyright (c) 2017 Jed Watson.
- Licensed under the MIT License (MIT), see
- http://jedwatson.github.io/classnames
-*/
-/*!
- Copyright (c) 2017 Jed Watson.
- Licensed under the MIT License (MIT), see
- http://jedwatson.github.io/classnames
-*/
-!function(){"use strict";var n={}.hasOwnProperty;function i(){for(var e=[],t=0;t<arguments.length;t++){var r=arguments[t];if(r){var a=typeof r;if("string"===a||"number"===a)e.push(r);else if(Array.isArray(r)&&r.length){var o=i.apply(null,r);o&&e.push(o)}else if("object"===a)for(var s in r)n.call(r,s)&&r[s]&&e.push(s)}}return e.join(" ")}e.exports?(i.default=i,e.exports=i):void 0===(r=function(){return i}.apply(t,[]))||(e.exports=r)}()},function(e,t,n){var r=n(3);e.exports=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},i=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),i.forEach(function(t){r(e,t,n[t])})}return e}},function(e,t){e.exports=wp.compose},function(e,t){e.exports=wp.i18n},function(e,t){e.exports=wp.blocks},function(e,t){e.exports=wp.data},function(e,t,n){"use strict";var r=Object.prototype.hasOwnProperty;function i(e,t){return r.call(e,t)}function a(e){return!(e>=55296&&e<=57343)&&(!(e>=64976&&e<=65007)&&(65535!=(65535&e)&&65534!=(65535&e)&&(!(e>=0&&e<=8)&&(11!==e&&(!(e>=14&&e<=31)&&(!(e>=127&&e<=159)&&!(e>1114111)))))))}function o(e){if(e>65535){var t=55296+((e-=65536)>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}var s=/\\([!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~])/g,c=new RegExp(s.source+"|"+/&([a-z#][a-z0-9]{1,31});/gi.source,"gi"),l=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i,u=n(80);var p=/[&<>"]/,h=/[&<>"]/g,d={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"};function m(e){return d[e]}var f=/[.?*+^$[\]\\(){}|-]/g;var b=n(58);t.lib={},t.lib.mdurl=n(81),t.lib.ucmicro=n(136),t.assign=function(e){return Array.prototype.slice.call(arguments,1).forEach(function(t){if(t){if("object"!=typeof t)throw new TypeError(t+"must be object");Object.keys(t).forEach(function(n){e[n]=t[n]})}}),e},t.isString=function(e){return"[object String]"===function(e){return Object.prototype.toString.call(e)}(e)},t.has=i,t.unescapeMd=function(e){return e.indexOf("\\")<0?e:e.replace(s,"$1")},t.unescapeAll=function(e){return e.indexOf("\\")<0&&e.indexOf("&")<0?e:e.replace(c,function(e,t,n){return t||function(e,t){var n=0;return i(u,t)?u[t]:35===t.charCodeAt(0)&&l.test(t)&&a(n="x"===t[1].toLowerCase()?parseInt(t.slice(2),16):parseInt(t.slice(1),10))?o(n):e}(e,n)})},t.isValidEntityCode=a,t.fromCodePoint=o,t.escapeHtml=function(e){return p.test(e)?e.replace(h,m):e},t.arrayReplaceAt=function(e,t,n){return[].concat(e.slice(0,t),n,e.slice(t+1))},t.isSpace=function(e){switch(e){case 9:case 32:return!0}return!1},t.isWhiteSpace=function(e){if(e>=8192&&e<=8202)return!0;switch(e){case 9:case 10:case 11:case 12:case 13:case 32:case 160:case 5760:case 8239:case 8287:case 12288:return!0}return!1},t.isMdAsciiPunct=function(e){switch(e){case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 124:case 125:case 126:return!0;default:return!1}},t.isPunctChar=function(e){return b.test(e)},t.escapeRE=function(e){return e.replace(f,"\\$&")},t.normalizeReference=function(e){return e.trim().replace(/\s+/g," ").toUpperCase()}},function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n(16),i=n(39);function a(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],a=Object(i.a)(e),o=a.available;a.unavailableReason;if(!o)return!1;var s=Object(r.registerBlockType)("jetpack/".concat(e),t);return n.forEach(function(e){return Object(r.registerBlockType)("jetpack/".concat(e.name),e.settings)}),s}},function(e,t,n){"use strict";var r=n(0),i=n(2);t.a=function(e){return Object(r.createElement)(i.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(r.createElement)(i.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),e)}},function(e,t,n){var r=n(67),i=n(68),a=n(69);e.exports=function(e){return r(e)||i(e)||a()}},function(e,t,n){"use strict";n.d(t,"a",function(){return r}),n.d(t,"b",function(){return i}),n.d(t,"h",function(){return a}),n.d(t,"i",function(){return o}),n.d(t,"c",function(){return s}),n.d(t,"d",function(){return c}),n.d(t,"e",function(){return l}),n.d(t,"f",function(){return u}),n.d(t,"g",function(){return p});var r=["image"],i=4,a=20,o=2e3,s="circle",c="columns",l="rectangular",u="square",p=[{isDefault:!0,name:l},{name:s},{name:u},{name:c}]},function(e,t,n){var r=n(45),i=n(46),a=n(47);e.exports=function(e,t){return r(e)||i(e,t)||a()}},function(e,t){e.exports=wp.blob},function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n(0),i=n(1),a={name:"map",prefix:"jetpack",title:Object(i.a)("Map"),icon:Object(r.createElement)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",role:"img","aria-hidden":"true",focusable:"false"},Object(r.createElement)("path",{fill:"none",d:"M0 0h24v24H0V0z"}),Object(r.createElement)("path",{d:"M20.5 3l-.16.03L15 5.1 9 3 3.36 4.9c-.21.07-.36.25-.36.48V20.5c0 .28.22.5.5.5l.16-.03L9 18.9l6 2.1 5.64-1.9c.21-.07.36-.25.36-.48V3.5c0-.28-.22-.5-.5-.5zM10 5.47l4 1.4v11.66l-4-1.4V5.47zm-5 .99l3-1.01v11.7l-3 1.16V6.46zm14 11.08l-3 1.01V6.86l3-1.16v11.84z"})),category:"jetpack",keywords:[Object(i.a)("map"),Object(i.a)("location")],description:Object(i.a)("Add an interactive map showing one or more locations."),attributes:{align:{type:"string"},points:{type:"array",default:[]},mapStyle:{type:"string",default:"default"},mapDetails:{type:"boolean",default:!0},zoom:{type:"integer",default:13},mapCenter:{type:"object",default:{longitude:-122.41941550000001,latitude:37.7749295}},markerColor:{type:"string",default:"red"}},supports:{html:!1},mapStyleOptions:[{value:"default",label:Object(i.a)("Basic")},{value:"black_and_white",label:Object(i.a)("Black and white")},{value:"satellite",label:Object(i.a)("Satellite")},{value:"terrain",label:Object(i.a)("Terrain")}],validAlignments:["center","wide","full"],markerIcon:Object(r.createElement)("svg",{width:"14",height:"20",viewBox:"0 0 14 20",xmlns:"http://www.w3.org/2000/svg"},Object(r.createElement)("g",{id:"Page-1",fill:"none",fillRule:"evenodd"},Object(r.createElement)("g",{id:"outline-add_location-24px",transform:"translate(-5 -2)"},Object(r.createElement)("polygon",{id:"Shape",points:"0 0 24 0 24 24 0 24"}),Object(r.createElement)("path",{d:"M12,2 C8.14,2 5,5.14 5,9 C5,14.25 12,22 12,22 C12,22 19,14.25 19,9 C19,5.14 15.86,2 12,2 Z M7,9 C7,6.24 9.24,4 12,4 C14.76,4 17,6.24 17,9 C17,11.88 14.12,16.19 12,18.88 C9.92,16.21 7,11.85 7,9 Z M13,6 L11,6 L11,8 L9,8 L9,10 L11,10 L11,12 L13,12 L13,10 L15,10 L15,8 L13,8 L13,6 Z",id:"Shape",fill:"#000",fillRule:"nonzero"}))))}},function(e,t){e.exports=wp.apiFetch},function(e,t){function n(){return e.exports=n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},n.apply(this,arguments)}e.exports=n},function(e,t){e.exports=wp.keycodes},function(e,t,n){"use strict";n.d(t,"b",function(){return r}),n.d(t,"c",function(){return i}),n.d(t,"d",function(){return a}),n.d(t,"a",function(){return o}),n.d(t,"e",function(){return s});var r="after-visits",i="before-visits",a=3,o="jp-visit-counter",s=15552e3},function(e,t,n){"use strict";n.d(t,"a",function(){return p}),n.d(t,"b",function(){return l}),n.d(t,"c",function(){return h}),n.d(t,"d",function(){return u});var r=n(56),i=n(5),a=16/9,o=.8,s=600,c="wp-block-jetpack-slideshow_autoplay-paused";function l(e){u(e),p(e),e.el.querySelector(".wp-block-jetpack-slideshow_button-pause").addEventListener("click",function(){e.el&&(e.el.classList.contains(c)?(e.el.classList.remove(c),e.autoplay.start(),this.setAttribute("aria-label","Pause Slideshow")):(e.el.classList.add(c),e.autoplay.stop(),this.setAttribute("aria-label","Play Slideshow")))})}function u(e){if(e&&e.el){var t=e.el.querySelector('.swiper-slide[data-swiper-slide-index="0"] img');if(t){var n=t.clientWidth/t.clientHeight,r=Math.max(Math.min(n,a),1),i="undefined"!=typeof window?window.innerHeight*o:s,c=Math.min(e.width/r,i),l="".concat(Math.floor(c),"px"),u="".concat(Math.floor(c/2),"px");e.el.classList.add("wp-swiper-initialized"),e.wrapperEl.style.height=l,e.el.querySelector(".wp-block-jetpack-slideshow_button-prev").style.top=u,e.el.querySelector(".wp-block-jetpack-slideshow_button-next").style.top=u}}}function p(e){Object(i.forEach)(e.slides,function(t,n){t.setAttribute("aria-hidden",n===e.activeIndex?"false":"true"),n===e.activeIndex?t.setAttribute("tabindex","-1"):t.removeAttribute("tabindex")}),function(e){var t=e.slides[e.activeIndex];if(t){var n=t.getElementsByTagName("FIGCAPTION")[0],i=t.getElementsByTagName("IMG")[0];e.a11y.liveRegion&&(e.a11y.liveRegion[0].innerHTML=n?n.innerHTML:Object(r.escapeHTML)(i.alt))}}(e)}function h(e){Object(i.forEach)(e.pagination.bullets,function(t){t.addEventListener("click",function(){var t=e.slides[e.realIndex];setTimeout(function(){t.focus()},500)})})}},function(e,t,n){"use strict";var r=function(){if("undefined"!=typeof Map)return Map;function e(e,t){var n=-1;return e.some(function(e,r){return e[0]===t&&(n=r,!0)}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(t){var n=e(this.__entries__,t),r=this.__entries__[n];return r&&r[1]},t.prototype.set=function(t,n){var r=e(this.__entries__,t);~r?this.__entries__[r][1]=n:this.__entries__.push([t,n])},t.prototype.delete=function(t){var n=this.__entries__,r=e(n,t);~r&&n.splice(r,1)},t.prototype.has=function(t){return!!~e(this.__entries__,t)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(e,t){void 0===t&&(t=null);for(var n=0,r=this.__entries__;n<r.length;n++){var i=r[n];e.call(t,i[1],i[0])}},t}()}(),i="undefined"!=typeof window&&"undefined"!=typeof document&&window.document===document,a="undefined"!=typeof window&&window.Math===Math?window:"undefined"!=typeof self&&self.Math===Math?self:"undefined"!=typeof window&&window.Math===Math?window:Function("return this")(),o="function"==typeof requestAnimationFrame?requestAnimationFrame.bind(a):function(e){return setTimeout(function(){return e(Date.now())},1e3/60)},s=2;var c=20,l=["top","right","bottom","left","width","height","size","weight"],u="undefined"!=typeof MutationObserver,p=function(){function e(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=function(e,t){var n=!1,r=!1,i=0;function a(){n&&(n=!1,e()),r&&l()}function c(){o(a)}function l(){var e=Date.now();if(n){if(e-i<s)return;r=!0}else n=!0,r=!1,setTimeout(c,t);i=e}return l}(this.refresh.bind(this),c)}return e.prototype.addObserver=function(e){~this.observers_.indexOf(e)||this.observers_.push(e),this.connected_||this.connect_()},e.prototype.removeObserver=function(e){var t=this.observers_,n=t.indexOf(e);~n&&t.splice(n,1),!t.length&&this.connected_&&this.disconnect_()},e.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},e.prototype.updateObservers_=function(){var e=this.observers_.filter(function(e){return e.gatherActive(),e.hasActive()});return e.forEach(function(e){return e.broadcastActive()}),e.length>0},e.prototype.connect_=function(){i&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),u?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){i&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(e){var t=e.propertyName,n=void 0===t?"":t;l.some(function(e){return!!~n.indexOf(e)})&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),h=function(e,t){for(var n=0,r=Object.keys(t);n<r.length;n++){var i=r[n];Object.defineProperty(e,i,{value:t[i],enumerable:!1,writable:!1,configurable:!0})}return e},d=function(e){return e&&e.ownerDocument&&e.ownerDocument.defaultView||a},m=j(0,0,0,0);function f(e){return parseFloat(e)||0}function b(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return t.reduce(function(t,n){return t+f(e["border-"+n+"-width"])},0)}function g(e){var t=e.clientWidth,n=e.clientHeight;if(!t&&!n)return m;var r=d(e).getComputedStyle(e),i=function(e){for(var t={},n=0,r=["top","right","bottom","left"];n<r.length;n++){var i=r[n],a=e["padding-"+i];t[i]=f(a)}return t}(r),a=i.left+i.right,o=i.top+i.bottom,s=f(r.width),c=f(r.height);if("border-box"===r.boxSizing&&(Math.round(s+a)!==t&&(s-=b(r,"left","right")+a),Math.round(c+o)!==n&&(c-=b(r,"top","bottom")+o)),!function(e){return e===d(e).document.documentElement}(e)){var l=Math.round(s+a)-t,u=Math.round(c+o)-n;1!==Math.abs(l)&&(s-=l),1!==Math.abs(u)&&(c-=u)}return j(i.left,i.top,s,c)}var v="undefined"!=typeof SVGGraphicsElement?function(e){return e instanceof d(e).SVGGraphicsElement}:function(e){return e instanceof d(e).SVGElement&&"function"==typeof e.getBBox};function y(e){return i?v(e)?function(e){var t=e.getBBox();return j(0,0,t.width,t.height)}(e):g(e):m}function j(e,t,n,r){return{x:e,y:t,width:n,height:r}}var O=function(){function e(e){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=j(0,0,0,0),this.target=e}return e.prototype.isActive=function(){var e=y(this.target);return this.contentRect_=e,e.width!==this.broadcastWidth||e.height!==this.broadcastHeight},e.prototype.broadcastRect=function(){var e=this.contentRect_;return this.broadcastWidth=e.width,this.broadcastHeight=e.height,e},e}(),k=function(){return function(e,t){var n,r,i,a,o,s,c,l=(r=(n=t).x,i=n.y,a=n.width,o=n.height,s="undefined"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,c=Object.create(s.prototype),h(c,{x:r,y:i,width:a,height:o,top:i,right:r+a,bottom:o+i,left:r}),c);h(this,{target:e,contentRect:l})}}(),_=function(){function e(e,t,n){if(this.activeObservations_=[],this.observations_=new r,"function"!=typeof e)throw new TypeError("The callback provided as parameter 1 is not a function.");this.callback_=e,this.controller_=t,this.callbackCtx_=n}return e.prototype.observe=function(e){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(e instanceof d(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var t=this.observations_;t.has(e)||(t.set(e,new O(e)),this.controller_.addObserver(this),this.controller_.refresh())}},e.prototype.unobserve=function(e){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(e instanceof d(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var t=this.observations_;t.has(e)&&(t.delete(e),t.size||this.controller_.removeObserver(this))}},e.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},e.prototype.gatherActive=function(){var e=this;this.clearActive(),this.observations_.forEach(function(t){t.isActive()&&e.activeObservations_.push(t)})},e.prototype.broadcastActive=function(){if(this.hasActive()){var e=this.callbackCtx_,t=this.activeObservations_.map(function(e){return new k(e.target,e.broadcastRect())});this.callback_.call(e,t,e),this.clearActive()}},e.prototype.clearActive=function(){this.activeObservations_.splice(0)},e.prototype.hasActive=function(){return this.activeObservations_.length>0},e}(),w="undefined"!=typeof WeakMap?new WeakMap:new r,E=function(){return function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=p.getInstance(),r=new _(t,n,this);w.set(this,r)}}();["observe","unobserve","disconnect"].forEach(function(e){E.prototype[e]=function(){var t;return(t=w.get(this))[e].apply(t,arguments)}});var C=void 0!==a.ResizeObserver?a.ResizeObserver:E;t.a=C},function(e,t,n){"use strict";var r=n(88),i=n(247);function a(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}t.parse=y,t.resolve=function(e,t){return y(e,!1,!0).resolve(t)},t.resolveObject=function(e,t){return e?y(e,!1,!0).resolveObject(t):t},t.format=function(e){i.isString(e)&&(e=y(e));return e instanceof a?e.format():a.prototype.format.call(e)},t.Url=a;var o=/^([a-z0-9.+-]+:)/i,s=/:[0-9]*$/,c=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,l=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),u=["'"].concat(l),p=["%","/","?",";","#"].concat(u),h=["/","?","#"],d=/^[+a-z0-9A-Z_-]{0,63}$/,m=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,f={javascript:!0,"javascript:":!0},b={javascript:!0,"javascript:":!0},g={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},v=n(248);function y(e,t,n){if(e&&i.isObject(e)&&e instanceof a)return e;var r=new a;return r.parse(e,t,n),r}a.prototype.parse=function(e,t,n){if(!i.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var a=e.indexOf("?"),s=-1!==a&&a<e.indexOf("#")?"?":"#",l=e.split(s);l[0]=l[0].replace(/\\/g,"/");var y=e=l.join(s);if(y=y.trim(),!n&&1===e.split("#").length){var j=c.exec(y);if(j)return this.path=y,this.href=y,this.pathname=j[1],j[2]?(this.search=j[2],this.query=t?v.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search="",this.query={}),this}var O=o.exec(y);if(O){var k=(O=O[0]).toLowerCase();this.protocol=k,y=y.substr(O.length)}if(n||O||y.match(/^\/\/[^@\/]+@[^@\/]+/)){var _="//"===y.substr(0,2);!_||O&&b[O]||(y=y.substr(2),this.slashes=!0)}if(!b[O]&&(_||O&&!g[O])){for(var w,E,C=-1,x=0;x<h.length;x++){-1!==(S=y.indexOf(h[x]))&&(-1===C||S<C)&&(C=S)}-1!==(E=-1===C?y.lastIndexOf("@"):y.lastIndexOf("@",C))&&(w=y.slice(0,E),y=y.slice(E+1),this.auth=decodeURIComponent(w)),C=-1;for(x=0;x<p.length;x++){var S;-1!==(S=y.indexOf(p[x]))&&(-1===C||S<C)&&(C=S)}-1===C&&(C=y.length),this.host=y.slice(0,C),y=y.slice(C),this.parseHost(),this.hostname=this.hostname||"";var A="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!A)for(var M=this.hostname.split(/\./),T=(x=0,M.length);x<T;x++){var z=M[x];if(z&&!z.match(d)){for(var D="",N=0,F=z.length;N<F;N++)z.charCodeAt(N)>127?D+="x":D+=z[N];if(!D.match(d)){var P=M.slice(0,x),R=M.slice(x+1),I=z.match(m);I&&(P.push(I[1]),R.unshift(I[2])),R.length&&(y="/"+R.join(".")+y),this.hostname=P.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),A||(this.hostname=r.toASCII(this.hostname));var L=this.port?":"+this.port:"",B=this.hostname||"";this.host=B+L,this.href+=this.host,A&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==y[0]&&(y="/"+y))}if(!f[k])for(x=0,T=u.length;x<T;x++){var q=u[x];if(-1!==y.indexOf(q)){var V=encodeURIComponent(q);V===q&&(V=escape(q)),y=y.split(q).join(V)}}var H=y.indexOf("#");-1!==H&&(this.hash=y.substr(H),y=y.slice(0,H));var U=y.indexOf("?");if(-1!==U?(this.search=y.substr(U),this.query=y.substr(U+1),t&&(this.query=v.parse(this.query)),y=y.slice(0,U)):t&&(this.search="",this.query={}),y&&(this.pathname=y),g[k]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){L=this.pathname||"";var G=this.search||"";this.path=L+G}return this.href=this.format(),this},a.prototype.format=function(){var e=this.auth||"";e&&(e=(e=encodeURIComponent(e)).replace(/%3A/i,":"),e+="@");var t=this.protocol||"",n=this.pathname||"",r=this.hash||"",a=!1,o="";this.host?a=e+this.host:this.hostname&&(a=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(a+=":"+this.port)),this.query&&i.isObject(this.query)&&Object.keys(this.query).length&&(o=v.stringify(this.query));var s=this.search||o&&"?"+o||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||g[t])&&!1!==a?(a="//"+(a||""),n&&"/"!==n.charAt(0)&&(n="/"+n)):a||(a=""),r&&"#"!==r.charAt(0)&&(r="#"+r),s&&"?"!==s.charAt(0)&&(s="?"+s),t+a+(n=n.replace(/[?#]/g,function(e){return encodeURIComponent(e)}))+(s=s.replace("#","%23"))+r},a.prototype.resolve=function(e){return this.resolveObject(y(e,!1,!0)).format()},a.prototype.resolveObject=function(e){if(i.isString(e)){var t=new a;t.parse(e,!1,!0),e=t}for(var n=new a,r=Object.keys(this),o=0;o<r.length;o++){var s=r[o];n[s]=this[s]}if(n.hash=e.hash,""===e.href)return n.href=n.format(),n;if(e.slashes&&!e.protocol){for(var c=Object.keys(e),l=0;l<c.length;l++){var u=c[l];"protocol"!==u&&(n[u]=e[u])}return g[n.protocol]&&n.hostname&&!n.pathname&&(n.path=n.pathname="/"),n.href=n.format(),n}if(e.protocol&&e.protocol!==n.protocol){if(!g[e.protocol]){for(var p=Object.keys(e),h=0;h<p.length;h++){var d=p[h];n[d]=e[d]}return n.href=n.format(),n}if(n.protocol=e.protocol,e.host||b[e.protocol])n.pathname=e.pathname;else{for(var m=(e.pathname||"").split("/");m.length&&!(e.host=m.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==m[0]&&m.unshift(""),m.length<2&&m.unshift(""),n.pathname=m.join("/")}if(n.search=e.search,n.query=e.query,n.host=e.host||"",n.auth=e.auth,n.hostname=e.hostname||e.host,n.port=e.port,n.pathname||n.search){var f=n.pathname||"",v=n.search||"";n.path=f+v}return n.slashes=n.slashes||e.slashes,n.href=n.format(),n}var y=n.pathname&&"/"===n.pathname.charAt(0),j=e.host||e.pathname&&"/"===e.pathname.charAt(0),O=j||y||n.host&&e.pathname,k=O,_=n.pathname&&n.pathname.split("/")||[],w=(m=e.pathname&&e.pathname.split("/")||[],n.protocol&&!g[n.protocol]);if(w&&(n.hostname="",n.port=null,n.host&&(""===_[0]?_[0]=n.host:_.unshift(n.host)),n.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===m[0]?m[0]=e.host:m.unshift(e.host)),e.host=null),O=O&&(""===m[0]||""===_[0])),j)n.host=e.host||""===e.host?e.host:n.host,n.hostname=e.hostname||""===e.hostname?e.hostname:n.hostname,n.search=e.search,n.query=e.query,_=m;else if(m.length)_||(_=[]),_.pop(),_=_.concat(m),n.search=e.search,n.query=e.query;else if(!i.isNullOrUndefined(e.search)){if(w)n.hostname=n.host=_.shift(),(A=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=A.shift(),n.host=n.hostname=A.shift());return n.search=e.search,n.query=e.query,i.isNull(n.pathname)&&i.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n}if(!_.length)return n.pathname=null,n.search?n.path="/"+n.search:n.path=null,n.href=n.format(),n;for(var E=_.slice(-1)[0],C=(n.host||e.host||_.length>1)&&("."===E||".."===E)||""===E,x=0,S=_.length;S>=0;S--)"."===(E=_[S])?_.splice(S,1):".."===E?(_.splice(S,1),x++):x&&(_.splice(S,1),x--);if(!O&&!k)for(;x--;x)_.unshift("..");!O||""===_[0]||_[0]&&"/"===_[0].charAt(0)||_.unshift(""),C&&"/"!==_.join("/").substr(-1)&&_.push("");var A,M=""===_[0]||_[0]&&"/"===_[0].charAt(0);w&&(n.hostname=n.host=M?"":_.length?_.shift():"",(A=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=A.shift(),n.host=n.hostname=A.shift()));return(O=O||n.host&&_.length)&&!M&&_.unshift(""),_.length?n.pathname=_.join("/"):(n.pathname=null,n.path=null),i.isNull(n.pathname)&&i.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},a.prototype.parseHost=function(){var e=this.host,t=s.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},function(e,t,n){"object"==typeof window&&window.Jetpack_Block_Assets_Base_Url&&(n.p=window.Jetpack_Block_Assets_Base_Url)},function(e,t,n){var r=n(108);e.exports=function(e,t){if(null==e)return{};var n,i,a=r(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}},function(e,t,n){"use strict";var r=/^[-!#$%&'*+\/0-9=?A-Z^_a-z{|}~](\.?[-!#$%&'*+\/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\.?[a-zA-Z0-9])*\.[a-zA-Z](-?[a-zA-Z0-9])+$/;t.validate=function(e){if(!e)return!1;if(e.length>254)return!1;if(!r.test(e))return!1;var t=e.split("@");return!(t[0].length>64)&&!t[1].split(".").some(function(e){return e.length>63})}},function(e,t){function n(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(l){return void n(l)}s.done?t(c):Promise.resolve(c).then(r,i)}e.exports=function(e){return function(){var t=this,r=arguments;return new Promise(function(i,a){var o=e.apply(t,r);function s(e){n(o,i,a,s,c,"next",e)}function c(e){n(o,i,a,s,c,"throw",e)}s(void 0)})}}},function(e,t,n){"use strict";var r=n(3),i=n.n(r),a=n(7),o=n.n(a),s=n(11),c=n.n(s),l=n(8),u=n.n(l),p=n(9),h=n.n(p),d=n(10),m=n.n(d),f=n(0),b=n(12),g=n.n(b),v=n(14),y=n(2),j=n(6),O=n(5),k=n(1),_=window.getComputedStyle,w=Object(y.withFallbackStyles)(function(e,t){var n,r,i,a,o=t.textButtonColor,s=t.backgroundButtonColor,c=s&&s.color,l=o&&o.color;return!l&&e&&(n=e.querySelector('[contenteditable="true"]')),r=e.querySelector(".wp-block-button__link")?e.querySelector(".wp-block-button__link"):e,e&&(i=_(r).backgroundColor),n&&(a=_(n).color),{fallbackBackgroundColor:c||i,fallbackTextColor:l||a}}),E=function(e){function t(){return o()(this,t),u()(this,h()(t).apply(this,arguments))}return m()(t,e),c()(t,[{key:"componentDidUpdate",value:function(e){if(!Object(O.isEqual)(this.props.textButtonColor,e.textButtonColor)||!Object(O.isEqual)(this.props.backgroundButtonColor,e.backgroundButtonColor)){var t=this.getButtonClasses();this.props.setAttributes({submitButtonClasses:t})}}},{key:"getButtonClasses",value:function(){var e,t=this.props,n=t.textButtonColor,r=t.backgroundButtonColor,a=Object(O.get)(n,"class"),o=Object(O.get)(r,"class");return g()("wp-block-button__link",(e={"has-text-color":n},i()(e,a,a),i()(e,"has-background",r),i()(e,o,o),e))}},{key:"render",value:function(){var e=this.props,t=e.attributes,n=e.fallbackBackgroundColor,r=e.fallbackTextColor,i=e.setAttributes,a=e.setBackgroundButtonColor,o=e.setTextButtonColor,s=t.customBackgroundButtonColor||n,c=t.customTextButtonColor||r,l={border:"none",backgroundColor:s,color:c},u=this.getButtonClasses();return Object(f.createElement)(f.Fragment,null,Object(f.createElement)("div",{className:"wp-block-button jetpack-submit-button"},Object(f.createElement)(j.RichText,{placeholder:Object(k.a)("Add text…"),value:t.submitButtonText,onChange:function(e){return i({submitButtonText:e})},className:u,style:l,keepPlaceholderOnFocus:!0,formattingControls:[]})),Object(f.createElement)(j.InspectorControls,null,Object(f.createElement)(j.PanelColorSettings,{title:Object(k.a)("Button Color Settings"),colorSettings:[{value:s,onChange:function(e){a(e),i({customBackgroundButtonColor:e})},label:Object(k.a)("Background Color")},{value:c,onChange:function(e){o(e),i({customTextButtonColor:e})},label:Object(k.a)("Text Color")}]}),Object(f.createElement)(j.ContrastChecker,{textColor:c,backgroundColor:s})))}}]),t}(f.Component);t.a=Object(v.compose)([Object(j.withColors)("backgroundButtonColor",{textButtonColor:"color"}),w])(E)},,function(e,t,n){"use strict";var r=n(13),i=n.n(r),a=n(5),o=n(95),s="Jetpack_Editor_Initial_State";function c(e){var t=Object(a.get)("object"==typeof window?window:null,[s],null),n=Object(a.includes)(o.beta,e),r=Object(a.get)(t,["available_blocks",e,"available"],n),c=Object(a.get)(t,["available_blocks",e,"unavailable_reason"],"unknown");return i()({available:r},!r&&{unavailableReason:c})}n.d(t,"a",function(){return c})},function(e,t){e.exports=wp.editPost},function(e,t,n){"use strict";var r=n(0),i=n(2),a=n(40),o=n(53),s=(n(185),n(43)),c=Object(i.createSlotFill)("JetpackPluginSidebar"),l=c.Fill,u=c.Slot,p=function(e){var t=e.children;return Object(r.createElement)(l,null,t)};p.Slot=function(){return Object(r.createElement)(u,null,function(e){return e.length?Object(r.createElement)(r.Fragment,null,Object(r.createElement)(a.PluginSidebarMoreMenuItem,{target:"jetpack",icon:Object(r.createElement)(s.a,null)},"Jetpack"),Object(r.createElement)(a.PluginSidebar,{name:"jetpack",title:"Jetpack",icon:Object(r.createElement)(s.a,null)},e)):null})},Object(o.registerPlugin)("jetpack-sidebar",{render:function(){return Object(r.createElement)(p.Slot,null)}}),t.a=p},function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n(53),i=n(39);function a(e,t){var n=Object(i.a)(e),a=n.available;n.unavailableReason;return!!a&&Object(r.registerPlugin)("jetpack-".concat(e),t)}},function(e,t,n){"use strict";var r=n(0),i=n(2),a=n(12),o=n.n(a);t.a=function(e){var t=e.size,n=void 0===t?24:t,a=e.className;return Object(r.createElement)(i.SVG,{className:o()("jetpack-logo",a),width:n,height:n,viewBox:"0 0 32 32"},Object(r.createElement)(i.Path,{className:"jetpack-logo__icon-circle",fill:"#00be28",d:"M16,0C7.2,0,0,7.2,0,16s7.2,16,16,16s16-7.2,16-16S24.8,0,16,0z"}),Object(r.createElement)(i.Polygon,{className:"jetpack-logo__icon-triangle",fill:"#fff",points:"15,19 7,19 15,3 "}),Object(r.createElement)(i.Polygon,{className:"jetpack-logo__icon-triangle",fill:"#fff",points:"17,29 17,13 25,13 "}))}},function(e,t,n){"use strict";n.d(t,"b",function(){return s}),n.d(t,"a",function(){return c});var r=n(23),i=n.n(r),a=n(22);function o(e,t){var n=(t-e.reduce(function(e,t){return e+t},0))/e.length;return e.map(function(e){return e+n})}function s(e,t){!function(e,t,n){var r=i()(t,2),s=r[0],c=r[1],d=1/s*(n-a.b*(e.childElementCount-1)-c);!function(e,t){var n=t.rawHeight,r=t.rowWidth,i=l(e),s=i.map(function(e){return(n-a.b*(e.childElementCount-1))*p(e)[0]}),c=o(s,r);i.forEach(function(e,t){var r=s[t],i=c[t];!function(e,t){var n=t.colHeight,r=t.width,i=t.rawWidth,a=o(u(e).map(function(e){return i/h(e)}),n);Array.from(e.children).forEach(function(e,t){var n=a[t];e.setAttribute("style","height:".concat(n,"px;width:").concat(r,"px;"))})}(e,{colHeight:n-a.b*(e.childElementCount-1),width:i,rawWidth:r})})}(e,{rawHeight:d,rowWidth:n-a.b*(e.childElementCount-1)})}(e,function(e){return l(e).map(p).reduce(function(e,t){var n=i()(e,2),r=n[0],a=n[1],o=i()(t,2),s=o[0],c=o[1];return[r+s,a+c]},[0,0])}(e),t)}function c(e){return Array.from(e.querySelectorAll(".tiled-gallery__row"))}function l(e){return Array.from(e.querySelectorAll(".tiled-gallery__col"))}function u(e){return Array.from(e.querySelectorAll(".tiled-gallery__item > img, .tiled-gallery__item > a > img"))}function p(e){var t=u(e),n=t.length,r=1/t.map(h).reduce(function(e,t){return e+1/t},0);return[r,r*n||1]}function h(e){var t=parseInt(e.dataset.width,10),n=parseInt(e.dataset.height,10);return t&&!Number.isNaN(t)&&n&&!Number.isNaN(n)?t/n:1}},function(e,t){e.exports=function(e){if(Array.isArray(e))return e}},function(e,t){e.exports=function(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,s=e[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(c){i=!0,a=c}finally{try{r||null==s.return||s.return()}finally{if(i)throw a}}return n}},function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}},function(e,t,n){var r=n(91)(Object,"create");e.exports=r},function(e,t,n){var r=n(214);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},function(e,t,n){var r=n(220);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},function(e,t){e.exports=wp.date},function(e,t,n){"use strict";var r=Object.assign||function(e){for(var t,n=1;n<arguments.length;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e};Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t,n=e.size,i=void 0===n?24:n,a=e.onClick,s=(e.icon,e.className),c=function(e,t){var n={};for(var r in e)0<=t.indexOf(r)||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["size","onClick","icon","className"]),l=["gridicon","gridicons-notice-outline",s,(t=i,!(0!=t%18)&&"needs-offset"),!1,!1].filter(Boolean).join(" ");return o.default.createElement("svg",r({className:l,height:i,width:i,onClick:a},c,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"}),o.default.createElement("g",null,o.default.createElement("path",{d:"M12 4c4.41 0 8 3.59 8 8s-3.59 8-8 8-8-3.59-8-8 3.59-8 8-8m0-2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 13h-2v2h2v-2zm-2-2h2l.5-6h-3l.5 6z"})))};var i,a=n(109),o=(i=a)&&i.__esModule?i:{default:i};e.exports=t.default},function(e,t){e.exports=wp.plugins},function(e,t,n){var r=n(32),i=n(251),a=n(252),o=n(253)("photon");e.exports=function(e,t){var n=r.parse(e,!0,!0),c="https:"===n.protocol;delete n.protocol,delete n.auth,delete n.port;var l={slashes:!0,protocol:"https:",query:{}};if(f=n.host,/^i[0-2]\.wp\.com$/.test(f))l.pathname=n.pathname,l.hostname=n.hostname;else{if(n.search)return null;var u=r.format(n);l.pathname=0===u.indexOf("//")?u.substring(1):u,l.hostname=(p=l.pathname,h=i(p),d=a(h),m="i"+Math.floor(3*d()),o('determined server "%s" to use with "%s"',m,p),m+".wp.com"),c&&(l.query.ssl=1)}var p,h,d,m;var f;if(t)for(var b in t)"host"!==b&&"hostname"!==b?"secure"!==b||t[b]?l.query[s[b]||b]=t[b]:l.protocol="http:":l.hostname=t[b];var g=r.format(l);return o("generated Photon URL: %s",g),g};var s={width:"w",height:"h",letterboxing:"lb",removeLetterboxing:"ulb"}},function(e,t,n){"use strict";n.d(t,"a",function(){return c});var r=n(23),i=n.n(r),a=n(36),o=n.n(a),s=n(5);n(93);function c(){return l.apply(this,arguments)}function l(){return(l=o()(regeneratorRuntime.mark(function e(){var t,r,a,o,c,l,u,p=arguments;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t=p.length>0&&void 0!==p[0]?p[0]:".swiper-container",r=p.length>1&&void 0!==p[1]?p[1]:{},a=p.length>2&&void 0!==p[2]?p[2]:{},o={effect:"slide",grabCursor:!0,init:!0,initialSlide:0,navigation:{nextEl:".swiper-button-next",prevEl:".swiper-button-prev"},pagination:{bulletElement:"button",clickable:!0,el:".swiper-pagination",type:"bullets"},preventClicksPropagation:!1,releaseFormElements:!1,setWrapperSize:!0,touchStartPreventDefault:!1,on:Object(s.mapValues)(a,function(e){return function(){e(this)}})},e.next=6,Promise.all([n.e(10).then(n.t.bind(null,279,7)),n.e(10).then(n.t.bind(null,280,7))]);case 6:return c=e.sent,l=i()(c,1),u=l[0].default,e.abrupt("return",new u(t,Object(s.merge)({},o,r)));case 10:case"end":return e.stop()}},e)}))).apply(this,arguments)}},function(e,t){e.exports=wp.escapeHtml},function(e,t,n){"use strict";var r=n(23),i=n.n(r),a=n(7),o=n.n(a),s=n(11),c=n.n(s),l=n(8),u=n.n(l),p=n(9),h=n.n(p),d=n(4),m=n.n(d),f=n(10),b=n.n(f),g=n(3),v=n.n(g),y=n(0),j=n(1),O=n(5),k=n(2),_=(n(76),function(e){function t(){var e,n;o()(this,t);for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];return n=u()(this,(e=h()(t)).call.apply(e,[this].concat(i))),v()(m()(n),"handleClick",function(){(0,n.props.onClick)(m()(n))}),v()(m()(n),"getPoint",function(){var e=n.props.point;return[e.coordinates.longitude,e.coordinates.latitude]}),n}return b()(t,e),c()(t,[{key:"componentDidMount",value:function(){this.renderMarker()}},{key:"componentWillUnmount",value:function(){this.marker&&this.marker.remove()}},{key:"componentDidUpdate",value:function(){this.renderMarker()}},{key:"renderMarker",value:function(){var e=this.props,t=e.map,n=e.point,r=e.mapboxgl,i=e.markerColor,a=this.handleClick,o=[n.coordinates.longitude,n.coordinates.latitude],s=this.marker?this.marker.getElement():document.createElement("div");this.marker?this.marker.setLngLat(o):(s.className="wp-block-jetpack-map-marker",this.marker=new r.Marker(s).setLngLat(o).setOffset([0,-19]).addTo(t),this.marker.getElement().addEventListener("click",a)),s.innerHTML='<?xml version="1.0" encoding="UTF-8"?><svg version="1.1" viewBox="0 0 32 38" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g fill-rule="evenodd"><path id="d" d="m16 38s16-11.308 16-22-7.1634-16-16-16-16 5.3076-16 16 16 22 16 22z" fill="'+i+'" mask="url(#c)"/></g></svg>'}},{key:"render",value:function(){return null}}]),t}(y.Component));_.defaultProps={point:{},map:null,markerColor:"#000000",mapboxgl:null,onClick:function(){}};var w=_,E=function(e){function t(){var e,n;o()(this,t);for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];return n=u()(this,(e=h()(t)).call.apply(e,[this].concat(i))),v()(m()(n),"closeClick",function(){n.props.unsetActiveMarker()}),n}return b()(t,e),c()(t,[{key:"componentDidMount",value:function(){var e=this.props.mapboxgl;this.el=document.createElement("DIV"),this.infowindow=new e.Popup({closeButton:!0,closeOnClick:!1,offset:{left:[0,0],top:[0,5],right:[0,0],bottom:[0,-40]}}),this.infowindow.setDOMContent(this.el),this.infowindow.on("close",this.closeClick)}},{key:"componentDidUpdate",value:function(e){this.props.activeMarker!==e.activeMarker&&(this.props.activeMarker?this.openWindow():this.closeWindow())}},{key:"render",value:function(){return this.el?Object(y.createPortal)(this.props.children,this.el):null}},{key:"openWindow",value:function(){var e=this.props,t=e.map,n=e.activeMarker;this.infowindow.setLngLat(n.getPoint()).addTo(t)}},{key:"closeWindow",value:function(){this.infowindow.remove()}}]),t}(y.Component);E.defaultProps={unsetActiveMarker:function(){},activeMarker:null,map:null,mapboxgl:null};var C=E;var x=function(e){function t(){var e;return o()(this,t),e=u()(this,h()(t).apply(this,arguments)),v()(m()(e),"onMarkerClick",function(t){var n=e.props.onMarkerClick;e.setState({activeMarker:t}),n()}),v()(m()(e),"onMapClick",function(){e.setState({activeMarker:null})}),v()(m()(e),"clearCurrentMarker",function(){e.setState({activeMarker:null})}),v()(m()(e),"updateActiveMarker",function(t){var n=e.props.points,r=e.state.activeMarker.props.index,i=n.slice(0);Object(O.assign)(i[r],t),e.props.onSetPoints(i)}),v()(m()(e),"deleteActiveMarker",function(){var t=e.props.points,n=e.state.activeMarker.props.index,r=t.slice(0);r.splice(n,1),e.props.onSetPoints(r),e.setState({activeMarker:null})}),v()(m()(e),"sizeMap",function(){var t=e.state.map,n=e.mapRef.current,r=n.offsetWidth,i=.8*window.innerHeight,a=Math.min(.75*r,i);n.style.height=a+"px",t.resize(),e.setBoundsByMarkers()}),v()(m()(e),"setBoundsByMarkers",function(){var t=e.props,n=t.zoom,r=t.points,i=t.onSetZoom,a=e.state,o=a.map,s=a.activeMarker,c=a.mapboxgl,l=a.zoomControl,u=a.boundsSetProgrammatically;if(o&&r.length&&!s){var p=new c.LngLatBounds;if(r.forEach(function(e){p.extend([e.coordinates.longitude,e.coordinates.latitude])}),r.length>1)return o.fitBounds(p,{padding:{top:40,bottom:40,left:20,right:20}}),e.setState({boundsSetProgrammatically:!0}),void o.removeControl(l);if(o.setCenter(p.getCenter()),u){o.setZoom(12),i(12)}else o.setZoom(parseInt(n,10));o.addControl(l),e.setState({boundsSetProgrammatically:!1})}}),v()(m()(e),"scriptsLoaded",function(){var t=e.props,n=t.mapCenter,r=t.points;e.setState({loaded:!0}),r.length,e.initMap(n)}),e.state={map:null,fit_to_bounds:!1,loaded:!1,mapboxgl:null},e.mapRef=Object(y.createRef)(),e.debouncedSizeMap=Object(O.debounce)(e.sizeMap,250),e}return b()(t,e),c()(t,[{key:"render",value:function(){var e=this,t=this.props,n=t.points,r=t.admin,i=t.children,a=t.markerColor,o=this.state,s=o.map,c=o.activeMarker,l=o.mapboxgl,u=this.onMarkerClick,p=this.deleteActiveMarker,h=this.updateActiveMarker,d=Object(O.get)(c,"props.point")||{},m=d.title,f=d.caption,b=y.Children.map(i,function(e){if("AddPoint"===Object(O.get)(e,"props.tagName"))return e}),g=s&&l&&n.map(function(e,t){return Object(y.createElement)(w,{key:t,point:e,index:t,map:s,mapboxgl:l,markerColor:a,onClick:u})}),v=l&&Object(y.createElement)(C,{activeMarker:c,map:s,mapboxgl:l,unsetActiveMarker:function(){return e.setState({activeMarker:null})}},c&&r&&Object(y.createElement)(y.Fragment,null,Object(y.createElement)(k.TextControl,{label:Object(j.a)("Marker Title"),value:m,onChange:function(e){return h({title:e})}}),Object(y.createElement)(k.TextareaControl,{className:"wp-block-jetpack-map__marker-caption",label:Object(j.a)("Marker Caption"),value:f,rows:"2",tag:"textarea",onChange:function(e){return h({caption:e})}}),Object(y.createElement)(k.Button,{onClick:p,className:"wp-block-jetpack-map__delete-btn"},Object(y.createElement)(k.Dashicon,{icon:"trash",size:"15"})," ",Object(j.a)("Delete Marker"))),c&&!r&&Object(y.createElement)(y.Fragment,null,Object(y.createElement)("h3",null,m),Object(y.createElement)("p",null,f)));return Object(y.createElement)(y.Fragment,null,Object(y.createElement)("div",{className:"wp-block-jetpack-map__gm-container",ref:this.mapRef},g),v,b)}},{key:"componentDidMount",value:function(){this.props.apiKey&&this.loadMapLibraries()}},{key:"componentWillUnmount",value:function(){this.debouncedSizeMap.cancel()}},{key:"componentDidUpdate",value:function(e){var t=this.props,n=t.apiKey,r=t.children,i=t.points,a=t.mapStyle,o=t.mapDetails,s=this.state.map;n&&n.length>0&&n!==e.apiKey&&this.loadMapLibraries(),r!==e.children&&!1!==r&&this.clearCurrentMarker(),i!==e.points&&this.setBoundsByMarkers(),i.length!==e.points.length&&this.clearCurrentMarker(),a===e.mapStyle&&o===e.mapDetails||s.setStyle(this.getMapStyle())}},{key:"getMapStyle",value:function(){var e=this.props;return function(e,t){return{default:{details:"mapbox://styles/automattic/cjolkhmez0qdd2ro82dwog1in",no_details:"mapbox://styles/automattic/cjolkci3905d82soef4zlmkdo"},black_and_white:{details:"mapbox://styles/automattic/cjolkixvv0ty42spgt2k4j434",no_details:"mapbox://styles/automattic/cjolkgc540tvj2spgzzoq37k4"},satellite:{details:"mapbox://styles/mapbox/satellite-streets-v10",no_details:"mapbox://styles/mapbox/satellite-v9"},terrain:{details:"mapbox://styles/automattic/cjolkf8p405fh2soet2rdt96b",no_details:"mapbox://styles/automattic/cjolke6fz12ys2rpbpvgl12ha"}}[e][t?"details":"no_details"]}(e.mapStyle,e.mapDetails)}},{key:"getMapType",value:function(){switch(this.props.mapStyle){case"satellite":return"HYBRID";case"terrain":return"TERRAIN";case"black_and_white":default:return"ROADMAP"}}},{key:"loadMapLibraries",value:function(){var e=this,t=this.props.apiKey;Promise.all([n.e(9).then(n.t.bind(null,310,7)),n.e(9).then(n.t.bind(null,311,7))]).then(function(n){var r=i()(n,1)[0].default;r.accessToken=t,e.setState({mapboxgl:r},e.scriptsLoaded)})}},{key:"initMap",value:function(e){var t=this,n=this.state.mapboxgl,r=this.props,i=r.zoom,a=r.onMapLoaded,o=r.onError,s=r.admin,c=null;try{c=new n.Map({container:this.mapRef.current,style:this.getMapStyle(),center:this.googlePoint2Mapbox(e),zoom:parseInt(i,10),pitchWithRotate:!1,attributionControl:!1,dragRotate:!1})}catch(u){return void o("mapbox_error",u.message)}c.on("error",function(e){o("mapbox_error",e.error.message)});var l=new n.NavigationControl({showCompass:!1,showZoom:!0});c.on("zoomend",function(){t.props.onSetZoom(c.getZoom())}),c.getCanvas().addEventListener("click",this.onMapClick),this.setState({map:c,zoomControl:l},function(){t.debouncedSizeMap(),c.addControl(l),s||c.addControl(new n.FullscreenControl),t.mapRef.current.addEventListener("alignmentChanged",t.debouncedSizeMap),c.resize(),a(),t.setState({loaded:!0}),window.addEventListener("resize",t.debouncedSizeMap)})}},{key:"googlePoint2Mapbox",value:function(e){return[e.longitude?e.longitude:0,e.latitude?e.latitude:0]}}]),t}(y.Component);x.defaultProps={points:[],mapStyle:"default",zoom:13,onSetZoom:function(){},onMapLoaded:function(){},onMarkerClick:function(){},onError:function(){},markerColor:"red",apiKey:null,mapCenter:{}};t.a=x},function(e,t){e.exports=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4E\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/},function(e,t,n){"use strict";function r(){this.__rules__=[],this.__cache__=null}r.prototype.__find__=function(e){for(var t=0;t<this.__rules__.length;t++)if(this.__rules__[t].name===e)return t;return-1},r.prototype.__compile__=function(){var e=this,t=[""];e.__rules__.forEach(function(e){e.enabled&&e.alt.forEach(function(e){t.indexOf(e)<0&&t.push(e)})}),e.__cache__={},t.forEach(function(t){e.__cache__[t]=[],e.__rules__.forEach(function(n){n.enabled&&(t&&n.alt.indexOf(t)<0||e.__cache__[t].push(n.fn))})})},r.prototype.at=function(e,t,n){var r=this.__find__(e),i=n||{};if(-1===r)throw new Error("Parser rule not found: "+e);this.__rules__[r].fn=t,this.__rules__[r].alt=i.alt||[],this.__cache__=null},r.prototype.before=function(e,t,n,r){var i=this.__find__(e),a=r||{};if(-1===i)throw new Error("Parser rule not found: "+e);this.__rules__.splice(i,0,{name:t,enabled:!0,fn:n,alt:a.alt||[]}),this.__cache__=null},r.prototype.after=function(e,t,n,r){var i=this.__find__(e),a=r||{};if(-1===i)throw new Error("Parser rule not found: "+e);this.__rules__.splice(i+1,0,{name:t,enabled:!0,fn:n,alt:a.alt||[]}),this.__cache__=null},r.prototype.push=function(e,t,n){var r=n||{};this.__rules__.push({name:e,enabled:!0,fn:t,alt:r.alt||[]}),this.__cache__=null},r.prototype.enable=function(e,t){Array.isArray(e)||(e=[e]);var n=[];return e.forEach(function(e){var r=this.__find__(e);if(r<0){if(t)return;throw new Error("Rules manager: invalid rule name "+e)}this.__rules__[r].enabled=!0,n.push(e)},this),this.__cache__=null,n},r.prototype.enableOnly=function(e,t){Array.isArray(e)||(e=[e]),this.__rules__.forEach(function(e){e.enabled=!1}),this.enable(e,t)},r.prototype.disable=function(e,t){Array.isArray(e)||(e=[e]);var n=[];return e.forEach(function(e){var r=this.__find__(e);if(r<0){if(t)return;throw new Error("Rules manager: invalid rule name "+e)}this.__rules__[r].enabled=!1,n.push(e)},this),this.__cache__=null,n},r.prototype.getRules=function(e){return null===this.__cache__&&this.__compile__(),this.__cache__[e]||[]},e.exports=r},function(e,t,n){"use strict";function r(e,t,n){this.type=e,this.tag=t,this.attrs=null,this.map=null,this.nesting=n,this.level=0,this.children=null,this.content="",this.markup="",this.info="",this.meta=null,this.block=!1,this.hidden=!1}r.prototype.attrIndex=function(e){var t,n,r;if(!this.attrs)return-1;for(n=0,r=(t=this.attrs).length;n<r;n++)if(t[n][0]===e)return n;return-1},r.prototype.attrPush=function(e){this.attrs?this.attrs.push(e):this.attrs=[e]},r.prototype.attrSet=function(e,t){var n=this.attrIndex(e),r=[e,t];n<0?this.attrPush(r):this.attrs[n]=r},r.prototype.attrGet=function(e){var t=this.attrIndex(e),n=null;return t>=0&&(n=this.attrs[t][1]),n},r.prototype.attrJoin=function(e,t){var n=this.attrIndex(e);n<0?this.attrPush([e,t]):this.attrs[n][1]=this.attrs[n][1]+" "+t},e.exports=r},function(e,t){var n=Array.isArray;e.exports=n},function(e,t,n){var r=n(90),i=n(193),a="[object Symbol]";e.exports=function(e){return"symbol"==typeof e||i(e)&&r(e)==a}},function(e,t,n){var r=n(64).Symbol;e.exports=r},function(e,t,n){var r=n(190),i="object"==typeof self&&self&&self.Object===Object&&self,a=r||i||Function("return this")();e.exports=a},function(e,t,n){e.exports=function(){"use strict";var e=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)},t=m,n=s,r=function(e){return c(s(e))},i=c,a=d,o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^()])+)\\))?|\\(((?:\\\\.|[^()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function s(e){for(var t,n=[],r=0,i=0,a="";null!=(t=o.exec(e));){var s=t[0],c=t[1],l=t.index;if(a+=e.slice(i,l),i=l+s.length,c)a+=c[1];else{a&&(n.push(a),a="");var p=t[2],h=t[3],d=t[4],m=t[5],f=t[6],b=t[7],g="+"===f||"*"===f,v="?"===f||"*"===f,y=p||"/",j=d||m||(b?".*":"[^"+y+"]+?");n.push({name:h||r++,prefix:p||"",delimiter:y,optional:v,repeat:g,pattern:u(j)})}}return i<e.length&&(a+=e.substr(i)),a&&n.push(a),n}function c(t){for(var n=new Array(t.length),r=0;r<t.length;r++)"object"==typeof t[r]&&(n[r]=new RegExp("^"+t[r].pattern+"$"));return function(r){for(var i="",a=r||{},o=0;o<t.length;o++){var s=t[o];if("string"!=typeof s){var c,l=a[s.name];if(null==l){if(s.optional)continue;throw new TypeError('Expected "'+s.name+'" to be defined')}if(e(l)){if(!s.repeat)throw new TypeError('Expected "'+s.name+'" to not repeat, but received "'+l+'"');if(0===l.length){if(s.optional)continue;throw new TypeError('Expected "'+s.name+'" to not be empty')}for(var u=0;u<l.length;u++){if(c=encodeURIComponent(l[u]),!n[o].test(c))throw new TypeError('Expected all "'+s.name+'" to match "'+s.pattern+'", but received "'+c+'"');i+=(0===u?s.prefix:s.delimiter)+c}}else{if(c=encodeURIComponent(l),!n[o].test(c))throw new TypeError('Expected "'+s.name+'" to match "'+s.pattern+'", but received "'+c+'"');i+=s.prefix+c}}else i+=s}return i}}function l(e){return e.replace(/([.+*?=^!:${}()[\]|\/])/g,"\\$1")}function u(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function p(e,t){return e.keys=t,e}function h(e){return e.sensitive?"":"i"}function d(e,t){for(var n=(t=t||{}).strict,r=!1!==t.end,i="",a=e[e.length-1],o="string"==typeof a&&/\/$/.test(a),s=0;s<e.length;s++){var c=e[s];if("string"==typeof c)i+=l(c);else{var u=l(c.prefix),p=c.pattern;c.repeat&&(p+="(?:"+u+p+")*"),p=c.optional?u?"(?:"+u+"("+p+"))?":"("+p+")?":u+"("+p+")",i+=p}}return n||(i=(o?i.slice(0,-2):i)+"(?:\\/(?=$))?"),i+=r?"$":n&&o?"":"(?=\\/|$)",new RegExp("^"+i,h(t))}function m(t,n,r){return e(n=n||[])?r||(r={}):(r=n,n=[]),t instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,pattern:null});return p(e,t)}(t,n):e(t)?function(e,t,n){for(var r=[],i=0;i<e.length;i++)r.push(m(e[i],t,n).source);return p(new RegExp("(?:"+r.join("|")+")",h(n)),t)}(t,n,r):function(e,t,n){for(var r=s(e),i=d(r,n),a=0;a<r.length;a++)"string"!=typeof r[a]&&t.push(r[a]);return p(i,t)}(t,n,r)}t.parse=n,t.compile=r,t.tokensToFunction=i,t.tokensToRegExp=a;var f,b="undefined"!=typeof document,g="undefined"!=typeof window,v="undefined"!=typeof history,y="undefined"!=typeof process,j=b&&document.ontouchstart?"touchstart":"click",O=g&&!(!window.history.location&&!window.location);function k(){this.callbacks=[],this.exits=[],this.current="",this.len=0,this._decodeURLComponents=!0,this._base="",this._strict=!1,this._running=!1,this._hashbang=!1,this.clickHandler=this.clickHandler.bind(this),this._onpopstate=this._onpopstate.bind(this)}function _(e,t){if("function"==typeof e)return _.call(this,"*",e);if("function"==typeof t)for(var n=new E(e,null,this),r=1;r<arguments.length;++r)this.callbacks.push(n.middleware(arguments[r]));else"string"==typeof e?this["string"==typeof t?"redirect":"show"](e,t):this.start(e)}function w(e,t,n){var r=this.page=n||_,i=r._window,a=r._hashbang,o=r._getBase();"/"===e[0]&&0!==e.indexOf(o)&&(e=o+(a?"#!":"")+e);var s=e.indexOf("?");this.canonicalPath=e;var c=new RegExp("^"+o.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1"));if(this.path=e.replace(c,"")||"/",a&&(this.path=this.path.replace("#!","")||"/"),this.title=b&&i.document.title,this.state=t||{},this.state.path=e,this.querystring=~s?r._decodeURLEncodedURIComponent(e.slice(s+1)):"",this.pathname=r._decodeURLEncodedURIComponent(~s?e.slice(0,s):e),this.params={},this.hash="",!a){if(!~this.path.indexOf("#"))return;var l=this.path.split("#");this.path=this.pathname=l[0],this.hash=r._decodeURLEncodedURIComponent(l[1])||"",this.querystring=this.querystring.split("#")[0]}}function E(e,n,r){this.page=r||C;var i=n||{};i.strict=i.strict||r._strict,this.path="*"===e?"(.*)":e,this.method="GET",this.regexp=t(this.path,this.keys=[],i)}k.prototype.configure=function(e){var t=e||{};this._window=t.window||g&&window,this._decodeURLComponents=!1!==t.decodeURLComponents,this._popstate=!1!==t.popstate&&g,this._click=!1!==t.click&&b,this._hashbang=!!t.hashbang;var n=this._window;this._popstate?n.addEventListener("popstate",this._onpopstate,!1):g&&n.removeEventListener("popstate",this._onpopstate,!1),this._click?n.document.addEventListener(j,this.clickHandler,!1):b&&n.document.removeEventListener(j,this.clickHandler,!1),this._hashbang&&g&&!v?n.addEventListener("hashchange",this._onpopstate,!1):g&&n.removeEventListener("hashchange",this._onpopstate,!1)},k.prototype.base=function(e){if(0===arguments.length)return this._base;this._base=e},k.prototype._getBase=function(){var e=this._base;if(e)return e;var t=g&&this._window&&this._window.location;return g&&this._hashbang&&t&&"file:"===t.protocol&&(e=t.pathname),e},k.prototype.strict=function(e){if(0===arguments.length)return this._strict;this._strict=e},k.prototype.start=function(e){var t=e||{};if(this.configure(t),!1!==t.dispatch){var n;if(this._running=!0,O){var r=this._window,i=r.location;n=this._hashbang&&~i.hash.indexOf("#!")?i.hash.substr(2)+i.search:this._hashbang?i.search+i.hash:i.pathname+i.search+i.hash}this.replace(n,null,!0,t.dispatch)}},k.prototype.stop=function(){if(this._running){this.current="",this.len=0,this._running=!1;var e=this._window;this._click&&e.document.removeEventListener(j,this.clickHandler,!1),g&&e.removeEventListener("popstate",this._onpopstate,!1),g&&e.removeEventListener("hashchange",this._onpopstate,!1)}},k.prototype.show=function(e,t,n,r){var i=new w(e,t,this),a=this.prevContext;return this.prevContext=i,this.current=i.path,!1!==n&&this.dispatch(i,a),!1!==i.handled&&!1!==r&&i.pushState(),i},k.prototype.back=function(e,t){var n=this;if(this.len>0){var r=this._window;v&&r.history.back(),this.len--}else e?setTimeout(function(){n.show(e,t)}):setTimeout(function(){n.show(n._getBase(),t)})},k.prototype.redirect=function(e,t){var n=this;"string"==typeof e&&"string"==typeof t&&_.call(this,e,function(e){setTimeout(function(){n.replace(t)},0)}),"string"==typeof e&&void 0===t&&setTimeout(function(){n.replace(e)},0)},k.prototype.replace=function(e,t,n,r){var i=new w(e,t,this),a=this.prevContext;return this.prevContext=i,this.current=i.path,i.init=n,i.save(),!1!==r&&this.dispatch(i,a),i},k.prototype.dispatch=function(e,t){var n=0,r=0,i=this;function a(){var t=i.callbacks[n++];if(e.path===i.current)return t?void t(e,a):function(e){if(!e.handled){var t=this._window;(this._hashbang?O&&this._getBase()+t.location.hash.replace("#!",""):O&&t.location.pathname+t.location.search)!==e.canonicalPath&&(this.stop(),e.handled=!1,O&&(t.location.href=e.canonicalPath))}}.call(i,e);e.handled=!1}t?function e(){var n=i.exits[r++];if(!n)return a();n(t,e)}():a()},k.prototype.exit=function(e,t){if("function"==typeof e)return this.exit("*",e);for(var n=new E(e,null,this),r=1;r<arguments.length;++r)this.exits.push(n.middleware(arguments[r]))},k.prototype.clickHandler=function(e){if(1===this._which(e)&&!(e.metaKey||e.ctrlKey||e.shiftKey||e.defaultPrevented)){var t=e.target,n=e.path||(e.composedPath?e.composedPath():null);if(n)for(var r=0;r<n.length;r++)if(n[r].nodeName&&"A"===n[r].nodeName.toUpperCase()&&n[r].href){t=n[r];break}for(;t&&"A"!==t.nodeName.toUpperCase();)t=t.parentNode;if(t&&"A"===t.nodeName.toUpperCase()){var i="object"==typeof t.href&&"SVGAnimatedString"===t.href.constructor.name;if(!t.hasAttribute("download")&&"external"!==t.getAttribute("rel")){var a=t.getAttribute("href");if((this._hashbang||!this._samePath(t)||!t.hash&&"#"!==a)&&!(a&&a.indexOf("mailto:")>-1)&&(i?!t.target.baseVal:!t.target)&&(i||this.sameOrigin(t.href))){var o=i?t.href.baseVal:t.pathname+t.search+(t.hash||"");o="/"!==o[0]?"/"+o:o,y&&o.match(/^\/[a-zA-Z]:\//)&&(o=o.replace(/^\/[a-zA-Z]:\//,"/"));var s=o,c=this._getBase();0===o.indexOf(c)&&(o=o.substr(c.length)),this._hashbang&&(o=o.replace("#!","")),(!c||s!==o||O&&"file:"===this._window.location.protocol)&&(e.preventDefault(),this.show(s))}}}}},k.prototype._onpopstate=(f=!1,g?(b&&"complete"===document.readyState?f=!0:window.addEventListener("load",function(){setTimeout(function(){f=!0},0)}),function(e){if(f)if(e.state){var t=e.state.path;this.replace(t,e.state)}else if(O){var n=this._window.location;this.show(n.pathname+n.search+n.hash,void 0,void 0,!1)}}):function(){}),k.prototype._which=function(e){return null==(e=e||g&&this._window.event).which?e.button:e.which},k.prototype._toURL=function(e){var t=this._window;if("function"==typeof URL&&O)return new URL(e,t.location.toString());if(b){var n=t.document.createElement("a");return n.href=e,n}},k.prototype.sameOrigin=function(e){if(!e||!O)return!1;var t=this._toURL(e),n=this._window,r=n.location;return r.protocol===t.protocol&&r.hostname===t.hostname&&r.port===t.port},k.prototype._samePath=function(e){if(!O)return!1;var t=this._window,n=t.location;return e.pathname===n.pathname&&e.search===n.search},k.prototype._decodeURLEncodedURIComponent=function(e){return"string"!=typeof e?e:this._decodeURLComponents?decodeURIComponent(e.replace(/\+/g," ")):e},w.prototype.pushState=function(){var e=this.page,t=e._window,n=e._hashbang;e.len++,v&&t.history.pushState(this.state,this.title,n&&"/"!==this.path?"#!"+this.path:this.canonicalPath)},w.prototype.save=function(){var e=this.page;v&&e._window.history.replaceState(this.state,this.title,e._hashbang&&"/"!==this.path?"#!"+this.path:this.canonicalPath)},E.prototype.middleware=function(e){var t=this;return function(n,r){if(t.match(n.path,n.params))return e(n,r);r()}},E.prototype.match=function(e,t){var n=this.keys,r=e.indexOf("?"),i=~r?e.slice(0,r):e,a=this.regexp.exec(decodeURIComponent(i));if(!a)return!1;for(var o=1,s=a.length;o<s;++o){var c=n[o-1],l=this.page._decodeURLEncodedURIComponent(a[o]);void 0===l&&hasOwnProperty.call(t,c.name)||(t[c.name]=l)}return!0};var C=function e(){var t=new k;function n(){return _.apply(t,arguments)}return n.callbacks=t.callbacks,n.exits=t.exits,n.base=t.base.bind(t),n.strict=t.strict.bind(t),n.start=t.start.bind(t),n.stop=t.stop.bind(t),n.show=t.show.bind(t),n.back=t.back.bind(t),n.redirect=t.redirect.bind(t),n.replace=t.replace.bind(t),n.dispatch=t.dispatch.bind(t),n.exit=t.exit.bind(t),n.configure=t.configure.bind(t),n.sameOrigin=t.sameOrigin.bind(t),n.clickHandler=t.clickHandler.bind(t),n.create=e,Object.defineProperty(n,"len",{get:function(){return t.len},set:function(e){t.len=e}}),Object.defineProperty(n,"current",{get:function(){return t.current},set:function(e){t.current=e}}),n.Context=w,n.Route=E,n}(),x=C,S=C;return x.default=S,x}()},function(e,t,n){"use strict";var r=n(228),i=n(229);function a(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}t.parse=y,t.resolve=function(e,t){return y(e,!1,!0).resolve(t)},t.resolveObject=function(e,t){return e?y(e,!1,!0).resolveObject(t):t},t.format=function(e){i.isString(e)&&(e=y(e));return e instanceof a?e.format():a.prototype.format.call(e)},t.Url=a;var o=/^([a-z0-9.+-]+:)/i,s=/:[0-9]*$/,c=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,l=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),u=["'"].concat(l),p=["%","/","?",";","#"].concat(u),h=["/","?","#"],d=/^[+a-z0-9A-Z_-]{0,63}$/,m=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,f={javascript:!0,"javascript:":!0},b={javascript:!0,"javascript:":!0},g={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},v=n(230);function y(e,t,n){if(e&&i.isObject(e)&&e instanceof a)return e;var r=new a;return r.parse(e,t,n),r}a.prototype.parse=function(e,t,n){if(!i.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var a=e.indexOf("?"),s=-1!==a&&a<e.indexOf("#")?"?":"#",l=e.split(s);l[0]=l[0].replace(/\\/g,"/");var y=e=l.join(s);if(y=y.trim(),!n&&1===e.split("#").length){var j=c.exec(y);if(j)return this.path=y,this.href=y,this.pathname=j[1],j[2]?(this.search=j[2],this.query=t?v.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search="",this.query={}),this}var O=o.exec(y);if(O){var k=(O=O[0]).toLowerCase();this.protocol=k,y=y.substr(O.length)}if(n||O||y.match(/^\/\/[^@\/]+@[^@\/]+/)){var _="//"===y.substr(0,2);!_||O&&b[O]||(y=y.substr(2),this.slashes=!0)}if(!b[O]&&(_||O&&!g[O])){for(var w,E,C=-1,x=0;x<h.length;x++){-1!==(S=y.indexOf(h[x]))&&(-1===C||S<C)&&(C=S)}-1!==(E=-1===C?y.lastIndexOf("@"):y.lastIndexOf("@",C))&&(w=y.slice(0,E),y=y.slice(E+1),this.auth=decodeURIComponent(w)),C=-1;for(x=0;x<p.length;x++){var S;-1!==(S=y.indexOf(p[x]))&&(-1===C||S<C)&&(C=S)}-1===C&&(C=y.length),this.host=y.slice(0,C),y=y.slice(C),this.parseHost(),this.hostname=this.hostname||"";var A="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!A)for(var M=this.hostname.split(/\./),T=(x=0,M.length);x<T;x++){var z=M[x];if(z&&!z.match(d)){for(var D="",N=0,F=z.length;N<F;N++)z.charCodeAt(N)>127?D+="x":D+=z[N];if(!D.match(d)){var P=M.slice(0,x),R=M.slice(x+1),I=z.match(m);I&&(P.push(I[1]),R.unshift(I[2])),R.length&&(y="/"+R.join(".")+y),this.hostname=P.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),A||(this.hostname=r.toASCII(this.hostname));var L=this.port?":"+this.port:"",B=this.hostname||"";this.host=B+L,this.href+=this.host,A&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==y[0]&&(y="/"+y))}if(!f[k])for(x=0,T=u.length;x<T;x++){var q=u[x];if(-1!==y.indexOf(q)){var V=encodeURIComponent(q);V===q&&(V=escape(q)),y=y.split(q).join(V)}}var H=y.indexOf("#");-1!==H&&(this.hash=y.substr(H),y=y.slice(0,H));var U=y.indexOf("?");if(-1!==U?(this.search=y.substr(U),this.query=y.substr(U+1),t&&(this.query=v.parse(this.query)),y=y.slice(0,U)):t&&(this.search="",this.query={}),y&&(this.pathname=y),g[k]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){L=this.pathname||"";var G=this.search||"";this.path=L+G}return this.href=this.format(),this},a.prototype.format=function(){var e=this.auth||"";e&&(e=(e=encodeURIComponent(e)).replace(/%3A/i,":"),e+="@");var t=this.protocol||"",n=this.pathname||"",r=this.hash||"",a=!1,o="";this.host?a=e+this.host:this.hostname&&(a=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(a+=":"+this.port)),this.query&&i.isObject(this.query)&&Object.keys(this.query).length&&(o=v.stringify(this.query));var s=this.search||o&&"?"+o||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||g[t])&&!1!==a?(a="//"+(a||""),n&&"/"!==n.charAt(0)&&(n="/"+n)):a||(a=""),r&&"#"!==r.charAt(0)&&(r="#"+r),s&&"?"!==s.charAt(0)&&(s="?"+s),t+a+(n=n.replace(/[?#]/g,function(e){return encodeURIComponent(e)}))+(s=s.replace("#","%23"))+r},a.prototype.resolve=function(e){return this.resolveObject(y(e,!1,!0)).format()},a.prototype.resolveObject=function(e){if(i.isString(e)){var t=new a;t.parse(e,!1,!0),e=t}for(var n=new a,r=Object.keys(this),o=0;o<r.length;o++){var s=r[o];n[s]=this[s]}if(n.hash=e.hash,""===e.href)return n.href=n.format(),n;if(e.slashes&&!e.protocol){for(var c=Object.keys(e),l=0;l<c.length;l++){var u=c[l];"protocol"!==u&&(n[u]=e[u])}return g[n.protocol]&&n.hostname&&!n.pathname&&(n.path=n.pathname="/"),n.href=n.format(),n}if(e.protocol&&e.protocol!==n.protocol){if(!g[e.protocol]){for(var p=Object.keys(e),h=0;h<p.length;h++){var d=p[h];n[d]=e[d]}return n.href=n.format(),n}if(n.protocol=e.protocol,e.host||b[e.protocol])n.pathname=e.pathname;else{for(var m=(e.pathname||"").split("/");m.length&&!(e.host=m.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==m[0]&&m.unshift(""),m.length<2&&m.unshift(""),n.pathname=m.join("/")}if(n.search=e.search,n.query=e.query,n.host=e.host||"",n.auth=e.auth,n.hostname=e.hostname||e.host,n.port=e.port,n.pathname||n.search){var f=n.pathname||"",v=n.search||"";n.path=f+v}return n.slashes=n.slashes||e.slashes,n.href=n.format(),n}var y=n.pathname&&"/"===n.pathname.charAt(0),j=e.host||e.pathname&&"/"===e.pathname.charAt(0),O=j||y||n.host&&e.pathname,k=O,_=n.pathname&&n.pathname.split("/")||[],w=(m=e.pathname&&e.pathname.split("/")||[],n.protocol&&!g[n.protocol]);if(w&&(n.hostname="",n.port=null,n.host&&(""===_[0]?_[0]=n.host:_.unshift(n.host)),n.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===m[0]?m[0]=e.host:m.unshift(e.host)),e.host=null),O=O&&(""===m[0]||""===_[0])),j)n.host=e.host||""===e.host?e.host:n.host,n.hostname=e.hostname||""===e.hostname?e.hostname:n.hostname,n.search=e.search,n.query=e.query,_=m;else if(m.length)_||(_=[]),_.pop(),_=_.concat(m),n.search=e.search,n.query=e.query;else if(!i.isNullOrUndefined(e.search)){if(w)n.hostname=n.host=_.shift(),(A=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=A.shift(),n.host=n.hostname=A.shift());return n.search=e.search,n.query=e.query,i.isNull(n.pathname)&&i.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n}if(!_.length)return n.pathname=null,n.search?n.path="/"+n.search:n.path=null,n.href=n.format(),n;for(var E=_.slice(-1)[0],C=(n.host||e.host||_.length>1)&&("."===E||".."===E)||""===E,x=0,S=_.length;S>=0;S--)"."===(E=_[S])?_.splice(S,1):".."===E?(_.splice(S,1),x++):x&&(_.splice(S,1),x--);if(!O&&!k)for(;x--;x)_.unshift("..");!O||""===_[0]||_[0]&&"/"===_[0].charAt(0)||_.unshift(""),C&&"/"!==_.join("/").substr(-1)&&_.push("");var A,M=""===_[0]||_[0]&&"/"===_[0].charAt(0);w&&(n.hostname=n.host=M?"":_.length?_.shift():"",(A=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=A.shift(),n.host=n.hostname=A.shift()));return(O=O||n.host&&_.length)&&!M&&_.unshift(""),_.length?n.pathname=_.join("/"):(n.pathname=null,n.path=null),i.isNull(n.pathname)&&i.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},a.prototype.parseHost=function(){var e=this.host,t=s.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},function(e,t){e.exports=function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}},function(e,t){e.exports=function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}},function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}},function(e,t){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(t){return"function"==typeof Symbol&&"symbol"===n(Symbol.iterator)?e.exports=r=function(e){return n(e)}:e.exports=r=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":n(e)},r(t)}e.exports=r},function(e,t){function n(t,r){return e.exports=n=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},n(t,r)}e.exports=n},function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){"use strict";e.exports=n(131)},function(e,t,n){"use strict";e.exports.encode=n(132),e.exports.decode=n(133),e.exports.format=n(134),e.exports.parse=n(135)},function(e,t){e.exports=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/},function(e,t){e.exports=/[\0-\x1F\x7F-\x9F]/},function(e,t){e.exports=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/},function(e,t,n){"use strict";var r="<[A-Za-z][A-Za-z0-9\\-]*(?:\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\s*=\\s*(?:[^\"'=<>`\\x00-\\x20]+|'[^']*'|\"[^\"]*\"))?)*\\s*\\/?>",i="<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>",a=new RegExp("^(?:"+r+"|"+i+"|\x3c!----\x3e|\x3c!--(?:-?[^>-])(?:-?[^-])*--\x3e|<[?].*?[?]>|<![A-Z]+\\s+[^>]*>|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>)"),o=new RegExp("^(?:"+r+"|"+i+")");e.exports.HTML_TAG_RE=a,e.exports.HTML_OPEN_CLOSE_TAG_RE=o},function(e,t,n){"use strict";e.exports.tokenize=function(e,t){var n,r,i,a,o=e.pos,s=e.src.charCodeAt(o);if(t)return!1;if(126!==s)return!1;if(i=(r=e.scanDelims(e.pos,!0)).length,a=String.fromCharCode(s),i<2)return!1;for(i%2&&(e.push("text","",0).content=a,i--),n=0;n<i;n+=2)e.push("text","",0).content=a+a,e.delimiters.push({marker:s,jump:n,token:e.tokens.length-1,level:e.level,end:-1,open:r.can_open,close:r.can_close});return e.pos+=r.length,!0},e.exports.postProcess=function(e){var t,n,r,i,a,o=[],s=e.delimiters,c=e.delimiters.length;for(t=0;t<c;t++)126===(r=s[t]).marker&&-1!==r.end&&(i=s[r.end],(a=e.tokens[r.token]).type="s_open",a.tag="s",a.nesting=1,a.markup="~~",a.content="",(a=e.tokens[i.token]).type="s_close",a.tag="s",a.nesting=-1,a.markup="~~",a.content="","text"===e.tokens[i.token-1].type&&"~"===e.tokens[i.token-1].content&&o.push(i.token-1));for(;o.length;){for(n=(t=o.pop())+1;n<e.tokens.length&&"s_close"===e.tokens[n].type;)n++;t!==--n&&(a=e.tokens[n],e.tokens[n]=e.tokens[t],e.tokens[t]=a)}}},function(e,t,n){"use strict";e.exports.tokenize=function(e,t){var n,r,i=e.pos,a=e.src.charCodeAt(i);if(t)return!1;if(95!==a&&42!==a)return!1;for(r=e.scanDelims(e.pos,42===a),n=0;n<r.length;n++)e.push("text","",0).content=String.fromCharCode(a),e.delimiters.push({marker:a,length:r.length,jump:n,token:e.tokens.length-1,level:e.level,end:-1,open:r.can_open,close:r.can_close});return e.pos+=r.length,!0},e.exports.postProcess=function(e){var t,n,r,i,a,o,s=e.delimiters;for(t=e.delimiters.length-1;t>=0;t--)95!==(n=s[t]).marker&&42!==n.marker||-1!==n.end&&(r=s[n.end],o=t>0&&s[t-1].end===n.end+1&&s[t-1].token===n.token-1&&s[n.end+1].token===r.token+1&&s[t-1].marker===n.marker,a=String.fromCharCode(n.marker),(i=e.tokens[n.token]).type=o?"strong_open":"em_open",i.tag=o?"strong":"em",i.nesting=1,i.markup=o?a+a:a,i.content="",(i=e.tokens[r.token]).type=o?"strong_close":"em_close",i.tag=o?"strong":"em",i.nesting=-1,i.markup=o?a+a:a,i.content="",o&&(e.tokens[s[t-1].token].content="",e.tokens[s[n.end+1].token].content="",t--))}},function(e,t,n){(function(e){var r;/*! https://mths.be/punycode v1.3.2 by @mathias */!function(i){t&&t.nodeType,e&&e.nodeType;var a="object"==typeof window&&window;a.global!==a&&a.window!==a&&a.self;var o,s=2147483647,c=36,l=1,u=26,p=38,h=700,d=72,m=128,f="-",b=/^xn--/,g=/[^\x20-\x7E]/,v=/[\x2E\u3002\uFF0E\uFF61]/g,y={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},j=c-l,O=Math.floor,k=String.fromCharCode;function _(e){throw RangeError(y[e])}function w(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}function E(e,t){var n=e.split("@"),r="";return n.length>1&&(r=n[0]+"@",e=n[1]),r+w((e=e.replace(v,".")).split("."),t).join(".")}function C(e){for(var t,n,r=[],i=0,a=e.length;i<a;)(t=e.charCodeAt(i++))>=55296&&t<=56319&&i<a?56320==(64512&(n=e.charCodeAt(i++)))?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),i--):r.push(t);return r}function x(e){return w(e,function(e){var t="";return e>65535&&(t+=k((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=k(e)}).join("")}function S(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function A(e,t,n){var r=0;for(e=n?O(e/h):e>>1,e+=O(e/t);e>j*u>>1;r+=c)e=O(e/j);return O(r+(j+1)*e/(e+p))}function M(e){var t,n,r,i,a,o,p,h,b,g,v,y=[],j=e.length,k=0,w=m,E=d;for((n=e.lastIndexOf(f))<0&&(n=0),r=0;r<n;++r)e.charCodeAt(r)>=128&&_("not-basic"),y.push(e.charCodeAt(r));for(i=n>0?n+1:0;i<j;){for(a=k,o=1,p=c;i>=j&&_("invalid-input"),((h=(v=e.charCodeAt(i++))-48<10?v-22:v-65<26?v-65:v-97<26?v-97:c)>=c||h>O((s-k)/o))&&_("overflow"),k+=h*o,!(h<(b=p<=E?l:p>=E+u?u:p-E));p+=c)o>O(s/(g=c-b))&&_("overflow"),o*=g;E=A(k-a,t=y.length+1,0==a),O(k/t)>s-w&&_("overflow"),w+=O(k/t),k%=t,y.splice(k++,0,w)}return x(y)}function T(e){var t,n,r,i,a,o,p,h,b,g,v,y,j,w,E,x=[];for(y=(e=C(e)).length,t=m,n=0,a=d,o=0;o<y;++o)(v=e[o])<128&&x.push(k(v));for(r=i=x.length,i&&x.push(f);r<y;){for(p=s,o=0;o<y;++o)(v=e[o])>=t&&v<p&&(p=v);for(p-t>O((s-n)/(j=r+1))&&_("overflow"),n+=(p-t)*j,t=p,o=0;o<y;++o)if((v=e[o])<t&&++n>s&&_("overflow"),v==t){for(h=n,b=c;!(h<(g=b<=a?l:b>=a+u?u:b-a));b+=c)E=h-g,w=c-g,x.push(k(S(g+E%w,0))),h=O(E/w);x.push(k(S(h,0))),a=A(n,j,r==i),n=0,++r}++n,++t}return x.join("")}o={version:"1.3.2",ucs2:{decode:C,encode:x},decode:M,encode:T,toASCII:function(e){return E(e,function(e){return g.test(e)?"xn--"+T(e):e})},toUnicode:function(e){return E(e,function(e){return b.test(e)?M(e.slice(4).toLowerCase()):e})}},void 0===(r=function(){return o}.call(t,n,t,e))||(e.exports=r)}()}).call(this,n(89)(e))},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){var r=n(63),i=n(191),a=n(192),o="[object Null]",s="[object Undefined]",c=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?s:o:c&&c in Object(e)?i(e):a(e)}},function(e,t,n){var r=n(201),i=n(206);e.exports=function(e,t){var n=i(e,t);return r(n)?n:void 0}},function(e,t){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},function(e,t,n){},,function(e){e.exports={production:["business-hours","contact-form","contact-info","gif","mailchimp","map","markdown","publicize","related-posts","repeat-visitor","shortlinks","simple-payments","slideshow","subscriptions","tiled-gallery","videopress","wordads"],beta:["seo","vr"]}},function(e,t,n){"use strict";e.exports=n(130)},function(e,t,n){"use strict";e.exports=function(e){var t,n={};return function e(t,n){var r;if(Array.isArray(n))for(r=0;r<n.length;r++)e(t,n[r]);else for(r in n)t[r]=(t[r]||[]).concat(n[r])}(n,e),(t=function(e){return function(t){return function(r){var i,a,o=n[r.type],s=t(r);if(o)for(i=0;i<o.length;i++)(a=o[i](r,e))&&e.dispatch(a);return s}}}).effects=n,t}},function(e,t,n){var r=n(187);e.exports=function(e,t,n){var i=null==e?void 0:r(e,t);return void 0===i?n:i}},function(e,t,n){e.exports=n.p+"images/paypal-button-1e53882e702881f8dfd958c141e65383.png"},function(e,t,n){e.exports=n.p+"images/paypal-button-2x-fe4d34770a47484f401cecbb892f8456.png"},function(e,t){e.exports=wp.tokenList},function(e,t){e.exports=wp.hooks},,function(e,t,n){},,function(e,t,n){},,function(e,t){e.exports=function(e,t){if(null==e)return{};var n,r,i={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(i[n]=e[n]);return i}},function(e,t,n){"use strict";e.exports=n(110)},function(e,t,n){"use strict";
-/** @license React v16.8.3
- * react.production.min.js
- *
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */var r=n(111),i="function"==typeof Symbol&&Symbol.for,a=i?Symbol.for("react.element"):60103,o=i?Symbol.for("react.portal"):60106,s=i?Symbol.for("react.fragment"):60107,c=i?Symbol.for("react.strict_mode"):60108,l=i?Symbol.for("react.profiler"):60114,u=i?Symbol.for("react.provider"):60109,p=i?Symbol.for("react.context"):60110,h=i?Symbol.for("react.concurrent_mode"):60111,d=i?Symbol.for("react.forward_ref"):60112,m=i?Symbol.for("react.suspense"):60113,f=i?Symbol.for("react.memo"):60115,b=i?Symbol.for("react.lazy"):60116,g="function"==typeof Symbol&&Symbol.iterator;function v(e){for(var t=arguments.length-1,n="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=0;r<t;r++)n+="&args[]="+encodeURIComponent(arguments[r+1]);!function(e,t,n,r,i,a,o,s){if(!e){if(e=void 0,void 0===t)e=Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,i,a,o,s],l=0;(e=Error(t.replace(/%s/g,function(){return c[l++]}))).name="Invariant Violation"}throw e.framesToPop=1,e}}(!1,"Minified React error #"+e+"; visit %s for the full message or use the non-minified dev environment for full errors and additional helpful warnings. ",n)}var y={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},j={};function O(e,t,n){this.props=e,this.context=t,this.refs=j,this.updater=n||y}function k(){}function _(e,t,n){this.props=e,this.context=t,this.refs=j,this.updater=n||y}O.prototype.isReactComponent={},O.prototype.setState=function(e,t){"object"!=typeof e&&"function"!=typeof e&&null!=e&&v("85"),this.updater.enqueueSetState(this,e,t,"setState")},O.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},k.prototype=O.prototype;var w=_.prototype=new k;w.constructor=_,r(w,O.prototype),w.isPureReactComponent=!0;var E={current:null},C={current:null},x=Object.prototype.hasOwnProperty,S={key:!0,ref:!0,__self:!0,__source:!0};function A(e,t,n){var r=void 0,i={},o=null,s=null;if(null!=t)for(r in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(o=""+t.key),t)x.call(t,r)&&!S.hasOwnProperty(r)&&(i[r]=t[r]);var c=arguments.length-2;if(1===c)i.children=n;else if(1<c){for(var l=Array(c),u=0;u<c;u++)l[u]=arguments[u+2];i.children=l}if(e&&e.defaultProps)for(r in c=e.defaultProps)void 0===i[r]&&(i[r]=c[r]);return{$$typeof:a,type:e,key:o,ref:s,props:i,_owner:C.current}}function M(e){return"object"==typeof e&&null!==e&&e.$$typeof===a}var T=/\/+/g,z=[];function D(e,t,n,r){if(z.length){var i=z.pop();return i.result=e,i.keyPrefix=t,i.func=n,i.context=r,i.count=0,i}return{result:e,keyPrefix:t,func:n,context:r,count:0}}function N(e){e.result=null,e.keyPrefix=null,e.func=null,e.context=null,e.count=0,10>z.length&&z.push(e)}function F(e,t,n){return null==e?0:function e(t,n,r,i){var s=typeof t;"undefined"!==s&&"boolean"!==s||(t=null);var c=!1;if(null===t)c=!0;else switch(s){case"string":case"number":c=!0;break;case"object":switch(t.$$typeof){case a:case o:c=!0}}if(c)return r(i,t,""===n?"."+P(t,0):n),1;if(c=0,n=""===n?".":n+":",Array.isArray(t))for(var l=0;l<t.length;l++){var u=n+P(s=t[l],l);c+=e(s,u,r,i)}else if(u=null===t||"object"!=typeof t?null:"function"==typeof(u=g&&t[g]||t["@@iterator"])?u:null,"function"==typeof u)for(t=u.call(t),l=0;!(s=t.next()).done;)c+=e(s=s.value,u=n+P(s,l++),r,i);else"object"===s&&v("31","[object Object]"==(r=""+t)?"object with keys {"+Object.keys(t).join(", ")+"}":r,"");return c}(e,"",t,n)}function P(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+(""+e).replace(/[=:]/g,function(e){return t[e]})}(e.key):t.toString(36)}function R(e,t){e.func.call(e.context,t,e.count++)}function I(e,t,n){var r=e.result,i=e.keyPrefix;e=e.func.call(e.context,t,e.count++),Array.isArray(e)?L(e,r,n,function(e){return e}):null!=e&&(M(e)&&(e=function(e,t){return{$$typeof:a,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(e,i+(!e.key||t&&t.key===e.key?"":(""+e.key).replace(T,"$&/")+"/")+n)),r.push(e))}function L(e,t,n,r,i){var a="";null!=n&&(a=(""+n).replace(T,"$&/")+"/"),F(e,I,t=D(t,a,r,i)),N(t)}function B(){var e=E.current;return null===e&&v("307"),e}var q={Children:{map:function(e,t,n){if(null==e)return e;var r=[];return L(e,r,null,t,n),r},forEach:function(e,t,n){if(null==e)return e;F(e,R,t=D(null,null,t,n)),N(t)},count:function(e){return F(e,function(){return null},null)},toArray:function(e){var t=[];return L(e,t,null,function(e){return e}),t},only:function(e){return M(e)||v("143"),e}},createRef:function(){return{current:null}},Component:O,PureComponent:_,createContext:function(e,t){return void 0===t&&(t=null),(e={$$typeof:p,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:u,_context:e},e.Consumer=e},forwardRef:function(e){return{$$typeof:d,render:e}},lazy:function(e){return{$$typeof:b,_ctor:e,_status:-1,_result:null}},memo:function(e,t){return{$$typeof:f,type:e,compare:void 0===t?null:t}},useCallback:function(e,t){return B().useCallback(e,t)},useContext:function(e,t){return B().useContext(e,t)},useEffect:function(e,t){return B().useEffect(e,t)},useImperativeHandle:function(e,t,n){return B().useImperativeHandle(e,t,n)},useDebugValue:function(){},useLayoutEffect:function(e,t){return B().useLayoutEffect(e,t)},useMemo:function(e,t){return B().useMemo(e,t)},useReducer:function(e,t,n){return B().useReducer(e,t,n)},useRef:function(e){return B().useRef(e)},useState:function(e){return B().useState(e)},Fragment:s,StrictMode:c,Suspense:m,createElement:A,cloneElement:function(e,t,n){null==e&&v("267",e);var i=void 0,o=r({},e.props),s=e.key,c=e.ref,l=e._owner;if(null!=t){void 0!==t.ref&&(c=t.ref,l=C.current),void 0!==t.key&&(s=""+t.key);var u=void 0;for(i in e.type&&e.type.defaultProps&&(u=e.type.defaultProps),t)x.call(t,i)&&!S.hasOwnProperty(i)&&(o[i]=void 0===t[i]&&void 0!==u?u[i]:t[i])}if(1===(i=arguments.length-2))o.children=n;else if(1<i){u=Array(i);for(var p=0;p<i;p++)u[p]=arguments[p+2];o.children=u}return{$$typeof:a,type:e.type,key:s,ref:c,props:o,_owner:l}},createFactory:function(e){var t=A.bind(null,e);return t.type=e,t},isValidElement:M,version:"16.8.3",unstable_ConcurrentMode:h,unstable_Profiler:l,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{ReactCurrentDispatcher:E,ReactCurrentOwner:C,assign:r}},V={default:q},H=V&&q||V;e.exports=H.default||H},function(e,t,n){"use strict";
-/*
-object-assign
-(c) Sindre Sorhus
-@license MIT
-*/var r=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(e){r[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(i){return!1}}()?Object.assign:function(e,t){for(var n,o,s=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),c=1;c<arguments.length;c++){for(var l in n=Object(arguments[c]))i.call(n,l)&&(s[l]=n[l]);if(r){o=r(n);for(var u=0;u<o.length;u++)a.call(n,o[u])&&(s[o[u]]=n[o[u]])}}return s}},function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){"use strict";var r=n(18),i=n(138),a=n(142),o=n(143),s=n(151),c=n(165),l=n(178),u=n(81),p=n(88),h={default:n(180),zero:n(181),commonmark:n(182)},d=/^(vbscript|javascript|file|data):/,m=/^data:image\/(gif|png|jpeg|webp);/;function f(e){var t=e.trim().toLowerCase();return!d.test(t)||!!m.test(t)}var b=["http:","https:","mailto:"];function g(e){var t=u.parse(e,!0);if(t.hostname&&(!t.protocol||b.indexOf(t.protocol)>=0))try{t.hostname=p.toASCII(t.hostname)}catch(n){}return u.encode(u.format(t))}function v(e){var t=u.parse(e,!0);if(t.hostname&&(!t.protocol||b.indexOf(t.protocol)>=0))try{t.hostname=p.toUnicode(t.hostname)}catch(n){}return u.decode(u.format(t))}function y(e,t){if(!(this instanceof y))return new y(e,t);t||r.isString(e)||(t=e||{},e="default"),this.inline=new c,this.block=new s,this.core=new o,this.renderer=new a,this.linkify=new l,this.validateLink=f,this.normalizeLink=g,this.normalizeLinkText=v,this.utils=r,this.helpers=r.assign({},i),this.options={},this.configure(e),t&&this.set(t)}y.prototype.set=function(e){return r.assign(this.options,e),this},y.prototype.configure=function(e){var t,n=this;if(r.isString(e)&&!(e=h[t=e]))throw new Error('Wrong `markdown-it` preset "'+t+'", check name');if(!e)throw new Error("Wrong `markdown-it` preset, can't be empty");return e.options&&n.set(e.options),e.components&&Object.keys(e.components).forEach(function(t){e.components[t].rules&&n[t].ruler.enableOnly(e.components[t].rules),e.components[t].rules2&&n[t].ruler2.enableOnly(e.components[t].rules2)}),this},y.prototype.enable=function(e,t){var n=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach(function(t){n=n.concat(this[t].ruler.enable(e,!0))},this),n=n.concat(this.inline.ruler2.enable(e,!0));var r=e.filter(function(e){return n.indexOf(e)<0});if(r.length&&!t)throw new Error("MarkdownIt. Failed to enable unknown rule(s): "+r);return this},y.prototype.disable=function(e,t){var n=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach(function(t){n=n.concat(this[t].ruler.disable(e,!0))},this),n=n.concat(this.inline.ruler2.disable(e,!0));var r=e.filter(function(e){return n.indexOf(e)<0});if(r.length&&!t)throw new Error("MarkdownIt. Failed to disable unknown rule(s): "+r);return this},y.prototype.use=function(e){var t=[this].concat(Array.prototype.slice.call(arguments,1));return e.apply(e,t),this},y.prototype.parse=function(e,t){if("string"!=typeof e)throw new Error("Input data should be a String");var n=new this.core.State(e,this,t);return this.core.process(n),n.tokens},y.prototype.render=function(e,t){return t=t||{},this.renderer.render(this.parse(e,t),this.options,t)},y.prototype.parseInline=function(e,t){var n=new this.core.State(e,this,t);return n.inlineMode=!0,this.core.process(n),n.tokens},y.prototype.renderInline=function(e,t){return t=t||{},this.renderer.render(this.parseInline(e,t),this.options,t)},e.exports=y},function(e){e.exports={Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",amp:"&",AMP:"&",andand:"⩕",And:"⩓",and:"∧",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angmsd:"∡",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",apacir:"⩯",ap:"≈",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",barwed:"⌅",Barwed:"⌆",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",because:"∵",Because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxdl:"┐",boxdL:"╕",boxDl:"╖",boxDL:"╗",boxdr:"┌",boxdR:"╒",boxDr:"╓",boxDR:"╔",boxh:"─",boxH:"═",boxhd:"┬",boxHd:"╤",boxhD:"╥",boxHD:"╦",boxhu:"┴",boxHu:"╧",boxhU:"╨",boxHU:"╩",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxul:"┘",boxuL:"╛",boxUl:"╜",boxUL:"╝",boxur:"└",boxuR:"╘",boxUr:"╙",boxUR:"╚",boxv:"│",boxV:"║",boxvh:"┼",boxvH:"╪",boxVh:"╫",boxVH:"╬",boxvl:"┤",boxvL:"╡",boxVl:"╢",boxVL:"╣",boxvr:"├",boxvR:"╞",boxVr:"╟",boxVR:"╠",bprime:"‵",breve:"˘",Breve:"˘",brvbar:"¦",bscr:"𝒷",Bscr:"ℬ",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsolb:"⧅",bsol:"\\",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",capand:"⩄",capbrcup:"⩉",capcap:"⩋",cap:"∩",Cap:"⋒",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",centerdot:"·",CenterDot:"·",cfr:"𝔠",Cfr:"ℭ",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cir:"○",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",colon:":",Colon:"∷",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",conint:"∮",Conint:"∯",ContourIntegral:"∮",copf:"𝕔",Copf:"ℂ",coprod:"∐",Coproduct:"∐",copy:"©",COPY:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",cross:"✗",Cross:"⨯",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",cupbrcap:"⩈",cupcap:"⩆",CupCap:"≍",cup:"∪",Cup:"⋓",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",dagger:"†",Dagger:"‡",daleth:"ℸ",darr:"↓",Darr:"↡",dArr:"⇓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",ddagger:"‡",ddarr:"⇊",DD:"ⅅ",dd:"ⅆ",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",diamond:"⋄",Diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrowBar:"⤓",downarrow:"↓",DownArrow:"↓",Downarrow:"⇓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVectorBar:"⥖",DownLeftVector:"↽",DownRightTeeVector:"⥟",DownRightVectorBar:"⥗",DownRightVector:"⇁",DownTeeArrow:"↧",DownTee:"⊤",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",Ecirc:"Ê",ecirc:"ê",ecir:"≖",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",edot:"ė",eDot:"≑",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp13:" ",emsp14:" ",emsp:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",escr:"ℯ",Escr:"ℰ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",exponentiale:"ⅇ",ExponentialE:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",forall:"∀",ForAll:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",fscr:"𝒻",Fscr:"ℱ",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",ge:"≥",gE:"≧",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",gescc:"⪩",ges:"⩾",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",gg:"≫",Gg:"⋙",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gla:"⪥",gl:"≷",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gne:"⪈",gnE:"≩",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",gtcc:"⪧",gtcir:"⩺",gt:">",GT:">",Gt:"≫",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",harrcir:"⥈",harr:"↔",hArr:"⇔",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",hfr:"𝔥",Hfr:"ℌ",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",hopf:"𝕙",Hopf:"ℍ",horbar:"―",HorizontalLine:"─",hscr:"𝒽",Hscr:"ℋ",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",ifr:"𝔦",Ifr:"ℑ",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",Im:"ℑ",imof:"⊷",imped:"Ƶ",Implies:"⇒",incare:"℅",in:"∈",infin:"∞",infintie:"⧝",inodot:"ı",intcal:"⊺",int:"∫",Int:"∬",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",iscr:"𝒾",Iscr:"ℐ",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",lang:"⟨",Lang:"⟪",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",larrb:"⇤",larrbfs:"⤟",larr:"←",Larr:"↞",lArr:"⇐",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",latail:"⤙",lAtail:"⤛",lat:"⪫",late:"⪭",lates:"⪭︀",lbarr:"⤌",lBarr:"⤎",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",le:"≤",lE:"≦",LeftAngleBracket:"⟨",LeftArrowBar:"⇤",leftarrow:"←",LeftArrow:"←",Leftarrow:"⇐",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVectorBar:"⥙",LeftDownVector:"⇃",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",leftrightarrow:"↔",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTeeArrow:"↤",LeftTee:"⊣",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangleBar:"⧏",LeftTriangle:"⊲",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVectorBar:"⥘",LeftUpVector:"↿",LeftVectorBar:"⥒",LeftVector:"↼",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",lescc:"⪨",les:"⩽",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",llarr:"⇇",ll:"≪",Ll:"⋘",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoustache:"⎰",lmoust:"⎰",lnap:"⪉",lnapprox:"⪉",lne:"⪇",lnE:"≨",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",longleftarrow:"⟵",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftrightarrow:"⟷",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longmapsto:"⟼",longrightarrow:"⟶",LongRightArrow:"⟶",Longrightarrow:"⟹",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",lscr:"𝓁",Lscr:"ℒ",lsh:"↰",Lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",ltcc:"⪦",ltcir:"⩹",lt:"<",LT:"<",Lt:"≪",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",midast:"*",midcir:"⫰",mid:"∣",middot:"·",minusb:"⊟",minus:"−",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",mscr:"𝓂",Mscr:"ℳ",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natural:"♮",naturals:"ℕ",natur:"♮",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",nearhk:"⤤",nearr:"↗",neArr:"⇗",nearrow:"↗",ne:"≠",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nharr:"↮",nhArr:"⇎",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlarr:"↚",nlArr:"⇍",nldr:"‥",nlE:"≦̸",nle:"≰",nleftarrow:"↚",nLeftarrow:"⇍",nleftrightarrow:"↮",nLeftrightarrow:"⇎",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",nopf:"𝕟",Nopf:"ℕ",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangleBar:"⧏̸",NotLeftTriangle:"⋪",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangleBar:"⧐̸",NotRightTriangle:"⋫",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",nparallel:"∦",npar:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",nprec:"⊀",npreceq:"⪯̸",npre:"⪯̸",nrarrc:"⤳̸",nrarr:"↛",nrArr:"⇏",nrarrw:"↝̸",nrightarrow:"↛",nRightarrow:"⇏",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nvdash:"⊬",nvDash:"⊭",nVdash:"⊮",nVDash:"⊯",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwarr:"↖",nwArr:"⇖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",Ocirc:"Ô",ocirc:"ô",ocir:"⊚",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",orarr:"↻",Or:"⩔",or:"∨",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",otimesas:"⨶",Otimes:"⨷",otimes:"⊗",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",para:"¶",parallel:"∥",par:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plus:"+",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",popf:"𝕡",Popf:"ℙ",pound:"£",prap:"⪷",Pr:"⪻",pr:"≺",prcue:"≼",precapprox:"⪷",prec:"≺",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",pre:"⪯",prE:"⪳",precsim:"≾",prime:"′",Prime:"″",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportional:"∝",Proportion:"∷",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",qopf:"𝕢",Qopf:"ℚ",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",quot:'"',QUOT:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",rang:"⟩",Rang:"⟫",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarr:"→",Rarr:"↠",rArr:"⇒",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",ratail:"⤚",rAtail:"⤜",ratio:"∶",rationals:"ℚ",rbarr:"⤍",rBarr:"⤏",RBarr:"⤐",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",Re:"ℜ",rect:"▭",reg:"®",REG:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",rfr:"𝔯",Rfr:"ℜ",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrowBar:"⇥",rightarrow:"→",RightArrow:"→",Rightarrow:"⇒",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVectorBar:"⥕",RightDownVector:"⇂",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTeeArrow:"↦",RightTee:"⊢",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangleBar:"⧐",RightTriangle:"⊳",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVectorBar:"⥔",RightUpVector:"↾",RightVectorBar:"⥓",RightVector:"⇀",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoustache:"⎱",rmoust:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",ropf:"𝕣",Ropf:"ℝ",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",rscr:"𝓇",Rscr:"ℛ",rsh:"↱",Rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",scap:"⪸",Scaron:"Š",scaron:"š",Sc:"⪼",sc:"≻",sccue:"≽",sce:"⪰",scE:"⪴",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdotb:"⊡",sdot:"⋅",sdote:"⩦",searhk:"⤥",searr:"↘",seArr:"⇘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",solbar:"⌿",solb:"⧄",sol:"/",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",square:"□",Square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squ:"□",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",sub:"⊂",Sub:"⋐",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",subset:"⊂",Subset:"⋐",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succapprox:"⪸",succ:"≻",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",sum:"∑",Sum:"∑",sung:"♪",sup1:"¹",sup2:"²",sup3:"³",sup:"⊃",Sup:"⋑",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",supset:"⊃",Supset:"⋑",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swarr:"↙",swArr:"⇙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",therefore:"∴",Therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",ThinSpace:" ",thinsp:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",tilde:"˜",Tilde:"∼",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",timesbar:"⨱",timesb:"⊠",times:"×",timesd:"⨰",tint:"∭",toea:"⤨",topbot:"⌶",topcir:"⫱",top:"⊤",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",trade:"™",TRADE:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",uarr:"↑",Uarr:"↟",uArr:"⇑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrowBar:"⤒",uparrow:"↑",UpArrow:"↑",Uparrow:"⇑",UpArrowDownArrow:"⇅",updownarrow:"↕",UpDownArrow:"↕",Updownarrow:"⇕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",upsi:"υ",Upsi:"ϒ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTeeArrow:"↥",UpTee:"⊥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",varr:"↕",vArr:"⇕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",vBar:"⫨",Vbar:"⫫",vBarv:"⫩",Vcy:"В",vcy:"в",vdash:"⊢",vDash:"⊨",Vdash:"⊩",VDash:"⊫",Vdashl:"⫦",veebar:"⊻",vee:"∨",Vee:"⋁",veeeq:"≚",vellip:"⋮",verbar:"|",Verbar:"‖",vert:"|",Vert:"‖",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",wedge:"∧",Wedge:"⋀",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xharr:"⟷",xhArr:"⟺",Xi:"Ξ",xi:"ξ",xlarr:"⟵",xlArr:"⟸",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrarr:"⟶",xrArr:"⟹",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",yuml:"ÿ",Yuml:"Ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",zfr:"𝔷",Zfr:"ℨ",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",zopf:"𝕫",Zopf:"ℤ",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}},function(e,t,n){"use strict";var r={};function i(e,t,n){var a,o,s,c,l,u="";for("string"!=typeof t&&(n=t,t=i.defaultChars),void 0===n&&(n=!0),l=function(e){var t,n,i=r[e];if(i)return i;for(i=r[e]=[],t=0;t<128;t++)n=String.fromCharCode(t),/^[0-9a-z]$/i.test(n)?i.push(n):i.push("%"+("0"+t.toString(16).toUpperCase()).slice(-2));for(t=0;t<e.length;t++)i[e.charCodeAt(t)]=e[t];return i}(t),a=0,o=e.length;a<o;a++)if(s=e.charCodeAt(a),n&&37===s&&a+2<o&&/^[0-9a-f]{2}$/i.test(e.slice(a+1,a+3)))u+=e.slice(a,a+3),a+=2;else if(s<128)u+=l[s];else if(s>=55296&&s<=57343){if(s>=55296&&s<=56319&&a+1<o&&(c=e.charCodeAt(a+1))>=56320&&c<=57343){u+=encodeURIComponent(e[a]+e[a+1]),a++;continue}u+="%EF%BF%BD"}else u+=encodeURIComponent(e[a]);return u}i.defaultChars=";/?:@&=+$,-_.!~*'()#",i.componentChars="-_.!~*'()",e.exports=i},function(e,t,n){"use strict";var r={};function i(e,t){var n;return"string"!=typeof t&&(t=i.defaultChars),n=function(e){var t,n,i=r[e];if(i)return i;for(i=r[e]=[],t=0;t<128;t++)n=String.fromCharCode(t),i.push(n);for(t=0;t<e.length;t++)i[n=e.charCodeAt(t)]="%"+("0"+n.toString(16).toUpperCase()).slice(-2);return i}(t),e.replace(/(%[a-f0-9]{2})+/gi,function(e){var t,r,i,a,o,s,c,l="";for(t=0,r=e.length;t<r;t+=3)(i=parseInt(e.slice(t+1,t+3),16))<128?l+=n[i]:192==(224&i)&&t+3<r&&128==(192&(a=parseInt(e.slice(t+4,t+6),16)))?(l+=(c=i<<6&1984|63&a)<128?"��":String.fromCharCode(c),t+=3):224==(240&i)&&t+6<r&&(a=parseInt(e.slice(t+4,t+6),16),o=parseInt(e.slice(t+7,t+9),16),128==(192&a)&&128==(192&o))?(l+=(c=i<<12&61440|a<<6&4032|63&o)<2048||c>=55296&&c<=57343?"���":String.fromCharCode(c),t+=6):240==(248&i)&&t+9<r&&(a=parseInt(e.slice(t+4,t+6),16),o=parseInt(e.slice(t+7,t+9),16),s=parseInt(e.slice(t+10,t+12),16),128==(192&a)&&128==(192&o)&&128==(192&s))?((c=i<<18&1835008|a<<12&258048|o<<6&4032|63&s)<65536||c>1114111?l+="����":(c-=65536,l+=String.fromCharCode(55296+(c>>10),56320+(1023&c))),t+=9):l+="�";return l})}i.defaultChars=";/?:@&=+$,#",i.componentChars="",e.exports=i},function(e,t,n){"use strict";e.exports=function(e){var t="";return t+=e.protocol||"",t+=e.slashes?"//":"",t+=e.auth?e.auth+"@":"",e.hostname&&-1!==e.hostname.indexOf(":")?t+="["+e.hostname+"]":t+=e.hostname||"",t+=e.port?":"+e.port:"",t+=e.pathname||"",t+=e.search||"",t+=e.hash||""}},function(e,t,n){"use strict";function r(){this.protocol=null,this.slashes=null,this.auth=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.pathname=null}var i=/^([a-z0-9.+-]+:)/i,a=/:[0-9]*$/,o=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,s=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),c=["'"].concat(s),l=["%","/","?",";","#"].concat(c),u=["/","?","#"],p=/^[+a-z0-9A-Z_-]{0,63}$/,h=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,d={javascript:!0,"javascript:":!0},m={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};r.prototype.parse=function(e,t){var n,r,a,s,c,f=e;if(f=f.trim(),!t&&1===e.split("#").length){var b=o.exec(f);if(b)return this.pathname=b[1],b[2]&&(this.search=b[2]),this}var g=i.exec(f);if(g&&(a=(g=g[0]).toLowerCase(),this.protocol=g,f=f.substr(g.length)),(t||g||f.match(/^\/\/[^@\/]+@[^@\/]+/))&&(!(c="//"===f.substr(0,2))||g&&d[g]||(f=f.substr(2),this.slashes=!0)),!d[g]&&(c||g&&!m[g])){var v,y,j=-1;for(n=0;n<u.length;n++)-1!==(s=f.indexOf(u[n]))&&(-1===j||s<j)&&(j=s);for(-1!==(y=-1===j?f.lastIndexOf("@"):f.lastIndexOf("@",j))&&(v=f.slice(0,y),f=f.slice(y+1),this.auth=v),j=-1,n=0;n<l.length;n++)-1!==(s=f.indexOf(l[n]))&&(-1===j||s<j)&&(j=s);-1===j&&(j=f.length),":"===f[j-1]&&j--;var O=f.slice(0,j);f=f.slice(j),this.parseHost(O),this.hostname=this.hostname||"";var k="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!k){var _=this.hostname.split(/\./);for(n=0,r=_.length;n<r;n++){var w=_[n];if(w&&!w.match(p)){for(var E="",C=0,x=w.length;C<x;C++)w.charCodeAt(C)>127?E+="x":E+=w[C];if(!E.match(p)){var S=_.slice(0,n),A=_.slice(n+1),M=w.match(h);M&&(S.push(M[1]),A.unshift(M[2])),A.length&&(f=A.join(".")+f),this.hostname=S.join(".");break}}}}this.hostname.length>255&&(this.hostname=""),k&&(this.hostname=this.hostname.substr(1,this.hostname.length-2))}var T=f.indexOf("#");-1!==T&&(this.hash=f.substr(T),f=f.slice(0,T));var z=f.indexOf("?");return-1!==z&&(this.search=f.substr(z),f=f.slice(0,z)),f&&(this.pathname=f),m[a]&&this.hostname&&!this.pathname&&(this.pathname=""),this},r.prototype.parseHost=function(e){var t=a.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)},e.exports=function(e,t){if(e&&e instanceof r)return e;var n=new r;return n.parse(e,t),n}},function(e,t,n){"use strict";t.Any=n(82),t.Cc=n(83),t.Cf=n(137),t.P=n(58),t.Z=n(84)},function(e,t){e.exports=/[\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/},function(e,t,n){"use strict";t.parseLinkLabel=n(139),t.parseLinkDestination=n(140),t.parseLinkTitle=n(141)},function(e,t,n){"use strict";e.exports=function(e,t,n){var r,i,a,o,s=-1,c=e.posMax,l=e.pos;for(e.pos=t+1,r=1;e.pos<c;){if(93===(a=e.src.charCodeAt(e.pos))&&0===--r){i=!0;break}if(o=e.pos,e.md.inline.skipToken(e),91===a)if(o===e.pos-1)r++;else if(n)return e.pos=l,-1}return i&&(s=e.pos),e.pos=l,s}},function(e,t,n){"use strict";var r=n(18).isSpace,i=n(18).unescapeAll;e.exports=function(e,t,n){var a,o,s=t,c={ok:!1,pos:0,lines:0,str:""};if(60===e.charCodeAt(t)){for(t++;t<n;){if(10===(a=e.charCodeAt(t))||r(a))return c;if(62===a)return c.pos=t+1,c.str=i(e.slice(s+1,t)),c.ok=!0,c;92===a&&t+1<n?t+=2:t++}return c}for(o=0;t<n&&32!==(a=e.charCodeAt(t))&&!(a<32||127===a);)if(92===a&&t+1<n)t+=2;else{if(40===a&&o++,41===a){if(0===o)break;o--}t++}return s===t?c:0!==o?c:(c.str=i(e.slice(s,t)),c.lines=0,c.pos=t,c.ok=!0,c)}},function(e,t,n){"use strict";var r=n(18).unescapeAll;e.exports=function(e,t,n){var i,a,o=0,s=t,c={ok:!1,pos:0,lines:0,str:""};if(t>=n)return c;if(34!==(a=e.charCodeAt(t))&&39!==a&&40!==a)return c;for(t++,40===a&&(a=41);t<n;){if((i=e.charCodeAt(t))===a)return c.pos=t+1,c.lines=o,c.str=r(e.slice(s+1,t)),c.ok=!0,c;10===i?o++:92===i&&t+1<n&&(t++,10===e.charCodeAt(t)&&o++),t++}return c}},function(e,t,n){"use strict";var r=n(18).assign,i=n(18).unescapeAll,a=n(18).escapeHtml,o={};function s(){this.rules=r({},o)}o.code_inline=function(e,t,n,r,i){var o=e[t];return"<code"+i.renderAttrs(o)+">"+a(e[t].content)+"</code>"},o.code_block=function(e,t,n,r,i){var o=e[t];return"<pre"+i.renderAttrs(o)+"><code>"+a(e[t].content)+"</code></pre>\n"},o.fence=function(e,t,n,r,o){var s,c,l,u,p=e[t],h=p.info?i(p.info).trim():"",d="";return h&&(d=h.split(/\s+/g)[0]),0===(s=n.highlight&&n.highlight(p.content,d)||a(p.content)).indexOf("<pre")?s+"\n":h?(c=p.attrIndex("class"),l=p.attrs?p.attrs.slice():[],c<0?l.push(["class",n.langPrefix+d]):l[c][1]+=" "+n.langPrefix+d,u={attrs:l},"<pre><code"+o.renderAttrs(u)+">"+s+"</code></pre>\n"):"<pre><code"+o.renderAttrs(p)+">"+s+"</code></pre>\n"},o.image=function(e,t,n,r,i){var a=e[t];return a.attrs[a.attrIndex("alt")][1]=i.renderInlineAsText(a.children,n,r),i.renderToken(e,t,n)},o.hardbreak=function(e,t,n){return n.xhtmlOut?"<br />\n":"<br>\n"},o.softbreak=function(e,t,n){return n.breaks?n.xhtmlOut?"<br />\n":"<br>\n":"\n"},o.text=function(e,t){return a(e[t].content)},o.html_block=function(e,t){return e[t].content},o.html_inline=function(e,t){return e[t].content},s.prototype.renderAttrs=function(e){var t,n,r;if(!e.attrs)return"";for(r="",t=0,n=e.attrs.length;t<n;t++)r+=" "+a(e.attrs[t][0])+'="'+a(e.attrs[t][1])+'"';return r},s.prototype.renderToken=function(e,t,n){var r,i="",a=!1,o=e[t];return o.hidden?"":(o.block&&-1!==o.nesting&&t&&e[t-1].hidden&&(i+="\n"),i+=(-1===o.nesting?"</":"<")+o.tag,i+=this.renderAttrs(o),0===o.nesting&&n.xhtmlOut&&(i+=" /"),o.block&&(a=!0,1===o.nesting&&t+1<e.length&&("inline"===(r=e[t+1]).type||r.hidden?a=!1:-1===r.nesting&&r.tag===o.tag&&(a=!1))),i+=a?">\n":">")},s.prototype.renderInline=function(e,t,n){for(var r,i="",a=this.rules,o=0,s=e.length;o<s;o++)void 0!==a[r=e[o].type]?i+=a[r](e,o,t,n,this):i+=this.renderToken(e,o,t);return i},s.prototype.renderInlineAsText=function(e,t,n){for(var r="",i=0,a=e.length;i<a;i++)"text"===e[i].type?r+=e[i].content:"image"===e[i].type&&(r+=this.renderInlineAsText(e[i].children,t,n));return r},s.prototype.render=function(e,t,n){var r,i,a,o="",s=this.rules;for(r=0,i=e.length;r<i;r++)"inline"===(a=e[r].type)?o+=this.renderInline(e[r].children,t,n):void 0!==s[a]?o+=s[e[r].type](e,r,t,n,this):o+=this.renderToken(e,r,t,n);return o},e.exports=s},function(e,t,n){"use strict";var r=n(59),i=[["normalize",n(144)],["block",n(145)],["inline",n(146)],["linkify",n(147)],["replacements",n(148)],["smartquotes",n(149)]];function a(){this.ruler=new r;for(var e=0;e<i.length;e++)this.ruler.push(i[e][0],i[e][1])}a.prototype.process=function(e){var t,n,r;for(t=0,n=(r=this.ruler.getRules("")).length;t<n;t++)r[t](e)},a.prototype.State=n(150),e.exports=a},function(e,t,n){"use strict";var r=/\r[\n\u0085]?|[\u2424\u2028\u0085]/g,i=/\u0000/g;e.exports=function(e){var t;t=(t=e.src.replace(r,"\n")).replace(i,"�"),e.src=t}},function(e,t,n){"use strict";e.exports=function(e){var t;e.inlineMode?((t=new e.Token("inline","",0)).content=e.src,t.map=[0,1],t.children=[],e.tokens.push(t)):e.md.block.parse(e.src,e.md,e.env,e.tokens)}},function(e,t,n){"use strict";e.exports=function(e){var t,n,r,i=e.tokens;for(n=0,r=i.length;n<r;n++)"inline"===(t=i[n]).type&&e.md.inline.parse(t.content,e.md,e.env,t.children)}},function(e,t,n){"use strict";var r=n(18).arrayReplaceAt;function i(e){return/^<\/a\s*>/i.test(e)}e.exports=function(e){var t,n,a,o,s,c,l,u,p,h,d,m,f,b,g,v,y,j,O=e.tokens;if(e.md.options.linkify)for(n=0,a=O.length;n<a;n++)if("inline"===O[n].type&&e.md.linkify.pretest(O[n].content))for(f=0,t=(o=O[n].children).length-1;t>=0;t--)if("link_close"!==(c=o[t]).type){if("html_inline"===c.type&&(j=c.content,/^<a[>\s]/i.test(j)&&f>0&&f--,i(c.content)&&f++),!(f>0)&&"text"===c.type&&e.md.linkify.test(c.content)){for(p=c.content,y=e.md.linkify.match(p),l=[],m=c.level,d=0,u=0;u<y.length;u++)b=y[u].url,g=e.md.normalizeLink(b),e.md.validateLink(g)&&(v=y[u].text,v=y[u].schema?"mailto:"!==y[u].schema||/^mailto:/i.test(v)?e.md.normalizeLinkText(v):e.md.normalizeLinkText("mailto:"+v).replace(/^mailto:/,""):e.md.normalizeLinkText("http://"+v).replace(/^http:\/\//,""),(h=y[u].index)>d&&((s=new e.Token("text","",0)).content=p.slice(d,h),s.level=m,l.push(s)),(s=new e.Token("link_open","a",1)).attrs=[["href",g]],s.level=m++,s.markup="linkify",s.info="auto",l.push(s),(s=new e.Token("text","",0)).content=v,s.level=m,l.push(s),(s=new e.Token("link_close","a",-1)).level=--m,s.markup="linkify",s.info="auto",l.push(s),d=y[u].lastIndex);d<p.length&&((s=new e.Token("text","",0)).content=p.slice(d),s.level=m,l.push(s)),O[n].children=o=r(o,t,l)}}else for(t--;o[t].level!==c.level&&"link_open"!==o[t].type;)t--}},function(e,t,n){"use strict";var r=/\+-|\.\.|\?\?\?\?|!!!!|,,|--/,i=/\((c|tm|r|p)\)/i,a=/\((c|tm|r|p)\)/gi,o={c:"©",r:"®",p:"§",tm:"™"};function s(e,t){return o[t.toLowerCase()]}function c(e){var t,n,r=0;for(t=e.length-1;t>=0;t--)"text"!==(n=e[t]).type||r||(n.content=n.content.replace(a,s)),"link_open"===n.type&&"auto"===n.info&&r--,"link_close"===n.type&&"auto"===n.info&&r++}function l(e){var t,n,i=0;for(t=e.length-1;t>=0;t--)"text"!==(n=e[t]).type||i||r.test(n.content)&&(n.content=n.content.replace(/\+-/g,"±").replace(/\.{2,}/g,"…").replace(/([?!])…/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---([^-]|$)/gm,"$1—$2").replace(/(^|\s)--(\s|$)/gm,"$1–$2").replace(/(^|[^-\s])--([^-\s]|$)/gm,"$1–$2")),"link_open"===n.type&&"auto"===n.info&&i--,"link_close"===n.type&&"auto"===n.info&&i++}e.exports=function(e){var t;if(e.md.options.typographer)for(t=e.tokens.length-1;t>=0;t--)"inline"===e.tokens[t].type&&(i.test(e.tokens[t].content)&&c(e.tokens[t].children),r.test(e.tokens[t].content)&&l(e.tokens[t].children))}},function(e,t,n){"use strict";var r=n(18).isWhiteSpace,i=n(18).isPunctChar,a=n(18).isMdAsciiPunct,o=/['"]/,s=/['"]/g,c="’";function l(e,t,n){return e.substr(0,t)+n+e.substr(t+1)}function u(e,t){var n,o,u,p,h,d,m,f,b,g,v,y,j,O,k,_,w,E,C,x,S;for(C=[],n=0;n<e.length;n++){for(o=e[n],m=e[n].level,w=C.length-1;w>=0&&!(C[w].level<=m);w--);if(C.length=w+1,"text"===o.type){h=0,d=(u=o.content).length;e:for(;h<d&&(s.lastIndex=h,p=s.exec(u));){if(k=_=!0,h=p.index+1,E="'"===p[0],b=32,p.index-1>=0)b=u.charCodeAt(p.index-1);else for(w=n-1;w>=0&&("softbreak"!==e[w].type&&"hardbreak"!==e[w].type);w--)if("text"===e[w].type){b=e[w].content.charCodeAt(e[w].content.length-1);break}if(g=32,h<d)g=u.charCodeAt(h);else for(w=n+1;w<e.length&&("softbreak"!==e[w].type&&"hardbreak"!==e[w].type);w++)if("text"===e[w].type){g=e[w].content.charCodeAt(0);break}if(v=a(b)||i(String.fromCharCode(b)),y=a(g)||i(String.fromCharCode(g)),j=r(b),(O=r(g))?k=!1:y&&(j||v||(k=!1)),j?_=!1:v&&(O||y||(_=!1)),34===g&&'"'===p[0]&&b>=48&&b<=57&&(_=k=!1),k&&_&&(k=!1,_=y),k||_){if(_)for(w=C.length-1;w>=0&&(f=C[w],!(C[w].level<m));w--)if(f.single===E&&C[w].level===m){f=C[w],E?(x=t.md.options.quotes[2],S=t.md.options.quotes[3]):(x=t.md.options.quotes[0],S=t.md.options.quotes[1]),o.content=l(o.content,p.index,S),e[f.token].content=l(e[f.token].content,f.pos,x),h+=S.length-1,f.token===n&&(h+=x.length-1),d=(u=o.content).length,C.length=w;continue e}k?C.push({token:n,pos:p.index,single:E,level:m}):_&&E&&(o.content=l(o.content,p.index,c))}else E&&(o.content=l(o.content,p.index,c))}}}}e.exports=function(e){var t;if(e.md.options.typographer)for(t=e.tokens.length-1;t>=0;t--)"inline"===e.tokens[t].type&&o.test(e.tokens[t].content)&&u(e.tokens[t].children,e)}},function(e,t,n){"use strict";var r=n(60);function i(e,t,n){this.src=e,this.env=n,this.tokens=[],this.inlineMode=!1,this.md=t}i.prototype.Token=r,e.exports=i},function(e,t,n){"use strict";var r=n(59),i=[["table",n(152),["paragraph","reference"]],["code",n(153)],["fence",n(154),["paragraph","reference","blockquote","list"]],["blockquote",n(155),["paragraph","reference","blockquote","list"]],["hr",n(156),["paragraph","reference","blockquote","list"]],["list",n(157),["paragraph","reference","blockquote"]],["reference",n(158)],["heading",n(159),["paragraph","reference","blockquote"]],["lheading",n(160)],["html_block",n(161),["paragraph","reference","blockquote"]],["paragraph",n(163)]];function a(){this.ruler=new r;for(var e=0;e<i.length;e++)this.ruler.push(i[e][0],i[e][1],{alt:(i[e][2]||[]).slice()})}a.prototype.tokenize=function(e,t,n){for(var r,i=this.ruler.getRules(""),a=i.length,o=t,s=!1,c=e.md.options.maxNesting;o<n&&(e.line=o=e.skipEmptyLines(o),!(o>=n))&&!(e.sCount[o]<e.blkIndent);){if(e.level>=c){e.line=n;break}for(r=0;r<a&&!i[r](e,o,n,!1);r++);e.tight=!s,e.isEmpty(e.line-1)&&(s=!0),(o=e.line)<n&&e.isEmpty(o)&&(s=!0,o++,e.line=o)}},a.prototype.parse=function(e,t,n,r){var i;e&&(i=new this.State(e,t,n,r),this.tokenize(i,i.line,i.lineMax))},a.prototype.State=n(164),e.exports=a},function(e,t,n){"use strict";var r=n(18).isSpace;function i(e,t){var n=e.bMarks[t]+e.blkIndent,r=e.eMarks[t];return e.src.substr(n,r-n)}function a(e){var t,n=[],r=0,i=e.length,a=0,o=0,s=!1,c=0;for(t=e.charCodeAt(r);r<i;)96===t?s?(s=!1,c=r):a%2==0&&(s=!0,c=r):124!==t||a%2!=0||s||(n.push(e.substring(o,r)),o=r+1),92===t?a++:a=0,++r===i&&s&&(s=!1,r=c+1),t=e.charCodeAt(r);return n.push(e.substring(o)),n}e.exports=function(e,t,n,o){var s,c,l,u,p,h,d,m,f,b,g,v;if(t+2>n)return!1;if(p=t+1,e.sCount[p]<e.blkIndent)return!1;if(e.sCount[p]-e.blkIndent>=4)return!1;if((l=e.bMarks[p]+e.tShift[p])>=e.eMarks[p])return!1;if(124!==(s=e.src.charCodeAt(l++))&&45!==s&&58!==s)return!1;for(;l<e.eMarks[p];){if(124!==(s=e.src.charCodeAt(l))&&45!==s&&58!==s&&!r(s))return!1;l++}for(h=(c=i(e,t+1)).split("|"),f=[],u=0;u<h.length;u++){if(!(b=h[u].trim())){if(0===u||u===h.length-1)continue;return!1}if(!/^:?-+:?$/.test(b))return!1;58===b.charCodeAt(b.length-1)?f.push(58===b.charCodeAt(0)?"center":"right"):58===b.charCodeAt(0)?f.push("left"):f.push("")}if(-1===(c=i(e,t).trim()).indexOf("|"))return!1;if(e.sCount[t]-e.blkIndent>=4)return!1;if((d=(h=a(c.replace(/^\||\|$/g,""))).length)>f.length)return!1;if(o)return!0;for((m=e.push("table_open","table",1)).map=g=[t,0],(m=e.push("thead_open","thead",1)).map=[t,t+1],(m=e.push("tr_open","tr",1)).map=[t,t+1],u=0;u<h.length;u++)(m=e.push("th_open","th",1)).map=[t,t+1],f[u]&&(m.attrs=[["style","text-align:"+f[u]]]),(m=e.push("inline","",0)).content=h[u].trim(),m.map=[t,t+1],m.children=[],m=e.push("th_close","th",-1);for(m=e.push("tr_close","tr",-1),m=e.push("thead_close","thead",-1),(m=e.push("tbody_open","tbody",1)).map=v=[t+2,0],p=t+2;p<n&&!(e.sCount[p]<e.blkIndent)&&-1!==(c=i(e,p).trim()).indexOf("|")&&!(e.sCount[p]-e.blkIndent>=4);p++){for(h=a(c.replace(/^\||\|$/g,"")),m=e.push("tr_open","tr",1),u=0;u<d;u++)m=e.push("td_open","td",1),f[u]&&(m.attrs=[["style","text-align:"+f[u]]]),(m=e.push("inline","",0)).content=h[u]?h[u].trim():"",m.children=[],m=e.push("td_close","td",-1);m=e.push("tr_close","tr",-1)}return m=e.push("tbody_close","tbody",-1),m=e.push("table_close","table",-1),g[1]=v[1]=p,e.line=p,!0}},function(e,t,n){"use strict";e.exports=function(e,t,n){var r,i,a;if(e.sCount[t]-e.blkIndent<4)return!1;for(i=r=t+1;r<n;)if(e.isEmpty(r))r++;else{if(!(e.sCount[r]-e.blkIndent>=4))break;i=++r}return e.line=i,(a=e.push("code_block","code",0)).content=e.getLines(t,i,4+e.blkIndent,!0),a.map=[t,e.line],!0}},function(e,t,n){"use strict";e.exports=function(e,t,n,r){var i,a,o,s,c,l,u,p=!1,h=e.bMarks[t]+e.tShift[t],d=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4)return!1;if(h+3>d)return!1;if(126!==(i=e.src.charCodeAt(h))&&96!==i)return!1;if(c=h,(a=(h=e.skipChars(h,i))-c)<3)return!1;if(u=e.src.slice(c,h),(o=e.src.slice(h,d)).indexOf(String.fromCharCode(i))>=0)return!1;if(r)return!0;for(s=t;!(++s>=n)&&!((h=c=e.bMarks[s]+e.tShift[s])<(d=e.eMarks[s])&&e.sCount[s]<e.blkIndent);)if(e.src.charCodeAt(h)===i&&!(e.sCount[s]-e.blkIndent>=4||(h=e.skipChars(h,i))-c<a||(h=e.skipSpaces(h))<d)){p=!0;break}return a=e.sCount[t],e.line=s+(p?1:0),(l=e.push("fence","code",0)).info=o,l.content=e.getLines(t+1,s,a,!0),l.markup=u,l.map=[t,e.line],!0}},function(e,t,n){"use strict";var r=n(18).isSpace;e.exports=function(e,t,n,i){var a,o,s,c,l,u,p,h,d,m,f,b,g,v,y,j,O,k,_,w,E=e.lineMax,C=e.bMarks[t]+e.tShift[t],x=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4)return!1;if(62!==e.src.charCodeAt(C++))return!1;if(i)return!0;for(c=d=e.sCount[t]+C-(e.bMarks[t]+e.tShift[t]),32===e.src.charCodeAt(C)?(C++,c++,d++,a=!1,j=!0):9===e.src.charCodeAt(C)?(j=!0,(e.bsCount[t]+d)%4==3?(C++,c++,d++,a=!1):a=!0):j=!1,m=[e.bMarks[t]],e.bMarks[t]=C;C<x&&(o=e.src.charCodeAt(C),r(o));)9===o?d+=4-(d+e.bsCount[t]+(a?1:0))%4:d++,C++;for(f=[e.bsCount[t]],e.bsCount[t]=e.sCount[t]+1+(j?1:0),u=C>=x,v=[e.sCount[t]],e.sCount[t]=d-c,y=[e.tShift[t]],e.tShift[t]=C-e.bMarks[t],k=e.md.block.ruler.getRules("blockquote"),g=e.parentType,e.parentType="blockquote",w=!1,h=t+1;h<n&&(e.sCount[h]<e.blkIndent&&(w=!0),!((C=e.bMarks[h]+e.tShift[h])>=(x=e.eMarks[h])));h++)if(62!==e.src.charCodeAt(C++)||w){if(u)break;for(O=!1,s=0,l=k.length;s<l;s++)if(k[s](e,h,n,!0)){O=!0;break}if(O){e.lineMax=h,0!==e.blkIndent&&(m.push(e.bMarks[h]),f.push(e.bsCount[h]),y.push(e.tShift[h]),v.push(e.sCount[h]),e.sCount[h]-=e.blkIndent);break}m.push(e.bMarks[h]),f.push(e.bsCount[h]),y.push(e.tShift[h]),v.push(e.sCount[h]),e.sCount[h]=-1}else{for(c=d=e.sCount[h]+C-(e.bMarks[h]+e.tShift[h]),32===e.src.charCodeAt(C)?(C++,c++,d++,a=!1,j=!0):9===e.src.charCodeAt(C)?(j=!0,(e.bsCount[h]+d)%4==3?(C++,c++,d++,a=!1):a=!0):j=!1,m.push(e.bMarks[h]),e.bMarks[h]=C;C<x&&(o=e.src.charCodeAt(C),r(o));)9===o?d+=4-(d+e.bsCount[h]+(a?1:0))%4:d++,C++;u=C>=x,f.push(e.bsCount[h]),e.bsCount[h]=e.sCount[h]+1+(j?1:0),v.push(e.sCount[h]),e.sCount[h]=d-c,y.push(e.tShift[h]),e.tShift[h]=C-e.bMarks[h]}for(b=e.blkIndent,e.blkIndent=0,(_=e.push("blockquote_open","blockquote",1)).markup=">",_.map=p=[t,0],e.md.block.tokenize(e,t,h),(_=e.push("blockquote_close","blockquote",-1)).markup=">",e.lineMax=E,e.parentType=g,p[1]=e.line,s=0;s<y.length;s++)e.bMarks[s+t]=m[s],e.tShift[s+t]=y[s],e.sCount[s+t]=v[s],e.bsCount[s+t]=f[s];return e.blkIndent=b,!0}},function(e,t,n){"use strict";var r=n(18).isSpace;e.exports=function(e,t,n,i){var a,o,s,c,l=e.bMarks[t]+e.tShift[t],u=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4)return!1;if(42!==(a=e.src.charCodeAt(l++))&&45!==a&&95!==a)return!1;for(o=1;l<u;){if((s=e.src.charCodeAt(l++))!==a&&!r(s))return!1;s===a&&o++}return!(o<3)&&(!!i||(e.line=t+1,(c=e.push("hr","hr",0)).map=[t,e.line],c.markup=Array(o+1).join(String.fromCharCode(a)),!0))}},function(e,t,n){"use strict";var r=n(18).isSpace;function i(e,t){var n,i,a,o;return i=e.bMarks[t]+e.tShift[t],a=e.eMarks[t],42!==(n=e.src.charCodeAt(i++))&&45!==n&&43!==n?-1:i<a&&(o=e.src.charCodeAt(i),!r(o))?-1:i}function a(e,t){var n,i=e.bMarks[t]+e.tShift[t],a=i,o=e.eMarks[t];if(a+1>=o)return-1;if((n=e.src.charCodeAt(a++))<48||n>57)return-1;for(;;){if(a>=o)return-1;if(!((n=e.src.charCodeAt(a++))>=48&&n<=57)){if(41===n||46===n)break;return-1}if(a-i>=10)return-1}return a<o&&(n=e.src.charCodeAt(a),!r(n))?-1:a}e.exports=function(e,t,n,r){var o,s,c,l,u,p,h,d,m,f,b,g,v,y,j,O,k,_,w,E,C,x,S,A,M,T,z,D,N=!1,F=!0;if(e.sCount[t]-e.blkIndent>=4)return!1;if(r&&"paragraph"===e.parentType&&e.tShift[t]>=e.blkIndent&&(N=!0),(S=a(e,t))>=0){if(h=!0,M=e.bMarks[t]+e.tShift[t],v=Number(e.src.substr(M,S-M-1)),N&&1!==v)return!1}else{if(!((S=i(e,t))>=0))return!1;h=!1}if(N&&e.skipSpaces(S)>=e.eMarks[t])return!1;if(g=e.src.charCodeAt(S-1),r)return!0;for(b=e.tokens.length,h?(D=e.push("ordered_list_open","ol",1),1!==v&&(D.attrs=[["start",v]])):D=e.push("bullet_list_open","ul",1),D.map=f=[t,0],D.markup=String.fromCharCode(g),j=t,A=!1,z=e.md.block.ruler.getRules("list"),w=e.parentType,e.parentType="list";j<n;){for(x=S,y=e.eMarks[j],p=O=e.sCount[j]+S-(e.bMarks[t]+e.tShift[t]);x<y;){if(9===(o=e.src.charCodeAt(x)))O+=4-(O+e.bsCount[j])%4;else{if(32!==o)break;O++}x++}if((u=(s=x)>=y?1:O-p)>4&&(u=1),l=p+u,(D=e.push("list_item_open","li",1)).markup=String.fromCharCode(g),D.map=d=[t,0],k=e.blkIndent,C=e.tight,E=e.tShift[t],_=e.sCount[t],e.blkIndent=l,e.tight=!0,e.tShift[t]=s-e.bMarks[t],e.sCount[t]=O,s>=y&&e.isEmpty(t+1)?e.line=Math.min(e.line+2,n):e.md.block.tokenize(e,t,n,!0),e.tight&&!A||(F=!1),A=e.line-t>1&&e.isEmpty(e.line-1),e.blkIndent=k,e.tShift[t]=E,e.sCount[t]=_,e.tight=C,(D=e.push("list_item_close","li",-1)).markup=String.fromCharCode(g),j=t=e.line,d[1]=j,s=e.bMarks[t],j>=n)break;if(e.sCount[j]<e.blkIndent)break;for(T=!1,c=0,m=z.length;c<m;c++)if(z[c](e,j,n,!0)){T=!0;break}if(T)break;if(h){if((S=a(e,j))<0)break}else if((S=i(e,j))<0)break;if(g!==e.src.charCodeAt(S-1))break}return(D=h?e.push("ordered_list_close","ol",-1):e.push("bullet_list_close","ul",-1)).markup=String.fromCharCode(g),f[1]=j,e.line=j,e.parentType=w,F&&function(e,t){var n,r,i=e.level+2;for(n=t+2,r=e.tokens.length-2;n<r;n++)e.tokens[n].level===i&&"paragraph_open"===e.tokens[n].type&&(e.tokens[n+2].hidden=!0,e.tokens[n].hidden=!0,n+=2)}(e,b),!0}},function(e,t,n){"use strict";var r=n(18).normalizeReference,i=n(18).isSpace;e.exports=function(e,t,n,a){var o,s,c,l,u,p,h,d,m,f,b,g,v,y,j,O,k=0,_=e.bMarks[t]+e.tShift[t],w=e.eMarks[t],E=t+1;if(e.sCount[t]-e.blkIndent>=4)return!1;if(91!==e.src.charCodeAt(_))return!1;for(;++_<w;)if(93===e.src.charCodeAt(_)&&92!==e.src.charCodeAt(_-1)){if(_+1===w)return!1;if(58!==e.src.charCodeAt(_+1))return!1;break}for(l=e.lineMax,j=e.md.block.ruler.getRules("reference"),f=e.parentType,e.parentType="reference";E<l&&!e.isEmpty(E);E++)if(!(e.sCount[E]-e.blkIndent>3||e.sCount[E]<0)){for(y=!1,p=0,h=j.length;p<h;p++)if(j[p](e,E,l,!0)){y=!0;break}if(y)break}for(w=(v=e.getLines(t,E,e.blkIndent,!1).trim()).length,_=1;_<w;_++){if(91===(o=v.charCodeAt(_)))return!1;if(93===o){m=_;break}10===o?k++:92===o&&++_<w&&10===v.charCodeAt(_)&&k++}if(m<0||58!==v.charCodeAt(m+1))return!1;for(_=m+2;_<w;_++)if(10===(o=v.charCodeAt(_)))k++;else if(!i(o))break;if(!(b=e.md.helpers.parseLinkDestination(v,_,w)).ok)return!1;if(u=e.md.normalizeLink(b.str),!e.md.validateLink(u))return!1;for(s=_=b.pos,c=k+=b.lines,g=_;_<w;_++)if(10===(o=v.charCodeAt(_)))k++;else if(!i(o))break;for(b=e.md.helpers.parseLinkTitle(v,_,w),_<w&&g!==_&&b.ok?(O=b.str,_=b.pos,k+=b.lines):(O="",_=s,k=c);_<w&&(o=v.charCodeAt(_),i(o));)_++;if(_<w&&10!==v.charCodeAt(_)&&O)for(O="",_=s,k=c;_<w&&(o=v.charCodeAt(_),i(o));)_++;return!(_<w&&10!==v.charCodeAt(_))&&(!!(d=r(v.slice(1,m)))&&(!!a||(void 0===e.env.references&&(e.env.references={}),void 0===e.env.references[d]&&(e.env.references[d]={title:O,href:u}),e.parentType=f,e.line=t+k+1,!0)))}},function(e,t,n){"use strict";var r=n(18).isSpace;e.exports=function(e,t,n,i){var a,o,s,c,l=e.bMarks[t]+e.tShift[t],u=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4)return!1;if(35!==(a=e.src.charCodeAt(l))||l>=u)return!1;for(o=1,a=e.src.charCodeAt(++l);35===a&&l<u&&o<=6;)o++,a=e.src.charCodeAt(++l);return!(o>6||l<u&&!r(a))&&(!!i||(u=e.skipSpacesBack(u,l),(s=e.skipCharsBack(u,35,l))>l&&r(e.src.charCodeAt(s-1))&&(u=s),e.line=t+1,(c=e.push("heading_open","h"+String(o),1)).markup="########".slice(0,o),c.map=[t,e.line],(c=e.push("inline","",0)).content=e.src.slice(l,u).trim(),c.map=[t,e.line],c.children=[],(c=e.push("heading_close","h"+String(o),-1)).markup="########".slice(0,o),!0))}},function(e,t,n){"use strict";e.exports=function(e,t,n){var r,i,a,o,s,c,l,u,p,h,d=t+1,m=e.md.block.ruler.getRules("paragraph");if(e.sCount[t]-e.blkIndent>=4)return!1;for(h=e.parentType,e.parentType="paragraph";d<n&&!e.isEmpty(d);d++)if(!(e.sCount[d]-e.blkIndent>3)){if(e.sCount[d]>=e.blkIndent&&(c=e.bMarks[d]+e.tShift[d])<(l=e.eMarks[d])&&(45===(p=e.src.charCodeAt(c))||61===p)&&(c=e.skipChars(c,p),(c=e.skipSpaces(c))>=l)){u=61===p?1:2;break}if(!(e.sCount[d]<0)){for(i=!1,a=0,o=m.length;a<o;a++)if(m[a](e,d,n,!0)){i=!0;break}if(i)break}}return!!u&&(r=e.getLines(t,d,e.blkIndent,!1).trim(),e.line=d+1,(s=e.push("heading_open","h"+String(u),1)).markup=String.fromCharCode(p),s.map=[t,e.line],(s=e.push("inline","",0)).content=r,s.map=[t,e.line-1],s.children=[],(s=e.push("heading_close","h"+String(u),-1)).markup=String.fromCharCode(p),e.parentType=h,!0)}},function(e,t,n){"use strict";var r=n(162),i=n(85).HTML_OPEN_CLOSE_TAG_RE,a=[[/^<(script|pre|style)(?=(\s|>|$))/i,/<\/(script|pre|style)>/i,!0],[/^<!--/,/-->/,!0],[/^<\?/,/\?>/,!0],[/^<![A-Z]/,/>/,!0],[/^<!\[CDATA\[/,/\]\]>/,!0],[new RegExp("^</?("+r.join("|")+")(?=(\\s|/?>|$))","i"),/^$/,!0],[new RegExp(i.source+"\\s*$"),/^$/,!1]];e.exports=function(e,t,n,r){var i,o,s,c,l=e.bMarks[t]+e.tShift[t],u=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4)return!1;if(!e.md.options.html)return!1;if(60!==e.src.charCodeAt(l))return!1;for(c=e.src.slice(l,u),i=0;i<a.length&&!a[i][0].test(c);i++);if(i===a.length)return!1;if(r)return a[i][2];if(o=t+1,!a[i][1].test(c))for(;o<n&&!(e.sCount[o]<e.blkIndent);o++)if(l=e.bMarks[o]+e.tShift[o],u=e.eMarks[o],c=e.src.slice(l,u),a[i][1].test(c)){0!==c.length&&o++;break}return e.line=o,(s=e.push("html_block","",0)).map=[t,o],s.content=e.getLines(t,o,e.blkIndent,!0),!0}},function(e,t,n){"use strict";e.exports=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","meta","nav","noframes","ol","optgroup","option","p","param","section","source","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"]},function(e,t,n){"use strict";e.exports=function(e,t){var n,r,i,a,o,s,c=t+1,l=e.md.block.ruler.getRules("paragraph"),u=e.lineMax;for(s=e.parentType,e.parentType="paragraph";c<u&&!e.isEmpty(c);c++)if(!(e.sCount[c]-e.blkIndent>3||e.sCount[c]<0)){for(r=!1,i=0,a=l.length;i<a;i++)if(l[i](e,c,u,!0)){r=!0;break}if(r)break}return n=e.getLines(t,c,e.blkIndent,!1).trim(),e.line=c,(o=e.push("paragraph_open","p",1)).map=[t,e.line],(o=e.push("inline","",0)).content=n,o.map=[t,e.line],o.children=[],o=e.push("paragraph_close","p",-1),e.parentType=s,!0}},function(e,t,n){"use strict";var r=n(60),i=n(18).isSpace;function a(e,t,n,r){var a,o,s,c,l,u,p,h;for(this.src=e,this.md=t,this.env=n,this.tokens=r,this.bMarks=[],this.eMarks=[],this.tShift=[],this.sCount=[],this.bsCount=[],this.blkIndent=0,this.line=0,this.lineMax=0,this.tight=!1,this.ddIndent=-1,this.parentType="root",this.level=0,this.result="",h=!1,s=c=u=p=0,l=(o=this.src).length;c<l;c++){if(a=o.charCodeAt(c),!h){if(i(a)){u++,9===a?p+=4-p%4:p++;continue}h=!0}10!==a&&c!==l-1||(10!==a&&c++,this.bMarks.push(s),this.eMarks.push(c),this.tShift.push(u),this.sCount.push(p),this.bsCount.push(0),h=!1,u=0,p=0,s=c+1)}this.bMarks.push(o.length),this.eMarks.push(o.length),this.tShift.push(0),this.sCount.push(0),this.bsCount.push(0),this.lineMax=this.bMarks.length-1}a.prototype.push=function(e,t,n){var i=new r(e,t,n);return i.block=!0,n<0&&this.level--,i.level=this.level,n>0&&this.level++,this.tokens.push(i),i},a.prototype.isEmpty=function(e){return this.bMarks[e]+this.tShift[e]>=this.eMarks[e]},a.prototype.skipEmptyLines=function(e){for(var t=this.lineMax;e<t&&!(this.bMarks[e]+this.tShift[e]<this.eMarks[e]);e++);return e},a.prototype.skipSpaces=function(e){for(var t,n=this.src.length;e<n&&(t=this.src.charCodeAt(e),i(t));e++);return e},a.prototype.skipSpacesBack=function(e,t){if(e<=t)return e;for(;e>t;)if(!i(this.src.charCodeAt(--e)))return e+1;return e},a.prototype.skipChars=function(e,t){for(var n=this.src.length;e<n&&this.src.charCodeAt(e)===t;e++);return e},a.prototype.skipCharsBack=function(e,t,n){if(e<=n)return e;for(;e>n;)if(t!==this.src.charCodeAt(--e))return e+1;return e},a.prototype.getLines=function(e,t,n,r){var a,o,s,c,l,u,p,h=e;if(e>=t)return"";for(u=new Array(t-e),a=0;h<t;h++,a++){for(o=0,p=c=this.bMarks[h],l=h+1<t||r?this.eMarks[h]+1:this.eMarks[h];c<l&&o<n;){if(s=this.src.charCodeAt(c),i(s))9===s?o+=4-(o+this.bsCount[h])%4:o++;else{if(!(c-p<this.tShift[h]))break;o++}c++}u[a]=o>n?new Array(o-n+1).join(" ")+this.src.slice(c,l):this.src.slice(c,l)}return u.join("")},a.prototype.Token=r,e.exports=a},function(e,t,n){"use strict";var r=n(59),i=[["text",n(166)],["newline",n(167)],["escape",n(168)],["backticks",n(169)],["strikethrough",n(86).tokenize],["emphasis",n(87).tokenize],["link",n(170)],["image",n(171)],["autolink",n(172)],["html_inline",n(173)],["entity",n(174)]],a=[["balance_pairs",n(175)],["strikethrough",n(86).postProcess],["emphasis",n(87).postProcess],["text_collapse",n(176)]];function o(){var e;for(this.ruler=new r,e=0;e<i.length;e++)this.ruler.push(i[e][0],i[e][1]);for(this.ruler2=new r,e=0;e<a.length;e++)this.ruler2.push(a[e][0],a[e][1])}o.prototype.skipToken=function(e){var t,n,r=e.pos,i=this.ruler.getRules(""),a=i.length,o=e.md.options.maxNesting,s=e.cache;if(void 0===s[r]){if(e.level<o)for(n=0;n<a&&(e.level++,t=i[n](e,!0),e.level--,!t);n++);else e.pos=e.posMax;t||e.pos++,s[r]=e.pos}else e.pos=s[r]},o.prototype.tokenize=function(e){for(var t,n,r=this.ruler.getRules(""),i=r.length,a=e.posMax,o=e.md.options.maxNesting;e.pos<a;){if(e.level<o)for(n=0;n<i&&!(t=r[n](e,!1));n++);if(t){if(e.pos>=a)break}else e.pending+=e.src[e.pos++]}e.pending&&e.pushPending()},o.prototype.parse=function(e,t,n,r){var i,a,o,s=new this.State(e,t,n,r);for(this.tokenize(s),o=(a=this.ruler2.getRules("")).length,i=0;i<o;i++)a[i](s)},o.prototype.State=n(177),e.exports=o},function(e,t,n){"use strict";function r(e){switch(e){case 10:case 33:case 35:case 36:case 37:case 38:case 42:case 43:case 45:case 58:case 60:case 61:case 62:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 125:case 126:return!0;default:return!1}}e.exports=function(e,t){for(var n=e.pos;n<e.posMax&&!r(e.src.charCodeAt(n));)n++;return n!==e.pos&&(t||(e.pending+=e.src.slice(e.pos,n)),e.pos=n,!0)}},function(e,t,n){"use strict";var r=n(18).isSpace;e.exports=function(e,t){var n,i,a=e.pos;if(10!==e.src.charCodeAt(a))return!1;for(n=e.pending.length-1,i=e.posMax,t||(n>=0&&32===e.pending.charCodeAt(n)?n>=1&&32===e.pending.charCodeAt(n-1)?(e.pending=e.pending.replace(/ +$/,""),e.push("hardbreak","br",0)):(e.pending=e.pending.slice(0,-1),e.push("softbreak","br",0)):e.push("softbreak","br",0)),a++;a<i&&r(e.src.charCodeAt(a));)a++;return e.pos=a,!0}},function(e,t,n){"use strict";for(var r=n(18).isSpace,i=[],a=0;a<256;a++)i.push(0);"\\!\"#$%&'()*+,./:;<=>?@[]^_`{|}~-".split("").forEach(function(e){i[e.charCodeAt(0)]=1}),e.exports=function(e,t){var n,a=e.pos,o=e.posMax;if(92!==e.src.charCodeAt(a))return!1;if(++a<o){if((n=e.src.charCodeAt(a))<256&&0!==i[n])return t||(e.pending+=e.src[a]),e.pos+=2,!0;if(10===n){for(t||e.push("hardbreak","br",0),a++;a<o&&(n=e.src.charCodeAt(a),r(n));)a++;return e.pos=a,!0}}return t||(e.pending+="\\"),e.pos++,!0}},function(e,t,n){"use strict";e.exports=function(e,t){var n,r,i,a,o,s,c=e.pos;if(96!==e.src.charCodeAt(c))return!1;for(n=c,c++,r=e.posMax;c<r&&96===e.src.charCodeAt(c);)c++;for(i=e.src.slice(n,c),a=o=c;-1!==(a=e.src.indexOf("`",o));){for(o=a+1;o<r&&96===e.src.charCodeAt(o);)o++;if(o-a===i.length)return t||((s=e.push("code_inline","code",0)).markup=i,s.content=e.src.slice(c,a).replace(/[ \n]+/g," ").trim()),e.pos=o,!0}return t||(e.pending+=i),e.pos+=i.length,!0}},function(e,t,n){"use strict";var r=n(18).normalizeReference,i=n(18).isSpace;e.exports=function(e,t){var n,a,o,s,c,l,u,p,h,d="",m=e.pos,f=e.posMax,b=e.pos,g=!0;if(91!==e.src.charCodeAt(e.pos))return!1;if(c=e.pos+1,(s=e.md.helpers.parseLinkLabel(e,e.pos,!0))<0)return!1;if((l=s+1)<f&&40===e.src.charCodeAt(l)){for(g=!1,l++;l<f&&(a=e.src.charCodeAt(l),i(a)||10===a);l++);if(l>=f)return!1;for(b=l,(u=e.md.helpers.parseLinkDestination(e.src,l,e.posMax)).ok&&(d=e.md.normalizeLink(u.str),e.md.validateLink(d)?l=u.pos:d=""),b=l;l<f&&(a=e.src.charCodeAt(l),i(a)||10===a);l++);if(u=e.md.helpers.parseLinkTitle(e.src,l,e.posMax),l<f&&b!==l&&u.ok)for(h=u.str,l=u.pos;l<f&&(a=e.src.charCodeAt(l),i(a)||10===a);l++);else h="";(l>=f||41!==e.src.charCodeAt(l))&&(g=!0),l++}if(g){if(void 0===e.env.references)return!1;if(l<f&&91===e.src.charCodeAt(l)?(b=l+1,(l=e.md.helpers.parseLinkLabel(e,l))>=0?o=e.src.slice(b,l++):l=s+1):l=s+1,o||(o=e.src.slice(c,s)),!(p=e.env.references[r(o)]))return e.pos=m,!1;d=p.href,h=p.title}return t||(e.pos=c,e.posMax=s,e.push("link_open","a",1).attrs=n=[["href",d]],h&&n.push(["title",h]),e.md.inline.tokenize(e),e.push("link_close","a",-1)),e.pos=l,e.posMax=f,!0}},function(e,t,n){"use strict";var r=n(18).normalizeReference,i=n(18).isSpace;e.exports=function(e,t){var n,a,o,s,c,l,u,p,h,d,m,f,b,g="",v=e.pos,y=e.posMax;if(33!==e.src.charCodeAt(e.pos))return!1;if(91!==e.src.charCodeAt(e.pos+1))return!1;if(l=e.pos+2,(c=e.md.helpers.parseLinkLabel(e,e.pos+1,!1))<0)return!1;if((u=c+1)<y&&40===e.src.charCodeAt(u)){for(u++;u<y&&(a=e.src.charCodeAt(u),i(a)||10===a);u++);if(u>=y)return!1;for(b=u,(h=e.md.helpers.parseLinkDestination(e.src,u,e.posMax)).ok&&(g=e.md.normalizeLink(h.str),e.md.validateLink(g)?u=h.pos:g=""),b=u;u<y&&(a=e.src.charCodeAt(u),i(a)||10===a);u++);if(h=e.md.helpers.parseLinkTitle(e.src,u,e.posMax),u<y&&b!==u&&h.ok)for(d=h.str,u=h.pos;u<y&&(a=e.src.charCodeAt(u),i(a)||10===a);u++);else d="";if(u>=y||41!==e.src.charCodeAt(u))return e.pos=v,!1;u++}else{if(void 0===e.env.references)return!1;if(u<y&&91===e.src.charCodeAt(u)?(b=u+1,(u=e.md.helpers.parseLinkLabel(e,u))>=0?s=e.src.slice(b,u++):u=c+1):u=c+1,s||(s=e.src.slice(l,c)),!(p=e.env.references[r(s)]))return e.pos=v,!1;g=p.href,d=p.title}return t||(o=e.src.slice(l,c),e.md.inline.parse(o,e.md,e.env,f=[]),(m=e.push("image","img",0)).attrs=n=[["src",g],["alt",""]],m.children=f,m.content=o,d&&n.push(["title",d])),e.pos=u,e.posMax=y,!0}},function(e,t,n){"use strict";var r=/^<([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/,i=/^<([a-zA-Z][a-zA-Z0-9+.\-]{1,31}):([^<>\x00-\x20]*)>/;e.exports=function(e,t){var n,a,o,s,c,l,u=e.pos;return 60===e.src.charCodeAt(u)&&(!((n=e.src.slice(u)).indexOf(">")<0)&&(i.test(n)?(s=(a=n.match(i))[0].slice(1,-1),c=e.md.normalizeLink(s),!!e.md.validateLink(c)&&(t||((l=e.push("link_open","a",1)).attrs=[["href",c]],l.markup="autolink",l.info="auto",(l=e.push("text","",0)).content=e.md.normalizeLinkText(s),(l=e.push("link_close","a",-1)).markup="autolink",l.info="auto"),e.pos+=a[0].length,!0)):!!r.test(n)&&(s=(o=n.match(r))[0].slice(1,-1),c=e.md.normalizeLink("mailto:"+s),!!e.md.validateLink(c)&&(t||((l=e.push("link_open","a",1)).attrs=[["href",c]],l.markup="autolink",l.info="auto",(l=e.push("text","",0)).content=e.md.normalizeLinkText(s),(l=e.push("link_close","a",-1)).markup="autolink",l.info="auto"),e.pos+=o[0].length,!0))))}},function(e,t,n){"use strict";var r=n(85).HTML_TAG_RE;e.exports=function(e,t){var n,i,a,o=e.pos;return!!e.md.options.html&&(a=e.posMax,!(60!==e.src.charCodeAt(o)||o+2>=a)&&(!(33!==(n=e.src.charCodeAt(o+1))&&63!==n&&47!==n&&!function(e){var t=32|e;return t>=97&&t<=122}(n))&&(!!(i=e.src.slice(o).match(r))&&(t||(e.push("html_inline","",0).content=e.src.slice(o,o+i[0].length)),e.pos+=i[0].length,!0))))}},function(e,t,n){"use strict";var r=n(80),i=n(18).has,a=n(18).isValidEntityCode,o=n(18).fromCodePoint,s=/^&#((?:x[a-f0-9]{1,8}|[0-9]{1,8}));/i,c=/^&([a-z][a-z0-9]{1,31});/i;e.exports=function(e,t){var n,l,u=e.pos,p=e.posMax;if(38!==e.src.charCodeAt(u))return!1;if(u+1<p)if(35===e.src.charCodeAt(u+1)){if(l=e.src.slice(u).match(s))return t||(n="x"===l[1][0].toLowerCase()?parseInt(l[1].slice(1),16):parseInt(l[1],10),e.pending+=a(n)?o(n):o(65533)),e.pos+=l[0].length,!0}else if((l=e.src.slice(u).match(c))&&i(r,l[1]))return t||(e.pending+=r[l[1]]),e.pos+=l[0].length,!0;return t||(e.pending+="&"),e.pos++,!0}},function(e,t,n){"use strict";e.exports=function(e){var t,n,r,i,a=e.delimiters,o=e.delimiters.length;for(t=0;t<o;t++)if((r=a[t]).close)for(n=t-r.jump-1;n>=0;){if((i=a[n]).open&&i.marker===r.marker&&i.end<0&&i.level===r.level)if(!((i.close||r.open)&&void 0!==i.length&&void 0!==r.length&&(i.length+r.length)%3==0)){r.jump=t-n,r.open=!1,i.end=t,i.jump=0;break}n-=i.jump+1}}},function(e,t,n){"use strict";e.exports=function(e){var t,n,r=0,i=e.tokens,a=e.tokens.length;for(t=n=0;t<a;t++)r+=i[t].nesting,i[t].level=r,"text"===i[t].type&&t+1<a&&"text"===i[t+1].type?i[t+1].content=i[t].content+i[t+1].content:(t!==n&&(i[n]=i[t]),n++);t!==n&&(i.length=n)}},function(e,t,n){"use strict";var r=n(60),i=n(18).isWhiteSpace,a=n(18).isPunctChar,o=n(18).isMdAsciiPunct;function s(e,t,n,r){this.src=e,this.env=n,this.md=t,this.tokens=r,this.pos=0,this.posMax=this.src.length,this.level=0,this.pending="",this.pendingLevel=0,this.cache={},this.delimiters=[]}s.prototype.pushPending=function(){var e=new r("text","",0);return e.content=this.pending,e.level=this.pendingLevel,this.tokens.push(e),this.pending="",e},s.prototype.push=function(e,t,n){this.pending&&this.pushPending();var i=new r(e,t,n);return n<0&&this.level--,i.level=this.level,n>0&&this.level++,this.pendingLevel=this.level,this.tokens.push(i),i},s.prototype.scanDelims=function(e,t){var n,r,s,c,l,u,p,h,d,m=e,f=!0,b=!0,g=this.posMax,v=this.src.charCodeAt(e);for(n=e>0?this.src.charCodeAt(e-1):32;m<g&&this.src.charCodeAt(m)===v;)m++;return s=m-e,r=m<g?this.src.charCodeAt(m):32,p=o(n)||a(String.fromCharCode(n)),d=o(r)||a(String.fromCharCode(r)),u=i(n),(h=i(r))?f=!1:d&&(u||p||(f=!1)),u?b=!1:p&&(h||d||(b=!1)),t?(c=f,l=b):(c=f&&(!b||p),l=b&&(!f||d)),{can_open:c,can_close:l,length:s}},s.prototype.Token=r,e.exports=s},function(e,t,n){"use strict";function r(e){return Array.prototype.slice.call(arguments,1).forEach(function(t){t&&Object.keys(t).forEach(function(n){e[n]=t[n]})}),e}function i(e){return Object.prototype.toString.call(e)}function a(e){return"[object Function]"===i(e)}function o(e){return e.replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}var s={fuzzyLink:!0,fuzzyEmail:!0,fuzzyIP:!1};var c={"http:":{validate:function(e,t,n){var r=e.slice(t);return n.re.http||(n.re.http=new RegExp("^\\/\\/"+n.re.src_auth+n.re.src_host_port_strict+n.re.src_path,"i")),n.re.http.test(r)?r.match(n.re.http)[0].length:0}},"https:":"http:","ftp:":"http:","//":{validate:function(e,t,n){var r=e.slice(t);return n.re.no_http||(n.re.no_http=new RegExp("^"+n.re.src_auth+"(?:localhost|(?:(?:"+n.re.src_domain+")\\.)+"+n.re.src_domain_root+")"+n.re.src_port+n.re.src_host_terminator+n.re.src_path,"i")),n.re.no_http.test(r)?t>=3&&":"===e[t-3]?0:t>=3&&"/"===e[t-3]?0:r.match(n.re.no_http)[0].length:0}},"mailto:":{validate:function(e,t,n){var r=e.slice(t);return n.re.mailto||(n.re.mailto=new RegExp("^"+n.re.src_email_name+"@"+n.re.src_host_strict,"i")),n.re.mailto.test(r)?r.match(n.re.mailto)[0].length:0}}},l="a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]",u="biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф".split("|");function p(e){var t=e.re=n(179)(e.__opts__),r=e.__tlds__.slice();function s(e){return e.replace("%TLDS%",t.src_tlds)}e.onCompile(),e.__tlds_replaced__||r.push(l),r.push(t.src_xn),t.src_tlds=r.join("|"),t.email_fuzzy=RegExp(s(t.tpl_email_fuzzy),"i"),t.link_fuzzy=RegExp(s(t.tpl_link_fuzzy),"i"),t.link_no_ip_fuzzy=RegExp(s(t.tpl_link_no_ip_fuzzy),"i"),t.host_fuzzy_test=RegExp(s(t.tpl_host_fuzzy_test),"i");var c=[];function u(e,t){throw new Error('(LinkifyIt) Invalid schema "'+e+'": '+t)}e.__compiled__={},Object.keys(e.__schemas__).forEach(function(t){var n=e.__schemas__[t];if(null!==n){var r,o={validate:null,link:null};if(e.__compiled__[t]=o,"[object Object]"===i(n))return!function(e){return"[object RegExp]"===i(e)}(n.validate)?a(n.validate)?o.validate=n.validate:u(t,n):o.validate=(r=n.validate,function(e,t){var n=e.slice(t);return r.test(n)?n.match(r)[0].length:0}),void(a(n.normalize)?o.normalize=n.normalize:n.normalize?u(t,n):o.normalize=function(e,t){t.normalize(e)});!function(e){return"[object String]"===i(e)}(n)?u(t,n):c.push(t)}}),c.forEach(function(t){e.__compiled__[e.__schemas__[t]]&&(e.__compiled__[t].validate=e.__compiled__[e.__schemas__[t]].validate,e.__compiled__[t].normalize=e.__compiled__[e.__schemas__[t]].normalize)}),e.__compiled__[""]={validate:null,normalize:function(e,t){t.normalize(e)}};var p=Object.keys(e.__compiled__).filter(function(t){return t.length>0&&e.__compiled__[t]}).map(o).join("|");e.re.schema_test=RegExp("(^|(?!_)(?:[><|]|"+t.src_ZPCc+"))("+p+")","i"),e.re.schema_search=RegExp("(^|(?!_)(?:[><|]|"+t.src_ZPCc+"))("+p+")","ig"),e.re.pretest=RegExp("("+e.re.schema_test.source+")|("+e.re.host_fuzzy_test.source+")|@","i"),function(e){e.__index__=-1,e.__text_cache__=""}(e)}function h(e,t){var n=e.__index__,r=e.__last_index__,i=e.__text_cache__.slice(n,r);this.schema=e.__schema__.toLowerCase(),this.index=n+t,this.lastIndex=r+t,this.raw=i,this.text=i,this.url=i}function d(e,t){var n=new h(e,t);return e.__compiled__[n.schema].normalize(n,e),n}function m(e,t){if(!(this instanceof m))return new m(e,t);var n;t||(n=e,Object.keys(n||{}).reduce(function(e,t){return e||s.hasOwnProperty(t)},!1)&&(t=e,e={})),this.__opts__=r({},s,t),this.__index__=-1,this.__last_index__=-1,this.__schema__="",this.__text_cache__="",this.__schemas__=r({},c,e),this.__compiled__={},this.__tlds__=u,this.__tlds_replaced__=!1,this.re={},p(this)}m.prototype.add=function(e,t){return this.__schemas__[e]=t,p(this),this},m.prototype.set=function(e){return this.__opts__=r(this.__opts__,e),this},m.prototype.test=function(e){if(this.__text_cache__=e,this.__index__=-1,!e.length)return!1;var t,n,r,i,a,o,s,c;if(this.re.schema_test.test(e))for((s=this.re.schema_search).lastIndex=0;null!==(t=s.exec(e));)if(i=this.testSchemaAt(e,t[2],s.lastIndex)){this.__schema__=t[2],this.__index__=t.index+t[1].length,this.__last_index__=t.index+t[0].length+i;break}return this.__opts__.fuzzyLink&&this.__compiled__["http:"]&&(c=e.search(this.re.host_fuzzy_test))>=0&&(this.__index__<0||c<this.__index__)&&null!==(n=e.match(this.__opts__.fuzzyIP?this.re.link_fuzzy:this.re.link_no_ip_fuzzy))&&(a=n.index+n[1].length,(this.__index__<0||a<this.__index__)&&(this.__schema__="",this.__index__=a,this.__last_index__=n.index+n[0].length)),this.__opts__.fuzzyEmail&&this.__compiled__["mailto:"]&&e.indexOf("@")>=0&&null!==(r=e.match(this.re.email_fuzzy))&&(a=r.index+r[1].length,o=r.index+r[0].length,(this.__index__<0||a<this.__index__||a===this.__index__&&o>this.__last_index__)&&(this.__schema__="mailto:",this.__index__=a,this.__last_index__=o)),this.__index__>=0},m.prototype.pretest=function(e){return this.re.pretest.test(e)},m.prototype.testSchemaAt=function(e,t,n){return this.__compiled__[t.toLowerCase()]?this.__compiled__[t.toLowerCase()].validate(e,n,this):0},m.prototype.match=function(e){var t=0,n=[];this.__index__>=0&&this.__text_cache__===e&&(n.push(d(this,t)),t=this.__last_index__);for(var r=t?e.slice(t):e;this.test(r);)n.push(d(this,t)),r=r.slice(this.__last_index__),t+=this.__last_index__;return n.length?n:null},m.prototype.tlds=function(e,t){return e=Array.isArray(e)?e:[e],t?(this.__tlds__=this.__tlds__.concat(e).sort().filter(function(e,t,n){return e!==n[t-1]}).reverse(),p(this),this):(this.__tlds__=e.slice(),this.__tlds_replaced__=!0,p(this),this)},m.prototype.normalize=function(e){e.schema||(e.url="http://"+e.url),"mailto:"!==e.schema||/^mailto:/i.test(e.url)||(e.url="mailto:"+e.url)},m.prototype.onCompile=function(){},e.exports=m},function(e,t,n){"use strict";e.exports=function(e){var t={};t.src_Any=n(82).source,t.src_Cc=n(83).source,t.src_Z=n(84).source,t.src_P=n(58).source,t.src_ZPCc=[t.src_Z,t.src_P,t.src_Cc].join("|"),t.src_ZCc=[t.src_Z,t.src_Cc].join("|");return t.src_pseudo_letter="(?:(?![><|]|"+t.src_ZPCc+")"+t.src_Any+")",t.src_ip4="(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)",t.src_auth="(?:(?:(?!"+t.src_ZCc+"|[@/\\[\\]()]).)+@)?",t.src_port="(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?",t.src_host_terminator="(?=$|[><|]|"+t.src_ZPCc+")(?!-|_|:\\d|\\.-|\\.(?!$|"+t.src_ZPCc+"))",t.src_path="(?:[/?#](?:(?!"+t.src_ZCc+"|[><|]|[()[\\]{}.,\"'?!\\-]).|\\[(?:(?!"+t.src_ZCc+"|\\]).)*\\]|\\((?:(?!"+t.src_ZCc+"|[)]).)*\\)|\\{(?:(?!"+t.src_ZCc+'|[}]).)*\\}|\\"(?:(?!'+t.src_ZCc+'|["]).)+\\"|\\\'(?:(?!'+t.src_ZCc+"|[']).)+\\'|\\'(?="+t.src_pseudo_letter+"|[-]).|\\.{2,3}[a-zA-Z0-9%/]|\\.(?!"+t.src_ZCc+"|[.]).|"+(e&&e["---"]?"\\-(?!--(?:[^-]|$))(?:-*)|":"\\-+|")+"\\,(?!"+t.src_ZCc+").|\\!(?!"+t.src_ZCc+"|[!]).|\\?(?!"+t.src_ZCc+"|[?]).)+|\\/)?",t.src_email_name='[\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]+',t.src_xn="xn--[a-z0-9\\-]{1,59}",t.src_domain_root="(?:"+t.src_xn+"|"+t.src_pseudo_letter+"{1,63})",t.src_domain="(?:"+t.src_xn+"|(?:"+t.src_pseudo_letter+")|(?:"+t.src_pseudo_letter+"(?:-|"+t.src_pseudo_letter+"){0,61}"+t.src_pseudo_letter+"))",t.src_host="(?:(?:(?:(?:"+t.src_domain+")\\.)*"+t.src_domain+"))",t.tpl_host_fuzzy="(?:"+t.src_ip4+"|(?:(?:(?:"+t.src_domain+")\\.)+(?:%TLDS%)))",t.tpl_host_no_ip_fuzzy="(?:(?:(?:"+t.src_domain+")\\.)+(?:%TLDS%))",t.src_host_strict=t.src_host+t.src_host_terminator,t.tpl_host_fuzzy_strict=t.tpl_host_fuzzy+t.src_host_terminator,t.src_host_port_strict=t.src_host+t.src_port+t.src_host_terminator,t.tpl_host_port_fuzzy_strict=t.tpl_host_fuzzy+t.src_port+t.src_host_terminator,t.tpl_host_port_no_ip_fuzzy_strict=t.tpl_host_no_ip_fuzzy+t.src_port+t.src_host_terminator,t.tpl_host_fuzzy_test="localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:"+t.src_ZPCc+"|>|$))",t.tpl_email_fuzzy="(^|[><|]|\\(|"+t.src_ZCc+")("+t.src_email_name+"@"+t.tpl_host_fuzzy_strict+")",t.tpl_link_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`||]|"+t.src_ZPCc+"))((?![$+<=>^`||])"+t.tpl_host_port_fuzzy_strict+t.src_path+")",t.tpl_link_no_ip_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`||]|"+t.src_ZPCc+"))((?![$+<=>^`||])"+t.tpl_host_port_no_ip_fuzzy_strict+t.src_path+")",t}},function(e,t,n){"use strict";e.exports={options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:100},components:{core:{},block:{},inline:{}}}},function(e,t,n){"use strict";e.exports={options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:20},components:{core:{rules:["normalize","block","inline"]},block:{rules:["paragraph"]},inline:{rules:["text"],rules2:["balance_pairs","text_collapse"]}}}},function(e,t,n){"use strict";e.exports={options:{html:!0,xhtmlOut:!0,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:20},components:{core:{rules:["normalize","block","inline"]},block:{rules:["blockquote","code","fence","heading","hr","html_block","lheading","list","reference","paragraph"]},inline:{rules:["autolink","backticks","emphasis","entity","escape","html_inline","image","link","newline","text"],rules2:["balance_pairs","emphasis","text_collapse"]}}}},function(e,t,n){},,function(e,t,n){},,function(e,t,n){var r=n(188),i=n(227);e.exports=function(e,t){for(var n=0,a=(t=r(t,e)).length;null!=e&&n<a;)e=e[i(t[n++])];return n&&n==a?e:void 0}},function(e,t,n){var r=n(61),i=n(189),a=n(194),o=n(224);e.exports=function(e,t){return r(e)?e:i(e,t)?[e]:a(o(e))}},function(e,t,n){var r=n(61),i=n(62),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,o=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!i(e))||o.test(e)||!a.test(e)||null!=t&&e in Object(t)}},function(e,t){var n="object"==typeof window&&window&&window.Object===Object&&window;e.exports=n},function(e,t,n){var r=n(63),i=Object.prototype,a=i.hasOwnProperty,o=i.toString,s=r?r.toStringTag:void 0;e.exports=function(e){var t=a.call(e,s),n=e[s];try{e[s]=void 0;var r=!0}catch(c){}var i=o.call(e);return r&&(t?e[s]=n:delete e[s]),i}},function(e,t){var n=Object.prototype.toString;e.exports=function(e){return n.call(e)}},function(e,t){e.exports=function(e){return null!=e&&"object"==typeof e}},function(e,t,n){var r=n(195),i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,a=/\\(\\)?/g,o=r(function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(i,function(e,n,r,i){t.push(r?i.replace(a,"$1"):n||e)}),t});e.exports=o},function(e,t,n){var r=n(196),i=500;e.exports=function(e){var t=r(e,function(e){return n.size===i&&n.clear(),e}),n=t.cache;return t}},function(e,t,n){var r=n(197),i="Expected a function";function a(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError(i);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var o=e.apply(this,r);return n.cache=a.set(i,o)||a,o};return n.cache=new(a.Cache||r),n}a.Cache=r,e.exports=a},function(e,t,n){var r=n(198),i=n(219),a=n(221),o=n(222),s=n(223);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=a,c.prototype.has=o,c.prototype.set=s,e.exports=c},function(e,t,n){var r=n(199),i=n(211),a=n(218);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||i),string:new r}}},function(e,t,n){var r=n(200),i=n(207),a=n(208),o=n(209),s=n(210);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=a,c.prototype.has=o,c.prototype.set=s,e.exports=c},function(e,t,n){var r=n(48);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},function(e,t,n){var r=n(202),i=n(203),a=n(92),o=n(205),s=/^\[object .+?Constructor\]$/,c=Function.prototype,l=Object.prototype,u=c.toString,p=l.hasOwnProperty,h=RegExp("^"+u.call(p).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!a(e)||i(e))&&(r(e)?h:s).test(o(e))}},function(e,t,n){var r=n(90),i=n(92),a="[object AsyncFunction]",o="[object Function]",s="[object GeneratorFunction]",c="[object Proxy]";e.exports=function(e){if(!i(e))return!1;var t=r(e);return t==o||t==s||t==a||t==c}},function(e,t,n){var r,i=n(204),a=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";e.exports=function(e){return!!a&&a in e}},function(e,t,n){var r=n(64)["__core-js_shared__"];e.exports=r},function(e,t){var n=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return n.call(e)}catch(t){}try{return e+""}catch(t){}}return""}},function(e,t){e.exports=function(e,t){return null==e?void 0:e[t]}},function(e,t){e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},function(e,t,n){var r=n(48),i="__lodash_hash_undefined__",a=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return n===i?void 0:n}return a.call(t,e)?t[e]:void 0}},function(e,t,n){var r=n(48),i=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:i.call(t,e)}},function(e,t,n){var r=n(48),i="__lodash_hash_undefined__";e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?i:t,this}},function(e,t,n){var r=n(212),i=n(213),a=n(215),o=n(216),s=n(217);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=a,c.prototype.has=o,c.prototype.set=s,e.exports=c},function(e,t){e.exports=function(){this.__data__=[],this.size=0}},function(e,t,n){var r=n(49),i=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0||(n==t.length-1?t.pop():i.call(t,n,1),--this.size,0))}},function(e,t){e.exports=function(e,t){return e===t||e!=e&&t!=t}},function(e,t,n){var r=n(49);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},function(e,t,n){var r=n(49);e.exports=function(e){return r(this.__data__,e)>-1}},function(e,t,n){var r=n(49);e.exports=function(e,t){var n=this.__data__,i=r(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this}},function(e,t,n){var r=n(91)(n(64),"Map");e.exports=r},function(e,t,n){var r=n(50);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},function(e,t){e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},function(e,t,n){var r=n(50);e.exports=function(e){return r(this,e).get(e)}},function(e,t,n){var r=n(50);e.exports=function(e){return r(this,e).has(e)}},function(e,t,n){var r=n(50);e.exports=function(e,t){var n=r(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this}},function(e,t,n){var r=n(225);e.exports=function(e){return null==e?"":r(e)}},function(e,t,n){var r=n(63),i=n(226),a=n(61),o=n(62),s=1/0,c=r?r.prototype:void 0,l=c?c.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(a(t))return i(t,e)+"";if(o(t))return l?l.call(t):"";var n=t+"";return"0"==n&&1/t==-s?"-0":n}},function(e,t){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}},function(e,t,n){var r=n(62),i=1/0;e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-i?"-0":t}},function(e,t,n){(function(e){var r;/*! https://mths.be/punycode v1.3.2 by @mathias */!function(i){t&&t.nodeType,e&&e.nodeType;var a="object"==typeof window&&window;a.global!==a&&a.window!==a&&a.self;var o,s=2147483647,c=36,l=1,u=26,p=38,h=700,d=72,m=128,f="-",b=/^xn--/,g=/[^\x20-\x7E]/,v=/[\x2E\u3002\uFF0E\uFF61]/g,y={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},j=c-l,O=Math.floor,k=String.fromCharCode;function _(e){throw RangeError(y[e])}function w(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}function E(e,t){var n=e.split("@"),r="";return n.length>1&&(r=n[0]+"@",e=n[1]),r+w((e=e.replace(v,".")).split("."),t).join(".")}function C(e){for(var t,n,r=[],i=0,a=e.length;i<a;)(t=e.charCodeAt(i++))>=55296&&t<=56319&&i<a?56320==(64512&(n=e.charCodeAt(i++)))?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),i--):r.push(t);return r}function x(e){return w(e,function(e){var t="";return e>65535&&(t+=k((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=k(e)}).join("")}function S(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function A(e,t,n){var r=0;for(e=n?O(e/h):e>>1,e+=O(e/t);e>j*u>>1;r+=c)e=O(e/j);return O(r+(j+1)*e/(e+p))}function M(e){var t,n,r,i,a,o,p,h,b,g,v,y=[],j=e.length,k=0,w=m,E=d;for((n=e.lastIndexOf(f))<0&&(n=0),r=0;r<n;++r)e.charCodeAt(r)>=128&&_("not-basic"),y.push(e.charCodeAt(r));for(i=n>0?n+1:0;i<j;){for(a=k,o=1,p=c;i>=j&&_("invalid-input"),((h=(v=e.charCodeAt(i++))-48<10?v-22:v-65<26?v-65:v-97<26?v-97:c)>=c||h>O((s-k)/o))&&_("overflow"),k+=h*o,!(h<(b=p<=E?l:p>=E+u?u:p-E));p+=c)o>O(s/(g=c-b))&&_("overflow"),o*=g;E=A(k-a,t=y.length+1,0==a),O(k/t)>s-w&&_("overflow"),w+=O(k/t),k%=t,y.splice(k++,0,w)}return x(y)}function T(e){var t,n,r,i,a,o,p,h,b,g,v,y,j,w,E,x=[];for(y=(e=C(e)).length,t=m,n=0,a=d,o=0;o<y;++o)(v=e[o])<128&&x.push(k(v));for(r=i=x.length,i&&x.push(f);r<y;){for(p=s,o=0;o<y;++o)(v=e[o])>=t&&v<p&&(p=v);for(p-t>O((s-n)/(j=r+1))&&_("overflow"),n+=(p-t)*j,t=p,o=0;o<y;++o)if((v=e[o])<t&&++n>s&&_("overflow"),v==t){for(h=n,b=c;!(h<(g=b<=a?l:b>=a+u?u:b-a));b+=c)E=h-g,w=c-g,x.push(k(S(g+E%w,0))),h=O(E/w);x.push(k(S(h,0))),a=A(n,j,r==i),n=0,++r}++n,++t}return x.join("")}o={version:"1.3.2",ucs2:{decode:C,encode:x},decode:M,encode:T,toASCII:function(e){return E(e,function(e){return g.test(e)?"xn--"+T(e):e})},toUnicode:function(e){return E(e,function(e){return b.test(e)?M(e.slice(4).toLowerCase()):e})}},void 0===(r=function(){return o}.call(t,n,t,e))||(e.exports=r)}()}).call(this,n(89)(e))},function(e,t,n){"use strict";e.exports={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},function(e,t,n){"use strict";t.decode=t.parse=n(231),t.encode=t.stringify=n(232)},function(e,t,n){"use strict";function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports=function(e,t,n,i){t=t||"&",n=n||"=";var a={};if("string"!=typeof e||0===e.length)return a;var o=/\+/g;e=e.split(t);var s=1e3;i&&"number"==typeof i.maxKeys&&(s=i.maxKeys);var c=e.length;s>0&&c>s&&(c=s);for(var l=0;l<c;++l){var u,p,h,d,m=e[l].replace(o,"%20"),f=m.indexOf(n);f>=0?(u=m.substr(0,f),p=m.substr(f+1)):(u=m,p=""),h=decodeURIComponent(u),d=decodeURIComponent(p),r(a,h)?Array.isArray(a[h])?a[h].push(d):a[h]=[a[h],d]:a[h]=d}return a}},function(e,t,n){"use strict";var r=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};e.exports=function(e,t,n,i){return t=t||"&",n=n||"=",null===e&&(e=void 0),"object"==typeof e?Object.keys(e).map(function(i){var a=encodeURIComponent(r(i))+n;return Array.isArray(e[i])?e[i].map(function(e){return a+encodeURIComponent(r(e))}).join(t):a+encodeURIComponent(r(e[i]))}).join(t):i?encodeURIComponent(r(i))+n+encodeURIComponent(r(e)):""}},function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){"use strict";e.exports={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},function(e,t,n){"use strict";t.decode=t.parse=n(249),t.encode=t.stringify=n(250)},function(e,t,n){"use strict";function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports=function(e,t,n,i){t=t||"&",n=n||"=";var a={};if("string"!=typeof e||0===e.length)return a;var o=/\+/g;e=e.split(t);var s=1e3;i&&"number"==typeof i.maxKeys&&(s=i.maxKeys);var c=e.length;s>0&&c>s&&(c=s);for(var l=0;l<c;++l){var u,p,h,d,m=e[l].replace(o,"%20"),f=m.indexOf(n);f>=0?(u=m.substr(0,f),p=m.substr(f+1)):(u=m,p=""),h=decodeURIComponent(u),d=decodeURIComponent(p),r(a,h)?Array.isArray(a[h])?a[h].push(d):a[h]=[a[h],d]:a[h]=d}return a}},function(e,t,n){"use strict";var r=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};e.exports=function(e,t,n,i){return t=t||"&",n=n||"=",null===e&&(e=void 0),"object"==typeof e?Object.keys(e).map(function(i){var a=encodeURIComponent(r(i))+n;return Array.isArray(e[i])?e[i].map(function(e){return a+encodeURIComponent(r(e))}).join(t):a+encodeURIComponent(r(e[i]))}).join(t):i?encodeURIComponent(r(i))+n+encodeURIComponent(r(e)):""}},function(e,t){!function(){"use strict";var t=[],n=3988292384;function r(e){var t,r,i,a,o=-1;for(t=0,i=e.length;t<i;t+=1){for(a=255&(o^e[t]),r=0;r<8;r+=1)1==(1&a)?a=a>>>1^n:a>>>=1;o=o>>>8^a}return-1^o}function i(e,n){var r,a,o;if(void 0!==i.crc&&n&&e||(i.crc=-1,e)){for(r=i.crc,a=0,o=e.length;a<o;a+=1)r=r>>>8^t[255&(r^e[a])];return i.crc=r,-1^r}}!function(){var e,r,i;for(r=0;r<256;r+=1){for(e=r,i=0;i<8;i+=1)1&e?e=n^e>>>1:e>>>=1;t[r]=e>>>0}}(),e.exports=function(e,t){var n;e="string"==typeof e?(n=e,Array.prototype.map.call(n,function(e){return e.charCodeAt(0)})):e;return((t?r(e):i(e))>>>0).toString(16)},e.exports.direct=r,e.exports.table=i}()},function(e,t,n){"use strict";var r=256,i=[],a=window,o=Math.pow(r,6),s=Math.pow(2,52),c=2*s,l=r-1,u=Math.random;function p(e){var t,n=e.length,i=this,a=0,o=i.i=i.j=0,s=i.S=[];for(n||(e=[n++]);a<r;)s[a]=a++;for(a=0;a<r;a++)s[a]=s[o=l&o+e[a%n]+(t=s[a])],s[o]=t;(i.g=function(e){for(var t,n=0,a=i.i,o=i.j,s=i.S;e--;)t=s[a=l&a+1],n=n*r+s[l&(s[a]=s[o=l&o+t])+(s[o]=t)];return i.i=a,i.j=o,n})(r)}function h(e,t){for(var n,r=e+"",i=0;i<r.length;)t[l&i]=l&(n^=19*t[l&i])+r.charCodeAt(i++);return d(t)}function d(e){return String.fromCharCode.apply(0,e)}e.exports=function(t,n){if(n&&!0===n.global)return n.global=!1,Math.random=e.exports(t,n),n.global=!0,Math.random;var l=[],u=(h(function e(t,n){var r,i=[],a=(typeof t)[0];if(n&&"o"==a)for(r in t)try{i.push(e(t[r],n-1))}catch(o){}return i.length?i:"s"==a?t:t+"\0"}(n&&n.entropy||!1?[t,d(i)]:0 in arguments?t:function(e){try{return a.crypto.getRandomValues(e=new Uint8Array(r)),d(e)}catch(t){return[+new Date,a,a.navigator&&a.navigator.plugins,a.screen,d(i)]}}(),3),l),new p(l));return h(d(u.S),i),function(){for(var e=u.g(6),t=o,n=0;e<s;)e=(e+n)*r,t*=r,n=u.g(1);for(;e>=c;)e/=2,t/=2,n>>>=1;return(e+n)/t}},e.exports.resetGlobal=function(){Math.random=u},h(Math.random(),i)},function(e,t,n){function r(){var e;try{e=t.storage.debug}catch(n){}return!e&&"undefined"!=typeof process&&"env"in process&&(e=process.env.DEBUG),e}(t=e.exports=n(254)).log=function(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},t.formatArgs=function(e){var n=this.useColors;if(e[0]=(n?"%c":"")+this.namespace+(n?" %c":" ")+e[0]+(n?"%c ":" ")+"+"+t.humanize(this.diff),!n)return;var r="color: "+this.color;e.splice(1,0,r,"color: inherit");var i=0,a=0;e[0].replace(/%[a-zA-Z%]/g,function(e){"%%"!==e&&(i++,"%c"===e&&(a=i))}),e.splice(a,0,r)},t.save=function(e){try{null==e?t.storage.removeItem("debug"):t.storage.debug=e}catch(n){}},t.load=r,t.useColors=function(){if("undefined"!=typeof window&&window.process&&"renderer"===window.process.type)return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},t.enable(r())},function(e,t,n){function r(e){var n;function r(){if(r.enabled){var e=r,i=+new Date,a=i-(n||i);e.diff=a,e.prev=n,e.curr=i,n=i;for(var o=new Array(arguments.length),s=0;s<o.length;s++)o[s]=arguments[s];o[0]=t.coerce(o[0]),"string"!=typeof o[0]&&o.unshift("%O");var c=0;o[0]=o[0].replace(/%([a-zA-Z%])/g,function(n,r){if("%%"===n)return n;c++;var i=t.formatters[r];if("function"==typeof i){var a=o[c];n=i.call(e,a),o.splice(c,1),c--}return n}),t.formatArgs.call(e,o),(r.log||t.log||console.log.bind(console)).apply(e,o)}}return r.namespace=e,r.enabled=t.enabled(e),r.useColors=t.useColors(),r.color=function(e){var n,r=0;for(n in e)r=(r<<5)-r+e.charCodeAt(n),r|=0;return t.colors[Math.abs(r)%t.colors.length]}(e),r.destroy=i,"function"==typeof t.init&&t.init(r),t.instances.push(r),r}function i(){var e=t.instances.indexOf(this);return-1!==e&&(t.instances.splice(e,1),!0)}(t=e.exports=r.debug=r.default=r).coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){t.enable("")},t.enable=function(e){var n;t.save(e),t.names=[],t.skips=[];var r=("string"==typeof e?e:"").split(/[\s,]+/),i=r.length;for(n=0;n<i;n++)r[n]&&("-"===(e=r[n].replace(/\*/g,".*?"))[0]?t.skips.push(new RegExp("^"+e.substr(1)+"$")):t.names.push(new RegExp("^"+e+"$")));for(n=0;n<t.instances.length;n++){var a=t.instances[n];a.enabled=t.enabled(a.namespace)}},t.enabled=function(e){if("*"===e[e.length-1])return!0;var n,r;for(n=0,r=t.skips.length;n<r;n++)if(t.skips[n].test(e))return!1;for(n=0,r=t.names.length;n<r;n++)if(t.names[n].test(e))return!0;return!1},t.humanize=n(255),t.instances=[],t.names=[],t.skips=[],t.formatters={}},function(e,t){var n=1e3,r=60*n,i=60*r,a=24*i,o=365.25*a;function s(e,t,n){if(!(e<t))return e<1.5*t?Math.floor(e/t)+" "+n:Math.ceil(e/t)+" "+n+"s"}e.exports=function(e,t){t=t||{};var c,l=typeof e;if("string"===l&&e.length>0)return function(e){if((e=String(e)).length>100)return;var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(!t)return;var s=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return s*o;case"days":case"day":case"d":return s*a;case"hours":case"hour":case"hrs":case"hr":case"h":return s*i;case"minutes":case"minute":case"mins":case"min":case"m":return s*r;case"seconds":case"second":case"secs":case"sec":case"s":return s*n;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return s;default:return}}(e);if("number"===l&&!1===isNaN(e))return t.long?s(c=e,a,"day")||s(c,i,"hour")||s(c,r,"minute")||s(c,n,"second")||c+" ms":function(e){if(e>=a)return Math.round(e/a)+"d";if(e>=i)return Math.round(e/i)+"h";if(e>=r)return Math.round(e/r)+"m";if(e>=n)return Math.round(e/n)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},function(e,t,n){},,function(e,t,n){},,function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"save",function(){return At}),n.d(r,"attributes",function(){return Tt}),n.d(r,"support",function(){return zt});var i=n(19),a=n(13),o=n.n(a),s=n(3),c=n.n(s),l=n(0),u=n(16),p=n(5),h=n(2),d=n(1),m=n(21),f=n.n(m),b=n(7),g=n.n(b),v=n(11),y=n.n(v),j=n(8),O=n.n(j),k=n(9),_=n.n(k),w=n(4),E=n.n(w),C=n(10),x=n.n(C),S=n(6),A=[{icon:Object(l.createElement)(h.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(l.createElement)(h.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(l.createElement)(h.Path,{d:"M3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm18-4H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14z"})),title:Object(d.c)("Original","image style"),value:void 0},{icon:Object(l.createElement)(h.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(l.createElement)(h.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(l.createElement)(h.Path,{d:"M3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm11 10h2V5h-4v2h2v8zm7-14H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14z"})),title:Object(d.c)("Black and White","image style"),value:"black-and-white"},{icon:Object(l.createElement)(h.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(l.createElement)(h.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(l.createElement)(h.Path,{d:"M3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm18-4H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14zm-4-4h-4v-2h2c1.1 0 2-.89 2-2V7c0-1.11-.9-2-2-2h-4v2h4v2h-2c-1.1 0-2 .89-2 2v4h6v-2z"})),title:Object(d.c)("Sepia","image style"),value:"sepia"},{icon:Object(l.createElement)(h.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(l.createElement)(h.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(l.createElement)(h.Path,{d:"M21 1H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14zM3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm14 8v-1.5c0-.83-.67-1.5-1.5-1.5.83 0 1.5-.67 1.5-1.5V7c0-1.11-.9-2-2-2h-4v2h4v2h-2v2h2v2h-4v2h4c1.1 0 2-.89 2-2z"})),title:"1977",value:"1977"},{icon:Object(l.createElement)(h.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(l.createElement)(h.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(l.createElement)(h.Path,{d:"M3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm12 10h2V5h-2v4h-2V5h-2v6h4v4zm6-14H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14z"})),title:Object(d.c)("Clarendon","image style"),value:"clarendon"},{icon:Object(l.createElement)(h.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(l.createElement)(h.Path,{fill:"none",d:"M0 0h24v24H0z"}),Object(l.createElement)(h.Path,{d:"M21 1H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14zM3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm14 8v-2c0-1.11-.9-2-2-2h-2V7h4V5h-6v6h4v2h-4v2h4c1.1 0 2-.89 2-2z"})),title:Object(d.c)("Gingham","image style"),value:"gingham"}],M=Object(d.a)("Pick an image filter");function T(e){var t=e.value,n=e.onChange;return Object(l.createElement)(h.Dropdown,{position:"bottom right",className:"editor-block-switcher",contentClassName:"editor-block-switcher__popover",renderToggle:function(e){var t=e.onToggle,n=e.isOpen;return Object(l.createElement)(h.Toolbar,{controls:[{onClick:t,extraProps:{"aria-haspopup":"true","aria-expanded":n},title:M,tooltip:M,icon:Object(l.createElement)(h.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(l.createElement)(h.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(l.createElement)(h.Path,{d:"M19 10v9H4.98V5h9V3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-9h-2zm-2.94-2.06L17 10l.94-2.06L20 7l-2.06-.94L17 4l-.94 2.06L14 7zM12 8l-1.25 2.75L8 12l2.75 1.25L12 16l1.25-2.75L16 12l-2.75-1.25z"}))}]})},renderContent:function(e){var r=e.onClose;return Object(l.createElement)(h.NavigableMenu,{className:"tiled-gallery__filter-picker-menu"},A.map(function(e){var i,a=e.icon,o=e.title,s=e.value;return Object(l.createElement)(h.MenuItem,{className:t===s?"is-active":void 0,icon:a,isSelected:t===s,key:s||"original",onClick:(i=s,function(){n(t===i?void 0:i),r()}),role:"menuitemcheckbox"},o)}))}})}var z=n(34),D=n.n(z),N=n(54),F=n.n(N),P=n(32),R=n(24),I=n(15),L=n(12),B=n.n(L),q=n(28),V=n(17),H=function(e){function t(){var e,n;g()(this,t);for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];return n=O()(this,(e=_()(t)).call.apply(e,[this].concat(i))),c()(E()(n),"img",Object(l.createRef)()),c()(E()(n),"onImageClick",function(){n.props.isSelected||n.props.onSelect()}),c()(E()(n),"onImageKeyDown",function(e){n.img.current===document.activeElement&&n.props.isSelected&&[q.BACKSPACE,q.DELETE].includes(e.keyCode)&&n.props.onRemove()}),n}return x()(t,e),y()(t,[{key:"componentDidUpdate",value:function(){var e=this.props,t=e.alt,n=e.height,r=e.image,i=e.link,a=e.url,o=e.width;if(r){var s={};!t&&r.alt_text&&(s.alt=r.alt_text),!n&&r.media_details&&r.media_details.height&&(s.height=+r.media_details.height),!i&&r.link&&(s.link=r.link),!a&&r.source_url&&(s.url=r.source_url),!o&&r.media_details&&r.media_details.width&&(s.width=+r.media_details.width),Object.keys(s).length&&this.props.setAttributes(s)}}},{key:"render",value:function(){var e,t=this.props,n=t["aria-label"],r=t.alt,i=t.height,a=t.id,o=t.imageFilter,s=t.isSelected,u=t.link,p=t.linkTo,m=t.onRemove,f=t.origUrl,b=t.url,g=t.width;switch(p){case"media":e=b;break;case"attachment":e=u}var v=Object(l.createElement)(l.Fragment,null,Object(l.createElement)("img",{alt:r,"aria-label":n,"data-height":i,"data-id":a,"data-link":u,"data-url":f,"data-width":g,onClick:this.onImageClick,onKeyDown:this.onImageKeyDown,ref:this.img,src:b,tabIndex:"0"}),Object(R.isBlobURL)(f)&&Object(l.createElement)(h.Spinner,null));return Object(l.createElement)("figure",{className:B()("tiled-gallery__item",c()({"is-selected":s,"is-transient":Object(R.isBlobURL)(f)},"filter__".concat(o),!!o))},s&&Object(l.createElement)("div",{className:"tiled-gallery__item__inline-menu"},Object(l.createElement)(h.IconButton,{icon:"no-alt",onClick:m,className:"tiled-gallery__item__remove",label:Object(d.a)("Remove Image")})),e?Object(l.createElement)("a",null,v):v)}}]),t}(l.Component),U=Object(V.withSelect)(function(e,t){var n=e("core").getMedia,r=t.id;return{image:r?n(r):null}})(H);function G(e){var t,n=e.alt,r=e.imageFilter,i=e.height,a=e.id,o=e.link,s=e.linkTo,u=e.origUrl,p=e.url,h=e.width;if(Object(R.isBlobURL)(u))return null;switch(s){case"media":t=p;break;case"attachment":t=o}var d=Object(l.createElement)("img",{alt:n,"data-height":i,"data-id":a,"data-link":o,"data-url":u,"data-width":h,src:p});return Object(l.createElement)("figure",{className:B()("tiled-gallery__item",c()({},"filter__".concat(r),!!r))},t?Object(l.createElement)("a",{href:t},d):d)}var $=n(31);function K(e){var t=e.children;return Object(l.createElement)("div",{className:"tiled-gallery__col"},t)}function Z(e){var t=e.children,n=e.galleryRef;return Object(l.createElement)("div",{className:"tiled-gallery__gallery",ref:n},t)}function W(e){var t=e.children,n=e.className;return Object(l.createElement)("div",{className:B()("tiled-gallery__row",n)},t)}var J=n(44);function Y(e){var t=e.height,n=e.width;return t&&n?n/t:1}var X=ge([2,1,2],5),Q=ve([ye,ye,je,ye,ye]),ee=ve([ye,ye,ye,je,ye,ye,ye]),te=ge([3,1,3],5),ne=ve([je,ye,ye,je]),re=ge([1,2,1],5),ie=ve([je,ye,ye,ye]),ae=ge([1,3],3),oe=ve([ye,ye,ye,je]),se=ge([3,1],3),ce=ve([ke(1.6),Object(p.overEvery)(Oe(.9),ke(2)),Object(p.overEvery)(Oe(.9),ke(2))]),le=ge([1,2],3),ue=ge([1,1,1,1,1],1),pe=ge([1,1,1,1],1),he=ge([1,1,1],3),de=ve([Object(p.overEvery)(Oe(.9),ke(2)),Object(p.overEvery)(Oe(.9),ke(2)),ke(1.6)]),me=ge([2,1],3),fe=ve([function(e){return e>=2}]);function be(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).isWide;return function e(n,r){if(!r.length)return n;var i;i=r.length>15&&Q(r)&&X(n)?[2,1,2]:r.length>15&&ee(r)&&te(n)?[3,1,3]:5!==r.length&&ne(r)&&re(n)?[1,2,1]:ie(r)&&ae(n)?[1,3]:oe(r)&&se(n)?[3,1]:ce(r)&&le(n)?[1,2]:t&&(5===r.length||10!==r.length&&r.length>6)&&ue(n)&&Object(p.sum)(Object(p.take)(r,5))<5?[1,1,1,1,1]:function(e,t){var n=Object(p.sum)(Object(p.take)(t,4));return pe(e)&&n<3.5&&t.length>5||n<7&&4===t.length}(n,r)?[1,1,1,1]:function(e,t,n){var r=Object(p.sum)(Object(p.take)(t,3));return t.length>=3&&4!==t.length&&6!==t.length&&he(e)&&(r<2.5||r<5&&t.length>=3&&t[0]===t[2]||n)}(n,r,t)?[1,1,1]:de(r)&&me(n)?[2,1]:fe(r)?[1]:r.length>3?[1,1]:Array(r.length).fill(1);var a=n.concat([i]),o=Object(p.sum)(i);return e(a,r.slice(o))}([],e)}function ge(e,t){return function(n){return!Object(p.some)(Object(p.takeRight)(n,t),function(t){return Object(p.isEqual)(t,e)})}}function ve(e){return function(t){return t.length>=e.length&&Object(p.every)(Object(p.zipWith)(e,t.slice(0,e.length),function(e,t){return e(t)}))}}function ye(e){return e>=1&&e<2}function je(e){return e<1}function Oe(e){return function(t){return t>=e}}function ke(e){return function(t){return t<e}}var _e=function(e){function t(){var e,n;g()(this,t);for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];return n=O()(this,(e=_()(t)).call.apply(e,[this].concat(i))),c()(E()(n),"gallery",Object(l.createRef)()),c()(E()(n),"pendingRaf",null),c()(E()(n),"ro",null),c()(E()(n),"handleGalleryResize",function(e){n.pendingRaf&&(cancelAnimationFrame(n.pendingRaf),n.pendingRaf=null),n.pendingRaf=requestAnimationFrame(function(){var t=!0,n=!1,r=void 0;try{for(var i,a=function(){var e=i.value,t=e.contentRect,n=e.target,r=t.width;Object(J.a)(n).forEach(function(e){return Object(J.b)(e,r)})},o=e[Symbol.iterator]();!(t=(i=o.next()).done);t=!0)a()}catch(s){n=!0,r=s}finally{try{t||null==o.return||o.return()}finally{if(n)throw r}}})}),n}return x()(t,e),y()(t,[{key:"componentDidMount",value:function(){this.observeResize()}},{key:"componentWillUnmount",value:function(){this.unobserveResize()}},{key:"componentDidUpdate",value:function(e){e.images!==this.props.images||e.align!==this.props.align?this.triggerResize():"columns"===this.props.layoutStyle&&e.columns!==this.props.columns&&this.triggerResize()}},{key:"triggerResize",value:function(){this.gallery.current&&this.handleGalleryResize([{target:this.gallery.current,contentRect:{width:this.gallery.current.clientWidth}}])}},{key:"observeResize",value:function(){this.triggerResize(),this.ro=new $.a(this.handleGalleryResize),this.gallery.current&&this.ro.observe(this.gallery.current)}},{key:"unobserveResize",value:function(){this.ro&&(this.ro.disconnect(),this.ro=null),this.pendingRaf&&(cancelAnimationFrame(this.pendingRaf),this.pendingRaf=null)}},{key:"render",value:function(){var e=this.props,t=e.align,n=e.columns,r=e.images,i=e.layoutStyle,a=e.renderedImages,o=function(e){return Object(p.map)(e,Y)}(r),s="columns"===i?function(e,t){if(e.length<=t)return[Array(e.length).fill(1)];for(var n=Object(p.sum)(e)/t,r=[],i=e,a=0,o=function(e){var t=Object(p.takeWhile)(i,function(t){var r=a<=(e+1)*n;return r&&(a+=t),r}).length;r.push(t),i=Object(p.drop)(i,t)},s=0;s<t-1;s++)o(s);return r.push(i.length),[r]}(o,n):be(o,{isWide:["full","wide"].includes(t)}),c=0;return Object(l.createElement)(Z,{galleryRef:this.gallery},s.map(function(e,t){return Object(l.createElement)(W,{key:t},e.map(function(e,t){var n=a.slice(c,c+e);return c+=e,Object(l.createElement)(K,{key:t},n)}))}))}}]),t}(l.Component),we=n(22);function Ee(e){var t=e.columns,n=e.renderedImages,r=Math.min(we.h,t),i=n.length%r;return Object(l.createElement)(Z,null,[].concat(f()(i?[Object(p.take)(n,i)]:[]),f()(Object(p.chunk)(Object(p.drop)(n,i),r))).map(function(e,t){return Object(l.createElement)(W,{key:t,className:"columns-".concat(e.length)},e.map(function(e,t){return Object(l.createElement)(K,{key:t},e)}))}))}var Ce=function(e){function t(){return g()(this,t),O()(this,_()(t).apply(this,arguments))}return x()(t,e),y()(t,[{key:"photonize",value:function(e){var t=e.height,n=e.width,r=e.url;if(r){if(Object(R.isBlobURL)(r)||/^https?:\/\/localhost/.test(r))return r;var i=r.split("?",1)[0],a=function(e){var t=Object(P.parse)(e).host;return/\.files\.wordpress\.com$/.test(t)}(r)?Se:F.a;if(xe(this.props.layoutStyle)&&n&&t){var o=Math.min(we.i,n,t);return a(i,{resize:"".concat(o,",").concat(o)})}return a(i)}}},{key:"renderImage",value:function(e,t){var n=this.props,r=n.imageFilter,i=n.images,a=n.isSave,o=n.linkTo,s=n.onRemoveImage,c=n.onSelectImage,u=n.selectedImage,p=n.setImageAttributes,h=Object(I.sprintf)(Object(d.a)("image %1$d of %2$d in gallery"),t+1,i.length),m=a?G:U;return Object(l.createElement)(m,{alt:e.alt,"aria-label":h,height:e.height,id:e.id,imageFilter:r,isSelected:u===t,key:t,link:e.link,linkTo:o,onRemove:a?void 0:s(t),onSelect:a?void 0:c(t),origUrl:e.url,setAttributes:a?void 0:p(t),url:this.photonize(e),width:e.width})}},{key:"render",value:function(){var e=this.props,t=e.align,n=e.children,r=e.className,i=e.columns,a=e.images,o=e.layoutStyle,s=xe(o)?Ee:_e,c=this.props.images.map(this.renderImage,this);return Object(l.createElement)("div",{className:r},Object(l.createElement)(s,{align:t,columns:i,images:a,layoutStyle:o,renderedImages:c}),n)}}]),t}(l.Component);function xe(e){return["circle","square"].includes(e)}function Se(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={width:"w",height:"h",letterboxing:"lb",removeLetterboxing:"ulb"},r=Object(P.parse)(e),i=(r.auth,r.hash,r.port,r.query,r.search,D()(r,["auth","hash","port","query","search"]));return i.query=Object.keys(t).reduce(function(e,r){return Object.assign(e,c()({},n.hasOwnProperty(r)?n[r]:r,t[r]))},{}),Object(P.format)(i)}var Ae=n(101),Me=n.n(Ae);function Te(e,t){var n=function(e,t){var n=!0,r=!1,i=void 0;try{for(var a,o=new Me.a(t).values()[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var s=a.value;if(-1!==s.indexOf("is-style-")){var c=s.substring(9),l=Object(p.find)(e,{name:c});if(l)return l}}}catch(u){r=!0,i=u}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}return Object(p.find)(e,"isDefault")}(e,t);return n?n.name:null}var ze=[{value:"attachment",label:Object(d.a)("Attachment Page")},{value:"media",label:Object(d.a)("Media File")},{value:"none",label:Object(d.a)("None")}];function De(e){return Math.min(3,e.images.length)}var Ne=function(e){var t=Object(p.pick)(e,[["alt"],["id"],["link"]]);return t.url=Object(p.get)(e,["sizes","large","url"])||Object(p.get)(e,["media_details","sizes","large","source_url"])||e.url,t},Fe=function(e){function t(){var e,n;g()(this,t);for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];return n=O()(this,(e=_()(t)).call.apply(e,[this].concat(i))),c()(E()(n),"state",{selectedImage:null}),c()(E()(n),"addFiles",function(e){var t=n.props.attributes.images||[],r=n.props.noticeOperations;Object(S.mediaUpload)({allowedTypes:we.a,filesList:e,onFileChange:function(e){var r=e.map(function(e){return Ne(e)});n.setAttributes({images:t.concat(r)})},onError:r.createErrorNotice})}),c()(E()(n),"onRemoveImage",function(e){return function(){var t=Object(p.filter)(n.props.attributes.images,function(t,n){return e!==n}),r=n.props.attributes.columns;n.setState({selectedImage:null}),n.setAttributes({images:t,columns:r?Math.min(t.length,r):r})}}),c()(E()(n),"onSelectImage",function(e){return function(){n.state.selectedImage!==e&&n.setState({selectedImage:e})}}),c()(E()(n),"onSelectImages",function(e){var t=n.props.attributes.columns;n.setAttributes({columns:t?Math.min(e.length,t):t,images:e.map(function(e){return Ne(e)})})}),c()(E()(n),"setColumnsNumber",function(e){return n.setAttributes({columns:e})}),c()(E()(n),"setImageAttributes",function(e){return function(t){var r=n.props.attributes.images;r[e]&&n.setAttributes({images:[].concat(f()(r.slice(0,e)),[o()({},r[e],t)],f()(r.slice(e+1)))})}}),c()(E()(n),"setLinkTo",function(e){return n.setAttributes({linkTo:e})}),c()(E()(n),"uploadFromFiles",function(e){return n.addFiles(e.target.files)}),n}return x()(t,e),y()(t,[{key:"setAttributes",value:function(e){if(e.ids)throw new Error('The "ids" attribute should not be changed directly. It is managed automatically when "images" attribute changes');e.images&&(e=o()({},e,{ids:e.images.map(function(e){var t=e.id;return parseInt(t,10)})})),this.props.setAttributes(e)}},{key:"render",value:function(){var e=this,t=this.state.selectedImage,n=this.props,r=n.attributes,i=n.isSelected,a=n.className,o=n.noticeOperations,s=n.noticeUI,c=n.setAttributes,u=r.align,p=r.columns,m=void 0===p?De(r):p,f=r.imageFilter,b=r.images,g=r.linkTo,v=Object(l.createElement)(h.DropZone,{onFilesDrop:this.addFiles}),y=Object(l.createElement)(S.BlockControls,null,!!b.length&&Object(l.createElement)(l.Fragment,null,Object(l.createElement)(h.Toolbar,null,Object(l.createElement)(S.MediaUpload,{onSelect:this.onSelectImages,allowedTypes:we.a,multiple:!0,gallery:!0,value:b.map(function(e){return e.id}),render:function(e){var t=e.open;return Object(l.createElement)(h.IconButton,{className:"components-toolbar__control",label:Object(d.a)("Edit Gallery"),icon:"edit",onClick:t})}})),Object(l.createElement)(T,{value:f,onChange:function(t){c({imageFilter:t}),e.setState({selectedImage:null})}})));if(0===b.length)return Object(l.createElement)(l.Fragment,null,y,Object(l.createElement)(S.MediaPlaceholder,{icon:Object(l.createElement)("div",{className:"tiled-gallery__media-placeholder-icon"},Pt),className:a,labels:{title:Object(d.a)("Tiled Gallery"),name:Object(d.a)("images")},onSelect:this.onSelectImages,accept:"image/*",allowedTypes:we.a,multiple:!0,notices:s,onError:o.createErrorNotice}));var j=Te(we.g,r.className);return Object(l.createElement)(l.Fragment,null,y,Object(l.createElement)(S.InspectorControls,null,Object(l.createElement)(h.PanelBody,{title:Object(d.a)("Tiled Gallery settings")},["columns","circle","square"].includes(j)&&b.length>1&&Object(l.createElement)(h.RangeControl,{label:Object(d.a)("Columns"),value:m,onChange:this.setColumnsNumber,min:1,max:Math.min(we.h,b.length)}),Object(l.createElement)(h.SelectControl,{label:Object(d.a)("Link To"),value:g,onChange:this.setLinkTo,options:ze}))),s,Object(l.createElement)(Ce,{align:u,className:a,columns:m,imageFilter:f,images:b,layoutStyle:j,linkTo:g,onRemoveImage:this.onRemoveImage,onSelectImage:this.onSelectImage,selectedImage:i?t:null,setImageAttributes:this.setImageAttributes},v,i&&Object(l.createElement)("div",{className:"tiled-gallery__add-item"},Object(l.createElement)(h.FormFileUpload,{multiple:!0,isLarge:!0,className:"tiled-gallery__add-item-button",onChange:this.uploadFromFiles,accept:"image/*",icon:"insert"},Object(d.a)("Upload an image")))))}}],[{key:"getDerivedStateFromProps",value:function(e,t){return e.isSelected||null===t.selectedImage?null:{selectedImage:null}}}]),t}(l.Component),Pe=Object(h.withNotices)(Fe);n(256);function Re(e){var t,n=e["aria-label"],r=e.alt,i=e.height,a=e.id,o=e.link,s=e.linkTo,c=e.origUrl,u=e.url,p=e.width;if(Object(R.isBlobURL)(c))return null;switch(s){case"media":t=u;break;case"attachment":t=o}var h=Object(l.createElement)("img",{alt:r,"aria-label":n,"data-height":i,"data-id":a,"data-link":o,"data-url":c,"data-width":p,src:u});return Object(l.createElement)("figure",{className:"tiled-gallery__item"},t?Object(l.createElement)("a",{href:t},h):h)}function Ie(e){var t=e.children;return Object(l.createElement)("div",{className:"tiled-gallery__col"},t)}function Le(e){var t=e.children,n=e.galleryRef;return Object(l.createElement)("div",{className:"tiled-gallery__gallery",ref:n},t)}function Be(e){var t=e.children,n=e.className;return Object(l.createElement)("div",{className:B()("tiled-gallery__row",n)},t)}var qe=n(23),Ve=n.n(qe),He=4,Ue=20,Ge=[{isDefault:!0,name:"rectangular"},{name:"circle"},{name:"square"},{name:"columns"}];function $e(e,t){var n=(t-e.reduce(function(e,t){return e+t},0))/e.length;return e.map(function(e){return e+n})}function Ke(e,t){!function(e,t,n){var r=Ve()(t,2),i=r[0],a=r[1],o=1/i*(n-He*(e.childElementCount-1)-a);!function(e,t){var n=t.rawHeight,r=t.rowWidth,i=Ze(e),a=i.map(function(e){return(n-He*(e.childElementCount-1))*Je(e)[0]}),o=$e(a,r);i.forEach(function(e,t){var r=a[t],i=o[t];!function(e,t){var n=t.colHeight,r=t.width,i=t.rawWidth,a=$e(We(e).map(function(e){return i/Ye(e)}),n);Array.from(e.children).forEach(function(e,t){var n=a[t];e.setAttribute("style","height:".concat(n,"px;width:").concat(r,"px;"))})}(e,{colHeight:n-He*(e.childElementCount-1),width:i,rawWidth:r})})}(e,{rawHeight:o,rowWidth:n-He*(e.childElementCount-1)})}(e,function(e){return Ze(e).map(Je).reduce(function(e,t){var n=Ve()(e,2),r=n[0],i=n[1],a=Ve()(t,2),o=a[0],s=a[1];return[r+o,i+s]},[0,0])}(e),t)}function Ze(e){return Array.from(e.querySelectorAll(".tiled-gallery__col"))}function We(e){return Array.from(e.querySelectorAll(".tiled-gallery__item > img, .tiled-gallery__item > a > img"))}function Je(e){var t=We(e),n=t.length,r=1/t.map(Ye).reduce(function(e,t){return e+1/t},0);return[r,r*n||1]}function Ye(e){var t=parseInt(e.dataset.width,10),n=parseInt(e.dataset.height,10);return t&&!Number.isNaN(t)&&n&&!Number.isNaN(n)?t/n:1}function Xe(e){var t=e.height,n=e.width;return t&&n?n/t:1}var Qe=vt([2,1,2],5),et=yt([jt,jt,Ot,jt,jt]),tt=yt([jt,jt,jt,Ot,jt,jt,jt]),nt=vt([3,1,3],5),rt=yt([Ot,jt,jt,Ot]),it=vt([1,2,1],5),at=yt([Ot,jt,jt,jt]),ot=vt([1,3],3),st=yt([jt,jt,jt,Ot]),ct=vt([3,1],3),lt=yt([_t(1.6),Object(p.overEvery)(kt(.9),_t(2)),Object(p.overEvery)(kt(.9),_t(2))]),ut=vt([1,2],3),pt=vt([1,1,1,1,1],1),ht=vt([1,1,1,1],1),dt=vt([1,1,1],3),mt=yt([Object(p.overEvery)(kt(.9),_t(2)),Object(p.overEvery)(kt(.9),_t(2)),_t(1.6)]),ft=vt([2,1],3),bt=yt([function(e){return e>=2}]);function gt(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).isWide;return function e(n,r){if(!r.length)return n;var i;i=r.length>15&&et(r)&&Qe(n)?[2,1,2]:r.length>15&&tt(r)&&nt(n)?[3,1,3]:5!==r.length&&rt(r)&&it(n)?[1,2,1]:at(r)&&ot(n)?[1,3]:st(r)&&ct(n)?[3,1]:lt(r)&&ut(n)?[1,2]:t&&(5===r.length||10!==r.length&&r.length>6)&&pt(n)&&Object(p.sum)(Object(p.take)(r,5))<5?[1,1,1,1,1]:function(e,t){var n=Object(p.sum)(Object(p.take)(t,4));return ht(e)&&n<3.5&&t.length>5||n<7&&4===t.length}(n,r)?[1,1,1,1]:function(e,t,n){var r=Object(p.sum)(Object(p.take)(t,3));return t.length>=3&&4!==t.length&&6!==t.length&&dt(e)&&(r<2.5||r<5&&t.length>=3&&t[0]===t[2]||n)}(n,r,t)?[1,1,1]:mt(r)&&ft(n)?[2,1]:bt(r)?[1]:r.length>3?[1,1]:Array(r.length).fill(1);var a=n.concat([i]),o=Object(p.sum)(i);return e(a,r.slice(o))}([],e)}function vt(e,t){return function(n){return!Object(p.some)(Object(p.takeRight)(n,t),function(t){return Object(p.isEqual)(t,e)})}}function yt(e){return function(t){return t.length>=e.length&&Object(p.every)(Object(p.zipWith)(e,t.slice(0,e.length),function(e,t){return e(t)}))}}function jt(e){return e>=1&&e<2}function Ot(e){return e<1}function kt(e){return function(t){return t>=e}}function _t(e){return function(t){return t<e}}var wt=function(e){function t(){var e,n;g()(this,t);for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];return n=O()(this,(e=_()(t)).call.apply(e,[this].concat(i))),c()(E()(n),"gallery",Object(l.createRef)()),c()(E()(n),"pendingRaf",null),c()(E()(n),"ro",null),c()(E()(n),"handleGalleryResize",function(e){n.pendingRaf&&(cancelAnimationFrame(n.pendingRaf),n.pendingRaf=null),n.pendingRaf=requestAnimationFrame(function(){var t=!0,n=!1,r=void 0;try{for(var i,a=function(){var e,t=i.value,n=t.contentRect,r=t.target,a=n.width;(e=r,Array.from(e.querySelectorAll(".tiled-gallery__row"))).forEach(function(e){return Ke(e,a)})},o=e[Symbol.iterator]();!(t=(i=o.next()).done);t=!0)a()}catch(s){n=!0,r=s}finally{try{t||null==o.return||o.return()}finally{if(n)throw r}}})}),n}return x()(t,e),y()(t,[{key:"componentDidMount",value:function(){this.observeResize()}},{key:"componentWillUnmount",value:function(){this.unobserveResize()}},{key:"componentDidUpdate",value:function(e){e.images!==this.props.images||e.align!==this.props.align?this.triggerResize():"columns"===this.props.layoutStyle&&e.columns!==this.props.columns&&this.triggerResize()}},{key:"triggerResize",value:function(){this.gallery.current&&this.handleGalleryResize([{target:this.gallery.current,contentRect:{width:this.gallery.current.clientWidth}}])}},{key:"observeResize",value:function(){this.triggerResize(),this.ro=new $.a(this.handleGalleryResize),this.gallery.current&&this.ro.observe(this.gallery.current)}},{key:"unobserveResize",value:function(){this.ro&&(this.ro.disconnect(),this.ro=null),this.pendingRaf&&(cancelAnimationFrame(this.pendingRaf),this.pendingRaf=null)}},{key:"render",value:function(){var e=this.props,t=e.align,n=e.columns,r=e.images,i=e.layoutStyle,a=e.renderedImages,o=function(e){return Object(p.map)(e,Xe)}(r),s="columns"===i?function(e,t){if(e.length<=t)return[Array(e.length).fill(1)];for(var n=Object(p.sum)(e)/t,r=[],i=e,a=0,o=function(e){var t=Object(p.takeWhile)(i,function(t){var r=a<=(e+1)*n;return r&&(a+=t),r}).length;r.push(t),i=Object(p.drop)(i,t)},s=0;s<t-1;s++)o(s);return r.push(i.length),[r]}(o,n):gt(o,{isWide:["full","wide"].includes(t)}),c=0;return Object(l.createElement)(Le,{galleryRef:this.gallery},s.map(function(e,t){return Object(l.createElement)(Be,{key:t},e.map(function(e,t){var n=a.slice(c,c+e);return c+=e,Object(l.createElement)(Ie,{key:t},n)}))}))}}]),t}(l.Component);function Et(e){var t=e.columns,n=e.renderedImages,r=Math.min(Ue,t),i=n.length%r;return Object(l.createElement)(Le,null,[].concat(f()(i?[Object(p.take)(n,i)]:[]),f()(Object(p.chunk)(Object(p.drop)(n,i),r))).map(function(e,t){return Object(l.createElement)(Be,{key:t,className:"columns-".concat(e.length)},e.map(function(e,t){return Object(l.createElement)(Ie,{key:t},e)}))}))}var Ct=function(e){function t(){return g()(this,t),O()(this,_()(t).apply(this,arguments))}return x()(t,e),y()(t,[{key:"photonize",value:function(e){var t=e.height,n=e.width,r=e.url;if(r){if(Object(R.isBlobURL)(r)||/^https?:\/\/localhost/.test(r))return r;var i=r.split("?",1)[0],a=function(e){var t=Object(P.parse)(e).host;return/\.files\.wordpress\.com$/.test(t)}(r)?St:F.a;if(xt(this.props.layoutStyle)&&n&&t){var o=Math.min(2e3,n,t);return a(i,{resize:"".concat(o,",").concat(o)})}return a(i)}}},{key:"renderImage",value:function(e,t){var n=this.props,r=n.images,i=n.linkTo,a=n.selectedImage,o=Object(I.sprintf)(Object(d.a)("image %1$d of %2$d in gallery"),t+1,r.length);return Object(l.createElement)(Re,{alt:e.alt,"aria-label":o,height:e.height,id:e.id,origUrl:e.url,isSelected:a===t,key:t,link:e.link,linkTo:i,url:this.photonize(e),width:e.width})}},{key:"render",value:function(){var e=this.props,t=e.align,n=e.children,r=e.className,i=e.columns,a=e.images,o=e.layoutStyle,s=xt(o)?Et:wt,c=this.props.images.map(this.renderImage,this);return Object(l.createElement)("div",{className:r},Object(l.createElement)(s,{align:t,columns:i,images:a,layoutStyle:o,renderedImages:c}),n)}}]),t}(l.Component);function xt(e){return["circle","square"].includes(e)}function St(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={width:"w",height:"h",letterboxing:"lb",removeLetterboxing:"ulb"},r=Object(P.parse)(e),i=(r.auth,r.hash,r.port,r.query,r.search,D()(r,["auth","hash","port","query","search"]));return i.query=Object.keys(t).reduce(function(e,r){return Object.assign(e,c()({},n.hasOwnProperty(r)?n[r]:r,t[r]))},{}),Object(P.format)(i)}function At(e){var t=e.attributes,n=t.images;if(!n.length)return null;var r=t.align,i=t.className,a=t.columns,o=void 0===a?function(e){return Math.min(3,e.images.length)}(t):a,s=t.linkTo;return Object(l.createElement)(Ct,{align:r,className:i,columns:o,images:n,layoutStyle:Te(Ge,i),linkTo:s})}var Mt,Tt={align:{default:"center",type:"string"},className:{default:"is-style-".concat("rectangular"),type:"string"},columns:{type:"number"},ids:{default:[],type:"array"},images:{type:"array",default:[],source:"query",selector:".tiled-gallery__item",query:{alt:{attribute:"alt",default:"",selector:"img",source:"attribute"},caption:{selector:"figcaption",source:"html",type:"string"},height:{attribute:"data-height",selector:"img",source:"attribute",type:"number"},id:{attribute:"data-id",selector:"img",source:"attribute"},link:{attribute:"data-link",selector:"img",source:"attribute"},url:{attribute:"data-url",selector:"img",source:"attribute"},width:{attribute:"data-width",selector:"img",source:"attribute",type:"number"}}},linkTo:{default:"none",type:"string"}},zt={align:["center","wide","full"],customClassName:!1,html:!1},Dt=(Mt={},c()(Mt,we.e,Object(d.c)("Tiled mosaic","Tiled gallery layout")),c()(Mt,we.c,Object(d.c)("Circles","Tiled gallery layout")),c()(Mt,we.d,Object(d.c)("Tiled columns","Tiled gallery layout")),c()(Mt,we.f,Object(d.c)("Square tiles","Tiled gallery layout")),Mt),Nt=we.g.map(function(e){return o()({},e,{label:Dt[e.name]})}),Ft={align:{default:"center",type:"string"},className:{default:"is-style-".concat(we.e),type:"string"},columns:{type:"number"},ids:{default:[],type:"array"},imageFilter:{type:"string"},images:{type:"array",default:[],source:"query",selector:".tiled-gallery__item",query:{alt:{attribute:"alt",default:"",selector:"img",source:"attribute"},caption:{selector:"figcaption",source:"html",type:"string"},height:{attribute:"data-height",selector:"img",source:"attribute",type:"number"},id:{attribute:"data-id",selector:"img",source:"attribute"},link:{attribute:"data-link",selector:"img",source:"attribute"},url:{attribute:"data-url",selector:"img",source:"attribute"},width:{attribute:"data-width",selector:"img",source:"attribute",type:"number"}}},linkTo:{default:"none",type:"string"}},Pt=Object(l.createElement)(h.SVG,{viewBox:"0 0 24 24",width:24,height:24},Object(l.createElement)(h.Path,{fill:"currentColor",d:"M19 5v2h-4V5h4M9 5v6H5V5h4m10 8v6h-4v-6h4M9 17v2H5v-2h4M21 3h-8v6h8V3zM11 3H3v10h8V3zm10 8h-8v10h8V11zm-10 4H3v6h8v-6z"})),Rt={attributes:Ft,category:"jetpack",description:Object(d.a)("Display multiple images in an elegantly organized tiled layout."),icon:Pt,keywords:[Object(d.c)("images","block search term"),Object(d.c)("photos","block search term"),Object(d.c)("masonry","block search term")],styles:Nt,supports:{align:["center","wide","full"],customClassName:!1,html:!1},title:Object(d.a)("Tiled Gallery"),transforms:{from:[{type:"block",blocks:["core/gallery"],transform:function(e){var t=Object(p.filter)(e.images,function(e){var t=e.id,n=e.url;return t&&n});return t.length>0?Object(u.createBlock)("jetpack/".concat("tiled-gallery"),{images:t.map(function(e){return{id:e.id,url:e.url,alt:e.alt,caption:e.caption}})}):Object(u.createBlock)("jetpack/".concat("tiled-gallery"))}}],to:[{type:"block",blocks:["core/gallery"],transform:function(e){var t=e.images,n=e.columns,r=e.linkTo;return Object(u.createBlock)("core/gallery",{images:t,columns:n,imageCrop:!0,linkTo:r})}},{type:"block",blocks:["core/image"],transform:function(e){var t=e.images;return t.length>0?t.map(function(e){var t=e.id,n=e.url,r=e.alt,i=e.caption;return Object(u.createBlock)("core/image",{id:t,url:n,alt:r,caption:i})}):Object(u.createBlock)("core/image")}}]},edit:Pe,save:function(e){var t=e.attributes,n=t.imageFilter,r=t.images;if(!r.length)return null;var i=t.align,a=t.className,o=t.columns,s=void 0===o?De(t):o,c=t.linkTo;return Object(l.createElement)(Ce,{align:i,className:a,columns:s,imageFilter:n,images:r,isSave:!0,layoutStyle:Te(we.g,a),linkTo:c})},deprecated:[r]};Object(i.a)("tiled-gallery",Rt)},function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"setConnectionTestResults",function(){return u}),n.d(r,"refreshConnectionTestResults",function(){return p}),n.d(r,"fetchFromAPI",function(){return h});var i={};n.r(i),n.d(i,"getFailedConnections",function(){return d}),n.d(i,"getMustReauthConnections",function(){return m});var a=n(0),o=n(2),s=n(40),c=n(6),l=(n(183),n(17));function u(e){return{type:"SET_CONNECTION_TEST_RESULTS",results:e}}function p(){return{type:"REFRESH_CONNECTION_TEST_RESULTS"}}function h(e){return{type:"FETCH_FROM_API",path:e}}function d(e){return e.filter(function(e){return!1===e.test_success})}function m(e){return e.filter(function(e){return"must_reauth"===e.test_success}).map(function(e){return e.service_name})}var f=n(21),b=n.n(f),g=n(97),v=n.n(g),y=n(5),j=n(36),O=n.n(j),k=n(26),_=n.n(k);function w(){return(w=O()(regeneratorRuntime.mark(function e(t,n){var r,i;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r=n.dispatch,e.prev=1,e.next=4,_()({path:"/wpcom/v2/publicize/connection-test-results"});case 4:return i=e.sent,e.abrupt("return",r(u(i)));case 8:e.prev=8,e.t0=e.catch(1);case 10:case"end":return e.stop()}},e,null,[[1,8]])}))).apply(this,arguments)}var E={REFRESH_CONNECTION_TEST_RESULTS:function(e,t){return w.apply(this,arguments)}};var C,x,S,A,M,T={FETCH_FROM_API:function(e){var t=e.path;return _()({path:t})}},z=Object(l.registerStore)("jetpack/publicize",{actions:r,controls:T,reducer:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0;switch(t.type){case"SET_CONNECTION_TEST_RESULTS":return t.results;case"REFRESH_CONNECTION_TEST_RESULTS":return[]}return e},selectors:i});C=z,S=[v()(E)],A=function(){throw new Error("Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.")},M={getState:C.getState,dispatch:function(){return A.apply(void 0,arguments)}},x=S.map(function(e){return e(M)}),A=y.flowRight.apply(void 0,b()(x))(C.dispatch),C.dispatch=A;var D=n(41),N=n(14),F=n(7),P=n.n(F),R=n(11),I=n.n(R),L=n(8),B=n.n(L),q=n(9),V=n.n(q),H=n(4),U=n.n(H),G=n(10),$=n.n(G),K=n(3),Z=n.n(K),W=n(1),J=function(e){function t(){var e,n;P()(this,t);for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];return n=B()(this,(e=V()(t)).call.apply(e,[this].concat(i))),Z()(U()(n),"refreshConnectionClick",function(e){var t=e.target,r=t.href,i=t.title;e.preventDefault();var a=window.open(r,i,""),o=window.setInterval(function(){!1!==a.closed&&(window.clearInterval(o),n.props.refreshConnections())},500)}),n}return $()(t,e),I()(t,[{key:"componentDidMount",value:function(){this.props.refreshConnections()}},{key:"renderRefreshableConnections",value:function(){var e=this,t=this.props.failedConnections.filter(function(e){return e.can_refresh});return t.length?Object(a.createElement)(o.Notice,{className:"jetpack-publicize-notice",isDismissible:!1,status:"error"},Object(a.createElement)("p",null,Object(W.a)("Before you hit Publish, please refresh the following connection(s) to make sure we can Publicize your post:")),t.map(function(t){return Object(a.createElement)(o.Button,{href:t.refresh_url,isSmall:!0,key:t.id,onClick:e.refreshConnectionClick,title:t.refresh_text},t.refresh_text)})):null}},{key:"renderNonRefreshableConnections",value:function(){var e=this.props.failedConnections.filter(function(e){return!e.can_refresh});return e.length?e.map(function(e){return Object(a.createElement)(o.Notice,{className:"jetpack-publicize-notice",isDismissible:!1,status:"error"},Object(a.createElement)("p",null,e.test_message))}):null}},{key:"render",value:function(){return Object(a.createElement)(a.Fragment,null,this.renderRefreshableConnections(),this.renderNonRefreshableConnections())}}]),t}(a.Component),Y=Object(N.compose)([Object(l.withSelect)(function(e){return{failedConnections:e("jetpack/publicize").getFailedConnections()}}),Object(l.withDispatch)(function(e){return{refreshConnections:e("jetpack/publicize").refreshConnectionTestResults}})])(J),X=n(13),Q=n.n(X),ee=n(98),te=n.n(ee),ne=n(12),re=n.n(ne),ie=n(15),ae=n(27),oe=n.n(ae),se=Object(a.createElement)(o.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Object(a.createElement)(o.Rect,{x:"0",fill:"none",width:"24",height:"24"}),Object(a.createElement)(o.G,null,Object(a.createElement)(o.Path,{d:"M20.007 3H3.993C3.445 3 3 3.445 3 3.993v16.013c0 .55.445.994.993.994h8.62v-6.97H10.27V11.31h2.346V9.31c0-2.325 1.42-3.59 3.494-3.59.993 0 1.847.073 2.096.106v2.43h-1.438c-1.128 0-1.346.537-1.346 1.324v1.734h2.69l-.35 2.717h-2.34V21h4.587c.548 0 .993-.445.993-.993V3.993c0-.548-.445-.993-.993-.993z"}))),ce=Object(a.createElement)(o.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Object(a.createElement)(o.Rect,{x:"0",fill:"none",width:"24",height:"24"}),Object(a.createElement)(o.G,null,Object(a.createElement)(o.Path,{d:"M22.23 5.924c-.736.326-1.527.547-2.357.646.847-.508 1.498-1.312 1.804-2.27-.793.47-1.67.812-2.606.996C18.325 4.498 17.258 4 16.078 4c-2.266 0-4.103 1.837-4.103 4.103 0 .322.036.635.106.935-3.41-.17-6.433-1.804-8.457-4.287-.353.607-.556 1.312-.556 2.064 0 1.424.724 2.68 1.825 3.415-.673-.022-1.305-.207-1.86-.514v.052c0 1.988 1.415 3.647 3.293 4.023-.344.095-.707.145-1.08.145-.265 0-.522-.026-.773-.074.522 1.63 2.038 2.817 3.833 2.85-1.404 1.1-3.174 1.757-5.096 1.757-.332 0-.66-.02-.98-.057 1.816 1.164 3.973 1.843 6.29 1.843 7.547 0 11.675-6.252 11.675-11.675 0-.178-.004-.355-.012-.53.802-.578 1.497-1.3 2.047-2.124z"}))),le=Object(a.createElement)(o.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Object(a.createElement)(o.Rect,{x:"0",fill:"none",width:"24",height:"24"}),Object(a.createElement)(o.G,null,Object(a.createElement)(o.Path,{d:"M19.7 3H4.3C3.582 3 3 3.582 3 4.3v15.4c0 .718.582 1.3 1.3 1.3h15.4c.718 0 1.3-.582 1.3-1.3V4.3c0-.718-.582-1.3-1.3-1.3zM8.34 18.338H5.666v-8.59H8.34v8.59zM7.003 8.574c-.857 0-1.55-.694-1.55-1.548 0-.855.692-1.548 1.55-1.548.854 0 1.547.694 1.547 1.548 0 .855-.692 1.548-1.546 1.548zm11.335 9.764h-2.67V14.16c0-.995-.017-2.277-1.387-2.277-1.39 0-1.6 1.086-1.6 2.206v4.248h-2.668v-8.59h2.56v1.174h.036c.357-.675 1.228-1.387 2.527-1.387 2.703 0 3.203 1.78 3.203 4.092v4.71z"}))),ue=Object(a.createElement)(o.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Object(a.createElement)(o.Rect,{x:"0",fill:"none",width:"24",height:"24"}),Object(a.createElement)(o.G,null,Object(a.createElement)(o.Path,{d:"M19 3H5c-1.105 0-2 .895-2 2v14c0 1.105.895 2 2 2h14c1.105 0 2-.895 2-2V5c0-1.105-.895-2-2-2zm-5.57 14.265c-2.445.042-3.37-1.742-3.37-2.998V10.6H8.922V9.15c1.703-.615 2.113-2.15 2.21-3.026.006-.06.053-.084.08-.084h1.645V8.9h2.246v1.7H12.85v3.495c.008.476.182 1.13 1.08 1.107.3-.008.698-.094.907-.194l.54 1.6c-.205.297-1.12.642-1.946.657z"}))),pe=Object(a.createElement)(o.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Object(a.createElement)(o.Rect,{x:"0",fill:"none",width:"24",height:"24"}),Object(a.createElement)(o.G,null,Object(a.createElement)(o.Path,{d:"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm-1.92 14.05c-2.235 0-4.05-1.814-4.05-4.05s1.815-4.05 4.05-4.05c1.095 0 2.01.4 2.71 1.057l-1.15 1.118c-.292-.275-.802-.6-1.56-.6-1.34 0-2.433 1.115-2.433 2.48s1.094 2.48 2.434 2.48c1.552 0 2.123-1.074 2.228-1.71h-2.232v-1.51h3.79c.058.255.102.494.102.83 0 2.312-1.55 3.956-3.887 3.956zm8.92-3.3h-1.25V14h-1.5v-1.25H15v-1.5h1.25V10h1.5v1.25H19v1.5z"}))),he=function(e){var t=e.serviceName,n={className:"jetpack-publicize-gutenberg-social-icon is-".concat(t),size:24};switch(t){case"facebook":return Object(a.createElement)(o.Icon,oe()({icon:se},n));case"twitter":return Object(a.createElement)(o.Icon,oe()({icon:ce},n));case"linkedin":return Object(a.createElement)(o.Icon,oe()({icon:le},n));case"tumblr":return Object(a.createElement)(o.Icon,oe()({icon:ue},n));case"google-plus":return Object(a.createElement)(o.Icon,oe()({icon:pe},n))}return null};n(65),n(66);function de(e){var t=e.split("?")[0],n=t.split("/");if(0===t.indexOf("/checkout/thank-you/no-site/"))return!1;if(0===t.indexOf("/me/purchases/")||0===t.indexOf("/checkout/thank-you/")){var r=n[3];if(r&&-1!==r.indexOf("."))return r;var i=parseInt(r,10);if(Number.isSafeInteger(i))return i}for(var a=2;a>0;a--){var o=n[n.length-a];if(o&&-1!==o.indexOf("."))return o}for(var s=2;s>0;s--){var c=parseInt(n[n.length-s],10);if(Number.isSafeInteger(c))return c}return!1}function me(){if(window&&window._currentSiteId)return window._currentSiteId;var e=de(window.location.pathname);return Object(y.includes)(["post.php","post-new.php"],e)?window&&window.Jetpack_Editor_Initial_State&&window.Jetpack_Editor_Initial_State.siteFragment?window.Jetpack_Editor_Initial_State.siteFragment:null:e||null}var fe=function(e){function t(){var e,n;P()(this,t);for(var r=arguments.length,i=new Array(r),s=0;s<r;s++)i[s]=arguments[s];return n=B()(this,(e=V()(t)).call.apply(e,[this].concat(i))),Z()(U()(n),"state",{showGooglePlusNotice:!0}),Z()(U()(n),"onRemoveGooglePlusNotice",function(){n.setState({showGooglePlusNotice:!1})}),Z()(U()(n),"maybeDisplayGooglePlusNotice",function(e){return"google-plus"===e&&n.state.showGooglePlusNotice&&Object(a.createElement)(o.Notice,{status:"error",onRemove:n.onRemoveGooglePlusNotice},Object(W.a)("Google+ will shut down in April 2019. You can keep posting with your existing Google+ connection through March."),Object(a.createElement)(o.ExternalLink,{target:"_blank",href:"https://www.blog.google/technology/safety-security/expediting-changes-google-plus/"},Object(W.a)(" Learn more"),"."))}),Z()(U()(n),"maybeDisplayLinkedInNotice",function(){return n.connectionNeedsReauth()&&Object(a.createElement)(o.Notice,{className:"jetpack-publicize-notice",isDismissible:!1,status:"error"},Object(a.createElement)("p",null,Object(W.a)("Your LinkedIn connection needs to be reauthenticated to continue working – head to Sharing to take care of it.")),Object(a.createElement)(o.ExternalLink,{href:"https://wordpress.com/sharing/".concat(me())},Object(W.a)("Go to Sharing settings")))}),Z()(U()(n),"connectionNeedsReauth",function(){return Object(y.includes)(n.props.mustReauthConnections,n.props.name)}),Z()(U()(n),"onConnectionChange",function(){var e=n.props.id;n.props.toggleConnection(e)}),n}return $()(t,e),I()(t,[{key:"connectionIsFailing",value:function(){var e=this.props,t=e.failedConnections,n=e.name;return t.some(function(e){return e.service_name===n})}},{key:"render",value:function(){var e=this.props,t=e.disabled,n=e.enabled,r=e.id,i=e.label,s=e.name,c="connection-"+s+"-"+r,l=s.replace("_","-"),u=Object(a.createElement)(o.FormToggle,{id:c,className:"jetpack-publicize-connection-toggle",checked:n,onChange:this.onConnectionChange});return(t||this.connectionIsFailing()||this.connectionNeedsReauth())&&(u=Object(a.createElement)(o.Disabled,null,u)),Object(a.createElement)("li",null,this.maybeDisplayGooglePlusNotice(l),this.maybeDisplayLinkedInNotice(),Object(a.createElement)("div",{className:"publicize-jetpack-connection-container"},Object(a.createElement)("label",{htmlFor:c,className:"jetpack-publicize-connection-label"},Object(a.createElement)(he,{serviceName:l}),Object(a.createElement)("span",{className:"jetpack-publicize-connection-label-copy"},i)),u))}}]),t}(a.Component),be=Object(l.withSelect)(function(e){return{failedConnections:e("jetpack/publicize").getFailedConnections(),mustReauthConnections:e("jetpack/publicize").getMustReauthConnections()}})(fe),ge=function(e){function t(){var e,n;P()(this,t);for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];return n=B()(this,(e=V()(t)).call.apply(e,[this].concat(i))),Z()(U()(n),"settingsClick",function(e){var t=n.getButtonLink(),r=n.props.refreshCallback;e.preventDefault();var i=window.open(t,"",""),a=window.setInterval(function(){!1!==i.closed&&(window.clearInterval(a),r())},500)}),n}return $()(t,e),I()(t,[{key:"getButtonLink",value:function(){var e=me();return e?"https://wordpress.com/sharing/".concat(e):"options-general.php?page=sharing&publicize_popup=true"}},{key:"render",value:function(){var e=re()("jetpack-publicize-add-connection-container",this.props.className);return Object(a.createElement)("div",{className:e},Object(a.createElement)(o.ExternalLink,{onClick:this.settingsClick},Object(W.a)("Connect an account")))}}]),t}(a.Component),ve=function(e){function t(){var e,n;P()(this,t);for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];return n=B()(this,(e=V()(t)).call.apply(e,[this].concat(i))),Z()(U()(n),"state",{hasEditedShareMessage:!1}),Z()(U()(n),"fieldId",Object(y.uniqueId)("jetpack-publicize-message-field-")),Z()(U()(n),"onMessageChange",function(e){var t=n.props.messageChange;n.setState({hasEditedShareMessage:!0}),t(e)}),n}return $()(t,e),I()(t,[{key:"isDisabled",value:function(){return this.props.connections.every(function(e){return!e.toggleable})}},{key:"getShareMessage",value:function(){var e=this.props,t=e.shareMessage,n=e.defaultShareMessage;return this.state.hasEditedShareMessage||""!==t?t:n}},{key:"render",value:function(){var e=this.props,t=e.connections,n=e.toggleConnection,r=e.refreshCallback,i=this.getShareMessage(),o=256-i.length,s=re()("jetpack-publicize-character-count",{"wpas-twitter-length-limit":o<=0});return Object(a.createElement)("div",{id:"publicize-form"},Object(a.createElement)("ul",{className:"jetpack-publicize__connections-list"},t.map(function(e){var t=e.display_name,r=e.enabled,i=e.id,o=e.service_name,s=e.toggleable;return Object(a.createElement)(be,{disabled:!s,enabled:r,key:i,id:i,label:t,name:o,toggleConnection:n})})),Object(a.createElement)(ge,{refreshCallback:r}),t.some(function(e){return e.enabled})&&Object(a.createElement)(a.Fragment,null,Object(a.createElement)("label",{className:"jetpack-publicize-message-note",htmlFor:this.fieldId},Object(W.a)("Customize your message")),Object(a.createElement)("div",{className:"jetpack-publicize-message-box"},Object(a.createElement)("textarea",{id:this.fieldId,value:i,onChange:this.onMessageChange,disabled:this.isDisabled(),maxLength:256,placeholder:Object(W.a)("Write a message for your audience here. If you leave this blank, we'll use the post title as the message."),rows:4}),Object(a.createElement)("div",{className:s},Object(ie.sprintf)(Object(W.b)("%d character remaining","%d characters remaining",o),o)))))}}]),t}(a.Component),ye=Object(N.compose)([Object(l.withSelect)(function(e){var t=e("core/editor").getEditedPostAttribute("meta"),n=e("core/editor").getEditedPostAttribute("title"),r=te()(t,["jetpack_publicize_message"],"");return{connections:e("core/editor").getEditedPostAttribute("jetpack_publicize_connections"),defaultShareMessage:n.substr(0,256),shareMessage:r.substr(0,256)}}),Object(l.withDispatch)(function(e,t){var n=t.connections;return{toggleConnection:function(t){var r=n.map(function(e){return Q()({},e,{enabled:e.id===t?!e.enabled:e.enabled})});e("core/editor").editPost({jetpack_publicize_connections:r})},messageChange:function(t){e("core/editor").editPost({meta:{jetpack_publicize_message:t.target.value}})}}})])(ve),je=Object(N.compose)([Object(l.withSelect)(function(e){return{connections:e("core/editor").getEditedPostAttribute("jetpack_publicize_connections")}}),Object(l.withDispatch)(function(e){return{refreshConnections:e("core/editor").refreshPost}})])(function(e){var t=e.connections,n=e.refreshConnections;return Object(a.createElement)(a.Fragment,null,t&&t.some(function(e){return e.enabled})&&Object(a.createElement)(Y,null),Object(a.createElement)("div",null,Object(W.a)("Connect and select the accounts where you'd like to share your post.")),t&&t.length>0&&Object(a.createElement)(ye,{refreshCallback:n}),t&&0===t.length&&Object(a.createElement)(ge,{className:"jetpack-publicize-add-connection-wrapper",refreshCallback:n}))}),Oe={render:function(){return Object(a.createElement)(c.PostTypeSupportCheck,{supportKeys:"publicize"},Object(a.createElement)(D.a,null,Object(a.createElement)(o.PanelBody,{title:Object(W.a)("Share this post")},Object(a.createElement)(je,null))),Object(a.createElement)(s.PluginPrePublishPanel,{initialOpen:!0,id:"publicize-title",title:Object(a.createElement)("span",{id:"publicize-defaults",key:"publicize-title-span"},Object(W.a)("Share this post"))},Object(a.createElement)(je,null)))}},ke=n(42);Object(ke.a)("publicize",Oe)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(0),a=n(6),o=n(2),s=n(12),c=n.n(s),l=["jetpack/markdown","jetpack/address","jetpack/email","jetpack/phone","jetpack/map","jetpack/business-hours","core/paragraph","core/image","core/heading","core/gallery","core/list","core/quote","core/shortcode","core/audio","core/code","core/cover","core/html","core/separator","core/spacer","core/subhead","core/video"],u=[["jetpack/email"],["jetpack/phone"],["jetpack/address"]],p=function(e){var t=e.isSelected;return Object(i.createElement)("div",{className:c()({"jetpack-contact-info-block":!0,"is-selected":t})},Object(i.createElement)(a.InnerBlocks,{allowedBlocks:l,templateLock:!1,template:u}))},h=n(20),d=n(1),m=(n(114),n(72),n(7)),f=n.n(m),b=n(11),g=n.n(b),v=n(8),y=n.n(v),j=n(9),O=n.n(j),k=n(4),_=n.n(k),w=n(10),E=n.n(w),C=function(e){var t=e.attributes,n=t.address,r=t.addressLine2,a=t.addressLine3,o=t.city,s=t.region,c=t.postal,l=t.country;return Object(i.createElement)(i.Fragment,null,n&&Object(i.createElement)("div",{className:"jetpack-address__address jetpack-address__address1"},n),r&&Object(i.createElement)("div",{className:"jetpack-address__address jetpack-address__address2"},r),a&&Object(i.createElement)("div",{className:"jetpack-address__address jetpack-address__address3"},a),o&&!(s||c)&&Object(i.createElement)("div",{className:"jetpack-address__city"},o),o&&(s||c)&&Object(i.createElement)("div",null,[Object(i.createElement)("span",{className:"jetpack-address__city"},o),", ",Object(i.createElement)("span",{className:"jetpack-address__region"},s)," ",Object(i.createElement)("span",{className:"jetpack-address__postal"},c)]),!o&&(s||c)&&Object(i.createElement)("div",null,[Object(i.createElement)("span",{className:"jetpack-address__region"},s)," ",Object(i.createElement)("span",{className:"jetpack-address__postal"},c)]),l&&Object(i.createElement)("div",{className:"jetpack-address__country"},l))},x=function(e){var t=e.attributes,n=t.address,r=t.addressLine2,i=t.addressLine3,a=t.city,o=t.region,s=t.postal,c=t.country,l=n?"".concat(n,","):"",u=r?"".concat(r,","):"",p=i?"".concat(i,","):"",h=a?"+".concat(a,","):"",d=o?"+".concat(o,","):"";d=s?"".concat(d,"+").concat(s):d;var m=c?"+".concat(c):"";return"https://www.google.com/maps/search/".concat(l).concat(u).concat(p).concat(h).concat(d).concat(m).replace(" ","+")},S=function(e){return[(t=e.attributes).address,t.addressLine2,t.addressLine3,t.city,t.region,t.postal,t.country].some(function(e){return""!==e})&&Object(i.createElement)("div",{className:e.className},e.attributes.linkToGoogleMaps&&Object(i.createElement)("a",{href:x(e),target:"_blank",rel:"noopener noreferrer",title:Object(d.a)("Open address in Google Maps")},Object(i.createElement)(C,e)),!e.attributes.linkToGoogleMaps&&Object(i.createElement)(C,e));var t},A=function(e){function t(){var e,n;f()(this,t);for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];return(n=y()(this,(e=O()(t)).call.apply(e,[this].concat(i)))).preventEnterKey=n.preventEnterKey.bind(_()(n)),n}return E()(t,e),g()(t,[{key:"preventEnterKey",value:function(e){"Enter"!==e.key||e.preventDefault()}},{key:"render",value:function(){var e=this.props,t=e.attributes,n=t.address,r=t.addressLine2,s=t.addressLine3,l=t.city,u=t.region,p=t.postal,h=t.country,m=t.linkToGoogleMaps,f=e.isSelected,b=e.setAttributes,g=[n,r,s,l,u,p,h].some(function(e){return""!==e}),v=c()({"jetpack-address-block":!0,"is-selected":f}),y=Object(i.createElement)(o.ToggleControl,{label:Object(d.a)("Link address to Google Maps"),checked:m,onChange:function(e){return b({linkToGoogleMaps:e})}});return Object(i.createElement)("div",{className:v},!f&&g&&S(this.props),(f||!g)&&Object(i.createElement)(i.Fragment,null,Object(i.createElement)(a.PlainText,{value:n,placeholder:Object(d.a)("Street Address"),"aria-label":Object(d.a)("Street Address"),onChange:function(e){return b({address:e})},onKeyDown:this.preventEnterKey}),Object(i.createElement)(a.PlainText,{value:r,placeholder:Object(d.a)("Address Line 2"),"aria-label":Object(d.a)("Address Line 2"),onChange:function(e){return b({addressLine2:e})},onKeyDown:this.preventEnterKey}),Object(i.createElement)(a.PlainText,{value:s,placeholder:Object(d.a)("Address Line 3"),"aria-label":Object(d.a)("Address Line 3"),onChange:function(e){return b({addressLine3:e})},onKeyDown:this.preventEnterKey}),Object(i.createElement)(a.PlainText,{value:l,placeholder:Object(d.a)("City"),"aria-label":Object(d.a)("City"),onChange:function(e){return b({city:e})},onKeyDown:this.preventEnterKey}),Object(i.createElement)(a.PlainText,{value:u,placeholder:Object(d.a)("State/Province/Region"),"aria-label":Object(d.a)("State/Province/Region"),onChange:function(e){return b({region:e})},onKeyDown:this.preventEnterKey}),Object(i.createElement)(a.PlainText,{value:p,placeholder:Object(d.a)("Postal/Zip Code"),"aria-label":Object(d.a)("Postal/Zip Code"),onChange:function(e){return b({postal:e})},onKeyDown:this.preventEnterKey}),Object(i.createElement)(a.PlainText,{value:h,placeholder:Object(d.a)("Country"),"aria-label":Object(d.a)("Country"),onChange:function(e){return b({country:e})},onKeyDown:this.preventEnterKey}),y))}}]),t}(i.Component),M={title:Object(d.a)("Address"),description:Object(d.a)("Lets you add a physical address with Schema markup."),keywords:[Object(d.c)("location","block search term"),Object(d.c)("direction","block search term"),Object(d.c)("place","block search term")],icon:Object(h.a)(Object(i.createElement)(i.Fragment,null,Object(i.createElement)(o.Path,{d:"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zM7 9c0-2.76 2.24-5 5-5s5 2.24 5 5c0 2.88-2.88 7.19-5 9.88C9.92 16.21 7 11.85 7 9z"}),Object(i.createElement)(o.Circle,{cx:"12",cy:"9",r:"2.5"}))),category:"jetpack",attributes:{address:{type:"string",default:""},addressLine2:{type:"string",default:""},addressLine3:{type:"string",default:""},city:{type:"string",default:""},region:{type:"string",default:""},postal:{type:"string",default:""},country:{type:"string",default:""},linkToGoogleMaps:{type:"boolean",default:!1}},parent:["jetpack/contact-info"],edit:A,save:S},T=n(35),z=n.n(T),D=function(e){var t=e.attributes.email,n=e.className;return t&&Object(i.createElement)("div",{className:n},t.split(/(\s+)/).map(function(e,t){var n=e.replace(/([.,\/#!$%^&*;:{}=\-_`~()\][])+$/g,"");return e.indexOf("@")&&z.a.validate(n)?e===n?Object(i.createElement)("a",{href:"mailto:".concat(e),key:t},e):Object(i.createElement)(i.Fragment,{key:t},Object(i.createElement)("a",{href:"mailto:".concat(e),key:t},n),Object(i.createElement)(i.Fragment,null,e.slice(-(e.length-n.length)))):Object(i.createElement)(i.Fragment,{key:t},e)}))},N=function(e,t,n,r,o){var s=t.isSelected,c=t.attributes[e];return Object(i.createElement)("div",{className:"jetpack-".concat(e,s?"-block is-selected":"-block")},!s&&""!==c&&r(t),(s||""===c)&&Object(i.createElement)(a.PlainText,{value:c,placeholder:n,"aria-label":n,onChange:o}))},F=function(e){var t=e.setAttributes;return N("email",e,Object(d.a)("Email"),D,function(e){return t({email:e})})},P={title:Object(d.a)("Email Address"),description:Object(d.a)("Lets you add an email address with an automatically generated click-to-email link."),keywords:["e-mail","email",Object(d.c)("message","block search term")],icon:Object(h.a)(Object(i.createElement)(o.Path,{d:"M22 6c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6zm-2 0l-8 5-8-5h16zm0 12H4V8l8 5 8-5v10z"})),category:"jetpack",attributes:{email:{type:"string",default:""}},edit:F,save:D,parent:["jetpack/contact-info"]};var R=function(e){var t=e.attributes.phone,n=e.className;return t&&Object(i.createElement)("div",{className:n},function(e){var t=e.match(/\d+\.\d+|\d+\b|\d+(?=\w)/g);if(!t)return e;var n=e.indexOf(t[0]),r=n?e.substring(n-1):e,a=n?e.substring(0,n):"",o=r.replace(/\D/g,"");return/[0-9\/+\/(]/.test(r[0])?(a=a.slice(0,-1),"+"===r[0]&&(o="+"+o)):r=r.substring(1),[a.trim()?Object(i.createElement)("span",{key:"phonePrefix",className:"phone-prefix"},a):null,Object(i.createElement)("a",{key:"phoneNumber",href:"tel:".concat(o)},r)]}(t))},I=function(e){var t=e.setAttributes;return N("phone",e,Object(d.a)("Phone number"),R,function(e){return t({phone:e})})},L={title:Object(d.a)("Phone Number"),description:Object(d.a)("Lets you add a phone number with an automatically generated click-to-call link."),keywords:[Object(d.c)("mobile","block search term"),Object(d.c)("telephone","block search term"),Object(d.c)("cell","block search term")],icon:Object(h.a)(Object(i.createElement)(o.Path,{d:"M6.54 5c.06.89.21 1.76.45 2.59l-1.2 1.2c-.41-1.2-.67-2.47-.76-3.79h1.51m9.86 12.02c.85.24 1.72.39 2.6.45v1.49c-1.32-.09-2.59-.35-3.8-.75l1.2-1.19M7.5 3H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 17 .55 0 1-.45 1-1v-3.49c0-.55-.45-1-1-1-1.24 0-2.45-.2-3.57-.57-.1-.04-.21-.05-.31-.05-.26 0-.51.1-.71.29l-2.2 2.2c-2.83-1.45-5.15-3.76-6.59-6.59l2.2-2.2c.28-.28.36-.67.25-1.02C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1z"})),category:"jetpack",attributes:{phone:{type:"string",default:""}},parent:["jetpack/contact-info"],edit:I,save:R},B={title:Object(d.a)("Contact Info"),description:Object(d.a)("Lets you add an email address, phone number, and physical address with improved markup for better SEO results."),keywords:[Object(d.c)("email","block search term"),Object(d.c)("phone","block search term"),Object(d.c)("address","block search term")],icon:Object(h.a)(Object(i.createElement)(o.Path,{d:"M19 5v14H5V5h14m0-2H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 9c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3zm0-4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm6 10H6v-1.53c0-2.5 3.97-3.58 6-3.58s6 1.08 6 3.58V18zm-9.69-2h7.38c-.69-.56-2.38-1.12-3.69-1.12s-3.01.56-3.69 1.12z"})),category:"jetpack",supports:{align:["wide","full"],html:!1},attributes:{},edit:p,save:function(e){var t=e.className;return Object(i.createElement)("div",{className:t},Object(i.createElement)(a.InnerBlocks.Content,null))}},q=[{name:"address",settings:M},{name:"email",settings:P},{name:"phone",settings:L}];Object(r.a)("contact-info",B,q)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(0),a=n(2),o=n(7),s=n.n(o),c=n(11),l=n.n(c),u=n(8),p=n.n(u),h=n(9),d=n.n(h),m=n(4),f=n.n(m),b=n(10),g=n.n(b),v=n(3),y=n.n(v),j=n(12),O=n.n(j),k=n(35),_=n.n(k),w=n(14),E=n(17),C=n(5),x=n(15),S={AED:{symbol:"د.إ.‏",grouping:",",decimal:".",precision:2},AFN:{symbol:"؋",grouping:",",decimal:".",precision:2},ALL:{symbol:"Lek",grouping:".",decimal:",",precision:2},AMD:{symbol:"֏",grouping:",",decimal:".",precision:2},ANG:{symbol:"ƒ",grouping:",",decimal:".",precision:2},AOA:{symbol:"Kz",grouping:",",decimal:".",precision:2},ARS:{symbol:"$",grouping:".",decimal:",",precision:2},AUD:{symbol:"A$",grouping:",",decimal:".",precision:2},AWG:{symbol:"ƒ",grouping:",",decimal:".",precision:2},AZN:{symbol:"₼",grouping:" ",decimal:",",precision:2},BAM:{symbol:"КМ",grouping:".",decimal:",",precision:2},BBD:{symbol:"Bds$",grouping:",",decimal:".",precision:2},BDT:{symbol:"৳",grouping:",",decimal:".",precision:0},BGN:{symbol:"лв.",grouping:" ",decimal:",",precision:2},BHD:{symbol:"د.ب.‏",grouping:",",decimal:".",precision:3},BIF:{symbol:"FBu",grouping:",",decimal:".",precision:0},BMD:{symbol:"$",grouping:",",decimal:".",precision:2},BND:{symbol:"$",grouping:".",decimal:",",precision:0},BOB:{symbol:"Bs",grouping:".",decimal:",",precision:2},BRL:{symbol:"R$",grouping:".",decimal:",",precision:2},BSD:{symbol:"$",grouping:",",decimal:".",precision:2},BTC:{symbol:"Ƀ",grouping:",",decimal:".",precision:2},BTN:{symbol:"Nu.",grouping:",",decimal:".",precision:1},BWP:{symbol:"P",grouping:",",decimal:".",precision:2},BYR:{symbol:"р.",grouping:" ",decimal:",",precision:2},BZD:{symbol:"BZ$",grouping:",",decimal:".",precision:2},CAD:{symbol:"C$",grouping:",",decimal:".",precision:2},CDF:{symbol:"FC",grouping:",",decimal:".",precision:2},CHF:{symbol:"CHF",grouping:"'",decimal:".",precision:2},CLP:{symbol:"$",grouping:".",decimal:",",precision:2},CNY:{symbol:"¥",grouping:",",decimal:".",precision:2},COP:{symbol:"$",grouping:".",decimal:",",precision:2},CRC:{symbol:"₡",grouping:".",decimal:",",precision:2},CUC:{symbol:"CUC",grouping:",",decimal:".",precision:2},CUP:{symbol:"$MN",grouping:",",decimal:".",precision:2},CVE:{symbol:"$",grouping:",",decimal:".",precision:2},CZK:{symbol:"Kč",grouping:" ",decimal:",",precision:2},DJF:{symbol:"Fdj",grouping:",",decimal:".",precision:0},DKK:{symbol:"kr.",grouping:"",decimal:",",precision:2},DOP:{symbol:"RD$",grouping:",",decimal:".",precision:2},DZD:{symbol:"د.ج.‏",grouping:",",decimal:".",precision:2},EGP:{symbol:"ج.م.‏",grouping:",",decimal:".",precision:2},ERN:{symbol:"Nfk",grouping:",",decimal:".",precision:2},ETB:{symbol:"ETB",grouping:",",decimal:".",precision:2},EUR:{symbol:"€",grouping:".",decimal:",",precision:2},FJD:{symbol:"FJ$",grouping:",",decimal:".",precision:2},FKP:{symbol:"£",grouping:",",decimal:".",precision:2},GBP:{symbol:"£",grouping:",",decimal:".",precision:2},GEL:{symbol:"Lari",grouping:" ",decimal:",",precision:2},GHS:{symbol:"₵",grouping:",",decimal:".",precision:2},GIP:{symbol:"£",grouping:",",decimal:".",precision:2},GMD:{symbol:"D",grouping:",",decimal:".",precision:2},GNF:{symbol:"FG",grouping:",",decimal:".",precision:0},GTQ:{symbol:"Q",grouping:",",decimal:".",precision:2},GYD:{symbol:"G$",grouping:",",decimal:".",precision:2},HKD:{symbol:"HK$",grouping:",",decimal:".",precision:2},HNL:{symbol:"L.",grouping:",",decimal:".",precision:2},HRK:{symbol:"kn",grouping:".",decimal:",",precision:2},HTG:{symbol:"G",grouping:",",decimal:".",precision:2},HUF:{symbol:"Ft",grouping:".",decimal:",",precision:0},IDR:{symbol:"Rp",grouping:".",decimal:",",precision:0},ILS:{symbol:"₪",grouping:",",decimal:".",precision:2},INR:{symbol:"₹",grouping:",",decimal:".",precision:2},IQD:{symbol:"د.ع.‏",grouping:",",decimal:".",precision:2},IRR:{symbol:"﷼",grouping:",",decimal:"/",precision:2},ISK:{symbol:"kr.",grouping:".",decimal:",",precision:0},JMD:{symbol:"J$",grouping:",",decimal:".",precision:2},JOD:{symbol:"د.ا.‏",grouping:",",decimal:".",precision:3},JPY:{symbol:"¥",grouping:",",decimal:".",precision:0},KES:{symbol:"S",grouping:",",decimal:".",precision:2},KGS:{symbol:"сом",grouping:" ",decimal:"-",precision:2},KHR:{symbol:"៛",grouping:",",decimal:".",precision:0},KMF:{symbol:"CF",grouping:",",decimal:".",precision:2},KPW:{symbol:"₩",grouping:",",decimal:".",precision:0},KRW:{symbol:"₩",grouping:",",decimal:".",precision:0},KWD:{symbol:"د.ك.‏",grouping:",",decimal:".",precision:3},KYD:{symbol:"$",grouping:",",decimal:".",precision:2},KZT:{symbol:"₸",grouping:" ",decimal:"-",precision:2},LAK:{symbol:"₭",grouping:",",decimal:".",precision:0},LBP:{symbol:"ل.ل.‏",grouping:",",decimal:".",precision:2},LKR:{symbol:"₨",grouping:",",decimal:".",precision:0},LRD:{symbol:"L$",grouping:",",decimal:".",precision:2},LSL:{symbol:"M",grouping:",",decimal:".",precision:2},LYD:{symbol:"د.ل.‏",grouping:",",decimal:".",precision:3},MAD:{symbol:"د.م.‏",grouping:",",decimal:".",precision:2},MDL:{symbol:"lei",grouping:",",decimal:".",precision:2},MGA:{symbol:"Ar",grouping:",",decimal:".",precision:0},MKD:{symbol:"ден.",grouping:".",decimal:",",precision:2},MMK:{symbol:"K",grouping:",",decimal:".",precision:2},MNT:{symbol:"₮",grouping:" ",decimal:",",precision:2},MOP:{symbol:"MOP$",grouping:",",decimal:".",precision:2},MRO:{symbol:"UM",grouping:",",decimal:".",precision:2},MTL:{symbol:"₤",grouping:",",decimal:".",precision:2},MUR:{symbol:"₨",grouping:",",decimal:".",precision:2},MVR:{symbol:"MVR",grouping:",",decimal:".",precision:1},MWK:{symbol:"MK",grouping:",",decimal:".",precision:2},MXN:{symbol:"MX$",grouping:",",decimal:".",precision:2},MYR:{symbol:"RM",grouping:",",decimal:".",precision:2},MZN:{symbol:"MT",grouping:",",decimal:".",precision:0},NAD:{symbol:"N$",grouping:",",decimal:".",precision:2},NGN:{symbol:"₦",grouping:",",decimal:".",precision:2},NIO:{symbol:"C$",grouping:",",decimal:".",precision:2},NOK:{symbol:"kr",grouping:" ",decimal:",",precision:2},NPR:{symbol:"₨",grouping:",",decimal:".",precision:2},NZD:{symbol:"NZ$",grouping:",",decimal:".",precision:2},OMR:{symbol:"﷼",grouping:",",decimal:".",precision:3},PAB:{symbol:"B/.",grouping:",",decimal:".",precision:2},PEN:{symbol:"S/.",grouping:",",decimal:".",precision:2},PGK:{symbol:"K",grouping:",",decimal:".",precision:2},PHP:{symbol:"₱",grouping:",",decimal:".",precision:2},PKR:{symbol:"₨",grouping:",",decimal:".",precision:2},PLN:{symbol:"zł",grouping:" ",decimal:",",precision:2},PYG:{symbol:"₲",grouping:".",decimal:",",precision:2},QAR:{symbol:"﷼",grouping:",",decimal:".",precision:2},RON:{symbol:"lei",grouping:".",decimal:",",precision:2},RSD:{symbol:"Дин.",grouping:".",decimal:",",precision:2},RUB:{symbol:"₽",grouping:" ",decimal:",",precision:2},RWF:{symbol:"RWF",grouping:" ",decimal:",",precision:2},SAR:{symbol:"﷼",grouping:",",decimal:".",precision:2},SBD:{symbol:"S$",grouping:",",decimal:".",precision:2},SCR:{symbol:"₨",grouping:",",decimal:".",precision:2},SDD:{symbol:"LSd",grouping:",",decimal:".",precision:2},SDG:{symbol:"£‏",grouping:",",decimal:".",precision:2},SEK:{symbol:"kr",grouping:",",decimal:".",precision:2},SGD:{symbol:"S$",grouping:",",decimal:".",precision:2},SHP:{symbol:"£",grouping:",",decimal:".",precision:2},SLL:{symbol:"Le",grouping:",",decimal:".",precision:2},SOS:{symbol:"S",grouping:",",decimal:".",precision:2},SRD:{symbol:"$",grouping:",",decimal:".",precision:2},STD:{symbol:"Db",grouping:",",decimal:".",precision:2},SVC:{symbol:"₡",grouping:",",decimal:".",precision:2},SYP:{symbol:"£",grouping:",",decimal:".",precision:2},SZL:{symbol:"E",grouping:",",decimal:".",precision:2},THB:{symbol:"฿",grouping:",",decimal:".",precision:2},TJS:{symbol:"TJS",grouping:" ",decimal:";",precision:2},TMT:{symbol:"m",grouping:" ",decimal:",",precision:0},TND:{symbol:"د.ت.‏",grouping:",",decimal:".",precision:3},TOP:{symbol:"T$",grouping:",",decimal:".",precision:2},TRY:{symbol:"TL",grouping:".",decimal:",",precision:2},TTD:{symbol:"TT$",grouping:",",decimal:".",precision:2},TVD:{symbol:"$T",grouping:",",decimal:".",precision:2},TWD:{symbol:"NT$",grouping:",",decimal:".",precision:2},TZS:{symbol:"TSh",grouping:",",decimal:".",precision:2},UAH:{symbol:"₴",grouping:" ",decimal:",",precision:2},UGX:{symbol:"USh",grouping:",",decimal:".",precision:2},USD:{symbol:"$",grouping:",",decimal:".",precision:2},UYU:{symbol:"$U",grouping:".",decimal:",",precision:2},UZS:{symbol:"сўм",grouping:" ",decimal:",",precision:2},VEB:{symbol:"Bs.",grouping:",",decimal:".",precision:2},VEF:{symbol:"Bs. F.",grouping:".",decimal:",",precision:2},VND:{symbol:"₫",grouping:".",decimal:",",precision:1},VUV:{symbol:"VT",grouping:",",decimal:".",precision:0},WST:{symbol:"WS$",grouping:",",decimal:".",precision:2},XAF:{symbol:"F",grouping:",",decimal:".",precision:2},XCD:{symbol:"$",grouping:",",decimal:".",precision:2},XOF:{symbol:"F",grouping:" ",decimal:",",precision:2},XPF:{symbol:"F",grouping:",",decimal:".",precision:2},YER:{symbol:"﷼",grouping:",",decimal:".",precision:2},ZAR:{symbol:"R",grouping:" ",decimal:",",precision:2},ZMW:{symbol:"ZK",grouping:",",decimal:".",precision:2},WON:{symbol:"₩",grouping:",",decimal:".",precision:2}};function A(e){return S[e]||{symbol:"$",grouping:",",decimal:".",precision:2}}var M=n(27),T=n.n(M),z=n(34),D=n.n(z),N=n(52),F=n.n(N),P=(n(239),function(e){var t=e.children,n=void 0===t?null:t,r=e.isError,a=void 0!==r&&r,o=D()(e,["children","isError"]),s=O()("simple-payments__help-message",{"simple-payments__help-message-is-error":a});return n&&Object(i.createElement)("div",T()({className:s},o),a&&Object(i.createElement)(F.a,{size:"24"}),Object(i.createElement)("span",null,n))}),R=n(1),I=(n(241),n(99)),L=n.n(I),B=n(100),q=n.n(B),V=function(e){var t=e.title,n=void 0===t?"":t,r=e.content,a=void 0===r?"":r,o=e.formattedPrice,s=void 0===o?"":o,c=e.multiple,l=void 0!==c&&c,u=e.featuredMediaUrl,p=void 0===u?null:u,h=e.featuredMediaTitle,d=void 0===h?null:h;return Object(i.createElement)("div",{className:"jetpack-simple-payments-wrapper"},Object(i.createElement)("div",{className:"jetpack-simple-payments-product"},p&&Object(i.createElement)("div",{className:"jetpack-simple-payments-product-image"},Object(i.createElement)("figure",{className:"jetpack-simple-payments-image"},Object(i.createElement)("img",{src:p,alt:d}))),Object(i.createElement)("div",{className:"jetpack-simple-payments-details"},n&&Object(i.createElement)("div",{className:"jetpack-simple-payments-title"},Object(i.createElement)("p",null,n)),a&&Object(i.createElement)("div",{className:"jetpack-simple-payments-description"},Object(i.createElement)("p",null,a)),s&&Object(i.createElement)("div",{className:"jetpack-simple-payments-price"},Object(i.createElement)("p",null,s)),Object(i.createElement)("div",{className:"jetpack-simple-payments-purchase-box"},l&&Object(i.createElement)("div",{className:"jetpack-simple-payments-items"},Object(i.createElement)("input",{className:"jetpack-simple-payments-items-number",readOnly:!0,type:"number",value:"1"})),Object(i.createElement)("div",{className:"jetpack-simple-payments-button"},Object(i.createElement)("img",{alt:Object(R.a)("Pay with PayPal"),src:L.a,srcSet:"".concat(q.a," 2x")}))))))},H=n(6),U=function(e){return function(t){return e({featuredMediaId:Object(C.get)(t,"id",0),featuredMediaUrl:Object(C.get)(t,"url",null),featuredMediaTitle:Object(C.get)(t,"title",null)})}},G=function(e){var t=e.featuredMediaId,n=e.featuredMediaUrl,r=e.featuredMediaTitle,o=e.setAttributes;return t?Object(i.createElement)("div",null,Object(i.createElement)(i.Fragment,null,Object(i.createElement)(H.BlockControls,null,Object(i.createElement)(a.Toolbar,null,Object(i.createElement)(H.MediaUpload,{onSelect:U(o),allowedTypes:["image"],value:t,render:function(e){var t=e.open;return Object(i.createElement)(a.IconButton,{className:"components-toolbar__control",label:Object(R.a)("Edit Image"),icon:"edit",onClick:t})}}),Object(i.createElement)(a.ToolbarButton,{icon:"trash",title:Object(R.a)("Remove Image"),onClick:function(){return o({featuredMediaId:null,featuredMediaUrl:null,featuredMediaTitle:null})}}))),Object(i.createElement)("figure",null,Object(i.createElement)("img",{src:n,alt:r})))):Object(i.createElement)(H.MediaPlaceholder,{icon:"format-image",labels:{title:Object(R.a)("Product Image")},accept:"image/*",allowedTypes:["image"],onSelect:U(o)})},$=["USD","EUR","AUD","BRL","CAD","CZK","DKK","HKD","HUF","ILS","JPY","MYR","MXN","TWD","NZD","NOK","PHP","PLN","GBP","RUB","SGD","SEK","CHF","THB"],K=function(e){var t=(""+e).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);return t?Math.max(0,(t[1]?t[1].length:0)-(t[2]?+t[2]:0)):0},Z=function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=A(t),i=r.precision,a=r.symbol,o=e.toFixed(i);return n?"".concat(o," ").concat(Object(C.trimEnd)(a,".")):o},W=function(e){function t(){var e,n;s()(this,t);for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];return n=p()(this,(e=d()(t)).call.apply(e,[this].concat(i))),y()(f()(n),"state",{fieldEmailError:null,fieldPriceError:null,fieldTitleError:null,isSavingProduct:!1}),y()(f()(n),"shouldInjectPaymentAttributes",!!n.props.attributes.productId),y()(f()(n),"validateAttributes",function(){var e=n.validatePrice(),t=n.validateTitle(),r=n.validateEmail(),i=n.validateCurrency();return e&&t&&r&&i}),y()(f()(n),"validateCurrency",function(){var e=n.props.attributes.currency;return $.includes(e)}),y()(f()(n),"validatePrice",function(){var e=n.props.attributes,t=e.currency,r=e.price,i=A(t).precision;return r&&0!==parseFloat(r)?Number.isNaN(parseFloat(r))?(n.setState({fieldPriceError:Object(R.a)("Invalid price")}),!1):parseFloat(r)<0?(n.setState({fieldPriceError:Object(R.a)("Your price is negative — enter a positive number so people can pay the right amount.")}),!1):K(r)>i?0===i?(n.setState({fieldPriceError:Object(R.a)("We know every penny counts, but prices in this currency can’t contain decimal values.")}),!1):(n.setState({fieldPriceError:Object(x.sprintf)(Object(R.b)("The price cannot have more than %d decimal place.","The price cannot have more than %d decimal places.",i),i)}),!1):(n.state.fieldPriceError&&n.setState({fieldPriceError:null}),!0):(n.setState({fieldPriceError:Object(R.a)("If you’re selling something, you need a price tag. Add yours here.")}),!1)}),y()(f()(n),"validateEmail",function(){var e=n.props.attributes.email;return e?_.a.validate(e)?(n.state.fieldEmailError&&n.setState({fieldEmailError:null}),!0):(n.setState({fieldEmailError:Object(x.sprintf)(Object(R.a)("%s is not a valid email address."),e)}),!1):(n.setState({fieldEmailError:Object(R.a)("We want to make sure payments reach you, so please add an email address.")}),!1)}),y()(f()(n),"validateTitle",function(){return n.props.attributes.title?(n.state.fieldTitleError&&n.setState({fieldTitleError:null}),!0):(n.setState({fieldTitleError:Object(R.a)("Please add a brief title so that people know what they’re paying for.")}),!1)}),y()(f()(n),"handleEmailChange",function(e){n.props.setAttributes({email:e}),n.setState({fieldEmailError:null})}),y()(f()(n),"handleFeaturedMediaSelect",function(e){n.props.setAttributes({featuredMediaId:Object(C.get)(e,"id",0)})}),y()(f()(n),"handleContentChange",function(e){n.props.setAttributes({content:e})}),y()(f()(n),"handlePriceChange",function(e){e=parseFloat(e),isNaN(e)?n.props.setAttributes({price:void 0}):n.props.setAttributes({price:e}),n.setState({fieldPriceError:null})}),y()(f()(n),"handleCurrencyChange",function(e){n.props.setAttributes({currency:e})}),y()(f()(n),"handleMultipleChange",function(e){n.props.setAttributes({multiple:!!e})}),y()(f()(n),"handleTitleChange",function(e){n.props.setAttributes({title:e}),n.setState({fieldTitleError:null})}),y()(f()(n),"getCurrencyList",$.map(function(e){var t=A(e).symbol;return{value:e,label:t===e?e:"".concat(e," ").concat(Object(C.trimEnd)(t,"."))}})),n}return g()(t,e),l()(t,[{key:"componentDidMount",value:function(){this.injectPaymentAttributes();var e=this.props,t=e.attributes,n=e.hasPublishAction;!t.productId&&n&&this.saveProduct()}},{key:"componentDidUpdate",value:function(e){var t=this.props,n=t.hasPublishAction,r=t.isSelected;Object(C.isEqual)(e.simplePayment,this.props.simplePayment)||this.injectPaymentAttributes(),!e.isSaving&&this.props.isSaving&&n&&this.validateAttributes()?this.saveProduct():e.isSelected&&!r&&this.validateAttributes()}},{key:"injectPaymentAttributes",value:function(){if(this.shouldInjectPaymentAttributes){var e=this.props,t=e.attributes,n=e.setAttributes,r=e.simplePayment,i=t.content,a=t.currency,o=t.email,s=t.featuredMediaId,c=t.multiple,l=t.price,u=t.productId,p=t.title;u&&r&&(n({content:Object(C.get)(r,["content","raw"],i),currency:Object(C.get)(r,["meta","spay_currency"],a),email:Object(C.get)(r,["meta","spay_email"],o),featuredMediaId:Object(C.get)(r,["featured_media"],s),multiple:Boolean(Object(C.get)(r,["meta","spay_multiple"],Boolean(c))),price:Object(C.get)(r,["meta","spay_price"],l||void 0),title:Object(C.get)(r,["title","raw"],p)}),this.shouldInjectPaymentAttributes=!this.shouldInjectPaymentAttributes)}}},{key:"toApi",value:function(){var e=this.props.attributes,t=e.content,n=e.currency,r=e.email,i=e.featuredMediaId,a=e.multiple,o=e.price,s=e.productId;return{id:s,content:t,featured_media:i,meta:{spay_currency:n,spay_email:r,spay_multiple:a,spay_price:o},status:s?"publish":"draft",title:e.title}}},{key:"saveProduct",value:function(){var e=this;if(!this.state.isSavingProduct){var t=this.props,n=t.attributes,r=t.setAttributes,i=n.email,a=Object(E.dispatch)("core").saveEntityRecord;this.setState({isSavingProduct:!0},function(){a("postType","jp_pay_product",e.toApi()).then(function(e){return e&&r({productId:e.id}),e}).catch(function(t){if(t&&t.data){var n=t.data.key;e.setState({fieldEmailError:"spay_email"===n?Object(x.sprintf)(Object(R.a)("%s is not a valid email address."),i):null,fieldPriceError:"spay_price"===n?Object(R.a)("Invalid price."):null})}}).finally(function(){e.setState({isSavingProduct:!1})})})}}},{key:"render",value:function(){var e=this.state,t=e.fieldEmailError,n=e.fieldPriceError,r=e.fieldTitleError,o=this.props,s=o.attributes,c=o.featuredMedia,l=o.instanceId,u=o.isSelected,p=o.setAttributes,h=o.simplePayment,d=s.content,m=s.currency,f=s.email,b=s.featuredMediaId,g=s.featuredMediaUrl,v=s.featuredMediaTitle,y=s.multiple,j=s.price,k=s.productId,_=s.title,w=g||c&&c.source_url,E=v||c&&c.alt_text,C=k&&!h;if(!u&&C)return Object(i.createElement)("div",{className:"simple-payments__loading"},Object(i.createElement)(V,{"aria-busy":"true",content:"█████",formattedPrice:"█████",title:"█████"}));if(!u&&f&&j&&_&&!t&&!n&&!r)return Object(i.createElement)(V,{"aria-busy":"false",content:d,featuredMediaUrl:w,featuredMediaTitle:E,formattedPrice:Z(j,m),multiple:y,title:_});var x=C?a.Disabled:"div";return Object(i.createElement)(x,{className:"wp-block-jetpack-simple-payments"},Object(i.createElement)(G,{featuredMediaId:b,featuredMediaUrl:w,featuredMediaTitle:E,setAttributes:p}),Object(i.createElement)("div",null,Object(i.createElement)(a.TextControl,{"aria-describedby":"".concat(l,"-title-error"),className:O()("simple-payments__field","simple-payments__field-title",{"simple-payments__field-has-error":r}),label:Object(R.a)("Item name"),onChange:this.handleTitleChange,placeholder:Object(R.a)("Item name"),required:!0,type:"text",value:_}),Object(i.createElement)(P,{id:"".concat(l,"-title-error"),isError:!0},r),Object(i.createElement)(a.TextareaControl,{className:"simple-payments__field simple-payments__field-content",label:Object(R.a)("Describe your item in a few words"),onChange:this.handleContentChange,placeholder:Object(R.a)("Describe your item in a few words"),value:d}),Object(i.createElement)("div",{className:"simple-payments__price-container"},Object(i.createElement)(a.SelectControl,{className:"simple-payments__field simple-payments__field-currency",label:Object(R.a)("Currency"),onChange:this.handleCurrencyChange,options:this.getCurrencyList,value:m}),Object(i.createElement)(a.TextControl,{"aria-describedby":"".concat(l,"-price-error"),className:O()("simple-payments__field","simple-payments__field-price",{"simple-payments__field-has-error":n}),label:Object(R.a)("Price"),onChange:this.handlePriceChange,placeholder:Z(0,m,!1),required:!0,step:"1",type:"number",value:j||""}),Object(i.createElement)(P,{id:"".concat(l,"-price-error"),isError:!0},n)),Object(i.createElement)("div",{className:"simple-payments__field-multiple"},Object(i.createElement)(a.ToggleControl,{checked:Boolean(y),label:Object(R.a)("Allow people to buy more than one item at a time"),onChange:this.handleMultipleChange})),Object(i.createElement)(a.TextControl,{"aria-describedby":"".concat(l,"-email-").concat(t?"error":"help"),className:O()("simple-payments__field","simple-payments__field-email",{"simple-payments__field-has-error":t}),label:Object(R.a)("Email"),onChange:this.handleEmailChange,placeholder:Object(R.a)("Email"),required:!0,type:"email",value:f}),Object(i.createElement)(P,{id:"".concat(l,"-email-error"),isError:!0},t),Object(i.createElement)(P,{id:"".concat(l,"-email-help")},Object(R.a)("Enter the email address associated with your PayPal account. Don’t have an account?")+" ",Object(i.createElement)(a.ExternalLink,{href:"https://www.paypal.com/"},Object(R.a)("Create one on PayPal")))))}}]),t}(i.Component),J=Object(E.withSelect)(function(e,t){var n=e("core"),r=n.getEntityRecord,i=n.getMedia,a=e("core/editor"),o=a.isSavingPost,s=a.getCurrentPost,c=t.attributes,l=c.productId,u=c.featuredMediaId,p=l?Object(C.pick)(r("postType","jp_pay_product",l),[["content"],["meta","spay_currency"],["meta","spay_email"],["meta","spay_multiple"],["meta","spay_price"],["title","raw"],["featured_media"]]):void 0;return{hasPublishAction:!!Object(C.get)(s(),["_links","wp:action-publish"]),isSaving:!!o(),simplePayment:p,featuredMedia:u?i(u):null}}),Y=Object(w.compose)(J,w.withInstanceId)(W);n(243);var X={title:Object(R.a)("Simple Payments button"),description:Object(i.createElement)(i.Fragment,null,Object(i.createElement)("p",null,Object(R.a)("Lets you create and embed credit and debit card payment buttons with minimal setup.")),Object(i.createElement)(a.ExternalLink,{href:"https://support.wordpress.com/simple-payments/"},Object(R.a)("Support reference"))),icon:Object(i.createElement)(a.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Object(i.createElement)(a.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(i.createElement)(a.Path,{d:"M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4v-6h16v6zm0-10H4V6h16v2z"})),category:"jetpack",keywords:[Object(R.c)("shop","block search term"),Object(R.c)("sell","block search term"),"PayPal"],attributes:{currency:{type:"string",default:"USD"},content:{type:"string",default:""},email:{type:"string",default:""},featuredMediaId:{type:"number",default:0},featuredMediaUrl:{type:"string",default:null},featuredMediaTitle:{type:"string",default:null},multiple:{type:"boolean",default:!1},price:{type:"number"},productId:{type:"number"},title:{type:"string",default:""}},transforms:{from:[{type:"shortcode",tag:"simple-payment",attributes:{productId:{type:"number",shortcode:function(e){var t=e.named.id;if(t){var n=parseInt(t,10);return n||void 0}}}}}]},edit:Y,save:function(e){var t=e.attributes.productId;return t?Object(i.createElement)(i.RawHTML,null,'[simple-payment id="'.concat(t,'"]')):null},supports:{className:!1,customClassName:!1,html:!1,reusable:!1}};Object(r.a)("simple-payments",X)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(13),a=n.n(i),o=n(0),s=n(16),c=n(2),l=n(6),u=(n(106),n(7)),p=n.n(u),h=n(11),d=n.n(h),m=n(8),f=n.n(m),b=n(9),g=n.n(b),v=n(4),y=n.n(v),j=n(10),O=n.n(j),k=n(12),_=n.n(k),w=n(15),E=n(35),C=n.n(E),x=n(14),S=n(1),A=n(20),M=n(37),T=n(27),z=n.n(T),D=n(34),N=n.n(D),F=n(52),P=n.n(F),R=(n(112),function(e){var t=e.children,n=void 0===t?null:t,r=e.isError,i=void 0!==r&&r,a=N()(e,["children","isError"]),s=_()("help-message",{"help-message-is-error":i});return n&&Object(o.createElement)("div",z()({className:s},a),i&&Object(o.createElement)(P.a,{size:"24"}),Object(o.createElement)("span",null,n))}),I=["jetpack/markdown","core/paragraph","core/image","core/heading","core/gallery","core/list","core/quote","core/shortcode","core/audio","core/code","core/cover","core/file","core/html","core/separator","core/spacer","core/subhead","core/table","core/verse","core/video"],L=function(e){function t(){var e,n;p()(this,t);for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];(n=f()(this,(e=g()(t)).call.apply(e,[this].concat(i)))).onChangeSubject=n.onChangeSubject.bind(y()(n)),n.onBlurTo=n.onBlurTo.bind(y()(n)),n.onChangeTo=n.onChangeTo.bind(y()(n)),n.onChangeSubmit=n.onChangeSubmit.bind(y()(n)),n.onFormSettingsSet=n.onFormSettingsSet.bind(y()(n)),n.getToValidationError=n.getToValidationError.bind(y()(n)),n.renderToAndSubjectFields=n.renderToAndSubjectFields.bind(y()(n)),n.preventEnterSubmittion=n.preventEnterSubmittion.bind(y()(n)),n.hasEmailError=n.hasEmailError.bind(y()(n));var o=(i[0].attributes.to?i[0].attributes.to:"").split(",").map(n.getToValidationError).filter(Boolean);return n.state={toError:o&&o.length?o:null},n}return O()(t,e),d()(t,[{key:"getIntroMessage",value:function(){return Object(S.a)("You’ll receive an email notification each time someone fills out the form. Where should it go, and what should the subject line be?")}},{key:"getEmailHelpMessage",value:function(){return Object(S.a)("You can enter multiple email addresses separated by commas.")}},{key:"onChangeSubject",value:function(e){this.props.setAttributes({subject:e})}},{key:"getToValidationError",value:function(e){return 0!==(e=e.trim()).length&&(!C.a.validate(e)&&{email:e})}},{key:"onBlurTo",value:function(e){var t=e.target.value.split(",").map(this.getToValidationError).filter(Boolean);t&&t.length&&this.setState({toError:t})}},{key:"onChangeTo",value:function(e){if(0===e.trim().length)return this.setState({toError:null}),void this.props.setAttributes({to:e});this.setState({toError:null}),this.props.setAttributes({to:e})}},{key:"onChangeSubmit",value:function(e){this.props.setAttributes({submitButtonText:e})}},{key:"onFormSettingsSet",value:function(e){e.preventDefault(),this.state.toError||this.props.setAttributes({hasFormSettingsSet:"yes"})}},{key:"getfieldEmailError",value:function(e){if(e){if(1===e.length)return e[0]&&e[0].email?Object(w.sprintf)(Object(S.a)("%s is not a valid email address."),e[0].email):e[0];if(2===e.length)return Object(w.sprintf)(Object(S.a)("%s and %s are not a valid email address."),e[0].email,e[1].email);var t=e.map(function(e){return e.email});return Object(w.sprintf)(Object(S.a)("%s are not a valid email address."),t.join(", "))}return null}},{key:"preventEnterSubmittion",value:function(e){"Enter"===e.key&&(e.preventDefault(),e.stopPropagation())}},{key:"renderToAndSubjectFields",value:function(){var e=this.state.toError,t=this.props,n=t.instanceId,r=t.attributes,i=r.subject,a=r.to;return Object(o.createElement)(o.Fragment,null,Object(o.createElement)(c.TextControl,{"aria-describedby":"contact-form-".concat(n,"-email-").concat(this.hasEmailError()?"error":"help"),label:Object(S.a)("Email address"),placeholder:Object(S.a)("name@example.com"),onKeyDown:this.preventEnterSubmittion,value:a,onBlur:this.onBlurTo,onChange:this.onChangeTo}),Object(o.createElement)(R,{isError:!0,id:"contact-form-".concat(n,"-email-error")},this.getfieldEmailError(e)),Object(o.createElement)(R,{id:"contact-form-".concat(n,"-email-help")},this.getEmailHelpMessage()),Object(o.createElement)(c.TextControl,{label:Object(S.a)("Email subject line"),value:i,placeholder:Object(S.a)("Let's work together"),onChange:this.onChangeSubject}))}},{key:"hasEmailError",value:function(){var e=this.state.toError;return e&&e.length>0}},{key:"render",value:function(){var e=this.props,t=e.className,n=e.attributes.hasFormSettingsSet,r=_()(t,"jetpack-contact-form",{"has-intro":!n});return Object(o.createElement)(o.Fragment,null,Object(o.createElement)(l.InspectorControls,null,Object(o.createElement)(c.PanelBody,{title:Object(S.a)("Email feedback settings")},this.renderToAndSubjectFields())),Object(o.createElement)("div",{className:r},!n&&Object(o.createElement)(c.Placeholder,{label:Object(S.a)("Form"),icon:Object(A.a)(Object(o.createElement)(c.Path,{d:"M13 7.5h5v2h-5zm0 7h5v2h-5zM19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zM11 6H6v5h5V6zm-1 4H7V7h3v3zm1 3H6v5h5v-5zm-1 4H7v-3h3v3z"}))},Object(o.createElement)("form",{onSubmit:this.onFormSettingsSet},Object(o.createElement)("p",{className:"jetpack-contact-form__intro-message"},this.getIntroMessage()),this.renderToAndSubjectFields(),Object(o.createElement)("p",{className:"jetpack-contact-form__intro-message"},Object(S.a)("(If you leave these blank, notifications will go to the author with the post or page title as the subject line.)")),Object(o.createElement)("div",{className:"jetpack-contact-form__create"},Object(o.createElement)(c.Button,{isPrimary:!0,type:"submit",disabled:this.hasEmailError()},Object(S.a)("Add form"))))),n&&Object(o.createElement)(l.InnerBlocks,{allowedBlocks:I,templateLock:!1,template:[["jetpack/field-name",{required:!0}],["jetpack/field-email",{required:!0}],["jetpack/field-url",{}],["jetpack/field-textarea",{}]]}),n&&Object(o.createElement)(M.a,this.props)))}}]),t}(o.Component),B=Object(x.compose)([x.withInstanceId])(L),q=function(e){var t=e.setAttributes,n=e.label,r=e.resetFocus,i=e.isSelected,a=e.required;return Object(o.createElement)("div",{className:"jetpack-field-label"},Object(o.createElement)(l.PlainText,{value:n,className:"jetpack-field-label__input",onChange:function(e){r&&r(),t({label:e})},placeholder:Object(S.a)("Write label…")}),i&&Object(o.createElement)(c.ToggleControl,{label:Object(S.a)("Required"),className:"jetpack-field-label__required",checked:a,onChange:function(e){return t({required:e})}}),!i&&a&&Object(o.createElement)("span",{className:"required"},Object(S.a)("(required)")))};var V=function(e){var t=e.isSelected,n=e.type,r=e.required,i=e.label,a=e.setAttributes,s=e.defaultValue,u=e.placeholder,p=e.id;return Object(o.createElement)(o.Fragment,null,Object(o.createElement)("div",{className:_()("jetpack-field",{"is-selected":t})},Object(o.createElement)(c.TextControl,{type:n,label:Object(o.createElement)(q,{required:r,label:i,setAttributes:a,isSelected:t}),placeholder:u,value:u,onChange:function(e){return a({placeholder:e})},title:Object(S.a)("Set the placeholder text")})),Object(o.createElement)(l.InspectorControls,null,Object(o.createElement)(c.PanelBody,{title:Object(S.a)("Field Settings")},Object(o.createElement)(c.TextControl,{label:Object(S.a)("Default Value"),value:s,onChange:function(e){return a({defaultValue:e})}}),Object(o.createElement)(c.TextControl,{label:Object(S.a)("ID"),value:p,onChange:function(e){return a({id:e})}}))))};var H=function(e){var t=e.required,n=e.label,r=e.setAttributes,i=e.isSelected,a=e.defaultValue,s=e.placeholder,u=e.id;return Object(o.createElement)(o.Fragment,null,Object(o.createElement)("div",{className:"jetpack-field"},Object(o.createElement)(c.TextareaControl,{label:Object(o.createElement)(q,{required:t,label:n,setAttributes:r,isSelected:i}),placeholder:s,value:s,onChange:function(e){return r({placeholder:e})},title:Object(S.a)("Set the placeholder text")})),Object(o.createElement)(l.InspectorControls,null,Object(o.createElement)(c.PanelBody,{title:Object(S.a)("Field Settings")},Object(o.createElement)(c.TextControl,{label:Object(S.a)("Default Value"),value:a,onChange:function(e){return r({defaultValue:e})}}),Object(o.createElement)(c.TextControl,{label:Object(S.a)("ID"),value:u,onChange:function(e){return r({id:e})}}))))},U=Object(x.withInstanceId)(function(e){var t=e.instanceId,n=e.required,r=e.label,i=e.setAttributes,a=e.isSelected,s=e.defaultValue,u=e.id;return Object(o.createElement)(c.BaseControl,{id:"jetpack-field-checkbox-".concat(t),className:"jetpack-field jetpack-field-checkbox",label:Object(o.createElement)(o.Fragment,null,Object(o.createElement)("input",{className:"jetpack-field-checkbox__checkbox",type:"checkbox",disabled:!0,checked:s}),Object(o.createElement)(q,{required:n,label:r,setAttributes:i,isSelected:a}),Object(o.createElement)(l.InspectorControls,null,Object(o.createElement)(c.PanelBody,{title:Object(S.a)("Field Settings")},Object(o.createElement)(c.ToggleControl,{label:Object(S.a)("Default Checked State"),checked:s,onChange:function(e){return i({defaultValue:e})}}),Object(o.createElement)(c.TextControl,{label:Object(S.a)("ID"),value:u,onChange:function(e){return i({id:e})}}))))})}),G=function(e){function t(){var e,n;p()(this,t);for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];return(n=f()(this,(e=g()(t)).call.apply(e,[this].concat(i)))).onChangeOption=n.onChangeOption.bind(y()(n)),n.onKeyPress=n.onKeyPress.bind(y()(n)),n.onDeleteOption=n.onDeleteOption.bind(y()(n)),n.textInput=Object(o.createRef)(),n}return O()(t,e),d()(t,[{key:"componentDidMount",value:function(){this.props.isInFocus&&this.textInput.current.focus()}},{key:"componentDidUpdate",value:function(){this.props.isInFocus&&this.textInput.current.focus()}},{key:"onChangeOption",value:function(e){this.props.onChangeOption(this.props.index,e.target.value)}},{key:"onKeyPress",value:function(e){return"Enter"===e.key?(this.props.onAddOption(this.props.index),void e.preventDefault()):"Backspace"===e.key&&""===e.target.value?(this.props.onChangeOption(this.props.index),void e.preventDefault()):void 0}},{key:"onDeleteOption",value:function(){this.props.onChangeOption(this.props.index)}},{key:"render",value:function(){var e=this.props,t=e.isSelected,n=e.option,r=e.type;return Object(o.createElement)("li",{className:"jetpack-option"},r&&"select"!==r&&Object(o.createElement)("input",{className:"jetpack-option__type",type:r,disabled:!0}),Object(o.createElement)("input",{type:"text",className:"jetpack-option__input",value:n,placeholder:Object(S.a)("Write option…"),onChange:this.onChangeOption,onKeyDown:this.onKeyPress,ref:this.textInput}),t&&Object(o.createElement)(c.IconButton,{className:"jetpack-option__remove",icon:"trash",label:Object(S.a)("Remove option"),onClick:this.onDeleteOption}))}}]),t}(o.Component),$=function(e){function t(){var e,n;p()(this,t);for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];return(n=f()(this,(e=g()(t)).call.apply(e,[this].concat(i)))).onChangeOption=n.onChangeOption.bind(y()(n)),n.addNewOption=n.addNewOption.bind(y()(n)),n.state={inFocus:null},n}return O()(t,e),d()(t,[{key:"onChangeOption",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=this.props.options.slice(0);null===t?(n.splice(e,1),e>0&&this.setState({inFocus:e-1})):(n.splice(e,1,t),this.setState({inFocus:e})),this.props.setAttributes({options:n})}},{key:"addNewOption",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=this.props.options.slice(0),n=0;"object"==typeof e?(t.push(""),n=t.length-1):(t.splice(e+1,0,""),n=e+1),this.setState({inFocus:n}),this.props.setAttributes({options:t})}},{key:"render",value:function(){var e=this,t=this.props,n=t.type,r=t.instanceId,i=t.required,a=t.label,s=t.setAttributes,u=t.isSelected,p=t.id,h=this.props.options,d=this.state.inFocus;return h.length||(h=[""],d=0),Object(o.createElement)(o.Fragment,null,Object(o.createElement)(c.BaseControl,{id:"jetpack-field-multiple-".concat(r),className:"jetpack-field jetpack-field-multiple",label:Object(o.createElement)(q,{required:i,label:a,setAttributes:s,isSelected:u,resetFocus:function(){return e.setState({inFocus:null})}})},Object(o.createElement)("ol",{className:"jetpack-field-multiple__list",id:"jetpack-field-multiple-".concat(r)},h.map(function(t,r){return Object(o.createElement)(G,{type:n,key:r,option:t,index:r,onChangeOption:e.onChangeOption,onAddOption:e.addNewOption,isInFocus:r===d&&u,isSelected:u})})),u&&Object(o.createElement)(c.IconButton,{className:"jetpack-field-multiple__add-option",icon:"insert",label:Object(S.a)("Insert option"),onClick:this.addNewOption},Object(S.a)("Add option"))),Object(o.createElement)(l.InspectorControls,null,Object(o.createElement)(c.PanelBody,{title:Object(S.a)("Field Settings")},Object(o.createElement)(c.TextControl,{label:Object(S.a)("ID"),value:p,onChange:function(e){return s({id:e})}}))))}}]),t}(o.Component),K=Object(x.withInstanceId)($),Z={title:Object(S.a)("Form"),description:Object(S.a)("A simple way to get feedback from folks visiting your site."),icon:Object(A.a)(Object(o.createElement)(c.Path,{d:"M13 7.5h5v2h-5zm0 7h5v2h-5zM19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zM11 6H6v5h5V6zm-1 4H7V7h3v3zm1 3H6v5h5v-5zm-1 4H7v-3h3v3z"})),keywords:[Object(S.a)("email"),Object(S.a)("feedback"),Object(S.a)("contact")],category:"jetpack",supports:{reusable:!1,html:!1},attributes:{subject:{type:"string",default:""},to:{type:"string",default:""},submitButtonText:{type:"string",default:Object(S.a)("Submit")},customBackgroundButtonColor:{type:"string"},customTextButtonColor:{type:"string"},submitButtonClasses:{type:"string"},hasFormSettingsSet:{type:"string",default:null},has_form_settings_set:{type:"string",default:null},submit_button_text:{type:"string",default:Object(S.a)("Submit")}},edit:B,save:l.InnerBlocks.Content,deprecated:[{attributes:{subject:{type:"string",default:""},to:{type:"string",default:""},submit_button_text:{type:"string",default:Object(S.a)("Submit")},has_form_settings_set:{type:"string",default:null}},migrate:function(e){return{submitButtonText:e.submit_button_text,hasFormSettingsSet:e.has_form_settings_set,to:e.to,subject:e.subject}},isEligible:function(e){return!(!e.has_form_settings_set&&"Submit"===e.submit_button_text)},save:l.InnerBlocks.Content}]},W={category:"jetpack",parent:["jetpack/contact-form"],supports:{reusable:!1,html:!1},attributes:{label:{type:"string",default:null},required:{type:"boolean",default:!1},options:{type:"array",default:[]},defaultValue:{type:"string",default:""},placeholder:{type:"string",default:""},id:{type:"string",default:""}},transforms:{to:[{type:"block",blocks:["jetpack/field-text"],isMatch:function(e){return!e.options.length},transform:function(e){return Object(s.createBlock)("jetpack/field-text",e)}},{type:"block",blocks:["jetpack/field-name"],isMatch:function(e){return!e.options.length},transform:function(e){return Object(s.createBlock)("jetpack/field-name",e)}},{type:"block",blocks:["jetpack/field-email"],isMatch:function(e){return!e.options.length},transform:function(e){return Object(s.createBlock)("jetpack/field-email",e)}},{type:"block",blocks:["jetpack/field-url"],isMatch:function(e){return!e.options.length},transform:function(e){return Object(s.createBlock)("jetpack/field-url",e)}},{type:"block",blocks:["jetpack/field-date"],isMatch:function(e){return!e.options.length},transform:function(e){return Object(s.createBlock)("jetpack/field-date",e)}},{type:"block",blocks:["jetpack/field-telephone"],isMatch:function(e){return!e.options.length},transform:function(e){return Object(s.createBlock)("jetpack/field-telephone",e)}},{type:"block",blocks:["jetpack/field-textarea"],isMatch:function(e){return!e.options.length},transform:function(e){return Object(s.createBlock)("jetpack/field-textarea",e)}},{type:"block",blocks:["jetpack/field-checkbox-multiple"],isMatch:function(e){return 1<=e.options.length},transform:function(e){return Object(s.createBlock)("jetpack/field-checkbox-multiple",e)}},{type:"block",blocks:["jetpack/field-radio"],isMatch:function(e){return 1<=e.options.length},transform:function(e){return Object(s.createBlock)("jetpack/field-radio",e)}},{type:"block",blocks:["jetpack/field-select"],isMatch:function(e){return 1<=e.options.length},transform:function(e){return Object(s.createBlock)("jetpack/field-select",e)}}]},save:function(){return null}},J=function(e){var t=e.attributes,n=e.name;return null===t.label?Object(s.getBlockType)(n).title:t.label},Y=function(e){return function(t){return Object(o.createElement)(V,{type:e,label:J(t),required:t.attributes.required,setAttributes:t.setAttributes,isSelected:t.isSelected,defaultValue:t.attributes.defaultValue,placeholder:t.attributes.placeholder,id:t.attributes.id})}},X=function(e){return function(t){return Object(o.createElement)(K,{label:J(t),required:t.attributes.required,options:t.attributes.options,setAttributes:t.setAttributes,type:e,isSelected:t.isSelected,id:t.attributes.id})}},Q=[{name:"field-text",settings:a()({},W,{title:Object(S.a)("Text"),description:Object(S.a)("When you need just a small amount of text, add a text input."),icon:Object(A.a)(Object(o.createElement)(c.Path,{d:"M4 9h16v2H4V9zm0 4h10v2H4v-2z"})),edit:Y("text")})},{name:"field-name",settings:a()({},W,{title:Object(S.a)("Name"),description:Object(S.a)("Introductions are important. Add an input for folks to add their name."),icon:Object(A.a)(Object(o.createElement)(c.Path,{d:"M12 6c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2m0 10c2.7 0 5.8 1.29 6 2H6c.23-.72 3.31-2 6-2m0-12C9.79 4 8 5.79 8 8s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 10c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"})),edit:Y("text")})},{name:"field-email",settings:a()({},W,{title:Object(S.a)("Email"),keywords:[Object(S.a)("e-mail"),Object(S.a)("mail"),"email"],description:Object(S.a)("Want to reply to folks? Add an email address input."),icon:Object(A.a)(Object(o.createElement)(c.Path,{d:"M22 6c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6zm-2 0l-8 5-8-5h16zm0 12H4V8l8 5 8-5v10z"})),edit:Y("email")})},{name:"field-url",settings:a()({},W,{title:Object(S.a)("Website"),keywords:["url",Object(S.a)("internet page"),"link"],description:Object(S.a)("Add an address input for a website."),icon:Object(A.a)(Object(o.createElement)(c.Path,{d:"M20 18c1.1 0 1.99-.9 1.99-2L22 6c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2H0v2h24v-2h-4zM4 6h16v10H4V6z"})),edit:Y("url")})},{name:"field-date",settings:a()({},W,{title:Object(S.a)("Date Picker"),keywords:[Object(S.a)("Calendar"),Object(S.a)("day month year","block search term")],description:Object(S.a)("The best way to set a date. Add a date picker."),icon:Object(A.a)(Object(o.createElement)(c.Path,{d:"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V9h14v10zm0-12H5V5h14v2zM7 11h5v5H7z"})),edit:Y("text")})},{name:"field-telephone",settings:a()({},W,{title:Object(S.a)("Telephone"),keywords:[Object(S.a)("Phone"),Object(S.a)("Cellular phone"),Object(S.a)("Mobile")],description:Object(S.a)("Add a phone number input."),icon:Object(A.a)(Object(o.createElement)(c.Path,{d:"M6.54 5c.06.89.21 1.76.45 2.59l-1.2 1.2c-.41-1.2-.67-2.47-.76-3.79h1.51m9.86 12.02c.85.24 1.72.39 2.6.45v1.49c-1.32-.09-2.59-.35-3.8-.75l1.2-1.19M7.5 3H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 17 .55 0 1-.45 1-1v-3.49c0-.55-.45-1-1-1-1.24 0-2.45-.2-3.57-.57-.1-.04-.21-.05-.31-.05-.26 0-.51.1-.71.29l-2.2 2.2c-2.83-1.45-5.15-3.76-6.59-6.59l2.2-2.2c.28-.28.36-.67.25-1.02C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1z"})),edit:Y("tel")})},{name:"field-textarea",settings:a()({},W,{title:Object(S.a)("Message"),keywords:[Object(S.a)("Textarea"),"textarea",Object(S.a)("Multiline text")],description:Object(S.a)("Let folks speak their mind. This text box is great for longer responses."),icon:Object(A.a)(Object(o.createElement)(c.Path,{d:"M21 11.01L3 11v2h18zM3 16h12v2H3zM21 6H3v2.01L21 8z"})),edit:function(e){return Object(o.createElement)(H,{label:J(e),required:e.attributes.required,setAttributes:e.setAttributes,isSelected:e.isSelected,defaultValue:e.attributes.defaultValue,placeholder:e.attributes.placeholder,id:e.attributes.id})}})},{name:"field-checkbox",settings:a()({},W,{title:Object(S.a)("Checkbox"),keywords:[Object(S.a)("Confirm"),Object(S.a)("Accept")],description:Object(S.a)("Add a single checkbox."),icon:Object(A.a)(Object(o.createElement)(c.Path,{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zM17.99 9l-1.41-1.42-6.59 6.59-2.58-2.57-1.42 1.41 4 3.99z"})),edit:function(e){return Object(o.createElement)(U,{label:e.attributes.label,required:e.attributes.required,setAttributes:e.setAttributes,isSelected:e.isSelected,defaultValue:e.attributes.defaultValue,id:e.attributes.id})},attributes:a()({},W.attributes,{label:{type:"string",default:""}})})},{name:"field-checkbox-multiple",settings:a()({},W,{title:Object(S.a)("Checkbox Group"),keywords:[Object(S.a)("Choose Multiple"),Object(S.a)("Option")],description:Object(S.a)("People love options. Add several checkbox items."),icon:Object(A.a)(Object(o.createElement)(c.Path,{d:"M18 7l-1.41-1.41-6.34 6.34 1.41 1.41L18 7zm4.24-1.41L11.66 16.17 7.48 12l-1.41 1.41L11.66 19l12-12-1.42-1.41zM.41 13.41L6 19l1.41-1.41L1.83 12 .41 13.41z"})),edit:X("checkbox"),attributes:a()({},W.attributes,{label:{type:"string",default:"Choose several"}})})},{name:"field-radio",settings:a()({},W,{title:Object(S.a)("Radio"),keywords:[Object(S.a)("Choose"),Object(S.a)("Select"),Object(S.a)("Option")],description:Object(S.a)("Inspired by radios, only one radio item can be selected at a time. Add several radio button items."),icon:Object(A.a)(Object(o.createElement)(o.Fragment,null,Object(o.createElement)(c.Path,{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"}),Object(o.createElement)(c.Circle,{cx:"12",cy:"12",r:"5"}))),edit:X("radio"),attributes:a()({},W.attributes,{label:{type:"string",default:"Choose one"}})})},{name:"field-select",settings:a()({},W,{title:Object(S.a)("Select"),keywords:[Object(S.a)("Choose"),Object(S.a)("Dropdown"),Object(S.a)("Option")],description:Object(S.a)("Compact, but powerful. Add a select box with several items."),icon:Object(A.a)(Object(o.createElement)(c.Path,{d:"M3 17h18v2H3zm16-5v1H5v-1h14m2-2H3v5h18v-5zM3 6h18v2H3z"})),edit:X("select"),attributes:a()({},W.attributes,{label:{type:"string",default:"Select one"}})})}];Object(r.a)("contact-form",Z,Q)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(25),a=n(7),o=n.n(a),s=n(11),c=n.n(s),l=n(8),u=n.n(l),p=n(9),h=n.n(p),d=n(4),m=n.n(d),f=n(10),b=n.n(f),g=n(3),v=n.n(g),y=n(0),j=n(26),O=n.n(j),k=n(2),_=n(6),w=n(21),E=n.n(w),C=n(12),x=n.n(C),S=n(5),A=n(28),M=n(15),T=n(14),z=n(1);function D(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10,n=[],r=0;r<e.length;r++){var i=e[r],a=i.keywords,o=void 0===a?[]:a;if("string"==typeof i.label&&(o=[].concat(E()(o),[i.label])),n.push(i),n.length===t)break}return n}var N=function(e){function t(){var e;return o()(this,t),e=u()(this,h()(t).apply(this,arguments)),v()(m()(e),"select",function(t){(e.props.completer.getOptionCompletion||{})(t),e.reset()}),v()(m()(e),"reset",function(){e.setState(e.constructor.getInitialState())}),v()(m()(e),"onChange",function(t){var n=e.props.completer,r=e.state.options;if(t){n&&(n.isDebounced?e.debouncedLoadOptions(n,t):e.loadOptions(n,t));var i=n?D(r):[];n&&e.setState({selectedIndex:0,filteredOptions:i,query:t})}else e.reset()}),v()(m()(e),"onKeyDown",function(t){var n=e.state,r=n.isOpen,i=n.selectedIndex,a=n.filteredOptions;if(r){var o;switch(t.keyCode){case A.UP:o=(0===i?a.length:i)-1,e.setState({selectedIndex:o});break;case A.DOWN:o=(i+1)%a.length,e.setState({selectedIndex:o});break;case A.ENTER:e.select(a[i]);break;case A.LEFT:case A.RIGHT:case A.ESCAPE:return void e.reset();default:return}t.preventDefault(),t.stopPropagation()}}),e.debouncedLoadOptions=Object(S.debounce)(e.loadOptions,250),e.state=e.constructor.getInitialState(),e}return b()(t,e),c()(t,null,[{key:"getInitialState",value:function(){return{selectedIndex:0,query:void 0,filteredOptions:[],isOpen:!1}}}]),c()(t,[{key:"componentWillUnmount",value:function(){this.debouncedLoadOptions.cancel()}},{key:"handleFocusOutside",value:function(){this.reset()}},{key:"loadOptions",value:function(e,t){var n=this,r=e.options,i=this.activePromise=Promise.resolve("function"==typeof r?r(t):r).then(function(t){var r;if(i===n.activePromise){var a=t.map(function(t,n){return{key:"".concat(n),value:t,label:e.getOptionLabel(t),keywords:e.getOptionKeywords?e.getOptionKeywords(t):[]}}),o=D(a),s=o.length===n.state.filteredOptions.length?n.state.selectedIndex:0;n.setState((r={},v()(r,"options",a),v()(r,"filteredOptions",o),v()(r,"selectedIndex",s),v()(r,"isOpen",o.length>0),r)),n.announce(o)}})}},{key:"announce",value:function(e){var t=this.props.debouncedSpeak;t&&(e.length?t(Object(M.sprintf)(Object(z.b)("%d result found, use up and down arrow keys to navigate.","%d results found, use up and down arrow keys to navigate.",e.length,"jetpack"),e.length),"assertive"):t(Object(z.a)("No results."),"assertive"))}},{key:"render",value:function(){var e=this,t=this.onChange,n=this.onKeyDown,r=this.props,i=r.children,a=r.instanceId,o=r.completer,s=this.state,c=s.selectedIndex,l=s.filteredOptions,u=(l[c]||{}).key,p=void 0===u?"":u,h=o.className,d=l.length>0,m=d?"components-autocomplete-listbox-".concat(a):null,f=d?"components-autocomplete-item-".concat(a,"-").concat(p):null;return Object(y.createElement)("div",{className:"components-autocomplete"},i({isExpanded:d,listBoxId:m,activeId:f,onChange:t,onKeyDown:n}),d&&Object(y.createElement)(k.Popover,{focusOnMount:!1,onClose:this.reset,position:"top center",className:"components-autocomplete__popover",noArrow:!0},Object(y.createElement)("div",{id:m,role:"listbox",className:"components-autocomplete__results"},Object(S.map)(l,function(t,n){return Object(y.createElement)(k.Button,{key:t.key,id:"components-autocomplete-item-".concat(a,"-").concat(t.key),role:"option","aria-selected":n===c,disabled:t.isDisabled,className:x()("components-autocomplete__result",h,{"is-selected":n===c}),onClick:function(){return e.select(t)}},t.label)}))))}}]),t}(y.Component),F=Object(T.compose)([k.withSpokenMessages,T.withInstanceId,k.withFocusOutside])(N),P=Object(z.a)("Add a marker…"),R=function(e){function t(){var e;return o()(this,t),e=u()(this,h()(t).apply(this,arguments)),v()(m()(e),"getOptionCompletion",function(t){var n=t.value,r={placeTitle:n.text,title:n.text,caption:n.place_name,id:n.id,coordinates:{longitude:n.geometry.coordinates[0],latitude:n.geometry.coordinates[1]}};return e.props.onAddPoint(r),n.text}),v()(m()(e),"search",function(t){var n=e.props,r=n.apiKey,i=n.onError,a="https://api.mapbox.com/geocoding/v5/mapbox.places/"+encodeURI(t)+".json?access_token="+r;return new Promise(function(e,t){var n=new XMLHttpRequest;n.open("GET",a),n.onload=function(){if(200===n.status){var r=JSON.parse(n.responseText);e(r.features)}else{var a=JSON.parse(n.responseText);i(a.statusText,a.responseJSON.message),t(new Error("Mapbox Places Error"))}},n.send()})}),v()(m()(e),"onReset",function(){e.textRef.current.value=null}),e.textRef=Object(y.createRef)(),e.containerRef=Object(y.createRef)(),e.state={isEmpty:!0},e.autocompleter={name:"placeSearch",options:e.search,isDebounced:!0,getOptionLabel:function(e){return Object(y.createElement)("span",null,e.place_name)},getOptionKeywords:function(e){return[e.place_name]},getOptionCompletion:e.getOptionCompletion},e}return b()(t,e),c()(t,[{key:"componentDidMount",value:function(){var e=this;setTimeout(function(){e.containerRef.current.querySelector("input").focus()},50)}},{key:"render",value:function(){var e=this,t=this.props.label;return Object(y.createElement)("div",{ref:this.containerRef},Object(y.createElement)(k.BaseControl,{label:t,className:"components-location-search"},Object(y.createElement)(F,{completer:this.autocompleter,onReset:this.onReset},function(t){var n=t.isExpanded,r=t.listBoxId,i=t.activeId,a=t.onChange,o=t.onKeyDown;return Object(y.createElement)(k.TextControl,{placeholder:P,ref:e.textRef,onChange:a,"aria-expanded":n,"aria-owns":r,"aria-activedescendant":i,onKeyDown:o})})))}}]),t}(y.Component);R.defaultProps={onError:function(){}};var I=R,L=(n(120),function(e){function t(){return o()(this,t),u()(this,h()(t).apply(this,arguments))}return b()(t,e),c()(t,[{key:"render",value:function(){var e=this.props,t=e.onClose,n=e.onAddPoint,r=e.onError,i=e.apiKey;return Object(y.createElement)(k.Button,{className:"component__add-point"},Object(z.a)("Add marker"),Object(y.createElement)(k.Popover,{className:"component__add-point__popover"},Object(y.createElement)(k.Button,{className:"component__add-point__close",onClick:t},Object(y.createElement)(k.Dashicon,{icon:"no"})),Object(y.createElement)(I,{onAddPoint:n,label:Object(z.a)("Add a location"),apiKey:i,onError:r})))}}]),t}(y.Component));L.defaultProps={onAddPoint:function(){},onClose:function(){},onError:function(){}};var B=L,q=(n(122),function(e){function t(){var e;return o()(this,t),e=u()(this,h()(t).apply(this,arguments)),v()(m()(e),"onDeletePoint",function(t){var n=parseInt(t.target.getAttribute("data-id")),r=e.props,i=r.points,a=r.onChange,o=i.slice(0);o.splice(n,1),a(o)}),e.state={selectedCell:null},e}return b()(t,e),c()(t,[{key:"setMarkerField",value:function(e,t,n){var r=this.props,i=r.points,a=r.onChange,o=i.slice(0);o[n][e]=t,a(o)}},{key:"render",value:function(){var e=this,t=this.props.points.map(function(t,n){return Object(y.createElement)(k.PanelBody,{title:t.placeTitle,key:t.id,initialOpen:!1},Object(y.createElement)(k.TextControl,{label:"Marker Title",value:t.title,onChange:function(t){return e.setMarkerField("title",t,n)}}),Object(y.createElement)(k.TextareaControl,{label:"Marker Caption",value:t.caption,rows:"3",onChange:function(t){return e.setMarkerField("caption",t,n)}}),Object(y.createElement)(k.Button,{"data-id":n,onClick:e.onDeletePoint,className:"component__locations__delete-btn"},Object(y.createElement)(k.Dashicon,{icon:"trash",size:"15"})," Delete Marker"))});return Object(y.createElement)("div",{className:"component__locations"},Object(y.createElement)(k.Panel,{className:"component__locations__panel"},t))}}]),t}(y.Component));q.defaultProps={points:Object.freeze([]),onChange:function(){}};var V=q,H=n(57),U=(n(124),function(e){function t(){return o()(this,t),u()(this,h()(t).apply(this,arguments))}return b()(t,e),c()(t,[{key:"render",value:function(){var e=this.props,t=e.options,n=e.value,r=e.onChange,i=e.label,a=t.map(function(e,t){var i=x()("component__map-theme-picker__button","is-theme-"+e.value,e.value===n?"is-selected":"");return Object(y.createElement)(k.Button,{className:i,title:e.label,key:t,onClick:function(){return r(e.value)}},e.label)});return Object(y.createElement)("div",{className:"component__map-theme-picker components-base-control"},Object(y.createElement)("label",{className:"components-base-control__label"},i),Object(y.createElement)(k.ButtonGroup,null,a))}}]),t}(y.Component));U.defaultProps={label:"",options:[],value:null,onChange:function(){}};var G=U,$=0,K=function(e){function t(){var e;return o()(this,t),e=u()(this,h()(t).apply(this,arguments)),v()(m()(e),"addPoint",function(t){var n=e.props,r=n.attributes,i=n.setAttributes,a=r.points,o=a.slice(0),s=!1;a.map(function(e){e.id===t.id&&(s=!0)}),s||(o.push(t),i({points:o}),e.setState({addPointVisibility:!1}))}),v()(m()(e),"updateAlignment",function(t){e.props.setAttributes({align:t}),setTimeout(e.mapRef.current.sizeMap,0)}),v()(m()(e),"updateAPIKeyControl",function(t){e.setState({apiKeyControl:t})}),v()(m()(e),"updateAPIKey",function(){var t=e.props.noticeOperations,n=e.state.apiKeyControl;t.removeAllNotices(),n&&e.apiCall(n,"POST")}),v()(m()(e),"removeAPIKey",function(){e.apiCall(null,"DELETE")}),v()(m()(e),"onError",function(t,n){var r=e.props.noticeOperations;r.removeAllNotices(),r.createErrorNotice(n)}),e.state={addPointVisibility:!1,apiState:$},e.mapRef=Object(y.createRef)(),e}return b()(t,e),c()(t,[{key:"apiCall",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"GET",r=this.props.noticeOperations,i=this.state.apiKey,a="/wpcom/v2/service-api-keys/mapbox",o=t?{path:a,method:n,data:{service_api_key:t}}:{path:a,method:n};this.setState({apiRequestOutstanding:!0},function(){O()(o).then(function(t){r.removeAllNotices(),e.setState({apiState:t.service_api_key?2:1,apiKey:t.service_api_key,apiKeyControl:t.service_api_key,apiRequestOutstanding:!1})},function(t){e.onError(null,t.message),e.setState({apiRequestOutstanding:!1,apiKeyControl:i})})})}},{key:"componentDidMount",value:function(){this.apiCall()}},{key:"render",value:function(){var e=this,t=this.props,n=t.className,r=t.setAttributes,a=t.attributes,o=t.noticeUI,s=t.notices,c=a.mapStyle,l=a.mapDetails,u=a.points,p=a.zoom,h=a.mapCenter,d=a.markerColor,m=a.align,f=this.state,b=f.addPointVisibility,g=f.apiKey,v=f.apiKeyControl,j=f.apiState,O=f.apiRequestOutstanding,w=Object(y.createElement)(y.Fragment,null,Object(y.createElement)(_.BlockControls,null,Object(y.createElement)(_.BlockAlignmentToolbar,{value:m,onChange:this.updateAlignment,controls:["center","wide","full"]}),Object(y.createElement)(k.Toolbar,null,Object(y.createElement)(k.IconButton,{icon:i.a.markerIcon,label:"Add a marker",onClick:function(){return e.setState({addPointVisibility:!0})}}))),Object(y.createElement)(_.InspectorControls,null,Object(y.createElement)(k.PanelBody,{title:Object(z.a)("Map Theme")},Object(y.createElement)(G,{value:c,onChange:function(e){return r({mapStyle:e})},options:i.a.mapStyleOptions}),Object(y.createElement)(k.ToggleControl,{label:Object(z.a)("Show street names"),checked:l,onChange:function(e){return r({mapDetails:e})}})),Object(y.createElement)(_.PanelColorSettings,{title:Object(z.a)("Colors"),initialOpen:!0,colorSettings:[{value:d,onChange:function(e){return r({markerColor:e})},label:"Marker Color"}]}),u.length?Object(y.createElement)(k.PanelBody,{title:Object(z.a)("Markers"),initialOpen:!1},Object(y.createElement)(V,{points:u,onChange:function(e){r({points:e})}})):null,Object(y.createElement)(k.PanelBody,{title:Object(z.a)("Mapbox Access Token"),initialOpen:!1},Object(y.createElement)(k.TextControl,{label:Object(z.a)("Mapbox Access Token"),value:v,onChange:function(t){return e.setState({apiKeyControl:t})}}),Object(y.createElement)(k.ButtonGroup,null,Object(y.createElement)(k.Button,{type:"button",onClick:this.updateAPIKey,isDefault:!0},Object(z.a)("Update Token")),Object(y.createElement)(k.Button,{type:"button",onClick:this.removeAPIKey,isDefault:!0},Object(z.a)("Remove Token")))))),E=Object(y.createElement)(k.Placeholder,{icon:i.a.icon},Object(y.createElement)(k.Spinner,null)),C=Object(y.createElement)(k.Placeholder,{icon:i.a.icon,label:Object(z.a)("Map"),notices:s},Object(y.createElement)(y.Fragment,null,Object(y.createElement)("div",{className:"components-placeholder__instructions"},Object(z.a)("To use the map block, you need an Access Token."),Object(y.createElement)("br",null),Object(y.createElement)(k.ExternalLink,{href:"https://www.mapbox.com"},Object(z.a)("Create an account or log in to Mapbox.")),Object(y.createElement)("br",null),Object(z.a)("Locate and copy the default access token. Then, paste it into the field below.")),Object(y.createElement)(k.TextControl,{className:"wp-block-jetpack-map-components-text-control-api-key",disabled:O,placeholder:Object(z.a)("Paste Token Here"),value:v,onChange:this.updateAPIKeyControl}),Object(y.createElement)(k.Button,{className:"wp-block-jetpack-map-components-text-control-api-key-submit",isLarge:!0,disabled:O||!v||v.length<1,onClick:this.updateAPIKey},Object(z.a)("Set Token")))),x=Object(y.createElement)(y.Fragment,null,w,Object(y.createElement)("div",{className:n},Object(y.createElement)(H.a,{ref:this.mapRef,mapStyle:c,mapDetails:l,points:u,zoom:p,mapCenter:h,markerColor:d,onSetZoom:function(e){r({zoom:e})},admin:!0,apiKey:g,onSetPoints:function(e){return r({points:e})},onMapLoaded:function(){return e.setState({addPointVisibility:!0})},onMarkerClick:function(){return e.setState({addPointVisibility:!1})},onError:this.onError},b&&Object(y.createElement)(B,{onAddPoint:this.addPoint,onClose:function(){return e.setState({addPointVisibility:!1})},apiKey:g,onError:this.onError,tagName:"AddPoint"}))));return Object(y.createElement)(y.Fragment,null,o,j===$&&E,1===j&&C,2===j&&x)}}]),t}(y.Component),Z=Object(k.withNotices)(K),W=function(e){function t(){return o()(this,t),u()(this,h()(t).apply(this,arguments))}return b()(t,e),c()(t,[{key:"render",value:function(){var e=this.props.attributes,t=e.align,n=e.mapStyle,r=e.mapDetails,i=e.points,a=e.zoom,o=e.mapCenter,s=e.markerColor,c=i.map(function(e,t){var n=e.coordinates,r=n.longitude,i="https://www.google.com/maps/search/?api=1&query="+n.latitude+","+r;return Object(y.createElement)("li",{key:t},Object(y.createElement)("a",{href:i},e.title))}),l=t?"align".concat(t):null;return Object(y.createElement)("div",{className:l,"data-map-style":n,"data-map-details":r,"data-points":JSON.stringify(i),"data-zoom":a,"data-map-center":JSON.stringify(o),"data-marker-color":s},i.length>0&&Object(y.createElement)("ul",null,c))}}]),t}(y.Component),J=(n(78),n(126),i.a.name),Y={title:i.a.title,icon:i.a.icon,category:i.a.category,keywords:i.a.keywords,description:i.a.description,attributes:i.a.attributes,supports:i.a.supports,getEditWrapperProps:function(e){var t=e.align;if(-1!==i.a.validAlignments.indexOf(t))return{"data-align":t}},edit:Z,save:W};Object(r.a)(J,Y)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(0),a=n(2),o=n(1),s=n(21),c=n.n(s),l=n(7),u=n.n(l),p=n(11),h=n.n(p),d=n(8),m=n.n(d),f=n(9),b=n.n(f),g=n(4),v=n.n(g),y=n(10),j=n.n(y),O=n(3),k=n.n(O),_=n(24),w=n(14),E=n(17),C=n(6),x=n(5),S=n(31),A=n(12),M=n.n(A),T=n(55),z=n(30),D=function(e){function t(e){var n;return u()(this,t),n=m()(this,b()(t).call(this,e)),k()(v()(n),"pendingRequestAnimationFrame",null),k()(v()(n),"resizeObserver",null),k()(v()(n),"initializeResizeObserver",function(e){n.clearResizeObserver(),n.resizeObserver=new S.a(function(){n.clearPendingRequestAnimationFrame(),n.pendingRequestAnimationFrame=requestAnimationFrame(function(){Object(z.d)(e),e.update()})}),n.resizeObserver.observe(e.el)}),k()(v()(n),"clearPendingRequestAnimationFrame",function(){n.pendingRequestAnimationFrame&&(cancelAnimationFrame(n.pendingRequestAnimationFrame),n.pendingRequestAnimationFrame=null)}),k()(v()(n),"clearResizeObserver",function(){n.resizeObserver&&(n.resizeObserver.disconnect(),n.resizeObserver=null)}),k()(v()(n),"prefersReducedMotion",function(){return"undefined"!=typeof window&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}),k()(v()(n),"buildSwiper",function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return Object(T.a)(n.slideshowRef.current,{autoplay:!(!n.props.autoplay||n.prefersReducedMotion())&&{delay:1e3*n.props.delay,disableOnInteraction:!1},effect:n.props.effect,loop:!0,initialSlide:e,navigation:{nextEl:n.btnNextRef.current,prevEl:n.btnPrevRef.current},pagination:{clickable:!0,el:n.paginationRef.current,type:"bullets"}},{init:z.b,imagesReady:z.d,paginationRender:z.c,transitionEnd:z.a})}),n.slideshowRef=Object(i.createRef)(),n.btnNextRef=Object(i.createRef)(),n.btnPrevRef=Object(i.createRef)(),n.paginationRef=Object(i.createRef)(),n}return j()(t,e),h()(t,[{key:"componentDidMount",value:function(){var e=this,t=this.props.onError;this.buildSwiper().then(function(t){e.swiperInstance=t,e.initializeResizeObserver(t)}).catch(function(){t(Object(o.a)("The Swiper library could not be loaded."))})}},{key:"componentWillUnmount",value:function(){this.clearResizeObserver(),this.clearPendingRequestAnimationFrame()}},{key:"componentDidUpdate",value:function(e){var t,n=this,r=this.props,i=r.align,a=r.autoplay,s=r.delay,c=r.effect,l=r.images,u=r.onError;(i===e.align&&Object(x.isEqual)(l,e.images)||this.swiperInstance&&this.swiperInstance.update(),c!==e.effect||a!==e.autoplay||s!==e.delay||l!==e.images)&&(t=this.swiperIndex?l.length===e.images.length?this.swiperInstance.realIndex:e.images.length:0,this.swiperInstance&&this.swiperInstance.destroy(!0,!0),this.buildSwiper(t).then(function(e){n.swiperInstance=e,n.initializeResizeObserver(e)}).catch(function(){u(Object(o.a)("The Swiper library could not be loaded."))}))}},{key:"render",value:function(){var e=this.props,t=e.autoplay,n=e.className,r=e.delay,o=e.effect,s=e.images;return Object(i.createElement)("div",{className:n,"data-autoplay":t||null,"data-delay":t?r:null,"data-effect":o},Object(i.createElement)("div",{className:"wp-block-jetpack-slideshow_container swiper-container",ref:this.slideshowRef},Object(i.createElement)("ul",{className:"wp-block-jetpack-slideshow_swiper-wrappper swiper-wrapper"},s.map(function(e){var t=e.alt,n=e.caption,r=e.id,o=e.url;return Object(i.createElement)("li",{className:M()("wp-block-jetpack-slideshow_slide","swiper-slide",Object(_.isBlobURL)(o)&&"is-transient"),key:r},Object(i.createElement)("figure",null,Object(i.createElement)("img",{alt:t,className:"wp-block-jetpack-slideshow_image wp-image-".concat(r),"data-id":r,src:o}),Object(_.isBlobURL)(o)&&Object(i.createElement)(a.Spinner,null),n&&Object(i.createElement)(C.RichText.Content,{className:"wp-block-jetpack-slideshow_caption gallery-caption",tagName:"figcaption",value:n})))})),Object(i.createElement)("a",{className:"wp-block-jetpack-slideshow_button-prev swiper-button-prev swiper-button-white",ref:this.btnPrevRef,role:"button"}),Object(i.createElement)("a",{className:"wp-block-jetpack-slideshow_button-next swiper-button-next swiper-button-white",ref:this.btnNextRef,role:"button"}),Object(i.createElement)("a",{"aria-label":"Pause Slideshow",className:"wp-block-jetpack-slideshow_button-pause",role:"button"}),Object(i.createElement)("div",{className:"wp-block-jetpack-slideshow_pagination swiper-pagination swiper-pagination-white",ref:this.paginationRef})))}}]),t}(i.Component);k()(D,"defaultProps",{effect:"slide"});var N=D,F=(n(245),["image"]),P=[{label:Object(o.c)("Slide","Slideshow transition effect"),value:"slide"},{label:Object(o.c)("Fade","Slideshow transition effect"),value:"fade"}],R=function(e){return Object(x.pick)(e,["alt","id","link","url","caption"])},I=function(e){function t(){var e;return u()(this,t),e=m()(this,b()(t).apply(this,arguments)),k()(v()(e),"onSelectImages",function(t){(0,e.props.setAttributes)({images:t.map(function(e){return R(e)})})}),k()(v()(e),"onRemoveImage",function(t){return function(){var n=Object(x.filter)(e.props.attributes.images,function(e,n){return t!==n});e.setState({selectedImage:null}),e.props.setAttributes({images:n})}}),k()(v()(e),"addFiles",function(t){var n=e.props.attributes.images||[],r=e.props,i=r.lockPostSaving,a=r.unlockPostSaving,o=r.noticeOperations,s=r.setAttributes;i("slideshowBlockLock"),Object(C.mediaUpload)({allowedTypes:F,filesList:t,onFileChange:function(e){var t=e.map(function(e){return R(e)});s({images:[].concat(c()(n),c()(t))}),t.every(function(e){return Object(_.isBlobURL)(e.url)})||a("slideshowBlockLock")},onError:o.createErrorNotice})}),k()(v()(e),"uploadFromFiles",function(t){return e.addFiles(t.target.files)}),e.state={selectedImage:null},e}return j()(t,e),h()(t,[{key:"render",value:function(){var e=this.props,t=e.attributes,n=e.className,r=e.isSelected,s=e.noticeOperations,c=e.noticeUI,l=e.setAttributes,u=t.align,p=t.autoplay,h=t.delay,d=t.effect,m=t.images,f="undefined"!=typeof window&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,b=Object(i.createElement)(i.Fragment,null,Object(i.createElement)(C.InspectorControls,null,Object(i.createElement)(a.PanelBody,{title:Object(o.a)("Autoplay")},Object(i.createElement)(a.ToggleControl,{label:Object(o.a)("Autoplay"),help:Object(o.a)("Autoplay between slides"),checked:p,onChange:function(e){l({autoplay:e})}}),p&&Object(i.createElement)(a.RangeControl,{label:Object(o.a)("Delay between transitions (in seconds)"),value:h,onChange:function(e){l({delay:e})},min:1,max:5}),p&&f&&Object(i.createElement)("span",null,Object(o.a)("The Reduce Motion accessibility option is selected, therefore autoplay will be disabled in this browser."))),Object(i.createElement)(a.PanelBody,{title:Object(o.a)("Effects")},Object(i.createElement)(a.SelectControl,{label:Object(o.a)("Transition effect"),value:d,onChange:function(e){l({effect:e})},options:P}))),Object(i.createElement)(C.BlockControls,null,!!m.length&&Object(i.createElement)(a.Toolbar,null,Object(i.createElement)(C.MediaUpload,{onSelect:this.onSelectImages,allowedTypes:F,multiple:!0,gallery:!0,value:m.map(function(e){return e.id}),render:function(e){var t=e.open;return Object(i.createElement)(a.IconButton,{className:"components-toolbar__control",label:Object(o.a)("Edit Slideshow"),icon:"edit",onClick:t})}}))));return 0===m.length?Object(i.createElement)(i.Fragment,null,b,Object(i.createElement)(C.MediaPlaceholder,{icon:"format-gallery",className:n,labels:{title:Object(o.a)("Slideshow"),instructions:Object(o.a)("Drag images, upload new ones or select files from your library.")},onSelect:this.onSelectImages,accept:"image/*",allowedTypes:F,multiple:!0,notices:c,onError:s.createErrorNotice})):Object(i.createElement)(i.Fragment,null,b,c,Object(i.createElement)(N,{align:u,autoplay:p,className:n,delay:h,effect:d,images:m,onError:s.createErrorNotice}),Object(i.createElement)(a.DropZone,{onFilesDrop:this.addFiles}),r&&Object(i.createElement)("div",{className:"wp-block-jetpack-slideshow__add-item"},Object(i.createElement)(a.FormFileUpload,{multiple:!0,isLarge:!0,className:"wp-block-jetpack-slideshow__add-item-button",onChange:this.uploadFromFiles,accept:"image/*",icon:"insert"},Object(o.a)("Upload an image"))))}}]),t}(i.Component),L=Object(w.compose)(Object(E.withDispatch)(function(e){var t=e("core/editor");return{lockPostSaving:t.lockPostSaving,unlockPostSaving:t.unlockPostSaving}}),a.withNotices)(I),B=n(16),q={from:[{type:"block",blocks:["core/gallery","jetpack/tiled-gallery"],transform:function(e){var t=Object(x.filter)(e.images,function(e){var t=e.id,n=e.url;return t&&n});return t.length>0?Object(B.createBlock)("jetpack/slideshow",{images:t.map(function(e){return{id:e.id,url:e.url,alt:e.alt,caption:e.caption}})}):Object(B.createBlock)("jetpack/slideshow")}}],to:[{type:"block",blocks:["core/gallery"],transform:function(e){var t=e.images;return Object(B.createBlock)("core/gallery",{images:t})}},{type:"block",blocks:["jetpack/tiled-gallery"],transform:function(e){var t=e.images;return Object(B.createBlock)("jetpack/tiled-gallery",{images:t},[])}},{type:"block",blocks:["core/image"],transform:function(e){var t=e.images;return t.length>0?t.map(function(e){var t=e.id,n=e.url,r=e.alt,i=e.caption;return Object(B.createBlock)("core/image",{id:t,url:n,alt:r,caption:i})}):Object(B.createBlock)("core/image")}}]},V=Object(i.createElement)(a.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(i.createElement)(a.Path,{d:"M0 0h24v24H0z",fill:"none"}),Object(i.createElement)(a.Path,{d:"M10 8v8l5-4-5-4zm9-5H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14z"})),H={title:Object(o.a)("Slideshow"),category:"jetpack",keywords:[Object(o.a)("image"),Object(o.a)("gallery"),Object(o.a)("slider")],description:Object(o.a)("Add an interactive slideshow."),attributes:{align:{default:"center",type:"string"},autoplay:{type:"boolean",default:!1},delay:{type:"number",default:3},images:{type:"array",default:[],source:"query",selector:".swiper-slide",query:{alt:{source:"attribute",selector:"img",attribute:"alt",default:""},caption:{type:"string",source:"html",selector:"figcaption"},id:{source:"attribute",selector:"img",attribute:"data-id"},url:{source:"attribute",selector:"img",attribute:"src"}}},effect:{type:"string",default:"slide"}},supports:{align:["center","wide","full"],html:!1},icon:V,edit:L,save:function(e){var t=e.attributes,n=t.align,r=t.autoplay,a=t.delay,o=t.effect,s=t.images,c=e.className;return Object(i.createElement)(N,{align:n,autoplay:r,className:c,delay:a,effect:o,images:s})},transforms:q};Object(r.a)("slideshow",H)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(0),a=n(2),o=n(1),s=n(7),c=n.n(s),l=n(11),u=n.n(l),p=n(8),h=n.n(p),d=n(9),m=n.n(d),f=n(4),b=n.n(f),g=n(10),v=n.n(g),y=n(3),j=n.n(y),O=n(6),k=[{height:250,icon:Object(i.createElement)(a.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(i.createElement)(a.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(i.createElement)(a.Path,{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zm-7-2h2V7h-4v2h2z"})),name:Object(o.a)("Rectangle 300x250"),tag:"mrec",width:300,editorPadding:30},{height:90,icon:Object(i.createElement)(a.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(i.createElement)(a.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(i.createElement)(a.Path,{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zm-4-4h-4v-2h2c1.1 0 2-.89 2-2V9c0-1.11-.9-2-2-2H9v2h4v2h-2c-1.1 0-2 .89-2 2v4h6v-2z"})),name:Object(o.a)("Leaderboard 728x90"),tag:"leaderboard",width:728,editorPadding:60},{height:50,icon:Object(i.createElement)(a.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(i.createElement)(a.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(i.createElement)(a.Path,{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zm-4-4v-1.5c0-.83-.67-1.5-1.5-1.5.83 0 1.5-.67 1.5-1.5V9c0-1.11-.9-2-2-2H9v2h4v2h-2v2h2v2H9v2h4c1.1 0 2-.89 2-2z"})),name:Object(o.a)("Mobile Leaderboard 320x50"),tag:"mobile_leaderboard",width:320,editorPadding:100},{height:600,icon:Object(i.createElement)(a.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(i.createElement)(a.Path,{fill:"none",d:"M.04 0h24v24h-24V0z"}),Object(i.createElement)(a.Path,{d:"M19.04 3h-14c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16h-14V5h14v14zm-6-2h2V7h-2v4h-2V7h-2v6h4z"})),name:Object(o.a)("Wide Skyscraper 160x600"),tag:"wideskyscraper",width:160,editorPadding:30}],_=Object(o.a)("Pick an ad format");function w(e){var t=e.value,n=e.onChange;return Object(i.createElement)(a.Dropdown,{position:"bottom right",renderToggle:function(e){var t=e.onToggle,n=e.isOpen;return Object(i.createElement)(a.Toolbar,{controls:[{icon:Object(i.createElement)(a.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Object(i.createElement)(a.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(i.createElement)(a.Path,{d:"M1 9h2V7H1v2zm0 4h2v-2H1v2zm0-8h2V3c-1.1 0-2 .9-2 2zm8 16h2v-2H9v2zm-8-4h2v-2H1v2zm2 4v-2H1c0 1.1.9 2 2 2zM21 3h-8v6h10V5c0-1.1-.9-2-2-2zm0 14h2v-2h-2v2zM9 5h2V3H9v2zM5 21h2v-2H5v2zM5 5h2V3H5v2zm16 16c1.1 0 2-.9 2-2h-2v2zm0-8h2v-2h-2v2zm-8 8h2v-2h-2v2zm4 0h2v-2h-2v2z"})),title:_,onClick:t,extraProps:{"aria-expanded":n},className:"wp-block-jetpack-wordads__format-picker-icon"}]})},renderContent:function(e){var r=e.onClose;return Object(i.createElement)(a.NavigableMenu,{className:"wp-block-jetpack-wordads__format-picker"},k.map(function(e){var o=e.tag,s=e.name,c=e.icon;return Object(i.createElement)(a.MenuItem,{className:o===t?"is-active":void 0,icon:c,isSelected:o===t,key:o,onClick:function(){n(o),r()},role:"menuitemcheckbox"},s)}))}})}n(258);var E=function(e){function t(){var e,n;c()(this,t);for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];return n=h()(this,(e=m()(t)).call.apply(e,[this].concat(i))),j()(b()(n),"handleHideMobileChange",function(e){n.props.setAttributes({hideMobile:!!e})}),n}return v()(t,e),u()(t,[{key:"render",value:function(){var e=this.props,t=e.attributes,n=e.setAttributes,r=t.format,s=t.hideMobile,c=k.filter(function(e){return e.tag===r})[0];return Object(i.createElement)(i.Fragment,null,Object(i.createElement)(O.BlockControls,null,Object(i.createElement)(w,{value:r,onChange:function(e){return n({format:e})}})),Object(i.createElement)("div",{className:"wp-block-jetpack-wordads jetpack-wordads-".concat(r)},Object(i.createElement)("div",{className:"jetpack-wordads__ad",style:{width:c.width,height:c.height+c.editorPadding}},Object(i.createElement)(a.Placeholder,{icon:x,label:C}),Object(i.createElement)(a.ToggleControl,{checked:Boolean(s),label:Object(o.a)("Hide ad on mobile views"),onChange:this.handleHideMobileChange}))))}}]),t}(i.Component),C=Object(o.a)("Ad"),x=Object(i.createElement)(a.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(i.createElement)(a.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(i.createElement)(a.Path,{d:"M12,8H4A2,2 0 0,0 2,10V14A2,2 0 0,0 4,16H5V20A1,1 0 0,0 6,21H8A1,1 0 0,0 9,20V16H12L17,20V4L12,8M15,15.6L13,14H4V10H13L15,8.4V15.6M21.5,12C21.5,13.71 20.54,15.26 19,16V8C20.53,8.75 21.5,10.3 21.5,12Z"})),S={title:C,description:Object(i.createElement)(i.Fragment,null,Object(i.createElement)("p",null,Object(o.a)("Earn income by adding high quality ads to your post")),Object(i.createElement)(a.ExternalLink,{href:"https://wordads.co/"},Object(o.a)("Learn all about WordAds"))),icon:x,attributes:{align:{type:"string",default:"center"},format:{type:"string",default:"mrec"},hideMobile:{type:"boolean",default:!1}},category:"jetpack",keywords:[Object(o.a)("ads"),"WordAds",Object(o.a)("Advertisement")],supports:{align:["left","center","right"],alignWide:!1,className:!1,customClassName:!1,html:!1,reusable:!1},edit:E,save:function(){return null}};Object(r.a)("wordads",S)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(0),a=n(2),o=n(1),s=n(20),c=(n(104),n(27)),l=n.n(c),u=n(7),p=n.n(u),h=n(11),d=n.n(h),m=n(8),f=n.n(m),b=n(9),g=n.n(b),v=n(4),y=n.n(v),j=n(10),O=n.n(j),k=n(3),_=n.n(k),w=n(6),E=n(26),C=n.n(E),x=n(12),S=n.n(x),A=n(51),M=n(13),T=n.n(M),z=n(5),D="09:00",N="17:00",F=function(e){function t(){var e,n;p()(this,t);for(var r=arguments.length,s=new Array(r),c=0;c<r;c++)s[c]=arguments[c];return n=f()(this,(e=g()(t)).call.apply(e,[this].concat(s))),_()(y()(n),"renderInterval",function(e,t){var r=n.props.day,s=e.opening,c=e.closing;return Object(i.createElement)(i.Fragment,{key:t},Object(i.createElement)("div",{className:"business-hours__row"},Object(i.createElement)("div",{className:S()(r.name,"business-hours__day")},0===t&&n.renderDayToggle()),Object(i.createElement)("div",{className:S()(r.name,"business-hours__hours")},Object(i.createElement)(a.TextControl,{type:"time",label:Object(o.a)("Opening"),value:s,className:"business-hours__open",placeholder:D,onChange:function(e){n.setHour(e,"opening",t)}}),Object(i.createElement)(a.TextControl,{type:"time",label:Object(o.a)("Closing"),value:c,className:"business-hours__close",placeholder:N,onChange:function(e){n.setHour(e,"closing",t)}})),Object(i.createElement)("div",{className:"business-hours__remove"},r.hours.length>1&&Object(i.createElement)(a.IconButton,{isSmall:!0,isLink:!0,icon:"trash",onClick:function(){n.removeInterval(t)}}))),t===r.hours.length-1&&Object(i.createElement)("div",{className:"business-hours__row business-hours-row__add"},Object(i.createElement)("div",{className:S()(r.name,"business-hours__day")}," "),Object(i.createElement)("div",{className:S()(r.name,"business-hours__hours")},Object(i.createElement)(a.IconButton,{isLink:!0,label:Object(o.a)("Add Hours"),onClick:n.addInterval},Object(o.a)("Add Hours"))),Object(i.createElement)("div",{className:"business-hours__remove"}," ")))}),_()(y()(n),"setHour",function(e,t,r){var i=n.props,a=i.day,o=i.attributes;(0,i.setAttributes)({days:o.days.map(function(n){return n.name===a.name?T()({},n,{hours:n.hours.map(function(n,i){return i===r?T()({},n,_()({},t,e)):n})}):n})})}),_()(y()(n),"toggleClosed",function(e){var t=n.props,r=t.day,i=t.attributes;(0,t.setAttributes)({days:i.days.map(function(t){if(t.name===r.name){var n=e?[{opening:D,closing:N}]:[];return T()({},t,{hours:n})}return t})})}),_()(y()(n),"addInterval",function(){var e=n.props,t=e.day,r=e.attributes,i=e.setAttributes,a=r.days;t.hours.push({opening:"",closing:""}),i({days:a.map(function(e){return e.name===t.name?T()({},e,{hours:t.hours}):e})})}),_()(y()(n),"removeInterval",function(e){var t=n.props,r=t.day,i=t.attributes;(0,t.setAttributes)({days:i.days.map(function(t){return r.name===t.name?T()({},t,{hours:t.hours.filter(function(t,n){return e!==n})}):t})})}),n}return O()(t,e),d()(t,[{key:"isClosed",value:function(){var e=this.props.day;return Object(z.isEmpty)(e.hours)}},{key:"renderDayToggle",value:function(){var e=this.props,t=e.day,n=e.localization;return Object(i.createElement)(i.Fragment,null,Object(i.createElement)("span",{className:"business-hours__day-name"},n.days[t.name]),Object(i.createElement)(a.ToggleControl,{label:this.isClosed()?Object(o.a)("Closed"):Object(o.a)("Open"),checked:!this.isClosed(),onChange:this.toggleClosed}))}},{key:"renderClosed",value:function(){var e=this.props.day;return Object(i.createElement)("div",{className:"business-hours__row business-hours-row__closed"},Object(i.createElement)("div",{className:S()(e.name,"business-hours__day")},this.renderDayToggle()),Object(i.createElement)("div",{className:S()(e.name,"closed","business-hours__hours")}," "),Object(i.createElement)("div",{className:"business-hours__remove"}," "))}},{key:"render",value:function(){var e=this.props.day;return this.isClosed()?this.renderClosed():e.hours.map(this.renderInterval)}}]),t}(i.Component),P=n(23),R=n.n(P),I=n(15),L=function(e){function t(){var e,n;p()(this,t);for(var r=arguments.length,a=new Array(r),s=0;s<r;s++)a[s]=arguments[s];return n=f()(this,(e=g()(t)).call.apply(e,[this].concat(a))),_()(y()(n),"renderInterval",function(e,t){return Object(i.createElement)("dd",{key:t},Object(I.sprintf)(Object(o.c)("From %s to %s","from business opening hour to closing hour"),n.formatTime(e.opening),n.formatTime(e.closing)))}),n}return O()(t,e),d()(t,[{key:"formatTime",value:function(e){var t=this.props.timeFormat,n=e.split(":"),r=R()(n,2),i=r[0],a=r[1],o=new Date;return!(!i||!a)&&(o.setHours(i),o.setMinutes(a),Object(A.date)(t,o))}},{key:"render",value:function(){var e=this,t=this.props,n=t.day,r=t.localization,a=n.hours.filter(function(t){return e.formatTime(t.opening)&&e.formatTime(t.closing)});return Object(i.createElement)(i.Fragment,null,Object(i.createElement)("dt",{className:n.name},r.days[n.name]),Object(z.isEmpty)(a)?Object(i.createElement)("dd",null,Object(o.c)("Closed","business is closed on a full day")):a.map(this.renderInterval))}}]),t}(i.Component),B={days:{Sun:Object(o.a)("Sunday"),Mon:Object(o.a)("Monday"),Tue:Object(o.a)("Tuesday"),Wed:Object(o.a)("Wednesday"),Thu:Object(o.a)("Thursday"),Fri:Object(o.a)("Friday"),Sat:Object(o.a)("Saturday")},startOfWeek:0},q=function(e){function t(){var e,n;p()(this,t);for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];return n=f()(this,(e=g()(t)).call.apply(e,[this].concat(i))),_()(y()(n),"state",{localization:B,hasFetched:!1}),n}return O()(t,e),d()(t,[{key:"componentDidMount",value:function(){this.apiFetch()}},{key:"apiFetch",value:function(){var e=this;this.setState({data:B},function(){C()({path:"/wpcom/v2/business-hours/localized-week"}).then(function(t){e.setState({localization:t,hasFetched:!0})},function(){e.setState({localization:B,hasFetched:!0})})})}},{key:"render",value:function(){var e=this,t=this.props,n=t.attributes,r=t.className,s=t.isSelected,c=n.days,u=this.state,p=u.localization,h=u.hasFetched,d=p.startOfWeek,m=c.concat(c.slice(0,d)).slice(d);if(!h)return Object(i.createElement)(a.Placeholder,{icon:Object(i.createElement)(w.BlockIcon,{icon:V}),label:Object(o.a)("Loading business hours")});if(!s){var f=Object(A.__experimentalGetSettings)().formats.time;return Object(i.createElement)("dl",{className:S()(r,"jetpack-business-hours")},m.map(function(e,t){return Object(i.createElement)(L,{key:t,day:e,localization:p,timeFormat:f})}))}return Object(i.createElement)("div",{className:S()(r,"is-edit")},m.map(function(t,n){return Object(i.createElement)(F,l()({key:n,day:t,localization:p},e.props))}))}}]),t}(i.Component),V=Object(s.a)(Object(i.createElement)(a.Path,{d:"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"})),H={title:Object(o.a)("Business Hours"),description:Object(o.a)("Display opening hours for your business."),icon:V,category:"jetpack",supports:{html:!0},keywords:[Object(o.c)("opening hours","block search term"),Object(o.c)("closing time","block search term"),Object(o.c)("schedule","block search term")],attributes:{days:{type:"array",default:[{name:"Sun",hours:[]},{name:"Mon",hours:[{opening:"09:00",closing:"17:00"}]},{name:"Tue",hours:[{opening:"09:00",closing:"17:00"}]},{name:"Wed",hours:[{opening:"09:00",closing:"17:00"}]},{name:"Thu",hours:[{opening:"09:00",closing:"17:00"}]},{name:"Fri",hours:[{opening:"09:00",closing:"17:00"}]},{name:"Sat",hours:[]}]}},edit:function(e){return Object(i.createElement)(q,e)},save:function(){return null}};Object(r.a)("business-hours",H)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(0),a=n(2),o=(n(128),n(7)),s=n.n(o),c=n(11),l=n.n(c),u=n(8),p=n.n(u),h=n(9),d=n.n(h),m=n(4),f=n.n(m),b=n(10),g=n.n(b),v=n(3),y=n.n(v),j=n(6),O=n(14),k=n(17),_=n(96),w=n.n(_),E=n(1),C=new w.a,x=function(e){"A"===e.target.nodeName&&(window.confirm(Object(E.a)("Are you sure you wish to leave this page?"))||e.preventDefault())},S=function(e){var t=e.className,n=e.source,r=void 0===n?"":n;return Object(i.createElement)(i.RawHTML,{className:t,onClick:x},r.length?C.render(r):"")},A="editor",M=function(e){function t(){var e,n;s()(this,t);for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];return n=p()(this,(e=d()(t)).call.apply(e,[this].concat(i))),y()(f()(n),"input",null),y()(f()(n),"state",{activePanel:A}),y()(f()(n),"bindInput",function(e){n.input=e}),y()(f()(n),"updateSource",function(e){return n.props.setAttributes({source:e})}),y()(f()(n),"handleKeyDown",function(e){var t=n.props,r=t.attributes,i=t.removeBlock,a=r.source;8===e.keyCode&&""===a&&(i(),e.preventDefault())}),y()(f()(n),"toggleMode",function(e){return function(){return n.setState({activePanel:e})}}),n}return g()(t,e),l()(t,[{key:"componentDidUpdate",value:function(e){e.isSelected&&!this.props.isSelected&&"preview"===this.state.activePanel&&this.toggleMode(A)(),!e.isSelected&&this.props.isSelected&&this.state.activePanel===A&&this.input&&this.input.focus()}},{key:"isEmpty",value:function(){var e=this.props.attributes.source;return!e||""===e.trim()}},{key:"renderToolbarButton",value:function(e,t){var n=this.state.activePanel;return Object(i.createElement)("button",{className:"components-tab-button ".concat(n===e?"is-active":""),onClick:this.toggleMode(e)},Object(i.createElement)("span",null,t))}},{key:"render",value:function(){var e=this.props,t=e.attributes,n=e.className,r=e.isSelected,a=t.source,o=this.state.activePanel;return!r&&this.isEmpty()?Object(i.createElement)("p",{className:"".concat(n,"__placeholder")},Object(E.a)("Write your _Markdown_ **here**…")):Object(i.createElement)("div",{className:n},Object(i.createElement)(j.BlockControls,null,Object(i.createElement)("div",{className:"components-toolbar"},this.renderToolbarButton(A,Object(E.a)("Markdown")),this.renderToolbarButton("preview",Object(E.a)("Preview")))),"preview"!==o&&r?Object(i.createElement)(j.PlainText,{className:"".concat(n,"__editor"),onChange:this.updateSource,onKeyDown:this.handleKeyDown,"aria-label":Object(E.a)("Markdown"),innerRef:this.bindInput,value:a}):Object(i.createElement)(S,{className:"".concat(n,"__preview"),source:a}))}}]),t}(i.Component),T=Object(O.compose)([Object(k.withSelect)(function(e){return{currentBlockId:e("core/editor").getSelectedBlockClientId()}}),Object(k.withDispatch)(function(e,t){var n=t.currentBlockId;return{removeBlock:function(){return e("core/editor").removeBlocks(n)}}})])(M),z={title:Object(E.a)("Markdown"),description:Object(i.createElement)(i.Fragment,null,Object(i.createElement)("p",null,Object(E.a)("Use regular characters and punctuation to style text, links, and lists.")),Object(i.createElement)(a.ExternalLink,{href:"https://en.support.wordpress.com/markdown-quick-reference/"},Object(E.a)("Support reference"))),icon:Object(i.createElement)(a.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 208 128"},Object(i.createElement)(a.Rect,{width:"198",height:"118",x:"5",y:"5",ry:"10",stroke:"currentColor",strokeWidth:"10",fill:"none"}),Object(i.createElement)(a.Path,{d:"M30 98v-68h20l20 25 20-25h20v68h-20v-39l-20 25-20-25v39zM155 98l-30-33h20v-35h20v35h20z"})),category:"jetpack",keywords:[Object(E.a)("formatting"),Object(E.a)("syntax"),Object(E.a)("markup")],attributes:{source:{type:"string"}},supports:{html:!1},edit:T,save:function(e){var t=e.attributes,n=e.className;return Object(i.createElement)(S,{className:n,source:t.source})}};Object(r.a)("markdown",z)},function(e,t,n){"use strict";n.r(t);var r=n(23),i=n.n(r),a=n(13),o=n.n(a),s=n(24),c=n(16),l=n(6),u=n(102),p=n(5),h=n(36),d=n.n(h),m=n(7),f=n.n(m),b=n(11),g=n.n(b),v=n(8),y=n.n(v),j=n(9),O=n.n(j),k=n(4),_=n.n(k),w=n(10),E=n.n(w),C=n(3),x=n.n(C),S=n(0),A=n(26),M=n.n(A),T=n(14),z=n(17),D=n(2),N=n(12),F=n.n(N),P=n(1),R=function(e){var t=e.text;return Object(S.createElement)("div",{className:"wp-block-embed is-loading"},Object(S.createElement)(D.Spinner,null),Object(S.createElement)("p",null,t))},I=Object(T.createHigherOrderComponent)(Object(T.compose)([Object(z.withSelect)(function(e,t){var n=t.attributes,r=n.guid,i=n.src,a=e("core"),o=a.getEmbedPreview,c=a.isRequestingEmbedPreview,l=!!r&&"https://videopress.com/v/".concat(r),u=!!l&&o(l);return{isFetchingPreview:!!l&&c(l),isUploading:Object(s.isBlobURL)(i),preview:u}}),function(e){return function(t){function n(){var e;return f()(this,n),e=y()(this,O()(n).apply(this,arguments)),x()(_()(e),"fallbackToCore",function(){e.props.setAttributes({guid:void 0}),e.setState({fallback:!0})}),x()(_()(e),"setGuid",d()(regeneratorRuntime.mark(function t(){var n,r,i,a,o,s,c;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(n=e.props,r=n.attributes,i=n.setAttributes,a=r.id){t.next=5;break}return i({guid:void 0}),t.abrupt("return");case 5:return t.prev=5,e.setState({isFetchingMedia:!0}),t.next=9,M()({path:"/wp/v2/media/".concat(a)});case 9:if(o=t.sent,e.setState({isFetchingMedia:!1}),s=e.props.attributes.id,a===s){t.next=14;break}return t.abrupt("return");case 14:e.setState({media:o}),(c=Object(p.get)(o,"jetpack_videopress_guid"))?i({guid:c}):e.fallbackToCore(),t.next=23;break;case 19:t.prev=19,t.t0=t.catch(5),e.setState({isFetchingMedia:!1}),e.fallbackToCore();case 23:case"end":return t.stop()}},t,null,[[5,19]])}))),x()(_()(e),"switchToEditing",function(){e.props.setAttributes({id:void 0,guid:void 0,src:void 0})}),x()(_()(e),"onRemovePoster",function(){e.props.setAttributes({poster:""}),e.posterImageButton.current.focus()}),e.state={media:null,isFetchingMedia:!1,fallback:!1},e.posterImageButton=Object(S.createRef)(),e}return E()(n,t),g()(n,[{key:"componentDidMount",value:function(){this.props.attributes.guid||this.setGuid()}},{key:"componentDidUpdate",value:function(e){this.props.attributes.id!==e.attributes.id&&this.setGuid()}},{key:"render",value:function(){var t=this.props,n=t.attributes,r=t.className,i=t.isFetchingPreview,a=t.isSelected,o=t.isUploading,s=t.preview,c=t.setAttributes,u=this.state,p=u.fallback,h=u.isFetchingMedia;if(o)return Object(S.createElement)(R,{text:Object(P.a)("Uploading…")});if(h||i)return Object(S.createElement)(R,{text:Object(P.a)("Embedding…")});if(p||!s)return Object(S.createElement)(e,this.props);var d=s.html,m=s.scripts,f=n.caption;return Object(S.createElement)(S.Fragment,null,Object(S.createElement)(l.BlockControls,null,Object(S.createElement)(D.Toolbar,null,Object(S.createElement)(D.IconButton,{className:"components-icon-button components-toolbar__control",label:Object(P.a)("Edit video"),onClick:this.switchToEditing,icon:"edit"}))),Object(S.createElement)("figure",{className:F()(r,"wp-block-embed","is-type-video")},Object(S.createElement)(D.Disabled,null,Object(S.createElement)("div",{className:"wp-block-embed__wrapper"},Object(S.createElement)(D.SandBox,{html:d,scripts:m}))),(!l.RichText.isEmpty(f)||a)&&Object(S.createElement)(l.RichText,{tagName:"figcaption",placeholder:Object(P.a)("Write caption…"),value:f,onChange:function(e){return c({caption:e})},inlineToolbar:!0})))}}]),n}(S.Component)}]),"withVideoPressEdit"),L=Object(T.createHigherOrderComponent)(function(e){return function(t){var n=t.attributes,r=(n=void 0===n?{}:n).caption,i=n.guid;if(!i)return e(t);var a="https://videopress.com/v/".concat(i);return Object(S.createElement)("figure",{className:"wp-block-embed is-type-video is-provider-videopress"},Object(S.createElement)("div",{className:"wp-block-embed__wrapper"},"\n".concat(a,"\n")),!l.RichText.isEmpty(r)&&Object(S.createElement)(l.RichText.Content,{tagName:"figcaption",value:r}))}},"withVideoPressSave"),B=n(39);Object(u.addFilter)("blocks.registerBlockType","jetpack/videopress",function(e,t){if("core/video"!==t)return e;var n=Object(B.a)("videopress"),r=n.available,a=n.unavailableReason;return r||["missing_plan","missing_module"].includes(a)?o()({},e,{attributes:{autoplay:{type:"boolean"},caption:{type:"string",source:"html",selector:"figcaption"},controls:{type:"boolean",default:!0},guid:{type:"string"},id:{type:"number"},loop:{type:"boolean"},muted:{type:"boolean"},poster:{type:"string"},preload:{type:"string",default:"metadata"},src:{type:"string"}},transforms:o()({},e.transforms,{from:[{type:"files",isMatch:function(e){return Object(p.every)(e,function(e){return 0===e.type.indexOf("video/")})},priority:9,transform:function(e,t){var n=[];return e.forEach(function(e){var r=Object(c.createBlock)("core/video",{src:Object(s.createBlobURL)(e)});Object(l.mediaUpload)({filesList:[e],onFileChange:function(e){var n=i()(e,1)[0],a=n.id,o=n.url;t(r.clientId,{id:a,src:o})},allowedTypes:["video"]}),n.push(r)}),n}}]}),supports:o()({},e.supports,{reusable:!1}),edit:I(e.edit),save:L(e.save),deprecated:[{attributes:e.attributes,save:e.save,isEligible:function(e){return!e.guid}}]}):e})},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(0),a=n(2),o=n(1),s=n(20),c=n(7),l=n.n(c),u=n(11),p=n.n(u),h=n(8),d=n.n(h),m=n(9),f=n.n(m),b=n(4),g=n.n(b),v=n(10),y=n.n(v),j=n(3),O=n.n(j),k=n(6),_=n(17),w=n(12),E=n.n(w),C=n(15),x=n(29),S=[{value:x.b,label:Object(o.a)("Show after threshold")},{value:x.c,label:Object(o.a)("Show before threshold")}],A=function(e){function t(){var e,n;l()(this,t);for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];return n=d()(this,(e=f()(t)).call.apply(e,[this].concat(i))),O()(g()(n),"state",{isThresholdValid:!0}),O()(g()(n),"setCriteria",function(e){return n.props.setAttributes({criteria:e})}),O()(g()(n),"setThreshold",function(e){if(/^\d+$/.test(e)&&+e>0)return n.props.setAttributes({threshold:+e}),void n.setState({isThresholdValid:!0});n.setState({isThresholdValid:!1})}),n}return y()(t,e),p()(t,[{key:"getNoticeLabel",value:function(){return this.props.attributes.criteria===x.b?Object(C.sprintf)(Object(o.b)("This block will only appear to people who have visited this page more than once.","This block will only appear to people who have visited this page more than %d times.",+this.props.attributes.threshold),this.props.attributes.threshold):Object(C.sprintf)(Object(o.b)("This block will only appear to people who are visiting this page for the first time.","This block will only appear to people who have visited this page at most %d times.",+this.props.attributes.threshold),this.props.attributes.threshold)}},{key:"render",value:function(){return Object(i.createElement)("div",{className:E()(this.props.className,{"wp-block-jetpack-repeat-visitor--is-unselected":!this.props.isSelected})},Object(i.createElement)(a.Placeholder,{icon:T,label:Object(o.a)("Repeat Visitor"),className:"wp-block-jetpack-repeat-visitor-placeholder"},Object(i.createElement)(a.TextControl,{className:"wp-block-jetpack-repeat-visitor-threshold",defaultValue:this.props.attributes.threshold,help:this.state.isThresholdValid?"":Object(o.a)("Please enter a valid number."),label:Object(o.a)("Visit count threshold"),min:"1",onChange:this.setThreshold,pattern:"[0-9]",type:"number"}),Object(i.createElement)(a.RadioControl,{label:Object(o.a)("Visibility"),selected:this.props.attributes.criteria,options:S,onChange:this.setCriteria})),Object(i.createElement)(a.Notice,{status:"info",isDismissible:!1},this.getNoticeLabel()),Object(i.createElement)(k.InnerBlocks,null))}}]),t}(i.Component),M=Object(_.withSelect)(function(e,t){var n=e("core/editor"),r=n.isBlockSelected,i=n.hasSelectedInnerBlock;return{isSelected:r(t.clientId)||i(t.clientId)}})(A),T=(n(235),Object(s.a)(Object(i.createElement)(a.Path,{d:"M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"}))),z={attributes:{criteria:{type:"string",default:x.b},threshold:{type:"number",default:x.d}},category:"jetpack",description:Object(o.a)("Control block visibility based on how often a visitor has viewed the page."),icon:T,keywords:[Object(o.c)("return","block search term"),Object(o.c)("visitors","block search term"),Object(o.c)("visibility","block search term")],supports:{html:!1},title:Object(o.a)("Repeat Visitor"),edit:M,save:function(e){var t=e.className;return Object(i.createElement)("div",{className:t},Object(i.createElement)(k.InnerBlocks.Content,null))}};Object(r.a)("repeat-visitor",z)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(0),a=n(7),o=n.n(a),s=n(11),c=n.n(s),l=n(8),u=n.n(l),p=n(9),h=n.n(p),d=n(4),m=n.n(d),f=n(10),b=n.n(f),g=n(3),v=n.n(g),y=n(2),j=n(1),O=n(37),k=n(26),_=n.n(k),w=n(15),E=function(e){function t(){var e,n;o()(this,t);for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];return n=u()(this,(e=h()(t)).call.apply(e,[this].concat(i))),v()(m()(n),"state",{subscriberCountString:""}),n}return b()(t,e),c()(t,[{key:"componentDidMount",value:function(){this.get_subscriber_count()}},{key:"render",value:function(){var e=this.props,t=e.attributes,n=e.className,r=e.isSelected,a=e.setAttributes,o=t.subscribePlaceholder,s=t.showSubscribersTotal;return r?Object(i.createElement)("div",{className:n,role:"form"},Object(i.createElement)(y.ToggleControl,{label:Object(j.a)("Show total subscribers"),checked:s,onChange:function(){a({showSubscribersTotal:!s})}}),Object(i.createElement)(y.TextControl,{placeholder:o,disabled:!0,onChange:function(){}}),Object(i.createElement)(O.a,this.props)):Object(i.createElement)("div",{className:n,role:"form"},s&&Object(i.createElement)("p",{role:"heading"},this.state.subscriberCountString),Object(i.createElement)(y.TextControl,{placeholder:o}),Object(i.createElement)(O.a,this.props))}},{key:"get_subscriber_count",value:function(){var e=this;_()({path:"/wpcom/v2/subscribers/count"}).then(function(t){t.hasOwnProperty("count")?e.setState({subscriberCountString:Object(w.sprintf)(Object(w._n)("Join %s other subscriber","Join %s other subscribers",t.count),t.count)}):e.setState({subscriberCountString:Object(j.a)("Subscriber count unavailable")})})}},{key:"onChangeSubmit",value:function(e){this.props.setAttributes({submitButtonText:e})}}]),t}(i.Component);var C=n(20),x=n(5),S={title:Object(j.a)("Subscription Form"),description:Object(i.createElement)("p",null,Object(j.a)("A form enabling readers to get notifications when new posts are published from this site.")),icon:Object(C.a)(Object(i.createElement)(y.Path,{d:"M23 16v2h-3v3h-2v-3h-3v-2h3v-3h2v3h3zM20 2v9h-4v3h-3v4H4c-1.1 0-2-.9-2-2V2h18zM8 13v-1H4v1h4zm3-3H4v1h7v-1zm0-2H4v1h7V8zm7-4H4v2h14V4z"})),category:"jetpack",keywords:[Object(j.a)("subscribe"),Object(j.a)("join"),Object(j.a)("follow")],attributes:{subscribePlaceholder:{type:"string",default:Object(j.a)("Email Address")},subscribeButton:{type:"string",default:Object(j.a)("Subscribe")},showSubscribersTotal:{type:"boolean",default:!1},submitButtonText:{type:"string",default:Object(j.a)("Subscribe")},customBackgroundButtonColor:{type:"string"},customTextButtonColor:{type:"string"},submitButtonClasses:{type:"string"}},edit:E,save:function(e){var t=e.attributes,n=t.showSubscribersTotal,r=t.submitButtonClasses,a=t.customBackgroundButtonColor,o=t.customTextButtonColor,s=t.submitButtonText;return Object(i.createElement)(i.RawHTML,null,'[jetpack_subscription_form show_only_email_and_button="true" custom_background_button_color="'.concat(a,'" custom_text_button_color="').concat(o,'" submit_button_text="').concat(s,'" submit_button_classes="').concat(r,'" show_subscribers_total="').concat(n,'" ]'))},deprecated:[{attributes:{subscribeButton:{type:"string",default:Object(j.a)("Subscribe")},showSubscribersTotal:{type:"boolean",default:!1}},migrate:function(e){return{subscribeButton:"",submitButtonText:e.subscribeButton,showSubscribersTotal:e.showSubscribersTotal,customBackgroundButtonColor:"",customTextButtonColor:"",submitButtonClasses:""}},isEligible:function(e){return!!Object(x.isEmpty)(e.subscribeButton)},save:function(e){var t=e.attributes;return Object(i.createElement)(i.RawHTML,null,'[jetpack_subscription_form show_subscribers_total="'.concat(t.showSubscribersTotal,'" show_only_email_and_button="true"]'))}}]};Object(r.a)("subscriptions",S)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(0),a=n(2),o=(n(233),n(7)),s=n.n(o),c=n(11),l=n.n(c),u=n(8),p=n.n(u),h=n(9),d=n.n(h),m=n(10),f=n.n(m),b=n(6),g=n(5),v=n(17),y=n(14),j=n(1);function O(e){return Object(i.createElement)("div",{className:"jp-related-posts-i2__post",id:e.id,"aria-labelledby":e.id+"-heading"},Object(i.createElement)("strong",{id:e.id+"-heading",className:"jp-related-posts-i2__post-link"},Object(j.a)("Preview unavailable: you haven't published enough posts with similar content.")),e.displayThumbnails&&Object(i.createElement)("figure",{className:"jp-related-posts-i2__post-image-placeholder","aria-label":Object(j.a)("Placeholder image")},Object(i.createElement)(a.SVG,{className:"jp-related-posts-i2__post-image-placeholder-square",xmlns:"http://www.w3.org/2000/svg",width:"100%",height:"100%",viewBox:"0 0 350 200"},Object(i.createElement)("title",null,Object(j.a)("Grey square")),Object(i.createElement)(a.Path,{d:"M0 0h350v200H0z",fill:"#8B8B96","fill-opacity":".1"})),Object(i.createElement)(a.SVG,{className:"jp-related-posts-i2__post-image-placeholder-icon",xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(i.createElement)("title",null,Object(j.a)("Icon for image")),Object(i.createElement)(a.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(i.createElement)(a.Path,{d:"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-4.86 8.86l-3 3.87L9 13.14 6 17h12l-3.86-5.14z"}))),e.displayDate&&Object(i.createElement)("div",{className:"jp-related-posts-i2__post-date has-small-font-size"},Object(j.a)("August 3, 2018")),e.displayContext&&Object(i.createElement)("div",{className:"jp-related-posts-i2__post-context has-small-font-size"},Object(j.a)("In “Uncategorized”")))}function k(e){return Object(i.createElement)("div",{className:"jp-related-posts-i2__post",id:e.id,"aria-labelledby":e.id+"-heading"},Object(i.createElement)("a",{className:"jp-related-posts-i2__post-link",id:e.id+"-heading",href:e.post.url,rel:"nofollow noopener noreferrer",target:"_blank"},e.post.title),e.displayThumbnails&&e.post.img&&e.post.img.src&&Object(i.createElement)("a",{className:"jp-related-posts-i2__post-img-link",href:e.post.url},Object(i.createElement)("img",{className:"jp-related-posts-i2__post-img",src:e.post.img.src,alt:e.post.title,rel:"nofollow noopener noreferrer",target:"_blank"})),e.displayDate&&Object(i.createElement)("div",{className:"jp-related-posts-i2__post-date has-small-font-size"},e.post.date),e.displayContext&&Object(i.createElement)("div",{className:"jp-related-posts-i2__post-context has-small-font-size"},e.post.context))}function _(e){var t=0,n=e.posts.length>3;switch(e.posts.length){case 2:case 4:case 5:t=2;break;default:t=3}return Object(i.createElement)("div",null,Object(i.createElement)("div",{className:"jp-related-posts-i2__row","data-post-count":e.posts.slice(0,t).length},e.posts.slice(0,t)),n&&Object(i.createElement)("div",{className:"jp-related-posts-i2__row","data-post-count":e.posts.slice(t).length},e.posts.slice(t)))}var w=function(e){function t(){return s()(this,t),p()(this,d()(t).apply(this,arguments))}return f()(t,e),l()(t,[{key:"render",value:function(){for(var e=this.props,t=e.attributes,n=e.className,r=e.posts,o=e.setAttributes,s=e.instanceId,c=t.displayContext,l=t.displayDate,u=t.displayThumbnails,p=t.postLayout,h=t.postsToShow,d=[{icon:"grid-view",title:Object(j.a)("Grid View"),onClick:function(){return o({postLayout:"grid"})},isActive:"grid"===p},{icon:"list-view",title:Object(j.a)("List View"),onClick:function(){return o({postLayout:"list"})},isActive:"list"===p}],m=[],f=0;f<h;f++)r[f]?m.push(Object(i.createElement)(k,{id:"related-posts-".concat(s,"-post-").concat(f),key:"jp-relatedposts-i2-"+f,post:r[f],displayThumbnails:u,displayDate:l,displayContext:c})):m.push(Object(i.createElement)(O,{id:"related-posts-".concat(s,"-post-").concat(f),key:"related-post-placeholder-"+f,displayThumbnails:u,displayDate:l,displayContext:c}));return Object(i.createElement)(i.Fragment,null,Object(i.createElement)(b.InspectorControls,null,Object(i.createElement)(a.PanelBody,{title:Object(j.a)("Related Posts Settings")},Object(i.createElement)(a.ToggleControl,{label:Object(j.a)("Display thumbnails"),checked:u,onChange:function(e){return o({displayThumbnails:e})}}),Object(i.createElement)(a.ToggleControl,{label:Object(j.a)("Display date"),checked:l,onChange:function(e){return o({displayDate:e})}}),Object(i.createElement)(a.ToggleControl,{label:Object(j.a)("Display context (category or tag)"),checked:c,onChange:function(e){return o({displayContext:e})}}),Object(i.createElement)(a.RangeControl,{label:Object(j.a)("Number of posts"),value:h,onChange:function(e){return o({postsToShow:Math.min(e,6)})},min:1,max:6}))),Object(i.createElement)(b.BlockControls,null,Object(i.createElement)(a.Toolbar,{controls:d})),Object(i.createElement)("div",{className:n,id:"related-posts-".concat(s)},Object(i.createElement)("div",{className:"jp-relatedposts-i2","data-layout":p},Object(i.createElement)(_,{posts:m}))))}}]),t}(i.Component),E=Object(y.compose)(y.withInstanceId,Object(v.withSelect)(function(e){var t=e("core/editor").getCurrentPost;return{posts:Object(g.get)(t(),"jetpack-related-posts",[])}}))(w),C={title:Object(j.a)("Related Posts"),icon:Object(i.createElement)(a.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},Object(i.createElement)(a.G,{stroke:"currentColor",strokeWidth:"2",strokeLinecap:"square"},Object(i.createElement)(a.Path,{d:"M4,4 L4,19 M4,4 L19,4 M4,9 L19,9 M4,14 L19,14 M4,19 L19,19 M9,4 L9,19 M19,4 L19,19"}))),category:"jetpack",keywords:[Object(j.c)("Similar content","block search term"),Object(j.c)("Linked","block search term"),Object(j.c)("Connected","block search term")],attributes:{postLayout:{type:"string",default:"grid"},displayDate:{type:"boolean",default:!0},displayThumbnails:{type:"boolean",default:!1},displayContext:{type:"boolean",default:!1},postsToShow:{type:"number",default:3}},supports:{html:!1,multiple:!1,reusable:!1},transforms:{from:[{type:"shortcode",tag:"jetpack-related-posts"}]},edit:E,save:function(){return null}};Object(r.a)("related-posts",C)},function(e,t,n){"use strict";n.r(t);var r=n(7),i=n.n(r),a=n(11),o=n.n(a),s=n(8),c=n.n(s),l=n(9),u=n.n(l),p=n(10),h=n.n(p),d=n(0),m=n(5),f=n(2),b=n(17),g=n(4),v=n.n(g),y=n(3),j=n.n(y),O=n(1),k=(n(237),function(e){function t(){var e,n;i()(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=c()(this,(e=u()(t)).call.apply(e,[this].concat(a))),j()(v()(n),"state",{hasCopied:!1}),j()(v()(n),"onCopy",function(){return n.setState({hasCopied:!0})}),j()(v()(n),"onFinishCopy",function(){return n.setState({hasCopied:!1})}),j()(v()(n),"onFocus",function(e){return e.target.select()}),n}return h()(t,e),o()(t,[{key:"render",value:function(){var e=this.props.link,t=this.state.hasCopied;return e?Object(d.createElement)("div",{className:"jetpack-clipboard-input"},Object(d.createElement)(f.TextControl,{readOnly:!0,onFocus:this.onFocus,value:e}),Object(d.createElement)(f.ClipboardButton,{isDefault:!0,onCopy:this.onCopy,onFinishCopy:this.onFinishCopy,text:e},t?Object(O.a)("Copied!"):Object(O.c)("Copy","verb"))):null}}]),t}(d.Component)),_=n(41),w={render:function(){return Object(d.createElement)(C,null)}},E=function(e){function t(){return i()(this,t),c()(this,u()(t).apply(this,arguments))}return h()(t,e),o()(t,[{key:"render",value:function(){var e=this.props.shortlink;return e?Object(d.createElement)(_.a,null,Object(d.createElement)(f.PanelBody,{title:Object(O.a)("Shortlink"),className:"jetpack-shortlinks__panel"},Object(d.createElement)(k,{link:e}))):null}}]),t}(d.Component),C=Object(b.withSelect)(function(e){var t=e("core/editor").getCurrentPost();return{shortlink:Object(m.get)(t,"jetpack_shortlink","")}})(E),x=n(42);Object(x.a)("shortlinks",w)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(0),a=n(2),o=n(1),s=n(7),c=n.n(s),l=n(8),u=n.n(l),p=n(9),h=n.n(p),d=n(4),m=n.n(d),f=n(10),b=n.n(f),g=n(3),v=n.n(g),y=n(26),j=n.n(y),O=n(12),k=n.n(O),_=n(37),w=n(6),E=0,C=1,x=2,S="processing",A="success",M="error",T=function(e){function t(){var e;return c()(this,t),e=u()(this,h()(t).apply(this,arguments)),v()(m()(e),"componentDidMount",function(){e.apiCall()}),v()(m()(e),"onError",function(t){var n=e.props.noticeOperations;n.removeAllNotices(),n.createErrorNotice(t)}),v()(m()(e),"apiCall",function(){var t={path:"/wpcom/v2/mailchimp",method:"GET"};j()(t).then(function(t){var n=t.connect_url,r="connected"===t.code?C:x;e.setState({connected:r,connectURL:n})},function(t){var n=x;e.setState({connected:n,connectURL:null}),e.onError(t.message)})}),v()(m()(e),"auditionNotification",function(t){e.setState({audition:t}),e.timeout&&clearTimeout(e.timeout),e.timeout=setTimeout(e.clearAudition,3e3)}),v()(m()(e),"clearAudition",function(){e.setState({audition:null})}),v()(m()(e),"updateProcessingText",function(t){(0,e.props.setAttributes)({processingLabel:t}),e.auditionNotification(S)}),v()(m()(e),"updateSuccessText",function(t){(0,e.props.setAttributes)({successLabel:t}),e.auditionNotification(A)}),v()(m()(e),"updateErrorText",function(t){(0,e.props.setAttributes)({errorLabel:t}),e.auditionNotification(M)}),v()(m()(e),"updateEmailPlaceholder",function(t){(0,e.props.setAttributes)({emailPlaceholder:t}),e.clearAudition()}),v()(m()(e),"labelForAuditionType",function(t){var n=e.props.attributes,r=n.processingLabel,i=n.successLabel,a=n.errorLabel;return t===S?r:t===A?i:t===M?a:null}),v()(m()(e),"roleForAuditionType",function(e){return e===M?"alert":"status"}),v()(m()(e),"render",function(){var t=e.props,n=t.attributes,r=t.className,s=t.notices,c=t.noticeUI,l=t.setAttributes,u=e.state,p=u.audition,h=u.connected,d=u.connectURL,m=n.emailPlaceholder,f=n.consentText,b=n.processingLabel,g=n.successLabel,y=n.errorLabel,j="wp-block-jetpack-mailchimp_",O=Object(i.createElement)(a.Placeholder,{icon:D,notices:s},Object(i.createElement)(a.Spinner,null)),S=Object(i.createElement)(a.Placeholder,{icon:D,label:Object(o.a)("Mailchimp"),notices:s},Object(i.createElement)("div",{className:"components-placeholder__instructions"},Object(o.a)("You need to connect your Mailchimp account and choose a list in order to start collecting Email subscribers."),Object(i.createElement)("br",null),Object(i.createElement)("br",null),Object(i.createElement)(a.Button,{isDefault:!0,isLarge:!0,href:d,target:"_blank"},Object(o.a)("Set up Mailchimp form")),Object(i.createElement)("br",null),Object(i.createElement)("br",null),Object(i.createElement)(a.Button,{isLink:!0,onClick:e.apiCall},Object(o.a)("Re-check Connection")))),A=Object(i.createElement)(w.InspectorControls,null,Object(i.createElement)(a.PanelBody,{title:Object(o.a)("Text Elements")},Object(i.createElement)(a.TextControl,{label:Object(o.a)("Email Placeholder"),value:m,onChange:e.updateEmailPlaceholder})),Object(i.createElement)(a.PanelBody,{title:Object(o.a)("Notifications")},Object(i.createElement)(a.TextControl,{label:Object(o.a)("Processing text"),value:b,onChange:e.updateProcessingText}),Object(i.createElement)(a.TextControl,{label:Object(o.a)("Success text"),value:g,onChange:e.updateSuccessText}),Object(i.createElement)(a.TextControl,{label:Object(o.a)("Error text"),value:y,onChange:e.updateErrorText})),Object(i.createElement)(a.PanelBody,{title:Object(o.a)("Mailchimp Connection")},Object(i.createElement)(a.ExternalLink,{href:d},Object(o.a)("Manage Connection")))),M=k()(r,v()({},"".concat(j,"notication-audition"),p)),T=Object(i.createElement)("div",{className:M},Object(i.createElement)(a.TextControl,{"aria-label":m,className:"wp-block-jetpack-mailchimp_text-input",disabled:!0,onChange:function(){return!1},placeholder:m,title:Object(o.a)("You can edit the email placeholder in the sidebar."),type:"email"}),Object(i.createElement)(_.a,e.props),Object(i.createElement)(w.RichText,{tagName:"p",placeholder:Object(o.a)("Write consent text"),value:f,onChange:function(e){return l({consentText:e})},inlineToolbar:!0}),p&&Object(i.createElement)("div",{className:"".concat(j,"notification ").concat(j).concat(p),role:e.roleForAuditionType(p)},e.labelForAuditionType(p)));return Object(i.createElement)(i.Fragment,null,c,h===E&&O,h===x&&S,h===C&&A,h===C&&T)}),e.state={audition:null,connected:E,connectURL:null},e.timeout=null,e}return b()(t,e),t}(i.Component),z=Object(a.withNotices)(T),D=(n(118),Object(i.createElement)(a.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(i.createElement)(a.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(i.createElement)(a.Path,{d:"M22 6c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6zm-2 0l-8 5-8-5h16zm0 12H4V8l8 5 8-5v10z"}))),N={title:Object(o.a)("Mailchimp"),icon:D,description:Object(o.a)("A form enabling readers to join a Mailchimp list."),category:"jetpack",keywords:[Object(o.c)("email","block search term"),Object(o.c)("subscription","block search term"),Object(o.c)("newsletter","block search term")],attributes:{emailPlaceholder:{type:"string",default:Object(o.a)("Enter your email")},submitButtonText:{type:"string",default:Object(o.a)("Join my email list")},customBackgroundButtonColor:{type:"string"},customTextButtonColor:{type:"string"},consentText:{type:"string",default:Object(o.a)("By clicking submit, you agree to share your email address with the site owner and Mailchimp to receive marketing, updates, and other emails from the site owner. Use the unsubscribe link in those emails to opt out at any time.")},processingLabel:{type:"string",default:Object(o.a)("Processing…")},successLabel:{type:"string",default:Object(o.a)("Success! You're on the list.")},errorLabel:{type:"string",default:Object(o.a)("Whoops! There was an error and we couldn't process your subscription. Please reload the page and try again.")}},edit:z,save:function(){return null}};Object(r.a)("mailchimp",N)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(0),a=n(2),o=n(7),s=n.n(o),c=n(11),l=n.n(c),u=n(8),p=n.n(u),h=n(9),d=n.n(h),m=n(4),f=n.n(m),b=n(10),g=n.n(b),v=n(3),y=n.n(v),j=n(1),O=n(12),k=n.n(O),_=n(6),w="t1PkR1Vq0mzHueIFBvZSZErgFs9NBmYW",E=Object(j.a)("Search for a term or paste a Giphy URL"),C=function(e){function t(){var e,n;s()(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=p()(this,(e=d()(t)).call.apply(e,[this].concat(a))),y()(f()(n),"textControlRef",Object(i.createRef)()),y()(f()(n),"state",{captionFocus:!1,results:null}),y()(f()(n),"onFormSubmit",function(e){e.preventDefault(),n.onSubmit()}),y()(f()(n),"onSubmit",function(){var e=n.props.attributes.searchText;n.parseSearch(e)}),y()(f()(n),"parseSearch",function(e){var t=null;-1!==e.indexOf("//giphy.com/gifs")&&(t=n.splitAndLast(n.splitAndLast(e,"/"),"-")),-1!==e.indexOf("//i.giphy.com")&&(t=n.splitAndLast(e,"/").replace(".gif",""));var r=e.match(/http[s]?:\/\/media.giphy.com\/media\/([A-Za-z0-9\-.]+)\/giphy.gif/);return r&&(t=r[1]),t?n.fetch(n.urlForId(t)):n.fetch(n.urlForSearch(e))}),y()(f()(n),"urlForSearch",function(e){return"https://api.giphy.com/v1/gifs/search?q=".concat(encodeURIComponent(e),"&api_key=").concat(encodeURIComponent(w),"&limit=10")}),y()(f()(n),"urlForId",function(e){return"https://api.giphy.com/v1/gifs/".concat(encodeURIComponent(e),"?api_key=").concat(encodeURIComponent(w))}),y()(f()(n),"splitAndLast",function(e,t){var n=e.split(t);return n[n.length-1]}),y()(f()(n),"fetch",function(e){var t=new XMLHttpRequest;t.open("GET",e),t.onload=function(){if(200===t.status){var e=JSON.parse(t.responseText),r=void 0!==e.data.images?[e.data]:e.data,i=r[0];if(!i.images)return;n.setState({results:r},function(){n.selectGiphy(i)})}},t.send()}),y()(f()(n),"selectGiphy",function(e){var t=n.props.setAttributes,r=Math.floor(e.images.original.height/e.images.original.width*100),i="".concat(r,"%");t({giphyUrl:e.embed_url,paddingTop:i})}),y()(f()(n),"setFocus",function(){n.textControlRef.current.querySelector("input").focus(),n.setState({captionFocus:!1})}),y()(f()(n),"hasSearchText",function(){var e=n.props.attributes.searchText;return e&&e.length>0}),y()(f()(n),"thumbnailClicked",function(e){n.selectGiphy(e)}),n}return g()(t,e),l()(t,[{key:"render",value:function(){var e=this,t=this.props,n=t.attributes,r=t.className,o=t.isSelected,s=t.setAttributes,c=n.align,l=n.caption,u=n.giphyUrl,p=n.searchText,h=n.paddingTop,d=this.state,m=d.captionFocus,f=d.results,b={paddingTop:h},g=k()(r,"align".concat(c)),v=Object(i.createElement)("form",{className:"wp-block-jetpack-gif_input-container",onSubmit:this.onFormSubmit,ref:this.textControlRef},Object(i.createElement)(a.TextControl,{className:"wp-block-jetpack-gif_input",label:E,placeholder:E,onChange:function(e){return s({searchText:e})},value:p}),Object(i.createElement)(a.Button,{isLarge:!0,onClick:this.onSubmit},Object(j.a)("Search")));return Object(i.createElement)("div",{className:g},Object(i.createElement)(_.InspectorControls,null,Object(i.createElement)(a.PanelBody,{className:"components-panel__body-gif-branding"},Object(i.createElement)(a.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 202 22"},Object(i.createElement)(a.Path,{d:"M4.6 5.9H0v10h1.6v-3.1h3c4.8 0 4.8-6.9 0-6.9zm0 5.4h-3v-4h3c2.6.1 2.6 4 0 4zM51.2 12.3c2-.3 2.7-1.7 2.7-3.1 0-1.7-1.2-3.3-3.5-3.3h-4.6v10h1.6v-3.4h2.1l3 3.4h1.9l-.2-.3-3-3.3zM47.4 11V7.4h3c1.3 0 1.9.9 1.9 1.8s-.6 1.8-1.9 1.8h-3zM30.6 13.6L28 5.9h-1.1l-2.5 7.7-2.6-7.7H20l3.7 10H25l1.4-3.5L27.5 9l1.1 3.4 1.3 3.5h1.4l3.5-10h-1.7z"}),Object(i.createElement)(a.Path,{d:"M14.4 5.7c-3 0-5.1 2.2-5.1 5.2 0 2.6 1.6 5.1 5.1 5.1 3.5 0 5.1-2.5 5.1-5.2-.1-2.6-1.7-5.1-5.1-5.1zm-.1 8.9c-2.5 0-3.5-1.9-3.5-3.7 0-2.2 1.2-3.8 3.5-3.8 2.4 0 3.5 2 3.5 3.8.1 2-1 3.7-3.5 3.7zM57.7 11.6h5.5v-1.5h-5.5V7.4h5.7V5.9h-7.3v10h7.3v-1.6h-5.7zM38 14.3v-2.7h5.5v-1.5H38V7.4h5.7V5.9h-7.3v10h7.3v-1.6zM93 10.3l-2.7-4.4h-1.9V6l3.8 5.8v4.1h1.6v-4.1l4-5.8v-.1h-2zM69.3 5.9h-3.8v10h3.8c3.5 0 5.1-2.5 5-5.1-.1-2.5-1.6-4.9-5-4.9zm0 8.4h-2.2V7.4h2.2c2.3 0 3.4 1.7 3.4 3.4s-1 3.5-3.4 3.5zM86.3 10.7c.9-.4 1.4-1.1 1.4-2 0-2-1.5-2.8-3.4-2.8h-4.6v10h4.6c2 0 3.7-.7 3.7-2.8 0-.8-.5-2-1.7-2.4zm-5-3.4h3c1.2 0 1.8.7 1.8 1.4 0 .8-.6 1.3-1.8 1.3h-3V7.3zm3 7.1h-3v-2.9h3c.9 0 2.1.5 2.1 1.6 0 1-1.2 1.3-2.1 1.3zM113.9 13.3h5.3V16c-1.2.9-2.9 1.1-4 1.1-4.2 0-5.6-3.3-5.6-6 0-4.1 2.2-6.1 5.6-6.1 1.4 0 3.2.4 4.8 1.8l3.4-3.4C120.7.6 118.1 0 115.2 0c-7.8 0-11.4 5.6-11.4 11s3.1 10.9 11.4 10.9c4 0 7.6-1.4 8.9-4.1V8.6h-10.2v4.7zM171.9 8.5h-7.4V.6h-5.9v20.8h5.9v-7.8h7.4v7.8h5.9V.6h-5.9zM195.1.6l-4.5 7.1-4.3-7.1h-6.6v.2l7.9 12.3v8.3h5.9v-8.3L201.8.9V.6zM127.4.6h5.9v20.8h-5.9zM147.6.6h-10.1v20.8h5.9v-5.6h4.2c5.6-.1 8.3-3.4 8.3-7.6.1-4.1-2.7-7.6-8.3-7.6zm0 10.2h-4.2V5.6h4.2c1.6 0 2.5 1.2 2.5 2.6 0 1.4-.9 2.6-2.5 2.6z"})))),u?Object(i.createElement)("figure",null,o&&v,o&&f&&f.length>1&&Object(i.createElement)("div",{className:"wp-block-jetpack-gif_thumbnails-container"},f.map(function(t){var n={backgroundImage:"url(".concat(t.images.downsized_still.url,")")};return Object(i.createElement)("button",{className:"wp-block-jetpack-gif_thumbnail-container",key:t.id,onClick:function(){e.thumbnailClicked(t)},style:n})})),Object(i.createElement)("div",{className:"wp-block-jetpack-gif-wrapper",style:b},Object(i.createElement)("div",{className:"wp-block-jetpack-gif_cover",onClick:this.setFocus,onKeyDown:this.setFocus,role:"button",tabIndex:"0"}),Object(i.createElement)("iframe",{src:u,title:p})),(!_.RichText.isEmpty(l)||o)&&!!u&&Object(i.createElement)(_.RichText,{className:"wp-block-jetpack-gif-caption gallery-caption",inlineToolbar:!0,isSelected:m,unstableOnFocus:function(){e.setState({captionFocus:!0})},onChange:function(e){return s({caption:e})},placeholder:Object(j.a)("Write caption…"),tagName:"figcaption",value:l})):Object(i.createElement)(a.Placeholder,{className:"wp-block-jetpack-gif_placeholder",icon:S,label:x},v))}}]),t}(i.Component),x=(n(74),n(116),Object(j.a)("GIF")),S=Object(i.createElement)(a.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(i.createElement)(a.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(i.createElement)(a.Path,{d:"M18 13v7H4V6h5.02c.05-.71.22-1.38.48-2H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-5l-2-2zm-1.5 5h-11l2.75-3.53 1.96 2.36 2.75-3.54L16.5 18zm2.8-9.11c.44-.7.7-1.51.7-2.39C20 4.01 17.99 2 15.5 2S11 4.01 11 6.5s2.01 4.5 4.49 4.5c.88 0 1.7-.26 2.39-.7L21 13.42 22.42 12 19.3 8.89zM15.5 9C14.12 9 13 7.88 13 6.5S14.12 4 15.5 4 18 5.12 18 6.5 16.88 9 15.5 9z"})),A={title:x,icon:S,category:"jetpack",keywords:[Object(j.a)("animated"),Object(j.a)("giphy"),Object(j.a)("image")],description:Object(j.a)("Search for and insert an animated image."),attributes:{align:{type:"string",default:"center"},caption:{type:"string"},giphyUrl:{type:"string"},searchText:{type:"string"},paddingTop:{type:"string",default:"56.2%"}},supports:{html:!1,align:!0},edit:C,save:function(){return null}};Object(r.a)("gif",A)},function(e,t,n){"use strict";n.r(t);n(33);var r=n(21),i=n.n(r),a=n(0),o=n(16),s=n(43);Object(o.setCategories)([].concat(i()(Object(o.getCategories)().filter(function(e){return"jetpack"!==e.slug})),[{slug:"jetpack",title:"Jetpack",icon:Object(a.createElement)(s.a,null)}]))},,,,function(e,t){e.exports=wp.url},,function(e,t,n){n(277),n(268),n(264),n(262),n(276),n(275),n(265),n(269),n(261),n(273),n(271),n(274),n(263),n(266),n(272),n(260),n(270),n(267),n(306),e.exports=n(305)},function(e,t,n){},,function(e,t,n){},,,,,,,,,,,,,,,,,,,function(e,t,n){"use strict";n.r(t);var r=n(19),i=(n(286),n(7)),a=n.n(i),o=n(11),s=n.n(o),c=n(8),l=n.n(c),u=n(9),p=n.n(u),h=n(4),d=n.n(h),m=n(10),f=n.n(m),b=n(3),g=n.n(b),v=n(0),y=n(2),j=n(281),O=n(1),k=function(e){var t=e.attributes,n=t.url,r=t.view,i=e.className;return Object(v.createElement)("div",{className:i},Object(v.createElement)("iframe",{title:Object(O.a)("VR Image"),allowFullScreen:"true",frameBorder:"0",width:"100%",height:"300",src:Object(j.addQueryArgs)("https://vr.me.sh/view/",{url:n,view:r})}))},_=function(e){function t(){var e,n;a()(this,t);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=l()(this,(e=p()(t)).call.apply(e,[this].concat(i))),g()(d()(n),"onChangeUrl",function(e){n.props.setAttributes({url:e.trim()})}),g()(d()(n),"onChangeView",function(e){n.props.setAttributes({view:e})}),n}return f()(t,e),s()(t,[{key:"render",value:function(){var e=this.props,t=e.attributes,n=e.className;return t.url&&t.view?Object(v.createElement)(k,{attributes:t,className:n}):Object(v.createElement)(y.Placeholder,{key:"placeholder",icon:"format-image",label:Object(O.a)("VR Image"),className:n},Object(v.createElement)(y.TextControl,{type:"url",label:Object(O.a)("Enter URL to VR image"),value:t.url,onChange:this.onChangeUrl}),Object(v.createElement)(y.SelectControl,{label:Object(O.a)("View Type"),disabled:!t.url,value:t.view,onChange:this.onChangeView,options:[{label:"",value:""},{label:Object(O.a)("360°"),value:"360"},{label:Object(O.a)("Cinema"),value:"cinema"}]}))}}]),t}(v.Component),w={title:Object(O.a)("VR Image"),description:Object(O.a)("Embed 360° photos and Virtual Reality (VR) content"),icon:"embed-photo",category:"jetpack",keywords:[Object(O.a)("vr"),Object(O.a)("panorama"),Object(O.a)("360")],supports:{html:!1},attributes:{url:{type:"string"},view:{type:"string"}},edit:_,save:k};Object(r.a)("vr",w)},function(e,t,n){"use strict";n.r(t);var r=n(0),i=n(2),a=n(40),o=(n(284),n(41)),s=n(7),c=n.n(s),l=n(11),u=n.n(l),p=n(8),h=n.n(p),d=n(9),m=n.n(d),f=n(4),b=n.n(f),g=n(10),v=n.n(g),y=n(3),j=n.n(y),O=n(14),k=n(5),_=n(15),w=n(17),E=n(1),C=function(e){function t(){var e,n;c()(this,t);for(var r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];return n=h()(this,(e=m()(t)).call.apply(e,[this].concat(i))),j()(b()(n),"onMessageChange",function(e){n.props.updateSeoDescription(e.target.value)}),n}return v()(t,e),u()(t,[{key:"render",value:function(){var e=this.props.seoDescription;return Object(r.createElement)("div",{className:"jetpack-seo-message-box"},Object(r.createElement)("textarea",{value:e,onChange:this.onMessageChange,placeholder:Object(E.a)("Write a description…"),rows:4}),Object(r.createElement)("div",{className:"jetpack-seo-character-count"},Object(_.sprintf)(Object(E.b)("%d character","%d characters",e.length),e.length)))}}]),t}(r.Component),x=Object(O.compose)([Object(w.withSelect)(function(e){return{seoDescription:Object(k.get)(e("core/editor").getEditedPostAttribute("meta"),["advanced_seo_description"],"")}}),Object(w.withDispatch)(function(e){return{updateSeoDescription:function(t){e("core/editor").editPost({meta:{advanced_seo_description:t}})}}})])(C),S={render:function(){return Object(r.createElement)(r.Fragment,null,Object(r.createElement)(o.a,null,Object(r.createElement)(i.PanelBody,{title:Object(E.a)("SEO Description")},Object(r.createElement)(x,null))),Object(r.createElement)(a.PluginPrePublishPanel,{initialOpen:!0,id:"seo-title",title:Object(r.createElement)("span",{id:"seo-defaults",key:"seo-title-span"},Object(E.a)("SEO Description"))},Object(r.createElement)(x,null)))}},A=n(42);Object(A.a)("seo",S)}])); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/editor-beta.rtl.css b/plugins/jetpack/_inc/blocks/editor-beta.rtl.css
deleted file mode 100644
index 00aee0d3..00000000
--- a/plugins/jetpack/_inc/blocks/editor-beta.rtl.css
+++ /dev/null
@@ -1 +0,0 @@
-.wp-block-jetpack-business-hours{overflow:hidden}.wp-block-jetpack-business-hours .business-hours__row{display:flex}.wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add,.wp-block-jetpack-business-hours .business-hours__row.business-hours-row__closed{margin-bottom:20px}.wp-block-jetpack-business-hours .business-hours__row .business-hours__day{width:44%;display:flex;align-items:baseline}.wp-block-jetpack-business-hours .business-hours__row .business-hours__day .business-hours__day-name{width:60%;font-weight:700;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.wp-block-jetpack-business-hours .business-hours__row .business-hours__day .components-form-toggle{margin-left:4px}.wp-block-jetpack-business-hours .business-hours__row .business-hours__hours{width:44%;margin:0;display:flex;align-items:center;flex-wrap:wrap}.wp-block-jetpack-business-hours .business-hours__row .business-hours__hours .components-base-control{display:inline-block;margin-bottom:0;width:48%}.wp-block-jetpack-business-hours .business-hours__row .business-hours__hours .components-base-control.business-hours__open{margin-left:4%}.wp-block-jetpack-business-hours .business-hours__row .business-hours__hours .components-base-control .components-base-control__label{margin-bottom:0}.wp-block-jetpack-business-hours .business-hours__remove{align-self:flex-end;margin-bottom:8px;text-align:center;width:10%}.wp-block-jetpack-business-hours .business-hours-row__add button:hover{box-shadow:none!important}.wp-block-jetpack-business-hours .business-hours__remove button{display:block;margin:0 auto}.wp-block-jetpack-business-hours .business-hours-row__add .components-button.is-default:active,.wp-block-jetpack-business-hours .business-hours-row__add .components-button.is-default:focus,.wp-block-jetpack-business-hours .business-hours-row__add .components-button.is-default:hover,.wp-block-jetpack-business-hours .business-hours__remove .components-button.is-default:active,.wp-block-jetpack-business-hours .business-hours__remove .components-button.is-default:focus,.wp-block-jetpack-business-hours .business-hours__remove .components-button.is-default:hover{background:none;box-shadow:none}@media (max-width:1080px){.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row{flex-wrap:wrap}.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__day,.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__remove{display:none}.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row .business-hours__day{width:100%}.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row .business-hours__hours{width:78%}.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row .business-hours__remove{width:18%}}@media (max-width:600px){.wp-block-jetpack-business-hours .business-hours__row{flex-wrap:wrap}.wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__day,.wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__remove{display:none}.wp-block-jetpack-business-hours .business-hours__row .business-hours__day{width:100%}.wp-block-jetpack-business-hours .business-hours__row .business-hours__hours{width:78%}.wp-block-jetpack-business-hours .business-hours__row .business-hours__remove{width:18%}}.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row{flex-wrap:wrap}.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__day,.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__remove{display:none}.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row .business-hours__day{width:100%}.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row .business-hours__hours{width:78%}.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row .business-hours__remove{width:18%}.jetpack-contact-form{padding:10px 18px}.jetpack-contact-form.has-intro{padding:0}.jetpack-contact-form .components-placeholder{padding:24px}.jetpack-contact-form .components-placeholder input[type=text]{width:100%;outline-width:0;outline-style:none;line-height:16px}.jetpack-contact-form .components-placeholder .components-placeholder__label svg{margin-left:1ch}.jetpack-contact-form .components-placeholder .components-placeholder__fieldset,.jetpack-contact-form .components-placeholder .help-message{text-align:right}.jetpack-contact-form .components-placeholder .help-message{width:100%;margin:-18px 0 28px}.jetpack-contact-form .components-placeholder .components-base-control{margin-bottom:16px;width:100%}.jetpack-contact-form__intro-message{margin:0 0 16px}.jetpack-contact-form__create{width:100%}.jetpack-field-label{display:flex;flex-direction:row}.jetpack-field-label .components-base-control{margin-top:-1px;margin-bottom:-3px}.jetpack-field-label .components-base-control .components-form-toggle{margin:2px 0 0 8px}.jetpack-field-label .required{color:#dc3232}.jetpack-field-label .components-toggle-control .components-base-control__field{margin-bottom:0}.jetpack-field-label__input{flex-grow:1;min-height:unset;padding:0}.jetpack-field-label__input.jetpack-field-label__input.jetpack-field-label__input{border-color:#fff;border-radius:0;font-weight:600;margin:0 0 2px;padding:0}.jetpack-field-label__input.jetpack-field-label__input.jetpack-field-label__input:focus{border-color:#fff;box-shadow:none}input.components-text-control__input{line-height:16px}.jetpack-field .components-text-control__input.components-text-control__input{width:100%}.jetpack-field .components-text-control__input,.jetpack-field .components-textarea-control__input{color:#72777c;padding:10px 8px}.jetpack-field-checkbox__checkbox.jetpack-field-checkbox__checkbox.jetpack-field-checkbox__checkbox{float:right}.jetpack-field-multiple__list.jetpack-field-multiple__list{list-style-type:none;margin:0}.jetpack-field-multiple__list.jetpack-field-multiple__list:empty{display:none}[data-type="jetpack/field-select"] .jetpack-field-multiple__list.jetpack-field-multiple__list{border:1px solid #8d96a0;border-radius:4px;padding:4px}.jetpack-option{display:flex;align-items:center;margin:0}.jetpack-option__type.jetpack-option__type{margin-top:0}.jetpack-option__input.jetpack-option__input.jetpack-option__input{border-color:#fff;border-radius:0;flex-grow:1}.jetpack-option__input.jetpack-option__input.jetpack-option__input:hover{border-color:#357cb5}.jetpack-option__input.jetpack-option__input.jetpack-option__input:focus{border-color:#e3e5e8;box-shadow:none}.jetpack-option__remove.jetpack-option__remove{padding:6px;vertical-align:bottom}.jetpack-field-multiple__add-option{margin-right:-6px;padding:4px 4px 4px 8px}.jetpack-field-multiple__add-option svg{margin-left:12px}.jetpack-field-checkbox .components-base-control__label{display:flex;align-items:center}.jetpack-field-checkbox .components-base-control__label .jetpack-field-label{flex-grow:1}.jetpack-field-checkbox .components-base-control__label .jetpack-field-label__input{font-size:13px;font-weight:400;padding-right:10px}@media (min-width:481px){.jetpack-contact-form-shortcode-preview{padding:24px}}.jetpack-contact-form-shortcode-preview{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;line-height:1.4em;display:block;position:relative;margin:0 auto;padding:16px;box-sizing:border-box;background:#fff;box-shadow:0 0 0 1px rgba(200,215,225,.5),0 1px 2px #e9eff3}.jetpack-contact-form-shortcode-preview:after{content:".";display:block;height:0;clear:both;visibility:hidden}.jetpack-contact-form-shortcode-preview>div{margin-top:24px}.jetpack-contact-form-shortcode-preview>div:first-child{margin-top:0}.jetpack-contact-form-shortcode-preview label{display:block;font-size:14px;font-weight:600;margin-bottom:5px}.jetpack-contact-form-shortcode-preview input[type=email],.jetpack-contact-form-shortcode-preview input[type=tel],.jetpack-contact-form-shortcode-preview input[type=text],.jetpack-contact-form-shortcode-preview input[type=url]{border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;margin:0;padding:7px 14px;width:100%;color:#2e4453;font-size:16px;line-height:1.5;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-shadow:none}.jetpack-contact-form-shortcode-preview input[type=email]:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=text]:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=url]:-ms-input-placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview input[type=email]::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=text]::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=url]::-ms-input-placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview input[type=email]::placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]::placeholder,.jetpack-contact-form-shortcode-preview input[type=text]::placeholder,.jetpack-contact-form-shortcode-preview input[type=url]::placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview input[type=email]:hover,.jetpack-contact-form-shortcode-preview input[type=tel]:hover,.jetpack-contact-form-shortcode-preview input[type=text]:hover,.jetpack-contact-form-shortcode-preview input[type=url]:hover{border-color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=email]:focus,.jetpack-contact-form-shortcode-preview input[type=tel]:focus,.jetpack-contact-form-shortcode-preview input[type=text]:focus,.jetpack-contact-form-shortcode-preview input[type=url]:focus{border-color:#0087be;outline:none;box-shadow:0 0 0 2px #78dcfa}.jetpack-contact-form-shortcode-preview input[type=email]:focus::-ms-clear,.jetpack-contact-form-shortcode-preview input[type=tel]:focus::-ms-clear,.jetpack-contact-form-shortcode-preview input[type=text]:focus::-ms-clear,.jetpack-contact-form-shortcode-preview input[type=url]:focus::-ms-clear{display:none}.jetpack-contact-form-shortcode-preview input[type=email]:disabled,.jetpack-contact-form-shortcode-preview input[type=tel]:disabled,.jetpack-contact-form-shortcode-preview input[type=text]:disabled,.jetpack-contact-form-shortcode-preview input[type=url]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;-webkit-text-fill-color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=email]:disabled:hover,.jetpack-contact-form-shortcode-preview input[type=tel]:disabled:hover,.jetpack-contact-form-shortcode-preview input[type=text]:disabled:hover,.jetpack-contact-form-shortcode-preview input[type=url]:disabled:hover{cursor:default}.jetpack-contact-form-shortcode-preview input[type=email]:disabled:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]:disabled:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=text]:disabled:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=url]:disabled:-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=email]:disabled::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]:disabled::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=text]:disabled::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=url]:disabled::-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=email]:disabled::placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]:disabled::placeholder,.jetpack-contact-form-shortcode-preview input[type=text]:disabled::placeholder,.jetpack-contact-form-shortcode-preview input[type=url]:disabled::placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview textarea{border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;margin:0;padding:7px 14px;height:92px;width:100%;color:#2e4453;font-size:16px;line-height:1.5;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-shadow:none}.jetpack-contact-form-shortcode-preview textarea:-ms-input-placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview textarea::-ms-input-placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview textarea::placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview textarea:hover{border-color:#a8bece}.jetpack-contact-form-shortcode-preview textarea:focus{border-color:#0087be;outline:none;box-shadow:0 0 0 2px #78dcfa}.jetpack-contact-form-shortcode-preview textarea:focus::-ms-clear{display:none}.jetpack-contact-form-shortcode-preview textarea:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;-webkit-text-fill-color:#a8bece}.jetpack-contact-form-shortcode-preview textarea:disabled:hover{cursor:default}.jetpack-contact-form-shortcode-preview textarea:disabled:-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview textarea:disabled::-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview textarea:disabled::placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=checkbox]{-webkit-appearance:none;display:inline-block;box-sizing:border-box;margin:2px 0 0;width:16px;height:16px;float:right;outline:0;padding:0;box-shadow:none;background-color:#fff;border:1px solid #c8d7e1;color:#2e4453;font-size:16px;line-height:0;text-align:center;vertical-align:middle;-moz-appearance:none;appearance:none;transition:all .15s ease-in-out;clear:none;cursor:pointer}.jetpack-contact-form-shortcode-preview input[type=checkbox]:checked:before{content:"\f147";font-family:Dashicons;margin:-3px -4px 0 0;float:right;display:inline-block;vertical-align:middle;width:16px;font-size:20px;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;color:#00aadc}.jetpack-contact-form-shortcode-preview input[type=checkbox]:disabled:checked:before{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=checkbox]:hover{border-color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=checkbox]:focus{border-color:#0087be;outline:none;box-shadow:0 0 0 2px #78dcfa}.jetpack-contact-form-shortcode-preview input[type=checkbox]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;opacity:1}.jetpack-contact-form-shortcode-preview input[type=checkbox]:disabled:hover{cursor:default}.jetpack-contact-form-shortcode-preview input[type=checkbox]+span{display:block;font-weight:400;margin-right:24px}.jetpack-contact-form-shortcode-preview input[type=radio]{color:#2e4453;font-size:16px;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-sizing:border-box;-webkit-appearance:none;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:2px 0 0 4px;float:right;outline:0;padding:0;text-align:center;vertical-align:middle;width:16px;min-width:16px;-moz-appearance:none;appearance:none;border-radius:50%;line-height:10px}.jetpack-contact-form-shortcode-preview input[type=radio]:hover{border-color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=radio]:focus{border-color:#0087be;outline:none;box-shadow:0 0 0 2px #78dcfa}.jetpack-contact-form-shortcode-preview input[type=radio]:focus::-ms-clear{display:none}.jetpack-contact-form-shortcode-preview input[type=radio]:checked:before{float:right;display:inline-block;content:"\2022";margin:3px;width:8px;height:8px;text-indent:-9999px;background:#00aadc;vertical-align:middle;border-radius:50%;animation:grow .2s ease-in-out}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;opacity:1;-webkit-text-fill-color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled:hover{cursor:default}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled:-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled::-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled::placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled:checked:before{background:#e9eff3}.jetpack-contact-form-shortcode-preview input[type=radio]+span{display:block;font-weight:400;margin-right:24px}@keyframes grow{0%{transform:scale(.3)}60%{transform:scale(1.15)}to{transform:scale(1)}}.jetpack-contact-form-shortcode-preview select{background:#fff url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE1LjUgNkwxNyA3LjVsLTYuNzUgNi43NUwzLjUgNy41IDUgNmw1LjI1IDUuMjVMMTUuNSA2eiIgZmlsbD0iI0M4RDdFMSIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) no-repeat left 10px center;border-radius:4px;border:solid #c8d7e1;border-width:1px 1px 2px;color:#2e4453;cursor:pointer;display:inline-block;margin:0;outline:0;overflow:hidden;font-size:14px;line-height:21px;font-weight:600;text-overflow:ellipsis;text-decoration:none;vertical-align:top;white-space:nowrap;box-sizing:border-box;padding:2px 14px 2px 32px;-webkit-appearance:none;-moz-appearance:none;appearance:none;font-family:sans-serif}.jetpack-contact-form-shortcode-preview select:hover{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE1LjUgNkwxNyA3LjVsLTYuNzUgNi43NUwzLjUgNy41IDUgNmw1LjI1IDUuMjVMMTUuNSA2eiIgZmlsbD0iI2E4YmVjZSIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+)}.jetpack-contact-form-shortcode-preview select:focus{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE1LjUgNkwxNyA3LjVsLTYuNzUgNi43NUwzLjUgNy41IDUgNmw1LjI1IDUuMjVMMTUuNSA2eiIgZmlsbD0iIzJlNDQ1MyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);border-color:#00aadc;box-shadow:0 0 0 2px #78dcfa;outline:0;-moz-outline:none;-moz-user-focus:ignore}.jetpack-contact-form-shortcode-preview select:disabled,.jetpack-contact-form-shortcode-preview select:hover:disabled{background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE1LjUgNkwxNyA3LjVsLTYuNzUgNi43NUwzLjUgNy41IDUgNmw1LjI1IDUuMjVMMTUuNSA2eiIgZmlsbD0iI2U5ZWZmMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) no-repeat left 10px center}.jetpack-contact-form-shortcode-preview select.is-compact{min-width:0;padding:0 6px 2px 20px;margin:0 4px;background-position:left 5px center;background-size:12px 12px}.jetpack-contact-form-shortcode-preview label+select,.jetpack-contact-form-shortcode-preview label select{display:block;min-width:200px}.jetpack-contact-form-shortcode-preview label+select.is-compact,.jetpack-contact-form-shortcode-preview label select.is-compact{display:inline-block;min-width:0}.jetpack-contact-form-shortcode-preview select::-ms-expand{display:none}.jetpack-contact-form-shortcode-preview select::-ms-value{background:none;color:#2e4453}.jetpack-contact-form-shortcode-preview select:-moz-focusring{color:transparent;text-shadow:0 0 0 #2e4453}.jetpack-contact-form-shortcode-preview input[type=submit]{vertical-align:baseline;background:#fff;border:solid #c8d7e1;border-width:1px 1px 2px;color:#2e4453;cursor:pointer;display:inline-block;margin:24px 0 0;outline:0;overflow:hidden;font-weight:500;text-overflow:ellipsis;text-decoration:none;vertical-align:top;box-sizing:border-box;font-size:14px;line-height:21px;border-radius:4px;padding:7px 14px 9px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.jetpack-contact-form-shortcode-preview input[type=submit]:hover{border-color:#a8bece;color:#2e4453}.jetpack-contact-form-shortcode-preview input[type=submit]:active{border-width:2px 1px 1px}.jetpack-contact-form-shortcode-preview input[type=submit]:visited{color:#2e4453}.jetpack-contact-form-shortcode-preview input[type=submit]:focus{border-color:#00aadc;box-shadow:0 0 0 2px #78dcfa}.help-message{display:flex;font-size:13px;line-height:1.4em;margin-bottom:1em;margin-top:-.5em}.help-message svg{margin-left:5px;min-width:24px}.help-message>span{margin-top:2px}.help-message.help-message-is-error{color:#eb0001}.help-message.help-message-is-error svg{fill:#eb0001}.jetpack-contact-info-block{padding:10px 18px}.jetpack-contact-info-block .editor-plain-text.editor-plain-text:focus{box-shadow:none}.jetpack-contact-info-block .editor-plain-text{flex-grow:1;min-height:unset;padding:0;box-shadow:none;font-family:inherit;font-size:inherit;color:inherit;line-height:inherit;border:none}.wp-block-jetpack-contact-info{margin-bottom:1.5em}.wp-block-jetpack-gif{clear:both;margin:0 0 20px}.wp-block-jetpack-gif figure{margin:0;position:relative;width:100%}.wp-block-jetpack-gif iframe{border:0;right:0;height:100%;position:absolute;top:0;width:100%}.wp-block-jetpack-gif.aligncenter{text-align:center}.wp-block-jetpack-gif.alignleft,.wp-block-jetpack-gif.alignright{min-width:300px}.wp-block-jetpack-gif .wp-block-jetpack-gif-caption{margin-top:.5em;margin-bottom:1em;color:#555d66;text-align:center}.wp-block-jetpack-gif .wp-block-jetpack-gif-wrapper{height:0;margin:0;padding:calc(56.2% + 12px) 0 0;position:relative;width:100%}.wp-block-jetpack-gif figure{transition:padding-top 125ms ease-in-out}.wp-block-jetpack-gif .components-base-control__field{text-align:center}.wp-block-jetpack-gif .wp-block-jetpack-gif_cover{background:none;border:none;height:100%;right:0;margin:0;padding:0;position:absolute;top:0;width:100%;z-index:1}.wp-block-jetpack-gif .wp-block-jetpack-gif_cover:focus{outline:none}.wp-block-jetpack-gif .wp-block-jetpack-gif_input-container{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center;margin:0 auto;max-width:400px;width:100%;z-index:1}.wp-block-jetpack-gif .wp-block-jetpack-gif_input-container .components-base-control__label{height:0;margin:0;text-indent:-9999px}.wp-block-jetpack-gif .wp-block-jetpack-gif_input{flex-grow:1;margin-left:.5em}.wp-block-jetpack-gif .wp-block-jetpack-gif_thumbnails-container{display:flex;margin:-2px -2px 2px 0;overflow-x:auto;width:calc(100% + 4px)}.wp-block-jetpack-gif .wp-block-jetpack-gif_thumbnails-container::-webkit-scrollbar{display:none}.wp-block-jetpack-gif .wp-block-jetpack-gif_thumbnail-container{align-items:center;background-size:cover;background-repeat:no-repeat;background-position:50% 50%;border:none;border-radius:3px;cursor:pointer;display:flex;justify-content:center;margin:2px;padding:0 0 calc(10% - 4px);width:calc(10% - 4px)}.wp-block-jetpack-gif .wp-block-jetpack-gif_thumbnail-container:hover{box-shadow:0 0 0 1px #555d66}.wp-block-jetpack-gif .wp-block-jetpack-gif_thumbnail-container:focus{box-shadow:0 0 0 2px #00a0d2;outline:0}.components-panel__body-gif-branding svg{display:block;margin:0 auto;max-width:200px}.components-panel__body-gif-branding svg path{fill:#ccc}.wp-block-jetpack-mailchimp.is-processing form{display:none}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification{display:none;margin-bottom:1.5em;padding:.75em}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.is-visible{display:block}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.wp-block-jetpack-mailchimp_error{background-color:#eb0001;color:#fff}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.wp-block-jetpack-mailchimp_processing{background-color:rgba(0,0,0,.025)}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.wp-block-jetpack-mailchimp_success{background-color:#008a00;color:#fff}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification{display:block}.wp-block-jetpack-mailchimp .editor-rich-text__inline-toolbar{pointer-events:none}.wp-block-jetpack-mailchimp .editor-rich-text__inline-toolbar .components-toolbar{pointer-events:all}.wp-block-jetpack-mailchimp.wp-block-jetpack-mailchimp_notication-audition>:not(.wp-block-jetpack-mailchimp_notification){display:none}.wp-block-jetpack-mailchimp .jetpack-submit-button,.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_text-input{margin-bottom:1.5rem}.wp-block-jetpack-mailchimp .wp-block-button .wp-block-button__link{margin-top:0}.component__add-point{position:absolute;right:50%;top:50%;width:32px;height:38px;margin-top:-19px;margin-right:-16px;background-image:url(images/oval-3cc7669d571aef4e12f34b349e42d390.svg);background-repeat:no-repeat;text-indent:-9999px}.component__add-point,.component__add-point.components-button:not(:disabled):not([aria-disabled=true]):focus,.component__add-point:active,.component__add-point:focus,.component__add-point__popover .components-button:not(:disabled):not([aria-disabled=true]):focus{box-shadow:none;background-color:transparent}.component__add-point__popover .components-popover__content{padding:.1rem}.component__add-point__popover .components-location-search{margin:.5rem}.component__add-point__close{margin:0;padding:0;border:none;box-shadow:none;float:left}.component__add-point__close path{color:#aaa}.edit-post-settings-sidebar__panel-block .component__locations__panel{margin-bottom:1em}.edit-post-settings-sidebar__panel-block .component__locations__panel:empty{display:none}.edit-post-settings-sidebar__panel-block .component__locations__panel .components-panel__body:first-child{border-top:none}.edit-post-settings-sidebar__panel-block .component__locations__panel .components-panel__body,.edit-post-settings-sidebar__panel-block .component__locations__panel .components-panel__body:first-child,.edit-post-settings-sidebar__panel-block .component__locations__panel .components-panel__body:last-child{max-width:100%;margin:0}.edit-post-settings-sidebar__panel-block .component__locations__panel .components-panel__body button{padding-left:40px}.component__locations__delete-btn{padding:0}.component__locations__delete-btn svg{margin-left:.4em}.wp-block-jetpack-map-marker{width:32px;height:38px;opacity:.9}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button{border:1px solid #d3d3d3;border-radius:100%;width:56px;height:56px;margin:2px;text-indent:-9999px;background-color:#d3d3d3;background-position:50%;background-repeat:no-repeat;background-size:contain;transform:scale(1);transition:transform .2s ease}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button:hover{transform:scale(1.1)}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button.is-selected{border-color:#000}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button.is-theme-default{background-image:url(images/map-theme_default-2ceb449b599dbcbe2a90fead5a5f3824.jpg)}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button.is-theme-black_and_white{background-image:url(images/map-theme_black_and_white-1ead5946ca104d83676d6e3410e1d733.jpg)}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button.is-theme-satellite{background-image:url(images/map-theme_satellite-c74dc129bda9502fb0fb362bb627577e.jpg)}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button.is-theme-terrain{background-image:url(images/map-theme_terrain-2b6e6c1c8d09cbdc58a4c0653be1a6e3.jpg)}.wp-block-jetpack-map .wp-block-jetpack-map__gm-container{width:100%;overflow:hidden;background:#d3d3d3;min-height:400px;text-align:right}.wp-block-jetpack-map .mapboxgl-popup{max-width:300px}.wp-block-jetpack-map .mapboxgl-popup h3{font-size:1.3125em;font-weight:400;margin-bottom:.5rem}.wp-block-jetpack-map .mapboxgl-popup p{margin-bottom:0}.wp-block-jetpack-map__delete-btn{padding:0}.wp-block-jetpack-map__delete-btn svg{margin-left:.4em}.wp-block-jetpack-map-components-text-control-api-key{margin-left:4px}.wp-block-jetpack-map-components-text-control-api-key.components-base-control .components-base-control__field{margin-bottom:0}.wp-block-jetpack-map-components-text-control-api-key-submit.is-large{height:31px}.wp-block-jetpack-map-components-text-control-api-key-submit:disabled{opacity:1}.wp-block[data-type="jetpack/map"] .components-placeholder__label svg{fill:currentColor;margin-left:1ch}.wp-block-jetpack-markdown__placeholder{opacity:.62;pointer-events:none}.editor-block-list__block .wp-block-jetpack-markdown__preview{min-height:1.8em;line-height:1.8}.editor-block-list__block .wp-block-jetpack-markdown__preview>*{margin-top:32px;margin-bottom:32px}.editor-block-list__block .wp-block-jetpack-markdown__preview h1,.editor-block-list__block .wp-block-jetpack-markdown__preview h2,.editor-block-list__block .wp-block-jetpack-markdown__preview h3{line-height:1.4}.editor-block-list__block .wp-block-jetpack-markdown__preview h1{font-size:2.44em}.editor-block-list__block .wp-block-jetpack-markdown__preview h2{font-size:1.95em}.editor-block-list__block .wp-block-jetpack-markdown__preview h3{font-size:1.56em}.editor-block-list__block .wp-block-jetpack-markdown__preview h4{font-size:1.25em;line-height:1.5}.editor-block-list__block .wp-block-jetpack-markdown__preview h5{font-size:1em}.editor-block-list__block .wp-block-jetpack-markdown__preview h6{font-size:.8em}.editor-block-list__block .wp-block-jetpack-markdown__preview hr{border:none;border-bottom:2px solid #8f98a1;margin:2em auto;max-width:100px}.editor-block-list__block .wp-block-jetpack-markdown__preview p{line-height:1.8}.editor-block-list__block .wp-block-jetpack-markdown__preview blockquote{border-right:4px solid #000;margin-right:0;margin-left:0;padding-right:1em}.editor-block-list__block .wp-block-jetpack-markdown__preview blockquote p{line-height:1.5;margin:1em 0}.editor-block-list__block .wp-block-jetpack-markdown__preview ol,.editor-block-list__block .wp-block-jetpack-markdown__preview ul{margin-right:1.3em;padding-right:1.3em}.editor-block-list__block .wp-block-jetpack-markdown__preview li p{margin:0}.editor-block-list__block .wp-block-jetpack-markdown__preview code,.editor-block-list__block .wp-block-jetpack-markdown__preview pre{color:#23282d;font-family:Menlo,Consolas,monaco,monospace}.editor-block-list__block .wp-block-jetpack-markdown__preview code{background:#f3f4f5;border-radius:2px;font-size:inherit;padding:2px}.editor-block-list__block .wp-block-jetpack-markdown__preview pre{border-radius:4px;border:1px solid #e2e4e7;font-size:14px;padding:.8em 1em}.editor-block-list__block .wp-block-jetpack-markdown__preview pre code{background:transparent;padding:0}.editor-block-list__block .wp-block-jetpack-markdown__preview table{overflow-x:auto;border-collapse:collapse;width:100%}.editor-block-list__block .wp-block-jetpack-markdown__preview tbody,.editor-block-list__block .wp-block-jetpack-markdown__preview tfoot,.editor-block-list__block .wp-block-jetpack-markdown__preview thead{width:100%;min-width:240px}.editor-block-list__block .wp-block-jetpack-markdown__preview td,.editor-block-list__block .wp-block-jetpack-markdown__preview th{padding:.5em;border:1px solid}.wp-block-jetpack-markdown .wp-block-jetpack-markdown__editor{font-family:Menlo,Consolas,monaco,monospace;font-size:14px}.wp-block-jetpack-markdown .wp-block-jetpack-markdown__editor:focus{border-color:transparent;box-shadow:0 0 0 transparent}.jetpack-publicize-message-box{background-color:#edeff0;border-radius:4px}.jetpack-publicize-message-box textarea{width:100%}.jetpack-publicize-character-count{padding-bottom:5px;padding-right:5px}.jetpack-publicize__connections-list{list-style-type:none;margin:13px 0}.publicize-jetpack-connection-container{display:flex}.jetpack-publicize-gutenberg-social-icon{fill:#555d66;margin-left:5px}.jetpack-publicize-gutenberg-social-icon.is-facebook{fill:#39579a}.jetpack-publicize-gutenberg-social-icon.is-twitter{fill:#55acee}.jetpack-publicize-gutenberg-social-icon.is-linkedin{fill:#0976b4}.jetpack-publicize-gutenberg-social-icon.is-tumblr{fill:#35465c}.jetpack-publicize-gutenberg-social-icon.is-google-plus{fill:#df4a32}.jetpack-publicize-connection-label{flex:1;margin-left:5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.jetpack-publicize-connection-label .jetpack-publicize-connection-label-copy,.jetpack-publicize-connection-label .jetpack-publicize-gutenberg-social-icon{display:inline-block;vertical-align:middle}.jetpack-publicize-connection-toggle{margin-top:3px}.jetpack-publicize-notice.components-notice{margin-right:0;margin-left:0;margin-bottom:13px}.jetpack-publicize-notice .components-button+.components-button{margin-top:5px}.jetpack-publicize-message-note{display:inline-block;margin-bottom:4px;margin-top:13px}.jetpack-publicize-add-connection-wrapper{margin:15px 0}.jetpack-publicize-add-connection-container{display:flex}.jetpack-publicize-add-connection-container a{cursor:pointer}.jetpack-publicize-add-connection-container span{vertical-align:middle}.jetpack-publicize__connections-list .components-notice{margin:5px 0 10px}.edit-post-more-menu__content .components-icon-button .jetpack-logo,.edit-post-pinned-plugins .components-icon-button .jetpack-logo{width:20px;height:20px}.edit-post-more-menu__content .components-icon-button .jetpack-logo{margin-left:4px}.edit-post-pinned-plugins .components-icon-button.is-toggled .jetpack-logo,.edit-post-pinned-plugins .components-icon-button.is-toggled .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button.is-toggled .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button.is-toggled:hover .jetpack-logo,.edit-post-pinned-plugins .components-icon-button.is-toggled:hover .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button.is-toggled:hover .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button:hover .jetpack-logo,.edit-post-pinned-plugins .components-icon-button:hover .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button:hover .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button:not(.is-toggled) .jetpack-logo,.edit-post-pinned-plugins .components-icon-button:not(.is-toggled) .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button:not(.is-toggled) .jetpack-logo__icon-triangle{stroke:none!important}.edit-post-pinned-plugins .components-icon-button.is-toggled .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button.is-toggled:hover .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button:hover .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button:not(.is-toggled) .jetpack-logo__icon-circle{fill:#00be28!important}.edit-post-pinned-plugins .components-icon-button.is-toggled .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button.is-toggled:hover .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button:hover .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button:not(.is-toggled) .jetpack-logo__icon-triangle{fill:#fff!important}.jp-related-posts-i2__row{display:flex;margin-top:1.5rem}.jp-related-posts-i2__row:first-child{margin-top:0}.jp-related-posts-i2__row[data-post-count="3"] .jp-related-posts-i2__post{max-width:calc(33% - 20px)}.jp-related-posts-i2__row[data-post-count="1"] .jp-related-posts-i2__post,.jp-related-posts-i2__row[data-post-count="2"] .jp-related-posts-i2__post{max-width:calc(50% - 20px)}.jp-related-posts-i2__post{flex-grow:1;flex-basis:0;margin:0 10px;display:flex;flex-direction:column}.jp-related-posts-i2__post-context,.jp-related-posts-i2__post-date,.jp-related-posts-i2__post-heading,.jp-related-posts-i2__post-img-link{flex-direction:row}.jp-related-posts-i2__post-image-placeholder,.jp-related-posts-i2__post-img-link{order:-1}.jp-related-posts-i2__post-heading{margin:.5rem 0;font-size:1rem;line-height:1.2em}.jp-related-posts-i2__post-link{display:block;width:100%;line-height:1.2em;margin:.2em 0}.jp-related-posts-i2__post-img{width:100%}.jp-related-posts-i2__post-image-placeholder{display:block;position:relative;margin:0 auto;max-width:350px}.jp-related-posts-i2__post-image-placeholder-icon{position:absolute;top:calc(50% - 12px);right:calc(50% - 12px)}.jp-relatedposts-i2[data-layout=list] .jp-related-posts-i2__row{margin-top:0;display:block}.jp-relatedposts-i2[data-layout=list] .jp-related-posts-i2__post{max-width:none;margin:1rem 0 0}.jp-relatedposts-i2[data-layout=list] .jp-related-posts-i2__post-image-placeholder{max-width:350px;margin:0}.jp-relatedposts-i2[data-layout=list] .jp-related-posts-i2__post-img-link{margin-top:1rem}.wp-block-jetpack-repeat-visitor .components-notice{margin:1em 0 0}.wp-block-jetpack-repeat-visitor .components-radio-control__option{text-align:right}.wp-block-jetpack-repeat-visitor .components-notice__content{margin:.5em 0;font-size:.8em}.wp-block-jetpack-repeat-visitor .components-notice__content .components-base-control{display:inline-block;max-width:8em;vertical-align:middle}.wp-block-jetpack-repeat-visitor .components-notice__content .components-base-control .components-base-control__field{margin-bottom:0}.wp-block-jetpack-repeat-visitor-placeholder{min-height:inherit}.wp-block-jetpack-repeat-visitor-placeholder .components-placeholder__label svg{margin-left:.5ch}.wp-block-jetpack-repeat-visitor-placeholder .components-placeholder__fieldset{flex-wrap:nowrap}.wp-block-jetpack-repeat-visitor-placeholder .components-placeholder__fieldset .components-base-control{flex-basis:100%}.wp-block-jetpack-repeat-visitor-placeholder .components-base-control__help{color:#eb0001;font-size:13px}.wp-block-jetpack-repeat-visitor--is-unselected .wp-block-jetpack-repeat-visitor-placeholder{display:none}.wp-block-jetpack-repeat-visitor-threshold{margin-left:20px}.wp-block-jetpack-repeat-visitor-threshold .components-text-control__input{width:5em;text-align:center}.jetpack-clipboard-input{display:flex}.jetpack-clipboard-input .components-clipboard-button{margin:2px 6px 0 0}.wp-block-jetpack-simple-payments .simple-payments__help-message{display:flex;font-size:13px;line-height:1.4em;margin-bottom:1em;margin-top:-.5em}.wp-block-jetpack-simple-payments .simple-payments__help-message svg{margin-left:5px;min-width:24px}.wp-block-jetpack-simple-payments .simple-payments__help-message>span{margin-top:2px}.wp-block-jetpack-simple-payments .simple-payments__help-message.simple-payments__help-message-is-error{color:#eb0001}.wp-block-jetpack-simple-payments .simple-payments__help-message.simple-payments__help-message-is-error svg{fill:#eb0001}.simple-payments__loading{animation:simple-payments-loading 1.6s ease-in-out infinite}@keyframes simple-payments-loading{0%{opacity:.5}50%{opacity:.7}to{opacity:.5}}.jetpack-simple-payments-wrapper{margin-bottom:1.5em}body .jetpack-simple-payments-wrapper .jetpack-simple-payments-details p{margin:0 0 1.5em;padding:0}.jetpack-simple-payments-product{display:flex;flex-direction:column}.jetpack-simple-payments-product-image{flex:0 0 30%;margin-bottom:1.5em}.jetpack-simple-payments-image{box-sizing:border-box;min-width:70px;padding-top:100%;position:relative}.jetpack-simple-payments-image img{border:0;border-radius:0;height:auto;right:50%;margin:0;max-height:100%;max-width:100%;padding:0;position:absolute;top:50%;transform:translate(50%,-50%);width:auto}.jetpack-simple-payments-price p,.jetpack-simple-payments-title p{font-weight:700}.jetpack-simple-payments-purchase-box{align-items:flex-start;display:flex}.jetpack-simple-payments-items{flex:0 0 auto;margin-left:10px}input[type=number].jetpack-simple-payments-items-number{background:#fff;font-size:16px;line-height:1;max-width:60px;padding:4px 8px}@media screen and (min-width:400px){.jetpack-simple-payments-product{flex-direction:row}.jetpack-simple-payments-product-image+.jetpack-simple-payments-details{flex-basis:70%;padding-right:1em}}.wp-block-jetpack-simple-payments{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;display:grid;grid-template-columns:200px auto;grid-column-gap:10px}.wp-block-jetpack-simple-payments .simple-payments__field .components-base-control__label{display:none}.wp-block-jetpack-simple-payments .simple-payments__field .components-base-control__field{margin-bottom:1em}.wp-block-jetpack-simple-payments .simple-payments__field textarea{display:block}.wp-block-jetpack-simple-payments .simple-payments__field-has-error .components-text-control__input,.wp-block-jetpack-simple-payments .simple-payments__field-has-error .components-textarea-control__input{border-color:#eb0001}.wp-block-jetpack-simple-payments .simple-payments__price-container{display:flex;flex-wrap:wrap}.wp-block-jetpack-simple-payments .simple-payments__price-container .simple-payments__field{margin-left:10px}.wp-block-jetpack-simple-payments .simple-payments__price-container .simple-payments__help-message{flex:1 1 100%;margin-top:0}.wp-block-jetpack-simple-payments .simple-payments__field-price .components-text-control__input{max-width:90px}.wp-block-jetpack-simple-payments .simple-payments__field-email .components-text-control__input{max-width:400px}.wp-block-jetpack-simple-payments .simple-payments__field-multiple .components-toggle-control__label{line-height:1.4em}.wp-block-jetpack-simple-payments .simple-payments__field-content .components-textarea-control__input{min-height:32px}.wp-block-jetpack-slideshow{margin-bottom:1.5em;position:relative}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container{width:100%;overflow:hidden;opacity:0}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container.wp-swiper-initialized{opacity:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container .wp-block-jetpack-slideshow_slide,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container .wp-block-jetpack-slideshow_swiper-wrappper{padding:0;margin:0;line-height:normal}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_slide{background:rgba(0,0,0,.1);display:flex;height:100%;width:100%}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_slide figure{align-items:center;display:flex;height:100%;justify-content:center;margin:0;position:relative;width:100%}.wp-block-jetpack-slideshow .swiper-container-fade .wp-block-jetpack-slideshow_slide{background:#f6f6f6}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_image{display:block;height:auto;max-height:100%;max-width:100%;width:auto;-o-object-fit:contain;object-fit:contain}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev{background-color:rgba(0,0,0,.5);background-position:50%;background-repeat:no-repeat;background-size:24px;border:0;border-radius:4px;box-shadow:none;height:48px;margin:-24px 0 0;padding:0;transition:background-color .25s;width:48px}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next:hover,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause:hover,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev:hover{background-color:rgba(0,0,0,.75)}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev:focus{outline:thin dotted #fff;outline-offset:-4px}.wp-block-jetpack-slideshow .swiper-button-next.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .swiper-button-prev.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .wp-block-jetpack-slideshow_button-prev,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M5.88 4.12L13.76 12l-7.88 7.88L8 22l10-10L8 2z' fill='%23fff'/%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3C/svg%3E")}.wp-block-jetpack-slideshow .swiper-button-prev.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .swiper-button-next.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .wp-block-jetpack-slideshow_button-next,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M18 4.12L10.12 12 18 19.88 15.88 22l-10-10 10-10z' fill='%23fff'/%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3C/svg%3E")}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M6 19h4V5H6v14zm8-14v14h4V5h-4z' fill='%23fff'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");display:none;margin-top:0;position:absolute;left:10px;top:10px;z-index:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_autoplay-paused .wp-block-jetpack-slideshow_button-pause{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M8 5v14l11-7z' fill='%23fff'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E")}.wp-block-jetpack-slideshow[data-autoplay=true] .wp-block-jetpack-slideshow_button-pause{display:block}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_caption.gallery-caption{background-color:rgba(0,0,0,.5);box-sizing:border-box;bottom:0;color:#fff;cursor:text;right:0;margin:0!important;padding:.75em;position:absolute;left:0;text-align:initial;z-index:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_caption.gallery-caption a{color:inherit}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets{bottom:0;line-height:24px;padding:10px 0 2px;position:relative}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet{background:currentColor;color:currentColor;height:16px;opacity:.5;transform:scale(.75);transition:opacity .25s,transform .25s;vertical-align:top;width:16px}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet:hover{opacity:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet:focus{outline:thin dotted;outline-offset:0}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet-active{background-color:currentColor;opacity:1;transform:scale(1)}.wp-block-jetpack-slideshow__add-item{margin-top:4px;width:100%}.wp-block-jetpack-slideshow__add-item .components-button.wp-block-jetpack-slideshow__add-item-button,.wp-block-jetpack-slideshow__add-item .components-form-file-upload{width:100%;height:100%}.wp-block-jetpack-slideshow__add-item .components-button.wp-block-jetpack-slideshow__add-item-button{display:flex;flex-direction:column;justify-content:center;box-shadow:none;border:none;border-radius:0;min-height:100px}.wp-block-jetpack-slideshow__add-item .components-button.wp-block-jetpack-slideshow__add-item-button .dashicon{margin-top:10px}.wp-block-jetpack-slideshow__add-item .components-button.wp-block-jetpack-slideshow__add-item-button:focus,.wp-block-jetpack-slideshow__add-item .components-button.wp-block-jetpack-slideshow__add-item-button:hover{border:1px solid #555d66}.wp-block-jetpack-slideshow_slide .components-spinner{position:absolute;top:50%;right:50%;margin-top:-9px;margin-right:-9px}.wp-block-jetpack-slideshow_slide.is-transient img{opacity:.3}.wp-block-jetpack-tiled-gallery{margin:0 auto 1.5em}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__item img{border-radius:50%}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row{flex-grow:1;width:100%}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-1 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-1 .tiled-gallery__col{width:100%}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-2 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-2 .tiled-gallery__col{width:calc((100% - 4px)/2)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-3 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-3 .tiled-gallery__col{width:calc((100% - 8px)/3)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-4 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-4 .tiled-gallery__col{width:calc((100% - 12px)/4)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-5 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-5 .tiled-gallery__col{width:calc((100% - 16px)/5)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-6 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-6 .tiled-gallery__col{width:calc((100% - 20px)/6)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-7 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-7 .tiled-gallery__col{width:calc((100% - 24px)/7)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-8 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-8 .tiled-gallery__col{width:calc((100% - 28px)/8)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-9 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-9 .tiled-gallery__col{width:calc((100% - 32px)/9)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-10 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-10 .tiled-gallery__col{width:calc((100% - 36px)/10)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-11 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-11 .tiled-gallery__col{width:calc((100% - 40px)/11)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-12 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-12 .tiled-gallery__col{width:calc((100% - 44px)/12)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-13 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-13 .tiled-gallery__col{width:calc((100% - 48px)/13)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-14 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-14 .tiled-gallery__col{width:calc((100% - 52px)/14)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-15 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-15 .tiled-gallery__col{width:calc((100% - 56px)/15)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-16 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-16 .tiled-gallery__col{width:calc((100% - 60px)/16)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-17 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-17 .tiled-gallery__col{width:calc((100% - 64px)/17)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-18 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-18 .tiled-gallery__col{width:calc((100% - 68px)/18)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-19 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-19 .tiled-gallery__col{width:calc((100% - 72px)/19)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-20 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-20 .tiled-gallery__col{width:calc((100% - 76px)/20)}.wp-block-jetpack-tiled-gallery.is-style-columns .tiled-gallery__item,.wp-block-jetpack-tiled-gallery.is-style-rectangular .tiled-gallery__item{display:flex}.tiled-gallery__gallery{width:100%;display:flex;padding:0;flex-wrap:wrap}.tiled-gallery__row{width:100%;display:flex;flex-direction:row;justify-content:center;margin:0}.tiled-gallery__row+.tiled-gallery__row{margin-top:4px}.tiled-gallery__col{display:flex;flex-direction:column;justify-content:center;margin:0}.tiled-gallery__col+.tiled-gallery__col{margin-right:4px}.tiled-gallery__item{justify-content:center;margin:0;overflow:hidden;padding:0;position:relative}.tiled-gallery__item.filter__black-and-white{filter:grayscale(100%)}.tiled-gallery__item.filter__sepia{filter:sepia(100%)}.tiled-gallery__item.filter__1977{position:relative;filter:contrast(1.1) brightness(1.1) saturate(1.3)}.tiled-gallery__item.filter__1977 img{width:100%;z-index:1}.tiled-gallery__item.filter__1977:before{z-index:2}.tiled-gallery__item.filter__1977:after,.tiled-gallery__item.filter__1977:before{content:"";display:block;height:100%;width:100%;top:0;right:0;position:absolute;pointer-events:none}.tiled-gallery__item.filter__1977:after{z-index:3;background:rgba(243,106,188,.3);mix-blend-mode:screen}.tiled-gallery__item.filter__clarendon{position:relative;filter:contrast(1.2) saturate(1.35)}.tiled-gallery__item.filter__clarendon img{width:100%;z-index:1}.tiled-gallery__item.filter__clarendon:before{z-index:2}.tiled-gallery__item.filter__clarendon:after,.tiled-gallery__item.filter__clarendon:before{content:"";display:block;height:100%;width:100%;top:0;right:0;position:absolute;pointer-events:none}.tiled-gallery__item.filter__clarendon:after{z-index:3}.tiled-gallery__item.filter__clarendon:before{background:rgba(127,187,227,.2);mix-blend-mode:overlay}.tiled-gallery__item.filter__gingham{position:relative;filter:brightness(1.05) hue-rotate(-10deg)}.tiled-gallery__item.filter__gingham img{width:100%;z-index:1}.tiled-gallery__item.filter__gingham:before{z-index:2}.tiled-gallery__item.filter__gingham:after,.tiled-gallery__item.filter__gingham:before{content:"";display:block;height:100%;width:100%;top:0;right:0;position:absolute;pointer-events:none}.tiled-gallery__item.filter__gingham:after{z-index:3;background:#e6e6fa;mix-blend-mode:soft-light}.tiled-gallery__item+.tiled-gallery__item{margin-top:4px}.tiled-gallery__item>img{background-color:rgba(0,0,0,.1)}.tiled-gallery__item>a,.tiled-gallery__item>a>img,.tiled-gallery__item>img{display:block;height:auto;margin:0;max-width:100%;-o-object-fit:cover;object-fit:cover;-o-object-position:center;object-position:center;padding:0;width:100%}@keyframes tiled-gallery-img-placeholder{0%{background-color:#f6f6f6}50%{background-color:hsla(0,0%,96.5%,.5)}to{background-color:#f6f6f6}}.wp-block-jetpack-tiled-gallery{padding-right:4px;padding-left:4px}.wp-block-jetpack-tiled-gallery .tiled-gallery__item>img:focus{outline:none}.wp-block-jetpack-tiled-gallery .tiled-gallery__item>img{animation:tiled-gallery-img-placeholder 1.6s ease-in-out infinite}.wp-block-jetpack-tiled-gallery .tiled-gallery__item.is-selected{outline:4px solid #0085ba;filter:none}.wp-block-jetpack-tiled-gallery .tiled-gallery__item.is-selected:after,.wp-block-jetpack-tiled-gallery .tiled-gallery__item.is-selected:before{content:none}.wp-block-jetpack-tiled-gallery .tiled-gallery__item.is-transient img{opacity:.3}.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item{margin-top:4px;width:100%}.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-button.tiled-gallery__add-item-button,.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-form-file-upload{width:100%;height:100%}.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-button.tiled-gallery__add-item-button{display:flex;flex-direction:column;justify-content:center;box-shadow:none;border:none;border-radius:0;min-height:100px}.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-button.tiled-gallery__add-item-button .dashicon{margin-top:10px}.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-button.tiled-gallery__add-item-button:focus,.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-button.tiled-gallery__add-item-button:hover{border:1px solid #555d66}.wp-block-jetpack-tiled-gallery .tiled-gallery__item__inline-menu{background-color:#0085ba;display:inline-flex;padding:0 2px 2px 0;position:absolute;left:0;top:0}.wp-block-jetpack-tiled-gallery .tiled-gallery__item__inline-menu .components-button,.wp-block-jetpack-tiled-gallery .tiled-gallery__item__inline-menu .components-button:focus,.wp-block-jetpack-tiled-gallery .tiled-gallery__item__inline-menu .components-button:hover{color:#fff}.wp-block-jetpack-tiled-gallery .tiled-gallery__item__remove{padding:0}.wp-block-jetpack-tiled-gallery .tiled-gallery__item .components-spinner{position:absolute;top:50%;right:50%;transform:translate(50%,-50%)}.editor-block-preview__content .wp-block-jetpack-tiled-gallery .editor-media-placeholder{display:none}.wp-block-jetpack-tiled-gallery .tiled-gallery__media-placeholder-icon{height:20px;margin-left:1ch;width:20px}.tiled-gallery__filter-picker-menu{padding:7px}.tiled-gallery__filter-picker-menu .components-menu-item__button+.components-menu-item__button{margin-top:2px}.tiled-gallery__filter-picker-menu .components-menu-item__button.is-active{color:#191e23;box-shadow:0 0 0 2px #555d66!important}.wp-block-jetpack-wordads{background:#fff}[data-type="jetpack/wordads"][data-align=center] .jetpack-wordads__ad{margin:0 auto}.jetpack-wordads__ad{display:flex;overflow:hidden;flex-direction:column;max-width:100%}.jetpack-wordads__ad .components-placeholder{flex-grow:2}.jetpack-wordads__ad .components-toggle-control__label{line-height:1.4em}.jetpack-wordads__ad .components-base-control__field{padding:7px}.jetpack-wordads-leaderboard .components-placeholder{min-height:90px}.jetpack-wordads-mobile_leaderboard .components-placeholder{min-height:72px}.wp-block-jetpack-wordads__format-picker{padding:7px}.wp-block-jetpack-wordads__format-picker .components-menu-item__button+.components-menu-item__button{margin-top:2px}.wp-block-jetpack-wordads__format-picker .components-menu-item__button.is-active{color:#191e23;box-shadow:0 0 0 2px #555d66!important}.jetpack-seo-message-box{background-color:#edeff0;border-radius:4px}.jetpack-seo-message-box textarea{width:100%}.jetpack-seo-character-count{padding-bottom:5px;padding-right:5px}.wp-block-jetpack-vr{position:relative;max-width:525px;margin-right:auto;margin-left:auto;overflow:hidden}.wp-block-jetpack-vr .components-placeholder__fieldset{justify-content:space-around} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/editor.css b/plugins/jetpack/_inc/blocks/editor.css
deleted file mode 100644
index 549f8771..00000000
--- a/plugins/jetpack/_inc/blocks/editor.css
+++ /dev/null
@@ -1 +0,0 @@
-.wp-block-jetpack-business-hours{overflow:hidden}.wp-block-jetpack-business-hours .business-hours__row{display:flex}.wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add,.wp-block-jetpack-business-hours .business-hours__row.business-hours-row__closed{margin-bottom:20px}.wp-block-jetpack-business-hours .business-hours__row .business-hours__day{width:44%;display:flex;align-items:baseline}.wp-block-jetpack-business-hours .business-hours__row .business-hours__day .business-hours__day-name{width:60%;font-weight:700;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.wp-block-jetpack-business-hours .business-hours__row .business-hours__day .components-form-toggle{margin-right:4px}.wp-block-jetpack-business-hours .business-hours__row .business-hours__hours{width:44%;margin:0;display:flex;align-items:center;flex-wrap:wrap}.wp-block-jetpack-business-hours .business-hours__row .business-hours__hours .components-base-control{display:inline-block;margin-bottom:0;width:48%}.wp-block-jetpack-business-hours .business-hours__row .business-hours__hours .components-base-control.business-hours__open{margin-right:4%}.wp-block-jetpack-business-hours .business-hours__row .business-hours__hours .components-base-control .components-base-control__label{margin-bottom:0}.wp-block-jetpack-business-hours .business-hours__remove{align-self:flex-end;margin-bottom:8px;text-align:center;width:10%}.wp-block-jetpack-business-hours .business-hours-row__add button:hover{box-shadow:none!important}.wp-block-jetpack-business-hours .business-hours__remove button{display:block;margin:0 auto}.wp-block-jetpack-business-hours .business-hours-row__add .components-button.is-default:active,.wp-block-jetpack-business-hours .business-hours-row__add .components-button.is-default:focus,.wp-block-jetpack-business-hours .business-hours-row__add .components-button.is-default:hover,.wp-block-jetpack-business-hours .business-hours__remove .components-button.is-default:active,.wp-block-jetpack-business-hours .business-hours__remove .components-button.is-default:focus,.wp-block-jetpack-business-hours .business-hours__remove .components-button.is-default:hover{background:none;box-shadow:none}@media (max-width:1080px){.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row{flex-wrap:wrap}.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__day,.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__remove{display:none}.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row .business-hours__day{width:100%}.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row .business-hours__hours{width:78%}.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row .business-hours__remove{width:18%}}@media (max-width:600px){.wp-block-jetpack-business-hours .business-hours__row{flex-wrap:wrap}.wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__day,.wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__remove{display:none}.wp-block-jetpack-business-hours .business-hours__row .business-hours__day{width:100%}.wp-block-jetpack-business-hours .business-hours__row .business-hours__hours{width:78%}.wp-block-jetpack-business-hours .business-hours__row .business-hours__remove{width:18%}}.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row{flex-wrap:wrap}.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__day,.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__remove{display:none}.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row .business-hours__day{width:100%}.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row .business-hours__hours{width:78%}.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row .business-hours__remove{width:18%}.jetpack-contact-form{padding:10px 18px}.jetpack-contact-form.has-intro{padding:0}.jetpack-contact-form .components-placeholder{padding:24px}.jetpack-contact-form .components-placeholder input[type=text]{width:100%;outline-width:0;outline-style:none;line-height:16px}.jetpack-contact-form .components-placeholder .components-placeholder__label svg{margin-right:1ch}.jetpack-contact-form .components-placeholder .components-placeholder__fieldset,.jetpack-contact-form .components-placeholder .help-message{text-align:left}.jetpack-contact-form .components-placeholder .help-message{width:100%;margin:-18px 0 28px}.jetpack-contact-form .components-placeholder .components-base-control{margin-bottom:16px;width:100%}.jetpack-contact-form__intro-message{margin:0 0 16px}.jetpack-contact-form__create{width:100%}.jetpack-field-label{display:flex;flex-direction:row}.jetpack-field-label .components-base-control{margin-top:-1px;margin-bottom:-3px}.jetpack-field-label .components-base-control .components-form-toggle{margin:2px 8px 0 0}.jetpack-field-label .required{color:#dc3232}.jetpack-field-label .components-toggle-control .components-base-control__field{margin-bottom:0}.jetpack-field-label__input{flex-grow:1;min-height:unset;padding:0}.jetpack-field-label__input.jetpack-field-label__input.jetpack-field-label__input{border-color:#fff;border-radius:0;font-weight:600;margin:0 0 2px;padding:0}.jetpack-field-label__input.jetpack-field-label__input.jetpack-field-label__input:focus{border-color:#fff;box-shadow:none}input.components-text-control__input{line-height:16px}.jetpack-field .components-text-control__input.components-text-control__input{width:100%}.jetpack-field .components-text-control__input,.jetpack-field .components-textarea-control__input{color:#72777c;padding:10px 8px}.jetpack-field-checkbox__checkbox.jetpack-field-checkbox__checkbox.jetpack-field-checkbox__checkbox{float:left}.jetpack-field-multiple__list.jetpack-field-multiple__list{list-style-type:none;margin:0}.jetpack-field-multiple__list.jetpack-field-multiple__list:empty{display:none}[data-type="jetpack/field-select"] .jetpack-field-multiple__list.jetpack-field-multiple__list{border:1px solid #8d96a0;border-radius:4px;padding:4px}.jetpack-option{display:flex;align-items:center;margin:0}.jetpack-option__type.jetpack-option__type{margin-top:0}.jetpack-option__input.jetpack-option__input.jetpack-option__input{border-color:#fff;border-radius:0;flex-grow:1}.jetpack-option__input.jetpack-option__input.jetpack-option__input:hover{border-color:#357cb5}.jetpack-option__input.jetpack-option__input.jetpack-option__input:focus{border-color:#e3e5e8;box-shadow:none}.jetpack-option__remove.jetpack-option__remove{padding:6px;vertical-align:bottom}.jetpack-field-multiple__add-option{margin-left:-6px;padding:4px 8px 4px 4px}.jetpack-field-multiple__add-option svg{margin-right:12px}.jetpack-field-checkbox .components-base-control__label{display:flex;align-items:center}.jetpack-field-checkbox .components-base-control__label .jetpack-field-label{flex-grow:1}.jetpack-field-checkbox .components-base-control__label .jetpack-field-label__input{font-size:13px;font-weight:400;padding-left:10px}@media (min-width:481px){.jetpack-contact-form-shortcode-preview{padding:24px}}.jetpack-contact-form-shortcode-preview{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;line-height:1.4em;display:block;position:relative;margin:0 auto;padding:16px;box-sizing:border-box;background:#fff;box-shadow:0 0 0 1px rgba(200,215,225,.5),0 1px 2px #e9eff3}.jetpack-contact-form-shortcode-preview:after{content:".";display:block;height:0;clear:both;visibility:hidden}.jetpack-contact-form-shortcode-preview>div{margin-top:24px}.jetpack-contact-form-shortcode-preview>div:first-child{margin-top:0}.jetpack-contact-form-shortcode-preview label{display:block;font-size:14px;font-weight:600;margin-bottom:5px}.jetpack-contact-form-shortcode-preview input[type=email],.jetpack-contact-form-shortcode-preview input[type=tel],.jetpack-contact-form-shortcode-preview input[type=text],.jetpack-contact-form-shortcode-preview input[type=url]{border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;margin:0;padding:7px 14px;width:100%;color:#2e4453;font-size:16px;line-height:1.5;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-shadow:none}.jetpack-contact-form-shortcode-preview input[type=email]:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=text]:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=url]:-ms-input-placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview input[type=email]::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=text]::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=url]::-ms-input-placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview input[type=email]::placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]::placeholder,.jetpack-contact-form-shortcode-preview input[type=text]::placeholder,.jetpack-contact-form-shortcode-preview input[type=url]::placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview input[type=email]:hover,.jetpack-contact-form-shortcode-preview input[type=tel]:hover,.jetpack-contact-form-shortcode-preview input[type=text]:hover,.jetpack-contact-form-shortcode-preview input[type=url]:hover{border-color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=email]:focus,.jetpack-contact-form-shortcode-preview input[type=tel]:focus,.jetpack-contact-form-shortcode-preview input[type=text]:focus,.jetpack-contact-form-shortcode-preview input[type=url]:focus{border-color:#0087be;outline:none;box-shadow:0 0 0 2px #78dcfa}.jetpack-contact-form-shortcode-preview input[type=email]:focus::-ms-clear,.jetpack-contact-form-shortcode-preview input[type=tel]:focus::-ms-clear,.jetpack-contact-form-shortcode-preview input[type=text]:focus::-ms-clear,.jetpack-contact-form-shortcode-preview input[type=url]:focus::-ms-clear{display:none}.jetpack-contact-form-shortcode-preview input[type=email]:disabled,.jetpack-contact-form-shortcode-preview input[type=tel]:disabled,.jetpack-contact-form-shortcode-preview input[type=text]:disabled,.jetpack-contact-form-shortcode-preview input[type=url]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;-webkit-text-fill-color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=email]:disabled:hover,.jetpack-contact-form-shortcode-preview input[type=tel]:disabled:hover,.jetpack-contact-form-shortcode-preview input[type=text]:disabled:hover,.jetpack-contact-form-shortcode-preview input[type=url]:disabled:hover{cursor:default}.jetpack-contact-form-shortcode-preview input[type=email]:disabled:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]:disabled:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=text]:disabled:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=url]:disabled:-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=email]:disabled::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]:disabled::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=text]:disabled::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=url]:disabled::-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=email]:disabled::placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]:disabled::placeholder,.jetpack-contact-form-shortcode-preview input[type=text]:disabled::placeholder,.jetpack-contact-form-shortcode-preview input[type=url]:disabled::placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview textarea{border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;margin:0;padding:7px 14px;height:92px;width:100%;color:#2e4453;font-size:16px;line-height:1.5;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-shadow:none}.jetpack-contact-form-shortcode-preview textarea:-ms-input-placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview textarea::-ms-input-placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview textarea::placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview textarea:hover{border-color:#a8bece}.jetpack-contact-form-shortcode-preview textarea:focus{border-color:#0087be;outline:none;box-shadow:0 0 0 2px #78dcfa}.jetpack-contact-form-shortcode-preview textarea:focus::-ms-clear{display:none}.jetpack-contact-form-shortcode-preview textarea:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;-webkit-text-fill-color:#a8bece}.jetpack-contact-form-shortcode-preview textarea:disabled:hover{cursor:default}.jetpack-contact-form-shortcode-preview textarea:disabled:-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview textarea:disabled::-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview textarea:disabled::placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=checkbox]{-webkit-appearance:none;display:inline-block;box-sizing:border-box;margin:2px 0 0;width:16px;height:16px;float:left;outline:0;padding:0;box-shadow:none;background-color:#fff;border:1px solid #c8d7e1;color:#2e4453;font-size:16px;line-height:0;text-align:center;vertical-align:middle;-moz-appearance:none;appearance:none;transition:all .15s ease-in-out;clear:none;cursor:pointer}.jetpack-contact-form-shortcode-preview input[type=checkbox]:checked:before{content:"\f147";font-family:Dashicons;margin:-3px 0 0 -4px;float:left;display:inline-block;vertical-align:middle;width:16px;font-size:20px;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;color:#00aadc}.jetpack-contact-form-shortcode-preview input[type=checkbox]:disabled:checked:before{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=checkbox]:hover{border-color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=checkbox]:focus{border-color:#0087be;outline:none;box-shadow:0 0 0 2px #78dcfa}.jetpack-contact-form-shortcode-preview input[type=checkbox]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;opacity:1}.jetpack-contact-form-shortcode-preview input[type=checkbox]:disabled:hover{cursor:default}.jetpack-contact-form-shortcode-preview input[type=checkbox]+span{display:block;font-weight:400;margin-left:24px}.jetpack-contact-form-shortcode-preview input[type=radio]{color:#2e4453;font-size:16px;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-sizing:border-box;-webkit-appearance:none;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:2px 4px 0 0;float:left;outline:0;padding:0;text-align:center;vertical-align:middle;width:16px;min-width:16px;-moz-appearance:none;appearance:none;border-radius:50%;line-height:10px}.jetpack-contact-form-shortcode-preview input[type=radio]:hover{border-color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=radio]:focus{border-color:#0087be;outline:none;box-shadow:0 0 0 2px #78dcfa}.jetpack-contact-form-shortcode-preview input[type=radio]:focus::-ms-clear{display:none}.jetpack-contact-form-shortcode-preview input[type=radio]:checked:before{float:left;display:inline-block;content:"\2022";margin:3px;width:8px;height:8px;text-indent:-9999px;background:#00aadc;vertical-align:middle;border-radius:50%;animation:grow .2s ease-in-out}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;opacity:1;-webkit-text-fill-color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled:hover{cursor:default}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled:-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled::-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled::placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled:checked:before{background:#e9eff3}.jetpack-contact-form-shortcode-preview input[type=radio]+span{display:block;font-weight:400;margin-left:24px}@keyframes grow{0%{transform:scale(.3)}60%{transform:scale(1.15)}to{transform:scale(1)}}.jetpack-contact-form-shortcode-preview select{background:#fff url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE1LjUgNkwxNyA3LjVsLTYuNzUgNi43NUwzLjUgNy41IDUgNmw1LjI1IDUuMjVMMTUuNSA2eiIgZmlsbD0iI0M4RDdFMSIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) no-repeat right 10px center;border-radius:4px;border:solid #c8d7e1;border-width:1px 1px 2px;color:#2e4453;cursor:pointer;display:inline-block;margin:0;outline:0;overflow:hidden;font-size:14px;line-height:21px;font-weight:600;text-overflow:ellipsis;text-decoration:none;vertical-align:top;white-space:nowrap;box-sizing:border-box;padding:2px 32px 2px 14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;font-family:sans-serif}.jetpack-contact-form-shortcode-preview select:hover{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE1LjUgNkwxNyA3LjVsLTYuNzUgNi43NUwzLjUgNy41IDUgNmw1LjI1IDUuMjVMMTUuNSA2eiIgZmlsbD0iI2E4YmVjZSIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+)}.jetpack-contact-form-shortcode-preview select:focus{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE1LjUgNkwxNyA3LjVsLTYuNzUgNi43NUwzLjUgNy41IDUgNmw1LjI1IDUuMjVMMTUuNSA2eiIgZmlsbD0iIzJlNDQ1MyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);border-color:#00aadc;box-shadow:0 0 0 2px #78dcfa;outline:0;-moz-outline:none;-moz-user-focus:ignore}.jetpack-contact-form-shortcode-preview select:disabled,.jetpack-contact-form-shortcode-preview select:hover:disabled{background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE1LjUgNkwxNyA3LjVsLTYuNzUgNi43NUwzLjUgNy41IDUgNmw1LjI1IDUuMjVMMTUuNSA2eiIgZmlsbD0iI2U5ZWZmMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) no-repeat right 10px center}.jetpack-contact-form-shortcode-preview select.is-compact{min-width:0;padding:0 20px 2px 6px;margin:0 4px;background-position:right 5px center;background-size:12px 12px}.jetpack-contact-form-shortcode-preview label+select,.jetpack-contact-form-shortcode-preview label select{display:block;min-width:200px}.jetpack-contact-form-shortcode-preview label+select.is-compact,.jetpack-contact-form-shortcode-preview label select.is-compact{display:inline-block;min-width:0}.jetpack-contact-form-shortcode-preview select::-ms-expand{display:none}.jetpack-contact-form-shortcode-preview select::-ms-value{background:none;color:#2e4453}.jetpack-contact-form-shortcode-preview select:-moz-focusring{color:transparent;text-shadow:0 0 0 #2e4453}.jetpack-contact-form-shortcode-preview input[type=submit]{vertical-align:baseline;background:#fff;border:solid #c8d7e1;border-width:1px 1px 2px;color:#2e4453;cursor:pointer;display:inline-block;margin:24px 0 0;outline:0;overflow:hidden;font-weight:500;text-overflow:ellipsis;text-decoration:none;vertical-align:top;box-sizing:border-box;font-size:14px;line-height:21px;border-radius:4px;padding:7px 14px 9px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.jetpack-contact-form-shortcode-preview input[type=submit]:hover{border-color:#a8bece;color:#2e4453}.jetpack-contact-form-shortcode-preview input[type=submit]:active{border-width:2px 1px 1px}.jetpack-contact-form-shortcode-preview input[type=submit]:visited{color:#2e4453}.jetpack-contact-form-shortcode-preview input[type=submit]:focus{border-color:#00aadc;box-shadow:0 0 0 2px #78dcfa}.help-message{display:flex;font-size:13px;line-height:1.4em;margin-bottom:1em;margin-top:-.5em}.help-message svg{margin-right:5px;min-width:24px}.help-message>span{margin-top:2px}.help-message.help-message-is-error{color:#eb0001}.help-message.help-message-is-error svg{fill:#eb0001}.jetpack-contact-info-block{padding:10px 18px}.jetpack-contact-info-block .editor-plain-text.editor-plain-text:focus{box-shadow:none}.jetpack-contact-info-block .editor-plain-text{flex-grow:1;min-height:unset;padding:0;box-shadow:none;font-family:inherit;font-size:inherit;color:inherit;line-height:inherit;border:none}.wp-block-jetpack-contact-info{margin-bottom:1.5em}.wp-block-jetpack-gif{clear:both;margin:0 0 20px}.wp-block-jetpack-gif figure{margin:0;position:relative;width:100%}.wp-block-jetpack-gif iframe{border:0;left:0;height:100%;position:absolute;top:0;width:100%}.wp-block-jetpack-gif.aligncenter{text-align:center}.wp-block-jetpack-gif.alignleft,.wp-block-jetpack-gif.alignright{min-width:300px}.wp-block-jetpack-gif .wp-block-jetpack-gif-caption{margin-top:.5em;margin-bottom:1em;color:#555d66;text-align:center}.wp-block-jetpack-gif .wp-block-jetpack-gif-wrapper{height:0;margin:0;padding:calc(56.2% + 12px) 0 0;position:relative;width:100%}.wp-block-jetpack-gif figure{transition:padding-top 125ms ease-in-out}.wp-block-jetpack-gif .components-base-control__field{text-align:center}.wp-block-jetpack-gif .wp-block-jetpack-gif_cover{background:none;border:none;height:100%;left:0;margin:0;padding:0;position:absolute;top:0;width:100%;z-index:1}.wp-block-jetpack-gif .wp-block-jetpack-gif_cover:focus{outline:none}.wp-block-jetpack-gif .wp-block-jetpack-gif_input-container{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center;margin:0 auto;max-width:400px;width:100%;z-index:1}.wp-block-jetpack-gif .wp-block-jetpack-gif_input-container .components-base-control__label{height:0;margin:0;text-indent:-9999px}.wp-block-jetpack-gif .wp-block-jetpack-gif_input{flex-grow:1;margin-right:.5em}.wp-block-jetpack-gif .wp-block-jetpack-gif_thumbnails-container{display:flex;margin:-2px 0 2px -2px;overflow-x:auto;width:calc(100% + 4px)}.wp-block-jetpack-gif .wp-block-jetpack-gif_thumbnails-container::-webkit-scrollbar{display:none}.wp-block-jetpack-gif .wp-block-jetpack-gif_thumbnail-container{align-items:center;background-size:cover;background-repeat:no-repeat;background-position:50% 50%;border:none;border-radius:3px;cursor:pointer;display:flex;justify-content:center;margin:2px;padding:0 0 calc(10% - 4px);width:calc(10% - 4px)}.wp-block-jetpack-gif .wp-block-jetpack-gif_thumbnail-container:hover{box-shadow:0 0 0 1px #555d66}.wp-block-jetpack-gif .wp-block-jetpack-gif_thumbnail-container:focus{box-shadow:0 0 0 2px #00a0d2;outline:0}.components-panel__body-gif-branding svg{display:block;margin:0 auto;max-width:200px}.components-panel__body-gif-branding svg path{fill:#ccc}.wp-block-jetpack-mailchimp.is-processing form{display:none}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification{display:none;margin-bottom:1.5em;padding:.75em}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.is-visible{display:block}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.wp-block-jetpack-mailchimp_error{background-color:#eb0001;color:#fff}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.wp-block-jetpack-mailchimp_processing{background-color:rgba(0,0,0,.025)}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.wp-block-jetpack-mailchimp_success{background-color:#008a00;color:#fff}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification{display:block}.wp-block-jetpack-mailchimp .editor-rich-text__inline-toolbar{pointer-events:none}.wp-block-jetpack-mailchimp .editor-rich-text__inline-toolbar .components-toolbar{pointer-events:all}.wp-block-jetpack-mailchimp.wp-block-jetpack-mailchimp_notication-audition>:not(.wp-block-jetpack-mailchimp_notification){display:none}.wp-block-jetpack-mailchimp .jetpack-submit-button,.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_text-input{margin-bottom:1.5rem}.wp-block-jetpack-mailchimp .wp-block-button .wp-block-button__link{margin-top:0}.component__add-point{position:absolute;left:50%;top:50%;width:32px;height:38px;margin-top:-19px;margin-left:-16px;background-image:url(images/oval-3cc7669d571aef4e12f34b349e42d390.svg);background-repeat:no-repeat;text-indent:-9999px}.component__add-point,.component__add-point.components-button:not(:disabled):not([aria-disabled=true]):focus,.component__add-point:active,.component__add-point:focus,.component__add-point__popover .components-button:not(:disabled):not([aria-disabled=true]):focus{box-shadow:none;background-color:transparent}.component__add-point__popover .components-popover__content{padding:.1rem}.component__add-point__popover .components-location-search{margin:.5rem}.component__add-point__close{margin:0;padding:0;border:none;box-shadow:none;float:right}.component__add-point__close path{color:#aaa}.edit-post-settings-sidebar__panel-block .component__locations__panel{margin-bottom:1em}.edit-post-settings-sidebar__panel-block .component__locations__panel:empty{display:none}.edit-post-settings-sidebar__panel-block .component__locations__panel .components-panel__body:first-child{border-top:none}.edit-post-settings-sidebar__panel-block .component__locations__panel .components-panel__body,.edit-post-settings-sidebar__panel-block .component__locations__panel .components-panel__body:first-child,.edit-post-settings-sidebar__panel-block .component__locations__panel .components-panel__body:last-child{max-width:100%;margin:0}.edit-post-settings-sidebar__panel-block .component__locations__panel .components-panel__body button{padding-right:40px}.component__locations__delete-btn{padding:0}.component__locations__delete-btn svg{margin-right:.4em}.wp-block-jetpack-map-marker{width:32px;height:38px;opacity:.9}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button{border:1px solid #d3d3d3;border-radius:100%;width:56px;height:56px;margin:2px;text-indent:-9999px;background-color:#d3d3d3;background-position:50%;background-repeat:no-repeat;background-size:contain;transform:scale(1);transition:transform .2s ease}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button:hover{transform:scale(1.1)}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button.is-selected{border-color:#000}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button.is-theme-default{background-image:url(images/map-theme_default-2ceb449b599dbcbe2a90fead5a5f3824.jpg)}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button.is-theme-black_and_white{background-image:url(images/map-theme_black_and_white-1ead5946ca104d83676d6e3410e1d733.jpg)}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button.is-theme-satellite{background-image:url(images/map-theme_satellite-c74dc129bda9502fb0fb362bb627577e.jpg)}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button.is-theme-terrain{background-image:url(images/map-theme_terrain-2b6e6c1c8d09cbdc58a4c0653be1a6e3.jpg)}.wp-block-jetpack-map .wp-block-jetpack-map__gm-container{width:100%;overflow:hidden;background:#d3d3d3;min-height:400px;text-align:left}.wp-block-jetpack-map .mapboxgl-popup{max-width:300px}.wp-block-jetpack-map .mapboxgl-popup h3{font-size:1.3125em;font-weight:400;margin-bottom:.5rem}.wp-block-jetpack-map .mapboxgl-popup p{margin-bottom:0}.wp-block-jetpack-map__delete-btn{padding:0}.wp-block-jetpack-map__delete-btn svg{margin-right:.4em}.wp-block-jetpack-map-components-text-control-api-key{margin-right:4px}.wp-block-jetpack-map-components-text-control-api-key.components-base-control .components-base-control__field{margin-bottom:0}.wp-block-jetpack-map-components-text-control-api-key-submit.is-large{height:31px}.wp-block-jetpack-map-components-text-control-api-key-submit:disabled{opacity:1}.wp-block[data-type="jetpack/map"] .components-placeholder__label svg{fill:currentColor;margin-right:1ch}.wp-block-jetpack-markdown__placeholder{opacity:.62;pointer-events:none}.editor-block-list__block .wp-block-jetpack-markdown__preview{min-height:1.8em;line-height:1.8}.editor-block-list__block .wp-block-jetpack-markdown__preview>*{margin-top:32px;margin-bottom:32px}.editor-block-list__block .wp-block-jetpack-markdown__preview h1,.editor-block-list__block .wp-block-jetpack-markdown__preview h2,.editor-block-list__block .wp-block-jetpack-markdown__preview h3{line-height:1.4}.editor-block-list__block .wp-block-jetpack-markdown__preview h1{font-size:2.44em}.editor-block-list__block .wp-block-jetpack-markdown__preview h2{font-size:1.95em}.editor-block-list__block .wp-block-jetpack-markdown__preview h3{font-size:1.56em}.editor-block-list__block .wp-block-jetpack-markdown__preview h4{font-size:1.25em;line-height:1.5}.editor-block-list__block .wp-block-jetpack-markdown__preview h5{font-size:1em}.editor-block-list__block .wp-block-jetpack-markdown__preview h6{font-size:.8em}.editor-block-list__block .wp-block-jetpack-markdown__preview hr{border:none;border-bottom:2px solid #8f98a1;margin:2em auto;max-width:100px}.editor-block-list__block .wp-block-jetpack-markdown__preview p{line-height:1.8}.editor-block-list__block .wp-block-jetpack-markdown__preview blockquote{border-left:4px solid #000;margin-left:0;margin-right:0;padding-left:1em}.editor-block-list__block .wp-block-jetpack-markdown__preview blockquote p{line-height:1.5;margin:1em 0}.editor-block-list__block .wp-block-jetpack-markdown__preview ol,.editor-block-list__block .wp-block-jetpack-markdown__preview ul{margin-left:1.3em;padding-left:1.3em}.editor-block-list__block .wp-block-jetpack-markdown__preview li p{margin:0}.editor-block-list__block .wp-block-jetpack-markdown__preview code,.editor-block-list__block .wp-block-jetpack-markdown__preview pre{color:#23282d;font-family:Menlo,Consolas,monaco,monospace}.editor-block-list__block .wp-block-jetpack-markdown__preview code{background:#f3f4f5;border-radius:2px;font-size:inherit;padding:2px}.editor-block-list__block .wp-block-jetpack-markdown__preview pre{border-radius:4px;border:1px solid #e2e4e7;font-size:14px;padding:.8em 1em}.editor-block-list__block .wp-block-jetpack-markdown__preview pre code{background:transparent;padding:0}.editor-block-list__block .wp-block-jetpack-markdown__preview table{overflow-x:auto;border-collapse:collapse;width:100%}.editor-block-list__block .wp-block-jetpack-markdown__preview tbody,.editor-block-list__block .wp-block-jetpack-markdown__preview tfoot,.editor-block-list__block .wp-block-jetpack-markdown__preview thead{width:100%;min-width:240px}.editor-block-list__block .wp-block-jetpack-markdown__preview td,.editor-block-list__block .wp-block-jetpack-markdown__preview th{padding:.5em;border:1px solid}.wp-block-jetpack-markdown .wp-block-jetpack-markdown__editor{font-family:Menlo,Consolas,monaco,monospace;font-size:14px}.wp-block-jetpack-markdown .wp-block-jetpack-markdown__editor:focus{border-color:transparent;box-shadow:0 0 0 transparent}.jetpack-publicize-message-box{background-color:#edeff0;border-radius:4px}.jetpack-publicize-message-box textarea{width:100%}.jetpack-publicize-character-count{padding-bottom:5px;padding-left:5px}.jetpack-publicize__connections-list{list-style-type:none;margin:13px 0}.publicize-jetpack-connection-container{display:flex}.jetpack-publicize-gutenberg-social-icon{fill:#555d66;margin-right:5px}.jetpack-publicize-gutenberg-social-icon.is-facebook{fill:#39579a}.jetpack-publicize-gutenberg-social-icon.is-twitter{fill:#55acee}.jetpack-publicize-gutenberg-social-icon.is-linkedin{fill:#0976b4}.jetpack-publicize-gutenberg-social-icon.is-tumblr{fill:#35465c}.jetpack-publicize-gutenberg-social-icon.is-google-plus{fill:#df4a32}.jetpack-publicize-connection-label{flex:1;margin-right:5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.jetpack-publicize-connection-label .jetpack-publicize-connection-label-copy,.jetpack-publicize-connection-label .jetpack-publicize-gutenberg-social-icon{display:inline-block;vertical-align:middle}.jetpack-publicize-connection-toggle{margin-top:3px}.jetpack-publicize-notice.components-notice{margin-left:0;margin-right:0;margin-bottom:13px}.jetpack-publicize-notice .components-button+.components-button{margin-top:5px}.jetpack-publicize-message-note{display:inline-block;margin-bottom:4px;margin-top:13px}.jetpack-publicize-add-connection-wrapper{margin:15px 0}.jetpack-publicize-add-connection-container{display:flex}.jetpack-publicize-add-connection-container a{cursor:pointer}.jetpack-publicize-add-connection-container span{vertical-align:middle}.jetpack-publicize__connections-list .components-notice{margin:5px 0 10px}.edit-post-more-menu__content .components-icon-button .jetpack-logo,.edit-post-pinned-plugins .components-icon-button .jetpack-logo{width:20px;height:20px}.edit-post-more-menu__content .components-icon-button .jetpack-logo{margin-right:4px}.edit-post-pinned-plugins .components-icon-button.is-toggled .jetpack-logo,.edit-post-pinned-plugins .components-icon-button.is-toggled .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button.is-toggled .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button.is-toggled:hover .jetpack-logo,.edit-post-pinned-plugins .components-icon-button.is-toggled:hover .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button.is-toggled:hover .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button:hover .jetpack-logo,.edit-post-pinned-plugins .components-icon-button:hover .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button:hover .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button:not(.is-toggled) .jetpack-logo,.edit-post-pinned-plugins .components-icon-button:not(.is-toggled) .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button:not(.is-toggled) .jetpack-logo__icon-triangle{stroke:none!important}.edit-post-pinned-plugins .components-icon-button.is-toggled .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button.is-toggled:hover .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button:hover .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button:not(.is-toggled) .jetpack-logo__icon-circle{fill:#00be28!important}.edit-post-pinned-plugins .components-icon-button.is-toggled .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button.is-toggled:hover .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button:hover .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button:not(.is-toggled) .jetpack-logo__icon-triangle{fill:#fff!important}.jp-related-posts-i2__row{display:flex;margin-top:1.5rem}.jp-related-posts-i2__row:first-child{margin-top:0}.jp-related-posts-i2__row[data-post-count="3"] .jp-related-posts-i2__post{max-width:calc(33% - 20px)}.jp-related-posts-i2__row[data-post-count="1"] .jp-related-posts-i2__post,.jp-related-posts-i2__row[data-post-count="2"] .jp-related-posts-i2__post{max-width:calc(50% - 20px)}.jp-related-posts-i2__post{flex-grow:1;flex-basis:0;margin:0 10px;display:flex;flex-direction:column}.jp-related-posts-i2__post-context,.jp-related-posts-i2__post-date,.jp-related-posts-i2__post-heading,.jp-related-posts-i2__post-img-link{flex-direction:row}.jp-related-posts-i2__post-image-placeholder,.jp-related-posts-i2__post-img-link{order:-1}.jp-related-posts-i2__post-heading{margin:.5rem 0;font-size:1rem;line-height:1.2em}.jp-related-posts-i2__post-link{display:block;width:100%;line-height:1.2em;margin:.2em 0}.jp-related-posts-i2__post-img{width:100%}.jp-related-posts-i2__post-image-placeholder{display:block;position:relative;margin:0 auto;max-width:350px}.jp-related-posts-i2__post-image-placeholder-icon{position:absolute;top:calc(50% - 12px);left:calc(50% - 12px)}.jp-relatedposts-i2[data-layout=list] .jp-related-posts-i2__row{margin-top:0;display:block}.jp-relatedposts-i2[data-layout=list] .jp-related-posts-i2__post{max-width:none;margin:1rem 0 0}.jp-relatedposts-i2[data-layout=list] .jp-related-posts-i2__post-image-placeholder{max-width:350px;margin:0}.jp-relatedposts-i2[data-layout=list] .jp-related-posts-i2__post-img-link{margin-top:1rem}.wp-block-jetpack-repeat-visitor .components-notice{margin:1em 0 0}.wp-block-jetpack-repeat-visitor .components-radio-control__option{text-align:left}.wp-block-jetpack-repeat-visitor .components-notice__content{margin:.5em 0;font-size:.8em}.wp-block-jetpack-repeat-visitor .components-notice__content .components-base-control{display:inline-block;max-width:8em;vertical-align:middle}.wp-block-jetpack-repeat-visitor .components-notice__content .components-base-control .components-base-control__field{margin-bottom:0}.wp-block-jetpack-repeat-visitor-placeholder{min-height:inherit}.wp-block-jetpack-repeat-visitor-placeholder .components-placeholder__label svg{margin-right:.5ch}.wp-block-jetpack-repeat-visitor-placeholder .components-placeholder__fieldset{flex-wrap:nowrap}.wp-block-jetpack-repeat-visitor-placeholder .components-placeholder__fieldset .components-base-control{flex-basis:100%}.wp-block-jetpack-repeat-visitor-placeholder .components-base-control__help{color:#eb0001;font-size:13px}.wp-block-jetpack-repeat-visitor--is-unselected .wp-block-jetpack-repeat-visitor-placeholder{display:none}.wp-block-jetpack-repeat-visitor-threshold{margin-right:20px}.wp-block-jetpack-repeat-visitor-threshold .components-text-control__input{width:5em;text-align:center}.jetpack-clipboard-input{display:flex}.jetpack-clipboard-input .components-clipboard-button{margin:2px 0 0 6px}.wp-block-jetpack-simple-payments .simple-payments__help-message{display:flex;font-size:13px;line-height:1.4em;margin-bottom:1em;margin-top:-.5em}.wp-block-jetpack-simple-payments .simple-payments__help-message svg{margin-right:5px;min-width:24px}.wp-block-jetpack-simple-payments .simple-payments__help-message>span{margin-top:2px}.wp-block-jetpack-simple-payments .simple-payments__help-message.simple-payments__help-message-is-error{color:#eb0001}.wp-block-jetpack-simple-payments .simple-payments__help-message.simple-payments__help-message-is-error svg{fill:#eb0001}.simple-payments__loading{animation:simple-payments-loading 1.6s ease-in-out infinite}@keyframes simple-payments-loading{0%{opacity:.5}50%{opacity:.7}to{opacity:.5}}.jetpack-simple-payments-wrapper{margin-bottom:1.5em}body .jetpack-simple-payments-wrapper .jetpack-simple-payments-details p{margin:0 0 1.5em;padding:0}.jetpack-simple-payments-product{display:flex;flex-direction:column}.jetpack-simple-payments-product-image{flex:0 0 30%;margin-bottom:1.5em}.jetpack-simple-payments-image{box-sizing:border-box;min-width:70px;padding-top:100%;position:relative}.jetpack-simple-payments-image img{border:0;border-radius:0;height:auto;left:50%;margin:0;max-height:100%;max-width:100%;padding:0;position:absolute;top:50%;transform:translate(-50%,-50%);width:auto}.jetpack-simple-payments-price p,.jetpack-simple-payments-title p{font-weight:700}.jetpack-simple-payments-purchase-box{align-items:flex-start;display:flex}.jetpack-simple-payments-items{flex:0 0 auto;margin-right:10px}input[type=number].jetpack-simple-payments-items-number{background:#fff;font-size:16px;line-height:1;max-width:60px;padding:4px 8px}@media screen and (min-width:400px){.jetpack-simple-payments-product{flex-direction:row}.jetpack-simple-payments-product-image+.jetpack-simple-payments-details{flex-basis:70%;padding-left:1em}}.wp-block-jetpack-simple-payments{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;display:grid;grid-template-columns:200px auto;grid-column-gap:10px}.wp-block-jetpack-simple-payments .simple-payments__field .components-base-control__label{display:none}.wp-block-jetpack-simple-payments .simple-payments__field .components-base-control__field{margin-bottom:1em}.wp-block-jetpack-simple-payments .simple-payments__field textarea{display:block}.wp-block-jetpack-simple-payments .simple-payments__field-has-error .components-text-control__input,.wp-block-jetpack-simple-payments .simple-payments__field-has-error .components-textarea-control__input{border-color:#eb0001}.wp-block-jetpack-simple-payments .simple-payments__price-container{display:flex;flex-wrap:wrap}.wp-block-jetpack-simple-payments .simple-payments__price-container .simple-payments__field{margin-right:10px}.wp-block-jetpack-simple-payments .simple-payments__price-container .simple-payments__help-message{flex:1 1 100%;margin-top:0}.wp-block-jetpack-simple-payments .simple-payments__field-price .components-text-control__input{max-width:90px}.wp-block-jetpack-simple-payments .simple-payments__field-email .components-text-control__input{max-width:400px}.wp-block-jetpack-simple-payments .simple-payments__field-multiple .components-toggle-control__label{line-height:1.4em}.wp-block-jetpack-simple-payments .simple-payments__field-content .components-textarea-control__input{min-height:32px}.wp-block-jetpack-slideshow{margin-bottom:1.5em;position:relative}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container{width:100%;overflow:hidden;opacity:0}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container.wp-swiper-initialized{opacity:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container .wp-block-jetpack-slideshow_slide,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container .wp-block-jetpack-slideshow_swiper-wrappper{padding:0;margin:0;line-height:normal}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_slide{background:rgba(0,0,0,.1);display:flex;height:100%;width:100%}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_slide figure{align-items:center;display:flex;height:100%;justify-content:center;margin:0;position:relative;width:100%}.wp-block-jetpack-slideshow .swiper-container-fade .wp-block-jetpack-slideshow_slide{background:#f6f6f6}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_image{display:block;height:auto;max-height:100%;max-width:100%;width:auto;-o-object-fit:contain;object-fit:contain}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev{background-color:rgba(0,0,0,.5);background-position:50%;background-repeat:no-repeat;background-size:24px;border:0;border-radius:4px;box-shadow:none;height:48px;margin:-24px 0 0;padding:0;transition:background-color .25s;width:48px}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next:hover,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause:hover,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev:hover{background-color:rgba(0,0,0,.75)}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev:focus{outline:thin dotted #fff;outline-offset:-4px}.wp-block-jetpack-slideshow .swiper-button-next.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .swiper-button-prev.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .wp-block-jetpack-slideshow_button-prev,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M5.88 4.12L13.76 12l-7.88 7.88L8 22l10-10L8 2z' fill='%23fff'/%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3C/svg%3E")}.wp-block-jetpack-slideshow .swiper-button-prev.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .swiper-button-next.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .wp-block-jetpack-slideshow_button-next,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M18 4.12L10.12 12 18 19.88 15.88 22l-10-10 10-10z' fill='%23fff'/%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3C/svg%3E")}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M6 19h4V5H6v14zm8-14v14h4V5h-4z' fill='%23fff'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");display:none;margin-top:0;position:absolute;right:10px;top:10px;z-index:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_autoplay-paused .wp-block-jetpack-slideshow_button-pause{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M8 5v14l11-7z' fill='%23fff'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E")}.wp-block-jetpack-slideshow[data-autoplay=true] .wp-block-jetpack-slideshow_button-pause{display:block}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_caption.gallery-caption{background-color:rgba(0,0,0,.5);box-sizing:border-box;bottom:0;color:#fff;cursor:text;left:0;margin:0!important;padding:.75em;position:absolute;right:0;text-align:initial;z-index:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_caption.gallery-caption a{color:inherit}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets{bottom:0;line-height:24px;padding:10px 0 2px;position:relative}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet{background:currentColor;color:currentColor;height:16px;opacity:.5;transform:scale(.75);transition:opacity .25s,transform .25s;vertical-align:top;width:16px}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet:hover{opacity:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet:focus{outline:thin dotted;outline-offset:0}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet-active{background-color:currentColor;opacity:1;transform:scale(1)}.wp-block-jetpack-slideshow__add-item{margin-top:4px;width:100%}.wp-block-jetpack-slideshow__add-item .components-button.wp-block-jetpack-slideshow__add-item-button,.wp-block-jetpack-slideshow__add-item .components-form-file-upload{width:100%;height:100%}.wp-block-jetpack-slideshow__add-item .components-button.wp-block-jetpack-slideshow__add-item-button{display:flex;flex-direction:column;justify-content:center;box-shadow:none;border:none;border-radius:0;min-height:100px}.wp-block-jetpack-slideshow__add-item .components-button.wp-block-jetpack-slideshow__add-item-button .dashicon{margin-top:10px}.wp-block-jetpack-slideshow__add-item .components-button.wp-block-jetpack-slideshow__add-item-button:focus,.wp-block-jetpack-slideshow__add-item .components-button.wp-block-jetpack-slideshow__add-item-button:hover{border:1px solid #555d66}.wp-block-jetpack-slideshow_slide .components-spinner{position:absolute;top:50%;left:50%;margin-top:-9px;margin-left:-9px}.wp-block-jetpack-slideshow_slide.is-transient img{opacity:.3}.wp-block-jetpack-tiled-gallery{margin:0 auto 1.5em}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__item img{border-radius:50%}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row{flex-grow:1;width:100%}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-1 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-1 .tiled-gallery__col{width:100%}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-2 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-2 .tiled-gallery__col{width:calc((100% - 4px)/2)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-3 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-3 .tiled-gallery__col{width:calc((100% - 8px)/3)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-4 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-4 .tiled-gallery__col{width:calc((100% - 12px)/4)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-5 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-5 .tiled-gallery__col{width:calc((100% - 16px)/5)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-6 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-6 .tiled-gallery__col{width:calc((100% - 20px)/6)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-7 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-7 .tiled-gallery__col{width:calc((100% - 24px)/7)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-8 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-8 .tiled-gallery__col{width:calc((100% - 28px)/8)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-9 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-9 .tiled-gallery__col{width:calc((100% - 32px)/9)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-10 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-10 .tiled-gallery__col{width:calc((100% - 36px)/10)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-11 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-11 .tiled-gallery__col{width:calc((100% - 40px)/11)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-12 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-12 .tiled-gallery__col{width:calc((100% - 44px)/12)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-13 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-13 .tiled-gallery__col{width:calc((100% - 48px)/13)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-14 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-14 .tiled-gallery__col{width:calc((100% - 52px)/14)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-15 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-15 .tiled-gallery__col{width:calc((100% - 56px)/15)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-16 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-16 .tiled-gallery__col{width:calc((100% - 60px)/16)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-17 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-17 .tiled-gallery__col{width:calc((100% - 64px)/17)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-18 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-18 .tiled-gallery__col{width:calc((100% - 68px)/18)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-19 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-19 .tiled-gallery__col{width:calc((100% - 72px)/19)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-20 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-20 .tiled-gallery__col{width:calc((100% - 76px)/20)}.wp-block-jetpack-tiled-gallery.is-style-columns .tiled-gallery__item,.wp-block-jetpack-tiled-gallery.is-style-rectangular .tiled-gallery__item{display:flex}.tiled-gallery__gallery{width:100%;display:flex;padding:0;flex-wrap:wrap}.tiled-gallery__row{width:100%;display:flex;flex-direction:row;justify-content:center;margin:0}.tiled-gallery__row+.tiled-gallery__row{margin-top:4px}.tiled-gallery__col{display:flex;flex-direction:column;justify-content:center;margin:0}.tiled-gallery__col+.tiled-gallery__col{margin-left:4px}.tiled-gallery__item{justify-content:center;margin:0;overflow:hidden;padding:0;position:relative}.tiled-gallery__item.filter__black-and-white{filter:grayscale(100%)}.tiled-gallery__item.filter__sepia{filter:sepia(100%)}.tiled-gallery__item.filter__1977{position:relative;filter:contrast(1.1) brightness(1.1) saturate(1.3)}.tiled-gallery__item.filter__1977 img{width:100%;z-index:1}.tiled-gallery__item.filter__1977:before{z-index:2}.tiled-gallery__item.filter__1977:after,.tiled-gallery__item.filter__1977:before{content:"";display:block;height:100%;width:100%;top:0;left:0;position:absolute;pointer-events:none}.tiled-gallery__item.filter__1977:after{z-index:3;background:rgba(243,106,188,.3);mix-blend-mode:screen}.tiled-gallery__item.filter__clarendon{position:relative;filter:contrast(1.2) saturate(1.35)}.tiled-gallery__item.filter__clarendon img{width:100%;z-index:1}.tiled-gallery__item.filter__clarendon:before{z-index:2}.tiled-gallery__item.filter__clarendon:after,.tiled-gallery__item.filter__clarendon:before{content:"";display:block;height:100%;width:100%;top:0;left:0;position:absolute;pointer-events:none}.tiled-gallery__item.filter__clarendon:after{z-index:3}.tiled-gallery__item.filter__clarendon:before{background:rgba(127,187,227,.2);mix-blend-mode:overlay}.tiled-gallery__item.filter__gingham{position:relative;filter:brightness(1.05) hue-rotate(-10deg)}.tiled-gallery__item.filter__gingham img{width:100%;z-index:1}.tiled-gallery__item.filter__gingham:before{z-index:2}.tiled-gallery__item.filter__gingham:after,.tiled-gallery__item.filter__gingham:before{content:"";display:block;height:100%;width:100%;top:0;left:0;position:absolute;pointer-events:none}.tiled-gallery__item.filter__gingham:after{z-index:3;background:#e6e6fa;mix-blend-mode:soft-light}.tiled-gallery__item+.tiled-gallery__item{margin-top:4px}.tiled-gallery__item>img{background-color:rgba(0,0,0,.1)}.tiled-gallery__item>a,.tiled-gallery__item>a>img,.tiled-gallery__item>img{display:block;height:auto;margin:0;max-width:100%;-o-object-fit:cover;object-fit:cover;-o-object-position:center;object-position:center;padding:0;width:100%}@keyframes tiled-gallery-img-placeholder{0%{background-color:#f6f6f6}50%{background-color:hsla(0,0%,96.5%,.5)}to{background-color:#f6f6f6}}.wp-block-jetpack-tiled-gallery{padding-left:4px;padding-right:4px}.wp-block-jetpack-tiled-gallery .tiled-gallery__item>img:focus{outline:none}.wp-block-jetpack-tiled-gallery .tiled-gallery__item>img{animation:tiled-gallery-img-placeholder 1.6s ease-in-out infinite}.wp-block-jetpack-tiled-gallery .tiled-gallery__item.is-selected{outline:4px solid #0085ba;filter:none}.wp-block-jetpack-tiled-gallery .tiled-gallery__item.is-selected:after,.wp-block-jetpack-tiled-gallery .tiled-gallery__item.is-selected:before{content:none}.wp-block-jetpack-tiled-gallery .tiled-gallery__item.is-transient img{opacity:.3}.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item{margin-top:4px;width:100%}.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-button.tiled-gallery__add-item-button,.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-form-file-upload{width:100%;height:100%}.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-button.tiled-gallery__add-item-button{display:flex;flex-direction:column;justify-content:center;box-shadow:none;border:none;border-radius:0;min-height:100px}.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-button.tiled-gallery__add-item-button .dashicon{margin-top:10px}.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-button.tiled-gallery__add-item-button:focus,.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-button.tiled-gallery__add-item-button:hover{border:1px solid #555d66}.wp-block-jetpack-tiled-gallery .tiled-gallery__item__inline-menu{background-color:#0085ba;display:inline-flex;padding:0 0 2px 2px;position:absolute;right:0;top:0}.wp-block-jetpack-tiled-gallery .tiled-gallery__item__inline-menu .components-button,.wp-block-jetpack-tiled-gallery .tiled-gallery__item__inline-menu .components-button:focus,.wp-block-jetpack-tiled-gallery .tiled-gallery__item__inline-menu .components-button:hover{color:#fff}.wp-block-jetpack-tiled-gallery .tiled-gallery__item__remove{padding:0}.wp-block-jetpack-tiled-gallery .tiled-gallery__item .components-spinner{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.editor-block-preview__content .wp-block-jetpack-tiled-gallery .editor-media-placeholder{display:none}.wp-block-jetpack-tiled-gallery .tiled-gallery__media-placeholder-icon{height:20px;margin-right:1ch;width:20px}.tiled-gallery__filter-picker-menu{padding:7px}.tiled-gallery__filter-picker-menu .components-menu-item__button+.components-menu-item__button{margin-top:2px}.tiled-gallery__filter-picker-menu .components-menu-item__button.is-active{color:#191e23;box-shadow:0 0 0 2px #555d66!important}.wp-block-jetpack-wordads{background:#fff}[data-type="jetpack/wordads"][data-align=center] .jetpack-wordads__ad{margin:0 auto}.jetpack-wordads__ad{display:flex;overflow:hidden;flex-direction:column;max-width:100%}.jetpack-wordads__ad .components-placeholder{flex-grow:2}.jetpack-wordads__ad .components-toggle-control__label{line-height:1.4em}.jetpack-wordads__ad .components-base-control__field{padding:7px}.jetpack-wordads-leaderboard .components-placeholder{min-height:90px}.jetpack-wordads-mobile_leaderboard .components-placeholder{min-height:72px}.wp-block-jetpack-wordads__format-picker{padding:7px}.wp-block-jetpack-wordads__format-picker .components-menu-item__button+.components-menu-item__button{margin-top:2px}.wp-block-jetpack-wordads__format-picker .components-menu-item__button.is-active{color:#191e23;box-shadow:0 0 0 2px #555d66!important} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/editor.js b/plugins/jetpack/_inc/blocks/editor.js
deleted file mode 100644
index 3e696e52..00000000
--- a/plugins/jetpack/_inc/blocks/editor.js
+++ /dev/null
@@ -1,25 +0,0 @@
-!function(e,t){for(var n in t)e[n]=t[n]}(window,function(e){function t(t){for(var n,r,o=t[0],a=t[1],s=0,c=[];s<o.length;s++)r=o[s],i[r]&&c.push(i[r][0]),i[r]=0;for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n]);for(l&&l(t);c.length;)c.shift()()}var n={},r={1:0},i={1:0};function o(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,o),r.l=!0,r.exports}o.e=function(e){var t=[];r[e]?t.push(r[e]):0!==r[e]&&{9:1,10:1}[e]&&t.push(r[e]=new Promise(function(t,n){for(var r="rtl"===document.dir?({9:"vendors~map/mapbox-gl",10:"vendors~swiper"}[e]||e)+".rtl.css":({9:"vendors~map/mapbox-gl",10:"vendors~swiper"}[e]||e)+".css",i=o.p+r,a=document.getElementsByTagName("link"),s=0;s<a.length;s++){var c=(u=a[s]).getAttribute("data-href")||u.getAttribute("href");if("stylesheet"===u.rel&&(c===r||c===i))return t()}var l=document.getElementsByTagName("style");for(s=0;s<l.length;s++){var u;if((c=(u=l[s]).getAttribute("data-href"))===r||c===i)return t()}var p=document.createElement("link");p.rel="stylesheet",p.type="text/css",p.setAttribute("data-webpack",!0),p.onload=t,p.onerror=function(t){var r=t&&t.target&&t.target.src||i,o=new Error("Loading CSS chunk "+e+" failed.\n("+r+")");o.request=r,n(o)},p.href=i,document.getElementsByTagName("head")[0].appendChild(p)}).then(function(){r[e]=0}));var n=i[e];if(0!==n)if(n)t.push(n[2]);else{var a=new Promise(function(t,r){n=i[e]=[t,r]});t.push(n[2]=a);var s,c=document.createElement("script");c.charset="utf-8",c.timeout=120,o.nc&&c.setAttribute("nonce",o.nc),c.src=function(e){return o.p+""+({9:"vendors~map/mapbox-gl",10:"vendors~swiper"}[e]||e)+".js"}(e),s=function(t){c.onerror=c.onload=null,clearTimeout(l);var n=i[e];if(0!==n){if(n){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src,a=new Error("Loading chunk "+e+" failed.\n("+r+": "+o+")");a.type=r,a.request=o,n[1](a)}i[e]=void 0}};var l=setTimeout(function(){s({type:"timeout",target:c})},12e4);c.onerror=c.onload=s,document.head.appendChild(c)}return Promise.all(t)},o.m=e,o.c=n,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)o.d(n,r,function(t){return e[t]}.bind(null,r));return n},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o.oe=function(e){throw console.error(e),e};var a=window.webpackJsonp=window.webpackJsonp||[],s=a.push.bind(a);a.push=t,a=a.slice();for(var c=0;c<a.length;c++)t(a[c]);var l=s;return o(o.s=282)}([function(e,t){e.exports=wp.element},function(e,t,n){"use strict";n.d(t,"a",function(){return s}),n.d(t,"b",function(){return c}),n.d(t,"c",function(){return l});var r=n(21),i=n.n(r),o=n(15),a=function(e){var t=i()(e);return t.push("jetpack"),t};function s(){return o.__.apply(void 0,i()(a(arguments)))}function c(){return o._n.apply(void 0,i()(a(arguments)))}function l(){return o._x.apply(void 0,i()(a(arguments)))}},function(e,t){e.exports=wp.components},function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(e,t){e.exports=function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}},function(e,t){e.exports=window.lodash},function(e,t){e.exports=wp.editor},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t,n){var r=n(70),i=n(4);e.exports=function(e,t){return!t||"object"!==r(t)&&"function"!=typeof t?i(e):t}},function(e,t){function n(t){return e.exports=n=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},n(t)}e.exports=n},function(e,t,n){var r=n(71);e.exports=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&r(e,t)}},function(e,t){function n(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}e.exports=function(e,t,r){return t&&n(e.prototype,t),r&&n(e,r),e}},function(e,t,n){var r;
-/*!
- Copyright (c) 2017 Jed Watson.
- Licensed under the MIT License (MIT), see
- http://jedwatson.github.io/classnames
-*/
-/*!
- Copyright (c) 2017 Jed Watson.
- Licensed under the MIT License (MIT), see
- http://jedwatson.github.io/classnames
-*/
-!function(){"use strict";var n={}.hasOwnProperty;function i(){for(var e=[],t=0;t<arguments.length;t++){var r=arguments[t];if(r){var o=typeof r;if("string"===o||"number"===o)e.push(r);else if(Array.isArray(r)&&r.length){var a=i.apply(null,r);a&&e.push(a)}else if("object"===o)for(var s in r)n.call(r,s)&&r[s]&&e.push(s)}}return e.join(" ")}e.exports?(i.default=i,e.exports=i):void 0===(r=function(){return i}.apply(t,[]))||(e.exports=r)}()},function(e,t,n){var r=n(3);e.exports=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},i=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),i.forEach(function(t){r(e,t,n[t])})}return e}},function(e,t){e.exports=wp.compose},function(e,t){e.exports=wp.i18n},function(e,t){e.exports=wp.blocks},function(e,t){e.exports=wp.data},function(e,t,n){"use strict";var r=Object.prototype.hasOwnProperty;function i(e,t){return r.call(e,t)}function o(e){return!(e>=55296&&e<=57343)&&(!(e>=64976&&e<=65007)&&(65535!=(65535&e)&&65534!=(65535&e)&&(!(e>=0&&e<=8)&&(11!==e&&(!(e>=14&&e<=31)&&(!(e>=127&&e<=159)&&!(e>1114111)))))))}function a(e){if(e>65535){var t=55296+((e-=65536)>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}var s=/\\([!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~])/g,c=new RegExp(s.source+"|"+/&([a-z#][a-z0-9]{1,31});/gi.source,"gi"),l=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i,u=n(80);var p=/[&<>"]/,h=/[&<>"]/g,d={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"};function m(e){return d[e]}var f=/[.?*+^$[\]\\(){}|-]/g;var b=n(58);t.lib={},t.lib.mdurl=n(81),t.lib.ucmicro=n(136),t.assign=function(e){return Array.prototype.slice.call(arguments,1).forEach(function(t){if(t){if("object"!=typeof t)throw new TypeError(t+"must be object");Object.keys(t).forEach(function(n){e[n]=t[n]})}}),e},t.isString=function(e){return"[object String]"===function(e){return Object.prototype.toString.call(e)}(e)},t.has=i,t.unescapeMd=function(e){return e.indexOf("\\")<0?e:e.replace(s,"$1")},t.unescapeAll=function(e){return e.indexOf("\\")<0&&e.indexOf("&")<0?e:e.replace(c,function(e,t,n){return t||function(e,t){var n=0;return i(u,t)?u[t]:35===t.charCodeAt(0)&&l.test(t)&&o(n="x"===t[1].toLowerCase()?parseInt(t.slice(2),16):parseInt(t.slice(1),10))?a(n):e}(e,n)})},t.isValidEntityCode=o,t.fromCodePoint=a,t.escapeHtml=function(e){return p.test(e)?e.replace(h,m):e},t.arrayReplaceAt=function(e,t,n){return[].concat(e.slice(0,t),n,e.slice(t+1))},t.isSpace=function(e){switch(e){case 9:case 32:return!0}return!1},t.isWhiteSpace=function(e){if(e>=8192&&e<=8202)return!0;switch(e){case 9:case 10:case 11:case 12:case 13:case 32:case 160:case 5760:case 8239:case 8287:case 12288:return!0}return!1},t.isMdAsciiPunct=function(e){switch(e){case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 124:case 125:case 126:return!0;default:return!1}},t.isPunctChar=function(e){return b.test(e)},t.escapeRE=function(e){return e.replace(f,"\\$&")},t.normalizeReference=function(e){return e.trim().replace(/\s+/g," ").toUpperCase()}},function(e,t,n){"use strict";n.d(t,"a",function(){return o});var r=n(16),i=n(39);function o(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=Object(i.a)(e),a=o.available;o.unavailableReason;if(!a)return!1;var s=Object(r.registerBlockType)("jetpack/".concat(e),t);return n.forEach(function(e){return Object(r.registerBlockType)("jetpack/".concat(e.name),e.settings)}),s}},function(e,t,n){"use strict";var r=n(0),i=n(2);t.a=function(e){return Object(r.createElement)(i.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(r.createElement)(i.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),e)}},function(e,t,n){var r=n(67),i=n(68),o=n(69);e.exports=function(e){return r(e)||i(e)||o()}},function(e,t,n){"use strict";n.d(t,"a",function(){return r}),n.d(t,"b",function(){return i}),n.d(t,"h",function(){return o}),n.d(t,"i",function(){return a}),n.d(t,"c",function(){return s}),n.d(t,"d",function(){return c}),n.d(t,"e",function(){return l}),n.d(t,"f",function(){return u}),n.d(t,"g",function(){return p});var r=["image"],i=4,o=20,a=2e3,s="circle",c="columns",l="rectangular",u="square",p=[{isDefault:!0,name:l},{name:s},{name:u},{name:c}]},function(e,t,n){var r=n(45),i=n(46),o=n(47);e.exports=function(e,t){return r(e)||i(e,t)||o()}},function(e,t){e.exports=wp.blob},function(e,t,n){"use strict";n.d(t,"a",function(){return o});var r=n(0),i=n(1),o={name:"map",prefix:"jetpack",title:Object(i.a)("Map"),icon:Object(r.createElement)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",role:"img","aria-hidden":"true",focusable:"false"},Object(r.createElement)("path",{fill:"none",d:"M0 0h24v24H0V0z"}),Object(r.createElement)("path",{d:"M20.5 3l-.16.03L15 5.1 9 3 3.36 4.9c-.21.07-.36.25-.36.48V20.5c0 .28.22.5.5.5l.16-.03L9 18.9l6 2.1 5.64-1.9c.21-.07.36-.25.36-.48V3.5c0-.28-.22-.5-.5-.5zM10 5.47l4 1.4v11.66l-4-1.4V5.47zm-5 .99l3-1.01v11.7l-3 1.16V6.46zm14 11.08l-3 1.01V6.86l3-1.16v11.84z"})),category:"jetpack",keywords:[Object(i.a)("map"),Object(i.a)("location")],description:Object(i.a)("Add an interactive map showing one or more locations."),attributes:{align:{type:"string"},points:{type:"array",default:[]},mapStyle:{type:"string",default:"default"},mapDetails:{type:"boolean",default:!0},zoom:{type:"integer",default:13},mapCenter:{type:"object",default:{longitude:-122.41941550000001,latitude:37.7749295}},markerColor:{type:"string",default:"red"}},supports:{html:!1},mapStyleOptions:[{value:"default",label:Object(i.a)("Basic")},{value:"black_and_white",label:Object(i.a)("Black and white")},{value:"satellite",label:Object(i.a)("Satellite")},{value:"terrain",label:Object(i.a)("Terrain")}],validAlignments:["center","wide","full"],markerIcon:Object(r.createElement)("svg",{width:"14",height:"20",viewBox:"0 0 14 20",xmlns:"http://www.w3.org/2000/svg"},Object(r.createElement)("g",{id:"Page-1",fill:"none",fillRule:"evenodd"},Object(r.createElement)("g",{id:"outline-add_location-24px",transform:"translate(-5 -2)"},Object(r.createElement)("polygon",{id:"Shape",points:"0 0 24 0 24 24 0 24"}),Object(r.createElement)("path",{d:"M12,2 C8.14,2 5,5.14 5,9 C5,14.25 12,22 12,22 C12,22 19,14.25 19,9 C19,5.14 15.86,2 12,2 Z M7,9 C7,6.24 9.24,4 12,4 C14.76,4 17,6.24 17,9 C17,11.88 14.12,16.19 12,18.88 C9.92,16.21 7,11.85 7,9 Z M13,6 L11,6 L11,8 L9,8 L9,10 L11,10 L11,12 L13,12 L13,10 L15,10 L15,8 L13,8 L13,6 Z",id:"Shape",fill:"#000",fillRule:"nonzero"}))))}},function(e,t){e.exports=wp.apiFetch},function(e,t){function n(){return e.exports=n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},n.apply(this,arguments)}e.exports=n},function(e,t){e.exports=wp.keycodes},function(e,t,n){"use strict";n.d(t,"b",function(){return r}),n.d(t,"c",function(){return i}),n.d(t,"d",function(){return o}),n.d(t,"a",function(){return a}),n.d(t,"e",function(){return s});var r="after-visits",i="before-visits",o=3,a="jp-visit-counter",s=15552e3},function(e,t,n){"use strict";n.d(t,"a",function(){return p}),n.d(t,"b",function(){return l}),n.d(t,"c",function(){return h}),n.d(t,"d",function(){return u});var r=n(56),i=n(5),o=16/9,a=.8,s=600,c="wp-block-jetpack-slideshow_autoplay-paused";function l(e){u(e),p(e),e.el.querySelector(".wp-block-jetpack-slideshow_button-pause").addEventListener("click",function(){e.el&&(e.el.classList.contains(c)?(e.el.classList.remove(c),e.autoplay.start(),this.setAttribute("aria-label","Pause Slideshow")):(e.el.classList.add(c),e.autoplay.stop(),this.setAttribute("aria-label","Play Slideshow")))})}function u(e){if(e&&e.el){var t=e.el.querySelector('.swiper-slide[data-swiper-slide-index="0"] img');if(t){var n=t.clientWidth/t.clientHeight,r=Math.max(Math.min(n,o),1),i="undefined"!=typeof window?window.innerHeight*a:s,c=Math.min(e.width/r,i),l="".concat(Math.floor(c),"px"),u="".concat(Math.floor(c/2),"px");e.el.classList.add("wp-swiper-initialized"),e.wrapperEl.style.height=l,e.el.querySelector(".wp-block-jetpack-slideshow_button-prev").style.top=u,e.el.querySelector(".wp-block-jetpack-slideshow_button-next").style.top=u}}}function p(e){Object(i.forEach)(e.slides,function(t,n){t.setAttribute("aria-hidden",n===e.activeIndex?"false":"true"),n===e.activeIndex?t.setAttribute("tabindex","-1"):t.removeAttribute("tabindex")}),function(e){var t=e.slides[e.activeIndex];if(t){var n=t.getElementsByTagName("FIGCAPTION")[0],i=t.getElementsByTagName("IMG")[0];e.a11y.liveRegion&&(e.a11y.liveRegion[0].innerHTML=n?n.innerHTML:Object(r.escapeHTML)(i.alt))}}(e)}function h(e){Object(i.forEach)(e.pagination.bullets,function(t){t.addEventListener("click",function(){var t=e.slides[e.realIndex];setTimeout(function(){t.focus()},500)})})}},function(e,t,n){"use strict";var r=function(){if("undefined"!=typeof Map)return Map;function e(e,t){var n=-1;return e.some(function(e,r){return e[0]===t&&(n=r,!0)}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(t){var n=e(this.__entries__,t),r=this.__entries__[n];return r&&r[1]},t.prototype.set=function(t,n){var r=e(this.__entries__,t);~r?this.__entries__[r][1]=n:this.__entries__.push([t,n])},t.prototype.delete=function(t){var n=this.__entries__,r=e(n,t);~r&&n.splice(r,1)},t.prototype.has=function(t){return!!~e(this.__entries__,t)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(e,t){void 0===t&&(t=null);for(var n=0,r=this.__entries__;n<r.length;n++){var i=r[n];e.call(t,i[1],i[0])}},t}()}(),i="undefined"!=typeof window&&"undefined"!=typeof document&&window.document===document,o="undefined"!=typeof window&&window.Math===Math?window:"undefined"!=typeof self&&self.Math===Math?self:"undefined"!=typeof window&&window.Math===Math?window:Function("return this")(),a="function"==typeof requestAnimationFrame?requestAnimationFrame.bind(o):function(e){return setTimeout(function(){return e(Date.now())},1e3/60)},s=2;var c=20,l=["top","right","bottom","left","width","height","size","weight"],u="undefined"!=typeof MutationObserver,p=function(){function e(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=function(e,t){var n=!1,r=!1,i=0;function o(){n&&(n=!1,e()),r&&l()}function c(){a(o)}function l(){var e=Date.now();if(n){if(e-i<s)return;r=!0}else n=!0,r=!1,setTimeout(c,t);i=e}return l}(this.refresh.bind(this),c)}return e.prototype.addObserver=function(e){~this.observers_.indexOf(e)||this.observers_.push(e),this.connected_||this.connect_()},e.prototype.removeObserver=function(e){var t=this.observers_,n=t.indexOf(e);~n&&t.splice(n,1),!t.length&&this.connected_&&this.disconnect_()},e.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},e.prototype.updateObservers_=function(){var e=this.observers_.filter(function(e){return e.gatherActive(),e.hasActive()});return e.forEach(function(e){return e.broadcastActive()}),e.length>0},e.prototype.connect_=function(){i&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),u?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){i&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(e){var t=e.propertyName,n=void 0===t?"":t;l.some(function(e){return!!~n.indexOf(e)})&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),h=function(e,t){for(var n=0,r=Object.keys(t);n<r.length;n++){var i=r[n];Object.defineProperty(e,i,{value:t[i],enumerable:!1,writable:!1,configurable:!0})}return e},d=function(e){return e&&e.ownerDocument&&e.ownerDocument.defaultView||o},m=j(0,0,0,0);function f(e){return parseFloat(e)||0}function b(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return t.reduce(function(t,n){return t+f(e["border-"+n+"-width"])},0)}function g(e){var t=e.clientWidth,n=e.clientHeight;if(!t&&!n)return m;var r=d(e).getComputedStyle(e),i=function(e){for(var t={},n=0,r=["top","right","bottom","left"];n<r.length;n++){var i=r[n],o=e["padding-"+i];t[i]=f(o)}return t}(r),o=i.left+i.right,a=i.top+i.bottom,s=f(r.width),c=f(r.height);if("border-box"===r.boxSizing&&(Math.round(s+o)!==t&&(s-=b(r,"left","right")+o),Math.round(c+a)!==n&&(c-=b(r,"top","bottom")+a)),!function(e){return e===d(e).document.documentElement}(e)){var l=Math.round(s+o)-t,u=Math.round(c+a)-n;1!==Math.abs(l)&&(s-=l),1!==Math.abs(u)&&(c-=u)}return j(i.left,i.top,s,c)}var v="undefined"!=typeof SVGGraphicsElement?function(e){return e instanceof d(e).SVGGraphicsElement}:function(e){return e instanceof d(e).SVGElement&&"function"==typeof e.getBBox};function y(e){return i?v(e)?function(e){var t=e.getBBox();return j(0,0,t.width,t.height)}(e):g(e):m}function j(e,t,n,r){return{x:e,y:t,width:n,height:r}}var O=function(){function e(e){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=j(0,0,0,0),this.target=e}return e.prototype.isActive=function(){var e=y(this.target);return this.contentRect_=e,e.width!==this.broadcastWidth||e.height!==this.broadcastHeight},e.prototype.broadcastRect=function(){var e=this.contentRect_;return this.broadcastWidth=e.width,this.broadcastHeight=e.height,e},e}(),k=function(){return function(e,t){var n,r,i,o,a,s,c,l=(r=(n=t).x,i=n.y,o=n.width,a=n.height,s="undefined"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,c=Object.create(s.prototype),h(c,{x:r,y:i,width:o,height:a,top:i,right:r+o,bottom:a+i,left:r}),c);h(this,{target:e,contentRect:l})}}(),_=function(){function e(e,t,n){if(this.activeObservations_=[],this.observations_=new r,"function"!=typeof e)throw new TypeError("The callback provided as parameter 1 is not a function.");this.callback_=e,this.controller_=t,this.callbackCtx_=n}return e.prototype.observe=function(e){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(e instanceof d(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var t=this.observations_;t.has(e)||(t.set(e,new O(e)),this.controller_.addObserver(this),this.controller_.refresh())}},e.prototype.unobserve=function(e){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(e instanceof d(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var t=this.observations_;t.has(e)&&(t.delete(e),t.size||this.controller_.removeObserver(this))}},e.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},e.prototype.gatherActive=function(){var e=this;this.clearActive(),this.observations_.forEach(function(t){t.isActive()&&e.activeObservations_.push(t)})},e.prototype.broadcastActive=function(){if(this.hasActive()){var e=this.callbackCtx_,t=this.activeObservations_.map(function(e){return new k(e.target,e.broadcastRect())});this.callback_.call(e,t,e),this.clearActive()}},e.prototype.clearActive=function(){this.activeObservations_.splice(0)},e.prototype.hasActive=function(){return this.activeObservations_.length>0},e}(),w="undefined"!=typeof WeakMap?new WeakMap:new r,E=function(){return function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=p.getInstance(),r=new _(t,n,this);w.set(this,r)}}();["observe","unobserve","disconnect"].forEach(function(e){E.prototype[e]=function(){var t;return(t=w.get(this))[e].apply(t,arguments)}});var C=void 0!==o.ResizeObserver?o.ResizeObserver:E;t.a=C},function(e,t,n){"use strict";var r=n(88),i=n(247);function o(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}t.parse=y,t.resolve=function(e,t){return y(e,!1,!0).resolve(t)},t.resolveObject=function(e,t){return e?y(e,!1,!0).resolveObject(t):t},t.format=function(e){i.isString(e)&&(e=y(e));return e instanceof o?e.format():o.prototype.format.call(e)},t.Url=o;var a=/^([a-z0-9.+-]+:)/i,s=/:[0-9]*$/,c=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,l=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),u=["'"].concat(l),p=["%","/","?",";","#"].concat(u),h=["/","?","#"],d=/^[+a-z0-9A-Z_-]{0,63}$/,m=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,f={javascript:!0,"javascript:":!0},b={javascript:!0,"javascript:":!0},g={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},v=n(248);function y(e,t,n){if(e&&i.isObject(e)&&e instanceof o)return e;var r=new o;return r.parse(e,t,n),r}o.prototype.parse=function(e,t,n){if(!i.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var o=e.indexOf("?"),s=-1!==o&&o<e.indexOf("#")?"?":"#",l=e.split(s);l[0]=l[0].replace(/\\/g,"/");var y=e=l.join(s);if(y=y.trim(),!n&&1===e.split("#").length){var j=c.exec(y);if(j)return this.path=y,this.href=y,this.pathname=j[1],j[2]?(this.search=j[2],this.query=t?v.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search="",this.query={}),this}var O=a.exec(y);if(O){var k=(O=O[0]).toLowerCase();this.protocol=k,y=y.substr(O.length)}if(n||O||y.match(/^\/\/[^@\/]+@[^@\/]+/)){var _="//"===y.substr(0,2);!_||O&&b[O]||(y=y.substr(2),this.slashes=!0)}if(!b[O]&&(_||O&&!g[O])){for(var w,E,C=-1,x=0;x<h.length;x++){-1!==(S=y.indexOf(h[x]))&&(-1===C||S<C)&&(C=S)}-1!==(E=-1===C?y.lastIndexOf("@"):y.lastIndexOf("@",C))&&(w=y.slice(0,E),y=y.slice(E+1),this.auth=decodeURIComponent(w)),C=-1;for(x=0;x<p.length;x++){var S;-1!==(S=y.indexOf(p[x]))&&(-1===C||S<C)&&(C=S)}-1===C&&(C=y.length),this.host=y.slice(0,C),y=y.slice(C),this.parseHost(),this.hostname=this.hostname||"";var A="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!A)for(var M=this.hostname.split(/\./),T=(x=0,M.length);x<T;x++){var z=M[x];if(z&&!z.match(d)){for(var D="",F=0,N=z.length;F<N;F++)z.charCodeAt(F)>127?D+="x":D+=z[F];if(!D.match(d)){var P=M.slice(0,x),R=M.slice(x+1),I=z.match(m);I&&(P.push(I[1]),R.unshift(I[2])),R.length&&(y="/"+R.join(".")+y),this.hostname=P.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),A||(this.hostname=r.toASCII(this.hostname));var L=this.port?":"+this.port:"",B=this.hostname||"";this.host=B+L,this.href+=this.host,A&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==y[0]&&(y="/"+y))}if(!f[k])for(x=0,T=u.length;x<T;x++){var q=u[x];if(-1!==y.indexOf(q)){var V=encodeURIComponent(q);V===q&&(V=escape(q)),y=y.split(q).join(V)}}var H=y.indexOf("#");-1!==H&&(this.hash=y.substr(H),y=y.slice(0,H));var U=y.indexOf("?");if(-1!==U?(this.search=y.substr(U),this.query=y.substr(U+1),t&&(this.query=v.parse(this.query)),y=y.slice(0,U)):t&&(this.search="",this.query={}),y&&(this.pathname=y),g[k]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){L=this.pathname||"";var G=this.search||"";this.path=L+G}return this.href=this.format(),this},o.prototype.format=function(){var e=this.auth||"";e&&(e=(e=encodeURIComponent(e)).replace(/%3A/i,":"),e+="@");var t=this.protocol||"",n=this.pathname||"",r=this.hash||"",o=!1,a="";this.host?o=e+this.host:this.hostname&&(o=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(o+=":"+this.port)),this.query&&i.isObject(this.query)&&Object.keys(this.query).length&&(a=v.stringify(this.query));var s=this.search||a&&"?"+a||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||g[t])&&!1!==o?(o="//"+(o||""),n&&"/"!==n.charAt(0)&&(n="/"+n)):o||(o=""),r&&"#"!==r.charAt(0)&&(r="#"+r),s&&"?"!==s.charAt(0)&&(s="?"+s),t+o+(n=n.replace(/[?#]/g,function(e){return encodeURIComponent(e)}))+(s=s.replace("#","%23"))+r},o.prototype.resolve=function(e){return this.resolveObject(y(e,!1,!0)).format()},o.prototype.resolveObject=function(e){if(i.isString(e)){var t=new o;t.parse(e,!1,!0),e=t}for(var n=new o,r=Object.keys(this),a=0;a<r.length;a++){var s=r[a];n[s]=this[s]}if(n.hash=e.hash,""===e.href)return n.href=n.format(),n;if(e.slashes&&!e.protocol){for(var c=Object.keys(e),l=0;l<c.length;l++){var u=c[l];"protocol"!==u&&(n[u]=e[u])}return g[n.protocol]&&n.hostname&&!n.pathname&&(n.path=n.pathname="/"),n.href=n.format(),n}if(e.protocol&&e.protocol!==n.protocol){if(!g[e.protocol]){for(var p=Object.keys(e),h=0;h<p.length;h++){var d=p[h];n[d]=e[d]}return n.href=n.format(),n}if(n.protocol=e.protocol,e.host||b[e.protocol])n.pathname=e.pathname;else{for(var m=(e.pathname||"").split("/");m.length&&!(e.host=m.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==m[0]&&m.unshift(""),m.length<2&&m.unshift(""),n.pathname=m.join("/")}if(n.search=e.search,n.query=e.query,n.host=e.host||"",n.auth=e.auth,n.hostname=e.hostname||e.host,n.port=e.port,n.pathname||n.search){var f=n.pathname||"",v=n.search||"";n.path=f+v}return n.slashes=n.slashes||e.slashes,n.href=n.format(),n}var y=n.pathname&&"/"===n.pathname.charAt(0),j=e.host||e.pathname&&"/"===e.pathname.charAt(0),O=j||y||n.host&&e.pathname,k=O,_=n.pathname&&n.pathname.split("/")||[],w=(m=e.pathname&&e.pathname.split("/")||[],n.protocol&&!g[n.protocol]);if(w&&(n.hostname="",n.port=null,n.host&&(""===_[0]?_[0]=n.host:_.unshift(n.host)),n.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===m[0]?m[0]=e.host:m.unshift(e.host)),e.host=null),O=O&&(""===m[0]||""===_[0])),j)n.host=e.host||""===e.host?e.host:n.host,n.hostname=e.hostname||""===e.hostname?e.hostname:n.hostname,n.search=e.search,n.query=e.query,_=m;else if(m.length)_||(_=[]),_.pop(),_=_.concat(m),n.search=e.search,n.query=e.query;else if(!i.isNullOrUndefined(e.search)){if(w)n.hostname=n.host=_.shift(),(A=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=A.shift(),n.host=n.hostname=A.shift());return n.search=e.search,n.query=e.query,i.isNull(n.pathname)&&i.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n}if(!_.length)return n.pathname=null,n.search?n.path="/"+n.search:n.path=null,n.href=n.format(),n;for(var E=_.slice(-1)[0],C=(n.host||e.host||_.length>1)&&("."===E||".."===E)||""===E,x=0,S=_.length;S>=0;S--)"."===(E=_[S])?_.splice(S,1):".."===E?(_.splice(S,1),x++):x&&(_.splice(S,1),x--);if(!O&&!k)for(;x--;x)_.unshift("..");!O||""===_[0]||_[0]&&"/"===_[0].charAt(0)||_.unshift(""),C&&"/"!==_.join("/").substr(-1)&&_.push("");var A,M=""===_[0]||_[0]&&"/"===_[0].charAt(0);w&&(n.hostname=n.host=M?"":_.length?_.shift():"",(A=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=A.shift(),n.host=n.hostname=A.shift()));return(O=O||n.host&&_.length)&&!M&&_.unshift(""),_.length?n.pathname=_.join("/"):(n.pathname=null,n.path=null),i.isNull(n.pathname)&&i.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},o.prototype.parseHost=function(){var e=this.host,t=s.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},function(e,t,n){"object"==typeof window&&window.Jetpack_Block_Assets_Base_Url&&(n.p=window.Jetpack_Block_Assets_Base_Url)},function(e,t,n){var r=n(108);e.exports=function(e,t){if(null==e)return{};var n,i,o=r(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)n=a[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}},function(e,t,n){"use strict";var r=/^[-!#$%&'*+\/0-9=?A-Z^_a-z{|}~](\.?[-!#$%&'*+\/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\.?[a-zA-Z0-9])*\.[a-zA-Z](-?[a-zA-Z0-9])+$/;t.validate=function(e){if(!e)return!1;if(e.length>254)return!1;if(!r.test(e))return!1;var t=e.split("@");return!(t[0].length>64)&&!t[1].split(".").some(function(e){return e.length>63})}},function(e,t){function n(e,t,n,r,i,o,a){try{var s=e[o](a),c=s.value}catch(l){return void n(l)}s.done?t(c):Promise.resolve(c).then(r,i)}e.exports=function(e){return function(){var t=this,r=arguments;return new Promise(function(i,o){var a=e.apply(t,r);function s(e){n(a,i,o,s,c,"next",e)}function c(e){n(a,i,o,s,c,"throw",e)}s(void 0)})}}},function(e,t,n){"use strict";var r=n(3),i=n.n(r),o=n(7),a=n.n(o),s=n(11),c=n.n(s),l=n(8),u=n.n(l),p=n(9),h=n.n(p),d=n(10),m=n.n(d),f=n(0),b=n(12),g=n.n(b),v=n(14),y=n(2),j=n(6),O=n(5),k=n(1),_=window.getComputedStyle,w=Object(y.withFallbackStyles)(function(e,t){var n,r,i,o,a=t.textButtonColor,s=t.backgroundButtonColor,c=s&&s.color,l=a&&a.color;return!l&&e&&(n=e.querySelector('[contenteditable="true"]')),r=e.querySelector(".wp-block-button__link")?e.querySelector(".wp-block-button__link"):e,e&&(i=_(r).backgroundColor),n&&(o=_(n).color),{fallbackBackgroundColor:c||i,fallbackTextColor:l||o}}),E=function(e){function t(){return a()(this,t),u()(this,h()(t).apply(this,arguments))}return m()(t,e),c()(t,[{key:"componentDidUpdate",value:function(e){if(!Object(O.isEqual)(this.props.textButtonColor,e.textButtonColor)||!Object(O.isEqual)(this.props.backgroundButtonColor,e.backgroundButtonColor)){var t=this.getButtonClasses();this.props.setAttributes({submitButtonClasses:t})}}},{key:"getButtonClasses",value:function(){var e,t=this.props,n=t.textButtonColor,r=t.backgroundButtonColor,o=Object(O.get)(n,"class"),a=Object(O.get)(r,"class");return g()("wp-block-button__link",(e={"has-text-color":n},i()(e,o,o),i()(e,"has-background",r),i()(e,a,a),e))}},{key:"render",value:function(){var e=this.props,t=e.attributes,n=e.fallbackBackgroundColor,r=e.fallbackTextColor,i=e.setAttributes,o=e.setBackgroundButtonColor,a=e.setTextButtonColor,s=t.customBackgroundButtonColor||n,c=t.customTextButtonColor||r,l={border:"none",backgroundColor:s,color:c},u=this.getButtonClasses();return Object(f.createElement)(f.Fragment,null,Object(f.createElement)("div",{className:"wp-block-button jetpack-submit-button"},Object(f.createElement)(j.RichText,{placeholder:Object(k.a)("Add text…"),value:t.submitButtonText,onChange:function(e){return i({submitButtonText:e})},className:u,style:l,keepPlaceholderOnFocus:!0,formattingControls:[]})),Object(f.createElement)(j.InspectorControls,null,Object(f.createElement)(j.PanelColorSettings,{title:Object(k.a)("Button Color Settings"),colorSettings:[{value:s,onChange:function(e){o(e),i({customBackgroundButtonColor:e})},label:Object(k.a)("Background Color")},{value:c,onChange:function(e){a(e),i({customTextButtonColor:e})},label:Object(k.a)("Text Color")}]}),Object(f.createElement)(j.ContrastChecker,{textColor:c,backgroundColor:s})))}}]),t}(f.Component);t.a=Object(v.compose)([Object(j.withColors)("backgroundButtonColor",{textButtonColor:"color"}),w])(E)},,function(e,t,n){"use strict";var r=n(13),i=n.n(r),o=n(5),a=n(95),s="Jetpack_Editor_Initial_State";function c(e){var t=Object(o.get)("object"==typeof window?window:null,[s],null),n=Object(o.includes)(a.beta,e),r=Object(o.get)(t,["available_blocks",e,"available"],n),c=Object(o.get)(t,["available_blocks",e,"unavailable_reason"],"unknown");return i()({available:r},!r&&{unavailableReason:c})}n.d(t,"a",function(){return c})},function(e,t){e.exports=wp.editPost},function(e,t,n){"use strict";var r=n(0),i=n(2),o=n(40),a=n(53),s=(n(185),n(43)),c=Object(i.createSlotFill)("JetpackPluginSidebar"),l=c.Fill,u=c.Slot,p=function(e){var t=e.children;return Object(r.createElement)(l,null,t)};p.Slot=function(){return Object(r.createElement)(u,null,function(e){return e.length?Object(r.createElement)(r.Fragment,null,Object(r.createElement)(o.PluginSidebarMoreMenuItem,{target:"jetpack",icon:Object(r.createElement)(s.a,null)},"Jetpack"),Object(r.createElement)(o.PluginSidebar,{name:"jetpack",title:"Jetpack",icon:Object(r.createElement)(s.a,null)},e)):null})},Object(a.registerPlugin)("jetpack-sidebar",{render:function(){return Object(r.createElement)(p.Slot,null)}}),t.a=p},function(e,t,n){"use strict";n.d(t,"a",function(){return o});var r=n(53),i=n(39);function o(e,t){var n=Object(i.a)(e),o=n.available;n.unavailableReason;return!!o&&Object(r.registerPlugin)("jetpack-".concat(e),t)}},function(e,t,n){"use strict";var r=n(0),i=n(2),o=n(12),a=n.n(o);t.a=function(e){var t=e.size,n=void 0===t?24:t,o=e.className;return Object(r.createElement)(i.SVG,{className:a()("jetpack-logo",o),width:n,height:n,viewBox:"0 0 32 32"},Object(r.createElement)(i.Path,{className:"jetpack-logo__icon-circle",fill:"#00be28",d:"M16,0C7.2,0,0,7.2,0,16s7.2,16,16,16s16-7.2,16-16S24.8,0,16,0z"}),Object(r.createElement)(i.Polygon,{className:"jetpack-logo__icon-triangle",fill:"#fff",points:"15,19 7,19 15,3 "}),Object(r.createElement)(i.Polygon,{className:"jetpack-logo__icon-triangle",fill:"#fff",points:"17,29 17,13 25,13 "}))}},function(e,t,n){"use strict";n.d(t,"b",function(){return s}),n.d(t,"a",function(){return c});var r=n(23),i=n.n(r),o=n(22);function a(e,t){var n=(t-e.reduce(function(e,t){return e+t},0))/e.length;return e.map(function(e){return e+n})}function s(e,t){!function(e,t,n){var r=i()(t,2),s=r[0],c=r[1],d=1/s*(n-o.b*(e.childElementCount-1)-c);!function(e,t){var n=t.rawHeight,r=t.rowWidth,i=l(e),s=i.map(function(e){return(n-o.b*(e.childElementCount-1))*p(e)[0]}),c=a(s,r);i.forEach(function(e,t){var r=s[t],i=c[t];!function(e,t){var n=t.colHeight,r=t.width,i=t.rawWidth,o=a(u(e).map(function(e){return i/h(e)}),n);Array.from(e.children).forEach(function(e,t){var n=o[t];e.setAttribute("style","height:".concat(n,"px;width:").concat(r,"px;"))})}(e,{colHeight:n-o.b*(e.childElementCount-1),width:i,rawWidth:r})})}(e,{rawHeight:d,rowWidth:n-o.b*(e.childElementCount-1)})}(e,function(e){return l(e).map(p).reduce(function(e,t){var n=i()(e,2),r=n[0],o=n[1],a=i()(t,2),s=a[0],c=a[1];return[r+s,o+c]},[0,0])}(e),t)}function c(e){return Array.from(e.querySelectorAll(".tiled-gallery__row"))}function l(e){return Array.from(e.querySelectorAll(".tiled-gallery__col"))}function u(e){return Array.from(e.querySelectorAll(".tiled-gallery__item > img, .tiled-gallery__item > a > img"))}function p(e){var t=u(e),n=t.length,r=1/t.map(h).reduce(function(e,t){return e+1/t},0);return[r,r*n||1]}function h(e){var t=parseInt(e.dataset.width,10),n=parseInt(e.dataset.height,10);return t&&!Number.isNaN(t)&&n&&!Number.isNaN(n)?t/n:1}},function(e,t){e.exports=function(e){if(Array.isArray(e))return e}},function(e,t){e.exports=function(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(c){i=!0,o=c}finally{try{r||null==s.return||s.return()}finally{if(i)throw o}}return n}},function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}},function(e,t,n){var r=n(91)(Object,"create");e.exports=r},function(e,t,n){var r=n(214);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},function(e,t,n){var r=n(220);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},function(e,t){e.exports=wp.date},function(e,t,n){"use strict";var r=Object.assign||function(e){for(var t,n=1;n<arguments.length;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e};Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t,n=e.size,i=void 0===n?24:n,o=e.onClick,s=(e.icon,e.className),c=function(e,t){var n={};for(var r in e)0<=t.indexOf(r)||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["size","onClick","icon","className"]),l=["gridicon","gridicons-notice-outline",s,(t=i,!(0!=t%18)&&"needs-offset"),!1,!1].filter(Boolean).join(" ");return a.default.createElement("svg",r({className:l,height:i,width:i,onClick:o},c,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"}),a.default.createElement("g",null,a.default.createElement("path",{d:"M12 4c4.41 0 8 3.59 8 8s-3.59 8-8 8-8-3.59-8-8 3.59-8 8-8m0-2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 13h-2v2h2v-2zm-2-2h2l.5-6h-3l.5 6z"})))};var i,o=n(109),a=(i=o)&&i.__esModule?i:{default:i};e.exports=t.default},function(e,t){e.exports=wp.plugins},function(e,t,n){var r=n(32),i=n(251),o=n(252),a=n(253)("photon");e.exports=function(e,t){var n=r.parse(e,!0,!0),c="https:"===n.protocol;delete n.protocol,delete n.auth,delete n.port;var l={slashes:!0,protocol:"https:",query:{}};if(f=n.host,/^i[0-2]\.wp\.com$/.test(f))l.pathname=n.pathname,l.hostname=n.hostname;else{if(n.search)return null;var u=r.format(n);l.pathname=0===u.indexOf("//")?u.substring(1):u,l.hostname=(p=l.pathname,h=i(p),d=o(h),m="i"+Math.floor(3*d()),a('determined server "%s" to use with "%s"',m,p),m+".wp.com"),c&&(l.query.ssl=1)}var p,h,d,m;var f;if(t)for(var b in t)"host"!==b&&"hostname"!==b?"secure"!==b||t[b]?l.query[s[b]||b]=t[b]:l.protocol="http:":l.hostname=t[b];var g=r.format(l);return a("generated Photon URL: %s",g),g};var s={width:"w",height:"h",letterboxing:"lb",removeLetterboxing:"ulb"}},function(e,t,n){"use strict";n.d(t,"a",function(){return c});var r=n(23),i=n.n(r),o=n(36),a=n.n(o),s=n(5);n(93);function c(){return l.apply(this,arguments)}function l(){return(l=a()(regeneratorRuntime.mark(function e(){var t,r,o,a,c,l,u,p=arguments;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t=p.length>0&&void 0!==p[0]?p[0]:".swiper-container",r=p.length>1&&void 0!==p[1]?p[1]:{},o=p.length>2&&void 0!==p[2]?p[2]:{},a={effect:"slide",grabCursor:!0,init:!0,initialSlide:0,navigation:{nextEl:".swiper-button-next",prevEl:".swiper-button-prev"},pagination:{bulletElement:"button",clickable:!0,el:".swiper-pagination",type:"bullets"},preventClicksPropagation:!1,releaseFormElements:!1,setWrapperSize:!0,touchStartPreventDefault:!1,on:Object(s.mapValues)(o,function(e){return function(){e(this)}})},e.next=6,Promise.all([n.e(10).then(n.t.bind(null,279,7)),n.e(10).then(n.t.bind(null,280,7))]);case 6:return c=e.sent,l=i()(c,1),u=l[0].default,e.abrupt("return",new u(t,Object(s.merge)({},a,r)));case 10:case"end":return e.stop()}},e)}))).apply(this,arguments)}},function(e,t){e.exports=wp.escapeHtml},function(e,t,n){"use strict";var r=n(23),i=n.n(r),o=n(7),a=n.n(o),s=n(11),c=n.n(s),l=n(8),u=n.n(l),p=n(9),h=n.n(p),d=n(4),m=n.n(d),f=n(10),b=n.n(f),g=n(3),v=n.n(g),y=n(0),j=n(1),O=n(5),k=n(2),_=(n(76),function(e){function t(){var e,n;a()(this,t);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=u()(this,(e=h()(t)).call.apply(e,[this].concat(i))),v()(m()(n),"handleClick",function(){(0,n.props.onClick)(m()(n))}),v()(m()(n),"getPoint",function(){var e=n.props.point;return[e.coordinates.longitude,e.coordinates.latitude]}),n}return b()(t,e),c()(t,[{key:"componentDidMount",value:function(){this.renderMarker()}},{key:"componentWillUnmount",value:function(){this.marker&&this.marker.remove()}},{key:"componentDidUpdate",value:function(){this.renderMarker()}},{key:"renderMarker",value:function(){var e=this.props,t=e.map,n=e.point,r=e.mapboxgl,i=e.markerColor,o=this.handleClick,a=[n.coordinates.longitude,n.coordinates.latitude],s=this.marker?this.marker.getElement():document.createElement("div");this.marker?this.marker.setLngLat(a):(s.className="wp-block-jetpack-map-marker",this.marker=new r.Marker(s).setLngLat(a).setOffset([0,-19]).addTo(t),this.marker.getElement().addEventListener("click",o)),s.innerHTML='<?xml version="1.0" encoding="UTF-8"?><svg version="1.1" viewBox="0 0 32 38" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g fill-rule="evenodd"><path id="d" d="m16 38s16-11.308 16-22-7.1634-16-16-16-16 5.3076-16 16 16 22 16 22z" fill="'+i+'" mask="url(#c)"/></g></svg>'}},{key:"render",value:function(){return null}}]),t}(y.Component));_.defaultProps={point:{},map:null,markerColor:"#000000",mapboxgl:null,onClick:function(){}};var w=_,E=function(e){function t(){var e,n;a()(this,t);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=u()(this,(e=h()(t)).call.apply(e,[this].concat(i))),v()(m()(n),"closeClick",function(){n.props.unsetActiveMarker()}),n}return b()(t,e),c()(t,[{key:"componentDidMount",value:function(){var e=this.props.mapboxgl;this.el=document.createElement("DIV"),this.infowindow=new e.Popup({closeButton:!0,closeOnClick:!1,offset:{left:[0,0],top:[0,5],right:[0,0],bottom:[0,-40]}}),this.infowindow.setDOMContent(this.el),this.infowindow.on("close",this.closeClick)}},{key:"componentDidUpdate",value:function(e){this.props.activeMarker!==e.activeMarker&&(this.props.activeMarker?this.openWindow():this.closeWindow())}},{key:"render",value:function(){return this.el?Object(y.createPortal)(this.props.children,this.el):null}},{key:"openWindow",value:function(){var e=this.props,t=e.map,n=e.activeMarker;this.infowindow.setLngLat(n.getPoint()).addTo(t)}},{key:"closeWindow",value:function(){this.infowindow.remove()}}]),t}(y.Component);E.defaultProps={unsetActiveMarker:function(){},activeMarker:null,map:null,mapboxgl:null};var C=E;var x=function(e){function t(){var e;return a()(this,t),e=u()(this,h()(t).apply(this,arguments)),v()(m()(e),"onMarkerClick",function(t){var n=e.props.onMarkerClick;e.setState({activeMarker:t}),n()}),v()(m()(e),"onMapClick",function(){e.setState({activeMarker:null})}),v()(m()(e),"clearCurrentMarker",function(){e.setState({activeMarker:null})}),v()(m()(e),"updateActiveMarker",function(t){var n=e.props.points,r=e.state.activeMarker.props.index,i=n.slice(0);Object(O.assign)(i[r],t),e.props.onSetPoints(i)}),v()(m()(e),"deleteActiveMarker",function(){var t=e.props.points,n=e.state.activeMarker.props.index,r=t.slice(0);r.splice(n,1),e.props.onSetPoints(r),e.setState({activeMarker:null})}),v()(m()(e),"sizeMap",function(){var t=e.state.map,n=e.mapRef.current,r=n.offsetWidth,i=.8*window.innerHeight,o=Math.min(.75*r,i);n.style.height=o+"px",t.resize(),e.setBoundsByMarkers()}),v()(m()(e),"setBoundsByMarkers",function(){var t=e.props,n=t.zoom,r=t.points,i=t.onSetZoom,o=e.state,a=o.map,s=o.activeMarker,c=o.mapboxgl,l=o.zoomControl,u=o.boundsSetProgrammatically;if(a&&r.length&&!s){var p=new c.LngLatBounds;if(r.forEach(function(e){p.extend([e.coordinates.longitude,e.coordinates.latitude])}),r.length>1)return a.fitBounds(p,{padding:{top:40,bottom:40,left:20,right:20}}),e.setState({boundsSetProgrammatically:!0}),void a.removeControl(l);if(a.setCenter(p.getCenter()),u){a.setZoom(12),i(12)}else a.setZoom(parseInt(n,10));a.addControl(l),e.setState({boundsSetProgrammatically:!1})}}),v()(m()(e),"scriptsLoaded",function(){var t=e.props,n=t.mapCenter,r=t.points;e.setState({loaded:!0}),r.length,e.initMap(n)}),e.state={map:null,fit_to_bounds:!1,loaded:!1,mapboxgl:null},e.mapRef=Object(y.createRef)(),e.debouncedSizeMap=Object(O.debounce)(e.sizeMap,250),e}return b()(t,e),c()(t,[{key:"render",value:function(){var e=this,t=this.props,n=t.points,r=t.admin,i=t.children,o=t.markerColor,a=this.state,s=a.map,c=a.activeMarker,l=a.mapboxgl,u=this.onMarkerClick,p=this.deleteActiveMarker,h=this.updateActiveMarker,d=Object(O.get)(c,"props.point")||{},m=d.title,f=d.caption,b=y.Children.map(i,function(e){if("AddPoint"===Object(O.get)(e,"props.tagName"))return e}),g=s&&l&&n.map(function(e,t){return Object(y.createElement)(w,{key:t,point:e,index:t,map:s,mapboxgl:l,markerColor:o,onClick:u})}),v=l&&Object(y.createElement)(C,{activeMarker:c,map:s,mapboxgl:l,unsetActiveMarker:function(){return e.setState({activeMarker:null})}},c&&r&&Object(y.createElement)(y.Fragment,null,Object(y.createElement)(k.TextControl,{label:Object(j.a)("Marker Title"),value:m,onChange:function(e){return h({title:e})}}),Object(y.createElement)(k.TextareaControl,{className:"wp-block-jetpack-map__marker-caption",label:Object(j.a)("Marker Caption"),value:f,rows:"2",tag:"textarea",onChange:function(e){return h({caption:e})}}),Object(y.createElement)(k.Button,{onClick:p,className:"wp-block-jetpack-map__delete-btn"},Object(y.createElement)(k.Dashicon,{icon:"trash",size:"15"})," ",Object(j.a)("Delete Marker"))),c&&!r&&Object(y.createElement)(y.Fragment,null,Object(y.createElement)("h3",null,m),Object(y.createElement)("p",null,f)));return Object(y.createElement)(y.Fragment,null,Object(y.createElement)("div",{className:"wp-block-jetpack-map__gm-container",ref:this.mapRef},g),v,b)}},{key:"componentDidMount",value:function(){this.props.apiKey&&this.loadMapLibraries()}},{key:"componentWillUnmount",value:function(){this.debouncedSizeMap.cancel()}},{key:"componentDidUpdate",value:function(e){var t=this.props,n=t.apiKey,r=t.children,i=t.points,o=t.mapStyle,a=t.mapDetails,s=this.state.map;n&&n.length>0&&n!==e.apiKey&&this.loadMapLibraries(),r!==e.children&&!1!==r&&this.clearCurrentMarker(),i!==e.points&&this.setBoundsByMarkers(),i.length!==e.points.length&&this.clearCurrentMarker(),o===e.mapStyle&&a===e.mapDetails||s.setStyle(this.getMapStyle())}},{key:"getMapStyle",value:function(){var e=this.props;return function(e,t){return{default:{details:"mapbox://styles/automattic/cjolkhmez0qdd2ro82dwog1in",no_details:"mapbox://styles/automattic/cjolkci3905d82soef4zlmkdo"},black_and_white:{details:"mapbox://styles/automattic/cjolkixvv0ty42spgt2k4j434",no_details:"mapbox://styles/automattic/cjolkgc540tvj2spgzzoq37k4"},satellite:{details:"mapbox://styles/mapbox/satellite-streets-v10",no_details:"mapbox://styles/mapbox/satellite-v9"},terrain:{details:"mapbox://styles/automattic/cjolkf8p405fh2soet2rdt96b",no_details:"mapbox://styles/automattic/cjolke6fz12ys2rpbpvgl12ha"}}[e][t?"details":"no_details"]}(e.mapStyle,e.mapDetails)}},{key:"getMapType",value:function(){switch(this.props.mapStyle){case"satellite":return"HYBRID";case"terrain":return"TERRAIN";case"black_and_white":default:return"ROADMAP"}}},{key:"loadMapLibraries",value:function(){var e=this,t=this.props.apiKey;Promise.all([n.e(9).then(n.t.bind(null,310,7)),n.e(9).then(n.t.bind(null,311,7))]).then(function(n){var r=i()(n,1)[0].default;r.accessToken=t,e.setState({mapboxgl:r},e.scriptsLoaded)})}},{key:"initMap",value:function(e){var t=this,n=this.state.mapboxgl,r=this.props,i=r.zoom,o=r.onMapLoaded,a=r.onError,s=r.admin,c=null;try{c=new n.Map({container:this.mapRef.current,style:this.getMapStyle(),center:this.googlePoint2Mapbox(e),zoom:parseInt(i,10),pitchWithRotate:!1,attributionControl:!1,dragRotate:!1})}catch(u){return void a("mapbox_error",u.message)}c.on("error",function(e){a("mapbox_error",e.error.message)});var l=new n.NavigationControl({showCompass:!1,showZoom:!0});c.on("zoomend",function(){t.props.onSetZoom(c.getZoom())}),c.getCanvas().addEventListener("click",this.onMapClick),this.setState({map:c,zoomControl:l},function(){t.debouncedSizeMap(),c.addControl(l),s||c.addControl(new n.FullscreenControl),t.mapRef.current.addEventListener("alignmentChanged",t.debouncedSizeMap),c.resize(),o(),t.setState({loaded:!0}),window.addEventListener("resize",t.debouncedSizeMap)})}},{key:"googlePoint2Mapbox",value:function(e){return[e.longitude?e.longitude:0,e.latitude?e.latitude:0]}}]),t}(y.Component);x.defaultProps={points:[],mapStyle:"default",zoom:13,onSetZoom:function(){},onMapLoaded:function(){},onMarkerClick:function(){},onError:function(){},markerColor:"red",apiKey:null,mapCenter:{}};t.a=x},function(e,t){e.exports=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4E\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/},function(e,t,n){"use strict";function r(){this.__rules__=[],this.__cache__=null}r.prototype.__find__=function(e){for(var t=0;t<this.__rules__.length;t++)if(this.__rules__[t].name===e)return t;return-1},r.prototype.__compile__=function(){var e=this,t=[""];e.__rules__.forEach(function(e){e.enabled&&e.alt.forEach(function(e){t.indexOf(e)<0&&t.push(e)})}),e.__cache__={},t.forEach(function(t){e.__cache__[t]=[],e.__rules__.forEach(function(n){n.enabled&&(t&&n.alt.indexOf(t)<0||e.__cache__[t].push(n.fn))})})},r.prototype.at=function(e,t,n){var r=this.__find__(e),i=n||{};if(-1===r)throw new Error("Parser rule not found: "+e);this.__rules__[r].fn=t,this.__rules__[r].alt=i.alt||[],this.__cache__=null},r.prototype.before=function(e,t,n,r){var i=this.__find__(e),o=r||{};if(-1===i)throw new Error("Parser rule not found: "+e);this.__rules__.splice(i,0,{name:t,enabled:!0,fn:n,alt:o.alt||[]}),this.__cache__=null},r.prototype.after=function(e,t,n,r){var i=this.__find__(e),o=r||{};if(-1===i)throw new Error("Parser rule not found: "+e);this.__rules__.splice(i+1,0,{name:t,enabled:!0,fn:n,alt:o.alt||[]}),this.__cache__=null},r.prototype.push=function(e,t,n){var r=n||{};this.__rules__.push({name:e,enabled:!0,fn:t,alt:r.alt||[]}),this.__cache__=null},r.prototype.enable=function(e,t){Array.isArray(e)||(e=[e]);var n=[];return e.forEach(function(e){var r=this.__find__(e);if(r<0){if(t)return;throw new Error("Rules manager: invalid rule name "+e)}this.__rules__[r].enabled=!0,n.push(e)},this),this.__cache__=null,n},r.prototype.enableOnly=function(e,t){Array.isArray(e)||(e=[e]),this.__rules__.forEach(function(e){e.enabled=!1}),this.enable(e,t)},r.prototype.disable=function(e,t){Array.isArray(e)||(e=[e]);var n=[];return e.forEach(function(e){var r=this.__find__(e);if(r<0){if(t)return;throw new Error("Rules manager: invalid rule name "+e)}this.__rules__[r].enabled=!1,n.push(e)},this),this.__cache__=null,n},r.prototype.getRules=function(e){return null===this.__cache__&&this.__compile__(),this.__cache__[e]||[]},e.exports=r},function(e,t,n){"use strict";function r(e,t,n){this.type=e,this.tag=t,this.attrs=null,this.map=null,this.nesting=n,this.level=0,this.children=null,this.content="",this.markup="",this.info="",this.meta=null,this.block=!1,this.hidden=!1}r.prototype.attrIndex=function(e){var t,n,r;if(!this.attrs)return-1;for(n=0,r=(t=this.attrs).length;n<r;n++)if(t[n][0]===e)return n;return-1},r.prototype.attrPush=function(e){this.attrs?this.attrs.push(e):this.attrs=[e]},r.prototype.attrSet=function(e,t){var n=this.attrIndex(e),r=[e,t];n<0?this.attrPush(r):this.attrs[n]=r},r.prototype.attrGet=function(e){var t=this.attrIndex(e),n=null;return t>=0&&(n=this.attrs[t][1]),n},r.prototype.attrJoin=function(e,t){var n=this.attrIndex(e);n<0?this.attrPush([e,t]):this.attrs[n][1]=this.attrs[n][1]+" "+t},e.exports=r},function(e,t){var n=Array.isArray;e.exports=n},function(e,t,n){var r=n(90),i=n(193),o="[object Symbol]";e.exports=function(e){return"symbol"==typeof e||i(e)&&r(e)==o}},function(e,t,n){var r=n(64).Symbol;e.exports=r},function(e,t,n){var r=n(190),i="object"==typeof self&&self&&self.Object===Object&&self,o=r||i||Function("return this")();e.exports=o},function(e,t,n){e.exports=function(){"use strict";var e=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)},t=m,n=s,r=function(e){return c(s(e))},i=c,o=d,a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^()])+)\\))?|\\(((?:\\\\.|[^()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function s(e){for(var t,n=[],r=0,i=0,o="";null!=(t=a.exec(e));){var s=t[0],c=t[1],l=t.index;if(o+=e.slice(i,l),i=l+s.length,c)o+=c[1];else{o&&(n.push(o),o="");var p=t[2],h=t[3],d=t[4],m=t[5],f=t[6],b=t[7],g="+"===f||"*"===f,v="?"===f||"*"===f,y=p||"/",j=d||m||(b?".*":"[^"+y+"]+?");n.push({name:h||r++,prefix:p||"",delimiter:y,optional:v,repeat:g,pattern:u(j)})}}return i<e.length&&(o+=e.substr(i)),o&&n.push(o),n}function c(t){for(var n=new Array(t.length),r=0;r<t.length;r++)"object"==typeof t[r]&&(n[r]=new RegExp("^"+t[r].pattern+"$"));return function(r){for(var i="",o=r||{},a=0;a<t.length;a++){var s=t[a];if("string"!=typeof s){var c,l=o[s.name];if(null==l){if(s.optional)continue;throw new TypeError('Expected "'+s.name+'" to be defined')}if(e(l)){if(!s.repeat)throw new TypeError('Expected "'+s.name+'" to not repeat, but received "'+l+'"');if(0===l.length){if(s.optional)continue;throw new TypeError('Expected "'+s.name+'" to not be empty')}for(var u=0;u<l.length;u++){if(c=encodeURIComponent(l[u]),!n[a].test(c))throw new TypeError('Expected all "'+s.name+'" to match "'+s.pattern+'", but received "'+c+'"');i+=(0===u?s.prefix:s.delimiter)+c}}else{if(c=encodeURIComponent(l),!n[a].test(c))throw new TypeError('Expected "'+s.name+'" to match "'+s.pattern+'", but received "'+c+'"');i+=s.prefix+c}}else i+=s}return i}}function l(e){return e.replace(/([.+*?=^!:${}()[\]|\/])/g,"\\$1")}function u(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function p(e,t){return e.keys=t,e}function h(e){return e.sensitive?"":"i"}function d(e,t){for(var n=(t=t||{}).strict,r=!1!==t.end,i="",o=e[e.length-1],a="string"==typeof o&&/\/$/.test(o),s=0;s<e.length;s++){var c=e[s];if("string"==typeof c)i+=l(c);else{var u=l(c.prefix),p=c.pattern;c.repeat&&(p+="(?:"+u+p+")*"),p=c.optional?u?"(?:"+u+"("+p+"))?":"("+p+")?":u+"("+p+")",i+=p}}return n||(i=(a?i.slice(0,-2):i)+"(?:\\/(?=$))?"),i+=r?"$":n&&a?"":"(?=\\/|$)",new RegExp("^"+i,h(t))}function m(t,n,r){return e(n=n||[])?r||(r={}):(r=n,n=[]),t instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,pattern:null});return p(e,t)}(t,n):e(t)?function(e,t,n){for(var r=[],i=0;i<e.length;i++)r.push(m(e[i],t,n).source);return p(new RegExp("(?:"+r.join("|")+")",h(n)),t)}(t,n,r):function(e,t,n){for(var r=s(e),i=d(r,n),o=0;o<r.length;o++)"string"!=typeof r[o]&&t.push(r[o]);return p(i,t)}(t,n,r)}t.parse=n,t.compile=r,t.tokensToFunction=i,t.tokensToRegExp=o;var f,b="undefined"!=typeof document,g="undefined"!=typeof window,v="undefined"!=typeof history,y="undefined"!=typeof process,j=b&&document.ontouchstart?"touchstart":"click",O=g&&!(!window.history.location&&!window.location);function k(){this.callbacks=[],this.exits=[],this.current="",this.len=0,this._decodeURLComponents=!0,this._base="",this._strict=!1,this._running=!1,this._hashbang=!1,this.clickHandler=this.clickHandler.bind(this),this._onpopstate=this._onpopstate.bind(this)}function _(e,t){if("function"==typeof e)return _.call(this,"*",e);if("function"==typeof t)for(var n=new E(e,null,this),r=1;r<arguments.length;++r)this.callbacks.push(n.middleware(arguments[r]));else"string"==typeof e?this["string"==typeof t?"redirect":"show"](e,t):this.start(e)}function w(e,t,n){var r=this.page=n||_,i=r._window,o=r._hashbang,a=r._getBase();"/"===e[0]&&0!==e.indexOf(a)&&(e=a+(o?"#!":"")+e);var s=e.indexOf("?");this.canonicalPath=e;var c=new RegExp("^"+a.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1"));if(this.path=e.replace(c,"")||"/",o&&(this.path=this.path.replace("#!","")||"/"),this.title=b&&i.document.title,this.state=t||{},this.state.path=e,this.querystring=~s?r._decodeURLEncodedURIComponent(e.slice(s+1)):"",this.pathname=r._decodeURLEncodedURIComponent(~s?e.slice(0,s):e),this.params={},this.hash="",!o){if(!~this.path.indexOf("#"))return;var l=this.path.split("#");this.path=this.pathname=l[0],this.hash=r._decodeURLEncodedURIComponent(l[1])||"",this.querystring=this.querystring.split("#")[0]}}function E(e,n,r){this.page=r||C;var i=n||{};i.strict=i.strict||r._strict,this.path="*"===e?"(.*)":e,this.method="GET",this.regexp=t(this.path,this.keys=[],i)}k.prototype.configure=function(e){var t=e||{};this._window=t.window||g&&window,this._decodeURLComponents=!1!==t.decodeURLComponents,this._popstate=!1!==t.popstate&&g,this._click=!1!==t.click&&b,this._hashbang=!!t.hashbang;var n=this._window;this._popstate?n.addEventListener("popstate",this._onpopstate,!1):g&&n.removeEventListener("popstate",this._onpopstate,!1),this._click?n.document.addEventListener(j,this.clickHandler,!1):b&&n.document.removeEventListener(j,this.clickHandler,!1),this._hashbang&&g&&!v?n.addEventListener("hashchange",this._onpopstate,!1):g&&n.removeEventListener("hashchange",this._onpopstate,!1)},k.prototype.base=function(e){if(0===arguments.length)return this._base;this._base=e},k.prototype._getBase=function(){var e=this._base;if(e)return e;var t=g&&this._window&&this._window.location;return g&&this._hashbang&&t&&"file:"===t.protocol&&(e=t.pathname),e},k.prototype.strict=function(e){if(0===arguments.length)return this._strict;this._strict=e},k.prototype.start=function(e){var t=e||{};if(this.configure(t),!1!==t.dispatch){var n;if(this._running=!0,O){var r=this._window,i=r.location;n=this._hashbang&&~i.hash.indexOf("#!")?i.hash.substr(2)+i.search:this._hashbang?i.search+i.hash:i.pathname+i.search+i.hash}this.replace(n,null,!0,t.dispatch)}},k.prototype.stop=function(){if(this._running){this.current="",this.len=0,this._running=!1;var e=this._window;this._click&&e.document.removeEventListener(j,this.clickHandler,!1),g&&e.removeEventListener("popstate",this._onpopstate,!1),g&&e.removeEventListener("hashchange",this._onpopstate,!1)}},k.prototype.show=function(e,t,n,r){var i=new w(e,t,this),o=this.prevContext;return this.prevContext=i,this.current=i.path,!1!==n&&this.dispatch(i,o),!1!==i.handled&&!1!==r&&i.pushState(),i},k.prototype.back=function(e,t){var n=this;if(this.len>0){var r=this._window;v&&r.history.back(),this.len--}else e?setTimeout(function(){n.show(e,t)}):setTimeout(function(){n.show(n._getBase(),t)})},k.prototype.redirect=function(e,t){var n=this;"string"==typeof e&&"string"==typeof t&&_.call(this,e,function(e){setTimeout(function(){n.replace(t)},0)}),"string"==typeof e&&void 0===t&&setTimeout(function(){n.replace(e)},0)},k.prototype.replace=function(e,t,n,r){var i=new w(e,t,this),o=this.prevContext;return this.prevContext=i,this.current=i.path,i.init=n,i.save(),!1!==r&&this.dispatch(i,o),i},k.prototype.dispatch=function(e,t){var n=0,r=0,i=this;function o(){var t=i.callbacks[n++];if(e.path===i.current)return t?void t(e,o):function(e){if(!e.handled){var t=this._window;(this._hashbang?O&&this._getBase()+t.location.hash.replace("#!",""):O&&t.location.pathname+t.location.search)!==e.canonicalPath&&(this.stop(),e.handled=!1,O&&(t.location.href=e.canonicalPath))}}.call(i,e);e.handled=!1}t?function e(){var n=i.exits[r++];if(!n)return o();n(t,e)}():o()},k.prototype.exit=function(e,t){if("function"==typeof e)return this.exit("*",e);for(var n=new E(e,null,this),r=1;r<arguments.length;++r)this.exits.push(n.middleware(arguments[r]))},k.prototype.clickHandler=function(e){if(1===this._which(e)&&!(e.metaKey||e.ctrlKey||e.shiftKey||e.defaultPrevented)){var t=e.target,n=e.path||(e.composedPath?e.composedPath():null);if(n)for(var r=0;r<n.length;r++)if(n[r].nodeName&&"A"===n[r].nodeName.toUpperCase()&&n[r].href){t=n[r];break}for(;t&&"A"!==t.nodeName.toUpperCase();)t=t.parentNode;if(t&&"A"===t.nodeName.toUpperCase()){var i="object"==typeof t.href&&"SVGAnimatedString"===t.href.constructor.name;if(!t.hasAttribute("download")&&"external"!==t.getAttribute("rel")){var o=t.getAttribute("href");if((this._hashbang||!this._samePath(t)||!t.hash&&"#"!==o)&&!(o&&o.indexOf("mailto:")>-1)&&(i?!t.target.baseVal:!t.target)&&(i||this.sameOrigin(t.href))){var a=i?t.href.baseVal:t.pathname+t.search+(t.hash||"");a="/"!==a[0]?"/"+a:a,y&&a.match(/^\/[a-zA-Z]:\//)&&(a=a.replace(/^\/[a-zA-Z]:\//,"/"));var s=a,c=this._getBase();0===a.indexOf(c)&&(a=a.substr(c.length)),this._hashbang&&(a=a.replace("#!","")),(!c||s!==a||O&&"file:"===this._window.location.protocol)&&(e.preventDefault(),this.show(s))}}}}},k.prototype._onpopstate=(f=!1,g?(b&&"complete"===document.readyState?f=!0:window.addEventListener("load",function(){setTimeout(function(){f=!0},0)}),function(e){if(f)if(e.state){var t=e.state.path;this.replace(t,e.state)}else if(O){var n=this._window.location;this.show(n.pathname+n.search+n.hash,void 0,void 0,!1)}}):function(){}),k.prototype._which=function(e){return null==(e=e||g&&this._window.event).which?e.button:e.which},k.prototype._toURL=function(e){var t=this._window;if("function"==typeof URL&&O)return new URL(e,t.location.toString());if(b){var n=t.document.createElement("a");return n.href=e,n}},k.prototype.sameOrigin=function(e){if(!e||!O)return!1;var t=this._toURL(e),n=this._window,r=n.location;return r.protocol===t.protocol&&r.hostname===t.hostname&&r.port===t.port},k.prototype._samePath=function(e){if(!O)return!1;var t=this._window,n=t.location;return e.pathname===n.pathname&&e.search===n.search},k.prototype._decodeURLEncodedURIComponent=function(e){return"string"!=typeof e?e:this._decodeURLComponents?decodeURIComponent(e.replace(/\+/g," ")):e},w.prototype.pushState=function(){var e=this.page,t=e._window,n=e._hashbang;e.len++,v&&t.history.pushState(this.state,this.title,n&&"/"!==this.path?"#!"+this.path:this.canonicalPath)},w.prototype.save=function(){var e=this.page;v&&e._window.history.replaceState(this.state,this.title,e._hashbang&&"/"!==this.path?"#!"+this.path:this.canonicalPath)},E.prototype.middleware=function(e){var t=this;return function(n,r){if(t.match(n.path,n.params))return e(n,r);r()}},E.prototype.match=function(e,t){var n=this.keys,r=e.indexOf("?"),i=~r?e.slice(0,r):e,o=this.regexp.exec(decodeURIComponent(i));if(!o)return!1;for(var a=1,s=o.length;a<s;++a){var c=n[a-1],l=this.page._decodeURLEncodedURIComponent(o[a]);void 0===l&&hasOwnProperty.call(t,c.name)||(t[c.name]=l)}return!0};var C=function e(){var t=new k;function n(){return _.apply(t,arguments)}return n.callbacks=t.callbacks,n.exits=t.exits,n.base=t.base.bind(t),n.strict=t.strict.bind(t),n.start=t.start.bind(t),n.stop=t.stop.bind(t),n.show=t.show.bind(t),n.back=t.back.bind(t),n.redirect=t.redirect.bind(t),n.replace=t.replace.bind(t),n.dispatch=t.dispatch.bind(t),n.exit=t.exit.bind(t),n.configure=t.configure.bind(t),n.sameOrigin=t.sameOrigin.bind(t),n.clickHandler=t.clickHandler.bind(t),n.create=e,Object.defineProperty(n,"len",{get:function(){return t.len},set:function(e){t.len=e}}),Object.defineProperty(n,"current",{get:function(){return t.current},set:function(e){t.current=e}}),n.Context=w,n.Route=E,n}(),x=C,S=C;return x.default=S,x}()},function(e,t,n){"use strict";var r=n(228),i=n(229);function o(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}t.parse=y,t.resolve=function(e,t){return y(e,!1,!0).resolve(t)},t.resolveObject=function(e,t){return e?y(e,!1,!0).resolveObject(t):t},t.format=function(e){i.isString(e)&&(e=y(e));return e instanceof o?e.format():o.prototype.format.call(e)},t.Url=o;var a=/^([a-z0-9.+-]+:)/i,s=/:[0-9]*$/,c=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,l=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),u=["'"].concat(l),p=["%","/","?",";","#"].concat(u),h=["/","?","#"],d=/^[+a-z0-9A-Z_-]{0,63}$/,m=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,f={javascript:!0,"javascript:":!0},b={javascript:!0,"javascript:":!0},g={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},v=n(230);function y(e,t,n){if(e&&i.isObject(e)&&e instanceof o)return e;var r=new o;return r.parse(e,t,n),r}o.prototype.parse=function(e,t,n){if(!i.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var o=e.indexOf("?"),s=-1!==o&&o<e.indexOf("#")?"?":"#",l=e.split(s);l[0]=l[0].replace(/\\/g,"/");var y=e=l.join(s);if(y=y.trim(),!n&&1===e.split("#").length){var j=c.exec(y);if(j)return this.path=y,this.href=y,this.pathname=j[1],j[2]?(this.search=j[2],this.query=t?v.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search="",this.query={}),this}var O=a.exec(y);if(O){var k=(O=O[0]).toLowerCase();this.protocol=k,y=y.substr(O.length)}if(n||O||y.match(/^\/\/[^@\/]+@[^@\/]+/)){var _="//"===y.substr(0,2);!_||O&&b[O]||(y=y.substr(2),this.slashes=!0)}if(!b[O]&&(_||O&&!g[O])){for(var w,E,C=-1,x=0;x<h.length;x++){-1!==(S=y.indexOf(h[x]))&&(-1===C||S<C)&&(C=S)}-1!==(E=-1===C?y.lastIndexOf("@"):y.lastIndexOf("@",C))&&(w=y.slice(0,E),y=y.slice(E+1),this.auth=decodeURIComponent(w)),C=-1;for(x=0;x<p.length;x++){var S;-1!==(S=y.indexOf(p[x]))&&(-1===C||S<C)&&(C=S)}-1===C&&(C=y.length),this.host=y.slice(0,C),y=y.slice(C),this.parseHost(),this.hostname=this.hostname||"";var A="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!A)for(var M=this.hostname.split(/\./),T=(x=0,M.length);x<T;x++){var z=M[x];if(z&&!z.match(d)){for(var D="",F=0,N=z.length;F<N;F++)z.charCodeAt(F)>127?D+="x":D+=z[F];if(!D.match(d)){var P=M.slice(0,x),R=M.slice(x+1),I=z.match(m);I&&(P.push(I[1]),R.unshift(I[2])),R.length&&(y="/"+R.join(".")+y),this.hostname=P.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),A||(this.hostname=r.toASCII(this.hostname));var L=this.port?":"+this.port:"",B=this.hostname||"";this.host=B+L,this.href+=this.host,A&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==y[0]&&(y="/"+y))}if(!f[k])for(x=0,T=u.length;x<T;x++){var q=u[x];if(-1!==y.indexOf(q)){var V=encodeURIComponent(q);V===q&&(V=escape(q)),y=y.split(q).join(V)}}var H=y.indexOf("#");-1!==H&&(this.hash=y.substr(H),y=y.slice(0,H));var U=y.indexOf("?");if(-1!==U?(this.search=y.substr(U),this.query=y.substr(U+1),t&&(this.query=v.parse(this.query)),y=y.slice(0,U)):t&&(this.search="",this.query={}),y&&(this.pathname=y),g[k]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){L=this.pathname||"";var G=this.search||"";this.path=L+G}return this.href=this.format(),this},o.prototype.format=function(){var e=this.auth||"";e&&(e=(e=encodeURIComponent(e)).replace(/%3A/i,":"),e+="@");var t=this.protocol||"",n=this.pathname||"",r=this.hash||"",o=!1,a="";this.host?o=e+this.host:this.hostname&&(o=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(o+=":"+this.port)),this.query&&i.isObject(this.query)&&Object.keys(this.query).length&&(a=v.stringify(this.query));var s=this.search||a&&"?"+a||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||g[t])&&!1!==o?(o="//"+(o||""),n&&"/"!==n.charAt(0)&&(n="/"+n)):o||(o=""),r&&"#"!==r.charAt(0)&&(r="#"+r),s&&"?"!==s.charAt(0)&&(s="?"+s),t+o+(n=n.replace(/[?#]/g,function(e){return encodeURIComponent(e)}))+(s=s.replace("#","%23"))+r},o.prototype.resolve=function(e){return this.resolveObject(y(e,!1,!0)).format()},o.prototype.resolveObject=function(e){if(i.isString(e)){var t=new o;t.parse(e,!1,!0),e=t}for(var n=new o,r=Object.keys(this),a=0;a<r.length;a++){var s=r[a];n[s]=this[s]}if(n.hash=e.hash,""===e.href)return n.href=n.format(),n;if(e.slashes&&!e.protocol){for(var c=Object.keys(e),l=0;l<c.length;l++){var u=c[l];"protocol"!==u&&(n[u]=e[u])}return g[n.protocol]&&n.hostname&&!n.pathname&&(n.path=n.pathname="/"),n.href=n.format(),n}if(e.protocol&&e.protocol!==n.protocol){if(!g[e.protocol]){for(var p=Object.keys(e),h=0;h<p.length;h++){var d=p[h];n[d]=e[d]}return n.href=n.format(),n}if(n.protocol=e.protocol,e.host||b[e.protocol])n.pathname=e.pathname;else{for(var m=(e.pathname||"").split("/");m.length&&!(e.host=m.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==m[0]&&m.unshift(""),m.length<2&&m.unshift(""),n.pathname=m.join("/")}if(n.search=e.search,n.query=e.query,n.host=e.host||"",n.auth=e.auth,n.hostname=e.hostname||e.host,n.port=e.port,n.pathname||n.search){var f=n.pathname||"",v=n.search||"";n.path=f+v}return n.slashes=n.slashes||e.slashes,n.href=n.format(),n}var y=n.pathname&&"/"===n.pathname.charAt(0),j=e.host||e.pathname&&"/"===e.pathname.charAt(0),O=j||y||n.host&&e.pathname,k=O,_=n.pathname&&n.pathname.split("/")||[],w=(m=e.pathname&&e.pathname.split("/")||[],n.protocol&&!g[n.protocol]);if(w&&(n.hostname="",n.port=null,n.host&&(""===_[0]?_[0]=n.host:_.unshift(n.host)),n.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===m[0]?m[0]=e.host:m.unshift(e.host)),e.host=null),O=O&&(""===m[0]||""===_[0])),j)n.host=e.host||""===e.host?e.host:n.host,n.hostname=e.hostname||""===e.hostname?e.hostname:n.hostname,n.search=e.search,n.query=e.query,_=m;else if(m.length)_||(_=[]),_.pop(),_=_.concat(m),n.search=e.search,n.query=e.query;else if(!i.isNullOrUndefined(e.search)){if(w)n.hostname=n.host=_.shift(),(A=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=A.shift(),n.host=n.hostname=A.shift());return n.search=e.search,n.query=e.query,i.isNull(n.pathname)&&i.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n}if(!_.length)return n.pathname=null,n.search?n.path="/"+n.search:n.path=null,n.href=n.format(),n;for(var E=_.slice(-1)[0],C=(n.host||e.host||_.length>1)&&("."===E||".."===E)||""===E,x=0,S=_.length;S>=0;S--)"."===(E=_[S])?_.splice(S,1):".."===E?(_.splice(S,1),x++):x&&(_.splice(S,1),x--);if(!O&&!k)for(;x--;x)_.unshift("..");!O||""===_[0]||_[0]&&"/"===_[0].charAt(0)||_.unshift(""),C&&"/"!==_.join("/").substr(-1)&&_.push("");var A,M=""===_[0]||_[0]&&"/"===_[0].charAt(0);w&&(n.hostname=n.host=M?"":_.length?_.shift():"",(A=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=A.shift(),n.host=n.hostname=A.shift()));return(O=O||n.host&&_.length)&&!M&&_.unshift(""),_.length?n.pathname=_.join("/"):(n.pathname=null,n.path=null),i.isNull(n.pathname)&&i.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},o.prototype.parseHost=function(){var e=this.host,t=s.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},function(e,t){e.exports=function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}},function(e,t){e.exports=function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}},function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}},function(e,t){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(t){return"function"==typeof Symbol&&"symbol"===n(Symbol.iterator)?e.exports=r=function(e){return n(e)}:e.exports=r=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":n(e)},r(t)}e.exports=r},function(e,t){function n(t,r){return e.exports=n=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},n(t,r)}e.exports=n},function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){"use strict";e.exports=n(131)},function(e,t,n){"use strict";e.exports.encode=n(132),e.exports.decode=n(133),e.exports.format=n(134),e.exports.parse=n(135)},function(e,t){e.exports=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/},function(e,t){e.exports=/[\0-\x1F\x7F-\x9F]/},function(e,t){e.exports=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/},function(e,t,n){"use strict";var r="<[A-Za-z][A-Za-z0-9\\-]*(?:\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\s*=\\s*(?:[^\"'=<>`\\x00-\\x20]+|'[^']*'|\"[^\"]*\"))?)*\\s*\\/?>",i="<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>",o=new RegExp("^(?:"+r+"|"+i+"|\x3c!----\x3e|\x3c!--(?:-?[^>-])(?:-?[^-])*--\x3e|<[?].*?[?]>|<![A-Z]+\\s+[^>]*>|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>)"),a=new RegExp("^(?:"+r+"|"+i+")");e.exports.HTML_TAG_RE=o,e.exports.HTML_OPEN_CLOSE_TAG_RE=a},function(e,t,n){"use strict";e.exports.tokenize=function(e,t){var n,r,i,o,a=e.pos,s=e.src.charCodeAt(a);if(t)return!1;if(126!==s)return!1;if(i=(r=e.scanDelims(e.pos,!0)).length,o=String.fromCharCode(s),i<2)return!1;for(i%2&&(e.push("text","",0).content=o,i--),n=0;n<i;n+=2)e.push("text","",0).content=o+o,e.delimiters.push({marker:s,jump:n,token:e.tokens.length-1,level:e.level,end:-1,open:r.can_open,close:r.can_close});return e.pos+=r.length,!0},e.exports.postProcess=function(e){var t,n,r,i,o,a=[],s=e.delimiters,c=e.delimiters.length;for(t=0;t<c;t++)126===(r=s[t]).marker&&-1!==r.end&&(i=s[r.end],(o=e.tokens[r.token]).type="s_open",o.tag="s",o.nesting=1,o.markup="~~",o.content="",(o=e.tokens[i.token]).type="s_close",o.tag="s",o.nesting=-1,o.markup="~~",o.content="","text"===e.tokens[i.token-1].type&&"~"===e.tokens[i.token-1].content&&a.push(i.token-1));for(;a.length;){for(n=(t=a.pop())+1;n<e.tokens.length&&"s_close"===e.tokens[n].type;)n++;t!==--n&&(o=e.tokens[n],e.tokens[n]=e.tokens[t],e.tokens[t]=o)}}},function(e,t,n){"use strict";e.exports.tokenize=function(e,t){var n,r,i=e.pos,o=e.src.charCodeAt(i);if(t)return!1;if(95!==o&&42!==o)return!1;for(r=e.scanDelims(e.pos,42===o),n=0;n<r.length;n++)e.push("text","",0).content=String.fromCharCode(o),e.delimiters.push({marker:o,length:r.length,jump:n,token:e.tokens.length-1,level:e.level,end:-1,open:r.can_open,close:r.can_close});return e.pos+=r.length,!0},e.exports.postProcess=function(e){var t,n,r,i,o,a,s=e.delimiters;for(t=e.delimiters.length-1;t>=0;t--)95!==(n=s[t]).marker&&42!==n.marker||-1!==n.end&&(r=s[n.end],a=t>0&&s[t-1].end===n.end+1&&s[t-1].token===n.token-1&&s[n.end+1].token===r.token+1&&s[t-1].marker===n.marker,o=String.fromCharCode(n.marker),(i=e.tokens[n.token]).type=a?"strong_open":"em_open",i.tag=a?"strong":"em",i.nesting=1,i.markup=a?o+o:o,i.content="",(i=e.tokens[r.token]).type=a?"strong_close":"em_close",i.tag=a?"strong":"em",i.nesting=-1,i.markup=a?o+o:o,i.content="",a&&(e.tokens[s[t-1].token].content="",e.tokens[s[n.end+1].token].content="",t--))}},function(e,t,n){(function(e){var r;/*! https://mths.be/punycode v1.3.2 by @mathias */!function(i){t&&t.nodeType,e&&e.nodeType;var o="object"==typeof window&&window;o.global!==o&&o.window!==o&&o.self;var a,s=2147483647,c=36,l=1,u=26,p=38,h=700,d=72,m=128,f="-",b=/^xn--/,g=/[^\x20-\x7E]/,v=/[\x2E\u3002\uFF0E\uFF61]/g,y={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},j=c-l,O=Math.floor,k=String.fromCharCode;function _(e){throw RangeError(y[e])}function w(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}function E(e,t){var n=e.split("@"),r="";return n.length>1&&(r=n[0]+"@",e=n[1]),r+w((e=e.replace(v,".")).split("."),t).join(".")}function C(e){for(var t,n,r=[],i=0,o=e.length;i<o;)(t=e.charCodeAt(i++))>=55296&&t<=56319&&i<o?56320==(64512&(n=e.charCodeAt(i++)))?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),i--):r.push(t);return r}function x(e){return w(e,function(e){var t="";return e>65535&&(t+=k((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=k(e)}).join("")}function S(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function A(e,t,n){var r=0;for(e=n?O(e/h):e>>1,e+=O(e/t);e>j*u>>1;r+=c)e=O(e/j);return O(r+(j+1)*e/(e+p))}function M(e){var t,n,r,i,o,a,p,h,b,g,v,y=[],j=e.length,k=0,w=m,E=d;for((n=e.lastIndexOf(f))<0&&(n=0),r=0;r<n;++r)e.charCodeAt(r)>=128&&_("not-basic"),y.push(e.charCodeAt(r));for(i=n>0?n+1:0;i<j;){for(o=k,a=1,p=c;i>=j&&_("invalid-input"),((h=(v=e.charCodeAt(i++))-48<10?v-22:v-65<26?v-65:v-97<26?v-97:c)>=c||h>O((s-k)/a))&&_("overflow"),k+=h*a,!(h<(b=p<=E?l:p>=E+u?u:p-E));p+=c)a>O(s/(g=c-b))&&_("overflow"),a*=g;E=A(k-o,t=y.length+1,0==o),O(k/t)>s-w&&_("overflow"),w+=O(k/t),k%=t,y.splice(k++,0,w)}return x(y)}function T(e){var t,n,r,i,o,a,p,h,b,g,v,y,j,w,E,x=[];for(y=(e=C(e)).length,t=m,n=0,o=d,a=0;a<y;++a)(v=e[a])<128&&x.push(k(v));for(r=i=x.length,i&&x.push(f);r<y;){for(p=s,a=0;a<y;++a)(v=e[a])>=t&&v<p&&(p=v);for(p-t>O((s-n)/(j=r+1))&&_("overflow"),n+=(p-t)*j,t=p,a=0;a<y;++a)if((v=e[a])<t&&++n>s&&_("overflow"),v==t){for(h=n,b=c;!(h<(g=b<=o?l:b>=o+u?u:b-o));b+=c)E=h-g,w=c-g,x.push(k(S(g+E%w,0))),h=O(E/w);x.push(k(S(h,0))),o=A(n,j,r==i),n=0,++r}++n,++t}return x.join("")}a={version:"1.3.2",ucs2:{decode:C,encode:x},decode:M,encode:T,toASCII:function(e){return E(e,function(e){return g.test(e)?"xn--"+T(e):e})},toUnicode:function(e){return E(e,function(e){return b.test(e)?M(e.slice(4).toLowerCase()):e})}},void 0===(r=function(){return a}.call(t,n,t,e))||(e.exports=r)}()}).call(this,n(89)(e))},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){var r=n(63),i=n(191),o=n(192),a="[object Null]",s="[object Undefined]",c=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?s:a:c&&c in Object(e)?i(e):o(e)}},function(e,t,n){var r=n(201),i=n(206);e.exports=function(e,t){var n=i(e,t);return r(n)?n:void 0}},function(e,t){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},function(e,t,n){},,function(e){e.exports={production:["business-hours","contact-form","contact-info","gif","mailchimp","map","markdown","publicize","related-posts","repeat-visitor","shortlinks","simple-payments","slideshow","subscriptions","tiled-gallery","videopress","wordads"],beta:["seo","vr"]}},function(e,t,n){"use strict";e.exports=n(130)},function(e,t,n){"use strict";e.exports=function(e){var t,n={};return function e(t,n){var r;if(Array.isArray(n))for(r=0;r<n.length;r++)e(t,n[r]);else for(r in n)t[r]=(t[r]||[]).concat(n[r])}(n,e),(t=function(e){return function(t){return function(r){var i,o,a=n[r.type],s=t(r);if(a)for(i=0;i<a.length;i++)(o=a[i](r,e))&&e.dispatch(o);return s}}}).effects=n,t}},function(e,t,n){var r=n(187);e.exports=function(e,t,n){var i=null==e?void 0:r(e,t);return void 0===i?n:i}},function(e,t,n){e.exports=n.p+"images/paypal-button-1e53882e702881f8dfd958c141e65383.png"},function(e,t,n){e.exports=n.p+"images/paypal-button-2x-fe4d34770a47484f401cecbb892f8456.png"},function(e,t){e.exports=wp.tokenList},function(e,t){e.exports=wp.hooks},,function(e,t,n){},,function(e,t,n){},,function(e,t){e.exports=function(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(i[n]=e[n]);return i}},function(e,t,n){"use strict";e.exports=n(110)},function(e,t,n){"use strict";
-/** @license React v16.8.3
- * react.production.min.js
- *
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */var r=n(111),i="function"==typeof Symbol&&Symbol.for,o=i?Symbol.for("react.element"):60103,a=i?Symbol.for("react.portal"):60106,s=i?Symbol.for("react.fragment"):60107,c=i?Symbol.for("react.strict_mode"):60108,l=i?Symbol.for("react.profiler"):60114,u=i?Symbol.for("react.provider"):60109,p=i?Symbol.for("react.context"):60110,h=i?Symbol.for("react.concurrent_mode"):60111,d=i?Symbol.for("react.forward_ref"):60112,m=i?Symbol.for("react.suspense"):60113,f=i?Symbol.for("react.memo"):60115,b=i?Symbol.for("react.lazy"):60116,g="function"==typeof Symbol&&Symbol.iterator;function v(e){for(var t=arguments.length-1,n="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=0;r<t;r++)n+="&args[]="+encodeURIComponent(arguments[r+1]);!function(e,t,n,r,i,o,a,s){if(!e){if(e=void 0,void 0===t)e=Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,i,o,a,s],l=0;(e=Error(t.replace(/%s/g,function(){return c[l++]}))).name="Invariant Violation"}throw e.framesToPop=1,e}}(!1,"Minified React error #"+e+"; visit %s for the full message or use the non-minified dev environment for full errors and additional helpful warnings. ",n)}var y={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},j={};function O(e,t,n){this.props=e,this.context=t,this.refs=j,this.updater=n||y}function k(){}function _(e,t,n){this.props=e,this.context=t,this.refs=j,this.updater=n||y}O.prototype.isReactComponent={},O.prototype.setState=function(e,t){"object"!=typeof e&&"function"!=typeof e&&null!=e&&v("85"),this.updater.enqueueSetState(this,e,t,"setState")},O.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},k.prototype=O.prototype;var w=_.prototype=new k;w.constructor=_,r(w,O.prototype),w.isPureReactComponent=!0;var E={current:null},C={current:null},x=Object.prototype.hasOwnProperty,S={key:!0,ref:!0,__self:!0,__source:!0};function A(e,t,n){var r=void 0,i={},a=null,s=null;if(null!=t)for(r in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(a=""+t.key),t)x.call(t,r)&&!S.hasOwnProperty(r)&&(i[r]=t[r]);var c=arguments.length-2;if(1===c)i.children=n;else if(1<c){for(var l=Array(c),u=0;u<c;u++)l[u]=arguments[u+2];i.children=l}if(e&&e.defaultProps)for(r in c=e.defaultProps)void 0===i[r]&&(i[r]=c[r]);return{$$typeof:o,type:e,key:a,ref:s,props:i,_owner:C.current}}function M(e){return"object"==typeof e&&null!==e&&e.$$typeof===o}var T=/\/+/g,z=[];function D(e,t,n,r){if(z.length){var i=z.pop();return i.result=e,i.keyPrefix=t,i.func=n,i.context=r,i.count=0,i}return{result:e,keyPrefix:t,func:n,context:r,count:0}}function F(e){e.result=null,e.keyPrefix=null,e.func=null,e.context=null,e.count=0,10>z.length&&z.push(e)}function N(e,t,n){return null==e?0:function e(t,n,r,i){var s=typeof t;"undefined"!==s&&"boolean"!==s||(t=null);var c=!1;if(null===t)c=!0;else switch(s){case"string":case"number":c=!0;break;case"object":switch(t.$$typeof){case o:case a:c=!0}}if(c)return r(i,t,""===n?"."+P(t,0):n),1;if(c=0,n=""===n?".":n+":",Array.isArray(t))for(var l=0;l<t.length;l++){var u=n+P(s=t[l],l);c+=e(s,u,r,i)}else if(u=null===t||"object"!=typeof t?null:"function"==typeof(u=g&&t[g]||t["@@iterator"])?u:null,"function"==typeof u)for(t=u.call(t),l=0;!(s=t.next()).done;)c+=e(s=s.value,u=n+P(s,l++),r,i);else"object"===s&&v("31","[object Object]"==(r=""+t)?"object with keys {"+Object.keys(t).join(", ")+"}":r,"");return c}(e,"",t,n)}function P(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+(""+e).replace(/[=:]/g,function(e){return t[e]})}(e.key):t.toString(36)}function R(e,t){e.func.call(e.context,t,e.count++)}function I(e,t,n){var r=e.result,i=e.keyPrefix;e=e.func.call(e.context,t,e.count++),Array.isArray(e)?L(e,r,n,function(e){return e}):null!=e&&(M(e)&&(e=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(e,i+(!e.key||t&&t.key===e.key?"":(""+e.key).replace(T,"$&/")+"/")+n)),r.push(e))}function L(e,t,n,r,i){var o="";null!=n&&(o=(""+n).replace(T,"$&/")+"/"),N(e,I,t=D(t,o,r,i)),F(t)}function B(){var e=E.current;return null===e&&v("307"),e}var q={Children:{map:function(e,t,n){if(null==e)return e;var r=[];return L(e,r,null,t,n),r},forEach:function(e,t,n){if(null==e)return e;N(e,R,t=D(null,null,t,n)),F(t)},count:function(e){return N(e,function(){return null},null)},toArray:function(e){var t=[];return L(e,t,null,function(e){return e}),t},only:function(e){return M(e)||v("143"),e}},createRef:function(){return{current:null}},Component:O,PureComponent:_,createContext:function(e,t){return void 0===t&&(t=null),(e={$$typeof:p,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:u,_context:e},e.Consumer=e},forwardRef:function(e){return{$$typeof:d,render:e}},lazy:function(e){return{$$typeof:b,_ctor:e,_status:-1,_result:null}},memo:function(e,t){return{$$typeof:f,type:e,compare:void 0===t?null:t}},useCallback:function(e,t){return B().useCallback(e,t)},useContext:function(e,t){return B().useContext(e,t)},useEffect:function(e,t){return B().useEffect(e,t)},useImperativeHandle:function(e,t,n){return B().useImperativeHandle(e,t,n)},useDebugValue:function(){},useLayoutEffect:function(e,t){return B().useLayoutEffect(e,t)},useMemo:function(e,t){return B().useMemo(e,t)},useReducer:function(e,t,n){return B().useReducer(e,t,n)},useRef:function(e){return B().useRef(e)},useState:function(e){return B().useState(e)},Fragment:s,StrictMode:c,Suspense:m,createElement:A,cloneElement:function(e,t,n){null==e&&v("267",e);var i=void 0,a=r({},e.props),s=e.key,c=e.ref,l=e._owner;if(null!=t){void 0!==t.ref&&(c=t.ref,l=C.current),void 0!==t.key&&(s=""+t.key);var u=void 0;for(i in e.type&&e.type.defaultProps&&(u=e.type.defaultProps),t)x.call(t,i)&&!S.hasOwnProperty(i)&&(a[i]=void 0===t[i]&&void 0!==u?u[i]:t[i])}if(1===(i=arguments.length-2))a.children=n;else if(1<i){u=Array(i);for(var p=0;p<i;p++)u[p]=arguments[p+2];a.children=u}return{$$typeof:o,type:e.type,key:s,ref:c,props:a,_owner:l}},createFactory:function(e){var t=A.bind(null,e);return t.type=e,t},isValidElement:M,version:"16.8.3",unstable_ConcurrentMode:h,unstable_Profiler:l,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{ReactCurrentDispatcher:E,ReactCurrentOwner:C,assign:r}},V={default:q},H=V&&q||V;e.exports=H.default||H},function(e,t,n){"use strict";
-/*
-object-assign
-(c) Sindre Sorhus
-@license MIT
-*/var r=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(e){r[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(i){return!1}}()?Object.assign:function(e,t){for(var n,a,s=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),c=1;c<arguments.length;c++){for(var l in n=Object(arguments[c]))i.call(n,l)&&(s[l]=n[l]);if(r){a=r(n);for(var u=0;u<a.length;u++)o.call(n,a[u])&&(s[a[u]]=n[a[u]])}}return s}},function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){"use strict";var r=n(18),i=n(138),o=n(142),a=n(143),s=n(151),c=n(165),l=n(178),u=n(81),p=n(88),h={default:n(180),zero:n(181),commonmark:n(182)},d=/^(vbscript|javascript|file|data):/,m=/^data:image\/(gif|png|jpeg|webp);/;function f(e){var t=e.trim().toLowerCase();return!d.test(t)||!!m.test(t)}var b=["http:","https:","mailto:"];function g(e){var t=u.parse(e,!0);if(t.hostname&&(!t.protocol||b.indexOf(t.protocol)>=0))try{t.hostname=p.toASCII(t.hostname)}catch(n){}return u.encode(u.format(t))}function v(e){var t=u.parse(e,!0);if(t.hostname&&(!t.protocol||b.indexOf(t.protocol)>=0))try{t.hostname=p.toUnicode(t.hostname)}catch(n){}return u.decode(u.format(t))}function y(e,t){if(!(this instanceof y))return new y(e,t);t||r.isString(e)||(t=e||{},e="default"),this.inline=new c,this.block=new s,this.core=new a,this.renderer=new o,this.linkify=new l,this.validateLink=f,this.normalizeLink=g,this.normalizeLinkText=v,this.utils=r,this.helpers=r.assign({},i),this.options={},this.configure(e),t&&this.set(t)}y.prototype.set=function(e){return r.assign(this.options,e),this},y.prototype.configure=function(e){var t,n=this;if(r.isString(e)&&!(e=h[t=e]))throw new Error('Wrong `markdown-it` preset "'+t+'", check name');if(!e)throw new Error("Wrong `markdown-it` preset, can't be empty");return e.options&&n.set(e.options),e.components&&Object.keys(e.components).forEach(function(t){e.components[t].rules&&n[t].ruler.enableOnly(e.components[t].rules),e.components[t].rules2&&n[t].ruler2.enableOnly(e.components[t].rules2)}),this},y.prototype.enable=function(e,t){var n=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach(function(t){n=n.concat(this[t].ruler.enable(e,!0))},this),n=n.concat(this.inline.ruler2.enable(e,!0));var r=e.filter(function(e){return n.indexOf(e)<0});if(r.length&&!t)throw new Error("MarkdownIt. Failed to enable unknown rule(s): "+r);return this},y.prototype.disable=function(e,t){var n=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach(function(t){n=n.concat(this[t].ruler.disable(e,!0))},this),n=n.concat(this.inline.ruler2.disable(e,!0));var r=e.filter(function(e){return n.indexOf(e)<0});if(r.length&&!t)throw new Error("MarkdownIt. Failed to disable unknown rule(s): "+r);return this},y.prototype.use=function(e){var t=[this].concat(Array.prototype.slice.call(arguments,1));return e.apply(e,t),this},y.prototype.parse=function(e,t){if("string"!=typeof e)throw new Error("Input data should be a String");var n=new this.core.State(e,this,t);return this.core.process(n),n.tokens},y.prototype.render=function(e,t){return t=t||{},this.renderer.render(this.parse(e,t),this.options,t)},y.prototype.parseInline=function(e,t){var n=new this.core.State(e,this,t);return n.inlineMode=!0,this.core.process(n),n.tokens},y.prototype.renderInline=function(e,t){return t=t||{},this.renderer.render(this.parseInline(e,t),this.options,t)},e.exports=y},function(e){e.exports={Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",amp:"&",AMP:"&",andand:"⩕",And:"⩓",and:"∧",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angmsd:"∡",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",apacir:"⩯",ap:"≈",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",barwed:"⌅",Barwed:"⌆",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",because:"∵",Because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxdl:"┐",boxdL:"╕",boxDl:"╖",boxDL:"╗",boxdr:"┌",boxdR:"╒",boxDr:"╓",boxDR:"╔",boxh:"─",boxH:"═",boxhd:"┬",boxHd:"╤",boxhD:"╥",boxHD:"╦",boxhu:"┴",boxHu:"╧",boxhU:"╨",boxHU:"╩",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxul:"┘",boxuL:"╛",boxUl:"╜",boxUL:"╝",boxur:"└",boxuR:"╘",boxUr:"╙",boxUR:"╚",boxv:"│",boxV:"║",boxvh:"┼",boxvH:"╪",boxVh:"╫",boxVH:"╬",boxvl:"┤",boxvL:"╡",boxVl:"╢",boxVL:"╣",boxvr:"├",boxvR:"╞",boxVr:"╟",boxVR:"╠",bprime:"‵",breve:"˘",Breve:"˘",brvbar:"¦",bscr:"𝒷",Bscr:"ℬ",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsolb:"⧅",bsol:"\\",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",capand:"⩄",capbrcup:"⩉",capcap:"⩋",cap:"∩",Cap:"⋒",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",centerdot:"·",CenterDot:"·",cfr:"𝔠",Cfr:"ℭ",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cir:"○",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",colon:":",Colon:"∷",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",conint:"∮",Conint:"∯",ContourIntegral:"∮",copf:"𝕔",Copf:"ℂ",coprod:"∐",Coproduct:"∐",copy:"©",COPY:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",cross:"✗",Cross:"⨯",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",cupbrcap:"⩈",cupcap:"⩆",CupCap:"≍",cup:"∪",Cup:"⋓",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",dagger:"†",Dagger:"‡",daleth:"ℸ",darr:"↓",Darr:"↡",dArr:"⇓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",ddagger:"‡",ddarr:"⇊",DD:"ⅅ",dd:"ⅆ",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",diamond:"⋄",Diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrowBar:"⤓",downarrow:"↓",DownArrow:"↓",Downarrow:"⇓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVectorBar:"⥖",DownLeftVector:"↽",DownRightTeeVector:"⥟",DownRightVectorBar:"⥗",DownRightVector:"⇁",DownTeeArrow:"↧",DownTee:"⊤",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",Ecirc:"Ê",ecirc:"ê",ecir:"≖",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",edot:"ė",eDot:"≑",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp13:" ",emsp14:" ",emsp:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",escr:"ℯ",Escr:"ℰ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",exponentiale:"ⅇ",ExponentialE:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",forall:"∀",ForAll:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",fscr:"𝒻",Fscr:"ℱ",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",ge:"≥",gE:"≧",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",gescc:"⪩",ges:"⩾",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",gg:"≫",Gg:"⋙",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gla:"⪥",gl:"≷",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gne:"⪈",gnE:"≩",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",gtcc:"⪧",gtcir:"⩺",gt:">",GT:">",Gt:"≫",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",harrcir:"⥈",harr:"↔",hArr:"⇔",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",hfr:"𝔥",Hfr:"ℌ",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",hopf:"𝕙",Hopf:"ℍ",horbar:"―",HorizontalLine:"─",hscr:"𝒽",Hscr:"ℋ",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",ifr:"𝔦",Ifr:"ℑ",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",Im:"ℑ",imof:"⊷",imped:"Ƶ",Implies:"⇒",incare:"℅",in:"∈",infin:"∞",infintie:"⧝",inodot:"ı",intcal:"⊺",int:"∫",Int:"∬",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",iscr:"𝒾",Iscr:"ℐ",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",lang:"⟨",Lang:"⟪",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",larrb:"⇤",larrbfs:"⤟",larr:"←",Larr:"↞",lArr:"⇐",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",latail:"⤙",lAtail:"⤛",lat:"⪫",late:"⪭",lates:"⪭︀",lbarr:"⤌",lBarr:"⤎",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",le:"≤",lE:"≦",LeftAngleBracket:"⟨",LeftArrowBar:"⇤",leftarrow:"←",LeftArrow:"←",Leftarrow:"⇐",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVectorBar:"⥙",LeftDownVector:"⇃",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",leftrightarrow:"↔",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTeeArrow:"↤",LeftTee:"⊣",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangleBar:"⧏",LeftTriangle:"⊲",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVectorBar:"⥘",LeftUpVector:"↿",LeftVectorBar:"⥒",LeftVector:"↼",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",lescc:"⪨",les:"⩽",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",llarr:"⇇",ll:"≪",Ll:"⋘",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoustache:"⎰",lmoust:"⎰",lnap:"⪉",lnapprox:"⪉",lne:"⪇",lnE:"≨",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",longleftarrow:"⟵",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftrightarrow:"⟷",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longmapsto:"⟼",longrightarrow:"⟶",LongRightArrow:"⟶",Longrightarrow:"⟹",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",lscr:"𝓁",Lscr:"ℒ",lsh:"↰",Lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",ltcc:"⪦",ltcir:"⩹",lt:"<",LT:"<",Lt:"≪",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",midast:"*",midcir:"⫰",mid:"∣",middot:"·",minusb:"⊟",minus:"−",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",mscr:"𝓂",Mscr:"ℳ",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natural:"♮",naturals:"ℕ",natur:"♮",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",nearhk:"⤤",nearr:"↗",neArr:"⇗",nearrow:"↗",ne:"≠",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nharr:"↮",nhArr:"⇎",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlarr:"↚",nlArr:"⇍",nldr:"‥",nlE:"≦̸",nle:"≰",nleftarrow:"↚",nLeftarrow:"⇍",nleftrightarrow:"↮",nLeftrightarrow:"⇎",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",nopf:"𝕟",Nopf:"ℕ",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangleBar:"⧏̸",NotLeftTriangle:"⋪",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangleBar:"⧐̸",NotRightTriangle:"⋫",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",nparallel:"∦",npar:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",nprec:"⊀",npreceq:"⪯̸",npre:"⪯̸",nrarrc:"⤳̸",nrarr:"↛",nrArr:"⇏",nrarrw:"↝̸",nrightarrow:"↛",nRightarrow:"⇏",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nvdash:"⊬",nvDash:"⊭",nVdash:"⊮",nVDash:"⊯",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwarr:"↖",nwArr:"⇖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",Ocirc:"Ô",ocirc:"ô",ocir:"⊚",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",orarr:"↻",Or:"⩔",or:"∨",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",otimesas:"⨶",Otimes:"⨷",otimes:"⊗",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",para:"¶",parallel:"∥",par:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plus:"+",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",popf:"𝕡",Popf:"ℙ",pound:"£",prap:"⪷",Pr:"⪻",pr:"≺",prcue:"≼",precapprox:"⪷",prec:"≺",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",pre:"⪯",prE:"⪳",precsim:"≾",prime:"′",Prime:"″",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportional:"∝",Proportion:"∷",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",qopf:"𝕢",Qopf:"ℚ",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",quot:'"',QUOT:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",rang:"⟩",Rang:"⟫",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarr:"→",Rarr:"↠",rArr:"⇒",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",ratail:"⤚",rAtail:"⤜",ratio:"∶",rationals:"ℚ",rbarr:"⤍",rBarr:"⤏",RBarr:"⤐",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",Re:"ℜ",rect:"▭",reg:"®",REG:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",rfr:"𝔯",Rfr:"ℜ",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrowBar:"⇥",rightarrow:"→",RightArrow:"→",Rightarrow:"⇒",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVectorBar:"⥕",RightDownVector:"⇂",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTeeArrow:"↦",RightTee:"⊢",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangleBar:"⧐",RightTriangle:"⊳",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVectorBar:"⥔",RightUpVector:"↾",RightVectorBar:"⥓",RightVector:"⇀",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoustache:"⎱",rmoust:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",ropf:"𝕣",Ropf:"ℝ",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",rscr:"𝓇",Rscr:"ℛ",rsh:"↱",Rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",scap:"⪸",Scaron:"Š",scaron:"š",Sc:"⪼",sc:"≻",sccue:"≽",sce:"⪰",scE:"⪴",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdotb:"⊡",sdot:"⋅",sdote:"⩦",searhk:"⤥",searr:"↘",seArr:"⇘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",solbar:"⌿",solb:"⧄",sol:"/",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",square:"□",Square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squ:"□",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",sub:"⊂",Sub:"⋐",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",subset:"⊂",Subset:"⋐",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succapprox:"⪸",succ:"≻",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",sum:"∑",Sum:"∑",sung:"♪",sup1:"¹",sup2:"²",sup3:"³",sup:"⊃",Sup:"⋑",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",supset:"⊃",Supset:"⋑",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swarr:"↙",swArr:"⇙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",therefore:"∴",Therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",ThinSpace:" ",thinsp:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",tilde:"˜",Tilde:"∼",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",timesbar:"⨱",timesb:"⊠",times:"×",timesd:"⨰",tint:"∭",toea:"⤨",topbot:"⌶",topcir:"⫱",top:"⊤",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",trade:"™",TRADE:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",uarr:"↑",Uarr:"↟",uArr:"⇑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrowBar:"⤒",uparrow:"↑",UpArrow:"↑",Uparrow:"⇑",UpArrowDownArrow:"⇅",updownarrow:"↕",UpDownArrow:"↕",Updownarrow:"⇕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",upsi:"υ",Upsi:"ϒ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTeeArrow:"↥",UpTee:"⊥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",varr:"↕",vArr:"⇕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",vBar:"⫨",Vbar:"⫫",vBarv:"⫩",Vcy:"В",vcy:"в",vdash:"⊢",vDash:"⊨",Vdash:"⊩",VDash:"⊫",Vdashl:"⫦",veebar:"⊻",vee:"∨",Vee:"⋁",veeeq:"≚",vellip:"⋮",verbar:"|",Verbar:"‖",vert:"|",Vert:"‖",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",wedge:"∧",Wedge:"⋀",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xharr:"⟷",xhArr:"⟺",Xi:"Ξ",xi:"ξ",xlarr:"⟵",xlArr:"⟸",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrarr:"⟶",xrArr:"⟹",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",yuml:"ÿ",Yuml:"Ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",zfr:"𝔷",Zfr:"ℨ",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",zopf:"𝕫",Zopf:"ℤ",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}},function(e,t,n){"use strict";var r={};function i(e,t,n){var o,a,s,c,l,u="";for("string"!=typeof t&&(n=t,t=i.defaultChars),void 0===n&&(n=!0),l=function(e){var t,n,i=r[e];if(i)return i;for(i=r[e]=[],t=0;t<128;t++)n=String.fromCharCode(t),/^[0-9a-z]$/i.test(n)?i.push(n):i.push("%"+("0"+t.toString(16).toUpperCase()).slice(-2));for(t=0;t<e.length;t++)i[e.charCodeAt(t)]=e[t];return i}(t),o=0,a=e.length;o<a;o++)if(s=e.charCodeAt(o),n&&37===s&&o+2<a&&/^[0-9a-f]{2}$/i.test(e.slice(o+1,o+3)))u+=e.slice(o,o+3),o+=2;else if(s<128)u+=l[s];else if(s>=55296&&s<=57343){if(s>=55296&&s<=56319&&o+1<a&&(c=e.charCodeAt(o+1))>=56320&&c<=57343){u+=encodeURIComponent(e[o]+e[o+1]),o++;continue}u+="%EF%BF%BD"}else u+=encodeURIComponent(e[o]);return u}i.defaultChars=";/?:@&=+$,-_.!~*'()#",i.componentChars="-_.!~*'()",e.exports=i},function(e,t,n){"use strict";var r={};function i(e,t){var n;return"string"!=typeof t&&(t=i.defaultChars),n=function(e){var t,n,i=r[e];if(i)return i;for(i=r[e]=[],t=0;t<128;t++)n=String.fromCharCode(t),i.push(n);for(t=0;t<e.length;t++)i[n=e.charCodeAt(t)]="%"+("0"+n.toString(16).toUpperCase()).slice(-2);return i}(t),e.replace(/(%[a-f0-9]{2})+/gi,function(e){var t,r,i,o,a,s,c,l="";for(t=0,r=e.length;t<r;t+=3)(i=parseInt(e.slice(t+1,t+3),16))<128?l+=n[i]:192==(224&i)&&t+3<r&&128==(192&(o=parseInt(e.slice(t+4,t+6),16)))?(l+=(c=i<<6&1984|63&o)<128?"��":String.fromCharCode(c),t+=3):224==(240&i)&&t+6<r&&(o=parseInt(e.slice(t+4,t+6),16),a=parseInt(e.slice(t+7,t+9),16),128==(192&o)&&128==(192&a))?(l+=(c=i<<12&61440|o<<6&4032|63&a)<2048||c>=55296&&c<=57343?"���":String.fromCharCode(c),t+=6):240==(248&i)&&t+9<r&&(o=parseInt(e.slice(t+4,t+6),16),a=parseInt(e.slice(t+7,t+9),16),s=parseInt(e.slice(t+10,t+12),16),128==(192&o)&&128==(192&a)&&128==(192&s))?((c=i<<18&1835008|o<<12&258048|a<<6&4032|63&s)<65536||c>1114111?l+="����":(c-=65536,l+=String.fromCharCode(55296+(c>>10),56320+(1023&c))),t+=9):l+="�";return l})}i.defaultChars=";/?:@&=+$,#",i.componentChars="",e.exports=i},function(e,t,n){"use strict";e.exports=function(e){var t="";return t+=e.protocol||"",t+=e.slashes?"//":"",t+=e.auth?e.auth+"@":"",e.hostname&&-1!==e.hostname.indexOf(":")?t+="["+e.hostname+"]":t+=e.hostname||"",t+=e.port?":"+e.port:"",t+=e.pathname||"",t+=e.search||"",t+=e.hash||""}},function(e,t,n){"use strict";function r(){this.protocol=null,this.slashes=null,this.auth=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.pathname=null}var i=/^([a-z0-9.+-]+:)/i,o=/:[0-9]*$/,a=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,s=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),c=["'"].concat(s),l=["%","/","?",";","#"].concat(c),u=["/","?","#"],p=/^[+a-z0-9A-Z_-]{0,63}$/,h=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,d={javascript:!0,"javascript:":!0},m={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};r.prototype.parse=function(e,t){var n,r,o,s,c,f=e;if(f=f.trim(),!t&&1===e.split("#").length){var b=a.exec(f);if(b)return this.pathname=b[1],b[2]&&(this.search=b[2]),this}var g=i.exec(f);if(g&&(o=(g=g[0]).toLowerCase(),this.protocol=g,f=f.substr(g.length)),(t||g||f.match(/^\/\/[^@\/]+@[^@\/]+/))&&(!(c="//"===f.substr(0,2))||g&&d[g]||(f=f.substr(2),this.slashes=!0)),!d[g]&&(c||g&&!m[g])){var v,y,j=-1;for(n=0;n<u.length;n++)-1!==(s=f.indexOf(u[n]))&&(-1===j||s<j)&&(j=s);for(-1!==(y=-1===j?f.lastIndexOf("@"):f.lastIndexOf("@",j))&&(v=f.slice(0,y),f=f.slice(y+1),this.auth=v),j=-1,n=0;n<l.length;n++)-1!==(s=f.indexOf(l[n]))&&(-1===j||s<j)&&(j=s);-1===j&&(j=f.length),":"===f[j-1]&&j--;var O=f.slice(0,j);f=f.slice(j),this.parseHost(O),this.hostname=this.hostname||"";var k="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!k){var _=this.hostname.split(/\./);for(n=0,r=_.length;n<r;n++){var w=_[n];if(w&&!w.match(p)){for(var E="",C=0,x=w.length;C<x;C++)w.charCodeAt(C)>127?E+="x":E+=w[C];if(!E.match(p)){var S=_.slice(0,n),A=_.slice(n+1),M=w.match(h);M&&(S.push(M[1]),A.unshift(M[2])),A.length&&(f=A.join(".")+f),this.hostname=S.join(".");break}}}}this.hostname.length>255&&(this.hostname=""),k&&(this.hostname=this.hostname.substr(1,this.hostname.length-2))}var T=f.indexOf("#");-1!==T&&(this.hash=f.substr(T),f=f.slice(0,T));var z=f.indexOf("?");return-1!==z&&(this.search=f.substr(z),f=f.slice(0,z)),f&&(this.pathname=f),m[o]&&this.hostname&&!this.pathname&&(this.pathname=""),this},r.prototype.parseHost=function(e){var t=o.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)},e.exports=function(e,t){if(e&&e instanceof r)return e;var n=new r;return n.parse(e,t),n}},function(e,t,n){"use strict";t.Any=n(82),t.Cc=n(83),t.Cf=n(137),t.P=n(58),t.Z=n(84)},function(e,t){e.exports=/[\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/},function(e,t,n){"use strict";t.parseLinkLabel=n(139),t.parseLinkDestination=n(140),t.parseLinkTitle=n(141)},function(e,t,n){"use strict";e.exports=function(e,t,n){var r,i,o,a,s=-1,c=e.posMax,l=e.pos;for(e.pos=t+1,r=1;e.pos<c;){if(93===(o=e.src.charCodeAt(e.pos))&&0===--r){i=!0;break}if(a=e.pos,e.md.inline.skipToken(e),91===o)if(a===e.pos-1)r++;else if(n)return e.pos=l,-1}return i&&(s=e.pos),e.pos=l,s}},function(e,t,n){"use strict";var r=n(18).isSpace,i=n(18).unescapeAll;e.exports=function(e,t,n){var o,a,s=t,c={ok:!1,pos:0,lines:0,str:""};if(60===e.charCodeAt(t)){for(t++;t<n;){if(10===(o=e.charCodeAt(t))||r(o))return c;if(62===o)return c.pos=t+1,c.str=i(e.slice(s+1,t)),c.ok=!0,c;92===o&&t+1<n?t+=2:t++}return c}for(a=0;t<n&&32!==(o=e.charCodeAt(t))&&!(o<32||127===o);)if(92===o&&t+1<n)t+=2;else{if(40===o&&a++,41===o){if(0===a)break;a--}t++}return s===t?c:0!==a?c:(c.str=i(e.slice(s,t)),c.lines=0,c.pos=t,c.ok=!0,c)}},function(e,t,n){"use strict";var r=n(18).unescapeAll;e.exports=function(e,t,n){var i,o,a=0,s=t,c={ok:!1,pos:0,lines:0,str:""};if(t>=n)return c;if(34!==(o=e.charCodeAt(t))&&39!==o&&40!==o)return c;for(t++,40===o&&(o=41);t<n;){if((i=e.charCodeAt(t))===o)return c.pos=t+1,c.lines=a,c.str=r(e.slice(s+1,t)),c.ok=!0,c;10===i?a++:92===i&&t+1<n&&(t++,10===e.charCodeAt(t)&&a++),t++}return c}},function(e,t,n){"use strict";var r=n(18).assign,i=n(18).unescapeAll,o=n(18).escapeHtml,a={};function s(){this.rules=r({},a)}a.code_inline=function(e,t,n,r,i){var a=e[t];return"<code"+i.renderAttrs(a)+">"+o(e[t].content)+"</code>"},a.code_block=function(e,t,n,r,i){var a=e[t];return"<pre"+i.renderAttrs(a)+"><code>"+o(e[t].content)+"</code></pre>\n"},a.fence=function(e,t,n,r,a){var s,c,l,u,p=e[t],h=p.info?i(p.info).trim():"",d="";return h&&(d=h.split(/\s+/g)[0]),0===(s=n.highlight&&n.highlight(p.content,d)||o(p.content)).indexOf("<pre")?s+"\n":h?(c=p.attrIndex("class"),l=p.attrs?p.attrs.slice():[],c<0?l.push(["class",n.langPrefix+d]):l[c][1]+=" "+n.langPrefix+d,u={attrs:l},"<pre><code"+a.renderAttrs(u)+">"+s+"</code></pre>\n"):"<pre><code"+a.renderAttrs(p)+">"+s+"</code></pre>\n"},a.image=function(e,t,n,r,i){var o=e[t];return o.attrs[o.attrIndex("alt")][1]=i.renderInlineAsText(o.children,n,r),i.renderToken(e,t,n)},a.hardbreak=function(e,t,n){return n.xhtmlOut?"<br />\n":"<br>\n"},a.softbreak=function(e,t,n){return n.breaks?n.xhtmlOut?"<br />\n":"<br>\n":"\n"},a.text=function(e,t){return o(e[t].content)},a.html_block=function(e,t){return e[t].content},a.html_inline=function(e,t){return e[t].content},s.prototype.renderAttrs=function(e){var t,n,r;if(!e.attrs)return"";for(r="",t=0,n=e.attrs.length;t<n;t++)r+=" "+o(e.attrs[t][0])+'="'+o(e.attrs[t][1])+'"';return r},s.prototype.renderToken=function(e,t,n){var r,i="",o=!1,a=e[t];return a.hidden?"":(a.block&&-1!==a.nesting&&t&&e[t-1].hidden&&(i+="\n"),i+=(-1===a.nesting?"</":"<")+a.tag,i+=this.renderAttrs(a),0===a.nesting&&n.xhtmlOut&&(i+=" /"),a.block&&(o=!0,1===a.nesting&&t+1<e.length&&("inline"===(r=e[t+1]).type||r.hidden?o=!1:-1===r.nesting&&r.tag===a.tag&&(o=!1))),i+=o?">\n":">")},s.prototype.renderInline=function(e,t,n){for(var r,i="",o=this.rules,a=0,s=e.length;a<s;a++)void 0!==o[r=e[a].type]?i+=o[r](e,a,t,n,this):i+=this.renderToken(e,a,t);return i},s.prototype.renderInlineAsText=function(e,t,n){for(var r="",i=0,o=e.length;i<o;i++)"text"===e[i].type?r+=e[i].content:"image"===e[i].type&&(r+=this.renderInlineAsText(e[i].children,t,n));return r},s.prototype.render=function(e,t,n){var r,i,o,a="",s=this.rules;for(r=0,i=e.length;r<i;r++)"inline"===(o=e[r].type)?a+=this.renderInline(e[r].children,t,n):void 0!==s[o]?a+=s[e[r].type](e,r,t,n,this):a+=this.renderToken(e,r,t,n);return a},e.exports=s},function(e,t,n){"use strict";var r=n(59),i=[["normalize",n(144)],["block",n(145)],["inline",n(146)],["linkify",n(147)],["replacements",n(148)],["smartquotes",n(149)]];function o(){this.ruler=new r;for(var e=0;e<i.length;e++)this.ruler.push(i[e][0],i[e][1])}o.prototype.process=function(e){var t,n,r;for(t=0,n=(r=this.ruler.getRules("")).length;t<n;t++)r[t](e)},o.prototype.State=n(150),e.exports=o},function(e,t,n){"use strict";var r=/\r[\n\u0085]?|[\u2424\u2028\u0085]/g,i=/\u0000/g;e.exports=function(e){var t;t=(t=e.src.replace(r,"\n")).replace(i,"�"),e.src=t}},function(e,t,n){"use strict";e.exports=function(e){var t;e.inlineMode?((t=new e.Token("inline","",0)).content=e.src,t.map=[0,1],t.children=[],e.tokens.push(t)):e.md.block.parse(e.src,e.md,e.env,e.tokens)}},function(e,t,n){"use strict";e.exports=function(e){var t,n,r,i=e.tokens;for(n=0,r=i.length;n<r;n++)"inline"===(t=i[n]).type&&e.md.inline.parse(t.content,e.md,e.env,t.children)}},function(e,t,n){"use strict";var r=n(18).arrayReplaceAt;function i(e){return/^<\/a\s*>/i.test(e)}e.exports=function(e){var t,n,o,a,s,c,l,u,p,h,d,m,f,b,g,v,y,j,O=e.tokens;if(e.md.options.linkify)for(n=0,o=O.length;n<o;n++)if("inline"===O[n].type&&e.md.linkify.pretest(O[n].content))for(f=0,t=(a=O[n].children).length-1;t>=0;t--)if("link_close"!==(c=a[t]).type){if("html_inline"===c.type&&(j=c.content,/^<a[>\s]/i.test(j)&&f>0&&f--,i(c.content)&&f++),!(f>0)&&"text"===c.type&&e.md.linkify.test(c.content)){for(p=c.content,y=e.md.linkify.match(p),l=[],m=c.level,d=0,u=0;u<y.length;u++)b=y[u].url,g=e.md.normalizeLink(b),e.md.validateLink(g)&&(v=y[u].text,v=y[u].schema?"mailto:"!==y[u].schema||/^mailto:/i.test(v)?e.md.normalizeLinkText(v):e.md.normalizeLinkText("mailto:"+v).replace(/^mailto:/,""):e.md.normalizeLinkText("http://"+v).replace(/^http:\/\//,""),(h=y[u].index)>d&&((s=new e.Token("text","",0)).content=p.slice(d,h),s.level=m,l.push(s)),(s=new e.Token("link_open","a",1)).attrs=[["href",g]],s.level=m++,s.markup="linkify",s.info="auto",l.push(s),(s=new e.Token("text","",0)).content=v,s.level=m,l.push(s),(s=new e.Token("link_close","a",-1)).level=--m,s.markup="linkify",s.info="auto",l.push(s),d=y[u].lastIndex);d<p.length&&((s=new e.Token("text","",0)).content=p.slice(d),s.level=m,l.push(s)),O[n].children=a=r(a,t,l)}}else for(t--;a[t].level!==c.level&&"link_open"!==a[t].type;)t--}},function(e,t,n){"use strict";var r=/\+-|\.\.|\?\?\?\?|!!!!|,,|--/,i=/\((c|tm|r|p)\)/i,o=/\((c|tm|r|p)\)/gi,a={c:"©",r:"®",p:"§",tm:"™"};function s(e,t){return a[t.toLowerCase()]}function c(e){var t,n,r=0;for(t=e.length-1;t>=0;t--)"text"!==(n=e[t]).type||r||(n.content=n.content.replace(o,s)),"link_open"===n.type&&"auto"===n.info&&r--,"link_close"===n.type&&"auto"===n.info&&r++}function l(e){var t,n,i=0;for(t=e.length-1;t>=0;t--)"text"!==(n=e[t]).type||i||r.test(n.content)&&(n.content=n.content.replace(/\+-/g,"±").replace(/\.{2,}/g,"…").replace(/([?!])…/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---([^-]|$)/gm,"$1—$2").replace(/(^|\s)--(\s|$)/gm,"$1–$2").replace(/(^|[^-\s])--([^-\s]|$)/gm,"$1–$2")),"link_open"===n.type&&"auto"===n.info&&i--,"link_close"===n.type&&"auto"===n.info&&i++}e.exports=function(e){var t;if(e.md.options.typographer)for(t=e.tokens.length-1;t>=0;t--)"inline"===e.tokens[t].type&&(i.test(e.tokens[t].content)&&c(e.tokens[t].children),r.test(e.tokens[t].content)&&l(e.tokens[t].children))}},function(e,t,n){"use strict";var r=n(18).isWhiteSpace,i=n(18).isPunctChar,o=n(18).isMdAsciiPunct,a=/['"]/,s=/['"]/g,c="’";function l(e,t,n){return e.substr(0,t)+n+e.substr(t+1)}function u(e,t){var n,a,u,p,h,d,m,f,b,g,v,y,j,O,k,_,w,E,C,x,S;for(C=[],n=0;n<e.length;n++){for(a=e[n],m=e[n].level,w=C.length-1;w>=0&&!(C[w].level<=m);w--);if(C.length=w+1,"text"===a.type){h=0,d=(u=a.content).length;e:for(;h<d&&(s.lastIndex=h,p=s.exec(u));){if(k=_=!0,h=p.index+1,E="'"===p[0],b=32,p.index-1>=0)b=u.charCodeAt(p.index-1);else for(w=n-1;w>=0&&("softbreak"!==e[w].type&&"hardbreak"!==e[w].type);w--)if("text"===e[w].type){b=e[w].content.charCodeAt(e[w].content.length-1);break}if(g=32,h<d)g=u.charCodeAt(h);else for(w=n+1;w<e.length&&("softbreak"!==e[w].type&&"hardbreak"!==e[w].type);w++)if("text"===e[w].type){g=e[w].content.charCodeAt(0);break}if(v=o(b)||i(String.fromCharCode(b)),y=o(g)||i(String.fromCharCode(g)),j=r(b),(O=r(g))?k=!1:y&&(j||v||(k=!1)),j?_=!1:v&&(O||y||(_=!1)),34===g&&'"'===p[0]&&b>=48&&b<=57&&(_=k=!1),k&&_&&(k=!1,_=y),k||_){if(_)for(w=C.length-1;w>=0&&(f=C[w],!(C[w].level<m));w--)if(f.single===E&&C[w].level===m){f=C[w],E?(x=t.md.options.quotes[2],S=t.md.options.quotes[3]):(x=t.md.options.quotes[0],S=t.md.options.quotes[1]),a.content=l(a.content,p.index,S),e[f.token].content=l(e[f.token].content,f.pos,x),h+=S.length-1,f.token===n&&(h+=x.length-1),d=(u=a.content).length,C.length=w;continue e}k?C.push({token:n,pos:p.index,single:E,level:m}):_&&E&&(a.content=l(a.content,p.index,c))}else E&&(a.content=l(a.content,p.index,c))}}}}e.exports=function(e){var t;if(e.md.options.typographer)for(t=e.tokens.length-1;t>=0;t--)"inline"===e.tokens[t].type&&a.test(e.tokens[t].content)&&u(e.tokens[t].children,e)}},function(e,t,n){"use strict";var r=n(60);function i(e,t,n){this.src=e,this.env=n,this.tokens=[],this.inlineMode=!1,this.md=t}i.prototype.Token=r,e.exports=i},function(e,t,n){"use strict";var r=n(59),i=[["table",n(152),["paragraph","reference"]],["code",n(153)],["fence",n(154),["paragraph","reference","blockquote","list"]],["blockquote",n(155),["paragraph","reference","blockquote","list"]],["hr",n(156),["paragraph","reference","blockquote","list"]],["list",n(157),["paragraph","reference","blockquote"]],["reference",n(158)],["heading",n(159),["paragraph","reference","blockquote"]],["lheading",n(160)],["html_block",n(161),["paragraph","reference","blockquote"]],["paragraph",n(163)]];function o(){this.ruler=new r;for(var e=0;e<i.length;e++)this.ruler.push(i[e][0],i[e][1],{alt:(i[e][2]||[]).slice()})}o.prototype.tokenize=function(e,t,n){for(var r,i=this.ruler.getRules(""),o=i.length,a=t,s=!1,c=e.md.options.maxNesting;a<n&&(e.line=a=e.skipEmptyLines(a),!(a>=n))&&!(e.sCount[a]<e.blkIndent);){if(e.level>=c){e.line=n;break}for(r=0;r<o&&!i[r](e,a,n,!1);r++);e.tight=!s,e.isEmpty(e.line-1)&&(s=!0),(a=e.line)<n&&e.isEmpty(a)&&(s=!0,a++,e.line=a)}},o.prototype.parse=function(e,t,n,r){var i;e&&(i=new this.State(e,t,n,r),this.tokenize(i,i.line,i.lineMax))},o.prototype.State=n(164),e.exports=o},function(e,t,n){"use strict";var r=n(18).isSpace;function i(e,t){var n=e.bMarks[t]+e.blkIndent,r=e.eMarks[t];return e.src.substr(n,r-n)}function o(e){var t,n=[],r=0,i=e.length,o=0,a=0,s=!1,c=0;for(t=e.charCodeAt(r);r<i;)96===t?s?(s=!1,c=r):o%2==0&&(s=!0,c=r):124!==t||o%2!=0||s||(n.push(e.substring(a,r)),a=r+1),92===t?o++:o=0,++r===i&&s&&(s=!1,r=c+1),t=e.charCodeAt(r);return n.push(e.substring(a)),n}e.exports=function(e,t,n,a){var s,c,l,u,p,h,d,m,f,b,g,v;if(t+2>n)return!1;if(p=t+1,e.sCount[p]<e.blkIndent)return!1;if(e.sCount[p]-e.blkIndent>=4)return!1;if((l=e.bMarks[p]+e.tShift[p])>=e.eMarks[p])return!1;if(124!==(s=e.src.charCodeAt(l++))&&45!==s&&58!==s)return!1;for(;l<e.eMarks[p];){if(124!==(s=e.src.charCodeAt(l))&&45!==s&&58!==s&&!r(s))return!1;l++}for(h=(c=i(e,t+1)).split("|"),f=[],u=0;u<h.length;u++){if(!(b=h[u].trim())){if(0===u||u===h.length-1)continue;return!1}if(!/^:?-+:?$/.test(b))return!1;58===b.charCodeAt(b.length-1)?f.push(58===b.charCodeAt(0)?"center":"right"):58===b.charCodeAt(0)?f.push("left"):f.push("")}if(-1===(c=i(e,t).trim()).indexOf("|"))return!1;if(e.sCount[t]-e.blkIndent>=4)return!1;if((d=(h=o(c.replace(/^\||\|$/g,""))).length)>f.length)return!1;if(a)return!0;for((m=e.push("table_open","table",1)).map=g=[t,0],(m=e.push("thead_open","thead",1)).map=[t,t+1],(m=e.push("tr_open","tr",1)).map=[t,t+1],u=0;u<h.length;u++)(m=e.push("th_open","th",1)).map=[t,t+1],f[u]&&(m.attrs=[["style","text-align:"+f[u]]]),(m=e.push("inline","",0)).content=h[u].trim(),m.map=[t,t+1],m.children=[],m=e.push("th_close","th",-1);for(m=e.push("tr_close","tr",-1),m=e.push("thead_close","thead",-1),(m=e.push("tbody_open","tbody",1)).map=v=[t+2,0],p=t+2;p<n&&!(e.sCount[p]<e.blkIndent)&&-1!==(c=i(e,p).trim()).indexOf("|")&&!(e.sCount[p]-e.blkIndent>=4);p++){for(h=o(c.replace(/^\||\|$/g,"")),m=e.push("tr_open","tr",1),u=0;u<d;u++)m=e.push("td_open","td",1),f[u]&&(m.attrs=[["style","text-align:"+f[u]]]),(m=e.push("inline","",0)).content=h[u]?h[u].trim():"",m.children=[],m=e.push("td_close","td",-1);m=e.push("tr_close","tr",-1)}return m=e.push("tbody_close","tbody",-1),m=e.push("table_close","table",-1),g[1]=v[1]=p,e.line=p,!0}},function(e,t,n){"use strict";e.exports=function(e,t,n){var r,i,o;if(e.sCount[t]-e.blkIndent<4)return!1;for(i=r=t+1;r<n;)if(e.isEmpty(r))r++;else{if(!(e.sCount[r]-e.blkIndent>=4))break;i=++r}return e.line=i,(o=e.push("code_block","code",0)).content=e.getLines(t,i,4+e.blkIndent,!0),o.map=[t,e.line],!0}},function(e,t,n){"use strict";e.exports=function(e,t,n,r){var i,o,a,s,c,l,u,p=!1,h=e.bMarks[t]+e.tShift[t],d=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4)return!1;if(h+3>d)return!1;if(126!==(i=e.src.charCodeAt(h))&&96!==i)return!1;if(c=h,(o=(h=e.skipChars(h,i))-c)<3)return!1;if(u=e.src.slice(c,h),(a=e.src.slice(h,d)).indexOf(String.fromCharCode(i))>=0)return!1;if(r)return!0;for(s=t;!(++s>=n)&&!((h=c=e.bMarks[s]+e.tShift[s])<(d=e.eMarks[s])&&e.sCount[s]<e.blkIndent);)if(e.src.charCodeAt(h)===i&&!(e.sCount[s]-e.blkIndent>=4||(h=e.skipChars(h,i))-c<o||(h=e.skipSpaces(h))<d)){p=!0;break}return o=e.sCount[t],e.line=s+(p?1:0),(l=e.push("fence","code",0)).info=a,l.content=e.getLines(t+1,s,o,!0),l.markup=u,l.map=[t,e.line],!0}},function(e,t,n){"use strict";var r=n(18).isSpace;e.exports=function(e,t,n,i){var o,a,s,c,l,u,p,h,d,m,f,b,g,v,y,j,O,k,_,w,E=e.lineMax,C=e.bMarks[t]+e.tShift[t],x=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4)return!1;if(62!==e.src.charCodeAt(C++))return!1;if(i)return!0;for(c=d=e.sCount[t]+C-(e.bMarks[t]+e.tShift[t]),32===e.src.charCodeAt(C)?(C++,c++,d++,o=!1,j=!0):9===e.src.charCodeAt(C)?(j=!0,(e.bsCount[t]+d)%4==3?(C++,c++,d++,o=!1):o=!0):j=!1,m=[e.bMarks[t]],e.bMarks[t]=C;C<x&&(a=e.src.charCodeAt(C),r(a));)9===a?d+=4-(d+e.bsCount[t]+(o?1:0))%4:d++,C++;for(f=[e.bsCount[t]],e.bsCount[t]=e.sCount[t]+1+(j?1:0),u=C>=x,v=[e.sCount[t]],e.sCount[t]=d-c,y=[e.tShift[t]],e.tShift[t]=C-e.bMarks[t],k=e.md.block.ruler.getRules("blockquote"),g=e.parentType,e.parentType="blockquote",w=!1,h=t+1;h<n&&(e.sCount[h]<e.blkIndent&&(w=!0),!((C=e.bMarks[h]+e.tShift[h])>=(x=e.eMarks[h])));h++)if(62!==e.src.charCodeAt(C++)||w){if(u)break;for(O=!1,s=0,l=k.length;s<l;s++)if(k[s](e,h,n,!0)){O=!0;break}if(O){e.lineMax=h,0!==e.blkIndent&&(m.push(e.bMarks[h]),f.push(e.bsCount[h]),y.push(e.tShift[h]),v.push(e.sCount[h]),e.sCount[h]-=e.blkIndent);break}m.push(e.bMarks[h]),f.push(e.bsCount[h]),y.push(e.tShift[h]),v.push(e.sCount[h]),e.sCount[h]=-1}else{for(c=d=e.sCount[h]+C-(e.bMarks[h]+e.tShift[h]),32===e.src.charCodeAt(C)?(C++,c++,d++,o=!1,j=!0):9===e.src.charCodeAt(C)?(j=!0,(e.bsCount[h]+d)%4==3?(C++,c++,d++,o=!1):o=!0):j=!1,m.push(e.bMarks[h]),e.bMarks[h]=C;C<x&&(a=e.src.charCodeAt(C),r(a));)9===a?d+=4-(d+e.bsCount[h]+(o?1:0))%4:d++,C++;u=C>=x,f.push(e.bsCount[h]),e.bsCount[h]=e.sCount[h]+1+(j?1:0),v.push(e.sCount[h]),e.sCount[h]=d-c,y.push(e.tShift[h]),e.tShift[h]=C-e.bMarks[h]}for(b=e.blkIndent,e.blkIndent=0,(_=e.push("blockquote_open","blockquote",1)).markup=">",_.map=p=[t,0],e.md.block.tokenize(e,t,h),(_=e.push("blockquote_close","blockquote",-1)).markup=">",e.lineMax=E,e.parentType=g,p[1]=e.line,s=0;s<y.length;s++)e.bMarks[s+t]=m[s],e.tShift[s+t]=y[s],e.sCount[s+t]=v[s],e.bsCount[s+t]=f[s];return e.blkIndent=b,!0}},function(e,t,n){"use strict";var r=n(18).isSpace;e.exports=function(e,t,n,i){var o,a,s,c,l=e.bMarks[t]+e.tShift[t],u=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4)return!1;if(42!==(o=e.src.charCodeAt(l++))&&45!==o&&95!==o)return!1;for(a=1;l<u;){if((s=e.src.charCodeAt(l++))!==o&&!r(s))return!1;s===o&&a++}return!(a<3)&&(!!i||(e.line=t+1,(c=e.push("hr","hr",0)).map=[t,e.line],c.markup=Array(a+1).join(String.fromCharCode(o)),!0))}},function(e,t,n){"use strict";var r=n(18).isSpace;function i(e,t){var n,i,o,a;return i=e.bMarks[t]+e.tShift[t],o=e.eMarks[t],42!==(n=e.src.charCodeAt(i++))&&45!==n&&43!==n?-1:i<o&&(a=e.src.charCodeAt(i),!r(a))?-1:i}function o(e,t){var n,i=e.bMarks[t]+e.tShift[t],o=i,a=e.eMarks[t];if(o+1>=a)return-1;if((n=e.src.charCodeAt(o++))<48||n>57)return-1;for(;;){if(o>=a)return-1;if(!((n=e.src.charCodeAt(o++))>=48&&n<=57)){if(41===n||46===n)break;return-1}if(o-i>=10)return-1}return o<a&&(n=e.src.charCodeAt(o),!r(n))?-1:o}e.exports=function(e,t,n,r){var a,s,c,l,u,p,h,d,m,f,b,g,v,y,j,O,k,_,w,E,C,x,S,A,M,T,z,D,F=!1,N=!0;if(e.sCount[t]-e.blkIndent>=4)return!1;if(r&&"paragraph"===e.parentType&&e.tShift[t]>=e.blkIndent&&(F=!0),(S=o(e,t))>=0){if(h=!0,M=e.bMarks[t]+e.tShift[t],v=Number(e.src.substr(M,S-M-1)),F&&1!==v)return!1}else{if(!((S=i(e,t))>=0))return!1;h=!1}if(F&&e.skipSpaces(S)>=e.eMarks[t])return!1;if(g=e.src.charCodeAt(S-1),r)return!0;for(b=e.tokens.length,h?(D=e.push("ordered_list_open","ol",1),1!==v&&(D.attrs=[["start",v]])):D=e.push("bullet_list_open","ul",1),D.map=f=[t,0],D.markup=String.fromCharCode(g),j=t,A=!1,z=e.md.block.ruler.getRules("list"),w=e.parentType,e.parentType="list";j<n;){for(x=S,y=e.eMarks[j],p=O=e.sCount[j]+S-(e.bMarks[t]+e.tShift[t]);x<y;){if(9===(a=e.src.charCodeAt(x)))O+=4-(O+e.bsCount[j])%4;else{if(32!==a)break;O++}x++}if((u=(s=x)>=y?1:O-p)>4&&(u=1),l=p+u,(D=e.push("list_item_open","li",1)).markup=String.fromCharCode(g),D.map=d=[t,0],k=e.blkIndent,C=e.tight,E=e.tShift[t],_=e.sCount[t],e.blkIndent=l,e.tight=!0,e.tShift[t]=s-e.bMarks[t],e.sCount[t]=O,s>=y&&e.isEmpty(t+1)?e.line=Math.min(e.line+2,n):e.md.block.tokenize(e,t,n,!0),e.tight&&!A||(N=!1),A=e.line-t>1&&e.isEmpty(e.line-1),e.blkIndent=k,e.tShift[t]=E,e.sCount[t]=_,e.tight=C,(D=e.push("list_item_close","li",-1)).markup=String.fromCharCode(g),j=t=e.line,d[1]=j,s=e.bMarks[t],j>=n)break;if(e.sCount[j]<e.blkIndent)break;for(T=!1,c=0,m=z.length;c<m;c++)if(z[c](e,j,n,!0)){T=!0;break}if(T)break;if(h){if((S=o(e,j))<0)break}else if((S=i(e,j))<0)break;if(g!==e.src.charCodeAt(S-1))break}return(D=h?e.push("ordered_list_close","ol",-1):e.push("bullet_list_close","ul",-1)).markup=String.fromCharCode(g),f[1]=j,e.line=j,e.parentType=w,N&&function(e,t){var n,r,i=e.level+2;for(n=t+2,r=e.tokens.length-2;n<r;n++)e.tokens[n].level===i&&"paragraph_open"===e.tokens[n].type&&(e.tokens[n+2].hidden=!0,e.tokens[n].hidden=!0,n+=2)}(e,b),!0}},function(e,t,n){"use strict";var r=n(18).normalizeReference,i=n(18).isSpace;e.exports=function(e,t,n,o){var a,s,c,l,u,p,h,d,m,f,b,g,v,y,j,O,k=0,_=e.bMarks[t]+e.tShift[t],w=e.eMarks[t],E=t+1;if(e.sCount[t]-e.blkIndent>=4)return!1;if(91!==e.src.charCodeAt(_))return!1;for(;++_<w;)if(93===e.src.charCodeAt(_)&&92!==e.src.charCodeAt(_-1)){if(_+1===w)return!1;if(58!==e.src.charCodeAt(_+1))return!1;break}for(l=e.lineMax,j=e.md.block.ruler.getRules("reference"),f=e.parentType,e.parentType="reference";E<l&&!e.isEmpty(E);E++)if(!(e.sCount[E]-e.blkIndent>3||e.sCount[E]<0)){for(y=!1,p=0,h=j.length;p<h;p++)if(j[p](e,E,l,!0)){y=!0;break}if(y)break}for(w=(v=e.getLines(t,E,e.blkIndent,!1).trim()).length,_=1;_<w;_++){if(91===(a=v.charCodeAt(_)))return!1;if(93===a){m=_;break}10===a?k++:92===a&&++_<w&&10===v.charCodeAt(_)&&k++}if(m<0||58!==v.charCodeAt(m+1))return!1;for(_=m+2;_<w;_++)if(10===(a=v.charCodeAt(_)))k++;else if(!i(a))break;if(!(b=e.md.helpers.parseLinkDestination(v,_,w)).ok)return!1;if(u=e.md.normalizeLink(b.str),!e.md.validateLink(u))return!1;for(s=_=b.pos,c=k+=b.lines,g=_;_<w;_++)if(10===(a=v.charCodeAt(_)))k++;else if(!i(a))break;for(b=e.md.helpers.parseLinkTitle(v,_,w),_<w&&g!==_&&b.ok?(O=b.str,_=b.pos,k+=b.lines):(O="",_=s,k=c);_<w&&(a=v.charCodeAt(_),i(a));)_++;if(_<w&&10!==v.charCodeAt(_)&&O)for(O="",_=s,k=c;_<w&&(a=v.charCodeAt(_),i(a));)_++;return!(_<w&&10!==v.charCodeAt(_))&&(!!(d=r(v.slice(1,m)))&&(!!o||(void 0===e.env.references&&(e.env.references={}),void 0===e.env.references[d]&&(e.env.references[d]={title:O,href:u}),e.parentType=f,e.line=t+k+1,!0)))}},function(e,t,n){"use strict";var r=n(18).isSpace;e.exports=function(e,t,n,i){var o,a,s,c,l=e.bMarks[t]+e.tShift[t],u=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4)return!1;if(35!==(o=e.src.charCodeAt(l))||l>=u)return!1;for(a=1,o=e.src.charCodeAt(++l);35===o&&l<u&&a<=6;)a++,o=e.src.charCodeAt(++l);return!(a>6||l<u&&!r(o))&&(!!i||(u=e.skipSpacesBack(u,l),(s=e.skipCharsBack(u,35,l))>l&&r(e.src.charCodeAt(s-1))&&(u=s),e.line=t+1,(c=e.push("heading_open","h"+String(a),1)).markup="########".slice(0,a),c.map=[t,e.line],(c=e.push("inline","",0)).content=e.src.slice(l,u).trim(),c.map=[t,e.line],c.children=[],(c=e.push("heading_close","h"+String(a),-1)).markup="########".slice(0,a),!0))}},function(e,t,n){"use strict";e.exports=function(e,t,n){var r,i,o,a,s,c,l,u,p,h,d=t+1,m=e.md.block.ruler.getRules("paragraph");if(e.sCount[t]-e.blkIndent>=4)return!1;for(h=e.parentType,e.parentType="paragraph";d<n&&!e.isEmpty(d);d++)if(!(e.sCount[d]-e.blkIndent>3)){if(e.sCount[d]>=e.blkIndent&&(c=e.bMarks[d]+e.tShift[d])<(l=e.eMarks[d])&&(45===(p=e.src.charCodeAt(c))||61===p)&&(c=e.skipChars(c,p),(c=e.skipSpaces(c))>=l)){u=61===p?1:2;break}if(!(e.sCount[d]<0)){for(i=!1,o=0,a=m.length;o<a;o++)if(m[o](e,d,n,!0)){i=!0;break}if(i)break}}return!!u&&(r=e.getLines(t,d,e.blkIndent,!1).trim(),e.line=d+1,(s=e.push("heading_open","h"+String(u),1)).markup=String.fromCharCode(p),s.map=[t,e.line],(s=e.push("inline","",0)).content=r,s.map=[t,e.line-1],s.children=[],(s=e.push("heading_close","h"+String(u),-1)).markup=String.fromCharCode(p),e.parentType=h,!0)}},function(e,t,n){"use strict";var r=n(162),i=n(85).HTML_OPEN_CLOSE_TAG_RE,o=[[/^<(script|pre|style)(?=(\s|>|$))/i,/<\/(script|pre|style)>/i,!0],[/^<!--/,/-->/,!0],[/^<\?/,/\?>/,!0],[/^<![A-Z]/,/>/,!0],[/^<!\[CDATA\[/,/\]\]>/,!0],[new RegExp("^</?("+r.join("|")+")(?=(\\s|/?>|$))","i"),/^$/,!0],[new RegExp(i.source+"\\s*$"),/^$/,!1]];e.exports=function(e,t,n,r){var i,a,s,c,l=e.bMarks[t]+e.tShift[t],u=e.eMarks[t];if(e.sCount[t]-e.blkIndent>=4)return!1;if(!e.md.options.html)return!1;if(60!==e.src.charCodeAt(l))return!1;for(c=e.src.slice(l,u),i=0;i<o.length&&!o[i][0].test(c);i++);if(i===o.length)return!1;if(r)return o[i][2];if(a=t+1,!o[i][1].test(c))for(;a<n&&!(e.sCount[a]<e.blkIndent);a++)if(l=e.bMarks[a]+e.tShift[a],u=e.eMarks[a],c=e.src.slice(l,u),o[i][1].test(c)){0!==c.length&&a++;break}return e.line=a,(s=e.push("html_block","",0)).map=[t,a],s.content=e.getLines(t,a,e.blkIndent,!0),!0}},function(e,t,n){"use strict";e.exports=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","meta","nav","noframes","ol","optgroup","option","p","param","section","source","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"]},function(e,t,n){"use strict";e.exports=function(e,t){var n,r,i,o,a,s,c=t+1,l=e.md.block.ruler.getRules("paragraph"),u=e.lineMax;for(s=e.parentType,e.parentType="paragraph";c<u&&!e.isEmpty(c);c++)if(!(e.sCount[c]-e.blkIndent>3||e.sCount[c]<0)){for(r=!1,i=0,o=l.length;i<o;i++)if(l[i](e,c,u,!0)){r=!0;break}if(r)break}return n=e.getLines(t,c,e.blkIndent,!1).trim(),e.line=c,(a=e.push("paragraph_open","p",1)).map=[t,e.line],(a=e.push("inline","",0)).content=n,a.map=[t,e.line],a.children=[],a=e.push("paragraph_close","p",-1),e.parentType=s,!0}},function(e,t,n){"use strict";var r=n(60),i=n(18).isSpace;function o(e,t,n,r){var o,a,s,c,l,u,p,h;for(this.src=e,this.md=t,this.env=n,this.tokens=r,this.bMarks=[],this.eMarks=[],this.tShift=[],this.sCount=[],this.bsCount=[],this.blkIndent=0,this.line=0,this.lineMax=0,this.tight=!1,this.ddIndent=-1,this.parentType="root",this.level=0,this.result="",h=!1,s=c=u=p=0,l=(a=this.src).length;c<l;c++){if(o=a.charCodeAt(c),!h){if(i(o)){u++,9===o?p+=4-p%4:p++;continue}h=!0}10!==o&&c!==l-1||(10!==o&&c++,this.bMarks.push(s),this.eMarks.push(c),this.tShift.push(u),this.sCount.push(p),this.bsCount.push(0),h=!1,u=0,p=0,s=c+1)}this.bMarks.push(a.length),this.eMarks.push(a.length),this.tShift.push(0),this.sCount.push(0),this.bsCount.push(0),this.lineMax=this.bMarks.length-1}o.prototype.push=function(e,t,n){var i=new r(e,t,n);return i.block=!0,n<0&&this.level--,i.level=this.level,n>0&&this.level++,this.tokens.push(i),i},o.prototype.isEmpty=function(e){return this.bMarks[e]+this.tShift[e]>=this.eMarks[e]},o.prototype.skipEmptyLines=function(e){for(var t=this.lineMax;e<t&&!(this.bMarks[e]+this.tShift[e]<this.eMarks[e]);e++);return e},o.prototype.skipSpaces=function(e){for(var t,n=this.src.length;e<n&&(t=this.src.charCodeAt(e),i(t));e++);return e},o.prototype.skipSpacesBack=function(e,t){if(e<=t)return e;for(;e>t;)if(!i(this.src.charCodeAt(--e)))return e+1;return e},o.prototype.skipChars=function(e,t){for(var n=this.src.length;e<n&&this.src.charCodeAt(e)===t;e++);return e},o.prototype.skipCharsBack=function(e,t,n){if(e<=n)return e;for(;e>n;)if(t!==this.src.charCodeAt(--e))return e+1;return e},o.prototype.getLines=function(e,t,n,r){var o,a,s,c,l,u,p,h=e;if(e>=t)return"";for(u=new Array(t-e),o=0;h<t;h++,o++){for(a=0,p=c=this.bMarks[h],l=h+1<t||r?this.eMarks[h]+1:this.eMarks[h];c<l&&a<n;){if(s=this.src.charCodeAt(c),i(s))9===s?a+=4-(a+this.bsCount[h])%4:a++;else{if(!(c-p<this.tShift[h]))break;a++}c++}u[o]=a>n?new Array(a-n+1).join(" ")+this.src.slice(c,l):this.src.slice(c,l)}return u.join("")},o.prototype.Token=r,e.exports=o},function(e,t,n){"use strict";var r=n(59),i=[["text",n(166)],["newline",n(167)],["escape",n(168)],["backticks",n(169)],["strikethrough",n(86).tokenize],["emphasis",n(87).tokenize],["link",n(170)],["image",n(171)],["autolink",n(172)],["html_inline",n(173)],["entity",n(174)]],o=[["balance_pairs",n(175)],["strikethrough",n(86).postProcess],["emphasis",n(87).postProcess],["text_collapse",n(176)]];function a(){var e;for(this.ruler=new r,e=0;e<i.length;e++)this.ruler.push(i[e][0],i[e][1]);for(this.ruler2=new r,e=0;e<o.length;e++)this.ruler2.push(o[e][0],o[e][1])}a.prototype.skipToken=function(e){var t,n,r=e.pos,i=this.ruler.getRules(""),o=i.length,a=e.md.options.maxNesting,s=e.cache;if(void 0===s[r]){if(e.level<a)for(n=0;n<o&&(e.level++,t=i[n](e,!0),e.level--,!t);n++);else e.pos=e.posMax;t||e.pos++,s[r]=e.pos}else e.pos=s[r]},a.prototype.tokenize=function(e){for(var t,n,r=this.ruler.getRules(""),i=r.length,o=e.posMax,a=e.md.options.maxNesting;e.pos<o;){if(e.level<a)for(n=0;n<i&&!(t=r[n](e,!1));n++);if(t){if(e.pos>=o)break}else e.pending+=e.src[e.pos++]}e.pending&&e.pushPending()},a.prototype.parse=function(e,t,n,r){var i,o,a,s=new this.State(e,t,n,r);for(this.tokenize(s),a=(o=this.ruler2.getRules("")).length,i=0;i<a;i++)o[i](s)},a.prototype.State=n(177),e.exports=a},function(e,t,n){"use strict";function r(e){switch(e){case 10:case 33:case 35:case 36:case 37:case 38:case 42:case 43:case 45:case 58:case 60:case 61:case 62:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 125:case 126:return!0;default:return!1}}e.exports=function(e,t){for(var n=e.pos;n<e.posMax&&!r(e.src.charCodeAt(n));)n++;return n!==e.pos&&(t||(e.pending+=e.src.slice(e.pos,n)),e.pos=n,!0)}},function(e,t,n){"use strict";var r=n(18).isSpace;e.exports=function(e,t){var n,i,o=e.pos;if(10!==e.src.charCodeAt(o))return!1;for(n=e.pending.length-1,i=e.posMax,t||(n>=0&&32===e.pending.charCodeAt(n)?n>=1&&32===e.pending.charCodeAt(n-1)?(e.pending=e.pending.replace(/ +$/,""),e.push("hardbreak","br",0)):(e.pending=e.pending.slice(0,-1),e.push("softbreak","br",0)):e.push("softbreak","br",0)),o++;o<i&&r(e.src.charCodeAt(o));)o++;return e.pos=o,!0}},function(e,t,n){"use strict";for(var r=n(18).isSpace,i=[],o=0;o<256;o++)i.push(0);"\\!\"#$%&'()*+,./:;<=>?@[]^_`{|}~-".split("").forEach(function(e){i[e.charCodeAt(0)]=1}),e.exports=function(e,t){var n,o=e.pos,a=e.posMax;if(92!==e.src.charCodeAt(o))return!1;if(++o<a){if((n=e.src.charCodeAt(o))<256&&0!==i[n])return t||(e.pending+=e.src[o]),e.pos+=2,!0;if(10===n){for(t||e.push("hardbreak","br",0),o++;o<a&&(n=e.src.charCodeAt(o),r(n));)o++;return e.pos=o,!0}}return t||(e.pending+="\\"),e.pos++,!0}},function(e,t,n){"use strict";e.exports=function(e,t){var n,r,i,o,a,s,c=e.pos;if(96!==e.src.charCodeAt(c))return!1;for(n=c,c++,r=e.posMax;c<r&&96===e.src.charCodeAt(c);)c++;for(i=e.src.slice(n,c),o=a=c;-1!==(o=e.src.indexOf("`",a));){for(a=o+1;a<r&&96===e.src.charCodeAt(a);)a++;if(a-o===i.length)return t||((s=e.push("code_inline","code",0)).markup=i,s.content=e.src.slice(c,o).replace(/[ \n]+/g," ").trim()),e.pos=a,!0}return t||(e.pending+=i),e.pos+=i.length,!0}},function(e,t,n){"use strict";var r=n(18).normalizeReference,i=n(18).isSpace;e.exports=function(e,t){var n,o,a,s,c,l,u,p,h,d="",m=e.pos,f=e.posMax,b=e.pos,g=!0;if(91!==e.src.charCodeAt(e.pos))return!1;if(c=e.pos+1,(s=e.md.helpers.parseLinkLabel(e,e.pos,!0))<0)return!1;if((l=s+1)<f&&40===e.src.charCodeAt(l)){for(g=!1,l++;l<f&&(o=e.src.charCodeAt(l),i(o)||10===o);l++);if(l>=f)return!1;for(b=l,(u=e.md.helpers.parseLinkDestination(e.src,l,e.posMax)).ok&&(d=e.md.normalizeLink(u.str),e.md.validateLink(d)?l=u.pos:d=""),b=l;l<f&&(o=e.src.charCodeAt(l),i(o)||10===o);l++);if(u=e.md.helpers.parseLinkTitle(e.src,l,e.posMax),l<f&&b!==l&&u.ok)for(h=u.str,l=u.pos;l<f&&(o=e.src.charCodeAt(l),i(o)||10===o);l++);else h="";(l>=f||41!==e.src.charCodeAt(l))&&(g=!0),l++}if(g){if(void 0===e.env.references)return!1;if(l<f&&91===e.src.charCodeAt(l)?(b=l+1,(l=e.md.helpers.parseLinkLabel(e,l))>=0?a=e.src.slice(b,l++):l=s+1):l=s+1,a||(a=e.src.slice(c,s)),!(p=e.env.references[r(a)]))return e.pos=m,!1;d=p.href,h=p.title}return t||(e.pos=c,e.posMax=s,e.push("link_open","a",1).attrs=n=[["href",d]],h&&n.push(["title",h]),e.md.inline.tokenize(e),e.push("link_close","a",-1)),e.pos=l,e.posMax=f,!0}},function(e,t,n){"use strict";var r=n(18).normalizeReference,i=n(18).isSpace;e.exports=function(e,t){var n,o,a,s,c,l,u,p,h,d,m,f,b,g="",v=e.pos,y=e.posMax;if(33!==e.src.charCodeAt(e.pos))return!1;if(91!==e.src.charCodeAt(e.pos+1))return!1;if(l=e.pos+2,(c=e.md.helpers.parseLinkLabel(e,e.pos+1,!1))<0)return!1;if((u=c+1)<y&&40===e.src.charCodeAt(u)){for(u++;u<y&&(o=e.src.charCodeAt(u),i(o)||10===o);u++);if(u>=y)return!1;for(b=u,(h=e.md.helpers.parseLinkDestination(e.src,u,e.posMax)).ok&&(g=e.md.normalizeLink(h.str),e.md.validateLink(g)?u=h.pos:g=""),b=u;u<y&&(o=e.src.charCodeAt(u),i(o)||10===o);u++);if(h=e.md.helpers.parseLinkTitle(e.src,u,e.posMax),u<y&&b!==u&&h.ok)for(d=h.str,u=h.pos;u<y&&(o=e.src.charCodeAt(u),i(o)||10===o);u++);else d="";if(u>=y||41!==e.src.charCodeAt(u))return e.pos=v,!1;u++}else{if(void 0===e.env.references)return!1;if(u<y&&91===e.src.charCodeAt(u)?(b=u+1,(u=e.md.helpers.parseLinkLabel(e,u))>=0?s=e.src.slice(b,u++):u=c+1):u=c+1,s||(s=e.src.slice(l,c)),!(p=e.env.references[r(s)]))return e.pos=v,!1;g=p.href,d=p.title}return t||(a=e.src.slice(l,c),e.md.inline.parse(a,e.md,e.env,f=[]),(m=e.push("image","img",0)).attrs=n=[["src",g],["alt",""]],m.children=f,m.content=a,d&&n.push(["title",d])),e.pos=u,e.posMax=y,!0}},function(e,t,n){"use strict";var r=/^<([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/,i=/^<([a-zA-Z][a-zA-Z0-9+.\-]{1,31}):([^<>\x00-\x20]*)>/;e.exports=function(e,t){var n,o,a,s,c,l,u=e.pos;return 60===e.src.charCodeAt(u)&&(!((n=e.src.slice(u)).indexOf(">")<0)&&(i.test(n)?(s=(o=n.match(i))[0].slice(1,-1),c=e.md.normalizeLink(s),!!e.md.validateLink(c)&&(t||((l=e.push("link_open","a",1)).attrs=[["href",c]],l.markup="autolink",l.info="auto",(l=e.push("text","",0)).content=e.md.normalizeLinkText(s),(l=e.push("link_close","a",-1)).markup="autolink",l.info="auto"),e.pos+=o[0].length,!0)):!!r.test(n)&&(s=(a=n.match(r))[0].slice(1,-1),c=e.md.normalizeLink("mailto:"+s),!!e.md.validateLink(c)&&(t||((l=e.push("link_open","a",1)).attrs=[["href",c]],l.markup="autolink",l.info="auto",(l=e.push("text","",0)).content=e.md.normalizeLinkText(s),(l=e.push("link_close","a",-1)).markup="autolink",l.info="auto"),e.pos+=a[0].length,!0))))}},function(e,t,n){"use strict";var r=n(85).HTML_TAG_RE;e.exports=function(e,t){var n,i,o,a=e.pos;return!!e.md.options.html&&(o=e.posMax,!(60!==e.src.charCodeAt(a)||a+2>=o)&&(!(33!==(n=e.src.charCodeAt(a+1))&&63!==n&&47!==n&&!function(e){var t=32|e;return t>=97&&t<=122}(n))&&(!!(i=e.src.slice(a).match(r))&&(t||(e.push("html_inline","",0).content=e.src.slice(a,a+i[0].length)),e.pos+=i[0].length,!0))))}},function(e,t,n){"use strict";var r=n(80),i=n(18).has,o=n(18).isValidEntityCode,a=n(18).fromCodePoint,s=/^&#((?:x[a-f0-9]{1,8}|[0-9]{1,8}));/i,c=/^&([a-z][a-z0-9]{1,31});/i;e.exports=function(e,t){var n,l,u=e.pos,p=e.posMax;if(38!==e.src.charCodeAt(u))return!1;if(u+1<p)if(35===e.src.charCodeAt(u+1)){if(l=e.src.slice(u).match(s))return t||(n="x"===l[1][0].toLowerCase()?parseInt(l[1].slice(1),16):parseInt(l[1],10),e.pending+=o(n)?a(n):a(65533)),e.pos+=l[0].length,!0}else if((l=e.src.slice(u).match(c))&&i(r,l[1]))return t||(e.pending+=r[l[1]]),e.pos+=l[0].length,!0;return t||(e.pending+="&"),e.pos++,!0}},function(e,t,n){"use strict";e.exports=function(e){var t,n,r,i,o=e.delimiters,a=e.delimiters.length;for(t=0;t<a;t++)if((r=o[t]).close)for(n=t-r.jump-1;n>=0;){if((i=o[n]).open&&i.marker===r.marker&&i.end<0&&i.level===r.level)if(!((i.close||r.open)&&void 0!==i.length&&void 0!==r.length&&(i.length+r.length)%3==0)){r.jump=t-n,r.open=!1,i.end=t,i.jump=0;break}n-=i.jump+1}}},function(e,t,n){"use strict";e.exports=function(e){var t,n,r=0,i=e.tokens,o=e.tokens.length;for(t=n=0;t<o;t++)r+=i[t].nesting,i[t].level=r,"text"===i[t].type&&t+1<o&&"text"===i[t+1].type?i[t+1].content=i[t].content+i[t+1].content:(t!==n&&(i[n]=i[t]),n++);t!==n&&(i.length=n)}},function(e,t,n){"use strict";var r=n(60),i=n(18).isWhiteSpace,o=n(18).isPunctChar,a=n(18).isMdAsciiPunct;function s(e,t,n,r){this.src=e,this.env=n,this.md=t,this.tokens=r,this.pos=0,this.posMax=this.src.length,this.level=0,this.pending="",this.pendingLevel=0,this.cache={},this.delimiters=[]}s.prototype.pushPending=function(){var e=new r("text","",0);return e.content=this.pending,e.level=this.pendingLevel,this.tokens.push(e),this.pending="",e},s.prototype.push=function(e,t,n){this.pending&&this.pushPending();var i=new r(e,t,n);return n<0&&this.level--,i.level=this.level,n>0&&this.level++,this.pendingLevel=this.level,this.tokens.push(i),i},s.prototype.scanDelims=function(e,t){var n,r,s,c,l,u,p,h,d,m=e,f=!0,b=!0,g=this.posMax,v=this.src.charCodeAt(e);for(n=e>0?this.src.charCodeAt(e-1):32;m<g&&this.src.charCodeAt(m)===v;)m++;return s=m-e,r=m<g?this.src.charCodeAt(m):32,p=a(n)||o(String.fromCharCode(n)),d=a(r)||o(String.fromCharCode(r)),u=i(n),(h=i(r))?f=!1:d&&(u||p||(f=!1)),u?b=!1:p&&(h||d||(b=!1)),t?(c=f,l=b):(c=f&&(!b||p),l=b&&(!f||d)),{can_open:c,can_close:l,length:s}},s.prototype.Token=r,e.exports=s},function(e,t,n){"use strict";function r(e){return Array.prototype.slice.call(arguments,1).forEach(function(t){t&&Object.keys(t).forEach(function(n){e[n]=t[n]})}),e}function i(e){return Object.prototype.toString.call(e)}function o(e){return"[object Function]"===i(e)}function a(e){return e.replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}var s={fuzzyLink:!0,fuzzyEmail:!0,fuzzyIP:!1};var c={"http:":{validate:function(e,t,n){var r=e.slice(t);return n.re.http||(n.re.http=new RegExp("^\\/\\/"+n.re.src_auth+n.re.src_host_port_strict+n.re.src_path,"i")),n.re.http.test(r)?r.match(n.re.http)[0].length:0}},"https:":"http:","ftp:":"http:","//":{validate:function(e,t,n){var r=e.slice(t);return n.re.no_http||(n.re.no_http=new RegExp("^"+n.re.src_auth+"(?:localhost|(?:(?:"+n.re.src_domain+")\\.)+"+n.re.src_domain_root+")"+n.re.src_port+n.re.src_host_terminator+n.re.src_path,"i")),n.re.no_http.test(r)?t>=3&&":"===e[t-3]?0:t>=3&&"/"===e[t-3]?0:r.match(n.re.no_http)[0].length:0}},"mailto:":{validate:function(e,t,n){var r=e.slice(t);return n.re.mailto||(n.re.mailto=new RegExp("^"+n.re.src_email_name+"@"+n.re.src_host_strict,"i")),n.re.mailto.test(r)?r.match(n.re.mailto)[0].length:0}}},l="a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]",u="biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф".split("|");function p(e){var t=e.re=n(179)(e.__opts__),r=e.__tlds__.slice();function s(e){return e.replace("%TLDS%",t.src_tlds)}e.onCompile(),e.__tlds_replaced__||r.push(l),r.push(t.src_xn),t.src_tlds=r.join("|"),t.email_fuzzy=RegExp(s(t.tpl_email_fuzzy),"i"),t.link_fuzzy=RegExp(s(t.tpl_link_fuzzy),"i"),t.link_no_ip_fuzzy=RegExp(s(t.tpl_link_no_ip_fuzzy),"i"),t.host_fuzzy_test=RegExp(s(t.tpl_host_fuzzy_test),"i");var c=[];function u(e,t){throw new Error('(LinkifyIt) Invalid schema "'+e+'": '+t)}e.__compiled__={},Object.keys(e.__schemas__).forEach(function(t){var n=e.__schemas__[t];if(null!==n){var r,a={validate:null,link:null};if(e.__compiled__[t]=a,"[object Object]"===i(n))return!function(e){return"[object RegExp]"===i(e)}(n.validate)?o(n.validate)?a.validate=n.validate:u(t,n):a.validate=(r=n.validate,function(e,t){var n=e.slice(t);return r.test(n)?n.match(r)[0].length:0}),void(o(n.normalize)?a.normalize=n.normalize:n.normalize?u(t,n):a.normalize=function(e,t){t.normalize(e)});!function(e){return"[object String]"===i(e)}(n)?u(t,n):c.push(t)}}),c.forEach(function(t){e.__compiled__[e.__schemas__[t]]&&(e.__compiled__[t].validate=e.__compiled__[e.__schemas__[t]].validate,e.__compiled__[t].normalize=e.__compiled__[e.__schemas__[t]].normalize)}),e.__compiled__[""]={validate:null,normalize:function(e,t){t.normalize(e)}};var p=Object.keys(e.__compiled__).filter(function(t){return t.length>0&&e.__compiled__[t]}).map(a).join("|");e.re.schema_test=RegExp("(^|(?!_)(?:[><|]|"+t.src_ZPCc+"))("+p+")","i"),e.re.schema_search=RegExp("(^|(?!_)(?:[><|]|"+t.src_ZPCc+"))("+p+")","ig"),e.re.pretest=RegExp("("+e.re.schema_test.source+")|("+e.re.host_fuzzy_test.source+")|@","i"),function(e){e.__index__=-1,e.__text_cache__=""}(e)}function h(e,t){var n=e.__index__,r=e.__last_index__,i=e.__text_cache__.slice(n,r);this.schema=e.__schema__.toLowerCase(),this.index=n+t,this.lastIndex=r+t,this.raw=i,this.text=i,this.url=i}function d(e,t){var n=new h(e,t);return e.__compiled__[n.schema].normalize(n,e),n}function m(e,t){if(!(this instanceof m))return new m(e,t);var n;t||(n=e,Object.keys(n||{}).reduce(function(e,t){return e||s.hasOwnProperty(t)},!1)&&(t=e,e={})),this.__opts__=r({},s,t),this.__index__=-1,this.__last_index__=-1,this.__schema__="",this.__text_cache__="",this.__schemas__=r({},c,e),this.__compiled__={},this.__tlds__=u,this.__tlds_replaced__=!1,this.re={},p(this)}m.prototype.add=function(e,t){return this.__schemas__[e]=t,p(this),this},m.prototype.set=function(e){return this.__opts__=r(this.__opts__,e),this},m.prototype.test=function(e){if(this.__text_cache__=e,this.__index__=-1,!e.length)return!1;var t,n,r,i,o,a,s,c;if(this.re.schema_test.test(e))for((s=this.re.schema_search).lastIndex=0;null!==(t=s.exec(e));)if(i=this.testSchemaAt(e,t[2],s.lastIndex)){this.__schema__=t[2],this.__index__=t.index+t[1].length,this.__last_index__=t.index+t[0].length+i;break}return this.__opts__.fuzzyLink&&this.__compiled__["http:"]&&(c=e.search(this.re.host_fuzzy_test))>=0&&(this.__index__<0||c<this.__index__)&&null!==(n=e.match(this.__opts__.fuzzyIP?this.re.link_fuzzy:this.re.link_no_ip_fuzzy))&&(o=n.index+n[1].length,(this.__index__<0||o<this.__index__)&&(this.__schema__="",this.__index__=o,this.__last_index__=n.index+n[0].length)),this.__opts__.fuzzyEmail&&this.__compiled__["mailto:"]&&e.indexOf("@")>=0&&null!==(r=e.match(this.re.email_fuzzy))&&(o=r.index+r[1].length,a=r.index+r[0].length,(this.__index__<0||o<this.__index__||o===this.__index__&&a>this.__last_index__)&&(this.__schema__="mailto:",this.__index__=o,this.__last_index__=a)),this.__index__>=0},m.prototype.pretest=function(e){return this.re.pretest.test(e)},m.prototype.testSchemaAt=function(e,t,n){return this.__compiled__[t.toLowerCase()]?this.__compiled__[t.toLowerCase()].validate(e,n,this):0},m.prototype.match=function(e){var t=0,n=[];this.__index__>=0&&this.__text_cache__===e&&(n.push(d(this,t)),t=this.__last_index__);for(var r=t?e.slice(t):e;this.test(r);)n.push(d(this,t)),r=r.slice(this.__last_index__),t+=this.__last_index__;return n.length?n:null},m.prototype.tlds=function(e,t){return e=Array.isArray(e)?e:[e],t?(this.__tlds__=this.__tlds__.concat(e).sort().filter(function(e,t,n){return e!==n[t-1]}).reverse(),p(this),this):(this.__tlds__=e.slice(),this.__tlds_replaced__=!0,p(this),this)},m.prototype.normalize=function(e){e.schema||(e.url="http://"+e.url),"mailto:"!==e.schema||/^mailto:/i.test(e.url)||(e.url="mailto:"+e.url)},m.prototype.onCompile=function(){},e.exports=m},function(e,t,n){"use strict";e.exports=function(e){var t={};t.src_Any=n(82).source,t.src_Cc=n(83).source,t.src_Z=n(84).source,t.src_P=n(58).source,t.src_ZPCc=[t.src_Z,t.src_P,t.src_Cc].join("|"),t.src_ZCc=[t.src_Z,t.src_Cc].join("|");return t.src_pseudo_letter="(?:(?![><|]|"+t.src_ZPCc+")"+t.src_Any+")",t.src_ip4="(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)",t.src_auth="(?:(?:(?!"+t.src_ZCc+"|[@/\\[\\]()]).)+@)?",t.src_port="(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?",t.src_host_terminator="(?=$|[><|]|"+t.src_ZPCc+")(?!-|_|:\\d|\\.-|\\.(?!$|"+t.src_ZPCc+"))",t.src_path="(?:[/?#](?:(?!"+t.src_ZCc+"|[><|]|[()[\\]{}.,\"'?!\\-]).|\\[(?:(?!"+t.src_ZCc+"|\\]).)*\\]|\\((?:(?!"+t.src_ZCc+"|[)]).)*\\)|\\{(?:(?!"+t.src_ZCc+'|[}]).)*\\}|\\"(?:(?!'+t.src_ZCc+'|["]).)+\\"|\\\'(?:(?!'+t.src_ZCc+"|[']).)+\\'|\\'(?="+t.src_pseudo_letter+"|[-]).|\\.{2,3}[a-zA-Z0-9%/]|\\.(?!"+t.src_ZCc+"|[.]).|"+(e&&e["---"]?"\\-(?!--(?:[^-]|$))(?:-*)|":"\\-+|")+"\\,(?!"+t.src_ZCc+").|\\!(?!"+t.src_ZCc+"|[!]).|\\?(?!"+t.src_ZCc+"|[?]).)+|\\/)?",t.src_email_name='[\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]+',t.src_xn="xn--[a-z0-9\\-]{1,59}",t.src_domain_root="(?:"+t.src_xn+"|"+t.src_pseudo_letter+"{1,63})",t.src_domain="(?:"+t.src_xn+"|(?:"+t.src_pseudo_letter+")|(?:"+t.src_pseudo_letter+"(?:-|"+t.src_pseudo_letter+"){0,61}"+t.src_pseudo_letter+"))",t.src_host="(?:(?:(?:(?:"+t.src_domain+")\\.)*"+t.src_domain+"))",t.tpl_host_fuzzy="(?:"+t.src_ip4+"|(?:(?:(?:"+t.src_domain+")\\.)+(?:%TLDS%)))",t.tpl_host_no_ip_fuzzy="(?:(?:(?:"+t.src_domain+")\\.)+(?:%TLDS%))",t.src_host_strict=t.src_host+t.src_host_terminator,t.tpl_host_fuzzy_strict=t.tpl_host_fuzzy+t.src_host_terminator,t.src_host_port_strict=t.src_host+t.src_port+t.src_host_terminator,t.tpl_host_port_fuzzy_strict=t.tpl_host_fuzzy+t.src_port+t.src_host_terminator,t.tpl_host_port_no_ip_fuzzy_strict=t.tpl_host_no_ip_fuzzy+t.src_port+t.src_host_terminator,t.tpl_host_fuzzy_test="localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:"+t.src_ZPCc+"|>|$))",t.tpl_email_fuzzy="(^|[><|]|\\(|"+t.src_ZCc+")("+t.src_email_name+"@"+t.tpl_host_fuzzy_strict+")",t.tpl_link_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`||]|"+t.src_ZPCc+"))((?![$+<=>^`||])"+t.tpl_host_port_fuzzy_strict+t.src_path+")",t.tpl_link_no_ip_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`||]|"+t.src_ZPCc+"))((?![$+<=>^`||])"+t.tpl_host_port_no_ip_fuzzy_strict+t.src_path+")",t}},function(e,t,n){"use strict";e.exports={options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:100},components:{core:{},block:{},inline:{}}}},function(e,t,n){"use strict";e.exports={options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:20},components:{core:{rules:["normalize","block","inline"]},block:{rules:["paragraph"]},inline:{rules:["text"],rules2:["balance_pairs","text_collapse"]}}}},function(e,t,n){"use strict";e.exports={options:{html:!0,xhtmlOut:!0,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:20},components:{core:{rules:["normalize","block","inline"]},block:{rules:["blockquote","code","fence","heading","hr","html_block","lheading","list","reference","paragraph"]},inline:{rules:["autolink","backticks","emphasis","entity","escape","html_inline","image","link","newline","text"],rules2:["balance_pairs","emphasis","text_collapse"]}}}},function(e,t,n){},,function(e,t,n){},,function(e,t,n){var r=n(188),i=n(227);e.exports=function(e,t){for(var n=0,o=(t=r(t,e)).length;null!=e&&n<o;)e=e[i(t[n++])];return n&&n==o?e:void 0}},function(e,t,n){var r=n(61),i=n(189),o=n(194),a=n(224);e.exports=function(e,t){return r(e)?e:i(e,t)?[e]:o(a(e))}},function(e,t,n){var r=n(61),i=n(62),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!i(e))||a.test(e)||!o.test(e)||null!=t&&e in Object(t)}},function(e,t){var n="object"==typeof window&&window&&window.Object===Object&&window;e.exports=n},function(e,t,n){var r=n(63),i=Object.prototype,o=i.hasOwnProperty,a=i.toString,s=r?r.toStringTag:void 0;e.exports=function(e){var t=o.call(e,s),n=e[s];try{e[s]=void 0;var r=!0}catch(c){}var i=a.call(e);return r&&(t?e[s]=n:delete e[s]),i}},function(e,t){var n=Object.prototype.toString;e.exports=function(e){return n.call(e)}},function(e,t){e.exports=function(e){return null!=e&&"object"==typeof e}},function(e,t,n){var r=n(195),i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,o=/\\(\\)?/g,a=r(function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(i,function(e,n,r,i){t.push(r?i.replace(o,"$1"):n||e)}),t});e.exports=a},function(e,t,n){var r=n(196),i=500;e.exports=function(e){var t=r(e,function(e){return n.size===i&&n.clear(),e}),n=t.cache;return t}},function(e,t,n){var r=n(197),i="Expected a function";function o(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError(i);var n=function(){var r=arguments,i=t?t.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=e.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(o.Cache||r),n}o.Cache=r,e.exports=o},function(e,t,n){var r=n(198),i=n(219),o=n(221),a=n(222),s=n(223);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=o,c.prototype.has=a,c.prototype.set=s,e.exports=c},function(e,t,n){var r=n(199),i=n(211),o=n(218);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(o||i),string:new r}}},function(e,t,n){var r=n(200),i=n(207),o=n(208),a=n(209),s=n(210);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=o,c.prototype.has=a,c.prototype.set=s,e.exports=c},function(e,t,n){var r=n(48);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},function(e,t,n){var r=n(202),i=n(203),o=n(92),a=n(205),s=/^\[object .+?Constructor\]$/,c=Function.prototype,l=Object.prototype,u=c.toString,p=l.hasOwnProperty,h=RegExp("^"+u.call(p).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!o(e)||i(e))&&(r(e)?h:s).test(a(e))}},function(e,t,n){var r=n(90),i=n(92),o="[object AsyncFunction]",a="[object Function]",s="[object GeneratorFunction]",c="[object Proxy]";e.exports=function(e){if(!i(e))return!1;var t=r(e);return t==a||t==s||t==o||t==c}},function(e,t,n){var r,i=n(204),o=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";e.exports=function(e){return!!o&&o in e}},function(e,t,n){var r=n(64)["__core-js_shared__"];e.exports=r},function(e,t){var n=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return n.call(e)}catch(t){}try{return e+""}catch(t){}}return""}},function(e,t){e.exports=function(e,t){return null==e?void 0:e[t]}},function(e,t){e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},function(e,t,n){var r=n(48),i="__lodash_hash_undefined__",o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return n===i?void 0:n}return o.call(t,e)?t[e]:void 0}},function(e,t,n){var r=n(48),i=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:i.call(t,e)}},function(e,t,n){var r=n(48),i="__lodash_hash_undefined__";e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?i:t,this}},function(e,t,n){var r=n(212),i=n(213),o=n(215),a=n(216),s=n(217);function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=o,c.prototype.has=a,c.prototype.set=s,e.exports=c},function(e,t){e.exports=function(){this.__data__=[],this.size=0}},function(e,t,n){var r=n(49),i=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0||(n==t.length-1?t.pop():i.call(t,n,1),--this.size,0))}},function(e,t){e.exports=function(e,t){return e===t||e!=e&&t!=t}},function(e,t,n){var r=n(49);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},function(e,t,n){var r=n(49);e.exports=function(e){return r(this.__data__,e)>-1}},function(e,t,n){var r=n(49);e.exports=function(e,t){var n=this.__data__,i=r(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this}},function(e,t,n){var r=n(91)(n(64),"Map");e.exports=r},function(e,t,n){var r=n(50);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},function(e,t){e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},function(e,t,n){var r=n(50);e.exports=function(e){return r(this,e).get(e)}},function(e,t,n){var r=n(50);e.exports=function(e){return r(this,e).has(e)}},function(e,t,n){var r=n(50);e.exports=function(e,t){var n=r(this,e),i=n.size;return n.set(e,t),this.size+=n.size==i?0:1,this}},function(e,t,n){var r=n(225);e.exports=function(e){return null==e?"":r(e)}},function(e,t,n){var r=n(63),i=n(226),o=n(61),a=n(62),s=1/0,c=r?r.prototype:void 0,l=c?c.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(o(t))return i(t,e)+"";if(a(t))return l?l.call(t):"";var n=t+"";return"0"==n&&1/t==-s?"-0":n}},function(e,t){e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}},function(e,t,n){var r=n(62),i=1/0;e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-i?"-0":t}},function(e,t,n){(function(e){var r;/*! https://mths.be/punycode v1.3.2 by @mathias */!function(i){t&&t.nodeType,e&&e.nodeType;var o="object"==typeof window&&window;o.global!==o&&o.window!==o&&o.self;var a,s=2147483647,c=36,l=1,u=26,p=38,h=700,d=72,m=128,f="-",b=/^xn--/,g=/[^\x20-\x7E]/,v=/[\x2E\u3002\uFF0E\uFF61]/g,y={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},j=c-l,O=Math.floor,k=String.fromCharCode;function _(e){throw RangeError(y[e])}function w(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}function E(e,t){var n=e.split("@"),r="";return n.length>1&&(r=n[0]+"@",e=n[1]),r+w((e=e.replace(v,".")).split("."),t).join(".")}function C(e){for(var t,n,r=[],i=0,o=e.length;i<o;)(t=e.charCodeAt(i++))>=55296&&t<=56319&&i<o?56320==(64512&(n=e.charCodeAt(i++)))?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),i--):r.push(t);return r}function x(e){return w(e,function(e){var t="";return e>65535&&(t+=k((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=k(e)}).join("")}function S(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function A(e,t,n){var r=0;for(e=n?O(e/h):e>>1,e+=O(e/t);e>j*u>>1;r+=c)e=O(e/j);return O(r+(j+1)*e/(e+p))}function M(e){var t,n,r,i,o,a,p,h,b,g,v,y=[],j=e.length,k=0,w=m,E=d;for((n=e.lastIndexOf(f))<0&&(n=0),r=0;r<n;++r)e.charCodeAt(r)>=128&&_("not-basic"),y.push(e.charCodeAt(r));for(i=n>0?n+1:0;i<j;){for(o=k,a=1,p=c;i>=j&&_("invalid-input"),((h=(v=e.charCodeAt(i++))-48<10?v-22:v-65<26?v-65:v-97<26?v-97:c)>=c||h>O((s-k)/a))&&_("overflow"),k+=h*a,!(h<(b=p<=E?l:p>=E+u?u:p-E));p+=c)a>O(s/(g=c-b))&&_("overflow"),a*=g;E=A(k-o,t=y.length+1,0==o),O(k/t)>s-w&&_("overflow"),w+=O(k/t),k%=t,y.splice(k++,0,w)}return x(y)}function T(e){var t,n,r,i,o,a,p,h,b,g,v,y,j,w,E,x=[];for(y=(e=C(e)).length,t=m,n=0,o=d,a=0;a<y;++a)(v=e[a])<128&&x.push(k(v));for(r=i=x.length,i&&x.push(f);r<y;){for(p=s,a=0;a<y;++a)(v=e[a])>=t&&v<p&&(p=v);for(p-t>O((s-n)/(j=r+1))&&_("overflow"),n+=(p-t)*j,t=p,a=0;a<y;++a)if((v=e[a])<t&&++n>s&&_("overflow"),v==t){for(h=n,b=c;!(h<(g=b<=o?l:b>=o+u?u:b-o));b+=c)E=h-g,w=c-g,x.push(k(S(g+E%w,0))),h=O(E/w);x.push(k(S(h,0))),o=A(n,j,r==i),n=0,++r}++n,++t}return x.join("")}a={version:"1.3.2",ucs2:{decode:C,encode:x},decode:M,encode:T,toASCII:function(e){return E(e,function(e){return g.test(e)?"xn--"+T(e):e})},toUnicode:function(e){return E(e,function(e){return b.test(e)?M(e.slice(4).toLowerCase()):e})}},void 0===(r=function(){return a}.call(t,n,t,e))||(e.exports=r)}()}).call(this,n(89)(e))},function(e,t,n){"use strict";e.exports={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},function(e,t,n){"use strict";t.decode=t.parse=n(231),t.encode=t.stringify=n(232)},function(e,t,n){"use strict";function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports=function(e,t,n,i){t=t||"&",n=n||"=";var o={};if("string"!=typeof e||0===e.length)return o;var a=/\+/g;e=e.split(t);var s=1e3;i&&"number"==typeof i.maxKeys&&(s=i.maxKeys);var c=e.length;s>0&&c>s&&(c=s);for(var l=0;l<c;++l){var u,p,h,d,m=e[l].replace(a,"%20"),f=m.indexOf(n);f>=0?(u=m.substr(0,f),p=m.substr(f+1)):(u=m,p=""),h=decodeURIComponent(u),d=decodeURIComponent(p),r(o,h)?Array.isArray(o[h])?o[h].push(d):o[h]=[o[h],d]:o[h]=d}return o}},function(e,t,n){"use strict";var r=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};e.exports=function(e,t,n,i){return t=t||"&",n=n||"=",null===e&&(e=void 0),"object"==typeof e?Object.keys(e).map(function(i){var o=encodeURIComponent(r(i))+n;return Array.isArray(e[i])?e[i].map(function(e){return o+encodeURIComponent(r(e))}).join(t):o+encodeURIComponent(r(e[i]))}).join(t):i?encodeURIComponent(r(i))+n+encodeURIComponent(r(e)):""}},function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){},,function(e,t,n){"use strict";e.exports={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},function(e,t,n){"use strict";t.decode=t.parse=n(249),t.encode=t.stringify=n(250)},function(e,t,n){"use strict";function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports=function(e,t,n,i){t=t||"&",n=n||"=";var o={};if("string"!=typeof e||0===e.length)return o;var a=/\+/g;e=e.split(t);var s=1e3;i&&"number"==typeof i.maxKeys&&(s=i.maxKeys);var c=e.length;s>0&&c>s&&(c=s);for(var l=0;l<c;++l){var u,p,h,d,m=e[l].replace(a,"%20"),f=m.indexOf(n);f>=0?(u=m.substr(0,f),p=m.substr(f+1)):(u=m,p=""),h=decodeURIComponent(u),d=decodeURIComponent(p),r(o,h)?Array.isArray(o[h])?o[h].push(d):o[h]=[o[h],d]:o[h]=d}return o}},function(e,t,n){"use strict";var r=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};e.exports=function(e,t,n,i){return t=t||"&",n=n||"=",null===e&&(e=void 0),"object"==typeof e?Object.keys(e).map(function(i){var o=encodeURIComponent(r(i))+n;return Array.isArray(e[i])?e[i].map(function(e){return o+encodeURIComponent(r(e))}).join(t):o+encodeURIComponent(r(e[i]))}).join(t):i?encodeURIComponent(r(i))+n+encodeURIComponent(r(e)):""}},function(e,t){!function(){"use strict";var t=[],n=3988292384;function r(e){var t,r,i,o,a=-1;for(t=0,i=e.length;t<i;t+=1){for(o=255&(a^e[t]),r=0;r<8;r+=1)1==(1&o)?o=o>>>1^n:o>>>=1;a=a>>>8^o}return-1^a}function i(e,n){var r,o,a;if(void 0!==i.crc&&n&&e||(i.crc=-1,e)){for(r=i.crc,o=0,a=e.length;o<a;o+=1)r=r>>>8^t[255&(r^e[o])];return i.crc=r,-1^r}}!function(){var e,r,i;for(r=0;r<256;r+=1){for(e=r,i=0;i<8;i+=1)1&e?e=n^e>>>1:e>>>=1;t[r]=e>>>0}}(),e.exports=function(e,t){var n;e="string"==typeof e?(n=e,Array.prototype.map.call(n,function(e){return e.charCodeAt(0)})):e;return((t?r(e):i(e))>>>0).toString(16)},e.exports.direct=r,e.exports.table=i}()},function(e,t,n){"use strict";var r=256,i=[],o=window,a=Math.pow(r,6),s=Math.pow(2,52),c=2*s,l=r-1,u=Math.random;function p(e){var t,n=e.length,i=this,o=0,a=i.i=i.j=0,s=i.S=[];for(n||(e=[n++]);o<r;)s[o]=o++;for(o=0;o<r;o++)s[o]=s[a=l&a+e[o%n]+(t=s[o])],s[a]=t;(i.g=function(e){for(var t,n=0,o=i.i,a=i.j,s=i.S;e--;)t=s[o=l&o+1],n=n*r+s[l&(s[o]=s[a=l&a+t])+(s[a]=t)];return i.i=o,i.j=a,n})(r)}function h(e,t){for(var n,r=e+"",i=0;i<r.length;)t[l&i]=l&(n^=19*t[l&i])+r.charCodeAt(i++);return d(t)}function d(e){return String.fromCharCode.apply(0,e)}e.exports=function(t,n){if(n&&!0===n.global)return n.global=!1,Math.random=e.exports(t,n),n.global=!0,Math.random;var l=[],u=(h(function e(t,n){var r,i=[],o=(typeof t)[0];if(n&&"o"==o)for(r in t)try{i.push(e(t[r],n-1))}catch(a){}return i.length?i:"s"==o?t:t+"\0"}(n&&n.entropy||!1?[t,d(i)]:0 in arguments?t:function(e){try{return o.crypto.getRandomValues(e=new Uint8Array(r)),d(e)}catch(t){return[+new Date,o,o.navigator&&o.navigator.plugins,o.screen,d(i)]}}(),3),l),new p(l));return h(d(u.S),i),function(){for(var e=u.g(6),t=a,n=0;e<s;)e=(e+n)*r,t*=r,n=u.g(1);for(;e>=c;)e/=2,t/=2,n>>>=1;return(e+n)/t}},e.exports.resetGlobal=function(){Math.random=u},h(Math.random(),i)},function(e,t,n){function r(){var e;try{e=t.storage.debug}catch(n){}return!e&&"undefined"!=typeof process&&"env"in process&&(e=process.env.DEBUG),e}(t=e.exports=n(254)).log=function(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},t.formatArgs=function(e){var n=this.useColors;if(e[0]=(n?"%c":"")+this.namespace+(n?" %c":" ")+e[0]+(n?"%c ":" ")+"+"+t.humanize(this.diff),!n)return;var r="color: "+this.color;e.splice(1,0,r,"color: inherit");var i=0,o=0;e[0].replace(/%[a-zA-Z%]/g,function(e){"%%"!==e&&(i++,"%c"===e&&(o=i))}),e.splice(o,0,r)},t.save=function(e){try{null==e?t.storage.removeItem("debug"):t.storage.debug=e}catch(n){}},t.load=r,t.useColors=function(){if("undefined"!=typeof window&&window.process&&"renderer"===window.process.type)return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}},t.enable(r())},function(e,t,n){function r(e){var n;function r(){if(r.enabled){var e=r,i=+new Date,o=i-(n||i);e.diff=o,e.prev=n,e.curr=i,n=i;for(var a=new Array(arguments.length),s=0;s<a.length;s++)a[s]=arguments[s];a[0]=t.coerce(a[0]),"string"!=typeof a[0]&&a.unshift("%O");var c=0;a[0]=a[0].replace(/%([a-zA-Z%])/g,function(n,r){if("%%"===n)return n;c++;var i=t.formatters[r];if("function"==typeof i){var o=a[c];n=i.call(e,o),a.splice(c,1),c--}return n}),t.formatArgs.call(e,a),(r.log||t.log||console.log.bind(console)).apply(e,a)}}return r.namespace=e,r.enabled=t.enabled(e),r.useColors=t.useColors(),r.color=function(e){var n,r=0;for(n in e)r=(r<<5)-r+e.charCodeAt(n),r|=0;return t.colors[Math.abs(r)%t.colors.length]}(e),r.destroy=i,"function"==typeof t.init&&t.init(r),t.instances.push(r),r}function i(){var e=t.instances.indexOf(this);return-1!==e&&(t.instances.splice(e,1),!0)}(t=e.exports=r.debug=r.default=r).coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){t.enable("")},t.enable=function(e){var n;t.save(e),t.names=[],t.skips=[];var r=("string"==typeof e?e:"").split(/[\s,]+/),i=r.length;for(n=0;n<i;n++)r[n]&&("-"===(e=r[n].replace(/\*/g,".*?"))[0]?t.skips.push(new RegExp("^"+e.substr(1)+"$")):t.names.push(new RegExp("^"+e+"$")));for(n=0;n<t.instances.length;n++){var o=t.instances[n];o.enabled=t.enabled(o.namespace)}},t.enabled=function(e){if("*"===e[e.length-1])return!0;var n,r;for(n=0,r=t.skips.length;n<r;n++)if(t.skips[n].test(e))return!1;for(n=0,r=t.names.length;n<r;n++)if(t.names[n].test(e))return!0;return!1},t.humanize=n(255),t.instances=[],t.names=[],t.skips=[],t.formatters={}},function(e,t){var n=1e3,r=60*n,i=60*r,o=24*i,a=365.25*o;function s(e,t,n){if(!(e<t))return e<1.5*t?Math.floor(e/t)+" "+n:Math.ceil(e/t)+" "+n+"s"}e.exports=function(e,t){t=t||{};var c,l=typeof e;if("string"===l&&e.length>0)return function(e){if((e=String(e)).length>100)return;var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(!t)return;var s=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return s*a;case"days":case"day":case"d":return s*o;case"hours":case"hour":case"hrs":case"hr":case"h":return s*i;case"minutes":case"minute":case"mins":case"min":case"m":return s*r;case"seconds":case"second":case"secs":case"sec":case"s":return s*n;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return s;default:return}}(e);if("number"===l&&!1===isNaN(e))return t.long?s(c=e,o,"day")||s(c,i,"hour")||s(c,r,"minute")||s(c,n,"second")||c+" ms":function(e){if(e>=o)return Math.round(e/o)+"d";if(e>=i)return Math.round(e/i)+"h";if(e>=r)return Math.round(e/r)+"m";if(e>=n)return Math.round(e/n)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},function(e,t,n){},,function(e,t,n){},,function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"save",function(){return At}),n.d(r,"attributes",function(){return Tt}),n.d(r,"support",function(){return zt});var i=n(19),o=n(13),a=n.n(o),s=n(3),c=n.n(s),l=n(0),u=n(16),p=n(5),h=n(2),d=n(1),m=n(21),f=n.n(m),b=n(7),g=n.n(b),v=n(11),y=n.n(v),j=n(8),O=n.n(j),k=n(9),_=n.n(k),w=n(4),E=n.n(w),C=n(10),x=n.n(C),S=n(6),A=[{icon:Object(l.createElement)(h.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(l.createElement)(h.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(l.createElement)(h.Path,{d:"M3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm18-4H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14z"})),title:Object(d.c)("Original","image style"),value:void 0},{icon:Object(l.createElement)(h.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(l.createElement)(h.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(l.createElement)(h.Path,{d:"M3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm11 10h2V5h-4v2h2v8zm7-14H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14z"})),title:Object(d.c)("Black and White","image style"),value:"black-and-white"},{icon:Object(l.createElement)(h.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(l.createElement)(h.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(l.createElement)(h.Path,{d:"M3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm18-4H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14zm-4-4h-4v-2h2c1.1 0 2-.89 2-2V7c0-1.11-.9-2-2-2h-4v2h4v2h-2c-1.1 0-2 .89-2 2v4h6v-2z"})),title:Object(d.c)("Sepia","image style"),value:"sepia"},{icon:Object(l.createElement)(h.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(l.createElement)(h.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(l.createElement)(h.Path,{d:"M21 1H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14zM3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm14 8v-1.5c0-.83-.67-1.5-1.5-1.5.83 0 1.5-.67 1.5-1.5V7c0-1.11-.9-2-2-2h-4v2h4v2h-2v2h2v2h-4v2h4c1.1 0 2-.89 2-2z"})),title:"1977",value:"1977"},{icon:Object(l.createElement)(h.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(l.createElement)(h.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(l.createElement)(h.Path,{d:"M3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm12 10h2V5h-2v4h-2V5h-2v6h4v4zm6-14H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14z"})),title:Object(d.c)("Clarendon","image style"),value:"clarendon"},{icon:Object(l.createElement)(h.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(l.createElement)(h.Path,{fill:"none",d:"M0 0h24v24H0z"}),Object(l.createElement)(h.Path,{d:"M21 1H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14zM3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm14 8v-2c0-1.11-.9-2-2-2h-2V7h4V5h-6v6h4v2h-4v2h4c1.1 0 2-.89 2-2z"})),title:Object(d.c)("Gingham","image style"),value:"gingham"}],M=Object(d.a)("Pick an image filter");function T(e){var t=e.value,n=e.onChange;return Object(l.createElement)(h.Dropdown,{position:"bottom right",className:"editor-block-switcher",contentClassName:"editor-block-switcher__popover",renderToggle:function(e){var t=e.onToggle,n=e.isOpen;return Object(l.createElement)(h.Toolbar,{controls:[{onClick:t,extraProps:{"aria-haspopup":"true","aria-expanded":n},title:M,tooltip:M,icon:Object(l.createElement)(h.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(l.createElement)(h.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(l.createElement)(h.Path,{d:"M19 10v9H4.98V5h9V3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-9h-2zm-2.94-2.06L17 10l.94-2.06L20 7l-2.06-.94L17 4l-.94 2.06L14 7zM12 8l-1.25 2.75L8 12l2.75 1.25L12 16l1.25-2.75L16 12l-2.75-1.25z"}))}]})},renderContent:function(e){var r=e.onClose;return Object(l.createElement)(h.NavigableMenu,{className:"tiled-gallery__filter-picker-menu"},A.map(function(e){var i,o=e.icon,a=e.title,s=e.value;return Object(l.createElement)(h.MenuItem,{className:t===s?"is-active":void 0,icon:o,isSelected:t===s,key:s||"original",onClick:(i=s,function(){n(t===i?void 0:i),r()}),role:"menuitemcheckbox"},a)}))}})}var z=n(34),D=n.n(z),F=n(54),N=n.n(F),P=n(32),R=n(24),I=n(15),L=n(12),B=n.n(L),q=n(28),V=n(17),H=function(e){function t(){var e,n;g()(this,t);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=O()(this,(e=_()(t)).call.apply(e,[this].concat(i))),c()(E()(n),"img",Object(l.createRef)()),c()(E()(n),"onImageClick",function(){n.props.isSelected||n.props.onSelect()}),c()(E()(n),"onImageKeyDown",function(e){n.img.current===document.activeElement&&n.props.isSelected&&[q.BACKSPACE,q.DELETE].includes(e.keyCode)&&n.props.onRemove()}),n}return x()(t,e),y()(t,[{key:"componentDidUpdate",value:function(){var e=this.props,t=e.alt,n=e.height,r=e.image,i=e.link,o=e.url,a=e.width;if(r){var s={};!t&&r.alt_text&&(s.alt=r.alt_text),!n&&r.media_details&&r.media_details.height&&(s.height=+r.media_details.height),!i&&r.link&&(s.link=r.link),!o&&r.source_url&&(s.url=r.source_url),!a&&r.media_details&&r.media_details.width&&(s.width=+r.media_details.width),Object.keys(s).length&&this.props.setAttributes(s)}}},{key:"render",value:function(){var e,t=this.props,n=t["aria-label"],r=t.alt,i=t.height,o=t.id,a=t.imageFilter,s=t.isSelected,u=t.link,p=t.linkTo,m=t.onRemove,f=t.origUrl,b=t.url,g=t.width;switch(p){case"media":e=b;break;case"attachment":e=u}var v=Object(l.createElement)(l.Fragment,null,Object(l.createElement)("img",{alt:r,"aria-label":n,"data-height":i,"data-id":o,"data-link":u,"data-url":f,"data-width":g,onClick:this.onImageClick,onKeyDown:this.onImageKeyDown,ref:this.img,src:b,tabIndex:"0"}),Object(R.isBlobURL)(f)&&Object(l.createElement)(h.Spinner,null));return Object(l.createElement)("figure",{className:B()("tiled-gallery__item",c()({"is-selected":s,"is-transient":Object(R.isBlobURL)(f)},"filter__".concat(a),!!a))},s&&Object(l.createElement)("div",{className:"tiled-gallery__item__inline-menu"},Object(l.createElement)(h.IconButton,{icon:"no-alt",onClick:m,className:"tiled-gallery__item__remove",label:Object(d.a)("Remove Image")})),e?Object(l.createElement)("a",null,v):v)}}]),t}(l.Component),U=Object(V.withSelect)(function(e,t){var n=e("core").getMedia,r=t.id;return{image:r?n(r):null}})(H);function G(e){var t,n=e.alt,r=e.imageFilter,i=e.height,o=e.id,a=e.link,s=e.linkTo,u=e.origUrl,p=e.url,h=e.width;if(Object(R.isBlobURL)(u))return null;switch(s){case"media":t=p;break;case"attachment":t=a}var d=Object(l.createElement)("img",{alt:n,"data-height":i,"data-id":o,"data-link":a,"data-url":u,"data-width":h,src:p});return Object(l.createElement)("figure",{className:B()("tiled-gallery__item",c()({},"filter__".concat(r),!!r))},t?Object(l.createElement)("a",{href:t},d):d)}var $=n(31);function K(e){var t=e.children;return Object(l.createElement)("div",{className:"tiled-gallery__col"},t)}function Z(e){var t=e.children,n=e.galleryRef;return Object(l.createElement)("div",{className:"tiled-gallery__gallery",ref:n},t)}function W(e){var t=e.children,n=e.className;return Object(l.createElement)("div",{className:B()("tiled-gallery__row",n)},t)}var J=n(44);function Y(e){var t=e.height,n=e.width;return t&&n?n/t:1}var X=ge([2,1,2],5),Q=ve([ye,ye,je,ye,ye]),ee=ve([ye,ye,ye,je,ye,ye,ye]),te=ge([3,1,3],5),ne=ve([je,ye,ye,je]),re=ge([1,2,1],5),ie=ve([je,ye,ye,ye]),oe=ge([1,3],3),ae=ve([ye,ye,ye,je]),se=ge([3,1],3),ce=ve([ke(1.6),Object(p.overEvery)(Oe(.9),ke(2)),Object(p.overEvery)(Oe(.9),ke(2))]),le=ge([1,2],3),ue=ge([1,1,1,1,1],1),pe=ge([1,1,1,1],1),he=ge([1,1,1],3),de=ve([Object(p.overEvery)(Oe(.9),ke(2)),Object(p.overEvery)(Oe(.9),ke(2)),ke(1.6)]),me=ge([2,1],3),fe=ve([function(e){return e>=2}]);function be(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).isWide;return function e(n,r){if(!r.length)return n;var i;i=r.length>15&&Q(r)&&X(n)?[2,1,2]:r.length>15&&ee(r)&&te(n)?[3,1,3]:5!==r.length&&ne(r)&&re(n)?[1,2,1]:ie(r)&&oe(n)?[1,3]:ae(r)&&se(n)?[3,1]:ce(r)&&le(n)?[1,2]:t&&(5===r.length||10!==r.length&&r.length>6)&&ue(n)&&Object(p.sum)(Object(p.take)(r,5))<5?[1,1,1,1,1]:function(e,t){var n=Object(p.sum)(Object(p.take)(t,4));return pe(e)&&n<3.5&&t.length>5||n<7&&4===t.length}(n,r)?[1,1,1,1]:function(e,t,n){var r=Object(p.sum)(Object(p.take)(t,3));return t.length>=3&&4!==t.length&&6!==t.length&&he(e)&&(r<2.5||r<5&&t.length>=3&&t[0]===t[2]||n)}(n,r,t)?[1,1,1]:de(r)&&me(n)?[2,1]:fe(r)?[1]:r.length>3?[1,1]:Array(r.length).fill(1);var o=n.concat([i]),a=Object(p.sum)(i);return e(o,r.slice(a))}([],e)}function ge(e,t){return function(n){return!Object(p.some)(Object(p.takeRight)(n,t),function(t){return Object(p.isEqual)(t,e)})}}function ve(e){return function(t){return t.length>=e.length&&Object(p.every)(Object(p.zipWith)(e,t.slice(0,e.length),function(e,t){return e(t)}))}}function ye(e){return e>=1&&e<2}function je(e){return e<1}function Oe(e){return function(t){return t>=e}}function ke(e){return function(t){return t<e}}var _e=function(e){function t(){var e,n;g()(this,t);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=O()(this,(e=_()(t)).call.apply(e,[this].concat(i))),c()(E()(n),"gallery",Object(l.createRef)()),c()(E()(n),"pendingRaf",null),c()(E()(n),"ro",null),c()(E()(n),"handleGalleryResize",function(e){n.pendingRaf&&(cancelAnimationFrame(n.pendingRaf),n.pendingRaf=null),n.pendingRaf=requestAnimationFrame(function(){var t=!0,n=!1,r=void 0;try{for(var i,o=function(){var e=i.value,t=e.contentRect,n=e.target,r=t.width;Object(J.a)(n).forEach(function(e){return Object(J.b)(e,r)})},a=e[Symbol.iterator]();!(t=(i=a.next()).done);t=!0)o()}catch(s){n=!0,r=s}finally{try{t||null==a.return||a.return()}finally{if(n)throw r}}})}),n}return x()(t,e),y()(t,[{key:"componentDidMount",value:function(){this.observeResize()}},{key:"componentWillUnmount",value:function(){this.unobserveResize()}},{key:"componentDidUpdate",value:function(e){e.images!==this.props.images||e.align!==this.props.align?this.triggerResize():"columns"===this.props.layoutStyle&&e.columns!==this.props.columns&&this.triggerResize()}},{key:"triggerResize",value:function(){this.gallery.current&&this.handleGalleryResize([{target:this.gallery.current,contentRect:{width:this.gallery.current.clientWidth}}])}},{key:"observeResize",value:function(){this.triggerResize(),this.ro=new $.a(this.handleGalleryResize),this.gallery.current&&this.ro.observe(this.gallery.current)}},{key:"unobserveResize",value:function(){this.ro&&(this.ro.disconnect(),this.ro=null),this.pendingRaf&&(cancelAnimationFrame(this.pendingRaf),this.pendingRaf=null)}},{key:"render",value:function(){var e=this.props,t=e.align,n=e.columns,r=e.images,i=e.layoutStyle,o=e.renderedImages,a=function(e){return Object(p.map)(e,Y)}(r),s="columns"===i?function(e,t){if(e.length<=t)return[Array(e.length).fill(1)];for(var n=Object(p.sum)(e)/t,r=[],i=e,o=0,a=function(e){var t=Object(p.takeWhile)(i,function(t){var r=o<=(e+1)*n;return r&&(o+=t),r}).length;r.push(t),i=Object(p.drop)(i,t)},s=0;s<t-1;s++)a(s);return r.push(i.length),[r]}(a,n):be(a,{isWide:["full","wide"].includes(t)}),c=0;return Object(l.createElement)(Z,{galleryRef:this.gallery},s.map(function(e,t){return Object(l.createElement)(W,{key:t},e.map(function(e,t){var n=o.slice(c,c+e);return c+=e,Object(l.createElement)(K,{key:t},n)}))}))}}]),t}(l.Component),we=n(22);function Ee(e){var t=e.columns,n=e.renderedImages,r=Math.min(we.h,t),i=n.length%r;return Object(l.createElement)(Z,null,[].concat(f()(i?[Object(p.take)(n,i)]:[]),f()(Object(p.chunk)(Object(p.drop)(n,i),r))).map(function(e,t){return Object(l.createElement)(W,{key:t,className:"columns-".concat(e.length)},e.map(function(e,t){return Object(l.createElement)(K,{key:t},e)}))}))}var Ce=function(e){function t(){return g()(this,t),O()(this,_()(t).apply(this,arguments))}return x()(t,e),y()(t,[{key:"photonize",value:function(e){var t=e.height,n=e.width,r=e.url;if(r){if(Object(R.isBlobURL)(r)||/^https?:\/\/localhost/.test(r))return r;var i=r.split("?",1)[0],o=function(e){var t=Object(P.parse)(e).host;return/\.files\.wordpress\.com$/.test(t)}(r)?Se:N.a;if(xe(this.props.layoutStyle)&&n&&t){var a=Math.min(we.i,n,t);return o(i,{resize:"".concat(a,",").concat(a)})}return o(i)}}},{key:"renderImage",value:function(e,t){var n=this.props,r=n.imageFilter,i=n.images,o=n.isSave,a=n.linkTo,s=n.onRemoveImage,c=n.onSelectImage,u=n.selectedImage,p=n.setImageAttributes,h=Object(I.sprintf)(Object(d.a)("image %1$d of %2$d in gallery"),t+1,i.length),m=o?G:U;return Object(l.createElement)(m,{alt:e.alt,"aria-label":h,height:e.height,id:e.id,imageFilter:r,isSelected:u===t,key:t,link:e.link,linkTo:a,onRemove:o?void 0:s(t),onSelect:o?void 0:c(t),origUrl:e.url,setAttributes:o?void 0:p(t),url:this.photonize(e),width:e.width})}},{key:"render",value:function(){var e=this.props,t=e.align,n=e.children,r=e.className,i=e.columns,o=e.images,a=e.layoutStyle,s=xe(a)?Ee:_e,c=this.props.images.map(this.renderImage,this);return Object(l.createElement)("div",{className:r},Object(l.createElement)(s,{align:t,columns:i,images:o,layoutStyle:a,renderedImages:c}),n)}}]),t}(l.Component);function xe(e){return["circle","square"].includes(e)}function Se(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={width:"w",height:"h",letterboxing:"lb",removeLetterboxing:"ulb"},r=Object(P.parse)(e),i=(r.auth,r.hash,r.port,r.query,r.search,D()(r,["auth","hash","port","query","search"]));return i.query=Object.keys(t).reduce(function(e,r){return Object.assign(e,c()({},n.hasOwnProperty(r)?n[r]:r,t[r]))},{}),Object(P.format)(i)}var Ae=n(101),Me=n.n(Ae);function Te(e,t){var n=function(e,t){var n=!0,r=!1,i=void 0;try{for(var o,a=new Me.a(t).values()[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var s=o.value;if(-1!==s.indexOf("is-style-")){var c=s.substring(9),l=Object(p.find)(e,{name:c});if(l)return l}}}catch(u){r=!0,i=u}finally{try{n||null==a.return||a.return()}finally{if(r)throw i}}return Object(p.find)(e,"isDefault")}(e,t);return n?n.name:null}var ze=[{value:"attachment",label:Object(d.a)("Attachment Page")},{value:"media",label:Object(d.a)("Media File")},{value:"none",label:Object(d.a)("None")}];function De(e){return Math.min(3,e.images.length)}var Fe=function(e){var t=Object(p.pick)(e,[["alt"],["id"],["link"]]);return t.url=Object(p.get)(e,["sizes","large","url"])||Object(p.get)(e,["media_details","sizes","large","source_url"])||e.url,t},Ne=function(e){function t(){var e,n;g()(this,t);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=O()(this,(e=_()(t)).call.apply(e,[this].concat(i))),c()(E()(n),"state",{selectedImage:null}),c()(E()(n),"addFiles",function(e){var t=n.props.attributes.images||[],r=n.props.noticeOperations;Object(S.mediaUpload)({allowedTypes:we.a,filesList:e,onFileChange:function(e){var r=e.map(function(e){return Fe(e)});n.setAttributes({images:t.concat(r)})},onError:r.createErrorNotice})}),c()(E()(n),"onRemoveImage",function(e){return function(){var t=Object(p.filter)(n.props.attributes.images,function(t,n){return e!==n}),r=n.props.attributes.columns;n.setState({selectedImage:null}),n.setAttributes({images:t,columns:r?Math.min(t.length,r):r})}}),c()(E()(n),"onSelectImage",function(e){return function(){n.state.selectedImage!==e&&n.setState({selectedImage:e})}}),c()(E()(n),"onSelectImages",function(e){var t=n.props.attributes.columns;n.setAttributes({columns:t?Math.min(e.length,t):t,images:e.map(function(e){return Fe(e)})})}),c()(E()(n),"setColumnsNumber",function(e){return n.setAttributes({columns:e})}),c()(E()(n),"setImageAttributes",function(e){return function(t){var r=n.props.attributes.images;r[e]&&n.setAttributes({images:[].concat(f()(r.slice(0,e)),[a()({},r[e],t)],f()(r.slice(e+1)))})}}),c()(E()(n),"setLinkTo",function(e){return n.setAttributes({linkTo:e})}),c()(E()(n),"uploadFromFiles",function(e){return n.addFiles(e.target.files)}),n}return x()(t,e),y()(t,[{key:"setAttributes",value:function(e){if(e.ids)throw new Error('The "ids" attribute should not be changed directly. It is managed automatically when "images" attribute changes');e.images&&(e=a()({},e,{ids:e.images.map(function(e){var t=e.id;return parseInt(t,10)})})),this.props.setAttributes(e)}},{key:"render",value:function(){var e=this,t=this.state.selectedImage,n=this.props,r=n.attributes,i=n.isSelected,o=n.className,a=n.noticeOperations,s=n.noticeUI,c=n.setAttributes,u=r.align,p=r.columns,m=void 0===p?De(r):p,f=r.imageFilter,b=r.images,g=r.linkTo,v=Object(l.createElement)(h.DropZone,{onFilesDrop:this.addFiles}),y=Object(l.createElement)(S.BlockControls,null,!!b.length&&Object(l.createElement)(l.Fragment,null,Object(l.createElement)(h.Toolbar,null,Object(l.createElement)(S.MediaUpload,{onSelect:this.onSelectImages,allowedTypes:we.a,multiple:!0,gallery:!0,value:b.map(function(e){return e.id}),render:function(e){var t=e.open;return Object(l.createElement)(h.IconButton,{className:"components-toolbar__control",label:Object(d.a)("Edit Gallery"),icon:"edit",onClick:t})}})),Object(l.createElement)(T,{value:f,onChange:function(t){c({imageFilter:t}),e.setState({selectedImage:null})}})));if(0===b.length)return Object(l.createElement)(l.Fragment,null,y,Object(l.createElement)(S.MediaPlaceholder,{icon:Object(l.createElement)("div",{className:"tiled-gallery__media-placeholder-icon"},Pt),className:o,labels:{title:Object(d.a)("Tiled Gallery"),name:Object(d.a)("images")},onSelect:this.onSelectImages,accept:"image/*",allowedTypes:we.a,multiple:!0,notices:s,onError:a.createErrorNotice}));var j=Te(we.g,r.className);return Object(l.createElement)(l.Fragment,null,y,Object(l.createElement)(S.InspectorControls,null,Object(l.createElement)(h.PanelBody,{title:Object(d.a)("Tiled Gallery settings")},["columns","circle","square"].includes(j)&&b.length>1&&Object(l.createElement)(h.RangeControl,{label:Object(d.a)("Columns"),value:m,onChange:this.setColumnsNumber,min:1,max:Math.min(we.h,b.length)}),Object(l.createElement)(h.SelectControl,{label:Object(d.a)("Link To"),value:g,onChange:this.setLinkTo,options:ze}))),s,Object(l.createElement)(Ce,{align:u,className:o,columns:m,imageFilter:f,images:b,layoutStyle:j,linkTo:g,onRemoveImage:this.onRemoveImage,onSelectImage:this.onSelectImage,selectedImage:i?t:null,setImageAttributes:this.setImageAttributes},v,i&&Object(l.createElement)("div",{className:"tiled-gallery__add-item"},Object(l.createElement)(h.FormFileUpload,{multiple:!0,isLarge:!0,className:"tiled-gallery__add-item-button",onChange:this.uploadFromFiles,accept:"image/*",icon:"insert"},Object(d.a)("Upload an image")))))}}],[{key:"getDerivedStateFromProps",value:function(e,t){return e.isSelected||null===t.selectedImage?null:{selectedImage:null}}}]),t}(l.Component),Pe=Object(h.withNotices)(Ne);n(256);function Re(e){var t,n=e["aria-label"],r=e.alt,i=e.height,o=e.id,a=e.link,s=e.linkTo,c=e.origUrl,u=e.url,p=e.width;if(Object(R.isBlobURL)(c))return null;switch(s){case"media":t=u;break;case"attachment":t=a}var h=Object(l.createElement)("img",{alt:r,"aria-label":n,"data-height":i,"data-id":o,"data-link":a,"data-url":c,"data-width":p,src:u});return Object(l.createElement)("figure",{className:"tiled-gallery__item"},t?Object(l.createElement)("a",{href:t},h):h)}function Ie(e){var t=e.children;return Object(l.createElement)("div",{className:"tiled-gallery__col"},t)}function Le(e){var t=e.children,n=e.galleryRef;return Object(l.createElement)("div",{className:"tiled-gallery__gallery",ref:n},t)}function Be(e){var t=e.children,n=e.className;return Object(l.createElement)("div",{className:B()("tiled-gallery__row",n)},t)}var qe=n(23),Ve=n.n(qe),He=4,Ue=20,Ge=[{isDefault:!0,name:"rectangular"},{name:"circle"},{name:"square"},{name:"columns"}];function $e(e,t){var n=(t-e.reduce(function(e,t){return e+t},0))/e.length;return e.map(function(e){return e+n})}function Ke(e,t){!function(e,t,n){var r=Ve()(t,2),i=r[0],o=r[1],a=1/i*(n-He*(e.childElementCount-1)-o);!function(e,t){var n=t.rawHeight,r=t.rowWidth,i=Ze(e),o=i.map(function(e){return(n-He*(e.childElementCount-1))*Je(e)[0]}),a=$e(o,r);i.forEach(function(e,t){var r=o[t],i=a[t];!function(e,t){var n=t.colHeight,r=t.width,i=t.rawWidth,o=$e(We(e).map(function(e){return i/Ye(e)}),n);Array.from(e.children).forEach(function(e,t){var n=o[t];e.setAttribute("style","height:".concat(n,"px;width:").concat(r,"px;"))})}(e,{colHeight:n-He*(e.childElementCount-1),width:i,rawWidth:r})})}(e,{rawHeight:a,rowWidth:n-He*(e.childElementCount-1)})}(e,function(e){return Ze(e).map(Je).reduce(function(e,t){var n=Ve()(e,2),r=n[0],i=n[1],o=Ve()(t,2),a=o[0],s=o[1];return[r+a,i+s]},[0,0])}(e),t)}function Ze(e){return Array.from(e.querySelectorAll(".tiled-gallery__col"))}function We(e){return Array.from(e.querySelectorAll(".tiled-gallery__item > img, .tiled-gallery__item > a > img"))}function Je(e){var t=We(e),n=t.length,r=1/t.map(Ye).reduce(function(e,t){return e+1/t},0);return[r,r*n||1]}function Ye(e){var t=parseInt(e.dataset.width,10),n=parseInt(e.dataset.height,10);return t&&!Number.isNaN(t)&&n&&!Number.isNaN(n)?t/n:1}function Xe(e){var t=e.height,n=e.width;return t&&n?n/t:1}var Qe=vt([2,1,2],5),et=yt([jt,jt,Ot,jt,jt]),tt=yt([jt,jt,jt,Ot,jt,jt,jt]),nt=vt([3,1,3],5),rt=yt([Ot,jt,jt,Ot]),it=vt([1,2,1],5),ot=yt([Ot,jt,jt,jt]),at=vt([1,3],3),st=yt([jt,jt,jt,Ot]),ct=vt([3,1],3),lt=yt([_t(1.6),Object(p.overEvery)(kt(.9),_t(2)),Object(p.overEvery)(kt(.9),_t(2))]),ut=vt([1,2],3),pt=vt([1,1,1,1,1],1),ht=vt([1,1,1,1],1),dt=vt([1,1,1],3),mt=yt([Object(p.overEvery)(kt(.9),_t(2)),Object(p.overEvery)(kt(.9),_t(2)),_t(1.6)]),ft=vt([2,1],3),bt=yt([function(e){return e>=2}]);function gt(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).isWide;return function e(n,r){if(!r.length)return n;var i;i=r.length>15&&et(r)&&Qe(n)?[2,1,2]:r.length>15&&tt(r)&&nt(n)?[3,1,3]:5!==r.length&&rt(r)&&it(n)?[1,2,1]:ot(r)&&at(n)?[1,3]:st(r)&&ct(n)?[3,1]:lt(r)&&ut(n)?[1,2]:t&&(5===r.length||10!==r.length&&r.length>6)&&pt(n)&&Object(p.sum)(Object(p.take)(r,5))<5?[1,1,1,1,1]:function(e,t){var n=Object(p.sum)(Object(p.take)(t,4));return ht(e)&&n<3.5&&t.length>5||n<7&&4===t.length}(n,r)?[1,1,1,1]:function(e,t,n){var r=Object(p.sum)(Object(p.take)(t,3));return t.length>=3&&4!==t.length&&6!==t.length&&dt(e)&&(r<2.5||r<5&&t.length>=3&&t[0]===t[2]||n)}(n,r,t)?[1,1,1]:mt(r)&&ft(n)?[2,1]:bt(r)?[1]:r.length>3?[1,1]:Array(r.length).fill(1);var o=n.concat([i]),a=Object(p.sum)(i);return e(o,r.slice(a))}([],e)}function vt(e,t){return function(n){return!Object(p.some)(Object(p.takeRight)(n,t),function(t){return Object(p.isEqual)(t,e)})}}function yt(e){return function(t){return t.length>=e.length&&Object(p.every)(Object(p.zipWith)(e,t.slice(0,e.length),function(e,t){return e(t)}))}}function jt(e){return e>=1&&e<2}function Ot(e){return e<1}function kt(e){return function(t){return t>=e}}function _t(e){return function(t){return t<e}}var wt=function(e){function t(){var e,n;g()(this,t);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=O()(this,(e=_()(t)).call.apply(e,[this].concat(i))),c()(E()(n),"gallery",Object(l.createRef)()),c()(E()(n),"pendingRaf",null),c()(E()(n),"ro",null),c()(E()(n),"handleGalleryResize",function(e){n.pendingRaf&&(cancelAnimationFrame(n.pendingRaf),n.pendingRaf=null),n.pendingRaf=requestAnimationFrame(function(){var t=!0,n=!1,r=void 0;try{for(var i,o=function(){var e,t=i.value,n=t.contentRect,r=t.target,o=n.width;(e=r,Array.from(e.querySelectorAll(".tiled-gallery__row"))).forEach(function(e){return Ke(e,o)})},a=e[Symbol.iterator]();!(t=(i=a.next()).done);t=!0)o()}catch(s){n=!0,r=s}finally{try{t||null==a.return||a.return()}finally{if(n)throw r}}})}),n}return x()(t,e),y()(t,[{key:"componentDidMount",value:function(){this.observeResize()}},{key:"componentWillUnmount",value:function(){this.unobserveResize()}},{key:"componentDidUpdate",value:function(e){e.images!==this.props.images||e.align!==this.props.align?this.triggerResize():"columns"===this.props.layoutStyle&&e.columns!==this.props.columns&&this.triggerResize()}},{key:"triggerResize",value:function(){this.gallery.current&&this.handleGalleryResize([{target:this.gallery.current,contentRect:{width:this.gallery.current.clientWidth}}])}},{key:"observeResize",value:function(){this.triggerResize(),this.ro=new $.a(this.handleGalleryResize),this.gallery.current&&this.ro.observe(this.gallery.current)}},{key:"unobserveResize",value:function(){this.ro&&(this.ro.disconnect(),this.ro=null),this.pendingRaf&&(cancelAnimationFrame(this.pendingRaf),this.pendingRaf=null)}},{key:"render",value:function(){var e=this.props,t=e.align,n=e.columns,r=e.images,i=e.layoutStyle,o=e.renderedImages,a=function(e){return Object(p.map)(e,Xe)}(r),s="columns"===i?function(e,t){if(e.length<=t)return[Array(e.length).fill(1)];for(var n=Object(p.sum)(e)/t,r=[],i=e,o=0,a=function(e){var t=Object(p.takeWhile)(i,function(t){var r=o<=(e+1)*n;return r&&(o+=t),r}).length;r.push(t),i=Object(p.drop)(i,t)},s=0;s<t-1;s++)a(s);return r.push(i.length),[r]}(a,n):gt(a,{isWide:["full","wide"].includes(t)}),c=0;return Object(l.createElement)(Le,{galleryRef:this.gallery},s.map(function(e,t){return Object(l.createElement)(Be,{key:t},e.map(function(e,t){var n=o.slice(c,c+e);return c+=e,Object(l.createElement)(Ie,{key:t},n)}))}))}}]),t}(l.Component);function Et(e){var t=e.columns,n=e.renderedImages,r=Math.min(Ue,t),i=n.length%r;return Object(l.createElement)(Le,null,[].concat(f()(i?[Object(p.take)(n,i)]:[]),f()(Object(p.chunk)(Object(p.drop)(n,i),r))).map(function(e,t){return Object(l.createElement)(Be,{key:t,className:"columns-".concat(e.length)},e.map(function(e,t){return Object(l.createElement)(Ie,{key:t},e)}))}))}var Ct=function(e){function t(){return g()(this,t),O()(this,_()(t).apply(this,arguments))}return x()(t,e),y()(t,[{key:"photonize",value:function(e){var t=e.height,n=e.width,r=e.url;if(r){if(Object(R.isBlobURL)(r)||/^https?:\/\/localhost/.test(r))return r;var i=r.split("?",1)[0],o=function(e){var t=Object(P.parse)(e).host;return/\.files\.wordpress\.com$/.test(t)}(r)?St:N.a;if(xt(this.props.layoutStyle)&&n&&t){var a=Math.min(2e3,n,t);return o(i,{resize:"".concat(a,",").concat(a)})}return o(i)}}},{key:"renderImage",value:function(e,t){var n=this.props,r=n.images,i=n.linkTo,o=n.selectedImage,a=Object(I.sprintf)(Object(d.a)("image %1$d of %2$d in gallery"),t+1,r.length);return Object(l.createElement)(Re,{alt:e.alt,"aria-label":a,height:e.height,id:e.id,origUrl:e.url,isSelected:o===t,key:t,link:e.link,linkTo:i,url:this.photonize(e),width:e.width})}},{key:"render",value:function(){var e=this.props,t=e.align,n=e.children,r=e.className,i=e.columns,o=e.images,a=e.layoutStyle,s=xt(a)?Et:wt,c=this.props.images.map(this.renderImage,this);return Object(l.createElement)("div",{className:r},Object(l.createElement)(s,{align:t,columns:i,images:o,layoutStyle:a,renderedImages:c}),n)}}]),t}(l.Component);function xt(e){return["circle","square"].includes(e)}function St(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={width:"w",height:"h",letterboxing:"lb",removeLetterboxing:"ulb"},r=Object(P.parse)(e),i=(r.auth,r.hash,r.port,r.query,r.search,D()(r,["auth","hash","port","query","search"]));return i.query=Object.keys(t).reduce(function(e,r){return Object.assign(e,c()({},n.hasOwnProperty(r)?n[r]:r,t[r]))},{}),Object(P.format)(i)}function At(e){var t=e.attributes,n=t.images;if(!n.length)return null;var r=t.align,i=t.className,o=t.columns,a=void 0===o?function(e){return Math.min(3,e.images.length)}(t):o,s=t.linkTo;return Object(l.createElement)(Ct,{align:r,className:i,columns:a,images:n,layoutStyle:Te(Ge,i),linkTo:s})}var Mt,Tt={align:{default:"center",type:"string"},className:{default:"is-style-".concat("rectangular"),type:"string"},columns:{type:"number"},ids:{default:[],type:"array"},images:{type:"array",default:[],source:"query",selector:".tiled-gallery__item",query:{alt:{attribute:"alt",default:"",selector:"img",source:"attribute"},caption:{selector:"figcaption",source:"html",type:"string"},height:{attribute:"data-height",selector:"img",source:"attribute",type:"number"},id:{attribute:"data-id",selector:"img",source:"attribute"},link:{attribute:"data-link",selector:"img",source:"attribute"},url:{attribute:"data-url",selector:"img",source:"attribute"},width:{attribute:"data-width",selector:"img",source:"attribute",type:"number"}}},linkTo:{default:"none",type:"string"}},zt={align:["center","wide","full"],customClassName:!1,html:!1},Dt=(Mt={},c()(Mt,we.e,Object(d.c)("Tiled mosaic","Tiled gallery layout")),c()(Mt,we.c,Object(d.c)("Circles","Tiled gallery layout")),c()(Mt,we.d,Object(d.c)("Tiled columns","Tiled gallery layout")),c()(Mt,we.f,Object(d.c)("Square tiles","Tiled gallery layout")),Mt),Ft=we.g.map(function(e){return a()({},e,{label:Dt[e.name]})}),Nt={align:{default:"center",type:"string"},className:{default:"is-style-".concat(we.e),type:"string"},columns:{type:"number"},ids:{default:[],type:"array"},imageFilter:{type:"string"},images:{type:"array",default:[],source:"query",selector:".tiled-gallery__item",query:{alt:{attribute:"alt",default:"",selector:"img",source:"attribute"},caption:{selector:"figcaption",source:"html",type:"string"},height:{attribute:"data-height",selector:"img",source:"attribute",type:"number"},id:{attribute:"data-id",selector:"img",source:"attribute"},link:{attribute:"data-link",selector:"img",source:"attribute"},url:{attribute:"data-url",selector:"img",source:"attribute"},width:{attribute:"data-width",selector:"img",source:"attribute",type:"number"}}},linkTo:{default:"none",type:"string"}},Pt=Object(l.createElement)(h.SVG,{viewBox:"0 0 24 24",width:24,height:24},Object(l.createElement)(h.Path,{fill:"currentColor",d:"M19 5v2h-4V5h4M9 5v6H5V5h4m10 8v6h-4v-6h4M9 17v2H5v-2h4M21 3h-8v6h8V3zM11 3H3v10h8V3zm10 8h-8v10h8V11zm-10 4H3v6h8v-6z"})),Rt={attributes:Nt,category:"jetpack",description:Object(d.a)("Display multiple images in an elegantly organized tiled layout."),icon:Pt,keywords:[Object(d.c)("images","block search term"),Object(d.c)("photos","block search term"),Object(d.c)("masonry","block search term")],styles:Ft,supports:{align:["center","wide","full"],customClassName:!1,html:!1},title:Object(d.a)("Tiled Gallery"),transforms:{from:[{type:"block",blocks:["core/gallery"],transform:function(e){var t=Object(p.filter)(e.images,function(e){var t=e.id,n=e.url;return t&&n});return t.length>0?Object(u.createBlock)("jetpack/".concat("tiled-gallery"),{images:t.map(function(e){return{id:e.id,url:e.url,alt:e.alt,caption:e.caption}})}):Object(u.createBlock)("jetpack/".concat("tiled-gallery"))}}],to:[{type:"block",blocks:["core/gallery"],transform:function(e){var t=e.images,n=e.columns,r=e.linkTo;return Object(u.createBlock)("core/gallery",{images:t,columns:n,imageCrop:!0,linkTo:r})}},{type:"block",blocks:["core/image"],transform:function(e){var t=e.images;return t.length>0?t.map(function(e){var t=e.id,n=e.url,r=e.alt,i=e.caption;return Object(u.createBlock)("core/image",{id:t,url:n,alt:r,caption:i})}):Object(u.createBlock)("core/image")}}]},edit:Pe,save:function(e){var t=e.attributes,n=t.imageFilter,r=t.images;if(!r.length)return null;var i=t.align,o=t.className,a=t.columns,s=void 0===a?De(t):a,c=t.linkTo;return Object(l.createElement)(Ce,{align:i,className:o,columns:s,imageFilter:n,images:r,isSave:!0,layoutStyle:Te(we.g,o),linkTo:c})},deprecated:[r]};Object(i.a)("tiled-gallery",Rt)},function(e,t,n){"use strict";n.r(t);var r={};n.r(r),n.d(r,"setConnectionTestResults",function(){return u}),n.d(r,"refreshConnectionTestResults",function(){return p}),n.d(r,"fetchFromAPI",function(){return h});var i={};n.r(i),n.d(i,"getFailedConnections",function(){return d}),n.d(i,"getMustReauthConnections",function(){return m});var o=n(0),a=n(2),s=n(40),c=n(6),l=(n(183),n(17));function u(e){return{type:"SET_CONNECTION_TEST_RESULTS",results:e}}function p(){return{type:"REFRESH_CONNECTION_TEST_RESULTS"}}function h(e){return{type:"FETCH_FROM_API",path:e}}function d(e){return e.filter(function(e){return!1===e.test_success})}function m(e){return e.filter(function(e){return"must_reauth"===e.test_success}).map(function(e){return e.service_name})}var f=n(21),b=n.n(f),g=n(97),v=n.n(g),y=n(5),j=n(36),O=n.n(j),k=n(26),_=n.n(k);function w(){return(w=O()(regeneratorRuntime.mark(function e(t,n){var r,i;return regeneratorRuntime.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r=n.dispatch,e.prev=1,e.next=4,_()({path:"/wpcom/v2/publicize/connection-test-results"});case 4:return i=e.sent,e.abrupt("return",r(u(i)));case 8:e.prev=8,e.t0=e.catch(1);case 10:case"end":return e.stop()}},e,null,[[1,8]])}))).apply(this,arguments)}var E={REFRESH_CONNECTION_TEST_RESULTS:function(e,t){return w.apply(this,arguments)}};var C,x,S,A,M,T={FETCH_FROM_API:function(e){var t=e.path;return _()({path:t})}},z=Object(l.registerStore)("jetpack/publicize",{actions:r,controls:T,reducer:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0;switch(t.type){case"SET_CONNECTION_TEST_RESULTS":return t.results;case"REFRESH_CONNECTION_TEST_RESULTS":return[]}return e},selectors:i});C=z,S=[v()(E)],A=function(){throw new Error("Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.")},M={getState:C.getState,dispatch:function(){return A.apply(void 0,arguments)}},x=S.map(function(e){return e(M)}),A=y.flowRight.apply(void 0,b()(x))(C.dispatch),C.dispatch=A;var D=n(41),F=n(14),N=n(7),P=n.n(N),R=n(11),I=n.n(R),L=n(8),B=n.n(L),q=n(9),V=n.n(q),H=n(4),U=n.n(H),G=n(10),$=n.n(G),K=n(3),Z=n.n(K),W=n(1),J=function(e){function t(){var e,n;P()(this,t);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=B()(this,(e=V()(t)).call.apply(e,[this].concat(i))),Z()(U()(n),"refreshConnectionClick",function(e){var t=e.target,r=t.href,i=t.title;e.preventDefault();var o=window.open(r,i,""),a=window.setInterval(function(){!1!==o.closed&&(window.clearInterval(a),n.props.refreshConnections())},500)}),n}return $()(t,e),I()(t,[{key:"componentDidMount",value:function(){this.props.refreshConnections()}},{key:"renderRefreshableConnections",value:function(){var e=this,t=this.props.failedConnections.filter(function(e){return e.can_refresh});return t.length?Object(o.createElement)(a.Notice,{className:"jetpack-publicize-notice",isDismissible:!1,status:"error"},Object(o.createElement)("p",null,Object(W.a)("Before you hit Publish, please refresh the following connection(s) to make sure we can Publicize your post:")),t.map(function(t){return Object(o.createElement)(a.Button,{href:t.refresh_url,isSmall:!0,key:t.id,onClick:e.refreshConnectionClick,title:t.refresh_text},t.refresh_text)})):null}},{key:"renderNonRefreshableConnections",value:function(){var e=this.props.failedConnections.filter(function(e){return!e.can_refresh});return e.length?e.map(function(e){return Object(o.createElement)(a.Notice,{className:"jetpack-publicize-notice",isDismissible:!1,status:"error"},Object(o.createElement)("p",null,e.test_message))}):null}},{key:"render",value:function(){return Object(o.createElement)(o.Fragment,null,this.renderRefreshableConnections(),this.renderNonRefreshableConnections())}}]),t}(o.Component),Y=Object(F.compose)([Object(l.withSelect)(function(e){return{failedConnections:e("jetpack/publicize").getFailedConnections()}}),Object(l.withDispatch)(function(e){return{refreshConnections:e("jetpack/publicize").refreshConnectionTestResults}})])(J),X=n(13),Q=n.n(X),ee=n(98),te=n.n(ee),ne=n(12),re=n.n(ne),ie=n(15),oe=n(27),ae=n.n(oe),se=Object(o.createElement)(a.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Object(o.createElement)(a.Rect,{x:"0",fill:"none",width:"24",height:"24"}),Object(o.createElement)(a.G,null,Object(o.createElement)(a.Path,{d:"M20.007 3H3.993C3.445 3 3 3.445 3 3.993v16.013c0 .55.445.994.993.994h8.62v-6.97H10.27V11.31h2.346V9.31c0-2.325 1.42-3.59 3.494-3.59.993 0 1.847.073 2.096.106v2.43h-1.438c-1.128 0-1.346.537-1.346 1.324v1.734h2.69l-.35 2.717h-2.34V21h4.587c.548 0 .993-.445.993-.993V3.993c0-.548-.445-.993-.993-.993z"}))),ce=Object(o.createElement)(a.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Object(o.createElement)(a.Rect,{x:"0",fill:"none",width:"24",height:"24"}),Object(o.createElement)(a.G,null,Object(o.createElement)(a.Path,{d:"M22.23 5.924c-.736.326-1.527.547-2.357.646.847-.508 1.498-1.312 1.804-2.27-.793.47-1.67.812-2.606.996C18.325 4.498 17.258 4 16.078 4c-2.266 0-4.103 1.837-4.103 4.103 0 .322.036.635.106.935-3.41-.17-6.433-1.804-8.457-4.287-.353.607-.556 1.312-.556 2.064 0 1.424.724 2.68 1.825 3.415-.673-.022-1.305-.207-1.86-.514v.052c0 1.988 1.415 3.647 3.293 4.023-.344.095-.707.145-1.08.145-.265 0-.522-.026-.773-.074.522 1.63 2.038 2.817 3.833 2.85-1.404 1.1-3.174 1.757-5.096 1.757-.332 0-.66-.02-.98-.057 1.816 1.164 3.973 1.843 6.29 1.843 7.547 0 11.675-6.252 11.675-11.675 0-.178-.004-.355-.012-.53.802-.578 1.497-1.3 2.047-2.124z"}))),le=Object(o.createElement)(a.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Object(o.createElement)(a.Rect,{x:"0",fill:"none",width:"24",height:"24"}),Object(o.createElement)(a.G,null,Object(o.createElement)(a.Path,{d:"M19.7 3H4.3C3.582 3 3 3.582 3 4.3v15.4c0 .718.582 1.3 1.3 1.3h15.4c.718 0 1.3-.582 1.3-1.3V4.3c0-.718-.582-1.3-1.3-1.3zM8.34 18.338H5.666v-8.59H8.34v8.59zM7.003 8.574c-.857 0-1.55-.694-1.55-1.548 0-.855.692-1.548 1.55-1.548.854 0 1.547.694 1.547 1.548 0 .855-.692 1.548-1.546 1.548zm11.335 9.764h-2.67V14.16c0-.995-.017-2.277-1.387-2.277-1.39 0-1.6 1.086-1.6 2.206v4.248h-2.668v-8.59h2.56v1.174h.036c.357-.675 1.228-1.387 2.527-1.387 2.703 0 3.203 1.78 3.203 4.092v4.71z"}))),ue=Object(o.createElement)(a.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Object(o.createElement)(a.Rect,{x:"0",fill:"none",width:"24",height:"24"}),Object(o.createElement)(a.G,null,Object(o.createElement)(a.Path,{d:"M19 3H5c-1.105 0-2 .895-2 2v14c0 1.105.895 2 2 2h14c1.105 0 2-.895 2-2V5c0-1.105-.895-2-2-2zm-5.57 14.265c-2.445.042-3.37-1.742-3.37-2.998V10.6H8.922V9.15c1.703-.615 2.113-2.15 2.21-3.026.006-.06.053-.084.08-.084h1.645V8.9h2.246v1.7H12.85v3.495c.008.476.182 1.13 1.08 1.107.3-.008.698-.094.907-.194l.54 1.6c-.205.297-1.12.642-1.946.657z"}))),pe=Object(o.createElement)(a.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Object(o.createElement)(a.Rect,{x:"0",fill:"none",width:"24",height:"24"}),Object(o.createElement)(a.G,null,Object(o.createElement)(a.Path,{d:"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm-1.92 14.05c-2.235 0-4.05-1.814-4.05-4.05s1.815-4.05 4.05-4.05c1.095 0 2.01.4 2.71 1.057l-1.15 1.118c-.292-.275-.802-.6-1.56-.6-1.34 0-2.433 1.115-2.433 2.48s1.094 2.48 2.434 2.48c1.552 0 2.123-1.074 2.228-1.71h-2.232v-1.51h3.79c.058.255.102.494.102.83 0 2.312-1.55 3.956-3.887 3.956zm8.92-3.3h-1.25V14h-1.5v-1.25H15v-1.5h1.25V10h1.5v1.25H19v1.5z"}))),he=function(e){var t=e.serviceName,n={className:"jetpack-publicize-gutenberg-social-icon is-".concat(t),size:24};switch(t){case"facebook":return Object(o.createElement)(a.Icon,ae()({icon:se},n));case"twitter":return Object(o.createElement)(a.Icon,ae()({icon:ce},n));case"linkedin":return Object(o.createElement)(a.Icon,ae()({icon:le},n));case"tumblr":return Object(o.createElement)(a.Icon,ae()({icon:ue},n));case"google-plus":return Object(o.createElement)(a.Icon,ae()({icon:pe},n))}return null};n(65),n(66);function de(e){var t=e.split("?")[0],n=t.split("/");if(0===t.indexOf("/checkout/thank-you/no-site/"))return!1;if(0===t.indexOf("/me/purchases/")||0===t.indexOf("/checkout/thank-you/")){var r=n[3];if(r&&-1!==r.indexOf("."))return r;var i=parseInt(r,10);if(Number.isSafeInteger(i))return i}for(var o=2;o>0;o--){var a=n[n.length-o];if(a&&-1!==a.indexOf("."))return a}for(var s=2;s>0;s--){var c=parseInt(n[n.length-s],10);if(Number.isSafeInteger(c))return c}return!1}function me(){if(window&&window._currentSiteId)return window._currentSiteId;var e=de(window.location.pathname);return Object(y.includes)(["post.php","post-new.php"],e)?window&&window.Jetpack_Editor_Initial_State&&window.Jetpack_Editor_Initial_State.siteFragment?window.Jetpack_Editor_Initial_State.siteFragment:null:e||null}var fe=function(e){function t(){var e,n;P()(this,t);for(var r=arguments.length,i=new Array(r),s=0;s<r;s++)i[s]=arguments[s];return n=B()(this,(e=V()(t)).call.apply(e,[this].concat(i))),Z()(U()(n),"state",{showGooglePlusNotice:!0}),Z()(U()(n),"onRemoveGooglePlusNotice",function(){n.setState({showGooglePlusNotice:!1})}),Z()(U()(n),"maybeDisplayGooglePlusNotice",function(e){return"google-plus"===e&&n.state.showGooglePlusNotice&&Object(o.createElement)(a.Notice,{status:"error",onRemove:n.onRemoveGooglePlusNotice},Object(W.a)("Google+ will shut down in April 2019. You can keep posting with your existing Google+ connection through March."),Object(o.createElement)(a.ExternalLink,{target:"_blank",href:"https://www.blog.google/technology/safety-security/expediting-changes-google-plus/"},Object(W.a)(" Learn more"),"."))}),Z()(U()(n),"maybeDisplayLinkedInNotice",function(){return n.connectionNeedsReauth()&&Object(o.createElement)(a.Notice,{className:"jetpack-publicize-notice",isDismissible:!1,status:"error"},Object(o.createElement)("p",null,Object(W.a)("Your LinkedIn connection needs to be reauthenticated to continue working – head to Sharing to take care of it.")),Object(o.createElement)(a.ExternalLink,{href:"https://wordpress.com/sharing/".concat(me())},Object(W.a)("Go to Sharing settings")))}),Z()(U()(n),"connectionNeedsReauth",function(){return Object(y.includes)(n.props.mustReauthConnections,n.props.name)}),Z()(U()(n),"onConnectionChange",function(){var e=n.props.id;n.props.toggleConnection(e)}),n}return $()(t,e),I()(t,[{key:"connectionIsFailing",value:function(){var e=this.props,t=e.failedConnections,n=e.name;return t.some(function(e){return e.service_name===n})}},{key:"render",value:function(){var e=this.props,t=e.disabled,n=e.enabled,r=e.id,i=e.label,s=e.name,c="connection-"+s+"-"+r,l=s.replace("_","-"),u=Object(o.createElement)(a.FormToggle,{id:c,className:"jetpack-publicize-connection-toggle",checked:n,onChange:this.onConnectionChange});return(t||this.connectionIsFailing()||this.connectionNeedsReauth())&&(u=Object(o.createElement)(a.Disabled,null,u)),Object(o.createElement)("li",null,this.maybeDisplayGooglePlusNotice(l),this.maybeDisplayLinkedInNotice(),Object(o.createElement)("div",{className:"publicize-jetpack-connection-container"},Object(o.createElement)("label",{htmlFor:c,className:"jetpack-publicize-connection-label"},Object(o.createElement)(he,{serviceName:l}),Object(o.createElement)("span",{className:"jetpack-publicize-connection-label-copy"},i)),u))}}]),t}(o.Component),be=Object(l.withSelect)(function(e){return{failedConnections:e("jetpack/publicize").getFailedConnections(),mustReauthConnections:e("jetpack/publicize").getMustReauthConnections()}})(fe),ge=function(e){function t(){var e,n;P()(this,t);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=B()(this,(e=V()(t)).call.apply(e,[this].concat(i))),Z()(U()(n),"settingsClick",function(e){var t=n.getButtonLink(),r=n.props.refreshCallback;e.preventDefault();var i=window.open(t,"",""),o=window.setInterval(function(){!1!==i.closed&&(window.clearInterval(o),r())},500)}),n}return $()(t,e),I()(t,[{key:"getButtonLink",value:function(){var e=me();return e?"https://wordpress.com/sharing/".concat(e):"options-general.php?page=sharing&publicize_popup=true"}},{key:"render",value:function(){var e=re()("jetpack-publicize-add-connection-container",this.props.className);return Object(o.createElement)("div",{className:e},Object(o.createElement)(a.ExternalLink,{onClick:this.settingsClick},Object(W.a)("Connect an account")))}}]),t}(o.Component),ve=function(e){function t(){var e,n;P()(this,t);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=B()(this,(e=V()(t)).call.apply(e,[this].concat(i))),Z()(U()(n),"state",{hasEditedShareMessage:!1}),Z()(U()(n),"fieldId",Object(y.uniqueId)("jetpack-publicize-message-field-")),Z()(U()(n),"onMessageChange",function(e){var t=n.props.messageChange;n.setState({hasEditedShareMessage:!0}),t(e)}),n}return $()(t,e),I()(t,[{key:"isDisabled",value:function(){return this.props.connections.every(function(e){return!e.toggleable})}},{key:"getShareMessage",value:function(){var e=this.props,t=e.shareMessage,n=e.defaultShareMessage;return this.state.hasEditedShareMessage||""!==t?t:n}},{key:"render",value:function(){var e=this.props,t=e.connections,n=e.toggleConnection,r=e.refreshCallback,i=this.getShareMessage(),a=256-i.length,s=re()("jetpack-publicize-character-count",{"wpas-twitter-length-limit":a<=0});return Object(o.createElement)("div",{id:"publicize-form"},Object(o.createElement)("ul",{className:"jetpack-publicize__connections-list"},t.map(function(e){var t=e.display_name,r=e.enabled,i=e.id,a=e.service_name,s=e.toggleable;return Object(o.createElement)(be,{disabled:!s,enabled:r,key:i,id:i,label:t,name:a,toggleConnection:n})})),Object(o.createElement)(ge,{refreshCallback:r}),t.some(function(e){return e.enabled})&&Object(o.createElement)(o.Fragment,null,Object(o.createElement)("label",{className:"jetpack-publicize-message-note",htmlFor:this.fieldId},Object(W.a)("Customize your message")),Object(o.createElement)("div",{className:"jetpack-publicize-message-box"},Object(o.createElement)("textarea",{id:this.fieldId,value:i,onChange:this.onMessageChange,disabled:this.isDisabled(),maxLength:256,placeholder:Object(W.a)("Write a message for your audience here. If you leave this blank, we'll use the post title as the message."),rows:4}),Object(o.createElement)("div",{className:s},Object(ie.sprintf)(Object(W.b)("%d character remaining","%d characters remaining",a),a)))))}}]),t}(o.Component),ye=Object(F.compose)([Object(l.withSelect)(function(e){var t=e("core/editor").getEditedPostAttribute("meta"),n=e("core/editor").getEditedPostAttribute("title"),r=te()(t,["jetpack_publicize_message"],"");return{connections:e("core/editor").getEditedPostAttribute("jetpack_publicize_connections"),defaultShareMessage:n.substr(0,256),shareMessage:r.substr(0,256)}}),Object(l.withDispatch)(function(e,t){var n=t.connections;return{toggleConnection:function(t){var r=n.map(function(e){return Q()({},e,{enabled:e.id===t?!e.enabled:e.enabled})});e("core/editor").editPost({jetpack_publicize_connections:r})},messageChange:function(t){e("core/editor").editPost({meta:{jetpack_publicize_message:t.target.value}})}}})])(ve),je=Object(F.compose)([Object(l.withSelect)(function(e){return{connections:e("core/editor").getEditedPostAttribute("jetpack_publicize_connections")}}),Object(l.withDispatch)(function(e){return{refreshConnections:e("core/editor").refreshPost}})])(function(e){var t=e.connections,n=e.refreshConnections;return Object(o.createElement)(o.Fragment,null,t&&t.some(function(e){return e.enabled})&&Object(o.createElement)(Y,null),Object(o.createElement)("div",null,Object(W.a)("Connect and select the accounts where you'd like to share your post.")),t&&t.length>0&&Object(o.createElement)(ye,{refreshCallback:n}),t&&0===t.length&&Object(o.createElement)(ge,{className:"jetpack-publicize-add-connection-wrapper",refreshCallback:n}))}),Oe={render:function(){return Object(o.createElement)(c.PostTypeSupportCheck,{supportKeys:"publicize"},Object(o.createElement)(D.a,null,Object(o.createElement)(a.PanelBody,{title:Object(W.a)("Share this post")},Object(o.createElement)(je,null))),Object(o.createElement)(s.PluginPrePublishPanel,{initialOpen:!0,id:"publicize-title",title:Object(o.createElement)("span",{id:"publicize-defaults",key:"publicize-title-span"},Object(W.a)("Share this post"))},Object(o.createElement)(je,null)))}},ke=n(42);Object(ke.a)("publicize",Oe)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(0),o=n(6),a=n(2),s=n(12),c=n.n(s),l=["jetpack/markdown","jetpack/address","jetpack/email","jetpack/phone","jetpack/map","jetpack/business-hours","core/paragraph","core/image","core/heading","core/gallery","core/list","core/quote","core/shortcode","core/audio","core/code","core/cover","core/html","core/separator","core/spacer","core/subhead","core/video"],u=[["jetpack/email"],["jetpack/phone"],["jetpack/address"]],p=function(e){var t=e.isSelected;return Object(i.createElement)("div",{className:c()({"jetpack-contact-info-block":!0,"is-selected":t})},Object(i.createElement)(o.InnerBlocks,{allowedBlocks:l,templateLock:!1,template:u}))},h=n(20),d=n(1),m=(n(114),n(72),n(7)),f=n.n(m),b=n(11),g=n.n(b),v=n(8),y=n.n(v),j=n(9),O=n.n(j),k=n(4),_=n.n(k),w=n(10),E=n.n(w),C=function(e){var t=e.attributes,n=t.address,r=t.addressLine2,o=t.addressLine3,a=t.city,s=t.region,c=t.postal,l=t.country;return Object(i.createElement)(i.Fragment,null,n&&Object(i.createElement)("div",{className:"jetpack-address__address jetpack-address__address1"},n),r&&Object(i.createElement)("div",{className:"jetpack-address__address jetpack-address__address2"},r),o&&Object(i.createElement)("div",{className:"jetpack-address__address jetpack-address__address3"},o),a&&!(s||c)&&Object(i.createElement)("div",{className:"jetpack-address__city"},a),a&&(s||c)&&Object(i.createElement)("div",null,[Object(i.createElement)("span",{className:"jetpack-address__city"},a),", ",Object(i.createElement)("span",{className:"jetpack-address__region"},s)," ",Object(i.createElement)("span",{className:"jetpack-address__postal"},c)]),!a&&(s||c)&&Object(i.createElement)("div",null,[Object(i.createElement)("span",{className:"jetpack-address__region"},s)," ",Object(i.createElement)("span",{className:"jetpack-address__postal"},c)]),l&&Object(i.createElement)("div",{className:"jetpack-address__country"},l))},x=function(e){var t=e.attributes,n=t.address,r=t.addressLine2,i=t.addressLine3,o=t.city,a=t.region,s=t.postal,c=t.country,l=n?"".concat(n,","):"",u=r?"".concat(r,","):"",p=i?"".concat(i,","):"",h=o?"+".concat(o,","):"",d=a?"+".concat(a,","):"";d=s?"".concat(d,"+").concat(s):d;var m=c?"+".concat(c):"";return"https://www.google.com/maps/search/".concat(l).concat(u).concat(p).concat(h).concat(d).concat(m).replace(" ","+")},S=function(e){return[(t=e.attributes).address,t.addressLine2,t.addressLine3,t.city,t.region,t.postal,t.country].some(function(e){return""!==e})&&Object(i.createElement)("div",{className:e.className},e.attributes.linkToGoogleMaps&&Object(i.createElement)("a",{href:x(e),target:"_blank",rel:"noopener noreferrer",title:Object(d.a)("Open address in Google Maps")},Object(i.createElement)(C,e)),!e.attributes.linkToGoogleMaps&&Object(i.createElement)(C,e));var t},A=function(e){function t(){var e,n;f()(this,t);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return(n=y()(this,(e=O()(t)).call.apply(e,[this].concat(i)))).preventEnterKey=n.preventEnterKey.bind(_()(n)),n}return E()(t,e),g()(t,[{key:"preventEnterKey",value:function(e){"Enter"!==e.key||e.preventDefault()}},{key:"render",value:function(){var e=this.props,t=e.attributes,n=t.address,r=t.addressLine2,s=t.addressLine3,l=t.city,u=t.region,p=t.postal,h=t.country,m=t.linkToGoogleMaps,f=e.isSelected,b=e.setAttributes,g=[n,r,s,l,u,p,h].some(function(e){return""!==e}),v=c()({"jetpack-address-block":!0,"is-selected":f}),y=Object(i.createElement)(a.ToggleControl,{label:Object(d.a)("Link address to Google Maps"),checked:m,onChange:function(e){return b({linkToGoogleMaps:e})}});return Object(i.createElement)("div",{className:v},!f&&g&&S(this.props),(f||!g)&&Object(i.createElement)(i.Fragment,null,Object(i.createElement)(o.PlainText,{value:n,placeholder:Object(d.a)("Street Address"),"aria-label":Object(d.a)("Street Address"),onChange:function(e){return b({address:e})},onKeyDown:this.preventEnterKey}),Object(i.createElement)(o.PlainText,{value:r,placeholder:Object(d.a)("Address Line 2"),"aria-label":Object(d.a)("Address Line 2"),onChange:function(e){return b({addressLine2:e})},onKeyDown:this.preventEnterKey}),Object(i.createElement)(o.PlainText,{value:s,placeholder:Object(d.a)("Address Line 3"),"aria-label":Object(d.a)("Address Line 3"),onChange:function(e){return b({addressLine3:e})},onKeyDown:this.preventEnterKey}),Object(i.createElement)(o.PlainText,{value:l,placeholder:Object(d.a)("City"),"aria-label":Object(d.a)("City"),onChange:function(e){return b({city:e})},onKeyDown:this.preventEnterKey}),Object(i.createElement)(o.PlainText,{value:u,placeholder:Object(d.a)("State/Province/Region"),"aria-label":Object(d.a)("State/Province/Region"),onChange:function(e){return b({region:e})},onKeyDown:this.preventEnterKey}),Object(i.createElement)(o.PlainText,{value:p,placeholder:Object(d.a)("Postal/Zip Code"),"aria-label":Object(d.a)("Postal/Zip Code"),onChange:function(e){return b({postal:e})},onKeyDown:this.preventEnterKey}),Object(i.createElement)(o.PlainText,{value:h,placeholder:Object(d.a)("Country"),"aria-label":Object(d.a)("Country"),onChange:function(e){return b({country:e})},onKeyDown:this.preventEnterKey}),y))}}]),t}(i.Component),M={title:Object(d.a)("Address"),description:Object(d.a)("Lets you add a physical address with Schema markup."),keywords:[Object(d.c)("location","block search term"),Object(d.c)("direction","block search term"),Object(d.c)("place","block search term")],icon:Object(h.a)(Object(i.createElement)(i.Fragment,null,Object(i.createElement)(a.Path,{d:"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zM7 9c0-2.76 2.24-5 5-5s5 2.24 5 5c0 2.88-2.88 7.19-5 9.88C9.92 16.21 7 11.85 7 9z"}),Object(i.createElement)(a.Circle,{cx:"12",cy:"9",r:"2.5"}))),category:"jetpack",attributes:{address:{type:"string",default:""},addressLine2:{type:"string",default:""},addressLine3:{type:"string",default:""},city:{type:"string",default:""},region:{type:"string",default:""},postal:{type:"string",default:""},country:{type:"string",default:""},linkToGoogleMaps:{type:"boolean",default:!1}},parent:["jetpack/contact-info"],edit:A,save:S},T=n(35),z=n.n(T),D=function(e){var t=e.attributes.email,n=e.className;return t&&Object(i.createElement)("div",{className:n},t.split(/(\s+)/).map(function(e,t){var n=e.replace(/([.,\/#!$%^&*;:{}=\-_`~()\][])+$/g,"");return e.indexOf("@")&&z.a.validate(n)?e===n?Object(i.createElement)("a",{href:"mailto:".concat(e),key:t},e):Object(i.createElement)(i.Fragment,{key:t},Object(i.createElement)("a",{href:"mailto:".concat(e),key:t},n),Object(i.createElement)(i.Fragment,null,e.slice(-(e.length-n.length)))):Object(i.createElement)(i.Fragment,{key:t},e)}))},F=function(e,t,n,r,a){var s=t.isSelected,c=t.attributes[e];return Object(i.createElement)("div",{className:"jetpack-".concat(e,s?"-block is-selected":"-block")},!s&&""!==c&&r(t),(s||""===c)&&Object(i.createElement)(o.PlainText,{value:c,placeholder:n,"aria-label":n,onChange:a}))},N=function(e){var t=e.setAttributes;return F("email",e,Object(d.a)("Email"),D,function(e){return t({email:e})})},P={title:Object(d.a)("Email Address"),description:Object(d.a)("Lets you add an email address with an automatically generated click-to-email link."),keywords:["e-mail","email",Object(d.c)("message","block search term")],icon:Object(h.a)(Object(i.createElement)(a.Path,{d:"M22 6c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6zm-2 0l-8 5-8-5h16zm0 12H4V8l8 5 8-5v10z"})),category:"jetpack",attributes:{email:{type:"string",default:""}},edit:N,save:D,parent:["jetpack/contact-info"]};var R=function(e){var t=e.attributes.phone,n=e.className;return t&&Object(i.createElement)("div",{className:n},function(e){var t=e.match(/\d+\.\d+|\d+\b|\d+(?=\w)/g);if(!t)return e;var n=e.indexOf(t[0]),r=n?e.substring(n-1):e,o=n?e.substring(0,n):"",a=r.replace(/\D/g,"");return/[0-9\/+\/(]/.test(r[0])?(o=o.slice(0,-1),"+"===r[0]&&(a="+"+a)):r=r.substring(1),[o.trim()?Object(i.createElement)("span",{key:"phonePrefix",className:"phone-prefix"},o):null,Object(i.createElement)("a",{key:"phoneNumber",href:"tel:".concat(a)},r)]}(t))},I=function(e){var t=e.setAttributes;return F("phone",e,Object(d.a)("Phone number"),R,function(e){return t({phone:e})})},L={title:Object(d.a)("Phone Number"),description:Object(d.a)("Lets you add a phone number with an automatically generated click-to-call link."),keywords:[Object(d.c)("mobile","block search term"),Object(d.c)("telephone","block search term"),Object(d.c)("cell","block search term")],icon:Object(h.a)(Object(i.createElement)(a.Path,{d:"M6.54 5c.06.89.21 1.76.45 2.59l-1.2 1.2c-.41-1.2-.67-2.47-.76-3.79h1.51m9.86 12.02c.85.24 1.72.39 2.6.45v1.49c-1.32-.09-2.59-.35-3.8-.75l1.2-1.19M7.5 3H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 17 .55 0 1-.45 1-1v-3.49c0-.55-.45-1-1-1-1.24 0-2.45-.2-3.57-.57-.1-.04-.21-.05-.31-.05-.26 0-.51.1-.71.29l-2.2 2.2c-2.83-1.45-5.15-3.76-6.59-6.59l2.2-2.2c.28-.28.36-.67.25-1.02C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1z"})),category:"jetpack",attributes:{phone:{type:"string",default:""}},parent:["jetpack/contact-info"],edit:I,save:R},B={title:Object(d.a)("Contact Info"),description:Object(d.a)("Lets you add an email address, phone number, and physical address with improved markup for better SEO results."),keywords:[Object(d.c)("email","block search term"),Object(d.c)("phone","block search term"),Object(d.c)("address","block search term")],icon:Object(h.a)(Object(i.createElement)(a.Path,{d:"M19 5v14H5V5h14m0-2H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 9c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3zm0-4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm6 10H6v-1.53c0-2.5 3.97-3.58 6-3.58s6 1.08 6 3.58V18zm-9.69-2h7.38c-.69-.56-2.38-1.12-3.69-1.12s-3.01.56-3.69 1.12z"})),category:"jetpack",supports:{align:["wide","full"],html:!1},attributes:{},edit:p,save:function(e){var t=e.className;return Object(i.createElement)("div",{className:t},Object(i.createElement)(o.InnerBlocks.Content,null))}},q=[{name:"address",settings:M},{name:"email",settings:P},{name:"phone",settings:L}];Object(r.a)("contact-info",B,q)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(0),o=n(2),a=n(7),s=n.n(a),c=n(11),l=n.n(c),u=n(8),p=n.n(u),h=n(9),d=n.n(h),m=n(4),f=n.n(m),b=n(10),g=n.n(b),v=n(3),y=n.n(v),j=n(12),O=n.n(j),k=n(35),_=n.n(k),w=n(14),E=n(17),C=n(5),x=n(15),S={AED:{symbol:"د.إ.‏",grouping:",",decimal:".",precision:2},AFN:{symbol:"؋",grouping:",",decimal:".",precision:2},ALL:{symbol:"Lek",grouping:".",decimal:",",precision:2},AMD:{symbol:"֏",grouping:",",decimal:".",precision:2},ANG:{symbol:"ƒ",grouping:",",decimal:".",precision:2},AOA:{symbol:"Kz",grouping:",",decimal:".",precision:2},ARS:{symbol:"$",grouping:".",decimal:",",precision:2},AUD:{symbol:"A$",grouping:",",decimal:".",precision:2},AWG:{symbol:"ƒ",grouping:",",decimal:".",precision:2},AZN:{symbol:"₼",grouping:" ",decimal:",",precision:2},BAM:{symbol:"КМ",grouping:".",decimal:",",precision:2},BBD:{symbol:"Bds$",grouping:",",decimal:".",precision:2},BDT:{symbol:"৳",grouping:",",decimal:".",precision:0},BGN:{symbol:"лв.",grouping:" ",decimal:",",precision:2},BHD:{symbol:"د.ب.‏",grouping:",",decimal:".",precision:3},BIF:{symbol:"FBu",grouping:",",decimal:".",precision:0},BMD:{symbol:"$",grouping:",",decimal:".",precision:2},BND:{symbol:"$",grouping:".",decimal:",",precision:0},BOB:{symbol:"Bs",grouping:".",decimal:",",precision:2},BRL:{symbol:"R$",grouping:".",decimal:",",precision:2},BSD:{symbol:"$",grouping:",",decimal:".",precision:2},BTC:{symbol:"Ƀ",grouping:",",decimal:".",precision:2},BTN:{symbol:"Nu.",grouping:",",decimal:".",precision:1},BWP:{symbol:"P",grouping:",",decimal:".",precision:2},BYR:{symbol:"р.",grouping:" ",decimal:",",precision:2},BZD:{symbol:"BZ$",grouping:",",decimal:".",precision:2},CAD:{symbol:"C$",grouping:",",decimal:".",precision:2},CDF:{symbol:"FC",grouping:",",decimal:".",precision:2},CHF:{symbol:"CHF",grouping:"'",decimal:".",precision:2},CLP:{symbol:"$",grouping:".",decimal:",",precision:2},CNY:{symbol:"¥",grouping:",",decimal:".",precision:2},COP:{symbol:"$",grouping:".",decimal:",",precision:2},CRC:{symbol:"₡",grouping:".",decimal:",",precision:2},CUC:{symbol:"CUC",grouping:",",decimal:".",precision:2},CUP:{symbol:"$MN",grouping:",",decimal:".",precision:2},CVE:{symbol:"$",grouping:",",decimal:".",precision:2},CZK:{symbol:"Kč",grouping:" ",decimal:",",precision:2},DJF:{symbol:"Fdj",grouping:",",decimal:".",precision:0},DKK:{symbol:"kr.",grouping:"",decimal:",",precision:2},DOP:{symbol:"RD$",grouping:",",decimal:".",precision:2},DZD:{symbol:"د.ج.‏",grouping:",",decimal:".",precision:2},EGP:{symbol:"ج.م.‏",grouping:",",decimal:".",precision:2},ERN:{symbol:"Nfk",grouping:",",decimal:".",precision:2},ETB:{symbol:"ETB",grouping:",",decimal:".",precision:2},EUR:{symbol:"€",grouping:".",decimal:",",precision:2},FJD:{symbol:"FJ$",grouping:",",decimal:".",precision:2},FKP:{symbol:"£",grouping:",",decimal:".",precision:2},GBP:{symbol:"£",grouping:",",decimal:".",precision:2},GEL:{symbol:"Lari",grouping:" ",decimal:",",precision:2},GHS:{symbol:"₵",grouping:",",decimal:".",precision:2},GIP:{symbol:"£",grouping:",",decimal:".",precision:2},GMD:{symbol:"D",grouping:",",decimal:".",precision:2},GNF:{symbol:"FG",grouping:",",decimal:".",precision:0},GTQ:{symbol:"Q",grouping:",",decimal:".",precision:2},GYD:{symbol:"G$",grouping:",",decimal:".",precision:2},HKD:{symbol:"HK$",grouping:",",decimal:".",precision:2},HNL:{symbol:"L.",grouping:",",decimal:".",precision:2},HRK:{symbol:"kn",grouping:".",decimal:",",precision:2},HTG:{symbol:"G",grouping:",",decimal:".",precision:2},HUF:{symbol:"Ft",grouping:".",decimal:",",precision:0},IDR:{symbol:"Rp",grouping:".",decimal:",",precision:0},ILS:{symbol:"₪",grouping:",",decimal:".",precision:2},INR:{symbol:"₹",grouping:",",decimal:".",precision:2},IQD:{symbol:"د.ع.‏",grouping:",",decimal:".",precision:2},IRR:{symbol:"﷼",grouping:",",decimal:"/",precision:2},ISK:{symbol:"kr.",grouping:".",decimal:",",precision:0},JMD:{symbol:"J$",grouping:",",decimal:".",precision:2},JOD:{symbol:"د.ا.‏",grouping:",",decimal:".",precision:3},JPY:{symbol:"¥",grouping:",",decimal:".",precision:0},KES:{symbol:"S",grouping:",",decimal:".",precision:2},KGS:{symbol:"сом",grouping:" ",decimal:"-",precision:2},KHR:{symbol:"៛",grouping:",",decimal:".",precision:0},KMF:{symbol:"CF",grouping:",",decimal:".",precision:2},KPW:{symbol:"₩",grouping:",",decimal:".",precision:0},KRW:{symbol:"₩",grouping:",",decimal:".",precision:0},KWD:{symbol:"د.ك.‏",grouping:",",decimal:".",precision:3},KYD:{symbol:"$",grouping:",",decimal:".",precision:2},KZT:{symbol:"₸",grouping:" ",decimal:"-",precision:2},LAK:{symbol:"₭",grouping:",",decimal:".",precision:0},LBP:{symbol:"ل.ل.‏",grouping:",",decimal:".",precision:2},LKR:{symbol:"₨",grouping:",",decimal:".",precision:0},LRD:{symbol:"L$",grouping:",",decimal:".",precision:2},LSL:{symbol:"M",grouping:",",decimal:".",precision:2},LYD:{symbol:"د.ل.‏",grouping:",",decimal:".",precision:3},MAD:{symbol:"د.م.‏",grouping:",",decimal:".",precision:2},MDL:{symbol:"lei",grouping:",",decimal:".",precision:2},MGA:{symbol:"Ar",grouping:",",decimal:".",precision:0},MKD:{symbol:"ден.",grouping:".",decimal:",",precision:2},MMK:{symbol:"K",grouping:",",decimal:".",precision:2},MNT:{symbol:"₮",grouping:" ",decimal:",",precision:2},MOP:{symbol:"MOP$",grouping:",",decimal:".",precision:2},MRO:{symbol:"UM",grouping:",",decimal:".",precision:2},MTL:{symbol:"₤",grouping:",",decimal:".",precision:2},MUR:{symbol:"₨",grouping:",",decimal:".",precision:2},MVR:{symbol:"MVR",grouping:",",decimal:".",precision:1},MWK:{symbol:"MK",grouping:",",decimal:".",precision:2},MXN:{symbol:"MX$",grouping:",",decimal:".",precision:2},MYR:{symbol:"RM",grouping:",",decimal:".",precision:2},MZN:{symbol:"MT",grouping:",",decimal:".",precision:0},NAD:{symbol:"N$",grouping:",",decimal:".",precision:2},NGN:{symbol:"₦",grouping:",",decimal:".",precision:2},NIO:{symbol:"C$",grouping:",",decimal:".",precision:2},NOK:{symbol:"kr",grouping:" ",decimal:",",precision:2},NPR:{symbol:"₨",grouping:",",decimal:".",precision:2},NZD:{symbol:"NZ$",grouping:",",decimal:".",precision:2},OMR:{symbol:"﷼",grouping:",",decimal:".",precision:3},PAB:{symbol:"B/.",grouping:",",decimal:".",precision:2},PEN:{symbol:"S/.",grouping:",",decimal:".",precision:2},PGK:{symbol:"K",grouping:",",decimal:".",precision:2},PHP:{symbol:"₱",grouping:",",decimal:".",precision:2},PKR:{symbol:"₨",grouping:",",decimal:".",precision:2},PLN:{symbol:"zł",grouping:" ",decimal:",",precision:2},PYG:{symbol:"₲",grouping:".",decimal:",",precision:2},QAR:{symbol:"﷼",grouping:",",decimal:".",precision:2},RON:{symbol:"lei",grouping:".",decimal:",",precision:2},RSD:{symbol:"Дин.",grouping:".",decimal:",",precision:2},RUB:{symbol:"₽",grouping:" ",decimal:",",precision:2},RWF:{symbol:"RWF",grouping:" ",decimal:",",precision:2},SAR:{symbol:"﷼",grouping:",",decimal:".",precision:2},SBD:{symbol:"S$",grouping:",",decimal:".",precision:2},SCR:{symbol:"₨",grouping:",",decimal:".",precision:2},SDD:{symbol:"LSd",grouping:",",decimal:".",precision:2},SDG:{symbol:"£‏",grouping:",",decimal:".",precision:2},SEK:{symbol:"kr",grouping:",",decimal:".",precision:2},SGD:{symbol:"S$",grouping:",",decimal:".",precision:2},SHP:{symbol:"£",grouping:",",decimal:".",precision:2},SLL:{symbol:"Le",grouping:",",decimal:".",precision:2},SOS:{symbol:"S",grouping:",",decimal:".",precision:2},SRD:{symbol:"$",grouping:",",decimal:".",precision:2},STD:{symbol:"Db",grouping:",",decimal:".",precision:2},SVC:{symbol:"₡",grouping:",",decimal:".",precision:2},SYP:{symbol:"£",grouping:",",decimal:".",precision:2},SZL:{symbol:"E",grouping:",",decimal:".",precision:2},THB:{symbol:"฿",grouping:",",decimal:".",precision:2},TJS:{symbol:"TJS",grouping:" ",decimal:";",precision:2},TMT:{symbol:"m",grouping:" ",decimal:",",precision:0},TND:{symbol:"د.ت.‏",grouping:",",decimal:".",precision:3},TOP:{symbol:"T$",grouping:",",decimal:".",precision:2},TRY:{symbol:"TL",grouping:".",decimal:",",precision:2},TTD:{symbol:"TT$",grouping:",",decimal:".",precision:2},TVD:{symbol:"$T",grouping:",",decimal:".",precision:2},TWD:{symbol:"NT$",grouping:",",decimal:".",precision:2},TZS:{symbol:"TSh",grouping:",",decimal:".",precision:2},UAH:{symbol:"₴",grouping:" ",decimal:",",precision:2},UGX:{symbol:"USh",grouping:",",decimal:".",precision:2},USD:{symbol:"$",grouping:",",decimal:".",precision:2},UYU:{symbol:"$U",grouping:".",decimal:",",precision:2},UZS:{symbol:"сўм",grouping:" ",decimal:",",precision:2},VEB:{symbol:"Bs.",grouping:",",decimal:".",precision:2},VEF:{symbol:"Bs. F.",grouping:".",decimal:",",precision:2},VND:{symbol:"₫",grouping:".",decimal:",",precision:1},VUV:{symbol:"VT",grouping:",",decimal:".",precision:0},WST:{symbol:"WS$",grouping:",",decimal:".",precision:2},XAF:{symbol:"F",grouping:",",decimal:".",precision:2},XCD:{symbol:"$",grouping:",",decimal:".",precision:2},XOF:{symbol:"F",grouping:" ",decimal:",",precision:2},XPF:{symbol:"F",grouping:",",decimal:".",precision:2},YER:{symbol:"﷼",grouping:",",decimal:".",precision:2},ZAR:{symbol:"R",grouping:" ",decimal:",",precision:2},ZMW:{symbol:"ZK",grouping:",",decimal:".",precision:2},WON:{symbol:"₩",grouping:",",decimal:".",precision:2}};function A(e){return S[e]||{symbol:"$",grouping:",",decimal:".",precision:2}}var M=n(27),T=n.n(M),z=n(34),D=n.n(z),F=n(52),N=n.n(F),P=(n(239),function(e){var t=e.children,n=void 0===t?null:t,r=e.isError,o=void 0!==r&&r,a=D()(e,["children","isError"]),s=O()("simple-payments__help-message",{"simple-payments__help-message-is-error":o});return n&&Object(i.createElement)("div",T()({className:s},a),o&&Object(i.createElement)(N.a,{size:"24"}),Object(i.createElement)("span",null,n))}),R=n(1),I=(n(241),n(99)),L=n.n(I),B=n(100),q=n.n(B),V=function(e){var t=e.title,n=void 0===t?"":t,r=e.content,o=void 0===r?"":r,a=e.formattedPrice,s=void 0===a?"":a,c=e.multiple,l=void 0!==c&&c,u=e.featuredMediaUrl,p=void 0===u?null:u,h=e.featuredMediaTitle,d=void 0===h?null:h;return Object(i.createElement)("div",{className:"jetpack-simple-payments-wrapper"},Object(i.createElement)("div",{className:"jetpack-simple-payments-product"},p&&Object(i.createElement)("div",{className:"jetpack-simple-payments-product-image"},Object(i.createElement)("figure",{className:"jetpack-simple-payments-image"},Object(i.createElement)("img",{src:p,alt:d}))),Object(i.createElement)("div",{className:"jetpack-simple-payments-details"},n&&Object(i.createElement)("div",{className:"jetpack-simple-payments-title"},Object(i.createElement)("p",null,n)),o&&Object(i.createElement)("div",{className:"jetpack-simple-payments-description"},Object(i.createElement)("p",null,o)),s&&Object(i.createElement)("div",{className:"jetpack-simple-payments-price"},Object(i.createElement)("p",null,s)),Object(i.createElement)("div",{className:"jetpack-simple-payments-purchase-box"},l&&Object(i.createElement)("div",{className:"jetpack-simple-payments-items"},Object(i.createElement)("input",{className:"jetpack-simple-payments-items-number",readOnly:!0,type:"number",value:"1"})),Object(i.createElement)("div",{className:"jetpack-simple-payments-button"},Object(i.createElement)("img",{alt:Object(R.a)("Pay with PayPal"),src:L.a,srcSet:"".concat(q.a," 2x")}))))))},H=n(6),U=function(e){return function(t){return e({featuredMediaId:Object(C.get)(t,"id",0),featuredMediaUrl:Object(C.get)(t,"url",null),featuredMediaTitle:Object(C.get)(t,"title",null)})}},G=function(e){var t=e.featuredMediaId,n=e.featuredMediaUrl,r=e.featuredMediaTitle,a=e.setAttributes;return t?Object(i.createElement)("div",null,Object(i.createElement)(i.Fragment,null,Object(i.createElement)(H.BlockControls,null,Object(i.createElement)(o.Toolbar,null,Object(i.createElement)(H.MediaUpload,{onSelect:U(a),allowedTypes:["image"],value:t,render:function(e){var t=e.open;return Object(i.createElement)(o.IconButton,{className:"components-toolbar__control",label:Object(R.a)("Edit Image"),icon:"edit",onClick:t})}}),Object(i.createElement)(o.ToolbarButton,{icon:"trash",title:Object(R.a)("Remove Image"),onClick:function(){return a({featuredMediaId:null,featuredMediaUrl:null,featuredMediaTitle:null})}}))),Object(i.createElement)("figure",null,Object(i.createElement)("img",{src:n,alt:r})))):Object(i.createElement)(H.MediaPlaceholder,{icon:"format-image",labels:{title:Object(R.a)("Product Image")},accept:"image/*",allowedTypes:["image"],onSelect:U(a)})},$=["USD","EUR","AUD","BRL","CAD","CZK","DKK","HKD","HUF","ILS","JPY","MYR","MXN","TWD","NZD","NOK","PHP","PLN","GBP","RUB","SGD","SEK","CHF","THB"],K=function(e){var t=(""+e).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);return t?Math.max(0,(t[1]?t[1].length:0)-(t[2]?+t[2]:0)):0},Z=function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=A(t),i=r.precision,o=r.symbol,a=e.toFixed(i);return n?"".concat(a," ").concat(Object(C.trimEnd)(o,".")):a},W=function(e){function t(){var e,n;s()(this,t);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=p()(this,(e=d()(t)).call.apply(e,[this].concat(i))),y()(f()(n),"state",{fieldEmailError:null,fieldPriceError:null,fieldTitleError:null,isSavingProduct:!1}),y()(f()(n),"shouldInjectPaymentAttributes",!!n.props.attributes.productId),y()(f()(n),"validateAttributes",function(){var e=n.validatePrice(),t=n.validateTitle(),r=n.validateEmail(),i=n.validateCurrency();return e&&t&&r&&i}),y()(f()(n),"validateCurrency",function(){var e=n.props.attributes.currency;return $.includes(e)}),y()(f()(n),"validatePrice",function(){var e=n.props.attributes,t=e.currency,r=e.price,i=A(t).precision;return r&&0!==parseFloat(r)?Number.isNaN(parseFloat(r))?(n.setState({fieldPriceError:Object(R.a)("Invalid price")}),!1):parseFloat(r)<0?(n.setState({fieldPriceError:Object(R.a)("Your price is negative — enter a positive number so people can pay the right amount.")}),!1):K(r)>i?0===i?(n.setState({fieldPriceError:Object(R.a)("We know every penny counts, but prices in this currency can’t contain decimal values.")}),!1):(n.setState({fieldPriceError:Object(x.sprintf)(Object(R.b)("The price cannot have more than %d decimal place.","The price cannot have more than %d decimal places.",i),i)}),!1):(n.state.fieldPriceError&&n.setState({fieldPriceError:null}),!0):(n.setState({fieldPriceError:Object(R.a)("If you’re selling something, you need a price tag. Add yours here.")}),!1)}),y()(f()(n),"validateEmail",function(){var e=n.props.attributes.email;return e?_.a.validate(e)?(n.state.fieldEmailError&&n.setState({fieldEmailError:null}),!0):(n.setState({fieldEmailError:Object(x.sprintf)(Object(R.a)("%s is not a valid email address."),e)}),!1):(n.setState({fieldEmailError:Object(R.a)("We want to make sure payments reach you, so please add an email address.")}),!1)}),y()(f()(n),"validateTitle",function(){return n.props.attributes.title?(n.state.fieldTitleError&&n.setState({fieldTitleError:null}),!0):(n.setState({fieldTitleError:Object(R.a)("Please add a brief title so that people know what they’re paying for.")}),!1)}),y()(f()(n),"handleEmailChange",function(e){n.props.setAttributes({email:e}),n.setState({fieldEmailError:null})}),y()(f()(n),"handleFeaturedMediaSelect",function(e){n.props.setAttributes({featuredMediaId:Object(C.get)(e,"id",0)})}),y()(f()(n),"handleContentChange",function(e){n.props.setAttributes({content:e})}),y()(f()(n),"handlePriceChange",function(e){e=parseFloat(e),isNaN(e)?n.props.setAttributes({price:void 0}):n.props.setAttributes({price:e}),n.setState({fieldPriceError:null})}),y()(f()(n),"handleCurrencyChange",function(e){n.props.setAttributes({currency:e})}),y()(f()(n),"handleMultipleChange",function(e){n.props.setAttributes({multiple:!!e})}),y()(f()(n),"handleTitleChange",function(e){n.props.setAttributes({title:e}),n.setState({fieldTitleError:null})}),y()(f()(n),"getCurrencyList",$.map(function(e){var t=A(e).symbol;return{value:e,label:t===e?e:"".concat(e," ").concat(Object(C.trimEnd)(t,"."))}})),n}return g()(t,e),l()(t,[{key:"componentDidMount",value:function(){this.injectPaymentAttributes();var e=this.props,t=e.attributes,n=e.hasPublishAction;!t.productId&&n&&this.saveProduct()}},{key:"componentDidUpdate",value:function(e){var t=this.props,n=t.hasPublishAction,r=t.isSelected;Object(C.isEqual)(e.simplePayment,this.props.simplePayment)||this.injectPaymentAttributes(),!e.isSaving&&this.props.isSaving&&n&&this.validateAttributes()?this.saveProduct():e.isSelected&&!r&&this.validateAttributes()}},{key:"injectPaymentAttributes",value:function(){if(this.shouldInjectPaymentAttributes){var e=this.props,t=e.attributes,n=e.setAttributes,r=e.simplePayment,i=t.content,o=t.currency,a=t.email,s=t.featuredMediaId,c=t.multiple,l=t.price,u=t.productId,p=t.title;u&&r&&(n({content:Object(C.get)(r,["content","raw"],i),currency:Object(C.get)(r,["meta","spay_currency"],o),email:Object(C.get)(r,["meta","spay_email"],a),featuredMediaId:Object(C.get)(r,["featured_media"],s),multiple:Boolean(Object(C.get)(r,["meta","spay_multiple"],Boolean(c))),price:Object(C.get)(r,["meta","spay_price"],l||void 0),title:Object(C.get)(r,["title","raw"],p)}),this.shouldInjectPaymentAttributes=!this.shouldInjectPaymentAttributes)}}},{key:"toApi",value:function(){var e=this.props.attributes,t=e.content,n=e.currency,r=e.email,i=e.featuredMediaId,o=e.multiple,a=e.price,s=e.productId;return{id:s,content:t,featured_media:i,meta:{spay_currency:n,spay_email:r,spay_multiple:o,spay_price:a},status:s?"publish":"draft",title:e.title}}},{key:"saveProduct",value:function(){var e=this;if(!this.state.isSavingProduct){var t=this.props,n=t.attributes,r=t.setAttributes,i=n.email,o=Object(E.dispatch)("core").saveEntityRecord;this.setState({isSavingProduct:!0},function(){o("postType","jp_pay_product",e.toApi()).then(function(e){return e&&r({productId:e.id}),e}).catch(function(t){if(t&&t.data){var n=t.data.key;e.setState({fieldEmailError:"spay_email"===n?Object(x.sprintf)(Object(R.a)("%s is not a valid email address."),i):null,fieldPriceError:"spay_price"===n?Object(R.a)("Invalid price."):null})}}).finally(function(){e.setState({isSavingProduct:!1})})})}}},{key:"render",value:function(){var e=this.state,t=e.fieldEmailError,n=e.fieldPriceError,r=e.fieldTitleError,a=this.props,s=a.attributes,c=a.featuredMedia,l=a.instanceId,u=a.isSelected,p=a.setAttributes,h=a.simplePayment,d=s.content,m=s.currency,f=s.email,b=s.featuredMediaId,g=s.featuredMediaUrl,v=s.featuredMediaTitle,y=s.multiple,j=s.price,k=s.productId,_=s.title,w=g||c&&c.source_url,E=v||c&&c.alt_text,C=k&&!h;if(!u&&C)return Object(i.createElement)("div",{className:"simple-payments__loading"},Object(i.createElement)(V,{"aria-busy":"true",content:"█████",formattedPrice:"█████",title:"█████"}));if(!u&&f&&j&&_&&!t&&!n&&!r)return Object(i.createElement)(V,{"aria-busy":"false",content:d,featuredMediaUrl:w,featuredMediaTitle:E,formattedPrice:Z(j,m),multiple:y,title:_});var x=C?o.Disabled:"div";return Object(i.createElement)(x,{className:"wp-block-jetpack-simple-payments"},Object(i.createElement)(G,{featuredMediaId:b,featuredMediaUrl:w,featuredMediaTitle:E,setAttributes:p}),Object(i.createElement)("div",null,Object(i.createElement)(o.TextControl,{"aria-describedby":"".concat(l,"-title-error"),className:O()("simple-payments__field","simple-payments__field-title",{"simple-payments__field-has-error":r}),label:Object(R.a)("Item name"),onChange:this.handleTitleChange,placeholder:Object(R.a)("Item name"),required:!0,type:"text",value:_}),Object(i.createElement)(P,{id:"".concat(l,"-title-error"),isError:!0},r),Object(i.createElement)(o.TextareaControl,{className:"simple-payments__field simple-payments__field-content",label:Object(R.a)("Describe your item in a few words"),onChange:this.handleContentChange,placeholder:Object(R.a)("Describe your item in a few words"),value:d}),Object(i.createElement)("div",{className:"simple-payments__price-container"},Object(i.createElement)(o.SelectControl,{className:"simple-payments__field simple-payments__field-currency",label:Object(R.a)("Currency"),onChange:this.handleCurrencyChange,options:this.getCurrencyList,value:m}),Object(i.createElement)(o.TextControl,{"aria-describedby":"".concat(l,"-price-error"),className:O()("simple-payments__field","simple-payments__field-price",{"simple-payments__field-has-error":n}),label:Object(R.a)("Price"),onChange:this.handlePriceChange,placeholder:Z(0,m,!1),required:!0,step:"1",type:"number",value:j||""}),Object(i.createElement)(P,{id:"".concat(l,"-price-error"),isError:!0},n)),Object(i.createElement)("div",{className:"simple-payments__field-multiple"},Object(i.createElement)(o.ToggleControl,{checked:Boolean(y),label:Object(R.a)("Allow people to buy more than one item at a time"),onChange:this.handleMultipleChange})),Object(i.createElement)(o.TextControl,{"aria-describedby":"".concat(l,"-email-").concat(t?"error":"help"),className:O()("simple-payments__field","simple-payments__field-email",{"simple-payments__field-has-error":t}),label:Object(R.a)("Email"),onChange:this.handleEmailChange,placeholder:Object(R.a)("Email"),required:!0,type:"email",value:f}),Object(i.createElement)(P,{id:"".concat(l,"-email-error"),isError:!0},t),Object(i.createElement)(P,{id:"".concat(l,"-email-help")},Object(R.a)("Enter the email address associated with your PayPal account. Don’t have an account?")+" ",Object(i.createElement)(o.ExternalLink,{href:"https://www.paypal.com/"},Object(R.a)("Create one on PayPal")))))}}]),t}(i.Component),J=Object(E.withSelect)(function(e,t){var n=e("core"),r=n.getEntityRecord,i=n.getMedia,o=e("core/editor"),a=o.isSavingPost,s=o.getCurrentPost,c=t.attributes,l=c.productId,u=c.featuredMediaId,p=l?Object(C.pick)(r("postType","jp_pay_product",l),[["content"],["meta","spay_currency"],["meta","spay_email"],["meta","spay_multiple"],["meta","spay_price"],["title","raw"],["featured_media"]]):void 0;return{hasPublishAction:!!Object(C.get)(s(),["_links","wp:action-publish"]),isSaving:!!a(),simplePayment:p,featuredMedia:u?i(u):null}}),Y=Object(w.compose)(J,w.withInstanceId)(W);n(243);var X={title:Object(R.a)("Simple Payments button"),description:Object(i.createElement)(i.Fragment,null,Object(i.createElement)("p",null,Object(R.a)("Lets you create and embed credit and debit card payment buttons with minimal setup.")),Object(i.createElement)(o.ExternalLink,{href:"https://support.wordpress.com/simple-payments/"},Object(R.a)("Support reference"))),icon:Object(i.createElement)(o.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Object(i.createElement)(o.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(i.createElement)(o.Path,{d:"M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4v-6h16v6zm0-10H4V6h16v2z"})),category:"jetpack",keywords:[Object(R.c)("shop","block search term"),Object(R.c)("sell","block search term"),"PayPal"],attributes:{currency:{type:"string",default:"USD"},content:{type:"string",default:""},email:{type:"string",default:""},featuredMediaId:{type:"number",default:0},featuredMediaUrl:{type:"string",default:null},featuredMediaTitle:{type:"string",default:null},multiple:{type:"boolean",default:!1},price:{type:"number"},productId:{type:"number"},title:{type:"string",default:""}},transforms:{from:[{type:"shortcode",tag:"simple-payment",attributes:{productId:{type:"number",shortcode:function(e){var t=e.named.id;if(t){var n=parseInt(t,10);return n||void 0}}}}}]},edit:Y,save:function(e){var t=e.attributes.productId;return t?Object(i.createElement)(i.RawHTML,null,'[simple-payment id="'.concat(t,'"]')):null},supports:{className:!1,customClassName:!1,html:!1,reusable:!1}};Object(r.a)("simple-payments",X)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(13),o=n.n(i),a=n(0),s=n(16),c=n(2),l=n(6),u=(n(106),n(7)),p=n.n(u),h=n(11),d=n.n(h),m=n(8),f=n.n(m),b=n(9),g=n.n(b),v=n(4),y=n.n(v),j=n(10),O=n.n(j),k=n(12),_=n.n(k),w=n(15),E=n(35),C=n.n(E),x=n(14),S=n(1),A=n(20),M=n(37),T=n(27),z=n.n(T),D=n(34),F=n.n(D),N=n(52),P=n.n(N),R=(n(112),function(e){var t=e.children,n=void 0===t?null:t,r=e.isError,i=void 0!==r&&r,o=F()(e,["children","isError"]),s=_()("help-message",{"help-message-is-error":i});return n&&Object(a.createElement)("div",z()({className:s},o),i&&Object(a.createElement)(P.a,{size:"24"}),Object(a.createElement)("span",null,n))}),I=["jetpack/markdown","core/paragraph","core/image","core/heading","core/gallery","core/list","core/quote","core/shortcode","core/audio","core/code","core/cover","core/file","core/html","core/separator","core/spacer","core/subhead","core/table","core/verse","core/video"],L=function(e){function t(){var e,n;p()(this,t);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];(n=f()(this,(e=g()(t)).call.apply(e,[this].concat(i)))).onChangeSubject=n.onChangeSubject.bind(y()(n)),n.onBlurTo=n.onBlurTo.bind(y()(n)),n.onChangeTo=n.onChangeTo.bind(y()(n)),n.onChangeSubmit=n.onChangeSubmit.bind(y()(n)),n.onFormSettingsSet=n.onFormSettingsSet.bind(y()(n)),n.getToValidationError=n.getToValidationError.bind(y()(n)),n.renderToAndSubjectFields=n.renderToAndSubjectFields.bind(y()(n)),n.preventEnterSubmittion=n.preventEnterSubmittion.bind(y()(n)),n.hasEmailError=n.hasEmailError.bind(y()(n));var a=(i[0].attributes.to?i[0].attributes.to:"").split(",").map(n.getToValidationError).filter(Boolean);return n.state={toError:a&&a.length?a:null},n}return O()(t,e),d()(t,[{key:"getIntroMessage",value:function(){return Object(S.a)("You’ll receive an email notification each time someone fills out the form. Where should it go, and what should the subject line be?")}},{key:"getEmailHelpMessage",value:function(){return Object(S.a)("You can enter multiple email addresses separated by commas.")}},{key:"onChangeSubject",value:function(e){this.props.setAttributes({subject:e})}},{key:"getToValidationError",value:function(e){return 0!==(e=e.trim()).length&&(!C.a.validate(e)&&{email:e})}},{key:"onBlurTo",value:function(e){var t=e.target.value.split(",").map(this.getToValidationError).filter(Boolean);t&&t.length&&this.setState({toError:t})}},{key:"onChangeTo",value:function(e){if(0===e.trim().length)return this.setState({toError:null}),void this.props.setAttributes({to:e});this.setState({toError:null}),this.props.setAttributes({to:e})}},{key:"onChangeSubmit",value:function(e){this.props.setAttributes({submitButtonText:e})}},{key:"onFormSettingsSet",value:function(e){e.preventDefault(),this.state.toError||this.props.setAttributes({hasFormSettingsSet:"yes"})}},{key:"getfieldEmailError",value:function(e){if(e){if(1===e.length)return e[0]&&e[0].email?Object(w.sprintf)(Object(S.a)("%s is not a valid email address."),e[0].email):e[0];if(2===e.length)return Object(w.sprintf)(Object(S.a)("%s and %s are not a valid email address."),e[0].email,e[1].email);var t=e.map(function(e){return e.email});return Object(w.sprintf)(Object(S.a)("%s are not a valid email address."),t.join(", "))}return null}},{key:"preventEnterSubmittion",value:function(e){"Enter"===e.key&&(e.preventDefault(),e.stopPropagation())}},{key:"renderToAndSubjectFields",value:function(){var e=this.state.toError,t=this.props,n=t.instanceId,r=t.attributes,i=r.subject,o=r.to;return Object(a.createElement)(a.Fragment,null,Object(a.createElement)(c.TextControl,{"aria-describedby":"contact-form-".concat(n,"-email-").concat(this.hasEmailError()?"error":"help"),label:Object(S.a)("Email address"),placeholder:Object(S.a)("name@example.com"),onKeyDown:this.preventEnterSubmittion,value:o,onBlur:this.onBlurTo,onChange:this.onChangeTo}),Object(a.createElement)(R,{isError:!0,id:"contact-form-".concat(n,"-email-error")},this.getfieldEmailError(e)),Object(a.createElement)(R,{id:"contact-form-".concat(n,"-email-help")},this.getEmailHelpMessage()),Object(a.createElement)(c.TextControl,{label:Object(S.a)("Email subject line"),value:i,placeholder:Object(S.a)("Let's work together"),onChange:this.onChangeSubject}))}},{key:"hasEmailError",value:function(){var e=this.state.toError;return e&&e.length>0}},{key:"render",value:function(){var e=this.props,t=e.className,n=e.attributes.hasFormSettingsSet,r=_()(t,"jetpack-contact-form",{"has-intro":!n});return Object(a.createElement)(a.Fragment,null,Object(a.createElement)(l.InspectorControls,null,Object(a.createElement)(c.PanelBody,{title:Object(S.a)("Email feedback settings")},this.renderToAndSubjectFields())),Object(a.createElement)("div",{className:r},!n&&Object(a.createElement)(c.Placeholder,{label:Object(S.a)("Form"),icon:Object(A.a)(Object(a.createElement)(c.Path,{d:"M13 7.5h5v2h-5zm0 7h5v2h-5zM19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zM11 6H6v5h5V6zm-1 4H7V7h3v3zm1 3H6v5h5v-5zm-1 4H7v-3h3v3z"}))},Object(a.createElement)("form",{onSubmit:this.onFormSettingsSet},Object(a.createElement)("p",{className:"jetpack-contact-form__intro-message"},this.getIntroMessage()),this.renderToAndSubjectFields(),Object(a.createElement)("p",{className:"jetpack-contact-form__intro-message"},Object(S.a)("(If you leave these blank, notifications will go to the author with the post or page title as the subject line.)")),Object(a.createElement)("div",{className:"jetpack-contact-form__create"},Object(a.createElement)(c.Button,{isPrimary:!0,type:"submit",disabled:this.hasEmailError()},Object(S.a)("Add form"))))),n&&Object(a.createElement)(l.InnerBlocks,{allowedBlocks:I,templateLock:!1,template:[["jetpack/field-name",{required:!0}],["jetpack/field-email",{required:!0}],["jetpack/field-url",{}],["jetpack/field-textarea",{}]]}),n&&Object(a.createElement)(M.a,this.props)))}}]),t}(a.Component),B=Object(x.compose)([x.withInstanceId])(L),q=function(e){var t=e.setAttributes,n=e.label,r=e.resetFocus,i=e.isSelected,o=e.required;return Object(a.createElement)("div",{className:"jetpack-field-label"},Object(a.createElement)(l.PlainText,{value:n,className:"jetpack-field-label__input",onChange:function(e){r&&r(),t({label:e})},placeholder:Object(S.a)("Write label…")}),i&&Object(a.createElement)(c.ToggleControl,{label:Object(S.a)("Required"),className:"jetpack-field-label__required",checked:o,onChange:function(e){return t({required:e})}}),!i&&o&&Object(a.createElement)("span",{className:"required"},Object(S.a)("(required)")))};var V=function(e){var t=e.isSelected,n=e.type,r=e.required,i=e.label,o=e.setAttributes,s=e.defaultValue,u=e.placeholder,p=e.id;return Object(a.createElement)(a.Fragment,null,Object(a.createElement)("div",{className:_()("jetpack-field",{"is-selected":t})},Object(a.createElement)(c.TextControl,{type:n,label:Object(a.createElement)(q,{required:r,label:i,setAttributes:o,isSelected:t}),placeholder:u,value:u,onChange:function(e){return o({placeholder:e})},title:Object(S.a)("Set the placeholder text")})),Object(a.createElement)(l.InspectorControls,null,Object(a.createElement)(c.PanelBody,{title:Object(S.a)("Field Settings")},Object(a.createElement)(c.TextControl,{label:Object(S.a)("Default Value"),value:s,onChange:function(e){return o({defaultValue:e})}}),Object(a.createElement)(c.TextControl,{label:Object(S.a)("ID"),value:p,onChange:function(e){return o({id:e})}}))))};var H=function(e){var t=e.required,n=e.label,r=e.setAttributes,i=e.isSelected,o=e.defaultValue,s=e.placeholder,u=e.id;return Object(a.createElement)(a.Fragment,null,Object(a.createElement)("div",{className:"jetpack-field"},Object(a.createElement)(c.TextareaControl,{label:Object(a.createElement)(q,{required:t,label:n,setAttributes:r,isSelected:i}),placeholder:s,value:s,onChange:function(e){return r({placeholder:e})},title:Object(S.a)("Set the placeholder text")})),Object(a.createElement)(l.InspectorControls,null,Object(a.createElement)(c.PanelBody,{title:Object(S.a)("Field Settings")},Object(a.createElement)(c.TextControl,{label:Object(S.a)("Default Value"),value:o,onChange:function(e){return r({defaultValue:e})}}),Object(a.createElement)(c.TextControl,{label:Object(S.a)("ID"),value:u,onChange:function(e){return r({id:e})}}))))},U=Object(x.withInstanceId)(function(e){var t=e.instanceId,n=e.required,r=e.label,i=e.setAttributes,o=e.isSelected,s=e.defaultValue,u=e.id;return Object(a.createElement)(c.BaseControl,{id:"jetpack-field-checkbox-".concat(t),className:"jetpack-field jetpack-field-checkbox",label:Object(a.createElement)(a.Fragment,null,Object(a.createElement)("input",{className:"jetpack-field-checkbox__checkbox",type:"checkbox",disabled:!0,checked:s}),Object(a.createElement)(q,{required:n,label:r,setAttributes:i,isSelected:o}),Object(a.createElement)(l.InspectorControls,null,Object(a.createElement)(c.PanelBody,{title:Object(S.a)("Field Settings")},Object(a.createElement)(c.ToggleControl,{label:Object(S.a)("Default Checked State"),checked:s,onChange:function(e){return i({defaultValue:e})}}),Object(a.createElement)(c.TextControl,{label:Object(S.a)("ID"),value:u,onChange:function(e){return i({id:e})}}))))})}),G=function(e){function t(){var e,n;p()(this,t);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return(n=f()(this,(e=g()(t)).call.apply(e,[this].concat(i)))).onChangeOption=n.onChangeOption.bind(y()(n)),n.onKeyPress=n.onKeyPress.bind(y()(n)),n.onDeleteOption=n.onDeleteOption.bind(y()(n)),n.textInput=Object(a.createRef)(),n}return O()(t,e),d()(t,[{key:"componentDidMount",value:function(){this.props.isInFocus&&this.textInput.current.focus()}},{key:"componentDidUpdate",value:function(){this.props.isInFocus&&this.textInput.current.focus()}},{key:"onChangeOption",value:function(e){this.props.onChangeOption(this.props.index,e.target.value)}},{key:"onKeyPress",value:function(e){return"Enter"===e.key?(this.props.onAddOption(this.props.index),void e.preventDefault()):"Backspace"===e.key&&""===e.target.value?(this.props.onChangeOption(this.props.index),void e.preventDefault()):void 0}},{key:"onDeleteOption",value:function(){this.props.onChangeOption(this.props.index)}},{key:"render",value:function(){var e=this.props,t=e.isSelected,n=e.option,r=e.type;return Object(a.createElement)("li",{className:"jetpack-option"},r&&"select"!==r&&Object(a.createElement)("input",{className:"jetpack-option__type",type:r,disabled:!0}),Object(a.createElement)("input",{type:"text",className:"jetpack-option__input",value:n,placeholder:Object(S.a)("Write option…"),onChange:this.onChangeOption,onKeyDown:this.onKeyPress,ref:this.textInput}),t&&Object(a.createElement)(c.IconButton,{className:"jetpack-option__remove",icon:"trash",label:Object(S.a)("Remove option"),onClick:this.onDeleteOption}))}}]),t}(a.Component),$=function(e){function t(){var e,n;p()(this,t);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return(n=f()(this,(e=g()(t)).call.apply(e,[this].concat(i)))).onChangeOption=n.onChangeOption.bind(y()(n)),n.addNewOption=n.addNewOption.bind(y()(n)),n.state={inFocus:null},n}return O()(t,e),d()(t,[{key:"onChangeOption",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=this.props.options.slice(0);null===t?(n.splice(e,1),e>0&&this.setState({inFocus:e-1})):(n.splice(e,1,t),this.setState({inFocus:e})),this.props.setAttributes({options:n})}},{key:"addNewOption",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=this.props.options.slice(0),n=0;"object"==typeof e?(t.push(""),n=t.length-1):(t.splice(e+1,0,""),n=e+1),this.setState({inFocus:n}),this.props.setAttributes({options:t})}},{key:"render",value:function(){var e=this,t=this.props,n=t.type,r=t.instanceId,i=t.required,o=t.label,s=t.setAttributes,u=t.isSelected,p=t.id,h=this.props.options,d=this.state.inFocus;return h.length||(h=[""],d=0),Object(a.createElement)(a.Fragment,null,Object(a.createElement)(c.BaseControl,{id:"jetpack-field-multiple-".concat(r),className:"jetpack-field jetpack-field-multiple",label:Object(a.createElement)(q,{required:i,label:o,setAttributes:s,isSelected:u,resetFocus:function(){return e.setState({inFocus:null})}})},Object(a.createElement)("ol",{className:"jetpack-field-multiple__list",id:"jetpack-field-multiple-".concat(r)},h.map(function(t,r){return Object(a.createElement)(G,{type:n,key:r,option:t,index:r,onChangeOption:e.onChangeOption,onAddOption:e.addNewOption,isInFocus:r===d&&u,isSelected:u})})),u&&Object(a.createElement)(c.IconButton,{className:"jetpack-field-multiple__add-option",icon:"insert",label:Object(S.a)("Insert option"),onClick:this.addNewOption},Object(S.a)("Add option"))),Object(a.createElement)(l.InspectorControls,null,Object(a.createElement)(c.PanelBody,{title:Object(S.a)("Field Settings")},Object(a.createElement)(c.TextControl,{label:Object(S.a)("ID"),value:p,onChange:function(e){return s({id:e})}}))))}}]),t}(a.Component),K=Object(x.withInstanceId)($),Z={title:Object(S.a)("Form"),description:Object(S.a)("A simple way to get feedback from folks visiting your site."),icon:Object(A.a)(Object(a.createElement)(c.Path,{d:"M13 7.5h5v2h-5zm0 7h5v2h-5zM19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zM11 6H6v5h5V6zm-1 4H7V7h3v3zm1 3H6v5h5v-5zm-1 4H7v-3h3v3z"})),keywords:[Object(S.a)("email"),Object(S.a)("feedback"),Object(S.a)("contact")],category:"jetpack",supports:{reusable:!1,html:!1},attributes:{subject:{type:"string",default:""},to:{type:"string",default:""},submitButtonText:{type:"string",default:Object(S.a)("Submit")},customBackgroundButtonColor:{type:"string"},customTextButtonColor:{type:"string"},submitButtonClasses:{type:"string"},hasFormSettingsSet:{type:"string",default:null},has_form_settings_set:{type:"string",default:null},submit_button_text:{type:"string",default:Object(S.a)("Submit")}},edit:B,save:l.InnerBlocks.Content,deprecated:[{attributes:{subject:{type:"string",default:""},to:{type:"string",default:""},submit_button_text:{type:"string",default:Object(S.a)("Submit")},has_form_settings_set:{type:"string",default:null}},migrate:function(e){return{submitButtonText:e.submit_button_text,hasFormSettingsSet:e.has_form_settings_set,to:e.to,subject:e.subject}},isEligible:function(e){return!(!e.has_form_settings_set&&"Submit"===e.submit_button_text)},save:l.InnerBlocks.Content}]},W={category:"jetpack",parent:["jetpack/contact-form"],supports:{reusable:!1,html:!1},attributes:{label:{type:"string",default:null},required:{type:"boolean",default:!1},options:{type:"array",default:[]},defaultValue:{type:"string",default:""},placeholder:{type:"string",default:""},id:{type:"string",default:""}},transforms:{to:[{type:"block",blocks:["jetpack/field-text"],isMatch:function(e){return!e.options.length},transform:function(e){return Object(s.createBlock)("jetpack/field-text",e)}},{type:"block",blocks:["jetpack/field-name"],isMatch:function(e){return!e.options.length},transform:function(e){return Object(s.createBlock)("jetpack/field-name",e)}},{type:"block",blocks:["jetpack/field-email"],isMatch:function(e){return!e.options.length},transform:function(e){return Object(s.createBlock)("jetpack/field-email",e)}},{type:"block",blocks:["jetpack/field-url"],isMatch:function(e){return!e.options.length},transform:function(e){return Object(s.createBlock)("jetpack/field-url",e)}},{type:"block",blocks:["jetpack/field-date"],isMatch:function(e){return!e.options.length},transform:function(e){return Object(s.createBlock)("jetpack/field-date",e)}},{type:"block",blocks:["jetpack/field-telephone"],isMatch:function(e){return!e.options.length},transform:function(e){return Object(s.createBlock)("jetpack/field-telephone",e)}},{type:"block",blocks:["jetpack/field-textarea"],isMatch:function(e){return!e.options.length},transform:function(e){return Object(s.createBlock)("jetpack/field-textarea",e)}},{type:"block",blocks:["jetpack/field-checkbox-multiple"],isMatch:function(e){return 1<=e.options.length},transform:function(e){return Object(s.createBlock)("jetpack/field-checkbox-multiple",e)}},{type:"block",blocks:["jetpack/field-radio"],isMatch:function(e){return 1<=e.options.length},transform:function(e){return Object(s.createBlock)("jetpack/field-radio",e)}},{type:"block",blocks:["jetpack/field-select"],isMatch:function(e){return 1<=e.options.length},transform:function(e){return Object(s.createBlock)("jetpack/field-select",e)}}]},save:function(){return null}},J=function(e){var t=e.attributes,n=e.name;return null===t.label?Object(s.getBlockType)(n).title:t.label},Y=function(e){return function(t){return Object(a.createElement)(V,{type:e,label:J(t),required:t.attributes.required,setAttributes:t.setAttributes,isSelected:t.isSelected,defaultValue:t.attributes.defaultValue,placeholder:t.attributes.placeholder,id:t.attributes.id})}},X=function(e){return function(t){return Object(a.createElement)(K,{label:J(t),required:t.attributes.required,options:t.attributes.options,setAttributes:t.setAttributes,type:e,isSelected:t.isSelected,id:t.attributes.id})}},Q=[{name:"field-text",settings:o()({},W,{title:Object(S.a)("Text"),description:Object(S.a)("When you need just a small amount of text, add a text input."),icon:Object(A.a)(Object(a.createElement)(c.Path,{d:"M4 9h16v2H4V9zm0 4h10v2H4v-2z"})),edit:Y("text")})},{name:"field-name",settings:o()({},W,{title:Object(S.a)("Name"),description:Object(S.a)("Introductions are important. Add an input for folks to add their name."),icon:Object(A.a)(Object(a.createElement)(c.Path,{d:"M12 6c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2m0 10c2.7 0 5.8 1.29 6 2H6c.23-.72 3.31-2 6-2m0-12C9.79 4 8 5.79 8 8s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 10c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"})),edit:Y("text")})},{name:"field-email",settings:o()({},W,{title:Object(S.a)("Email"),keywords:[Object(S.a)("e-mail"),Object(S.a)("mail"),"email"],description:Object(S.a)("Want to reply to folks? Add an email address input."),icon:Object(A.a)(Object(a.createElement)(c.Path,{d:"M22 6c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6zm-2 0l-8 5-8-5h16zm0 12H4V8l8 5 8-5v10z"})),edit:Y("email")})},{name:"field-url",settings:o()({},W,{title:Object(S.a)("Website"),keywords:["url",Object(S.a)("internet page"),"link"],description:Object(S.a)("Add an address input for a website."),icon:Object(A.a)(Object(a.createElement)(c.Path,{d:"M20 18c1.1 0 1.99-.9 1.99-2L22 6c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2H0v2h24v-2h-4zM4 6h16v10H4V6z"})),edit:Y("url")})},{name:"field-date",settings:o()({},W,{title:Object(S.a)("Date Picker"),keywords:[Object(S.a)("Calendar"),Object(S.a)("day month year","block search term")],description:Object(S.a)("The best way to set a date. Add a date picker."),icon:Object(A.a)(Object(a.createElement)(c.Path,{d:"M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V9h14v10zm0-12H5V5h14v2zM7 11h5v5H7z"})),edit:Y("text")})},{name:"field-telephone",settings:o()({},W,{title:Object(S.a)("Telephone"),keywords:[Object(S.a)("Phone"),Object(S.a)("Cellular phone"),Object(S.a)("Mobile")],description:Object(S.a)("Add a phone number input."),icon:Object(A.a)(Object(a.createElement)(c.Path,{d:"M6.54 5c.06.89.21 1.76.45 2.59l-1.2 1.2c-.41-1.2-.67-2.47-.76-3.79h1.51m9.86 12.02c.85.24 1.72.39 2.6.45v1.49c-1.32-.09-2.59-.35-3.8-.75l1.2-1.19M7.5 3H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 17 .55 0 1-.45 1-1v-3.49c0-.55-.45-1-1-1-1.24 0-2.45-.2-3.57-.57-.1-.04-.21-.05-.31-.05-.26 0-.51.1-.71.29l-2.2 2.2c-2.83-1.45-5.15-3.76-6.59-6.59l2.2-2.2c.28-.28.36-.67.25-1.02C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1z"})),edit:Y("tel")})},{name:"field-textarea",settings:o()({},W,{title:Object(S.a)("Message"),keywords:[Object(S.a)("Textarea"),"textarea",Object(S.a)("Multiline text")],description:Object(S.a)("Let folks speak their mind. This text box is great for longer responses."),icon:Object(A.a)(Object(a.createElement)(c.Path,{d:"M21 11.01L3 11v2h18zM3 16h12v2H3zM21 6H3v2.01L21 8z"})),edit:function(e){return Object(a.createElement)(H,{label:J(e),required:e.attributes.required,setAttributes:e.setAttributes,isSelected:e.isSelected,defaultValue:e.attributes.defaultValue,placeholder:e.attributes.placeholder,id:e.attributes.id})}})},{name:"field-checkbox",settings:o()({},W,{title:Object(S.a)("Checkbox"),keywords:[Object(S.a)("Confirm"),Object(S.a)("Accept")],description:Object(S.a)("Add a single checkbox."),icon:Object(A.a)(Object(a.createElement)(c.Path,{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zM17.99 9l-1.41-1.42-6.59 6.59-2.58-2.57-1.42 1.41 4 3.99z"})),edit:function(e){return Object(a.createElement)(U,{label:e.attributes.label,required:e.attributes.required,setAttributes:e.setAttributes,isSelected:e.isSelected,defaultValue:e.attributes.defaultValue,id:e.attributes.id})},attributes:o()({},W.attributes,{label:{type:"string",default:""}})})},{name:"field-checkbox-multiple",settings:o()({},W,{title:Object(S.a)("Checkbox Group"),keywords:[Object(S.a)("Choose Multiple"),Object(S.a)("Option")],description:Object(S.a)("People love options. Add several checkbox items."),icon:Object(A.a)(Object(a.createElement)(c.Path,{d:"M18 7l-1.41-1.41-6.34 6.34 1.41 1.41L18 7zm4.24-1.41L11.66 16.17 7.48 12l-1.41 1.41L11.66 19l12-12-1.42-1.41zM.41 13.41L6 19l1.41-1.41L1.83 12 .41 13.41z"})),edit:X("checkbox"),attributes:o()({},W.attributes,{label:{type:"string",default:"Choose several"}})})},{name:"field-radio",settings:o()({},W,{title:Object(S.a)("Radio"),keywords:[Object(S.a)("Choose"),Object(S.a)("Select"),Object(S.a)("Option")],description:Object(S.a)("Inspired by radios, only one radio item can be selected at a time. Add several radio button items."),icon:Object(A.a)(Object(a.createElement)(a.Fragment,null,Object(a.createElement)(c.Path,{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"}),Object(a.createElement)(c.Circle,{cx:"12",cy:"12",r:"5"}))),edit:X("radio"),attributes:o()({},W.attributes,{label:{type:"string",default:"Choose one"}})})},{name:"field-select",settings:o()({},W,{title:Object(S.a)("Select"),keywords:[Object(S.a)("Choose"),Object(S.a)("Dropdown"),Object(S.a)("Option")],description:Object(S.a)("Compact, but powerful. Add a select box with several items."),icon:Object(A.a)(Object(a.createElement)(c.Path,{d:"M3 17h18v2H3zm16-5v1H5v-1h14m2-2H3v5h18v-5zM3 6h18v2H3z"})),edit:X("select"),attributes:o()({},W.attributes,{label:{type:"string",default:"Select one"}})})}];Object(r.a)("contact-form",Z,Q)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(25),o=n(7),a=n.n(o),s=n(11),c=n.n(s),l=n(8),u=n.n(l),p=n(9),h=n.n(p),d=n(4),m=n.n(d),f=n(10),b=n.n(f),g=n(3),v=n.n(g),y=n(0),j=n(26),O=n.n(j),k=n(2),_=n(6),w=n(21),E=n.n(w),C=n(12),x=n.n(C),S=n(5),A=n(28),M=n(15),T=n(14),z=n(1);function D(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10,n=[],r=0;r<e.length;r++){var i=e[r],o=i.keywords,a=void 0===o?[]:o;if("string"==typeof i.label&&(a=[].concat(E()(a),[i.label])),n.push(i),n.length===t)break}return n}var F=function(e){function t(){var e;return a()(this,t),e=u()(this,h()(t).apply(this,arguments)),v()(m()(e),"select",function(t){(e.props.completer.getOptionCompletion||{})(t),e.reset()}),v()(m()(e),"reset",function(){e.setState(e.constructor.getInitialState())}),v()(m()(e),"onChange",function(t){var n=e.props.completer,r=e.state.options;if(t){n&&(n.isDebounced?e.debouncedLoadOptions(n,t):e.loadOptions(n,t));var i=n?D(r):[];n&&e.setState({selectedIndex:0,filteredOptions:i,query:t})}else e.reset()}),v()(m()(e),"onKeyDown",function(t){var n=e.state,r=n.isOpen,i=n.selectedIndex,o=n.filteredOptions;if(r){var a;switch(t.keyCode){case A.UP:a=(0===i?o.length:i)-1,e.setState({selectedIndex:a});break;case A.DOWN:a=(i+1)%o.length,e.setState({selectedIndex:a});break;case A.ENTER:e.select(o[i]);break;case A.LEFT:case A.RIGHT:case A.ESCAPE:return void e.reset();default:return}t.preventDefault(),t.stopPropagation()}}),e.debouncedLoadOptions=Object(S.debounce)(e.loadOptions,250),e.state=e.constructor.getInitialState(),e}return b()(t,e),c()(t,null,[{key:"getInitialState",value:function(){return{selectedIndex:0,query:void 0,filteredOptions:[],isOpen:!1}}}]),c()(t,[{key:"componentWillUnmount",value:function(){this.debouncedLoadOptions.cancel()}},{key:"handleFocusOutside",value:function(){this.reset()}},{key:"loadOptions",value:function(e,t){var n=this,r=e.options,i=this.activePromise=Promise.resolve("function"==typeof r?r(t):r).then(function(t){var r;if(i===n.activePromise){var o=t.map(function(t,n){return{key:"".concat(n),value:t,label:e.getOptionLabel(t),keywords:e.getOptionKeywords?e.getOptionKeywords(t):[]}}),a=D(o),s=a.length===n.state.filteredOptions.length?n.state.selectedIndex:0;n.setState((r={},v()(r,"options",o),v()(r,"filteredOptions",a),v()(r,"selectedIndex",s),v()(r,"isOpen",a.length>0),r)),n.announce(a)}})}},{key:"announce",value:function(e){var t=this.props.debouncedSpeak;t&&(e.length?t(Object(M.sprintf)(Object(z.b)("%d result found, use up and down arrow keys to navigate.","%d results found, use up and down arrow keys to navigate.",e.length,"jetpack"),e.length),"assertive"):t(Object(z.a)("No results."),"assertive"))}},{key:"render",value:function(){var e=this,t=this.onChange,n=this.onKeyDown,r=this.props,i=r.children,o=r.instanceId,a=r.completer,s=this.state,c=s.selectedIndex,l=s.filteredOptions,u=(l[c]||{}).key,p=void 0===u?"":u,h=a.className,d=l.length>0,m=d?"components-autocomplete-listbox-".concat(o):null,f=d?"components-autocomplete-item-".concat(o,"-").concat(p):null;return Object(y.createElement)("div",{className:"components-autocomplete"},i({isExpanded:d,listBoxId:m,activeId:f,onChange:t,onKeyDown:n}),d&&Object(y.createElement)(k.Popover,{focusOnMount:!1,onClose:this.reset,position:"top center",className:"components-autocomplete__popover",noArrow:!0},Object(y.createElement)("div",{id:m,role:"listbox",className:"components-autocomplete__results"},Object(S.map)(l,function(t,n){return Object(y.createElement)(k.Button,{key:t.key,id:"components-autocomplete-item-".concat(o,"-").concat(t.key),role:"option","aria-selected":n===c,disabled:t.isDisabled,className:x()("components-autocomplete__result",h,{"is-selected":n===c}),onClick:function(){return e.select(t)}},t.label)}))))}}]),t}(y.Component),N=Object(T.compose)([k.withSpokenMessages,T.withInstanceId,k.withFocusOutside])(F),P=Object(z.a)("Add a marker…"),R=function(e){function t(){var e;return a()(this,t),e=u()(this,h()(t).apply(this,arguments)),v()(m()(e),"getOptionCompletion",function(t){var n=t.value,r={placeTitle:n.text,title:n.text,caption:n.place_name,id:n.id,coordinates:{longitude:n.geometry.coordinates[0],latitude:n.geometry.coordinates[1]}};return e.props.onAddPoint(r),n.text}),v()(m()(e),"search",function(t){var n=e.props,r=n.apiKey,i=n.onError,o="https://api.mapbox.com/geocoding/v5/mapbox.places/"+encodeURI(t)+".json?access_token="+r;return new Promise(function(e,t){var n=new XMLHttpRequest;n.open("GET",o),n.onload=function(){if(200===n.status){var r=JSON.parse(n.responseText);e(r.features)}else{var o=JSON.parse(n.responseText);i(o.statusText,o.responseJSON.message),t(new Error("Mapbox Places Error"))}},n.send()})}),v()(m()(e),"onReset",function(){e.textRef.current.value=null}),e.textRef=Object(y.createRef)(),e.containerRef=Object(y.createRef)(),e.state={isEmpty:!0},e.autocompleter={name:"placeSearch",options:e.search,isDebounced:!0,getOptionLabel:function(e){return Object(y.createElement)("span",null,e.place_name)},getOptionKeywords:function(e){return[e.place_name]},getOptionCompletion:e.getOptionCompletion},e}return b()(t,e),c()(t,[{key:"componentDidMount",value:function(){var e=this;setTimeout(function(){e.containerRef.current.querySelector("input").focus()},50)}},{key:"render",value:function(){var e=this,t=this.props.label;return Object(y.createElement)("div",{ref:this.containerRef},Object(y.createElement)(k.BaseControl,{label:t,className:"components-location-search"},Object(y.createElement)(N,{completer:this.autocompleter,onReset:this.onReset},function(t){var n=t.isExpanded,r=t.listBoxId,i=t.activeId,o=t.onChange,a=t.onKeyDown;return Object(y.createElement)(k.TextControl,{placeholder:P,ref:e.textRef,onChange:o,"aria-expanded":n,"aria-owns":r,"aria-activedescendant":i,onKeyDown:a})})))}}]),t}(y.Component);R.defaultProps={onError:function(){}};var I=R,L=(n(120),function(e){function t(){return a()(this,t),u()(this,h()(t).apply(this,arguments))}return b()(t,e),c()(t,[{key:"render",value:function(){var e=this.props,t=e.onClose,n=e.onAddPoint,r=e.onError,i=e.apiKey;return Object(y.createElement)(k.Button,{className:"component__add-point"},Object(z.a)("Add marker"),Object(y.createElement)(k.Popover,{className:"component__add-point__popover"},Object(y.createElement)(k.Button,{className:"component__add-point__close",onClick:t},Object(y.createElement)(k.Dashicon,{icon:"no"})),Object(y.createElement)(I,{onAddPoint:n,label:Object(z.a)("Add a location"),apiKey:i,onError:r})))}}]),t}(y.Component));L.defaultProps={onAddPoint:function(){},onClose:function(){},onError:function(){}};var B=L,q=(n(122),function(e){function t(){var e;return a()(this,t),e=u()(this,h()(t).apply(this,arguments)),v()(m()(e),"onDeletePoint",function(t){var n=parseInt(t.target.getAttribute("data-id")),r=e.props,i=r.points,o=r.onChange,a=i.slice(0);a.splice(n,1),o(a)}),e.state={selectedCell:null},e}return b()(t,e),c()(t,[{key:"setMarkerField",value:function(e,t,n){var r=this.props,i=r.points,o=r.onChange,a=i.slice(0);a[n][e]=t,o(a)}},{key:"render",value:function(){var e=this,t=this.props.points.map(function(t,n){return Object(y.createElement)(k.PanelBody,{title:t.placeTitle,key:t.id,initialOpen:!1},Object(y.createElement)(k.TextControl,{label:"Marker Title",value:t.title,onChange:function(t){return e.setMarkerField("title",t,n)}}),Object(y.createElement)(k.TextareaControl,{label:"Marker Caption",value:t.caption,rows:"3",onChange:function(t){return e.setMarkerField("caption",t,n)}}),Object(y.createElement)(k.Button,{"data-id":n,onClick:e.onDeletePoint,className:"component__locations__delete-btn"},Object(y.createElement)(k.Dashicon,{icon:"trash",size:"15"})," Delete Marker"))});return Object(y.createElement)("div",{className:"component__locations"},Object(y.createElement)(k.Panel,{className:"component__locations__panel"},t))}}]),t}(y.Component));q.defaultProps={points:Object.freeze([]),onChange:function(){}};var V=q,H=n(57),U=(n(124),function(e){function t(){return a()(this,t),u()(this,h()(t).apply(this,arguments))}return b()(t,e),c()(t,[{key:"render",value:function(){var e=this.props,t=e.options,n=e.value,r=e.onChange,i=e.label,o=t.map(function(e,t){var i=x()("component__map-theme-picker__button","is-theme-"+e.value,e.value===n?"is-selected":"");return Object(y.createElement)(k.Button,{className:i,title:e.label,key:t,onClick:function(){return r(e.value)}},e.label)});return Object(y.createElement)("div",{className:"component__map-theme-picker components-base-control"},Object(y.createElement)("label",{className:"components-base-control__label"},i),Object(y.createElement)(k.ButtonGroup,null,o))}}]),t}(y.Component));U.defaultProps={label:"",options:[],value:null,onChange:function(){}};var G=U,$=0,K=function(e){function t(){var e;return a()(this,t),e=u()(this,h()(t).apply(this,arguments)),v()(m()(e),"addPoint",function(t){var n=e.props,r=n.attributes,i=n.setAttributes,o=r.points,a=o.slice(0),s=!1;o.map(function(e){e.id===t.id&&(s=!0)}),s||(a.push(t),i({points:a}),e.setState({addPointVisibility:!1}))}),v()(m()(e),"updateAlignment",function(t){e.props.setAttributes({align:t}),setTimeout(e.mapRef.current.sizeMap,0)}),v()(m()(e),"updateAPIKeyControl",function(t){e.setState({apiKeyControl:t})}),v()(m()(e),"updateAPIKey",function(){var t=e.props.noticeOperations,n=e.state.apiKeyControl;t.removeAllNotices(),n&&e.apiCall(n,"POST")}),v()(m()(e),"removeAPIKey",function(){e.apiCall(null,"DELETE")}),v()(m()(e),"onError",function(t,n){var r=e.props.noticeOperations;r.removeAllNotices(),r.createErrorNotice(n)}),e.state={addPointVisibility:!1,apiState:$},e.mapRef=Object(y.createRef)(),e}return b()(t,e),c()(t,[{key:"apiCall",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"GET",r=this.props.noticeOperations,i=this.state.apiKey,o="/wpcom/v2/service-api-keys/mapbox",a=t?{path:o,method:n,data:{service_api_key:t}}:{path:o,method:n};this.setState({apiRequestOutstanding:!0},function(){O()(a).then(function(t){r.removeAllNotices(),e.setState({apiState:t.service_api_key?2:1,apiKey:t.service_api_key,apiKeyControl:t.service_api_key,apiRequestOutstanding:!1})},function(t){e.onError(null,t.message),e.setState({apiRequestOutstanding:!1,apiKeyControl:i})})})}},{key:"componentDidMount",value:function(){this.apiCall()}},{key:"render",value:function(){var e=this,t=this.props,n=t.className,r=t.setAttributes,o=t.attributes,a=t.noticeUI,s=t.notices,c=o.mapStyle,l=o.mapDetails,u=o.points,p=o.zoom,h=o.mapCenter,d=o.markerColor,m=o.align,f=this.state,b=f.addPointVisibility,g=f.apiKey,v=f.apiKeyControl,j=f.apiState,O=f.apiRequestOutstanding,w=Object(y.createElement)(y.Fragment,null,Object(y.createElement)(_.BlockControls,null,Object(y.createElement)(_.BlockAlignmentToolbar,{value:m,onChange:this.updateAlignment,controls:["center","wide","full"]}),Object(y.createElement)(k.Toolbar,null,Object(y.createElement)(k.IconButton,{icon:i.a.markerIcon,label:"Add a marker",onClick:function(){return e.setState({addPointVisibility:!0})}}))),Object(y.createElement)(_.InspectorControls,null,Object(y.createElement)(k.PanelBody,{title:Object(z.a)("Map Theme")},Object(y.createElement)(G,{value:c,onChange:function(e){return r({mapStyle:e})},options:i.a.mapStyleOptions}),Object(y.createElement)(k.ToggleControl,{label:Object(z.a)("Show street names"),checked:l,onChange:function(e){return r({mapDetails:e})}})),Object(y.createElement)(_.PanelColorSettings,{title:Object(z.a)("Colors"),initialOpen:!0,colorSettings:[{value:d,onChange:function(e){return r({markerColor:e})},label:"Marker Color"}]}),u.length?Object(y.createElement)(k.PanelBody,{title:Object(z.a)("Markers"),initialOpen:!1},Object(y.createElement)(V,{points:u,onChange:function(e){r({points:e})}})):null,Object(y.createElement)(k.PanelBody,{title:Object(z.a)("Mapbox Access Token"),initialOpen:!1},Object(y.createElement)(k.TextControl,{label:Object(z.a)("Mapbox Access Token"),value:v,onChange:function(t){return e.setState({apiKeyControl:t})}}),Object(y.createElement)(k.ButtonGroup,null,Object(y.createElement)(k.Button,{type:"button",onClick:this.updateAPIKey,isDefault:!0},Object(z.a)("Update Token")),Object(y.createElement)(k.Button,{type:"button",onClick:this.removeAPIKey,isDefault:!0},Object(z.a)("Remove Token")))))),E=Object(y.createElement)(k.Placeholder,{icon:i.a.icon},Object(y.createElement)(k.Spinner,null)),C=Object(y.createElement)(k.Placeholder,{icon:i.a.icon,label:Object(z.a)("Map"),notices:s},Object(y.createElement)(y.Fragment,null,Object(y.createElement)("div",{className:"components-placeholder__instructions"},Object(z.a)("To use the map block, you need an Access Token."),Object(y.createElement)("br",null),Object(y.createElement)(k.ExternalLink,{href:"https://www.mapbox.com"},Object(z.a)("Create an account or log in to Mapbox.")),Object(y.createElement)("br",null),Object(z.a)("Locate and copy the default access token. Then, paste it into the field below.")),Object(y.createElement)(k.TextControl,{className:"wp-block-jetpack-map-components-text-control-api-key",disabled:O,placeholder:Object(z.a)("Paste Token Here"),value:v,onChange:this.updateAPIKeyControl}),Object(y.createElement)(k.Button,{className:"wp-block-jetpack-map-components-text-control-api-key-submit",isLarge:!0,disabled:O||!v||v.length<1,onClick:this.updateAPIKey},Object(z.a)("Set Token")))),x=Object(y.createElement)(y.Fragment,null,w,Object(y.createElement)("div",{className:n},Object(y.createElement)(H.a,{ref:this.mapRef,mapStyle:c,mapDetails:l,points:u,zoom:p,mapCenter:h,markerColor:d,onSetZoom:function(e){r({zoom:e})},admin:!0,apiKey:g,onSetPoints:function(e){return r({points:e})},onMapLoaded:function(){return e.setState({addPointVisibility:!0})},onMarkerClick:function(){return e.setState({addPointVisibility:!1})},onError:this.onError},b&&Object(y.createElement)(B,{onAddPoint:this.addPoint,onClose:function(){return e.setState({addPointVisibility:!1})},apiKey:g,onError:this.onError,tagName:"AddPoint"}))));return Object(y.createElement)(y.Fragment,null,a,j===$&&E,1===j&&C,2===j&&x)}}]),t}(y.Component),Z=Object(k.withNotices)(K),W=function(e){function t(){return a()(this,t),u()(this,h()(t).apply(this,arguments))}return b()(t,e),c()(t,[{key:"render",value:function(){var e=this.props.attributes,t=e.align,n=e.mapStyle,r=e.mapDetails,i=e.points,o=e.zoom,a=e.mapCenter,s=e.markerColor,c=i.map(function(e,t){var n=e.coordinates,r=n.longitude,i="https://www.google.com/maps/search/?api=1&query="+n.latitude+","+r;return Object(y.createElement)("li",{key:t},Object(y.createElement)("a",{href:i},e.title))}),l=t?"align".concat(t):null;return Object(y.createElement)("div",{className:l,"data-map-style":n,"data-map-details":r,"data-points":JSON.stringify(i),"data-zoom":o,"data-map-center":JSON.stringify(a),"data-marker-color":s},i.length>0&&Object(y.createElement)("ul",null,c))}}]),t}(y.Component),J=(n(78),n(126),i.a.name),Y={title:i.a.title,icon:i.a.icon,category:i.a.category,keywords:i.a.keywords,description:i.a.description,attributes:i.a.attributes,supports:i.a.supports,getEditWrapperProps:function(e){var t=e.align;if(-1!==i.a.validAlignments.indexOf(t))return{"data-align":t}},edit:Z,save:W};Object(r.a)(J,Y)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(0),o=n(2),a=n(1),s=n(21),c=n.n(s),l=n(7),u=n.n(l),p=n(11),h=n.n(p),d=n(8),m=n.n(d),f=n(9),b=n.n(f),g=n(4),v=n.n(g),y=n(10),j=n.n(y),O=n(3),k=n.n(O),_=n(24),w=n(14),E=n(17),C=n(6),x=n(5),S=n(31),A=n(12),M=n.n(A),T=n(55),z=n(30),D=function(e){function t(e){var n;return u()(this,t),n=m()(this,b()(t).call(this,e)),k()(v()(n),"pendingRequestAnimationFrame",null),k()(v()(n),"resizeObserver",null),k()(v()(n),"initializeResizeObserver",function(e){n.clearResizeObserver(),n.resizeObserver=new S.a(function(){n.clearPendingRequestAnimationFrame(),n.pendingRequestAnimationFrame=requestAnimationFrame(function(){Object(z.d)(e),e.update()})}),n.resizeObserver.observe(e.el)}),k()(v()(n),"clearPendingRequestAnimationFrame",function(){n.pendingRequestAnimationFrame&&(cancelAnimationFrame(n.pendingRequestAnimationFrame),n.pendingRequestAnimationFrame=null)}),k()(v()(n),"clearResizeObserver",function(){n.resizeObserver&&(n.resizeObserver.disconnect(),n.resizeObserver=null)}),k()(v()(n),"prefersReducedMotion",function(){return"undefined"!=typeof window&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}),k()(v()(n),"buildSwiper",function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return Object(T.a)(n.slideshowRef.current,{autoplay:!(!n.props.autoplay||n.prefersReducedMotion())&&{delay:1e3*n.props.delay,disableOnInteraction:!1},effect:n.props.effect,loop:!0,initialSlide:e,navigation:{nextEl:n.btnNextRef.current,prevEl:n.btnPrevRef.current},pagination:{clickable:!0,el:n.paginationRef.current,type:"bullets"}},{init:z.b,imagesReady:z.d,paginationRender:z.c,transitionEnd:z.a})}),n.slideshowRef=Object(i.createRef)(),n.btnNextRef=Object(i.createRef)(),n.btnPrevRef=Object(i.createRef)(),n.paginationRef=Object(i.createRef)(),n}return j()(t,e),h()(t,[{key:"componentDidMount",value:function(){var e=this,t=this.props.onError;this.buildSwiper().then(function(t){e.swiperInstance=t,e.initializeResizeObserver(t)}).catch(function(){t(Object(a.a)("The Swiper library could not be loaded."))})}},{key:"componentWillUnmount",value:function(){this.clearResizeObserver(),this.clearPendingRequestAnimationFrame()}},{key:"componentDidUpdate",value:function(e){var t,n=this,r=this.props,i=r.align,o=r.autoplay,s=r.delay,c=r.effect,l=r.images,u=r.onError;(i===e.align&&Object(x.isEqual)(l,e.images)||this.swiperInstance&&this.swiperInstance.update(),c!==e.effect||o!==e.autoplay||s!==e.delay||l!==e.images)&&(t=this.swiperIndex?l.length===e.images.length?this.swiperInstance.realIndex:e.images.length:0,this.swiperInstance&&this.swiperInstance.destroy(!0,!0),this.buildSwiper(t).then(function(e){n.swiperInstance=e,n.initializeResizeObserver(e)}).catch(function(){u(Object(a.a)("The Swiper library could not be loaded."))}))}},{key:"render",value:function(){var e=this.props,t=e.autoplay,n=e.className,r=e.delay,a=e.effect,s=e.images;return Object(i.createElement)("div",{className:n,"data-autoplay":t||null,"data-delay":t?r:null,"data-effect":a},Object(i.createElement)("div",{className:"wp-block-jetpack-slideshow_container swiper-container",ref:this.slideshowRef},Object(i.createElement)("ul",{className:"wp-block-jetpack-slideshow_swiper-wrappper swiper-wrapper"},s.map(function(e){var t=e.alt,n=e.caption,r=e.id,a=e.url;return Object(i.createElement)("li",{className:M()("wp-block-jetpack-slideshow_slide","swiper-slide",Object(_.isBlobURL)(a)&&"is-transient"),key:r},Object(i.createElement)("figure",null,Object(i.createElement)("img",{alt:t,className:"wp-block-jetpack-slideshow_image wp-image-".concat(r),"data-id":r,src:a}),Object(_.isBlobURL)(a)&&Object(i.createElement)(o.Spinner,null),n&&Object(i.createElement)(C.RichText.Content,{className:"wp-block-jetpack-slideshow_caption gallery-caption",tagName:"figcaption",value:n})))})),Object(i.createElement)("a",{className:"wp-block-jetpack-slideshow_button-prev swiper-button-prev swiper-button-white",ref:this.btnPrevRef,role:"button"}),Object(i.createElement)("a",{className:"wp-block-jetpack-slideshow_button-next swiper-button-next swiper-button-white",ref:this.btnNextRef,role:"button"}),Object(i.createElement)("a",{"aria-label":"Pause Slideshow",className:"wp-block-jetpack-slideshow_button-pause",role:"button"}),Object(i.createElement)("div",{className:"wp-block-jetpack-slideshow_pagination swiper-pagination swiper-pagination-white",ref:this.paginationRef})))}}]),t}(i.Component);k()(D,"defaultProps",{effect:"slide"});var F=D,N=(n(245),["image"]),P=[{label:Object(a.c)("Slide","Slideshow transition effect"),value:"slide"},{label:Object(a.c)("Fade","Slideshow transition effect"),value:"fade"}],R=function(e){return Object(x.pick)(e,["alt","id","link","url","caption"])},I=function(e){function t(){var e;return u()(this,t),e=m()(this,b()(t).apply(this,arguments)),k()(v()(e),"onSelectImages",function(t){(0,e.props.setAttributes)({images:t.map(function(e){return R(e)})})}),k()(v()(e),"onRemoveImage",function(t){return function(){var n=Object(x.filter)(e.props.attributes.images,function(e,n){return t!==n});e.setState({selectedImage:null}),e.props.setAttributes({images:n})}}),k()(v()(e),"addFiles",function(t){var n=e.props.attributes.images||[],r=e.props,i=r.lockPostSaving,o=r.unlockPostSaving,a=r.noticeOperations,s=r.setAttributes;i("slideshowBlockLock"),Object(C.mediaUpload)({allowedTypes:N,filesList:t,onFileChange:function(e){var t=e.map(function(e){return R(e)});s({images:[].concat(c()(n),c()(t))}),t.every(function(e){return Object(_.isBlobURL)(e.url)})||o("slideshowBlockLock")},onError:a.createErrorNotice})}),k()(v()(e),"uploadFromFiles",function(t){return e.addFiles(t.target.files)}),e.state={selectedImage:null},e}return j()(t,e),h()(t,[{key:"render",value:function(){var e=this.props,t=e.attributes,n=e.className,r=e.isSelected,s=e.noticeOperations,c=e.noticeUI,l=e.setAttributes,u=t.align,p=t.autoplay,h=t.delay,d=t.effect,m=t.images,f="undefined"!=typeof window&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,b=Object(i.createElement)(i.Fragment,null,Object(i.createElement)(C.InspectorControls,null,Object(i.createElement)(o.PanelBody,{title:Object(a.a)("Autoplay")},Object(i.createElement)(o.ToggleControl,{label:Object(a.a)("Autoplay"),help:Object(a.a)("Autoplay between slides"),checked:p,onChange:function(e){l({autoplay:e})}}),p&&Object(i.createElement)(o.RangeControl,{label:Object(a.a)("Delay between transitions (in seconds)"),value:h,onChange:function(e){l({delay:e})},min:1,max:5}),p&&f&&Object(i.createElement)("span",null,Object(a.a)("The Reduce Motion accessibility option is selected, therefore autoplay will be disabled in this browser."))),Object(i.createElement)(o.PanelBody,{title:Object(a.a)("Effects")},Object(i.createElement)(o.SelectControl,{label:Object(a.a)("Transition effect"),value:d,onChange:function(e){l({effect:e})},options:P}))),Object(i.createElement)(C.BlockControls,null,!!m.length&&Object(i.createElement)(o.Toolbar,null,Object(i.createElement)(C.MediaUpload,{onSelect:this.onSelectImages,allowedTypes:N,multiple:!0,gallery:!0,value:m.map(function(e){return e.id}),render:function(e){var t=e.open;return Object(i.createElement)(o.IconButton,{className:"components-toolbar__control",label:Object(a.a)("Edit Slideshow"),icon:"edit",onClick:t})}}))));return 0===m.length?Object(i.createElement)(i.Fragment,null,b,Object(i.createElement)(C.MediaPlaceholder,{icon:"format-gallery",className:n,labels:{title:Object(a.a)("Slideshow"),instructions:Object(a.a)("Drag images, upload new ones or select files from your library.")},onSelect:this.onSelectImages,accept:"image/*",allowedTypes:N,multiple:!0,notices:c,onError:s.createErrorNotice})):Object(i.createElement)(i.Fragment,null,b,c,Object(i.createElement)(F,{align:u,autoplay:p,className:n,delay:h,effect:d,images:m,onError:s.createErrorNotice}),Object(i.createElement)(o.DropZone,{onFilesDrop:this.addFiles}),r&&Object(i.createElement)("div",{className:"wp-block-jetpack-slideshow__add-item"},Object(i.createElement)(o.FormFileUpload,{multiple:!0,isLarge:!0,className:"wp-block-jetpack-slideshow__add-item-button",onChange:this.uploadFromFiles,accept:"image/*",icon:"insert"},Object(a.a)("Upload an image"))))}}]),t}(i.Component),L=Object(w.compose)(Object(E.withDispatch)(function(e){var t=e("core/editor");return{lockPostSaving:t.lockPostSaving,unlockPostSaving:t.unlockPostSaving}}),o.withNotices)(I),B=n(16),q={from:[{type:"block",blocks:["core/gallery","jetpack/tiled-gallery"],transform:function(e){var t=Object(x.filter)(e.images,function(e){var t=e.id,n=e.url;return t&&n});return t.length>0?Object(B.createBlock)("jetpack/slideshow",{images:t.map(function(e){return{id:e.id,url:e.url,alt:e.alt,caption:e.caption}})}):Object(B.createBlock)("jetpack/slideshow")}}],to:[{type:"block",blocks:["core/gallery"],transform:function(e){var t=e.images;return Object(B.createBlock)("core/gallery",{images:t})}},{type:"block",blocks:["jetpack/tiled-gallery"],transform:function(e){var t=e.images;return Object(B.createBlock)("jetpack/tiled-gallery",{images:t},[])}},{type:"block",blocks:["core/image"],transform:function(e){var t=e.images;return t.length>0?t.map(function(e){var t=e.id,n=e.url,r=e.alt,i=e.caption;return Object(B.createBlock)("core/image",{id:t,url:n,alt:r,caption:i})}):Object(B.createBlock)("core/image")}}]},V=Object(i.createElement)(o.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(i.createElement)(o.Path,{d:"M0 0h24v24H0z",fill:"none"}),Object(i.createElement)(o.Path,{d:"M10 8v8l5-4-5-4zm9-5H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14z"})),H={title:Object(a.a)("Slideshow"),category:"jetpack",keywords:[Object(a.a)("image"),Object(a.a)("gallery"),Object(a.a)("slider")],description:Object(a.a)("Add an interactive slideshow."),attributes:{align:{default:"center",type:"string"},autoplay:{type:"boolean",default:!1},delay:{type:"number",default:3},images:{type:"array",default:[],source:"query",selector:".swiper-slide",query:{alt:{source:"attribute",selector:"img",attribute:"alt",default:""},caption:{type:"string",source:"html",selector:"figcaption"},id:{source:"attribute",selector:"img",attribute:"data-id"},url:{source:"attribute",selector:"img",attribute:"src"}}},effect:{type:"string",default:"slide"}},supports:{align:["center","wide","full"],html:!1},icon:V,edit:L,save:function(e){var t=e.attributes,n=t.align,r=t.autoplay,o=t.delay,a=t.effect,s=t.images,c=e.className;return Object(i.createElement)(F,{align:n,autoplay:r,className:c,delay:o,effect:a,images:s})},transforms:q};Object(r.a)("slideshow",H)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(0),o=n(2),a=n(1),s=n(7),c=n.n(s),l=n(11),u=n.n(l),p=n(8),h=n.n(p),d=n(9),m=n.n(d),f=n(4),b=n.n(f),g=n(10),v=n.n(g),y=n(3),j=n.n(y),O=n(6),k=[{height:250,icon:Object(i.createElement)(o.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(i.createElement)(o.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(i.createElement)(o.Path,{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zm-7-2h2V7h-4v2h2z"})),name:Object(a.a)("Rectangle 300x250"),tag:"mrec",width:300,editorPadding:30},{height:90,icon:Object(i.createElement)(o.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(i.createElement)(o.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(i.createElement)(o.Path,{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zm-4-4h-4v-2h2c1.1 0 2-.89 2-2V9c0-1.11-.9-2-2-2H9v2h4v2h-2c-1.1 0-2 .89-2 2v4h6v-2z"})),name:Object(a.a)("Leaderboard 728x90"),tag:"leaderboard",width:728,editorPadding:60},{height:50,icon:Object(i.createElement)(o.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(i.createElement)(o.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(i.createElement)(o.Path,{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zm-4-4v-1.5c0-.83-.67-1.5-1.5-1.5.83 0 1.5-.67 1.5-1.5V9c0-1.11-.9-2-2-2H9v2h4v2h-2v2h2v2H9v2h4c1.1 0 2-.89 2-2z"})),name:Object(a.a)("Mobile Leaderboard 320x50"),tag:"mobile_leaderboard",width:320,editorPadding:100},{height:600,icon:Object(i.createElement)(o.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(i.createElement)(o.Path,{fill:"none",d:"M.04 0h24v24h-24V0z"}),Object(i.createElement)(o.Path,{d:"M19.04 3h-14c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16h-14V5h14v14zm-6-2h2V7h-2v4h-2V7h-2v6h4z"})),name:Object(a.a)("Wide Skyscraper 160x600"),tag:"wideskyscraper",width:160,editorPadding:30}],_=Object(a.a)("Pick an ad format");function w(e){var t=e.value,n=e.onChange;return Object(i.createElement)(o.Dropdown,{position:"bottom right",renderToggle:function(e){var t=e.onToggle,n=e.isOpen;return Object(i.createElement)(o.Toolbar,{controls:[{icon:Object(i.createElement)(o.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Object(i.createElement)(o.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(i.createElement)(o.Path,{d:"M1 9h2V7H1v2zm0 4h2v-2H1v2zm0-8h2V3c-1.1 0-2 .9-2 2zm8 16h2v-2H9v2zm-8-4h2v-2H1v2zm2 4v-2H1c0 1.1.9 2 2 2zM21 3h-8v6h10V5c0-1.1-.9-2-2-2zm0 14h2v-2h-2v2zM9 5h2V3H9v2zM5 21h2v-2H5v2zM5 5h2V3H5v2zm16 16c1.1 0 2-.9 2-2h-2v2zm0-8h2v-2h-2v2zm-8 8h2v-2h-2v2zm4 0h2v-2h-2v2z"})),title:_,onClick:t,extraProps:{"aria-expanded":n},className:"wp-block-jetpack-wordads__format-picker-icon"}]})},renderContent:function(e){var r=e.onClose;return Object(i.createElement)(o.NavigableMenu,{className:"wp-block-jetpack-wordads__format-picker"},k.map(function(e){var a=e.tag,s=e.name,c=e.icon;return Object(i.createElement)(o.MenuItem,{className:a===t?"is-active":void 0,icon:c,isSelected:a===t,key:a,onClick:function(){n(a),r()},role:"menuitemcheckbox"},s)}))}})}n(258);var E=function(e){function t(){var e,n;c()(this,t);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=h()(this,(e=m()(t)).call.apply(e,[this].concat(i))),j()(b()(n),"handleHideMobileChange",function(e){n.props.setAttributes({hideMobile:!!e})}),n}return v()(t,e),u()(t,[{key:"render",value:function(){var e=this.props,t=e.attributes,n=e.setAttributes,r=t.format,s=t.hideMobile,c=k.filter(function(e){return e.tag===r})[0];return Object(i.createElement)(i.Fragment,null,Object(i.createElement)(O.BlockControls,null,Object(i.createElement)(w,{value:r,onChange:function(e){return n({format:e})}})),Object(i.createElement)("div",{className:"wp-block-jetpack-wordads jetpack-wordads-".concat(r)},Object(i.createElement)("div",{className:"jetpack-wordads__ad",style:{width:c.width,height:c.height+c.editorPadding}},Object(i.createElement)(o.Placeholder,{icon:x,label:C}),Object(i.createElement)(o.ToggleControl,{checked:Boolean(s),label:Object(a.a)("Hide ad on mobile views"),onChange:this.handleHideMobileChange}))))}}]),t}(i.Component),C=Object(a.a)("Ad"),x=Object(i.createElement)(o.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(i.createElement)(o.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(i.createElement)(o.Path,{d:"M12,8H4A2,2 0 0,0 2,10V14A2,2 0 0,0 4,16H5V20A1,1 0 0,0 6,21H8A1,1 0 0,0 9,20V16H12L17,20V4L12,8M15,15.6L13,14H4V10H13L15,8.4V15.6M21.5,12C21.5,13.71 20.54,15.26 19,16V8C20.53,8.75 21.5,10.3 21.5,12Z"})),S={title:C,description:Object(i.createElement)(i.Fragment,null,Object(i.createElement)("p",null,Object(a.a)("Earn income by adding high quality ads to your post")),Object(i.createElement)(o.ExternalLink,{href:"https://wordads.co/"},Object(a.a)("Learn all about WordAds"))),icon:x,attributes:{align:{type:"string",default:"center"},format:{type:"string",default:"mrec"},hideMobile:{type:"boolean",default:!1}},category:"jetpack",keywords:[Object(a.a)("ads"),"WordAds",Object(a.a)("Advertisement")],supports:{align:["left","center","right"],alignWide:!1,className:!1,customClassName:!1,html:!1,reusable:!1},edit:E,save:function(){return null}};Object(r.a)("wordads",S)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(0),o=n(2),a=n(1),s=n(20),c=(n(104),n(27)),l=n.n(c),u=n(7),p=n.n(u),h=n(11),d=n.n(h),m=n(8),f=n.n(m),b=n(9),g=n.n(b),v=n(4),y=n.n(v),j=n(10),O=n.n(j),k=n(3),_=n.n(k),w=n(6),E=n(26),C=n.n(E),x=n(12),S=n.n(x),A=n(51),M=n(13),T=n.n(M),z=n(5),D="09:00",F="17:00",N=function(e){function t(){var e,n;p()(this,t);for(var r=arguments.length,s=new Array(r),c=0;c<r;c++)s[c]=arguments[c];return n=f()(this,(e=g()(t)).call.apply(e,[this].concat(s))),_()(y()(n),"renderInterval",function(e,t){var r=n.props.day,s=e.opening,c=e.closing;return Object(i.createElement)(i.Fragment,{key:t},Object(i.createElement)("div",{className:"business-hours__row"},Object(i.createElement)("div",{className:S()(r.name,"business-hours__day")},0===t&&n.renderDayToggle()),Object(i.createElement)("div",{className:S()(r.name,"business-hours__hours")},Object(i.createElement)(o.TextControl,{type:"time",label:Object(a.a)("Opening"),value:s,className:"business-hours__open",placeholder:D,onChange:function(e){n.setHour(e,"opening",t)}}),Object(i.createElement)(o.TextControl,{type:"time",label:Object(a.a)("Closing"),value:c,className:"business-hours__close",placeholder:F,onChange:function(e){n.setHour(e,"closing",t)}})),Object(i.createElement)("div",{className:"business-hours__remove"},r.hours.length>1&&Object(i.createElement)(o.IconButton,{isSmall:!0,isLink:!0,icon:"trash",onClick:function(){n.removeInterval(t)}}))),t===r.hours.length-1&&Object(i.createElement)("div",{className:"business-hours__row business-hours-row__add"},Object(i.createElement)("div",{className:S()(r.name,"business-hours__day")}," "),Object(i.createElement)("div",{className:S()(r.name,"business-hours__hours")},Object(i.createElement)(o.IconButton,{isLink:!0,label:Object(a.a)("Add Hours"),onClick:n.addInterval},Object(a.a)("Add Hours"))),Object(i.createElement)("div",{className:"business-hours__remove"}," ")))}),_()(y()(n),"setHour",function(e,t,r){var i=n.props,o=i.day,a=i.attributes;(0,i.setAttributes)({days:a.days.map(function(n){return n.name===o.name?T()({},n,{hours:n.hours.map(function(n,i){return i===r?T()({},n,_()({},t,e)):n})}):n})})}),_()(y()(n),"toggleClosed",function(e){var t=n.props,r=t.day,i=t.attributes;(0,t.setAttributes)({days:i.days.map(function(t){if(t.name===r.name){var n=e?[{opening:D,closing:F}]:[];return T()({},t,{hours:n})}return t})})}),_()(y()(n),"addInterval",function(){var e=n.props,t=e.day,r=e.attributes,i=e.setAttributes,o=r.days;t.hours.push({opening:"",closing:""}),i({days:o.map(function(e){return e.name===t.name?T()({},e,{hours:t.hours}):e})})}),_()(y()(n),"removeInterval",function(e){var t=n.props,r=t.day,i=t.attributes;(0,t.setAttributes)({days:i.days.map(function(t){return r.name===t.name?T()({},t,{hours:t.hours.filter(function(t,n){return e!==n})}):t})})}),n}return O()(t,e),d()(t,[{key:"isClosed",value:function(){var e=this.props.day;return Object(z.isEmpty)(e.hours)}},{key:"renderDayToggle",value:function(){var e=this.props,t=e.day,n=e.localization;return Object(i.createElement)(i.Fragment,null,Object(i.createElement)("span",{className:"business-hours__day-name"},n.days[t.name]),Object(i.createElement)(o.ToggleControl,{label:this.isClosed()?Object(a.a)("Closed"):Object(a.a)("Open"),checked:!this.isClosed(),onChange:this.toggleClosed}))}},{key:"renderClosed",value:function(){var e=this.props.day;return Object(i.createElement)("div",{className:"business-hours__row business-hours-row__closed"},Object(i.createElement)("div",{className:S()(e.name,"business-hours__day")},this.renderDayToggle()),Object(i.createElement)("div",{className:S()(e.name,"closed","business-hours__hours")}," "),Object(i.createElement)("div",{className:"business-hours__remove"}," "))}},{key:"render",value:function(){var e=this.props.day;return this.isClosed()?this.renderClosed():e.hours.map(this.renderInterval)}}]),t}(i.Component),P=n(23),R=n.n(P),I=n(15),L=function(e){function t(){var e,n;p()(this,t);for(var r=arguments.length,o=new Array(r),s=0;s<r;s++)o[s]=arguments[s];return n=f()(this,(e=g()(t)).call.apply(e,[this].concat(o))),_()(y()(n),"renderInterval",function(e,t){return Object(i.createElement)("dd",{key:t},Object(I.sprintf)(Object(a.c)("From %s to %s","from business opening hour to closing hour"),n.formatTime(e.opening),n.formatTime(e.closing)))}),n}return O()(t,e),d()(t,[{key:"formatTime",value:function(e){var t=this.props.timeFormat,n=e.split(":"),r=R()(n,2),i=r[0],o=r[1],a=new Date;return!(!i||!o)&&(a.setHours(i),a.setMinutes(o),Object(A.date)(t,a))}},{key:"render",value:function(){var e=this,t=this.props,n=t.day,r=t.localization,o=n.hours.filter(function(t){return e.formatTime(t.opening)&&e.formatTime(t.closing)});return Object(i.createElement)(i.Fragment,null,Object(i.createElement)("dt",{className:n.name},r.days[n.name]),Object(z.isEmpty)(o)?Object(i.createElement)("dd",null,Object(a.c)("Closed","business is closed on a full day")):o.map(this.renderInterval))}}]),t}(i.Component),B={days:{Sun:Object(a.a)("Sunday"),Mon:Object(a.a)("Monday"),Tue:Object(a.a)("Tuesday"),Wed:Object(a.a)("Wednesday"),Thu:Object(a.a)("Thursday"),Fri:Object(a.a)("Friday"),Sat:Object(a.a)("Saturday")},startOfWeek:0},q=function(e){function t(){var e,n;p()(this,t);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=f()(this,(e=g()(t)).call.apply(e,[this].concat(i))),_()(y()(n),"state",{localization:B,hasFetched:!1}),n}return O()(t,e),d()(t,[{key:"componentDidMount",value:function(){this.apiFetch()}},{key:"apiFetch",value:function(){var e=this;this.setState({data:B},function(){C()({path:"/wpcom/v2/business-hours/localized-week"}).then(function(t){e.setState({localization:t,hasFetched:!0})},function(){e.setState({localization:B,hasFetched:!0})})})}},{key:"render",value:function(){var e=this,t=this.props,n=t.attributes,r=t.className,s=t.isSelected,c=n.days,u=this.state,p=u.localization,h=u.hasFetched,d=p.startOfWeek,m=c.concat(c.slice(0,d)).slice(d);if(!h)return Object(i.createElement)(o.Placeholder,{icon:Object(i.createElement)(w.BlockIcon,{icon:V}),label:Object(a.a)("Loading business hours")});if(!s){var f=Object(A.__experimentalGetSettings)().formats.time;return Object(i.createElement)("dl",{className:S()(r,"jetpack-business-hours")},m.map(function(e,t){return Object(i.createElement)(L,{key:t,day:e,localization:p,timeFormat:f})}))}return Object(i.createElement)("div",{className:S()(r,"is-edit")},m.map(function(t,n){return Object(i.createElement)(N,l()({key:n,day:t,localization:p},e.props))}))}}]),t}(i.Component),V=Object(s.a)(Object(i.createElement)(o.Path,{d:"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"})),H={title:Object(a.a)("Business Hours"),description:Object(a.a)("Display opening hours for your business."),icon:V,category:"jetpack",supports:{html:!0},keywords:[Object(a.c)("opening hours","block search term"),Object(a.c)("closing time","block search term"),Object(a.c)("schedule","block search term")],attributes:{days:{type:"array",default:[{name:"Sun",hours:[]},{name:"Mon",hours:[{opening:"09:00",closing:"17:00"}]},{name:"Tue",hours:[{opening:"09:00",closing:"17:00"}]},{name:"Wed",hours:[{opening:"09:00",closing:"17:00"}]},{name:"Thu",hours:[{opening:"09:00",closing:"17:00"}]},{name:"Fri",hours:[{opening:"09:00",closing:"17:00"}]},{name:"Sat",hours:[]}]}},edit:function(e){return Object(i.createElement)(q,e)},save:function(){return null}};Object(r.a)("business-hours",H)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(0),o=n(2),a=(n(128),n(7)),s=n.n(a),c=n(11),l=n.n(c),u=n(8),p=n.n(u),h=n(9),d=n.n(h),m=n(4),f=n.n(m),b=n(10),g=n.n(b),v=n(3),y=n.n(v),j=n(6),O=n(14),k=n(17),_=n(96),w=n.n(_),E=n(1),C=new w.a,x=function(e){"A"===e.target.nodeName&&(window.confirm(Object(E.a)("Are you sure you wish to leave this page?"))||e.preventDefault())},S=function(e){var t=e.className,n=e.source,r=void 0===n?"":n;return Object(i.createElement)(i.RawHTML,{className:t,onClick:x},r.length?C.render(r):"")},A="editor",M=function(e){function t(){var e,n;s()(this,t);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=p()(this,(e=d()(t)).call.apply(e,[this].concat(i))),y()(f()(n),"input",null),y()(f()(n),"state",{activePanel:A}),y()(f()(n),"bindInput",function(e){n.input=e}),y()(f()(n),"updateSource",function(e){return n.props.setAttributes({source:e})}),y()(f()(n),"handleKeyDown",function(e){var t=n.props,r=t.attributes,i=t.removeBlock,o=r.source;8===e.keyCode&&""===o&&(i(),e.preventDefault())}),y()(f()(n),"toggleMode",function(e){return function(){return n.setState({activePanel:e})}}),n}return g()(t,e),l()(t,[{key:"componentDidUpdate",value:function(e){e.isSelected&&!this.props.isSelected&&"preview"===this.state.activePanel&&this.toggleMode(A)(),!e.isSelected&&this.props.isSelected&&this.state.activePanel===A&&this.input&&this.input.focus()}},{key:"isEmpty",value:function(){var e=this.props.attributes.source;return!e||""===e.trim()}},{key:"renderToolbarButton",value:function(e,t){var n=this.state.activePanel;return Object(i.createElement)("button",{className:"components-tab-button ".concat(n===e?"is-active":""),onClick:this.toggleMode(e)},Object(i.createElement)("span",null,t))}},{key:"render",value:function(){var e=this.props,t=e.attributes,n=e.className,r=e.isSelected,o=t.source,a=this.state.activePanel;return!r&&this.isEmpty()?Object(i.createElement)("p",{className:"".concat(n,"__placeholder")},Object(E.a)("Write your _Markdown_ **here**…")):Object(i.createElement)("div",{className:n},Object(i.createElement)(j.BlockControls,null,Object(i.createElement)("div",{className:"components-toolbar"},this.renderToolbarButton(A,Object(E.a)("Markdown")),this.renderToolbarButton("preview",Object(E.a)("Preview")))),"preview"!==a&&r?Object(i.createElement)(j.PlainText,{className:"".concat(n,"__editor"),onChange:this.updateSource,onKeyDown:this.handleKeyDown,"aria-label":Object(E.a)("Markdown"),innerRef:this.bindInput,value:o}):Object(i.createElement)(S,{className:"".concat(n,"__preview"),source:o}))}}]),t}(i.Component),T=Object(O.compose)([Object(k.withSelect)(function(e){return{currentBlockId:e("core/editor").getSelectedBlockClientId()}}),Object(k.withDispatch)(function(e,t){var n=t.currentBlockId;return{removeBlock:function(){return e("core/editor").removeBlocks(n)}}})])(M),z={title:Object(E.a)("Markdown"),description:Object(i.createElement)(i.Fragment,null,Object(i.createElement)("p",null,Object(E.a)("Use regular characters and punctuation to style text, links, and lists.")),Object(i.createElement)(o.ExternalLink,{href:"https://en.support.wordpress.com/markdown-quick-reference/"},Object(E.a)("Support reference"))),icon:Object(i.createElement)(o.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 208 128"},Object(i.createElement)(o.Rect,{width:"198",height:"118",x:"5",y:"5",ry:"10",stroke:"currentColor",strokeWidth:"10",fill:"none"}),Object(i.createElement)(o.Path,{d:"M30 98v-68h20l20 25 20-25h20v68h-20v-39l-20 25-20-25v39zM155 98l-30-33h20v-35h20v35h20z"})),category:"jetpack",keywords:[Object(E.a)("formatting"),Object(E.a)("syntax"),Object(E.a)("markup")],attributes:{source:{type:"string"}},supports:{html:!1},edit:T,save:function(e){var t=e.attributes,n=e.className;return Object(i.createElement)(S,{className:n,source:t.source})}};Object(r.a)("markdown",z)},function(e,t,n){"use strict";n.r(t);var r=n(23),i=n.n(r),o=n(13),a=n.n(o),s=n(24),c=n(16),l=n(6),u=n(102),p=n(5),h=n(36),d=n.n(h),m=n(7),f=n.n(m),b=n(11),g=n.n(b),v=n(8),y=n.n(v),j=n(9),O=n.n(j),k=n(4),_=n.n(k),w=n(10),E=n.n(w),C=n(3),x=n.n(C),S=n(0),A=n(26),M=n.n(A),T=n(14),z=n(17),D=n(2),F=n(12),N=n.n(F),P=n(1),R=function(e){var t=e.text;return Object(S.createElement)("div",{className:"wp-block-embed is-loading"},Object(S.createElement)(D.Spinner,null),Object(S.createElement)("p",null,t))},I=Object(T.createHigherOrderComponent)(Object(T.compose)([Object(z.withSelect)(function(e,t){var n=t.attributes,r=n.guid,i=n.src,o=e("core"),a=o.getEmbedPreview,c=o.isRequestingEmbedPreview,l=!!r&&"https://videopress.com/v/".concat(r),u=!!l&&a(l);return{isFetchingPreview:!!l&&c(l),isUploading:Object(s.isBlobURL)(i),preview:u}}),function(e){return function(t){function n(){var e;return f()(this,n),e=y()(this,O()(n).apply(this,arguments)),x()(_()(e),"fallbackToCore",function(){e.props.setAttributes({guid:void 0}),e.setState({fallback:!0})}),x()(_()(e),"setGuid",d()(regeneratorRuntime.mark(function t(){var n,r,i,o,a,s,c;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(n=e.props,r=n.attributes,i=n.setAttributes,o=r.id){t.next=5;break}return i({guid:void 0}),t.abrupt("return");case 5:return t.prev=5,e.setState({isFetchingMedia:!0}),t.next=9,M()({path:"/wp/v2/media/".concat(o)});case 9:if(a=t.sent,e.setState({isFetchingMedia:!1}),s=e.props.attributes.id,o===s){t.next=14;break}return t.abrupt("return");case 14:e.setState({media:a}),(c=Object(p.get)(a,"jetpack_videopress_guid"))?i({guid:c}):e.fallbackToCore(),t.next=23;break;case 19:t.prev=19,t.t0=t.catch(5),e.setState({isFetchingMedia:!1}),e.fallbackToCore();case 23:case"end":return t.stop()}},t,null,[[5,19]])}))),x()(_()(e),"switchToEditing",function(){e.props.setAttributes({id:void 0,guid:void 0,src:void 0})}),x()(_()(e),"onRemovePoster",function(){e.props.setAttributes({poster:""}),e.posterImageButton.current.focus()}),e.state={media:null,isFetchingMedia:!1,fallback:!1},e.posterImageButton=Object(S.createRef)(),e}return E()(n,t),g()(n,[{key:"componentDidMount",value:function(){this.props.attributes.guid||this.setGuid()}},{key:"componentDidUpdate",value:function(e){this.props.attributes.id!==e.attributes.id&&this.setGuid()}},{key:"render",value:function(){var t=this.props,n=t.attributes,r=t.className,i=t.isFetchingPreview,o=t.isSelected,a=t.isUploading,s=t.preview,c=t.setAttributes,u=this.state,p=u.fallback,h=u.isFetchingMedia;if(a)return Object(S.createElement)(R,{text:Object(P.a)("Uploading…")});if(h||i)return Object(S.createElement)(R,{text:Object(P.a)("Embedding…")});if(p||!s)return Object(S.createElement)(e,this.props);var d=s.html,m=s.scripts,f=n.caption;return Object(S.createElement)(S.Fragment,null,Object(S.createElement)(l.BlockControls,null,Object(S.createElement)(D.Toolbar,null,Object(S.createElement)(D.IconButton,{className:"components-icon-button components-toolbar__control",label:Object(P.a)("Edit video"),onClick:this.switchToEditing,icon:"edit"}))),Object(S.createElement)("figure",{className:N()(r,"wp-block-embed","is-type-video")},Object(S.createElement)(D.Disabled,null,Object(S.createElement)("div",{className:"wp-block-embed__wrapper"},Object(S.createElement)(D.SandBox,{html:d,scripts:m}))),(!l.RichText.isEmpty(f)||o)&&Object(S.createElement)(l.RichText,{tagName:"figcaption",placeholder:Object(P.a)("Write caption…"),value:f,onChange:function(e){return c({caption:e})},inlineToolbar:!0})))}}]),n}(S.Component)}]),"withVideoPressEdit"),L=Object(T.createHigherOrderComponent)(function(e){return function(t){var n=t.attributes,r=(n=void 0===n?{}:n).caption,i=n.guid;if(!i)return e(t);var o="https://videopress.com/v/".concat(i);return Object(S.createElement)("figure",{className:"wp-block-embed is-type-video is-provider-videopress"},Object(S.createElement)("div",{className:"wp-block-embed__wrapper"},"\n".concat(o,"\n")),!l.RichText.isEmpty(r)&&Object(S.createElement)(l.RichText.Content,{tagName:"figcaption",value:r}))}},"withVideoPressSave"),B=n(39);Object(u.addFilter)("blocks.registerBlockType","jetpack/videopress",function(e,t){if("core/video"!==t)return e;var n=Object(B.a)("videopress"),r=n.available,o=n.unavailableReason;return r||["missing_plan","missing_module"].includes(o)?a()({},e,{attributes:{autoplay:{type:"boolean"},caption:{type:"string",source:"html",selector:"figcaption"},controls:{type:"boolean",default:!0},guid:{type:"string"},id:{type:"number"},loop:{type:"boolean"},muted:{type:"boolean"},poster:{type:"string"},preload:{type:"string",default:"metadata"},src:{type:"string"}},transforms:a()({},e.transforms,{from:[{type:"files",isMatch:function(e){return Object(p.every)(e,function(e){return 0===e.type.indexOf("video/")})},priority:9,transform:function(e,t){var n=[];return e.forEach(function(e){var r=Object(c.createBlock)("core/video",{src:Object(s.createBlobURL)(e)});Object(l.mediaUpload)({filesList:[e],onFileChange:function(e){var n=i()(e,1)[0],o=n.id,a=n.url;t(r.clientId,{id:o,src:a})},allowedTypes:["video"]}),n.push(r)}),n}}]}),supports:a()({},e.supports,{reusable:!1}),edit:I(e.edit),save:L(e.save),deprecated:[{attributes:e.attributes,save:e.save,isEligible:function(e){return!e.guid}}]}):e})},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(0),o=n(2),a=n(1),s=n(20),c=n(7),l=n.n(c),u=n(11),p=n.n(u),h=n(8),d=n.n(h),m=n(9),f=n.n(m),b=n(4),g=n.n(b),v=n(10),y=n.n(v),j=n(3),O=n.n(j),k=n(6),_=n(17),w=n(12),E=n.n(w),C=n(15),x=n(29),S=[{value:x.b,label:Object(a.a)("Show after threshold")},{value:x.c,label:Object(a.a)("Show before threshold")}],A=function(e){function t(){var e,n;l()(this,t);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=d()(this,(e=f()(t)).call.apply(e,[this].concat(i))),O()(g()(n),"state",{isThresholdValid:!0}),O()(g()(n),"setCriteria",function(e){return n.props.setAttributes({criteria:e})}),O()(g()(n),"setThreshold",function(e){if(/^\d+$/.test(e)&&+e>0)return n.props.setAttributes({threshold:+e}),void n.setState({isThresholdValid:!0});n.setState({isThresholdValid:!1})}),n}return y()(t,e),p()(t,[{key:"getNoticeLabel",value:function(){return this.props.attributes.criteria===x.b?Object(C.sprintf)(Object(a.b)("This block will only appear to people who have visited this page more than once.","This block will only appear to people who have visited this page more than %d times.",+this.props.attributes.threshold),this.props.attributes.threshold):Object(C.sprintf)(Object(a.b)("This block will only appear to people who are visiting this page for the first time.","This block will only appear to people who have visited this page at most %d times.",+this.props.attributes.threshold),this.props.attributes.threshold)}},{key:"render",value:function(){return Object(i.createElement)("div",{className:E()(this.props.className,{"wp-block-jetpack-repeat-visitor--is-unselected":!this.props.isSelected})},Object(i.createElement)(o.Placeholder,{icon:T,label:Object(a.a)("Repeat Visitor"),className:"wp-block-jetpack-repeat-visitor-placeholder"},Object(i.createElement)(o.TextControl,{className:"wp-block-jetpack-repeat-visitor-threshold",defaultValue:this.props.attributes.threshold,help:this.state.isThresholdValid?"":Object(a.a)("Please enter a valid number."),label:Object(a.a)("Visit count threshold"),min:"1",onChange:this.setThreshold,pattern:"[0-9]",type:"number"}),Object(i.createElement)(o.RadioControl,{label:Object(a.a)("Visibility"),selected:this.props.attributes.criteria,options:S,onChange:this.setCriteria})),Object(i.createElement)(o.Notice,{status:"info",isDismissible:!1},this.getNoticeLabel()),Object(i.createElement)(k.InnerBlocks,null))}}]),t}(i.Component),M=Object(_.withSelect)(function(e,t){var n=e("core/editor"),r=n.isBlockSelected,i=n.hasSelectedInnerBlock;return{isSelected:r(t.clientId)||i(t.clientId)}})(A),T=(n(235),Object(s.a)(Object(i.createElement)(o.Path,{d:"M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"}))),z={attributes:{criteria:{type:"string",default:x.b},threshold:{type:"number",default:x.d}},category:"jetpack",description:Object(a.a)("Control block visibility based on how often a visitor has viewed the page."),icon:T,keywords:[Object(a.c)("return","block search term"),Object(a.c)("visitors","block search term"),Object(a.c)("visibility","block search term")],supports:{html:!1},title:Object(a.a)("Repeat Visitor"),edit:M,save:function(e){var t=e.className;return Object(i.createElement)("div",{className:t},Object(i.createElement)(k.InnerBlocks.Content,null))}};Object(r.a)("repeat-visitor",z)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(0),o=n(7),a=n.n(o),s=n(11),c=n.n(s),l=n(8),u=n.n(l),p=n(9),h=n.n(p),d=n(4),m=n.n(d),f=n(10),b=n.n(f),g=n(3),v=n.n(g),y=n(2),j=n(1),O=n(37),k=n(26),_=n.n(k),w=n(15),E=function(e){function t(){var e,n;a()(this,t);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=u()(this,(e=h()(t)).call.apply(e,[this].concat(i))),v()(m()(n),"state",{subscriberCountString:""}),n}return b()(t,e),c()(t,[{key:"componentDidMount",value:function(){this.get_subscriber_count()}},{key:"render",value:function(){var e=this.props,t=e.attributes,n=e.className,r=e.isSelected,o=e.setAttributes,a=t.subscribePlaceholder,s=t.showSubscribersTotal;return r?Object(i.createElement)("div",{className:n,role:"form"},Object(i.createElement)(y.ToggleControl,{label:Object(j.a)("Show total subscribers"),checked:s,onChange:function(){o({showSubscribersTotal:!s})}}),Object(i.createElement)(y.TextControl,{placeholder:a,disabled:!0,onChange:function(){}}),Object(i.createElement)(O.a,this.props)):Object(i.createElement)("div",{className:n,role:"form"},s&&Object(i.createElement)("p",{role:"heading"},this.state.subscriberCountString),Object(i.createElement)(y.TextControl,{placeholder:a}),Object(i.createElement)(O.a,this.props))}},{key:"get_subscriber_count",value:function(){var e=this;_()({path:"/wpcom/v2/subscribers/count"}).then(function(t){t.hasOwnProperty("count")?e.setState({subscriberCountString:Object(w.sprintf)(Object(w._n)("Join %s other subscriber","Join %s other subscribers",t.count),t.count)}):e.setState({subscriberCountString:Object(j.a)("Subscriber count unavailable")})})}},{key:"onChangeSubmit",value:function(e){this.props.setAttributes({submitButtonText:e})}}]),t}(i.Component);var C=n(20),x=n(5),S={title:Object(j.a)("Subscription Form"),description:Object(i.createElement)("p",null,Object(j.a)("A form enabling readers to get notifications when new posts are published from this site.")),icon:Object(C.a)(Object(i.createElement)(y.Path,{d:"M23 16v2h-3v3h-2v-3h-3v-2h3v-3h2v3h3zM20 2v9h-4v3h-3v4H4c-1.1 0-2-.9-2-2V2h18zM8 13v-1H4v1h4zm3-3H4v1h7v-1zm0-2H4v1h7V8zm7-4H4v2h14V4z"})),category:"jetpack",keywords:[Object(j.a)("subscribe"),Object(j.a)("join"),Object(j.a)("follow")],attributes:{subscribePlaceholder:{type:"string",default:Object(j.a)("Email Address")},subscribeButton:{type:"string",default:Object(j.a)("Subscribe")},showSubscribersTotal:{type:"boolean",default:!1},submitButtonText:{type:"string",default:Object(j.a)("Subscribe")},customBackgroundButtonColor:{type:"string"},customTextButtonColor:{type:"string"},submitButtonClasses:{type:"string"}},edit:E,save:function(e){var t=e.attributes,n=t.showSubscribersTotal,r=t.submitButtonClasses,o=t.customBackgroundButtonColor,a=t.customTextButtonColor,s=t.submitButtonText;return Object(i.createElement)(i.RawHTML,null,'[jetpack_subscription_form show_only_email_and_button="true" custom_background_button_color="'.concat(o,'" custom_text_button_color="').concat(a,'" submit_button_text="').concat(s,'" submit_button_classes="').concat(r,'" show_subscribers_total="').concat(n,'" ]'))},deprecated:[{attributes:{subscribeButton:{type:"string",default:Object(j.a)("Subscribe")},showSubscribersTotal:{type:"boolean",default:!1}},migrate:function(e){return{subscribeButton:"",submitButtonText:e.subscribeButton,showSubscribersTotal:e.showSubscribersTotal,customBackgroundButtonColor:"",customTextButtonColor:"",submitButtonClasses:""}},isEligible:function(e){return!!Object(x.isEmpty)(e.subscribeButton)},save:function(e){var t=e.attributes;return Object(i.createElement)(i.RawHTML,null,'[jetpack_subscription_form show_subscribers_total="'.concat(t.showSubscribersTotal,'" show_only_email_and_button="true"]'))}}]};Object(r.a)("subscriptions",S)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(0),o=n(2),a=(n(233),n(7)),s=n.n(a),c=n(11),l=n.n(c),u=n(8),p=n.n(u),h=n(9),d=n.n(h),m=n(10),f=n.n(m),b=n(6),g=n(5),v=n(17),y=n(14),j=n(1);function O(e){return Object(i.createElement)("div",{className:"jp-related-posts-i2__post",id:e.id,"aria-labelledby":e.id+"-heading"},Object(i.createElement)("strong",{id:e.id+"-heading",className:"jp-related-posts-i2__post-link"},Object(j.a)("Preview unavailable: you haven't published enough posts with similar content.")),e.displayThumbnails&&Object(i.createElement)("figure",{className:"jp-related-posts-i2__post-image-placeholder","aria-label":Object(j.a)("Placeholder image")},Object(i.createElement)(o.SVG,{className:"jp-related-posts-i2__post-image-placeholder-square",xmlns:"http://www.w3.org/2000/svg",width:"100%",height:"100%",viewBox:"0 0 350 200"},Object(i.createElement)("title",null,Object(j.a)("Grey square")),Object(i.createElement)(o.Path,{d:"M0 0h350v200H0z",fill:"#8B8B96","fill-opacity":".1"})),Object(i.createElement)(o.SVG,{className:"jp-related-posts-i2__post-image-placeholder-icon",xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(i.createElement)("title",null,Object(j.a)("Icon for image")),Object(i.createElement)(o.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(i.createElement)(o.Path,{d:"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-4.86 8.86l-3 3.87L9 13.14 6 17h12l-3.86-5.14z"}))),e.displayDate&&Object(i.createElement)("div",{className:"jp-related-posts-i2__post-date has-small-font-size"},Object(j.a)("August 3, 2018")),e.displayContext&&Object(i.createElement)("div",{className:"jp-related-posts-i2__post-context has-small-font-size"},Object(j.a)("In “Uncategorized”")))}function k(e){return Object(i.createElement)("div",{className:"jp-related-posts-i2__post",id:e.id,"aria-labelledby":e.id+"-heading"},Object(i.createElement)("a",{className:"jp-related-posts-i2__post-link",id:e.id+"-heading",href:e.post.url,rel:"nofollow noopener noreferrer",target:"_blank"},e.post.title),e.displayThumbnails&&e.post.img&&e.post.img.src&&Object(i.createElement)("a",{className:"jp-related-posts-i2__post-img-link",href:e.post.url},Object(i.createElement)("img",{className:"jp-related-posts-i2__post-img",src:e.post.img.src,alt:e.post.title,rel:"nofollow noopener noreferrer",target:"_blank"})),e.displayDate&&Object(i.createElement)("div",{className:"jp-related-posts-i2__post-date has-small-font-size"},e.post.date),e.displayContext&&Object(i.createElement)("div",{className:"jp-related-posts-i2__post-context has-small-font-size"},e.post.context))}function _(e){var t=0,n=e.posts.length>3;switch(e.posts.length){case 2:case 4:case 5:t=2;break;default:t=3}return Object(i.createElement)("div",null,Object(i.createElement)("div",{className:"jp-related-posts-i2__row","data-post-count":e.posts.slice(0,t).length},e.posts.slice(0,t)),n&&Object(i.createElement)("div",{className:"jp-related-posts-i2__row","data-post-count":e.posts.slice(t).length},e.posts.slice(t)))}var w=function(e){function t(){return s()(this,t),p()(this,d()(t).apply(this,arguments))}return f()(t,e),l()(t,[{key:"render",value:function(){for(var e=this.props,t=e.attributes,n=e.className,r=e.posts,a=e.setAttributes,s=e.instanceId,c=t.displayContext,l=t.displayDate,u=t.displayThumbnails,p=t.postLayout,h=t.postsToShow,d=[{icon:"grid-view",title:Object(j.a)("Grid View"),onClick:function(){return a({postLayout:"grid"})},isActive:"grid"===p},{icon:"list-view",title:Object(j.a)("List View"),onClick:function(){return a({postLayout:"list"})},isActive:"list"===p}],m=[],f=0;f<h;f++)r[f]?m.push(Object(i.createElement)(k,{id:"related-posts-".concat(s,"-post-").concat(f),key:"jp-relatedposts-i2-"+f,post:r[f],displayThumbnails:u,displayDate:l,displayContext:c})):m.push(Object(i.createElement)(O,{id:"related-posts-".concat(s,"-post-").concat(f),key:"related-post-placeholder-"+f,displayThumbnails:u,displayDate:l,displayContext:c}));return Object(i.createElement)(i.Fragment,null,Object(i.createElement)(b.InspectorControls,null,Object(i.createElement)(o.PanelBody,{title:Object(j.a)("Related Posts Settings")},Object(i.createElement)(o.ToggleControl,{label:Object(j.a)("Display thumbnails"),checked:u,onChange:function(e){return a({displayThumbnails:e})}}),Object(i.createElement)(o.ToggleControl,{label:Object(j.a)("Display date"),checked:l,onChange:function(e){return a({displayDate:e})}}),Object(i.createElement)(o.ToggleControl,{label:Object(j.a)("Display context (category or tag)"),checked:c,onChange:function(e){return a({displayContext:e})}}),Object(i.createElement)(o.RangeControl,{label:Object(j.a)("Number of posts"),value:h,onChange:function(e){return a({postsToShow:Math.min(e,6)})},min:1,max:6}))),Object(i.createElement)(b.BlockControls,null,Object(i.createElement)(o.Toolbar,{controls:d})),Object(i.createElement)("div",{className:n,id:"related-posts-".concat(s)},Object(i.createElement)("div",{className:"jp-relatedposts-i2","data-layout":p},Object(i.createElement)(_,{posts:m}))))}}]),t}(i.Component),E=Object(y.compose)(y.withInstanceId,Object(v.withSelect)(function(e){var t=e("core/editor").getCurrentPost;return{posts:Object(g.get)(t(),"jetpack-related-posts",[])}}))(w),C={title:Object(j.a)("Related Posts"),icon:Object(i.createElement)(o.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},Object(i.createElement)(o.G,{stroke:"currentColor",strokeWidth:"2",strokeLinecap:"square"},Object(i.createElement)(o.Path,{d:"M4,4 L4,19 M4,4 L19,4 M4,9 L19,9 M4,14 L19,14 M4,19 L19,19 M9,4 L9,19 M19,4 L19,19"}))),category:"jetpack",keywords:[Object(j.c)("Similar content","block search term"),Object(j.c)("Linked","block search term"),Object(j.c)("Connected","block search term")],attributes:{postLayout:{type:"string",default:"grid"},displayDate:{type:"boolean",default:!0},displayThumbnails:{type:"boolean",default:!1},displayContext:{type:"boolean",default:!1},postsToShow:{type:"number",default:3}},supports:{html:!1,multiple:!1,reusable:!1},transforms:{from:[{type:"shortcode",tag:"jetpack-related-posts"}]},edit:E,save:function(){return null}};Object(r.a)("related-posts",C)},function(e,t,n){"use strict";n.r(t);var r=n(7),i=n.n(r),o=n(11),a=n.n(o),s=n(8),c=n.n(s),l=n(9),u=n.n(l),p=n(10),h=n.n(p),d=n(0),m=n(5),f=n(2),b=n(17),g=n(4),v=n.n(g),y=n(3),j=n.n(y),O=n(1),k=(n(237),function(e){function t(){var e,n;i()(this,t);for(var r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];return n=c()(this,(e=u()(t)).call.apply(e,[this].concat(o))),j()(v()(n),"state",{hasCopied:!1}),j()(v()(n),"onCopy",function(){return n.setState({hasCopied:!0})}),j()(v()(n),"onFinishCopy",function(){return n.setState({hasCopied:!1})}),j()(v()(n),"onFocus",function(e){return e.target.select()}),n}return h()(t,e),a()(t,[{key:"render",value:function(){var e=this.props.link,t=this.state.hasCopied;return e?Object(d.createElement)("div",{className:"jetpack-clipboard-input"},Object(d.createElement)(f.TextControl,{readOnly:!0,onFocus:this.onFocus,value:e}),Object(d.createElement)(f.ClipboardButton,{isDefault:!0,onCopy:this.onCopy,onFinishCopy:this.onFinishCopy,text:e},t?Object(O.a)("Copied!"):Object(O.c)("Copy","verb"))):null}}]),t}(d.Component)),_=n(41),w={render:function(){return Object(d.createElement)(C,null)}},E=function(e){function t(){return i()(this,t),c()(this,u()(t).apply(this,arguments))}return h()(t,e),a()(t,[{key:"render",value:function(){var e=this.props.shortlink;return e?Object(d.createElement)(_.a,null,Object(d.createElement)(f.PanelBody,{title:Object(O.a)("Shortlink"),className:"jetpack-shortlinks__panel"},Object(d.createElement)(k,{link:e}))):null}}]),t}(d.Component),C=Object(b.withSelect)(function(e){var t=e("core/editor").getCurrentPost();return{shortlink:Object(m.get)(t,"jetpack_shortlink","")}})(E),x=n(42);Object(x.a)("shortlinks",w)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(0),o=n(2),a=n(1),s=n(7),c=n.n(s),l=n(8),u=n.n(l),p=n(9),h=n.n(p),d=n(4),m=n.n(d),f=n(10),b=n.n(f),g=n(3),v=n.n(g),y=n(26),j=n.n(y),O=n(12),k=n.n(O),_=n(37),w=n(6),E=0,C=1,x=2,S="processing",A="success",M="error",T=function(e){function t(){var e;return c()(this,t),e=u()(this,h()(t).apply(this,arguments)),v()(m()(e),"componentDidMount",function(){e.apiCall()}),v()(m()(e),"onError",function(t){var n=e.props.noticeOperations;n.removeAllNotices(),n.createErrorNotice(t)}),v()(m()(e),"apiCall",function(){var t={path:"/wpcom/v2/mailchimp",method:"GET"};j()(t).then(function(t){var n=t.connect_url,r="connected"===t.code?C:x;e.setState({connected:r,connectURL:n})},function(t){var n=x;e.setState({connected:n,connectURL:null}),e.onError(t.message)})}),v()(m()(e),"auditionNotification",function(t){e.setState({audition:t}),e.timeout&&clearTimeout(e.timeout),e.timeout=setTimeout(e.clearAudition,3e3)}),v()(m()(e),"clearAudition",function(){e.setState({audition:null})}),v()(m()(e),"updateProcessingText",function(t){(0,e.props.setAttributes)({processingLabel:t}),e.auditionNotification(S)}),v()(m()(e),"updateSuccessText",function(t){(0,e.props.setAttributes)({successLabel:t}),e.auditionNotification(A)}),v()(m()(e),"updateErrorText",function(t){(0,e.props.setAttributes)({errorLabel:t}),e.auditionNotification(M)}),v()(m()(e),"updateEmailPlaceholder",function(t){(0,e.props.setAttributes)({emailPlaceholder:t}),e.clearAudition()}),v()(m()(e),"labelForAuditionType",function(t){var n=e.props.attributes,r=n.processingLabel,i=n.successLabel,o=n.errorLabel;return t===S?r:t===A?i:t===M?o:null}),v()(m()(e),"roleForAuditionType",function(e){return e===M?"alert":"status"}),v()(m()(e),"render",function(){var t=e.props,n=t.attributes,r=t.className,s=t.notices,c=t.noticeUI,l=t.setAttributes,u=e.state,p=u.audition,h=u.connected,d=u.connectURL,m=n.emailPlaceholder,f=n.consentText,b=n.processingLabel,g=n.successLabel,y=n.errorLabel,j="wp-block-jetpack-mailchimp_",O=Object(i.createElement)(o.Placeholder,{icon:D,notices:s},Object(i.createElement)(o.Spinner,null)),S=Object(i.createElement)(o.Placeholder,{icon:D,label:Object(a.a)("Mailchimp"),notices:s},Object(i.createElement)("div",{className:"components-placeholder__instructions"},Object(a.a)("You need to connect your Mailchimp account and choose a list in order to start collecting Email subscribers."),Object(i.createElement)("br",null),Object(i.createElement)("br",null),Object(i.createElement)(o.Button,{isDefault:!0,isLarge:!0,href:d,target:"_blank"},Object(a.a)("Set up Mailchimp form")),Object(i.createElement)("br",null),Object(i.createElement)("br",null),Object(i.createElement)(o.Button,{isLink:!0,onClick:e.apiCall},Object(a.a)("Re-check Connection")))),A=Object(i.createElement)(w.InspectorControls,null,Object(i.createElement)(o.PanelBody,{title:Object(a.a)("Text Elements")},Object(i.createElement)(o.TextControl,{label:Object(a.a)("Email Placeholder"),value:m,onChange:e.updateEmailPlaceholder})),Object(i.createElement)(o.PanelBody,{title:Object(a.a)("Notifications")},Object(i.createElement)(o.TextControl,{label:Object(a.a)("Processing text"),value:b,onChange:e.updateProcessingText}),Object(i.createElement)(o.TextControl,{label:Object(a.a)("Success text"),value:g,onChange:e.updateSuccessText}),Object(i.createElement)(o.TextControl,{label:Object(a.a)("Error text"),value:y,onChange:e.updateErrorText})),Object(i.createElement)(o.PanelBody,{title:Object(a.a)("Mailchimp Connection")},Object(i.createElement)(o.ExternalLink,{href:d},Object(a.a)("Manage Connection")))),M=k()(r,v()({},"".concat(j,"notication-audition"),p)),T=Object(i.createElement)("div",{className:M},Object(i.createElement)(o.TextControl,{"aria-label":m,className:"wp-block-jetpack-mailchimp_text-input",disabled:!0,onChange:function(){return!1},placeholder:m,title:Object(a.a)("You can edit the email placeholder in the sidebar."),type:"email"}),Object(i.createElement)(_.a,e.props),Object(i.createElement)(w.RichText,{tagName:"p",placeholder:Object(a.a)("Write consent text"),value:f,onChange:function(e){return l({consentText:e})},inlineToolbar:!0}),p&&Object(i.createElement)("div",{className:"".concat(j,"notification ").concat(j).concat(p),role:e.roleForAuditionType(p)},e.labelForAuditionType(p)));return Object(i.createElement)(i.Fragment,null,c,h===E&&O,h===x&&S,h===C&&A,h===C&&T)}),e.state={audition:null,connected:E,connectURL:null},e.timeout=null,e}return b()(t,e),t}(i.Component),z=Object(o.withNotices)(T),D=(n(118),Object(i.createElement)(o.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(i.createElement)(o.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(i.createElement)(o.Path,{d:"M22 6c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6zm-2 0l-8 5-8-5h16zm0 12H4V8l8 5 8-5v10z"}))),F={title:Object(a.a)("Mailchimp"),icon:D,description:Object(a.a)("A form enabling readers to join a Mailchimp list."),category:"jetpack",keywords:[Object(a.c)("email","block search term"),Object(a.c)("subscription","block search term"),Object(a.c)("newsletter","block search term")],attributes:{emailPlaceholder:{type:"string",default:Object(a.a)("Enter your email")},submitButtonText:{type:"string",default:Object(a.a)("Join my email list")},customBackgroundButtonColor:{type:"string"},customTextButtonColor:{type:"string"},consentText:{type:"string",default:Object(a.a)("By clicking submit, you agree to share your email address with the site owner and Mailchimp to receive marketing, updates, and other emails from the site owner. Use the unsubscribe link in those emails to opt out at any time.")},processingLabel:{type:"string",default:Object(a.a)("Processing…")},successLabel:{type:"string",default:Object(a.a)("Success! You're on the list.")},errorLabel:{type:"string",default:Object(a.a)("Whoops! There was an error and we couldn't process your subscription. Please reload the page and try again.")}},edit:z,save:function(){return null}};Object(r.a)("mailchimp",F)},function(e,t,n){"use strict";n.r(t);var r=n(19),i=n(0),o=n(2),a=n(7),s=n.n(a),c=n(11),l=n.n(c),u=n(8),p=n.n(u),h=n(9),d=n.n(h),m=n(4),f=n.n(m),b=n(10),g=n.n(b),v=n(3),y=n.n(v),j=n(1),O=n(12),k=n.n(O),_=n(6),w="t1PkR1Vq0mzHueIFBvZSZErgFs9NBmYW",E=Object(j.a)("Search for a term or paste a Giphy URL"),C=function(e){function t(){var e,n;s()(this,t);for(var r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];return n=p()(this,(e=d()(t)).call.apply(e,[this].concat(o))),y()(f()(n),"textControlRef",Object(i.createRef)()),y()(f()(n),"state",{captionFocus:!1,results:null}),y()(f()(n),"onFormSubmit",function(e){e.preventDefault(),n.onSubmit()}),y()(f()(n),"onSubmit",function(){var e=n.props.attributes.searchText;n.parseSearch(e)}),y()(f()(n),"parseSearch",function(e){var t=null;-1!==e.indexOf("//giphy.com/gifs")&&(t=n.splitAndLast(n.splitAndLast(e,"/"),"-")),-1!==e.indexOf("//i.giphy.com")&&(t=n.splitAndLast(e,"/").replace(".gif",""));var r=e.match(/http[s]?:\/\/media.giphy.com\/media\/([A-Za-z0-9\-.]+)\/giphy.gif/);return r&&(t=r[1]),t?n.fetch(n.urlForId(t)):n.fetch(n.urlForSearch(e))}),y()(f()(n),"urlForSearch",function(e){return"https://api.giphy.com/v1/gifs/search?q=".concat(encodeURIComponent(e),"&api_key=").concat(encodeURIComponent(w),"&limit=10")}),y()(f()(n),"urlForId",function(e){return"https://api.giphy.com/v1/gifs/".concat(encodeURIComponent(e),"?api_key=").concat(encodeURIComponent(w))}),y()(f()(n),"splitAndLast",function(e,t){var n=e.split(t);return n[n.length-1]}),y()(f()(n),"fetch",function(e){var t=new XMLHttpRequest;t.open("GET",e),t.onload=function(){if(200===t.status){var e=JSON.parse(t.responseText),r=void 0!==e.data.images?[e.data]:e.data,i=r[0];if(!i.images)return;n.setState({results:r},function(){n.selectGiphy(i)})}},t.send()}),y()(f()(n),"selectGiphy",function(e){var t=n.props.setAttributes,r=Math.floor(e.images.original.height/e.images.original.width*100),i="".concat(r,"%");t({giphyUrl:e.embed_url,paddingTop:i})}),y()(f()(n),"setFocus",function(){n.textControlRef.current.querySelector("input").focus(),n.setState({captionFocus:!1})}),y()(f()(n),"hasSearchText",function(){var e=n.props.attributes.searchText;return e&&e.length>0}),y()(f()(n),"thumbnailClicked",function(e){n.selectGiphy(e)}),n}return g()(t,e),l()(t,[{key:"render",value:function(){var e=this,t=this.props,n=t.attributes,r=t.className,a=t.isSelected,s=t.setAttributes,c=n.align,l=n.caption,u=n.giphyUrl,p=n.searchText,h=n.paddingTop,d=this.state,m=d.captionFocus,f=d.results,b={paddingTop:h},g=k()(r,"align".concat(c)),v=Object(i.createElement)("form",{className:"wp-block-jetpack-gif_input-container",onSubmit:this.onFormSubmit,ref:this.textControlRef},Object(i.createElement)(o.TextControl,{className:"wp-block-jetpack-gif_input",label:E,placeholder:E,onChange:function(e){return s({searchText:e})},value:p}),Object(i.createElement)(o.Button,{isLarge:!0,onClick:this.onSubmit},Object(j.a)("Search")));return Object(i.createElement)("div",{className:g},Object(i.createElement)(_.InspectorControls,null,Object(i.createElement)(o.PanelBody,{className:"components-panel__body-gif-branding"},Object(i.createElement)(o.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 202 22"},Object(i.createElement)(o.Path,{d:"M4.6 5.9H0v10h1.6v-3.1h3c4.8 0 4.8-6.9 0-6.9zm0 5.4h-3v-4h3c2.6.1 2.6 4 0 4zM51.2 12.3c2-.3 2.7-1.7 2.7-3.1 0-1.7-1.2-3.3-3.5-3.3h-4.6v10h1.6v-3.4h2.1l3 3.4h1.9l-.2-.3-3-3.3zM47.4 11V7.4h3c1.3 0 1.9.9 1.9 1.8s-.6 1.8-1.9 1.8h-3zM30.6 13.6L28 5.9h-1.1l-2.5 7.7-2.6-7.7H20l3.7 10H25l1.4-3.5L27.5 9l1.1 3.4 1.3 3.5h1.4l3.5-10h-1.7z"}),Object(i.createElement)(o.Path,{d:"M14.4 5.7c-3 0-5.1 2.2-5.1 5.2 0 2.6 1.6 5.1 5.1 5.1 3.5 0 5.1-2.5 5.1-5.2-.1-2.6-1.7-5.1-5.1-5.1zm-.1 8.9c-2.5 0-3.5-1.9-3.5-3.7 0-2.2 1.2-3.8 3.5-3.8 2.4 0 3.5 2 3.5 3.8.1 2-1 3.7-3.5 3.7zM57.7 11.6h5.5v-1.5h-5.5V7.4h5.7V5.9h-7.3v10h7.3v-1.6h-5.7zM38 14.3v-2.7h5.5v-1.5H38V7.4h5.7V5.9h-7.3v10h7.3v-1.6zM93 10.3l-2.7-4.4h-1.9V6l3.8 5.8v4.1h1.6v-4.1l4-5.8v-.1h-2zM69.3 5.9h-3.8v10h3.8c3.5 0 5.1-2.5 5-5.1-.1-2.5-1.6-4.9-5-4.9zm0 8.4h-2.2V7.4h2.2c2.3 0 3.4 1.7 3.4 3.4s-1 3.5-3.4 3.5zM86.3 10.7c.9-.4 1.4-1.1 1.4-2 0-2-1.5-2.8-3.4-2.8h-4.6v10h4.6c2 0 3.7-.7 3.7-2.8 0-.8-.5-2-1.7-2.4zm-5-3.4h3c1.2 0 1.8.7 1.8 1.4 0 .8-.6 1.3-1.8 1.3h-3V7.3zm3 7.1h-3v-2.9h3c.9 0 2.1.5 2.1 1.6 0 1-1.2 1.3-2.1 1.3zM113.9 13.3h5.3V16c-1.2.9-2.9 1.1-4 1.1-4.2 0-5.6-3.3-5.6-6 0-4.1 2.2-6.1 5.6-6.1 1.4 0 3.2.4 4.8 1.8l3.4-3.4C120.7.6 118.1 0 115.2 0c-7.8 0-11.4 5.6-11.4 11s3.1 10.9 11.4 10.9c4 0 7.6-1.4 8.9-4.1V8.6h-10.2v4.7zM171.9 8.5h-7.4V.6h-5.9v20.8h5.9v-7.8h7.4v7.8h5.9V.6h-5.9zM195.1.6l-4.5 7.1-4.3-7.1h-6.6v.2l7.9 12.3v8.3h5.9v-8.3L201.8.9V.6zM127.4.6h5.9v20.8h-5.9zM147.6.6h-10.1v20.8h5.9v-5.6h4.2c5.6-.1 8.3-3.4 8.3-7.6.1-4.1-2.7-7.6-8.3-7.6zm0 10.2h-4.2V5.6h4.2c1.6 0 2.5 1.2 2.5 2.6 0 1.4-.9 2.6-2.5 2.6z"})))),u?Object(i.createElement)("figure",null,a&&v,a&&f&&f.length>1&&Object(i.createElement)("div",{className:"wp-block-jetpack-gif_thumbnails-container"},f.map(function(t){var n={backgroundImage:"url(".concat(t.images.downsized_still.url,")")};return Object(i.createElement)("button",{className:"wp-block-jetpack-gif_thumbnail-container",key:t.id,onClick:function(){e.thumbnailClicked(t)},style:n})})),Object(i.createElement)("div",{className:"wp-block-jetpack-gif-wrapper",style:b},Object(i.createElement)("div",{className:"wp-block-jetpack-gif_cover",onClick:this.setFocus,onKeyDown:this.setFocus,role:"button",tabIndex:"0"}),Object(i.createElement)("iframe",{src:u,title:p})),(!_.RichText.isEmpty(l)||a)&&!!u&&Object(i.createElement)(_.RichText,{className:"wp-block-jetpack-gif-caption gallery-caption",inlineToolbar:!0,isSelected:m,unstableOnFocus:function(){e.setState({captionFocus:!0})},onChange:function(e){return s({caption:e})},placeholder:Object(j.a)("Write caption…"),tagName:"figcaption",value:l})):Object(i.createElement)(o.Placeholder,{className:"wp-block-jetpack-gif_placeholder",icon:S,label:x},v))}}]),t}(i.Component),x=(n(74),n(116),Object(j.a)("GIF")),S=Object(i.createElement)(o.SVG,{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},Object(i.createElement)(o.Path,{fill:"none",d:"M0 0h24v24H0V0z"}),Object(i.createElement)(o.Path,{d:"M18 13v7H4V6h5.02c.05-.71.22-1.38.48-2H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-5l-2-2zm-1.5 5h-11l2.75-3.53 1.96 2.36 2.75-3.54L16.5 18zm2.8-9.11c.44-.7.7-1.51.7-2.39C20 4.01 17.99 2 15.5 2S11 4.01 11 6.5s2.01 4.5 4.49 4.5c.88 0 1.7-.26 2.39-.7L21 13.42 22.42 12 19.3 8.89zM15.5 9C14.12 9 13 7.88 13 6.5S14.12 4 15.5 4 18 5.12 18 6.5 16.88 9 15.5 9z"})),A={title:x,icon:S,category:"jetpack",keywords:[Object(j.a)("animated"),Object(j.a)("giphy"),Object(j.a)("image")],description:Object(j.a)("Search for and insert an animated image."),attributes:{align:{type:"string",default:"center"},caption:{type:"string"},giphyUrl:{type:"string"},searchText:{type:"string"},paddingTop:{type:"string",default:"56.2%"}},supports:{html:!1,align:!0},edit:C,save:function(){return null}};Object(r.a)("gif",A)},function(e,t,n){"use strict";n.r(t);n(33);var r=n(21),i=n.n(r),o=n(0),a=n(16),s=n(43);Object(a.setCategories)([].concat(i()(Object(a.getCategories)().filter(function(e){return"jetpack"!==e.slug})),[{slug:"jetpack",title:"Jetpack",icon:Object(o.createElement)(s.a,null)}]))},,,,,function(e,t,n){n(277),n(268),n(264),n(262),n(276),n(275),n(265),n(269),n(261),n(273),n(271),n(274),n(263),n(266),n(272),n(260),n(270),e.exports=n(267)}])); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/editor.rtl.css b/plugins/jetpack/_inc/blocks/editor.rtl.css
deleted file mode 100644
index 9e870ec7..00000000
--- a/plugins/jetpack/_inc/blocks/editor.rtl.css
+++ /dev/null
@@ -1 +0,0 @@
-.wp-block-jetpack-business-hours{overflow:hidden}.wp-block-jetpack-business-hours .business-hours__row{display:flex}.wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add,.wp-block-jetpack-business-hours .business-hours__row.business-hours-row__closed{margin-bottom:20px}.wp-block-jetpack-business-hours .business-hours__row .business-hours__day{width:44%;display:flex;align-items:baseline}.wp-block-jetpack-business-hours .business-hours__row .business-hours__day .business-hours__day-name{width:60%;font-weight:700;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.wp-block-jetpack-business-hours .business-hours__row .business-hours__day .components-form-toggle{margin-left:4px}.wp-block-jetpack-business-hours .business-hours__row .business-hours__hours{width:44%;margin:0;display:flex;align-items:center;flex-wrap:wrap}.wp-block-jetpack-business-hours .business-hours__row .business-hours__hours .components-base-control{display:inline-block;margin-bottom:0;width:48%}.wp-block-jetpack-business-hours .business-hours__row .business-hours__hours .components-base-control.business-hours__open{margin-left:4%}.wp-block-jetpack-business-hours .business-hours__row .business-hours__hours .components-base-control .components-base-control__label{margin-bottom:0}.wp-block-jetpack-business-hours .business-hours__remove{align-self:flex-end;margin-bottom:8px;text-align:center;width:10%}.wp-block-jetpack-business-hours .business-hours-row__add button:hover{box-shadow:none!important}.wp-block-jetpack-business-hours .business-hours__remove button{display:block;margin:0 auto}.wp-block-jetpack-business-hours .business-hours-row__add .components-button.is-default:active,.wp-block-jetpack-business-hours .business-hours-row__add .components-button.is-default:focus,.wp-block-jetpack-business-hours .business-hours-row__add .components-button.is-default:hover,.wp-block-jetpack-business-hours .business-hours__remove .components-button.is-default:active,.wp-block-jetpack-business-hours .business-hours__remove .components-button.is-default:focus,.wp-block-jetpack-business-hours .business-hours__remove .components-button.is-default:hover{background:none;box-shadow:none}@media (max-width:1080px){.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row{flex-wrap:wrap}.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__day,.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__remove{display:none}.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row .business-hours__day{width:100%}.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row .business-hours__hours{width:78%}.is-sidebar-opened .wp-block-jetpack-business-hours .business-hours__row .business-hours__remove{width:18%}}@media (max-width:600px){.wp-block-jetpack-business-hours .business-hours__row{flex-wrap:wrap}.wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__day,.wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__remove{display:none}.wp-block-jetpack-business-hours .business-hours__row .business-hours__day{width:100%}.wp-block-jetpack-business-hours .business-hours__row .business-hours__hours{width:78%}.wp-block-jetpack-business-hours .business-hours__row .business-hours__remove{width:18%}}.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row{flex-wrap:wrap}.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__day,.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row.business-hours-row__add .business-hours__remove{display:none}.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row .business-hours__day{width:100%}.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row .business-hours__hours{width:78%}.wp-block-columns .wp-block-jetpack-business-hours .business-hours__row .business-hours__remove{width:18%}.jetpack-contact-form{padding:10px 18px}.jetpack-contact-form.has-intro{padding:0}.jetpack-contact-form .components-placeholder{padding:24px}.jetpack-contact-form .components-placeholder input[type=text]{width:100%;outline-width:0;outline-style:none;line-height:16px}.jetpack-contact-form .components-placeholder .components-placeholder__label svg{margin-left:1ch}.jetpack-contact-form .components-placeholder .components-placeholder__fieldset,.jetpack-contact-form .components-placeholder .help-message{text-align:right}.jetpack-contact-form .components-placeholder .help-message{width:100%;margin:-18px 0 28px}.jetpack-contact-form .components-placeholder .components-base-control{margin-bottom:16px;width:100%}.jetpack-contact-form__intro-message{margin:0 0 16px}.jetpack-contact-form__create{width:100%}.jetpack-field-label{display:flex;flex-direction:row}.jetpack-field-label .components-base-control{margin-top:-1px;margin-bottom:-3px}.jetpack-field-label .components-base-control .components-form-toggle{margin:2px 0 0 8px}.jetpack-field-label .required{color:#dc3232}.jetpack-field-label .components-toggle-control .components-base-control__field{margin-bottom:0}.jetpack-field-label__input{flex-grow:1;min-height:unset;padding:0}.jetpack-field-label__input.jetpack-field-label__input.jetpack-field-label__input{border-color:#fff;border-radius:0;font-weight:600;margin:0 0 2px;padding:0}.jetpack-field-label__input.jetpack-field-label__input.jetpack-field-label__input:focus{border-color:#fff;box-shadow:none}input.components-text-control__input{line-height:16px}.jetpack-field .components-text-control__input.components-text-control__input{width:100%}.jetpack-field .components-text-control__input,.jetpack-field .components-textarea-control__input{color:#72777c;padding:10px 8px}.jetpack-field-checkbox__checkbox.jetpack-field-checkbox__checkbox.jetpack-field-checkbox__checkbox{float:right}.jetpack-field-multiple__list.jetpack-field-multiple__list{list-style-type:none;margin:0}.jetpack-field-multiple__list.jetpack-field-multiple__list:empty{display:none}[data-type="jetpack/field-select"] .jetpack-field-multiple__list.jetpack-field-multiple__list{border:1px solid #8d96a0;border-radius:4px;padding:4px}.jetpack-option{display:flex;align-items:center;margin:0}.jetpack-option__type.jetpack-option__type{margin-top:0}.jetpack-option__input.jetpack-option__input.jetpack-option__input{border-color:#fff;border-radius:0;flex-grow:1}.jetpack-option__input.jetpack-option__input.jetpack-option__input:hover{border-color:#357cb5}.jetpack-option__input.jetpack-option__input.jetpack-option__input:focus{border-color:#e3e5e8;box-shadow:none}.jetpack-option__remove.jetpack-option__remove{padding:6px;vertical-align:bottom}.jetpack-field-multiple__add-option{margin-right:-6px;padding:4px 4px 4px 8px}.jetpack-field-multiple__add-option svg{margin-left:12px}.jetpack-field-checkbox .components-base-control__label{display:flex;align-items:center}.jetpack-field-checkbox .components-base-control__label .jetpack-field-label{flex-grow:1}.jetpack-field-checkbox .components-base-control__label .jetpack-field-label__input{font-size:13px;font-weight:400;padding-right:10px}@media (min-width:481px){.jetpack-contact-form-shortcode-preview{padding:24px}}.jetpack-contact-form-shortcode-preview{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;line-height:1.4em;display:block;position:relative;margin:0 auto;padding:16px;box-sizing:border-box;background:#fff;box-shadow:0 0 0 1px rgba(200,215,225,.5),0 1px 2px #e9eff3}.jetpack-contact-form-shortcode-preview:after{content:".";display:block;height:0;clear:both;visibility:hidden}.jetpack-contact-form-shortcode-preview>div{margin-top:24px}.jetpack-contact-form-shortcode-preview>div:first-child{margin-top:0}.jetpack-contact-form-shortcode-preview label{display:block;font-size:14px;font-weight:600;margin-bottom:5px}.jetpack-contact-form-shortcode-preview input[type=email],.jetpack-contact-form-shortcode-preview input[type=tel],.jetpack-contact-form-shortcode-preview input[type=text],.jetpack-contact-form-shortcode-preview input[type=url]{border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;margin:0;padding:7px 14px;width:100%;color:#2e4453;font-size:16px;line-height:1.5;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-shadow:none}.jetpack-contact-form-shortcode-preview input[type=email]:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=text]:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=url]:-ms-input-placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview input[type=email]::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=text]::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=url]::-ms-input-placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview input[type=email]::placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]::placeholder,.jetpack-contact-form-shortcode-preview input[type=text]::placeholder,.jetpack-contact-form-shortcode-preview input[type=url]::placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview input[type=email]:hover,.jetpack-contact-form-shortcode-preview input[type=tel]:hover,.jetpack-contact-form-shortcode-preview input[type=text]:hover,.jetpack-contact-form-shortcode-preview input[type=url]:hover{border-color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=email]:focus,.jetpack-contact-form-shortcode-preview input[type=tel]:focus,.jetpack-contact-form-shortcode-preview input[type=text]:focus,.jetpack-contact-form-shortcode-preview input[type=url]:focus{border-color:#0087be;outline:none;box-shadow:0 0 0 2px #78dcfa}.jetpack-contact-form-shortcode-preview input[type=email]:focus::-ms-clear,.jetpack-contact-form-shortcode-preview input[type=tel]:focus::-ms-clear,.jetpack-contact-form-shortcode-preview input[type=text]:focus::-ms-clear,.jetpack-contact-form-shortcode-preview input[type=url]:focus::-ms-clear{display:none}.jetpack-contact-form-shortcode-preview input[type=email]:disabled,.jetpack-contact-form-shortcode-preview input[type=tel]:disabled,.jetpack-contact-form-shortcode-preview input[type=text]:disabled,.jetpack-contact-form-shortcode-preview input[type=url]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;-webkit-text-fill-color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=email]:disabled:hover,.jetpack-contact-form-shortcode-preview input[type=tel]:disabled:hover,.jetpack-contact-form-shortcode-preview input[type=text]:disabled:hover,.jetpack-contact-form-shortcode-preview input[type=url]:disabled:hover{cursor:default}.jetpack-contact-form-shortcode-preview input[type=email]:disabled:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]:disabled:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=text]:disabled:-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=url]:disabled:-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=email]:disabled::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]:disabled::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=text]:disabled::-ms-input-placeholder,.jetpack-contact-form-shortcode-preview input[type=url]:disabled::-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=email]:disabled::placeholder,.jetpack-contact-form-shortcode-preview input[type=tel]:disabled::placeholder,.jetpack-contact-form-shortcode-preview input[type=text]:disabled::placeholder,.jetpack-contact-form-shortcode-preview input[type=url]:disabled::placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview textarea{border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;margin:0;padding:7px 14px;height:92px;width:100%;color:#2e4453;font-size:16px;line-height:1.5;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-shadow:none}.jetpack-contact-form-shortcode-preview textarea:-ms-input-placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview textarea::-ms-input-placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview textarea::placeholder{color:#87a6bc}.jetpack-contact-form-shortcode-preview textarea:hover{border-color:#a8bece}.jetpack-contact-form-shortcode-preview textarea:focus{border-color:#0087be;outline:none;box-shadow:0 0 0 2px #78dcfa}.jetpack-contact-form-shortcode-preview textarea:focus::-ms-clear{display:none}.jetpack-contact-form-shortcode-preview textarea:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;-webkit-text-fill-color:#a8bece}.jetpack-contact-form-shortcode-preview textarea:disabled:hover{cursor:default}.jetpack-contact-form-shortcode-preview textarea:disabled:-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview textarea:disabled::-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview textarea:disabled::placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=checkbox]{-webkit-appearance:none;display:inline-block;box-sizing:border-box;margin:2px 0 0;width:16px;height:16px;float:right;outline:0;padding:0;box-shadow:none;background-color:#fff;border:1px solid #c8d7e1;color:#2e4453;font-size:16px;line-height:0;text-align:center;vertical-align:middle;-moz-appearance:none;appearance:none;transition:all .15s ease-in-out;clear:none;cursor:pointer}.jetpack-contact-form-shortcode-preview input[type=checkbox]:checked:before{content:"\f147";font-family:Dashicons;margin:-3px -4px 0 0;float:right;display:inline-block;vertical-align:middle;width:16px;font-size:20px;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;color:#00aadc}.jetpack-contact-form-shortcode-preview input[type=checkbox]:disabled:checked:before{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=checkbox]:hover{border-color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=checkbox]:focus{border-color:#0087be;outline:none;box-shadow:0 0 0 2px #78dcfa}.jetpack-contact-form-shortcode-preview input[type=checkbox]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;opacity:1}.jetpack-contact-form-shortcode-preview input[type=checkbox]:disabled:hover{cursor:default}.jetpack-contact-form-shortcode-preview input[type=checkbox]+span{display:block;font-weight:400;margin-right:24px}.jetpack-contact-form-shortcode-preview input[type=radio]{color:#2e4453;font-size:16px;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-sizing:border-box;-webkit-appearance:none;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:2px 0 0 4px;float:right;outline:0;padding:0;text-align:center;vertical-align:middle;width:16px;min-width:16px;-moz-appearance:none;appearance:none;border-radius:50%;line-height:10px}.jetpack-contact-form-shortcode-preview input[type=radio]:hover{border-color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=radio]:focus{border-color:#0087be;outline:none;box-shadow:0 0 0 2px #78dcfa}.jetpack-contact-form-shortcode-preview input[type=radio]:focus::-ms-clear{display:none}.jetpack-contact-form-shortcode-preview input[type=radio]:checked:before{float:right;display:inline-block;content:"\2022";margin:3px;width:8px;height:8px;text-indent:-9999px;background:#00aadc;vertical-align:middle;border-radius:50%;animation:grow .2s ease-in-out}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;opacity:1;-webkit-text-fill-color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled:hover{cursor:default}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled:-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled::-ms-input-placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled::placeholder{color:#a8bece}.jetpack-contact-form-shortcode-preview input[type=radio]:disabled:checked:before{background:#e9eff3}.jetpack-contact-form-shortcode-preview input[type=radio]+span{display:block;font-weight:400;margin-right:24px}@keyframes grow{0%{transform:scale(.3)}60%{transform:scale(1.15)}to{transform:scale(1)}}.jetpack-contact-form-shortcode-preview select{background:#fff url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE1LjUgNkwxNyA3LjVsLTYuNzUgNi43NUwzLjUgNy41IDUgNmw1LjI1IDUuMjVMMTUuNSA2eiIgZmlsbD0iI0M4RDdFMSIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) no-repeat left 10px center;border-radius:4px;border:solid #c8d7e1;border-width:1px 1px 2px;color:#2e4453;cursor:pointer;display:inline-block;margin:0;outline:0;overflow:hidden;font-size:14px;line-height:21px;font-weight:600;text-overflow:ellipsis;text-decoration:none;vertical-align:top;white-space:nowrap;box-sizing:border-box;padding:2px 14px 2px 32px;-webkit-appearance:none;-moz-appearance:none;appearance:none;font-family:sans-serif}.jetpack-contact-form-shortcode-preview select:hover{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE1LjUgNkwxNyA3LjVsLTYuNzUgNi43NUwzLjUgNy41IDUgNmw1LjI1IDUuMjVMMTUuNSA2eiIgZmlsbD0iI2E4YmVjZSIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+)}.jetpack-contact-form-shortcode-preview select:focus{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE1LjUgNkwxNyA3LjVsLTYuNzUgNi43NUwzLjUgNy41IDUgNmw1LjI1IDUuMjVMMTUuNSA2eiIgZmlsbD0iIzJlNDQ1MyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);border-color:#00aadc;box-shadow:0 0 0 2px #78dcfa;outline:0;-moz-outline:none;-moz-user-focus:ignore}.jetpack-contact-form-shortcode-preview select:disabled,.jetpack-contact-form-shortcode-preview select:hover:disabled{background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE1LjUgNkwxNyA3LjVsLTYuNzUgNi43NUwzLjUgNy41IDUgNmw1LjI1IDUuMjVMMTUuNSA2eiIgZmlsbD0iI2U5ZWZmMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) no-repeat left 10px center}.jetpack-contact-form-shortcode-preview select.is-compact{min-width:0;padding:0 6px 2px 20px;margin:0 4px;background-position:left 5px center;background-size:12px 12px}.jetpack-contact-form-shortcode-preview label+select,.jetpack-contact-form-shortcode-preview label select{display:block;min-width:200px}.jetpack-contact-form-shortcode-preview label+select.is-compact,.jetpack-contact-form-shortcode-preview label select.is-compact{display:inline-block;min-width:0}.jetpack-contact-form-shortcode-preview select::-ms-expand{display:none}.jetpack-contact-form-shortcode-preview select::-ms-value{background:none;color:#2e4453}.jetpack-contact-form-shortcode-preview select:-moz-focusring{color:transparent;text-shadow:0 0 0 #2e4453}.jetpack-contact-form-shortcode-preview input[type=submit]{vertical-align:baseline;background:#fff;border:solid #c8d7e1;border-width:1px 1px 2px;color:#2e4453;cursor:pointer;display:inline-block;margin:24px 0 0;outline:0;overflow:hidden;font-weight:500;text-overflow:ellipsis;text-decoration:none;vertical-align:top;box-sizing:border-box;font-size:14px;line-height:21px;border-radius:4px;padding:7px 14px 9px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.jetpack-contact-form-shortcode-preview input[type=submit]:hover{border-color:#a8bece;color:#2e4453}.jetpack-contact-form-shortcode-preview input[type=submit]:active{border-width:2px 1px 1px}.jetpack-contact-form-shortcode-preview input[type=submit]:visited{color:#2e4453}.jetpack-contact-form-shortcode-preview input[type=submit]:focus{border-color:#00aadc;box-shadow:0 0 0 2px #78dcfa}.help-message{display:flex;font-size:13px;line-height:1.4em;margin-bottom:1em;margin-top:-.5em}.help-message svg{margin-left:5px;min-width:24px}.help-message>span{margin-top:2px}.help-message.help-message-is-error{color:#eb0001}.help-message.help-message-is-error svg{fill:#eb0001}.jetpack-contact-info-block{padding:10px 18px}.jetpack-contact-info-block .editor-plain-text.editor-plain-text:focus{box-shadow:none}.jetpack-contact-info-block .editor-plain-text{flex-grow:1;min-height:unset;padding:0;box-shadow:none;font-family:inherit;font-size:inherit;color:inherit;line-height:inherit;border:none}.wp-block-jetpack-contact-info{margin-bottom:1.5em}.wp-block-jetpack-gif{clear:both;margin:0 0 20px}.wp-block-jetpack-gif figure{margin:0;position:relative;width:100%}.wp-block-jetpack-gif iframe{border:0;right:0;height:100%;position:absolute;top:0;width:100%}.wp-block-jetpack-gif.aligncenter{text-align:center}.wp-block-jetpack-gif.alignleft,.wp-block-jetpack-gif.alignright{min-width:300px}.wp-block-jetpack-gif .wp-block-jetpack-gif-caption{margin-top:.5em;margin-bottom:1em;color:#555d66;text-align:center}.wp-block-jetpack-gif .wp-block-jetpack-gif-wrapper{height:0;margin:0;padding:calc(56.2% + 12px) 0 0;position:relative;width:100%}.wp-block-jetpack-gif figure{transition:padding-top 125ms ease-in-out}.wp-block-jetpack-gif .components-base-control__field{text-align:center}.wp-block-jetpack-gif .wp-block-jetpack-gif_cover{background:none;border:none;height:100%;right:0;margin:0;padding:0;position:absolute;top:0;width:100%;z-index:1}.wp-block-jetpack-gif .wp-block-jetpack-gif_cover:focus{outline:none}.wp-block-jetpack-gif .wp-block-jetpack-gif_input-container{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center;margin:0 auto;max-width:400px;width:100%;z-index:1}.wp-block-jetpack-gif .wp-block-jetpack-gif_input-container .components-base-control__label{height:0;margin:0;text-indent:-9999px}.wp-block-jetpack-gif .wp-block-jetpack-gif_input{flex-grow:1;margin-left:.5em}.wp-block-jetpack-gif .wp-block-jetpack-gif_thumbnails-container{display:flex;margin:-2px -2px 2px 0;overflow-x:auto;width:calc(100% + 4px)}.wp-block-jetpack-gif .wp-block-jetpack-gif_thumbnails-container::-webkit-scrollbar{display:none}.wp-block-jetpack-gif .wp-block-jetpack-gif_thumbnail-container{align-items:center;background-size:cover;background-repeat:no-repeat;background-position:50% 50%;border:none;border-radius:3px;cursor:pointer;display:flex;justify-content:center;margin:2px;padding:0 0 calc(10% - 4px);width:calc(10% - 4px)}.wp-block-jetpack-gif .wp-block-jetpack-gif_thumbnail-container:hover{box-shadow:0 0 0 1px #555d66}.wp-block-jetpack-gif .wp-block-jetpack-gif_thumbnail-container:focus{box-shadow:0 0 0 2px #00a0d2;outline:0}.components-panel__body-gif-branding svg{display:block;margin:0 auto;max-width:200px}.components-panel__body-gif-branding svg path{fill:#ccc}.wp-block-jetpack-mailchimp.is-processing form{display:none}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification{display:none;margin-bottom:1.5em;padding:.75em}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.is-visible{display:block}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.wp-block-jetpack-mailchimp_error{background-color:#eb0001;color:#fff}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.wp-block-jetpack-mailchimp_processing{background-color:rgba(0,0,0,.025)}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.wp-block-jetpack-mailchimp_success{background-color:#008a00;color:#fff}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification{display:block}.wp-block-jetpack-mailchimp .editor-rich-text__inline-toolbar{pointer-events:none}.wp-block-jetpack-mailchimp .editor-rich-text__inline-toolbar .components-toolbar{pointer-events:all}.wp-block-jetpack-mailchimp.wp-block-jetpack-mailchimp_notication-audition>:not(.wp-block-jetpack-mailchimp_notification){display:none}.wp-block-jetpack-mailchimp .jetpack-submit-button,.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_text-input{margin-bottom:1.5rem}.wp-block-jetpack-mailchimp .wp-block-button .wp-block-button__link{margin-top:0}.component__add-point{position:absolute;right:50%;top:50%;width:32px;height:38px;margin-top:-19px;margin-right:-16px;background-image:url(images/oval-3cc7669d571aef4e12f34b349e42d390.svg);background-repeat:no-repeat;text-indent:-9999px}.component__add-point,.component__add-point.components-button:not(:disabled):not([aria-disabled=true]):focus,.component__add-point:active,.component__add-point:focus,.component__add-point__popover .components-button:not(:disabled):not([aria-disabled=true]):focus{box-shadow:none;background-color:transparent}.component__add-point__popover .components-popover__content{padding:.1rem}.component__add-point__popover .components-location-search{margin:.5rem}.component__add-point__close{margin:0;padding:0;border:none;box-shadow:none;float:left}.component__add-point__close path{color:#aaa}.edit-post-settings-sidebar__panel-block .component__locations__panel{margin-bottom:1em}.edit-post-settings-sidebar__panel-block .component__locations__panel:empty{display:none}.edit-post-settings-sidebar__panel-block .component__locations__panel .components-panel__body:first-child{border-top:none}.edit-post-settings-sidebar__panel-block .component__locations__panel .components-panel__body,.edit-post-settings-sidebar__panel-block .component__locations__panel .components-panel__body:first-child,.edit-post-settings-sidebar__panel-block .component__locations__panel .components-panel__body:last-child{max-width:100%;margin:0}.edit-post-settings-sidebar__panel-block .component__locations__panel .components-panel__body button{padding-left:40px}.component__locations__delete-btn{padding:0}.component__locations__delete-btn svg{margin-left:.4em}.wp-block-jetpack-map-marker{width:32px;height:38px;opacity:.9}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button{border:1px solid #d3d3d3;border-radius:100%;width:56px;height:56px;margin:2px;text-indent:-9999px;background-color:#d3d3d3;background-position:50%;background-repeat:no-repeat;background-size:contain;transform:scale(1);transition:transform .2s ease}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button:hover{transform:scale(1.1)}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button.is-selected{border-color:#000}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button.is-theme-default{background-image:url(images/map-theme_default-2ceb449b599dbcbe2a90fead5a5f3824.jpg)}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button.is-theme-black_and_white{background-image:url(images/map-theme_black_and_white-1ead5946ca104d83676d6e3410e1d733.jpg)}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button.is-theme-satellite{background-image:url(images/map-theme_satellite-c74dc129bda9502fb0fb362bb627577e.jpg)}.edit-post-settings-sidebar__panel-block .component__map-theme-picker__button.is-theme-terrain{background-image:url(images/map-theme_terrain-2b6e6c1c8d09cbdc58a4c0653be1a6e3.jpg)}.wp-block-jetpack-map .wp-block-jetpack-map__gm-container{width:100%;overflow:hidden;background:#d3d3d3;min-height:400px;text-align:right}.wp-block-jetpack-map .mapboxgl-popup{max-width:300px}.wp-block-jetpack-map .mapboxgl-popup h3{font-size:1.3125em;font-weight:400;margin-bottom:.5rem}.wp-block-jetpack-map .mapboxgl-popup p{margin-bottom:0}.wp-block-jetpack-map__delete-btn{padding:0}.wp-block-jetpack-map__delete-btn svg{margin-left:.4em}.wp-block-jetpack-map-components-text-control-api-key{margin-left:4px}.wp-block-jetpack-map-components-text-control-api-key.components-base-control .components-base-control__field{margin-bottom:0}.wp-block-jetpack-map-components-text-control-api-key-submit.is-large{height:31px}.wp-block-jetpack-map-components-text-control-api-key-submit:disabled{opacity:1}.wp-block[data-type="jetpack/map"] .components-placeholder__label svg{fill:currentColor;margin-left:1ch}.wp-block-jetpack-markdown__placeholder{opacity:.62;pointer-events:none}.editor-block-list__block .wp-block-jetpack-markdown__preview{min-height:1.8em;line-height:1.8}.editor-block-list__block .wp-block-jetpack-markdown__preview>*{margin-top:32px;margin-bottom:32px}.editor-block-list__block .wp-block-jetpack-markdown__preview h1,.editor-block-list__block .wp-block-jetpack-markdown__preview h2,.editor-block-list__block .wp-block-jetpack-markdown__preview h3{line-height:1.4}.editor-block-list__block .wp-block-jetpack-markdown__preview h1{font-size:2.44em}.editor-block-list__block .wp-block-jetpack-markdown__preview h2{font-size:1.95em}.editor-block-list__block .wp-block-jetpack-markdown__preview h3{font-size:1.56em}.editor-block-list__block .wp-block-jetpack-markdown__preview h4{font-size:1.25em;line-height:1.5}.editor-block-list__block .wp-block-jetpack-markdown__preview h5{font-size:1em}.editor-block-list__block .wp-block-jetpack-markdown__preview h6{font-size:.8em}.editor-block-list__block .wp-block-jetpack-markdown__preview hr{border:none;border-bottom:2px solid #8f98a1;margin:2em auto;max-width:100px}.editor-block-list__block .wp-block-jetpack-markdown__preview p{line-height:1.8}.editor-block-list__block .wp-block-jetpack-markdown__preview blockquote{border-right:4px solid #000;margin-right:0;margin-left:0;padding-right:1em}.editor-block-list__block .wp-block-jetpack-markdown__preview blockquote p{line-height:1.5;margin:1em 0}.editor-block-list__block .wp-block-jetpack-markdown__preview ol,.editor-block-list__block .wp-block-jetpack-markdown__preview ul{margin-right:1.3em;padding-right:1.3em}.editor-block-list__block .wp-block-jetpack-markdown__preview li p{margin:0}.editor-block-list__block .wp-block-jetpack-markdown__preview code,.editor-block-list__block .wp-block-jetpack-markdown__preview pre{color:#23282d;font-family:Menlo,Consolas,monaco,monospace}.editor-block-list__block .wp-block-jetpack-markdown__preview code{background:#f3f4f5;border-radius:2px;font-size:inherit;padding:2px}.editor-block-list__block .wp-block-jetpack-markdown__preview pre{border-radius:4px;border:1px solid #e2e4e7;font-size:14px;padding:.8em 1em}.editor-block-list__block .wp-block-jetpack-markdown__preview pre code{background:transparent;padding:0}.editor-block-list__block .wp-block-jetpack-markdown__preview table{overflow-x:auto;border-collapse:collapse;width:100%}.editor-block-list__block .wp-block-jetpack-markdown__preview tbody,.editor-block-list__block .wp-block-jetpack-markdown__preview tfoot,.editor-block-list__block .wp-block-jetpack-markdown__preview thead{width:100%;min-width:240px}.editor-block-list__block .wp-block-jetpack-markdown__preview td,.editor-block-list__block .wp-block-jetpack-markdown__preview th{padding:.5em;border:1px solid}.wp-block-jetpack-markdown .wp-block-jetpack-markdown__editor{font-family:Menlo,Consolas,monaco,monospace;font-size:14px}.wp-block-jetpack-markdown .wp-block-jetpack-markdown__editor:focus{border-color:transparent;box-shadow:0 0 0 transparent}.jetpack-publicize-message-box{background-color:#edeff0;border-radius:4px}.jetpack-publicize-message-box textarea{width:100%}.jetpack-publicize-character-count{padding-bottom:5px;padding-right:5px}.jetpack-publicize__connections-list{list-style-type:none;margin:13px 0}.publicize-jetpack-connection-container{display:flex}.jetpack-publicize-gutenberg-social-icon{fill:#555d66;margin-left:5px}.jetpack-publicize-gutenberg-social-icon.is-facebook{fill:#39579a}.jetpack-publicize-gutenberg-social-icon.is-twitter{fill:#55acee}.jetpack-publicize-gutenberg-social-icon.is-linkedin{fill:#0976b4}.jetpack-publicize-gutenberg-social-icon.is-tumblr{fill:#35465c}.jetpack-publicize-gutenberg-social-icon.is-google-plus{fill:#df4a32}.jetpack-publicize-connection-label{flex:1;margin-left:5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.jetpack-publicize-connection-label .jetpack-publicize-connection-label-copy,.jetpack-publicize-connection-label .jetpack-publicize-gutenberg-social-icon{display:inline-block;vertical-align:middle}.jetpack-publicize-connection-toggle{margin-top:3px}.jetpack-publicize-notice.components-notice{margin-right:0;margin-left:0;margin-bottom:13px}.jetpack-publicize-notice .components-button+.components-button{margin-top:5px}.jetpack-publicize-message-note{display:inline-block;margin-bottom:4px;margin-top:13px}.jetpack-publicize-add-connection-wrapper{margin:15px 0}.jetpack-publicize-add-connection-container{display:flex}.jetpack-publicize-add-connection-container a{cursor:pointer}.jetpack-publicize-add-connection-container span{vertical-align:middle}.jetpack-publicize__connections-list .components-notice{margin:5px 0 10px}.edit-post-more-menu__content .components-icon-button .jetpack-logo,.edit-post-pinned-plugins .components-icon-button .jetpack-logo{width:20px;height:20px}.edit-post-more-menu__content .components-icon-button .jetpack-logo{margin-left:4px}.edit-post-pinned-plugins .components-icon-button.is-toggled .jetpack-logo,.edit-post-pinned-plugins .components-icon-button.is-toggled .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button.is-toggled .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button.is-toggled:hover .jetpack-logo,.edit-post-pinned-plugins .components-icon-button.is-toggled:hover .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button.is-toggled:hover .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button:hover .jetpack-logo,.edit-post-pinned-plugins .components-icon-button:hover .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button:hover .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button:not(.is-toggled) .jetpack-logo,.edit-post-pinned-plugins .components-icon-button:not(.is-toggled) .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button:not(.is-toggled) .jetpack-logo__icon-triangle{stroke:none!important}.edit-post-pinned-plugins .components-icon-button.is-toggled .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button.is-toggled:hover .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button:hover .jetpack-logo__icon-circle,.edit-post-pinned-plugins .components-icon-button:not(.is-toggled) .jetpack-logo__icon-circle{fill:#00be28!important}.edit-post-pinned-plugins .components-icon-button.is-toggled .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button.is-toggled:hover .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button:hover .jetpack-logo__icon-triangle,.edit-post-pinned-plugins .components-icon-button:not(.is-toggled) .jetpack-logo__icon-triangle{fill:#fff!important}.jp-related-posts-i2__row{display:flex;margin-top:1.5rem}.jp-related-posts-i2__row:first-child{margin-top:0}.jp-related-posts-i2__row[data-post-count="3"] .jp-related-posts-i2__post{max-width:calc(33% - 20px)}.jp-related-posts-i2__row[data-post-count="1"] .jp-related-posts-i2__post,.jp-related-posts-i2__row[data-post-count="2"] .jp-related-posts-i2__post{max-width:calc(50% - 20px)}.jp-related-posts-i2__post{flex-grow:1;flex-basis:0;margin:0 10px;display:flex;flex-direction:column}.jp-related-posts-i2__post-context,.jp-related-posts-i2__post-date,.jp-related-posts-i2__post-heading,.jp-related-posts-i2__post-img-link{flex-direction:row}.jp-related-posts-i2__post-image-placeholder,.jp-related-posts-i2__post-img-link{order:-1}.jp-related-posts-i2__post-heading{margin:.5rem 0;font-size:1rem;line-height:1.2em}.jp-related-posts-i2__post-link{display:block;width:100%;line-height:1.2em;margin:.2em 0}.jp-related-posts-i2__post-img{width:100%}.jp-related-posts-i2__post-image-placeholder{display:block;position:relative;margin:0 auto;max-width:350px}.jp-related-posts-i2__post-image-placeholder-icon{position:absolute;top:calc(50% - 12px);right:calc(50% - 12px)}.jp-relatedposts-i2[data-layout=list] .jp-related-posts-i2__row{margin-top:0;display:block}.jp-relatedposts-i2[data-layout=list] .jp-related-posts-i2__post{max-width:none;margin:1rem 0 0}.jp-relatedposts-i2[data-layout=list] .jp-related-posts-i2__post-image-placeholder{max-width:350px;margin:0}.jp-relatedposts-i2[data-layout=list] .jp-related-posts-i2__post-img-link{margin-top:1rem}.wp-block-jetpack-repeat-visitor .components-notice{margin:1em 0 0}.wp-block-jetpack-repeat-visitor .components-radio-control__option{text-align:right}.wp-block-jetpack-repeat-visitor .components-notice__content{margin:.5em 0;font-size:.8em}.wp-block-jetpack-repeat-visitor .components-notice__content .components-base-control{display:inline-block;max-width:8em;vertical-align:middle}.wp-block-jetpack-repeat-visitor .components-notice__content .components-base-control .components-base-control__field{margin-bottom:0}.wp-block-jetpack-repeat-visitor-placeholder{min-height:inherit}.wp-block-jetpack-repeat-visitor-placeholder .components-placeholder__label svg{margin-left:.5ch}.wp-block-jetpack-repeat-visitor-placeholder .components-placeholder__fieldset{flex-wrap:nowrap}.wp-block-jetpack-repeat-visitor-placeholder .components-placeholder__fieldset .components-base-control{flex-basis:100%}.wp-block-jetpack-repeat-visitor-placeholder .components-base-control__help{color:#eb0001;font-size:13px}.wp-block-jetpack-repeat-visitor--is-unselected .wp-block-jetpack-repeat-visitor-placeholder{display:none}.wp-block-jetpack-repeat-visitor-threshold{margin-left:20px}.wp-block-jetpack-repeat-visitor-threshold .components-text-control__input{width:5em;text-align:center}.jetpack-clipboard-input{display:flex}.jetpack-clipboard-input .components-clipboard-button{margin:2px 6px 0 0}.wp-block-jetpack-simple-payments .simple-payments__help-message{display:flex;font-size:13px;line-height:1.4em;margin-bottom:1em;margin-top:-.5em}.wp-block-jetpack-simple-payments .simple-payments__help-message svg{margin-left:5px;min-width:24px}.wp-block-jetpack-simple-payments .simple-payments__help-message>span{margin-top:2px}.wp-block-jetpack-simple-payments .simple-payments__help-message.simple-payments__help-message-is-error{color:#eb0001}.wp-block-jetpack-simple-payments .simple-payments__help-message.simple-payments__help-message-is-error svg{fill:#eb0001}.simple-payments__loading{animation:simple-payments-loading 1.6s ease-in-out infinite}@keyframes simple-payments-loading{0%{opacity:.5}50%{opacity:.7}to{opacity:.5}}.jetpack-simple-payments-wrapper{margin-bottom:1.5em}body .jetpack-simple-payments-wrapper .jetpack-simple-payments-details p{margin:0 0 1.5em;padding:0}.jetpack-simple-payments-product{display:flex;flex-direction:column}.jetpack-simple-payments-product-image{flex:0 0 30%;margin-bottom:1.5em}.jetpack-simple-payments-image{box-sizing:border-box;min-width:70px;padding-top:100%;position:relative}.jetpack-simple-payments-image img{border:0;border-radius:0;height:auto;right:50%;margin:0;max-height:100%;max-width:100%;padding:0;position:absolute;top:50%;transform:translate(50%,-50%);width:auto}.jetpack-simple-payments-price p,.jetpack-simple-payments-title p{font-weight:700}.jetpack-simple-payments-purchase-box{align-items:flex-start;display:flex}.jetpack-simple-payments-items{flex:0 0 auto;margin-left:10px}input[type=number].jetpack-simple-payments-items-number{background:#fff;font-size:16px;line-height:1;max-width:60px;padding:4px 8px}@media screen and (min-width:400px){.jetpack-simple-payments-product{flex-direction:row}.jetpack-simple-payments-product-image+.jetpack-simple-payments-details{flex-basis:70%;padding-right:1em}}.wp-block-jetpack-simple-payments{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;display:grid;grid-template-columns:200px auto;grid-column-gap:10px}.wp-block-jetpack-simple-payments .simple-payments__field .components-base-control__label{display:none}.wp-block-jetpack-simple-payments .simple-payments__field .components-base-control__field{margin-bottom:1em}.wp-block-jetpack-simple-payments .simple-payments__field textarea{display:block}.wp-block-jetpack-simple-payments .simple-payments__field-has-error .components-text-control__input,.wp-block-jetpack-simple-payments .simple-payments__field-has-error .components-textarea-control__input{border-color:#eb0001}.wp-block-jetpack-simple-payments .simple-payments__price-container{display:flex;flex-wrap:wrap}.wp-block-jetpack-simple-payments .simple-payments__price-container .simple-payments__field{margin-left:10px}.wp-block-jetpack-simple-payments .simple-payments__price-container .simple-payments__help-message{flex:1 1 100%;margin-top:0}.wp-block-jetpack-simple-payments .simple-payments__field-price .components-text-control__input{max-width:90px}.wp-block-jetpack-simple-payments .simple-payments__field-email .components-text-control__input{max-width:400px}.wp-block-jetpack-simple-payments .simple-payments__field-multiple .components-toggle-control__label{line-height:1.4em}.wp-block-jetpack-simple-payments .simple-payments__field-content .components-textarea-control__input{min-height:32px}.wp-block-jetpack-slideshow{margin-bottom:1.5em;position:relative}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container{width:100%;overflow:hidden;opacity:0}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container.wp-swiper-initialized{opacity:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container .wp-block-jetpack-slideshow_slide,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container .wp-block-jetpack-slideshow_swiper-wrappper{padding:0;margin:0;line-height:normal}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_slide{background:rgba(0,0,0,.1);display:flex;height:100%;width:100%}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_slide figure{align-items:center;display:flex;height:100%;justify-content:center;margin:0;position:relative;width:100%}.wp-block-jetpack-slideshow .swiper-container-fade .wp-block-jetpack-slideshow_slide{background:#f6f6f6}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_image{display:block;height:auto;max-height:100%;max-width:100%;width:auto;-o-object-fit:contain;object-fit:contain}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev{background-color:rgba(0,0,0,.5);background-position:50%;background-repeat:no-repeat;background-size:24px;border:0;border-radius:4px;box-shadow:none;height:48px;margin:-24px 0 0;padding:0;transition:background-color .25s;width:48px}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next:hover,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause:hover,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev:hover{background-color:rgba(0,0,0,.75)}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev:focus{outline:thin dotted #fff;outline-offset:-4px}.wp-block-jetpack-slideshow .swiper-button-next.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .swiper-button-prev.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .wp-block-jetpack-slideshow_button-prev,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M5.88 4.12L13.76 12l-7.88 7.88L8 22l10-10L8 2z' fill='%23fff'/%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3C/svg%3E")}.wp-block-jetpack-slideshow .swiper-button-prev.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .swiper-button-next.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .wp-block-jetpack-slideshow_button-next,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M18 4.12L10.12 12 18 19.88 15.88 22l-10-10 10-10z' fill='%23fff'/%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3C/svg%3E")}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M6 19h4V5H6v14zm8-14v14h4V5h-4z' fill='%23fff'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");display:none;margin-top:0;position:absolute;left:10px;top:10px;z-index:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_autoplay-paused .wp-block-jetpack-slideshow_button-pause{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M8 5v14l11-7z' fill='%23fff'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E")}.wp-block-jetpack-slideshow[data-autoplay=true] .wp-block-jetpack-slideshow_button-pause{display:block}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_caption.gallery-caption{background-color:rgba(0,0,0,.5);box-sizing:border-box;bottom:0;color:#fff;cursor:text;right:0;margin:0!important;padding:.75em;position:absolute;left:0;text-align:initial;z-index:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_caption.gallery-caption a{color:inherit}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets{bottom:0;line-height:24px;padding:10px 0 2px;position:relative}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet{background:currentColor;color:currentColor;height:16px;opacity:.5;transform:scale(.75);transition:opacity .25s,transform .25s;vertical-align:top;width:16px}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet:hover{opacity:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet:focus{outline:thin dotted;outline-offset:0}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet-active{background-color:currentColor;opacity:1;transform:scale(1)}.wp-block-jetpack-slideshow__add-item{margin-top:4px;width:100%}.wp-block-jetpack-slideshow__add-item .components-button.wp-block-jetpack-slideshow__add-item-button,.wp-block-jetpack-slideshow__add-item .components-form-file-upload{width:100%;height:100%}.wp-block-jetpack-slideshow__add-item .components-button.wp-block-jetpack-slideshow__add-item-button{display:flex;flex-direction:column;justify-content:center;box-shadow:none;border:none;border-radius:0;min-height:100px}.wp-block-jetpack-slideshow__add-item .components-button.wp-block-jetpack-slideshow__add-item-button .dashicon{margin-top:10px}.wp-block-jetpack-slideshow__add-item .components-button.wp-block-jetpack-slideshow__add-item-button:focus,.wp-block-jetpack-slideshow__add-item .components-button.wp-block-jetpack-slideshow__add-item-button:hover{border:1px solid #555d66}.wp-block-jetpack-slideshow_slide .components-spinner{position:absolute;top:50%;right:50%;margin-top:-9px;margin-right:-9px}.wp-block-jetpack-slideshow_slide.is-transient img{opacity:.3}.wp-block-jetpack-tiled-gallery{margin:0 auto 1.5em}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__item img{border-radius:50%}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row{flex-grow:1;width:100%}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-1 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-1 .tiled-gallery__col{width:100%}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-2 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-2 .tiled-gallery__col{width:calc((100% - 4px)/2)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-3 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-3 .tiled-gallery__col{width:calc((100% - 8px)/3)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-4 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-4 .tiled-gallery__col{width:calc((100% - 12px)/4)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-5 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-5 .tiled-gallery__col{width:calc((100% - 16px)/5)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-6 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-6 .tiled-gallery__col{width:calc((100% - 20px)/6)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-7 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-7 .tiled-gallery__col{width:calc((100% - 24px)/7)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-8 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-8 .tiled-gallery__col{width:calc((100% - 28px)/8)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-9 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-9 .tiled-gallery__col{width:calc((100% - 32px)/9)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-10 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-10 .tiled-gallery__col{width:calc((100% - 36px)/10)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-11 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-11 .tiled-gallery__col{width:calc((100% - 40px)/11)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-12 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-12 .tiled-gallery__col{width:calc((100% - 44px)/12)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-13 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-13 .tiled-gallery__col{width:calc((100% - 48px)/13)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-14 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-14 .tiled-gallery__col{width:calc((100% - 52px)/14)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-15 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-15 .tiled-gallery__col{width:calc((100% - 56px)/15)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-16 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-16 .tiled-gallery__col{width:calc((100% - 60px)/16)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-17 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-17 .tiled-gallery__col{width:calc((100% - 64px)/17)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-18 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-18 .tiled-gallery__col{width:calc((100% - 68px)/18)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-19 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-19 .tiled-gallery__col{width:calc((100% - 72px)/19)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-20 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-20 .tiled-gallery__col{width:calc((100% - 76px)/20)}.wp-block-jetpack-tiled-gallery.is-style-columns .tiled-gallery__item,.wp-block-jetpack-tiled-gallery.is-style-rectangular .tiled-gallery__item{display:flex}.tiled-gallery__gallery{width:100%;display:flex;padding:0;flex-wrap:wrap}.tiled-gallery__row{width:100%;display:flex;flex-direction:row;justify-content:center;margin:0}.tiled-gallery__row+.tiled-gallery__row{margin-top:4px}.tiled-gallery__col{display:flex;flex-direction:column;justify-content:center;margin:0}.tiled-gallery__col+.tiled-gallery__col{margin-right:4px}.tiled-gallery__item{justify-content:center;margin:0;overflow:hidden;padding:0;position:relative}.tiled-gallery__item.filter__black-and-white{filter:grayscale(100%)}.tiled-gallery__item.filter__sepia{filter:sepia(100%)}.tiled-gallery__item.filter__1977{position:relative;filter:contrast(1.1) brightness(1.1) saturate(1.3)}.tiled-gallery__item.filter__1977 img{width:100%;z-index:1}.tiled-gallery__item.filter__1977:before{z-index:2}.tiled-gallery__item.filter__1977:after,.tiled-gallery__item.filter__1977:before{content:"";display:block;height:100%;width:100%;top:0;right:0;position:absolute;pointer-events:none}.tiled-gallery__item.filter__1977:after{z-index:3;background:rgba(243,106,188,.3);mix-blend-mode:screen}.tiled-gallery__item.filter__clarendon{position:relative;filter:contrast(1.2) saturate(1.35)}.tiled-gallery__item.filter__clarendon img{width:100%;z-index:1}.tiled-gallery__item.filter__clarendon:before{z-index:2}.tiled-gallery__item.filter__clarendon:after,.tiled-gallery__item.filter__clarendon:before{content:"";display:block;height:100%;width:100%;top:0;right:0;position:absolute;pointer-events:none}.tiled-gallery__item.filter__clarendon:after{z-index:3}.tiled-gallery__item.filter__clarendon:before{background:rgba(127,187,227,.2);mix-blend-mode:overlay}.tiled-gallery__item.filter__gingham{position:relative;filter:brightness(1.05) hue-rotate(-10deg)}.tiled-gallery__item.filter__gingham img{width:100%;z-index:1}.tiled-gallery__item.filter__gingham:before{z-index:2}.tiled-gallery__item.filter__gingham:after,.tiled-gallery__item.filter__gingham:before{content:"";display:block;height:100%;width:100%;top:0;right:0;position:absolute;pointer-events:none}.tiled-gallery__item.filter__gingham:after{z-index:3;background:#e6e6fa;mix-blend-mode:soft-light}.tiled-gallery__item+.tiled-gallery__item{margin-top:4px}.tiled-gallery__item>img{background-color:rgba(0,0,0,.1)}.tiled-gallery__item>a,.tiled-gallery__item>a>img,.tiled-gallery__item>img{display:block;height:auto;margin:0;max-width:100%;-o-object-fit:cover;object-fit:cover;-o-object-position:center;object-position:center;padding:0;width:100%}@keyframes tiled-gallery-img-placeholder{0%{background-color:#f6f6f6}50%{background-color:hsla(0,0%,96.5%,.5)}to{background-color:#f6f6f6}}.wp-block-jetpack-tiled-gallery{padding-right:4px;padding-left:4px}.wp-block-jetpack-tiled-gallery .tiled-gallery__item>img:focus{outline:none}.wp-block-jetpack-tiled-gallery .tiled-gallery__item>img{animation:tiled-gallery-img-placeholder 1.6s ease-in-out infinite}.wp-block-jetpack-tiled-gallery .tiled-gallery__item.is-selected{outline:4px solid #0085ba;filter:none}.wp-block-jetpack-tiled-gallery .tiled-gallery__item.is-selected:after,.wp-block-jetpack-tiled-gallery .tiled-gallery__item.is-selected:before{content:none}.wp-block-jetpack-tiled-gallery .tiled-gallery__item.is-transient img{opacity:.3}.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item{margin-top:4px;width:100%}.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-button.tiled-gallery__add-item-button,.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-form-file-upload{width:100%;height:100%}.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-button.tiled-gallery__add-item-button{display:flex;flex-direction:column;justify-content:center;box-shadow:none;border:none;border-radius:0;min-height:100px}.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-button.tiled-gallery__add-item-button .dashicon{margin-top:10px}.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-button.tiled-gallery__add-item-button:focus,.wp-block-jetpack-tiled-gallery .tiled-gallery__add-item .components-button.tiled-gallery__add-item-button:hover{border:1px solid #555d66}.wp-block-jetpack-tiled-gallery .tiled-gallery__item__inline-menu{background-color:#0085ba;display:inline-flex;padding:0 2px 2px 0;position:absolute;left:0;top:0}.wp-block-jetpack-tiled-gallery .tiled-gallery__item__inline-menu .components-button,.wp-block-jetpack-tiled-gallery .tiled-gallery__item__inline-menu .components-button:focus,.wp-block-jetpack-tiled-gallery .tiled-gallery__item__inline-menu .components-button:hover{color:#fff}.wp-block-jetpack-tiled-gallery .tiled-gallery__item__remove{padding:0}.wp-block-jetpack-tiled-gallery .tiled-gallery__item .components-spinner{position:absolute;top:50%;right:50%;transform:translate(50%,-50%)}.editor-block-preview__content .wp-block-jetpack-tiled-gallery .editor-media-placeholder{display:none}.wp-block-jetpack-tiled-gallery .tiled-gallery__media-placeholder-icon{height:20px;margin-left:1ch;width:20px}.tiled-gallery__filter-picker-menu{padding:7px}.tiled-gallery__filter-picker-menu .components-menu-item__button+.components-menu-item__button{margin-top:2px}.tiled-gallery__filter-picker-menu .components-menu-item__button.is-active{color:#191e23;box-shadow:0 0 0 2px #555d66!important}.wp-block-jetpack-wordads{background:#fff}[data-type="jetpack/wordads"][data-align=center] .jetpack-wordads__ad{margin:0 auto}.jetpack-wordads__ad{display:flex;overflow:hidden;flex-direction:column;max-width:100%}.jetpack-wordads__ad .components-placeholder{flex-grow:2}.jetpack-wordads__ad .components-toggle-control__label{line-height:1.4em}.jetpack-wordads__ad .components-base-control__field{padding:7px}.jetpack-wordads-leaderboard .components-placeholder{min-height:90px}.jetpack-wordads-mobile_leaderboard .components-placeholder{min-height:72px}.wp-block-jetpack-wordads__format-picker{padding:7px}.wp-block-jetpack-wordads__format-picker .components-menu-item__button+.components-menu-item__button{margin-top:2px}.wp-block-jetpack-wordads__format-picker .components-menu-item__button.is-active{color:#191e23;box-shadow:0 0 0 2px #555d66!important} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/gif/view.css b/plugins/jetpack/_inc/blocks/gif/view.css
deleted file mode 100644
index 51e6ded8..00000000
--- a/plugins/jetpack/_inc/blocks/gif/view.css
+++ /dev/null
@@ -1 +0,0 @@
-.wp-block-jetpack-gif{clear:both;margin:0 0 20px}.wp-block-jetpack-gif figure{margin:0;position:relative;width:100%}.wp-block-jetpack-gif iframe{border:0;left:0;height:100%;position:absolute;top:0;width:100%}.wp-block-jetpack-gif.aligncenter{text-align:center}.wp-block-jetpack-gif.alignleft,.wp-block-jetpack-gif.alignright{min-width:300px}.wp-block-jetpack-gif .wp-block-jetpack-gif-caption{margin-top:.5em;margin-bottom:1em;color:#555d66;text-align:center}.wp-block-jetpack-gif .wp-block-jetpack-gif-wrapper{height:0;margin:0;padding:calc(56.2% + 12px) 0 0;position:relative;width:100%} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/gif/view.js b/plugins/jetpack/_inc/blocks/gif/view.js
deleted file mode 100644
index c82e1ebf..00000000
--- a/plugins/jetpack/_inc/blocks/gif/view.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,t){for(var n in t)e[n]=t[n]}(window,function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=290)}({290:function(e,t,n){n(38),e.exports=n(291)},291:function(e,t,n){"use strict";n.r(t);n(74)},33:function(e,t,n){"object"==typeof window&&window.Jetpack_Block_Assets_Base_Url&&(n.p=window.Jetpack_Block_Assets_Base_Url)},38:function(e,t,n){"use strict";n.r(t);n(33)},74:function(e,t,n){}})); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/gif/view.rtl.css b/plugins/jetpack/_inc/blocks/gif/view.rtl.css
deleted file mode 100644
index 5e478310..00000000
--- a/plugins/jetpack/_inc/blocks/gif/view.rtl.css
+++ /dev/null
@@ -1 +0,0 @@
-.wp-block-jetpack-gif{clear:both;margin:0 0 20px}.wp-block-jetpack-gif figure{margin:0;position:relative;width:100%}.wp-block-jetpack-gif iframe{border:0;right:0;height:100%;position:absolute;top:0;width:100%}.wp-block-jetpack-gif.aligncenter{text-align:center}.wp-block-jetpack-gif.alignleft,.wp-block-jetpack-gif.alignright{min-width:300px}.wp-block-jetpack-gif .wp-block-jetpack-gif-caption{margin-top:.5em;margin-bottom:1em;color:#555d66;text-align:center}.wp-block-jetpack-gif .wp-block-jetpack-gif-wrapper{height:0;margin:0;padding:calc(56.2% + 12px) 0 0;position:relative;width:100%} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/images/map-theme_black_and_white-1ead5946ca104d83676d6e3410e1d733.jpg b/plugins/jetpack/_inc/blocks/images/map-theme_black_and_white-1ead5946ca104d83676d6e3410e1d733.jpg
deleted file mode 100644
index 34cc1412..00000000
--- a/plugins/jetpack/_inc/blocks/images/map-theme_black_and_white-1ead5946ca104d83676d6e3410e1d733.jpg
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/_inc/blocks/images/map-theme_default-2ceb449b599dbcbe2a90fead5a5f3824.jpg b/plugins/jetpack/_inc/blocks/images/map-theme_default-2ceb449b599dbcbe2a90fead5a5f3824.jpg
deleted file mode 100644
index 35505eb1..00000000
--- a/plugins/jetpack/_inc/blocks/images/map-theme_default-2ceb449b599dbcbe2a90fead5a5f3824.jpg
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/_inc/blocks/images/map-theme_satellite-c74dc129bda9502fb0fb362bb627577e.jpg b/plugins/jetpack/_inc/blocks/images/map-theme_satellite-c74dc129bda9502fb0fb362bb627577e.jpg
deleted file mode 100644
index ef6ae417..00000000
--- a/plugins/jetpack/_inc/blocks/images/map-theme_satellite-c74dc129bda9502fb0fb362bb627577e.jpg
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/_inc/blocks/images/map-theme_terrain-2b6e6c1c8d09cbdc58a4c0653be1a6e3.jpg b/plugins/jetpack/_inc/blocks/images/map-theme_terrain-2b6e6c1c8d09cbdc58a4c0653be1a6e3.jpg
deleted file mode 100644
index eee1a2da..00000000
--- a/plugins/jetpack/_inc/blocks/images/map-theme_terrain-2b6e6c1c8d09cbdc58a4c0653be1a6e3.jpg
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/_inc/blocks/images/oval-3cc7669d571aef4e12f34b349e42d390.svg b/plugins/jetpack/_inc/blocks/images/oval-3cc7669d571aef4e12f34b349e42d390.svg
deleted file mode 100644
index cb149ec4..00000000
--- a/plugins/jetpack/_inc/blocks/images/oval-3cc7669d571aef4e12f34b349e42d390.svg
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="32px" height="38px" viewBox="0 0 32 38" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <!-- Generator: Sketch 52.1 (67048) - http://www.bohemiancoding.com/sketch -->
- <title>Oval Copy</title>
- <desc>Created with Sketch.</desc>
- <defs>
- <path d="M119,136 C119,136 135,124.692424 135,114 C135,103.307576 127.836556,98 119,98 C110.163444,98 103,103.307576 103,114 C103,124.692424 119,136 119,136 Z" id="path-1"></path>
- <mask id="mask-2" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="32" height="38" fill="white">
- <use xlink:href="#path-1"></use>
- </mask>
- </defs>
- <g id="Map-Block" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-dasharray="4">
- <g id="Revised-01-Placeholder-Copy" transform="translate(-496.000000, -376.000000)" stroke="#444444" stroke-width="4">
- <g id="Group" transform="translate(393.000000, 278.000000)">
- <use id="Oval-Copy" mask="url(#mask-2)" xlink:href="#path-1"></use>
- </g>
- </g>
- </g>
-</svg> \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/images/paypal-button-1e53882e702881f8dfd958c141e65383.png b/plugins/jetpack/_inc/blocks/images/paypal-button-1e53882e702881f8dfd958c141e65383.png
deleted file mode 100644
index 13bbad02..00000000
--- a/plugins/jetpack/_inc/blocks/images/paypal-button-1e53882e702881f8dfd958c141e65383.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/_inc/blocks/images/paypal-button-2x-fe4d34770a47484f401cecbb892f8456.png b/plugins/jetpack/_inc/blocks/images/paypal-button-2x-fe4d34770a47484f401cecbb892f8456.png
deleted file mode 100644
index ceea141d..00000000
--- a/plugins/jetpack/_inc/blocks/images/paypal-button-2x-fe4d34770a47484f401cecbb892f8456.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/_inc/blocks/index.json b/plugins/jetpack/_inc/blocks/index.json
deleted file mode 100644
index 38194fcf..00000000
--- a/plugins/jetpack/_inc/blocks/index.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "production": [
- "business-hours",
- "contact-form",
- "contact-info",
- "gif",
- "mailchimp",
- "map",
- "markdown",
- "publicize",
- "related-posts",
- "repeat-visitor",
- "shortlinks",
- "simple-payments",
- "slideshow",
- "subscriptions",
- "tiled-gallery",
- "videopress",
- "wordads"
- ],
- "beta": [
- "seo",
- "vr"
- ]
-}
diff --git a/plugins/jetpack/_inc/blocks/mailchimp/view.css b/plugins/jetpack/_inc/blocks/mailchimp/view.css
deleted file mode 100644
index d423030c..00000000
--- a/plugins/jetpack/_inc/blocks/mailchimp/view.css
+++ /dev/null
@@ -1 +0,0 @@
-.wp-block-jetpack-mailchimp.is-processing form{display:none}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification{display:none;margin-bottom:1.5em;padding:.75em}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.is-visible{display:block}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.wp-block-jetpack-mailchimp_error{background-color:#eb0001;color:#fff}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.wp-block-jetpack-mailchimp_processing{background-color:rgba(0,0,0,.025)}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.wp-block-jetpack-mailchimp_success{background-color:#008a00;color:#fff} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/mailchimp/view.js b/plugins/jetpack/_inc/blocks/mailchimp/view.js
deleted file mode 100644
index af834d3c..00000000
--- a/plugins/jetpack/_inc/blocks/mailchimp/view.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,t){for(var r in t)e[r]=t[r]}(window,function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=292)}({292:function(e,t,r){r(38),e.exports=r(293)},293:function(e,t,r){"use strict";r.r(t);var n=r(35),o=r.n(n),i=(r(294),"wp-block-jetpack-mailchimp");function s(e,t){var r=e.querySelector("form"),n=e.querySelector("."+i+"_processing"),s=e.querySelector("."+i+"_error"),a=e.querySelector("."+i+"_success");r.addEventListener("submit",function(i){i.preventDefault();var u=r.querySelector("input");u.classList.remove("error");var c=u.value;o.a.validate(c)?(e.classList.add("is-processing"),n.classList.add("is-visible"),function(e,t){var r="https://public-api.wordpress.com/rest/v1.1/sites/"+encodeURIComponent(e)+"/email_follow/subscribe?email="+encodeURIComponent(t);return new Promise(function(e,t){var n=new XMLHttpRequest;n.open("GET",r),n.onload=function(){if(200===n.status){var r=JSON.parse(n.responseText);e(r)}else{var o=JSON.parse(n.responseText);t(o)}},n.send()})}(t,c).then(function(e){n.classList.remove("is-visible"),e.error&&"member_exists"!==e.error?s.classList.add("is-visible"):a.classList.add("is-visible")},function(){n.classList.remove("is-visible"),s.classList.add("is-visible")})):u.classList.add("error")})}var a=function(){Array.from(document.querySelectorAll("."+i)).forEach(function(e){var t=e.getAttribute("data-blog-id");try{s(e,t)}catch(r){0}})};"undefined"!=typeof window&&"undefined"!=typeof document&&("loading"===document.readyState?document.addEventListener("DOMContentLoaded",a):a())},294:function(e,t,r){},33:function(e,t,r){"object"==typeof window&&window.Jetpack_Block_Assets_Base_Url&&(r.p=window.Jetpack_Block_Assets_Base_Url)},35:function(e,t,r){"use strict";var n=/^[-!#$%&'*+\/0-9=?A-Z^_a-z{|}~](\.?[-!#$%&'*+\/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\.?[a-zA-Z0-9])*\.[a-zA-Z](-?[a-zA-Z0-9])+$/;t.validate=function(e){if(!e)return!1;if(e.length>254)return!1;if(!n.test(e))return!1;var t=e.split("@");return!(t[0].length>64)&&!t[1].split(".").some(function(e){return e.length>63})}},38:function(e,t,r){"use strict";r.r(t);r(33)}})); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/mailchimp/view.rtl.css b/plugins/jetpack/_inc/blocks/mailchimp/view.rtl.css
deleted file mode 100644
index d423030c..00000000
--- a/plugins/jetpack/_inc/blocks/mailchimp/view.rtl.css
+++ /dev/null
@@ -1 +0,0 @@
-.wp-block-jetpack-mailchimp.is-processing form{display:none}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification{display:none;margin-bottom:1.5em;padding:.75em}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.is-visible{display:block}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.wp-block-jetpack-mailchimp_error{background-color:#eb0001;color:#fff}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.wp-block-jetpack-mailchimp_processing{background-color:rgba(0,0,0,.025)}.wp-block-jetpack-mailchimp .wp-block-jetpack-mailchimp_notification.wp-block-jetpack-mailchimp_success{background-color:#008a00;color:#fff} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/map/view.css b/plugins/jetpack/_inc/blocks/map/view.css
deleted file mode 100644
index 26ea8bd7..00000000
--- a/plugins/jetpack/_inc/blocks/map/view.css
+++ /dev/null
@@ -1 +0,0 @@
-.wp-block-jetpack-map .wp-block-jetpack-map__gm-container{width:100%;overflow:hidden;background:#d3d3d3;min-height:400px;text-align:left}.wp-block-jetpack-map .mapboxgl-popup{max-width:300px}.wp-block-jetpack-map .mapboxgl-popup h3{font-size:1.3125em;font-weight:400;margin-bottom:.5rem}.wp-block-jetpack-map .mapboxgl-popup p{margin-bottom:0}.wp-block-jetpack-map-marker{width:32px;height:38px;opacity:.9} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/map/view.js b/plugins/jetpack/_inc/blocks/map/view.js
deleted file mode 100644
index 9eafc844..00000000
--- a/plugins/jetpack/_inc/blocks/map/view.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,t){for(var n in t)e[n]=t[n]}(window,function(e){function t(t){for(var n,r,a=t[0],i=t[1],l=0,c=[];l<a.length;l++)r=a[l],o[r]&&c.push(o[r][0]),o[r]=0;for(n in i)Object.prototype.hasOwnProperty.call(i,n)&&(e[n]=i[n]);for(s&&s(t);c.length;)c.shift()()}var n={},r={5:0},o={5:0};function a(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,a),r.l=!0,r.exports}a.e=function(e){var t=[];r[e]?t.push(r[e]):0!==r[e]&&{9:1}[e]&&t.push(r[e]=new Promise(function(t,n){for(var r="rtl"===document.dir?({9:"vendors~map/mapbox-gl"}[e]||e)+".rtl.css":({9:"vendors~map/mapbox-gl"}[e]||e)+".css",o=a.p+r,i=document.getElementsByTagName("link"),l=0;l<i.length;l++){var c=(u=i[l]).getAttribute("data-href")||u.getAttribute("href");if("stylesheet"===u.rel&&(c===r||c===o))return t()}var s=document.getElementsByTagName("style");for(l=0;l<s.length;l++){var u;if((c=(u=s[l]).getAttribute("data-href"))===r||c===o)return t()}var p=document.createElement("link");p.rel="stylesheet",p.type="text/css",p.setAttribute("data-webpack",!0),p.onload=t,p.onerror=function(t){var r=t&&t.target&&t.target.src||o,a=new Error("Loading CSS chunk "+e+" failed.\n("+r+")");a.request=r,n(a)},p.href=o,document.getElementsByTagName("head")[0].appendChild(p)}).then(function(){r[e]=0}));var n=o[e];if(0!==n)if(n)t.push(n[2]);else{var i=new Promise(function(t,r){n=o[e]=[t,r]});t.push(n[2]=i);var l,c=document.createElement("script");c.charset="utf-8",c.timeout=120,a.nc&&c.setAttribute("nonce",a.nc),c.src=function(e){return a.p+""+({9:"vendors~map/mapbox-gl"}[e]||e)+".js"}(e),l=function(t){c.onerror=c.onload=null,clearTimeout(s);var n=o[e];if(0!==n){if(n){var r=t&&("load"===t.type?"missing":t.type),a=t&&t.target&&t.target.src,i=new Error("Loading chunk "+e+" failed.\n("+r+": "+a+")");i.type=r,i.request=a,n[1](i)}o[e]=void 0}};var s=setTimeout(function(){l({type:"timeout",target:c})},12e4);c.onerror=c.onload=l,document.head.appendChild(c)}return Promise.all(t)},a.m=e,a.c=n,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)a.d(n,r,function(t){return e[t]}.bind(null,r));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a.oe=function(e){throw console.error(e),e};var i=window.webpackJsonp=window.webpackJsonp||[],l=i.push.bind(i);i.push=t,i=i.slice();for(var c=0;c<i.length;c++)t(i[c]);var s=l;return a(a.s=296)}({0:function(e,t){e.exports=wp.element},1:function(e,t,n){"use strict";n.d(t,"a",function(){return l}),n.d(t,"b",function(){return c}),n.d(t,"c",function(){return s});var r=n(21),o=n.n(r),a=n(15),i=function(e){var t=o()(e);return t.push("jetpack"),t};function l(){return a.__.apply(void 0,o()(i(arguments)))}function c(){return a._n.apply(void 0,o()(i(arguments)))}function s(){return a._x.apply(void 0,o()(i(arguments)))}},10:function(e,t,n){var r=n(71);e.exports=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&r(e,t)}},11:function(e,t){function n(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}e.exports=function(e,t,r){return t&&n(e.prototype,t),r&&n(e,r),e}},13:function(e,t,n){var r=n(3);e.exports=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},o=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),o.forEach(function(t){r(e,t,n[t])})}return e}},15:function(e,t){e.exports=wp.i18n},2:function(e,t){e.exports=wp.components},21:function(e,t,n){var r=n(67),o=n(68),a=n(69);e.exports=function(e){return r(e)||o(e)||a()}},23:function(e,t,n){var r=n(45),o=n(46),a=n(47);e.exports=function(e,t){return r(e)||o(e,t)||a()}},25:function(e,t,n){"use strict";n.d(t,"a",function(){return a});var r=n(0),o=n(1),a={name:"map",prefix:"jetpack",title:Object(o.a)("Map"),icon:Object(r.createElement)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",role:"img","aria-hidden":"true",focusable:"false"},Object(r.createElement)("path",{fill:"none",d:"M0 0h24v24H0V0z"}),Object(r.createElement)("path",{d:"M20.5 3l-.16.03L15 5.1 9 3 3.36 4.9c-.21.07-.36.25-.36.48V20.5c0 .28.22.5.5.5l.16-.03L9 18.9l6 2.1 5.64-1.9c.21-.07.36-.25.36-.48V3.5c0-.28-.22-.5-.5-.5zM10 5.47l4 1.4v11.66l-4-1.4V5.47zm-5 .99l3-1.01v11.7l-3 1.16V6.46zm14 11.08l-3 1.01V6.86l3-1.16v11.84z"})),category:"jetpack",keywords:[Object(o.a)("map"),Object(o.a)("location")],description:Object(o.a)("Add an interactive map showing one or more locations."),attributes:{align:{type:"string"},points:{type:"array",default:[]},mapStyle:{type:"string",default:"default"},mapDetails:{type:"boolean",default:!0},zoom:{type:"integer",default:13},mapCenter:{type:"object",default:{longitude:-122.41941550000001,latitude:37.7749295}},markerColor:{type:"string",default:"red"}},supports:{html:!1},mapStyleOptions:[{value:"default",label:Object(o.a)("Basic")},{value:"black_and_white",label:Object(o.a)("Black and white")},{value:"satellite",label:Object(o.a)("Satellite")},{value:"terrain",label:Object(o.a)("Terrain")}],validAlignments:["center","wide","full"],markerIcon:Object(r.createElement)("svg",{width:"14",height:"20",viewBox:"0 0 14 20",xmlns:"http://www.w3.org/2000/svg"},Object(r.createElement)("g",{id:"Page-1",fill:"none",fillRule:"evenodd"},Object(r.createElement)("g",{id:"outline-add_location-24px",transform:"translate(-5 -2)"},Object(r.createElement)("polygon",{id:"Shape",points:"0 0 24 0 24 24 0 24"}),Object(r.createElement)("path",{d:"M12,2 C8.14,2 5,5.14 5,9 C5,14.25 12,22 12,22 C12,22 19,14.25 19,9 C19,5.14 15.86,2 12,2 Z M7,9 C7,6.24 9.24,4 12,4 C14.76,4 17,6.24 17,9 C17,11.88 14.12,16.19 12,18.88 C9.92,16.21 7,11.85 7,9 Z M13,6 L11,6 L11,8 L9,8 L9,10 L11,10 L11,12 L13,12 L13,10 L15,10 L15,8 L13,8 L13,6 Z",id:"Shape",fill:"#000",fillRule:"nonzero"}))))}},296:function(e,t,n){n(38),e.exports=n(307)},3:function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},307:function(e,t,n){"use strict";n.r(t);var r=n(13),o=n.n(r),a=(n(78),n(57)),i=n(25),l=n(21),c=n.n(l),s=n(7),u=n.n(s),p=n(11),f=n.n(p),d=n(5),m=n(0),h=function(){function e(){u()(this,e)}return f()(e,[{key:"blockIterator",value:function(e,t){var n=this;t.forEach(function(t){n.initializeFrontendReactBlocks(t.component,t.options,e)})}},{key:"initializeFrontendReactBlocks",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,r=t.settings,o=r.attributes,a=r.name,i=r.prefix,l=t.selector,c=i&&i.length?"".concat(i,"/").concat(a):a,s=".wp-block-".concat(c.replace("/","-")),u=n.querySelectorAll(s),p=!0,f=!1,h=void 0;try{for(var b,v=u[Symbol.iterator]();!(p=(b=v.next()).done);p=!0){var y=b.value,g=this.extractAttributesFromContainer(y,o);Object(d.assign)(g,t.props);var k=this.extractChildrenFromContainer(y),w=Object(m.createElement)(e,g,k);Object(m.render)(w,l?y.querySelector(l):y)}}catch(x){f=!0,h=x}finally{try{p||null==v.return||v.return()}finally{if(f)throw h}}}},{key:"extractAttributesFromContainer",value:function(e,t){var n={};for(var r in t){var o=t[r],a="data-"+Object(d.kebabCase)(r);if(n[r]=e.getAttribute(a),"boolean"===o.type&&(n[r]="false"!==n[r]&&!!n[r]),"array"===o.type||"object"===o.type)try{n[r]=JSON.parse(n[r])}catch(i){n[r]=null}}return n}},{key:"extractChildrenFromContainer",value:function(e){return c()(e.childNodes).map(function(e){for(var t={},n=0;n<e.attributes.length;n++){var r=e.attributes[n];t[r.nodeName]=r.nodeValue}return t.dangerouslySetInnerHTML={__html:e.innerHTML},Object(m.createElement)(e.tagName.toLowerCase(),t)})}}]),e}();"undefined"!=typeof window&&window.addEventListener("load",function(){(new h).blockIterator(document,[{component:a.a,options:{settings:o()({},i.a,{attributes:o()({},i.a.attributes,{apiKey:{type:"string",default:""}})})}}])})},33:function(e,t,n){"object"==typeof window&&window.Jetpack_Block_Assets_Base_Url&&(n.p=window.Jetpack_Block_Assets_Base_Url)},38:function(e,t,n){"use strict";n.r(t);n(33)},4:function(e,t){e.exports=function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}},45:function(e,t){e.exports=function(e){if(Array.isArray(e))return e}},46:function(e,t){e.exports=function(e,t){var n=[],r=!0,o=!1,a=void 0;try{for(var i,l=e[Symbol.iterator]();!(r=(i=l.next()).done)&&(n.push(i.value),!t||n.length!==t);r=!0);}catch(c){o=!0,a=c}finally{try{r||null==l.return||l.return()}finally{if(o)throw a}}return n}},47:function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}},5:function(e,t){e.exports=window.lodash},57:function(e,t,n){"use strict";var r=n(23),o=n.n(r),a=n(7),i=n.n(a),l=n(11),c=n.n(l),s=n(8),u=n.n(s),p=n(9),f=n.n(p),d=n(4),m=n.n(d),h=n(10),b=n.n(h),v=n(3),y=n.n(v),g=n(0),k=n(1),w=n(5),x=n(2),j=(n(76),function(e){function t(){var e,n;i()(this,t);for(var r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];return n=u()(this,(e=f()(t)).call.apply(e,[this].concat(o))),y()(m()(n),"handleClick",function(){(0,n.props.onClick)(m()(n))}),y()(m()(n),"getPoint",function(){var e=n.props.point;return[e.coordinates.longitude,e.coordinates.latitude]}),n}return b()(t,e),c()(t,[{key:"componentDidMount",value:function(){this.renderMarker()}},{key:"componentWillUnmount",value:function(){this.marker&&this.marker.remove()}},{key:"componentDidUpdate",value:function(){this.renderMarker()}},{key:"renderMarker",value:function(){var e=this.props,t=e.map,n=e.point,r=e.mapboxgl,o=e.markerColor,a=this.handleClick,i=[n.coordinates.longitude,n.coordinates.latitude],l=this.marker?this.marker.getElement():document.createElement("div");this.marker?this.marker.setLngLat(i):(l.className="wp-block-jetpack-map-marker",this.marker=new r.Marker(l).setLngLat(i).setOffset([0,-19]).addTo(t),this.marker.getElement().addEventListener("click",a)),l.innerHTML='<?xml version="1.0" encoding="UTF-8"?><svg version="1.1" viewBox="0 0 32 38" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g fill-rule="evenodd"><path id="d" d="m16 38s16-11.308 16-22-7.1634-16-16-16-16 5.3076-16 16 16 22 16 22z" fill="'+o+'" mask="url(#c)"/></g></svg>'}},{key:"render",value:function(){return null}}]),t}(g.Component));j.defaultProps={point:{},map:null,markerColor:"#000000",mapboxgl:null,onClick:function(){}};var M=j,O=function(e){function t(){var e,n;i()(this,t);for(var r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];return n=u()(this,(e=f()(t)).call.apply(e,[this].concat(o))),y()(m()(n),"closeClick",function(){n.props.unsetActiveMarker()}),n}return b()(t,e),c()(t,[{key:"componentDidMount",value:function(){var e=this.props.mapboxgl;this.el=document.createElement("DIV"),this.infowindow=new e.Popup({closeButton:!0,closeOnClick:!1,offset:{left:[0,0],top:[0,5],right:[0,0],bottom:[0,-40]}}),this.infowindow.setDOMContent(this.el),this.infowindow.on("close",this.closeClick)}},{key:"componentDidUpdate",value:function(e){this.props.activeMarker!==e.activeMarker&&(this.props.activeMarker?this.openWindow():this.closeWindow())}},{key:"render",value:function(){return this.el?Object(g.createPortal)(this.props.children,this.el):null}},{key:"openWindow",value:function(){var e=this.props,t=e.map,n=e.activeMarker;this.infowindow.setLngLat(n.getPoint()).addTo(t)}},{key:"closeWindow",value:function(){this.infowindow.remove()}}]),t}(g.Component);O.defaultProps={unsetActiveMarker:function(){},activeMarker:null,map:null,mapboxgl:null};var C=O;var S=function(e){function t(){var e;return i()(this,t),e=u()(this,f()(t).apply(this,arguments)),y()(m()(e),"onMarkerClick",function(t){var n=e.props.onMarkerClick;e.setState({activeMarker:t}),n()}),y()(m()(e),"onMapClick",function(){e.setState({activeMarker:null})}),y()(m()(e),"clearCurrentMarker",function(){e.setState({activeMarker:null})}),y()(m()(e),"updateActiveMarker",function(t){var n=e.props.points,r=e.state.activeMarker.props.index,o=n.slice(0);Object(w.assign)(o[r],t),e.props.onSetPoints(o)}),y()(m()(e),"deleteActiveMarker",function(){var t=e.props.points,n=e.state.activeMarker.props.index,r=t.slice(0);r.splice(n,1),e.props.onSetPoints(r),e.setState({activeMarker:null})}),y()(m()(e),"sizeMap",function(){var t=e.state.map,n=e.mapRef.current,r=n.offsetWidth,o=.8*window.innerHeight,a=Math.min(.75*r,o);n.style.height=a+"px",t.resize(),e.setBoundsByMarkers()}),y()(m()(e),"setBoundsByMarkers",function(){var t=e.props,n=t.zoom,r=t.points,o=t.onSetZoom,a=e.state,i=a.map,l=a.activeMarker,c=a.mapboxgl,s=a.zoomControl,u=a.boundsSetProgrammatically;if(i&&r.length&&!l){var p=new c.LngLatBounds;if(r.forEach(function(e){p.extend([e.coordinates.longitude,e.coordinates.latitude])}),r.length>1)return i.fitBounds(p,{padding:{top:40,bottom:40,left:20,right:20}}),e.setState({boundsSetProgrammatically:!0}),void i.removeControl(s);if(i.setCenter(p.getCenter()),u){i.setZoom(12),o(12)}else i.setZoom(parseInt(n,10));i.addControl(s),e.setState({boundsSetProgrammatically:!1})}}),y()(m()(e),"scriptsLoaded",function(){var t=e.props,n=t.mapCenter,r=t.points;e.setState({loaded:!0}),r.length,e.initMap(n)}),e.state={map:null,fit_to_bounds:!1,loaded:!1,mapboxgl:null},e.mapRef=Object(g.createRef)(),e.debouncedSizeMap=Object(w.debounce)(e.sizeMap,250),e}return b()(t,e),c()(t,[{key:"render",value:function(){var e=this,t=this.props,n=t.points,r=t.admin,o=t.children,a=t.markerColor,i=this.state,l=i.map,c=i.activeMarker,s=i.mapboxgl,u=this.onMarkerClick,p=this.deleteActiveMarker,f=this.updateActiveMarker,d=Object(w.get)(c,"props.point")||{},m=d.title,h=d.caption,b=g.Children.map(o,function(e){if("AddPoint"===Object(w.get)(e,"props.tagName"))return e}),v=l&&s&&n.map(function(e,t){return Object(g.createElement)(M,{key:t,point:e,index:t,map:l,mapboxgl:s,markerColor:a,onClick:u})}),y=s&&Object(g.createElement)(C,{activeMarker:c,map:l,mapboxgl:s,unsetActiveMarker:function(){return e.setState({activeMarker:null})}},c&&r&&Object(g.createElement)(g.Fragment,null,Object(g.createElement)(x.TextControl,{label:Object(k.a)("Marker Title"),value:m,onChange:function(e){return f({title:e})}}),Object(g.createElement)(x.TextareaControl,{className:"wp-block-jetpack-map__marker-caption",label:Object(k.a)("Marker Caption"),value:h,rows:"2",tag:"textarea",onChange:function(e){return f({caption:e})}}),Object(g.createElement)(x.Button,{onClick:p,className:"wp-block-jetpack-map__delete-btn"},Object(g.createElement)(x.Dashicon,{icon:"trash",size:"15"})," ",Object(k.a)("Delete Marker"))),c&&!r&&Object(g.createElement)(g.Fragment,null,Object(g.createElement)("h3",null,m),Object(g.createElement)("p",null,h)));return Object(g.createElement)(g.Fragment,null,Object(g.createElement)("div",{className:"wp-block-jetpack-map__gm-container",ref:this.mapRef},v),y,b)}},{key:"componentDidMount",value:function(){this.props.apiKey&&this.loadMapLibraries()}},{key:"componentWillUnmount",value:function(){this.debouncedSizeMap.cancel()}},{key:"componentDidUpdate",value:function(e){var t=this.props,n=t.apiKey,r=t.children,o=t.points,a=t.mapStyle,i=t.mapDetails,l=this.state.map;n&&n.length>0&&n!==e.apiKey&&this.loadMapLibraries(),r!==e.children&&!1!==r&&this.clearCurrentMarker(),o!==e.points&&this.setBoundsByMarkers(),o.length!==e.points.length&&this.clearCurrentMarker(),a===e.mapStyle&&i===e.mapDetails||l.setStyle(this.getMapStyle())}},{key:"getMapStyle",value:function(){var e=this.props;return function(e,t){return{default:{details:"mapbox://styles/automattic/cjolkhmez0qdd2ro82dwog1in",no_details:"mapbox://styles/automattic/cjolkci3905d82soef4zlmkdo"},black_and_white:{details:"mapbox://styles/automattic/cjolkixvv0ty42spgt2k4j434",no_details:"mapbox://styles/automattic/cjolkgc540tvj2spgzzoq37k4"},satellite:{details:"mapbox://styles/mapbox/satellite-streets-v10",no_details:"mapbox://styles/mapbox/satellite-v9"},terrain:{details:"mapbox://styles/automattic/cjolkf8p405fh2soet2rdt96b",no_details:"mapbox://styles/automattic/cjolke6fz12ys2rpbpvgl12ha"}}[e][t?"details":"no_details"]}(e.mapStyle,e.mapDetails)}},{key:"getMapType",value:function(){switch(this.props.mapStyle){case"satellite":return"HYBRID";case"terrain":return"TERRAIN";case"black_and_white":default:return"ROADMAP"}}},{key:"loadMapLibraries",value:function(){var e=this,t=this.props.apiKey;Promise.all([n.e(9).then(n.t.bind(null,310,7)),n.e(9).then(n.t.bind(null,311,7))]).then(function(n){var r=o()(n,1)[0].default;r.accessToken=t,e.setState({mapboxgl:r},e.scriptsLoaded)})}},{key:"initMap",value:function(e){var t=this,n=this.state.mapboxgl,r=this.props,o=r.zoom,a=r.onMapLoaded,i=r.onError,l=r.admin,c=null;try{c=new n.Map({container:this.mapRef.current,style:this.getMapStyle(),center:this.googlePoint2Mapbox(e),zoom:parseInt(o,10),pitchWithRotate:!1,attributionControl:!1,dragRotate:!1})}catch(u){return void i("mapbox_error",u.message)}c.on("error",function(e){i("mapbox_error",e.error.message)});var s=new n.NavigationControl({showCompass:!1,showZoom:!0});c.on("zoomend",function(){t.props.onSetZoom(c.getZoom())}),c.getCanvas().addEventListener("click",this.onMapClick),this.setState({map:c,zoomControl:s},function(){t.debouncedSizeMap(),c.addControl(s),l||c.addControl(new n.FullscreenControl),t.mapRef.current.addEventListener("alignmentChanged",t.debouncedSizeMap),c.resize(),a(),t.setState({loaded:!0}),window.addEventListener("resize",t.debouncedSizeMap)})}},{key:"googlePoint2Mapbox",value:function(e){return[e.longitude?e.longitude:0,e.latitude?e.latitude:0]}}]),t}(g.Component);S.defaultProps={points:[],mapStyle:"default",zoom:13,onSetZoom:function(){},onMapLoaded:function(){},onMarkerClick:function(){},onError:function(){},markerColor:"red",apiKey:null,mapCenter:{}};t.a=S},67:function(e,t){e.exports=function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}},68:function(e,t){e.exports=function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}},69:function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}},7:function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},70:function(e,t){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(t){return"function"==typeof Symbol&&"symbol"===n(Symbol.iterator)?e.exports=r=function(e){return n(e)}:e.exports=r=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":n(e)},r(t)}e.exports=r},71:function(e,t){function n(t,r){return e.exports=n=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},n(t,r)}e.exports=n},76:function(e,t,n){},78:function(e,t,n){},8:function(e,t,n){var r=n(70),o=n(4);e.exports=function(e,t){return!t||"object"!==r(t)&&"function"!=typeof t?o(e):t}},9:function(e,t){function n(t){return e.exports=n=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},n(t)}e.exports=n}})); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/map/view.rtl.css b/plugins/jetpack/_inc/blocks/map/view.rtl.css
deleted file mode 100644
index d3625bb4..00000000
--- a/plugins/jetpack/_inc/blocks/map/view.rtl.css
+++ /dev/null
@@ -1 +0,0 @@
-.wp-block-jetpack-map .wp-block-jetpack-map__gm-container{width:100%;overflow:hidden;background:#d3d3d3;min-height:400px;text-align:right}.wp-block-jetpack-map .mapboxgl-popup{max-width:300px}.wp-block-jetpack-map .mapboxgl-popup h3{font-size:1.3125em;font-weight:400;margin-bottom:.5rem}.wp-block-jetpack-map .mapboxgl-popup p{margin-bottom:0}.wp-block-jetpack-map-marker{width:32px;height:38px;opacity:.9} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/repeat-visitor/view.js b/plugins/jetpack/_inc/blocks/repeat-visitor/view.js
deleted file mode 100644
index 4bf905c6..00000000
--- a/plugins/jetpack/_inc/blocks/repeat-visitor/view.js
+++ /dev/null
@@ -1,7 +0,0 @@
-!function(e,t){for(var r in t)e[r]=t[r]}(window,function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=297)}({278:function(e,t,r){"use strict";
-/*!
- * cookie
- * Copyright(c) 2012-2014 Roman Shtylman
- * Copyright(c) 2015 Douglas Christopher Wilson
- * MIT Licensed
- */t.parse=function(e,t){if("string"!=typeof e)throw new TypeError("argument str must be a string");for(var r={},i=t||{},a=e.split(o),s=i.decode||n,c=0;c<a.length;c++){var f=a[c],p=f.indexOf("=");if(!(p<0)){var l=f.substr(0,p).trim(),d=f.substr(++p,f.length).trim();'"'==d[0]&&(d=d.slice(1,-1)),null==r[l]&&(r[l]=u(d,s))}}return r},t.serialize=function(e,t,r){var n=r||{},o=n.encode||i;if("function"!=typeof o)throw new TypeError("option encode is invalid");if(!a.test(e))throw new TypeError("argument name is invalid");var u=o(t);if(u&&!a.test(u))throw new TypeError("argument val is invalid");var s=e+"="+u;if(null!=n.maxAge){var c=n.maxAge-0;if(isNaN(c))throw new Error("maxAge should be a Number");s+="; Max-Age="+Math.floor(c)}if(n.domain){if(!a.test(n.domain))throw new TypeError("option domain is invalid");s+="; Domain="+n.domain}if(n.path){if(!a.test(n.path))throw new TypeError("option path is invalid");s+="; Path="+n.path}if(n.expires){if("function"!=typeof n.expires.toUTCString)throw new TypeError("option expires is invalid");s+="; Expires="+n.expires.toUTCString()}n.httpOnly&&(s+="; HttpOnly");n.secure&&(s+="; Secure");if(n.sameSite){var f="string"==typeof n.sameSite?n.sameSite.toLowerCase():n.sameSite;switch(f){case!0:s+="; SameSite=Strict";break;case"lax":s+="; SameSite=Lax";break;case"strict":s+="; SameSite=Strict";break;default:throw new TypeError("option sameSite is invalid")}}return s};var n=decodeURIComponent,i=encodeURIComponent,o=/; */,a=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;function u(e,t){try{return t(e)}catch(r){return e}}},29:function(e,t,r){"use strict";r.d(t,"b",function(){return n}),r.d(t,"c",function(){return i}),r.d(t,"d",function(){return o}),r.d(t,"a",function(){return a}),r.d(t,"e",function(){return u});var n="after-visits",i="before-visits",o=3,a="jp-visit-counter",u=15552e3},297:function(e,t,r){r(38),e.exports=r(298)},298:function(e,t,r){"use strict";r.r(t);var n=r(278),i=r.n(n),o=r(29);window&&window.addEventListener("load",function(){var e;0!==Array.from(document.querySelectorAll(".wp-block-jetpack-repeat-visitor")).length&&(e=+(i.a.parse(document.cookie)[o.a]||0)+1,document.cookie=i.a.serialize(o.a,e,{path:window.location.pathname,maxAge:o.e}))})},33:function(e,t,r){"object"==typeof window&&window.Jetpack_Block_Assets_Base_Url&&(r.p=window.Jetpack_Block_Assets_Base_Url)},38:function(e,t,r){"use strict";r.r(t);r(33)}})); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/slideshow/view.css b/plugins/jetpack/_inc/blocks/slideshow/view.css
deleted file mode 100644
index fa41e14c..00000000
--- a/plugins/jetpack/_inc/blocks/slideshow/view.css
+++ /dev/null
@@ -1 +0,0 @@
-.wp-block-jetpack-slideshow{margin-bottom:1.5em;position:relative}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container{width:100%;overflow:hidden;opacity:0}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container.wp-swiper-initialized{opacity:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container .wp-block-jetpack-slideshow_slide,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container .wp-block-jetpack-slideshow_swiper-wrappper{padding:0;margin:0;line-height:normal}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_slide{background:rgba(0,0,0,.1);display:flex;height:100%;width:100%}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_slide figure{align-items:center;display:flex;height:100%;justify-content:center;margin:0;position:relative;width:100%}.wp-block-jetpack-slideshow .swiper-container-fade .wp-block-jetpack-slideshow_slide{background:#f6f6f6}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_image{display:block;height:auto;max-height:100%;max-width:100%;width:auto;-o-object-fit:contain;object-fit:contain}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev{background-color:rgba(0,0,0,.5);background-position:50%;background-repeat:no-repeat;background-size:24px;border:0;border-radius:4px;box-shadow:none;height:48px;margin:-24px 0 0;padding:0;transition:background-color .25s;width:48px}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next:hover,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause:hover,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev:hover{background-color:rgba(0,0,0,.75)}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev:focus{outline:thin dotted #fff;outline-offset:-4px}.wp-block-jetpack-slideshow .swiper-button-next.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .swiper-button-prev.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .wp-block-jetpack-slideshow_button-prev,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M5.88 4.12L13.76 12l-7.88 7.88L8 22l10-10L8 2z' fill='%23fff'/%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3C/svg%3E")}.wp-block-jetpack-slideshow .swiper-button-prev.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .swiper-button-next.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .wp-block-jetpack-slideshow_button-next,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M18 4.12L10.12 12 18 19.88 15.88 22l-10-10 10-10z' fill='%23fff'/%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3C/svg%3E")}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M6 19h4V5H6v14zm8-14v14h4V5h-4z' fill='%23fff'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");display:none;margin-top:0;position:absolute;right:10px;top:10px;z-index:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_autoplay-paused .wp-block-jetpack-slideshow_button-pause{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M8 5v14l11-7z' fill='%23fff'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E")}.wp-block-jetpack-slideshow[data-autoplay=true] .wp-block-jetpack-slideshow_button-pause{display:block}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_caption.gallery-caption{background-color:rgba(0,0,0,.5);box-sizing:border-box;bottom:0;color:#fff;cursor:text;left:0;margin:0!important;padding:.75em;position:absolute;right:0;text-align:initial;z-index:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_caption.gallery-caption a{color:inherit}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets{bottom:0;line-height:24px;padding:10px 0 2px;position:relative}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet{background:currentColor;color:currentColor;height:16px;opacity:.5;transform:scale(.75);transition:opacity .25s,transform .25s;vertical-align:top;width:16px}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet:hover{opacity:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet:focus{outline:thin dotted;outline-offset:0}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet-active{background-color:currentColor;opacity:1;transform:scale(1)} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/slideshow/view.js b/plugins/jetpack/_inc/blocks/slideshow/view.js
deleted file mode 100644
index 3b62e209..00000000
--- a/plugins/jetpack/_inc/blocks/slideshow/view.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(t,e){for(var n in e)t[n]=e[n]}(window,function(t){function e(e){for(var n,r,o=e[0],s=e[1],a=0,c=[];a<o.length;a++)r=o[a],i[r]&&c.push(i[r][0]),i[r]=0;for(n in s)Object.prototype.hasOwnProperty.call(s,n)&&(t[n]=s[n]);for(u&&u(e);c.length;)c.shift()()}var n={},r={7:0},i={7:0};function o(e){if(n[e])return n[e].exports;var r=n[e]={i:e,l:!1,exports:{}};return t[e].call(r.exports,r,r.exports,o),r.l=!0,r.exports}o.e=function(t){var e=[];r[t]?e.push(r[t]):0!==r[t]&&{10:1}[t]&&e.push(r[t]=new Promise(function(e,n){for(var r="rtl"===document.dir?({10:"vendors~swiper"}[t]||t)+".rtl.css":({10:"vendors~swiper"}[t]||t)+".css",i=o.p+r,s=document.getElementsByTagName("link"),a=0;a<s.length;a++){var c=(f=s[a]).getAttribute("data-href")||f.getAttribute("href");if("stylesheet"===f.rel&&(c===r||c===i))return e()}var u=document.getElementsByTagName("style");for(a=0;a<u.length;a++){var f;if((c=(f=u[a]).getAttribute("data-href"))===r||c===i)return e()}var l=document.createElement("link");l.rel="stylesheet",l.type="text/css",l.setAttribute("data-webpack",!0),l.onload=e,l.onerror=function(e){var r=e&&e.target&&e.target.src||i,o=new Error("Loading CSS chunk "+t+" failed.\n("+r+")");o.request=r,n(o)},l.href=i,document.getElementsByTagName("head")[0].appendChild(l)}).then(function(){r[t]=0}));var n=i[t];if(0!==n)if(n)e.push(n[2]);else{var s=new Promise(function(e,r){n=i[t]=[e,r]});e.push(n[2]=s);var a,c=document.createElement("script");c.charset="utf-8",c.timeout=120,o.nc&&c.setAttribute("nonce",o.nc),c.src=function(t){return o.p+""+({10:"vendors~swiper"}[t]||t)+".js"}(t),a=function(e){c.onerror=c.onload=null,clearTimeout(u);var n=i[t];if(0!==n){if(n){var r=e&&("load"===e.type?"missing":e.type),o=e&&e.target&&e.target.src,s=new Error("Loading chunk "+t+" failed.\n("+r+": "+o+")");s.type=r,s.request=o,n[1](s)}i[t]=void 0}};var u=setTimeout(function(){a({type:"timeout",target:c})},12e4);c.onerror=c.onload=a,document.head.appendChild(c)}return Promise.all(e)},o.m=t,o.c=n,o.d=function(t,e,n){o.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)o.d(n,r,function(e){return t[e]}.bind(null,r));return n},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,"a",e),e},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.p="",o.oe=function(t){throw console.error(t),t};var s=window.webpackJsonp=window.webpackJsonp||[],a=s.push.bind(s);s.push=e,s=s.slice();for(var c=0;c<s.length;c++)e(s[c]);var u=a;return o(o.s=299)}({23:function(t,e,n){var r=n(45),i=n(46),o=n(47);t.exports=function(t,e){return r(t)||i(t,e)||o()}},299:function(t,e,n){n(38),t.exports=n(300)},30:function(t,e,n){"use strict";n.d(e,"a",function(){return l}),n.d(e,"b",function(){return u}),n.d(e,"c",function(){return d}),n.d(e,"d",function(){return f});var r=n(56),i=n(5),o=16/9,s=.8,a=600,c="wp-block-jetpack-slideshow_autoplay-paused";function u(t){f(t),l(t),t.el.querySelector(".wp-block-jetpack-slideshow_button-pause").addEventListener("click",function(){t.el&&(t.el.classList.contains(c)?(t.el.classList.remove(c),t.autoplay.start(),this.setAttribute("aria-label","Pause Slideshow")):(t.el.classList.add(c),t.autoplay.stop(),this.setAttribute("aria-label","Play Slideshow")))})}function f(t){if(t&&t.el){var e=t.el.querySelector('.swiper-slide[data-swiper-slide-index="0"] img');if(e){var n=e.clientWidth/e.clientHeight,r=Math.max(Math.min(n,o),1),i="undefined"!=typeof window?window.innerHeight*s:a,c=Math.min(t.width/r,i),u="".concat(Math.floor(c),"px"),f="".concat(Math.floor(c/2),"px");t.el.classList.add("wp-swiper-initialized"),t.wrapperEl.style.height=u,t.el.querySelector(".wp-block-jetpack-slideshow_button-prev").style.top=f,t.el.querySelector(".wp-block-jetpack-slideshow_button-next").style.top=f}}}function l(t){Object(i.forEach)(t.slides,function(e,n){e.setAttribute("aria-hidden",n===t.activeIndex?"false":"true"),n===t.activeIndex?e.setAttribute("tabindex","-1"):e.removeAttribute("tabindex")}),function(t){var e=t.slides[t.activeIndex];if(e){var n=e.getElementsByTagName("FIGCAPTION")[0],i=e.getElementsByTagName("IMG")[0];t.a11y.liveRegion&&(t.a11y.liveRegion[0].innerHTML=n?n.innerHTML:Object(r.escapeHTML)(i.alt))}}(t)}function d(t){Object(i.forEach)(t.pagination.bullets,function(e){e.addEventListener("click",function(){var e=t.slides[t.realIndex];setTimeout(function(){e.focus()},500)})})}},300:function(t,e,n){"use strict";n.r(e);var r=n(5),i=n(31),o=n(55),s=n(30);"undefined"!=typeof window&&window.addEventListener("load",function(){var t=document.getElementsByClassName("wp-block-jetpack-slideshow");Object(r.forEach)(t,function(t){var e=t.dataset,n=e.autoplay,r=e.delay,a=e.effect,c=window.matchMedia("(prefers-reduced-motion: reduce)").matches,u=n&&!c,f=t.getElementsByClassName("swiper-container")[0],l=null;Object(o.a)(f,{autoplay:!!u&&{delay:1e3*r,disableOnInteraction:!1},effect:a,init:!0,initialSlide:0,loop:!0,keyboard:{enabled:!0,onlyInViewport:!0}},{init:s.b,imagesReady:s.d,paginationRender:s.c,transitionEnd:s.a}).then(function(t){new i.a(function(){l&&(cancelAnimationFrame(l),l=null),l=requestAnimationFrame(function(){Object(s.d)(t),t.update()})}).observe(t.el)}).catch(function(){t.querySelector(".wp-block-jetpack-slideshow_container").classList.add("wp-swiper-initialized")})})})},31:function(t,e,n){"use strict";var r=function(){if("undefined"!=typeof Map)return Map;function t(t,e){var n=-1;return t.some(function(t,r){return t[0]===e&&(n=r,!0)}),n}return function(){function e(){this.__entries__=[]}return Object.defineProperty(e.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),e.prototype.get=function(e){var n=t(this.__entries__,e),r=this.__entries__[n];return r&&r[1]},e.prototype.set=function(e,n){var r=t(this.__entries__,e);~r?this.__entries__[r][1]=n:this.__entries__.push([e,n])},e.prototype.delete=function(e){var n=this.__entries__,r=t(n,e);~r&&n.splice(r,1)},e.prototype.has=function(e){return!!~t(this.__entries__,e)},e.prototype.clear=function(){this.__entries__.splice(0)},e.prototype.forEach=function(t,e){void 0===e&&(e=null);for(var n=0,r=this.__entries__;n<r.length;n++){var i=r[n];t.call(e,i[1],i[0])}},e}()}(),i="undefined"!=typeof window&&"undefined"!=typeof document&&window.document===document,o="undefined"!=typeof window&&window.Math===Math?window:"undefined"!=typeof self&&self.Math===Math?self:"undefined"!=typeof window&&window.Math===Math?window:Function("return this")(),s="function"==typeof requestAnimationFrame?requestAnimationFrame.bind(o):function(t){return setTimeout(function(){return t(Date.now())},1e3/60)},a=2;var c=20,u=["top","right","bottom","left","width","height","size","weight"],f="undefined"!=typeof MutationObserver,l=function(){function t(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=function(t,e){var n=!1,r=!1,i=0;function o(){n&&(n=!1,t()),r&&u()}function c(){s(o)}function u(){var t=Date.now();if(n){if(t-i<a)return;r=!0}else n=!0,r=!1,setTimeout(c,e);i=t}return u}(this.refresh.bind(this),c)}return t.prototype.addObserver=function(t){~this.observers_.indexOf(t)||this.observers_.push(t),this.connected_||this.connect_()},t.prototype.removeObserver=function(t){var e=this.observers_,n=e.indexOf(t);~n&&e.splice(n,1),!e.length&&this.connected_&&this.disconnect_()},t.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},t.prototype.updateObservers_=function(){var t=this.observers_.filter(function(t){return t.gatherActive(),t.hasActive()});return t.forEach(function(t){return t.broadcastActive()}),t.length>0},t.prototype.connect_=function(){i&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),f?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},t.prototype.disconnect_=function(){i&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},t.prototype.onTransitionEnd_=function(t){var e=t.propertyName,n=void 0===e?"":e;u.some(function(t){return!!~n.indexOf(t)})&&this.refresh()},t.getInstance=function(){return this.instance_||(this.instance_=new t),this.instance_},t.instance_=null,t}(),d=function(t,e){for(var n=0,r=Object.keys(e);n<r.length;n++){var i=r[n];Object.defineProperty(t,i,{value:e[i],enumerable:!1,writable:!1,configurable:!0})}return t},h=function(t){return t&&t.ownerDocument&&t.ownerDocument.defaultView||o},p=_(0,0,0,0);function v(t){return parseFloat(t)||0}function b(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];return e.reduce(function(e,n){return e+v(t["border-"+n+"-width"])},0)}function w(t){var e=t.clientWidth,n=t.clientHeight;if(!e&&!n)return p;var r=h(t).getComputedStyle(t),i=function(t){for(var e={},n=0,r=["top","right","bottom","left"];n<r.length;n++){var i=r[n],o=t["padding-"+i];e[i]=v(o)}return e}(r),o=i.left+i.right,s=i.top+i.bottom,a=v(r.width),c=v(r.height);if("border-box"===r.boxSizing&&(Math.round(a+o)!==e&&(a-=b(r,"left","right")+o),Math.round(c+s)!==n&&(c-=b(r,"top","bottom")+s)),!function(t){return t===h(t).document.documentElement}(t)){var u=Math.round(a+o)-e,f=Math.round(c+s)-n;1!==Math.abs(u)&&(a-=u),1!==Math.abs(f)&&(c-=f)}return _(i.left,i.top,a,c)}var m="undefined"!=typeof SVGGraphicsElement?function(t){return t instanceof h(t).SVGGraphicsElement}:function(t){return t instanceof h(t).SVGElement&&"function"==typeof t.getBBox};function y(t){return i?m(t)?function(t){var e=t.getBBox();return _(0,0,e.width,e.height)}(t):w(t):p}function _(t,e,n,r){return{x:t,y:e,width:n,height:r}}var g=function(){function t(t){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=_(0,0,0,0),this.target=t}return t.prototype.isActive=function(){var t=y(this.target);return this.contentRect_=t,t.width!==this.broadcastWidth||t.height!==this.broadcastHeight},t.prototype.broadcastRect=function(){var t=this.contentRect_;return this.broadcastWidth=t.width,this.broadcastHeight=t.height,t},t}(),E=function(){return function(t,e){var n,r,i,o,s,a,c,u=(r=(n=e).x,i=n.y,o=n.width,s=n.height,a="undefined"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,c=Object.create(a.prototype),d(c,{x:r,y:i,width:o,height:s,top:i,right:r+o,bottom:s+i,left:r}),c);d(this,{target:t,contentRect:u})}}(),O=function(){function t(t,e,n){if(this.activeObservations_=[],this.observations_=new r,"function"!=typeof t)throw new TypeError("The callback provided as parameter 1 is not a function.");this.callback_=t,this.controller_=e,this.callbackCtx_=n}return t.prototype.observe=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(t instanceof h(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var e=this.observations_;e.has(t)||(e.set(t,new g(t)),this.controller_.addObserver(this),this.controller_.refresh())}},t.prototype.unobserve=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(t instanceof h(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var e=this.observations_;e.has(t)&&(e.delete(t),e.size||this.controller_.removeObserver(this))}},t.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},t.prototype.gatherActive=function(){var t=this;this.clearActive(),this.observations_.forEach(function(e){e.isActive()&&t.activeObservations_.push(e)})},t.prototype.broadcastActive=function(){if(this.hasActive()){var t=this.callbackCtx_,e=this.activeObservations_.map(function(t){return new E(t.target,t.broadcastRect())});this.callback_.call(t,e,t),this.clearActive()}},t.prototype.clearActive=function(){this.activeObservations_.splice(0)},t.prototype.hasActive=function(){return this.activeObservations_.length>0},t}(),x="undefined"!=typeof WeakMap?new WeakMap:new r,M=function(){return function t(e){if(!(this instanceof t))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=l.getInstance(),r=new O(e,n,this);x.set(this,r)}}();["observe","unobserve","disconnect"].forEach(function(t){M.prototype[t]=function(){var e;return(e=x.get(this))[t].apply(e,arguments)}});var k=void 0!==o.ResizeObserver?o.ResizeObserver:M;e.a=k},33:function(t,e,n){"object"==typeof window&&window.Jetpack_Block_Assets_Base_Url&&(n.p=window.Jetpack_Block_Assets_Base_Url)},36:function(t,e){function n(t,e,n,r,i,o,s){try{var a=t[o](s),c=a.value}catch(u){return void n(u)}a.done?e(c):Promise.resolve(c).then(r,i)}t.exports=function(t){return function(){var e=this,r=arguments;return new Promise(function(i,o){var s=t.apply(e,r);function a(t){n(s,i,o,a,c,"next",t)}function c(t){n(s,i,o,a,c,"throw",t)}a(void 0)})}}},38:function(t,e,n){"use strict";n.r(e);n(33)},45:function(t,e){t.exports=function(t){if(Array.isArray(t))return t}},46:function(t,e){t.exports=function(t,e){var n=[],r=!0,i=!1,o=void 0;try{for(var s,a=t[Symbol.iterator]();!(r=(s=a.next()).done)&&(n.push(s.value),!e||n.length!==e);r=!0);}catch(c){i=!0,o=c}finally{try{r||null==a.return||a.return()}finally{if(i)throw o}}return n}},47:function(t,e){t.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}},5:function(t,e){t.exports=window.lodash},55:function(t,e,n){"use strict";n.d(e,"a",function(){return c});var r=n(23),i=n.n(r),o=n(36),s=n.n(o),a=n(5);n(93);function c(){return u.apply(this,arguments)}function u(){return(u=s()(regeneratorRuntime.mark(function t(){var e,r,o,s,c,u,f,l=arguments;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return e=l.length>0&&void 0!==l[0]?l[0]:".swiper-container",r=l.length>1&&void 0!==l[1]?l[1]:{},o=l.length>2&&void 0!==l[2]?l[2]:{},s={effect:"slide",grabCursor:!0,init:!0,initialSlide:0,navigation:{nextEl:".swiper-button-next",prevEl:".swiper-button-prev"},pagination:{bulletElement:"button",clickable:!0,el:".swiper-pagination",type:"bullets"},preventClicksPropagation:!1,releaseFormElements:!1,setWrapperSize:!0,touchStartPreventDefault:!1,on:Object(a.mapValues)(o,function(t){return function(){t(this)}})},t.next=6,Promise.all([n.e(10).then(n.t.bind(null,279,7)),n.e(10).then(n.t.bind(null,280,7))]);case 6:return c=t.sent,u=i()(c,1),f=u[0].default,t.abrupt("return",new f(e,Object(a.merge)({},s,r)));case 10:case"end":return t.stop()}},t)}))).apply(this,arguments)}},56:function(t,e){t.exports=wp.escapeHtml},93:function(t,e,n){}})); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/slideshow/view.rtl.css b/plugins/jetpack/_inc/blocks/slideshow/view.rtl.css
deleted file mode 100644
index d50af8c4..00000000
--- a/plugins/jetpack/_inc/blocks/slideshow/view.rtl.css
+++ /dev/null
@@ -1 +0,0 @@
-.wp-block-jetpack-slideshow{margin-bottom:1.5em;position:relative}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container{width:100%;overflow:hidden;opacity:0}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container.wp-swiper-initialized{opacity:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container .wp-block-jetpack-slideshow_slide,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_container .wp-block-jetpack-slideshow_swiper-wrappper{padding:0;margin:0;line-height:normal}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_slide{background:rgba(0,0,0,.1);display:flex;height:100%;width:100%}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_slide figure{align-items:center;display:flex;height:100%;justify-content:center;margin:0;position:relative;width:100%}.wp-block-jetpack-slideshow .swiper-container-fade .wp-block-jetpack-slideshow_slide{background:#f6f6f6}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_image{display:block;height:auto;max-height:100%;max-width:100%;width:auto;-o-object-fit:contain;object-fit:contain}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev{background-color:rgba(0,0,0,.5);background-position:50%;background-repeat:no-repeat;background-size:24px;border:0;border-radius:4px;box-shadow:none;height:48px;margin:-24px 0 0;padding:0;transition:background-color .25s;width:48px}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next:hover,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause:hover,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev:hover{background-color:rgba(0,0,0,.75)}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev:focus{outline:thin dotted #fff;outline-offset:-4px}.wp-block-jetpack-slideshow .swiper-button-next.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .swiper-button-prev.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .wp-block-jetpack-slideshow_button-prev,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M5.88 4.12L13.76 12l-7.88 7.88L8 22l10-10L8 2z' fill='%23fff'/%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3C/svg%3E")}.wp-block-jetpack-slideshow .swiper-button-prev.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .swiper-button-next.swiper-button-white,.wp-block-jetpack-slideshow.swiper-container-rtl .wp-block-jetpack-slideshow_button-next,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M18 4.12L10.12 12 18 19.88 15.88 22l-10-10 10-10z' fill='%23fff'/%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3C/svg%3E")}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_button-pause{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M6 19h4V5H6v14zm8-14v14h4V5h-4z' fill='%23fff'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E");display:none;margin-top:0;position:absolute;left:10px;top:10px;z-index:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_autoplay-paused .wp-block-jetpack-slideshow_button-pause{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M8 5v14l11-7z' fill='%23fff'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E")}.wp-block-jetpack-slideshow[data-autoplay=true] .wp-block-jetpack-slideshow_button-pause{display:block}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_caption.gallery-caption{background-color:rgba(0,0,0,.5);box-sizing:border-box;bottom:0;color:#fff;cursor:text;right:0;margin:0!important;padding:.75em;position:absolute;left:0;text-align:initial;z-index:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_caption.gallery-caption a{color:inherit}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets{bottom:0;line-height:24px;padding:10px 0 2px;position:relative}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet{background:currentColor;color:currentColor;height:16px;opacity:.5;transform:scale(.75);transition:opacity .25s,transform .25s;vertical-align:top;width:16px}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet:focus,.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet:hover{opacity:1}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet:focus{outline:thin dotted;outline-offset:0}.wp-block-jetpack-slideshow .wp-block-jetpack-slideshow_pagination.swiper-pagination-bullets .swiper-pagination-bullet-active{background-color:currentColor;opacity:1;transform:scale(1)} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/tiled-gallery/view.css b/plugins/jetpack/_inc/blocks/tiled-gallery/view.css
deleted file mode 100644
index 343fb0a4..00000000
--- a/plugins/jetpack/_inc/blocks/tiled-gallery/view.css
+++ /dev/null
@@ -1 +0,0 @@
-.wp-block-jetpack-tiled-gallery{margin:0 auto 1.5em}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__item img{border-radius:50%}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row{flex-grow:1;width:100%}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-1 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-1 .tiled-gallery__col{width:100%}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-2 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-2 .tiled-gallery__col{width:calc((100% - 4px)/2)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-3 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-3 .tiled-gallery__col{width:calc((100% - 8px)/3)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-4 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-4 .tiled-gallery__col{width:calc((100% - 12px)/4)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-5 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-5 .tiled-gallery__col{width:calc((100% - 16px)/5)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-6 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-6 .tiled-gallery__col{width:calc((100% - 20px)/6)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-7 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-7 .tiled-gallery__col{width:calc((100% - 24px)/7)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-8 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-8 .tiled-gallery__col{width:calc((100% - 28px)/8)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-9 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-9 .tiled-gallery__col{width:calc((100% - 32px)/9)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-10 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-10 .tiled-gallery__col{width:calc((100% - 36px)/10)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-11 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-11 .tiled-gallery__col{width:calc((100% - 40px)/11)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-12 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-12 .tiled-gallery__col{width:calc((100% - 44px)/12)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-13 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-13 .tiled-gallery__col{width:calc((100% - 48px)/13)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-14 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-14 .tiled-gallery__col{width:calc((100% - 52px)/14)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-15 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-15 .tiled-gallery__col{width:calc((100% - 56px)/15)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-16 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-16 .tiled-gallery__col{width:calc((100% - 60px)/16)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-17 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-17 .tiled-gallery__col{width:calc((100% - 64px)/17)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-18 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-18 .tiled-gallery__col{width:calc((100% - 68px)/18)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-19 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-19 .tiled-gallery__col{width:calc((100% - 72px)/19)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-20 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-20 .tiled-gallery__col{width:calc((100% - 76px)/20)}.wp-block-jetpack-tiled-gallery.is-style-columns .tiled-gallery__item,.wp-block-jetpack-tiled-gallery.is-style-rectangular .tiled-gallery__item{display:flex}.tiled-gallery__gallery{width:100%;display:flex;padding:0;flex-wrap:wrap}.tiled-gallery__row{width:100%;display:flex;flex-direction:row;justify-content:center;margin:0}.tiled-gallery__row+.tiled-gallery__row{margin-top:4px}.tiled-gallery__col{display:flex;flex-direction:column;justify-content:center;margin:0}.tiled-gallery__col+.tiled-gallery__col{margin-left:4px}.tiled-gallery__item{justify-content:center;margin:0;overflow:hidden;padding:0;position:relative}.tiled-gallery__item.filter__black-and-white{filter:grayscale(100%)}.tiled-gallery__item.filter__sepia{filter:sepia(100%)}.tiled-gallery__item.filter__1977{position:relative;filter:contrast(1.1) brightness(1.1) saturate(1.3)}.tiled-gallery__item.filter__1977 img{width:100%;z-index:1}.tiled-gallery__item.filter__1977:before{z-index:2}.tiled-gallery__item.filter__1977:after,.tiled-gallery__item.filter__1977:before{content:"";display:block;height:100%;width:100%;top:0;left:0;position:absolute;pointer-events:none}.tiled-gallery__item.filter__1977:after{z-index:3;background:rgba(243,106,188,.3);mix-blend-mode:screen}.tiled-gallery__item.filter__clarendon{position:relative;filter:contrast(1.2) saturate(1.35)}.tiled-gallery__item.filter__clarendon img{width:100%;z-index:1}.tiled-gallery__item.filter__clarendon:before{z-index:2}.tiled-gallery__item.filter__clarendon:after,.tiled-gallery__item.filter__clarendon:before{content:"";display:block;height:100%;width:100%;top:0;left:0;position:absolute;pointer-events:none}.tiled-gallery__item.filter__clarendon:after{z-index:3}.tiled-gallery__item.filter__clarendon:before{background:rgba(127,187,227,.2);mix-blend-mode:overlay}.tiled-gallery__item.filter__gingham{position:relative;filter:brightness(1.05) hue-rotate(-10deg)}.tiled-gallery__item.filter__gingham img{width:100%;z-index:1}.tiled-gallery__item.filter__gingham:before{z-index:2}.tiled-gallery__item.filter__gingham:after,.tiled-gallery__item.filter__gingham:before{content:"";display:block;height:100%;width:100%;top:0;left:0;position:absolute;pointer-events:none}.tiled-gallery__item.filter__gingham:after{z-index:3;background:#e6e6fa;mix-blend-mode:soft-light}.tiled-gallery__item+.tiled-gallery__item{margin-top:4px}.tiled-gallery__item>img{background-color:rgba(0,0,0,.1)}.tiled-gallery__item>a,.tiled-gallery__item>a>img,.tiled-gallery__item>img{display:block;height:auto;margin:0;max-width:100%;-o-object-fit:cover;object-fit:cover;-o-object-position:center;object-position:center;padding:0;width:100%} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/tiled-gallery/view.js b/plugins/jetpack/_inc/blocks/tiled-gallery/view.js
deleted file mode 100644
index e1372adf..00000000
--- a/plugins/jetpack/_inc/blocks/tiled-gallery/view.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(t,e){for(var n in e)t[n]=e[n]}(window,function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=301)}({22:function(t,e,n){"use strict";n.d(e,"a",function(){return r}),n.d(e,"b",function(){return i}),n.d(e,"h",function(){return o}),n.d(e,"i",function(){return u}),n.d(e,"c",function(){return c}),n.d(e,"d",function(){return a}),n.d(e,"e",function(){return s}),n.d(e,"f",function(){return f}),n.d(e,"g",function(){return h});var r=["image"],i=4,o=20,u=2e3,c="circle",a="columns",s="rectangular",f="square",h=[{isDefault:!0,name:s},{name:c},{name:f},{name:a}]},23:function(t,e,n){var r=n(45),i=n(46),o=n(47);t.exports=function(t,e){return r(t)||i(t,e)||o()}},301:function(t,e,n){n(38),t.exports=n(302)},302:function(t,e,n){"use strict";n.r(e);n(303);var r=n(31),i=n(44);function o(t){o.pendingRaf&&cancelAnimationFrame(o.pendingRaf),o.pendingRaf=requestAnimationFrame(function(){o.pendingRaf=null;var e=!0,n=!1,r=void 0;try{for(var u,c=function(){var t=u.value,e=t.contentRect.width;Array.from(t.target.querySelectorAll(".tiled-gallery__row")).forEach(function(t){return Object(i.b)(t,e)})},a=t[Symbol.iterator]();!(e=(u=a.next()).done);e=!0)c()}catch(s){n=!0,r=s}finally{try{e||null==a.return||a.return()}finally{if(n)throw r}}})}var u=function(){var t=Array.from(document.querySelectorAll(".wp-block-jetpack-tiled-gallery.is-style-rectangular > .tiled-gallery__gallery,.wp-block-jetpack-tiled-gallery.is-style-columns > .tiled-gallery__gallery"));if(0!==t.length){var e=new r.a(o);t.forEach(function(t){return e.observe(t)})}};"undefined"!=typeof window&&"undefined"!=typeof document&&("loading"===document.readyState?document.addEventListener("DOMContentLoaded",u):u())},303:function(t,e,n){},31:function(t,e,n){"use strict";var r=function(){if("undefined"!=typeof Map)return Map;function t(t,e){var n=-1;return t.some(function(t,r){return t[0]===e&&(n=r,!0)}),n}return function(){function e(){this.__entries__=[]}return Object.defineProperty(e.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),e.prototype.get=function(e){var n=t(this.__entries__,e),r=this.__entries__[n];return r&&r[1]},e.prototype.set=function(e,n){var r=t(this.__entries__,e);~r?this.__entries__[r][1]=n:this.__entries__.push([e,n])},e.prototype.delete=function(e){var n=this.__entries__,r=t(n,e);~r&&n.splice(r,1)},e.prototype.has=function(e){return!!~t(this.__entries__,e)},e.prototype.clear=function(){this.__entries__.splice(0)},e.prototype.forEach=function(t,e){void 0===e&&(e=null);for(var n=0,r=this.__entries__;n<r.length;n++){var i=r[n];t.call(e,i[1],i[0])}},e}()}(),i="undefined"!=typeof window&&"undefined"!=typeof document&&window.document===document,o="undefined"!=typeof window&&window.Math===Math?window:"undefined"!=typeof self&&self.Math===Math?self:"undefined"!=typeof window&&window.Math===Math?window:Function("return this")(),u="function"==typeof requestAnimationFrame?requestAnimationFrame.bind(o):function(t){return setTimeout(function(){return t(Date.now())},1e3/60)},c=2;var a=20,s=["top","right","bottom","left","width","height","size","weight"],f="undefined"!=typeof MutationObserver,h=function(){function t(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=function(t,e){var n=!1,r=!1,i=0;function o(){n&&(n=!1,t()),r&&s()}function a(){u(o)}function s(){var t=Date.now();if(n){if(t-i<c)return;r=!0}else n=!0,r=!1,setTimeout(a,e);i=t}return s}(this.refresh.bind(this),a)}return t.prototype.addObserver=function(t){~this.observers_.indexOf(t)||this.observers_.push(t),this.connected_||this.connect_()},t.prototype.removeObserver=function(t){var e=this.observers_,n=e.indexOf(t);~n&&e.splice(n,1),!e.length&&this.connected_&&this.disconnect_()},t.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},t.prototype.updateObservers_=function(){var t=this.observers_.filter(function(t){return t.gatherActive(),t.hasActive()});return t.forEach(function(t){return t.broadcastActive()}),t.length>0},t.prototype.connect_=function(){i&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),f?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},t.prototype.disconnect_=function(){i&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},t.prototype.onTransitionEnd_=function(t){var e=t.propertyName,n=void 0===e?"":e;s.some(function(t){return!!~n.indexOf(t)})&&this.refresh()},t.getInstance=function(){return this.instance_||(this.instance_=new t),this.instance_},t.instance_=null,t}(),d=function(t,e){for(var n=0,r=Object.keys(e);n<r.length;n++){var i=r[n];Object.defineProperty(t,i,{value:e[i],enumerable:!1,writable:!1,configurable:!0})}return t},l=function(t){return t&&t.ownerDocument&&t.ownerDocument.defaultView||o},p=g(0,0,0,0);function v(t){return parseFloat(t)||0}function _(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];return e.reduce(function(e,n){return e+v(t["border-"+n+"-width"])},0)}function y(t){var e=t.clientWidth,n=t.clientHeight;if(!e&&!n)return p;var r=l(t).getComputedStyle(t),i=function(t){for(var e={},n=0,r=["top","right","bottom","left"];n<r.length;n++){var i=r[n],o=t["padding-"+i];e[i]=v(o)}return e}(r),o=i.left+i.right,u=i.top+i.bottom,c=v(r.width),a=v(r.height);if("border-box"===r.boxSizing&&(Math.round(c+o)!==e&&(c-=_(r,"left","right")+o),Math.round(a+u)!==n&&(a-=_(r,"top","bottom")+u)),!function(t){return t===l(t).document.documentElement}(t)){var s=Math.round(c+o)-e,f=Math.round(a+u)-n;1!==Math.abs(s)&&(c-=s),1!==Math.abs(f)&&(a-=f)}return g(i.left,i.top,c,a)}var b="undefined"!=typeof SVGGraphicsElement?function(t){return t instanceof l(t).SVGGraphicsElement}:function(t){return t instanceof l(t).SVGElement&&"function"==typeof t.getBBox};function m(t){return i?b(t)?function(t){var e=t.getBBox();return g(0,0,e.width,e.height)}(t):y(t):p}function g(t,e,n,r){return{x:t,y:e,width:n,height:r}}var w=function(){function t(t){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=g(0,0,0,0),this.target=t}return t.prototype.isActive=function(){var t=m(this.target);return this.contentRect_=t,t.width!==this.broadcastWidth||t.height!==this.broadcastHeight},t.prototype.broadcastRect=function(){var t=this.contentRect_;return this.broadcastWidth=t.width,this.broadcastHeight=t.height,t},t}(),E=function(){return function(t,e){var n,r,i,o,u,c,a,s=(r=(n=e).x,i=n.y,o=n.width,u=n.height,c="undefined"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,a=Object.create(c.prototype),d(a,{x:r,y:i,width:o,height:u,top:i,right:r+o,bottom:u+i,left:r}),a);d(this,{target:t,contentRect:s})}}(),O=function(){function t(t,e,n){if(this.activeObservations_=[],this.observations_=new r,"function"!=typeof t)throw new TypeError("The callback provided as parameter 1 is not a function.");this.callback_=t,this.controller_=e,this.callbackCtx_=n}return t.prototype.observe=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(t instanceof l(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var e=this.observations_;e.has(t)||(e.set(t,new w(t)),this.controller_.addObserver(this),this.controller_.refresh())}},t.prototype.unobserve=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(t instanceof l(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var e=this.observations_;e.has(t)&&(e.delete(t),e.size||this.controller_.removeObserver(this))}},t.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},t.prototype.gatherActive=function(){var t=this;this.clearActive(),this.observations_.forEach(function(e){e.isActive()&&t.activeObservations_.push(e)})},t.prototype.broadcastActive=function(){if(this.hasActive()){var t=this.callbackCtx_,e=this.activeObservations_.map(function(t){return new E(t.target,t.broadcastRect())});this.callback_.call(t,e,t),this.clearActive()}},t.prototype.clearActive=function(){this.activeObservations_.splice(0)},t.prototype.hasActive=function(){return this.activeObservations_.length>0},t}(),A="undefined"!=typeof WeakMap?new WeakMap:new r,M=function(){return function t(e){if(!(this instanceof t))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=h.getInstance(),r=new O(e,n,this);A.set(this,r)}}();["observe","unobserve","disconnect"].forEach(function(t){M.prototype[t]=function(){var e;return(e=A.get(this))[t].apply(e,arguments)}});var x=void 0!==o.ResizeObserver?o.ResizeObserver:M;e.a=x},33:function(t,e,n){"object"==typeof window&&window.Jetpack_Block_Assets_Base_Url&&(n.p=window.Jetpack_Block_Assets_Base_Url)},38:function(t,e,n){"use strict";n.r(e);n(33)},44:function(t,e,n){"use strict";n.d(e,"b",function(){return c}),n.d(e,"a",function(){return a});var r=n(23),i=n.n(r),o=n(22);function u(t,e){var n=(e-t.reduce(function(t,e){return t+e},0))/t.length;return t.map(function(t){return t+n})}function c(t,e){!function(t,e,n){var r=i()(e,2),c=r[0],a=r[1],l=1/c*(n-o.b*(t.childElementCount-1)-a);!function(t,e){var n=e.rawHeight,r=e.rowWidth,i=s(t),c=i.map(function(t){return(n-o.b*(t.childElementCount-1))*h(t)[0]}),a=u(c,r);i.forEach(function(t,e){var r=c[e],i=a[e];!function(t,e){var n=e.colHeight,r=e.width,i=e.rawWidth,o=u(f(t).map(function(t){return i/d(t)}),n);Array.from(t.children).forEach(function(t,e){var n=o[e];t.setAttribute("style","height:".concat(n,"px;width:").concat(r,"px;"))})}(t,{colHeight:n-o.b*(t.childElementCount-1),width:i,rawWidth:r})})}(t,{rawHeight:l,rowWidth:n-o.b*(t.childElementCount-1)})}(t,function(t){return s(t).map(h).reduce(function(t,e){var n=i()(t,2),r=n[0],o=n[1],u=i()(e,2),c=u[0],a=u[1];return[r+c,o+a]},[0,0])}(t),e)}function a(t){return Array.from(t.querySelectorAll(".tiled-gallery__row"))}function s(t){return Array.from(t.querySelectorAll(".tiled-gallery__col"))}function f(t){return Array.from(t.querySelectorAll(".tiled-gallery__item > img, .tiled-gallery__item > a > img"))}function h(t){var e=f(t),n=e.length,r=1/e.map(d).reduce(function(t,e){return t+1/e},0);return[r,r*n||1]}function d(t){var e=parseInt(t.dataset.width,10),n=parseInt(t.dataset.height,10);return e&&!Number.isNaN(e)&&n&&!Number.isNaN(n)?e/n:1}},45:function(t,e){t.exports=function(t){if(Array.isArray(t))return t}},46:function(t,e){t.exports=function(t,e){var n=[],r=!0,i=!1,o=void 0;try{for(var u,c=t[Symbol.iterator]();!(r=(u=c.next()).done)&&(n.push(u.value),!e||n.length!==e);r=!0);}catch(a){i=!0,o=a}finally{try{r||null==c.return||c.return()}finally{if(i)throw o}}return n}},47:function(t,e){t.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}}})); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/tiled-gallery/view.rtl.css b/plugins/jetpack/_inc/blocks/tiled-gallery/view.rtl.css
deleted file mode 100644
index cd338bec..00000000
--- a/plugins/jetpack/_inc/blocks/tiled-gallery/view.rtl.css
+++ /dev/null
@@ -1 +0,0 @@
-.wp-block-jetpack-tiled-gallery{margin:0 auto 1.5em}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__item img{border-radius:50%}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row{flex-grow:1;width:100%}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-1 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-1 .tiled-gallery__col{width:100%}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-2 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-2 .tiled-gallery__col{width:calc((100% - 4px)/2)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-3 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-3 .tiled-gallery__col{width:calc((100% - 8px)/3)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-4 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-4 .tiled-gallery__col{width:calc((100% - 12px)/4)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-5 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-5 .tiled-gallery__col{width:calc((100% - 16px)/5)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-6 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-6 .tiled-gallery__col{width:calc((100% - 20px)/6)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-7 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-7 .tiled-gallery__col{width:calc((100% - 24px)/7)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-8 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-8 .tiled-gallery__col{width:calc((100% - 28px)/8)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-9 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-9 .tiled-gallery__col{width:calc((100% - 32px)/9)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-10 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-10 .tiled-gallery__col{width:calc((100% - 36px)/10)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-11 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-11 .tiled-gallery__col{width:calc((100% - 40px)/11)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-12 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-12 .tiled-gallery__col{width:calc((100% - 44px)/12)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-13 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-13 .tiled-gallery__col{width:calc((100% - 48px)/13)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-14 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-14 .tiled-gallery__col{width:calc((100% - 52px)/14)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-15 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-15 .tiled-gallery__col{width:calc((100% - 56px)/15)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-16 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-16 .tiled-gallery__col{width:calc((100% - 60px)/16)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-17 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-17 .tiled-gallery__col{width:calc((100% - 64px)/17)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-18 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-18 .tiled-gallery__col{width:calc((100% - 68px)/18)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-19 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-19 .tiled-gallery__col{width:calc((100% - 72px)/19)}.wp-block-jetpack-tiled-gallery.is-style-circle .tiled-gallery__row.columns-20 .tiled-gallery__col,.wp-block-jetpack-tiled-gallery.is-style-square .tiled-gallery__row.columns-20 .tiled-gallery__col{width:calc((100% - 76px)/20)}.wp-block-jetpack-tiled-gallery.is-style-columns .tiled-gallery__item,.wp-block-jetpack-tiled-gallery.is-style-rectangular .tiled-gallery__item{display:flex}.tiled-gallery__gallery{width:100%;display:flex;padding:0;flex-wrap:wrap}.tiled-gallery__row{width:100%;display:flex;flex-direction:row;justify-content:center;margin:0}.tiled-gallery__row+.tiled-gallery__row{margin-top:4px}.tiled-gallery__col{display:flex;flex-direction:column;justify-content:center;margin:0}.tiled-gallery__col+.tiled-gallery__col{margin-right:4px}.tiled-gallery__item{justify-content:center;margin:0;overflow:hidden;padding:0;position:relative}.tiled-gallery__item.filter__black-and-white{filter:grayscale(100%)}.tiled-gallery__item.filter__sepia{filter:sepia(100%)}.tiled-gallery__item.filter__1977{position:relative;filter:contrast(1.1) brightness(1.1) saturate(1.3)}.tiled-gallery__item.filter__1977 img{width:100%;z-index:1}.tiled-gallery__item.filter__1977:before{z-index:2}.tiled-gallery__item.filter__1977:after,.tiled-gallery__item.filter__1977:before{content:"";display:block;height:100%;width:100%;top:0;right:0;position:absolute;pointer-events:none}.tiled-gallery__item.filter__1977:after{z-index:3;background:rgba(243,106,188,.3);mix-blend-mode:screen}.tiled-gallery__item.filter__clarendon{position:relative;filter:contrast(1.2) saturate(1.35)}.tiled-gallery__item.filter__clarendon img{width:100%;z-index:1}.tiled-gallery__item.filter__clarendon:before{z-index:2}.tiled-gallery__item.filter__clarendon:after,.tiled-gallery__item.filter__clarendon:before{content:"";display:block;height:100%;width:100%;top:0;right:0;position:absolute;pointer-events:none}.tiled-gallery__item.filter__clarendon:after{z-index:3}.tiled-gallery__item.filter__clarendon:before{background:rgba(127,187,227,.2);mix-blend-mode:overlay}.tiled-gallery__item.filter__gingham{position:relative;filter:brightness(1.05) hue-rotate(-10deg)}.tiled-gallery__item.filter__gingham img{width:100%;z-index:1}.tiled-gallery__item.filter__gingham:before{z-index:2}.tiled-gallery__item.filter__gingham:after,.tiled-gallery__item.filter__gingham:before{content:"";display:block;height:100%;width:100%;top:0;right:0;position:absolute;pointer-events:none}.tiled-gallery__item.filter__gingham:after{z-index:3;background:#e6e6fa;mix-blend-mode:soft-light}.tiled-gallery__item+.tiled-gallery__item{margin-top:4px}.tiled-gallery__item>img{background-color:rgba(0,0,0,.1)}.tiled-gallery__item>a,.tiled-gallery__item>a>img,.tiled-gallery__item>img{display:block;height:auto;margin:0;max-width:100%;-o-object-fit:cover;object-fit:cover;-o-object-position:center;object-position:center;padding:0;width:100%} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/vendors~map/mapbox-gl.css b/plugins/jetpack/_inc/blocks/vendors~map/mapbox-gl.css
deleted file mode 100644
index 48a6f0fc..00000000
--- a/plugins/jetpack/_inc/blocks/vendors~map/mapbox-gl.css
+++ /dev/null
@@ -1 +0,0 @@
-.mapboxgl-map{font:12px/20px Helvetica Neue,Arial,Helvetica,sans-serif;overflow:hidden;position:relative;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mapboxgl-map:-webkit-full-screen{width:100%;height:100%}.mapboxgl-canary{background-color:salmon}.mapboxgl-canvas-container.mapboxgl-interactive,.mapboxgl-ctrl-group>button.mapboxgl-ctrl-compass{cursor:grab;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.mapboxgl-canvas-container.mapboxgl-interactive:active,.mapboxgl-ctrl-group>button.mapboxgl-ctrl-compass:active{cursor:grabbing}.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate,.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate .mapboxgl-canvas{touch-action:pan-x pan-y}.mapboxgl-canvas-container.mapboxgl-touch-drag-pan,.mapboxgl-canvas-container.mapboxgl-touch-drag-pan .mapboxgl-canvas{touch-action:pinch-zoom}.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan,.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan .mapboxgl-canvas{touch-action:none}.mapboxgl-ctrl-bottom-left,.mapboxgl-ctrl-bottom-right,.mapboxgl-ctrl-top-left,.mapboxgl-ctrl-top-right{position:absolute;pointer-events:none;z-index:2}.mapboxgl-ctrl-top-left{top:0;left:0}.mapboxgl-ctrl-top-right{top:0;right:0}.mapboxgl-ctrl-bottom-left{bottom:0;left:0}.mapboxgl-ctrl-bottom-right{right:0;bottom:0}.mapboxgl-ctrl{clear:both;pointer-events:auto}.mapboxgl-ctrl-top-left .mapboxgl-ctrl{margin:10px 0 0 10px;float:left}.mapboxgl-ctrl-top-right .mapboxgl-ctrl{margin:10px 10px 0 0;float:right}.mapboxgl-ctrl-bottom-left .mapboxgl-ctrl{margin:0 0 10px 10px;float:left}.mapboxgl-ctrl-bottom-right .mapboxgl-ctrl{margin:0 10px 10px 0;float:right}.mapboxgl-ctrl-group{border-radius:4px;overflow:hidden;background:#fff}.mapboxgl-ctrl-group:not(:empty){box-shadow:0 0 0 2px rgba(0,0,0,.1)}.mapboxgl-ctrl-group>button{width:30px;height:30px;display:block;padding:0;outline:none;border:0;box-sizing:border-box;background-color:transparent;cursor:pointer}.mapboxgl-ctrl-group>button+button{border-top:1px solid #ddd}.mapboxgl-ctrl>button::-moz-focus-inner{border:0;padding:0}.mapboxgl-ctrl>button:hover{background-color:rgba(0,0,0,.05)}.mapboxgl-ctrl-icon,.mapboxgl-ctrl-icon>.mapboxgl-ctrl-compass-arrow{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.mapboxgl-ctrl-icon{padding:5px}.mapboxgl-ctrl-icon.mapboxgl-ctrl-zoom-out{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M7 9c-.554 0-1 .446-1 1s.446 1 1 1h6c.554 0 1-.446 1-1s-.446-1-1-1z' fill='%23333'/%3E%3C/svg%3E")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-zoom-in{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10 6c-.554 0-1 .446-1 1v2H7c-.554 0-1 .446-1 1s.446 1 1 1h2v2c0 .554.446 1 1 1s1-.446 1-1v-2h2c.554 0 1-.446 1-1s-.446-1-1-1h-2V7c0-.554-.446-1-1-1z' fill='%23333'/%3E%3C/svg%3E")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 0 1 3.5 3.5 3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 6.5 10 3.5 3.5 0 0 1 10 6.5zm0 1.8A1.8 1.8 0 0 0 8.3 10a1.8 1.8 0 0 0 1.7 1.8 1.8 1.8 0 0 0 1.8-1.8A1.8 1.8 0 0 0 10 8.3z'/%3E%3C/svg%3E")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate:disabled{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23aaa'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 0 1 3.5 3.5 3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 6.5 10 3.5 3.5 0 0 1 10 6.5zm0 1.8A1.8 1.8 0 0 0 8.3 10a1.8 1.8 0 0 0 1.7 1.8 1.8 1.8 0 0 0 1.8-1.8A1.8 1.8 0 0 0 10 8.3z'/%3E%3C/svg%3E")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 0 1 3.5 3.5 3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 6.5 10 3.5 3.5 0 0 1 10 6.5zm0 1.8A1.8 1.8 0 0 0 8.3 10a1.8 1.8 0 0 0 1.7 1.8 1.8 1.8 0 0 0 1.8-1.8A1.8 1.8 0 0 0 10 8.3z'/%3E%3C/svg%3E")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e58978'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 0 1 3.5 3.5 3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 6.5 10 3.5 3.5 0 0 1 10 6.5zm0 1.8A1.8 1.8 0 0 0 8.3 10a1.8 1.8 0 0 0 1.7 1.8 1.8 1.8 0 0 0 1.8-1.8A1.8 1.8 0 0 0 10 8.3z'/%3E%3C/svg%3E")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 0 1 0-7z'/%3E%3C/svg%3E")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e54e33'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 0 1 0-7z'/%3E%3C/svg%3E")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-waiting{animation:mapboxgl-spin 2s linear infinite}@keyframes mapboxgl-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.mapboxgl-ctrl-icon.mapboxgl-ctrl-fullscreen{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5 4c-.5 0-1 .5-1 1v4h.5l1.277-1.703c1 .763 2.059 1.66 3.114 2.703a30.38 30.38 0 0 1-3.11 2.707L4.5 11H4v4c0 .5.5 1 1 1h4v-.5l-1.727-1.295a35.498 35.498 0 0 1 2.688-3.137 30.312 30.312 0 0 1 2.746 3.15L11 15.5v.5h4c.5 0 1-.5 1-1v-4h-.5l-1.295 1.727a35.513 35.513 0 0 1-3.168-2.717 47.787 47.787 0 0 1 3.192-2.705L15.5 9h.5V5c0-.5-.5-1-1-1h-4v.5l1.703 1.277A32.243 32.243 0 0 1 9.971 8.92 47.761 47.761 0 0 1 7.305 5.77L9 4.5V4H5z'/%3E%3C/svg%3E")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-shrink{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.242 3.492a.75.75 0 0 0-.523 1.29l2.246 2.245L4 8.5V9h4c.5 0 1-.5 1-1V4h-.5L7.018 5.955 4.78 3.72a.75.75 0 0 0-.539-.227zm11.492 0a.75.75 0 0 0-.515.227l-2.235 2.234L11.5 4H11v4c0 .5.5 1 1 1h4v-.5l-1.965-1.473 2.246-2.246a.75.75 0 0 0-.547-1.289zM4 11v.5l1.965 1.473-2.246 2.246A.751.751 0 1 0 4.78 16.28l2.246-2.246L8.5 16H9v-4c0-.5-.5-1-1-1H4zm8 0c-.5 0-1 .5-1 1v4h.5l1.473-1.965 2.246 2.246a.751.751 0 1 0 1.062-1.062l-2.246-2.246L16 11.5V11h-4z'/%3E%3C/svg%3E")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-compass>.mapboxgl-ctrl-compass-arrow{width:20px;height:20px;margin:5px;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23333' d='M6 9l4-8 4 8z'/%3E%3Cpath fill='%23CCC' d='M6 11l4 8 4-8z'/%3E%3C/svg%3E");background-repeat:no-repeat;display:inline-block}a.mapboxgl-ctrl-logo{width:85px;height:21px;margin:0 0 -3px -3px;display:block;background-repeat:no-repeat;cursor:pointer;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 84.49 21'%3E%3Cpath class='st0' d='M83.25 14.26c0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.39-1.44 2.39a.34.34 0 0 1-.3.17h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.68-2.39-3.64a.213.213 0 0 1-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.36 1.4-2.35a.34.34 0 0 1 .3-.17H83c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.63 2.43 3.67c0 .05.01.09.01.13zM66.24 9.59c-.39-1.88-1.96-3.28-3.84-3.28-1.03 0-2.03.42-2.73 1.18V3.51c0-.13-.1-.23-.23-.23h-1.4c-.13 0-.23.11-.23.23v10.72c0 .13.1.23.23.23h1.4c.13 0 .23-.11.23-.23v-.73c.71.75 1.7 1.18 2.73 1.18 1.88 0 3.45-1.41 3.84-3.29.13-.6.13-1.21 0-1.8zM62.08 13c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51S63.41 13 62.08 13zM71.67 6.32a4.24 4.24 0 0 0-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 0 0 4.17 3.3c2.35 0 4.26-1.87 4.26-4.19s-1.9-4.17-4.27-4.17zm-.02 6.69c-1.33 0-2.42-1.12-2.42-2.51s1.08-2.52 2.42-2.52c1.33 0 2.42 1.12 2.42 2.51s-1.08 2.51-2.42 2.52z' opacity='.9' fill='%23fff'/%3E%3Cpath class='st1' d='M62.08 7.98c-1.32 0-2.39 1.11-2.41 2.48v.06c.01 1.38 1.08 2.48 2.41 2.48s2.42-1.12 2.42-2.51-1.09-2.51-2.42-2.51zm0 3.78c-.63 0-1.14-.56-1.17-1.25v-.04c.01-.69.54-1.25 1.17-1.25.63 0 1.17.57 1.17 1.27-.01.71-.52 1.27-1.17 1.27zM71.65 7.98c-1.33 0-2.42 1.12-2.42 2.51S70.32 13 71.65 13s2.42-1.12 2.42-2.51-1.08-2.51-2.42-2.51zm0 3.78c-.64 0-1.17-.57-1.17-1.27 0-.7.53-1.26 1.17-1.26s1.17.57 1.17 1.27c0 .71-.53 1.26-1.17 1.26z' opacity='.35'/%3E%3Cpath class='st0' d='M45.74 6.53h-1.4c-.13 0-.23.11-.23.23v.73c-.71-.75-1.7-1.18-2.73-1.18-2.17 0-3.94 1.87-3.94 4.19s1.77 4.19 3.94 4.19c1.04 0 2.03-.43 2.73-1.19v.73c0 .13.1.23.23.23h1.4c.13 0 .23-.11.23-.23V6.74c0-.12-.09-.22-.22-.22 0 .01 0 .01-.01.01zm-1.62 4C44.11 11.9 43.03 13 41.71 13s-2.42-1.12-2.42-2.51 1.08-2.52 2.4-2.52c1.33 0 2.39 1.11 2.41 2.48l.02.08z' opacity='.9' fill='%23fff'/%3E%3Cpath class='st1' d='M41.71 7.98c-1.33 0-2.42 1.12-2.42 2.51S40.37 13 41.71 13s2.39-1.11 2.41-2.48v-.06c-.02-1.37-1.09-2.48-2.41-2.48zm-1.16 2.51c0-.7.52-1.27 1.17-1.27.64 0 1.14.56 1.17 1.25v.04c-.01.68-.53 1.24-1.17 1.24-.64 0-1.17-.56-1.17-1.26z' opacity='.35'/%3E%3Cpath class='st0' d='M52.41 6.32c-1.03 0-2.03.42-2.73 1.18v-.75c0-.13-.1-.23-.23-.23h-1.4c-.13 0-.23.11-.23.23v10.72c0 .13.1.23.23.23h1.4c.13 0 .23-.1.23-.23V13.5c.71.75 1.7 1.18 2.74 1.18 2.17 0 3.94-1.87 3.94-4.19s-1.78-4.17-3.95-4.17zm-.33 6.69c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51S53.4 13 52.08 13.01z' opacity='.9' fill='%23fff'/%3E%3Cpath class='st1' d='M52.08 7.98c-1.32 0-2.39 1.11-2.42 2.48v.06c.03 1.38 1.1 2.48 2.42 2.48s2.41-1.12 2.41-2.51-1.09-2.51-2.41-2.51zm0 3.78c-.63 0-1.14-.56-1.17-1.25v-.04c.01-.69.54-1.25 1.17-1.25.63 0 1.17.58 1.17 1.27s-.53 1.27-1.17 1.27z' opacity='.35'/%3E%3Cpath class='st0' d='M36.08 14.24c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23V9.68c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.66c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23V9.68c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.48c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.11-.23-.23V6.74c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.66c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.17z' opacity='.9' fill='%23fff'/%3E%3Cpath class='st1' d='M84.34 13.59l-.07-.13-1.96-2.99 1.94-2.95c.44-.67.26-1.56-.41-2.02-.02 0-.03 0-.04-.01-.23-.15-.5-.22-.78-.22h-1.61c-.56 0-1.08.29-1.37.78l-.32.55-.34-.56c-.29-.48-.81-.77-1.38-.77h-1.6c-.6 0-1.13.37-1.35.92a5.59 5.59 0 0 0-7.26.45c-.35.34-.65.72-.89 1.14-.9-1.62-2.58-2.72-4.5-2.72-.5 0-1.01.07-1.48.23V3.51c0-.82-.66-1.48-1.47-1.48h-1.4c-.81 0-1.47.66-1.47 1.47v3.75a5.12 5.12 0 0 0-4.17-2.19c-.74 0-1.46.16-2.12.47-.24-.17-.54-.26-.84-.26h-1.4c-.45 0-.87.21-1.15.56a1.498 1.498 0 0 0-1.16-.55h-1.39c-.3 0-.6.09-.84.26-.67-.3-1.39-.46-2.12-.46-1.83 0-3.43 1-4.37 2.5-.2-.46-.48-.89-.83-1.25-.8-.81-1.89-1.25-3.02-1.25h-.01c-.89.01-1.75.33-2.46.88-.74-.57-1.64-.88-2.57-.88h-.03c-.29 0-.58.03-.86.11-.28.06-.56.16-.82.28-.21-.12-.45-.18-.7-.18h-1.4c-.82 0-1.47.66-1.47 1.47v7.5c0 .82.66 1.47 1.47 1.47h1.4c.82 0 1.48-.66 1.48-1.48V9.79c.03-.36.23-.59.36-.59.18 0 .38.18.38.47v4.57c0 .82.66 1.47 1.47 1.47h1.41c.82 0 1.47-.66 1.47-1.47l-.01-4.57c.06-.32.25-.47.35-.47.18 0 .38.18.38.47v4.57c0 .82.66 1.47 1.47 1.47h1.41c.82 0 1.47-.66 1.47-1.47v-.38a5.068 5.068 0 0 0 4.06 2.06c.74 0 1.46-.16 2.12-.47.24.17.54.26.84.26h1.39c.3 0 .6-.09.84-.26v2.01c0 .82.66 1.47 1.47 1.47h1.4c.82 0 1.47-.66 1.47-1.47v-1.77c.48.15.99.23 1.49.22 1.7 0 3.22-.87 4.17-2.2v.52c0 .82.66 1.47 1.47 1.47h1.4c.3 0 .6-.09.84-.26.66.31 1.39.47 2.12.47 1.92 0 3.6-1.1 4.49-2.73 1.54 2.65 4.95 3.53 7.58 1.98.18-.11.36-.22.53-.36.22.55.76.91 1.35.9H78c.56 0 1.08-.29 1.37-.78l.37-.61.37.61c.29.48.81.78 1.38.78h1.6c.81 0 1.46-.66 1.45-1.46-.05-.22-.1-.44-.2-.65zm-48.48.88h-1.41c-.13 0-.23-.11-.23-.23V9.68c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.66c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23V9.68c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.48c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.11-.23-.23V6.74a.23.23 0 0 1 .23-.22h1.4c.13 0 .22.11.23.22v.66c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.01 5.16c.02.13-.09.23-.21.24zm10.11-.23c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.11-.23-.23v-.74c-.7.76-1.69 1.18-2.72 1.18-2.17 0-3.94-1.87-3.94-4.19s1.77-4.19 3.94-4.19c1.03 0 2.02.43 2.73 1.18v-.74c0-.13.1-.23.23-.23h1.4c.12-.01.22.08.23.21V14.25h-.01v-.01zm6.44.43c-1.03 0-2.02-.43-2.73-1.18v3.97c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V6.75c0-.13.1-.22.23-.22h1.4c.13 0 .23.11.23.23v.73a3.73 3.73 0 0 1 2.73-1.18c2.17 0 3.94 1.86 3.94 4.18s-1.77 4.18-3.94 4.18zm13.83-3.28c-.39 1.87-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.73c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.11-.23-.23V3.51c0-.13.1-.23.23-.23h1.4c.13 0 .23.11.23.23v3.97a3.72 3.72 0 0 1 2.73-1.17c1.88 0 3.45 1.4 3.84 3.28.13.6.13 1.21 0 1.8zm5.43 3.29c-2 .01-3.73-1.35-4.17-3.3-.13-.59-.13-1.19 0-1.77a4.243 4.243 0 0 1 4.17-3.3c2.36 0 4.26 1.87 4.26 4.19s-1.9 4.18-4.26 4.18zm11.37-.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.39-1.44 2.39a.34.34 0 0 1-.3.17h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.68-2.39-3.64a.213.213 0 0 1-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.36 1.41-2.36a.34.34 0 0 1 .3-.17h1.61c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.38 3.64 2.43 3.67c.02.03.03.07.03.12-.03.13-.12.22-.24.22z' opacity='.35'/%3E%3Cpath class='st0' d='M10.5 1.24c-5.11 0-9.25 4.15-9.25 9.25s4.15 9.25 9.25 9.25 9.25-4.15 9.25-9.25c0-5.11-4.14-9.25-9.25-9.25zm4.39 11.53c-1.93 1.93-4.78 2.31-6.7 2.31-.7 0-1.41-.05-2.1-.16 0 0-1.02-5.64 2.14-8.81a4.4 4.4 0 0 1 3.13-1.28c1.27 0 2.49.51 3.39 1.42 1.84 1.84 1.89 4.75.14 6.52z' opacity='.9' fill='%23fff'/%3E%3Cpath class='st1' d='M10.5-.01C4.7-.01 0 4.7 0 10.49s4.7 10.5 10.5 10.5S21 16.29 21 10.49C20.99 4.7 16.3-.01 10.5-.01zm0 19.75c-5.11 0-9.25-4.15-9.25-9.25s4.14-9.26 9.25-9.26 9.25 4.15 9.25 9.25c0 5.13-4.14 9.26-9.25 9.26z' opacity='.35'/%3E%3Cpath class='st1' d='M14.74 6.25c-1.84-1.84-4.76-1.9-6.51-.15-3.16 3.17-2.14 8.81-2.14 8.81s5.64 1.02 8.81-2.14c1.74-1.77 1.69-4.68-.16-6.52zm-2.27 4.09l-.91 1.87-.9-1.87-1.86-.91 1.86-.9.9-1.87.91 1.87 1.86.9-1.86.91z' opacity='.35'/%3E%3Cpath class='st0' opacity='.9' fill='%23fff' d='M14.33 9.43l-1.86.91-.91 1.87-.9-1.87-1.86-.91 1.86-.9.9-1.87.91 1.87z'/%3E%3C/svg%3E")}a.mapboxgl-ctrl-logo.mapboxgl-compact{width:21px;height:21px;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 21 21'%3E%3Cpath d='M10.5 1.25c-5.11 0-9.25 4.15-9.25 9.25s4.15 9.25 9.25 9.25 9.25-4.15 9.25-9.25c0-5.11-4.14-9.25-9.25-9.25zm4.39 11.53c-1.93 1.93-4.78 2.31-6.7 2.31-.7 0-1.41-.05-2.1-.16 0 0-1.02-5.64 2.14-8.81a4.4 4.4 0 0 1 3.13-1.28c1.27 0 2.49.51 3.39 1.42 1.84 1.84 1.89 4.75.14 6.52z' class='st0' opacity='.9' fill='%23fff'/%3E%3Cpath d='M10.5 0C4.7 0 0 4.71 0 10.5S4.7 21 10.5 21 21 16.3 21 10.5C20.99 4.71 16.3 0 10.5 0zm0 19.75c-5.11 0-9.25-4.15-9.25-9.25s4.14-9.26 9.25-9.26 9.25 4.15 9.25 9.25c0 5.13-4.14 9.26-9.25 9.26z' class='st1' opacity='.35'/%3E%3Cpath d='M14.74 6.26c-1.84-1.84-4.76-1.9-6.51-.15-3.16 3.17-2.14 8.81-2.14 8.81s5.64 1.02 8.81-2.14c1.74-1.77 1.69-4.68-.16-6.52zm-2.27 4.09l-.91 1.87-.9-1.87-1.86-.91 1.86-.9.9-1.87.91 1.87 1.86.9z' class='st1' opacity='.35'/%3E%3Cpath class='st0' opacity='.9' fill='%23fff' d='M11.56 12.22l-.9-1.87-1.86-.91 1.86-.9.9-1.87.91 1.87 1.86.9-1.86.91z'/%3E%3C/svg%3E")}.mapboxgl-ctrl.mapboxgl-ctrl-attrib{padding:0 5px;background-color:hsla(0,0%,100%,.5);margin:0}@media screen{.mapboxgl-ctrl-attrib.mapboxgl-compact{margin:10px;position:relative;background-color:#fff;border-radius:3px 12px 12px 3px}.mapboxgl-ctrl-attrib.mapboxgl-compact:hover{padding:2px 24px 2px 4px;visibility:visible}.mapboxgl-ctrl-bottom-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:hover,.mapboxgl-ctrl-top-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:hover{padding:2px 4px 2px 24px;border-radius:12px 3px 3px 12px}.mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner{display:none}.mapboxgl-ctrl-attrib.mapboxgl-compact:hover .mapboxgl-ctrl-attrib-inner{display:block}.mapboxgl-ctrl-attrib.mapboxgl-compact:after{content:"";cursor:pointer;position:absolute;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23333' fill-rule='evenodd' d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E");background-color:hsla(0,0%,100%,.5);width:24px;height:24px;box-sizing:border-box;border-radius:12px}.mapboxgl-ctrl-bottom-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{bottom:0;right:0}.mapboxgl-ctrl-top-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{top:0;right:0}.mapboxgl-ctrl-top-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{top:0;left:0}.mapboxgl-ctrl-bottom-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{bottom:0;left:0}}.mapboxgl-ctrl-attrib a{color:rgba(0,0,0,.75);text-decoration:none}.mapboxgl-ctrl-attrib a:hover{color:inherit;text-decoration:underline}.mapboxgl-ctrl-attrib .mapbox-improve-map{font-weight:700;margin-left:2px}.mapboxgl-attrib-empty{display:none}.mapboxgl-ctrl-scale{background-color:hsla(0,0%,100%,.75);font-size:10px;border:2px solid #333;border-top:#333;padding:0 5px;color:#333;box-sizing:border-box}.mapboxgl-popup{position:absolute;top:0;left:0;display:flex;will-change:transform;pointer-events:none}.mapboxgl-popup-anchor-top,.mapboxgl-popup-anchor-top-left,.mapboxgl-popup-anchor-top-right{flex-direction:column}.mapboxgl-popup-anchor-bottom,.mapboxgl-popup-anchor-bottom-left,.mapboxgl-popup-anchor-bottom-right{flex-direction:column-reverse}.mapboxgl-popup-anchor-left{flex-direction:row}.mapboxgl-popup-anchor-right{flex-direction:row-reverse}.mapboxgl-popup-tip{width:0;height:0;border:10px solid transparent;z-index:1}.mapboxgl-popup-anchor-top .mapboxgl-popup-tip{align-self:center;border-top:none;border-bottom-color:#fff}.mapboxgl-popup-anchor-top-left .mapboxgl-popup-tip{align-self:flex-start;border-top:none;border-left:none;border-bottom-color:#fff}.mapboxgl-popup-anchor-top-right .mapboxgl-popup-tip{align-self:flex-end;border-top:none;border-right:none;border-bottom-color:#fff}.mapboxgl-popup-anchor-bottom .mapboxgl-popup-tip{align-self:center;border-bottom:none;border-top-color:#fff}.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-tip{align-self:flex-start;border-bottom:none;border-left:none;border-top-color:#fff}.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-tip{align-self:flex-end;border-bottom:none;border-right:none;border-top-color:#fff}.mapboxgl-popup-anchor-left .mapboxgl-popup-tip{align-self:center;border-left:none;border-right-color:#fff}.mapboxgl-popup-anchor-right .mapboxgl-popup-tip{align-self:center;border-right:none;border-left-color:#fff}.mapboxgl-popup-close-button{position:absolute;right:0;top:0;border:0;border-radius:0 3px 0 0;cursor:pointer;background-color:transparent}.mapboxgl-popup-close-button:hover{background-color:rgba(0,0,0,.05)}.mapboxgl-popup-content{position:relative;background:#fff;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.1);padding:10px 10px 15px;pointer-events:auto}.mapboxgl-popup-anchor-top-left .mapboxgl-popup-content{border-top-left-radius:0}.mapboxgl-popup-anchor-top-right .mapboxgl-popup-content{border-top-right-radius:0}.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-content{border-bottom-left-radius:0}.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-content{border-bottom-right-radius:0}.mapboxgl-marker{position:absolute;top:0;left:0;will-change:transform}.mapboxgl-user-location-dot{box-shadow:0 0 2px rgba(0,0,0,.25)}.mapboxgl-user-location-dot,.mapboxgl-user-location-dot:before{background-color:#1da1f2;width:15px;height:15px;border-radius:50%}.mapboxgl-user-location-dot:before{content:"";position:absolute;animation:mapboxgl-user-location-dot-pulse 2s infinite}.mapboxgl-user-location-dot:after{border-radius:50%;border:2px solid #fff;content:"";height:19px;left:-2px;position:absolute;top:-2px;width:19px;box-sizing:border-box}@keyframes mapboxgl-user-location-dot-pulse{0%{transform:scale(1);opacity:1}70%{transform:scale(3);opacity:0}to{transform:scale(1);opacity:0}}.mapboxgl-user-location-dot-stale{background-color:#aaa}.mapboxgl-user-location-dot-stale:after{display:none}.mapboxgl-crosshair,.mapboxgl-crosshair .mapboxgl-interactive,.mapboxgl-crosshair .mapboxgl-interactive:active{cursor:crosshair}.mapboxgl-boxzoom{position:absolute;top:0;left:0;width:0;height:0;background:#fff;border:2px dotted #202020;opacity:.5}@media print{.mapbox-improve-map{display:none}} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/vendors~map/mapbox-gl.js b/plugins/jetpack/_inc/blocks/vendors~map/mapbox-gl.js
deleted file mode 100644
index 18184f1e..00000000
--- a/plugins/jetpack/_inc/blocks/vendors~map/mapbox-gl.js
+++ /dev/null
@@ -1 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{310:function(t,e,r){t.exports=function(){"use strict";var t,e,r;function i(i,n){if(t)if(e){var o="var sharedChunk = {}; ("+t+")(sharedChunk); ("+e+")(sharedChunk);",a={};t(a),(r=n(a)).workerUrl=window.URL.createObjectURL(new Blob([o],{type:"text/javascript"}))}else e=n;else t=n}return i(0,function(t){function e(t,e){return t(e={exports:{}},e.exports),e.exports}var r=i;function i(t,e,r,i){this.cx=3*t,this.bx=3*(r-t)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*e,this.by=3*(i-e)-this.cy,this.ay=1-this.cy-this.by,this.p1x=t,this.p1y=i,this.p2x=r,this.p2y=i}i.prototype.sampleCurveX=function(t){return((this.ax*t+this.bx)*t+this.cx)*t},i.prototype.sampleCurveY=function(t){return((this.ay*t+this.by)*t+this.cy)*t},i.prototype.sampleCurveDerivativeX=function(t){return(3*this.ax*t+2*this.bx)*t+this.cx},i.prototype.solveCurveX=function(t,e){var r,i,n,o,a;for(void 0===e&&(e=1e-6),n=t,a=0;a<8;a++){if(o=this.sampleCurveX(n)-t,Math.abs(o)<e)return n;var s=this.sampleCurveDerivativeX(n);if(Math.abs(s)<1e-6)break;n-=o/s}if((n=t)<(r=0))return r;if(n>(i=1))return i;for(;r<i;){if(o=this.sampleCurveX(n),Math.abs(o-t)<e)return n;t>o?r=n:i=n,n=.5*(i-r)+r}return n},i.prototype.solve=function(t,e){return this.sampleCurveY(this.solveCurveX(t,e))};var n=o;function o(t,e){this.x=t,this.y=e}function a(t,e){if(Array.isArray(t)){if(!Array.isArray(e)||t.length!==e.length)return!1;for(var r=0;r<t.length;r++)if(!a(t[r],e[r]))return!1;return!0}if("object"==typeof t&&null!==t&&null!==e){if("object"!=typeof e)return!1;if(Object.keys(t).length!==Object.keys(e).length)return!1;for(var i in t)if(!a(t[i],e[i]))return!1;return!0}return t===e}function s(t,e,i,n){var o=new r(t,e,i,n);return function(t){return o.solve(t)}}o.prototype={clone:function(){return new o(this.x,this.y)},add:function(t){return this.clone()._add(t)},sub:function(t){return this.clone()._sub(t)},multByPoint:function(t){return this.clone()._multByPoint(t)},divByPoint:function(t){return this.clone()._divByPoint(t)},mult:function(t){return this.clone()._mult(t)},div:function(t){return this.clone()._div(t)},rotate:function(t){return this.clone()._rotate(t)},rotateAround:function(t,e){return this.clone()._rotateAround(t,e)},matMult:function(t){return this.clone()._matMult(t)},unit:function(){return this.clone()._unit()},perp:function(){return this.clone()._perp()},round:function(){return this.clone()._round()},mag:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals:function(t){return this.x===t.x&&this.y===t.y},dist:function(t){return Math.sqrt(this.distSqr(t))},distSqr:function(t){var e=t.x-this.x,r=t.y-this.y;return e*e+r*r},angle:function(){return Math.atan2(this.y,this.x)},angleTo:function(t){return Math.atan2(this.y-t.y,this.x-t.x)},angleWith:function(t){return this.angleWithSep(t.x,t.y)},angleWithSep:function(t,e){return Math.atan2(this.x*e-this.y*t,this.x*t+this.y*e)},_matMult:function(t){var e=t[0]*this.x+t[1]*this.y,r=t[2]*this.x+t[3]*this.y;return this.x=e,this.y=r,this},_add:function(t){return this.x+=t.x,this.y+=t.y,this},_sub:function(t){return this.x-=t.x,this.y-=t.y,this},_mult:function(t){return this.x*=t,this.y*=t,this},_div:function(t){return this.x/=t,this.y/=t,this},_multByPoint:function(t){return this.x*=t.x,this.y*=t.y,this},_divByPoint:function(t){return this.x/=t.x,this.y/=t.y,this},_unit:function(){return this._div(this.mag()),this},_perp:function(){var t=this.y;return this.y=this.x,this.x=-t,this},_rotate:function(t){var e=Math.cos(t),r=Math.sin(t),i=e*this.x-r*this.y,n=r*this.x+e*this.y;return this.x=i,this.y=n,this},_rotateAround:function(t,e){var r=Math.cos(t),i=Math.sin(t),n=e.x+r*(this.x-e.x)-i*(this.y-e.y),o=e.y+i*(this.x-e.x)+r*(this.y-e.y);return this.x=n,this.y=o,this},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}},o.convert=function(t){return t instanceof o?t:Array.isArray(t)?new o(t[0],t[1]):t};var u=s(.25,.1,.25,1);function l(t,e,r){return Math.min(r,Math.max(e,t))}function p(t,e,r){var i=r-e,n=((t-e)%i+i)%i+e;return n===e?r:n}function c(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];for(var i=0,n=e;i<n.length;i+=1){var o=n[i];for(var a in o)t[a]=o[a]}return t}var h=1;function f(){return h++}function d(){return function t(e){return e?(e^16*Math.random()>>e/4).toString(16):([1e7]+-[1e3]+-4e3+-8e3+-1e11).replace(/[018]/g,t)}()}function m(t){return!!t&&/^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(t)}function y(t,e){t.forEach(function(t){e[t]&&(e[t]=e[t].bind(e))})}function _(t,e){return-1!==t.indexOf(e,t.length-e.length)}function v(t,e,r){var i={};for(var n in t)i[n]=e.call(r||this,t[n],n,t);return i}function g(t,e,r){var i={};for(var n in t)e.call(r||this,t[n],n,t)&&(i[n]=t[n]);return i}function x(t){return Array.isArray(t)?t.map(x):"object"==typeof t&&t?v(t,x):t}var b={};function w(t){b[t]||("undefined"!=typeof console&&console.warn(t),b[t]=!0)}function E(t,e,r){return(r.y-t.y)*(e.x-t.x)>(e.y-t.y)*(r.x-t.x)}function S(t){for(var e=0,r=0,i=t.length,n=i-1,o=void 0,a=void 0;r<i;n=r++)o=t[r],e+=((a=t[n]).x-o.x)*(o.y+a.y);return e}function T(t){try{var e=self[t];return e.setItem("_mapbox_test_",1),e.removeItem("_mapbox_test_"),!0}catch(t){return!1}}var A,z,I=self.performance&&self.performance.now?self.performance.now.bind(self.performance):Date.now.bind(Date),C=self.requestAnimationFrame||self.mozRequestAnimationFrame||self.webkitRequestAnimationFrame||self.msRequestAnimationFrame,k=self.cancelAnimationFrame||self.mozCancelAnimationFrame||self.webkitCancelAnimationFrame||self.msCancelAnimationFrame,P={now:I,frame:function(t){var e=C(t);return{cancel:function(){return k(e)}}},getImageData:function(t){var e=self.document.createElement("canvas"),r=e.getContext("2d");if(!r)throw new Error("failed to create canvas 2d context");return e.width=t.width,e.height=t.height,r.drawImage(t,0,0,t.width,t.height),r.getImageData(0,0,t.width,t.height)},resolveURL:function(t){var e=self.document.createElement("a");return e.href=t,e.href},hardwareConcurrency:self.navigator.hardwareConcurrency||4,get devicePixelRatio(){return self.devicePixelRatio}},M={API_URL:"https://api.mapbox.com",get EVENTS_URL(){return 0===this.API_URL.indexOf("https://api.mapbox.cn")?"https://events.mapbox.cn/events/v2":"https://events.mapbox.com/events/v2"},REQUIRE_ACCESS_TOKEN:!0,ACCESS_TOKEN:null,MAX_PARALLEL_IMAGE_REQUESTS:16},L={supported:!1,testSupport:function(t){!D&&z&&(z.complete?B(t):A=t)}},D=!1;function B(t){var e=t.createTexture();t.bindTexture(t.TEXTURE_2D,e);try{if(t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,z),t.isContextLost())return;L.supported=!0}catch(t){}t.deleteTexture(e),D=!0}self.document&&((z=self.document.createElement("img")).onload=function(){A&&B(A),A=null},z.onerror=function(){D=!0,A=null},z.src="data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAQAAAAfQ//73v/+BiOh/AAA=");var R="See https://www.mapbox.com/api-documentation/#access-tokens";function O(t,e){var r=G(M.API_URL);if(t.protocol=r.protocol,t.authority=r.authority,"/"!==r.path&&(t.path=""+r.path+t.path),!M.REQUIRE_ACCESS_TOKEN)return X(t);if(!(e=e||M.ACCESS_TOKEN))throw new Error("An API access token is required to use Mapbox GL. "+R);if("s"===e[0])throw new Error("Use a public access token (pk.*) with Mapbox GL, not a secret access token (sk.*). "+R);return t.params.push("access_token="+e),X(t)}function F(t){return 0===t.indexOf("mapbox:")}var U=/^((https?:)?\/\/)?([^\/]+\.)?mapbox\.c(n|om)(\/|\?|$)/i;function V(t){return U.test(t)}var N=/(\.(png|jpg)\d*)(?=$)/,j=/\.[\w]+$/,q=function(t){var e=G(t);if(!e.path.match(/(^\/v4\/)/)||!e.path.match(j))return t;var r="mapbox://tiles/";r+=e.path.replace("/v4/","");var i=e.params.filter(function(t){return!t.match(/^access_token=/)});return i.length&&(r+="?"+i.join("&")),r},Z=/^(\w+):\/\/([^\/?]*)(\/[^?]+)?\??(.+)?/;function G(t){var e=t.match(Z);if(!e)throw new Error("Unable to parse URL object");return{protocol:e[1],authority:e[2],path:e[3]||"/",params:e[4]?e[4].split("&"):[]}}function X(t){var e=t.params.length?"?"+t.params.join("&"):"";return t.protocol+"://"+t.authority+t.path+e}var W=function(t){this.type=t,this.anonId=null,this.eventData={lastSuccess:null,accessToken:M.ACCESS_TOKEN},this.queue=[],this.pendingRequest=null};W.prototype.fetchEventData=function(){var t=T("localStorage"),e="mapbox.eventData:"+(M.ACCESS_TOKEN||""),r="mapbox.eventData.uuid:"+(M.ACCESS_TOKEN||"");if(t)try{var i=self.localStorage.getItem(e);i&&(this.eventData=JSON.parse(i));var n=self.localStorage.getItem(r);n&&(this.anonId=n)}catch(t){w("Unable to read from LocalStorage")}},W.prototype.saveEventData=function(){var t=T("localStorage"),e="mapbox.eventData:"+(M.ACCESS_TOKEN||""),r="mapbox.eventData.uuid:"+(M.ACCESS_TOKEN||"");if(t)try{self.localStorage.setItem(r,this.anonId),this.eventData.lastSuccess&&self.localStorage.setItem(e,JSON.stringify(this.eventData))}catch(t){w("Unable to write to LocalStorage")}},W.prototype.processRequests=function(){},W.prototype.postEvent=function(t,e,r){var i=this,n=G(M.EVENTS_URL);n.params.push("access_token="+(M.ACCESS_TOKEN||""));var o={event:this.type,created:new Date(t).toISOString(),sdkIdentifier:"mapbox-gl-js",sdkVersion:"0.52.0",userId:this.anonId},a=e?c(o,e):o,s={url:X(n),headers:{"Content-Type":"text/plain"},body:JSON.stringify([a])};this.pendingRequest=at(s,function(t){i.pendingRequest=null,r(t),i.saveEventData(),i.processRequests()})},W.prototype.queueRequest=function(t){this.queue.push(t),this.processRequests()};var H=function(t){function e(){t.call(this,"map.load"),this.success={}}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.postMapLoadEvent=function(t,e){M.ACCESS_TOKEN&&Array.isArray(t)&&t.some(function(t){return V(t)})&&this.queueRequest({id:e,timestamp:Date.now()})},e.prototype.processRequests=function(){var t=this;if(!this.pendingRequest&&0!==this.queue.length){var e=this.queue.shift(),r=e.id,i=e.timestamp;r&&this.success[r]||(this.anonId||this.fetchEventData(),m(this.anonId)||(this.anonId=d()),this.postEvent(i,{},function(e){e||r&&(t.success[r]=!0)}))}},e}(W),K=new(function(t){function e(){t.call(this,"appUserTurnstile")}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.postTurnstileEvent=function(t){M.ACCESS_TOKEN&&Array.isArray(t)&&t.some(function(t){return V(t)})&&this.queueRequest(Date.now())},e.prototype.processRequests=function(){var t=this;if(!this.pendingRequest&&0!==this.queue.length){var e=!!this.eventData.accessToken&&this.eventData.accessToken!==M.ACCESS_TOKEN;e&&(this.anonId=this.eventData.lastSuccess=null),this.anonId&&this.eventData.lastSuccess||this.fetchEventData(),m(this.anonId)||(this.anonId=d(),e=!0);var r=this.queue.shift();if(this.eventData.lastSuccess){var i=new Date(this.eventData.lastSuccess),n=new Date(r),o=(r-this.eventData.lastSuccess)/864e5;e=e||o>=1||o<-1||i.getDate()!==n.getDate()}else e=!0;if(!e)return this.processRequests();this.postEvent(r,{"enabled.telemetry":!1},function(e){e||(t.eventData.lastSuccess=r,t.eventData.accessToken=M.ACCESS_TOKEN)})}},e}(W)),Y=K.postTurnstileEvent.bind(K),J=new H,$=J.postMapLoadEvent.bind(J),Q={Unknown:"Unknown",Style:"Style",Source:"Source",Tile:"Tile",Glyphs:"Glyphs",SpriteImage:"SpriteImage",SpriteJSON:"SpriteJSON",Image:"Image"};"function"==typeof Object.freeze&&Object.freeze(Q);var tt,et,rt=function(t){function e(e,r,i){401===r&&V(i)&&(e+=": you may have provided an invalid Mapbox access token. See https://www.mapbox.com/api-documentation/#access-tokens"),t.call(this,e),this.status=r,this.url=i,this.name=this.constructor.name,this.message=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.toString=function(){return this.name+": "+this.message+" ("+this.status+"): "+this.url},e}(Error),it="undefined"!=typeof WorkerGlobalScope&&"undefined"!=typeof self&&self instanceof WorkerGlobalScope?function(){return self.worker&&self.worker.referrer}:function(){var t=self.location.origin;if(t&&"null"!==t&&"file://"!==t)return t+self.location.pathname},nt=self.fetch&&self.Request&&self.AbortController?function(t,e){var r=new self.AbortController,i=new self.Request(t.url,{method:t.method||"GET",body:t.body,credentials:t.credentials,headers:t.headers,referrer:it(),signal:r.signal});return"json"===t.type&&i.headers.set("Accept","application/json"),self.fetch(i).then(function(r){r.ok?r[t.type||"text"]().then(function(t){e(null,t,r.headers.get("Cache-Control"),r.headers.get("Expires"))}).catch(function(t){return e(new Error(t.message))}):e(new rt(r.statusText,r.status,t.url))}).catch(function(t){20!==t.code&&e(new Error(t.message))}),{cancel:function(){return r.abort()}}}:function(t,e){var r=new self.XMLHttpRequest;for(var i in r.open(t.method||"GET",t.url,!0),"arrayBuffer"===t.type&&(r.responseType="arraybuffer"),t.headers)r.setRequestHeader(i,t.headers[i]);return"json"===t.type&&r.setRequestHeader("Accept","application/json"),r.withCredentials="include"===t.credentials,r.onerror=function(){e(new Error(r.statusText))},r.onload=function(){if((r.status>=200&&r.status<300||0===r.status)&&null!==r.response){var i=r.response;if("json"===t.type)try{i=JSON.parse(r.response)}catch(t){return e(t)}e(null,i,r.getResponseHeader("Cache-Control"),r.getResponseHeader("Expires"))}else e(new rt(r.statusText,r.status,t.url))},r.send(t.body),{cancel:function(){return r.abort()}}},ot=function(t,e){return nt(c(t,{type:"arrayBuffer"}),e)},at=function(t,e){return nt(c(t,{method:"POST"}),e)};tt=[],et=0;var st=function(t,e){if(et>=M.MAX_PARALLEL_IMAGE_REQUESTS){var r={requestParameters:t,callback:e,cancelled:!1};return tt.push(r),{cancel:function(){r.cancelled=!0}}}et++;var i=!1,n=function(){if(!i)for(i=!0,et--;tt.length&&et<M.MAX_PARALLEL_IMAGE_REQUESTS;){var t=tt.shift(),e=t.requestParameters,r=t.callback;t.cancelled||st(e,r)}},o=ot(t,function(t,r,i,o){if(n(),t)e(t);else if(r){var a=new self.Image,s=self.URL||self.webkitURL;a.onload=function(){e(null,a),s.revokeObjectURL(a.src)},a.onerror=function(){return e(new Error("Could not load image. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported."))};var u=new self.Blob([new Uint8Array(r)],{type:"image/png"});a.cacheControl=i,a.expires=o,a.src=r.byteLength?s.createObjectURL(u):"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII="}});return{cancel:function(){o.cancel(),n()}}};function ut(t,e,r){r[t]&&-1!==r[t].indexOf(e)||(r[t]=r[t]||[],r[t].push(e))}function lt(t,e,r){if(r&&r[t]){var i=r[t].indexOf(e);-1!==i&&r[t].splice(i,1)}}var pt=function(t,e){void 0===e&&(e={}),c(this,e),this.type=t},ct=function(t){function e(e,r){void 0===r&&(r={}),t.call(this,"error",c({error:e},r))}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(pt),ht=function(){};ht.prototype.on=function(t,e){return this._listeners=this._listeners||{},ut(t,e,this._listeners),this},ht.prototype.off=function(t,e){return lt(t,e,this._listeners),lt(t,e,this._oneTimeListeners),this},ht.prototype.once=function(t,e){return this._oneTimeListeners=this._oneTimeListeners||{},ut(t,e,this._oneTimeListeners),this},ht.prototype.fire=function(t,e){"string"==typeof t&&(t=new pt(t,e||{}));var r=t.type;if(this.listens(r)){t.target=this;for(var i=0,n=this._listeners&&this._listeners[r]?this._listeners[r].slice():[];i<n.length;i+=1)n[i].call(this,t);for(var o=0,a=this._oneTimeListeners&&this._oneTimeListeners[r]?this._oneTimeListeners[r].slice():[];o<a.length;o+=1){var s=a[o];lt(r,s,this._oneTimeListeners),s.call(this,t)}var u=this._eventedParent;u&&(c(t,"function"==typeof this._eventedParentData?this._eventedParentData():this._eventedParentData),u.fire(t))}else t instanceof ct&&console.error(t.error);return this},ht.prototype.listens=function(t){return this._listeners&&this._listeners[t]&&this._listeners[t].length>0||this._oneTimeListeners&&this._oneTimeListeners[t]&&this._oneTimeListeners[t].length>0||this._eventedParent&&this._eventedParent.listens(t)},ht.prototype.setEventedParent=function(t,e){return this._eventedParent=t,this._eventedParentData=e,this};var ft={$version:8,$root:{version:{required:!0,type:"enum",values:[8]},name:{type:"string"},metadata:{type:"*"},center:{type:"array",value:"number"},zoom:{type:"number"},bearing:{type:"number",default:0,period:360,units:"degrees"},pitch:{type:"number",default:0,units:"degrees"},light:{type:"light"},sources:{required:!0,type:"sources"},sprite:{type:"string"},glyphs:{type:"string"},transition:{type:"transition"},layers:{required:!0,type:"array",value:"layer"}},sources:{"*":{type:"source"}},source:["source_vector","source_raster","source_raster_dem","source_geojson","source_video","source_image"],source_vector:{type:{required:!0,type:"enum",values:{vector:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},attribution:{type:"string"},"*":{type:"*"}},source_raster:{type:{required:!0,type:"enum",values:{raster:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},attribution:{type:"string"},"*":{type:"*"}},source_raster_dem:{type:{required:!0,type:"enum",values:{"raster-dem":{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},attribution:{type:"string"},encoding:{type:"enum",values:{terrarium:{},mapbox:{}},default:"mapbox"},"*":{type:"*"}},source_geojson:{type:{required:!0,type:"enum",values:{geojson:{}}},data:{type:"*"},maxzoom:{type:"number",default:18},attribution:{type:"string"},buffer:{type:"number",default:128,maximum:512,minimum:0},tolerance:{type:"number",default:.375},cluster:{type:"boolean",default:!1},clusterRadius:{type:"number",default:50,minimum:0},clusterMaxZoom:{type:"number"},lineMetrics:{type:"boolean",default:!1},generateId:{type:"boolean",default:!1}},source_video:{type:{required:!0,type:"enum",values:{video:{}}},urls:{required:!0,type:"array",value:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},source_image:{type:{required:!0,type:"enum",values:{image:{}}},url:{required:!0,type:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},layer:{id:{type:"string",required:!0},type:{type:"enum",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},"fill-extrusion":{},raster:{},hillshade:{},background:{}},required:!0},metadata:{type:"*"},source:{type:"string"},"source-layer":{type:"string"},minzoom:{type:"number",minimum:0,maximum:24},maxzoom:{type:"number",minimum:0,maximum:24},filter:{type:"filter"},layout:{type:"layout"},paint:{type:"paint"}},layout:["layout_fill","layout_line","layout_circle","layout_heatmap","layout_fill-extrusion","layout_symbol","layout_raster","layout_hillshade","layout_background"],layout_background:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_fill:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_circle:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_heatmap:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_line:{"line-cap":{type:"enum",values:{butt:{},round:{},square:{}},default:"butt",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"line-join":{type:"enum",values:{bevel:{},round:{},miter:{}},default:"miter",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-miter-limit":{type:"number",default:2,requires:[{"line-join":"miter"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-round-limit":{type:"number",default:1.05,requires:[{"line-join":"round"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_symbol:{"symbol-placement":{type:"enum",values:{point:{},line:{},"line-center":{}},default:"point",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-spacing":{type:"number",default:250,minimum:1,units:"pixels",requires:[{"symbol-placement":"line"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"symbol-avoid-edges":{type:"boolean",default:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-z-order":{type:"enum",values:{"viewport-y":{},source:{}},default:"viewport-y",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-allow-overlap":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-ignore-placement":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-optional":{type:"boolean",default:!1,requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-size":{type:"number",default:1,minimum:0,units:"factor of the original icon size",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-text-fit":{type:"enum",values:{none:{},width:{},height:{},both:{}},default:"none",requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-text-fit-padding":{type:"array",value:"number",length:4,default:[0,0,0,0],units:"pixels",requires:["icon-image","text-field",{"icon-text-fit":["both","width","height"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-image":{type:"string",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-keep-upright":{type:"boolean",default:!1,requires:["icon-image",{"icon-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-offset":{type:"array",value:"number",length:2,default:[0,0],requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-field":{type:"formatted",default:"",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-font":{type:"array",value:"string",default:["Open Sans Regular","Arial Unicode MS Regular"],requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-size":{type:"number",default:16,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-width":{type:"number",default:10,minimum:0,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-line-height":{type:"number",default:1.2,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-letter-spacing":{type:"number",default:0,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-justify":{type:"enum",values:{left:{},center:{},right:{}},default:"center",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-angle":{type:"number",default:45,units:"degrees",requires:["text-field",{"symbol-placement":["line","line-center"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-keep-upright":{type:"boolean",default:!0,requires:["text-field",{"text-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-transform":{type:"enum",values:{none:{},uppercase:{},lowercase:{}},default:"none",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-offset":{type:"array",value:"number",units:"ems",length:2,default:[0,0],requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-allow-overlap":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-ignore-placement":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-optional":{type:"boolean",default:!1,requires:["text-field","icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_raster:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_hillshade:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},filter:{type:"array",value:"*"},filter_operator:{type:"enum",values:{"==":{},"!=":{},">":{},">=":{},"<":{},"<=":{},in:{},"!in":{},all:{},any:{},none:{},has:{},"!has":{}}},geometry_type:{type:"enum",values:{Point:{},LineString:{},Polygon:{}}},function_stop:{type:"array",minimum:0,maximum:22,value:["number","color"],length:2},expression:{type:"array",value:"*",minimum:1},expression_name:{type:"enum",values:{let:{group:"Variable binding"},var:{group:"Variable binding"},literal:{group:"Types"},array:{group:"Types"},at:{group:"Lookup"},case:{group:"Decision"},match:{group:"Decision"},coalesce:{group:"Decision"},step:{group:"Ramps, scales, curves"},interpolate:{group:"Ramps, scales, curves"},"interpolate-hcl":{group:"Ramps, scales, curves"},"interpolate-lab":{group:"Ramps, scales, curves"},ln2:{group:"Math"},pi:{group:"Math"},e:{group:"Math"},typeof:{group:"Types"},string:{group:"Types"},number:{group:"Types"},boolean:{group:"Types"},object:{group:"Types"},collator:{group:"Types"},format:{group:"Types"},"to-string":{group:"Types"},"to-number":{group:"Types"},"to-boolean":{group:"Types"},"to-rgba":{group:"Color"},"to-color":{group:"Types"},rgb:{group:"Color"},rgba:{group:"Color"},get:{group:"Lookup"},has:{group:"Lookup"},length:{group:"Lookup"},properties:{group:"Feature data"},"feature-state":{group:"Feature data"},"geometry-type":{group:"Feature data"},id:{group:"Feature data"},zoom:{group:"Zoom"},"heatmap-density":{group:"Heatmap"},"line-progress":{group:"Feature data"},"+":{group:"Math"},"*":{group:"Math"},"-":{group:"Math"},"/":{group:"Math"},"%":{group:"Math"},"^":{group:"Math"},sqrt:{group:"Math"},log10:{group:"Math"},ln:{group:"Math"},log2:{group:"Math"},sin:{group:"Math"},cos:{group:"Math"},tan:{group:"Math"},asin:{group:"Math"},acos:{group:"Math"},atan:{group:"Math"},min:{group:"Math"},max:{group:"Math"},round:{group:"Math"},abs:{group:"Math"},ceil:{group:"Math"},floor:{group:"Math"},"==":{group:"Decision"},"!=":{group:"Decision"},">":{group:"Decision"},"<":{group:"Decision"},">=":{group:"Decision"},"<=":{group:"Decision"},all:{group:"Decision"},any:{group:"Decision"},"!":{group:"Decision"},"is-supported-script":{group:"String"},upcase:{group:"String"},downcase:{group:"String"},concat:{group:"String"},"resolved-locale":{group:"String"}}},light:{anchor:{type:"enum",default:"viewport",values:{map:{},viewport:{}},"property-type":"data-constant",transition:!1,expression:{interpolated:!1,parameters:["zoom"]}},position:{type:"array",default:[1.15,210,30],length:3,value:"number","property-type":"data-constant",transition:!0,expression:{interpolated:!0,parameters:["zoom"]}},color:{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},intensity:{type:"number","property-type":"data-constant",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},paint:["paint_fill","paint_line","paint_circle","paint_heatmap","paint_fill-extrusion","paint_symbol","paint_raster","paint_hillshade","paint_background"],paint_fill:{"fill-antialias":{type:"boolean",default:!0,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-outline-color":{type:"color",transition:!0,requires:[{"!":"fill-pattern"},{"fill-antialias":!0}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-pattern":{type:"string",transition:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"}},paint_line:{"line-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"line-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["line-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"line-width":{type:"number",default:1,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-gap-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-offset":{type:"number",default:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-dasharray":{type:"array",value:"number",minimum:0,transition:!0,units:"line widths",requires:[{"!":"line-pattern"}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"cross-faded"},"line-pattern":{type:"string",transition:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"},"line-gradient":{type:"color",transition:!1,requires:[{"!":"line-dasharray"},{"!":"line-pattern"},{source:"geojson",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:["line-progress"]},"property-type":"color-ramp"}},paint_circle:{"circle-radius":{type:"number",default:5,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-blur":{type:"number",default:0,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"circle-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["circle-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-scale":{type:"enum",values:{map:{},viewport:{}},default:"map",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-alignment":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-stroke-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"}},paint_heatmap:{"heatmap-radius":{type:"number",default:30,minimum:1,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-weight":{type:"number",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-intensity":{type:"number",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"heatmap-color":{type:"color",default:["interpolate",["linear"],["heatmap-density"],0,"rgba(0, 0, 255, 0)",.1,"royalblue",.3,"cyan",.5,"lime",.7,"yellow",1,"red"],transition:!1,expression:{interpolated:!0,parameters:["heatmap-density"]},"property-type":"color-ramp"},"heatmap-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_symbol:{"icon-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-color":{type:"color",default:"#000000",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["icon-image","icon-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-color":{type:"color",default:"#000000",transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["text-field","text-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_raster:{"raster-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-hue-rotate":{type:"number",default:0,period:360,transition:!0,units:"degrees",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-min":{type:"number",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-max":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-saturation":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-contrast":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-resampling":{type:"enum",values:{linear:{},nearest:{}},default:"linear",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"raster-fade-duration":{type:"number",default:300,minimum:0,transition:!1,units:"milliseconds",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_hillshade:{"hillshade-illumination-direction":{type:"number",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-illumination-anchor":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-exaggeration":{type:"number",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-shadow-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-highlight-color":{type:"color",default:"#FFFFFF",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-accent-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_background:{"background-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"background-pattern"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"background-pattern":{type:"string",transition:!0,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"cross-faded"},"background-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},transition:{duration:{type:"number",default:300,minimum:0,units:"milliseconds"},delay:{type:"number",default:0,minimum:0,units:"milliseconds"}},"layout_fill-extrusion":{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},function:{expression:{type:"expression"},stops:{type:"array",value:"function_stop"},base:{type:"number",default:1,minimum:0},property:{type:"string",default:"$zoom"},type:{type:"enum",values:{identity:{},exponential:{},interval:{},categorical:{}},default:"exponential"},colorSpace:{type:"enum",values:{rgb:{},lab:{},hcl:{}},default:"rgb"},default:{type:"*",required:!1}},"paint_fill-extrusion":{"fill-extrusion-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-extrusion-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-extrusion-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-pattern":{type:"string",transition:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"},"fill-extrusion-height":{type:"number",default:0,minimum:0,units:"meters",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-base":{type:"number",default:0,minimum:0,units:"meters",transition:!0,requires:["fill-extrusion-height"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-vertical-gradient":{type:"boolean",default:!0,transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},"property-type":{"data-driven":{type:"property-type"},"cross-faded":{type:"property-type"},"cross-faded-data-driven":{type:"property-type"},"color-ramp":{type:"property-type"},"data-constant":{type:"property-type"},constant:{type:"property-type"}}},dt=function(t,e,r,i){this.message=(t?t+": ":"")+r,i&&(this.identifier=i),null!=e&&e.__line__&&(this.line=e.__line__)};function mt(t){var e=t.key,r=t.value;return r?[new dt(e,r,"constants have been deprecated as of v8")]:[]}function yt(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];for(var i=0,n=e;i<n.length;i+=1){var o=n[i];for(var a in o)t[a]=o[a]}return t}function _t(t){return t instanceof Number||t instanceof String||t instanceof Boolean?t.valueOf():t}function vt(t){return Array.isArray(t)?t.map(vt):_t(t)}var gt=function(t){function e(e,r){t.call(this,r),this.message=r,this.key=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error),xt=function(t,e){void 0===e&&(e=[]),this.parent=t,this.bindings={};for(var r=0,i=e;r<i.length;r+=1){var n=i[r],o=n[0],a=n[1];this.bindings[o]=a}};xt.prototype.concat=function(t){return new xt(this,t)},xt.prototype.get=function(t){if(this.bindings[t])return this.bindings[t];if(this.parent)return this.parent.get(t);throw new Error(t+" not found in scope.")},xt.prototype.has=function(t){return!!this.bindings[t]||!!this.parent&&this.parent.has(t)};var bt={kind:"null"},wt={kind:"number"},Et={kind:"string"},St={kind:"boolean"},Tt={kind:"color"},At={kind:"object"},zt={kind:"value"},It={kind:"collator"},Ct={kind:"formatted"};function kt(t,e){return{kind:"array",itemType:t,N:e}}function Pt(t){if("array"===t.kind){var e=Pt(t.itemType);return"number"==typeof t.N?"array<"+e+", "+t.N+">":"value"===t.itemType.kind?"array":"array<"+e+">"}return t.kind}var Mt=[bt,wt,Et,St,Tt,Ct,At,kt(zt)];function Lt(t,e){if("error"===e.kind)return null;if("array"===t.kind){if("array"===e.kind&&(0===e.N&&"value"===e.itemType.kind||!Lt(t.itemType,e.itemType))&&("number"!=typeof t.N||t.N===e.N))return null}else{if(t.kind===e.kind)return null;if("value"===t.kind)for(var r=0,i=Mt;r<i.length;r+=1)if(!Lt(i[r],e))return null}return"Expected "+Pt(t)+" but found "+Pt(e)+" instead."}var Dt=e(function(t,e){var r={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],rebeccapurple:[102,51,153,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function i(t){return(t=Math.round(t))<0?0:t>255?255:t}function n(t){return t<0?0:t>1?1:t}function o(t){return"%"===t[t.length-1]?i(parseFloat(t)/100*255):i(parseInt(t))}function a(t){return"%"===t[t.length-1]?n(parseFloat(t)/100):n(parseFloat(t))}function s(t,e,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?t+(e-t)*r*6:2*r<1?e:3*r<2?t+(e-t)*(2/3-r)*6:t}try{e.parseCSSColor=function(t){var e,n=t.replace(/ /g,"").toLowerCase();if(n in r)return r[n].slice();if("#"===n[0])return 4===n.length?(e=parseInt(n.substr(1),16))>=0&&e<=4095?[(3840&e)>>4|(3840&e)>>8,240&e|(240&e)>>4,15&e|(15&e)<<4,1]:null:7===n.length&&(e=parseInt(n.substr(1),16))>=0&&e<=16777215?[(16711680&e)>>16,(65280&e)>>8,255&e,1]:null;var u=n.indexOf("("),l=n.indexOf(")");if(-1!==u&&l+1===n.length){var p=n.substr(0,u),c=n.substr(u+1,l-(u+1)).split(","),h=1;switch(p){case"rgba":if(4!==c.length)return null;h=a(c.pop());case"rgb":return 3!==c.length?null:[o(c[0]),o(c[1]),o(c[2]),h];case"hsla":if(4!==c.length)return null;h=a(c.pop());case"hsl":if(3!==c.length)return null;var f=(parseFloat(c[0])%360+360)%360/360,d=a(c[1]),m=a(c[2]),y=m<=.5?m*(d+1):m+d-m*d,_=2*m-y;return[i(255*s(_,y,f+1/3)),i(255*s(_,y,f)),i(255*s(_,y,f-1/3)),h];default:return null}}return null}}catch(t){}}).parseCSSColor,Bt=function(t,e,r,i){void 0===i&&(i=1),this.r=t,this.g=e,this.b=r,this.a=i};Bt.parse=function(t){if(t){if(t instanceof Bt)return t;if("string"==typeof t){var e=Dt(t);if(e)return new Bt(e[0]/255*e[3],e[1]/255*e[3],e[2]/255*e[3],e[3])}}},Bt.prototype.toString=function(){var t=this.toArray(),e=t[0],r=t[1],i=t[2],n=t[3];return"rgba("+Math.round(e)+","+Math.round(r)+","+Math.round(i)+","+n+")"},Bt.prototype.toArray=function(){var t=this.r,e=this.g,r=this.b,i=this.a;return 0===i?[0,0,0,0]:[255*t/i,255*e/i,255*r/i,i]},Bt.black=new Bt(0,0,0,1),Bt.white=new Bt(1,1,1,1),Bt.transparent=new Bt(0,0,0,0),Bt.red=new Bt(1,0,0,1);var Rt=function(t,e,r){this.sensitivity=t?e?"variant":"case":e?"accent":"base",this.locale=r,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:"search"})};Rt.prototype.compare=function(t,e){return this.collator.compare(t,e)},Rt.prototype.resolvedLocale=function(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale};var Ot=function(t,e,r){this.text=t,this.scale=e,this.fontStack=r},Ft=function(t){this.sections=t};function Ut(t,e,r,i){return"number"==typeof t&&t>=0&&t<=255&&"number"==typeof e&&e>=0&&e<=255&&"number"==typeof r&&r>=0&&r<=255?void 0===i||"number"==typeof i&&i>=0&&i<=1?null:"Invalid rgba value ["+[t,e,r,i].join(", ")+"]: 'a' must be between 0 and 1.":"Invalid rgba value ["+("number"==typeof i?[t,e,r,i]:[t,e,r]).join(", ")+"]: 'r', 'g', and 'b' must be between 0 and 255."}function Vt(t){if(null===t)return bt;if("string"==typeof t)return Et;if("boolean"==typeof t)return St;if("number"==typeof t)return wt;if(t instanceof Bt)return Tt;if(t instanceof Rt)return It;if(t instanceof Ft)return Ct;if(Array.isArray(t)){for(var e,r=t.length,i=0,n=t;i<n.length;i+=1){var o=Vt(n[i]);if(e){if(e===o)continue;e=zt;break}e=o}return kt(e||zt,r)}return At}function Nt(t){var e=typeof t;return null===t?"":"string"===e||"number"===e||"boolean"===e?String(t):t instanceof Bt||t instanceof Ft?t.toString():JSON.stringify(t)}Ft.fromString=function(t){return new Ft([new Ot(t,null,null)])},Ft.prototype.toString=function(){return this.sections.map(function(t){return t.text}).join("")},Ft.prototype.serialize=function(){for(var t=["format"],e=0,r=this.sections;e<r.length;e+=1){var i=r[e];t.push(i.text);var n={};i.fontStack&&(n["text-font"]=["literal",i.fontStack.split(",")]),i.scale&&(n["font-scale"]=i.scale),t.push(n)}return t};var jt=function(t,e){this.type=t,this.value=e};jt.parse=function(t,e){if(2!==t.length)return e.error("'literal' expression requires exactly one argument, but found "+(t.length-1)+" instead.");if(!function t(e){if(null===e)return!0;if("string"==typeof e)return!0;if("boolean"==typeof e)return!0;if("number"==typeof e)return!0;if(e instanceof Bt)return!0;if(e instanceof Rt)return!0;if(e instanceof Ft)return!0;if(Array.isArray(e)){for(var r=0,i=e;r<i.length;r+=1)if(!t(i[r]))return!1;return!0}if("object"==typeof e){for(var n in e)if(!t(e[n]))return!1;return!0}return!1}(t[1]))return e.error("invalid value");var r=t[1],i=Vt(r),n=e.expectedType;return"array"!==i.kind||0!==i.N||!n||"array"!==n.kind||"number"==typeof n.N&&0!==n.N||(i=n),new jt(i,r)},jt.prototype.evaluate=function(){return this.value},jt.prototype.eachChild=function(){},jt.prototype.possibleOutputs=function(){return[this.value]},jt.prototype.serialize=function(){return"array"===this.type.kind||"object"===this.type.kind?["literal",this.value]:this.value instanceof Bt?["rgba"].concat(this.value.toArray()):this.value instanceof Ft?this.value.serialize():this.value};var qt=function(t){this.name="ExpressionEvaluationError",this.message=t};qt.prototype.toJSON=function(){return this.message};var Zt={string:Et,number:wt,boolean:St,object:At},Gt=function(t,e){this.type=t,this.args=e};Gt.parse=function(t,e){if(t.length<2)return e.error("Expected at least one argument.");var r,i=1,n=t[0];if("array"===n){var o,a;if(t.length>2){var s=t[1];if("string"!=typeof s||!(s in Zt)||"object"===s)return e.error('The item type argument of "array" must be one of string, number, boolean',1);o=Zt[s],i++}else o=zt;if(t.length>3){if(null!==t[2]&&("number"!=typeof t[2]||t[2]<0||t[2]!==Math.floor(t[2])))return e.error('The length argument to "array" must be a positive integer literal',2);a=t[2],i++}r=kt(o,a)}else r=Zt[n];for(var u=[];i<t.length;i++){var l=e.parse(t[i],i,zt);if(!l)return null;u.push(l)}return new Gt(r,u)},Gt.prototype.evaluate=function(t){for(var e=0;e<this.args.length;e++){var r=this.args[e].evaluate(t);if(!Lt(this.type,Vt(r)))return r;if(e===this.args.length-1)throw new qt("Expected value to be of type "+Pt(this.type)+", but found "+Pt(Vt(r))+" instead.")}return null},Gt.prototype.eachChild=function(t){this.args.forEach(t)},Gt.prototype.possibleOutputs=function(){return(t=[]).concat.apply(t,this.args.map(function(t){return t.possibleOutputs()}));var t},Gt.prototype.serialize=function(){var t=this.type,e=[t.kind];if("array"===t.kind){var r=t.itemType;if("string"===r.kind||"number"===r.kind||"boolean"===r.kind){e.push(r.kind);var i=t.N;("number"==typeof i||this.args.length>1)&&e.push(i)}}return e.concat(this.args.map(function(t){return t.serialize()}))};var Xt=function(t){this.type=Ct,this.sections=t};Xt.parse=function(t,e){if(t.length<3)return e.error("Expected at least two arguments.");if((t.length-1)%2!=0)return e.error("Expected an even number of arguments.");for(var r=[],i=1;i<t.length-1;i+=2){var n=e.parse(t[i],1,zt);if(!n)return null;var o=n.type.kind;if("string"!==o&&"value"!==o&&"null"!==o)return e.error("Formatted text type must be 'string', 'value', or 'null'.");var a=t[i+1];if("object"!=typeof a||Array.isArray(a))return e.error("Format options argument must be an object.");var s=null;if(a["font-scale"]&&!(s=e.parse(a["font-scale"],1,wt)))return null;var u=null;if(a["text-font"]&&!(u=e.parse(a["text-font"],1,kt(Et))))return null;r.push({text:n,scale:s,font:u})}return new Xt(r)},Xt.prototype.evaluate=function(t){return new Ft(this.sections.map(function(e){return new Ot(Nt(e.text.evaluate(t)),e.scale?e.scale.evaluate(t):null,e.font?e.font.evaluate(t).join(","):null)}))},Xt.prototype.eachChild=function(t){for(var e=0,r=this.sections;e<r.length;e+=1){var i=r[e];t(i.text),i.scale&&t(i.scale),i.font&&t(i.font)}},Xt.prototype.possibleOutputs=function(){return[void 0]},Xt.prototype.serialize=function(){for(var t=["format"],e=0,r=this.sections;e<r.length;e+=1){var i=r[e];t.push(i.text.serialize());var n={};i.scale&&(n["font-scale"]=i.scale.serialize()),i.font&&(n["text-font"]=i.font.serialize()),t.push(n)}return t};var Wt={"to-boolean":St,"to-color":Tt,"to-number":wt,"to-string":Et},Ht=function(t,e){this.type=t,this.args=e};Ht.parse=function(t,e){if(t.length<2)return e.error("Expected at least one argument.");var r=t[0];if(("to-boolean"===r||"to-string"===r)&&2!==t.length)return e.error("Expected one argument.");for(var i=Wt[r],n=[],o=1;o<t.length;o++){var a=e.parse(t[o],o,zt);if(!a)return null;n.push(a)}return new Ht(i,n)},Ht.prototype.evaluate=function(t){if("boolean"===this.type.kind)return Boolean(this.args[0].evaluate(t));if("color"===this.type.kind){for(var e,r,i=0,n=this.args;i<n.length;i+=1){if(r=null,(e=n[i].evaluate(t))instanceof Bt)return e;if("string"==typeof e){var o=t.parseColor(e);if(o)return o}else if(Array.isArray(e)&&!(r=e.length<3||e.length>4?"Invalid rbga value "+JSON.stringify(e)+": expected an array containing either three or four numeric values.":Ut(e[0],e[1],e[2],e[3])))return new Bt(e[0]/255,e[1]/255,e[2]/255,e[3])}throw new qt(r||"Could not parse color from value '"+("string"==typeof e?e:JSON.stringify(e))+"'")}if("number"===this.type.kind){for(var a=null,s=0,u=this.args;s<u.length;s+=1){if(null===(a=u[s].evaluate(t)))return 0;var l=Number(a);if(!isNaN(l))return l}throw new qt("Could not convert "+JSON.stringify(a)+" to number.")}return"formatted"===this.type.kind?Ft.fromString(Nt(this.args[0].evaluate(t))):Nt(this.args[0].evaluate(t))},Ht.prototype.eachChild=function(t){this.args.forEach(t)},Ht.prototype.possibleOutputs=function(){return(t=[]).concat.apply(t,this.args.map(function(t){return t.possibleOutputs()}));var t},Ht.prototype.serialize=function(){if("formatted"===this.type.kind)return new Xt([{text:this.args[0],scale:null,font:null}]).serialize();var t=["to-"+this.type.kind];return this.eachChild(function(e){t.push(e.serialize())}),t};var Kt=["Unknown","Point","LineString","Polygon"],Yt=function(){this.globals=null,this.feature=null,this.featureState=null,this._parseColorCache={}};Yt.prototype.id=function(){return this.feature&&"id"in this.feature?this.feature.id:null},Yt.prototype.geometryType=function(){return this.feature?"number"==typeof this.feature.type?Kt[this.feature.type]:this.feature.type:null},Yt.prototype.properties=function(){return this.feature&&this.feature.properties||{}},Yt.prototype.parseColor=function(t){var e=this._parseColorCache[t];return e||(e=this._parseColorCache[t]=Bt.parse(t)),e};var Jt=function(t,e,r,i){this.name=t,this.type=e,this._evaluate=r,this.args=i};Jt.prototype.evaluate=function(t){return this._evaluate(t,this.args)},Jt.prototype.eachChild=function(t){this.args.forEach(t)},Jt.prototype.possibleOutputs=function(){return[void 0]},Jt.prototype.serialize=function(){return[this.name].concat(this.args.map(function(t){return t.serialize()}))},Jt.parse=function(t,e){var r=t[0],i=Jt.definitions[r];if(!i)return e.error('Unknown expression "'+r+'". If you wanted a literal array, use ["literal", [...]].',0);for(var n,o=Array.isArray(i)?i[0]:i.type,a=Array.isArray(i)?[[i[1],i[2]]]:i.overloads,s=a.filter(function(e){var r=e[0];return!Array.isArray(r)||r.length===t.length-1}),u=null,l=0,p=s;l<p.length;l+=1){var c=p[l],h=c[0],f=c[1];u=new ie(e.registry,e.path,null,e.scope);for(var d=[],m=!1,y=1;y<t.length;y++){var _=t[y],v=Array.isArray(h)?h[y-1]:h.type,g=u.parse(_,1+d.length,v);if(!g){m=!0;break}d.push(g)}if(!m)if(Array.isArray(h)&&h.length!==d.length)u.error("Expected "+h.length+" arguments, but found "+d.length+" instead.");else{for(var x=0;x<d.length;x++){var b=Array.isArray(h)?h[x]:h.type,w=d[x];u.concat(x+1).checkSubtype(b,w.type)}if(0===u.errors.length)return new Jt(r,o,f,d)}}if(1===s.length)(n=e.errors).push.apply(n,u.errors);else{for(var E=(s.length?s:a).map(function(t){var e;return e=t[0],Array.isArray(e)?"("+e.map(Pt).join(", ")+")":"("+Pt(e.type)+"...)"}).join(" | "),S=[],T=1;T<t.length;T++){var A=e.parse(t[T],1+S.length);if(!A)return null;S.push(Pt(A.type))}e.error("Expected arguments of type "+E+", but found ("+S.join(", ")+") instead.")}return null},Jt.register=function(t,e){for(var r in Jt.definitions=e,e)t[r]=Jt};var $t=function(t,e,r){this.type=It,this.locale=r,this.caseSensitive=t,this.diacriticSensitive=e};function Qt(t){if(t instanceof Jt){if("get"===t.name&&1===t.args.length)return!1;if("feature-state"===t.name)return!1;if("has"===t.name&&1===t.args.length)return!1;if("properties"===t.name||"geometry-type"===t.name||"id"===t.name)return!1;if(/^filter-/.test(t.name))return!1}var e=!0;return t.eachChild(function(t){e&&!Qt(t)&&(e=!1)}),e}function te(t){if(t instanceof Jt&&"feature-state"===t.name)return!1;var e=!0;return t.eachChild(function(t){e&&!te(t)&&(e=!1)}),e}function ee(t,e){if(t instanceof Jt&&e.indexOf(t.name)>=0)return!1;var r=!0;return t.eachChild(function(t){r&&!ee(t,e)&&(r=!1)}),r}$t.parse=function(t,e){if(2!==t.length)return e.error("Expected one argument.");var r=t[1];if("object"!=typeof r||Array.isArray(r))return e.error("Collator options argument must be an object.");var i=e.parse(void 0!==r["case-sensitive"]&&r["case-sensitive"],1,St);if(!i)return null;var n=e.parse(void 0!==r["diacritic-sensitive"]&&r["diacritic-sensitive"],1,St);if(!n)return null;var o=null;return r.locale&&!(o=e.parse(r.locale,1,Et))?null:new $t(i,n,o)},$t.prototype.evaluate=function(t){return new Rt(this.caseSensitive.evaluate(t),this.diacriticSensitive.evaluate(t),this.locale?this.locale.evaluate(t):null)},$t.prototype.eachChild=function(t){t(this.caseSensitive),t(this.diacriticSensitive),this.locale&&t(this.locale)},$t.prototype.possibleOutputs=function(){return[void 0]},$t.prototype.serialize=function(){var t={};return t["case-sensitive"]=this.caseSensitive.serialize(),t["diacritic-sensitive"]=this.diacriticSensitive.serialize(),this.locale&&(t.locale=this.locale.serialize()),["collator",t]};var re=function(t,e){this.type=e.type,this.name=t,this.boundExpression=e};re.parse=function(t,e){if(2!==t.length||"string"!=typeof t[1])return e.error("'var' expression requires exactly one string literal argument.");var r=t[1];return e.scope.has(r)?new re(r,e.scope.get(r)):e.error('Unknown variable "'+r+'". Make sure "'+r+'" has been bound in an enclosing "let" expression before using it.',1)},re.prototype.evaluate=function(t){return this.boundExpression.evaluate(t)},re.prototype.eachChild=function(){},re.prototype.possibleOutputs=function(){return[void 0]},re.prototype.serialize=function(){return["var",this.name]};var ie=function(t,e,r,i,n){void 0===e&&(e=[]),void 0===i&&(i=new xt),void 0===n&&(n=[]),this.registry=t,this.path=e,this.key=e.map(function(t){return"["+t+"]"}).join(""),this.scope=i,this.errors=n,this.expectedType=r};function ne(t,e){for(var r,i,n=0,o=t.length-1,a=0;n<=o;){if(r=t[a=Math.floor((n+o)/2)],i=t[a+1],e===r||e>r&&e<i)return a;if(r<e)n=a+1;else{if(!(r>e))throw new qt("Input is not a number.");o=a-1}}return Math.max(a-1,0)}ie.prototype.parse=function(t,e,r,i,n){return void 0===n&&(n={}),e?this.concat(e,r,i)._parse(t,n):this._parse(t,n)},ie.prototype._parse=function(t,e){function r(t,e,r){return"assert"===r?new Gt(e,[t]):"coerce"===r?new Ht(e,[t]):t}if(null!==t&&"string"!=typeof t&&"boolean"!=typeof t&&"number"!=typeof t||(t=["literal",t]),Array.isArray(t)){if(0===t.length)return this.error('Expected an array with at least one element. If you wanted a literal array, use ["literal", []].');var i=t[0];if("string"!=typeof i)return this.error("Expression name must be a string, but found "+typeof i+' instead. If you wanted a literal array, use ["literal", [...]].',0),null;var n=this.registry[i];if(n){var o=n.parse(t,this);if(!o)return null;if(this.expectedType){var a=this.expectedType,s=o.type;if("string"!==a.kind&&"number"!==a.kind&&"boolean"!==a.kind&&"object"!==a.kind&&"array"!==a.kind||"value"!==s.kind)if("color"!==a.kind&&"formatted"!==a.kind||"value"!==s.kind&&"string"!==s.kind){if(this.checkSubtype(a,s))return null}else o=r(o,a,e.typeAnnotation||"coerce");else o=r(o,a,e.typeAnnotation||"assert")}if(!(o instanceof jt)&&function t(e){if(e instanceof re)return t(e.boundExpression);if(e instanceof Jt&&"error"===e.name)return!1;if(e instanceof $t)return!1;var r=e instanceof Ht||e instanceof Gt,i=!0;return e.eachChild(function(e){i=r?i&&t(e):i&&e instanceof jt}),!!i&&Qt(e)&&ee(e,["zoom","heatmap-density","line-progress","is-supported-script"])}(o)){var u=new Yt;try{o=new jt(o.type,o.evaluate(u))}catch(t){return this.error(t.message),null}}return o}return this.error('Unknown expression "'+i+'". If you wanted a literal array, use ["literal", [...]].',0)}return void 0===t?this.error("'undefined' value invalid. Use null instead."):"object"==typeof t?this.error('Bare objects invalid. Use ["literal", {...}] instead.'):this.error("Expected an array, but found "+typeof t+" instead.")},ie.prototype.concat=function(t,e,r){var i="number"==typeof t?this.path.concat(t):this.path,n=r?this.scope.concat(r):this.scope;return new ie(this.registry,i,e||null,n,this.errors)},ie.prototype.error=function(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];var i=""+this.key+e.map(function(t){return"["+t+"]"}).join("");this.errors.push(new gt(i,t))},ie.prototype.checkSubtype=function(t,e){var r=Lt(t,e);return r&&this.error(r),r};var oe=function(t,e,r){this.type=t,this.input=e,this.labels=[],this.outputs=[];for(var i=0,n=r;i<n.length;i+=1){var o=n[i],a=o[0],s=o[1];this.labels.push(a),this.outputs.push(s)}};function ae(t,e,r){return t*(1-r)+e*r}oe.parse=function(t,e){var r=t[1],i=t.slice(2);if(t.length-1<4)return e.error("Expected at least 4 arguments, but found only "+(t.length-1)+".");if((t.length-1)%2!=0)return e.error("Expected an even number of arguments.");if(!(r=e.parse(r,1,wt)))return null;var n=[],o=null;e.expectedType&&"value"!==e.expectedType.kind&&(o=e.expectedType),i.unshift(-1/0);for(var a=0;a<i.length;a+=2){var s=i[a],u=i[a+1],l=a+1,p=a+2;if("number"!=typeof s)return e.error('Input/output pairs for "step" expressions must be defined using literal numeric values (not computed expressions) for the input values.',l);if(n.length&&n[n.length-1][0]>=s)return e.error('Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.',l);var c=e.parse(u,p,o);if(!c)return null;o=o||c.type,n.push([s,c])}return new oe(o,r,n)},oe.prototype.evaluate=function(t){var e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);var i=this.input.evaluate(t);if(i<=e[0])return r[0].evaluate(t);var n=e.length;return i>=e[n-1]?r[n-1].evaluate(t):r[ne(e,i)].evaluate(t)},oe.prototype.eachChild=function(t){t(this.input);for(var e=0,r=this.outputs;e<r.length;e+=1)t(r[e])},oe.prototype.possibleOutputs=function(){return(t=[]).concat.apply(t,this.outputs.map(function(t){return t.possibleOutputs()}));var t},oe.prototype.serialize=function(){for(var t=["step",this.input.serialize()],e=0;e<this.labels.length;e++)e>0&&t.push(this.labels[e]),t.push(this.outputs[e].serialize());return t};var se=Object.freeze({number:ae,color:function(t,e,r){return new Bt(ae(t.r,e.r,r),ae(t.g,e.g,r),ae(t.b,e.b,r),ae(t.a,e.a,r))},array:function(t,e,r){return t.map(function(t,i){return ae(t,e[i],r)})}}),ue=.95047,le=1,pe=1.08883,ce=4/29,he=6/29,fe=3*he*he,de=he*he*he,me=Math.PI/180,ye=180/Math.PI;function _e(t){return t>de?Math.pow(t,1/3):t/fe+ce}function ve(t){return t>he?t*t*t:fe*(t-ce)}function ge(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function xe(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function be(t){var e=xe(t.r),r=xe(t.g),i=xe(t.b),n=_e((.4124564*e+.3575761*r+.1804375*i)/ue),o=_e((.2126729*e+.7151522*r+.072175*i)/le);return{l:116*o-16,a:500*(n-o),b:200*(o-_e((.0193339*e+.119192*r+.9503041*i)/pe)),alpha:t.a}}function we(t){var e=(t.l+16)/116,r=isNaN(t.a)?e:e+t.a/500,i=isNaN(t.b)?e:e-t.b/200;return e=le*ve(e),r=ue*ve(r),i=pe*ve(i),new Bt(ge(3.2404542*r-1.5371385*e-.4985314*i),ge(-.969266*r+1.8760108*e+.041556*i),ge(.0556434*r-.2040259*e+1.0572252*i),t.alpha)}var Ee={forward:be,reverse:we,interpolate:function(t,e,r){return{l:ae(t.l,e.l,r),a:ae(t.a,e.a,r),b:ae(t.b,e.b,r),alpha:ae(t.alpha,e.alpha,r)}}},Se={forward:function(t){var e=be(t),r=e.l,i=e.a,n=e.b,o=Math.atan2(n,i)*ye;return{h:o<0?o+360:o,c:Math.sqrt(i*i+n*n),l:r,alpha:t.a}},reverse:function(t){var e=t.h*me,r=t.c;return we({l:t.l,a:Math.cos(e)*r,b:Math.sin(e)*r,alpha:t.alpha})},interpolate:function(t,e,r){return{h:function(t,e,r){var i=e-t;return t+r*(i>180||i<-180?i-360*Math.round(i/360):i)}(t.h,e.h,r),c:ae(t.c,e.c,r),l:ae(t.l,e.l,r),alpha:ae(t.alpha,e.alpha,r)}}},Te=Object.freeze({lab:Ee,hcl:Se}),Ae=function(t,e,r,i,n){this.type=t,this.operator=e,this.interpolation=r,this.input=i,this.labels=[],this.outputs=[];for(var o=0,a=n;o<a.length;o+=1){var s=a[o],u=s[0],l=s[1];this.labels.push(u),this.outputs.push(l)}};function ze(t,e,r,i){var n=i-r,o=t-r;return 0===n?0:1===e?o/n:(Math.pow(e,o)-1)/(Math.pow(e,n)-1)}Ae.interpolationFactor=function(t,e,i,n){var o=0;if("exponential"===t.name)o=ze(e,t.base,i,n);else if("linear"===t.name)o=ze(e,1,i,n);else if("cubic-bezier"===t.name){var a=t.controlPoints;o=new r(a[0],a[1],a[2],a[3]).solve(ze(e,1,i,n))}return o},Ae.parse=function(t,e){var r=t[0],i=t[1],n=t[2],o=t.slice(3);if(!Array.isArray(i)||0===i.length)return e.error("Expected an interpolation type expression.",1);if("linear"===i[0])i={name:"linear"};else if("exponential"===i[0]){var a=i[1];if("number"!=typeof a)return e.error("Exponential interpolation requires a numeric base.",1,1);i={name:"exponential",base:a}}else{if("cubic-bezier"!==i[0])return e.error("Unknown interpolation type "+String(i[0]),1,0);var s=i.slice(1);if(4!==s.length||s.some(function(t){return"number"!=typeof t||t<0||t>1}))return e.error("Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.",1);i={name:"cubic-bezier",controlPoints:s}}if(t.length-1<4)return e.error("Expected at least 4 arguments, but found only "+(t.length-1)+".");if((t.length-1)%2!=0)return e.error("Expected an even number of arguments.");if(!(n=e.parse(n,2,wt)))return null;var u=[],l=null;"interpolate-hcl"===r||"interpolate-lab"===r?l=Tt:e.expectedType&&"value"!==e.expectedType.kind&&(l=e.expectedType);for(var p=0;p<o.length;p+=2){var c=o[p],h=o[p+1],f=p+3,d=p+4;if("number"!=typeof c)return e.error('Input/output pairs for "interpolate" expressions must be defined using literal numeric values (not computed expressions) for the input values.',f);if(u.length&&u[u.length-1][0]>=c)return e.error('Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.',f);var m=e.parse(h,d,l);if(!m)return null;l=l||m.type,u.push([c,m])}return"number"===l.kind||"color"===l.kind||"array"===l.kind&&"number"===l.itemType.kind&&"number"==typeof l.N?new Ae(l,r,i,n,u):e.error("Type "+Pt(l)+" is not interpolatable.")},Ae.prototype.evaluate=function(t){var e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);var i=this.input.evaluate(t);if(i<=e[0])return r[0].evaluate(t);var n=e.length;if(i>=e[n-1])return r[n-1].evaluate(t);var o=ne(e,i),a=e[o],s=e[o+1],u=Ae.interpolationFactor(this.interpolation,i,a,s),l=r[o].evaluate(t),p=r[o+1].evaluate(t);return"interpolate"===this.operator?se[this.type.kind.toLowerCase()](l,p,u):"interpolate-hcl"===this.operator?Se.reverse(Se.interpolate(Se.forward(l),Se.forward(p),u)):Ee.reverse(Ee.interpolate(Ee.forward(l),Ee.forward(p),u))},Ae.prototype.eachChild=function(t){t(this.input);for(var e=0,r=this.outputs;e<r.length;e+=1)t(r[e])},Ae.prototype.possibleOutputs=function(){return(t=[]).concat.apply(t,this.outputs.map(function(t){return t.possibleOutputs()}));var t},Ae.prototype.serialize=function(){var t;t="linear"===this.interpolation.name?["linear"]:"exponential"===this.interpolation.name?1===this.interpolation.base?["linear"]:["exponential",this.interpolation.base]:["cubic-bezier"].concat(this.interpolation.controlPoints);for(var e=[this.operator,t,this.input.serialize()],r=0;r<this.labels.length;r++)e.push(this.labels[r],this.outputs[r].serialize());return e};var Ie=function(t,e){this.type=t,this.args=e};Ie.parse=function(t,e){if(t.length<2)return e.error("Expectected at least one argument.");var r=null,i=e.expectedType;i&&"value"!==i.kind&&(r=i);for(var n=[],o=0,a=t.slice(1);o<a.length;o+=1){var s=a[o],u=e.parse(s,1+n.length,r,void 0,{typeAnnotation:"omit"});if(!u)return null;r=r||u.type,n.push(u)}var l=i&&n.some(function(t){return Lt(i,t.type)});return new Ie(l?zt:r,n)},Ie.prototype.evaluate=function(t){for(var e=null,r=0,i=this.args;r<i.length&&null===(e=i[r].evaluate(t));r+=1);return e},Ie.prototype.eachChild=function(t){this.args.forEach(t)},Ie.prototype.possibleOutputs=function(){return(t=[]).concat.apply(t,this.args.map(function(t){return t.possibleOutputs()}));var t},Ie.prototype.serialize=function(){var t=["coalesce"];return this.eachChild(function(e){t.push(e.serialize())}),t};var Ce=function(t,e){this.type=e.type,this.bindings=[].concat(t),this.result=e};Ce.prototype.evaluate=function(t){return this.result.evaluate(t)},Ce.prototype.eachChild=function(t){for(var e=0,r=this.bindings;e<r.length;e+=1)t(r[e][1]);t(this.result)},Ce.parse=function(t,e){if(t.length<4)return e.error("Expected at least 3 arguments, but found "+(t.length-1)+" instead.");for(var r=[],i=1;i<t.length-1;i+=2){var n=t[i];if("string"!=typeof n)return e.error("Expected string, but found "+typeof n+" instead.",i);if(/[^a-zA-Z0-9_]/.test(n))return e.error("Variable names must contain only alphanumeric characters or '_'.",i);var o=e.parse(t[i+1],i+1);if(!o)return null;r.push([n,o])}var a=e.parse(t[t.length-1],t.length-1,e.expectedType,r);return a?new Ce(r,a):null},Ce.prototype.possibleOutputs=function(){return this.result.possibleOutputs()},Ce.prototype.serialize=function(){for(var t=["let"],e=0,r=this.bindings;e<r.length;e+=1){var i=r[e],n=i[0],o=i[1];t.push(n,o.serialize())}return t.push(this.result.serialize()),t};var ke=function(t,e,r){this.type=t,this.index=e,this.input=r};ke.parse=function(t,e){if(3!==t.length)return e.error("Expected 2 arguments, but found "+(t.length-1)+" instead.");var r=e.parse(t[1],1,wt),i=e.parse(t[2],2,kt(e.expectedType||zt));if(!r||!i)return null;var n=i.type;return new ke(n.itemType,r,i)},ke.prototype.evaluate=function(t){var e=this.index.evaluate(t),r=this.input.evaluate(t);if(e<0)throw new qt("Array index out of bounds: "+e+" < 0.");if(e>=r.length)throw new qt("Array index out of bounds: "+e+" > "+(r.length-1)+".");if(e!==Math.floor(e))throw new qt("Array index must be an integer, but found "+e+" instead.");return r[e]},ke.prototype.eachChild=function(t){t(this.index),t(this.input)},ke.prototype.possibleOutputs=function(){return[void 0]},ke.prototype.serialize=function(){return["at",this.index.serialize(),this.input.serialize()]};var Pe=function(t,e,r,i,n,o){this.inputType=t,this.type=e,this.input=r,this.cases=i,this.outputs=n,this.otherwise=o};Pe.parse=function(t,e){if(t.length<5)return e.error("Expected at least 4 arguments, but found only "+(t.length-1)+".");if(t.length%2!=1)return e.error("Expected an even number of arguments.");var r,i;e.expectedType&&"value"!==e.expectedType.kind&&(i=e.expectedType);for(var n={},o=[],a=2;a<t.length-1;a+=2){var s=t[a],u=t[a+1];Array.isArray(s)||(s=[s]);var l=e.concat(a);if(0===s.length)return l.error("Expected at least one branch label.");for(var p=0,c=s;p<c.length;p+=1){var h=c[p];if("number"!=typeof h&&"string"!=typeof h)return l.error("Branch labels must be numbers or strings.");if("number"==typeof h&&Math.abs(h)>Number.MAX_SAFE_INTEGER)return l.error("Branch labels must be integers no larger than "+Number.MAX_SAFE_INTEGER+".");if("number"==typeof h&&Math.floor(h)!==h)return l.error("Numeric branch labels must be integer values.");if(r){if(l.checkSubtype(r,Vt(h)))return null}else r=Vt(h);if(void 0!==n[String(h)])return l.error("Branch labels must be unique.");n[String(h)]=o.length}var f=e.parse(u,a,i);if(!f)return null;i=i||f.type,o.push(f)}var d=e.parse(t[1],1,zt);if(!d)return null;var m=e.parse(t[t.length-1],t.length-1,i);return m?"value"!==d.type.kind&&e.concat(1).checkSubtype(r,d.type)?null:new Pe(r,i,d,n,o,m):null},Pe.prototype.evaluate=function(t){var e=this.input.evaluate(t);return(Vt(e)===this.inputType&&this.outputs[this.cases[e]]||this.otherwise).evaluate(t)},Pe.prototype.eachChild=function(t){t(this.input),this.outputs.forEach(t),t(this.otherwise)},Pe.prototype.possibleOutputs=function(){return(t=[]).concat.apply(t,this.outputs.map(function(t){return t.possibleOutputs()})).concat(this.otherwise.possibleOutputs());var t},Pe.prototype.serialize=function(){for(var t=this,e=["match",this.input.serialize()],r=[],i={},n=0,o=Object.keys(this.cases).sort();n<o.length;n+=1){var a=o[n],s=i[t.cases[a]];void 0===s?(i[t.cases[a]]=r.length,r.push([t.cases[a],[a]])):r[s][1].push(a)}for(var u=function(e){return"number"===t.inputType.kind?Number(e):e},l=0,p=r;l<p.length;l+=1){var c=p[l],h=c[0],f=c[1];1===f.length?e.push(u(f[0])):e.push(f.map(u)),e.push(t.outputs[h].serialize())}return e.push(this.otherwise.serialize()),e};var Me=function(t,e,r){this.type=t,this.branches=e,this.otherwise=r};function Le(t,e){return"=="===t||"!="===t?"boolean"===e.kind||"string"===e.kind||"number"===e.kind||"null"===e.kind||"value"===e.kind:"string"===e.kind||"number"===e.kind||"value"===e.kind}function De(t,e,r,i){return 0===i.compare(e,r)}function Be(t,e,r){var i="=="!==t&&"!="!==t;return function(){function n(t,e,r){this.type=St,this.lhs=t,this.rhs=e,this.collator=r,this.hasUntypedArgument="value"===t.type.kind||"value"===e.type.kind}return n.parse=function(t,e){if(3!==t.length&&4!==t.length)return e.error("Expected two or three arguments.");var r=t[0],o=e.parse(t[1],1,zt);if(!o)return null;if(!Le(r,o.type))return e.concat(1).error('"'+r+"\" comparisons are not supported for type '"+Pt(o.type)+"'.");var a=e.parse(t[2],2,zt);if(!a)return null;if(!Le(r,a.type))return e.concat(2).error('"'+r+"\" comparisons are not supported for type '"+Pt(a.type)+"'.");if(o.type.kind!==a.type.kind&&"value"!==o.type.kind&&"value"!==a.type.kind)return e.error("Cannot compare types '"+Pt(o.type)+"' and '"+Pt(a.type)+"'.");i&&("value"===o.type.kind&&"value"!==a.type.kind?o=new Gt(a.type,[o]):"value"!==o.type.kind&&"value"===a.type.kind&&(a=new Gt(o.type,[a])));var s=null;if(4===t.length){if("string"!==o.type.kind&&"string"!==a.type.kind&&"value"!==o.type.kind&&"value"!==a.type.kind)return e.error("Cannot use collator to compare non-string types.");if(!(s=e.parse(t[3],3,It)))return null}return new n(o,a,s)},n.prototype.evaluate=function(n){var o=this.lhs.evaluate(n),a=this.rhs.evaluate(n);if(i&&this.hasUntypedArgument){var s=Vt(o),u=Vt(a);if(s.kind!==u.kind||"string"!==s.kind&&"number"!==s.kind)throw new qt('Expected arguments for "'+t+'" to be (string, string) or (number, number), but found ('+s.kind+", "+u.kind+") instead.")}if(this.collator&&!i&&this.hasUntypedArgument){var l=Vt(o),p=Vt(a);if("string"!==l.kind||"string"!==p.kind)return e(n,o,a)}return this.collator?r(n,o,a,this.collator.evaluate(n)):e(n,o,a)},n.prototype.eachChild=function(t){t(this.lhs),t(this.rhs),this.collator&&t(this.collator)},n.prototype.possibleOutputs=function(){return[!0,!1]},n.prototype.serialize=function(){var e=[t];return this.eachChild(function(t){e.push(t.serialize())}),e},n}()}Me.parse=function(t,e){if(t.length<4)return e.error("Expected at least 3 arguments, but found only "+(t.length-1)+".");if(t.length%2!=0)return e.error("Expected an odd number of arguments.");var r;e.expectedType&&"value"!==e.expectedType.kind&&(r=e.expectedType);for(var i=[],n=1;n<t.length-1;n+=2){var o=e.parse(t[n],n,St);if(!o)return null;var a=e.parse(t[n+1],n+1,r);if(!a)return null;i.push([o,a]),r=r||a.type}var s=e.parse(t[t.length-1],t.length-1,r);return s?new Me(r,i,s):null},Me.prototype.evaluate=function(t){for(var e=0,r=this.branches;e<r.length;e+=1){var i=r[e],n=i[0],o=i[1];if(n.evaluate(t))return o.evaluate(t)}return this.otherwise.evaluate(t)},Me.prototype.eachChild=function(t){for(var e=0,r=this.branches;e<r.length;e+=1){var i=r[e],n=i[0],o=i[1];t(n),t(o)}t(this.otherwise)},Me.prototype.possibleOutputs=function(){return(t=[]).concat.apply(t,this.branches.map(function(t){return t[0],t[1].possibleOutputs()})).concat(this.otherwise.possibleOutputs());var t},Me.prototype.serialize=function(){var t=["case"];return this.eachChild(function(e){t.push(e.serialize())}),t};var Re=Be("==",function(t,e,r){return e===r},De),Oe=Be("!=",function(t,e,r){return e!==r},function(t,e,r,i){return!De(0,e,r,i)}),Fe=Be("<",function(t,e,r){return e<r},function(t,e,r,i){return i.compare(e,r)<0}),Ue=Be(">",function(t,e,r){return e>r},function(t,e,r,i){return i.compare(e,r)>0}),Ve=Be("<=",function(t,e,r){return e<=r},function(t,e,r,i){return i.compare(e,r)<=0}),Ne=Be(">=",function(t,e,r){return e>=r},function(t,e,r,i){return i.compare(e,r)>=0}),je=function(t){this.type=wt,this.input=t};je.parse=function(t,e){if(2!==t.length)return e.error("Expected 1 argument, but found "+(t.length-1)+" instead.");var r=e.parse(t[1],1);return r?"array"!==r.type.kind&&"string"!==r.type.kind&&"value"!==r.type.kind?e.error("Expected argument of type string or array, but found "+Pt(r.type)+" instead."):new je(r):null},je.prototype.evaluate=function(t){var e=this.input.evaluate(t);if("string"==typeof e)return e.length;if(Array.isArray(e))return e.length;throw new qt("Expected value to be of type string or array, but found "+Pt(Vt(e))+" instead.")},je.prototype.eachChild=function(t){t(this.input)},je.prototype.possibleOutputs=function(){return[void 0]},je.prototype.serialize=function(){var t=["length"];return this.eachChild(function(e){t.push(e.serialize())}),t};var qe={"==":Re,"!=":Oe,">":Ue,"<":Fe,">=":Ne,"<=":Ve,array:Gt,at:ke,boolean:Gt,case:Me,coalesce:Ie,collator:$t,format:Xt,interpolate:Ae,"interpolate-hcl":Ae,"interpolate-lab":Ae,length:je,let:Ce,literal:jt,match:Pe,number:Gt,object:Gt,step:oe,string:Gt,"to-boolean":Ht,"to-color":Ht,"to-number":Ht,"to-string":Ht,var:re};function Ze(t,e){var r=e[0],i=e[1],n=e[2],o=e[3];r=r.evaluate(t),i=i.evaluate(t),n=n.evaluate(t);var a=o?o.evaluate(t):1,s=Ut(r,i,n,a);if(s)throw new qt(s);return new Bt(r/255*a,i/255*a,n/255*a,a)}function Ge(t,e){return t in e}function Xe(t,e){var r=e[t];return void 0===r?null:r}function We(t){return{type:t}}function He(t){return{result:"success",value:t}}function Ke(t){return{result:"error",value:t}}function Ye(t){return"data-driven"===t["property-type"]||"cross-faded-data-driven"===t["property-type"]}function Je(t){return!!t.expression&&t.expression.parameters.indexOf("zoom")>-1}function $e(t){return!!t.expression&&t.expression.interpolated}function Qe(t){return t instanceof Number?"number":t instanceof String?"string":t instanceof Boolean?"boolean":Array.isArray(t)?"array":null===t?"null":typeof t}function tr(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)}function er(t){return t}function rr(t,e,r){return void 0!==t?t:void 0!==e?e:void 0!==r?r:void 0}function ir(t,e,r,i,n){return rr(typeof r===n?i[r]:void 0,t.default,e.default)}function nr(t,e,r){if("number"!==Qe(r))return rr(t.default,e.default);var i=t.stops.length;if(1===i)return t.stops[0][1];if(r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[i-1][0])return t.stops[i-1][1];var n=sr(t.stops,r);return t.stops[n][1]}function or(t,e,r){var i=void 0!==t.base?t.base:1;if("number"!==Qe(r))return rr(t.default,e.default);var n=t.stops.length;if(1===n)return t.stops[0][1];if(r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[n-1][0])return t.stops[n-1][1];var o=sr(t.stops,r),a=function(t,e,r,i){var n=i-r,o=t-r;return 0===n?0:1===e?o/n:(Math.pow(e,o)-1)/(Math.pow(e,n)-1)}(r,i,t.stops[o][0],t.stops[o+1][0]),s=t.stops[o][1],u=t.stops[o+1][1],l=se[e.type]||er;if(t.colorSpace&&"rgb"!==t.colorSpace){var p=Te[t.colorSpace];l=function(t,e){return p.reverse(p.interpolate(p.forward(t),p.forward(e),a))}}return"function"==typeof s.evaluate?{evaluate:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var r=s.evaluate.apply(void 0,t),i=u.evaluate.apply(void 0,t);if(void 0!==r&&void 0!==i)return l(r,i,a)}}:l(s,u,a)}function ar(t,e,r){return"color"===e.type?r=Bt.parse(r):"formatted"===e.type?r=Ft.fromString(r.toString()):Qe(r)===e.type||"enum"===e.type&&e.values[r]||(r=void 0),rr(r,t.default,e.default)}function sr(t,e){for(var r,i,n=0,o=t.length-1,a=0;n<=o;){if(r=t[a=Math.floor((n+o)/2)][0],i=t[a+1][0],e===r||e>r&&e<i)return a;r<e?n=a+1:r>e&&(o=a-1)}return Math.max(a-1,0)}Jt.register(qe,{error:[{kind:"error"},[Et],function(t,e){var r=e[0];throw new qt(r.evaluate(t))}],typeof:[Et,[zt],function(t,e){return Pt(Vt(e[0].evaluate(t)))}],"to-rgba":[kt(wt,4),[Tt],function(t,e){return e[0].evaluate(t).toArray()}],rgb:[Tt,[wt,wt,wt],Ze],rgba:[Tt,[wt,wt,wt,wt],Ze],has:{type:St,overloads:[[[Et],function(t,e){return Ge(e[0].evaluate(t),t.properties())}],[[Et,At],function(t,e){var r=e[0],i=e[1];return Ge(r.evaluate(t),i.evaluate(t))}]]},get:{type:zt,overloads:[[[Et],function(t,e){return Xe(e[0].evaluate(t),t.properties())}],[[Et,At],function(t,e){var r=e[0],i=e[1];return Xe(r.evaluate(t),i.evaluate(t))}]]},"feature-state":[zt,[Et],function(t,e){return Xe(e[0].evaluate(t),t.featureState||{})}],properties:[At,[],function(t){return t.properties()}],"geometry-type":[Et,[],function(t){return t.geometryType()}],id:[zt,[],function(t){return t.id()}],zoom:[wt,[],function(t){return t.globals.zoom}],"heatmap-density":[wt,[],function(t){return t.globals.heatmapDensity||0}],"line-progress":[wt,[],function(t){return t.globals.lineProgress||0}],"+":[wt,We(wt),function(t,e){for(var r=0,i=0,n=e;i<n.length;i+=1)r+=n[i].evaluate(t);return r}],"*":[wt,We(wt),function(t,e){for(var r=1,i=0,n=e;i<n.length;i+=1)r*=n[i].evaluate(t);return r}],"-":{type:wt,overloads:[[[wt,wt],function(t,e){var r=e[0],i=e[1];return r.evaluate(t)-i.evaluate(t)}],[[wt],function(t,e){return-e[0].evaluate(t)}]]},"/":[wt,[wt,wt],function(t,e){var r=e[0],i=e[1];return r.evaluate(t)/i.evaluate(t)}],"%":[wt,[wt,wt],function(t,e){var r=e[0],i=e[1];return r.evaluate(t)%i.evaluate(t)}],ln2:[wt,[],function(){return Math.LN2}],pi:[wt,[],function(){return Math.PI}],e:[wt,[],function(){return Math.E}],"^":[wt,[wt,wt],function(t,e){var r=e[0],i=e[1];return Math.pow(r.evaluate(t),i.evaluate(t))}],sqrt:[wt,[wt],function(t,e){var r=e[0];return Math.sqrt(r.evaluate(t))}],log10:[wt,[wt],function(t,e){var r=e[0];return Math.log(r.evaluate(t))/Math.LN10}],ln:[wt,[wt],function(t,e){var r=e[0];return Math.log(r.evaluate(t))}],log2:[wt,[wt],function(t,e){var r=e[0];return Math.log(r.evaluate(t))/Math.LN2}],sin:[wt,[wt],function(t,e){var r=e[0];return Math.sin(r.evaluate(t))}],cos:[wt,[wt],function(t,e){var r=e[0];return Math.cos(r.evaluate(t))}],tan:[wt,[wt],function(t,e){var r=e[0];return Math.tan(r.evaluate(t))}],asin:[wt,[wt],function(t,e){var r=e[0];return Math.asin(r.evaluate(t))}],acos:[wt,[wt],function(t,e){var r=e[0];return Math.acos(r.evaluate(t))}],atan:[wt,[wt],function(t,e){var r=e[0];return Math.atan(r.evaluate(t))}],min:[wt,We(wt),function(t,e){return Math.min.apply(Math,e.map(function(e){return e.evaluate(t)}))}],max:[wt,We(wt),function(t,e){return Math.max.apply(Math,e.map(function(e){return e.evaluate(t)}))}],abs:[wt,[wt],function(t,e){var r=e[0];return Math.abs(r.evaluate(t))}],round:[wt,[wt],function(t,e){var r=e[0].evaluate(t);return r<0?-Math.round(-r):Math.round(r)}],floor:[wt,[wt],function(t,e){var r=e[0];return Math.floor(r.evaluate(t))}],ceil:[wt,[wt],function(t,e){var r=e[0];return Math.ceil(r.evaluate(t))}],"filter-==":[St,[Et,zt],function(t,e){var r=e[0],i=e[1];return t.properties()[r.value]===i.value}],"filter-id-==":[St,[zt],function(t,e){var r=e[0];return t.id()===r.value}],"filter-type-==":[St,[Et],function(t,e){var r=e[0];return t.geometryType()===r.value}],"filter-<":[St,[Et,zt],function(t,e){var r=e[0],i=e[1],n=t.properties()[r.value],o=i.value;return typeof n==typeof o&&n<o}],"filter-id-<":[St,[zt],function(t,e){var r=e[0],i=t.id(),n=r.value;return typeof i==typeof n&&i<n}],"filter->":[St,[Et,zt],function(t,e){var r=e[0],i=e[1],n=t.properties()[r.value],o=i.value;return typeof n==typeof o&&n>o}],"filter-id->":[St,[zt],function(t,e){var r=e[0],i=t.id(),n=r.value;return typeof i==typeof n&&i>n}],"filter-<=":[St,[Et,zt],function(t,e){var r=e[0],i=e[1],n=t.properties()[r.value],o=i.value;return typeof n==typeof o&&n<=o}],"filter-id-<=":[St,[zt],function(t,e){var r=e[0],i=t.id(),n=r.value;return typeof i==typeof n&&i<=n}],"filter->=":[St,[Et,zt],function(t,e){var r=e[0],i=e[1],n=t.properties()[r.value],o=i.value;return typeof n==typeof o&&n>=o}],"filter-id->=":[St,[zt],function(t,e){var r=e[0],i=t.id(),n=r.value;return typeof i==typeof n&&i>=n}],"filter-has":[St,[zt],function(t,e){return e[0].value in t.properties()}],"filter-has-id":[St,[],function(t){return null!==t.id()}],"filter-type-in":[St,[kt(Et)],function(t,e){return e[0].value.indexOf(t.geometryType())>=0}],"filter-id-in":[St,[kt(zt)],function(t,e){return e[0].value.indexOf(t.id())>=0}],"filter-in-small":[St,[Et,kt(zt)],function(t,e){var r=e[0];return e[1].value.indexOf(t.properties()[r.value])>=0}],"filter-in-large":[St,[Et,kt(zt)],function(t,e){var r=e[0],i=e[1];return function(t,e,r,i){for(;r<=i;){var n=r+i>>1;if(e[n]===t)return!0;e[n]>t?i=n-1:r=n+1}return!1}(t.properties()[r.value],i.value,0,i.value.length-1)}],all:{type:St,overloads:[[[St,St],function(t,e){var r=e[0],i=e[1];return r.evaluate(t)&&i.evaluate(t)}],[We(St),function(t,e){for(var r=0,i=e;r<i.length;r+=1)if(!i[r].evaluate(t))return!1;return!0}]]},any:{type:St,overloads:[[[St,St],function(t,e){var r=e[0],i=e[1];return r.evaluate(t)||i.evaluate(t)}],[We(St),function(t,e){for(var r=0,i=e;r<i.length;r+=1)if(i[r].evaluate(t))return!0;return!1}]]},"!":[St,[St],function(t,e){return!e[0].evaluate(t)}],"is-supported-script":[St,[Et],function(t,e){var r=e[0],i=t.globals&&t.globals.isSupportedScript;return!i||i(r.evaluate(t))}],upcase:[Et,[Et],function(t,e){return e[0].evaluate(t).toUpperCase()}],downcase:[Et,[Et],function(t,e){return e[0].evaluate(t).toLowerCase()}],concat:[Et,We(zt),function(t,e){return e.map(function(e){return Nt(e.evaluate(t))}).join("")}],"resolved-locale":[Et,[It],function(t,e){return e[0].evaluate(t).resolvedLocale()}]});var ur=function(t,e){var r;this.expression=t,this._warningHistory={},this._evaluator=new Yt,this._defaultValue="color"===(r=e).type&&tr(r.default)?new Bt(0,0,0,0):"color"===r.type?Bt.parse(r.default)||null:void 0===r.default?null:r.default,this._enumValues="enum"===e.type?e.values:null};function lr(t){return Array.isArray(t)&&t.length>0&&"string"==typeof t[0]&&t[0]in qe}function pr(t,e){var r=new ie(qe,[],function(t){var e={color:Tt,string:Et,number:wt,enum:Et,boolean:St,formatted:Ct};return"array"===t.type?kt(e[t.value]||zt,t.length):e[t.type]}(e)),i=r.parse(t,void 0,void 0,void 0,"string"===e.type?{typeAnnotation:"coerce"}:void 0);return i?He(new ur(i,e)):Ke(r.errors)}ur.prototype.evaluateWithoutErrorHandling=function(t,e,r){return this._evaluator.globals=t,this._evaluator.feature=e,this._evaluator.featureState=r,this.expression.evaluate(this._evaluator)},ur.prototype.evaluate=function(t,e,r){this._evaluator.globals=t,this._evaluator.feature=e||null,this._evaluator.featureState=r||null;try{var i=this.expression.evaluate(this._evaluator);if(null==i)return this._defaultValue;if(this._enumValues&&!(i in this._enumValues))throw new qt("Expected value to be one of "+Object.keys(this._enumValues).map(function(t){return JSON.stringify(t)}).join(", ")+", but found "+JSON.stringify(i)+" instead.");return i}catch(t){return this._warningHistory[t.message]||(this._warningHistory[t.message]=!0,"undefined"!=typeof console&&console.warn(t.message)),this._defaultValue}};var cr=function(t,e){this.kind=t,this._styleExpression=e,this.isStateDependent="constant"!==t&&!te(e.expression)};cr.prototype.evaluateWithoutErrorHandling=function(t,e,r){return this._styleExpression.evaluateWithoutErrorHandling(t,e,r)},cr.prototype.evaluate=function(t,e,r){return this._styleExpression.evaluate(t,e,r)};var hr=function(t,e,r){this.kind=t,this.zoomStops=r.labels,this._styleExpression=e,this.isStateDependent="camera"!==t&&!te(e.expression),r instanceof Ae&&(this._interpolationType=r.interpolation)};function fr(t,e){if("error"===(t=pr(t,e)).result)return t;var r=t.value.expression,i=Qt(r);if(!i&&!Ye(e))return Ke([new gt("","data expressions not supported")]);var n=ee(r,["zoom"]);if(!n&&!Je(e))return Ke([new gt("","zoom expressions not supported")]);var o=function t(e){var r=null;if(e instanceof Ce)r=t(e.result);else if(e instanceof Ie)for(var i=0,n=e.args;i<n.length;i+=1){var o=n[i];if(r=t(o))break}else(e instanceof oe||e instanceof Ae)&&e.input instanceof Jt&&"zoom"===e.input.name&&(r=e);return r instanceof gt?r:(e.eachChild(function(e){var i=t(e);i instanceof gt?r=i:!r&&i?r=new gt("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.'):r&&i&&r!==i&&(r=new gt("",'Only one zoom-based "step" or "interpolate" subexpression may be used in an expression.'))}),r)}(r);return o||n?o instanceof gt?Ke([o]):o instanceof Ae&&!$e(e)?Ke([new gt("",'"interpolate" expressions cannot be used with this property')]):He(o?new hr(i?"camera":"composite",t.value,o):new cr(i?"constant":"source",t.value)):Ke([new gt("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.')])}hr.prototype.evaluateWithoutErrorHandling=function(t,e,r){return this._styleExpression.evaluateWithoutErrorHandling(t,e,r)},hr.prototype.evaluate=function(t,e,r){return this._styleExpression.evaluate(t,e,r)},hr.prototype.interpolationFactor=function(t,e,r){return this._interpolationType?Ae.interpolationFactor(this._interpolationType,t,e,r):0};var dr=function(t,e){this._parameters=t,this._specification=e,yt(this,function t(e,r){var i,n,o,a="color"===r.type,s=e.stops&&"object"==typeof e.stops[0][0],u=s||void 0!==e.property,l=s||!u,p=e.type||($e(r)?"exponential":"interval");if(a&&((e=yt({},e)).stops&&(e.stops=e.stops.map(function(t){return[t[0],Bt.parse(t[1])]})),e.default?e.default=Bt.parse(e.default):e.default=Bt.parse(r.default)),e.colorSpace&&"rgb"!==e.colorSpace&&!Te[e.colorSpace])throw new Error("Unknown color space: "+e.colorSpace);if("exponential"===p)i=or;else if("interval"===p)i=nr;else if("categorical"===p){i=ir,n=Object.create(null);for(var c=0,h=e.stops;c<h.length;c+=1){var f=h[c];n[f[0]]=f[1]}o=typeof e.stops[0][0]}else{if("identity"!==p)throw new Error('Unknown function type "'+p+'"');i=ar}if(s){for(var d={},m=[],y=0;y<e.stops.length;y++){var _=e.stops[y],v=_[0].zoom;void 0===d[v]&&(d[v]={zoom:v,type:e.type,property:e.property,default:e.default,stops:[]},m.push(v)),d[v].stops.push([_[0].value,_[1]])}for(var g=[],x=0,b=m;x<b.length;x+=1){var w=b[x];g.push([d[w].zoom,t(d[w],r)])}return{kind:"composite",interpolationFactor:Ae.interpolationFactor.bind(void 0,{name:"linear"}),zoomStops:g.map(function(t){return t[0]}),evaluate:function(t,i){var n=t.zoom;return or({stops:g,base:e.base},r,n).evaluate(n,i)}}}return l?{kind:"camera",interpolationFactor:"exponential"===p?Ae.interpolationFactor.bind(void 0,{name:"exponential",base:void 0!==e.base?e.base:1}):function(){return 0},zoomStops:e.stops.map(function(t){return t[0]}),evaluate:function(t){var a=t.zoom;return i(e,r,a,n,o)}}:{kind:"source",evaluate:function(t,a){var s=a&&a.properties?a.properties[e.property]:void 0;return void 0===s?rr(e.default,r.default):i(e,r,s,n,o)}}}(this._parameters,this._specification))};function mr(t,e){if(tr(t))return new dr(t,e);if(lr(t)){var r=fr(t,e);if("error"===r.result)throw new Error(r.value.map(function(t){return t.key+": "+t.message}).join(", "));return r.value}var i=t;return"string"==typeof t&&"color"===e.type&&(i=Bt.parse(t)),{kind:"constant",evaluate:function(){return i}}}function yr(t){var e=t.key,r=t.value,i=t.valueSpec||{},n=t.objectElementValidators||{},o=t.style,a=t.styleSpec,s=[],u=Qe(r);if("object"!==u)return[new dt(e,r,"object expected, "+u+" found")];for(var l in r){var p=l.split(".")[0],c=i[p]||i["*"],h=void 0;if(n[p])h=n[p];else if(i[p])h=Vr;else if(n["*"])h=n["*"];else{if(!i["*"]){s.push(new dt(e,r[l],'unknown property "'+l+'"'));continue}h=Vr}s=s.concat(h({key:(e?e+".":e)+l,value:r[l],valueSpec:c,style:o,styleSpec:a,object:r,objectKey:l},r))}for(var f in i)n[f]||i[f].required&&void 0===i[f].default&&void 0===r[f]&&s.push(new dt(e,r,'missing required property "'+f+'"'));return s}function _r(t){var e=t.value,r=t.valueSpec,i=t.style,n=t.styleSpec,o=t.key,a=t.arrayElementValidator||Vr;if("array"!==Qe(e))return[new dt(o,e,"array expected, "+Qe(e)+" found")];if(r.length&&e.length!==r.length)return[new dt(o,e,"array length "+r.length+" expected, length "+e.length+" found")];if(r["min-length"]&&e.length<r["min-length"])return[new dt(o,e,"array length at least "+r["min-length"]+" expected, length "+e.length+" found")];var s={type:r.value};n.$version<7&&(s.function=r.function),"object"===Qe(r.value)&&(s=r.value);for(var u=[],l=0;l<e.length;l++)u=u.concat(a({array:e,arrayIndex:l,value:e[l],valueSpec:s,style:i,styleSpec:n,key:o+"["+l+"]"}));return u}function vr(t){var e=t.key,r=t.value,i=t.valueSpec,n=Qe(r);return"number"!==n?[new dt(e,r,"number expected, "+n+" found")]:"minimum"in i&&r<i.minimum?[new dt(e,r,r+" is less than the minimum value "+i.minimum)]:"maximum"in i&&r>i.maximum?[new dt(e,r,r+" is greater than the maximum value "+i.maximum)]:[]}function gr(t){var e,r,i,n=t.valueSpec,o=_t(t.value.type),a={},s="categorical"!==o&&void 0===t.value.property,u=!s,l="array"===Qe(t.value.stops)&&"array"===Qe(t.value.stops[0])&&"object"===Qe(t.value.stops[0][0]),p=yr({key:t.key,value:t.value,valueSpec:t.styleSpec.function,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{stops:function(t){if("identity"===o)return[new dt(t.key,t.value,'identity function may not have a "stops" property')];var e=[],r=t.value;return e=e.concat(_r({key:t.key,value:r,valueSpec:t.valueSpec,style:t.style,styleSpec:t.styleSpec,arrayElementValidator:c})),"array"===Qe(r)&&0===r.length&&e.push(new dt(t.key,r,"array must have at least one stop")),e},default:function(t){return Vr({key:t.key,value:t.value,valueSpec:n,style:t.style,styleSpec:t.styleSpec})}}});return"identity"===o&&s&&p.push(new dt(t.key,t.value,'missing required property "property"')),"identity"===o||t.value.stops||p.push(new dt(t.key,t.value,'missing required property "stops"')),"exponential"===o&&t.valueSpec.expression&&!$e(t.valueSpec)&&p.push(new dt(t.key,t.value,"exponential functions not supported")),t.styleSpec.$version>=8&&(u&&!Ye(t.valueSpec)?p.push(new dt(t.key,t.value,"property functions not supported")):s&&!Je(t.valueSpec)&&p.push(new dt(t.key,t.value,"zoom functions not supported"))),"categorical"!==o&&!l||void 0!==t.value.property||p.push(new dt(t.key,t.value,'"property" property is required')),p;function c(t){var e=[],o=t.value,s=t.key;if("array"!==Qe(o))return[new dt(s,o,"array expected, "+Qe(o)+" found")];if(2!==o.length)return[new dt(s,o,"array length 2 expected, length "+o.length+" found")];if(l){if("object"!==Qe(o[0]))return[new dt(s,o,"object expected, "+Qe(o[0])+" found")];if(void 0===o[0].zoom)return[new dt(s,o,"object stop key must have zoom")];if(void 0===o[0].value)return[new dt(s,o,"object stop key must have value")];if(i&&i>_t(o[0].zoom))return[new dt(s,o[0].zoom,"stop zoom values must appear in ascending order")];_t(o[0].zoom)!==i&&(i=_t(o[0].zoom),r=void 0,a={}),e=e.concat(yr({key:s+"[0]",value:o[0],valueSpec:{zoom:{}},style:t.style,styleSpec:t.styleSpec,objectElementValidators:{zoom:vr,value:h}}))}else e=e.concat(h({key:s+"[0]",value:o[0],valueSpec:{},style:t.style,styleSpec:t.styleSpec},o));return lr(vt(o[1]))?e.concat([new dt(s+"[1]",o[1],"expressions are not allowed in function stops.")]):e.concat(Vr({key:s+"[1]",value:o[1],valueSpec:n,style:t.style,styleSpec:t.styleSpec}))}function h(t,i){var s=Qe(t.value),u=_t(t.value),l=null!==t.value?t.value:i;if(e){if(s!==e)return[new dt(t.key,l,s+" stop domain type must match previous stop domain type "+e)]}else e=s;if("number"!==s&&"string"!==s&&"boolean"!==s)return[new dt(t.key,l,"stop domain value must be a number, string, or boolean")];if("number"!==s&&"categorical"!==o){var p="number expected, "+s+" found";return Ye(n)&&void 0===o&&(p+='\nIf you intended to use a categorical function, specify `"type": "categorical"`.'),[new dt(t.key,l,p)]}return"categorical"!==o||"number"!==s||isFinite(u)&&Math.floor(u)===u?"categorical"!==o&&"number"===s&&void 0!==r&&u<r?[new dt(t.key,l,"stop domain values must appear in ascending order")]:(r=u,"categorical"===o&&u in a?[new dt(t.key,l,"stop domain values must be unique")]:(a[u]=!0,[])):[new dt(t.key,l,"integer expected, found "+u)]}}function xr(t){var e=("property"===t.expressionContext?fr:pr)(vt(t.value),t.valueSpec);return"error"===e.result?e.value.map(function(e){return new dt(""+t.key+e.key,t.value,e.message)}):"property"===t.expressionContext&&"text-font"===t.propertyKey&&-1!==e.value._styleExpression.expression.possibleOutputs().indexOf(void 0)?[new dt(t.key,t.value,'Invalid data expression for "'+t.propertyKey+'". Output values must be contained as literals within the expression.')]:"property"!==t.expressionContext||"layout"!==t.propertyType||te(e.value._styleExpression.expression)?"filter"!==t.expressionContext||te(e.value.expression)?[]:[new dt(t.key,t.value,'"feature-state" data expressions are not supported with filters.')]:[new dt(t.key,t.value,'"feature-state" data expressions are not supported with layout properties.')]}function br(t){var e=t.key,r=t.value,i=t.valueSpec,n=[];return Array.isArray(i.values)?-1===i.values.indexOf(_t(r))&&n.push(new dt(e,r,"expected one of ["+i.values.join(", ")+"], "+JSON.stringify(r)+" found")):-1===Object.keys(i.values).indexOf(_t(r))&&n.push(new dt(e,r,"expected one of ["+Object.keys(i.values).join(", ")+"], "+JSON.stringify(r)+" found")),n}function wr(t){if(!0===t||!1===t)return!0;if(!Array.isArray(t)||0===t.length)return!1;switch(t[0]){case"has":return t.length>=2&&"$id"!==t[1]&&"$type"!==t[1];case"in":case"!in":case"!has":case"none":return!1;case"==":case"!=":case">":case">=":case"<":case"<=":return 3!==t.length||Array.isArray(t[1])||Array.isArray(t[2]);case"any":case"all":for(var e=0,r=t.slice(1);e<r.length;e+=1){var i=r[e];if(!wr(i)&&"boolean"!=typeof i)return!1}return!0;default:return!0}}dr.deserialize=function(t){return new dr(t._parameters,t._specification)},dr.serialize=function(t){return{_parameters:t._parameters,_specification:t._specification}};var Er={type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}};function Sr(t){if(null==t)return function(){return!0};wr(t)||(t=Ar(t));var e=pr(t,Er);if("error"===e.result)throw new Error(e.value.map(function(t){return t.key+": "+t.message}).join(", "));return function(t,r){return e.value.evaluate(t,r)}}function Tr(t,e){return t<e?-1:t>e?1:0}function Ar(t){if(!t)return!0;var e,r=t[0];return t.length<=1?"any"!==r:"=="===r?zr(t[1],t[2],"=="):"!="===r?kr(zr(t[1],t[2],"==")):"<"===r||">"===r||"<="===r||">="===r?zr(t[1],t[2],r):"any"===r?(e=t.slice(1),["any"].concat(e.map(Ar))):"all"===r?["all"].concat(t.slice(1).map(Ar)):"none"===r?["all"].concat(t.slice(1).map(Ar).map(kr)):"in"===r?Ir(t[1],t.slice(2)):"!in"===r?kr(Ir(t[1],t.slice(2))):"has"===r?Cr(t[1]):"!has"!==r||kr(Cr(t[1]))}function zr(t,e,r){switch(t){case"$type":return["filter-type-"+r,e];case"$id":return["filter-id-"+r,e];default:return["filter-"+r,t,e]}}function Ir(t,e){if(0===e.length)return!1;switch(t){case"$type":return["filter-type-in",["literal",e]];case"$id":return["filter-id-in",["literal",e]];default:return e.length>200&&!e.some(function(t){return typeof t!=typeof e[0]})?["filter-in-large",t,["literal",e.sort(Tr)]]:["filter-in-small",t,["literal",e]]}}function Cr(t){switch(t){case"$type":return!0;case"$id":return["filter-has-id"];default:return["filter-has",t]}}function kr(t){return["!",t]}function Pr(t){return wr(vt(t.value))?xr(yt({},t,{expressionContext:"filter",valueSpec:{value:"boolean"}})):function t(e){var r=e.value,i=e.key;if("array"!==Qe(r))return[new dt(i,r,"array expected, "+Qe(r)+" found")];var n,o=e.styleSpec,a=[];if(r.length<1)return[new dt(i,r,"filter array must have at least 1 element")];switch(a=a.concat(br({key:i+"[0]",value:r[0],valueSpec:o.filter_operator,style:e.style,styleSpec:e.styleSpec})),_t(r[0])){case"<":case"<=":case">":case">=":r.length>=2&&"$type"===_t(r[1])&&a.push(new dt(i,r,'"$type" cannot be use with operator "'+r[0]+'"'));case"==":case"!=":3!==r.length&&a.push(new dt(i,r,'filter array for operator "'+r[0]+'" must have 3 elements'));case"in":case"!in":r.length>=2&&"string"!==(n=Qe(r[1]))&&a.push(new dt(i+"[1]",r[1],"string expected, "+n+" found"));for(var s=2;s<r.length;s++)n=Qe(r[s]),"$type"===_t(r[1])?a=a.concat(br({key:i+"["+s+"]",value:r[s],valueSpec:o.geometry_type,style:e.style,styleSpec:e.styleSpec})):"string"!==n&&"number"!==n&&"boolean"!==n&&a.push(new dt(i+"["+s+"]",r[s],"string, number, or boolean expected, "+n+" found"));break;case"any":case"all":case"none":for(var u=1;u<r.length;u++)a=a.concat(t({key:i+"["+u+"]",value:r[u],style:e.style,styleSpec:e.styleSpec}));break;case"has":case"!has":n=Qe(r[1]),2!==r.length?a.push(new dt(i,r,'filter array for "'+r[0]+'" operator must have 2 elements')):"string"!==n&&a.push(new dt(i+"[1]",r[1],"string expected, "+n+" found"))}return a}(t)}function Mr(t,e){var r=t.key,i=t.style,n=t.styleSpec,o=t.value,a=t.objectKey,s=n[e+"_"+t.layerType];if(!s)return[];var u=a.match(/^(.*)-transition$/);if("paint"===e&&u&&s[u[1]]&&s[u[1]].transition)return Vr({key:r,value:o,valueSpec:n.transition,style:i,styleSpec:n});var l,p=t.valueSpec||s[a];if(!p)return[new dt(r,o,'unknown property "'+a+'"')];if("string"===Qe(o)&&Ye(p)&&!p.tokens&&(l=/^{([^}]+)}$/.exec(o)))return[new dt(r,o,'"'+a+'" does not support interpolation syntax\nUse an identity property function instead: `{ "type": "identity", "property": '+JSON.stringify(l[1])+" }`.")];var c=[];return"symbol"===t.layerType&&("text-field"===a&&i&&!i.glyphs&&c.push(new dt(r,o,'use of "text-field" requires a style "glyphs" property')),"text-font"===a&&tr(vt(o))&&"identity"===_t(o.type)&&c.push(new dt(r,o,'"text-font" does not support identity functions'))),c.concat(Vr({key:t.key,value:o,valueSpec:p,style:i,styleSpec:n,expressionContext:"property",propertyType:e,propertyKey:a}))}function Lr(t){return Mr(t,"paint")}function Dr(t){return Mr(t,"layout")}function Br(t){var e=[],r=t.value,i=t.key,n=t.style,o=t.styleSpec;r.type||r.ref||e.push(new dt(i,r,'either "type" or "ref" is required'));var a,s=_t(r.type),u=_t(r.ref);if(r.id)for(var l=_t(r.id),p=0;p<t.arrayIndex;p++){var c=n.layers[p];_t(c.id)===l&&e.push(new dt(i,r.id,'duplicate layer id "'+r.id+'", previously used at line '+c.id.__line__))}if("ref"in r)["type","source","source-layer","filter","layout"].forEach(function(t){t in r&&e.push(new dt(i,r[t],'"'+t+'" is prohibited for ref layers'))}),n.layers.forEach(function(t){_t(t.id)===u&&(a=t)}),a?a.ref?e.push(new dt(i,r.ref,"ref cannot reference another ref layer")):s=_t(a.type):e.push(new dt(i,r.ref,'ref layer "'+u+'" not found'));else if("background"!==s)if(r.source){var h=n.sources&&n.sources[r.source],f=h&&_t(h.type);h?"vector"===f&&"raster"===s?e.push(new dt(i,r.source,'layer "'+r.id+'" requires a raster source')):"raster"===f&&"raster"!==s?e.push(new dt(i,r.source,'layer "'+r.id+'" requires a vector source')):"vector"!==f||r["source-layer"]?"raster-dem"===f&&"hillshade"!==s?e.push(new dt(i,r.source,"raster-dem source can only be used with layer type 'hillshade'.")):"line"!==s||!r.paint||!r.paint["line-gradient"]||"geojson"===f&&h.lineMetrics||e.push(new dt(i,r,'layer "'+r.id+'" specifies a line-gradient, which requires a GeoJSON source with `lineMetrics` enabled.')):e.push(new dt(i,r,'layer "'+r.id+'" must specify a "source-layer"')):e.push(new dt(i,r.source,'source "'+r.source+'" not found'))}else e.push(new dt(i,r,'missing required property "source"'));return e=e.concat(yr({key:i,value:r,valueSpec:o.layer,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{"*":function(){return[]},type:function(){return Vr({key:i+".type",value:r.type,valueSpec:o.layer.type,style:t.style,styleSpec:t.styleSpec,object:r,objectKey:"type"})},filter:Pr,layout:function(t){return yr({layer:r,key:t.key,value:t.value,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{"*":function(t){return Dr(yt({layerType:s},t))}}})},paint:function(t){return yr({layer:r,key:t.key,value:t.value,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{"*":function(t){return Lr(yt({layerType:s},t))}}})}}}))}function Rr(t){var e=t.value,r=t.key,i=t.styleSpec,n=t.style;if(!e.type)return[new dt(r,e,'"type" is required')];var o=_t(e.type),a=[];switch(o){case"vector":case"raster":case"raster-dem":if(a=a.concat(yr({key:r,value:e,valueSpec:i["source_"+o.replace("-","_")],style:t.style,styleSpec:i})),"url"in e)for(var s in e)["type","url","tileSize"].indexOf(s)<0&&a.push(new dt(r+"."+s,e[s],'a source with a "url" property may not include a "'+s+'" property'));return a;case"geojson":return yr({key:r,value:e,valueSpec:i.source_geojson,style:n,styleSpec:i});case"video":return yr({key:r,value:e,valueSpec:i.source_video,style:n,styleSpec:i});case"image":return yr({key:r,value:e,valueSpec:i.source_image,style:n,styleSpec:i});case"canvas":return a.push(new dt(r,null,"Please use runtime APIs to add canvas sources, rather than including them in stylesheets.","source.canvas")),a;default:return br({key:r+".type",value:e.type,valueSpec:{values:["vector","raster","raster-dem","geojson","video","image"]},style:n,styleSpec:i})}}function Or(t){var e=t.value,r=t.styleSpec,i=r.light,n=t.style,o=[],a=Qe(e);if(void 0===e)return o;if("object"!==a)return o.concat([new dt("light",e,"object expected, "+a+" found")]);for(var s in e){var u=s.match(/^(.*)-transition$/);o=u&&i[u[1]]&&i[u[1]].transition?o.concat(Vr({key:s,value:e[s],valueSpec:r.transition,style:n,styleSpec:r})):i[s]?o.concat(Vr({key:s,value:e[s],valueSpec:i[s],style:n,styleSpec:r})):o.concat([new dt(s,e[s],'unknown property "'+s+'"')])}return o}function Fr(t){var e=t.value,r=t.key,i=Qe(e);return"string"!==i?[new dt(r,e,"string expected, "+i+" found")]:[]}var Ur={"*":function(){return[]},array:_r,boolean:function(t){var e=t.value,r=t.key,i=Qe(e);return"boolean"!==i?[new dt(r,e,"boolean expected, "+i+" found")]:[]},number:vr,color:function(t){var e=t.key,r=t.value,i=Qe(r);return"string"!==i?[new dt(e,r,"color expected, "+i+" found")]:null===Dt(r)?[new dt(e,r,'color expected, "'+r+'" found')]:[]},constants:mt,enum:br,filter:Pr,function:gr,layer:Br,object:yr,source:Rr,light:Or,string:Fr,formatted:function(t){return 0===Fr(t).length?[]:xr(t)}};function Vr(t){var e=t.value,r=t.valueSpec,i=t.styleSpec;return r.expression&&tr(_t(e))?gr(t):r.expression&&lr(vt(e))?xr(t):r.type&&Ur[r.type]?Ur[r.type](t):yr(yt({},t,{valueSpec:r.type?i[r.type]:r}))}function Nr(t){var e=t.value,r=t.key,i=Fr(t);return i.length?i:(-1===e.indexOf("{fontstack}")&&i.push(new dt(r,e,'"glyphs" url must include a "{fontstack}" token')),-1===e.indexOf("{range}")&&i.push(new dt(r,e,'"glyphs" url must include a "{range}" token')),i)}function jr(t,e){e=e||ft;var r=[];return r=r.concat(Vr({key:"",value:t,valueSpec:e.$root,styleSpec:e,style:t,objectElementValidators:{glyphs:Nr,"*":function(){return[]}}})),t.constants&&(r=r.concat(mt({key:"constants",value:t.constants,style:t,styleSpec:e}))),qr(r)}function qr(t){return[].concat(t).sort(function(t,e){return t.line-e.line})}function Zr(t){return function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];return qr(t.apply(this,e))}}jr.source=Zr(Rr),jr.light=Zr(Or),jr.layer=Zr(Br),jr.filter=Zr(Pr),jr.paintProperty=Zr(Lr),jr.layoutProperty=Zr(Dr);var Gr=jr,Xr=jr.light,Wr=jr.paintProperty,Hr=jr.layoutProperty;function Kr(t,e){var r=!1;if(e&&e.length)for(var i=0,n=e;i<n.length;i+=1){var o=n[i];t.fire(new ct(new Error(o.message))),r=!0}return r}var Yr=$r,Jr=3;function $r(t,e,r){var i=this.cells=[];if(t instanceof ArrayBuffer){this.arrayBuffer=t;var n=new Int32Array(this.arrayBuffer);t=n[0],e=n[1],r=n[2],this.d=e+2*r;for(var o=0;o<this.d*this.d;o++){var a=n[Jr+o],s=n[Jr+o+1];i.push(a===s?null:n.subarray(a,s))}var u=n[Jr+i.length],l=n[Jr+i.length+1];this.keys=n.subarray(u,l),this.bboxes=n.subarray(l),this.insert=this._insertReadonly}else{this.d=e+2*r;for(var p=0;p<this.d*this.d;p++)i.push([]);this.keys=[],this.bboxes=[]}this.n=e,this.extent=t,this.padding=r,this.scale=e/t,this.uid=0;var c=r/e*t;this.min=-c,this.max=t+c}$r.prototype.insert=function(t,e,r,i,n){this._forEachCell(e,r,i,n,this._insertCell,this.uid++),this.keys.push(t),this.bboxes.push(e),this.bboxes.push(r),this.bboxes.push(i),this.bboxes.push(n)},$r.prototype._insertReadonly=function(){throw"Cannot insert into a GridIndex created from an ArrayBuffer."},$r.prototype._insertCell=function(t,e,r,i,n,o){this.cells[n].push(o)},$r.prototype.query=function(t,e,r,i){var n=this.min,o=this.max;if(t<=n&&e<=n&&o<=r&&o<=i)return Array.prototype.slice.call(this.keys);var a=[];return this._forEachCell(t,e,r,i,this._queryCell,a,{}),a},$r.prototype._queryCell=function(t,e,r,i,n,o,a){var s=this.cells[n];if(null!==s)for(var u=this.keys,l=this.bboxes,p=0;p<s.length;p++){var c=s[p];if(void 0===a[c]){var h=4*c;t<=l[h+2]&&e<=l[h+3]&&r>=l[h+0]&&i>=l[h+1]?(a[c]=!0,o.push(u[c])):a[c]=!1}}},$r.prototype._forEachCell=function(t,e,r,i,n,o,a){for(var s=this._convertToCellCoord(t),u=this._convertToCellCoord(e),l=this._convertToCellCoord(r),p=this._convertToCellCoord(i),c=s;c<=l;c++)for(var h=u;h<=p;h++){var f=this.d*h+c;if(n.call(this,t,e,r,i,f,o,a))return}},$r.prototype._convertToCellCoord=function(t){return Math.max(0,Math.min(this.d-1,Math.floor(t*this.scale)+this.padding))},$r.prototype.toArrayBuffer=function(){if(this.arrayBuffer)return this.arrayBuffer;for(var t=this.cells,e=Jr+this.cells.length+1+1,r=0,i=0;i<this.cells.length;i++)r+=this.cells[i].length;var n=new Int32Array(e+r+this.keys.length+this.bboxes.length);n[0]=this.extent,n[1]=this.n,n[2]=this.padding;for(var o=e,a=0;a<t.length;a++){var s=t[a];n[Jr+a]=o,n.set(s,o),o+=s.length}return n[Jr+t.length]=o,n.set(this.keys,o),o+=this.keys.length,n[Jr+t.length+1]=o,n.set(this.bboxes,o),o+=this.bboxes.length,n.buffer};var Qr=self.ImageData,ti={};function ei(t,e,r){void 0===r&&(r={}),Object.defineProperty(e,"_classRegistryKey",{value:t,writeable:!1}),ti[t]={klass:e,omit:r.omit||[],shallow:r.shallow||[]}}for(var ri in ei("Object",Object),Yr.serialize=function(t,e){var r=t.toArrayBuffer();return e&&e.push(r),{buffer:r}},Yr.deserialize=function(t){return new Yr(t.buffer)},ei("Grid",Yr),ei("Color",Bt),ei("Error",Error),ei("StylePropertyFunction",dr),ei("StyleExpression",ur,{omit:["_evaluator"]}),ei("ZoomDependentExpression",hr),ei("ZoomConstantExpression",cr),ei("CompoundExpression",Jt,{omit:["_evaluate"]}),qe)qe[ri]._classRegistryKey||ei("Expression_"+ri,qe[ri]);function ii(t,e){if(null==t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp)return t;if(t instanceof ArrayBuffer)return e&&e.push(t),t;if(ArrayBuffer.isView(t)){var r=t;return e&&e.push(r.buffer),r}if(t instanceof Qr)return e&&e.push(t.data.buffer),t;if(Array.isArray(t)){for(var i=[],n=0,o=t;n<o.length;n+=1){var a=o[n];i.push(ii(a,e))}return i}if("object"==typeof t){var s=t.constructor,u=s._classRegistryKey;if(!u)throw new Error("can't serialize object of unregistered class");var l=s.serialize?s.serialize(t,e):{};if(!s.serialize){for(var p in t)if(t.hasOwnProperty(p)&&!(ti[u].omit.indexOf(p)>=0)){var c=t[p];l[p]=ti[u].shallow.indexOf(p)>=0?c:ii(c,e)}t instanceof Error&&(l.message=t.message)}if(l.$name)throw new Error("$name property is reserved for worker serialization logic.");return"Object"!==u&&(l.$name=u),l}throw new Error("can't serialize object of type "+typeof t)}function ni(t){if(null==t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp||t instanceof ArrayBuffer||ArrayBuffer.isView(t)||t instanceof Qr)return t;if(Array.isArray(t))return t.map(ni);if("object"==typeof t){var e=t.$name||"Object",r=ti[e].klass;if(!r)throw new Error("can't deserialize unregistered class "+e);if(r.deserialize)return r.deserialize(t);for(var i=Object.create(r.prototype),n=0,o=Object.keys(t);n<o.length;n+=1){var a=o[n];if("$name"!==a){var s=t[a];i[a]=ti[e].shallow.indexOf(a)>=0?s:ni(s)}}return i}throw new Error("can't deserialize object of type "+typeof t)}var oi=function(){this.first=!0};oi.prototype.update=function(t,e){var r=Math.floor(t);return this.first?(this.first=!1,this.lastIntegerZoom=r,this.lastIntegerZoomTime=0,this.lastZoom=t,this.lastFloorZoom=r,!0):(this.lastFloorZoom>r?(this.lastIntegerZoom=r+1,this.lastIntegerZoomTime=e):this.lastFloorZoom<r&&(this.lastIntegerZoom=r,this.lastIntegerZoomTime=e),t!==this.lastZoom&&(this.lastZoom=t,this.lastFloorZoom=r,!0))};var ai={"Latin-1 Supplement":function(t){return t>=128&&t<=255},Arabic:function(t){return t>=1536&&t<=1791},"Arabic Supplement":function(t){return t>=1872&&t<=1919},"Arabic Extended-A":function(t){return t>=2208&&t<=2303},"Hangul Jamo":function(t){return t>=4352&&t<=4607},"Unified Canadian Aboriginal Syllabics":function(t){return t>=5120&&t<=5759},Khmer:function(t){return t>=6016&&t<=6143},"Unified Canadian Aboriginal Syllabics Extended":function(t){return t>=6320&&t<=6399},"General Punctuation":function(t){return t>=8192&&t<=8303},"Letterlike Symbols":function(t){return t>=8448&&t<=8527},"Number Forms":function(t){return t>=8528&&t<=8591},"Miscellaneous Technical":function(t){return t>=8960&&t<=9215},"Control Pictures":function(t){return t>=9216&&t<=9279},"Optical Character Recognition":function(t){return t>=9280&&t<=9311},"Enclosed Alphanumerics":function(t){return t>=9312&&t<=9471},"Geometric Shapes":function(t){return t>=9632&&t<=9727},"Miscellaneous Symbols":function(t){return t>=9728&&t<=9983},"Miscellaneous Symbols and Arrows":function(t){return t>=11008&&t<=11263},"CJK Radicals Supplement":function(t){return t>=11904&&t<=12031},"Kangxi Radicals":function(t){return t>=12032&&t<=12255},"Ideographic Description Characters":function(t){return t>=12272&&t<=12287},"CJK Symbols and Punctuation":function(t){return t>=12288&&t<=12351},Hiragana:function(t){return t>=12352&&t<=12447},Katakana:function(t){return t>=12448&&t<=12543},Bopomofo:function(t){return t>=12544&&t<=12591},"Hangul Compatibility Jamo":function(t){return t>=12592&&t<=12687},Kanbun:function(t){return t>=12688&&t<=12703},"Bopomofo Extended":function(t){return t>=12704&&t<=12735},"CJK Strokes":function(t){return t>=12736&&t<=12783},"Katakana Phonetic Extensions":function(t){return t>=12784&&t<=12799},"Enclosed CJK Letters and Months":function(t){return t>=12800&&t<=13055},"CJK Compatibility":function(t){return t>=13056&&t<=13311},"CJK Unified Ideographs Extension A":function(t){return t>=13312&&t<=19903},"Yijing Hexagram Symbols":function(t){return t>=19904&&t<=19967},"CJK Unified Ideographs":function(t){return t>=19968&&t<=40959},"Yi Syllables":function(t){return t>=40960&&t<=42127},"Yi Radicals":function(t){return t>=42128&&t<=42191},"Hangul Jamo Extended-A":function(t){return t>=43360&&t<=43391},"Hangul Syllables":function(t){return t>=44032&&t<=55215},"Hangul Jamo Extended-B":function(t){return t>=55216&&t<=55295},"Private Use Area":function(t){return t>=57344&&t<=63743},"CJK Compatibility Ideographs":function(t){return t>=63744&&t<=64255},"Arabic Presentation Forms-A":function(t){return t>=64336&&t<=65023},"Vertical Forms":function(t){return t>=65040&&t<=65055},"CJK Compatibility Forms":function(t){return t>=65072&&t<=65103},"Small Form Variants":function(t){return t>=65104&&t<=65135},"Arabic Presentation Forms-B":function(t){return t>=65136&&t<=65279},"Halfwidth and Fullwidth Forms":function(t){return t>=65280&&t<=65519}};function si(t){for(var e=0,r=t;e<r.length;e+=1)if(li(r[e].charCodeAt(0)))return!0;return!1}function ui(t){return!(ai.Arabic(t)||ai["Arabic Supplement"](t)||ai["Arabic Extended-A"](t)||ai["Arabic Presentation Forms-A"](t)||ai["Arabic Presentation Forms-B"](t))}function li(t){return!(746!==t&&747!==t&&(t<4352||!(ai["Bopomofo Extended"](t)||ai.Bopomofo(t)||ai["CJK Compatibility Forms"](t)&&!(t>=65097&&t<=65103)||ai["CJK Compatibility Ideographs"](t)||ai["CJK Compatibility"](t)||ai["CJK Radicals Supplement"](t)||ai["CJK Strokes"](t)||!(!ai["CJK Symbols and Punctuation"](t)||t>=12296&&t<=12305||t>=12308&&t<=12319||12336===t)||ai["CJK Unified Ideographs Extension A"](t)||ai["CJK Unified Ideographs"](t)||ai["Enclosed CJK Letters and Months"](t)||ai["Hangul Compatibility Jamo"](t)||ai["Hangul Jamo Extended-A"](t)||ai["Hangul Jamo Extended-B"](t)||ai["Hangul Jamo"](t)||ai["Hangul Syllables"](t)||ai.Hiragana(t)||ai["Ideographic Description Characters"](t)||ai.Kanbun(t)||ai["Kangxi Radicals"](t)||ai["Katakana Phonetic Extensions"](t)||ai.Katakana(t)&&12540!==t||!(!ai["Halfwidth and Fullwidth Forms"](t)||65288===t||65289===t||65293===t||t>=65306&&t<=65310||65339===t||65341===t||65343===t||t>=65371&&t<=65503||65507===t||t>=65512&&t<=65519)||!(!ai["Small Form Variants"](t)||t>=65112&&t<=65118||t>=65123&&t<=65126)||ai["Unified Canadian Aboriginal Syllabics"](t)||ai["Unified Canadian Aboriginal Syllabics Extended"](t)||ai["Vertical Forms"](t)||ai["Yijing Hexagram Symbols"](t)||ai["Yi Syllables"](t)||ai["Yi Radicals"](t))))}function pi(t){return!(li(t)||function(t){return!!(ai["Latin-1 Supplement"](t)&&(167===t||169===t||174===t||177===t||188===t||189===t||190===t||215===t||247===t)||ai["General Punctuation"](t)&&(8214===t||8224===t||8225===t||8240===t||8241===t||8251===t||8252===t||8258===t||8263===t||8264===t||8265===t||8273===t)||ai["Letterlike Symbols"](t)||ai["Number Forms"](t)||ai["Miscellaneous Technical"](t)&&(t>=8960&&t<=8967||t>=8972&&t<=8991||t>=8996&&t<=9e3||9003===t||t>=9085&&t<=9114||t>=9150&&t<=9165||9167===t||t>=9169&&t<=9179||t>=9186&&t<=9215)||ai["Control Pictures"](t)&&9251!==t||ai["Optical Character Recognition"](t)||ai["Enclosed Alphanumerics"](t)||ai["Geometric Shapes"](t)||ai["Miscellaneous Symbols"](t)&&!(t>=9754&&t<=9759)||ai["Miscellaneous Symbols and Arrows"](t)&&(t>=11026&&t<=11055||t>=11088&&t<=11097||t>=11192&&t<=11243)||ai["CJK Symbols and Punctuation"](t)||ai.Katakana(t)||ai["Private Use Area"](t)||ai["CJK Compatibility Forms"](t)||ai["Small Form Variants"](t)||ai["Halfwidth and Fullwidth Forms"](t)||8734===t||8756===t||8757===t||t>=9984&&t<=10087||t>=10102&&t<=10131||65532===t||65533===t)}(t))}function ci(t,e){return!(!e&&(t>=1424&&t<=2303||ai["Arabic Presentation Forms-A"](t)||ai["Arabic Presentation Forms-B"](t))||t>=2304&&t<=3583||t>=3840&&t<=4255||ai.Khmer(t))}var hi,fi=!1,di=null,mi=!1,yi=new ht,_i={applyArabicShaping:null,processBidirectionalText:null,processStyledBidirectionalText:null,isLoaded:function(){return mi||null!=_i.applyArabicShaping}},vi=function(t,e){this.zoom=t,e?(this.now=e.now,this.fadeDuration=e.fadeDuration,this.zoomHistory=e.zoomHistory,this.transition=e.transition):(this.now=0,this.fadeDuration=0,this.zoomHistory=new oi,this.transition={})};vi.prototype.isSupportedScript=function(t){return function(t,e){for(var r=0,i=t;r<i.length;r+=1)if(!ci(i[r].charCodeAt(0),e))return!1;return!0}(t,_i.isLoaded())},vi.prototype.crossFadingFactor=function(){return 0===this.fadeDuration?1:Math.min((this.now-this.zoomHistory.lastIntegerZoomTime)/this.fadeDuration,1)},vi.prototype.getCrossfadeParameters=function(){var t=this.zoom,e=t-Math.floor(t),r=this.crossFadingFactor();return t>this.zoomHistory.lastIntegerZoom?{fromScale:2,toScale:1,t:e+(1-e)*r}:{fromScale:.5,toScale:1,t:1-(1-r)*e}};var gi=function(t,e){this.property=t,this.value=e,this.expression=mr(void 0===e?t.specification.default:e,t.specification)};gi.prototype.isDataDriven=function(){return"source"===this.expression.kind||"composite"===this.expression.kind},gi.prototype.possiblyEvaluate=function(t){return this.property.possiblyEvaluate(this,t)};var xi=function(t){this.property=t,this.value=new gi(t,void 0)};xi.prototype.transitioned=function(t,e){return new wi(this.property,this.value,e,c({},t.transition,this.transition),t.now)},xi.prototype.untransitioned=function(){return new wi(this.property,this.value,null,{},0)};var bi=function(t){this._properties=t,this._values=Object.create(t.defaultTransitionablePropertyValues)};bi.prototype.getValue=function(t){return x(this._values[t].value.value)},bi.prototype.setValue=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new xi(this._values[t].property)),this._values[t].value=new gi(this._values[t].property,null===e?void 0:x(e))},bi.prototype.getTransition=function(t){return x(this._values[t].transition)},bi.prototype.setTransition=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new xi(this._values[t].property)),this._values[t].transition=x(e)||void 0},bi.prototype.serialize=function(){for(var t={},e=0,r=Object.keys(this._values);e<r.length;e+=1){var i=r[e],n=this.getValue(i);void 0!==n&&(t[i]=n);var o=this.getTransition(i);void 0!==o&&(t[i+"-transition"]=o)}return t},bi.prototype.transitioned=function(t,e){for(var r=new Ei(this._properties),i=0,n=Object.keys(this._values);i<n.length;i+=1){var o=n[i];r._values[o]=this._values[o].transitioned(t,e._values[o])}return r},bi.prototype.untransitioned=function(){for(var t=new Ei(this._properties),e=0,r=Object.keys(this._values);e<r.length;e+=1){var i=r[e];t._values[i]=this._values[i].untransitioned()}return t};var wi=function(t,e,r,i,n){this.property=t,this.value=e,this.begin=n+i.delay||0,this.end=this.begin+i.duration||0,t.specification.transition&&(i.delay||i.duration)&&(this.prior=r)};wi.prototype.possiblyEvaluate=function(t){var e=t.now||0,r=this.value.possiblyEvaluate(t),i=this.prior;if(i){if(e>this.end)return this.prior=null,r;if(this.value.isDataDriven())return this.prior=null,r;if(e<this.begin)return i.possiblyEvaluate(t);var n=(e-this.begin)/(this.end-this.begin);return this.property.interpolate(i.possiblyEvaluate(t),r,function(t){if(n<=0)return 0;if(n>=1)return 1;var e=n*n,r=e*n;return 4*(n<.5?r:3*(n-e)+r-.75)}())}return r};var Ei=function(t){this._properties=t,this._values=Object.create(t.defaultTransitioningPropertyValues)};Ei.prototype.possiblyEvaluate=function(t){for(var e=new Ai(this._properties),r=0,i=Object.keys(this._values);r<i.length;r+=1){var n=i[r];e._values[n]=this._values[n].possiblyEvaluate(t)}return e},Ei.prototype.hasTransition=function(){for(var t=0,e=Object.keys(this._values);t<e.length;t+=1){var r=e[t];if(this._values[r].prior)return!0}return!1};var Si=function(t){this._properties=t,this._values=Object.create(t.defaultPropertyValues)};Si.prototype.getValue=function(t){return x(this._values[t].value)},Si.prototype.setValue=function(t,e){this._values[t]=new gi(this._values[t].property,null===e?void 0:x(e))},Si.prototype.serialize=function(){for(var t={},e=0,r=Object.keys(this._values);e<r.length;e+=1){var i=r[e],n=this.getValue(i);void 0!==n&&(t[i]=n)}return t},Si.prototype.possiblyEvaluate=function(t){for(var e=new Ai(this._properties),r=0,i=Object.keys(this._values);r<i.length;r+=1){var n=i[r];e._values[n]=this._values[n].possiblyEvaluate(t)}return e};var Ti=function(t,e,r){this.property=t,this.value=e,this.parameters=r};Ti.prototype.isConstant=function(){return"constant"===this.value.kind},Ti.prototype.constantOr=function(t){return"constant"===this.value.kind?this.value.value:t},Ti.prototype.evaluate=function(t,e){return this.property.evaluate(this.value,this.parameters,t,e)};var Ai=function(t){this._properties=t,this._values=Object.create(t.defaultPossiblyEvaluatedValues)};Ai.prototype.get=function(t){return this._values[t]};var zi=function(t){this.specification=t};zi.prototype.possiblyEvaluate=function(t,e){return t.expression.evaluate(e)},zi.prototype.interpolate=function(t,e,r){var i=se[this.specification.type];return i?i(t,e,r):t};var Ii=function(t){this.specification=t};Ii.prototype.possiblyEvaluate=function(t,e){return"constant"===t.expression.kind||"camera"===t.expression.kind?new Ti(this,{kind:"constant",value:t.expression.evaluate(e)},e):new Ti(this,t.expression,e)},Ii.prototype.interpolate=function(t,e,r){if("constant"!==t.value.kind||"constant"!==e.value.kind)return t;if(void 0===t.value.value||void 0===e.value.value)return new Ti(this,{kind:"constant",value:void 0},t.parameters);var i=se[this.specification.type];return i?new Ti(this,{kind:"constant",value:i(t.value.value,e.value.value,r)},t.parameters):t},Ii.prototype.evaluate=function(t,e,r,i){return"constant"===t.kind?t.value:t.evaluate(e,r,i)};var Ci=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.possiblyEvaluate=function(t,e){if(void 0===t.value)return new Ti(this,{kind:"constant",value:void 0},e);if("constant"===t.expression.kind){var r=t.expression.evaluate(e),i=this._calculate(r,r,r,e);return new Ti(this,{kind:"constant",value:i},e)}if("camera"===t.expression.kind){var n=this._calculate(t.expression.evaluate({zoom:e.zoom-1}),t.expression.evaluate({zoom:e.zoom}),t.expression.evaluate({zoom:e.zoom+1}),e);return new Ti(this,{kind:"constant",value:n},e)}return new Ti(this,t.expression,e)},e.prototype.evaluate=function(t,e,r,i){if("source"===t.kind){var n=t.evaluate(e,r,i);return this._calculate(n,n,n,e)}return"composite"===t.kind?this._calculate(t.evaluate({zoom:Math.floor(e.zoom)-1},r,i),t.evaluate({zoom:Math.floor(e.zoom)},r,i),t.evaluate({zoom:Math.floor(e.zoom)+1},r,i),e):t.value},e.prototype._calculate=function(t,e,r,i){return i.zoom>i.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}},e.prototype.interpolate=function(t){return t},e}(Ii),ki=function(t){this.specification=t};ki.prototype.possiblyEvaluate=function(t,e){if(void 0!==t.value){if("constant"===t.expression.kind){var r=t.expression.evaluate(e);return this._calculate(r,r,r,e)}return this._calculate(t.expression.evaluate(new vi(Math.floor(e.zoom-1),e)),t.expression.evaluate(new vi(Math.floor(e.zoom),e)),t.expression.evaluate(new vi(Math.floor(e.zoom+1),e)),e)}},ki.prototype._calculate=function(t,e,r,i){return i.zoom>i.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}},ki.prototype.interpolate=function(t){return t};var Pi=function(t){this.specification=t};Pi.prototype.possiblyEvaluate=function(t,e){return!!t.expression.evaluate(e)},Pi.prototype.interpolate=function(){return!1};var Mi=function(t){for(var e in this.properties=t,this.defaultPropertyValues={},this.defaultTransitionablePropertyValues={},this.defaultTransitioningPropertyValues={},this.defaultPossiblyEvaluatedValues={},t){var r=t[e],i=this.defaultPropertyValues[e]=new gi(r,void 0),n=this.defaultTransitionablePropertyValues[e]=new xi(r);this.defaultTransitioningPropertyValues[e]=n.untransitioned(),this.defaultPossiblyEvaluatedValues[e]=i.possiblyEvaluate({})}};ei("DataDrivenProperty",Ii),ei("DataConstantProperty",zi),ei("CrossFadedDataDrivenProperty",Ci),ei("CrossFadedProperty",ki),ei("ColorRampProperty",Pi);var Li=function(t){function e(e,r){if(t.call(this),this.id=e.id,this.type=e.type,this.visibility="visible",this._featureFilter=function(){return!0},"custom"!==e.type&&(e=e,this.metadata=e.metadata,this.minzoom=e.minzoom,this.maxzoom=e.maxzoom,"background"!==e.type&&(this.source=e.source,this.sourceLayer=e["source-layer"],this.filter=e.filter),r.layout&&(this._unevaluatedLayout=new Si(r.layout)),r.paint)){for(var i in this._transitionablePaint=new bi(r.paint),e.paint)this.setPaintProperty(i,e.paint[i],{validate:!1});for(var n in e.layout)this.setLayoutProperty(n,e.layout[n],{validate:!1});this._transitioningPaint=this._transitionablePaint.untransitioned()}}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getCrossfadeParameters=function(){return this._crossfadeParameters},e.prototype.getLayoutProperty=function(t){return"visibility"===t?this.visibility:this._unevaluatedLayout.getValue(t)},e.prototype.setLayoutProperty=function(t,e,r){if(void 0===r&&(r={}),null!=e){var i="layers."+this.id+".layout."+t;if(this._validate(Hr,i,t,e,r))return}"visibility"!==t?this._unevaluatedLayout.setValue(t,e):this.visibility="none"===e?e:"visible"},e.prototype.getPaintProperty=function(t){return _(t,"-transition")?this._transitionablePaint.getTransition(t.slice(0,-"-transition".length)):this._transitionablePaint.getValue(t)},e.prototype.setPaintProperty=function(t,e,r){if(void 0===r&&(r={}),null!=e){var i="layers."+this.id+".paint."+t;if(this._validate(Wr,i,t,e,r))return!1}if(_(t,"-transition"))return this._transitionablePaint.setTransition(t.slice(0,-"-transition".length),e||void 0),!1;var n=this._transitionablePaint._values[t],o="cross-faded-data-driven"===n.property.specification["property-type"]&&!n.value.value&&e,a=this._transitionablePaint._values[t].value.isDataDriven();this._transitionablePaint.setValue(t,e);var s=this._transitionablePaint._values[t].value.isDataDriven();return this._handleSpecialPaintPropertyUpdate(t),s||a||o},e.prototype._handleSpecialPaintPropertyUpdate=function(t){},e.prototype.isHidden=function(t){return!!(this.minzoom&&t<this.minzoom)||!!(this.maxzoom&&t>=this.maxzoom)||"none"===this.visibility},e.prototype.updateTransitions=function(t){this._transitioningPaint=this._transitionablePaint.transitioned(t,this._transitioningPaint)},e.prototype.hasTransition=function(){return this._transitioningPaint.hasTransition()},e.prototype.recalculate=function(t){t.getCrossfadeParameters&&(this._crossfadeParameters=t.getCrossfadeParameters()),this._unevaluatedLayout&&(this.layout=this._unevaluatedLayout.possiblyEvaluate(t)),this.paint=this._transitioningPaint.possiblyEvaluate(t)},e.prototype.serialize=function(){var t={id:this.id,type:this.type,source:this.source,"source-layer":this.sourceLayer,metadata:this.metadata,minzoom:this.minzoom,maxzoom:this.maxzoom,filter:this.filter,layout:this._unevaluatedLayout&&this._unevaluatedLayout.serialize(),paint:this._transitionablePaint&&this._transitionablePaint.serialize()};return"none"===this.visibility&&(t.layout=t.layout||{},t.layout.visibility="none"),g(t,function(t,e){return!(void 0===t||"layout"===e&&!Object.keys(t).length||"paint"===e&&!Object.keys(t).length)})},e.prototype._validate=function(t,e,r,i,n){return void 0===n&&(n={}),(!n||!1!==n.validate)&&Kr(this,t.call(Gr,{key:e,layerType:this.type,objectKey:r,value:i,styleSpec:ft,style:{glyphs:!0,sprite:!0}}))},e.prototype.hasOffscreenPass=function(){return!1},e.prototype.resize=function(){},e.prototype.isStateDependent=function(){for(var t in this.paint._values){var e=this.paint.get(t);if(e instanceof Ti&&Ye(e.property.specification)&&("source"===e.value.kind||"composite"===e.value.kind)&&e.value.isStateDependent)return!0}return!1},e}(ht),Di={Int8:Int8Array,Uint8:Uint8Array,Int16:Int16Array,Uint16:Uint16Array,Int32:Int32Array,Uint32:Uint32Array,Float32:Float32Array},Bi=function(t,e){this._structArray=t,this._pos1=e*this.size,this._pos2=this._pos1/2,this._pos4=this._pos1/4,this._pos8=this._pos1/8},Ri=function(){this.isTransferred=!1,this.capacity=-1,this.resize(0)};function Oi(t,e){void 0===e&&(e=1);var r=0,i=0;return{members:t.map(function(t){var n,o=(n=t.type,Di[n].BYTES_PER_ELEMENT),a=r=Fi(r,Math.max(e,o)),s=t.components||1;return i=Math.max(i,o),r+=o*s,{name:t.name,type:t.type,components:s,offset:a}}),size:Fi(r,Math.max(i,e)),alignment:e}}function Fi(t,e){return Math.ceil(t/e)*e}Ri.serialize=function(t,e){return t._trim(),e&&(t.isTransferred=!0,e.push(t.arrayBuffer)),{length:t.length,arrayBuffer:t.arrayBuffer}},Ri.deserialize=function(t){var e=Object.create(this.prototype);return e.arrayBuffer=t.arrayBuffer,e.length=t.length,e.capacity=t.arrayBuffer.byteLength/e.bytesPerElement,e._refreshViews(),e},Ri.prototype._trim=function(){this.length!==this.capacity&&(this.capacity=this.length,this.arrayBuffer=this.arrayBuffer.slice(0,this.length*this.bytesPerElement),this._refreshViews())},Ri.prototype.clear=function(){this.length=0},Ri.prototype.resize=function(t){this.reserve(t),this.length=t},Ri.prototype.reserve=function(t){if(t>this.capacity){this.capacity=Math.max(t,Math.floor(5*this.capacity),128),this.arrayBuffer=new ArrayBuffer(this.capacity*this.bytesPerElement);var e=this.uint8;this._refreshViews(),e&&this.uint8.set(e)}},Ri.prototype._refreshViews=function(){throw new Error("_refreshViews() must be implemented by each concrete StructArray layout")};var Ui=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var i=2*t;return this.int16[i+0]=e,this.int16[i+1]=r,t},e}(Ri);Ui.prototype.bytesPerElement=4,ei("StructArrayLayout2i4",Ui);var Vi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,i){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r,i)},e.prototype.emplace=function(t,e,r,i,n){var o=4*t;return this.int16[o+0]=e,this.int16[o+1]=r,this.int16[o+2]=i,this.int16[o+3]=n,t},e}(Ri);Vi.prototype.bytesPerElement=8,ei("StructArrayLayout4i8",Vi);var Ni=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,i,n,o){var a=this.length;return this.resize(a+1),this.emplace(a,t,e,r,i,n,o)},e.prototype.emplace=function(t,e,r,i,n,o,a){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.int16[s+2]=i,this.int16[s+3]=n,this.int16[s+4]=o,this.int16[s+5]=a,t},e}(Ri);Ni.prototype.bytesPerElement=12,ei("StructArrayLayout2i4i12",Ni);var ji=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,i,n,o,a,s){var u=this.length;return this.resize(u+1),this.emplace(u,t,e,r,i,n,o,a,s)},e.prototype.emplace=function(t,e,r,i,n,o,a,s,u){var l=6*t,p=12*t;return this.int16[l+0]=e,this.int16[l+1]=r,this.int16[l+2]=i,this.int16[l+3]=n,this.uint8[p+8]=o,this.uint8[p+9]=a,this.uint8[p+10]=s,this.uint8[p+11]=u,t},e}(Ri);ji.prototype.bytesPerElement=12,ei("StructArrayLayout4i4ub12",ji);var qi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,i,n,o,a,s){var u=this.length;return this.resize(u+1),this.emplace(u,t,e,r,i,n,o,a,s)},e.prototype.emplace=function(t,e,r,i,n,o,a,s,u){var l=8*t;return this.uint16[l+0]=e,this.uint16[l+1]=r,this.uint16[l+2]=i,this.uint16[l+3]=n,this.uint16[l+4]=o,this.uint16[l+5]=a,this.uint16[l+6]=s,this.uint16[l+7]=u,t},e}(Ri);qi.prototype.bytesPerElement=16,ei("StructArrayLayout8ui16",qi);var Zi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,i,n,o,a,s){var u=this.length;return this.resize(u+1),this.emplace(u,t,e,r,i,n,o,a,s)},e.prototype.emplace=function(t,e,r,i,n,o,a,s,u){var l=8*t;return this.int16[l+0]=e,this.int16[l+1]=r,this.int16[l+2]=i,this.int16[l+3]=n,this.uint16[l+4]=o,this.uint16[l+5]=a,this.uint16[l+6]=s,this.uint16[l+7]=u,t},e}(Ri);Zi.prototype.bytesPerElement=16,ei("StructArrayLayout4i4ui16",Zi);var Gi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r)},e.prototype.emplace=function(t,e,r,i){var n=3*t;return this.float32[n+0]=e,this.float32[n+1]=r,this.float32[n+2]=i,t},e}(Ri);Gi.prototype.bytesPerElement=12,ei("StructArrayLayout3f12",Gi);var Xi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.uint32[r+0]=e,t},e}(Ri);Xi.prototype.bytesPerElement=4,ei("StructArrayLayout1ul4",Xi);var Wi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,i,n,o,a,s,u,l,p){var c=this.length;return this.resize(c+1),this.emplace(c,t,e,r,i,n,o,a,s,u,l,p)},e.prototype.emplace=function(t,e,r,i,n,o,a,s,u,l,p,c){var h=12*t,f=6*t;return this.int16[h+0]=e,this.int16[h+1]=r,this.int16[h+2]=i,this.int16[h+3]=n,this.int16[h+4]=o,this.int16[h+5]=a,this.uint32[f+3]=s,this.uint16[h+8]=u,this.uint16[h+9]=l,this.int16[h+10]=p,this.int16[h+11]=c,t},e}(Ri);Wi.prototype.bytesPerElement=24,ei("StructArrayLayout6i1ul2ui2i24",Wi);var Hi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,i,n,o){var a=this.length;return this.resize(a+1),this.emplace(a,t,e,r,i,n,o)},e.prototype.emplace=function(t,e,r,i,n,o,a){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.int16[s+2]=i,this.int16[s+3]=n,this.int16[s+4]=o,this.int16[s+5]=a,t},e}(Ri);Hi.prototype.bytesPerElement=12,ei("StructArrayLayout2i2i2i12",Hi);var Ki=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var i=4*t;return this.uint8[i+0]=e,this.uint8[i+1]=r,t},e}(Ri);Ki.prototype.bytesPerElement=4,ei("StructArrayLayout2ub4",Ki);var Yi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,i,n,o,a,s,u,l,p,c,h,f){var d=this.length;return this.resize(d+1),this.emplace(d,t,e,r,i,n,o,a,s,u,l,p,c,h,f)},e.prototype.emplace=function(t,e,r,i,n,o,a,s,u,l,p,c,h,f,d){var m=20*t,y=10*t,_=40*t;return this.int16[m+0]=e,this.int16[m+1]=r,this.uint16[m+2]=i,this.uint16[m+3]=n,this.uint32[y+2]=o,this.uint32[y+3]=a,this.uint32[y+4]=s,this.uint16[m+10]=u,this.uint16[m+11]=l,this.uint16[m+12]=p,this.float32[y+7]=c,this.float32[y+8]=h,this.uint8[_+36]=f,this.uint8[_+37]=d,t},e}(Ri);Yi.prototype.bytesPerElement=40,ei("StructArrayLayout2i2ui3ul3ui2f2ub40",Yi);var Ji=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,i,n,o,a,s,u,l,p,c,h,f){var d=this.length;return this.resize(d+1),this.emplace(d,t,e,r,i,n,o,a,s,u,l,p,c,h,f)},e.prototype.emplace=function(t,e,r,i,n,o,a,s,u,l,p,c,h,f,d){var m=16*t,y=8*t;return this.int16[m+0]=e,this.int16[m+1]=r,this.int16[m+2]=i,this.int16[m+3]=n,this.uint16[m+4]=o,this.uint16[m+5]=a,this.uint16[m+6]=s,this.uint16[m+7]=u,this.uint16[m+8]=l,this.uint16[m+9]=p,this.uint16[m+10]=c,this.uint16[m+11]=h,this.uint16[m+12]=f,this.uint32[y+7]=d,t},e}(Ri);Ji.prototype.bytesPerElement=32,ei("StructArrayLayout4i9ui1ul32",Ji);var $i=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.float32[r+0]=e,t},e}(Ri);$i.prototype.bytesPerElement=4,ei("StructArrayLayout1f4",$i);var Qi=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r)},e.prototype.emplace=function(t,e,r,i){var n=3*t;return this.int16[n+0]=e,this.int16[n+1]=r,this.int16[n+2]=i,t},e}(Ri);Qi.prototype.bytesPerElement=6,ei("StructArrayLayout3i6",Qi);var tn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r)},e.prototype.emplace=function(t,e,r,i){var n=2*t,o=4*t;return this.uint32[n+0]=e,this.uint16[o+2]=r,this.uint16[o+3]=i,t},e}(Ri);tn.prototype.bytesPerElement=8,ei("StructArrayLayout1ul2ui8",tn);var en=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var i=this.length;return this.resize(i+1),this.emplace(i,t,e,r)},e.prototype.emplace=function(t,e,r,i){var n=3*t;return this.uint16[n+0]=e,this.uint16[n+1]=r,this.uint16[n+2]=i,t},e}(Ri);en.prototype.bytesPerElement=6,ei("StructArrayLayout3ui6",en);var rn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var i=2*t;return this.uint16[i+0]=e,this.uint16[i+1]=r,t},e}(Ri);rn.prototype.bytesPerElement=4,ei("StructArrayLayout2ui4",rn);var nn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.uint16[r+0]=e,t},e}(Ri);nn.prototype.bytesPerElement=2,ei("StructArrayLayout1ui2",nn);var on=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var i=2*t;return this.float32[i+0]=e,this.float32[i+1]=r,t},e}(Ri);on.prototype.bytesPerElement=8,ei("StructArrayLayout2f8",on);var an=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,i){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r,i)},e.prototype.emplace=function(t,e,r,i,n){var o=4*t;return this.float32[o+0]=e,this.float32[o+1]=r,this.float32[o+2]=i,this.float32[o+3]=n,t},e}(Ri);an.prototype.bytesPerElement=16,ei("StructArrayLayout4f16",an);var sn=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorPointX:{configurable:!0},anchorPointY:{configurable:!0},x1:{configurable:!0},y1:{configurable:!0},x2:{configurable:!0},y2:{configurable:!0},featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0},radius:{configurable:!0},signedDistanceFromAnchor:{configurable:!0},anchorPoint:{configurable:!0}};return r.anchorPointX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorPointX.set=function(t){this._structArray.int16[this._pos2+0]=t},r.anchorPointY.get=function(){return this._structArray.int16[this._pos2+1]},r.anchorPointY.set=function(t){this._structArray.int16[this._pos2+1]=t},r.x1.get=function(){return this._structArray.int16[this._pos2+2]},r.x1.set=function(t){this._structArray.int16[this._pos2+2]=t},r.y1.get=function(){return this._structArray.int16[this._pos2+3]},r.y1.set=function(t){this._structArray.int16[this._pos2+3]=t},r.x2.get=function(){return this._structArray.int16[this._pos2+4]},r.x2.set=function(t){this._structArray.int16[this._pos2+4]=t},r.y2.get=function(){return this._structArray.int16[this._pos2+5]},r.y2.set=function(t){this._structArray.int16[this._pos2+5]=t},r.featureIndex.get=function(){return this._structArray.uint32[this._pos4+3]},r.featureIndex.set=function(t){this._structArray.uint32[this._pos4+3]=t},r.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+8]},r.sourceLayerIndex.set=function(t){this._structArray.uint16[this._pos2+8]=t},r.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+9]},r.bucketIndex.set=function(t){this._structArray.uint16[this._pos2+9]=t},r.radius.get=function(){return this._structArray.int16[this._pos2+10]},r.radius.set=function(t){this._structArray.int16[this._pos2+10]=t},r.signedDistanceFromAnchor.get=function(){return this._structArray.int16[this._pos2+11]},r.signedDistanceFromAnchor.set=function(t){this._structArray.int16[this._pos2+11]=t},r.anchorPoint.get=function(){return new n(this.anchorPointX,this.anchorPointY)},Object.defineProperties(e.prototype,r),e}(Bi);sn.prototype.size=24;var un=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new sn(this,t)},e}(Wi);ei("CollisionBoxArray",un);var ln=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorX:{configurable:!0},anchorY:{configurable:!0},glyphStartIndex:{configurable:!0},numGlyphs:{configurable:!0},vertexStartIndex:{configurable:!0},lineStartIndex:{configurable:!0},lineLength:{configurable:!0},segment:{configurable:!0},lowerSize:{configurable:!0},upperSize:{configurable:!0},lineOffsetX:{configurable:!0},lineOffsetY:{configurable:!0},writingMode:{configurable:!0},hidden:{configurable:!0}};return r.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorX.set=function(t){this._structArray.int16[this._pos2+0]=t},r.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},r.anchorY.set=function(t){this._structArray.int16[this._pos2+1]=t},r.glyphStartIndex.get=function(){return this._structArray.uint16[this._pos2+2]},r.glyphStartIndex.set=function(t){this._structArray.uint16[this._pos2+2]=t},r.numGlyphs.get=function(){return this._structArray.uint16[this._pos2+3]},r.numGlyphs.set=function(t){this._structArray.uint16[this._pos2+3]=t},r.vertexStartIndex.get=function(){return this._structArray.uint32[this._pos4+2]},r.vertexStartIndex.set=function(t){this._structArray.uint32[this._pos4+2]=t},r.lineStartIndex.get=function(){return this._structArray.uint32[this._pos4+3]},r.lineStartIndex.set=function(t){this._structArray.uint32[this._pos4+3]=t},r.lineLength.get=function(){return this._structArray.uint32[this._pos4+4]},r.lineLength.set=function(t){this._structArray.uint32[this._pos4+4]=t},r.segment.get=function(){return this._structArray.uint16[this._pos2+10]},r.segment.set=function(t){this._structArray.uint16[this._pos2+10]=t},r.lowerSize.get=function(){return this._structArray.uint16[this._pos2+11]},r.lowerSize.set=function(t){this._structArray.uint16[this._pos2+11]=t},r.upperSize.get=function(){return this._structArray.uint16[this._pos2+12]},r.upperSize.set=function(t){this._structArray.uint16[this._pos2+12]=t},r.lineOffsetX.get=function(){return this._structArray.float32[this._pos4+7]},r.lineOffsetX.set=function(t){this._structArray.float32[this._pos4+7]=t},r.lineOffsetY.get=function(){return this._structArray.float32[this._pos4+8]},r.lineOffsetY.set=function(t){this._structArray.float32[this._pos4+8]=t},r.writingMode.get=function(){return this._structArray.uint8[this._pos1+36]},r.writingMode.set=function(t){this._structArray.uint8[this._pos1+36]=t},r.hidden.get=function(){return this._structArray.uint8[this._pos1+37]},r.hidden.set=function(t){this._structArray.uint8[this._pos1+37]=t},Object.defineProperties(e.prototype,r),e}(Bi);ln.prototype.size=40;var pn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new ln(this,t)},e}(Yi);ei("PlacedSymbolArray",pn);var cn=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorX:{configurable:!0},anchorY:{configurable:!0},horizontalPlacedTextSymbolIndex:{configurable:!0},verticalPlacedTextSymbolIndex:{configurable:!0},key:{configurable:!0},textBoxStartIndex:{configurable:!0},textBoxEndIndex:{configurable:!0},iconBoxStartIndex:{configurable:!0},iconBoxEndIndex:{configurable:!0},featureIndex:{configurable:!0},numGlyphVertices:{configurable:!0},numVerticalGlyphVertices:{configurable:!0},numIconVertices:{configurable:!0},crossTileID:{configurable:!0}};return r.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorX.set=function(t){this._structArray.int16[this._pos2+0]=t},r.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},r.anchorY.set=function(t){this._structArray.int16[this._pos2+1]=t},r.horizontalPlacedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+2]},r.horizontalPlacedTextSymbolIndex.set=function(t){this._structArray.int16[this._pos2+2]=t},r.verticalPlacedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+3]},r.verticalPlacedTextSymbolIndex.set=function(t){this._structArray.int16[this._pos2+3]=t},r.key.get=function(){return this._structArray.uint16[this._pos2+4]},r.key.set=function(t){this._structArray.uint16[this._pos2+4]=t},r.textBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+5]},r.textBoxStartIndex.set=function(t){this._structArray.uint16[this._pos2+5]=t},r.textBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+6]},r.textBoxEndIndex.set=function(t){this._structArray.uint16[this._pos2+6]=t},r.iconBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+7]},r.iconBoxStartIndex.set=function(t){this._structArray.uint16[this._pos2+7]=t},r.iconBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+8]},r.iconBoxEndIndex.set=function(t){this._structArray.uint16[this._pos2+8]=t},r.featureIndex.get=function(){return this._structArray.uint16[this._pos2+9]},r.featureIndex.set=function(t){this._structArray.uint16[this._pos2+9]=t},r.numGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+10]},r.numGlyphVertices.set=function(t){this._structArray.uint16[this._pos2+10]=t},r.numVerticalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+11]},r.numVerticalGlyphVertices.set=function(t){this._structArray.uint16[this._pos2+11]=t},r.numIconVertices.get=function(){return this._structArray.uint16[this._pos2+12]},r.numIconVertices.set=function(t){this._structArray.uint16[this._pos2+12]=t},r.crossTileID.get=function(){return this._structArray.uint32[this._pos4+7]},r.crossTileID.set=function(t){this._structArray.uint32[this._pos4+7]=t},Object.defineProperties(e.prototype,r),e}(Bi);cn.prototype.size=32;var hn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new cn(this,t)},e}(Ji);ei("SymbolInstanceArray",hn);var fn=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={offsetX:{configurable:!0}};return r.offsetX.get=function(){return this._structArray.float32[this._pos4+0]},r.offsetX.set=function(t){this._structArray.float32[this._pos4+0]=t},Object.defineProperties(e.prototype,r),e}(Bi);fn.prototype.size=4;var dn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getoffsetX=function(t){return this.float32[1*t+0]},e.prototype.get=function(t){return new fn(this,t)},e}($i);ei("GlyphOffsetArray",dn);var mn=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={x:{configurable:!0},y:{configurable:!0},tileUnitDistanceFromAnchor:{configurable:!0}};return r.x.get=function(){return this._structArray.int16[this._pos2+0]},r.x.set=function(t){this._structArray.int16[this._pos2+0]=t},r.y.get=function(){return this._structArray.int16[this._pos2+1]},r.y.set=function(t){this._structArray.int16[this._pos2+1]=t},r.tileUnitDistanceFromAnchor.get=function(){return this._structArray.int16[this._pos2+2]},r.tileUnitDistanceFromAnchor.set=function(t){this._structArray.int16[this._pos2+2]=t},Object.defineProperties(e.prototype,r),e}(Bi);mn.prototype.size=6;var yn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getx=function(t){return this.int16[3*t+0]},e.prototype.gety=function(t){return this.int16[3*t+1]},e.prototype.gettileUnitDistanceFromAnchor=function(t){return this.int16[3*t+2]},e.prototype.get=function(t){return new mn(this,t)},e}(Qi);ei("SymbolLineVertexArray",yn);var _n=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0}};return r.featureIndex.get=function(){return this._structArray.uint32[this._pos4+0]},r.featureIndex.set=function(t){this._structArray.uint32[this._pos4+0]=t},r.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+2]},r.sourceLayerIndex.set=function(t){this._structArray.uint16[this._pos2+2]=t},r.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+3]},r.bucketIndex.set=function(t){this._structArray.uint16[this._pos2+3]=t},Object.defineProperties(e.prototype,r),e}(Bi);_n.prototype.size=8;var vn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new _n(this,t)},e}(tn);ei("FeatureIndexArray",vn);var gn=Oi([{name:"a_pos",components:2,type:"Int16"}],4),xn=gn.members,bn=(gn.size,gn.alignment,function(t){void 0===t&&(t=[]),this.segments=t});function wn(t,e){return 256*(t=l(Math.floor(t),0,255))+l(Math.floor(e),0,255)}bn.prototype.prepareSegment=function(t,e,r){var i=this.segments[this.segments.length-1];return t>bn.MAX_VERTEX_ARRAY_LENGTH&&w("Max vertices per segment is "+bn.MAX_VERTEX_ARRAY_LENGTH+": bucket requested "+t),(!i||i.vertexLength+t>bn.MAX_VERTEX_ARRAY_LENGTH)&&(i={vertexOffset:e.length,primitiveOffset:r.length,vertexLength:0,primitiveLength:0},this.segments.push(i)),i},bn.prototype.get=function(){return this.segments},bn.prototype.destroy=function(){for(var t=0,e=this.segments;t<e.length;t+=1){var r=e[t];for(var i in r.vaos)r.vaos[i].destroy()}},bn.simpleSegment=function(t,e,r,i){return new bn([{vertexOffset:t,primitiveOffset:e,vertexLength:r,primitiveLength:i,vaos:{}}])},bn.MAX_VERTEX_ARRAY_LENGTH=Math.pow(2,16)-1,ei("SegmentVector",bn);var En=function(){this.ids=[],this.positions=[],this.indexed=!1};function Sn(t,e,r){var i=t[e];t[e]=t[r],t[r]=i}En.prototype.add=function(t,e,r,i){this.ids.push(t),this.positions.push(e,r,i)},En.prototype.getPositions=function(t){for(var e=0,r=this.ids.length-1;e<r;){var i=e+r>>1;this.ids[i]>=t?r=i:e=i+1}for(var n=[];this.ids[e]===t;){var o=this.positions[3*e],a=this.positions[3*e+1],s=this.positions[3*e+2];n.push({index:o,start:a,end:s}),e++}return n},En.serialize=function(t,e){var r=new Float64Array(t.ids),i=new Uint32Array(t.positions);return function t(e,r,i,n){if(!(i>=n)){for(var o=e[i+n>>1],a=i-1,s=n+1;;){do{a++}while(e[a]<o);do{s--}while(e[s]>o);if(a>=s)break;Sn(e,a,s),Sn(r,3*a,3*s),Sn(r,3*a+1,3*s+1),Sn(r,3*a+2,3*s+2)}t(e,r,i,s),t(e,r,s+1,n)}}(r,i,0,r.length-1),e.push(r.buffer,i.buffer),{ids:r,positions:i}},En.deserialize=function(t){var e=new En;return e.ids=t.ids,e.positions=t.positions,e.indexed=!0,e},ei("FeaturePositionMap",En);var Tn=function(t,e){this.gl=t.gl,this.location=e},An=function(t){function e(e,r){t.call(this,e,r),this.current=0}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){this.current!==t&&(this.current=t,this.gl.uniform1i(this.location,t))},e}(Tn),zn=function(t){function e(e,r){t.call(this,e,r),this.current=0}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){this.current!==t&&(this.current=t,this.gl.uniform1f(this.location,t))},e}(Tn),In=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]||(this.current=t,this.gl.uniform2f(this.location,t[0],t[1]))},e}(Tn),Cn=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]&&t[2]===this.current[2]||(this.current=t,this.gl.uniform3f(this.location,t[0],t[1],t[2]))},e}(Tn),kn=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0,0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]&&t[2]===this.current[2]&&t[3]===this.current[3]||(this.current=t,this.gl.uniform4f(this.location,t[0],t[1],t[2],t[3]))},e}(Tn),Pn=function(t){function e(e,r){t.call(this,e,r),this.current=Bt.transparent}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t.r===this.current.r&&t.g===this.current.g&&t.b===this.current.b&&t.a===this.current.a||(this.current=t,this.gl.uniform4f(this.location,t.r,t.g,t.b,t.a))},e}(Tn),Mn=new Float32Array(16),Ln=function(t){function e(e,r){t.call(this,e,r),this.current=Mn}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){if(t[12]!==this.current[12]||t[0]!==this.current[0])return this.current=t,void this.gl.uniformMatrix4fv(this.location,!1,t);for(var e=1;e<16;e++)if(t[e]!==this.current[e]){this.current=t,this.gl.uniformMatrix4fv(this.location,!1,t);break}},e}(Tn);function Dn(t){return[wn(255*t.r,255*t.g),wn(255*t.b,255*t.a)]}var Bn=function(t,e,r){this.value=t,this.names=e,this.uniformNames=this.names.map(function(t){return"u_"+t}),this.type=r,this.maxValue=-1/0};Bn.prototype.defines=function(){return this.names.map(function(t){return"#define HAS_UNIFORM_u_"+t})},Bn.prototype.setConstantPatternPositions=function(){},Bn.prototype.populatePaintArray=function(){},Bn.prototype.updatePaintArray=function(){},Bn.prototype.upload=function(){},Bn.prototype.destroy=function(){},Bn.prototype.setUniforms=function(t,e,r,i){e.set(i.constantOr(this.value))},Bn.prototype.getBinding=function(t,e){return"color"===this.type?new Pn(t,e):new zn(t,e)},Bn.serialize=function(t){var e=t.value,r=t.names,i=t.type;return{value:ii(e),names:r,type:i}},Bn.deserialize=function(t){var e=t.value,r=t.names,i=t.type;return new Bn(ni(e),r,i)};var Rn=function(t,e,r){this.value=t,this.names=e,this.uniformNames=this.names.map(function(t){return"u_"+t}),this.type=r,this.maxValue=-1/0,this.patternPositions={patternTo:null,patternFrom:null}};Rn.prototype.defines=function(){return this.names.map(function(t){return"#define HAS_UNIFORM_u_"+t})},Rn.prototype.populatePaintArray=function(){},Rn.prototype.updatePaintArray=function(){},Rn.prototype.upload=function(){},Rn.prototype.destroy=function(){},Rn.prototype.setConstantPatternPositions=function(t,e){this.patternPositions.patternTo=t.tlbr,this.patternPositions.patternFrom=e.tlbr},Rn.prototype.setUniforms=function(t,e,r,i,n){var o=this.patternPositions;"u_pattern_to"===n&&o.patternTo&&e.set(o.patternTo),"u_pattern_from"===n&&o.patternFrom&&e.set(o.patternFrom)},Rn.prototype.getBinding=function(t,e){return new kn(t,e)};var On=function(t,e,r,i){this.expression=t,this.names=e,this.type=r,this.uniformNames=this.names.map(function(t){return"a_"+t}),this.maxValue=-1/0,this.paintVertexAttributes=e.map(function(t){return{name:"a_"+t,type:"Float32",components:"color"===r?2:1,offset:0}}),this.paintVertexArray=new i};On.prototype.defines=function(){return[]},On.prototype.setConstantPatternPositions=function(){},On.prototype.populatePaintArray=function(t,e){var r=this.paintVertexArray,i=r.length;r.reserve(t);var n=this.expression.evaluate(new vi(0),e,{});if("color"===this.type)for(var o=Dn(n),a=i;a<t;a++)r.emplaceBack(o[0],o[1]);else{for(var s=i;s<t;s++)r.emplaceBack(n);this.maxValue=Math.max(this.maxValue,n)}},On.prototype.updatePaintArray=function(t,e,r,i){var n=this.paintVertexArray,o=this.expression.evaluate({zoom:0},r,i);if("color"===this.type)for(var a=Dn(o),s=t;s<e;s++)n.emplace(s,a[0],a[1]);else{for(var u=t;u<e;u++)n.emplace(u,o);this.maxValue=Math.max(this.maxValue,o)}},On.prototype.upload=function(t){this.paintVertexArray&&this.paintVertexArray.arrayBuffer&&(this.paintVertexBuffer&&this.paintVertexBuffer.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=t.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))},On.prototype.destroy=function(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy()},On.prototype.setUniforms=function(t,e){e.set(0)},On.prototype.getBinding=function(t,e){return new zn(t,e)};var Fn=function(t,e,r,i,n,o){this.expression=t,this.names=e,this.uniformNames=this.names.map(function(t){return"a_"+t+"_t"}),this.type=r,this.useIntegerZoom=i,this.zoom=n,this.maxValue=-1/0;var a=o;this.paintVertexAttributes=e.map(function(t){return{name:"a_"+t,type:"Float32",components:"color"===r?4:2,offset:0}}),this.paintVertexArray=new a};Fn.prototype.defines=function(){return[]},Fn.prototype.setConstantPatternPositions=function(){},Fn.prototype.populatePaintArray=function(t,e){var r=this.paintVertexArray,i=r.length;r.reserve(t);var n=this.expression.evaluate(new vi(this.zoom),e,{}),o=this.expression.evaluate(new vi(this.zoom+1),e,{});if("color"===this.type)for(var a=Dn(n),s=Dn(o),u=i;u<t;u++)r.emplaceBack(a[0],a[1],s[0],s[1]);else{for(var l=i;l<t;l++)r.emplaceBack(n,o);this.maxValue=Math.max(this.maxValue,n,o)}},Fn.prototype.updatePaintArray=function(t,e,r,i){var n=this.paintVertexArray,o=this.expression.evaluate({zoom:this.zoom},r,i),a=this.expression.evaluate({zoom:this.zoom+1},r,i);if("color"===this.type)for(var s=Dn(o),u=Dn(a),l=t;l<e;l++)n.emplace(l,s[0],s[1],u[0],u[1]);else{for(var p=t;p<e;p++)n.emplace(p,o,a);this.maxValue=Math.max(this.maxValue,o,a)}},Fn.prototype.upload=function(t){this.paintVertexArray&&this.paintVertexArray.arrayBuffer&&(this.paintVertexBuffer&&this.paintVertexBuffer.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=t.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))},Fn.prototype.destroy=function(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy()},Fn.prototype.interpolationFactor=function(t){return this.useIntegerZoom?this.expression.interpolationFactor(Math.floor(t),this.zoom,this.zoom+1):this.expression.interpolationFactor(t,this.zoom,this.zoom+1)},Fn.prototype.setUniforms=function(t,e,r){e.set(this.interpolationFactor(r.zoom))},Fn.prototype.getBinding=function(t,e){return new zn(t,e)};var Un=function(t,e,r,i,n,o,a){this.expression=t,this.names=e,this.type=r,this.uniformNames=this.names.map(function(t){return"a_"+t+"_t"}),this.useIntegerZoom=i,this.zoom=n,this.maxValue=-1/0,this.layerId=a,this.paintVertexAttributes=e.map(function(t){return{name:"a_"+t,type:"Uint16",components:4,offset:0}}),this.zoomInPaintVertexArray=new o,this.zoomOutPaintVertexArray=new o};Un.prototype.defines=function(){return[]},Un.prototype.setConstantPatternPositions=function(){},Un.prototype.populatePaintArray=function(t,e,r){var i=this.zoomInPaintVertexArray,n=this.zoomOutPaintVertexArray,o=this.layerId,a=i.length;if(i.reserve(t),n.reserve(t),r&&e.patterns&&e.patterns[o]){var s=e.patterns[o],u=s.min,l=s.mid,p=s.max,c=r[u],h=r[l],f=r[p];if(!c||!h||!f)return;for(var d=a;d<t;d++)i.emplaceBack(h.tl[0],h.tl[1],h.br[0],h.br[1],c.tl[0],c.tl[1],c.br[0],c.br[1]),n.emplaceBack(h.tl[0],h.tl[1],h.br[0],h.br[1],f.tl[0],f.tl[1],f.br[0],f.br[1])}},Un.prototype.updatePaintArray=function(t,e,r,i,n){var o=this.zoomInPaintVertexArray,a=this.zoomOutPaintVertexArray,s=this.layerId;if(n&&r.patterns&&r.patterns[s]){var u=r.patterns[s],l=u.min,p=u.mid,c=u.max,h=n[l],f=n[p],d=n[c];if(!h||!f||!d)return;for(var m=t;m<e;m++)o.emplace(m,f.tl[0],f.tl[1],f.br[0],f.br[1],h.tl[0],h.tl[1],h.br[0],h.br[1]),a.emplace(m,f.tl[0],f.tl[1],f.br[0],f.br[1],d.tl[0],d.tl[1],d.br[0],d.br[1])}},Un.prototype.upload=function(t){this.zoomInPaintVertexArray&&this.zoomInPaintVertexArray.arrayBuffer&&this.zoomOutPaintVertexArray&&this.zoomOutPaintVertexArray.arrayBuffer&&(this.zoomInPaintVertexBuffer=t.createVertexBuffer(this.zoomInPaintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent),this.zoomOutPaintVertexBuffer=t.createVertexBuffer(this.zoomOutPaintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))},Un.prototype.destroy=function(){this.zoomOutPaintVertexBuffer&&this.zoomOutPaintVertexBuffer.destroy(),this.zoomInPaintVertexBuffer&&this.zoomInPaintVertexBuffer.destroy()},Un.prototype.setUniforms=function(t,e){e.set(0)},Un.prototype.getBinding=function(t,e){return new zn(t,e)};var Vn=function(){this.binders={},this.cacheKey="",this._buffers=[],this._featureMap=new En,this._bufferOffset=0};Vn.createDynamic=function(t,e,r){var i=new Vn,n=[];for(var o in t.paint._values)if(r(o)){var a=t.paint.get(o);if(a instanceof Ti&&Ye(a.property.specification)){var s=jn(o,t.type),u=a.property.specification.type,l=a.property.useIntegerZoom;if("cross-faded"===a.property.specification["property-type"]||"cross-faded-data-driven"===a.property.specification["property-type"])if("constant"===a.value.kind)i.binders[o]=new Rn(a.value.value,s,u),n.push("/u_"+o);else{var p=qn(o,u,"source");i.binders[o]=new Un(a.value,s,u,l,e,p,t.id),n.push("/a_"+o)}else if("constant"===a.value.kind)i.binders[o]=new Bn(a.value.value,s,u),n.push("/u_"+o);else if("source"===a.value.kind){var c=qn(o,u,"source");i.binders[o]=new On(a.value,s,u,c),n.push("/a_"+o)}else{var h=qn(o,u,"composite");i.binders[o]=new Fn(a.value,s,u,l,e,h),n.push("/z_"+o)}}}return i.cacheKey=n.sort().join(""),i},Vn.prototype.populatePaintArrays=function(t,e,r,i){for(var n in this.binders)this.binders[n].populatePaintArray(t,e,i);void 0!==e.id&&this._featureMap.add(+e.id,r,this._bufferOffset,t),this._bufferOffset=t},Vn.prototype.setConstantPatternPositions=function(t,e){for(var r in this.binders)this.binders[r].setConstantPatternPositions(t,e)},Vn.prototype.updatePaintArrays=function(t,e,r,i){var n=!1;for(var o in t)for(var a=0,s=this._featureMap.getPositions(+o);a<s.length;a+=1){var u=s[a],l=e.feature(u.index);for(var p in this.binders){var c=this.binders[p];if(!(c instanceof Bn||c instanceof Rn)&&!0===c.expression.isStateDependent){var h=r.paint.get(p);c.expression=h.value,c.updatePaintArray(u.start,u.end,l,t[o],i),n=!0}}}return n},Vn.prototype.defines=function(){var t=[];for(var e in this.binders)t.push.apply(t,this.binders[e].defines());return t},Vn.prototype.getPaintVertexBuffers=function(){return this._buffers},Vn.prototype.getUniforms=function(t,e){var r={};for(var i in this.binders)for(var n=this.binders[i],o=0,a=n.uniformNames;o<a.length;o+=1){var s=a[o];r[s]=n.getBinding(t,e[s])}return r},Vn.prototype.setUniforms=function(t,e,r,i){for(var n in this.binders)for(var o=this.binders[n],a=0,s=o.uniformNames;a<s.length;a+=1){var u=s[a];o.setUniforms(t,e[u],i,r.get(n),u)}},Vn.prototype.updatePatternPaintBuffers=function(t){var e=[];for(var r in this.binders){var i=this.binders[r];if(i instanceof Un){var n=2===t.fromScale?i.zoomInPaintVertexBuffer:i.zoomOutPaintVertexBuffer;n&&e.push(n)}else(i instanceof On||i instanceof Fn)&&i.paintVertexBuffer&&e.push(i.paintVertexBuffer)}this._buffers=e},Vn.prototype.upload=function(t){for(var e in this.binders)this.binders[e].upload(t);var r=[];for(var i in this.binders){var n=this.binders[i];(n instanceof On||n instanceof Fn)&&n.paintVertexBuffer&&r.push(n.paintVertexBuffer)}this._buffers=r},Vn.prototype.destroy=function(){for(var t in this.binders)this.binders[t].destroy()};var Nn=function(t,e,r,i){void 0===i&&(i=function(){return!0}),this.programConfigurations={};for(var n=0,o=e;n<o.length;n+=1){var a=o[n];this.programConfigurations[a.id]=Vn.createDynamic(a,r,i),this.programConfigurations[a.id].layoutAttributes=t}this.needsUpload=!1};function jn(t,e){return{"text-opacity":["opacity"],"icon-opacity":["opacity"],"text-color":["fill_color"],"icon-color":["fill_color"],"text-halo-color":["halo_color"],"icon-halo-color":["halo_color"],"text-halo-blur":["halo_blur"],"icon-halo-blur":["halo_blur"],"text-halo-width":["halo_width"],"icon-halo-width":["halo_width"],"line-gap-width":["gapwidth"],"line-pattern":["pattern_to","pattern_from"],"fill-pattern":["pattern_to","pattern_from"],"fill-extrusion-pattern":["pattern_to","pattern_from"]}[t]||[t.replace(e+"-","").replace(/-/g,"_")]}function qn(t,e,r){var i={color:{source:on,composite:an},number:{source:$i,composite:on}},n=function(t){return{"line-pattern":{source:qi,composite:qi},"fill-pattern":{source:qi,composite:qi},"fill-extrusion-pattern":{source:qi,composite:qi}}[t]}(t);return n&&n[r]||i[e][r]}Nn.prototype.populatePaintArrays=function(t,e,r,i){for(var n in this.programConfigurations)this.programConfigurations[n].populatePaintArrays(t,e,r,i);this.needsUpload=!0},Nn.prototype.updatePaintArrays=function(t,e,r,i){for(var n=0,o=r;n<o.length;n+=1){var a=o[n];this.needsUpload=this.programConfigurations[a.id].updatePaintArrays(t,e,a,i)||this.needsUpload}},Nn.prototype.get=function(t){return this.programConfigurations[t]},Nn.prototype.upload=function(t){if(this.needsUpload){for(var e in this.programConfigurations)this.programConfigurations[e].upload(t);this.needsUpload=!1}},Nn.prototype.destroy=function(){for(var t in this.programConfigurations)this.programConfigurations[t].destroy()},ei("ConstantBinder",Bn),ei("CrossFadedConstantBinder",Rn),ei("SourceExpressionBinder",On),ei("CrossFadedCompositeBinder",Un),ei("CompositeExpressionBinder",Fn),ei("ProgramConfiguration",Vn,{omit:["_buffers"]}),ei("ProgramConfigurationSet",Nn);var Zn=8192,Gn={min:-1*Math.pow(2,15),max:Math.pow(2,15)-1};function Xn(t){for(var e=Zn/t.extent,r=t.loadGeometry(),i=0;i<r.length;i++)for(var n=r[i],o=0;o<n.length;o++){var a=n[o];a.x=Math.round(a.x*e),a.y=Math.round(a.y*e),(a.x<Gn.min||a.x>Gn.max||a.y<Gn.min||a.y>Gn.max)&&w("Geometry exceeds allowed extent, reduce your vector tile buffer size")}return r}function Wn(t,e,r,i,n){t.emplaceBack(2*e+(i+1)/2,2*r+(n+1)/2)}var Hn=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(function(t){return t.id}),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new Ui,this.indexArray=new en,this.segments=new bn,this.programConfigurations=new Nn(xn,t.layers,t.zoom)};function Kn(t,e,r){for(var i=0;i<t.length;i++){var n=t[i];if(no(n,e))return!0;if(eo(e,n,r))return!0}return!1}function Yn(t,e){if(1===t.length&&1===t[0].length)return io(e,t[0][0]);for(var r=0;r<e.length;r++)for(var i=e[r],n=0;n<i.length;n++)if(io(t,i[n]))return!0;for(var o=0;o<t.length;o++){for(var a=t[o],s=0;s<a.length;s++)if(io(e,a[s]))return!0;for(var u=0;u<e.length;u++)if(Qn(a,e[u]))return!0}return!1}function Jn(t,e,r){for(var i=0;i<e.length;i++)for(var n=e[i],o=0;o<t.length;o++){var a=t[o];if(a.length>=3)for(var s=0;s<n.length;s++)if(no(a,n[s]))return!0;if($n(a,n,r))return!0}return!1}function $n(t,e,r){if(t.length>1){if(Qn(t,e))return!0;for(var i=0;i<e.length;i++)if(eo(e[i],t,r))return!0}for(var n=0;n<t.length;n++)if(eo(t[n],e,r))return!0;return!1}function Qn(t,e){if(0===t.length||0===e.length)return!1;for(var r=0;r<t.length-1;r++)for(var i=t[r],n=t[r+1],o=0;o<e.length-1;o++)if(to(i,n,e[o],e[o+1]))return!0;return!1}function to(t,e,r,i){return E(t,r,i)!==E(e,r,i)&&E(t,e,r)!==E(t,e,i)}function eo(t,e,r){var i=r*r;if(1===e.length)return t.distSqr(e[0])<i;for(var n=1;n<e.length;n++)if(ro(t,e[n-1],e[n])<i)return!0;return!1}function ro(t,e,r){var i=e.distSqr(r);if(0===i)return t.distSqr(e);var n=((t.x-e.x)*(r.x-e.x)+(t.y-e.y)*(r.y-e.y))/i;return n<0?t.distSqr(e):n>1?t.distSqr(r):t.distSqr(r.sub(e)._mult(n)._add(e))}function io(t,e){for(var r,i,n,o=!1,a=0;a<t.length;a++)for(var s=0,u=(r=t[a]).length-1;s<r.length;u=s++)i=r[s],n=r[u],i.y>e.y!=n.y>e.y&&e.x<(n.x-i.x)*(e.y-i.y)/(n.y-i.y)+i.x&&(o=!o);return o}function no(t,e){for(var r=!1,i=0,n=t.length-1;i<t.length;n=i++){var o=t[i],a=t[n];o.y>e.y!=a.y>e.y&&e.x<(a.x-o.x)*(e.y-o.y)/(a.y-o.y)+o.x&&(r=!r)}return r}function oo(t,e,r){var i=e.paint.get(t).value;return"constant"===i.kind?i.value:r.programConfigurations.get(e.id).binders[t].maxValue}function ao(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function so(t,e,r,i,o){if(!e[0]&&!e[1])return t;var a=n.convert(e);"viewport"===r&&a._rotate(-i);for(var s=[],u=0;u<t.length;u++){for(var l=t[u],p=[],c=0;c<l.length;c++)p.push(l[c].sub(a._mult(o)));s.push(p)}return s}Hn.prototype.populate=function(t,e){for(var r=0,i=t;r<i.length;r+=1){var n=i[r],o=n.feature,a=n.index,s=n.sourceLayerIndex;if(this.layers[0]._featureFilter(new vi(this.zoom),o)){var u=Xn(o);this.addFeature(o,u,a),e.featureIndex.insert(o,u,a,s,this.index)}}},Hn.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},Hn.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},Hn.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},Hn.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,xn),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},Hn.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},Hn.prototype.addFeature=function(t,e,r){for(var i=0,n=e;i<n.length;i+=1)for(var o=0,a=n[i];o<a.length;o+=1){var s=a[o],u=s.x,l=s.y;if(!(u<0||u>=Zn||l<0||l>=Zn)){var p=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray),c=p.vertexLength;Wn(this.layoutVertexArray,u,l,-1,-1),Wn(this.layoutVertexArray,u,l,1,-1),Wn(this.layoutVertexArray,u,l,1,1),Wn(this.layoutVertexArray,u,l,-1,1),this.indexArray.emplaceBack(c,c+1,c+2),this.indexArray.emplaceBack(c,c+3,c+2),p.vertexLength+=4,p.primitiveLength+=2}}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,{})},ei("CircleBucket",Hn,{omit:["layers"]});var uo={paint:new Mi({"circle-radius":new Ii(ft.paint_circle["circle-radius"]),"circle-color":new Ii(ft.paint_circle["circle-color"]),"circle-blur":new Ii(ft.paint_circle["circle-blur"]),"circle-opacity":new Ii(ft.paint_circle["circle-opacity"]),"circle-translate":new zi(ft.paint_circle["circle-translate"]),"circle-translate-anchor":new zi(ft.paint_circle["circle-translate-anchor"]),"circle-pitch-scale":new zi(ft.paint_circle["circle-pitch-scale"]),"circle-pitch-alignment":new zi(ft.paint_circle["circle-pitch-alignment"]),"circle-stroke-width":new Ii(ft.paint_circle["circle-stroke-width"]),"circle-stroke-color":new Ii(ft.paint_circle["circle-stroke-color"]),"circle-stroke-opacity":new Ii(ft.paint_circle["circle-stroke-opacity"])})},lo="undefined"!=typeof Float32Array?Float32Array:Array;function po(){var t=new lo(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t}function co(){var t=new lo(3);return t[0]=0,t[1]=0,t[2]=0,t}function ho(t){var e=t[0],r=t[1],i=t[2];return Math.sqrt(e*e+r*r+i*i)}function fo(t,e,r){var i=new lo(3);return i[0]=t,i[1]=e,i[2]=r,i}Math.PI;var mo,yo=ho,_o=(mo=co(),function(t,e,r,i,n,o){var a,s;for(e||(e=3),r||(r=0),s=i?Math.min(i*e+r,t.length):t.length,a=r;a<s;a+=e)mo[0]=t[a],mo[1]=t[a+1],mo[2]=t[a+2],n(mo,mo,o),t[a]=mo[0],t[a+1]=mo[1],t[a+2]=mo[2];return t});function vo(){var t=new lo(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t}function go(t,e){var r=e[0],i=e[1],n=e[2],o=e[3],a=r*r+i*i+n*n+o*o;return a>0&&(a=1/Math.sqrt(a),t[0]=r*a,t[1]=i*a,t[2]=n*a,t[3]=o*a),t}function xo(t,e,r){var i=e[0],n=e[1],o=e[2],a=e[3];return t[0]=r[0]*i+r[4]*n+r[8]*o+r[12]*a,t[1]=r[1]*i+r[5]*n+r[9]*o+r[13]*a,t[2]=r[2]*i+r[6]*n+r[10]*o+r[14]*a,t[3]=r[3]*i+r[7]*n+r[11]*o+r[15]*a,t}var bo=function(){var t=vo();return function(e,r,i,n,o,a){var s,u;for(r||(r=4),i||(i=0),u=n?Math.min(n*r+i,e.length):e.length,s=i;s<u;s+=r)t[0]=e[s],t[1]=e[s+1],t[2]=e[s+2],t[3]=e[s+3],o(t,t,a),e[s]=t[0],e[s+1]=t[1],e[s+2]=t[2],e[s+3]=t[3];return e}}();function wo(){var t=new lo(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t}co(),fo(1,0,0),fo(0,1,0),wo(),wo(),po(),function(){var t;(t=new lo(2))[0]=0,t[1]=0}();var Eo=function(t){function e(e){t.call(this,e,uo)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new Hn(t)},e.prototype.queryRadius=function(t){var e=t;return oo("circle-radius",this,e)+oo("circle-stroke-width",this,e)+ao(this.paint.get("circle-translate"))},e.prototype.queryIntersectsFeature=function(t,e,r,i,n,o,a,s){for(var u=so(t,this.paint.get("circle-translate"),this.paint.get("circle-translate-anchor"),o.angle,a),l=this.paint.get("circle-radius").evaluate(e,r)+this.paint.get("circle-stroke-width").evaluate(e,r),p="map"===this.paint.get("circle-pitch-alignment"),c=p?u:function(t,e,r){return u.map(function(t){return t.map(function(t){return So(t,e,r)})})}(0,s,o),h=p?l*a:l,f=0,d=i;f<d.length;f+=1)for(var m=0,y=d[f];m<y.length;m+=1){var _=y[m],v=p?_:So(_,s,o),g=h,x=xo([],[_.x,_.y,0,1],s);if("viewport"===this.paint.get("circle-pitch-scale")&&"map"===this.paint.get("circle-pitch-alignment")?g*=x[3]/o.cameraToCenterDistance:"map"===this.paint.get("circle-pitch-scale")&&"viewport"===this.paint.get("circle-pitch-alignment")&&(g*=o.cameraToCenterDistance/x[3]),Kn(c,v,g))return!0}return!1},e}(Li);function So(t,e,r){var i=xo([],[t.x,t.y,0,1],e);return new n((i[0]/i[3]+1)*r.width*.5,(i[1]/i[3]+1)*r.height*.5)}var To=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Hn);function Ao(t,e,r,i){var n=e.width,o=e.height;if(i){if(i.length!==n*o*r)throw new RangeError("mismatched image size")}else i=new Uint8Array(n*o*r);return t.width=n,t.height=o,t.data=i,t}function zo(t,e,r){var i=e.width,n=e.height;if(i!==t.width||n!==t.height){var o=Ao({},{width:i,height:n},r);Io(t,o,{x:0,y:0},{x:0,y:0},{width:Math.min(t.width,i),height:Math.min(t.height,n)},r),t.width=i,t.height=n,t.data=o.data}}function Io(t,e,r,i,n,o){if(0===n.width||0===n.height)return e;if(n.width>t.width||n.height>t.height||r.x>t.width-n.width||r.y>t.height-n.height)throw new RangeError("out of range source coordinates for image copy");if(n.width>e.width||n.height>e.height||i.x>e.width-n.width||i.y>e.height-n.height)throw new RangeError("out of range destination coordinates for image copy");for(var a=t.data,s=e.data,u=0;u<n.height;u++)for(var l=((r.y+u)*t.width+r.x)*o,p=((i.y+u)*e.width+i.x)*o,c=0;c<n.width*o;c++)s[p+c]=a[l+c];return e}ei("HeatmapBucket",To,{omit:["layers"]});var Co=function(t,e){Ao(this,t,1,e)};Co.prototype.resize=function(t){zo(this,t,1)},Co.prototype.clone=function(){return new Co({width:this.width,height:this.height},new Uint8Array(this.data))},Co.copy=function(t,e,r,i,n){Io(t,e,r,i,n,1)};var ko=function(t,e){Ao(this,t,4,e)};ko.prototype.resize=function(t){zo(this,t,4)},ko.prototype.clone=function(){return new ko({width:this.width,height:this.height},new Uint8Array(this.data))},ko.copy=function(t,e,r,i,n){Io(t,e,r,i,n,4)},ei("AlphaImage",Co),ei("RGBAImage",ko);var Po={paint:new Mi({"heatmap-radius":new Ii(ft.paint_heatmap["heatmap-radius"]),"heatmap-weight":new Ii(ft.paint_heatmap["heatmap-weight"]),"heatmap-intensity":new zi(ft.paint_heatmap["heatmap-intensity"]),"heatmap-color":new Pi(ft.paint_heatmap["heatmap-color"]),"heatmap-opacity":new zi(ft.paint_heatmap["heatmap-opacity"])})};function Mo(t,e){for(var r=new Uint8Array(1024),i={},n=0,o=0;n<256;n++,o+=4){i[e]=n/255;var a=t.evaluate(i);r[o+0]=Math.floor(255*a.r/a.a),r[o+1]=Math.floor(255*a.g/a.a),r[o+2]=Math.floor(255*a.b/a.a),r[o+3]=Math.floor(255*a.a)}return new ko({width:256,height:1},r)}var Lo=function(t){function e(e){t.call(this,e,Po),this._updateColorRamp()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new To(t)},e.prototype._handleSpecialPaintPropertyUpdate=function(t){"heatmap-color"===t&&this._updateColorRamp()},e.prototype._updateColorRamp=function(){var t=this._transitionablePaint._values["heatmap-color"].value.expression;this.colorRamp=Mo(t,"heatmapDensity"),this.colorRampTexture=null},e.prototype.resize=function(){this.heatmapFbo&&(this.heatmapFbo.destroy(),this.heatmapFbo=null)},e.prototype.queryRadius=function(){return 0},e.prototype.queryIntersectsFeature=function(){return!1},e.prototype.hasOffscreenPass=function(){return 0!==this.paint.get("heatmap-opacity")&&"none"!==this.visibility},e}(Li),Do={paint:new Mi({"hillshade-illumination-direction":new zi(ft.paint_hillshade["hillshade-illumination-direction"]),"hillshade-illumination-anchor":new zi(ft.paint_hillshade["hillshade-illumination-anchor"]),"hillshade-exaggeration":new zi(ft.paint_hillshade["hillshade-exaggeration"]),"hillshade-shadow-color":new zi(ft.paint_hillshade["hillshade-shadow-color"]),"hillshade-highlight-color":new zi(ft.paint_hillshade["hillshade-highlight-color"]),"hillshade-accent-color":new zi(ft.paint_hillshade["hillshade-accent-color"])})},Bo=function(t){function e(e){t.call(this,e,Do)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.hasOffscreenPass=function(){return 0!==this.paint.get("hillshade-exaggeration")&&"none"!==this.visibility},e}(Li),Ro=Oi([{name:"a_pos",components:2,type:"Int16"}],4),Oo=Ro.members,Fo=(Ro.size,Ro.alignment,Vo),Uo=Vo;function Vo(t,e,r){r=r||2;var i,n,o,a,s,u,l,p=e&&e.length,c=p?e[0]*r:t.length,h=No(t,0,c,r,!0),f=[];if(!h)return f;if(p&&(h=function(t,e,r,i){var n,o,a,s=[];for(n=0,o=e.length;n<o;n++)(a=No(t,e[n]*i,n<o-1?e[n+1]*i:t.length,i,!1))===a.next&&(a.steiner=!0),s.push(Jo(a));for(s.sort(Ho),n=0;n<s.length;n++)Ko(s[n],r),r=jo(r,r.next);return r}(t,e,h,r)),t.length>80*r){i=o=t[0],n=a=t[1];for(var d=r;d<c;d+=r)(s=t[d])<i&&(i=s),(u=t[d+1])<n&&(n=u),s>o&&(o=s),u>a&&(a=u);l=0!==(l=Math.max(o-i,a-n))?1/l:0}return qo(h,f,r,i,n,l),f}function No(t,e,r,i,n){var o,a;if(n===ua(t,e,r,i)>0)for(o=e;o<r;o+=i)a=oa(o,t[o],t[o+1],a);else for(o=r-i;o>=e;o-=i)a=oa(o,t[o],t[o+1],a);return a&&ea(a,a.next)&&(aa(a),a=a.next),a}function jo(t,e){if(!t)return t;e||(e=t);var r,i=t;do{if(r=!1,i.steiner||!ea(i,i.next)&&0!==ta(i.prev,i,i.next))i=i.next;else{if(aa(i),(i=e=i.prev)===i.next)break;r=!0}}while(r||i!==e);return e}function qo(t,e,r,i,n,o,a){if(t){!a&&o&&function(t,e,r,i){var n=t;do{null===n.z&&(n.z=Yo(n.x,n.y,e,r,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next}while(n!==t);n.prevZ.nextZ=null,n.prevZ=null,function(t){var e,r,i,n,o,a,s,u,l=1;do{for(r=t,t=null,o=null,a=0;r;){for(a++,i=r,s=0,e=0;e<l&&(s++,i=i.nextZ);e++);for(u=l;s>0||u>0&&i;)0!==s&&(0===u||!i||r.z<=i.z)?(n=r,r=r.nextZ,s--):(n=i,i=i.nextZ,u--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;r=i}o.nextZ=null,l*=2}while(a>1)}(n)}(t,i,n,o);for(var s,u,l=t;t.prev!==t.next;)if(s=t.prev,u=t.next,o?Go(t,i,n,o):Zo(t))e.push(s.i/r),e.push(t.i/r),e.push(u.i/r),aa(t),t=u.next,l=u.next;else if((t=u)===l){a?1===a?qo(t=Xo(t,e,r),e,r,i,n,o,2):2===a&&Wo(t,e,r,i,n,o):qo(jo(t),e,r,i,n,o,1);break}}}function Zo(t){var e=t.prev,r=t,i=t.next;if(ta(e,r,i)>=0)return!1;for(var n=t.next.next;n!==t.prev;){if($o(e.x,e.y,r.x,r.y,i.x,i.y,n.x,n.y)&&ta(n.prev,n,n.next)>=0)return!1;n=n.next}return!0}function Go(t,e,r,i){var n=t.prev,o=t,a=t.next;if(ta(n,o,a)>=0)return!1;for(var s=n.x<o.x?n.x<a.x?n.x:a.x:o.x<a.x?o.x:a.x,u=n.y<o.y?n.y<a.y?n.y:a.y:o.y<a.y?o.y:a.y,l=n.x>o.x?n.x>a.x?n.x:a.x:o.x>a.x?o.x:a.x,p=n.y>o.y?n.y>a.y?n.y:a.y:o.y>a.y?o.y:a.y,c=Yo(s,u,e,r,i),h=Yo(l,p,e,r,i),f=t.prevZ,d=t.nextZ;f&&f.z>=c&&d&&d.z<=h;){if(f!==t.prev&&f!==t.next&&$o(n.x,n.y,o.x,o.y,a.x,a.y,f.x,f.y)&&ta(f.prev,f,f.next)>=0)return!1;if(f=f.prevZ,d!==t.prev&&d!==t.next&&$o(n.x,n.y,o.x,o.y,a.x,a.y,d.x,d.y)&&ta(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(;f&&f.z>=c;){if(f!==t.prev&&f!==t.next&&$o(n.x,n.y,o.x,o.y,a.x,a.y,f.x,f.y)&&ta(f.prev,f,f.next)>=0)return!1;f=f.prevZ}for(;d&&d.z<=h;){if(d!==t.prev&&d!==t.next&&$o(n.x,n.y,o.x,o.y,a.x,a.y,d.x,d.y)&&ta(d.prev,d,d.next)>=0)return!1;d=d.nextZ}return!0}function Xo(t,e,r){var i=t;do{var n=i.prev,o=i.next.next;!ea(n,o)&&ra(n,i,i.next,o)&&ia(n,o)&&ia(o,n)&&(e.push(n.i/r),e.push(i.i/r),e.push(o.i/r),aa(i),aa(i.next),i=t=o),i=i.next}while(i!==t);return i}function Wo(t,e,r,i,n,o){var a=t;do{for(var s=a.next.next;s!==a.prev;){if(a.i!==s.i&&Qo(a,s)){var u=na(a,s);return a=jo(a,a.next),u=jo(u,u.next),qo(a,e,r,i,n,o),void qo(u,e,r,i,n,o)}s=s.next}a=a.next}while(a!==t)}function Ho(t,e){return t.x-e.x}function Ko(t,e){if(e=function(t,e){var r,i=e,n=t.x,o=t.y,a=-1/0;do{if(o<=i.y&&o>=i.next.y&&i.next.y!==i.y){var s=i.x+(o-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(s<=n&&s>a){if(a=s,s===n){if(o===i.y)return i;if(o===i.next.y)return i.next}r=i.x<i.next.x?i:i.next}}i=i.next}while(i!==e);if(!r)return null;if(n===a)return r.prev;var u,l=r,p=r.x,c=r.y,h=1/0;for(i=r.next;i!==l;)n>=i.x&&i.x>=p&&n!==i.x&&$o(o<c?n:a,o,p,c,o<c?a:n,o,i.x,i.y)&&((u=Math.abs(o-i.y)/(n-i.x))<h||u===h&&i.x>r.x)&&ia(i,t)&&(r=i,h=u),i=i.next;return r}(t,e)){var r=na(e,t);jo(r,r.next)}}function Yo(t,e,r,i,n){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*n)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*n)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function Jo(t){var e=t,r=t;do{e.x<r.x&&(r=e),e=e.next}while(e!==t);return r}function $o(t,e,r,i,n,o,a,s){return(n-a)*(e-s)-(t-a)*(o-s)>=0&&(t-a)*(i-s)-(r-a)*(e-s)>=0&&(r-a)*(o-s)-(n-a)*(i-s)>=0}function Qo(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&ra(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}(t,e)&&ia(t,e)&&ia(e,t)&&function(t,e){var r=t,i=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;do{r.y>o!=r.next.y>o&&r.next.y!==r.y&&n<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(i=!i),r=r.next}while(r!==t);return i}(t,e)}function ta(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function ea(t,e){return t.x===e.x&&t.y===e.y}function ra(t,e,r,i){return!!(ea(t,e)&&ea(r,i)||ea(t,i)&&ea(r,e))||ta(t,e,r)>0!=ta(t,e,i)>0&&ta(r,i,t)>0!=ta(r,i,e)>0}function ia(t,e){return ta(t.prev,t,t.next)<0?ta(t,e,t.next)>=0&&ta(t,t.prev,e)>=0:ta(t,e,t.prev)<0||ta(t,t.next,e)<0}function na(t,e){var r=new sa(t.i,t.x,t.y),i=new sa(e.i,e.x,e.y),n=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=n,n.prev=r,i.next=r,r.prev=i,o.next=i,i.prev=o,i}function oa(t,e,r,i){var n=new sa(t,e,r);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function aa(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function sa(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function ua(t,e,r,i){for(var n=0,o=e,a=r-i;o<r;o+=i)n+=(t[a]-t[o])*(t[o+1]+t[a+1]),a=o;return n}Vo.deviation=function(t,e,r,i){var n=e&&e.length,o=n?e[0]*r:t.length,a=Math.abs(ua(t,0,o,r));if(n)for(var s=0,u=e.length;s<u;s++){var l=e[s]*r,p=s<u-1?e[s+1]*r:t.length;a-=Math.abs(ua(t,l,p,r))}var c=0;for(s=0;s<i.length;s+=3){var h=i[s]*r,f=i[s+1]*r,d=i[s+2]*r;c+=Math.abs((t[h]-t[d])*(t[f+1]-t[h+1])-(t[h]-t[f])*(t[d+1]-t[h+1]))}return 0===a&&0===c?0:Math.abs((c-a)/a)},Vo.flatten=function(t){for(var e=t[0][0].length,r={vertices:[],holes:[],dimensions:e},i=0,n=0;n<t.length;n++){for(var o=0;o<t[n].length;o++)for(var a=0;a<e;a++)r.vertices.push(t[n][o][a]);n>0&&(i+=t[n-1].length,r.holes.push(i))}return r},Fo.default=Uo;var la=ca,pa=ca;function ca(t,e,r,i,n){!function t(e,r,i,n,o){for(;n>i;){if(n-i>600){var a=n-i+1,s=r-i+1,u=Math.log(a),l=.5*Math.exp(2*u/3),p=.5*Math.sqrt(u*l*(a-l)/a)*(s-a/2<0?-1:1);t(e,r,Math.max(i,Math.floor(r-s*l/a+p)),Math.min(n,Math.floor(r+(a-s)*l/a+p)),o)}var c=e[r],h=i,f=n;for(ha(e,i,r),o(e[n],c)>0&&ha(e,i,n);h<f;){for(ha(e,h,f),h++,f--;o(e[h],c)<0;)h++;for(;o(e[f],c)>0;)f--}0===o(e[i],c)?ha(e,i,f):ha(e,++f,n),f<=r&&(i=f+1),r<=f&&(n=f-1)}}(t,e,r||0,i||t.length-1,n||fa)}function ha(t,e,r){var i=t[e];t[e]=t[r],t[r]=i}function fa(t,e){return t<e?-1:t>e?1:0}function da(t,e){var r=t.length;if(r<=1)return[t];for(var i,n,o=[],a=0;a<r;a++){var s=S(t[a]);0!==s&&(t[a].area=Math.abs(s),void 0===n&&(n=s<0),n===s<0?(i&&o.push(i),i=[t[a]]):i.push(t[a]))}if(i&&o.push(i),e>1)for(var u=0;u<o.length;u++)o[u].length<=e||(la(o[u],e,1,o[u].length-1,ma),o[u]=o[u].slice(0,e));return o}function ma(t,e){return e.area-t.area}function ya(t,e,r){for(var i=r.patternDependencies,n=!1,o=0,a=e;o<a.length;o+=1){var s=a[o].paint.get(t+"-pattern");s.isConstant()||(n=!0);var u=s.constantOr(null);u&&(n=!0,i[u.to]=!0,i[u.from]=!0)}return n}function _a(t,e,r,i,n){for(var o=n.patternDependencies,a=0,s=e;a<s.length;a+=1){var u=s[a],l=u.paint.get(t+"-pattern").value;if("constant"!==l.kind){var p=l.evaluate({zoom:i-1},r,{}),c=l.evaluate({zoom:i},r,{}),h=l.evaluate({zoom:i+1},r,{});o[p]=!0,o[c]=!0,o[h]=!0,r.patterns[u.id]={min:p,mid:c,max:h}}}return r}la.default=pa;var va=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(function(t){return t.id}),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new Ui,this.indexArray=new en,this.indexArray2=new rn,this.programConfigurations=new Nn(Oo,t.layers,t.zoom),this.segments=new bn,this.segments2=new bn};va.prototype.populate=function(t,e){this.features=[],this.hasPattern=ya("fill",this.layers,e);for(var r=0,i=t;r<i.length;r+=1){var n=i[r],o=n.feature,a=n.index,s=n.sourceLayerIndex;if(this.layers[0]._featureFilter(new vi(this.zoom),o)){var u=Xn(o),l={sourceLayerIndex:s,index:a,geometry:u,properties:o.properties,type:o.type,patterns:{}};void 0!==o.id&&(l.id=o.id),this.hasPattern?this.features.push(_a("fill",this.layers,l,this.zoom,e)):this.addFeature(l,u,a,{}),e.featureIndex.insert(o,u,a,s,this.index)}}},va.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},va.prototype.addFeatures=function(t,e){for(var r=0,i=this.features;r<i.length;r+=1){var n=i[r],o=n.geometry;this.addFeature(n,o,n.index,e)}},va.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},va.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},va.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Oo),this.indexBuffer=t.createIndexBuffer(this.indexArray),this.indexBuffer2=t.createIndexBuffer(this.indexArray2)),this.programConfigurations.upload(t),this.uploaded=!0},va.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.indexBuffer2.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.segments2.destroy())},va.prototype.addFeature=function(t,e,r,i){for(var n=0,o=da(e,500);n<o.length;n+=1){for(var a=o[n],s=0,u=0,l=a;u<l.length;u+=1)s+=l[u].length;for(var p=this.segments.prepareSegment(s,this.layoutVertexArray,this.indexArray),c=p.vertexLength,h=[],f=[],d=0,m=a;d<m.length;d+=1){var y=m[d];if(0!==y.length){y!==a[0]&&f.push(h.length/2);var _=this.segments2.prepareSegment(y.length,this.layoutVertexArray,this.indexArray2),v=_.vertexLength;this.layoutVertexArray.emplaceBack(y[0].x,y[0].y),this.indexArray2.emplaceBack(v+y.length-1,v),h.push(y[0].x),h.push(y[0].y);for(var g=1;g<y.length;g++)this.layoutVertexArray.emplaceBack(y[g].x,y[g].y),this.indexArray2.emplaceBack(v+g-1,v+g),h.push(y[g].x),h.push(y[g].y);_.vertexLength+=y.length,_.primitiveLength+=y.length}}for(var x=Fo(h,f),b=0;b<x.length;b+=3)this.indexArray.emplaceBack(c+x[b],c+x[b+1],c+x[b+2]);p.vertexLength+=s,p.primitiveLength+=x.length/3}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,i)},ei("FillBucket",va,{omit:["layers","features"]});var ga={paint:new Mi({"fill-antialias":new zi(ft.paint_fill["fill-antialias"]),"fill-opacity":new Ii(ft.paint_fill["fill-opacity"]),"fill-color":new Ii(ft.paint_fill["fill-color"]),"fill-outline-color":new Ii(ft.paint_fill["fill-outline-color"]),"fill-translate":new zi(ft.paint_fill["fill-translate"]),"fill-translate-anchor":new zi(ft.paint_fill["fill-translate-anchor"]),"fill-pattern":new Ci(ft.paint_fill["fill-pattern"])})},xa=function(t){function e(e){t.call(this,e,ga)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.recalculate=function(e){t.prototype.recalculate.call(this,e);var r=this.paint._values["fill-outline-color"];"constant"===r.value.kind&&void 0===r.value.value&&(this.paint._values["fill-outline-color"]=this.paint._values["fill-color"])},e.prototype.createBucket=function(t){return new va(t)},e.prototype.queryRadius=function(){return ao(this.paint.get("fill-translate"))},e.prototype.queryIntersectsFeature=function(t,e,r,i,n,o,a){return Yn(so(t,this.paint.get("fill-translate"),this.paint.get("fill-translate-anchor"),o.angle,a),i)},e}(Li),ba=Oi([{name:"a_pos",components:2,type:"Int16"},{name:"a_normal_ed",components:4,type:"Int16"}],4),wa=ba.members,Ea=(ba.size,ba.alignment,Math.pow(2,13));function Sa(t,e,r,i,n,o,a,s){t.emplaceBack(e,r,2*Math.floor(i*Ea)+a,n*Ea*2,o*Ea*2,Math.round(s))}var Ta=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(function(t){return t.id}),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new Ni,this.indexArray=new en,this.programConfigurations=new Nn(wa,t.layers,t.zoom),this.segments=new bn};function Aa(t,e){return t.x===e.x&&(t.x<0||t.x>Zn)||t.y===e.y&&(t.y<0||t.y>Zn)}function za(t){return t.every(function(t){return t.x<0})||t.every(function(t){return t.x>Zn})||t.every(function(t){return t.y<0})||t.every(function(t){return t.y>Zn})}Ta.prototype.populate=function(t,e){this.features=[],this.hasPattern=ya("fill-extrusion",this.layers,e);for(var r=0,i=t;r<i.length;r+=1){var n=i[r],o=n.feature,a=n.index,s=n.sourceLayerIndex;if(this.layers[0]._featureFilter(new vi(this.zoom),o)){var u=Xn(o),l={sourceLayerIndex:s,index:a,geometry:u,properties:o.properties,type:o.type,patterns:{}};void 0!==o.id&&(l.id=o.id),this.hasPattern?this.features.push(_a("fill-extrusion",this.layers,l,this.zoom,e)):this.addFeature(l,u,a,{}),e.featureIndex.insert(o,u,a,s,this.index)}}},Ta.prototype.addFeatures=function(t,e){for(var r=0,i=this.features;r<i.length;r+=1){var n=i[r],o=n.geometry;this.addFeature(n,o,n.index,e)}},Ta.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},Ta.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},Ta.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},Ta.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,wa),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},Ta.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},Ta.prototype.addFeature=function(t,e,r,i){for(var n=0,o=da(e,500);n<o.length;n+=1){for(var a=o[n],s=0,u=0,l=a;u<l.length;u+=1)s+=l[u].length;for(var p=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray),c=0,h=a;c<h.length;c+=1){var f=h[c];if(0!==f.length&&!za(f))for(var d=0,m=0;m<f.length;m++){var y=f[m];if(m>=1){var _=f[m-1];if(!Aa(y,_)){p.vertexLength+4>bn.MAX_VERTEX_ARRAY_LENGTH&&(p=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray));var v=y.sub(_)._perp()._unit(),g=_.dist(y);d+g>32768&&(d=0),Sa(this.layoutVertexArray,y.x,y.y,v.x,v.y,0,0,d),Sa(this.layoutVertexArray,y.x,y.y,v.x,v.y,0,1,d),d+=g,Sa(this.layoutVertexArray,_.x,_.y,v.x,v.y,0,0,d),Sa(this.layoutVertexArray,_.x,_.y,v.x,v.y,0,1,d);var x=p.vertexLength;this.indexArray.emplaceBack(x,x+2,x+1),this.indexArray.emplaceBack(x+1,x+2,x+3),p.vertexLength+=4,p.primitiveLength+=2}}}}p.vertexLength+s>bn.MAX_VERTEX_ARRAY_LENGTH&&(p=this.segments.prepareSegment(s,this.layoutVertexArray,this.indexArray));for(var b=[],w=[],E=p.vertexLength,S=0,T=a;S<T.length;S+=1){var A=T[S];if(0!==A.length){A!==a[0]&&w.push(b.length/2);for(var z=0;z<A.length;z++){var I=A[z];Sa(this.layoutVertexArray,I.x,I.y,0,0,1,1,0),b.push(I.x),b.push(I.y)}}}for(var C=Fo(b,w),k=0;k<C.length;k+=3)this.indexArray.emplaceBack(E+C[k],E+C[k+2],E+C[k+1]);p.primitiveLength+=C.length/3,p.vertexLength+=s}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,i)},ei("FillExtrusionBucket",Ta,{omit:["layers","features"]});var Ia={paint:new Mi({"fill-extrusion-opacity":new zi(ft["paint_fill-extrusion"]["fill-extrusion-opacity"]),"fill-extrusion-color":new Ii(ft["paint_fill-extrusion"]["fill-extrusion-color"]),"fill-extrusion-translate":new zi(ft["paint_fill-extrusion"]["fill-extrusion-translate"]),"fill-extrusion-translate-anchor":new zi(ft["paint_fill-extrusion"]["fill-extrusion-translate-anchor"]),"fill-extrusion-pattern":new Ci(ft["paint_fill-extrusion"]["fill-extrusion-pattern"]),"fill-extrusion-height":new Ii(ft["paint_fill-extrusion"]["fill-extrusion-height"]),"fill-extrusion-base":new Ii(ft["paint_fill-extrusion"]["fill-extrusion-base"]),"fill-extrusion-vertical-gradient":new zi(ft["paint_fill-extrusion"]["fill-extrusion-vertical-gradient"])})},Ca=function(t){function e(e){t.call(this,e,Ia)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new Ta(t)},e.prototype.queryRadius=function(){return ao(this.paint.get("fill-extrusion-translate"))},e.prototype.queryIntersectsFeature=function(t,e,r,i,n,o,a){return Yn(so(t,this.paint.get("fill-extrusion-translate"),this.paint.get("fill-extrusion-translate-anchor"),o.angle,a),i)},e.prototype.hasOffscreenPass=function(){return 0!==this.paint.get("fill-extrusion-opacity")&&"none"!==this.visibility},e.prototype.resize=function(){this.viewportFrame&&(this.viewportFrame.destroy(),this.viewportFrame=null)},e}(Li),ka=Oi([{name:"a_pos_normal",components:4,type:"Int16"},{name:"a_data",components:4,type:"Uint8"}],4),Pa=ka.members,Ma=(ka.size,ka.alignment,La);function La(t,e,r,i,n){this.properties={},this.extent=r,this.type=0,this._pbf=t,this._geometry=-1,this._keys=i,this._values=n,t.readFields(Da,this,e)}function Da(t,e,r){1==t?e.id=r.readVarint():2==t?function(t,e){for(var r=t.readVarint()+t.pos;t.pos<r;){var i=e._keys[t.readVarint()],n=e._values[t.readVarint()];e.properties[i]=n}}(r,e):3==t?e.type=r.readVarint():4==t&&(e._geometry=r.pos)}function Ba(t){for(var e,r,i=0,n=0,o=t.length,a=o-1;n<o;a=n++)e=t[n],i+=((r=t[a]).x-e.x)*(e.y+r.y);return i}La.types=["Unknown","Point","LineString","Polygon"],La.prototype.loadGeometry=function(){var t=this._pbf;t.pos=this._geometry;for(var e,r=t.readVarint()+t.pos,i=1,o=0,a=0,s=0,u=[];t.pos<r;){if(o<=0){var l=t.readVarint();i=7&l,o=l>>3}if(o--,1===i||2===i)a+=t.readSVarint(),s+=t.readSVarint(),1===i&&(e&&u.push(e),e=[]),e.push(new n(a,s));else{if(7!==i)throw new Error("unknown command "+i);e&&e.push(e[0].clone())}}return e&&u.push(e),u},La.prototype.bbox=function(){var t=this._pbf;t.pos=this._geometry;for(var e=t.readVarint()+t.pos,r=1,i=0,n=0,o=0,a=1/0,s=-1/0,u=1/0,l=-1/0;t.pos<e;){if(i<=0){var p=t.readVarint();r=7&p,i=p>>3}if(i--,1===r||2===r)(n+=t.readSVarint())<a&&(a=n),n>s&&(s=n),(o+=t.readSVarint())<u&&(u=o),o>l&&(l=o);else if(7!==r)throw new Error("unknown command "+r)}return[a,u,s,l]},La.prototype.toGeoJSON=function(t,e,r){var i,n,o=this.extent*Math.pow(2,r),a=this.extent*t,s=this.extent*e,u=this.loadGeometry(),l=La.types[this.type];function p(t){for(var e=0;e<t.length;e++){var r=t[e],i=180-360*(r.y+s)/o;t[e]=[360*(r.x+a)/o-180,360/Math.PI*Math.atan(Math.exp(i*Math.PI/180))-90]}}switch(this.type){case 1:var c=[];for(i=0;i<u.length;i++)c[i]=u[i][0];p(u=c);break;case 2:for(i=0;i<u.length;i++)p(u[i]);break;case 3:for(u=function(t){var e=t.length;if(e<=1)return[t];for(var r,i,n=[],o=0;o<e;o++){var a=Ba(t[o]);0!==a&&(void 0===i&&(i=a<0),i===a<0?(r&&n.push(r),r=[t[o]]):r.push(t[o]))}return r&&n.push(r),n}(u),i=0;i<u.length;i++)for(n=0;n<u[i].length;n++)p(u[i][n])}1===u.length?u=u[0]:l="Multi"+l;var h={type:"Feature",geometry:{type:l,coordinates:u},properties:this.properties};return"id"in this&&(h.id=this.id),h};var Ra=Oa;function Oa(t,e){this.version=1,this.name=null,this.extent=4096,this.length=0,this._pbf=t,this._keys=[],this._values=[],this._features=[],t.readFields(Fa,this,e),this.length=this._features.length}function Fa(t,e,r){15===t?e.version=r.readVarint():1===t?e.name=r.readString():5===t?e.extent=r.readVarint():2===t?e._features.push(r.pos):3===t?e._keys.push(r.readString()):4===t&&e._values.push(function(t){for(var e=null,r=t.readVarint()+t.pos;t.pos<r;){var i=t.readVarint()>>3;e=1===i?t.readString():2===i?t.readFloat():3===i?t.readDouble():4===i?t.readVarint64():5===i?t.readVarint():6===i?t.readSVarint():7===i?t.readBoolean():null}return e}(r))}function Ua(t,e,r){if(3===t){var i=new Ra(r,r.readVarint()+r.pos);i.length&&(e[i.name]=i)}}Oa.prototype.feature=function(t){if(t<0||t>=this._features.length)throw new Error("feature index out of bounds");this._pbf.pos=this._features[t];var e=this._pbf.readVarint()+this._pbf.pos;return new Ma(this._pbf,e,this.extent,this._keys,this._values)};var Va={VectorTile:function(t,e){this.layers=t.readFields(Ua,{},e)},VectorTileFeature:Ma,VectorTileLayer:Ra},Na=Va.VectorTileFeature.types,ja=63,qa=Math.cos(Math.PI/180*37.5),Za=.5,Ga=Math.pow(2,14)/Za;function Xa(t,e,r,i,n,o,a){t.emplaceBack(e.x,e.y,i?1:0,n?1:-1,Math.round(ja*r.x)+128,Math.round(ja*r.y)+128,1+(0===o?0:o<0?-1:1)|(a*Za&63)<<2,a*Za>>6)}var Wa=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(function(t){return t.id}),this.index=t.index,this.features=[],this.hasPattern=!1,this.layoutVertexArray=new ji,this.indexArray=new en,this.programConfigurations=new Nn(Pa,t.layers,t.zoom),this.segments=new bn};function Ha(t,e){return(t/e.tileTotal*(e.end-e.start)+e.start)*(Ga-1)}Wa.prototype.populate=function(t,e){this.features=[],this.hasPattern=ya("line",this.layers,e);for(var r=0,i=t;r<i.length;r+=1){var n=i[r],o=n.feature,a=n.index,s=n.sourceLayerIndex;if(this.layers[0]._featureFilter(new vi(this.zoom),o)){var u=Xn(o),l={sourceLayerIndex:s,index:a,geometry:u,properties:o.properties,type:o.type,patterns:{}};void 0!==o.id&&(l.id=o.id),this.hasPattern?this.features.push(_a("line",this.layers,l,this.zoom,e)):this.addFeature(l,u,a,{}),e.featureIndex.insert(o,u,a,s,this.index)}}},Wa.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},Wa.prototype.addFeatures=function(t,e){for(var r=0,i=this.features;r<i.length;r+=1){var n=i[r],o=n.geometry;this.addFeature(n,o,n.index,e)}},Wa.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},Wa.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},Wa.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Pa),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},Wa.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},Wa.prototype.addFeature=function(t,e,r,i){for(var n=this.layers[0].layout,o=n.get("line-join").evaluate(t,{}),a=n.get("line-cap"),s=n.get("line-miter-limit"),u=n.get("line-round-limit"),l=0,p=e;l<p.length;l+=1){var c=p[l];this.addLine(c,t,o,a,s,u,r,i)}},Wa.prototype.addLine=function(t,e,r,i,n,o,a,s){var u=null;e.properties&&e.properties.hasOwnProperty("mapbox_clip_start")&&e.properties.hasOwnProperty("mapbox_clip_end")&&(u={start:e.properties.mapbox_clip_start,end:e.properties.mapbox_clip_end,tileTotal:void 0});for(var l="Polygon"===Na[e.type],p=t.length;p>=2&&t[p-1].equals(t[p-2]);)p--;for(var c=0;c<p-1&&t[c].equals(t[c+1]);)c++;if(!(p<(l?3:2))){u&&(u.tileTotal=function(t,e,r){for(var i,n,o=0,a=c;a<r-1;a++)i=t[a],n=t[a+1],o+=i.dist(n);return o}(t,0,p)),"bevel"===r&&(n=1.05);var h=Zn/(512*this.overscaling)*15,f=t[c],d=this.segments.prepareSegment(10*p,this.layoutVertexArray,this.indexArray);this.distance=0;var m,y,_,v=i,g=l?"butt":i,x=!0,b=void 0,w=void 0,E=void 0,S=void 0;this.e1=this.e2=this.e3=-1,l&&(m=t[p-2],S=f.sub(m)._unit()._perp());for(var T=c;T<p;T++)if(!(w=l&&T===p-1?t[c+1]:t[T+1])||!t[T].equals(w)){S&&(E=S),m&&(b=m),m=t[T],S=w?w.sub(m)._unit()._perp():E;var A=(E=E||S).add(S);0===A.x&&0===A.y||A._unit();var z=A.x*S.x+A.y*S.y,I=0!==z?1/z:1/0,C=z<qa&&b&&w;if(C&&T>c){var k=m.dist(b);if(k>2*h){var P=m.sub(m.sub(b)._mult(h/k)._round());this.distance+=P.dist(b),this.addCurrentVertex(P,this.distance,E.mult(1),0,0,!1,d,u),b=P}}var M=b&&w,L=M?r:w?v:g;if(M&&"round"===L&&(I<o?L="miter":I<=2&&(L="fakeround")),"miter"===L&&I>n&&(L="bevel"),"bevel"===L&&(I>2&&(L="flipbevel"),I<n&&(L="miter")),b&&(this.distance+=m.dist(b)),"miter"===L)A._mult(I),this.addCurrentVertex(m,this.distance,A,0,0,!1,d,u);else if("flipbevel"===L){if(I>100)A=S.clone().mult(-1);else{var D=E.x*S.y-E.y*S.x>0?-1:1,B=I*E.add(S).mag()/E.sub(S).mag();A._perp()._mult(B*D)}this.addCurrentVertex(m,this.distance,A,0,0,!1,d,u),this.addCurrentVertex(m,this.distance,A.mult(-1),0,0,!1,d,u)}else if("bevel"===L||"fakeround"===L){var R=E.x*S.y-E.y*S.x>0,O=-Math.sqrt(I*I-1);if(R?(_=0,y=O):(y=0,_=O),x||this.addCurrentVertex(m,this.distance,E,y,_,!1,d,u),"fakeround"===L){for(var F=Math.floor(8*(.5-(z-.5))),U=void 0,V=0;V<F;V++)U=S.mult((V+1)/(F+1))._add(E)._unit(),this.addPieSliceVertex(m,this.distance,U,R,d,u);this.addPieSliceVertex(m,this.distance,A,R,d,u);for(var N=F-1;N>=0;N--)U=E.mult((N+1)/(F+1))._add(S)._unit(),this.addPieSliceVertex(m,this.distance,U,R,d,u)}w&&this.addCurrentVertex(m,this.distance,S,-y,-_,!1,d,u)}else"butt"===L?(x||this.addCurrentVertex(m,this.distance,E,0,0,!1,d,u),w&&this.addCurrentVertex(m,this.distance,S,0,0,!1,d,u)):"square"===L?(x||(this.addCurrentVertex(m,this.distance,E,1,1,!1,d,u),this.e1=this.e2=-1),w&&this.addCurrentVertex(m,this.distance,S,-1,-1,!1,d,u)):"round"===L&&(x||(this.addCurrentVertex(m,this.distance,E,0,0,!1,d,u),this.addCurrentVertex(m,this.distance,E,1,1,!0,d,u),this.e1=this.e2=-1),w&&(this.addCurrentVertex(m,this.distance,S,-1,-1,!0,d,u),this.addCurrentVertex(m,this.distance,S,0,0,!1,d,u)));if(C&&T<p-1){var j=m.dist(w);if(j>2*h){var q=m.add(w.sub(m)._mult(h/j)._round());this.distance+=q.dist(m),this.addCurrentVertex(q,this.distance,S.mult(1),0,0,!1,d,u),m=q}}x=!1}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,e,a,s)}},Wa.prototype.addCurrentVertex=function(t,e,r,i,n,o,a,s){var u,l=this.layoutVertexArray,p=this.indexArray;s&&(e=Ha(e,s)),u=r.clone(),i&&u._sub(r.perp()._mult(i)),Xa(l,t,u,o,!1,i,e),this.e3=a.vertexLength++,this.e1>=0&&this.e2>=0&&(p.emplaceBack(this.e1,this.e2,this.e3),a.primitiveLength++),this.e1=this.e2,this.e2=this.e3,u=r.mult(-1),n&&u._sub(r.perp()._mult(n)),Xa(l,t,u,o,!0,-n,e),this.e3=a.vertexLength++,this.e1>=0&&this.e2>=0&&(p.emplaceBack(this.e1,this.e2,this.e3),a.primitiveLength++),this.e1=this.e2,this.e2=this.e3,e>Ga/2&&!s&&(this.distance=0,this.addCurrentVertex(t,this.distance,r,i,n,o,a))},Wa.prototype.addPieSliceVertex=function(t,e,r,i,n,o){r=r.mult(i?-1:1);var a=this.layoutVertexArray,s=this.indexArray;o&&(e=Ha(e,o)),Xa(a,t,r,!1,i,0,e),this.e3=n.vertexLength++,this.e1>=0&&this.e2>=0&&(s.emplaceBack(this.e1,this.e2,this.e3),n.primitiveLength++),i?this.e2=this.e3:this.e1=this.e3},ei("LineBucket",Wa,{omit:["layers","features"]});var Ka=new Mi({"line-cap":new zi(ft.layout_line["line-cap"]),"line-join":new Ii(ft.layout_line["line-join"]),"line-miter-limit":new zi(ft.layout_line["line-miter-limit"]),"line-round-limit":new zi(ft.layout_line["line-round-limit"])}),Ya={paint:new Mi({"line-opacity":new Ii(ft.paint_line["line-opacity"]),"line-color":new Ii(ft.paint_line["line-color"]),"line-translate":new zi(ft.paint_line["line-translate"]),"line-translate-anchor":new zi(ft.paint_line["line-translate-anchor"]),"line-width":new Ii(ft.paint_line["line-width"]),"line-gap-width":new Ii(ft.paint_line["line-gap-width"]),"line-offset":new Ii(ft.paint_line["line-offset"]),"line-blur":new Ii(ft.paint_line["line-blur"]),"line-dasharray":new ki(ft.paint_line["line-dasharray"]),"line-pattern":new Ci(ft.paint_line["line-pattern"]),"line-gradient":new Pi(ft.paint_line["line-gradient"])}),layout:Ka},Ja=new(function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.possiblyEvaluate=function(e,r){return r=new vi(Math.floor(r.zoom),{now:r.now,fadeDuration:r.fadeDuration,zoomHistory:r.zoomHistory,transition:r.transition}),t.prototype.possiblyEvaluate.call(this,e,r)},e.prototype.evaluate=function(e,r,i,n){return r=c({},r,{zoom:Math.floor(r.zoom)}),t.prototype.evaluate.call(this,e,r,i,n)},e}(Ii))(Ya.paint.properties["line-width"].specification);Ja.useIntegerZoom=!0;var $a=function(t){function e(e){t.call(this,e,Ya)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._handleSpecialPaintPropertyUpdate=function(t){"line-gradient"===t&&this._updateGradient()},e.prototype._updateGradient=function(){var t=this._transitionablePaint._values["line-gradient"].value.expression;this.gradient=Mo(t,"lineProgress"),this.gradientTexture=null},e.prototype.recalculate=function(e){t.prototype.recalculate.call(this,e),this.paint._values["line-floorwidth"]=Ja.possiblyEvaluate(this._transitioningPaint._values["line-width"].value,e)},e.prototype.createBucket=function(t){return new Wa(t)},e.prototype.queryRadius=function(t){var e=t,r=Qa(oo("line-width",this,e),oo("line-gap-width",this,e)),i=oo("line-offset",this,e);return r/2+Math.abs(i)+ao(this.paint.get("line-translate"))},e.prototype.queryIntersectsFeature=function(t,e,r,i,o,a,s){var u=so(t,this.paint.get("line-translate"),this.paint.get("line-translate-anchor"),a.angle,s),l=s/2*Qa(this.paint.get("line-width").evaluate(e,r),this.paint.get("line-gap-width").evaluate(e,r)),p=this.paint.get("line-offset").evaluate(e,r);return p&&(i=function(t,e){for(var r=[],i=new n(0,0),o=0;o<t.length;o++){for(var a=t[o],s=[],u=0;u<a.length;u++){var l=a[u-1],p=a[u],c=a[u+1],h=0===u?i:p.sub(l)._unit()._perp(),f=u===a.length-1?i:c.sub(p)._unit()._perp(),d=h._add(f)._unit(),m=d.x*f.x+d.y*f.y;d._mult(1/m),s.push(d._mult(e)._add(p))}r.push(s)}return r}(i,p*s)),Jn(u,i,l)},e}(Li);function Qa(t,e){return e>0?e+2*t:t}var ts=Oi([{name:"a_pos_offset",components:4,type:"Int16"},{name:"a_data",components:4,type:"Uint16"}]),es=Oi([{name:"a_projected_pos",components:3,type:"Float32"}],4),rs=(Oi([{name:"a_fade_opacity",components:1,type:"Uint32"}],4),Oi([{name:"a_placed",components:2,type:"Uint8"}],4)),is=(Oi([{type:"Int16",name:"anchorPointX"},{type:"Int16",name:"anchorPointY"},{type:"Int16",name:"x1"},{type:"Int16",name:"y1"},{type:"Int16",name:"x2"},{type:"Int16",name:"y2"},{type:"Uint32",name:"featureIndex"},{type:"Uint16",name:"sourceLayerIndex"},{type:"Uint16",name:"bucketIndex"},{type:"Int16",name:"radius"},{type:"Int16",name:"signedDistanceFromAnchor"}]),Oi([{name:"a_pos",components:2,type:"Int16"},{name:"a_anchor_pos",components:2,type:"Int16"},{name:"a_extrude",components:2,type:"Int16"}],4)),ns=Oi([{name:"a_pos",components:2,type:"Int16"},{name:"a_anchor_pos",components:2,type:"Int16"},{name:"a_extrude",components:2,type:"Int16"}],4);function os(t,e,r){return t.sections.forEach(function(t){t.text=function(t,e,r){var i=e.layout.get("text-transform").evaluate(r,{});return"uppercase"===i?t=t.toLocaleUpperCase():"lowercase"===i&&(t=t.toLocaleLowerCase()),_i.applyArabicShaping&&(t=_i.applyArabicShaping(t)),t}(t.text,e,r)}),t}Oi([{type:"Int16",name:"anchorX"},{type:"Int16",name:"anchorY"},{type:"Uint16",name:"glyphStartIndex"},{type:"Uint16",name:"numGlyphs"},{type:"Uint32",name:"vertexStartIndex"},{type:"Uint32",name:"lineStartIndex"},{type:"Uint32",name:"lineLength"},{type:"Uint16",name:"segment"},{type:"Uint16",name:"lowerSize"},{type:"Uint16",name:"upperSize"},{type:"Float32",name:"lineOffsetX"},{type:"Float32",name:"lineOffsetY"},{type:"Uint8",name:"writingMode"},{type:"Uint8",name:"hidden"}]),Oi([{type:"Int16",name:"anchorX"},{type:"Int16",name:"anchorY"},{type:"Int16",name:"horizontalPlacedTextSymbolIndex"},{type:"Int16",name:"verticalPlacedTextSymbolIndex"},{type:"Uint16",name:"key"},{type:"Uint16",name:"textBoxStartIndex"},{type:"Uint16",name:"textBoxEndIndex"},{type:"Uint16",name:"iconBoxStartIndex"},{type:"Uint16",name:"iconBoxEndIndex"},{type:"Uint16",name:"featureIndex"},{type:"Uint16",name:"numGlyphVertices"},{type:"Uint16",name:"numVerticalGlyphVertices"},{type:"Uint16",name:"numIconVertices"},{type:"Uint32",name:"crossTileID"}]),Oi([{type:"Float32",name:"offsetX"}]),Oi([{type:"Int16",name:"x"},{type:"Int16",name:"y"},{type:"Int16",name:"tileUnitDistanceFromAnchor"}]);var as={"!":"︕","#":"#",$:"$","%":"%","&":"&","(":"︵",")":"︶","*":"*","+":"+",",":"︐","-":"︲",".":"・","/":"/",":":"︓",";":"︔","<":"︿","=":"=",">":"﹀","?":"︖","@":"@","[":"﹇","\\":"\","]":"﹈","^":"^",_:"︳","`":"`","{":"︷","|":"―","}":"︸","~":"~","¢":"¢","£":"£","¥":"¥","¦":"¦","¬":"¬","¯":" ̄","–":"︲","—":"︱","‘":"﹃","’":"﹄","“":"﹁","”":"﹂","…":"︙","‧":"・","₩":"₩","、":"︑","。":"︒","〈":"︿","〉":"﹀","《":"︽","》":"︾","「":"﹁","」":"﹂","『":"﹃","』":"﹄","【":"︻","】":"︼","〔":"︹","〕":"︺","〖":"︗","〗":"︘","!":"︕","(":"︵",")":"︶",",":"︐","-":"︲",".":"・",":":"︓",";":"︔","<":"︿",">":"﹀","?":"︖","[":"﹇","]":"﹈","_":"︳","{":"︷","|":"―","}":"︸","⦅":"︵","⦆":"︶","。":"︒","「":"﹁","」":"﹂"},ss=function(t){function e(e,r,i,n){t.call(this,e,r),this.angle=i,void 0!==n&&(this.segment=n)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.clone=function(){return new e(this.x,this.y,this.angle,this.segment)},e}(n);function us(t,e){var r=e.expression;if("constant"===r.kind)return{functionType:"constant",layoutSize:r.evaluate(new vi(t+1))};if("source"===r.kind)return{functionType:"source"};for(var i=r.zoomStops,n=0;n<i.length&&i[n]<=t;)n++;for(var o=n=Math.max(0,n-1);o<i.length&&i[o]<t+1;)o++;o=Math.min(i.length-1,o);var a={min:i[n],max:i[o]};return"composite"===r.kind?{functionType:"composite",zoomRange:a,propertyValue:e.value}:{functionType:"camera",layoutSize:r.evaluate(new vi(t+1)),zoomRange:a,sizeRange:{min:r.evaluate(new vi(a.min)),max:r.evaluate(new vi(a.max))},propertyValue:e.value}}ei("Anchor",ss);var ls=Va.VectorTileFeature.types,ps=[{name:"a_fade_opacity",components:1,type:"Uint8",offset:0}];function cs(t,e,r,i,n,o,a,s){t.emplaceBack(e,r,Math.round(32*i),Math.round(32*n),o,a,s?s[0]:0,s?s[1]:0)}function hs(t,e,r){t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r)}var fs=function(t){this.layoutVertexArray=new Zi,this.indexArray=new en,this.programConfigurations=t,this.segments=new bn,this.dynamicLayoutVertexArray=new Gi,this.opacityVertexArray=new Xi,this.placedSymbolArray=new pn};fs.prototype.upload=function(t,e,r,i){r&&(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,ts.members),this.indexBuffer=t.createIndexBuffer(this.indexArray,e),this.dynamicLayoutVertexBuffer=t.createVertexBuffer(this.dynamicLayoutVertexArray,es.members,!0),this.opacityVertexBuffer=t.createVertexBuffer(this.opacityVertexArray,ps,!0),this.opacityVertexBuffer.itemSize=1),(r||i)&&this.programConfigurations.upload(t)},fs.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.dynamicLayoutVertexBuffer.destroy(),this.opacityVertexBuffer.destroy())},ei("SymbolBuffers",fs);var ds=function(t,e,r){this.layoutVertexArray=new t,this.layoutAttributes=e,this.indexArray=new r,this.segments=new bn,this.collisionVertexArray=new Ki};ds.prototype.upload=function(t){this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,this.layoutAttributes),this.indexBuffer=t.createIndexBuffer(this.indexArray),this.collisionVertexBuffer=t.createVertexBuffer(this.collisionVertexArray,rs.members,!0)},ds.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.segments.destroy(),this.collisionVertexBuffer.destroy())},ei("CollisionBuffers",ds);var ms=function(t){this.collisionBoxArray=t.collisionBoxArray,this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(function(t){return t.id}),this.index=t.index,this.pixelRatio=t.pixelRatio,this.sourceLayerIndex=t.sourceLayerIndex,this.hasPattern=!1;var e=this.layers[0]._unevaluatedLayout._values;this.textSizeData=us(this.zoom,e["text-size"]),this.iconSizeData=us(this.zoom,e["icon-size"]);var r=this.layers[0].layout,i="viewport-y"===r.get("symbol-z-order");this.sortFeaturesByY=i&&(r.get("text-allow-overlap")||r.get("icon-allow-overlap")||r.get("text-ignore-placement")||r.get("icon-ignore-placement")),this.sourceID=t.sourceID};ms.prototype.createArrays=function(){this.text=new fs(new Nn(ts.members,this.layers,this.zoom,function(t){return/^text/.test(t)})),this.icon=new fs(new Nn(ts.members,this.layers,this.zoom,function(t){return/^icon/.test(t)})),this.collisionBox=new ds(Hi,is.members,rn),this.collisionCircle=new ds(Hi,ns.members,en),this.glyphOffsetArray=new dn,this.lineVertexArray=new yn,this.symbolInstances=new hn},ms.prototype.calculateGlyphDependencies=function(t,e,r,i){for(var n=0;n<t.length;n++)if(e[t.charCodeAt(n)]=!0,r&&i){var o=as[t.charAt(n)];o&&(e[o.charCodeAt(0)]=!0)}},ms.prototype.populate=function(t,e){var r=this.layers[0],i=r.layout,n=i.get("text-font"),o=i.get("text-field"),a=i.get("icon-image"),s=("constant"!==o.value.kind||o.value.value.toString().length>0)&&("constant"!==n.value.kind||n.value.value.length>0),u="constant"!==a.value.kind||a.value.value&&a.value.value.length>0;if(this.features=[],s||u){for(var l=e.iconDependencies,p=e.glyphDependencies,c=new vi(this.zoom),h=0,f=t;h<f.length;h+=1){var d=f[h],m=d.feature,y=d.index,_=d.sourceLayerIndex;if(r._featureFilter(c,m)){var v=void 0;if(s){var g=r.getValueAndResolveTokens("text-field",m);v=os(g instanceof Ft?g:Ft.fromString(g),r,m)}var x=void 0;if(u&&(x=r.getValueAndResolveTokens("icon-image",m)),v||x){var b={text:v,icon:x,index:y,sourceLayerIndex:_,geometry:Xn(m),properties:m.properties,type:ls[m.type]};if(void 0!==m.id&&(b.id=m.id),this.features.push(b),x&&(l[x]=!0),v)for(var w=n.evaluate(m,{}).join(","),E="map"===i.get("text-rotation-alignment")&&"point"!==i.get("symbol-placement"),S=0,T=v.sections;S<T.length;S+=1){var A=T[S],z=si(v.toString()),I=A.fontStack||w,C=p[I]=p[I]||{};this.calculateGlyphDependencies(A.text,C,E,z)}}}}"line"===i.get("symbol-placement")&&(this.features=function(t){var e={},r={},i=[],n=0;function o(e){i.push(t[e]),n++}function a(t,e,n){var o=r[t];return delete r[t],r[e]=o,i[o].geometry[0].pop(),i[o].geometry[0]=i[o].geometry[0].concat(n[0]),o}function s(t,r,n){var o=e[r];return delete e[r],e[t]=o,i[o].geometry[0].shift(),i[o].geometry[0]=n[0].concat(i[o].geometry[0]),o}function u(t,e,r){var i=r?e[0][e[0].length-1]:e[0][0];return t+":"+i.x+":"+i.y}for(var l=0;l<t.length;l++){var p=t[l],c=p.geometry,h=p.text?p.text.toString():null;if(h){var f=u(h,c),d=u(h,c,!0);if(f in r&&d in e&&r[f]!==e[d]){var m=s(f,d,c),y=a(f,d,i[m].geometry);delete e[f],delete r[d],r[u(h,i[y].geometry,!0)]=y,i[m].geometry=null}else f in r?a(f,d,c):d in e?s(f,d,c):(o(l),e[f]=n-1,r[d]=n-1)}else o(l)}return i.filter(function(t){return t.geometry})}(this.features))}},ms.prototype.update=function(t,e,r){this.stateDependentLayers.length&&(this.text.programConfigurations.updatePaintArrays(t,e,this.layers,r),this.icon.programConfigurations.updatePaintArrays(t,e,this.layers,r))},ms.prototype.isEmpty=function(){return 0===this.symbolInstances.length},ms.prototype.uploadPending=function(){return!this.uploaded||this.text.programConfigurations.needsUpload||this.icon.programConfigurations.needsUpload},ms.prototype.upload=function(t){this.uploaded||(this.collisionBox.upload(t),this.collisionCircle.upload(t)),this.text.upload(t,this.sortFeaturesByY,!this.uploaded,this.text.programConfigurations.needsUpload),this.icon.upload(t,this.sortFeaturesByY,!this.uploaded,this.icon.programConfigurations.needsUpload),this.uploaded=!0},ms.prototype.destroy=function(){this.text.destroy(),this.icon.destroy(),this.collisionBox.destroy(),this.collisionCircle.destroy()},ms.prototype.addToLineVertexArray=function(t,e){var r=this.lineVertexArray.length;if(void 0!==t.segment){for(var i=t.dist(e[t.segment+1]),n=t.dist(e[t.segment]),o={},a=t.segment+1;a<e.length;a++)o[a]={x:e[a].x,y:e[a].y,tileUnitDistanceFromAnchor:i},a<e.length-1&&(i+=e[a+1].dist(e[a]));for(var s=t.segment||0;s>=0;s--)o[s]={x:e[s].x,y:e[s].y,tileUnitDistanceFromAnchor:n},s>0&&(n+=e[s-1].dist(e[s]));for(var u=0;u<e.length;u++){var l=o[u];this.lineVertexArray.emplaceBack(l.x,l.y,l.tileUnitDistanceFromAnchor)}}return{lineStartIndex:r,lineLength:this.lineVertexArray.length-r}},ms.prototype.addSymbols=function(t,e,r,i,n,o,a,s,u,l){for(var p=t.indexArray,c=t.layoutVertexArray,h=t.dynamicLayoutVertexArray,f=t.segments.prepareSegment(4*e.length,t.layoutVertexArray,t.indexArray),d=this.glyphOffsetArray.length,m=f.vertexLength,y=0,_=e;y<_.length;y+=1){var v=_[y],g=v.tl,x=v.tr,b=v.bl,w=v.br,E=v.tex,S=f.vertexLength,T=v.glyphOffset[1];cs(c,s.x,s.y,g.x,T+g.y,E.x,E.y,r),cs(c,s.x,s.y,x.x,T+x.y,E.x+E.w,E.y,r),cs(c,s.x,s.y,b.x,T+b.y,E.x,E.y+E.h,r),cs(c,s.x,s.y,w.x,T+w.y,E.x+E.w,E.y+E.h,r),hs(h,s,0),p.emplaceBack(S,S+1,S+2),p.emplaceBack(S+1,S+2,S+3),f.vertexLength+=4,f.primitiveLength+=2,this.glyphOffsetArray.emplaceBack(v.glyphOffset[0])}t.placedSymbolArray.emplaceBack(s.x,s.y,d,this.glyphOffsetArray.length-d,m,u,l,s.segment,r?r[0]:0,r?r[1]:0,i[0],i[1],a,!1),t.programConfigurations.populatePaintArrays(t.layoutVertexArray.length,o,o.index,{})},ms.prototype._addCollisionDebugVertex=function(t,e,r,i,n,o){return e.emplaceBack(0,0),t.emplaceBack(r.x,r.y,i,n,Math.round(o.x),Math.round(o.y))},ms.prototype.addCollisionDebugVertices=function(t,e,r,i,o,a,s,u){var l=o.segments.prepareSegment(4,o.layoutVertexArray,o.indexArray),p=l.vertexLength,c=o.layoutVertexArray,h=o.collisionVertexArray,f=s.anchorX,d=s.anchorY;if(this._addCollisionDebugVertex(c,h,a,f,d,new n(t,e)),this._addCollisionDebugVertex(c,h,a,f,d,new n(r,e)),this._addCollisionDebugVertex(c,h,a,f,d,new n(r,i)),this._addCollisionDebugVertex(c,h,a,f,d,new n(t,i)),l.vertexLength+=4,u){var m=o.indexArray;m.emplaceBack(p,p+1,p+2),m.emplaceBack(p,p+2,p+3),l.primitiveLength+=2}else{var y=o.indexArray;y.emplaceBack(p,p+1),y.emplaceBack(p+1,p+2),y.emplaceBack(p+2,p+3),y.emplaceBack(p+3,p),l.primitiveLength+=4}},ms.prototype.addDebugCollisionBoxes=function(t,e,r){for(var i=t;i<e;i++){var n=this.collisionBoxArray.get(i),o=n.x1,a=n.y1,s=n.x2,u=n.y2,l=n.radius>0;this.addCollisionDebugVertices(o,a,s,u,l?this.collisionCircle:this.collisionBox,n.anchorPoint,r,l)}},ms.prototype.generateCollisionDebugBuffers=function(){for(var t=0;t<this.symbolInstances.length;t++){var e=this.symbolInstances.get(t);this.addDebugCollisionBoxes(e.textBoxStartIndex,e.textBoxEndIndex,e),this.addDebugCollisionBoxes(e.iconBoxStartIndex,e.iconBoxEndIndex,e)}},ms.prototype._deserializeCollisionBoxesForSymbol=function(t,e,r,i,n){for(var o={},a=e;a<r;a++){var s=t.get(a);if(0===s.radius){o.textBox={x1:s.x1,y1:s.y1,x2:s.x2,y2:s.y2,anchorPointX:s.anchorPointX,anchorPointY:s.anchorPointY},o.textFeatureIndex=s.featureIndex;break}o.textCircles||(o.textCircles=[],o.textFeatureIndex=s.featureIndex),o.textCircles.push(s.anchorPointX,s.anchorPointY,s.radius,s.signedDistanceFromAnchor,1)}for(var u=i;u<n;u++){var l=t.get(u);if(0===l.radius){o.iconBox={x1:l.x1,y1:l.y1,x2:l.x2,y2:l.y2,anchorPointX:l.anchorPointX,anchorPointY:l.anchorPointY},o.iconFeatureIndex=l.featureIndex;break}}return o},ms.prototype.deserializeCollisionBoxes=function(t){this.collisionArrays=[];for(var e=0;e<this.symbolInstances.length;e++){var r=this.symbolInstances.get(e);this.collisionArrays.push(this._deserializeCollisionBoxesForSymbol(t,r.textBoxStartIndex,r.textBoxEndIndex,r.iconBoxStartIndex,r.iconBoxEndIndex))}},ms.prototype.hasTextData=function(){return this.text.segments.get().length>0},ms.prototype.hasIconData=function(){return this.icon.segments.get().length>0},ms.prototype.hasCollisionBoxData=function(){return this.collisionBox.segments.get().length>0},ms.prototype.hasCollisionCircleData=function(){return this.collisionCircle.segments.get().length>0},ms.prototype.addIndicesForPlacedTextSymbol=function(t){for(var e=this.text.placedSymbolArray.get(t),r=e.vertexStartIndex+4*e.numGlyphs,i=e.vertexStartIndex;i<r;i+=4)this.text.indexArray.emplaceBack(i,i+1,i+2),this.text.indexArray.emplaceBack(i+1,i+2,i+3)},ms.prototype.sortFeatures=function(t){if(this.sortFeaturesByY&&this.sortedAngle!==t&&(this.sortedAngle=t,!(this.text.segments.get().length>1||this.icon.segments.get().length>1))){for(var e=[],r=0;r<this.symbolInstances.length;r++)e.push(r);for(var i=Math.sin(t),n=Math.cos(t),o=[],a=[],s=0;s<this.symbolInstances.length;s++){var u=this.symbolInstances.get(s);o.push(0|Math.round(i*u.anchorX+n*u.anchorY)),a.push(u.featureIndex)}e.sort(function(t,e){return o[t]-o[e]||a[e]-a[t]}),this.text.indexArray.clear(),this.icon.indexArray.clear(),this.featureSortOrder=[];for(var l=0,p=e;l<p.length;l+=1){var c=p[l],h=this.symbolInstances.get(c);this.featureSortOrder.push(h.featureIndex),h.horizontalPlacedTextSymbolIndex>=0&&this.addIndicesForPlacedTextSymbol(h.horizontalPlacedTextSymbolIndex),h.verticalPlacedTextSymbolIndex>=0&&this.addIndicesForPlacedTextSymbol(h.verticalPlacedTextSymbolIndex);var f=this.icon.placedSymbolArray.get(c);if(f.numGlyphs){var d=f.vertexStartIndex;this.icon.indexArray.emplaceBack(d,d+1,d+2),this.icon.indexArray.emplaceBack(d+1,d+2,d+3)}}this.text.indexBuffer&&this.text.indexBuffer.updateData(this.text.indexArray),this.icon.indexBuffer&&this.icon.indexBuffer.updateData(this.icon.indexArray)}},ei("SymbolBucket",ms,{omit:["layers","collisionBoxArray","features","compareText"]}),ms.MAX_GLYPHS=65535,ms.addDynamicAttributes=hs;var ys=new Mi({"symbol-placement":new zi(ft.layout_symbol["symbol-placement"]),"symbol-spacing":new zi(ft.layout_symbol["symbol-spacing"]),"symbol-avoid-edges":new zi(ft.layout_symbol["symbol-avoid-edges"]),"symbol-z-order":new zi(ft.layout_symbol["symbol-z-order"]),"icon-allow-overlap":new zi(ft.layout_symbol["icon-allow-overlap"]),"icon-ignore-placement":new zi(ft.layout_symbol["icon-ignore-placement"]),"icon-optional":new zi(ft.layout_symbol["icon-optional"]),"icon-rotation-alignment":new zi(ft.layout_symbol["icon-rotation-alignment"]),"icon-size":new Ii(ft.layout_symbol["icon-size"]),"icon-text-fit":new zi(ft.layout_symbol["icon-text-fit"]),"icon-text-fit-padding":new zi(ft.layout_symbol["icon-text-fit-padding"]),"icon-image":new Ii(ft.layout_symbol["icon-image"]),"icon-rotate":new Ii(ft.layout_symbol["icon-rotate"]),"icon-padding":new zi(ft.layout_symbol["icon-padding"]),"icon-keep-upright":new zi(ft.layout_symbol["icon-keep-upright"]),"icon-offset":new Ii(ft.layout_symbol["icon-offset"]),"icon-anchor":new Ii(ft.layout_symbol["icon-anchor"]),"icon-pitch-alignment":new zi(ft.layout_symbol["icon-pitch-alignment"]),"text-pitch-alignment":new zi(ft.layout_symbol["text-pitch-alignment"]),"text-rotation-alignment":new zi(ft.layout_symbol["text-rotation-alignment"]),"text-field":new Ii(ft.layout_symbol["text-field"]),"text-font":new Ii(ft.layout_symbol["text-font"]),"text-size":new Ii(ft.layout_symbol["text-size"]),"text-max-width":new Ii(ft.layout_symbol["text-max-width"]),"text-line-height":new zi(ft.layout_symbol["text-line-height"]),"text-letter-spacing":new Ii(ft.layout_symbol["text-letter-spacing"]),"text-justify":new Ii(ft.layout_symbol["text-justify"]),"text-anchor":new Ii(ft.layout_symbol["text-anchor"]),"text-max-angle":new zi(ft.layout_symbol["text-max-angle"]),"text-rotate":new Ii(ft.layout_symbol["text-rotate"]),"text-padding":new zi(ft.layout_symbol["text-padding"]),"text-keep-upright":new zi(ft.layout_symbol["text-keep-upright"]),"text-transform":new Ii(ft.layout_symbol["text-transform"]),"text-offset":new Ii(ft.layout_symbol["text-offset"]),"text-allow-overlap":new zi(ft.layout_symbol["text-allow-overlap"]),"text-ignore-placement":new zi(ft.layout_symbol["text-ignore-placement"]),"text-optional":new zi(ft.layout_symbol["text-optional"])}),_s={paint:new Mi({"icon-opacity":new Ii(ft.paint_symbol["icon-opacity"]),"icon-color":new Ii(ft.paint_symbol["icon-color"]),"icon-halo-color":new Ii(ft.paint_symbol["icon-halo-color"]),"icon-halo-width":new Ii(ft.paint_symbol["icon-halo-width"]),"icon-halo-blur":new Ii(ft.paint_symbol["icon-halo-blur"]),"icon-translate":new zi(ft.paint_symbol["icon-translate"]),"icon-translate-anchor":new zi(ft.paint_symbol["icon-translate-anchor"]),"text-opacity":new Ii(ft.paint_symbol["text-opacity"]),"text-color":new Ii(ft.paint_symbol["text-color"]),"text-halo-color":new Ii(ft.paint_symbol["text-halo-color"]),"text-halo-width":new Ii(ft.paint_symbol["text-halo-width"]),"text-halo-blur":new Ii(ft.paint_symbol["text-halo-blur"]),"text-translate":new zi(ft.paint_symbol["text-translate"]),"text-translate-anchor":new zi(ft.paint_symbol["text-translate-anchor"])}),layout:ys},vs=function(t){function e(e){t.call(this,e,_s)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.recalculate=function(e){t.prototype.recalculate.call(this,e),"auto"===this.layout.get("icon-rotation-alignment")&&("point"!==this.layout.get("symbol-placement")?this.layout._values["icon-rotation-alignment"]="map":this.layout._values["icon-rotation-alignment"]="viewport"),"auto"===this.layout.get("text-rotation-alignment")&&("point"!==this.layout.get("symbol-placement")?this.layout._values["text-rotation-alignment"]="map":this.layout._values["text-rotation-alignment"]="viewport"),"auto"===this.layout.get("text-pitch-alignment")&&(this.layout._values["text-pitch-alignment"]=this.layout.get("text-rotation-alignment")),"auto"===this.layout.get("icon-pitch-alignment")&&(this.layout._values["icon-pitch-alignment"]=this.layout.get("icon-rotation-alignment"))},e.prototype.getValueAndResolveTokens=function(t,e){var r,i=this.layout.get(t).evaluate(e,{}),n=this._unevaluatedLayout._values[t];return n.isDataDriven()||lr(n.value)?i:(r=e.properties,i.replace(/{([^{}]+)}/g,function(t,e){return e in r?String(r[e]):""}))},e.prototype.createBucket=function(t){return new ms(t)},e.prototype.queryRadius=function(){return 0},e.prototype.queryIntersectsFeature=function(){return!1},e}(Li),gs={paint:new Mi({"background-color":new zi(ft.paint_background["background-color"]),"background-pattern":new ki(ft.paint_background["background-pattern"]),"background-opacity":new zi(ft.paint_background["background-opacity"])})},xs=function(t){function e(e){t.call(this,e,gs)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Li),bs={paint:new Mi({"raster-opacity":new zi(ft.paint_raster["raster-opacity"]),"raster-hue-rotate":new zi(ft.paint_raster["raster-hue-rotate"]),"raster-brightness-min":new zi(ft.paint_raster["raster-brightness-min"]),"raster-brightness-max":new zi(ft.paint_raster["raster-brightness-max"]),"raster-saturation":new zi(ft.paint_raster["raster-saturation"]),"raster-contrast":new zi(ft.paint_raster["raster-contrast"]),"raster-resampling":new zi(ft.paint_raster["raster-resampling"]),"raster-fade-duration":new zi(ft.paint_raster["raster-fade-duration"])})},ws=function(t){function e(e){t.call(this,e,bs)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Li),Es=function(t){function e(e){t.call(this,e,{}),this.implementation=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.hasOffscreenPass=function(){return void 0!==this.implementation.prerender||"3d"===this.implementation.renderingMode},e.prototype.recalculate=function(){},e.prototype.updateTransitions=function(){},e.prototype.hasTransition=function(){},e.prototype.serialize=function(){},e.prototype.resize=function(){this.viewportFrame&&(this.viewportFrame.destroy(),this.viewportFrame=null)},e.prototype.onAdd=function(t){this.implementation.onAdd&&this.implementation.onAdd(t,t.painter.context.gl)},e.prototype.onRemove=function(t){this.implementation.onRemove&&this.implementation.onRemove(t)},e}(Li),Ss={circle:Eo,heatmap:Lo,hillshade:Bo,fill:xa,"fill-extrusion":Ca,line:$a,symbol:vs,background:xs,raster:ws};function Ts(t){for(var e=0,r=0,i=0,n=t;i<n.length;i+=1){var o=n[i];e+=o.w*o.h,r=Math.max(r,o.w)}t.sort(function(t,e){return e.h-t.h});for(var a=[{x:0,y:0,w:Math.max(Math.ceil(Math.sqrt(e/.95)),r),h:1/0}],s=0,u=0,l=0,p=t;l<p.length;l+=1)for(var c=p[l],h=a.length-1;h>=0;h--){var f=a[h];if(!(c.w>f.w||c.h>f.h)){if(c.x=f.x,c.y=f.y,u=Math.max(u,c.y+c.h),s=Math.max(s,c.x+c.w),c.w===f.w&&c.h===f.h){var d=a.pop();h<a.length&&(a[h]=d)}else c.h===f.h?(f.x+=c.w,f.w-=c.w):c.w===f.w?(f.y+=c.h,f.h-=c.h):(a.push({x:f.x+c.w,y:f.y,w:f.w-c.w,h:c.h}),f.y+=c.h,f.h-=c.h);break}}return{w:s,h:u,fill:e/(s*u)||0}}var As=function(t,e){var r=e.pixelRatio;this.paddedRect=t,this.pixelRatio=r},zs={tl:{configurable:!0},br:{configurable:!0},tlbr:{configurable:!0},displaySize:{configurable:!0}};zs.tl.get=function(){return[this.paddedRect.x+1,this.paddedRect.y+1]},zs.br.get=function(){return[this.paddedRect.x+this.paddedRect.w-1,this.paddedRect.y+this.paddedRect.h-1]},zs.tlbr.get=function(){return this.tl.concat(this.br)},zs.displaySize.get=function(){return[(this.paddedRect.w-2)/this.pixelRatio,(this.paddedRect.h-2)/this.pixelRatio]},Object.defineProperties(As.prototype,zs);var Is=function(t,e){var r={},i={},n=[];for(var o in t){var a=t[o],s={x:0,y:0,w:a.data.width+2,h:a.data.height+2};n.push(s),r[o]=new As(s,a)}for(var u in e){var l=e[u],p={x:0,y:0,w:l.data.width+2,h:l.data.height+2};n.push(p),i[u]=new As(p,l)}var c=Ts(n),h=c.w,f=c.h,d=new ko({width:h||1,height:f||1});for(var m in t){var y=t[m],_=r[m].paddedRect;ko.copy(y.data,d,{x:0,y:0},{x:_.x+1,y:_.y+1},y.data)}for(var v in e){var g=e[v],x=i[v].paddedRect,b=x.x+1,w=x.y+1,E=g.data.width,S=g.data.height;ko.copy(g.data,d,{x:0,y:0},{x:b,y:w},g.data),ko.copy(g.data,d,{x:0,y:S-1},{x:b,y:w-1},{width:E,height:1}),ko.copy(g.data,d,{x:0,y:0},{x:b,y:w+S},{width:E,height:1}),ko.copy(g.data,d,{x:E-1,y:0},{x:b-1,y:w},{width:1,height:S}),ko.copy(g.data,d,{x:0,y:0},{x:b+E,y:w},{width:1,height:S})}this.image=d,this.iconPositions=r,this.patternPositions=i};ei("ImagePosition",As),ei("ImageAtlas",Is);var Cs=self.HTMLImageElement,ks=self.HTMLCanvasElement,Ps=self.HTMLVideoElement,Ms=self.ImageData,Ls=function(t,e,r,i){this.context=t,this.format=r,this.texture=t.gl.createTexture(),this.update(e,i)};Ls.prototype.update=function(t,e){var r=t.width,i=t.height,n=!this.size||this.size[0]!==r||this.size[1]!==i,o=this.context,a=o.gl;this.useMipmap=Boolean(e&&e.useMipmap),a.bindTexture(a.TEXTURE_2D,this.texture),o.pixelStoreUnpackFlipY.set(!1),o.pixelStoreUnpack.set(1),o.pixelStoreUnpackPremultiplyAlpha.set(this.format===a.RGBA&&(!e||!1!==e.premultiply)),n?(this.size=[r,i],t instanceof Cs||t instanceof ks||t instanceof Ps||t instanceof Ms?a.texImage2D(a.TEXTURE_2D,0,this.format,this.format,a.UNSIGNED_BYTE,t):a.texImage2D(a.TEXTURE_2D,0,this.format,r,i,0,this.format,a.UNSIGNED_BYTE,t.data)):t instanceof Cs||t instanceof ks||t instanceof Ps||t instanceof Ms?a.texSubImage2D(a.TEXTURE_2D,0,0,0,a.RGBA,a.UNSIGNED_BYTE,t):a.texSubImage2D(a.TEXTURE_2D,0,0,0,r,i,a.RGBA,a.UNSIGNED_BYTE,t.data),this.useMipmap&&this.isSizePowerOfTwo()&&a.generateMipmap(a.TEXTURE_2D)},Ls.prototype.bind=function(t,e,r){var i=this.context.gl;i.bindTexture(i.TEXTURE_2D,this.texture),r!==i.LINEAR_MIPMAP_NEAREST||this.isSizePowerOfTwo()||(r=i.LINEAR),t!==this.filter&&(i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,t),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,r||t),this.filter=t),e!==this.wrap&&(i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,e),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,e),this.wrap=e)},Ls.prototype.isSizePowerOfTwo=function(){return this.size[0]===this.size[1]&&Math.log(this.size[0])/Math.LN2%1==0},Ls.prototype.destroy=function(){this.context.gl.deleteTexture(this.texture),this.texture=null};var Ds=function(t,e,r,i,n){var o,a,s=8*n-i-1,u=(1<<s)-1,l=u>>1,p=-7,c=r?n-1:0,h=r?-1:1,f=t[e+c];for(c+=h,o=f&(1<<-p)-1,f>>=-p,p+=s;p>0;o=256*o+t[e+c],c+=h,p-=8);for(a=o&(1<<-p)-1,o>>=-p,p+=i;p>0;a=256*a+t[e+c],c+=h,p-=8);if(0===o)o=1-l;else{if(o===u)return a?NaN:1/0*(f?-1:1);a+=Math.pow(2,i),o-=l}return(f?-1:1)*a*Math.pow(2,o-i)},Bs=function(t,e,r,i,n,o){var a,s,u,l=8*o-n-1,p=(1<<l)-1,c=p>>1,h=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,f=i?0:o-1,d=i?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=p):(a=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-a))<1&&(a--,u*=2),(e+=a+c>=1?h/u:h*Math.pow(2,1-c))*u>=2&&(a++,u/=2),a+c>=p?(s=0,a=p):a+c>=1?(s=(e*u-1)*Math.pow(2,n),a+=c):(s=e*Math.pow(2,c-1)*Math.pow(2,n),a=0));n>=8;t[r+f]=255&s,f+=d,s/=256,n-=8);for(a=a<<n|s,l+=n;l>0;t[r+f]=255&a,f+=d,a/=256,l-=8);t[r+f-d]|=128*m},Rs=Os;function Os(t){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.pos=0,this.type=0,this.length=this.buf.length}function Fs(t){return t.type===Os.Bytes?t.readVarint()+t.pos:t.pos+1}function Us(t,e,r){return r?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}function Vs(t,e,r){var i=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.ceil(Math.log(e)/(7*Math.LN2));r.realloc(i);for(var n=r.pos-1;n>=t;n--)r.buf[n+i]=r.buf[n]}function Ns(t,e){for(var r=0;r<t.length;r++)e.writeVarint(t[r])}function js(t,e){for(var r=0;r<t.length;r++)e.writeSVarint(t[r])}function qs(t,e){for(var r=0;r<t.length;r++)e.writeFloat(t[r])}function Zs(t,e){for(var r=0;r<t.length;r++)e.writeDouble(t[r])}function Gs(t,e){for(var r=0;r<t.length;r++)e.writeBoolean(t[r])}function Xs(t,e){for(var r=0;r<t.length;r++)e.writeFixed32(t[r])}function Ws(t,e){for(var r=0;r<t.length;r++)e.writeSFixed32(t[r])}function Hs(t,e){for(var r=0;r<t.length;r++)e.writeFixed64(t[r])}function Ks(t,e){for(var r=0;r<t.length;r++)e.writeSFixed64(t[r])}function Ys(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+16777216*t[e+3]}function Js(t,e,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function $s(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+(t[e+3]<<24)}Os.Varint=0,Os.Fixed64=1,Os.Bytes=2,Os.Fixed32=5,Os.prototype={destroy:function(){this.buf=null},readFields:function(t,e,r){for(r=r||this.length;this.pos<r;){var i=this.readVarint(),n=i>>3,o=this.pos;this.type=7&i,t(n,e,this),this.pos===o&&this.skip(i)}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=Ys(this.buf,this.pos);return this.pos+=4,t},readSFixed32:function(){var t=$s(this.buf,this.pos);return this.pos+=4,t},readFixed64:function(){var t=Ys(this.buf,this.pos)+4294967296*Ys(this.buf,this.pos+4);return this.pos+=8,t},readSFixed64:function(){var t=Ys(this.buf,this.pos)+4294967296*$s(this.buf,this.pos+4);return this.pos+=8,t},readFloat:function(){var t=Ds(this.buf,this.pos,!0,23,4);return this.pos+=4,t},readDouble:function(){var t=Ds(this.buf,this.pos,!0,52,8);return this.pos+=8,t},readVarint:function(t){var e,r,i=this.buf;return e=127&(r=i[this.pos++]),r<128?e:(e|=(127&(r=i[this.pos++]))<<7,r<128?e:(e|=(127&(r=i[this.pos++]))<<14,r<128?e:(e|=(127&(r=i[this.pos++]))<<21,r<128?e:function(t,e,r){var i,n,o=r.buf;if(i=(112&(n=o[r.pos++]))>>4,n<128)return Us(t,i,e);if(i|=(127&(n=o[r.pos++]))<<3,n<128)return Us(t,i,e);if(i|=(127&(n=o[r.pos++]))<<10,n<128)return Us(t,i,e);if(i|=(127&(n=o[r.pos++]))<<17,n<128)return Us(t,i,e);if(i|=(127&(n=o[r.pos++]))<<24,n<128)return Us(t,i,e);if(i|=(1&(n=o[r.pos++]))<<31,n<128)return Us(t,i,e);throw new Error("Expected varint not more than 10 bytes")}(e|=(15&(r=i[this.pos]))<<28,t,this))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=function(t,e,r){for(var i="",n=e;n<r;){var o,a,s,u=t[n],l=null,p=u>239?4:u>223?3:u>191?2:1;if(n+p>r)break;1===p?u<128&&(l=u):2===p?128==(192&(o=t[n+1]))&&(l=(31&u)<<6|63&o)<=127&&(l=null):3===p?(o=t[n+1],a=t[n+2],128==(192&o)&&128==(192&a)&&((l=(15&u)<<12|(63&o)<<6|63&a)<=2047||l>=55296&&l<=57343)&&(l=null)):4===p&&(o=t[n+1],a=t[n+2],s=t[n+3],128==(192&o)&&128==(192&a)&&128==(192&s)&&((l=(15&u)<<18|(63&o)<<12|(63&a)<<6|63&s)<=65535||l>=1114112)&&(l=null)),null===l?(l=65533,p=1):l>65535&&(l-=65536,i+=String.fromCharCode(l>>>10&1023|55296),l=56320|1023&l),i+=String.fromCharCode(l),n+=p}return i}(this.buf,this.pos,t);return this.pos=t,e},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e},readPackedVarint:function(t,e){var r=Fs(this);for(t=t||[];this.pos<r;)t.push(this.readVarint(e));return t},readPackedSVarint:function(t){var e=Fs(this);for(t=t||[];this.pos<e;)t.push(this.readSVarint());return t},readPackedBoolean:function(t){var e=Fs(this);for(t=t||[];this.pos<e;)t.push(this.readBoolean());return t},readPackedFloat:function(t){var e=Fs(this);for(t=t||[];this.pos<e;)t.push(this.readFloat());return t},readPackedDouble:function(t){var e=Fs(this);for(t=t||[];this.pos<e;)t.push(this.readDouble());return t},readPackedFixed32:function(t){var e=Fs(this);for(t=t||[];this.pos<e;)t.push(this.readFixed32());return t},readPackedSFixed32:function(t){var e=Fs(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed32());return t},readPackedFixed64:function(t){var e=Fs(this);for(t=t||[];this.pos<e;)t.push(this.readFixed64());return t},readPackedSFixed64:function(t){var e=Fs(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed64());return t},skip:function(t){var e=7&t;if(e===Os.Varint)for(;this.buf[this.pos++]>127;);else if(e===Os.Bytes)this.pos=this.readVarint()+this.pos;else if(e===Os.Fixed32)this.pos+=4;else{if(e!==Os.Fixed64)throw new Error("Unimplemented type: "+e);this.pos+=8}},writeTag:function(t,e){this.writeVarint(t<<3|e)},realloc:function(t){for(var e=this.length||16;e<this.pos+t;)e*=2;if(e!==this.length){var r=new Uint8Array(e);r.set(this.buf),this.buf=r,this.length=e}},finish:function(){return this.length=this.pos,this.pos=0,this.buf.subarray(0,this.length)},writeFixed32:function(t){this.realloc(4),Js(this.buf,t,this.pos),this.pos+=4},writeSFixed32:function(t){this.realloc(4),Js(this.buf,t,this.pos),this.pos+=4},writeFixed64:function(t){this.realloc(8),Js(this.buf,-1&t,this.pos),Js(this.buf,Math.floor(t*(1/4294967296)),this.pos+4),this.pos+=8},writeSFixed64:function(t){this.realloc(8),Js(this.buf,-1&t,this.pos),Js(this.buf,Math.floor(t*(1/4294967296)),this.pos+4),this.pos+=8},writeVarint:function(t){(t=+t||0)>268435455||t<0?function(t,e){var r,i;if(t>=0?(r=t%4294967296|0,i=t/4294967296|0):(i=~(-t/4294967296),4294967295^(r=~(-t%4294967296))?r=r+1|0:(r=0,i=i+1|0)),t>=0x10000000000000000||t<-0x10000000000000000)throw new Error("Given varint doesn't fit into 10 bytes");e.realloc(10),function(t,e,r){r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos]=127&t}(r,0,e),function(t,e){var r=(7&t)<<4;e.buf[e.pos++]|=r|((t>>>=3)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t)))))}(i,e)}(t,this):(this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127))))},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t)},writeBoolean:function(t){this.writeVarint(Boolean(t))},writeString:function(t){t=String(t),this.realloc(4*t.length),this.pos++;var e=this.pos;this.pos=function(t,e,r){for(var i,n,o=0;o<e.length;o++){if((i=e.charCodeAt(o))>55295&&i<57344){if(!n){i>56319||o+1===e.length?(t[r++]=239,t[r++]=191,t[r++]=189):n=i;continue}if(i<56320){t[r++]=239,t[r++]=191,t[r++]=189,n=i;continue}i=n-55296<<10|i-56320|65536,n=null}else n&&(t[r++]=239,t[r++]=191,t[r++]=189,n=null);i<128?t[r++]=i:(i<2048?t[r++]=i>>6|192:(i<65536?t[r++]=i>>12|224:(t[r++]=i>>18|240,t[r++]=i>>12&63|128),t[r++]=i>>6&63|128),t[r++]=63&i|128)}return r}(this.buf,t,this.pos);var r=this.pos-e;r>=128&&Vs(e,r,this),this.pos=e-1,this.writeVarint(r),this.pos+=r},writeFloat:function(t){this.realloc(4),Bs(this.buf,t,this.pos,!0,23,4),this.pos+=4},writeDouble:function(t){this.realloc(8),Bs(this.buf,t,this.pos,!0,52,8),this.pos+=8},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var r=0;r<e;r++)this.buf[this.pos++]=t[r]},writeRawMessage:function(t,e){this.pos++;var r=this.pos;t(e,this);var i=this.pos-r;i>=128&&Vs(r,i,this),this.pos=r-1,this.writeVarint(i),this.pos+=i},writeMessage:function(t,e,r){this.writeTag(t,Os.Bytes),this.writeRawMessage(e,r)},writePackedVarint:function(t,e){this.writeMessage(t,Ns,e)},writePackedSVarint:function(t,e){this.writeMessage(t,js,e)},writePackedBoolean:function(t,e){this.writeMessage(t,Gs,e)},writePackedFloat:function(t,e){this.writeMessage(t,qs,e)},writePackedDouble:function(t,e){this.writeMessage(t,Zs,e)},writePackedFixed32:function(t,e){this.writeMessage(t,Xs,e)},writePackedSFixed32:function(t,e){this.writeMessage(t,Ws,e)},writePackedFixed64:function(t,e){this.writeMessage(t,Hs,e)},writePackedSFixed64:function(t,e){this.writeMessage(t,Ks,e)},writeBytesField:function(t,e){this.writeTag(t,Os.Bytes),this.writeBytes(e)},writeFixed32Field:function(t,e){this.writeTag(t,Os.Fixed32),this.writeFixed32(e)},writeSFixed32Field:function(t,e){this.writeTag(t,Os.Fixed32),this.writeSFixed32(e)},writeFixed64Field:function(t,e){this.writeTag(t,Os.Fixed64),this.writeFixed64(e)},writeSFixed64Field:function(t,e){this.writeTag(t,Os.Fixed64),this.writeSFixed64(e)},writeVarintField:function(t,e){this.writeTag(t,Os.Varint),this.writeVarint(e)},writeSVarintField:function(t,e){this.writeTag(t,Os.Varint),this.writeSVarint(e)},writeStringField:function(t,e){this.writeTag(t,Os.Bytes),this.writeString(e)},writeFloatField:function(t,e){this.writeTag(t,Os.Fixed32),this.writeFloat(e)},writeDoubleField:function(t,e){this.writeTag(t,Os.Fixed64),this.writeDouble(e)},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e))}};var Qs=3;function tu(t,e,r){1===t&&r.readMessage(eu,e)}function eu(t,e,r){if(3===t){var i=r.readMessage(ru,{}),n=i.id,o=i.bitmap,a=i.width,s=i.height,u=i.left,l=i.top,p=i.advance;e.push({id:n,bitmap:new Co({width:a+2*Qs,height:s+2*Qs},o),metrics:{width:a,height:s,left:u,top:l,advance:p}})}}function ru(t,e,r){1===t?e.id=r.readVarint():2===t?e.bitmap=r.readBytes():3===t?e.width=r.readVarint():4===t?e.height=r.readVarint():5===t?e.left=r.readSVarint():6===t?e.top=r.readSVarint():7===t&&(e.advance=r.readVarint())}var iu=Qs,nu=function(t,e,r){this.target=t,this.parent=e,this.mapId=r,this.callbacks={},this.callbackID=0,y(["receive"],this),this.target.addEventListener("message",this.receive,!1)};function ou(t,e,r){var i=2*Math.PI*6378137/256/Math.pow(2,r);return[t*i-2*Math.PI*6378137/2,e*i-2*Math.PI*6378137/2]}nu.prototype.send=function(t,e,r,i){var n=r?this.mapId+":"+this.callbackID++:null;r&&(this.callbacks[n]=r);var o=[];this.target.postMessage({targetMapId:i,sourceMapId:this.mapId,type:t,id:String(n),data:ii(e,o)},o)},nu.prototype.receive=function(t){var e,r=this,i=t.data,n=i.id;if(!i.targetMapId||this.mapId===i.targetMapId){var o=function(t,e){var i=[];r.target.postMessage({sourceMapId:r.mapId,type:"<response>",id:String(n),error:t?ii(t):null,data:ii(e,i)},i)};if("<response>"===i.type)e=this.callbacks[i.id],delete this.callbacks[i.id],e&&i.error?e(ni(i.error)):e&&e(null,ni(i.data));else if(void 0!==i.id&&this.parent[i.type])this.parent[i.type](i.sourceMapId,ni(i.data),o);else if(void 0!==i.id&&this.parent.getWorkerSource){var a=i.type.split("."),s=ni(i.data);this.parent.getWorkerSource(i.sourceMapId,a[0],s.source)[a[1]](s,o)}else this.parent[i.type](ni(i.data))}},nu.prototype.remove=function(){this.target.removeEventListener("message",this.receive,!1)};var au=function(t,e){t&&(e?this.setSouthWest(t).setNorthEast(e):4===t.length?this.setSouthWest([t[0],t[1]]).setNorthEast([t[2],t[3]]):this.setSouthWest(t[0]).setNorthEast(t[1]))};au.prototype.setNorthEast=function(t){return this._ne=t instanceof su?new su(t.lng,t.lat):su.convert(t),this},au.prototype.setSouthWest=function(t){return this._sw=t instanceof su?new su(t.lng,t.lat):su.convert(t),this},au.prototype.extend=function(t){var e,r,i=this._sw,n=this._ne;if(t instanceof su)e=t,r=t;else{if(!(t instanceof au))return Array.isArray(t)?t.every(Array.isArray)?this.extend(au.convert(t)):this.extend(su.convert(t)):this;if(e=t._sw,r=t._ne,!e||!r)return this}return i||n?(i.lng=Math.min(e.lng,i.lng),i.lat=Math.min(e.lat,i.lat),n.lng=Math.max(r.lng,n.lng),n.lat=Math.max(r.lat,n.lat)):(this._sw=new su(e.lng,e.lat),this._ne=new su(r.lng,r.lat)),this},au.prototype.getCenter=function(){return new su((this._sw.lng+this._ne.lng)/2,(this._sw.lat+this._ne.lat)/2)},au.prototype.getSouthWest=function(){return this._sw},au.prototype.getNorthEast=function(){return this._ne},au.prototype.getNorthWest=function(){return new su(this.getWest(),this.getNorth())},au.prototype.getSouthEast=function(){return new su(this.getEast(),this.getSouth())},au.prototype.getWest=function(){return this._sw.lng},au.prototype.getSouth=function(){return this._sw.lat},au.prototype.getEast=function(){return this._ne.lng},au.prototype.getNorth=function(){return this._ne.lat},au.prototype.toArray=function(){return[this._sw.toArray(),this._ne.toArray()]},au.prototype.toString=function(){return"LngLatBounds("+this._sw.toString()+", "+this._ne.toString()+")"},au.prototype.isEmpty=function(){return!(this._sw&&this._ne)},au.convert=function(t){return!t||t instanceof au?t:new au(t)};var su=function(t,e){if(isNaN(t)||isNaN(e))throw new Error("Invalid LngLat object: ("+t+", "+e+")");if(this.lng=+t,this.lat=+e,this.lat>90||this.lat<-90)throw new Error("Invalid LngLat latitude value: must be between -90 and 90")};function uu(t){return 2*Math.PI*6378137*Math.cos(t*Math.PI/180)}function lu(t){return(180+t)/360}function pu(t){return(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+t*Math.PI/360)))/360}function cu(t,e){return t/uu(e)}function hu(t){var e=180-360*t;return 360/Math.PI*Math.atan(Math.exp(e*Math.PI/180))-90}su.prototype.wrap=function(){return new su(p(this.lng,-180,180),this.lat)},su.prototype.toArray=function(){return[this.lng,this.lat]},su.prototype.toString=function(){return"LngLat("+this.lng+", "+this.lat+")"},su.prototype.toBounds=function(t){var e=360*t/40075017,r=e/Math.cos(Math.PI/180*this.lat);return new au(new su(this.lng-r,this.lat-e),new su(this.lng+r,this.lat+e))},su.convert=function(t){if(t instanceof su)return t;if(Array.isArray(t)&&(2===t.length||3===t.length))return new su(Number(t[0]),Number(t[1]));if(!Array.isArray(t)&&"object"==typeof t&&null!==t)return new su(Number("lng"in t?t.lng:t.lon),Number(t.lat));throw new Error("`LngLatLike` argument must be specified as a LngLat instance, an object {lng: <lng>, lat: <lat>}, an object {lon: <lng>, lat: <lat>}, or an array of [<lng>, <lat>]")};var fu=function(t,e,r){void 0===r&&(r=0),this.x=+t,this.y=+e,this.z=+r};fu.fromLngLat=function(t,e){void 0===e&&(e=0);var r=su.convert(t);return new fu(lu(r.lng),pu(r.lat),cu(e,r.lat))},fu.prototype.toLngLat=function(){return new su(360*this.x-180,hu(this.y))},fu.prototype.toAltitude=function(){return this.z*uu(hu(this.y))};var du=function(t,e,r){this.z=t,this.x=e,this.y=r,this.key=_u(0,t,e,r)};du.prototype.equals=function(t){return this.z===t.z&&this.x===t.x&&this.y===t.y},du.prototype.url=function(t,e){var r,i,n,o,a,s=(r=this.x,i=this.y,n=this.z,o=ou(256*r,256*(i=Math.pow(2,n)-i-1),n),a=ou(256*(r+1),256*(i+1),n),o[0]+","+o[1]+","+a[0]+","+a[1]),u=function(t,e,r){for(var i,n="",o=t;o>0;o--)n+=(e&(i=1<<o-1)?1:0)+(r&i?2:0);return n}(this.z,this.x,this.y);return t[(this.x+this.y)%t.length].replace("{prefix}",(this.x%16).toString(16)+(this.y%16).toString(16)).replace("{z}",String(this.z)).replace("{x}",String(this.x)).replace("{y}",String("tms"===e?Math.pow(2,this.z)-this.y-1:this.y)).replace("{quadkey}",u).replace("{bbox-epsg-3857}",s)},du.prototype.getTilePoint=function(t){var e=Math.pow(2,this.z);return new n((t.x*e-this.x)*Zn,(t.y*e-this.y)*Zn)};var mu=function(t,e){this.wrap=t,this.canonical=e,this.key=_u(t,e.z,e.x,e.y)},yu=function(t,e,r,i,n){this.overscaledZ=t,this.wrap=e,this.canonical=new du(r,+i,+n),this.key=_u(e,t,i,n)};function _u(t,e,r,i){(t*=2)<0&&(t=-1*t-1);var n=1<<e;return 32*(n*n*t+n*i+r)+e}yu.prototype.equals=function(t){return this.overscaledZ===t.overscaledZ&&this.wrap===t.wrap&&this.canonical.equals(t.canonical)},yu.prototype.scaledTo=function(t){var e=this.canonical.z-t;return t>this.canonical.z?new yu(t,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y):new yu(t,this.wrap,t,this.canonical.x>>e,this.canonical.y>>e)},yu.prototype.isChildOf=function(t){if(t.wrap!==this.wrap)return!1;var e=this.canonical.z-t.canonical.z;return 0===t.overscaledZ||t.overscaledZ<this.overscaledZ&&t.canonical.x===this.canonical.x>>e&&t.canonical.y===this.canonical.y>>e},yu.prototype.children=function(t){if(this.overscaledZ>=t)return[new yu(this.overscaledZ+1,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y)];var e=this.canonical.z+1,r=2*this.canonical.x,i=2*this.canonical.y;return[new yu(e,this.wrap,e,r,i),new yu(e,this.wrap,e,r+1,i),new yu(e,this.wrap,e,r,i+1),new yu(e,this.wrap,e,r+1,i+1)]},yu.prototype.isLessThan=function(t){return this.wrap<t.wrap||!(this.wrap>t.wrap)&&(this.overscaledZ<t.overscaledZ||!(this.overscaledZ>t.overscaledZ)&&(this.canonical.x<t.canonical.x||!(this.canonical.x>t.canonical.x)&&this.canonical.y<t.canonical.y))},yu.prototype.wrapped=function(){return new yu(this.overscaledZ,0,this.canonical.z,this.canonical.x,this.canonical.y)},yu.prototype.unwrapTo=function(t){return new yu(this.overscaledZ,t,this.canonical.z,this.canonical.x,this.canonical.y)},yu.prototype.overscaleFactor=function(){return Math.pow(2,this.overscaledZ-this.canonical.z)},yu.prototype.toUnwrapped=function(){return new mu(this.wrap,this.canonical)},yu.prototype.toString=function(){return this.overscaledZ+"/"+this.canonical.x+"/"+this.canonical.y},yu.prototype.getTilePoint=function(t){return this.canonical.getTilePoint(new fu(t.x-this.wrap,t.y))},ei("CanonicalTileID",du),ei("OverscaledTileID",yu,{omit:["posMatrix"]});var vu=function(t,e,r){if(this.uid=t,e.height!==e.width)throw new RangeError("DEM tiles must be square");if(r&&"mapbox"!==r&&"terrarium"!==r)return w('"'+r+'" is not a valid encoding type. Valid types include "mapbox" and "terrarium".');var i=this.dim=e.height;this.border=Math.max(Math.ceil(e.height/2),1),this.stride=this.dim+2*this.border,this.data=new Int32Array(this.stride*this.stride);for(var n=e.data,o="terrarium"===r?this._unpackTerrarium:this._unpackMapbox,a=0;a<i;a++)for(var s=0;s<i;s++){var u=4*(a*i+s);this.set(s,a,o(n[u],n[u+1],n[u+2]))}for(var l=0;l<i;l++)this.set(-1,l,this.get(0,l)),this.set(i,l,this.get(i-1,l)),this.set(l,-1,this.get(l,0)),this.set(l,i,this.get(l,i-1));this.set(-1,-1,this.get(0,0)),this.set(i,-1,this.get(i-1,0)),this.set(-1,i,this.get(0,i-1)),this.set(i,i,this.get(i-1,i-1))};vu.prototype.set=function(t,e,r){this.data[this._idx(t,e)]=r+65536},vu.prototype.get=function(t,e){return this.data[this._idx(t,e)]-65536},vu.prototype._idx=function(t,e){if(t<-this.border||t>=this.dim+this.border||e<-this.border||e>=this.dim+this.border)throw new RangeError("out of range source coordinates for DEM data");return(e+this.border)*this.stride+(t+this.border)},vu.prototype._unpackMapbox=function(t,e,r){return(256*t*256+256*e+r)/10-1e4},vu.prototype._unpackTerrarium=function(t,e,r){return 256*t+e+r/256-32768},vu.prototype.getPixels=function(){return new ko({width:this.dim+2*this.border,height:this.dim+2*this.border},new Uint8Array(this.data.buffer))},vu.prototype.backfillBorder=function(t,e,r){if(this.dim!==t.dim)throw new Error("dem dimension mismatch");var i=e*this.dim,n=e*this.dim+this.dim,o=r*this.dim,a=r*this.dim+this.dim;switch(e){case-1:i=n-1;break;case 1:n=i+1}switch(r){case-1:o=a-1;break;case 1:a=o+1}for(var s=l(i,-this.border,this.dim+this.border),u=l(n,-this.border,this.dim+this.border),p=l(o,-this.border,this.dim+this.border),c=l(a,-this.border,this.dim+this.border),h=-e*this.dim,f=-r*this.dim,d=p;d<c;d++)for(var m=s;m<u;m++)this.set(m,d,t.get(m+h,d+f))},ei("DEMData",vu);var gu=Oi([{name:"a_pos",type:"Int16",components:2},{name:"a_texture_pos",type:"Int16",components:2}]),xu=function(t){this._stringToNumber={},this._numberToString=[];for(var e=0;e<t.length;e++){var r=t[e];this._stringToNumber[r]=e,this._numberToString[e]=r}};xu.prototype.encode=function(t){return this._stringToNumber[t]},xu.prototype.decode=function(t){return this._numberToString[t]};var bu=function(t,e,r,i){this.type="Feature",this._vectorTileFeature=t,t._z=e,t._x=r,t._y=i,this.properties=t.properties,null!=t.id&&(this.id=t.id)},wu={geometry:{configurable:!0}};wu.geometry.get=function(){return void 0===this._geometry&&(this._geometry=this._vectorTileFeature.toGeoJSON(this._vectorTileFeature._x,this._vectorTileFeature._y,this._vectorTileFeature._z).geometry),this._geometry},wu.geometry.set=function(t){this._geometry=t},bu.prototype.toJSON=function(){var t={geometry:this.geometry};for(var e in this)"_geometry"!==e&&"_vectorTileFeature"!==e&&(t[e]=this[e]);return t},Object.defineProperties(bu.prototype,wu);var Eu=function(){this.state={},this.stateChanges={}};Eu.prototype.updateState=function(t,e,r){var i=String(e);this.stateChanges[t]=this.stateChanges[t]||{},this.stateChanges[t][i]=this.stateChanges[t][i]||{},c(this.stateChanges[t][i],r)},Eu.prototype.getState=function(t,e){var r=String(e),i=this.state[t]||{},n=this.stateChanges[t]||{};return c({},i[r],n[r])},Eu.prototype.initializeTileState=function(t,e){t.setFeatureState(this.state,e)},Eu.prototype.coalesceChanges=function(t,e){var r={};for(var i in this.stateChanges){this.state[i]=this.state[i]||{};var n={};for(var o in this.stateChanges[i])this.state[i][o]||(this.state[i][o]={}),c(this.state[i][o],this.stateChanges[i][o]),n[o]=this.state[i][o];r[i]=n}if(this.stateChanges={},0!==Object.keys(r).length)for(var a in t)t[a].setFeatureState(r,e)};var Su=function(t,e,r){this.tileID=t,this.x=t.canonical.x,this.y=t.canonical.y,this.z=t.canonical.z,this.grid=e||new Yr(Zn,16,0),this.featureIndexArray=r||new vn};function Tu(t,e){return e-t}Su.prototype.insert=function(t,e,r,i,n){var o=this.featureIndexArray.length;this.featureIndexArray.emplaceBack(r,i,n);for(var a=0;a<e.length;a++){for(var s=e[a],u=[1/0,1/0,-1/0,-1/0],l=0;l<s.length;l++){var p=s[l];u[0]=Math.min(u[0],p.x),u[1]=Math.min(u[1],p.y),u[2]=Math.max(u[2],p.x),u[3]=Math.max(u[3],p.y)}u[0]<Zn&&u[1]<Zn&&u[2]>=0&&u[3]>=0&&this.grid.insert(o,u[0],u[1],u[2],u[3])}},Su.prototype.loadVTLayers=function(){return this.vtLayers||(this.vtLayers=new Va.VectorTile(new Rs(this.rawTileData)).layers,this.sourceLayerCoder=new xu(this.vtLayers?Object.keys(this.vtLayers).sort():["_geojsonTileLayer"])),this.vtLayers},Su.prototype.query=function(t,e,r){var i=this;this.loadVTLayers();for(var n=t.params||{},o=Zn/t.tileSize/t.scale,a=Sr(n.filter),s=t.queryGeometry,u=t.queryPadding*o,l=1/0,p=1/0,c=-1/0,h=-1/0,f=0;f<s.length;f++)for(var d=s[f],m=0;m<d.length;m++){var y=d[m];l=Math.min(l,y.x),p=Math.min(p,y.y),c=Math.max(c,y.x),h=Math.max(h,y.y)}var _=this.grid.query(l-u,p-u,c+u,h+u);_.sort(Tu);for(var v,g={},x=function(u){var l=_[u];if(l!==v){v=l;var p=i.featureIndexArray.get(l),c=null;i.loadMatchingFeature(g,p.bucketIndex,p.sourceLayerIndex,p.featureIndex,a,n.layers,e,function(e,n){c||(c=Xn(e));var a={};return e.id&&(a=r.getState(n.sourceLayer||"_geojsonTileLayer",e.id)),n.queryIntersectsFeature(s,e,a,c,i.z,t.transform,o,t.posMatrix)})}},b=0;b<_.length;b++)x(b);return g},Su.prototype.loadMatchingFeature=function(t,e,r,i,n,o,a,s){var u=this.bucketLayerIDs[e];if(!o||function(t,e){for(var r=0;r<t.length;r++)if(e.indexOf(t[r])>=0)return!0;return!1}(o,u)){var l=this.sourceLayerCoder.decode(r),p=this.vtLayers[l].feature(i);if(n(new vi(this.tileID.overscaledZ),p))for(var c=0;c<u.length;c++){var h=u[c];if(!(o&&o.indexOf(h)<0)){var f=a[h];if(f&&(!s||s(p,f))){var d=new bu(p,this.z,this.x,this.y);d.layer=f.serialize();var m=t[h];void 0===m&&(m=t[h]=[]),m.push({featureIndex:i,feature:d})}}}}},Su.prototype.lookupSymbolFeatures=function(t,e,r,i,n,o){var a={};this.loadVTLayers();for(var s=Sr(i),u=0,l=t;u<l.length;u+=1){var p=l[u];this.loadMatchingFeature(a,e,r,p,s,n,o)}return a},Su.prototype.hasLayer=function(t){for(var e=0,r=this.bucketLayerIDs;e<r.length;e+=1)for(var i=0,n=r[e];i<n.length;i+=1)if(t===n[i])return!0;return!1},ei("FeatureIndex",Su,{omit:["rawTileData","sourceLayerCoder"]});var Au=function(t,e){this.tileID=t,this.uid=f(),this.uses=0,this.tileSize=e,this.buckets={},this.expirationTime=null,this.queryPadding=0,this.hasSymbolBuckets=!1,this.expiredRequestCount=0,this.state="loading"};Au.prototype.registerFadeDuration=function(t){var e=t+this.timeAdded;e<P.now()||this.fadeEndTime&&e<this.fadeEndTime||(this.fadeEndTime=e)},Au.prototype.wasRequested=function(){return"errored"===this.state||"loaded"===this.state||"reloading"===this.state},Au.prototype.loadVectorData=function(t,e,r){if(this.hasData()&&this.unloadVectorData(),this.state="loaded",t){for(var i in t.featureIndex&&(this.latestFeatureIndex=t.featureIndex,t.rawTileData?(this.latestRawTileData=t.rawTileData,this.latestFeatureIndex.rawTileData=t.rawTileData):this.latestRawTileData&&(this.latestFeatureIndex.rawTileData=this.latestRawTileData)),this.collisionBoxArray=t.collisionBoxArray,this.buckets=function(t,e){var r={};if(!e)return r;for(var i=0,n=t;i<n.length;i+=1){var o=n[i],a=o.layerIds.map(function(t){return e.getLayer(t)}).filter(Boolean);if(0!==a.length){o.layers=a,o.stateDependentLayers=a.filter(function(t){return t.isStateDependent()});for(var s=0,u=a;s<u.length;s+=1)r[u[s].id]=o}}return r}(t.buckets,e.style),this.hasSymbolBuckets=!1,this.buckets){var n=this.buckets[i];if(n instanceof ms){if(this.hasSymbolBuckets=!0,!r)break;n.justReloaded=!0}}for(var o in this.queryPadding=0,this.buckets){var a=this.buckets[o];this.queryPadding=Math.max(this.queryPadding,e.style.getLayer(o).queryRadius(a))}t.imageAtlas&&(this.imageAtlas=t.imageAtlas),t.glyphAtlasImage&&(this.glyphAtlasImage=t.glyphAtlasImage)}else this.collisionBoxArray=new un},Au.prototype.unloadVectorData=function(){for(var t in this.buckets)this.buckets[t].destroy();this.buckets={},this.imageAtlasTexture&&this.imageAtlasTexture.destroy(),this.imageAtlas&&(this.imageAtlas=null),this.glyphAtlasTexture&&this.glyphAtlasTexture.destroy(),this.latestFeatureIndex=null,this.state="unloaded"},Au.prototype.unloadDEMData=function(){this.dem=null,this.neighboringTiles=null,this.state="unloaded"},Au.prototype.getBucket=function(t){return this.buckets[t.id]},Au.prototype.upload=function(t){for(var e in this.buckets){var r=this.buckets[e];r.uploadPending()&&r.upload(t)}var i=t.gl;this.imageAtlas&&!this.imageAtlas.uploaded&&(this.imageAtlasTexture=new Ls(t,this.imageAtlas.image,i.RGBA),this.imageAtlas.uploaded=!0),this.glyphAtlasImage&&(this.glyphAtlasTexture=new Ls(t,this.glyphAtlasImage,i.ALPHA),this.glyphAtlasImage=null)},Au.prototype.queryRenderedFeatures=function(t,e,r,i,n,o,a,s){return this.latestFeatureIndex&&this.latestFeatureIndex.rawTileData?this.latestFeatureIndex.query({queryGeometry:r,scale:i,tileSize:this.tileSize,posMatrix:s,transform:o,params:n,queryPadding:this.queryPadding*a},t,e):{}},Au.prototype.querySourceFeatures=function(t,e){if(this.latestFeatureIndex&&this.latestFeatureIndex.rawTileData){var r=this.latestFeatureIndex.loadVTLayers(),i=e?e.sourceLayer:"",n=r._geojsonTileLayer||r[i];if(n)for(var o=Sr(e&&e.filter),a=this.tileID.canonical,s=a.z,u=a.x,l=a.y,p={z:s,x:u,y:l},c=0;c<n.length;c++){var h=n.feature(c);if(o(new vi(this.tileID.overscaledZ),h)){var f=new bu(h,s,u,l);f.tile=p,t.push(f)}}}},Au.prototype.clearMask=function(){this.segments&&(this.segments.destroy(),delete this.segments),this.maskedBoundsBuffer&&(this.maskedBoundsBuffer.destroy(),delete this.maskedBoundsBuffer),this.maskedIndexBuffer&&(this.maskedIndexBuffer.destroy(),delete this.maskedIndexBuffer)},Au.prototype.setMask=function(t,e){if(!a(this.mask,t)&&(this.mask=t,this.clearMask(),!a(t,{0:!0}))){var r=new Vi,i=new en;this.segments=new bn,this.segments.prepareSegment(0,r,i);for(var o=Object.keys(t),s=0;s<o.length;s++){var u=t[o[s]],l=Zn>>u.z,p=new n(u.x*l,u.y*l),c=new n(p.x+l,p.y+l),h=this.segments.prepareSegment(4,r,i);r.emplaceBack(p.x,p.y,p.x,p.y),r.emplaceBack(c.x,p.y,c.x,p.y),r.emplaceBack(p.x,c.y,p.x,c.y),r.emplaceBack(c.x,c.y,c.x,c.y);var f=h.vertexLength;i.emplaceBack(f,f+1,f+2),i.emplaceBack(f+1,f+2,f+3),h.vertexLength+=4,h.primitiveLength+=2}this.maskedBoundsBuffer=e.createVertexBuffer(r,gu.members),this.maskedIndexBuffer=e.createIndexBuffer(i)}},Au.prototype.hasData=function(){return"loaded"===this.state||"reloading"===this.state||"expired"===this.state},Au.prototype.patternsLoaded=function(){return this.imageAtlas&&!!Object.keys(this.imageAtlas.patternPositions).length},Au.prototype.setExpiryData=function(t){var e=this.expirationTime;if(t.cacheControl){var r=function(t){var e={};if(t.replace(/(?:^|(?:\s*\,\s*))([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)(?:\=(?:([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)|(?:\"((?:[^"\\]|\\.)*)\")))?/g,function(t,r,i,n){var o=i||n;return e[r]=!o||o.toLowerCase(),""}),e["max-age"]){var r=parseInt(e["max-age"],10);isNaN(r)?delete e["max-age"]:e["max-age"]=r}return e}(t.cacheControl);r["max-age"]&&(this.expirationTime=Date.now()+1e3*r["max-age"])}else t.expires&&(this.expirationTime=new Date(t.expires).getTime());if(this.expirationTime){var i=Date.now(),n=!1;if(this.expirationTime>i)n=!1;else if(e)if(this.expirationTime<e)n=!0;else{var o=this.expirationTime-e;o?this.expirationTime=i+Math.max(o,3e4):n=!0}else n=!0;n?(this.expiredRequestCount++,this.state="expired"):this.expiredRequestCount=0}},Au.prototype.getExpiryTimeout=function(){if(this.expirationTime)return this.expiredRequestCount?1e3*(1<<Math.min(this.expiredRequestCount-1,31)):Math.min(this.expirationTime-(new Date).getTime(),Math.pow(2,31)-1)},Au.prototype.setFeatureState=function(t,e){if(this.latestFeatureIndex&&this.latestFeatureIndex.rawTileData&&0!==Object.keys(t).length){var r=this.latestFeatureIndex.loadVTLayers();for(var i in this.buckets){var n=this.buckets[i],o=n.layers[0].sourceLayer||"_geojsonTileLayer",a=r[o],s=t[o];a&&s&&0!==Object.keys(s).length&&(n.update(s,a,this.imageAtlas&&this.imageAtlas.patternPositions||{}),e&&e.style&&(this.queryPadding=Math.max(this.queryPadding,e.style.getLayer(i).queryRadius(n))))}}},Au.prototype.holdingForFade=function(){return void 0!==this.symbolFadeHoldUntil},Au.prototype.symbolFadeFinished=function(){return!this.symbolFadeHoldUntil||this.symbolFadeHoldUntil<P.now()},Au.prototype.clearFadeHold=function(){this.symbolFadeHoldUntil=void 0},Au.prototype.setHoldDuration=function(t){this.symbolFadeHoldUntil=P.now()+t};var zu={horizontal:1,vertical:2,horizontalOnly:3},Iu=function(){this.text="",this.sectionIndex=[],this.sections=[]};Iu.fromFeature=function(t,e){for(var r=new Iu,i=0;i<t.sections.length;i++){var n=t.sections[i];r.sections.push({scale:n.scale||1,fontStack:n.fontStack||e}),r.text+=n.text;for(var o=0;o<n.text.length;o++)r.sectionIndex.push(i)}return r},Iu.prototype.length=function(){return this.text.length},Iu.prototype.getSection=function(t){return this.sections[this.sectionIndex[t]]},Iu.prototype.getCharCode=function(t){return this.text.charCodeAt(t)},Iu.prototype.verticalizePunctuation=function(){this.text=function(t){for(var e="",r=0;r<t.length;r++){var i=t.charCodeAt(r+1)||null,n=t.charCodeAt(r-1)||null;i&&pi(i)&&!as[t[r+1]]||n&&pi(n)&&!as[t[r-1]]||!as[t[r]]?e+=t[r]:e+=as[t[r]]}return e}(this.text)},Iu.prototype.trim=function(){for(var t=0,e=0;e<this.text.length&&Cu[this.text.charCodeAt(e)];e++)t++;for(var r=this.text.length,i=this.text.length-1;i>=0&&i>=t&&Cu[this.text.charCodeAt(i)];i--)r--;this.text=this.text.substring(t,r),this.sectionIndex=this.sectionIndex.slice(t,r)},Iu.prototype.substring=function(t,e){var r=new Iu;return r.text=this.text.substring(t,e),r.sectionIndex=this.sectionIndex.slice(t,e),r.sections=this.sections,r},Iu.prototype.toString=function(){return this.text},Iu.prototype.getMaxScale=function(){var t=this;return this.sectionIndex.reduce(function(e,r){return Math.max(e,t.sections[r].scale)},0)};var Cu={9:!0,10:!0,11:!0,12:!0,13:!0,32:!0},ku={};function Pu(t,e,r,i){var n=Math.pow(t-e,2);return i?t<e?n/2:2*n:n+Math.abs(r)*r}function Mu(t,e){var r=0;return 10===t&&(r-=1e4),40!==t&&65288!==t||(r+=50),41!==e&&65289!==e||(r+=50),r}function Lu(t,e,r,i,n,o){for(var a=null,s=Pu(e,r,n,o),u=0,l=i;u<l.length;u+=1){var p=l[u],c=Pu(e-p.x,r,n,o)+p.badness;c<=s&&(a=p,s=c)}return{index:t,x:e,priorBreak:a,badness:s}}function Du(t,e,r,i){if(!r)return[];if(!t)return[];for(var n,o=[],a=function(t,e,r,i){for(var n=0,o=0;o<t.length();o++){var a=t.getSection(o),s=i[a.fontStack],u=s&&s[t.getCharCode(o)];u&&(n+=u.metrics.advance*a.scale+e)}return n/Math.max(1,Math.ceil(n/r))}(t,e,r,i),s=0,u=0;u<t.length();u++){var l=t.getSection(u),p=t.getCharCode(u),c=i[l.fontStack],h=c&&c[p];h&&!Cu[p]&&(s+=h.metrics.advance*l.scale+e),u<t.length()-1&&(ku[p]||!((n=p)<11904)&&(ai["Bopomofo Extended"](n)||ai.Bopomofo(n)||ai["CJK Compatibility Forms"](n)||ai["CJK Compatibility Ideographs"](n)||ai["CJK Compatibility"](n)||ai["CJK Radicals Supplement"](n)||ai["CJK Strokes"](n)||ai["CJK Symbols and Punctuation"](n)||ai["CJK Unified Ideographs Extension A"](n)||ai["CJK Unified Ideographs"](n)||ai["Enclosed CJK Letters and Months"](n)||ai["Halfwidth and Fullwidth Forms"](n)||ai.Hiragana(n)||ai["Ideographic Description Characters"](n)||ai["Kangxi Radicals"](n)||ai["Katakana Phonetic Extensions"](n)||ai.Katakana(n)||ai["Vertical Forms"](n)||ai["Yi Radicals"](n)||ai["Yi Syllables"](n)))&&o.push(Lu(u+1,s,a,o,Mu(p,t.getCharCode(u+1)),!1))}return function t(e){return e?t(e.priorBreak).concat(e.index):[]}(Lu(t.length(),s,a,o,0,!0))}function Bu(t){var e=.5,r=.5;switch(t){case"right":case"top-right":case"bottom-right":e=1;break;case"left":case"top-left":case"bottom-left":e=0}switch(t){case"bottom":case"bottom-right":case"bottom-left":r=1;break;case"top":case"top-right":case"top-left":r=0}return{horizontalAlign:e,verticalAlign:r}}function Ru(t,e,r,i,n){if(n){var o=t[i],a=e[o.fontStack],s=a&&a[o.glyph];if(s)for(var u=s.metrics.advance*o.scale,l=(t[i].x+u)*n,p=r;p<=i;p++)t[p].x-=l}}ku[10]=!0,ku[32]=!0,ku[38]=!0,ku[40]=!0,ku[41]=!0,ku[43]=!0,ku[45]=!0,ku[47]=!0,ku[173]=!0,ku[183]=!0,ku[8203]=!0,ku[8208]=!0,ku[8211]=!0,ku[8231]=!0,t.createCommonjsModule=e,t.Point=n,t.window=self,t.getJSON=function(t,e){return nt(c(t,{type:"json"}),e)},t.getImage=st,t.ResourceType=Q,t.browser=P,t.normalizeSpriteURL=function(t,e,r,i){var n=G(t);return F(t)?(n.path="/styles/v1"+n.path+"/sprite"+e+r,O(n,i)):(n.path+=""+e+r,X(n))},t.RGBAImage=ko,t.potpack=Ts,t.ImagePosition=As,t.Texture=Ls,t.normalizeGlyphsURL=function(t,e){if(!F(t))return t;var r=G(t);return r.path="/fonts/v1"+r.path,O(r,e)},t.getArrayBuffer=ot,t.parseGlyphPBF=function(t){return new Rs(t).readFields(tu,[])},t.isChar=ai,t.asyncAll=function(t,e,r){if(!t.length)return r(null,[]);var i=t.length,n=new Array(t.length),o=null;t.forEach(function(t,a){e(t,function(t,e){t&&(o=t),n[a]=e,0==--i&&r(o,n)})})},t.AlphaImage=Co,t.styleSpec=ft,t.endsWith=_,t.extend=c,t.sphericalToCartesian=function(t){var e=t[0],r=t[1],i=t[2];return r+=90,r*=Math.PI/180,i*=Math.PI/180,{x:e*Math.cos(r)*Math.sin(i),y:e*Math.sin(r)*Math.sin(i),z:e*Math.cos(i)}},t.Evented=ht,t.validateStyle=Gr,t.validateLight=Xr,t.emitValidationErrors=Kr,t.Color=Bt,t.number=ae,t.Properties=Mi,t.Transitionable=bi,t.Transitioning=Ei,t.PossiblyEvaluated=Ai,t.DataConstantProperty=zi,t.warnOnce=w,t.uniqueId=f,t.Actor=nu,t.pick=function(t,e){for(var r={},i=0;i<e.length;i++){var n=e[i];n in t&&(r[n]=t[n])}return r},t.normalizeSourceURL=function(t,e){if(!F(t))return t;var r=G(t);return r.path="/v4/"+r.authority+".json",r.params.push("secure"),O(r,e)},t.canonicalizeTileset=function(t,e){if(!F(e))return t.tiles||[];for(var r=[],i=0,n=t.tiles;i<n.length;i+=1){var o=n[i],a=q(o);r.push(a)}return r},t.LngLatBounds=au,t.mercatorXfromLng=lu,t.mercatorYfromLat=pu,t.Event=pt,t.ErrorEvent=ct,t.normalizeTileURL=function(t,e,r){if(!e||!F(e))return t;var i=G(t),n=P.devicePixelRatio>=2||512===r?"@2x":"",o=L.supported?".webp":"$1";return i.path=i.path.replace(N,""+n+o),i.path="/v4"+i.path,O(i)},t.postTurnstileEvent=Y,t.postMapLoadEvent=$,t.OverscaledTileID=yu,t.EXTENT=Zn,t.CanonicalTileID=du,t.StructArrayLayout4i8=Vi,t.rasterBoundsAttributes=gu,t.SegmentVector=bn,t.MercatorCoordinate=fu,t.getVideo=function(t,e){var r,i,n=self.document.createElement("video");n.muted=!0,n.onloadstart=function(){e(null,n)};for(var o=0;o<t.length;o++){var a=self.document.createElement("source");r=t[o],i=void 0,(i=self.document.createElement("a")).href=r,(i.protocol!==self.document.location.protocol||i.host!==self.document.location.host)&&(n.crossOrigin="Anonymous"),a.src=t[o],n.appendChild(a)}return{cancel:function(){}}},t.ValidationError=dt,t.bindAll=y,t.isEqual=a,t.Tile=Au,t.keysDifference=function(t,e){var r=[];for(var i in t)i in e||r.push(i);return r},t.SourceFeatureState=Eu,t.refProperties=["type","source","source-layer","minzoom","maxzoom","filter","layout"],t.create=function(){var t=new lo(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},t.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},t.invert=function(t,e){var r=e[0],i=e[1],n=e[2],o=e[3],a=e[4],s=e[5],u=e[6],l=e[7],p=e[8],c=e[9],h=e[10],f=e[11],d=e[12],m=e[13],y=e[14],_=e[15],v=r*s-i*a,g=r*u-n*a,x=r*l-o*a,b=i*u-n*s,w=i*l-o*s,E=n*l-o*u,S=p*m-c*d,T=p*y-h*d,A=p*_-f*d,z=c*y-h*m,I=c*_-f*m,C=h*_-f*y,k=v*C-g*I+x*z+b*A-w*T+E*S;return k?(k=1/k,t[0]=(s*C-u*I+l*z)*k,t[1]=(n*I-i*C-o*z)*k,t[2]=(m*E-y*w+_*b)*k,t[3]=(h*w-c*E-f*b)*k,t[4]=(u*A-a*C-l*T)*k,t[5]=(r*C-n*A+o*T)*k,t[6]=(y*x-d*E-_*g)*k,t[7]=(p*E-h*x+f*g)*k,t[8]=(a*I-s*A+l*S)*k,t[9]=(i*A-r*I-o*S)*k,t[10]=(d*w-m*x+_*v)*k,t[11]=(c*x-p*w-f*v)*k,t[12]=(s*T-a*z-u*S)*k,t[13]=(r*z-i*T+n*S)*k,t[14]=(m*g-d*b-y*v)*k,t[15]=(p*b-c*g+h*v)*k,t):null},t.multiply=function(t,e,r){var i=e[0],n=e[1],o=e[2],a=e[3],s=e[4],u=e[5],l=e[6],p=e[7],c=e[8],h=e[9],f=e[10],d=e[11],m=e[12],y=e[13],_=e[14],v=e[15],g=r[0],x=r[1],b=r[2],w=r[3];return t[0]=g*i+x*s+b*c+w*m,t[1]=g*n+x*u+b*h+w*y,t[2]=g*o+x*l+b*f+w*_,t[3]=g*a+x*p+b*d+w*v,g=r[4],x=r[5],b=r[6],w=r[7],t[4]=g*i+x*s+b*c+w*m,t[5]=g*n+x*u+b*h+w*y,t[6]=g*o+x*l+b*f+w*_,t[7]=g*a+x*p+b*d+w*v,g=r[8],x=r[9],b=r[10],w=r[11],t[8]=g*i+x*s+b*c+w*m,t[9]=g*n+x*u+b*h+w*y,t[10]=g*o+x*l+b*f+w*_,t[11]=g*a+x*p+b*d+w*v,g=r[12],x=r[13],b=r[14],w=r[15],t[12]=g*i+x*s+b*c+w*m,t[13]=g*n+x*u+b*h+w*y,t[14]=g*o+x*l+b*f+w*_,t[15]=g*a+x*p+b*d+w*v,t},t.translate=function(t,e,r){var i,n,o,a,s,u,l,p,c,h,f,d,m=r[0],y=r[1],_=r[2];return e===t?(t[12]=e[0]*m+e[4]*y+e[8]*_+e[12],t[13]=e[1]*m+e[5]*y+e[9]*_+e[13],t[14]=e[2]*m+e[6]*y+e[10]*_+e[14],t[15]=e[3]*m+e[7]*y+e[11]*_+e[15]):(i=e[0],n=e[1],o=e[2],a=e[3],s=e[4],u=e[5],l=e[6],p=e[7],c=e[8],h=e[9],f=e[10],d=e[11],t[0]=i,t[1]=n,t[2]=o,t[3]=a,t[4]=s,t[5]=u,t[6]=l,t[7]=p,t[8]=c,t[9]=h,t[10]=f,t[11]=d,t[12]=i*m+s*y+c*_+e[12],t[13]=n*m+u*y+h*_+e[13],t[14]=o*m+l*y+f*_+e[14],t[15]=a*m+p*y+d*_+e[15]),t},t.scale=function(t,e,r){var i=r[0],n=r[1],o=r[2];return t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i,t[3]=e[3]*i,t[4]=e[4]*n,t[5]=e[5]*n,t[6]=e[6]*n,t[7]=e[7]*n,t[8]=e[8]*o,t[9]=e[9]*o,t[10]=e[10]*o,t[11]=e[11]*o,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t},t.rotateX=function(t,e,r){var i=Math.sin(r),n=Math.cos(r),o=e[4],a=e[5],s=e[6],u=e[7],l=e[8],p=e[9],c=e[10],h=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=o*n+l*i,t[5]=a*n+p*i,t[6]=s*n+c*i,t[7]=u*n+h*i,t[8]=l*n-o*i,t[9]=p*n-a*i,t[10]=c*n-s*i,t[11]=h*n-u*i,t},t.rotateZ=function(t,e,r){var i=Math.sin(r),n=Math.cos(r),o=e[0],a=e[1],s=e[2],u=e[3],l=e[4],p=e[5],c=e[6],h=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=o*n+l*i,t[1]=a*n+p*i,t[2]=s*n+c*i,t[3]=u*n+h*i,t[4]=l*n-o*i,t[5]=p*n-a*i,t[6]=c*n-s*i,t[7]=h*n-u*i,t},t.perspective=function(t,e,r,i,n){var o=1/Math.tan(e/2),a=1/(i-n);return t[0]=o/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=o,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(n+i)*a,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*n*i*a,t[15]=0,t},t.ortho=function(t,e,r,i,n,o,a){var s=1/(e-r),u=1/(i-n),l=1/(o-a);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*u,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+r)*s,t[13]=(n+i)*u,t[14]=(a+o)*l,t[15]=1,t},t.create$1=vo,t.normalize=go,t.transformMat4=xo,t.forEach=bo,t.getSizeData=us,t.evaluateSizeForFeature=function(t,e,r){var i=e;return"source"===t.functionType?r.lowerSize/256:"composite"===t.functionType?ae(r.lowerSize/256,r.upperSize/256,i.uSizeT):i.uSize},t.evaluateSizeForZoom=function(t,e,r){if("constant"===t.functionType)return{uSizeT:0,uSize:t.layoutSize};if("source"===t.functionType)return{uSizeT:0,uSize:0};if("camera"===t.functionType){var i=t.propertyValue,n=t.zoomRange,o=t.sizeRange,a=l(mr(i,r.specification).interpolationFactor(e,n.min,n.max),0,1);return{uSizeT:0,uSize:o.min+a*(o.max-o.min)}}var s=t.propertyValue,u=t.zoomRange;return{uSizeT:l(mr(s,r.specification).interpolationFactor(e,u.min,u.max),0,1),uSize:0}},t.SIZE_PACK_FACTOR=256,t.addDynamicAttributes=hs,t.properties=_s,t.WritingMode=zu,t.multiPolygonIntersectsBufferedPoint=Kn,t.multiPolygonIntersectsMultiPolygon=Yn,t.multiPolygonIntersectsBufferedMultiLine=Jn,t.polygonIntersectsPolygon=function(t,e){for(var r=0;r<t.length;r++)if(no(e,t[r]))return!0;for(var i=0;i<e.length;i++)if(no(t,e[i]))return!0;return!!Qn(t,e)},t.distToSegmentSquared=ro,t.SymbolInstanceArray=hn,t.StyleLayer=Li,t.createStyleLayer=function(t){return"custom"===t.type?new Es(t):new Ss[t.type](t)},t.clone=x,t.filterObject=g,t.mapObject=v,t.getReferrer=it,t.isMapboxURL=F,t.normalizeStyleURL=function(t,e){if(!F(t))return t;var r=G(t);return r.path="/styles/v1"+r.path,O(r,e)},t.registerForPluginAvailability=function(t){return di?t({pluginURL:di,completionCallback:hi}):yi.once("pluginAvailable",t),t},t.evented=yi,t.ZoomHistory=oi,t.validateCustomStyleLayer=function(t){var e=[],r=t.id;return void 0===r&&e.push({message:"layers."+r+': missing required property "id"'}),void 0===t.render&&e.push({message:"layers."+r+': missing required method "render"'}),t.renderingMode&&"2d"!==t.renderingMode&&"3d"!==t.renderingMode&&e.push({message:"layers."+r+': property "renderingMode" must be either "2d" or "3d"'}),e},t.createLayout=Oi,t.ProgramConfiguration=Vn,t.Uniform1i=An,t.Uniform1f=zn,t.Uniform2f=In,t.Uniform4f=kn,t.Uniform3f=Cn,t.UniformMatrix4f=Ln,t.create$2=po,t.fromRotation=function(t,e){var r=Math.sin(e),i=Math.cos(e);return t[0]=i,t[1]=r,t[2]=0,t[3]=-r,t[4]=i,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},t.create$3=co,t.length=ho,t.fromValues=fo,t.normalize$1=function(t,e){var r=e[0],i=e[1],n=e[2],o=r*r+i*i+n*n;return o>0&&(o=1/Math.sqrt(o),t[0]=e[0]*o,t[1]=e[1]*o,t[2]=e[2]*o),t},t.dot=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]},t.cross=function(t,e,r){var i=e[0],n=e[1],o=e[2],a=r[0],s=r[1],u=r[2];return t[0]=n*u-o*s,t[1]=o*a-i*u,t[2]=i*s-n*a,t},t.transformMat3=function(t,e,r){var i=e[0],n=e[1],o=e[2];return t[0]=i*r[0]+n*r[3]+o*r[6],t[1]=i*r[1]+n*r[4]+o*r[7],t[2]=i*r[2]+n*r[5]+o*r[8],t},t.len=yo,t.forEach$1=_o,t.UniformColor=Pn,t.clamp=l,t.StructArrayLayout2i4=Ui,t.StructArrayLayout2ui4=rn,t.StructArrayLayout3ui6=en,t.StructArrayLayout1ui2=nn,t.LngLat=su,t.mercatorZfromAltitude=cu,t.wrap=p,t.UnwrappedTileID=mu,t.create$4=function(){var t=new lo(4);return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t},t.rotate=function(t,e,r){var i=e[0],n=e[1],o=e[2],a=e[3],s=Math.sin(r),u=Math.cos(r);return t[0]=i*u+o*s,t[1]=n*u+a*s,t[2]=i*-s+o*u,t[3]=n*-s+a*u,t},t.ease=u,t.bezier=s,t.config=M,t.EvaluationParameters=vi,t.webpSupported=L,t.version="0.52.0",t.setRTLTextPlugin=function(t,e){if(fi)throw new Error("setRTLTextPlugin cannot be called multiple times.");fi=!0,di=P.resolveURL(t),hi=function(t){t?(fi=!1,di=null,e&&e(t)):mi=!0},yi.fire(new pt("pluginAvailable",{pluginURL:di,completionCallback:hi}))},t.values=function(t){var e=[];for(var r in t)e.push(t[r]);return e},t.featureFilter=Sr,t.Anchor=ss,t.GLYPH_PBF_BORDER=iu,t.shapeText=function(t,e,r,i,n,o,a,s,u,l,p){var c=Iu.fromFeature(t,r);p===zu.vertical&&c.verticalizePunctuation();var h,f=[],d={positionedGlyphs:f,text:c,top:u[1],bottom:u[1],left:u[0],right:u[0],writingMode:p},m=_i.processBidirectionalText,y=_i.processStyledBidirectionalText;if(m&&1===c.sections.length){h=[];for(var _=0,v=m(c.toString(),Du(c,s,i,e));_<v.length;_+=1){var g=v[_],x=new Iu;x.text=g,x.sections=c.sections;for(var b=0;b<g.length;b++)x.sectionIndex.push(0);h.push(x)}}else if(y){h=[];for(var w=0,E=y(c.text,c.sectionIndex,Du(c,s,i,e));w<E.length;w+=1){var S=E[w],T=new Iu;T.text=S[0],T.sectionIndex=S[1],T.sections=c.sections,h.push(T)}}else h=function(t,e){for(var r=[],i=t.text,n=0,o=0,a=e;o<a.length;o+=1){var s=a[o];r.push(t.substring(n,s)),n=s}return n<i.length&&r.push(t.substring(n,i.length)),r}(c,Du(c,s,i,e));return function(t,e,r,i,n,o,a,s,u){for(var l=0,p=-17,c=0,h=t.positionedGlyphs,f="right"===o?1:"left"===o?0:.5,d=0,m=r;d<m.length;d+=1){var y=m[d];y.trim();var _=y.getMaxScale();if(y.length()){for(var v=h.length,g=0;g<y.length();g++){var x=y.getSection(g),b=y.getCharCode(g),w=24*(_-x.scale),E=e[x.fontStack],S=E&&E[b];S&&(li(b)&&a!==zu.horizontal?(h.push({glyph:b,x:l,y:w,vertical:!0,scale:x.scale,fontStack:x.fontStack}),l+=u*x.scale+s):(h.push({glyph:b,x:l,y:p+w,vertical:!1,scale:x.scale,fontStack:x.fontStack}),l+=S.metrics.advance*x.scale+s))}if(h.length!==v){var T=l-s;c=Math.max(T,c),Ru(h,e,v,h.length-1,f)}l=0,p+=i*_}else p+=i}var A=Bu(n),z=A.horizontalAlign,I=A.verticalAlign;!function(t,e,r,i,n,o,a){for(var s=(e-r)*n,u=(-i*a+.5)*o,l=0;l<t.length;l++)t[l].x+=s,t[l].y+=u}(h,f,z,I,c,i,r.length);var C=p- -17;t.top+=-I*C,t.bottom=t.top+C,t.left+=-z*c,t.right=t.left+c}(d,e,h,n,o,a,p,s,l),!!f.length&&(d.text=d.text.toString(),d)},t.shapeIcon=function(t,e,r){var i=Bu(r),n=i.horizontalAlign,o=i.verticalAlign,a=e[0],s=e[1],u=a-t.displaySize[0]*n,l=u+t.displaySize[0],p=s-t.displaySize[1]*o;return{image:t,top:p,bottom:p+t.displaySize[1],left:u,right:l}},t.allowsVerticalWritingMode=si,t.allowsLetterSpacing=function(t){for(var e=0,r=t;e<r.length;e+=1)if(!ui(r[e].charCodeAt(0)))return!1;return!0},t.classifyRings=da,t.SymbolBucket=ms,t.register=ei,t.FeatureIndex=Su,t.CollisionBoxArray=un,t.DictionaryCoder=xu,t.LineBucket=Wa,t.FillBucket=va,t.FillExtrusionBucket=Ta,t.ImageAtlas=Is,t.mvt=Va,t.Protobuf=Rs,t.DEMData=vu,t.vectorTile=Va,t.Point$1=n,t.pbf=Rs,t.plugin=_i}),i(0,function(t){function e(t){var r=typeof t;if("number"===r||"boolean"===r||"string"===r||null==t)return JSON.stringify(t);if(Array.isArray(t)){for(var i="[",n=0,o=t;n<o.length;n+=1)i+=e(o[n])+",";return i+"]"}for(var a=Object.keys(t).sort(),s="{",u=0;u<a.length;u++)s+=JSON.stringify(a[u])+":"+e(t[a[u]])+",";return s+"}"}function r(r){for(var i="",n=0,o=t.refProperties;n<o.length;n+=1)i+="/"+e(r[o[n]]);return i}var i=function(t){t&&this.replace(t)};function n(t,e,r,i,n){if(void 0===e.segment)return!0;for(var o=e,a=e.segment+1,s=0;s>-r/2;){if(--a<0)return!1;s-=t[a].dist(o),o=t[a]}s+=t[a].dist(t[a+1]),a++;for(var u=[],l=0;s<r/2;){var p=t[a-1],c=t[a],h=t[a+1];if(!h)return!1;var f=p.angleTo(c)-c.angleTo(h);for(f=Math.abs((f+3*Math.PI)%(2*Math.PI)-Math.PI),u.push({distance:s,angleDelta:f}),l+=f;s-u[0].distance>i;)l-=u.shift().angleDelta;if(l>n)return!1;a++,s+=c.dist(h)}return!0}function o(t){for(var e=0,r=0;r<t.length-1;r++)e+=t[r].dist(t[r+1]);return e}function a(t,e,r){return t?.6*e*r:0}function s(t,e){return Math.max(t?t.right-t.left:0,e?e.right-e.left:0)}function u(e,r,i,u,l,p){for(var c=a(i,l,p),h=s(i,u)*p,f=0,d=o(e)/2,m=0;m<e.length-1;m++){var y=e[m],_=e[m+1],v=y.dist(_);if(f+v>d){var g=(d-f)/v,x=t.number(y.x,_.x,g),b=t.number(y.y,_.y,g),w=new t.Anchor(x,b,_.angleTo(y),m);return w._round(),!c||n(e,w,h,c,r)?w:void 0}f+=v}}function l(e,r,i,u,l,p,c,h,f){var d=a(u,p,c),m=s(u,l),y=m*c,_=0===e[0].x||e[0].x===f||0===e[0].y||e[0].y===f;return r-y<r/4&&(r=y+r/4),function e(r,i,a,s,u,l,p,c,h){for(var f=l/2,d=o(r),m=0,y=i-a,_=[],v=0;v<r.length-1;v++){for(var g=r[v],x=r[v+1],b=g.dist(x),w=x.angleTo(g);y+a<m+b;){var E=((y+=a)-m)/b,S=t.number(g.x,x.x,E),T=t.number(g.y,x.y,E);if(S>=0&&S<h&&T>=0&&T<h&&y-f>=0&&y+f<=d){var A=new t.Anchor(S,T,w,v);A._round(),s&&!n(r,A,l,s,u)||_.push(A)}}m+=b}return c||_.length||p||(_=e(r,m/2,a,s,u,l,p,!0,h)),_}(e,_?r/2*h%r:(m/2+2*p)*c*h%r,r,d,i,y,_,!1,f)}i.prototype.replace=function(t){this._layerConfigs={},this._layers={},this.update(t,[])},i.prototype.update=function(e,i){for(var n=this,o=0,a=e;o<a.length;o+=1){var s=a[o];n._layerConfigs[s.id]=s;var u=n._layers[s.id]=t.createStyleLayer(s);u._featureFilter=t.featureFilter(u.filter)}for(var l=0,p=i;l<p.length;l+=1){var c=p[l];delete n._layerConfigs[c],delete n._layers[c]}this.familiesBySource={};for(var h=0,f=function(t){for(var e={},i=0;i<t.length;i++){var n=r(t[i]),o=e[n];o||(o=e[n]=[]),o.push(t[i])}var a=[];for(var s in e)a.push(e[s]);return a}(t.values(this._layerConfigs));h<f.length;h+=1){var d=f[h].map(function(t){return n._layers[t.id]}),m=d[0];if("none"!==m.visibility){var y=m.source||"",_=n.familiesBySource[y];_||(_=n.familiesBySource[y]={});var v=m.sourceLayer||"_geojsonTileLayer",g=_[v];g||(g=_[v]=[]),g.push(d)}}};var p=function(e,r,i,n,o,a,s,u,l,p,c,h){var f=s.top*u-l,d=s.bottom*u+l,m=s.left*u-l,y=s.right*u+l;if(this.boxStartIndex=e.length,p){var _=d-f,v=y-m;_>0&&(_=Math.max(10*u,_),this._addLineCollisionCircles(e,r,i,i.segment,v,_,n,o,a,c))}else{if(h){var g=new t.Point(m,f),x=new t.Point(y,f),b=new t.Point(m,d),w=new t.Point(y,d),E=h*Math.PI/180;g._rotate(E),x._rotate(E),b._rotate(E),w._rotate(E),m=Math.min(g.x,x.x,b.x,w.x),y=Math.max(g.x,x.x,b.x,w.x),f=Math.min(g.y,x.y,b.y,w.y),d=Math.max(g.y,x.y,b.y,w.y)}e.emplaceBack(i.x,i.y,m,f,y,d,n,o,a,0,0)}this.boxEndIndex=e.length};p.prototype._addLineCollisionCircles=function(t,e,r,i,n,o,a,s,u,l){var p=o/2,c=Math.floor(n/p)||1,h=1+.4*Math.log(l)/Math.LN2,f=Math.floor(c*h/2),d=-o/2,m=r,y=i+1,_=d,v=-n/2,g=v-n/4;do{if(--y<0){if(_>v)return;y=0;break}_-=e[y].dist(m),m=e[y]}while(_>g);for(var x=e[y].dist(e[y+1]),b=-f;b<c+f;b++){var w=b*p,E=v+w;if(w<0&&(E+=w),w>n&&(E+=w-n),!(E<_)){for(;_+x<E;){if(_+=x,++y+1>=e.length)return;x=e[y].dist(e[y+1])}var S=E-_,T=e[y],A=e[y+1].sub(T)._unit()._mult(S)._add(T)._round(),z=Math.abs(E-d)<p?0:.8*(E-d);t.emplaceBack(A.x,A.y,-o/2,-o/2,o/2,o/2,a,s,u,o/2,z)}}};var c=f,h=f;function f(t,e){if(!(this instanceof f))return new f(t,e);if(this.data=t||[],this.length=this.data.length,this.compare=e||d,this.length>0)for(var r=(this.length>>1)-1;r>=0;r--)this._down(r)}function d(t,e){return t<e?-1:t>e?1:0}function m(e,r,i){void 0===r&&(r=1),void 0===i&&(i=!1);for(var n=1/0,o=1/0,a=-1/0,s=-1/0,u=e[0],l=0;l<u.length;l++){var p=u[l];(!l||p.x<n)&&(n=p.x),(!l||p.y<o)&&(o=p.y),(!l||p.x>a)&&(a=p.x),(!l||p.y>s)&&(s=p.y)}var h=a-n,f=s-o,d=Math.min(h,f),m=d/2,v=new c(null,y);if(0===d)return new t.Point(n,o);for(var g=n;g<a;g+=d)for(var x=o;x<s;x+=d)v.push(new _(g+m,x+m,m,e));for(var b=function(t){for(var e=0,r=0,i=0,n=t[0],o=0,a=n.length,s=a-1;o<a;s=o++){var u=n[o],l=n[s],p=u.x*l.y-l.x*u.y;r+=(u.x+l.x)*p,i+=(u.y+l.y)*p,e+=3*p}return new _(r/e,i/e,0,t)}(e),w=v.length;v.length;){var E=v.pop();(E.d>b.d||!b.d)&&(b=E,i&&console.log("found best %d after %d probes",Math.round(1e4*E.d)/1e4,w)),E.max-b.d<=r||(m=E.h/2,v.push(new _(E.p.x-m,E.p.y-m,m,e)),v.push(new _(E.p.x+m,E.p.y-m,m,e)),v.push(new _(E.p.x-m,E.p.y+m,m,e)),v.push(new _(E.p.x+m,E.p.y+m,m,e)),w+=4)}return i&&(console.log("num probes: "+w),console.log("best distance: "+b.d)),b.p}function y(t,e){return e.max-t.max}function _(e,r,i,n){this.p=new t.Point(e,r),this.h=i,this.d=function(e,r){for(var i=!1,n=1/0,o=0;o<r.length;o++)for(var a=r[o],s=0,u=a.length,l=u-1;s<u;l=s++){var p=a[s],c=a[l];p.y>e.y!=c.y>e.y&&e.x<(c.x-p.x)*(e.y-p.y)/(c.y-p.y)+p.x&&(i=!i),n=Math.min(n,t.distToSegmentSquared(e,p,c))}return(i?1:-1)*Math.sqrt(n)}(this.p,n),this.max=this.d+this.h*Math.SQRT2}f.prototype={push:function(t){this.data.push(t),this.length++,this._up(this.length-1)},pop:function(){if(0!==this.length){var t=this.data[0];return this.length--,this.length>0&&(this.data[0]=this.data[this.length],this._down(0)),this.data.pop(),t}},peek:function(){return this.data[0]},_up:function(t){for(var e=this.data,r=this.compare,i=e[t];t>0;){var n=t-1>>1,o=e[n];if(r(i,o)>=0)break;e[t]=o,t=n}e[t]=i},_down:function(t){for(var e=this.data,r=this.compare,i=this.length>>1,n=e[t];t<i;){var o=1+(t<<1),a=o+1,s=e[o];if(a<this.length&&r(e[a],s)<0&&(o=a,s=e[a]),r(s,n)>=0)break;e[t]=s,t=o}e[t]=n}},c.default=h;var v=t.createCommonjsModule(function(t){t.exports=function(t,e){var r,i,n,o,a,s,u,l;for(r=3&t.length,i=t.length-r,n=e,a=3432918353,s=461845907,l=0;l<i;)u=255&t.charCodeAt(l)|(255&t.charCodeAt(++l))<<8|(255&t.charCodeAt(++l))<<16|(255&t.charCodeAt(++l))<<24,++l,n=27492+(65535&(o=5*(65535&(n=(n^=u=(65535&(u=(u=(65535&u)*a+(((u>>>16)*a&65535)<<16)&4294967295)<<15|u>>>17))*s+(((u>>>16)*s&65535)<<16)&4294967295)<<13|n>>>19))+((5*(n>>>16)&65535)<<16)&4294967295))+((58964+(o>>>16)&65535)<<16);switch(u=0,r){case 3:u^=(255&t.charCodeAt(l+2))<<16;case 2:u^=(255&t.charCodeAt(l+1))<<8;case 1:n^=u=(65535&(u=(u=(65535&(u^=255&t.charCodeAt(l)))*a+(((u>>>16)*a&65535)<<16)&4294967295)<<15|u>>>17))*s+(((u>>>16)*s&65535)<<16)&4294967295}return n^=t.length,n=2246822507*(65535&(n^=n>>>16))+((2246822507*(n>>>16)&65535)<<16)&4294967295,n=3266489909*(65535&(n^=n>>>13))+((3266489909*(n>>>16)&65535)<<16)&4294967295,(n^=n>>>16)>>>0}}),g=t.createCommonjsModule(function(t){t.exports=function(t,e){for(var r,i=t.length,n=e^i,o=0;i>=4;)r=1540483477*(65535&(r=255&t.charCodeAt(o)|(255&t.charCodeAt(++o))<<8|(255&t.charCodeAt(++o))<<16|(255&t.charCodeAt(++o))<<24))+((1540483477*(r>>>16)&65535)<<16),n=1540483477*(65535&n)+((1540483477*(n>>>16)&65535)<<16)^(r=1540483477*(65535&(r^=r>>>24))+((1540483477*(r>>>16)&65535)<<16)),i-=4,++o;switch(i){case 3:n^=(255&t.charCodeAt(o+2))<<16;case 2:n^=(255&t.charCodeAt(o+1))<<8;case 1:n=1540483477*(65535&(n^=255&t.charCodeAt(o)))+((1540483477*(n>>>16)&65535)<<16)}return n=1540483477*(65535&(n^=n>>>13))+((1540483477*(n>>>16)&65535)<<16),(n^=n>>>15)>>>0}}),x=v,b=v,w=g;function E(e,r,i,n,o,a){e.createArrays();var s=512*e.overscaling;e.tilePixelRatio=t.EXTENT/s,e.compareText={},e.iconsNeedLinear=!1;var u=e.layers[0].layout,l=e.layers[0]._unevaluatedLayout._values,p={};if("composite"===e.textSizeData.functionType){var c=e.textSizeData.zoomRange,h=c.min,f=c.max;p.compositeTextSizes=[l["text-size"].possiblyEvaluate(new t.EvaluationParameters(h)),l["text-size"].possiblyEvaluate(new t.EvaluationParameters(f))]}if("composite"===e.iconSizeData.functionType){var d=e.iconSizeData.zoomRange,m=d.min,y=d.max;p.compositeIconSizes=[l["icon-size"].possiblyEvaluate(new t.EvaluationParameters(m)),l["icon-size"].possiblyEvaluate(new t.EvaluationParameters(y))]}p.layoutTextSize=l["text-size"].possiblyEvaluate(new t.EvaluationParameters(e.zoom+1)),p.layoutIconSize=l["icon-size"].possiblyEvaluate(new t.EvaluationParameters(e.zoom+1)),p.textMaxSize=l["text-size"].possiblyEvaluate(new t.EvaluationParameters(18));for(var _=24*u.get("text-line-height"),v="map"===u.get("text-rotation-alignment")&&"point"!==u.get("symbol-placement"),g=u.get("text-keep-upright"),x=0,b=e.features;x<b.length;x+=1){var w=b[x],E=u.get("text-font").evaluate(w,{}).join(","),T=i,A={},z=w.text;if(z){var I=z.toString(),C=u.get("text-offset").evaluate(w,{}).map(function(t){return 24*t}),k=24*u.get("text-letter-spacing").evaluate(w,{}),P=t.allowsLetterSpacing(I)?k:0,M=u.get("text-anchor").evaluate(w,{}),L=u.get("text-justify").evaluate(w,{}),D="point"===u.get("symbol-placement")?24*u.get("text-max-width").evaluate(w,{}):0;A.horizontal=t.shapeText(z,r,E,D,_,M,L,P,C,24,t.WritingMode.horizontal),t.allowsVerticalWritingMode(I)&&v&&g&&(A.vertical=t.shapeText(z,r,E,D,_,M,L,P,C,24,t.WritingMode.vertical))}var B=void 0;if(w.icon){var R=n[w.icon];R&&(B=t.shapeIcon(o[w.icon],u.get("icon-offset").evaluate(w,{}),u.get("icon-anchor").evaluate(w,{})),void 0===e.sdfIcons?e.sdfIcons=R.sdf:e.sdfIcons!==R.sdf&&t.warnOnce("Style sheet warning: Cannot mix SDF and non-SDF icons in one buffer"),R.pixelRatio!==e.pixelRatio?e.iconsNeedLinear=!0:0!==u.get("icon-rotate").constantOr(1)&&(e.iconsNeedLinear=!0))}(A.horizontal||B)&&S(e,w,A,B,T,p)}a&&e.generateCollisionDebugBuffers()}function S(e,r,i,n,o,a){var s=a.layoutTextSize.evaluate(r,{}),c=a.layoutIconSize.evaluate(r,{}),h=a.textMaxSize.evaluate(r,{});void 0===h&&(h=s);var f=e.layers[0].layout,d=f.get("text-offset").evaluate(r,{}),y=f.get("icon-offset").evaluate(r,{}),_=s/24,v=e.tilePixelRatio*_,g=e.tilePixelRatio*h/24,b=e.tilePixelRatio*c,w=e.tilePixelRatio*f.get("symbol-spacing"),E=f.get("text-padding")*e.tilePixelRatio,S=f.get("icon-padding")*e.tilePixelRatio,I=f.get("text-max-angle")/180*Math.PI,C="map"===f.get("text-rotation-alignment")&&"point"!==f.get("symbol-placement"),k="map"===f.get("icon-rotation-alignment")&&"point"!==f.get("symbol-placement"),P=f.get("symbol-placement"),M=w/2,L=function(s,u){u.x<0||u.x>=t.EXTENT||u.y<0||u.y>=t.EXTENT||function(e,r,i,n,o,a,s,u,l,c,h,f,d,m,y,_,v,g,b,w,E){var S,z,I=e.addToLineVertexArray(r,i),C=0,k=0,P=0,M=x(n.horizontal?n.horizontal.text:""),L=[];if(n.horizontal){var D=a.layout.get("text-rotate").evaluate(b,{});S=new p(s,i,r,u,l,c,n.horizontal,h,f,d,e.overscaling,D),k+=A(e,r,n.horizontal,a,d,b,m,I,n.vertical?t.WritingMode.horizontal:t.WritingMode.horizontalOnly,L,w,E),n.vertical&&(P+=A(e,r,n.vertical,a,d,b,m,I,t.WritingMode.vertical,L,w,E))}var B=S?S.boxStartIndex:e.collisionBoxArray.length,R=S?S.boxEndIndex:e.collisionBoxArray.length;if(o){var O=function(e,r,i,n,o,a){var s,u,l,p,c=r.image,h=i.layout,f=r.top-1/c.pixelRatio,d=r.left-1/c.pixelRatio,m=r.bottom+1/c.pixelRatio,y=r.right+1/c.pixelRatio;if("none"!==h.get("icon-text-fit")&&o){var _=y-d,v=m-f,g=h.get("text-size").evaluate(a,{})/24,x=o.left*g,b=o.right*g,w=o.top*g,E=b-x,S=o.bottom*g-w,T=h.get("icon-text-fit-padding")[0],A=h.get("icon-text-fit-padding")[1],z=h.get("icon-text-fit-padding")[2],I=h.get("icon-text-fit-padding")[3],C="width"===h.get("icon-text-fit")?.5*(S-v):0,k="height"===h.get("icon-text-fit")?.5*(E-_):0,P="width"===h.get("icon-text-fit")||"both"===h.get("icon-text-fit")?E:_,M="height"===h.get("icon-text-fit")||"both"===h.get("icon-text-fit")?S:v;s=new t.Point(x+k-I,w+C-T),u=new t.Point(x+k+A+P,w+C-T),l=new t.Point(x+k+A+P,w+C+z+M),p=new t.Point(x+k-I,w+C+z+M)}else s=new t.Point(d,f),u=new t.Point(y,f),l=new t.Point(y,m),p=new t.Point(d,m);var L=i.layout.get("icon-rotate").evaluate(a,{})*Math.PI/180;if(L){var D=Math.sin(L),B=Math.cos(L),R=[B,-D,D,B];s._matMult(R),u._matMult(R),p._matMult(R),l._matMult(R)}return[{tl:s,tr:u,bl:p,br:l,tex:c.paddedRect,writingMode:void 0,glyphOffset:[0,0]}]}(0,o,a,0,n.horizontal,b),F=a.layout.get("icon-rotate").evaluate(b,{});z=new p(s,i,r,u,l,c,o,y,_,!1,e.overscaling,F),C=4*O.length;var U=e.iconSizeData,V=null;"source"===U.functionType?(V=[t.SIZE_PACK_FACTOR*a.layout.get("icon-size").evaluate(b,{})])[0]>T&&t.warnOnce(e.layerIds[0]+': Value for "icon-size" is >= 256. Reduce your "icon-size".'):"composite"===U.functionType&&((V=[t.SIZE_PACK_FACTOR*E.compositeIconSizes[0].evaluate(b,{}),t.SIZE_PACK_FACTOR*E.compositeIconSizes[1].evaluate(b,{})])[0]>T||V[1]>T)&&t.warnOnce(e.layerIds[0]+': Value for "icon-size" is >= 256. Reduce your "icon-size".'),e.addSymbols(e.icon,O,V,g,v,b,!1,r,I.lineStartIndex,I.lineLength)}var N=z?z.boxStartIndex:e.collisionBoxArray.length,j=z?z.boxEndIndex:e.collisionBoxArray.length;e.glyphOffsetArray.length>=t.SymbolBucket.MAX_GLYPHS&&t.warnOnce("Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907"),e.symbolInstances.emplaceBack(r.x,r.y,L.length>0?L[0]:-1,L.length>1?L[1]:-1,M,B,R,N,j,u,k,P,C,0)}(e,u,s,i,n,e.layers[0],e.collisionBoxArray,r.index,r.sourceLayerIndex,e.index,v,E,C,d,b,S,k,y,r,o,a)};if("line"===P)for(var D=0,B=function(e,r,i,n,o){for(var a=[],s=0;s<e.length;s++)for(var u=e[s],l=void 0,p=0;p<u.length-1;p++){var c=u[p],h=u[p+1];c.x<0&&h.x<0||(c.x<0?c=new t.Point(0,c.y+(h.y-c.y)*((0-c.x)/(h.x-c.x)))._round():h.x<0&&(h=new t.Point(0,c.y+(h.y-c.y)*((0-c.x)/(h.x-c.x)))._round()),c.y<0&&h.y<0||(c.y<0?c=new t.Point(c.x+(h.x-c.x)*((0-c.y)/(h.y-c.y)),0)._round():h.y<0&&(h=new t.Point(c.x+(h.x-c.x)*((0-c.y)/(h.y-c.y)),0)._round()),c.x>=n&&h.x>=n||(c.x>=n?c=new t.Point(n,c.y+(h.y-c.y)*((n-c.x)/(h.x-c.x)))._round():h.x>=n&&(h=new t.Point(n,c.y+(h.y-c.y)*((n-c.x)/(h.x-c.x)))._round()),c.y>=o&&h.y>=o||(c.y>=o?c=new t.Point(c.x+(h.x-c.x)*((o-c.y)/(h.y-c.y)),o)._round():h.y>=o&&(h=new t.Point(c.x+(h.x-c.x)*((o-c.y)/(h.y-c.y)),o)._round()),l&&c.equals(l[l.length-1])||(l=[c],a.push(l)),l.push(h)))))}return a}(r.geometry,0,0,t.EXTENT,t.EXTENT);D<B.length;D+=1)for(var R=B[D],O=0,F=l(R,w,I,i.vertical||i.horizontal,n,24,g,e.overscaling,t.EXTENT);O<F.length;O+=1){var U=F[O],V=i.horizontal;V&&z(e,V.text,M,U)||L(R,U)}else if("line-center"===P)for(var N=0,j=r.geometry;N<j.length;N+=1){var q=j[N];if(q.length>1){var Z=u(q,I,i.vertical||i.horizontal,n,24,g);Z&&L(q,Z)}}else if("Polygon"===r.type)for(var G=0,X=t.classifyRings(r.geometry,0);G<X.length;G+=1){var W=X[G],H=m(W,16);L(W[0],new t.Anchor(H.x,H.y,0))}else if("LineString"===r.type)for(var K=0,Y=r.geometry;K<Y.length;K+=1){var J=Y[K];L(J,new t.Anchor(J[0].x,J[0].y,0))}else if("Point"===r.type)for(var $=0,Q=r.geometry;$<Q.length;$+=1)for(var tt=0,et=Q[$];tt<et.length;tt+=1){var rt=et[tt];L([rt],new t.Anchor(rt.x,rt.y,0))}}x.murmur3=b,x.murmur2=w;var T=65535;function A(e,r,i,n,o,a,s,u,l,p,c,h){var f=function(e,r,i,n,o,a){for(var s=i.layout.get("text-rotate").evaluate(o,{})*Math.PI/180,u=i.layout.get("text-offset").evaluate(o,{}).map(function(t){return 24*t}),l=r.positionedGlyphs,p=[],c=0;c<l.length;c++){var h=l[c],f=a[h.fontStack],d=f&&f[h.glyph];if(d){var m=d.rect;if(m){var y=t.GLYPH_PBF_BORDER+1,_=d.metrics.advance*h.scale/2,v=n?[h.x+_,h.y]:[0,0],g=n?[0,0]:[h.x+_+u[0],h.y+u[1]],x=(d.metrics.left-y)*h.scale-_+g[0],b=(-d.metrics.top-y)*h.scale+g[1],w=x+m.w*h.scale,E=b+m.h*h.scale,S=new t.Point(x,b),T=new t.Point(w,b),A=new t.Point(x,E),z=new t.Point(w,E);if(n&&h.vertical){var I=new t.Point(-_,_),C=-Math.PI/2,k=new t.Point(5,0);S._rotateAround(C,I)._add(k),T._rotateAround(C,I)._add(k),A._rotateAround(C,I)._add(k),z._rotateAround(C,I)._add(k)}if(s){var P=Math.sin(s),M=Math.cos(s),L=[M,-P,P,M];S._matMult(L),T._matMult(L),A._matMult(L),z._matMult(L)}p.push({tl:S,tr:T,bl:A,br:z,tex:m,writingMode:r.writingMode,glyphOffset:v})}}}return p}(0,i,n,o,a,c),d=e.textSizeData,m=null;return"source"===d.functionType?(m=[t.SIZE_PACK_FACTOR*n.layout.get("text-size").evaluate(a,{})])[0]>T&&t.warnOnce(e.layerIds[0]+': Value for "text-size" is >= 256. Reduce your "text-size".'):"composite"===d.functionType&&((m=[t.SIZE_PACK_FACTOR*h.compositeTextSizes[0].evaluate(a,{}),t.SIZE_PACK_FACTOR*h.compositeTextSizes[1].evaluate(a,{})])[0]>T||m[1]>T)&&t.warnOnce(e.layerIds[0]+': Value for "text-size" is >= 256. Reduce your "text-size".'),e.addSymbols(e.text,f,m,s,o,a,l,r,u.lineStartIndex,u.lineLength),p.push(e.text.placedSymbolArray.length-1),4*f.length}function z(t,e,r,i){var n=t.compareText;if(e in n){for(var o=n[e],a=o.length-1;a>=0;a--)if(i.dist(o[a])<r)return!0}else n[e]=[];return n[e].push(i),!1}var I=function(e){var r={},i=[];for(var n in e){var o=e[n],a=r[n]={};for(var s in o){var u=o[+s];if(u&&0!==u.bitmap.width&&0!==u.bitmap.height){var l={x:0,y:0,w:u.bitmap.width+2,h:u.bitmap.height+2};i.push(l),a[s]={rect:l,metrics:u.metrics}}}}var p=t.potpack(i),c=p.w,h=p.h,f=new t.AlphaImage({width:c||1,height:h||1});for(var d in e){var m=e[d];for(var y in m){var _=m[+y];if(_&&0!==_.bitmap.width&&0!==_.bitmap.height){var v=r[d][y].rect;t.AlphaImage.copy(_.bitmap,f,{x:0,y:0},{x:v.x+1,y:v.y+1},_.bitmap)}}}this.image=f,this.positions=r};t.register("GlyphAtlas",I);var C=function(e){this.tileID=new t.OverscaledTileID(e.tileID.overscaledZ,e.tileID.wrap,e.tileID.canonical.z,e.tileID.canonical.x,e.tileID.canonical.y),this.uid=e.uid,this.zoom=e.zoom,this.pixelRatio=e.pixelRatio,this.tileSize=e.tileSize,this.source=e.source,this.overscaling=this.tileID.overscaleFactor(),this.showCollisionBoxes=e.showCollisionBoxes,this.collectResourceTiming=!!e.collectResourceTiming,this.returnDependencies=!!e.returnDependencies};function k(e,r){for(var i=new t.EvaluationParameters(r),n=0,o=e;n<o.length;n+=1)o[n].recalculate(i)}C.prototype.parse=function(e,r,i,n){var o=this;this.status="parsing",this.data=e,this.collisionBoxArray=new t.CollisionBoxArray;var a=new t.DictionaryCoder(Object.keys(e.layers).sort()),s=new t.FeatureIndex(this.tileID);s.bucketLayerIDs=[];var u,l,p,c,h={},f={featureIndex:s,iconDependencies:{},patternDependencies:{},glyphDependencies:{}},d=r.familiesBySource[this.source];for(var m in d){var y=e.layers[m];if(y){1===y.version&&t.warnOnce('Vector tile source "'+o.source+'" layer "'+m+'" does not use vector tile spec v2 and therefore may have some rendering errors.');for(var _=a.encode(m),v=[],g=0;g<y.length;g++){var x=y.feature(g);v.push({feature:x,index:g,sourceLayerIndex:_})}for(var b=0,w=d[m];b<w.length;b+=1){var S=w[b],T=S[0];T.minzoom&&o.zoom<Math.floor(T.minzoom)||T.maxzoom&&o.zoom>=T.maxzoom||"none"!==T.visibility&&(k(S,o.zoom),(h[T.id]=T.createBucket({index:s.bucketLayerIDs.length,layers:S,zoom:o.zoom,pixelRatio:o.pixelRatio,overscaling:o.overscaling,collisionBoxArray:o.collisionBoxArray,sourceLayerIndex:_,sourceID:o.source})).populate(v,f),s.bucketLayerIDs.push(S.map(function(t){return t.id})))}}}var A=t.mapObject(f.glyphDependencies,function(t){return Object.keys(t).map(Number)});Object.keys(A).length?i.send("getGlyphs",{uid:this.uid,stacks:A},function(t,e){u||(u=t,l=e,P.call(o))}):l={};var z=Object.keys(f.iconDependencies);z.length?i.send("getImages",{icons:z},function(t,e){u||(u=t,p=e,P.call(o))}):p={};var C=Object.keys(f.patternDependencies);function P(){if(u)return n(u);if(l&&p&&c){var e=new I(l),r=new t.ImageAtlas(p,c);for(var i in h){var o=h[i];o instanceof t.SymbolBucket?(k(o.layers,this.zoom),E(o,l,e.positions,p,r.iconPositions,this.showCollisionBoxes)):o.hasPattern&&(o instanceof t.LineBucket||o instanceof t.FillBucket||o instanceof t.FillExtrusionBucket)&&(k(o.layers,this.zoom),o.addFeatures(f,r.patternPositions))}this.status="done",n(null,{buckets:t.values(h).filter(function(t){return!t.isEmpty()}),featureIndex:s,collisionBoxArray:this.collisionBoxArray,glyphAtlasImage:e.image,imageAtlas:r,glyphMap:this.returnDependencies?l:null,iconMap:this.returnDependencies?p:null,glyphPositions:this.returnDependencies?e.positions:null})}}C.length?i.send("getImages",{icons:C},function(t,e){u||(u=t,c=e,P.call(o))}):c={},P.call(this)};var P="undefined"!=typeof performance,M={getEntriesByName:function(t){return!!(P&&performance&&performance.getEntriesByName)&&performance.getEntriesByName(t)},mark:function(t){return!!(P&&performance&&performance.mark)&&performance.mark(t)},measure:function(t,e,r){return!!(P&&performance&&performance.measure)&&performance.measure(t,e,r)},clearMarks:function(t){return!!(P&&performance&&performance.clearMarks)&&performance.clearMarks(t)},clearMeasures:function(t){return!!(P&&performance&&performance.clearMeasures)&&performance.clearMeasures(t)}},L=function(t){this._marks={start:[t.url,"start"].join("#"),end:[t.url,"end"].join("#"),measure:t.url.toString()},M.mark(this._marks.start)};function D(e,r){var i=t.getArrayBuffer(e.request,function(e,i,n,o){e?r(e):i&&r(null,{vectorTile:new t.mvt.VectorTile(new t.Protobuf(i)),rawData:i,cacheControl:n,expires:o})});return function(){i.cancel(),r()}}L.prototype.finish=function(){M.mark(this._marks.end);var t=M.getEntriesByName(this._marks.measure);return 0===t.length&&(M.measure(this._marks.measure,this._marks.start,this._marks.end),t=M.getEntriesByName(this._marks.measure),M.clearMarks(this._marks.start),M.clearMarks(this._marks.end),M.clearMeasures(this._marks.measure)),t},M.Performance=L;var B=function(t,e,r){this.actor=t,this.layerIndex=e,this.loadVectorData=r||D,this.loading={},this.loaded={}};B.prototype.loadTile=function(e,r){var i=this,n=e.uid;this.loading||(this.loading={});var o=!!(e&&e.request&&e.request.collectResourceTiming)&&new M.Performance(e.request),a=this.loading[n]=new C(e);a.abort=this.loadVectorData(e,function(e,s){if(delete i.loading[n],e||!s)return a.status="done",i.loaded[n]=a,r(e);var u=s.rawData,l={};s.expires&&(l.expires=s.expires),s.cacheControl&&(l.cacheControl=s.cacheControl);var p={};if(o){var c=o.finish();c&&(p.resourceTiming=JSON.parse(JSON.stringify(c)))}a.vectorTile=s.vectorTile,a.parse(s.vectorTile,i.layerIndex,i.actor,function(e,i){if(e||!i)return r(e);r(null,t.extend({rawTileData:u.slice(0)},i,l,p))}),i.loaded=i.loaded||{},i.loaded[n]=a})},B.prototype.reloadTile=function(t,e){var r=this.loaded,i=t.uid,n=this;if(r&&r[i]){var o=r[i];o.showCollisionBoxes=t.showCollisionBoxes;var a=function(t,r){var i=o.reloadCallback;i&&(delete o.reloadCallback,o.parse(o.vectorTile,n.layerIndex,n.actor,i)),e(t,r)};"parsing"===o.status?o.reloadCallback=a:"done"===o.status&&(o.vectorTile?o.parse(o.vectorTile,this.layerIndex,this.actor,a):a())}},B.prototype.abortTile=function(t,e){var r=this.loading,i=t.uid;r&&r[i]&&r[i].abort&&(r[i].abort(),delete r[i]),e()},B.prototype.removeTile=function(t,e){var r=this.loaded,i=t.uid;r&&r[i]&&delete r[i],e()};var R=function(){this.loaded={}};R.prototype.loadTile=function(e,r){var i=e.uid,n=e.encoding,o=e.rawImageData,a=new t.DEMData(i,o,n);this.loaded=this.loaded||{},this.loaded[i]=a,r(null,a)},R.prototype.removeTile=function(t){var e=this.loaded,r=t.uid;e&&e[r]&&delete e[r]};var O={RADIUS:6378137,FLATTENING:1/298.257223563,POLAR_RADIUS:6356752.3142};function F(t){var e=0;if(t&&t.length>0){e+=Math.abs(U(t[0]));for(var r=1;r<t.length;r++)e-=Math.abs(U(t[r]))}return e}function U(t){var e,r,i,n,o,a,s=0,u=t.length;if(u>2){for(a=0;a<u;a++)a===u-2?(i=u-2,n=u-1,o=0):a===u-1?(i=u-1,n=0,o=1):(i=a,n=a+1,o=a+2),e=t[i],r=t[n],s+=(V(t[o][0])-V(e[0]))*Math.sin(V(r[1]));s=s*O.RADIUS*O.RADIUS/2}return s}function V(t){return t*Math.PI/180}var N={geometry:function t(e){var r,i=0;switch(e.type){case"Polygon":return F(e.coordinates);case"MultiPolygon":for(r=0;r<e.coordinates.length;r++)i+=F(e.coordinates[r]);return i;case"Point":case"MultiPoint":case"LineString":case"MultiLineString":return 0;case"GeometryCollection":for(r=0;r<e.geometries.length;r++)i+=t(e.geometries[r]);return i}},ring:U};function j(t,e){return function(r){return t(r,e)}}function q(t,e){e=!!e,t[0]=Z(t[0],e);for(var r=1;r<t.length;r++)t[r]=Z(t[r],!e);return t}function Z(t,e){return function(t){return N.ring(t)>=0}(t)===e?t:t.reverse()}var G=t.mvt.VectorTileFeature.prototype.toGeoJSON,X=function(e){this._feature=e,this.extent=t.EXTENT,this.type=e.type,this.properties=e.tags,"id"in e&&!isNaN(e.id)&&(this.id=parseInt(e.id,10))};X.prototype.loadGeometry=function(){if(1===this._feature.type){for(var e=[],r=0,i=this._feature.geometry;r<i.length;r+=1){var n=i[r];e.push([new t.Point(n[0],n[1])])}return e}for(var o=[],a=0,s=this._feature.geometry;a<s.length;a+=1){for(var u=[],l=0,p=s[a];l<p.length;l+=1){var c=p[l];u.push(new t.Point(c[0],c[1]))}o.push(u)}return o},X.prototype.toGeoJSON=function(t,e,r){return G.call(this,t,e,r)};var W=function(e){this.layers={_geojsonTileLayer:this},this.name="_geojsonTileLayer",this.extent=t.EXTENT,this.length=e.length,this._features=e};W.prototype.feature=function(t){return new X(this._features[t])};var H=t.vectorTile.VectorTileFeature,K=Y;function Y(t,e){this.options=e||{},this.features=t,this.length=t.length}function J(t,e){this.id="number"==typeof t.id?t.id:void 0,this.type=t.type,this.rawGeometry=1===t.type?[t.geometry]:t.geometry,this.properties=t.tags,this.extent=e||4096}Y.prototype.feature=function(t){return new J(this.features[t],this.options.extent)},J.prototype.loadGeometry=function(){var e=this.rawGeometry;this.geometry=[];for(var r=0;r<e.length;r++){for(var i=e[r],n=[],o=0;o<i.length;o++)n.push(new t.Point$1(i[o][0],i[o][1]));this.geometry.push(n)}return this.geometry},J.prototype.bbox=function(){this.geometry||this.loadGeometry();for(var t=this.geometry,e=1/0,r=-1/0,i=1/0,n=-1/0,o=0;o<t.length;o++)for(var a=t[o],s=0;s<a.length;s++){var u=a[s];e=Math.min(e,u.x),r=Math.max(r,u.x),i=Math.min(i,u.y),n=Math.max(n,u.y)}return[e,i,r,n]},J.prototype.toGeoJSON=H.prototype.toGeoJSON;var $=et,Q=et,tt=K;function et(e){var r=new t.pbf;return function(t,e){for(var r in t.layers)e.writeMessage(3,rt,t.layers[r])}(e,r),r.finish()}function rt(t,e){var r;e.writeVarintField(15,t.version||1),e.writeStringField(1,t.name||""),e.writeVarintField(5,t.extent||4096);var i={keys:[],values:[],keycache:{},valuecache:{}};for(r=0;r<t.length;r++)i.feature=t.feature(r),e.writeMessage(2,it,i);var n=i.keys;for(r=0;r<n.length;r++)e.writeStringField(3,n[r]);var o=i.values;for(r=0;r<o.length;r++)e.writeMessage(4,ut,o[r])}function it(t,e){var r=t.feature;void 0!==r.id&&e.writeVarintField(1,r.id),e.writeMessage(2,nt,t),e.writeVarintField(3,r.type),e.writeMessage(4,st,r)}function nt(t,e){var r=t.feature,i=t.keys,n=t.values,o=t.keycache,a=t.valuecache;for(var s in r.properties){var u=o[s];void 0===u&&(i.push(s),u=i.length-1,o[s]=u),e.writeVarint(u);var l=r.properties[s],p=typeof l;"string"!==p&&"boolean"!==p&&"number"!==p&&(l=JSON.stringify(l));var c=p+":"+l,h=a[c];void 0===h&&(n.push(l),h=n.length-1,a[c]=h),e.writeVarint(h)}}function ot(t,e){return(e<<3)+(7&t)}function at(t){return t<<1^t>>31}function st(t,e){for(var r=t.loadGeometry(),i=t.type,n=0,o=0,a=r.length,s=0;s<a;s++){var u=r[s],l=1;1===i&&(l=u.length),e.writeVarint(ot(1,l));for(var p=3===i?u.length-1:u.length,c=0;c<p;c++){1===c&&1!==i&&e.writeVarint(ot(2,p-1));var h=u[c].x-n,f=u[c].y-o;e.writeVarint(at(h)),e.writeVarint(at(f)),n+=h,o+=f}3===i&&e.writeVarint(ot(7,0))}}function ut(t,e){var r=typeof t;"string"===r?e.writeStringField(1,t):"boolean"===r?e.writeBooleanField(7,t):"number"===r&&(t%1!=0?e.writeDoubleField(3,t):t<0?e.writeSVarintField(6,t):e.writeVarintField(5,t))}function lt(t,e,r,i){pt(t,r,i),pt(e,2*r,2*i),pt(e,2*r+1,2*i+1)}function pt(t,e,r){var i=t[e];t[e]=t[r],t[r]=i}function ct(t,e,r,i){var n=t-r,o=e-i;return n*n+o*o}$.fromVectorTileJs=Q,$.fromGeojsonVt=function(t,e){e=e||{};var r={};for(var i in t)r[i]=new K(t[i].features,e),r[i].name=i,r[i].version=e.version,r[i].extent=e.extent;return et({layers:r})},$.GeoJSONWrapper=tt;var ht=function(t){return t[0]},ft=function(t){return t[1]},dt=function(t,e,r,i,n){void 0===e&&(e=ht),void 0===r&&(r=ft),void 0===i&&(i=64),void 0===n&&(n=Float64Array),this.nodeSize=i,this.points=t;for(var o=t.length<65536?Uint16Array:Uint32Array,a=this.ids=new o(t.length),s=this.coords=new n(2*t.length),u=0;u<t.length;u++)a[u]=u,s[2*u]=e(t[u]),s[2*u+1]=r(t[u]);!function t(e,r,i,n,o,a){if(!(o-n<=i)){var s=n+o>>1;!function t(e,r,i,n,o,a){for(;o>n;){if(o-n>600){var s=o-n+1,u=i-n+1,l=Math.log(s),p=.5*Math.exp(2*l/3),c=.5*Math.sqrt(l*p*(s-p)/s)*(u-s/2<0?-1:1);t(e,r,i,Math.max(n,Math.floor(i-u*p/s+c)),Math.min(o,Math.floor(i+(s-u)*p/s+c)),a)}var h=r[2*i+a],f=n,d=o;for(lt(e,r,n,i),r[2*o+a]>h&&lt(e,r,n,o);f<d;){for(lt(e,r,f,d),f++,d--;r[2*f+a]<h;)f++;for(;r[2*d+a]>h;)d--}r[2*n+a]===h?lt(e,r,n,d):lt(e,r,++d,o),d<=i&&(n=d+1),i<=d&&(o=d-1)}}(e,r,s,n,o,a%2),t(e,r,i,n,s-1,a+1),t(e,r,i,s+1,o,a+1)}}(a,s,i,0,a.length-1,0)};dt.prototype.range=function(t,e,r,i){return function(t,e,r,i,n,o,a){for(var s,u,l=[0,t.length-1,0],p=[];l.length;){var c=l.pop(),h=l.pop(),f=l.pop();if(h-f<=a)for(var d=f;d<=h;d++)s=e[2*d],u=e[2*d+1],s>=r&&s<=n&&u>=i&&u<=o&&p.push(t[d]);else{var m=Math.floor((f+h)/2);s=e[2*m],u=e[2*m+1],s>=r&&s<=n&&u>=i&&u<=o&&p.push(t[m]);var y=(c+1)%2;(0===c?r<=s:i<=u)&&(l.push(f),l.push(m-1),l.push(y)),(0===c?n>=s:o>=u)&&(l.push(m+1),l.push(h),l.push(y))}}return p}(this.ids,this.coords,t,e,r,i,this.nodeSize)},dt.prototype.within=function(t,e,r){return function(t,e,r,i,n,o){for(var a=[0,t.length-1,0],s=[],u=n*n;a.length;){var l=a.pop(),p=a.pop(),c=a.pop();if(p-c<=o)for(var h=c;h<=p;h++)ct(e[2*h],e[2*h+1],r,i)<=u&&s.push(t[h]);else{var f=Math.floor((c+p)/2),d=e[2*f],m=e[2*f+1];ct(d,m,r,i)<=u&&s.push(t[f]);var y=(l+1)%2;(0===l?r-n<=d:i-n<=m)&&(a.push(c),a.push(f-1),a.push(y)),(0===l?r+n>=d:i+n>=m)&&(a.push(f+1),a.push(p),a.push(y))}}return s}(this.ids,this.coords,t,e,r,this.nodeSize)};var mt={minZoom:0,maxZoom:16,radius:40,extent:512,nodeSize:64,log:!1,reduce:null,initial:function(){return{}},map:function(t){return t}},yt=function(t){this.options=Et(Object.create(mt),t),this.trees=new Array(this.options.maxZoom+1)};function _t(t,e,r,i,n){return{x:t,y:e,zoom:1/0,id:r,parentId:-1,numPoints:i,properties:n}}function vt(t,e){var r=t.geometry.coordinates,i=r[0],n=r[1];return{x:bt(i),y:wt(n),zoom:1/0,index:e,parentId:-1}}function gt(t){return{type:"Feature",id:t.id,properties:xt(t),geometry:{type:"Point",coordinates:[(i=t.x,360*(i-.5)),(e=t.y,r=(180-360*e)*Math.PI/180,360*Math.atan(Math.exp(r))/Math.PI-90)]}};var e,r,i}function xt(t){var e=t.numPoints,r=e>=1e4?Math.round(e/1e3)+"k":e>=1e3?Math.round(e/100)/10+"k":e;return Et(Et({},t.properties),{cluster:!0,cluster_id:t.id,point_count:e,point_count_abbreviated:r})}function bt(t){return t/360+.5}function wt(t){var e=Math.sin(t*Math.PI/180),r=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return r<0?0:r>1?1:r}function Et(t,e){for(var r in e)t[r]=e[r];return t}function St(t){return t.x}function Tt(t){return t.y}function At(t,e,r,i,n,o){var a=n-r,s=o-i;if(0!==a||0!==s){var u=((t-r)*a+(e-i)*s)/(a*a+s*s);u>1?(r=n,i=o):u>0&&(r+=a*u,i+=s*u)}return(a=t-r)*a+(s=e-i)*s}function zt(t,e,r,i){var n={id:void 0===t?null:t,type:e,geometry:r,tags:i,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};return function(t){var e=t.geometry,r=t.type;if("Point"===r||"MultiPoint"===r||"LineString"===r)It(t,e);else if("Polygon"===r||"MultiLineString"===r)for(var i=0;i<e.length;i++)It(t,e[i]);else if("MultiPolygon"===r)for(i=0;i<e.length;i++)for(var n=0;n<e[i].length;n++)It(t,e[i][n])}(n),n}function It(t,e){for(var r=0;r<e.length;r+=3)t.minX=Math.min(t.minX,e[r]),t.minY=Math.min(t.minY,e[r+1]),t.maxX=Math.max(t.maxX,e[r]),t.maxY=Math.max(t.maxY,e[r+1])}function Ct(t,e,r,i){if(e.geometry){var n=e.geometry.coordinates,o=e.geometry.type,a=Math.pow(r.tolerance/((1<<r.maxZoom)*r.extent),2),s=[],u=e.id;if(r.promoteId?u=e.properties[r.promoteId]:r.generateId&&(u=i||0),"Point"===o)kt(n,s);else if("MultiPoint"===o)for(var l=0;l<n.length;l++)kt(n[l],s);else if("LineString"===o)Pt(n,s,a,!1);else if("MultiLineString"===o){if(r.lineMetrics){for(l=0;l<n.length;l++)s=[],Pt(n[l],s,a,!1),t.push(zt(u,"LineString",s,e.properties));return}Mt(n,s,a,!1)}else if("Polygon"===o)Mt(n,s,a,!0);else{if("MultiPolygon"!==o){if("GeometryCollection"===o){for(l=0;l<e.geometry.geometries.length;l++)Ct(t,{id:u,geometry:e.geometry.geometries[l],properties:e.properties},r,i);return}throw new Error("Input data is not a valid GeoJSON object.")}for(l=0;l<n.length;l++){var p=[];Mt(n[l],p,a,!0),s.push(p)}}t.push(zt(u,o,s,e.properties))}}function kt(t,e){e.push(Lt(t[0])),e.push(Dt(t[1])),e.push(0)}function Pt(t,e,r,i){for(var n,o,a=0,s=0;s<t.length;s++){var u=Lt(t[s][0]),l=Dt(t[s][1]);e.push(u),e.push(l),e.push(0),s>0&&(a+=i?(n*l-u*o)/2:Math.sqrt(Math.pow(u-n,2)+Math.pow(l-o,2))),n=u,o=l}var p=e.length-3;e[2]=1,function t(e,r,i,n){for(var o,a=n,s=i-r>>1,u=i-r,l=e[r],p=e[r+1],c=e[i],h=e[i+1],f=r+3;f<i;f+=3){var d=At(e[f],e[f+1],l,p,c,h);if(d>a)o=f,a=d;else if(d===a){var m=Math.abs(f-s);m<u&&(o=f,u=m)}}a>n&&(o-r>3&&t(e,r,o,n),e[o+2]=a,i-o>3&&t(e,o,i,n))}(e,0,p,r),e[p+2]=1,e.size=Math.abs(a),e.start=0,e.end=e.size}function Mt(t,e,r,i){for(var n=0;n<t.length;n++){var o=[];Pt(t[n],o,r,i),e.push(o)}}function Lt(t){return t/360+.5}function Dt(t){var e=Math.sin(t*Math.PI/180),r=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return r<0?0:r>1?1:r}function Bt(t,e,r,i,n,o,a,s){if(i/=e,o>=(r/=e)&&a<i)return t;if(a<r||o>=i)return null;for(var u=[],l=0;l<t.length;l++){var p=t[l],c=p.geometry,h=p.type,f=0===n?p.minX:p.minY,d=0===n?p.maxX:p.maxY;if(f>=r&&d<i)u.push(p);else if(!(d<r||f>=i)){var m=[];if("Point"===h||"MultiPoint"===h)Rt(c,m,r,i,n);else if("LineString"===h)Ot(c,m,r,i,n,!1,s.lineMetrics);else if("MultiLineString"===h)Ut(c,m,r,i,n,!1);else if("Polygon"===h)Ut(c,m,r,i,n,!0);else if("MultiPolygon"===h)for(var y=0;y<c.length;y++){var _=[];Ut(c[y],_,r,i,n,!0),_.length&&m.push(_)}if(m.length){if(s.lineMetrics&&"LineString"===h){for(y=0;y<m.length;y++)u.push(zt(p.id,h,m[y],p.tags));continue}"LineString"!==h&&"MultiLineString"!==h||(1===m.length?(h="LineString",m=m[0]):h="MultiLineString"),"Point"!==h&&"MultiPoint"!==h||(h=3===m.length?"Point":"MultiPoint"),u.push(zt(p.id,h,m,p.tags))}}}return u.length?u:null}function Rt(t,e,r,i,n){for(var o=0;o<t.length;o+=3){var a=t[o+n];a>=r&&a<=i&&(e.push(t[o]),e.push(t[o+1]),e.push(t[o+2]))}}function Ot(t,e,r,i,n,o,a){for(var s,u,l=Ft(t),p=0===n?Nt:jt,c=t.start,h=0;h<t.length-3;h+=3){var f=t[h],d=t[h+1],m=t[h+2],y=t[h+3],_=t[h+4],v=0===n?f:d,g=0===n?y:_,x=!1;a&&(s=Math.sqrt(Math.pow(f-y,2)+Math.pow(d-_,2))),v<r?g>r&&(u=p(l,f,d,y,_,r),a&&(l.start=c+s*u)):v>i?g<i&&(u=p(l,f,d,y,_,i),a&&(l.start=c+s*u)):Vt(l,f,d,m),g<r&&v>=r&&(u=p(l,f,d,y,_,r),x=!0),g>i&&v<=i&&(u=p(l,f,d,y,_,i),x=!0),!o&&x&&(a&&(l.end=c+s*u),e.push(l),l=Ft(t)),a&&(c+=s)}var b=t.length-3;f=t[b],d=t[b+1],m=t[b+2],(v=0===n?f:d)>=r&&v<=i&&Vt(l,f,d,m),b=l.length-3,o&&b>=3&&(l[b]!==l[0]||l[b+1]!==l[1])&&Vt(l,l[0],l[1],l[2]),l.length&&e.push(l)}function Ft(t){var e=[];return e.size=t.size,e.start=t.start,e.end=t.end,e}function Ut(t,e,r,i,n,o){for(var a=0;a<t.length;a++)Ot(t[a],e,r,i,n,o,!1)}function Vt(t,e,r,i){t.push(e),t.push(r),t.push(i)}function Nt(t,e,r,i,n,o){var a=(o-e)/(i-e);return t.push(o),t.push(r+(n-r)*a),t.push(1),a}function jt(t,e,r,i,n,o){var a=(o-r)/(n-r);return t.push(e+(i-e)*a),t.push(o),t.push(1),a}function qt(t,e){for(var r=[],i=0;i<t.length;i++){var n,o=t[i],a=o.type;if("Point"===a||"MultiPoint"===a||"LineString"===a)n=Zt(o.geometry,e);else if("MultiLineString"===a||"Polygon"===a){n=[];for(var s=0;s<o.geometry.length;s++)n.push(Zt(o.geometry[s],e))}else if("MultiPolygon"===a)for(n=[],s=0;s<o.geometry.length;s++){for(var u=[],l=0;l<o.geometry[s].length;l++)u.push(Zt(o.geometry[s][l],e));n.push(u)}r.push(zt(o.id,a,n,o.tags))}return r}function Zt(t,e){var r=[];r.size=t.size,void 0!==t.start&&(r.start=t.start,r.end=t.end);for(var i=0;i<t.length;i+=3)r.push(t[i]+e,t[i+1],t[i+2]);return r}function Gt(t,e){if(t.transformed)return t;var r,i,n,o=1<<t.z,a=t.x,s=t.y;for(r=0;r<t.features.length;r++){var u=t.features[r],l=u.geometry,p=u.type;if(u.geometry=[],1===p)for(i=0;i<l.length;i+=2)u.geometry.push(Xt(l[i],l[i+1],e,o,a,s));else for(i=0;i<l.length;i++){var c=[];for(n=0;n<l[i].length;n+=2)c.push(Xt(l[i][n],l[i][n+1],e,o,a,s));u.geometry.push(c)}}return t.transformed=!0,t}function Xt(t,e,r,i,n,o){return[Math.round(r*(t*i-n)),Math.round(r*(e*i-o))]}function Wt(t,e,r,i,n){for(var o=e===n.maxZoom?0:n.tolerance/((1<<e)*n.extent),a={features:[],numPoints:0,numSimplified:0,numFeatures:0,source:null,x:r,y:i,z:e,transformed:!1,minX:2,minY:1,maxX:-1,maxY:0},s=0;s<t.length;s++){a.numFeatures++,Ht(a,t[s],o,n);var u=t[s].minX,l=t[s].minY,p=t[s].maxX,c=t[s].maxY;u<a.minX&&(a.minX=u),l<a.minY&&(a.minY=l),p>a.maxX&&(a.maxX=p),c>a.maxY&&(a.maxY=c)}return a}function Ht(t,e,r,i){var n=e.geometry,o=e.type,a=[];if("Point"===o||"MultiPoint"===o)for(var s=0;s<n.length;s+=3)a.push(n[s]),a.push(n[s+1]),t.numPoints++,t.numSimplified++;else if("LineString"===o)Kt(a,n,t,r,!1,!1);else if("MultiLineString"===o||"Polygon"===o)for(s=0;s<n.length;s++)Kt(a,n[s],t,r,"Polygon"===o,0===s);else if("MultiPolygon"===o)for(var u=0;u<n.length;u++){var l=n[u];for(s=0;s<l.length;s++)Kt(a,l[s],t,r,!0,0===s)}if(a.length){var p=e.tags||null;if("LineString"===o&&i.lineMetrics){for(var c in p={},e.tags)p[c]=e.tags[c];p.mapbox_clip_start=n.start/n.size,p.mapbox_clip_end=n.end/n.size}var h={geometry:a,type:"Polygon"===o||"MultiPolygon"===o?3:"LineString"===o||"MultiLineString"===o?2:1,tags:p};null!==e.id&&(h.id=e.id),t.features.push(h)}}function Kt(t,e,r,i,n,o){var a=i*i;if(i>0&&e.size<(n?a:i))r.numPoints+=e.length/3;else{for(var s=[],u=0;u<e.length;u+=3)(0===i||e[u+2]>a)&&(r.numSimplified++,s.push(e[u]),s.push(e[u+1])),r.numPoints++;n&&function(t,e){for(var r=0,i=0,n=t.length,o=n-2;i<n;o=i,i+=2)r+=(t[i]-t[o])*(t[i+1]+t[o+1]);if(r>0===e)for(i=0,n=t.length;i<n/2;i+=2){var a=t[i],s=t[i+1];t[i]=t[n-2-i],t[i+1]=t[n-1-i],t[n-2-i]=a,t[n-1-i]=s}}(s,o),t.push(s)}}function Yt(t,e){var r=(e=this.options=function(t,e){for(var r in e)t[r]=e[r];return t}(Object.create(this.options),e)).debug;if(r&&console.time("preprocess data"),e.maxZoom<0||e.maxZoom>24)throw new Error("maxZoom should be in the 0-24 range");if(e.promoteId&&e.generateId)throw new Error("promoteId and generateId cannot be used together.");var i=function(t,e){var r=[];if("FeatureCollection"===t.type)for(var i=0;i<t.features.length;i++)Ct(r,t.features[i],e,i);else"Feature"===t.type?Ct(r,t,e):Ct(r,{geometry:t},e);return r}(t,e);this.tiles={},this.tileCoords=[],r&&(console.timeEnd("preprocess data"),console.log("index: maxZoom: %d, maxPoints: %d",e.indexMaxZoom,e.indexMaxPoints),console.time("generate tiles"),this.stats={},this.total=0),(i=function(t,e){var r=e.buffer/e.extent,i=t,n=Bt(t,1,-1-r,r,0,-1,2,e),o=Bt(t,1,1-r,2+r,0,-1,2,e);return(n||o)&&(i=Bt(t,1,-r,1+r,0,-1,2,e)||[],n&&(i=qt(n,1).concat(i)),o&&(i=i.concat(qt(o,-1)))),i}(i,e)).length&&this.splitTile(i,0,0,0),r&&(i.length&&console.log("features: %d, points: %d",this.tiles[0].numFeatures,this.tiles[0].numPoints),console.timeEnd("generate tiles"),console.log("tiles generated:",this.total,JSON.stringify(this.stats)))}function Jt(t,e,r){return 32*((1<<t)*r+e)+t}function $t(t,e){var r=t.tileID.canonical;if(!this._geoJSONIndex)return e(null,null);var i=this._geoJSONIndex.getTile(r.z,r.x,r.y);if(!i)return e(null,null);var n=new W(i.features),o=$(n);0===o.byteOffset&&o.byteLength===o.buffer.byteLength||(o=new Uint8Array(o)),e(null,{vectorTile:n,rawData:o.buffer})}yt.prototype.load=function(t){var e=this.options,r=e.log,i=e.minZoom,n=e.maxZoom,o=e.nodeSize;r&&console.time("total time");var a="prepare "+t.length+" points";r&&console.time(a),this.points=t;for(var s=[],u=0;u<t.length;u++)t[u].geometry&&s.push(vt(t[u],u));this.trees[n+1]=new dt(s,St,Tt,o,Float32Array),r&&console.timeEnd(a);for(var l=n;l>=i;l--){var p=+Date.now();s=this._cluster(s,l),this.trees[l]=new dt(s,St,Tt,o,Float32Array),r&&console.log("z%d: %d clusters in %dms",l,s.length,+Date.now()-p)}return r&&console.timeEnd("total time"),this},yt.prototype.getClusters=function(t,e){var r=((t[0]+180)%360+360)%360-180,i=Math.max(-90,Math.min(90,t[1])),n=180===t[2]?180:((t[2]+180)%360+360)%360-180,o=Math.max(-90,Math.min(90,t[3]));if(t[2]-t[0]>=360)r=-180,n=180;else if(r>n){var a=this.getClusters([r,i,180,o],e),s=this.getClusters([-180,i,n,o],e);return a.concat(s)}for(var u=this.trees[this._limitZoom(e)],l=[],p=0,c=u.range(bt(r),wt(o),bt(n),wt(i));p<c.length;p+=1){var h=c[p],f=u.points[h];l.push(f.numPoints?gt(f):this.points[f.index])}return l},yt.prototype.getChildren=function(t){var e=t>>5,r=t%32,i="No cluster with the specified id.",n=this.trees[r];if(!n)throw new Error(i);var o=n.points[e];if(!o)throw new Error(i);for(var a=this.options.radius/(this.options.extent*Math.pow(2,r-1)),s=[],u=0,l=n.within(o.x,o.y,a);u<l.length;u+=1){var p=l[u],c=n.points[p];c.parentId===t&&s.push(c.numPoints?gt(c):this.points[c.index])}if(0===s.length)throw new Error(i);return s},yt.prototype.getLeaves=function(t,e,r){e=e||10,r=r||0;var i=[];return this._appendLeaves(i,t,e,r,0),i},yt.prototype.getTile=function(t,e,r){var i=this.trees[this._limitZoom(t)],n=Math.pow(2,t),o=this.options,a=o.extent,s=o.radius/a,u=(r-s)/n,l=(r+1+s)/n,p={features:[]};return this._addTileFeatures(i.range((e-s)/n,u,(e+1+s)/n,l),i.points,e,r,n,p),0===e&&this._addTileFeatures(i.range(1-s/n,u,1,l),i.points,n,r,n,p),e===n-1&&this._addTileFeatures(i.range(0,u,s/n,l),i.points,-1,r,n,p),p.features.length?p:null},yt.prototype.getClusterExpansionZoom=function(t){for(var e=t%32-1;e<=this.options.maxZoom;){var r=this.getChildren(t);if(e++,1!==r.length)break;t=r[0].properties.cluster_id}return e},yt.prototype._appendLeaves=function(t,e,r,i,n){for(var o=0,a=this.getChildren(e);o<a.length;o+=1){var s=a[o],u=s.properties;if(u&&u.cluster?n+u.point_count<=i?n+=u.point_count:n=this._appendLeaves(t,u.cluster_id,r,i,n):n<i?n++:t.push(s),t.length===r)break}return n},yt.prototype._addTileFeatures=function(t,e,r,i,n,o){for(var a=0,s=t;a<s.length;a+=1){var u=e[s[a]],l={type:1,geometry:[[Math.round(this.options.extent*(u.x*n-r)),Math.round(this.options.extent*(u.y*n-i))]],tags:u.numPoints?xt(u):this.points[u.index].properties},p=u.numPoints?u.id:this.points[u.index].id;void 0!==p&&(l.id=p),o.features.push(l)}},yt.prototype._limitZoom=function(t){return Math.max(this.options.minZoom,Math.min(t,this.options.maxZoom+1))},yt.prototype._cluster=function(t,e){for(var r=[],i=this.options,n=i.radius,o=i.extent,a=i.reduce,s=i.initial,u=n/(o*Math.pow(2,e)),l=0;l<t.length;l++){var p=t[l];if(!(p.zoom<=e)){p.zoom=e;var c=this.trees[e+1],h=c.within(p.x,p.y,u),f=p.numPoints||1,d=p.x*f,m=p.y*f,y=null;a&&(y=s(),this._accumulate(y,p));for(var _=(l<<5)+(e+1),v=0,g=h;v<g.length;v+=1){var x=g[v],b=c.points[x];if(!(b.zoom<=e)){b.zoom=e;var w=b.numPoints||1;d+=b.x*w,m+=b.y*w,f+=w,b.parentId=_,a&&this._accumulate(y,b)}}1===f?r.push(p):(p.parentId=_,r.push(_t(d/f,m/f,_,f,y)))}}return r},yt.prototype._accumulate=function(t,e){var r=this.options,i=r.map;(0,r.reduce)(t,e.numPoints?e.properties:i(this.points[e.index].properties))},Yt.prototype.options={maxZoom:14,indexMaxZoom:5,indexMaxPoints:1e5,tolerance:3,extent:4096,buffer:64,lineMetrics:!1,promoteId:null,generateId:!1,debug:0},Yt.prototype.splitTile=function(t,e,r,i,n,o,a){for(var s=[t,e,r,i],u=this.options,l=u.debug;s.length;){i=s.pop(),r=s.pop(),e=s.pop(),t=s.pop();var p=1<<e,c=Jt(e,r,i),h=this.tiles[c];if(!h&&(l>1&&console.time("creation"),h=this.tiles[c]=Wt(t,e,r,i,u),this.tileCoords.push({z:e,x:r,y:i}),l)){l>1&&(console.log("tile z%d-%d-%d (features: %d, points: %d, simplified: %d)",e,r,i,h.numFeatures,h.numPoints,h.numSimplified),console.timeEnd("creation"));var f="z"+e;this.stats[f]=(this.stats[f]||0)+1,this.total++}if(h.source=t,n){if(e===u.maxZoom||e===n)continue;var d=1<<n-e;if(r!==Math.floor(o/d)||i!==Math.floor(a/d))continue}else if(e===u.indexMaxZoom||h.numPoints<=u.indexMaxPoints)continue;if(h.source=null,0!==t.length){l>1&&console.time("clipping");var m,y,_,v,g,x,b=.5*u.buffer/u.extent,w=.5-b,E=.5+b,S=1+b;m=y=_=v=null,g=Bt(t,p,r-b,r+E,0,h.minX,h.maxX,u),x=Bt(t,p,r+w,r+S,0,h.minX,h.maxX,u),t=null,g&&(m=Bt(g,p,i-b,i+E,1,h.minY,h.maxY,u),y=Bt(g,p,i+w,i+S,1,h.minY,h.maxY,u),g=null),x&&(_=Bt(x,p,i-b,i+E,1,h.minY,h.maxY,u),v=Bt(x,p,i+w,i+S,1,h.minY,h.maxY,u),x=null),l>1&&console.timeEnd("clipping"),s.push(m||[],e+1,2*r,2*i),s.push(y||[],e+1,2*r,2*i+1),s.push(_||[],e+1,2*r+1,2*i),s.push(v||[],e+1,2*r+1,2*i+1)}}},Yt.prototype.getTile=function(t,e,r){var i=this.options,n=i.extent,o=i.debug;if(t<0||t>24)return null;var a=1<<t,s=Jt(t,e=(e%a+a)%a,r);if(this.tiles[s])return Gt(this.tiles[s],n);o>1&&console.log("drilling down to z%d-%d-%d",t,e,r);for(var u,l=t,p=e,c=r;!u&&l>0;)l--,p=Math.floor(p/2),c=Math.floor(c/2),u=this.tiles[Jt(l,p,c)];return u&&u.source?(o>1&&console.log("found parent tile z%d-%d-%d",l,p,c),o>1&&console.time("drilling down"),this.splitTile(u.source,l,p,c,t,e,r),o>1&&console.timeEnd("drilling down"),this.tiles[s]?Gt(this.tiles[s],n):null):null};var Qt=function(e){function r(t,r,i){e.call(this,t,r,$t),i&&(this.loadGeoJSON=i)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.loadData=function(t,e){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),this._pendingCallback=e,this._pendingLoadDataParams=t,this._state&&"Idle"!==this._state?this._state="NeedsLoadData":(this._state="Coalescing",this._loadData())},r.prototype._loadData=function(){var t=this;if(this._pendingCallback&&this._pendingLoadDataParams){var e=this._pendingCallback,r=this._pendingLoadDataParams;delete this._pendingCallback,delete this._pendingLoadDataParams;var i=!!(r&&r.request&&r.request.collectResourceTiming)&&new M.Performance(r.request);this.loadGeoJSON(r,function(n,o){if(n||!o)return e(n);if("object"!=typeof o)return e(new Error("Input data is not a valid GeoJSON object."));!function t(e,r){switch(e&&e.type||null){case"FeatureCollection":return e.features=e.features.map(j(t,r)),e;case"Feature":return e.geometry=t(e.geometry,r),e;case"Polygon":case"MultiPolygon":return function(t,e){return"Polygon"===t.type?t.coordinates=q(t.coordinates,e):"MultiPolygon"===t.type&&(t.coordinates=t.coordinates.map(j(q,e))),t}(e,r);default:return e}}(o,!0);try{t._geoJSONIndex=r.cluster?new yt(r.superclusterOptions).load(o.features):new Yt(o,r.geojsonVtOptions)}catch(n){return e(n)}t.loaded={};var a={};if(i){var s=i.finish();s&&(a.resourceTiming={},a.resourceTiming[r.source]=JSON.parse(JSON.stringify(s)))}e(null,a)})}},r.prototype.coalesce=function(){"Coalescing"===this._state?this._state="Idle":"NeedsLoadData"===this._state&&(this._state="Coalescing",this._loadData())},r.prototype.reloadTile=function(t,r){var i=this.loaded,n=t.uid;return i&&i[n]?e.prototype.reloadTile.call(this,t,r):this.loadTile(t,r)},r.prototype.loadGeoJSON=function(e,r){if(e.request)t.getJSON(e.request,r);else{if("string"!=typeof e.data)return r(new Error("Input data is not a valid GeoJSON object."));try{return r(null,JSON.parse(e.data))}catch(t){return r(new Error("Input data is not a valid GeoJSON object."))}}},r.prototype.removeSource=function(t,e){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),e()},r.prototype.getClusterExpansionZoom=function(t,e){e(null,this._geoJSONIndex.getClusterExpansionZoom(t.clusterId))},r.prototype.getClusterChildren=function(t,e){e(null,this._geoJSONIndex.getChildren(t.clusterId))},r.prototype.getClusterLeaves=function(t,e){e(null,this._geoJSONIndex.getLeaves(t.clusterId,t.limit,t.offset))},r}(B),te=function(e){var r=this;this.self=e,this.actor=new t.Actor(e,this),this.layerIndexes={},this.workerSourceTypes={vector:B,geojson:Qt},this.workerSources={},this.demWorkerSources={},this.self.registerWorkerSource=function(t,e){if(r.workerSourceTypes[t])throw new Error('Worker source with name "'+t+'" already registered.');r.workerSourceTypes[t]=e},this.self.registerRTLTextPlugin=function(e){if(t.plugin.isLoaded())throw new Error("RTL text plugin already registered.");t.plugin.applyArabicShaping=e.applyArabicShaping,t.plugin.processBidirectionalText=e.processBidirectionalText,t.plugin.processStyledBidirectionalText=e.processStyledBidirectionalText}};return te.prototype.setReferrer=function(t,e){this.referrer=e},te.prototype.setLayers=function(t,e,r){this.getLayerIndex(t).replace(e),r()},te.prototype.updateLayers=function(t,e,r){this.getLayerIndex(t).update(e.layers,e.removedIds),r()},te.prototype.loadTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).loadTile(e,r)},te.prototype.loadDEMTile=function(t,e,r){this.getDEMWorkerSource(t,e.source).loadTile(e,r)},te.prototype.reloadTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).reloadTile(e,r)},te.prototype.abortTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).abortTile(e,r)},te.prototype.removeTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).removeTile(e,r)},te.prototype.removeDEMTile=function(t,e){this.getDEMWorkerSource(t,e.source).removeTile(e)},te.prototype.removeSource=function(t,e,r){if(this.workerSources[t]&&this.workerSources[t][e.type]&&this.workerSources[t][e.type][e.source]){var i=this.workerSources[t][e.type][e.source];delete this.workerSources[t][e.type][e.source],void 0!==i.removeSource?i.removeSource(e,r):r()}},te.prototype.loadWorkerSource=function(t,e,r){try{this.self.importScripts(e.url),r()}catch(t){r(t.toString())}},te.prototype.loadRTLTextPlugin=function(e,r,i){try{t.plugin.isLoaded()||(this.self.importScripts(r),i(t.plugin.isLoaded()?null:new Error("RTL Text Plugin failed to import scripts from "+r)))}catch(t){i(t.toString())}},te.prototype.getLayerIndex=function(t){var e=this.layerIndexes[t];return e||(e=this.layerIndexes[t]=new i),e},te.prototype.getWorkerSource=function(t,e,r){var i=this;if(this.workerSources[t]||(this.workerSources[t]={}),this.workerSources[t][e]||(this.workerSources[t][e]={}),!this.workerSources[t][e][r]){var n={send:function(e,r,n){i.actor.send(e,r,n,t)}};this.workerSources[t][e][r]=new this.workerSourceTypes[e](n,this.getLayerIndex(t))}return this.workerSources[t][e][r]},te.prototype.getDEMWorkerSource=function(t,e){return this.demWorkerSources[t]||(this.demWorkerSources[t]={}),this.demWorkerSources[t][e]||(this.demWorkerSources[t][e]=new R),this.demWorkerSources[t][e]},"undefined"!=typeof WorkerGlobalScope&&"undefined"!=typeof self&&self instanceof WorkerGlobalScope&&(self.worker=new te(self)),te}),i(0,function(t){var e=t.createCommonjsModule(function(t){function e(t){return!!("undefined"!=typeof window&&"undefined"!=typeof document&&Array.prototype&&Array.prototype.every&&Array.prototype.filter&&Array.prototype.forEach&&Array.prototype.indexOf&&Array.prototype.lastIndexOf&&Array.prototype.map&&Array.prototype.some&&Array.prototype.reduce&&Array.prototype.reduceRight&&Array.isArray&&Function.prototype&&Function.prototype.bind&&Object.keys&&Object.create&&Object.getPrototypeOf&&Object.getOwnPropertyNames&&Object.isSealed&&Object.isFrozen&&Object.isExtensible&&Object.getOwnPropertyDescriptor&&Object.defineProperty&&Object.defineProperties&&Object.seal&&Object.freeze&&Object.preventExtensions&&"JSON"in window&&"parse"in JSON&&"stringify"in JSON&&function(){if(!("Worker"in window&&"Blob"in window&&"URL"in window))return!1;var t,e,r=new Blob([""],{type:"text/javascript"}),i=URL.createObjectURL(r);try{e=new Worker(i),t=!0}catch(e){t=!1}return e&&e.terminate(),URL.revokeObjectURL(i),t}()&&"Uint8ClampedArray"in window&&ArrayBuffer.isView&&function(t){return void 0===r[t]&&(r[t]=function(t){var r=document.createElement("canvas"),i=Object.create(e.webGLContextAttributes);return i.failIfMajorPerformanceCaveat=t,r.probablySupportsContext?r.probablySupportsContext("webgl",i)||r.probablySupportsContext("experimental-webgl",i):r.supportsContext?r.supportsContext("webgl",i)||r.supportsContext("experimental-webgl",i):r.getContext("webgl",i)||r.getContext("experimental-webgl",i)}(t)),r[t]}(t&&t.failIfMajorPerformanceCaveat))}t.exports?t.exports=e:window&&(window.mapboxgl=window.mapboxgl||{},window.mapboxgl.supported=e);var r={};e.webGLContextAttributes={antialias:!1,alpha:!0,stencil:!0,depth:!0}}),r={create:function(e,r,i){var n=t.window.document.createElement(e);return r&&(n.className=r),i&&i.appendChild(n),n},createNS:function(e,r){return t.window.document.createElementNS(e,r)}},i=t.window.document?t.window.document.documentElement.style:null;function n(t){if(!i)return null;for(var e=0;e<t.length;e++)if(t[e]in i)return t[e];return t[0]}var o,a=n(["userSelect","MozUserSelect","WebkitUserSelect","msUserSelect"]);r.disableDrag=function(){i&&a&&(o=i[a],i[a]="none")},r.enableDrag=function(){i&&a&&(i[a]=o)};var s=n(["transform","WebkitTransform"]);r.setTransform=function(t,e){t.style[s]=e};var u=!1;try{var l=Object.defineProperty({},"passive",{get:function(){u=!0}});t.window.addEventListener("test",l,l),t.window.removeEventListener("test",l,l)}catch(t){u=!1}r.addEventListener=function(t,e,r,i){void 0===i&&(i={}),"passive"in i&&u?t.addEventListener(e,r,i):t.addEventListener(e,r,i.capture)},r.removeEventListener=function(t,e,r,i){void 0===i&&(i={}),"passive"in i&&u?t.removeEventListener(e,r,i):t.removeEventListener(e,r,i.capture)};var p=function(e){e.preventDefault(),e.stopPropagation(),t.window.removeEventListener("click",p,!0)};r.suppressClick=function(){t.window.addEventListener("click",p,!0),t.window.setTimeout(function(){t.window.removeEventListener("click",p,!0)},0)},r.mousePos=function(e,r){var i=e.getBoundingClientRect();return r=r.touches?r.touches[0]:r,new t.Point(r.clientX-i.left-e.clientLeft,r.clientY-i.top-e.clientTop)},r.touchPos=function(e,r){for(var i=e.getBoundingClientRect(),n=[],o="touchend"===r.type?r.changedTouches:r.touches,a=0;a<o.length;a++)n.push(new t.Point(o[a].clientX-i.left-e.clientLeft,o[a].clientY-i.top-e.clientTop));return n},r.mouseButton=function(e){return void 0!==t.window.InstallTrigger&&2===e.button&&e.ctrlKey&&t.window.navigator.platform.toUpperCase().indexOf("MAC")>=0?0:e.button},r.remove=function(t){t.parentNode&&t.parentNode.removeChild(t)};var c=function(){this.images={},this.loaded=!1,this.requestors=[],this.patterns={},this.atlasImage=new t.RGBAImage({width:1,height:1}),this.dirty=!0};c.prototype.isLoaded=function(){return this.loaded},c.prototype.setLoaded=function(t){if(this.loaded!==t&&(this.loaded=t,t)){for(var e=0,r=this.requestors;e<r.length;e+=1){var i=r[e],n=i.ids,o=i.callback;this._notify(n,o)}this.requestors=[]}},c.prototype.getImage=function(t){return this.images[t]},c.prototype.addImage=function(t,e){this.images[t]=e},c.prototype.removeImage=function(t){delete this.images[t],delete this.patterns[t]},c.prototype.listImages=function(){return Object.keys(this.images)},c.prototype.getImages=function(t,e){var r=!0;if(!this.isLoaded())for(var i=0,n=t;i<n.length;i+=1){var o=n[i];this.images[o]||(r=!1)}this.isLoaded()||r?this._notify(t,e):this.requestors.push({ids:t,callback:e})},c.prototype._notify=function(t,e){for(var r={},i=0,n=t;i<n.length;i+=1){var o=n[i],a=this.images[o];a&&(r[o]={data:a.data.clone(),pixelRatio:a.pixelRatio,sdf:a.sdf})}e(null,r)},c.prototype.getPixelSize=function(){var t=this.atlasImage;return{width:t.width,height:t.height}},c.prototype.getPattern=function(e){var r=this.patterns[e];if(r)return r.position;var i=this.getImage(e);if(!i)return null;var n={w:i.data.width+2,h:i.data.height+2,x:0,y:0},o=new t.ImagePosition(n,i);return this.patterns[e]={bin:n,position:o},this._updatePatternAtlas(),o},c.prototype.bind=function(e){var r=e.gl;this.atlasTexture?this.dirty&&(this.atlasTexture.update(this.atlasImage),this.dirty=!1):this.atlasTexture=new t.Texture(e,this.atlasImage,r.RGBA),this.atlasTexture.bind(r.LINEAR,r.CLAMP_TO_EDGE)},c.prototype._updatePatternAtlas=function(){var e=[];for(var r in this.patterns)e.push(this.patterns[r].bin);var i=t.potpack(e),n=i.w,o=i.h,a=this.atlasImage;for(var s in a.resize({width:n||1,height:o||1}),this.patterns){var u=this.patterns[s].bin,l=u.x+1,p=u.y+1,c=this.images[s].data,h=c.width,f=c.height;t.RGBAImage.copy(c,a,{x:0,y:0},{x:l,y:p},{width:h,height:f}),t.RGBAImage.copy(c,a,{x:0,y:f-1},{x:l,y:p-1},{width:h,height:1}),t.RGBAImage.copy(c,a,{x:0,y:0},{x:l,y:p+f},{width:h,height:1}),t.RGBAImage.copy(c,a,{x:h-1,y:0},{x:l-1,y:p},{width:1,height:f}),t.RGBAImage.copy(c,a,{x:0,y:0},{x:l+h,y:p},{width:1,height:f})}this.dirty=!0};var h=d,f=1e20;function d(t,e,r,i,n,o){this.fontSize=t||24,this.buffer=void 0===e?3:e,this.cutoff=i||.25,this.fontFamily=n||"sans-serif",this.fontWeight=o||"normal",this.radius=r||8;var a=this.size=this.fontSize+2*this.buffer;this.canvas=document.createElement("canvas"),this.canvas.width=this.canvas.height=a,this.ctx=this.canvas.getContext("2d"),this.ctx.font=this.fontWeight+" "+this.fontSize+"px "+this.fontFamily,this.ctx.textBaseline="middle",this.ctx.fillStyle="black",this.gridOuter=new Float64Array(a*a),this.gridInner=new Float64Array(a*a),this.f=new Float64Array(a),this.d=new Float64Array(a),this.z=new Float64Array(a+1),this.v=new Int16Array(a),this.middle=Math.round(a/2*(navigator.userAgent.indexOf("Gecko/")>=0?1.2:1))}function m(t,e,r,i,n,o,a){for(var s=0;s<e;s++){for(var u=0;u<r;u++)i[u]=t[u*e+s];for(y(i,n,o,a,r),u=0;u<r;u++)t[u*e+s]=n[u]}for(u=0;u<r;u++){for(s=0;s<e;s++)i[s]=t[u*e+s];for(y(i,n,o,a,e),s=0;s<e;s++)t[u*e+s]=Math.sqrt(n[s])}}function y(t,e,r,i,n){r[0]=0,i[0]=-f,i[1]=+f;for(var o=1,a=0;o<n;o++){for(var s=(t[o]+o*o-(t[r[a]]+r[a]*r[a]))/(2*o-2*r[a]);s<=i[a];)a--,s=(t[o]+o*o-(t[r[a]]+r[a]*r[a]))/(2*o-2*r[a]);r[++a]=o,i[a]=s,i[a+1]=+f}for(o=0,a=0;o<n;o++){for(;i[a+1]<o;)a++;e[o]=(o-r[a])*(o-r[a])+t[r[a]]}}d.prototype.draw=function(t){this.ctx.clearRect(0,0,this.size,this.size),this.ctx.fillText(t,this.buffer,this.middle);for(var e=this.ctx.getImageData(0,0,this.size,this.size),r=new Uint8ClampedArray(this.size*this.size),i=0;i<this.size*this.size;i++){var n=e.data[4*i+3]/255;this.gridOuter[i]=1===n?0:0===n?f:Math.pow(Math.max(0,.5-n),2),this.gridInner[i]=1===n?f:0===n?0:Math.pow(Math.max(0,n-.5),2)}for(m(this.gridOuter,this.size,this.size,this.f,this.d,this.v,this.z),m(this.gridInner,this.size,this.size,this.f,this.d,this.v,this.z),i=0;i<this.size*this.size;i++){var o=this.gridOuter[i]-this.gridInner[i];r[i]=Math.max(0,Math.min(255,Math.round(255-255*(o/this.radius+this.cutoff))))}return r};var _=function(t,e){this.requestTransform=t,this.localIdeographFontFamily=e,this.entries={}};_.prototype.setURL=function(t){this.url=t},_.prototype.getGlyphs=function(e,r){var i=this,n=[];for(var o in e)for(var a=0,s=e[o];a<s.length;a+=1){var u=s[a];n.push({stack:o,id:u})}t.asyncAll(n,function(t,e){var r=t.stack,n=t.id,o=i.entries[r];o||(o=i.entries[r]={glyphs:{},requests:{}});var a=o.glyphs[n];if(void 0===a)if(a=i._tinySDF(o,r,n))e(null,{stack:r,id:n,glyph:a});else{var s=Math.floor(n/256);if(256*s>65535)e(new Error("glyphs > 65535 not supported"));else{var u=o.requests[s];u||(u=o.requests[s]=[],_.loadGlyphRange(r,s,i.url,i.requestTransform,function(t,e){if(e)for(var r in e)o.glyphs[+r]=e[+r];for(var i=0,n=u;i<n.length;i+=1)(0,n[i])(t,e);delete o.requests[s]})),u.push(function(t,i){t?e(t):i&&e(null,{stack:r,id:n,glyph:i[n]||null})})}}else e(null,{stack:r,id:n,glyph:a})},function(t,e){if(t)r(t);else if(e){for(var i={},n=0,o=e;n<o.length;n+=1){var a=o[n],s=a.stack,u=a.id,l=a.glyph;(i[s]||(i[s]={}))[u]=l&&{id:l.id,bitmap:l.bitmap.clone(),metrics:l.metrics}}r(null,i)}})},_.prototype._tinySDF=function(e,r,i){var n=this.localIdeographFontFamily;if(n&&(t.isChar["CJK Unified Ideographs"](i)||t.isChar["Hangul Syllables"](i))){var o=e.tinySDF;if(!o){var a="400";/bold/i.test(r)?a="900":/medium/i.test(r)?a="500":/light/i.test(r)&&(a="200"),o=e.tinySDF=new _.TinySDF(24,3,8,.25,n,a)}return{id:i,bitmap:new t.AlphaImage({width:30,height:30},o.draw(String.fromCharCode(i))),metrics:{width:24,height:24,left:0,top:-8,advance:24}}}},_.loadGlyphRange=function(e,r,i,n,o){var a=256*r,s=a+255,u=n(t.normalizeGlyphsURL(i).replace("{fontstack}",e).replace("{range}",a+"-"+s),t.ResourceType.Glyphs);t.getArrayBuffer(u,function(e,r){if(e)o(e);else if(r){for(var i={},n=0,a=t.parseGlyphPBF(r);n<a.length;n+=1){var s=a[n];i[s.id]=s}o(null,i)}})},_.TinySDF=h;var v=function(){this.specification=t.styleSpec.light.position};v.prototype.possiblyEvaluate=function(e,r){return t.sphericalToCartesian(e.expression.evaluate(r))},v.prototype.interpolate=function(e,r,i){return{x:t.number(e.x,r.x,i),y:t.number(e.y,r.y,i),z:t.number(e.z,r.z,i)}};var g=new t.Properties({anchor:new t.DataConstantProperty(t.styleSpec.light.anchor),position:new v,color:new t.DataConstantProperty(t.styleSpec.light.color),intensity:new t.DataConstantProperty(t.styleSpec.light.intensity)}),x=function(e){function r(r){e.call(this),this._transitionable=new t.Transitionable(g),this.setLight(r),this._transitioning=this._transitionable.untransitioned()}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getLight=function(){return this._transitionable.serialize()},r.prototype.setLight=function(e,r){if(void 0===r&&(r={}),!this._validate(t.validateLight,e,r))for(var i in e){var n=e[i];t.endsWith(i,"-transition")?this._transitionable.setTransition(i.slice(0,-"-transition".length),n):this._transitionable.setValue(i,n)}},r.prototype.updateTransitions=function(t){this._transitioning=this._transitionable.transitioned(t,this._transitioning)},r.prototype.hasTransition=function(){return this._transitioning.hasTransition()},r.prototype.recalculate=function(t){this.properties=this._transitioning.possiblyEvaluate(t)},r.prototype._validate=function(e,r,i){return(!i||!1!==i.validate)&&t.emitValidationErrors(this,e.call(t.validateStyle,t.extend({value:r,style:{glyphs:!0,sprite:!0},styleSpec:t.styleSpec})))},r}(t.Evented),b=function(t,e){this.width=t,this.height=e,this.nextRow=0,this.bytes=4,this.data=new Uint8Array(this.width*this.height*this.bytes),this.positions={}};b.prototype.getDash=function(t,e){var r=t.join(",")+String(e);return this.positions[r]||(this.positions[r]=this.addDash(t,e)),this.positions[r]},b.prototype.addDash=function(e,r){var i=r?7:0,n=2*i+1;if(this.nextRow+n>this.height)return t.warnOnce("LineAtlas out of space"),null;for(var o=0,a=0;a<e.length;a++)o+=e[a];for(var s=this.width/o,u=s/2,l=e.length%2==1,p=-i;p<=i;p++)for(var c=this.nextRow+i+p,h=this.width*c,f=l?-e[e.length-1]:0,d=e[0],m=1,y=0;y<this.width;y++){for(;d<y/s;)f=d,d+=e[m],l&&m===e.length-1&&(d+=e[0]),m++;var _=Math.abs(y-f*s),v=Math.abs(y-d*s),g=Math.min(_,v),x=m%2==1,b=void 0;if(r){var w=i?p/i*(u+1):0;if(x){var E=u-Math.abs(w);b=Math.sqrt(g*g+E*E)}else b=u-Math.sqrt(g*g+w*w)}else b=(x?1:-1)*g;this.data[3+4*(h+y)]=Math.max(0,Math.min(255,b+128))}var S={y:(this.nextRow+i+.5)/this.height,height:2*i/this.height,width:o};return this.nextRow+=n,this.dirty=!0,S},b.prototype.bind=function(t){var e=t.gl;this.texture?(e.bindTexture(e.TEXTURE_2D,this.texture),this.dirty&&(this.dirty=!1,e.texSubImage2D(e.TEXTURE_2D,0,0,0,this.width,this.height,e.RGBA,e.UNSIGNED_BYTE,this.data))):(this.texture=e.createTexture(),e.bindTexture(e.TEXTURE_2D,this.texture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,this.width,this.height,0,e.RGBA,e.UNSIGNED_BYTE,this.data))};var w=function e(r,i){this.workerPool=r,this.actors=[],this.currentActor=0,this.id=t.uniqueId();for(var n=this.workerPool.acquire(this.id),o=0;o<n.length;o++){var a=n[o],s=new e.Actor(a,i,this.id);s.name="Worker "+o,this.actors.push(s)}};function E(e,r,i){var n=function(r,n){if(r)return i(r);if(n){var o=t.pick(n,["tiles","minzoom","maxzoom","attribution","mapbox_logo","bounds"]);n.vector_layers&&(o.vectorLayers=n.vector_layers,o.vectorLayerIds=o.vectorLayers.map(function(t){return t.id})),e.url&&(o.tiles=t.canonicalizeTileset(o,e.url)),i(null,o)}};return e.url?t.getJSON(r(t.normalizeSourceURL(e.url),t.ResourceType.Source),n):t.browser.frame(function(){return n(null,e)})}w.prototype.broadcast=function(e,r,i){i=i||function(){},t.asyncAll(this.actors,function(t,i){t.send(e,r,i)},i)},w.prototype.send=function(t,e,r,i){return("number"!=typeof i||isNaN(i))&&(i=this.currentActor=(this.currentActor+1)%this.actors.length),this.actors[i].send(t,e,r),i},w.prototype.remove=function(){this.actors.forEach(function(t){t.remove()}),this.actors=[],this.workerPool.release(this.id)},w.Actor=t.Actor;var S=function(e,r,i){this.bounds=t.LngLatBounds.convert(this.validateBounds(e)),this.minzoom=r||0,this.maxzoom=i||24};S.prototype.validateBounds=function(t){return Array.isArray(t)&&4===t.length?[Math.max(-180,t[0]),Math.max(-90,t[1]),Math.min(180,t[2]),Math.min(90,t[3])]:[-180,-90,180,90]},S.prototype.contains=function(e){var r=Math.pow(2,e.z),i=Math.floor(t.mercatorXfromLng(this.bounds.getWest())*r),n=Math.floor(t.mercatorYfromLat(this.bounds.getNorth())*r),o=Math.ceil(t.mercatorXfromLng(this.bounds.getEast())*r),a=Math.ceil(t.mercatorYfromLat(this.bounds.getSouth())*r);return e.x>=i&&e.x<o&&e.y>=n&&e.y<a};var T=function(e){function r(r,i,n,o){if(e.call(this),this.id=r,this.dispatcher=n,this.type="vector",this.minzoom=0,this.maxzoom=22,this.scheme="xyz",this.tileSize=512,this.reparseOverscaled=!0,this.isTileClipped=!0,t.extend(this,t.pick(i,["url","scheme","tileSize"])),this._options=t.extend({type:"vector"},i),this._collectResourceTiming=i.collectResourceTiming,512!==this.tileSize)throw new Error("vector tile sources must have a tileSize of 512");this.setEventedParent(o)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this.fire(new t.Event("dataloading",{dataType:"source"})),this._tileJSONRequest=E(this._options,this.map._transformRequest,function(r,i){e._tileJSONRequest=null,r?e.fire(new t.ErrorEvent(r)):i&&(t.extend(e,i),i.bounds&&(e.tileBounds=new S(i.bounds,e.minzoom,e.maxzoom)),t.postTurnstileEvent(i.tiles),t.postMapLoadEvent(i.tiles,e.map._getMapId()),e.fire(new t.Event("data",{dataType:"source",sourceDataType:"metadata"})),e.fire(new t.Event("data",{dataType:"source",sourceDataType:"content"})))})},r.prototype.hasTile=function(t){return!this.tileBounds||this.tileBounds.contains(t.canonical)},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.onRemove=function(){this._tileJSONRequest&&(this._tileJSONRequest.cancel(),this._tileJSONRequest=null)},r.prototype.serialize=function(){return t.extend({},this._options)},r.prototype.loadTile=function(e,r){var i=t.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.url),n={request:this.map._transformRequest(i,t.ResourceType.Tile),uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,tileSize:this.tileSize*e.tileID.overscaleFactor(),type:this.type,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes};function o(t,i){return e.aborted?r(null):t&&404!==t.status?r(t):(i&&i.resourceTiming&&(e.resourceTiming=i.resourceTiming),this.map._refreshExpiredTiles&&i&&e.setExpiryData(i),e.loadVectorData(i,this.map.painter),r(null),void(e.reloadCallback&&(this.loadTile(e,e.reloadCallback),e.reloadCallback=null)))}n.request.collectResourceTiming=this._collectResourceTiming,void 0===e.workerID||"expired"===e.state?e.workerID=this.dispatcher.send("loadTile",n,o.bind(this)):"loading"===e.state?e.reloadCallback=r:this.dispatcher.send("reloadTile",n,o.bind(this),e.workerID)},r.prototype.abortTile=function(t){this.dispatcher.send("abortTile",{uid:t.uid,type:this.type,source:this.id},void 0,t.workerID)},r.prototype.unloadTile=function(t){t.unloadVectorData(),this.dispatcher.send("removeTile",{uid:t.uid,type:this.type,source:this.id},void 0,t.workerID)},r.prototype.hasTransition=function(){return!1},r}(t.Evented),A=function(e){function r(r,i,n,o){e.call(this),this.id=r,this.dispatcher=n,this.setEventedParent(o),this.type="raster",this.minzoom=0,this.maxzoom=22,this.roundZoom=!0,this.scheme="xyz",this.tileSize=512,this._loaded=!1,this._options=t.extend({},i),t.extend(this,t.pick(i,["url","scheme","tileSize"]))}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this.fire(new t.Event("dataloading",{dataType:"source"})),this._tileJSONRequest=E(this._options,this.map._transformRequest,function(r,i){e._tileJSONRequest=null,r?e.fire(new t.ErrorEvent(r)):i&&(t.extend(e,i),i.bounds&&(e.tileBounds=new S(i.bounds,e.minzoom,e.maxzoom)),t.postTurnstileEvent(i.tiles),t.postMapLoadEvent(i.tiles,e.map._getMapId()),e.fire(new t.Event("data",{dataType:"source",sourceDataType:"metadata"})),e.fire(new t.Event("data",{dataType:"source",sourceDataType:"content"})))})},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.onRemove=function(){this._tileJSONRequest&&(this._tileJSONRequest.cancel(),this._tileJSONRequest=null)},r.prototype.serialize=function(){return t.extend({},this._options)},r.prototype.hasTile=function(t){return!this.tileBounds||this.tileBounds.contains(t.canonical)},r.prototype.loadTile=function(e,r){var i=this,n=t.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.url,this.tileSize);e.request=t.getImage(this.map._transformRequest(n,t.ResourceType.Tile),function(n,o){if(delete e.request,e.aborted)e.state="unloaded",r(null);else if(n)e.state="errored",r(n);else if(o){i.map._refreshExpiredTiles&&e.setExpiryData(o),delete o.cacheControl,delete o.expires;var a=i.map.painter.context,s=a.gl;e.texture=i.map.painter.getTileTexture(o.width),e.texture?e.texture.update(o,{useMipmap:!0}):(e.texture=new t.Texture(a,o,s.RGBA,{useMipmap:!0}),e.texture.bind(s.LINEAR,s.CLAMP_TO_EDGE,s.LINEAR_MIPMAP_NEAREST),a.extTextureFilterAnisotropic&&s.texParameterf(s.TEXTURE_2D,a.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,a.extTextureFilterAnisotropicMax)),e.state="loaded",r(null)}})},r.prototype.abortTile=function(t,e){t.request&&(t.request.cancel(),delete t.request),e()},r.prototype.unloadTile=function(t,e){t.texture&&this.map.painter.saveTileTexture(t.texture),e()},r.prototype.hasTransition=function(){return!1},r}(t.Evented),z=function(e){function r(r,i,n,o){e.call(this,r,i,n,o),this.type="raster-dem",this.maxzoom=22,this._options=t.extend({},i),this.encoding=i.encoding||"mapbox"}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.serialize=function(){return{type:"raster-dem",url:this.url,tileSize:this.tileSize,tiles:this.tiles,bounds:this.bounds,encoding:this.encoding}},r.prototype.loadTile=function(e,r){var i=t.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.url,this.tileSize);e.request=t.getImage(this.map._transformRequest(i,t.ResourceType.Tile),function(i,n){if(delete e.request,e.aborted)e.state="unloaded",r(null);else if(i)e.state="errored",r(i);else if(n){this.map._refreshExpiredTiles&&e.setExpiryData(n),delete n.cacheControl,delete n.expires;var o=t.browser.getImageData(n),a={uid:e.uid,coord:e.tileID,source:this.id,rawImageData:o,encoding:this.encoding};e.workerID&&"expired"!==e.state||(e.workerID=this.dispatcher.send("loadDEMTile",a,function(t,i){t&&(e.state="errored",r(t)),i&&(e.dem=i,e.needsHillshadePrepare=!0,e.state="loaded",r(null))}.bind(this)))}}.bind(this)),e.neighboringTiles=this._getNeighboringTiles(e.tileID)},r.prototype._getNeighboringTiles=function(e){var r=e.canonical,i=Math.pow(2,r.z),n=(r.x-1+i)%i,o=0===r.x?e.wrap-1:e.wrap,a=(r.x+1+i)%i,s=r.x+1===i?e.wrap+1:e.wrap,u={};return u[new t.OverscaledTileID(e.overscaledZ,o,r.z,n,r.y).key]={backfilled:!1},u[new t.OverscaledTileID(e.overscaledZ,s,r.z,a,r.y).key]={backfilled:!1},r.y>0&&(u[new t.OverscaledTileID(e.overscaledZ,o,r.z,n,r.y-1).key]={backfilled:!1},u[new t.OverscaledTileID(e.overscaledZ,e.wrap,r.z,r.x,r.y-1).key]={backfilled:!1},u[new t.OverscaledTileID(e.overscaledZ,s,r.z,a,r.y-1).key]={backfilled:!1}),r.y+1<i&&(u[new t.OverscaledTileID(e.overscaledZ,o,r.z,n,r.y+1).key]={backfilled:!1},u[new t.OverscaledTileID(e.overscaledZ,e.wrap,r.z,r.x,r.y+1).key]={backfilled:!1},u[new t.OverscaledTileID(e.overscaledZ,s,r.z,a,r.y+1).key]={backfilled:!1}),u},r.prototype.unloadTile=function(t){t.demTexture&&this.map.painter.saveTileTexture(t.demTexture),t.fbo&&(t.fbo.destroy(),delete t.fbo),t.dem&&delete t.dem,delete t.neighboringTiles,t.state="unloaded",this.dispatcher.send("removeDEMTile",{uid:t.uid,source:this.id},void 0,t.workerID)},r}(A),I=function(e){function r(r,i,n,o){e.call(this),this.id=r,this.type="geojson",this.minzoom=0,this.maxzoom=18,this.tileSize=512,this.isTileClipped=!0,this.reparseOverscaled=!0,this._removed=!1,this.dispatcher=n,this.setEventedParent(o),this._data=i.data,this._options=t.extend({},i),this._collectResourceTiming=i.collectResourceTiming,this._resourceTiming=[],void 0!==i.maxzoom&&(this.maxzoom=i.maxzoom),i.type&&(this.type=i.type),i.attribution&&(this.attribution=i.attribution);var a=t.EXTENT/this.tileSize;this.workerOptions=t.extend({source:this.id,cluster:i.cluster||!1,geojsonVtOptions:{buffer:(void 0!==i.buffer?i.buffer:128)*a,tolerance:(void 0!==i.tolerance?i.tolerance:.375)*a,extent:t.EXTENT,maxZoom:this.maxzoom,lineMetrics:i.lineMetrics||!1,generateId:i.generateId||!1},superclusterOptions:{maxZoom:void 0!==i.clusterMaxZoom?Math.min(i.clusterMaxZoom,this.maxzoom-1):this.maxzoom-1,extent:t.EXTENT,radius:(i.clusterRadius||50)*a,log:!1}},i.workerOptions)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this.fire(new t.Event("dataloading",{dataType:"source"})),this._updateWorkerData(function(r){if(r)e.fire(new t.ErrorEvent(r));else{var i={dataType:"source",sourceDataType:"metadata"};e._collectResourceTiming&&e._resourceTiming&&e._resourceTiming.length>0&&(i.resourceTiming=e._resourceTiming,e._resourceTiming=[]),e.fire(new t.Event("data",i))}})},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.setData=function(e){var r=this;return this._data=e,this.fire(new t.Event("dataloading",{dataType:"source"})),this._updateWorkerData(function(e){if(e)r.fire(new t.ErrorEvent(e));else{var i={dataType:"source",sourceDataType:"content"};r._collectResourceTiming&&r._resourceTiming&&r._resourceTiming.length>0&&(i.resourceTiming=r._resourceTiming,r._resourceTiming=[]),r.fire(new t.Event("data",i))}}),this},r.prototype.getClusterExpansionZoom=function(t,e){return this.dispatcher.send("geojson.getClusterExpansionZoom",{clusterId:t,source:this.id},e,this.workerID),this},r.prototype.getClusterChildren=function(t,e){return this.dispatcher.send("geojson.getClusterChildren",{clusterId:t,source:this.id},e,this.workerID),this},r.prototype.getClusterLeaves=function(t,e,r,i){return this.dispatcher.send("geojson.getClusterLeaves",{source:this.id,clusterId:t,limit:e,offset:r},i,this.workerID),this},r.prototype._updateWorkerData=function(e){var r=this,i=t.extend({},this.workerOptions),n=this._data;"string"==typeof n?(i.request=this.map._transformRequest(t.browser.resolveURL(n),t.ResourceType.Source),i.request.collectResourceTiming=this._collectResourceTiming):i.data=JSON.stringify(n),this.workerID=this.dispatcher.send(this.type+".loadData",i,function(t,n){r._removed||n&&n.abandoned||(r._loaded=!0,n&&n.resourceTiming&&n.resourceTiming[r.id]&&(r._resourceTiming=n.resourceTiming[r.id].slice(0)),r.dispatcher.send(r.type+".coalesce",{source:i.source},null,r.workerID),e(t))},this.workerID)},r.prototype.loadTile=function(e,r){var i=this,n=void 0===e.workerID?"loadTile":"reloadTile",o={type:this.type,uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,maxZoom:this.maxzoom,tileSize:this.tileSize,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes};e.workerID=this.dispatcher.send(n,o,function(t,o){return e.unloadVectorData(),e.aborted?r(null):t?r(t):(e.loadVectorData(o,i.map.painter,"reloadTile"===n),r(null))},this.workerID)},r.prototype.abortTile=function(t){t.aborted=!0},r.prototype.unloadTile=function(t){t.unloadVectorData(),this.dispatcher.send("removeTile",{uid:t.uid,type:this.type,source:this.id},null,t.workerID)},r.prototype.onRemove=function(){this._removed=!0,this.dispatcher.send("removeSource",{type:this.type,source:this.id},null,this.workerID)},r.prototype.serialize=function(){return t.extend({},this._options,{type:this.type,data:this._data})},r.prototype.hasTransition=function(){return!1},r}(t.Evented),C=function(e){function r(t,r,i,n){e.call(this),this.id=t,this.dispatcher=i,this.coordinates=r.coordinates,this.type="image",this.minzoom=0,this.maxzoom=22,this.tileSize=512,this.tiles={},this.setEventedParent(n),this.options=r}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(e,r){var i=this;this.fire(new t.Event("dataloading",{dataType:"source"})),this.url=this.options.url,t.getImage(this.map._transformRequest(this.url,t.ResourceType.Image),function(n,o){n?i.fire(new t.ErrorEvent(n)):o&&(i.image=o,e&&(i.coordinates=e),r&&r(),i._finishLoading())})},r.prototype.updateImage=function(t){var e=this;return this.image&&t.url?(this.options.url=t.url,this.load(t.coordinates,function(){e.texture=null}),this):this},r.prototype._finishLoading=function(){this.map&&(this.setCoordinates(this.coordinates),this.fire(new t.Event("data",{dataType:"source",sourceDataType:"metadata"})))},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.setCoordinates=function(e){var r=this;this.coordinates=e;var i=e.map(t.MercatorCoordinate.fromLngLat);this.tileID=function(e){for(var r=1/0,i=1/0,n=-1/0,o=-1/0,a=0,s=e;a<s.length;a+=1){var u=s[a];r=Math.min(r,u.x),i=Math.min(i,u.y),n=Math.max(n,u.x),o=Math.max(o,u.y)}var l=n-r,p=o-i,c=Math.max(l,p),h=Math.max(0,Math.floor(-Math.log(c)/Math.LN2)),f=Math.pow(2,h);return new t.CanonicalTileID(h,Math.floor((r+n)/2*f),Math.floor((i+o)/2*f))}(i),this.minzoom=this.maxzoom=this.tileID.z;var n=i.map(function(t){return r.tileID.getTilePoint(t)._round()});return this._boundsArray=new t.StructArrayLayout4i8,this._boundsArray.emplaceBack(n[0].x,n[0].y,0,0),this._boundsArray.emplaceBack(n[1].x,n[1].y,t.EXTENT,0),this._boundsArray.emplaceBack(n[3].x,n[3].y,0,t.EXTENT),this._boundsArray.emplaceBack(n[2].x,n[2].y,t.EXTENT,t.EXTENT),this.boundsBuffer&&(this.boundsBuffer.destroy(),delete this.boundsBuffer),this.fire(new t.Event("data",{dataType:"source",sourceDataType:"content"})),this},r.prototype.prepare=function(){if(0!==Object.keys(this.tiles).length&&this.image){var e=this.map.painter.context,r=e.gl;for(var i in this.boundsBuffer||(this.boundsBuffer=e.createVertexBuffer(this._boundsArray,t.rasterBoundsAttributes.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture||(this.texture=new t.Texture(e,this.image,r.RGBA),this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE)),this.tiles){var n=this.tiles[i];"loaded"!==n.state&&(n.state="loaded",n.texture=this.texture)}}},r.prototype.loadTile=function(t,e){this.tileID&&this.tileID.equals(t.tileID.canonical)?(this.tiles[String(t.tileID.wrap)]=t,t.buckets={},e(null)):(t.state="errored",e(null))},r.prototype.serialize=function(){return{type:"image",url:this.options.url,coordinates:this.coordinates}},r.prototype.hasTransition=function(){return!1},r}(t.Evented),k=function(e){function r(t,r,i,n){e.call(this,t,r,i,n),this.roundZoom=!0,this.type="video",this.options=r}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this,r=this.options;this.urls=[];for(var i=0,n=r.urls;i<n.length;i+=1){var o=n[i];e.urls.push(e.map._transformRequest(o,t.ResourceType.Source).url)}t.getVideo(this.urls,function(r,i){r?e.fire(new t.ErrorEvent(r)):i&&(e.video=i,e.video.loop=!0,e.video.addEventListener("playing",function(){e.map.triggerRepaint()}),e.map&&e.video.play(),e._finishLoading())})},r.prototype.getVideo=function(){return this.video},r.prototype.onAdd=function(t){this.map||(this.map=t,this.load(),this.video&&(this.video.play(),this.setCoordinates(this.coordinates)))},r.prototype.prepare=function(){if(!(0===Object.keys(this.tiles).length||this.video.readyState<2)){var e=this.map.painter.context,r=e.gl;for(var i in this.boundsBuffer||(this.boundsBuffer=e.createVertexBuffer(this._boundsArray,t.rasterBoundsAttributes.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?this.video.paused||(this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE),r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,r.UNSIGNED_BYTE,this.video)):(this.texture=new t.Texture(e,this.video,r.RGBA),this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE)),this.tiles){var n=this.tiles[i];"loaded"!==n.state&&(n.state="loaded",n.texture=this.texture)}}},r.prototype.serialize=function(){return{type:"video",urls:this.urls,coordinates:this.coordinates}},r.prototype.hasTransition=function(){return this.video&&!this.video.paused},r}(C),P=function(e){function r(r,i,n,o){e.call(this,r,i,n,o),i.coordinates?Array.isArray(i.coordinates)&&4===i.coordinates.length&&!i.coordinates.some(function(t){return!Array.isArray(t)||2!==t.length||t.some(function(t){return"number"!=typeof t})})||this.fire(new t.ErrorEvent(new t.ValidationError("sources."+r,null,'"coordinates" property must be an array of 4 longitude/latitude array pairs'))):this.fire(new t.ErrorEvent(new t.ValidationError("sources."+r,null,'missing required property "coordinates"'))),i.animate&&"boolean"!=typeof i.animate&&this.fire(new t.ErrorEvent(new t.ValidationError("sources."+r,null,'optional "animate" property must be a boolean value'))),i.canvas?"string"==typeof i.canvas||i.canvas instanceof t.window.HTMLCanvasElement||this.fire(new t.ErrorEvent(new t.ValidationError("sources."+r,null,'"canvas" must be either a string representing the ID of the canvas element from which to read, or an HTMLCanvasElement instance'))):this.fire(new t.ErrorEvent(new t.ValidationError("sources."+r,null,'missing required property "canvas"'))),this.options=i,this.animate=void 0===i.animate||i.animate}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){this.canvas||(this.canvas=this.options.canvas instanceof t.window.HTMLCanvasElement?this.options.canvas:t.window.document.getElementById(this.options.canvas)),this.width=this.canvas.width,this.height=this.canvas.height,this._hasInvalidDimensions()?this.fire(new t.ErrorEvent(new Error("Canvas dimensions cannot be less than or equal to zero."))):(this.play=function(){this._playing=!0,this.map.triggerRepaint()},this.pause=function(){this._playing=!1},this._finishLoading())},r.prototype.getCanvas=function(){return this.canvas},r.prototype.onAdd=function(t){this.map=t,this.load(),this.canvas&&this.animate&&this.play()},r.prototype.onRemove=function(){this.pause()},r.prototype.prepare=function(){var e=!1;if(this.canvas.width!==this.width&&(this.width=this.canvas.width,e=!0),this.canvas.height!==this.height&&(this.height=this.canvas.height,e=!0),!this._hasInvalidDimensions()&&0!==Object.keys(this.tiles).length){var r=this.map.painter.context,i=r.gl;for(var n in this.boundsBuffer||(this.boundsBuffer=r.createVertexBuffer(this._boundsArray,t.rasterBoundsAttributes.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?(e||this._playing)&&this.texture.update(this.canvas,{premultiply:!0}):this.texture=new t.Texture(r,this.canvas,i.RGBA,{premultiply:!0}),this.tiles){var o=this.tiles[n];"loaded"!==o.state&&(o.state="loaded",o.texture=this.texture)}}},r.prototype.serialize=function(){return{type:"canvas",coordinates:this.coordinates}},r.prototype.hasTransition=function(){return this._playing},r.prototype._hasInvalidDimensions=function(){for(var t=0,e=[this.canvas.width,this.canvas.height];t<e.length;t+=1){var r=e[t];if(isNaN(r)||r<=0)return!0}return!1},r}(C),M={vector:T,raster:A,"raster-dem":z,geojson:I,video:k,image:C,canvas:P},L=function(e,r,i,n){var o=new M[r.type](e,r,i,n);if(o.id!==e)throw new Error("Expected Source id to be "+e+" instead of "+o.id);return t.bindAll(["load","abort","unload","serialize","prepare"],o),o};function D(t,e,r,i,n){var o=n.maxPitchScaleFactor(),a=t.tilesIn(r,o);a.sort(B);for(var s=[],u=0,l=a;u<l.length;u+=1){var p=l[u];s.push({wrappedTileID:p.tileID.wrapped().key,queryResults:p.tile.queryRenderedFeatures(e,t._state,p.queryGeometry,p.scale,i,n,o,t.transform.calculatePosMatrix(p.tileID.toUnwrapped()))})}var c=function(t){for(var e={},r={},i=0,n=t;i<n.length;i+=1){var o=n[i],a=o.queryResults,s=o.wrappedTileID,u=r[s]=r[s]||{};for(var l in a)for(var p=a[l],c=u[l]=u[l]||{},h=e[l]=e[l]||[],f=0,d=p;f<d.length;f+=1){var m=d[f];c[m.featureIndex]||(c[m.featureIndex]=!0,h.push(m.feature))}}return e}(s);for(var h in c)c[h].forEach(function(e){var r=t.getFeatureState(e.layer["source-layer"],e.id);e.source=e.layer.source,e.layer["source-layer"]&&(e.sourceLayer=e.layer["source-layer"]),e.state=r});return c}function B(t,e){var r=t.tileID,i=e.tileID;return r.overscaledZ-i.overscaledZ||r.canonical.y-i.canonical.y||r.wrap-i.wrap||r.canonical.x-i.canonical.x}var R=function(t,e){this.max=t,this.onRemove=e,this.reset()};R.prototype.reset=function(){for(var t in this.data)for(var e=0,r=this.data[t];e<r.length;e+=1){var i=r[e];i.timeout&&clearTimeout(i.timeout),this.onRemove(i.value)}return this.data={},this.order=[],this},R.prototype.add=function(t,e,r){var i=this,n=t.wrapped().key;void 0===this.data[n]&&(this.data[n]=[]);var o={value:e,timeout:void 0};if(void 0!==r&&(o.timeout=setTimeout(function(){i.remove(t,o)},r)),this.data[n].push(o),this.order.push(n),this.order.length>this.max){var a=this._getAndRemoveByKey(this.order[0]);a&&this.onRemove(a)}return this},R.prototype.has=function(t){return t.wrapped().key in this.data},R.prototype.getAndRemove=function(t){return this.has(t)?this._getAndRemoveByKey(t.wrapped().key):null},R.prototype._getAndRemoveByKey=function(t){var e=this.data[t].shift();return e.timeout&&clearTimeout(e.timeout),0===this.data[t].length&&delete this.data[t],this.order.splice(this.order.indexOf(t),1),e.value},R.prototype.get=function(t){return this.has(t)?this.data[t.wrapped().key][0].value:null},R.prototype.remove=function(t,e){if(!this.has(t))return this;var r=t.wrapped().key,i=void 0===e?0:this.data[r].indexOf(e),n=this.data[r][i];return this.data[r].splice(i,1),n.timeout&&clearTimeout(n.timeout),0===this.data[r].length&&delete this.data[r],this.onRemove(n.value),this.order.splice(this.order.indexOf(r),1),this},R.prototype.setMaxSize=function(t){for(this.max=t;this.order.length>this.max;){var e=this._getAndRemoveByKey(this.order[0]);e&&this.onRemove(e)}return this};var O=function(t,e,r){this.context=t;var i=t.gl;this.buffer=i.createBuffer(),this.dynamicDraw=Boolean(r),this.context.unbindVAO(),t.bindElementBuffer.set(this.buffer),i.bufferData(i.ELEMENT_ARRAY_BUFFER,e.arrayBuffer,this.dynamicDraw?i.DYNAMIC_DRAW:i.STATIC_DRAW),this.dynamicDraw||delete e.arrayBuffer};O.prototype.bind=function(){this.context.bindElementBuffer.set(this.buffer)},O.prototype.updateData=function(t){var e=this.context.gl;this.context.unbindVAO(),this.bind(),e.bufferSubData(e.ELEMENT_ARRAY_BUFFER,0,t.arrayBuffer)},O.prototype.destroy=function(){var t=this.context.gl;this.buffer&&(t.deleteBuffer(this.buffer),delete this.buffer)};var F={Int8:"BYTE",Uint8:"UNSIGNED_BYTE",Int16:"SHORT",Uint16:"UNSIGNED_SHORT",Int32:"INT",Uint32:"UNSIGNED_INT",Float32:"FLOAT"},U=function(t,e,r,i){this.length=e.length,this.attributes=r,this.itemSize=e.bytesPerElement,this.dynamicDraw=i,this.context=t;var n=t.gl;this.buffer=n.createBuffer(),t.bindVertexBuffer.set(this.buffer),n.bufferData(n.ARRAY_BUFFER,e.arrayBuffer,this.dynamicDraw?n.DYNAMIC_DRAW:n.STATIC_DRAW),this.dynamicDraw||delete e.arrayBuffer};U.prototype.bind=function(){this.context.bindVertexBuffer.set(this.buffer)},U.prototype.updateData=function(t){var e=this.context.gl;this.bind(),e.bufferSubData(e.ARRAY_BUFFER,0,t.arrayBuffer)},U.prototype.enableAttributes=function(t,e){for(var r=0;r<this.attributes.length;r++){var i=this.attributes[r],n=e.attributes[i.name];void 0!==n&&t.enableVertexAttribArray(n)}},U.prototype.setVertexAttribPointers=function(t,e,r){for(var i=0;i<this.attributes.length;i++){var n=this.attributes[i],o=e.attributes[n.name];void 0!==o&&t.vertexAttribPointer(o,n.components,t[F[n.type]],!1,this.itemSize,n.offset+this.itemSize*(r||0))}},U.prototype.destroy=function(){var t=this.context.gl;this.buffer&&(t.deleteBuffer(this.buffer),delete this.buffer)};var V=function(t){this.gl=t.gl,this.default=this.getDefault(),this.current=this.default,this.dirty=!1};V.prototype.get=function(){return this.current},V.prototype.set=function(t){},V.prototype.getDefault=function(){return this.default},V.prototype.setDefault=function(){this.set(this.default)};var N=function(e){function r(){e.apply(this,arguments)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getDefault=function(){return t.Color.transparent},r.prototype.set=function(t){var e=this.current;(t.r!==e.r||t.g!==e.g||t.b!==e.b||t.a!==e.a||this.dirty)&&(this.gl.clearColor(t.r,t.g,t.b,t.a),this.current=t,this.dirty=!1)},r}(V),j=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 1},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.clearDepth(t),this.current=t,this.dirty=!1)},e}(V),q=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.clearStencil(t),this.current=t,this.dirty=!1)},e}(V),Z=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return[!0,!0,!0,!0]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||t[3]!==e[3]||this.dirty)&&(this.gl.colorMask(t[0],t[1],t[2],t[3]),this.current=t,this.dirty=!1)},e}(V),G=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.depthMask(t),this.current=t,this.dirty=!1)},e}(V),X=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 255},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.stencilMask(t),this.current=t,this.dirty=!1)},e}(V),W=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return{func:this.gl.ALWAYS,ref:0,mask:255}},e.prototype.set=function(t){var e=this.current;(t.func!==e.func||t.ref!==e.ref||t.mask!==e.mask||this.dirty)&&(this.gl.stencilFunc(t.func,t.ref,t.mask),this.current=t,this.dirty=!1)},e}(V),H=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[t.KEEP,t.KEEP,t.KEEP]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||this.dirty)&&(this.gl.stencilOp(t[0],t[1],t[2]),this.current=t,this.dirty=!1)},e}(V),K=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.STENCIL_TEST):e.disable(e.STENCIL_TEST),this.current=t,this.dirty=!1}},e}(V),Y=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return[0,1]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||this.dirty)&&(this.gl.depthRange(t[0],t[1]),this.current=t,this.dirty=!1)},e}(V),J=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.DEPTH_TEST):e.disable(e.DEPTH_TEST),this.current=t,this.dirty=!1}},e}(V),$=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.LESS},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.depthFunc(t),this.current=t,this.dirty=!1)},e}(V),Q=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.BLEND):e.disable(e.BLEND),this.current=t,this.dirty=!1}},e}(V),tt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[t.ONE,t.ZERO]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||this.dirty)&&(this.gl.blendFunc(t[0],t[1]),this.current=t,this.dirty=!1)},e}(V),et=function(e){function r(){e.apply(this,arguments)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getDefault=function(){return t.Color.transparent},r.prototype.set=function(t){var e=this.current;(t.r!==e.r||t.g!==e.g||t.b!==e.b||t.a!==e.a||this.dirty)&&(this.gl.blendColor(t.r,t.g,t.b,t.a),this.current=t,this.dirty=!1)},r}(V),rt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.FUNC_ADD},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.blendEquation(t),this.current=t,this.dirty=!1)},e}(V),it=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.CULL_FACE):e.disable(e.CULL_FACE),this.current=t,this.dirty=!1}},e}(V),nt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.BACK},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.cullFace(t),this.current=t,this.dirty=!1)},e}(V),ot=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.CCW},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.frontFace(t),this.current=t,this.dirty=!1)},e}(V),at=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.useProgram(t),this.current=t,this.dirty=!1)},e}(V),st=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.TEXTURE0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.activeTexture(t),this.current=t,this.dirty=!1)},e}(V),ut=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[0,0,t.drawingBufferWidth,t.drawingBufferHeight]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||t[3]!==e[3]||this.dirty)&&(this.gl.viewport(t[0],t[1],t[2],t[3]),this.current=t,this.dirty=!1)},e}(V),lt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindFramebuffer(e.FRAMEBUFFER,t),this.current=t,this.dirty=!1}},e}(V),pt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindRenderbuffer(e.RENDERBUFFER,t),this.current=t,this.dirty=!1}},e}(V),ct=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindTexture(e.TEXTURE_2D,t),this.current=t,this.dirty=!1}},e}(V),ht=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindBuffer(e.ARRAY_BUFFER,t),this.current=t,this.dirty=!1}},e}(V),ft=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){var e=this.gl;e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t),this.current=t,this.dirty=!1},e}(V),dt=function(t){function e(e){t.call(this,e),this.vao=e.extVertexArrayObject}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){this.vao&&(t!==this.current||this.dirty)&&(this.vao.bindVertexArrayOES(t),this.current=t,this.dirty=!1)},e}(V),mt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 4},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_ALIGNMENT,t),this.current=t,this.dirty=!1}},e}(V),yt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t),this.current=t,this.dirty=!1}},e}(V),_t=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,t),this.current=t,this.dirty=!1}},e}(V),vt=function(t){function e(e,r){t.call(this,e),this.context=e,this.parent=r}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e}(V),gt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setDirty=function(){this.dirty=!0},e.prototype.set=function(t){if(t!==this.current||this.dirty){this.context.bindFramebuffer.set(this.parent);var e=this.gl;e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0),this.current=t,this.dirty=!1}},e}(vt),xt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){if(t!==this.current||this.dirty){this.context.bindFramebuffer.set(this.parent);var e=this.gl;e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,t),this.current=t,this.dirty=!1}},e}(vt),bt=function(t,e,r){this.context=t,this.width=e,this.height=r;var i=t.gl,n=this.framebuffer=i.createFramebuffer();this.colorAttachment=new gt(t,n),this.depthAttachment=new xt(t,n)};bt.prototype.destroy=function(){var t=this.context.gl,e=this.colorAttachment.get();e&&t.deleteTexture(e);var r=this.depthAttachment.get();r&&t.deleteRenderbuffer(r),t.deleteFramebuffer(this.framebuffer)};var wt=function(t,e,r){this.func=t,this.mask=e,this.range=r};wt.ReadOnly=!1,wt.ReadWrite=!0,wt.disabled=new wt(519,wt.ReadOnly,[0,1]);var Et=function(t,e,r,i,n,o){this.test=t,this.ref=e,this.mask=r,this.fail=i,this.depthFail=n,this.pass=o};Et.disabled=new Et({func:519,mask:0},0,0,7680,7680,7680);var St=function(t,e,r){this.blendFunction=t,this.blendColor=e,this.mask=r};St.disabled=new St(St.Replace=[1,0],t.Color.transparent,[!1,!1,!1,!1]),St.unblended=new St(St.Replace,t.Color.transparent,[!0,!0,!0,!0]),St.alphaBlended=new St([1,771],t.Color.transparent,[!0,!0,!0,!0]);var Tt=function(t,e,r){this.enable=t,this.mode=e,this.frontFace=r};Tt.disabled=new Tt(!1,1029,2305),Tt.backCCW=new Tt(!0,1029,2305);var At=function(t){this.gl=t,this.extVertexArrayObject=this.gl.getExtension("OES_vertex_array_object"),this.clearColor=new N(this),this.clearDepth=new j(this),this.clearStencil=new q(this),this.colorMask=new Z(this),this.depthMask=new G(this),this.stencilMask=new X(this),this.stencilFunc=new W(this),this.stencilOp=new H(this),this.stencilTest=new K(this),this.depthRange=new Y(this),this.depthTest=new J(this),this.depthFunc=new $(this),this.blend=new Q(this),this.blendFunc=new tt(this),this.blendColor=new et(this),this.blendEquation=new rt(this),this.cullFace=new it(this),this.cullFaceSide=new nt(this),this.frontFace=new ot(this),this.program=new at(this),this.activeTexture=new st(this),this.viewport=new ut(this),this.bindFramebuffer=new lt(this),this.bindRenderbuffer=new pt(this),this.bindTexture=new ct(this),this.bindVertexBuffer=new ht(this),this.bindElementBuffer=new ft(this),this.bindVertexArrayOES=this.extVertexArrayObject&&new dt(this),this.pixelStoreUnpack=new mt(this),this.pixelStoreUnpackPremultiplyAlpha=new yt(this),this.pixelStoreUnpackFlipY=new _t(this),this.extTextureFilterAnisotropic=t.getExtension("EXT_texture_filter_anisotropic")||t.getExtension("MOZ_EXT_texture_filter_anisotropic")||t.getExtension("WEBKIT_EXT_texture_filter_anisotropic"),this.extTextureFilterAnisotropic&&(this.extTextureFilterAnisotropicMax=t.getParameter(this.extTextureFilterAnisotropic.MAX_TEXTURE_MAX_ANISOTROPY_EXT)),this.extTextureHalfFloat=t.getExtension("OES_texture_half_float"),this.extTextureHalfFloat&&t.getExtension("OES_texture_half_float_linear")};At.prototype.setDirty=function(){this.clearColor.dirty=!0,this.clearDepth.dirty=!0,this.clearStencil.dirty=!0,this.colorMask.dirty=!0,this.depthMask.dirty=!0,this.stencilMask.dirty=!0,this.stencilFunc.dirty=!0,this.stencilOp.dirty=!0,this.stencilTest.dirty=!0,this.depthRange.dirty=!0,this.depthTest.dirty=!0,this.depthFunc.dirty=!0,this.blend.dirty=!0,this.blendFunc.dirty=!0,this.blendColor.dirty=!0,this.blendEquation.dirty=!0,this.cullFace.dirty=!0,this.cullFaceSide.dirty=!0,this.frontFace.dirty=!0,this.program.dirty=!0,this.activeTexture.dirty=!0,this.viewport.dirty=!0,this.bindFramebuffer.dirty=!0,this.bindRenderbuffer.dirty=!0,this.bindTexture.dirty=!0,this.bindVertexBuffer.dirty=!0,this.bindElementBuffer.dirty=!0,this.extVertexArrayObject&&(this.bindVertexArrayOES.dirty=!0),this.pixelStoreUnpack.dirty=!0,this.pixelStoreUnpackPremultiplyAlpha.dirty=!0,this.pixelStoreUnpackFlipY.dirty=!0},At.prototype.createIndexBuffer=function(t,e){return new O(this,t,e)},At.prototype.createVertexBuffer=function(t,e,r){return new U(this,t,e,r)},At.prototype.createRenderbuffer=function(t,e,r){var i=this.gl,n=i.createRenderbuffer();return this.bindRenderbuffer.set(n),i.renderbufferStorage(i.RENDERBUFFER,t,e,r),this.bindRenderbuffer.set(null),n},At.prototype.createFramebuffer=function(t,e){return new bt(this,t,e)},At.prototype.clear=function(t){var e=t.color,r=t.depth,i=this.gl,n=0;e&&(n|=i.COLOR_BUFFER_BIT,this.clearColor.set(e),this.colorMask.set([!0,!0,!0,!0])),void 0!==r&&(n|=i.DEPTH_BUFFER_BIT,this.depthRange.set([0,1]),this.clearDepth.set(r),this.depthMask.set(!0)),i.clear(n)},At.prototype.setCullFace=function(t){!1===t.enable?this.cullFace.set(!1):(this.cullFace.set(!0),this.cullFaceSide.set(t.mode),this.frontFace.set(t.frontFace))},At.prototype.setDepthMode=function(t){t.func!==this.gl.ALWAYS||t.mask?(this.depthTest.set(!0),this.depthFunc.set(t.func),this.depthMask.set(t.mask),this.depthRange.set(t.range)):this.depthTest.set(!1)},At.prototype.setStencilMode=function(t){t.test.func!==this.gl.ALWAYS||t.mask?(this.stencilTest.set(!0),this.stencilMask.set(t.mask),this.stencilOp.set([t.fail,t.depthFail,t.pass]),this.stencilFunc.set({func:t.test.func,ref:t.ref,mask:t.test.mask})):this.stencilTest.set(!1)},At.prototype.setColorMode=function(e){t.isEqual(e.blendFunction,St.Replace)?this.blend.set(!1):(this.blend.set(!0),this.blendFunc.set(e.blendFunction),this.blendColor.set(e.blendColor)),this.colorMask.set(e.mask)},At.prototype.unbindVAO=function(){this.extVertexArrayObject&&this.bindVertexArrayOES.set(null)};var zt=function(e){function r(r,i,n){var o=this;e.call(this),this.id=r,this.dispatcher=n,this.on("data",function(t){"source"===t.dataType&&"metadata"===t.sourceDataType&&(o._sourceLoaded=!0),o._sourceLoaded&&!o._paused&&"source"===t.dataType&&"content"===t.sourceDataType&&(o.reload(),o.transform&&o.update(o.transform))}),this.on("error",function(){o._sourceErrored=!0}),this._source=L(r,i,n,this),this._tiles={},this._cache=new R(0,this._unloadTile.bind(this)),this._timers={},this._cacheTimers={},this._maxTileCacheSize=null,this._coveredTiles={},this._state=new t.SourceFeatureState}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.onAdd=function(t){this.map=t,this._maxTileCacheSize=t?t._maxTileCacheSize:null,this._source&&this._source.onAdd&&this._source.onAdd(t)},r.prototype.onRemove=function(t){this._source&&this._source.onRemove&&this._source.onRemove(t)},r.prototype.loaded=function(){if(this._sourceErrored)return!0;if(!this._sourceLoaded)return!1;for(var t in this._tiles){var e=this._tiles[t];if("loaded"!==e.state&&"errored"!==e.state)return!1}return!0},r.prototype.getSource=function(){return this._source},r.prototype.pause=function(){this._paused=!0},r.prototype.resume=function(){if(this._paused){var t=this._shouldReloadOnResume;this._paused=!1,this._shouldReloadOnResume=!1,t&&this.reload(),this.transform&&this.update(this.transform)}},r.prototype._loadTile=function(t,e){return this._source.loadTile(t,e)},r.prototype._unloadTile=function(t){if(this._source.unloadTile)return this._source.unloadTile(t,function(){})},r.prototype._abortTile=function(t){if(this._source.abortTile)return this._source.abortTile(t,function(){})},r.prototype.serialize=function(){return this._source.serialize()},r.prototype.prepare=function(t){for(var e in this._source.prepare&&this._source.prepare(),this._state.coalesceChanges(this._tiles,this.map?this.map.painter:null),this._tiles)this._tiles[e].upload(t)},r.prototype.getIds=function(){return Object.keys(this._tiles).map(Number).sort(It)},r.prototype.getRenderableIds=function(e){var r=this,i=[];for(var n in r._tiles)r._isIdRenderable(+n,e)&&i.push(+n);return e?i.sort(function(e,i){var n=r._tiles[e].tileID,o=r._tiles[i].tileID,a=new t.Point(n.canonical.x,n.canonical.y)._rotate(r.transform.angle),s=new t.Point(o.canonical.x,o.canonical.y)._rotate(r.transform.angle);return n.overscaledZ-o.overscaledZ||s.y-a.y||s.x-a.x}):i.sort(It)},r.prototype.hasRenderableParent=function(t){var e=this.findLoadedParent(t,0);return!!e&&this._isIdRenderable(e.tileID.key)},r.prototype._isIdRenderable=function(t,e){return this._tiles[t]&&this._tiles[t].hasData()&&!this._coveredTiles[t]&&(e||!this._tiles[t].holdingForFade())},r.prototype.reload=function(){if(this._paused)this._shouldReloadOnResume=!0;else for(var t in this._cache.reset(),this._tiles)"errored"!==this._tiles[t].state&&this._reloadTile(t,"reloading")},r.prototype._reloadTile=function(t,e){var r=this._tiles[t];r&&("loading"!==r.state&&(r.state=e),this._loadTile(r,this._tileLoaded.bind(this,r,t,e)))},r.prototype._tileLoaded=function(e,r,i,n){if(n)return e.state="errored",void(404!==n.status?this._source.fire(new t.ErrorEvent(n,{tile:e})):this.update(this.transform));e.timeAdded=t.browser.now(),"expired"===i&&(e.refreshedUponExpiration=!0),this._setTileReloadTimer(r,e),"raster-dem"===this.getSource().type&&e.dem&&this._backfillDEM(e),this._state.initializeTileState(e,this.map?this.map.painter:null),this._source.fire(new t.Event("data",{dataType:"source",tile:e,coord:e.tileID}))},r.prototype._backfillDEM=function(t){for(var e=this.getRenderableIds(),r=0;r<e.length;r++){var i=e[r];if(t.neighboringTiles&&t.neighboringTiles[i]){var n=this.getTileByID(i);o(t,n),o(n,t)}}function o(t,e){t.needsHillshadePrepare=!0;var r=e.tileID.canonical.x-t.tileID.canonical.x,i=e.tileID.canonical.y-t.tileID.canonical.y,n=Math.pow(2,t.tileID.canonical.z),o=e.tileID.key;0===r&&0===i||Math.abs(i)>1||(Math.abs(r)>1&&(1===Math.abs(r+n)?r+=n:1===Math.abs(r-n)&&(r-=n)),e.dem&&t.dem&&(t.dem.backfillBorder(e.dem,r,i),t.neighboringTiles&&t.neighboringTiles[o]&&(t.neighboringTiles[o].backfilled=!0)))}},r.prototype.getTile=function(t){return this.getTileByID(t.key)},r.prototype.getTileByID=function(t){return this._tiles[t]},r.prototype.getZoom=function(t){return t.zoom+t.scaleZoom(t.tileSize/this._source.tileSize)},r.prototype._retainLoadedChildren=function(t,e,r,i){for(var n in this._tiles){var o=this._tiles[n];if(!(i[n]||!o.hasData()||o.tileID.overscaledZ<=e||o.tileID.overscaledZ>r)){for(var a=o.tileID;o&&o.tileID.overscaledZ>e+1;){var s=o.tileID.scaledTo(o.tileID.overscaledZ-1);(o=this._tiles[s.key])&&o.hasData()&&(a=s)}for(var u=a;u.overscaledZ>e;)if(t[(u=u.scaledTo(u.overscaledZ-1)).key]){i[a.key]=a;break}}}},r.prototype.findLoadedParent=function(t,e){for(var r=t.overscaledZ-1;r>=e;r--){var i=t.scaledTo(r);if(!i)return;var n=String(i.key),o=this._tiles[n];if(o&&o.hasData())return o;if(this._cache.has(i))return this._cache.get(i)}},r.prototype.updateCacheSize=function(t){var e=(Math.ceil(t.width/this._source.tileSize)+1)*(Math.ceil(t.height/this._source.tileSize)+1),r=Math.floor(5*e),i="number"==typeof this._maxTileCacheSize?Math.min(this._maxTileCacheSize,r):r;this._cache.setMaxSize(i)},r.prototype.handleWrapJump=function(t){var e=(t-(void 0===this._prevLng?t:this._prevLng))/360,r=Math.round(e);if(this._prevLng=t,r){var i={};for(var n in this._tiles){var o=this._tiles[n];o.tileID=o.tileID.unwrapTo(o.tileID.wrap+r),i[o.tileID.key]=o}for(var a in this._tiles=i,this._timers)clearTimeout(this._timers[a]),delete this._timers[a];for(var s in this._tiles){var u=this._tiles[s];this._setTileReloadTimer(s,u)}}},r.prototype.update=function(e){var i=this;if(this.transform=e,this._sourceLoaded&&!this._paused){var n;this.updateCacheSize(e),this.handleWrapJump(this.transform.center.lng),this._coveredTiles={},this.used?this._source.tileID?n=e.getVisibleUnwrappedCoordinates(this._source.tileID).map(function(e){return new t.OverscaledTileID(e.canonical.z,e.wrap,e.canonical.z,e.canonical.x,e.canonical.y)}):(n=e.coveringTiles({tileSize:this._source.tileSize,minzoom:this._source.minzoom,maxzoom:this._source.maxzoom,roundZoom:this._source.roundZoom,reparseOverscaled:this._source.reparseOverscaled}),this._source.hasTile&&(n=n.filter(function(t){return i._source.hasTile(t)}))):n=[];var o=(this._source.roundZoom?Math.round:Math.floor)(this.getZoom(e)),a=Math.max(o-r.maxOverzooming,this._source.minzoom),s=Math.max(o+r.maxUnderzooming,this._source.minzoom),u=this._updateRetainedTiles(n,o);if(Ct(this._source.type)){for(var l={},p={},c=0,h=Object.keys(u);c<h.length;c+=1){var f=h[c],d=u[f],m=i._tiles[f];if(m&&!(m.fadeEndTime&&m.fadeEndTime<=t.browser.now())){var y=i.findLoadedParent(d,a);y&&(i._addTile(y.tileID),l[y.tileID.key]=y.tileID),p[f]=d}}for(var _ in this._retainLoadedChildren(p,o,s,u),l)u[_]||(i._coveredTiles[_]=!0,u[_]=l[_])}for(var v in u)i._tiles[v].clearFadeHold();for(var g=0,x=t.keysDifference(this._tiles,u);g<x.length;g+=1){var b=x[g],w=i._tiles[b];w.hasSymbolBuckets&&!w.holdingForFade()?w.setHoldDuration(i.map._fadeDuration):w.hasSymbolBuckets&&!w.symbolFadeFinished()||i._removeTile(b)}}},r.prototype.releaseSymbolFadeTiles=function(){for(var t in this._tiles)this._tiles[t].holdingForFade()&&this._removeTile(t)},r.prototype._updateRetainedTiles=function(t,e){for(var i={},n={},o=Math.max(e-r.maxOverzooming,this._source.minzoom),a=Math.max(e+r.maxUnderzooming,this._source.minzoom),s={},u=0,l=t;u<l.length;u+=1){var p=l[u],c=this._addTile(p);i[p.key]=p,c.hasData()||e<this._source.maxzoom&&(s[p.key]=p)}this._retainLoadedChildren(s,e,a,i);for(var h=0,f=t;h<f.length;h+=1){var d=f[h],m=this._tiles[d.key];if(!m.hasData()){if(e+1>this._source.maxzoom){var y=d.children(this._source.maxzoom)[0],_=this.getTile(y);if(_&&_.hasData()){i[y.key]=y;continue}}else{var v=d.children(this._source.maxzoom);if(i[v[0].key]&&i[v[1].key]&&i[v[2].key]&&i[v[3].key])continue}for(var g=m.wasRequested(),x=d.overscaledZ-1;x>=o;--x){var b=d.scaledTo(x);if(n[b.key])break;if(n[b.key]=!0,!(m=this.getTile(b))&&g&&(m=this._addTile(b)),m&&(i[b.key]=b,g=m.wasRequested(),m.hasData()))break}}}return i},r.prototype._addTile=function(e){var r=this._tiles[e.key];if(r)return r;(r=this._cache.getAndRemove(e))&&(this._setTileReloadTimer(e.key,r),r.tileID=e,this._state.initializeTileState(r,this.map?this.map.painter:null),this._cacheTimers[e.key]&&(clearTimeout(this._cacheTimers[e.key]),delete this._cacheTimers[e.key],this._setTileReloadTimer(e.key,r)));var i=Boolean(r);return i||(r=new t.Tile(e,this._source.tileSize*e.overscaleFactor()),this._loadTile(r,this._tileLoaded.bind(this,r,e.key,r.state))),r?(r.uses++,this._tiles[e.key]=r,i||this._source.fire(new t.Event("dataloading",{tile:r,coord:r.tileID,dataType:"source"})),r):null},r.prototype._setTileReloadTimer=function(t,e){var r=this;t in this._timers&&(clearTimeout(this._timers[t]),delete this._timers[t]);var i=e.getExpiryTimeout();i&&(this._timers[t]=setTimeout(function(){r._reloadTile(t,"expired"),delete r._timers[t]},i))},r.prototype._removeTile=function(t){var e=this._tiles[t];e&&(e.uses--,delete this._tiles[t],this._timers[t]&&(clearTimeout(this._timers[t]),delete this._timers[t]),e.uses>0||(e.hasData()?this._cache.add(e.tileID,e,e.getExpiryTimeout()):(e.aborted=!0,this._abortTile(e),this._unloadTile(e))))},r.prototype.clearTiles=function(){for(var t in this._shouldReloadOnResume=!1,this._paused=!1,this._tiles)this._removeTile(t);this._cache.reset()},r.prototype.tilesIn=function(e,r){for(var i=[],n=this.getIds(),o=1/0,a=1/0,s=-1/0,u=-1/0,l=0;l<e.length;l++){var p=e[l];o=Math.min(o,p.x),a=Math.min(a,p.y),s=Math.max(s,p.x),u=Math.max(u,p.y)}for(var c=0;c<n.length;c++){var h=this._tiles[n[c]];if(!h.holdingForFade()){var f=h.tileID,d=Math.pow(2,this.transform.zoom-h.tileID.overscaledZ),m=r*h.queryPadding*t.EXTENT/h.tileSize/d,y=[f.getTilePoint(new t.MercatorCoordinate(o,a)),f.getTilePoint(new t.MercatorCoordinate(s,u))];if(y[0].x-m<t.EXTENT&&y[0].y-m<t.EXTENT&&y[1].x+m>=0&&y[1].y+m>=0){for(var _=[],v=0;v<e.length;v++)_.push(f.getTilePoint(e[v]));i.push({tile:h,tileID:f,queryGeometry:[_],scale:d})}}}return i},r.prototype.getVisibleCoordinates=function(t){for(var e=this,r=this.getRenderableIds(t).map(function(t){return e._tiles[t].tileID}),i=0,n=r;i<n.length;i+=1){var o=n[i];o.posMatrix=e.transform.calculatePosMatrix(o.toUnwrapped())}return r},r.prototype.hasTransition=function(){if(this._source.hasTransition())return!0;if(Ct(this._source.type))for(var e in this._tiles){var r=this._tiles[e];if(void 0!==r.fadeEndTime&&r.fadeEndTime>=t.browser.now())return!0}return!1},r.prototype.setFeatureState=function(t,e,r){t=t||"_geojsonTileLayer",this._state.updateState(t,e,r)},r.prototype.getFeatureState=function(t,e){return t=t||"_geojsonTileLayer",this._state.getState(t,e)},r}(t.Evented);function It(t,e){return t%32-e%32||e-t}function Ct(t){return"raster"===t||"image"===t||"video"===t}function kt(){return new t.window.Worker(Hi.workerUrl)}zt.maxOverzooming=10,zt.maxUnderzooming=3;var Pt=function(){this.active={}};Pt.prototype.acquire=function(t){if(!this.workers)for(this.workers=[];this.workers.length<Pt.workerCount;)this.workers.push(new kt);return this.active[t]=!0,this.workers.slice()},Pt.prototype.release=function(t){delete this.active[t],0===Object.keys(this.active).length&&(this.workers.forEach(function(t){t.terminate()}),this.workers=null)};var Mt,Lt=Math.floor(t.browser.hardwareConcurrency/2);function Dt(e,r){var i={};for(var n in e)"ref"!==n&&(i[n]=e[n]);return t.refProperties.forEach(function(t){t in r&&(i[t]=r[t])}),i}function Bt(t){t=t.slice();for(var e=Object.create(null),r=0;r<t.length;r++)e[t[r].id]=t[r];for(var i=0;i<t.length;i++)"ref"in t[i]&&(t[i]=Dt(t[i],e[t[i].ref]));return t}Pt.workerCount=Math.max(Math.min(Lt,6),1);var Rt={setStyle:"setStyle",addLayer:"addLayer",removeLayer:"removeLayer",setPaintProperty:"setPaintProperty",setLayoutProperty:"setLayoutProperty",setFilter:"setFilter",addSource:"addSource",removeSource:"removeSource",setGeoJSONSourceData:"setGeoJSONSourceData",setLayerZoomRange:"setLayerZoomRange",setLayerProperty:"setLayerProperty",setCenter:"setCenter",setZoom:"setZoom",setBearing:"setBearing",setPitch:"setPitch",setSprite:"setSprite",setGlyphs:"setGlyphs",setTransition:"setTransition",setLight:"setLight"};function Ot(t,e,r){r.push({command:Rt.addSource,args:[t,e[t]]})}function Ft(t,e,r){e.push({command:Rt.removeSource,args:[t]}),r[t]=!0}function Ut(t,e,r,i){Ft(t,r,i),Ot(t,e,r)}function Vt(e,r,i){var n;for(n in e[i])if(e[i].hasOwnProperty(n)&&"data"!==n&&!t.isEqual(e[i][n],r[i][n]))return!1;for(n in r[i])if(r[i].hasOwnProperty(n)&&"data"!==n&&!t.isEqual(e[i][n],r[i][n]))return!1;return!0}function Nt(e,r,i,n,o,a){var s;for(s in r=r||{},e=e||{})e.hasOwnProperty(s)&&(t.isEqual(e[s],r[s])||i.push({command:a,args:[n,s,r[s],o]}));for(s in r)r.hasOwnProperty(s)&&!e.hasOwnProperty(s)&&(t.isEqual(e[s],r[s])||i.push({command:a,args:[n,s,r[s],o]}))}function jt(t){return t.id}function qt(t,e){return t[e.id]=e,t}var Zt=function(t,e,r){var i=this.boxCells=[],n=this.circleCells=[];this.xCellCount=Math.ceil(t/r),this.yCellCount=Math.ceil(e/r);for(var o=0;o<this.xCellCount*this.yCellCount;o++)i.push([]),n.push([]);this.circleKeys=[],this.boxKeys=[],this.bboxes=[],this.circles=[],this.width=t,this.height=e,this.xScale=this.xCellCount/t,this.yScale=this.yCellCount/e,this.boxUid=0,this.circleUid=0};Zt.prototype.keysLength=function(){return this.boxKeys.length+this.circleKeys.length},Zt.prototype.insert=function(t,e,r,i,n){this._forEachCell(e,r,i,n,this._insertBoxCell,this.boxUid++),this.boxKeys.push(t),this.bboxes.push(e),this.bboxes.push(r),this.bboxes.push(i),this.bboxes.push(n)},Zt.prototype.insertCircle=function(t,e,r,i){this._forEachCell(e-i,r-i,e+i,r+i,this._insertCircleCell,this.circleUid++),this.circleKeys.push(t),this.circles.push(e),this.circles.push(r),this.circles.push(i)},Zt.prototype._insertBoxCell=function(t,e,r,i,n,o){this.boxCells[n].push(o)},Zt.prototype._insertCircleCell=function(t,e,r,i,n,o){this.circleCells[n].push(o)},Zt.prototype._query=function(t,e,r,i,n,o){if(r<0||t>this.width||i<0||e>this.height)return!n&&[];var a=[];if(t<=0&&e<=0&&this.width<=r&&this.height<=i){if(n)return!0;for(var s=0;s<this.boxKeys.length;s++)a.push({key:this.boxKeys[s],x1:this.bboxes[4*s],y1:this.bboxes[4*s+1],x2:this.bboxes[4*s+2],y2:this.bboxes[4*s+3]});for(var u=0;u<this.circleKeys.length;u++){var l=this.circles[3*u],p=this.circles[3*u+1],c=this.circles[3*u+2];a.push({key:this.circleKeys[u],x1:l-c,y1:p-c,x2:l+c,y2:p+c})}return o?a.filter(o):a}var h={hitTest:n,seenUids:{box:{},circle:{}}};return this._forEachCell(t,e,r,i,this._queryCell,a,h,o),n?a.length>0:a},Zt.prototype._queryCircle=function(t,e,r,i,n){var o=t-r,a=t+r,s=e-r,u=e+r;if(a<0||o>this.width||u<0||s>this.height)return!i&&[];var l=[],p={hitTest:i,circle:{x:t,y:e,radius:r},seenUids:{box:{},circle:{}}};return this._forEachCell(o,s,a,u,this._queryCellCircle,l,p,n),i?l.length>0:l},Zt.prototype.query=function(t,e,r,i,n){return this._query(t,e,r,i,!1,n)},Zt.prototype.hitTest=function(t,e,r,i,n){return this._query(t,e,r,i,!0,n)},Zt.prototype.hitTestCircle=function(t,e,r,i){return this._queryCircle(t,e,r,!0,i)},Zt.prototype._queryCell=function(t,e,r,i,n,o,a,s){var u=a.seenUids,l=this.boxCells[n];if(null!==l)for(var p=this.bboxes,c=0,h=l;c<h.length;c+=1){var f=h[c];if(!u.box[f]){u.box[f]=!0;var d=4*f;if(t<=p[d+2]&&e<=p[d+3]&&r>=p[d+0]&&i>=p[d+1]&&(!s||s(this.boxKeys[f]))){if(a.hitTest)return o.push(!0),!0;o.push({key:this.boxKeys[f],x1:p[d],y1:p[d+1],x2:p[d+2],y2:p[d+3]})}}}var m=this.circleCells[n];if(null!==m)for(var y=this.circles,_=0,v=m;_<v.length;_+=1){var g=v[_];if(!u.circle[g]){u.circle[g]=!0;var x=3*g;if(this._circleAndRectCollide(y[x],y[x+1],y[x+2],t,e,r,i)&&(!s||s(this.circleKeys[g]))){if(a.hitTest)return o.push(!0),!0;var b=y[x],w=y[x+1],E=y[x+2];o.push({key:this.circleKeys[g],x1:b-E,y1:w-E,x2:b+E,y2:w+E})}}}},Zt.prototype._queryCellCircle=function(t,e,r,i,n,o,a,s){var u=a.circle,l=a.seenUids,p=this.boxCells[n];if(null!==p)for(var c=this.bboxes,h=0,f=p;h<f.length;h+=1){var d=f[h];if(!l.box[d]){l.box[d]=!0;var m=4*d;if(this._circleAndRectCollide(u.x,u.y,u.radius,c[m+0],c[m+1],c[m+2],c[m+3])&&(!s||s(this.boxKeys[d])))return o.push(!0),!0}}var y=this.circleCells[n];if(null!==y)for(var _=this.circles,v=0,g=y;v<g.length;v+=1){var x=g[v];if(!l.circle[x]){l.circle[x]=!0;var b=3*x;if(this._circlesCollide(_[b],_[b+1],_[b+2],u.x,u.y,u.radius)&&(!s||s(this.circleKeys[x])))return o.push(!0),!0}}},Zt.prototype._forEachCell=function(t,e,r,i,n,o,a,s){for(var u=this._convertToXCellCoord(t),l=this._convertToYCellCoord(e),p=this._convertToXCellCoord(r),c=this._convertToYCellCoord(i),h=u;h<=p;h++)for(var f=l;f<=c;f++){var d=this.xCellCount*f+h;if(n.call(this,t,e,r,i,d,o,a,s))return}},Zt.prototype._convertToXCellCoord=function(t){return Math.max(0,Math.min(this.xCellCount-1,Math.floor(t*this.xScale)))},Zt.prototype._convertToYCellCoord=function(t){return Math.max(0,Math.min(this.yCellCount-1,Math.floor(t*this.yScale)))},Zt.prototype._circlesCollide=function(t,e,r,i,n,o){var a=i-t,s=n-e,u=r+o;return u*u>a*a+s*s},Zt.prototype._circleAndRectCollide=function(t,e,r,i,n,o,a){var s=(o-i)/2,u=Math.abs(t-(i+s));if(u>s+r)return!1;var l=(a-n)/2,p=Math.abs(e-(n+l));if(p>l+r)return!1;if(u<=s||p<=l)return!0;var c=u-s,h=p-l;return c*c+h*h<=r*r};var Gt=t.properties.layout;function Xt(e,r,i,n,o){var a=t.identity(new Float32Array(16));return r?(t.identity(a),t.scale(a,a,[1/o,1/o,1]),i||t.rotateZ(a,a,n.angle)):(t.scale(a,a,[n.width/2,-n.height/2,1]),t.translate(a,a,[1,-1,0]),t.multiply(a,a,e)),a}function Wt(e,r,i,n,o){var a=t.identity(new Float32Array(16));return r?(t.multiply(a,a,e),t.scale(a,a,[o,o,1]),i||t.rotateZ(a,a,-n.angle)):(t.scale(a,a,[1,-1,1]),t.translate(a,a,[-1,-1,0]),t.scale(a,a,[2/n.width,2/n.height,1])),a}function Ht(e,r){var i=[e.x,e.y,0,1];ne(i,i,r);var n=i[3];return{point:new t.Point(i[0]/n,i[1]/n),signedDistanceFromCamera:n}}function Kt(t,e){var r=t[0]/t[3],i=t[1]/t[3];return r>=-e[0]&&r<=e[0]&&i>=-e[1]&&i<=e[1]}function Yt(e,r,i,n,o,a,s,u){var l=n?e.textSizeData:e.iconSizeData,p=t.evaluateSizeForZoom(l,i.transform.zoom,Gt.properties[n?"text-size":"icon-size"]),c=[256/i.width*2+1,256/i.height*2+1],h=n?e.text.dynamicLayoutVertexArray:e.icon.dynamicLayoutVertexArray;h.clear();for(var f=e.lineVertexArray,d=n?e.text.placedSymbolArray:e.icon.placedSymbolArray,m=i.transform.width/i.transform.height,y=!1,_=0;_<d.length;_++){var v=d.get(_);if(v.hidden||v.writingMode===t.WritingMode.vertical&&!y)ie(v.numGlyphs,h);else{y=!1;var g=[v.anchorX,v.anchorY,0,1];if(t.transformMat4(g,g,r),Kt(g,c)){var x=.5+g[3]/i.transform.cameraToCenterDistance*.5,b=t.evaluateSizeForFeature(l,p,v),w=s?b*x:b/x,E=new t.Point(v.anchorX,v.anchorY),S=Ht(E,o).point,T={},A=Qt(v,w,!1,u,r,o,a,e.glyphOffsetArray,f,h,S,E,T,m);y=A.useVertical,(A.notEnoughRoom||y||A.needsFlipping&&Qt(v,w,!0,u,r,o,a,e.glyphOffsetArray,f,h,S,E,T,m).notEnoughRoom)&&ie(v.numGlyphs,h)}else ie(v.numGlyphs,h)}}n?e.text.dynamicLayoutVertexBuffer.updateData(h):e.icon.dynamicLayoutVertexBuffer.updateData(h)}function Jt(t,e,r,i,n,o,a,s,u,l,p,c){var h=s.glyphStartIndex+s.numGlyphs,f=s.lineStartIndex,d=s.lineStartIndex+s.lineLength,m=e.getoffsetX(s.glyphStartIndex),y=e.getoffsetX(h-1),_=ee(t*m,r,i,n,o,a,s.segment,f,d,u,l,p,c);if(!_)return null;var v=ee(t*y,r,i,n,o,a,s.segment,f,d,u,l,p,c);return v?{first:_,last:v}:null}function $t(e,r,i,n){return e===t.WritingMode.horizontal&&Math.abs(i.y-r.y)>Math.abs(i.x-r.x)*n?{useVertical:!0}:(e===t.WritingMode.vertical?r.y<i.y:r.x>i.x)?{needsFlipping:!0}:null}function Qt(e,r,i,n,o,a,s,u,l,p,c,h,f,d){var m,y=r/24,_=e.lineOffsetX*r,v=e.lineOffsetY*r;if(e.numGlyphs>1){var g=e.glyphStartIndex+e.numGlyphs,x=e.lineStartIndex,b=e.lineStartIndex+e.lineLength,w=Jt(y,u,_,v,i,c,h,e,l,a,f,!1);if(!w)return{notEnoughRoom:!0};var E=Ht(w.first.point,s).point,S=Ht(w.last.point,s).point;if(n&&!i){var T=$t(e.writingMode,E,S,d);if(T)return T}m=[w.first];for(var A=e.glyphStartIndex+1;A<g-1;A++)m.push(ee(y*u.getoffsetX(A),_,v,i,c,h,e.segment,x,b,l,a,f,!1));m.push(w.last)}else{if(n&&!i){var z=Ht(h,o).point,I=e.lineStartIndex+e.segment+1,C=new t.Point(l.getx(I),l.gety(I)),k=Ht(C,o),P=k.signedDistanceFromCamera>0?k.point:te(h,C,z,1,o),M=$t(e.writingMode,z,P,d);if(M)return M}var L=ee(y*u.getoffsetX(e.glyphStartIndex),_,v,i,c,h,e.segment,e.lineStartIndex,e.lineStartIndex+e.lineLength,l,a,f,!1);if(!L)return{notEnoughRoom:!0};m=[L]}for(var D=0,B=m;D<B.length;D+=1){var R=B[D];t.addDynamicAttributes(p,R.point,R.angle)}return{}}function te(t,e,r,i,n){var o=Ht(t.add(t.sub(e)._unit()),n).point,a=r.sub(o);return r.add(a._mult(i/a.mag()))}function ee(e,r,i,n,o,a,s,u,l,p,c,h,f){var d=n?e-r:e+r,m=d>0?1:-1,y=0;n&&(m*=-1,y=Math.PI),m<0&&(y+=Math.PI);for(var _=m>0?u+s:u+s+1,v=_,g=o,x=o,b=0,w=0,E=Math.abs(d);b+w<=E;){if((_+=m)<u||_>=l)return null;if(x=g,void 0===(g=h[_])){var S=new t.Point(p.getx(_),p.gety(_)),T=Ht(S,c);if(T.signedDistanceFromCamera>0)g=h[_]=T.point;else{var A=_-m;g=te(0===b?a:new t.Point(p.getx(A),p.gety(A)),S,x,E-b+1,c)}}b+=w,w=x.dist(g)}var z=(E-b)/w,I=g.sub(x),C=I.mult(z)._add(x);return C._add(I._unit()._perp()._mult(i*m)),{point:C,angle:y+Math.atan2(g.y-x.y,g.x-x.x),tileDistance:f?{prevTileDistance:_-m===v?0:p.gettileUnitDistanceFromAnchor(_-m),lastSegmentViewportDistance:E-b}:null}}var re=new Float32Array([-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0]);function ie(t,e){for(var r=0;r<t;r++){var i=e.length;e.resize(i+4),e.float32.set(re,3*i)}}function ne(t,e,r){var i=e[0],n=e[1];return t[0]=r[0]*i+r[4]*n+r[12],t[1]=r[1]*i+r[5]*n+r[13],t[3]=r[3]*i+r[7]*n+r[15],t}var oe=function(t,e,r){void 0===e&&(e=new Zt(t.width+200,t.height+200,25)),void 0===r&&(r=new Zt(t.width+200,t.height+200,25)),this.transform=t,this.grid=e,this.ignoredGrid=r,this.pitchfactor=Math.cos(t._pitch)*t.cameraToCenterDistance,this.screenRightBoundary=t.width+100,this.screenBottomBoundary=t.height+100,this.gridRightBoundary=t.width+200,this.gridBottomBoundary=t.height+200};function ae(t,e,r){t[e+4]=r?1:0}function se(e,r,i){return r*(t.EXTENT/(e.tileSize*Math.pow(2,i-e.tileID.overscaledZ)))}oe.prototype.placeCollisionBox=function(t,e,r,i,n){var o=this.projectAndGetPerspectiveRatio(i,t.anchorPointX,t.anchorPointY),a=r*o.perspectiveRatio,s=t.x1*a+o.point.x,u=t.y1*a+o.point.y,l=t.x2*a+o.point.x,p=t.y2*a+o.point.y;return!this.isInsideGrid(s,u,l,p)||!e&&this.grid.hitTest(s,u,l,p,n)?{box:[],offscreen:!1}:{box:[s,u,l,p],offscreen:this.isOffscreen(s,u,l,p)}},oe.prototype.approximateTileDistance=function(t,e,r,i,n){var o=n?1:i/this.pitchfactor,a=t.lastSegmentViewportDistance*r;return t.prevTileDistance+a+(o-1)*a*Math.abs(Math.sin(e))},oe.prototype.placeCollisionCircles=function(e,r,i,n,o,a,s,u,l,p,c,h,f){var d=[],m=this.projectAnchor(l,o.anchorX,o.anchorY),y=u/24,_=o.lineOffsetX*u,v=o.lineOffsetY*u,g=new t.Point(o.anchorX,o.anchorY),x=Jt(y,s,_,v,!1,Ht(g,p).point,g,o,a,p,{},!0),b=!1,w=!1,E=!0,S=m.perspectiveRatio*n,T=1/(n*i),A=0,z=0;x&&(A=this.approximateTileDistance(x.first.tileDistance,x.first.angle,T,m.cameraDistance,h),z=this.approximateTileDistance(x.last.tileDistance,x.last.angle,T,m.cameraDistance,h));for(var I=0;I<e.length;I+=5){var C=e[I],k=e[I+1],P=e[I+2],M=e[I+3];if(!x||M<-A||M>z)ae(e,I,!1);else{var L=this.projectPoint(l,C,k),D=P*S;if(d.length>0){var B=L.x-d[d.length-4],R=L.y-d[d.length-3];if(D*D*2>B*B+R*R&&I+8<e.length){var O=e[I+8];if(O>-A&&O<z){ae(e,I,!1);continue}}}var F=I/5;d.push(L.x,L.y,D,F),ae(e,I,!0);var U=L.x-D,V=L.y-D,N=L.x+D,j=L.y+D;if(E=E&&this.isOffscreen(U,V,N,j),w=w||this.isInsideGrid(U,V,N,j),!r&&this.grid.hitTestCircle(L.x,L.y,D,f)){if(!c)return{circles:[],offscreen:!1};b=!0}}}return{circles:b||!w?[]:d,offscreen:E}},oe.prototype.queryRenderedSymbols=function(e){if(0===e.length||0===this.grid.keysLength()&&0===this.ignoredGrid.keysLength())return{};for(var r=[],i=1/0,n=1/0,o=-1/0,a=-1/0,s=0,u=e;s<u.length;s+=1){var l=u[s],p=new t.Point(l.x+100,l.y+100);i=Math.min(i,p.x),n=Math.min(n,p.y),o=Math.max(o,p.x),a=Math.max(a,p.y),r.push(p)}for(var c={},h={},f=0,d=this.grid.query(i,n,o,a).concat(this.ignoredGrid.query(i,n,o,a));f<d.length;f+=1){var m=d[f],y=m.key;if(void 0===c[y.bucketInstanceId]&&(c[y.bucketInstanceId]={}),!c[y.bucketInstanceId][y.featureIndex]){var _=[new t.Point(m.x1,m.y1),new t.Point(m.x2,m.y1),new t.Point(m.x2,m.y2),new t.Point(m.x1,m.y2)];t.polygonIntersectsPolygon(r,_)&&(c[y.bucketInstanceId][y.featureIndex]=!0,void 0===h[y.bucketInstanceId]&&(h[y.bucketInstanceId]=[]),h[y.bucketInstanceId].push(y.featureIndex))}}return h},oe.prototype.insertCollisionBox=function(t,e,r,i,n){var o={bucketInstanceId:r,featureIndex:i,collisionGroupID:n};(e?this.ignoredGrid:this.grid).insert(o,t[0],t[1],t[2],t[3])},oe.prototype.insertCollisionCircles=function(t,e,r,i,n){for(var o=e?this.ignoredGrid:this.grid,a={bucketInstanceId:r,featureIndex:i,collisionGroupID:n},s=0;s<t.length;s+=4)o.insertCircle(a,t[s],t[s+1],t[s+2])},oe.prototype.projectAnchor=function(t,e,r){var i=[e,r,0,1];return ne(i,i,t),{perspectiveRatio:.5+this.transform.cameraToCenterDistance/i[3]*.5,cameraDistance:i[3]}},oe.prototype.projectPoint=function(e,r,i){var n=[r,i,0,1];return ne(n,n,e),new t.Point((n[0]/n[3]+1)/2*this.transform.width+100,(-n[1]/n[3]+1)/2*this.transform.height+100)},oe.prototype.projectAndGetPerspectiveRatio=function(e,r,i){var n=[r,i,0,1];return ne(n,n,e),{point:new t.Point((n[0]/n[3]+1)/2*this.transform.width+100,(-n[1]/n[3]+1)/2*this.transform.height+100),perspectiveRatio:.5+this.transform.cameraToCenterDistance/n[3]*.5}},oe.prototype.isOffscreen=function(t,e,r,i){return r<100||t>=this.screenRightBoundary||i<100||e>this.screenBottomBoundary},oe.prototype.isInsideGrid=function(t,e,r,i){return r>=0&&t<this.gridRightBoundary&&i>=0&&e<this.gridBottomBoundary};var ue=function(t,e,r,i){this.opacity=t?Math.max(0,Math.min(1,t.opacity+(t.placed?e:-e))):i&&r?1:0,this.placed=r};ue.prototype.isHidden=function(){return 0===this.opacity&&!this.placed};var le=function(t,e,r,i,n){this.text=new ue(t?t.text:null,e,r,n),this.icon=new ue(t?t.icon:null,e,i,n)};le.prototype.isHidden=function(){return this.text.isHidden()&&this.icon.isHidden()};var pe=function(t,e,r){this.text=t,this.icon=e,this.skipFade=r},ce=function(t,e,r,i,n){this.bucketInstanceId=t,this.featureIndex=e,this.sourceLayerIndex=r,this.bucketIndex=i,this.tileID=n},he=function(t){this.crossSourceCollisions=t,this.maxGroupID=0,this.collisionGroups={}};he.prototype.get=function(t){if(this.crossSourceCollisions)return{ID:0,predicate:null};if(!this.collisionGroups[t]){var e=++this.maxGroupID;this.collisionGroups[t]={ID:e,predicate:function(t){return t.collisionGroupID===e}}}return this.collisionGroups[t]};var fe=function(t,e,r){this.transform=t.clone(),this.collisionIndex=new oe(this.transform),this.placements={},this.opacities={},this.stale=!1,this.commitTime=0,this.fadeDuration=e,this.retainedQueryData={},this.collisionGroups=new he(r)};function de(t,e,r){t.emplaceBack(e?1:0,r?1:0),t.emplaceBack(e?1:0,r?1:0),t.emplaceBack(e?1:0,r?1:0),t.emplaceBack(e?1:0,r?1:0)}fe.prototype.placeLayerTile=function(e,r,i,n){var o=r.getBucket(e),a=r.latestFeatureIndex;if(o&&a&&e.id===o.layerIds[0]){var s=r.collisionBoxArray,u=o.layers[0].layout,l=Math.pow(2,this.transform.zoom-r.tileID.overscaledZ),p=r.tileSize/t.EXTENT,c=this.transform.calculatePosMatrix(r.tileID.toUnwrapped()),h=Xt(c,"map"===u.get("text-pitch-alignment"),"map"===u.get("text-rotation-alignment"),this.transform,se(r,1,this.transform.zoom)),f=Xt(c,"map"===u.get("icon-pitch-alignment"),"map"===u.get("icon-rotation-alignment"),this.transform,se(r,1,this.transform.zoom));this.retainedQueryData[o.bucketInstanceId]=new ce(o.bucketInstanceId,a,o.sourceLayerIndex,o.index,r.tileID),this.placeLayerBucket(o,c,h,f,l,p,i,r.holdingForFade(),n,s)}},fe.prototype.placeLayerBucket=function(e,r,i,n,o,a,s,u,l,p){var c=e.layers[0].layout,h=t.evaluateSizeForZoom(e.textSizeData,this.transform.zoom,t.properties.layout.properties["text-size"]),f=c.get("text-optional"),d=c.get("icon-optional"),m=c.get("text-allow-overlap"),y=c.get("icon-allow-overlap"),_=m&&(y||!e.hasIconData()||d),v=y&&(m||!e.hasTextData()||f),g=this.collisionGroups.get(e.sourceID);!e.collisionArrays&&p&&e.deserializeCollisionBoxes(p);for(var x=0;x<e.symbolInstances.length;x++){var b=e.symbolInstances.get(x);if(!l[b.crossTileID]){if(u){this.placements[b.crossTileID]=new pe(!1,!1,!1);continue}var w=!1,E=!1,S=!0,T=null,A=null,z=null,I=0,C=0,k=e.collisionArrays[x];k.textFeatureIndex&&(I=k.textFeatureIndex),k.textBox&&(w=(T=this.collisionIndex.placeCollisionBox(k.textBox,c.get("text-allow-overlap"),a,r,g.predicate)).box.length>0,S=S&&T.offscreen);var P=k.textCircles;if(P){var M=e.text.placedSymbolArray.get(b.horizontalPlacedTextSymbolIndex),L=t.evaluateSizeForFeature(e.textSizeData,h,M);A=this.collisionIndex.placeCollisionCircles(P,c.get("text-allow-overlap"),o,a,M,e.lineVertexArray,e.glyphOffsetArray,L,r,i,s,"map"===c.get("text-pitch-alignment"),g.predicate),w=c.get("text-allow-overlap")||A.circles.length>0,S=S&&A.offscreen}k.iconFeatureIndex&&(C=k.iconFeatureIndex),k.iconBox&&(E=(z=this.collisionIndex.placeCollisionBox(k.iconBox,c.get("icon-allow-overlap"),a,r,g.predicate)).box.length>0,S=S&&z.offscreen);var D=f||0===b.numGlyphVertices&&0===b.numVerticalGlyphVertices,B=d||0===b.numIconVertices;D||B?B?D||(E=E&&w):w=E&&w:E=w=E&&w,w&&T&&this.collisionIndex.insertCollisionBox(T.box,c.get("text-ignore-placement"),e.bucketInstanceId,I,g.ID),E&&z&&this.collisionIndex.insertCollisionBox(z.box,c.get("icon-ignore-placement"),e.bucketInstanceId,C,g.ID),w&&A&&this.collisionIndex.insertCollisionCircles(A.circles,c.get("text-ignore-placement"),e.bucketInstanceId,I,g.ID),this.placements[b.crossTileID]=new pe(w||_,E||v,S||e.justReloaded),l[b.crossTileID]=!0}}e.justReloaded=!1},fe.prototype.commit=function(t,e){this.commitTime=e;var r=!1,i=t&&0!==this.fadeDuration?(this.commitTime-t.commitTime)/this.fadeDuration:1,n=t?t.opacities:{};for(var o in this.placements){var a=this.placements[o],s=n[o];s?(this.opacities[o]=new le(s,i,a.text,a.icon),r=r||a.text!==s.text.placed||a.icon!==s.icon.placed):(this.opacities[o]=new le(null,i,a.text,a.icon,a.skipFade),r=r||a.text||a.icon)}for(var u in n){var l=n[u];if(!this.opacities[u]){var p=new le(l,i,!1,!1);p.isHidden()||(this.opacities[u]=p,r=r||l.text.placed||l.icon.placed)}}r?this.lastPlacementChangeTime=e:"number"!=typeof this.lastPlacementChangeTime&&(this.lastPlacementChangeTime=t?t.lastPlacementChangeTime:e)},fe.prototype.updateLayerOpacities=function(t,e){for(var r={},i=0,n=e;i<n.length;i+=1){var o=n[i],a=o.getBucket(t);a&&o.latestFeatureIndex&&t.id===a.layerIds[0]&&this.updateBucketOpacities(a,r,o.collisionBoxArray)}},fe.prototype.updateBucketOpacities=function(t,e,r){t.hasTextData()&&t.text.opacityVertexArray.clear(),t.hasIconData()&&t.icon.opacityVertexArray.clear(),t.hasCollisionBoxData()&&t.collisionBox.collisionVertexArray.clear(),t.hasCollisionCircleData()&&t.collisionCircle.collisionVertexArray.clear();var i=t.layers[0].layout,n=new le(null,0,!1,!1,!0),o=i.get("text-allow-overlap"),a=i.get("icon-allow-overlap"),s=new le(null,0,o&&(a||!t.hasIconData()||i.get("icon-optional")),a&&(o||!t.hasTextData()||i.get("text-optional")),!0);!t.collisionArrays&&r&&(t.hasCollisionBoxData()||t.hasCollisionCircleData())&&t.deserializeCollisionBoxes(r);for(var u=0;u<t.symbolInstances.length;u++){var l=t.symbolInstances.get(u),p=e[l.crossTileID],c=this.opacities[l.crossTileID];p?c=n:c||(c=s,this.opacities[l.crossTileID]=c),e[l.crossTileID]=!0;var h=l.numGlyphVertices>0||l.numVerticalGlyphVertices>0,f=l.numIconVertices>0;if(h){for(var d=we(c.text),m=(l.numGlyphVertices+l.numVerticalGlyphVertices)/4,y=0;y<m;y++)t.text.opacityVertexArray.emplaceBack(d);t.text.placedSymbolArray.get(l.horizontalPlacedTextSymbolIndex).hidden=c.text.isHidden(),l.verticalPlacedTextSymbolIndex>=0&&(t.text.placedSymbolArray.get(l.verticalPlacedTextSymbolIndex).hidden=c.text.isHidden())}if(f){for(var _=we(c.icon),v=0;v<l.numIconVertices/4;v++)t.icon.opacityVertexArray.emplaceBack(_);t.icon.placedSymbolArray.get(u).hidden=c.icon.isHidden()}if(t.hasCollisionBoxData()||t.hasCollisionCircleData()){var g=t.collisionArrays[u];if(g){g.textBox&&de(t.collisionBox.collisionVertexArray,c.text.placed,!1),g.iconBox&&de(t.collisionBox.collisionVertexArray,c.icon.placed,!1);var x=g.textCircles;if(x&&t.hasCollisionCircleData())for(var b=0;b<x.length;b+=5){var w=p||0===x[b+4];de(t.collisionCircle.collisionVertexArray,c.text.placed,w)}}}}t.sortFeatures(this.transform.angle),this.retainedQueryData[t.bucketInstanceId]&&(this.retainedQueryData[t.bucketInstanceId].featureSortOrder=t.featureSortOrder),t.hasTextData()&&t.text.opacityVertexBuffer&&t.text.opacityVertexBuffer.updateData(t.text.opacityVertexArray),t.hasIconData()&&t.icon.opacityVertexBuffer&&t.icon.opacityVertexBuffer.updateData(t.icon.opacityVertexArray),t.hasCollisionBoxData()&&t.collisionBox.collisionVertexBuffer&&t.collisionBox.collisionVertexBuffer.updateData(t.collisionBox.collisionVertexArray),t.hasCollisionCircleData()&&t.collisionCircle.collisionVertexBuffer&&t.collisionCircle.collisionVertexBuffer.updateData(t.collisionCircle.collisionVertexArray)},fe.prototype.symbolFadeChange=function(t){return 0===this.fadeDuration?1:(t-this.commitTime)/this.fadeDuration},fe.prototype.hasTransitions=function(t){return this.stale||t-this.lastPlacementChangeTime<this.fadeDuration},fe.prototype.stillRecent=function(t){return this.commitTime+this.fadeDuration>t},fe.prototype.setStale=function(){this.stale=!0};var me=Math.pow(2,25),ye=Math.pow(2,24),_e=Math.pow(2,17),ve=Math.pow(2,16),ge=Math.pow(2,9),xe=Math.pow(2,8),be=Math.pow(2,1);function we(t){if(0===t.opacity&&!t.placed)return 0;if(1===t.opacity&&t.placed)return 4294967295;var e=t.placed?1:0,r=Math.floor(127*t.opacity);return r*me+e*ye+r*_e+e*ve+r*ge+e*xe+r*be+e}var Ee=function(){this._currentTileIndex=0,this._seenCrossTileIDs={}};Ee.prototype.continuePlacement=function(t,e,r,i,n){for(;this._currentTileIndex<t.length;){var o=t[this._currentTileIndex];if(e.placeLayerTile(i,o,r,this._seenCrossTileIDs),this._currentTileIndex++,n())return!0}};var Se=function(t,e,r,i,n,o){this.placement=new fe(t,n,o),this._currentPlacementIndex=e.length-1,this._forceFullPlacement=r,this._showCollisionBoxes=i,this._done=!1};Se.prototype.isDone=function(){return this._done},Se.prototype.continuePlacement=function(e,r,i){for(var n=this,o=t.browser.now(),a=function(){var e=t.browser.now()-o;return!n._forceFullPlacement&&e>2};this._currentPlacementIndex>=0;){var s=r[e[n._currentPlacementIndex]],u=n.placement.collisionIndex.transform.zoom;if("symbol"===s.type&&(!s.minzoom||s.minzoom<=u)&&(!s.maxzoom||s.maxzoom>u)){if(n._inProgressLayer||(n._inProgressLayer=new Ee),n._inProgressLayer.continuePlacement(i[s.source],n.placement,n._showCollisionBoxes,s,a))return;delete n._inProgressLayer}n._currentPlacementIndex--}this._done=!0},Se.prototype.commit=function(t,e){return this.placement.commit(t,e),this.placement};var Te=512/t.EXTENT/2,Ae=function(t,e,r){this.tileID=t,this.indexedSymbolInstances={},this.bucketInstanceId=r;for(var i=0;i<e.length;i++){var n=e.get(i),o=n.key;this.indexedSymbolInstances[o]||(this.indexedSymbolInstances[o]=[]),this.indexedSymbolInstances[o].push({crossTileID:n.crossTileID,coord:this.getScaledCoordinates(n,t)})}};Ae.prototype.getScaledCoordinates=function(e,r){var i=r.canonical.z-this.tileID.canonical.z,n=Te/Math.pow(2,i);return{x:Math.floor((r.canonical.x*t.EXTENT+e.anchorX)*n),y:Math.floor((r.canonical.y*t.EXTENT+e.anchorY)*n)}},Ae.prototype.findMatches=function(t,e,r){for(var i=this.tileID.canonical.z<e.canonical.z?1:Math.pow(2,this.tileID.canonical.z-e.canonical.z),n=0;n<t.length;n++){var o=t.get(n);if(!o.crossTileID){var a=this.indexedSymbolInstances[o.key];if(a)for(var s=this.getScaledCoordinates(o,e),u=0,l=a;u<l.length;u+=1){var p=l[u];if(Math.abs(p.coord.x-s.x)<=i&&Math.abs(p.coord.y-s.y)<=i&&!r[p.crossTileID]){r[p.crossTileID]=!0,o.crossTileID=p.crossTileID;break}}}}};var ze=function(){this.maxCrossTileID=0};ze.prototype.generate=function(){return++this.maxCrossTileID};var Ie=function(){this.indexes={},this.usedCrossTileIDs={},this.lng=0};Ie.prototype.handleWrapJump=function(t){var e=Math.round((t-this.lng)/360);if(0!==e)for(var r in this.indexes){var i=this.indexes[r],n={};for(var o in i){var a=i[o];a.tileID=a.tileID.unwrapTo(a.tileID.wrap+e),n[a.tileID.key]=a}this.indexes[r]=n}this.lng=t},Ie.prototype.addBucket=function(t,e,r){if(this.indexes[t.overscaledZ]&&this.indexes[t.overscaledZ][t.key]){if(this.indexes[t.overscaledZ][t.key].bucketInstanceId===e.bucketInstanceId)return!1;this.removeBucketCrossTileIDs(t.overscaledZ,this.indexes[t.overscaledZ][t.key])}for(var i=0;i<e.symbolInstances.length;i++)e.symbolInstances.get(i).crossTileID=0;this.usedCrossTileIDs[t.overscaledZ]||(this.usedCrossTileIDs[t.overscaledZ]={});var n=this.usedCrossTileIDs[t.overscaledZ];for(var o in this.indexes){var a=this.indexes[o];if(Number(o)>t.overscaledZ)for(var s in a){var u=a[s];u.tileID.isChildOf(t)&&u.findMatches(e.symbolInstances,t,n)}else{var l=a[t.scaledTo(Number(o)).key];l&&l.findMatches(e.symbolInstances,t,n)}}for(var p=0;p<e.symbolInstances.length;p++){var c=e.symbolInstances.get(p);c.crossTileID||(c.crossTileID=r.generate(),n[c.crossTileID]=!0)}return void 0===this.indexes[t.overscaledZ]&&(this.indexes[t.overscaledZ]={}),this.indexes[t.overscaledZ][t.key]=new Ae(t,e.symbolInstances,e.bucketInstanceId),!0},Ie.prototype.removeBucketCrossTileIDs=function(t,e){for(var r in e.indexedSymbolInstances)for(var i=0,n=e.indexedSymbolInstances[r];i<n.length;i+=1){var o=n[i];delete this.usedCrossTileIDs[t][o.crossTileID]}},Ie.prototype.removeStaleBuckets=function(t){var e=!1;for(var r in this.indexes){var i=this.indexes[r];for(var n in i)t[i[n].bucketInstanceId]||(this.removeBucketCrossTileIDs(r,i[n]),delete i[n],e=!0)}return e};var Ce=function(){this.layerIndexes={},this.crossTileIDs=new ze,this.maxBucketInstanceId=0,this.bucketsInCurrentPlacement={}};Ce.prototype.addLayer=function(t,e,r){var i=this.layerIndexes[t.id];void 0===i&&(i=this.layerIndexes[t.id]=new Ie);var n=!1,o={};i.handleWrapJump(r);for(var a=0,s=e;a<s.length;a+=1){var u=s[a],l=u.getBucket(t);l&&t.id===l.layerIds[0]&&(l.bucketInstanceId||(l.bucketInstanceId=++this.maxBucketInstanceId),i.addBucket(u.tileID,l,this.crossTileIDs)&&(n=!0),o[l.bucketInstanceId]=!0)}return i.removeStaleBuckets(o)&&(n=!0),n},Ce.prototype.pruneUnusedLayers=function(t){var e={};for(var r in t.forEach(function(t){e[t]=!0}),this.layerIndexes)e[r]||delete this.layerIndexes[r]};var ke=function(e,r){return t.emitValidationErrors(e,r&&r.filter(function(t){return"source.canvas"!==t.identifier}))},Pe=t.pick(Rt,["addLayer","removeLayer","setPaintProperty","setLayoutProperty","setFilter","addSource","removeSource","setLayerZoomRange","setLight","setTransition","setGeoJSONSourceData"]),Me=t.pick(Rt,["setCenter","setZoom","setBearing","setPitch"]),Le=function(e){function r(i,n){var o=this;void 0===n&&(n={}),e.call(this),this.map=i,this.dispatcher=new w((Mt||(Mt=new Pt),Mt),this),this.imageManager=new c,this.glyphManager=new _(i._transformRequest,n.localIdeographFontFamily),this.lineAtlas=new b(256,512),this.crossTileSymbolIndex=new Ce,this._layers={},this._order=[],this.sourceCaches={},this.zoomHistory=new t.ZoomHistory,this._loaded=!1,this._resetUpdates(),this.dispatcher.broadcast("setReferrer",t.getReferrer());var a=this;this._rtlTextPluginCallback=r.registerForPluginAvailability(function(t){for(var e in a.dispatcher.broadcast("loadRTLTextPlugin",t.pluginURL,t.completionCallback),a.sourceCaches)a.sourceCaches[e].reload()}),this.on("data",function(t){if("source"===t.dataType&&"metadata"===t.sourceDataType){var e=o.sourceCaches[t.sourceId];if(e){var r=e.getSource();if(r&&r.vectorLayerIds)for(var i in o._layers){var n=o._layers[i];n.source===r.id&&o._validateLayer(n)}}}})}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.loadURL=function(e,r){var i=this;void 0===r&&(r={}),this.fire(new t.Event("dataloading",{dataType:"style"}));var n="boolean"==typeof r.validate?r.validate:!t.isMapboxURL(e);e=t.normalizeStyleURL(e,r.accessToken);var o=this.map._transformRequest(e,t.ResourceType.Style);this._request=t.getJSON(o,function(e,r){i._request=null,e?i.fire(new t.ErrorEvent(e)):r&&i._load(r,n)})},r.prototype.loadJSON=function(e,r){var i=this;void 0===r&&(r={}),this.fire(new t.Event("dataloading",{dataType:"style"})),this._request=t.browser.frame(function(){i._request=null,i._load(e,!1!==r.validate)})},r.prototype._load=function(e,r){var i=this;if(!r||!ke(this,t.validateStyle(e))){for(var n in this._loaded=!0,this.stylesheet=e,e.sources)i.addSource(n,e.sources[n],{validate:!1});e.sprite?this._spriteRequest=function(e,r,i){var n,o,a,s=t.browser.devicePixelRatio>1?"@2x":"",u=t.getJSON(r(t.normalizeSpriteURL(e,s,".json"),t.ResourceType.SpriteJSON),function(t,e){u=null,a||(a=t,n=e,p())}),l=t.getImage(r(t.normalizeSpriteURL(e,s,".png"),t.ResourceType.SpriteImage),function(t,e){l=null,a||(a=t,o=e,p())});function p(){if(a)i(a);else if(n&&o){var e=t.browser.getImageData(o),r={};for(var s in n){var u=n[s],l=u.width,p=u.height,c=u.x,h=u.y,f=u.sdf,d=u.pixelRatio,m=new t.RGBAImage({width:l,height:p});t.RGBAImage.copy(e,m,{x:c,y:h},{x:0,y:0},{width:l,height:p}),r[s]={data:m,pixelRatio:d,sdf:f}}i(null,r)}}return{cancel:function(){u&&(u.cancel(),u=null),l&&(l.cancel(),l=null)}}}(e.sprite,this.map._transformRequest,function(e,r){if(i._spriteRequest=null,e)i.fire(new t.ErrorEvent(e));else if(r)for(var n in r)i.imageManager.addImage(n,r[n]);i.imageManager.setLoaded(!0),i.fire(new t.Event("data",{dataType:"style"}))}):this.imageManager.setLoaded(!0),this.glyphManager.setURL(e.glyphs);var o=Bt(this.stylesheet.layers);this._order=o.map(function(t){return t.id}),this._layers={};for(var a=0,s=o;a<s.length;a+=1){var u=s[a];(u=t.createStyleLayer(u)).setEventedParent(i,{layer:{id:u.id}}),i._layers[u.id]=u}this.dispatcher.broadcast("setLayers",this._serializeLayers(this._order)),this.light=new x(this.stylesheet.light),this.fire(new t.Event("data",{dataType:"style"})),this.fire(new t.Event("style.load"))}},r.prototype._validateLayer=function(e){var r=this.sourceCaches[e.source];if(r){var i=e.sourceLayer;if(i){var n=r.getSource();("geojson"===n.type||n.vectorLayerIds&&-1===n.vectorLayerIds.indexOf(i))&&this.fire(new t.ErrorEvent(new Error('Source layer "'+i+'" does not exist on source "'+n.id+'" as specified by style layer "'+e.id+'"')))}}},r.prototype.loaded=function(){if(!this._loaded)return!1;if(Object.keys(this._updatedSources).length)return!1;for(var t in this.sourceCaches)if(!this.sourceCaches[t].loaded())return!1;return!!this.imageManager.isLoaded()},r.prototype._serializeLayers=function(t){for(var e=[],r=0,i=t;r<i.length;r+=1){var n=i[r],o=this._layers[n];"custom"!==o.type&&e.push(o.serialize())}return e},r.prototype.hasTransitions=function(){if(this.light&&this.light.hasTransition())return!0;for(var t in this.sourceCaches)if(this.sourceCaches[t].hasTransition())return!0;for(var e in this._layers)if(this._layers[e].hasTransition())return!0;return!1},r.prototype._checkLoaded=function(){if(!this._loaded)throw new Error("Style is not done loading")},r.prototype.update=function(e){if(this._loaded){var r=this._changed;if(this._changed){var i=Object.keys(this._updatedLayers),n=Object.keys(this._removedLayers);for(var o in(i.length||n.length)&&this._updateWorkerLayers(i,n),this._updatedSources){var a=this._updatedSources[o];"reload"===a?this._reloadSource(o):"clear"===a&&this._clearSource(o)}for(var s in this._updatedPaintProps)this._layers[s].updateTransitions(e);this.light.updateTransitions(e),this._resetUpdates()}for(var u in this.sourceCaches)this.sourceCaches[u].used=!1;for(var l=0,p=this._order;l<p.length;l+=1){var c=p[l],h=this._layers[c];h.recalculate(e),!h.isHidden(e.zoom)&&h.source&&(this.sourceCaches[h.source].used=!0)}this.light.recalculate(e),this.z=e.zoom,r&&this.fire(new t.Event("data",{dataType:"style"}))}},r.prototype._updateWorkerLayers=function(t,e){this.dispatcher.broadcast("updateLayers",{layers:this._serializeLayers(t),removedIds:e})},r.prototype._resetUpdates=function(){this._changed=!1,this._updatedLayers={},this._removedLayers={},this._updatedSources={},this._updatedPaintProps={}},r.prototype.setState=function(e){var r=this;if(this._checkLoaded(),ke(this,t.validateStyle(e)))return!1;(e=t.clone(e)).layers=Bt(e.layers);var i=function(e,r){if(!e)return[{command:Rt.setStyle,args:[r]}];var i=[];try{if(!t.isEqual(e.version,r.version))return[{command:Rt.setStyle,args:[r]}];t.isEqual(e.center,r.center)||i.push({command:Rt.setCenter,args:[r.center]}),t.isEqual(e.zoom,r.zoom)||i.push({command:Rt.setZoom,args:[r.zoom]}),t.isEqual(e.bearing,r.bearing)||i.push({command:Rt.setBearing,args:[r.bearing]}),t.isEqual(e.pitch,r.pitch)||i.push({command:Rt.setPitch,args:[r.pitch]}),t.isEqual(e.sprite,r.sprite)||i.push({command:Rt.setSprite,args:[r.sprite]}),t.isEqual(e.glyphs,r.glyphs)||i.push({command:Rt.setGlyphs,args:[r.glyphs]}),t.isEqual(e.transition,r.transition)||i.push({command:Rt.setTransition,args:[r.transition]}),t.isEqual(e.light,r.light)||i.push({command:Rt.setLight,args:[r.light]});var n={},o=[];!function(e,r,i,n){var o;for(o in r=r||{},e=e||{})e.hasOwnProperty(o)&&(r.hasOwnProperty(o)||Ft(o,i,n));for(o in r)r.hasOwnProperty(o)&&(e.hasOwnProperty(o)?t.isEqual(e[o],r[o])||("geojson"===e[o].type&&"geojson"===r[o].type&&Vt(e,r,o)?i.push({command:Rt.setGeoJSONSourceData,args:[o,r[o].data]}):Ut(o,r,i,n)):Ot(o,r,i))}(e.sources,r.sources,o,n);var a=[];e.layers&&e.layers.forEach(function(t){n[t.source]?i.push({command:Rt.removeLayer,args:[t.id]}):a.push(t)}),i=i.concat(o),function(e,r,i){r=r||[];var n,o,a,s,u,l,p,c=(e=e||[]).map(jt),h=r.map(jt),f=e.reduce(qt,{}),d=r.reduce(qt,{}),m=c.slice(),y=Object.create(null);for(n=0,o=0;n<c.length;n++)a=c[n],d.hasOwnProperty(a)?o++:(i.push({command:Rt.removeLayer,args:[a]}),m.splice(m.indexOf(a,o),1));for(n=0,o=0;n<h.length;n++)a=h[h.length-1-n],m[m.length-1-n]!==a&&(f.hasOwnProperty(a)?(i.push({command:Rt.removeLayer,args:[a]}),m.splice(m.lastIndexOf(a,m.length-o),1)):o++,l=m[m.length-n],i.push({command:Rt.addLayer,args:[d[a],l]}),m.splice(m.length-n,0,a),y[a]=!0);for(n=0;n<h.length;n++)if(s=f[a=h[n]],u=d[a],!y[a]&&!t.isEqual(s,u))if(t.isEqual(s.source,u.source)&&t.isEqual(s["source-layer"],u["source-layer"])&&t.isEqual(s.type,u.type)){for(p in Nt(s.layout,u.layout,i,a,null,Rt.setLayoutProperty),Nt(s.paint,u.paint,i,a,null,Rt.setPaintProperty),t.isEqual(s.filter,u.filter)||i.push({command:Rt.setFilter,args:[a,u.filter]}),t.isEqual(s.minzoom,u.minzoom)&&t.isEqual(s.maxzoom,u.maxzoom)||i.push({command:Rt.setLayerZoomRange,args:[a,u.minzoom,u.maxzoom]}),s)s.hasOwnProperty(p)&&"layout"!==p&&"paint"!==p&&"filter"!==p&&"metadata"!==p&&"minzoom"!==p&&"maxzoom"!==p&&(0===p.indexOf("paint.")?Nt(s[p],u[p],i,a,p.slice(6),Rt.setPaintProperty):t.isEqual(s[p],u[p])||i.push({command:Rt.setLayerProperty,args:[a,p,u[p]]}));for(p in u)u.hasOwnProperty(p)&&!s.hasOwnProperty(p)&&"layout"!==p&&"paint"!==p&&"filter"!==p&&"metadata"!==p&&"minzoom"!==p&&"maxzoom"!==p&&(0===p.indexOf("paint.")?Nt(s[p],u[p],i,a,p.slice(6),Rt.setPaintProperty):t.isEqual(s[p],u[p])||i.push({command:Rt.setLayerProperty,args:[a,p,u[p]]}))}else i.push({command:Rt.removeLayer,args:[a]}),l=m[m.lastIndexOf(a)+1],i.push({command:Rt.addLayer,args:[u,l]})}(a,r.layers,i)}catch(t){console.warn("Unable to compute style diff:",t),i=[{command:Rt.setStyle,args:[r]}]}return i}(this.serialize(),e).filter(function(t){return!(t.command in Me)});if(0===i.length)return!1;var n=i.filter(function(t){return!(t.command in Pe)});if(n.length>0)throw new Error("Unimplemented: "+n.map(function(t){return t.command}).join(", ")+".");return i.forEach(function(t){"setTransition"!==t.command&&r[t.command].apply(r,t.args)}),this.stylesheet=e,!0},r.prototype.addImage=function(e,r){if(this.getImage(e))return this.fire(new t.ErrorEvent(new Error("An image with this name already exists.")));this.imageManager.addImage(e,r),this.fire(new t.Event("data",{dataType:"style"}))},r.prototype.getImage=function(t){return this.imageManager.getImage(t)},r.prototype.removeImage=function(e){if(!this.getImage(e))return this.fire(new t.ErrorEvent(new Error("No image with this name exists.")));this.imageManager.removeImage(e),this.fire(new t.Event("data",{dataType:"style"}))},r.prototype.listImages=function(){return this._checkLoaded(),this.imageManager.listImages()},r.prototype.addSource=function(e,r,i){var n=this;if(void 0===i&&(i={}),this._checkLoaded(),void 0!==this.sourceCaches[e])throw new Error("There is already a source with this ID");if(!r.type)throw new Error("The type property must be defined, but the only the following properties were given: "+Object.keys(r).join(", ")+".");if(!(["vector","raster","geojson","video","image"].indexOf(r.type)>=0&&this._validate(t.validateStyle.source,"sources."+e,r,null,i))){this.map&&this.map._collectResourceTiming&&(r.collectResourceTiming=!0);var o=this.sourceCaches[e]=new zt(e,r,this.dispatcher);o.style=this,o.setEventedParent(this,function(){return{isSourceLoaded:n.loaded(),source:o.serialize(),sourceId:e}}),o.onAdd(this.map),this._changed=!0}},r.prototype.removeSource=function(e){if(this._checkLoaded(),void 0===this.sourceCaches[e])throw new Error("There is no source with this ID");for(var r in this._layers)if(this._layers[r].source===e)return this.fire(new t.ErrorEvent(new Error('Source "'+e+'" cannot be removed while layer "'+r+'" is using it.')));var i=this.sourceCaches[e];delete this.sourceCaches[e],delete this._updatedSources[e],i.fire(new t.Event("data",{sourceDataType:"metadata",dataType:"source",sourceId:e})),i.setEventedParent(null),i.clearTiles(),i.onRemove&&i.onRemove(this.map),this._changed=!0},r.prototype.setGeoJSONSourceData=function(t,e){this._checkLoaded(),this.sourceCaches[t].getSource().setData(e),this._changed=!0},r.prototype.getSource=function(t){return this.sourceCaches[t]&&this.sourceCaches[t].getSource()},r.prototype.addLayer=function(e,r,i){void 0===i&&(i={}),this._checkLoaded();var n=e.id;if(this.getLayer(n))this.fire(new t.ErrorEvent(new Error('Layer with id "'+n+'" already exists on this map')));else{var o;if("custom"===e.type){if(ke(this,t.validateCustomStyleLayer(e)))return;o=t.createStyleLayer(e)}else{if("object"==typeof e.source&&(this.addSource(n,e.source),e=t.clone(e),e=t.extend(e,{source:n})),this._validate(t.validateStyle.layer,"layers."+n,e,{arrayIndex:-1},i))return;o=t.createStyleLayer(e),this._validateLayer(o),o.setEventedParent(this,{layer:{id:n}})}var a=r?this._order.indexOf(r):this._order.length;if(r&&-1===a)this.fire(new t.ErrorEvent(new Error('Layer with id "'+r+'" does not exist on this map.')));else{if(this._order.splice(a,0,n),this._layerOrderChanged=!0,this._layers[n]=o,this._removedLayers[n]&&o.source&&"custom"!==o.type){var s=this._removedLayers[n];delete this._removedLayers[n],s.type!==o.type?this._updatedSources[o.source]="clear":(this._updatedSources[o.source]="reload",this.sourceCaches[o.source].pause())}this._updateLayer(o),o.onAdd&&o.onAdd(this.map)}}},r.prototype.moveLayer=function(e,r){if(this._checkLoaded(),this._changed=!0,this._layers[e]){if(e!==r){var i=this._order.indexOf(e);this._order.splice(i,1);var n=r?this._order.indexOf(r):this._order.length;r&&-1===n?this.fire(new t.ErrorEvent(new Error('Layer with id "'+r+'" does not exist on this map.'))):(this._order.splice(n,0,e),this._layerOrderChanged=!0)}}else this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be moved.")))},r.prototype.removeLayer=function(e){this._checkLoaded();var r=this._layers[e];if(r){r.setEventedParent(null);var i=this._order.indexOf(e);this._order.splice(i,1),this._layerOrderChanged=!0,this._changed=!0,this._removedLayers[e]=r,delete this._layers[e],delete this._updatedLayers[e],delete this._updatedPaintProps[e],r.onRemove&&r.onRemove(this.map)}else this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be removed.")))},r.prototype.getLayer=function(t){return this._layers[t]},r.prototype.setLayerZoomRange=function(e,r,i){this._checkLoaded();var n=this.getLayer(e);n?n.minzoom===r&&n.maxzoom===i||(null!=r&&(n.minzoom=r),null!=i&&(n.maxzoom=i),this._updateLayer(n)):this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot have zoom extent.")))},r.prototype.setFilter=function(e,r,i){void 0===i&&(i={}),this._checkLoaded();var n=this.getLayer(e);if(n){if(!t.isEqual(n.filter,r))return null==r?(n.filter=void 0,void this._updateLayer(n)):void(this._validate(t.validateStyle.filter,"layers."+n.id+".filter",r,null,i)||(n.filter=t.clone(r),this._updateLayer(n)))}else this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be filtered.")))},r.prototype.getFilter=function(e){return t.clone(this.getLayer(e).filter)},r.prototype.setLayoutProperty=function(e,r,i,n){void 0===n&&(n={}),this._checkLoaded();var o=this.getLayer(e);o?t.isEqual(o.getLayoutProperty(r),i)||(o.setLayoutProperty(r,i,n),this._updateLayer(o)):this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be styled.")))},r.prototype.getLayoutProperty=function(e,r){var i=this.getLayer(e);if(i)return i.getLayoutProperty(r);this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style.")))},r.prototype.setPaintProperty=function(e,r,i,n){void 0===n&&(n={}),this._checkLoaded();var o=this.getLayer(e);o?t.isEqual(o.getPaintProperty(r),i)||(o.setPaintProperty(r,i,n)&&this._updateLayer(o),this._changed=!0,this._updatedPaintProps[e]=!0):this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be styled.")))},r.prototype.getPaintProperty=function(t,e){return this.getLayer(t).getPaintProperty(e)},r.prototype.setFeatureState=function(e,r){this._checkLoaded();var i=e.source,n=e.sourceLayer,o=this.sourceCaches[i],a=parseInt(e.id,10);void 0!==o?"vector"!==o.getSource().type||n?isNaN(a)||a<0?this.fire(new t.ErrorEvent(new Error("The feature id parameter must be provided and non-negative."))):o.setFeatureState(n,a,r):this.fire(new t.ErrorEvent(new Error("The sourceLayer parameter must be provided for vector source types."))):this.fire(new t.ErrorEvent(new Error("The source '"+i+"' does not exist in the map's style.")))},r.prototype.getFeatureState=function(e){this._checkLoaded();var r=e.source,i=e.sourceLayer,n=this.sourceCaches[r],o=parseInt(e.id,10);if(void 0!==n)if("vector"!==n.getSource().type||i){if(!(isNaN(o)||o<0))return n.getFeatureState(i,o);this.fire(new t.ErrorEvent(new Error("The feature id parameter must be provided and non-negative.")))}else this.fire(new t.ErrorEvent(new Error("The sourceLayer parameter must be provided for vector source types.")));else this.fire(new t.ErrorEvent(new Error("The source '"+r+"' does not exist in the map's style.")))},r.prototype.getTransition=function(){return t.extend({duration:300,delay:0},this.stylesheet&&this.stylesheet.transition)},r.prototype.serialize=function(){return t.filterObject({version:this.stylesheet.version,name:this.stylesheet.name,metadata:this.stylesheet.metadata,light:this.stylesheet.light,center:this.stylesheet.center,zoom:this.stylesheet.zoom,bearing:this.stylesheet.bearing,pitch:this.stylesheet.pitch,sprite:this.stylesheet.sprite,glyphs:this.stylesheet.glyphs,transition:this.stylesheet.transition,sources:t.mapObject(this.sourceCaches,function(t){return t.serialize()}),layers:this._serializeLayers(this._order)},function(t){return void 0!==t})},r.prototype._updateLayer=function(t){this._updatedLayers[t.id]=!0,t.source&&!this._updatedSources[t.source]&&(this._updatedSources[t.source]="reload",this.sourceCaches[t.source].pause()),this._changed=!0},r.prototype._flattenRenderedFeatures=function(t){for(var e=[],r=this._order.length-1;r>=0;r--)for(var i=this._order[r],n=0,o=t;n<o.length;n+=1){var a=o[n][i];if(a)for(var s=0,u=a;s<u.length;s+=1){var l=u[s];e.push(l)}}return e},r.prototype.queryRenderedFeatures=function(e,r,i){r&&r.filter&&this._validate(t.validateStyle.filter,"queryRenderedFeatures.filter",r.filter);var n={};if(r&&r.layers){if(!Array.isArray(r.layers))return this.fire(new t.ErrorEvent(new Error("parameters.layers must be an Array."))),[];for(var o=0,a=r.layers;o<a.length;o+=1){var s=a[o],u=this._layers[s];if(!u)return this.fire(new t.ErrorEvent(new Error("The layer '"+s+"' does not exist in the map's style and cannot be queried for features."))),[];n[u.source]=!0}}var l=[],p=e.map(function(t){return i.pointCoordinate(t)});for(var c in this.sourceCaches)r.layers&&!n[c]||l.push(D(this.sourceCaches[c],this._layers,p,r,i));return this.placement&&l.push(function(t,e,r,i,n,o){for(var a={},s=n.queryRenderedSymbols(r),u=[],l=0,p=Object.keys(s).map(Number);l<p.length;l+=1){var c=p[l];u.push(o[c])}u.sort(B);for(var h=function(){var e=d[f],r=e.featureIndex.lookupSymbolFeatures(s[e.bucketInstanceId],e.bucketIndex,e.sourceLayerIndex,i.filter,i.layers,t);for(var n in r){var o=a[n]=a[n]||[],u=r[n];u.sort(function(t,r){var i=e.featureSortOrder;if(i){var n=i.indexOf(t.featureIndex);return i.indexOf(r.featureIndex)-n}return r.featureIndex-t.featureIndex});for(var l=0,p=u;l<p.length;l+=1){var c=p[l];o.push(c.feature)}}},f=0,d=u;f<d.length;f+=1)h();var m=function(r){a[r].forEach(function(i){var n=t[r],o=e[n.source].getFeatureState(i.layer["source-layer"],i.id);i.source=i.layer.source,i.layer["source-layer"]&&(i.sourceLayer=i.layer["source-layer"]),i.state=o})};for(var y in a)m(y);return a}(this._layers,this.sourceCaches,e,r,this.placement.collisionIndex,this.placement.retainedQueryData)),this._flattenRenderedFeatures(l)},r.prototype.querySourceFeatures=function(e,r){r&&r.filter&&this._validate(t.validateStyle.filter,"querySourceFeatures.filter",r.filter);var i=this.sourceCaches[e];return i?function(t,e){for(var r=t.getRenderableIds().map(function(e){return t.getTileByID(e)}),i=[],n={},o=0;o<r.length;o++){var a=r[o],s=a.tileID.canonical.key;n[s]||(n[s]=!0,a.querySourceFeatures(i,e))}return i}(i,r):[]},r.prototype.addSourceType=function(t,e,i){return r.getSourceType(t)?i(new Error('A source type called "'+t+'" already exists.')):(r.setSourceType(t,e),e.workerSourceURL?void this.dispatcher.broadcast("loadWorkerSource",{name:t,url:e.workerSourceURL},i):i(null,null))},r.prototype.getLight=function(){return this.light.getLight()},r.prototype.setLight=function(e,r){void 0===r&&(r={}),this._checkLoaded();var i=this.light.getLight(),n=!1;for(var o in e)if(!t.isEqual(e[o],i[o])){n=!0;break}if(n){var a={now:t.browser.now(),transition:t.extend({duration:300,delay:0},this.stylesheet.transition)};this.light.setLight(e,r),this.light.updateTransitions(a)}},r.prototype._validate=function(e,r,i,n,o){return void 0===o&&(o={}),(!o||!1!==o.validate)&&ke(this,e.call(t.validateStyle,t.extend({key:r,style:this.serialize(),value:i,styleSpec:t.styleSpec},n)))},r.prototype._remove=function(){for(var e in this._request&&(this._request.cancel(),this._request=null),this._spriteRequest&&(this._spriteRequest.cancel(),this._spriteRequest=null),t.evented.off("pluginAvailable",this._rtlTextPluginCallback),this.sourceCaches)this.sourceCaches[e].clearTiles();this.dispatcher.remove()},r.prototype._clearSource=function(t){this.sourceCaches[t].clearTiles()},r.prototype._reloadSource=function(t){this.sourceCaches[t].resume(),this.sourceCaches[t].reload()},r.prototype._updateSources=function(t){for(var e in this.sourceCaches)this.sourceCaches[e].update(t)},r.prototype._generateCollisionBoxes=function(){for(var t in this.sourceCaches)this._reloadSource(t)},r.prototype._updatePlacement=function(e,r,i,n){for(var o=!1,a=!1,s={},u=0,l=this._order;u<l.length;u+=1){var p=l[u],c=this._layers[p];if("symbol"===c.type){if(!s[c.source]){var h=this.sourceCaches[c.source];s[c.source]=h.getRenderableIds(!0).map(function(t){return h.getTileByID(t)}).sort(function(t,e){return e.tileID.overscaledZ-t.tileID.overscaledZ||(t.tileID.isLessThan(e.tileID)?-1:1)})}var f=this.crossTileSymbolIndex.addLayer(c,s[c.source],e.center.lng);o=o||f}}this.crossTileSymbolIndex.pruneUnusedLayers(this._order);var d=this._layerOrderChanged||0===i;if((d||!this.pauseablePlacement||this.pauseablePlacement.isDone()&&!this.placement.stillRecent(t.browser.now()))&&(this.pauseablePlacement=new Se(e,this._order,d,r,i,n),this._layerOrderChanged=!1),this.pauseablePlacement.isDone()?this.placement.setStale():(this.pauseablePlacement.continuePlacement(this._order,this._layers,s),this.pauseablePlacement.isDone()&&(this.placement=this.pauseablePlacement.commit(this.placement,t.browser.now()),a=!0),o&&this.pauseablePlacement.placement.setStale()),a||o)for(var m=0,y=this._order;m<y.length;m+=1){var _=y[m],v=this._layers[_];"symbol"===v.type&&this.placement.updateLayerOpacities(v,s[v.source])}return!this.pauseablePlacement.isDone()||this.placement.hasTransitions(t.browser.now())},r.prototype._releaseSymbolFadeTiles=function(){for(var t in this.sourceCaches)this.sourceCaches[t].releaseSymbolFadeTiles()},r.prototype.getImages=function(t,e,r){this.imageManager.getImages(e.icons,r)},r.prototype.getGlyphs=function(t,e,r){this.glyphManager.getGlyphs(e.stacks,r)},r}(t.Evented);Le.getSourceType=function(t){return M[t]},Le.setSourceType=function(t,e){M[t]=e},Le.registerForPluginAvailability=t.registerForPluginAvailability;var De=t.createLayout([{name:"a_pos",type:"Int16",components:2}]),Be=sr("#ifdef GL_ES\nprecision mediump float;\n#else\n#if !defined(lowp)\n#define lowp\n#endif\n#if !defined(mediump)\n#define mediump\n#endif\n#if !defined(highp)\n#define highp\n#endif\n#endif","#ifdef GL_ES\nprecision highp float;\n#else\n#if !defined(lowp)\n#define lowp\n#endif\n#if !defined(mediump)\n#define mediump\n#endif\n#if !defined(highp)\n#define highp\n#endif\n#endif\nvec2 unpack_float(const float packedValue) {int packedIntValue=int(packedValue);int v0=packedIntValue/256;return vec2(v0,packedIntValue-v0*256);}vec2 unpack_opacity(const float packedOpacity) {int intOpacity=int(packedOpacity)/2;return vec2(float(intOpacity)/127.0,mod(packedOpacity,2.0));}vec4 decode_color(const vec2 encodedColor) {return vec4(unpack_float(encodedColor[0])/255.0,unpack_float(encodedColor[1])/255.0\n);}float unpack_mix_vec2(const vec2 packedValue,const float t) {return mix(packedValue[0],packedValue[1],t);}vec4 unpack_mix_color(const vec4 packedColors,const float t) {vec4 minColor=decode_color(vec2(packedColors[0],packedColors[1]));vec4 maxColor=decode_color(vec2(packedColors[2],packedColors[3]));return mix(minColor,maxColor,t);}vec2 get_pattern_pos(const vec2 pixel_coord_upper,const vec2 pixel_coord_lower,const vec2 pattern_size,const float tile_units_to_pixels,const vec2 pos) {vec2 offset=mod(mod(mod(pixel_coord_upper,pattern_size)*256.0,pattern_size)*256.0+pixel_coord_lower,pattern_size);return (tile_units_to_pixels*pos+offset)/pattern_size;}"),Re=sr("uniform vec4 u_color;uniform float u_opacity;void main() {gl_FragColor=u_color*u_opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}"),Oe=sr("uniform vec2 u_pattern_tl_a;uniform vec2 u_pattern_br_a;uniform vec2 u_pattern_tl_b;uniform vec2 u_pattern_br_b;uniform vec2 u_texsize;uniform float u_mix;uniform float u_opacity;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;void main() {vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(u_pattern_tl_a/u_texsize,u_pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(u_pattern_tl_b/u_texsize,u_pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);gl_FragColor=mix(color1,color2,u_mix)*u_opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_pattern_size_a;uniform vec2 u_pattern_size_b;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_scale_a;uniform float u_scale_b;uniform float u_tile_units_to_pixels;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_a*u_pattern_size_a,u_tile_units_to_pixels,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_b*u_pattern_size_b,u_tile_units_to_pixels,a_pos);}"),Fe=sr("#pragma mapbox: define highp vec4 color\n#pragma mapbox: define mediump float radius\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define highp vec4 stroke_color\n#pragma mapbox: define mediump float stroke_width\n#pragma mapbox: define lowp float stroke_opacity\nvarying vec3 v_data;void main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize mediump float radius\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize highp vec4 stroke_color\n#pragma mapbox: initialize mediump float stroke_width\n#pragma mapbox: initialize lowp float stroke_opacity\nvec2 extrude=v_data.xy;float extrude_length=length(extrude);lowp float antialiasblur=v_data.z;float antialiased_blur=-max(blur,antialiasblur);float opacity_t=smoothstep(0.0,antialiased_blur,extrude_length-1.0);float color_t=stroke_width < 0.01 ? 0.0 : smoothstep(antialiased_blur,0.0,extrude_length-radius/(radius+stroke_width));gl_FragColor=opacity_t*mix(color*opacity,stroke_color*stroke_opacity,color_t);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform bool u_scale_with_map;uniform bool u_pitch_with_map;uniform vec2 u_extrude_scale;uniform highp float u_camera_to_center_distance;attribute vec2 a_pos;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define mediump float radius\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define highp vec4 stroke_color\n#pragma mapbox: define mediump float stroke_width\n#pragma mapbox: define lowp float stroke_opacity\nvarying vec3 v_data;void main(void) {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize mediump float radius\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize highp vec4 stroke_color\n#pragma mapbox: initialize mediump float stroke_width\n#pragma mapbox: initialize lowp float stroke_opacity\nvec2 extrude=vec2(mod(a_pos,2.0)*2.0-1.0);vec2 circle_center=floor(a_pos*0.5);if (u_pitch_with_map) {vec2 corner_position=circle_center;if (u_scale_with_map) {corner_position+=extrude*(radius+stroke_width)*u_extrude_scale;} else {vec4 projected_center=u_matrix*vec4(circle_center,0,1);corner_position+=extrude*(radius+stroke_width)*u_extrude_scale*(projected_center.w/u_camera_to_center_distance);}gl_Position=u_matrix*vec4(corner_position,0,1);} else {gl_Position=u_matrix*vec4(circle_center,0,1);if (u_scale_with_map) {gl_Position.xy+=extrude*(radius+stroke_width)*u_extrude_scale*u_camera_to_center_distance;} else {gl_Position.xy+=extrude*(radius+stroke_width)*u_extrude_scale*gl_Position.w;}}lowp float antialiasblur=1.0/DEVICE_PIXEL_RATIO/(radius+stroke_width);v_data=vec3(extrude.x,extrude.y,antialiasblur);}"),Ue=sr("void main() {gl_FragColor=vec4(1.0);}","attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}"),Ve=sr("#pragma mapbox: define highp float weight\nuniform highp float u_intensity;varying vec2 v_extrude;\n#define GAUSS_COEF 0.3989422804014327\nvoid main() {\n#pragma mapbox: initialize highp float weight\nfloat d=-0.5*3.0*3.0*dot(v_extrude,v_extrude);float val=weight*u_intensity*GAUSS_COEF*exp(d);gl_FragColor=vec4(val,1.0,1.0,1.0);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","#pragma mapbox: define highp float weight\n#pragma mapbox: define mediump float radius\nuniform mat4 u_matrix;uniform float u_extrude_scale;uniform float u_opacity;uniform float u_intensity;attribute vec2 a_pos;varying vec2 v_extrude;const highp float ZERO=1.0/255.0/16.0;\n#define GAUSS_COEF 0.3989422804014327\nvoid main(void) {\n#pragma mapbox: initialize highp float weight\n#pragma mapbox: initialize mediump float radius\nvec2 unscaled_extrude=vec2(mod(a_pos,2.0)*2.0-1.0);float S=sqrt(-2.0*log(ZERO/weight/u_intensity/GAUSS_COEF))/3.0;v_extrude=S*unscaled_extrude;vec2 extrude=v_extrude*radius*u_extrude_scale;vec4 pos=vec4(floor(a_pos*0.5)+extrude,0,1);gl_Position=u_matrix*pos;}"),Ne=sr("uniform sampler2D u_image;uniform sampler2D u_color_ramp;uniform float u_opacity;varying vec2 v_pos;void main() {float t=texture2D(u_image,v_pos).r;vec4 color=texture2D(u_color_ramp,vec2(t,0.5));gl_FragColor=color*u_opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(0.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_world;attribute vec2 a_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos*u_world,0,1);v_pos.x=a_pos.x;v_pos.y=1.0-a_pos.y;}"),je=sr("varying float v_placed;varying float v_notUsed;void main() {float alpha=0.5;gl_FragColor=vec4(1.0,0.0,0.0,1.0)*alpha;if (v_placed > 0.5) {gl_FragColor=vec4(0.0,0.0,1.0,0.5)*alpha;}if (v_notUsed > 0.5) {gl_FragColor*=.1;}}","attribute vec2 a_pos;attribute vec2 a_anchor_pos;attribute vec2 a_extrude;attribute vec2 a_placed;uniform mat4 u_matrix;uniform vec2 u_extrude_scale;uniform float u_camera_to_center_distance;varying float v_placed;varying float v_notUsed;void main() {vec4 projectedPoint=u_matrix*vec4(a_anchor_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);gl_Position=u_matrix*vec4(a_pos,0.0,1.0);gl_Position.xy+=a_extrude*u_extrude_scale*gl_Position.w*collision_perspective_ratio;v_placed=a_placed.x;v_notUsed=a_placed.y;}"),qe=sr("uniform float u_overscale_factor;varying float v_placed;varying float v_notUsed;varying float v_radius;varying vec2 v_extrude;varying vec2 v_extrude_scale;void main() {float alpha=0.5;vec4 color=vec4(1.0,0.0,0.0,1.0)*alpha;if (v_placed > 0.5) {color=vec4(0.0,0.0,1.0,0.5)*alpha;}if (v_notUsed > 0.5) {color*=.2;}float extrude_scale_length=length(v_extrude_scale);float extrude_length=length(v_extrude)*extrude_scale_length;float stroke_width=15.0*extrude_scale_length/u_overscale_factor;float radius=v_radius*extrude_scale_length;float distance_to_edge=abs(extrude_length-radius);float opacity_t=smoothstep(-stroke_width,0.0,-distance_to_edge);gl_FragColor=opacity_t*color;}","attribute vec2 a_pos;attribute vec2 a_anchor_pos;attribute vec2 a_extrude;attribute vec2 a_placed;uniform mat4 u_matrix;uniform vec2 u_extrude_scale;uniform float u_camera_to_center_distance;varying float v_placed;varying float v_notUsed;varying float v_radius;varying vec2 v_extrude;varying vec2 v_extrude_scale;void main() {vec4 projectedPoint=u_matrix*vec4(a_anchor_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);gl_Position=u_matrix*vec4(a_pos,0.0,1.0);highp float padding_factor=1.2;gl_Position.xy+=a_extrude*u_extrude_scale*padding_factor*gl_Position.w*collision_perspective_ratio;v_placed=a_placed.x;v_notUsed=a_placed.y;v_radius=abs(a_extrude.y);v_extrude=a_extrude*padding_factor;v_extrude_scale=u_extrude_scale*u_camera_to_center_distance*collision_perspective_ratio;}"),Ze=sr("uniform highp vec4 u_color;void main() {gl_FragColor=u_color;}","attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}"),Ge=sr("#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float opacity\ngl_FragColor=color*opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","attribute vec2 a_pos;uniform mat4 u_matrix;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float opacity\ngl_Position=u_matrix*vec4(a_pos,0,1);}"),Xe=sr("#pragma mapbox: define highp vec4 outline_color\n#pragma mapbox: define lowp float opacity\nvarying vec2 v_pos;void main() {\n#pragma mapbox: initialize highp vec4 outline_color\n#pragma mapbox: initialize lowp float opacity\nfloat dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=outline_color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","attribute vec2 a_pos;uniform mat4 u_matrix;uniform vec2 u_world;varying vec2 v_pos;\n#pragma mapbox: define highp vec4 outline_color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 outline_color\n#pragma mapbox: initialize lowp float opacity\ngl_Position=u_matrix*vec4(a_pos,0,1);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}"),We=sr("uniform vec2 u_texsize;uniform sampler2D u_image;uniform float u_fade;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);float dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=mix(color1,color2,u_fade)*alpha*opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_world;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec4 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;gl_Position=u_matrix*vec4(a_pos,0,1);vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,a_pos);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}"),He=sr("uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);gl_FragColor=mix(color1,color2,u_fade)*opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec4 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileZoomRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);gl_Position=u_matrix*vec4(a_pos,0,1);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileZoomRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileZoomRatio,a_pos);}"),Ke=sr("varying vec4 v_color;void main() {gl_FragColor=v_color;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;uniform float u_vertical_gradient;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec4 v_color;\n#pragma mapbox: define highp float base\n#pragma mapbox: define highp float height\n#pragma mapbox: define highp vec4 color\nvoid main() {\n#pragma mapbox: initialize highp float base\n#pragma mapbox: initialize highp float height\n#pragma mapbox: initialize highp vec4 color\nvec3 normal=a_normal_ed.xyz;base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);gl_Position=u_matrix*vec4(a_pos,t > 0.0 ? height : base,1);float colorvalue=color.r*0.2126+color.g*0.7152+color.b*0.0722;v_color=vec4(0.0,0.0,0.0,1.0);vec4 ambientlight=vec4(0.03,0.03,0.03,1.0);color+=ambientlight;float directional=clamp(dot(normal/16384.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((1.0-colorvalue+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_color.r+=clamp(color.r*directional*u_lightcolor.r,mix(0.0,0.3,1.0-u_lightcolor.r),1.0);v_color.g+=clamp(color.g*directional*u_lightcolor.g,mix(0.0,0.3,1.0-u_lightcolor.g),1.0);v_color.b+=clamp(color.b*directional*u_lightcolor.b,mix(0.0,0.3,1.0-u_lightcolor.b),1.0);}"),Ye=sr("uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\n#pragma mapbox: define lowp float base\n#pragma mapbox: define lowp float height\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float base\n#pragma mapbox: initialize lowp float height\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);vec4 mixedColor=mix(color1,color2,u_fade);gl_FragColor=mixedColor*v_lighting;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_height_factor;uniform vec4 u_scale;uniform float u_vertical_gradient;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\n#pragma mapbox: define lowp float base\n#pragma mapbox: define lowp float height\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float base\n#pragma mapbox: initialize lowp float height\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;vec3 normal=a_normal_ed.xyz;float edgedistance=a_normal_ed.w;vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);float z=t > 0.0 ? height : base;gl_Position=u_matrix*vec4(a_pos,z,1);vec2 pos=normal.x==1.0 && normal.y==0.0 && normal.z==16384.0\n? a_pos\n: vec2(edgedistance,z*u_height_factor);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,pos);v_lighting=vec4(0.0,0.0,0.0,1.0);float directional=clamp(dot(normal/16383.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((0.5+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_lighting.rgb+=clamp(directional*u_lightcolor,mix(vec3(0.0),vec3(0.3),1.0-u_lightcolor),vec3(1.0));}"),Je=sr("uniform sampler2D u_image;uniform float u_opacity;varying vec2 v_pos;void main() {gl_FragColor=texture2D(u_image,v_pos)*u_opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(0.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_world;attribute vec2 a_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos*u_world,0,1);v_pos.x=a_pos.x;v_pos.y=1.0-a_pos.y;}"),$e=sr("#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_dimension;uniform float u_zoom;uniform float u_maxzoom;float getElevation(vec2 coord,float bias) {vec4 data=texture2D(u_image,coord)*255.0;return (data.r+data.g*256.0+data.b*256.0*256.0)/4.0;}void main() {vec2 epsilon=1.0/u_dimension;float a=getElevation(v_pos+vec2(-epsilon.x,-epsilon.y),0.0);float b=getElevation(v_pos+vec2(0,-epsilon.y),0.0);float c=getElevation(v_pos+vec2(epsilon.x,-epsilon.y),0.0);float d=getElevation(v_pos+vec2(-epsilon.x,0),0.0);float e=getElevation(v_pos,0.0);float f=getElevation(v_pos+vec2(epsilon.x,0),0.0);float g=getElevation(v_pos+vec2(-epsilon.x,epsilon.y),0.0);float h=getElevation(v_pos+vec2(0,epsilon.y),0.0);float i=getElevation(v_pos+vec2(epsilon.x,epsilon.y),0.0);float exaggeration=u_zoom < 2.0 ? 0.4 : u_zoom < 4.5 ? 0.35 : 0.3;vec2 deriv=vec2((c+f+f+i)-(a+d+d+g),(g+h+h+i)-(a+b+b+c))/ pow(2.0,(u_zoom-u_maxzoom)*exaggeration+19.2562-u_zoom);gl_FragColor=clamp(vec4(deriv.x/2.0+0.5,deriv.y/2.0+0.5,1.0,1.0),0.0,1.0);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos=(a_texture_pos/8192.0)/2.0+0.25;}"),Qe=sr("uniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_latrange;uniform vec2 u_light;uniform vec4 u_shadow;uniform vec4 u_highlight;uniform vec4 u_accent;\n#define PI 3.141592653589793\nvoid main() {vec4 pixel=texture2D(u_image,v_pos);vec2 deriv=((pixel.rg*2.0)-1.0);float scaleFactor=cos(radians((u_latrange[0]-u_latrange[1])*(1.0-v_pos.y)+u_latrange[1]));float slope=atan(1.25*length(deriv)/scaleFactor);float aspect=deriv.x !=0.0 ? atan(deriv.y,-deriv.x) : PI/2.0*(deriv.y > 0.0 ? 1.0 :-1.0);float intensity=u_light.x;float azimuth=u_light.y+PI;float base=1.875-intensity*1.75;float maxValue=0.5*PI;float scaledSlope=intensity !=0.5 ? ((pow(base,slope)-1.0)/(pow(base,maxValue)-1.0))*maxValue : slope;float accent=cos(scaledSlope);vec4 accent_color=(1.0-accent)*u_accent*clamp(intensity*2.0,0.0,1.0);float shade=abs(mod((aspect+azimuth)/PI+0.5,2.0)-1.0);vec4 shade_color=mix(u_shadow,u_highlight,shade)*sin(scaledSlope)*clamp(intensity*2.0,0.0,1.0);gl_FragColor=accent_color*(1.0-shade_color.a)+shade_color;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos=a_texture_pos/8192.0;}"),tr=sr("#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\nvarying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;void main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/DEVICE_PIXEL_RATIO)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);gl_FragColor=color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","\n#define ANTIALIASING 1.0/DEVICE_PIXEL_RATIO/2.0\n#define scale 0.015873016\nattribute vec4 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform vec2 u_gl_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_linesofar;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float width\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump float gapwidth\n#pragma mapbox: initialize lowp float offset\n#pragma mapbox: initialize mediump float width\nvec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;v_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*2.0;vec2 pos=a_pos_normal.xy;mediump vec2 normal=a_pos_normal.zw;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_gl_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}"),er=sr("#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\nuniform sampler2D u_image;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;varying highp float v_lineprogress;void main() {\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/DEVICE_PIXEL_RATIO)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);vec4 color=texture2D(u_image,vec2(v_lineprogress,0.5));gl_FragColor=color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","\n#define MAX_LINE_DISTANCE 32767.0\n#define ANTIALIASING 1.0/DEVICE_PIXEL_RATIO/2.0\n#define scale 0.015873016\nattribute vec4 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform vec2 u_gl_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_lineprogress;\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float width\nvoid main() {\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump float gapwidth\n#pragma mapbox: initialize lowp float offset\n#pragma mapbox: initialize mediump float width\nvec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;v_lineprogress=(floor(a_data.z/4.0)+a_data.w*64.0)*2.0/MAX_LINE_DISTANCE;vec2 pos=a_pos_normal.xy;mediump vec2 normal=a_pos_normal.zw;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_gl_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}"),rr=sr("uniform vec2 u_texsize;uniform float u_fade;uniform mediump vec4 u_scale;uniform sampler2D u_image;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileZoomRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);vec2 pattern_size_a=vec2(display_size_a.x*fromScale/tileZoomRatio,display_size_a.y);vec2 pattern_size_b=vec2(display_size_b.x*toScale/tileZoomRatio,display_size_b.y);float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/DEVICE_PIXEL_RATIO)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float x_a=mod(v_linesofar/pattern_size_a.x,1.0);float x_b=mod(v_linesofar/pattern_size_b.x,1.0);float y_a=0.5+(v_normal.y*clamp(v_width2.s,0.0,(pattern_size_a.y+2.0)/2.0)/pattern_size_a.y);float y_b=0.5+(v_normal.y*clamp(v_width2.s,0.0,(pattern_size_b.y+2.0)/2.0)/pattern_size_b.y);vec2 pos_a=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,vec2(x_a,y_a));vec2 pos_b=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,vec2(x_b,y_b));vec4 color=mix(texture2D(u_image,pos_a),texture2D(u_image,pos_b),u_fade);gl_FragColor=color*alpha*opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","\n#define scale 0.015873016\n#define LINE_DISTANCE_SCALE 2.0\n#define ANTIALIASING 1.0/DEVICE_PIXEL_RATIO/2.0\nattribute vec4 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform vec2 u_gl_units_to_pixels;uniform mediump float u_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define mediump float width\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float offset\n#pragma mapbox: initialize mediump float gapwidth\n#pragma mapbox: initialize mediump float width\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=a_pos_normal.xy;mediump vec2 normal=a_pos_normal.zw;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_gl_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_linesofar=a_linesofar;v_width2=vec2(outset,inset);}"),ir=sr("uniform sampler2D u_image;uniform float u_sdfgamma;uniform float u_mix;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float width\n#pragma mapbox: define lowp float floorwidth\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump float width\n#pragma mapbox: initialize lowp float floorwidth\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/DEVICE_PIXEL_RATIO)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float sdfdist_a=texture2D(u_image,v_tex_a).a;float sdfdist_b=texture2D(u_image,v_tex_b).a;float sdfdist=mix(sdfdist_a,sdfdist_b,u_mix);alpha*=smoothstep(0.5-u_sdfgamma/floorwidth,0.5+u_sdfgamma/floorwidth,sdfdist);gl_FragColor=color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","\n#define scale 0.015873016\n#define LINE_DISTANCE_SCALE 2.0\n#define ANTIALIASING 1.0/DEVICE_PIXEL_RATIO/2.0\nattribute vec4 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform vec2 u_patternscale_a;uniform float u_tex_y_a;uniform vec2 u_patternscale_b;uniform float u_tex_y_b;uniform vec2 u_gl_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float width\n#pragma mapbox: define lowp float floorwidth\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump float gapwidth\n#pragma mapbox: initialize lowp float offset\n#pragma mapbox: initialize mediump float width\n#pragma mapbox: initialize lowp float floorwidth\nvec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=a_pos_normal.xy;mediump vec2 normal=a_pos_normal.zw;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_gl_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_tex_a=vec2(a_linesofar*u_patternscale_a.x/floorwidth,normal.y*u_patternscale_a.y+u_tex_y_a);v_tex_b=vec2(a_linesofar*u_patternscale_b.x/floorwidth,normal.y*u_patternscale_b.y+u_tex_y_b);v_width2=vec2(outset,inset);}"),nr=sr("uniform float u_fade_t;uniform float u_opacity;uniform sampler2D u_image0;uniform sampler2D u_image1;varying vec2 v_pos0;varying vec2 v_pos1;uniform float u_brightness_low;uniform float u_brightness_high;uniform float u_saturation_factor;uniform float u_contrast_factor;uniform vec3 u_spin_weights;void main() {vec4 color0=texture2D(u_image0,v_pos0);vec4 color1=texture2D(u_image1,v_pos1);if (color0.a > 0.0) {color0.rgb=color0.rgb/color0.a;}if (color1.a > 0.0) {color1.rgb=color1.rgb/color1.a;}vec4 color=mix(color0,color1,u_fade_t);color.a*=u_opacity;vec3 rgb=color.rgb;rgb=vec3(dot(rgb,u_spin_weights.xyz),dot(rgb,u_spin_weights.zxy),dot(rgb,u_spin_weights.yzx));float average=(color.r+color.g+color.b)/3.0;rgb+=(average-rgb)*u_saturation_factor;rgb=(rgb-0.5)*u_contrast_factor+0.5;vec3 u_high_vec=vec3(u_brightness_low,u_brightness_low,u_brightness_low);vec3 u_low_vec=vec3(u_brightness_high,u_brightness_high,u_brightness_high);gl_FragColor=vec4(mix(u_high_vec,u_low_vec,rgb)*color.a,color.a);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_tl_parent;uniform float u_scale_parent;uniform float u_buffer_scale;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos0;varying vec2 v_pos1;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos0=(((a_texture_pos/8192.0)-0.5)/u_buffer_scale )+0.5;v_pos1=(v_pos0*u_scale_parent)+u_tl_parent;}"),or=sr("uniform sampler2D u_texture;\n#pragma mapbox: define lowp float opacity\nvarying vec2 v_tex;varying float v_fade_opacity;void main() {\n#pragma mapbox: initialize lowp float opacity\nlowp float alpha=opacity*v_fade_opacity;gl_FragColor=texture2D(u_texture,v_tex)*alpha;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform highp float u_camera_to_center_distance;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform float u_fade_change;\n#pragma mapbox: define lowp float opacity\nuniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_gl_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform vec2 u_texsize;varying vec2 v_tex;varying float v_fade_opacity;void main() {\n#pragma mapbox: initialize lowp float opacity\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size[0],a_size[1],u_size_t)/256.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size[0]/256.0;} else if (!u_is_size_zoom_constant && u_is_size_feature_constant) {size=u_size;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\ncamera_to_anchor_distance/u_camera_to_center_distance :\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_gl_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale),0.0,1.0);v_tex=a_tex/u_texsize;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;v_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));}"),ar=sr("#define SDF_PX 8.0\n#define EDGE_GAMMA 0.105/DEVICE_PIXEL_RATIO\nuniform bool u_is_halo;\n#pragma mapbox: define highp vec4 fill_color\n#pragma mapbox: define highp vec4 halo_color\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float halo_width\n#pragma mapbox: define lowp float halo_blur\nuniform sampler2D u_texture;uniform highp float u_gamma_scale;uniform bool u_is_text;varying vec2 v_data0;varying vec3 v_data1;void main() {\n#pragma mapbox: initialize highp vec4 fill_color\n#pragma mapbox: initialize highp vec4 halo_color\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float halo_width\n#pragma mapbox: initialize lowp float halo_blur\nvec2 tex=v_data0.xy;float gamma_scale=v_data1.x;float size=v_data1.y;float fade_opacity=v_data1[2];float fontScale=u_is_text ? size/24.0 : size;lowp vec4 color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;if (u_is_halo) {color=halo_color;gamma=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist=texture2D(u_texture,tex).a;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor=color*(alpha*opacity*fade_opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;\n#pragma mapbox: define highp vec4 fill_color\n#pragma mapbox: define highp vec4 halo_color\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float halo_width\n#pragma mapbox: define lowp float halo_blur\nuniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_gl_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;varying vec2 v_data0;varying vec3 v_data1;void main() {\n#pragma mapbox: initialize highp vec4 fill_color\n#pragma mapbox: initialize highp vec4 halo_color\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float halo_width\n#pragma mapbox: initialize lowp float halo_blur\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size[0],a_size[1],u_size_t)/256.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size[0]/256.0;} else if (!u_is_size_zoom_constant && u_is_size_feature_constant) {size=u_size;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\ncamera_to_anchor_distance/u_camera_to_center_distance :\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_gl_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale),0.0,1.0);float gamma_scale=gl_Position.w;vec2 tex=a_tex/u_texsize;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));v_data0=vec2(tex.x,tex.y);v_data1=vec3(gamma_scale,size,interpolated_fade_opacity);}");function sr(t,e){var r=/#pragma mapbox: ([\w]+) ([\w]+) ([\w]+) ([\w]+)/g,i={};return{fragmentSource:t=t.replace(r,function(t,e,r,n,o){return i[o]=!0,"define"===e?"\n#ifndef HAS_UNIFORM_u_"+o+"\nvarying "+r+" "+n+" "+o+";\n#else\nuniform "+r+" "+n+" u_"+o+";\n#endif\n":"\n#ifdef HAS_UNIFORM_u_"+o+"\n "+r+" "+n+" "+o+" = u_"+o+";\n#endif\n"}),vertexSource:e=e.replace(r,function(t,e,r,n,o){var a="float"===n?"vec2":"vec4",s=o.match(/color/)?"color":a;return i[o]?"define"===e?"\n#ifndef HAS_UNIFORM_u_"+o+"\nuniform lowp float a_"+o+"_t;\nattribute "+r+" "+a+" a_"+o+";\nvarying "+r+" "+n+" "+o+";\n#else\nuniform "+r+" "+n+" u_"+o+";\n#endif\n":"vec4"===s?"\n#ifndef HAS_UNIFORM_u_"+o+"\n "+o+" = a_"+o+";\n#else\n "+r+" "+n+" "+o+" = u_"+o+";\n#endif\n":"\n#ifndef HAS_UNIFORM_u_"+o+"\n "+o+" = unpack_mix_"+s+"(a_"+o+", a_"+o+"_t);\n#else\n "+r+" "+n+" "+o+" = u_"+o+";\n#endif\n":"define"===e?"\n#ifndef HAS_UNIFORM_u_"+o+"\nuniform lowp float a_"+o+"_t;\nattribute "+r+" "+a+" a_"+o+";\n#else\nuniform "+r+" "+n+" u_"+o+";\n#endif\n":"vec4"===s?"\n#ifndef HAS_UNIFORM_u_"+o+"\n "+r+" "+n+" "+o+" = a_"+o+";\n#else\n "+r+" "+n+" "+o+" = u_"+o+";\n#endif\n":"\n#ifndef HAS_UNIFORM_u_"+o+"\n "+r+" "+n+" "+o+" = unpack_mix_"+s+"(a_"+o+", a_"+o+"_t);\n#else\n "+r+" "+n+" "+o+" = u_"+o+";\n#endif\n"})}}var ur=Object.freeze({prelude:Be,background:Re,backgroundPattern:Oe,circle:Fe,clippingMask:Ue,heatmap:Ve,heatmapTexture:Ne,collisionBox:je,collisionCircle:qe,debug:Ze,fill:Ge,fillOutline:Xe,fillOutlinePattern:We,fillPattern:He,fillExtrusion:Ke,fillExtrusionPattern:Ye,extrusionTexture:Je,hillshadePrepare:$e,hillshade:Qe,line:tr,lineGradient:er,linePattern:rr,lineSDF:ir,raster:nr,symbolIcon:or,symbolSDF:ar}),lr=function(){this.boundProgram=null,this.boundLayoutVertexBuffer=null,this.boundPaintVertexBuffers=[],this.boundIndexBuffer=null,this.boundVertexOffset=null,this.boundDynamicVertexBuffer=null,this.vao=null};lr.prototype.bind=function(t,e,r,i,n,o,a,s){this.context=t;for(var u=this.boundPaintVertexBuffers.length!==i.length,l=0;!u&&l<i.length;l++)this.boundPaintVertexBuffers[l]!==i[l]&&(u=!0);var p=!this.vao||this.boundProgram!==e||this.boundLayoutVertexBuffer!==r||u||this.boundIndexBuffer!==n||this.boundVertexOffset!==o||this.boundDynamicVertexBuffer!==a||this.boundDynamicVertexBuffer2!==s;!t.extVertexArrayObject||p?this.freshBind(e,r,i,n,o,a,s):(t.bindVertexArrayOES.set(this.vao),a&&a.bind(),n&&n.dynamicDraw&&n.bind(),s&&s.bind())},lr.prototype.freshBind=function(t,e,r,i,n,o,a){var s,u=t.numAttributes,l=this.context,p=l.gl;if(l.extVertexArrayObject)this.vao&&this.destroy(),this.vao=l.extVertexArrayObject.createVertexArrayOES(),l.bindVertexArrayOES.set(this.vao),s=0,this.boundProgram=t,this.boundLayoutVertexBuffer=e,this.boundPaintVertexBuffers=r,this.boundIndexBuffer=i,this.boundVertexOffset=n,this.boundDynamicVertexBuffer=o,this.boundDynamicVertexBuffer2=a;else{s=l.currentNumAttributes||0;for(var c=u;c<s;c++)p.disableVertexAttribArray(c)}e.enableAttributes(p,t);for(var h=0,f=r;h<f.length;h+=1)f[h].enableAttributes(p,t);o&&o.enableAttributes(p,t),a&&a.enableAttributes(p,t),e.bind(),e.setVertexAttribPointers(p,t,n);for(var d=0,m=r;d<m.length;d+=1){var y=m[d];y.bind(),y.setVertexAttribPointers(p,t,n)}o&&(o.bind(),o.setVertexAttribPointers(p,t,n)),i&&i.bind(),a&&(a.bind(),a.setVertexAttribPointers(p,t,n)),l.currentNumAttributes=u},lr.prototype.destroy=function(){this.vao&&(this.context.extVertexArrayObject.deleteVertexArrayOES(this.vao),this.vao=null)};var pr=function(e,r,i,n,o){var a=e.gl;this.program=a.createProgram();var s=i.defines().concat("#define DEVICE_PIXEL_RATIO "+t.browser.devicePixelRatio.toFixed(1));o&&s.push("#define OVERDRAW_INSPECTOR;");var u=s.concat(Be.fragmentSource,r.fragmentSource).join("\n"),l=s.concat(Be.vertexSource,r.vertexSource).join("\n"),p=a.createShader(a.FRAGMENT_SHADER);a.shaderSource(p,u),a.compileShader(p),a.attachShader(this.program,p);var c=a.createShader(a.VERTEX_SHADER);a.shaderSource(c,l),a.compileShader(c),a.attachShader(this.program,c);for(var h=i.layoutAttributes||[],f=0;f<h.length;f++)a.bindAttribLocation(this.program,f,h[f].name);a.linkProgram(this.program),this.numAttributes=a.getProgramParameter(this.program,a.ACTIVE_ATTRIBUTES),this.attributes={};for(var d={},m=0;m<this.numAttributes;m++){var y=a.getActiveAttrib(this.program,m);y&&(this.attributes[y.name]=a.getAttribLocation(this.program,y.name))}for(var _=a.getProgramParameter(this.program,a.ACTIVE_UNIFORMS),v=0;v<_;v++){var g=a.getActiveUniform(this.program,v);g&&(d[g.name]=a.getUniformLocation(this.program,g.name))}this.fixedUniforms=n(e,d),this.binderUniforms=i.getUniforms(e,d)};function cr(e,r,i){var n=1/se(i,1,r.transform.tileZoom),o=Math.pow(2,i.tileID.overscaledZ),a=i.tileSize*Math.pow(2,r.transform.tileZoom)/o,s=a*(i.tileID.canonical.x+i.tileID.wrap*o),u=a*i.tileID.canonical.y;return{u_image:0,u_texsize:i.imageAtlasTexture.size,u_scale:[t.browser.devicePixelRatio,n,e.fromScale,e.toScale],u_fade:e.t,u_pixel_coord_upper:[s>>16,u>>16],u_pixel_coord_lower:[65535&s,65535&u]}}pr.prototype.draw=function(t,e,r,i,n,o,a,s,u,l,p,c,h,f,d,m){var y,_=t.gl;for(var v in t.program.set(this.program),t.setDepthMode(r),t.setStencilMode(i),t.setColorMode(n),t.setCullFace(o),this.fixedUniforms)this.fixedUniforms[v].set(a[v]);f&&f.setUniforms(t,this.binderUniforms,c,{zoom:h});for(var g=(y={},y[_.LINES]=2,y[_.TRIANGLES]=3,y[_.LINE_STRIP]=1,y)[e],x=0,b=p.get();x<b.length;x+=1){var w=b[x],E=w.vaos||(w.vaos={});(E[s]||(E[s]=new lr)).bind(t,this,u,f?f.getPaintVertexBuffers():[],l,w.vertexOffset,d,m),_.drawElements(e,w.primitiveLength*g,_.UNSIGNED_SHORT,w.primitiveOffset*g*2)}};var hr=function(e,r,i){var n=r.style.light,o=n.properties.get("position"),a=[o.x,o.y,o.z],s=t.create$2();"viewport"===n.properties.get("anchor")&&t.fromRotation(s,-r.transform.angle),t.transformMat3(a,a,s);var u=n.properties.get("color");return{u_matrix:e,u_lightpos:a,u_lightintensity:n.properties.get("intensity"),u_lightcolor:[u.r,u.g,u.b],u_vertical_gradient:+i}},fr=function(e,r,i,n,o,a){return t.extend(hr(e,r,i),cr(o,r,a),{u_height_factor:-Math.pow(2,n.overscaledZ)/a.tileSize/8})},dr=function(e,r,i){var n=t.create();t.ortho(n,0,e.width,e.height,0,0,1);var o=e.context.gl;return{u_matrix:n,u_world:[o.drawingBufferWidth,o.drawingBufferHeight],u_image:i,u_opacity:r}},mr=function(t){return{u_matrix:t}},yr=function(e,r,i,n){return t.extend(mr(e),cr(i,r,n))},_r=function(t,e){return{u_matrix:t,u_world:e}},vr=function(e,r,i,n,o){return t.extend(yr(e,r,i,n),{u_world:o})},gr=function(t,e,r,i){var n,o,a=t.transform;if("map"===i.paint.get("circle-pitch-alignment")){var s=se(r,1,a.zoom);n=!0,o=[s,s]}else n=!1,o=a.pixelsToGLUnits;return{u_camera_to_center_distance:a.cameraToCenterDistance,u_scale_with_map:+("map"===i.paint.get("circle-pitch-scale")),u_matrix:t.translatePosMatrix(e.posMatrix,r,i.paint.get("circle-translate"),i.paint.get("circle-translate-anchor")),u_pitch_with_map:+n,u_extrude_scale:o}},xr=function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pixels_to_tile_units:new t.Uniform1f(e,r.u_pixels_to_tile_units),u_extrude_scale:new t.Uniform2f(e,r.u_extrude_scale),u_overscale_factor:new t.Uniform1f(e,r.u_overscale_factor)}},br=function(t,e,r){var i=se(r,1,e.zoom),n=Math.pow(2,e.zoom-r.tileID.overscaledZ),o=r.tileID.overscaleFactor();return{u_matrix:t,u_camera_to_center_distance:e.cameraToCenterDistance,u_pixels_to_tile_units:i,u_extrude_scale:[e.pixelsToGLUnits[0]/(i*n),e.pixelsToGLUnits[1]/(i*n)],u_overscale_factor:o}},wr=function(t,e){return{u_matrix:t,u_color:e}},Er=function(t){return{u_matrix:t}},Sr=function(t,e,r,i){return{u_matrix:t,u_extrude_scale:se(e,1,r),u_intensity:i}},Tr=function(e,r,i){var n=i.paint.get("hillshade-shadow-color"),o=i.paint.get("hillshade-highlight-color"),a=i.paint.get("hillshade-accent-color"),s=i.paint.get("hillshade-illumination-direction")*(Math.PI/180);"viewport"===i.paint.get("hillshade-illumination-anchor")&&(s-=e.transform.angle);var u,l,p,c=!e.options.moving;return{u_matrix:e.transform.calculatePosMatrix(r.tileID.toUnwrapped(),c),u_image:0,u_latrange:(u=r.tileID,l=Math.pow(2,u.canonical.z),p=u.canonical.y,[new t.MercatorCoordinate(0,p/l).toLngLat().lat,new t.MercatorCoordinate(0,(p+1)/l).toLngLat().lat]),u_light:[i.paint.get("hillshade-exaggeration"),s],u_shadow:n,u_highlight:o,u_accent:a}},Ar=function(e,r){var i=e.dem.dim,n=t.create();return t.ortho(n,0,t.EXTENT,-t.EXTENT,0,0,1),t.translate(n,n,[0,-t.EXTENT,0]),{u_matrix:n,u_image:1,u_dimension:[2*i,2*i],u_zoom:e.tileID.overscaledZ,u_maxzoom:r}},zr=function(t,e,r){var i=t.transform;return{u_matrix:Mr(t,e,r),u_ratio:1/se(e,1,i.zoom),u_gl_units_to_pixels:[1/i.pixelsToGLUnits[0],1/i.pixelsToGLUnits[1]]}},Ir=function(e,r,i){return t.extend(zr(e,r,i),{u_image:0})},Cr=function(e,r,i,n){var o=e.transform,a=Pr(r,o);return{u_matrix:Mr(e,r,i),u_texsize:r.imageAtlasTexture.size,u_ratio:1/se(r,1,o.zoom),u_image:0,u_scale:[t.browser.devicePixelRatio,a,n.fromScale,n.toScale],u_fade:n.t,u_gl_units_to_pixels:[1/o.pixelsToGLUnits[0],1/o.pixelsToGLUnits[1]]}},kr=function(e,r,i,n,o){var a=e.transform,s=e.lineAtlas,u=Pr(r,a),l="round"===i.layout.get("line-cap"),p=s.getDash(n.from,l),c=s.getDash(n.to,l),h=p.width*o.fromScale,f=c.width*o.toScale;return t.extend(zr(e,r,i),{u_patternscale_a:[u/h,-p.height/2],u_patternscale_b:[u/f,-c.height/2],u_sdfgamma:s.width/(256*Math.min(h,f)*t.browser.devicePixelRatio)/2,u_image:0,u_tex_y_a:p.y,u_tex_y_b:c.y,u_mix:o.t})};function Pr(t,e){return 1/se(t,1,e.tileZoom)}function Mr(t,e,r){return t.translatePosMatrix(e.tileID.posMatrix,e,r.paint.get("line-translate"),r.paint.get("line-translate-anchor"))}var Lr=function(t,e,r,i,n){return{u_matrix:t,u_tl_parent:e,u_scale_parent:r,u_buffer_scale:1,u_fade_t:i.mix,u_opacity:i.opacity*n.paint.get("raster-opacity"),u_image0:0,u_image1:1,u_brightness_low:n.paint.get("raster-brightness-min"),u_brightness_high:n.paint.get("raster-brightness-max"),u_saturation_factor:(a=n.paint.get("raster-saturation"),a>0?1-1/(1.001-a):-a),u_contrast_factor:(o=n.paint.get("raster-contrast"),o>0?1/(1-o):1+o),u_spin_weights:function(t){t*=Math.PI/180;var e=Math.sin(t),r=Math.cos(t);return[(2*r+1)/3,(-Math.sqrt(3)*e-r+1)/3,(Math.sqrt(3)*e-r+1)/3]}(n.paint.get("raster-hue-rotate"))};var o,a},Dr=function(t,e,r,i,n,o,a,s,u,l){var p=n.transform;return{u_is_size_zoom_constant:+("constant"===t||"source"===t),u_is_size_feature_constant:+("constant"===t||"camera"===t),u_size_t:e?e.uSizeT:0,u_size:e?e.uSize:0,u_camera_to_center_distance:p.cameraToCenterDistance,u_pitch:p.pitch/360*2*Math.PI,u_rotate_symbol:+r,u_aspect_ratio:p.width/p.height,u_fade_change:n.options.fadeDuration?n.symbolFadeChange:1,u_matrix:o,u_label_plane_matrix:a,u_gl_coord_matrix:s,u_is_text:+u,u_pitch_with_map:+i,u_texsize:l,u_texture:0}},Br=function(e,r,i,n,o,a,s,u,l,p,c){var h=o.transform;return t.extend(Dr(e,r,i,n,o,a,s,u,l,p),{u_gamma_scale:n?Math.cos(h._pitch)*h.cameraToCenterDistance:1,u_is_halo:+c})},Rr=function(t,e,r){return{u_matrix:t,u_opacity:e,u_color:r}},Or=function(e,r,i,n,o,a){return t.extend(function(t,e,r,i){var n=r.imageManager.getPattern(t.from),o=r.imageManager.getPattern(t.to),a=r.imageManager.getPixelSize(),s=a.width,u=a.height,l=Math.pow(2,i.tileID.overscaledZ),p=i.tileSize*Math.pow(2,r.transform.tileZoom)/l,c=p*(i.tileID.canonical.x+i.tileID.wrap*l),h=p*i.tileID.canonical.y;return{u_image:0,u_pattern_tl_a:n.tl,u_pattern_br_a:n.br,u_pattern_tl_b:o.tl,u_pattern_br_b:o.br,u_texsize:[s,u],u_mix:e.t,u_pattern_size_a:n.displaySize,u_pattern_size_b:o.displaySize,u_scale_a:e.fromScale,u_scale_b:e.toScale,u_tile_units_to_pixels:1/se(i,1,r.transform.tileZoom),u_pixel_coord_upper:[c>>16,h>>16],u_pixel_coord_lower:[65535&c,65535&h]}}(n,a,i,o),{u_matrix:e,u_opacity:r})},Fr={fillExtrusion:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_lightpos:new t.Uniform3f(e,r.u_lightpos),u_lightintensity:new t.Uniform1f(e,r.u_lightintensity),u_lightcolor:new t.Uniform3f(e,r.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,r.u_vertical_gradient)}},fillExtrusionPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_lightpos:new t.Uniform3f(e,r.u_lightpos),u_lightintensity:new t.Uniform1f(e,r.u_lightintensity),u_lightcolor:new t.Uniform3f(e,r.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,r.u_vertical_gradient),u_height_factor:new t.Uniform1f(e,r.u_height_factor),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform4f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},extrusionTexture:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world),u_image:new t.Uniform1i(e,r.u_image),u_opacity:new t.Uniform1f(e,r.u_opacity)}},fill:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},fillPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform4f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},fillOutline:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world)}},fillOutlinePattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform4f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},circle:function(e,r){return{u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_scale_with_map:new t.Uniform1i(e,r.u_scale_with_map),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_extrude_scale:new t.Uniform2f(e,r.u_extrude_scale),u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},collisionBox:xr,collisionCircle:xr,debug:function(e,r){return{u_color:new t.UniformColor(e,r.u_color),u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},clippingMask:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},heatmap:function(e,r){return{u_extrude_scale:new t.Uniform1f(e,r.u_extrude_scale),u_intensity:new t.Uniform1f(e,r.u_intensity),u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},heatmapTexture:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world),u_image:new t.Uniform1i(e,r.u_image),u_color_ramp:new t.Uniform1i(e,r.u_color_ramp),u_opacity:new t.Uniform1f(e,r.u_opacity)}},hillshade:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_latrange:new t.Uniform2f(e,r.u_latrange),u_light:new t.Uniform2f(e,r.u_light),u_shadow:new t.UniformColor(e,r.u_shadow),u_highlight:new t.UniformColor(e,r.u_highlight),u_accent:new t.UniformColor(e,r.u_accent)}},hillshadePrepare:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_dimension:new t.Uniform2f(e,r.u_dimension),u_zoom:new t.Uniform1f(e,r.u_zoom),u_maxzoom:new t.Uniform1f(e,r.u_maxzoom)}},line:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_gl_units_to_pixels:new t.Uniform2f(e,r.u_gl_units_to_pixels)}},lineGradient:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_gl_units_to_pixels:new t.Uniform2f(e,r.u_gl_units_to_pixels),u_image:new t.Uniform1i(e,r.u_image)}},linePattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_texsize:new t.Uniform2f(e,r.u_texsize),u_ratio:new t.Uniform1f(e,r.u_ratio),u_image:new t.Uniform1i(e,r.u_image),u_gl_units_to_pixels:new t.Uniform2f(e,r.u_gl_units_to_pixels),u_scale:new t.Uniform4f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},lineSDF:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_gl_units_to_pixels:new t.Uniform2f(e,r.u_gl_units_to_pixels),u_patternscale_a:new t.Uniform2f(e,r.u_patternscale_a),u_patternscale_b:new t.Uniform2f(e,r.u_patternscale_b),u_sdfgamma:new t.Uniform1f(e,r.u_sdfgamma),u_image:new t.Uniform1i(e,r.u_image),u_tex_y_a:new t.Uniform1f(e,r.u_tex_y_a),u_tex_y_b:new t.Uniform1f(e,r.u_tex_y_b),u_mix:new t.Uniform1f(e,r.u_mix)}},raster:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_tl_parent:new t.Uniform2f(e,r.u_tl_parent),u_scale_parent:new t.Uniform1f(e,r.u_scale_parent),u_buffer_scale:new t.Uniform1f(e,r.u_buffer_scale),u_fade_t:new t.Uniform1f(e,r.u_fade_t),u_opacity:new t.Uniform1f(e,r.u_opacity),u_image0:new t.Uniform1i(e,r.u_image0),u_image1:new t.Uniform1i(e,r.u_image1),u_brightness_low:new t.Uniform1f(e,r.u_brightness_low),u_brightness_high:new t.Uniform1f(e,r.u_brightness_high),u_saturation_factor:new t.Uniform1f(e,r.u_saturation_factor),u_contrast_factor:new t.Uniform1f(e,r.u_contrast_factor),u_spin_weights:new t.Uniform3f(e,r.u_spin_weights)}},symbolIcon:function(e,r){return{u_is_size_zoom_constant:new t.Uniform1i(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,r.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,r.u_size_t),u_size:new t.Uniform1f(e,r.u_size),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,r.u_pitch),u_rotate_symbol:new t.Uniform1i(e,r.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,r.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,r.u_fade_change),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,r.u_label_plane_matrix),u_gl_coord_matrix:new t.UniformMatrix4f(e,r.u_gl_coord_matrix),u_is_text:new t.Uniform1f(e,r.u_is_text),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_texsize:new t.Uniform2f(e,r.u_texsize),u_texture:new t.Uniform1i(e,r.u_texture)}},symbolSDF:function(e,r){return{u_is_size_zoom_constant:new t.Uniform1i(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,r.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,r.u_size_t),u_size:new t.Uniform1f(e,r.u_size),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,r.u_pitch),u_rotate_symbol:new t.Uniform1i(e,r.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,r.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,r.u_fade_change),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,r.u_label_plane_matrix),u_gl_coord_matrix:new t.UniformMatrix4f(e,r.u_gl_coord_matrix),u_is_text:new t.Uniform1f(e,r.u_is_text),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_texsize:new t.Uniform2f(e,r.u_texsize),u_texture:new t.Uniform1i(e,r.u_texture),u_gamma_scale:new t.Uniform1f(e,r.u_gamma_scale),u_is_halo:new t.Uniform1f(e,r.u_is_halo)}},background:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_opacity:new t.Uniform1f(e,r.u_opacity),u_color:new t.UniformColor(e,r.u_color)}},backgroundPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_opacity:new t.Uniform1f(e,r.u_opacity),u_image:new t.Uniform1i(e,r.u_image),u_pattern_tl_a:new t.Uniform2f(e,r.u_pattern_tl_a),u_pattern_br_a:new t.Uniform2f(e,r.u_pattern_br_a),u_pattern_tl_b:new t.Uniform2f(e,r.u_pattern_tl_b),u_pattern_br_b:new t.Uniform2f(e,r.u_pattern_br_b),u_texsize:new t.Uniform2f(e,r.u_texsize),u_mix:new t.Uniform1f(e,r.u_mix),u_pattern_size_a:new t.Uniform2f(e,r.u_pattern_size_a),u_pattern_size_b:new t.Uniform2f(e,r.u_pattern_size_b),u_scale_a:new t.Uniform1f(e,r.u_scale_a),u_scale_b:new t.Uniform1f(e,r.u_scale_b),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_tile_units_to_pixels:new t.Uniform1f(e,r.u_tile_units_to_pixels)}}};function Ur(e,r){for(var i=e.sort(function(t,e){return t.tileID.isLessThan(e.tileID)?-1:e.tileID.isLessThan(t.tileID)?1:0}),n=0;n<i.length;n++){var o={},a=i[n],s=i.slice(n+1);Vr(a.tileID.wrapped(),a.tileID,s,new t.OverscaledTileID(0,a.tileID.wrap+1,0,0,0),o),a.setMask(o,r)}}function Vr(e,r,i,n,o){for(var a=0;a<i.length;a++){var s=i[a];if(n.isLessThan(s.tileID))break;if(r.key===s.tileID.key)return;if(s.tileID.isChildOf(r)){for(var u=r.children(1/0),l=0;l<u.length;l++)Vr(e,u[l],i.slice(a),n,o);return}}var p=r.overscaledZ-e.overscaledZ,c=new t.CanonicalTileID(p,r.canonical.x-(e.canonical.x<<p),r.canonical.y-(e.canonical.y<<p));o[c.key]=o[c.key]||c}function Nr(t,e,r,i,n){for(var o=t.context,a=o.gl,s=n?t.useProgram("collisionCircle"):t.useProgram("collisionBox"),u=0;u<i.length;u++){var l=i[u],p=e.getTile(l),c=p.getBucket(r);if(c){var h=n?c.collisionCircle:c.collisionBox;h&&s.draw(o,n?a.TRIANGLES:a.LINES,wt.disabled,Et.disabled,t.colorModeForRenderPass(),Tt.disabled,br(l.posMatrix,t.transform,p),r.id,h.layoutVertexBuffer,h.indexBuffer,h.segments,null,t.transform.zoom,null,null,h.collisionVertexBuffer)}}}var jr=t.identity(new Float32Array(16)),qr=t.properties.layout;function Zr(e,r,i,n,o,a,s,u,l,p,c,h){for(var f,d,m=e.context,y=m.gl,_=e.transform,v="map"===u,g="map"===l,x=v&&"point"!==i.layout.get("symbol-placement"),b=v&&!g&&!x,w=e.depthModeForSublayer(0,wt.ReadOnly),E=0,S=n;E<S.length;E+=1){var T=S[E],A=r.getTile(T),z=A.getBucket(i);if(z){var I=o?z.text:z.icon;if(I&&I.segments.get().length){var C=I.programConfigurations.get(i.id),k=o||z.sdfIcons,P=o?z.textSizeData:z.iconSizeData;f||(f=e.useProgram(k?"symbolSDF":"symbolIcon",C),d=t.evaluateSizeForZoom(P,_.zoom,qr.properties[o?"text-size":"icon-size"])),m.activeTexture.set(y.TEXTURE0);var M=void 0;if(o)A.glyphAtlasTexture.bind(y.LINEAR,y.CLAMP_TO_EDGE),M=A.glyphAtlasTexture.size;else{var L=1!==i.layout.get("icon-size").constantOr(0)||z.iconsNeedLinear,D=g||0!==_.pitch;A.imageAtlasTexture.bind(k||e.options.rotating||e.options.zooming||L||D?y.LINEAR:y.NEAREST,y.CLAMP_TO_EDGE),M=A.imageAtlasTexture.size}var B=se(A,1,e.transform.zoom),R=Xt(T.posMatrix,g,v,e.transform,B),O=Wt(T.posMatrix,g,v,e.transform,B);x&&Yt(z,T.posMatrix,e,o,R,O,g,p);var F=e.translatePosMatrix(T.posMatrix,A,a,s),U=x?jr:R,V=e.translatePosMatrix(O,A,a,s,!0),N=void 0;if(k){var j=0!==i.paint.get(o?"text-halo-width":"icon-halo-width").constantOr(1);N=Br(P.functionType,d,b,g,e,F,U,V,o,M,!0),j&&Gr(I,i,e,f,w,c,h,N),N.u_is_halo=0}else N=Dr(P.functionType,d,b,g,e,F,U,V,o,M);Gr(I,i,e,f,w,c,h,N)}}}}function Gr(t,e,r,i,n,o,a,s){var u=r.context,l=u.gl;i.draw(u,l.TRIANGLES,n,o,a,Tt.disabled,s,e.id,t.layoutVertexBuffer,t.indexBuffer,t.segments,e.paint,r.transform.zoom,t.programConfigurations.get(e.id),t.dynamicLayoutVertexBuffer,t.opacityVertexBuffer)}function Xr(t,e,r,i,n,o,a){var s,u,l,p,c,h=t.context.gl,f=r.paint.get("fill-pattern"),d=f&&f.constantOr(1),m=r.getCrossfadeParameters();a?(u=d&&!r.getPaintProperty("fill-outline-color")?"fillOutlinePattern":"fillOutline",s=h.LINES):(u=d?"fillPattern":"fill",s=h.TRIANGLES);for(var y=0,_=i;y<_.length;y+=1){var v=_[y],g=e.getTile(v);if(!d||g.patternsLoaded()){var x=g.getBucket(r);if(x){var b=x.programConfigurations.get(r.id),w=t.useProgram(u,b);d&&(t.context.activeTexture.set(h.TEXTURE0),g.imageAtlasTexture.bind(h.LINEAR,h.CLAMP_TO_EDGE),b.updatePatternPaintBuffers(m));var E=f.constantOr(null);if(E&&g.imageAtlas){var S=g.imageAtlas.patternPositions[E.to],T=g.imageAtlas.patternPositions[E.from];S&&T&&b.setConstantPatternPositions(S,T)}var A=t.translatePosMatrix(v.posMatrix,g,r.paint.get("fill-translate"),r.paint.get("fill-translate-anchor"));if(a){p=x.indexBuffer2,c=x.segments2;var z=[h.drawingBufferWidth,h.drawingBufferHeight];l="fillOutlinePattern"===u&&d?vr(A,t,m,g,z):_r(A,z)}else p=x.indexBuffer,c=x.segments,l=d?yr(A,t,m,g):mr(A);w.draw(t.context,s,n,t.stencilModeForClipping(v),o,Tt.disabled,l,r.id,x.layoutVertexBuffer,p,c,r.paint,t.transform.zoom,b)}}}}function Wr(e,r){var i=e.context,n=i.gl,o=r.viewportFrame;if(e.depthRboNeedsClear&&e.setupOffscreenDepthRenderbuffer(),!o){var a=new t.Texture(i,{width:e.width,height:e.height,data:null},n.RGBA);a.bind(n.LINEAR,n.CLAMP_TO_EDGE),(o=r.viewportFrame=i.createFramebuffer(e.width,e.height)).colorAttachment.set(a.texture)}i.bindFramebuffer.set(o.framebuffer),o.depthAttachment.set(e.depthRbo),e.depthRboNeedsClear&&(i.clear({depth:1}),e.depthRboNeedsClear=!1),i.clear({color:t.Color.transparent}),i.setStencilMode(Et.disabled),i.setDepthMode(new wt(n.LEQUAL,wt.ReadWrite,[0,1])),i.setColorMode(e.colorModeForRenderPass())}function Hr(t,e,r){var i=e.viewportFrame;if(i){var n=t.context,o=n.gl;n.activeTexture.set(o.TEXTURE0),o.bindTexture(o.TEXTURE_2D,i.colorAttachment.get()),t.useProgram("extrusionTexture").draw(n,o.TRIANGLES,wt.disabled,Et.disabled,t.colorModeForRenderPass(),Tt.disabled,dr(t,r,0),e.id,t.viewportBuffer,t.quadTriangleIndexBuffer,t.viewportSegments,e.paint,t.transform.zoom)}}function Kr(t,e,r,i,n,o){var a=t.context,s=a.gl,u=e.fbo;if(u){var l=t.useProgram("hillshade");a.activeTexture.set(s.TEXTURE0),s.bindTexture(s.TEXTURE_2D,u.colorAttachment.get());var p=Tr(t,e,r);e.maskedBoundsBuffer&&e.maskedIndexBuffer&&e.segments?l.draw(a,s.TRIANGLES,i,n,o,Tt.disabled,p,r.id,e.maskedBoundsBuffer,e.maskedIndexBuffer,e.segments):l.draw(a,s.TRIANGLES,i,n,o,Tt.disabled,p,r.id,t.rasterBoundsBuffer,t.quadTriangleIndexBuffer,t.rasterBoundsSegments)}}function Yr(e,r,i,n,o,a,s){var u=e.context,l=u.gl;if(r.dem&&r.dem.data){var p=r.dem.dim,c=r.dem.stride,h=r.dem.getPixels();if(u.activeTexture.set(l.TEXTURE1),u.pixelStoreUnpackPremultiplyAlpha.set(!1),r.demTexture=r.demTexture||e.getTileTexture(c),r.demTexture){var f=r.demTexture;f.update(h,{premultiply:!1}),f.bind(l.NEAREST,l.CLAMP_TO_EDGE)}else r.demTexture=new t.Texture(u,h,l.RGBA,{premultiply:!1}),r.demTexture.bind(l.NEAREST,l.CLAMP_TO_EDGE);u.activeTexture.set(l.TEXTURE0);var d=r.fbo;if(!d){var m=new t.Texture(u,{width:p,height:p,data:null},l.RGBA);m.bind(l.LINEAR,l.CLAMP_TO_EDGE),(d=r.fbo=u.createFramebuffer(p,p)).colorAttachment.set(m.texture)}u.bindFramebuffer.set(d.framebuffer),u.viewport.set([0,0,p,p]),e.useProgram("hillshadePrepare").draw(u,l.TRIANGLES,o,a,s,Tt.disabled,Ar(r,n),i.id,e.rasterBoundsBuffer,e.quadTriangleIndexBuffer,e.rasterBoundsSegments),r.needsHillshadePrepare=!1}}function Jr(e,r,i,n,o){var a=n.paint.get("raster-fade-duration");if(a>0){var s=t.browser.now(),u=(s-e.timeAdded)/a,l=r?(s-r.timeAdded)/a:-1,p=i.getSource(),c=o.coveringZoomLevel({tileSize:p.tileSize,roundZoom:p.roundZoom}),h=!r||Math.abs(r.tileID.overscaledZ-c)>Math.abs(e.tileID.overscaledZ-c),f=h&&e.refreshedUponExpiration?1:t.clamp(h?u:1-l,0,1);return e.refreshedUponExpiration&&u>=1&&(e.refreshedUponExpiration=!1),r?{opacity:1,mix:1-f}:{opacity:f,mix:0}}return{opacity:1,mix:0}}function $r(e,r,i){var n=e.context,o=n.gl,a=i.posMatrix,s=e.useProgram("debug"),u=wt.disabled,l=Et.disabled,p=e.colorModeForRenderPass(),c="$debug";s.draw(n,o.LINE_STRIP,u,l,p,Tt.disabled,wr(a,t.Color.red),c,e.debugBuffer,e.tileBorderIndexBuffer,e.debugSegments);for(var h=function(t,e,r,i){i=i||1;var n,o,a,s,u,l,p,c,h=[];for(n=0,o=t.length;n<o;n++)if(u=Qr[t[n]]){for(c=null,a=0,s=u[1].length;a<s;a+=2)-1===u[1][a]&&-1===u[1][a+1]?c=null:(l=e+u[1][a]*i,p=200-u[1][a+1]*i,c&&h.push(c.x,c.y,l,p),c={x:l,y:p});e+=u[0]*i}return h}(i.toString(),50,0,5),f=new t.StructArrayLayout2i4,d=new t.StructArrayLayout2ui4,m=0;m<h.length;m+=2)f.emplaceBack(h[m],h[m+1]),d.emplaceBack(m,m+1);for(var y=n.createVertexBuffer(f,De.members),_=n.createIndexBuffer(d),v=t.SegmentVector.simpleSegment(0,0,f.length/2,f.length/2),g=r.getTile(i).tileSize,x=t.EXTENT/(Math.pow(2,e.transform.zoom-i.overscaledZ)*g),b=[[-1,-1],[-1,1],[1,-1],[1,1]],w=0;w<b.length;w++){var E=b[w];s.draw(n,o.LINES,u,l,p,Tt.disabled,wr(t.translate([],a,[x*E[0],x*E[1],0]),t.Color.white),c,y,_,v)}s.draw(n,o.LINES,u,l,p,Tt.disabled,wr(a,t.Color.black),c,y,_,v)}var Qr={" ":[16,[]],"!":[10,[5,21,5,7,-1,-1,5,2,4,1,5,0,6,1,5,2]],'"':[16,[4,21,4,14,-1,-1,12,21,12,14]],"#":[21,[11,25,4,-7,-1,-1,17,25,10,-7,-1,-1,4,12,18,12,-1,-1,3,6,17,6]],$:[20,[8,25,8,-4,-1,-1,12,25,12,-4,-1,-1,17,18,15,20,12,21,8,21,5,20,3,18,3,16,4,14,5,13,7,12,13,10,15,9,16,8,17,6,17,3,15,1,12,0,8,0,5,1,3,3]],"%":[24,[21,21,3,0,-1,-1,8,21,10,19,10,17,9,15,7,14,5,14,3,16,3,18,4,20,6,21,8,21,10,20,13,19,16,19,19,20,21,21,-1,-1,17,7,15,6,14,4,14,2,16,0,18,0,20,1,21,3,21,5,19,7,17,7]],"&":[26,[23,12,23,13,22,14,21,14,20,13,19,11,17,6,15,3,13,1,11,0,7,0,5,1,4,2,3,4,3,6,4,8,5,9,12,13,13,14,14,16,14,18,13,20,11,21,9,20,8,18,8,16,9,13,11,10,16,3,18,1,20,0,22,0,23,1,23,2]],"'":[10,[5,19,4,20,5,21,6,20,6,18,5,16,4,15]],"(":[14,[11,25,9,23,7,20,5,16,4,11,4,7,5,2,7,-2,9,-5,11,-7]],")":[14,[3,25,5,23,7,20,9,16,10,11,10,7,9,2,7,-2,5,-5,3,-7]],"*":[16,[8,21,8,9,-1,-1,3,18,13,12,-1,-1,13,18,3,12]],"+":[26,[13,18,13,0,-1,-1,4,9,22,9]],",":[10,[6,1,5,0,4,1,5,2,6,1,6,-1,5,-3,4,-4]],"-":[26,[4,9,22,9]],".":[10,[5,2,4,1,5,0,6,1,5,2]],"/":[22,[20,25,2,-7]],0:[20,[9,21,6,20,4,17,3,12,3,9,4,4,6,1,9,0,11,0,14,1,16,4,17,9,17,12,16,17,14,20,11,21,9,21]],1:[20,[6,17,8,18,11,21,11,0]],2:[20,[4,16,4,17,5,19,6,20,8,21,12,21,14,20,15,19,16,17,16,15,15,13,13,10,3,0,17,0]],3:[20,[5,21,16,21,10,13,13,13,15,12,16,11,17,8,17,6,16,3,14,1,11,0,8,0,5,1,4,2,3,4]],4:[20,[13,21,3,7,18,7,-1,-1,13,21,13,0]],5:[20,[15,21,5,21,4,12,5,13,8,14,11,14,14,13,16,11,17,8,17,6,16,3,14,1,11,0,8,0,5,1,4,2,3,4]],6:[20,[16,18,15,20,12,21,10,21,7,20,5,17,4,12,4,7,5,3,7,1,10,0,11,0,14,1,16,3,17,6,17,7,16,10,14,12,11,13,10,13,7,12,5,10,4,7]],7:[20,[17,21,7,0,-1,-1,3,21,17,21]],8:[20,[8,21,5,20,4,18,4,16,5,14,7,13,11,12,14,11,16,9,17,7,17,4,16,2,15,1,12,0,8,0,5,1,4,2,3,4,3,7,4,9,6,11,9,12,13,13,15,14,16,16,16,18,15,20,12,21,8,21]],9:[20,[16,14,15,11,13,9,10,8,9,8,6,9,4,11,3,14,3,15,4,18,6,20,9,21,10,21,13,20,15,18,16,14,16,9,15,4,13,1,10,0,8,0,5,1,4,3]],":":[10,[5,14,4,13,5,12,6,13,5,14,-1,-1,5,2,4,1,5,0,6,1,5,2]],";":[10,[5,14,4,13,5,12,6,13,5,14,-1,-1,6,1,5,0,4,1,5,2,6,1,6,-1,5,-3,4,-4]],"<":[24,[20,18,4,9,20,0]],"=":[26,[4,12,22,12,-1,-1,4,6,22,6]],">":[24,[4,18,20,9,4,0]],"?":[18,[3,16,3,17,4,19,5,20,7,21,11,21,13,20,14,19,15,17,15,15,14,13,13,12,9,10,9,7,-1,-1,9,2,8,1,9,0,10,1,9,2]],"@":[27,[18,13,17,15,15,16,12,16,10,15,9,14,8,11,8,8,9,6,11,5,14,5,16,6,17,8,-1,-1,12,16,10,14,9,11,9,8,10,6,11,5,-1,-1,18,16,17,8,17,6,19,5,21,5,23,7,24,10,24,12,23,15,22,17,20,19,18,20,15,21,12,21,9,20,7,19,5,17,4,15,3,12,3,9,4,6,5,4,7,2,9,1,12,0,15,0,18,1,20,2,21,3,-1,-1,19,16,18,8,18,6,19,5]],A:[18,[9,21,1,0,-1,-1,9,21,17,0,-1,-1,4,7,14,7]],B:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,-1,-1,4,11,13,11,16,10,17,9,18,7,18,4,17,2,16,1,13,0,4,0]],C:[21,[18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5]],D:[21,[4,21,4,0,-1,-1,4,21,11,21,14,20,16,18,17,16,18,13,18,8,17,5,16,3,14,1,11,0,4,0]],E:[19,[4,21,4,0,-1,-1,4,21,17,21,-1,-1,4,11,12,11,-1,-1,4,0,17,0]],F:[18,[4,21,4,0,-1,-1,4,21,17,21,-1,-1,4,11,12,11]],G:[21,[18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,18,8,-1,-1,13,8,18,8]],H:[22,[4,21,4,0,-1,-1,18,21,18,0,-1,-1,4,11,18,11]],I:[8,[4,21,4,0]],J:[16,[12,21,12,5,11,2,10,1,8,0,6,0,4,1,3,2,2,5,2,7]],K:[21,[4,21,4,0,-1,-1,18,21,4,7,-1,-1,9,12,18,0]],L:[17,[4,21,4,0,-1,-1,4,0,16,0]],M:[24,[4,21,4,0,-1,-1,4,21,12,0,-1,-1,20,21,12,0,-1,-1,20,21,20,0]],N:[22,[4,21,4,0,-1,-1,4,21,18,0,-1,-1,18,21,18,0]],O:[22,[9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21]],P:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,14,17,12,16,11,13,10,4,10]],Q:[22,[9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21,-1,-1,12,4,18,-2]],R:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,4,11,-1,-1,11,11,18,0]],S:[20,[17,18,15,20,12,21,8,21,5,20,3,18,3,16,4,14,5,13,7,12,13,10,15,9,16,8,17,6,17,3,15,1,12,0,8,0,5,1,3,3]],T:[16,[8,21,8,0,-1,-1,1,21,15,21]],U:[22,[4,21,4,6,5,3,7,1,10,0,12,0,15,1,17,3,18,6,18,21]],V:[18,[1,21,9,0,-1,-1,17,21,9,0]],W:[24,[2,21,7,0,-1,-1,12,21,7,0,-1,-1,12,21,17,0,-1,-1,22,21,17,0]],X:[20,[3,21,17,0,-1,-1,17,21,3,0]],Y:[18,[1,21,9,11,9,0,-1,-1,17,21,9,11]],Z:[20,[17,21,3,0,-1,-1,3,21,17,21,-1,-1,3,0,17,0]],"[":[14,[4,25,4,-7,-1,-1,5,25,5,-7,-1,-1,4,25,11,25,-1,-1,4,-7,11,-7]],"\\":[14,[0,21,14,-3]],"]":[14,[9,25,9,-7,-1,-1,10,25,10,-7,-1,-1,3,25,10,25,-1,-1,3,-7,10,-7]],"^":[16,[6,15,8,18,10,15,-1,-1,3,12,8,17,13,12,-1,-1,8,17,8,0]],_:[16,[0,-2,16,-2]],"`":[10,[6,21,5,20,4,18,4,16,5,15,6,16,5,17]],a:[19,[15,14,15,0,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],b:[19,[4,21,4,0,-1,-1,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3]],c:[18,[15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],d:[19,[15,21,15,0,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],e:[18,[3,8,15,8,15,10,14,12,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],f:[12,[10,21,8,21,6,20,5,17,5,0,-1,-1,2,14,9,14]],g:[19,[15,14,15,-2,14,-5,13,-6,11,-7,8,-7,6,-6,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],h:[19,[4,21,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0]],i:[8,[3,21,4,20,5,21,4,22,3,21,-1,-1,4,14,4,0]],j:[10,[5,21,6,20,7,21,6,22,5,21,-1,-1,6,14,6,-3,5,-6,3,-7,1,-7]],k:[17,[4,21,4,0,-1,-1,14,14,4,4,-1,-1,8,8,15,0]],l:[8,[4,21,4,0]],m:[30,[4,14,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0,-1,-1,15,10,18,13,20,14,23,14,25,13,26,10,26,0]],n:[19,[4,14,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0]],o:[19,[8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3,16,6,16,8,15,11,13,13,11,14,8,14]],p:[19,[4,14,4,-7,-1,-1,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3]],q:[19,[15,14,15,-7,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],r:[13,[4,14,4,0,-1,-1,4,8,5,11,7,13,9,14,12,14]],s:[17,[14,11,13,13,10,14,7,14,4,13,3,11,4,9,6,8,11,7,13,6,14,4,14,3,13,1,10,0,7,0,4,1,3,3]],t:[12,[5,21,5,4,6,1,8,0,10,0,-1,-1,2,14,9,14]],u:[19,[4,14,4,4,5,1,7,0,10,0,12,1,15,4,-1,-1,15,14,15,0]],v:[16,[2,14,8,0,-1,-1,14,14,8,0]],w:[22,[3,14,7,0,-1,-1,11,14,7,0,-1,-1,11,14,15,0,-1,-1,19,14,15,0]],x:[17,[3,14,14,0,-1,-1,14,14,3,0]],y:[16,[2,14,8,0,-1,-1,14,14,8,0,6,-4,4,-6,2,-7,1,-7]],z:[17,[14,14,3,0,-1,-1,3,14,14,14,-1,-1,3,0,14,0]],"{":[14,[9,25,7,24,6,23,5,21,5,19,6,17,7,16,8,14,8,12,6,10,-1,-1,7,24,6,22,6,20,7,18,8,17,9,15,9,13,8,11,4,9,8,7,9,5,9,3,8,1,7,0,6,-2,6,-4,7,-6,-1,-1,6,8,8,6,8,4,7,2,6,1,5,-1,5,-3,6,-5,7,-6,9,-7]],"|":[8,[4,25,4,-7]],"}":[14,[5,25,7,24,8,23,9,21,9,19,8,17,7,16,6,14,6,12,8,10,-1,-1,7,24,8,22,8,20,7,18,6,17,5,15,5,13,6,11,10,9,6,7,5,5,5,3,6,1,7,0,8,-2,8,-4,7,-6,-1,-1,8,8,6,6,6,4,7,2,8,1,9,-1,9,-3,8,-5,7,-6,5,-7]],"~":[24,[3,6,3,8,4,11,6,12,8,12,10,11,14,8,16,7,18,7,20,8,21,10,-1,-1,3,8,4,10,6,11,8,11,10,10,14,7,16,6,18,6,20,7,21,10,21,12]]},ti={symbol:function(t,e,r,i){if("translucent"===t.renderPass){var n=Et.disabled,o=t.colorModeForRenderPass();0!==r.paint.get("icon-opacity").constantOr(1)&&Zr(t,e,r,i,!1,r.paint.get("icon-translate"),r.paint.get("icon-translate-anchor"),r.layout.get("icon-rotation-alignment"),r.layout.get("icon-pitch-alignment"),r.layout.get("icon-keep-upright"),n,o),0!==r.paint.get("text-opacity").constantOr(1)&&Zr(t,e,r,i,!0,r.paint.get("text-translate"),r.paint.get("text-translate-anchor"),r.layout.get("text-rotation-alignment"),r.layout.get("text-pitch-alignment"),r.layout.get("text-keep-upright"),n,o),e.map.showCollisionBoxes&&function(t,e,r,i){Nr(t,e,r,i,!1),Nr(t,e,r,i,!0)}(t,e,r,i)}},circle:function(t,e,r,i){if("translucent"===t.renderPass){var n=r.paint.get("circle-opacity"),o=r.paint.get("circle-stroke-width"),a=r.paint.get("circle-stroke-opacity");if(0!==n.constantOr(1)||0!==o.constantOr(1)&&0!==a.constantOr(1))for(var s=t.context,u=s.gl,l=t.depthModeForSublayer(0,wt.ReadOnly),p=Et.disabled,c=t.colorModeForRenderPass(),h=0;h<i.length;h++){var f=i[h],d=e.getTile(f),m=d.getBucket(r);if(m){var y=m.programConfigurations.get(r.id);t.useProgram("circle",y).draw(s,u.TRIANGLES,l,p,c,Tt.disabled,gr(t,f,d,r),r.id,m.layoutVertexBuffer,m.indexBuffer,m.segments,r.paint,t.transform.zoom,y)}}}},heatmap:function(e,r,i,n){if(0!==i.paint.get("heatmap-opacity"))if("offscreen"===e.renderPass){var o=e.context,a=o.gl,s=e.depthModeForSublayer(0,wt.ReadOnly),u=Et.disabled,l=new St([a.ONE,a.ONE],t.Color.transparent,[!0,!0,!0,!0]);!function(t,e,r){var i=t.gl;t.activeTexture.set(i.TEXTURE1),t.viewport.set([0,0,e.width/4,e.height/4]);var n=r.heatmapFbo;if(n)i.bindTexture(i.TEXTURE_2D,n.colorAttachment.get()),t.bindFramebuffer.set(n.framebuffer);else{var o=i.createTexture();i.bindTexture(i.TEXTURE_2D,o),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),n=r.heatmapFbo=t.createFramebuffer(e.width/4,e.height/4),function t(e,r,i,n){var o=e.gl;o.texImage2D(o.TEXTURE_2D,0,o.RGBA,r.width/4,r.height/4,0,o.RGBA,e.extTextureHalfFloat?e.extTextureHalfFloat.HALF_FLOAT_OES:o.UNSIGNED_BYTE,null),n.colorAttachment.set(i),e.extTextureHalfFloat&&o.checkFramebufferStatus(o.FRAMEBUFFER)!==o.FRAMEBUFFER_COMPLETE&&(e.extTextureHalfFloat=null,n.colorAttachment.setDirty(),t(e,r,i,n))}(t,e,o,n)}}(o,e,i),o.clear({color:t.Color.transparent});for(var p=0;p<n.length;p++){var c=n[p];if(!r.hasRenderableParent(c)){var h=r.getTile(c),f=h.getBucket(i);if(f){var d=f.programConfigurations.get(i.id),m=e.useProgram("heatmap",d),y=e.transform.zoom;m.draw(o,a.TRIANGLES,s,u,l,Tt.disabled,Sr(c.posMatrix,h,y,i.paint.get("heatmap-intensity")),i.id,f.layoutVertexBuffer,f.indexBuffer,f.segments,i.paint,e.transform.zoom,d)}}}o.viewport.set([0,0,e.width,e.height])}else"translucent"===e.renderPass&&(e.context.setColorMode(e.colorModeForRenderPass()),function(e,r){var i=e.context,n=i.gl,o=r.heatmapFbo;if(o){i.activeTexture.set(n.TEXTURE0),n.bindTexture(n.TEXTURE_2D,o.colorAttachment.get()),i.activeTexture.set(n.TEXTURE1);var a=r.colorRampTexture;a||(a=r.colorRampTexture=new t.Texture(i,r.colorRamp,n.RGBA)),a.bind(n.LINEAR,n.CLAMP_TO_EDGE),e.useProgram("heatmapTexture").draw(i,n.TRIANGLES,wt.disabled,Et.disabled,e.colorModeForRenderPass(),Tt.disabled,function(e,r,i,n){var o=t.create();t.ortho(o,0,e.width,e.height,0,0,1);var a=e.context.gl;return{u_matrix:o,u_world:[a.drawingBufferWidth,a.drawingBufferHeight],u_image:i,u_color_ramp:n,u_opacity:r.paint.get("heatmap-opacity")}}(e,r,0,1),r.id,e.viewportBuffer,e.quadTriangleIndexBuffer,e.viewportSegments,r.paint,e.transform.zoom)}}(e,i))},line:function(e,r,i,n){if("translucent"===e.renderPass){var o=i.paint.get("line-opacity"),a=i.paint.get("line-width");if(0!==o.constantOr(1)&&0!==a.constantOr(1)){var s=e.depthModeForSublayer(0,wt.ReadOnly),u=e.colorModeForRenderPass(),l=i.paint.get("line-dasharray"),p=i.paint.get("line-pattern"),c=p.constantOr(1),h=i.paint.get("line-gradient"),f=i.getCrossfadeParameters(),d=l?"lineSDF":c?"linePattern":h?"lineGradient":"line",m=e.context,y=m.gl,_=!0;if(h){m.activeTexture.set(y.TEXTURE0);var v=i.gradientTexture;if(!i.gradient)return;v||(v=i.gradientTexture=new t.Texture(m,i.gradient,y.RGBA)),v.bind(y.LINEAR,y.CLAMP_TO_EDGE)}for(var g=0,x=n;g<x.length;g+=1){var b=x[g],w=r.getTile(b);if(!c||w.patternsLoaded()){var E=w.getBucket(i);if(E){var S=E.programConfigurations.get(i.id),T=e.context.program.get(),A=e.useProgram(d,S),z=_||A.program!==T,I=p.constantOr(null);if(I&&w.imageAtlas){var C=w.imageAtlas.patternPositions[I.to],k=w.imageAtlas.patternPositions[I.from];C&&k&&S.setConstantPatternPositions(C,k)}var P=l?kr(e,w,i,l,f):c?Cr(e,w,i,f):h?Ir(e,w,i):zr(e,w,i);l&&(z||e.lineAtlas.dirty)?(m.activeTexture.set(y.TEXTURE0),e.lineAtlas.bind(m)):c&&(m.activeTexture.set(y.TEXTURE0),w.imageAtlasTexture.bind(y.LINEAR,y.CLAMP_TO_EDGE),S.updatePatternPaintBuffers(f)),A.draw(m,y.TRIANGLES,s,e.stencilModeForClipping(b),u,Tt.disabled,P,i.id,E.layoutVertexBuffer,E.indexBuffer,E.segments,i.paint,e.transform.zoom,S),_=!1}}}}}},fill:function(e,r,i,n){var o=i.paint.get("fill-color"),a=i.paint.get("fill-opacity");if(0!==a.constantOr(1)){var s=e.colorModeForRenderPass(),u=i.paint.get("fill-pattern").constantOr(1)||1!==o.constantOr(t.Color.transparent).a||1!==a.constantOr(0)?"translucent":"opaque";if(e.renderPass===u){var l=e.depthModeForSublayer(1,"opaque"===e.renderPass?wt.ReadWrite:wt.ReadOnly);Xr(e,r,i,n,l,s,!1)}if("translucent"===e.renderPass&&i.paint.get("fill-antialias")){var p=e.depthModeForSublayer(i.getPaintProperty("fill-outline-color")?2:0,wt.ReadOnly);Xr(e,r,i,n,p,s,!0)}}},"fill-extrusion":function(t,e,r,i){if(0!==r.paint.get("fill-extrusion-opacity"))if("offscreen"===t.renderPass){Wr(t,r);var n=new wt(t.context.gl.LEQUAL,wt.ReadWrite,[0,1]),o=Et.disabled,a=t.colorModeForRenderPass();!function(t,e,r,i,n,o,a){for(var s=t.context,u=s.gl,l=r.paint.get("fill-extrusion-pattern"),p=l.constantOr(1),c=r.getCrossfadeParameters(),h=0,f=i;h<f.length;h+=1){var d=f[h],m=e.getTile(d),y=m.getBucket(r);if(y){var _=y.programConfigurations.get(r.id),v=t.useProgram(p?"fillExtrusionPattern":"fillExtrusion",_);p&&(t.context.activeTexture.set(u.TEXTURE0),m.imageAtlasTexture.bind(u.LINEAR,u.CLAMP_TO_EDGE),_.updatePatternPaintBuffers(c));var g=l.constantOr(null);if(g&&m.imageAtlas){var x=m.imageAtlas.patternPositions[g.to],b=m.imageAtlas.patternPositions[g.from];x&&b&&_.setConstantPatternPositions(x,b)}var w=t.translatePosMatrix(d.posMatrix,m,r.paint.get("fill-extrusion-translate"),r.paint.get("fill-extrusion-translate-anchor")),E=r.paint.get("fill-extrusion-vertical-gradient"),S=p?fr(w,t,E,d,c,m):hr(w,t,E);v.draw(s,s.gl.TRIANGLES,n,o,a,Tt.backCCW,S,r.id,y.layoutVertexBuffer,y.indexBuffer,y.segments,r.paint,t.transform.zoom,_)}}}(t,e,r,i,n,o,a)}else"translucent"===t.renderPass&&Hr(t,r,r.paint.get("fill-extrusion-opacity"))},hillshade:function(t,e,r,i){if("offscreen"===t.renderPass||"translucent"===t.renderPass){for(var n=t.context,o=e.getSource().maxzoom,a=t.depthModeForSublayer(0,wt.ReadOnly),s=Et.disabled,u=t.colorModeForRenderPass(),l=0,p=i;l<p.length;l+=1){var c=p[l],h=e.getTile(c);h.needsHillshadePrepare&&"offscreen"===t.renderPass?Yr(t,h,r,o,a,s,u):"translucent"===t.renderPass&&Kr(t,h,r,a,s,u)}n.viewport.set([0,0,t.width,t.height])}},raster:function(t,e,r,i){if("translucent"===t.renderPass&&0!==r.paint.get("raster-opacity"))for(var n=t.context,o=n.gl,a=e.getSource(),s=t.useProgram("raster"),u=Et.disabled,l=t.colorModeForRenderPass(),p=i.length&&i[0].overscaledZ,c=!t.options.moving,h=0,f=i;h<f.length;h+=1){var d=f[h],m=t.depthModeForSublayer(d.overscaledZ-p,1===r.paint.get("raster-opacity")?wt.ReadWrite:wt.ReadOnly,o.LESS),y=e.getTile(d),_=t.transform.calculatePosMatrix(d.toUnwrapped(),c);y.registerFadeDuration(r.paint.get("raster-fade-duration"));var v=e.findLoadedParent(d,0),g=Jr(y,v,e,r,t.transform),x=void 0,b=void 0,w="nearest"===r.paint.get("raster-resampling")?o.NEAREST:o.LINEAR;n.activeTexture.set(o.TEXTURE0),y.texture.bind(w,o.CLAMP_TO_EDGE,o.LINEAR_MIPMAP_NEAREST),n.activeTexture.set(o.TEXTURE1),v?(v.texture.bind(w,o.CLAMP_TO_EDGE,o.LINEAR_MIPMAP_NEAREST),x=Math.pow(2,v.tileID.overscaledZ-y.tileID.overscaledZ),b=[y.tileID.canonical.x*x%1,y.tileID.canonical.y*x%1]):y.texture.bind(w,o.CLAMP_TO_EDGE,o.LINEAR_MIPMAP_NEAREST);var E=Lr(_,b||[0,0],x||1,g,r);a instanceof C?s.draw(n,o.TRIANGLES,m,u,l,Tt.disabled,E,r.id,a.boundsBuffer,t.quadTriangleIndexBuffer,a.boundsSegments):y.maskedBoundsBuffer&&y.maskedIndexBuffer&&y.segments?s.draw(n,o.TRIANGLES,m,u,l,Tt.disabled,E,r.id,y.maskedBoundsBuffer,y.maskedIndexBuffer,y.segments,r.paint,t.transform.zoom):s.draw(n,o.TRIANGLES,m,u,l,Tt.disabled,E,r.id,t.rasterBoundsBuffer,t.quadTriangleIndexBuffer,t.rasterBoundsSegments)}},background:function(t,e,r){var i=r.paint.get("background-color"),n=r.paint.get("background-opacity");if(0!==n){var o=t.context,a=o.gl,s=t.transform,u=s.tileSize,l=r.paint.get("background-pattern");if(!t.isPatternMissing(l)){var p=l||1!==i.a||1!==n?"translucent":"opaque";if(t.renderPass===p){var c=Et.disabled,h=t.depthModeForSublayer(0,"opaque"===p?wt.ReadWrite:wt.ReadOnly),f=t.colorModeForRenderPass(),d=t.useProgram(l?"backgroundPattern":"background"),m=s.coveringTiles({tileSize:u});l&&(o.activeTexture.set(a.TEXTURE0),t.imageManager.bind(t.context));for(var y=r.getCrossfadeParameters(),_=0,v=m;_<v.length;_+=1){var g=v[_],x=t.transform.calculatePosMatrix(g.toUnwrapped()),b=l?Or(x,n,t,l,{tileID:g,tileSize:u},y):Rr(x,n,i);d.draw(o,a.TRIANGLES,h,c,f,Tt.disabled,b,r.id,t.tileExtentBuffer,t.quadTriangleIndexBuffer,t.tileExtentSegments)}}}}},debug:function(t,e,r){for(var i=0;i<r.length;i++)$r(t,e,r[i])},custom:function(t,e,r){var i=t.context,n=r.implementation;if("offscreen"===t.renderPass){var o=n.prerender;o&&(t.setCustomLayerDefaults(),o.call(n,i.gl,t.transform.customLayerMatrix()),i.setDirty(),t.setBaseState()),"3d"===n.renderingMode&&(t.setCustomLayerDefaults(),Wr(t,r),n.render(i.gl,t.transform.customLayerMatrix()),i.setDirty(),t.setBaseState())}else if("translucent"===t.renderPass)if("3d"===n.renderingMode)Hr(t,r,1);else{t.setCustomLayerDefaults(),i.setColorMode(t.colorModeForRenderPass()),i.setStencilMode(Et.disabled);var a=t.depthModeForSublayer(0,wt.ReadOnly);i.setDepthMode(a),n.render(i.gl,t.transform.customLayerMatrix()),i.setDirty(),t.setBaseState(),i.bindFramebuffer.set(null)}}},ei=function(e,r){this.context=new At(e),this.transform=r,this._tileTextures={},this.setup(),this.numSublayers=zt.maxUnderzooming+zt.maxOverzooming+1,this.depthEpsilon=1/Math.pow(2,16),this.depthRboNeedsClear=!0,this.emptyProgramConfiguration=new t.ProgramConfiguration,this.crossTileSymbolIndex=new Ce};function ri(t,e){if(t.y>e.y){var r=t;t=e,e=r}return{x0:t.x,y0:t.y,x1:e.x,y1:e.y,dx:e.x-t.x,dy:e.y-t.y}}function ii(t,e,r,i,n){var o=Math.max(r,Math.floor(e.y0)),a=Math.min(i,Math.ceil(e.y1));if(t.x0===e.x0&&t.y0===e.y0?t.x0+e.dy/t.dy*t.dx<e.x1:t.x1-e.dy/t.dy*t.dx<e.x0){var s=t;t=e,e=s}for(var u=t.dx/t.dy,l=e.dx/e.dy,p=t.dx>0,c=e.dx<0,h=o;h<a;h++){var f=u*Math.max(0,Math.min(t.dy,h+p-t.y0))+t.x0,d=l*Math.max(0,Math.min(e.dy,h+c-e.y0))+e.x0;n(Math.floor(d),Math.ceil(f),h)}}function ni(t,e,r,i,n,o){var a,s=ri(t,e),u=ri(e,r),l=ri(r,t);s.dy>u.dy&&(a=s,s=u,u=a),s.dy>l.dy&&(a=s,s=l,l=a),u.dy>l.dy&&(a=u,u=l,l=a),s.dy&&ii(l,s,i,n,o),u.dy&&ii(l,u,i,n,o)}ei.prototype.resize=function(e,r){var i=this.context.gl;if(this.width=e*t.browser.devicePixelRatio,this.height=r*t.browser.devicePixelRatio,this.context.viewport.set([0,0,this.width,this.height]),this.style)for(var n=0,o=this.style._order;n<o.length;n+=1){var a=o[n];this.style._layers[a].resize()}this.depthRbo&&(i.deleteRenderbuffer(this.depthRbo),this.depthRbo=null)},ei.prototype.setup=function(){var e=this.context,r=new t.StructArrayLayout2i4;r.emplaceBack(0,0),r.emplaceBack(t.EXTENT,0),r.emplaceBack(0,t.EXTENT),r.emplaceBack(t.EXTENT,t.EXTENT),this.tileExtentBuffer=e.createVertexBuffer(r,De.members),this.tileExtentSegments=t.SegmentVector.simpleSegment(0,0,4,2);var i=new t.StructArrayLayout2i4;i.emplaceBack(0,0),i.emplaceBack(t.EXTENT,0),i.emplaceBack(0,t.EXTENT),i.emplaceBack(t.EXTENT,t.EXTENT),this.debugBuffer=e.createVertexBuffer(i,De.members),this.debugSegments=t.SegmentVector.simpleSegment(0,0,4,5);var n=new t.StructArrayLayout4i8;n.emplaceBack(0,0,0,0),n.emplaceBack(t.EXTENT,0,t.EXTENT,0),n.emplaceBack(0,t.EXTENT,0,t.EXTENT),n.emplaceBack(t.EXTENT,t.EXTENT,t.EXTENT,t.EXTENT),this.rasterBoundsBuffer=e.createVertexBuffer(n,t.rasterBoundsAttributes.members),this.rasterBoundsSegments=t.SegmentVector.simpleSegment(0,0,4,2);var o=new t.StructArrayLayout2i4;o.emplaceBack(0,0),o.emplaceBack(1,0),o.emplaceBack(0,1),o.emplaceBack(1,1),this.viewportBuffer=e.createVertexBuffer(o,De.members),this.viewportSegments=t.SegmentVector.simpleSegment(0,0,4,2);var a=new t.StructArrayLayout1ui2;a.emplaceBack(0),a.emplaceBack(1),a.emplaceBack(3),a.emplaceBack(2),a.emplaceBack(0),this.tileBorderIndexBuffer=e.createIndexBuffer(a);var s=new t.StructArrayLayout3ui6;s.emplaceBack(0,1,2),s.emplaceBack(2,1,3),this.quadTriangleIndexBuffer=e.createIndexBuffer(s);var u=this.context.gl;this.stencilClearMode=new Et({func:u.ALWAYS,mask:0},0,255,u.ZERO,u.ZERO,u.ZERO)},ei.prototype.clearStencil=function(){var e=this.context,r=e.gl,i=t.create();t.ortho(i,0,this.width,this.height,0,0,1),t.scale(i,i,[r.drawingBufferWidth,r.drawingBufferHeight,0]),this.useProgram("clippingMask").draw(e,r.TRIANGLES,wt.disabled,this.stencilClearMode,St.disabled,Tt.disabled,Er(i),"$clipping",this.viewportBuffer,this.quadTriangleIndexBuffer,this.viewportSegments)},ei.prototype._renderTileClippingMasks=function(t){var e=this.context,r=e.gl;e.setColorMode(St.disabled),e.setDepthMode(wt.disabled);var i=this.useProgram("clippingMask"),n=1;this._tileClippingMaskIDs={};for(var o=0,a=t;o<a.length;o+=1){var s=a[o],u=this._tileClippingMaskIDs[s.key]=n++;i.draw(e,r.TRIANGLES,wt.disabled,new Et({func:r.ALWAYS,mask:0},u,255,r.KEEP,r.KEEP,r.REPLACE),St.disabled,Tt.disabled,Er(s.posMatrix),"$clipping",this.tileExtentBuffer,this.quadTriangleIndexBuffer,this.tileExtentSegments)}},ei.prototype.stencilModeForClipping=function(t){var e=this.context.gl;return new Et({func:e.EQUAL,mask:255},this._tileClippingMaskIDs[t.key],0,e.KEEP,e.KEEP,e.REPLACE)},ei.prototype.colorModeForRenderPass=function(){var e=this.context.gl;return this._showOverdrawInspector?new St([e.CONSTANT_COLOR,e.ONE],new t.Color(1/8,1/8,1/8,0),[!0,!0,!0,!0]):"opaque"===this.renderPass?St.unblended:St.alphaBlended},ei.prototype.depthModeForSublayer=function(t,e,r){var i=1-((1+this.currentLayer)*this.numSublayers+t)*this.depthEpsilon;return new wt(r||this.context.gl.LEQUAL,e,[i,i])},ei.prototype.render=function(e,r){this.style=e,this.options=r,this.lineAtlas=e.lineAtlas,this.imageManager=e.imageManager,this.glyphManager=e.glyphManager,this.symbolFadeChange=e.placement.symbolFadeChange(t.browser.now());var i=this.style._order,n=this.style.sourceCaches;for(var o in n){var a=n[o];a.used&&a.prepare(this.context)}var s,u={},l={},p={};for(var c in n){var h=n[c];u[c]=h.getVisibleCoordinates(),l[c]=u[c].slice().reverse(),p[c]=h.getVisibleCoordinates(!0).reverse()}for(var f in n){var d=n[f],m=d.getSource();if("raster"===m.type||"raster-dem"===m.type){for(var y=[],_=0,v=u[f];_<v.length;_+=1){var g=v[_];y.push(d.getTile(g))}Ur(y,this.context)}}this.renderPass="offscreen",this.depthRboNeedsClear=!0;for(var x=0,b=i;x<b.length;x+=1){var w=b[x],E=this.style._layers[w];if(E.hasOffscreenPass()&&!E.isHidden(this.transform.zoom)){var S=l[E.source];("custom"===E.type||S.length)&&this.renderLayer(this,n[E.source],E,S)}}for(this.context.bindFramebuffer.set(null),this.context.clear({color:r.showOverdrawInspector?t.Color.black:t.Color.transparent,depth:1}),this._showOverdrawInspector=r.showOverdrawInspector,this.depthRange=(e._order.length+2)*this.numSublayers*this.depthEpsilon,this.renderPass="opaque",this.currentLayer=i.length-1;this.currentLayer>=0;this.currentLayer--){var T=this.style._layers[i[this.currentLayer]],A=n[T.source],z=u[T.source];T.source!==s&&A&&(this.clearStencil(),A.getSource().isTileClipped&&this._renderTileClippingMasks(z)),this.renderLayer(this,A,T,z),s=T.source}for(this.renderPass="translucent",this.currentLayer=0,s=null;this.currentLayer<i.length;this.currentLayer++){var I=this.style._layers[i[this.currentLayer]],C=n[I.source],k=("symbol"===I.type?p:l)[I.source];I.source!==s&&C&&(this.clearStencil(),C.getSource().isTileClipped&&this._renderTileClippingMasks(u[I.source])),this.renderLayer(this,C,I,k),s=I.source}if(this.options.showTileBoundaries)for(var P in n){ti.debug(this,n[P],u[P]);break}this.setCustomLayerDefaults()},ei.prototype.setupOffscreenDepthRenderbuffer=function(){var t=this.context;this.depthRbo||(this.depthRbo=t.createRenderbuffer(t.gl.DEPTH_COMPONENT16,this.width,this.height))},ei.prototype.renderLayer=function(t,e,r,i){r.isHidden(this.transform.zoom)||("background"===r.type||"custom"===r.type||i.length)&&(this.id=r.id,ti[r.type](t,e,r,i))},ei.prototype.translatePosMatrix=function(e,r,i,n,o){if(!i[0]&&!i[1])return e;var a=o?"map"===n?this.transform.angle:0:"viewport"===n?-this.transform.angle:0;if(a){var s=Math.sin(a),u=Math.cos(a);i=[i[0]*u-i[1]*s,i[0]*s+i[1]*u]}var l=[o?i[0]:se(r,i[0],this.transform.zoom),o?i[1]:se(r,i[1],this.transform.zoom),0],p=new Float32Array(16);return t.translate(p,e,l),p},ei.prototype.saveTileTexture=function(t){var e=this._tileTextures[t.size[0]];e?e.push(t):this._tileTextures[t.size[0]]=[t]},ei.prototype.getTileTexture=function(t){var e=this._tileTextures[t];return e&&e.length>0?e.pop():null},ei.prototype.isPatternMissing=function(t){if(!t)return!1;var e=this.imageManager.getPattern(t.from),r=this.imageManager.getPattern(t.to);return!e||!r},ei.prototype.useProgram=function(t,e){void 0===e&&(e=this.emptyProgramConfiguration),this.cache=this.cache||{};var r=""+t+(e.cacheKey||"")+(this._showOverdrawInspector?"/overdraw":"");return this.cache[r]||(this.cache[r]=new pr(this.context,ur[t],e,Fr[t],this._showOverdrawInspector)),this.cache[r]},ei.prototype.setCustomLayerDefaults=function(){this.context.unbindVAO(),this.context.cullFace.setDefault(),this.context.activeTexture.setDefault(),this.context.pixelStoreUnpack.setDefault(),this.context.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.context.pixelStoreUnpackFlipY.setDefault()},ei.prototype.setBaseState=function(){var t=this.context.gl;this.context.cullFace.set(!1),this.context.viewport.set([0,0,this.width,this.height]),this.context.blendEquation.set(t.FUNC_ADD)};var oi=function(e,r,i){this.tileSize=512,this.maxValidLatitude=85.051129,this._renderWorldCopies=void 0===i||i,this._minZoom=e||0,this._maxZoom=r||22,this.setMaxBounds(),this.width=0,this.height=0,this._center=new t.LngLat(0,0),this.zoom=0,this.angle=0,this._fov=.6435011087932844,this._pitch=0,this._unmodified=!0,this._posMatrixCache={},this._alignedPosMatrixCache={}},ai={minZoom:{configurable:!0},maxZoom:{configurable:!0},renderWorldCopies:{configurable:!0},worldSize:{configurable:!0},centerPoint:{configurable:!0},size:{configurable:!0},bearing:{configurable:!0},pitch:{configurable:!0},fov:{configurable:!0},zoom:{configurable:!0},center:{configurable:!0},unmodified:{configurable:!0},point:{configurable:!0}};oi.prototype.clone=function(){var t=new oi(this._minZoom,this._maxZoom,this._renderWorldCopies);return t.tileSize=this.tileSize,t.latRange=this.latRange,t.width=this.width,t.height=this.height,t._center=this._center,t.zoom=this.zoom,t.angle=this.angle,t._fov=this._fov,t._pitch=this._pitch,t._unmodified=this._unmodified,t._calcMatrices(),t},ai.minZoom.get=function(){return this._minZoom},ai.minZoom.set=function(t){this._minZoom!==t&&(this._minZoom=t,this.zoom=Math.max(this.zoom,t))},ai.maxZoom.get=function(){return this._maxZoom},ai.maxZoom.set=function(t){this._maxZoom!==t&&(this._maxZoom=t,this.zoom=Math.min(this.zoom,t))},ai.renderWorldCopies.get=function(){return this._renderWorldCopies},ai.renderWorldCopies.set=function(t){void 0===t?t=!0:null===t&&(t=!1),this._renderWorldCopies=t},ai.worldSize.get=function(){return this.tileSize*this.scale},ai.centerPoint.get=function(){return this.size._div(2)},ai.size.get=function(){return new t.Point(this.width,this.height)},ai.bearing.get=function(){return-this.angle/Math.PI*180},ai.bearing.set=function(e){var r=-t.wrap(e,-180,180)*Math.PI/180;this.angle!==r&&(this._unmodified=!1,this.angle=r,this._calcMatrices(),this.rotationMatrix=t.create$4(),t.rotate(this.rotationMatrix,this.rotationMatrix,this.angle))},ai.pitch.get=function(){return this._pitch/Math.PI*180},ai.pitch.set=function(e){var r=t.clamp(e,0,60)/180*Math.PI;this._pitch!==r&&(this._unmodified=!1,this._pitch=r,this._calcMatrices())},ai.fov.get=function(){return this._fov/Math.PI*180},ai.fov.set=function(t){t=Math.max(.01,Math.min(60,t)),this._fov!==t&&(this._unmodified=!1,this._fov=t/180*Math.PI,this._calcMatrices())},ai.zoom.get=function(){return this._zoom},ai.zoom.set=function(t){var e=Math.min(Math.max(t,this.minZoom),this.maxZoom);this._zoom!==e&&(this._unmodified=!1,this._zoom=e,this.scale=this.zoomScale(e),this.tileZoom=Math.floor(e),this.zoomFraction=e-this.tileZoom,this._constrain(),this._calcMatrices())},ai.center.get=function(){return this._center},ai.center.set=function(t){t.lat===this._center.lat&&t.lng===this._center.lng||(this._unmodified=!1,this._center=t,this._constrain(),this._calcMatrices())},oi.prototype.coveringZoomLevel=function(t){return(t.roundZoom?Math.round:Math.floor)(this.zoom+this.scaleZoom(this.tileSize/t.tileSize))},oi.prototype.getVisibleUnwrappedCoordinates=function(e){var r=[new t.UnwrappedTileID(0,e)];if(this._renderWorldCopies)for(var i=this.pointCoordinate(new t.Point(0,0)),n=this.pointCoordinate(new t.Point(this.width,0)),o=this.pointCoordinate(new t.Point(this.width,this.height)),a=this.pointCoordinate(new t.Point(0,this.height)),s=Math.floor(Math.min(i.x,n.x,o.x,a.x)),u=Math.floor(Math.max(i.x,n.x,o.x,a.x)),l=s-1;l<=u+1;l++)0!==l&&r.push(new t.UnwrappedTileID(l,e));return r},oi.prototype.coveringTiles=function(e){var r=this.coveringZoomLevel(e),i=r;if(void 0!==e.minzoom&&r<e.minzoom)return[];void 0!==e.maxzoom&&r>e.maxzoom&&(r=e.maxzoom);var n=t.MercatorCoordinate.fromLngLat(this.center),o=Math.pow(2,r),a=new t.Point(o*n.x-.5,o*n.y-.5);return function(e,r,i,n){void 0===n&&(n=!0);var o=1<<e,a={};function s(r,s,u){var l,p,c,h;if(u>=0&&u<=o)for(l=r;l<s;l++)p=Math.floor(l/o),c=(l%o+o)%o,0!==p&&!0!==n||(h=new t.OverscaledTileID(i,p,e,c,u),a[h.key]=h)}var u=r.map(function(e){return new t.Point(e.x,e.y)._mult(o)});return ni(u[0],u[1],u[2],0,o,s),ni(u[2],u[3],u[0],0,o,s),Object.keys(a).map(function(t){return a[t]})}(r,[this.pointCoordinate(new t.Point(0,0)),this.pointCoordinate(new t.Point(this.width,0)),this.pointCoordinate(new t.Point(this.width,this.height)),this.pointCoordinate(new t.Point(0,this.height))],e.reparseOverscaled?i:r,this._renderWorldCopies).sort(function(t,e){return a.dist(t.canonical)-a.dist(e.canonical)})},oi.prototype.resize=function(t,e){this.width=t,this.height=e,this.pixelsToGLUnits=[2/t,-2/e],this._constrain(),this._calcMatrices()},ai.unmodified.get=function(){return this._unmodified},oi.prototype.zoomScale=function(t){return Math.pow(2,t)},oi.prototype.scaleZoom=function(t){return Math.log(t)/Math.LN2},oi.prototype.project=function(e){var r=t.clamp(e.lat,-this.maxValidLatitude,this.maxValidLatitude);return new t.Point(t.mercatorXfromLng(e.lng)*this.worldSize,t.mercatorYfromLat(r)*this.worldSize)},oi.prototype.unproject=function(e){return new t.MercatorCoordinate(e.x/this.worldSize,e.y/this.worldSize).toLngLat()},ai.point.get=function(){return this.project(this.center)},oi.prototype.setLocationAtPoint=function(e,r){var i=this.pointCoordinate(r),n=this.pointCoordinate(this.centerPoint),o=this.locationCoordinate(e),a=new t.MercatorCoordinate(o.x-(i.x-n.x),o.y-(i.y-n.y));this.center=this.coordinateLocation(a),this._renderWorldCopies&&(this.center=this.center.wrap())},oi.prototype.locationPoint=function(t){return this.coordinatePoint(this.locationCoordinate(t))},oi.prototype.pointLocation=function(t){return this.coordinateLocation(this.pointCoordinate(t))},oi.prototype.locationCoordinate=function(e){return t.MercatorCoordinate.fromLngLat(e)},oi.prototype.coordinateLocation=function(t){return t.toLngLat()},oi.prototype.pointCoordinate=function(e){var r=[e.x,e.y,0,1],i=[e.x,e.y,1,1];t.transformMat4(r,r,this.pixelMatrixInverse),t.transformMat4(i,i,this.pixelMatrixInverse);var n=r[3],o=i[3],a=r[0]/n,s=i[0]/o,u=r[1]/n,l=i[1]/o,p=r[2]/n,c=i[2]/o,h=p===c?0:(0-p)/(c-p);return new t.MercatorCoordinate(t.number(a,s,h)/this.worldSize,t.number(u,l,h)/this.worldSize)},oi.prototype.coordinatePoint=function(e){var r=[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(r,r,this.pixelMatrix),new t.Point(r[0]/r[3],r[1]/r[3])},oi.prototype.getBounds=function(){return(new t.LngLatBounds).extend(this.pointLocation(new t.Point(0,0))).extend(this.pointLocation(new t.Point(this.width,0))).extend(this.pointLocation(new t.Point(this.width,this.height))).extend(this.pointLocation(new t.Point(0,this.height)))},oi.prototype.getMaxBounds=function(){return this.latRange&&2===this.latRange.length&&this.lngRange&&2===this.lngRange.length?new t.LngLatBounds([this.lngRange[0],this.latRange[0]],[this.lngRange[1],this.latRange[1]]):null},oi.prototype.setMaxBounds=function(t){t?(this.lngRange=[t.getWest(),t.getEast()],this.latRange=[t.getSouth(),t.getNorth()],this._constrain()):(this.lngRange=null,this.latRange=[-this.maxValidLatitude,this.maxValidLatitude])},oi.prototype.calculatePosMatrix=function(e,r){void 0===r&&(r=!1);var i=e.key,n=r?this._alignedPosMatrixCache:this._posMatrixCache;if(n[i])return n[i];var o=e.canonical,a=this.worldSize/this.zoomScale(o.z),s=o.x+Math.pow(2,o.z)*e.wrap,u=t.identity(new Float64Array(16));return t.translate(u,u,[s*a,o.y*a,0]),t.scale(u,u,[a/t.EXTENT,a/t.EXTENT,1]),t.multiply(u,r?this.alignedProjMatrix:this.projMatrix,u),n[i]=new Float32Array(u),n[i]},oi.prototype.customLayerMatrix=function(){return this.mercatorMatrix.slice()},oi.prototype._constrain=function(){if(this.center&&this.width&&this.height&&!this._constraining){this._constraining=!0;var e,r,i,n,o=-90,a=90,s=-180,u=180,l=this.size,p=this._unmodified;if(this.latRange){var c=this.latRange;o=t.mercatorYfromLat(c[1])*this.worldSize,e=(a=t.mercatorYfromLat(c[0])*this.worldSize)-o<l.y?l.y/(a-o):0}if(this.lngRange){var h=this.lngRange;s=t.mercatorXfromLng(h[0])*this.worldSize,r=(u=t.mercatorXfromLng(h[1])*this.worldSize)-s<l.x?l.x/(u-s):0}var f=this.point,d=Math.max(r||0,e||0);if(d)return this.center=this.unproject(new t.Point(r?(u+s)/2:f.x,e?(a+o)/2:f.y)),this.zoom+=this.scaleZoom(d),this._unmodified=p,void(this._constraining=!1);if(this.latRange){var m=f.y,y=l.y/2;m-y<o&&(n=o+y),m+y>a&&(n=a-y)}if(this.lngRange){var _=f.x,v=l.x/2;_-v<s&&(i=s+v),_+v>u&&(i=u-v)}void 0===i&&void 0===n||(this.center=this.unproject(new t.Point(void 0!==i?i:f.x,void 0!==n?n:f.y))),this._unmodified=p,this._constraining=!1}},oi.prototype._calcMatrices=function(){if(this.height){this.cameraToCenterDistance=.5/Math.tan(this._fov/2)*this.height;var e=this._fov/2,r=Math.PI/2+this._pitch,i=Math.sin(e)*this.cameraToCenterDistance/Math.sin(Math.PI-r-e),n=this.point,o=n.x,a=n.y,s=1.01*(Math.cos(Math.PI/2-this._pitch)*i+this.cameraToCenterDistance),u=new Float64Array(16);t.perspective(u,this._fov,this.width/this.height,1,s),t.scale(u,u,[1,-1,1]),t.translate(u,u,[0,0,-this.cameraToCenterDistance]),t.rotateX(u,u,this._pitch),t.rotateZ(u,u,this.angle),t.translate(u,u,[-o,-a,0]),this.mercatorMatrix=t.scale([],u,[this.worldSize,this.worldSize,this.worldSize]),t.scale(u,u,[1,1,t.mercatorZfromAltitude(1,this.center.lat)*this.worldSize,1]),this.projMatrix=u;var l=this.width%2/2,p=this.height%2/2,c=Math.cos(this.angle),h=Math.sin(this.angle),f=o-Math.round(o)+c*l+h*p,d=a-Math.round(a)+c*p+h*l,m=new Float64Array(u);if(t.translate(m,m,[f>.5?f-1:f,d>.5?d-1:d,0]),this.alignedProjMatrix=m,u=t.create(),t.scale(u,u,[this.width/2,-this.height/2,1]),t.translate(u,u,[1,-1,0]),this.pixelMatrix=t.multiply(new Float64Array(16),u,this.projMatrix),!(u=t.invert(new Float64Array(16),this.pixelMatrix)))throw new Error("failed to invert matrix");this.pixelMatrixInverse=u,this._posMatrixCache={},this._alignedPosMatrixCache={}}},oi.prototype.maxPitchScaleFactor=function(){if(!this.pixelMatrixInverse)return 1;var e=this.pointCoordinate(new t.Point(0,0)),r=[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(r,r,this.pixelMatrix)[3]/this.cameraToCenterDistance},Object.defineProperties(oi.prototype,ai);var si=function(){var e,r,i,n;t.bindAll(["_onHashChange","_updateHash"],this),this._updateHash=(e=this._updateHashUnthrottled.bind(this),r=!1,i=0,n=function(){i=0,r&&(e(),i=setTimeout(n,300),r=!1)},function(){return r=!0,i||n(),i})};si.prototype.addTo=function(e){return this._map=e,t.window.addEventListener("hashchange",this._onHashChange,!1),this._map.on("moveend",this._updateHash),this},si.prototype.remove=function(){return t.window.removeEventListener("hashchange",this._onHashChange,!1),this._map.off("moveend",this._updateHash),clearTimeout(this._updateHash()),delete this._map,this},si.prototype.getHashString=function(t){var e=this._map.getCenter(),r=Math.round(100*this._map.getZoom())/100,i=Math.ceil((r*Math.LN2+Math.log(512/360/.5))/Math.LN10),n=Math.pow(10,i),o=Math.round(e.lng*n)/n,a=Math.round(e.lat*n)/n,s=this._map.getBearing(),u=this._map.getPitch(),l="";return l+=t?"#/"+o+"/"+a+"/"+r:"#"+r+"/"+a+"/"+o,(s||u)&&(l+="/"+Math.round(10*s)/10),u&&(l+="/"+Math.round(u)),l},si.prototype._onHashChange=function(){var e=t.window.location.hash.replace("#","").split("/");return e.length>=3&&(this._map.jumpTo({center:[+e[2],+e[1]],zoom:+e[0],bearing:+(e[3]||0),pitch:+(e[4]||0)}),!0)},si.prototype._updateHashUnthrottled=function(){var e=this.getHashString();try{t.window.history.replaceState(t.window.history.state,"",e)}catch(t){}};var ui=function(e){function i(i,n,o,a){void 0===a&&(a={});var s=r.mousePos(n.getCanvasContainer(),o),u=n.unproject(s);e.call(this,i,t.extend({point:s,lngLat:u,originalEvent:o},a)),this._defaultPrevented=!1,this.target=n}e&&(i.__proto__=e),i.prototype=Object.create(e&&e.prototype),i.prototype.constructor=i;var n={defaultPrevented:{configurable:!0}};return i.prototype.preventDefault=function(){this._defaultPrevented=!0},n.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(i.prototype,n),i}(t.Event),li=function(e){function i(i,n,o){var a=r.touchPos(n.getCanvasContainer(),o),s=a.map(function(t){return n.unproject(t)}),u=a.reduce(function(t,e,r,i){return t.add(e.div(i.length))},new t.Point(0,0)),l=n.unproject(u);e.call(this,i,{points:a,point:u,lngLats:s,lngLat:l,originalEvent:o}),this._defaultPrevented=!1}e&&(i.__proto__=e),i.prototype=Object.create(e&&e.prototype),i.prototype.constructor=i;var n={defaultPrevented:{configurable:!0}};return i.prototype.preventDefault=function(){this._defaultPrevented=!0},n.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(i.prototype,n),i}(t.Event),pi=function(t){function e(e,r,i){t.call(this,e,{originalEvent:i}),this._defaultPrevented=!1}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={defaultPrevented:{configurable:!0}};return e.prototype.preventDefault=function(){this._defaultPrevented=!0},r.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(e.prototype,r),e}(t.Event),ci=function(e){this._map=e,this._el=e.getCanvasContainer(),this._delta=0,t.bindAll(["_onWheel","_onTimeout","_onScrollFrame","_onScrollFinished"],this)};ci.prototype.isEnabled=function(){return!!this._enabled},ci.prototype.isActive=function(){return!!this._active},ci.prototype.isZooming=function(){return!!this._zooming},ci.prototype.enable=function(t){this.isEnabled()||(this._enabled=!0,this._aroundCenter=t&&"center"===t.around)},ci.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},ci.prototype.onWheel=function(e){if(this.isEnabled()){var r=e.deltaMode===t.window.WheelEvent.DOM_DELTA_LINE?40*e.deltaY:e.deltaY,i=t.browser.now(),n=i-(this._lastWheelEventTime||0);this._lastWheelEventTime=i,0!==r&&r%4.000244140625==0?this._type="wheel":0!==r&&Math.abs(r)<4?this._type="trackpad":n>400?(this._type=null,this._lastValue=r,this._timeout=setTimeout(this._onTimeout,40,e)):this._type||(this._type=Math.abs(n*r)<200?"trackpad":"wheel",this._timeout&&(clearTimeout(this._timeout),this._timeout=null,r+=this._lastValue)),e.shiftKey&&r&&(r/=4),this._type&&(this._lastWheelEvent=e,this._delta-=r,this.isActive()||this._start(e)),e.preventDefault()}},ci.prototype._onTimeout=function(t){this._type="wheel",this._delta-=this._lastValue,this.isActive()||this._start(t)},ci.prototype._start=function(e){if(this._delta){this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),this._active=!0,this._zooming=!0,this._map.fire(new t.Event("movestart",{originalEvent:e})),this._map.fire(new t.Event("zoomstart",{originalEvent:e})),this._finishTimeout&&clearTimeout(this._finishTimeout);var i=r.mousePos(this._el,e);this._around=t.LngLat.convert(this._aroundCenter?this._map.getCenter():this._map.unproject(i)),this._aroundPoint=this._map.transform.locationPoint(this._around),this._frameId||(this._frameId=this._map._requestRenderFrame(this._onScrollFrame))}},ci.prototype._onScrollFrame=function(){var e=this;if(this._frameId=null,this.isActive()){var r=this._map.transform;if(0!==this._delta){var i="wheel"===this._type&&Math.abs(this._delta)>4.000244140625?1/450:.01,n=2/(1+Math.exp(-Math.abs(this._delta*i)));this._delta<0&&0!==n&&(n=1/n);var o="number"==typeof this._targetZoom?r.zoomScale(this._targetZoom):r.scale;this._targetZoom=Math.min(r.maxZoom,Math.max(r.minZoom,r.scaleZoom(o*n))),"wheel"===this._type&&(this._startZoom=r.zoom,this._easing=this._smoothOutEasing(200)),this._delta=0}var a="number"==typeof this._targetZoom?this._targetZoom:r.zoom,s=this._startZoom,u=this._easing,l=!1;if("wheel"===this._type&&s&&u){var p=Math.min((t.browser.now()-this._lastWheelEventTime)/200,1),c=u(p);r.zoom=t.number(s,a,c),p<1?this._frameId||(this._frameId=this._map._requestRenderFrame(this._onScrollFrame)):l=!0}else r.zoom=a,l=!0;r.setLocationAtPoint(this._around,this._aroundPoint),this._map.fire(new t.Event("move",{originalEvent:this._lastWheelEvent})),this._map.fire(new t.Event("zoom",{originalEvent:this._lastWheelEvent})),l&&(this._active=!1,this._finishTimeout=setTimeout(function(){e._zooming=!1,e._map.fire(new t.Event("zoomend",{originalEvent:e._lastWheelEvent})),e._map.fire(new t.Event("moveend",{originalEvent:e._lastWheelEvent})),delete e._targetZoom},200))}},ci.prototype._smoothOutEasing=function(e){var r=t.ease;if(this._prevEase){var i=this._prevEase,n=(t.browser.now()-i.start)/i.duration,o=i.easing(n+.01)-i.easing(n),a=.27/Math.sqrt(o*o+1e-4)*.01,s=Math.sqrt(.0729-a*a);r=t.bezier(a,s,.25,1)}return this._prevEase={start:t.browser.now(),duration:e,easing:r},r};var hi=function(e,r){this._map=e,this._el=e.getCanvasContainer(),this._container=e.getContainer(),this._clickTolerance=r.clickTolerance||1,t.bindAll(["_onMouseMove","_onMouseUp","_onKeyDown"],this)};hi.prototype.isEnabled=function(){return!!this._enabled},hi.prototype.isActive=function(){return!!this._active},hi.prototype.enable=function(){this.isEnabled()||(this._enabled=!0)},hi.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},hi.prototype.onMouseDown=function(e){this.isEnabled()&&e.shiftKey&&0===e.button&&(t.window.document.addEventListener("mousemove",this._onMouseMove,!1),t.window.document.addEventListener("keydown",this._onKeyDown,!1),t.window.document.addEventListener("mouseup",this._onMouseUp,!1),r.disableDrag(),this._startPos=this._lastPos=r.mousePos(this._el,e),this._active=!0)},hi.prototype._onMouseMove=function(t){var e=r.mousePos(this._el,t);if(!(this._lastPos.equals(e)||!this._box&&e.dist(this._startPos)<this._clickTolerance)){var i=this._startPos;this._lastPos=e,this._box||(this._box=r.create("div","mapboxgl-boxzoom",this._container),this._container.classList.add("mapboxgl-crosshair"),this._fireEvent("boxzoomstart",t));var n=Math.min(i.x,e.x),o=Math.max(i.x,e.x),a=Math.min(i.y,e.y),s=Math.max(i.y,e.y);r.setTransform(this._box,"translate("+n+"px,"+a+"px)"),this._box.style.width=o-n+"px",this._box.style.height=s-a+"px"}},hi.prototype._onMouseUp=function(e){if(0===e.button){var i=this._startPos,n=r.mousePos(this._el,e);this._finish(),r.suppressClick(),i.x===n.x&&i.y===n.y?this._fireEvent("boxzoomcancel",e):this._map.fitScreenCoordinates(i,n,this._map.getBearing(),{linear:!0}).fire(new t.Event("boxzoomend",{originalEvent:e}))}},hi.prototype._onKeyDown=function(t){27===t.keyCode&&(this._finish(),this._fireEvent("boxzoomcancel",t))},hi.prototype._finish=function(){this._active=!1,t.window.document.removeEventListener("mousemove",this._onMouseMove,!1),t.window.document.removeEventListener("keydown",this._onKeyDown,!1),t.window.document.removeEventListener("mouseup",this._onMouseUp,!1),this._container.classList.remove("mapboxgl-crosshair"),this._box&&(r.remove(this._box),this._box=null),r.enableDrag(),delete this._startPos,delete this._lastPos},hi.prototype._fireEvent=function(e,r){return this._map.fire(new t.Event(e,{originalEvent:r}))};var fi=t.bezier(0,0,.25,1),di=function(e,r){this._map=e,this._el=r.element||e.getCanvasContainer(),this._state="disabled",this._button=r.button||"right",this._bearingSnap=r.bearingSnap||0,this._pitchWithRotate=!1!==r.pitchWithRotate,t.bindAll(["onMouseDown","_onMouseMove","_onMouseUp","_onBlur","_onDragFrame"],this)};di.prototype.isEnabled=function(){return"disabled"!==this._state},di.prototype.isActive=function(){return"active"===this._state},di.prototype.enable=function(){this.isEnabled()||(this._state="enabled")},di.prototype.disable=function(){if(this.isEnabled())switch(this._state){case"active":this._state="disabled",this._unbind(),this._deactivate(),this._fireEvent("rotateend"),this._pitchWithRotate&&this._fireEvent("pitchend"),this._fireEvent("moveend");break;case"pending":this._state="disabled",this._unbind();break;default:this._state="disabled"}},di.prototype.onMouseDown=function(e){if("enabled"===this._state){if("right"===this._button){if(this._eventButton=r.mouseButton(e),this._eventButton!==(e.ctrlKey?0:2))return}else{if(e.ctrlKey||0!==r.mouseButton(e))return;this._eventButton=0}r.disableDrag(),t.window.document.addEventListener("mousemove",this._onMouseMove,{capture:!0}),t.window.document.addEventListener("mouseup",this._onMouseUp),t.window.addEventListener("blur",this._onBlur),this._state="pending",this._inertia=[[t.browser.now(),this._map.getBearing()]],this._startPos=this._lastPos=r.mousePos(this._el,e),this._center=this._map.transform.centerPoint,e.preventDefault()}},di.prototype._onMouseMove=function(t){var e=r.mousePos(this._el,t);this._lastPos.equals(e)||(this._lastMoveEvent=t,this._lastPos=e,"pending"===this._state&&(this._state="active",this._fireEvent("rotatestart",t),this._fireEvent("movestart",t),this._pitchWithRotate&&this._fireEvent("pitchstart",t)),this._frameId||(this._frameId=this._map._requestRenderFrame(this._onDragFrame)))},di.prototype._onDragFrame=function(){this._frameId=null;var e=this._lastMoveEvent;if(e){var r=this._map.transform,i=this._startPos,n=this._lastPos,o=.8*(i.x-n.x),a=-.5*(i.y-n.y),s=r.bearing-o,u=r.pitch-a,l=this._inertia,p=l[l.length-1];this._drainInertiaBuffer(),l.push([t.browser.now(),this._map._normalizeBearing(s,p[1])]),r.bearing=s,this._pitchWithRotate&&(this._fireEvent("pitch",e),r.pitch=u),this._fireEvent("rotate",e),this._fireEvent("move",e),delete this._lastMoveEvent,this._startPos=this._lastPos}},di.prototype._onMouseUp=function(t){if(r.mouseButton(t)===this._eventButton)switch(this._state){case"active":this._state="enabled",r.suppressClick(),this._unbind(),this._deactivate(),this._inertialRotate(t);break;case"pending":this._state="enabled",this._unbind()}},di.prototype._onBlur=function(t){switch(this._state){case"active":this._state="enabled",this._unbind(),this._deactivate(),this._fireEvent("rotateend",t),this._pitchWithRotate&&this._fireEvent("pitchend",t),this._fireEvent("moveend",t);break;case"pending":this._state="enabled",this._unbind()}},di.prototype._unbind=function(){t.window.document.removeEventListener("mousemove",this._onMouseMove,{capture:!0}),t.window.document.removeEventListener("mouseup",this._onMouseUp),t.window.removeEventListener("blur",this._onBlur),r.enableDrag()},di.prototype._deactivate=function(){this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),delete this._lastMoveEvent,delete this._startPos,delete this._lastPos},di.prototype._inertialRotate=function(t){var e=this;this._fireEvent("rotateend",t),this._drainInertiaBuffer();var r=this._map,i=r.getBearing(),n=this._inertia,o=function(){Math.abs(i)<e._bearingSnap?r.resetNorth({noMoveStart:!0},{originalEvent:t}):e._fireEvent("moveend",t),e._pitchWithRotate&&e._fireEvent("pitchend",t)};if(n.length<2)o();else{var a=n[0],s=n[n.length-1],u=n[n.length-2],l=r._normalizeBearing(i,u[1]),p=s[1]-a[1],c=p<0?-1:1,h=(s[0]-a[0])/1e3;if(0!==p&&0!==h){var f=Math.abs(p*(.25/h));f>180&&(f=180);var d=f/180;l+=c*f*(d/2),Math.abs(r._normalizeBearing(l,0))<this._bearingSnap&&(l=r._normalizeBearing(0,l)),r.rotateTo(l,{duration:1e3*d,easing:fi,noMoveStart:!0},{originalEvent:t})}else o()}},di.prototype._fireEvent=function(e,r){return this._map.fire(new t.Event(e,r?{originalEvent:r}:{}))},di.prototype._drainInertiaBuffer=function(){for(var e=this._inertia,r=t.browser.now();e.length>0&&r-e[0][0]>160;)e.shift()};var mi=t.bezier(0,0,.3,1),yi=function(e,r){this._map=e,this._el=e.getCanvasContainer(),this._state="disabled",this._clickTolerance=r.clickTolerance||1,t.bindAll(["_onMove","_onMouseUp","_onTouchEnd","_onBlur","_onDragFrame"],this)};yi.prototype.isEnabled=function(){return"disabled"!==this._state},yi.prototype.isActive=function(){return"active"===this._state},yi.prototype.enable=function(){this.isEnabled()||(this._el.classList.add("mapboxgl-touch-drag-pan"),this._state="enabled")},yi.prototype.disable=function(){if(this.isEnabled())switch(this._el.classList.remove("mapboxgl-touch-drag-pan"),this._state){case"active":this._state="disabled",this._unbind(),this._deactivate(),this._fireEvent("dragend"),this._fireEvent("moveend");break;case"pending":this._state="disabled",this._unbind();break;default:this._state="disabled"}},yi.prototype.onMouseDown=function(e){"enabled"===this._state&&(e.ctrlKey||0!==r.mouseButton(e)||(r.addEventListener(t.window.document,"mousemove",this._onMove,{capture:!0}),r.addEventListener(t.window.document,"mouseup",this._onMouseUp),this._start(e)))},yi.prototype.onTouchStart=function(e){"enabled"===this._state&&(e.touches.length>1||(r.addEventListener(t.window.document,"touchmove",this._onMove,{capture:!0,passive:!1}),r.addEventListener(t.window.document,"touchend",this._onTouchEnd),this._start(e)))},yi.prototype._start=function(e){t.window.addEventListener("blur",this._onBlur),this._state="pending",this._startPos=this._mouseDownPos=this._lastPos=r.mousePos(this._el,e),this._inertia=[[t.browser.now(),this._startPos]]},yi.prototype._onMove=function(e){e.preventDefault();var i=r.mousePos(this._el,e);this._lastPos.equals(i)||"pending"===this._state&&i.dist(this._mouseDownPos)<this._clickTolerance||(this._lastMoveEvent=e,this._lastPos=i,this._drainInertiaBuffer(),this._inertia.push([t.browser.now(),this._lastPos]),"pending"===this._state&&(this._state="active",this._fireEvent("dragstart",e),this._fireEvent("movestart",e)),this._frameId||(this._frameId=this._map._requestRenderFrame(this._onDragFrame)))},yi.prototype._onDragFrame=function(){this._frameId=null;var t=this._lastMoveEvent;if(t){var e=this._map.transform;e.setLocationAtPoint(e.pointLocation(this._startPos),this._lastPos),this._fireEvent("drag",t),this._fireEvent("move",t),this._startPos=this._lastPos,delete this._lastMoveEvent}},yi.prototype._onMouseUp=function(t){if(0===r.mouseButton(t))switch(this._state){case"active":this._state="enabled",r.suppressClick(),this._unbind(),this._deactivate(),this._inertialPan(t);break;case"pending":this._state="enabled",this._unbind()}},yi.prototype._onTouchEnd=function(t){switch(this._state){case"active":this._state="enabled",this._unbind(),this._deactivate(),this._inertialPan(t);break;case"pending":this._state="enabled",this._unbind()}},yi.prototype._onBlur=function(t){switch(this._state){case"active":this._state="enabled",this._unbind(),this._deactivate(),this._fireEvent("dragend",t),this._fireEvent("moveend",t);break;case"pending":this._state="enabled",this._unbind()}},yi.prototype._unbind=function(){r.removeEventListener(t.window.document,"touchmove",this._onMove,{capture:!0,passive:!1}),r.removeEventListener(t.window.document,"touchend",this._onTouchEnd),r.removeEventListener(t.window.document,"mousemove",this._onMove,{capture:!0}),r.removeEventListener(t.window.document,"mouseup",this._onMouseUp),r.removeEventListener(t.window,"blur",this._onBlur)},yi.prototype._deactivate=function(){this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),delete this._lastMoveEvent,delete this._startPos,delete this._mouseDownPos,delete this._lastPos},yi.prototype._inertialPan=function(t){this._fireEvent("dragend",t),this._drainInertiaBuffer();var e=this._inertia;if(e.length<2)this._fireEvent("moveend",t);else{var r=e[e.length-1],i=e[0],n=r[1].sub(i[1]),o=(r[0]-i[0])/1e3;if(0===o||r[1].equals(i[1]))this._fireEvent("moveend",t);else{var a=n.mult(.3/o),s=a.mag();s>1400&&(s=1400,a._unit()._mult(s));var u=s/750,l=a.mult(-u/2);this._map.panBy(l,{duration:1e3*u,easing:mi,noMoveStart:!0},{originalEvent:t})}}},yi.prototype._fireEvent=function(e,r){return this._map.fire(new t.Event(e,r?{originalEvent:r}:{}))},yi.prototype._drainInertiaBuffer=function(){for(var e=this._inertia,r=t.browser.now();e.length>0&&r-e[0][0]>160;)e.shift()};var _i=function(e){this._map=e,this._el=e.getCanvasContainer(),t.bindAll(["_onKeyDown"],this)};function vi(t){return t*(2-t)}_i.prototype.isEnabled=function(){return!!this._enabled},_i.prototype.enable=function(){this.isEnabled()||(this._el.addEventListener("keydown",this._onKeyDown,!1),this._enabled=!0)},_i.prototype.disable=function(){this.isEnabled()&&(this._el.removeEventListener("keydown",this._onKeyDown),this._enabled=!1)},_i.prototype._onKeyDown=function(t){if(!(t.altKey||t.ctrlKey||t.metaKey)){var e=0,r=0,i=0,n=0,o=0;switch(t.keyCode){case 61:case 107:case 171:case 187:e=1;break;case 189:case 109:case 173:e=-1;break;case 37:t.shiftKey?r=-1:(t.preventDefault(),n=-1);break;case 39:t.shiftKey?r=1:(t.preventDefault(),n=1);break;case 38:t.shiftKey?i=1:(t.preventDefault(),o=-1);break;case 40:t.shiftKey?i=-1:(o=1,t.preventDefault());break;default:return}var a=this._map,s=a.getZoom(),u={duration:300,delayEndEvents:500,easing:vi,zoom:e?Math.round(s)+e*(t.shiftKey?2:1):s,bearing:a.getBearing()+15*r,pitch:a.getPitch()+10*i,offset:[100*-n,100*-o],center:a.getCenter()};a.easeTo(u,{originalEvent:t})}};var gi=function(e){this._map=e,t.bindAll(["_onDblClick","_onZoomEnd"],this)};gi.prototype.isEnabled=function(){return!!this._enabled},gi.prototype.isActive=function(){return!!this._active},gi.prototype.enable=function(){this.isEnabled()||(this._enabled=!0)},gi.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},gi.prototype.onTouchStart=function(t){var e=this;this.isEnabled()&&(t.points.length>1||(this._tapped?(clearTimeout(this._tapped),this._tapped=null,this._zoom(t)):this._tapped=setTimeout(function(){e._tapped=null},300)))},gi.prototype.onDblClick=function(t){this.isEnabled()&&(t.originalEvent.preventDefault(),this._zoom(t))},gi.prototype._zoom=function(t){this._active=!0,this._map.on("zoomend",this._onZoomEnd),this._map.zoomTo(this._map.getZoom()+(t.originalEvent.shiftKey?-1:1),{around:t.lngLat},t)},gi.prototype._onZoomEnd=function(){this._active=!1,this._map.off("zoomend",this._onZoomEnd)};var xi=t.bezier(0,0,.15,1),bi=function(e){this._map=e,this._el=e.getCanvasContainer(),t.bindAll(["_onMove","_onEnd","_onTouchFrame"],this)};bi.prototype.isEnabled=function(){return!!this._enabled},bi.prototype.enable=function(t){this.isEnabled()||(this._el.classList.add("mapboxgl-touch-zoom-rotate"),this._enabled=!0,this._aroundCenter=!!t&&"center"===t.around)},bi.prototype.disable=function(){this.isEnabled()&&(this._el.classList.remove("mapboxgl-touch-zoom-rotate"),this._enabled=!1)},bi.prototype.disableRotation=function(){this._rotationDisabled=!0},bi.prototype.enableRotation=function(){this._rotationDisabled=!1},bi.prototype.onStart=function(e){if(this.isEnabled()&&2===e.touches.length){var i=r.mousePos(this._el,e.touches[0]),n=r.mousePos(this._el,e.touches[1]),o=i.add(n).div(2);this._startVec=i.sub(n),this._startAround=this._map.transform.pointLocation(o),this._gestureIntent=void 0,this._inertia=[],r.addEventListener(t.window.document,"touchmove",this._onMove,{passive:!1}),r.addEventListener(t.window.document,"touchend",this._onEnd)}},bi.prototype._getTouchEventData=function(t){var e=r.mousePos(this._el,t.touches[0]),i=r.mousePos(this._el,t.touches[1]),n=e.sub(i);return{vec:n,center:e.add(i).div(2),scale:n.mag()/this._startVec.mag(),bearing:this._rotationDisabled?0:180*n.angleWith(this._startVec)/Math.PI}},bi.prototype._onMove=function(e){if(2===e.touches.length){var r=this._getTouchEventData(e),i=r.vec,n=r.scale,o=r.bearing;if(!this._gestureIntent){var a=this._rotationDisabled&&1!==n||Math.abs(1-n)>.15;Math.abs(o)>10?this._gestureIntent="rotate":a&&(this._gestureIntent="zoom"),this._gestureIntent&&(this._map.fire(new t.Event(this._gestureIntent+"start",{originalEvent:e})),this._map.fire(new t.Event("movestart",{originalEvent:e})),this._startVec=i)}this._lastTouchEvent=e,this._frameId||(this._frameId=this._map._requestRenderFrame(this._onTouchFrame)),e.preventDefault()}},bi.prototype._onTouchFrame=function(){this._frameId=null;var e=this._gestureIntent;if(e){var r=this._map.transform;this._startScale||(this._startScale=r.scale,this._startBearing=r.bearing);var i=this._getTouchEventData(this._lastTouchEvent),n=i.center,o=i.bearing,a=i.scale,s=r.pointLocation(n),u=r.locationPoint(s);"rotate"===e&&(r.bearing=this._startBearing+o),r.zoom=r.scaleZoom(this._startScale*a),r.setLocationAtPoint(this._startAround,u),this._map.fire(new t.Event(e,{originalEvent:this._lastTouchEvent})),this._map.fire(new t.Event("move",{originalEvent:this._lastTouchEvent})),this._drainInertiaBuffer(),this._inertia.push([t.browser.now(),a,n])}},bi.prototype._onEnd=function(e){r.removeEventListener(t.window.document,"touchmove",this._onMove,{passive:!1}),r.removeEventListener(t.window.document,"touchend",this._onEnd);var i=this._gestureIntent,n=this._startScale;if(this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),delete this._gestureIntent,delete this._startScale,delete this._startBearing,delete this._lastTouchEvent,i){this._map.fire(new t.Event(i+"end",{originalEvent:e})),this._drainInertiaBuffer();var o=this._inertia,a=this._map;if(o.length<2)a.snapToNorth({},{originalEvent:e});else{var s=o[o.length-1],u=o[0],l=a.transform.scaleZoom(n*s[1]),p=a.transform.scaleZoom(n*u[1]),c=l-p,h=(s[0]-u[0])/1e3,f=s[2];if(0!==h&&l!==p){var d=.15*c/h;Math.abs(d)>2.5&&(d=d>0?2.5:-2.5);var m=1e3*Math.abs(d/(12*.15)),y=l+d*m/2e3;y<0&&(y=0),a.easeTo({zoom:y,duration:m,easing:xi,around:this._aroundCenter?a.getCenter():a.unproject(f),noMoveStart:!0},{originalEvent:e})}else a.snapToNorth({},{originalEvent:e})}}},bi.prototype._drainInertiaBuffer=function(){for(var e=this._inertia,r=t.browser.now();e.length>2&&r-e[0][0]>160;)e.shift()};var wi={scrollZoom:ci,boxZoom:hi,dragRotate:di,dragPan:yi,keyboard:_i,doubleClickZoom:gi,touchZoomRotate:bi},Ei=function(e){function r(r,i){e.call(this),this._moving=!1,this._zooming=!1,this.transform=r,this._bearingSnap=i.bearingSnap,t.bindAll(["_renderFrameCallback"],this)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getCenter=function(){return this.transform.center},r.prototype.setCenter=function(t,e){return this.jumpTo({center:t},e)},r.prototype.panBy=function(e,r,i){return e=t.Point.convert(e).mult(-1),this.panTo(this.transform.center,t.extend({offset:e},r),i)},r.prototype.panTo=function(e,r,i){return this.easeTo(t.extend({center:e},r),i)},r.prototype.getZoom=function(){return this.transform.zoom},r.prototype.setZoom=function(t,e){return this.jumpTo({zoom:t},e),this},r.prototype.zoomTo=function(e,r,i){return this.easeTo(t.extend({zoom:e},r),i)},r.prototype.zoomIn=function(t,e){return this.zoomTo(this.getZoom()+1,t,e),this},r.prototype.zoomOut=function(t,e){return this.zoomTo(this.getZoom()-1,t,e),this},r.prototype.getBearing=function(){return this.transform.bearing},r.prototype.setBearing=function(t,e){return this.jumpTo({bearing:t},e),this},r.prototype.rotateTo=function(e,r,i){return this.easeTo(t.extend({bearing:e},r),i)},r.prototype.resetNorth=function(e,r){return this.rotateTo(0,t.extend({duration:1e3},e),r),this},r.prototype.snapToNorth=function(t,e){return Math.abs(this.getBearing())<this._bearingSnap?this.resetNorth(t,e):this},r.prototype.getPitch=function(){return this.transform.pitch},r.prototype.setPitch=function(t,e){return this.jumpTo({pitch:t},e),this},r.prototype.cameraForBounds=function(e,r){return e=t.LngLatBounds.convert(e),this._cameraForBoxAndBearing(e.getNorthWest(),e.getSouthEast(),0,r)},r.prototype._cameraForBoxAndBearing=function(e,r,i,n){if("number"==typeof(n=t.extend({padding:{top:0,bottom:0,right:0,left:0},offset:[0,0],maxZoom:this.transform.maxZoom},n)).padding){var o=n.padding;n.padding={top:o,bottom:o,right:o,left:o}}if(t.isEqual(Object.keys(n.padding).sort(function(t,e){return t<e?-1:t>e?1:0}),["bottom","left","right","top"])){var a=this.transform,s=a.project(t.LngLat.convert(e)),u=a.project(t.LngLat.convert(r)),l=s.rotate(-i*Math.PI/180),p=u.rotate(-i*Math.PI/180),c=new t.Point(Math.max(l.x,p.x),Math.max(l.y,p.y)),h=new t.Point(Math.min(l.x,p.x),Math.min(l.y,p.y)),f=c.sub(h),d=(a.width-n.padding.left-n.padding.right)/f.x,m=(a.height-n.padding.top-n.padding.bottom)/f.y;if(!(m<0||d<0)){var y=Math.min(a.scaleZoom(a.scale*Math.min(d,m)),n.maxZoom),_=t.Point.convert(n.offset),v=(n.padding.left-n.padding.right)/2,g=(n.padding.top-n.padding.bottom)/2,x=new t.Point(_.x+v,_.y+g).mult(a.scale/a.zoomScale(y));return{center:a.unproject(s.add(u).div(2).sub(x)),zoom:y,bearing:i}}t.warnOnce("Map cannot fit within canvas with the given bounds, padding, and/or offset.")}else t.warnOnce("options.padding must be a positive number, or an Object with keys 'bottom', 'left', 'right', 'top'")},r.prototype.fitBounds=function(t,e,r){return this._fitInternal(this.cameraForBounds(t,e),e,r)},r.prototype.fitScreenCoordinates=function(e,r,i,n,o){return this._fitInternal(this._cameraForBoxAndBearing(this.transform.pointLocation(t.Point.convert(e)),this.transform.pointLocation(t.Point.convert(r)),i,n),n,o)},r.prototype._fitInternal=function(e,r,i){return e?(r=t.extend(e,r)).linear?this.easeTo(r,i):this.flyTo(r,i):this},r.prototype.jumpTo=function(e,r){this.stop();var i=this.transform,n=!1,o=!1,a=!1;return"zoom"in e&&i.zoom!==+e.zoom&&(n=!0,i.zoom=+e.zoom),void 0!==e.center&&(i.center=t.LngLat.convert(e.center)),"bearing"in e&&i.bearing!==+e.bearing&&(o=!0,i.bearing=+e.bearing),"pitch"in e&&i.pitch!==+e.pitch&&(a=!0,i.pitch=+e.pitch),this.fire(new t.Event("movestart",r)).fire(new t.Event("move",r)),n&&this.fire(new t.Event("zoomstart",r)).fire(new t.Event("zoom",r)).fire(new t.Event("zoomend",r)),o&&this.fire(new t.Event("rotatestart",r)).fire(new t.Event("rotate",r)).fire(new t.Event("rotateend",r)),a&&this.fire(new t.Event("pitchstart",r)).fire(new t.Event("pitch",r)).fire(new t.Event("pitchend",r)),this.fire(new t.Event("moveend",r))},r.prototype.easeTo=function(e,r){var i=this;this.stop(),!1===(e=t.extend({offset:[0,0],duration:500,easing:t.ease},e)).animate&&(e.duration=0);var n=this.transform,o=this.getZoom(),a=this.getBearing(),s=this.getPitch(),u="zoom"in e?+e.zoom:o,l="bearing"in e?this._normalizeBearing(e.bearing,a):a,p="pitch"in e?+e.pitch:s,c=n.centerPoint.add(t.Point.convert(e.offset)),h=n.pointLocation(c),f=t.LngLat.convert(e.center||h);this._normalizeCenter(f);var d,m,y=n.project(h),_=n.project(f).sub(y),v=n.zoomScale(u-o);return e.around&&(d=t.LngLat.convert(e.around),m=n.locationPoint(d)),this._zooming=u!==o,this._rotating=a!==l,this._pitching=p!==s,this._prepareEase(r,e.noMoveStart),clearTimeout(this._easeEndTimeoutID),this._ease(function(e){if(i._zooming&&(n.zoom=t.number(o,u,e)),i._rotating&&(n.bearing=t.number(a,l,e)),i._pitching&&(n.pitch=t.number(s,p,e)),d)n.setLocationAtPoint(d,m);else{var h=n.zoomScale(n.zoom-o),f=u>o?Math.min(2,v):Math.max(.5,v),g=Math.pow(f,1-e),x=n.unproject(y.add(_.mult(e*g)).mult(h));n.setLocationAtPoint(n.renderWorldCopies?x.wrap():x,c)}i._fireMoveEvents(r)},function(){e.delayEndEvents?i._easeEndTimeoutID=setTimeout(function(){return i._afterEase(r)},e.delayEndEvents):i._afterEase(r)},e),this},r.prototype._prepareEase=function(e,r){this._moving=!0,r||this.fire(new t.Event("movestart",e)),this._zooming&&this.fire(new t.Event("zoomstart",e)),this._rotating&&this.fire(new t.Event("rotatestart",e)),this._pitching&&this.fire(new t.Event("pitchstart",e))},r.prototype._fireMoveEvents=function(e){this.fire(new t.Event("move",e)),this._zooming&&this.fire(new t.Event("zoom",e)),this._rotating&&this.fire(new t.Event("rotate",e)),this._pitching&&this.fire(new t.Event("pitch",e))},r.prototype._afterEase=function(e){var r=this._zooming,i=this._rotating,n=this._pitching;this._moving=!1,this._zooming=!1,this._rotating=!1,this._pitching=!1,r&&this.fire(new t.Event("zoomend",e)),i&&this.fire(new t.Event("rotateend",e)),n&&this.fire(new t.Event("pitchend",e)),this.fire(new t.Event("moveend",e))},r.prototype.flyTo=function(e,r){var i=this;this.stop(),e=t.extend({offset:[0,0],speed:1.2,curve:1.42,easing:t.ease},e);var n=this.transform,o=this.getZoom(),a=this.getBearing(),s=this.getPitch(),u="zoom"in e?t.clamp(+e.zoom,n.minZoom,n.maxZoom):o,l="bearing"in e?this._normalizeBearing(e.bearing,a):a,p="pitch"in e?+e.pitch:s,c=n.zoomScale(u-o),h=n.centerPoint.add(t.Point.convert(e.offset)),f=n.pointLocation(h),d=t.LngLat.convert(e.center||f);this._normalizeCenter(d);var m=n.project(f),y=n.project(d).sub(m),_=e.curve,v=Math.max(n.width,n.height),g=v/c,x=y.mag();if("minZoom"in e){var b=t.clamp(Math.min(e.minZoom,o,u),n.minZoom,n.maxZoom),w=v/n.zoomScale(b-o);_=Math.sqrt(w/x*2)}var E=_*_;function S(t){var e=(g*g-v*v+(t?-1:1)*E*E*x*x)/(2*(t?g:v)*E*x);return Math.log(Math.sqrt(e*e+1)-e)}function T(t){return(Math.exp(t)-Math.exp(-t))/2}function A(t){return(Math.exp(t)+Math.exp(-t))/2}var z=S(0),I=function(t){return A(z)/A(z+_*t)},C=function(t){return v*((A(z)*(T(e=z+_*t)/A(e))-T(z))/E)/x;var e},k=(S(1)-z)/_;if(Math.abs(x)<1e-6||!isFinite(k)){if(Math.abs(v-g)<1e-6)return this.easeTo(e,r);var P=g<v?-1:1;k=Math.abs(Math.log(g/v))/_,C=function(){return 0},I=function(t){return Math.exp(P*_*t)}}if("duration"in e)e.duration=+e.duration;else{var M="screenSpeed"in e?+e.screenSpeed/_:+e.speed;e.duration=1e3*k/M}return e.maxDuration&&e.duration>e.maxDuration&&(e.duration=0),this._zooming=!0,this._rotating=a!==l,this._pitching=p!==s,this._prepareEase(r,!1),this._ease(function(e){var c=e*k,f=1/I(c);n.zoom=1===e?u:o+n.scaleZoom(f),i._rotating&&(n.bearing=t.number(a,l,e)),i._pitching&&(n.pitch=t.number(s,p,e));var _=1===e?d:n.unproject(m.add(y.mult(C(c))).mult(f));n.setLocationAtPoint(n.renderWorldCopies?_.wrap():_,h),i._fireMoveEvents(r)},function(){return i._afterEase(r)},e),this},r.prototype.isEasing=function(){return!!this._easeFrameId},r.prototype.stop=function(){if(this._easeFrameId&&(this._cancelRenderFrame(this._easeFrameId),delete this._easeFrameId,delete this._onEaseFrame),this._onEaseEnd){var t=this._onEaseEnd;delete this._onEaseEnd,t.call(this)}return this},r.prototype._ease=function(e,r,i){!1===i.animate||0===i.duration?(e(1),r()):(this._easeStart=t.browser.now(),this._easeOptions=i,this._onEaseFrame=e,this._onEaseEnd=r,this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback))},r.prototype._renderFrameCallback=function(){var e=Math.min((t.browser.now()-this._easeStart)/this._easeOptions.duration,1);this._onEaseFrame(this._easeOptions.easing(e)),e<1?this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback):this.stop()},r.prototype._normalizeBearing=function(e,r){e=t.wrap(e,-180,180);var i=Math.abs(e-r);return Math.abs(e-360-r)<i&&(e-=360),Math.abs(e+360-r)<i&&(e+=360),e},r.prototype._normalizeCenter=function(t){var e=this.transform;if(e.renderWorldCopies&&!e.lngRange){var r=t.lng-e.center.lng;t.lng+=r>180?-360:r<-180?360:0}},r}(t.Evented),Si=function(e){void 0===e&&(e={}),this.options=e,t.bindAll(["_updateEditLink","_updateData","_updateCompact"],this)};Si.prototype.getDefaultPosition=function(){return"bottom-right"},Si.prototype.onAdd=function(t){var e=this.options&&this.options.compact;return this._map=t,this._container=r.create("div","mapboxgl-ctrl mapboxgl-ctrl-attrib"),this._innerContainer=r.create("div","mapboxgl-ctrl-attrib-inner",this._container),e&&this._container.classList.add("mapboxgl-compact"),this._updateAttributions(),this._updateEditLink(),this._map.on("styledata",this._updateData),this._map.on("sourcedata",this._updateData),this._map.on("moveend",this._updateEditLink),void 0===e&&(this._map.on("resize",this._updateCompact),this._updateCompact()),this._container},Si.prototype.onRemove=function(){r.remove(this._container),this._map.off("styledata",this._updateData),this._map.off("sourcedata",this._updateData),this._map.off("moveend",this._updateEditLink),this._map.off("resize",this._updateCompact),this._map=void 0},Si.prototype._updateEditLink=function(){var e=this._editLink;e||(e=this._editLink=this._container.querySelector(".mapbox-improve-map"));var r=[{key:"owner",value:this.styleOwner},{key:"id",value:this.styleId},{key:"access_token",value:t.config.ACCESS_TOKEN}];if(e){var i=r.reduce(function(t,e,i){return e.value&&(t+=e.key+"="+e.value+(i<r.length-1?"&":"")),t},"?");e.href="https://www.mapbox.com/feedback/"+i+(this._map._hash?this._map._hash.getHashString(!0):"")}},Si.prototype._updateData=function(t){!t||"metadata"!==t.sourceDataType&&"style"!==t.dataType||(this._updateAttributions(),this._updateEditLink())},Si.prototype._updateAttributions=function(){if(this._map.style){var t=[];if(this.options.customAttribution&&(Array.isArray(this.options.customAttribution)?t=t.concat(this.options.customAttribution.map(function(t){return"string"!=typeof t?"":t})):"string"==typeof this.options.customAttribution&&t.push(this.options.customAttribution)),this._map.style.stylesheet){var e=this._map.style.stylesheet;this.styleOwner=e.owner,this.styleId=e.id}var r=this._map.style.sourceCaches;for(var i in r){var n=r[i];if(n.used){var o=n.getSource();o.attribution&&t.indexOf(o.attribution)<0&&t.push(o.attribution)}}t.sort(function(t,e){return t.length-e.length}),(t=t.filter(function(e,r){for(var i=r+1;i<t.length;i++)if(t[i].indexOf(e)>=0)return!1;return!0})).length?(this._innerContainer.innerHTML=t.join(" | "),this._container.classList.remove("mapboxgl-attrib-empty")):this._container.classList.add("mapboxgl-attrib-empty"),this._editLink=null}},Si.prototype._updateCompact=function(){this._map.getCanvasContainer().offsetWidth<=640?this._container.classList.add("mapboxgl-compact"):this._container.classList.remove("mapboxgl-compact")};var Ti=function(){t.bindAll(["_updateLogo"],this),t.bindAll(["_updateCompact"],this)};Ti.prototype.onAdd=function(t){this._map=t,this._container=r.create("div","mapboxgl-ctrl");var e=r.create("a","mapboxgl-ctrl-logo");return e.target="_blank",e.href="https://www.mapbox.com/",e.setAttribute("aria-label","Mapbox logo"),e.setAttribute("rel","noopener"),this._container.appendChild(e),this._container.style.display="none",this._map.on("sourcedata",this._updateLogo),this._updateLogo(),this._map.on("resize",this._updateCompact),this._updateCompact(),this._container},Ti.prototype.onRemove=function(){r.remove(this._container),this._map.off("sourcedata",this._updateLogo),this._map.off("resize",this._updateCompact)},Ti.prototype.getDefaultPosition=function(){return"bottom-left"},Ti.prototype._updateLogo=function(t){t&&"metadata"!==t.sourceDataType||(this._container.style.display=this._logoRequired()?"block":"none")},Ti.prototype._logoRequired=function(){if(this._map.style){var t=this._map.style.sourceCaches;for(var e in t)if(t[e].getSource().mapbox_logo)return!0;return!1}},Ti.prototype._updateCompact=function(){var t=this._container.children;if(t.length){var e=t[0];this._map.getCanvasContainer().offsetWidth<250?e.classList.add("mapboxgl-compact"):e.classList.remove("mapboxgl-compact")}};var Ai=function(){this._queue=[],this._id=0,this._cleared=!1,this._currentlyRunning=!1};Ai.prototype.add=function(t){var e=++this._id;return this._queue.push({callback:t,id:e,cancelled:!1}),e},Ai.prototype.remove=function(t){for(var e=this._currentlyRunning,r=0,i=e?this._queue.concat(e):this._queue;r<i.length;r+=1){var n=i[r];if(n.id===t)return void(n.cancelled=!0)}},Ai.prototype.run=function(){var t=this._currentlyRunning=this._queue;this._queue=[];for(var e=0,r=t;e<r.length;e+=1){var i=r[e];if(!i.cancelled&&(i.callback(),this._cleared))break}this._cleared=!1,this._currentlyRunning=!1},Ai.prototype.clear=function(){this._currentlyRunning&&(this._cleared=!0),this._queue=[]};var zi=t.window.HTMLImageElement,Ii=t.window.HTMLElement,Ci={center:[0,0],zoom:0,bearing:0,pitch:0,minZoom:0,maxZoom:22,interactive:!0,scrollZoom:!0,boxZoom:!0,dragRotate:!0,dragPan:!0,keyboard:!0,doubleClickZoom:!0,touchZoomRotate:!0,bearingSnap:7,clickTolerance:3,hash:!1,attributionControl:!0,failIfMajorPerformanceCaveat:!1,preserveDrawingBuffer:!1,trackResize:!0,renderWorldCopies:!0,refreshExpiredTiles:!0,maxTileCacheSize:null,transformRequest:null,fadeDuration:300,crossSourceCollisions:!0},ki=function(i){function n(e){var n=this;if(null!=(e=t.extend({},Ci,e)).minZoom&&null!=e.maxZoom&&e.minZoom>e.maxZoom)throw new Error("maxZoom must be greater than minZoom");var o=new oi(e.minZoom,e.maxZoom,e.renderWorldCopies);i.call(this,o,e),this._interactive=e.interactive,this._maxTileCacheSize=e.maxTileCacheSize,this._failIfMajorPerformanceCaveat=e.failIfMajorPerformanceCaveat,this._preserveDrawingBuffer=e.preserveDrawingBuffer,this._trackResize=e.trackResize,this._bearingSnap=e.bearingSnap,this._refreshExpiredTiles=e.refreshExpiredTiles,this._fadeDuration=e.fadeDuration,this._crossSourceCollisions=e.crossSourceCollisions,this._crossFadingFactor=1,this._collectResourceTiming=e.collectResourceTiming,this._renderTaskQueue=new Ai,this._controls=[],this._mapId=t.uniqueId();var a=e.transformRequest;if(this._transformRequest=a?function(t,e){return a(t,e)||{url:t}}:function(t){return{url:t}},"string"==typeof e.container){if(this._container=t.window.document.getElementById(e.container),!this._container)throw new Error("Container '"+e.container+"' not found.")}else{if(!(e.container instanceof Ii))throw new Error("Invalid type: 'container' must be a String or HTMLElement.");this._container=e.container}if(e.maxBounds&&this.setMaxBounds(e.maxBounds),t.bindAll(["_onWindowOnline","_onWindowResize","_contextLost","_contextRestored"],this),this._setupContainer(),this._setupPainter(),void 0===this.painter)throw new Error("Failed to initialize WebGL.");this.on("move",function(){return n._update(!1)}),this.on("moveend",function(){return n._update(!1)}),this.on("zoom",function(){return n._update(!0)}),void 0!==t.window&&(t.window.addEventListener("online",this._onWindowOnline,!1),t.window.addEventListener("resize",this._onWindowResize,!1)),function(t,e){var i=t.getCanvasContainer(),n=null,o=!1,a=null;for(var s in wi)t[s]=new wi[s](t,e),e.interactive&&e[s]&&t[s].enable(e[s]);r.addEventListener(i,"mouseout",function(e){t.fire(new ui("mouseout",t,e))}),r.addEventListener(i,"mousedown",function(n){o=!0,a=r.mousePos(i,n);var s=new ui("mousedown",t,n);t.fire(s),s.defaultPrevented||(e.interactive&&!t.doubleClickZoom.isActive()&&t.stop(),t.boxZoom.onMouseDown(n),t.boxZoom.isActive()||t.dragPan.isActive()||t.dragRotate.onMouseDown(n),t.boxZoom.isActive()||t.dragRotate.isActive()||t.dragPan.onMouseDown(n))}),r.addEventListener(i,"mouseup",function(e){var r=t.dragRotate.isActive();n&&!r&&t.fire(new ui("contextmenu",t,n)),n=null,o=!1,t.fire(new ui("mouseup",t,e))}),r.addEventListener(i,"mousemove",function(e){if(!t.dragPan.isActive()&&!t.dragRotate.isActive()){for(var r=e.target;r&&r!==i;)r=r.parentNode;r===i&&t.fire(new ui("mousemove",t,e))}}),r.addEventListener(i,"mouseover",function(e){for(var r=e.target;r&&r!==i;)r=r.parentNode;r===i&&t.fire(new ui("mouseover",t,e))}),r.addEventListener(i,"touchstart",function(r){var i=new li("touchstart",t,r);t.fire(i),i.defaultPrevented||(e.interactive&&t.stop(),t.boxZoom.isActive()||t.dragRotate.isActive()||t.dragPan.onTouchStart(r),t.touchZoomRotate.onStart(r),t.doubleClickZoom.onTouchStart(i))},{passive:!1}),r.addEventListener(i,"touchmove",function(e){t.fire(new li("touchmove",t,e))},{passive:!1}),r.addEventListener(i,"touchend",function(e){t.fire(new li("touchend",t,e))}),r.addEventListener(i,"touchcancel",function(e){t.fire(new li("touchcancel",t,e))}),r.addEventListener(i,"click",function(n){var o=r.mousePos(i,n);(o.equals(a)||o.dist(a)<e.clickTolerance)&&t.fire(new ui("click",t,n))}),r.addEventListener(i,"dblclick",function(e){var r=new ui("dblclick",t,e);t.fire(r),r.defaultPrevented||t.doubleClickZoom.onDblClick(r)}),r.addEventListener(i,"contextmenu",function(e){var r=t.dragRotate.isActive();o||r?o&&(n=e):t.fire(new ui("contextmenu",t,e)),(t.dragRotate.isEnabled()||t.listens("contextmenu"))&&e.preventDefault()}),r.addEventListener(i,"wheel",function(r){e.interactive&&t.stop();var i=new pi("wheel",t,r);t.fire(i),i.defaultPrevented||t.scrollZoom.onWheel(r)},{passive:!1})}(this,e),this._hash=e.hash&&(new si).addTo(this),this._hash&&this._hash._onHashChange()||(this.jumpTo({center:e.center,zoom:e.zoom,bearing:e.bearing,pitch:e.pitch}),e.bounds&&(this.resize(),this.fitBounds(e.bounds,{duration:0}))),this.resize(),e.style&&this.setStyle(e.style,{localIdeographFontFamily:e.localIdeographFontFamily}),e.attributionControl&&this.addControl(new Si({customAttribution:e.customAttribution})),this.addControl(new Ti,e.logoPosition),this.on("style.load",function(){n.transform.unmodified&&n.jumpTo(n.style.stylesheet)}),this.on("data",function(e){n._update("style"===e.dataType),n.fire(new t.Event(e.dataType+"data",e))}),this.on("dataloading",function(e){n.fire(new t.Event(e.dataType+"dataloading",e))})}i&&(n.__proto__=i),n.prototype=Object.create(i&&i.prototype),n.prototype.constructor=n;var o={showTileBoundaries:{configurable:!0},showCollisionBoxes:{configurable:!0},showOverdrawInspector:{configurable:!0},repaint:{configurable:!0},vertices:{configurable:!0}};return n.prototype._getMapId=function(){return this._mapId},n.prototype.addControl=function(e,r){if(void 0===r&&e.getDefaultPosition&&(r=e.getDefaultPosition()),void 0===r&&(r="top-right"),!e||!e.onAdd)return this.fire(new t.ErrorEvent(new Error("Invalid argument to map.addControl(). Argument must be a control with onAdd and onRemove methods.")));var i=e.onAdd(this);this._controls.push(e);var n=this._controlPositions[r];return-1!==r.indexOf("bottom")?n.insertBefore(i,n.firstChild):n.appendChild(i),this},n.prototype.removeControl=function(e){if(!e||!e.onRemove)return this.fire(new t.ErrorEvent(new Error("Invalid argument to map.removeControl(). Argument must be a control with onAdd and onRemove methods.")));var r=this._controls.indexOf(e);return r>-1&&this._controls.splice(r,1),e.onRemove(this),this},n.prototype.resize=function(e){var r=this._containerDimensions(),i=r[0],n=r[1];return this._resizeCanvas(i,n),this.transform.resize(i,n),this.painter.resize(i,n),this.fire(new t.Event("movestart",e)).fire(new t.Event("move",e)).fire(new t.Event("resize",e)).fire(new t.Event("moveend",e)),this},n.prototype.getBounds=function(){return this.transform.getBounds()},n.prototype.getMaxBounds=function(){return this.transform.getMaxBounds()},n.prototype.setMaxBounds=function(e){return this.transform.setMaxBounds(t.LngLatBounds.convert(e)),this._update()},n.prototype.setMinZoom=function(t){if((t=null==t?0:t)>=0&&t<=this.transform.maxZoom)return this.transform.minZoom=t,this._update(),this.getZoom()<t&&this.setZoom(t),this;throw new Error("minZoom must be between 0 and the current maxZoom, inclusive")},n.prototype.getMinZoom=function(){return this.transform.minZoom},n.prototype.setMaxZoom=function(t){if((t=null==t?22:t)>=this.transform.minZoom)return this.transform.maxZoom=t,this._update(),this.getZoom()>t&&this.setZoom(t),this;throw new Error("maxZoom must be greater than the current minZoom")},n.prototype.getRenderWorldCopies=function(){return this.transform.renderWorldCopies},n.prototype.setRenderWorldCopies=function(t){return this.transform.renderWorldCopies=t,this._update()},n.prototype.getMaxZoom=function(){return this.transform.maxZoom},n.prototype.project=function(e){return this.transform.locationPoint(t.LngLat.convert(e))},n.prototype.unproject=function(e){return this.transform.pointLocation(t.Point.convert(e))},n.prototype.isMoving=function(){return this._moving||this.dragPan.isActive()||this.dragRotate.isActive()||this.scrollZoom.isActive()},n.prototype.isZooming=function(){return this._zooming||this.scrollZoom.isZooming()},n.prototype.isRotating=function(){return this._rotating||this.dragRotate.isActive()},n.prototype.on=function(t,e,r){var n,o=this;if(void 0===r)return i.prototype.on.call(this,t,e);var a=function(){if("mouseenter"===t||"mouseover"===t){var i=!1;return{layer:e,listener:r,delegates:{mousemove:function(n){var a=o.getLayer(e)?o.queryRenderedFeatures(n.point,{layers:[e]}):[];a.length?i||(i=!0,r.call(o,new ui(t,o,n.originalEvent,{features:a}))):i=!1},mouseout:function(){i=!1}}}}if("mouseleave"===t||"mouseout"===t){var a=!1;return{layer:e,listener:r,delegates:{mousemove:function(i){(o.getLayer(e)?o.queryRenderedFeatures(i.point,{layers:[e]}):[]).length?a=!0:a&&(a=!1,r.call(o,new ui(t,o,i.originalEvent)))},mouseout:function(e){a&&(a=!1,r.call(o,new ui(t,o,e.originalEvent)))}}}}return{layer:e,listener:r,delegates:(n={},n[t]=function(t){var i=o.getLayer(e)?o.queryRenderedFeatures(t.point,{layers:[e]}):[];i.length&&(t.features=i,r.call(o,t),delete t.features)},n)}}();for(var s in this._delegatedListeners=this._delegatedListeners||{},this._delegatedListeners[t]=this._delegatedListeners[t]||[],this._delegatedListeners[t].push(a),a.delegates)o.on(s,a.delegates[s]);return this},n.prototype.off=function(t,e,r){if(void 0===r)return i.prototype.off.call(this,t,e);if(this._delegatedListeners&&this._delegatedListeners[t])for(var n=this._delegatedListeners[t],o=0;o<n.length;o++){var a=n[o];if(a.layer===e&&a.listener===r){for(var s in a.delegates)this.off(s,a.delegates[s]);return n.splice(o,1),this}}return this},n.prototype.queryRenderedFeatures=function(e,r){if(!this.style)return[];var i;if(void 0!==r||void 0===e||e instanceof t.Point||Array.isArray(e)||(r=e,e=void 0),r=r||{},(e=e||[[0,0],[this.transform.width,this.transform.height]])instanceof t.Point||"number"==typeof e[0])i=[t.Point.convert(e)];else{var n=t.Point.convert(e[0]),o=t.Point.convert(e[1]);i=[n,new t.Point(o.x,n.y),o,new t.Point(n.x,o.y),n]}return this.style.queryRenderedFeatures(i,r,this.transform)},n.prototype.querySourceFeatures=function(t,e){return this.style.querySourceFeatures(t,e)},n.prototype.setStyle=function(t,e){return(!e||!1!==e.diff&&!e.localIdeographFontFamily)&&this.style&&t?(this._diffStyle(t,e),this):this._updateStyle(t,e)},n.prototype._updateStyle=function(t,e){return this.style&&(this.style.setEventedParent(null),this.style._remove()),t?(this.style=new Le(this,e||{}),this.style.setEventedParent(this,{style:this.style}),"string"==typeof t?this.style.loadURL(t):this.style.loadJSON(t),this):(delete this.style,this)},n.prototype._diffStyle=function(e,r){var i=this;if("string"==typeof e){var n=t.normalizeStyleURL(e),o=this._transformRequest(n,t.ResourceType.Style);t.getJSON(o,function(e,n){e?i.fire(new t.ErrorEvent(e)):n&&i._updateDiff(n,r)})}else"object"==typeof e&&this._updateDiff(e,r)},n.prototype._updateDiff=function(e,r){try{this.style.setState(e)&&this._update(!0)}catch(i){t.warnOnce("Unable to perform style diff: "+(i.message||i.error||i)+". Rebuilding the style from scratch."),this._updateStyle(e,r)}},n.prototype.getStyle=function(){if(this.style)return this.style.serialize()},n.prototype.isStyleLoaded=function(){return this.style?this.style.loaded():t.warnOnce("There is no style added to the map.")},n.prototype.addSource=function(t,e){return this.style.addSource(t,e),this._update(!0)},n.prototype.isSourceLoaded=function(e){var r=this.style&&this.style.sourceCaches[e];if(void 0!==r)return r.loaded();this.fire(new t.ErrorEvent(new Error("There is no source with ID '"+e+"'")))},n.prototype.areTilesLoaded=function(){var t=this.style&&this.style.sourceCaches;for(var e in t){var r=t[e]._tiles;for(var i in r){var n=r[i];if("loaded"!==n.state&&"errored"!==n.state)return!1}}return!0},n.prototype.addSourceType=function(t,e,r){return this.style.addSourceType(t,e,r)},n.prototype.removeSource=function(t){return this.style.removeSource(t),this._update(!0)},n.prototype.getSource=function(t){return this.style.getSource(t)},n.prototype.addImage=function(e,r,i){void 0===i&&(i={});var n=i.pixelRatio;void 0===n&&(n=1);var o=i.sdf;if(void 0===o&&(o=!1),r instanceof zi){var a=t.browser.getImageData(r),s=a.width,u=a.height,l=a.data;this.style.addImage(e,{data:new t.RGBAImage({width:s,height:u},l),pixelRatio:n,sdf:o})}else{if(void 0===r.width||void 0===r.height)return this.fire(new t.ErrorEvent(new Error("Invalid arguments to map.addImage(). The second argument must be an `HTMLImageElement`, `ImageData`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`")));var p=r.width,c=r.height,h=r.data;this.style.addImage(e,{data:new t.RGBAImage({width:p,height:c},new Uint8Array(h)),pixelRatio:n,sdf:o})}},n.prototype.hasImage=function(e){return e?!!this.style.getImage(e):(this.fire(new t.ErrorEvent(new Error("Missing required image id"))),!1)},n.prototype.removeImage=function(t){this.style.removeImage(t)},n.prototype.loadImage=function(e,r){t.getImage(this._transformRequest(e,t.ResourceType.Image),r)},n.prototype.listImages=function(){return this.style.listImages()},n.prototype.addLayer=function(t,e){return this.style.addLayer(t,e),this._update(!0)},n.prototype.moveLayer=function(t,e){return this.style.moveLayer(t,e),this._update(!0)},n.prototype.removeLayer=function(t){return this.style.removeLayer(t),this._update(!0)},n.prototype.getLayer=function(t){return this.style.getLayer(t)},n.prototype.setFilter=function(t,e,r){return void 0===r&&(r={}),this.style.setFilter(t,e,r),this._update(!0)},n.prototype.setLayerZoomRange=function(t,e,r){return this.style.setLayerZoomRange(t,e,r),this._update(!0)},n.prototype.getFilter=function(t){return this.style.getFilter(t)},n.prototype.setPaintProperty=function(t,e,r,i){return void 0===i&&(i={}),this.style.setPaintProperty(t,e,r,i),this._update(!0)},n.prototype.getPaintProperty=function(t,e){return this.style.getPaintProperty(t,e)},n.prototype.setLayoutProperty=function(t,e,r,i){return void 0===i&&(i={}),this.style.setLayoutProperty(t,e,r,i),this._update(!0)},n.prototype.getLayoutProperty=function(t,e){return this.style.getLayoutProperty(t,e)},n.prototype.setLight=function(t,e){return void 0===e&&(e={}),this.style.setLight(t,e),this._update(!0)},n.prototype.getLight=function(){return this.style.getLight()},n.prototype.setFeatureState=function(t,e){return this.style.setFeatureState(t,e),this._update()},n.prototype.getFeatureState=function(t){return this.style.getFeatureState(t)},n.prototype.getContainer=function(){return this._container},n.prototype.getCanvasContainer=function(){return this._canvasContainer},n.prototype.getCanvas=function(){return this._canvas},n.prototype._containerDimensions=function(){var t=0,e=0;return this._container&&(t=this._container.clientWidth||400,e=this._container.clientHeight||300),[t,e]},n.prototype._detectMissingCSS=function(){"rgb(250, 128, 114)"!==t.window.getComputedStyle(this._missingCSSCanary).getPropertyValue("background-color")&&t.warnOnce("This page appears to be missing CSS declarations for Mapbox GL JS, which may cause the map to display incorrectly. Please ensure your page includes mapbox-gl.css, as described in https://www.mapbox.com/mapbox-gl-js/api/.")},n.prototype._setupContainer=function(){var t=this._container;t.classList.add("mapboxgl-map"),(this._missingCSSCanary=r.create("div","mapboxgl-canary",t)).style.visibility="hidden",this._detectMissingCSS();var e=this._canvasContainer=r.create("div","mapboxgl-canvas-container",t);this._interactive&&e.classList.add("mapboxgl-interactive"),this._canvas=r.create("canvas","mapboxgl-canvas",e),this._canvas.style.position="absolute",this._canvas.addEventListener("webglcontextlost",this._contextLost,!1),this._canvas.addEventListener("webglcontextrestored",this._contextRestored,!1),this._canvas.setAttribute("tabindex","0"),this._canvas.setAttribute("aria-label","Map");var i=this._containerDimensions();this._resizeCanvas(i[0],i[1]);var n=this._controlContainer=r.create("div","mapboxgl-control-container",t),o=this._controlPositions={};["top-left","top-right","bottom-left","bottom-right"].forEach(function(t){o[t]=r.create("div","mapboxgl-ctrl-"+t,n)})},n.prototype._resizeCanvas=function(e,r){var i=t.window.devicePixelRatio||1;this._canvas.width=i*e,this._canvas.height=i*r,this._canvas.style.width=e+"px",this._canvas.style.height=r+"px"},n.prototype._setupPainter=function(){var r=t.extend({failIfMajorPerformanceCaveat:this._failIfMajorPerformanceCaveat,preserveDrawingBuffer:this._preserveDrawingBuffer},e.webGLContextAttributes),i=this._canvas.getContext("webgl",r)||this._canvas.getContext("experimental-webgl",r);i?(this.painter=new ei(i,this.transform),t.webpSupported.testSupport(i)):this.fire(new t.ErrorEvent(new Error("Failed to initialize WebGL")))},n.prototype._contextLost=function(e){e.preventDefault(),this._frame&&(this._frame.cancel(),this._frame=null),this.fire(new t.Event("webglcontextlost",{originalEvent:e}))},n.prototype._contextRestored=function(e){this._setupPainter(),this.resize(),this._update(),this.fire(new t.Event("webglcontextrestored",{originalEvent:e}))},n.prototype.loaded=function(){return!this._styleDirty&&!this._sourcesDirty&&!!this.style&&this.style.loaded()},n.prototype._update=function(t){return this.style?(this._styleDirty=this._styleDirty||t,this._sourcesDirty=!0,this.triggerRepaint(),this):this},n.prototype._requestRenderFrame=function(t){return this._update(),this._renderTaskQueue.add(t)},n.prototype._cancelRenderFrame=function(t){this._renderTaskQueue.remove(t)},n.prototype._render=function(){this.painter.context.setDirty(),this.painter.setBaseState(),this._renderTaskQueue.run();var e=!1;if(this.style&&this._styleDirty){this._styleDirty=!1;var r=this.transform.zoom,i=t.browser.now();this.style.zoomHistory.update(r,i);var n=new t.EvaluationParameters(r,{now:i,fadeDuration:this._fadeDuration,zoomHistory:this.style.zoomHistory,transition:this.style.getTransition()}),o=n.crossFadingFactor();1===o&&o===this._crossFadingFactor||(e=!0,this._crossFadingFactor=o),this.style.update(n)}return this.style&&this._sourcesDirty&&(this._sourcesDirty=!1,this.style._updateSources(this.transform)),this._placementDirty=this.style&&this.style._updatePlacement(this.painter.transform,this.showCollisionBoxes,this._fadeDuration,this._crossSourceCollisions),this.painter.render(this.style,{showTileBoundaries:this.showTileBoundaries,showOverdrawInspector:this._showOverdrawInspector,rotating:this.isRotating(),zooming:this.isZooming(),moving:this.isMoving(),fadeDuration:this._fadeDuration}),this.fire(new t.Event("render")),this.loaded()&&!this._loaded&&(this._loaded=!0,this.fire(new t.Event("load"))),this.style&&(this.style.hasTransitions()||e)&&(this._styleDirty=!0),this.style&&!this._placementDirty&&this.style._releaseSymbolFadeTiles(),this._sourcesDirty||this._repaint||this._styleDirty||this._placementDirty?this.triggerRepaint():!this.isMoving()&&this.loaded()&&this.fire(new t.Event("idle")),this},n.prototype.remove=function(){this._hash&&this._hash.remove();for(var e=0,r=this._controls;e<r.length;e+=1)r[e].onRemove(this);this._controls=[],this._frame&&(this._frame.cancel(),this._frame=null),this._renderTaskQueue.clear(),this.setStyle(null),void 0!==t.window&&(t.window.removeEventListener("resize",this._onWindowResize,!1),t.window.removeEventListener("online",this._onWindowOnline,!1));var i=this.painter.context.gl.getExtension("WEBGL_lose_context");i&&i.loseContext(),Pi(this._canvasContainer),Pi(this._controlContainer),Pi(this._missingCSSCanary),this._container.classList.remove("mapboxgl-map"),this.fire(new t.Event("remove"))},n.prototype.triggerRepaint=function(){var e=this;this.style&&!this._frame&&(this._frame=t.browser.frame(function(){e._frame=null,e._render()}))},n.prototype._onWindowOnline=function(){this._update()},n.prototype._onWindowResize=function(){this._trackResize&&this.resize()._update()},o.showTileBoundaries.get=function(){return!!this._showTileBoundaries},o.showTileBoundaries.set=function(t){this._showTileBoundaries!==t&&(this._showTileBoundaries=t,this._update())},o.showCollisionBoxes.get=function(){return!!this._showCollisionBoxes},o.showCollisionBoxes.set=function(t){this._showCollisionBoxes!==t&&(this._showCollisionBoxes=t,t?this.style._generateCollisionBoxes():this._update())},o.showOverdrawInspector.get=function(){return!!this._showOverdrawInspector},o.showOverdrawInspector.set=function(t){this._showOverdrawInspector!==t&&(this._showOverdrawInspector=t,this._update())},o.repaint.get=function(){return!!this._repaint},o.repaint.set=function(t){this._repaint=t,this._update()},o.vertices.get=function(){return!!this._vertices},o.vertices.set=function(t){this._vertices=t,this._update()},Object.defineProperties(n.prototype,o),n}(Ei);function Pi(t){t.parentNode&&t.parentNode.removeChild(t)}var Mi={showCompass:!0,showZoom:!0},Li=function(e){var i=this;this.options=t.extend({},Mi,e),this._container=r.create("div","mapboxgl-ctrl mapboxgl-ctrl-group"),this._container.addEventListener("contextmenu",function(t){return t.preventDefault()}),this.options.showZoom&&(this._zoomInButton=this._createButton("mapboxgl-ctrl-icon mapboxgl-ctrl-zoom-in","Zoom in",function(){return i._map.zoomIn()}),this._zoomOutButton=this._createButton("mapboxgl-ctrl-icon mapboxgl-ctrl-zoom-out","Zoom out",function(){return i._map.zoomOut()})),this.options.showCompass&&(t.bindAll(["_rotateCompassArrow"],this),this._compass=this._createButton("mapboxgl-ctrl-icon mapboxgl-ctrl-compass","Reset bearing to north",function(){return i._map.resetNorth()}),this._compassArrow=r.create("span","mapboxgl-ctrl-compass-arrow",this._compass))};function Di(e,r,i){if(e=new t.LngLat(e.lng,e.lat),r){var n=new t.LngLat(e.lng-360,e.lat),o=new t.LngLat(e.lng+360,e.lat),a=i.locationPoint(e).distSqr(r);i.locationPoint(n).distSqr(r)<a?e=n:i.locationPoint(o).distSqr(r)<a&&(e=o)}for(;Math.abs(e.lng-i.center.lng)>180;){var s=i.locationPoint(e);if(s.x>=0&&s.y>=0&&s.x<=i.width&&s.y<=i.height)break;e.lng>i.center.lng?e.lng-=360:e.lng+=360}return e}Li.prototype._rotateCompassArrow=function(){var t="rotate("+this._map.transform.angle*(180/Math.PI)+"deg)";this._compassArrow.style.transform=t},Li.prototype.onAdd=function(t){return this._map=t,this.options.showCompass&&(this._map.on("rotate",this._rotateCompassArrow),this._rotateCompassArrow(),this._handler=new di(t,{button:"left",element:this._compass}),r.addEventListener(this._compass,"mousedown",this._handler.onMouseDown),this._handler.enable()),this._container},Li.prototype.onRemove=function(){r.remove(this._container),this.options.showCompass&&(this._map.off("rotate",this._rotateCompassArrow),r.removeEventListener(this._compass,"mousedown",this._handler.onMouseDown),this._handler.disable(),delete this._handler),delete this._map},Li.prototype._createButton=function(t,e,i){var n=r.create("button",t,this._container);return n.type="button",n.title=e,n.setAttribute("aria-label",e),n.addEventListener("click",i),n};var Bi={center:"translate(-50%,-50%)",top:"translate(-50%,0)","top-left":"translate(0,0)","top-right":"translate(-100%,0)",bottom:"translate(-50%,-100%)","bottom-left":"translate(0,-100%)","bottom-right":"translate(-100%,-100%)",left:"translate(0,-50%)",right:"translate(-100%,-50%)"};function Ri(t,e,r){var i=t.classList;for(var n in Bi)i.remove("mapboxgl-"+r+"-anchor-"+n);i.add("mapboxgl-"+r+"-anchor-"+e)}var Oi,Fi=function(e){function i(i,n){if(e.call(this),(i instanceof t.window.HTMLElement||n)&&(i=t.extend({element:i},n)),t.bindAll(["_update","_onMove","_onUp","_addDragHandler","_onMapClick"],this),this._anchor=i&&i.anchor||"center",this._color=i&&i.color||"#3FB1CE",this._draggable=i&&i.draggable||!1,this._state="inactive",i&&i.element)this._element=i.element,this._offset=t.Point.convert(i&&i.offset||[0,0]);else{this._defaultMarker=!0,this._element=r.create("div");var o=r.createNS("http://www.w3.org/2000/svg","svg");o.setAttributeNS(null,"height","41px"),o.setAttributeNS(null,"width","27px"),o.setAttributeNS(null,"viewBox","0 0 27 41");var a=r.createNS("http://www.w3.org/2000/svg","g");a.setAttributeNS(null,"stroke","none"),a.setAttributeNS(null,"stroke-width","1"),a.setAttributeNS(null,"fill","none"),a.setAttributeNS(null,"fill-rule","evenodd");var s=r.createNS("http://www.w3.org/2000/svg","g");s.setAttributeNS(null,"fill-rule","nonzero");var u=r.createNS("http://www.w3.org/2000/svg","g");u.setAttributeNS(null,"transform","translate(3.0, 29.0)"),u.setAttributeNS(null,"fill","#000000");for(var l=0,p=[{rx:"10.5",ry:"5.25002273"},{rx:"10.5",ry:"5.25002273"},{rx:"9.5",ry:"4.77275007"},{rx:"8.5",ry:"4.29549936"},{rx:"7.5",ry:"3.81822308"},{rx:"6.5",ry:"3.34094679"},{rx:"5.5",ry:"2.86367051"},{rx:"4.5",ry:"2.38636864"}];l<p.length;l+=1){var c=p[l],h=r.createNS("http://www.w3.org/2000/svg","ellipse");h.setAttributeNS(null,"opacity","0.04"),h.setAttributeNS(null,"cx","10.5"),h.setAttributeNS(null,"cy","5.80029008"),h.setAttributeNS(null,"rx",c.rx),h.setAttributeNS(null,"ry",c.ry),u.appendChild(h)}var f=r.createNS("http://www.w3.org/2000/svg","g");f.setAttributeNS(null,"fill",this._color);var d=r.createNS("http://www.w3.org/2000/svg","path");d.setAttributeNS(null,"d","M27,13.5 C27,19.074644 20.250001,27.000002 14.75,34.500002 C14.016665,35.500004 12.983335,35.500004 12.25,34.500002 C6.7499993,27.000002 0,19.222562 0,13.5 C0,6.0441559 6.0441559,0 13.5,0 C20.955844,0 27,6.0441559 27,13.5 Z"),f.appendChild(d);var m=r.createNS("http://www.w3.org/2000/svg","g");m.setAttributeNS(null,"opacity","0.25"),m.setAttributeNS(null,"fill","#000000");var y=r.createNS("http://www.w3.org/2000/svg","path");y.setAttributeNS(null,"d","M13.5,0 C6.0441559,0 0,6.0441559 0,13.5 C0,19.222562 6.7499993,27 12.25,34.5 C13,35.522727 14.016664,35.500004 14.75,34.5 C20.250001,27 27,19.074644 27,13.5 C27,6.0441559 20.955844,0 13.5,0 Z M13.5,1 C20.415404,1 26,6.584596 26,13.5 C26,15.898657 24.495584,19.181431 22.220703,22.738281 C19.945823,26.295132 16.705119,30.142167 13.943359,33.908203 C13.743445,34.180814 13.612715,34.322738 13.5,34.441406 C13.387285,34.322738 13.256555,34.180814 13.056641,33.908203 C10.284481,30.127985 7.4148684,26.314159 5.015625,22.773438 C2.6163816,19.232715 1,15.953538 1,13.5 C1,6.584596 6.584596,1 13.5,1 Z"),m.appendChild(y);var _=r.createNS("http://www.w3.org/2000/svg","g");_.setAttributeNS(null,"transform","translate(6.0, 7.0)"),_.setAttributeNS(null,"fill","#FFFFFF");var v=r.createNS("http://www.w3.org/2000/svg","g");v.setAttributeNS(null,"transform","translate(8.0, 8.0)");var g=r.createNS("http://www.w3.org/2000/svg","circle");g.setAttributeNS(null,"fill","#000000"),g.setAttributeNS(null,"opacity","0.25"),g.setAttributeNS(null,"cx","5.5"),g.setAttributeNS(null,"cy","5.5"),g.setAttributeNS(null,"r","5.4999962");var x=r.createNS("http://www.w3.org/2000/svg","circle");x.setAttributeNS(null,"fill","#FFFFFF"),x.setAttributeNS(null,"cx","5.5"),x.setAttributeNS(null,"cy","5.5"),x.setAttributeNS(null,"r","5.4999962"),v.appendChild(g),v.appendChild(x),s.appendChild(u),s.appendChild(f),s.appendChild(m),s.appendChild(_),s.appendChild(v),o.appendChild(s),this._element.appendChild(o),this._offset=t.Point.convert(i&&i.offset||[0,-14])}this._element.classList.add("mapboxgl-marker"),this._popup=null}return e&&(i.__proto__=e),i.prototype=Object.create(e&&e.prototype),i.prototype.constructor=i,i.prototype.addTo=function(t){return this.remove(),this._map=t,t.getCanvasContainer().appendChild(this._element),t.on("move",this._update),t.on("moveend",this._update),this.setDraggable(this._draggable),this._update(),this._map.on("click",this._onMapClick),this},i.prototype.remove=function(){return this._map&&(this._map.off("click",this._onMapClick),this._map.off("move",this._update),this._map.off("moveend",this._update),this._map.off("mousedown",this._addDragHandler),this._map.off("touchstart",this._addDragHandler),this._map.off("mouseup",this._onUp),this._map.off("touchend",this._onUp),delete this._map),r.remove(this._element),this._popup&&this._popup.remove(),this},i.prototype.getLngLat=function(){return this._lngLat},i.prototype.setLngLat=function(e){return this._lngLat=t.LngLat.convert(e),this._pos=null,this._popup&&this._popup.setLngLat(this._lngLat),this._update(),this},i.prototype.getElement=function(){return this._element},i.prototype.setPopup=function(t){if(this._popup&&(this._popup.remove(),this._popup=null),t){if(!("offset"in t.options)){var e=Math.sqrt(Math.pow(13.5,2)/2);t.options.offset=this._defaultMarker?{top:[0,0],"top-left":[0,0],"top-right":[0,0],bottom:[0,-38.1],"bottom-left":[e,-1*(24.6+e)],"bottom-right":[-e,-1*(24.6+e)],left:[13.5,-24.6],right:[-13.5,-24.6]}:this._offset}this._popup=t,this._lngLat&&this._popup.setLngLat(this._lngLat)}return this},i.prototype._onMapClick=function(t){var e=t.originalEvent.target,r=this._element;this._popup&&(e===r||r.contains(e))&&this.togglePopup()},i.prototype.getPopup=function(){return this._popup},i.prototype.togglePopup=function(){var t=this._popup;return t?(t.isOpen()?t.remove():t.addTo(this._map),this):this},i.prototype._update=function(t){this._map&&(this._map.transform.renderWorldCopies&&(this._lngLat=Di(this._lngLat,this._pos,this._map.transform)),this._pos=this._map.project(this._lngLat)._add(this._offset),t&&"moveend"!==t.type||(this._pos=this._pos.round()),r.setTransform(this._element,Bi[this._anchor]+" translate("+this._pos.x+"px, "+this._pos.y+"px)"),Ri(this._element,this._anchor,"marker"))},i.prototype.getOffset=function(){return this._offset},i.prototype.setOffset=function(e){return this._offset=t.Point.convert(e),this._update(),this},i.prototype._onMove=function(e){this._pos=e.point.sub(this._positionDelta),this._lngLat=this._map.unproject(this._pos),this.setLngLat(this._lngLat),this._element.style.pointerEvents="none","pending"===this._state&&(this._state="active",this.fire(new t.Event("dragstart"))),this.fire(new t.Event("drag"))},i.prototype._onUp=function(){this._element.style.pointerEvents="auto",this._positionDelta=null,this._map.off("mousemove",this._onMove),this._map.off("touchmove",this._onMove),"active"===this._state&&this.fire(new t.Event("dragend")),this._state="inactive"},i.prototype._addDragHandler=function(t){this._element.contains(t.originalEvent.target)&&(t.preventDefault(),this._positionDelta=t.point.sub(this._pos).add(this._offset),this._state="pending",this._map.on("mousemove",this._onMove),this._map.on("touchmove",this._onMove),this._map.once("mouseup",this._onUp),this._map.once("touchend",this._onUp))},i.prototype.setDraggable=function(t){return this._draggable=!!t,this._map&&(t?(this._map.on("mousedown",this._addDragHandler),this._map.on("touchstart",this._addDragHandler)):(this._map.off("mousedown",this._addDragHandler),this._map.off("touchstart",this._addDragHandler))),this},i.prototype.isDraggable=function(){return this._draggable},i}(t.Evented),Ui={positionOptions:{enableHighAccuracy:!1,maximumAge:0,timeout:6e3},fitBoundsOptions:{maxZoom:15},trackUserLocation:!1,showUserLocation:!0},Vi=function(e){function i(r){e.call(this),this.options=t.extend({},Ui,r),t.bindAll(["_onSuccess","_onError","_finish","_setupUI","_updateCamera","_updateMarker"],this)}return e&&(i.__proto__=e),i.prototype=Object.create(e&&e.prototype),i.prototype.constructor=i,i.prototype.onAdd=function(e){var i;return this._map=e,this._container=r.create("div","mapboxgl-ctrl mapboxgl-ctrl-group"),i=this._setupUI,void 0!==Oi?i(Oi):void 0!==t.window.navigator.permissions?t.window.navigator.permissions.query({name:"geolocation"}).then(function(t){Oi="denied"!==t.state,i(Oi)}):(Oi=!!t.window.navigator.geolocation,i(Oi)),this._container},i.prototype.onRemove=function(){void 0!==this._geolocationWatchID&&(t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0),this.options.showUserLocation&&this._userLocationDotMarker&&this._userLocationDotMarker.remove(),r.remove(this._container),this._map=void 0},i.prototype._onSuccess=function(e){if(this.options.trackUserLocation)switch(this._lastKnownPosition=e,this._watchState){case"WAITING_ACTIVE":case"ACTIVE_LOCK":case"ACTIVE_ERROR":this._watchState="ACTIVE_LOCK",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active-error"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active");break;case"BACKGROUND":case"BACKGROUND_ERROR":this._watchState="BACKGROUND",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background-error"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background")}this.options.showUserLocation&&"OFF"!==this._watchState&&this._updateMarker(e),this.options.trackUserLocation&&"ACTIVE_LOCK"!==this._watchState||this._updateCamera(e),this.options.showUserLocation&&this._dotElement.classList.remove("mapboxgl-user-location-dot-stale"),this.fire(new t.Event("geolocate",e)),this._finish()},i.prototype._updateCamera=function(e){var r=new t.LngLat(e.coords.longitude,e.coords.latitude),i=e.coords.accuracy;this._map.fitBounds(r.toBounds(i),this.options.fitBoundsOptions,{geolocateSource:!0})},i.prototype._updateMarker=function(t){t?this._userLocationDotMarker.setLngLat([t.coords.longitude,t.coords.latitude]).addTo(this._map):this._userLocationDotMarker.remove()},i.prototype._onError=function(e){if(this.options.trackUserLocation)if(1===e.code)this._watchState="OFF",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active-error"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background-error"),void 0!==this._geolocationWatchID&&this._clearWatch();else switch(this._watchState){case"WAITING_ACTIVE":this._watchState="ACTIVE_ERROR",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active-error");break;case"ACTIVE_LOCK":this._watchState="ACTIVE_ERROR",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active-error"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting");break;case"BACKGROUND":this._watchState="BACKGROUND_ERROR",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background-error"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting")}"OFF"!==this._watchState&&this.options.showUserLocation&&this._dotElement.classList.add("mapboxgl-user-location-dot-stale"),this.fire(new t.Event("error",e)),this._finish()},i.prototype._finish=function(){this._timeoutId&&clearTimeout(this._timeoutId),this._timeoutId=void 0},i.prototype._setupUI=function(e){var i=this;!1!==e?(this._container.addEventListener("contextmenu",function(t){return t.preventDefault()}),this._geolocateButton=r.create("button","mapboxgl-ctrl-icon mapboxgl-ctrl-geolocate",this._container),this._geolocateButton.type="button",this._geolocateButton.setAttribute("aria-label","Geolocate"),this.options.trackUserLocation&&(this._geolocateButton.setAttribute("aria-pressed","false"),this._watchState="OFF"),this.options.showUserLocation&&(this._dotElement=r.create("div","mapboxgl-user-location-dot"),this._userLocationDotMarker=new Fi(this._dotElement),this.options.trackUserLocation&&(this._watchState="OFF")),this._geolocateButton.addEventListener("click",this.trigger.bind(this)),this._setup=!0,this.options.trackUserLocation&&this._map.on("movestart",function(e){e.geolocateSource||"ACTIVE_LOCK"!==i._watchState||(i._watchState="BACKGROUND",i._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background"),i._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),i.fire(new t.Event("trackuserlocationend")))})):t.warnOnce("Geolocation support is not available, the GeolocateControl will not be visible.")},i.prototype.trigger=function(){if(!this._setup)return t.warnOnce("Geolocate control triggered before added to a map"),!1;if(this.options.trackUserLocation){switch(this._watchState){case"OFF":this._watchState="WAITING_ACTIVE",this.fire(new t.Event("trackuserlocationstart"));break;case"WAITING_ACTIVE":case"ACTIVE_LOCK":case"ACTIVE_ERROR":case"BACKGROUND_ERROR":this._watchState="OFF",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active-error"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background-error"),this.fire(new t.Event("trackuserlocationend"));break;case"BACKGROUND":this._watchState="ACTIVE_LOCK",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"),this._lastKnownPosition&&this._updateCamera(this._lastKnownPosition),this.fire(new t.Event("trackuserlocationstart"))}switch(this._watchState){case"WAITING_ACTIVE":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active");break;case"ACTIVE_LOCK":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active");break;case"ACTIVE_ERROR":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active-error");break;case"BACKGROUND":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background");break;case"BACKGROUND_ERROR":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background-error")}"OFF"===this._watchState&&void 0!==this._geolocationWatchID?this._clearWatch():void 0===this._geolocationWatchID&&(this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.setAttribute("aria-pressed","true"),this._geolocationWatchID=t.window.navigator.geolocation.watchPosition(this._onSuccess,this._onError,this.options.positionOptions))}else t.window.navigator.geolocation.getCurrentPosition(this._onSuccess,this._onError,this.options.positionOptions),this._timeoutId=setTimeout(this._finish,1e4);return!0},i.prototype._clearWatch=function(){t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0,this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.setAttribute("aria-pressed","false"),this.options.showUserLocation&&this._updateMarker(null)},i}(t.Evented),Ni={maxWidth:100,unit:"metric"},ji=function(e){this.options=t.extend({},Ni,e),t.bindAll(["_onMove","setUnit"],this)};function qi(t,e,r){var i,n,o,a,s,u,l=r&&r.maxWidth||100,p=t._container.clientHeight/2,c=(i=t.unproject([0,p]),n=t.unproject([l,p]),o=Math.PI/180,a=i.lat*o,s=n.lat*o,u=Math.sin(a)*Math.sin(s)+Math.cos(a)*Math.cos(s)*Math.cos((n.lng-i.lng)*o),6371e3*Math.acos(Math.min(u,1)));if(r&&"imperial"===r.unit){var h=3.2808*c;h>5280?Zi(e,l,h/5280,"mi"):Zi(e,l,h,"ft")}else r&&"nautical"===r.unit?Zi(e,l,c/1852,"nm"):Zi(e,l,c,"m")}function Zi(t,e,r,i){var n,o,a,s=(n=r,(o=Math.pow(10,(""+Math.floor(n)).length-1))*(a=(a=n/o)>=10?10:a>=5?5:a>=3?3:a>=2?2:a>=1?1:function(t){var e=Math.pow(10,Math.ceil(-Math.log(t)/Math.LN10));return Math.round(t*e)/e}(a))),u=s/r;"m"===i&&s>=1e3&&(s/=1e3,i="km"),t.style.width=e*u+"px",t.innerHTML=s+i}ji.prototype.getDefaultPosition=function(){return"bottom-left"},ji.prototype._onMove=function(){qi(this._map,this._container,this.options)},ji.prototype.onAdd=function(t){return this._map=t,this._container=r.create("div","mapboxgl-ctrl mapboxgl-ctrl-scale",t.getContainer()),this._map.on("move",this._onMove),this._onMove(),this._container},ji.prototype.onRemove=function(){r.remove(this._container),this._map.off("move",this._onMove),this._map=void 0},ji.prototype.setUnit=function(t){this.options.unit=t,qi(this._map,this._container,this.options)};var Gi=function(e){this._fullscreen=!1,e&&e.container&&(e.container instanceof t.window.HTMLElement?this._container=e.container:t.warnOnce("Full screen control 'container' must be a DOM element.")),t.bindAll(["_onClickFullscreen","_changeIcon"],this),"onfullscreenchange"in t.window.document?this._fullscreenchange="fullscreenchange":"onmozfullscreenchange"in t.window.document?this._fullscreenchange="mozfullscreenchange":"onwebkitfullscreenchange"in t.window.document?this._fullscreenchange="webkitfullscreenchange":"onmsfullscreenchange"in t.window.document&&(this._fullscreenchange="MSFullscreenChange"),this._className="mapboxgl-ctrl"};Gi.prototype.onAdd=function(e){return this._map=e,this._container||(this._container=this._map.getContainer()),this._controlContainer=r.create("div",this._className+" mapboxgl-ctrl-group"),this._checkFullscreenSupport()?this._setupUI():(this._controlContainer.style.display="none",t.warnOnce("This device does not support fullscreen mode.")),this._controlContainer},Gi.prototype.onRemove=function(){r.remove(this._controlContainer),this._map=null,t.window.document.removeEventListener(this._fullscreenchange,this._changeIcon)},Gi.prototype._checkFullscreenSupport=function(){return!!(t.window.document.fullscreenEnabled||t.window.document.mozFullScreenEnabled||t.window.document.msFullscreenEnabled||t.window.document.webkitFullscreenEnabled)},Gi.prototype._setupUI=function(){var e=this._fullscreenButton=r.create("button",this._className+"-icon "+this._className+"-fullscreen",this._controlContainer);e.setAttribute("aria-label","Toggle fullscreen"),e.type="button",this._fullscreenButton.addEventListener("click",this._onClickFullscreen),t.window.document.addEventListener(this._fullscreenchange,this._changeIcon)},Gi.prototype._isFullscreen=function(){return this._fullscreen},Gi.prototype._changeIcon=function(){(t.window.document.fullscreenElement||t.window.document.mozFullScreenElement||t.window.document.webkitFullscreenElement||t.window.document.msFullscreenElement)===this._container!==this._fullscreen&&(this._fullscreen=!this._fullscreen,this._fullscreenButton.classList.toggle(this._className+"-shrink"),this._fullscreenButton.classList.toggle(this._className+"-fullscreen"))},Gi.prototype._onClickFullscreen=function(){this._isFullscreen()?t.window.document.exitFullscreen?t.window.document.exitFullscreen():t.window.document.mozCancelFullScreen?t.window.document.mozCancelFullScreen():t.window.document.msExitFullscreen?t.window.document.msExitFullscreen():t.window.document.webkitCancelFullScreen&&t.window.document.webkitCancelFullScreen():this._container.requestFullscreen?this._container.requestFullscreen():this._container.mozRequestFullScreen?this._container.mozRequestFullScreen():this._container.msRequestFullscreen?this._container.msRequestFullscreen():this._container.webkitRequestFullscreen&&this._container.webkitRequestFullscreen()};var Xi={closeButton:!0,closeOnClick:!0,className:""},Wi=function(e){function i(r){e.call(this),this.options=t.extend(Object.create(Xi),r),t.bindAll(["_update","_onClickClose"],this)}return e&&(i.__proto__=e),i.prototype=Object.create(e&&e.prototype),i.prototype.constructor=i,i.prototype.addTo=function(e){return this._map=e,this._map.on("move",this._update),this.options.closeOnClick&&this._map.on("click",this._onClickClose),this._update(),this.fire(new t.Event("open")),this},i.prototype.isOpen=function(){return!!this._map},i.prototype.remove=function(){return this._content&&r.remove(this._content),this._container&&(r.remove(this._container),delete this._container),this._map&&(this._map.off("move",this._update),this._map.off("click",this._onClickClose),delete this._map),this.fire(new t.Event("close")),this},i.prototype.getLngLat=function(){return this._lngLat},i.prototype.setLngLat=function(e){return this._lngLat=t.LngLat.convert(e),this._pos=null,this._update(),this},i.prototype.setText=function(e){return this.setDOMContent(t.window.document.createTextNode(e))},i.prototype.setHTML=function(e){var r,i=t.window.document.createDocumentFragment(),n=t.window.document.createElement("body");for(n.innerHTML=e;r=n.firstChild;)i.appendChild(r);return this.setDOMContent(i)},i.prototype.setDOMContent=function(t){return this._createContent(),this._content.appendChild(t),this._update(),this},i.prototype._createContent=function(){this._content&&r.remove(this._content),this._content=r.create("div","mapboxgl-popup-content",this._container),this.options.closeButton&&(this._closeButton=r.create("button","mapboxgl-popup-close-button",this._content),this._closeButton.type="button",this._closeButton.setAttribute("aria-label","Close popup"),this._closeButton.innerHTML="&#215;",this._closeButton.addEventListener("click",this._onClickClose))},i.prototype._update=function(){var e=this;if(this._map&&this._lngLat&&this._content){this._container||(this._container=r.create("div","mapboxgl-popup",this._map.getContainer()),this._tip=r.create("div","mapboxgl-popup-tip",this._container),this._container.appendChild(this._content),this.options.className&&this.options.className.split(" ").forEach(function(t){return e._container.classList.add(t)})),this._map.transform.renderWorldCopies&&(this._lngLat=Di(this._lngLat,this._pos,this._map.transform));var i=this._pos=this._map.project(this._lngLat),n=this.options.anchor,o=function e(r){if(r){if("number"==typeof r){var i=Math.round(Math.sqrt(.5*Math.pow(r,2)));return{center:new t.Point(0,0),top:new t.Point(0,r),"top-left":new t.Point(i,i),"top-right":new t.Point(-i,i),bottom:new t.Point(0,-r),"bottom-left":new t.Point(i,-i),"bottom-right":new t.Point(-i,-i),left:new t.Point(r,0),right:new t.Point(-r,0)}}if(r instanceof t.Point||Array.isArray(r)){var n=t.Point.convert(r);return{center:n,top:n,"top-left":n,"top-right":n,bottom:n,"bottom-left":n,"bottom-right":n,left:n,right:n}}return{center:t.Point.convert(r.center||[0,0]),top:t.Point.convert(r.top||[0,0]),"top-left":t.Point.convert(r["top-left"]||[0,0]),"top-right":t.Point.convert(r["top-right"]||[0,0]),bottom:t.Point.convert(r.bottom||[0,0]),"bottom-left":t.Point.convert(r["bottom-left"]||[0,0]),"bottom-right":t.Point.convert(r["bottom-right"]||[0,0]),left:t.Point.convert(r.left||[0,0]),right:t.Point.convert(r.right||[0,0])}}return e(new t.Point(0,0))}(this.options.offset);if(!n){var a,s=this._container.offsetWidth,u=this._container.offsetHeight;a=i.y+o.bottom.y<u?["top"]:i.y>this._map.transform.height-u?["bottom"]:[],i.x<s/2?a.push("left"):i.x>this._map.transform.width-s/2&&a.push("right"),n=0===a.length?"bottom":a.join("-")}var l=i.add(o[n]).round();r.setTransform(this._container,Bi[n]+" translate("+l.x+"px,"+l.y+"px)"),Ri(this._container,n,"popup")}},i.prototype._onClickClose=function(){this.remove()},i}(t.Evented),Hi={version:t.version,supported:e,setRTLTextPlugin:t.setRTLTextPlugin,Map:ki,NavigationControl:Li,GeolocateControl:Vi,AttributionControl:Si,ScaleControl:ji,FullscreenControl:Gi,Popup:Wi,Marker:Fi,Style:Le,LngLat:t.LngLat,LngLatBounds:t.LngLatBounds,Point:t.Point,MercatorCoordinate:t.MercatorCoordinate,Evented:t.Evented,config:t.config,get accessToken(){return t.config.ACCESS_TOKEN},set accessToken(e){t.config.ACCESS_TOKEN=e},get baseApiUrl(){return t.config.API_URL},set baseApiUrl(e){t.config.API_URL=e},get workerCount(){return Pt.workerCount},set workerCount(t){Pt.workerCount=t},get maxParallelImageRequests(){return t.config.MAX_PARALLEL_IMAGE_REQUESTS},set maxParallelImageRequests(e){t.config.MAX_PARALLEL_IMAGE_REQUESTS=e},workerUrl:""};return Hi}),r}()},311:function(t,e,r){}}]); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/vendors~map/mapbox-gl.rtl.css b/plugins/jetpack/_inc/blocks/vendors~map/mapbox-gl.rtl.css
deleted file mode 100644
index 918f0894..00000000
--- a/plugins/jetpack/_inc/blocks/vendors~map/mapbox-gl.rtl.css
+++ /dev/null
@@ -1 +0,0 @@
-.mapboxgl-map{font:12px/20px Helvetica Neue,Arial,Helvetica,sans-serif;overflow:hidden;position:relative;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mapboxgl-map:-webkit-full-screen{width:100%;height:100%}.mapboxgl-canary{background-color:salmon}.mapboxgl-canvas-container.mapboxgl-interactive,.mapboxgl-ctrl-group>button.mapboxgl-ctrl-compass{cursor:grab;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.mapboxgl-canvas-container.mapboxgl-interactive:active,.mapboxgl-ctrl-group>button.mapboxgl-ctrl-compass:active{cursor:grabbing}.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate,.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate .mapboxgl-canvas{touch-action:pan-x pan-y}.mapboxgl-canvas-container.mapboxgl-touch-drag-pan,.mapboxgl-canvas-container.mapboxgl-touch-drag-pan .mapboxgl-canvas{touch-action:pinch-zoom}.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan,.mapboxgl-canvas-container.mapboxgl-touch-zoom-rotate.mapboxgl-touch-drag-pan .mapboxgl-canvas{touch-action:none}.mapboxgl-ctrl-bottom-left,.mapboxgl-ctrl-bottom-right,.mapboxgl-ctrl-top-left,.mapboxgl-ctrl-top-right{position:absolute;pointer-events:none;z-index:2}.mapboxgl-ctrl-top-left{top:0;right:0}.mapboxgl-ctrl-top-right{top:0;left:0}.mapboxgl-ctrl-bottom-left{bottom:0;right:0}.mapboxgl-ctrl-bottom-right{left:0;bottom:0}.mapboxgl-ctrl{clear:both;pointer-events:auto}.mapboxgl-ctrl-top-left .mapboxgl-ctrl{margin:10px 10px 0 0;float:right}.mapboxgl-ctrl-top-right .mapboxgl-ctrl{margin:10px 0 0 10px;float:left}.mapboxgl-ctrl-bottom-left .mapboxgl-ctrl{margin:0 10px 10px 0;float:right}.mapboxgl-ctrl-bottom-right .mapboxgl-ctrl{margin:0 0 10px 10px;float:left}.mapboxgl-ctrl-group{border-radius:4px;overflow:hidden;background:#fff}.mapboxgl-ctrl-group:not(:empty){box-shadow:0 0 0 2px rgba(0,0,0,.1)}.mapboxgl-ctrl-group>button{width:30px;height:30px;display:block;padding:0;outline:none;border:0;box-sizing:border-box;background-color:transparent;cursor:pointer}.mapboxgl-ctrl-group>button+button{border-top:1px solid #ddd}.mapboxgl-ctrl>button::-moz-focus-inner{border:0;padding:0}.mapboxgl-ctrl>button:hover{background-color:rgba(0,0,0,.05)}.mapboxgl-ctrl-icon,.mapboxgl-ctrl-icon>.mapboxgl-ctrl-compass-arrow{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.mapboxgl-ctrl-icon{padding:5px}.mapboxgl-ctrl-icon.mapboxgl-ctrl-zoom-out{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M7 9c-.554 0-1 .446-1 1s.446 1 1 1h6c.554 0 1-.446 1-1s-.446-1-1-1z' fill='%23333'/%3E%3C/svg%3E")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-zoom-in{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10 6c-.554 0-1 .446-1 1v2H7c-.554 0-1 .446-1 1s.446 1 1 1h2v2c0 .554.446 1 1 1s1-.446 1-1v-2h2c.554 0 1-.446 1-1s-.446-1-1-1h-2V7c0-.554-.446-1-1-1z' fill='%23333'/%3E%3C/svg%3E")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23333'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 0 1 3.5 3.5 3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 6.5 10 3.5 3.5 0 0 1 10 6.5zm0 1.8A1.8 1.8 0 0 0 8.3 10a1.8 1.8 0 0 0 1.7 1.8 1.8 1.8 0 0 0 1.8-1.8A1.8 1.8 0 0 0 10 8.3z'/%3E%3C/svg%3E")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate:disabled{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23aaa'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 0 1 3.5 3.5 3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 6.5 10 3.5 3.5 0 0 1 10 6.5zm0 1.8A1.8 1.8 0 0 0 8.3 10a1.8 1.8 0 0 0 1.7 1.8 1.8 1.8 0 0 0 1.8-1.8A1.8 1.8 0 0 0 10 8.3z'/%3E%3C/svg%3E")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 0 1 3.5 3.5 3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 6.5 10 3.5 3.5 0 0 1 10 6.5zm0 1.8A1.8 1.8 0 0 0 8.3 10a1.8 1.8 0 0 0 1.7 1.8 1.8 1.8 0 0 0 1.8-1.8A1.8 1.8 0 0 0 10 8.3z'/%3E%3C/svg%3E")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-active-error{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e58978'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 0 1 3.5 3.5 3.5 3.5 0 0 1-3.5 3.5A3.5 3.5 0 0 1 6.5 10 3.5 3.5 0 0 1 10 6.5zm0 1.8A1.8 1.8 0 0 0 8.3 10a1.8 1.8 0 0 0 1.7 1.8 1.8 1.8 0 0 0 1.8-1.8A1.8 1.8 0 0 0 10 8.3z'/%3E%3C/svg%3E")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%2333b5e5'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 0 1 0-7z'/%3E%3C/svg%3E")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-background-error{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23e54e33'%3E%3Cpath d='M10 4C9 4 9 5 9 5v.1A5 5 0 0 0 5.1 9H5s-1 0-1 1 1 1 1 1h.1A5 5 0 0 0 9 14.9v.1s0 1 1 1 1-1 1-1v-.1a5 5 0 0 0 3.9-3.9h.1s1 0 1-1-1-1-1-1h-.1A5 5 0 0 0 11 5.1V5s0-1-1-1zm0 2.5a3.5 3.5 0 1 1 0 7 3.5 3.5 0 0 1 0-7z'/%3E%3C/svg%3E")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate.mapboxgl-ctrl-geolocate-waiting{animation:mapboxgl-spin 2s linear infinite}@keyframes mapboxgl-spin{0%{transform:rotate(0deg)}to{transform:rotate(-1turn)}}.mapboxgl-ctrl-icon.mapboxgl-ctrl-fullscreen{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5 4c-.5 0-1 .5-1 1v4h.5l1.277-1.703c1 .763 2.059 1.66 3.114 2.703a30.38 30.38 0 0 1-3.11 2.707L4.5 11H4v4c0 .5.5 1 1 1h4v-.5l-1.727-1.295a35.498 35.498 0 0 1 2.688-3.137 30.312 30.312 0 0 1 2.746 3.15L11 15.5v.5h4c.5 0 1-.5 1-1v-4h-.5l-1.295 1.727a35.513 35.513 0 0 1-3.168-2.717 47.787 47.787 0 0 1 3.192-2.705L15.5 9h.5V5c0-.5-.5-1-1-1h-4v.5l1.703 1.277A32.243 32.243 0 0 1 9.971 8.92 47.761 47.761 0 0 1 7.305 5.77L9 4.5V4H5z'/%3E%3C/svg%3E")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-shrink{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.242 3.492a.75.75 0 0 0-.523 1.29l2.246 2.245L4 8.5V9h4c.5 0 1-.5 1-1V4h-.5L7.018 5.955 4.78 3.72a.75.75 0 0 0-.539-.227zm11.492 0a.75.75 0 0 0-.515.227l-2.235 2.234L11.5 4H11v4c0 .5.5 1 1 1h4v-.5l-1.965-1.473 2.246-2.246a.75.75 0 0 0-.547-1.289zM4 11v.5l1.965 1.473-2.246 2.246A.751.751 0 1 0 4.78 16.28l2.246-2.246L8.5 16H9v-4c0-.5-.5-1-1-1H4zm8 0c-.5 0-1 .5-1 1v4h.5l1.473-1.965 2.246 2.246a.751.751 0 1 0 1.062-1.062l-2.246-2.246L16 11.5V11h-4z'/%3E%3C/svg%3E")}.mapboxgl-ctrl-icon.mapboxgl-ctrl-compass>.mapboxgl-ctrl-compass-arrow{width:20px;height:20px;margin:5px;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23333' d='M6 9l4-8 4 8z'/%3E%3Cpath fill='%23CCC' d='M6 11l4 8 4-8z'/%3E%3C/svg%3E");background-repeat:no-repeat;display:inline-block}a.mapboxgl-ctrl-logo{width:85px;height:21px;margin:0 -3px -3px 0;display:block;background-repeat:no-repeat;cursor:pointer;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 84.49 21'%3E%3Cpath class='st0' d='M83.25 14.26c0 .12-.09.21-.21.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.39-1.44 2.39a.34.34 0 0 1-.3.17h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.68-2.39-3.64a.213.213 0 0 1-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.36 1.4-2.35a.34.34 0 0 1 .3-.17H83c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.37 3.63 2.43 3.67c0 .05.01.09.01.13zM66.24 9.59c-.39-1.88-1.96-3.28-3.84-3.28-1.03 0-2.03.42-2.73 1.18V3.51c0-.13-.1-.23-.23-.23h-1.4c-.13 0-.23.11-.23.23v10.72c0 .13.1.23.23.23h1.4c.13 0 .23-.11.23-.23v-.73c.71.75 1.7 1.18 2.73 1.18 1.88 0 3.45-1.41 3.84-3.29.13-.6.13-1.21 0-1.8zM62.08 13c-1.32 0-2.39-1.11-2.41-2.48v-.06c.02-1.38 1.09-2.48 2.41-2.48s2.42 1.12 2.42 2.51S63.41 13 62.08 13zM71.67 6.32a4.24 4.24 0 0 0-4.16 3.29c-.13.59-.13 1.19 0 1.77a4.233 4.233 0 0 0 4.17 3.3c2.35 0 4.26-1.87 4.26-4.19s-1.9-4.17-4.27-4.17zm-.02 6.69c-1.33 0-2.42-1.12-2.42-2.51s1.08-2.52 2.42-2.52c1.33 0 2.42 1.12 2.42 2.51s-1.08 2.51-2.42 2.52z' opacity='.9' fill='%23fff'/%3E%3Cpath class='st1' d='M62.08 7.98c-1.32 0-2.39 1.11-2.41 2.48v.06c.01 1.38 1.08 2.48 2.41 2.48s2.42-1.12 2.42-2.51-1.09-2.51-2.42-2.51zm0 3.78c-.63 0-1.14-.56-1.17-1.25v-.04c.01-.69.54-1.25 1.17-1.25.63 0 1.17.57 1.17 1.27-.01.71-.52 1.27-1.17 1.27zM71.65 7.98c-1.33 0-2.42 1.12-2.42 2.51S70.32 13 71.65 13s2.42-1.12 2.42-2.51-1.08-2.51-2.42-2.51zm0 3.78c-.64 0-1.17-.57-1.17-1.27 0-.7.53-1.26 1.17-1.26s1.17.57 1.17 1.27c0 .71-.53 1.26-1.17 1.26z' opacity='.35'/%3E%3Cpath class='st0' d='M45.74 6.53h-1.4c-.13 0-.23.11-.23.23v.73c-.71-.75-1.7-1.18-2.73-1.18-2.17 0-3.94 1.87-3.94 4.19s1.77 4.19 3.94 4.19c1.04 0 2.03-.43 2.73-1.19v.73c0 .13.1.23.23.23h1.4c.13 0 .23-.11.23-.23V6.74c0-.12-.09-.22-.22-.22 0 .01 0 .01-.01.01zm-1.62 4C44.11 11.9 43.03 13 41.71 13s-2.42-1.12-2.42-2.51 1.08-2.52 2.4-2.52c1.33 0 2.39 1.11 2.41 2.48l.02.08z' opacity='.9' fill='%23fff'/%3E%3Cpath class='st1' d='M41.71 7.98c-1.33 0-2.42 1.12-2.42 2.51S40.37 13 41.71 13s2.39-1.11 2.41-2.48v-.06c-.02-1.37-1.09-2.48-2.41-2.48zm-1.16 2.51c0-.7.52-1.27 1.17-1.27.64 0 1.14.56 1.17 1.25v.04c-.01.68-.53 1.24-1.17 1.24-.64 0-1.17-.56-1.17-1.26z' opacity='.35'/%3E%3Cpath class='st0' d='M52.41 6.32c-1.03 0-2.03.42-2.73 1.18v-.75c0-.13-.1-.23-.23-.23h-1.4c-.13 0-.23.11-.23.23v10.72c0 .13.1.23.23.23h1.4c.13 0 .23-.1.23-.23V13.5c.71.75 1.7 1.18 2.74 1.18 2.17 0 3.94-1.87 3.94-4.19s-1.78-4.17-3.95-4.17zm-.33 6.69c-1.32 0-2.39-1.11-2.42-2.48v-.07c.02-1.38 1.09-2.49 2.4-2.49 1.32 0 2.41 1.12 2.41 2.51S53.4 13 52.08 13.01z' opacity='.9' fill='%23fff'/%3E%3Cpath class='st1' d='M52.08 7.98c-1.32 0-2.39 1.11-2.42 2.48v.06c.03 1.38 1.1 2.48 2.42 2.48s2.41-1.12 2.41-2.51-1.09-2.51-2.41-2.51zm0 3.78c-.63 0-1.14-.56-1.17-1.25v-.04c.01-.69.54-1.25 1.17-1.25.63 0 1.17.58 1.17 1.27s-.53 1.27-1.17 1.27z' opacity='.35'/%3E%3Cpath class='st0' d='M36.08 14.24c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23V9.68c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.66c0 .13-.11.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23V9.68c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.48c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.11-.23-.23V6.74c.01-.13.1-.22.23-.22h1.4c.13 0 .22.11.23.22v.66c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.03 5.17z' opacity='.9' fill='%23fff'/%3E%3Cpath class='st1' d='M84.34 13.59l-.07-.13-1.96-2.99 1.94-2.95c.44-.67.26-1.56-.41-2.02-.02 0-.03 0-.04-.01-.23-.15-.5-.22-.78-.22h-1.61c-.56 0-1.08.29-1.37.78l-.32.55-.34-.56c-.29-.48-.81-.77-1.38-.77h-1.6c-.6 0-1.13.37-1.35.92a5.59 5.59 0 0 0-7.26.45c-.35.34-.65.72-.89 1.14-.9-1.62-2.58-2.72-4.5-2.72-.5 0-1.01.07-1.48.23V3.51c0-.82-.66-1.48-1.47-1.48h-1.4c-.81 0-1.47.66-1.47 1.47v3.75a5.12 5.12 0 0 0-4.17-2.19c-.74 0-1.46.16-2.12.47-.24-.17-.54-.26-.84-.26h-1.4c-.45 0-.87.21-1.15.56a1.498 1.498 0 0 0-1.16-.55h-1.39c-.3 0-.6.09-.84.26-.67-.3-1.39-.46-2.12-.46-1.83 0-3.43 1-4.37 2.5-.2-.46-.48-.89-.83-1.25-.8-.81-1.89-1.25-3.02-1.25h-.01c-.89.01-1.75.33-2.46.88-.74-.57-1.64-.88-2.57-.88h-.03c-.29 0-.58.03-.86.11-.28.06-.56.16-.82.28-.21-.12-.45-.18-.7-.18h-1.4c-.82 0-1.47.66-1.47 1.47v7.5c0 .82.66 1.47 1.47 1.47h1.4c.82 0 1.48-.66 1.48-1.48V9.79c.03-.36.23-.59.36-.59.18 0 .38.18.38.47v4.57c0 .82.66 1.47 1.47 1.47h1.41c.82 0 1.47-.66 1.47-1.47l-.01-4.57c.06-.32.25-.47.35-.47.18 0 .38.18.38.47v4.57c0 .82.66 1.47 1.47 1.47h1.41c.82 0 1.47-.66 1.47-1.47v-.38a5.068 5.068 0 0 0 4.06 2.06c.74 0 1.46-.16 2.12-.47.24.17.54.26.84.26h1.39c.3 0 .6-.09.84-.26v2.01c0 .82.66 1.47 1.47 1.47h1.4c.82 0 1.47-.66 1.47-1.47v-1.77c.48.15.99.23 1.49.22 1.7 0 3.22-.87 4.17-2.2v.52c0 .82.66 1.47 1.47 1.47h1.4c.3 0 .6-.09.84-.26.66.31 1.39.47 2.12.47 1.92 0 3.6-1.1 4.49-2.73 1.54 2.65 4.95 3.53 7.58 1.98.18-.11.36-.22.53-.36.22.55.76.91 1.35.9H78c.56 0 1.08-.29 1.37-.78l.37-.61.37.61c.29.48.81.78 1.38.78h1.6c.81 0 1.46-.66 1.45-1.46-.05-.22-.1-.44-.2-.65zm-48.48.88h-1.41c-.13 0-.23-.11-.23-.23V9.68c0-.98-.74-1.71-1.62-1.71-.8 0-1.46.7-1.59 1.62l.01 4.66c0 .13-.1.23-.23.23h-1.41c-.13 0-.23-.11-.23-.23V9.68c0-.98-.74-1.71-1.62-1.71-.85 0-1.54.79-1.6 1.8v4.48c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.11-.23-.23V6.74a.23.23 0 0 1 .23-.22h1.4c.13 0 .22.11.23.22v.66c.5-.68 1.3-1.09 2.16-1.1h.03c1.09 0 2.09.6 2.6 1.55.45-.95 1.4-1.55 2.44-1.56 1.62 0 2.93 1.25 2.9 2.78l.01 5.16c.02.13-.09.23-.21.24zm10.11-.23c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.11-.23-.23v-.74c-.7.76-1.69 1.18-2.72 1.18-2.17 0-3.94-1.87-3.94-4.19s1.77-4.19 3.94-4.19c1.03 0 2.02.43 2.73 1.18v-.74c0-.13.1-.23.23-.23h1.4c.12-.01.22.08.23.21V14.25h-.01v-.01zm6.44.43c-1.03 0-2.02-.43-2.73-1.18v3.97c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.1-.23-.23V6.75c0-.13.1-.22.23-.22h1.4c.13 0 .23.11.23.23v.73a3.73 3.73 0 0 1 2.73-1.18c2.17 0 3.94 1.86 3.94 4.18s-1.77 4.18-3.94 4.18zm13.83-3.28c-.39 1.87-1.96 3.29-3.84 3.29-1.03 0-2.02-.43-2.73-1.18v.73c0 .13-.1.23-.23.23h-1.4c-.13 0-.23-.11-.23-.23V3.51c0-.13.1-.23.23-.23h1.4c.13 0 .23.11.23.23v3.97a3.72 3.72 0 0 1 2.73-1.17c1.88 0 3.45 1.4 3.84 3.28.13.6.13 1.21 0 1.8zm5.43 3.29c-2 .01-3.73-1.35-4.17-3.3-.13-.59-.13-1.19 0-1.77a4.243 4.243 0 0 1 4.17-3.3c2.36 0 4.26 1.87 4.26 4.19s-1.9 4.18-4.26 4.18zm11.37-.21h-1.61c-.13 0-.24-.06-.3-.17l-1.44-2.39-1.44 2.39a.34.34 0 0 1-.3.17h-1.61c-.04 0-.08-.01-.12-.03-.09-.06-.13-.19-.06-.28l2.43-3.68-2.39-3.64a.213.213 0 0 1-.03-.12c0-.12.09-.21.21-.21h1.61c.13 0 .24.06.3.17l1.41 2.36 1.41-2.36a.34.34 0 0 1 .3-.17h1.61c.04 0 .08.01.12.03.09.06.13.19.06.28l-2.38 3.64 2.43 3.67c.02.03.03.07.03.12-.03.13-.12.22-.24.22z' opacity='.35'/%3E%3Cpath class='st0' d='M10.5 1.24c-5.11 0-9.25 4.15-9.25 9.25s4.15 9.25 9.25 9.25 9.25-4.15 9.25-9.25c0-5.11-4.14-9.25-9.25-9.25zm4.39 11.53c-1.93 1.93-4.78 2.31-6.7 2.31-.7 0-1.41-.05-2.1-.16 0 0-1.02-5.64 2.14-8.81a4.4 4.4 0 0 1 3.13-1.28c1.27 0 2.49.51 3.39 1.42 1.84 1.84 1.89 4.75.14 6.52z' opacity='.9' fill='%23fff'/%3E%3Cpath class='st1' d='M10.5-.01C4.7-.01 0 4.7 0 10.49s4.7 10.5 10.5 10.5S21 16.29 21 10.49C20.99 4.7 16.3-.01 10.5-.01zm0 19.75c-5.11 0-9.25-4.15-9.25-9.25s4.14-9.26 9.25-9.26 9.25 4.15 9.25 9.25c0 5.13-4.14 9.26-9.25 9.26z' opacity='.35'/%3E%3Cpath class='st1' d='M14.74 6.25c-1.84-1.84-4.76-1.9-6.51-.15-3.16 3.17-2.14 8.81-2.14 8.81s5.64 1.02 8.81-2.14c1.74-1.77 1.69-4.68-.16-6.52zm-2.27 4.09l-.91 1.87-.9-1.87-1.86-.91 1.86-.9.9-1.87.91 1.87 1.86.9-1.86.91z' opacity='.35'/%3E%3Cpath class='st0' opacity='.9' fill='%23fff' d='M14.33 9.43l-1.86.91-.91 1.87-.9-1.87-1.86-.91 1.86-.9.9-1.87.91 1.87z'/%3E%3C/svg%3E")}a.mapboxgl-ctrl-logo.mapboxgl-compact{width:21px;height:21px;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 21 21'%3E%3Cpath d='M10.5 1.25c-5.11 0-9.25 4.15-9.25 9.25s4.15 9.25 9.25 9.25 9.25-4.15 9.25-9.25c0-5.11-4.14-9.25-9.25-9.25zm4.39 11.53c-1.93 1.93-4.78 2.31-6.7 2.31-.7 0-1.41-.05-2.1-.16 0 0-1.02-5.64 2.14-8.81a4.4 4.4 0 0 1 3.13-1.28c1.27 0 2.49.51 3.39 1.42 1.84 1.84 1.89 4.75.14 6.52z' class='st0' opacity='.9' fill='%23fff'/%3E%3Cpath d='M10.5 0C4.7 0 0 4.71 0 10.5S4.7 21 10.5 21 21 16.3 21 10.5C20.99 4.71 16.3 0 10.5 0zm0 19.75c-5.11 0-9.25-4.15-9.25-9.25s4.14-9.26 9.25-9.26 9.25 4.15 9.25 9.25c0 5.13-4.14 9.26-9.25 9.26z' class='st1' opacity='.35'/%3E%3Cpath d='M14.74 6.26c-1.84-1.84-4.76-1.9-6.51-.15-3.16 3.17-2.14 8.81-2.14 8.81s5.64 1.02 8.81-2.14c1.74-1.77 1.69-4.68-.16-6.52zm-2.27 4.09l-.91 1.87-.9-1.87-1.86-.91 1.86-.9.9-1.87.91 1.87 1.86.9z' class='st1' opacity='.35'/%3E%3Cpath class='st0' opacity='.9' fill='%23fff' d='M11.56 12.22l-.9-1.87-1.86-.91 1.86-.9.9-1.87.91 1.87 1.86.9-1.86.91z'/%3E%3C/svg%3E")}.mapboxgl-ctrl.mapboxgl-ctrl-attrib{padding:0 5px;background-color:hsla(0,0%,100%,.5);margin:0}@media screen{.mapboxgl-ctrl-attrib.mapboxgl-compact{margin:10px;position:relative;background-color:#fff;border-radius:12px 3px 3px 12px}.mapboxgl-ctrl-attrib.mapboxgl-compact:hover{padding:2px 4px 2px 24px;visibility:visible}.mapboxgl-ctrl-bottom-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:hover,.mapboxgl-ctrl-top-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:hover{padding:2px 24px 2px 4px;border-radius:3px 12px 12px 3px}.mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner{display:none}.mapboxgl-ctrl-attrib.mapboxgl-compact:hover .mapboxgl-ctrl-attrib-inner{display:block}.mapboxgl-ctrl-attrib.mapboxgl-compact:after{content:"";cursor:pointer;position:absolute;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%23333' fill-rule='evenodd' d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/%3E%3C/svg%3E");background-color:hsla(0,0%,100%,.5);width:24px;height:24px;box-sizing:border-box;border-radius:12px}.mapboxgl-ctrl-bottom-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{bottom:0;left:0}.mapboxgl-ctrl-top-right>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{top:0;left:0}.mapboxgl-ctrl-top-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{top:0;right:0}.mapboxgl-ctrl-bottom-left>.mapboxgl-ctrl-attrib.mapboxgl-compact:after{bottom:0;right:0}}.mapboxgl-ctrl-attrib a{color:rgba(0,0,0,.75);text-decoration:none}.mapboxgl-ctrl-attrib a:hover{color:inherit;text-decoration:underline}.mapboxgl-ctrl-attrib .mapbox-improve-map{font-weight:700;margin-right:2px}.mapboxgl-attrib-empty{display:none}.mapboxgl-ctrl-scale{background-color:hsla(0,0%,100%,.75);font-size:10px;border:2px solid #333;border-top:#333;padding:0 5px;color:#333;box-sizing:border-box}.mapboxgl-popup{position:absolute;top:0;right:0;display:flex;will-change:transform;pointer-events:none}.mapboxgl-popup-anchor-top,.mapboxgl-popup-anchor-top-left,.mapboxgl-popup-anchor-top-right{flex-direction:column}.mapboxgl-popup-anchor-bottom,.mapboxgl-popup-anchor-bottom-left,.mapboxgl-popup-anchor-bottom-right{flex-direction:column-reverse}.mapboxgl-popup-anchor-left{flex-direction:row}.mapboxgl-popup-anchor-right{flex-direction:row-reverse}.mapboxgl-popup-tip{width:0;height:0;border:10px solid transparent;z-index:1}.mapboxgl-popup-anchor-top .mapboxgl-popup-tip{align-self:center;border-top:none;border-bottom-color:#fff}.mapboxgl-popup-anchor-top-left .mapboxgl-popup-tip{align-self:flex-start;border-top:none;border-right:none;border-bottom-color:#fff}.mapboxgl-popup-anchor-top-right .mapboxgl-popup-tip{align-self:flex-end;border-top:none;border-left:none;border-bottom-color:#fff}.mapboxgl-popup-anchor-bottom .mapboxgl-popup-tip{align-self:center;border-bottom:none;border-top-color:#fff}.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-tip{align-self:flex-start;border-bottom:none;border-right:none;border-top-color:#fff}.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-tip{align-self:flex-end;border-bottom:none;border-left:none;border-top-color:#fff}.mapboxgl-popup-anchor-left .mapboxgl-popup-tip{align-self:center;border-right:none;border-left-color:#fff}.mapboxgl-popup-anchor-right .mapboxgl-popup-tip{align-self:center;border-left:none;border-right-color:#fff}.mapboxgl-popup-close-button{position:absolute;left:0;top:0;border:0;border-radius:3px 0 0 0;cursor:pointer;background-color:transparent}.mapboxgl-popup-close-button:hover{background-color:rgba(0,0,0,.05)}.mapboxgl-popup-content{position:relative;background:#fff;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.1);padding:10px 10px 15px;pointer-events:auto}.mapboxgl-popup-anchor-top-left .mapboxgl-popup-content{border-top-right-radius:0}.mapboxgl-popup-anchor-top-right .mapboxgl-popup-content{border-top-left-radius:0}.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-content{border-bottom-right-radius:0}.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-content{border-bottom-left-radius:0}.mapboxgl-marker{position:absolute;top:0;right:0;will-change:transform}.mapboxgl-user-location-dot{box-shadow:0 0 2px rgba(0,0,0,.25)}.mapboxgl-user-location-dot,.mapboxgl-user-location-dot:before{background-color:#1da1f2;width:15px;height:15px;border-radius:50%}.mapboxgl-user-location-dot:before{content:"";position:absolute;animation:mapboxgl-user-location-dot-pulse 2s infinite}.mapboxgl-user-location-dot:after{border-radius:50%;border:2px solid #fff;content:"";height:19px;right:-2px;position:absolute;top:-2px;width:19px;box-sizing:border-box}@keyframes mapboxgl-user-location-dot-pulse{0%{transform:scale(1);opacity:1}70%{transform:scale(3);opacity:0}to{transform:scale(1);opacity:0}}.mapboxgl-user-location-dot-stale{background-color:#aaa}.mapboxgl-user-location-dot-stale:after{display:none}.mapboxgl-crosshair,.mapboxgl-crosshair .mapboxgl-interactive,.mapboxgl-crosshair .mapboxgl-interactive:active{cursor:crosshair}.mapboxgl-boxzoom{position:absolute;top:0;right:0;width:0;height:0;background:#fff;border:2px dotted #202020;opacity:.5}@media print{.mapbox-improve-map{display:none}} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/vendors~swiper.css b/plugins/jetpack/_inc/blocks/vendors~swiper.css
deleted file mode 100644
index 650afb1a..00000000
--- a/plugins/jetpack/_inc/blocks/vendors~swiper.css
+++ /dev/null
@@ -1 +0,0 @@
-.swiper-container{margin:0 auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translateZ(0);transform:translateZ(0)}.swiper-container-multirow>.swiper-wrapper{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100%;height:100%;position:relative;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-transition-property:height,-webkit-transform;transition-property:height,-webkit-transform;-o-transition-property:transform,height;transition-property:transform,height;transition-property:transform,height,-webkit-transform}.swiper-container-3d{-webkit-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(right,rgba(0,0,0,.5),transparent);background-image:linear-gradient(270deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:linear-gradient(90deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),transparent);background-image:linear-gradient(0deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(top,rgba(0,0,0,.5),transparent);background-image:linear-gradient(180deg,rgba(0,0,0,.5),transparent)}.swiper-container-wp8-horizontal,.swiper-container-wp8-horizontal>.swiper-wrapper{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-container-wp8-vertical,.swiper-container-wp8-vertical>.swiper-wrapper{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;background-size:27px 44px;background-position:50%;background-repeat:no-repeat}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z' fill='%23007aff'/%3E%3C/svg%3E");left:10px;right:auto}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z' fill='%23007aff'/%3E%3C/svg%3E");right:10px;left:auto}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z' fill='%23fff'/%3E%3C/svg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z' fill='%23fff'/%3E%3C/svg%3E")}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z'/%3E%3C/svg%3E")}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z'/%3E%3C/svg%3E")}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:opacity .3s;-o-transition:.3s opacity;transition:opacity .3s;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active,.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{-webkit-transform:scale(.66);-ms-transform:scale(.66);transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{-webkit-transform:scale(.66);-ms-transform:scale(.66);transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33)}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;-webkit-box-shadow:none;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet-active{opacity:1;background:#007aff}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:6px 0;display:block}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);width:8px}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;-webkit-transition:top .2s,-webkit-transform .2s;transition:top .2s,-webkit-transform .2s;-o-transition:.2s transform,.2s top;transition:transform .2s,top .2s;transition:transform .2s,top .2s,-webkit-transform .2s}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 4px}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);white-space:nowrap}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transition:left .2s,-webkit-transform .2s;transition:left .2s,-webkit-transform .2s;-o-transition:.2s transform,.2s left;transition:transform .2s,left .2s;transition:transform .2s,left .2s,-webkit-transform .2s}.swiper-container-horizontal.swiper-container-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transition:right .2s,-webkit-transform .2s;transition:right .2s,-webkit-transform .2s;-o-transition:.2s transform,.2s right;transition:transform .2s,right .2s;transition:transform .2s,right .2s,-webkit-transform .2s}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:#007aff;position:absolute;left:0;top:0;width:100%;height:100%;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top}.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{-webkit-transform-origin:right top;-ms-transform-origin:right top;transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progressbar,.swiper-container-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:4px;left:0;top:0}.swiper-container-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-container-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-progressbar.swiper-pagination-white{background:hsla(0,0%,100%,.25)}.swiper-pagination-progressbar.swiper-pagination-white .swiper-pagination-progressbar-fill{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-pagination-progressbar.swiper-pagination-black{background:rgba(0,0,0,.25)}.swiper-pagination-progressbar.swiper-pagination-black .swiper-pagination-progressbar-fill{background:#000}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12) infinite;animation:swiper-preloader-spin 1s steps(12) infinite}.swiper-lazy-preloader:after{display:block;content:"";width:100%;height:100%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' stroke='%236c6c6c' stroke-width='11' stroke-linecap='round' d='M60 7v20'/%3E%3C/defs%3E%3Cuse xlink:href='%23a' opacity='.27'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(30 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(60 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(90 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(120 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(150 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.37' transform='rotate(180 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.46' transform='rotate(210 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.56' transform='rotate(240 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.66' transform='rotate(270 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.75' transform='rotate(300 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.85' transform='rotate(330 60 60)'/%3E%3C/svg%3E");background-position:50%;background-size:100%;background-repeat:no-repeat}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' stroke='%23fff' stroke-width='11' stroke-linecap='round' d='M60 7v20'/%3E%3C/defs%3E%3Cuse xlink:href='%23a' opacity='.27'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(30 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(60 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(90 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(120 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(150 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.37' transform='rotate(180 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.46' transform='rotate(210 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.56' transform='rotate(240 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.66' transform='rotate(270 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.75' transform='rotate(300 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.85' transform='rotate(330 60 60)'/%3E%3C/svg%3E")}@-webkit-keyframes swiper-preloader-spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes swiper-preloader-spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;-webkit-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube{overflow:visible}.swiper-container-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-flip{overflow:visible}.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-coverflow .swiper-wrapper{-ms-perspective:1200px} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/vendors~swiper.js b/plugins/jetpack/_inc/blocks/vendors~swiper.js
deleted file mode 100644
index b8f28006..00000000
--- a/plugins/jetpack/_inc/blocks/vendors~swiper.js
+++ /dev/null
@@ -1 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{279:function(e,t,i){e.exports=function(){"use strict";var e="undefined"==typeof document?{body:{},addEventListener:function(){},removeEventListener:function(){},activeElement:{blur:function(){},nodeName:""},querySelector:function(){return null},querySelectorAll:function(){return[]},getElementById:function(){return null},createEvent:function(){return{initEvent:function(){}}},createElement:function(){return{children:[],childNodes:[],style:{},setAttribute:function(){},getElementsByTagName:function(){return[]}}},location:{hash:""}}:document,t="undefined"==typeof window?{document:e,navigator:{userAgent:""},location:{},history:{},CustomEvent:function(){return this},addEventListener:function(){},removeEventListener:function(){},getComputedStyle:function(){return{getPropertyValue:function(){return""}}},Image:function(){},Date:function(){},screen:{},setTimeout:function(){},clearTimeout:function(){}}:window,i=function(e){for(var t=0;t<e.length;t+=1)this[t]=e[t];return this.length=e.length,this};function s(s,a){var r=[],n=0;if(s&&!a&&s instanceof i)return s;if(s)if("string"==typeof s){var o,l,d=s.trim();if(d.indexOf("<")>=0&&d.indexOf(">")>=0){var h="div";for(0===d.indexOf("<li")&&(h="ul"),0===d.indexOf("<tr")&&(h="tbody"),0!==d.indexOf("<td")&&0!==d.indexOf("<th")||(h="tr"),0===d.indexOf("<tbody")&&(h="table"),0===d.indexOf("<option")&&(h="select"),(l=e.createElement(h)).innerHTML=d,n=0;n<l.childNodes.length;n+=1)r.push(l.childNodes[n])}else for(o=a||"#"!==s[0]||s.match(/[ .<>:~]/)?(a||e).querySelectorAll(s.trim()):[e.getElementById(s.trim().split("#")[1])],n=0;n<o.length;n+=1)o[n]&&r.push(o[n])}else if(s.nodeType||s===t||s===e)r.push(s);else if(s.length>0&&s[0].nodeType)for(n=0;n<s.length;n+=1)r.push(s[n]);return new i(r)}function a(e){for(var t=[],i=0;i<e.length;i+=1)-1===t.indexOf(e[i])&&t.push(e[i]);return t}s.fn=i.prototype,s.Class=i,s.Dom7=i;var r={addClass:function(e){if(void 0===e)return this;for(var t=e.split(" "),i=0;i<t.length;i+=1)for(var s=0;s<this.length;s+=1)void 0!==this[s]&&void 0!==this[s].classList&&this[s].classList.add(t[i]);return this},removeClass:function(e){for(var t=e.split(" "),i=0;i<t.length;i+=1)for(var s=0;s<this.length;s+=1)void 0!==this[s]&&void 0!==this[s].classList&&this[s].classList.remove(t[i]);return this},hasClass:function(e){return!!this[0]&&this[0].classList.contains(e)},toggleClass:function(e){for(var t=e.split(" "),i=0;i<t.length;i+=1)for(var s=0;s<this.length;s+=1)void 0!==this[s]&&void 0!==this[s].classList&&this[s].classList.toggle(t[i]);return this},attr:function(e,t){var i=arguments;if(1===arguments.length&&"string"==typeof e)return this[0]?this[0].getAttribute(e):void 0;for(var s=0;s<this.length;s+=1)if(2===i.length)this[s].setAttribute(e,t);else for(var a in e)this[s][a]=e[a],this[s].setAttribute(a,e[a]);return this},removeAttr:function(e){for(var t=0;t<this.length;t+=1)this[t].removeAttribute(e);return this},data:function(e,t){var i;if(void 0!==t){for(var s=0;s<this.length;s+=1)(i=this[s]).dom7ElementDataStorage||(i.dom7ElementDataStorage={}),i.dom7ElementDataStorage[e]=t;return this}if(i=this[0]){if(i.dom7ElementDataStorage&&e in i.dom7ElementDataStorage)return i.dom7ElementDataStorage[e];var a=i.getAttribute("data-"+e);return a||void 0}},transform:function(e){for(var t=0;t<this.length;t+=1){var i=this[t].style;i.webkitTransform=e,i.transform=e}return this},transition:function(e){"string"!=typeof e&&(e+="ms");for(var t=0;t<this.length;t+=1){var i=this[t].style;i.webkitTransitionDuration=e,i.transitionDuration=e}return this},on:function(){for(var e,t=[],i=arguments.length;i--;)t[i]=arguments[i];var a=t[0],r=t[1],n=t[2],o=t[3];function l(e){var t=e.target;if(t){var i=e.target.dom7EventData||[];if(i.indexOf(e)<0&&i.unshift(e),s(t).is(r))n.apply(t,i);else for(var a=s(t).parents(),o=0;o<a.length;o+=1)s(a[o]).is(r)&&n.apply(a[o],i)}}function d(e){var t=e&&e.target&&e.target.dom7EventData||[];t.indexOf(e)<0&&t.unshift(e),n.apply(this,t)}"function"==typeof t[1]&&(a=(e=t)[0],n=e[1],o=e[2],r=void 0),o||(o=!1);for(var h,p=a.split(" "),c=0;c<this.length;c+=1){var u=this[c];if(r)for(h=0;h<p.length;h+=1){var v=p[h];u.dom7LiveListeners||(u.dom7LiveListeners={}),u.dom7LiveListeners[v]||(u.dom7LiveListeners[v]=[]),u.dom7LiveListeners[v].push({listener:n,proxyListener:l}),u.addEventListener(v,l,o)}else for(h=0;h<p.length;h+=1){var f=p[h];u.dom7Listeners||(u.dom7Listeners={}),u.dom7Listeners[f]||(u.dom7Listeners[f]=[]),u.dom7Listeners[f].push({listener:n,proxyListener:d}),u.addEventListener(f,d,o)}}return this},off:function(){for(var e,t=[],i=arguments.length;i--;)t[i]=arguments[i];var s=t[0],a=t[1],r=t[2],n=t[3];"function"==typeof t[1]&&(s=(e=t)[0],r=e[1],n=e[2],a=void 0),n||(n=!1);for(var o=s.split(" "),l=0;l<o.length;l+=1)for(var d=o[l],h=0;h<this.length;h+=1){var p=this[h],c=void 0;if(!a&&p.dom7Listeners?c=p.dom7Listeners[d]:a&&p.dom7LiveListeners&&(c=p.dom7LiveListeners[d]),c&&c.length)for(var u=c.length-1;u>=0;u-=1){var v=c[u];r&&v.listener===r?(p.removeEventListener(d,v.proxyListener,n),c.splice(u,1)):r||(p.removeEventListener(d,v.proxyListener,n),c.splice(u,1))}}return this},trigger:function(){for(var i=[],s=arguments.length;s--;)i[s]=arguments[s];for(var a=i[0].split(" "),r=i[1],n=0;n<a.length;n+=1)for(var o=a[n],l=0;l<this.length;l+=1){var d=this[l],h=void 0;try{h=new t.CustomEvent(o,{detail:r,bubbles:!0,cancelable:!0})}catch(p){(h=e.createEvent("Event")).initEvent(o,!0,!0),h.detail=r}d.dom7EventData=i.filter(function(e,t){return t>0}),d.dispatchEvent(h),d.dom7EventData=[],delete d.dom7EventData}return this},transitionEnd:function(e){var t,i=["webkitTransitionEnd","transitionend"],s=this;function a(r){if(r.target===this)for(e.call(this,r),t=0;t<i.length;t+=1)s.off(i[t],a)}if(e)for(t=0;t<i.length;t+=1)s.on(i[t],a);return this},outerWidth:function(e){if(this.length>0){if(e){var t=this.styles();return this[0].offsetWidth+parseFloat(t.getPropertyValue("margin-right"))+parseFloat(t.getPropertyValue("margin-left"))}return this[0].offsetWidth}return null},outerHeight:function(e){if(this.length>0){if(e){var t=this.styles();return this[0].offsetHeight+parseFloat(t.getPropertyValue("margin-top"))+parseFloat(t.getPropertyValue("margin-bottom"))}return this[0].offsetHeight}return null},offset:function(){if(this.length>0){var i=this[0],s=i.getBoundingClientRect(),a=e.body,r=i.clientTop||a.clientTop||0,n=i.clientLeft||a.clientLeft||0,o=i===t?t.scrollY:i.scrollTop,l=i===t?t.scrollX:i.scrollLeft;return{top:s.top+o-r,left:s.left+l-n}}return null},css:function(e,i){var s;if(1===arguments.length){if("string"!=typeof e){for(s=0;s<this.length;s+=1)for(var a in e)this[s].style[a]=e[a];return this}if(this[0])return t.getComputedStyle(this[0],null).getPropertyValue(e)}if(2===arguments.length&&"string"==typeof e){for(s=0;s<this.length;s+=1)this[s].style[e]=i;return this}return this},each:function(e){if(!e)return this;for(var t=0;t<this.length;t+=1)if(!1===e.call(this[t],t,this[t]))return this;return this},html:function(e){if(void 0===e)return this[0]?this[0].innerHTML:void 0;for(var t=0;t<this.length;t+=1)this[t].innerHTML=e;return this},text:function(e){if(void 0===e)return this[0]?this[0].textContent.trim():null;for(var t=0;t<this.length;t+=1)this[t].textContent=e;return this},is:function(a){var r,n,o=this[0];if(!o||void 0===a)return!1;if("string"==typeof a){if(o.matches)return o.matches(a);if(o.webkitMatchesSelector)return o.webkitMatchesSelector(a);if(o.msMatchesSelector)return o.msMatchesSelector(a);for(r=s(a),n=0;n<r.length;n+=1)if(r[n]===o)return!0;return!1}if(a===e)return o===e;if(a===t)return o===t;if(a.nodeType||a instanceof i){for(r=a.nodeType?[a]:a,n=0;n<r.length;n+=1)if(r[n]===o)return!0;return!1}return!1},index:function(){var e,t=this[0];if(t){for(e=0;null!==(t=t.previousSibling);)1===t.nodeType&&(e+=1);return e}},eq:function(e){if(void 0===e)return this;var t,s=this.length;return new i(e>s-1?[]:e<0?(t=s+e)<0?[]:[this[t]]:[this[e]])},append:function(){for(var t,s=[],a=arguments.length;a--;)s[a]=arguments[a];for(var r=0;r<s.length;r+=1){t=s[r];for(var n=0;n<this.length;n+=1)if("string"==typeof t){var o=e.createElement("div");for(o.innerHTML=t;o.firstChild;)this[n].appendChild(o.firstChild)}else if(t instanceof i)for(var l=0;l<t.length;l+=1)this[n].appendChild(t[l]);else this[n].appendChild(t)}return this},prepend:function(t){var s,a;for(s=0;s<this.length;s+=1)if("string"==typeof t){var r=e.createElement("div");for(r.innerHTML=t,a=r.childNodes.length-1;a>=0;a-=1)this[s].insertBefore(r.childNodes[a],this[s].childNodes[0])}else if(t instanceof i)for(a=0;a<t.length;a+=1)this[s].insertBefore(t[a],this[s].childNodes[0]);else this[s].insertBefore(t,this[s].childNodes[0]);return this},next:function(e){return this.length>0?e?this[0].nextElementSibling&&s(this[0].nextElementSibling).is(e)?new i([this[0].nextElementSibling]):new i([]):this[0].nextElementSibling?new i([this[0].nextElementSibling]):new i([]):new i([])},nextAll:function(e){var t=[],a=this[0];if(!a)return new i([]);for(;a.nextElementSibling;){var r=a.nextElementSibling;e?s(r).is(e)&&t.push(r):t.push(r),a=r}return new i(t)},prev:function(e){if(this.length>0){var t=this[0];return e?t.previousElementSibling&&s(t.previousElementSibling).is(e)?new i([t.previousElementSibling]):new i([]):t.previousElementSibling?new i([t.previousElementSibling]):new i([])}return new i([])},prevAll:function(e){var t=[],a=this[0];if(!a)return new i([]);for(;a.previousElementSibling;){var r=a.previousElementSibling;e?s(r).is(e)&&t.push(r):t.push(r),a=r}return new i(t)},parent:function(e){for(var t=[],i=0;i<this.length;i+=1)null!==this[i].parentNode&&(e?s(this[i].parentNode).is(e)&&t.push(this[i].parentNode):t.push(this[i].parentNode));return s(a(t))},parents:function(e){for(var t=[],i=0;i<this.length;i+=1)for(var r=this[i].parentNode;r;)e?s(r).is(e)&&t.push(r):t.push(r),r=r.parentNode;return s(a(t))},closest:function(e){var t=this;return void 0===e?new i([]):(t.is(e)||(t=t.parents(e).eq(0)),t)},find:function(e){for(var t=[],s=0;s<this.length;s+=1)for(var a=this[s].querySelectorAll(e),r=0;r<a.length;r+=1)t.push(a[r]);return new i(t)},children:function(e){for(var t=[],r=0;r<this.length;r+=1)for(var n=this[r].childNodes,o=0;o<n.length;o+=1)e?1===n[o].nodeType&&s(n[o]).is(e)&&t.push(n[o]):1===n[o].nodeType&&t.push(n[o]);return new i(a(t))},remove:function(){for(var e=0;e<this.length;e+=1)this[e].parentNode&&this[e].parentNode.removeChild(this[e]);return this},add:function(){for(var e,t,i=[],a=arguments.length;a--;)i[a]=arguments[a];for(e=0;e<i.length;e+=1){var r=s(i[e]);for(t=0;t<r.length;t+=1)this[this.length]=r[t],this.length+=1}return this},styles:function(){return this[0]?t.getComputedStyle(this[0],null):{}}};Object.keys(r).forEach(function(e){s.fn[e]=r[e]});var n,o,l={deleteProps:function(e){var t=e;Object.keys(t).forEach(function(e){try{t[e]=null}catch(i){}try{delete t[e]}catch(i){}})},nextTick:function(e,t){return void 0===t&&(t=0),setTimeout(e,t)},now:function(){return Date.now()},getTranslate:function(e,i){var s,a,r;void 0===i&&(i="x");var n=t.getComputedStyle(e,null);return t.WebKitCSSMatrix?((a=n.transform||n.webkitTransform).split(",").length>6&&(a=a.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),r=new t.WebKitCSSMatrix("none"===a?"":a)):(r=n.MozTransform||n.OTransform||n.MsTransform||n.msTransform||n.transform||n.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),s=r.toString().split(",")),"x"===i&&(a=t.WebKitCSSMatrix?r.m41:16===s.length?parseFloat(s[12]):parseFloat(s[4])),"y"===i&&(a=t.WebKitCSSMatrix?r.m42:16===s.length?parseFloat(s[13]):parseFloat(s[5])),a||0},parseUrlQuery:function(e){var i,s,a,r,n={},o=e||t.location.href;if("string"==typeof o&&o.length)for(o=o.indexOf("?")>-1?o.replace(/\S*\?/,""):"",s=o.split("&").filter(function(e){return""!==e}),r=s.length,i=0;i<r;i+=1)a=s[i].replace(/#\S+/g,"").split("="),n[decodeURIComponent(a[0])]=void 0===a[1]?void 0:decodeURIComponent(a[1])||"";return n},isObject:function(e){return"object"==typeof e&&null!==e&&e.constructor&&e.constructor===Object},extend:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];for(var i=Object(e[0]),s=1;s<e.length;s+=1){var a=e[s];if(null!=a)for(var r=Object.keys(Object(a)),n=0,o=r.length;n<o;n+=1){var d=r[n],h=Object.getOwnPropertyDescriptor(a,d);void 0!==h&&h.enumerable&&(l.isObject(i[d])&&l.isObject(a[d])?l.extend(i[d],a[d]):!l.isObject(i[d])&&l.isObject(a[d])?(i[d]={},l.extend(i[d],a[d])):i[d]=a[d])}}return i}},d=(o=e.createElement("div"),{touch:t.Modernizr&&!0===t.Modernizr.touch||!!(t.navigator.maxTouchPoints>0||"ontouchstart"in t||t.DocumentTouch&&e instanceof t.DocumentTouch),pointerEvents:!!(t.navigator.pointerEnabled||t.PointerEvent||"maxTouchPoints"in t.navigator),prefixedPointerEvents:!!t.navigator.msPointerEnabled,transition:(n=o.style,"transition"in n||"webkitTransition"in n||"MozTransition"in n),transforms3d:t.Modernizr&&!0===t.Modernizr.csstransforms3d||function(){var e=o.style;return"webkitPerspective"in e||"MozPerspective"in e||"OPerspective"in e||"MsPerspective"in e||"perspective"in e}(),flexbox:function(){for(var e=o.style,t="alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient".split(" "),i=0;i<t.length;i+=1)if(t[i]in e)return!0;return!1}(),observer:"MutationObserver"in t||"WebkitMutationObserver"in t,passiveListener:function(){var e=!1;try{var i=Object.defineProperty({},"passive",{get:function(){e=!0}});t.addEventListener("testPassiveListener",null,i)}catch(s){}return e}(),gestures:"ongesturestart"in t}),h=function(e){void 0===e&&(e={});var t=this;t.params=e,t.eventsListeners={},t.params&&t.params.on&&Object.keys(t.params.on).forEach(function(e){t.on(e,t.params.on[e])})},p={components:{configurable:!0}};h.prototype.on=function(e,t,i){var s=this;if("function"!=typeof t)return s;var a=i?"unshift":"push";return e.split(" ").forEach(function(e){s.eventsListeners[e]||(s.eventsListeners[e]=[]),s.eventsListeners[e][a](t)}),s},h.prototype.once=function(e,t,i){var s=this;return"function"!=typeof t?s:s.on(e,function i(){for(var a=[],r=arguments.length;r--;)a[r]=arguments[r];t.apply(s,a),s.off(e,i)},i)},h.prototype.off=function(e,t){var i=this;return i.eventsListeners?(e.split(" ").forEach(function(e){void 0===t?i.eventsListeners[e]=[]:i.eventsListeners[e]&&i.eventsListeners[e].length&&i.eventsListeners[e].forEach(function(s,a){s===t&&i.eventsListeners[e].splice(a,1)})}),i):i},h.prototype.emit=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var i,s,a,r=this;if(!r.eventsListeners)return r;"string"==typeof e[0]||Array.isArray(e[0])?(i=e[0],s=e.slice(1,e.length),a=r):(i=e[0].events,s=e[0].data,a=e[0].context||r);var n=Array.isArray(i)?i:i.split(" ");return n.forEach(function(e){if(r.eventsListeners&&r.eventsListeners[e]){var t=[];r.eventsListeners[e].forEach(function(e){t.push(e)}),t.forEach(function(e){e.apply(a,s)})}}),r},h.prototype.useModulesParams=function(e){var t=this;t.modules&&Object.keys(t.modules).forEach(function(i){var s=t.modules[i];s.params&&l.extend(e,s.params)})},h.prototype.useModules=function(e){void 0===e&&(e={});var t=this;t.modules&&Object.keys(t.modules).forEach(function(i){var s=t.modules[i],a=e[i]||{};s.instance&&Object.keys(s.instance).forEach(function(e){var i=s.instance[e];t[e]="function"==typeof i?i.bind(t):i}),s.on&&t.on&&Object.keys(s.on).forEach(function(e){t.on(e,s.on[e])}),s.create&&s.create.bind(t)(a)})},p.components.set=function(e){this.use&&this.use(e)},h.installModule=function(e){for(var t=[],i=arguments.length-1;i-- >0;)t[i]=arguments[i+1];var s=this;s.prototype.modules||(s.prototype.modules={});var a=e.name||Object.keys(s.prototype.modules).length+"_"+l.now();return s.prototype.modules[a]=e,e.proto&&Object.keys(e.proto).forEach(function(t){s.prototype[t]=e.proto[t]}),e.static&&Object.keys(e.static).forEach(function(t){s[t]=e.static[t]}),e.install&&e.install.apply(s,t),s},h.use=function(e){for(var t=[],i=arguments.length-1;i-- >0;)t[i]=arguments[i+1];var s=this;return Array.isArray(e)?(e.forEach(function(e){return s.installModule(e)}),s):s.installModule.apply(s,[e].concat(t))},Object.defineProperties(h,p);var c={updateSize:function(){var e,t,i=this.$el;e=void 0!==this.params.width?this.params.width:i[0].clientWidth,t=void 0!==this.params.height?this.params.height:i[0].clientHeight,0===e&&this.isHorizontal()||0===t&&this.isVertical()||(e=e-parseInt(i.css("padding-left"),10)-parseInt(i.css("padding-right"),10),t=t-parseInt(i.css("padding-top"),10)-parseInt(i.css("padding-bottom"),10),l.extend(this,{width:e,height:t,size:this.isHorizontal()?e:t}))},updateSlides:function(){var e=this.params,i=this.$wrapperEl,s=this.size,a=this.rtlTranslate,r=this.wrongRTL,n=this.virtual&&e.virtual.enabled,o=n?this.virtual.slides.length:this.slides.length,h=i.children("."+this.params.slideClass),p=n?this.virtual.slides.length:h.length,c=[],u=[],v=[],f=e.slidesOffsetBefore;"function"==typeof f&&(f=e.slidesOffsetBefore.call(this));var m=e.slidesOffsetAfter;"function"==typeof m&&(m=e.slidesOffsetAfter.call(this));var g,b,w=this.snapGrid.length,y=this.snapGrid.length,x=e.spaceBetween,T=-f,E=0,S=0;if(void 0!==s){"string"==typeof x&&x.indexOf("%")>=0&&(x=parseFloat(x.replace("%",""))/100*s),this.virtualSize=-x,a?h.css({marginLeft:"",marginTop:""}):h.css({marginRight:"",marginBottom:""}),e.slidesPerColumn>1&&(g=Math.floor(p/e.slidesPerColumn)===p/this.params.slidesPerColumn?p:Math.ceil(p/e.slidesPerColumn)*e.slidesPerColumn,"auto"!==e.slidesPerView&&"row"===e.slidesPerColumnFill&&(g=Math.max(g,e.slidesPerView*e.slidesPerColumn)));for(var C,M=e.slidesPerColumn,k=g/M,P=Math.floor(p/e.slidesPerColumn),z=0;z<p;z+=1){b=0;var $=h.eq(z);if(e.slidesPerColumn>1){var L=void 0,I=void 0,D=void 0;"column"===e.slidesPerColumnFill?(I=Math.floor(z/M),D=z-I*M,(I>P||I===P&&D===M-1)&&(D+=1)>=M&&(D=0,I+=1),L=I+D*g/M,$.css({"-webkit-box-ordinal-group":L,"-moz-box-ordinal-group":L,"-ms-flex-order":L,"-webkit-order":L,order:L})):(D=Math.floor(z/k),I=z-D*k),$.css("margin-"+(this.isHorizontal()?"top":"left"),0!==D&&e.spaceBetween&&e.spaceBetween+"px").attr("data-swiper-column",I).attr("data-swiper-row",D)}if("none"!==$.css("display")){if("auto"===e.slidesPerView){var O=t.getComputedStyle($[0],null),A=$[0].style.transform,N=$[0].style.webkitTransform;if(A&&($[0].style.transform="none"),N&&($[0].style.webkitTransform="none"),e.roundLengths)b=this.isHorizontal()?$.outerWidth(!0):$.outerHeight(!0);else if(this.isHorizontal()){var H=parseFloat(O.getPropertyValue("width")),G=parseFloat(O.getPropertyValue("padding-left")),B=parseFloat(O.getPropertyValue("padding-right")),X=parseFloat(O.getPropertyValue("margin-left")),Y=parseFloat(O.getPropertyValue("margin-right")),V=O.getPropertyValue("box-sizing");b=V&&"border-box"===V?H+X+Y:H+G+B+X+Y}else{var F=parseFloat(O.getPropertyValue("height")),R=parseFloat(O.getPropertyValue("padding-top")),q=parseFloat(O.getPropertyValue("padding-bottom")),W=parseFloat(O.getPropertyValue("margin-top")),j=parseFloat(O.getPropertyValue("margin-bottom")),U=O.getPropertyValue("box-sizing");b=U&&"border-box"===U?F+W+j:F+R+q+W+j}A&&($[0].style.transform=A),N&&($[0].style.webkitTransform=N),e.roundLengths&&(b=Math.floor(b))}else b=(s-(e.slidesPerView-1)*x)/e.slidesPerView,e.roundLengths&&(b=Math.floor(b)),h[z]&&(this.isHorizontal()?h[z].style.width=b+"px":h[z].style.height=b+"px");h[z]&&(h[z].swiperSlideSize=b),v.push(b),e.centeredSlides?(T=T+b/2+E/2+x,0===E&&0!==z&&(T=T-s/2-x),0===z&&(T=T-s/2-x),Math.abs(T)<.001&&(T=0),e.roundLengths&&(T=Math.floor(T)),S%e.slidesPerGroup==0&&c.push(T),u.push(T)):(e.roundLengths&&(T=Math.floor(T)),S%e.slidesPerGroup==0&&c.push(T),u.push(T),T=T+b+x),this.virtualSize+=b+x,E=b,S+=1}}if(this.virtualSize=Math.max(this.virtualSize,s)+m,a&&r&&("slide"===e.effect||"coverflow"===e.effect)&&i.css({width:this.virtualSize+e.spaceBetween+"px"}),d.flexbox&&!e.setWrapperSize||(this.isHorizontal()?i.css({width:this.virtualSize+e.spaceBetween+"px"}):i.css({height:this.virtualSize+e.spaceBetween+"px"})),e.slidesPerColumn>1&&(this.virtualSize=(b+e.spaceBetween)*g,this.virtualSize=Math.ceil(this.virtualSize/e.slidesPerColumn)-e.spaceBetween,this.isHorizontal()?i.css({width:this.virtualSize+e.spaceBetween+"px"}):i.css({height:this.virtualSize+e.spaceBetween+"px"}),e.centeredSlides)){C=[];for(var K=0;K<c.length;K+=1){var _=c[K];e.roundLengths&&(_=Math.floor(_)),c[K]<this.virtualSize+c[0]&&C.push(_)}c=C}if(!e.centeredSlides){C=[];for(var J=0;J<c.length;J+=1){var Z=c[J];e.roundLengths&&(Z=Math.floor(Z)),c[J]<=this.virtualSize-s&&C.push(Z)}c=C,Math.floor(this.virtualSize-s)-Math.floor(c[c.length-1])>1&&c.push(this.virtualSize-s)}if(0===c.length&&(c=[0]),0!==e.spaceBetween&&(this.isHorizontal()?a?h.css({marginLeft:x+"px"}):h.css({marginRight:x+"px"}):h.css({marginBottom:x+"px"})),e.centerInsufficientSlides){var Q=0;if(v.forEach(function(t){Q+=t+(e.spaceBetween?e.spaceBetween:0)}),(Q-=e.spaceBetween)<s){var ee=(s-Q)/2;c.forEach(function(e,t){c[t]=e-ee}),u.forEach(function(e,t){u[t]=e+ee})}}l.extend(this,{slides:h,snapGrid:c,slidesGrid:u,slidesSizesGrid:v}),p!==o&&this.emit("slidesLengthChange"),c.length!==w&&(this.params.watchOverflow&&this.checkOverflow(),this.emit("snapGridLengthChange")),u.length!==y&&this.emit("slidesGridLengthChange"),(e.watchSlidesProgress||e.watchSlidesVisibility)&&this.updateSlidesOffset()}},updateAutoHeight:function(e){var t,i=[],s=0;if("number"==typeof e?this.setTransition(e):!0===e&&this.setTransition(this.params.speed),"auto"!==this.params.slidesPerView&&this.params.slidesPerView>1)for(t=0;t<Math.ceil(this.params.slidesPerView);t+=1){var a=this.activeIndex+t;if(a>this.slides.length)break;i.push(this.slides.eq(a)[0])}else i.push(this.slides.eq(this.activeIndex)[0]);for(t=0;t<i.length;t+=1)if(void 0!==i[t]){var r=i[t].offsetHeight;s=r>s?r:s}s&&this.$wrapperEl.css("height",s+"px")},updateSlidesOffset:function(){for(var e=this.slides,t=0;t<e.length;t+=1)e[t].swiperSlideOffset=this.isHorizontal()?e[t].offsetLeft:e[t].offsetTop},updateSlidesProgress:function(e){void 0===e&&(e=this&&this.translate||0);var t=this.params,i=this.slides,a=this.rtlTranslate;if(0!==i.length){void 0===i[0].swiperSlideOffset&&this.updateSlidesOffset();var r=-e;a&&(r=e),i.removeClass(t.slideVisibleClass),this.visibleSlidesIndexes=[],this.visibleSlides=[];for(var n=0;n<i.length;n+=1){var o=i[n],l=(r+(t.centeredSlides?this.minTranslate():0)-o.swiperSlideOffset)/(o.swiperSlideSize+t.spaceBetween);if(t.watchSlidesVisibility){var d=-(r-o.swiperSlideOffset),h=d+this.slidesSizesGrid[n],p=d>=0&&d<this.size||h>0&&h<=this.size||d<=0&&h>=this.size;p&&(this.visibleSlides.push(o),this.visibleSlidesIndexes.push(n),i.eq(n).addClass(t.slideVisibleClass))}o.progress=a?-l:l}this.visibleSlides=s(this.visibleSlides)}},updateProgress:function(e){void 0===e&&(e=this&&this.translate||0);var t=this.params,i=this.maxTranslate()-this.minTranslate(),s=this.progress,a=this.isBeginning,r=this.isEnd,n=a,o=r;0===i?(s=0,a=!0,r=!0):(s=(e-this.minTranslate())/i,a=s<=0,r=s>=1),l.extend(this,{progress:s,isBeginning:a,isEnd:r}),(t.watchSlidesProgress||t.watchSlidesVisibility)&&this.updateSlidesProgress(e),a&&!n&&this.emit("reachBeginning toEdge"),r&&!o&&this.emit("reachEnd toEdge"),(n&&!a||o&&!r)&&this.emit("fromEdge"),this.emit("progress",s)},updateSlidesClasses:function(){var e,t=this.slides,i=this.params,s=this.$wrapperEl,a=this.activeIndex,r=this.realIndex,n=this.virtual&&i.virtual.enabled;t.removeClass(i.slideActiveClass+" "+i.slideNextClass+" "+i.slidePrevClass+" "+i.slideDuplicateActiveClass+" "+i.slideDuplicateNextClass+" "+i.slideDuplicatePrevClass),(e=n?this.$wrapperEl.find("."+i.slideClass+'[data-swiper-slide-index="'+a+'"]'):t.eq(a)).addClass(i.slideActiveClass),i.loop&&(e.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+r+'"]').addClass(i.slideDuplicateActiveClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+r+'"]').addClass(i.slideDuplicateActiveClass));var o=e.nextAll("."+i.slideClass).eq(0).addClass(i.slideNextClass);i.loop&&0===o.length&&(o=t.eq(0)).addClass(i.slideNextClass);var l=e.prevAll("."+i.slideClass).eq(0).addClass(i.slidePrevClass);i.loop&&0===l.length&&(l=t.eq(-1)).addClass(i.slidePrevClass),i.loop&&(o.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+o.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+o.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass),l.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+l.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+l.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass))},updateActiveIndex:function(e){var t,i=this.rtlTranslate?this.translate:-this.translate,s=this.slidesGrid,a=this.snapGrid,r=this.params,n=this.activeIndex,o=this.realIndex,d=this.snapIndex,h=e;if(void 0===h){for(var p=0;p<s.length;p+=1)void 0!==s[p+1]?i>=s[p]&&i<s[p+1]-(s[p+1]-s[p])/2?h=p:i>=s[p]&&i<s[p+1]&&(h=p+1):i>=s[p]&&(h=p);r.normalizeSlideIndex&&(h<0||void 0===h)&&(h=0)}if((t=a.indexOf(i)>=0?a.indexOf(i):Math.floor(h/r.slidesPerGroup))>=a.length&&(t=a.length-1),h!==n){var c=parseInt(this.slides.eq(h).attr("data-swiper-slide-index")||h,10);l.extend(this,{snapIndex:t,realIndex:c,previousIndex:n,activeIndex:h}),this.emit("activeIndexChange"),this.emit("snapIndexChange"),o!==c&&this.emit("realIndexChange"),this.emit("slideChange")}else t!==d&&(this.snapIndex=t,this.emit("snapIndexChange"))},updateClickedSlide:function(e){var t=this.params,i=s(e.target).closest("."+t.slideClass)[0],a=!1;if(i)for(var r=0;r<this.slides.length;r+=1)this.slides[r]===i&&(a=!0);if(!i||!a)return this.clickedSlide=void 0,void(this.clickedIndex=void 0);this.clickedSlide=i,this.virtual&&this.params.virtual.enabled?this.clickedIndex=parseInt(s(i).attr("data-swiper-slide-index"),10):this.clickedIndex=s(i).index(),t.slideToClickedSlide&&void 0!==this.clickedIndex&&this.clickedIndex!==this.activeIndex&&this.slideToClickedSlide()}},u={getTranslate:function(e){void 0===e&&(e=this.isHorizontal()?"x":"y");var t=this.params,i=this.rtlTranslate,s=this.translate,a=this.$wrapperEl;if(t.virtualTranslate)return i?-s:s;var r=l.getTranslate(a[0],e);return i&&(r=-r),r||0},setTranslate:function(e,t){var i=this.rtlTranslate,s=this.params,a=this.$wrapperEl,r=this.progress,n=0,o=0;this.isHorizontal()?n=i?-e:e:o=e,s.roundLengths&&(n=Math.floor(n),o=Math.floor(o)),s.virtualTranslate||(d.transforms3d?a.transform("translate3d("+n+"px, "+o+"px, 0px)"):a.transform("translate("+n+"px, "+o+"px)")),this.previousTranslate=this.translate,this.translate=this.isHorizontal()?n:o;var l=this.maxTranslate()-this.minTranslate();(0===l?0:(e-this.minTranslate())/l)!==r&&this.updateProgress(e),this.emit("setTranslate",this.translate,t)},minTranslate:function(){return-this.snapGrid[0]},maxTranslate:function(){return-this.snapGrid[this.snapGrid.length-1]}},v={setTransition:function(e,t){this.$wrapperEl.transition(e),this.emit("setTransition",e,t)},transitionStart:function(e,t){void 0===e&&(e=!0);var i=this.activeIndex,s=this.params,a=this.previousIndex;s.autoHeight&&this.updateAutoHeight();var r=t;if(r||(r=i>a?"next":i<a?"prev":"reset"),this.emit("transitionStart"),e&&i!==a){if("reset"===r)return void this.emit("slideResetTransitionStart");this.emit("slideChangeTransitionStart"),"next"===r?this.emit("slideNextTransitionStart"):this.emit("slidePrevTransitionStart")}},transitionEnd:function(e,t){void 0===e&&(e=!0);var i=this.activeIndex,s=this.previousIndex;this.animating=!1,this.setTransition(0);var a=t;if(a||(a=i>s?"next":i<s?"prev":"reset"),this.emit("transitionEnd"),e&&i!==s){if("reset"===a)return void this.emit("slideResetTransitionEnd");this.emit("slideChangeTransitionEnd"),"next"===a?this.emit("slideNextTransitionEnd"):this.emit("slidePrevTransitionEnd")}}},f={slideTo:function(e,t,i,s){void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===i&&(i=!0);var a=this,r=e;r<0&&(r=0);var n=a.params,o=a.snapGrid,l=a.slidesGrid,h=a.previousIndex,p=a.activeIndex,c=a.rtlTranslate;if(a.animating&&n.preventInteractionOnTransition)return!1;var u=Math.floor(r/n.slidesPerGroup);u>=o.length&&(u=o.length-1),(p||n.initialSlide||0)===(h||0)&&i&&a.emit("beforeSlideChangeStart");var v,f=-o[u];if(a.updateProgress(f),n.normalizeSlideIndex)for(var m=0;m<l.length;m+=1)-Math.floor(100*f)>=Math.floor(100*l[m])&&(r=m);if(a.initialized&&r!==p){if(!a.allowSlideNext&&f<a.translate&&f<a.minTranslate())return!1;if(!a.allowSlidePrev&&f>a.translate&&f>a.maxTranslate()&&(p||0)!==r)return!1}return v=r>p?"next":r<p?"prev":"reset",c&&-f===a.translate||!c&&f===a.translate?(a.updateActiveIndex(r),n.autoHeight&&a.updateAutoHeight(),a.updateSlidesClasses(),"slide"!==n.effect&&a.setTranslate(f),"reset"!==v&&(a.transitionStart(i,v),a.transitionEnd(i,v)),!1):(0!==t&&d.transition?(a.setTransition(t),a.setTranslate(f),a.updateActiveIndex(r),a.updateSlidesClasses(),a.emit("beforeTransitionStart",t,s),a.transitionStart(i,v),a.animating||(a.animating=!0,a.onSlideToWrapperTransitionEnd||(a.onSlideToWrapperTransitionEnd=function(e){a&&!a.destroyed&&e.target===this&&(a.$wrapperEl[0].removeEventListener("transitionend",a.onSlideToWrapperTransitionEnd),a.$wrapperEl[0].removeEventListener("webkitTransitionEnd",a.onSlideToWrapperTransitionEnd),a.onSlideToWrapperTransitionEnd=null,delete a.onSlideToWrapperTransitionEnd,a.transitionEnd(i,v))}),a.$wrapperEl[0].addEventListener("transitionend",a.onSlideToWrapperTransitionEnd),a.$wrapperEl[0].addEventListener("webkitTransitionEnd",a.onSlideToWrapperTransitionEnd))):(a.setTransition(0),a.setTranslate(f),a.updateActiveIndex(r),a.updateSlidesClasses(),a.emit("beforeTransitionStart",t,s),a.transitionStart(i,v),a.transitionEnd(i,v)),!0)},slideToLoop:function(e,t,i,s){void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===i&&(i=!0);var a=e;return this.params.loop&&(a+=this.loopedSlides),this.slideTo(a,t,i,s)},slideNext:function(e,t,i){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);var s=this.params,a=this.animating;return s.loop?!a&&(this.loopFix(),this._clientLeft=this.$wrapperEl[0].clientLeft,this.slideTo(this.activeIndex+s.slidesPerGroup,e,t,i)):this.slideTo(this.activeIndex+s.slidesPerGroup,e,t,i)},slidePrev:function(e,t,i){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);var s=this.params,a=this.animating,r=this.snapGrid,n=this.slidesGrid,o=this.rtlTranslate;if(s.loop){if(a)return!1;this.loopFix(),this._clientLeft=this.$wrapperEl[0].clientLeft}function l(e){return e<0?-Math.floor(Math.abs(e)):Math.floor(e)}var d,h=l(o?this.translate:-this.translate),p=r.map(function(e){return l(e)}),c=(n.map(function(e){return l(e)}),r[p.indexOf(h)],r[p.indexOf(h)-1]);return void 0!==c&&(d=n.indexOf(c))<0&&(d=this.activeIndex-1),this.slideTo(d,e,t,i)},slideReset:function(e,t,i){return void 0===e&&(e=this.params.speed),void 0===t&&(t=!0),this.slideTo(this.activeIndex,e,t,i)},slideToClosest:function(e,t,i){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);var s=this.activeIndex,a=Math.floor(s/this.params.slidesPerGroup);if(a<this.snapGrid.length-1){var r=this.rtlTranslate?this.translate:-this.translate,n=this.snapGrid[a],o=this.snapGrid[a+1];r-n>(o-n)/2&&(s=this.params.slidesPerGroup)}return this.slideTo(s,e,t,i)},slideToClickedSlide:function(){var e,t=this,i=t.params,a=t.$wrapperEl,r="auto"===i.slidesPerView?t.slidesPerViewDynamic():i.slidesPerView,n=t.clickedIndex;if(i.loop){if(t.animating)return;e=parseInt(s(t.clickedSlide).attr("data-swiper-slide-index"),10),i.centeredSlides?n<t.loopedSlides-r/2||n>t.slides.length-t.loopedSlides+r/2?(t.loopFix(),n=a.children("."+i.slideClass+'[data-swiper-slide-index="'+e+'"]:not(.'+i.slideDuplicateClass+")").eq(0).index(),l.nextTick(function(){t.slideTo(n)})):t.slideTo(n):n>t.slides.length-r?(t.loopFix(),n=a.children("."+i.slideClass+'[data-swiper-slide-index="'+e+'"]:not(.'+i.slideDuplicateClass+")").eq(0).index(),l.nextTick(function(){t.slideTo(n)})):t.slideTo(n)}else t.slideTo(n)}},m={loopCreate:function(){var t=this,i=t.params,a=t.$wrapperEl;a.children("."+i.slideClass+"."+i.slideDuplicateClass).remove();var r=a.children("."+i.slideClass);if(i.loopFillGroupWithBlank){var n=i.slidesPerGroup-r.length%i.slidesPerGroup;if(n!==i.slidesPerGroup){for(var o=0;o<n;o+=1){var l=s(e.createElement("div")).addClass(i.slideClass+" "+i.slideBlankClass);a.append(l)}r=a.children("."+i.slideClass)}}"auto"!==i.slidesPerView||i.loopedSlides||(i.loopedSlides=r.length),t.loopedSlides=parseInt(i.loopedSlides||i.slidesPerView,10),t.loopedSlides+=i.loopAdditionalSlides,t.loopedSlides>r.length&&(t.loopedSlides=r.length);var d=[],h=[];r.each(function(e,i){var a=s(i);e<t.loopedSlides&&h.push(i),e<r.length&&e>=r.length-t.loopedSlides&&d.push(i),a.attr("data-swiper-slide-index",e)});for(var p=0;p<h.length;p+=1)a.append(s(h[p].cloneNode(!0)).addClass(i.slideDuplicateClass));for(var c=d.length-1;c>=0;c-=1)a.prepend(s(d[c].cloneNode(!0)).addClass(i.slideDuplicateClass))},loopFix:function(){var e,t=this.params,i=this.activeIndex,s=this.slides,a=this.loopedSlides,r=this.allowSlidePrev,n=this.allowSlideNext,o=this.snapGrid,l=this.rtlTranslate;this.allowSlidePrev=!0,this.allowSlideNext=!0;var d=-o[i]-this.getTranslate();if(i<a){e=s.length-3*a+i,e+=a;var h=this.slideTo(e,0,!1,!0);h&&0!==d&&this.setTranslate((l?-this.translate:this.translate)-d)}else if("auto"===t.slidesPerView&&i>=2*a||i>=s.length-a){e=-s.length+i+a,e+=a;var p=this.slideTo(e,0,!1,!0);p&&0!==d&&this.setTranslate((l?-this.translate:this.translate)-d)}this.allowSlidePrev=r,this.allowSlideNext=n},loopDestroy:function(){var e=this.$wrapperEl,t=this.params,i=this.slides;e.children("."+t.slideClass+"."+t.slideDuplicateClass+",."+t.slideClass+"."+t.slideBlankClass).remove(),i.removeAttr("data-swiper-slide-index")}},g={setGrabCursor:function(e){if(!(d.touch||!this.params.simulateTouch||this.params.watchOverflow&&this.isLocked)){var t=this.el;t.style.cursor="move",t.style.cursor=e?"-webkit-grabbing":"-webkit-grab",t.style.cursor=e?"-moz-grabbin":"-moz-grab",t.style.cursor=e?"grabbing":"grab"}},unsetGrabCursor:function(){d.touch||this.params.watchOverflow&&this.isLocked||(this.el.style.cursor="")}},b={appendSlide:function(e){var t=this.$wrapperEl,i=this.params;if(i.loop&&this.loopDestroy(),"object"==typeof e&&"length"in e)for(var s=0;s<e.length;s+=1)e[s]&&t.append(e[s]);else t.append(e);i.loop&&this.loopCreate(),i.observer&&d.observer||this.update()},prependSlide:function(e){var t=this.params,i=this.$wrapperEl,s=this.activeIndex;t.loop&&this.loopDestroy();var a=s+1;if("object"==typeof e&&"length"in e){for(var r=0;r<e.length;r+=1)e[r]&&i.prepend(e[r]);a=s+e.length}else i.prepend(e);t.loop&&this.loopCreate(),t.observer&&d.observer||this.update(),this.slideTo(a,0,!1)},addSlide:function(e,t){var i=this.$wrapperEl,s=this.params,a=this.activeIndex;s.loop&&(a-=this.loopedSlides,this.loopDestroy(),this.slides=i.children("."+s.slideClass));var r=this.slides.length;if(e<=0)this.prependSlide(t);else if(e>=r)this.appendSlide(t);else{for(var n=a>e?a+1:a,o=[],l=r-1;l>=e;l-=1){var h=this.slides.eq(l);h.remove(),o.unshift(h)}if("object"==typeof t&&"length"in t){for(var p=0;p<t.length;p+=1)t[p]&&i.append(t[p]);n=a>e?a+t.length:a}else i.append(t);for(var c=0;c<o.length;c+=1)i.append(o[c]);s.loop&&this.loopCreate(),s.observer&&d.observer||this.update(),s.loop?this.slideTo(n+this.loopedSlides,0,!1):this.slideTo(n,0,!1)}},removeSlide:function(e){var t=this.params,i=this.$wrapperEl,s=this.activeIndex;t.loop&&(s-=this.loopedSlides,this.loopDestroy(),this.slides=i.children("."+t.slideClass));var a,r=s;if("object"==typeof e&&"length"in e){for(var n=0;n<e.length;n+=1)a=e[n],this.slides[a]&&this.slides.eq(a).remove(),a<r&&(r-=1);r=Math.max(r,0)}else a=e,this.slides[a]&&this.slides.eq(a).remove(),a<r&&(r-=1),r=Math.max(r,0);t.loop&&this.loopCreate(),t.observer&&d.observer||this.update(),t.loop?this.slideTo(r+this.loopedSlides,0,!1):this.slideTo(r,0,!1)},removeAllSlides:function(){for(var e=[],t=0;t<this.slides.length;t+=1)e.push(t);this.removeSlide(e)}},w=function(){var i=t.navigator.userAgent,s={ios:!1,android:!1,androidChrome:!1,desktop:!1,windows:!1,iphone:!1,ipod:!1,ipad:!1,cordova:t.cordova||t.phonegap,phonegap:t.cordova||t.phonegap},a=i.match(/(Windows Phone);?[\s\/]+([\d.]+)?/),r=i.match(/(Android);?[\s\/]+([\d.]+)?/),n=i.match(/(iPad).*OS\s([\d_]+)/),o=i.match(/(iPod)(.*OS\s([\d_]+))?/),l=!n&&i.match(/(iPhone\sOS|iOS)\s([\d_]+)/);if(a&&(s.os="windows",s.osVersion=a[2],s.windows=!0),r&&!a&&(s.os="android",s.osVersion=r[2],s.android=!0,s.androidChrome=i.toLowerCase().indexOf("chrome")>=0),(n||l||o)&&(s.os="ios",s.ios=!0),l&&!o&&(s.osVersion=l[2].replace(/_/g,"."),s.iphone=!0),n&&(s.osVersion=n[2].replace(/_/g,"."),s.ipad=!0),o&&(s.osVersion=o[3]?o[3].replace(/_/g,"."):null,s.iphone=!0),s.ios&&s.osVersion&&i.indexOf("Version/")>=0&&"10"===s.osVersion.split(".")[0]&&(s.osVersion=i.toLowerCase().split("version/")[1].split(" ")[0]),s.desktop=!(s.os||s.android||s.webView),s.webView=(l||n||o)&&i.match(/.*AppleWebKit(?!.*Safari)/i),s.os&&"ios"===s.os){var d=s.osVersion.split("."),h=e.querySelector('meta[name="viewport"]');s.minimalUi=!s.webView&&(o||l)&&(1*d[0]==7?1*d[1]>=1:1*d[0]>7)&&h&&h.getAttribute("content").indexOf("minimal-ui")>=0}return s.pixelRatio=t.devicePixelRatio||1,s}();function y(){var e=this.params,t=this.el;if(!t||0!==t.offsetWidth){e.breakpoints&&this.setBreakpoint();var i=this.allowSlideNext,s=this.allowSlidePrev,a=this.snapGrid;if(this.allowSlideNext=!0,this.allowSlidePrev=!0,this.updateSize(),this.updateSlides(),e.freeMode){var r=Math.min(Math.max(this.translate,this.maxTranslate()),this.minTranslate());this.setTranslate(r),this.updateActiveIndex(),this.updateSlidesClasses(),e.autoHeight&&this.updateAutoHeight()}else this.updateSlidesClasses(),("auto"===e.slidesPerView||e.slidesPerView>1)&&this.isEnd&&!this.params.centeredSlides?this.slideTo(this.slides.length-1,0,!1,!0):this.slideTo(this.activeIndex,0,!1,!0);this.allowSlidePrev=s,this.allowSlideNext=i,this.params.watchOverflow&&a!==this.snapGrid&&this.checkOverflow()}}var x,T={attachEvents:function(){var i=this.params,a=this.touchEvents,r=this.el,n=this.wrapperEl;this.onTouchStart=function(i){var a=this.touchEventsData,r=this.params,n=this.touches;if(!this.animating||!r.preventInteractionOnTransition){var o=i;if(o.originalEvent&&(o=o.originalEvent),a.isTouchEvent="touchstart"===o.type,(a.isTouchEvent||!("which"in o)||3!==o.which)&&!(!a.isTouchEvent&&"button"in o&&o.button>0||a.isTouched&&a.isMoved))if(r.noSwiping&&s(o.target).closest(r.noSwipingSelector?r.noSwipingSelector:"."+r.noSwipingClass)[0])this.allowClick=!0;else if(!r.swipeHandler||s(o).closest(r.swipeHandler)[0]){n.currentX="touchstart"===o.type?o.targetTouches[0].pageX:o.pageX,n.currentY="touchstart"===o.type?o.targetTouches[0].pageY:o.pageY;var d=n.currentX,h=n.currentY,p=r.edgeSwipeDetection||r.iOSEdgeSwipeDetection,c=r.edgeSwipeThreshold||r.iOSEdgeSwipeThreshold;if(!p||!(d<=c||d>=t.screen.width-c)){if(l.extend(a,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),n.startX=d,n.startY=h,a.touchStartTime=l.now(),this.allowClick=!0,this.updateSize(),this.swipeDirection=void 0,r.threshold>0&&(a.allowThresholdMove=!1),"touchstart"!==o.type){var u=!0;s(o.target).is(a.formElements)&&(u=!1),e.activeElement&&s(e.activeElement).is(a.formElements)&&e.activeElement!==o.target&&e.activeElement.blur();var v=u&&this.allowTouchMove&&r.touchStartPreventDefault;(r.touchStartForcePreventDefault||v)&&o.preventDefault()}this.emit("touchStart",o)}}}}.bind(this),this.onTouchMove=function(t){var i=this.touchEventsData,a=this.params,r=this.touches,n=this.rtlTranslate,o=t;if(o.originalEvent&&(o=o.originalEvent),i.isTouched){if(!i.isTouchEvent||"mousemove"!==o.type){var d="touchmove"===o.type?o.targetTouches[0].pageX:o.pageX,h="touchmove"===o.type?o.targetTouches[0].pageY:o.pageY;if(o.preventedByNestedSwiper)return r.startX=d,void(r.startY=h);if(!this.allowTouchMove)return this.allowClick=!1,void(i.isTouched&&(l.extend(r,{startX:d,startY:h,currentX:d,currentY:h}),i.touchStartTime=l.now()));if(i.isTouchEvent&&a.touchReleaseOnEdges&&!a.loop)if(this.isVertical()){if(h<r.startY&&this.translate<=this.maxTranslate()||h>r.startY&&this.translate>=this.minTranslate())return i.isTouched=!1,void(i.isMoved=!1)}else if(d<r.startX&&this.translate<=this.maxTranslate()||d>r.startX&&this.translate>=this.minTranslate())return;if(i.isTouchEvent&&e.activeElement&&o.target===e.activeElement&&s(o.target).is(i.formElements))return i.isMoved=!0,void(this.allowClick=!1);if(i.allowTouchCallbacks&&this.emit("touchMove",o),!(o.targetTouches&&o.targetTouches.length>1)){r.currentX=d,r.currentY=h;var p,c=r.currentX-r.startX,u=r.currentY-r.startY;if(!(this.params.threshold&&Math.sqrt(Math.pow(c,2)+Math.pow(u,2))<this.params.threshold))if(void 0===i.isScrolling&&(this.isHorizontal()&&r.currentY===r.startY||this.isVertical()&&r.currentX===r.startX?i.isScrolling=!1:c*c+u*u>=25&&(p=180*Math.atan2(Math.abs(u),Math.abs(c))/Math.PI,i.isScrolling=this.isHorizontal()?p>a.touchAngle:90-p>a.touchAngle)),i.isScrolling&&this.emit("touchMoveOpposite",o),void 0===i.startMoving&&(r.currentX===r.startX&&r.currentY===r.startY||(i.startMoving=!0)),i.isScrolling)i.isTouched=!1;else if(i.startMoving){this.allowClick=!1,o.preventDefault(),a.touchMoveStopPropagation&&!a.nested&&o.stopPropagation(),i.isMoved||(a.loop&&this.loopFix(),i.startTranslate=this.getTranslate(),this.setTransition(0),this.animating&&this.$wrapperEl.trigger("webkitTransitionEnd transitionend"),i.allowMomentumBounce=!1,!a.grabCursor||!0!==this.allowSlideNext&&!0!==this.allowSlidePrev||this.setGrabCursor(!0),this.emit("sliderFirstMove",o)),this.emit("sliderMove",o),i.isMoved=!0;var v=this.isHorizontal()?c:u;r.diff=v,v*=a.touchRatio,n&&(v=-v),this.swipeDirection=v>0?"prev":"next",i.currentTranslate=v+i.startTranslate;var f=!0,m=a.resistanceRatio;if(a.touchReleaseOnEdges&&(m=0),v>0&&i.currentTranslate>this.minTranslate()?(f=!1,a.resistance&&(i.currentTranslate=this.minTranslate()-1+Math.pow(-this.minTranslate()+i.startTranslate+v,m))):v<0&&i.currentTranslate<this.maxTranslate()&&(f=!1,a.resistance&&(i.currentTranslate=this.maxTranslate()+1-Math.pow(this.maxTranslate()-i.startTranslate-v,m))),f&&(o.preventedByNestedSwiper=!0),!this.allowSlideNext&&"next"===this.swipeDirection&&i.currentTranslate<i.startTranslate&&(i.currentTranslate=i.startTranslate),!this.allowSlidePrev&&"prev"===this.swipeDirection&&i.currentTranslate>i.startTranslate&&(i.currentTranslate=i.startTranslate),a.threshold>0){if(!(Math.abs(v)>a.threshold||i.allowThresholdMove))return void(i.currentTranslate=i.startTranslate);if(!i.allowThresholdMove)return i.allowThresholdMove=!0,r.startX=r.currentX,r.startY=r.currentY,i.currentTranslate=i.startTranslate,void(r.diff=this.isHorizontal()?r.currentX-r.startX:r.currentY-r.startY)}a.followFinger&&((a.freeMode||a.watchSlidesProgress||a.watchSlidesVisibility)&&(this.updateActiveIndex(),this.updateSlidesClasses()),a.freeMode&&(0===i.velocities.length&&i.velocities.push({position:r[this.isHorizontal()?"startX":"startY"],time:i.touchStartTime}),i.velocities.push({position:r[this.isHorizontal()?"currentX":"currentY"],time:l.now()})),this.updateProgress(i.currentTranslate),this.setTranslate(i.currentTranslate))}}}}else i.startMoving&&i.isScrolling&&this.emit("touchMoveOpposite",o)}.bind(this),this.onTouchEnd=function(e){var t=this,i=t.touchEventsData,s=t.params,a=t.touches,r=t.rtlTranslate,n=t.$wrapperEl,o=t.slidesGrid,d=t.snapGrid,h=e;if(h.originalEvent&&(h=h.originalEvent),i.allowTouchCallbacks&&t.emit("touchEnd",h),i.allowTouchCallbacks=!1,!i.isTouched)return i.isMoved&&s.grabCursor&&t.setGrabCursor(!1),i.isMoved=!1,void(i.startMoving=!1);s.grabCursor&&i.isMoved&&i.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);var p,c=l.now(),u=c-i.touchStartTime;if(t.allowClick&&(t.updateClickedSlide(h),t.emit("tap",h),u<300&&c-i.lastClickTime>300&&(i.clickTimeout&&clearTimeout(i.clickTimeout),i.clickTimeout=l.nextTick(function(){t&&!t.destroyed&&t.emit("click",h)},300)),u<300&&c-i.lastClickTime<300&&(i.clickTimeout&&clearTimeout(i.clickTimeout),t.emit("doubleTap",h))),i.lastClickTime=l.now(),l.nextTick(function(){t.destroyed||(t.allowClick=!0)}),!i.isTouched||!i.isMoved||!t.swipeDirection||0===a.diff||i.currentTranslate===i.startTranslate)return i.isTouched=!1,i.isMoved=!1,void(i.startMoving=!1);if(i.isTouched=!1,i.isMoved=!1,i.startMoving=!1,p=s.followFinger?r?t.translate:-t.translate:-i.currentTranslate,s.freeMode){if(p<-t.minTranslate())return void t.slideTo(t.activeIndex);if(p>-t.maxTranslate())return void(t.slides.length<d.length?t.slideTo(d.length-1):t.slideTo(t.slides.length-1));if(s.freeModeMomentum){if(i.velocities.length>1){var v=i.velocities.pop(),f=i.velocities.pop(),m=v.position-f.position,g=v.time-f.time;t.velocity=m/g,t.velocity/=2,Math.abs(t.velocity)<s.freeModeMinimumVelocity&&(t.velocity=0),(g>150||l.now()-v.time>300)&&(t.velocity=0)}else t.velocity=0;t.velocity*=s.freeModeMomentumVelocityRatio,i.velocities.length=0;var b=1e3*s.freeModeMomentumRatio,w=t.velocity*b,y=t.translate+w;r&&(y=-y);var x,T,E=!1,S=20*Math.abs(t.velocity)*s.freeModeMomentumBounceRatio;if(y<t.maxTranslate())s.freeModeMomentumBounce?(y+t.maxTranslate()<-S&&(y=t.maxTranslate()-S),x=t.maxTranslate(),E=!0,i.allowMomentumBounce=!0):y=t.maxTranslate(),s.loop&&s.centeredSlides&&(T=!0);else if(y>t.minTranslate())s.freeModeMomentumBounce?(y-t.minTranslate()>S&&(y=t.minTranslate()+S),x=t.minTranslate(),E=!0,i.allowMomentumBounce=!0):y=t.minTranslate(),s.loop&&s.centeredSlides&&(T=!0);else if(s.freeModeSticky){for(var C,M=0;M<d.length;M+=1)if(d[M]>-y){C=M;break}y=-(y=Math.abs(d[C]-y)<Math.abs(d[C-1]-y)||"next"===t.swipeDirection?d[C]:d[C-1])}if(T&&t.once("transitionEnd",function(){t.loopFix()}),0!==t.velocity)b=r?Math.abs((-y-t.translate)/t.velocity):Math.abs((y-t.translate)/t.velocity);else if(s.freeModeSticky)return void t.slideToClosest();s.freeModeMomentumBounce&&E?(t.updateProgress(x),t.setTransition(b),t.setTranslate(y),t.transitionStart(!0,t.swipeDirection),t.animating=!0,n.transitionEnd(function(){t&&!t.destroyed&&i.allowMomentumBounce&&(t.emit("momentumBounce"),t.setTransition(s.speed),t.setTranslate(x),n.transitionEnd(function(){t&&!t.destroyed&&t.transitionEnd()}))})):t.velocity?(t.updateProgress(y),t.setTransition(b),t.setTranslate(y),t.transitionStart(!0,t.swipeDirection),t.animating||(t.animating=!0,n.transitionEnd(function(){t&&!t.destroyed&&t.transitionEnd()}))):t.updateProgress(y),t.updateActiveIndex(),t.updateSlidesClasses()}else if(s.freeModeSticky)return void t.slideToClosest();(!s.freeModeMomentum||u>=s.longSwipesMs)&&(t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses())}else{for(var k=0,P=t.slidesSizesGrid[0],z=0;z<o.length;z+=s.slidesPerGroup)void 0!==o[z+s.slidesPerGroup]?p>=o[z]&&p<o[z+s.slidesPerGroup]&&(k=z,P=o[z+s.slidesPerGroup]-o[z]):p>=o[z]&&(k=z,P=o[o.length-1]-o[o.length-2]);var $=(p-o[k])/P;if(u>s.longSwipesMs){if(!s.longSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&($>=s.longSwipesRatio?t.slideTo(k+s.slidesPerGroup):t.slideTo(k)),"prev"===t.swipeDirection&&($>1-s.longSwipesRatio?t.slideTo(k+s.slidesPerGroup):t.slideTo(k))}else{if(!s.shortSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&t.slideTo(k+s.slidesPerGroup),"prev"===t.swipeDirection&&t.slideTo(k)}}}.bind(this),this.onClick=function(e){this.allowClick||(this.params.preventClicks&&e.preventDefault(),this.params.preventClicksPropagation&&this.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))}.bind(this);var o="container"===i.touchEventsTarget?r:n,h=!!i.nested;if(d.touch||!d.pointerEvents&&!d.prefixedPointerEvents){if(d.touch){var p=!("touchstart"!==a.start||!d.passiveListener||!i.passiveListeners)&&{passive:!0,capture:!1};o.addEventListener(a.start,this.onTouchStart,p),o.addEventListener(a.move,this.onTouchMove,d.passiveListener?{passive:!1,capture:h}:h),o.addEventListener(a.end,this.onTouchEnd,p)}(i.simulateTouch&&!w.ios&&!w.android||i.simulateTouch&&!d.touch&&w.ios)&&(o.addEventListener("mousedown",this.onTouchStart,!1),e.addEventListener("mousemove",this.onTouchMove,h),e.addEventListener("mouseup",this.onTouchEnd,!1))}else o.addEventListener(a.start,this.onTouchStart,!1),e.addEventListener(a.move,this.onTouchMove,h),e.addEventListener(a.end,this.onTouchEnd,!1);(i.preventClicks||i.preventClicksPropagation)&&o.addEventListener("click",this.onClick,!0),this.on(w.ios||w.android?"resize orientationchange observerUpdate":"resize observerUpdate",y,!0)},detachEvents:function(){var t=this.params,i=this.touchEvents,s=this.el,a=this.wrapperEl,r="container"===t.touchEventsTarget?s:a,n=!!t.nested;if(d.touch||!d.pointerEvents&&!d.prefixedPointerEvents){if(d.touch){var o=!("onTouchStart"!==i.start||!d.passiveListener||!t.passiveListeners)&&{passive:!0,capture:!1};r.removeEventListener(i.start,this.onTouchStart,o),r.removeEventListener(i.move,this.onTouchMove,n),r.removeEventListener(i.end,this.onTouchEnd,o)}(t.simulateTouch&&!w.ios&&!w.android||t.simulateTouch&&!d.touch&&w.ios)&&(r.removeEventListener("mousedown",this.onTouchStart,!1),e.removeEventListener("mousemove",this.onTouchMove,n),e.removeEventListener("mouseup",this.onTouchEnd,!1))}else r.removeEventListener(i.start,this.onTouchStart,!1),e.removeEventListener(i.move,this.onTouchMove,n),e.removeEventListener(i.end,this.onTouchEnd,!1);(t.preventClicks||t.preventClicksPropagation)&&r.removeEventListener("click",this.onClick,!0),this.off(w.ios||w.android?"resize orientationchange observerUpdate":"resize observerUpdate",y)}},E={setBreakpoint:function(){var e=this.activeIndex,t=this.initialized,i=this.loopedSlides;void 0===i&&(i=0);var s=this.params,a=s.breakpoints;if(a&&(!a||0!==Object.keys(a).length)){var r=this.getBreakpoint(a);if(r&&this.currentBreakpoint!==r){var n=r in a?a[r]:void 0;n&&["slidesPerView","spaceBetween","slidesPerGroup"].forEach(function(e){var t=n[e];void 0!==t&&(n[e]="slidesPerView"!==e||"AUTO"!==t&&"auto"!==t?"slidesPerView"===e?parseFloat(t):parseInt(t,10):"auto")});var o=n||this.originalParams,d=s.loop&&o.slidesPerView!==s.slidesPerView;l.extend(this.params,o),l.extend(this,{allowTouchMove:this.params.allowTouchMove,allowSlideNext:this.params.allowSlideNext,allowSlidePrev:this.params.allowSlidePrev}),this.currentBreakpoint=r,d&&t&&(this.loopDestroy(),this.loopCreate(),this.updateSlides(),this.slideTo(e-i+this.loopedSlides,0,!1)),this.emit("breakpoint",o)}}},getBreakpoint:function(e){if(e){var i=!1,s=[];Object.keys(e).forEach(function(e){s.push(e)}),s.sort(function(e,t){return parseInt(e,10)-parseInt(t,10)});for(var a=0;a<s.length;a+=1){var r=s[a];this.params.breakpointsInverse?r<=t.innerWidth&&(i=r):r>=t.innerWidth&&!i&&(i=r)}return i||"max"}}},S={isIE:!!t.navigator.userAgent.match(/Trident/g)||!!t.navigator.userAgent.match(/MSIE/g),isEdge:!!t.navigator.userAgent.match(/Edge/g),isSafari:(x=t.navigator.userAgent.toLowerCase(),x.indexOf("safari")>=0&&x.indexOf("chrome")<0&&x.indexOf("android")<0),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(t.navigator.userAgent)},C={init:!0,direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,preventInteractionOnTransition:!1,edgeSwipeDetection:!1,edgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,breakpointsInverse:!1,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,watchOverflow:!1,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:0,touchMoveStopPropagation:!0,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,loopFillGroupWithBlank:!1,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,containerModifierClass:"swiper-container-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-invisible-blank",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",runCallbacksOnInit:!0},M={update:c,translate:u,transition:v,slide:f,loop:m,grabCursor:g,manipulation:b,events:T,breakpoints:E,checkOverflow:{checkOverflow:function(){var e=this.isLocked;this.isLocked=1===this.snapGrid.length,this.allowSlideNext=!this.isLocked,this.allowSlidePrev=!this.isLocked,e!==this.isLocked&&this.emit(this.isLocked?"lock":"unlock"),e&&e!==this.isLocked&&(this.isEnd=!1,this.navigation.update())}},classes:{addClasses:function(){var e=this.classNames,t=this.params,i=this.rtl,s=this.$el,a=[];a.push(t.direction),t.freeMode&&a.push("free-mode"),d.flexbox||a.push("no-flexbox"),t.autoHeight&&a.push("autoheight"),i&&a.push("rtl"),t.slidesPerColumn>1&&a.push("multirow"),w.android&&a.push("android"),w.ios&&a.push("ios"),(S.isIE||S.isEdge)&&(d.pointerEvents||d.prefixedPointerEvents)&&a.push("wp8-"+t.direction),a.forEach(function(i){e.push(t.containerModifierClass+i)}),s.addClass(e.join(" "))},removeClasses:function(){var e=this.$el,t=this.classNames;e.removeClass(t.join(" "))}},images:{loadImage:function(e,i,s,a,r,n){var o;function l(){n&&n()}e.complete&&r?l():i?((o=new t.Image).onload=l,o.onerror=l,a&&(o.sizes=a),s&&(o.srcset=s),i&&(o.src=i)):l()},preloadImages:function(){var e=this;function t(){null!=e&&e&&!e.destroyed&&(void 0!==e.imagesLoaded&&(e.imagesLoaded+=1),e.imagesLoaded===e.imagesToLoad.length&&(e.params.updateOnImagesReady&&e.update(),e.emit("imagesReady")))}e.imagesToLoad=e.$el.find("img");for(var i=0;i<e.imagesToLoad.length;i+=1){var s=e.imagesToLoad[i];e.loadImage(s,s.currentSrc||s.getAttribute("src"),s.srcset||s.getAttribute("srcset"),s.sizes||s.getAttribute("sizes"),!0,t)}}}},k={},P=function(e){function t(){for(var i,a,r,n=[],o=arguments.length;o--;)n[o]=arguments[o];1===n.length&&n[0].constructor&&n[0].constructor===Object?r=n[0]:(a=(i=n)[0],r=i[1]),r||(r={}),r=l.extend({},r),a&&!r.el&&(r.el=a),e.call(this,r),Object.keys(M).forEach(function(e){Object.keys(M[e]).forEach(function(i){t.prototype[i]||(t.prototype[i]=M[e][i])})});var h=this;void 0===h.modules&&(h.modules={}),Object.keys(h.modules).forEach(function(e){var t=h.modules[e];if(t.params){var i=Object.keys(t.params)[0],s=t.params[i];if("object"!=typeof s||null===s)return;if(!(i in r&&"enabled"in s))return;!0===r[i]&&(r[i]={enabled:!0}),"object"!=typeof r[i]||"enabled"in r[i]||(r[i].enabled=!0),r[i]||(r[i]={enabled:!1})}});var p=l.extend({},C);h.useModulesParams(p),h.params=l.extend({},p,k,r),h.originalParams=l.extend({},h.params),h.passedParams=l.extend({},r),h.$=s;var c=s(h.params.el);if(a=c[0]){if(c.length>1){var u=[];return c.each(function(e,i){var s=l.extend({},r,{el:i});u.push(new t(s))}),u}a.swiper=h,c.data("swiper",h);var v,f,m=c.children("."+h.params.wrapperClass);return l.extend(h,{$el:c,el:a,$wrapperEl:m,wrapperEl:m[0],classNames:[],slides:s(),slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal:function(){return"horizontal"===h.params.direction},isVertical:function(){return"vertical"===h.params.direction},rtl:"rtl"===a.dir.toLowerCase()||"rtl"===c.css("direction"),rtlTranslate:"horizontal"===h.params.direction&&("rtl"===a.dir.toLowerCase()||"rtl"===c.css("direction")),wrongRTL:"-webkit-box"===m.css("display"),activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,allowSlideNext:h.params.allowSlideNext,allowSlidePrev:h.params.allowSlidePrev,touchEvents:(v=["touchstart","touchmove","touchend"],f=["mousedown","mousemove","mouseup"],d.pointerEvents?f=["pointerdown","pointermove","pointerup"]:d.prefixedPointerEvents&&(f=["MSPointerDown","MSPointerMove","MSPointerUp"]),h.touchEventsTouch={start:v[0],move:v[1],end:v[2]},h.touchEventsDesktop={start:f[0],move:f[1],end:f[2]},d.touch||!h.params.simulateTouch?h.touchEventsTouch:h.touchEventsDesktop),touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,formElements:"input, select, option, textarea, button, video",lastClickTime:l.now(),clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,isTouchEvent:void 0,startMoving:void 0},allowClick:!0,allowTouchMove:h.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),h.useModules(),h.params.init&&h.init(),h}}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var i={extendedDefaults:{configurable:!0},defaults:{configurable:!0},Class:{configurable:!0},$:{configurable:!0}};return t.prototype.slidesPerViewDynamic=function(){var e=this.params,t=this.slides,i=this.slidesGrid,s=this.size,a=this.activeIndex,r=1;if(e.centeredSlides){for(var n,o=t[a].swiperSlideSize,l=a+1;l<t.length;l+=1)t[l]&&!n&&(o+=t[l].swiperSlideSize,r+=1,o>s&&(n=!0));for(var d=a-1;d>=0;d-=1)t[d]&&!n&&(o+=t[d].swiperSlideSize,r+=1,o>s&&(n=!0))}else for(var h=a+1;h<t.length;h+=1)i[h]-i[a]<s&&(r+=1);return r},t.prototype.update=function(){var e=this;if(e&&!e.destroyed){var t=e.snapGrid,i=e.params;i.breakpoints&&e.setBreakpoint(),e.updateSize(),e.updateSlides(),e.updateProgress(),e.updateSlidesClasses(),e.params.freeMode?(s(),e.params.autoHeight&&e.updateAutoHeight()):(("auto"===e.params.slidesPerView||e.params.slidesPerView>1)&&e.isEnd&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0))||s(),i.watchOverflow&&t!==e.snapGrid&&e.checkOverflow(),e.emit("update")}function s(){var t=e.rtlTranslate?-1*e.translate:e.translate,i=Math.min(Math.max(t,e.maxTranslate()),e.minTranslate());e.setTranslate(i),e.updateActiveIndex(),e.updateSlidesClasses()}},t.prototype.init=function(){this.initialized||(this.emit("beforeInit"),this.params.breakpoints&&this.setBreakpoint(),this.addClasses(),this.params.loop&&this.loopCreate(),this.updateSize(),this.updateSlides(),this.params.watchOverflow&&this.checkOverflow(),this.params.grabCursor&&this.setGrabCursor(),this.params.preloadImages&&this.preloadImages(),this.params.loop?this.slideTo(this.params.initialSlide+this.loopedSlides,0,this.params.runCallbacksOnInit):this.slideTo(this.params.initialSlide,0,this.params.runCallbacksOnInit),this.attachEvents(),this.initialized=!0,this.emit("init"))},t.prototype.destroy=function(e,t){void 0===e&&(e=!0),void 0===t&&(t=!0);var i=this,s=i.params,a=i.$el,r=i.$wrapperEl,n=i.slides;return void 0===i.params||i.destroyed?null:(i.emit("beforeDestroy"),i.initialized=!1,i.detachEvents(),s.loop&&i.loopDestroy(),t&&(i.removeClasses(),a.removeAttr("style"),r.removeAttr("style"),n&&n.length&&n.removeClass([s.slideVisibleClass,s.slideActiveClass,s.slideNextClass,s.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-slide-index").removeAttr("data-swiper-column").removeAttr("data-swiper-row")),i.emit("destroy"),Object.keys(i.eventsListeners).forEach(function(e){i.off(e)}),!1!==e&&(i.$el[0].swiper=null,i.$el.data("swiper",null),l.deleteProps(i)),i.destroyed=!0,null)},t.extendDefaults=function(e){l.extend(k,e)},i.extendedDefaults.get=function(){return k},i.defaults.get=function(){return C},i.Class.get=function(){return e},i.$.get=function(){return s},Object.defineProperties(t,i),t}(h),z={name:"device",proto:{device:w},static:{device:w}},$={name:"support",proto:{support:d},static:{support:d}},L={name:"browser",proto:{browser:S},static:{browser:S}},I={name:"resize",create:function(){var e=this;l.extend(e,{resize:{resizeHandler:function(){e&&!e.destroyed&&e.initialized&&(e.emit("beforeResize"),e.emit("resize"))},orientationChangeHandler:function(){e&&!e.destroyed&&e.initialized&&e.emit("orientationchange")}}})},on:{init:function(){t.addEventListener("resize",this.resize.resizeHandler),t.addEventListener("orientationchange",this.resize.orientationChangeHandler)},destroy:function(){t.removeEventListener("resize",this.resize.resizeHandler),t.removeEventListener("orientationchange",this.resize.orientationChangeHandler)}}},D={func:t.MutationObserver||t.WebkitMutationObserver,attach:function(e,i){void 0===i&&(i={});var s=this,a=D.func,r=new a(function(e){if(1!==e.length){var i=function(){s.emit("observerUpdate",e[0])};t.requestAnimationFrame?t.requestAnimationFrame(i):t.setTimeout(i,0)}else s.emit("observerUpdate",e[0])});r.observe(e,{attributes:void 0===i.attributes||i.attributes,childList:void 0===i.childList||i.childList,characterData:void 0===i.characterData||i.characterData}),s.observer.observers.push(r)},init:function(){if(d.observer&&this.params.observer){if(this.params.observeParents)for(var e=this.$el.parents(),t=0;t<e.length;t+=1)this.observer.attach(e[t]);this.observer.attach(this.$el[0],{childList:this.params.observeSlideChildren}),this.observer.attach(this.$wrapperEl[0],{attributes:!1})}},destroy:function(){this.observer.observers.forEach(function(e){e.disconnect()}),this.observer.observers=[]}},O={name:"observer",params:{observer:!1,observeParents:!1,observeSlideChildren:!1},create:function(){l.extend(this,{observer:{init:D.init.bind(this),attach:D.attach.bind(this),destroy:D.destroy.bind(this),observers:[]}})},on:{init:function(){this.observer.init()},destroy:function(){this.observer.destroy()}}},A={update:function(e){var t=this,i=t.params,s=i.slidesPerView,a=i.slidesPerGroup,r=i.centeredSlides,n=t.params.virtual,o=n.addSlidesBefore,d=n.addSlidesAfter,h=t.virtual,p=h.from,c=h.to,u=h.slides,v=h.slidesGrid,f=h.renderSlide,m=h.offset;t.updateActiveIndex();var g,b,w,y=t.activeIndex||0;g=t.rtlTranslate?"right":t.isHorizontal()?"left":"top",r?(b=Math.floor(s/2)+a+o,w=Math.floor(s/2)+a+d):(b=s+(a-1)+o,w=a+d);var x=Math.max((y||0)-w,0),T=Math.min((y||0)+b,u.length-1),E=(t.slidesGrid[x]||0)-(t.slidesGrid[0]||0);function S(){t.updateSlides(),t.updateProgress(),t.updateSlidesClasses(),t.lazy&&t.params.lazy.enabled&&t.lazy.load()}if(l.extend(t.virtual,{from:x,to:T,offset:E,slidesGrid:t.slidesGrid}),p===x&&c===T&&!e)return t.slidesGrid!==v&&E!==m&&t.slides.css(g,E+"px"),void t.updateProgress();if(t.params.virtual.renderExternal)return t.params.virtual.renderExternal.call(t,{offset:E,from:x,to:T,slides:function(){for(var e=[],t=x;t<=T;t+=1)e.push(u[t]);return e}()}),void S();var C=[],M=[];if(e)t.$wrapperEl.find("."+t.params.slideClass).remove();else for(var k=p;k<=c;k+=1)(k<x||k>T)&&t.$wrapperEl.find("."+t.params.slideClass+'[data-swiper-slide-index="'+k+'"]').remove();for(var P=0;P<u.length;P+=1)P>=x&&P<=T&&(void 0===c||e?M.push(P):(P>c&&M.push(P),P<p&&C.push(P)));M.forEach(function(e){t.$wrapperEl.append(f(u[e],e))}),C.sort(function(e,t){return t-e}).forEach(function(e){t.$wrapperEl.prepend(f(u[e],e))}),t.$wrapperEl.children(".swiper-slide").css(g,E+"px"),S()},renderSlide:function(e,t){var i=this.params.virtual;if(i.cache&&this.virtual.cache[t])return this.virtual.cache[t];var a=i.renderSlide?s(i.renderSlide.call(this,e,t)):s('<div class="'+this.params.slideClass+'" data-swiper-slide-index="'+t+'">'+e+"</div>");return a.attr("data-swiper-slide-index")||a.attr("data-swiper-slide-index",t),i.cache&&(this.virtual.cache[t]=a),a},appendSlide:function(e){this.virtual.slides.push(e),this.virtual.update(!0)},prependSlide:function(e){if(this.virtual.slides.unshift(e),this.params.virtual.cache){var t=this.virtual.cache,i={};Object.keys(t).forEach(function(e){i[e+1]=t[e]}),this.virtual.cache=i}this.virtual.update(!0),this.slideNext(0)}},N={name:"virtual",params:{virtual:{enabled:!1,slides:[],cache:!0,renderSlide:null,renderExternal:null,addSlidesBefore:0,addSlidesAfter:0}},create:function(){l.extend(this,{virtual:{update:A.update.bind(this),appendSlide:A.appendSlide.bind(this),prependSlide:A.prependSlide.bind(this),renderSlide:A.renderSlide.bind(this),slides:this.params.virtual.slides,cache:{}}})},on:{beforeInit:function(){if(this.params.virtual.enabled){this.classNames.push(this.params.containerModifierClass+"virtual");var e={watchSlidesProgress:!0};l.extend(this.params,e),l.extend(this.originalParams,e),this.params.initialSlide||this.virtual.update()}},setTranslate:function(){this.params.virtual.enabled&&this.virtual.update()}}},H={handle:function(i){var s=this.rtlTranslate,a=i;a.originalEvent&&(a=a.originalEvent);var r=a.keyCode||a.charCode;if(!this.allowSlideNext&&(this.isHorizontal()&&39===r||this.isVertical()&&40===r))return!1;if(!this.allowSlidePrev&&(this.isHorizontal()&&37===r||this.isVertical()&&38===r))return!1;if(!(a.shiftKey||a.altKey||a.ctrlKey||a.metaKey||e.activeElement&&e.activeElement.nodeName&&("input"===e.activeElement.nodeName.toLowerCase()||"textarea"===e.activeElement.nodeName.toLowerCase()))){if(this.params.keyboard.onlyInViewport&&(37===r||39===r||38===r||40===r)){var n=!1;if(this.$el.parents("."+this.params.slideClass).length>0&&0===this.$el.parents("."+this.params.slideActiveClass).length)return;var o=t.innerWidth,l=t.innerHeight,d=this.$el.offset();s&&(d.left-=this.$el[0].scrollLeft);for(var h=[[d.left,d.top],[d.left+this.width,d.top],[d.left,d.top+this.height],[d.left+this.width,d.top+this.height]],p=0;p<h.length;p+=1){var c=h[p];c[0]>=0&&c[0]<=o&&c[1]>=0&&c[1]<=l&&(n=!0)}if(!n)return}this.isHorizontal()?(37!==r&&39!==r||(a.preventDefault?a.preventDefault():a.returnValue=!1),(39===r&&!s||37===r&&s)&&this.slideNext(),(37===r&&!s||39===r&&s)&&this.slidePrev()):(38!==r&&40!==r||(a.preventDefault?a.preventDefault():a.returnValue=!1),40===r&&this.slideNext(),38===r&&this.slidePrev()),this.emit("keyPress",r)}},enable:function(){this.keyboard.enabled||(s(e).on("keydown",this.keyboard.handle),this.keyboard.enabled=!0)},disable:function(){this.keyboard.enabled&&(s(e).off("keydown",this.keyboard.handle),this.keyboard.enabled=!1)}},G={name:"keyboard",params:{keyboard:{enabled:!1,onlyInViewport:!0}},create:function(){l.extend(this,{keyboard:{enabled:!1,enable:H.enable.bind(this),disable:H.disable.bind(this),handle:H.handle.bind(this)}})},on:{init:function(){this.params.keyboard.enabled&&this.keyboard.enable()},destroy:function(){this.keyboard.enabled&&this.keyboard.disable()}}},B={lastScrollTime:l.now(),event:t.navigator.userAgent.indexOf("firefox")>-1?"DOMMouseScroll":function(){var t="onwheel"in e;if(!t){var i=e.createElement("div");i.setAttribute("onwheel","return;"),t="function"==typeof i.onwheel}return!t&&e.implementation&&e.implementation.hasFeature&&!0!==e.implementation.hasFeature("","")&&(t=e.implementation.hasFeature("Events.wheel","3.0")),t}()?"wheel":"mousewheel",normalize:function(e){var t=0,i=0,s=0,a=0;return"detail"in e&&(i=e.detail),"wheelDelta"in e&&(i=-e.wheelDelta/120),"wheelDeltaY"in e&&(i=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=i,i=0),s=10*t,a=10*i,"deltaY"in e&&(a=e.deltaY),"deltaX"in e&&(s=e.deltaX),(s||a)&&e.deltaMode&&(1===e.deltaMode?(s*=40,a*=40):(s*=800,a*=800)),s&&!t&&(t=s<1?-1:1),a&&!i&&(i=a<1?-1:1),{spinX:t,spinY:i,pixelX:s,pixelY:a}},handleMouseEnter:function(){this.mouseEntered=!0},handleMouseLeave:function(){this.mouseEntered=!1},handle:function(e){var i=e,s=this,a=s.params.mousewheel;if(!s.mouseEntered&&!a.releaseOnEdges)return!0;i.originalEvent&&(i=i.originalEvent);var r=0,n=s.rtlTranslate?-1:1,o=B.normalize(i);if(a.forceToAxis)if(s.isHorizontal()){if(!(Math.abs(o.pixelX)>Math.abs(o.pixelY)))return!0;r=o.pixelX*n}else{if(!(Math.abs(o.pixelY)>Math.abs(o.pixelX)))return!0;r=o.pixelY}else r=Math.abs(o.pixelX)>Math.abs(o.pixelY)?-o.pixelX*n:-o.pixelY;if(0===r)return!0;if(a.invert&&(r=-r),s.params.freeMode){s.params.loop&&s.loopFix();var d=s.getTranslate()+r*a.sensitivity,h=s.isBeginning,p=s.isEnd;if(d>=s.minTranslate()&&(d=s.minTranslate()),d<=s.maxTranslate()&&(d=s.maxTranslate()),s.setTransition(0),s.setTranslate(d),s.updateProgress(),s.updateActiveIndex(),s.updateSlidesClasses(),(!h&&s.isBeginning||!p&&s.isEnd)&&s.updateSlidesClasses(),s.params.freeModeSticky&&(clearTimeout(s.mousewheel.timeout),s.mousewheel.timeout=l.nextTick(function(){s.slideToClosest()},300)),s.emit("scroll",i),s.params.autoplay&&s.params.autoplayDisableOnInteraction&&s.autoplay.stop(),d===s.minTranslate()||d===s.maxTranslate())return!0}else{if(l.now()-s.mousewheel.lastScrollTime>60)if(r<0)if(s.isEnd&&!s.params.loop||s.animating){if(a.releaseOnEdges)return!0}else s.slideNext(),s.emit("scroll",i);else if(s.isBeginning&&!s.params.loop||s.animating){if(a.releaseOnEdges)return!0}else s.slidePrev(),s.emit("scroll",i);s.mousewheel.lastScrollTime=(new t.Date).getTime()}return i.preventDefault?i.preventDefault():i.returnValue=!1,!1},enable:function(){if(!B.event)return!1;if(this.mousewheel.enabled)return!1;var e=this.$el;return"container"!==this.params.mousewheel.eventsTarged&&(e=s(this.params.mousewheel.eventsTarged)),e.on("mouseenter",this.mousewheel.handleMouseEnter),e.on("mouseleave",this.mousewheel.handleMouseLeave),e.on(B.event,this.mousewheel.handle),this.mousewheel.enabled=!0,!0},disable:function(){if(!B.event)return!1;if(!this.mousewheel.enabled)return!1;var e=this.$el;return"container"!==this.params.mousewheel.eventsTarged&&(e=s(this.params.mousewheel.eventsTarged)),e.off(B.event,this.mousewheel.handle),this.mousewheel.enabled=!1,!0}},X={update:function(){var e=this.params.navigation;if(!this.params.loop){var t=this.navigation,i=t.$nextEl,s=t.$prevEl;s&&s.length>0&&(this.isBeginning?s.addClass(e.disabledClass):s.removeClass(e.disabledClass),s[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](e.lockClass)),i&&i.length>0&&(this.isEnd?i.addClass(e.disabledClass):i.removeClass(e.disabledClass),i[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](e.lockClass))}},onPrevClick:function(e){e.preventDefault(),this.isBeginning&&!this.params.loop||this.slidePrev()},onNextClick:function(e){e.preventDefault(),this.isEnd&&!this.params.loop||this.slideNext()},init:function(){var e,t,i=this.params.navigation;(i.nextEl||i.prevEl)&&(i.nextEl&&(e=s(i.nextEl),this.params.uniqueNavElements&&"string"==typeof i.nextEl&&e.length>1&&1===this.$el.find(i.nextEl).length&&(e=this.$el.find(i.nextEl))),i.prevEl&&(t=s(i.prevEl),this.params.uniqueNavElements&&"string"==typeof i.prevEl&&t.length>1&&1===this.$el.find(i.prevEl).length&&(t=this.$el.find(i.prevEl))),e&&e.length>0&&e.on("click",this.navigation.onNextClick),t&&t.length>0&&t.on("click",this.navigation.onPrevClick),l.extend(this.navigation,{$nextEl:e,nextEl:e&&e[0],$prevEl:t,prevEl:t&&t[0]}))},destroy:function(){var e=this.navigation,t=e.$nextEl,i=e.$prevEl;t&&t.length&&(t.off("click",this.navigation.onNextClick),t.removeClass(this.params.navigation.disabledClass)),i&&i.length&&(i.off("click",this.navigation.onPrevClick),i.removeClass(this.params.navigation.disabledClass))}},Y={update:function(){var e=this.rtl,t=this.params.pagination;if(t.el&&this.pagination.el&&this.pagination.$el&&0!==this.pagination.$el.length){var i,a=this.virtual&&this.params.virtual.enabled?this.virtual.slides.length:this.slides.length,r=this.pagination.$el,n=this.params.loop?Math.ceil((a-2*this.loopedSlides)/this.params.slidesPerGroup):this.snapGrid.length;if(this.params.loop?((i=Math.ceil((this.activeIndex-this.loopedSlides)/this.params.slidesPerGroup))>a-1-2*this.loopedSlides&&(i-=a-2*this.loopedSlides),i>n-1&&(i-=n),i<0&&"bullets"!==this.params.paginationType&&(i=n+i)):i=void 0!==this.snapIndex?this.snapIndex:this.activeIndex||0,"bullets"===t.type&&this.pagination.bullets&&this.pagination.bullets.length>0){var o,l,d,h=this.pagination.bullets;if(t.dynamicBullets&&(this.pagination.bulletSize=h.eq(0)[this.isHorizontal()?"outerWidth":"outerHeight"](!0),r.css(this.isHorizontal()?"width":"height",this.pagination.bulletSize*(t.dynamicMainBullets+4)+"px"),t.dynamicMainBullets>1&&void 0!==this.previousIndex&&(this.pagination.dynamicBulletIndex+=i-this.previousIndex,this.pagination.dynamicBulletIndex>t.dynamicMainBullets-1?this.pagination.dynamicBulletIndex=t.dynamicMainBullets-1:this.pagination.dynamicBulletIndex<0&&(this.pagination.dynamicBulletIndex=0)),o=i-this.pagination.dynamicBulletIndex,l=o+(Math.min(h.length,t.dynamicMainBullets)-1),d=(l+o)/2),h.removeClass(t.bulletActiveClass+" "+t.bulletActiveClass+"-next "+t.bulletActiveClass+"-next-next "+t.bulletActiveClass+"-prev "+t.bulletActiveClass+"-prev-prev "+t.bulletActiveClass+"-main"),r.length>1)h.each(function(e,a){var r=s(a),n=r.index();n===i&&r.addClass(t.bulletActiveClass),t.dynamicBullets&&(n>=o&&n<=l&&r.addClass(t.bulletActiveClass+"-main"),n===o&&r.prev().addClass(t.bulletActiveClass+"-prev").prev().addClass(t.bulletActiveClass+"-prev-prev"),n===l&&r.next().addClass(t.bulletActiveClass+"-next").next().addClass(t.bulletActiveClass+"-next-next"))});else{var p=h.eq(i);if(p.addClass(t.bulletActiveClass),t.dynamicBullets){for(var c=h.eq(o),u=h.eq(l),v=o;v<=l;v+=1)h.eq(v).addClass(t.bulletActiveClass+"-main");c.prev().addClass(t.bulletActiveClass+"-prev").prev().addClass(t.bulletActiveClass+"-prev-prev"),u.next().addClass(t.bulletActiveClass+"-next").next().addClass(t.bulletActiveClass+"-next-next")}}if(t.dynamicBullets){var f=Math.min(h.length,t.dynamicMainBullets+4),m=(this.pagination.bulletSize*f-this.pagination.bulletSize)/2-d*this.pagination.bulletSize,g=e?"right":"left";h.css(this.isHorizontal()?g:"top",m+"px")}}if("fraction"===t.type&&(r.find("."+t.currentClass).text(t.formatFractionCurrent(i+1)),r.find("."+t.totalClass).text(t.formatFractionTotal(n))),"progressbar"===t.type){var b;b=t.progressbarOpposite?this.isHorizontal()?"vertical":"horizontal":this.isHorizontal()?"horizontal":"vertical";var w=(i+1)/n,y=1,x=1;"horizontal"===b?y=w:x=w,r.find("."+t.progressbarFillClass).transform("translate3d(0,0,0) scaleX("+y+") scaleY("+x+")").transition(this.params.speed)}"custom"===t.type&&t.renderCustom?(r.html(t.renderCustom(this,i+1,n)),this.emit("paginationRender",this,r[0])):this.emit("paginationUpdate",this,r[0]),r[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](t.lockClass)}},render:function(){var e=this.params.pagination;if(e.el&&this.pagination.el&&this.pagination.$el&&0!==this.pagination.$el.length){var t=this.virtual&&this.params.virtual.enabled?this.virtual.slides.length:this.slides.length,i=this.pagination.$el,s="";if("bullets"===e.type){for(var a=this.params.loop?Math.ceil((t-2*this.loopedSlides)/this.params.slidesPerGroup):this.snapGrid.length,r=0;r<a;r+=1)e.renderBullet?s+=e.renderBullet.call(this,r,e.bulletClass):s+="<"+e.bulletElement+' class="'+e.bulletClass+'"></'+e.bulletElement+">";i.html(s),this.pagination.bullets=i.find("."+e.bulletClass)}"fraction"===e.type&&(s=e.renderFraction?e.renderFraction.call(this,e.currentClass,e.totalClass):'<span class="'+e.currentClass+'"></span> / <span class="'+e.totalClass+'"></span>',i.html(s)),"progressbar"===e.type&&(s=e.renderProgressbar?e.renderProgressbar.call(this,e.progressbarFillClass):'<span class="'+e.progressbarFillClass+'"></span>',i.html(s)),"custom"!==e.type&&this.emit("paginationRender",this.pagination.$el[0])}},init:function(){var e=this,t=e.params.pagination;if(t.el){var i=s(t.el);0!==i.length&&(e.params.uniqueNavElements&&"string"==typeof t.el&&i.length>1&&1===e.$el.find(t.el).length&&(i=e.$el.find(t.el)),"bullets"===t.type&&t.clickable&&i.addClass(t.clickableClass),i.addClass(t.modifierClass+t.type),"bullets"===t.type&&t.dynamicBullets&&(i.addClass(""+t.modifierClass+t.type+"-dynamic"),e.pagination.dynamicBulletIndex=0,t.dynamicMainBullets<1&&(t.dynamicMainBullets=1)),"progressbar"===t.type&&t.progressbarOpposite&&i.addClass(t.progressbarOppositeClass),t.clickable&&i.on("click","."+t.bulletClass,function(t){t.preventDefault();var i=s(this).index()*e.params.slidesPerGroup;e.params.loop&&(i+=e.loopedSlides),e.slideTo(i)}),l.extend(e.pagination,{$el:i,el:i[0]}))}},destroy:function(){var e=this.params.pagination;if(e.el&&this.pagination.el&&this.pagination.$el&&0!==this.pagination.$el.length){var t=this.pagination.$el;t.removeClass(e.hiddenClass),t.removeClass(e.modifierClass+e.type),this.pagination.bullets&&this.pagination.bullets.removeClass(e.bulletActiveClass),e.clickable&&t.off("click","."+e.bulletClass)}}},V={setTranslate:function(){if(this.params.scrollbar.el&&this.scrollbar.el){var e=this.scrollbar,t=this.rtlTranslate,i=this.progress,s=e.dragSize,a=e.trackSize,r=e.$dragEl,n=e.$el,o=this.params.scrollbar,l=s,h=(a-s)*i;t?(h=-h)>0?(l=s-h,h=0):-h+s>a&&(l=a+h):h<0?(l=s+h,h=0):h+s>a&&(l=a-h),this.isHorizontal()?(d.transforms3d?r.transform("translate3d("+h+"px, 0, 0)"):r.transform("translateX("+h+"px)"),r[0].style.width=l+"px"):(d.transforms3d?r.transform("translate3d(0px, "+h+"px, 0)"):r.transform("translateY("+h+"px)"),r[0].style.height=l+"px"),o.hide&&(clearTimeout(this.scrollbar.timeout),n[0].style.opacity=1,this.scrollbar.timeout=setTimeout(function(){n[0].style.opacity=0,n.transition(400)},1e3))}},setTransition:function(e){this.params.scrollbar.el&&this.scrollbar.el&&this.scrollbar.$dragEl.transition(e)},updateSize:function(){if(this.params.scrollbar.el&&this.scrollbar.el){var e=this.scrollbar,t=e.$dragEl,i=e.$el;t[0].style.width="",t[0].style.height="";var s,a=this.isHorizontal()?i[0].offsetWidth:i[0].offsetHeight,r=this.size/this.virtualSize,n=r*(a/this.size);s="auto"===this.params.scrollbar.dragSize?a*r:parseInt(this.params.scrollbar.dragSize,10),this.isHorizontal()?t[0].style.width=s+"px":t[0].style.height=s+"px",i[0].style.display=r>=1?"none":"",this.params.scrollbarHide&&(i[0].style.opacity=0),l.extend(e,{trackSize:a,divider:r,moveDivider:n,dragSize:s}),e.$el[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](this.params.scrollbar.lockClass)}},setDragPosition:function(e){var t,i,s=this.scrollbar,a=this.rtlTranslate,r=s.$el,n=s.dragSize,o=s.trackSize;t=this.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageX:e.pageX||e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageY:e.pageY||e.clientY,i=(t-r.offset()[this.isHorizontal()?"left":"top"]-n/2)/(o-n),i=Math.max(Math.min(i,1),0),a&&(i=1-i);var l=this.minTranslate()+(this.maxTranslate()-this.minTranslate())*i;this.updateProgress(l),this.setTranslate(l),this.updateActiveIndex(),this.updateSlidesClasses()},onDragStart:function(e){var t=this.params.scrollbar,i=this.scrollbar,s=this.$wrapperEl,a=i.$el,r=i.$dragEl;this.scrollbar.isTouched=!0,e.preventDefault(),e.stopPropagation(),s.transition(100),r.transition(100),i.setDragPosition(e),clearTimeout(this.scrollbar.dragTimeout),a.transition(0),t.hide&&a.css("opacity",1),this.emit("scrollbarDragStart",e)},onDragMove:function(e){var t=this.scrollbar,i=this.$wrapperEl,s=t.$el,a=t.$dragEl;this.scrollbar.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,t.setDragPosition(e),i.transition(0),s.transition(0),a.transition(0),this.emit("scrollbarDragMove",e))},onDragEnd:function(e){var t=this.params.scrollbar,i=this.scrollbar,s=i.$el;this.scrollbar.isTouched&&(this.scrollbar.isTouched=!1,t.hide&&(clearTimeout(this.scrollbar.dragTimeout),this.scrollbar.dragTimeout=l.nextTick(function(){s.css("opacity",0),s.transition(400)},1e3)),this.emit("scrollbarDragEnd",e),t.snapOnRelease&&this.slideToClosest())},enableDraggable:function(){if(this.params.scrollbar.el){var t=this.scrollbar,i=this.touchEventsTouch,s=this.touchEventsDesktop,a=this.params,r=t.$el,n=r[0],o=!(!d.passiveListener||!a.passiveListeners)&&{passive:!1,capture:!1},l=!(!d.passiveListener||!a.passiveListeners)&&{passive:!0,capture:!1};d.touch?(n.addEventListener(i.start,this.scrollbar.onDragStart,o),n.addEventListener(i.move,this.scrollbar.onDragMove,o),n.addEventListener(i.end,this.scrollbar.onDragEnd,l)):(n.addEventListener(s.start,this.scrollbar.onDragStart,o),e.addEventListener(s.move,this.scrollbar.onDragMove,o),e.addEventListener(s.end,this.scrollbar.onDragEnd,l))}},disableDraggable:function(){if(this.params.scrollbar.el){var t=this.scrollbar,i=this.touchEventsTouch,s=this.touchEventsDesktop,a=this.params,r=t.$el,n=r[0],o=!(!d.passiveListener||!a.passiveListeners)&&{passive:!1,capture:!1},l=!(!d.passiveListener||!a.passiveListeners)&&{passive:!0,capture:!1};d.touch?(n.removeEventListener(i.start,this.scrollbar.onDragStart,o),n.removeEventListener(i.move,this.scrollbar.onDragMove,o),n.removeEventListener(i.end,this.scrollbar.onDragEnd,l)):(n.removeEventListener(s.start,this.scrollbar.onDragStart,o),e.removeEventListener(s.move,this.scrollbar.onDragMove,o),e.removeEventListener(s.end,this.scrollbar.onDragEnd,l))}},init:function(){if(this.params.scrollbar.el){var e=this.scrollbar,t=this.$el,i=this.params.scrollbar,a=s(i.el);this.params.uniqueNavElements&&"string"==typeof i.el&&a.length>1&&1===t.find(i.el).length&&(a=t.find(i.el));var r=a.find("."+this.params.scrollbar.dragClass);0===r.length&&(r=s('<div class="'+this.params.scrollbar.dragClass+'"></div>'),a.append(r)),l.extend(e,{$el:a,el:a[0],$dragEl:r,dragEl:r[0]}),i.draggable&&e.enableDraggable()}},destroy:function(){this.scrollbar.disableDraggable()}},F={setTransform:function(e,t){var i=this.rtl,a=s(e),r=i?-1:1,n=a.attr("data-swiper-parallax")||"0",o=a.attr("data-swiper-parallax-x"),l=a.attr("data-swiper-parallax-y"),d=a.attr("data-swiper-parallax-scale"),h=a.attr("data-swiper-parallax-opacity");if(o||l?(o=o||"0",l=l||"0"):this.isHorizontal()?(o=n,l="0"):(l=n,o="0"),o=o.indexOf("%")>=0?parseInt(o,10)*t*r+"%":o*t*r+"px",l=l.indexOf("%")>=0?parseInt(l,10)*t+"%":l*t+"px",null!=h){var p=h-(h-1)*(1-Math.abs(t));a[0].style.opacity=p}if(null==d)a.transform("translate3d("+o+", "+l+", 0px)");else{var c=d-(d-1)*(1-Math.abs(t));a.transform("translate3d("+o+", "+l+", 0px) scale("+c+")")}},setTranslate:function(){var e=this,t=e.$el,i=e.slides,a=e.progress,r=e.snapGrid;t.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(t,i){e.parallax.setTransform(i,a)}),i.each(function(t,i){var n=i.progress;e.params.slidesPerGroup>1&&"auto"!==e.params.slidesPerView&&(n+=Math.ceil(t/2)-a*(r.length-1)),n=Math.min(Math.max(n,-1),1),s(i).find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(t,i){e.parallax.setTransform(i,n)})})},setTransition:function(e){void 0===e&&(e=this.params.speed);var t=this.$el;t.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(t,i){var a=s(i),r=parseInt(a.attr("data-swiper-parallax-duration"),10)||e;0===e&&(r=0),a.transition(r)})}},R={getDistanceBetweenTouches:function(e){if(e.targetTouches.length<2)return 1;var t=e.targetTouches[0].pageX,i=e.targetTouches[0].pageY,s=e.targetTouches[1].pageX,a=e.targetTouches[1].pageY,r=Math.sqrt(Math.pow(s-t,2)+Math.pow(a-i,2));return r},onGestureStart:function(e){var t=this.params.zoom,i=this.zoom,a=i.gesture;if(i.fakeGestureTouched=!1,i.fakeGestureMoved=!1,!d.gestures){if("touchstart"!==e.type||"touchstart"===e.type&&e.targetTouches.length<2)return;i.fakeGestureTouched=!0,a.scaleStart=R.getDistanceBetweenTouches(e)}a.$slideEl&&a.$slideEl.length||(a.$slideEl=s(e.target).closest(".swiper-slide"),0===a.$slideEl.length&&(a.$slideEl=this.slides.eq(this.activeIndex)),a.$imageEl=a.$slideEl.find("img, svg, canvas"),a.$imageWrapEl=a.$imageEl.parent("."+t.containerClass),a.maxRatio=a.$imageWrapEl.attr("data-swiper-zoom")||t.maxRatio,0!==a.$imageWrapEl.length)?(a.$imageEl.transition(0),this.zoom.isScaling=!0):a.$imageEl=void 0},onGestureChange:function(e){var t=this.params.zoom,i=this.zoom,s=i.gesture;if(!d.gestures){if("touchmove"!==e.type||"touchmove"===e.type&&e.targetTouches.length<2)return;i.fakeGestureMoved=!0,s.scaleMove=R.getDistanceBetweenTouches(e)}s.$imageEl&&0!==s.$imageEl.length&&(d.gestures?i.scale=e.scale*i.currentScale:i.scale=s.scaleMove/s.scaleStart*i.currentScale,i.scale>s.maxRatio&&(i.scale=s.maxRatio-1+Math.pow(i.scale-s.maxRatio+1,.5)),i.scale<t.minRatio&&(i.scale=t.minRatio+1-Math.pow(t.minRatio-i.scale+1,.5)),s.$imageEl.transform("translate3d(0,0,0) scale("+i.scale+")"))},onGestureEnd:function(e){var t=this.params.zoom,i=this.zoom,s=i.gesture;if(!d.gestures){if(!i.fakeGestureTouched||!i.fakeGestureMoved)return;if("touchend"!==e.type||"touchend"===e.type&&e.changedTouches.length<2&&!w.android)return;i.fakeGestureTouched=!1,i.fakeGestureMoved=!1}s.$imageEl&&0!==s.$imageEl.length&&(i.scale=Math.max(Math.min(i.scale,s.maxRatio),t.minRatio),s.$imageEl.transition(this.params.speed).transform("translate3d(0,0,0) scale("+i.scale+")"),i.currentScale=i.scale,i.isScaling=!1,1===i.scale&&(s.$slideEl=void 0))},onTouchStart:function(e){var t=this.zoom,i=t.gesture,s=t.image;i.$imageEl&&0!==i.$imageEl.length&&(s.isTouched||(w.android&&e.preventDefault(),s.isTouched=!0,s.touchesStart.x="touchstart"===e.type?e.targetTouches[0].pageX:e.pageX,s.touchesStart.y="touchstart"===e.type?e.targetTouches[0].pageY:e.pageY))},onTouchMove:function(e){var t=this.zoom,i=t.gesture,s=t.image,a=t.velocity;if(i.$imageEl&&0!==i.$imageEl.length&&(this.allowClick=!1,s.isTouched&&i.$slideEl)){s.isMoved||(s.width=i.$imageEl[0].offsetWidth,s.height=i.$imageEl[0].offsetHeight,s.startX=l.getTranslate(i.$imageWrapEl[0],"x")||0,s.startY=l.getTranslate(i.$imageWrapEl[0],"y")||0,i.slideWidth=i.$slideEl[0].offsetWidth,i.slideHeight=i.$slideEl[0].offsetHeight,i.$imageWrapEl.transition(0),this.rtl&&(s.startX=-s.startX,s.startY=-s.startY));var r=s.width*t.scale,n=s.height*t.scale;if(!(r<i.slideWidth&&n<i.slideHeight)){if(s.minX=Math.min(i.slideWidth/2-r/2,0),s.maxX=-s.minX,s.minY=Math.min(i.slideHeight/2-n/2,0),s.maxY=-s.minY,s.touchesCurrent.x="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,s.touchesCurrent.y="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,!s.isMoved&&!t.isScaling){if(this.isHorizontal()&&(Math.floor(s.minX)===Math.floor(s.startX)&&s.touchesCurrent.x<s.touchesStart.x||Math.floor(s.maxX)===Math.floor(s.startX)&&s.touchesCurrent.x>s.touchesStart.x))return void(s.isTouched=!1);if(!this.isHorizontal()&&(Math.floor(s.minY)===Math.floor(s.startY)&&s.touchesCurrent.y<s.touchesStart.y||Math.floor(s.maxY)===Math.floor(s.startY)&&s.touchesCurrent.y>s.touchesStart.y))return void(s.isTouched=!1)}e.preventDefault(),e.stopPropagation(),s.isMoved=!0,s.currentX=s.touchesCurrent.x-s.touchesStart.x+s.startX,s.currentY=s.touchesCurrent.y-s.touchesStart.y+s.startY,s.currentX<s.minX&&(s.currentX=s.minX+1-Math.pow(s.minX-s.currentX+1,.8)),s.currentX>s.maxX&&(s.currentX=s.maxX-1+Math.pow(s.currentX-s.maxX+1,.8)),s.currentY<s.minY&&(s.currentY=s.minY+1-Math.pow(s.minY-s.currentY+1,.8)),s.currentY>s.maxY&&(s.currentY=s.maxY-1+Math.pow(s.currentY-s.maxY+1,.8)),a.prevPositionX||(a.prevPositionX=s.touchesCurrent.x),a.prevPositionY||(a.prevPositionY=s.touchesCurrent.y),a.prevTime||(a.prevTime=Date.now()),a.x=(s.touchesCurrent.x-a.prevPositionX)/(Date.now()-a.prevTime)/2,a.y=(s.touchesCurrent.y-a.prevPositionY)/(Date.now()-a.prevTime)/2,Math.abs(s.touchesCurrent.x-a.prevPositionX)<2&&(a.x=0),Math.abs(s.touchesCurrent.y-a.prevPositionY)<2&&(a.y=0),a.prevPositionX=s.touchesCurrent.x,a.prevPositionY=s.touchesCurrent.y,a.prevTime=Date.now(),i.$imageWrapEl.transform("translate3d("+s.currentX+"px, "+s.currentY+"px,0)")}}},onTouchEnd:function(){var e=this.zoom,t=e.gesture,i=e.image,s=e.velocity;if(t.$imageEl&&0!==t.$imageEl.length){if(!i.isTouched||!i.isMoved)return i.isTouched=!1,void(i.isMoved=!1);i.isTouched=!1,i.isMoved=!1;var a=300,r=300,n=s.x*a,o=i.currentX+n,l=s.y*r,d=i.currentY+l;0!==s.x&&(a=Math.abs((o-i.currentX)/s.x)),0!==s.y&&(r=Math.abs((d-i.currentY)/s.y));var h=Math.max(a,r);i.currentX=o,i.currentY=d;var p=i.width*e.scale,c=i.height*e.scale;i.minX=Math.min(t.slideWidth/2-p/2,0),i.maxX=-i.minX,i.minY=Math.min(t.slideHeight/2-c/2,0),i.maxY=-i.minY,i.currentX=Math.max(Math.min(i.currentX,i.maxX),i.minX),i.currentY=Math.max(Math.min(i.currentY,i.maxY),i.minY),t.$imageWrapEl.transition(h).transform("translate3d("+i.currentX+"px, "+i.currentY+"px,0)")}},onTransitionEnd:function(){var e=this.zoom,t=e.gesture;t.$slideEl&&this.previousIndex!==this.activeIndex&&(t.$imageEl.transform("translate3d(0,0,0) scale(1)"),t.$imageWrapEl.transform("translate3d(0,0,0)"),e.scale=1,e.currentScale=1,t.$slideEl=void 0,t.$imageEl=void 0,t.$imageWrapEl=void 0)},toggle:function(e){var t=this.zoom;t.scale&&1!==t.scale?t.out():t.in(e)},in:function(e){var t,i,a,r,n,o,l,d,h,p,c,u,v,f,m,g,b,w,y=this.zoom,x=this.params.zoom,T=y.gesture,E=y.image;T.$slideEl||(T.$slideEl=this.clickedSlide?s(this.clickedSlide):this.slides.eq(this.activeIndex),T.$imageEl=T.$slideEl.find("img, svg, canvas"),T.$imageWrapEl=T.$imageEl.parent("."+x.containerClass)),T.$imageEl&&0!==T.$imageEl.length&&(T.$slideEl.addClass(""+x.zoomedSlideClass),void 0===E.touchesStart.x&&e?(t="touchend"===e.type?e.changedTouches[0].pageX:e.pageX,i="touchend"===e.type?e.changedTouches[0].pageY:e.pageY):(t=E.touchesStart.x,i=E.touchesStart.y),y.scale=T.$imageWrapEl.attr("data-swiper-zoom")||x.maxRatio,y.currentScale=T.$imageWrapEl.attr("data-swiper-zoom")||x.maxRatio,e?(b=T.$slideEl[0].offsetWidth,w=T.$slideEl[0].offsetHeight,a=T.$slideEl.offset().left,r=T.$slideEl.offset().top,n=a+b/2-t,o=r+w/2-i,h=T.$imageEl[0].offsetWidth,p=T.$imageEl[0].offsetHeight,c=h*y.scale,u=p*y.scale,v=Math.min(b/2-c/2,0),f=Math.min(w/2-u/2,0),m=-v,g=-f,l=n*y.scale,d=o*y.scale,l<v&&(l=v),l>m&&(l=m),d<f&&(d=f),d>g&&(d=g)):(l=0,d=0),T.$imageWrapEl.transition(300).transform("translate3d("+l+"px, "+d+"px,0)"),T.$imageEl.transition(300).transform("translate3d(0,0,0) scale("+y.scale+")"))},out:function(){var e=this.zoom,t=this.params.zoom,i=e.gesture;i.$slideEl||(i.$slideEl=this.clickedSlide?s(this.clickedSlide):this.slides.eq(this.activeIndex),i.$imageEl=i.$slideEl.find("img, svg, canvas"),i.$imageWrapEl=i.$imageEl.parent("."+t.containerClass)),i.$imageEl&&0!==i.$imageEl.length&&(e.scale=1,e.currentScale=1,i.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"),i.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"),i.$slideEl.removeClass(""+t.zoomedSlideClass),i.$slideEl=void 0)},enable:function(){var e=this.zoom;if(!e.enabled){e.enabled=!0;var t=!("touchstart"!==this.touchEvents.start||!d.passiveListener||!this.params.passiveListeners)&&{passive:!0,capture:!1};d.gestures?(this.$wrapperEl.on("gesturestart",".swiper-slide",e.onGestureStart,t),this.$wrapperEl.on("gesturechange",".swiper-slide",e.onGestureChange,t),this.$wrapperEl.on("gestureend",".swiper-slide",e.onGestureEnd,t)):"touchstart"===this.touchEvents.start&&(this.$wrapperEl.on(this.touchEvents.start,".swiper-slide",e.onGestureStart,t),this.$wrapperEl.on(this.touchEvents.move,".swiper-slide",e.onGestureChange,t),this.$wrapperEl.on(this.touchEvents.end,".swiper-slide",e.onGestureEnd,t)),this.$wrapperEl.on(this.touchEvents.move,"."+this.params.zoom.containerClass,e.onTouchMove)}},disable:function(){var e=this.zoom;if(e.enabled){this.zoom.enabled=!1;var t=!("touchstart"!==this.touchEvents.start||!d.passiveListener||!this.params.passiveListeners)&&{passive:!0,capture:!1};d.gestures?(this.$wrapperEl.off("gesturestart",".swiper-slide",e.onGestureStart,t),this.$wrapperEl.off("gesturechange",".swiper-slide",e.onGestureChange,t),this.$wrapperEl.off("gestureend",".swiper-slide",e.onGestureEnd,t)):"touchstart"===this.touchEvents.start&&(this.$wrapperEl.off(this.touchEvents.start,".swiper-slide",e.onGestureStart,t),this.$wrapperEl.off(this.touchEvents.move,".swiper-slide",e.onGestureChange,t),this.$wrapperEl.off(this.touchEvents.end,".swiper-slide",e.onGestureEnd,t)),this.$wrapperEl.off(this.touchEvents.move,"."+this.params.zoom.containerClass,e.onTouchMove)}}},q={loadInSlide:function(e,t){void 0===t&&(t=!0);var i=this,a=i.params.lazy;if(void 0!==e&&0!==i.slides.length){var r=i.virtual&&i.params.virtual.enabled,n=r?i.$wrapperEl.children("."+i.params.slideClass+'[data-swiper-slide-index="'+e+'"]'):i.slides.eq(e),o=n.find("."+a.elementClass+":not(."+a.loadedClass+"):not(."+a.loadingClass+")");!n.hasClass(a.elementClass)||n.hasClass(a.loadedClass)||n.hasClass(a.loadingClass)||(o=o.add(n[0])),0!==o.length&&o.each(function(e,r){var o=s(r);o.addClass(a.loadingClass);var l=o.attr("data-background"),d=o.attr("data-src"),h=o.attr("data-srcset"),p=o.attr("data-sizes");i.loadImage(o[0],d||l,h,p,!1,function(){if(null!=i&&i&&(!i||i.params)&&!i.destroyed){if(l?(o.css("background-image",'url("'+l+'")'),o.removeAttr("data-background")):(h&&(o.attr("srcset",h),o.removeAttr("data-srcset")),p&&(o.attr("sizes",p),o.removeAttr("data-sizes")),d&&(o.attr("src",d),o.removeAttr("data-src"))),o.addClass(a.loadedClass).removeClass(a.loadingClass),n.find("."+a.preloaderClass).remove(),i.params.loop&&t){var e=n.attr("data-swiper-slide-index");if(n.hasClass(i.params.slideDuplicateClass)){var s=i.$wrapperEl.children('[data-swiper-slide-index="'+e+'"]:not(.'+i.params.slideDuplicateClass+")");i.lazy.loadInSlide(s.index(),!1)}else{var r=i.$wrapperEl.children("."+i.params.slideDuplicateClass+'[data-swiper-slide-index="'+e+'"]');i.lazy.loadInSlide(r.index(),!1)}}i.emit("lazyImageReady",n[0],o[0])}}),i.emit("lazyImageLoad",n[0],o[0])})}},load:function(){var e=this,t=e.$wrapperEl,i=e.params,a=e.slides,r=e.activeIndex,n=e.virtual&&i.virtual.enabled,o=i.lazy,l=i.slidesPerView;function d(e){if(n){if(t.children("."+i.slideClass+'[data-swiper-slide-index="'+e+'"]').length)return!0}else if(a[e])return!0;return!1}function h(e){return n?s(e).attr("data-swiper-slide-index"):s(e).index()}if("auto"===l&&(l=0),e.lazy.initialImageLoaded||(e.lazy.initialImageLoaded=!0),e.params.watchSlidesVisibility)t.children("."+i.slideVisibleClass).each(function(t,i){var a=n?s(i).attr("data-swiper-slide-index"):s(i).index();e.lazy.loadInSlide(a)});else if(l>1)for(var p=r;p<r+l;p+=1)d(p)&&e.lazy.loadInSlide(p);else e.lazy.loadInSlide(r);if(o.loadPrevNext)if(l>1||o.loadPrevNextAmount&&o.loadPrevNextAmount>1){for(var c=o.loadPrevNextAmount,u=l,v=Math.min(r+u+Math.max(c,u),a.length),f=Math.max(r-Math.max(u,c),0),m=r+l;m<v;m+=1)d(m)&&e.lazy.loadInSlide(m);for(var g=f;g<r;g+=1)d(g)&&e.lazy.loadInSlide(g)}else{var b=t.children("."+i.slideNextClass);b.length>0&&e.lazy.loadInSlide(h(b));var w=t.children("."+i.slidePrevClass);w.length>0&&e.lazy.loadInSlide(h(w))}}},W={LinearSpline:function(e,t){var i,s,a,r,n,o=function(e,t){for(s=-1,i=e.length;i-s>1;)e[a=i+s>>1]<=t?s=a:i=a;return i};return this.x=e,this.y=t,this.lastIndex=e.length-1,this.interpolate=function(e){return e?(n=o(this.x,e),r=n-1,(e-this.x[r])*(this.y[n]-this.y[r])/(this.x[n]-this.x[r])+this.y[r]):0},this},getInterpolateFunction:function(e){this.controller.spline||(this.controller.spline=this.params.loop?new W.LinearSpline(this.slidesGrid,e.slidesGrid):new W.LinearSpline(this.snapGrid,e.snapGrid))},setTranslate:function(e,t){var i,s,a=this,r=a.controller.control;function n(e){var t=a.rtlTranslate?-a.translate:a.translate;"slide"===a.params.controller.by&&(a.controller.getInterpolateFunction(e),s=-a.controller.spline.interpolate(-t)),s&&"container"!==a.params.controller.by||(i=(e.maxTranslate()-e.minTranslate())/(a.maxTranslate()-a.minTranslate()),s=(t-a.minTranslate())*i+e.minTranslate()),a.params.controller.inverse&&(s=e.maxTranslate()-s),e.updateProgress(s),e.setTranslate(s,a),e.updateActiveIndex(),e.updateSlidesClasses()}if(Array.isArray(r))for(var o=0;o<r.length;o+=1)r[o]!==t&&r[o]instanceof P&&n(r[o]);else r instanceof P&&t!==r&&n(r)},setTransition:function(e,t){var i,s=this,a=s.controller.control;function r(t){t.setTransition(e,s),0!==e&&(t.transitionStart(),t.params.autoHeight&&l.nextTick(function(){t.updateAutoHeight()}),t.$wrapperEl.transitionEnd(function(){a&&(t.params.loop&&"slide"===s.params.controller.by&&t.loopFix(),t.transitionEnd())}))}if(Array.isArray(a))for(i=0;i<a.length;i+=1)a[i]!==t&&a[i]instanceof P&&r(a[i]);else a instanceof P&&t!==a&&r(a)}},j={name:"controller",params:{controller:{control:void 0,inverse:!1,by:"slide"}},create:function(){l.extend(this,{controller:{control:this.params.controller.control,getInterpolateFunction:W.getInterpolateFunction.bind(this),setTranslate:W.setTranslate.bind(this),setTransition:W.setTransition.bind(this)}})},on:{update:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},resize:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},observerUpdate:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},setTranslate:function(e,t){this.controller.control&&this.controller.setTranslate(e,t)},setTransition:function(e,t){this.controller.control&&this.controller.setTransition(e,t)}}},U={makeElFocusable:function(e){return e.attr("tabIndex","0"),e},addElRole:function(e,t){return e.attr("role",t),e},addElLabel:function(e,t){return e.attr("aria-label",t),e},disableEl:function(e){return e.attr("aria-disabled",!0),e},enableEl:function(e){return e.attr("aria-disabled",!1),e},onEnterKey:function(e){var t=this.params.a11y;if(13===e.keyCode){var i=s(e.target);this.navigation&&this.navigation.$nextEl&&i.is(this.navigation.$nextEl)&&(this.isEnd&&!this.params.loop||this.slideNext(),this.isEnd?this.a11y.notify(t.lastSlideMessage):this.a11y.notify(t.nextSlideMessage)),this.navigation&&this.navigation.$prevEl&&i.is(this.navigation.$prevEl)&&(this.isBeginning&&!this.params.loop||this.slidePrev(),this.isBeginning?this.a11y.notify(t.firstSlideMessage):this.a11y.notify(t.prevSlideMessage)),this.pagination&&i.is("."+this.params.pagination.bulletClass)&&i[0].click()}},notify:function(e){var t=this.a11y.liveRegion;0!==t.length&&(t.html(""),t.html(e))},updateNavigation:function(){if(!this.params.loop){var e=this.navigation,t=e.$nextEl,i=e.$prevEl;i&&i.length>0&&(this.isBeginning?this.a11y.disableEl(i):this.a11y.enableEl(i)),t&&t.length>0&&(this.isEnd?this.a11y.disableEl(t):this.a11y.enableEl(t))}},updatePagination:function(){var e=this,t=e.params.a11y;e.pagination&&e.params.pagination.clickable&&e.pagination.bullets&&e.pagination.bullets.length&&e.pagination.bullets.each(function(i,a){var r=s(a);e.a11y.makeElFocusable(r),e.a11y.addElRole(r,"button"),e.a11y.addElLabel(r,t.paginationBulletMessage.replace(/{{index}}/,r.index()+1))})},init:function(){this.$el.append(this.a11y.liveRegion);var e,t,i=this.params.a11y;this.navigation&&this.navigation.$nextEl&&(e=this.navigation.$nextEl),this.navigation&&this.navigation.$prevEl&&(t=this.navigation.$prevEl),e&&(this.a11y.makeElFocusable(e),this.a11y.addElRole(e,"button"),this.a11y.addElLabel(e,i.nextSlideMessage),e.on("keydown",this.a11y.onEnterKey)),t&&(this.a11y.makeElFocusable(t),this.a11y.addElRole(t,"button"),this.a11y.addElLabel(t,i.prevSlideMessage),t.on("keydown",this.a11y.onEnterKey)),this.pagination&&this.params.pagination.clickable&&this.pagination.bullets&&this.pagination.bullets.length&&this.pagination.$el.on("keydown","."+this.params.pagination.bulletClass,this.a11y.onEnterKey)},destroy:function(){var e,t;this.a11y.liveRegion&&this.a11y.liveRegion.length>0&&this.a11y.liveRegion.remove(),this.navigation&&this.navigation.$nextEl&&(e=this.navigation.$nextEl),this.navigation&&this.navigation.$prevEl&&(t=this.navigation.$prevEl),e&&e.off("keydown",this.a11y.onEnterKey),t&&t.off("keydown",this.a11y.onEnterKey),this.pagination&&this.params.pagination.clickable&&this.pagination.bullets&&this.pagination.bullets.length&&this.pagination.$el.off("keydown","."+this.params.pagination.bulletClass,this.a11y.onEnterKey)}},K={init:function(){if(this.params.history){if(!t.history||!t.history.pushState)return this.params.history.enabled=!1,void(this.params.hashNavigation.enabled=!0);var e=this.history;e.initialized=!0,e.paths=K.getPathValues(),(e.paths.key||e.paths.value)&&(e.scrollToSlide(0,e.paths.value,this.params.runCallbacksOnInit),this.params.history.replaceState||t.addEventListener("popstate",this.history.setHistoryPopState))}},destroy:function(){this.params.history.replaceState||t.removeEventListener("popstate",this.history.setHistoryPopState)},setHistoryPopState:function(){this.history.paths=K.getPathValues(),this.history.scrollToSlide(this.params.speed,this.history.paths.value,!1)},getPathValues:function(){var e=t.location.pathname.slice(1).split("/").filter(function(e){return""!==e}),i=e.length,s=e[i-2],a=e[i-1];return{key:s,value:a}},setHistory:function(e,i){if(this.history.initialized&&this.params.history.enabled){var s=this.slides.eq(i),a=K.slugify(s.attr("data-history"));t.location.pathname.includes(e)||(a=e+"/"+a);var r=t.history.state;r&&r.value===a||(this.params.history.replaceState?t.history.replaceState({value:a},null,a):t.history.pushState({value:a},null,a))}},slugify:function(e){return e.toString().toLowerCase().replace(/\s+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,"")},scrollToSlide:function(e,t,i){if(t)for(var s=0,a=this.slides.length;s<a;s+=1){var r=this.slides.eq(s),n=K.slugify(r.attr("data-history"));if(n===t&&!r.hasClass(this.params.slideDuplicateClass)){var o=r.index();this.slideTo(o,e,i)}}else this.slideTo(0,e,i)}},_={onHashCange:function(){var t=e.location.hash.replace("#",""),i=this.slides.eq(this.activeIndex).attr("data-hash");if(t!==i){var s=this.$wrapperEl.children("."+this.params.slideClass+'[data-hash="'+t+'"]').index();if(void 0===s)return;this.slideTo(s)}},setHash:function(){if(this.hashNavigation.initialized&&this.params.hashNavigation.enabled)if(this.params.hashNavigation.replaceState&&t.history&&t.history.replaceState)t.history.replaceState(null,null,"#"+this.slides.eq(this.activeIndex).attr("data-hash")||!1);else{var i=this.slides.eq(this.activeIndex),s=i.attr("data-hash")||i.attr("data-history");e.location.hash=s||""}},init:function(){if(!(!this.params.hashNavigation.enabled||this.params.history&&this.params.history.enabled)){this.hashNavigation.initialized=!0;var i=e.location.hash.replace("#","");if(i)for(var a=0,r=this.slides.length;a<r;a+=1){var n=this.slides.eq(a),o=n.attr("data-hash")||n.attr("data-history");if(o===i&&!n.hasClass(this.params.slideDuplicateClass)){var l=n.index();this.slideTo(l,0,this.params.runCallbacksOnInit,!0)}}this.params.hashNavigation.watchState&&s(t).on("hashchange",this.hashNavigation.onHashCange)}},destroy:function(){this.params.hashNavigation.watchState&&s(t).off("hashchange",this.hashNavigation.onHashCange)}},J={run:function(){var e=this,t=e.slides.eq(e.activeIndex),i=e.params.autoplay.delay;t.attr("data-swiper-autoplay")&&(i=t.attr("data-swiper-autoplay")||e.params.autoplay.delay),e.autoplay.timeout=l.nextTick(function(){e.params.autoplay.reverseDirection?e.params.loop?(e.loopFix(),e.slidePrev(e.params.speed,!0,!0),e.emit("autoplay")):e.isBeginning?e.params.autoplay.stopOnLastSlide?e.autoplay.stop():(e.slideTo(e.slides.length-1,e.params.speed,!0,!0),e.emit("autoplay")):(e.slidePrev(e.params.speed,!0,!0),e.emit("autoplay")):e.params.loop?(e.loopFix(),e.slideNext(e.params.speed,!0,!0),e.emit("autoplay")):e.isEnd?e.params.autoplay.stopOnLastSlide?e.autoplay.stop():(e.slideTo(0,e.params.speed,!0,!0),e.emit("autoplay")):(e.slideNext(e.params.speed,!0,!0),e.emit("autoplay"))},i)},start:function(){return void 0===this.autoplay.timeout&&!this.autoplay.running&&(this.autoplay.running=!0,this.emit("autoplayStart"),this.autoplay.run(),!0)},stop:function(){return!!this.autoplay.running&&void 0!==this.autoplay.timeout&&(this.autoplay.timeout&&(clearTimeout(this.autoplay.timeout),this.autoplay.timeout=void 0),this.autoplay.running=!1,this.emit("autoplayStop"),!0)},pause:function(e){this.autoplay.running&&(this.autoplay.paused||(this.autoplay.timeout&&clearTimeout(this.autoplay.timeout),this.autoplay.paused=!0,0!==e&&this.params.autoplay.waitForTransition?(this.$wrapperEl[0].addEventListener("transitionend",this.autoplay.onTransitionEnd),this.$wrapperEl[0].addEventListener("webkitTransitionEnd",this.autoplay.onTransitionEnd)):(this.autoplay.paused=!1,this.autoplay.run())))}},Z={setTranslate:function(){for(var e=this.slides,t=0;t<e.length;t+=1){var i=this.slides.eq(t),s=i[0].swiperSlideOffset,a=-s;this.params.virtualTranslate||(a-=this.translate);var r=0;this.isHorizontal()||(r=a,a=0);var n=this.params.fadeEffect.crossFade?Math.max(1-Math.abs(i[0].progress),0):1+Math.min(Math.max(i[0].progress,-1),0);i.css({opacity:n}).transform("translate3d("+a+"px, "+r+"px, 0px)")}},setTransition:function(e){var t=this,i=t.slides,s=t.$wrapperEl;if(i.transition(e),t.params.virtualTranslate&&0!==e){var a=!1;i.transitionEnd(function(){if(!a&&t&&!t.destroyed){a=!0,t.animating=!1;for(var e=["webkitTransitionEnd","transitionend"],i=0;i<e.length;i+=1)s.trigger(e[i])}})}}},Q={setTranslate:function(){var e,t=this.$el,i=this.$wrapperEl,a=this.slides,r=this.width,n=this.height,o=this.rtlTranslate,l=this.size,d=this.params.cubeEffect,h=this.isHorizontal(),p=this.virtual&&this.params.virtual.enabled,c=0;d.shadow&&(h?(0===(e=i.find(".swiper-cube-shadow")).length&&(e=s('<div class="swiper-cube-shadow"></div>'),i.append(e)),e.css({height:r+"px"})):0===(e=t.find(".swiper-cube-shadow")).length&&(e=s('<div class="swiper-cube-shadow"></div>'),t.append(e)));for(var u=0;u<a.length;u+=1){var v=a.eq(u),f=u;p&&(f=parseInt(v.attr("data-swiper-slide-index"),10));var m=90*f,g=Math.floor(m/360);o&&(m=-m,g=Math.floor(-m/360));var b=Math.max(Math.min(v[0].progress,1),-1),w=0,y=0,x=0;f%4==0?(w=4*-g*l,x=0):(f-1)%4==0?(w=0,x=4*-g*l):(f-2)%4==0?(w=l+4*g*l,x=l):(f-3)%4==0&&(w=-l,x=3*l+4*l*g),o&&(w=-w),h||(y=w,w=0);var T="rotateX("+(h?0:-m)+"deg) rotateY("+(h?m:0)+"deg) translate3d("+w+"px, "+y+"px, "+x+"px)";if(b<=1&&b>-1&&(c=90*f+90*b,o&&(c=90*-f-90*b)),v.transform(T),d.slideShadows){var E=h?v.find(".swiper-slide-shadow-left"):v.find(".swiper-slide-shadow-top"),C=h?v.find(".swiper-slide-shadow-right"):v.find(".swiper-slide-shadow-bottom");0===E.length&&(E=s('<div class="swiper-slide-shadow-'+(h?"left":"top")+'"></div>'),v.append(E)),0===C.length&&(C=s('<div class="swiper-slide-shadow-'+(h?"right":"bottom")+'"></div>'),v.append(C)),E.length&&(E[0].style.opacity=Math.max(-b,0)),C.length&&(C[0].style.opacity=Math.max(b,0))}}if(i.css({"-webkit-transform-origin":"50% 50% -"+l/2+"px","-moz-transform-origin":"50% 50% -"+l/2+"px","-ms-transform-origin":"50% 50% -"+l/2+"px","transform-origin":"50% 50% -"+l/2+"px"}),d.shadow)if(h)e.transform("translate3d(0px, "+(r/2+d.shadowOffset)+"px, "+-r/2+"px) rotateX(90deg) rotateZ(0deg) scale("+d.shadowScale+")");else{var M=Math.abs(c)-90*Math.floor(Math.abs(c)/90),k=1.5-(Math.sin(2*M*Math.PI/360)/2+Math.cos(2*M*Math.PI/360)/2),P=d.shadowScale,z=d.shadowScale/k,$=d.shadowOffset;e.transform("scale3d("+P+", 1, "+z+") translate3d(0px, "+(n/2+$)+"px, "+-n/2/z+"px) rotateX(-90deg)")}var L=S.isSafari||S.isUiWebView?-l/2:0;i.transform("translate3d(0px,0,"+L+"px) rotateX("+(this.isHorizontal()?0:c)+"deg) rotateY("+(this.isHorizontal()?-c:0)+"deg)")},setTransition:function(e){var t=this.$el,i=this.slides;i.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),this.params.cubeEffect.shadow&&!this.isHorizontal()&&t.find(".swiper-cube-shadow").transition(e)}},ee={setTranslate:function(){for(var e=this.slides,t=this.rtlTranslate,i=0;i<e.length;i+=1){var a=e.eq(i),r=a[0].progress;this.params.flipEffect.limitRotation&&(r=Math.max(Math.min(a[0].progress,1),-1));var n=a[0].swiperSlideOffset,o=-180*r,l=o,d=0,h=-n,p=0;if(this.isHorizontal()?t&&(l=-l):(p=h,h=0,d=-l,l=0),a[0].style.zIndex=-Math.abs(Math.round(r))+e.length,this.params.flipEffect.slideShadows){var c=this.isHorizontal()?a.find(".swiper-slide-shadow-left"):a.find(".swiper-slide-shadow-top"),u=this.isHorizontal()?a.find(".swiper-slide-shadow-right"):a.find(".swiper-slide-shadow-bottom");0===c.length&&(c=s('<div class="swiper-slide-shadow-'+(this.isHorizontal()?"left":"top")+'"></div>'),a.append(c)),0===u.length&&(u=s('<div class="swiper-slide-shadow-'+(this.isHorizontal()?"right":"bottom")+'"></div>'),a.append(u)),c.length&&(c[0].style.opacity=Math.max(-r,0)),u.length&&(u[0].style.opacity=Math.max(r,0))}a.transform("translate3d("+h+"px, "+p+"px, 0px) rotateX("+d+"deg) rotateY("+l+"deg)")}},setTransition:function(e){var t=this,i=t.slides,s=t.activeIndex,a=t.$wrapperEl;if(i.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),t.params.virtualTranslate&&0!==e){var r=!1;i.eq(s).transitionEnd(function(){if(!r&&t&&!t.destroyed){r=!0,t.animating=!1;for(var e=["webkitTransitionEnd","transitionend"],i=0;i<e.length;i+=1)a.trigger(e[i])}})}}},te={setTranslate:function(){for(var e=this.width,t=this.height,i=this.slides,a=this.$wrapperEl,r=this.slidesSizesGrid,n=this.params.coverflowEffect,o=this.isHorizontal(),l=this.translate,h=o?e/2-l:t/2-l,p=o?n.rotate:-n.rotate,c=n.depth,u=0,v=i.length;u<v;u+=1){var f=i.eq(u),m=r[u],g=f[0].swiperSlideOffset,b=(h-g-m/2)/m*n.modifier,w=o?p*b:0,y=o?0:p*b,x=-c*Math.abs(b),T=o?0:n.stretch*b,E=o?n.stretch*b:0;Math.abs(E)<.001&&(E=0),Math.abs(T)<.001&&(T=0),Math.abs(x)<.001&&(x=0),Math.abs(w)<.001&&(w=0),Math.abs(y)<.001&&(y=0);var S="translate3d("+E+"px,"+T+"px,"+x+"px) rotateX("+y+"deg) rotateY("+w+"deg)";if(f.transform(S),f[0].style.zIndex=1-Math.abs(Math.round(b)),n.slideShadows){var C=o?f.find(".swiper-slide-shadow-left"):f.find(".swiper-slide-shadow-top"),M=o?f.find(".swiper-slide-shadow-right"):f.find(".swiper-slide-shadow-bottom");0===C.length&&(C=s('<div class="swiper-slide-shadow-'+(o?"left":"top")+'"></div>'),f.append(C)),0===M.length&&(M=s('<div class="swiper-slide-shadow-'+(o?"right":"bottom")+'"></div>'),f.append(M)),C.length&&(C[0].style.opacity=b>0?b:0),M.length&&(M[0].style.opacity=-b>0?-b:0)}}if(d.pointerEvents||d.prefixedPointerEvents){var k=a[0].style;k.perspectiveOrigin=h+"px 50%"}},setTransition:function(e){this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}},ie={init:function(){var e=this.params,t=e.thumbs,i=this.constructor;t.swiper instanceof i?(this.thumbs.swiper=t.swiper,l.extend(this.thumbs.swiper.originalParams,{watchSlidesProgress:!0,slideToClickedSlide:!1}),l.extend(this.thumbs.swiper.params,{watchSlidesProgress:!0,slideToClickedSlide:!1})):l.isObject(t.swiper)&&(this.thumbs.swiper=new i(l.extend({},t.swiper,{watchSlidesVisibility:!0,watchSlidesProgress:!0,slideToClickedSlide:!1})),this.thumbs.swiperCreated=!0),this.thumbs.swiper.$el.addClass(this.params.thumbs.thumbsContainerClass),this.thumbs.swiper.on("tap",this.thumbs.onThumbClick)},onThumbClick:function(){var e=this.thumbs.swiper;if(e){var t=e.clickedIndex,i=e.clickedSlide;if(!(i&&s(i).hasClass(this.params.thumbs.slideThumbActiveClass)||null==t)){var a;if(a=e.params.loop?parseInt(s(e.clickedSlide).attr("data-swiper-slide-index"),10):t,this.params.loop){var r=this.activeIndex;this.slides.eq(r).hasClass(this.params.slideDuplicateClass)&&(this.loopFix(),this._clientLeft=this.$wrapperEl[0].clientLeft,r=this.activeIndex);var n=this.slides.eq(r).prevAll('[data-swiper-slide-index="'+a+'"]').eq(0).index(),o=this.slides.eq(r).nextAll('[data-swiper-slide-index="'+a+'"]').eq(0).index();a=void 0===n?o:void 0===o?n:o-r<r-n?o:n}this.slideTo(a)}}},update:function(e){var t=this.thumbs.swiper;if(t){var i="auto"===t.params.slidesPerView?t.slidesPerViewDynamic():t.params.slidesPerView;if(this.realIndex!==t.realIndex){var s,a=t.activeIndex;if(t.params.loop){t.slides.eq(a).hasClass(t.params.slideDuplicateClass)&&(t.loopFix(),t._clientLeft=t.$wrapperEl[0].clientLeft,a=t.activeIndex);var r=t.slides.eq(a).prevAll('[data-swiper-slide-index="'+this.realIndex+'"]').eq(0).index(),n=t.slides.eq(a).nextAll('[data-swiper-slide-index="'+this.realIndex+'"]').eq(0).index();s=void 0===r?n:void 0===n?r:n-a==a-r?a:n-a<a-r?n:r}else s=this.realIndex;t.visibleSlidesIndexes.indexOf(s)<0&&(t.params.centeredSlides?s=s>a?s-Math.floor(i/2)+1:s+Math.floor(i/2)-1:s>a&&(s=s-i+1),t.slideTo(s,e?0:void 0))}var o=1,l=this.params.thumbs.slideThumbActiveClass;if(this.params.slidesPerView>1&&!this.params.centeredSlides&&(o=this.params.slidesPerView),t.slides.removeClass(l),t.params.loop)for(var d=0;d<o;d+=1)t.$wrapperEl.children('[data-swiper-slide-index="'+(this.realIndex+d)+'"]').addClass(l);else for(var h=0;h<o;h+=1)t.slides.eq(this.realIndex+h).addClass(l)}}},se=[z,$,L,I,O,N,G,{name:"mousewheel",params:{mousewheel:{enabled:!1,releaseOnEdges:!1,invert:!1,forceToAxis:!1,sensitivity:1,eventsTarged:"container"}},create:function(){l.extend(this,{mousewheel:{enabled:!1,enable:B.enable.bind(this),disable:B.disable.bind(this),handle:B.handle.bind(this),handleMouseEnter:B.handleMouseEnter.bind(this),handleMouseLeave:B.handleMouseLeave.bind(this),lastScrollTime:l.now()}})},on:{init:function(){this.params.mousewheel.enabled&&this.mousewheel.enable()},destroy:function(){this.mousewheel.enabled&&this.mousewheel.disable()}}},{name:"navigation",params:{navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:"swiper-button-disabled",hiddenClass:"swiper-button-hidden",lockClass:"swiper-button-lock"}},create:function(){l.extend(this,{navigation:{init:X.init.bind(this),update:X.update.bind(this),destroy:X.destroy.bind(this),onNextClick:X.onNextClick.bind(this),onPrevClick:X.onPrevClick.bind(this)}})},on:{init:function(){this.navigation.init(),this.navigation.update()},toEdge:function(){this.navigation.update()},fromEdge:function(){this.navigation.update()},destroy:function(){this.navigation.destroy()},click:function(e){var t=this.navigation,i=t.$nextEl,a=t.$prevEl;!this.params.navigation.hideOnClick||s(e.target).is(a)||s(e.target).is(i)||(i&&i.toggleClass(this.params.navigation.hiddenClass),a&&a.toggleClass(this.params.navigation.hiddenClass))}}},{name:"pagination",params:{pagination:{el:null,bulletElement:"span",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,progressbarOpposite:!1,type:"bullets",dynamicBullets:!1,dynamicMainBullets:1,formatFractionCurrent:function(e){return e},formatFractionTotal:function(e){return e},bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",modifierClass:"swiper-pagination-",currentClass:"swiper-pagination-current",totalClass:"swiper-pagination-total",hiddenClass:"swiper-pagination-hidden",progressbarFillClass:"swiper-pagination-progressbar-fill",progressbarOppositeClass:"swiper-pagination-progressbar-opposite",clickableClass:"swiper-pagination-clickable",lockClass:"swiper-pagination-lock"}},create:function(){l.extend(this,{pagination:{init:Y.init.bind(this),render:Y.render.bind(this),update:Y.update.bind(this),destroy:Y.destroy.bind(this),dynamicBulletIndex:0}})},on:{init:function(){this.pagination.init(),this.pagination.render(),this.pagination.update()},activeIndexChange:function(){this.params.loop?this.pagination.update():void 0===this.snapIndex&&this.pagination.update()},snapIndexChange:function(){this.params.loop||this.pagination.update()},slidesLengthChange:function(){this.params.loop&&(this.pagination.render(),this.pagination.update())},snapGridLengthChange:function(){this.params.loop||(this.pagination.render(),this.pagination.update())},destroy:function(){this.pagination.destroy()},click:function(e){this.params.pagination.el&&this.params.pagination.hideOnClick&&this.pagination.$el.length>0&&!s(e.target).hasClass(this.params.pagination.bulletClass)&&this.pagination.$el.toggleClass(this.params.pagination.hiddenClass)}}},{name:"scrollbar",params:{scrollbar:{el:null,dragSize:"auto",hide:!1,draggable:!1,snapOnRelease:!0,lockClass:"swiper-scrollbar-lock",dragClass:"swiper-scrollbar-drag"}},create:function(){l.extend(this,{scrollbar:{init:V.init.bind(this),destroy:V.destroy.bind(this),updateSize:V.updateSize.bind(this),setTranslate:V.setTranslate.bind(this),setTransition:V.setTransition.bind(this),enableDraggable:V.enableDraggable.bind(this),disableDraggable:V.disableDraggable.bind(this),setDragPosition:V.setDragPosition.bind(this),onDragStart:V.onDragStart.bind(this),onDragMove:V.onDragMove.bind(this),onDragEnd:V.onDragEnd.bind(this),isTouched:!1,timeout:null,dragTimeout:null}})},on:{init:function(){this.scrollbar.init(),this.scrollbar.updateSize(),this.scrollbar.setTranslate()},update:function(){this.scrollbar.updateSize()},resize:function(){this.scrollbar.updateSize()},observerUpdate:function(){this.scrollbar.updateSize()},setTranslate:function(){this.scrollbar.setTranslate()},setTransition:function(e){this.scrollbar.setTransition(e)},destroy:function(){this.scrollbar.destroy()}}},{name:"parallax",params:{parallax:{enabled:!1}},create:function(){l.extend(this,{parallax:{setTransform:F.setTransform.bind(this),setTranslate:F.setTranslate.bind(this),setTransition:F.setTransition.bind(this)}})},on:{beforeInit:function(){this.params.parallax.enabled&&(this.params.watchSlidesProgress=!0,this.originalParams.watchSlidesProgress=!0)},init:function(){this.params.parallax&&this.parallax.setTranslate()},setTranslate:function(){this.params.parallax&&this.parallax.setTranslate()},setTransition:function(e){this.params.parallax&&this.parallax.setTransition(e)}}},{name:"zoom",params:{zoom:{enabled:!1,maxRatio:3,minRatio:1,toggle:!0,containerClass:"swiper-zoom-container",zoomedSlideClass:"swiper-slide-zoomed"}},create:function(){var e=this,t={enabled:!1,scale:1,currentScale:1,isScaling:!1,gesture:{$slideEl:void 0,slideWidth:void 0,slideHeight:void 0,$imageEl:void 0,$imageWrapEl:void 0,maxRatio:3},image:{isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},velocity:{x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0}};"onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out".split(" ").forEach(function(i){t[i]=R[i].bind(e)}),l.extend(e,{zoom:t});var i=1;Object.defineProperty(e.zoom,"scale",{get:function(){return i},set:function(t){if(i!==t){var s=e.zoom.gesture.$imageEl?e.zoom.gesture.$imageEl[0]:void 0,a=e.zoom.gesture.$slideEl?e.zoom.gesture.$slideEl[0]:void 0;e.emit("zoomChange",t,s,a)}i=t}})},on:{init:function(){this.params.zoom.enabled&&this.zoom.enable()},destroy:function(){this.zoom.disable()},touchStart:function(e){this.zoom.enabled&&this.zoom.onTouchStart(e)},touchEnd:function(e){this.zoom.enabled&&this.zoom.onTouchEnd(e)},doubleTap:function(e){this.params.zoom.enabled&&this.zoom.enabled&&this.params.zoom.toggle&&this.zoom.toggle(e)},transitionEnd:function(){this.zoom.enabled&&this.params.zoom.enabled&&this.zoom.onTransitionEnd()}}},{name:"lazy",params:{lazy:{enabled:!1,loadPrevNext:!1,loadPrevNextAmount:1,loadOnTransitionStart:!1,elementClass:"swiper-lazy",loadingClass:"swiper-lazy-loading",loadedClass:"swiper-lazy-loaded",preloaderClass:"swiper-lazy-preloader"}},create:function(){l.extend(this,{lazy:{initialImageLoaded:!1,load:q.load.bind(this),loadInSlide:q.loadInSlide.bind(this)}})},on:{beforeInit:function(){this.params.lazy.enabled&&this.params.preloadImages&&(this.params.preloadImages=!1)},init:function(){this.params.lazy.enabled&&!this.params.loop&&0===this.params.initialSlide&&this.lazy.load()},scroll:function(){this.params.freeMode&&!this.params.freeModeSticky&&this.lazy.load()},resize:function(){this.params.lazy.enabled&&this.lazy.load()},scrollbarDragMove:function(){this.params.lazy.enabled&&this.lazy.load()},transitionStart:function(){this.params.lazy.enabled&&(this.params.lazy.loadOnTransitionStart||!this.params.lazy.loadOnTransitionStart&&!this.lazy.initialImageLoaded)&&this.lazy.load()},transitionEnd:function(){this.params.lazy.enabled&&!this.params.lazy.loadOnTransitionStart&&this.lazy.load()}}},j,{name:"a11y",params:{a11y:{enabled:!0,notificationClass:"swiper-notification",prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}"}},create:function(){var e=this;l.extend(e,{a11y:{liveRegion:s('<span class="'+e.params.a11y.notificationClass+'" aria-live="assertive" aria-atomic="true"></span>')}}),Object.keys(U).forEach(function(t){e.a11y[t]=U[t].bind(e)})},on:{init:function(){this.params.a11y.enabled&&(this.a11y.init(),this.a11y.updateNavigation())},toEdge:function(){this.params.a11y.enabled&&this.a11y.updateNavigation()},fromEdge:function(){this.params.a11y.enabled&&this.a11y.updateNavigation()},paginationUpdate:function(){this.params.a11y.enabled&&this.a11y.updatePagination()},destroy:function(){this.params.a11y.enabled&&this.a11y.destroy()}}},{name:"history",params:{history:{enabled:!1,replaceState:!1,key:"slides"}},create:function(){l.extend(this,{history:{init:K.init.bind(this),setHistory:K.setHistory.bind(this),setHistoryPopState:K.setHistoryPopState.bind(this),scrollToSlide:K.scrollToSlide.bind(this),destroy:K.destroy.bind(this)}})},on:{init:function(){this.params.history.enabled&&this.history.init()},destroy:function(){this.params.history.enabled&&this.history.destroy()},transitionEnd:function(){this.history.initialized&&this.history.setHistory(this.params.history.key,this.activeIndex)}}},{name:"hash-navigation",params:{hashNavigation:{enabled:!1,replaceState:!1,watchState:!1}},create:function(){l.extend(this,{hashNavigation:{initialized:!1,init:_.init.bind(this),destroy:_.destroy.bind(this),setHash:_.setHash.bind(this),onHashCange:_.onHashCange.bind(this)}})},on:{init:function(){this.params.hashNavigation.enabled&&this.hashNavigation.init()},destroy:function(){this.params.hashNavigation.enabled&&this.hashNavigation.destroy()},transitionEnd:function(){this.hashNavigation.initialized&&this.hashNavigation.setHash()}}},{name:"autoplay",params:{autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!0,stopOnLastSlide:!1,reverseDirection:!1}},create:function(){var e=this;l.extend(e,{autoplay:{running:!1,paused:!1,run:J.run.bind(e),start:J.start.bind(e),stop:J.stop.bind(e),pause:J.pause.bind(e),onTransitionEnd:function(t){e&&!e.destroyed&&e.$wrapperEl&&t.target===this&&(e.$wrapperEl[0].removeEventListener("transitionend",e.autoplay.onTransitionEnd),e.$wrapperEl[0].removeEventListener("webkitTransitionEnd",e.autoplay.onTransitionEnd),e.autoplay.paused=!1,e.autoplay.running?e.autoplay.run():e.autoplay.stop())}}})},on:{init:function(){this.params.autoplay.enabled&&this.autoplay.start()},beforeTransitionStart:function(e,t){this.autoplay.running&&(t||!this.params.autoplay.disableOnInteraction?this.autoplay.pause(e):this.autoplay.stop())},sliderFirstMove:function(){this.autoplay.running&&(this.params.autoplay.disableOnInteraction?this.autoplay.stop():this.autoplay.pause())},destroy:function(){this.autoplay.running&&this.autoplay.stop()}}},{name:"effect-fade",params:{fadeEffect:{crossFade:!1}},create:function(){l.extend(this,{fadeEffect:{setTranslate:Z.setTranslate.bind(this),setTransition:Z.setTransition.bind(this)}})},on:{beforeInit:function(){if("fade"===this.params.effect){this.classNames.push(this.params.containerModifierClass+"fade");var e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};l.extend(this.params,e),l.extend(this.originalParams,e)}},setTranslate:function(){"fade"===this.params.effect&&this.fadeEffect.setTranslate()},setTransition:function(e){"fade"===this.params.effect&&this.fadeEffect.setTransition(e)}}},{name:"effect-cube",params:{cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94}},create:function(){l.extend(this,{cubeEffect:{setTranslate:Q.setTranslate.bind(this),setTransition:Q.setTransition.bind(this)}})},on:{beforeInit:function(){if("cube"===this.params.effect){this.classNames.push(this.params.containerModifierClass+"cube"),this.classNames.push(this.params.containerModifierClass+"3d");var e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,resistanceRatio:0,spaceBetween:0,centeredSlides:!1,virtualTranslate:!0};l.extend(this.params,e),l.extend(this.originalParams,e)}},setTranslate:function(){"cube"===this.params.effect&&this.cubeEffect.setTranslate()},setTransition:function(e){"cube"===this.params.effect&&this.cubeEffect.setTransition(e)}}},{name:"effect-flip",params:{flipEffect:{slideShadows:!0,limitRotation:!0}},create:function(){l.extend(this,{flipEffect:{setTranslate:ee.setTranslate.bind(this),setTransition:ee.setTransition.bind(this)}})},on:{beforeInit:function(){if("flip"===this.params.effect){this.classNames.push(this.params.containerModifierClass+"flip"),this.classNames.push(this.params.containerModifierClass+"3d");var e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};l.extend(this.params,e),l.extend(this.originalParams,e)}},setTranslate:function(){"flip"===this.params.effect&&this.flipEffect.setTranslate()},setTransition:function(e){"flip"===this.params.effect&&this.flipEffect.setTransition(e)}}},{name:"effect-coverflow",params:{coverflowEffect:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0}},create:function(){l.extend(this,{coverflowEffect:{setTranslate:te.setTranslate.bind(this),setTransition:te.setTransition.bind(this)}})},on:{beforeInit:function(){"coverflow"===this.params.effect&&(this.classNames.push(this.params.containerModifierClass+"coverflow"),this.classNames.push(this.params.containerModifierClass+"3d"),this.params.watchSlidesProgress=!0,this.originalParams.watchSlidesProgress=!0)},setTranslate:function(){"coverflow"===this.params.effect&&this.coverflowEffect.setTranslate()},setTransition:function(e){"coverflow"===this.params.effect&&this.coverflowEffect.setTransition(e)}}},{name:"thumbs",params:{thumbs:{swiper:null,slideThumbActiveClass:"swiper-slide-thumb-active",thumbsContainerClass:"swiper-container-thumbs"}},create:function(){l.extend(this,{thumbs:{swiper:null,init:ie.init.bind(this),update:ie.update.bind(this),onThumbClick:ie.onThumbClick.bind(this)}})},on:{beforeInit:function(){var e=this.params,t=e.thumbs;t&&t.swiper&&(this.thumbs.init(),this.thumbs.update(!0))},slideChange:function(){this.thumbs.swiper&&this.thumbs.update()},update:function(){this.thumbs.swiper&&this.thumbs.update()},resize:function(){this.thumbs.swiper&&this.thumbs.update()},observerUpdate:function(){this.thumbs.swiper&&this.thumbs.update()},setTransition:function(e){var t=this.thumbs.swiper;t&&t.setTransition(e)},beforeDestroy:function(){var e=this.thumbs.swiper;e&&this.thumbs.swiperCreated&&e&&e.destroy()}}}];return void 0===P.use&&(P.use=P.Class.use,P.installModule=P.Class.installModule),P.use(se),P}()},280:function(e,t,i){}}]); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/blocks/vendors~swiper.rtl.css b/plugins/jetpack/_inc/blocks/vendors~swiper.rtl.css
deleted file mode 100644
index 8f651068..00000000
--- a/plugins/jetpack/_inc/blocks/vendors~swiper.rtl.css
+++ /dev/null
@@ -1 +0,0 @@
-.swiper-container{margin:0 auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:right}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translateZ(0);transform:translateZ(0)}.swiper-container-multirow>.swiper-wrapper{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100%;height:100%;position:relative;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-transition-property:height,-webkit-transform;transition-property:height,-webkit-transform;-o-transition-property:transform,height;transition-property:transform,height;transition-property:transform,height,-webkit-transform}.swiper-container-3d{-webkit-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;right:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:linear-gradient(90deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(right,rgba(0,0,0,.5),transparent);background-image:linear-gradient(270deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,right bottom,right top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),transparent);background-image:linear-gradient(0deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,right top,right bottom,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(top,rgba(0,0,0,.5),transparent);background-image:linear-gradient(180deg,rgba(0,0,0,.5),transparent)}.swiper-container-wp8-horizontal,.swiper-container-wp8-horizontal>.swiper-wrapper{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-container-wp8-vertical,.swiper-container-wp8-vertical>.swiper-wrapper{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;background-size:27px 44px;background-position:50%;background-repeat:no-repeat}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z' fill='%23007aff'/%3E%3C/svg%3E");right:10px;left:auto}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z' fill='%23007aff'/%3E%3C/svg%3E");left:10px;right:auto}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z' fill='%23fff'/%3E%3C/svg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z' fill='%23fff'/%3E%3C/svg%3E")}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z'/%3E%3C/svg%3E")}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z'/%3E%3C/svg%3E")}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:opacity .3s;-o-transition:.3s opacity;transition:opacity .3s;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;right:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active,.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{-webkit-transform:scale(.66);-ms-transform:scale(.66);transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{-webkit-transform:scale(.66);-ms-transform:scale(.66);transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33)}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;-webkit-box-shadow:none;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet-active{opacity:1;background:#007aff}.swiper-container-vertical>.swiper-pagination-bullets{left:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:6px 0;display:block}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);width:8px}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;-webkit-transition:top .2s,-webkit-transform .2s;transition:top .2s,-webkit-transform .2s;-o-transition:.2s transform,.2s top;transition:transform .2s,top .2s;transition:transform .2s,top .2s,-webkit-transform .2s}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 4px}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{right:50%;-webkit-transform:translateX(50%);-ms-transform:translateX(50%);transform:translateX(50%);white-space:nowrap}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transition:right .2s,-webkit-transform .2s;transition:right .2s,-webkit-transform .2s;-o-transition:.2s transform,.2s right;transition:transform .2s,right .2s;transition:transform .2s,right .2s,-webkit-transform .2s}.swiper-container-horizontal.swiper-container-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transition:left .2s,-webkit-transform .2s;transition:left .2s,-webkit-transform .2s;-o-transition:.2s transform,.2s left;transition:transform .2s,left .2s;transition:transform .2s,left .2s,-webkit-transform .2s}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:#007aff;position:absolute;right:0;top:0;width:100%;height:100%;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:right top;-ms-transform-origin:right top;transform-origin:right top}.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{-webkit-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top}.swiper-container-horizontal>.swiper-pagination-progressbar,.swiper-container-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:4px;right:0;top:0}.swiper-container-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-container-vertical>.swiper-pagination-progressbar{width:4px;height:100%;right:0;top:0}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-progressbar.swiper-pagination-white{background:hsla(0,0%,100%,.25)}.swiper-pagination-progressbar.swiper-pagination-white .swiper-pagination-progressbar-fill{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-pagination-progressbar.swiper-pagination-black{background:rgba(0,0,0,.25)}.swiper-pagination-progressbar.swiper-pagination-black .swiper-pagination-progressbar-fill{background:#000}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;right:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;left:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;right:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;right:50%;top:50%;margin-right:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12) infinite;animation:swiper-preloader-spin 1s steps(12) infinite}.swiper-lazy-preloader:after{display:block;content:"";width:100%;height:100%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' stroke='%236c6c6c' stroke-width='11' stroke-linecap='round' d='M60 7v20'/%3E%3C/defs%3E%3Cuse xlink:href='%23a' opacity='.27'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(30 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(60 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(90 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(120 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(150 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.37' transform='rotate(180 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.46' transform='rotate(210 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.56' transform='rotate(240 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.66' transform='rotate(270 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.75' transform='rotate(300 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.85' transform='rotate(330 60 60)'/%3E%3C/svg%3E");background-position:50%;background-size:100%;background-repeat:no-repeat}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' stroke='%23fff' stroke-width='11' stroke-linecap='round' d='M60 7v20'/%3E%3C/defs%3E%3Cuse xlink:href='%23a' opacity='.27'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(30 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(60 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(90 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(120 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(150 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.37' transform='rotate(180 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.46' transform='rotate(210 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.56' transform='rotate(240 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.66' transform='rotate(270 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.75' transform='rotate(300 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.85' transform='rotate(330 60 60)'/%3E%3C/svg%3E")}@-webkit-keyframes swiper-preloader-spin{to{-webkit-transform:rotate(-1turn);transform:rotate(-1turn)}}@keyframes swiper-preloader-spin{to{-webkit-transform:rotate(-1turn);transform:rotate(-1turn)}}.swiper-container .swiper-notification{position:absolute;right:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;-webkit-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube{overflow:visible}.swiper-container-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0;width:100%;height:100%}.swiper-container-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-cube-shadow{position:absolute;right:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-flip{overflow:visible}.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-coverflow .swiper-wrapper{-ms-perspective:1200px} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/accessible-focus.min.js b/plugins/jetpack/_inc/build/accessible-focus.min.js
deleted file mode 100644
index 0c394f6a..00000000
--- a/plugins/jetpack/_inc/build/accessible-focus.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-var keyboardNavigation=!1,keyboardNavigationKeycodes=[9,32,37,38,39,40];document.addEventListener("keydown",function(e){keyboardNavigation||-1!==keyboardNavigationKeycodes.indexOf(e.keyCode)&&(keyboardNavigation=!0,document.documentElement.classList.add("accessible-focus"))}),document.addEventListener("mouseup",function(){keyboardNavigation&&(keyboardNavigation=!1,document.documentElement.classList.remove("accessible-focus"))}); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/admin.dops-style.css b/plugins/jetpack/_inc/build/admin.dops-style.css
deleted file mode 100644
index 5df35c28..00000000
--- a/plugins/jetpack/_inc/build/admin.dops-style.css
+++ /dev/null
@@ -1,2681 +0,0 @@
-.dops-button {
- background: white;
- border-color: #d5d5d5;
- border-style: solid;
- border-width: 1px 1px 2px;
- color: #414141;
- cursor: pointer;
- display: inline-block;
- margin: 0;
- outline: 0;
- overflow: hidden;
- font-size: 14px;
- font-weight: 500;
- text-overflow: ellipsis;
- text-decoration: none;
- vertical-align: top;
- box-sizing: border-box;
- font-size: 14px;
- line-height: 21px;
- border-radius: 4px;
- padding: 7px 14px 9px;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none; }
- .dops-button:hover {
- border-color: #bbbbbb;
- color: #414141; }
- .dops-button:active {
- border-width: 2px 1px 1px; }
- .dops-button[disabled], .dops-button:disabled {
- color: #eeeeee;
- background: white;
- border-color: #eeeeee;
- cursor: default; }
- .dops-button[disabled]:active, .dops-button:disabled:active {
- border-width: 1px 1px 2px; }
- .dops-button:focus {
- outline: 0;
- border-color: #00aadc;
- box-shadow: 0 0 0 2px #78dcfa; }
- .dops-button.is-compact {
- padding: 7px;
- color: #888888;
- font-size: 11px;
- line-height: 1;
- text-transform: uppercase; }
- .dops-button.is-compact:disabled {
- color: #eeeeee; }
- .dops-button.is-compact .gridicon {
- top: 4px;
- margin-top: -8px; }
- .dops-button.is-compact .gridicons-plus-small {
- margin-left: -4px; }
- .dops-button.is-compact .gridicons-plus-small:last-of-type {
- margin-left: 0; }
- .dops-button.is-compact .gridicons-plus-small + .gridicon {
- margin-left: -4px; }
- .dops-button.hidden {
- display: none; }
- .dops-button .gridicon {
- position: relative;
- top: 4px;
- margin-top: -2px;
- width: 18px;
- height: 18px; }
-
-.dops-button.is-primary {
- background: #00aadc;
- border-color: #0087be;
- color: white; }
- .dops-button.is-primary:hover, .dops-button.is-primary:focus {
- border-color: #005082;
- color: white; }
- .dops-button.is-primary[disabled], .dops-button.is-primary:disabled {
- background: #bceefd;
- border-color: #8cc9e2;
- color: white; }
- .dops-button.is-primary.is-compact {
- color: white;
- white-space: nowrap; }
-
-.dops-button.is-scary {
- color: #d94f4f; }
- .dops-button.is-scary:hover, .dops-button.is-scary:focus {
- border-color: #d94f4f; }
- .dops-button.is-scary:focus {
- box-shadow: 0 0 0 2px #eba3a3; }
- .dops-button.is-scary[disabled], .dops-button.is-scary:disabled {
- color: #f4cdcd;
- border-color: #eeeeee; }
-
-.dops-button.is-primary.is-scary {
- background: #d94f4f;
- border-color: #a02222;
- color: white; }
- .dops-button.is-primary.is-scary:hover, .dops-button.is-primary.is-scary:focus {
- border-color: #4c1010; }
- .dops-button.is-primary.is-scary[disabled], .dops-button.is-primary.is-scary:disabled {
- background: #eba3a3;
- border-color: #e48484; }
-
-.dops-button.is-borderless {
- border: none;
- color: #888888;
- padding-left: 0;
- padding-right: 0; }
- .dops-button.is-borderless:hover {
- color: #414141; }
- .dops-button.is-borderless:focus {
- box-shadow: none; }
- .dops-accessible-focus .dops-button.is-borderless:focus {
- outline: thin dotted; }
- .dops-button.is-borderless .gridicon {
- width: 24px;
- height: 24px;
- top: 6px; }
- .dops-button.is-borderless[disabled], .dops-button.is-borderless:disabled {
- color: #eeeeee;
- background: white;
- cursor: default; }
- .dops-button.is-borderless[disabled]:active, .dops-button.is-borderless:disabled:active {
- border-width: 0; }
- .dops-button.is-borderless.is-scary {
- color: #d94f4f; }
- .dops-button.is-borderless.is-scary:hover, .dops-button.is-borderless.is-scary:focus {
- color: #a02222; }
- .dops-button.is-borderless.is-scary[disabled] {
- color: #f4cdcd; }
- .dops-button.is-borderless.is-compact {
- background: transparent;
- border-radius: 0; }
- .dops-button.is-borderless.is-compact .gridicon {
- width: 18px;
- height: 18px;
- top: 5px; }
-
-.dops-button-group .dops-button {
- border-left-width: 0;
- border-radius: 0; }
- .dops-button-group .dops-button:focus {
- position: relative;
- z-index: z-index("button-group-parent", ".button-group .button:focus");
- box-shadow: inset 1px 0 0 #00aadc, 0 0 0 2px #78dcfa; }
- .dops-button-group .dops-button.is-primary:focus {
- box-shadow: inset 1px 0 0 #005082, 0 0 0 2px #78dcfa; }
- .dops-button-group .dops-button.is-scary:focus {
- box-shadow: inset 1px 0 0 #d94f4f, 0 0 0 2px #eba3a3; }
- .dops-button-group .dops-button.is-primary.is-scary:focus {
- box-shadow: inset 1px 0 0 #761919, 0 0 0 2px #eba3a3; }
- .dops-button-group .dops-button:first-child:focus {
- box-shadow: 0 0 0 2px #78dcfa; }
- .dops-button-group .dops-button.is-scary:first-child:focus {
- box-shadow: 0 0 0 2px #eba3a3; }
-
-.dops-button-group .dops-button:first-child {
- border-left-width: 1px;
- border-top-left-radius: 4px;
- border-bottom-left-radius: 4px; }
-
-.dops-button-group .dops-button:last-child {
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px; }
-
-.dops-section-header .dops-button-group .dops-button {
- margin-right: 0; }
-
-.dops-count {
- display: inline-block;
- padding: 0.0625rem 0.375rem;
- border: solid 1px #a2a2a2;
- border-radius: 0.75rem;
- font-size: 0.6875rem;
- font-weight: 600;
- line-height: 0.875rem;
- color: #a2a2a2;
- text-align: center; }
-
-/**
- * Select Dropdown
- */
-.dops-select-dropdown {
- height: 43px; }
- .dops-select-dropdown.is-compact {
- height: 28px; }
- .dops-select-dropdown.is-disabled .dops-select-dropdown__header {
- background: #f6f6f6;
- border-color: #eeeeee;
- color: #bbbbbb;
- -webkit-text-fill-color: #bbbbbb; }
-
-.dops-select-dropdown__container {
- position: relative;
- overflow: hidden;
- display: inline-block;
- width: auto;
- max-width: 100%; }
- .dops-select-dropdown.is-open .dops-select-dropdown__container {
- z-index: 170; }
- .dops-accessible-focus .dops-select-dropdown__container:focus,
- .dops-accessible-focus .dops-select-dropdown.is-open .dops-select-dropdown__container {
- z-index: 170;
- box-shadow: 0 0 0 2px #78dcfa; }
- .dops-accessible-focus .dops-select-dropdown__container:focus .select-dropdown__header,
- .dops-accessible-focus .dops-select-dropdown.is-open .dops-select-dropdown__container .select-dropdown__header {
- border-color: #0087be; }
- .dops-accessible-focus .dops-select-dropdown__container:focus {
- border-color: #00aadc;
- box-shadow: 0 0 0 2px #78dcfa;
- outline: 0;
- border-radius: 4px; }
-
-.dops-select-dropdown__header {
- padding: 11px 44px 11px 16px;
- border-style: solid;
- border-color: #d5d5d5;
- border-width: 1px 1px 2px;
- border-radius: 4px;
- background-color: white;
- font-size: 14px;
- font-weight: 600;
- line-height: 18px;
- height: 18px;
- color: #414141;
- transition: background-color 0.2s ease;
- cursor: pointer; }
- .dops-select-dropdown__header::after {
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- display: inline-block;
- vertical-align: middle;
- font: normal 16px/1 'Dashicons';
- content: '\f347';
- position: absolute;
- right: 13px;
- top: 12px;
- display: block;
- line-height: 18px;
- color: rgba(162, 162, 162, 0.5); }
- .is-compact .dops-select-dropdown__header::after {
- right: 4px;
- top: 4px; }
- .is-compact .dops-select-dropdown__header {
- padding: 7px;
- color: #888888;
- font-size: 11px;
- line-height: 1;
- text-transform: uppercase; }
- .is-compact .dops-select-dropdown__header .dops-count {
- border-width: 0;
- margin-left: 0;
- line-height: 1; }
- .dops-select-dropdown.is-open .dops-select-dropdown__header {
- border-radius: 4px 4px 0 0;
- box-shadow: none;
- background-color: #f6f6f6; }
- .dops-select-dropdown.is-open .dops-select-dropdown__header::after {
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- display: inline-block;
- vertical-align: middle;
- font: normal 16px/1 'Dashicons';
- content: '\f343'; }
- .dops-select-dropdown__header .dops-count {
- margin-left: 8px; }
-
-.dops-select-dropdown__header-text {
- display: block;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden; }
-
-.dops-select-dropdown__options {
- visibility: hidden;
- height: 0;
- box-sizing: border-box;
- padding: 0;
- list-style: none;
- margin: -2px 0 0 0;
- background-color: white;
- border: 1px solid #d5d5d5;
- border-radius: 0 0 4px 4px; }
- .dops-accessible-focus .dops-select-dropdown__options {
- border: solid 1px #0087be;
- border-top-color: #d5d5d5; }
- .dops-select-dropdown.is-open .dops-select-dropdown__options {
- visibility: visible;
- height: auto; }
-
-.dops-select-dropdown__option:last-child .dops-select-dropdown__item {
- border-radius: 0 0 4px 4px; }
-
-.dops-select-dropdown__item,
-.dops-select-dropdown__item-text {
- padding: 11px 44px 11px 16px; }
-
-.dops-select-dropdown__item {
- display: block;
- position: relative;
- font-size: 14px;
- font-weight: 400;
- line-height: 18px;
- color: #414141;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
- cursor: pointer; }
- .dops-select-dropdown__item::before {
- content: attr(data-bold-text);
- font-weight: 700;
- opacity: 0; }
- .dops-select-dropdown__item:visited {
- color: #414141; }
- .dops-select-dropdown__item.is-selected {
- background-color: #00aadc;
- color: white; }
- .dops-select-dropdown__item.is-disabled {
- background-color: white;
- color: #a2a2a2;
- cursor: default;
- opacity: .5; }
- .notouch .dops-select-dropdown__item:hover {
- color: #00aadc; }
- .notouch .dops-select-dropdown__item.is-selected:hover {
- color: white; }
-
-.dops-select-dropdown__item-text {
- padding-right: 16px;
- box-sizing: border-box;
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- white-space: nowrap;
- text-overflow: ellipsis;
- color: inherit;
- display: flex;
- flex-flow: row wrap;
- justify-content: space-between; }
- .dops-select-dropdown__item-text .dops-count {
- color: inherit;
- border-color: inherit; }
-
-.dops-select-dropdown__separator {
- border-top: 1px solid #d5d5d5;
- display: block;
- margin: 8px 0; }
-
-.dops-select-dropdown__label {
- display: block;
- color: #bbbbbb;
- margin-top: 5px;
- line-height: 20px; }
- .dops-select-dropdown__label label {
- font-size: 12px;
- text-transform: uppercase;
- padding: 0px 16px 0px 16px; }
-
-@keyframes rotate-spinner__right {
- 0% {
- transform: rotate(0deg); }
- 25% {
- transform: rotate(180deg); }
- 50% {
- transform: rotate(180deg); }
- 75% {
- transform: rotate(360deg); }
- 100% {
- transform: rotate(360deg); } }
-
-@keyframes rotate-spinner__left {
- 0% {
- transform: rotate(0deg); }
- 25% {
- transform: rotate(0deg); }
- 50% {
- transform: rotate(180deg); }
- 75% {
- transform: rotate(180deg); }
- 100% {
- transform: rotate(360deg); } }
-
-.dops-spinner.is-fallback {
- position: relative;
- border-radius: 100%;
- background-color: #d5d5d5; }
- .dops-spinner.is-fallback::before, .dops-spinner.is-fallback::after {
- content: '';
- position: absolute;
- background-color: white;
- border-radius: 50%; }
- .dops-spinner.is-fallback::before {
- width: 90%;
- height: 90%;
- top: 5%;
- left: 5%; }
- .dops-spinner.is-fallback::after {
- width: 70%;
- height: 70%;
- top: 15%;
- left: 15%; }
-
-.dops-spinner__image {
- display: block; }
-
-.dops-spinner__border {
- fill: #d5d5d5; }
-
-.dops-spinner__progress {
- animation: 3s linear infinite;
- transform-origin: 50px 50px;
- fill: #00aadc; }
-
-.dops-spinner.is-fallback .dops-spinner__progress {
- position: absolute;
- overflow: hidden;
- width: 50%;
- height: 100%;
- animation: none; }
- .dops-spinner.is-fallback .dops-spinner__progress::before {
- content: '';
- position: absolute;
- width: 100%;
- height: 100%;
- animation: 3s linear infinite;
- border-radius: 9999px;
- background-color: #00aadc;
- fill: none; }
- .dops-spinner.is-fallback .dops-spinner__progress.is-left {
- left: 0; }
- .dops-spinner.is-fallback .dops-spinner__progress.is-left::before {
- left: 100%;
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- transform-origin: 0 50%; }
- .dops-spinner.is-fallback .dops-spinner__progress.is-right {
- left: 50%; }
- .dops-spinner.is-fallback .dops-spinner__progress.is-right::before {
- left: -100%;
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
- transform-origin: 100% 50%; }
-
-.dops-spinner__progress.is-left,
-.dops-spinner.is-fallback .dops-spinner__progress.is-left::before {
- animation-name: rotate-spinner__left; }
-
-.dops-spinner__progress.is-right,
-.dops-spinner.is-fallback .dops-spinner__progress.is-right::before {
- animation-name: rotate-spinner__right; }
-
-.gridicon {
- fill: currentColor; }
- .gridicon.needs-offset g {
- transform: translate(1px, 1px);
- /* translates to .5px because it's in a child element */ }
- .gridicon.needs-offset-x g {
- transform: translate(1px, 0);
- /* only nudges horizontally */ }
- .gridicon.needs-offset-y g {
- transform: translate(0, 1px);
- /* only nudges vertically */ }
-
-/**
- * @component Search
- */
-.dops-search {
- display: flex;
- flex: 1 1 auto;
- margin-bottom: 24px;
- width: 60px;
- height: 51px;
- position: relative;
- align-items: center;
- z-index: 22;
- transition: all 0.15s ease-in-out; }
- .dops-search .dops-search__icon-navigation {
- flex: 0 0 auto;
- display: flex;
- align-items: center;
- background-color: white;
- border-radius: inherit;
- height: 100%; }
- .dops-search .dops-search__open-icon,
- .dops-search .dops-search__close-icon {
- flex: 0 0 auto;
- width: 50px;
- z-index: 20;
- color: #0087be;
- cursor: pointer; }
- .accessible-focus .dops-search .dops-search__open-icon:focus, .accessible-focus
- .dops-search .dops-search__close-icon:focus {
- outline: dotted 1px #0087be; }
- .dops-search .dops-search__open-icon:hover {
- color: #555555; }
- .dops-search .dops-search__close-icon {
- color: #555555;
- opacity: 0;
- transition: opacity .2s ease-in; }
- .accessible-focus .dops-search.has-focus {
- box-shadow: 0 0 0 1px #0087be, 0 0 0 4px #78dcfa; }
-
-.dops-search.is-expanded-to-container {
- margin-bottom: 0;
- position: absolute;
- display: flex;
- height: 100%;
- width: 50px;
- top: 0;
- right: 0; }
- .dops-search.is-expanded-to-container .dops-search__input-fade {
- position: relative;
- flex: 1 1 auto;
- display: flex; }
- .dops-search.is-expanded-to-container .dops-search__input[type="search"] {
- flex: 1 1 auto;
- display: flex;
- margin: 0;
- box-shadow: none; }
-
-.dops-search__input[type="search"] {
- flex: 1 1 auto;
- display: none;
- z-index: 10;
- top: 0;
- border: none;
- border-radius: inherit;
- height: 100%;
- background: white;
- -moz-appearance: none;
- appearance: none;
- box-sizing: border-box;
- padding: 0px;
- -webkit-appearance: none; }
- .dops-search__input[type="search"]::-webkit-search-cancel-button {
- -webkit-appearance: none; }
- .dops-search__input[type="search"]:focus {
- box-shadow: none;
- border: none; }
-
-.dops-search.is-open {
- width: 100%; }
- .dops-search.is-open .dops-search__open-icon {
- color: #555555; }
- .dops-search.is-open .dops-search__close-icon {
- display: inline-block; }
- .dops-search.is-open .dops-search__input,
- .dops-search.is-open .dops-search__close-icon {
- opacity: 1; }
- .dops-search.is-open .dops-search__input {
- display: block; }
- .dops-search.is-open .dops-search__input-fade {
- flex: 1 1 auto;
- height: 100%;
- position: relative;
- font-size: 16px;
- border-radius: inherit; }
- .dops-search.is-open .dops-search__input-fade::before {
- content: '';
- display: block;
- position: absolute;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- pointer-events: none;
- z-index: 12;
- background: linear-gradient(to right, rgba(255, 255, 255, 0), white 90%);
- top: 0px;
- bottom: 0px;
- right: 0px;
- left: auto;
- width: 32px;
- height: auto;
- border-radius: inherit; }
- .dops-search.is-open .dops-search__input-fade.ltr {
- /*rtl:ignore*/ }
- .dops-search.is-open .dops-search__input-fade.ltr::before {
- content: '';
- display: block;
- position: absolute;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- pointer-events: none;
- z-index: 12;
- background: linear-gradient(to right, rgba(255, 255, 255, 0), white 90%);
- top: 0px;
- bottom: 0px;
- right: 0px;
- left: auto;
- width: 32px;
- height: auto;
- border-radius: inherit; }
-
-.dops-search__input-fade .dops-search__text-overlay {
- color: transparent;
- position: absolute;
- pointer-events: none;
- white-space: nowrap;
- display: flex;
- align-items: center;
- flex: 1 1 auto;
- overflow: hidden;
- font: inherit;
- width: 100%;
- height: 100%;
- top: 0px;
- left: 0px;
- z-index: 11; }
-
-.dops-search .dops-spinner {
- display: none; }
-
-.dops-search.is-searching .dops-search__open-icon {
- display: none; }
-
-.dops-search.is-searching .dops-spinner {
- flex: 0 0 auto;
- display: flex;
- align-items: center;
- height: 100%;
- z-index: 20; }
- .dops-search.is-searching .dops-spinner .dops-spinner__image {
- width: 50px; }
-
-.animating.dops-search-opening .dops-search input {
- opacity: 1; }
-
-/**
- * Section Nav
- */
-.dops-section-nav {
- position: relative;
- width: 100%;
- padding: 0;
- margin: 0 0 17px 0;
- background: white;
- box-sizing: border-box;
- box-shadow: 0 0 0 1px rgba(213, 213, 213, 0.5), 0 1px 2px #eeeeee; }
- .dops-section-nav.is-empty .dops-section-nav__panel {
- visibility: hidden; }
- @media (max-width: 480px) {
- .dops-section-nav.is-open {
- box-shadow: 0 0 0 1px #a2a2a2, 0 2px 4px #d5d5d5; } }
- @media (min-width: 481px) {
- .dops-section-nav.has-pinned-items {
- padding-right: 60px; } }
- @media (min-width: 481px) and (max-width: 660px) {
- .dops-section-nav.has-pinned-items {
- padding-right: 50px; } }
- @media (max-width: 660px) {
- .dops-section-nav {
- margin-bottom: 9px; } }
-
-.dops-section-nav__mobile-header {
- display: flex;
- padding: 15px;
- font-size: 14px;
- line-height: 16px;
- color: #414141;
- font-weight: 600;
- cursor: pointer; }
- .dops-section-nav__mobile-header:after {
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- display: inline-block;
- vertical-align: middle;
- font: normal 16px/1 'Dashicons';
- content: '\f347';
- line-height: 16px;
- color: rgba(162, 162, 162, 0.5); }
- .dops-section-nav.is-open .dops-section-nav__mobile-header:after {
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- display: inline-block;
- vertical-align: middle;
- font: normal 16px/1 'Dashicons';
- content: '\f343'; }
- .dops-section-nav.has-pinned-items .dops-section-nav__mobile-header {
- padding-right: 50px; }
- .dops-section-nav.has-pinned-items .dops-section-nav__mobile-header:after {
- margin-left: 8px; }
- @media (min-width: 481px) {
- .dops-section-nav__mobile-header {
- display: none; } }
-
-.dops-section-nav__mobile-header-text {
- width: 0;
- flex: 1 0 auto;
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis; }
- .dops-section-nav__mobile-header-text small {
- margin-left: 5px;
- font-size: 11px;
- color: #a2a2a2;
- font-weight: 600;
- text-transform: uppercase; }
- .dops-section-nav.has-pinned-items .dops-section-nav__mobile-header-text {
- width: auto;
- flex: 0 1 auto; }
-
-.dops-section-nav__panel {
- box-sizing: border-box;
- width: 100%; }
- @media (max-width: 480px) {
- .dops-section-nav.is-open .dops-section-nav__panel {
- padding-bottom: 15px;
- border-top: solid 1px #d5d5d5;
- background: linear-gradient(to bottom, #f6f6f6 0%, white 4px); } }
- @media (min-width: 481px) {
- .dops-section-nav__panel {
- display: flex;
- align-items: center; }
- .dops-section-nav__panel:first-child {
- width: 0;
- flex: 1 0 auto; } }
-
-.dops-section-nav-group {
- position: relative;
- margin-top: 16px;
- padding-top: 16px;
- border-top: solid 1px #d5d5d5; }
- .dops-section-nav-group:first-child {
- padding-top: 0;
- border-top: none; }
- @media (max-width: 480px) {
- .dops-section-nav-group {
- display: none; }
- .dops-section-nav.is-open .dops-section-nav-group {
- display: block; } }
- @media (min-width: 481px) {
- .dops-section-nav-group {
- margin-top: 0;
- padding-top: 0;
- border-top: none; }
- .dops-section-nav-group:first-child {
- display: flex;
- width: 0;
- flex: 1 0 auto; } }
-
-.dops-section-nav__button {
- width: 100%;
- margin-top: 24px; }
-
-.dops-section-nav__hr {
- background: #eeeeee; }
-
-.dops-section-nav-group__label {
- display: none;
- margin-bottom: 8px;
- padding: 0 15px;
- font-size: 11px;
- color: #a2a2a2;
- font-weight: 600;
- text-transform: uppercase;
- line-height: 12px; }
- @media (max-width: 480px) {
- .has-siblings .dops-section-nav-group__label {
- display: block; } }
-
-.dops-section-nav-group__label-text {
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden; }
-
-.dops-section-nav-tab .count {
- margin-left: 8px; }
-
-@media (min-width: 481px) {
- .dops-section-nav-tabs {
- width: 0;
- flex: 1 0 auto; }
- .dops-section-nav-tabs.is-dropdown {
- position: relative;
- width: auto;
- flex: 0 1 auto;
- margin: 8px; } }
-
-.dops-section-nav-tabs__list {
- margin: 0;
- list-style: none; }
- @media (min-width: 481px) {
- .dops-section-nav-tabs__list {
- display: flex;
- width: 100%;
- overflow: hidden; }
- .is-dropdown .dops-section-nav-tabs__list {
- display: none; } }
-
-.dops-section-nav-tab {
- margin-bottom: 0; }
- @media (min-width: 481px) {
- .dops-section-nav-tab {
- width: auto;
- flex: none;
- border-bottom: 2px solid transparent;
- border-top: none;
- text-align: center; }
- .dops-section-nav-tab.is-selected {
- border-bottom-color: #414141; } }
-
-.dops-section-nav-tab__link,
-.dops-section-nav-tab__text {
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis; }
-
-.dops-section-nav-tab__link {
- display: flex;
- align-items: center;
- box-sizing: border-box;
- padding: 15px;
- width: 100%;
- font-size: 14px;
- font-weight: 600;
- line-height: 18px;
- color: #414141;
- cursor: pointer; }
- .dops-section-nav-tab__link:visited {
- color: #414141; }
- .dops-section-nav-tab__link[disabled],
- .notouch .dops-section-nav-tab__link[disabled]:hover {
- color: #eeeeee;
- cursor: default; }
- .is-selected .dops-section-nav-tab__link {
- color: white;
- background-color: #00aadc; }
- .dops-section-nav-tab__link:focus {
- outline: none;
- box-shadow: none; }
- .dops-accessible-focus .dops-section-nav-tab__link:focus {
- outline: solid #a2a2a2 1px; }
- .is-external .dops-section-nav-tab__link:after {
- font-size: 18px;
- padding-left: 2px; }
- .notouch .dops-section-nav-tab__link:hover {
- color: #00aadc; }
- .notouch .is-selected .dops-section-nav-tab__link:hover {
- color: white; }
- @media (min-width: 481px) {
- .dops-section-nav-tab__link {
- display: block;
- width: auto;
- padding: 16px 16px 14px 16px;
- color: #0087be;
- font-weight: 400; }
- .dops-section-nav-tab__link:visited {
- color: #0087be; }
- .is-selected .dops-section-nav-tab__link {
- color: #414141;
- background-color: transparent; }
- .is-selected .dops-section-nav-tab__link:after {
- display: none; }
- .notouch .is-selected .dops-section-nav-tab__link:hover {
- color: #414141; } }
-
-.dops-section-nav-tab__text {
- display: block;
- flex: 1 0 auto;
- width: 0;
- color: inherit; }
- @media (min-width: 481px) {
- .dops-section-nav-tab__text {
- display: inline;
- flex: none;
- width: auto; } }
-
-.dops-section-nav-tabs__dropdown {
- position: relative;
- z-index: 3;
- width: 100%; }
- .dops-section-nav-tabs__dropdown.is-open {
- z-index: 4; }
- .dops-section-nav-tabs__dropdown .dops-select-dropdown__container {
- position: static; }
-
-.dops-section-nav__segmented .dops-segmented-control {
- margin: 0 15px; }
-
-.dops-section-nav__segmented .dops-segmented-control__link {
- padding: 3px 16px 5px; }
-
-@media (max-width: 480px) {
- .dops-section-nav .dops-search.is-pinned {
- height: 46px; } }
-
-#jp-plugin-container {
- min-height: 100vh; }
-
-/* Card */
-.dops-card {
- display: block;
- position: relative;
- margin: 0 auto 10px auto;
- padding: 16px;
- box-sizing: border-box;
- background: white;
- box-shadow: 0 0 0 1px rgba(213, 213, 213, 0.5), 0 1px 2px #eeeeee; }
- .dops-card:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden; }
- @media (min-width: 481px) {
- .dops-card {
- margin-bottom: 16px;
- padding: 24px; } }
- .dops-card.is-compact {
- margin-bottom: 1px; }
- @media (min-width: 481px) {
- .dops-card.is-compact {
- margin-bottom: 1px;
- padding: 16px 24px; } }
- .dops-card.is-card-link {
- padding-right: 48px; }
-
-.dops-card__link-indicator {
- color: #d5d5d5;
- display: block;
- height: 100%;
- position: absolute;
- top: 0;
- right: 16px; }
-
-a.dops-card:hover .dops-card__link-indicator {
- color: #bbbbbb; }
-
-a.dops-card:focus {
- outline: 0; }
- a.dops-card:focus .dops-card__link-indicator {
- color: tint(#00aadc, 20%); }
-
-.dops-text-input.dops-text-input {
- box-sizing: border-box;
- margin: 0;
- padding: 7px 14px;
- width: 100%;
- color: #414141;
- font-size: 16px;
- line-height: 1.5;
- border: 1px solid #d5d5d5;
- background-color: white;
- transition: all .15s ease-in-out;
- box-shadow: none; }
- .dops-text-input.dops-text-input:-ms-input-placeholder {
- color: #a2a2a2; }
- .dops-text-input.dops-text-input::-ms-input-placeholder {
- color: #a2a2a2; }
- .dops-text-input.dops-text-input::placeholder {
- color: #a2a2a2; }
- .dops-text-input.dops-text-input:hover {
- border-color: #bbbbbb; }
- .dops-text-input.dops-text-input:focus {
- border-color: #0087be;
- outline: none;
- box-shadow: 0 0 0 2px #78dcfa; }
- .dops-text-input.dops-text-input:focus::-ms-clear {
- display: none; }
- .dops-text-input.dops-text-input:disabled {
- background: #f6f6f6;
- border-color: #eeeeee;
- color: #bbbbbb;
- -webkit-text-fill-color: #bbbbbb; }
- .dops-text-input.dops-text-input:disabled:hover {
- cursor: default; }
- .dops-text-input.dops-text-input:disabled:-ms-input-placeholder {
- color: #bbbbbb; }
- .dops-text-input.dops-text-input:disabled::-ms-input-placeholder {
- color: #bbbbbb; }
- .dops-text-input.dops-text-input:disabled::placeholder {
- color: #bbbbbb; }
-
-.dops-text-input.dops-text-input {
- -webkit-appearance: none; }
- .dops-text-input.dops-text-input.is-valid {
- border-color: #4ab866; }
- .dops-text-input.dops-text-input.is-valid:hover {
- border-color: #3a9551; }
- .dops-text-input.dops-text-input.is-error {
- border-color: #d94f4f; }
- .dops-text-input.dops-text-input.is-error:hover {
- border-color: #c92c2c; }
- .dops-text-input.dops-text-input:focus.is-valid {
- box-shadow: 0 0 0 2px #caead2; }
- .dops-text-input.dops-text-input:focus.is-valid:hover {
- box-shadow: 0 0 0 2px #a6dcb3; }
- .dops-text-input.dops-text-input:focus.is-error {
- box-shadow: 0 0 0 2px #f9e2e2; }
- .dops-text-input.dops-text-input:focus.is-error:hover {
- box-shadow: 0 0 0 2px #f0b8b8; }
-
-/**
- * "popover" theme for `component/tip`.
- */
-.dops-popover {
- font-size: 11px;
- z-index: 1000;
- position: absolute;
- top: 0;
- left: 0 /*rtl:ignore*/;
- right: auto /*rtl:ignore*/; }
- .dops-popover .dops-popover__inner {
- background-color: white;
- border: 1px solid #d5d5d5;
- border-radius: 4px;
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1), 0 0 56px rgba(0, 0, 0, 0.075);
- text-align: center;
- position: relative; }
- .dops-popover .dops-popover__arrow {
- border: 10px dashed #d5d5d5;
- height: 0;
- line-height: 0;
- position: absolute;
- width: 0;
- z-index: 1; }
- .dops-popover.fade {
- transition: opacity 100ms; }
- .dops-popover.is-top .dops-popover__arrow,
- .dops-popover.is-top-left .dops-popover__arrow,
- .dops-popover.is-top-right .dops-popover__arrow {
- bottom: 0 /*rtl:ignore*/;
- left: 50% /*rtl:ignore*/;
- margin-left: -10px/*rtl:ignore*/;
- border-top-style: solid/*rtl:ignore*/;
- border-bottom: none/*rtl:ignore*/;
- border-left-color: transparent/*rtl:ignore*/;
- border-right-color: transparent/*rtl:ignore*/; }
- .dops-popover.is-top .dops-popover__arrow::before,
- .dops-popover.is-top-left .dops-popover__arrow::before,
- .dops-popover.is-top-right .dops-popover__arrow::before {
- bottom: 2px /*rtl:ignore*/;
- border: 10px solid white;
- content: " ";
- position: absolute;
- left: 50% /*rtl:ignore*/;
- margin-left: -10px/*rtl:ignore*/;
- border-top-style: solid/*rtl:ignore*/;
- border-bottom: none/*rtl:ignore*/;
- border-left-color: transparent/*rtl:ignore*/;
- border-right-color: transparent/*rtl:ignore*/; }
- .dops-popover.is-bottom .dops-popover__arrow,
- .dops-popover.is-bottom-left .dops-popover__arrow,
- .dops-popover.is-bottom-right .dops-popover__arrow {
- top: 0 /*rtl:ignore*/;
- left: 50% /*rtl:ignore*/;
- margin-left: -10px/*rtl:ignore*/;
- border-bottom-style: solid/*rtl:ignore*/;
- border-top: none/*rtl:ignore*/;
- border-left-color: transparent/*rtl:ignore*/;
- border-right-color: transparent/*rtl:ignore*/; }
- .dops-popover.is-bottom .dops-popover__arrow::before,
- .dops-popover.is-bottom-left .dops-popover__arrow::before,
- .dops-popover.is-bottom-right .dops-popover__arrow::before {
- top: 2px /*rtl:ignore*/;
- border: 10px solid white;
- content: " ";
- position: absolute;
- left: 50% /*rtl:ignore*/;
- margin-left: -10px/*rtl:ignore*/;
- border-bottom-style: solid/*rtl:ignore*/;
- border-top: none/*rtl:ignore*/;
- border-left-color: transparent/*rtl:ignore*/;
- border-right-color: transparent/*rtl:ignore*/; }
- .dops-popover.is-left .dops-popover__arrow,
- .dops-popover.is-left-top .dops-popover__arrow,
- .dops-popover.is-left-bottom .dops-popover__arrow {
- right: 0 /*rtl:ignore*/;
- top: 50% /*rtl:ignore*/;
- margin-top: -10px/*rtl:ignore*/;
- border-left-style: solid/*rtl:ignore*/;
- border-right: none/*rtl:ignore*/;
- border-top-color: transparent/*rtl:ignore*/;
- border-bottom-color: transparent/*rtl:ignore*/; }
- .dops-popover.is-left .dops-popover__arrow::before,
- .dops-popover.is-left-top .dops-popover__arrow::before,
- .dops-popover.is-left-bottom .dops-popover__arrow::before {
- right: 2px /*rtl:ignore*/;
- border: 10px solid white;
- content: " ";
- position: absolute;
- top: 50% /*rtl:ignore*/;
- margin-top: -10px/*rtl:ignore*/;
- border-left-style: solid/*rtl:ignore*/;
- border-right: none/*rtl:ignore*/;
- border-top-color: transparent/*rtl:ignore*/;
- border-bottom-color: transparent/*rtl:ignore*/; }
- .dops-popover.is-right .dops-popover__arrow,
- .dops-popover.is-right-top .dops-popover__arrow,
- .dops-popover.is-right-bottom .dops-popover__arrow {
- left: 0 /*rtl:ignore*/;
- top: 50% /*rtl:ignore*/;
- margin-top: -10px/*rtl:ignore*/;
- border-right-style: solid/*rtl:ignore*/;
- border-left: none/*rtl:ignore*/;
- border-top-color: transparent/*rtl:ignore*/;
- border-bottom-color: transparent/*rtl:ignore*/; }
- .dops-popover.is-right .dops-popover__arrow::before,
- .dops-popover.is-right-top .dops-popover__arrow::before,
- .dops-popover.is-right-bottom .dops-popover__arrow::before {
- left: 2px /*rtl:ignore*/;
- border: 10px solid white;
- content: " ";
- position: absolute;
- top: 50% /*rtl:ignore*/;
- margin-top: -10px/*rtl:ignore*/;
- border-right-style: solid/*rtl:ignore*/;
- border-left: none/*rtl:ignore*/;
- border-top-color: transparent/*rtl:ignore*/;
- border-bottom-color: transparent/*rtl:ignore*/; }
- .dops-popover.is-top-left, .dops-popover.is-bottom-left, .dops-popover.is-top-right, .dops-popover.is-bottom-right {
- padding-right: 0;
- padding-left: 0; }
- .dops-popover.is-top-left .dops-popover__arrow,
- .dops-popover.is-bottom-left .dops-popover__arrow {
- left: auto /*rtl:ignore*/;
- right: 5px /*rtl:ignore*/; }
- .dops-popover.is-top-right .dops-popover__arrow,
- .dops-popover.is-bottom-right .dops-popover__arrow {
- left: 15px /*rtl:ignore*/; }
- .dops-popover.is-top .dops-popover__inner,
- .dops-popover.is-top-left .dops-popover__inner,
- .dops-popover.is-top-right .dops-popover__inner {
- top: -10px /*rtl:ignore*/; }
- .dops-popover.is-left .dops-popover__inner,
- .dops-popover.is-top-right .dops-popover__inner,
- .dops-popover.is-bottom-right .dops-popover__inner {
- left: -10px /*rtl:ignore*/; }
- .dops-popover.is-bottom .dops-popover__inner,
- .dops-popover.is-bottom-left .dops-popover__inner,
- .dops-popover.is-bottom-right .dops-popover__inner {
- top: 10px /*rtl:ignore*/; }
- .dops-popover.is-right .dops-popover__inner,
- .dops-popover.is-top-left .dops-popover__inner,
- .dops-popover.is-bottom-left .dops-popover__inner {
- left: 10px /*rtl:ignore*/; }
- .dops-popover.is-dialog-visible {
- z-index: 100300;
- /* Above .dialog */ }
-
-.dops-popover__menu {
- display: flex;
- flex-direction: column;
- min-width: 200px; }
-
-.dops-popover__menu-item {
- position: relative;
- background: inherit;
- border: none;
- border-radius: 0;
- color: #414141;
- cursor: pointer;
- display: block;
- font-size: 14px;
- font-weight: 400;
- margin: 0;
- padding: 8px 16px;
- text-align: left;
- transition: all 0.05s ease-in-out; }
- .dops-popover__menu-item:first-child {
- margin-top: 5px; }
- .dops-popover__menu-item:hover, .dops-popover__menu-item:focus {
- background-color: #00aadc;
- border: 0;
- box-shadow: none;
- color: white; }
- .dops-popover__menu-item:hover .gridicon, .dops-popover__menu-item:focus .gridicon {
- color: white; }
- .dops-popover__menu-item[disabled]:hover, .dops-popover__menu-item[disabled]:focus {
- background: transparent;
- cursor: default; }
- .dops-popover__menu-item:last-child {
- margin-bottom: 5px; }
- .dops-popover__menu-item::-moz-focus-inner {
- border: 0; }
- .dops-popover__menu-item.has-icon {
- padding-left: 42px; }
- .dops-popover__menu-item .gridicon {
- color: #bbbbbb;
- vertical-align: bottom;
- margin-right: 8px; }
-
-.dops-popover__hr {
- margin: 8px 0;
- background: #eeeeee; }
-
-.form-toggle[type="checkbox"] {
- display: none; }
-
-.form-toggle__switch {
- flex: none;
- position: relative;
- display: inline-block;
- border-radius: 12px;
- box-sizing: border-box;
- padding: 2px;
- width: 40px;
- height: 24px;
- vertical-align: middle;
- outline: 0;
- cursor: pointer;
- transition: all .4s ease, box-shadow 0s; }
- .form-toggle__switch:before, .form-toggle__switch:after {
- position: relative;
- display: block;
- content: "";
- width: 20px;
- height: 20px; }
- .form-toggle__switch:after {
- left: 0;
- border-radius: 50%;
- background: white;
- transition: all .2s ease; }
- .form-toggle__switch:before {
- display: none; }
- .dops-accessible-focus .form-toggle__switch:focus {
- box-shadow: 0 0 0 2px #00aadc; }
-
-.form-toggle__label {
- display: flex;
- cursor: pointer; }
- .is-disabled .form-toggle__label {
- cursor: default; }
- .form-toggle__label .form-toggle__label-content {
- flex: 0 1 100%;
- margin-left: 12px; }
-
-.dops-accessible-focus .form-toggle:focus + .form-toggle__label .form-toggle__switch {
- box-shadow: 0 0 0 2px #00aadc; }
-
-.dops-accessible-focus .form-toggle:focus:checked + .form-toggle__label .form-toggle__switch {
- box-shadow: 0 0 0 2px #78dcfa; }
-
-.form-toggle + .form-toggle__label .form-toggle__switch {
- background: #bbbbbb; }
-
-.form-toggle:not(:disabled) + .form-toggle__label:hover .form-toggle__switch {
- background: #d5d5d5; }
-
-.form-toggle:checked + .form-toggle__label .form-toggle__switch {
- background: #00aadc; }
- .form-toggle:checked + .form-toggle__label .form-toggle__switch:after {
- left: 16px; }
-
-.form-toggle:checked:not(:disabled) + .form-toggle__label:hover .form-toggle__switch {
- background: #78dcfa; }
-
-.form-toggle:disabled + label.form-toggle__label span.form-toggle__switch {
- opacity: 0.25;
- cursor: default; }
-
-.form-toggle.is-toggling + .form-toggle__label .form-toggle__switch {
- background: #00aadc; }
-
-.form-toggle.is-toggling:checked + .form-toggle__label .form-toggle__switch {
- background: #d5d5d5; }
-
-.form-toggle.is-compact + .form-toggle__label .form-toggle__switch {
- border-radius: 8px;
- width: 24px;
- height: 16px; }
- .form-toggle.is-compact + .form-toggle__label .form-toggle__switch:before, .form-toggle.is-compact + .form-toggle__label .form-toggle__switch:after {
- width: 12px;
- height: 12px; }
-
-.form-toggle.is-compact:checked + .form-toggle__label .form-toggle__switch:after {
- left: 8px; }
-
-.dops-section-header.dops-card {
- display: flex;
- flex-wrap: wrap;
- max-width: 100%;
- padding-top: 0.6875rem;
- padding-bottom: 0.6875rem;
- position: relative; }
- .dops-section-header.dops-card:after {
- content: ''; }
-
-.dops-section-header__label {
- display: flex;
- align-items: center;
- flex-grow: 1;
- min-width: 0;
- line-height: 1.75rem;
- position: relative;
- color: #414141;
- font-size: 0.875rem; }
- .dops-section-header__label .dops-count {
- margin-left: 0.5rem; }
-
-.dops-section-header__label-text {
- position: relative;
- margin-right: 0.5rem;
- white-space: nowrap;
- overflow: hidden;
- width: 100%;
- padding-right: 0.5rem;
- min-width: 0; }
- .dops-section-header__label-text:before {
- content: '';
- display: block;
- position: absolute;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- pointer-events: none;
- background: linear-gradient(to right, rgba(255, 255, 255, 0), white 90%);
- top: 0px;
- bottom: 0px;
- right: 0px;
- left: auto;
- width: 8px;
- height: auto; }
- .has-card-badge .dops-section-header__label-text {
- width: auto; }
-
-.dops-section-header__actions {
- flex-grow: 0;
- position: relative; }
- .dops-section-header__actions:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden; }
-
-.section-header__actions .button {
- float: left;
- margin-right: 0.5rem; }
- .section-header__actions .button:last-child {
- margin-right: 0; }
-
-#jp-plugin-container {
- min-height: 100vh; }
-
-@keyframes appear {
- 0% {
- opacity: 0; }
- 100% {
- opacity: 1; } }
-
-.dops-notice {
- display: flex;
- position: relative;
- width: 100%;
- margin-bottom: 24px;
- box-sizing: border-box;
- animation: appear .3s ease-in-out;
- background: #414141;
- color: white;
- border-radius: 3px;
- line-height: 1.5; }
- .dops-notice.is-success .dops-notice__icon-wrapper {
- background: #4ab866; }
- .dops-notice.is-warning .dops-notice__icon-wrapper {
- background: #f0b849; }
- .dops-notice.is-error .dops-notice__icon-wrapper {
- background: #d94f4f; }
- .dops-notice.is-info .dops-notice__icon-wrapper {
- background: #00aadc; }
- .dops-notice .dops-notice__dismiss {
- overflow: hidden; }
- .dops-notice.is-success .dops-notice__dismiss, .dops-notice.is-error .dops-notice__dismiss, .dops-notice.is-warning .dops-notice__dismiss, .dops-notice.is-info .dops-notice__dismiss {
- overflow: hidden; }
-
-.dops-notice__icon-wrapper {
- background: #747474;
- color: white;
- display: flex;
- align-items: baseline;
- width: 47px;
- justify-content: center;
- border-radius: 3px 0 0 3px;
- flex-shrink: 0;
- align-self: stretch; }
- .dops-notice__icon-wrapper .gridicon {
- margin-top: 10px; }
- @media (min-width: 481px) {
- .dops-notice__icon-wrapper .gridicon {
- margin-top: 12px; } }
-
-.dops-notice__content {
- padding: 13px;
- font-size: 12px;
- flex-grow: 1; }
- @media (min-width: 481px) {
- .dops-notice__content {
- font-size: 14px; } }
-
-.dops-notice__text a.dops-notice__text-no-underline {
- text-decoration: none; }
-
-.dops-notice__text a,
-.dops-notice__text a:visited {
- text-decoration: underline;
- color: white; }
- .dops-notice__text a:hover,
- .dops-notice__text a:visited:hover {
- color: white;
- text-decoration: none; }
-
-.dops-notice__text ul {
- margin-bottom: 0;
- margin-left: 0; }
-
-.dops-notice__text li {
- margin-left: 2em;
- margin-top: 0.5em; }
-
-.dops-notice__text p {
- margin-bottom: 0;
- margin-top: 0.5em; }
- .dops-notice__text p:first-child {
- margin-top: 0; }
-
-.dops-notice__button {
- cursor: pointer;
- margin-left: 0.428em; }
-
-.dops-notice__dismiss {
- flex-shrink: 0;
- padding: 12px;
- cursor: pointer;
- padding-bottom: 0; }
- .dops-notice__dismiss .gridicon {
- width: 18px;
- height: 18px; }
- @media (min-width: 481px) {
- .dops-notice__dismiss {
- padding: 11px;
- padding-bottom: 0; }
- .dops-notice__dismiss .gridicon {
- width: 24px;
- height: 24px; } }
- .dops-notice .dops-notice__dismiss {
- color: #bbbbbb; }
- .dops-notice .dops-notice__dismiss:hover, .dops-notice .dops-notice__dismiss:focus {
- color: white; }
-
-a.dops-notice__action {
- cursor: pointer;
- font-size: 12px;
- font-weight: 400;
- text-decoration: none;
- white-space: nowrap;
- color: #bbbbbb;
- padding: 13px;
- display: flex;
- align-items: center; }
- @media (min-width: 481px) {
- a.dops-notice__action {
- flex-shrink: 1;
- flex-grow: 0;
- align-items: center;
- border-radius: 0;
- font-size: 14px;
- margin: 0 0 0 auto;
- padding: 13px 16px; }
- a.dops-notice__action .gridicon {
- width: 24px;
- height: 24px; } }
- a.dops-notice__action:visited {
- color: #bbbbbb; }
- a.dops-notice__action:hover {
- color: white; }
- a.dops-notice__action .gridicon {
- margin-left: 8px;
- opacity: 0.7;
- width: 18px;
- height: 18px; }
-
-.dops-notice.is-compact {
- display: inline-flex;
- flex-wrap: nowrap;
- flex-direction: row;
- width: auto;
- border-radius: 3px;
- min-height: 20px;
- margin: 0;
- padding: 0;
- text-decoration: none;
- text-transform: none;
- vertical-align: middle;
- line-height: 1.5; }
- .dops-notice.is-compact .dops-notice__content {
- font-size: 12px;
- padding: 6px 10px; }
- .dops-notice.is-compact .dops-notice__icon-wrapper {
- width: 28px; }
- .dops-notice.is-compact .dops-notice__icon-wrapper .dops-notice__icon {
- width: 18px;
- height: 18px;
- margin: 0; }
- .dops-notice.is-compact .dops-notice__icon-wrapper .gridicon {
- margin-top: 6px; }
- .dops-notice.is-compact .dops-notice__dismiss {
- position: relative;
- align-self: center;
- flex: none;
- margin: 0 8px 0 0;
- padding: 0; }
- .dops-notice.is-compact .dops-notice__dismiss .gridicon {
- width: 18px;
- height: 18px; }
- .dops-notice.is-compact a.dops-notice__action {
- background: transparent;
- display: inline-block;
- margin: 0;
- font-size: 12px;
- align-self: center;
- margin-left: 16px;
- padding: 0 10px; }
- .dops-notice.is-compact a.dops-notice__action:hover, .dops-notice.is-compact a.dops-notice__action:active, .dops-notice.is-compact a.dops-notice__action:focus {
- background: transparent; }
- .dops-notice.is-compact a.dops-notice__action .gridicon {
- margin-left: 8px;
- width: 14px;
- height: 14px;
- vertical-align: sub;
- opacity: 1; }
-
-.dops-plan-icon {
- width: inherit;
- height: inherit;
- background-repeat: no-repeat; }
-
-.dops-plan-icon__free .dops-plan-icon__free-0 {
- fill: #78dcfa; }
-
-.dops-plan-icon__free .dops-plan-icon__free-1 {
- fill: white; }
-
-.dops-plan-icon__free .dops-plan-icon__free-2 {
- fill: #006a95; }
-
-.dops-plan-icon__free .dops-plan-icon__free-3 {
- fill: #0087be; }
-
-.dops-plan-icon__free .dops-plan-icon__free-4 {
- fill: #00a4e7; }
-
-.dops-plan-icon__personal .dops-plan-icon__personal-0 {
- fill: #f0b849; }
-
-.dops-plan-icon__personal .dops-plan-icon__personal-1 {
- fill: #a2a2a2; }
-
-.dops-plan-icon__personal .dops-plan-icon__personal-2 {
- fill: #d5d5d5; }
-
-.dops-plan-icon__personal .dops-plan-icon__personal-3 {
- fill: white; }
-
-.dops-plan-icon__personal .dops-plan-icon__personal-4 {
- fill: #888888; }
-
-.dops-plan-icon__personal .dops-plan-icon__personal-5 {
- fill: #6f6f6f; }
-
-.dops-plan-icon__premium .dops-plan-icon__premium-0 {
- fill: #4ab866; }
-
-.dops-plan-icon__premium .dops-plan-icon__premium-1 {
- fill: #a2a2a2; }
-
-.dops-plan-icon__premium .dops-plan-icon__premium-2 {
- fill: #6f6f6f; }
-
-.dops-plan-icon__premium .dops-plan-icon__premium-3 {
- fill: white; }
-
-.dops-plan-icon__premium .dops-plan-icon__premium-4 {
- fill: #d5d5d5; }
-
-.dops-plan-icon__premium .dops-plan-icon__premium-5 {
- fill: #6f6f6f; }
-
-.dops-plan-icon__premium .dops-plan-icon__premium-6 {
- fill: #555555; }
-
-.dops-plan-icon__business .dops-plan-icon__business-0 {
- fill: #855DA6; }
-
-.dops-plan-icon__business .dops-plan-icon__business-1 {
- fill: white; }
-
-.dops-plan-icon__business .dops-plan-icon__business-2 {
- fill: #eeeeee; }
-
-.dops-plan-icon__business .dops-plan-icon__business-3 {
- fill: #0087be; }
-
-.dops-plan-icon__business .dops-plan-icon__business-4 {
- fill: #005082; }
-
-@charset "UTF-8";
-#jp-plugin-container {
- min-height: 100vh; }
-
-/*
-The MIT License (MIT)
-
-Copyright © 2011–2015 thoughtbot, inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
-documentation files (the “Software”), to deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
-persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial
-portions of the Software.
-
-THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-https://github.com/thoughtbot/bourbon
-*/
-.dops-banner.dops-card {
- border-left: 3px solid;
- display: flex;
- padding: 12px 6px 12px 12px;
- position: relative;
- z-index: 2;
- border-left-color: #0087be; }
- .dops-banner.dops-card.is-card-link {
- padding: 12px 48px 12px 16px; }
- .dops-banner.dops-card.is-dismissible {
- padding-right: 48px; }
- .dops-banner.dops-card .dops-banner__icon {
- color: #0087be; }
- .dops-banner.dops-card .dops-banner__icon-circle {
- background-color: #0087be; }
- .dops-banner.dops-card.is-jetpack-info {
- border-left-color: #00BE28; }
- .dops-banner.dops-card.is-jetpack-info .dops-banner__icon {
- color: #00BE28; }
- .dops-banner.dops-card.is-jetpack-info .dops-banner__icon-circle {
- background-color: #00BE28; }
- .dops-banner.dops-card.is-upgrade-personal {
- border-left-color: #f0b849; }
- .dops-banner.dops-card.is-upgrade-personal .dops-banner__icon {
- color: #f0b849; }
- .dops-banner.dops-card.is-upgrade-personal .dops-banner__icon-circle {
- background-color: #f0b849; }
- .dops-banner.dops-card.is-upgrade-premium {
- border-left-color: #4ab866; }
- .dops-banner.dops-card.is-upgrade-premium .dops-banner__icon {
- color: #4ab866; }
- .dops-banner.dops-card.is-upgrade-premium .dops-banner__icon-circle {
- background-color: #4ab866; }
- .dops-banner.dops-card.is-upgrade-business {
- border-left-color: #855DA6; }
- .dops-banner.dops-card.is-upgrade-business .dops-banner__icon {
- color: #855DA6; }
- .dops-banner.dops-card.is-upgrade-business .dops-banner__icon-circle {
- background-color: #855DA6; }
- .dops-banner.dops-card .dops-card__link-indicator {
- align-items: center;
- color: #0087be;
- display: flex; }
- .dops-banner.dops-card:hover {
- transition: all 100ms ease-in-out; }
- .dops-banner.dops-card:hover.is-card-link {
- box-shadow: 0 0 0 1px #a2a2a2, 0 2px 4px #d5d5d5; }
- .dops-banner.dops-card:hover .dops-card__link-indicator {
- color: #005082; }
- @media (min-width: 481px) {
- .dops-banner.dops-card {
- padding: 12px 16px; }
- .dops-banner.dops-card.is-dismissible {
- padding-right: 16px; } }
-
-.dops-banner__icons {
- display: flex; }
- .dops-banner__icons .dops-banner__icon,
- .dops-banner__icons .dops-banner__icon-circle {
- border-radius: 50%;
- flex-shrink: 0;
- height: 24px;
- margin-right: 16px;
- margin-top: -2px;
- text-align: center;
- top: 4px;
- width: 24px; }
- .dops-banner__icons .dops-banner__icon {
- align-self: center;
- color: white;
- display: block; }
- .dops-banner__icons .dops-banner__icon-circle {
- color: white;
- display: none;
- padding: 3px 4px 4px 3px; }
- .dops-banner__icons .dops-banner__icon-circle .gridicon {
- margin-bottom: -7px; }
- @media (min-width: 481px) {
- .dops-banner__icons {
- align-items: center; }
- .dops-banner__icons .dops-banner__icon {
- display: none; }
- .dops-banner__icons .dops-banner__icon-circle {
- display: block; } }
-
-.dops-banner__icon-plan {
- display: flex;
- margin-right: 16px; }
- .dops-banner__icon-plan .dops-plan-icon {
- height: 32px;
- width: 32px; }
- @media (min-width: 481px) {
- .dops-banner__icon-plan {
- align-items: center; } }
-
-.dops-banner__content {
- align-items: center;
- display: flex;
- flex-grow: 1;
- flex-wrap: wrap; }
- @media (min-width: 481px) {
- .dops-banner__content {
- flex-wrap: nowrap; } }
-
-.dops-banner__info {
- flex-grow: 1;
- line-height: 1.4;
- width: 100%; }
- .dops-banner__info .dops-banner__title,
- .dops-banner__info .dops-banner__description,
- .dops-banner__info .dops-banner__list {
- color: #414141; }
- .dops-banner__info .dops-banner__title {
- font-size: 14px;
- font-weight: 500; }
- .dops-banner__info .dops-banner__description {
- font-size: 12px;
- margin-top: 3px; }
- .dops-banner__info .dops-banner__list {
- font-size: 12px;
- list-style: none;
- margin: 0; }
- .dops-banner__info .dops-banner__list li {
- margin: 6px 0; }
- .dops-banner__info .dops-banner__list li .gridicon {
- color: #a2a2a2;
- display: none; }
- @media (min-width: 481px) {
- .dops-banner__info {
- width: auto; }
- .dops-banner__info .dops-banner__list li .gridicon {
- display: inline;
- margin-right: 12px;
- vertical-align: bottom; } }
-
-.dops-banner__action {
- align-self: center;
- font-size: 12px;
- margin: 8px 0 0 0;
- text-align: left;
- width: 100%; }
- .dops-banner__action .dops-banner__prices {
- display: flex;
- justify-content: flex-start; }
- .dops-banner__action .dops-banner__prices .dops-plan-price {
- margin-bottom: 0; }
- .dops-banner__action .dops-banner__prices .dops-plan-price.is-discounted,
- .dops-banner__action .dops-banner__prices .dops-plan-price.is-discounted .dops-plan-price__currency-symbol {
- color: #414141; }
- .has-call-to-action .dops-banner__action .dops-banner__prices .dops-plan-price {
- margin-bottom: 8px; }
- @media (min-width: 481px) {
- .dops-banner__action {
- margin: 0 4px 0 8px;
- text-align: center;
- width: auto; }
- .is-dismissible .dops-banner__action {
- margin-top: 40px; }
- .dops-banner__action .dops-banner__prices {
- justify-content: flex-end;
- text-align: right; } }
-
-.module-overridden-banner.dops-banner.is-compact {
- margin-bottom: 0; }
-
-.module-overridden-banner.dops-banner .dops-banner__description a {
- text-decoration: underline; }
-
-.dops-info-popover-button {
- background: transparent;
- border: none;
- color: #888888;
- padding: 0; }
- .dops-info-popover-button:hover {
- color: #414141; }
- .dops-info-popover-button:focus {
- box-shadow: none; }
- .dops-accessible-focus .dops-info-popover-button:focus {
- outline: thin dotted; }
-
-.dops-info-popover .gridicon {
- cursor: pointer;
- color: #c8c8c8; }
- .dops-info-popover .gridicon:hover {
- color: #414141; }
-
-.dops-info-popover.is_active .gridicon {
- color: #414141; }
-
-.dops-popover.dops-info-popover__tooltip .dops-popover__inner {
- color: #6f6f6f;
- font-size: 13px;
- max-width: 220px;
- padding: 16px;
- text-align: left; }
-
-.dops-external-link .gridicons-external {
- color: currentColor;
- margin-left: 0.5rem;
- top: 0.125rem;
- position: relative; }
-
-#jp-plugin-container {
- min-height: 100vh; }
-
-.jp-support-info {
- position: absolute;
- top: 1.6875rem;
- right: 1.5625rem;
- z-index: 1; }
- @media (max-width: 480px) {
- .jp-support-info {
- top: 1.25rem;
- right: 1rem; } }
- .jp-form-fieldset .jp-support-info {
- top: 4px; }
- .jp-support-info .dops-info-popover {
- white-space: nowrap; }
-
-.dops-popover .jp-support-info__privacy {
- display: block;
- margin-top: 0.875rem;
- padding-top: 0.75rem;
- border-top: 1px solid rgba(162, 162, 162, 0.5); }
-
-@keyframes appear {
- 0% {
- opacity: 0; }
- 100% {
- opacity: 1; } }
-
-.dops-foldable-card.dops-card {
- position: relative;
- transition: margin .15s linear;
- padding: 0; }
- .dops-foldable-card.dops-card:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden; }
- .dops-foldable-card.dops-card.is-expanded {
- margin-bottom: 8px; }
- .dops-foldable-card.dops-card .is-clickable {
- cursor: pointer; }
-
-.dops-foldable-card__header {
- min-height: 64px;
- width: 100%;
- padding: 16px;
- box-sizing: border-box;
- display: flex;
- align-items: center;
- justify-content: space-between;
- position: relative; }
- .dops-foldable-card__header.has-border .dops-foldable-card__summary,
- .dops-foldable-card__header.has-border .dops-foldable-card__summary_expanded {
- margin-right: 48px; }
- .dops-foldable-card__header.has-border .dops-foldable-card__expand {
- border-left: 1px #f6f6f6 solid; }
- .dops-foldable-card.is-compact .dops-foldable-card__header {
- padding: 8px 16px;
- min-height: 40px; }
- .dops-foldable-card.is-expanded .dops-foldable-card__header {
- margin-bottom: 0px;
- height: inherit;
- min-height: 64px; }
- .dops-foldable-card.is-expanded.is-compact .dops-foldable-card__header {
- min-height: 40px; }
- .dops-foldable-card.is-disabled .dops-foldable-card__header {
- opacity: 0.2; }
-
-.dops-foldable-card__action {
- position: absolute;
- top: 0;
- right: 0;
- height: 100%;
- background: none;
- border: 0; }
- .dops-foldable-card.is-expanded .dops-foldable-card__action {
- height: 100%; }
- .dops-foldable-card.is-disabled .dops-foldable-card__action {
- cursor: default; }
- .dops-accessible-focus .dops-foldable-card__action:focus {
- outline: thin dotted; }
-
-button.dops-foldable-card__action {
- cursor: pointer;
- outline: 0; }
-
-.dops-foldable-card__main {
- max-width: calc( 100% - 36px);
- display: block;
- align-items: center;
- width: 100%;
- margin-right: 5px; }
- @media (max-width: 480px) {
- .dops-foldable-card__main {
- flex: 1 1; } }
-
-.dops-foldable-card__secondary {
- display: flex;
- align-items: center;
- flex: 1 1;
- justify-content: flex-end; }
-
-.dops-foldable-card__expand {
- width: 48px; }
- .dops-foldable-card__expand .gridicon {
- fill: #a2a2a2;
- display: flex;
- align-items: center;
- width: 100%;
- vertical-align: middle;
- transition: transform 0.15s cubic-bezier(0.175, 0.885, 0.32, 1.275), color 0.2s ease-in; }
- .dops-foldable-card.is-expanded .dops-foldable-card__expand .gridicon {
- transform: rotate(180deg); }
- .dops-foldable-card__expand .gridicon:hover {
- fill: #a2a2a2; }
- .dops-foldable-card__expand:focus .gridicon, .dops-foldable-card__expand:hover .gridicon {
- fill: #00aadc; }
-
-.dops-foldable-card__header-text {
- font-size: 1.125rem;
- width: 100%; }
-
-.dops-foldable-card__subheader {
- margin-top: 0.125rem;
- margin-bottom: 0.125rem;
- font-size: 0.875rem;
- color: #6f6f6f; }
-
-.dops-foldable-card__content {
- display: none; }
- .dops-foldable-card.is-expanded .dops-foldable-card__content {
- display: block;
- padding: 16px;
- border-top: 1px solid #f6f6f6; }
- .dops-foldable-card.is-compact .dops-foldable-card.is-expanded .dops-foldable-card__content {
- padding: 8px; }
- .dops-foldable-card.is-expanded .dops-foldable-card__content p:first-child {
- margin-top: 0; }
- .dops-foldable-card.is-expanded .dops-foldable-card__content p:last-child {
- margin-bottom: 0; }
-
-.dops-foldable-card__summary,
-.dops-foldable-card__summary_expanded {
- margin-right: 40px;
- color: #a2a2a2;
- font-size: 12px;
- transition: opacity 0.2s linear;
- display: inline-block; }
- .dops-foldable-card.has-expanded-summary .dops-foldable-card__summary, .dops-foldable-card.has-expanded-summary
- .dops-foldable-card__summary_expanded {
- transition: none;
- flex: 2;
- text-align: right; }
- @media (max-width: 480px) {
- .dops-foldable-card__summary,
- .dops-foldable-card__summary_expanded {
- display: none; } }
-
-.dops-foldable-card__summary {
- opacity: 1;
- display: inline-block; }
- .dops-foldable-card.is-expanded .dops-foldable-card__summary {
- display: none; }
- .has-expanded-summary .dops-foldable-card.is-expanded .dops-foldable-card__summary {
- display: none; }
-
-.dops-foldable-card__summary_expanded {
- display: none; }
- .dops-foldable-card.is-expanded .dops-foldable-card__summary_expanded {
- display: inline-block; }
-
-#jp-plugin-container {
- min-height: 100vh; }
-
-.form-input-validation {
- color: #4ab866;
- position: relative;
- padding: 6px 24px 11px 34px;
- border-radius: 1px;
- box-sizing: border-box;
- font-size: 14px;
- animation: appear .3s ease-in-out; }
- .form-input-validation.is-error {
- color: #d94f4f; }
- .form-input-validation.is-warning {
- color: #f0b849; }
- .form-input-validation .gridicon {
- float: left;
- margin-left: -34px; }
-
-.dops-textarea {
- box-sizing: border-box;
- margin: 0;
- padding: 0.4375rem 0.875rem;
- min-height: 5.75rem;
- width: 100%;
- color: #414141;
- font-size: 1rem;
- line-height: 1.5;
- border: 1px solid #d5d5d5;
- background-color: white;
- transition: all .15s ease-in-out;
- box-shadow: none; }
- .dops-textarea:-ms-input-placeholder {
- color: #a2a2a2; }
- .dops-textarea::-ms-input-placeholder {
- color: #a2a2a2; }
- .dops-textarea::placeholder {
- color: #a2a2a2; }
- .dops-textarea:hover {
- border-color: #bbbbbb; }
- .dops-textarea:focus {
- border-color: #0087be;
- outline: none;
- box-shadow: 0 0 0 2px #78dcfa; }
- .dops-textarea:focus::-ms-clear {
- display: none; }
- .dops-textarea:disabled {
- background: #f6f6f6;
- border-color: #eeeeee;
- color: #bbbbbb;
- -webkit-text-fill-color: #bbbbbb; }
- .dops-textarea:disabled:hover {
- cursor: default; }
- .dops-textarea:disabled:-ms-input-placeholder {
- color: #bbbbbb; }
- .dops-textarea:disabled::-ms-input-placeholder {
- color: #bbbbbb; }
- .dops-textarea:disabled::placeholder {
- color: #bbbbbb; }
-
-.dops-clipboard-button-input {
- position: relative;
- display: block; }
- .dops-clipboard-button-input .dops-clipboard-button {
- position: absolute;
- top: 50%;
- right: 4px;
- transform: translateY(-50%);
- overflow: visible; }
- .dops-clipboard-button-input .dops-clipboard-button:not(:disabled)::before {
- content: '';
- display: block;
- position: absolute;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- pointer-events: none;
- background: linear-gradient(to right, rgba(255, 255, 255, 0), #fff 90%);
- top: 0px;
- bottom: 0px;
- right: 0px;
- left: auto;
- width: 16px;
- height: auto;
- right: calc( 100% + 1px); }
- .dops-clipboard-button-input .dops-clipboard-button:focus::before {
- right: calc( 100% + 3px); }
-
-.dops-tooltip.dops-popover .dops-popover__arrow {
- border-width: 6px; }
-
-.dops-tooltip.dops-popover.is-bottom-right .dops-popover__arrow, .dops-tooltip.dops-popover.is-bottom-left .dops-popover__arrow, .dops-tooltip.dops-popover.is-bottom .dops-popover__arrow {
- border-bottom-color: #555555;
- top: 4px;
- right: 10px; }
- .dops-tooltip.dops-popover.is-bottom-right .dops-popover__arrow::before, .dops-tooltip.dops-popover.is-bottom-left .dops-popover__arrow::before, .dops-tooltip.dops-popover.is-bottom .dops-popover__arrow::before {
- display: none; }
-
-.dops-tooltip.dops-popover.is-bottom-right.is-error .dops-popover__arrow, .dops-tooltip.dops-popover.is-bottom-left.is-error .dops-popover__arrow, .dops-tooltip.dops-popover.is-bottom.is-error .dops-popover__arrow {
- border-bottom-color: #d94f4f; }
-
-.dops-tooltip.dops-popover.is-bottom-right.is-warning .dops-popover__arrow, .dops-tooltip.dops-popover.is-bottom-left.is-warning .dops-popover__arrow, .dops-tooltip.dops-popover.is-bottom.is-warning .dops-popover__arrow {
- border-bottom-color: #f0b849; }
-
-.dops-tooltip.dops-popover.is-bottom-right.is-success .dops-popover__arrow, .dops-tooltip.dops-popover.is-bottom-left.is-success .dops-popover__arrow, .dops-tooltip.dops-popover.is-bottom.is-success .dops-popover__arrow {
- border-bottom-color: #4ab866; }
-
-.dops-tooltip.dops-popover.is-top .dops-popover__arrow, .dops-tooltip.dops-popover.is-top-left .dops-popover__arrow, .dops-tooltip.dops-popover.is-top-right .dops-popover__arrow {
- border-top-color: #555555;
- bottom: 4px;
- right: 10px; }
- .dops-tooltip.dops-popover.is-top .dops-popover__arrow::before, .dops-tooltip.dops-popover.is-top-left .dops-popover__arrow::before, .dops-tooltip.dops-popover.is-top-right .dops-popover__arrow::before {
- display: none; }
-
-.dops-tooltip.dops-popover.is-top.is-error .dops-popover__arrow, .dops-tooltip.dops-popover.is-top-left.is-error .dops-popover__arrow, .dops-tooltip.dops-popover.is-top-right.is-error .dops-popover__arrow {
- border-top-color: #d94f4f; }
-
-.dops-tooltip.dops-popover.is-top.is-warning .dops-popover__arrow, .dops-tooltip.dops-popover.is-top-left.is-warning .dops-popover__arrow, .dops-tooltip.dops-popover.is-top-right.is-warning .dops-popover__arrow {
- border-top-color: #f0b849; }
-
-.dops-tooltip.dops-popover.is-top.is-success .dops-popover__arrow, .dops-tooltip.dops-popover.is-top-left.is-success .dops-popover__arrow, .dops-tooltip.dops-popover.is-top-right.is-success .dops-popover__arrow {
- border-top-color: #4ab866; }
-
-.dops-tooltip.dops-popover.is-top .dops-popover__arrow, .dops-tooltip.dops-popover.is-bottom .dops-popover__arrow {
- margin-left: -6px; }
-
-.dops-tooltip.dops-popover.is-left, .dops-tooltip.dops-popover.is-right {
- padding-top: 0; }
- .dops-tooltip.dops-popover.is-left .dops-popover__arrow, .dops-tooltip.dops-popover.is-right .dops-popover__arrow {
- margin-top: -6px; }
- .dops-tooltip.dops-popover.is-left .dops-popover__arrow::before, .dops-tooltip.dops-popover.is-right .dops-popover__arrow::before {
- display: none; }
- .dops-tooltip.dops-popover.is-left.is-error .dops-popover__arrow, .dops-tooltip.dops-popover.is-right.is-error .dops-popover__arrow {
- border-right-color: #d94f4f; }
- .dops-tooltip.dops-popover.is-left.is-warning .dops-popover__arrow, .dops-tooltip.dops-popover.is-right.is-warning .dops-popover__arrow {
- border-right-color: #f0b849; }
- .dops-tooltip.dops-popover.is-left.is-success .dops-popover__arrow, .dops-tooltip.dops-popover.is-right.is-success .dops-popover__arrow {
- border-right-color: #4ab866; }
-
-.dops-tooltip.dops-popover.is-left .dops-popover__arrow {
- margin-right: 4px;
- border-left-color: #555555; }
-
-.dops-tooltip.dops-popover.is-right .dops-popover__arrow {
- margin-left: 4px;
- border-right-color: #555555; }
-
-.dops-tooltip.dops-popover .dops-popover__inner {
- border: 0px;
- box-shadow: none;
- border-radius: 2px;
- color: white;
- background: #555555;
- font-size: 12px;
- padding: 6px 10px;
- text-align: left; }
-
-.dops-tooltip.dops-popover.is-error .dops-popover__inner {
- background: #d94f4f; }
-
-.dops-tooltip.dops-popover.is-warning .dops-popover__inner {
- background: #f0b849; }
-
-.dops-tooltip.dops-popover.is-success .dops-popover__inner {
- background: #4ab866; }
-
-.dops-tooltip.dops-popover ul {
- list-style: none;
- margin: 0;
- padding: 0; }
- .dops-tooltip.dops-popover ul li {
- font-size: 11px;
- font-weight: 100;
- border: 0; }
-
-.dops-tooltip__hr {
- margin: 8px 0;
- background: #a2a2a2; }
-
-#jp-plugin-container {
- min-height: 100vh; }
-
-.dops-chart {
- position: relative;
- box-sizing: border-box;
- background-color: white;
- padding: 8px 0 8px 20px; }
-
-.dops-chart .dops-chart__y-axis-markers {
- position: absolute;
- top: 8px;
- left: 0;
- right: 0;
- height: 200px; }
-
-.dops-chart .dops-chart__y-axis-marker {
- position: absolute;
- top: 0;
- width: 100%;
- height: 1px;
- border-top: 1px solid #eeeeee; }
-
-.dops-chart__bar-marker {
- z-index: 1;
- position: absolute;
- top: 0;
- width: 100%;
- height: 1px;
- border-top: 1px solid rgba(238, 238, 238, 0.1); }
-
-.dops-chart__bar-marker.is-fifty,
-.dops-chart__y-axis-label.is-fifty,
-.dops-chart .dops-chart__y-axis-marker.is-fifty {
- top: 50%; }
-
-.dops-chart__bar-marker.is-zero,
-.dops-chart__y-axis-label.is-zero,
-.dops-chart .dops-chart__y-axis-marker.is-zero {
- top: 100%; }
-
-.dops-chart__y-axis {
- position: relative;
- float: right;
- height: 200px;
- padding: 0 20px 0 10px;
- font-size: 11px;
- color: #888888;
- margin-bottom: 30px; }
-
-.dops-chart__y-axis-label {
- position: absolute;
- top: 0;
- right: 20px;
- text-align: right; }
-
-.dops-chart__y-axis-width-fix {
- color: rgba(255, 255, 255, 0); }
-
-.dops-chart__x-axis {
- position: relative;
- font-size: 0;
- padding: 5px 0;
- min-height: 18px;
- color: #555555; }
-
-.dops-chart__x-axis-label {
- position: absolute;
- display: inline-block;
- vertical-align: top;
- font-size: 11px;
- text-align: center; }
-
-.dops-chart__x-axis-label::before {
- content: '';
- display: block;
- position: absolute;
- top: -4px;
- left: 50%;
- margin-left: -.5px;
- width: 1px;
- height: 5px;
- background: #f6f6f6;
- background-image: linear-gradient(to bottom, #f6f6f6 0%, #d5d5d5 100%); }
-
-.dops-chart__bars {
- position: relative;
- font-size: 0;
- height: 200px;
- text-align: center;
- overflow: hidden;
- display: -ms-flex;
- display: flex; }
-
-.dops-chart__bar {
- text-align: center;
- display: inline-block;
- position: relative;
- height: 200px;
- -ms-flex-grow: 1;
- flex-grow: 1;
- -ms-flex-shrink: 1;
- flex-shrink: 1; }
- .dops-chart__bar.is-weekend {
- background-color: rgba(238, 238, 238, 0.5); }
- .dops-chart__bar:hover {
- cursor: pointer;
- background-color: rgba(238, 238, 238, 0.3); }
- .dops-chart__bar.is-selected {
- cursor: default;
- background-color: rgba(240, 130, 30, 0.1); }
-
-.dops-chart__bar-section {
- display: inline-block;
- background-color: #0087be;
- position: absolute;
- top: 0;
- right: 16%;
- bottom: 0;
- left: 16%;
- z-index: 2; }
- .dops-chart__bar:hover .dops-chart__bar-section.is-bar {
- background-color: #00aadc; }
- .dops-chart__bar.is-selected .dops-chart__bar-section.is-bar {
- background-color: #f0821e; }
- .dops-chart__bar-section.is-spacer {
- z-index: 0;
- background-color: rgba(255, 255, 255, 0); }
- .dops-chart__bar-section.is-ghost::after {
- content: "";
- display: block;
- position: absolute;
- top: 160px;
- bottom: 0;
- left: 0;
- z-index: 1;
- width: 100%;
- height: 40px;
- background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgba(238, 238, 238, 0.5)); }
- .dops-chart__bar:hover .dops-chart__bar-section.is-ghost::after {
- display: none; }
-
-.dops-chart__bar-section-inner {
- background: #004069;
- position: absolute;
- right: 23.33%;
- bottom: 0;
- left: 23.33%; }
- .dops-chart__bar.is-selected .dops-chart__bar-section-inner {
- background-color: #d54e21; }
-
-.dops-chart__legend {
- margin-bottom: -8px; }
- .dops-chart__legend:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden; }
-
-.dops-chart__legend .dops-chart__legend-options {
- float: right;
- color: #747474;
- list-style-type: none;
- margin: 0;
- font-size: 11px;
- text-transform: uppercase;
- letter-spacing: 0.1em; }
- @media (max-width: 480px) {
- .dops-chart__legend .dops-chart__legend-options {
- width: 100%; } }
-
-.dops-chart__legend-option {
- display: inline;
- text-align: left; }
- @media (max-width: 480px) {
- .dops-chart__legend-option {
- width: 50%;
- display: inline-block; } }
-
-.dops-chart__legend-label {
- display: inline-block;
- padding: 12px 19px 10px 20px; }
- .dops-chart__legend-label.is-selectable {
- cursor: pointer; }
- .dops-chart__legend-label.is-selectable:focus, .dops-chart__legend-label.is-selectable:hover {
- color: tint(#00aadc, 20%); }
- @media (max-width: 480px) {
- .dops-chart__legend-label {
- display: block; } }
-
-.dops-chart__legend-option .dops-chart__legend-color {
- width: 10px;
- height: 10px;
- background: #0087be;
- display: inline-block;
- border-radius: 1px;
- vertical-align: top;
- margin: 3px 5px 3px 8px; }
-
-@media (max-width: 480px) {
- .dops-chart__legend-option:first-child .dops-chart__legend-color {
- margin-left: 2px; } }
-
-.dops-chart__legend-color.is-dark-blue {
- background: #004069; }
-
-.dops-chart__legend-option .dops-chart__legend-checkbox {
- margin: 0;
- float: none;
- vertical-align: top; }
-
-.dops-chart__empty {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- text-align: center;
- font-size: 14px;
- line-height: 24px;
- clear: both;
- z-index: 1; }
-
-.dops-chart__empty_notice {
- position: relative;
- top: 97px;
- padding: 11px 24px;
- margin-bottom: 24px;
- border-radius: 1px;
- background: #fff;
- box-sizing: border-box;
- font-size: 14px;
- line-height: 1.4285;
- animation: appear .3s ease-in-out;
- box-shadow: 0 0 0 1px rgba(213, 213, 213, 0.5), 0 1px 2px #eeeeee; }
- @media (min-width: 661px) {
- .dops-chart__empty_notice {
- padding: 13px 48px;
- font-size: inherit; }
- .dops-chart__empty_notice::before {
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- display: inline-block;
- vertical-align: middle;
- font: normal 16px/1 'Noticons';
- content: '\f456';
- position: absolute;
- top: 23px;
- left: 20px;
- margin: -12px 0px 0 -8px;
- font-size: 24px;
- line-height: 1; } }
-
-.dops-chart__tooltip .dops-popover__inner {
- width: 230px;
- text-align: left; }
- .dops-chart__tooltip .dops-popover__inner ul {
- list-style: none;
- margin: 0;
- padding: 0; }
- .dops-chart__tooltip .dops-popover__inner ul:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden; }
- .dops-chart__tooltip .dops-popover__inner ul li {
- font-size: 11px;
- text-transform: uppercase;
- font-weight: 100;
- height: 24px;
- letter-spacing: 0.1em;
- border: 0;
- margin-bottom: 0; }
- .dops-chart__tooltip .dops-popover__inner ul li .dops-wrapper {
- display: block;
- line-height: inherit;
- line-height: 24px;
- clear: both; }
- .dops-chart__tooltip .dops-popover__inner ul li .value {
- text-align: right;
- float: right;
- min-width: 22px;
- color: #d5d5d5; }
- .dops-chart__tooltip .dops-popover__inner ul li .label {
- display: block;
- overflow: hidden;
- word-break: break-all;
- vertical-align: baseline; }
- .dops-chart__tooltip .dops-popover__inner ul li .gridicon {
- vertical-align: middle;
- margin-right: 6px;
- margin-top: -3px; }
-
-.dops-chart__tooltip.is-streak {
- margin-top: -5px;
- height: 35px; }
- .dops-chart__tooltip.is-streak .dops-popover__arrow::before {
- left: 85px;
- top: 30px; }
- .dops-chart__tooltip.is-streak .dops-popover__inner {
- width: 160px;
- position: relative;
- top: -10px; }
- .dops-chart__tooltip.is-streak .dops-popover__inner li {
- height: 14px; }
- .dops-chart__tooltip.is-streak .dops-popover__inner li .label {
- width: 100%;
- float: left;
- text-align: center; }
- .rtl .dops-chart__tooltip.is-streak .dops-popover__inner li .label {
- font-size: 11px; }
- .dops-chart__tooltip.is-streak .dops-popover__inner li .label .post-count {
- font-weight: bold; }
- .dops-chart__tooltip.is-streak .dops-popover__inner li .value {
- float: none; }
-
-.dops-chart__tooltip .dops-module-content-list-item.is-date-label {
- font-size: 11px;
- margin-bottom: 2px;
- text-transform: uppercase;
- font-weight: bold;
- border-bottom: 1px solid #5d5d5d;
- padding-bottom: 2px; }
-
-.dops-chart__tooltip .dops-module-content-list-item.is-published-item {
- height: 19px; }
- .dops-chart__tooltip .dops-module-content-list-item.is-published-item .label {
- text-transform: none;
- color: #d5d5d5;
- overflow: hidden;
- letter-spacing: 0;
- height: 19px; }
- .dops-chart__tooltip .dops-module-content-list-item.is-published-item .value {
- width: 0;
- min-width: 0; }
- .dops-chart__tooltip .dops-module-content-list-item.is-published-item .value::before {
- content: '';
- position: relative;
- background-image: linear-gradient(to right, rgba(61, 89, 109, 0) 0%, rgba(61, 89, 109, 0.5), #3d596d);
- left: -30px;
- width: 30px;
- height: 24px;
- display: block; }
-
-#jp-plugin-container {
- min-height: 100vh; }
-
-/* This hack is used to prevent the body from scrolling when the modal is showing */
-body.dops-modal-showing {
- overflow: hidden; }
-
-.dops-modal-wrapper {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1050;
- display: block;
- overflow-x: hidden;
- overflow-y: auto;
- text-align: center;
- -webkit-overflow-scrolling: touch;
- outline: 0;
- transition: opacity .15s linear;
- background-color: rgba(0, 0, 0, 0.5);
- cursor: pointer; }
- .dops-modal-wrapper:before {
- content: '';
- display: inline-block;
- height: 100%;
- vertical-align: middle; }
- .dops-modal-wrapper .dops-modal {
- position: relative;
- display: inline-block;
- margin: 0 0;
- width: 100%;
- max-width: 550px;
- vertical-align: middle;
- text-align: left;
- background-color: #fff;
- transition: all 0.5s;
- z-index: 100;
- clear: both;
- cursor: default; }
- @media (min-width: 481px) {
- .dops-modal-wrapper .dops-modal {
- margin: 0 auto;
- height: auto;
- border-radius: 5px;
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2); } }
-
-@charset "UTF-8";
-/*
-The MIT License (MIT)
-
-Copyright © 2011–2015 thoughtbot, inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
-documentation files (the “Software”), to deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
-persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial
-portions of the Software.
-
-THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-https://github.com/thoughtbot/bourbon
-*/
-.jp-jetpack-connect__button {
- background: #00BE28;
- border-color: #00a523;
- color: white; }
- .jp-jetpack-connect__button:hover, .jp-jetpack-connect__button:focus {
- background: #00a523;
- border-color: #008b1d;
- color: white; }
-
-.notices-list {
- overflow: hidden; }
- .notices-list.is-pinned {
- width: calc( 100% - 272px - 32px - 32px);
- z-index: z-index("root", ".notices-list.is-pinned");
- position: fixed;
- top: 79px; }
- .notices-list.is-pinned .notice {
- z-index: z-index("root", ".notices-list.is-pinned .notice"); }
-
-.notices-list__whitespace {
- height: 71px;
- width: 100%;
- display: block; }
-
-@keyframes appear {
- 0% {
- opacity: 0; }
- 100% {
- opacity: 1; } }
-
-.global-notices {
- text-align: right;
- pointer-events: none;
- z-index: 179;
- position: fixed;
- top: auto;
- right: 0;
- bottom: 0;
- left: 0; }
- @media (min-width: 661px) {
- .global-notices {
- top: 63px;
- right: 16px;
- bottom: auto;
- left: auto;
- max-width: calc( 100% - 32px); } }
- @media (min-width: 961px) {
- .global-notices {
- top: 71px;
- right: 24px;
- max-width: calc( 100% - 48px); } }
- @media (min-width: 1041px) {
- .global-notices {
- right: 32px;
- max-width: calc( 100% - 64px); } }
-
-.global-notices .dops-notice {
- flex-wrap: nowrap;
- margin-bottom: 0;
- text-align: left;
- pointer-events: auto;
- border-radius: 0;
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2), 0 0 56px rgba(0, 0, 0, 0.15); }
- .global-notices .dops-notice .dops-notice__icon-wrapper {
- border-radius: 0; }
- @media (min-width: 661px) {
- .global-notices .dops-notice {
- display: flex;
- overflow: hidden;
- margin-bottom: 24px;
- border-radius: 3px; }
- .global-notices .dops-notice .dops-notice__icon-wrapper {
- border-radius: 3px 0 0 3px; } }
-
-@media (min-width: 661px) {
- .global-notices .dops-notice a.dops-notice__action {
- font-size: 14px;
- padding: 13px 16px; } }
-
-.global-notices .dops-notice__dismiss {
- flex-shrink: 0; }
- @media (min-width: 661px) {
- .global-notices .dops-notice__dismiss {
- padding: 13px 16px 0; } }
-
diff --git a/plugins/jetpack/_inc/build/admin.dops-style.rtl.css b/plugins/jetpack/_inc/build/admin.dops-style.rtl.css
deleted file mode 100644
index 4257f46f..00000000
--- a/plugins/jetpack/_inc/build/admin.dops-style.rtl.css
+++ /dev/null
@@ -1,2682 +0,0 @@
-.dops-button {
- background: white;
- border-color: #d5d5d5;
- border-style: solid;
- border-width: 1px 1px 2px;
- color: #414141;
- cursor: pointer;
- display: inline-block;
- margin: 0;
- outline: 0;
- overflow: hidden;
- font-size: 14px;
- font-weight: 500;
- text-overflow: ellipsis;
- text-decoration: none;
- vertical-align: top;
- box-sizing: border-box;
- font-size: 14px;
- line-height: 21px;
- border-radius: 4px;
- padding: 7px 14px 9px;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none; }
- .dops-button:hover {
- border-color: #bbbbbb;
- color: #414141; }
- .dops-button:active {
- border-width: 2px 1px 1px; }
- .dops-button[disabled], .dops-button:disabled {
- color: #eeeeee;
- background: white;
- border-color: #eeeeee;
- cursor: default; }
- .dops-button[disabled]:active, .dops-button:disabled:active {
- border-width: 1px 1px 2px; }
- .dops-button:focus {
- outline: 0;
- border-color: #00aadc;
- box-shadow: 0 0 0 2px #78dcfa; }
- .dops-button.is-compact {
- padding: 7px;
- color: #888888;
- font-size: 11px;
- line-height: 1;
- text-transform: uppercase; }
- .dops-button.is-compact:disabled {
- color: #eeeeee; }
- .dops-button.is-compact .gridicon {
- top: 4px;
- margin-top: -8px; }
- .dops-button.is-compact .gridicons-plus-small {
- margin-right: -4px; }
- .dops-button.is-compact .gridicons-plus-small:last-of-type {
- margin-right: 0; }
- .dops-button.is-compact .gridicons-plus-small + .gridicon {
- margin-right: -4px; }
- .dops-button.hidden {
- display: none; }
- .dops-button .gridicon {
- position: relative;
- top: 4px;
- margin-top: -2px;
- width: 18px;
- height: 18px; }
-
-.dops-button.is-primary {
- background: #00aadc;
- border-color: #0087be;
- color: white; }
- .dops-button.is-primary:hover, .dops-button.is-primary:focus {
- border-color: #005082;
- color: white; }
- .dops-button.is-primary[disabled], .dops-button.is-primary:disabled {
- background: #bceefd;
- border-color: #8cc9e2;
- color: white; }
- .dops-button.is-primary.is-compact {
- color: white;
- white-space: nowrap; }
-
-.dops-button.is-scary {
- color: #d94f4f; }
- .dops-button.is-scary:hover, .dops-button.is-scary:focus {
- border-color: #d94f4f; }
- .dops-button.is-scary:focus {
- box-shadow: 0 0 0 2px #eba3a3; }
- .dops-button.is-scary[disabled], .dops-button.is-scary:disabled {
- color: #f4cdcd;
- border-color: #eeeeee; }
-
-.dops-button.is-primary.is-scary {
- background: #d94f4f;
- border-color: #a02222;
- color: white; }
- .dops-button.is-primary.is-scary:hover, .dops-button.is-primary.is-scary:focus {
- border-color: #4c1010; }
- .dops-button.is-primary.is-scary[disabled], .dops-button.is-primary.is-scary:disabled {
- background: #eba3a3;
- border-color: #e48484; }
-
-.dops-button.is-borderless {
- border: none;
- color: #888888;
- padding-right: 0;
- padding-left: 0; }
- .dops-button.is-borderless:hover {
- color: #414141; }
- .dops-button.is-borderless:focus {
- box-shadow: none; }
- .dops-accessible-focus .dops-button.is-borderless:focus {
- outline: thin dotted; }
- .dops-button.is-borderless .gridicon {
- width: 24px;
- height: 24px;
- top: 6px; }
- .dops-button.is-borderless[disabled], .dops-button.is-borderless:disabled {
- color: #eeeeee;
- background: white;
- cursor: default; }
- .dops-button.is-borderless[disabled]:active, .dops-button.is-borderless:disabled:active {
- border-width: 0; }
- .dops-button.is-borderless.is-scary {
- color: #d94f4f; }
- .dops-button.is-borderless.is-scary:hover, .dops-button.is-borderless.is-scary:focus {
- color: #a02222; }
- .dops-button.is-borderless.is-scary[disabled] {
- color: #f4cdcd; }
- .dops-button.is-borderless.is-compact {
- background: transparent;
- border-radius: 0; }
- .dops-button.is-borderless.is-compact .gridicon {
- width: 18px;
- height: 18px;
- top: 5px; }
-
-.dops-button-group .dops-button {
- border-right-width: 0;
- border-radius: 0; }
- .dops-button-group .dops-button:focus {
- position: relative;
- z-index: z-index("button-group-parent", ".button-group .button:focus");
- box-shadow: inset -1px 0 0 #00aadc, 0 0 0 2px #78dcfa; }
- .dops-button-group .dops-button.is-primary:focus {
- box-shadow: inset -1px 0 0 #005082, 0 0 0 2px #78dcfa; }
- .dops-button-group .dops-button.is-scary:focus {
- box-shadow: inset -1px 0 0 #d94f4f, 0 0 0 2px #eba3a3; }
- .dops-button-group .dops-button.is-primary.is-scary:focus {
- box-shadow: inset -1px 0 0 #761919, 0 0 0 2px #eba3a3; }
- .dops-button-group .dops-button:first-child:focus {
- box-shadow: 0 0 0 2px #78dcfa; }
- .dops-button-group .dops-button.is-scary:first-child:focus {
- box-shadow: 0 0 0 2px #eba3a3; }
-
-.dops-button-group .dops-button:first-child {
- border-right-width: 1px;
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px; }
-
-.dops-button-group .dops-button:last-child {
- border-top-left-radius: 4px;
- border-bottom-left-radius: 4px; }
-
-.dops-section-header .dops-button-group .dops-button {
- margin-left: 0; }
-
-.dops-count {
- display: inline-block;
- padding: 0.0625rem 0.375rem;
- border: solid 1px #a2a2a2;
- border-radius: 0.75rem;
- font-size: 0.6875rem;
- font-weight: 600;
- line-height: 0.875rem;
- color: #a2a2a2;
- text-align: center; }
-
-/**
- * Select Dropdown
- */
-.dops-select-dropdown {
- height: 43px; }
- .dops-select-dropdown.is-compact {
- height: 28px; }
- .dops-select-dropdown.is-disabled .dops-select-dropdown__header {
- background: #f6f6f6;
- border-color: #eeeeee;
- color: #bbbbbb;
- -webkit-text-fill-color: #bbbbbb; }
-
-.dops-select-dropdown__container {
- position: relative;
- overflow: hidden;
- display: inline-block;
- width: auto;
- max-width: 100%; }
- .dops-select-dropdown.is-open .dops-select-dropdown__container {
- z-index: 170; }
- .dops-accessible-focus .dops-select-dropdown__container:focus,
- .dops-accessible-focus .dops-select-dropdown.is-open .dops-select-dropdown__container {
- z-index: 170;
- box-shadow: 0 0 0 2px #78dcfa; }
- .dops-accessible-focus .dops-select-dropdown__container:focus .select-dropdown__header,
- .dops-accessible-focus .dops-select-dropdown.is-open .dops-select-dropdown__container .select-dropdown__header {
- border-color: #0087be; }
- .dops-accessible-focus .dops-select-dropdown__container:focus {
- border-color: #00aadc;
- box-shadow: 0 0 0 2px #78dcfa;
- outline: 0;
- border-radius: 4px; }
-
-.dops-select-dropdown__header {
- padding: 11px 16px 11px 44px;
- border-style: solid;
- border-color: #d5d5d5;
- border-width: 1px 1px 2px;
- border-radius: 4px;
- background-color: white;
- font-size: 14px;
- font-weight: 600;
- line-height: 18px;
- height: 18px;
- color: #414141;
- transition: background-color 0.2s ease;
- cursor: pointer; }
- .dops-select-dropdown__header::after {
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- display: inline-block;
- vertical-align: middle;
- font: normal 16px/1 'Dashicons';
- content: '\f347';
- position: absolute;
- left: 13px;
- top: 12px;
- display: block;
- line-height: 18px;
- color: rgba(162, 162, 162, 0.5); }
- .is-compact .dops-select-dropdown__header::after {
- left: 4px;
- top: 4px; }
- .is-compact .dops-select-dropdown__header {
- padding: 7px;
- color: #888888;
- font-size: 11px;
- line-height: 1;
- text-transform: uppercase; }
- .is-compact .dops-select-dropdown__header .dops-count {
- border-width: 0;
- margin-right: 0;
- line-height: 1; }
- .dops-select-dropdown.is-open .dops-select-dropdown__header {
- border-radius: 4px 4px 0 0;
- box-shadow: none;
- background-color: #f6f6f6; }
- .dops-select-dropdown.is-open .dops-select-dropdown__header::after {
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- display: inline-block;
- vertical-align: middle;
- font: normal 16px/1 'Dashicons';
- content: '\f343'; }
- .dops-select-dropdown__header .dops-count {
- margin-right: 8px; }
-
-.dops-select-dropdown__header-text {
- display: block;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden; }
-
-.dops-select-dropdown__options {
- visibility: hidden;
- height: 0;
- box-sizing: border-box;
- padding: 0;
- list-style: none;
- margin: -2px 0 0 0;
- background-color: white;
- border: 1px solid #d5d5d5;
- border-radius: 0 0 4px 4px; }
- .dops-accessible-focus .dops-select-dropdown__options {
- border: solid 1px #0087be;
- border-top-color: #d5d5d5; }
- .dops-select-dropdown.is-open .dops-select-dropdown__options {
- visibility: visible;
- height: auto; }
-
-.dops-select-dropdown__option:last-child .dops-select-dropdown__item {
- border-radius: 0 0 4px 4px; }
-
-.dops-select-dropdown__item,
-.dops-select-dropdown__item-text {
- padding: 11px 16px 11px 44px; }
-
-.dops-select-dropdown__item {
- display: block;
- position: relative;
- font-size: 14px;
- font-weight: 400;
- line-height: 18px;
- color: #414141;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
- cursor: pointer; }
- .dops-select-dropdown__item::before {
- content: attr(data-bold-text);
- font-weight: 700;
- opacity: 0; }
- .dops-select-dropdown__item:visited {
- color: #414141; }
- .dops-select-dropdown__item.is-selected {
- background-color: #00aadc;
- color: white; }
- .dops-select-dropdown__item.is-disabled {
- background-color: white;
- color: #a2a2a2;
- cursor: default;
- opacity: .5; }
- .notouch .dops-select-dropdown__item:hover {
- color: #00aadc; }
- .notouch .dops-select-dropdown__item.is-selected:hover {
- color: white; }
-
-.dops-select-dropdown__item-text {
- padding-left: 16px;
- box-sizing: border-box;
- position: absolute;
- top: 0;
- right: 0;
- width: 100%;
- white-space: nowrap;
- text-overflow: ellipsis;
- color: inherit;
- display: flex;
- flex-flow: row wrap;
- justify-content: space-between; }
- .dops-select-dropdown__item-text .dops-count {
- color: inherit;
- border-color: inherit; }
-
-.dops-select-dropdown__separator {
- border-top: 1px solid #d5d5d5;
- display: block;
- margin: 8px 0; }
-
-.dops-select-dropdown__label {
- display: block;
- color: #bbbbbb;
- margin-top: 5px;
- line-height: 20px; }
- .dops-select-dropdown__label label {
- font-size: 12px;
- text-transform: uppercase;
- padding: 0px 16px 0px 16px; }
-
-@keyframes rotate-spinner__right {
- 0% {
- transform: rotate(0deg); }
- 25% {
- transform: rotate(-180deg); }
- 50% {
- transform: rotate(-180deg); }
- 75% {
- transform: rotate(-360deg); }
- 100% {
- transform: rotate(-360deg); } }
-
-@keyframes rotate-spinner__left {
- 0% {
- transform: rotate(0deg); }
- 25% {
- transform: rotate(0deg); }
- 50% {
- transform: rotate(-180deg); }
- 75% {
- transform: rotate(-180deg); }
- 100% {
- transform: rotate(-360deg); } }
-
-.dops-spinner.is-fallback {
- position: relative;
- border-radius: 100%;
- background-color: #d5d5d5; }
- .dops-spinner.is-fallback::before, .dops-spinner.is-fallback::after {
- content: '';
- position: absolute;
- background-color: white;
- border-radius: 50%; }
- .dops-spinner.is-fallback::before {
- width: 90%;
- height: 90%;
- top: 5%;
- right: 5%; }
- .dops-spinner.is-fallback::after {
- width: 70%;
- height: 70%;
- top: 15%;
- right: 15%; }
-
-.dops-spinner__image {
- display: block; }
-
-.dops-spinner__border {
- fill: #d5d5d5; }
-
-.dops-spinner__progress {
- animation: 3s linear infinite;
- transform-origin: 50px 50px;
- fill: #00aadc; }
-
-.dops-spinner.is-fallback .dops-spinner__progress {
- position: absolute;
- overflow: hidden;
- width: 50%;
- height: 100%;
- animation: none; }
- .dops-spinner.is-fallback .dops-spinner__progress::before {
- content: '';
- position: absolute;
- width: 100%;
- height: 100%;
- animation: 3s linear infinite;
- border-radius: 9999px;
- background-color: #00aadc;
- fill: none; }
- .dops-spinner.is-fallback .dops-spinner__progress.is-left {
- right: 0; }
- .dops-spinner.is-fallback .dops-spinner__progress.is-left::before {
- right: 100%;
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
- transform-origin: 100% 50%; }
- .dops-spinner.is-fallback .dops-spinner__progress.is-right {
- right: 50%; }
- .dops-spinner.is-fallback .dops-spinner__progress.is-right::before {
- right: -100%;
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- transform-origin: 0% 50%; }
-
-.dops-spinner__progress.is-left,
-.dops-spinner.is-fallback .dops-spinner__progress.is-left::before {
- animation-name: rotate-spinner__left; }
-
-.dops-spinner__progress.is-right,
-.dops-spinner.is-fallback .dops-spinner__progress.is-right::before {
- animation-name: rotate-spinner__right; }
-
-.gridicon {
- fill: currentColor; }
- .gridicon.needs-offset g {
- transform: translate(-1px, 1px);
- /* translates to .5px because it's in a child element */ }
- .gridicon.needs-offset-x g {
- transform: translate(-1px, 0);
- /* only nudges horizontally */ }
- .gridicon.needs-offset-y g {
- transform: translate(0, 1px);
- /* only nudges vertically */ }
-
-/**
- * @component Search
- */
-.dops-search {
- display: flex;
- flex: 1 1 auto;
- margin-bottom: 24px;
- width: 60px;
- height: 51px;
- position: relative;
- align-items: center;
- z-index: 22;
- transition: all 0.15s ease-in-out; }
- .dops-search .dops-search__icon-navigation {
- flex: 0 0 auto;
- display: flex;
- align-items: center;
- background-color: white;
- border-radius: inherit;
- height: 100%; }
- .dops-search .dops-search__open-icon,
- .dops-search .dops-search__close-icon {
- flex: 0 0 auto;
- width: 50px;
- z-index: 20;
- color: #0087be;
- cursor: pointer; }
- .accessible-focus .dops-search .dops-search__open-icon:focus, .accessible-focus
- .dops-search .dops-search__close-icon:focus {
- outline: dotted 1px #0087be; }
- .dops-search .dops-search__open-icon:hover {
- color: #555555; }
- .dops-search .dops-search__close-icon {
- color: #555555;
- opacity: 0;
- transition: opacity .2s ease-in; }
- .accessible-focus .dops-search.has-focus {
- box-shadow: 0 0 0 1px #0087be, 0 0 0 4px #78dcfa; }
-
-.dops-search.is-expanded-to-container {
- margin-bottom: 0;
- position: absolute;
- display: flex;
- height: 100%;
- width: 50px;
- top: 0;
- left: 0; }
- .dops-search.is-expanded-to-container .dops-search__input-fade {
- position: relative;
- flex: 1 1 auto;
- display: flex; }
- .dops-search.is-expanded-to-container .dops-search__input[type="search"] {
- flex: 1 1 auto;
- display: flex;
- margin: 0;
- box-shadow: none; }
-
-.dops-search__input[type="search"] {
- flex: 1 1 auto;
- display: none;
- z-index: 10;
- top: 0;
- border: none;
- border-radius: inherit;
- height: 100%;
- background: white;
- -moz-appearance: none;
- appearance: none;
- box-sizing: border-box;
- padding: 0px;
- -webkit-appearance: none; }
- .dops-search__input[type="search"]::-webkit-search-cancel-button {
- -webkit-appearance: none; }
- .dops-search__input[type="search"]:focus {
- box-shadow: none;
- border: none; }
-
-.dops-search.is-open {
- width: 100%; }
- .dops-search.is-open .dops-search__open-icon {
- color: #555555; }
- .dops-search.is-open .dops-search__close-icon {
- display: inline-block; }
- .dops-search.is-open .dops-search__input,
- .dops-search.is-open .dops-search__close-icon {
- opacity: 1; }
- .dops-search.is-open .dops-search__input {
- display: block; }
- .dops-search.is-open .dops-search__input-fade {
- flex: 1 1 auto;
- height: 100%;
- position: relative;
- font-size: 16px;
- border-radius: inherit; }
- .dops-search.is-open .dops-search__input-fade::before {
- content: '';
- display: block;
- position: absolute;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- pointer-events: none;
- z-index: 12;
- background: linear-gradient(to left, rgba(255, 255, 255, 0), white 90%);
- top: 0px;
- bottom: 0px;
- left: 0px;
- right: auto;
- width: 32px;
- height: auto;
- border-radius: inherit; }
- .dops-search.is-open .dops-search__input-fade.ltr { }
- .dops-search.is-open .dops-search__input-fade.ltr::before {
- content: '';
- display: block;
- position: absolute;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- pointer-events: none;
- z-index: 12;
- background: linear-gradient(to right, rgba(255, 255, 255, 0), white 90%);
- top: 0px;
- bottom: 0px;
- right: 0px;
- left: auto;
- width: 32px;
- height: auto;
- border-radius: inherit; }
-
-.dops-search__input-fade .dops-search__text-overlay {
- color: transparent;
- position: absolute;
- pointer-events: none;
- white-space: nowrap;
- display: flex;
- align-items: center;
- flex: 1 1 auto;
- overflow: hidden;
- font: inherit;
- width: 100%;
- height: 100%;
- top: 0px;
- right: 0px;
- z-index: 11; }
-
-.dops-search .dops-spinner {
- display: none; }
-
-.dops-search.is-searching .dops-search__open-icon {
- display: none; }
-
-.dops-search.is-searching .dops-spinner {
- flex: 0 0 auto;
- display: flex;
- align-items: center;
- height: 100%;
- z-index: 20; }
- .dops-search.is-searching .dops-spinner .dops-spinner__image {
- width: 50px; }
-
-.animating.dops-search-opening .dops-search input {
- opacity: 1; }
-
-/**
- * Section Nav
- */
-.dops-section-nav {
- position: relative;
- width: 100%;
- padding: 0;
- margin: 0 0 17px 0;
- background: white;
- box-sizing: border-box;
- box-shadow: 0 0 0 1px rgba(213, 213, 213, 0.5), 0 1px 2px #eeeeee; }
- .dops-section-nav.is-empty .dops-section-nav__panel {
- visibility: hidden; }
- @media (max-width: 480px) {
- .dops-section-nav.is-open {
- box-shadow: 0 0 0 1px #a2a2a2, 0 2px 4px #d5d5d5; } }
- @media (min-width: 481px) {
- .dops-section-nav.has-pinned-items {
- padding-left: 60px; } }
- @media (min-width: 481px) and (max-width: 660px) {
- .dops-section-nav.has-pinned-items {
- padding-left: 50px; } }
- @media (max-width: 660px) {
- .dops-section-nav {
- margin-bottom: 9px; } }
-
-.dops-section-nav__mobile-header {
- display: flex;
- padding: 15px;
- font-size: 14px;
- line-height: 16px;
- color: #414141;
- font-weight: 600;
- cursor: pointer; }
- .dops-section-nav__mobile-header:after {
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- display: inline-block;
- vertical-align: middle;
- font: normal 16px/1 'Dashicons';
- content: '\f347';
- line-height: 16px;
- color: rgba(162, 162, 162, 0.5); }
- .dops-section-nav.is-open .dops-section-nav__mobile-header:after {
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- display: inline-block;
- vertical-align: middle;
- font: normal 16px/1 'Dashicons';
- content: '\f343'; }
- .dops-section-nav.has-pinned-items .dops-section-nav__mobile-header {
- padding-left: 50px; }
- .dops-section-nav.has-pinned-items .dops-section-nav__mobile-header:after {
- margin-right: 8px; }
- @media (min-width: 481px) {
- .dops-section-nav__mobile-header {
- display: none; } }
-
-.dops-section-nav__mobile-header-text {
- width: 0;
- flex: 1 0 auto;
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis; }
- .dops-section-nav__mobile-header-text small {
- margin-right: 5px;
- font-size: 11px;
- color: #a2a2a2;
- font-weight: 600;
- text-transform: uppercase; }
- .dops-section-nav.has-pinned-items .dops-section-nav__mobile-header-text {
- width: auto;
- flex: 0 1 auto; }
-
-.dops-section-nav__panel {
- box-sizing: border-box;
- width: 100%; }
- @media (max-width: 480px) {
- .dops-section-nav.is-open .dops-section-nav__panel {
- padding-bottom: 15px;
- border-top: solid 1px #d5d5d5;
- background: linear-gradient(to bottom, #f6f6f6 0%, white 4px); } }
- @media (min-width: 481px) {
- .dops-section-nav__panel {
- display: flex;
- align-items: center; }
- .dops-section-nav__panel:first-child {
- width: 0;
- flex: 1 0 auto; } }
-
-.dops-section-nav-group {
- position: relative;
- margin-top: 16px;
- padding-top: 16px;
- border-top: solid 1px #d5d5d5; }
- .dops-section-nav-group:first-child {
- padding-top: 0;
- border-top: none; }
- @media (max-width: 480px) {
- .dops-section-nav-group {
- display: none; }
- .dops-section-nav.is-open .dops-section-nav-group {
- display: block; } }
- @media (min-width: 481px) {
- .dops-section-nav-group {
- margin-top: 0;
- padding-top: 0;
- border-top: none; }
- .dops-section-nav-group:first-child {
- display: flex;
- width: 0;
- flex: 1 0 auto; } }
-
-.dops-section-nav__button {
- width: 100%;
- margin-top: 24px; }
-
-.dops-section-nav__hr {
- background: #eeeeee; }
-
-.dops-section-nav-group__label {
- display: none;
- margin-bottom: 8px;
- padding: 0 15px;
- font-size: 11px;
- color: #a2a2a2;
- font-weight: 600;
- text-transform: uppercase;
- line-height: 12px; }
- @media (max-width: 480px) {
- .has-siblings .dops-section-nav-group__label {
- display: block; } }
-
-.dops-section-nav-group__label-text {
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden; }
-
-.dops-section-nav-tab .count {
- margin-right: 8px; }
-
-@media (min-width: 481px) {
- .dops-section-nav-tabs {
- width: 0;
- flex: 1 0 auto; }
- .dops-section-nav-tabs.is-dropdown {
- position: relative;
- width: auto;
- flex: 0 1 auto;
- margin: 8px; } }
-
-.dops-section-nav-tabs__list {
- margin: 0;
- list-style: none; }
- @media (min-width: 481px) {
- .dops-section-nav-tabs__list {
- display: flex;
- width: 100%;
- overflow: hidden; }
- .is-dropdown .dops-section-nav-tabs__list {
- display: none; } }
-
-.dops-section-nav-tab {
- margin-bottom: 0; }
- @media (min-width: 481px) {
- .dops-section-nav-tab {
- width: auto;
- flex: none;
- border-bottom: 2px solid transparent;
- border-top: none;
- text-align: center; }
- .dops-section-nav-tab.is-selected {
- border-bottom-color: #414141; } }
-
-.dops-section-nav-tab__link,
-.dops-section-nav-tab__text {
- overflow: hidden;
- white-space: nowrap;
- text-overflow: ellipsis; }
-
-.dops-section-nav-tab__link {
- display: flex;
- align-items: center;
- box-sizing: border-box;
- padding: 15px;
- width: 100%;
- font-size: 14px;
- font-weight: 600;
- line-height: 18px;
- color: #414141;
- cursor: pointer; }
- .dops-section-nav-tab__link:visited {
- color: #414141; }
- .dops-section-nav-tab__link[disabled],
- .notouch .dops-section-nav-tab__link[disabled]:hover {
- color: #eeeeee;
- cursor: default; }
- .is-selected .dops-section-nav-tab__link {
- color: white;
- background-color: #00aadc; }
- .dops-section-nav-tab__link:focus {
- outline: none;
- box-shadow: none; }
- .dops-accessible-focus .dops-section-nav-tab__link:focus {
- outline: solid #a2a2a2 1px; }
- .is-external .dops-section-nav-tab__link:after {
- font-size: 18px;
- padding-right: 2px; }
- .notouch .dops-section-nav-tab__link:hover {
- color: #00aadc; }
- .notouch .is-selected .dops-section-nav-tab__link:hover {
- color: white; }
- @media (min-width: 481px) {
- .dops-section-nav-tab__link {
- display: block;
- width: auto;
- padding: 16px 16px 14px 16px;
- color: #0087be;
- font-weight: 400; }
- .dops-section-nav-tab__link:visited {
- color: #0087be; }
- .is-selected .dops-section-nav-tab__link {
- color: #414141;
- background-color: transparent; }
- .is-selected .dops-section-nav-tab__link:after {
- display: none; }
- .notouch .is-selected .dops-section-nav-tab__link:hover {
- color: #414141; } }
-
-.dops-section-nav-tab__text {
- display: block;
- flex: 1 0 auto;
- width: 0;
- color: inherit; }
- @media (min-width: 481px) {
- .dops-section-nav-tab__text {
- display: inline;
- flex: none;
- width: auto; } }
-
-.dops-section-nav-tabs__dropdown {
- position: relative;
- z-index: 3;
- width: 100%; }
- .dops-section-nav-tabs__dropdown.is-open {
- z-index: 4; }
- .dops-section-nav-tabs__dropdown .dops-select-dropdown__container {
- position: static; }
-
-.dops-section-nav__segmented .dops-segmented-control {
- margin: 0 15px; }
-
-.dops-section-nav__segmented .dops-segmented-control__link {
- padding: 3px 16px 5px; }
-
-@media (max-width: 480px) {
- .dops-section-nav .dops-search.is-pinned {
- height: 46px; } }
-
-#jp-plugin-container {
- min-height: 100vh; }
-
-/* Card */
-.dops-card {
- display: block;
- position: relative;
- margin: 0 auto 10px auto;
- padding: 16px;
- box-sizing: border-box;
- background: white;
- box-shadow: 0 0 0 1px rgba(213, 213, 213, 0.5), 0 1px 2px #eeeeee; }
- .dops-card:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden; }
- @media (min-width: 481px) {
- .dops-card {
- margin-bottom: 16px;
- padding: 24px; } }
- .dops-card.is-compact {
- margin-bottom: 1px; }
- @media (min-width: 481px) {
- .dops-card.is-compact {
- margin-bottom: 1px;
- padding: 16px 24px; } }
- .dops-card.is-card-link {
- padding-left: 48px; }
-
-.dops-card__link-indicator {
- color: #d5d5d5;
- display: block;
- height: 100%;
- position: absolute;
- top: 0;
- left: 16px; }
-
-a.dops-card:hover .dops-card__link-indicator {
- color: #bbbbbb; }
-
-a.dops-card:focus {
- outline: 0; }
- a.dops-card:focus .dops-card__link-indicator {
- color: tint(#00aadc, 20%); }
-
-.dops-text-input.dops-text-input {
- box-sizing: border-box;
- margin: 0;
- padding: 7px 14px;
- width: 100%;
- color: #414141;
- font-size: 16px;
- line-height: 1.5;
- border: 1px solid #d5d5d5;
- background-color: white;
- transition: all .15s ease-in-out;
- box-shadow: none; }
- .dops-text-input.dops-text-input:-ms-input-placeholder {
- color: #a2a2a2; }
- .dops-text-input.dops-text-input::-ms-input-placeholder {
- color: #a2a2a2; }
- .dops-text-input.dops-text-input::placeholder {
- color: #a2a2a2; }
- .dops-text-input.dops-text-input:hover {
- border-color: #bbbbbb; }
- .dops-text-input.dops-text-input:focus {
- border-color: #0087be;
- outline: none;
- box-shadow: 0 0 0 2px #78dcfa; }
- .dops-text-input.dops-text-input:focus::-ms-clear {
- display: none; }
- .dops-text-input.dops-text-input:disabled {
- background: #f6f6f6;
- border-color: #eeeeee;
- color: #bbbbbb;
- -webkit-text-fill-color: #bbbbbb; }
- .dops-text-input.dops-text-input:disabled:hover {
- cursor: default; }
- .dops-text-input.dops-text-input:disabled:-ms-input-placeholder {
- color: #bbbbbb; }
- .dops-text-input.dops-text-input:disabled::-ms-input-placeholder {
- color: #bbbbbb; }
- .dops-text-input.dops-text-input:disabled::placeholder {
- color: #bbbbbb; }
-
-.dops-text-input.dops-text-input {
- -webkit-appearance: none; }
- .dops-text-input.dops-text-input.is-valid {
- border-color: #4ab866; }
- .dops-text-input.dops-text-input.is-valid:hover {
- border-color: #3a9551; }
- .dops-text-input.dops-text-input.is-error {
- border-color: #d94f4f; }
- .dops-text-input.dops-text-input.is-error:hover {
- border-color: #c92c2c; }
- .dops-text-input.dops-text-input:focus.is-valid {
- box-shadow: 0 0 0 2px #caead2; }
- .dops-text-input.dops-text-input:focus.is-valid:hover {
- box-shadow: 0 0 0 2px #a6dcb3; }
- .dops-text-input.dops-text-input:focus.is-error {
- box-shadow: 0 0 0 2px #f9e2e2; }
- .dops-text-input.dops-text-input:focus.is-error:hover {
- box-shadow: 0 0 0 2px #f0b8b8; }
-
-/**
- * "popover" theme for `component/tip`.
- */
-.dops-popover {
- font-size: 11px;
- z-index: 1000;
- position: absolute;
- top: 0;
- left: 0 ;
- right: auto ; }
- .dops-popover .dops-popover__inner {
- background-color: white;
- border: 1px solid #d5d5d5;
- border-radius: 4px;
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1), 0 0 56px rgba(0, 0, 0, 0.075);
- text-align: center;
- position: relative; }
- .dops-popover .dops-popover__arrow {
- border: 10px dashed #d5d5d5;
- height: 0;
- line-height: 0;
- position: absolute;
- width: 0;
- z-index: 1; }
- .dops-popover.fade {
- transition: opacity 100ms; }
- .dops-popover.is-top .dops-popover__arrow,
- .dops-popover.is-top-left .dops-popover__arrow,
- .dops-popover.is-top-right .dops-popover__arrow {
- bottom: 0 ;
- left: 50% ;
- margin-left: -10px;
- border-top-style: solid;
- border-bottom: none;
- border-left-color: transparent;
- border-right-color: transparent; }
- .dops-popover.is-top .dops-popover__arrow::before,
- .dops-popover.is-top-left .dops-popover__arrow::before,
- .dops-popover.is-top-right .dops-popover__arrow::before {
- bottom: 2px ;
- border: 10px solid white;
- content: " ";
- position: absolute;
- left: 50% ;
- margin-left: -10px;
- border-top-style: solid;
- border-bottom: none;
- border-left-color: transparent;
- border-right-color: transparent; }
- .dops-popover.is-bottom .dops-popover__arrow,
- .dops-popover.is-bottom-left .dops-popover__arrow,
- .dops-popover.is-bottom-right .dops-popover__arrow {
- top: 0 ;
- left: 50% ;
- margin-left: -10px;
- border-bottom-style: solid;
- border-top: none;
- border-left-color: transparent;
- border-right-color: transparent; }
- .dops-popover.is-bottom .dops-popover__arrow::before,
- .dops-popover.is-bottom-left .dops-popover__arrow::before,
- .dops-popover.is-bottom-right .dops-popover__arrow::before {
- top: 2px ;
- border: 10px solid white;
- content: " ";
- position: absolute;
- left: 50% ;
- margin-left: -10px;
- border-bottom-style: solid;
- border-top: none;
- border-left-color: transparent;
- border-right-color: transparent; }
- .dops-popover.is-left .dops-popover__arrow,
- .dops-popover.is-left-top .dops-popover__arrow,
- .dops-popover.is-left-bottom .dops-popover__arrow {
- right: 0 ;
- top: 50% ;
- margin-top: -10px;
- border-left-style: solid;
- border-right: none;
- border-top-color: transparent;
- border-bottom-color: transparent; }
- .dops-popover.is-left .dops-popover__arrow::before,
- .dops-popover.is-left-top .dops-popover__arrow::before,
- .dops-popover.is-left-bottom .dops-popover__arrow::before {
- right: 2px ;
- border: 10px solid white;
- content: " ";
- position: absolute;
- top: 50% ;
- margin-top: -10px;
- border-left-style: solid;
- border-right: none;
- border-top-color: transparent;
- border-bottom-color: transparent; }
- .dops-popover.is-right .dops-popover__arrow,
- .dops-popover.is-right-top .dops-popover__arrow,
- .dops-popover.is-right-bottom .dops-popover__arrow {
- left: 0 ;
- top: 50% ;
- margin-top: -10px;
- border-right-style: solid;
- border-left: none;
- border-top-color: transparent;
- border-bottom-color: transparent; }
- .dops-popover.is-right .dops-popover__arrow::before,
- .dops-popover.is-right-top .dops-popover__arrow::before,
- .dops-popover.is-right-bottom .dops-popover__arrow::before {
- left: 2px ;
- border: 10px solid white;
- content: " ";
- position: absolute;
- top: 50% ;
- margin-top: -10px;
- border-right-style: solid;
- border-left: none;
- border-top-color: transparent;
- border-bottom-color: transparent; }
- .dops-popover.is-top-left, .dops-popover.is-bottom-left, .dops-popover.is-top-right, .dops-popover.is-bottom-right {
- padding-left: 0;
- padding-right: 0; }
- .dops-popover.is-top-left .dops-popover__arrow,
- .dops-popover.is-bottom-left .dops-popover__arrow {
- left: auto ;
- right: 5px ; }
- .dops-popover.is-top-right .dops-popover__arrow,
- .dops-popover.is-bottom-right .dops-popover__arrow {
- left: 15px ; }
- .dops-popover.is-top .dops-popover__inner,
- .dops-popover.is-top-left .dops-popover__inner,
- .dops-popover.is-top-right .dops-popover__inner {
- top: -10px ; }
- .dops-popover.is-left .dops-popover__inner,
- .dops-popover.is-top-right .dops-popover__inner,
- .dops-popover.is-bottom-right .dops-popover__inner {
- left: -10px ; }
- .dops-popover.is-bottom .dops-popover__inner,
- .dops-popover.is-bottom-left .dops-popover__inner,
- .dops-popover.is-bottom-right .dops-popover__inner {
- top: 10px ; }
- .dops-popover.is-right .dops-popover__inner,
- .dops-popover.is-top-left .dops-popover__inner,
- .dops-popover.is-bottom-left .dops-popover__inner {
- left: 10px ; }
- .dops-popover.is-dialog-visible {
- z-index: 100300;
- /* Above .dialog */ }
-
-.dops-popover__menu {
- display: flex;
- flex-direction: column;
- min-width: 200px; }
-
-.dops-popover__menu-item {
- position: relative;
- background: inherit;
- border: none;
- border-radius: 0;
- color: #414141;
- cursor: pointer;
- display: block;
- font-size: 14px;
- font-weight: 400;
- margin: 0;
- padding: 8px 16px;
- text-align: right;
- transition: all 0.05s ease-in-out; }
- .dops-popover__menu-item:first-child {
- margin-top: 5px; }
- .dops-popover__menu-item:hover, .dops-popover__menu-item:focus {
- background-color: #00aadc;
- border: 0;
- box-shadow: none;
- color: white; }
- .dops-popover__menu-item:hover .gridicon, .dops-popover__menu-item:focus .gridicon {
- color: white; }
- .dops-popover__menu-item[disabled]:hover, .dops-popover__menu-item[disabled]:focus {
- background: transparent;
- cursor: default; }
- .dops-popover__menu-item:last-child {
- margin-bottom: 5px; }
- .dops-popover__menu-item::-moz-focus-inner {
- border: 0; }
- .dops-popover__menu-item.has-icon {
- padding-right: 42px; }
- .dops-popover__menu-item .gridicon {
- color: #bbbbbb;
- vertical-align: bottom;
- margin-left: 8px; }
-
-.dops-popover__hr {
- margin: 8px 0;
- background: #eeeeee; }
-
-.form-toggle[type="checkbox"] {
- display: none; }
-
-.form-toggle__switch {
- flex: none;
- position: relative;
- display: inline-block;
- border-radius: 12px;
- box-sizing: border-box;
- padding: 2px;
- width: 40px;
- height: 24px;
- vertical-align: middle;
- outline: 0;
- cursor: pointer;
- transition: all .4s ease, box-shadow 0s; }
- .form-toggle__switch:before, .form-toggle__switch:after {
- position: relative;
- display: block;
- content: "";
- width: 20px;
- height: 20px; }
- .form-toggle__switch:after {
- right: 0;
- border-radius: 50%;
- background: white;
- transition: all .2s ease; }
- .form-toggle__switch:before {
- display: none; }
- .dops-accessible-focus .form-toggle__switch:focus {
- box-shadow: 0 0 0 2px #00aadc; }
-
-.form-toggle__label {
- display: flex;
- cursor: pointer; }
- .is-disabled .form-toggle__label {
- cursor: default; }
- .form-toggle__label .form-toggle__label-content {
- flex: 0 1 100%;
- margin-right: 12px; }
-
-.dops-accessible-focus .form-toggle:focus + .form-toggle__label .form-toggle__switch {
- box-shadow: 0 0 0 2px #00aadc; }
-
-.dops-accessible-focus .form-toggle:focus:checked + .form-toggle__label .form-toggle__switch {
- box-shadow: 0 0 0 2px #78dcfa; }
-
-.form-toggle + .form-toggle__label .form-toggle__switch {
- background: #bbbbbb; }
-
-.form-toggle:not(:disabled) + .form-toggle__label:hover .form-toggle__switch {
- background: #d5d5d5; }
-
-.form-toggle:checked + .form-toggle__label .form-toggle__switch {
- background: #00aadc; }
- .form-toggle:checked + .form-toggle__label .form-toggle__switch:after {
- right: 16px; }
-
-.form-toggle:checked:not(:disabled) + .form-toggle__label:hover .form-toggle__switch {
- background: #78dcfa; }
-
-.form-toggle:disabled + label.form-toggle__label span.form-toggle__switch {
- opacity: 0.25;
- cursor: default; }
-
-.form-toggle.is-toggling + .form-toggle__label .form-toggle__switch {
- background: #00aadc; }
-
-.form-toggle.is-toggling:checked + .form-toggle__label .form-toggle__switch {
- background: #d5d5d5; }
-
-.form-toggle.is-compact + .form-toggle__label .form-toggle__switch {
- border-radius: 8px;
- width: 24px;
- height: 16px; }
- .form-toggle.is-compact + .form-toggle__label .form-toggle__switch:before, .form-toggle.is-compact + .form-toggle__label .form-toggle__switch:after {
- width: 12px;
- height: 12px; }
-
-.form-toggle.is-compact:checked + .form-toggle__label .form-toggle__switch:after {
- right: 8px; }
-
-.dops-section-header.dops-card {
- display: flex;
- flex-wrap: wrap;
- max-width: 100%;
- padding-top: 0.6875rem;
- padding-bottom: 0.6875rem;
- position: relative; }
- .dops-section-header.dops-card:after {
- content: ''; }
-
-.dops-section-header__label {
- display: flex;
- align-items: center;
- flex-grow: 1;
- min-width: 0;
- line-height: 1.75rem;
- position: relative;
- color: #414141;
- font-size: 0.875rem; }
- .dops-section-header__label .dops-count {
- margin-right: 0.5rem; }
-
-.dops-section-header__label-text {
- position: relative;
- margin-left: 0.5rem;
- white-space: nowrap;
- overflow: hidden;
- width: 100%;
- padding-left: 0.5rem;
- min-width: 0; }
- .dops-section-header__label-text:before {
- content: '';
- display: block;
- position: absolute;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- pointer-events: none;
- background: linear-gradient(to left, rgba(255, 255, 255, 0), white 90%);
- top: 0px;
- bottom: 0px;
- left: 0px;
- right: auto;
- width: 8px;
- height: auto; }
- .has-card-badge .dops-section-header__label-text {
- width: auto; }
-
-.dops-section-header__actions {
- flex-grow: 0;
- position: relative; }
- .dops-section-header__actions:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden; }
-
-.section-header__actions .button {
- float: right;
- margin-left: 0.5rem; }
- .section-header__actions .button:last-child {
- margin-left: 0; }
-
-#jp-plugin-container {
- min-height: 100vh; }
-
-@keyframes appear {
- 0% {
- opacity: 0; }
- 100% {
- opacity: 1; } }
-
-.dops-notice {
- display: flex;
- position: relative;
- width: 100%;
- margin-bottom: 24px;
- box-sizing: border-box;
- animation: appear .3s ease-in-out;
- background: #414141;
- color: white;
- border-radius: 3px;
- line-height: 1.5; }
- .dops-notice.is-success .dops-notice__icon-wrapper {
- background: #4ab866; }
- .dops-notice.is-warning .dops-notice__icon-wrapper {
- background: #f0b849; }
- .dops-notice.is-error .dops-notice__icon-wrapper {
- background: #d94f4f; }
- .dops-notice.is-info .dops-notice__icon-wrapper {
- background: #00aadc; }
- .dops-notice .dops-notice__dismiss {
- overflow: hidden; }
- .dops-notice.is-success .dops-notice__dismiss, .dops-notice.is-error .dops-notice__dismiss, .dops-notice.is-warning .dops-notice__dismiss, .dops-notice.is-info .dops-notice__dismiss {
- overflow: hidden; }
-
-.dops-notice__icon-wrapper {
- background: #747474;
- color: white;
- display: flex;
- align-items: baseline;
- width: 47px;
- justify-content: center;
- border-radius: 0 3px 3px 0;
- flex-shrink: 0;
- align-self: stretch; }
- .dops-notice__icon-wrapper .gridicon {
- margin-top: 10px; }
- @media (min-width: 481px) {
- .dops-notice__icon-wrapper .gridicon {
- margin-top: 12px; } }
-
-.dops-notice__content {
- padding: 13px;
- font-size: 12px;
- flex-grow: 1; }
- @media (min-width: 481px) {
- .dops-notice__content {
- font-size: 14px; } }
-
-.dops-notice__text a.dops-notice__text-no-underline {
- text-decoration: none; }
-
-.dops-notice__text a,
-.dops-notice__text a:visited {
- text-decoration: underline;
- color: white; }
- .dops-notice__text a:hover,
- .dops-notice__text a:visited:hover {
- color: white;
- text-decoration: none; }
-
-.dops-notice__text ul {
- margin-bottom: 0;
- margin-right: 0; }
-
-.dops-notice__text li {
- margin-right: 2em;
- margin-top: 0.5em; }
-
-.dops-notice__text p {
- margin-bottom: 0;
- margin-top: 0.5em; }
- .dops-notice__text p:first-child {
- margin-top: 0; }
-
-.dops-notice__button {
- cursor: pointer;
- margin-right: 0.428em; }
-
-.dops-notice__dismiss {
- flex-shrink: 0;
- padding: 12px;
- cursor: pointer;
- padding-bottom: 0; }
- .dops-notice__dismiss .gridicon {
- width: 18px;
- height: 18px; }
- @media (min-width: 481px) {
- .dops-notice__dismiss {
- padding: 11px;
- padding-bottom: 0; }
- .dops-notice__dismiss .gridicon {
- width: 24px;
- height: 24px; } }
- .dops-notice .dops-notice__dismiss {
- color: #bbbbbb; }
- .dops-notice .dops-notice__dismiss:hover, .dops-notice .dops-notice__dismiss:focus {
- color: white; }
-
-a.dops-notice__action {
- cursor: pointer;
- font-size: 12px;
- font-weight: 400;
- text-decoration: none;
- white-space: nowrap;
- color: #bbbbbb;
- padding: 13px;
- display: flex;
- align-items: center; }
- @media (min-width: 481px) {
- a.dops-notice__action {
- flex-shrink: 1;
- flex-grow: 0;
- align-items: center;
- border-radius: 0;
- font-size: 14px;
- margin: 0 auto 0 0;
- padding: 13px 16px; }
- a.dops-notice__action .gridicon {
- width: 24px;
- height: 24px; } }
- a.dops-notice__action:visited {
- color: #bbbbbb; }
- a.dops-notice__action:hover {
- color: white; }
- a.dops-notice__action .gridicon {
- margin-right: 8px;
- opacity: 0.7;
- width: 18px;
- height: 18px; }
-
-.dops-notice.is-compact {
- display: inline-flex;
- flex-wrap: nowrap;
- flex-direction: row;
- width: auto;
- border-radius: 3px;
- min-height: 20px;
- margin: 0;
- padding: 0;
- text-decoration: none;
- text-transform: none;
- vertical-align: middle;
- line-height: 1.5; }
- .dops-notice.is-compact .dops-notice__content {
- font-size: 12px;
- padding: 6px 10px; }
- .dops-notice.is-compact .dops-notice__icon-wrapper {
- width: 28px; }
- .dops-notice.is-compact .dops-notice__icon-wrapper .dops-notice__icon {
- width: 18px;
- height: 18px;
- margin: 0; }
- .dops-notice.is-compact .dops-notice__icon-wrapper .gridicon {
- margin-top: 6px; }
- .dops-notice.is-compact .dops-notice__dismiss {
- position: relative;
- align-self: center;
- flex: none;
- margin: 0 0 0 8px;
- padding: 0; }
- .dops-notice.is-compact .dops-notice__dismiss .gridicon {
- width: 18px;
- height: 18px; }
- .dops-notice.is-compact a.dops-notice__action {
- background: transparent;
- display: inline-block;
- margin: 0;
- font-size: 12px;
- align-self: center;
- margin-right: 16px;
- padding: 0 10px; }
- .dops-notice.is-compact a.dops-notice__action:hover, .dops-notice.is-compact a.dops-notice__action:active, .dops-notice.is-compact a.dops-notice__action:focus {
- background: transparent; }
- .dops-notice.is-compact a.dops-notice__action .gridicon {
- margin-right: 8px;
- width: 14px;
- height: 14px;
- vertical-align: sub;
- opacity: 1; }
-
-.dops-plan-icon {
- width: inherit;
- height: inherit;
- background-repeat: no-repeat; }
-
-.dops-plan-icon__free .dops-plan-icon__free-0 {
- fill: #78dcfa; }
-
-.dops-plan-icon__free .dops-plan-icon__free-1 {
- fill: white; }
-
-.dops-plan-icon__free .dops-plan-icon__free-2 {
- fill: #006a95; }
-
-.dops-plan-icon__free .dops-plan-icon__free-3 {
- fill: #0087be; }
-
-.dops-plan-icon__free .dops-plan-icon__free-4 {
- fill: #00a4e7; }
-
-.dops-plan-icon__personal .dops-plan-icon__personal-0 {
- fill: #f0b849; }
-
-.dops-plan-icon__personal .dops-plan-icon__personal-1 {
- fill: #a2a2a2; }
-
-.dops-plan-icon__personal .dops-plan-icon__personal-2 {
- fill: #d5d5d5; }
-
-.dops-plan-icon__personal .dops-plan-icon__personal-3 {
- fill: white; }
-
-.dops-plan-icon__personal .dops-plan-icon__personal-4 {
- fill: #888888; }
-
-.dops-plan-icon__personal .dops-plan-icon__personal-5 {
- fill: #6f6f6f; }
-
-.dops-plan-icon__premium .dops-plan-icon__premium-0 {
- fill: #4ab866; }
-
-.dops-plan-icon__premium .dops-plan-icon__premium-1 {
- fill: #a2a2a2; }
-
-.dops-plan-icon__premium .dops-plan-icon__premium-2 {
- fill: #6f6f6f; }
-
-.dops-plan-icon__premium .dops-plan-icon__premium-3 {
- fill: white; }
-
-.dops-plan-icon__premium .dops-plan-icon__premium-4 {
- fill: #d5d5d5; }
-
-.dops-plan-icon__premium .dops-plan-icon__premium-5 {
- fill: #6f6f6f; }
-
-.dops-plan-icon__premium .dops-plan-icon__premium-6 {
- fill: #555555; }
-
-.dops-plan-icon__business .dops-plan-icon__business-0 {
- fill: #855DA6; }
-
-.dops-plan-icon__business .dops-plan-icon__business-1 {
- fill: white; }
-
-.dops-plan-icon__business .dops-plan-icon__business-2 {
- fill: #eeeeee; }
-
-.dops-plan-icon__business .dops-plan-icon__business-3 {
- fill: #0087be; }
-
-.dops-plan-icon__business .dops-plan-icon__business-4 {
- fill: #005082; }
-
-@charset "UTF-8";
-#jp-plugin-container {
- min-height: 100vh; }
-
-/*
-The MIT License (MIT)
-
-Copyright © 2011–2015 thoughtbot, inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
-documentation files (the “Software”), to deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
-persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial
-portions of the Software.
-
-THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-https://github.com/thoughtbot/bourbon
-*/
-.dops-banner.dops-card {
- border-right: 3px solid;
- display: flex;
- padding: 12px 12px 12px 6px;
- position: relative;
- z-index: 2;
- border-right-color: #0087be; }
- .dops-banner.dops-card.is-card-link {
- padding: 12px 16px 12px 48px; }
- .dops-banner.dops-card.is-dismissible {
- padding-left: 48px; }
- .dops-banner.dops-card .dops-banner__icon {
- color: #0087be; }
- .dops-banner.dops-card .dops-banner__icon-circle {
- background-color: #0087be; }
- .dops-banner.dops-card.is-jetpack-info {
- border-right-color: #00BE28; }
- .dops-banner.dops-card.is-jetpack-info .dops-banner__icon {
- color: #00BE28; }
- .dops-banner.dops-card.is-jetpack-info .dops-banner__icon-circle {
- background-color: #00BE28; }
- .dops-banner.dops-card.is-upgrade-personal {
- border-right-color: #f0b849; }
- .dops-banner.dops-card.is-upgrade-personal .dops-banner__icon {
- color: #f0b849; }
- .dops-banner.dops-card.is-upgrade-personal .dops-banner__icon-circle {
- background-color: #f0b849; }
- .dops-banner.dops-card.is-upgrade-premium {
- border-right-color: #4ab866; }
- .dops-banner.dops-card.is-upgrade-premium .dops-banner__icon {
- color: #4ab866; }
- .dops-banner.dops-card.is-upgrade-premium .dops-banner__icon-circle {
- background-color: #4ab866; }
- .dops-banner.dops-card.is-upgrade-business {
- border-right-color: #855DA6; }
- .dops-banner.dops-card.is-upgrade-business .dops-banner__icon {
- color: #855DA6; }
- .dops-banner.dops-card.is-upgrade-business .dops-banner__icon-circle {
- background-color: #855DA6; }
- .dops-banner.dops-card .dops-card__link-indicator {
- align-items: center;
- color: #0087be;
- display: flex; }
- .dops-banner.dops-card:hover {
- transition: all 100ms ease-in-out; }
- .dops-banner.dops-card:hover.is-card-link {
- box-shadow: 0 0 0 1px #a2a2a2, 0 2px 4px #d5d5d5; }
- .dops-banner.dops-card:hover .dops-card__link-indicator {
- color: #005082; }
- @media (min-width: 481px) {
- .dops-banner.dops-card {
- padding: 12px 16px; }
- .dops-banner.dops-card.is-dismissible {
- padding-left: 16px; } }
-
-.dops-banner__icons {
- display: flex; }
- .dops-banner__icons .dops-banner__icon,
- .dops-banner__icons .dops-banner__icon-circle {
- border-radius: 50%;
- flex-shrink: 0;
- height: 24px;
- margin-left: 16px;
- margin-top: -2px;
- text-align: center;
- top: 4px;
- width: 24px; }
- .dops-banner__icons .dops-banner__icon {
- align-self: center;
- color: white;
- display: block; }
- .dops-banner__icons .dops-banner__icon-circle {
- color: white;
- display: none;
- padding: 3px 3px 4px 4px; }
- .dops-banner__icons .dops-banner__icon-circle .gridicon {
- margin-bottom: -7px; }
- @media (min-width: 481px) {
- .dops-banner__icons {
- align-items: center; }
- .dops-banner__icons .dops-banner__icon {
- display: none; }
- .dops-banner__icons .dops-banner__icon-circle {
- display: block; } }
-
-.dops-banner__icon-plan {
- display: flex;
- margin-left: 16px; }
- .dops-banner__icon-plan .dops-plan-icon {
- height: 32px;
- width: 32px; }
- @media (min-width: 481px) {
- .dops-banner__icon-plan {
- align-items: center; } }
-
-.dops-banner__content {
- align-items: center;
- display: flex;
- flex-grow: 1;
- flex-wrap: wrap; }
- @media (min-width: 481px) {
- .dops-banner__content {
- flex-wrap: nowrap; } }
-
-.dops-banner__info {
- flex-grow: 1;
- line-height: 1.4;
- width: 100%; }
- .dops-banner__info .dops-banner__title,
- .dops-banner__info .dops-banner__description,
- .dops-banner__info .dops-banner__list {
- color: #414141; }
- .dops-banner__info .dops-banner__title {
- font-size: 14px;
- font-weight: 500; }
- .dops-banner__info .dops-banner__description {
- font-size: 12px;
- margin-top: 3px; }
- .dops-banner__info .dops-banner__list {
- font-size: 12px;
- list-style: none;
- margin: 0; }
- .dops-banner__info .dops-banner__list li {
- margin: 6px 0; }
- .dops-banner__info .dops-banner__list li .gridicon {
- color: #a2a2a2;
- display: none; }
- @media (min-width: 481px) {
- .dops-banner__info {
- width: auto; }
- .dops-banner__info .dops-banner__list li .gridicon {
- display: inline;
- margin-left: 12px;
- vertical-align: bottom; } }
-
-.dops-banner__action {
- align-self: center;
- font-size: 12px;
- margin: 8px 0 0 0;
- text-align: right;
- width: 100%; }
- .dops-banner__action .dops-banner__prices {
- display: flex;
- justify-content: flex-start; }
- .dops-banner__action .dops-banner__prices .dops-plan-price {
- margin-bottom: 0; }
- .dops-banner__action .dops-banner__prices .dops-plan-price.is-discounted,
- .dops-banner__action .dops-banner__prices .dops-plan-price.is-discounted .dops-plan-price__currency-symbol {
- color: #414141; }
- .has-call-to-action .dops-banner__action .dops-banner__prices .dops-plan-price {
- margin-bottom: 8px; }
- @media (min-width: 481px) {
- .dops-banner__action {
- margin: 0 8px 0 4px;
- text-align: center;
- width: auto; }
- .is-dismissible .dops-banner__action {
- margin-top: 40px; }
- .dops-banner__action .dops-banner__prices {
- justify-content: flex-end;
- text-align: left; } }
-
-.module-overridden-banner.dops-banner.is-compact {
- margin-bottom: 0; }
-
-.module-overridden-banner.dops-banner .dops-banner__description a {
- text-decoration: underline; }
-
-.dops-info-popover-button {
- background: transparent;
- border: none;
- color: #888888;
- padding: 0; }
- .dops-info-popover-button:hover {
- color: #414141; }
- .dops-info-popover-button:focus {
- box-shadow: none; }
- .dops-accessible-focus .dops-info-popover-button:focus {
- outline: thin dotted; }
-
-.dops-info-popover .gridicon {
- cursor: pointer;
- color: #c8c8c8; }
- .dops-info-popover .gridicon:hover {
- color: #414141; }
-
-.dops-info-popover.is_active .gridicon {
- color: #414141; }
-
-.dops-popover.dops-info-popover__tooltip .dops-popover__inner {
- color: #6f6f6f;
- font-size: 13px;
- max-width: 220px;
- padding: 16px;
- text-align: right; }
-
-.dops-external-link .gridicons-external {
- color: currentColor;
- margin-right: 0.5rem;
- top: 0.125rem;
- position: relative; }
-
-#jp-plugin-container {
- min-height: 100vh; }
-
-.jp-support-info {
- position: absolute;
- top: 1.6875rem;
- left: 1.5625rem;
- z-index: 1; }
- @media (max-width: 480px) {
- .jp-support-info {
- top: 1.25rem;
- left: 1rem; } }
- .jp-form-fieldset .jp-support-info {
- top: 4px; }
- .jp-support-info .dops-info-popover {
- white-space: nowrap; }
-
-.dops-popover .jp-support-info__privacy {
- display: block;
- margin-top: 0.875rem;
- padding-top: 0.75rem;
- border-top: 1px solid rgba(162, 162, 162, 0.5); }
-
-@keyframes appear {
- 0% {
- opacity: 0; }
- 100% {
- opacity: 1; } }
-
-.dops-foldable-card.dops-card {
- position: relative;
- transition: margin .15s linear;
- padding: 0; }
- .dops-foldable-card.dops-card:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden; }
- .dops-foldable-card.dops-card.is-expanded {
- margin-bottom: 8px; }
- .dops-foldable-card.dops-card .is-clickable {
- cursor: pointer; }
-
-.dops-foldable-card__header {
- min-height: 64px;
- width: 100%;
- padding: 16px;
- box-sizing: border-box;
- display: flex;
- align-items: center;
- justify-content: space-between;
- position: relative; }
- .dops-foldable-card__header.has-border .dops-foldable-card__summary,
- .dops-foldable-card__header.has-border .dops-foldable-card__summary_expanded {
- margin-left: 48px; }
- .dops-foldable-card__header.has-border .dops-foldable-card__expand {
- border-right: 1px #f6f6f6 solid; }
- .dops-foldable-card.is-compact .dops-foldable-card__header {
- padding: 8px 16px;
- min-height: 40px; }
- .dops-foldable-card.is-expanded .dops-foldable-card__header {
- margin-bottom: 0px;
- height: inherit;
- min-height: 64px; }
- .dops-foldable-card.is-expanded.is-compact .dops-foldable-card__header {
- min-height: 40px; }
- .dops-foldable-card.is-disabled .dops-foldable-card__header {
- opacity: 0.2; }
-
-.dops-foldable-card__action {
- position: absolute;
- top: 0;
- left: 0;
- height: 100%;
- background: none;
- border: 0; }
- .dops-foldable-card.is-expanded .dops-foldable-card__action {
- height: 100%; }
- .dops-foldable-card.is-disabled .dops-foldable-card__action {
- cursor: default; }
- .dops-accessible-focus .dops-foldable-card__action:focus {
- outline: thin dotted; }
-
-button.dops-foldable-card__action {
- cursor: pointer;
- outline: 0; }
-
-.dops-foldable-card__main {
- max-width: calc( 100% - 36px);
- display: block;
- align-items: center;
- width: 100%;
- margin-left: 5px; }
- @media (max-width: 480px) {
- .dops-foldable-card__main {
- flex: 1 1; } }
-
-.dops-foldable-card__secondary {
- display: flex;
- align-items: center;
- flex: 1 1;
- justify-content: flex-end; }
-
-.dops-foldable-card__expand {
- width: 48px; }
- .dops-foldable-card__expand .gridicon {
- fill: #a2a2a2;
- display: flex;
- align-items: center;
- width: 100%;
- vertical-align: middle;
- transition: transform 0.15s cubic-bezier(0.175, 0.885, 0.32, 1.275), color 0.2s ease-in; }
- .dops-foldable-card.is-expanded .dops-foldable-card__expand .gridicon {
- transform: rotate(-180deg); }
- .dops-foldable-card__expand .gridicon:hover {
- fill: #a2a2a2; }
- .dops-foldable-card__expand:focus .gridicon, .dops-foldable-card__expand:hover .gridicon {
- fill: #00aadc; }
-
-.dops-foldable-card__header-text {
- font-size: 1.125rem;
- width: 100%; }
-
-.dops-foldable-card__subheader {
- margin-top: 0.125rem;
- margin-bottom: 0.125rem;
- font-size: 0.875rem;
- color: #6f6f6f; }
-
-.dops-foldable-card__content {
- display: none; }
- .dops-foldable-card.is-expanded .dops-foldable-card__content {
- display: block;
- padding: 16px;
- border-top: 1px solid #f6f6f6; }
- .dops-foldable-card.is-compact .dops-foldable-card.is-expanded .dops-foldable-card__content {
- padding: 8px; }
- .dops-foldable-card.is-expanded .dops-foldable-card__content p:first-child {
- margin-top: 0; }
- .dops-foldable-card.is-expanded .dops-foldable-card__content p:last-child {
- margin-bottom: 0; }
-
-.dops-foldable-card__summary,
-.dops-foldable-card__summary_expanded {
- margin-left: 40px;
- color: #a2a2a2;
- font-size: 12px;
- transition: opacity 0.2s linear;
- display: inline-block; }
- .dops-foldable-card.has-expanded-summary .dops-foldable-card__summary, .dops-foldable-card.has-expanded-summary
- .dops-foldable-card__summary_expanded {
- transition: none;
- flex: 2;
- text-align: left; }
- @media (max-width: 480px) {
- .dops-foldable-card__summary,
- .dops-foldable-card__summary_expanded {
- display: none; } }
-
-.dops-foldable-card__summary {
- opacity: 1;
- display: inline-block; }
- .dops-foldable-card.is-expanded .dops-foldable-card__summary {
- display: none; }
- .has-expanded-summary .dops-foldable-card.is-expanded .dops-foldable-card__summary {
- display: none; }
-
-.dops-foldable-card__summary_expanded {
- display: none; }
- .dops-foldable-card.is-expanded .dops-foldable-card__summary_expanded {
- display: inline-block; }
-
-#jp-plugin-container {
- min-height: 100vh; }
-
-.form-input-validation {
- color: #4ab866;
- position: relative;
- padding: 6px 34px 11px 24px;
- border-radius: 1px;
- box-sizing: border-box;
- font-size: 14px;
- animation: appear .3s ease-in-out; }
- .form-input-validation.is-error {
- color: #d94f4f; }
- .form-input-validation.is-warning {
- color: #f0b849; }
- .form-input-validation .gridicon {
- float: right;
- margin-right: -34px; }
-
-.dops-textarea {
- box-sizing: border-box;
- margin: 0;
- padding: 0.4375rem 0.875rem;
- min-height: 5.75rem;
- width: 100%;
- color: #414141;
- font-size: 1rem;
- line-height: 1.5;
- border: 1px solid #d5d5d5;
- background-color: white;
- transition: all .15s ease-in-out;
- box-shadow: none; }
- .dops-textarea:-ms-input-placeholder {
- color: #a2a2a2; }
- .dops-textarea::-ms-input-placeholder {
- color: #a2a2a2; }
- .dops-textarea::placeholder {
- color: #a2a2a2; }
- .dops-textarea:hover {
- border-color: #bbbbbb; }
- .dops-textarea:focus {
- border-color: #0087be;
- outline: none;
- box-shadow: 0 0 0 2px #78dcfa; }
- .dops-textarea:focus::-ms-clear {
- display: none; }
- .dops-textarea:disabled {
- background: #f6f6f6;
- border-color: #eeeeee;
- color: #bbbbbb;
- -webkit-text-fill-color: #bbbbbb; }
- .dops-textarea:disabled:hover {
- cursor: default; }
- .dops-textarea:disabled:-ms-input-placeholder {
- color: #bbbbbb; }
- .dops-textarea:disabled::-ms-input-placeholder {
- color: #bbbbbb; }
- .dops-textarea:disabled::placeholder {
- color: #bbbbbb; }
-
-.dops-clipboard-button-input {
- position: relative;
- display: block; }
- .dops-clipboard-button-input .dops-clipboard-button {
- position: absolute;
- top: 50%;
- left: 4px;
- transform: translateY(-50%);
- overflow: visible; }
- .dops-clipboard-button-input .dops-clipboard-button:not(:disabled)::before {
- content: '';
- display: block;
- position: absolute;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- pointer-events: none;
- background: linear-gradient(to left, rgba(255, 255, 255, 0), #fff 90%);
- top: 0px;
- bottom: 0px;
- left: 0px;
- right: auto;
- width: 16px;
- height: auto;
- left: calc( 100% + 1px); }
- .dops-clipboard-button-input .dops-clipboard-button:focus::before {
- left: calc( 100% + 3px); }
-
-.dops-tooltip.dops-popover .dops-popover__arrow {
- border-width: 6px; }
-
-.dops-tooltip.dops-popover.is-bottom-right .dops-popover__arrow, .dops-tooltip.dops-popover.is-bottom-left .dops-popover__arrow, .dops-tooltip.dops-popover.is-bottom .dops-popover__arrow {
- border-bottom-color: #555555;
- top: 4px;
- left: 10px; }
- .dops-tooltip.dops-popover.is-bottom-right .dops-popover__arrow::before, .dops-tooltip.dops-popover.is-bottom-left .dops-popover__arrow::before, .dops-tooltip.dops-popover.is-bottom .dops-popover__arrow::before {
- display: none; }
-
-.dops-tooltip.dops-popover.is-bottom-right.is-error .dops-popover__arrow, .dops-tooltip.dops-popover.is-bottom-left.is-error .dops-popover__arrow, .dops-tooltip.dops-popover.is-bottom.is-error .dops-popover__arrow {
- border-bottom-color: #d94f4f; }
-
-.dops-tooltip.dops-popover.is-bottom-right.is-warning .dops-popover__arrow, .dops-tooltip.dops-popover.is-bottom-left.is-warning .dops-popover__arrow, .dops-tooltip.dops-popover.is-bottom.is-warning .dops-popover__arrow {
- border-bottom-color: #f0b849; }
-
-.dops-tooltip.dops-popover.is-bottom-right.is-success .dops-popover__arrow, .dops-tooltip.dops-popover.is-bottom-left.is-success .dops-popover__arrow, .dops-tooltip.dops-popover.is-bottom.is-success .dops-popover__arrow {
- border-bottom-color: #4ab866; }
-
-.dops-tooltip.dops-popover.is-top .dops-popover__arrow, .dops-tooltip.dops-popover.is-top-left .dops-popover__arrow, .dops-tooltip.dops-popover.is-top-right .dops-popover__arrow {
- border-top-color: #555555;
- bottom: 4px;
- left: 10px; }
- .dops-tooltip.dops-popover.is-top .dops-popover__arrow::before, .dops-tooltip.dops-popover.is-top-left .dops-popover__arrow::before, .dops-tooltip.dops-popover.is-top-right .dops-popover__arrow::before {
- display: none; }
-
-.dops-tooltip.dops-popover.is-top.is-error .dops-popover__arrow, .dops-tooltip.dops-popover.is-top-left.is-error .dops-popover__arrow, .dops-tooltip.dops-popover.is-top-right.is-error .dops-popover__arrow {
- border-top-color: #d94f4f; }
-
-.dops-tooltip.dops-popover.is-top.is-warning .dops-popover__arrow, .dops-tooltip.dops-popover.is-top-left.is-warning .dops-popover__arrow, .dops-tooltip.dops-popover.is-top-right.is-warning .dops-popover__arrow {
- border-top-color: #f0b849; }
-
-.dops-tooltip.dops-popover.is-top.is-success .dops-popover__arrow, .dops-tooltip.dops-popover.is-top-left.is-success .dops-popover__arrow, .dops-tooltip.dops-popover.is-top-right.is-success .dops-popover__arrow {
- border-top-color: #4ab866; }
-
-.dops-tooltip.dops-popover.is-top .dops-popover__arrow, .dops-tooltip.dops-popover.is-bottom .dops-popover__arrow {
- margin-right: -6px; }
-
-.dops-tooltip.dops-popover.is-left, .dops-tooltip.dops-popover.is-right {
- padding-top: 0; }
- .dops-tooltip.dops-popover.is-left .dops-popover__arrow, .dops-tooltip.dops-popover.is-right .dops-popover__arrow {
- margin-top: -6px; }
- .dops-tooltip.dops-popover.is-left .dops-popover__arrow::before, .dops-tooltip.dops-popover.is-right .dops-popover__arrow::before {
- display: none; }
- .dops-tooltip.dops-popover.is-left.is-error .dops-popover__arrow, .dops-tooltip.dops-popover.is-right.is-error .dops-popover__arrow {
- border-left-color: #d94f4f; }
- .dops-tooltip.dops-popover.is-left.is-warning .dops-popover__arrow, .dops-tooltip.dops-popover.is-right.is-warning .dops-popover__arrow {
- border-left-color: #f0b849; }
- .dops-tooltip.dops-popover.is-left.is-success .dops-popover__arrow, .dops-tooltip.dops-popover.is-right.is-success .dops-popover__arrow {
- border-left-color: #4ab866; }
-
-.dops-tooltip.dops-popover.is-left .dops-popover__arrow {
- margin-left: 4px;
- border-right-color: #555555; }
-
-.dops-tooltip.dops-popover.is-right .dops-popover__arrow {
- margin-right: 4px;
- border-left-color: #555555; }
-
-.dops-tooltip.dops-popover .dops-popover__inner {
- border: 0px;
- box-shadow: none;
- border-radius: 2px;
- color: white;
- background: #555555;
- font-size: 12px;
- padding: 6px 10px;
- text-align: right; }
-
-.dops-tooltip.dops-popover.is-error .dops-popover__inner {
- background: #d94f4f; }
-
-.dops-tooltip.dops-popover.is-warning .dops-popover__inner {
- background: #f0b849; }
-
-.dops-tooltip.dops-popover.is-success .dops-popover__inner {
- background: #4ab866; }
-
-.dops-tooltip.dops-popover ul {
- list-style: none;
- margin: 0;
- padding: 0; }
- .dops-tooltip.dops-popover ul li {
- font-size: 11px;
- font-weight: 100;
- border: 0; }
-
-.dops-tooltip__hr {
- margin: 8px 0;
- background: #a2a2a2; }
-
-#jp-plugin-container {
- min-height: 100vh; }
-
-.dops-chart {
- position: relative;
- box-sizing: border-box;
- background-color: white;
- padding: 8px 20px 8px 0; }
-
-.dops-chart .dops-chart__y-axis-markers {
- position: absolute;
- top: 8px;
- right: 0;
- left: 0;
- height: 200px; }
-
-.dops-chart .dops-chart__y-axis-marker {
- position: absolute;
- top: 0;
- width: 100%;
- height: 1px;
- border-top: 1px solid #eeeeee; }
-
-.dops-chart__bar-marker {
- z-index: 1;
- position: absolute;
- top: 0;
- width: 100%;
- height: 1px;
- border-top: 1px solid rgba(238, 238, 238, 0.1); }
-
-.dops-chart__bar-marker.is-fifty,
-.dops-chart__y-axis-label.is-fifty,
-.dops-chart .dops-chart__y-axis-marker.is-fifty {
- top: 50%; }
-
-.dops-chart__bar-marker.is-zero,
-.dops-chart__y-axis-label.is-zero,
-.dops-chart .dops-chart__y-axis-marker.is-zero {
- top: 100%; }
-
-.dops-chart__y-axis {
- position: relative;
- float: left;
- height: 200px;
- padding: 0 10px 0 20px;
- font-size: 11px;
- color: #888888;
- margin-bottom: 30px; }
-
-.dops-chart__y-axis-label {
- position: absolute;
- top: 0;
- left: 20px;
- text-align: left; }
-
-.dops-chart__y-axis-width-fix {
- color: rgba(255, 255, 255, 0); }
-
-.dops-chart__x-axis {
- position: relative;
- font-size: 0;
- padding: 5px 0;
- min-height: 18px;
- color: #555555; }
-
-.dops-chart__x-axis-label {
- position: absolute;
- display: inline-block;
- vertical-align: top;
- font-size: 11px;
- text-align: center; }
-
-.dops-chart__x-axis-label::before {
- content: '';
- display: block;
- position: absolute;
- top: -4px;
- right: 50%;
- margin-right: -.5px;
- width: 1px;
- height: 5px;
- background: #f6f6f6;
- background-image: linear-gradient(to bottom, #f6f6f6 0%, #d5d5d5 100%); }
-
-.dops-chart__bars {
- position: relative;
- font-size: 0;
- height: 200px;
- text-align: center;
- overflow: hidden;
- display: -ms-flex;
- display: flex; }
-
-.dops-chart__bar {
- text-align: center;
- display: inline-block;
- position: relative;
- height: 200px;
- -ms-flex-grow: 1;
- flex-grow: 1;
- -ms-flex-shrink: 1;
- flex-shrink: 1; }
- .dops-chart__bar.is-weekend {
- background-color: rgba(238, 238, 238, 0.5); }
- .dops-chart__bar:hover {
- cursor: pointer;
- background-color: rgba(238, 238, 238, 0.3); }
- .dops-chart__bar.is-selected {
- cursor: default;
- background-color: rgba(240, 130, 30, 0.1); }
-
-.dops-chart__bar-section {
- display: inline-block;
- background-color: #0087be;
- position: absolute;
- top: 0;
- left: 16%;
- bottom: 0;
- right: 16%;
- z-index: 2; }
- .dops-chart__bar:hover .dops-chart__bar-section.is-bar {
- background-color: #00aadc; }
- .dops-chart__bar.is-selected .dops-chart__bar-section.is-bar {
- background-color: #f0821e; }
- .dops-chart__bar-section.is-spacer {
- z-index: 0;
- background-color: rgba(255, 255, 255, 0); }
- .dops-chart__bar-section.is-ghost::after {
- content: "";
- display: block;
- position: absolute;
- top: 160px;
- bottom: 0;
- right: 0;
- z-index: 1;
- width: 100%;
- height: 40px;
- background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgba(238, 238, 238, 0.5)); }
- .dops-chart__bar:hover .dops-chart__bar-section.is-ghost::after {
- display: none; }
-
-.dops-chart__bar-section-inner {
- background: #004069;
- position: absolute;
- left: 23.33%;
- bottom: 0;
- right: 23.33%; }
- .dops-chart__bar.is-selected .dops-chart__bar-section-inner {
- background-color: #d54e21; }
-
-.dops-chart__legend {
- margin-bottom: -8px; }
- .dops-chart__legend:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden; }
-
-.dops-chart__legend .dops-chart__legend-options {
- float: left;
- color: #747474;
- list-style-type: none;
- margin: 0;
- font-size: 11px;
- text-transform: uppercase;
- letter-spacing: 0.1em; }
- @media (max-width: 480px) {
- .dops-chart__legend .dops-chart__legend-options {
- width: 100%; } }
-
-.dops-chart__legend-option {
- display: inline;
- text-align: right; }
- @media (max-width: 480px) {
- .dops-chart__legend-option {
- width: 50%;
- display: inline-block; } }
-
-.dops-chart__legend-label {
- display: inline-block;
- padding: 12px 20px 10px 19px; }
- .dops-chart__legend-label.is-selectable {
- cursor: pointer; }
- .dops-chart__legend-label.is-selectable:focus, .dops-chart__legend-label.is-selectable:hover {
- color: tint(#00aadc, 20%); }
- @media (max-width: 480px) {
- .dops-chart__legend-label {
- display: block; } }
-
-.dops-chart__legend-option .dops-chart__legend-color {
- width: 10px;
- height: 10px;
- background: #0087be;
- display: inline-block;
- border-radius: 1px;
- vertical-align: top;
- margin: 3px 8px 3px 5px; }
-
-@media (max-width: 480px) {
- .dops-chart__legend-option:first-child .dops-chart__legend-color {
- margin-right: 2px; } }
-
-.dops-chart__legend-color.is-dark-blue {
- background: #004069; }
-
-.dops-chart__legend-option .dops-chart__legend-checkbox {
- margin: 0;
- float: none;
- vertical-align: top; }
-
-.dops-chart__empty {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
- text-align: center;
- font-size: 14px;
- line-height: 24px;
- clear: both;
- z-index: 1; }
-
-.dops-chart__empty_notice {
- position: relative;
- top: 97px;
- padding: 11px 24px;
- margin-bottom: 24px;
- border-radius: 1px;
- background: #fff;
- box-sizing: border-box;
- font-size: 14px;
- line-height: 1.4285;
- animation: appear .3s ease-in-out;
- box-shadow: 0 0 0 1px rgba(213, 213, 213, 0.5), 0 1px 2px #eeeeee; }
- @media (min-width: 661px) {
- .dops-chart__empty_notice {
- padding: 13px 48px;
- font-size: inherit; }
- .dops-chart__empty_notice::before {
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- display: inline-block;
- vertical-align: middle;
- font: normal 16px/1 'Noticons';
- content: '\f456';
- position: absolute;
- top: 23px;
- right: 20px;
- margin: -12px -8px 0 0px;
- font-size: 24px;
- line-height: 1; } }
-
-.dops-chart__tooltip .dops-popover__inner {
- width: 230px;
- text-align: right; }
- .dops-chart__tooltip .dops-popover__inner ul {
- list-style: none;
- margin: 0;
- padding: 0; }
- .dops-chart__tooltip .dops-popover__inner ul:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden; }
- .dops-chart__tooltip .dops-popover__inner ul li {
- font-size: 11px;
- text-transform: uppercase;
- font-weight: 100;
- height: 24px;
- letter-spacing: 0.1em;
- border: 0;
- margin-bottom: 0; }
- .dops-chart__tooltip .dops-popover__inner ul li .dops-wrapper {
- display: block;
- line-height: inherit;
- line-height: 24px;
- clear: both; }
- .dops-chart__tooltip .dops-popover__inner ul li .value {
- text-align: left;
- float: left;
- min-width: 22px;
- color: #d5d5d5; }
- .dops-chart__tooltip .dops-popover__inner ul li .label {
- display: block;
- overflow: hidden;
- word-break: break-all;
- vertical-align: baseline; }
- .dops-chart__tooltip .dops-popover__inner ul li .gridicon {
- vertical-align: middle;
- margin-left: 6px;
- margin-top: -3px; }
-
-.dops-chart__tooltip.is-streak {
- margin-top: -5px;
- height: 35px; }
- .dops-chart__tooltip.is-streak .dops-popover__arrow::before {
- right: 85px;
- top: 30px; }
- .dops-chart__tooltip.is-streak .dops-popover__inner {
- width: 160px;
- position: relative;
- top: -10px; }
- .dops-chart__tooltip.is-streak .dops-popover__inner li {
- height: 14px; }
- .dops-chart__tooltip.is-streak .dops-popover__inner li .label {
- width: 100%;
- float: right;
- text-align: center; }
- .rtl .dops-chart__tooltip.is-streak .dops-popover__inner li .label {
- font-size: 11px; }
- .dops-chart__tooltip.is-streak .dops-popover__inner li .label .post-count {
- font-weight: bold; }
- .dops-chart__tooltip.is-streak .dops-popover__inner li .value {
- float: none; }
-
-.dops-chart__tooltip .dops-module-content-list-item.is-date-label {
- font-size: 11px;
- margin-bottom: 2px;
- text-transform: uppercase;
- font-weight: bold;
- border-bottom: 1px solid #5d5d5d;
- padding-bottom: 2px; }
-
-.dops-chart__tooltip .dops-module-content-list-item.is-published-item {
- height: 19px; }
- .dops-chart__tooltip .dops-module-content-list-item.is-published-item .label {
- text-transform: none;
- color: #d5d5d5;
- overflow: hidden;
- letter-spacing: 0;
- height: 19px; }
- .dops-chart__tooltip .dops-module-content-list-item.is-published-item .value {
- width: 0;
- min-width: 0; }
- .dops-chart__tooltip .dops-module-content-list-item.is-published-item .value::before {
- content: '';
- position: relative;
- background-image: linear-gradient(to left, rgba(61, 89, 109, 0) 0%, rgba(61, 89, 109, 0.5), #3d596d);
- right: -30px;
- width: 30px;
- height: 24px;
- display: block; }
-
-#jp-plugin-container {
- min-height: 100vh; }
-
-/* This hack is used to prevent the body from scrolling when the modal is showing */
-body.dops-modal-showing {
- overflow: hidden; }
-
-.dops-modal-wrapper {
- position: fixed;
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
- z-index: 1050;
- display: block;
- overflow-x: hidden;
- overflow-y: auto;
- text-align: center;
- -webkit-overflow-scrolling: touch;
- outline: 0;
- transition: opacity .15s linear;
- background-color: rgba(0, 0, 0, 0.5);
- cursor: pointer; }
- .dops-modal-wrapper:before {
- content: '';
- display: inline-block;
- height: 100%;
- vertical-align: middle; }
- .dops-modal-wrapper .dops-modal {
- position: relative;
- display: inline-block;
- margin: 0 0;
- width: 100%;
- max-width: 550px;
- vertical-align: middle;
- text-align: right;
- background-color: #fff;
- transition: all 0.5s;
- z-index: 100;
- clear: both;
- cursor: default; }
- @media (min-width: 481px) {
- .dops-modal-wrapper .dops-modal {
- margin: 0 auto;
- height: auto;
- border-radius: 5px;
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2); } }
-
-@charset "UTF-8";
-/*
-The MIT License (MIT)
-
-Copyright © 2011–2015 thoughtbot, inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
-documentation files (the “Software”), to deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
-persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial
-portions of the Software.
-
-THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-https://github.com/thoughtbot/bourbon
-*/
-.jp-jetpack-connect__button {
- background: #00BE28;
- border-color: #00a523;
- color: white; }
- .jp-jetpack-connect__button:hover, .jp-jetpack-connect__button:focus {
- background: #00a523;
- border-color: #008b1d;
- color: white; }
-
-.notices-list {
- overflow: hidden; }
- .notices-list.is-pinned {
- width: calc( 100% - 272px - 32px - 32px);
- z-index: z-index("root", ".notices-list.is-pinned");
- position: fixed;
- top: 79px; }
- .notices-list.is-pinned .notice {
- z-index: z-index("root", ".notices-list.is-pinned .notice"); }
-
-.notices-list__whitespace {
- height: 71px;
- width: 100%;
- display: block; }
-
-@keyframes appear {
- 0% {
- opacity: 0; }
- 100% {
- opacity: 1; } }
-
-.global-notices {
- text-align: left;
- pointer-events: none;
- z-index: 179;
- position: fixed;
- top: auto;
- left: 0;
- bottom: 0;
- right: 0; }
- @media (min-width: 661px) {
- .global-notices {
- top: 63px;
- left: 16px;
- bottom: auto;
- right: auto;
- max-width: calc( 100% - 32px); } }
- @media (min-width: 961px) {
- .global-notices {
- top: 71px;
- left: 24px;
- max-width: calc( 100% - 48px); } }
- @media (min-width: 1041px) {
- .global-notices {
- left: 32px;
- max-width: calc( 100% - 64px); } }
-
-.global-notices .dops-notice {
- flex-wrap: nowrap;
- margin-bottom: 0;
- text-align: right;
- pointer-events: auto;
- border-radius: 0;
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2), 0 0 56px rgba(0, 0, 0, 0.15); }
- .global-notices .dops-notice .dops-notice__icon-wrapper {
- border-radius: 0; }
- @media (min-width: 661px) {
- .global-notices .dops-notice {
- display: flex;
- overflow: hidden;
- margin-bottom: 24px;
- border-radius: 3px; }
- .global-notices .dops-notice .dops-notice__icon-wrapper {
- border-radius: 0 3px 3px 0; } }
-
-@media (min-width: 661px) {
- .global-notices .dops-notice a.dops-notice__action {
- font-size: 14px;
- padding: 13px 16px; } }
-
-.global-notices .dops-notice__dismiss {
- flex-shrink: 0; }
- @media (min-width: 661px) {
- .global-notices .dops-notice__dismiss {
- padding: 13px 16px 0; } }
-
-
-/*# sourceMappingURL=admin.dops-style.rtl.css.map */
diff --git a/plugins/jetpack/_inc/build/admin.js b/plugins/jetpack/_inc/build/admin.js
deleted file mode 100644
index 5bc6922e..00000000
--- a/plugins/jetpack/_inc/build/admin.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=722)}([function(e,t,n){(function(e){e.exports=function(){"use strict";var t,o;function r(){return t.apply(null,arguments)}function a(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function i(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function p(e){return void 0===e}function s(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function c(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function b(e,t){var n,o=[];for(n=0;n<e.length;++n)o.push(t(e[n],n));return o}function M(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function l(e,t){for(var n in t)M(t,n)&&(e[n]=t[n]);return M(t,"toString")&&(e.toString=t.toString),M(t,"valueOf")&&(e.valueOf=t.valueOf),e}function u(e,t,n,o){return wt(e,t,n,o,!0).utc()}function d(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function z(e){if(null==e._isValid){var t=d(e),n=o.call(t.parsedDateParts,function(e){return null!=e}),r=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n);if(e._strict&&(r=r&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return r;e._isValid=r}return e._isValid}function f(e){var t=u(NaN);return null!=e?l(d(t),e):d(t).userInvalidated=!0,t}o=Array.prototype.some?Array.prototype.some:function(e){for(var t=Object(this),n=t.length>>>0,o=0;o<n;o++)if(o in t&&e.call(this,t[o],o,t))return!0;return!1};var O=r.momentProperties=[];function A(e,t){var n,o,r;if(p(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),p(t._i)||(e._i=t._i),p(t._f)||(e._f=t._f),p(t._l)||(e._l=t._l),p(t._strict)||(e._strict=t._strict),p(t._tzm)||(e._tzm=t._tzm),p(t._isUTC)||(e._isUTC=t._isUTC),p(t._offset)||(e._offset=t._offset),p(t._pf)||(e._pf=d(t)),p(t._locale)||(e._locale=t._locale),O.length>0)for(n=0;n<O.length;n++)p(r=t[o=O[n]])||(e[o]=r);return e}var h=!1;function m(e){A(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===h&&(h=!0,r.updateOffset(this),h=!1)}function q(e){return e instanceof m||null!=e&&null!=e._isAMomentObject}function _(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function W(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=_(t)),n}function g(e,t,n){var o,r=Math.min(e.length,t.length),a=Math.abs(e.length-t.length),i=0;for(o=0;o<r;o++)(n&&e[o]!==t[o]||!n&&W(e[o])!==W(t[o]))&&i++;return i+a}function v(e){!1===r.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function y(e,t){var n=!0;return l(function(){if(null!=r.deprecationHandler&&r.deprecationHandler(null,e),n){for(var o,a=[],i=0;i<arguments.length;i++){if(o="","object"==typeof arguments[i]){for(var p in o+="\n["+i+"] ",arguments[0])o+=p+": "+arguments[0][p]+", ";o=o.slice(0,-2)}else o=arguments[i];a.push(o)}v(e+"\nArguments: "+Array.prototype.slice.call(a).join("")+"\n"+(new Error).stack),n=!1}return t.apply(this,arguments)},t)}var L,R={};function E(e,t){null!=r.deprecationHandler&&r.deprecationHandler(e,t),R[e]||(v(t),R[e]=!0)}function w(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function k(e,t){var n,o=l({},e);for(n in t)M(t,n)&&(i(e[n])&&i(t[n])?(o[n]={},l(o[n],e[n]),l(o[n],t[n])):null!=t[n]?o[n]=t[n]:delete o[n]);for(n in e)M(e,n)&&!M(t,n)&&i(e[n])&&(o[n]=l({},o[n]));return o}function B(e){null!=e&&this.set(e)}r.suppressDeprecationWarnings=!1,r.deprecationHandler=null,L=Object.keys?Object.keys:function(e){var t,n=[];for(t in e)M(e,t)&&n.push(t);return n};var T={};function S(e,t){var n=e.toLowerCase();T[n]=T[n+"s"]=T[t]=e}function N(e){return"string"==typeof e?T[e]||T[e.toLowerCase()]:void 0}function X(e){var t,n,o={};for(n in e)M(e,n)&&(t=N(n))&&(o[t]=e[n]);return o}var C={};function D(e,t){C[e]=t}function P(e,t,n){var o=""+Math.abs(e),r=t-o.length;return(e>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,r)).toString().substr(1)+o}var x=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,H=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,F={},j={};function Y(e,t,n,o){var r=o;"string"==typeof o&&(r=function(){return this[o]()}),e&&(j[e]=r),t&&(j[t[0]]=function(){return P(r.apply(this,arguments),t[1],t[2])}),n&&(j[n]=function(){return this.localeData().ordinal(r.apply(this,arguments),e)})}function I(e,t){return e.isValid()?(t=U(t,e.localeData()),F[t]=F[t]||function(e){var t,n,o,r=e.match(x);for(t=0,n=r.length;t<n;t++)j[r[t]]?r[t]=j[r[t]]:r[t]=(o=r[t]).match(/\[[\s\S]/)?o.replace(/^\[|\]$/g,""):o.replace(/\\/g,"");return function(t){var o,a="";for(o=0;o<n;o++)a+=w(r[o])?r[o].call(t,e):r[o];return a}}(t),F[t](e)):e.localeData().invalidDate()}function U(e,t){var n=5;function o(e){return t.longDateFormat(e)||e}for(H.lastIndex=0;n>=0&&H.test(e);)e=e.replace(H,o),H.lastIndex=0,n-=1;return e}var V=/\d/,K=/\d\d/,J=/\d{3}/,G=/\d{4}/,Q=/[+-]?\d{6}/,$=/\d\d?/,Z=/\d\d\d\d?/,ee=/\d\d\d\d\d\d?/,te=/\d{1,3}/,ne=/\d{1,4}/,oe=/[+-]?\d{1,6}/,re=/\d+/,ae=/[+-]?\d+/,ie=/Z|[+-]\d\d:?\d\d/gi,pe=/Z|[+-]\d\d(?::?\d\d)?/gi,se=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,ce={};function be(e,t,n){ce[e]=w(t)?t:function(e,o){return e&&n?n:t}}function Me(e,t){return M(ce,e)?ce[e](t._strict,t._locale):new RegExp(le(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,o,r){return t||n||o||r})))}function le(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var ue={};function de(e,t){var n,o=t;for("string"==typeof e&&(e=[e]),s(t)&&(o=function(e,n){n[t]=W(e)}),n=0;n<e.length;n++)ue[e[n]]=o}function ze(e,t){de(e,function(e,n,o,r){o._w=o._w||{},t(e,o._w,o,r)})}function fe(e,t,n){null!=t&&M(ue,e)&&ue[e](t,n._a,n,e)}var Oe=0,Ae=1,he=2,me=3,qe=4,_e=5,We=6,ge=7,ve=8;function ye(e){return Le(e)?366:365}function Le(e){return e%4==0&&e%100!=0||e%400==0}Y("Y",0,0,function(){var e=this.year();return e<=9999?""+e:"+"+e}),Y(0,["YY",2],0,function(){return this.year()%100}),Y(0,["YYYY",4],0,"year"),Y(0,["YYYYY",5],0,"year"),Y(0,["YYYYYY",6,!0],0,"year"),S("year","y"),D("year",1),be("Y",ae),be("YY",$,K),be("YYYY",ne,G),be("YYYYY",oe,Q),be("YYYYYY",oe,Q),de(["YYYYY","YYYYYY"],Oe),de("YYYY",function(e,t){t[Oe]=2===e.length?r.parseTwoDigitYear(e):W(e)}),de("YY",function(e,t){t[Oe]=r.parseTwoDigitYear(e)}),de("Y",function(e,t){t[Oe]=parseInt(e,10)}),r.parseTwoDigitYear=function(e){return W(e)+(W(e)>68?1900:2e3)};var Re,Ee=we("FullYear",!0);function we(e,t){return function(n){return null!=n?(Be(this,e,n),r.updateOffset(this,t),this):ke(this,e)}}function ke(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function Be(e,t,n){e.isValid()&&!isNaN(n)&&("FullYear"===t&&Le(e.year())&&1===e.month()&&29===e.date()?e._d["set"+(e._isUTC?"UTC":"")+t](n,e.month(),Te(n,e.month())):e._d["set"+(e._isUTC?"UTC":"")+t](n))}function Te(e,t){if(isNaN(e)||isNaN(t))return NaN;var n=(t%12+12)%12;return e+=(t-n)/12,1===n?Le(e)?29:28:31-n%7%2}Re=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},Y("M",["MM",2],"Mo",function(){return this.month()+1}),Y("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),Y("MMMM",0,0,function(e){return this.localeData().months(this,e)}),S("month","M"),D("month",8),be("M",$),be("MM",$,K),be("MMM",function(e,t){return t.monthsShortRegex(e)}),be("MMMM",function(e,t){return t.monthsRegex(e)}),de(["M","MM"],function(e,t){t[Ae]=W(e)-1}),de(["MMM","MMMM"],function(e,t,n,o){var r=n._locale.monthsParse(e,o,n._strict);null!=r?t[Ae]=r:d(n).invalidMonth=e});var Se=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Ne="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Xe="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_");function Ce(e,t){var n;if(!e.isValid())return e;if("string"==typeof t)if(/^\d+$/.test(t))t=W(t);else if(!s(t=e.localeData().monthsParse(t)))return e;return n=Math.min(e.date(),Te(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n),e}function De(e){return null!=e?(Ce(this,e),r.updateOffset(this,!0),this):ke(this,"Month")}var Pe=se,xe=se;function He(){function e(e,t){return t.length-e.length}var t,n,o=[],r=[],a=[];for(t=0;t<12;t++)n=u([2e3,t]),o.push(this.monthsShort(n,"")),r.push(this.months(n,"")),a.push(this.months(n,"")),a.push(this.monthsShort(n,""));for(o.sort(e),r.sort(e),a.sort(e),t=0;t<12;t++)o[t]=le(o[t]),r[t]=le(r[t]);for(t=0;t<24;t++)a[t]=le(a[t]);this._monthsRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+o.join("|")+")","i")}function Fe(e){var t;if(e<100&&e>=0){var n=Array.prototype.slice.call(arguments);n[0]=e+400,t=new Date(Date.UTC.apply(null,n)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)}else t=new Date(Date.UTC.apply(null,arguments));return t}function je(e,t,n){var o=7+t-n;return-((7+Fe(e,0,o).getUTCDay()-t)%7)+o-1}function Ye(e,t,n,o,r){var a,i,p=1+7*(t-1)+(7+n-o)%7+je(e,o,r);return p<=0?i=ye(a=e-1)+p:p>ye(e)?(a=e+1,i=p-ye(e)):(a=e,i=p),{year:a,dayOfYear:i}}function Ie(e,t,n){var o,r,a=je(e.year(),t,n),i=Math.floor((e.dayOfYear()-a-1)/7)+1;return i<1?o=i+Ue(r=e.year()-1,t,n):i>Ue(e.year(),t,n)?(o=i-Ue(e.year(),t,n),r=e.year()+1):(r=e.year(),o=i),{week:o,year:r}}function Ue(e,t,n){var o=je(e,t,n),r=je(e+1,t,n);return(ye(e)-o+r)/7}function Ve(e,t){return e.slice(t,7).concat(e.slice(0,t))}Y("w",["ww",2],"wo","week"),Y("W",["WW",2],"Wo","isoWeek"),S("week","w"),S("isoWeek","W"),D("week",5),D("isoWeek",5),be("w",$),be("ww",$,K),be("W",$),be("WW",$,K),ze(["w","ww","W","WW"],function(e,t,n,o){t[o.substr(0,1)]=W(e)}),Y("d",0,"do","day"),Y("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),Y("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),Y("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),Y("e",0,0,"weekday"),Y("E",0,0,"isoWeekday"),S("day","d"),S("weekday","e"),S("isoWeekday","E"),D("day",11),D("weekday",11),D("isoWeekday",11),be("d",$),be("e",$),be("E",$),be("dd",function(e,t){return t.weekdaysMinRegex(e)}),be("ddd",function(e,t){return t.weekdaysShortRegex(e)}),be("dddd",function(e,t){return t.weekdaysRegex(e)}),ze(["dd","ddd","dddd"],function(e,t,n,o){var r=n._locale.weekdaysParse(e,o,n._strict);null!=r?t.d=r:d(n).invalidWeekday=e}),ze(["d","e","E"],function(e,t,n,o){t[o]=W(e)});var Ke="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Je="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Ge="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Qe=se,$e=se,Ze=se;function et(){function e(e,t){return t.length-e.length}var t,n,o,r,a,i=[],p=[],s=[],c=[];for(t=0;t<7;t++)n=u([2e3,1]).day(t),o=this.weekdaysMin(n,""),r=this.weekdaysShort(n,""),a=this.weekdays(n,""),i.push(o),p.push(r),s.push(a),c.push(o),c.push(r),c.push(a);for(i.sort(e),p.sort(e),s.sort(e),c.sort(e),t=0;t<7;t++)p[t]=le(p[t]),s[t]=le(s[t]),c[t]=le(c[t]);this._weekdaysRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+p.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+i.join("|")+")","i")}function tt(){return this.hours()%12||12}function nt(e,t){Y(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function ot(e,t){return t._meridiemParse}Y("H",["HH",2],0,"hour"),Y("h",["hh",2],0,tt),Y("k",["kk",2],0,function(){return this.hours()||24}),Y("hmm",0,0,function(){return""+tt.apply(this)+P(this.minutes(),2)}),Y("hmmss",0,0,function(){return""+tt.apply(this)+P(this.minutes(),2)+P(this.seconds(),2)}),Y("Hmm",0,0,function(){return""+this.hours()+P(this.minutes(),2)}),Y("Hmmss",0,0,function(){return""+this.hours()+P(this.minutes(),2)+P(this.seconds(),2)}),nt("a",!0),nt("A",!1),S("hour","h"),D("hour",13),be("a",ot),be("A",ot),be("H",$),be("h",$),be("k",$),be("HH",$,K),be("hh",$,K),be("kk",$,K),be("hmm",Z),be("hmmss",ee),be("Hmm",Z),be("Hmmss",ee),de(["H","HH"],me),de(["k","kk"],function(e,t,n){var o=W(e);t[me]=24===o?0:o}),de(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),de(["h","hh"],function(e,t,n){t[me]=W(e),d(n).bigHour=!0}),de("hmm",function(e,t,n){var o=e.length-2;t[me]=W(e.substr(0,o)),t[qe]=W(e.substr(o)),d(n).bigHour=!0}),de("hmmss",function(e,t,n){var o=e.length-4,r=e.length-2;t[me]=W(e.substr(0,o)),t[qe]=W(e.substr(o,2)),t[_e]=W(e.substr(r)),d(n).bigHour=!0}),de("Hmm",function(e,t,n){var o=e.length-2;t[me]=W(e.substr(0,o)),t[qe]=W(e.substr(o))}),de("Hmmss",function(e,t,n){var o=e.length-4,r=e.length-2;t[me]=W(e.substr(0,o)),t[qe]=W(e.substr(o,2)),t[_e]=W(e.substr(r))});var rt,at=we("Hours",!0),it={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Ne,monthsShort:Xe,week:{dow:0,doy:6},weekdays:Ke,weekdaysMin:Ge,weekdaysShort:Je,meridiemParse:/[ap]\.?m?\.?/i},pt={},st={};function ct(e){return e?e.toLowerCase().replace("_","-"):e}function bt(t){var o=null;if(!pt[t]&&void 0!==e&&e&&e.exports)try{o=rt._abbr,n(566)("./"+t),Mt(o)}catch(e){}return pt[t]}function Mt(e,t){var n;return e&&((n=p(t)?ut(e):lt(e,t))?rt=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),rt._abbr}function lt(e,t){if(null!==t){var n,o=it;if(t.abbr=e,null!=pt[e])E("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),o=pt[e]._config;else if(null!=t.parentLocale)if(null!=pt[t.parentLocale])o=pt[t.parentLocale]._config;else{if(null==(n=bt(t.parentLocale)))return st[t.parentLocale]||(st[t.parentLocale]=[]),st[t.parentLocale].push({name:e,config:t}),null;o=n._config}return pt[e]=new B(k(o,t)),st[e]&&st[e].forEach(function(e){lt(e.name,e.config)}),Mt(e),pt[e]}return delete pt[e],null}function ut(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return rt;if(!a(e)){if(t=bt(e))return t;e=[e]}return function(e){for(var t,n,o,r,a=0;a<e.length;){for(t=(r=ct(e[a]).split("-")).length,n=(n=ct(e[a+1]))?n.split("-"):null;t>0;){if(o=bt(r.slice(0,t).join("-")))return o;if(n&&n.length>=t&&g(r,n,!0)>=t-1)break;t--}a++}return rt}(e)}function dt(e){var t,n=e._a;return n&&-2===d(e).overflow&&(t=n[Ae]<0||n[Ae]>11?Ae:n[he]<1||n[he]>Te(n[Oe],n[Ae])?he:n[me]<0||n[me]>24||24===n[me]&&(0!==n[qe]||0!==n[_e]||0!==n[We])?me:n[qe]<0||n[qe]>59?qe:n[_e]<0||n[_e]>59?_e:n[We]<0||n[We]>999?We:-1,d(e)._overflowDayOfYear&&(t<Oe||t>he)&&(t=he),d(e)._overflowWeeks&&-1===t&&(t=ge),d(e)._overflowWeekday&&-1===t&&(t=ve),d(e).overflow=t),e}function zt(e,t,n){return null!=e?e:null!=t?t:n}function ft(e){var t,n,o,a,i,p=[];if(!e._d){for(o=function(e){var t=new Date(r.now());return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}(e),e._w&&null==e._a[he]&&null==e._a[Ae]&&function(e){var t,n,o,r,a,i,p,s;if(null!=(t=e._w).GG||null!=t.W||null!=t.E)a=1,i=4,n=zt(t.GG,e._a[Oe],Ie(kt(),1,4).year),o=zt(t.W,1),((r=zt(t.E,1))<1||r>7)&&(s=!0);else{a=e._locale._week.dow,i=e._locale._week.doy;var c=Ie(kt(),a,i);n=zt(t.gg,e._a[Oe],c.year),o=zt(t.w,c.week),null!=t.d?((r=t.d)<0||r>6)&&(s=!0):null!=t.e?(r=t.e+a,(t.e<0||t.e>6)&&(s=!0)):r=a}o<1||o>Ue(n,a,i)?d(e)._overflowWeeks=!0:null!=s?d(e)._overflowWeekday=!0:(p=Ye(n,o,r,a,i),e._a[Oe]=p.year,e._dayOfYear=p.dayOfYear)}(e),null!=e._dayOfYear&&(i=zt(e._a[Oe],o[Oe]),(e._dayOfYear>ye(i)||0===e._dayOfYear)&&(d(e)._overflowDayOfYear=!0),n=Fe(i,0,e._dayOfYear),e._a[Ae]=n.getUTCMonth(),e._a[he]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=p[t]=o[t];for(;t<7;t++)e._a[t]=p[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[me]&&0===e._a[qe]&&0===e._a[_e]&&0===e._a[We]&&(e._nextDay=!0,e._a[me]=0),e._d=(e._useUTC?Fe:function(e,t,n,o,r,a,i){var p;return e<100&&e>=0?(p=new Date(e+400,t,n,o,r,a,i),isFinite(p.getFullYear())&&p.setFullYear(e)):p=new Date(e,t,n,o,r,a,i),p}).apply(null,p),a=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[me]=24),e._w&&void 0!==e._w.d&&e._w.d!==a&&(d(e).weekdayMismatch=!0)}}var Ot=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,At=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ht=/Z|[+-]\d\d(?::?\d\d)?/,mt=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],qt=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],_t=/^\/?Date\((\-?\d+)/i;function Wt(e){var t,n,o,r,a,i,p=e._i,s=Ot.exec(p)||At.exec(p);if(s){for(d(e).iso=!0,t=0,n=mt.length;t<n;t++)if(mt[t][1].exec(s[1])){r=mt[t][0],o=!1!==mt[t][2];break}if(null==r)return void(e._isValid=!1);if(s[3]){for(t=0,n=qt.length;t<n;t++)if(qt[t][1].exec(s[3])){a=(s[2]||" ")+qt[t][0];break}if(null==a)return void(e._isValid=!1)}if(!o&&null!=a)return void(e._isValid=!1);if(s[4]){if(!ht.exec(s[4]))return void(e._isValid=!1);i="Z"}e._f=r+(a||"")+(i||""),Rt(e)}else e._isValid=!1}var gt=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/;function vt(e){var t=parseInt(e,10);return t<=49?2e3+t:t<=999?1900+t:t}var yt={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Lt(e){var t,n,o,r,a,i,p,s=gt.exec(e._i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(s){var c=(t=s[4],n=s[3],o=s[2],r=s[5],a=s[6],i=s[7],p=[vt(t),Xe.indexOf(n),parseInt(o,10),parseInt(r,10),parseInt(a,10)],i&&p.push(parseInt(i,10)),p);if(!function(e,t,n){if(e&&Je.indexOf(e)!==new Date(t[0],t[1],t[2]).getDay())return d(n).weekdayMismatch=!0,n._isValid=!1,!1;return!0}(s[1],c,e))return;e._a=c,e._tzm=function(e,t,n){if(e)return yt[e];if(t)return 0;var o=parseInt(n,10),r=o%100;return 60*((o-r)/100)+r}(s[8],s[9],s[10]),e._d=Fe.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),d(e).rfc2822=!0}else e._isValid=!1}function Rt(e){if(e._f!==r.ISO_8601)if(e._f!==r.RFC_2822){e._a=[],d(e).empty=!0;var t,n,o,a,i,p=""+e._i,s=p.length,c=0;for(o=U(e._f,e._locale).match(x)||[],t=0;t<o.length;t++)a=o[t],(n=(p.match(Me(a,e))||[])[0])&&((i=p.substr(0,p.indexOf(n))).length>0&&d(e).unusedInput.push(i),p=p.slice(p.indexOf(n)+n.length),c+=n.length),j[a]?(n?d(e).empty=!1:d(e).unusedTokens.push(a),fe(a,n,e)):e._strict&&!n&&d(e).unusedTokens.push(a);d(e).charsLeftOver=s-c,p.length>0&&d(e).unusedInput.push(p),e._a[me]<=12&&!0===d(e).bigHour&&e._a[me]>0&&(d(e).bigHour=void 0),d(e).parsedDateParts=e._a.slice(0),d(e).meridiem=e._meridiem,e._a[me]=(b=e._locale,M=e._a[me],null==(l=e._meridiem)?M:null!=b.meridiemHour?b.meridiemHour(M,l):null!=b.isPM?((u=b.isPM(l))&&M<12&&(M+=12),u||12!==M||(M=0),M):M),ft(e),dt(e)}else Lt(e);else Wt(e);var b,M,l,u}function Et(e){var t=e._i,n=e._f;return e._locale=e._locale||ut(e._l),null===t||void 0===n&&""===t?f({nullInput:!0}):("string"==typeof t&&(e._i=t=e._locale.preparse(t)),q(t)?new m(dt(t)):(c(t)?e._d=t:a(n)?function(e){var t,n,o,r,a;if(0===e._f.length)return d(e).invalidFormat=!0,void(e._d=new Date(NaN));for(r=0;r<e._f.length;r++)a=0,t=A({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[r],Rt(t),z(t)&&(a+=d(t).charsLeftOver,a+=10*d(t).unusedTokens.length,d(t).score=a,(null==o||a<o)&&(o=a,n=t));l(e,n||t)}(e):n?Rt(e):function(e){var t=e._i;p(t)?e._d=new Date(r.now()):c(t)?e._d=new Date(t.valueOf()):"string"==typeof t?function(e){var t=_t.exec(e._i);null===t?(Wt(e),!1===e._isValid&&(delete e._isValid,Lt(e),!1===e._isValid&&(delete e._isValid,r.createFromInputFallback(e)))):e._d=new Date(+t[1])}(e):a(t)?(e._a=b(t.slice(0),function(e){return parseInt(e,10)}),ft(e)):i(t)?function(e){if(!e._d){var t=X(e._i);e._a=b([t.year,t.month,t.day||t.date,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),ft(e)}}(e):s(t)?e._d=new Date(t):r.createFromInputFallback(e)}(e),z(e)||(e._d=null),e))}function wt(e,t,n,o,r){var p,s={};return!0!==n&&!1!==n||(o=n,n=void 0),(i(e)&&function(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(e.hasOwnProperty(t))return!1;return!0}(e)||a(e)&&0===e.length)&&(e=void 0),s._isAMomentObject=!0,s._useUTC=s._isUTC=r,s._l=n,s._i=e,s._f=t,s._strict=o,(p=new m(dt(Et(s))))._nextDay&&(p.add(1,"d"),p._nextDay=void 0),p}function kt(e,t,n,o){return wt(e,t,n,o,!1)}r.createFromInputFallback=y("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),r.ISO_8601=function(){},r.RFC_2822=function(){};var Bt=y("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=kt.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:f()}),Tt=y("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=kt.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:f()});function St(e,t){var n,o;if(1===t.length&&a(t[0])&&(t=t[0]),!t.length)return kt();for(n=t[0],o=1;o<t.length;++o)t[o].isValid()&&!t[o][e](n)||(n=t[o]);return n}var Nt=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Xt(e){var t=X(e),n=t.year||0,o=t.quarter||0,r=t.month||0,a=t.week||t.isoWeek||0,i=t.day||0,p=t.hour||0,s=t.minute||0,c=t.second||0,b=t.millisecond||0;this._isValid=function(e){for(var t in e)if(-1===Re.call(Nt,t)||null!=e[t]&&isNaN(e[t]))return!1;for(var n=!1,o=0;o<Nt.length;++o)if(e[Nt[o]]){if(n)return!1;parseFloat(e[Nt[o]])!==W(e[Nt[o]])&&(n=!0)}return!0}(t),this._milliseconds=+b+1e3*c+6e4*s+1e3*p*60*60,this._days=+i+7*a,this._months=+r+3*o+12*n,this._data={},this._locale=ut(),this._bubble()}function Ct(e){return e instanceof Xt}function Dt(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Pt(e,t){Y(e,0,0,function(){var e=this.utcOffset(),n="+";return e<0&&(e=-e,n="-"),n+P(~~(e/60),2)+t+P(~~e%60,2)})}Pt("Z",":"),Pt("ZZ",""),be("Z",pe),be("ZZ",pe),de(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=Ht(pe,e)});var xt=/([\+\-]|\d\d)/gi;function Ht(e,t){var n=(t||"").match(e);if(null===n)return null;var o=((n[n.length-1]||[])+"").match(xt)||["-",0,0],r=60*o[1]+W(o[2]);return 0===r?0:"+"===o[0]?r:-r}function Ft(e,t){var n,o;return t._isUTC?(n=t.clone(),o=(q(e)||c(e)?e.valueOf():kt(e).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+o),r.updateOffset(n,!1),n):kt(e).local()}function jt(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}function Yt(){return!!this.isValid()&&this._isUTC&&0===this._offset}r.updateOffset=function(){};var It=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Ut=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Vt(e,t){var n,o,r,a,i,p,c=e,b=null;return Ct(e)?c={ms:e._milliseconds,d:e._days,M:e._months}:s(e)?(c={},t?c[t]=e:c.milliseconds=e):(b=It.exec(e))?(n="-"===b[1]?-1:1,c={y:0,d:W(b[he])*n,h:W(b[me])*n,m:W(b[qe])*n,s:W(b[_e])*n,ms:W(Dt(1e3*b[We]))*n}):(b=Ut.exec(e))?(n="-"===b[1]?-1:1,c={y:Kt(b[2],n),M:Kt(b[3],n),w:Kt(b[4],n),d:Kt(b[5],n),h:Kt(b[6],n),m:Kt(b[7],n),s:Kt(b[8],n)}):null==c?c={}:"object"==typeof c&&("from"in c||"to"in c)&&(a=kt(c.from),i=kt(c.to),r=a.isValid()&&i.isValid()?(i=Ft(i,a),a.isBefore(i)?p=Jt(a,i):((p=Jt(i,a)).milliseconds=-p.milliseconds,p.months=-p.months),p):{milliseconds:0,months:0},(c={}).ms=r.milliseconds,c.M=r.months),o=new Xt(c),Ct(e)&&M(e,"_locale")&&(o._locale=e._locale),o}function Kt(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Jt(e,t){var n={};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function Gt(e,t){return function(n,o){var r;return null===o||isNaN(+o)||(E(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),r=n,n=o,o=r),Qt(this,Vt(n="string"==typeof n?+n:n,o),e),this}}function Qt(e,t,n,o){var a=t._milliseconds,i=Dt(t._days),p=Dt(t._months);e.isValid()&&(o=null==o||o,p&&Ce(e,ke(e,"Month")+p*n),i&&Be(e,"Date",ke(e,"Date")+i*n),a&&e._d.setTime(e._d.valueOf()+a*n),o&&r.updateOffset(e,i||p))}Vt.fn=Xt.prototype,Vt.invalid=function(){return Vt(NaN)};var $t=Gt(1,"add"),Zt=Gt(-1,"subtract");function en(e,t){var n,o=12*(t.year()-e.year())+(t.month()-e.month()),r=e.clone().add(o,"months");return t-r<0?n=(t-r)/(r-e.clone().add(o-1,"months")):n=(t-r)/(e.clone().add(o+1,"months")-r),-(o+n)||0}function tn(e){var t;return void 0===e?this._locale._abbr:(null!=(t=ut(e))&&(this._locale=t),this)}r.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",r.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var nn=y("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});function on(){return this._locale}var rn=126227808e5;function an(e,t){return(e%t+t)%t}function pn(e,t,n){return e<100&&e>=0?new Date(e+400,t,n)-rn:new Date(e,t,n).valueOf()}function sn(e,t,n){return e<100&&e>=0?Date.UTC(e+400,t,n)-rn:Date.UTC(e,t,n)}function cn(e,t){Y(0,[e,e.length],0,t)}function bn(e,t,n,o,r){var a;return null==e?Ie(this,o,r).year:(t>(a=Ue(e,o,r))&&(t=a),function(e,t,n,o,r){var a=Ye(e,t,n,o,r),i=Fe(a.year,0,a.dayOfYear);return this.year(i.getUTCFullYear()),this.month(i.getUTCMonth()),this.date(i.getUTCDate()),this}.call(this,e,t,n,o,r))}Y(0,["gg",2],0,function(){return this.weekYear()%100}),Y(0,["GG",2],0,function(){return this.isoWeekYear()%100}),cn("gggg","weekYear"),cn("ggggg","weekYear"),cn("GGGG","isoWeekYear"),cn("GGGGG","isoWeekYear"),S("weekYear","gg"),S("isoWeekYear","GG"),D("weekYear",1),D("isoWeekYear",1),be("G",ae),be("g",ae),be("GG",$,K),be("gg",$,K),be("GGGG",ne,G),be("gggg",ne,G),be("GGGGG",oe,Q),be("ggggg",oe,Q),ze(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,o){t[o.substr(0,2)]=W(e)}),ze(["gg","GG"],function(e,t,n,o){t[o]=r.parseTwoDigitYear(e)}),Y("Q",0,"Qo","quarter"),S("quarter","Q"),D("quarter",7),be("Q",V),de("Q",function(e,t){t[Ae]=3*(W(e)-1)}),Y("D",["DD",2],"Do","date"),S("date","D"),D("date",9),be("D",$),be("DD",$,K),be("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),de(["D","DD"],he),de("Do",function(e,t){t[he]=W(e.match($)[0])});var Mn=we("Date",!0);Y("DDD",["DDDD",3],"DDDo","dayOfYear"),S("dayOfYear","DDD"),D("dayOfYear",4),be("DDD",te),be("DDDD",J),de(["DDD","DDDD"],function(e,t,n){n._dayOfYear=W(e)}),Y("m",["mm",2],0,"minute"),S("minute","m"),D("minute",14),be("m",$),be("mm",$,K),de(["m","mm"],qe);var ln=we("Minutes",!1);Y("s",["ss",2],0,"second"),S("second","s"),D("second",15),be("s",$),be("ss",$,K),de(["s","ss"],_e);var un,dn=we("Seconds",!1);for(Y("S",0,0,function(){return~~(this.millisecond()/100)}),Y(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),Y(0,["SSS",3],0,"millisecond"),Y(0,["SSSS",4],0,function(){return 10*this.millisecond()}),Y(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),Y(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),Y(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),Y(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),Y(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),S("millisecond","ms"),D("millisecond",16),be("S",te,V),be("SS",te,K),be("SSS",te,J),un="SSSS";un.length<=9;un+="S")be(un,re);function zn(e,t){t[We]=W(1e3*("0."+e))}for(un="S";un.length<=9;un+="S")de(un,zn);var fn=we("Milliseconds",!1);Y("z",0,0,"zoneAbbr"),Y("zz",0,0,"zoneName");var On=m.prototype;function An(e){return e}On.add=$t,On.calendar=function(e,t){var n=e||kt(),o=Ft(n,this).startOf("day"),a=r.calendarFormat(this,o)||"sameElse",i=t&&(w(t[a])?t[a].call(this,n):t[a]);return this.format(i||this.localeData().calendar(a,this,kt(n)))},On.clone=function(){return new m(this)},On.diff=function(e,t,n){var o,r,a;if(!this.isValid())return NaN;if(!(o=Ft(e,this)).isValid())return NaN;switch(r=6e4*(o.utcOffset()-this.utcOffset()),t=N(t)){case"year":a=en(this,o)/12;break;case"month":a=en(this,o);break;case"quarter":a=en(this,o)/3;break;case"second":a=(this-o)/1e3;break;case"minute":a=(this-o)/6e4;break;case"hour":a=(this-o)/36e5;break;case"day":a=(this-o-r)/864e5;break;case"week":a=(this-o-r)/6048e5;break;default:a=this-o}return n?a:_(a)},On.endOf=function(e){var t;if(void 0===(e=N(e))||"millisecond"===e||!this.isValid())return this;var n=this._isUTC?sn:pn;switch(e){case"year":t=n(this.year()+1,0,1)-1;break;case"quarter":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=n(this.year(),this.month()+1,1)-1;break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=36e5-an(t+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":t=this._d.valueOf(),t+=6e4-an(t,6e4)-1;break;case"second":t=this._d.valueOf(),t+=1e3-an(t,1e3)-1}return this._d.setTime(t),r.updateOffset(this,!0),this},On.format=function(e){e||(e=this.isUtc()?r.defaultFormatUtc:r.defaultFormat);var t=I(this,e);return this.localeData().postformat(t)},On.from=function(e,t){return this.isValid()&&(q(e)&&e.isValid()||kt(e).isValid())?Vt({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},On.fromNow=function(e){return this.from(kt(),e)},On.to=function(e,t){return this.isValid()&&(q(e)&&e.isValid()||kt(e).isValid())?Vt({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},On.toNow=function(e){return this.to(kt(),e)},On.get=function(e){return w(this[e=N(e)])?this[e]():this},On.invalidAt=function(){return d(this).overflow},On.isAfter=function(e,t){var n=q(e)?e:kt(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=N(t)||"millisecond")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(t).valueOf())},On.isBefore=function(e,t){var n=q(e)?e:kt(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=N(t)||"millisecond")?this.valueOf()<n.valueOf():this.clone().endOf(t).valueOf()<n.valueOf())},On.isBetween=function(e,t,n,o){var r=q(e)?e:kt(e),a=q(t)?t:kt(t);return!!(this.isValid()&&r.isValid()&&a.isValid())&&("("===(o=o||"()")[0]?this.isAfter(r,n):!this.isBefore(r,n))&&(")"===o[1]?this.isBefore(a,n):!this.isAfter(a,n))},On.isSame=function(e,t){var n,o=q(e)?e:kt(e);return!(!this.isValid()||!o.isValid())&&("millisecond"===(t=N(t)||"millisecond")?this.valueOf()===o.valueOf():(n=o.valueOf(),this.clone().startOf(t).valueOf()<=n&&n<=this.clone().endOf(t).valueOf()))},On.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)},On.isSameOrBefore=function(e,t){return this.isSame(e,t)||this.isBefore(e,t)},On.isValid=function(){return z(this)},On.lang=nn,On.locale=tn,On.localeData=on,On.max=Tt,On.min=Bt,On.parsingFlags=function(){return l({},d(this))},On.set=function(e,t){if("object"==typeof e)for(var n=function(e){var t=[];for(var n in e)t.push({unit:n,priority:C[n]});return t.sort(function(e,t){return e.priority-t.priority}),t}(e=X(e)),o=0;o<n.length;o++)this[n[o].unit](e[n[o].unit]);else if(w(this[e=N(e)]))return this[e](t);return this},On.startOf=function(e){var t;if(void 0===(e=N(e))||"millisecond"===e||!this.isValid())return this;var n=this._isUTC?sn:pn;switch(e){case"year":t=n(this.year(),0,1);break;case"quarter":t=n(this.year(),this.month()-this.month()%3,1);break;case"month":t=n(this.year(),this.month(),1);break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=n(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=an(t+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case"minute":t=this._d.valueOf(),t-=an(t,6e4);break;case"second":t=this._d.valueOf(),t-=an(t,1e3)}return this._d.setTime(t),r.updateOffset(this,!0),this},On.subtract=Zt,On.toArray=function(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]},On.toObject=function(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}},On.toDate=function(){return new Date(this.valueOf())},On.toISOString=function(e){if(!this.isValid())return null;var t=!0!==e,n=t?this.clone().utc():this;return n.year()<0||n.year()>9999?I(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):w(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",I(n,"Z")):I(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},On.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e="moment",t="";this.isLocal()||(e=0===this.utcOffset()?"moment.utc":"moment.parseZone",t="Z");var n="["+e+'("]',o=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",r=t+'[")]';return this.format(n+o+"-MM-DD[T]HH:mm:ss.SSS"+r)},On.toJSON=function(){return this.isValid()?this.toISOString():null},On.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},On.unix=function(){return Math.floor(this.valueOf()/1e3)},On.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},On.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},On.year=Ee,On.isLeapYear=function(){return Le(this.year())},On.weekYear=function(e){return bn.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},On.isoWeekYear=function(e){return bn.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},On.quarter=On.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},On.month=De,On.daysInMonth=function(){return Te(this.year(),this.month())},On.week=On.weeks=function(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")},On.isoWeek=On.isoWeeks=function(e){var t=Ie(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")},On.weeksInYear=function(){var e=this.localeData()._week;return Ue(this.year(),e.dow,e.doy)},On.isoWeeksInYear=function(){return Ue(this.year(),1,4)},On.date=Mn,On.day=On.days=function(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=function(e,t){return"string"!=typeof e?e:isNaN(e)?"number"==typeof(e=t.weekdaysParse(e))?e:null:parseInt(e,10)}(e,this.localeData()),this.add(e-t,"d")):t},On.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")},On.isoWeekday=function(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=function(e,t){return"string"==typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7},On.dayOfYear=function(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")},On.hour=On.hours=at,On.minute=On.minutes=ln,On.second=On.seconds=dn,On.millisecond=On.milliseconds=fn,On.utcOffset=function(e,t,n){var o,a=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if("string"==typeof e){if(null===(e=Ht(pe,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&t&&(o=jt(this)),this._offset=e,this._isUTC=!0,null!=o&&this.add(o,"m"),a!==e&&(!t||this._changeInProgress?Qt(this,Vt(e-a,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,r.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?a:jt(this)},On.utc=function(e){return this.utcOffset(0,e)},On.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(jt(this),"m")),this},On.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=Ht(ie,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this},On.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?kt(e).utcOffset():0,(this.utcOffset()-e)%60==0)},On.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},On.isLocal=function(){return!!this.isValid()&&!this._isUTC},On.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},On.isUtc=Yt,On.isUTC=Yt,On.zoneAbbr=function(){return this._isUTC?"UTC":""},On.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},On.dates=y("dates accessor is deprecated. Use date instead.",Mn),On.months=y("months accessor is deprecated. Use month instead",De),On.years=y("years accessor is deprecated. Use year instead",Ee),On.zone=y("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),On.isDSTShifted=y("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!p(this._isDSTShifted))return this._isDSTShifted;var e={};if(A(e,this),(e=Et(e))._a){var t=e._isUTC?u(e._a):kt(e._a);this._isDSTShifted=this.isValid()&&g(e._a,t.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted});var hn=B.prototype;function mn(e,t,n,o){var r=ut(),a=u().set(o,t);return r[n](a,e)}function qn(e,t,n){if(s(e)&&(t=e,e=void 0),e=e||"",null!=t)return mn(e,t,n,"month");var o,r=[];for(o=0;o<12;o++)r[o]=mn(e,o,n,"month");return r}function _n(e,t,n,o){"boolean"==typeof e?(s(t)&&(n=t,t=void 0),t=t||""):(n=t=e,e=!1,s(t)&&(n=t,t=void 0),t=t||"");var r,a=ut(),i=e?a._week.dow:0;if(null!=n)return mn(t,(n+i)%7,o,"day");var p=[];for(r=0;r<7;r++)p[r]=mn(t,(r+i)%7,o,"day");return p}hn.calendar=function(e,t,n){var o=this._calendar[e]||this._calendar.sameElse;return w(o)?o.call(t,n):o},hn.longDateFormat=function(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])},hn.invalidDate=function(){return this._invalidDate},hn.ordinal=function(e){return this._ordinal.replace("%d",e)},hn.preparse=An,hn.postformat=An,hn.relativeTime=function(e,t,n,o){var r=this._relativeTime[n];return w(r)?r(e,t,n,o):r.replace(/%d/i,e)},hn.pastFuture=function(e,t){var n=this._relativeTime[e>0?"future":"past"];return w(n)?n(t):n.replace(/%s/i,t)},hn.set=function(e){var t,n;for(n in e)w(t=e[n])?this[n]=t:this["_"+n]=t;this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},hn.months=function(e,t){return e?a(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||Se).test(t)?"format":"standalone"][e.month()]:a(this._months)?this._months:this._months.standalone},hn.monthsShort=function(e,t){return e?a(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[Se.test(t)?"format":"standalone"][e.month()]:a(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},hn.monthsParse=function(e,t,n){var o,r,a;if(this._monthsParseExact)return function(e,t,n){var o,r,a,i=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],o=0;o<12;++o)a=u([2e3,o]),this._shortMonthsParse[o]=this.monthsShort(a,"").toLocaleLowerCase(),this._longMonthsParse[o]=this.months(a,"").toLocaleLowerCase();return n?"MMM"===t?-1!==(r=Re.call(this._shortMonthsParse,i))?r:null:-1!==(r=Re.call(this._longMonthsParse,i))?r:null:"MMM"===t?-1!==(r=Re.call(this._shortMonthsParse,i))?r:-1!==(r=Re.call(this._longMonthsParse,i))?r:null:-1!==(r=Re.call(this._longMonthsParse,i))?r:-1!==(r=Re.call(this._shortMonthsParse,i))?r:null}.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),o=0;o<12;o++){if(r=u([2e3,o]),n&&!this._longMonthsParse[o]&&(this._longMonthsParse[o]=new RegExp("^"+this.months(r,"").replace(".","")+"$","i"),this._shortMonthsParse[o]=new RegExp("^"+this.monthsShort(r,"").replace(".","")+"$","i")),n||this._monthsParse[o]||(a="^"+this.months(r,"")+"|^"+this.monthsShort(r,""),this._monthsParse[o]=new RegExp(a.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[o].test(e))return o;if(n&&"MMM"===t&&this._shortMonthsParse[o].test(e))return o;if(!n&&this._monthsParse[o].test(e))return o}},hn.monthsRegex=function(e){return this._monthsParseExact?(M(this,"_monthsRegex")||He.call(this),e?this._monthsStrictRegex:this._monthsRegex):(M(this,"_monthsRegex")||(this._monthsRegex=xe),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},hn.monthsShortRegex=function(e){return this._monthsParseExact?(M(this,"_monthsRegex")||He.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(M(this,"_monthsShortRegex")||(this._monthsShortRegex=Pe),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},hn.week=function(e){return Ie(e,this._week.dow,this._week.doy).week},hn.firstDayOfYear=function(){return this._week.doy},hn.firstDayOfWeek=function(){return this._week.dow},hn.weekdays=function(e,t){var n=a(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?"format":"standalone"];return!0===e?Ve(n,this._week.dow):e?n[e.day()]:n},hn.weekdaysMin=function(e){return!0===e?Ve(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin},hn.weekdaysShort=function(e){return!0===e?Ve(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort},hn.weekdaysParse=function(e,t,n){var o,r,a;if(this._weekdaysParseExact)return function(e,t,n){var o,r,a,i=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],o=0;o<7;++o)a=u([2e3,1]).day(o),this._minWeekdaysParse[o]=this.weekdaysMin(a,"").toLocaleLowerCase(),this._shortWeekdaysParse[o]=this.weekdaysShort(a,"").toLocaleLowerCase(),this._weekdaysParse[o]=this.weekdays(a,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(r=Re.call(this._weekdaysParse,i))?r:null:"ddd"===t?-1!==(r=Re.call(this._shortWeekdaysParse,i))?r:null:-1!==(r=Re.call(this._minWeekdaysParse,i))?r:null:"dddd"===t?-1!==(r=Re.call(this._weekdaysParse,i))?r:-1!==(r=Re.call(this._shortWeekdaysParse,i))?r:-1!==(r=Re.call(this._minWeekdaysParse,i))?r:null:"ddd"===t?-1!==(r=Re.call(this._shortWeekdaysParse,i))?r:-1!==(r=Re.call(this._weekdaysParse,i))?r:-1!==(r=Re.call(this._minWeekdaysParse,i))?r:null:-1!==(r=Re.call(this._minWeekdaysParse,i))?r:-1!==(r=Re.call(this._weekdaysParse,i))?r:-1!==(r=Re.call(this._shortWeekdaysParse,i))?r:null}.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),o=0;o<7;o++){if(r=u([2e3,1]).day(o),n&&!this._fullWeekdaysParse[o]&&(this._fullWeekdaysParse[o]=new RegExp("^"+this.weekdays(r,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[o]=new RegExp("^"+this.weekdaysShort(r,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[o]=new RegExp("^"+this.weekdaysMin(r,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[o]||(a="^"+this.weekdays(r,"")+"|^"+this.weekdaysShort(r,"")+"|^"+this.weekdaysMin(r,""),this._weekdaysParse[o]=new RegExp(a.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[o].test(e))return o;if(n&&"ddd"===t&&this._shortWeekdaysParse[o].test(e))return o;if(n&&"dd"===t&&this._minWeekdaysParse[o].test(e))return o;if(!n&&this._weekdaysParse[o].test(e))return o}},hn.weekdaysRegex=function(e){return this._weekdaysParseExact?(M(this,"_weekdaysRegex")||et.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(M(this,"_weekdaysRegex")||(this._weekdaysRegex=Qe),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},hn.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(M(this,"_weekdaysRegex")||et.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(M(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=$e),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},hn.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(M(this,"_weekdaysRegex")||et.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(M(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Ze),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},hn.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},hn.meridiem=function(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"},Mt("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===W(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),r.lang=y("moment.lang is deprecated. Use moment.locale instead.",Mt),r.langData=y("moment.langData is deprecated. Use moment.localeData instead.",ut);var Wn=Math.abs;function gn(e,t,n,o){var r=Vt(t,n);return e._milliseconds+=o*r._milliseconds,e._days+=o*r._days,e._months+=o*r._months,e._bubble()}function vn(e){return e<0?Math.floor(e):Math.ceil(e)}function yn(e){return 4800*e/146097}function Ln(e){return 146097*e/4800}function Rn(e){return function(){return this.as(e)}}var En=Rn("ms"),wn=Rn("s"),kn=Rn("m"),Bn=Rn("h"),Tn=Rn("d"),Sn=Rn("w"),Nn=Rn("M"),Xn=Rn("Q"),Cn=Rn("y");function Dn(e){return function(){return this.isValid()?this._data[e]:NaN}}var Pn=Dn("milliseconds"),xn=Dn("seconds"),Hn=Dn("minutes"),Fn=Dn("hours"),jn=Dn("days"),Yn=Dn("months"),In=Dn("years"),Un=Math.round,Vn={ss:44,s:45,m:45,h:22,d:26,M:11},Kn=Math.abs;function Jn(e){return(e>0)-(e<0)||+e}function Gn(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n=Kn(this._milliseconds)/1e3,o=Kn(this._days),r=Kn(this._months);e=_(n/60),t=_(e/60),n%=60,e%=60;var a=_(r/12),i=r%=12,p=o,s=t,c=e,b=n?n.toFixed(3).replace(/\.?0+$/,""):"",M=this.asSeconds();if(!M)return"P0D";var l=M<0?"-":"",u=Jn(this._months)!==Jn(M)?"-":"",d=Jn(this._days)!==Jn(M)?"-":"",z=Jn(this._milliseconds)!==Jn(M)?"-":"";return l+"P"+(a?u+a+"Y":"")+(i?u+i+"M":"")+(p?d+p+"D":"")+(s||c||b?"T":"")+(s?z+s+"H":"")+(c?z+c+"M":"")+(b?z+b+"S":"")}var Qn=Xt.prototype;return Qn.isValid=function(){return this._isValid},Qn.abs=function(){var e=this._data;return this._milliseconds=Wn(this._milliseconds),this._days=Wn(this._days),this._months=Wn(this._months),e.milliseconds=Wn(e.milliseconds),e.seconds=Wn(e.seconds),e.minutes=Wn(e.minutes),e.hours=Wn(e.hours),e.months=Wn(e.months),e.years=Wn(e.years),this},Qn.add=function(e,t){return gn(this,e,t,1)},Qn.subtract=function(e,t){return gn(this,e,t,-1)},Qn.as=function(e){if(!this.isValid())return NaN;var t,n,o=this._milliseconds;if("month"===(e=N(e))||"quarter"===e||"year"===e)switch(t=this._days+o/864e5,n=this._months+yn(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(Ln(this._months)),e){case"week":return t/7+o/6048e5;case"day":return t+o/864e5;case"hour":return 24*t+o/36e5;case"minute":return 1440*t+o/6e4;case"second":return 86400*t+o/1e3;case"millisecond":return Math.floor(864e5*t)+o;default:throw new Error("Unknown unit "+e)}},Qn.asMilliseconds=En,Qn.asSeconds=wn,Qn.asMinutes=kn,Qn.asHours=Bn,Qn.asDays=Tn,Qn.asWeeks=Sn,Qn.asMonths=Nn,Qn.asQuarters=Xn,Qn.asYears=Cn,Qn.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*W(this._months/12):NaN},Qn._bubble=function(){var e,t,n,o,r,a=this._milliseconds,i=this._days,p=this._months,s=this._data;return a>=0&&i>=0&&p>=0||a<=0&&i<=0&&p<=0||(a+=864e5*vn(Ln(p)+i),i=0,p=0),s.milliseconds=a%1e3,e=_(a/1e3),s.seconds=e%60,t=_(e/60),s.minutes=t%60,n=_(t/60),s.hours=n%24,i+=_(n/24),p+=r=_(yn(i)),i-=vn(Ln(r)),o=_(p/12),p%=12,s.days=i,s.months=p,s.years=o,this},Qn.clone=function(){return Vt(this)},Qn.get=function(e){return e=N(e),this.isValid()?this[e+"s"]():NaN},Qn.milliseconds=Pn,Qn.seconds=xn,Qn.minutes=Hn,Qn.hours=Fn,Qn.days=jn,Qn.weeks=function(){return _(this.days()/7)},Qn.months=Yn,Qn.years=In,Qn.humanize=function(e){if(!this.isValid())return this.localeData().invalidDate();var t=this.localeData(),n=function(e,t,n){var o=Vt(e).abs(),r=Un(o.as("s")),a=Un(o.as("m")),i=Un(o.as("h")),p=Un(o.as("d")),s=Un(o.as("M")),c=Un(o.as("y")),b=r<=Vn.ss&&["s",r]||r<Vn.s&&["ss",r]||a<=1&&["m"]||a<Vn.m&&["mm",a]||i<=1&&["h"]||i<Vn.h&&["hh",i]||p<=1&&["d"]||p<Vn.d&&["dd",p]||s<=1&&["M"]||s<Vn.M&&["MM",s]||c<=1&&["y"]||["yy",c];return b[2]=t,b[3]=+e>0,b[4]=n,function(e,t,n,o,r){return r.relativeTime(t||1,!!n,e,o)}.apply(null,b)}(this,!e,t);return e&&(n=t.pastFuture(+this,n)),t.postformat(n)},Qn.toISOString=Gn,Qn.toString=Gn,Qn.toJSON=Gn,Qn.locale=tn,Qn.localeData=on,Qn.toIsoString=y("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Gn),Qn.lang=nn,Y("X",0,0,"unix"),Y("x",0,0,"valueOf"),be("x",ae),be("X",/[+-]?\d+(\.\d{1,3})?/),de("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e,10))}),de("x",function(e,t,n){n._d=new Date(W(e))}),r.version="2.24.0",t=kt,r.fn=On,r.min=function(){return St("isBefore",[].slice.call(arguments,0))},r.max=function(){return St("isAfter",[].slice.call(arguments,0))},r.now=function(){return Date.now?Date.now():+new Date},r.utc=u,r.unix=function(e){return kt(1e3*e)},r.months=function(e,t){return qn(e,t,"months")},r.isDate=c,r.locale=Mt,r.invalid=f,r.duration=Vt,r.isMoment=q,r.weekdays=function(e,t,n){return _n(e,t,n,"weekdays")},r.parseZone=function(){return kt.apply(null,arguments).parseZone()},r.localeData=ut,r.isDuration=Ct,r.monthsShort=function(e,t){return qn(e,t,"monthsShort")},r.weekdaysMin=function(e,t,n){return _n(e,t,n,"weekdaysMin")},r.defineLocale=lt,r.updateLocale=function(e,t){if(null!=t){var n,o,r=it;null!=(o=bt(e))&&(r=o._config),(n=new B(t=k(r,t))).parentLocale=pt[e],pt[e]=n,Mt(e)}else null!=pt[e]&&(null!=pt[e].parentLocale?pt[e]=pt[e].parentLocale:null!=pt[e]&&delete pt[e]);return pt[e]},r.locales=function(){return L(pt)},r.weekdaysShort=function(e,t,n){return _n(e,t,n,"weekdaysShort")},r.normalizeUnits=N,r.relativeTimeRounding=function(e){return void 0===e?Un:"function"==typeof e&&(Un=e,!0)},r.relativeTimeThreshold=function(e,t){return void 0!==Vn[e]&&(void 0===t?Vn[e]:(Vn[e]=t,"s"===e&&(Vn.ss=t-1),!0))},r.calendarFormat=function(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"},r.prototype=On,r.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},r}()}).call(this,n(89)(e))},function(e,t,n){e.exports=n(432)()},function(e,t,n){"use strict";e.exports=n(431)},function(e,t,n){e.exports={default:n(547),__esModule:!0}},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t,n){"use strict";t.__esModule=!0;var o,r=(o=n(49))&&o.__esModule?o:{default:o};t.default=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==(void 0===t?"undefined":(0,r.default)(t))&&"function"!=typeof t?e:t}},function(e,t,n){"use strict";t.__esModule=!0;var o=i(n(549)),r=i(n(553)),a=i(n(49));function i(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+(void 0===t?"undefined":(0,a.default)(t)));e.prototype=(0,r.default)(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(o.default?(0,o.default)(e,t):e.__proto__=t)}},function(e,t,n){"use strict";t.__esModule=!0;var o,r=(o=n(227))&&o.__esModule?o:{default:o};t.default=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),(0,r.default)(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}()},function(e,t,n){var o=n(560),r=new o;e.exports={moment:r.moment,numberFormat:r.numberFormat.bind(r),translate:r.translate.bind(r),configure:r.configure.bind(r),setLocale:r.setLocale.bind(r),getLocale:r.getLocale.bind(r),getLocaleSlug:r.getLocaleSlug.bind(r),addTranslations:r.addTranslations.bind(r),reRenderTranslations:r.reRenderTranslations.bind(r),registerComponentUpdateHook:r.registerComponentUpdateHook.bind(r),registerTranslateHook:r.registerTranslateHook.bind(r),state:r.state,stateObserver:r.stateObserver,on:r.stateObserver.on.bind(r.stateObserver),off:r.stateObserver.removeListener.bind(r.stateObserver),emit:r.stateObserver.emit.bind(r.stateObserver),localize:n(574)(r),$this:r,I18N:o}},function(e,t,n){"use strict";function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}n.r(t);var r=n(2),a=n.n(r),i=n(1),p=n.n(i),s=a.a.createContext(null),c=function(e){function t(t){var n;n=e.call(this,t)||this;var o=t.store;return n.state={storeState:o.getState(),store:o},n}o(t,e);var n=t.prototype;return n.componentDidMount=function(){this._isMounted=!0,this.subscribe()},n.componentWillUnmount=function(){this.unsubscribe&&this.unsubscribe(),this._isMounted=!1},n.componentDidUpdate=function(e){this.props.store!==e.store&&(this.unsubscribe&&this.unsubscribe(),this.subscribe())},n.subscribe=function(){var e=this,t=this.props.store;this.unsubscribe=t.subscribe(function(){var n=t.getState();e._isMounted&&e.setState(function(e){return e.storeState===n?null:{storeState:n}})});var n=t.getState();n!==this.state.storeState&&this.setState({storeState:n})},n.render=function(){var e=this.props.context||s;return a.a.createElement(e.Provider,{value:this.state},this.props.children)},t}(r.Component);c.propTypes={store:p.a.shape({subscribe:p.a.func.isRequired,dispatch:p.a.func.isRequired,getState:p.a.func.isRequired}),context:p.a.object,children:p.a.any};var b=c;function M(){return(M=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e}).apply(this,arguments)}function l(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}var u=n(95),d=n.n(u),z=n(11),f=n.n(z),O=n(396);function A(e,t){void 0===t&&(t={});var n=t,i=n.getDisplayName,p=void 0===i?function(e){return"ConnectAdvanced("+e+")"}:i,c=n.methodName,b=void 0===c?"connectAdvanced":c,u=n.renderCountProp,z=void 0===u?void 0:u,A=n.shouldHandleStateChanges,h=void 0===A||A,m=n.storeKey,q=void 0===m?"store":m,_=n.withRef,W=void 0!==_&&_,g=n.forwardRef,v=void 0!==g&&g,y=n.context,L=void 0===y?s:y,R=l(n,["getDisplayName","methodName","renderCountProp","shouldHandleStateChanges","storeKey","withRef","forwardRef","context"]);f()(void 0===z,"renderCountProp is removed. render counting is built into the latest React dev tools profiling extension"),f()(!W,"withRef is removed. To access the wrapped instance, use a ref on the connected component");var E="To use a custom Redux store for specific components, create a custom React context with React.createContext(), and pass the context object to React Redux's Provider and specific components like: <Provider context={MyContext}><ConnectedComponent context={MyContext} /></Provider>. You may also pass a {context : MyContext} option to connect";f()("store"===q,"storeKey has been removed and does not do anything. "+E);var w=L;return function(t){var n=t.displayName||t.name||"Component",i=p(n),s=M({},R,{getDisplayName:p,methodName:b,renderCountProp:z,shouldHandleStateChanges:h,storeKey:q,displayName:i,wrappedComponentName:n,WrappedComponent:t}),c=R.pure,l=r.Component;c&&(l=r.PureComponent);var u=function(n){function r(t){var o,r,i,p,s,b,l,u,d,z,O;return o=n.call(this,t)||this,f()(v?!t.wrapperProps[q]:!t[q],"Passing redux store in props has been removed and does not do anything. "+E),o.selectDerivedProps=function(t,n,o,a){if(c&&r===n&&i===t)return p;o===s&&b===a||(s=o,b=a,l=e(o.dispatch,a)),r=n,i=t;var M=l(t,n);return p=M},o.selectChildElement=function(e,t,n){return t===u&&n===d&&O===e||(u=t,d=n,O=e,z=a.a.createElement(e,M({},t,{ref:n}))),z},o.indirectRenderWrappedComponent=o.indirectRenderWrappedComponent.bind(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(o)),o}o(r,n);var p=r.prototype;return p.indirectRenderWrappedComponent=function(e){return this.renderWrappedComponent(e)},p.renderWrappedComponent=function(e){f()(e,'Could not find "store" in the context of "'+i+'". Either wrap the root component in a <Provider>, or pass a custom React context provider to <Provider> and the corresponding React context consumer to '+i+" in connect options.");var n,o=e.storeState,r=e.store,a=this.props;v&&(a=this.props.wrapperProps,n=this.props.forwardedRef);var p=this.selectDerivedProps(o,a,r,s);return this.selectChildElement(t,p,n)},p.render=function(){var e=this.props.context&&this.props.context.Consumer&&Object(O.isContextConsumer)(a.a.createElement(this.props.context.Consumer,null))?this.props.context:w;return a.a.createElement(e.Consumer,null,this.indirectRenderWrappedComponent)},r}(l);if(u.WrappedComponent=t,u.displayName=i,v){var A=a.a.forwardRef(function(e,t){return a.a.createElement(u,{wrapperProps:e,forwardedRef:t})});return A.displayName=i,A.WrappedComponent=t,d()(A,t)}return d()(u,t)}}var h=Object.prototype.hasOwnProperty;function m(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!=e&&t!=t}function q(e,t){if(m(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!1;for(var r=0;r<n.length;r++)if(!h.call(t,n[r])||!m(e[n[r]],t[n[r]]))return!1;return!0}var _=n(15);function W(e){return function(t,n){var o=e(t,n);function r(){return o}return r.dependsOnOwnProps=!1,r}}function g(e){return null!==e.dependsOnOwnProps&&void 0!==e.dependsOnOwnProps?Boolean(e.dependsOnOwnProps):1!==e.length}function v(e,t){return function(t,n){n.displayName;var o=function(e,t){return o.dependsOnOwnProps?o.mapToProps(e,t):o.mapToProps(e)};return o.dependsOnOwnProps=!0,o.mapToProps=function(t,n){o.mapToProps=e,o.dependsOnOwnProps=g(e);var r=o(t,n);return"function"==typeof r&&(o.mapToProps=r,o.dependsOnOwnProps=g(r),r=o(t,n)),r},o}}function y(e,t,n){return M({},n,e,t)}function L(e,t,n){for(var o=t.length-1;o>=0;o--){var r=t[o](e);if(r)return r}return function(t,o){throw new Error("Invalid value of type "+typeof e+" for "+n+" argument when connecting component "+o.wrappedComponentName+".")}}function R(e,t){return e===t}var E,w,k,B,T,S,N,X,C,D,P,x=(w=(E={}).connectHOC,k=void 0===w?A:w,T=void 0===(B=E.mapStateToPropsFactories)?[function(e){return"function"==typeof e?v(e):void 0},function(e){return e?void 0:W(function(){return{}})}]:B,N=void 0===(S=E.mapDispatchToPropsFactories)?[function(e){return"function"==typeof e?v(e):void 0},function(e){return e?void 0:W(function(e){return{dispatch:e}})},function(e){return e&&"object"==typeof e?W(function(t){return Object(_.bindActionCreators)(e,t)}):void 0}]:S,C=void 0===(X=E.mergePropsFactories)?[function(e){return"function"==typeof e?function(e){return function(t,n){n.displayName;var o,r=n.pure,a=n.areMergedPropsEqual,i=!1;return function(t,n,p){var s=e(t,n,p);return i?r&&a(s,o)||(o=s):(i=!0,o=s),o}}}(e):void 0},function(e){return e?void 0:function(){return y}}]:X,P=void 0===(D=E.selectorFactory)?function(e,t){var n=t.initMapStateToProps,o=t.initMapDispatchToProps,r=t.initMergeProps,a=l(t,["initMapStateToProps","initMapDispatchToProps","initMergeProps"]),i=n(e,a),p=o(e,a),s=r(e,a);return(a.pure?function(e,t,n,o,r){var a,i,p,s,c,b=r.areStatesEqual,M=r.areOwnPropsEqual,l=r.areStatePropsEqual,u=!1;function d(r,u){var d,z,f=!M(u,i),O=!b(r,a);return a=r,i=u,f&&O?(p=e(a,i),t.dependsOnOwnProps&&(s=t(o,i)),c=n(p,s,i)):f?(e.dependsOnOwnProps&&(p=e(a,i)),t.dependsOnOwnProps&&(s=t(o,i)),c=n(p,s,i)):O?(d=e(a,i),z=!l(d,p),p=d,z&&(c=n(p,s,i)),c):c}return function(r,b){return u?d(r,b):(p=e(a=r,i=b),s=t(o,i),c=n(p,s,i),u=!0,c)}}:function(e,t,n,o){return function(r,a){return n(e(r,a),t(o,a),a)}})(i,p,s,e,a)}:D,function(e,t,n,o){void 0===o&&(o={});var r=o,a=r.pure,i=void 0===a||a,p=r.areStatesEqual,s=void 0===p?R:p,c=r.areOwnPropsEqual,b=void 0===c?q:c,u=r.areStatePropsEqual,d=void 0===u?q:u,z=r.areMergedPropsEqual,f=void 0===z?q:z,O=l(r,["pure","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","areMergedPropsEqual"]),A=L(e,T,"mapStateToProps"),h=L(t,N,"mapDispatchToProps"),m=L(n,C,"mergeProps");return k(P,M({methodName:"connect",getDisplayName:function(e){return"Connect("+e+")"},shouldHandleStateChanges:Boolean(e),initMapStateToProps:A,initMapDispatchToProps:h,initMergeProps:m,pure:i,areStatesEqual:s,areOwnPropsEqual:b,areStatePropsEqual:d,areMergedPropsEqual:f},O))});n.d(t,"Provider",function(){return b}),n.d(t,"connectAdvanced",function(){return A}),n.d(t,"ReactReduxContext",function(){return s}),n.d(t,"connect",function(){return x})},function(e,t,n){"use strict";t.__esModule=!0;var o,r=(o=n(533))&&o.__esModule?o:{default:o};t.default=r.default||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e}},function(e,t,n){"use strict";e.exports=function(e,t,n,o,r,a,i,p){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,o,r,a,i,p],b=0;(s=new Error(t.replace(/%s/g,function(){return c[b++]}))).name="Invariant Violation"}throw s.framesToPop=1,s}}},function(e,t,n){var o;!function(){"use strict";var n={}.hasOwnProperty;function r(){for(var e=[],t=0;t<arguments.length;t++){var o=arguments[t];if(o){var a=typeof o;if("string"===a||"number"===a)e.push(o);else if(Array.isArray(o)&&o.length){var i=r.apply(null,o);i&&e.push(i)}else if("object"===a)for(var p in o)n.call(o,p)&&o[p]&&e.push(p)}}return e.join(" ")}e.exports?(r.default=r,e.exports=r):void 0===(o=function(){return r}.apply(t,[]))||(e.exports=o)}()},function(e,t,n){"use strict";var o=a(n(238)),r=a(n(49));function a(e){return e&&e.__esModule?e:{default:e}}var i=n(104)("dops:analytics"),p=n(23),s=n(601),c=void 0,b=void 0;window._tkq=window._tkq||[],window.ga=window.ga||function(){(window.ga.q=window.ga.q||[]).push(arguments)},window.ga.l=+new Date;var M={initialize:function(e,t,n){M.setUser(e,t),M.setSuperProps(n),M.identifyUser()},setUser:function(e,t){b={ID:e,username:t}},setSuperProps:function(e){c=e},mc:{bumpStat:function(e,t){var n=function(e,t){var n="";if("object"===(void 0===e?"undefined":(0,r.default)(e))){for(var o in e)n+="&x_"+encodeURIComponent(o)+"="+encodeURIComponent(e[o]);i("Bumping stats %o",e)}else n="&x_"+encodeURIComponent(e)+"="+encodeURIComponent(t),i('Bumping stat "%s" in group "%s"',t,e);return n}(e,t);s("mc_analytics_enabled")&&((new Image).src=document.location.protocol+"//pixel.wp.com/g.gif?v=wpcom-no-pv"+n+"&t="+Math.random())},bumpStatWithPageView:function(e,t){var n=function(e,t){var n="";if("object"===(void 0===e?"undefined":(0,r.default)(e))){for(var o in e)n+="&"+encodeURIComponent(o)+"="+encodeURIComponent(e[o]);i("Built stats %o",e)}else n="&"+encodeURIComponent(e)+"="+encodeURIComponent(t),i('Built stat "%s" in group "%s"',t,e);return n}(e,t);s("mc_analytics_enabled")&&((new Image).src=document.location.protocol+"//pixel.wp.com/g.gif?v=wpcom"+n+"&t="+Math.random())}},pageView:{record:function(e,t){M.tracks.recordPageView(e),M.ga.recordPageView(e,t)}},purchase:{record:function(e,t,n,o,r,a,i){M.ga.recordPurchase(e,t,n,o,r,a,i)}},tracks:{recordEvent:function(e,t){var n=void 0;t=t||{},i('Record event "%s" called with props %s',e,(0,o.default)(t)),0===e.indexOf("akismet_")||0===e.indexOf("jetpack_")?(c&&(n=c.getAll(),i("- Super Props: %o",n),t=p(t,n)),window._tkq.push(["recordEvent",e,t])):i('- Event name must be prefixed by "akismet_" or "jetpack_"')},recordJetpackClick:function(e){var t="object"===(void 0===e?"undefined":(0,r.default)(e))?e:{target:e};M.tracks.recordEvent("jetpack_wpa_click",t)},recordPageView:function(e){M.tracks.recordEvent("akismet_page_view",{path:e})},setOptOut:function(e){i("Pushing setOptOut: %o",e),window._tkq.push(["setOptOut",e])}},ga:{initialized:!1,initialize:function(){var e={};M.ga.initialized||(b&&(e={userId:"u-"+b.ID}),window.ga("create",s("google_analytics_key"),"auto",e),M.ga.initialized=!0)},recordPageView:function(e,t){M.ga.initialize(),i("Recording Page View ~ [URL: "+e+"] [Title: "+t+"]"),s("google_analytics_enabled")&&(window.ga("set","page",e),window.ga("send",{hitType:"pageview",page:e,title:t}))},recordEvent:function(e,t,n,o){M.ga.initialize();var r="Recording Event ~ [Category: "+e+"] [Action: "+t+"]";void 0!==n&&(r+=" [Option Label: "+n+"]"),void 0!==o&&(r+=" [Option Value: "+o+"]"),i(r),s("google_analytics_enabled")&&window.ga("send","event",e,t,n,o)},recordPurchase:function(e,t,n,o,r,a,i){window.ga("require","ecommerce"),window.ga("ecommerce:addTransaction",{id:e,revenue:o,currency:i}),window.ga("ecommerce:addItem",{id:e,name:t,sku:n,price:r,quantity:a}),window.ga("ecommerce:send")}},identifyUser:function(){b&&window._tkq.push(["identifyUser",b.ID,b.username])},setProperties:function(e){window._tkq.push(["setProperties",e])},clearedIdentity:function(){window._tkq.push(["clearIdentity"])}};e.exports=M},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.JETPACK_SET_INITIAL_STATE="JETPACK_SET_INITIAL_STATE",t.CONNECT_URL_FETCH="CONNECT_URL_FETCH",t.CONNECT_URL_FETCH_FAIL="CONNECT_URL_FETCH_FAIL",t.CONNECT_URL_FETCH_SUCCESS="CONNECT_URL_FETCH_SUCCESS",t.DISCONNECT_SITE="DISCONNECT_SITE",t.DISCONNECT_SITE_FAIL="DISCONNECT_SITE_FAIL",t.DISCONNECT_SITE_SUCCESS="DISCONNECT_SITE_SUCCESS",t.UNLINK_USER="UNLINK_USER",t.UNLINK_USER_FAIL="UNLINK_USER_FAIL",t.UNLINK_USER_SUCCESS="UNLINK_USER_SUCCESS",t.USER_CONNECTION_DATA_FETCH="USER_CONNECTION_DATA_FETCH",t.USER_CONNECTION_DATA_FETCH_FAIL="USER_CONNECTION_DATA_FETCH_FAIL",t.USER_CONNECTION_DATA_FETCH_SUCCESS="USER_CONNECTION_DATA_FETCH_SUCCESS",t.USER_TRACKING_SETTINGS_FETCH="USER_TRACKING_SETTINGS_FETCH",t.USER_TRACKING_SETTINGS_FETCH_FAIL="USER_TRACKING_SETTINGS_FETCH_FAIL",t.USER_TRACKING_SETTINGS_FETCH_SUCCESS="USER_TRACKING_SETTINGS_FETCH_SUCCESS",t.USER_TRACKING_SETTINGS_UPDATE="USER_TRACKING_SETTINGS_UPDATE",t.USER_TRACKING_SETTINGS_UPDATE_FAIL="USER_TRACKING_SETTINGS_UPDATE_FAIL",t.USER_TRACKING_SETTINGS_UPDATE_SUCCESS="USER_TRACKING_SETTINGS_UPDATE_SUCCESS",t.JETPACK_MODULES_LIST_FETCH="JETPACK_MODULES_LIST_FETCH",t.JETPACK_MODULES_LIST_FETCH_FAIL="JETPACK_MODULES_LIST_FETCH_FAIL",t.JETPACK_MODULES_LIST_RECEIVE="JETPACK_MODULES_LIST_RECEIVE",t.JETPACK_MODULE_FETCH="JETPACK_MODULE_FETCH",t.JETPACK_MODULE_FETCH_FAIL="JETPACK_MODULE_FETCH_FAIL",t.JETPACK_MODULE_RECEIVE="JETPACK_MODULE_RECEIVE",t.JETPACK_MODULE_ACTIVATE="JETPACK_MODULE_ACTIVATE",t.JETPACK_MODULE_ACTIVATE_SUCCESS="JETPACK_MODULE_ACTIVATE_SUCCESS",t.JETPACK_MODULE_ACTIVATE_FAIL="JETPACK_MODULE_ACTIVATE_FAIL",t.JETPACK_MODULE_DEACTIVATE="JETPACK_MODULE_DEACTIVATE",t.JETPACK_MODULE_DEACTIVATE_FAIL="JETPACK_MODULE_DEACTIVATE_FAIL",t.JETPACK_MODULE_DEACTIVATE_SUCCESS="JETPACK_MODULE_DEACTIVATE_SUCCESS",t.JETPACK_MODULE_UPDATE_OPTIONS="JETPACK_MODULE_UPDATE_OPTIONS",t.JETPACK_MODULE_UPDATE_OPTIONS_FAIL="JETPACK_MODULE_UPDATE_OPTIONS_FAIL",t.JETPACK_MODULE_UPDATE_OPTIONS_SUCCESS="JETPACK_MODULE_UPDATE_OPTIONS_SUCCESS",t.JETPACK_CONNECTION_STATUS_FETCH="JETPACK_CONNECTION_STATUS_FETCH",t.JETPACK_CONNECTION_TEST_FETCH="JETPACK_CONNECTION_TEST_FETCH",t.JUMPSTART_ACTIVATE="JUMPSTART_ACTIVATE",t.JUMPSTART_ACTIVATE_FAIL="JUMPSTART_ACTIVATE_FAIL",t.JUMPSTART_ACTIVATE_SUCCESS="JUMPSTART_ACTIVATE_SUCCESS",t.JUMPSTART_SKIP="JUMPSTART_SKIP",t.JUMPSTART_SKIP_FAIL="JUMPSTART_SKIP_FAIL",t.JUMPSTART_SKIP_SUCCESS="JUMPSTART_SKIP_SUCCESS",t.DASHBOARD_PROTECT_COUNT_FETCH="DASHBOARD_PROTECT_COUNT_FETCH",t.DASHBOARD_PROTECT_COUNT_FETCH_FAIL="DASHBOARD_PROTECT_COUNT_FETCH_FAIL",t.DASHBOARD_PROTECT_COUNT_FETCH_SUCCESS="DASHBOARD_PROTECT_COUNT_FETCH_SUCCESS",t.RESET_OPTIONS="RESET_OPTIONS",t.RESET_OPTIONS_FAIL="RESET_OPTIONS_FAIL",t.RESET_OPTIONS_SUCCESS="RESET_OPTIONS_SUCCESS",t.VAULTPRESS_SITE_DATA_FETCH="VAULTPRESS_SITE_DATA_FETCH",t.VAULTPRESS_SITE_DATA_FETCH_FAIL="VAULTPRESS_SITE_DATA_FETCH_FAIL",t.VAULTPRESS_SITE_DATA_FETCH_SUCCESS="VAULTPRESS_SITE_DATA_FETCH_SUCCESS",t.AKISMET_DATA_FETCH="AKISMET_DATA_FETCH",t.AKISMET_DATA_FETCH_FAIL="AKISMET_DATA_FETCH_FAIL",t.AKISMET_DATA_FETCH_SUCCESS="AKISMET_DATA_FETCH_SUCCESS",t.AKISMET_KEY_CHECK_FETCH="AKISMET_KEY_CHECK_FETCH",t.AKISMET_KEY_CHECK_FETCH_FAIL="AKISMET_KEY_CHECK_FETCH_FAIL",t.AKISMET_KEY_CHECK_FETCH_SUCCESS="AKISMET_KEY_CHECK_FETCH_SUCCESS",t.PLUGIN_UPDATES_FETCH="PLUGIN_UPDATES_FETCH",t.PLUGIN_UPDATES_FETCH_FAIL="PLUGIN_UPDATES_FETCH_FAIL",t.PLUGIN_UPDATES_FETCH_SUCCESS="PLUGIN_UPDATES_FETCH_SUCCESS",t.STATS_SWITCH_TAB="STATS_SWITCH_TAB",t.STATS_DATA_FETCH="STATS_DATA_FETCH",t.STATS_DATA_FETCH_FAIL="STATS_DATA_FETCH_FAIL",t.STATS_DATA_FETCH_SUCCESS="STATS_DATA_FETCH_SUCCESS",t.JETPACK_SETTINGS_FETCH="JETPACK_SETTINGS_FETCH",t.JETPACK_SETTINGS_FETCH_RECEIVE="JETPACK_SETTINGS_FETCH_RECEIVE",t.JETPACK_SETTINGS_FETCH_FAIL="JETPACK_SETTINGS_FETCH_FAIL",t.JETPACK_SETTING_UPDATE="JETPACK_SETTING_UPDATE",t.JETPACK_SETTING_UPDATE_SUCCESS="JETPACK_SETTING_UPDATE_SUCCESS",t.JETPACK_SETTING_UPDATE_FAIL="JETPACK_SETTING_UPDATE_FAIL",t.JETPACK_SETTINGS_UPDATE="JETPACK_SETTINGS_UPDATE",t.JETPACK_SETTINGS_UPDATE_FAIL="JETPACK_SETTINGS_UPDATE_FAIL",t.JETPACK_SETTINGS_UPDATE_SUCCESS="JETPACK_SETTINGS_UPDATE_SUCCESS",t.JETPACK_SETTINGS_SET_UNSAVED_FLAG="JETPACK_SETTINGS_SET_UNSAVED_FLAG",t.JETPACK_SETTINGS_CLEAR_UNSAVED_FLAG="JETPACK_SETTINGS_CLEAR_UNSAVED_FLAG",t.JETPACK_SITE_DATA_FETCH="JETPACK_SITE_DATA_FETCH",t.JETPACK_SITE_DATA_FETCH_RECEIVE="JETPACK_SITE_DATA_FETCH_RECEIVE",t.JETPACK_SITE_DATA_FETCH_FAIL="JETPACK_SITE_DATA_FETCH_FAIL",t.JETPACK_SITE_FEATURES_FETCH="JETPACK_SITE_FEATURES_FETCH",t.JETPACK_SITE_FEATURES_FETCH_RECEIVE="JETPACK_SITE_FEATURES_FETCH_RECEIVE",t.JETPACK_SITE_FEATURES_FETCH_FAIL="JETPACK_SITE_FEATURES_FETCH_FAIL",t.JETPACK_SITE_PLANS_FETCH="JETPACK_SITE_PLANS_FETCH",t.JETPACK_SITE_PLANS_FETCH_RECEIVE="JETPACK_SITE_PLANS_FETCH_RECEIVE",t.JETPACK_SITE_PLANS_FETCH_FAIL="JETPACK_SITE_PLANS_FETCH_FAIL",t.JETPACK_ACTION_NOTICES_DISMISS="JETPACK_ACTION_NOTICES_DISMISS",t.JETPACK_NOTICES_DISPATCH_TYPE="JETPACK_NOTICES_DISPATCH_TYPE",t.JETPACK_NOTICES_DISMISS="JETPACK_NOTICES_DISMISS",t.JETPACK_NOTICES_DISMISS_FAIL="JETPACK_NOTICES_DISMISS_FAIL",t.JETPACK_NOTICES_DISMISS_SUCCESS="JETPACK_NOTICES_DISMISS_SUCCESS",t.JETPACK_PLUGINS_DATA_FETCH="JETPACK_PLUGINS_DATA_FETCH",t.JETPACK_PLUGINS_DATA_FETCH_RECEIVE="JETPACK_PLUGINS_DATA_FETCH_RECEIVE",t.JETPACK_PLUGINS_DATA_FETCH_FAIL="JETPACK_PLUGINS_DATA_FETCH_FAIL",t.JETPACK_SEARCH_TERM="JETPACK_SEARCH_TERM",t.JETPACK_SEARCH_FOCUS="JETPACK_SEARCH_FOCUS",t.JETPACK_SEARCH_BLUR="JETPACK_SEARCH_BLUR",t.DEV_CARD_DISPLAY="DEV_CARD_DISPLAY",t.DEV_CARD_HIDE="DEV_CARD_HIDE",t.MOCK_SWITCH_USER_PERMISSIONS="MOCK_SWITCH_USER_PERMISSIONS",t.MOCK_SWITCH_THREATS="MOCK_SWITCH_THREATS",t.REWIND_STATUS_FETCH="REWIND_STATUS_FETCH",t.REWIND_STATUS_FETCH_RECEIVE="REWIND_STATUS_FETCH_RECEIVE",t.REWIND_STATUS_FETCH_FAIL="REWIND_STATUS_FETCH_FAIL",t.MOCK_SWITCH_REWIND_STATE="MOCK_SWITCH_REWIND_STATE",t.JETPACK_SITE_VERIFY_GOOGLE_STATUS_FETCH="JETPACK_SITE_VERIFY_GOOGLE_STATUS_FETCH",t.JETPACK_SITE_VERIFY_GOOGLE_STATUS_FETCH_FAIL="JETPACK_SITE_VERIFY_GOOGLE_STATUS_FETCH_FAIL",t.JETPACK_SITE_VERIFY_GOOGLE_STATUS_FETCH_SUCCESS="JETPACK_SITE_VERIFY_GOOGLE_STATUS_FETCH_SUCCESS",t.JETPACK_SITE_VERIFY_GOOGLE_VERIFY_FETCH="JETPACK_SITE_VERIFY_GOOGLE_VERIFY_FETCH",t.JETPACK_SITE_VERIFY_GOOGLE_VERIFY_FETCH_FAIL="JETPACK_SITE_VERIFY_GOOGLE_VERIFY_FETCH_FAIL",t.JETPACK_SITE_VERIFY_GOOGLE_VERIFY_FETCH_SUCCESS="JETPACK_SITE_VERIFY_GOOGLE_VERIFY_FETCH_SUCCESS",t.JETPACK_SITE_VERIFY_GOOGLE_REQUEST="JETPACK_SITE_VERIFY_GOOGLE_REQUEST",t.JETPACK_SITE_VERIFY_GOOGLE_REQUEST_SUCCESS="JETPACK_SITE_VERIFY_GOOGLE_REQUEST_SUCCESS",t.JETPACK_SITE_VERIFY_GOOGLE_REQUEST_FAIL="JETPACK_SITE_VERIFY_GOOGLE_REQUEST_FAIL"},function(e,t,n){"use strict";n.r(t),n.d(t,"createStore",function(){return i}),n.d(t,"combineReducers",function(){return s}),n.d(t,"bindActionCreators",function(){return b}),n.d(t,"applyMiddleware",function(){return u}),n.d(t,"compose",function(){return l}),n.d(t,"__DO_NOT_USE__ActionTypes",function(){return a});var o=n(167),r=function(){return Math.random().toString(36).substring(7).split("").join(".")},a={INIT:"@@redux/INIT"+r(),REPLACE:"@@redux/REPLACE"+r(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+r()}};function i(e,t,n){var r;if("function"==typeof t&&"function"==typeof n||"function"==typeof n&&"function"==typeof arguments[3])throw new Error("It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function");if("function"==typeof t&&void 0===n&&(n=t,t=void 0),void 0!==n){if("function"!=typeof n)throw new Error("Expected the enhancer to be a function.");return n(i)(e,t)}if("function"!=typeof e)throw new Error("Expected the reducer to be a function.");var p=e,s=t,c=[],b=c,M=!1;function l(){b===c&&(b=c.slice())}function u(){if(M)throw new Error("You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.");return s}function d(e){if("function"!=typeof e)throw new Error("Expected the listener to be a function.");if(M)throw new Error("You may not call store.subscribe() while the reducer is executing. If you would like to be notified after the store has been updated, subscribe from a component and invoke store.getState() in the callback to access the latest state. See https://redux.js.org/api-reference/store#subscribe(listener) for more details.");var t=!0;return l(),b.push(e),function(){if(t){if(M)throw new Error("You may not unsubscribe from a store listener while the reducer is executing. See https://redux.js.org/api-reference/store#subscribe(listener) for more details.");t=!1,l();var n=b.indexOf(e);b.splice(n,1)}}}function z(e){if(!function(e){if("object"!=typeof e||null===e)return!1;for(var t=e;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}(e))throw new Error("Actions must be plain objects. Use custom middleware for async actions.");if(void 0===e.type)throw new Error('Actions may not have an undefined "type" property. Have you misspelled a constant?');if(M)throw new Error("Reducers may not dispatch actions.");try{M=!0,s=p(s,e)}finally{M=!1}for(var t=c=b,n=0;n<t.length;n++)(0,t[n])();return e}return z({type:a.INIT}),(r={dispatch:z,subscribe:d,getState:u,replaceReducer:function(e){if("function"!=typeof e)throw new Error("Expected the nextReducer to be a function.");p=e,z({type:a.REPLACE})}})[o.a]=function(){var e,t=d;return(e={subscribe:function(e){if("object"!=typeof e||null===e)throw new TypeError("Expected the observer to be an object.");function n(){e.next&&e.next(u())}return n(),{unsubscribe:t(n)}}})[o.a]=function(){return this},e},r}function p(e,t){var n=t&&t.type;return"Given "+(n&&'action "'+String(n)+'"'||"an action")+', reducer "'+e+'" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.'}function s(e){for(var t=Object.keys(e),n={},o=0;o<t.length;o++){var r=t[o];"function"==typeof e[r]&&(n[r]=e[r])}var i,s=Object.keys(n);try{!function(e){Object.keys(e).forEach(function(t){var n=e[t];if(void 0===n(void 0,{type:a.INIT}))throw new Error('Reducer "'+t+"\" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.");if(void 0===n(void 0,{type:a.PROBE_UNKNOWN_ACTION()}))throw new Error('Reducer "'+t+"\" returned undefined when probed with a random type. Don't try to handle "+a.INIT+' or other actions in "redux/*" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined, but can be null.')})}(n)}catch(e){i=e}return function(e,t){if(void 0===e&&(e={}),i)throw i;for(var o=!1,r={},a=0;a<s.length;a++){var c=s[a],b=n[c],M=e[c],l=b(M,t);if(void 0===l){var u=p(c,t);throw new Error(u)}r[c]=l,o=o||l!==M}return o?r:e}}function c(e,t){return function(){return t(e.apply(this,arguments))}}function b(e,t){if("function"==typeof e)return c(e,t);if("object"!=typeof e||null===e)throw new Error("bindActionCreators expected an object or a function, instead received "+(null===e?"null":typeof e)+'. Did you write "import ActionCreators from" instead of "import * as ActionCreators from"?');for(var n=Object.keys(e),o={},r=0;r<n.length;r++){var a=n[r],i=e[a];"function"==typeof i&&(o[a]=c(i,t))}return o}function M(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce(function(e,t){return function(){return e(t.apply(void 0,arguments))}})}function u(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){return function(){var n=e.apply(void 0,arguments),o=function(){throw new Error("Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.")},r={getState:n.getState,dispatch:function(){return o.apply(void 0,arguments)}},a=t.map(function(e){return e(r)});return function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},o=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),o.forEach(function(t){M(e,t,n[t])})}return e}({},n,{dispatch:o=l.apply(void 0,a)(n.dispatch)})}}}},function(e,t,n){"use strict";var o=n(2),r=n(436);if(void 0===o)throw Error("create-react-class could not find the React object. If you are using script tags, make sure that React is being loaded before create-react-class.");var a=(new o.Component).updater;e.exports=r(o.Component,o.isValidElement,a)},function(e,t,n){"use strict";var o=b(n(3)),r=b(n(4)),a=b(n(7)),i=b(n(5)),p=b(n(6)),s=b(n(23)),c=b(n(85));function b(e){return e&&e.__esModule?e:{default:e}}var M=n(1),l=n(2),u=n(12),d=n(55);n(633);var z=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a._renderWithTitle=function(){var e="dops-card-section-orient-"+(a.props.vertical?"vertical":"horizontal");return l.createElement("div",{className:e},l.createElement("h4",{ref:"label",className:"dops-card-section-label"},a.props.title),l.createElement("div",{ref:"content",className:"dops-card-section-content"},a.props.children))},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){return l.createElement("div",{className:u("dops-card-section",this.props.className),style:this.props.style},this.props.title?this._renderWithTitle():this.props.children)}}]),t}(l.Component);z.propTypes={title:M.any,vertical:M.any,style:M.object,className:M.string,device:M.oneOf(["desktop","tablet","phone"])},z.defaultProps={vertical:null};var f=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){return l.createElement("div",{className:"dops-card-footer"},this.props.children)}}]),t}(l.Component),O=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a._renderIcon=function(){return l.createElement("span",{className:"dops-card-icon",style:{color:a.props.iconColor}},a.props.icon&&l.createElement(d,{icon:a.props.icon,style:{backgroundColor:a.props.iconColor}}),a.props.iconLabel)},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){var e=u("dops-card",this.props.className,{"is-card-link":!!this.props.href,"is-compact":this.props.compact}),t=["compact","tagName","meta","iconColor"],n=void 0;this.props.href?n=l.createElement(d,{className:"dops-card__link-indicator",icon:this.props.target?"external":"chevron-right"}):t.push("href","target");var o=void 0;return this.props.title&&(o=l.createElement("h2",{className:"dops-card-title"},this.props.title,this.props.meta&&l.createElement("span",{className:"dops-card-meta"},this.props.meta),(this.props.icon||this.props.iconLabel)&&this._renderIcon())),l.createElement(this.props.href?"a":this.props.tagName,(0,s.default)((0,c.default)(this.props,t),{className:e}),n,o,this.props.children)}}]),t}(l.Component);O.propTypes={meta:M.any,icon:M.string,iconLabel:M.any,iconColor:M.string,style:M.object,className:M.string,href:M.string,title:M.string,tagName:M.string,target:M.string,compact:M.bool,children:M.node},O.defaultProps={iconColor:"#787878",className:"",tagName:"div"},O.Section=z,O.Footer=f,e.exports=O},function(e,t){var n=e.exports={version:"2.6.0"};"number"==typeof __e&&(__e=n)},function(e,t){"function"==typeof Object.create?e.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:e.exports=function(e,t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,r=(o=n(10))&&o.__esModule?o:{default:o},a=p(n(239)),i=p(n(602));function p(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}var s=(0,r.default)({},a,i);t.default=s,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,r=(o=n(10))&&o.__esModule?o:{default:o},a=p(n(215)),i=p(n(603));function p(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}var s=(0,r.default)({},a,i);t.default=s,e.exports=t.default},function(e,t,n){var o=n(132);e.exports=function(e,t,n){var r=null==e?void 0:o(e,t);return void 0===r?n:r}},function(e,t,n){var o=n(128),r=n(64),a=n(197),i=n(45),p=n(97),s=n(59),c=Object.prototype.hasOwnProperty,b=a(function(e,t){if(p(t)||i(t))r(t,s(t),e);else for(var n in t)c.call(t,n)&&o(e,n,t[n])});e.exports=b},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,r=(o=n(10))&&o.__esModule?o:{default:o},a=p(n(159)),i=p(n(558));function p(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}var s=(0,r.default)({},a,i);t.default=s,e.exports=t.default},function(e,t,n){var o=n(57),r=o.Buffer;function a(e,t){for(var n in e)t[n]=e[n]}function i(e,t,n){return r(e,t,n)}r.from&&r.alloc&&r.allocUnsafe&&r.allocUnsafeSlow?e.exports=o:(a(o,t),t.Buffer=i),a(r,i),i.from=function(e,t,n){if("number"==typeof e)throw new TypeError("Argument must not be a number");return r(e,t,n)},i.alloc=function(e,t,n){if("number"!=typeof e)throw new TypeError("Argument must be a number");var o=r(e);return void 0!==t?"string"==typeof n?o.fill(t,n):o.fill(t):o.fill(0),o},i.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r(e)},i.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return o.SlowBuffer(e)}},function(e,t){var n=Array.isArray;e.exports=n},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=O(n(84)),r=O(n(10)),a=O(n(47)),i=O(n(3)),p=O(n(4)),s=O(n(7)),c=O(n(5)),b=O(n(6));t.withModuleSettingsFormHelpers=function(e){var t=function(t){function n(){var e,t,s,b;(0,p.default)(this,n);for(var M=arguments.length,f=Array(M),O=0;O<M;O++)f[O]=arguments[O];return t=s=(0,c.default)(this,(e=n.__proto__||(0,i.default)(n)).call.apply(e,[this].concat(f))),s.state={options:{}},s.onOptionChange=function(e){var t,n=e.target.name;t="checkbox"===e.target.type&&void 0!==e.target.checked?e.target.checked:e.target.value,s.updateFormStateOptionValue(n,t)},s.updateFormStateOptionValue=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;"string"==typeof e&&(e=(0,a.default)({},e,t));var n=(0,r.default)({},s.state.options,e);return s.setState({options:n}),!0},s.resetFormStateOption=function(e){return s.setState({options:(0,z.default)(s.state.options,[e])}),!0},s.updateFormStateModuleOption=function(e,t){var n,o,r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];s.trackSettingsToggle(e,t,!s.getOptionValue(t)),s.getOptionValue(e)?r?s.props.updateOptions((n={},(0,a.default)(n,e,!1),(0,a.default)(n,t,!s.getOptionValue(t)),n)):s.props.updateOptions((0,a.default)({},t,!s.getOptionValue(t))):s.props.updateOptions((o={},(0,a.default)(o,e,!0),(0,a.default)(o,t,!0),o))},s.toggleModuleNow=function(e){s.props.updateOptions((0,a.default)({},e,!s.getOptionValue(e)))},s.onSubmit=function(e){e.preventDefault(),s.props.updateOptions(s.state.options).then(function(){var e={};(0,u.default)(s.state.options,function(t,n){n=n.replace(/\-/,"_"),e[n]=t}),s.trackFormSubmission(e),s.setState({options:{}})}).then(function(){s.props.refreshSettings(),s.props.clearUnsavedSettingsFlag()})},s.getOptionValue=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return(0,l.default)(s.state.options,e,s.props.getSettingCurrentValue(e,t))},s.shouldSaveButtonBeDisabled=function(){return s.isSavingAnyOption()||!s.isDirty()},s.isDirty=function(){return!!(0,o.default)(s.state.options).length},s.isSavingAnyOption=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return s.props.isUpdating(e)},s.trackFormSubmission=function(e){d.default.tracks.recordEvent("jetpack_wpa_settings_form_submit",e)},s.trackSettingsToggle=function(e,t,n){d.default.tracks.recordEvent("jetpack_wpa_settings_toggle",{module:e,setting:t,toggled:n?"on":"off"})},b=t,(0,c.default)(s,b)}return(0,b.default)(n,t),(0,s.default)(n,[{key:"componentDidUpdate",value:function(){this.isDirty()&&this.props.setUnsavedSettingsFlag()}},{key:"render",value:function(){return M.default.createElement(e,(0,r.default)({getOptionValue:this.getOptionValue,onSubmit:this.onSubmit,onOptionChange:this.onOptionChange,updateFormStateOptionValue:this.updateFormStateOptionValue,toggleModuleNow:this.toggleModuleNow,updateFormStateModuleOption:this.updateFormStateModuleOption,shouldSaveButtonBeDisabled:this.shouldSaveButtonBeDisabled,isSavingAnyOption:this.isSavingAnyOption,isDirty:this.isDirty,resetFormStateOption:this.resetFormStateOption},this.props))}}]),n}(M.default.Component);return(0,f.connectModuleOptions)(t)};var M=O(n(2)),l=O(n(22)),u=O(n(878)),d=O(n(13)),z=O(n(85)),f=n(879);function O(e){return e&&e.__esModule?e:{default:e}}},function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SettingsGroup=void 0;var o=z(n(10)),r=z(n(1)),a=z(n(2)),i=n(9),p=z(n(17)),s=z(n(12)),c=z(n(35)),b=z(n(54)),M=z(n(712)),l=n(20),u=n(21),d=n(24);function z(e){return e&&e.__esModule?e:{default:e}}var f=t.SettingsGroup=function(e){var t=e.module;if(t.module&&!e.userCanManageModules&&!(0,c.default)(["after-the-deadline","post-by-email","publicize"],t.module))return a.default.createElement("span",null);var n=e.disableInDevMode&&e.isUnavailableInDevMode(t.module),r=n;return("post-by-email"===t.module&&!e.isLinked||"after-the-deadline"===t.module&&!e.userCanManageModules&&e.userCanEditPosts&&!e.isModuleActivated("after-the-deadline"))&&(r=!0),a.default.createElement("div",{className:"jp-form-settings-group"},a.default.createElement(p.default,{className:(0,s.default)({"jp-form-has-child":e.hasChild,"jp-form-settings-disable":n})},r&&a.default.createElement("div",{className:"jp-form-block-fade"}),e.support.link&&a.default.createElement(M.default,(0,o.default)({module:t},e.support)),e.children))};f.propTypes={support:r.default.object,module:r.default.object,disableInDevMode:r.default.bool.isRequired,isDevMode:r.default.bool.isRequired,isSitePublic:r.default.bool.isRequired,userCanManageModules:r.default.bool.isRequired,isLinked:r.default.bool.isRequired,isUnavailableInDevMode:r.default.func.isRequired},f.defaultProps={support:{text:"",link:""},module:{},disableInDevMode:!1,isDevMode:!1,isSitePublic:!0,userCanManageModules:!1,isLinked:!1,isUnavailableInDevMode:b.default},t.default=(0,i.connect)(function(e){return{isDevMode:(0,l.isDevMode)(e),isSitePublic:(0,u.isSitePublic)(e),userCanManageModules:(0,u.userCanManageModules)(e),userCanEditPosts:(0,u.userCanEditPosts)(e),isLinked:(0,l.isCurrentUserLinked)(e),isModuleActivated:function(t){return(0,d.isModuleActivated)(e,t)},isUnavailableInDevMode:function(t){return(0,l.isUnavailableInDevMode)(e,t)}}})(f)},function(e,t,n){var o=n(28),r=n(18),a=n(60),i=n(61),p=n(65),s=function(e,t,n){var c,b,M,l=e&s.F,u=e&s.G,d=e&s.S,z=e&s.P,f=e&s.B,O=e&s.W,A=u?r:r[t]||(r[t]={}),h=A.prototype,m=u?o:d?o[t]:(o[t]||{}).prototype;for(c in u&&(n=t),n)(b=!l&&m&&void 0!==m[c])&&p(A,c)||(M=b?m[c]:n[c],A[c]=u&&"function"!=typeof m[c]?n[c]:f&&b?a(M,o):O&&m[c]==M?function(e){var t=function(t,n,o){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,o)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(M):z&&"function"==typeof M?a(Function.call,M):M,z&&((A.virtual||(A.virtual={}))[c]=M,e&s.R&&h&&!h[c]&&i(h,c,M)))};s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,e.exports=s},function(e,t,n){var o=n(150)("wks"),r=n(118),a=n(28).Symbol,i="function"==typeof a;(e.exports=function(e){return o[e]||(o[e]=i&&a[e]||(i?a:r)("Symbol."+e))}).store=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SettingsCard=void 0;var o=q(n(1)),r=q(n(2)),a=n(9),i=n(8),p=q(n(35)),s=q(n(183)),c=q(n(33)),b=q(n(13)),M=q(n(22)),l=n(38),u=n(21),d=n(52),z=n(42),f=q(n(708)),O=q(n(709)),A=q(n(392)),h=q(n(426)),m=n(24);function q(e){return e&&e.__esModule?e:{default:e}}var _=t.SettingsCard=function(e){var t=function(e){return function(){return function(e){b.default.tracks.recordJetpackClick({target:"upgrade-banner",feature:e,type:"upgrade"})}(e)}},n=!!e.module&&e.getModule(e.module),o=e.vaultPressData,a=(0,M.default)(o,["data","features","backups"],!1),u=(0,M.default)(o,["data","features","security"],!1);if(!e.userCanManageModules&&!(0,p.default)(["composing","post-by-email","publicize"],e.module))return r.default.createElement("span",null);var d=e.saveDisabled,z=!!e.feature&&e.feature,m=e.header?e.header:"";""===m&&n&&(m=n.name);var q=function(){switch(z){case l.FEATURE_VIDEO_HOSTING_JETPACK:return"inactive"===e.getModuleOverride("videopress");case l.FEATURE_WORDADS_JETPACK:return"inactive"===e.getModuleOverride("wordads");case l.FEATURE_GOOGLE_ANALYTICS_JETPACK:return"inactive"===e.getModuleOverride("google-analytics");case l.FEATURE_SEO_TOOLS_JETPACK:return"inactive"===e.getModuleOverride("seo-tools");case l.FEATURE_SEARCH_JETPACK:return"inactive"===e.getModuleOverride("search");default:return!1}},_=function(){if(e.fetchingSiteData)return!0;var t=(0,l.getPlanClass)(e.sitePlan.product_slug);switch(z){case l.FEATURE_SECURITY_SCANNING_JETPACK:if("is-free-plan"===t&&!u)return!1;break;case l.FEATURE_WORDADS_JETPACK:if("is-premium-plan"!==t&&"is-business-plan"!==t&&-1===e.activeFeatures.indexOf(l.FEATURE_WORDADS_JETPACK))return!1;break;case l.FEATURE_GOOGLE_ANALYTICS_JETPACK:case l.FEATURE_SEO_TOOLS_JETPACK:if("is-business-plan"!==t&&"is-premium-plan"!==t)return!1;break;case l.FEATURE_SPAM_AKISMET_PLUS:if(((0,p.default)(["is-free-plan"],t)||(0,s.default)(t))&&!e.isAkismetKeyValid&&!e.isCheckingAkismetKey)return!1}return!0}()&&e.children,W=!e.fetchingSiteData&&!q()&&function(){var n=(0,l.getPlanClass)(e.sitePlan.product_slug),o=(0,i.translate)("Upgrade",{context:"A caption for a button to upgrade an existing paid feature to a higher tier."});switch(z){case l.FEATURE_VIDEO_HOSTING_JETPACK:return"is-premium-plan"===n||"is-business-plan"===n?"":r.default.createElement(A.default,{title:(0,i.translate)("Host fast, high-quality, ad-free video."),callToAction:o,plan:l.PLAN_JETPACK_PREMIUM,feature:z,onClick:t(z),href:e.videoPremiumUpgradeUrl});case l.FEATURE_WORDADS_JETPACK:return"is-premium-plan"===n||"is-business-plan"===n||-1!==e.activeFeatures.indexOf(l.FEATURE_WORDADS_JETPACK)?"":r.default.createElement(A.default,{title:(0,i.translate)("Generate income with high-quality ads."),callToAction:o,plan:l.PLAN_JETPACK_PREMIUM,feature:z,onClick:t(z),href:e.adsUpgradeUrl});case l.FEATURE_SECURITY_SCANNING_JETPACK:return a||"is-business-plan"===n?"":"is-premium-plan"===n?r.default.createElement(A.default,{title:(0,i.translate)("Real-time site backups and automatic threat resolution."),plan:l.PLAN_JETPACK_BUSINESS,callToAction:o,feature:z,onClick:t(z),href:e.securityProUpgradeUrl}):r.default.createElement(A.default,{callToAction:o,title:(0,i.translate)("Protect against data loss, malware, and malicious attacks."),plan:l.PLAN_JETPACK_PREMIUM,feature:z,onClick:t(z),href:e.securityPremiumUpgradeUrl});case l.FEATURE_GOOGLE_ANALYTICS_JETPACK:return"is-business-plan"===n||"is-premium-plan"===n?"":r.default.createElement(A.default,{callToAction:o,title:(0,i.translate)("Integrate easily with Google Analytics."),plan:l.PLAN_JETPACK_PREMIUM,feature:z,onClick:t(z),href:e.gaUpgradeUrl});case l.FEATURE_SEO_TOOLS_JETPACK:return"is-business-plan"===n||"is-premium-plan"===n?"":r.default.createElement(A.default,{callToAction:o,title:(0,i.translate)("Help your content get found and shared with SEO tools."),plan:l.PLAN_JETPACK_PREMIUM,feature:z,onClick:t(z),href:e.seoUpgradeUrl});case l.FEATURE_SEARCH_JETPACK:return"is-business-plan"===n?"":r.default.createElement(A.default,{callToAction:o,title:(0,i.translate)("Add faster, more advanced searching to your site with Jetpack Professional."),plan:l.PLAN_JETPACK_BUSINESS,feature:z,onClick:t(z),href:e.searchUpgradeUrl});case l.FEATURE_SPAM_AKISMET_PLUS:return e.isCheckingAkismetKey||e.isAkismetKeyValid||(0,p.default)(["is-personal-plan","is-premium-plan","is-business-plan"],n)?"":r.default.createElement(A.default,{callToAction:o,title:(0,i.translate)("Protect your site from spam."),plan:l.PLAN_JETPACK_PERSONAL,feature:z,href:e.spamUpgradeUrl});default:return""}}();return _||W?function(){if(!q())return!1;switch(z){case l.FEATURE_GOOGLE_ANALYTICS_JETPACK:var t=e.getModule("google-analytics");return r.default.createElement(h.default,{moduleName:t.name});case l.FEATURE_SEO_TOOLS_JETPACK:var n=e.getModule("seo-tools");return r.default.createElement(h.default,{moduleName:n.name});default:return null}}()||r.default.createElement("form",{className:"jp-form-settings-card",onSubmit:d?void 0:e.onSubmit},r.default.createElement(f.default,{label:m},!e.hideButton&&r.default.createElement(c.default,{primary:!0,compact:!0,type:"submit",disabled:d||!e.isDirty()},d?(0,i.translate)("Saving…",{context:"Button caption"}):(0,i.translate)("Save settings",{context:"Button caption"})),e.action&&r.default.createElement(O.default,{proFeature:e.action,siteAdminUrl:e.siteAdminUrl,isCompact:!1})),_,W):null};_.propTypes={action:o.default.string,saveDisabled:o.default.bool},_.defaultProps={action:"",saveDisabled:!1},t.default=(0,a.connect)(function(e){return{sitePlan:(0,z.getSitePlan)(e),fetchingSiteData:(0,z.isFetchingSiteData)(e),siteAdminUrl:(0,u.getSiteAdminUrl)(e),userCanManageModules:(0,u.userCanManageModules)(e),isAkismetKeyValid:(0,d.isAkismetKeyValid)(e),isCheckingAkismetKey:(0,d.isCheckingAkismetKey)(e),vaultPressData:(0,d.getVaultPressData)(e),getModuleOverride:function(t){return(0,m.getModuleOverride)(e,t)},getModule:function(t){return(0,m.getModule)(e,t)},activeFeatures:(0,z.getActiveFeatures)(e),videoPremiumUpgradeUrl:(0,u.getUpgradeUrl)(e,"settings-video-premium"),adsUpgradeUrl:(0,u.getUpgradeUrl)(e,"settings-ads"),securityProUpgradeUrl:(0,u.getUpgradeUrl)(e,"settings-security-pro"),securityPremiumUpgradeUrl:(0,u.getUpgradeUrl)(e,"settings-security-premium"),gaUpgradeUrl:(0,u.getUpgradeUrl)(e,"settings-ga"),seoUpgradeUrl:(0,u.getUpgradeUrl)(e,"settings-seo"),searchUpgradeUrl:(0,u.getUpgradeUrl)(e,"settings-search"),spamUpgradeUrl:(0,u.getUpgradeUrl)(e,"settings-spam")}})(_)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=u(n(382)),r=u(n(3)),a=u(n(4)),i=u(n(7)),p=u(n(5)),s=u(n(6)),c=u(n(1)),b=u(n(2)),M=u(n(12)),l=u(n(54));function u(e){return e&&e.__esModule?e:{default:e}}n(598);var d=function(e){function t(){return(0,a.default)(this,t),(0,p.default)(this,(t.__proto__||(0,r.default)(t)).apply(this,arguments))}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e=this.props.href?"a":"button",t=this.props,n=t.primary,r=t.compact,a=t.scary,i=t.borderless,p=t.className,s=(0,o.default)(t,["primary","compact","scary","borderless","className"]),c=(0,M.default)({"dops-button":!0,"is-compact":r,"is-primary":n,"is-scary":a,"is-borderless":i});return s.className=(0,M.default)(p,c),b.default.createElement(e,s,this.props.children)}}]),t}(b.default.Component);d.displayName="Button",d.propTypes={disabled:c.default.bool,compact:c.default.bool,primary:c.default.bool,scary:c.default.bool,type:c.default.string,href:c.default.string,onClick:c.default.func,borderless:c.default.bool,className:c.default.string},d.defaultProps={disabled:!1,type:"button",onClick:l.default,borderless:!1},t.default=d,e.exports=t.default},function(e,t){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},function(e,t,n){var o=n(160),r=n(45),a=n(401),i=n(176),p=n(524),s=Math.max;e.exports=function(e,t,n,c){e=r(e)?e:p(e),n=n&&!c?i(n):0;var b=e.length;return n<0&&(n=s(b+n,0)),a(e)?n<=b&&e.indexOf(t,n)>-1:!!b&&o(e,t,n)>-1}},function(e,t,n){var o=n(195),r="object"==typeof self&&self&&self.Object===Object&&self,a=o||r||Function("return this")();e.exports=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.FetchNetworkError=t.Api404AfterRedirectError=t.Api404Error=t.JsonParseAfterRedirectError=t.JsonParseError=void 0;var o=b(n(538)),r=b(n(238)),a=b(n(3)),i=b(n(4)),p=b(n(5)),s=b(n(6));n(556);var c=b(n(23));function b(e){return e&&e.__esModule?e:{default:e}}function M(e){return function(t){function n(){var t;(0,i.default)(this,n);for(var o=arguments.length,r=Array(o),s=0;s<o;s++)r[s]=arguments[s];var c=(0,p.default)(this,(t=n.__proto__||(0,a.default)(n)).call.apply(t,[this].concat(r)));return c.name=e,c}return(0,s.default)(n,t),n}(Error)}n(557).polyfill();var l=t.JsonParseError=M("JsonParseError"),u=t.JsonParseAfterRedirectError=M("JsonParseAfterRedirectError"),d=t.Api404Error=M("Api404Error"),z=t.Api404AfterRedirectError=M("Api404AfterRedirectError"),f=t.FetchNetworkError=M("FetchNetworkError"),O=new function(e,t){var n=void 0,o={"X-WP-Nonce":void 0},a={credentials:"same-origin",headers:o},i={method:"post",credentials:"same-origin",headers:(0,c.default)({},o,{"Content-type":"application/json"})},p={setApiRoot:function(e){n=e},setApiNonce:function(e){a={credentials:"same-origin",headers:o={"X-WP-Nonce":e}},i={method:"post",credentials:"same-origin",headers:(0,c.default)({},o,{"Content-type":"application/json"})}},fetchSiteConnectionStatus:function(){return s(n+"jetpack/v4/connection",a).then(h)},fetchSiteConnectionTest:function(){return s(n+"jetpack/v4/connection/test",a).then(A).then(h)},fetchUserConnectionData:function(){return s(n+"jetpack/v4/connection/data",a).then(h)},fetchUserTrackingSettings:function(){return s(n+"jetpack/v4/tracking/settings",a).then(A).then(h)},updateUserTrackingSettings:function(e){return b(n+"jetpack/v4/tracking/settings",i,{body:(0,r.default)(e)}).then(A).then(h)},disconnectSite:function(){return b(n+"jetpack/v4/connection",i,{body:(0,r.default)({isActive:!1})}).then(A).then(h)},fetchConnectUrl:function(){return s(n+"jetpack/v4/connection/url",a).then(A).then(h)},unlinkUser:function(){return b(n+"jetpack/v4/connection/user",i,{body:(0,r.default)({linked:!1})}).then(A).then(h)},jumpStart:function(e){var t=void 0;return"activate"===e&&(t=!0),"deactivate"===e&&(t=!1),b(n+"jetpack/v4/jumpstart",i,{body:(0,r.default)({active:t})}).then(A).then(h)},fetchModules:function(){return s(n+"jetpack/v4/module/all",a).then(A).then(h)},fetchModule:function(e){return s(n+"jetpack/v4/module/"+e,a).then(A).then(h)},activateModule:function(e){return b(n+"jetpack/v4/module/"+e+"/active",i,{body:(0,r.default)({active:!0})}).then(A).then(h)},deactivateModule:function(e){return b(n+"jetpack/v4/module/"+e+"/active",i,{body:(0,r.default)({active:!1})})},updateModuleOptions:function(e,t){return b(n+"jetpack/v4/module/"+e,i,{body:(0,r.default)(t)}).then(A).then(h)},updateSettings:function(e){return b(n+"jetpack/v4/settings",i,{body:(0,r.default)(e)}).then(A).then(h)},getProtectCount:function(){return s(n+"jetpack/v4/module/protect/data",a).then(A).then(h)},resetOptions:function(e){return b(n+"jetpack/v4/options/"+e,i,{body:(0,r.default)({reset:!0})}).then(A).then(h)},getVaultPressData:function(){return s(n+"jetpack/v4/module/vaultpress/data",a).then(A).then(h)},getAkismetData:function(){return s(n+"jetpack/v4/module/akismet/data",a).then(A).then(h)},checkAkismetKey:function(){return s(n+"jetpack/v4/module/akismet/key/check",a).then(A).then(h)},checkAkismetKeyTyped:function(e){return b(n+"jetpack/v4/module/akismet/key/check",i,{body:(0,r.default)({api_key:e})}).then(A).then(h)},fetchStatsData:function(e){return s(function(e){var t=n+"jetpack/v4/module/stats/data";return-1!==t.indexOf("?")?t+"&range="+encodeURIComponent(e):t+"?range="+encodeURIComponent(e)}(e),a).then(A).then(h).then(M)},getPluginUpdates:function(){return s(n+"jetpack/v4/updates/plugins",a).then(A).then(h)},getPlans:function(){return s(n+"jetpack/v4/plans",a).then(A).then(h)},fetchSettings:function(){return s(n+"jetpack/v4/settings",a).then(A).then(h)},updateSetting:function(e){return b(n+"jetpack/v4/settings",i,{body:(0,r.default)(e)}).then(A).then(h)},fetchSiteData:function(){return s(n+"jetpack/v4/site",a).then(A).then(h).then(function(e){return JSON.parse(e.data)})},fetchSiteFeatures:function(){return s(n+"jetpack/v4/site/features",a).then(A).then(h).then(function(e){return JSON.parse(e.data)})},fetchRewindStatus:function(){return s(n+"jetpack/v4/rewind",a).then(A).then(h).then(function(e){return JSON.parse(e.data)})},dismissJetpackNotice:function(e){return b(n+"jetpack/v4/notice/"+e,i,{body:(0,r.default)({dismissed:!0})}).then(A).then(h)},fetchPluginsData:function(){return s(n+"jetpack/v4/plugins",a).then(A).then(h)},fetchVerifySiteGoogleStatus:function(e){return s(null!==e?n+"jetpack/v4/verify-site/google/"+e:n+"jetpack/v4/verify-site/google",a).then(A).then(h)},verifySiteGoogle:function(e){return b(n+"jetpack/v4/verify-site/google",i,{body:(0,r.default)({keyring_id:e})}).then(A).then(h)}};function s(e,t){return fetch(function(e){var t=e.split("?"),n=t.length>1?t[1]:"",o=n.length?n.split("&"):[];return o.push("_cacheBuster="+(new Date).getTime()),t[0]+"?"+o.join("&")}(e),t)}function b(e,t,n){return fetch(e,(0,c.default)({},t,n)).catch(m)}function M(e){return e.general&&void 0===e.general.response||e.week&&void 0===e.week.response||e.month&&void 0===e.month.response?e:{}}(0,c.default)(this,p)};function A(e){return e.status>=200&&e.status<300?e:404===e.status?new o.default(function(){throw e.redirected?new z(e.redirected):new d}):e.json().then(function(t){var n=new Error(t.message+" (Status "+e.status+")");throw n.response=t,n})}function h(e){return e.json().catch(function(t){return function(e,t,n){throw t?new u(n):new l}(0,e.redirected,e.url)})}function m(){throw new f}t.default=O},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.FEATURE_SEARCH_JETPACK=t.FEATURE_GOOGLE_ANALYTICS_JETPACK=t.FEATURE_WORDADS_JETPACK=t.FEATURE_SEO_TOOLS_JETPACK=t.FEATURE_PRIORITY_SUPPORT_JETPACK=t.FEATURE_SECURITY_ESSENTIALS_JETPACK=t.FEATURE_VIDEO_HOSTING_JETPACK=t.FEATURE_REVENUE_GENERATION_JETPACK=t.FEATURE_SECURITY_SCANNING_JETPACK=t.FEATURE_REALTIME_BACKUPS_JETPACK=t.FEATURE_SITE_BACKUPS_JETPACK=t.FEATURE_BASIC_SECURITY_JETPACK=t.FEATURE_BASIC_SUPPORT_JETPACK=t.FEATURE_CORE_JETPACK=t.FEATURE_POLLS_PRO=t.FEATURE_ONE_CLICK_THREAT_RESOLUTION=t.FEATURE_MALWARE_SCANNING_DAILY_AND_ON_DEMAND=t.FEATURE_MALWARE_SCANNING_DAILY=t.FEATURE_EASY_SITE_MIGRATION=t.FEATURE_AUTOMATED_RESTORES=t.FEATURE_BACKUP_STORAGE_SPACE_UNLIMITED=t.FEATURE_BACKUP_ARCHIVE_UNLIMITED=t.FEATURE_BACKUP_ARCHIVE_15=t.FEATURE_BACKUP_ARCHIVE_30=t.FEATURE_OFFSITE_BACKUP_VAULTPRESS_REALTIME=t.FEATURE_OFFSITE_BACKUP_VAULTPRESS_DAILY=t.FEATURE_SPAM_AKISMET_PLUS=t.FEATURE_MANAGE=t.FEATURE_TRAFFIC_TOOLS=t.FEATURE_SITE_STATS=t.FEATURE_STANDARD_SECURITY_TOOLS=t.FEATURE_UPLOAD_PLUGINS=t.FEATURE_BUSINESS_ONBOARDING=t.FEATURE_ADVANCED_SEO=t.FEATURE_NO_BRANDING=t.FEATURE_WORDADS_INSTANT=t.FEATURE_AUDIO_UPLOADS=t.FEATURE_VIDEO_UPLOADS_JETPACK_PRO=t.FEATURE_VIDEO_UPLOADS_JETPACK_PREMIUM=t.FEATURE_VIDEO_UPLOADS=t.FEATURE_NO_ADS=t.FEATURE_LIVE_CHAT_SUPPORT=t.FEATURE_GOOGLE_ANALYTICS=t.FEATURE_ADVANCED_DESIGN=t.FEATURE_BASIC_DESIGN=t.FEATURE_PREMIUM_SUPPORT=t.FEATURE_EMAIL_LIVE_CHAT_SUPPORT=t.FEATURE_COMMUNITY_SUPPORT=t.FEATURE_UNLIMITED_STORAGE=t.FEATURE_13GB_STORAGE=t.FEATURE_6GB_STORAGE=t.FEATURE_3GB_STORAGE=t.FEATURE_UNLIMITED_PREMIUM_THEMES=t.FEATURE_ALL_PREMIUM_THEMES=t.FEATURE_SELECT_PREMIUM_THEMES=t.FEATURE_FREE_THEMES=t.FEATURE_JETPACK_ESSENTIAL=t.FEATURE_CUSTOM_DOMAIN=t.FEATURE_WP_SUBDOMAIN=t.PLAN_ANNUAL_PERIOD=t.PLAN_MONTHLY_PERIOD=t.JETPACK_MONTHLY_PLANS=t.NEW_PLANS=t.POPULAR_PLANS=t.PLAN_CHARGEBACK=t.PLAN_VIP=t.PLAN_WPCOM_ENTERPRISE=t.PLAN_HOST_BUNDLE=t.PLAN_JETPACK_PERSONAL_MONTHLY=t.PLAN_JETPACK_BUSINESS_MONTHLY=t.PLAN_JETPACK_PREMIUM_MONTHLY=t.PLAN_JETPACK_PERSONAL=t.PLAN_JETPACK_BUSINESS=t.PLAN_JETPACK_PREMIUM=t.PLAN_JETPACK_FREE=t.PLAN_FREE=t.PLAN_PERSONAL_2_YEARS=t.PLAN_PERSONAL=t.PLAN_PREMIUM_2_YEARS=t.PLAN_PREMIUM=t.PLAN_ECOMMERCE_2_YEARS=t.PLAN_ECOMMERCE=t.PLAN_BUSINESS_2_YEARS=t.PLAN_BUSINESS=void 0,t.isMonthly=function(e){return(0,r.default)(g,e)},t.isPopular=function(e){return(0,r.default)(_,e)},t.isNew=function(e){return(0,r.default)(W,e)},t.getPlanClass=function(e){switch(e){case d:case u:return"is-free-plan";case M:case l:case O:case m:return"is-personal-plan";case c:case b:case z:case A:return"is-premium-plan";case a:case i:case f:case h:case q:case p:case s:return"is-business-plan";default:return""}},t.getMonthlyPlanByYearly=function(e){switch(e){case z:return A;case f:return h;case O:return m;default:return""}};var o,r=(o=n(35))&&o.__esModule?o:{default:o},a=t.PLAN_BUSINESS="business-bundle",i=t.PLAN_BUSINESS_2_YEARS="business-bundle-2y",p=t.PLAN_ECOMMERCE="ecommerce-bundle",s=t.PLAN_ECOMMERCE_2_YEARS="ecommerce-bundle-2y",c=t.PLAN_PREMIUM="value_bundle",b=t.PLAN_PREMIUM_2_YEARS="value_bundle-2y",M=t.PLAN_PERSONAL="personal-bundle",l=t.PLAN_PERSONAL_2_YEARS="personal-bundle-2y",u=t.PLAN_FREE="free_plan",d=t.PLAN_JETPACK_FREE="jetpack_free",z=t.PLAN_JETPACK_PREMIUM="jetpack_premium",f=t.PLAN_JETPACK_BUSINESS="jetpack_business",O=t.PLAN_JETPACK_PERSONAL="jetpack_personal",A=t.PLAN_JETPACK_PREMIUM_MONTHLY="jetpack_premium_monthly",h=t.PLAN_JETPACK_BUSINESS_MONTHLY="jetpack_business_monthly",m=t.PLAN_JETPACK_PERSONAL_MONTHLY="jetpack_personal_monthly",q=(t.PLAN_HOST_BUNDLE="host-bundle",t.PLAN_WPCOM_ENTERPRISE="wpcom-enterprise",t.PLAN_VIP="vip"),_=(t.PLAN_CHARGEBACK="chargeback",t.POPULAR_PLANS=[c]),W=t.NEW_PLANS=[O,m],g=t.JETPACK_MONTHLY_PLANS=[A,h,m];t.PLAN_MONTHLY_PERIOD=31,t.PLAN_ANNUAL_PERIOD=365,t.FEATURE_WP_SUBDOMAIN="wordpress-subdomain",t.FEATURE_CUSTOM_DOMAIN="custom-domain",t.FEATURE_JETPACK_ESSENTIAL="jetpack-essential",t.FEATURE_FREE_THEMES="free-themes",t.FEATURE_SELECT_PREMIUM_THEMES="select-premium-themes",t.FEATURE_ALL_PREMIUM_THEMES="all-premium-themes",t.FEATURE_UNLIMITED_PREMIUM_THEMES="premium-themes",t.FEATURE_3GB_STORAGE="3gb-storage",t.FEATURE_6GB_STORAGE="6gb-storage",t.FEATURE_13GB_STORAGE="13gb-storage",t.FEATURE_UNLIMITED_STORAGE="unlimited-storage",t.FEATURE_COMMUNITY_SUPPORT="community-support",t.FEATURE_EMAIL_LIVE_CHAT_SUPPORT="email-live-chat-support",t.FEATURE_PREMIUM_SUPPORT="priority-support",t.FEATURE_BASIC_DESIGN="basic-design",t.FEATURE_ADVANCED_DESIGN="advanced-design",t.FEATURE_GOOGLE_ANALYTICS="google-analytics",t.FEATURE_LIVE_CHAT_SUPPORT="live-chat-support",t.FEATURE_NO_ADS="no-adverts",t.FEATURE_VIDEO_UPLOADS="video-upload",t.FEATURE_VIDEO_UPLOADS_JETPACK_PREMIUM="video-upload-jetpack-premium",t.FEATURE_VIDEO_UPLOADS_JETPACK_PRO="video-upload-jetpack-pro",t.FEATURE_AUDIO_UPLOADS="audio-upload",t.FEATURE_WORDADS_INSTANT="wordads-instant",t.FEATURE_NO_BRANDING="no-wp-branding",t.FEATURE_ADVANCED_SEO="advanced-seo",t.FEATURE_BUSINESS_ONBOARDING="business-onboarding",t.FEATURE_UPLOAD_PLUGINS="upload-plugins",t.FEATURE_STANDARD_SECURITY_TOOLS="standard-security-tools",t.FEATURE_SITE_STATS="site-stats",t.FEATURE_TRAFFIC_TOOLS="traffic-tools",t.FEATURE_MANAGE="jetpack-manage",t.FEATURE_SPAM_AKISMET_PLUS="spam-akismet-plus",t.FEATURE_OFFSITE_BACKUP_VAULTPRESS_DAILY="offsite-backup-vaultpress-daily",t.FEATURE_OFFSITE_BACKUP_VAULTPRESS_REALTIME="offsite-backup-vaultpress-realtime",t.FEATURE_BACKUP_ARCHIVE_30="backup-archive-30",t.FEATURE_BACKUP_ARCHIVE_15="backup-archive-15",t.FEATURE_BACKUP_ARCHIVE_UNLIMITED="backup-archive-unlimited",t.FEATURE_BACKUP_STORAGE_SPACE_UNLIMITED="backup-storage-space-unlimited",t.FEATURE_AUTOMATED_RESTORES="automated-restores",t.FEATURE_EASY_SITE_MIGRATION="easy-site-migration",t.FEATURE_MALWARE_SCANNING_DAILY="malware-scanning-daily",t.FEATURE_MALWARE_SCANNING_DAILY_AND_ON_DEMAND="malware-scanning-daily-and-on-demand",t.FEATURE_ONE_CLICK_THREAT_RESOLUTION="one-click-threat-resolution",t.FEATURE_POLLS_PRO="polls-pro",t.FEATURE_CORE_JETPACK="core-jetpack",t.FEATURE_BASIC_SUPPORT_JETPACK="basic-support-jetpack",t.FEATURE_BASIC_SECURITY_JETPACK="basic-security-jetpack",t.FEATURE_SITE_BACKUPS_JETPACK="site-backups-jetpack",t.FEATURE_REALTIME_BACKUPS_JETPACK="realtime-backups-jetpack",t.FEATURE_SECURITY_SCANNING_JETPACK="security-scanning-jetpack",t.FEATURE_REVENUE_GENERATION_JETPACK="revenue-generation-jetpack",t.FEATURE_VIDEO_HOSTING_JETPACK="video-hosting-jetpack",t.FEATURE_SECURITY_ESSENTIALS_JETPACK="security-essentials-jetpack",t.FEATURE_PRIORITY_SUPPORT_JETPACK="priority-support-jetpack",t.FEATURE_SEO_TOOLS_JETPACK="seo-tools-jetpack",t.FEATURE_WORDADS_JETPACK="wordads-jetpack",t.FEATURE_GOOGLE_ANALYTICS_JETPACK="google-analytics-jetpack",t.FEATURE_SEARCH_JETPACK="search-jetpack"},function(e,t){e.exports=function(e){return null!=e&&"object"==typeof e}},function(e,t,n){var o=n(46),r=n(204),a=n(148),i=Object.defineProperty;t.f=n(50)?Object.defineProperty:function(e,t,n){if(o(e),t=a(t,!0),o(n),r)try{return i(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,r=(o=n(10))&&o.__esModule?o:{default:o},a=p(n(181)),i=p(n(634));function p(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}var s=(0,r.default)({},a,i);t.default=s,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ModuleToggle=void 0;var o=f(n(3)),r=f(n(4)),a=f(n(7)),i=f(n(5)),p=f(n(6)),s=n(2),c=f(s),b=n(9),M=f(n(1)),l=f(n(78)),u=f(n(13)),d=n(8),z=n(24);function f(e){return e&&e.__esModule?e:{default:e}}var O=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),A.call(a),p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){return c.default.createElement(l.default,{checked:this.props.activated||this.props.isModuleActivated,toggling:this.props.toggling,className:this.props.className,disabled:this.props.disabled||this.isDisabledByOverride(),id:this.props.id,onChange:this.toggleModule,disabledReason:this.getDisabledReason()},this.props.children)}}]),t}(s.Component);O.displayName="ModuleToggle",O.propTypes={toggleModule:M.default.func,activated:M.default.bool,disabled:M.default.bool,className:M.default.string,compact:M.default.bool,id:M.default.string,overrideCondition:M.default.string},O.defaultProps={activated:!1,disabled:!1,overrideCondition:""};var A=function(){var e=this;this.toggleModule=function(){return e.trackModuleToggle(e.props.slug,e.props.activated),e.props.toggleModule(e.props.slug,e.props.activated)},this.trackModuleToggle=function(e,t){"stats"!==e&&u.default.tracks.recordEvent("jetpack_wpa_module_toggle",{module:e,toggled:t?"off":"on"})},this.isDisabledByOverride=function(){var t=e.props.getModuleOverride(e.props.slug);return e.props.overrideCondition?e.props.overrideCondition===t:!!t},this.getDisabledReason=function(){if(!e.isDisabledByOverride())return null;var t=e.props.getModuleOverride(e.props.slug),n={components:{link:c.default.createElement("a",{href:"http://jetpack.com/support/module-overrides/",target:"_blank",rel:"noopener noreferrer",style:{textDecoration:"underline"}})}};switch(t){case"active":return(0,d.translate)("This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.",n);case"inactive":return(0,d.translate)("This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.",n);default:return(0,d.translate)("This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.",n)}}};t.ModuleToggle=(0,b.connect)(function(e){return{getModuleOverride:function(t){return(0,z.getModuleOverride)(e,t)}}})(O)},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){var o=n(129),r=n(140);e.exports=function(e){return null!=e&&r(e.length)&&!o(e)}},function(e,t,n){var o=n(41);e.exports=function(e){if(!o(e))throw TypeError(e+" is not an object!");return e}},function(e,t,n){"use strict";t.__esModule=!0;var o,r=(o=n(227))&&o.__esModule?o:{default:o};t.default=function(e,t,n){return t in e?(0,r.default)(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(e,t,n){(function(e){!function(e,t){"use strict";function o(e,t){if(!e)throw new Error(t||"Assertion failed")}function r(e,t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}function a(e,t,n){if(a.isBN(e))return e;this.negative=0,this.words=null,this.length=0,this.red=null,null!==e&&("le"!==t&&"be"!==t||(n=t,t=10),this._init(e||0,t||10,n||"be"))}var i;"object"==typeof e?e.exports=a:t.BN=a,a.BN=a,a.wordSize=26;try{i=n(820).Buffer}catch(e){}function p(e,t,n){for(var o=0,r=Math.min(e.length,n),a=t;a<r;a++){var i=e.charCodeAt(a)-48;o<<=4,o|=i>=49&&i<=54?i-49+10:i>=17&&i<=22?i-17+10:15&i}return o}function s(e,t,n,o){for(var r=0,a=Math.min(e.length,n),i=t;i<a;i++){var p=e.charCodeAt(i)-48;r*=o,r+=p>=49?p-49+10:p>=17?p-17+10:p}return r}a.isBN=function(e){return e instanceof a||null!==e&&"object"==typeof e&&e.constructor.wordSize===a.wordSize&&Array.isArray(e.words)},a.max=function(e,t){return e.cmp(t)>0?e:t},a.min=function(e,t){return e.cmp(t)<0?e:t},a.prototype._init=function(e,t,n){if("number"==typeof e)return this._initNumber(e,t,n);if("object"==typeof e)return this._initArray(e,t,n);"hex"===t&&(t=16),o(t===(0|t)&&t>=2&&t<=36);var r=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&r++,16===t?this._parseHex(e,r):this._parseBase(e,t,r),"-"===e[0]&&(this.negative=1),this.strip(),"le"===n&&this._initArray(this.toArray(),t,n)},a.prototype._initNumber=function(e,t,n){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(o(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===n&&this._initArray(this.toArray(),t,n)},a.prototype._initArray=function(e,t,n){if(o("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var r=0;r<this.length;r++)this.words[r]=0;var a,i,p=0;if("be"===n)for(r=e.length-1,a=0;r>=0;r-=3)i=e[r]|e[r-1]<<8|e[r-2]<<16,this.words[a]|=i<<p&67108863,this.words[a+1]=i>>>26-p&67108863,(p+=24)>=26&&(p-=26,a++);else if("le"===n)for(r=0,a=0;r<e.length;r+=3)i=e[r]|e[r+1]<<8|e[r+2]<<16,this.words[a]|=i<<p&67108863,this.words[a+1]=i>>>26-p&67108863,(p+=24)>=26&&(p-=26,a++);return this.strip()},a.prototype._parseHex=function(e,t){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var n=0;n<this.length;n++)this.words[n]=0;var o,r,a=0;for(n=e.length-6,o=0;n>=t;n-=6)r=p(e,n,n+6),this.words[o]|=r<<a&67108863,this.words[o+1]|=r>>>26-a&4194303,(a+=24)>=26&&(a-=26,o++);n+6!==t&&(r=p(e,t,n+6),this.words[o]|=r<<a&67108863,this.words[o+1]|=r>>>26-a&4194303),this.strip()},a.prototype._parseBase=function(e,t,n){this.words=[0],this.length=1;for(var o=0,r=1;r<=67108863;r*=t)o++;o--,r=r/t|0;for(var a=e.length-n,i=a%o,p=Math.min(a,a-i)+n,c=0,b=n;b<p;b+=o)c=s(e,b,b+o,t),this.imuln(r),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c);if(0!==i){var M=1;for(c=s(e,b,e.length,t),b=0;b<i;b++)M*=t;this.imuln(M),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c)}},a.prototype.copy=function(e){e.words=new Array(this.length);for(var t=0;t<this.length;t++)e.words[t]=this.words[t];e.length=this.length,e.negative=this.negative,e.red=this.red},a.prototype.clone=function(){var e=new a(null);return this.copy(e),e},a.prototype._expand=function(e){for(;this.length<e;)this.words[this.length++]=0;return this},a.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},a.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},a.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var c=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],b=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],M=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function l(e,t,n){n.negative=t.negative^e.negative;var o=e.length+t.length|0;n.length=o,o=o-1|0;var r=0|e.words[0],a=0|t.words[0],i=r*a,p=67108863&i,s=i/67108864|0;n.words[0]=p;for(var c=1;c<o;c++){for(var b=s>>>26,M=67108863&s,l=Math.min(c,t.length-1),u=Math.max(0,c-e.length+1);u<=l;u++){var d=c-u|0;b+=(i=(r=0|e.words[d])*(a=0|t.words[u])+M)/67108864|0,M=67108863&i}n.words[c]=0|M,s=0|b}return 0!==s?n.words[c]=0|s:n.length--,n.strip()}a.prototype.toString=function(e,t){var n;if(t=0|t||1,16===(e=e||10)||"hex"===e){n="";for(var r=0,a=0,i=0;i<this.length;i++){var p=this.words[i],s=(16777215&(p<<r|a)).toString(16);n=0!=(a=p>>>24-r&16777215)||i!==this.length-1?c[6-s.length]+s+n:s+n,(r+=2)>=26&&(r-=26,i--)}for(0!==a&&(n=a.toString(16)+n);n.length%t!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}if(e===(0|e)&&e>=2&&e<=36){var l=b[e],u=M[e];n="";var d=this.clone();for(d.negative=0;!d.isZero();){var z=d.modn(u).toString(e);n=(d=d.idivn(u)).isZero()?z+n:c[l-z.length]+z+n}for(this.isZero()&&(n="0"+n);n.length%t!=0;)n="0"+n;return 0!==this.negative&&(n="-"+n),n}o(!1,"Base should be between 2 and 36")},a.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&o(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},a.prototype.toJSON=function(){return this.toString(16)},a.prototype.toBuffer=function(e,t){return o(void 0!==i),this.toArrayLike(i,e,t)},a.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},a.prototype.toArrayLike=function(e,t,n){var r=this.byteLength(),a=n||Math.max(1,r);o(r<=a,"byte array longer than desired length"),o(a>0,"Requested array length <= 0"),this.strip();var i,p,s="le"===t,c=new e(a),b=this.clone();if(s){for(p=0;!b.isZero();p++)i=b.andln(255),b.iushrn(8),c[p]=i;for(;p<a;p++)c[p]=0}else{for(p=0;p<a-r;p++)c[p]=0;for(p=0;!b.isZero();p++)i=b.andln(255),b.iushrn(8),c[a-p-1]=i}return c},Math.clz32?a.prototype._countBits=function(e){return 32-Math.clz32(e)}:a.prototype._countBits=function(e){var t=e,n=0;return t>=4096&&(n+=13,t>>>=13),t>=64&&(n+=7,t>>>=7),t>=8&&(n+=4,t>>>=4),t>=2&&(n+=2,t>>>=2),n+t},a.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,n=0;return 0==(8191&t)&&(n+=13,t>>>=13),0==(127&t)&&(n+=7,t>>>=7),0==(15&t)&&(n+=4,t>>>=4),0==(3&t)&&(n+=2,t>>>=2),0==(1&t)&&n++,n},a.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},a.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;t<this.length;t++){var n=this._zeroBits(this.words[t]);if(e+=n,26!==n)break}return e},a.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},a.prototype.toTwos=function(e){return 0!==this.negative?this.abs().inotn(e).iaddn(1):this.clone()},a.prototype.fromTwos=function(e){return this.testn(e-1)?this.notn(e).iaddn(1).ineg():this.clone()},a.prototype.isNeg=function(){return 0!==this.negative},a.prototype.neg=function(){return this.clone().ineg()},a.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},a.prototype.iuor=function(e){for(;this.length<e.length;)this.words[this.length++]=0;for(var t=0;t<e.length;t++)this.words[t]=this.words[t]|e.words[t];return this.strip()},a.prototype.ior=function(e){return o(0==(this.negative|e.negative)),this.iuor(e)},a.prototype.or=function(e){return this.length>e.length?this.clone().ior(e):e.clone().ior(this)},a.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},a.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var n=0;n<t.length;n++)this.words[n]=this.words[n]&e.words[n];return this.length=t.length,this.strip()},a.prototype.iand=function(e){return o(0==(this.negative|e.negative)),this.iuand(e)},a.prototype.and=function(e){return this.length>e.length?this.clone().iand(e):e.clone().iand(this)},a.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},a.prototype.iuxor=function(e){var t,n;this.length>e.length?(t=this,n=e):(t=e,n=this);for(var o=0;o<n.length;o++)this.words[o]=t.words[o]^n.words[o];if(this!==t)for(;o<t.length;o++)this.words[o]=t.words[o];return this.length=t.length,this.strip()},a.prototype.ixor=function(e){return o(0==(this.negative|e.negative)),this.iuxor(e)},a.prototype.xor=function(e){return this.length>e.length?this.clone().ixor(e):e.clone().ixor(this)},a.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},a.prototype.inotn=function(e){o("number"==typeof e&&e>=0);var t=0|Math.ceil(e/26),n=e%26;this._expand(t),n>0&&t--;for(var r=0;r<t;r++)this.words[r]=67108863&~this.words[r];return n>0&&(this.words[r]=~this.words[r]&67108863>>26-n),this.strip()},a.prototype.notn=function(e){return this.clone().inotn(e)},a.prototype.setn=function(e,t){o("number"==typeof e&&e>=0);var n=e/26|0,r=e%26;return this._expand(n+1),this.words[n]=t?this.words[n]|1<<r:this.words[n]&~(1<<r),this.strip()},a.prototype.iadd=function(e){var t,n,o;if(0!==this.negative&&0===e.negative)return this.negative=0,t=this.isub(e),this.negative^=1,this._normSign();if(0===this.negative&&0!==e.negative)return e.negative=0,t=this.isub(e),e.negative=1,t._normSign();this.length>e.length?(n=this,o=e):(n=e,o=this);for(var r=0,a=0;a<o.length;a++)t=(0|n.words[a])+(0|o.words[a])+r,this.words[a]=67108863&t,r=t>>>26;for(;0!==r&&a<n.length;a++)t=(0|n.words[a])+r,this.words[a]=67108863&t,r=t>>>26;if(this.length=n.length,0!==r)this.words[this.length]=r,this.length++;else if(n!==this)for(;a<n.length;a++)this.words[a]=n.words[a];return this},a.prototype.add=function(e){var t;return 0!==e.negative&&0===this.negative?(e.negative=0,t=this.sub(e),e.negative^=1,t):0===e.negative&&0!==this.negative?(this.negative=0,t=e.sub(this),this.negative=1,t):this.length>e.length?this.clone().iadd(e):e.clone().iadd(this)},a.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var n,o,r=this.cmp(e);if(0===r)return this.negative=0,this.length=1,this.words[0]=0,this;r>0?(n=this,o=e):(n=e,o=this);for(var a=0,i=0;i<o.length;i++)a=(t=(0|n.words[i])-(0|o.words[i])+a)>>26,this.words[i]=67108863&t;for(;0!==a&&i<n.length;i++)a=(t=(0|n.words[i])+a)>>26,this.words[i]=67108863&t;if(0===a&&i<n.length&&n!==this)for(;i<n.length;i++)this.words[i]=n.words[i];return this.length=Math.max(this.length,i),n!==this&&(this.negative=1),this.strip()},a.prototype.sub=function(e){return this.clone().isub(e)};var u=function(e,t,n){var o,r,a,i=e.words,p=t.words,s=n.words,c=0,b=0|i[0],M=8191&b,l=b>>>13,u=0|i[1],d=8191&u,z=u>>>13,f=0|i[2],O=8191&f,A=f>>>13,h=0|i[3],m=8191&h,q=h>>>13,_=0|i[4],W=8191&_,g=_>>>13,v=0|i[5],y=8191&v,L=v>>>13,R=0|i[6],E=8191&R,w=R>>>13,k=0|i[7],B=8191&k,T=k>>>13,S=0|i[8],N=8191&S,X=S>>>13,C=0|i[9],D=8191&C,P=C>>>13,x=0|p[0],H=8191&x,F=x>>>13,j=0|p[1],Y=8191&j,I=j>>>13,U=0|p[2],V=8191&U,K=U>>>13,J=0|p[3],G=8191&J,Q=J>>>13,$=0|p[4],Z=8191&$,ee=$>>>13,te=0|p[5],ne=8191&te,oe=te>>>13,re=0|p[6],ae=8191&re,ie=re>>>13,pe=0|p[7],se=8191&pe,ce=pe>>>13,be=0|p[8],Me=8191&be,le=be>>>13,ue=0|p[9],de=8191&ue,ze=ue>>>13;n.negative=e.negative^t.negative,n.length=19;var fe=(c+(o=Math.imul(M,H))|0)+((8191&(r=(r=Math.imul(M,F))+Math.imul(l,H)|0))<<13)|0;c=((a=Math.imul(l,F))+(r>>>13)|0)+(fe>>>26)|0,fe&=67108863,o=Math.imul(d,H),r=(r=Math.imul(d,F))+Math.imul(z,H)|0,a=Math.imul(z,F);var Oe=(c+(o=o+Math.imul(M,Y)|0)|0)+((8191&(r=(r=r+Math.imul(M,I)|0)+Math.imul(l,Y)|0))<<13)|0;c=((a=a+Math.imul(l,I)|0)+(r>>>13)|0)+(Oe>>>26)|0,Oe&=67108863,o=Math.imul(O,H),r=(r=Math.imul(O,F))+Math.imul(A,H)|0,a=Math.imul(A,F),o=o+Math.imul(d,Y)|0,r=(r=r+Math.imul(d,I)|0)+Math.imul(z,Y)|0,a=a+Math.imul(z,I)|0;var Ae=(c+(o=o+Math.imul(M,V)|0)|0)+((8191&(r=(r=r+Math.imul(M,K)|0)+Math.imul(l,V)|0))<<13)|0;c=((a=a+Math.imul(l,K)|0)+(r>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,o=Math.imul(m,H),r=(r=Math.imul(m,F))+Math.imul(q,H)|0,a=Math.imul(q,F),o=o+Math.imul(O,Y)|0,r=(r=r+Math.imul(O,I)|0)+Math.imul(A,Y)|0,a=a+Math.imul(A,I)|0,o=o+Math.imul(d,V)|0,r=(r=r+Math.imul(d,K)|0)+Math.imul(z,V)|0,a=a+Math.imul(z,K)|0;var he=(c+(o=o+Math.imul(M,G)|0)|0)+((8191&(r=(r=r+Math.imul(M,Q)|0)+Math.imul(l,G)|0))<<13)|0;c=((a=a+Math.imul(l,Q)|0)+(r>>>13)|0)+(he>>>26)|0,he&=67108863,o=Math.imul(W,H),r=(r=Math.imul(W,F))+Math.imul(g,H)|0,a=Math.imul(g,F),o=o+Math.imul(m,Y)|0,r=(r=r+Math.imul(m,I)|0)+Math.imul(q,Y)|0,a=a+Math.imul(q,I)|0,o=o+Math.imul(O,V)|0,r=(r=r+Math.imul(O,K)|0)+Math.imul(A,V)|0,a=a+Math.imul(A,K)|0,o=o+Math.imul(d,G)|0,r=(r=r+Math.imul(d,Q)|0)+Math.imul(z,G)|0,a=a+Math.imul(z,Q)|0;var me=(c+(o=o+Math.imul(M,Z)|0)|0)+((8191&(r=(r=r+Math.imul(M,ee)|0)+Math.imul(l,Z)|0))<<13)|0;c=((a=a+Math.imul(l,ee)|0)+(r>>>13)|0)+(me>>>26)|0,me&=67108863,o=Math.imul(y,H),r=(r=Math.imul(y,F))+Math.imul(L,H)|0,a=Math.imul(L,F),o=o+Math.imul(W,Y)|0,r=(r=r+Math.imul(W,I)|0)+Math.imul(g,Y)|0,a=a+Math.imul(g,I)|0,o=o+Math.imul(m,V)|0,r=(r=r+Math.imul(m,K)|0)+Math.imul(q,V)|0,a=a+Math.imul(q,K)|0,o=o+Math.imul(O,G)|0,r=(r=r+Math.imul(O,Q)|0)+Math.imul(A,G)|0,a=a+Math.imul(A,Q)|0,o=o+Math.imul(d,Z)|0,r=(r=r+Math.imul(d,ee)|0)+Math.imul(z,Z)|0,a=a+Math.imul(z,ee)|0;var qe=(c+(o=o+Math.imul(M,ne)|0)|0)+((8191&(r=(r=r+Math.imul(M,oe)|0)+Math.imul(l,ne)|0))<<13)|0;c=((a=a+Math.imul(l,oe)|0)+(r>>>13)|0)+(qe>>>26)|0,qe&=67108863,o=Math.imul(E,H),r=(r=Math.imul(E,F))+Math.imul(w,H)|0,a=Math.imul(w,F),o=o+Math.imul(y,Y)|0,r=(r=r+Math.imul(y,I)|0)+Math.imul(L,Y)|0,a=a+Math.imul(L,I)|0,o=o+Math.imul(W,V)|0,r=(r=r+Math.imul(W,K)|0)+Math.imul(g,V)|0,a=a+Math.imul(g,K)|0,o=o+Math.imul(m,G)|0,r=(r=r+Math.imul(m,Q)|0)+Math.imul(q,G)|0,a=a+Math.imul(q,Q)|0,o=o+Math.imul(O,Z)|0,r=(r=r+Math.imul(O,ee)|0)+Math.imul(A,Z)|0,a=a+Math.imul(A,ee)|0,o=o+Math.imul(d,ne)|0,r=(r=r+Math.imul(d,oe)|0)+Math.imul(z,ne)|0,a=a+Math.imul(z,oe)|0;var _e=(c+(o=o+Math.imul(M,ae)|0)|0)+((8191&(r=(r=r+Math.imul(M,ie)|0)+Math.imul(l,ae)|0))<<13)|0;c=((a=a+Math.imul(l,ie)|0)+(r>>>13)|0)+(_e>>>26)|0,_e&=67108863,o=Math.imul(B,H),r=(r=Math.imul(B,F))+Math.imul(T,H)|0,a=Math.imul(T,F),o=o+Math.imul(E,Y)|0,r=(r=r+Math.imul(E,I)|0)+Math.imul(w,Y)|0,a=a+Math.imul(w,I)|0,o=o+Math.imul(y,V)|0,r=(r=r+Math.imul(y,K)|0)+Math.imul(L,V)|0,a=a+Math.imul(L,K)|0,o=o+Math.imul(W,G)|0,r=(r=r+Math.imul(W,Q)|0)+Math.imul(g,G)|0,a=a+Math.imul(g,Q)|0,o=o+Math.imul(m,Z)|0,r=(r=r+Math.imul(m,ee)|0)+Math.imul(q,Z)|0,a=a+Math.imul(q,ee)|0,o=o+Math.imul(O,ne)|0,r=(r=r+Math.imul(O,oe)|0)+Math.imul(A,ne)|0,a=a+Math.imul(A,oe)|0,o=o+Math.imul(d,ae)|0,r=(r=r+Math.imul(d,ie)|0)+Math.imul(z,ae)|0,a=a+Math.imul(z,ie)|0;var We=(c+(o=o+Math.imul(M,se)|0)|0)+((8191&(r=(r=r+Math.imul(M,ce)|0)+Math.imul(l,se)|0))<<13)|0;c=((a=a+Math.imul(l,ce)|0)+(r>>>13)|0)+(We>>>26)|0,We&=67108863,o=Math.imul(N,H),r=(r=Math.imul(N,F))+Math.imul(X,H)|0,a=Math.imul(X,F),o=o+Math.imul(B,Y)|0,r=(r=r+Math.imul(B,I)|0)+Math.imul(T,Y)|0,a=a+Math.imul(T,I)|0,o=o+Math.imul(E,V)|0,r=(r=r+Math.imul(E,K)|0)+Math.imul(w,V)|0,a=a+Math.imul(w,K)|0,o=o+Math.imul(y,G)|0,r=(r=r+Math.imul(y,Q)|0)+Math.imul(L,G)|0,a=a+Math.imul(L,Q)|0,o=o+Math.imul(W,Z)|0,r=(r=r+Math.imul(W,ee)|0)+Math.imul(g,Z)|0,a=a+Math.imul(g,ee)|0,o=o+Math.imul(m,ne)|0,r=(r=r+Math.imul(m,oe)|0)+Math.imul(q,ne)|0,a=a+Math.imul(q,oe)|0,o=o+Math.imul(O,ae)|0,r=(r=r+Math.imul(O,ie)|0)+Math.imul(A,ae)|0,a=a+Math.imul(A,ie)|0,o=o+Math.imul(d,se)|0,r=(r=r+Math.imul(d,ce)|0)+Math.imul(z,se)|0,a=a+Math.imul(z,ce)|0;var ge=(c+(o=o+Math.imul(M,Me)|0)|0)+((8191&(r=(r=r+Math.imul(M,le)|0)+Math.imul(l,Me)|0))<<13)|0;c=((a=a+Math.imul(l,le)|0)+(r>>>13)|0)+(ge>>>26)|0,ge&=67108863,o=Math.imul(D,H),r=(r=Math.imul(D,F))+Math.imul(P,H)|0,a=Math.imul(P,F),o=o+Math.imul(N,Y)|0,r=(r=r+Math.imul(N,I)|0)+Math.imul(X,Y)|0,a=a+Math.imul(X,I)|0,o=o+Math.imul(B,V)|0,r=(r=r+Math.imul(B,K)|0)+Math.imul(T,V)|0,a=a+Math.imul(T,K)|0,o=o+Math.imul(E,G)|0,r=(r=r+Math.imul(E,Q)|0)+Math.imul(w,G)|0,a=a+Math.imul(w,Q)|0,o=o+Math.imul(y,Z)|0,r=(r=r+Math.imul(y,ee)|0)+Math.imul(L,Z)|0,a=a+Math.imul(L,ee)|0,o=o+Math.imul(W,ne)|0,r=(r=r+Math.imul(W,oe)|0)+Math.imul(g,ne)|0,a=a+Math.imul(g,oe)|0,o=o+Math.imul(m,ae)|0,r=(r=r+Math.imul(m,ie)|0)+Math.imul(q,ae)|0,a=a+Math.imul(q,ie)|0,o=o+Math.imul(O,se)|0,r=(r=r+Math.imul(O,ce)|0)+Math.imul(A,se)|0,a=a+Math.imul(A,ce)|0,o=o+Math.imul(d,Me)|0,r=(r=r+Math.imul(d,le)|0)+Math.imul(z,Me)|0,a=a+Math.imul(z,le)|0;var ve=(c+(o=o+Math.imul(M,de)|0)|0)+((8191&(r=(r=r+Math.imul(M,ze)|0)+Math.imul(l,de)|0))<<13)|0;c=((a=a+Math.imul(l,ze)|0)+(r>>>13)|0)+(ve>>>26)|0,ve&=67108863,o=Math.imul(D,Y),r=(r=Math.imul(D,I))+Math.imul(P,Y)|0,a=Math.imul(P,I),o=o+Math.imul(N,V)|0,r=(r=r+Math.imul(N,K)|0)+Math.imul(X,V)|0,a=a+Math.imul(X,K)|0,o=o+Math.imul(B,G)|0,r=(r=r+Math.imul(B,Q)|0)+Math.imul(T,G)|0,a=a+Math.imul(T,Q)|0,o=o+Math.imul(E,Z)|0,r=(r=r+Math.imul(E,ee)|0)+Math.imul(w,Z)|0,a=a+Math.imul(w,ee)|0,o=o+Math.imul(y,ne)|0,r=(r=r+Math.imul(y,oe)|0)+Math.imul(L,ne)|0,a=a+Math.imul(L,oe)|0,o=o+Math.imul(W,ae)|0,r=(r=r+Math.imul(W,ie)|0)+Math.imul(g,ae)|0,a=a+Math.imul(g,ie)|0,o=o+Math.imul(m,se)|0,r=(r=r+Math.imul(m,ce)|0)+Math.imul(q,se)|0,a=a+Math.imul(q,ce)|0,o=o+Math.imul(O,Me)|0,r=(r=r+Math.imul(O,le)|0)+Math.imul(A,Me)|0,a=a+Math.imul(A,le)|0;var ye=(c+(o=o+Math.imul(d,de)|0)|0)+((8191&(r=(r=r+Math.imul(d,ze)|0)+Math.imul(z,de)|0))<<13)|0;c=((a=a+Math.imul(z,ze)|0)+(r>>>13)|0)+(ye>>>26)|0,ye&=67108863,o=Math.imul(D,V),r=(r=Math.imul(D,K))+Math.imul(P,V)|0,a=Math.imul(P,K),o=o+Math.imul(N,G)|0,r=(r=r+Math.imul(N,Q)|0)+Math.imul(X,G)|0,a=a+Math.imul(X,Q)|0,o=o+Math.imul(B,Z)|0,r=(r=r+Math.imul(B,ee)|0)+Math.imul(T,Z)|0,a=a+Math.imul(T,ee)|0,o=o+Math.imul(E,ne)|0,r=(r=r+Math.imul(E,oe)|0)+Math.imul(w,ne)|0,a=a+Math.imul(w,oe)|0,o=o+Math.imul(y,ae)|0,r=(r=r+Math.imul(y,ie)|0)+Math.imul(L,ae)|0,a=a+Math.imul(L,ie)|0,o=o+Math.imul(W,se)|0,r=(r=r+Math.imul(W,ce)|0)+Math.imul(g,se)|0,a=a+Math.imul(g,ce)|0,o=o+Math.imul(m,Me)|0,r=(r=r+Math.imul(m,le)|0)+Math.imul(q,Me)|0,a=a+Math.imul(q,le)|0;var Le=(c+(o=o+Math.imul(O,de)|0)|0)+((8191&(r=(r=r+Math.imul(O,ze)|0)+Math.imul(A,de)|0))<<13)|0;c=((a=a+Math.imul(A,ze)|0)+(r>>>13)|0)+(Le>>>26)|0,Le&=67108863,o=Math.imul(D,G),r=(r=Math.imul(D,Q))+Math.imul(P,G)|0,a=Math.imul(P,Q),o=o+Math.imul(N,Z)|0,r=(r=r+Math.imul(N,ee)|0)+Math.imul(X,Z)|0,a=a+Math.imul(X,ee)|0,o=o+Math.imul(B,ne)|0,r=(r=r+Math.imul(B,oe)|0)+Math.imul(T,ne)|0,a=a+Math.imul(T,oe)|0,o=o+Math.imul(E,ae)|0,r=(r=r+Math.imul(E,ie)|0)+Math.imul(w,ae)|0,a=a+Math.imul(w,ie)|0,o=o+Math.imul(y,se)|0,r=(r=r+Math.imul(y,ce)|0)+Math.imul(L,se)|0,a=a+Math.imul(L,ce)|0,o=o+Math.imul(W,Me)|0,r=(r=r+Math.imul(W,le)|0)+Math.imul(g,Me)|0,a=a+Math.imul(g,le)|0;var Re=(c+(o=o+Math.imul(m,de)|0)|0)+((8191&(r=(r=r+Math.imul(m,ze)|0)+Math.imul(q,de)|0))<<13)|0;c=((a=a+Math.imul(q,ze)|0)+(r>>>13)|0)+(Re>>>26)|0,Re&=67108863,o=Math.imul(D,Z),r=(r=Math.imul(D,ee))+Math.imul(P,Z)|0,a=Math.imul(P,ee),o=o+Math.imul(N,ne)|0,r=(r=r+Math.imul(N,oe)|0)+Math.imul(X,ne)|0,a=a+Math.imul(X,oe)|0,o=o+Math.imul(B,ae)|0,r=(r=r+Math.imul(B,ie)|0)+Math.imul(T,ae)|0,a=a+Math.imul(T,ie)|0,o=o+Math.imul(E,se)|0,r=(r=r+Math.imul(E,ce)|0)+Math.imul(w,se)|0,a=a+Math.imul(w,ce)|0,o=o+Math.imul(y,Me)|0,r=(r=r+Math.imul(y,le)|0)+Math.imul(L,Me)|0,a=a+Math.imul(L,le)|0;var Ee=(c+(o=o+Math.imul(W,de)|0)|0)+((8191&(r=(r=r+Math.imul(W,ze)|0)+Math.imul(g,de)|0))<<13)|0;c=((a=a+Math.imul(g,ze)|0)+(r>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,o=Math.imul(D,ne),r=(r=Math.imul(D,oe))+Math.imul(P,ne)|0,a=Math.imul(P,oe),o=o+Math.imul(N,ae)|0,r=(r=r+Math.imul(N,ie)|0)+Math.imul(X,ae)|0,a=a+Math.imul(X,ie)|0,o=o+Math.imul(B,se)|0,r=(r=r+Math.imul(B,ce)|0)+Math.imul(T,se)|0,a=a+Math.imul(T,ce)|0,o=o+Math.imul(E,Me)|0,r=(r=r+Math.imul(E,le)|0)+Math.imul(w,Me)|0,a=a+Math.imul(w,le)|0;var we=(c+(o=o+Math.imul(y,de)|0)|0)+((8191&(r=(r=r+Math.imul(y,ze)|0)+Math.imul(L,de)|0))<<13)|0;c=((a=a+Math.imul(L,ze)|0)+(r>>>13)|0)+(we>>>26)|0,we&=67108863,o=Math.imul(D,ae),r=(r=Math.imul(D,ie))+Math.imul(P,ae)|0,a=Math.imul(P,ie),o=o+Math.imul(N,se)|0,r=(r=r+Math.imul(N,ce)|0)+Math.imul(X,se)|0,a=a+Math.imul(X,ce)|0,o=o+Math.imul(B,Me)|0,r=(r=r+Math.imul(B,le)|0)+Math.imul(T,Me)|0,a=a+Math.imul(T,le)|0;var ke=(c+(o=o+Math.imul(E,de)|0)|0)+((8191&(r=(r=r+Math.imul(E,ze)|0)+Math.imul(w,de)|0))<<13)|0;c=((a=a+Math.imul(w,ze)|0)+(r>>>13)|0)+(ke>>>26)|0,ke&=67108863,o=Math.imul(D,se),r=(r=Math.imul(D,ce))+Math.imul(P,se)|0,a=Math.imul(P,ce),o=o+Math.imul(N,Me)|0,r=(r=r+Math.imul(N,le)|0)+Math.imul(X,Me)|0,a=a+Math.imul(X,le)|0;var Be=(c+(o=o+Math.imul(B,de)|0)|0)+((8191&(r=(r=r+Math.imul(B,ze)|0)+Math.imul(T,de)|0))<<13)|0;c=((a=a+Math.imul(T,ze)|0)+(r>>>13)|0)+(Be>>>26)|0,Be&=67108863,o=Math.imul(D,Me),r=(r=Math.imul(D,le))+Math.imul(P,Me)|0,a=Math.imul(P,le);var Te=(c+(o=o+Math.imul(N,de)|0)|0)+((8191&(r=(r=r+Math.imul(N,ze)|0)+Math.imul(X,de)|0))<<13)|0;c=((a=a+Math.imul(X,ze)|0)+(r>>>13)|0)+(Te>>>26)|0,Te&=67108863;var Se=(c+(o=Math.imul(D,de))|0)+((8191&(r=(r=Math.imul(D,ze))+Math.imul(P,de)|0))<<13)|0;return c=((a=Math.imul(P,ze))+(r>>>13)|0)+(Se>>>26)|0,Se&=67108863,s[0]=fe,s[1]=Oe,s[2]=Ae,s[3]=he,s[4]=me,s[5]=qe,s[6]=_e,s[7]=We,s[8]=ge,s[9]=ve,s[10]=ye,s[11]=Le,s[12]=Re,s[13]=Ee,s[14]=we,s[15]=ke,s[16]=Be,s[17]=Te,s[18]=Se,0!==c&&(s[19]=c,n.length++),n};function d(e,t,n){return(new z).mulp(e,t,n)}function z(e,t){this.x=e,this.y=t}Math.imul||(u=l),a.prototype.mulTo=function(e,t){var n=this.length+e.length;return 10===this.length&&10===e.length?u(this,e,t):n<63?l(this,e,t):n<1024?function(e,t,n){n.negative=t.negative^e.negative,n.length=e.length+t.length;for(var o=0,r=0,a=0;a<n.length-1;a++){var i=r;r=0;for(var p=67108863&o,s=Math.min(a,t.length-1),c=Math.max(0,a-e.length+1);c<=s;c++){var b=a-c,M=(0|e.words[b])*(0|t.words[c]),l=67108863&M;p=67108863&(l=l+p|0),r+=(i=(i=i+(M/67108864|0)|0)+(l>>>26)|0)>>>26,i&=67108863}n.words[a]=p,o=i,i=r}return 0!==o?n.words[a]=o:n.length--,n.strip()}(this,e,t):d(this,e,t)},z.prototype.makeRBT=function(e){for(var t=new Array(e),n=a.prototype._countBits(e)-1,o=0;o<e;o++)t[o]=this.revBin(o,n,e);return t},z.prototype.revBin=function(e,t,n){if(0===e||e===n-1)return e;for(var o=0,r=0;r<t;r++)o|=(1&e)<<t-r-1,e>>=1;return o},z.prototype.permute=function(e,t,n,o,r,a){for(var i=0;i<a;i++)o[i]=t[e[i]],r[i]=n[e[i]]},z.prototype.transform=function(e,t,n,o,r,a){this.permute(a,e,t,n,o,r);for(var i=1;i<r;i<<=1)for(var p=i<<1,s=Math.cos(2*Math.PI/p),c=Math.sin(2*Math.PI/p),b=0;b<r;b+=p)for(var M=s,l=c,u=0;u<i;u++){var d=n[b+u],z=o[b+u],f=n[b+u+i],O=o[b+u+i],A=M*f-l*O;O=M*O+l*f,f=A,n[b+u]=d+f,o[b+u]=z+O,n[b+u+i]=d-f,o[b+u+i]=z-O,u!==p&&(A=s*M-c*l,l=s*l+c*M,M=A)}},z.prototype.guessLen13b=function(e,t){var n=1|Math.max(t,e),o=1&n,r=0;for(n=n/2|0;n;n>>>=1)r++;return 1<<r+1+o},z.prototype.conjugate=function(e,t,n){if(!(n<=1))for(var o=0;o<n/2;o++){var r=e[o];e[o]=e[n-o-1],e[n-o-1]=r,r=t[o],t[o]=-t[n-o-1],t[n-o-1]=-r}},z.prototype.normalize13b=function(e,t){for(var n=0,o=0;o<t/2;o++){var r=8192*Math.round(e[2*o+1]/t)+Math.round(e[2*o]/t)+n;e[o]=67108863&r,n=r<67108864?0:r/67108864|0}return e},z.prototype.convert13b=function(e,t,n,r){for(var a=0,i=0;i<t;i++)a+=0|e[i],n[2*i]=8191&a,a>>>=13,n[2*i+1]=8191&a,a>>>=13;for(i=2*t;i<r;++i)n[i]=0;o(0===a),o(0==(-8192&a))},z.prototype.stub=function(e){for(var t=new Array(e),n=0;n<e;n++)t[n]=0;return t},z.prototype.mulp=function(e,t,n){var o=2*this.guessLen13b(e.length,t.length),r=this.makeRBT(o),a=this.stub(o),i=new Array(o),p=new Array(o),s=new Array(o),c=new Array(o),b=new Array(o),M=new Array(o),l=n.words;l.length=o,this.convert13b(e.words,e.length,i,o),this.convert13b(t.words,t.length,c,o),this.transform(i,a,p,s,o,r),this.transform(c,a,b,M,o,r);for(var u=0;u<o;u++){var d=p[u]*b[u]-s[u]*M[u];s[u]=p[u]*M[u]+s[u]*b[u],p[u]=d}return this.conjugate(p,s,o),this.transform(p,s,l,a,o,r),this.conjugate(l,a,o),this.normalize13b(l,o),n.negative=e.negative^t.negative,n.length=e.length+t.length,n.strip()},a.prototype.mul=function(e){var t=new a(null);return t.words=new Array(this.length+e.length),this.mulTo(e,t)},a.prototype.mulf=function(e){var t=new a(null);return t.words=new Array(this.length+e.length),d(this,e,t)},a.prototype.imul=function(e){return this.clone().mulTo(e,this)},a.prototype.imuln=function(e){o("number"==typeof e),o(e<67108864);for(var t=0,n=0;n<this.length;n++){var r=(0|this.words[n])*e,a=(67108863&r)+(67108863&t);t>>=26,t+=r/67108864|0,t+=a>>>26,this.words[n]=67108863&a}return 0!==t&&(this.words[n]=t,this.length++),this},a.prototype.muln=function(e){return this.clone().imuln(e)},a.prototype.sqr=function(){return this.mul(this)},a.prototype.isqr=function(){return this.imul(this.clone())},a.prototype.pow=function(e){var t=function(e){for(var t=new Array(e.bitLength()),n=0;n<t.length;n++){var o=n/26|0,r=n%26;t[n]=(e.words[o]&1<<r)>>>r}return t}(e);if(0===t.length)return new a(1);for(var n=this,o=0;o<t.length&&0===t[o];o++,n=n.sqr());if(++o<t.length)for(var r=n.sqr();o<t.length;o++,r=r.sqr())0!==t[o]&&(n=n.mul(r));return n},a.prototype.iushln=function(e){o("number"==typeof e&&e>=0);var t,n=e%26,r=(e-n)/26,a=67108863>>>26-n<<26-n;if(0!==n){var i=0;for(t=0;t<this.length;t++){var p=this.words[t]&a,s=(0|this.words[t])-p<<n;this.words[t]=s|i,i=p>>>26-n}i&&(this.words[t]=i,this.length++)}if(0!==r){for(t=this.length-1;t>=0;t--)this.words[t+r]=this.words[t];for(t=0;t<r;t++)this.words[t]=0;this.length+=r}return this.strip()},a.prototype.ishln=function(e){return o(0===this.negative),this.iushln(e)},a.prototype.iushrn=function(e,t,n){var r;o("number"==typeof e&&e>=0),r=t?(t-t%26)/26:0;var a=e%26,i=Math.min((e-a)/26,this.length),p=67108863^67108863>>>a<<a,s=n;if(r-=i,r=Math.max(0,r),s){for(var c=0;c<i;c++)s.words[c]=this.words[c];s.length=i}if(0===i);else if(this.length>i)for(this.length-=i,c=0;c<this.length;c++)this.words[c]=this.words[c+i];else this.words[0]=0,this.length=1;var b=0;for(c=this.length-1;c>=0&&(0!==b||c>=r);c--){var M=0|this.words[c];this.words[c]=b<<26-a|M>>>a,b=M&p}return s&&0!==b&&(s.words[s.length++]=b),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},a.prototype.ishrn=function(e,t,n){return o(0===this.negative),this.iushrn(e,t,n)},a.prototype.shln=function(e){return this.clone().ishln(e)},a.prototype.ushln=function(e){return this.clone().iushln(e)},a.prototype.shrn=function(e){return this.clone().ishrn(e)},a.prototype.ushrn=function(e){return this.clone().iushrn(e)},a.prototype.testn=function(e){o("number"==typeof e&&e>=0);var t=e%26,n=(e-t)/26,r=1<<t;return!(this.length<=n||!(this.words[n]&r))},a.prototype.imaskn=function(e){o("number"==typeof e&&e>=0);var t=e%26,n=(e-t)/26;if(o(0===this.negative,"imaskn works only with positive numbers"),this.length<=n)return this;if(0!==t&&n++,this.length=Math.min(n,this.length),0!==t){var r=67108863^67108863>>>t<<t;this.words[this.length-1]&=r}return this.strip()},a.prototype.maskn=function(e){return this.clone().imaskn(e)},a.prototype.iaddn=function(e){return o("number"==typeof e),o(e<67108864),e<0?this.isubn(-e):0!==this.negative?1===this.length&&(0|this.words[0])<e?(this.words[0]=e-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(e),this.negative=1,this):this._iaddn(e)},a.prototype._iaddn=function(e){this.words[0]+=e;for(var t=0;t<this.length&&this.words[t]>=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},a.prototype.isubn=function(e){if(o("number"==typeof e),o(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t<this.length&&this.words[t]<0;t++)this.words[t]+=67108864,this.words[t+1]-=1;return this.strip()},a.prototype.addn=function(e){return this.clone().iaddn(e)},a.prototype.subn=function(e){return this.clone().isubn(e)},a.prototype.iabs=function(){return this.negative=0,this},a.prototype.abs=function(){return this.clone().iabs()},a.prototype._ishlnsubmul=function(e,t,n){var r,a,i=e.length+n;this._expand(i);var p=0;for(r=0;r<e.length;r++){a=(0|this.words[r+n])+p;var s=(0|e.words[r])*t;p=((a-=67108863&s)>>26)-(s/67108864|0),this.words[r+n]=67108863&a}for(;r<this.length-n;r++)p=(a=(0|this.words[r+n])+p)>>26,this.words[r+n]=67108863&a;if(0===p)return this.strip();for(o(-1===p),p=0,r=0;r<this.length;r++)p=(a=-(0|this.words[r])+p)>>26,this.words[r]=67108863&a;return this.negative=1,this.strip()},a.prototype._wordDiv=function(e,t){var n=(this.length,e.length),o=this.clone(),r=e,i=0|r.words[r.length-1];0!=(n=26-this._countBits(i))&&(r=r.ushln(n),o.iushln(n),i=0|r.words[r.length-1]);var p,s=o.length-r.length;if("mod"!==t){(p=new a(null)).length=s+1,p.words=new Array(p.length);for(var c=0;c<p.length;c++)p.words[c]=0}var b=o.clone()._ishlnsubmul(r,1,s);0===b.negative&&(o=b,p&&(p.words[s]=1));for(var M=s-1;M>=0;M--){var l=67108864*(0|o.words[r.length+M])+(0|o.words[r.length+M-1]);for(l=Math.min(l/i|0,67108863),o._ishlnsubmul(r,l,M);0!==o.negative;)l--,o.negative=0,o._ishlnsubmul(r,1,M),o.isZero()||(o.negative^=1);p&&(p.words[M]=l)}return p&&p.strip(),o.strip(),"div"!==t&&0!==n&&o.iushrn(n),{div:p||null,mod:o}},a.prototype.divmod=function(e,t,n){return o(!e.isZero()),this.isZero()?{div:new a(0),mod:new a(0)}:0!==this.negative&&0===e.negative?(p=this.neg().divmod(e,t),"mod"!==t&&(r=p.div.neg()),"div"!==t&&(i=p.mod.neg(),n&&0!==i.negative&&i.iadd(e)),{div:r,mod:i}):0===this.negative&&0!==e.negative?(p=this.divmod(e.neg(),t),"mod"!==t&&(r=p.div.neg()),{div:r,mod:p.mod}):0!=(this.negative&e.negative)?(p=this.neg().divmod(e.neg(),t),"div"!==t&&(i=p.mod.neg(),n&&0!==i.negative&&i.isub(e)),{div:p.div,mod:i}):e.length>this.length||this.cmp(e)<0?{div:new a(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new a(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new a(this.modn(e.words[0]))}:this._wordDiv(e,t);var r,i,p},a.prototype.div=function(e){return this.divmod(e,"div",!1).div},a.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},a.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},a.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var n=0!==t.div.negative?t.mod.isub(e):t.mod,o=e.ushrn(1),r=e.andln(1),a=n.cmp(o);return a<0||1===r&&0===a?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},a.prototype.modn=function(e){o(e<=67108863);for(var t=(1<<26)%e,n=0,r=this.length-1;r>=0;r--)n=(t*n+(0|this.words[r]))%e;return n},a.prototype.idivn=function(e){o(e<=67108863);for(var t=0,n=this.length-1;n>=0;n--){var r=(0|this.words[n])+67108864*t;this.words[n]=r/e|0,t=r%e}return this.strip()},a.prototype.divn=function(e){return this.clone().idivn(e)},a.prototype.egcd=function(e){o(0===e.negative),o(!e.isZero());var t=this,n=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var r=new a(1),i=new a(0),p=new a(0),s=new a(1),c=0;t.isEven()&&n.isEven();)t.iushrn(1),n.iushrn(1),++c;for(var b=n.clone(),M=t.clone();!t.isZero();){for(var l=0,u=1;0==(t.words[0]&u)&&l<26;++l,u<<=1);if(l>0)for(t.iushrn(l);l-- >0;)(r.isOdd()||i.isOdd())&&(r.iadd(b),i.isub(M)),r.iushrn(1),i.iushrn(1);for(var d=0,z=1;0==(n.words[0]&z)&&d<26;++d,z<<=1);if(d>0)for(n.iushrn(d);d-- >0;)(p.isOdd()||s.isOdd())&&(p.iadd(b),s.isub(M)),p.iushrn(1),s.iushrn(1);t.cmp(n)>=0?(t.isub(n),r.isub(p),i.isub(s)):(n.isub(t),p.isub(r),s.isub(i))}return{a:p,b:s,gcd:n.iushln(c)}},a.prototype._invmp=function(e){o(0===e.negative),o(!e.isZero());var t=this,n=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var r,i=new a(1),p=new a(0),s=n.clone();t.cmpn(1)>0&&n.cmpn(1)>0;){for(var c=0,b=1;0==(t.words[0]&b)&&c<26;++c,b<<=1);if(c>0)for(t.iushrn(c);c-- >0;)i.isOdd()&&i.iadd(s),i.iushrn(1);for(var M=0,l=1;0==(n.words[0]&l)&&M<26;++M,l<<=1);if(M>0)for(n.iushrn(M);M-- >0;)p.isOdd()&&p.iadd(s),p.iushrn(1);t.cmp(n)>=0?(t.isub(n),i.isub(p)):(n.isub(t),p.isub(i))}return(r=0===t.cmpn(1)?i:p).cmpn(0)<0&&r.iadd(e),r},a.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),n=e.clone();t.negative=0,n.negative=0;for(var o=0;t.isEven()&&n.isEven();o++)t.iushrn(1),n.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;n.isEven();)n.iushrn(1);var r=t.cmp(n);if(r<0){var a=t;t=n,n=a}else if(0===r||0===n.cmpn(1))break;t.isub(n)}return n.iushln(o)},a.prototype.invm=function(e){return this.egcd(e).a.umod(e)},a.prototype.isEven=function(){return 0==(1&this.words[0])},a.prototype.isOdd=function(){return 1==(1&this.words[0])},a.prototype.andln=function(e){return this.words[0]&e},a.prototype.bincn=function(e){o("number"==typeof e);var t=e%26,n=(e-t)/26,r=1<<t;if(this.length<=n)return this._expand(n+1),this.words[n]|=r,this;for(var a=r,i=n;0!==a&&i<this.length;i++){var p=0|this.words[i];a=(p+=a)>>>26,p&=67108863,this.words[i]=p}return 0!==a&&(this.words[i]=a,this.length++),this},a.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},a.prototype.cmpn=function(e){var t,n=e<0;if(0!==this.negative&&!n)return-1;if(0===this.negative&&n)return 1;if(this.strip(),this.length>1)t=1;else{n&&(e=-e),o(e<=67108863,"Number is too big");var r=0|this.words[0];t=r===e?0:r<e?-1:1}return 0!==this.negative?0|-t:t},a.prototype.cmp=function(e){if(0!==this.negative&&0===e.negative)return-1;if(0===this.negative&&0!==e.negative)return 1;var t=this.ucmp(e);return 0!==this.negative?0|-t:t},a.prototype.ucmp=function(e){if(this.length>e.length)return 1;if(this.length<e.length)return-1;for(var t=0,n=this.length-1;n>=0;n--){var o=0|this.words[n],r=0|e.words[n];if(o!==r){o<r?t=-1:o>r&&(t=1);break}}return t},a.prototype.gtn=function(e){return 1===this.cmpn(e)},a.prototype.gt=function(e){return 1===this.cmp(e)},a.prototype.gten=function(e){return this.cmpn(e)>=0},a.prototype.gte=function(e){return this.cmp(e)>=0},a.prototype.ltn=function(e){return-1===this.cmpn(e)},a.prototype.lt=function(e){return-1===this.cmp(e)},a.prototype.lten=function(e){return this.cmpn(e)<=0},a.prototype.lte=function(e){return this.cmp(e)<=0},a.prototype.eqn=function(e){return 0===this.cmpn(e)},a.prototype.eq=function(e){return 0===this.cmp(e)},a.red=function(e){return new _(e)},a.prototype.toRed=function(e){return o(!this.red,"Already a number in reduction context"),o(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},a.prototype.fromRed=function(){return o(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},a.prototype._forceRed=function(e){return this.red=e,this},a.prototype.forceRed=function(e){return o(!this.red,"Already a number in reduction context"),this._forceRed(e)},a.prototype.redAdd=function(e){return o(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},a.prototype.redIAdd=function(e){return o(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},a.prototype.redSub=function(e){return o(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},a.prototype.redISub=function(e){return o(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},a.prototype.redShl=function(e){return o(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},a.prototype.redMul=function(e){return o(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},a.prototype.redIMul=function(e){return o(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},a.prototype.redSqr=function(){return o(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},a.prototype.redISqr=function(){return o(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},a.prototype.redSqrt=function(){return o(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},a.prototype.redInvm=function(){return o(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},a.prototype.redNeg=function(){return o(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},a.prototype.redPow=function(e){return o(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var f={k256:null,p224:null,p192:null,p25519:null};function O(e,t){this.name=e,this.p=new a(t,16),this.n=this.p.bitLength(),this.k=new a(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function A(){O.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function h(){O.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function m(){O.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function q(){O.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function _(e){if("string"==typeof e){var t=a._prime(e);this.m=t.p,this.prime=t}else o(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}function W(e){_.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new a(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}O.prototype._tmp=function(){var e=new a(null);return e.words=new Array(Math.ceil(this.n/13)),e},O.prototype.ireduce=function(e){var t,n=e;do{this.split(n,this.tmp),t=(n=(n=this.imulK(n)).iadd(this.tmp)).bitLength()}while(t>this.n);var o=t<this.n?-1:n.ucmp(this.p);return 0===o?(n.words[0]=0,n.length=1):o>0?n.isub(this.p):n.strip(),n},O.prototype.split=function(e,t){e.iushrn(this.n,0,t)},O.prototype.imulK=function(e){return e.imul(this.k)},r(A,O),A.prototype.split=function(e,t){for(var n=Math.min(e.length,9),o=0;o<n;o++)t.words[o]=e.words[o];if(t.length=n,e.length<=9)return e.words[0]=0,void(e.length=1);var r=e.words[9];for(t.words[t.length++]=4194303&r,o=10;o<e.length;o++){var a=0|e.words[o];e.words[o-10]=(4194303&a)<<4|r>>>22,r=a}r>>>=22,e.words[o-10]=r,0===r&&e.length>10?e.length-=10:e.length-=9},A.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,n=0;n<e.length;n++){var o=0|e.words[n];t+=977*o,e.words[n]=67108863&t,t=64*o+(t/67108864|0)}return 0===e.words[e.length-1]&&(e.length--,0===e.words[e.length-1]&&e.length--),e},r(h,O),r(m,O),r(q,O),q.prototype.imulK=function(e){for(var t=0,n=0;n<e.length;n++){var o=19*(0|e.words[n])+t,r=67108863&o;o>>>=26,e.words[n]=r,t=o}return 0!==t&&(e.words[e.length++]=t),e},a._prime=function(e){if(f[e])return f[e];var t;if("k256"===e)t=new A;else if("p224"===e)t=new h;else if("p192"===e)t=new m;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new q}return f[e]=t,t},_.prototype._verify1=function(e){o(0===e.negative,"red works only with positives"),o(e.red,"red works only with red numbers")},_.prototype._verify2=function(e,t){o(0==(e.negative|t.negative),"red works only with positives"),o(e.red&&e.red===t.red,"red works only with red numbers")},_.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},_.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},_.prototype.add=function(e,t){this._verify2(e,t);var n=e.add(t);return n.cmp(this.m)>=0&&n.isub(this.m),n._forceRed(this)},_.prototype.iadd=function(e,t){this._verify2(e,t);var n=e.iadd(t);return n.cmp(this.m)>=0&&n.isub(this.m),n},_.prototype.sub=function(e,t){this._verify2(e,t);var n=e.sub(t);return n.cmpn(0)<0&&n.iadd(this.m),n._forceRed(this)},_.prototype.isub=function(e,t){this._verify2(e,t);var n=e.isub(t);return n.cmpn(0)<0&&n.iadd(this.m),n},_.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},_.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},_.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},_.prototype.isqr=function(e){return this.imul(e,e.clone())},_.prototype.sqr=function(e){return this.mul(e,e)},_.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(o(t%2==1),3===t){var n=this.m.add(new a(1)).iushrn(2);return this.pow(e,n)}for(var r=this.m.subn(1),i=0;!r.isZero()&&0===r.andln(1);)i++,r.iushrn(1);o(!r.isZero());var p=new a(1).toRed(this),s=p.redNeg(),c=this.m.subn(1).iushrn(1),b=this.m.bitLength();for(b=new a(2*b*b).toRed(this);0!==this.pow(b,c).cmp(s);)b.redIAdd(s);for(var M=this.pow(b,r),l=this.pow(e,r.addn(1).iushrn(1)),u=this.pow(e,r),d=i;0!==u.cmp(p);){for(var z=u,f=0;0!==z.cmp(p);f++)z=z.redSqr();o(f<d);var O=this.pow(M,new a(1).iushln(d-f-1));l=l.redMul(O),M=O.redSqr(),u=u.redMul(M),d=f}return l},_.prototype.invm=function(e){var t=e._invmp(this.m);return 0!==t.negative?(t.negative=0,this.imod(t).redNeg()):this.imod(t)},_.prototype.pow=function(e,t){if(t.isZero())return new a(1).toRed(this);if(0===t.cmpn(1))return e.clone();var n=new Array(16);n[0]=new a(1).toRed(this),n[1]=e;for(var o=2;o<n.length;o++)n[o]=this.mul(n[o-1],e);var r=n[0],i=0,p=0,s=t.bitLength()%26;for(0===s&&(s=26),o=t.length-1;o>=0;o--){for(var c=t.words[o],b=s-1;b>=0;b--){var M=c>>b&1;r!==n[0]&&(r=this.sqr(r)),0!==M||0!==i?(i<<=1,i|=M,(4==++p||0===o&&0===b)&&(r=this.mul(r,n[i]),p=0,i=0)):p=0}s=26}return r},_.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},_.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},a.mont=function(e){return new W(e)},r(W,_),W.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},W.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},W.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var n=e.imul(t),o=n.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),r=n.isub(o).iushrn(this.shift),a=r;return r.cmp(this.m)>=0?a=r.isub(this.m):r.cmpn(0)<0&&(a=r.iadd(this.m)),a._forceRed(this)},W.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new a(0)._forceRed(this);var n=e.mul(t),o=n.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),r=n.isub(o).iushrn(this.shift),i=r;return r.cmp(this.m)>=0?i=r.isub(this.m):r.cmpn(0)<0&&(i=r.iadd(this.m)),i._forceRed(this)},W.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(e,this)}).call(this,n(89)(e))},function(e,t,n){"use strict";t.__esModule=!0;var o=i(n(481)),r=i(n(490)),a="function"==typeof r.default&&"symbol"==typeof o.default?function(e){return typeof e}:function(e){return e&&"function"==typeof r.default&&e.constructor===r.default&&e!==r.default.prototype?"symbol":typeof e};function i(e){return e&&e.__esModule?e:{default:e}}t.default="function"==typeof r.default&&"symbol"===a(o.default)?function(e){return void 0===e?"undefined":a(e)}:function(e){return e&&"function"==typeof r.default&&e.constructor===r.default&&e!==r.default.prototype?"symbol":void 0===e?"undefined":a(e)}},function(e,t,n){e.exports=!n(69)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.FormSelect=t.FormButton=t.FormRadio=t.FormTextarea=t.FormTextInput=t.FormCheckbox=t.FormLegend=t.FormLabel=t.FormFieldset=void 0;var o=A(n(382)),r=A(n(3)),a=A(n(4)),i=A(n(7)),p=A(n(5)),s=A(n(6)),c=A(n(10)),b=A(n(2)),M=A(n(12)),l=A(n(85)),u=A(n(759)),d=A(n(183)),z=n(8),f=A(n(33)),O=A(n(662));function A(e){return e&&e.__esModule?e:{default:e}}t.FormFieldset=function(e){return b.default.createElement("fieldset",(0,c.default)({},(0,l.default)(e,"className"),{className:(0,M.default)(e.className,"jp-form-fieldset")}),e.children)},(t.FormLabel=function(e){function t(){return(0,a.default)(this,t),(0,p.default)(this,(t.__proto__||(0,r.default)(t)).apply(this,arguments))}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e=this.props,t=e.className,n=e.htmlFor,r=(0,o.default)(e,["className","htmlFor"]);return b.default.createElement("label",(0,c.default)({},r,{htmlFor:n,className:(0,M.default)(t,"jp-form-label")}),this.props.children)}}]),t}(b.default.Component)).displayName="FormLabel",(t.FormLegend=function(e){function t(){return(0,a.default)(this,t),(0,p.default)(this,(t.__proto__||(0,r.default)(t)).apply(this,arguments))}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){return b.default.createElement("legend",(0,c.default)({},(0,l.default)(this.props,"className"),{className:(0,M.default)(this.props.className,"jp-form-legend")}),this.props.children)}}]),t}(b.default.Component)).displayName="FormLegend",(t.FormCheckbox=function(e){function t(){return(0,a.default)(this,t),(0,p.default)(this,(t.__proto__||(0,r.default)(t)).apply(this,arguments))}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e=(0,l.default)(this.props,["className","type"]);return b.default.createElement("input",(0,c.default)({},e,{type:"checkbox",className:(0,M.default)(this.props.className,"jp-form-checkbox")}))}}]),t}(b.default.Component)).displayName="FormInputCheckbox";var h=t.FormTextInput=function(e){function t(){var e,n,o,i;(0,a.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=o=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(c))),o.focus=function(){o.refs.textField.focus()},o.selectOnFocus=function(e){e.target.select()},i=n,(0,p.default)(o,i)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e=this.props,t=e.className,n=e.selectOnFocus,o=(0,M.default)(t,{"jp-form-text-input":!0,"is-error":this.props.isError,"is-valid":this.props.isValid});return b.default.createElement("input",(0,c.default)({},this.props,{ref:"textField",className:o,onClick:n?this.selectOnFocus:null}))}}]),t}(b.default.Component);h.displayName="FormTextInput",h.defaultProps={isError:!1,isValid:!1,selectOnFocus:!1,type:"text"},(t.FormTextarea=function(e){function t(){return(0,a.default)(this,t),(0,p.default)(this,(t.__proto__||(0,r.default)(t)).apply(this,arguments))}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){return b.default.createElement("textarea",(0,c.default)({},(0,l.default)(this.props,"className"),{className:(0,M.default)(this.props.className,"jp-form-textarea")}),this.props.children)}}]),t}(b.default.Component)).displayName="FormTextarea",(t.FormRadio=function(e){function t(){return(0,a.default)(this,t),(0,p.default)(this,(t.__proto__||(0,r.default)(t)).apply(this,arguments))}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e=(0,l.default)(this.props,["className","type"]);return b.default.createElement("input",(0,c.default)({},e,{type:"radio",className:(0,M.default)(this.props.className,"jp-form-radio")}))}}]),t}(b.default.Component)).displayName="FormRadio";var m=t.FormButton=function(e){function t(){var e,n,o,i;(0,a.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=o=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(c))),o.getDefaultButtonAction=function(){return o.props.isSubmitting?(0,z.translate)("Saving…"):(0,z.translate)("Save Settings")},i=n,(0,p.default)(o,i)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e=(0,M.default)({"jp-form-button":!0});return b.default.createElement(f.default,(0,c.default)({},(0,l.default)(this.props,"className"),{primary:this.props.isPrimary,className:(0,M.default)(this.props.className,e)}),(0,d.default)(this.props.children)?this.getDefaultButtonAction():this.props.children)}}]),t}(b.default.Component);m.displayName="FormsButton",m.defaultProps={isSubmitting:!1,isPrimary:!0,type:"submit"},t.FormSelect=function(e){function t(){var e,n,o,i;(0,a.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=o=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(c))),o.handleOnSelect=function(e){o.props.onOptionChange({target:{type:"select",name:o.props.name,value:e.value}})},i=n,(0,p.default)(o,i)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e=[];return(0,u.default)(this.props.validValues,function(t,n){e.push({label:t,value:n})}),b.default.createElement(O.default,{options:e,onSelect:this.handleOnSelect,disabled:this.props.disabled,initialSelected:this.props.value})}}]),t}(b.default.Component)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,r=(o=n(10))&&o.__esModule?o:{default:o},a=p(n(226)),i=p(n(649));function p(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}var s=(0,r.default)({},a,i);t.default=s,e.exports=t.default},function(e,t,n){"use strict";e.exports=function(){}},function(e,t){e.exports=function(){}},function(e,t,n){"use strict";var o=n(1),r=n(2),a=n(182),i=n(12),p=n(16);n(610);var s=p({displayName:"Gridicon",mixins:[a],getDefaultProps:function(){return{className:"",size:24}},propTypes:{icon:o.string.isRequired,size:o.number,onClick:o.func,className:o.string},needsOffset:function(e,t){return["gridicons-add-outline","gridicons-add","gridicons-align-image-center","gridicons-align-image-left","gridicons-align-image-none","gridicons-align-image-right","gridicons-attachment","gridicons-backspace","gridicons-bold","gridicons-bookmark-outline","gridicons-bookmark","gridicons-calendar","gridicons-cart","gridicons-create","gridicons-custom-post-type","gridicons-external","gridicons-folder","gridicons-heading","gridicons-help-outline","gridicons-help","gridicons-history","gridicons-info-outline","gridicons-info","gridicons-italic","gridicons-layout-blocks","gridicons-link-break","gridicons-link","gridicons-list-checkmark","gridicons-list-ordered","gridicons-list-unordered","gridicons-menus","gridicons-minus","gridicons-my-sites","gridicons-notice-outline","gridicons-notice","gridicons-plans","gridicons-plus-small","gridicons-plus","gridicons-popout","gridicons-posts","gridicons-scheduled","gridicons-share-ios","gridicons-star-outline","gridicons-star","gridicons-stats","gridicons-status","gridicons-thumbs-up","gridicons-textcolor","gridicons-time","gridicons-trophy","gridicons-user-circle"].indexOf(e)>=0&&t%18==0},needsOffsetX:function(e,t){return["gridicons-arrow-down","gridicons-arrow-up","gridicons-comment","gridicons-clear-formatting","gridicons-flag","gridicons-menu","gridicons-reader","gridicons-strikethrough"].indexOf(e)>=0&&t%18==0},needsOffsetY:function(e,t){return["gridicons-align-center","gridicons-align-justify","gridicons-align-left","gridicons-align-right","gridicons-arrow-left","gridicons-arrow-right","gridicons-house","gridicons-indent-left","gridicons-indent-right","gridicons-minus-small","gridicons-print","gridicons-sign-out","gridicons-stats-alt","gridicons-trash","gridicons-underline","gridicons-video-camera"].indexOf(e)>=0&&t%18==0},render:function(){var e="gridicons-"+this.props.icon,t=this.needsOffset(e,this.props.size),n=this.needsOffsetX(e,this.props.size),o=this.needsOffsetY(e,this.props.size),a=i("gridicon",e,this.props.className,{"needs-offset":t,"needs-offset-x":n,"needs-offset-y":o}),p=void 0;switch(e){default:p=r.createElement("svg",{height:this.props.size,width:this.props.size});break;case"gridicons-add-image":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M23 4v2h-3v3h-2V6h-3V4h3V1h2v3h3zm-8.5 7c.828 0 1.5-.672 1.5-1.5S15.328 8 14.5 8 13 8.672 13 9.5s.672 1.5 1.5 1.5zm3.5 3.234l-.513-.57c-.794-.885-2.18-.885-2.976 0l-.655.73L9 9l-3 3.333V6h7V4H6c-1.105 0-2 .895-2 2v12c0 1.105.895 2 2 2h12c1.105 0 2-.895 2-2v-7h-2v3.234z"})));break;case"gridicons-add-outline":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M12 4c4.41 0 8 3.59 8 8s-3.59 8-8 8-8-3.59-8-8 3.59-8 8-8m0-2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm5 9h-4V7h-2v4H7v2h4v4h2v-4h4v-2z"})));break;case"gridicons-add":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm5 11h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"})));break;case"gridicons-align-center":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M4 19h16v-2H4v2zm13-6H7v2h10v-2zM4 9v2h16V9H4zm13-4H7v2h10V5z"})));break;case"gridicons-align-image-center":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M3 5h18v2H3V5zm0 14h18v-2H3v2zm5-4h8V9H8v6z"})));break;case"gridicons-align-image-left":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M3 5h18v2H3V5zm0 14h18v-2H3v2zm0-4h8V9H3v6zm10 0h8v-2h-8v2zm0-4h8V9h-8v2z"})));break;case"gridicons-align-image-none":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M21 7H3V5h18v2zm0 10H3v2h18v-2zM11 9H3v6h8V9z"})));break;case"gridicons-align-image-right":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M21 7H3V5h18v2zm0 10H3v2h18v-2zm0-8h-8v6h8V9zm-10 4H3v2h8v-2zm0-4H3v2h8V9z"})));break;case"gridicons-align-justify":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M4 19h16v-2H4v2zm16-6H4v2h16v-2zM4 9v2h16V9H4zm16-4H4v2h16V5z"})));break;case"gridicons-align-left":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M4 19h16v-2H4v2zm10-6H4v2h10v-2zM4 9v2h16V9H4zm10-4H4v2h10V5z"})));break;case"gridicons-align-right":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M20 17H4v2h16v-2zm-10-2h10v-2H10v2zM4 9v2h16V9H4zm6-2h10V5H10v2z"})));break;case"gridicons-arrow-down":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M11 4v12.17l-5.59-5.59L4 12l8 8 8-8-1.41-1.41L13 16.17V4h-2z"})));break;case"gridicons-arrow-left":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"})));break;case"gridicons-arrow-right":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8-8-8z"})));break;case"gridicons-arrow-up":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M13 20V7.83l5.59 5.59L20 12l-8-8-8 8 1.41 1.41L11 7.83V20h2z"})));break;case"gridicons-aside":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M14 20l6-6V6c0-1.105-.895-2-2-2H6c-1.105 0-2 .895-2 2v12c0 1.105.895 2 2 2h8zM6 6h12v6h-4c-1.105 0-2 .895-2 2v4H6V6zm10 4H8V8h8v2z"})));break;case"gridicons-attachment":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M14 1c-2.762 0-5 2.238-5 5v10c0 1.657 1.343 3 3 3s2.99-1.343 2.99-3V6H13v10c0 .553-.447 1-1 1-.553 0-1-.447-1-1V6c0-1.657 1.343-3 3-3s3 1.343 3 3v10.125C17 18.887 14.762 21 12 21s-5-2.238-5-5v-5H5v5c0 3.866 3.134 7 7 7s6.99-3.134 6.99-7V6c0-2.762-2.228-5-4.99-5z"})));break;case"gridicons-audio":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M8 4v10.184C7.686 14.072 7.353 14 7 14c-1.657 0-3 1.343-3 3s1.343 3 3 3 3-1.343 3-3V7h7v4.184c-.314-.112-.647-.184-1-.184-1.657 0-3 1.343-3 3s1.343 3 3 3 3-1.343 3-3V4H8z"})));break;case"gridicons-backspace":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M19 7H8l-5 5 5 5h11c1.104 0 2-.896 2-2V9c0-1.104-.896-2-2-2zm-.647 6.646l-.707.707L16 12.707l-1.647 1.647-.707-.707L15.293 12l-1.647-1.646.707-.707L16 11.293l1.646-1.647.707.707L16.707 12l1.646 1.646z"})));break;case"gridicons-bell":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M6.14 14.97l2.828 2.827c-.362.362-.862.586-1.414.586-1.105 0-2-.895-2-2 0-.552.224-1.052.586-1.414zm8.867 5.324L14.3 21 3 9.7l.706-.707 1.102.157c.754.108 1.69-.122 2.077-.51l3.885-3.884c2.34-2.34 6.135-2.34 8.475 0s2.34 6.135 0 8.475l-3.885 3.886c-.388.388-.618 1.323-.51 2.077l.157 1.1z"})));break;case"gridicons-block":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zM4 12c0-4.418 3.582-8 8-8 1.848 0 3.545.633 4.9 1.686L5.686 16.9C4.633 15.545 4 13.848 4 12zm8 8c-1.848 0-3.546-.633-4.9-1.686L18.314 7.1C19.367 8.455 20 10.152 20 12c0 4.418-3.582 8-8 8z"})));break;case"gridicons-bold":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M7 5.01h4.547c2.126 0 3.67.302 4.632.906.96.605 1.44 1.567 1.44 2.887 0 .896-.21 1.63-.63 2.205-.42.574-.98.92-1.678 1.036v.103c.95.212 1.637.608 2.057 1.19.42.58.63 1.35.63 2.315 0 1.367-.494 2.434-1.482 3.2-.99.765-2.332 1.148-4.027 1.148H7V5.01zm3 5.936h2.027c.862 0 1.486-.133 1.872-.4.386-.267.578-.708.578-1.323 0-.574-.21-.986-.63-1.236-.42-.25-1.087-.374-1.996-.374H10v3.333zm0 2.523v3.905h2.253c.876 0 1.52-.167 1.94-.502.416-.335.625-.848.625-1.54 0-1.243-.89-1.864-2.668-1.864H10z"})));break;case"gridicons-book":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M4 3h2v18H4zM18 3H7v18h11c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 6h-6V8h6v1zm0-2h-6V6h6v1z"})));break;case"gridicons-bookmark-outline":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M17 5v12.554l-5-2.857-5 2.857V5h10m0-2H7c-1.105 0-2 .896-2 2v16l7-4 7 4V5c0-1.104-.896-2-2-2z"})));break;case"gridicons-bookmark":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M17 3H7c-1.105 0-2 .896-2 2v16l7-4 7 4V5c0-1.104-.896-2-2-2z"})));break;case"gridicons-briefcase":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M21 6h-4V3c0-.5-.5-1-1-1H8c-.5 0-1 .5-1 1v3H3c-.6 0-1 .4-1 1v5h20V7c0-.6-.4-1-1-1zm-6 0H9V4h6v2zM14 15h-4v-2H2v8c0 .6.4 1 1 1h18c.6 0 1-.4 1-1v-8h-8v2z"})));break;case"gridicons-calendar":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M19 4h-1V2h-2v2H8V2H6v2H5c-1.105 0-2 .896-2 2v13c0 1.104.895 2 2 2h14c1.104 0 2-.896 2-2V6c0-1.104-.896-2-2-2zm0 15H5V8h14v11z"})));break;case"gridicons-camera":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M17 12c0 1.7-1.3 3-3 3s-3-1.3-3-3 1.3-3 3-3 3 1.3 3 3zm5-5v11c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V7c0-1.1.9-2 2-2V4h4v1h2l1-2h6l1 2h2c1.1 0 2 .9 2 2zM7.5 9c0-.8-.7-1.5-1.5-1.5S4.5 8.2 4.5 9s.7 1.5 1.5 1.5S7.5 9.8 7.5 9zM19 12c0-2.8-2.2-5-5-5s-5 2.2-5 5 2.2 5 5 5 5-2.2 5-5z"})));break;case"gridicons-cart":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M9 20c0 1.1-.9 2-2 2s-1.99-.9-1.99-2S5.9 18 7 18s2 .9 2 2zm8-2c-1.1 0-1.99.9-1.99 2s.89 2 1.99 2 2-.9 2-2-.9-2-2-2zm.396-5c.937 0 1.75-.65 1.952-1.566L21 5H7V4c0-1.105-.895-2-2-2H3v2h2v11c0 1.105.895 2 2 2h12c0-1.105-.895-2-2-2H7v-2h10.396z"})));break;case"gridicons-checkmark-circle":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M11 17.768l-4.884-4.884 1.768-1.768L11 14.232l8.658-8.658C17.823 3.39 15.075 2 12 2 6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10c0-1.528-.353-2.97-.966-4.266L11 17.768z"})));break;case"gridicons-checkmark":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M9 19.414l-6.707-6.707 1.414-1.414L9 16.586 20.293 5.293l1.414 1.414"})));break;case"gridicons-chevron-down":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M20 9l-8 8-8-8 1.414-1.414L12 14.172l6.586-6.586"})));break;case"gridicons-chevron-left":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M14 20l-8-8 8-8 1.414 1.414L8.828 12l6.586 6.586"})));break;case"gridicons-chevron-right":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M10 20l8-8-8-8-1.414 1.414L15.172 12l-6.586 6.586"})));break;case"gridicons-chevron-up":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M4 15l8-8 8 8-1.414 1.414L12 9.828l-6.586 6.586"})));break;case"gridicons-clear-formatting":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M10.837 10.163l-4.6 4.6L10 4h4l.777 2.223-2.144 2.144-.627-2.092-1.17 3.888zm5.495.506L19.244 19H15.82l-1.05-3.5H11.5L5 22l-1.5-1.5 17-17L22 5l-5.668 5.67zm-2.31 2.31l-.032.03.032-.01v-.02z"})));break;case"gridicons-clipboard":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M16 18H8v-2h8v2zm0-6H8v2h8v-2zm2-9h-2v2h2v15H6V5h2V3H6c-1.105 0-2 .895-2 2v15c0 1.105.895 2 2 2h12c1.105 0 2-.895 2-2V5c0-1.105-.895-2-2-2zm-4 2V4c0-1.105-.895-2-2-2s-2 .895-2 2v1c-1.105 0-2 .895-2 2v1h8V7c0-1.105-.895-2-2-2z"})));break;case"gridicons-cloud-download":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M18 9c-.01 0-.017.002-.025.003C17.72 5.646 14.922 3 11.5 3 7.91 3 5 5.91 5 9.5c0 .524.07 1.03.186 1.52C5.123 11.015 5.064 11 5 11c-2.21 0-4 1.79-4 4 0 1.202.54 2.267 1.38 3h18.593C22.196 17.09 23 15.643 23 14c0-2.76-2.24-5-5-5zm-6 7l-4-5h3V8h2v3h3l-4 5z"})));break;case"gridicons-cloud-outline":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M11.5 5c2.336 0 4.304 1.825 4.48 4.154l.142 1.86 1.867-.012h.092C19.698 11.043 21 12.37 21 14c0 .748-.28 1.452-.783 2H3.28c-.156-.256-.28-.59-.28-1 0-1.074.85-1.953 1.915-1.998.06.007.118.012.178.015l2.66.124-.622-2.587C7.044 10.186 7 9.843 7 9.5 7 7.02 9.02 5 11.5 5m0-2C7.91 3 5 5.91 5 9.5c0 .524.07 1.03.186 1.52C5.123 11.015 5.064 11 5 11c-2.21 0-4 1.79-4 4 0 1.202.54 2.267 1.38 3h18.593C22.196 17.09 23 15.643 23 14c0-2.76-2.24-5-5-5l-.025.002C17.72 5.646 14.922 3 11.5 3z"})));break;case"gridicons-cloud-upload":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M18 9c-.01 0-.017.002-.025.003C17.72 5.646 14.922 3 11.5 3 7.91 3 5 5.91 5 9.5c0 .524.07 1.03.186 1.52C5.123 11.015 5.064 11 5 11c-2.21 0-4 1.79-4 4 0 1.202.54 2.267 1.38 3h18.593C22.196 17.09 23 15.643 23 14c0-2.76-2.24-5-5-5zm-5 4v3h-2v-3H8l4-5 4 5h-3z"})));break;case"gridicons-cloud":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M18 9c-.01 0-.017.002-.025.003C17.72 5.646 14.922 3 11.5 3 7.91 3 5 5.91 5 9.5c0 .524.07 1.03.186 1.52C5.123 11.015 5.064 11 5 11c-2.21 0-4 1.79-4 4 0 1.202.54 2.267 1.38 3h18.593C22.196 17.09 23 15.643 23 14c0-2.76-2.24-5-5-5z"})));break;case"gridicons-code":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M4.83 12l4.58 4.59L8 18l-6-6 6-6 1.41 1.41L4.83 12zm9.76 4.59L16 18l6-6-6-6-1.41 1.41L19.17 12l-4.58 4.59z"})));break;case"gridicons-cog":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M20 12c0-.568-.06-1.122-.174-1.656l1.834-1.612-2-3.464-2.322.786c-.82-.736-1.787-1.308-2.86-1.657L14 2h-4l-.48 2.396c-1.07.35-2.04.92-2.858 1.657L4.34 5.268l-2 3.464 1.834 1.612C4.06 10.878 4 11.432 4 12s.06 1.122.174 1.656L2.34 15.268l2 3.464 2.322-.786c.82.736 1.787 1.308 2.86 1.657L10 22h4l.48-2.396c1.07-.35 2.038-.92 2.858-1.657l2.322.786 2-3.464-1.834-1.613c.113-.535.174-1.09.174-1.657zm-8 4c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4z"})));break;case"gridicons-comment":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M3 6v9c0 1.105.895 2 2 2h9v5l5.325-3.804c1.05-.75 1.675-1.963 1.675-3.254V6c0-1.105-.895-2-2-2H5c-1.105 0-2 .895-2 2z"})));break;case"gridicons-computer":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M20 2H4c-1.104 0-2 .896-2 2v12c0 1.104.896 2 2 2h6v2H7v2h10v-2h-3v-2h6c1.104 0 2-.896 2-2V4c0-1.104-.896-2-2-2zm0 14H4V4h16v12z"})));break;case"gridicons-create":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M21 11v8c0 1.105-.895 2-2 2H5c-1.105 0-2-.895-2-2V5c0-1.105.895-2 2-2h8l-2 2H5v14h14v-6l2-2zM7 17h3l7.5-7.5-3-3L7 14v3zm9.94-12.94L15.5 5.5l3 3 1.44-1.44c.585-.585.585-1.535 0-2.12l-.88-.88c-.585-.585-1.535-.585-2.12 0z"})));break;case"gridicons-credit-card":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M20 4H4c-1.105 0-2 .895-2 2v12c0 1.105.895 2 2 2h16c1.105 0 2-.895 2-2V6c0-1.105-.895-2-2-2zm0 2v2H4V6h16zM4 18v-6h16v6H4zm2-4h7v2H6v-2zm9 0h3v2h-3v-2z"})));break;case"gridicons-crop":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M22 16h-4V8c0-1.105-.895-2-2-2H8V2H6v4H2v2h4v8c0 1.105.895 2 2 2h8v4h2v-4h4v-2zM8 16V8h8v8H8z"})));break;case"gridicons-cross-small":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M17.705 7.705l-1.41-1.41L12 10.59 7.705 6.295l-1.41 1.41L10.59 12l-4.295 4.295 1.41 1.41L12 13.41l4.295 4.295 1.41-1.41L13.41 12l4.295-4.295z"})));break;case"gridicons-cross":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"})));break;case"gridicons-custom-post-type":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M19 3H5c-1.105 0-2 .895-2 2v14c0 1.105.895 2 2 2h14c1.105 0 2-.895 2-2V5c0-1.105-.895-2-2-2zM6 6h5v5H6V6zm4.5 13C9.12 19 8 17.88 8 16.5S9.12 14 10.5 14s2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5zm3-6l3-5 3 5h-6z"})));break;case"gridicons-customize":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M2 6c0-1.505.78-3.08 2-4 0 .845.69 2 2 2 1.657 0 3 1.343 3 3 0 .386-.08.752-.212 1.09.74.594 1.476 1.19 2.19 1.81L8.9 11.98c-.62-.716-1.214-1.454-1.807-2.192C6.753 9.92 6.387 10 6 10c-2.21 0-4-1.79-4-4zm12.152 6.848l1.34-1.34c.607.304 1.283.492 2.008.492 2.485 0 4.5-2.015 4.5-4.5 0-.725-.188-1.4-.493-2.007L18 9l-2-2 3.507-3.507C18.9 3.188 18.225 3 17.5 3 15.015 3 13 5.015 13 7.5c0 .725.188 1.4.493 2.007L3 20l2 2 6.848-6.848c1.885 1.928 3.874 3.753 5.977 5.45l1.425 1.148 1.5-1.5-1.15-1.425c-1.695-2.103-3.52-4.092-5.448-5.977z"})));break;case"gridicons-dropdown":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M7 10l5 5 5-5"})));break;case"gridicons-ellipsis":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M7 12c0 1.104-.896 2-2 2s-2-.896-2-2 .896-2 2-2 2 .896 2 2zm12-2c-1.104 0-2 .896-2 2s.896 2 2 2 2-.896 2-2-.896-2-2-2zm-7 0c-1.104 0-2 .896-2 2s.896 2 2 2 2-.896 2-2-.896-2-2-2z"})));break;case"gridicons-external":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M19 13v6c0 1.105-.895 2-2 2H5c-1.105 0-2-.895-2-2V7c0-1.105.895-2 2-2h6v2H5v12h12v-6h2zM13 3v2h4.586l-7.793 7.793 1.414 1.414L19 6.414V11h2V3h-8z"})));break;case"gridicons-flag":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M15 6c0-1.105-.895-2-2-2H5v17h2v-7h5c0 1.105.895 2 2 2h6V6h-5z"})));break;case"gridicons-flip-horizontal":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M20 18v-5h3v-2h-3V6c0-1.105-.895-2-2-2H6c-1.105 0-2 .895-2 2v5H1v2h3v5c0 1.105.895 2 2 2h12c1.105 0 2-.895 2-2zM6 6h12v5H6V6z"})));break;case"gridicons-flip-vertical":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M18 4h-5V1h-2v3H6c-1.105 0-2 .895-2 2v12c0 1.105.895 2 2 2h5v3h2v-3h5c1.105 0 2-.895 2-2V6c0-1.105-.895-2-2-2zM6 18V6h5v12H6z"})));break;case"gridicons-folder-multiple":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M4 8c-1.105 0-2 .895-2 2v10c0 1.1.9 2 2 2h14c1.105 0 2-.895 2-2H4V8zm16 10H8c-1.105 0-2-.895-2-2V6c0-1.105.895-2 2-2h3c1.105 0 2 .895 2 2h7c1.105 0 2 .895 2 2v8c0 1.105-.895 2-2 2z"})));break;case"gridicons-folder":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M18 19H6c-1.1 0-2-.9-2-2V7c0-1.1.9-2 2-2h3c1.1 0 2 .9 2 2h7c1.1 0 2 .9 2 2v8c0 1.1-.9 2-2 2z"})));break;case"gridicons-globe":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm0 18l2-2 1-1v-2h-2v-1l-1-1H9v3l2 2v1.93c-3.94-.494-7-3.858-7-7.93l1 1h2v-2h2l3-3V6h-2L9 5v-.41C9.927 4.21 10.94 4 12 4s2.073.212 3 .59V6l-1 1v2l1 1 3.13-3.13c.752.897 1.304 1.964 1.606 3.13H18l-2 2v2l1 1h2l.286.286C18.03 18.06 15.24 20 12 20z"})));break;case"gridicons-grid":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M8 8H4V4h4v4zm6-4h-4v4h4V4zm6 0h-4v4h4V4zM8 10H4v4h4v-4zm6 0h-4v4h4v-4zm6 0h-4v4h4v-4zM8 16H4v4h4v-4zm6 0h-4v4h4v-4zm6 0h-4v4h4v-4z"})));break;case"gridicons-heading":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M18 20h-3v-6H9v6H6V5.01h3V11h6V5.01h3V20z"})));break;case"gridicons-heart-outline":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M16.5 4.5c2.206 0 4 1.794 4 4 0 4.67-5.543 8.94-8.5 11.023C9.043 17.44 3.5 13.17 3.5 8.5c0-2.206 1.794-4 4-4 1.298 0 2.522.638 3.273 1.706L12 7.953l1.227-1.746c.75-1.07 1.975-1.707 3.273-1.707m0-1.5c-1.862 0-3.505.928-4.5 2.344C11.005 3.928 9.362 3 7.5 3 4.462 3 2 5.462 2 8.5c0 5.72 6.5 10.438 10 12.85 3.5-2.412 10-7.13 10-12.85C22 5.462 19.538 3 16.5 3z"})));break;case"gridicons-heart":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M16.5 3c-1.862 0-3.505.928-4.5 2.344C11.005 3.928 9.362 3 7.5 3 4.462 3 2 5.462 2 8.5c0 5.72 6.5 10.438 10 12.85 3.5-2.412 10-7.13 10-12.85C22 5.462 19.538 3 16.5 3z"})));break;case"gridicons-help-outline":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M12 4c4.41 0 8 3.59 8 8s-3.59 8-8 8-8-3.59-8-8 3.59-8 8-8m0-2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 13h-2v2h2v-2zm-1.962-2v-.528c0-.4.082-.74.246-1.017.163-.276.454-.546.87-.808.333-.21.572-.397.717-.565.146-.168.22-.36.22-.577 0-.172-.078-.308-.234-.41-.156-.1-.358-.15-.608-.15-.62 0-1.34.22-2.168.658l-.854-1.67c1.02-.58 2.084-.872 3.194-.872.913 0 1.63.202 2.15.603.52.4.78.948.78 1.64 0 .495-.116.924-.347 1.287-.23.362-.6.705-1.11 1.03-.43.278-.7.48-.807.61-.108.13-.163.282-.163.458V13h-1.885z"})));break;case"gridicons-help":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 15h-2v-2h2v2zm2.003-6.41c-.23.36-.6.704-1.108 1.028-.43.28-.7.482-.808.61-.108.13-.163.283-.163.46V13H11.04v-.528c0-.4.08-.74.245-1.017.163-.276.454-.546.872-.808.332-.21.57-.397.716-.565.145-.168.217-.36.217-.577 0-.172-.077-.308-.233-.41-.156-.1-.358-.15-.608-.15-.62 0-1.342.22-2.17.658l-.854-1.67c1.02-.58 2.084-.872 3.194-.872.913 0 1.63.202 2.15.603.52.4.78.948.78 1.64 0 .495-.116.924-.347 1.286z"})));break;case"gridicons-history":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M2.12 13.526c.742 4.78 4.902 8.47 9.88 8.47 5.5 0 10-4.5 10-9.998S17.5 2 12 2C8.704 2 5.802 3.6 4 6V2H2.003L2 9h7V7H5.8c1.4-1.8 3.702-3 6.202-3C16.4 4 20 7.6 20 11.998s-3.6 8-8 8c-3.877 0-7.13-2.795-7.848-6.472H2.12z"}),r.createElement("path",{d:"M11.002 7v5.3l3.2 4.298 1.6-1.197-2.8-3.7V7"})));break;case"gridicons-house":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M22 9L12 1 2 9v2h2v10h5v-4c0-1.657 1.343-3 3-3s3 1.343 3 3v4h5V11h2V9z"})));break;case"gridicons-image-multiple":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M15 7.5c0-.828.672-1.5 1.5-1.5s1.5.672 1.5 1.5S17.328 9 16.5 9 15 8.328 15 7.5zM4 20h14c0 1.105-.895 2-2 2H4c-1.1 0-2-.9-2-2V8c0-1.105.895-2 2-2v14zM22 4v12c0 1.105-.895 2-2 2H8c-1.105 0-2-.895-2-2V4c0-1.105.895-2 2-2h12c1.105 0 2 .895 2 2zM8 4v6.333L11 7l4.855 5.395.656-.73c.796-.886 2.183-.886 2.977 0l.513.57V4H8z"})));break;case"gridicons-image":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M13 9.5c0-.828.672-1.5 1.5-1.5s1.5.672 1.5 1.5-.672 1.5-1.5 1.5-1.5-.672-1.5-1.5zM22 6v12c0 1.105-.895 2-2 2H4c-1.105 0-2-.895-2-2V6c0-1.105.895-2 2-2h16c1.105 0 2 .895 2 2zm-2 0H4v7.444L8 9l5.895 6.55 1.587-1.85c.798-.932 2.24-.932 3.037 0L20 15.426V6z"})));break;case"gridicons-indent-left":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M18 20h2V4h-2v16zM2 11h10.172l-2.086-2.086L11.5 7.5 16 12l-4.5 4.5-1.414-1.414L12.172 13H2v-2z"})));break;case"gridicons-indent-right":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M6 4H4v16h2V4zm16 9H11.828l2.086 2.086L12.5 16.5 8 12l4.5-4.5 1.414 1.414L11.828 11H22v2z"})));break;case"gridicons-info-outline":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M13 9h-2V7h2v2zm0 2h-2v6h2v-6zm-1-7c-4.41 0-8 3.59-8 8s3.59 8 8 8 8-3.59 8-8-3.59-8-8-8m0-2c5.523 0 10 4.477 10 10s-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2z"})));break;case"gridicons-info":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"})));break;case"gridicons-ink":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M5 15c0 3.866 3.134 7 7 7s7-3.134 7-7c0-1.387-.41-2.677-1.105-3.765h.007L12 2l-5.903 9.235h.007C5.41 12.323 5 13.613 5 15z"})));break;case"gridicons-institution":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M2 19h20v3H2zM12 2L2 6v2h20V6M17 10h3v7h-3zM10.5 10h3v7h-3zM4 10h3v7H4z"})));break;case"gridicons-italic":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M10.536 5l-.427 2h1.5L9.262 18h-1.5l-.427 2h6.128l.426-2h-1.5l2.347-11h1.5l.427-2"})));break;case"gridicons-layout-blocks":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M21 7h-2V3c0-1.105-.895-2-2-2H7c-1.105 0-2 .895-2 2v2H3c-1.105 0-2 .895-2 2v4c0 1.105.895 2 2 2h2v8c0 1.105.895 2 2 2h10c1.105 0 2-.895 2-2v-2h2c1.105 0 2-.895 2-2V9c0-1.105-.895-2-2-2zm-4 14H7v-8h2c1.105 0 2-.895 2-2V7c0-1.105-.895-2-2-2H7V3h10v4h-2c-1.105 0-2 .895-2 2v8c0 1.105.895 2 2 2h2v2zm4-4h-6V9h6v8z"})));break;case"gridicons-layout":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M8 20H5c-1.105 0-2-.895-2-2V6c0-1.105.895-2 2-2h3c1.105 0 2 .895 2 2v12c0 1.105-.895 2-2 2zm8-10h4c1.105 0 2-.895 2-2V5c0-1.105-.895-2-2-2h-4c-1.105 0-2 .895-2 2v3c0 1.105.895 2 2 2zm5 10v-6c0-1.105-.895-2-2-2h-5c-1.105 0-2 .895-2 2v6c0 1.105.895 2 2 2h5c1.105 0 2-.895 2-2z"})));break;case"gridicons-link-break":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M10 11l-2 2H7v-2h3zm9.64-3.64L22 5l-1.5-1.5-17 17L5 22l9-9h3v-2h-1l2-2c1.103 0 2 .897 2 2v2c0 1.103-.897 2-2 2h-4.977c.913 1.208 2.347 2 3.977 2h1c2.21 0 4-1.79 4-4v-2c0-1.623-.97-3.013-2.36-3.64zM4.36 16.64L6 15c-1.103 0-2-.897-2-2v-2c0-1.103.897-2 2-2h4.977C10.065 7.792 8.63 7 7 7H6c-2.21 0-4 1.79-4 4v2c0 1.623.97 3.013 2.36 3.64z"})));break;case"gridicons-link":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M17 13H7v-2h10v2zm1-6h-1c-1.63 0-3.065.792-3.977 2H18c1.103 0 2 .897 2 2v2c0 1.103-.897 2-2 2h-4.977c.913 1.208 2.347 2 3.977 2h1c2.21 0 4-1.79 4-4v-2c0-2.21-1.79-4-4-4zM2 11v2c0 2.21 1.79 4 4 4h1c1.63 0 3.065-.792 3.977-2H6c-1.103 0-2-.897-2-2v-2c0-1.103.897-2 2-2h4.977C10.065 7.792 8.63 7 7 7H6c-2.21 0-4 1.79-4 4z"})));break;case"gridicons-list-checkmark":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M9.5 15.5L5 20l-2.5-2.5 1.06-1.06L5 17.88l3.44-3.44L9.5 15.5zM10 5v2h11V5H10zm0 14h11v-2H10v2zm0-6h11v-2H10v2zM8.44 8.44L5 11.88l-1.44-1.44L2.5 11.5 5 14l4.5-4.5-1.06-1.06zm0-6L5 5.88 3.56 4.44 2.5 5.5 5 8l4.5-4.5-1.06-1.06z"})));break;case"gridicons-list-ordered":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M8 19h13v-2H8v2zm0-6h13v-2H8v2zm0-8v2h13V5H8zm-4.425.252c.107-.096.197-.188.27-.275-.013.228-.02.48-.02.756V8h1.176V3.717H3.96L2.487 4.915l.6.738.487-.4zm.334 7.764c.474-.426.784-.715.93-.867.145-.153.26-.298.35-.436.087-.138.152-.278.194-.42.042-.143.063-.298.063-.466 0-.225-.06-.427-.18-.608s-.29-.32-.507-.417c-.218-.1-.465-.148-.742-.148-.22 0-.42.022-.596.067s-.34.11-.49.195c-.15.085-.337.226-.558.423l.636.744c.174-.15.33-.264.467-.34.138-.078.274-.117.41-.117.13 0 .232.032.304.097.073.064.11.152.11.264 0 .09-.02.176-.055.258-.036.082-.1.18-.192.294-.092.114-.287.328-.586.64L2.42 13.238V14h3.11v-.955H3.91v-.03zm.53 4.746v-.018c.306-.086.54-.225.702-.414.162-.19.243-.42.243-.685 0-.31-.126-.55-.378-.727-.252-.176-.6-.264-1.043-.264-.307 0-.58.033-.816.1s-.47.178-.696.334l.48.773c.293-.183.576-.274.85-.274.147 0 .263.027.35.082s.13.14.13.252c0 .3-.294.45-.882.45h-.27v.87h.264c.217 0 .393.017.527.05.136.03.233.08.294.143.06.064.09.154.09.27 0 .153-.057.265-.173.337-.115.07-.3.106-.554.106-.164 0-.343-.022-.538-.07-.194-.044-.385-.115-.573-.21v.96c.228.088.44.148.637.182.196.033.41.05.64.05.56 0 .998-.114 1.314-.343.315-.228.473-.542.473-.94.002-.585-.356-.923-1.07-1.013z"})));break;case"gridicons-list-unordered":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M9 19h12v-2H9v2zm0-6h12v-2H9v2zm0-8v2h12V5H9zm-4-.5c-.828 0-1.5.672-1.5 1.5S4.172 7.5 5 7.5 6.5 6.828 6.5 6 5.828 4.5 5 4.5zm0 6c-.828 0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5 1.5-.672 1.5-1.5-.672-1.5-1.5-1.5zm0 6c-.828 0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5 1.5-.672 1.5-1.5-.672-1.5-1.5-1.5z"})));break;case"gridicons-location":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M19 9c0-3.866-3.134-7-7-7S5 5.134 5 9c0 1.387.41 2.677 1.105 3.765h-.008C8.457 16.46 12 22 12 22l5.903-9.235h-.007C18.59 11.677 19 10.387 19 9zm-7 3c-1.657 0-3-1.343-3-3s1.343-3 3-3 3 1.343 3 3-1.343 3-3 3z"})));break;case"gridicons-lock":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M18 8h-1V7c0-2.757-2.243-5-5-5S7 4.243 7 7v1H6c-1.105 0-2 .895-2 2v10c0 1.105.895 2 2 2h12c1.105 0 2-.895 2-2V10c0-1.105-.895-2-2-2zM9 7c0-1.654 1.346-3 3-3s3 1.346 3 3v1H9V7zm4 8.723V18h-2v-2.277c-.595-.346-1-.984-1-1.723 0-1.105.895-2 2-2s2 .895 2 2c0 .738-.405 1.376-1 1.723z"})));break;case"gridicons-mail":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M20 4H4c-1.105 0-2 .895-2 2v12c0 1.105.895 2 2 2h16c1.105 0 2-.895 2-2V6c0-1.105-.895-2-2-2zm0 4.236l-8 4.882-8-4.882V6h16v2.236z"})));break;case"gridicons-mention":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10v-2c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8v.5c0 .827-.673 1.5-1.5 1.5s-1.5-.673-1.5-1.5V12c0-2.76-2.24-5-5-5s-5 2.24-5 5 2.24 5 5 5c1.65 0 3.102-.81 4.013-2.043C16.648 15.6 17.527 16 18.5 16c1.93 0 3.5-1.57 3.5-3.5V12c0-5.523-4.477-10-10-10zm0 13c-1.654 0-3-1.346-3-3s1.346-3 3-3 3 1.346 3 3-1.346 3-3 3z"})));break;case"gridicons-menu":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M21 6v2H3V6h18zM3 18h18v-2H3v2zm0-5h18v-2H3v2z"})));break;case"gridicons-menus":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M9 19h10v-2H9v2zm0-6h6v-2H9v2zm0-8v2h12V5H9zm-4-.5c-.828 0-1.5.672-1.5 1.5S4.172 7.5 5 7.5 6.5 6.828 6.5 6 5.828 4.5 5 4.5zm0 6c-.828 0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5 1.5-.672 1.5-1.5-.672-1.5-1.5-1.5zm0 6c-.828 0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5 1.5-.672 1.5-1.5-.672-1.5-1.5-1.5z"})));break;case"gridicons-microphone":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M12 13c1.104 0 2-.896 2-2V6c0-1.104-.896-2-2-2-1.105 0-2 .896-2 2v5c0 1.104.895 2 2 2zm4-2c0 2.21-1.79 4-4 4s-4-1.79-4-4H6c0 2.972 2.164 5.433 5 5.91V20h2v-3.09c2.836-.478 5-2.94 5-5.91h-2z"})));break;case"gridicons-minus-small":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M6 11h12v2H6z"})));break;case"gridicons-minus":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M3 11h18v2H3z"})));break;case"gridicons-my-sites-horizon":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M10.986 13.928l.762-2.284-1.324-3.63c-.458-.026-.892-.08-.892-.08-.458-.027-.405-.727.054-.7 0 0 1.403.107 2.24.107.888 0 2.265-.107 2.265-.107.46-.027.513.646.055.7 0 0-.46.055-.973.082l2.006 5.966c-.875-.034-1.74-.053-2.6-.06l-.428-1.177-.403 1.17c-.252.002-.508.01-.76.015zm-7.156.393c-.21-.737-.33-1.514-.33-2.32 0-1.232.264-2.402.736-3.46l2.036 5.58c.85-.06 1.69-.104 2.526-.138L6.792 8.015c.512-.027.973-.08.973-.08.458-.055.404-.728-.055-.702 0 0-1.376.108-2.265.108-.16 0-.347-.003-.547-.01C6.418 5.025 9.03 3.5 12 3.5c2.213 0 4.228.846 5.74 2.232-.036-.002-.072-.007-.11-.007-.835 0-1.427.727-1.427 1.51 0 .7.404 1.292.835 1.993.323.566.7 1.293.7 2.344 0 .674-.244 1.463-.572 2.51.3.02.604.043.907.066l.798-2.307c.486-1.212.647-2.18.647-3.043 0-.313-.02-.603-.057-.874.662 1.21 1.04 2.6 1.04 4.077 0 .807-.128 1.58-.34 2.32.5.05 1.006.112 1.51.17.205-.798.33-1.628.33-2.49 0-5.523-4.477-10-10-10S2 6.477 2 12c0 .862.125 1.692.33 2.49.5-.057 1.003-.12 1.5-.17zm14.638 3.168C16.676 19.672 14.118 20.5 12 20.5c-1.876 0-4.55-.697-6.463-3.012-.585.048-1.174.1-1.77.16C5.572 20.272 8.578 22 12 22c3.422 0 6.43-1.73 8.232-4.35-.593-.063-1.18-.114-1.764-.162zM12 15.01c-3.715 0-7.368.266-10.958.733.18.41.35.825.506 1.247 3.427-.43 6.91-.68 10.452-.68s7.025.25 10.452.68c.156-.422.327-.836.506-1.246-3.59-.467-7.243-.734-10.958-.734z"})));break;case"gridicons-my-sites":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zM3.5 12c0-1.232.264-2.402.736-3.46L8.29 19.65C5.456 18.272 3.5 15.365 3.5 12zm8.5 8.5c-.834 0-1.64-.12-2.4-.345l2.55-7.41 2.613 7.157c.017.042.038.08.06.117-.884.31-1.833.48-2.823.48zm1.172-12.485c.512-.027.973-.08.973-.08.458-.055.404-.728-.054-.702 0 0-1.376.108-2.265.108-.835 0-2.24-.107-2.24-.107-.458-.026-.51.674-.053.7 0 0 .434.055.892.082l1.324 3.63-1.86 5.578-3.096-9.208c.512-.027.973-.08.973-.08.458-.055.403-.728-.055-.702 0 0-1.376.108-2.265.108-.16 0-.347-.003-.547-.01C6.418 5.025 9.03 3.5 12 3.5c2.213 0 4.228.846 5.74 2.232-.037-.002-.072-.007-.11-.007-.835 0-1.427.727-1.427 1.51 0 .7.404 1.292.835 1.993.323.566.7 1.293.7 2.344 0 .727-.28 1.572-.646 2.748l-.848 2.833-3.072-9.138zm3.1 11.332l2.597-7.506c.484-1.212.645-2.18.645-3.044 0-.313-.02-.603-.057-.874.664 1.21 1.042 2.6 1.042 4.078 0 3.136-1.7 5.874-4.227 7.347z"})));break;case"gridicons-not-visible":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M1 12s4.188-6 11-6c.947 0 1.84.12 2.678.322L8.36 12.64C8.133 12.14 8 11.586 8 11c0-.937.335-1.787.875-2.47C6.483 9.344 4.66 10.917 3.62 12c.68.707 1.696 1.62 2.98 2.398L5.15 15.85C2.498 14.13 1 12 1 12zm22 0s-4.188 6-11 6c-.946 0-1.836-.124-2.676-.323L5 22l-1.5-1.5 17-17L22 5l-3.147 3.147C21.5 9.87 23 12 23 12zm-2.615.006c-.678-.708-1.697-1.624-2.987-2.403L16 11c0 2.21-1.79 4-4 4l-.947.947c.31.03.624.053.947.053 3.978 0 6.943-2.478 8.385-3.994z"})));break;case"gridicons-notice-outline":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M12 4c4.41 0 8 3.59 8 8s-3.59 8-8 8-8-3.59-8-8 3.59-8 8-8m0-2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 13h-2v2h2v-2zm-2-2h2l.5-6h-3l.5 6z"})));break;case"gridicons-notice":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 15h-2v-2h2v2zm0-4h-2l-.5-6h3l-.5 6z"})));break;case"gridicons-pages":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M16 8H8V6h8v2zm0 2H8v2h8v-2zm4-6v12l-6 6H6c-1.105 0-2-.895-2-2V4c0-1.105.895-2 2-2h12c1.105 0 2 .895 2 2zm-2 10V4H6v16h6v-4c0-1.105.895-2 2-2h4z"})));break;case"gridicons-pencil":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M13 6l5 5-9.507 9.507c-.686-.686-.69-1.794-.012-2.485l-.002-.003c-.69.676-1.8.673-2.485-.013-.677-.677-.686-1.762-.036-2.455l-.008-.008c-.694.65-1.78.64-2.456-.036L13 6zm7.586-.414l-2.172-2.172c-.78-.78-2.047-.78-2.828 0L14 5l5 5 1.586-1.586c.78-.78.78-2.047 0-2.828zM3 18v3h3c0-1.657-1.343-3-3-3z"})));break;case"gridicons-phone":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M16 2H8c-1.104 0-2 .896-2 2v16c0 1.104.896 2 2 2h8c1.104 0 2-.896 2-2V4c0-1.104-.896-2-2-2zm-3 19h-2v-1h2v1zm3-2H8V5h8v14z"})));break;case"gridicons-plans":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2zm-1 12H6l5-10v10zm2 6V10h5l-5 10z"})));break;case"gridicons-plugins":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M16 8V3c0-.552-.448-1-1-1s-1 .448-1 1v5h-4V3c0-.552-.448-1-1-1s-1 .448-1 1v5H5v4c0 2.79 1.637 5.193 4 6.317V22h6v-3.683c2.363-1.124 4-3.527 4-6.317V8h-3z"})));break;case"gridicons-plus-small":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M18 11h-5V6h-2v5H6v2h5v5h2v-5h5"})));break;case"gridicons-plus":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M20 13h-7v7h-2v-7H4v-2h7V4h2v7h7v2z"})));break;case"gridicons-popout":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M6 7V5c0-1.105.895-2 2-2h11c1.105 0 2 .895 2 2v14c0 1.105-.895 2-2 2H8c-1.105 0-2-.895-2-2v-2h2v2h11V5H8v2H6zm5.5-.5l-1.414 1.414L13.172 11H3v2h10.172l-3.086 3.086L11.5 17.5 17 12l-5.5-5.5z"})));break;case"gridicons-posts":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M16 19H3v-2h13v2zm5-10H3v2h18V9zM3 5v2h11V5H3zm14 0v2h4V5h-4zm-6 8v2h10v-2H11zm-8 0v2h5v-2H3z"})));break;case"gridicons-print":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M9 16h6v2H9v-2zm13 1h-3v3c0 1.105-.895 2-2 2H7c-1.105 0-2-.895-2-2v-3H2V9c0-1.105.895-2 2-2h1V5c0-1.105.895-2 2-2h10c1.105 0 2 .895 2 2v2h1c1.105 0 2 .895 2 2v8zM7 7h10V5H7v2zm10 7H7v6h10v-6zm3-3.5c0-.828-.672-1.5-1.5-1.5s-1.5.672-1.5 1.5.672 1.5 1.5 1.5 1.5-.672 1.5-1.5z"})));break;case"gridicons-quote":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M11.192 15.757c0-.88-.23-1.618-.69-2.217-.326-.412-.768-.683-1.327-.812-.55-.128-1.07-.137-1.54-.028-.16-.95.1-1.956.76-3.022.66-1.065 1.515-1.867 2.558-2.403L9.373 5c-.8.396-1.56.898-2.26 1.505-.71.607-1.34 1.305-1.9 2.094s-.98 1.68-1.25 2.69-.346 2.04-.217 3.1c.168 1.4.62 2.52 1.356 3.35.735.84 1.652 1.26 2.748 1.26.965 0 1.766-.29 2.4-.878.628-.576.94-1.365.94-2.368l.002.003zm9.124 0c0-.88-.23-1.618-.69-2.217-.326-.42-.77-.692-1.327-.817-.56-.124-1.074-.13-1.54-.022-.16-.94.09-1.95.75-3.02.66-1.06 1.514-1.86 2.557-2.4L18.49 5c-.8.396-1.555.898-2.26 1.505-.708.607-1.34 1.305-1.894 2.094-.556.79-.97 1.68-1.24 2.69-.273 1-.345 2.04-.217 3.1.165 1.4.615 2.52 1.35 3.35.732.833 1.646 1.25 2.742 1.25.967 0 1.768-.29 2.402-.876.627-.576.942-1.365.942-2.368v.01z"})));break;case"gridicons-reader":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M3 4v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V4H3zm7 11H5v-1h5v1zm2-2H5v-1h7v1zm0-2H5v-1h7v1zm7 4h-5v-5h5v5zm0-7H5V6h14v2z"})));break;case"gridicons-reader-following":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M23,13.482L15.508,21L12,17.4l1.412-1.388l2.106,2.188l6.094-6.094L23,13.482z M15.545,15.344L20,10.889V2H2v14c0,1.1,0.9,2,2,2h4.538l4.913-4.832L15.545,15.344z M8,13H4v-1h4V13z M11,11H4v-1h7V11z M11,9H4V8h7V9z M18,6H4V4h14V6z"})));break;case"gridicons-reblog":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M22.086 9.914L20 7.828V18c0 1.105-.895 2-2 2h-7v-2h7V7.828l-2.086 2.086L14.5 8.5 19 4l4.5 4.5-1.414 1.414zM6 16.172V6h7V4H6c-1.105 0-2 .895-2 2v10.172l-2.086-2.086L.5 15.5 5 20l4.5-4.5-1.414-1.414L6 16.172z"})));break;case"gridicons-redo":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M18 6v3.586L14.343 5.93C13.17 4.756 11.636 4.17 10.1 4.17s-3.07.585-4.242 1.757c-2.343 2.342-2.343 6.14 0 8.484l5.364 5.364 1.414-1.414L7.272 13c-1.56-1.56-1.56-4.097 0-5.657.755-.755 1.76-1.172 2.828-1.172 1.068 0 2.073.417 2.828 1.173L16.586 11H13v2h7V6h-2z"})));break;case"gridicons-refresh":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M17.91 14c-.478 2.833-2.943 5-5.91 5-3.308 0-6-2.692-6-6s2.692-6 6-6h2.172l-2.086 2.086L13.5 10.5 18 6l-4.5-4.5-1.414 1.414L14.172 5H12c-4.418 0-8 3.582-8 8s3.582 8 8 8c4.08 0 7.438-3.055 7.93-7h-2.02z"})));break;case"gridicons-reply":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M14 8H6.828l2.586-2.586L8 4 3 9l5 5 1.414-1.414L6.828 10H14c2.206 0 4 1.794 4 4s-1.794 4-4 4h-2v2h2c3.314 0 6-2.686 6-6s-2.686-6-6-6z"})));break;case"gridicons-rotate":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M18 14v6c0 1.105-.895 2-2 2H6c-1.105 0-2-.895-2-2v-6c0-1.105.895-2 2-2h10c1.105 0 2 .895 2 2zM13.914 2.914L11.828 5H14c4.418 0 8 3.582 8 8h-2c0-3.308-2.692-6-6-6h-2.172l2.086 2.086L12.5 10.5 8 6l1.414-1.414L12.5 1.5l1.414 1.414z"})));break;case"gridicons-scheduled":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M10.498 18l-3.705-3.704 1.415-1.415 2.294 2.295 5.293-5.293 1.415 1.415L10.498 18zM21 6v13c0 1.104-.896 2-2 2H5c-1.104 0-2-.896-2-2V6c0-1.104.896-2 2-2h1V2h2v2h8V2h2v2h1c1.104 0 2 .896 2 2zm-2 2H5v11h14V8z"})));break;case"gridicons-search":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M21 19l-5.154-5.154C16.574 12.742 17 11.42 17 10c0-3.866-3.134-7-7-7s-7 3.134-7 7 3.134 7 7 7c1.42 0 2.742-.426 3.846-1.154L19 21l2-2zM5 10c0-2.757 2.243-5 5-5s5 2.243 5 5-2.243 5-5 5-5-2.243-5-5z"})));break;case"gridicons-share-ios":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M17 8h2c1.105 0 2 .895 2 2v9c0 1.105-.895 2-2 2H5c-1.105 0-2-.895-2-2v-9c0-1.105.895-2 2-2h2v2H5v9h14v-9h-2V8zM6.5 5.5l1.414 1.414L11 3.828V14h2V3.828l3.086 3.086L17.5 5.5 12 0 6.5 5.5z"})));break;case"gridicons-share":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M18 16c-.788 0-1.5.31-2.034.807L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.048 4.118c-.053.223-.088.453-.088.692 0 1.657 1.343 3 3 3s3-1.343 3-3-1.343-3-3-3z"})));break;case"gridicons-sign-out":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M16 17v2c0 1.105-.895 2-2 2H5c-1.105 0-2-.895-2-2V5c0-1.105.895-2 2-2h9c1.105 0 2 .895 2 2v2h-2V5H5v14h9v-2h2zm2.5-10.5l-1.414 1.414L20.172 11H10v2h10.172l-3.086 3.086L18.5 17.5 24 12l-5.5-5.5z"})));break;case"gridicons-spam":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M17 2H7L2 7v10l5 5h10l5-5V7l-5-5zm-4 15h-2v-2h2v2zm0-4h-2l-.5-6h3l-.5 6z"})));break;case"gridicons-speaker":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M19 8v6c1.7 0 3-1.3 3-3s-1.3-3-3-3zM11 7H4c-1.1 0-2 .9-2 2v4c0 1.1.9 2 2 2h1v3c0 1.1.9 2 2 2h2v-5h2l4 4h2V3h-2l-4 4z"})));break;case"gridicons-special-character":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M12.005 7.418c-1.237 0-2.19.376-2.86 1.128s-1.005 1.812-1.005 3.18c0 1.387.226 2.513.677 3.377.45.865 1.135 1.543 2.05 2.036V20H5v-2.666h3.12c-1.04-.636-1.842-1.502-2.405-2.6-.564-1.097-.846-2.322-.846-3.676 0-1.258.29-2.363.875-3.317.585-.952 1.417-1.685 2.497-2.198s2.334-.77 3.763-.77c2.18 0 3.915.572 5.204 1.713s1.932 2.673 1.932 4.594c0 1.353-.283 2.57-.852 3.65-.567 1.08-1.38 1.947-2.44 2.603H19V20h-5.908v-2.86c.95-.493 1.65-1.18 2.102-2.062s.677-2.006.677-3.374c0-1.36-.336-2.415-1.01-3.164-.672-.747-1.624-1.122-2.855-1.122z"})));break;case"gridicons-star-outline":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M12 6.308l1.176 3.167.347.936.997.042 3.374.14-2.647 2.09-.784.62.27.963.91 3.25-2.813-1.872-.83-.553-.83.552-2.814 1.87.91-3.248.27-.962-.783-.62-2.648-2.092 3.374-.14.996-.04.347-.936L12 6.308M12 2L9.418 8.953 2 9.257l5.822 4.602L5.82 21 12 16.89 18.18 21l-2.002-7.14L22 9.256l-7.418-.305L12 2z"})));break;case"gridicons-star":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M12 2l2.582 6.953L22 9.257l-5.822 4.602L18.18 21 12 16.89 5.82 21l2.002-7.14L2 9.256l7.418-.304"})));break;case"gridicons-stats-alt":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M21 21H3v-2h18v2zM8 10H4v7h4v-7zm6-7h-4v14h4V3zm6 3h-4v11h4V6z"})));break;case"gridicons-stats":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M19 3H5c-1.105 0-2 .895-2 2v14c0 1.105.895 2 2 2h14c1.105 0 2-.895 2-2V5c0-1.105-.895-2-2-2zm0 16H5V5h14v14zM9 17H7v-5h2v5zm4 0h-2V7h2v10zm4 0h-2v-7h2v7z"})));break;case"gridicons-status":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M12 4c4.41 0 8 3.59 8 8s-3.59 8-8 8-8-3.59-8-8 3.59-8 8-8m0-2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zM7.55 13c-.02.166-.05.33-.05.5 0 2.485 2.015 4.5 4.5 4.5s4.5-2.015 4.5-4.5c0-.17-.032-.334-.05-.5h-8.9zM10 10V8c0-.552-.448-1-1-1s-1 .448-1 1v2c0 .552.448 1 1 1s1-.448 1-1zm6 0V8c0-.552-.448-1-1-1s-1 .448-1 1v2c0 .552.448 1 1 1s1-.448 1-1z"})));break;case"gridicons-strikethrough":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M14.348 12H21v2h-4.613c.24.515.368 1.094.368 1.748 0 1.317-.474 2.355-1.423 3.114-.947.76-2.266 1.138-3.956 1.138-1.557 0-2.934-.293-4.132-.878v-2.874c.985.44 1.818.75 2.5.928.682.18 1.306.27 1.872.27.68 0 1.2-.13 1.562-.39.363-.26.545-.644.545-1.158 0-.285-.08-.54-.24-.763-.16-.222-.394-.437-.704-.643-.18-.12-.483-.287-.88-.49H3v-2H14.347zm-3.528-2c-.073-.077-.143-.155-.193-.235-.126-.202-.19-.44-.19-.713 0-.44.157-.795.47-1.068.313-.273.762-.41 1.348-.41.492 0 .993.064 1.502.19.51.127 1.153.35 1.93.67l1-2.405c-.753-.327-1.473-.58-2.16-.76-.69-.18-1.414-.27-2.173-.27-1.544 0-2.753.37-3.628 1.108-.874.738-1.312 1.753-1.312 3.044 0 .302.036.58.088.848h3.318z"})));break;case"gridicons-sync":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M23.5 13.5l-3.086 3.086L19 18l-4.5-4.5 1.414-1.414L18 14.172V12c0-3.308-2.692-6-6-6V4c4.418 0 8 3.582 8 8v2.172l2.086-2.086L23.5 13.5zM6 12V9.828l2.086 2.086L9.5 10.5 5 6 3.586 7.414.5 10.5l1.414 1.414L4 9.828V12c0 4.418 3.582 8 8 8v-2c-3.308 0-6-2.692-6-6z"})));break;case"gridicons-tablet":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M18 2H6c-1.104 0-2 .896-2 2v16c0 1.104.896 2 2 2h12c1.104 0 2-.896 2-2V4c0-1.104-.896-2-2-2zm-5 19h-2v-1h2v1zm5-2H6V5h12v14z"})));break;case"gridicons-tag":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M20 2.007h-7.087c-.53 0-1.04.21-1.414.586L2.592 11.5c-.78.78-.78 2.046 0 2.827l7.086 7.086c.78.78 2.046.78 2.827 0l8.906-8.906c.376-.374.587-.883.587-1.413V4.007c0-1.105-.895-2-2-2zM17.007 9c-1.105 0-2-.895-2-2s.895-2 2-2 2 .895 2 2-.895 2-2 2z"})));break;case"gridicons-text-color":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M3 19h18v3H3v-3zM15.82 17h3.424L14 3h-4L4.756 17H8.18l1.067-3.5h5.506L15.82 17zm-1.952-6h-3.73l1.868-5.725L13.868 11z"})));break;case"gridicons-themes":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M4 6c-1.105 0-2 .895-2 2v12c0 1.1.9 2 2 2h12c1.105 0 2-.895 2-2H4V6zm16-4H8c-1.105 0-2 .895-2 2v12c0 1.105.895 2 2 2h12c1.105 0 2-.895 2-2V4c0-1.105-.895-2-2-2zm-5 14H8V9h7v7zm5 0h-3V9h3v7zm0-9H8V4h12v3z"})));break;case"gridicons-thumbs-up":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M6.7 22H2v-9h2l2.7 9zM20 9h-6V5c0-1.657-1.343-3-3-3h-1v4L7.1 9.625c-.712.89-1.1 1.996-1.1 3.135V14l2.1 7h8.337c1.836 0 3.435-1.25 3.88-3.03l1.622-6.485C22.254 10.223 21.3 9 20 9z"})));break;case"gridicons-time":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M12 4c4.41 0 8 3.59 8 8s-3.59 8-8 8-8-3.59-8-8 3.59-8 8-8m0-2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm3.8 13.4L13 11.667V7h-2v5.333l3.2 4.266 1.6-1.2z"})));break;case"gridicons-trash":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M6.187 8h11.625l-.695 11.125C17.05 20.18 16.177 21 15.12 21H8.88c-1.057 0-1.93-.82-1.997-1.875L6.187 8zM19 5v2H5V5h3V4c0-1.105.895-2 2-2h4c1.105 0 2 .895 2 2v1h3zm-9 0h4V4h-4v1z"})));break;case"gridicons-trophy":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M18 5.062V3H6v2.062H2V8c0 2.525 1.89 4.598 4.324 4.932.7 2.058 2.485 3.61 4.676 3.978V18c0 1.105-.895 2-2 2H8v2h8v-2h-1c-1.105 0-2-.895-2-2v-1.09c2.19-.368 3.976-1.92 4.676-3.978C20.11 12.598 22 10.525 22 8V5.062h-4zM4 8v-.938h2v3.766C4.836 10.416 4 9.304 4 8zm16 0c0 1.304-.836 2.416-2 2.83V7.06h2V8z"})));break;case"gridicons-types":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M22 17c0 2.76-2.24 5-5 5s-5-2.24-5-5 2.24-5 5-5 5 2.24 5 5zM6.5 6.5h3.8L7 1 1 11h5.5V6.5zm9.5 4.085V8H8v8h2.585c.433-2.783 2.632-4.982 5.415-5.415z"})));break;case"gridicons-underline":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M4 19v2h16v-2H4zM18 3v8c0 3.314-2.686 6-6 6s-6-2.686-6-6V3h3v8c0 1.654 1.346 3 3 3s3-1.346 3-3V3h3z"})));break;case"gridicons-undo":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M18.142 5.93C16.97 4.756 15.435 4.17 13.9 4.17s-3.072.586-4.244 1.757L6 9.585V6H4v7h7v-2H7.414l3.657-3.657c.756-.755 1.76-1.172 2.83-1.172 1.067 0 2.072.417 2.827 1.173 1.56 1.56 1.56 4.097 0 5.657l-5.364 5.364 1.414 1.414 5.364-5.364c2.345-2.343 2.345-6.142.002-8.485z"})));break;case"gridicons-user-circle":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm0 18.5c-4.694 0-8.5-3.806-8.5-8.5S7.306 3.5 12 3.5s8.5 3.806 8.5 8.5-3.806 8.5-8.5 8.5zm0-8c-3.038 0-5.5 1.728-5.5 3.5s2.462 3.5 5.5 3.5 5.5-1.728 5.5-3.5-2.462-3.5-5.5-3.5zm0-.5c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3z"})));break;case"gridicons-user":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M12 4c2.21 0 4 1.79 4 4s-1.79 4-4 4-4-1.79-4-4 1.79-4 4-4zm0 16s8 0 8-2c0-2.4-3.9-5-8-5s-8 2.6-8 5c0 2 8 2 8 2z"})));break;case"gridicons-video-camera":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M17 9V7c0-1.105-.895-2-2-2H4c-1.105 0-2 .895-2 2v10c0 1.105.895 2 2 2h11c1.105 0 2-.895 2-2v-2l5 4V5l-5 4z"})));break;case"gridicons-video":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M20 4v2h-2V4H6v2H4V4c-1.105 0-2 .895-2 2v12c0 1.105.895 2 2 2v-2h2v2h12v-2h2v2c1.105 0 2-.895 2-2V6c0-1.105-.895-2-2-2zM6 16H4v-3h2v3zm0-5H4V8h2v3zm4 4V9l4.5 3-4.5 3zm10 1h-2v-3h2v3zm0-5h-2V8h2v3z"})));break;case"gridicons-visible":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M12 6C5.188 6 1 12 1 12s4.188 6 11 6 11-6 11-6-4.188-6-11-6zm0 10c-3.943 0-6.926-2.484-8.38-4 1.04-1.085 2.863-2.657 5.255-3.47C8.335 9.214 8 10.064 8 11c0 2.21 1.79 4 4 4s4-1.79 4-4c0-.937-.335-1.787-.875-2.47 2.393.813 4.216 2.386 5.254 3.47-1.456 1.518-4.438 4-8.38 4z"})));break;case"gridicons-chat":p=r.createElement("svg",{className:a,height:this.props.size,width:this.props.size,onClick:this.props.onClick,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},r.createElement("g",null,r.createElement("path",{d:"M20,4h-8c-1.1,0-2,0.9-2,2v2h2c1.7,0,3,1.3,3,3v2h2v3.5l3.3-2.3c1.1-0.8,1.7-2,1.7-3.3V6C22,4.9,21.1,4,20,4z"}),r.createElement("g",null,r.createElement("path",{d:"M14,11v5c0,1.1-0.9,2-2,2H7v3.5l-3.3-2.3c-1.1-0.8-1.7-2-1.7-3.3V11c0-1.1,0.9-2,2-2h8C13.1,9,14,9.9,14,11z"}))))}return p}});e.exports=s},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,r=(o=n(10))&&o.__esModule?o:{default:o},a=p(n(412)),i=p(n(754));function p(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}var s=(0,r.default)({},a,i);t.default=s,e.exports=t.default},function(e,t,n){"use strict";(function(e){var o=n(782),r=n(783),a=n(611);function i(){return s.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function p(e,t){if(i()<t)throw new RangeError("Invalid typed array length");return s.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=s.prototype:(null===e&&(e=new s(t)),e.length=t),e}function s(e,t,n){if(!(s.TYPED_ARRAY_SUPPORT||this instanceof s))return new s(e,t,n);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return M(this,e)}return c(this,e,t,n)}function c(e,t,n,o){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?function(e,t,n,o){if(t.byteLength,n<0||t.byteLength<n)throw new RangeError("'offset' is out of bounds");if(t.byteLength<n+(o||0))throw new RangeError("'length' is out of bounds");return t=void 0===n&&void 0===o?new Uint8Array(t):void 0===o?new Uint8Array(t,n):new Uint8Array(t,n,o),s.TYPED_ARRAY_SUPPORT?(e=t).__proto__=s.prototype:e=l(e,t),e}(e,t,n,o):"string"==typeof t?function(e,t,n){if("string"==typeof n&&""!==n||(n="utf8"),!s.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var o=0|d(t,n),r=(e=p(e,o)).write(t,n);return r!==o&&(e=e.slice(0,r)),e}(e,t,n):function(e,t){if(s.isBuffer(t)){var n=0|u(t.length);return 0===(e=p(e,n)).length?e:(t.copy(e,0,0,n),e)}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||(o=t.length)!=o?p(e,0):l(e,t);if("Buffer"===t.type&&a(t.data))return l(e,t.data)}var o;throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(e,t)}function b(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function M(e,t){if(b(t),e=p(e,t<0?0:0|u(t)),!s.TYPED_ARRAY_SUPPORT)for(var n=0;n<t;++n)e[n]=0;return e}function l(e,t){var n=t.length<0?0:0|u(t.length);e=p(e,n);for(var o=0;o<n;o+=1)e[o]=255&t[o];return e}function u(e){if(e>=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|e}function d(e,t){if(s.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var o=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return x(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return H(e).length;default:if(o)return x(e).length;t=(""+t).toLowerCase(),o=!0}}function z(e,t,n){var o=e[t];e[t]=e[n],e[n]=o}function f(e,t,n,o,r){if(0===e.length)return-1;if("string"==typeof n?(o=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=r?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(r)return-1;n=e.length-1}else if(n<0){if(!r)return-1;n=0}if("string"==typeof t&&(t=s.from(t,o)),s.isBuffer(t))return 0===t.length?-1:O(e,t,n,o,r);if("number"==typeof t)return t&=255,s.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):O(e,[t],n,o,r);throw new TypeError("val must be string, number or Buffer")}function O(e,t,n,o,r){var a,i=1,p=e.length,s=t.length;if(void 0!==o&&("ucs2"===(o=String(o).toLowerCase())||"ucs-2"===o||"utf16le"===o||"utf-16le"===o)){if(e.length<2||t.length<2)return-1;i=2,p/=2,s/=2,n/=2}function c(e,t){return 1===i?e[t]:e.readUInt16BE(t*i)}if(r){var b=-1;for(a=n;a<p;a++)if(c(e,a)===c(t,-1===b?0:a-b)){if(-1===b&&(b=a),a-b+1===s)return b*i}else-1!==b&&(a-=a-b),b=-1}else for(n+s>p&&(n=p-s),a=n;a>=0;a--){for(var M=!0,l=0;l<s;l++)if(c(e,a+l)!==c(t,l)){M=!1;break}if(M)return a}return-1}function A(e,t,n,o){n=Number(n)||0;var r=e.length-n;o?(o=Number(o))>r&&(o=r):o=r;var a=t.length;if(a%2!=0)throw new TypeError("Invalid hex string");o>a/2&&(o=a/2);for(var i=0;i<o;++i){var p=parseInt(t.substr(2*i,2),16);if(isNaN(p))return i;e[n+i]=p}return i}function h(e,t,n,o){return F(x(t,e.length-n),e,n,o)}function m(e,t,n,o){return F(function(e){for(var t=[],n=0;n<e.length;++n)t.push(255&e.charCodeAt(n));return t}(t),e,n,o)}function q(e,t,n,o){return m(e,t,n,o)}function _(e,t,n,o){return F(H(t),e,n,o)}function W(e,t,n,o){return F(function(e,t){for(var n,o,r,a=[],i=0;i<e.length&&!((t-=2)<0);++i)o=(n=e.charCodeAt(i))>>8,r=n%256,a.push(r),a.push(o);return a}(t,e.length-n),e,n,o)}function g(e,t,n){return 0===t&&n===e.length?o.fromByteArray(e):o.fromByteArray(e.slice(t,n))}function v(e,t,n){n=Math.min(e.length,n);for(var o=[],r=t;r<n;){var a,i,p,s,c=e[r],b=null,M=c>239?4:c>223?3:c>191?2:1;if(r+M<=n)switch(M){case 1:c<128&&(b=c);break;case 2:128==(192&(a=e[r+1]))&&(s=(31&c)<<6|63&a)>127&&(b=s);break;case 3:a=e[r+1],i=e[r+2],128==(192&a)&&128==(192&i)&&(s=(15&c)<<12|(63&a)<<6|63&i)>2047&&(s<55296||s>57343)&&(b=s);break;case 4:a=e[r+1],i=e[r+2],p=e[r+3],128==(192&a)&&128==(192&i)&&128==(192&p)&&(s=(15&c)<<18|(63&a)<<12|(63&i)<<6|63&p)>65535&&s<1114112&&(b=s)}null===b?(b=65533,M=1):b>65535&&(b-=65536,o.push(b>>>10&1023|55296),b=56320|1023&b),o.push(b),r+=M}return function(e){var t=e.length;if(t<=y)return String.fromCharCode.apply(String,e);for(var n="",o=0;o<t;)n+=String.fromCharCode.apply(String,e.slice(o,o+=y));return n}(o)}t.Buffer=s,t.SlowBuffer=function(e){return+e!=e&&(e=0),s.alloc(+e)},t.INSPECT_MAX_BYTES=50,s.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(e){return!1}}(),t.kMaxLength=i(),s.poolSize=8192,s._augment=function(e){return e.__proto__=s.prototype,e},s.from=function(e,t,n){return c(null,e,t,n)},s.TYPED_ARRAY_SUPPORT&&(s.prototype.__proto__=Uint8Array.prototype,s.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&s[Symbol.species]===s&&Object.defineProperty(s,Symbol.species,{value:null,configurable:!0})),s.alloc=function(e,t,n){return function(e,t,n,o){return b(t),t<=0?p(e,t):void 0!==n?"string"==typeof o?p(e,t).fill(n,o):p(e,t).fill(n):p(e,t)}(null,e,t,n)},s.allocUnsafe=function(e){return M(null,e)},s.allocUnsafeSlow=function(e){return M(null,e)},s.isBuffer=function(e){return!(null==e||!e._isBuffer)},s.compare=function(e,t){if(!s.isBuffer(e)||!s.isBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var n=e.length,o=t.length,r=0,a=Math.min(n,o);r<a;++r)if(e[r]!==t[r]){n=e[r],o=t[r];break}return n<o?-1:o<n?1:0},s.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},s.concat=function(e,t){if(!a(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return s.alloc(0);var n;if(void 0===t)for(t=0,n=0;n<e.length;++n)t+=e[n].length;var o=s.allocUnsafe(t),r=0;for(n=0;n<e.length;++n){var i=e[n];if(!s.isBuffer(i))throw new TypeError('"list" argument must be an Array of Buffers');i.copy(o,r),r+=i.length}return o},s.byteLength=d,s.prototype._isBuffer=!0,s.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;t<e;t+=2)z(this,t,t+1);return this},s.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;t<e;t+=4)z(this,t,t+3),z(this,t+1,t+2);return this},s.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var t=0;t<e;t+=8)z(this,t,t+7),z(this,t+1,t+6),z(this,t+2,t+5),z(this,t+3,t+4);return this},s.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?v(this,0,e):function(e,t,n){var o=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return E(this,t,n);case"utf8":case"utf-8":return v(this,t,n);case"ascii":return L(this,t,n);case"latin1":case"binary":return R(this,t,n);case"base64":return g(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return w(this,t,n);default:if(o)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),o=!0}}.apply(this,arguments)},s.prototype.equals=function(e){if(!s.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===s.compare(this,e)},s.prototype.inspect=function(){var e="",n=t.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),"<Buffer "+e+">"},s.prototype.compare=function(e,t,n,o,r){if(!s.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===o&&(o=0),void 0===r&&(r=this.length),t<0||n>e.length||o<0||r>this.length)throw new RangeError("out of range index");if(o>=r&&t>=n)return 0;if(o>=r)return-1;if(t>=n)return 1;if(this===e)return 0;for(var a=(r>>>=0)-(o>>>=0),i=(n>>>=0)-(t>>>=0),p=Math.min(a,i),c=this.slice(o,r),b=e.slice(t,n),M=0;M<p;++M)if(c[M]!==b[M]){a=c[M],i=b[M];break}return a<i?-1:i<a?1:0},s.prototype.includes=function(e,t,n){return-1!==this.indexOf(e,t,n)},s.prototype.indexOf=function(e,t,n){return f(this,e,t,n,!0)},s.prototype.lastIndexOf=function(e,t,n){return f(this,e,t,n,!1)},s.prototype.write=function(e,t,n,o){if(void 0===t)o="utf8",n=this.length,t=0;else if(void 0===n&&"string"==typeof t)o=t,n=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t|=0,isFinite(n)?(n|=0,void 0===o&&(o="utf8")):(o=n,n=void 0)}var r=this.length-t;if((void 0===n||n>r)&&(n=r),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");o||(o="utf8");for(var a=!1;;)switch(o){case"hex":return A(this,e,t,n);case"utf8":case"utf-8":return h(this,e,t,n);case"ascii":return m(this,e,t,n);case"latin1":case"binary":return q(this,e,t,n);case"base64":return _(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return W(this,e,t,n);default:if(a)throw new TypeError("Unknown encoding: "+o);o=(""+o).toLowerCase(),a=!0}},s.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var y=4096;function L(e,t,n){var o="";n=Math.min(e.length,n);for(var r=t;r<n;++r)o+=String.fromCharCode(127&e[r]);return o}function R(e,t,n){var o="";n=Math.min(e.length,n);for(var r=t;r<n;++r)o+=String.fromCharCode(e[r]);return o}function E(e,t,n){var o=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>o)&&(n=o);for(var r="",a=t;a<n;++a)r+=P(e[a]);return r}function w(e,t,n){for(var o=e.slice(t,n),r="",a=0;a<o.length;a+=2)r+=String.fromCharCode(o[a]+256*o[a+1]);return r}function k(e,t,n){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>n)throw new RangeError("Trying to access beyond buffer length")}function B(e,t,n,o,r,a){if(!s.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>r||t<a)throw new RangeError('"value" argument is out of bounds');if(n+o>e.length)throw new RangeError("Index out of range")}function T(e,t,n,o){t<0&&(t=65535+t+1);for(var r=0,a=Math.min(e.length-n,2);r<a;++r)e[n+r]=(t&255<<8*(o?r:1-r))>>>8*(o?r:1-r)}function S(e,t,n,o){t<0&&(t=4294967295+t+1);for(var r=0,a=Math.min(e.length-n,4);r<a;++r)e[n+r]=t>>>8*(o?r:3-r)&255}function N(e,t,n,o,r,a){if(n+o>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function X(e,t,n,o,a){return a||N(e,0,n,4),r.write(e,t,n,o,23,4),n+4}function C(e,t,n,o,a){return a||N(e,0,n,8),r.write(e,t,n,o,52,8),n+8}s.prototype.slice=function(e,t){var n,o=this.length;if((e=~~e)<0?(e+=o)<0&&(e=0):e>o&&(e=o),(t=void 0===t?o:~~t)<0?(t+=o)<0&&(t=0):t>o&&(t=o),t<e&&(t=e),s.TYPED_ARRAY_SUPPORT)(n=this.subarray(e,t)).__proto__=s.prototype;else{var r=t-e;n=new s(r,void 0);for(var a=0;a<r;++a)n[a]=this[a+e]}return n},s.prototype.readUIntLE=function(e,t,n){e|=0,t|=0,n||k(e,t,this.length);for(var o=this[e],r=1,a=0;++a<t&&(r*=256);)o+=this[e+a]*r;return o},s.prototype.readUIntBE=function(e,t,n){e|=0,t|=0,n||k(e,t,this.length);for(var o=this[e+--t],r=1;t>0&&(r*=256);)o+=this[e+--t]*r;return o},s.prototype.readUInt8=function(e,t){return t||k(e,1,this.length),this[e]},s.prototype.readUInt16LE=function(e,t){return t||k(e,2,this.length),this[e]|this[e+1]<<8},s.prototype.readUInt16BE=function(e,t){return t||k(e,2,this.length),this[e]<<8|this[e+1]},s.prototype.readUInt32LE=function(e,t){return t||k(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},s.prototype.readUInt32BE=function(e,t){return t||k(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},s.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||k(e,t,this.length);for(var o=this[e],r=1,a=0;++a<t&&(r*=256);)o+=this[e+a]*r;return o>=(r*=128)&&(o-=Math.pow(2,8*t)),o},s.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||k(e,t,this.length);for(var o=t,r=1,a=this[e+--o];o>0&&(r*=256);)a+=this[e+--o]*r;return a>=(r*=128)&&(a-=Math.pow(2,8*t)),a},s.prototype.readInt8=function(e,t){return t||k(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},s.prototype.readInt16LE=function(e,t){t||k(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},s.prototype.readInt16BE=function(e,t){t||k(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},s.prototype.readInt32LE=function(e,t){return t||k(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},s.prototype.readInt32BE=function(e,t){return t||k(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},s.prototype.readFloatLE=function(e,t){return t||k(e,4,this.length),r.read(this,e,!0,23,4)},s.prototype.readFloatBE=function(e,t){return t||k(e,4,this.length),r.read(this,e,!1,23,4)},s.prototype.readDoubleLE=function(e,t){return t||k(e,8,this.length),r.read(this,e,!0,52,8)},s.prototype.readDoubleBE=function(e,t){return t||k(e,8,this.length),r.read(this,e,!1,52,8)},s.prototype.writeUIntLE=function(e,t,n,o){e=+e,t|=0,n|=0,o||B(this,e,t,n,Math.pow(2,8*n)-1,0);var r=1,a=0;for(this[t]=255&e;++a<n&&(r*=256);)this[t+a]=e/r&255;return t+n},s.prototype.writeUIntBE=function(e,t,n,o){e=+e,t|=0,n|=0,o||B(this,e,t,n,Math.pow(2,8*n)-1,0);var r=n-1,a=1;for(this[t+r]=255&e;--r>=0&&(a*=256);)this[t+r]=e/a&255;return t+n},s.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||B(this,e,t,1,255,0),s.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},s.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||B(this,e,t,2,65535,0),s.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):T(this,e,t,!0),t+2},s.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||B(this,e,t,2,65535,0),s.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):T(this,e,t,!1),t+2},s.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||B(this,e,t,4,4294967295,0),s.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):S(this,e,t,!0),t+4},s.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||B(this,e,t,4,4294967295,0),s.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):S(this,e,t,!1),t+4},s.prototype.writeIntLE=function(e,t,n,o){if(e=+e,t|=0,!o){var r=Math.pow(2,8*n-1);B(this,e,t,n,r-1,-r)}var a=0,i=1,p=0;for(this[t]=255&e;++a<n&&(i*=256);)e<0&&0===p&&0!==this[t+a-1]&&(p=1),this[t+a]=(e/i>>0)-p&255;return t+n},s.prototype.writeIntBE=function(e,t,n,o){if(e=+e,t|=0,!o){var r=Math.pow(2,8*n-1);B(this,e,t,n,r-1,-r)}var a=n-1,i=1,p=0;for(this[t+a]=255&e;--a>=0&&(i*=256);)e<0&&0===p&&0!==this[t+a+1]&&(p=1),this[t+a]=(e/i>>0)-p&255;return t+n},s.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||B(this,e,t,1,127,-128),s.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},s.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||B(this,e,t,2,32767,-32768),s.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):T(this,e,t,!0),t+2},s.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||B(this,e,t,2,32767,-32768),s.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):T(this,e,t,!1),t+2},s.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||B(this,e,t,4,2147483647,-2147483648),s.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):S(this,e,t,!0),t+4},s.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||B(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),s.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):S(this,e,t,!1),t+4},s.prototype.writeFloatLE=function(e,t,n){return X(this,e,t,!0,n)},s.prototype.writeFloatBE=function(e,t,n){return X(this,e,t,!1,n)},s.prototype.writeDoubleLE=function(e,t,n){return C(this,e,t,!0,n)},s.prototype.writeDoubleBE=function(e,t,n){return C(this,e,t,!1,n)},s.prototype.copy=function(e,t,n,o){if(n||(n=0),o||0===o||(o=this.length),t>=e.length&&(t=e.length),t||(t=0),o>0&&o<n&&(o=n),o===n)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(o<0)throw new RangeError("sourceEnd out of bounds");o>this.length&&(o=this.length),e.length-t<o-n&&(o=e.length-t+n);var r,a=o-n;if(this===e&&n<t&&t<o)for(r=a-1;r>=0;--r)e[r+t]=this[r+n];else if(a<1e3||!s.TYPED_ARRAY_SUPPORT)for(r=0;r<a;++r)e[r+t]=this[r+n];else Uint8Array.prototype.set.call(e,this.subarray(n,n+a),t);return a},s.prototype.fill=function(e,t,n,o){if("string"==typeof e){if("string"==typeof t?(o=t,t=0,n=this.length):"string"==typeof n&&(o=n,n=this.length),1===e.length){var r=e.charCodeAt(0);r<256&&(e=r)}if(void 0!==o&&"string"!=typeof o)throw new TypeError("encoding must be a string");if("string"==typeof o&&!s.isEncoding(o))throw new TypeError("Unknown encoding: "+o)}else"number"==typeof e&&(e&=255);if(t<0||this.length<t||this.length<n)throw new RangeError("Out of range index");if(n<=t)return this;var a;if(t>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(a=t;a<n;++a)this[a]=e;else{var i=s.isBuffer(e)?e:x(new s(e,o).toString()),p=i.length;for(a=0;a<n-t;++a)this[a+t]=i[a%p]}return this};var D=/[^+\/0-9A-Za-z-_]/g;function P(e){return e<16?"0"+e.toString(16):e.toString(16)}function x(e,t){var n;t=t||1/0;for(var o=e.length,r=null,a=[],i=0;i<o;++i){if((n=e.charCodeAt(i))>55295&&n<57344){if(!r){if(n>56319){(t-=3)>-1&&a.push(239,191,189);continue}if(i+1===o){(t-=3)>-1&&a.push(239,191,189);continue}r=n;continue}if(n<56320){(t-=3)>-1&&a.push(239,191,189),r=n;continue}n=65536+(r-55296<<10|n-56320)}else r&&(t-=3)>-1&&a.push(239,191,189);if(r=null,n<128){if((t-=1)<0)break;a.push(n)}else if(n<2048){if((t-=2)<0)break;a.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;a.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;a.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return a}function H(e){return o.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(D,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function F(e,t,n,o){for(var r=0;r<o&&!(r+n>=t.length||r>=e.length);++r)t[r+n]=e[r];return r}}).call(this,n(44))},function(e,t,n){"use strict";var o;t.__esModule=!0,t.createPath=t.parsePath=t.getQueryStringValueFromPath=t.stripQueryStringValueFromPath=t.addQueryStringValueToPath=void 0,(o=n(53))&&o.__esModule,t.addQueryStringValueToPath=function(e,t,n){var o=r(e),i=o.pathname,p=o.search,s=o.hash;return a({pathname:i,search:p+(-1===p.indexOf("?")?"?":"&")+t+"="+n,hash:s})},t.stripQueryStringValueFromPath=function(e,t){var n=r(e),o=n.pathname,i=n.search,p=n.hash;return a({pathname:o,search:i.replace(new RegExp("([?&])"+t+"=[a-zA-Z0-9]+(&?)"),function(e,t,n){return"?"===t?t:n}),hash:p})},t.getQueryStringValueFromPath=function(e,t){var n=r(e).search.match(new RegExp("[?&]"+t+"=([a-zA-Z0-9]+)"));return n&&n[1]};var r=t.parsePath=function(e){var t,n,o=null==(n=(t=e).match(/^(https?:)?\/\/[^\/]*/))?t:t.substring(n[0].length),r="",a="",i=o.indexOf("#");-1!==i&&(a=o.substring(i),o=o.substring(0,i));var p=o.indexOf("?");return-1!==p&&(r=o.substring(p),o=o.substring(0,p)),""===o&&(o="/"),{pathname:o,search:r,hash:a}},a=t.createPath=function(e){if(null==e||"string"==typeof e)return e;var t=e.basename,n=e.pathname,o=e.search,r=e.hash,a=(t||"")+n;return o&&"?"!==o&&(a+=o),r&&(a+=r),a}},function(e,t,n){var o=n(201),r=n(202),a=n(45);e.exports=function(e){return a(e)?o(e):r(e)}},function(e,t,n){var o=n(100);e.exports=function(e,t,n){if(o(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,o){return e.call(t,n,o)};case 3:return function(n,o,r){return e.call(t,n,o,r)}}return function(){return e.apply(t,arguments)}}},function(e,t,n){var o=n(40),r=n(92);e.exports=n(50)?function(e,t,n){return o.f(e,t,r(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var o=n(445),r=n(450);e.exports=function(e,t){var n=r(e,t);return o(n)?n:void 0}},function(e,t,n){var o=n(74),r=n(446),a=n(447),i=o?o.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?r(e):a(e)}},function(e,t,n){var o=n(128),r=n(110);e.exports=function(e,t,n,a){var i=!n;n||(n={});for(var p=-1,s=t.length;++p<s;){var c=t[p],b=a?a(n[c],e[c],c,n,e):void 0;void 0===b&&(b=e[c]),i?r(n,c,b):o(n,c,b)}return n}},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t){function n(e,t){if(!e)throw new Error(t||"Assertion failed")}e.exports=n,n.equal=function(e,t,n){if(e!=t)throw new Error(n||"Assertion failed: "+e+" != "+t)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.imagePath=window.Initial_State.pluginBaseUrl+"/images/",t.JETPACK_CONTACT_SUPPORT="https://jetpack.com/contact-support",t.JETPACK_CONTACT_BETA_SUPPORT="https://jetpack.com/contact-support/beta-group"},function(e,t,n){"use strict";t.__esModule=!0,t.locationsAreEqual=t.statesAreEqual=t.createLocation=t.createQuery=void 0;var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},a=s(n(11)),i=(s(n(53)),n(58)),p=n(87);function s(e){return e&&e.__esModule?e:{default:e}}t.createQuery=function(e){return r(Object.create(null),e)},t.createLocation=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p.POP,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,o="string"==typeof e?(0,i.parsePath)(e):e;return{pathname:o.pathname||"/",search:o.search||"",hash:o.hash||"",state:o.state,action:t,key:n}};var c=function(e){return"[object Date]"===Object.prototype.toString.call(e)},b=t.statesAreEqual=function e(t,n){if(t===n)return!0;var r=void 0===t?"undefined":o(t);if(r!==(void 0===n?"undefined":o(n)))return!1;if("function"===r&&(0,a.default)(!1),"object"===r){if(c(t)&&c(n)&&(0,a.default)(!1),!Array.isArray(t)){var i=Object.keys(t),p=Object.keys(n);return i.length===p.length&&i.every(function(o){return e(t[o],n[o])})}return Array.isArray(n)&&t.length===n.length&&t.every(function(t,o){return e(t,n[o])})}return!1};t.locationsAreEqual=function(e,t){return e.key===t.key&&e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&b(e.state,t.state)}},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,n){var o=n(172),r=n(146);e.exports=function(e){return o(r(e))}},function(e,t){var n,o,r=e.exports={};function a(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function p(e){if(n===setTimeout)return setTimeout(e,0);if((n===a||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:a}catch(e){n=a}try{o="function"==typeof clearTimeout?clearTimeout:i}catch(e){o=i}}();var s,c=[],b=!1,M=-1;function l(){b&&s&&(b=!1,s.length?c=s.concat(c):M=-1,c.length&&u())}function u(){if(!b){var e=p(l);b=!0;for(var t=c.length;t;){for(s=c,c=[];++M<t;)s&&s[M].run();M=-1,t=c.length}s=null,b=!1,function(e){if(o===clearTimeout)return clearTimeout(e);if((o===i||!o)&&clearTimeout)return o=clearTimeout,clearTimeout(e);try{o(e)}catch(t){try{return o.call(null,e)}catch(t){return o.call(this,e)}}}(e)}}function d(e,t){this.fun=e,this.array=t}function z(){}r.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];c.push(new d(e,t)),1!==c.length||b||p(u)},d.prototype.run=function(){this.fun.apply(null,this.array)},r.title="browser",r.browser=!0,r.env={},r.argv=[],r.version="",r.versions={},r.on=z,r.addListener=z,r.once=z,r.off=z,r.removeListener=z,r.removeAllListeners=z,r.emit=z,r.prependListener=z,r.prependOnceListener=z,r.listeners=function(e){return[]},r.binding=function(e){throw new Error("process.binding is not supported")},r.cwd=function(){return"/"},r.chdir=function(e){throw new Error("process.chdir is not supported")},r.umask=function(){return 0}},function(e,t,n){"use strict";var o=n(66),r=n(19);function a(e,t){return 55296==(64512&e.charCodeAt(t))&&!(t<0||t+1>=e.length)&&56320==(64512&e.charCodeAt(t+1))}function i(e){return(e>>>24|e>>>8&65280|e<<8&16711680|(255&e)<<24)>>>0}function p(e){return 1===e.length?"0"+e:e}function s(e){return 7===e.length?"0"+e:6===e.length?"00"+e:5===e.length?"000"+e:4===e.length?"0000"+e:3===e.length?"00000"+e:2===e.length?"000000"+e:1===e.length?"0000000"+e:e}t.inherits=r,t.toArray=function(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];var n=[];if("string"==typeof e)if(t){if("hex"===t)for((e=e.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(e="0"+e),r=0;r<e.length;r+=2)n.push(parseInt(e[r]+e[r+1],16))}else for(var o=0,r=0;r<e.length;r++){var i=e.charCodeAt(r);i<128?n[o++]=i:i<2048?(n[o++]=i>>6|192,n[o++]=63&i|128):a(e,r)?(i=65536+((1023&i)<<10)+(1023&e.charCodeAt(++r)),n[o++]=i>>18|240,n[o++]=i>>12&63|128,n[o++]=i>>6&63|128,n[o++]=63&i|128):(n[o++]=i>>12|224,n[o++]=i>>6&63|128,n[o++]=63&i|128)}else for(r=0;r<e.length;r++)n[r]=0|e[r];return n},t.toHex=function(e){for(var t="",n=0;n<e.length;n++)t+=p(e[n].toString(16));return t},t.htonl=i,t.toHex32=function(e,t){for(var n="",o=0;o<e.length;o++){var r=e[o];"little"===t&&(r=i(r)),n+=s(r.toString(16))}return n},t.zero2=p,t.zero8=s,t.join32=function(e,t,n,r){var a=n-t;o(a%4==0);for(var i=new Array(a/4),p=0,s=t;p<i.length;p++,s+=4){var c;c="big"===r?e[s]<<24|e[s+1]<<16|e[s+2]<<8|e[s+3]:e[s+3]<<24|e[s+2]<<16|e[s+1]<<8|e[s],i[p]=c>>>0}return i},t.split32=function(e,t){for(var n=new Array(4*e.length),o=0,r=0;o<e.length;o++,r+=4){var a=e[o];"big"===t?(n[r]=a>>>24,n[r+1]=a>>>16&255,n[r+2]=a>>>8&255,n[r+3]=255&a):(n[r+3]=a>>>24,n[r+2]=a>>>16&255,n[r+1]=a>>>8&255,n[r]=255&a)}return n},t.rotr32=function(e,t){return e>>>t|e<<32-t},t.rotl32=function(e,t){return e<<t|e>>>32-t},t.sum32=function(e,t){return e+t>>>0},t.sum32_3=function(e,t,n){return e+t+n>>>0},t.sum32_4=function(e,t,n,o){return e+t+n+o>>>0},t.sum32_5=function(e,t,n,o,r){return e+t+n+o+r>>>0},t.sum64=function(e,t,n,o){var r=e[t],a=o+e[t+1]>>>0,i=(a<o?1:0)+n+r;e[t]=i>>>0,e[t+1]=a},t.sum64_hi=function(e,t,n,o){return(t+o>>>0<t?1:0)+e+n>>>0},t.sum64_lo=function(e,t,n,o){return t+o>>>0},t.sum64_4_hi=function(e,t,n,o,r,a,i,p){var s=0,c=t;return s+=(c=c+o>>>0)<t?1:0,s+=(c=c+a>>>0)<a?1:0,e+n+r+i+(s+=(c=c+p>>>0)<p?1:0)>>>0},t.sum64_4_lo=function(e,t,n,o,r,a,i,p){return t+o+a+p>>>0},t.sum64_5_hi=function(e,t,n,o,r,a,i,p,s,c){var b=0,M=t;return b+=(M=M+o>>>0)<t?1:0,b+=(M=M+a>>>0)<a?1:0,b+=(M=M+p>>>0)<p?1:0,e+n+r+i+s+(b+=(M=M+c>>>0)<c?1:0)>>>0},t.sum64_5_lo=function(e,t,n,o,r,a,i,p,s,c){return t+o+a+p+c>>>0},t.rotr64_hi=function(e,t,n){return(t<<32-n|e>>>n)>>>0},t.rotr64_lo=function(e,t,n){return(e<<32-n|t>>>n)>>>0},t.shr64_hi=function(e,t,n){return e>>>n},t.shr64_lo=function(e,t,n){return(e<<32-n|t>>>n)>>>0}},function(e,t,n){"use strict";var o=t;o.version=n(826).version,o.utils=n(827),o.rand=n(695),o.curve=n(423),o.curves=n(832),o.ec=n(839),o.eddsa=n(843)},function(e,t,n){var o=n(36).Symbol;e.exports=o},function(e,t,n){var o=n(113);e.exports=function(e){if("string"==typeof e||o(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.warningNotice=t.infoNotice=t.errorNotice=t.successNotice=void 0,t.removeNotice=function(e){return{noticeId:e,type:a.REMOVE_NOTICE}},t.createNotice=i;var o,r=(o=n(559))&&o.__esModule?o:{default:o},a=n(214);function i(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o={noticeId:n.id||(0,r.default)(),duration:n.duration,showDismiss:"boolean"!=typeof n.showDismiss||n.showDismiss,isPersistent:n.isPersistent||!1,displayOnNextPage:n.displayOnNextPage||!1,status:e,text:t};return{type:a.NEW_NOTICE,notice:o}}t.successNotice=i.bind(null,"is-success"),t.errorNotice=i.bind(null,"is-error"),t.infoNotice=i.bind(null,"is-info"),t.warningNotice=i.bind(null,"is-warning")},function(e,t,n){var o=n(576),r=n(588),a=n(111),i=n(26),p=n(591);e.exports=function(e){return"function"==typeof e?e:null==e?a:"object"==typeof e?i(e)?r(e[0],e[1]):o(e):p(e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=c(n(10)),r=c(n(3)),a=c(n(4)),i=c(n(7)),p=c(n(5)),s=c(n(6));function c(e){return e&&e.__esModule?e:{default:e}}var b=n(2),M=n(12),l=n(85),u=n(760),d=function(e){function t(){return(0,a.default)(this,t),(0,p.default)(this,(t.__proto__||(0,r.default)(t)).apply(this,arguments))}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){return b.createElement(u,(0,o.default)({},l(this.props,"className"),{className:M(this.props.className,"is-compact")}),this.props.children)}}]),t}(b.Component);d.displayName="CompactFormToggle",t.default=d,e.exports=t.default},function(e,t,n){var o=n(26),r=n(142),a=n(460),i=n(170);e.exports=function(e,t){return o(e)?e:r(e,t)?[e]:a(i(e))}},function(e,t){e.exports=function(e,t){for(var n=-1,o=null==e?0:e.length,r=Array(o);++n<o;)r[n]=t(e[n],n,e);return r}},function(e,t){e.exports={}},function(e,t,n){var o=n(206),r=n(151);e.exports=Object.keys||function(e){return o(e,r)}},function(e,t,n){var o=n(146);e.exports=function(e){return Object(o(e))}},function(e,t,n){e.exports={default:n(517),__esModule:!0}},function(e,t,n){var o=n(80),r=n(615),a=n(629),i=n(79),p=n(64),s=n(632),c=n(418),b=n(384),M=c(function(e,t){var n={};if(null==e)return n;var c=!1;t=o(t,function(t){return t=i(t,e),c||(c=t.length>1),t}),p(e,b(e),n),c&&(n=r(n,7,s));for(var M=t.length;M--;)a(n,t[M]);return n});e.exports=M},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,r=(o=n(10))&&o.__esModule?o:{default:o},a=p(n(411)),i=p(n(756));function p(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}var s=(0,r.default)({},a,i);t.default=s,e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0,t.PUSH="PUSH",t.REPLACE="REPLACE",t.POP="POP"},function(e,t){e.exports=function(e,t){return e===t||e!=e&&t!=t}},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){"use strict";var o=n(483)(!0);n(171)(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=o(t,n),this._i+=e.length,{value:e,done:!1})})},function(e,t){e.exports=!0},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var o=n(583),r=n(144),a=n(584),i=n(585),p=n(586),s=n(63),c=n(196),b=c(o),M=c(r),l=c(a),u=c(i),d=c(p),z=s;(o&&"[object DataView]"!=z(new o(new ArrayBuffer(1)))||r&&"[object Map]"!=z(new r)||a&&"[object Promise]"!=z(a.resolve())||i&&"[object Set]"!=z(new i)||p&&"[object WeakMap]"!=z(new p))&&(z=function(e){var t=s(e),n="[object Object]"==t?e.constructor:void 0,o=n?c(n):"";if(o)switch(o){case b:return"[object DataView]";case M:return"[object Map]";case l:return"[object Promise]";case u:return"[object Set]";case d:return"[object WeakMap]"}return t}),e.exports=z},function(e,t,n){"use strict";var o={childContextTypes:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},r={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},a=Object.defineProperty,i=Object.getOwnPropertyNames,p=Object.getOwnPropertySymbols,s=Object.getOwnPropertyDescriptor,c=Object.getPrototypeOf,b=c&&c(Object);e.exports=function e(t,n,M){if("string"!=typeof n){if(b){var l=c(n);l&&l!==b&&e(t,l,M)}var u=i(n);p&&(u=u.concat(p(n)));for(var d=0;d<u.length;++d){var z=u[d];if(!(o[z]||r[z]||M&&M[z])){var f=s(n,z);try{a(t,z,f)}catch(e){}}}return t}return t}},function(e,t,n){"use strict";t.__esModule=!0,t.addEventListener=function(e,t,n){return e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent("on"+t,n)},t.removeEventListener=function(e,t,n){return e.removeEventListener?e.removeEventListener(t,n,!1):e.detachEvent("on"+t,n)},t.supportsHistory=function(){var e=window.navigator.userAgent;return(-1===e.indexOf("Android 2.")&&-1===e.indexOf("Android 4.0")||-1===e.indexOf("Mobile Safari")||-1!==e.indexOf("Chrome")||-1!==e.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history},t.supportsGoWithoutReloadUsingHash=function(){return-1===window.navigator.userAgent.indexOf("Firefox")},t.supportsPopstateOnHashchange=function(){return-1===window.navigator.userAgent.indexOf("Trident")},t.isExtraneousPopstateEvent=function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")}},function(e,t){var n=Object.prototype;e.exports=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||n)}},function(e,t,n){var o=n(456),r=n(39),a=Object.prototype,i=a.hasOwnProperty,p=a.propertyIsEnumerable,s=o(function(){return arguments}())?o:function(e){return r(e)&&i.call(e,"callee")&&!p.call(e,"callee")};e.exports=s},function(e,t,n){(function(e){var o=n(36),r=n(457),a=t&&!t.nodeType&&t,i=a&&"object"==typeof e&&e&&!e.nodeType&&e,p=i&&i.exports===a?o.Buffer:void 0,s=(p?p.isBuffer:void 0)||r;e.exports=s}).call(this,n(89)(e))},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t,n){var o=n(40).f,r=n(65),a=n(31)("toStringTag");e.exports=function(e,t,n){e&&!r(e=n?e:e.prototype,a)&&o(e,a,{configurable:!0,value:t})}},function(e,t){t.f={}.propertyIsEnumerable},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,r=(o=n(10))&&o.__esModule?o:{default:o},a=p(n(231)),i=p(n(537));function p(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}var s=(0,r.default)({},a,i);t.default=s,e.exports=t.default},function(e,t,n){(function(o){function r(){var e;try{e=t.storage.debug}catch(e){}return!e&&void 0!==o&&"env"in o&&(e=o.env.DEBUG),e}(t=e.exports=n(561)).log=function(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},t.formatArgs=function(e){var n=this.useColors;if(e[0]=(n?"%c":"")+this.namespace+(n?" %c":" ")+e[0]+(n?"%c ":" ")+"+"+t.humanize(this.diff),n){var o="color: "+this.color;e.splice(1,0,o,"color: inherit");var r=0,a=0;e[0].replace(/%[a-zA-Z%]/g,function(e){"%%"!==e&&(r++,"%c"===e&&(a=r))}),e.splice(a,0,o)}},t.save=function(e){try{null==e?t.storage.removeItem("debug"):t.storage.debug=e}catch(e){}},t.load=r,t.useColors=function(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type)||("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},t.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),t.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}},t.enable(r())}).call(this,n(71))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return function(t){13!==t.which&&32!==t.which||e(t)}},e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DashItem=void 0;var o=E(n(10)),r=E(n(47)),a=E(n(3)),i=E(n(4)),p=E(n(7)),s=E(n(5)),c=E(n(6)),b=E(n(1)),M=n(2),l=E(M),u=E(n(12)),d=n(9),z=E(n(136)),f=n(8),O=E(n(33)),A=E(n(35)),h=E(n(13)),m=n(27),q=E(n(17)),_=E(n(708)),W=E(n(712)),g=n(43),v=n(20),y=n(24),L=E(n(709)),R=n(21);function E(e){return e&&e.__esModule?e:{default:e}}var w=t.DashItem=function(e){function t(){var e,n,o,p;(0,i.default)(this,t);for(var c=arguments.length,b=Array(c),M=0;M<c;M++)b[M]=arguments[M];return n=o=(0,s.default)(this,(e=t.__proto__||(0,a.default)(t)).call.apply(e,[this].concat(b))),o.toggleModule=function(){var e=o.props,t=e.updateOptions,n=e.module,a=e.getOptionValue;t((0,r.default)({},n,!a(n)))},o.trackPaidBtnClick=function(){h.default.tracks.recordJetpackClick({target:"paid-button",feature:o.props.module,page:"aag"})},p=n,(0,s.default)(o,p)}return(0,c.default)(t,e),(0,p.default)(t,[{key:"render",value:function(){var e=void 0,t=void 0,n="",r=(0,u.default)(this.props.className,"jp-dash-item",this.props.disabled?"jp-dash-item__disabled":"");return""!==this.props.module&&(t=(0,A.default)(["monitor","protect","photon","vaultpress","scan","backups","akismet","search"],this.props.module)&&this.props.isDevMode?"":l.default.createElement(g.ModuleToggle,{slug:this.props.module,activated:this.props.getOptionValue(this.props.module),toggling:this.props.isUpdating(this.props.module),toggleModule:this.toggleModule,compact:!0}),"manage"===this.props.module&&("is-warning"===this.props.status&&(t=l.default.createElement("a",{href:this.props.isDevMode?this.props.siteAdminUrl+"update-core.php":"https://wordpress.com/plugins/manage/"+this.props.siteRawUrl},l.default.createElement(z.default,{showDismiss:!1,status:this.props.status,isCompact:!0},(0,f.translate)("Updates needed",{context:"Short warning message"})))),"is-working"===this.props.status&&(t=l.default.createElement("span",{className:"jp-dash-item__active-label"},(0,f.translate)("Active")))),"rewind"===this.props.module&&(t=null)),this.props.pro&&!this.props.isDevMode&&(n=l.default.createElement(O.default,{onClick:this.trackPaidBtnClick,compact:!0,href:"#/plans"},(0,f.translate)("Paid",{context:"Short label appearing near a paid feature configuration block."})),this.props.isModule&&(t=l.default.createElement(L.default,{proFeature:this.props.module,siteAdminUrl:this.props.siteAdminUrl}))),this.props.module&&this.props.getModule&&(e=this.props.getModule(this.props.module)),l.default.createElement("div",{className:r},l.default.createElement(_.default,{label:this.props.label,cardBadge:n},this.props.userCanToggle?t:""),l.default.createElement(q.default,{className:"jp-dash-item__card",href:this.props.href},l.default.createElement("div",{className:"jp-dash-item__content"},this.props.support.link&&l.default.createElement(W.default,(0,o.default)({module:e},this.props.support)),this.props.children)))}}]),t}(M.Component);w.propTypes={label:b.default.string,status:b.default.string,statusText:b.default.string,disabled:b.default.bool,module:b.default.string,pro:b.default.bool,isModule:b.default.bool,support:b.default.object},w.defaultProps={label:"",module:"",pro:!1,isModule:!0,support:{text:"",link:""}},t.default=(0,d.connect)(function(e){return{getModule:function(t){return(0,y.getModule)(e,t)},isDevMode:(0,v.isDevMode)(e),userCanToggle:(0,R.userCanManageModules)(e),siteRawUrl:(0,R.getSiteRawUrl)(e),siteAdminUrl:(0,R.getSiteAdminUrl)(e)}})((0,m.withModuleSettingsFormHelpers)(w))},function(e,t,n){"use strict";t.__esModule=!0;var o,r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},a=n(438),i=(o=n(137))&&o.__esModule?o:{default:o},p=n(68),s=n(58),c=function(e){return(0,a.stringify)(e).replace(/%20/g,"+")},b=a.parse;t.default=function(e){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e(t),o=t.stringifyQuery,a=t.parseQueryString;"function"!=typeof o&&(o=c),"function"!=typeof a&&(a=b);var M=function(e){return e?(null==e.query&&(e.query=a(e.search.substring(1))),e):e},l=function(e,t){if(null==t)return e;var n="string"==typeof e?(0,s.parsePath)(e):e,a=o(t);return r({},n,{search:a?"?"+a:""})};return r({},n,{getCurrentLocation:function(){return M(n.getCurrentLocation())},listenBefore:function(e){return n.listenBefore(function(t,n){return(0,i.default)(e,M(t),n)})},listen:function(e){return n.listen(function(t){return e(M(t))})},push:function(e){return n.push(l(e,e.query))},replace:function(e){return n.replace(l(e,e.query))},createPath:function(e){return n.createPath(l(e,e.query))},createHref:function(e){return n.createHref(l(e,e.query))},createLocation:function(e){for(var t=arguments.length,o=Array(t>1?t-1:0),r=1;r<t;r++)o[r-1]=arguments[r];var a=n.createLocation.apply(n,[l(e,e.query)].concat(o));return e.query&&(a.query=(0,p.createQuery)(e.query)),M(a)}})}}},function(e,t,n){"use strict";t.__esModule=!0;var o,r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},a=(o=n(137))&&o.__esModule?o:{default:o},i=n(58);t.default=function(e){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e(t),o=t.basename,p=function(e){return e?(o&&null==e.basename&&(0===e.pathname.toLowerCase().indexOf(o.toLowerCase())?(e.pathname=e.pathname.substring(o.length),e.basename=o,""===e.pathname&&(e.pathname="/")):e.basename=""),e):e},s=function(e){if(!o)return e;var t="string"==typeof e?(0,i.parsePath)(e):e,n=t.pathname,a="/"===o.slice(-1)?o:o+"/",p="/"===n.charAt(0)?n.slice(1):n;return r({},t,{pathname:a+p})};return r({},n,{getCurrentLocation:function(){return p(n.getCurrentLocation())},listenBefore:function(e){return n.listenBefore(function(t,n){return(0,a.default)(e,p(t),n)})},listen:function(e){return n.listen(function(t){return e(p(t))})},push:function(e){return n.push(s(e))},replace:function(e){return n.replace(s(e))},createPath:function(e){return n.createPath(s(e))},createHref:function(e){return n.createHref(s(e))},createLocation:function(e){for(var t=arguments.length,o=Array(t>1?t-1:0),r=1;r<t;r++)o[r-1]=arguments[r];return p(n.createLocation.apply(n,[s(e)].concat(o)))}})}}},function(e,t,n){"use strict";var o=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var o={};return"abcdefghijklmnopqrst".split("").forEach(function(e){o[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},o)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,i,p=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s<arguments.length;s++){for(var c in n=Object(arguments[s]))r.call(n,c)&&(p[c]=n[c]);if(o){i=o(n);for(var b=0;b<i.length;b++)a.call(n,i[b])&&(p[i[b]]=n[i[b]])}}return p}},function(e,t,n){var o=n(194);e.exports=function(e,t,n){"__proto__"==t&&o?o(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},function(e,t){e.exports=function(e){return e}},function(e,t){e.exports=function(e){return function(t){return e(t)}}},function(e,t,n){var o=n(63),r=n(39);e.exports=function(e){return"symbol"==typeof e||r(e)&&"[object Symbol]"==o(e)}},function(e,t,n){var o=n(62)(Object,"create");e.exports=o},function(e,t,n){var o=n(470),r=n(471),a=n(472),i=n(473),p=n(474);function s(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}s.prototype.clear=o,s.prototype.delete=r,s.prototype.get=a,s.prototype.has=i,s.prototype.set=p,e.exports=s},function(e,t,n){var o=n(88);e.exports=function(e,t){for(var n=e.length;n--;)if(o(e[n][0],t))return n;return-1}},function(e,t,n){var o=n(476);e.exports=function(e,t){var n=e.__data__;return o(t)?n["string"==typeof t?"string":"hash"]:n.map}},function(e,t){var n=0,o=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+o).toString(36))}},function(e,t,n){n(488);for(var o=n(28),r=n(61),a=n(81),i=n(31)("toStringTag"),p="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),s=0;s<p.length;s++){var c=p[s],b=o[c],M=b&&b.prototype;M&&!M[i]&&r(M,i,c),a[c]=a.Array}},function(e,t,n){var o=n(505),r=n(197)(function(e,t,n){o(e,t,n)});e.exports=r},function(e,t,n){var o=n(115),r=n(506),a=n(507),i=n(508),p=n(509),s=n(510);function c(e){var t=this.__data__=new o(e);this.size=t.size}c.prototype.clear=r,c.prototype.delete=a,c.prototype.get=i,c.prototype.has=p,c.prototype.set=s,e.exports=c},function(e,t,n){var o=n(201),r=n(515),a=n(45);e.exports=function(e){return a(e)?o(e,!0):r(e)}},function(e,t){function n(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function o(e){return"function"==typeof e}function r(e){return"object"==typeof e&&null!==e}function a(e){return void 0===e}e.exports=n,n.EventEmitter=n,n.prototype._events=void 0,n.prototype._maxListeners=void 0,n.defaultMaxListeners=10,n.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},n.prototype.emit=function(e){var t,n,i,p,s,c;if(this._events||(this._events={}),"error"===e&&(!this._events.error||r(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var b=new Error('Uncaught, unspecified "error" event. ('+t+")");throw b.context=t,b}if(a(n=this._events[e]))return!1;if(o(n))switch(arguments.length){case 1:n.call(this);break;case 2:n.call(this,arguments[1]);break;case 3:n.call(this,arguments[1],arguments[2]);break;default:p=Array.prototype.slice.call(arguments,1),n.apply(this,p)}else if(r(n))for(p=Array.prototype.slice.call(arguments,1),i=(c=n.slice()).length,s=0;s<i;s++)c[s].apply(this,p);return!0},n.prototype.addListener=function(e,t){var i;if(!o(t))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",e,o(t.listener)?t.listener:t),this._events[e]?r(this._events[e])?this._events[e].push(t):this._events[e]=[this._events[e],t]:this._events[e]=t,r(this._events[e])&&!this._events[e].warned&&(i=a(this._maxListeners)?n.defaultMaxListeners:this._maxListeners)&&i>0&&this._events[e].length>i&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},n.prototype.on=n.prototype.addListener,n.prototype.once=function(e,t){if(!o(t))throw TypeError("listener must be a function");var n=!1;function r(){this.removeListener(e,r),n||(n=!0,t.apply(this,arguments))}return r.listener=t,this.on(e,r),this},n.prototype.removeListener=function(e,t){var n,a,i,p;if(!o(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(i=(n=this._events[e]).length,a=-1,n===t||o(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(r(n)){for(p=i;p-- >0;)if(n[p]===t||n[p].listener&&n[p].listener===t){a=p;break}if(a<0)return this;1===n.length?(n.length=0,delete this._events[e]):n.splice(a,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},n.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(o(n=this._events[e]))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},n.prototype.listeners=function(e){return this._events&&this._events[e]?o(this._events[e])?[this._events[e]]:this._events[e].slice():[]},n.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(o(t))return 1;if(t)return t.length}return 0},n.listenerCount=function(e,t){return e.listenerCount(t)}},function(e,t,n){var o=n(178),r=n(575)(o);e.exports=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=d(n(3)),r=d(n(4)),a=d(n(7)),i=d(n(5)),p=d(n(6)),s=d(n(1)),c=n(2),b=n(9),M=d(n(183)),l=n(42),u=n(20);function d(e){return e&&e.__esModule?e:{default:e}}var z=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"UNSAFE_componentWillMount",value:function(){this.props.isFetchingSiteData||this.props.isDevMode||!(0,M.default)(this.props.sitePlan)||(this.props.fetchSiteData(),this.props.fetchSiteFeatures(),this.props.fetchAvailablePlans())}},{key:"render",value:function(){return null}}]),t}(c.Component);z.propTypes={isFetchingSiteData:s.default.bool,isDevMode:s.default.bool,sitePlan:s.default.object},z.defaultProps={isFetchingSiteData:!1,isDevMode:!1,sitePlan:{}},t.default=(0,b.connect)(function(e){return{isFetchingSiteData:(0,l.isFetchingSiteData)(e),isDevMode:(0,u.isDevMode)(e),sitePlan:(0,l.getSitePlan)(e)}},function(e){return{fetchSiteData:function(){return e((0,l.fetchSiteData)())},fetchSiteFeatures:function(){return e((0,l.fetchSiteFeatures)())},fetchAvailablePlans:function(){return e((0,l.fetchAvailablePlans)())}}})(z),e.exports=t.default},function(e,t,n){"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=n(723)},function(e,t,n){"use strict";t.__esModule=!0,t.canUseDOM=!("undefined"==typeof window||!window.document||!window.document.createElement)},function(e,t,n){var o=n(110),r=n(88),a=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var i=e[t];a.call(e,t)&&r(i,n)&&(void 0!==n||t in e)||o(e,t,n)}},function(e,t,n){var o=n(63),r=n(34);e.exports=function(e){if(!r(e))return!1;var t=o(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},function(e,t){var n=/^(?:0|[1-9]\d*)$/;e.exports=function(e,t){var o=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==o||"symbol"!=o&&n.test(e))&&e>-1&&e%1==0&&e<t}},function(e,t,n){var o=n(458),r=n(112),a=n(141),i=a&&a.isTypedArray,p=i?r(i):o;e.exports=p},function(e,t,n){var o=n(79),r=n(75);e.exports=function(e,t){for(var n=0,a=(t=o(t,e)).length;null!=e&&n<a;)e=e[r(t[n++])];return n&&n==a?e:void 0}},function(e,t,n){var o=n(46),r=n(485),a=n(151),i=n(149)("IE_PROTO"),p=function(){},s=function(){var e,t=n(147)("iframe"),o=a.length;for(t.style.display="none",n(207).appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),s=e.F;o--;)delete s.prototype[a[o]];return s()};e.exports=Object.create||function(e,t){var n;return null!==e?(p.prototype=o(e),n=new p,p.prototype=null,n[i]=e):n=s(),void 0===t?n:r(n,t)}},function(e,t,n){var o=n(145),r=Math.min;e.exports=function(e){return e>0?r(o(e),9007199254740991):0}},function(e,t,n){var o=n(25).Buffer,r=n(638).Transform,a=n(641).StringDecoder;function i(e){r.call(this),this.hashMode="string"==typeof e,this.hashMode?this[e]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}n(19)(i,r),i.prototype.update=function(e,t,n){"string"==typeof e&&(e=o.from(e,t));var r=this._update(e);return this.hashMode?this:(n&&(r=this._toString(r,n)),r)},i.prototype.setAutoPadding=function(){},i.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},i.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},i.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},i.prototype._transform=function(e,t,n){var o;try{this.hashMode?this._update(e):this.push(this._update(e))}catch(e){o=e}finally{n(o)}},i.prototype._flush=function(e){var t;try{this.push(this.__final())}catch(e){t=e}e(t)},i.prototype._finalOrDigest=function(e){var t=this.__final()||o.alloc(0);return e&&(t=this._toString(t,e,!0)),t},i.prototype._toString=function(e,t,n){if(this._decoder||(this._decoder=new a(t),this._encoding=t),this._encoding!==t)throw new Error("can't switch encodings");var o=this._decoder.write(e);return n&&(o+=this._decoder.end()),o},e.exports=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=d(n(3)),r=d(n(4)),a=d(n(7)),i=d(n(5)),p=d(n(6)),s=d(n(1)),c=d(n(2)),b=d(n(12)),M=d(n(54)),l=d(n(105)),u=d(n(55));function d(e){return e&&e.__esModule?e:{default:e}}n(425);var z=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.dismissTimeout=null,a.getIcon=function(){var e=void 0;switch(a.props.status){case"is-info":e="info";break;case"is-success":e="checkmark";break;case"is-error":case"is-warning":e="notice";break;default:e="info"}return e},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"componentDidMount",value:function(){this.props.duration>0&&(this.dismissTimeout=setTimeout(this.props.onDismissClick,this.props.duration))}},{key:"componentWillUnmount",value:function(){this.dismissTimeout&&clearTimeout(this.dismissTimeout)}},{key:"render",value:function(){var e=this.props,t=e.children,n=e.className,o=e.icon,r=e.isCompact,a=e.onDismissClick,i=e.showDismiss,p=void 0===i?!r:i,s=e.status,M=e.text,d=e.dismissText,z=(0,b.default)("dops-notice",s,n,{"is-compact":r,"is-dismissable":p});return c.default.createElement("div",{className:z},c.default.createElement("span",{className:"dops-notice__icon-wrapper"},c.default.createElement(u.default,{className:"dops-notice__icon",icon:o||this.getIcon(),size:24})),c.default.createElement("span",{className:"dops-notice__content"},c.default.createElement("span",{className:"dops-notice__text"},M||t)),M?t:null,p&&c.default.createElement("span",{role:"button",onKeyDown:(0,l.default)(a),tabIndex:"0",className:"dops-notice__dismiss",onClick:a},c.default.createElement(u.default,{icon:"cross",size:24}),c.default.createElement("span",{className:"dops-notice__screen-reader-text screen-reader-text"},d)))}}]),t}(c.default.Component);z.displayName="SimpleNotice",z.defaultProps={duration:0,status:null,showDismiss:!0,className:"",onDismissClick:M.default},z.propTypes={status:s.default.string,showDismiss:s.default.bool,isCompact:s.default.bool,duration:s.default.number,text:s.default.oneOfType([s.default.oneOfType([s.default.string,s.default.node]),s.default.arrayOf(s.default.oneOfType([s.default.string,s.default.node]))]),icon:s.default.string,className:s.default.string},t.default=z,e.exports=t.default},function(e,t,n){"use strict";var o;t.__esModule=!0,(o=n(53))&&o.__esModule,t.default=function(e,t,n){var o=e(t,n);e.length<2&&n(o)}},function(e,t,n){"use strict";t.__esModule=!0;var o,r=n(440),a=n(58),i=(o=n(137))&&o.__esModule?o:{default:o},p=n(87),s=n(68);t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.getCurrentLocation,n=e.getUserConfirmation,o=e.pushLocation,c=e.replaceLocation,b=e.go,M=e.keyLength,l=void 0,u=void 0,d=[],z=[],f=[],O=function(e){var t=u&&u.action===p.POP?f.indexOf(u.key):l?f.indexOf(l.key):-1;(l=e).action===p.PUSH?f=[].concat(f.slice(0,t+1),[l.key]):l.action===p.REPLACE&&(f[t]=l.key),z.forEach(function(e){return e(l)})},A=function(e){var t,M;l&&(0,s.locationsAreEqual)(l,e)||u&&(0,s.locationsAreEqual)(u,e)||(u=e,t=e,M=function(t){if(u===e)if(u=null,t){if(e.action===p.PUSH){var n=(0,a.createPath)(l);(0,a.createPath)(e)===n&&(0,s.statesAreEqual)(l.state,e.state)&&(e.action=p.REPLACE)}e.action===p.POP?O(e):e.action===p.PUSH?!1!==o(e)&&O(e):e.action===p.REPLACE&&!1!==c(e)&&O(e)}else if(l&&e.action===p.POP){var r=f.indexOf(l.key),i=f.indexOf(e.key);-1!==r&&-1!==i&&b(r-i)}},(0,r.loopAsync)(d.length,function(e,n,o){(0,i.default)(d[e],t,function(e){return null!=e?o(e):n()})},function(e){n&&"string"==typeof e?n(e,function(e){return M(!1!==e)}):M(!1!==e)}))},h=function(){return Math.random().toString(36).substr(2,M||6)},m=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:h();return(0,s.createLocation)(e,t,n)};return{getCurrentLocation:t,listenBefore:function(e){return d.push(e),function(){return d=d.filter(function(t){return t!==e})}},listen:function(e){return z.push(e),function(){return z=z.filter(function(t){return t!==e})}},transitionTo:A,push:function(e){return A(m(e,p.PUSH))},replace:function(e){return A(m(e,p.REPLACE))},go:b,goBack:function(){return b(-1)},goForward:function(){return b(1)},createKey:h,createPath:a.createPath,createHref:function(e){return(0,a.createPath)(e)},createLocation:m}}},function(e,t,n){"use strict";t.__esModule=!0,t.go=t.replaceLocation=t.pushLocation=t.startListener=t.getUserConfirmation=t.getCurrentLocation=void 0;var o=n(68),r=n(96),a=n(191),i=n(58),p=n(127).canUseDOM&&!(0,r.supportsPopstateOnHashchange)(),s=function(e){var t=e&&e.key;return(0,o.createLocation)({pathname:window.location.pathname,search:window.location.search,hash:window.location.hash,state:t?(0,a.readState)(t):void 0},void 0,t)},c=t.getCurrentLocation=function(){var e=void 0;try{e=window.history.state||{}}catch(t){e={}}return s(e)},b=(t.getUserConfirmation=function(e,t){return t(window.confirm(e))},t.startListener=function(e){var t=function(t){(0,r.isExtraneousPopstateEvent)(t)||e(s(t.state))};(0,r.addEventListener)(window,"popstate",t);var n=function(){return e(c())};return p&&(0,r.addEventListener)(window,"hashchange",n),function(){(0,r.removeEventListener)(window,"popstate",t),p&&(0,r.removeEventListener)(window,"hashchange",n)}},function(e,t){var n=e.state,o=e.key;void 0!==n&&(0,a.saveState)(o,n),t({key:o},(0,i.createPath)(e))});t.pushLocation=function(e){return b(e,function(e,t){return window.history.pushState(e,null,t)})},t.replaceLocation=function(e){return b(e,function(e,t){return window.history.replaceState(e,null,t)})},t.go=function(e){e&&window.history.go(e)}},function(e,t){e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},function(e,t,n){(function(e){var o=n(195),r=t&&!t.nodeType&&t,a=r&&"object"==typeof e&&e&&!e.nodeType&&e,i=a&&a.exports===r&&o.process,p=function(){try{return a&&a.require&&a.require("util").types||i&&i.binding&&i.binding("util")}catch(e){}}();e.exports=p}).call(this,n(89)(e))},function(e,t,n){var o=n(26),r=n(113),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,i=/^\w*$/;e.exports=function(e,t){if(o(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!r(e))||i.test(e)||!a.test(e)||null!=t&&e in Object(t)}},function(e,t,n){var o=n(463),r=n(475),a=n(477),i=n(478),p=n(479);function s(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}s.prototype.clear=o,s.prototype.delete=r,s.prototype.get=a,s.prototype.has=i,s.prototype.set=p,e.exports=s},function(e,t,n){var o=n(62)(n(36),"Map");e.exports=o},function(e,t){var n=Math.ceil,o=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?o:n)(e)}},function(e,t){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){var o=n(41),r=n(28).document,a=o(r)&&o(r.createElement);e.exports=function(e){return a?r.createElement(e):{}}},function(e,t,n){var o=n(41);e.exports=function(e,t){if(!o(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!o(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!o(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!o(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},function(e,t,n){var o=n(150)("keys"),r=n(118);e.exports=function(e){return o[e]||(o[e]=r(e))}},function(e,t,n){var o=n(18),r=n(28),a=r["__core-js_shared__"]||(r["__core-js_shared__"]={});(e.exports=function(e,t){return a[e]||(a[e]=void 0!==t?t:{})})("versions",[]).push({version:o.version,mode:n(91)?"pure":"global",copyright:"© 2018 Denis Pushkarev (zloirock.ru)"})},function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t,n){t.f=n(31)},function(e,t,n){var o=n(28),r=n(18),a=n(91),i=n(152),p=n(40).f;e.exports=function(e){var t=r.Symbol||(r.Symbol=a?{}:o.Symbol||{});"_"==e.charAt(0)||e in t||p(t,e,{value:i.f(e)})}},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t){},function(e,t,n){var o=n(93),r=n(31)("toStringTag"),a="Arguments"==o(function(){return arguments}());e.exports=function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),r))?n:a?o(t):"Object"==(i=o(t))&&"function"==typeof t.callee?"Arguments":i}},function(e,t,n){var o=n(220);e.exports=function(e){var t=new e.constructor(e.byteLength);return new o(t).set(new o(e)),t}},function(e,t,n){var o=n(203)(Object.getPrototypeOf,Object);e.exports=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.reducer=t.requests=t.initialRequestsState=t.items=void 0;var o=l(n(84)),r=l(n(47));t.isFetchingModulesList=function(e){return!!e.jetpack.modules.requests.fetchingModulesList},t.isActivatingModule=function(e,t){return!!e.jetpack.modules.requests.activating[t]},t.isDeactivatingModule=function(e,t){return!!e.jetpack.modules.requests.deactivating[t]},t.isUpdatingModuleOption=function(e,t,n){return(0,i.default)(e.jetpack.modules.requests.updatingOption,[t,n],!1)},t.getModuleOption=function(e,t,n){return(0,i.default)(e.jetpack.modules.items,[t,"options",n,"current_value"])},t.getModuleOptionValidValues=function(e,t,n){return(0,i.default)(e.jetpack.modules.items,[t,"options",n,"enum_labels"],!1)},t.getModules=f,t.getModule=function(e,t){return(0,i.default)(e.jetpack.modules.items,t,{})},t.getModulesByFeature=function(e,t){return(0,o.default)(e.jetpack.modules.items).filter(function(n){return-1!==e.jetpack.modules.items[n].feature.indexOf(t)}).map(function(t){return e.jetpack.modules.items[t]})},t.getModulesThatRequireConnection=function(e){return(0,o.default)(e.jetpack.modules.items).filter(function(t){return e.jetpack.modules.items[t].requires_connection})},t.hasAnyOfTheseModules=O,t.hasAnyPerformanceFeature=function(e){return O(e,["carousel","lazy-images","photon","photon-cdn","search","videopress"])},t.hasAnySecurityFeature=function(e){return O(e,["protect","sso","vaultpress"])||(0,M.isPluginActive)(e,"akismet/akismet.php")},t.isModuleActivated=function(e,t){return!!(0,i.default)(e.jetpack.modules.items,[t,"activated"],!1)},t.isModuleAvailable=function(e,t){return(0,s.default)((0,o.default)(e.jetpack.modules.items),t)},t.getModuleOverride=A,t.isModuleForcedActive=function(e,t){return"active"===A(e,t)},t.isModuleForcedInactive=function(e,t){return"inactive"===A(e,t)};var a=n(15),i=l(n(22)),p=l(n(23)),s=l(n(35)),c=l(n(526)),b=n(14),M=n(103);function l(e){return e&&e.__esModule?e:{default:e}}var u=t.items=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1];switch(t.type){case b.JETPACK_SET_INITIAL_STATE:return(0,p.default)({},t.initialState.getModules);case b.JETPACK_MODULES_LIST_RECEIVE:return(0,p.default)({},e,t.modules);case b.JETPACK_MODULE_ACTIVATE_SUCCESS:return(0,p.default)({},e,(0,r.default)({},t.module,(0,p.default)({},e[t.module],{activated:!0})));case b.JETPACK_MODULE_DEACTIVATE_SUCCESS:return(0,p.default)({},e,(0,r.default)({},t.module,(0,p.default)({},e[t.module],{activated:!1})));case b.JETPACK_MODULE_UPDATE_OPTIONS_SUCCESS:var n=(0,p.default)({},e[t.module]);return(0,o.default)(t.newOptionValues).forEach(function(e){n.options[e].current_value=t.newOptionValues[e]}),(0,p.default)({},e,(0,r.default)({},t.module,n));default:return e}},d=t.initialRequestsState={fetchingModulesList:!1,activating:{},deactivating:{},updatingOption:{}},z=t.requests=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:d,t=arguments[1];switch(t.type){case b.JETPACK_MODULES_LIST_FETCH:return(0,p.default)({},e,{fetchingModulesList:!0});case b.JETPACK_MODULES_LIST_FETCH_FAIL:case b.JETPACK_MODULES_LIST_RECEIVE:return(0,p.default)({},e,{fetchingModulesList:!1});case b.JETPACK_MODULE_ACTIVATE:return(0,p.default)({},e,{activating:(0,p.default)({},e.activating,(0,r.default)({},t.module,!0))});case b.JETPACK_MODULE_ACTIVATE_FAIL:case b.JETPACK_MODULE_ACTIVATE_SUCCESS:return(0,p.default)({},e,{activating:(0,p.default)({},e.activating,(0,r.default)({},t.module,!1))});case b.JETPACK_MODULE_DEACTIVATE:return(0,p.default)({},e,{deactivating:(0,p.default)({},e.deactivating,(0,r.default)({},t.module,!0))});case b.JETPACK_MODULE_DEACTIVATE_FAIL:case b.JETPACK_MODULE_DEACTIVATE_SUCCESS:return(0,p.default)({},e,{deactivating:(0,p.default)({},e.deactivating,(0,r.default)({},t.module,!1))});case b.JETPACK_MODULE_UPDATE_OPTIONS:var n=(0,p.default)({},e.updatingOption);return n[t.module]=(0,p.default)({},n[t.module]),(0,o.default)(t.newOptionValues).forEach(function(e){n[t.module][e]=!0}),(0,p.default)({},e,{updatingOption:(0,p.default)({},e.updatingOption,n)});case b.JETPACK_MODULE_UPDATE_OPTIONS_FAIL:case b.JETPACK_MODULE_UPDATE_OPTIONS_SUCCESS:var a=(0,p.default)({},e.updatingOption);return a[t.module]=(0,p.default)({},a[t.module]),(0,o.default)(t.newOptionValues).forEach(function(e){a[t.module][e]=!1}),(0,p.default)({},e,{updatingOption:(0,p.default)({},e.updatingOption,a)});default:return e}};function f(e){return e.jetpack.modules.items}function O(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=(0,o.default)(f(e));return 0<(0,c.default)(n,t).length}function A(e,t){return(0,i.default)(e.jetpack.modules.items,[t,"override"],!1)}t.reducer=(0,a.combineReducers)({items:u,requests:z})},function(e,t,n){var o=n(228),r=n(521),a=n(522);e.exports=function(e,t,n){return t==t?a(e,t,n):o(e,r,n)}},function(e,t,n){var o=n(60),r=n(211),a=n(212),i=n(46),p=n(134),s=n(174),c={},b={};(t=e.exports=function(e,t,n,M,l){var u,d,z,f,O=l?function(){return e}:s(e),A=o(n,M,t?2:1),h=0;if("function"!=typeof O)throw TypeError(e+" is not iterable!");if(a(O)){for(u=p(e.length);u>h;h++)if((f=t?A(i(d=e[h])[0],d[1]):A(e[h]))===c||f===b)return f}else for(z=O.call(e);!(d=z.next()).done;)if((f=r(z,A,d.value,t))===c||f===b)return f}).BREAK=c,t.RETURN=b},function(e,t,n){"use strict";var o=n(100);function r(e){var t,n;this.promise=new e(function(e,o){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=o}),this.resolve=o(t),this.reject=o(n)}e.exports.f=function(e){return new r(e)}},function(e,t,n){"use strict";var o=n(72),r=n(66);function a(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}t.BlockHash=a,a.prototype.update=function(e,t){if(e=o.toArray(e,t),this.pending?this.pending=this.pending.concat(e):this.pending=e,this.pendingTotal+=e.length,this.pending.length>=this._delta8){var n=(e=this.pending).length%this._delta8;this.pending=e.slice(e.length-n,e.length),0===this.pending.length&&(this.pending=null),e=o.join32(e,0,e.length-n,this.endian);for(var r=0;r<e.length;r+=this._delta32)this._update(e,r,r+this._delta32)}return this},a.prototype.digest=function(e){return this.update(this._pad()),r(null===this.pending),this._digest(e)},a.prototype._pad=function(){var e=this.pendingTotal,t=this._delta8,n=t-(e+this.padLength)%t,o=new Array(n+this.padLength);o[0]=128;for(var r=1;r<n;r++)o[r]=0;if(e<<=3,"big"===this.endian){for(var a=8;a<this.padLength;a++)o[r++]=0;o[r++]=0,o[r++]=0,o[r++]=0,o[r++]=0,o[r++]=e>>>24&255,o[r++]=e>>>16&255,o[r++]=e>>>8&255,o[r++]=255&e}else for(o[r++]=255&e,o[r++]=e>>>8&255,o[r++]=e>>>16&255,o[r++]=e>>>24&255,o[r++]=0,o[r++]=0,o[r++]=0,o[r++]=0,a=8;a<this.padLength;a++)o[r++]=0;return o}},function(e,t){e.exports=function(e,t){for(var n=-1,o=t.length,r=e.length;++n<o;)e[r+n]=t[n];return e}},function(e,t,n){var o=n(374),r=n(375),a=Object.prototype.propertyIsEnumerable,i=Object.getOwnPropertySymbols,p=i?function(e){return null==e?[]:(e=Object(e),o(i(e),function(t){return a.call(e,t)}))}:r;e.exports=p},function(e,t,n){"use strict";var o=n(420),r=Object.keys||function(e){var t=[];for(var n in e)t.push(n);return t};e.exports=M;var a=n(388);a.inherits=n(19);var i=n(675),p=n(640);a.inherits(M,i);for(var s=r(p.prototype),c=0;c<s.length;c++){var b=s[c];M.prototype[b]||(M.prototype[b]=p.prototype[b])}function M(e){if(!(this instanceof M))return new M(e);i.call(this,e),p.call(this,e),e&&!1===e.readable&&(this.readable=!1),e&&!1===e.writable&&(this.writable=!1),this.allowHalfOpen=!0,e&&!1===e.allowHalfOpen&&(this.allowHalfOpen=!1),this.once("end",l)}function l(){this.allowHalfOpen||this._writableState.ended||o.nextTick(u,this)}function u(e){e.end()}Object.defineProperty(M.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(M.prototype,"destroyed",{get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&this._readableState.destroyed&&this._writableState.destroyed},set:function(e){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=e,this._writableState.destroyed=e)}}),M.prototype._destroy=function(e,t){this.push(null),this.end(),o.nextTick(t,e)}},function(e,t,n){"use strict";(function(e,o){var r,a=n(397);r="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==e?e:o;var i=Object(a.a)(r);t.a=i}).call(this,n(44),n(435)(e))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.routerMiddleware=t.routerActions=t.goForward=t.goBack=t.go=t.replace=t.push=t.CALL_HISTORY_METHOD=t.routerReducer=t.LOCATION_CHANGE=t.syncHistoryWithStore=void 0;var o=n(192);Object.defineProperty(t,"LOCATION_CHANGE",{enumerable:!0,get:function(){return o.LOCATION_CHANGE}}),Object.defineProperty(t,"routerReducer",{enumerable:!0,get:function(){return o.routerReducer}});var r=n(193);Object.defineProperty(t,"CALL_HISTORY_METHOD",{enumerable:!0,get:function(){return r.CALL_HISTORY_METHOD}}),Object.defineProperty(t,"push",{enumerable:!0,get:function(){return r.push}}),Object.defineProperty(t,"replace",{enumerable:!0,get:function(){return r.replace}}),Object.defineProperty(t,"go",{enumerable:!0,get:function(){return r.go}}),Object.defineProperty(t,"goBack",{enumerable:!0,get:function(){return r.goBack}}),Object.defineProperty(t,"goForward",{enumerable:!0,get:function(){return r.goForward}}),Object.defineProperty(t,"routerActions",{enumerable:!0,get:function(){return r.routerActions}});var a=p(n(443)),i=p(n(444));function p(e){return e&&e.__esModule?e:{default:e}}t.syncHistoryWithStore=a.default,t.routerMiddleware=i.default},function(e,t,n){var o=n(88),r=n(45),a=n(130),i=n(34);e.exports=function(e,t,n){if(!i(n))return!1;var p=typeof t;return!!("number"==p?r(n)&&a(t,n.length):"string"==p&&t in n)&&o(n[t],e)}},function(e,t,n){var o=n(398);e.exports=function(e){return null==e?"":o(e)}},function(e,t,n){"use strict";var o=n(91),r=n(30),a=n(205),i=n(61),p=n(81),s=n(484),c=n(101),b=n(208),M=n(31)("iterator"),l=!([].keys&&"next"in[].keys()),u=function(){return this};e.exports=function(e,t,n,d,z,f,O){s(n,t,d);var A,h,m,q=function(e){if(!l&&e in v)return v[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},_=t+" Iterator",W="values"==z,g=!1,v=e.prototype,y=v[M]||v["@@iterator"]||z&&v[z],L=y||q(z),R=z?W?q("entries"):L:void 0,E="Array"==t&&v.entries||y;if(E&&(m=b(E.call(new e)))!==Object.prototype&&m.next&&(c(m,_,!0),o||"function"==typeof m[M]||i(m,M,u)),W&&y&&"values"!==y.name&&(g=!0,L=function(){return y.call(this)}),o&&!O||!l&&!g&&v[M]||i(v,M,L),p[t]=L,p[_]=u,z)if(A={values:W?L:q("values"),keys:f?L:q("keys"),entries:R},O)for(h in A)h in v||a(v,h,A[h]);else r(r.P+r.F*(l||g),t,A);return A}},function(e,t,n){var o=n(93);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==o(e)?e.split(""):Object(e)}},function(e,t,n){var o=n(118)("meta"),r=n(41),a=n(65),i=n(40).f,p=0,s=Object.isExtensible||function(){return!0},c=!n(69)(function(){return s(Object.preventExtensions({}))}),b=function(e){i(e,o,{value:{i:"O"+ ++p,w:{}}})},M=e.exports={KEY:o,NEED:!1,fastKey:function(e,t){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!a(e,o)){if(!s(e))return"F";if(!t)return"E";b(e)}return e[o].i},getWeak:function(e,t){if(!a(e,o)){if(!s(e))return!0;if(!t)return!1;b(e)}return e[o].w},onFreeze:function(e){return c&&M.NEED&&s(e)&&!a(e,o)&&b(e),e}}},function(e,t,n){var o=n(156),r=n(31)("iterator"),a=n(81);e.exports=n(18).getIteratorMethod=function(e){if(null!=e)return e[r]||e["@@iterator"]||a[o(e)]}},function(e,t,n){var o=n(30),r=n(18),a=n(69);e.exports=function(e,t){var n=(r.Object||{})[e]||Object[e],i={};i[e]=t(n),o(o.S+o.F*a(function(){n(1)}),"Object",i)}},function(e,t,n){var o=n(523);e.exports=function(e){var t=o(e),n=t%1;return t==t?n?t-n:t:0}},function(e,t,n){var o=n(369),r=n(124),a=n(406),i=n(26);e.exports=function(e,t){return(i(e)?o:r)(e,a(t))}},function(e,t,n){var o=n(217),r=n(59);e.exports=function(e,t){return e&&o(e,t,r)}},function(e,t,n){var o=n(370),r=n(77),a=n(593),i=n(26),p=n(169);e.exports=function(e,t,n){var s=i(e)?o:a;return n&&p(e,t,n)&&(t=void 0),s(e,r(t,3))}},function(e,t,n){var o=n(578),r=n(39);e.exports=function e(t,n,a,i,p){return t===n||(null==t||null==n||!r(t)&&!r(n)?t!=t&&n!=n:o(t,n,a,i,e,p))}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.reducer=t.requests=t.initialRequestsState=t.data=void 0,t.isFetchingSiteData=function(e){return!!(e.jetpack.siteData.requests.isFetchingSiteData&&e.jetpack.siteData.requests.isFetchingSiteFeatures&&e.jetpack.siteData.requests.isFetchingSitePlans)},t.getSitePlan=function(e){return(0,r.default)(e.jetpack.siteData,["data","plan"],{})},t.getAvailableFeatures=function(e){return(0,r.default)(e.jetpack.siteData,["data","site","features","available"],{})},t.getActiveFeatures=function(e){return(0,r.default)(e.jetpack.siteData,["data","site","features","active"],[])},t.getAvailablePlans=function(e){return(0,r.default)(e.jetpack.siteData,["data","sitePlans"])},t.getSiteID=function(e){return(0,r.default)(e.jetpack.siteData,["data","ID"])};var o=n(15),r=s(n(22)),a=s(n(23)),i=s(n(120)),p=n(14);function s(e){return e&&e.__esModule?e:{default:e}}var c=t.data=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1];switch(t.type){case p.JETPACK_SITE_DATA_FETCH_RECEIVE:return(0,a.default)({},e,t.siteData);case p.JETPACK_SITE_FEATURES_FETCH_RECEIVE:return(0,i.default)({},e,{site:{features:t.siteFeatures}});case p.JETPACK_SITE_PLANS_FETCH_RECEIVE:return(0,i.default)({},e,{sitePlans:t.plans});default:return e}},b=t.initialRequestsState={isFetchingSiteData:!1},M=t.requests=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:b;switch(arguments[1].type){case p.JETPACK_SITE_DATA_FETCH:return(0,a.default)({},e,{isFetchingSiteData:!0});case p.JETPACK_SITE_FEATURES_FETCH:return(0,a.default)({},e,{isFetchingSiteFeatures:!0});case p.JETPACK_SITE_PLANS_FETCH:return(0,a.default)({},e,{isFetchingSitePlans:!0});case p.JETPACK_SITE_DATA_FETCH_FAIL:case p.JETPACK_SITE_DATA_FETCH_RECEIVE:return(0,a.default)({},e,{isFetchingSiteData:!1});case p.JETPACK_SITE_FEATURES_FETCH_FAIL:case p.JETPACK_SITE_FEATURES_FETCH_RECEIVE:return(0,a.default)({},e,{isFetchingSiteFeatures:!1});case p.JETPACK_SITE_PLANS_FETCH_FAIL:case p.JETPACK_SITE_PLANS_FETCH_RECEIVE:return(0,a.default)({},e,{isFetchingSitePlans:!1});default:return e}};t.reducer=(0,o.combineReducers)({data:c,requests:M})},function(e,t,n){"use strict";t.__esModule=!0;var o,r=(o=n(606))&&o.__esModule?o:{default:o};t.default={shouldComponentUpdate:r.default},e.exports=t.default},function(e,t,n){var o=n(202),r=n(94),a=n(98),i=n(26),p=n(45),s=n(99),c=n(97),b=n(131),M=Object.prototype.hasOwnProperty;e.exports=function(e){if(null==e)return!0;if(p(e)&&(i(e)||"string"==typeof e||"function"==typeof e.splice||s(e)||b(e)||a(e)))return!e.length;var t=r(e);if("[object Map]"==t||"[object Set]"==t)return!e.size;if(c(e))return!o(e).length;for(var n in e)if(M.call(e,n))return!1;return!0}},function(e,t,n){"use strict";(function(t,o){var r=n(25).Buffer,a=t.crypto||t.msCrypto;a&&a.getRandomValues?e.exports=function(e,n){if(e>65536)throw new Error("requested too many random bytes");var i=new t.Uint8Array(e);e>0&&a.getRandomValues(i);var p=r.from(i.buffer);return"function"==typeof n?o.nextTick(function(){n(null,p)}):p}:e.exports=function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")}}).call(this,n(44),n(71))},function(e,t,n){var o=n(25).Buffer;function r(e,t){this._block=o.alloc(e),this._finalSize=t,this._blockSize=e,this._len=0}r.prototype.update=function(e,t){"string"==typeof e&&(t=t||"utf8",e=o.from(e,t));for(var n=this._block,r=this._blockSize,a=e.length,i=this._len,p=0;p<a;){for(var s=i%r,c=Math.min(a-p,r-s),b=0;b<c;b++)n[s+b]=e[p+b];p+=c,(i+=c)%r==0&&this._update(n)}return this._len+=a,this},r.prototype.digest=function(e){var t=this._len%this._blockSize;this._block[t]=128,this._block.fill(0,t+1),t>=this._finalSize&&(this._update(this._block),this._block.fill(0));var n=8*this._len;if(n<=4294967295)this._block.writeUInt32BE(n,this._blockSize-4);else{var o=(4294967295&n)>>>0,r=(n-o)/4294967296;this._block.writeUInt32BE(r,this._blockSize-8),this._block.writeUInt32BE(o,this._blockSize-4)}this._update(this._block);var a=this._hash();return e?a.toString(e):a},r.prototype._update=function(){throw new Error("_update must be implemented by subclass")},e.exports=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=M(n(1)),r=M(n(2)),a=M(n(16)),i=M(n(182)),p=M(n(12)),s=M(n(23)),c=M(n(85)),b=M(n(55));function M(e){return e&&e.__esModule?e:{default:e}}n(891),t.default=(0,a.default)({displayName:"ExternalLink",mixins:[i.default],propTypes:{className:o.default.string,href:o.default.string,onClick:o.default.func,icon:o.default.bool,iconSize:o.default.number},getDefaultProps:function(){return{iconSize:18}},render:function(){var e=(0,p.default)("dops-external-link",this.props.className,{"has-icon":!!this.props.icon}),t=(0,s.default)({},(0,c.default)(this.props,"icon","iconSize"),{className:e,rel:"external"});return r.default.createElement("a",t,this.props.children,this.props.icon?r.default.createElement(b.default,{icon:"external",size:this.props.iconSize}):null)}}),e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0;var o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},r=(c(n(53)),c(n(11))),a=n(68),i=n(58),p=c(n(138)),s=n(87);function c(e){return e&&e.__esModule?e:{default:e}}t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};Array.isArray(e)?e={entries:e}:"string"==typeof e&&(e={entries:[e]});var t=function(){var e=M[l],t=(0,i.createPath)(e),n=void 0,r=void 0;e.key&&(n=e.key,r=z(n));var p=(0,i.parsePath)(t);return(0,a.createLocation)(o({},p,{state:r}),void 0,n)},n=function(e){var t=l+e;return t>=0&&t<M.length},c=(0,p.default)(o({},e,{getCurrentLocation:t,pushLocation:function(e){(l+=1)<M.length&&M.splice(l),M.push(e),d(e.key,e.state)},replaceLocation:function(e){M[l]=e,d(e.key,e.state)},go:function(e){if(e&&n(e)){l+=e;var r=t();c.transitionTo(o({},r,{action:s.POP}))}}})),b=e,M=b.entries,l=b.current;"string"==typeof M?M=[M]:Array.isArray(M)||(M=["/"]),M=M.map(function(e){return(0,a.createLocation)(e)}),null==l?l=M.length-1:l>=0&&l<M.length||(0,r.default)(!1);var u=M.filter(function(e){return e.state}).reduce(function(e,t){return e[t.key]=t.state,e},{}),d=function(e,t){return u[e]=t},z=function(e){return u[e]};return o({},c,{canGo:n})}},function(e,t,n){"use strict";t.__esModule=!0;var o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},r=M(n(11)),a=n(127),i=b(n(139)),p=b(n(441)),s=n(96),c=M(n(138));function b(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function M(e){return e&&e.__esModule?e:{default:e}}t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};a.canUseDOM||(0,r.default)(!1);var t=e.forceRefresh||!(0,s.supportsHistory)()?p:i,n=t.getUserConfirmation,b=t.getCurrentLocation,M=t.pushLocation,l=t.replaceLocation,u=t.go,d=(0,c.default)(o({getUserConfirmation:n},e,{getCurrentLocation:b,pushLocation:M,replaceLocation:l,go:u})),z=0,f=void 0,O=function(e,t){1==++z&&(f=i.startListener(d.transitionTo));var n=t?d.listenBefore(e):d.listen(e);return function(){n(),0==--z&&f()}};return o({},d,{listenBefore:function(e){return O(e,!0)},listen:function(e){return O(e,!1)}})}},function(e,t,n){"use strict";t.__esModule=!0;var o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},r=(c(n(53)),c(n(11))),a=n(127),i=n(96),p=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(442)),s=c(n(138));function c(e){return e&&e.__esModule?e:{default:e}}var b=function(e){return"/"===e.charAt(0)?e:"/"+e},M={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!"+e},decodePath:function(e){return"!"===e.charAt(0)?e.substring(1):e}},noslash:{encodePath:function(e){return"/"===e.charAt(0)?e.substring(1):e},decodePath:b},slash:{encodePath:b,decodePath:b}};t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};a.canUseDOM||(0,r.default)(!1);var t=e.queryKey,n=e.hashType;"string"!=typeof t&&(t="_k"),null==n&&(n="slash"),n in M||(n="slash");var c=M[n],b=p.getUserConfirmation,l=(0,s.default)(o({getUserConfirmation:b},e,{getCurrentLocation:function(){return p.getCurrentLocation(c,t)},pushLocation:function(e){return p.pushLocation(e,c,t)},replaceLocation:function(e){return p.replaceLocation(e,c,t)},go:p.go})),u=0,d=void 0,z=function(e,n){1==++u&&(d=p.startListener(l.transitionTo,c,t));var o=n?l.listenBefore(e):l.listen(e);return function(){o(),0==--u&&d()}};return(0,i.supportsGoWithoutReloadUsingHash)(),o({},l,{listenBefore:function(e){return z(e,!0)},listen:function(e){return z(e,!1)},go:function(e){l.go(e)},createHref:function(e){return"#"+c.encodePath(l.createHref(e))}})}},function(e,t,n){"use strict";e.exports=function(e,t,n,o,r,a,i,p){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,o,r,a,i,p],b=0;(s=new Error(t.replace(/%s/g,function(){return c[b++]}))).name="Invariant Violation"}throw s.framesToPop=1,s}}},function(e,t,n){"use strict";var o;t.__esModule=!0,t.readState=t.saveState=void 0,(o=n(53))&&o.__esModule;var r={QuotaExceededError:!0,QUOTA_EXCEEDED_ERR:!0},a={SecurityError:!0},i=function(e){return"@@History/"+e};t.saveState=function(e,t){if(window.sessionStorage)try{null==t?window.sessionStorage.removeItem(i(e)):window.sessionStorage.setItem(i(e),JSON.stringify(t))}catch(e){if(a[e.name])return;if(r[e.name]&&0===window.sessionStorage.length)return;throw e}},t.readState=function(e){var t=void 0;try{t=window.sessionStorage.getItem(i(e))}catch(e){if(a[e.name])return}if(t)try{return JSON.parse(t)}catch(e){}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e};t.routerReducer=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.type,i=t.payload;return n===r?o({},e,{locationBeforeTransitions:i}):e};var r=t.LOCATION_CHANGE="@@router/LOCATION_CHANGE",a={locationBeforeTransitions:null}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=t.CALL_HISTORY_METHOD="@@router/CALL_HISTORY_METHOD";function r(e){return function(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];return{type:o,payload:{method:e,args:n}}}}var a=t.push=r("push"),i=t.replace=r("replace"),p=t.go=r("go"),s=t.goBack=r("goBack"),c=t.goForward=r("goForward");t.routerActions={push:a,replace:i,go:p,goBack:s,goForward:c}},function(e,t,n){var o=n(62),r=function(){try{var e=o(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();e.exports=r},function(e,t,n){(function(t){var n="object"==typeof t&&t&&t.Object===Object&&t;e.exports=n}).call(this,n(44))},function(e,t){var n=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return n.call(e)}catch(e){}try{return e+""}catch(e){}}return""}},function(e,t,n){var o=n(198),r=n(169);e.exports=function(e){return o(function(t,n){var o=-1,a=n.length,i=a>1?n[a-1]:void 0,p=a>2?n[2]:void 0;for(i=e.length>3&&"function"==typeof i?(a--,i):void 0,p&&r(n[0],n[1],p)&&(i=a<3?void 0:i,a=1),t=Object(t);++o<a;){var s=n[o];s&&e(t,s,o,i)}return t})}},function(e,t,n){var o=n(111),r=n(199),a=n(200);e.exports=function(e,t){return a(r(e,t,o),e+"")}},function(e,t,n){var o=n(451),r=Math.max;e.exports=function(e,t,n){return t=r(void 0===t?e.length-1:t,0),function(){for(var a=arguments,i=-1,p=r(a.length-t,0),s=Array(p);++i<p;)s[i]=a[t+i];i=-1;for(var c=Array(t+1);++i<t;)c[i]=a[i];return c[t]=n(s),o(e,this,c)}}},function(e,t,n){var o=n(452),r=n(454)(o);e.exports=r},function(e,t,n){var o=n(455),r=n(98),a=n(26),i=n(99),p=n(130),s=n(131),c=Object.prototype.hasOwnProperty;e.exports=function(e,t){var n=a(e),b=!n&&r(e),M=!n&&!b&&i(e),l=!n&&!b&&!M&&s(e),u=n||b||M||l,d=u?o(e.length,String):[],z=d.length;for(var f in e)!t&&!c.call(e,f)||u&&("length"==f||M&&("offset"==f||"parent"==f)||l&&("buffer"==f||"byteLength"==f||"byteOffset"==f)||p(f,z))||d.push(f);return d}},function(e,t,n){var o=n(97),r=n(459),a=Object.prototype.hasOwnProperty;e.exports=function(e){if(!o(e))return r(e);var t=[];for(var n in Object(e))a.call(e,n)&&"constructor"!=n&&t.push(n);return t}},function(e,t){e.exports=function(e,t){return function(n){return e(t(n))}}},function(e,t,n){e.exports=!n(50)&&!n(69)(function(){return 7!=Object.defineProperty(n(147)("div"),"a",{get:function(){return 7}}).a})},function(e,t,n){e.exports=n(61)},function(e,t,n){var o=n(65),r=n(70),a=n(486)(!1),i=n(149)("IE_PROTO");e.exports=function(e,t){var n,p=r(e),s=0,c=[];for(n in p)n!=i&&o(p,n)&&c.push(n);for(;t.length>s;)o(p,n=t[s++])&&(~a(c,n)||c.push(n));return c}},function(e,t,n){var o=n(28).document;e.exports=o&&o.documentElement},function(e,t,n){var o=n(65),r=n(83),a=n(149)("IE_PROTO"),i=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=r(e),o(e,a)?e[a]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?i:null}},function(e,t,n){var o=n(206),r=n(151).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return o(e,r)}},function(e,t,n){var o=n(102),r=n(92),a=n(70),i=n(148),p=n(65),s=n(204),c=Object.getOwnPropertyDescriptor;t.f=n(50)?c:function(e,t){if(e=a(e),t=i(t,!0),s)try{return c(e,t)}catch(e){}if(p(e,t))return r(!o.f.call(e,t),e[t])}},function(e,t,n){var o=n(46);e.exports=function(e,t,n,r){try{return r?t(o(n)[0],n[1]):t(n)}catch(t){var a=e.return;throw void 0!==a&&o(a.call(e)),t}}},function(e,t,n){var o=n(81),r=n(31)("iterator"),a=Array.prototype;e.exports=function(e){return void 0!==e&&(o.Array===e||a[r]===e)}},function(e,t,n){var o=n(31)("iterator"),r=!1;try{var a=[7][o]();a.return=function(){r=!0},Array.from(a,function(){throw 2})}catch(e){}e.exports=function(e,t){if(!t&&!r)return!1;var n=!1;try{var a=[7],i=a[o]();i.next=function(){return{done:n=!0}},a[o]=function(){return i},e(a)}catch(e){}return n}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.NEW_NOTICE="NEW_NOTICE",t.REMOVE_NOTICE="REMOVE_NOTICE"},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getUpgradeUrl=t.initialState=void 0,t.isDevVersion=function(e){return!!e.jetpack.initialState.isDevVersion},t.getCurrentVersion=function(e){return(0,a.default)(e.jetpack.initialState,"currentVersion","")},t.getSiteRoles=function(e){return(0,a.default)(e.jetpack.initialState.stats,"roles",{})},t.getInitialStateStatsData=function(e){return(0,a.default)(e.jetpack.initialState.stats,"data")},t.getAdminEmailAddress=function(e){return(0,a.default)(e.jetpack.initialState,["userData","currentUser","wpcomUser","email"])},t.getSiteRawUrl=s,t.getSiteAdminUrl=function(e){return(0,a.default)(e.jetpack.initialState,"adminUrl",{})},t.isSitePublic=function(e){return(0,a.default)(e.jetpack.initialState,["connectionStatus","isPublic"])},t.isGutenbergAvailable=function(e){return(0,a.default)(e.jetpack.initialState,"is_gutenberg_available",!1)},t.userIsSubscriber=function(e){return!(0,a.default)(e.jetpack.initialState.userData.currentUser.permissions,"edit_posts",!1)},t.userCanPublish=function(e){return(0,a.default)(e.jetpack.initialState.userData.currentUser.permissions,"publish_posts",!1)},t.userCanManageModules=function(e){return(0,a.default)(e.jetpack.initialState.userData.currentUser.permissions,"manage_modules",!1)},t.userCanManageOptions=function(e){return(0,a.default)(e.jetpack.initialState.userData.currentUser.permissions,"manage_options",!1)},t.userCanEditPosts=function(e){return(0,a.default)(e.jetpack.initialState.userData.currentUser.permissions,"edit_posts",!1)},t.userCanManagePlugins=function(e){return(0,a.default)(e.jetpack.initialState.userData.currentUser.permissions,"manage_plugins",!1)},t.userCanDisconnectSite=function(e){return(0,a.default)(e.jetpack.initialState.userData.currentUser.permissions,"disconnect",!1)},t.userCanConnectSite=function(e){return(0,a.default)(e.jetpack.initialState.userData.currentUser.permissions,"connect",!1)},t.userIsMaster=function(e){return(0,a.default)(e.jetpack.initialState.userData.currentUser,"isMaster",!1)},t.getUserWpComLogin=function(e){return(0,a.default)(e.jetpack.initialState.userData.currentUser,["wpcomUser","login"],"")},t.getUserWpComEmail=function(e){return(0,a.default)(e.jetpack.initialState.userData.currentUser,["wpcomUser","email"],"")},t.getUserWpComAvatar=function(e){return(0,a.default)(e.jetpack.initialState.userData.currentUser,["wpcomUser","avatar"])},t.getUsername=function(e){return(0,a.default)(e.jetpack.initialState.userData.currentUser,["username"])},t.getUserId=function(e){return(0,a.default)(e.jetpack.initialState.userData.currentUser,"id")},t.userCanViewStats=function(e){return(0,a.default)(e.jetpack.initialState.userData.currentUser.permissions,"view_stats",!1)},t.getSiteIcon=function(e){return(0,a.default)(e.jetpack.initialState.siteData,["icon"])},t.isSiteVisibleToSearchEngines=function(e){return(0,a.default)(e.jetpack.initialState.siteData,["siteVisibleToSearchEngines"],!0)},t.getApiNonce=function(e){return(0,a.default)(e.jetpack.initialState,"WP_API_nonce")},t.getApiRootUrl=function(e){return(0,a.default)(e.jetpack.initialState,"WP_API_root")},t.getTracksUserData=function(e){return(0,a.default)(e.jetpack.initialState,"tracksUserData")},t.getCurrentIp=function(e){return(0,a.default)(e.jetpack.initialState,"currentIp")},t.getLastPostUrl=function(e){return(0,a.default)(e.jetpack.initialState,"lastPostUrl")},t.arePromotionsActive=function(e){return(0,a.default)(e.jetpack.initialState.siteData,"showPromotions",!0)},t.isAtomicSite=function(e){return(0,a.default)(e.jetpack.initialState.siteData,"isAtomicSite",!1)},t.currentThemeSupports=function(e,t){return(0,a.default)(e.jetpack.initialState.themeData,["support",t],!1)},t.showBackups=function(e){return(0,a.default)(e.jetpack.initialState.siteData,"showBackups",!0)},t.getAffiliateCode=c;var o=p(n(23)),r=p(n(120)),a=p(n(22)),i=n(14);function p(e){return e&&e.__esModule?e:{default:e}}function s(e){return(0,a.default)(e.jetpack.initialState,"rawUrl",{})}function c(e){return(0,a.default)(e.jetpack.initialState,"aff","")}t.initialState=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.Initial_State,t=arguments[1];switch(t.type){case i.JETPACK_SET_INITIAL_STATE:return(0,o.default)({},e,t.initialState);case i.MOCK_SWITCH_USER_PERMISSIONS:return(0,r.default)({},e,{userData:t.initialState});default:return e}},t.getUpgradeUrl=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",o=c(e);return"https://jetpack.com/redirect/?source="+t+"&site="+s(e)+(o?"&aff="+o:"")+(n?"&u="+n:"")}},function(e,t,n){var o=n(110),r=n(88);e.exports=function(e,t,n){(void 0===n||r(e[t],n))&&(void 0!==n||t in e)||o(e,t,n)}},function(e,t,n){var o=n(511)();e.exports=o},function(e,t,n){(function(e){var o=n(36),r=t&&!t.nodeType&&t,a=r&&"object"==typeof e&&e&&!e.nodeType&&e,i=a&&a.exports===r?o.Buffer:void 0,p=i?i.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var n=e.length,o=p?p(n):new e.constructor(n);return e.copy(o),o}}).call(this,n(89)(e))},function(e,t,n){var o=n(157);e.exports=function(e,t){var n=t?o(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}},function(e,t,n){var o=n(36).Uint8Array;e.exports=o},function(e,t){e.exports=function(e,t){var n=-1,o=e.length;for(t||(t=Array(o));++n<o;)t[n]=e[n];return t}},function(e,t,n){var o=n(513),r=n(158),a=n(97);e.exports=function(e){return"function"!=typeof e.constructor||a(e)?{}:o(r(e))}},function(e,t,n){var o=n(45),r=n(39);e.exports=function(e){return r(e)&&o(e)}},function(e,t,n){var o=n(63),r=n(158),a=n(39),i=Function.prototype,p=Object.prototype,s=i.toString,c=p.hasOwnProperty,b=s.call(Object);e.exports=function(e){if(!a(e)||"[object Object]"!=o(e))return!1;var t=r(e);if(null===t)return!0;var n=c.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&s.call(n)==b}},function(e,t){e.exports=function(e,t){if("__proto__"!=t)return e[t]}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.dashboard=void 0,t.getActiveStatsTab=function(e){return e.jetpack.dashboard.activeStatsTab},t.isFetchingStatsData=function(e){return!!e.jetpack.dashboard.requests.fetchingStatsData},t.getStatsData=function(e){return e.jetpack.dashboard.statsData},t.isFetchingAkismetData=function(e){return!!e.jetpack.dashboard.requests.fetchingAkismetData},t.getAkismetData=function(e){return e.jetpack.dashboard.akismetData},t.isCheckingAkismetKey=function(e){return!!e.jetpack.dashboard.requests.checkingAkismetKey},t.isAkismetKeyValid=function(e){return(0,a.default)(e.jetpack.dashboard,["akismet","validKey"],!1)},t.isFetchingProtectData=function(e){return!!e.jetpack.dashboard.requests.fetchingProtectData},t.getProtectCount=function(e){return e.jetpack.dashboard.protectCount},t.isFetchingVaultPressData=function(e){return!!e.jetpack.dashboard.requests.fetchingVaultPressData},t.getVaultPressData=function(e){return e.jetpack.dashboard.vaultPressData},t.getVaultPressScanThreatCount=function(e){return(0,a.default)(e.jetpack.dashboard.vaultPressData,"data.security.notice_count",0)},t.isFetchingPluginUpdates=function(e){return!!e.jetpack.dashboard.requests.fetchingPluginUpdates},t.getPluginUpdates=function(e){return e.jetpack.dashboard.pluginUpdates};var o=n(15),r=p(n(23)),a=p(n(22)),i=n(14);function p(e){return e&&e.__esModule?e:{default:e}}t.dashboard=(0,o.combineReducers)({requests:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};switch(arguments[1].type){case i.STATS_DATA_FETCH:return(0,r.default)({},e,{fetchingStatsData:!0});case i.AKISMET_DATA_FETCH:return(0,r.default)({},e,{fetchingAkismetData:!0});case i.AKISMET_KEY_CHECK_FETCH:return(0,r.default)({},e,{checkingAkismetKey:!0});case i.VAULTPRESS_SITE_DATA_FETCH:return(0,r.default)({},e,{fetchingVaultPressData:!0});case i.DASHBOARD_PROTECT_COUNT_FETCH:return(0,r.default)({},e,{fetchingProtectData:!0});case i.PLUGIN_UPDATES_FETCH:return(0,r.default)({},e,{fetchingPluginUpdates:!0});case i.STATS_DATA_FETCH_FAIL:case i.STATS_DATA_FETCH_SUCCESS:return(0,r.default)({},e,{fetchingStatsData:!1});case i.AKISMET_DATA_FETCH_FAIL:case i.AKISMET_DATA_FETCH_SUCCESS:return(0,r.default)({},e,{fetchingAkismetData:!1});case i.AKISMET_KEY_CHECK_FETCH_FAIL:case i.AKISMET_KEY_CHECK_FETCH_SUCCESS:return(0,r.default)({},e,{checkingAkismetKey:!1});case i.DASHBOARD_PROTECT_COUNT_FETCH_FAIL:case i.DASHBOARD_PROTECT_COUNT_FETCH_SUCCESS:return(0,r.default)({},e,{fetchingProtectData:!1});case i.PLUGIN_UPDATES_FETCH_FAIL:case i.PLUGIN_UPDATES_FETCH_SUCCESS:return(0,r.default)({},e,{fetchingPluginUpdates:!1});case i.VAULTPRESS_SITE_DATA_FETCH_FAIL:case i.VAULTPRESS_SITE_DATA_FETCH_SUCCESS:return(0,r.default)({},e,{fetchingVaultPressData:!1});default:return e}},activeStatsTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"day",t=arguments[1];switch(t.type){case i.STATS_SWITCH_TAB:return t.activeStatsTab;default:return e}},protectCount:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"N/A",t=arguments[1];switch(t.type){case i.DASHBOARD_PROTECT_COUNT_FETCH_SUCCESS:return t.protectCount;default:return e}},vaultPressData:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"N/A",t=arguments[1];switch(t.type){case i.VAULTPRESS_SITE_DATA_FETCH_SUCCESS:return t.vaultPressData;case i.MOCK_SWITCH_THREATS:return(0,r.default)({},"N/A"===e?{}:e,{data:{active:!0,features:{security:!0},security:{notice_count:t.mockCount}}});default:return e}},statsData:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1];switch(t.type){case i.STATS_DATA_FETCH_SUCCESS:return(0,r.default)({},e,t.statsData);default:return e}},akismetData:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"N/A",t=arguments[1];switch(t.type){case i.AKISMET_DATA_FETCH_SUCCESS:return t.akismetData;default:return e}},akismet:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{validKey:null,invalidKeyCode:"",invalidKeyMessage:""},t=arguments[1];switch(t.type){case i.AKISMET_KEY_CHECK_FETCH_SUCCESS:return(0,r.default)({},e,t.akismet);default:return e}},pluginUpdates:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"N/A",t=arguments[1];switch(t.type){case i.PLUGIN_UPDATES_FETCH_SUCCESS:return t.pluginUpdates;default:return e}}})},function(e,t,n){e.exports={default:n(519),__esModule:!0}},function(e,t){e.exports=function(e,t,n,o){for(var r=e.length,a=n+(o?1:-1);o?a--:++a<r;)if(t(e[a],a,e))return a;return-1}},function(e,t,n){var o=n(143),r=n(528),a=n(529);function i(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new o;++t<n;)this.add(e[t])}i.prototype.add=i.prototype.push=r,i.prototype.has=a,e.exports=i},function(e,t){e.exports=function(e,t){return e.has(t)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.reducer=void 0,t.isFetchingPluginsData=function(e){return!!e.jetpack.pluginsData.requests.isFetchingPluginsData},t.isPluginActive=function(e,t){return e.jetpack.pluginsData.items[t]&&e.jetpack.pluginsData.items[t].active},t.isPluginInstalled=function(e,t){return!!e.jetpack.pluginsData.items[t]};var o,r=n(15),a=(o=n(23))&&o.__esModule?o:{default:o},i=n(14),p={isFetchingPluginsData:!1};t.reducer=(0,r.combineReducers)({items:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1];switch(t.type){case i.JETPACK_PLUGINS_DATA_FETCH_RECEIVE:return(0,a.default)({},t.pluginsData);default:return e}},requests:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:p;switch(arguments[1].type){case i.JETPACK_PLUGINS_DATA_FETCH:return(0,a.default)({},e,{isFetchingPluginsData:!0});case i.JETPACK_PLUGINS_DATA_FETCH_FAIL:case i.JETPACK_PLUGINS_DATA_FETCH_RECEIVE:return(0,a.default)({},e,{isFetchingPluginsData:!1});default:return e}}})},function(e,t){e.exports=function(e,t,n,o){if(!(e instanceof t)||void 0!==o&&o in e)throw TypeError(n+": incorrect invocation!");return e}},function(e,t,n){var o=n(46),r=n(100),a=n(31)("species");e.exports=function(e,t){var n,i=o(e).constructor;return void 0===i||null==(n=o(i)[a])?t:r(n)}},function(e,t,n){var o,r,a,i=n(60),p=n(541),s=n(207),c=n(147),b=n(28),M=b.process,l=b.setImmediate,u=b.clearImmediate,d=b.MessageChannel,z=b.Dispatch,f=0,O={},A=function(){var e=+this;if(O.hasOwnProperty(e)){var t=O[e];delete O[e],t()}},h=function(e){A.call(e.data)};l&&u||(l=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return O[++f]=function(){p("function"==typeof e?e:Function(e),t)},o(f),f},u=function(e){delete O[e]},"process"==n(93)(M)?o=function(e){M.nextTick(i(A,e,1))}:z&&z.now?o=function(e){z.now(i(A,e,1))}:d?(a=(r=new d).port2,r.port1.onmessage=h,o=i(a.postMessage,a,1)):b.addEventListener&&"function"==typeof postMessage&&!b.importScripts?(o=function(e){b.postMessage(e+"","*")},b.addEventListener("message",h,!1)):o="onreadystatechange"in c("script")?function(e){s.appendChild(c("script")).onreadystatechange=function(){s.removeChild(this),A.call(e)}}:function(e){setTimeout(i(A,e,1),0)}),e.exports={set:l,clear:u}},function(e,t){e.exports=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}}},function(e,t,n){var o=n(46),r=n(41),a=n(162);e.exports=function(e,t){if(o(e),r(t)&&t.constructor===e)return t;var n=a.f(e);return(0,n.resolve)(t),n.promise}},function(e,t,n){var o=n(61);e.exports=function(e,t,n){for(var r in t)n&&e[r]?e[r]=t[r]:o(e,r,t[r]);return e}},function(e,t,n){e.exports={default:n(546),__esModule:!0}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.reducer=t.requests=t.connectionRequests=t.user=t.connectUrl=t.status=void 0;var o=M(n(49));t.getSiteConnectionStatus=O,t.isSiteConnected=function(e){return"object"===(0,o.default)(e.jetpack.connection.status.siteConnected)&&!0!==e.jetpack.connection.status.siteConnected.devMode.isActive&&e.jetpack.connection.status.siteConnected.isActive},t.getSiteDevMode=function(e){return!!(0,p.default)(e.jetpack.connection.status,["siteConnected","devMode","isActive"])&&(0,p.default)(e.jetpack.connection.status,["siteConnected","devMode"])},t.getConnectUrl=function(e){return e.jetpack.connection.connectUrl},t.isDisconnectingSite=function(e){return!!e.jetpack.connection.requests.disconnectingSite},t.isFetchingConnectUrl=function(e){return!!e.jetpack.connection.requests.fetchingConnectUrl},t.isUnlinkingUser=function(e){return!!e.jetpack.connection.requests.unlinkingUser},t.isFetchingUserData=function(e){return!!e.jetpack.connection.requests.fetchingUserData},t.isCurrentUserLinked=function(e){return!!e.jetpack.connection.user.currentUser.isConnected},t.isDevMode=A,t.isStaging=function(e){return(0,p.default)(e.jetpack.connection.status,["siteConnected","isStaging"],!1)},t.isInIdentityCrisis=function(e){return(0,p.default)(e.jetpack.connection.status,["siteConnected","isInIdentityCrisis"],!1)},t.requiresConnection=h,t.isUnavailableInDevMode=function(e,t){return A(e)&&h(e,t)},t.getSandboxDomain=function(e){return(0,p.default)(e.jetpack.connection.status,["siteConnected","sandboxDomain"],"")};var r=n(15),a=M(n(23)),i=M(n(120)),p=M(n(22)),s=M(n(35)),c=n(14),b=n(24);function M(e){return e&&e.__esModule?e:{default:e}}var l=t.status=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{siteConnected:window.Initial_State.connectionStatus},t=arguments[1];switch(t.type){case c.JETPACK_CONNECTION_STATUS_FETCH:case c.DISCONNECT_SITE_SUCCESS:return(0,a.default)({},e,{siteConnected:t.siteConnected});default:return e}},u=t.connectUrl=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments[1];switch(t.type){case c.JETPACK_SET_INITIAL_STATE:return(0,p.default)(t,"initialState.connectUrl",e);case c.CONNECT_URL_FETCH_SUCCESS:return t.connectUrl;default:return e}},d=t.user=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.Initial_State.userData,t=arguments[1];switch(t.type){case c.USER_CONNECTION_DATA_FETCH_SUCCESS:return(0,a.default)({},e,t.userConnectionData);case c.UNLINK_USER_SUCCESS:var n=(0,a.default)({},e.currentUser,{isConnected:!1});return(0,a.default)({},e,{currentUser:n});case c.MOCK_SWITCH_USER_PERMISSIONS:return(0,i.default)({},e,t.initialState);default:return e}},z=t.connectionRequests={disconnectingSite:!1,unlinkingUser:!1,fetchingConnectUrl:!1,fetchingUserData:!1},f=t.requests=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:z;switch(arguments[1].type){case c.DISCONNECT_SITE:return(0,a.default)({},e,{disconnectingSite:!0});case c.UNLINK_USER:return(0,a.default)({},e,{unlinkingUser:!0});case c.CONNECT_URL_FETCH:return(0,a.default)({},e,{fetchingConnectUrl:!0});case c.USER_CONNECTION_DATA_FETCH:return(0,a.default)({},e,{fetchingUserData:!0});case c.DISCONNECT_SITE_FAIL:case c.DISCONNECT_SITE_SUCCESS:return(0,a.default)({},e,{disconnectingSite:!1});case c.UNLINK_USER_FAIL:case c.UNLINK_USER_SUCCESS:return(0,a.default)({},e,{unlinkingUser:!1});case c.CONNECT_URL_FETCH_FAIL:case c.CONNECT_URL_FETCH_SUCCESS:return(0,a.default)({},e,{fetchingConnectUrl:!1});case c.USER_CONNECTION_DATA_FETCH_FAIL:case c.USER_CONNECTION_DATA_FETCH_SUCCESS:return(0,a.default)({},e,{fetchingUserData:!1});default:return e}};function O(e){return"object"===(0,o.default)(e.jetpack.connection.status.siteConnected)&&(e.jetpack.connection.status.siteConnected.devMode.isActive?"dev":e.jetpack.connection.status.siteConnected.isActive)}function A(e){return"dev"===O(e)}function h(e,t){return(0,s.default)((0,b.getModulesThatRequireConnection)(e).concat(["backups","scan"]),t)}t.reducer=(0,r.combineReducers)({connectUrl:u,status:l,user:d,requests:f})},function(e,t,n){!function(e){"use strict";n(0).defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,t,n){return e<12?n?"vm":"VM":n?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";var t={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},o=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},r={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},a=function(e){return function(t,n,a,i){var p=o(t),s=r[e][o(t)];return 2===p&&(s=s[n?0:1]),s.replace(/%d/i,t)}},i=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];e.defineLocale("ar",{months:i,monthsShort:i,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:a("s"),ss:a("s"),m:a("m"),mm:a("m"),h:a("h"),hh:a("h"),d:a("d"),dd:a("d"),M:a("M"),MM:a("M"),y:a("y"),yy:a("y")},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(e){return n[e]}).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n(0))},function(e,t,n){!function(e){"use strict";n(0).defineLocale("ar-dz",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("ar-kw",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:12}})}()},function(e,t,n){!function(e){"use strict";var t={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},n=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},o={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},r=function(e){return function(t,r,a,i){var p=n(t),s=o[e][n(t)];return 2===p&&(s=s[r?0:1]),s.replace(/%d/i,t)}},a=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];e.defineLocale("ar-ly",{months:a,monthsShort:a,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:r("s"),ss:r("s"),m:r("m"),mm:r("m"),h:r("h"),hh:r("h"),d:r("d"),dd:r("d"),M:r("M"),MM:r("M"),y:r("y"),yy:r("y")},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n(0))},function(e,t,n){!function(e){"use strict";n(0).defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}})}()},function(e,t,n){!function(e){"use strict";var t={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};e.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(e){return n[e]}).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"،")},week:{dow:0,doy:6}})}(n(0))},function(e,t,n){!function(e){"use strict";n(0).defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";var t={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"};e.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"birneçə saniyə",ss:"%d saniyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(e){return/^(gündüz|axşam)$/.test(e)},meridiem:function(e,t,n){return e<4?"gecə":e<12?"səhər":e<17?"gündüz":"axşam"},dayOfMonthOrdinalParse:/\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(e){if(0===e)return e+"-ıncı";var n=e%10;return e+(t[n]||t[e%100-n]||t[e>=100?100:null])},week:{dow:1,doy:7}})}(n(0))},function(e,t,n){!function(e){"use strict";function t(e,t,n){var o,r;return"m"===n?t?"хвіліна":"хвіліну":"h"===n?t?"гадзіна":"гадзіну":e+" "+(o=+e,r={ss:t?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:t?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:t?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"}[n].split("_"),o%10==1&&o%100!=11?r[0]:o%10>=2&&o%10<=4&&(o%100<10||o%100>=20)?r[1]:r[2])}n(0).defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:t,mm:t,h:t,hh:t,d:"дзень",dd:t,M:"месяц",MM:t,y:"год",yy:t},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(e){return/^(дня|вечара)$/.test(e)},meridiem:function(e,t,n){return e<4?"ночы":e<12?"раніцы":e<17?"дня":"вечара"},dayOfMonthOrdinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":case"w":case"W":return e%10!=2&&e%10!=3||e%100==12||e%100==13?e+"-ы":e+"-і";case"D":return e+"-га";default:return e}},week:{dow:1,doy:7}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",ss:"%d секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var t=e%10,n=e%100;return 0===e?e+"-ев":0===n?e+"-ен":n>10&&n<20?e+"-ти":1===t?e+"-ви":2===t?e+"-ри":7===t||8===t?e+"-ми":e+"-ти"},week:{dow:1,doy:7}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des".split("_"),weekdays:"Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm"},calendar:{sameDay:"[Bi lɛrɛ] LT",nextDay:"[Sini lɛrɛ] LT",nextWeek:"dddd [don lɛrɛ] LT",lastDay:"[Kunu lɛrɛ] LT",lastWeek:"dddd [tɛmɛnen lɛrɛ] LT",sameElse:"L"},relativeTime:{future:"%s kɔnɔ",past:"a bɛ %s bɔ",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"lɛrɛ kelen",hh:"lɛrɛ %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";var t={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},n={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"};e.defineLocale("bn",{months:"জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),weekdaysMin:"রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",ss:"%d সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(e){return e.replace(/[১২৩৪৫৬৭৮৯০]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/রাত|সকাল|দুপুর|বিকাল|রাত/,meridiemHour:function(e,t){return 12===e&&(e=0),"রাত"===t&&e>=4||"দুপুর"===t&&e<5||"বিকাল"===t?e+12:e},meridiem:function(e,t,n){return e<4?"রাত":e<10?"সকাল":e<17?"দুপুর":e<20?"বিকাল":"রাত"},week:{dow:0,doy:6}})}(n(0))},function(e,t,n){!function(e){"use strict";var t={1:"༡",2:"༢",3:"༣",4:"༤",5:"༥",6:"༦",7:"༧",8:"༨",9:"༩",0:"༠"},n={"༡":"1","༢":"2","༣":"3","༤":"4","༥":"5","༦":"6","༧":"7","༨":"8","༩":"9","༠":"0"};e.defineLocale("bo",{months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[དི་རིང] LT",nextDay:"[སང་ཉིན] LT",nextWeek:"[བདུན་ཕྲག་རྗེས་མ], LT",lastDay:"[ཁ་སང] LT",lastWeek:"[བདུན་ཕྲག་མཐའ་མ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",ss:"%d སྐར་ཆ།",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"},preparse:function(e){return e.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,meridiemHour:function(e,t){return 12===e&&(e=0),"མཚན་མོ"===t&&e>=4||"ཉིན་གུང"===t&&e<5||"དགོང་དག"===t?e+12:e},meridiem:function(e,t,n){return e<4?"མཚན་མོ":e<10?"ཞོགས་ཀས":e<17?"ཉིན་གུང":e<20?"དགོང་དག":"མཚན་མོ"},week:{dow:0,doy:6}})}(n(0))},function(e,t,n){!function(e){"use strict";function t(e,t,n){return e+" "+function(e,t){return 2===t?function(e){var t={m:"v",b:"v",d:"z"};return void 0===t[e.charAt(0)]?e:t[e.charAt(0)]+e.substring(1)}(e):e}({mm:"munutenn",MM:"miz",dd:"devezh"}[n],e)}n(0).defineLocale("br",{months:"Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondennoù",ss:"%d eilenn",m:"ur vunutenn",mm:t,h:"un eur",hh:"%d eur",d:"un devezh",dd:t,M:"ur miz",MM:t,y:"ur bloaz",yy:function(e){switch(function e(t){return t>9?e(t%10):t}(e)){case 1:case 3:case 4:case 5:case 9:return e+" bloaz";default:return e+" vloaz"}}},dayOfMonthOrdinalParse:/\d{1,2}(añ|vet)/,ordinal:function(e){return e+(1===e?"añ":"vet")},week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";function t(e,t,n){var o=e+" ";switch(n){case"ss":return o+(1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi");case"m":return t?"jedna minuta":"jedne minute";case"mm":return o+(1===e?"minuta":2===e||3===e||4===e?"minute":"minuta");case"h":return t?"jedan sat":"jednog sata";case"hh":return o+(1===e?"sat":2===e||3===e||4===e?"sata":"sati");case"dd":return o+(1===e?"dan":"dana");case"MM":return o+(1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci");case"yy":return o+(1===e?"godina":2===e||3===e||4===e?"godine":"godina")}}n(0).defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:t,m:t,mm:t,h:t,hh:t,d:"dan",dd:t,M:"mjesec",MM:t,y:"godinu",yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("ca",{months:{standalone:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(e,t){var n=1===e?"r":2===e?"n":3===e?"r":4===e?"t":"è";return"w"!==t&&"W"!==t||(n="a"),e+n},week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";var t="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),n="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"),o=[/^led/i,/^úno/i,/^bře/i,/^dub/i,/^kvě/i,/^(čvn|červen$|června)/i,/^(čvc|červenec|července)/i,/^srp/i,/^zář/i,/^říj/i,/^lis/i,/^pro/i],r=/^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;function a(e){return e>1&&e<5&&1!=~~(e/10)}function i(e,t,n,o){var r=e+" ";switch(n){case"s":return t||o?"pár sekund":"pár sekundami";case"ss":return t||o?r+(a(e)?"sekundy":"sekund"):r+"sekundami";case"m":return t?"minuta":o?"minutu":"minutou";case"mm":return t||o?r+(a(e)?"minuty":"minut"):r+"minutami";case"h":return t?"hodina":o?"hodinu":"hodinou";case"hh":return t||o?r+(a(e)?"hodiny":"hodin"):r+"hodinami";case"d":return t||o?"den":"dnem";case"dd":return t||o?r+(a(e)?"dny":"dní"):r+"dny";case"M":return t||o?"měsíc":"měsícem";case"MM":return t||o?r+(a(e)?"měsíce":"měsíců"):r+"měsíci";case"y":return t||o?"rok":"rokem";case"yy":return t||o?r+(a(e)?"roky":"let"):r+"lety"}}e.defineLocale("cs",{months:t,monthsShort:n,monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,monthsParse:o,longMonthsParse:o,shortMonthsParse:o,weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:i,ss:i,m:i,mm:i,h:i,hh:i,d:i,dd:i,M:i,MM:i,y:i,yy:i},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(e,t,n){!function(e){"use strict";n(0).defineLocale("cv",{months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ӗнер] LT [сехетре]",nextWeek:"[Ҫитес] dddd LT [сехетре]",lastWeek:"[Иртнӗ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(e){return e+(/сехет$/i.exec(e)?"рен":/ҫул$/i.exec(e)?"тан":"ран")},past:"%s каялла",s:"пӗр-ик ҫеккунт",ss:"%d ҫеккунт",m:"пӗр минут",mm:"%d минут",h:"пӗр сехет",hh:"%d сехет",d:"пӗр кун",dd:"%d кун",M:"пӗр уйӑх",MM:"%d уйӑх",y:"пӗр ҫул",yy:"%d ҫул"},dayOfMonthOrdinalParse:/\d{1,2}-мӗш/,ordinal:"%d-мӗш",week:{dow:1,doy:7}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",ss:"%d eiliad",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(e){var t="";return e>20?t=40===e||50===e||60===e||80===e||100===e?"fed":"ain":e>0&&(t=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"][e]),e+t},week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"på dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";function t(e,t,n,o){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?r[n][0]:r[n][1]}n(0).defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";function t(e,t,n,o){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?r[n][0]:r[n][1]}n(0).defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";function t(e,t,n,o){var r={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?r[n][0]:r[n][1]}n(0).defineLocale("de-ch",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";var t=["ޖެނުއަރީ","ފެބްރުއަރީ","މާރިޗު","އޭޕްރީލު","މޭ","ޖޫން","ޖުލައި","އޯގަސްޓު","ސެޕްޓެމްބަރު","އޮކްޓޯބަރު","ނޮވެމްބަރު","ޑިސެމްބަރު"],n=["އާދިއްތަ","ހޯމަ","އަންގާރަ","ބުދަ","ބުރާސްފަތި","ހުކުރު","ހޮނިހިރު"];e.defineLocale("dv",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/މކ|މފ/,isPM:function(e){return"މފ"===e},meridiem:function(e,t,n){return e<12?"މކ":"މފ"},calendar:{sameDay:"[މިއަދު] LT",nextDay:"[މާދަމާ] LT",nextWeek:"dddd LT",lastDay:"[އިއްޔެ] LT",lastWeek:"[ފާއިތުވި] dddd LT",sameElse:"L"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",ss:"d% ސިކުންތު",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:7,doy:12}})}(n(0))},function(e,t,n){!function(e){"use strict";n(0).defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(e,t){return e?"string"==typeof t&&/D/.test(t.substring(0,t.indexOf("MMMM")))?this._monthsGenitiveEl[e.month()]:this._monthsNominativeEl[e.month()]:this._monthsNominativeEl},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(e,t,n){return e>11?n?"μμ":"ΜΜ":n?"πμ":"ΠΜ"},isPM:function(e){return"μ"===(e+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(e,t){var n,o=this._calendarEl[e],r=t&&t.hours();return((n=o)instanceof Function||"[object Function]"===Object.prototype.toString.call(n))&&(o=o.apply(t)),o.replace("{}",r%12==1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",ss:"%d δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},dayOfMonthOrdinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("en-SG",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("en-il",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdays:"dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_ĵaŭ_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_ĵa_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D[-a de] MMMM, YYYY",LLL:"D[-a de] MMMM, YYYY HH:mm",LLLL:"dddd, [la] D[-a de] MMMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(e){return"p"===e.charAt(0).toLowerCase()},meridiem:function(e,t,n){return e>11?n?"p.t.m.":"P.T.M.":n?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd [je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasinta] dddd [je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"antaŭ %s",s:"sekundoj",ss:"%d sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}})}()},function(e,t,n){!function(e){"use strict";var t="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),o=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,o){return e?/-MMM-/.test(o)?n[e.month()]:t[e.month()]:t},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:o,longMonthsParse:o,shortMonthsParse:o,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(0))},function(e,t,n){!function(e){"use strict";var t="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),o=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,o){return e?/-MMM-/.test(o)?n[e.month()]:t[e.month()]:t},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:o,longMonthsParse:o,shortMonthsParse:o,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(0))},function(e,t,n){!function(e){"use strict";var t="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),o=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,o){return e?/-MMM-/.test(o)?n[e.month()]:t[e.month()]:t},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:o,longMonthsParse:o,shortMonthsParse:o,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:0,doy:6}})}(n(0))},function(e,t,n){!function(e){"use strict";function t(e,t,n,o){var r={s:["mõne sekundi","mõni sekund","paar sekundit"],ss:[e+"sekundi",e+"sekundit"],m:["ühe minuti","üks minut"],mm:[e+" minuti",e+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[e+" tunni",e+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[e+" kuu",e+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[e+" aasta",e+" aastat"]};return t?r[n][2]?r[n][2]:r[n][1]:o?r[n][0]:r[n][1]}n(0).defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:"%d päeva",M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}()},function(e,t,n){!function(e){"use strict";var t={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},n={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};e.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(e){return/بعد از ظهر/.test(e)},meridiem:function(e,t,n){return e<12?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",ss:"ثانیه d%",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(e){return e.replace(/[۰-۹]/g,function(e){return n[e]}).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"،")},dayOfMonthOrdinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}})}(n(0))},function(e,t,n){!function(e){"use strict";var t="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),n=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",t[7],t[8],t[9]];function o(e,o,r,a){var i="";switch(r){case"s":return a?"muutaman sekunnin":"muutama sekunti";case"ss":return a?"sekunnin":"sekuntia";case"m":return a?"minuutin":"minuutti";case"mm":i=a?"minuutin":"minuuttia";break;case"h":return a?"tunnin":"tunti";case"hh":i=a?"tunnin":"tuntia";break;case"d":return a?"päivän":"päivä";case"dd":i=a?"päivän":"päivää";break;case"M":return a?"kuukauden":"kuukausi";case"MM":i=a?"kuukauden":"kuukautta";break;case"y":return a?"vuoden":"vuosi";case"yy":i=a?"vuoden":"vuotta"}return function(e,o){return e<10?a?n[e]:t[e]:e}(e)+" "+i}e.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:o,ss:o,m:o,mm:o,h:o,hh:o,d:o,dd:o,M:o,MM:o,y:o,yy:o},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(e,t,n){!function(e){"use strict";n(0).defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",ss:"%d sekundir",m:"ein minuttur",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaður",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(e,t){switch(t){case"D":return e+(1===e?"er":"");default:case"M":case"Q":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,t){switch(t){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,t){switch(t){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";var t="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),n="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");e.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(e,o){return e?/-MMM-/.test(o)?n[e.month()]:t[e.month()]:t},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[ôfrûne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",ss:"%d sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(0))},function(e,t,n){!function(e){"use strict";n(0).defineLocale("ga",{months:["Eanáir","Feabhra","Márta","Aibreán","Bealtaine","Méitheamh","Iúil","Lúnasa","Meán Fómhair","Deaireadh Fómhair","Samhain","Nollaig"],monthsShort:["Eaná","Feab","Márt","Aibr","Beal","Méit","Iúil","Lúna","Meán","Deai","Samh","Noll"],monthsParseExact:!0,weekdays:["Dé Domhnaigh","Dé Luain","Dé Máirt","Dé Céadaoin","Déardaoin","Dé hAoine","Dé Satharn"],weekdaysShort:["Dom","Lua","Mái","Céa","Déa","hAo","Sat"],weekdaysMin:["Do","Lu","Má","Ce","Dé","hA","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Inniu ag] LT",nextDay:"[Amárach ag] LT",nextWeek:"dddd [ag] LT",lastDay:"[Inné aig] LT",lastWeek:"dddd [seo caite] [ag] LT",sameElse:"L"},relativeTime:{future:"i %s",past:"%s ó shin",s:"cúpla soicind",ss:"%d soicind",m:"nóiméad",mm:"%d nóiméad",h:"uair an chloig",hh:"%d uair an chloig",d:"lá",dd:"%d lá",M:"mí",MM:"%d mí",y:"bliain",yy:"%d bliain"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("gd",{months:["Am Faoilleach","An Gearran","Am Màrt","An Giblean","An Cèitean","An t-Ògmhios","An t-Iuchar","An Lùnastal","An t-Sultain","An Dàmhair","An t-Samhain","An Dùbhlachd"],monthsShort:["Faoi","Gear","Màrt","Gibl","Cèit","Ògmh","Iuch","Lùn","Sult","Dàmh","Samh","Dùbh"],monthsParseExact:!0,weekdays:["Didòmhnaich","Diluain","Dimàirt","Diciadain","Diardaoin","Dihaoine","Disathairne"],weekdaysShort:["Did","Dil","Dim","Dic","Dia","Dih","Dis"],weekdaysMin:["Dò","Lu","Mà","Ci","Ar","Ha","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-màireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-dè aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",ss:"%d diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(e){return 0===e.indexOf("un")?"n"+e:"en "+e},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";function t(e,t,n,o){var r={s:["thodde secondanim","thodde second"],ss:[e+" secondanim",e+" second"],m:["eka mintan","ek minute"],mm:[e+" mintanim",e+" mintam"],h:["eka voran","ek vor"],hh:[e+" voranim",e+" voram"],d:["eka disan","ek dis"],dd:[e+" disanim",e+" dis"],M:["eka mhoinean","ek mhoino"],MM:[e+" mhoineanim",e+" mhoine"],y:["eka vorsan","ek voros"],yy:[e+" vorsanim",e+" vorsam"]};return t?r[n][0]:r[n][1]}n(0).defineLocale("gom-latn",{months:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Ieta to] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fatlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(e,t){switch(t){case"D":return e+"er";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return e}},week:{dow:1,doy:4},meridiemParse:/rati|sokalli|donparam|sanje/,meridiemHour:function(e,t){return 12===e&&(e=0),"rati"===t?e<4?e:e+12:"sokalli"===t?e:"donparam"===t?e>12?e:e+12:"sanje"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"rati":e<12?"sokalli":e<16?"donparam":e<20?"sanje":"rati"}})}()},function(e,t,n){!function(e){"use strict";var t={1:"૧",2:"૨",3:"૩",4:"૪",5:"૫",6:"૬",7:"૭",8:"૮",9:"૯",0:"૦"},n={"૧":"1","૨":"2","૩":"3","૪":"4","૫":"5","૬":"6","૭":"7","૮":"8","૯":"9","૦":"0"};e.defineLocale("gu",{months:"જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર".split("_"),monthsShort:"જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.".split("_"),monthsParseExact:!0,weekdays:"રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર".split("_"),weekdaysShort:"રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ".split("_"),weekdaysMin:"ર_સો_મં_બુ_ગુ_શુ_શ".split("_"),longDateFormat:{LT:"A h:mm વાગ્યે",LTS:"A h:mm:ss વાગ્યે",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm વાગ્યે",LLLL:"dddd, D MMMM YYYY, A h:mm વાગ્યે"},calendar:{sameDay:"[આજ] LT",nextDay:"[કાલે] LT",nextWeek:"dddd, LT",lastDay:"[ગઇકાલે] LT",lastWeek:"[પાછલા] dddd, LT",sameElse:"L"},relativeTime:{future:"%s મા",past:"%s પેહલા",s:"અમુક પળો",ss:"%d સેકંડ",m:"એક મિનિટ",mm:"%d મિનિટ",h:"એક કલાક",hh:"%d કલાક",d:"એક દિવસ",dd:"%d દિવસ",M:"એક મહિનો",MM:"%d મહિનો",y:"એક વર્ષ",yy:"%d વર્ષ"},preparse:function(e){return e.replace(/[૧૨૩૪૫૬૭૮૯૦]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/રાત|બપોર|સવાર|સાંજ/,meridiemHour:function(e,t){return 12===e&&(e=0),"રાત"===t?e<4?e:e+12:"સવાર"===t?e:"બપોર"===t?e>=10?e:e+12:"સાંજ"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"રાત":e<10?"સવાર":e<17?"બપોર":e<20?"સાંજ":"રાત"},week:{dow:0,doy:6}})}(n(0))},function(e,t,n){!function(e){"use strict";n(0).defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",ss:"%d שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(e){return 2===e?"שעתיים":e+" שעות"},d:"יום",dd:function(e){return 2===e?"יומיים":e+" ימים"},M:"חודש",MM:function(e){return 2===e?"חודשיים":e+" חודשים"},y:"שנה",yy:function(e){return 2===e?"שנתיים":e%10==0&&10!==e?e+" שנה":e+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(e){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(e)},meridiem:function(e,t,n){return e<5?"לפנות בוקר":e<10?"בבוקר":e<12?n?'לפנה"צ':"לפני הצהריים":e<18?n?'אחה"צ':"אחרי הצהריים":"בערב"}})}()},function(e,t,n){!function(e){"use strict";var t={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};e.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",ss:"%d सेकंड",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(e,t){return 12===e&&(e=0),"रात"===t?e<4?e:e+12:"सुबह"===t?e:"दोपहर"===t?e>=10?e:e+12:"शाम"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"रात":e<10?"सुबह":e<17?"दोपहर":e<20?"शाम":"रात"},week:{dow:0,doy:6}})}(n(0))},function(e,t,n){!function(e){"use strict";function t(e,t,n){var o=e+" ";switch(n){case"ss":return o+(1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi");case"m":return t?"jedna minuta":"jedne minute";case"mm":return o+(1===e?"minuta":2===e||3===e||4===e?"minute":"minuta");case"h":return t?"jedan sat":"jednog sata";case"hh":return o+(1===e?"sat":2===e||3===e||4===e?"sata":"sati");case"dd":return o+(1===e?"dan":"dana");case"MM":return o+(1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci");case"yy":return o+(1===e?"godina":2===e||3===e||4===e?"godine":"godina")}}n(0).defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:t,m:t,mm:t,h:t,hh:t,d:"dan",dd:t,M:"mjesec",MM:t,y:"godinu",yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}()},function(e,t,n){!function(e){"use strict";var t="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");function n(e,t,n,o){var r=e;switch(n){case"s":return o||t?"néhány másodperc":"néhány másodperce";case"ss":return r+(o||t)?" másodperc":" másodperce";case"m":return"egy"+(o||t?" perc":" perce");case"mm":return r+(o||t?" perc":" perce");case"h":return"egy"+(o||t?" óra":" órája");case"hh":return r+(o||t?" óra":" órája");case"d":return"egy"+(o||t?" nap":" napja");case"dd":return r+(o||t?" nap":" napja");case"M":return"egy"+(o||t?" hónap":" hónapja");case"MM":return r+(o||t?" hónap":" hónapja");case"y":return"egy"+(o||t?" év":" éve");case"yy":return r+(o||t?" év":" éve")}return""}function o(e){return(e?"":"[múlt] ")+"["+t[this.day()]+"] LT[-kor]"}e.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(e){return"u"===e.charAt(1).toLowerCase()},meridiem:function(e,t,n){return e<12?!0===n?"de":"DE":!0===n?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return o.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return o.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:n,ss:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(e,t,n){!function(e){"use strict";n(0).defineLocale("hy-am",{months:{format:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_"),standalone:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_")},monthsShort:"հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_"),weekdays:"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_"),weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., HH:mm",LLLL:"dddd, D MMMM YYYY թ., HH:mm"},calendar:{sameDay:"[այսօր] LT",nextDay:"[վաղը] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ժամը] LT"},lastWeek:function(){return"[անցած] dddd [օրը ժամը] LT"},sameElse:"L"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",ss:"%d վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"},meridiemParse:/գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,isPM:function(e){return/^(ցերեկվա|երեկոյան)$/.test(e)},meridiem:function(e){return e<4?"գիշերվա":e<12?"առավոտվա":e<17?"ցերեկվա":"երեկոյան"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(ին|րդ)/,ordinal:function(e,t){switch(t){case"DDD":case"w":case"W":case"DDDo":return 1===e?e+"-ին":e+"-րդ";default:return e}},week:{dow:1,doy:7}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,t){return 12===e&&(e=0),"pagi"===t?e:"siang"===t?e>=11?e:e+12:"sore"===t||"malam"===t?e+12:void 0},meridiem:function(e,t,n){return e<11?"pagi":e<15?"siang":e<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}()},function(e,t,n){!function(e){"use strict";function t(e){return e%100==11||e%10!=1}function n(e,n,o,r){var a=e+" ";switch(o){case"s":return n||r?"nokkrar sekúndur":"nokkrum sekúndum";case"ss":return t(e)?a+(n||r?"sekúndur":"sekúndum"):a+"sekúnda";case"m":return n?"mínúta":"mínútu";case"mm":return t(e)?a+(n||r?"mínútur":"mínútum"):n?a+"mínúta":a+"mínútu";case"hh":return t(e)?a+(n||r?"klukkustundir":"klukkustundum"):a+"klukkustund";case"d":return n?"dagur":r?"dag":"degi";case"dd":return t(e)?n?a+"dagar":a+(r?"daga":"dögum"):n?a+"dagur":a+(r?"dag":"degi");case"M":return n?"mánuður":r?"mánuð":"mánuði";case"MM":return t(e)?n?a+"mánuðir":a+(r?"mánuði":"mánuðum"):n?a+"mánuður":a+(r?"mánuð":"mánuði");case"y":return n||r?"ár":"ári";case"yy":return t(e)?a+(n||r?"ár":"árum"):a+(n||r?"ár":"ári")}}e.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:n,ss:n,m:n,mm:n,h:"klukkustund",hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(e,t,n){!function(e){"use strict";n(0).defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("it-ch",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("ja",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日(ddd) HH:mm"},meridiemParse:/午前|午後/i,isPM:function(e){return"午後"===e},meridiem:function(e,t,n){return e<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:function(e){return e.week()<this.week()?"[来週]dddd LT":"dddd LT"},lastDay:"[昨日] LT",lastWeek:function(e){return this.week()<e.week()?"[先週]dddd LT":"dddd LT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}日/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";default:return e}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",ss:"%d秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(e,t){return 12===e&&(e=0),"enjing"===t?e:"siyang"===t?e>=11?e:e+12:"sonten"===t||"ndalu"===t?e+12:void 0},meridiem:function(e,t,n){return e<11?"enjing":e<15?"siyang":e<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",ss:"%d detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("ka",{months:{standalone:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),format:"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს".split("_")},monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),format:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(e){return/(წამი|წუთი|საათი|წელი)/.test(e)?e.replace(/ი$/,"ში"):e+"ში"},past:function(e){return/(წამი|წუთი|საათი|დღე|თვე)/.test(e)?e.replace(/(ი|ე)$/,"ის წინ"):/წელი/.test(e)?e.replace(/წელი$/,"წლის წინ"):void 0},s:"რამდენიმე წამი",ss:"%d წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},dayOfMonthOrdinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(e){return 0===e?e:1===e?e+"-ლი":e<20||e<=100&&e%20==0||e%100==0?"მე-"+e:e+"-ე"},week:{dow:1,doy:7}})}()},function(e,t,n){!function(e){"use strict";var t={0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"};e.defineLocale("kk",{months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",ss:"%d секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(e){return e+(t[e]||t[e%10]||t[e>=100?100:null])},week:{dow:1,doy:7}})}(n(0))},function(e,t,n){!function(e){"use strict";var t={1:"១",2:"២",3:"៣",4:"៤",5:"៥",6:"៦",7:"៧",8:"៨",9:"៩",0:"០"},n={"១":"1","២":"2","៣":"3","៤":"4","៥":"5","៦":"6","៧":"7","៨":"8","៩":"9","០":"0"};e.defineLocale("km",{months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),weekdaysMin:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/ព្រឹក|ល្ងាច/,isPM:function(e){return"ល្ងាច"===e},meridiem:function(e,t,n){return e<12?"ព្រឹក":"ល្ងាច"},calendar:{sameDay:"[ថ្ងៃនេះ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",ss:"%d វិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},dayOfMonthOrdinalParse:/ទី\d{1,2}/,ordinal:"ទី%d",preparse:function(e){return e.replace(/[១២៣៤៥៦៧៨៩០]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},week:{dow:1,doy:4}})}(n(0))},function(e,t,n){!function(e){"use strict";var t={1:"೧",2:"೨",3:"೩",4:"೪",5:"೫",6:"೬",7:"೭",8:"೮",9:"೯",0:"೦"},n={"೧":"1","೨":"2","೩":"3","೪":"4","೫":"5","೬":"6","೭":"7","೮":"8","೯":"9","೦":"0"};e.defineLocale("kn",{months:"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್".split("_"),monthsShort:"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ".split("_"),monthsParseExact:!0,weekdays:"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ".split("_"),weekdaysShort:"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ".split("_"),weekdaysMin:"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[ಇಂದು] LT",nextDay:"[ನಾಳೆ] LT",nextWeek:"dddd, LT",lastDay:"[ನಿನ್ನೆ] LT",lastWeek:"[ಕೊನೆಯ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ನಂತರ",past:"%s ಹಿಂದೆ",s:"ಕೆಲವು ಕ್ಷಣಗಳು",ss:"%d ಸೆಕೆಂಡುಗಳು",m:"ಒಂದು ನಿಮಿಷ",mm:"%d ನಿಮಿಷ",h:"ಒಂದು ಗಂಟೆ",hh:"%d ಗಂಟೆ",d:"ಒಂದು ದಿನ",dd:"%d ದಿನ",M:"ಒಂದು ತಿಂಗಳು",MM:"%d ತಿಂಗಳು",y:"ಒಂದು ವರ್ಷ",yy:"%d ವರ್ಷ"},preparse:function(e){return e.replace(/[೧೨೩೪೫೬೭೮೯೦]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,meridiemHour:function(e,t){return 12===e&&(e=0),"ರಾತ್ರಿ"===t?e<4?e:e+12:"ಬೆಳಿಗ್ಗೆ"===t?e:"ಮಧ್ಯಾಹ್ನ"===t?e>=10?e:e+12:"ಸಂಜೆ"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"ರಾತ್ರಿ":e<10?"ಬೆಳಿಗ್ಗೆ":e<17?"ಮಧ್ಯಾಹ್ನ":e<20?"ಸಂಜೆ":"ರಾತ್ರಿ"},dayOfMonthOrdinalParse:/\d{1,2}(ನೇ)/,ordinal:function(e){return e+"ನೇ"},week:{dow:0,doy:6}})}(n(0))},function(e,t,n){!function(e){"use strict";n(0).defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},dayOfMonthOrdinalParse:/\d{1,2}(일|월|주)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"일";case"M":return e+"월";case"w":case"W":return e+"주";default:return e}},meridiemParse:/오전|오후/,isPM:function(e){return"오후"===e},meridiem:function(e,t,n){return e<12?"오전":"오후"}})}()},function(e,t,n){!function(e){"use strict";var t={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},o=["کانونی دووەم","شوبات","ئازار","نیسان","ئایار","حوزەیران","تەمموز","ئاب","ئەیلوول","تشرینی یەكەم","تشرینی دووەم","كانونی یەکەم"];e.defineLocale("ku",{months:o,monthsShort:o,weekdays:"یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌".split("_"),weekdaysShort:"یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌".split("_"),weekdaysMin:"ی_د_س_چ_پ_ه_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/ئێواره‌|به‌یانی/,isPM:function(e){return/ئێواره‌/.test(e)},meridiem:function(e,t,n){return e<12?"به‌یانی":"ئێواره‌"},calendar:{sameDay:"[ئه‌مرۆ كاتژمێر] LT",nextDay:"[به‌یانی كاتژمێر] LT",nextWeek:"dddd [كاتژمێر] LT",lastDay:"[دوێنێ كاتژمێر] LT",lastWeek:"dddd [كاتژمێر] LT",sameElse:"L"},relativeTime:{future:"له‌ %s",past:"%s",s:"چه‌ند چركه‌یه‌ك",ss:"چركه‌ %d",m:"یه‌ك خوله‌ك",mm:"%d خوله‌ك",h:"یه‌ك كاتژمێر",hh:"%d كاتژمێر",d:"یه‌ك ڕۆژ",dd:"%d ڕۆژ",M:"یه‌ك مانگ",MM:"%d مانگ",y:"یه‌ك ساڵ",yy:"%d ساڵ"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(e){return n[e]}).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]}).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n(0))},function(e,t,n){!function(e){"use strict";var t={0:"-чү",1:"-чи",2:"-чи",3:"-чү",4:"-чү",5:"-чи",6:"-чы",7:"-чи",8:"-чи",9:"-чу",10:"-чу",20:"-чы",30:"-чу",40:"-чы",50:"-чү",60:"-чы",70:"-чи",80:"-чи",90:"-чу",100:"-чү"};e.defineLocale("ky",{months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгүн саат] LT",nextDay:"[Эртең саат] LT",nextWeek:"dddd [саат] LT",lastDay:"[Кечээ саат] LT",lastWeek:"[Өткөн аптанын] dddd [күнү] [саат] LT",sameElse:"L"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",ss:"%d секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(чи|чы|чү|чу)/,ordinal:function(e){return e+(t[e]||t[e%10]||t[e>=100?100:null])},week:{dow:1,doy:7}})}(n(0))},function(e,t,n){!function(e){"use strict";function t(e,t,n,o){var r={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return t?r[n][0]:r[n][1]}function n(e){if(e=parseInt(e,10),isNaN(e))return!1;if(e<0)return!0;if(e<10)return 4<=e&&e<=7;if(e<100){var t=e%10;return n(0===t?e/10:t)}if(e<1e4){for(;e>=10;)e/=10;return n(e)}return n(e/=1e3)}e.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:function(e){return n(e.substr(0,e.indexOf(" ")))?"a "+e:"an "+e},past:function(e){return n(e.substr(0,e.indexOf(" ")))?"viru "+e:"virun "+e},s:"e puer Sekonnen",ss:"%d Sekonnen",m:t,mm:"%d Minutten",h:t,hh:"%d Stonnen",d:t,dd:"%d Deeg",M:t,MM:"%d Méint",y:t,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(e,t,n){!function(e){"use strict";n(0).defineLocale("lo",{months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},meridiemParse:/ຕອນເຊົ້າ|ຕອນແລງ/,isPM:function(e){return"ຕອນແລງ"===e},meridiem:function(e,t,n){return e<12?"ຕອນເຊົ້າ":"ຕອນແລງ"},calendar:{sameDay:"[ມື້ນີ້ເວລາ] LT",nextDay:"[ມື້ອື່ນເວລາ] LT",nextWeek:"[ວັນ]dddd[ໜ້າເວລາ] LT",lastDay:"[ມື້ວານນີ້ເວລາ] LT",lastWeek:"[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT",sameElse:"L"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",ss:"%d ວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"},dayOfMonthOrdinalParse:/(ທີ່)\d{1,2}/,ordinal:function(e){return"ທີ່"+e}})}()},function(e,t,n){!function(e){"use strict";var t={ss:"sekundė_sekundžių_sekundes",m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"};function n(e,t,n,o){return t?r(n)[0]:o?r(n)[1]:r(n)[2]}function o(e){return e%10==0||e>10&&e<20}function r(e){return t[e].split("_")}function a(e,t,a,i){var p=e+" ";return 1===e?p+n(0,t,a[0],i):t?p+(o(e)?r(a)[1]:r(a)[0]):i?p+r(a)[1]:p+(o(e)?r(a)[1]:r(a)[2])}e.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:function(e,t,n,o){return t?"kelios sekundės":o?"kelių sekundžių":"kelias sekundes"},ss:a,m:n,mm:a,h:n,hh:a,d:n,dd:a,M:n,MM:a,y:n,yy:a},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(e){return e+"-oji"},week:{dow:1,doy:4}})}(n(0))},function(e,t,n){!function(e){"use strict";var t={ss:"sekundes_sekundēm_sekunde_sekundes".split("_"),m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};function n(e,t,n){return n?t%10==1&&t%100!=11?e[2]:e[3]:t%10==1&&t%100!=11?e[0]:e[1]}function o(e,o,r){return e+" "+n(t[r],e,o)}function r(e,o,r){return n(t[r],e,o)}e.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:function(e,t){return t?"dažas sekundes":"dažām sekundēm"},ss:o,m:r,mm:o,h:r,hh:o,d:r,dd:o,M:r,MM:o,y:r,yy:o},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(e,t,n){!function(e){"use strict";var t={words:{ss:["sekund","sekunda","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,t){return 1===e?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,n,o){var r=t.words[o];return 1===o.length?n?r[0]:r[1]:e+" "+t.correctGrammaticalCase(e,r)}};e.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedjelje] [u] LT","[prošlog] [ponedjeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srijede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:"dan",dd:t.translate,M:"mjesec",MM:t.translate,y:"godinu",yy:t.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(0))},function(e,t,n){!function(e){"use strict";n(0).defineLocale("mi",{months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",ss:"%d hēkona",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",ss:"%d секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var t=e%10,n=e%100;return 0===e?e+"-ев":0===n?e+"-ен":n>10&&n<20?e+"-ти":1===t?e+"-ви":2===t?e+"-ри":7===t||8===t?e+"-ми":e+"-ти"},week:{dow:1,doy:7}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),monthsParseExact:!0,weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",ss:"%d സെക്കൻഡ്",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiemParse:/രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,meridiemHour:function(e,t){return 12===e&&(e=0),"രാത്രി"===t&&e>=4||"ഉച്ച കഴിഞ്ഞ്"===t||"വൈകുന്നേരം"===t?e+12:e},meridiem:function(e,t,n){return e<4?"രാത്രി":e<12?"രാവിലെ":e<17?"ഉച്ച കഴിഞ്ഞ്":e<20?"വൈകുന്നേരം":"രാത്രി"}})}()},function(e,t,n){!function(e){"use strict";function t(e,t,n,o){switch(n){case"s":return t?"хэдхэн секунд":"хэдхэн секундын";case"ss":return e+(t?" секунд":" секундын");case"m":case"mm":return e+(t?" минут":" минутын");case"h":case"hh":return e+(t?" цаг":" цагийн");case"d":case"dd":return e+(t?" өдөр":" өдрийн");case"M":case"MM":return e+(t?" сар":" сарын");case"y":case"yy":return e+(t?" жил":" жилийн");default:return e}}n(0).defineLocale("mn",{months:"Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар".split("_"),monthsShort:"1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар".split("_"),monthsParseExact:!0,weekdays:"Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба".split("_"),weekdaysShort:"Ням_Дав_Мяг_Лха_Пүр_Баа_Бям".split("_"),weekdaysMin:"Ня_Да_Мя_Лх_Пү_Ба_Бя".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY оны MMMMын D",LLL:"YYYY оны MMMMын D HH:mm",LLLL:"dddd, YYYY оны MMMMын D HH:mm"},meridiemParse:/ҮӨ|ҮХ/i,isPM:function(e){return"ҮХ"===e},meridiem:function(e,t,n){return e<12?"ҮӨ":"ҮХ"},calendar:{sameDay:"[Өнөөдөр] LT",nextDay:"[Маргааш] LT",nextWeek:"[Ирэх] dddd LT",lastDay:"[Өчигдөр] LT",lastWeek:"[Өнгөрсөн] dddd LT",sameElse:"L"},relativeTime:{future:"%s дараа",past:"%s өмнө",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2} өдөр/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+" өдөр";default:return e}}})}()},function(e,t,n){!function(e){"use strict";var t={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};function o(e,t,n,o){var r="";if(t)switch(n){case"s":r="काही सेकंद";break;case"ss":r="%d सेकंद";break;case"m":r="एक मिनिट";break;case"mm":r="%d मिनिटे";break;case"h":r="एक तास";break;case"hh":r="%d तास";break;case"d":r="एक दिवस";break;case"dd":r="%d दिवस";break;case"M":r="एक महिना";break;case"MM":r="%d महिने";break;case"y":r="एक वर्ष";break;case"yy":r="%d वर्षे"}else switch(n){case"s":r="काही सेकंदां";break;case"ss":r="%d सेकंदां";break;case"m":r="एका मिनिटा";break;case"mm":r="%d मिनिटां";break;case"h":r="एका तासा";break;case"hh":r="%d तासां";break;case"d":r="एका दिवसा";break;case"dd":r="%d दिवसां";break;case"M":r="एका महिन्या";break;case"MM":r="%d महिन्यां";break;case"y":r="एका वर्षा";break;case"yy":r="%d वर्षां"}return r.replace(/%d/i,e)}e.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%sमध्ये",past:"%sपूर्वी",s:o,ss:o,m:o,mm:o,h:o,hh:o,d:o,dd:o,M:o,MM:o,y:o,yy:o},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/रात्री|सकाळी|दुपारी|सायंकाळी/,meridiemHour:function(e,t){return 12===e&&(e=0),"रात्री"===t?e<4?e:e+12:"सकाळी"===t?e:"दुपारी"===t?e>=10?e:e+12:"सायंकाळी"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"रात्री":e<10?"सकाळी":e<17?"दुपारी":e<20?"सायंकाळी":"रात्री"},week:{dow:0,doy:6}})}(n(0))},function(e,t,n){!function(e){"use strict";n(0).defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,t){return 12===e&&(e=0),"pagi"===t?e:"tengahari"===t?e>=11?e:e+12:"petang"===t||"malam"===t?e+12:void 0},meridiem:function(e,t,n){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,t){return 12===e&&(e=0),"pagi"===t?e:"tengahari"===t?e>=11?e:e+12:"petang"===t||"malam"===t?e+12:void 0},meridiem:function(e,t,n){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("mt",{months:"Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ".split("_"),weekdays:"Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt".split("_"),weekdaysShort:"Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib".split("_"),weekdaysMin:"Ħa_Tn_Tl_Er_Ħa_Ġi_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Illum fil-]LT",nextDay:"[Għada fil-]LT",nextWeek:"dddd [fil-]LT",lastDay:"[Il-bieraħ fil-]LT",lastWeek:"dddd [li għadda] [fil-]LT",sameElse:"L"},relativeTime:{future:"f’ %s",past:"%s ilu",s:"ftit sekondi",ss:"%d sekondi",m:"minuta",mm:"%d minuti",h:"siegħa",hh:"%d siegħat",d:"ġurnata",dd:"%d ġranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";var t={1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"},n={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"};e.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",ss:"%d စက္ကန့်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(e){return e.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},week:{dow:1,doy:4}})}(n(0))},function(e,t,n){!function(e){"use strict";n(0).defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";var t={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};e.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),monthsParseExact:!0,weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(e,t){return 12===e&&(e=0),"राति"===t?e<4?e:e+12:"बिहान"===t?e:"दिउँसो"===t?e>=10?e:e+12:"साँझ"===t?e+12:void 0},meridiem:function(e,t,n){return e<3?"राति":e<12?"बिहान":e<16?"दिउँसो":e<20?"साँझ":"राति"},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",ss:"%d सेकेण्ड",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,doy:6}})}(n(0))},function(e,t,n){!function(e){"use strict";var t="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),o=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;e.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,o){return e?/-MMM-/.test(o)?n[e.month()]:t[e.month()]:t},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:o,longMonthsParse:o,shortMonthsParse:o,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(0))},function(e,t,n){!function(e){"use strict";var t="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),o=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;e.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,o){return e?/-MMM-/.test(o)?n[e.month()]:t[e.month()]:t},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:o,longMonthsParse:o,shortMonthsParse:o,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(0))},function(e,t,n){!function(e){"use strict";n(0).defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";var t={1:"੧",2:"੨",3:"੩",4:"੪",5:"੫",6:"੬",7:"੭",8:"੮",9:"੯",0:"੦"},n={"੧":"1","੨":"2","੩":"3","੪":"4","੫":"5","੬":"6","੭":"7","੮":"8","੯":"9","੦":"0"};e.defineLocale("pa-in",{months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),longDateFormat:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},calendar:{sameDay:"[ਅਜ] LT",nextDay:"[ਕਲ] LT",nextWeek:"[ਅਗਲਾ] dddd, LT",lastDay:"[ਕਲ] LT",lastWeek:"[ਪਿਛਲੇ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",ss:"%d ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"},preparse:function(e){return e.replace(/[੧੨੩੪੫੬੭੮੯੦]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,meridiemHour:function(e,t){return 12===e&&(e=0),"ਰਾਤ"===t?e<4?e:e+12:"ਸਵੇਰ"===t?e:"ਦੁਪਹਿਰ"===t?e>=10?e:e+12:"ਸ਼ਾਮ"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"ਰਾਤ":e<10?"ਸਵੇਰ":e<17?"ਦੁਪਹਿਰ":e<20?"ਸ਼ਾਮ":"ਰਾਤ"},week:{dow:0,doy:6}})}(n(0))},function(e,t,n){!function(e){"use strict";var t="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),n="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");function o(e){return e%10<5&&e%10>1&&~~(e/10)%10!=1}function r(e,t,n){var r=e+" ";switch(n){case"ss":return r+(o(e)?"sekundy":"sekund");case"m":return t?"minuta":"minutę";case"mm":return r+(o(e)?"minuty":"minut");case"h":return t?"godzina":"godzinę";case"hh":return r+(o(e)?"godziny":"godzin");case"MM":return r+(o(e)?"miesiące":"miesięcy");case"yy":return r+(o(e)?"lata":"lat")}}e.defineLocale("pl",{months:function(e,o){return e?""===o?"("+n[e.month()]+"|"+t[e.month()]+")":/D MMMM/.test(o)?n[e.month()]:t[e.month()]:t},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedzielę o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W środę o] LT";case 6:return"[W sobotę o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:r,m:r,mm:r,h:r,hh:r,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:r,y:"rok",yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(e,t,n){!function(e){"use strict";n(0).defineLocale("pt",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("pt-br",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº"})}()},function(e,t,n){!function(e){"use strict";function t(e,t,n){var o=" ";return(e%100>=20||e>=100&&e%100==0)&&(o=" de "),e+o+{ss:"secunde",mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"}[n]}n(0).defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",ss:t,m:"un minut",mm:t,h:"o oră",hh:t,d:"o zi",dd:t,M:"o lună",MM:t,y:"un an",yy:t},week:{dow:1,doy:7}})}()},function(e,t,n){!function(e){"use strict";function t(e,t,n){var o,r;return"m"===n?t?"минута":"минуту":e+" "+(o=+e,r={ss:t?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:t?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"}[n].split("_"),o%10==1&&o%100!=11?r[0]:o%10>=2&&o%10<=4&&(o%100<10||o%100>=20)?r[1]:r[2])}var n=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i];e.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:n,longMonthsParse:n,shortMonthsParse:n,monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., H:mm",LLLL:"dddd, D MMMM YYYY г., H:mm"},calendar:{sameDay:"[Сегодня, в] LT",nextDay:"[Завтра, в] LT",lastDay:"[Вчера, в] LT",nextWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[Во] dddd, [в] LT":"[В] dddd, [в] LT";switch(this.day()){case 0:return"[В следующее] dddd, [в] LT";case 1:case 2:case 4:return"[В следующий] dddd, [в] LT";case 3:case 5:case 6:return"[В следующую] dddd, [в] LT"}},lastWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[Во] dddd, [в] LT":"[В] dddd, [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd, [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd, [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd, [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",ss:t,m:t,mm:t,h:"час",hh:t,d:"день",dd:t,M:"месяц",MM:t,y:"год",yy:t},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(e){return/^(дня|вечера)$/.test(e)},meridiem:function(e,t,n){return e<4?"ночи":e<12?"утра":e<17?"дня":"вечера"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":return e+"-й";case"D":return e+"-го";case"w":case"W":return e+"-я";default:return e}},week:{dow:1,doy:4}})}(n(0))},function(e,t,n){!function(e){"use strict";var t=["جنوري","فيبروري","مارچ","اپريل","مئي","جون","جولاءِ","آگسٽ","سيپٽمبر","آڪٽوبر","نومبر","ڊسمبر"],n=["آچر","سومر","اڱارو","اربع","خميس","جمع","ڇنڇر"];e.defineLocale("sd",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(e){return"شام"===e},meridiem:function(e,t,n){return e<12?"صبح":"شام"},calendar:{sameDay:"[اڄ] LT",nextDay:"[سڀاڻي] LT",nextWeek:"dddd [اڳين هفتي تي] LT",lastDay:"[ڪالهه] LT",lastWeek:"[گزريل هفتي] dddd [تي] LT",sameElse:"L"},relativeTime:{future:"%s پوء",past:"%s اڳ",s:"چند سيڪنڊ",ss:"%d سيڪنڊ",m:"هڪ منٽ",mm:"%d منٽ",h:"هڪ ڪلاڪ",hh:"%d ڪلاڪ",d:"هڪ ڏينهن",dd:"%d ڏينهن",M:"هڪ مهينو",MM:"%d مهينا",y:"هڪ سال",yy:"%d سال"},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:4}})}(n(0))},function(e,t,n){!function(e){"use strict";n(0).defineLocale("se",{months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",ss:"%d sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("si",{months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},calendar:{sameDay:"[අද] LT[ට]",nextDay:"[හෙට] LT[ට]",nextWeek:"dddd LT[ට]",lastDay:"[ඊයේ] LT[ට]",lastWeek:"[පසුගිය] dddd LT[ට]",sameElse:"L"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",ss:"තත්පර %d",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"},dayOfMonthOrdinalParse:/\d{1,2} වැනි/,ordinal:function(e){return e+" වැනි"},meridiemParse:/පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,isPM:function(e){return"ප.ව."===e||"පස් වරු"===e},meridiem:function(e,t,n){return e>11?n?"ප.ව.":"පස් වරු":n?"පෙ.ව.":"පෙර වරු"}})}()},function(e,t,n){!function(e){"use strict";var t="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),n="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");function o(e){return e>1&&e<5}function r(e,t,n,r){var a=e+" ";switch(n){case"s":return t||r?"pár sekúnd":"pár sekundami";case"ss":return t||r?a+(o(e)?"sekundy":"sekúnd"):a+"sekundami";case"m":return t?"minúta":r?"minútu":"minútou";case"mm":return t||r?a+(o(e)?"minúty":"minút"):a+"minútami";case"h":return t?"hodina":r?"hodinu":"hodinou";case"hh":return t||r?a+(o(e)?"hodiny":"hodín"):a+"hodinami";case"d":return t||r?"deň":"dňom";case"dd":return t||r?a+(o(e)?"dni":"dní"):a+"dňami";case"M":return t||r?"mesiac":"mesiacom";case"MM":return t||r?a+(o(e)?"mesiace":"mesiacov"):a+"mesiacmi";case"y":return t||r?"rok":"rokom";case"yy":return t||r?a+(o(e)?"roky":"rokov"):a+"rokmi"}}e.defineLocale("sk",{months:t,monthsShort:n,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(e,t,n){!function(e){"use strict";function t(e,t,n,o){var r=e+" ";switch(n){case"s":return t||o?"nekaj sekund":"nekaj sekundami";case"ss":return r+(1===e?t?"sekundo":"sekundi":2===e?t||o?"sekundi":"sekundah":e<5?t||o?"sekunde":"sekundah":"sekund");case"m":return t?"ena minuta":"eno minuto";case"mm":return r+(1===e?t?"minuta":"minuto":2===e?t||o?"minuti":"minutama":e<5?t||o?"minute":"minutami":t||o?"minut":"minutami");case"h":return t?"ena ura":"eno uro";case"hh":return r+(1===e?t?"ura":"uro":2===e?t||o?"uri":"urama":e<5?t||o?"ure":"urami":t||o?"ur":"urami");case"d":return t||o?"en dan":"enim dnem";case"dd":return r+(1===e?t||o?"dan":"dnem":2===e?t||o?"dni":"dnevoma":t||o?"dni":"dnevi");case"M":return t||o?"en mesec":"enim mesecem";case"MM":return r+(1===e?t||o?"mesec":"mesecem":2===e?t||o?"meseca":"mesecema":e<5?t||o?"mesece":"meseci":t||o?"mesecev":"meseci");case"y":return t||o?"eno leto":"enim letom";case"yy":return r+(1===e?t||o?"leto":"letom":2===e?t||o?"leti":"letoma":e<5?t||o?"leta":"leti":t||o?"let":"leti")}}n(0).defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(e){return"M"===e.charAt(0)},meridiem:function(e,t,n){return e<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",ss:"%d sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";var t={words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,t){return 1===e?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,n,o){var r=t.words[o];return 1===o.length?n?r[0]:r[1]:e+" "+t.correctGrammaticalCase(e,r)}};e.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:"dan",dd:t.translate,M:"mesec",MM:t.translate,y:"godinu",yy:t.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(0))},function(e,t,n){!function(e){"use strict";var t={words:{ss:["секунда","секунде","секунди"],m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(e,t){return 1===e?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,n,o){var r=t.words[o];return 1===o.length?n?r[0]:r[1]:e+" "+t.correctGrammaticalCase(e,r)}};e.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){return["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:"дан",dd:t.translate,M:"месец",MM:t.translate,y:"годину",yy:t.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(0))},function(e,t,n){!function(e){"use strict";n(0).defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",ss:"%d mzuzwana",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(e,t,n){return e<11?"ekuseni":e<15?"emini":e<19?"entsambama":"ebusuku"},meridiemHour:function(e,t){return 12===e&&(e=0),"ekuseni"===t?e:"emini"===t?e>=11?e:e+12:"entsambama"===t||"ebusuku"===t?0===e?0:e+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}(e|a)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"e":1===t?"a":2===t?"a":"e")},week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",ss:"sekunde %d",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}})}()},function(e,t,n){!function(e){"use strict";var t={1:"௧",2:"௨",3:"௩",4:"௪",5:"௫",6:"௬",7:"௭",8:"௮",9:"௯",0:"௦"},n={"௧":"1","௨":"2","௩":"3","௪":"4","௫":"5","௬":"6","௭":"7","௮":"8","௯":"9","௦":"0"};e.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",ss:"%d விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},dayOfMonthOrdinalParse:/\d{1,2}வது/,ordinal:function(e){return e+"வது"},preparse:function(e){return e.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,function(e){return n[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return t[e]})},meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(e,t,n){return e<2?" யாமம்":e<6?" வைகறை":e<10?" காலை":e<14?" நண்பகல்":e<18?" எற்பாடு":e<22?" மாலை":" யாமம்"},meridiemHour:function(e,t){return 12===e&&(e=0),"யாமம்"===t?e<2?e:e+12:"வைகறை"===t||"காலை"===t?e:"நண்பகல்"===t&&e>=10?e:e+12},week:{dow:0,doy:6}})}(n(0))},function(e,t,n){!function(e){"use strict";n(0).defineLocale("te",{months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),monthsParseExact:!0,weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[నేడు] LT",nextDay:"[రేపు] LT",nextWeek:"dddd, LT",lastDay:"[నిన్న] LT",lastWeek:"[గత] dddd, LT",sameElse:"L"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",ss:"%d సెకన్లు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"},dayOfMonthOrdinalParse:/\d{1,2}వ/,ordinal:"%dవ",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(e,t){return 12===e&&(e=0),"రాత్రి"===t?e<4?e:e+12:"ఉదయం"===t?e:"మధ్యాహ్నం"===t?e>=10?e:e+12:"సాయంత్రం"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"రాత్రి":e<10?"ఉదయం":e<17?"మధ్యాహ్నం":e<20?"సాయంత్రం":"రాత్రి"},week:{dow:0,doy:6}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"minutu balun",ss:"minutu %d",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";var t={0:"-ум",1:"-ум",2:"-юм",3:"-юм",4:"-ум",5:"-ум",6:"-ум",7:"-ум",8:"-ум",9:"-ум",10:"-ум",12:"-ум",13:"-ум",20:"-ум",30:"-юм",40:"-ум",50:"-ум",60:"-ум",70:"-ум",80:"-ум",90:"-ум",100:"-ум"};e.defineLocale("tg",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе".split("_"),weekdaysShort:"яшб_дшб_сшб_чшб_пшб_ҷум_шнб".split("_"),weekdaysMin:"яш_дш_сш_чш_пш_ҷм_шб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Имрӯз соати] LT",nextDay:"[Пагоҳ соати] LT",lastDay:"[Дирӯз соати] LT",nextWeek:"dddd[и] [ҳафтаи оянда соати] LT",lastWeek:"dddd[и] [ҳафтаи гузашта соати] LT",sameElse:"L"},relativeTime:{future:"баъди %s",past:"%s пеш",s:"якчанд сония",m:"як дақиқа",mm:"%d дақиқа",h:"як соат",hh:"%d соат",d:"як рӯз",dd:"%d рӯз",M:"як моҳ",MM:"%d моҳ",y:"як сол",yy:"%d сол"},meridiemParse:/шаб|субҳ|рӯз|бегоҳ/,meridiemHour:function(e,t){return 12===e&&(e=0),"шаб"===t?e<4?e:e+12:"субҳ"===t?e:"рӯз"===t?e>=11?e:e+12:"бегоҳ"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"шаб":e<11?"субҳ":e<16?"рӯз":e<19?"бегоҳ":"шаб"},dayOfMonthOrdinalParse:/\d{1,2}-(ум|юм)/,ordinal:function(e){return e+(t[e]||t[e%10]||t[e>=100?100:null])},week:{dow:1,doy:7}})}(n(0))},function(e,t,n){!function(e){"use strict";n(0).defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(e){return"หลังเที่ยง"===e},meridiem:function(e,t,n){return e<12?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",ss:"%d วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";var t="pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");function n(e,n,o,r){var a=function(e){var n=Math.floor(e%1e3/100),o=Math.floor(e%100/10),r=e%10,a="";return n>0&&(a+=t[n]+"vatlh"),o>0&&(a+=(""!==a?" ":"")+t[o]+"maH"),r>0&&(a+=(""!==a?" ":"")+t[r]),""===a?"pagh":a}(e);switch(o){case"ss":return a+" lup";case"mm":return a+" tup";case"hh":return a+" rep";case"dd":return a+" jaj";case"MM":return a+" jar";case"yy":return a+" DIS"}}e.defineLocale("tlh",{months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa’leS] LT",nextWeek:"LLL",lastDay:"[wa’Hu’] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:function(e){var t=e;return-1!==e.indexOf("jaj")?t.slice(0,-3)+"leS":-1!==e.indexOf("jar")?t.slice(0,-3)+"waQ":-1!==e.indexOf("DIS")?t.slice(0,-3)+"nem":t+" pIq"},past:function(e){var t=e;return-1!==e.indexOf("jaj")?t.slice(0,-3)+"Hu’":-1!==e.indexOf("jar")?t.slice(0,-3)+"wen":-1!==e.indexOf("DIS")?t.slice(0,-3)+"ben":t+" ret"},s:"puS lup",ss:n,m:"wa’ tup",mm:n,h:"wa’ rep",hh:n,d:"wa’ jaj",dd:n,M:"wa’ jar",MM:n,y:"wa’ DIS",yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(e,t,n){!function(e){"use strict";var t={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};e.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(e,n){switch(n){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'ıncı";var o=e%10;return e+(t[o]||t[e%100-o]||t[e>=100?100:null])}},week:{dow:1,doy:7}})}(n(0))},function(e,t,n){!function(e){"use strict";function t(e,t,n,o){var r={s:["viensas secunds","'iensas secunds"],ss:[e+" secunds",e+" secunds"],m:["'n míut","'iens míut"],mm:[e+" míuts",e+" míuts"],h:["'n þora","'iensa þora"],hh:[e+" þoras",e+" þoras"],d:["'n ziua","'iensa ziua"],dd:[e+" ziuas",e+" ziuas"],M:["'n mes","'iens mes"],MM:[e+" mesen",e+" mesen"],y:["'n ar","'iens ar"],yy:[e+" ars",e+" ars"]};return o?r[n][0]:t?r[n][0]:r[n][1]}n(0).defineLocale("tzl",{months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(e){return"d'o"===e.toLowerCase()},meridiem:function(e,t,n){return e>11?n?"d'o":"D'O":n?"d'a":"D'A"},calendar:{sameDay:"[oxhi à] LT",nextDay:"[demà à] LT",nextWeek:"dddd [à] LT",lastDay:"[ieiri à] LT",lastWeek:"[sür el] dddd [lasteu à] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",ss:"%d ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,doy:12}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",ss:"%d imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("ug-cn",{months:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),monthsShort:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),weekdays:"يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە".split("_"),weekdaysShort:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),weekdaysMin:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-يىلىM-ئاينىڭD-كۈنى",LLL:"YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm",LLLL:"dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm"},meridiemParse:/يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,meridiemHour:function(e,t){return 12===e&&(e=0),"يېرىم كېچە"===t||"سەھەر"===t||"چۈشتىن بۇرۇن"===t?e:"چۈشتىن كېيىن"===t||"كەچ"===t?e+12:e>=11?e:e+12},meridiem:function(e,t,n){var o=100*e+t;return o<600?"يېرىم كېچە":o<900?"سەھەر":o<1130?"چۈشتىن بۇرۇن":o<1230?"چۈش":o<1800?"چۈشتىن كېيىن":"كەچ"},calendar:{sameDay:"[بۈگۈن سائەت] LT",nextDay:"[ئەتە سائەت] LT",nextWeek:"[كېلەركى] dddd [سائەت] LT",lastDay:"[تۆنۈگۈن] LT",lastWeek:"[ئالدىنقى] dddd [سائەت] LT",sameElse:"L"},relativeTime:{future:"%s كېيىن",past:"%s بۇرۇن",s:"نەچچە سېكونت",ss:"%d سېكونت",m:"بىر مىنۇت",mm:"%d مىنۇت",h:"بىر سائەت",hh:"%d سائەت",d:"بىر كۈن",dd:"%d كۈن",M:"بىر ئاي",MM:"%d ئاي",y:"بىر يىل",yy:"%d يىل"},dayOfMonthOrdinalParse:/\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"-كۈنى";case"w":case"W":return e+"-ھەپتە";default:return e}},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:7}})}()},function(e,t,n){!function(e){"use strict";function t(e,t,n){var o,r;return"m"===n?t?"хвилина":"хвилину":"h"===n?t?"година":"годину":e+" "+(o=+e,r={ss:t?"секунда_секунди_секунд":"секунду_секунди_секунд",mm:t?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:t?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"}[n].split("_"),o%10==1&&o%100!=11?r[0]:o%10>=2&&o%10<=4&&(o%100<10||o%100>=20)?r[1]:r[2])}function n(e){return function(){return e+"о"+(11===this.hours()?"б":"")+"] LT"}}e.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:function(e,t){var n={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")};return!0===e?n.nominative.slice(1,7).concat(n.nominative.slice(0,1)):e?n[/(\[[ВвУу]\]) ?dddd/.test(t)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(t)?"genitive":"nominative"][e.day()]:n.nominative},weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:n("[Сьогодні "),nextDay:n("[Завтра "),lastDay:n("[Вчора "),nextWeek:n("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return n("[Минулої] dddd [").call(this);case 1:case 2:case 4:return n("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",ss:t,m:t,mm:t,h:"годину",hh:t,d:"день",dd:t,M:"місяць",MM:t,y:"рік",yy:t},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(e){return/^(дня|вечора)$/.test(e)},meridiem:function(e,t,n){return e<4?"ночі":e<12?"ранку":e<17?"дня":"вечора"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":case"w":case"W":return e+"-й";case"D":return e+"-го";default:return e}},week:{dow:1,doy:7}})}(n(0))},function(e,t,n){!function(e){"use strict";var t=["جنوری","فروری","مارچ","اپریل","مئی","جون","جولائی","اگست","ستمبر","اکتوبر","نومبر","دسمبر"],n=["اتوار","پیر","منگل","بدھ","جمعرات","جمعہ","ہفتہ"];e.defineLocale("ur",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(e){return"شام"===e},meridiem:function(e,t,n){return e<12?"صبح":"شام"},calendar:{sameDay:"[آج بوقت] LT",nextDay:"[کل بوقت] LT",nextWeek:"dddd [بوقت] LT",lastDay:"[گذشتہ روز بوقت] LT",lastWeek:"[گذشتہ] dddd [بوقت] LT",sameElse:"L"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",ss:"%d سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:4}})}(n(0))},function(e,t,n){!function(e){"use strict";n(0).defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",ss:"%d фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",ss:"%d soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,t,n){return e<12?n?"sa":"SA":n?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",ss:"%d giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("x-pseudo",{months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),monthsParseExact:!0,weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~ódá~ý át] LT",nextDay:"[T~ómó~rró~w át] LT",nextWeek:"dddd [át] LT",lastDay:"[Ý~ést~érdá~ý át] LT",lastWeek:"[L~ást] dddd [át] LT",sameElse:"L"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",ss:"%d s~écóñ~ds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("yo",{months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Ònì ni] LT",nextDay:"[Ọ̀la ni] LT",nextWeek:"dddd [Ọsẹ̀ tón'bọ] [ni] LT",lastDay:"[Àna ni] LT",lastWeek:"dddd [Ọsẹ̀ tólọ́] [ni] LT",sameElse:"L"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",ss:"aayá %d",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"},dayOfMonthOrdinalParse:/ọjọ́\s\d{1,2}/,ordinal:"ọjọ́ %d",week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"下午"===t||"晚上"===t?e+12:e>=11?e:e+12},meridiem:function(e,t,n){var o=100*e+t;return o<600?"凌晨":o<900?"早上":o<1130?"上午":o<1230?"中午":o<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"周";default:return e}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",ss:"%d 秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"中午"===t?e>=11?e:e+12:"下午"===t||"晚上"===t?e+12:void 0},meridiem:function(e,t,n){var o=100*e+t;return o<600?"凌晨":o<900?"早上":o<1130?"上午":o<1230?"中午":o<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}()},function(e,t,n){!function(e){"use strict";n(0).defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"中午"===t?e>=11?e:e+12:"下午"===t||"晚上"===t?e+12:void 0},meridiem:function(e,t,n){var o=100*e+t;return o<600?"凌晨":o<900?"早上":o<1130?"上午":o<1230?"中午":o<1800?"下午":"晚上"},calendar:{sameDay:"[今天] LT",nextDay:"[明天] LT",nextWeek:"[下]dddd LT",lastDay:"[昨天] LT",lastWeek:"[上]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}()},function(e,t,n){"use strict";function o(e){return function(){return e}}var r=function(){};r.thatReturns=o,r.thatReturnsFalse=o(!1),r.thatReturnsTrue=o(!0),r.thatReturnsNull=o(null),r.thatReturnsThis=function(){return this},r.thatReturnsArgument=function(e){return e},e.exports=r},function(e,t){var n,o,r=9007199254740991,a="[object Arguments]",i="[object Function]",p="[object GeneratorFunction]",s=/^(?:0|[1-9]\d*)$/,c=Object.prototype,b=c.hasOwnProperty,M=c.toString,l=c.propertyIsEnumerable,u=(n=Object.keys,o=Object,function(e){return n(o(e))}),d=Math.max,z=!l.call({valueOf:1},"valueOf");function f(e,t,n){var o=e[t];b.call(e,t)&&h(o,n)&&(void 0!==n||t in e)||(e[t]=n)}function O(e,t){return!!(t=null==t?r:t)&&("number"==typeof e||s.test(e))&&e>-1&&e%1==0&&e<t}function A(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||c)}function h(e,t){return e===t||e!=e&&t!=t}var m=Array.isArray;function q(e){return null!=e&&function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=r}(e.length)&&!function(e){var t=_(e)?M.call(e):"";return t==i||t==p}(e)}function _(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}var W=function(e){return t=function(t,n){var o=-1,r=n.length,a=r>1?n[r-1]:void 0,i=r>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(r--,a):void 0,i&&function(e,t,n){if(!_(n))return!1;var o=typeof t;return!!("number"==o?q(n)&&O(t,n.length):"string"==o&&t in n)&&h(n[t],e)}(n[0],n[1],i)&&(a=r<3?void 0:a,r=1),t=Object(t);++o<r;){var p=n[o];p&&e(t,p)}return t},n=d(void 0===n?t.length-1:n,0),function(){for(var e=arguments,o=-1,r=d(e.length-n,0),a=Array(r);++o<r;)a[o]=e[n+o];o=-1;for(var i=Array(n+1);++o<n;)i[o]=e[o];return i[n]=a,function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}(t,this,i)};var t,n}(function(e,t){if(z||A(t)||q(t))!function(e,t,n,o){n||(n={});for(var r=-1,a=t.length;++r<a;){var i=t[r];f(n,i,e[i])}}(t,function(e){return q(e)?function(e,t){var n=m(e)||function(e){return function(e){return function(e){return!!e&&"object"==typeof e}(e)&&q(e)}(e)&&b.call(e,"callee")&&(!l.call(e,"callee")||M.call(e)==a)}(e)?function(e,t){for(var n=-1,o=Array(e);++n<e;)o[n]=t(n);return o}(e.length,String):[],o=n.length,r=!!o;for(var i in e)!t&&!b.call(e,i)||r&&("length"==i||O(i,o))||n.push(i);return n}(e):function(e){if(!A(e))return u(e);var t=[];for(var n in Object(e))b.call(e,n)&&"constructor"!=n&&t.push(n);return t}(e)}(t),e);else for(var n in t)b.call(t,n)&&f(e,n,t[n])});e.exports=W},function(e,t){e.exports=function(e,t){for(var n=-1,o=null==e?0:e.length;++n<o&&!1!==t(e[n],n,e););return e}},function(e,t){e.exports=function(e,t){for(var n=-1,o=null==e?0:e.length;++n<o;)if(t(e[n],n,e))return!0;return!1}},function(e,t,n){var o=n(229),r=n(370),a=n(230);e.exports=function(e,t,n,i,p,s){var c=1&n,b=e.length,M=t.length;if(b!=M&&!(c&&M>b))return!1;var l=s.get(e);if(l&&s.get(t))return l==t;var u=-1,d=!0,z=2&n?new o:void 0;for(s.set(e,t),s.set(t,e);++u<b;){var f=e[u],O=t[u];if(i)var A=c?i(O,f,u,t,e,s):i(f,O,u,e,t,s);if(void 0!==A){if(A)continue;d=!1;break}if(z){if(!r(t,function(e,t){if(!a(z,t)&&(f===e||p(f,e,n,i,s)))return z.push(t)})){d=!1;break}}else if(f!==O&&!p(f,O,n,i,s)){d=!1;break}}return s.delete(e),s.delete(t),d}},function(e,t,n){var o=n(373),r=n(165),a=n(59);e.exports=function(e){return o(e,a,r)}},function(e,t,n){var o=n(164),r=n(26);e.exports=function(e,t,n){var a=t(e);return r(e)?a:o(a,n(e))}},function(e,t){e.exports=function(e,t){for(var n=-1,o=null==e?0:e.length,r=0,a=[];++n<o;){var i=e[n];t(i,n,e)&&(a[r++]=i)}return a}},function(e,t){e.exports=function(){return[]}},function(e,t,n){var o=n(34);e.exports=function(e){return e==e&&!o(e)}},function(e,t){e.exports=function(e,t){return function(n){return null!=n&&n[e]===t&&(void 0!==t||e in Object(n))}}},function(e,t,n){var o=n(374),r=n(594),a=n(77),i=n(26);e.exports=function(e,t){return(i(e)?o:r)(e,a(t,3))}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.reducer=t.requests=t.initialRequestsState=t.data=void 0,t.isFetchingRewindStatus=function(e){return!!e.jetpack.rewind.requests.isFetchingRewindStatus},t.getRewindStatus=function(e){return(0,r.default)(e.jetpack.rewind,["data","status"],{})};var o=n(15),r=p(n(22)),a=p(n(23)),i=n(14);function p(e){return e&&e.__esModule?e:{default:e}}var s=t.data=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1];switch(t.type){case i.REWIND_STATUS_FETCH_RECEIVE:return(0,a.default)({},e,{status:t.status});case i.MOCK_SWITCH_REWIND_STATE:return(0,a.default)({},e,{status:t.rewindState});default:return e}},c=t.initialRequestsState={isFetchingRewindStatus:!1},b=t.requests=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:c;switch(arguments[1].type){case i.REWIND_STATUS_FETCH:return(0,a.default)({},e,{isFetchingRewindStatus:!0});case i.REWIND_STATUS_FETCH_RECEIVE:case i.REWIND_STATUS_FETCH_FAIL:return(0,a.default)({},e,{isFetchingRewindStatus:!1});default:return e}};t.reducer=(0,o.combineReducers)({data:s,requests:b})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.reducer=void 0;var o=s(n(47));t.getJetpackNotices=function(e){return e.jetpack.jetpackNotices.notice},t.getJetpackStateNoticesErrorCode=function(e){return(0,a.default)(e.jetpack.initialState,["jetpackStateNotices","errorCode"])},t.getJetpackStateNoticesMessageCode=function(e){return(0,a.default)(e.jetpack.initialState,["jetpackStateNotices","messageCode"])},t.getJetpackStateNoticesErrorDescription=function(e){return(0,a.default)(e.jetpack.initialState,["jetpackStateNotices","errorDescription"])},t.isNoticeDismissed=function(e,t){return(0,a.default)(e.jetpack.jetpackNotices.dismissed,[t],!1)};var r=n(15),a=s(n(22)),i=s(n(23)),p=n(14);function s(e){return e&&e.__esModule?e:{default:e}}t.reducer=(0,r.combineReducers)({notice:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];switch(arguments[1].type){case p.DISCONNECT_SITE_SUCCESS:return"disconnected";case p.JUMPSTART_ACTIVATE_SUCCESS:return"new_connection_jumpstart";case p.JUMPSTART_SKIP:return"new_connection_no_jumpstart";default:return e}},dismissed:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.Initial_State.dismissedNotices,t=arguments[1];switch(t.type){case p.JETPACK_ACTION_NOTICES_DISMISS:return(0,i.default)({},e,(0,o.default)({},t.notice,!0));case p.JETPACK_NOTICES_DISMISS_SUCCESS:return(0,i.default)({},e,t.dismissedNotices);case p.RESET_OPTIONS_SUCCESS:return!1;default:return e}}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.reducer=t.display=void 0,t.canDisplayDevCard=function(e){return!!e.jetpack.devCard.display};var o=n(15),r=n(14),a=t.display=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];switch(arguments[1].type){case r.DEV_CARD_DISPLAY:return!0;case r.DEV_CARD_HIDE:return!1;default:return e}};t.reducer=(0,o.combineReducers)({display:a})},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e,t){var n={};for(var o in e)t.indexOf(o)>=0||Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o]);return n}},function(e,t,n){var o=n(164),r=n(158),a=n(165),i=n(375),p=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)o(t,a(e)),e=r(e);return t}:i;e.exports=p},function(e,t,n){var o=n(373),r=n(383),a=n(122);e.exports=function(e){return o(e,a,r)}},function(e,t){e.exports=function(e,t,n){var o=-1,r=e.length;t<0&&(t=-t>r?0:r+t),(n=n>r?r:n)<0&&(n+=r),r=t>n?0:n-t>>>0,t>>>=0;for(var a=Array(r);++o<r;)a[o]=e[o+t];return a}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=l(n(10)),r=l(n(3)),a=l(n(4)),i=l(n(7)),p=l(n(5)),s=l(n(6)),c=l(n(2)),b=l(n(12)),M=l(n(85));function l(e){return e&&e.__esModule?e:{default:e}}n(758);var u=function(e){function t(){var e,n,o,i;(0,a.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=o=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(c))),o.focus=function(){o.refs.textField.focus()},o.selectOnFocus=function(e){e.target.select()},i=n,(0,p.default)(o,i)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e=this.props,t=e.className,n=e.selectOnFocus,r=(0,b.default)(t,{"dops-text-input":!0,"is-error":this.props.isError,"is-valid":this.props.isValid}),a=(0,M.default)(this.props,"selectOnFocus","isError","isValid");return c.default.createElement("input",(0,o.default)({},a,{ref:"textField",className:r,onClick:n?this.selectOnFocus:null}))}}]),t}(c.default.Component);u.displayName="TextInput",u.defaultProps={isError:!1,isValid:!1,selectOnFocus:!1,type:"text"},t.default=u,e.exports=t.default},function(e,t,n){"use strict";var o=n(19),r=n(637),a=n(642),i=n(643),p=n(135);function s(e){p.call(this,"digest"),this._hash=e}o(s,p),s.prototype._update=function(e){this._hash.update(e)},s.prototype._final=function(){return this._hash.digest()},e.exports=function(e){return"md5"===(e=e.toLowerCase())?new r:"rmd160"===e||"ripemd160"===e?new a:new s(i(e))}},function(e,t,n){(function(e){function n(e){return Object.prototype.toString.call(e)}t.isArray=function(e){return Array.isArray?Array.isArray(e):"[object Array]"===n(e)},t.isBoolean=function(e){return"boolean"==typeof e},t.isNull=function(e){return null===e},t.isNullOrUndefined=function(e){return null==e},t.isNumber=function(e){return"number"==typeof e},t.isString=function(e){return"string"==typeof e},t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=function(e){return void 0===e},t.isRegExp=function(e){return"[object RegExp]"===n(e)},t.isObject=function(e){return"object"==typeof e&&null!==e},t.isDate=function(e){return"[object Date]"===n(e)},t.isError=function(e){return"[object Error]"===n(e)||e instanceof Error},t.isFunction=function(e){return"function"==typeof e},t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=e.isBuffer}).call(this,n(57).Buffer)},function(e,t,n){(function(t){e.exports=function(e,n){for(var o=Math.min(e.length,n.length),r=new t(o),a=0;a<o;++a)r[a]=e[a]^n[a];return r}}).call(this,n(57).Buffer)},function(e,t,n){var o=t;o.bignum=n(48),o.define=n(847).define,o.base=n(391),o.constants=n(700),o.decoders=n(853),o.encoders=n(855)},function(e,t,n){var o=t;o.Reporter=n(850).Reporter,o.DecoderBuffer=n(699).DecoderBuffer,o.EncoderBuffer=n(699).EncoderBuffer,o.Node=n(851)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=d(n(3)),r=d(n(4)),a=d(n(7)),i=d(n(5)),p=d(n(6)),s=d(n(1)),c=d(n(2)),b=n(9),M=d(n(54)),l=d(n(651)),u=n(21);function d(e){return e&&e.__esModule?e:{default:e}}var z=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){return!(this.props.plan&&!this.props.userCanPurchasePlan)&&(this.props.arePromotionsActive?c.default.createElement(l.default,this.props):null)}}]),t}(l.default);z.propTypes={callToAction:s.default.string,className:s.default.string,description:s.default.node,event:s.default.string,feature:s.default.string,href:s.default.string,icon:s.default.string,list:s.default.arrayOf(s.default.string),onClick:s.default.func,plan:s.default.string,siteSlug:s.default.string,title:s.default.string.isRequired},z.defaultProps={onClick:M.default,plan:""},t.default=(0,b.connect)(function(e){return{arePromotionsActive:(0,u.arePromotionsActive)(e),userCanPurchasePlan:(0,u.userCanManageModules)(e)}})(z),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,r=(o=n(10))&&o.__esModule?o:{default:o},a=p(n(381)),i=p(n(653));function p(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}var s=(0,r.default)({},a,i);t.default=s,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,r=(o=n(10))&&o.__esModule?o:{default:o},a=p(n(379)),i=p(n(655));function p(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}var s=(0,r.default)({},a,i);t.default=s,e.exports=t.default},function(e,t,n){"use strict";n.r(t);var o=n(11),r=n.n(o),a=n(2),i=n.n(a),p=n(16),s=n.n(p),c=n(1),b=n.n(c);function M(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}n(53);var l=Object.create(null);function u(e){return l[e]||(l[e]=function(e){for(var t="",n=[],o=[],r=void 0,a=0,i=/:([a-zA-Z_$][a-zA-Z0-9_$]*)|\*\*|\*|\(|\)|\\\(|\\\)/g;r=i.exec(e);)r.index!==a&&(o.push(e.slice(a,r.index)),t+=M(e.slice(a,r.index))),r[1]?(t+="([^/]+)",n.push(r[1])):"**"===r[0]?(t+="(.*)",n.push("splat")):"*"===r[0]?(t+="(.*?)",n.push("splat")):"("===r[0]?t+="(?:":")"===r[0]?t+=")?":"\\("===r[0]?t+="\\(":"\\)"===r[0]&&(t+="\\)"),o.push(r[0]),a=i.lastIndex;return a!==e.length&&(o.push(e.slice(a,e.length)),t+=M(e.slice(a,e.length))),{pattern:e,regexpSource:t,paramNames:n,tokens:o}}(e)),l[e]}function d(e,t){"/"!==e.charAt(0)&&(e="/"+e);var n=u(e),o=n.regexpSource,r=n.paramNames,a=n.tokens;"/"!==e.charAt(e.length-1)&&(o+="/?"),"*"===a[a.length-1]&&(o+="$");var i=t.match(new RegExp("^"+o,"i"));if(null==i)return null;var p=i[0],s=t.substr(p.length);if(s){if("/"!==p.charAt(p.length-1))return null;s="/"+s}return{remainingPathname:s,paramNames:r,paramValues:i.slice(1).map(function(e){return e&&decodeURIComponent(e)})}}function z(e){return u(e).paramNames}function f(e,t){t=t||{};for(var n=u(e).tokens,o=0,a="",i=0,p=[],s=void 0,c=void 0,b=0,M=n.length;b<M;++b)if("*"===(s=n[b])||"**"===s)null!=(c=Array.isArray(t.splat)?t.splat[i++]:t.splat)||o>0||r()(!1),null!=c&&(a+=encodeURI(c));else if("("===s)p[o]="",o+=1;else if(")"===s){var l=p.pop();(o-=1)?p[o-1]+=l:a+=l}else if("\\("===s)a+="(";else if("\\)"===s)a+=")";else if(":"===s.charAt(0))if(null!=(c=t[s.substring(1)])||o>0||r()(!1),null==c){if(o){p[o-1]="";for(var d=n.indexOf(s),z=n.slice(d,n.length),f=-1,O=0;O<z.length;O++)if(")"==z[O]){f=O;break}f>0||r()(!1),b=d+f-1}}else o?p[o-1]+=encodeURIComponent(c):a+=encodeURIComponent(c);else o?p[o-1]+=s:a+=s;return o<=0||r()(!1),a.replace(/\/+/g,"/")}var O=function(e,t){var n=e&&e.routes,o=t.routes,r=void 0,a=void 0,i=void 0;if(n){var p=!1;(r=n.filter(function(n){if(p)return!0;var r=-1===o.indexOf(n)||function(e,t,n){return!!e.path&&z(e.path).some(function(e){return t.params[e]!==n.params[e]})}(n,e,t);return r&&(p=!0),r})).reverse(),i=[],a=[],o.forEach(function(e){var t=-1===n.indexOf(e),o=-1!==r.indexOf(e);t||o?i.push(e):a.push(e)})}else r=[],a=[],i=o;return{leaveRoutes:r,changeRoutes:a,enterRoutes:i}};function A(e,t,n){var o=0,r=!1,a=!1,i=!1,p=void 0;function s(){r=!0,a?p=[].concat(Array.prototype.slice.call(arguments)):n.apply(this,arguments)}!function c(){if(!r&&(i=!0,!a)){for(a=!0;!r&&o<e&&i;)i=!1,t.call(this,o++,c,s);a=!1,r?n.apply(this,p):o>=e&&i&&(r=!0,n())}}()}var h=function e(){var t=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.hooks=[],this.add=function(e){return t.hooks.push(e)},this.remove=function(e){return t.hooks=t.hooks.filter(function(t){return t!==e})},this.has=function(e){return-1!==t.hooks.indexOf(e)},this.clear=function(){return t.hooks=[]}};function m(){var e=new h,t=new h;function n(e,t,n,o){var r=e.length<n,a=function(){for(var n=arguments.length,o=Array(n),a=0;a<n;a++)o[a]=arguments[a];e.apply(t,o),r&&(0,o[o.length-1])()};return o.add(a),a}function o(e,t,n){if(e){var o=void 0;A(e,function(e,n,a){t(e,r,function(e){e||o?a(e,o):n()})},n)}else n();function r(e){o=e}}return{runEnterHooks:function(t,r,a){e.clear();var i=function(t){return t.reduce(function(t,o){return o.onEnter&&t.push(n(o.onEnter,o,3,e)),t},[])}(t);return o(i.length,function(t,n,o){i[t](r,n,function(){e.has(i[t])&&(o.apply(void 0,arguments),e.remove(i[t]))})},a)},runChangeHooks:function(e,r,a,i){t.clear();var p=function(e){return e.reduce(function(e,o){return o.onChange&&e.push(n(o.onChange,o,4,t)),e},[])}(e);return o(p.length,function(e,n,o){p[e](r,a,n,function(){t.has(p[e])&&(o.apply(void 0,arguments),t.remove(p[e]))})},i)},runLeaveHooks:function(e,t){for(var n=0,o=e.length;n<o;++n)e[n].onLeave&&e[n].onLeave.call(e[n],t)}}}var q="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function _(e,t,n,o,r){var a=e.pathname,i=e.query;return null!=n&&("/"!==a.charAt(0)&&(a="/"+a),!!(function(e,t){return"/"!==t.charAt(0)&&(t="/"+t),"/"!==e.charAt(e.length-1)&&(e+="/"),"/"!==t.charAt(t.length-1)&&(t+="/"),t===e}(a,n.pathname)||!t&&function(e,t,n){for(var o=e,r=[],a=[],i=0,p=t.length;i<p;++i){var s=t[i].path||"";if("/"===s.charAt(0)&&(o=e,r=[],a=[]),null!==o&&s){var c=d(s,o);if(c?(o=c.remainingPathname,r=[].concat(r,c.paramNames),a=[].concat(a,c.paramValues)):o=null,""===o)return r.every(function(e,t){return String(a[t])===String(n[e])})}}return!1}(a,o,r))&&function(e,t){return null==t?null==e:null==e||function e(t,n){if(t==n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every(function(t,o){return e(t,n[o])});if("object"===(void 0===t?"undefined":q(t))){for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o))if(void 0===t[o]){if(void 0!==n[o])return!1}else{if(!Object.prototype.hasOwnProperty.call(n,o))return!1;if(!e(t[o],n[o]))return!1}return!0}return String(t)===String(n)}(e,t)}(i,n.query))}function W(e){return e&&"function"==typeof e.then}var g=function(e,t){!function(e,t,n){var o=e.length,r=[];if(0===o)return n(null,r);var a=!1,i=0;e.forEach(function(e,p){t(e,p,function(e,t){!function(e,t,p){a||(t?(a=!0,n(t)):(r[e]=p,(a=++i===o)&&n(null,r)))}(p,e,t)})})}(e.routes,function(t,n,o){!function(e,t,n){if(t.component||t.components)n(null,t.component||t.components);else{var o=t.getComponent||t.getComponents;if(o){var r=o.call(t,e,n);W(r)&&r.then(function(e){return n(null,e)},n)}else n()}}(e,t,o)},t)},v=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e};function y(e){return null==e||i.a.isValidElement(e)}function L(e){return y(e)||Array.isArray(e)&&e.every(y)}function R(e){var t,n,o=(t=e.type.defaultProps,n=e.props,v({},t,n));if(o.children){var r=E(o.children,o);r.length&&(o.childRoutes=r),delete o.children}return o}function E(e,t){var n=[];return i.a.Children.forEach(e,function(e){if(i.a.isValidElement(e))if(e.type.createRouteFromReactElement){var o=e.type.createRouteFromReactElement(e,t);o&&n.push(o)}else n.push(R(e))}),n}function w(e){return L(e)?e=E(e):e&&!Array.isArray(e)&&(e=[e]),e}var k=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e};function B(e,t,n,o,r){if(e.childRoutes)return[null,e.childRoutes];if(!e.getChildRoutes)return[];var a=!0,i=void 0,p={location:t,params:T(n,o)},s=e.getChildRoutes(p,function(e,t){t=!e&&w(t),a?i=[e,t]:r(e,t)});return W(s)&&s.then(function(e){return r(null,w(e))},r),a=!1,i}function T(e,t){return function(e,t,n){return t.reduce(function(e,t,o){var r=n&&n[o];return Array.isArray(e[t])?e[t].push(r):e[t]=t in e?[e[t],r]:r,e},{})}(0,e,t)}function S(e,t,n,o){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[],a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:[];void 0===o&&("/"!==t.pathname.charAt(0)&&(t=k({},t,{pathname:"/"+t.pathname})),o=t.pathname),A(e.length,function(n,i,p){!function(e,t,n,o,r,a){var i=e.path||"";if("/"===i.charAt(0)&&(n=t.pathname,o=[],r=[]),null!==n&&i){try{var p=d(i,n);p?(n=p.remainingPathname,o=[].concat(o,p.paramNames),r=[].concat(r,p.paramValues)):n=null}catch(e){a(e)}if(""===n){var s={routes:[e],params:T(o,r)};return void function e(t,n,o,r,a){if(t.indexRoute)a(null,t.indexRoute);else if(t.getIndexRoute){var i={location:n,params:T(o,r)},p=t.getIndexRoute(i,function(e,t){a(e,!e&&w(t)[0])});W(p)&&p.then(function(e){return a(null,w(e)[0])},a)}else if(t.childRoutes||t.getChildRoutes){var s=function(t,i){if(t)a(t);else{var p=i.filter(function(e){return!e.path});A(p.length,function(t,a,i){e(p[t],n,o,r,function(e,n){if(e||n){var o=[p[t]].concat(Array.isArray(n)?n:[n]);i(e,o)}else a()})},function(e,t){a(null,t)})}},c=B(t,n,o,r,s);c&&s.apply(void 0,c)}else a()}(e,t,o,r,function(e,t){var n;e?a(e):(Array.isArray(t)?(n=s.routes).push.apply(n,t):t&&s.routes.push(t),a(null,s))})}}if(null!=n||e.childRoutes){var c=function(i,p){i?a(i):p?S(p,t,function(t,n){t?a(t):n?(n.routes.unshift(e),a(null,n)):a()},n,o,r):a()},b=B(e,t,o,r,c);b&&c.apply(void 0,b)}else a()}(e[n],t,o,r,a,function(e,t){e||t?p(e,t):i()})},n)}var N=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e};function X(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t))return!0;return!1}function C(e,t){var n={},o=m(),r=o.runEnterHooks,a=o.runChangeHooks,i=o.runLeaveHooks,p=void 0;function s(e,n){p&&p.location===e?c(p,n):S(t,e,function(t,o){t?n(t):o?c(N({},o,{location:e}),n):n()})}function c(e,t){var o=O(n,e),p=o.leaveRoutes,s=o.changeRoutes,c=o.enterRoutes;function b(o,r){if(o||r)return M(o,r);g(e,function(o,r){o?t(o):t(null,null,n=N({},e,{components:r}))})}function M(e,n){e?t(e):t(null,n)}i(p,n),p.filter(function(e){return-1===c.indexOf(e)}).forEach(h),a(s,n,e,function(t,n){if(t||n)return M(t,n);r(c,e,b)})}var b=1;function M(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return e.__id__||t&&(e.__id__=b++)}var l=Object.create(null);function u(e){return e.map(function(e){return l[M(e)]}).filter(function(e){return e})}function d(e,o){S(t,e,function(t,r){if(null!=r){p=N({},r,{location:e});for(var a=u(O(n,p).leaveRoutes),i=void 0,s=0,c=a.length;null==i&&s<c;++s)i=a[s](e);o(i)}else o()})}function z(){if(n.routes){for(var e=u(n.routes),t=void 0,o=0,r=e.length;"string"!=typeof t&&o<r;++o)t=e[o]();return t}}var f=void 0,A=void 0;function h(e){var t=M(e);t&&(delete l[t],X(l)||(f&&(f(),f=null),A&&(A(),A=null)))}return{isActive:function(t,o){return _(t=e.createLocation(t),o,n.location,n.routes,n.params)},match:s,listenBeforeLeavingRoute:function(t,n){var o=!X(l),r=M(t,!0);return l[r]=n,o&&(f=e.listenBefore(d),e.listenBeforeUnload&&(A=e.listenBeforeUnload(z))),function(){h(t)}},listen:function(t){function o(o){n.location===o?t(null,n):s(o,function(n,o,r){n?t(n):o?e.replace(o):r&&t(null,r)})}var r=e.listen(o);return n.location?t(null,n):o(e.getCurrentLocation()),r}}}function D(e,t,n){if(e[t])return new Error("<"+n+'> should not have a "'+t+'" prop')}Object(c.shape)({listen:c.func.isRequired,push:c.func.isRequired,replace:c.func.isRequired,go:c.func.isRequired,goBack:c.func.isRequired,goForward:c.func.isRequired});var P=Object(c.oneOfType)([c.func,c.string]),x=Object(c.oneOfType)([P,c.object]),H=Object(c.oneOfType)([c.object,c.element]),F=Object(c.oneOfType)([H,Object(c.arrayOf)(H)]),j=b.a.shape({subscribe:b.a.func.isRequired,eventIndex:b.a.number.isRequired});function Y(e){return"@@contextSubscriber/"+e}function I(e){var t,n,o=Y(e),r=o+"/lastRenderedEventIndex",a=o+"/handleContextUpdate",i=o+"/unsubscribe";return(n={contextTypes:(t={},t[o]=j,t),getInitialState:function(){var e;return this.context[o]?((e={})[r]=this.context[o].eventIndex,e):{}},componentDidMount:function(){this.context[o]&&(this[i]=this.context[o].subscribe(this[a]))},componentWillReceiveProps:function(){var e;this.context[o]&&this.setState(((e={})[r]=this.context[o].eventIndex,e))},componentWillUnmount:function(){this[i]&&(this[i](),this[i]=null)}})[a]=function(e){var t;e!==this.state[r]&&this.setState(((t={})[r]=e,t))},n}var U,V,K,J,G,Q,$=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},Z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ee=s()({displayName:"RouterContext",mixins:[("router",K=Y("router"),J=K+"/listeners",G=K+"/eventIndex",Q=K+"/subscribe",(V={childContextTypes:(U={},U[K]=j.isRequired,U),getChildContext:function(){var e;return(e={})[K]={eventIndex:this[G],subscribe:this[Q]},e},componentWillMount:function(){this[J]=[],this[G]=0},componentWillReceiveProps:function(){this[G]++},componentDidUpdate:function(){var e=this;this[J].forEach(function(t){return t(e[G])})}})[Q]=function(e){var t=this;return this[J].push(e),function(){t[J]=t[J].filter(function(t){return t!==e})}},V)],propTypes:{router:c.object.isRequired,location:c.object.isRequired,routes:c.array.isRequired,params:c.object.isRequired,components:c.array.isRequired,createElement:c.func.isRequired},getDefaultProps:function(){return{createElement:i.a.createElement}},childContextTypes:{router:c.object.isRequired},getChildContext:function(){return{router:this.props.router}},createElement:function(e,t){return null==e?null:this.props.createElement(e,t)},render:function(){var e=this,t=this.props,n=t.location,o=t.routes,a=t.params,p=t.components,s=t.router,c=null;return p&&(c=p.reduceRight(function(t,r,i){if(null==r)return t;var p=o[i],c=function(e,t){var n={};return e.path?(z(e.path).forEach(function(e){Object.prototype.hasOwnProperty.call(t,e)&&(n[e]=t[e])}),n):n}(p,a),b={location:n,params:a,route:p,router:s,routeParams:c,routes:o};if(L(t))b.children=t;else if(t)for(var M in t)Object.prototype.hasOwnProperty.call(t,M)&&(b[M]=t[M]);if("object"===(void 0===r?"undefined":Z(r))){var l={};for(var u in r)Object.prototype.hasOwnProperty.call(r,u)&&(l[u]=e.createElement(r[u],$({key:u},b)));return l}return e.createElement(r,b)},c)),null===c||!1===c||i.a.isValidElement(c)||r()(!1),c}}),te=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e};function ne(e,t,n){return oe(te({},e,{setRouteLeaveHook:t.listenBeforeLeavingRoute,isActive:t.isActive}),n)}function oe(e,t){var n=t.location,o=t.params,r=t.routes;return e.location=n,e.params=o,e.routes=r,e}var re=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},ae={history:c.object,children:F,routes:F,render:c.func,createElement:c.func,onError:c.func,onUpdate:c.func,matchContext:c.object},ie=s()({displayName:"Router",propTypes:ae,getDefaultProps:function(){return{render:function(e){return i.a.createElement(ee,e)}}},getInitialState:function(){return{location:null,routes:null,params:null,components:null}},handleError:function(e){if(!this.props.onError)throw e;this.props.onError.call(this,e)},createRouterObject:function(e){var t=this.props.matchContext;return t?t.router:ne(this.props.history,this.transitionManager,e)},createTransitionManager:function(){var e=this.props.matchContext;if(e)return e.transitionManager;var t=this.props.history,n=this.props,o=n.routes,a=n.children;return t.getCurrentLocation||r()(!1),C(t,w(o||a))},componentWillMount:function(){var e=this;this.transitionManager=this.createTransitionManager(),this.router=this.createRouterObject(this.state),this._unlisten=this.transitionManager.listen(function(t,n){t?e.handleError(t):(oe(e.router,n),e.setState(n,e.props.onUpdate))})},componentWillReceiveProps:function(e){},componentWillUnmount:function(){this._unlisten&&this._unlisten()},render:function(){var e=this.state,t=e.location,n=e.routes,o=e.params,r=e.components,a=this.props,i=a.createElement,p=a.render,s=function(e,t){var n={};for(var o in e)t.indexOf(o)>=0||Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o]);return n}(a,["createElement","render"]);return null==t?null:(Object.keys(ae).forEach(function(e){return delete s[e]}),p(re({},s,{router:this.router,location:t,routes:n,params:o,components:r,createElement:i})))}}),pe=Object(c.shape)({push:c.func.isRequired,replace:c.func.isRequired,go:c.func.isRequired,goBack:c.func.isRequired,goForward:c.func.isRequired,setRouteLeaveHook:c.func.isRequired,isActive:c.func.isRequired}),se=Object(c.shape)({pathname:c.string.isRequired,search:c.string.isRequired,state:c.object,action:c.string.isRequired,key:c.string}),ce=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e};function be(e,t){return"function"==typeof e?e(t.location):e}var Me=s()({displayName:"Link",mixins:[I("router")],contextTypes:{router:pe},propTypes:{to:Object(c.oneOfType)([c.string,c.object,c.func]),activeStyle:c.object,activeClassName:c.string,onlyActiveOnIndex:c.bool.isRequired,onClick:c.func,target:c.string},getDefaultProps:function(){return{onlyActiveOnIndex:!1,style:{}}},handleClick:function(e){if(this.props.onClick&&this.props.onClick(e),!e.defaultPrevented){var t=this.context.router;t||r()(!1),!function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)&&function(e){return 0===e.button}(e)&&(this.props.target||(e.preventDefault(),t.push(be(this.props.to,t))))}},render:function(){var e=this.props,t=e.to,n=e.activeClassName,o=e.activeStyle,r=e.onlyActiveOnIndex,a=function(e,t){var n={};for(var o in e)t.indexOf(o)>=0||Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o]);return n}(e,["to","activeClassName","activeStyle","onlyActiveOnIndex"]),p=this.context.router;if(p){if(!t)return i.a.createElement("a",a);var s=be(t,p);a.href=p.createHref(s),(n||null!=o&&!function(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t))return!1;return!0}(o))&&p.isActive(s,r)&&(n&&(a.className?a.className+=" "+n:a.className=n),o&&(a.style=ce({},a.style,o)))}return i.a.createElement("a",ce({},a,{onClick:this.handleClick}))}}),le=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},ue=s()({displayName:"IndexLink",render:function(){return i.a.createElement(Me,le({},this.props,{onlyActiveOnIndex:!0}))}}),de=n(95),ze=n.n(de),fe=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e};function Oe(e,t){var n=t&&t.withRef,o=s()({displayName:"WithRouter",mixins:[I("router")],contextTypes:{router:pe},propTypes:{router:pe},getWrappedInstance:function(){return n||r()(!1),this.wrappedInstance},render:function(){var t=this,o=this.props.router||this.context.router;if(!o)return i.a.createElement(e,this.props);var r=o.params,a=o.location,p=o.routes,s=fe({},this.props,{router:o,params:r,location:a,routes:p});return n&&(s.ref=function(e){t.wrappedInstance=e}),i.a.createElement(e,s)}});return o.displayName="withRouter("+function(e){return e.displayName||e.name||"Component"}(e)+")",o.WrappedComponent=e,ze()(o,e)}var Ae=s()({displayName:"Redirect",statics:{createRouteFromReactElement:function(e){var t=R(e);return t.from&&(t.path=t.from),t.onEnter=function(e,n){var o=e.location,r=e.params,a=void 0;if("/"===t.to.charAt(0))a=f(t.to,r);else if(t.to){var i=e.routes.indexOf(t);a=f(Ae.getRoutePattern(e.routes,i-1).replace(/\/*$/,"/")+t.to,r)}else a=o.pathname;n({pathname:a,query:t.query||o.query,state:t.state||o.state})},t},getRoutePattern:function(e,t){for(var n="",o=t;o>=0;o--){var r=e[o].path||"";if(n=r.replace(/\/*$/,"/")+n,0===r.indexOf("/"))break}return"/"+n}},propTypes:{path:c.string,from:c.string,to:c.string.isRequired,query:c.object,state:c.object,onEnter:D,children:D},render:function(){r()(!1)}}),he=Ae,me=s()({displayName:"IndexRedirect",statics:{createRouteFromReactElement:function(e,t){t&&(t.indexRoute=he.createRouteFromReactElement(e))}},propTypes:{to:c.string.isRequired,query:c.object,state:c.object,onEnter:D,children:D},render:function(){r()(!1)}}),qe=s()({displayName:"IndexRoute",statics:{createRouteFromReactElement:function(e,t){t&&(t.indexRoute=R(e))}},propTypes:{path:D,component:P,components:x,getComponent:c.func,getComponents:c.func},render:function(){r()(!1)}}),_e=s()({displayName:"Route",statics:{createRouteFromReactElement:R},propTypes:{path:c.string,component:P,components:x,getComponent:c.func,getComponents:c.func},render:function(){r()(!1)}}),We=n(87),ge=n(107),ve=n.n(ge),ye=n(108),Le=n.n(ye),Re=n(187),Ee=n.n(Re);function we(e){var t=Ee()(e);return ve()(Le()(function(){return t}))(e)}var ke=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},Be=function(e,t){var n=e.history,o=e.routes,a=e.location,i=function(e,t){var n={};for(var o in e)t.indexOf(o)>=0||Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o]);return n}(e,["history","routes","location"]);n||a||r()(!1);var p=C(n=n||we(i),w(o));a=a?n.createLocation(a):n.getCurrentLocation(),p.match(a,function(e,o,r){var a=void 0;if(r){var i=ne(n,p,r);a=ke({},r,{router:i,matchContext:{transitionManager:p,router:i}})}t(e,o&&n.createLocation(o,We.REPLACE),a)})};function Te(e){return function(t){return ve()(Le()(e))(t)}}var Se=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},Ne=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];var o=t.map(function(e){return e.renderRouterContext}).filter(Boolean),r=t.map(function(e){return e.renderRouteComponent}).filter(Boolean),p=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a.createElement;return function(t,n){return r.reduceRight(function(e,t){return t(e,n)},e(t,n))}};return function(e){return o.reduceRight(function(t,n){return n(t,e)},i.a.createElement(ee,Se({},e,{createElement:p(e.createElement)})))}},Xe=n(188),Ce=n.n(Xe),De=!("undefined"==typeof window||!window.document||!window.document.createElement);function Pe(e){var t=void 0;return De&&(t=Te(e)()),t}var xe=Pe(Ce.a),He=n(189),Fe=Pe(n.n(He).a);n.d(t,"Router",function(){return ie}),n.d(t,"Link",function(){return Me}),n.d(t,"IndexLink",function(){return ue}),n.d(t,"withRouter",function(){return Oe}),n.d(t,"IndexRedirect",function(){return me}),n.d(t,"IndexRoute",function(){return qe}),n.d(t,"Redirect",function(){return he}),n.d(t,"Route",function(){return _e}),n.d(t,"createRoutes",function(){return w}),n.d(t,"RouterContext",function(){return ee}),n.d(t,"locationShape",function(){return se}),n.d(t,"routerShape",function(){return pe}),n.d(t,"match",function(){return Be}),n.d(t,"useRouterHistory",function(){return Te}),n.d(t,"formatPattern",function(){return f}),n.d(t,"applyRouterMiddleware",function(){return Ne}),n.d(t,"browserHistory",function(){return xe}),n.d(t,"hashHistory",function(){return Fe}),n.d(t,"createMemoryHistory",function(){return we})},function(e,t,n){"use strict";e.exports=n(434)},function(e,t,n){"use strict";function o(e){var t,n=e.Symbol;return"function"==typeof n?n.observable?t=n.observable:(t=n("observable"),n.observable=t):t="@@observable",t}n.d(t,"a",function(){return o})},function(e,t,n){var o=n(74),r=n(80),a=n(26),i=n(113),p=o?o.prototype:void 0,s=p?p.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(a(t))return r(t,e)+"";if(i(t))return s?s.call(t):"";var n=t+"";return"0"==n&&1/t==-1/0?"-0":n}},function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t,n){var o=n(93);e.exports=Array.isArray||function(e){return"Array"==o(e)}},function(e,t,n){var o=n(63),r=n(26),a=n(39);e.exports=function(e){return"string"==typeof e||!r(e)&&a(e)&&"[object String]"==o(e)}},function(e,t,n){var o=n(34),r=n(113),a=/^\s+|\s+$/g,i=/^[-+]0x[0-9a-f]+$/i,p=/^0b[01]+$/i,s=/^0o[0-7]+$/i,c=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(r(e))return NaN;if(o(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(a,"");var n=p.test(e);return n||s.test(e)?c(e.slice(2),n?2:8):i.test(e)?NaN:+e}},function(e,t,n){"use strict";var o=n(28),r=n(18),a=n(40),i=n(50),p=n(31)("species");e.exports=function(e){var t="function"==typeof r[e]?r[e]:o[e];i&&t&&!t[p]&&a.f(t,p,{configurable:!0,get:function(){return this}})}},function(e,t,n){"use strict";var o=n(72),r=n(163),a=n(405),i=o.rotl32,p=o.sum32,s=o.sum32_5,c=a.ft_1,b=r.BlockHash,M=[1518500249,1859775393,2400959708,3395469782];function l(){if(!(this instanceof l))return new l;b.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}o.inherits(l,b),e.exports=l,l.blockSize=512,l.outSize=160,l.hmacStrength=80,l.padLength=64,l.prototype._update=function(e,t){for(var n=this.W,o=0;o<16;o++)n[o]=e[t+o];for(;o<n.length;o++)n[o]=i(n[o-3]^n[o-8]^n[o-14]^n[o-16],1);var r=this.h[0],a=this.h[1],b=this.h[2],l=this.h[3],u=this.h[4];for(o=0;o<n.length;o++){var d=~~(o/20),z=s(i(r,5),c(d,a,b,l),u,n[o],M[d]);u=l,l=b,b=i(a,30),a=r,r=z}this.h[0]=p(this.h[0],r),this.h[1]=p(this.h[1],a),this.h[2]=p(this.h[2],b),this.h[3]=p(this.h[3],l),this.h[4]=p(this.h[4],u)},l.prototype._digest=function(e){return"hex"===e?o.toHex32(this.h,"big"):o.split32(this.h,"big")}},function(e,t,n){"use strict";var o=n(72).rotr32;function r(e,t,n){return e&t^~e&n}function a(e,t,n){return e&t^e&n^t&n}function i(e,t,n){return e^t^n}t.ft_1=function(e,t,n,o){return 0===e?r(t,n,o):1===e||3===e?i(t,n,o):2===e?a(t,n,o):void 0},t.ch32=r,t.maj32=a,t.p32=i,t.s0_256=function(e){return o(e,2)^o(e,13)^o(e,22)},t.s1_256=function(e){return o(e,6)^o(e,11)^o(e,25)},t.g0_256=function(e){return o(e,7)^o(e,18)^e>>>3},t.g1_256=function(e){return o(e,17)^o(e,19)^e>>>10}},function(e,t,n){var o=n(111);e.exports=function(e){return"function"==typeof e?e:o}},function(e,t,n){var o=n(589),r=n(590);e.exports=function(e,t){return null!=e&&r(e,t,o)}},function(e,t){e.exports=function(e){return function(t){return null==t?void 0:t[e]}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.reducer=t.requests=t.items=t.initialRequestsState=void 0,t.getTrackingSettings=function(e){return e.jetpack.trackingSettings.items},t.isFetchingTrackingSettingsList=function(e){return e.jetpack.trackingSettings.requests.fetchingTrackingSettings},t.isUpdatingTrackingSettings=function(e){return e.jetpack.trackingSettings.requests.updatingTrackingSettings};var o,r=n(15),a=(o=n(23))&&o.__esModule?o:{default:o},i=n(14),p=t.initialRequestsState={fetchingTrackingSettings:!1,updatingTrackingSettings:!1},s=t.items=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1];switch(t.type){case i.USER_TRACKING_SETTINGS_FETCH_SUCCESS:return(0,a.default)({},e,t.settings);case i.USER_TRACKING_SETTINGS_UPDATE_SUCCESS:return(0,a.default)({},e,t.updatedSettings);default:return e}},c=t.requests=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:p;switch(arguments[1].type){case i.USER_TRACKING_SETTINGS_FETCH:return(0,a.default)({},e,{fetchingTrackingSettings:!0});case i.USER_TRACKING_SETTINGS_FETCH_FAIL:case i.USER_TRACKING_SETTINGS_FETCH_SUCCESS:return(0,a.default)({},e,{fetchingTrackingSettings:!1});case i.USER_TRACKING_SETTINGS_UPDATE:return(0,a.default)({},e,{updatingTrackingSettings:!0});case i.USER_TRACKING_SETTINGS_UPDATE_FAIL:case i.USER_TRACKING_SETTINGS_UPDATE_SUCCESS:return(0,a.default)({},e,{updatingTrackingSettings:!1});default:return e}};t.reducer=(0,r.combineReducers)({items:s,requests:c})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.reducer=t.status=void 0;var o=p(n(49));t.getJumpStartStatus=function(e){return e.jetpack.jumpstart.status.showJumpStart},t.isJumpstarting=function(e){return e.jetpack.jumpstart.status.isJumpstarting};var r=n(15),a=p(n(23)),i=n(14);function p(e){return e&&e.__esModule?e:{default:e}}var s={showJumpStart:"undefined"!=typeof window&&"object"===(0,o.default)(window.Initial_State)?window.Initial_State.showJumpstart:{},isJumpstarting:!1},c=t.status=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:s;switch(arguments[1].type){case i.JUMPSTART_ACTIVATE:return(0,a.default)({},e,{isJumpstarting:!0});case i.RESET_OPTIONS_SUCCESS:return(0,a.default)({},e,{showJumpStart:!0});case i.JUMPSTART_ACTIVATE_SUCCESS:case i.JUMPSTART_SKIP:return(0,a.default)({},e,{showJumpStart:!1,isJumpstarting:!1});case i.JUMPSTART_ACTIVATE_FAIL:return(0,a.default)({},e,{isJumpstarting:!1});default:return e}};t.reducer=(0,r.combineReducers)({status:c})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.reducer=t.unsavedSettingsFlag=t.requests=t.initialRequestsState=t.items=void 0;var o=z(n(49)),r=z(n(47)),a=z(n(84));t.getSettings=function(e){return e.jetpack.settings.items},t.getSetting=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";if(""===n||(0,p.default)(e.jetpack.settings.items,n,!1))return(0,p.default)(e.jetpack.settings.items,t,void 0)},t.isFetchingSettingsList=function(e){return!!e.jetpack.settings.requests.fetchingSettingsList},t.isUpdatingSetting=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"object"===(void 0===t?"undefined":(0,o.default)(t))?(0,M.default)((0,l.default)(e.jetpack.settings.requests.settingsSent,function(e,n){return(0,b.default)(t,n)}),function(e){return e}):e.jetpack.settings.requests.settingsSent[t]},t.isSettingActivated=function(e,t){return!!(0,p.default)(e.jetpack.settings.items,[t],!1)},t.toggleSetting=function(e,t){return!!(0,p.default)(e.jetpack.settings.items,[t],!1)},t.areThereUnsavedSettings=function(e){return(0,p.default)(e.jetpack.settings,"unsavedSettingsFlag",!1)},t.appsCardDismissed=function(e){return(0,p.default)(e.jetpack.settings.items,"dismiss_dash_app_card",!1)},t.emptyStatsCardDismissed=function(e){return(0,p.default)(e.jetpack.settings.items,"dismiss_empty_stats_card",!1)},t.showWelcomeForNewPlan=function(e){return(0,p.default)(e.jetpack.settings.items,"show_welcome_for_new_plan",!1)};var i=n(15),p=z(n(22)),s=z(n(23)),c=z(n(120)),b=z(n(35)),M=z(n(179)),l=z(n(378)),u=z(n(595)),d=n(14);function z(e){return e&&e.__esModule?e:{default:e}}var f=t.items=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1];switch(t.type){case d.JETPACK_SET_INITIAL_STATE:return(0,s.default)({},e,t.initialState.settings);case d.JETPACK_SETTINGS_FETCH_RECEIVE:return(0,s.default)({},t.settings);case d.JETPACK_SETTING_UPDATE_SUCCESS:var n=(0,a.default)(t.updatedOption)[0];return(0,s.default)({},e,(0,r.default)({},n,t.updatedOption[n]));case d.JETPACK_SETTINGS_UPDATE_SUCCESS:return(0,s.default)({},e,t.updatedOptions);default:return e}},O=t.initialRequestsState={fetchingSettingsList:!1,settingsSent:{}},A=t.requests=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:O,t=arguments[1];switch(t.type){case d.JETPACK_SETTINGS_FETCH:return(0,s.default)({},e,{fetchingSettingsList:!0});case d.JETPACK_SETTINGS_FETCH_FAIL:case d.JETPACK_SETTINGS_FETCH_RECEIVE:return(0,s.default)({},e,{fetchingSettingsList:!1});case d.JETPACK_SETTING_UPDATE:case d.JETPACK_SETTINGS_UPDATE:return(0,c.default)({},e,{settingsSent:(0,u.default)(t.updatedOptions,function(){return!0})});case d.JETPACK_SETTING_UPDATE_FAIL:case d.JETPACK_SETTING_UPDATE_SUCCESS:case d.JETPACK_SETTINGS_UPDATE_FAIL:case d.JETPACK_SETTINGS_UPDATE_SUCCESS:return(0,c.default)({},e,{settingsSent:(0,u.default)(t.updatedOptions,function(){return!1})});default:return e}},h=t.unsavedSettingsFlag=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];switch(arguments[1].type){case d.JETPACK_SETTINGS_SET_UNSAVED_FLAG:return!0;case d.JETPACK_SETTINGS_CLEAR_UNSAVED_FLAG:return!1;default:return e}};t.reducer=(0,i.combineReducers)({items:f,requests:A,unsavedSettingsFlag:h})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.reducer=void 0,t.getSearchTerm=function(e){return e.jetpack.search.searchTerm},t.isModuleFound=function(e,t){var n=(0,r.default)((0,o.default)(e.jetpack,["modules","items"],{}),["module",t]);if(void 0===n)return!1;var a=(0,o.default)(e.jetpack,["search","searchTerm"],!1);return!a||[n.module,n.name,n.description,n.learn_more_button,n.long_description,n.search_terms,n.additional_search_queries,n.short_description,n.feature?n.feature.toString():""].join(" ").toLowerCase().indexOf(a.toLowerCase())>-1};var o=p(n(22)),r=p(n(413)),a=n(15),i=n(14);function p(e){return e&&e.__esModule?e:{default:e}}t.reducer=(0,a.combineReducers)({searchTerm:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments[1];switch(t.type){case i.JETPACK_SEARCH_TERM:return t.term;default:return e}}})},function(e,t,n){var o=n(596)(n(414));e.exports=o},function(e,t,n){var o=n(228),r=n(77),a=n(176),i=Math.max;e.exports=function(e,t,n){var p=null==e?0:e.length;if(!p)return-1;var s=null==n?0:a(n);return s<0&&(s=i(p+s,0)),o(e,r(t,3),s)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.reducer=t.connectUrls=void 0,t.getExternalServiceConnectUrl=function(e,t){return(0,r.default)(e.jetpack.publicize.connectUrls,t,null)};var o=n(15),r=p(n(22)),a=p(n(23)),i=n(14);function p(e){return e&&e.__esModule?e:{default:e}}var s=t.connectUrls=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1];switch(t.type){case i.JETPACK_SET_INITIAL_STATE:return(0,a.default)({},t.initialState.externalServicesConnectUrls);default:return e}};t.reducer=(0,o.combineReducers)({connectUrls:s})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.reducer=t.google=void 0,t.isFetchingGoogleSiteVerify=c,t.isVerifyingGoogleSite=function(e){return(0,a.default)(e,"jetpack.siteVerify.google.verifying",!1)},t.isConnectedToGoogleSiteVerificationAPI=function(e){return!c(e)&&"no_token_for_user"!==(0,a.default)(e,"jetpack.siteVerify.google.error.code",null)},t.isSiteVerifiedWithGoogle=function(e){return(0,a.default)(e,"jetpack.siteVerify.google.verified",!1)},t.getGoogleSiteVerificationError=function(e){return(0,a.default)(e,"jetpack.siteVerify.google.error",null)},t.getGoogleSearchConsoleUrl=function(e){return(0,a.default)(e,"jetpack.siteVerify.google.searchConsoleUrl",null)},t.getGoogleVerificationConsoleUrl=function(e){return(0,a.default)(e,"jetpack.siteVerify.google.verificationConsoleUrl",null)},t.isGoogleSiteVerificationOwner=function(e){return(0,a.default)(e,"jetpack.siteVerify.google.isOwner",!1)};var o=n(15),r=p(n(23)),a=p(n(22)),i=n(14);function p(e){return e&&e.__esModule?e:{default:e}}var s=t.google=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{fetching:!1,verifying:!1,verified:!1},t=arguments[1];switch(t.type){case i.JETPACK_SITE_VERIFY_GOOGLE_STATUS_FETCH:return(0,r.default)({},e,{fetching:!0});case i.JETPACK_SITE_VERIFY_GOOGLE_STATUS_FETCH_FAIL:return(0,r.default)({},e,{fetching:!1,error:t.error});case i.JETPACK_SITE_VERIFY_GOOGLE_STATUS_FETCH_SUCCESS:return(0,r.default)({},e,{fetching:!1,verified:t.verified,isOwner:t.isOwner,searchConsoleUrl:t.searchConsoleUrl,verificationConsoleUrl:t.verificationConsoleUrl,token:t.token,error:null});case i.JETPACK_SITE_VERIFY_GOOGLE_REQUEST:return(0,r.default)({},e,{verifying:!0});case i.JETPACK_SITE_VERIFY_GOOGLE_REQUEST_SUCCESS:return(0,r.default)({},e,{verifying:!1,verified:t.verified,isOwner:t.isOwner,searchConsoleUrl:t.searchConsoleUrl,verificationConsoleUrl:t.verificationConsoleUrl,error:null});case i.JETPACK_SITE_VERIFY_GOOGLE_REQUEST_FAIL:return(0,r.default)({},e,{verifying:!1,verified:!1,error:t.error});default:return e}};function c(e){return(0,a.default)(e,"jetpack.siteVerify.google.fetching",!1)}t.reducer=(0,o.combineReducers)({google:s})},function(e,t,n){var o=n(34),r=n(730),a=n(402),i=Math.max,p=Math.min;e.exports=function(e,t,n){var s,c,b,M,l,u,d=0,z=!1,f=!1,O=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function A(t){var n=s,o=c;return s=c=void 0,d=t,M=e.apply(o,n)}function h(e){var n=e-u;return void 0===u||n>=t||n<0||f&&e-d>=b}function m(){var e=r();if(h(e))return q(e);l=setTimeout(m,function(e){var n=t-(e-u);return f?p(n,b-(e-d)):n}(e))}function q(e){return l=void 0,O&&s?A(e):(s=c=void 0,M)}function _(){var e=r(),n=h(e);if(s=arguments,c=this,u=e,n){if(void 0===l)return function(e){return d=e,l=setTimeout(m,t),z?A(e):M}(u);if(f)return l=setTimeout(m,t),A(u)}return void 0===l&&(l=setTimeout(m,t)),M}return t=a(t)||0,o(n)&&(z=!!n.leading,b=(f="maxWait"in n)?i(a(n.maxWait)||0,t):b,O="trailing"in n?!!n.trailing:O),_.cancel=function(){void 0!==l&&clearTimeout(l),d=0,s=u=c=l=void 0},_.flush=function(){return void 0===l?M:q(r())},_}},function(e,t,n){var o=n(612),r=n(199),a=n(200);e.exports=function(e){return a(r(e,void 0,o),e+"")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.QuerySitePlugins=void 0;var o=M(n(3)),r=M(n(4)),a=M(n(7)),i=M(n(5)),p=M(n(6)),s=M(n(2)),c=n(9),b=n(103);function M(e){return e&&e.__esModule?e:{default:e}}var l=t.QuerySitePlugins=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"UNSAFE_componentWillMount",value:function(){this.props.isFetchingPluginsData||this.props.fetchPluginsData()}},{key:"render",value:function(){return null}}]),t}(s.default.Component);t.default=(0,c.connect)(function(e){return{isFetchingPluginsData:(0,b.isFetchingPluginsData)(e)}},function(e){return{fetchPluginsData:function(){return e((0,b.fetchPluginsData)())}}})(l)},function(e,t,n){"use strict";(function(t){!t.version||0===t.version.indexOf("v0.")||0===t.version.indexOf("v1.")&&0!==t.version.indexOf("v1.8.")?e.exports={nextTick:function(e,n,o,r){if("function"!=typeof e)throw new TypeError('"callback" argument must be a function');var a,i,p=arguments.length;switch(p){case 0:case 1:return t.nextTick(e);case 2:return t.nextTick(function(){e.call(null,n)});case 3:return t.nextTick(function(){e.call(null,n,o)});case 4:return t.nextTick(function(){e.call(null,n,o,r)});default:for(a=new Array(p-1),i=0;i<a.length;)a[i++]=arguments[i];return t.nextTick(function(){e.apply(null,a)})}}}:e.exports=t}).call(this,n(71))},function(e,t,n){var o=n(25).Buffer;function r(e){o.isBuffer(e)||(e=o.from(e));for(var t=e.length/4|0,n=new Array(t),r=0;r<t;r++)n[r]=e.readUInt32BE(4*r);return n}function a(e){for(;0<e.length;e++)e[0]=0}function i(e,t,n,o,r){for(var a,i,p,s,c=n[0],b=n[1],M=n[2],l=n[3],u=e[0]^t[0],d=e[1]^t[1],z=e[2]^t[2],f=e[3]^t[3],O=4,A=1;A<r;A++)a=c[u>>>24]^b[d>>>16&255]^M[z>>>8&255]^l[255&f]^t[O++],i=c[d>>>24]^b[z>>>16&255]^M[f>>>8&255]^l[255&u]^t[O++],p=c[z>>>24]^b[f>>>16&255]^M[u>>>8&255]^l[255&d]^t[O++],s=c[f>>>24]^b[u>>>16&255]^M[d>>>8&255]^l[255&z]^t[O++],u=a,d=i,z=p,f=s;return a=(o[u>>>24]<<24|o[d>>>16&255]<<16|o[z>>>8&255]<<8|o[255&f])^t[O++],i=(o[d>>>24]<<24|o[z>>>16&255]<<16|o[f>>>8&255]<<8|o[255&u])^t[O++],p=(o[z>>>24]<<24|o[f>>>16&255]<<16|o[u>>>8&255]<<8|o[255&d])^t[O++],s=(o[f>>>24]<<24|o[u>>>16&255]<<16|o[d>>>8&255]<<8|o[255&z])^t[O++],[a>>>=0,i>>>=0,p>>>=0,s>>>=0]}var p=[0,1,2,4,8,16,32,64,128,27,54],s=function(){for(var e=new Array(256),t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;for(var n=[],o=[],r=[[],[],[],[]],a=[[],[],[],[]],i=0,p=0,s=0;s<256;++s){var c=p^p<<1^p<<2^p<<3^p<<4;c=c>>>8^255&c^99,n[i]=c,o[c]=i;var b=e[i],M=e[b],l=e[M],u=257*e[c]^16843008*c;r[0][i]=u<<24|u>>>8,r[1][i]=u<<16|u>>>16,r[2][i]=u<<8|u>>>24,r[3][i]=u,u=16843009*l^65537*M^257*b^16843008*i,a[0][c]=u<<24|u>>>8,a[1][c]=u<<16|u>>>16,a[2][c]=u<<8|u>>>24,a[3][c]=u,0===i?i=p=1:(i=b^e[e[e[l^b]]],p^=e[e[p]])}return{SBOX:n,INV_SBOX:o,SUB_MIX:r,INV_SUB_MIX:a}}();function c(e){this._key=r(e),this._reset()}c.blockSize=16,c.keySize=32,c.prototype.blockSize=c.blockSize,c.prototype.keySize=c.keySize,c.prototype._reset=function(){for(var e=this._key,t=e.length,n=t+6,o=4*(n+1),r=[],a=0;a<t;a++)r[a]=e[a];for(a=t;a<o;a++){var i=r[a-1];a%t==0?(i=i<<8|i>>>24,i=s.SBOX[i>>>24]<<24|s.SBOX[i>>>16&255]<<16|s.SBOX[i>>>8&255]<<8|s.SBOX[255&i],i^=p[a/t|0]<<24):t>6&&a%t==4&&(i=s.SBOX[i>>>24]<<24|s.SBOX[i>>>16&255]<<16|s.SBOX[i>>>8&255]<<8|s.SBOX[255&i]),r[a]=r[a-t]^i}for(var c=[],b=0;b<o;b++){var M=o-b,l=r[M-(b%4?0:4)];c[b]=b<4||M<=4?l:s.INV_SUB_MIX[0][s.SBOX[l>>>24]]^s.INV_SUB_MIX[1][s.SBOX[l>>>16&255]]^s.INV_SUB_MIX[2][s.SBOX[l>>>8&255]]^s.INV_SUB_MIX[3][s.SBOX[255&l]]}this._nRounds=n,this._keySchedule=r,this._invKeySchedule=c},c.prototype.encryptBlockRaw=function(e){return i(e=r(e),this._keySchedule,s.SUB_MIX,s.SBOX,this._nRounds)},c.prototype.encryptBlock=function(e){var t=this.encryptBlockRaw(e),n=o.allocUnsafe(16);return n.writeUInt32BE(t[0],0),n.writeUInt32BE(t[1],4),n.writeUInt32BE(t[2],8),n.writeUInt32BE(t[3],12),n},c.prototype.decryptBlock=function(e){var t=(e=r(e))[1];e[1]=e[3],e[3]=t;var n=i(e,this._invKeySchedule,s.INV_SUB_MIX,s.INV_SBOX,this._nRounds),a=o.allocUnsafe(16);return a.writeUInt32BE(n[0],0),a.writeUInt32BE(n[3],4),a.writeUInt32BE(n[2],8),a.writeUInt32BE(n[1],12),a},c.prototype.scrub=function(){a(this._keySchedule),a(this._invKeySchedule),a(this._key)},e.exports.AES=c},function(e,t,n){var o=n(25).Buffer,r=n(637);e.exports=function(e,t,n,a){if(o.isBuffer(e)||(e=o.from(e,"binary")),t&&(o.isBuffer(t)||(t=o.from(t,"binary")),8!==t.length))throw new RangeError("salt should be Buffer with 8 byte length");for(var i=n/8,p=o.alloc(i),s=o.alloc(a||0),c=o.alloc(0);i>0||a>0;){var b=new r;b.update(c),b.update(e),t&&b.update(t),c=b.digest();var M=0;if(i>0){var l=p.length-i;M=Math.min(i,c.length),c.copy(p,l,0,M),i-=M}if(M<c.length&&a>0){var u=s.length-a,d=Math.min(a,c.length-M);c.copy(s,u,M,M+d),a-=d}}return c.fill(0),{key:p,iv:s}}},function(e,t,n){"use strict";var o=t;o.base=n(828),o.short=n(829),o.mont=n(830),o.edwards=n(831)},function(e,t,n){(function(t){var o=n(846),r=n(858),a=n(859),i=n(645),p=n(684);function s(e){var n;"object"!=typeof e||t.isBuffer(e)||(n=e.passphrase,e=e.key),"string"==typeof e&&(e=new t(e));var s,c,b=a(e,n),M=b.tag,l=b.data;switch(M){case"CERTIFICATE":c=o.certificate.decode(l,"der").tbsCertificate.subjectPublicKeyInfo;case"PUBLIC KEY":switch(c||(c=o.PublicKey.decode(l,"der")),s=c.algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return o.RSAPublicKey.decode(c.subjectPublicKey.data,"der");case"1.2.840.10045.2.1":return c.subjectPrivateKey=c.subjectPublicKey,{type:"ec",data:c};case"1.2.840.10040.4.1":return c.algorithm.params.pub_key=o.DSAparam.decode(c.subjectPublicKey.data,"der"),{type:"dsa",data:c.algorithm.params};default:throw new Error("unknown key id "+s)}throw new Error("unknown key type "+M);case"ENCRYPTED PRIVATE KEY":l=function(e,n){var o=e.algorithm.decrypt.kde.kdeparams.salt,a=parseInt(e.algorithm.decrypt.kde.kdeparams.iters.toString(),10),s=r[e.algorithm.decrypt.cipher.algo.join(".")],c=e.algorithm.decrypt.cipher.iv,b=e.subjectPrivateKey,M=parseInt(s.split("-")[1],10)/8,l=p.pbkdf2Sync(n,o,a,M),u=i.createDecipheriv(s,l,c),d=[];return d.push(u.update(b)),d.push(u.final()),t.concat(d)}(l=o.EncryptedPrivateKey.decode(l,"der"),n);case"PRIVATE KEY":switch(s=(c=o.PrivateKey.decode(l,"der")).algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return o.RSAPrivateKey.decode(c.subjectPrivateKey,"der");case"1.2.840.10045.2.1":return{curve:c.algorithm.curve,privateKey:o.ECPrivateKey.decode(c.subjectPrivateKey,"der").privateKey};case"1.2.840.10040.4.1":return c.algorithm.params.priv_key=o.DSAparam.decode(c.subjectPrivateKey,"der"),{type:"dsa",params:c.algorithm.params};default:throw new Error("unknown key id "+s)}throw new Error("unknown key type "+M);case"RSA PUBLIC KEY":return o.RSAPublicKey.decode(l,"der");case"RSA PRIVATE KEY":return o.RSAPrivateKey.decode(l,"der");case"DSA PRIVATE KEY":return{type:"dsa",params:o.DSAPrivateKey.decode(l,"der")};case"EC PRIVATE KEY":return{curve:(l=o.ECPrivateKey.decode(l,"der")).parameters.value,privateKey:l.privateKey};default:throw new Error("unknown key type "+M)}}e.exports=s,s.signature=o.signature}).call(this,n(57).Buffer)},function(e,t,n){},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=u(n(3)),r=u(n(4)),a=u(n(7)),i=u(n(5)),p=u(n(6)),s=u(n(1)),c=u(n(2)),b=n(8),M=u(n(12)),l=u(n(392));function u(e){return e&&e.__esModule?e:{default:e}}n(888);var d=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){if(!this.props.moduleName)return null;var e={args:{moduleName:this.props.moduleName},components:{link:c.default.createElement("a",{href:"http://jetpack.com/support/module-overrides/",target:"_blank",rel:"noopener noreferrer"})}},t=(0,M.default)("module-overridden-banner",{"is-compact":this.props.compact});return c.default.createElement(l.default,{className:t,title:this.props.moduleName,icon:"cog",description:(0,b.translate)("%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.",e)})}}]),t}(l.default);d.propTypes={moduleName:s.default.string.isRequired},t.default=d,e.exports=t.default},function(e,t,n){"use strict";var o=c(n(10)),r=c(n(3)),a=c(n(4)),i=c(n(7)),p=c(n(5)),s=c(n(6));function c(e){return e&&e.__esModule?e:{default:e}}var b=n(1),M=n(2),l=n(12),u=n(54),d=n(17),z=n(713),f=n(55),O=n(105);n(904);var A=function(e){function t(){var e,n,i,s;(0,a.default)(this,t);for(var c=arguments.length,b=Array(c),u=0;u<c;u++)b[u]=arguments[u];return n=i=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(b))),i.state={expanded:i.props.expanded},i.onClick=function(){i.props.children&&i.setState({expanded:!i.state.expanded}),i.props.onClick&&i.props.onClick(),i.state.expanded?i.props.onClose(i.props.cardKey):i.props.onOpen(i.props.cardKey)},i.getClickAction=function(){if(!i.props.disabled)return i.onClick},i.getActionButton=function(){return i.state.expanded&&i.props.actionButtonExpanded||i.props.actionButton},i.renderActionButton=function(){var e=i.props.clickableHeader?null:i.getClickAction();return i.props.actionButton?M.createElement("button",{className:"dops-foldable-card__action",onClick:e},i.getActionButton()):i.props.children?M.createElement("button",{type:"button",disabled:i.props.disabled,className:"dops-foldable-card__action dops-foldable-card__expand",onClick:e},M.createElement("span",{className:"screen-reader-text"},"More"),M.createElement(f,{icon:i.props.icon,size:24})):void 0},i.renderContent=function(){return M.createElement("div",{className:"dops-foldable-card__content"},i.props.children)},i.renderHeader=function(){var e=i.props.summary?M.createElement("span",{className:"dops-foldable-card__summary"},i.props.summary," "):null,t=i.props.expandedSummary?M.createElement("span",{className:"dops-foldable-card__summary_expanded"},i.props.expandedSummary," "):null,n=i.props.header?M.createElement("div",{className:"dops-foldable-card__header-text"},i.props.header):null,r=i.props.subheader?M.createElement("div",{className:"dops-foldable-card__subheader"},i.props.subheader):null,a={role:"button",tabIndex:0,onClick:i.getClickAction(),onKeyDown:O(i.getClickAction())},p=l("dops-foldable-card__header",{"is-clickable":!!i.props.clickableHeader,"has-border":!!i.props.summary}),s=l("dops-foldable-card__header-text",{"is-clickable":!!i.props.clickableHeaderText});return M.createElement("div",(0,o.default)({className:p},i.props.clickableHeader?a:{}),M.createElement("span",{className:"dops-foldable-card__main"},M.createElement("div",(0,o.default)({className:s},i.props.clickableHeaderText?a:{}),n,r)),M.createElement("span",{className:"dops-foldable-card__secondary"},e,t,i.renderActionButton()))},s=n,(0,p.default)(i,s)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e=this.props.compact?z:d,t=l("dops-foldable-card",this.props.className,{"is-disabled":!!this.props.disabled,"is-expanded":!!this.state.expanded,"has-expanded-summary":!!this.props.expandedSummary});return M.createElement(e,{className:t},this.renderHeader(),this.state.expanded&&this.renderContent())}}]),t}(M.Component);A.propTypes={actionButton:b.element,actionButtonExpanded:b.element,cardKey:b.string,compact:b.bool,disabled:b.bool,expandedSummary:b.oneOfType([b.string,b.element]),expanded:b.bool,icon:b.string,onClick:b.func,onClose:b.func,onOpen:b.func,summary:b.oneOfType([b.string,b.element]),clickableHeader:b.bool,clickableHeaderText:b.bool},A.defaultProps={onOpen:u,onClose:u,cardKey:"",icon:"chevron-down",isExpanded:!1,clickableHeader:!1,clickableHeaderText:!1},e.exports=A},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,r=(o=n(10))&&o.__esModule?o:{default:o},a=p(n(380)),i=p(n(657));function p(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}var s=(0,r.default)({},a,i);t.default=s,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=A(n(3)),r=A(n(4)),a=A(n(7)),i=A(n(5)),p=A(n(6)),s=A(n(1)),c=n(2),b=A(c),M=n(8),l=A(n(17)),u=A(n(54)),d=A(n(12)),z=A(n(55)),f=A(n(105)),O=n(67);function A(e){return e&&e.__esModule?e:{default:e}}var h=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.maybeDismiss=function(e){!a.props.showDismiss||e.keyCode&&27!==e.keyCode||a.props.dismiss(e)},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"componentDidMount",value:function(){document.addEventListener("keydown",this.maybeDismiss.bind(this),!1)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("keydown",this.maybeDismiss.bind(this),!1)}},{key:"clickForeground",value:function(e){e.stopPropagation()}},{key:"render",value:function(){var e=(0,d.default)(this.props.className,"jp-dialogue");return b.default.createElement("div",{className:"jp-dialogue-full__container",role:"presentation",onClick:this.maybeDismiss,onKeyDown:(0,f.default)(this.maybeDismiss)},b.default.createElement("img",{src:O.imagePath+"stars-full.svg",width:"60",height:"60",alt:(0,M.translate)("Stars"),className:"jp-dialogue-full__svg-stars"}),b.default.createElement("img",{src:O.imagePath+"jupiter.svg",width:"50",height:"100",alt:(0,M.translate)("Jupiter"),className:"jp-dialogue-full__svg-jupiter"}),b.default.createElement("div",{className:e,role:"presentation",onClick:this.clickForeground,onKeyDown:(0,f.default)(this.clickForeground)},this.props.svg,b.default.createElement("h1",{className:"jp-dialogue__title"},this.props.title),b.default.createElement(l.default,null,this.props.showDismiss&&b.default.createElement(z.default,{icon:"cross-small",className:"jp-dialogue-full__dismiss",tabIndex:"0",onKeyDown:(0,f.default)(this.props.dismiss),onClick:this.props.dismiss}),this.props.content),b.default.createElement("div",null,this.props.belowContent)))}}]),t}(c.Component);h.propTypes={content:s.default.oneOfType([s.default.string,s.default.object]).isRequired,belowContent:s.default.oneOfType([s.default.string,s.default.object]).isRequired,svg:s.default.oneOfType([s.default.bool,s.default.object]),dismissOnClick:s.default.func,showDismiss:s.default.bool,title:s.default.string},h.defaultProps={svg:!1,showDismiss:!0,dismiss:u.default,content:"",belowContent:"",title:""},t.default=h,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=O(n(47)),r=O(n(3)),a=O(n(4)),i=O(n(7)),p=O(n(5)),s=O(n(6)),c=n(2),b=O(c),M=n(9),l=n(27),u=n(24),d=n(43),z=O(n(29)),f=O(n(1019));function O(e){return e&&e.__esModule?e:{default:e}}var A=function(e){function t(){var e,n,i,s;(0,a.default)(this,t);for(var c=arguments.length,b=Array(c),M=0;M<c;M++)b[M]=arguments[M];return n=i=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(b))),i.toggleModule=function(e,t){i.props.updateOptions((0,o.default)({},e,!t))},s=n,(0,p.default)(i,s)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e=this.props.module(this.props.module_slug);return b.default.createElement("div",{className:"jp-upgrade-notice__enable-module"},b.default.createElement(z.default,{hasChild:!0,disableInDevMode:!0,module:e},b.default.createElement(d.ModuleToggle,{slug:this.props.module_slug,disabled:!1,activated:this.props.getOptionValue(this.props.module_slug),toggling:this.props.isSavingAnyOption(this.props.module_slug),toggleModule:this.toggleModule},b.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,f.default)(e.description)))))}}]),t}(c.Component);t.default=(0,M.connect)(function(e){return{module:function(t){return(0,u.getModule)(e,t)}}})((0,l.withModuleSettingsFormHelpers)(A)),e.exports=t.default},function(e,t,n){"use strict";var o=n(109),r="function"==typeof Symbol&&Symbol.for,a=r?Symbol.for("react.element"):60103,i=r?Symbol.for("react.portal"):60106,p=r?Symbol.for("react.fragment"):60107,s=r?Symbol.for("react.strict_mode"):60108,c=r?Symbol.for("react.profiler"):60114,b=r?Symbol.for("react.provider"):60109,M=r?Symbol.for("react.context"):60110,l=r?Symbol.for("react.concurrent_mode"):60111,u=r?Symbol.for("react.forward_ref"):60112,d=r?Symbol.for("react.suspense"):60113,z=r?Symbol.for("react.memo"):60115,f=r?Symbol.for("react.lazy"):60116,O="function"==typeof Symbol&&Symbol.iterator;function A(e){for(var t=arguments.length-1,n="https://reactjs.org/docs/error-decoder.html?invariant="+e,o=0;o<t;o++)n+="&args[]="+encodeURIComponent(arguments[o+1]);!function(e,t,n,o,r,a,i,p){if(!e){if(e=void 0,void 0===t)e=Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var s=[n,void 0,void 0,void 0,void 0,void 0],c=0;(e=Error(t.replace(/%s/g,function(){return s[c++]}))).name="Invariant Violation"}throw e.framesToPop=1,e}}(!1,"Minified React error #"+e+"; visit %s for the full message or use the non-minified dev environment for full errors and additional helpful warnings. ",n)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m={};function q(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||h}function _(){}function W(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||h}q.prototype.isReactComponent={},q.prototype.setState=function(e,t){"object"!=typeof e&&"function"!=typeof e&&null!=e&&A("85"),this.updater.enqueueSetState(this,e,t,"setState")},q.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},_.prototype=q.prototype;var g=W.prototype=new _;g.constructor=W,o(g,q.prototype),g.isPureReactComponent=!0;var v={current:null},y={current:null},L=Object.prototype.hasOwnProperty,R={key:!0,ref:!0,__self:!0,__source:!0};function E(e,t,n){var o=void 0,r={},i=null,p=null;if(null!=t)for(o in void 0!==t.ref&&(p=t.ref),void 0!==t.key&&(i=""+t.key),t)L.call(t,o)&&!R.hasOwnProperty(o)&&(r[o]=t[o]);var s=arguments.length-2;if(1===s)r.children=n;else if(1<s){for(var c=Array(s),b=0;b<s;b++)c[b]=arguments[b+2];r.children=c}if(e&&e.defaultProps)for(o in s=e.defaultProps)void 0===r[o]&&(r[o]=s[o]);return{$$typeof:a,type:e,key:i,ref:p,props:r,_owner:y.current}}function w(e){return"object"==typeof e&&null!==e&&e.$$typeof===a}var k=/\/+/g,B=[];function T(e,t,n,o){if(B.length){var r=B.pop();return r.result=e,r.keyPrefix=t,r.func=n,r.context=o,r.count=0,r}return{result:e,keyPrefix:t,func:n,context:o,count:0}}function S(e){e.result=null,e.keyPrefix=null,e.func=null,e.context=null,e.count=0,10>B.length&&B.push(e)}function N(e,t,n){return null==e?0:function e(t,n,o,r){var p=typeof t;"undefined"!==p&&"boolean"!==p||(t=null);var s=!1;if(null===t)s=!0;else switch(p){case"string":case"number":s=!0;break;case"object":switch(t.$$typeof){case a:case i:s=!0}}if(s)return o(r,t,""===n?"."+X(t,0):n),1;if(s=0,n=""===n?".":n+":",Array.isArray(t))for(var c=0;c<t.length;c++){var b=n+X(p=t[c],c);s+=e(p,b,o,r)}else if("function"==typeof(b=null===t||"object"!=typeof t?null:"function"==typeof(b=O&&t[O]||t["@@iterator"])?b:null))for(t=b.call(t),c=0;!(p=t.next()).done;)s+=e(p=p.value,b=n+X(p,c++),o,r);else"object"===p&&A("31","[object Object]"==(o=""+t)?"object with keys {"+Object.keys(t).join(", ")+"}":o,"");return s}(e,"",t,n)}function X(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+(""+e).replace(/[=:]/g,function(e){return t[e]})}(e.key):t.toString(36)}function C(e,t){e.func.call(e.context,t,e.count++)}function D(e,t,n){var o=e.result,r=e.keyPrefix;e=e.func.call(e.context,t,e.count++),Array.isArray(e)?P(e,o,n,function(e){return e}):null!=e&&(w(e)&&(e=function(e,t){return{$$typeof:a,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(e,r+(!e.key||t&&t.key===e.key?"":(""+e.key).replace(k,"$&/")+"/")+n)),o.push(e))}function P(e,t,n,o,r){var a="";null!=n&&(a=(""+n).replace(k,"$&/")+"/"),N(e,D,t=T(t,a,o,r)),S(t)}function x(){var e=v.current;return null===e&&A("307"),e}var H={Children:{map:function(e,t,n){if(null==e)return e;var o=[];return P(e,o,null,t,n),o},forEach:function(e,t,n){if(null==e)return e;N(e,C,t=T(null,null,t,n)),S(t)},count:function(e){return N(e,function(){return null},null)},toArray:function(e){var t=[];return P(e,t,null,function(e){return e}),t},only:function(e){return w(e)||A("143"),e}},createRef:function(){return{current:null}},Component:q,PureComponent:W,createContext:function(e,t){return void 0===t&&(t=null),(e={$$typeof:M,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:b,_context:e},e.Consumer=e},forwardRef:function(e){return{$$typeof:u,render:e}},lazy:function(e){return{$$typeof:f,_ctor:e,_status:-1,_result:null}},memo:function(e,t){return{$$typeof:z,type:e,compare:void 0===t?null:t}},useCallback:function(e,t){return x().useCallback(e,t)},useContext:function(e,t){return x().useContext(e,t)},useEffect:function(e,t){return x().useEffect(e,t)},useImperativeHandle:function(e,t,n){return x().useImperativeHandle(e,t,n)},useDebugValue:function(){},useLayoutEffect:function(e,t){return x().useLayoutEffect(e,t)},useMemo:function(e,t){return x().useMemo(e,t)},useReducer:function(e,t,n){return x().useReducer(e,t,n)},useRef:function(e){return x().useRef(e)},useState:function(e){return x().useState(e)},Fragment:p,StrictMode:s,Suspense:d,createElement:E,cloneElement:function(e,t,n){null==e&&A("267",e);var r=void 0,i=o({},e.props),p=e.key,s=e.ref,c=e._owner;if(null!=t){void 0!==t.ref&&(s=t.ref,c=y.current),void 0!==t.key&&(p=""+t.key);var b=void 0;for(r in e.type&&e.type.defaultProps&&(b=e.type.defaultProps),t)L.call(t,r)&&!R.hasOwnProperty(r)&&(i[r]=void 0===t[r]&&void 0!==b?b[r]:t[r])}if(1==(r=arguments.length-2))i.children=n;else if(1<r){b=Array(r);for(var M=0;M<r;M++)b[M]=arguments[M+2];i.children=b}return{$$typeof:a,type:e.type,key:p,ref:s,props:i,_owner:c}},createFactory:function(e){var t=E.bind(null,e);return t.type=e,t},isValidElement:w,version:"16.8.4",unstable_ConcurrentMode:l,unstable_Profiler:c,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{ReactCurrentDispatcher:v,ReactCurrentOwner:y,assign:o}},F={default:H},j=F&&H||F;e.exports=j.default||j},function(e,t,n){"use strict";var o=n(433);function r(){}function a(){}a.resetWarningCache=r,e.exports=function(){function e(e,t,n,r,a,i){if(i!==o){var p=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw p.name="Invariant Violation",p}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:r};return n.PropTypes=n,n}},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&Symbol.for,r=o?Symbol.for("react.element"):60103,a=o?Symbol.for("react.portal"):60106,i=o?Symbol.for("react.fragment"):60107,p=o?Symbol.for("react.strict_mode"):60108,s=o?Symbol.for("react.profiler"):60114,c=o?Symbol.for("react.provider"):60109,b=o?Symbol.for("react.context"):60110,M=o?Symbol.for("react.async_mode"):60111,l=o?Symbol.for("react.concurrent_mode"):60111,u=o?Symbol.for("react.forward_ref"):60112,d=o?Symbol.for("react.suspense"):60113,z=o?Symbol.for("react.memo"):60115,f=o?Symbol.for("react.lazy"):60116;function O(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case M:case l:case i:case s:case p:case d:return e;default:switch(e=e&&e.$$typeof){case b:case u:case c:return e;default:return t}}case f:case z:case a:return t}}}function A(e){return O(e)===l}t.typeOf=O,t.AsyncMode=M,t.ConcurrentMode=l,t.ContextConsumer=b,t.ContextProvider=c,t.Element=r,t.ForwardRef=u,t.Fragment=i,t.Lazy=f,t.Memo=z,t.Portal=a,t.Profiler=s,t.StrictMode=p,t.Suspense=d,t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===i||e===l||e===s||e===p||e===d||"object"==typeof e&&null!==e&&(e.$$typeof===f||e.$$typeof===z||e.$$typeof===c||e.$$typeof===b||e.$$typeof===u)},t.isAsyncMode=function(e){return A(e)||O(e)===M},t.isConcurrentMode=A,t.isContextConsumer=function(e){return O(e)===b},t.isContextProvider=function(e){return O(e)===c},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return O(e)===u},t.isFragment=function(e){return O(e)===i},t.isLazy=function(e){return O(e)===f},t.isMemo=function(e){return O(e)===z},t.isPortal=function(e){return O(e)===a},t.isProfiler=function(e){return O(e)===s},t.isStrictMode=function(e){return O(e)===p},t.isSuspense=function(e){return O(e)===d}},function(e,t){e.exports=function(e){if(!e.webpackPolyfill){var t=Object.create(e);t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),Object.defineProperty(t,"exports",{enumerable:!0}),t.webpackPolyfill=1}return t}},function(e,t,n){"use strict";var o=n(109),r=n(437),a=n(190),i="mixins";e.exports=function(e,t,n){var p=[],s={mixins:"DEFINE_MANY",statics:"DEFINE_MANY",propTypes:"DEFINE_MANY",contextTypes:"DEFINE_MANY",childContextTypes:"DEFINE_MANY",getDefaultProps:"DEFINE_MANY_MERGED",getInitialState:"DEFINE_MANY_MERGED",getChildContext:"DEFINE_MANY_MERGED",render:"DEFINE_ONCE",componentWillMount:"DEFINE_MANY",componentDidMount:"DEFINE_MANY",componentWillReceiveProps:"DEFINE_MANY",shouldComponentUpdate:"DEFINE_ONCE",componentWillUpdate:"DEFINE_MANY",componentDidUpdate:"DEFINE_MANY",componentWillUnmount:"DEFINE_MANY",UNSAFE_componentWillMount:"DEFINE_MANY",UNSAFE_componentWillReceiveProps:"DEFINE_MANY",UNSAFE_componentWillUpdate:"DEFINE_MANY",updateComponent:"OVERRIDE_BASE"},c={getDerivedStateFromProps:"DEFINE_MANY_MERGED"},b={displayName:function(e,t){e.displayName=t},mixins:function(e,t){if(t)for(var n=0;n<t.length;n++)l(e,t[n])},childContextTypes:function(e,t){e.childContextTypes=o({},e.childContextTypes,t)},contextTypes:function(e,t){e.contextTypes=o({},e.contextTypes,t)},getDefaultProps:function(e,t){e.getDefaultProps?e.getDefaultProps=d(e.getDefaultProps,t):e.getDefaultProps=t},propTypes:function(e,t){e.propTypes=o({},e.propTypes,t)},statics:function(e,t){!function(e,t){if(t)for(var n in t){var o=t[n];if(t.hasOwnProperty(n)){if(a(!(n in b),'ReactClass: You are attempting to define a reserved property, `%s`, that shouldn\'t be on the "statics" key. Define it as an instance property instead; it will still be accessible on the constructor.',n),n in e){var r=c.hasOwnProperty(n)?c[n]:null;return a("DEFINE_MANY_MERGED"===r,"ReactClass: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.",n),void(e[n]=d(e[n],o))}e[n]=o}}}(e,t)},autobind:function(){}};function M(e,t){var n=s.hasOwnProperty(t)?s[t]:null;h.hasOwnProperty(t)&&a("OVERRIDE_BASE"===n,"ReactClassInterface: You are attempting to override `%s` from your class specification. Ensure that your method names do not overlap with React methods.",t),e&&a("DEFINE_MANY"===n||"DEFINE_MANY_MERGED"===n,"ReactClassInterface: You are attempting to define `%s` on your component more than once. This conflict may be due to a mixin.",t)}function l(e,n){if(n){a("function"!=typeof n,"ReactClass: You're attempting to use a component class or function as a mixin. Instead, just use a regular object."),a(!t(n),"ReactClass: You're attempting to use a component as a mixin. Instead, just use a regular object.");var o=e.prototype,r=o.__reactAutoBindPairs;for(var p in n.hasOwnProperty(i)&&b.mixins(e,n.mixins),n)if(n.hasOwnProperty(p)&&p!==i){var c=n[p],l=o.hasOwnProperty(p);if(M(l,p),b.hasOwnProperty(p))b[p](e,c);else{var u=s.hasOwnProperty(p);if("function"!=typeof c||u||l||!1===n.autobind)if(l){var f=s[p];a(u&&("DEFINE_MANY_MERGED"===f||"DEFINE_MANY"===f),"ReactClass: Unexpected spec policy %s for key %s when mixing in component specs.",f,p),"DEFINE_MANY_MERGED"===f?o[p]=d(o[p],c):"DEFINE_MANY"===f&&(o[p]=z(o[p],c))}else o[p]=c;else r.push(p,c),o[p]=c}}}}function u(e,t){for(var n in a(e&&t&&"object"==typeof e&&"object"==typeof t,"mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects."),t)t.hasOwnProperty(n)&&(a(void 0===e[n],"mergeIntoWithNoDuplicateKeys(): Tried to merge two objects with the same key: `%s`. This conflict may be due to a mixin; in particular, this may be caused by two getInitialState() or getDefaultProps() methods returning objects with clashing keys.",n),e[n]=t[n]);return e}function d(e,t){return function(){var n=e.apply(this,arguments),o=t.apply(this,arguments);if(null==n)return o;if(null==o)return n;var r={};return u(r,n),u(r,o),r}}function z(e,t){return function(){e.apply(this,arguments),t.apply(this,arguments)}}function f(e,t){return t.bind(e)}var O={componentDidMount:function(){this.__isMounted=!0}},A={componentWillUnmount:function(){this.__isMounted=!1}},h={replaceState:function(e,t){this.updater.enqueueReplaceState(this,e,t)},isMounted:function(){return!!this.__isMounted}},m=function(){};return o(m.prototype,e.prototype,h),function(e){var t=function(e,o,i){this.__reactAutoBindPairs.length&&function(e){for(var t=e.__reactAutoBindPairs,n=0;n<t.length;n+=2){var o=t[n],r=t[n+1];e[o]=f(e,r)}}(this),this.props=e,this.context=o,this.refs=r,this.updater=i||n,this.state=null;var p=this.getInitialState?this.getInitialState():null;a("object"==typeof p&&!Array.isArray(p),"%s.getInitialState(): must return an object or null",t.displayName||"ReactCompositeComponent"),this.state=p};for(var o in t.prototype=new m,t.prototype.constructor=t,t.prototype.__reactAutoBindPairs=[],p.forEach(l.bind(null,t)),l(t,O),l(t,e),l(t,A),t.getDefaultProps&&(t.defaultProps=t.getDefaultProps()),a(t.prototype.render,"createClass(...): Class specification must implement a `render` method."),s)t.prototype[o]||(t.prototype[o]=null);return t}}},function(e,t,n){"use strict";e.exports={}},function(e,t,n){"use strict";var o=n(439),r=n(109);function a(e,t){return t.encode?t.strict?o(e):encodeURIComponent(e):e}t.extract=function(e){return e.split("?")[1]||""},t.parse=function(e,t){var n=function(e){var t;switch(e.arrayFormat){case"index":return function(e,n,o){t=/\[(\d*)\]$/.exec(e),e=e.replace(/\[\d*\]$/,""),t?(void 0===o[e]&&(o[e]={}),o[e][t[1]]=n):o[e]=n};case"bracket":return function(e,n,o){t=/(\[\])$/.exec(e),e=e.replace(/\[\]$/,""),t?void 0!==o[e]?o[e]=[].concat(o[e],n):o[e]=[n]:o[e]=n};default:return function(e,t,n){void 0!==n[e]?n[e]=[].concat(n[e],t):n[e]=t}}}(t=r({arrayFormat:"none"},t)),o=Object.create(null);return"string"!=typeof e?o:(e=e.trim().replace(/^(\?|#|&)/,""))?(e.split("&").forEach(function(e){var t=e.replace(/\+/g," ").split("="),r=t.shift(),a=t.length>0?t.join("="):void 0;a=void 0===a?null:decodeURIComponent(a),n(decodeURIComponent(r),a,o)}),Object.keys(o).sort().reduce(function(e,t){var n=o[t];return Boolean(n)&&"object"==typeof n&&!Array.isArray(n)?e[t]=function e(t){return Array.isArray(t)?t.sort():"object"==typeof t?e(Object.keys(t)).sort(function(e,t){return Number(e)-Number(t)}).map(function(e){return t[e]}):t}(n):e[t]=n,e},Object.create(null))):o},t.stringify=function(e,t){var n=function(e){switch(e.arrayFormat){case"index":return function(t,n,o){return null===n?[a(t,e),"[",o,"]"].join(""):[a(t,e),"[",a(o,e),"]=",a(n,e)].join("")};case"bracket":return function(t,n){return null===n?a(t,e):[a(t,e),"[]=",a(n,e)].join("")};default:return function(t,n){return null===n?a(t,e):[a(t,e),"=",a(n,e)].join("")}}}(t=r({encode:!0,strict:!0,arrayFormat:"none"},t));return e?Object.keys(e).sort().map(function(o){var r=e[o];if(void 0===r)return"";if(null===r)return a(o,t);if(Array.isArray(r)){var i=[];return r.slice().forEach(function(e){void 0!==e&&i.push(n(o,e,i.length))}),i.join("&")}return a(o,t)+"="+a(r,t)}).filter(function(e){return e.length>0}).join("&"):""}},function(e,t,n){"use strict";e.exports=function(e){return encodeURIComponent(e).replace(/[!'()*]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}},function(e,t,n){"use strict";t.__esModule=!0,t.loopAsync=function(e,t,n){var o=0,r=!1,a=!1,i=!1,p=void 0,s=function(){for(var e=arguments.length,t=Array(e),o=0;o<e;o++)t[o]=arguments[o];r=!0,a?p=t:n.apply(void 0,t)};!function c(){if(!r&&(i=!0,!a)){for(a=!0;!r&&o<e&&i;)i=!1,t(o++,c,s);a=!1,r?n.apply(void 0,p):o>=e&&i&&(r=!0,n())}}()}},function(e,t,n){"use strict";t.__esModule=!0,t.replaceLocation=t.pushLocation=t.getCurrentLocation=t.go=t.getUserConfirmation=void 0;var o=n(139);Object.defineProperty(t,"getUserConfirmation",{enumerable:!0,get:function(){return o.getUserConfirmation}}),Object.defineProperty(t,"go",{enumerable:!0,get:function(){return o.go}});var r=n(68),a=n(58);t.getCurrentLocation=function(){return(0,r.createLocation)(window.location)},t.pushLocation=function(e){return window.location.href=(0,a.createPath)(e),!1},t.replaceLocation=function(e){return window.location.replace((0,a.createPath)(e)),!1}},function(e,t,n){"use strict";t.__esModule=!0,t.replaceLocation=t.pushLocation=t.startListener=t.getCurrentLocation=t.go=t.getUserConfirmation=void 0;var o=n(139);Object.defineProperty(t,"getUserConfirmation",{enumerable:!0,get:function(){return o.getUserConfirmation}}),Object.defineProperty(t,"go",{enumerable:!0,get:function(){return o.go}});var r,a=((r=n(53))&&r.__esModule,n(68)),i=n(96),p=n(191),s=n(58),c=function(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)},b=function(e){var t=window.location.href.indexOf("#");window.location.replace(window.location.href.slice(0,t>=0?t:0)+"#"+e)},M=t.getCurrentLocation=function(e,t){var n=e.decodePath(c()),o=(0,s.getQueryStringValueFromPath)(n,t),r=void 0;o&&(n=(0,s.stripQueryStringValueFromPath)(n,t),r=(0,p.readState)(o));var i=(0,s.parsePath)(n);return i.state=r,(0,a.createLocation)(i,void 0,o)},l=void 0,u=(t.startListener=function(e,t,n){var o=function(){var o=c(),r=t.encodePath(o);if(o!==r)b(r);else{var a=M(t,n);if(l&&a.key&&l.key===a.key)return;l=a,e(a)}},r=c(),a=t.encodePath(r);return r!==a&&b(a),(0,i.addEventListener)(window,"hashchange",o),function(){return(0,i.removeEventListener)(window,"hashchange",o)}},function(e,t,n,o){var r=e.state,a=e.key,i=t.encodePath((0,s.createPath)(e));void 0!==r&&(i=(0,s.addQueryStringValueToPath)(i,n,a),(0,p.saveState)(a,r)),l=e,o(i)});t.pushLocation=function(e,t,n){return u(e,t,n,function(e){c()!==e&&function(e){window.location.hash=e}(e)})},t.replaceLocation=function(e,t,n){return u(e,t,n,function(e){c()!==e&&b(e)})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e};t.default=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=n.selectLocationState,p=void 0===i?a:i,s=n.adjustUrlOnReplay,c=void 0===s||s;if(void 0===p(t.getState()))throw new Error("Expected the routing state to be available either as `state.routing` or as the custom expression you can specify as `selectLocationState` in the `syncHistoryWithStore()` options. Ensure you have added the `routerReducer` to your store's reducers via `combineReducers` or whatever method you use to isolate your reducers.");var b=void 0,M=void 0,l=void 0,u=void 0,d=void 0,z=function(e){return p(t.getState()).locationBeforeTransitions||(e?b:void 0)};if(b=z(),c){var f=function(){var t=z(!0);d!==t&&b!==t&&(M=!0,d=t,e.transitionTo(o({},t,{action:"PUSH"})),M=!1)};l=t.subscribe(f),f()}var O=function(e){M||(d=e,!b&&(b=e,z())||t.dispatch({type:r.LOCATION_CHANGE,payload:e}))};return u=e.listen(O),e.getCurrentLocation&&O(e.getCurrentLocation()),o({},e,{listen:function(n){var o=z(!0),r=!1,a=t.subscribe(function(){var e=z(!0);e!==o&&(o=e,r||n(o))});return e.getCurrentLocation||n(o),function(){r=!0,a()}},unsubscribe:function(){c&&l(),u()}})};var r=n(192),a=function(e){return e.routing}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return function(){return function(t){return function(n){if(n.type!==o.CALL_HISTORY_METHOD)return t(n);var r=n.payload,a=r.method,i=r.args;e[a].apply(e,function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(i))}}}};var o=n(193)},function(e,t,n){var o=n(129),r=n(448),a=n(34),i=n(196),p=/^\[object .+?Constructor\]$/,s=Function.prototype,c=Object.prototype,b=s.toString,M=c.hasOwnProperty,l=RegExp("^"+b.call(M).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!a(e)||r(e))&&(o(e)?l:p).test(i(e))}},function(e,t,n){var o=n(74),r=Object.prototype,a=r.hasOwnProperty,i=r.toString,p=o?o.toStringTag:void 0;e.exports=function(e){var t=a.call(e,p),n=e[p];try{e[p]=void 0;var o=!0}catch(e){}var r=i.call(e);return o&&(t?e[p]=n:delete e[p]),r}},function(e,t){var n=Object.prototype.toString;e.exports=function(e){return n.call(e)}},function(e,t,n){var o,r=n(449),a=(o=/[^.]+$/.exec(r&&r.keys&&r.keys.IE_PROTO||""))?"Symbol(src)_1."+o:"";e.exports=function(e){return!!a&&a in e}},function(e,t,n){var o=n(36)["__core-js_shared__"];e.exports=o},function(e,t){e.exports=function(e,t){return null==e?void 0:e[t]}},function(e,t){e.exports=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},function(e,t,n){var o=n(453),r=n(194),a=n(111),i=r?function(e,t){return r(e,"toString",{configurable:!0,enumerable:!1,value:o(t),writable:!0})}:a;e.exports=i},function(e,t){e.exports=function(e){return function(){return e}}},function(e,t){var n=Date.now;e.exports=function(e){var t=0,o=0;return function(){var r=n(),a=16-(r-o);if(o=r,a>0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}},function(e,t){e.exports=function(e,t){for(var n=-1,o=Array(e);++n<e;)o[n]=t(n);return o}},function(e,t,n){var o=n(63),r=n(39);e.exports=function(e){return r(e)&&"[object Arguments]"==o(e)}},function(e,t){e.exports=function(){return!1}},function(e,t,n){var o=n(63),r=n(140),a=n(39),i={};i["[object Float32Array]"]=i["[object Float64Array]"]=i["[object Int8Array]"]=i["[object Int16Array]"]=i["[object Int32Array]"]=i["[object Uint8Array]"]=i["[object Uint8ClampedArray]"]=i["[object Uint16Array]"]=i["[object Uint32Array]"]=!0,i["[object Arguments]"]=i["[object Array]"]=i["[object ArrayBuffer]"]=i["[object Boolean]"]=i["[object DataView]"]=i["[object Date]"]=i["[object Error]"]=i["[object Function]"]=i["[object Map]"]=i["[object Number]"]=i["[object Object]"]=i["[object RegExp]"]=i["[object Set]"]=i["[object String]"]=i["[object WeakMap]"]=!1,e.exports=function(e){return a(e)&&r(e.length)&&!!i[o(e)]}},function(e,t,n){var o=n(203)(Object.keys,Object);e.exports=o},function(e,t,n){var o=n(461),r=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,a=/\\(\\)?/g,i=o(function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(r,function(e,n,o,r){t.push(o?r.replace(a,"$1"):n||e)}),t});e.exports=i},function(e,t,n){var o=n(462);e.exports=function(e){var t=o(e,function(e){return 500===n.size&&n.clear(),e}),n=t.cache;return t}},function(e,t,n){var o=n(143),r="Expected a function";function a(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError(r);var n=function(){var o=arguments,r=t?t.apply(this,o):o[0],a=n.cache;if(a.has(r))return a.get(r);var i=e.apply(this,o);return n.cache=a.set(r,i)||a,i};return n.cache=new(a.Cache||o),n}a.Cache=o,e.exports=a},function(e,t,n){var o=n(464),r=n(115),a=n(144);e.exports=function(){this.size=0,this.__data__={hash:new o,map:new(a||r),string:new o}}},function(e,t,n){var o=n(465),r=n(466),a=n(467),i=n(468),p=n(469);function s(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}s.prototype.clear=o,s.prototype.delete=r,s.prototype.get=a,s.prototype.has=i,s.prototype.set=p,e.exports=s},function(e,t,n){var o=n(114);e.exports=function(){this.__data__=o?o(null):{},this.size=0}},function(e,t){e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},function(e,t,n){var o=n(114),r=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(o){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return r.call(t,e)?t[e]:void 0}},function(e,t,n){var o=n(114),r=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return o?void 0!==t[e]:r.call(t,e)}},function(e,t,n){var o=n(114);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=o&&void 0===t?"__lodash_hash_undefined__":t,this}},function(e,t){e.exports=function(){this.__data__=[],this.size=0}},function(e,t,n){var o=n(116),r=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=o(t,e);return!(n<0||(n==t.length-1?t.pop():r.call(t,n,1),--this.size,0))}},function(e,t,n){var o=n(116);e.exports=function(e){var t=this.__data__,n=o(t,e);return n<0?void 0:t[n][1]}},function(e,t,n){var o=n(116);e.exports=function(e){return o(this.__data__,e)>-1}},function(e,t,n){var o=n(116);e.exports=function(e,t){var n=this.__data__,r=o(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}},function(e,t,n){var o=n(117);e.exports=function(e){var t=o(this,e).delete(e);return this.size-=t?1:0,t}},function(e,t){e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},function(e,t,n){var o=n(117);e.exports=function(e){return o(this,e).get(e)}},function(e,t,n){var o=n(117);e.exports=function(e){return o(this,e).has(e)}},function(e,t,n){var o=n(117);e.exports=function(e,t){var n=o(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=c(n(49)),r=n(15),a=c(n(497)),i=n(168),p=n(395),s=c(n(498));function c(e){return e&&e.__esModule?e:{default:e}}var b=(0,i.routerMiddleware)(p.hashHistory);t.default=(0,r.compose)((0,r.applyMiddleware)(a.default),(0,r.applyMiddleware)(b),"object"===("undefined"==typeof window?"undefined":(0,o.default)(window))&&void 0!==window.__REDUX_DEVTOOLS_EXTENSION__?window.__REDUX_DEVTOOLS_EXTENSION__():function(e){return e})(r.createStore)(s.default),e.exports=t.default},function(e,t,n){e.exports={default:n(482),__esModule:!0}},function(e,t,n){n(90),n(119),e.exports=n(152).f("iterator")},function(e,t,n){var o=n(145),r=n(146);e.exports=function(e){return function(t,n){var a,i,p=String(r(t)),s=o(n),c=p.length;return s<0||s>=c?e?"":void 0:(a=p.charCodeAt(s))<55296||a>56319||s+1===c||(i=p.charCodeAt(s+1))<56320||i>57343?e?p.charAt(s):a:e?p.slice(s,s+2):i-56320+(a-55296<<10)+65536}}},function(e,t,n){"use strict";var o=n(133),r=n(92),a=n(101),i={};n(61)(i,n(31)("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=o(i,{next:r(1,n)}),a(e,t+" Iterator")}},function(e,t,n){var o=n(40),r=n(46),a=n(82);e.exports=n(50)?Object.defineProperties:function(e,t){r(e);for(var n,i=a(t),p=i.length,s=0;p>s;)o.f(e,n=i[s++],t[n]);return e}},function(e,t,n){var o=n(70),r=n(134),a=n(487);e.exports=function(e){return function(t,n,i){var p,s=o(t),c=r(s.length),b=a(i,c);if(e&&n!=n){for(;c>b;)if((p=s[b++])!=p)return!0}else for(;c>b;b++)if((e||b in s)&&s[b]===n)return e||b||0;return!e&&-1}}},function(e,t,n){var o=n(145),r=Math.max,a=Math.min;e.exports=function(e,t){return(e=o(e))<0?r(e+t,0):a(e,t)}},function(e,t,n){"use strict";var o=n(489),r=n(399),a=n(81),i=n(70);e.exports=n(171)(Array,"Array",function(e,t){this._t=i(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,r(1)):r(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values"),a.Arguments=a.Array,o("keys"),o("values"),o("entries")},function(e,t){e.exports=function(){}},function(e,t,n){e.exports={default:n(491),__esModule:!0}},function(e,t,n){n(492),n(155),n(495),n(496),e.exports=n(18).Symbol},function(e,t,n){"use strict";var o=n(28),r=n(65),a=n(50),i=n(30),p=n(205),s=n(173).KEY,c=n(69),b=n(150),M=n(101),l=n(118),u=n(31),d=n(152),z=n(153),f=n(493),O=n(400),A=n(46),h=n(41),m=n(70),q=n(148),_=n(92),W=n(133),g=n(494),v=n(210),y=n(40),L=n(82),R=v.f,E=y.f,w=g.f,k=o.Symbol,B=o.JSON,T=B&&B.stringify,S=u("_hidden"),N=u("toPrimitive"),X={}.propertyIsEnumerable,C=b("symbol-registry"),D=b("symbols"),P=b("op-symbols"),x=Object.prototype,H="function"==typeof k,F=o.QObject,j=!F||!F.prototype||!F.prototype.findChild,Y=a&&c(function(){return 7!=W(E({},"a",{get:function(){return E(this,"a",{value:7}).a}})).a})?function(e,t,n){var o=R(x,t);o&&delete x[t],E(e,t,n),o&&e!==x&&E(x,t,o)}:E,I=function(e){var t=D[e]=W(k.prototype);return t._k=e,t},U=H&&"symbol"==typeof k.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof k},V=function(e,t,n){return e===x&&V(P,t,n),A(e),t=q(t,!0),A(n),r(D,t)?(n.enumerable?(r(e,S)&&e[S][t]&&(e[S][t]=!1),n=W(n,{enumerable:_(0,!1)})):(r(e,S)||E(e,S,_(1,{})),e[S][t]=!0),Y(e,t,n)):E(e,t,n)},K=function(e,t){A(e);for(var n,o=f(t=m(t)),r=0,a=o.length;a>r;)V(e,n=o[r++],t[n]);return e},J=function(e){var t=X.call(this,e=q(e,!0));return!(this===x&&r(D,e)&&!r(P,e))&&(!(t||!r(this,e)||!r(D,e)||r(this,S)&&this[S][e])||t)},G=function(e,t){if(e=m(e),t=q(t,!0),e!==x||!r(D,t)||r(P,t)){var n=R(e,t);return!n||!r(D,t)||r(e,S)&&e[S][t]||(n.enumerable=!0),n}},Q=function(e){for(var t,n=w(m(e)),o=[],a=0;n.length>a;)r(D,t=n[a++])||t==S||t==s||o.push(t);return o},$=function(e){for(var t,n=e===x,o=w(n?P:m(e)),a=[],i=0;o.length>i;)!r(D,t=o[i++])||n&&!r(x,t)||a.push(D[t]);return a};H||(p((k=function(){if(this instanceof k)throw TypeError("Symbol is not a constructor!");var e=l(arguments.length>0?arguments[0]:void 0),t=function(n){this===x&&t.call(P,n),r(this,S)&&r(this[S],e)&&(this[S][e]=!1),Y(this,e,_(1,n))};return a&&j&&Y(x,e,{configurable:!0,set:t}),I(e)}).prototype,"toString",function(){return this._k}),v.f=G,y.f=V,n(209).f=g.f=Q,n(102).f=J,n(154).f=$,a&&!n(91)&&p(x,"propertyIsEnumerable",J,!0),d.f=function(e){return I(u(e))}),i(i.G+i.W+i.F*!H,{Symbol:k});for(var Z="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ee=0;Z.length>ee;)u(Z[ee++]);for(var te=L(u.store),ne=0;te.length>ne;)z(te[ne++]);i(i.S+i.F*!H,"Symbol",{for:function(e){return r(C,e+="")?C[e]:C[e]=k(e)},keyFor:function(e){if(!U(e))throw TypeError(e+" is not a symbol!");for(var t in C)if(C[t]===e)return t},useSetter:function(){j=!0},useSimple:function(){j=!1}}),i(i.S+i.F*!H,"Object",{create:function(e,t){return void 0===t?W(e):K(W(e),t)},defineProperty:V,defineProperties:K,getOwnPropertyDescriptor:G,getOwnPropertyNames:Q,getOwnPropertySymbols:$}),B&&i(i.S+i.F*(!H||c(function(){var e=k();return"[null]"!=T([e])||"{}"!=T({a:e})||"{}"!=T(Object(e))})),"JSON",{stringify:function(e){for(var t,n,o=[e],r=1;arguments.length>r;)o.push(arguments[r++]);if(n=t=o[1],(h(t)||void 0!==e)&&!U(e))return O(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!U(t))return t}),o[1]=t,T.apply(B,o)}}),k.prototype[N]||n(61)(k.prototype,N,k.prototype.valueOf),M(k,"Symbol"),M(Math,"Math",!0),M(o.JSON,"JSON",!0)},function(e,t,n){var o=n(82),r=n(154),a=n(102);e.exports=function(e){var t=o(e),n=r.f;if(n)for(var i,p=n(e),s=a.f,c=0;p.length>c;)s.call(e,i=p[c++])&&t.push(i);return t}},function(e,t,n){var o=n(70),r=n(209).f,a={}.toString,i="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return i&&"[object Window]"==a.call(e)?function(e){try{return r(e)}catch(e){return i.slice()}}(e):r(o(e))}},function(e,t,n){n(153)("asyncIterator")},function(e,t,n){n(153)("observable")},function(e,t,n){"use strict";function o(e){return function(t){var n=t.dispatch,o=t.getState;return function(t){return function(r){return"function"==typeof r?r(n,o,e):t(r)}}}}n.r(t);var r=o();r.withExtraArgument=o,t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(15),r=n(168),a=n(499),i=n(215),p=n(226),s=n(159),c=n(239),b=n(409),M=n(410),l=n(411),u=n(181),d=n(379),z=n(231),f=n(380),O=n(412),A=n(381),h=n(415),m=n(416),q=(0,o.combineReducers)({initialState:i.initialState,dashboard:p.dashboard,modules:s.reducer,connection:c.reducer,trackingSettings:b.reducer,jumpstart:M.reducer,settings:l.reducer,siteData:u.reducer,rewind:d.reducer,jetpackNotices:f.reducer,pluginsData:z.reducer,search:O.reducer,devCard:A.reducer,publicize:h.reducer,siteVerify:m.reducer});t.default=(0,o.combineReducers)({jetpack:q,routing:r.routerReducer,globalNotices:a.globalNotices}),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,r=(o=n(500))&&o.__esModule?o:{default:o};t.globalNotices=p;var a=n(15),i=n(214);function p(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1];switch(t.type){case i.NEW_NOTICE:return[t.notice].concat((0,r.default)(e));case i.REMOVE_NOTICE:return e.filter(function(e){return e.noticeId!==t.noticeId})}return e}t.default=(0,a.combineReducers)({globalNotices:p})},function(e,t,n){"use strict";t.__esModule=!0;var o,r=(o=n(501))&&o.__esModule?o:{default:o};t.default=function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return(0,r.default)(e)}},function(e,t,n){e.exports={default:n(502),__esModule:!0}},function(e,t,n){n(90),n(503),e.exports=n(18).Array.from},function(e,t,n){"use strict";var o=n(60),r=n(30),a=n(83),i=n(211),p=n(212),s=n(134),c=n(504),b=n(174);r(r.S+r.F*!n(213)(function(e){Array.from(e)}),"Array",{from:function(e){var t,n,r,M,l=a(e),u="function"==typeof this?this:Array,d=arguments.length,z=d>1?arguments[1]:void 0,f=void 0!==z,O=0,A=b(l);if(f&&(z=o(z,d>2?arguments[2]:void 0,2)),null==A||u==Array&&p(A))for(n=new u(t=s(l.length));t>O;O++)c(n,O,f?z(l[O],O):l[O]);else for(M=A.call(l),n=new u;!(r=M.next()).done;O++)c(n,O,f?i(M,z,[r.value,O],!0):r.value);return n.length=O,n}})},function(e,t,n){"use strict";var o=n(40),r=n(92);e.exports=function(e,t,n){t in e?o.f(e,t,r(0,n)):e[t]=n}},function(e,t,n){var o=n(121),r=n(216),a=n(217),i=n(512),p=n(34),s=n(122),c=n(225);e.exports=function e(t,n,b,M,l){t!==n&&a(n,function(a,s){if(p(a))l||(l=new o),i(t,n,s,b,e,M,l);else{var u=M?M(c(t,s),a,s+"",t,n,l):void 0;void 0===u&&(u=a),r(t,s,u)}},s)}},function(e,t,n){var o=n(115);e.exports=function(){this.__data__=new o,this.size=0}},function(e,t){e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},function(e,t){e.exports=function(e){return this.__data__.get(e)}},function(e,t){e.exports=function(e){return this.__data__.has(e)}},function(e,t,n){var o=n(115),r=n(144),a=n(143);e.exports=function(e,t){var n=this.__data__;if(n instanceof o){var i=n.__data__;if(!r||i.length<199)return i.push([e,t]),this.size=++n.size,this;n=this.__data__=new a(i)}return n.set(e,t),this.size=n.size,this}},function(e,t){e.exports=function(e){return function(t,n,o){for(var r=-1,a=Object(t),i=o(t),p=i.length;p--;){var s=i[e?p:++r];if(!1===n(a[s],s,a))break}return t}}},function(e,t,n){var o=n(216),r=n(218),a=n(219),i=n(221),p=n(222),s=n(98),c=n(26),b=n(223),M=n(99),l=n(129),u=n(34),d=n(224),z=n(131),f=n(225),O=n(514);e.exports=function(e,t,n,A,h,m,q){var _=f(e,n),W=f(t,n),g=q.get(W);if(g)o(e,n,g);else{var v=m?m(_,W,n+"",e,t,q):void 0,y=void 0===v;if(y){var L=c(W),R=!L&&M(W),E=!L&&!R&&z(W);v=W,L||R||E?c(_)?v=_:b(_)?v=i(_):R?(y=!1,v=r(W,!0)):E?(y=!1,v=a(W,!0)):v=[]:d(W)||s(W)?(v=_,s(_)?v=O(_):u(_)&&!l(_)||(v=p(W))):y=!1}y&&(q.set(W,v),h(v,W,A,m,q),q.delete(W)),o(e,n,v)}}},function(e,t,n){var o=n(34),r=Object.create,a=function(){function e(){}return function(t){if(!o(t))return{};if(r)return r(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();e.exports=a},function(e,t,n){var o=n(64),r=n(122);e.exports=function(e){return o(e,r(e))}},function(e,t,n){var o=n(34),r=n(97),a=n(516),i=Object.prototype.hasOwnProperty;e.exports=function(e){if(!o(e))return a(e);var t=r(e),n=[];for(var p in e)("constructor"!=p||!t&&i.call(e,p))&&n.push(p);return n}},function(e,t){e.exports=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}},function(e,t,n){n(518),e.exports=n(18).Object.keys},function(e,t,n){var o=n(83),r=n(82);n(175)("keys",function(){return function(e){return r(o(e))}})},function(e,t,n){n(520);var o=n(18).Object;e.exports=function(e,t,n){return o.defineProperty(e,t,n)}},function(e,t,n){var o=n(30);o(o.S+o.F*!n(50),"Object",{defineProperty:n(40).f})},function(e,t){e.exports=function(e){return e!=e}},function(e,t){e.exports=function(e,t,n){for(var o=n-1,r=e.length;++o<r;)if(e[o]===t)return o;return-1}},function(e,t,n){var o=n(402);e.exports=function(e){return e?(e=o(e))===1/0||e===-1/0?1.7976931348623157e308*(e<0?-1:1):e==e?e:0:0===e?e:0}},function(e,t,n){var o=n(525),r=n(59);e.exports=function(e){return null==e?[]:o(e,r(e))}},function(e,t,n){var o=n(80);e.exports=function(e,t){return o(t,function(t){return e[t]})}},function(e,t,n){var o=n(80),r=n(527),a=n(198),i=n(532),p=a(function(e){var t=o(e,i);return t.length&&t[0]===e[0]?r(t):[]});e.exports=p},function(e,t,n){var o=n(229),r=n(530),a=n(531),i=n(80),p=n(112),s=n(230),c=Math.min;e.exports=function(e,t,n){for(var b=n?a:r,M=e[0].length,l=e.length,u=l,d=Array(l),z=1/0,f=[];u--;){var O=e[u];u&&t&&(O=i(O,p(t))),z=c(O.length,z),d[u]=!n&&(t||M>=120&&O.length>=120)?new o(u&&O):void 0}O=e[0];var A=-1,h=d[0];e:for(;++A<M&&f.length<z;){var m=O[A],q=t?t(m):m;if(m=n||0!==m?m:0,!(h?s(h,q):b(f,q,n))){for(u=l;--u;){var _=d[u];if(!(_?s(_,q):b(e[u],q,n)))continue e}h&&h.push(q),f.push(m)}}return f}},function(e,t){e.exports=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this}},function(e,t){e.exports=function(e){return this.__data__.has(e)}},function(e,t,n){var o=n(160);e.exports=function(e,t){return!(null==e||!e.length)&&o(e,t,0)>-1}},function(e,t){e.exports=function(e,t,n){for(var o=-1,r=null==e?0:e.length;++o<r;)if(n(t,e[o]))return!0;return!1}},function(e,t,n){var o=n(223);e.exports=function(e){return o(e)?e:[]}},function(e,t,n){e.exports={default:n(534),__esModule:!0}},function(e,t,n){n(535),e.exports=n(18).Object.assign},function(e,t,n){var o=n(30);o(o.S+o.F,"Object",{assign:n(536)})},function(e,t,n){"use strict";var o=n(82),r=n(154),a=n(102),i=n(83),p=n(172),s=Object.assign;e.exports=!s||n(69)(function(){var e={},t={},n=Symbol(),o="abcdefghijklmnopqrst";return e[n]=7,o.split("").forEach(function(e){t[e]=e}),7!=s({},e)[n]||Object.keys(s({},t)).join("")!=o})?function(e,t){for(var n=i(e),s=arguments.length,c=1,b=r.f,M=a.f;s>c;)for(var l,u=p(arguments[c++]),d=b?o(u).concat(b(u)):o(u),z=d.length,f=0;z>f;)M.call(u,l=d[f++])&&(n[l]=u[l]);return n}:s},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.fetchPluginsData=void 0;var o,r=n(14),a=(o=n(37))&&o.__esModule?o:{default:o};t.fetchPluginsData=function(){return function(e){return e({type:r.JETPACK_PLUGINS_DATA_FETCH}),a.default.fetchPluginsData().then(function(t){return e({type:r.JETPACK_PLUGINS_DATA_FETCH_RECEIVE,pluginsData:t}),t}).catch(function(t){e({type:r.JETPACK_PLUGINS_DATA_FETCH_FAIL,error:t})})}}},function(e,t,n){e.exports={default:n(539),__esModule:!0}},function(e,t,n){n(155),n(90),n(119),n(540),n(544),n(545),e.exports=n(18).Promise},function(e,t,n){"use strict";var o,r,a,i,p=n(91),s=n(28),c=n(60),b=n(156),M=n(30),l=n(41),u=n(100),d=n(232),z=n(161),f=n(233),O=n(234).set,A=n(542)(),h=n(162),m=n(235),q=n(543),_=n(236),W=s.TypeError,g=s.process,v=g&&g.versions,y=v&&v.v8||"",L=s.Promise,R="process"==b(g),E=function(){},w=r=h.f,k=!!function(){try{var e=L.resolve(1),t=(e.constructor={})[n(31)("species")]=function(e){e(E,E)};return(R||"function"==typeof PromiseRejectionEvent)&&e.then(E)instanceof t&&0!==y.indexOf("6.6")&&-1===q.indexOf("Chrome/66")}catch(e){}}(),B=function(e){var t;return!(!l(e)||"function"!=typeof(t=e.then))&&t},T=function(e,t){if(!e._n){e._n=!0;var n=e._c;A(function(){for(var o=e._v,r=1==e._s,a=0,i=function(t){var n,a,i,p=r?t.ok:t.fail,s=t.resolve,c=t.reject,b=t.domain;try{p?(r||(2==e._h&&X(e),e._h=1),!0===p?n=o:(b&&b.enter(),n=p(o),b&&(b.exit(),i=!0)),n===t.promise?c(W("Promise-chain cycle")):(a=B(n))?a.call(n,s,c):s(n)):c(o)}catch(e){b&&!i&&b.exit(),c(e)}};n.length>a;)i(n[a++]);e._c=[],e._n=!1,t&&!e._h&&S(e)})}},S=function(e){O.call(s,function(){var t,n,o,r=e._v,a=N(e);if(a&&(t=m(function(){R?g.emit("unhandledRejection",r,e):(n=s.onunhandledrejection)?n({promise:e,reason:r}):(o=s.console)&&o.error&&o.error("Unhandled promise rejection",r)}),e._h=R||N(e)?2:1),e._a=void 0,a&&t.e)throw t.v})},N=function(e){return 1!==e._h&&0===(e._a||e._c).length},X=function(e){O.call(s,function(){var t;R?g.emit("rejectionHandled",e):(t=s.onrejectionhandled)&&t({promise:e,reason:e._v})})},C=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),T(t,!0))},D=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw W("Promise can't be resolved itself");(t=B(e))?A(function(){var o={_w:n,_d:!1};try{t.call(e,c(D,o,1),c(C,o,1))}catch(e){C.call(o,e)}}):(n._v=e,n._s=1,T(n,!1))}catch(e){C.call({_w:n,_d:!1},e)}}};k||(L=function(e){d(this,L,"Promise","_h"),u(e),o.call(this);try{e(c(D,this,1),c(C,this,1))}catch(e){C.call(this,e)}},(o=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=n(237)(L.prototype,{then:function(e,t){var n=w(f(this,L));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=R?g.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&T(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),a=function(){var e=new o;this.promise=e,this.resolve=c(D,e,1),this.reject=c(C,e,1)},h.f=w=function(e){return e===L||e===i?new a(e):r(e)}),M(M.G+M.W+M.F*!k,{Promise:L}),n(101)(L,"Promise"),n(403)("Promise"),i=n(18).Promise,M(M.S+M.F*!k,"Promise",{reject:function(e){var t=w(this);return(0,t.reject)(e),t.promise}}),M(M.S+M.F*(p||!k),"Promise",{resolve:function(e){return _(p&&this===i?L:this,e)}}),M(M.S+M.F*!(k&&n(213)(function(e){L.all(e).catch(E)})),"Promise",{all:function(e){var t=this,n=w(t),o=n.resolve,r=n.reject,a=m(function(){var n=[],a=0,i=1;z(e,!1,function(e){var p=a++,s=!1;n.push(void 0),i++,t.resolve(e).then(function(e){s||(s=!0,n[p]=e,--i||o(n))},r)}),--i||o(n)});return a.e&&r(a.v),n.promise},race:function(e){var t=this,n=w(t),o=n.reject,r=m(function(){z(e,!1,function(e){t.resolve(e).then(n.resolve,o)})});return r.e&&o(r.v),n.promise}})},function(e,t){e.exports=function(e,t,n){var o=void 0===n;switch(t.length){case 0:return o?e():e.call(n);case 1:return o?e(t[0]):e.call(n,t[0]);case 2:return o?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return o?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return o?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)}},function(e,t,n){var o=n(28),r=n(234).set,a=o.MutationObserver||o.WebKitMutationObserver,i=o.process,p=o.Promise,s="process"==n(93)(i);e.exports=function(){var e,t,n,c=function(){var o,r;for(s&&(o=i.domain)&&o.exit();e;){r=e.fn,e=e.next;try{r()}catch(o){throw e?n():t=void 0,o}}t=void 0,o&&o.enter()};if(s)n=function(){i.nextTick(c)};else if(!a||o.navigator&&o.navigator.standalone)if(p&&p.resolve){var b=p.resolve(void 0);n=function(){b.then(c)}}else n=function(){r.call(o,c)};else{var M=!0,l=document.createTextNode("");new a(c).observe(l,{characterData:!0}),n=function(){l.data=M=!M}}return function(o){var r={fn:o,next:void 0};t&&(t.next=r),e||(e=r,n()),t=r}}},function(e,t,n){var o=n(28).navigator;e.exports=o&&o.userAgent||""},function(e,t,n){"use strict";var o=n(30),r=n(18),a=n(28),i=n(233),p=n(236);o(o.P+o.R,"Promise",{finally:function(e){var t=i(this,r.Promise||a.Promise),n="function"==typeof e;return this.then(n?function(n){return p(t,e()).then(function(){return n})}:e,n?function(n){return p(t,e()).then(function(){throw n})}:e)}})},function(e,t,n){"use strict";var o=n(30),r=n(162),a=n(235);o(o.S,"Promise",{try:function(e){var t=r.f(this),n=a(e);return(n.e?t.reject:t.resolve)(n.v),t.promise}})},function(e,t,n){var o=n(18),r=o.JSON||(o.JSON={stringify:JSON.stringify});e.exports=function(e){return r.stringify.apply(r,arguments)}},function(e,t,n){n(548),e.exports=n(18).Object.getPrototypeOf},function(e,t,n){var o=n(83),r=n(208);n(175)("getPrototypeOf",function(){return function(e){return r(o(e))}})},function(e,t,n){e.exports={default:n(550),__esModule:!0}},function(e,t,n){n(551),e.exports=n(18).Object.setPrototypeOf},function(e,t,n){var o=n(30);o(o.S,"Object",{setPrototypeOf:n(552).set})},function(e,t,n){var o=n(41),r=n(46),a=function(e,t){if(r(e),!o(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,o){try{(o=n(60)(Function.call,n(210).f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,n){return a(e,n),t?e.__proto__=n:o(e,n),e}}({},!1):void 0),check:a}},function(e,t,n){e.exports={default:n(554),__esModule:!0}},function(e,t,n){n(555);var o=n(18).Object;e.exports=function(e,t){return o.create(e,t)}},function(e,t,n){var o=n(30);o(o.S,"Object",{create:n(133)})},function(e,t){!function(e){"use strict";if(!e.fetch){var t={searchParams:"URLSearchParams"in e,iterable:"Symbol"in e&&"iterator"in Symbol,blob:"FileReader"in e&&"Blob"in e&&function(){try{return new Blob,!0}catch(e){return!1}}(),formData:"FormData"in e,arrayBuffer:"ArrayBuffer"in e};if(t.arrayBuffer)var n=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],o=function(e){return e&&DataView.prototype.isPrototypeOf(e)},r=ArrayBuffer.isView||function(e){return e&&n.indexOf(Object.prototype.toString.call(e))>-1};b.prototype.append=function(e,t){e=p(e),t=s(t);var n=this.map[e];n||(n=[],this.map[e]=n),n.push(t)},b.prototype.delete=function(e){delete this.map[p(e)]},b.prototype.get=function(e){var t=this.map[p(e)];return t?t[0]:null},b.prototype.getAll=function(e){return this.map[p(e)]||[]},b.prototype.has=function(e){return this.map.hasOwnProperty(p(e))},b.prototype.set=function(e,t){this.map[p(e)]=[s(t)]},b.prototype.forEach=function(e,t){Object.getOwnPropertyNames(this.map).forEach(function(n){this.map[n].forEach(function(o){e.call(t,o,n,this)},this)},this)},b.prototype.keys=function(){var e=[];return this.forEach(function(t,n){e.push(n)}),c(e)},b.prototype.values=function(){var e=[];return this.forEach(function(t){e.push(t)}),c(e)},b.prototype.entries=function(){var e=[];return this.forEach(function(t,n){e.push([n,t])}),c(e)},t.iterable&&(b.prototype[Symbol.iterator]=b.prototype.entries);var a=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];f.prototype.clone=function(){return new f(this,{body:this._bodyInit})},z.call(f.prototype),z.call(A.prototype),A.prototype.clone=function(){return new A(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new b(this.headers),url:this.url})},A.error=function(){var e=new A(null,{status:0,statusText:""});return e.type="error",e};var i=[301,302,303,307,308];A.redirect=function(e,t){if(-1===i.indexOf(t))throw new RangeError("Invalid status code");return new A(null,{status:t,headers:{location:e}})},e.Headers=b,e.Request=f,e.Response=A,e.fetch=function(e,n){return new Promise(function(o,r){var a=new f(e,n),i=new XMLHttpRequest;i.onload=function(){var e,t,n={status:i.status,statusText:i.statusText,headers:(e=i.getAllResponseHeaders()||"",t=new b,e.split("\r\n").forEach(function(e){var n=e.split(":"),o=n.shift().trim();if(o){var r=n.join(":").trim();t.append(o,r)}}),t)};n.url="responseURL"in i?i.responseURL:n.headers.get("X-Request-URL");var r="response"in i?i.response:i.responseText;o(new A(r,n))},i.onerror=function(){r(new TypeError("Network request failed"))},i.ontimeout=function(){r(new TypeError("Network request failed"))},i.open(a.method,a.url,!0),"include"===a.credentials&&(i.withCredentials=!0),"responseType"in i&&t.blob&&(i.responseType="blob"),a.headers.forEach(function(e,t){i.setRequestHeader(t,e)}),i.send(void 0===a._bodyInit?null:a._bodyInit)})},e.fetch.polyfill=!0}function p(e){if("string"!=typeof e&&(e=String(e)),/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(e))throw new TypeError("Invalid character in header field name");return e.toLowerCase()}function s(e){return"string"!=typeof e&&(e=String(e)),e}function c(e){var n={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return t.iterable&&(n[Symbol.iterator]=function(){return n}),n}function b(e){this.map={},e instanceof b?e.forEach(function(e,t){this.append(t,e)},this):e&&Object.getOwnPropertyNames(e).forEach(function(t){this.append(t,e[t])},this)}function M(e){if(e.bodyUsed)return Promise.reject(new TypeError("Already read"));e.bodyUsed=!0}function l(e){return new Promise(function(t,n){e.onload=function(){t(e.result)},e.onerror=function(){n(e.error)}})}function u(e){var t=new FileReader,n=l(t);return t.readAsArrayBuffer(e),n}function d(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function z(){return this.bodyUsed=!1,this._initBody=function(e){if(this._bodyInit=e,e)if("string"==typeof e)this._bodyText=e;else if(t.blob&&Blob.prototype.isPrototypeOf(e))this._bodyBlob=e;else if(t.formData&&FormData.prototype.isPrototypeOf(e))this._bodyFormData=e;else if(t.searchParams&&URLSearchParams.prototype.isPrototypeOf(e))this._bodyText=e.toString();else if(t.arrayBuffer&&t.blob&&o(e))this._bodyArrayBuffer=d(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer]);else{if(!t.arrayBuffer||!ArrayBuffer.prototype.isPrototypeOf(e)&&!r(e))throw new Error("unsupported BodyInit type");this._bodyArrayBuffer=d(e)}else this._bodyText="";this.headers.get("content-type")||("string"==typeof e?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):t.searchParams&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},t.blob&&(this.blob=function(){var e=M(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?M(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(u)}),this.text=function(){var e,t,n,o=M(this);if(o)return o;if(this._bodyBlob)return e=this._bodyBlob,n=l(t=new FileReader),t.readAsText(e),n;if(this._bodyArrayBuffer)return Promise.resolve(function(e){for(var t=new Uint8Array(e),n=new Array(t.length),o=0;o<t.length;o++)n[o]=String.fromCharCode(t[o]);return n.join("")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},t.formData&&(this.formData=function(){return this.text().then(O)}),this.json=function(){return this.text().then(JSON.parse)},this}function f(e,t){var n,o,r=(t=t||{}).body;if("string"==typeof e)this.url=e;else{if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new b(e.headers)),this.method=e.method,this.mode=e.mode,r||null==e._bodyInit||(r=e._bodyInit,e.bodyUsed=!0)}if(this.credentials=t.credentials||this.credentials||"omit",!t.headers&&this.headers||(this.headers=new b(t.headers)),this.method=(o=(n=t.method||this.method||"GET").toUpperCase(),a.indexOf(o)>-1?o:n),this.mode=t.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&r)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(r)}function O(e){var t=new FormData;return e.trim().split("&").forEach(function(e){if(e){var n=e.split("="),o=n.shift().replace(/\+/g," "),r=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(o),decodeURIComponent(r))}}),t}function A(e,t){t||(t={}),this.type="default",this.status="status"in t?t.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in t?t.statusText:"OK",this.headers=new b(t.headers),this.url=t.url||"",this._initBody(e)}}("undefined"!=typeof self?self:this)},function(e,t,n){(function(t,n){var o;o=function(){"use strict";function e(e){return"function"==typeof e}var o=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},r=0,a=void 0,i=void 0,p=function(e,t){d[r]=e,d[r+1]=t,2===(r+=2)&&(i?i(z):m())},s="undefined"!=typeof window?window:void 0,c=s||{},b=c.MutationObserver||c.WebKitMutationObserver,M="undefined"==typeof self&&void 0!==t&&"[object process]"==={}.toString.call(t),l="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function u(){var e=setTimeout;return function(){return e(z,1)}}var d=new Array(1e3);function z(){for(var e=0;e<r;e+=2)(0,d[e])(d[e+1]),d[e]=void 0,d[e+1]=void 0;r=0}var f,O,A,h,m=void 0;function q(e,t){var n=this,o=new this.constructor(g);void 0===o[W]&&P(o);var r=n._state;if(r){var a=arguments[r-1];p(function(){return C(r,o,a,n._result)})}else N(n,o,e,t);return o}function _(e){if(e&&"object"==typeof e&&e.constructor===this)return e;var t=new this(g);return k(t,e),t}M?m=function(){return t.nextTick(z)}:b?(O=0,A=new b(z),h=document.createTextNode(""),A.observe(h,{characterData:!0}),m=function(){h.data=O=++O%2}):l?((f=new MessageChannel).port1.onmessage=z,m=function(){return f.port2.postMessage(0)}):m=void 0===s?function(){try{var e=Function("return this")().require("vertx");return void 0!==(a=e.runOnLoop||e.runOnContext)?function(){a(z)}:u()}catch(e){return u()}}():u();var W=Math.random().toString(36).substring(2);function g(){}var v=void 0,y=1,L=2,R={error:null};function E(e){try{return e.then}catch(e){return R.error=e,R}}function w(t,n,o){n.constructor===t.constructor&&o===q&&n.constructor.resolve===_?function(e,t){t._state===y?T(e,t._result):t._state===L?S(e,t._result):N(t,void 0,function(t){return k(e,t)},function(t){return S(e,t)})}(t,n):o===R?(S(t,R.error),R.error=null):void 0===o?T(t,n):e(o)?function(e,t,n){p(function(e){var o=!1,r=function(e,t,n,o){try{e.call(t,n,o)}catch(e){return e}}(n,t,function(n){o||(o=!0,t!==n?k(e,n):T(e,n))},function(t){o||(o=!0,S(e,t))},e._label);!o&&r&&(o=!0,S(e,r))},e)}(t,n,o):T(t,n)}function k(e,t){var n,o;e===t?S(e,new TypeError("You cannot resolve a promise with itself")):(o=typeof(n=t),null===n||"object"!==o&&"function"!==o?T(e,t):w(e,t,E(t)))}function B(e){e._onerror&&e._onerror(e._result),X(e)}function T(e,t){e._state===v&&(e._result=t,e._state=y,0!==e._subscribers.length&&p(X,e))}function S(e,t){e._state===v&&(e._state=L,e._result=t,p(B,e))}function N(e,t,n,o){var r=e._subscribers,a=r.length;e._onerror=null,r[a]=t,r[a+y]=n,r[a+L]=o,0===a&&e._state&&p(X,e)}function X(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var o=void 0,r=void 0,a=e._result,i=0;i<t.length;i+=3)o=t[i],r=t[i+n],o?C(n,o,r,a):r(a);e._subscribers.length=0}}function C(t,n,o,r){var a=e(o),i=void 0,p=void 0,s=void 0,c=void 0;if(a){if((i=function(e,t){try{return e(t)}catch(e){return R.error=e,R}}(o,r))===R?(c=!0,p=i.error,i.error=null):s=!0,n===i)return void S(n,new TypeError("A promises callback cannot return that same promise."))}else i=r,s=!0;n._state!==v||(a&&s?k(n,i):c?S(n,p):t===y?T(n,i):t===L&&S(n,i))}var D=0;function P(e){e[W]=D++,e._state=void 0,e._result=void 0,e._subscribers=[]}var x=function(){function e(e,t){this._instanceConstructor=e,this.promise=new e(g),this.promise[W]||P(this.promise),o(t)?(this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?T(this.promise,this._result):(this.length=this.length||0,this._enumerate(t),0===this._remaining&&T(this.promise,this._result))):S(this.promise,new Error("Array Methods must be provided an Array"))}return e.prototype._enumerate=function(e){for(var t=0;this._state===v&&t<e.length;t++)this._eachEntry(e[t],t)},e.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,o=n.resolve;if(o===_){var r=E(e);if(r===q&&e._state!==v)this._settledAt(e._state,t,e._result);else if("function"!=typeof r)this._remaining--,this._result[t]=e;else if(n===H){var a=new n(g);w(a,e,r),this._willSettleAt(a,t)}else this._willSettleAt(new n(function(t){return t(e)}),t)}else this._willSettleAt(o(e),t)},e.prototype._settledAt=function(e,t,n){var o=this.promise;o._state===v&&(this._remaining--,e===L?S(o,n):this._result[t]=n),0===this._remaining&&T(o,this._result)},e.prototype._willSettleAt=function(e,t){var n=this;N(e,void 0,function(e){return n._settledAt(y,t,e)},function(e){return n._settledAt(L,t,e)})},e}(),H=function(){function t(e){this[W]=D++,this._result=this._state=void 0,this._subscribers=[],g!==e&&("function"!=typeof e&&function(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}(),this instanceof t?function(e,t){try{t(function(t){k(e,t)},function(t){S(e,t)})}catch(t){S(e,t)}}(this,e):function(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}())}return t.prototype.catch=function(e){return this.then(null,e)},t.prototype.finally=function(t){var n=this.constructor;return e(t)?this.then(function(e){return n.resolve(t()).then(function(){return e})},function(e){return n.resolve(t()).then(function(){throw e})}):this.then(t,t)},t}();return H.prototype.then=q,H.all=function(e){return new x(this,e).promise},H.race=function(e){var t=this;return o(e)?new t(function(n,o){for(var r=e.length,a=0;a<r;a++)t.resolve(e[a]).then(n,o)}):new t(function(e,t){return t(new TypeError("You must pass an array to race."))})},H.resolve=_,H.reject=function(e){var t=new this(g);return S(t,e),t},H._setScheduler=function(e){i=e},H._setAsap=function(e){p=e},H._asap=p,H.polyfill=function(){var e=void 0;if(void 0!==n)e=n;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var t=e.Promise;if(t){var o=null;try{o=Object.prototype.toString.call(t.resolve())}catch(e){}if("[object Promise]"===o&&!t.cast)return}e.Promise=H},H.Promise=H,H},e.exports=o()}).call(this,n(71),n(44))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.regeneratePostByEmailAddress=t.updateModuleOptions=t.deactivateModule=t.activateModule=t.fetchModule=t.fetchModules=void 0,t.maybeHideNavMenuItem=M,t.maybeReloadAfterAction=function(e){(0,c.default)(["masterbar","jetpack_testimonial","jetpack_portfolio"],function(t){return t in e})&&window.location.reload()};var o=n(76),r=n(8),a=b(n(177)),i=n(14),p=n(159),s=b(n(37)),c=b(n(179));function b(e){return e&&e.__esModule?e:{default:e}}function M(e,t){switch(e){case"custom-content-types":t||jQuery("#menu-posts-jetpack-portfolio, #menu-posts-jetpack-testimonial").toggle(),(0,a.default)(t,function(e,t){"jetpack_portfolio"===t&&jQuery("#menu-posts-jetpack-portfolio, .jp-toggle-portfolio").toggle(),"jetpack_testimonial"===t&&jQuery("#menu-posts-jetpack-testimonial, .jp-toggle-testimonial").toggle()});break;default:return!1}}t.fetchModules=function(){return function(e){return e({type:i.JETPACK_MODULES_LIST_FETCH}),s.default.fetchModules().then(function(t){return e({type:i.JETPACK_MODULES_LIST_RECEIVE,modules:t}),t}).catch(function(t){e({type:i.JETPACK_MODULES_LIST_FETCH_FAIL,error:t})})}},t.fetchModule=function(){return function(e){return e({type:i.JETPACK_MODULE_FETCH}),s.default.fetchModule().then(function(t){return e({type:i.JETPACK_MODULE_RECEIVE,module:t}),t}).catch(function(t){e({type:i.JETPACK_MODULE_FETCH_FAIL,error:t})})}},t.activateModule=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return function(n,a){return n({type:i.JETPACK_MODULE_ACTIVATE,module:e}),n((0,o.removeNotice)("module-toggle")),n((0,o.createNotice)("is-info",(0,r.translate)("Activating %(slug)s…",{args:{slug:(0,p.getModule)(a(),e).name}}),{id:"module-toggle"})),s.default.activateModule(e).then(function(){n({type:i.JETPACK_MODULE_ACTIVATE_SUCCESS,module:e,success:!0}),n((0,o.removeNotice)("module-toggle")),n((0,o.createNotice)("is-success",(0,r.translate)("%(slug)s has been activated.",{args:{slug:(0,p.getModule)(a(),e).name}}),{id:"module-toggle",duration:2e3})),t&&window.location.reload()}).catch(function(t){n({type:i.JETPACK_MODULE_ACTIVATE_FAIL,module:e,success:!1,error:t}),n((0,o.removeNotice)("module-toggle")),n((0,o.createNotice)("is-error",(0,r.translate)("%(slug)s failed to activate. %(error)s",{args:{slug:(0,p.getModule)(a(),e).name,error:t}}),{id:"module-toggle"}))})}},t.deactivateModule=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return function(n,a){return n({type:i.JETPACK_MODULE_DEACTIVATE,module:e}),n((0,o.removeNotice)("module-toggle")),n((0,o.createNotice)("is-info",(0,r.translate)("Deactivating %(slug)s…",{args:{slug:(0,p.getModule)(a(),e).name}}),{id:"module-toggle"})),s.default.deactivateModule(e).then(function(){n({type:i.JETPACK_MODULE_DEACTIVATE_SUCCESS,module:e,success:!0}),n((0,o.removeNotice)("module-toggle")),n((0,o.createNotice)("is-success",(0,r.translate)("%(slug)s has been deactivated.",{args:{slug:(0,p.getModule)(a(),e).name}}),{id:"module-toggle",duration:2e3})),t&&window.location.reload()}).catch(function(t){n({type:i.JETPACK_MODULE_DEACTIVATE_FAIL,module:e,success:!1,error:t}),n((0,o.removeNotice)("module-toggle")),n((0,o.createNotice)("is-error",(0,r.translate)("%(slug)s failed to deactivate. %(error)s",{args:{slug:(0,p.getModule)(a(),e).name,error:t}}),{id:"module-toggle"}))})}},t.updateModuleOptions=function(e,t){var n=e.module;return function(e,a){return e({type:i.JETPACK_MODULE_UPDATE_OPTIONS,module:n,newOptionValues:t}),e((0,o.removeNotice)("module-setting-"+n)),e((0,o.createNotice)("is-info",(0,r.translate)("Updating %(slug)s settings…",{args:{slug:(0,p.getModule)(a(),n).name}}),{id:"module-setting-"+n})),s.default.updateModuleOptions(n,t).then(function(s){e({type:i.JETPACK_MODULE_UPDATE_OPTIONS_SUCCESS,module:n,newOptionValues:t,success:s}),M(n,t),e((0,o.removeNotice)("module-setting-"+n)),e((0,o.createNotice)("is-success",(0,r.translate)("Updated %(slug)s settings.",{args:{slug:(0,p.getModule)(a(),n).name}}),{id:"module-setting-"+n,duration:2e3}))}).catch(function(s){e({type:i.JETPACK_MODULE_UPDATE_OPTIONS_FAIL,module:n,success:!1,error:s,newOptionValues:t}),e((0,o.removeNotice)("module-setting-"+n)),e((0,o.createNotice)("is-error",(0,r.translate)("Error updating %(slug)s settings. %(error)s",{args:{slug:(0,p.getModule)(a(),n).name,error:s}}),{id:"module-setting-"+n}))})}},t.regeneratePostByEmailAddress=function(){var e="post-by-email",t={post_by_email_address:"regenerate"};return function(n,a){return n({type:i.JETPACK_MODULE_UPDATE_OPTIONS,module:e,newOptionValues:t}),n((0,o.removeNotice)("module-setting-"+e)),n((0,o.createNotice)("is-info",(0,r.translate)("Updating %(slug)s address…",{args:{slug:(0,p.getModule)(a(),e).name}}),{id:"module-setting-"+e})),s.default.updateModuleOptions(e,t).then(function(t){var s={post_by_email_address:t.post_by_email_address};n({type:i.JETPACK_MODULE_UPDATE_OPTIONS_SUCCESS,module:e,newOptionValues:s,success:t}),n((0,o.removeNotice)("module-setting-"+e)),n((0,o.createNotice)("is-success",(0,r.translate)("Regenerated %(slug)s address .",{args:{slug:(0,p.getModule)(a(),e).name}}),{id:"module-setting-"+e,duration:2e3}))}).catch(function(s){n({type:i.JETPACK_MODULE_UPDATE_OPTIONS_FAIL,module:e,success:!1,error:s,newOptionValues:t}),n((0,o.removeNotice)("module-setting-"+e)),n((0,o.createNotice)("is-error",(0,r.translate)("Error regenerating %(slug)s address. %(error)s",{args:{slug:(0,p.getModule)(a(),e).name,error:s}}),{id:"module-setting-"+e}))})}}},function(e,t,n){var o=n(170),r=0;e.exports=function(e){var t=++r;return o(e)+t}},function(e,t,n){var o=n(104)("i18n-calypso"),r=n(563),a=n(564),i=n(404),p=n(123).EventEmitter,s=n(568).default,c=n(572),b=n(368),M=n(573),l=[function(e){return e}],u={};function d(){h.throwErrors&&"undefined"!=typeof window&&window.console&&window.console.warn&&window.console.warn.apply(window.console,arguments)}function z(e){return Array.prototype.slice.call(e)}function f(e){var t,n=e[0],o={};for(("string"!=typeof n||e.length>3||e.length>2&&"object"==typeof e[1]&&"object"==typeof e[2])&&d("Deprecated Invocation: `translate()` accepts ( string, [string], [object] ). These arguments passed:",z(e),". See https://github.com/Automattic/i18n-calypso#translate-method"),2===e.length&&"string"==typeof n&&"string"==typeof e[1]&&d("Invalid Invocation: `translate()` requires an options object for plural translations, but passed:",z(e)),t=0;t<e.length;t++)"object"==typeof e[t]&&(o=e[t]);if("string"==typeof n?o.original=n:"object"==typeof o.original&&(o.plural=o.original.plural,o.count=o.original.count,o.original=o.original.single),"string"==typeof e[1]&&(o.plural=e[1]),void 0===o.original)throw new Error("Translate called without a `string` value as first argument.");return o}function O(e,t){var n,o="gettext";return t.context&&(o="p"+o),"string"==typeof t.original&&"string"==typeof t.plural&&(o="n"+o),n=function(e,t){switch(o){case"gettext":return[t.original];case"ngettext":return[t.original,t.plural,t.count];case"npgettext":return[t.context,t.original,t.plural,t.count];case"pgettext":return[t.context,t.original]}return[]}(0,t),e[o].apply(e,n)}function A(e,t){var n,o;for(n=l.length-1;n>=0;n--)if(o=l[n](b({},t)),e.state.locale[o.original])return O(e.state.jed,o);return null}function h(){if(!(this instanceof h))return new h;this.defaultLocaleSlug="en",this.state={numberFormatSettings:{},jed:void 0,locale:void 0,localeSlug:void 0,translations:c({max:100})},this.componentUpdateHooks=[],this.translateHooks=[],this.stateObserver=new p,this.stateObserver.setMaxListeners(0),this.configure()}h.throwErrors=!1,h.prototype.moment=a,h.prototype.numberFormat=function(e){var t=arguments[1]||{},n="number"==typeof t?t:t.decimals||0,o=t.decPoint||this.state.numberFormatSettings.decimal_point||".",r=t.thousandsSep||this.state.numberFormatSettings.thousands_sep||",";return M(e,n,o,r)},h.prototype.configure=function(e){b(this,e||{}),this.setLocale()},h.prototype.setLocale=function(e){if(e&&e[""]&&e[""]["key-hash"]){var t,n,o,p=e[""]["key-hash"],s=function(e,t){const n=!1===t?"":String(t);if(void 0!==u[n+e])return u[n+e];var o=i().update(e).digest("hex");return u[n+e]=t?o.substr(0,t):o},c=function(e){return function(t){return t.context?(t.original=s(t.context+String.fromCharCode(4)+t.original,e),delete t.context):t.original=s(t.original,e),t}};if("sha1"===p.substr(0,4))if(4===p.length)l.push(c(!1));else{var M=p.substr(5).indexOf("-");if(M<0)t=Number(p.substr(5)),l.push(c(t));else for(n=Number(p.substr(5,M)),o=Number(p.substr(6+M)),t=n;t<=o;t++)l.push(c(t))}}if(e&&e[""].localeSlug)if(e[""].localeSlug===this.state.localeSlug){if(e===this.state.locale)return;b(this.state.locale,e)}else this.state.locale=b({},e);else this.state.locale={"":{localeSlug:this.defaultLocaleSlug}};this.state.localeSlug=this.state.locale[""].localeSlug,this.state.jed=new r({locale_data:{messages:this.state.locale}}),a.locale(this.state.localeSlug),this.state.numberFormatSettings.decimal_point=O(this.state.jed,f(["number_format_decimals"])),this.state.numberFormatSettings.thousands_sep=O(this.state.jed,f(["number_format_thousands_sep"])),"number_format_decimals"===this.state.numberFormatSettings.decimal_point&&(this.state.numberFormatSettings.decimal_point="."),"number_format_thousands_sep"===this.state.numberFormatSettings.thousands_sep&&(this.state.numberFormatSettings.thousands_sep=","),this.state.translations.clear(),this.stateObserver.emit("change")},h.prototype.getLocale=function(){return this.state.locale},h.prototype.getLocaleSlug=function(){return this.state.localeSlug},h.prototype.addTranslations=function(e){for(var t in e)""!==t&&(this.state.jed.options.locale_data.messages[t]=e[t]);this.state.translations.clear(),this.stateObserver.emit("change")},h.prototype.hasTranslation=function(){return!!A(this,f(arguments))},h.prototype.translate=function(){var e,t,n,o,a,i;if(i=!(e=f(arguments)).components){try{a=JSON.stringify(e)}catch(e){i=!1}if(a&&(t=this.state.translations.get(a)))return t}if((t=A(this,e))||(t=O(this.state.jed,e)),e.args){(n=Array.isArray(e.args)?e.args.slice(0):[e.args]).unshift(t);try{t=r.sprintf.apply(r,n)}catch(e){if(!window||!window.console)return;o=this.throwErrors?"error":"warn","string"!=typeof e?window.console[o](e):window.console[o]("i18n sprintf error:",n)}}return e.components&&(t=s({mixedString:t,components:e.components,throwErrors:this.throwErrors})),this.translateHooks.forEach(function(n){t=n(t,e)}),i&&this.state.translations.set(a,t),t},h.prototype.reRenderTranslations=function(){o("Re-rendering all translations due to external request"),this.state.translations.clear(),this.stateObserver.emit("change")},h.prototype.registerComponentUpdateHook=function(e){this.componentUpdateHooks.push(e)},h.prototype.registerTranslateHook=function(e){this.translateHooks.push(e)},e.exports=h},function(e,t,n){var o;function r(e){function n(){if(n.enabled){var e=n,r=+new Date,a=r-(o||r);e.diff=a,e.prev=o,e.curr=r,o=r;for(var i=new Array(arguments.length),p=0;p<i.length;p++)i[p]=arguments[p];i[0]=t.coerce(i[0]),"string"!=typeof i[0]&&i.unshift("%O");var s=0;i[0]=i[0].replace(/%([a-zA-Z%])/g,function(n,o){if("%%"===n)return n;s++;var r=t.formatters[o];if("function"==typeof r){var a=i[s];n=r.call(e,a),i.splice(s,1),s--}return n}),t.formatArgs.call(e,i),(n.log||t.log||console.log.bind(console)).apply(e,i)}}return n.namespace=e,n.enabled=t.enabled(e),n.useColors=t.useColors(),n.color=function(e){var n,o=0;for(n in e)o=(o<<5)-o+e.charCodeAt(n),o|=0;return t.colors[Math.abs(o)%t.colors.length]}(e),"function"==typeof t.init&&t.init(n),n}(t=e.exports=r.debug=r.default=r).coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){t.enable("")},t.enable=function(e){t.save(e),t.names=[],t.skips=[];for(var n=("string"==typeof e?e:"").split(/[\s,]+/),o=n.length,r=0;r<o;r++)n[r]&&("-"===(e=n[r].replace(/\*/g,".*?"))[0]?t.skips.push(new RegExp("^"+e.substr(1)+"$")):t.names.push(new RegExp("^"+e+"$")))},t.enabled=function(e){var n,o;for(n=0,o=t.skips.length;n<o;n++)if(t.skips[n].test(e))return!1;for(n=0,o=t.names.length;n<o;n++)if(t.names[n].test(e))return!0;return!1},t.humanize=n(562),t.names=[],t.skips=[],t.formatters={}},function(e,t){var n=1e3,o=6e4,r=36e5,a=24*r;function i(e,t,n,o){var r=t>=1.5*n;return Math.round(e/n)+" "+o+(r?"s":"")}e.exports=function(e,t){t=t||{};var p=typeof e;if("string"===p&&e.length>0)return function(e){if(!((e=String(e)).length>100)){var t=/^((?:\d+)?\-?\d?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(t){var i=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*i;case"weeks":case"week":case"w":return 6048e5*i;case"days":case"day":case"d":return i*a;case"hours":case"hour":case"hrs":case"hr":case"h":return i*r;case"minutes":case"minute":case"mins":case"min":case"m":return i*o;case"seconds":case"second":case"secs":case"sec":case"s":return i*n;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return i;default:return}}}}(e);if("number"===p&&!1===isNaN(e))return t.long?function(e){var t=Math.abs(e);return t>=a?i(e,t,a,"day"):t>=r?i(e,t,r,"hour"):t>=o?i(e,t,o,"minute"):t>=n?i(e,t,n,"second"):e+" ms"}(e):function(e){var t=Math.abs(e);return t>=a?Math.round(e/a)+"d":t>=r?Math.round(e/r)+"h":t>=o?Math.round(e/o)+"m":t>=n?Math.round(e/n)+"s":e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},function(e,t,n){!function(n,o){var r=Array.prototype,a=Object.prototype,i=r.slice,p=a.hasOwnProperty,s=r.forEach,c={},b={forEach:function(e,t,n){var o,r,a;if(null!==e)if(s&&e.forEach===s)e.forEach(t,n);else if(e.length===+e.length){for(o=0,r=e.length;o<r;o++)if(o in e&&t.call(n,e[o],o,e)===c)return}else for(a in e)if(p.call(e,a)&&t.call(n,e[a],a,e)===c)return},extend:function(e){return this.forEach(i.call(arguments,1),function(t){for(var n in t)e[n]=t[n]}),e}},M=function(e){if(this.defaults={locale_data:{messages:{"":{domain:"messages",lang:"en",plural_forms:"nplurals=2; plural=(n != 1);"}}},domain:"messages",debug:!1},this.options=b.extend({},this.defaults,e),this.textdomain(this.options.domain),e.domain&&!this.options.locale_data[this.options.domain])throw new Error("Text domain set to non-existent domain: `"+e.domain+"`")};function l(e){return M.PF.compile(e||"nplurals=2; plural=(n != 1);")}function u(e,t){this._key=e,this._i18n=t}M.context_delimiter=String.fromCharCode(4),b.extend(u.prototype,{onDomain:function(e){return this._domain=e,this},withContext:function(e){return this._context=e,this},ifPlural:function(e,t){return this._val=e,this._pkey=t,this},fetch:function(e){return"[object Array]"!={}.toString.call(e)&&(e=[].slice.call(arguments,0)),(e&&e.length?M.sprintf:function(e){return e})(this._i18n.dcnpgettext(this._domain,this._context,this._key,this._pkey,this._val),e)}}),b.extend(M.prototype,{translate:function(e){return new u(e,this)},textdomain:function(e){if(!e)return this._textdomain;this._textdomain=e},gettext:function(e){return this.dcnpgettext.call(this,void 0,void 0,e)},dgettext:function(e,t){return this.dcnpgettext.call(this,e,void 0,t)},dcgettext:function(e,t){return this.dcnpgettext.call(this,e,void 0,t)},ngettext:function(e,t,n){return this.dcnpgettext.call(this,void 0,void 0,e,t,n)},dngettext:function(e,t,n,o){return this.dcnpgettext.call(this,e,void 0,t,n,o)},dcngettext:function(e,t,n,o){return this.dcnpgettext.call(this,e,void 0,t,n,o)},pgettext:function(e,t){return this.dcnpgettext.call(this,void 0,e,t)},dpgettext:function(e,t,n){return this.dcnpgettext.call(this,e,t,n)},dcpgettext:function(e,t,n){return this.dcnpgettext.call(this,e,t,n)},npgettext:function(e,t,n,o){return this.dcnpgettext.call(this,void 0,e,t,n,o)},dnpgettext:function(e,t,n,o,r){return this.dcnpgettext.call(this,e,t,n,o,r)},dcnpgettext:function(e,t,n,o,r){var a;if(o=o||n,e=e||this._textdomain,!this.options)return(a=new M).dcnpgettext.call(a,void 0,void 0,n,o,r);if(!this.options.locale_data)throw new Error("No locale data provided.");if(!this.options.locale_data[e])throw new Error("Domain `"+e+"` was not found.");if(!this.options.locale_data[e][""])throw new Error("No locale meta information provided.");if(!n)throw new Error("No translation key found.");var i,p,s,c=t?t+M.context_delimiter+n:n,b=this.options.locale_data,u=b[e],d=(b.messages||this.defaults.locale_data.messages)[""],z=u[""].plural_forms||u[""]["Plural-Forms"]||u[""]["plural-forms"]||d.plural_forms||d["Plural-Forms"]||d["plural-forms"];if(void 0===r)s=0;else{if("number"!=typeof r&&(r=parseInt(r,10),isNaN(r)))throw new Error("The number that was passed in is not a number.");s=l(z)(r)}if(!u)throw new Error("No domain named `"+e+"` could be found.");return!(i=u[c])||s>i.length?(this.options.missing_key_callback&&this.options.missing_key_callback(c,e),p=[n,o],!0===this.options.debug&&console.log(p[l(z)(r)]),p[l()(r)]):(p=i[s])||(p=[n,o])[l()(r)]}});var d,z,f=function(){function e(e){return Object.prototype.toString.call(e).slice(8,-1).toLowerCase()}function t(e,t){for(var n=[];t>0;n[--t]=e);return n.join("")}var n=function(){return n.cache.hasOwnProperty(arguments[0])||(n.cache[arguments[0]]=n.parse(arguments[0])),n.format.call(null,n.cache[arguments[0]],arguments)};return n.format=function(n,o){var r,a,i,p,s,c,b,M=1,l=n.length,u="",d=[];for(a=0;a<l;a++)if("string"===(u=e(n[a])))d.push(n[a]);else if("array"===u){if((p=n[a])[2])for(r=o[M],i=0;i<p[2].length;i++){if(!r.hasOwnProperty(p[2][i]))throw f('[sprintf] property "%s" does not exist',p[2][i]);r=r[p[2][i]]}else r=p[1]?o[p[1]]:o[M++];if(/[^s]/.test(p[8])&&"number"!=e(r))throw f("[sprintf] expecting number but found %s",e(r));switch(null==r&&(r=""),p[8]){case"b":r=r.toString(2);break;case"c":r=String.fromCharCode(r);break;case"d":r=parseInt(r,10);break;case"e":r=p[7]?r.toExponential(p[7]):r.toExponential();break;case"f":r=p[7]?parseFloat(r).toFixed(p[7]):parseFloat(r);break;case"o":r=r.toString(8);break;case"s":r=(r=String(r))&&p[7]?r.substring(0,p[7]):r;break;case"u":r=Math.abs(r);break;case"x":r=r.toString(16);break;case"X":r=r.toString(16).toUpperCase()}r=/[def]/.test(p[8])&&p[3]&&r>=0?"+"+r:r,c=p[4]?"0"==p[4]?"0":p[4].charAt(1):" ",b=p[6]-String(r).length,s=p[6]?t(c,b):"",d.push(p[5]?r+s:s+r)}return d.join("")},n.cache={},n.parse=function(e){for(var t=e,n=[],o=[],r=0;t;){if(null!==(n=/^[^\x25]+/.exec(t)))o.push(n[0]);else if(null!==(n=/^\x25{2}/.exec(t)))o.push("%");else{if(null===(n=/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(t)))throw"[sprintf] huh?";if(n[2]){r|=1;var a=[],i=n[2],p=[];if(null===(p=/^([a-z_][a-z_\d]*)/i.exec(i)))throw"[sprintf] huh?";for(a.push(p[1]);""!==(i=i.substring(p[0].length));)if(null!==(p=/^\.([a-z_][a-z_\d]*)/i.exec(i)))a.push(p[1]);else{if(null===(p=/^\[(\d+)\]/.exec(i)))throw"[sprintf] huh?";a.push(p[1])}n[2]=a}else r|=2;if(3===r)throw"[sprintf] mixing positional and named placeholders is not (yet) supported";o.push(n)}t=t.substring(n[0].length)}return o},n}();M.parse_plural=function(e,t){return e=e.replace(/n/g,t),M.parse_expression(e)},M.sprintf=function(e,t){return"[object Array]"=={}.toString.call(t)?function(e,t){return t.unshift(e),f.apply(null,t)}(e,[].slice.call(t)):f.apply(this,[].slice.call(arguments))},M.prototype.sprintf=function(){return M.sprintf.apply(this,arguments)},M.PF={},M.PF.parse=function(e){var t=M.PF.extractPluralExpr(e);return M.PF.parser.parse.call(M.PF.parser,t)},M.PF.compile=function(e){var t=M.PF.parse(e);return function(e){return!0===(n=M.PF.interpreter(t)(e))?1:n||0;var n}},M.PF.interpreter=function(e){return function(t){switch(e.type){case"GROUP":return M.PF.interpreter(e.expr)(t);case"TERNARY":return M.PF.interpreter(e.expr)(t)?M.PF.interpreter(e.truthy)(t):M.PF.interpreter(e.falsey)(t);case"OR":return M.PF.interpreter(e.left)(t)||M.PF.interpreter(e.right)(t);case"AND":return M.PF.interpreter(e.left)(t)&&M.PF.interpreter(e.right)(t);case"LT":return M.PF.interpreter(e.left)(t)<M.PF.interpreter(e.right)(t);case"GT":return M.PF.interpreter(e.left)(t)>M.PF.interpreter(e.right)(t);case"LTE":return M.PF.interpreter(e.left)(t)<=M.PF.interpreter(e.right)(t);case"GTE":return M.PF.interpreter(e.left)(t)>=M.PF.interpreter(e.right)(t);case"EQ":return M.PF.interpreter(e.left)(t)==M.PF.interpreter(e.right)(t);case"NEQ":return M.PF.interpreter(e.left)(t)!=M.PF.interpreter(e.right)(t);case"MOD":return M.PF.interpreter(e.left)(t)%M.PF.interpreter(e.right)(t);case"VAR":return t;case"NUM":return e.val;default:throw new Error("Invalid Token found.")}}},M.PF.extractPluralExpr=function(e){e=e.replace(/^\s\s*/,"").replace(/\s\s*$/,""),/;\s*$/.test(e)||(e=e.concat(";"));var t,n=/nplurals\=(\d+);/,o=e.match(n);if(!(o.length>1))throw new Error("nplurals not found in plural_forms string: "+e);if(o[1],!((t=(e=e.replace(n,"")).match(/plural\=(.*);/))&&t.length>1))throw new Error("`plural` expression not found: "+e);return t[1]},M.PF.parser=(d={trace:function(){},yy:{},symbols_:{error:2,expressions:3,e:4,EOF:5,"?":6,":":7,"||":8,"&&":9,"<":10,"<=":11,">":12,">=":13,"!=":14,"==":15,"%":16,"(":17,")":18,n:19,NUMBER:20,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",6:"?",7:":",8:"||",9:"&&",10:"<",11:"<=",12:">",13:">=",14:"!=",15:"==",16:"%",17:"(",18:")",19:"n",20:"NUMBER"},productions_:[0,[3,2],[4,5],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,1],[4,1]],performAction:function(e,t,n,o,r,a,i){var p=a.length-1;switch(r){case 1:return{type:"GROUP",expr:a[p-1]};case 2:this.$={type:"TERNARY",expr:a[p-4],truthy:a[p-2],falsey:a[p]};break;case 3:this.$={type:"OR",left:a[p-2],right:a[p]};break;case 4:this.$={type:"AND",left:a[p-2],right:a[p]};break;case 5:this.$={type:"LT",left:a[p-2],right:a[p]};break;case 6:this.$={type:"LTE",left:a[p-2],right:a[p]};break;case 7:this.$={type:"GT",left:a[p-2],right:a[p]};break;case 8:this.$={type:"GTE",left:a[p-2],right:a[p]};break;case 9:this.$={type:"NEQ",left:a[p-2],right:a[p]};break;case 10:this.$={type:"EQ",left:a[p-2],right:a[p]};break;case 11:this.$={type:"MOD",left:a[p-2],right:a[p]};break;case 12:this.$={type:"GROUP",expr:a[p-1]};break;case 13:this.$={type:"VAR"};break;case 14:this.$={type:"NUM",val:Number(e)}}},table:[{3:1,4:2,17:[1,3],19:[1,4],20:[1,5]},{1:[3]},{5:[1,6],6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{4:17,17:[1,3],19:[1,4],20:[1,5]},{5:[2,13],6:[2,13],7:[2,13],8:[2,13],9:[2,13],10:[2,13],11:[2,13],12:[2,13],13:[2,13],14:[2,13],15:[2,13],16:[2,13],18:[2,13]},{5:[2,14],6:[2,14],7:[2,14],8:[2,14],9:[2,14],10:[2,14],11:[2,14],12:[2,14],13:[2,14],14:[2,14],15:[2,14],16:[2,14],18:[2,14]},{1:[2,1]},{4:18,17:[1,3],19:[1,4],20:[1,5]},{4:19,17:[1,3],19:[1,4],20:[1,5]},{4:20,17:[1,3],19:[1,4],20:[1,5]},{4:21,17:[1,3],19:[1,4],20:[1,5]},{4:22,17:[1,3],19:[1,4],20:[1,5]},{4:23,17:[1,3],19:[1,4],20:[1,5]},{4:24,17:[1,3],19:[1,4],20:[1,5]},{4:25,17:[1,3],19:[1,4],20:[1,5]},{4:26,17:[1,3],19:[1,4],20:[1,5]},{4:27,17:[1,3],19:[1,4],20:[1,5]},{6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[1,28]},{6:[1,7],7:[1,29],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{5:[2,3],6:[2,3],7:[2,3],8:[2,3],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,3]},{5:[2,4],6:[2,4],7:[2,4],8:[2,4],9:[2,4],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,4]},{5:[2,5],6:[2,5],7:[2,5],8:[2,5],9:[2,5],10:[2,5],11:[2,5],12:[2,5],13:[2,5],14:[2,5],15:[2,5],16:[1,16],18:[2,5]},{5:[2,6],6:[2,6],7:[2,6],8:[2,6],9:[2,6],10:[2,6],11:[2,6],12:[2,6],13:[2,6],14:[2,6],15:[2,6],16:[1,16],18:[2,6]},{5:[2,7],6:[2,7],7:[2,7],8:[2,7],9:[2,7],10:[2,7],11:[2,7],12:[2,7],13:[2,7],14:[2,7],15:[2,7],16:[1,16],18:[2,7]},{5:[2,8],6:[2,8],7:[2,8],8:[2,8],9:[2,8],10:[2,8],11:[2,8],12:[2,8],13:[2,8],14:[2,8],15:[2,8],16:[1,16],18:[2,8]},{5:[2,9],6:[2,9],7:[2,9],8:[2,9],9:[2,9],10:[2,9],11:[2,9],12:[2,9],13:[2,9],14:[2,9],15:[2,9],16:[1,16],18:[2,9]},{5:[2,10],6:[2,10],7:[2,10],8:[2,10],9:[2,10],10:[2,10],11:[2,10],12:[2,10],13:[2,10],14:[2,10],15:[2,10],16:[1,16],18:[2,10]},{5:[2,11],6:[2,11],7:[2,11],8:[2,11],9:[2,11],10:[2,11],11:[2,11],12:[2,11],13:[2,11],14:[2,11],15:[2,11],16:[2,11],18:[2,11]},{5:[2,12],6:[2,12],7:[2,12],8:[2,12],9:[2,12],10:[2,12],11:[2,12],12:[2,12],13:[2,12],14:[2,12],15:[2,12],16:[2,12],18:[2,12]},{4:30,17:[1,3],19:[1,4],20:[1,5]},{5:[2,2],6:[1,7],7:[2,2],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,2]}],defaultActions:{6:[2,1]},parseError:function(e,t){throw new Error(e)},parse:function(e){var t=this,n=[0],o=[null],r=[],a=this.table,i="",p=0,s=0,c=0;this.lexer.setInput(e),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,void 0===this.lexer.yylloc&&(this.lexer.yylloc={});var b=this.lexer.yylloc;function M(){var e;return"number"!=typeof(e=t.lexer.lex()||1)&&(e=t.symbols_[e]||e),e}r.push(b),"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var l,u,d,z,f,O,A,h,m,q={};;){if(d=n[n.length-1],this.defaultActions[d]?z=this.defaultActions[d]:(null==l&&(l=M()),z=a[d]&&a[d][l]),void 0===z||!z.length||!z[0]){if(!c){for(O in m=[],a[d])this.terminals_[O]&&O>2&&m.push("'"+this.terminals_[O]+"'");var _="";_=this.lexer.showPosition?"Parse error on line "+(p+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+m.join(", ")+", got '"+this.terminals_[l]+"'":"Parse error on line "+(p+1)+": Unexpected "+(1==l?"end of input":"'"+(this.terminals_[l]||l)+"'"),this.parseError(_,{text:this.lexer.match,token:this.terminals_[l]||l,line:this.lexer.yylineno,loc:b,expected:m})}if(3==c){if(1==l)throw new Error(_||"Parsing halted.");s=this.lexer.yyleng,i=this.lexer.yytext,p=this.lexer.yylineno,b=this.lexer.yylloc,l=M()}for(;!(2..toString()in a[d]);){if(0==d)throw new Error(_||"Parsing halted.");1,n.length=n.length-2,o.length=o.length-1,r.length=r.length-1,d=n[n.length-1]}u=l,l=2,z=a[d=n[n.length-1]]&&a[d][2],c=3}if(z[0]instanceof Array&&z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+d+", token: "+l);switch(z[0]){case 1:n.push(l),o.push(this.lexer.yytext),r.push(this.lexer.yylloc),n.push(z[1]),l=null,u?(l=u,u=null):(s=this.lexer.yyleng,i=this.lexer.yytext,p=this.lexer.yylineno,b=this.lexer.yylloc,c>0&&c--);break;case 2:if(A=this.productions_[z[1]][1],q.$=o[o.length-A],q._$={first_line:r[r.length-(A||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(A||1)].first_column,last_column:r[r.length-1].last_column},void 0!==(f=this.performAction.call(q,i,s,p,this.yy,z[1],o,r)))return f;A&&(n=n.slice(0,-1*A*2),o=o.slice(0,-1*A),r=r.slice(0,-1*A)),n.push(this.productions_[z[1]][0]),o.push(q.$),r.push(q._$),h=a[n[n.length-2]][n[n.length-1]],n.push(h);break;case 3:return!0}}return!0}},z={EOF:1,parseError:function(e,t){if(!this.yy.parseError)throw new Error(e);this.yy.parseError(e,t)},setInput:function(e){return this._input=e,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.match+=e,this.matched+=e,e.match(/\n/)&&this.yylineno++,this._input=this._input.slice(1),e},unput:function(e){return this._input=e+this._input,this},more:function(){return this._more=!0,this},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},next:function(){if(this.done)return this.EOF;var e,t;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),o=0;o<n.length;o++)if(e=this._input.match(this.rules[n[o]]))return(t=e[0].match(/\n.*/g))&&(this.yylineno+=t.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:t?t[t.length-1].length-1:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this._more=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],this.performAction.call(this,this.yy,this,n[o],this.conditionStack[this.conditionStack.length-1])||void 0;if(""===this._input)return this.EOF;this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return void 0!==e?e:this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(e){this.begin(e)},performAction:function(e,t,n,o){switch(n){case 0:break;case 1:return 20;case 2:return 19;case 3:return 8;case 4:return 9;case 5:return 6;case 6:return 7;case 7:return 11;case 8:return 13;case 9:return 10;case 10:return 12;case 11:return 14;case 12:return 15;case 13:return 16;case 14:return 17;case 15:return 18;case 16:return 5;case 17:return"INVALID"}},rules:[/^\s+/,/^[0-9]+(\.[0-9]+)?\b/,/^n\b/,/^\|\|/,/^&&/,/^\?/,/^:/,/^<=/,/^>=/,/^</,/^>/,/^!=/,/^==/,/^%/,/^\(/,/^\)/,/^$/,/^./],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],inclusive:!0}}},d.lexer=z,d),e.exports&&(t=e.exports=M),t.Jed=M}()},function(e,t,n){(e.exports=n(565)).tz.load(n(567))},function(e,t,n){var o,r,a;!function(i,p){"use strict";e.exports?e.exports=p(n(0)):(r=[n(0)],void 0===(a="function"==typeof(o=p)?o.apply(t,r):o)||(e.exports=a))}(0,function(e){"use strict";var t,n={},o={},r={},a={};e&&"string"==typeof e.version||y("Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/");var i=e.version.split("."),p=+i[0],s=+i[1];function c(e){return e>96?e-87:e>64?e-29:e-48}function b(e){var t=0,n=e.split("."),o=n[0],r=n[1]||"",a=1,i=0,p=1;for(45===e.charCodeAt(0)&&(t=1,p=-1);t<o.length;t++)i=60*i+c(o.charCodeAt(t));for(t=0;t<r.length;t++)a/=60,i+=c(r.charCodeAt(t))*a;return i*p}function M(e){for(var t=0;t<e.length;t++)e[t]=b(e[t])}function l(e,t){var n,o=[];for(n=0;n<t.length;n++)o[n]=e[t[n]];return o}function u(e){var t=e.split("|"),n=t[2].split(" "),o=t[3].split(""),r=t[4].split(" ");return M(n),M(o),M(r),function(e,t){for(var n=0;n<t;n++)e[n]=Math.round((e[n-1]||0)+6e4*e[n]);e[t-1]=1/0}(r,o.length),{name:t[0],abbrs:l(t[1].split(" "),o),offsets:l(n,o),untils:r,population:0|t[5]}}function d(e){e&&this._set(u(e))}function z(e){var t=e.toTimeString(),n=t.match(/\([a-z ]+\)/i);"GMT"===(n=n&&n[0]?(n=n[0].match(/[A-Z]/g))?n.join(""):void 0:(n=t.match(/[A-Z]{3,5}/g))?n[0]:void 0)&&(n=void 0),this.at=+e,this.abbr=n,this.offset=e.getTimezoneOffset()}function f(e){this.zone=e,this.offsetScore=0,this.abbrScore=0}function O(e,t){for(var n,o;o=6e4*((t.at-e.at)/12e4|0);)(n=new z(new Date(e.at+o))).offset===e.offset?e=n:t=n;return e}function A(e,t){return e.offsetScore!==t.offsetScore?e.offsetScore-t.offsetScore:e.abbrScore!==t.abbrScore?e.abbrScore-t.abbrScore:t.zone.population-e.zone.population}function h(e,t){var n,o;for(M(t),n=0;n<t.length;n++)o=t[n],a[o]=a[o]||{},a[o][e]=!0}function m(e){var t,n,o,i=e.length,p={},s=[];for(t=0;t<i;t++)for(n in o=a[e[t].offset]||{})o.hasOwnProperty(n)&&(p[n]=!0);for(t in p)p.hasOwnProperty(t)&&s.push(r[t]);return s}function q(e){return(e||"").toLowerCase().replace(/\//g,"_")}function _(e){var t,o,a,i;for("string"==typeof e&&(e=[e]),t=0;t<e.length;t++)i=q(o=(a=e[t].split("|"))[0]),n[i]=e[t],r[i]=o,h(i,a[2].split(" "))}function W(e,t){e=q(e);var a,i=n[e];return i instanceof d?i:"string"==typeof i?(i=new d(i),n[e]=i,i):o[e]&&t!==W&&(a=W(o[e],W))?((i=n[e]=new d)._set(a),i.name=r[e],i):null}function g(e){var t,n,a,i;for("string"==typeof e&&(e=[e]),t=0;t<e.length;t++)a=q((n=e[t].split("|"))[0]),i=q(n[1]),o[a]=i,r[a]=n[0],o[i]=a,r[i]=n[1]}function v(e){var t="X"===e._f||"x"===e._f;return!(!e._a||void 0!==e._tzm||t)}function y(e){"undefined"!=typeof console&&"function"==typeof console.error&&console.error(e)}function L(t){var n=Array.prototype.slice.call(arguments,0,-1),o=arguments[arguments.length-1],r=W(o),a=e.utc.apply(null,n);return r&&!e.isMoment(t)&&v(a)&&a.add(r.parse(a),"minutes"),a.tz(o),a}(p<2||2===p&&s<6)&&y("Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js "+e.version+". See momentjs.com"),d.prototype={_set:function(e){this.name=e.name,this.abbrs=e.abbrs,this.untils=e.untils,this.offsets=e.offsets,this.population=e.population},_index:function(e){var t,n=+e,o=this.untils;for(t=0;t<o.length;t++)if(n<o[t])return t},parse:function(e){var t,n,o,r,a=+e,i=this.offsets,p=this.untils,s=p.length-1;for(r=0;r<s;r++)if(t=i[r],n=i[r+1],o=i[r?r-1:r],t<n&&L.moveAmbiguousForward?t=n:t>o&&L.moveInvalidForward&&(t=o),a<p[r]-6e4*t)return i[r];return i[s]},abbr:function(e){return this.abbrs[this._index(e)]},offset:function(e){return y("zone.offset has been deprecated in favor of zone.utcOffset"),this.offsets[this._index(e)]},utcOffset:function(e){return this.offsets[this._index(e)]}},f.prototype.scoreOffsetAt=function(e){this.offsetScore+=Math.abs(this.zone.utcOffset(e.at)-e.offset),this.zone.abbr(e.at).replace(/[^A-Z]/g,"")!==e.abbr&&this.abbrScore++},L.version="0.5.23",L.dataVersion="",L._zones=n,L._links=o,L._names=r,L.add=_,L.link=g,L.load=function(e){_(e.zones),g(e.links),L.dataVersion=e.version},L.zone=W,L.zoneExists=function e(t){return e.didShowError||(e.didShowError=!0,y("moment.tz.zoneExists('"+t+"') has been deprecated in favor of !moment.tz.zone('"+t+"')")),!!W(t)},L.guess=function(e){return t&&!e||(t=function(){try{var e=Intl.DateTimeFormat().resolvedOptions().timeZone;if(e&&e.length>3){var t=r[q(e)];if(t)return t;y("Moment Timezone found "+e+" from the Intl api, but did not have that data loaded.")}}catch(e){}var n,o,a,i=function(){var e,t,n,o=(new Date).getFullYear()-2,r=new z(new Date(o,0,1)),a=[r];for(n=1;n<48;n++)(t=new z(new Date(o,n,1))).offset!==r.offset&&(e=O(r,t),a.push(e),a.push(new z(new Date(e.at+6e4)))),r=t;for(n=0;n<4;n++)a.push(new z(new Date(o+n,0,1))),a.push(new z(new Date(o+n,6,1)));return a}(),p=i.length,s=m(i),c=[];for(o=0;o<s.length;o++){for(n=new f(W(s[o]),p),a=0;a<p;a++)n.scoreOffsetAt(i[a]);c.push(n)}return c.sort(A),c.length>0?c[0].zone.name:void 0}()),t},L.names=function(){var e,t=[];for(e in r)r.hasOwnProperty(e)&&(n[e]||n[o[e]])&&r[e]&&t.push(r[e]);return t.sort()},L.Zone=d,L.unpack=u,L.unpackBase60=b,L.needsOffset=v,L.moveInvalidForward=!0,L.moveAmbiguousForward=!1;var R,E=e.fn;function w(e){return function(){return this._z?this._z.abbr(this):e.call(this)}}e.tz=L,e.defaultZone=null,e.updateOffset=function(t,n){var o,r=e.defaultZone;void 0===t._z&&(r&&v(t)&&!t._isUTC&&(t._d=e.utc(t._a)._d,t.utc().add(r.parse(t),"minutes")),t._z=r),t._z&&(o=t._z.utcOffset(t),Math.abs(o)<16&&(o/=60),void 0!==t.utcOffset?t.utcOffset(-o,n):t.zone(o,n))},E.tz=function(t,n){if(t){if("string"!=typeof t)throw new Error("Time zone name must be a string, got "+t+" ["+typeof t+"]");return this._z=W(t),this._z?e.updateOffset(this,n):y("Moment Timezone has no data for "+t+". See http://momentjs.com/timezone/docs/#/data-loading/."),this}if(this._z)return this._z.name},E.zoneName=w(E.zoneName),E.zoneAbbr=w(E.zoneAbbr),E.utc=(R=E.utc,function(){return this._z=null,R.apply(this,arguments)}),e.tz.setDefault=function(t){return(p<2||2===p&&s<9)&&y("Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js "+e.version+"."),e.defaultZone=t?W(t):null,e};var k=e.momentProperties;return"[object Array]"===Object.prototype.toString.call(k)?(k.push("_z"),k.push("_a")):k&&(k._z=null),e})},function(e,t,n){var o={"./af":240,"./af.js":240,"./ar":241,"./ar-dz":242,"./ar-dz.js":242,"./ar-kw":243,"./ar-kw.js":243,"./ar-ly":244,"./ar-ly.js":244,"./ar-ma":245,"./ar-ma.js":245,"./ar-sa":246,"./ar-sa.js":246,"./ar-tn":247,"./ar-tn.js":247,"./ar.js":241,"./az":248,"./az.js":248,"./be":249,"./be.js":249,"./bg":250,"./bg.js":250,"./bm":251,"./bm.js":251,"./bn":252,"./bn.js":252,"./bo":253,"./bo.js":253,"./br":254,"./br.js":254,"./bs":255,"./bs.js":255,"./ca":256,"./ca.js":256,"./cs":257,"./cs.js":257,"./cv":258,"./cv.js":258,"./cy":259,"./cy.js":259,"./da":260,"./da.js":260,"./de":261,"./de-at":262,"./de-at.js":262,"./de-ch":263,"./de-ch.js":263,"./de.js":261,"./dv":264,"./dv.js":264,"./el":265,"./el.js":265,"./en-SG":266,"./en-SG.js":266,"./en-au":267,"./en-au.js":267,"./en-ca":268,"./en-ca.js":268,"./en-gb":269,"./en-gb.js":269,"./en-ie":270,"./en-ie.js":270,"./en-il":271,"./en-il.js":271,"./en-nz":272,"./en-nz.js":272,"./eo":273,"./eo.js":273,"./es":274,"./es-do":275,"./es-do.js":275,"./es-us":276,"./es-us.js":276,"./es.js":274,"./et":277,"./et.js":277,"./eu":278,"./eu.js":278,"./fa":279,"./fa.js":279,"./fi":280,"./fi.js":280,"./fo":281,"./fo.js":281,"./fr":282,"./fr-ca":283,"./fr-ca.js":283,"./fr-ch":284,"./fr-ch.js":284,"./fr.js":282,"./fy":285,"./fy.js":285,"./ga":286,"./ga.js":286,"./gd":287,"./gd.js":287,"./gl":288,"./gl.js":288,"./gom-latn":289,"./gom-latn.js":289,"./gu":290,"./gu.js":290,"./he":291,"./he.js":291,"./hi":292,"./hi.js":292,"./hr":293,"./hr.js":293,"./hu":294,"./hu.js":294,"./hy-am":295,"./hy-am.js":295,"./id":296,"./id.js":296,"./is":297,"./is.js":297,"./it":298,"./it-ch":299,"./it-ch.js":299,"./it.js":298,"./ja":300,"./ja.js":300,"./jv":301,"./jv.js":301,"./ka":302,"./ka.js":302,"./kk":303,"./kk.js":303,"./km":304,"./km.js":304,"./kn":305,"./kn.js":305,"./ko":306,"./ko.js":306,"./ku":307,"./ku.js":307,"./ky":308,"./ky.js":308,"./lb":309,"./lb.js":309,"./lo":310,"./lo.js":310,"./lt":311,"./lt.js":311,"./lv":312,"./lv.js":312,"./me":313,"./me.js":313,"./mi":314,"./mi.js":314,"./mk":315,"./mk.js":315,"./ml":316,"./ml.js":316,"./mn":317,"./mn.js":317,"./mr":318,"./mr.js":318,"./ms":319,"./ms-my":320,"./ms-my.js":320,"./ms.js":319,"./mt":321,"./mt.js":321,"./my":322,"./my.js":322,"./nb":323,"./nb.js":323,"./ne":324,"./ne.js":324,"./nl":325,"./nl-be":326,"./nl-be.js":326,"./nl.js":325,"./nn":327,"./nn.js":327,"./pa-in":328,"./pa-in.js":328,"./pl":329,"./pl.js":329,"./pt":330,"./pt-br":331,"./pt-br.js":331,"./pt.js":330,"./ro":332,"./ro.js":332,"./ru":333,"./ru.js":333,"./sd":334,"./sd.js":334,"./se":335,"./se.js":335,"./si":336,"./si.js":336,"./sk":337,"./sk.js":337,"./sl":338,"./sl.js":338,"./sq":339,"./sq.js":339,"./sr":340,"./sr-cyrl":341,"./sr-cyrl.js":341,"./sr.js":340,"./ss":342,"./ss.js":342,"./sv":343,"./sv.js":343,"./sw":344,"./sw.js":344,"./ta":345,"./ta.js":345,"./te":346,"./te.js":346,"./tet":347,"./tet.js":347,"./tg":348,"./tg.js":348,"./th":349,"./th.js":349,"./tl-ph":350,"./tl-ph.js":350,"./tlh":351,"./tlh.js":351,"./tr":352,"./tr.js":352,"./tzl":353,"./tzl.js":353,"./tzm":354,"./tzm-latn":355,"./tzm-latn.js":355,"./tzm.js":354,"./ug-cn":356,"./ug-cn.js":356,"./uk":357,"./uk.js":357,"./ur":358,"./ur.js":358,"./uz":359,"./uz-latn":360,"./uz-latn.js":360,"./uz.js":359,"./vi":361,"./vi.js":361,"./x-pseudo":362,"./x-pseudo.js":362,"./yo":363,"./yo.js":363,"./zh-cn":364,"./zh-cn.js":364,"./zh-hk":365,"./zh-hk.js":365,"./zh-tw":366,"./zh-tw.js":366};function r(e){var t=a(e);return n(t)}function a(e){if(!n.o(o,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return o[e]}r.keys=function(){return Object.keys(o)},r.resolve=a,e.exports=r,r.id=566},function(e){e.exports={version:"2018g",zones:["Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5","Africa/Accra|LMT GMT +0020|.Q 0 -k|012121212121212121212121212121212121212121212121|-26BbX.8 6tzX.8 MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE|41e5","Africa/Nairobi|LMT EAT +0230 +0245|-2r.g -30 -2u -2J|01231|-1F3Cr.g 3Dzr.g okMu MFXJ|47e5","Africa/Algiers|LMT PMT WET WEST CET CEST|-c.c -9.l 0 -10 -10 -20|01232323232323232454542423234542324|-3bQob.c ME01.P cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5","Africa/Lagos|LMT WAT|-d.A -10|01|-22y0d.A|17e6","Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4","Africa/Maputo|LMT CAT|-2a.k -20|01|-2GJea.k|26e5","Africa/Cairo|LMT EET EEST|-25.9 -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBC5.9 1AQM5.9 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6","Africa/Casablanca|LMT +00 +01|u.k 0 -10|0121212121212121212121212121212121212121212121212121212|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00|32e5","Africa/Ceuta|LMT WET WEST CET CEST|l.g 0 -10 -10 -20|0121212121212121212121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2M0M0 GdX0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|85e3","Africa/El_Aaiun|LMT -01 +00 +01|Q.M 10 0 -10|01232323232323232323232323232323232323232323|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00|20e4","Africa/Johannesburg|LMT SAST SAST SAST|-1Q -1u -20 -30|0123232|-39EpQ qTcm 1Ajdu 1cL0 1cN0 1cL0|84e5","Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|01212121212121212121212121212121213|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0","Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5","Africa/Monrovia|LMT MMT MMT GMT|H.8 H.8 I.u 0|0123|-3ygng.Q 1usM0 28G01.m|11e5","Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5","Africa/Sao_Tome|LMT LMT GMT WAT|-q.U A.J 0 -10|0123|-3tooq.U 18aoq.U 4i6N0","Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5","Africa/Tunis|LMT PMT CET CEST|-E.I -9.l -10 -20|01232323232323232323232323232323232|-3zO0E.I 1cBAv.n 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5","Africa/Windhoek|LMT +0130 SAST SAST CAT WAT|-18.o -1u -20 -30 -20 -10|012324545454545454545454545454545454545454545454545454|-39Ep8.o qTbC.o 1Ajdu 1cL0 1SqL0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4","America/Adak|LMT LMT NST NWT NPT BST BDT AHST HST HDT|-cd.m bK.C b0 a0 a0 b0 a0 a0 a0 90|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVzf.p 1EX1d.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326","America/Anchorage|LMT LMT AST AWT APT AHST AHDT YST AKST AKDT|-e0.o 9X.A a0 90 90 a0 90 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVxs.n 1EX20.o 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4","America/Port_of_Spain|LMT AST|46.4 40|01|-2kNvR.U|43e3","America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4","America/Argentina/Buenos_Aires|LMT CMT -04 -03 -02|3R.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343434343|-331U6.c 125cn pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0","America/Argentina/Catamarca|LMT CMT -04 -03 -02|4n.8 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243432343|-331TA.Q 125bR.E pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0","America/Argentina/Cordoba|LMT CMT -04 -03 -02|4g.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243434343|-331TH.c 125c0 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0","America/Argentina/Jujuy|LMT CMT -04 -03 -02|4l.c 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232434343|-331TC.M 125bT.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0","America/Argentina/La_Rioja|LMT CMT -04 -03 -02|4r.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tw.A 125bN.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0","America/Argentina/Mendoza|LMT CMT -04 -03 -02|4z.g 4g.M 40 30 20|012323232323232323232323232323232323232323234343423232432343|-331To.I 125bF.w pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0","America/Argentina/Rio_Gallegos|LMT CMT -04 -03 -02|4A.Q 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tn.8 125bD.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0","America/Argentina/Salta|LMT CMT -04 -03 -02|4l.E 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342434343|-331TC.k 125bT.8 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0","America/Argentina/San_Juan|LMT CMT -04 -03 -02|4y.4 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tp.U 125bG.I pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0","America/Argentina/San_Luis|LMT CMT -04 -03 -02|4p.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232323432323|-331Ty.A 125bP.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0","America/Argentina/Tucuman|LMT CMT -04 -03 -02|4k.Q 4g.M 40 30 20|01232323232323232323232323232323232323232323434343424343234343|-331TD.8 125bT.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0","America/Argentina/Ushuaia|LMT CMT -04 -03 -02|4x.c 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tq.M 125bH.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0","America/Curacao|LMT -0430 AST|4z.L 4u 40|012|-2kV7o.d 28KLS.d|15e4","America/Asuncion|LMT AMT -04 -03|3O.E 3O.E 40 30|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-3eLw9.k 1FGo0 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0|28e5","America/Atikokan|LMT CST CDT CWT CPT EST|66.s 60 50 50 50 50|01212345|-32B5R.w UFdR.w 1in0 Rnb0 3je0 8x30 iw0|28e2","America/Bahia_Banderas|LMT MST CST PST MDT CDT|71 70 60 80 60 50|0121212131414141414141414141414141414152525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0|84e3","America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5","America/Barbados|LMT BMT AST ADT|3W.t 3W.t 40 30|01232323232|-1Q0I1.v jsM0 1ODC1.v IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4","America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5","America/Belize|LMT CST -0530 CDT|5Q.M 60 5u 50|01212121212121212121212121212121212121212121212121213131|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1f0Mu qn0 lxB0 mn0|57e3","America/Blanc-Sablon|LMT AST ADT AWT APT|3M.s 40 30 30 30|0121341|-3tokb.w 1nsqb.w 1in0 UGp0 8x50 iu0|11e2","America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2","America/Bogota|LMT BMT -05 -04|4U.g 4U.g 50 40|01232|-3sTv3.I 1eIo0 38yo3.I 2en0|90e5","America/Boise|LMT PST PDT MST MWT MPT MDT|7I.N 80 70 70 60 60 60|01212134536363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-3tFE0 1nEe0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4","America/Cambridge_Bay|-00 MST MWT MPT MDDT MDT CST CDT EST|0 70 60 60 50 60 60 50 50|0123141515151515151515151515151515151515151515678651515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151|-21Jc0 RO90 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2","America/Campo_Grande|LMT -04 -03|3C.s 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0|77e4","America/Cancun|LMT CST EST EDT CDT|5L.4 60 50 40 50|0123232341414141414141414141414141414141412|-1UQG0 2q2o0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4","America/Caracas|LMT CMT -0430 -04|4r.I 4r.E 4u 40|012323|-3eLvw.g ROnX.U 28KM2.k 1IwOu kqo0|29e5","America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3","America/Panama|LMT CMT EST|5i.8 5j.A 50|012|-3eLuF.Q Iy01.s|15e5","America/Chicago|LMT CST CDT EST CWT CPT|5O.A 60 50 50 50 50|012121212121212121212121212121212121213121212121214512121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5","America/Chihuahua|LMT MST CST CDT MDT|74.k 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0|81e4","America/Costa_Rica|LMT SJMT CST CDT|5A.d 5A.d 60 50|01232323232|-3eLun.L 1fyo0 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5","America/Creston|LMT MST PST|7K.4 70 80|0121|-3togd.U 1jInd.U 43B0|53e2","America/Cuiaba|LMT -04 -03|3I.k 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0|54e4","America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8","America/Dawson_Creek|LMT PST PDT PWT PPT MST|80.U 80 70 70 70 70|01213412121212121212121212121212121212121212121212121212125|-3tofX.4 1nspX.4 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3","America/Dawson|LMT YST YDT YWT YPT YDDT PST PDT|9h.E 90 80 80 80 70 80 70|01212134151676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-2MSeG.k GWpG.k 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|13e2","America/Denver|LMT MST MDT MWT MPT|6X.U 70 60 60 60|012121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFF0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5","America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|012342525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 XQp0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5","America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|01212121212121341212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 LFB0 1cL0 3Cp0 1cL0 66N0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5","America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3","America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5","America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQE0 4PX0 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOO0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5","America/Fort_Nelson|LMT PST PDT PWT PPT MST|8a.L 80 70 70 70 70|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121215|-3tofN.d 1nspN.d 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2","America/Fort_Wayne|LMT CST CDT CWT CPT EST EDT|5I.C 60 50 50 50 50 40|0121212134121212121212121212151565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5","America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3","America/Godthab|LMT -03 -02|3q.U 30 20|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e3","America/Goose_Bay|LMT NST NDT NST NDT NWT NPT AST ADT ADDT|41.E 3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|0121343434343434356343434343434343434343434343434343434343437878787878787878787878787878787878787878787879787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-3tojW.k 1nspt.c 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2","America/Grand_Turk|LMT KMT EST EDT AST|4I.w 57.a 50 40 40|012323232323232323232323232323232323232323232323232323232323232323232323232343232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLvf.s RK0m.C 2HHBQ.O 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 5Ip0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2","America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5","America/Guayaquil|LMT QMT -05 -04|5j.k 5e 50 40|01232|-3eLuE.E 1DNzS.E 2uILK rz0|27e5","America/Guyana|LMT -0345 -03 -04|3Q.E 3J 30 40|0123|-2dvU7.k 2r6LQ.k Bxbf|80e4","America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4","America/Havana|LMT HMT CST CDT|5t.s 5t.A 50 40|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLuu.w 1qx00.8 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5","America/Hermosillo|LMT MST CST PST MDT|7n.Q 70 60 80 60|0121212131414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0|64e4","America/Indiana/Knox|LMT CST CDT CWT CPT EST|5K.u 60 50 50 50 50|01212134121212121212121212121212121212151212121212121212121212121212121212121212121212121252121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Marengo|LMT CST CDT CWT CPT EST EDT|5J.n 60 50 50 50 50 40|01212134121212121212121215656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Petersburg|LMT CST CDT CWT CPT EST EDT|5N.7 60 50 50 50 50 40|012121341212121212121212121215121212121212121212121252125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Tell_City|LMT CST CDT CWT CPT EST EDT|5L.3 60 50 50 50 50 40|012121341212121212121212121212121565652121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Vevay|LMT CST CDT CWT CPT EST EDT|5E.g 60 50 50 50 50 40|0121213415656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Vincennes|LMT CST CDT CWT CPT EST EDT|5O.7 60 50 50 50 50 40|012121341212121212121212121212121565652125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Winamac|LMT CST CDT CWT CPT EST EDT|5K.p 60 50 50 50 50 40|012121341212121212121212121212121212121565652165656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Inuvik|-00 PST PDDT MST MDT|0 80 60 70 60|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-FnA0 tWU0 1fA0 wPe0 2pz0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2","America/Iqaluit|-00 EWT EPT EST EDDT EDT CST CDT|0 40 40 50 30 40 60 50|01234353535353535353535353535353535353535353567353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353|-16K00 7nX0 iv0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2","America/Jamaica|LMT KMT EST EDT|57.a 57.a 50 40|01232323232323232323232|-3eLuQ.O RK00 2uM1Q.O 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4","America/Juneau|LMT LMT PST PWT PPT PDT YDT YST AKST AKDT|-f2.j 8V.F 80 70 70 70 80 90 90 80|0123425252525252525252525252625252578989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVwq.s 1EX12.j 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3","America/Kentucky/Louisville|LMT CST CDT CWT CPT EST EDT|5H.2 60 50 50 50 50 40|01212121213412121212121212121212121212565656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 Bb0 10N0 2bB0 8in0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Kentucky/Monticello|LMT CST CDT CWT CPT EST EDT|5D.o 60 50 50 50 50 40|01212134121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/La_Paz|LMT CMT BST -04|4w.A 4w.A 3w.A 40|0123|-3eLvr.o 1FIo0 13b0|19e5","America/Lima|LMT LMT -05 -04|58.c 58.A 50 40|01232323232323232|-3eLuP.M JcM0.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6","America/Los_Angeles|LMT PST PDT PWT PPT|7Q.W 80 70 70 70|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFE0 1nEe0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6","America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4","America/Managua|LMT MMT CST EST CDT|5J.8 5J.c 60 50 50|01232424232324242|-3eLue.Q 1Mhc0.4 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5","America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5","America/Martinique|LMT FFMT AST ADT|44.k 44.k 40 30|01232|-3eLvT.E PTA0 2LPbT.E 19X0|39e4","America/Matamoros|LMT CST CDT|6E 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4","America/Mazatlan|LMT MST CST PST MDT|75.E 70 60 80 60|0121212131414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0|44e4","America/Menominee|LMT CST CDT CWT CPT EST|5O.r 60 50 50 50 50|012121341212152121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3pdG9.x 1jce9.x 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2","America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQG0 2q2o0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0|11e5","America/Metlakatla|LMT LMT PST PWT PPT PDT AKST AKDT|-fd.G 8K.i 80 70 70 70 90 80|012342525252525252525252525252525252676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwf.5 1EX1d.G 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2","America/Mexico_City|LMT MST CST CDT CWT|6A.A 70 60 50 50|012121232324232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0|20e6","America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mKkf.k 2LTAf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2","America/Moncton|LMT EST AST ADT AWT APT|4j.8 50 40 30 30 30|0123232323232323232323245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3txvE.Q J4ME.Q CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3","America/Monterrey|LMT CST CDT|6F.g 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0|41e5","America/Montevideo|LMT MMT -04 -03 -0330 -0230 -02 -0130|3I.P 3I.P 40 30 3u 2u 20 1u|012343434343434343434343435353636353636375363636363636363636363636363636363636363636363|-2tRUf.9 sVc0 8jcf.9 1db0 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1fAu 1cLu 1o0u 11zu NAu 3jXu zXu Dq0u 19Xu pcu jz0 cm10 19X0 6tB0 1fbu 3o0u jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5","America/Toronto|LMT EST EDT EWT EPT|5h.w 50 40 40 40|012121212121212121212121212121212121212121212123412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-32B6G.s UFdG.s 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1nX0 11z0 1o10 11z0 1o10 1qL0 11D0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5","America/Nassau|LMT EST EDT|59.u 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2kNuO.u 26XdO.u 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|24e4","America/New_York|LMT EST EDT EWT EPT|4U.2 50 40 40 40|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFH0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6","America/Nipigon|LMT EST EDT EWT EPT|5R.4 50 40 40 40|0121234121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-32B66.U UFd6.U 1in0 Rnb0 3je0 8x40 iv0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|16e2","America/Nome|LMT LMT NST NWT NPT BST BDT YST AKST AKDT|-cW.m b1.C b0 a0 a0 b0 a0 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVyu.p 1EX1W.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2","America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2","America/North_Dakota/Beulah|LMT MST MDT MWT MPT CST CDT|6L.7 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/North_Dakota/Center|LMT MST MDT MWT MPT CST CDT|6J.c 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/North_Dakota/New_Salem|LMT MST MDT MWT MPT CST CDT|6J.D 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Ojinaga|LMT MST CST CDT MDT|6V.E 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3","America/Pangnirtung|-00 AST AWT APT ADDT ADT EDT EST CST CDT|0 40 30 30 20 30 40 50 60 50|012314151515151515151515151515151515167676767689767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767|-1XiM0 PnG0 8x50 iu0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1o00 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2","America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4","America/Phoenix|LMT MST MDT MWT|7s.i 70 60 60|012121313121|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5","America/Port-au-Prince|LMT PPMT EST EDT|4N.k 4N 50 40|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLva.E 15RLX.E 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4","America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4","America/Puerto_Rico|LMT AST AWT APT|4o.p 40 30 30|01231|-2Qi7z.z 1IUbz.z 7XT0 iu0|24e5","America/Punta_Arenas|LMT SMT -05 -04 -03|4H.E 4G.K 50 40 30|01213132323232323232343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvg.k MJbX.6 fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0","America/Rainy_River|LMT CST CDT CWT CPT|6i.g 60 50 50 50|0121234121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-32B5F.I UFdF.I 1in0 Rnb0 3je0 8x30 iw0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|842","America/Rankin_Inlet|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-vDc0 keu0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2","America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5","America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4","America/Resolute|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313431313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-SnA0 GWS0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229","America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4","America/Santiago|LMT SMT -05 -04 -03|4G.K 4G.K 50 40 30|0121313232323232323432343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvh.e MJc0 fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 jb0 1oN0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|62e5","America/Santo_Domingo|LMT SDMT EST EDT -0430 AST|4D.A 4E 50 40 4u 40|012324242424242525|-3eLvk.o 1Jic0.o 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5","America/Sao_Paulo|LMT -03 -02|36.s 30 20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0|20e6","America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|0121323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|452","America/Sitka|LMT LMT PST PWT PPT PDT YST AKST AKDT|-eW.L 91.d 80 70 70 70 90 90 80|0123425252525252525252525252525252567878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-48Pzs.L 1jVwu 1EX0W.L 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2","America/St_Johns|LMT NST NDT NST NDT NWT NPT NDDT|3u.Q 3u.Q 2u.Q 3u 2u 2u 2u 1u|012121212121212121212121212121212121213434343434343435634343434343434343434343434343434343434343434343434343434343434343434343434343434343437343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tokt.8 1l020 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4","America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3","America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5","America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656","America/Thunder_Bay|LMT CST EST EWT EPT EDT|5V 60 50 40 40 40|01234252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-32B63 Avc3 1iaN0 8x40 iv0 XNB0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4","America/Vancouver|LMT PST PDT PWT PPT|8c.s 80 70 70 70|01213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tofL.w 1nspL.w 1in0 UGp0 8x10 iy0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Whitehorse|LMT YST YDT YWT YPT YDDT PST PDT|90.c 90 80 80 80 70 80 70|01212134151676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-2MSeX.M GWpX.M 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 3NA0 vrd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3","America/Winnipeg|LMT CST CDT CWT CPT|6s.A 60 50 50 50|0121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3kLtv.o 1a3bv.o WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4","America/Yakutat|LMT LMT YST YWT YPT YDT AKST AKDT|-eF.5 9i.T 90 80 80 80 90 80|0123425252525252525252525252525252526767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwL.G 1EX1F.5 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642","America/Yellowknife|-00 MST MWT MPT MDDT MDT|0 70 60 60 50 60|012314151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151|-1pdA0 hix0 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3","Antarctica/Casey|-00 +08 +11|0 -80 -b0|01212121|-2q00 1DjS0 T90 40P0 KL0 blz0 3m10|10","Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70","Antarctica/DumontDUrville|-00 +10|0 -a0|0101|-U0o0 cfq0 bFm0|80","Antarctica/Macquarie|-00 AEST AEDT +11|0 -a0 -b0 -b0|01210121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-2OPc0 Fb40 19X0 4SL0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0|1","Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60","Pacific/Auckland|LMT NZMT NZST NZST NZDT|-bD.4 -bu -cu -c0 -d0|012131313131313131313131313134343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-46jLD.4 2nEO9.4 Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5","Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|0121212121213121212121212121212121212121212121212121212121212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40","Antarctica/Rothera|-00 -03|0 30|01|gOo0|130","Antarctica/Syowa|-00 +03|0 -30|01|-vs00|20","Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|40","Antarctica/Vostok|-00 +06|0 -60|01|-tjA0|25","Europe/Oslo|LMT CET CEST|-H -10 -20|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-32BcH Q4oH Qm0 W6o0 5pf0 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 wJc0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1qM0 WM0 zpc0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|62e4","Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5","Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|012323232323232323232321232323232323232323232323232|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|15e5","Asia/Amman|LMT EET EEST|-2n.I -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e5","Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3","Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4","Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4","Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4","Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0","Asia/Baghdad|LMT BMT +03 +04|-2V.E -2V.A -30 -40|0123232323232323232323232323232323232323232323232323232|-3eLCV.E 18ao0.4 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5","Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4","Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Asia/Bangkok|LMT BMT +07|-6G.4 -6G.4 -70|012|-3D8SG.4 1C000|15e6","Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0","Asia/Beirut|LMT EET EEST|-2m -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3D8Om 1BWom 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|22e5","Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4","Asia/Brunei|LMT +0730 +08|-7D.E -7u -80|012|-1KITD.E gDc9.E|42e4","Asia/Kolkata|LMT HMT MMT IST +0630|-5R.s -5R.k -5l.a -5u -6u|01234343|-4Fg5R.s BKo0.8 1rDcw.a 1r2LP.a 1un0 HB0 7zX0|15e6","Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4","Asia/Choibalsan|LMT +07 +08 +10 +09|-7C -70 -80 -a0 -90|0123434343434343434343434343434343434343434343424242|-2APHC 2UkoC cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0 h1f0 1cJ0 1cP0 1cJ0|38e3","Asia/Shanghai|LMT CST CDT|-85.H -80 -90|0121212121212121212121212121|-2M0U5.H 1zWo5.H Rz0 11d0 1wL0 A10 8HX0 1G10 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 aL0 1tU30 Rb0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6","Asia/Colombo|LMT MMT +0530 +06 +0630|-5j.o -5j.w -5u -60 -6u|012342432|-3D8Rj.o 13inX.Q 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5","Asia/Dhaka|LMT HMT +0630 +0530 +06 +07|-61.E -5R.k -6u -5u -60 -70|01232454|-3eLG1.E 26008.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6","Asia/Damascus|LMT EET EEST|-2p.c -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|26e5","Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le8m.k 1dnXm.k 1nfA0 Xld0|19e4","Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5","Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4","Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00","Asia/Gaza|LMT EET EEST IST IDT|-2h.Q -20 -30 -20 -30|0121212121212121212121212121212123434343434343434343434343431212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCh.Q 1Azch.Q 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0|18e5","Asia/Hebron|LMT EET EEST IST IDT|-2k.n -20 -30 -20 -30|012121212121212121212121212121212343434343434343434343434343121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCk.n 1Azck.n 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0|25e4","Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.E -76.u -70 -80 -90|0123423232|-2yC76.E bK00.a 1h7b6.u 5lz0 18o0 3Oq0 k5b0 aW00 BAM0|90e5","Asia/Hong_Kong|LMT HKT HKST JST|-7A.G -80 -90 -90|0121312121212121212121212121212121212121212121212121212121212121212121|-2CFHA.G 1sEP6.G 1cL0 ylu 93X0 1qQu 1tX0 Rd0 1In0 NB0 1cL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1kL0 14N0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5","Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|LMT IMT +07 +08 +09|-6V.5 -6V.5 -70 -80 -90|012343434343434343434343234343434343434343434343434343434343434343|-3D8SV.5 1Bxc0 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Europe/Istanbul|LMT IMT EET EEST +04 +03|-1T.Q -1U.U -20 -30 -40 -30|0123232323232323232323232323232323232323232323232323232345454545453232323232323232323232323232323232323232323232323232323232323235|-3D8NT.Q 1ePXW.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSp0 CL0 mN0 1Vz0 1gN0 1pz0 5Rd0 1fz0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1jB0 18L0 1ip0 17z0 qdd0 xX0 3S10 Tz0 dA10 11z0 1o10 11z0 1qN0 11z0 1ze0 11B0 WM0 1qO0 WI0 1nX0 1rB0 10L0 11B0 1in0 17d0 1in0 2pX0 19E0 1fU0 16Q0 1iI0 16Q0 1iI0 1Vd0 pb0 3Kp0 14o0 1de0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|LMT BMT +0720 +0730 +09 +08 WIB|-77.c -77.c -7k -7u -90 -80 -70|012343536|-49jH7.c 2hiLL.c luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6","Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4","Asia/Jerusalem|LMT JMT IST IDT IDDT|-2k.S -2k.E -20 -30 -40|012323232323243232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8Ok.S 1wvA0.e SyMk.E 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 3LB0 Em0 or0 1cn0 1dB0 16n0 10O0 1ja0 1tC0 14o0 1cM0 1a00 11A0 1Na0 An0 1MP0 AJ0 1Kp0 LC0 1oo0 Wl0 EQN0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0|81e4","Asia/Kabul|LMT +04 +0430|-4A.M -40 -4u|012|-3eLEA.M 2dTcA.M|46e5","Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4","Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6","Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5","Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5","Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2","Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5","Asia/Kuala_Lumpur|LMT SMT +07 +0720 +0730 +09 +08|-6K.K -6T.p -70 -7k -7u -90 -80|01234546|-2M0SK.K aILP.l 17anT.p l5XE 17bO 8Fyu 1so1u|71e5","Asia/Kuching|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|13e4","Asia/Macau|LMT CST +09 +10 CDT|-7y.a -80 -90 -a0 -90|012323214141414141414141414141414141414141414141414141414141414141414141|-2CFHy.a 1uqKy.a PX0 1kn0 15B0 11b0 4Qq0 1oM0 11c0 1ko0 1u00 11A0 1cM0 11c0 1o00 11A0 1o00 11A0 1oo0 1400 1o00 11A0 1o00 U00 1tA0 U00 1wo0 Rc0 1wru U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cK0 1cO0 1cK0 1cO0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|57e4","Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3","Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5","Asia/Manila|LMT LMT PST PDT JST|fU -84 -80 -90 -90|01232423232|-54m84 2clc0 1vfc4 AL0 cK10 65X0 mXB0 vX0 VK10 1db0|24e6","Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|32e4","Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4","Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5","Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5","Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4","Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4","Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|012313|-2um8n 97XR 1lTzu 2Onc0 6BA0|29e5","Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|0123232323232323232323232323232323232323232323|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|73e4","Asia/Rangoon|LMT RMT +0630 +09|-6o.L -6o.L -6u -90|01232|-3D8So.L 1BnA0 SmnS.L 7j9u|48e5","Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4","Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4","Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -9u -a0|0123141414141414135353|-2um8r.Q 97XV.Q 1m1zu kKo0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6","Asia/Singapore|LMT SMT +07 +0720 +0730 +09 +08|-6T.p -6T.p -70 -7k -7u -90 -80|01234546|-2M0ST.p aIM0 17anT.p l5XE 17bO 8Fyu 1so1u|56e5","Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2","Asia/Taipei|LMT CST JST CDT|-86 -80 -90 -90|012131313131313131313131313131313131313131|-30bk6 1FDc6 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5","Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5","Asia/Tbilisi|LMT TBMT +03 +04 +05|-2X.b -2X.b -30 -40 -50|01234343434343434343434323232343434343434343434323|-3D8OX.b 1LUM0 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5","Asia/Tehran|LMT TMT +0330 +04 +05 +0430|-3p.I -3p.I -3u -40 -50 -4u|01234325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2btDp.I 1d3c0 1huLT.I TXu 1pz0 sN0 vAu 1cL0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0|14e6","Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3","Asia/Tokyo|LMT JST JDT|-9i.X -90 -a0|0121212121|-3jE90 2qSo0 Rc0 1lc0 14o0 1zc0 Oo0 1zc0 Oo0|38e6","Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5","Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5","Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2","Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4","Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5","Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5","Atlantic/Azores|LMT HMT -02 -01 +00 WET|1G.E 1S.w 20 10 0 0|012323232323232323232323232323232323232323232343234323432343232323232323232323232323232323232323232343434343434343434343434343434345434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tomh.k 18aoh.k aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|25e4","Atlantic/Bermuda|LMT AST ADT|4j.i 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1BnRE.G 1LTbE.G 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3","Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4","Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2ldW0 1eEo0 7zX0 1djf0|50e4","Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|49e3","Atlantic/Madeira|LMT FMT -01 +00 +01 WET WEST|17.A 17.A 10 0 -10 0 -10|012323232323232323232323232323232323232323232343234323432343232323232323232323232323232323232323232565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tomQ.o 18anQ.o aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e4","Atlantic/Reykjavik|LMT -01 +00 GMT|1s 10 0 0|012121212121212121212121212121212121212121212121212121212121212121213|-2uWmw mfaw 1Bd0 ML0 1LB0 Cn0 1LB0 3fX0 C10 HrX0 1cO0 LB0 1EL0 LA0 1C00 Oo0 1wo0 Rc0 1wo0 Rc0 1wo0 Rc0 1zc0 Oo0 1zc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0|12e4","Atlantic/South_Georgia|LMT -02|2q.8 20|01|-3eLxx.Q|30","Atlantic/Stanley|LMT SMT -04 -03 -02|3P.o 3P.o 40 30 20|0123232323232323434323232323232323232323232323232323232323232323232323|-3eLw8.A S200 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2","Australia/Sydney|LMT AEST AEDT|-a4.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oW4.Q RlA5.Q xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5","Australia/Adelaide|LMT ACST ACST ACDT|-9e.k -90 -9u -au|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-32oVe.k ak0e.k H1zv xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5","Australia/Brisbane|LMT AEST AEDT|-ac.8 -a0 -b0|012121212121212121|-32Bmc.8 Ry0d.8 xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5","Australia/Broken_Hill|LMT AEST ACST ACST ACDT|-9p.M -a0 -90 -9u -au|0123434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-32oVp.M 3Lzp.M 6wp0 H1zv xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|18e3","Australia/Currie|LMT AEST AEDT|-9z.s -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-3109z.s Pk1z.s 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|746","Australia/Darwin|LMT ACST ACST ACDT|-8H.k -90 -9u -au|01232323232|-32oUH.k ajXH.k H1zv xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0|12e4","Australia/Eucla|LMT +0845 +0945|-8z.s -8J -9J|01212121212121212121|-30nIz.s PknP.s xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368","Australia/Hobart|LMT AEST AEDT|-9N.g -a0 -b0|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-3109N.g Pk1N.g 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 VfB0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|21e4","Australia/Lord_Howe|LMT AEST +1030 +1130 +11|-aA.k -a0 -au -bu -b0|01232323232424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424|-32oWA.k 3tzAA.k 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347","Australia/Lindeman|LMT AEST AEDT|-9T.U -a0 -b0|0121212121212121212121|-32BlT.U RxXU.U xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10","Australia/Melbourne|LMT AEST AEDT|-9D.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oVD.Q RlzE.Q xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|39e5","Australia/Perth|LMT AWST AWDT|-7H.o -80 -90|01212121212121212121|-30nHH.o PknI.o xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5","CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00","Pacific/Easter|LMT EMT -07 -06 -05|7h.s 7h.s 70 60 50|0123232323232323232323232323234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLsG.w 1HRc0 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|30e2","CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00","Europe/Dublin|LMT DMT IST GMT BST IST|p p.l -y.D 0 -10 -10|012343434343435353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353|-3BHbz 1ra20.l Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g600 14o0 1wo0 17c0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","EST|EST|50|0|","EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","Etc/GMT-0|GMT|0|0|","Etc/GMT-1|+01|-10|0|","Etc/GMT-10|+10|-a0|0|","Etc/GMT-11|+11|-b0|0|","Etc/GMT-12|+12|-c0|0|","Etc/GMT-13|+13|-d0|0|","Etc/GMT-14|+14|-e0|0|","Etc/GMT-2|+02|-20|0|","Etc/GMT-3|+03|-30|0|","Etc/GMT-4|+04|-40|0|","Etc/GMT-5|+05|-50|0|","Etc/GMT-6|+06|-60|0|","Etc/GMT-7|+07|-70|0|","Etc/GMT-8|+08|-80|0|","Etc/GMT-9|+09|-90|0|","Etc/GMT+1|-01|10|0|","Etc/GMT+10|-10|a0|0|","Etc/GMT+11|-11|b0|0|","Etc/GMT+12|-12|c0|0|","Etc/GMT+2|-02|20|0|","Etc/GMT+3|-03|30|0|","Etc/GMT+4|-04|40|0|","Etc/GMT+5|-05|50|0|","Etc/GMT+6|-06|60|0|","Etc/GMT+7|-07|70|0|","Etc/GMT+8|-08|80|0|","Etc/GMT+9|-09|90|0|","Etc/UCT|UCT|0|0|","Etc/UTC|UTC|0|0|","Europe/Amsterdam|LMT AMT NST +0120 +0020 CEST CET|-j.w -j.w -1j.w -1k -k -20 -10|0121212121212121212121212121212121212121212123434345656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656|-5sHcj.w 3i200 11b0 1iP0 11A0 1io0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1co0 1io0 1yo0 Pc0 1a00 1fA0 1Bc0 Mo0 1tc0 Uo0 1tA0 U00 1uo0 W00 1s00 VA0 1so0 Vc0 1sM0 UM0 1wo0 Rc0 1u00 Wo0 1rA0 W00 1s00 VA0 1sM0 UM0 1w00 fV0 BCX.w 1tA0 U00 1u00 Wo0 1sm0 601k WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|16e5","Europe/Andorra|LMT WET CET CEST|-6.4 0 -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2M0M6.4 1Pnc6.4 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|79e3","Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|10e5","Europe/Athens|LMT AMT EET EEST CEST CET|-1y.Q -1y.Q -20 -30 -20 -10|0123234545232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-30SNy.Q OMM1 CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|35e5","Europe/London|LMT GMT BST BDST|1.f 0 -10 -20|01212121212121212121212121212121212121212121212121232323232321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-4VgnW.J 2KHdW.J Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|10e6","Europe/Belgrade|LMT CET CEST|-1m -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3topm 2juLm 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Berlin|LMT CET CEST CEMT|-R.s -10 -20 -30|012121212121212321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36RcR.s UbWR.s 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e5","Europe/Prague|LMT PMT CET CEST GMT|-V.I -V.I -10 -20 0|0123232323232323232423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4QbAV.I 1FDc0 XPaV.I 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 1qM0 11c0 mp0 xA0 mn0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|13e5","Europe/Brussels|LMT BMT WET CET CEST WEST|-h.u -h.u 0 -10 -20 -10|012343434325252525252525252525252525252525252525252525434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8Mh.u u1M0 SNMh.u 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|21e5","Europe/Bucharest|LMT BMT EET EEST|-1I.o -1I.o -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3awpI.o 1AU00 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|19e5","Europe/Budapest|LMT CET CEST|-1g.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3cWpg.k 12hbg.k 11d0 1iO0 11A0 1ip0 17b0 1op0 1tb0 Q2m0 3Ne0 WM0 1fA0 1cM0 1cM0 1oJ0 1dc0 1030 1fA0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1iM0 1fA0 8Ha0 Rb0 1wN0 Rb0 1BB0 Lz0 1C20 LB0 SNX0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5","Europe/Zurich|LMT BMT CET CEST|-y.8 -t.K -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4HyMy.8 1Dw04.m 1SfAt.K 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|38e4","Europe/Chisinau|LMT CMT BMT EET EEST CEST CET MSK MSD|-1T.k -1T -1I.o -20 -30 -20 -10 -30 -40|0123434343434343434345656578787878787878787878434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8NT.k 1wNA0.k wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|67e4","Europe/Copenhagen|LMT CMT CET CEST|-O.k -O.k -10 -20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLAO.k 9Io0 SryO.k Tz0 VuO0 60q0 WM0 1fA0 1cM0 1cM0 1cM0 S00 1HA0 Nc0 1C00 Dc0 1Nc0 Ao0 1h5A0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Gibraltar|LMT GMT BST BDST CET CEST|l.o 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123232323232121232121212121212121212145454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-3BHbC.A 1ra1C.A Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|30e3","Europe/Helsinki|LMT HMT EET EEST|-1D.N -1D.N -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3H0ND.N 1Iu00 OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Kaliningrad|LMT CET CEST CET CEST MSK MSD EEST EET +03|-1m -10 -20 -20 -30 -30 -40 -30 -20 -30|01212121212121343565656565656565657878787878787878787878787878787878787878787898|-36Rdm UbXm 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 Am0 Lb0 1en0 op0 1pNz0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4","Europe/Kiev|LMT KMT EET MSK CEST CET MSD EEST|-22.4 -22.4 -20 -30 -20 -10 -40 -30|01234545363636363636363636367272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-3D8O2.4 1LUM0 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|34e5","Europe/Kirov|LMT +03 +04 +05|-3i.M -30 -40 -50|01232323232323232321212121212121212121212121212121212121212121|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4","Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121214121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2le00 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 pvy0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Europe/Luxembourg|LMT CET CEST WET WEST WEST WET|-o.A -10 -20 0 -10 -20 -10|0121212134343434343434343434343434343434343434343434565651212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2DG0o.A t6mo.A TB0 1nX0 Up0 1o20 11A0 rW0 CM0 1qP0 R90 1EO0 UK0 1u20 10m0 1ip0 1in0 17e0 19W0 1fB0 1db0 1cp0 1in0 17d0 1fz0 1a10 1in0 1a10 1in0 17f0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 vA0 60L0 WM0 1fA0 1cM0 17c0 1io0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4","Europe/Madrid|LMT WET WEST WEMT CET CEST|e.I 0 -10 -20 -10 -20|0121212121212121212321454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2M0M0 G5z0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|62e5","Europe/Malta|LMT CET CEST|-W.4 -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-35rcW.4 SXzW.4 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4","Europe/Minsk|LMT MMT EET MSK CEST CET MSD EEST +03|-1O.g -1O -20 -30 -20 -10 -40 -30 -30|012345454363636363636363636372727272727272727272727272727272727272728|-3D8NO.g 1LUM0.g eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5","Europe/Monaco|LMT PMT WET WEST WEMT CET CEST|-t.w -9.l 0 -10 -20 -10 -20|012323232323232323232323232323232323232323232323232343434343456565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3bQot.w ME0k.b cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 2RV0 11z0 11B0 1ze0 WM0 1fA0 1cM0 1fa0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|38e3","Europe/Moscow|LMT MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|01232434565756865656565656565656565698656565656565656565656565656565656565656a6|-3D8Ou.h 1sQM0 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6","Europe/Paris|LMT PMT WET WEST CEST CET WEMT|-9.l -9.l 0 -10 -20 -10 -20|01232323232323232323232323232323232323232323232323234545463654545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-3bQo8.l ME00 cNb8.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|11e6","Europe/Riga|LMT RMT LST EET MSK CEST CET MSD EEST|-1A.y -1A.y -2A.y -20 -30 -20 -10 -40 -30|0121213456565647474747474747474838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383|-3D8NA.y 1xde0 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|64e4","Europe/Rome|LMT RMT CET CEST|-N.U -N.U -10 -20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4bsoN.U 160LN.U T000 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|39e5","Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5","Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810","Europe/Simferopol|LMT SMT EET MSK CEST CET MSD EEST MSK|-2g.o -2g -20 -30 -20 -10 -40 -30 -40|0123454543636363636363636363272727636363727272727272727272727272727272727283|-3D8Og.o 1LUM0.o eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eL0 1cL0 1cN0 1cL0 1cN0 dX0 WL0 1cN0 1cL0 1fB0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4","Europe/Sofia|LMT IMT EET CET CEST EEST|-1x.g -1U.U -20 -10 -20 -30|0123434325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-3D8Nx.g AiLA.k 1UFeU.U WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Stockholm|LMT SET CET CEST|-1c.c -10.e -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3FyNc.c P80b.W DPb0.e TB0 2yDe0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|15e5","Europe/Tallinn|LMT TMT CET CEST EET MSK MSD EEST|-1D -1D -10 -20 -20 -30 -40 -30|0123214532323565656565656565657474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474|-3D8ND 1wI00 teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e4","Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4","Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|13e5","Europe/Uzhgorod|LMT CET CEST MSK MSD EET EEST|-1t.c -10 -20 -30 -40 -20 -30|0121212134343434343434343431565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3cWpt.c 20vCt.c 6i00 WM0 1fA0 1cM0 1ml0 1Cp0 1r3W0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 1Nf0 2pw0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|11e4","Europe/Vienna|LMT CET CEST|-15.l -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36Rd5.l UbX5.l 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1a00 1cM0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|18e5","Europe/Vilnius|LMT WMT KMT CET EET MSK CEST MSD EEST|-1F.g -1o -1z.A -10 -20 -30 -20 -40 -30|0123435636365757575757575757584848484848484848463648484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484|-3D8NF.g 1u5Ah.g 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4","Europe/Volgograd|LMT +03 +04 +05|-2V.E -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 9Jd0|10e5","Europe/Warsaw|LMT WMT CET CEST EET EEST|-1o -1o -10 -20 -20 -30|0123232345423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8No 1qDA0 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5","Europe/Zaporozhye|LMT +0220 EET MSK CEST CET MSD EEST|-2k.E -2k -20 -30 -20 -10 -40 -30|012345453636363636363636363637272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-3D8Ok.E 1LUM0.E eUok rdb0 2RE0 WM0 1fA0 8m0 1v9a0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|77e4","HST|HST|a0|0|","Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2","Indian/Christmas|LMT +07|-72.Q -70|01|-32oT2.Q|21e2","Indian/Cocos|LMT +0630|-6r.E -6u|01|-2OqSr.E|596","Indian/Kerguelen|-00 +05|0 -50|01|-MG00|130","Indian/Mahe|LMT +04|-3F.M -40|01|-2yO3F.M|79e3","Indian/Maldives|LMT MMT +05|-4S -4S -50|012|-3D8QS 3eLA0|35e4","Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4","Indian/Reunion|LMT +04|-3F.Q -40|01|-2mDDF.Q|84e4","Pacific/Kwajalein|LMT +11 -12 +12|-b9.k -b0 c0 -c0|0123|-2M0X9.k 2Lo09.k W9X0|14e3","MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00","MST|MST|70|0|","MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","Pacific/Chatham|LMT +1215 +1245 +1345|-cd.M -cf -cJ -dJ|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-46jMd.M 37RbW.M 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|600","Pacific/Apia|LMT LMT -1130 -11 -10 +14 +13|-cx.4 bq.U bu b0 a0 -e0 -d0|012343456565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-38Fox.4 J1A0 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|37e3","Pacific/Bougainville|LMT PMMT +10 +09 +11|-am.g -9M.w -a0 -90 -b0|012324|-3D8Wm.g AvAx.I 1TCLM.w 7CN0 2MQp0|18e4","Pacific/Chuuk|LMT +10|-a7.8 -a0|01|-2M0W7.8|49e3","Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|0121212121212121212121|-2l9nd.g 2Szcd.g 1cL0 1oN0 10L0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3","Pacific/Enderbury|LMT -12 -11 +13|bo.k c0 b0 -d0|0123|-2M0Az.E 3bIMz.E B7X0|1","Pacific/Fakaofo|LMT -11 +13|bo.U b0 -d0|012|-2M0Az.4 4ufXz.4|483","Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0|88e4","Pacific/Funafuti|LMT +12|-bU.Q -c0|01|-2M0XU.Q|45e2","Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3","Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125","Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4","Pacific/Guam|LMT LMT GST ChST|el -9D -a0 -a0|0123|-54m9D 2glc0 43qnD|17e4","Pacific/Honolulu|LMT HST HDT HWT HPT HST|av.q au 9u 9u 9u a0|01213415|-3061s.y 1uMdW.y 8x0 lef0 8wWu iAu 46p0|37e4","Pacific/Kiritimati|LMT -1040 -10 +14|at.k aE a0 -e0|0123|-2M0Bu.E 3bIMa.E B7Xk|51e2","Pacific/Kosrae|LMT +11 +12|-aP.U -b0 -c0|0121|-2M0WP.U 2LnXP.U 1bdz0|66e2","Pacific/Majuro|LMT +11 +12|-bo.M -b0 -c0|012|-2M0Xo.M 2Lo0o.M|28e3","Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2","Pacific/Pago_Pago|LMT LMT SST|-cB.c bm.M b0|012|-38FoB.c J1A0|37e2","Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E PvzB.E 5RCu 1ouJu|10e3","Pacific/Niue|LMT -1120 -1130 -11|bj.E bk bu b0|0123|-2M0AE.k 21IM0.k 17y0a|12e2","Pacific/Norfolk|LMT +1112 +1130 +1230 +11|-bb.Q -bc -bu -cu -b0|012324|-2M0Xb.Q 21ILX.Q W01G On0 1COp0|25e4","Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3","Pacific/Palau|LMT +09|-8V.U -90|01|-2M0UV.U|21e3","Pacific/Pitcairn|LMT -0830 -08|8E.k 8u 80|012|-2M0Dj.E 3UVXN.E|56","Pacific/Pohnpei|LMT +11|-aw.Q -b0|01|-2M0Ww.Q|34e3","Pacific/Port_Moresby|LMT PMMT +10|-9M.E -9M.w -a0|012|-3D8VM.E AvA0.8|25e4","Pacific/Rarotonga|LMT -1030 -0930 -10|aD.4 au 9u a0|0123232323232323232323232323|-2M0Bk.U 39zzO.U IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3","Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4","Pacific/Tarawa|LMT +12|-bw.4 -c0|01|-2M0Xw.4|29e3","Pacific/Tongatapu|LMT +1220 +13 +14|-cj.k -ck -d0 -e0|01232323232|-2M10j.k 1BnXX.k 2n5dk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3","Pacific/Wake|LMT +12|-b6.s -c0|01|-2M0X6.s|16e3","Pacific/Wallis|LMT +12|-cf.k -c0|01|-2M10f.k|94","PST8PDT|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00"],links:["Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|Atlantic/St_Helena","Africa/Cairo|Egypt","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Nairobi|Africa/Addis_Ababa","Africa/Nairobi|Africa/Asmara","Africa/Nairobi|Africa/Asmera","Africa/Nairobi|Africa/Dar_es_Salaam","Africa/Nairobi|Africa/Djibouti","Africa/Nairobi|Africa/Kampala","Africa/Nairobi|Africa/Mogadishu","Africa/Nairobi|Indian/Antananarivo","Africa/Nairobi|Indian/Comoro","Africa/Nairobi|Indian/Mayotte","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|US/Alaska","America/Argentina/Buenos_Aires|America/Buenos_Aires","America/Argentina/Catamarca|America/Argentina/ComodRivadavia","America/Argentina/Catamarca|America/Catamarca","America/Argentina/Cordoba|America/Cordoba","America/Argentina/Cordoba|America/Rosario","America/Argentina/Jujuy|America/Jujuy","America/Argentina/Mendoza|America/Mendoza","America/Atikokan|America/Coral_Harbour","America/Chicago|US/Central","America/Curacao|America/Aruba","America/Curacao|America/Kralendijk","America/Curacao|America/Lower_Princes","America/Denver|America/Shiprock","America/Denver|Navajo","America/Denver|US/Mountain","America/Detroit|US/Michigan","America/Edmonton|Canada/Mountain","America/Fort_Wayne|America/Indiana/Indianapolis","America/Fort_Wayne|America/Indianapolis","America/Fort_Wayne|US/East-Indiana","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/Indiana/Knox|America/Knox_IN","America/Indiana/Knox|US/Indiana-Starke","America/Jamaica|Jamaica","America/Kentucky/Louisville|America/Louisville","America/Los_Angeles|US/Pacific","America/Los_Angeles|US/Pacific-New","America/Manaus|Brazil/West","America/Mazatlan|Mexico/BajaSur","America/Mexico_City|Mexico/General","America/New_York|US/Eastern","America/Noronha|Brazil/DeNoronha","America/Panama|America/Cayman","America/Phoenix|US/Arizona","America/Port_of_Spain|America/Anguilla","America/Port_of_Spain|America/Antigua","America/Port_of_Spain|America/Dominica","America/Port_of_Spain|America/Grenada","America/Port_of_Spain|America/Guadeloupe","America/Port_of_Spain|America/Marigot","America/Port_of_Spain|America/Montserrat","America/Port_of_Spain|America/St_Barthelemy","America/Port_of_Spain|America/St_Kitts","America/Port_of_Spain|America/St_Lucia","America/Port_of_Spain|America/St_Thomas","America/Port_of_Spain|America/St_Vincent","America/Port_of_Spain|America/Tortola","America/Port_of_Spain|America/Virgin","America/Regina|Canada/Saskatchewan","America/Rio_Branco|America/Porto_Acre","America/Rio_Branco|Brazil/Acre","America/Santiago|Chile/Continental","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","America/Tijuana|America/Ensenada","America/Tijuana|America/Santa_Isabel","America/Tijuana|Mexico/BajaNorte","America/Toronto|America/Montreal","America/Toronto|Canada/Eastern","America/Vancouver|Canada/Pacific","America/Whitehorse|Canada/Yukon","America/Winnipeg|Canada/Central","Asia/Ashgabat|Asia/Ashkhabad","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Vientiane","Asia/Dhaka|Asia/Dacca","Asia/Dubai|Asia/Muscat","Asia/Ho_Chi_Minh|Asia/Saigon","Asia/Hong_Kong|Hongkong","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Macau|Asia/Macao","Asia/Makassar|Asia/Ujung_Pandang","Asia/Nicosia|Europe/Nicosia","Asia/Qatar|Asia/Bahrain","Asia/Rangoon|Asia/Yangon","Asia/Riyadh|Asia/Aden","Asia/Riyadh|Asia/Kuwait","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|PRC","Asia/Singapore|Singapore","Asia/Taipei|ROC","Asia/Tehran|Iran","Asia/Thimphu|Asia/Thimbu","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Urumqi|Asia/Kashgar","Atlantic/Faroe|Atlantic/Faeroe","Atlantic/Reykjavik|Iceland","Australia/Adelaide|Australia/South","Australia/Brisbane|Australia/Queensland","Australia/Broken_Hill|Australia/Yancowinna","Australia/Darwin|Australia/North","Australia/Hobart|Australia/Tasmania","Australia/Lord_Howe|Australia/LHI","Australia/Melbourne|Australia/Victoria","Australia/Perth|Australia/West","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/NSW","Etc/GMT-0|Etc/GMT","Etc/GMT-0|Etc/GMT+0","Etc/GMT-0|Etc/GMT0","Etc/GMT-0|Etc/Greenwich","Etc/GMT-0|GMT","Etc/GMT-0|GMT+0","Etc/GMT-0|GMT-0","Etc/GMT-0|GMT0","Etc/GMT-0|Greenwich","Etc/UCT|UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Belgrade|Europe/Ljubljana","Europe/Belgrade|Europe/Podgorica","Europe/Belgrade|Europe/Sarajevo","Europe/Belgrade|Europe/Skopje","Europe/Belgrade|Europe/Zagreb","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Helsinki|Europe/Mariehamn","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Lisbon|Portugal","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Oslo|Arctic/Longyearbyen","Europe/Oslo|Atlantic/Jan_Mayen","Europe/Prague|Europe/Bratislava","Europe/Rome|Europe/San_Marino","Europe/Rome|Europe/Vatican","Europe/Warsaw|Poland","Europe/Zurich|Europe/Busingen","Europe/Zurich|Europe/Vaduz","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Chuuk|Pacific/Truk","Pacific/Chuuk|Pacific/Yap","Pacific/Easter|Chile/EasterIsland","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Kwajalein|Kwajalein","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Pohnpei|Pacific/Ponape"]}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=p(n(2)),a=p(n(569)),i=p(n(571));function p(e){return e&&e.__esModule?e:{default:e}}var s=void 0;function c(e,t){var n,i,p,b,M,l,u,d,z=[],f={};for(l=0;l<e.length;l++)if("string"!==(M=e[l]).type){if(!t.hasOwnProperty(M.value)||void 0===t[M.value])throw new Error("Invalid interpolation, missing component node: `"+M.value+"`");if("object"!==o(t[M.value]))throw new Error("Invalid interpolation, component node must be a ReactElement or null: `"+M.value+"`","\n> "+s);if("componentClose"===M.type)throw new Error("Missing opening component token: `"+M.value+"`");if("componentOpen"===M.type){n=t[M.value],p=l;break}z.push(t[M.value])}else z.push(M.value);return n&&(b=function(e,t){var n,o,r=t[e],a=0;for(o=e+1;o<t.length;o++)if((n=t[o]).value===r.value){if("componentOpen"===n.type){a++;continue}if("componentClose"===n.type){if(0===a)return o;a--}}throw new Error("Missing closing component token `"+r.value+"`")}(p,e),u=c(e.slice(p+1,b),t),i=r.default.cloneElement(n,{},u),z.push(i),b<e.length-1&&(d=c(e.slice(b+1),t),z=z.concat(d))),1===z.length?z[0]:(z.forEach(function(e,t){e&&(f["interpolation-child-"+t]=e)}),(0,a.default)(f))}t.default=function(e){var t=e.mixedString,n=e.components,r=e.throwErrors;if(s=t,!n)return t;if("object"!==(void 0===n?"undefined":o(n))){if(r)throw new Error("Interpolation Error: unable to process `"+t+"` because components is not an object");return t}var a=(0,i.default)(t);try{return c(a,n)}catch(e){if(r)throw new Error("Interpolation Error: unable to process `"+t+"` because of error `"+e.message+"`");return t}}},function(e,t,n){"use strict";var o=n(2),r="function"==typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,a=n(367),i=n(190),p=n(570),s=".",c=":",b="function"==typeof Symbol&&Symbol.iterator,M="@@iterator";function l(e,t){return e&&"object"==typeof e&&null!=e.key?(n=e.key,o={"=":"=0",":":"=2"},"$"+(""+n).replace(/[=:]/g,function(e){return o[e]})):t.toString(36);var n,o}function u(e,t,n,o){var a,p=typeof e;if("undefined"!==p&&"boolean"!==p||(e=null),null===e||"string"===p||"number"===p||"object"===p&&e.$$typeof===r)return n(o,e,""===t?s+l(e,0):t),1;var d=0,z=""===t?s:t+c;if(Array.isArray(e))for(var f=0;f<e.length;f++)d+=u(a=e[f],z+l(a,f),n,o);else{var O=function(e){var t=e&&(b&&e[b]||e[M]);if("function"==typeof t)return t}(e);if(O)for(var A,h=O.call(e),m=0;!(A=h.next()).done;)d+=u(a=A.value,z+l(a,m++),n,o);else if("object"===p){var q=""+e;i(!1,"Objects are not valid as a React child (found: %s).%s","[object Object]"===q?"object with keys {"+Object.keys(e).join(", ")+"}":q,"")}}return d}var d=/\/+/g;function z(e){return(""+e).replace(d,"$&/")}var f,O,A=h,h=function(e){if(this.instancePool.length){var t=this.instancePool.pop();return this.call(t,e),t}return new this(e)};function m(e,t,n,o){this.result=e,this.keyPrefix=t,this.func=n,this.context=o,this.count=0}function q(e,t,n){var r,i,p=e.result,s=e.keyPrefix,c=e.func,b=e.context,M=c.call(b,t,e.count++);Array.isArray(M)?_(M,p,n,a.thatReturnsArgument):null!=M&&(o.isValidElement(M)&&(r=M,i=s+(!M.key||t&&t.key===M.key?"":z(M.key)+"/")+n,M=o.cloneElement(r,{key:i},void 0!==r.props?r.props.children:void 0)),p.push(M))}function _(e,t,n,o,r){var a="";null!=n&&(a=z(n)+"/");var i=m.getPooled(t,a,o,r);!function(e,t,n){null==e||u(e,"",q,i)}(e),m.release(i)}m.prototype.destructor=function(){this.result=null,this.keyPrefix=null,this.func=null,this.context=null,this.count=0},f=function(e,t,n,o){if(this.instancePool.length){var r=this.instancePool.pop();return this.call(r,e,t,n,o),r}return new this(e,t,n,o)},(O=m).instancePool=[],O.getPooled=f||A,O.poolSize||(O.poolSize=10),O.release=function(e){i(e instanceof this,"Trying to release an instance into a pool of a different type."),e.destructor(),this.instancePool.length<this.poolSize&&this.instancePool.push(e)},e.exports=function(e){if("object"!=typeof e||!e||Array.isArray(e))return p(!1,"React.addons.createFragment only accepts a single object. Got: %s",e),e;if(o.isValidElement(e))return p(!1,"React.addons.createFragment does not accept a ReactElement without a wrapper object."),e;i(1!==e.nodeType,"React.addons.createFragment(...): Encountered an invalid child; DOM elements are not valid children of React components.");var t=[];for(var n in e)_(e[n],t,n,a.thatReturnsArgument);return t}},function(e,t,n){"use strict";var o=n(367);e.exports=o},function(e,t,n){"use strict";function o(e){return e.match(/^\{\{\//)?{type:"componentClose",value:e.replace(/\W/g,"")}:e.match(/\/\}\}$/)?{type:"componentSelfClosing",value:e.replace(/\W/g,"")}:e.match(/^\{\{/)?{type:"componentOpen",value:e.replace(/\W/g,"")}:{type:"string",value:e}}e.exports=function(e){return e.split(/(\{\{\/?\s*\w+\s*\/?\}\})/g).map(o)}},function(e,t,n){var o=n(123),r=n(19);function a(e){if(!(this instanceof a))return new a(e);"number"==typeof e&&(e={max:e}),e||(e={}),o.EventEmitter.call(this),this.cache={},this.head=this.tail=null,this.length=0,this.max=e.max||1e3,this.maxAge=e.maxAge||0}e.exports=a,r(a,o.EventEmitter),Object.defineProperty(a.prototype,"keys",{get:function(){return Object.keys(this.cache)}}),a.prototype.clear=function(){this.cache={},this.head=this.tail=null,this.length=0},a.prototype.remove=function(e){if("string"!=typeof e&&(e=""+e),this.cache.hasOwnProperty(e)){var t=this.cache[e];return delete this.cache[e],this._unlink(e,t.prev,t.next),t.value}},a.prototype._unlink=function(e,t,n){this.length--,0===this.length?this.head=this.tail=null:this.head===e?(this.head=t,this.cache[this.head].next=null):this.tail===e?(this.tail=n,this.cache[this.tail].prev=null):(this.cache[t].next=n,this.cache[n].prev=t)},a.prototype.peek=function(e){if(this.cache.hasOwnProperty(e)){var t=this.cache[e];if(this._checkAge(e,t))return t.value}},a.prototype.set=function(e,t){var n;if("string"!=typeof e&&(e=""+e),this.cache.hasOwnProperty(e)){if((n=this.cache[e]).value=t,this.maxAge&&(n.modified=Date.now()),e===this.head)return t;this._unlink(e,n.prev,n.next)}else n={value:t,modified:0,next:null,prev:null},this.maxAge&&(n.modified=Date.now()),this.cache[e]=n,this.length===this.max&&this.evict();return this.length++,n.next=null,n.prev=this.head,this.head&&(this.cache[this.head].next=e),this.head=e,this.tail||(this.tail=e),t},a.prototype._checkAge=function(e,t){return!(this.maxAge&&Date.now()-t.modified>this.maxAge&&(this.remove(e),this.emit("evict",{key:e,value:t.value}),1))},a.prototype.get=function(e){if("string"!=typeof e&&(e=""+e),this.cache.hasOwnProperty(e)){var t=this.cache[e];if(this._checkAge(e,t))return this.head!==e&&(e===this.tail?(this.tail=t.next,this.cache[this.tail].prev=null):this.cache[t.prev].next=t.next,this.cache[t.next].prev=t.prev,this.cache[this.head].next=e,t.prev=this.head,t.next=null,this.head=e),t.value}},a.prototype.evict=function(){if(this.tail){var e=this.tail,t=this.remove(this.tail);this.emit("evict",{key:e,value:t})}}},function(e,t){e.exports=function(e,t,n,o){e=(e+"").replace(/[^0-9+\-Ee.]/g,"");var r=isFinite(+e)?+e:0,a=isFinite(+t)?Math.abs(t):0,i=void 0===o?",":o,p=void 0===n?".":n,s="";return(s=(a?function(e,t){var n=Math.pow(10,t);return""+(Math.round(e*n)/n).toFixed(t)}(r,a):""+Math.round(r)).split("."))[0].length>3&&(s[0]=s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g,i)),(s[1]||"").length<a&&(s[1]=s[1]||"",s[1]+=new Array(a-s[1].length+1).join("0")),s.join(p)}},function(e,t,n){var o=n(2),r=n(368),a=n(16);e.exports=function(e){var t={moment:e.moment,numberFormat:e.numberFormat.bind(e),translate:e.translate.bind(e)};return function(n){var i=n.displayName||n.name||"",p=a({displayName:"Localized("+i+")",componentDidMount:function(){this.boundForceUpdate=this.forceUpdate.bind(this),e.stateObserver.addListener("change",this.boundForceUpdate)},componentWillUnmount:function(){this.boundForceUpdate&&e.stateObserver.removeListener("change",this.boundForceUpdate)},render:function(){var a=r({locale:e.getLocaleSlug()},this.props,t);return o.createElement(n,a)}});return p._composedComponent=n,p}}},function(e,t,n){var o=n(45);e.exports=function(e,t){return function(n,r){if(null==n)return n;if(!o(n))return e(n,r);for(var a=n.length,i=t?a:-1,p=Object(n);(t?i--:++i<a)&&!1!==r(p[i],i,p););return n}}},function(e,t,n){var o=n(577),r=n(587),a=n(377);e.exports=function(e){var t=r(e);return 1==t.length&&t[0][2]?a(t[0][0],t[0][1]):function(n){return n===e||o(n,e,t)}}},function(e,t,n){var o=n(121),r=n(180);e.exports=function(e,t,n,a){var i=n.length,p=i,s=!a;if(null==e)return!p;for(e=Object(e);i--;){var c=n[i];if(s&&c[2]?c[1]!==e[c[0]]:!(c[0]in e))return!1}for(;++i<p;){var b=(c=n[i])[0],M=e[b],l=c[1];if(s&&c[2]){if(void 0===M&&!(b in e))return!1}else{var u=new o;if(a)var d=a(M,l,b,e,t,u);if(!(void 0===d?r(l,M,3,a,u):d))return!1}}return!0}},function(e,t,n){var o=n(121),r=n(371),a=n(579),i=n(582),p=n(94),s=n(26),c=n(99),b=n(131),M="[object Arguments]",l="[object Array]",u="[object Object]",d=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,z,f,O){var A=s(e),h=s(t),m=A?l:p(e),q=h?l:p(t),_=(m=m==M?u:m)==u,W=(q=q==M?u:q)==u,g=m==q;if(g&&c(e)){if(!c(t))return!1;A=!0,_=!1}if(g&&!_)return O||(O=new o),A||b(e)?r(e,t,n,z,f,O):a(e,t,m,n,z,f,O);if(!(1&n)){var v=_&&d.call(e,"__wrapped__"),y=W&&d.call(t,"__wrapped__");if(v||y){var L=v?e.value():e,R=y?t.value():t;return O||(O=new o),f(L,R,n,z,O)}}return!!g&&(O||(O=new o),i(e,t,n,z,f,O))}},function(e,t,n){var o=n(74),r=n(220),a=n(88),i=n(371),p=n(580),s=n(581),c=o?o.prototype:void 0,b=c?c.valueOf:void 0;e.exports=function(e,t,n,o,c,M,l){switch(n){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!M(new r(e),new r(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return a(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var u=p;case"[object Set]":var d=1&o;if(u||(u=s),e.size!=t.size&&!d)return!1;var z=l.get(e);if(z)return z==t;o|=2,l.set(e,t);var f=i(u(e),u(t),o,c,M,l);return l.delete(e),f;case"[object Symbol]":if(b)return b.call(e)==b.call(t)}return!1}},function(e,t){e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach(function(e,o){n[++t]=[o,e]}),n}},function(e,t){e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=e}),n}},function(e,t,n){var o=n(372),r=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,a,i,p){var s=1&n,c=o(e),b=c.length;if(b!=o(t).length&&!s)return!1;for(var M=b;M--;){var l=c[M];if(!(s?l in t:r.call(t,l)))return!1}var u=p.get(e);if(u&&p.get(t))return u==t;var d=!0;p.set(e,t),p.set(t,e);for(var z=s;++M<b;){var f=e[l=c[M]],O=t[l];if(a)var A=s?a(O,f,l,t,e,p):a(f,O,l,e,t,p);if(!(void 0===A?f===O||i(f,O,n,a,p):A)){d=!1;break}z||(z="constructor"==l)}if(d&&!z){var h=e.constructor,m=t.constructor;h!=m&&"constructor"in e&&"constructor"in t&&!("function"==typeof h&&h instanceof h&&"function"==typeof m&&m instanceof m)&&(d=!1)}return p.delete(e),p.delete(t),d}},function(e,t,n){var o=n(62)(n(36),"DataView");e.exports=o},function(e,t,n){var o=n(62)(n(36),"Promise");e.exports=o},function(e,t,n){var o=n(62)(n(36),"Set");e.exports=o},function(e,t,n){var o=n(62)(n(36),"WeakMap");e.exports=o},function(e,t,n){var o=n(376),r=n(59);e.exports=function(e){for(var t=r(e),n=t.length;n--;){var a=t[n],i=e[a];t[n]=[a,i,o(i)]}return t}},function(e,t,n){var o=n(180),r=n(22),a=n(407),i=n(142),p=n(376),s=n(377),c=n(75);e.exports=function(e,t){return i(e)&&p(t)?s(c(e),t):function(n){var i=r(n,e);return void 0===i&&i===t?a(n,e):o(t,i,3)}}},function(e,t){e.exports=function(e,t){return null!=e&&t in Object(e)}},function(e,t,n){var o=n(79),r=n(98),a=n(26),i=n(130),p=n(140),s=n(75);e.exports=function(e,t,n){for(var c=-1,b=(t=o(t,e)).length,M=!1;++c<b;){var l=s(t[c]);if(!(M=null!=e&&n(e,l)))break;e=e[l]}return M||++c!=b?M:!!(b=null==e?0:e.length)&&p(b)&&i(l,b)&&(a(e)||r(e))}},function(e,t,n){var o=n(408),r=n(592),a=n(142),i=n(75);e.exports=function(e){return a(e)?o(i(e)):r(e)}},function(e,t,n){var o=n(132);e.exports=function(e){return function(t){return o(t,e)}}},function(e,t,n){var o=n(124);e.exports=function(e,t){var n;return o(e,function(e,o,r){return!(n=t(e,o,r))}),!!n}},function(e,t,n){var o=n(124);e.exports=function(e,t){var n=[];return o(e,function(e,o,r){t(e,o,r)&&n.push(e)}),n}},function(e,t,n){var o=n(110),r=n(178),a=n(77);e.exports=function(e,t){var n={};return t=a(t,3),r(e,function(e,r,a){o(n,r,t(e,r,a))}),n}},function(e,t,n){var o=n(77),r=n(45),a=n(59);e.exports=function(e){return function(t,n,i){var p=Object(t);if(!r(t)){var s=o(n,3);t=a(t),n=function(e){return s(p[e],e,p)}}var c=e(t,n,i);return c>-1?p[s?t[c]:c]:void 0}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Masthead=void 0;var o=O(n(3)),r=O(n(4)),a=O(n(7)),i=O(n(5)),p=O(n(6)),s=O(n(2)),c=n(9),b=n(8),M=O(n(33)),l=O(n(35)),u=O(n(599)),d=O(n(13)),z=n(20),f=n(21);function O(e){return e&&e.__esModule?e:{default:e}}var A=t.Masthead=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.trackDashClick=function(){d.default.tracks.recordJetpackClick({target:"masthead",path:"nav_dashboard"})},a.trackSettingsClick=function(){d.default.tracks.recordJetpackClick({target:"masthead",path:"nav_settings"})},a.trackLogoClick=function(){d.default.tracks.recordJetpackClick({target:"masthead",path:"logo"})},a.testConnection=function(){return a.props.testConnection()},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){var e="dev"===this.props.siteConnectionStatus?s.default.createElement("code",null,"Dev Mode"):"",t=this.props.sandboxDomain?s.default.createElement("code",{id:"sandbox-domain-badge",onClick:this.testConnection,onKeyDown:this.testConnection,role:"button",tabIndex:0,title:"Sandboxing via "+this.props.sandboxDomain+". Click to test connection."},"API Sandboxed"):"",n=(0,l.default)(["/","/dashboard","/apps","/my-plan","/plans"],this.props.route.path),o=""===this.props.route.path;return s.default.createElement("div",{className:"jp-masthead"},s.default.createElement("div",{className:"jp-masthead__inside-container"},s.default.createElement("div",{className:"jp-masthead__logo-container"},s.default.createElement("a",{onClick:this.trackLogoClick,className:"jp-masthead__logo-link",href:"#dashboard"},s.default.createElement("svg",{className:"jetpack-logo__masthead",xmlns:"http://www.w3.org/2000/svg",x:"0px",y:"0px",height:"32",viewBox:"0 0 118 32"},s.default.createElement("path",{fill:"#00BE28",d:"M16,0C7.2,0,0,7.2,0,16s7.2,16,16,16s16-7.2,16-16S24.8,0,16,0z M15,19H7l8-16V19z M17,29V13h8L17,29z"}),s.default.createElement("path",{d:"M41.3,26.6c-0.5-0.7-0.9-1.4-1.3-2.1c2.3-1.4,3-2.5,3-4.6V8h-3V6h6v13.4C46,22.8,45,24.8,41.3,26.6z"}),s.default.createElement("path",{d:"M65,18.4c0,1.1,0.8,1.3,1.4,1.3c0.5,0,2-0.2,2.6-0.4v2.1c-0.9,0.3-2.5,0.5-3.7,0.5c-1.5,0-3.2-0.5-3.2-3.1V12H60v-2h2.1V7.1 H65V10h4v2h-4V18.4z"}),s.default.createElement("path",{d:"M71,10h3v1.3c1.1-0.8,1.9-1.3,3.3-1.3c2.5,0,4.5,1.8,4.5,5.6s-2.2,6.3-5.8,6.3c-0.9,0-1.3-0.1-2-0.3V28h-3V10z M76.5,12.3 c-0.8,0-1.6,0.4-2.5,1.2v5.9c0.6,0.1,0.9,0.2,1.8,0.2c2,0,3.2-1.3,3.2-3.9C79,13.4,78.1,12.3,76.5,12.3z"}),s.default.createElement("path",{d:"M93,22h-3v-1.5c-0.9,0.7-1.9,1.5-3.5,1.5c-1.5,0-3.1-1.1-3.1-3.2c0-2.9,2.5-3.4,4.2-3.7l2.4-0.3v-0.3c0-1.5-0.5-2.3-2-2.3 c-0.7,0-2.3,0.5-3.7,1.1L84,11c1.2-0.4,3-1,4.4-1c2.7,0,4.6,1.4,4.6,4.7L93,22z M90,16.4l-2.2,0.4c-0.7,0.1-1.4,0.5-1.4,1.6 c0,0.9,0.5,1.4,1.3,1.4s1.5-0.5,2.3-1V16.4z"}),s.default.createElement("path",{d:"M104.5,21.3c-1.1,0.4-2.2,0.6-3.5,0.6c-4.2,0-5.9-2.4-5.9-5.9c0-3.7,2.3-6,6.1-6c1.4,0,2.3,0.2,3.2,0.5V13 c-0.8-0.3-2-0.6-3.2-0.6c-1.7,0-3.2,0.9-3.2,3.6c0,2.9,1.5,3.8,3.3,3.8c0.9,0,1.9-0.2,3.2-0.7V21.3z"}),s.default.createElement("path",{d:"M110,15.2c0.2-0.3,0.2-0.8,3.8-5.2h3.7l-4.6,5.7l5,6.3h-3.7l-4.2-5.8V22h-3V6h3V15.2z"}),s.default.createElement("path",{d:"M58.5,21.3c-1.5,0.5-2.7,0.6-4.2,0.6c-3.6,0-5.8-1.8-5.8-6c0-3.1,1.9-5.9,5.5-5.9s4.9,2.5,4.9,4.9c0,0.8,0,1.5-0.1,2h-7.3 c0.1,2.5,1.5,2.8,3.6,2.8c1.1,0,2.2-0.3,3.4-0.7C58.5,19,58.5,21.3,58.5,21.3z M56,15c0-1.4-0.5-2.9-2-2.9c-1.4,0-2.3,1.3-2.4,2.9 C51.6,15,56,15,56,15z"}))),e,t),this.props.userCanEditPosts&&s.default.createElement("div",{className:"jp-masthead__nav"},!o&&this.props.siteConnectionStatus&&s.default.createElement(u.default,null,s.default.createElement(M.default,{compact:!0,href:"#/dashboard",primary:n&&!o,onClick:this.trackDashClick},(0,b.translate)("Dashboard")),s.default.createElement(M.default,{compact:!0,href:"#/settings",primary:!n&&!o,onClick:this.trackSettingsClick},(0,b.translate)("Settings"))))))}}]),t}(s.default.Component);A.defaultProps={route:{path:""}},t.default=(0,c.connect)(function(e){return{siteConnectionStatus:(0,z.getSiteConnectionStatus)(e),sandboxDomain:(0,z.getSandboxDomain)(e),currentVersion:(0,f.getCurrentVersion)(e),userCanEditPosts:(0,f.userCanEditPosts)(e)}},function(e){return{testConnection:function(){return e((0,z.fetchSiteConnectionTest)())}}})(A)},function(e,t,n){},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=b(n(3)),r=b(n(4)),a=b(n(7)),i=b(n(5)),p=b(n(6)),s=b(n(2)),c=b(n(12));function b(e){return e&&e.__esModule?e:{default:e}}n(600);var M=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){var e=(0,c.default)("dops-button-group",this.props.className);return s.default.createElement("span",{className:e},this.props.children)}}]),t}(s.default.Component);M.displayName="ButtonGroup",M.propTypes={children:function(e){var t=null;return s.default.Children.forEach(e.children,function(e){e.props&&"button"===e.props.type||(t=new Error("All children elements should be a Button."))}),t}},t.default=M,e.exports=t.default},function(e,t,n){},function(e,t,n){"use strict";var o={i18n_default_locale_slug:"en",mc_analytics_enabled:!0,google_analytics_enabled:!1,google_analytics_key:null};e.exports=function(e){if(e in o)return o[e];throw new Error("config key `"+e+"` does not exist")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.unlinkUser=t.disconnectSite=t.fetchUserConnectionData=t.fetchConnectUrl=t.fetchSiteConnectionTest=t.fetchSiteConnectionStatus=void 0;var o,r=n(76),a=n(8),i=n(14),p=(o=n(37))&&o.__esModule?o:{default:o};t.fetchSiteConnectionStatus=function(){return function(e){return p.default.fetchSiteConnectionStatus().then(function(t){e({type:i.JETPACK_CONNECTION_STATUS_FETCH,siteConnected:t})})}},t.fetchSiteConnectionTest=function(){return function(e){return e((0,r.createNotice)("is-info",(0,a.translate)("Testing Jetpack Connection"),{id:"test-jetpack-connection"})),p.default.fetchSiteConnectionTest().then(function(t){e({type:i.JETPACK_CONNECTION_TEST_FETCH,connectionTest:t}),e((0,r.removeNotice)("test-jetpack-connection")),e((0,r.createNotice)("success"===t.code?"is-success":"is-error",t.message,{id:"test-jetpack-connection"}))}).catch(function(t){e((0,r.removeNotice)("test-jetpack-connection")),e((0,r.createNotice)("is-error",(0,a.translate)("There was an error testing Jetpack. Error: %(error)s",{args:{error:t.message}}),{id:"test-jetpack-connection"}))})}};var s=t.fetchConnectUrl=function(){return function(e){return e({type:i.CONNECT_URL_FETCH}),p.default.fetchConnectUrl().then(function(t){e({type:i.CONNECT_URL_FETCH_SUCCESS,connectUrl:t})}).catch(function(t){e({type:i.CONNECT_URL_FETCH_FAIL,error:t})})}};t.fetchUserConnectionData=function(){return function(e){return e({type:i.USER_CONNECTION_DATA_FETCH}),p.default.fetchUserConnectionData().then(function(t){e({type:i.USER_CONNECTION_DATA_FETCH_SUCCESS,userConnectionData:t})}).catch(function(t){e({type:i.USER_CONNECTION_DATA_FETCH_FAIL,error:t})})}},t.disconnectSite=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return function(t){return t({type:i.DISCONNECT_SITE}),t((0,r.createNotice)("is-info",(0,a.translate)("Disconnecting Jetpack"),{id:"disconnect-jetpack"})),p.default.disconnectSite().then(function(e){t({type:i.DISCONNECT_SITE_SUCCESS,disconnectingSite:e}),t((0,r.removeNotice)("disconnect-jetpack"))}).then(function(){t(s()),e&&window.location.reload()}).catch(function(e){t({type:i.DISCONNECT_SITE_FAIL,error:e}),t((0,r.removeNotice)("disconnect-jetpack")),t((0,r.createNotice)("is-error",(0,a.translate)("There was an error disconnecting Jetpack. Error: %(error)s",{args:{error:e}}),{id:"disconnect-jetpack"}))})}},t.unlinkUser=function(){return function(e){return e({type:i.UNLINK_USER}),e((0,r.createNotice)("is-info",(0,a.translate)("Unlinking from WordPress.com"),{id:"unlink-user"})),p.default.unlinkUser().then(function(t){e({type:i.UNLINK_USER_SUCCESS,userUnlinked:t}),e((0,r.removeNotice)("unlink-user")),e((0,r.createNotice)("is-success",(0,a.translate)("Unlinked from WordPress.com."),{id:"unlink-user",duration:2e3}))}).catch(function(t){e({type:i.UNLINK_USER_FAIL,error:t}),e((0,r.removeNotice)("unlink-user")),e((0,r.createNotice)("is-error",(0,a.translate)("Error unlinking from WordPress.com. %(error)s",{args:{error:t}}),{id:"unlink-user"}))})}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setInitialState=void 0;var o=n(14);t.setInitialState=function(){return function(e){e({type:o.JETPACK_SET_INITIAL_STATE,initialState:window.Initial_State})}}},function(e,t,n){"use strict";var o=d(n(10)),r=d(n(3)),a=d(n(4)),i=d(n(7)),p=d(n(5)),s=d(n(6)),c=d(n(1)),b=d(n(126)),M=d(n(2)),l=d(n(417)),u=d(n(12));function d(e){return e&&e.__esModule?e:{default:e}}var z=n(662),f=n(664),O=n(608),A=480,h=function(e){function t(){var e,n,i,s;(0,a.default)(this,t);for(var c=arguments.length,l=Array(c),u=0;u<c;u++)l[u]=arguments[u];return n=i=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(l))),i.state={isDropdown:!1},i.getTabWidths=function(){var e=0;M.default.Children.forEach(i.props.children,function(t,n){if(t){var o=b.default.findDOMNode(this.refs["tab-"+n]).offsetWidth;e+=o}}.bind(i)),i.tabsWidth=e},i.getDropdown=function(){var e=M.default.Children.map(i.props.children,function(e,t){return e?M.default.createElement(f,(0,o.default)({},e.props,{key:"navTabsDropdown-"+t}),e.props.children):null});return M.default.createElement(z,{className:"dops-section-nav-tabs__dropdown",selectedText:i.props.selectedText,selectedCount:i.props.selectedCount},e)},i.setDropdown=function(){var e=void 0;if(window.innerWidth>A){if(!i.refs.navGroup)return;e=i.refs.navGroup.offsetWidth,i.tabsWidth||i.getTabWidths(),e<=i.tabsWidth&&!i.state.isDropdown?i.setState({isDropdown:!0}):e>i.tabsWidth&&i.state.isDropdown&&i.setState({isDropdown:!1})}else window.innerWidth<=A&&i.state.isDropdown&&i.setState({isDropdown:!1})},i.keyHandler=function(e){switch(e.keyCode){case 32:case 13:e.preventDefault(),document.activeElement.click()}},s=n,(0,p.default)(i,s)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"componentDidMount",value:function(){this.setDropdown(),this.debouncedAfterResize=(0,l.default)(this.setDropdown,300),window.addEventListener("resize",this.debouncedAfterResize)}},{key:"UNSAFE_componentWillReceiveProps",value:function(){this.setDropdown()}},{key:"componentWillUnmount",value:function(){window.removeEventListener("resize",this.debouncedAfterResize)}},{key:"render",value:function(){var e=M.default.Children.map(this.props.children,function(e,t){return e&&M.default.cloneElement(e,{ref:"tab-"+t})}),t=(0,u.default)({"dops-section-nav-tabs":!0,"is-dropdown":this.state.isDropdown,"is-open":this.state.isDropdownOpen,"has-siblings":this.props.hasSiblingControls}),n=O.getWindowInnerWidth();return M.default.createElement("div",{className:"dops-section-nav-group",ref:"navGroup"},M.default.createElement("div",{className:t},this.props.label&&M.default.createElement("h6",{className:"dops-section-nav-group__label"},this.props.label),M.default.createElement("ul",{className:"dops-section-nav-tabs__list",role:"menu",onKeyDown:this.keyHandler},e),this.state.isDropdown&&n>A&&this.getDropdown()))}}]),t}(M.default.Component);h.propTypes={selectedText:c.default.string,selectedCount:c.default.number,label:c.default.string,hasSiblingControls:c.default.bool},h.defaultProps={hasSiblingControls:!1},e.exports=h},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=p(n(1)),r=p(n(2)),a=p(n(16)),i=p(n(182));function p(e){return e&&e.__esModule?e:{default:e}}n(733),t.default=(0,a.default)({displayName:"Count",mixins:[i.default],propTypes:{count:o.default.number.isRequired},render:function(){return r.default.createElement("span",{className:"dops-count"},this.numberFormat(this.props.count))}}),e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e,t){return!(0,r.default)(this.props,e)||!(0,r.default)(this.state,t)};var o,r=(o=n(607))&&o.__esModule?o:{default:o};e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e,t){if(e===t)return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!1;for(var r=Object.prototype.hasOwnProperty.bind(t),a=0;a<n.length;a++)if(!r(n[a])||e[n[a]]!==t[n[a]])return!1;return!0},e.exports=t.default},function(e,t,n){"use strict";(function(t){function n(e){var n=o(),r={"<480px":function(){return n<=480},"<660px":function(){return n<=660},"<960px":function(){return n<=960},">480px":function(){return n>480},">660px":function(){return n>660},">960px":function(){return n>960},"480px-660px":function(){return n>480&&n<=660},"660px-960px":function(){return n>660&&n<=960},"480px-960px":function(){return n>480&&n<=960}};if(r.hasOwnProperty(e))return r[e]();try{t.window.console.warn("Undefined breakpoint used in `mobile-first-breakpoint`",e)}catch(e){}}function o(){return t.window?t.window.innerWidth:769}e.exports={isMobile:function(){return n("<480px")},isDesktop:function(){return n(">960px")},isWithinBreakpoint:n,getWindowInnerWidth:o}}).call(this,n(44))},function(e,t,n){"use strict";var o=n(1),r=n(2),a=n(182),i=n(12),p=n(16),s=n(605),c=p({displayName:"NavItem",mixins:[a],propTypes:{itemType:o.string,path:o.string,selected:o.bool,tabIndex:o.number,onClick:o.func,isExternalLink:o.bool,disabled:o.bool,count:o.number},render:function(){var e=this.props.itemType?this.props.itemType:"tab",t={"is-selected":this.props.selected,"is-external":this.props.isExternalLink};t["dops-section-nav-"+e]=!0;var n=i(t),o=void 0,a=void 0;return this.props.isExternalLink&&(o="_blank"),this.props.disabled||(a=this.props.onClick),r.createElement("li",{className:n},r.createElement("a",{href:this.props.path,target:o,className:"dops-section-nav-"+e+"__link",onClick:a,tabIndex:this.props.tabIndex||0,disabled:this.props.disabled,role:"menuitem",rel:this.props.isExternalLink?"external":null},r.createElement("span",{className:"dops-section-nav-"+e+"__text"},this.props.children,"number"==typeof this.props.count&&r.createElement(s,{count:this.props.count}))))}});e.exports=c},function(e,t,n){},function(e,t){e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},function(e,t,n){var o=n(613);e.exports=function(e){return null!=e&&e.length?o(e,1):[]}},function(e,t,n){var o=n(164),r=n(614);e.exports=function e(t,n,a,i,p){var s=-1,c=t.length;for(a||(a=r),p||(p=[]);++s<c;){var b=t[s];n>0&&a(b)?n>1?e(b,n-1,a,i,p):o(p,b):i||(p[p.length]=b)}return p}},function(e,t,n){var o=n(74),r=n(98),a=n(26),i=o?o.isConcatSpreadable:void 0;e.exports=function(e){return a(e)||r(e)||!!(i&&e&&e[i])}},function(e,t,n){var o=n(121),r=n(369),a=n(128),i=n(616),p=n(617),s=n(218),c=n(221),b=n(618),M=n(619),l=n(372),u=n(384),d=n(94),z=n(620),f=n(621),O=n(222),A=n(26),h=n(99),m=n(625),q=n(34),_=n(627),W=n(59),g="[object Arguments]",v="[object Function]",y="[object Object]",L={};L[g]=L["[object Array]"]=L["[object ArrayBuffer]"]=L["[object DataView]"]=L["[object Boolean]"]=L["[object Date]"]=L["[object Float32Array]"]=L["[object Float64Array]"]=L["[object Int8Array]"]=L["[object Int16Array]"]=L["[object Int32Array]"]=L["[object Map]"]=L["[object Number]"]=L[y]=L["[object RegExp]"]=L["[object Set]"]=L["[object String]"]=L["[object Symbol]"]=L["[object Uint8Array]"]=L["[object Uint8ClampedArray]"]=L["[object Uint16Array]"]=L["[object Uint32Array]"]=!0,L["[object Error]"]=L[v]=L["[object WeakMap]"]=!1,e.exports=function e(t,n,R,E,w,k){var B,T=1&n,S=2&n,N=4&n;if(R&&(B=w?R(t,E,w,k):R(t)),void 0!==B)return B;if(!q(t))return t;var X=A(t);if(X){if(B=z(t),!T)return c(t,B)}else{var C=d(t),D=C==v||"[object GeneratorFunction]"==C;if(h(t))return s(t,T);if(C==y||C==g||D&&!w){if(B=S||D?{}:O(t),!T)return S?M(t,p(B,t)):b(t,i(B,t))}else{if(!L[C])return w?t:{};B=f(t,C,T)}}k||(k=new o);var P=k.get(t);if(P)return P;if(k.set(t,B),_(t))return t.forEach(function(o){B.add(e(o,n,R,o,t,k))}),B;if(m(t))return t.forEach(function(o,r){B.set(r,e(o,n,R,r,t,k))}),B;var x=N?S?u:l:S?keysIn:W,H=X?void 0:x(t);return r(H||t,function(o,r){H&&(o=t[r=o]),a(B,r,e(o,n,R,r,t,k))}),B}},function(e,t,n){var o=n(64),r=n(59);e.exports=function(e,t){return e&&o(t,r(t),e)}},function(e,t,n){var o=n(64),r=n(122);e.exports=function(e,t){return e&&o(t,r(t),e)}},function(e,t,n){var o=n(64),r=n(165);e.exports=function(e,t){return o(e,r(e),t)}},function(e,t,n){var o=n(64),r=n(383);e.exports=function(e,t){return o(e,r(e),t)}},function(e,t){var n=Object.prototype.hasOwnProperty;e.exports=function(e){var t=e.length,o=new e.constructor(t);return t&&"string"==typeof e[0]&&n.call(e,"index")&&(o.index=e.index,o.input=e.input),o}},function(e,t,n){var o=n(157),r=n(622),a=n(623),i=n(624),p=n(219);e.exports=function(e,t,n){var s=e.constructor;switch(t){case"[object ArrayBuffer]":return o(e);case"[object Boolean]":case"[object Date]":return new s(+e);case"[object DataView]":return r(e,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return p(e,n);case"[object Map]":return new s;case"[object Number]":case"[object String]":return new s(e);case"[object RegExp]":return a(e);case"[object Set]":return new s;case"[object Symbol]":return i(e)}}},function(e,t,n){var o=n(157);e.exports=function(e,t){var n=t?o(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}},function(e,t){var n=/\w*$/;e.exports=function(e){var t=new e.constructor(e.source,n.exec(e));return t.lastIndex=e.lastIndex,t}},function(e,t,n){var o=n(74),r=o?o.prototype:void 0,a=r?r.valueOf:void 0;e.exports=function(e){return a?Object(a.call(e)):{}}},function(e,t,n){var o=n(626),r=n(112),a=n(141),i=a&&a.isMap,p=i?r(i):o;e.exports=p},function(e,t,n){var o=n(94),r=n(39);e.exports=function(e){return r(e)&&"[object Map]"==o(e)}},function(e,t,n){var o=n(628),r=n(112),a=n(141),i=a&&a.isSet,p=i?r(i):o;e.exports=p},function(e,t,n){var o=n(94),r=n(39);e.exports=function(e){return r(e)&&"[object Set]"==o(e)}},function(e,t,n){var o=n(79),r=n(630),a=n(631),i=n(75);e.exports=function(e,t){return t=o(t,e),null==(e=a(e,t))||delete e[i(r(t))]}},function(e,t){e.exports=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}},function(e,t,n){var o=n(132),r=n(385);e.exports=function(e,t){return t.length<2?e:o(e,r(t,0,-1))}},function(e,t,n){var o=n(224);e.exports=function(e){return o(e)?void 0:e}},function(e,t,n){},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.fetchAvailablePlans=t.fetchSiteFeatures=t.fetchSiteData=void 0;var o,r=n(14),a=(o=n(37))&&o.__esModule?o:{default:o};t.fetchSiteData=function(){return function(e){return e({type:r.JETPACK_SITE_DATA_FETCH}),a.default.fetchSiteData().then(function(t){return e({type:r.JETPACK_SITE_DATA_FETCH_RECEIVE,siteData:t}),t}).catch(function(t){e({type:r.JETPACK_SITE_DATA_FETCH_FAIL,error:t})})}},t.fetchSiteFeatures=function(){return function(e){return e({type:r.JETPACK_SITE_FEATURES_FETCH}),a.default.fetchSiteFeatures().then(function(t){return e({type:r.JETPACK_SITE_FEATURES_FETCH_RECEIVE,siteFeatures:t}),t}).catch(function(t){e({type:r.JETPACK_SITE_FEATURES_FETCH_FAIL,error:t})})}},t.fetchAvailablePlans=function(){return function(e){return e({type:r.JETPACK_SITE_PLANS_FETCH}),a.default.getPlans().then(function(t){var n=JSON.parse(t);return e({type:r.JETPACK_SITE_PLANS_FETCH_RECEIVE,plans:n}),t}).catch(function(t){e({type:r.JETPACK_SITE_PLANS_FETCH_FAIL,error:t})})}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=m(n(3)),r=m(n(4)),a=m(n(7)),i=m(n(5)),p=m(n(6)),s=m(n(761)),c=m(n(1)),b=n(2),M=m(b),l=m(n(126)),u=m(n(104)),d=m(n(12)),z=m(n(771)),f=m(n(780)),O=m(n(23)),A=m(n(866)),h=n(867);function m(e){return e&&e.__esModule?e:{default:e}}n(876);var q=(0,u.default)("calypso:popover"),_=new s.default,W=function(e){function t(e){(0,r.default)(this,t);var n=(0,i.default)(this,(t.__proto__||(0,o.default)(t)).call(this,e));return n.setPopoverId(e.id),n.setDOMBehavior=n.setDOMBehavior.bind(n),n.setPosition=n.setPosition.bind(n),n.onClickout=n.onClickout.bind(n),n.onKeydown=n.onKeydown.bind(n),n.onWindowChange=n.onWindowChange.bind(n),n.state={show:e.isVisible,left:-99999,top:-99999,positionClass:n.getPositionClass(e.position)},n}return(0,p.default)(t,e),(0,a.default)(t,[{key:"componentDidMount",value:function(){this.bindEscKeyListener(),this.bindDebouncedReposition(),(0,h.bindWindowListeners)()}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){if((0,h.isElement)(e.context)?this.domContext=e.context:this.domContext=l.default.findDOMNode(e.context),!e.isVisible)return null;this.setPosition()}},{key:"componentDidUpdate",value:function(e){var t=this,n=this.props.isVisible;return n!==e.isVisible&&(n?this.show():this.hide()),this.domContainer&&this.domContext&&n&&n!==e.isVisible?(this.debug("Update position after render completes"),void setTimeout(function(){return t.setPosition()},0)):null}},{key:"componentWillUnmount",value:function(){this.debug("unmounting .... "),this.unbindClickoutHandler(),this.unbindDebouncedReposition(),this.unbindEscKeyListener(),(0,h.unbindWindowListeners)(),_.delete(this.id),q("current popover instances: ",_.size)}},{key:"bindEscKeyListener",value:function(){return this.props.closeOnEsc?this.escEventHandlerAdded?null:(this.debug("adding escKey listener ..."),this.escEventHandlerAdded=!0,void document.addEventListener("keydown",this.onKeydown,!0)):null}},{key:"unbindEscKeyListener",value:function(){return this.props.closeOnEsc&&this.escEventHandlerAdded?(this.debug("unbinding `escKey` listener ..."),void document.removeEventListener("keydown",this.onKeydown,!0)):null}},{key:"onKeydown",value:function(e){if(27!==e.keyCode)return null;this.close(!0)}},{key:"bindClickoutHandler",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.domContainer;return e?this._clickoutHandlerReference?(this.debug("clickout event already bound"),null):(this.debug("binding `clickout` event"),void(this._clickoutHandlerReference=(0,z.default)(e,this.onClickout))):(this.debug("no element to bind clickout side "),null)}},{key:"unbindClickoutHandler",value:function(){this._clickoutHandlerReference&&(this.debug("unbinding `clickout` listener ..."),this._clickoutHandlerReference(),this._clickoutHandlerReference=null)}},{key:"onClickout",value:function(e){var t=this.domContext&&this.domContext.contains&&!this.domContext.contains(e.target);if(this.props.ignoreContext&&t){var n=l.default.findDOMNode(this.props.ignoreContext);t=t&&n&&n.contains&&!n.contains(e.target)}t&&this.close()}},{key:"bindDebouncedReposition",value:function(){window.addEventListener("scroll",this.onWindowChange,!0),window.addEventListener("resize",this.onWindowChange,!0)}},{key:"unbindDebouncedReposition",value:function(){this.willReposition&&(window.cancelAnimationFrame(this.willReposition),this.willReposition=null),window.removeEventListener("scroll",this.onWindowChange,!0),window.removeEventListener("resize",this.onWindowChange,!0),this.debug("unbinding `debounce reposition` ...")}},{key:"onWindowChange",value:function(){this.willReposition=window.requestAnimationFrame(this.setPosition)}},{key:"setDOMBehavior",value:function(e){if(!e)return this.unbindClickoutHandler(),null;this.debug("setting DOM behavior"),this.bindClickoutHandler(e),this.domContainer=e,(0,h.isElement)(this.props.context)?this.domContext=this.props.context:this.domContext=l.default.findDOMNode(this.props.context),this.domContainer.focus(),this.setPosition()}},{key:"getPositionClass",value:function(){return"is-"+(arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props.position).replace(/\s+/g,"-")}},{key:"computePosition",value:function(){if(!this.props.isVisible)return null;var e=this.domContainer,t=this.domContext,n=this.props.position;if(!e||!t)return this.debug("[WARN] no DOM elements to work"),null;var o=n;this.debug("position: %o",n),this.props.autoPosition&&(o=(0,h.suggested)(n,e,t),this.debug("suggested position: %o",o));var r=(0,O.default)({},(0,h.constrainLeft)((0,h.offset)(o,e,t),e),{positionClass:this.getPositionClass(o)});return this.debug("updating reposition: ",r),r}},{key:"debug",value:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];q.apply(void 0,["[%s] "+e,this.id].concat(n))}},{key:"setPopoverId",value:function(e){this.id=e||"pop__"+(0,f.default)(16),_.add(this.id),this.debug("creating ..."),q("current popover instances: ",_.size)}},{key:"setPosition",value:function(){var e=this.computePosition();if(!e)return null;this.willReposition=null,this.setState(e)}},{key:"getStylePosition",value:function(){var e=this.state;return{left:e.left,top:e.top}}},{key:"show",value:function(){var e=this;if(!this.props.showDelay)return this.setState({show:!0}),null;this.debug("showing in %o",this.props.showDelay+"ms"),this.clearShowTimer(),this._openDelayTimer=setTimeout(function(){e.setState({show:!0})},this.props.showDelay)}},{key:"hide",value:function(){this.unbindClickoutHandler(),this.setState({show:!1}),this.clearShowTimer()}},{key:"clearShowTimer",value:function(){if(!this._openDelayTimer)return null;clearTimeout(this._openDelayTimer),this._openDelayTimer=null}},{key:"close",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!this.props.isVisible)return this.debug("popover should be already closed"),null;this.domContext.focus(),this.props.onClose(e)}},{key:"render",value:function(){if(!this.state.show)return this.debug("is hidden. return no render"),null;if(!this.props.context)return this.debug("No `context` to tie. return no render"),null;var e=(0,d.default)("dops-popover",this.props.className,this.state.positionClass);return this.debug("rendering ..."),M.default.createElement(A.default,{className:this.props.rootClassName},M.default.createElement("div",{style:this.getStylePosition(),className:e,ref:this.setDOMBehavior},M.default.createElement("div",{className:"dops-popover__arrow"}),M.default.createElement("div",{className:"dops-popover__inner"},this.props.children)))}}]),t}(b.Component);W.propTypes={autoPosition:c.default.bool,className:c.default.string,closeOnEsc:c.default.bool,id:c.default.string,ignoreContext:c.default.shape({getDOMNode:c.default.function}),position:c.default.string,rootClassName:c.default.string,showDelay:c.default.number,onClose:c.default.func.isRequired,onShow:c.default.func},W.defaultProps={autoPosition:!0,className:"dops-popover",closeOnEsc:!0,isVisible:!1,position:"top",showDelay:0,onShow:function(){}},t.default=W,e.exports=t.default},function(e,t,n){var o=n(41);e.exports=function(e,t){if(!o(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e}},function(e,t,n){"use strict";var o=n(19),r=n(674),a=n(25).Buffer,i=new Array(16);function p(){r.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878}function s(e,t){return e<<t|e>>>32-t}function c(e,t,n,o,r,a,i){return s(e+(t&n|~t&o)+r+a|0,i)+t|0}function b(e,t,n,o,r,a,i){return s(e+(t&o|n&~o)+r+a|0,i)+t|0}function M(e,t,n,o,r,a,i){return s(e+(t^n^o)+r+a|0,i)+t|0}function l(e,t,n,o,r,a,i){return s(e+(n^(t|~o))+r+a|0,i)+t|0}o(p,r),p.prototype._update=function(){for(var e=i,t=0;t<16;++t)e[t]=this._block.readInt32LE(4*t);var n=this._a,o=this._b,r=this._c,a=this._d;n=c(n,o,r,a,e[0],3614090360,7),a=c(a,n,o,r,e[1],3905402710,12),r=c(r,a,n,o,e[2],606105819,17),o=c(o,r,a,n,e[3],3250441966,22),n=c(n,o,r,a,e[4],4118548399,7),a=c(a,n,o,r,e[5],1200080426,12),r=c(r,a,n,o,e[6],2821735955,17),o=c(o,r,a,n,e[7],4249261313,22),n=c(n,o,r,a,e[8],1770035416,7),a=c(a,n,o,r,e[9],2336552879,12),r=c(r,a,n,o,e[10],4294925233,17),o=c(o,r,a,n,e[11],2304563134,22),n=c(n,o,r,a,e[12],1804603682,7),a=c(a,n,o,r,e[13],4254626195,12),r=c(r,a,n,o,e[14],2792965006,17),n=b(n,o=c(o,r,a,n,e[15],1236535329,22),r,a,e[1],4129170786,5),a=b(a,n,o,r,e[6],3225465664,9),r=b(r,a,n,o,e[11],643717713,14),o=b(o,r,a,n,e[0],3921069994,20),n=b(n,o,r,a,e[5],3593408605,5),a=b(a,n,o,r,e[10],38016083,9),r=b(r,a,n,o,e[15],3634488961,14),o=b(o,r,a,n,e[4],3889429448,20),n=b(n,o,r,a,e[9],568446438,5),a=b(a,n,o,r,e[14],3275163606,9),r=b(r,a,n,o,e[3],4107603335,14),o=b(o,r,a,n,e[8],1163531501,20),n=b(n,o,r,a,e[13],2850285829,5),a=b(a,n,o,r,e[2],4243563512,9),r=b(r,a,n,o,e[7],1735328473,14),n=M(n,o=b(o,r,a,n,e[12],2368359562,20),r,a,e[5],4294588738,4),a=M(a,n,o,r,e[8],2272392833,11),r=M(r,a,n,o,e[11],1839030562,16),o=M(o,r,a,n,e[14],4259657740,23),n=M(n,o,r,a,e[1],2763975236,4),a=M(a,n,o,r,e[4],1272893353,11),r=M(r,a,n,o,e[7],4139469664,16),o=M(o,r,a,n,e[10],3200236656,23),n=M(n,o,r,a,e[13],681279174,4),a=M(a,n,o,r,e[0],3936430074,11),r=M(r,a,n,o,e[3],3572445317,16),o=M(o,r,a,n,e[6],76029189,23),n=M(n,o,r,a,e[9],3654602809,4),a=M(a,n,o,r,e[12],3873151461,11),r=M(r,a,n,o,e[15],530742520,16),n=l(n,o=M(o,r,a,n,e[2],3299628645,23),r,a,e[0],4096336452,6),a=l(a,n,o,r,e[7],1126891415,10),r=l(r,a,n,o,e[14],2878612391,15),o=l(o,r,a,n,e[5],4237533241,21),n=l(n,o,r,a,e[12],1700485571,6),a=l(a,n,o,r,e[3],2399980690,10),r=l(r,a,n,o,e[10],4293915773,15),o=l(o,r,a,n,e[1],2240044497,21),n=l(n,o,r,a,e[8],1873313359,6),a=l(a,n,o,r,e[15],4264355552,10),r=l(r,a,n,o,e[6],2734768916,15),o=l(o,r,a,n,e[13],1309151649,21),n=l(n,o,r,a,e[4],4149444226,6),a=l(a,n,o,r,e[11],3174756917,10),r=l(r,a,n,o,e[2],718787259,15),o=l(o,r,a,n,e[9],3951481745,21),this._a=this._a+n|0,this._b=this._b+o|0,this._c=this._c+r|0,this._d=this._d+a|0},p.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=a.allocUnsafe(16);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e},e.exports=p},function(e,t,n){e.exports=r;var o=n(123).EventEmitter;function r(){o.call(this)}n(19)(r,o),r.Readable=n(639),r.Writable=n(791),r.Duplex=n(792),r.Transform=n(793),r.PassThrough=n(794),r.Stream=r,r.prototype.pipe=function(e,t){var n=this;function r(t){e.writable&&!1===e.write(t)&&n.pause&&n.pause()}function a(){n.readable&&n.resume&&n.resume()}n.on("data",r),e.on("drain",a),e._isStdio||t&&!1===t.end||(n.on("end",p),n.on("close",s));var i=!1;function p(){i||(i=!0,e.end())}function s(){i||(i=!0,"function"==typeof e.destroy&&e.destroy())}function c(e){if(b(),0===o.listenerCount(this,"error"))throw e}function b(){n.removeListener("data",r),e.removeListener("drain",a),n.removeListener("end",p),n.removeListener("close",s),n.removeListener("error",c),e.removeListener("error",c),n.removeListener("end",b),n.removeListener("close",b),e.removeListener("close",b)}return n.on("error",c),e.on("error",c),n.on("end",b),n.on("close",b),e.on("close",b),e.emit("pipe",n),e}},function(e,t,n){(t=e.exports=n(675)).Stream=t,t.Readable=t,t.Writable=n(640),t.Duplex=n(166),t.Transform=n(678),t.PassThrough=n(790)},function(e,t,n){"use strict";(function(t,o,r){var a=n(420);function i(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,n){var o=e.entry;for(e.entry=null;o;){var r=o.callback;t.pendingcb--,r(void 0),o=o.next}t.corkedRequestsFree?t.corkedRequestsFree.next=e:t.corkedRequestsFree=e}(t,e)}}e.exports=A;var p,s=!t.browser&&["v0.10","v0.9."].indexOf(t.version.slice(0,5))>-1?o:a.nextTick;A.WritableState=O;var c=n(388);c.inherits=n(19);var b,M={deprecate:n(789)},l=n(676),u=n(25).Buffer,d=r.Uint8Array||function(){},z=n(677);function f(){}function O(e,t){p=p||n(166),e=e||{};var o=t instanceof p;this.objectMode=!!e.objectMode,o&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var r=e.highWaterMark,c=e.writableHighWaterMark,b=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:o&&(c||0===c)?c:b,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var M=!1===e.decodeStrings;this.decodeStrings=!M,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,o=n.sync,r=n.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,o,r){--t.pendingcb,n?(a.nextTick(r,o),a.nextTick(g,e,t),e._writableState.errorEmitted=!0,e.emit("error",o)):(r(o),e._writableState.errorEmitted=!0,e.emit("error",o),g(e,t))}(e,n,o,t,r);else{var i=_(n);i||n.corked||n.bufferProcessing||!n.bufferedRequest||q(e,n),o?s(m,e,n,i,r):m(e,n,i,r)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new i(this)}function A(e){if(p=p||n(166),!(b.call(A,this)||this instanceof p))return new A(e);this._writableState=new O(e,this),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),l.call(this)}function h(e,t,n,o,r,a,i){t.writelen=o,t.writecb=i,t.writing=!0,t.sync=!0,n?e._writev(r,t.onwrite):e._write(r,a,t.onwrite),t.sync=!1}function m(e,t,n,o){n||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,o(),g(e,t)}function q(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){var o=t.bufferedRequestCount,r=new Array(o),a=t.corkedRequestsFree;a.entry=n;for(var p=0,s=!0;n;)r[p]=n,n.isBuf||(s=!1),n=n.next,p+=1;r.allBuffers=s,h(e,t,!0,t.length,r,"",a.finish),t.pendingcb++,t.lastBufferedRequest=null,a.next?(t.corkedRequestsFree=a.next,a.next=null):t.corkedRequestsFree=new i(t),t.bufferedRequestCount=0}else{for(;n;){var c=n.chunk,b=n.encoding,M=n.callback;if(h(e,t,!1,t.objectMode?1:c.length,c,b,M),n=n.next,t.bufferedRequestCount--,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequest=n,t.bufferProcessing=!1}function _(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function W(e,t){e._final(function(n){t.pendingcb--,n&&e.emit("error",n),t.prefinished=!0,e.emit("prefinish"),g(e,t)})}function g(e,t){var n=_(t);return n&&(function(e,t){t.prefinished||t.finalCalled||("function"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,a.nextTick(W,e,t)):(t.prefinished=!0,e.emit("prefinish")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"))),n}c.inherits(A,l),O.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(O.prototype,"buffer",{get:M.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(b=Function.prototype[Symbol.hasInstance],Object.defineProperty(A,Symbol.hasInstance,{value:function(e){return!!b.call(this,e)||this===A&&e&&e._writableState instanceof O}})):b=function(e){return e instanceof this},A.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},A.prototype.write=function(e,t,n){var o,r=this._writableState,i=!1,p=!r.objectMode&&(o=e,u.isBuffer(o)||o instanceof d);return p&&!u.isBuffer(e)&&(e=function(e){return u.from(e)}(e)),"function"==typeof t&&(n=t,t=null),p?t="buffer":t||(t=r.defaultEncoding),"function"!=typeof n&&(n=f),r.ended?function(e,t){var n=new Error("write after end");e.emit("error",n),a.nextTick(t,n)}(this,n):(p||function(e,t,n,o){var r=!0,i=!1;return null===n?i=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||t.objectMode||(i=new TypeError("Invalid non-string/buffer chunk")),i&&(e.emit("error",i),a.nextTick(o,i),r=!1),r}(this,r,e,n))&&(r.pendingcb++,i=function(e,t,n,o,r,a){if(!n){var i=function(e,t,n){return e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=u.from(t,n)),t}(t,o,r);o!==i&&(n=!0,r="buffer",o=i)}var p=t.objectMode?1:o.length;t.length+=p;var s=t.length<t.highWaterMark;if(s||(t.needDrain=!0),t.writing||t.corked){var c=t.lastBufferedRequest;t.lastBufferedRequest={chunk:o,encoding:r,isBuf:n,callback:a,next:null},c?c.next=t.lastBufferedRequest:t.bufferedRequest=t.lastBufferedRequest,t.bufferedRequestCount+=1}else h(e,t,!1,p,o,r,a);return s}(this,r,p,e,t,n)),i},A.prototype.cork=function(){this._writableState.corked++},A.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,e.writing||e.corked||e.finished||e.bufferProcessing||!e.bufferedRequest||q(this,e))},A.prototype.setDefaultEncoding=function(e){if("string"==typeof e&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(A.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),A.prototype._write=function(e,t,n){n(new Error("_write() is not implemented"))},A.prototype._writev=null,A.prototype.end=function(e,t,n){var o=this._writableState;"function"==typeof e?(n=e,e=null,t=null):"function"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),o.corked&&(o.corked=1,this.uncork()),o.ending||o.finished||function(e,t,n){t.ending=!0,g(e,t),n&&(t.finished?a.nextTick(n):e.once("finish",n)),t.ended=!0,e.writable=!1}(this,o,n)},Object.defineProperty(A.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),A.prototype.destroy=z.destroy,A.prototype._undestroy=z.undestroy,A.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,n(71),n(787).setImmediate,n(44))},function(e,t,n){"use strict";var o=n(25).Buffer,r=o.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function a(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(o.isEncoding===r||!r(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=s,this.end=c,t=4;break;case"utf8":this.fillLast=p,t=4;break;case"base64":this.text=b,this.end=M,t=3;break;default:return this.write=l,void(this.end=u)}this.lastNeed=0,this.lastTotal=0,this.lastChar=o.allocUnsafe(t)}function i(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function p(e){var t=this.lastTotal-this.lastNeed,n=function(e,t,n){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function s(e,t){if((e.length-t)%2==0){var n=e.toString("utf16le",t);if(n){var o=n.charCodeAt(n.length-1);if(o>=55296&&o<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function c(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,n)}return t}function b(e,t){var n=(e.length-t)%3;return 0===n?e.toString("base64",t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-n))}function M(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function l(e){return e.toString(this.encoding)}function u(e){return e&&e.length?this.write(e):""}t.StringDecoder=a,a.prototype.write=function(e){if(0===e.length)return"";var t,n;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n<e.length?t?t+this.text(e,n):this.text(e,n):t||""},a.prototype.end=function(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+"�":t},a.prototype.text=function(e,t){var n=function(e,t,n){var o=t.length-1;if(o<n)return 0;var r=i(t[o]);return r>=0?(r>0&&(e.lastNeed=r-1),r):--o<n||-2===r?0:(r=i(t[o]))>=0?(r>0&&(e.lastNeed=r-2),r):--o<n||-2===r?0:(r=i(t[o]))>=0?(r>0&&(2===r?r=0:e.lastNeed=r-3),r):0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=n;var o=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,o),e.toString("utf8",t,o)},a.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},function(e,t,n){"use strict";var o=n(57).Buffer,r=n(19),a=n(674),i=new Array(16),p=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],s=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],c=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],b=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],M=[0,1518500249,1859775393,2400959708,2840853838],l=[1352829926,1548603684,1836072691,2053994217,0];function u(){a.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}function d(e,t){return e<<t|e>>>32-t}function z(e,t,n,o,r,a,i,p){return d(e+(t^n^o)+a+i|0,p)+r|0}function f(e,t,n,o,r,a,i,p){return d(e+(t&n|~t&o)+a+i|0,p)+r|0}function O(e,t,n,o,r,a,i,p){return d(e+((t|~n)^o)+a+i|0,p)+r|0}function A(e,t,n,o,r,a,i,p){return d(e+(t&o|n&~o)+a+i|0,p)+r|0}function h(e,t,n,o,r,a,i,p){return d(e+(t^(n|~o))+a+i|0,p)+r|0}r(u,a),u.prototype._update=function(){for(var e=i,t=0;t<16;++t)e[t]=this._block.readInt32LE(4*t);for(var n=0|this._a,o=0|this._b,r=0|this._c,a=0|this._d,u=0|this._e,m=0|this._a,q=0|this._b,_=0|this._c,W=0|this._d,g=0|this._e,v=0;v<80;v+=1){var y,L;v<16?(y=z(n,o,r,a,u,e[p[v]],M[0],c[v]),L=h(m,q,_,W,g,e[s[v]],l[0],b[v])):v<32?(y=f(n,o,r,a,u,e[p[v]],M[1],c[v]),L=A(m,q,_,W,g,e[s[v]],l[1],b[v])):v<48?(y=O(n,o,r,a,u,e[p[v]],M[2],c[v]),L=O(m,q,_,W,g,e[s[v]],l[2],b[v])):v<64?(y=A(n,o,r,a,u,e[p[v]],M[3],c[v]),L=f(m,q,_,W,g,e[s[v]],l[3],b[v])):(y=h(n,o,r,a,u,e[p[v]],M[4],c[v]),L=z(m,q,_,W,g,e[s[v]],l[4],b[v])),n=u,u=a,a=d(r,10),r=o,o=y,m=g,g=W,W=d(_,10),_=q,q=L}var R=this._b+r+W|0;this._b=this._c+a+g|0,this._c=this._d+u+m|0,this._d=this._e+n+q|0,this._e=this._a+o+_|0,this._a=R},u.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=o.alloc?o.alloc(20):new o(20);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e.writeInt32LE(this._e,16),e},e.exports=u},function(e,t,n){(t=e.exports=function(e){e=e.toLowerCase();var n=t[e];if(!n)throw new Error(e+" is not supported (we accept pull requests)");return new n}).sha=n(795),t.sha1=n(796),t.sha224=n(797),t.sha256=n(679),t.sha384=n(798),t.sha512=n(680)},function(e,t,n){"use strict";t.utils=n(804),t.Cipher=n(805),t.DES=n(806),t.CBC=n(807),t.EDE=n(808)},function(e,t,n){var o=n(809),r=n(817),a=n(690);t.createCipher=t.Cipher=o.createCipher,t.createCipheriv=t.Cipheriv=o.createCipheriv,t.createDecipher=t.Decipher=r.createDecipher,t.createDecipheriv=t.Decipheriv=r.createDecipheriv,t.listCiphers=t.getCiphers=function(){return Object.keys(a)}},function(e,t,n){var o={ECB:n(810),CBC:n(811),CFB:n(812),CFB8:n(813),CFB1:n(814),OFB:n(815),CTR:n(688),GCM:n(688)},r=n(690);for(var a in r)r[a].module=o[r[a].mode];e.exports=r},function(e,t,n){(function(t){var o=n(48),r=n(184);function a(e,n){var r=function(e){var t=i(e);return{blinder:t.toRed(o.mont(e.modulus)).redPow(new o(e.publicExponent)).fromRed(),unblinder:t.invm(e.modulus)}}(n),a=n.modulus.byteLength(),p=(o.mont(n.modulus),new o(e).mul(r.blinder).umod(n.modulus)),s=p.toRed(o.mont(n.prime1)),c=p.toRed(o.mont(n.prime2)),b=n.coefficient,M=n.prime1,l=n.prime2,u=s.redPow(n.exponent1),d=c.redPow(n.exponent2);u=u.fromRed(),d=d.fromRed();var z=u.isub(d).imul(b).umod(M);return z.imul(l),d.iadd(z),new t(d.imul(r.unblinder).umod(n.modulus).toArray(!1,a))}function i(e){for(var t=e.modulus.byteLength(),n=new o(r(t));n.cmp(e.modulus)>=0||!n.umod(e.prime1)||!n.umod(e.prime2);)n=new o(r(t));return n}e.exports=a,a.getr=i}).call(this,n(57).Buffer)},function(e,t,n){var o=t;o.utils=n(72),o.common=n(163),o.sha=n(833),o.ripemd=n(836),o.hmac=n(837),o.sha1=o.sha.sha1,o.sha256=o.sha.sha256,o.sha224=o.sha.sha224,o.sha384=o.sha.sha384,o.sha512=o.sha.sha512,o.ripemd160=o.ripemd.ripemd160},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.fetchPluginUpdates=t.checkAkismetKey=t.fetchAkismetData=t.fetchVaultPressData=t.fetchProtectCount=t.fetchStatsData=t.statsSwitchTab=void 0;var o,r=(o=n(37))&&o.__esModule?o:{default:o},a=n(14);t.statsSwitchTab=function(e){return function(t){t({type:a.STATS_SWITCH_TAB,activeStatsTab:e})}},t.fetchStatsData=function(e){return function(t){return t({type:a.STATS_DATA_FETCH}),r.default.fetchStatsData(e).then(function(e){t({type:a.STATS_DATA_FETCH_SUCCESS,statsData:e})}).catch(function(e){t({type:a.STATS_DATA_FETCH_FAIL,error:e})})}},t.fetchProtectCount=function(){return function(e){return e({type:a.DASHBOARD_PROTECT_COUNT_FETCH}),r.default.getProtectCount().then(function(t){e({type:a.DASHBOARD_PROTECT_COUNT_FETCH_SUCCESS,protectCount:t})}).catch(function(t){e({type:a.DASHBOARD_PROTECT_COUNT_FETCH_FAIL,error:t})})}},t.fetchVaultPressData=function(){return function(e){return e({type:a.VAULTPRESS_SITE_DATA_FETCH}),r.default.getVaultPressData().then(function(t){e({type:a.VAULTPRESS_SITE_DATA_FETCH_SUCCESS,vaultPressData:t})}).catch(function(t){e({type:a.VAULTPRESS_SITE_DATA_FETCH_FAIL,error:t})})}},t.fetchAkismetData=function(){return function(e){return e({type:a.AKISMET_DATA_FETCH}),r.default.getAkismetData().then(function(t){e({type:a.AKISMET_DATA_FETCH_SUCCESS,akismetData:t})}).catch(function(t){e({type:a.AKISMET_DATA_FETCH_FAIL,error:t})})}},t.checkAkismetKey=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return function(t){return t({type:a.AKISMET_KEY_CHECK_FETCH}),(""===e?r.default.checkAkismetKey().then(function(e){t({type:a.AKISMET_KEY_CHECK_FETCH_SUCCESS,akismet:e})}):r.default.checkAkismetKeyTyped(e).then(function(e){t({type:a.AKISMET_KEY_CHECK_FETCH_SUCCESS,akismet:e})})).catch(function(e){t({type:a.AKISMET_KEY_CHECK_FETCH_FAIL,error:e})})}},t.fetchPluginUpdates=function(){return function(e){return e({type:a.PLUGIN_UPDATES_FETCH}),r.default.getPluginUpdates().then(function(t){e({type:a.PLUGIN_UPDATES_FETCH_SUCCESS,pluginUpdates:t})}).catch(function(t){e({type:a.PLUGIN_UPDATES_FETCH_FAIL,error:t})})}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=u(n(3)),r=u(n(4)),a=u(n(7)),i=u(n(5)),p=u(n(6)),s=n(2),c=n(9),b=n(15),M=n(52),l=n(24);function u(e){return e&&e.__esModule?e:{default:e}}var d=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"UNSAFE_componentWillMount",value:function(){!this.props.fetchingVaultPressData&&this.props.isModuleActivated("vaultpress")&&this.props.fetchVaultPressData()}},{key:"render",value:function(){return null}}]),t}(s.Component);d.defaultProps={fetchVaultPressData:function(){}},t.default=(0,c.connect)(function(e){return{fetchVaultPressData:(0,M.fetchVaultPressData)(),fetchingVaultPressData:(0,M.isFetchingVaultPressData)(e),isModuleActivated:function(t){return(0,l.isModuleActivated)(e,t)}}},function(e){return(0,b.bindActionCreators)({fetchVaultPressData:M.fetchVaultPressData},e)})(d),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=h(n(3)),r=h(n(4)),a=h(n(7)),i=h(n(5)),p=h(n(6)),s=h(n(1)),c=n(2),b=h(c),M=h(n(12)),l=h(n(54)),u=h(n(881)),d=n(38),z=h(n(33)),f=h(n(17)),O=h(n(55)),A=h(n(885));function h(e){return e&&e.__esModule?e:{default:e}}n(887);var m=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.handleClick=function(){a.props.onClick()},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"getHref",value:function(){var e=this.props,t=e.href,n=e.feature,o=e.siteSlug;return!t&&o?n?"/plans/"+o+"?feature="+n:"/plans/"+o:t}},{key:"getIcon",value:function(){var e=this.props,t=e.icon,n=e.plan;return n&&!t?b.default.createElement("div",{className:"dops-banner__icon-plan"},b.default.createElement(A.default,{plan:n})):b.default.createElement("div",{className:"dops-banner__icons"},b.default.createElement("div",{className:"dops-banner__icon"},b.default.createElement(O.default,{icon:t||"info-outline",size:18})),b.default.createElement("div",{className:"dops-banner__icon-circle"},b.default.createElement(O.default,{icon:t||"info-outline",size:18})))}},{key:"getContent",value:function(){var e=this.props,t=e.callToAction,n=e.description,o=e.list,r=e.title;return b.default.createElement("div",{className:"dops-banner__content"},b.default.createElement("div",{className:"dops-banner__info"},b.default.createElement("div",{className:"dops-banner__title"},r),n&&b.default.createElement("div",{className:"dops-banner__description"},n),(0,u.default)(o)>0&&b.default.createElement("ul",{className:"dops-banner__list"},o.map(function(e,t){return b.default.createElement("li",{key:t},b.default.createElement(O.default,{icon:"checkmark",size:18}),e)}))),t&&b.default.createElement("div",{className:"dops-banner__action"},t&&b.default.createElement(z.default,{compact:!0,href:this.getHref(),onClick:this.handleClick,primary:!0},t)))}},{key:"render",value:function(){var e=this.props,t=e.callToAction,n=e.className,o=e.plan,r=(0,d.getPlanClass)(o),a=(0,M.default)("dops-banner",n,{"has-call-to-action":t},{"is-upgrade-personal":"is-personal-plan"===r},{"is-upgrade-premium":"is-premium-plan"===r},{"is-upgrade-business":"is-business-plan"===r});return b.default.createElement(f.default,{className:a,href:t?null:this.getHref(),onClick:t?l.default:this.handleClick},this.getIcon(),this.getContent())}}]),t}(c.Component);m.propTypes={callToAction:s.default.string,className:s.default.string,description:s.default.node,event:s.default.string,feature:s.default.string,href:s.default.string,icon:s.default.string,list:s.default.arrayOf(s.default.string),onClick:s.default.func,plan:s.default.string,siteSlug:s.default.string,title:s.default.string.isRequired},m.defaultProps={onClick:l.default},t.default=m,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Footer=void 0;var o=A(n(3)),r=A(n(4)),a=A(n(7)),i=A(n(5)),p=A(n(6)),s=A(n(2)),c=n(9),b=A(n(12)),M=n(8),l=A(n(13)),u=n(21),d=n(20),z=n(393),f=A(n(654)),O=A(n(105));function A(e){return e&&e.__esModule?e:{default:e}}var h=function e(){var t=document.getElementById("jp-navigation").offsetTop;window.scrollTo(0,window.scrollY-t/1.5),window.scrollY>t&&window.requestAnimationFrame(e)},m=t.Footer=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.resetOnClick=function(){window.confirm((0,M.translate)("This will reset all Jetpack options, are you sure?"))&&a.props.resetOptions()},a.trackVersionClick=function(){l.default.tracks.recordJetpackClick({target:"footer_link",link:"version"})},a.trackTermsClick=function(){l.default.tracks.recordJetpackClick({target:"footer_link",link:"terms"})},a.trackPrivacyClick=function(){window.requestAnimationFrame(h),l.default.tracks.recordJetpackClick({target:"footer_link",link:"privacy"})},a.trackDebugClick=function(){l.default.tracks.recordJetpackClick({target:"footer_link",link:"debug"})},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){var e=this,t=(0,b.default)(this.props.className,"jp-footer"),n=this.props.currentVersion;return s.default.createElement("div",{className:t},s.default.createElement("div",{className:"jp-footer__a8c-attr-container"},s.default.createElement("a",{href:"https://automattic.com",target:"_blank",rel:"noopener noreferrer"},s.default.createElement("svg",{role:"img",className:"jp-footer__a8c-attr",x:"0",y:"0",viewBox:"0 0 935 38.2",enableBackground:"new 0 0 935 38.2","aria-labelledby":"a8c-svg-title"},s.default.createElement("title",{id:"a8c-svg-title"},(0,M.translate)("An Automattic Airline")),s.default.createElement("path",{d:"M317.1 38.2c-12.6 0-20.7-9.1-20.7-18.5v-1.2c0-9.6 8.2-18.5 20.7-18.5 12.6 0 20.8 8.9 20.8 18.5v1.2C337.9 29.1 329.7 38.2 317.1 38.2zM331.2 18.6c0-6.9-5-13-14.1-13s-14 6.1-14 13v0.9c0 6.9 5 13.1 14 13.1s14.1-6.2 14.1-13.1V18.6zM175 36.8l-4.7-8.8h-20.9l-4.5 8.8h-7L157 1.3h5.5L182 36.8H175zM159.7 8.2L152 23.1h15.7L159.7 8.2zM212.4 38.2c-12.7 0-18.7-6.9-18.7-16.2V1.3h6.6v20.9c0 6.6 4.3 10.5 12.5 10.5 8.4 0 11.9-3.9 11.9-10.5V1.3h6.7V22C231.4 30.8 225.8 38.2 212.4 38.2zM268.6 6.8v30h-6.7v-30h-15.5V1.3h37.7v5.5H268.6zM397.3 36.8V8.7l-1.8 3.1 -14.9 25h-3.3l-14.7-25 -1.8-3.1v28.1h-6.5V1.3h9.2l14 24.4 1.7 3 1.7-3 13.9-24.4h9.1v35.5H397.3zM454.4 36.8l-4.7-8.8h-20.9l-4.5 8.8h-7l19.2-35.5h5.5l19.5 35.5H454.4zM439.1 8.2l-7.7 14.9h15.7L439.1 8.2zM488.4 6.8v30h-6.7v-30h-15.5V1.3h37.7v5.5H488.4zM537.3 6.8v30h-6.7v-30h-15.5V1.3h37.7v5.5H537.3zM569.3 36.8V4.6c2.7 0 3.7-1.4 3.7-3.4h2.8v35.5L569.3 36.8 569.3 36.8zM628 11.3c-3.2-2.9-7.9-5.7-14.2-5.7 -9.5 0-14.8 6.5-14.8 13.3v0.7c0 6.7 5.4 13 15.3 13 5.9 0 10.8-2.8 13.9-5.7l4 4.2c-3.9 3.8-10.5 7.1-18.3 7.1 -13.4 0-21.6-8.7-21.6-18.3v-1.2c0-9.6 8.9-18.7 21.9-18.7 7.5 0 14.3 3.1 18 7.1L628 11.3zM321.5 12.4c1.2 0.8 1.5 2.4 0.8 3.6l-6.1 9.4c-0.8 1.2-2.4 1.6-3.6 0.8l0 0c-1.2-0.8-1.5-2.4-0.8-3.6l6.1-9.4C318.7 11.9 320.3 11.6 321.5 12.4L321.5 12.4z"}),s.default.createElement("path",{d:"M37.5 36.7l-4.7-8.9H11.7l-4.6 8.9H0L19.4 0.8H25l19.7 35.9H37.5zM22 7.8l-7.8 15.1h15.9L22 7.8zM82.8 36.7l-23.3-24 -2.3-2.5v26.6h-6.7v-36H57l22.6 24 2.3 2.6V0.8h6.7v35.9H82.8z"}),s.default.createElement("path",{d:"M719.9 37l-4.8-8.9H694l-4.6 8.9h-7.1l19.5-36h5.6l19.8 36H719.9zM704.4 8l-7.8 15.1h15.9L704.4 8zM733 37V1h6.8v36H733zM781 37c-1.8 0-2.6-2.5-2.9-5.8l-0.2-3.7c-0.2-3.6-1.7-5.1-8.4-5.1h-12.8V37H750V1h19.6c10.8 0 15.7 4.3 15.7 9.9 0 3.9-2 7.7-9 9 7 0.5 8.5 3.7 8.6 7.9l0.1 3c0.1 2.5 0.5 4.3 2.2 6.1V37H781zM778.5 11.8c0-2.6-2.1-5.1-7.9-5.1h-13.8v10.8h14.4c5 0 7.3-2.4 7.3-5.2V11.8zM794.8 37V1h6.8v30.4h28.2V37H794.8zM836.7 37V1h6.8v36H836.7zM886.2 37l-23.4-24.1 -2.3-2.5V37h-6.8V1h6.5l22.7 24.1 2.3 2.6V1h6.8v36H886.2zM902.3 37V1H935v5.6h-26v9.2h20v5.5h-20v10.1h26V37H902.3z"})))),s.default.createElement("ul",{className:"jp-footer__links"},s.default.createElement("li",{className:"jp-footer__link-item"},s.default.createElement("a",{onClick:this.trackVersionClick,href:"https://jetpack.com",target:"_blank",rel:"noopener noreferrer",className:"jp-footer__link",title:(0,M.translate)("Jetpack version")},n?(0,M.translate)("Jetpack version %(version)s",{args:{version:n}}):"Jetpack")),s.default.createElement("li",{className:"jp-footer__link-item"},s.default.createElement("a",{onClick:this.trackTermsClick,href:"https://wordpress.com/tos/",target:"_blank",rel:"noopener noreferrer",title:(0,M.translate)("WordPress.com Terms of Service"),className:"jp-footer__link"},(0,M.translate)("Terms",{context:"Shorthand for Terms of Service."}))),s.default.createElement("li",{className:"jp-footer__link-item"},s.default.createElement("a",{onClick:this.trackPrivacyClick,href:"#/privacy",rel:"noopener noreferrer",title:(0,M.translate)("Automattic's Privacy Policy"),className:"jp-footer__link"},(0,M.translate)("Privacy",{context:"Shorthand for Privacy Policy."}))),function(){if(e.props.userCanManageOptions)return s.default.createElement("li",{className:"jp-footer__link-item"},s.default.createElement("a",{onClick:e.trackDebugClick,href:e.props.siteAdminUrl+"admin.php?page=jetpack-debugger",title:(0,M.translate)("Test your site’s compatibility with Jetpack."),className:"jp-footer__link"},(0,M.translate)("Debug",{context:"Navigation item. Noun. Links to a debugger tool for Jetpack."})))}(),e.props.isDevVersion&&e.props.userCanManageOptions?s.default.createElement("li",{className:"jp-footer__link-item"},s.default.createElement("a",{role:"button",tabIndex:"0",onKeyDown:(0,O.default)(e.resetOnClick),onClick:e.resetOnClick,className:"jp-footer__link"},(0,M.translate)("Reset Options (dev only)",{context:"Navigation item."}))):"",e.props.isDevVersion?s.default.createElement("li",{className:"jp-footer__link-item"},s.default.createElement("a",{role:"button",tabIndex:"0",onKeyDown:(0,O.default)(e.props.enableDevCard),onClick:e.props.enableDevCard,className:"jp-footer__link"},(0,M.translate)("Dev Tools",{context:"Navigation item."}))):"",function(){if(e.props.isDevVersion&&e.props.displayDevCard)return s.default.createElement(f.default,null)}()))}}]),t}(s.default.Component);m.displayName="Footer",t.default=(0,c.connect)(function(e){return{currentVersion:(0,u.getCurrentVersion)(e),userCanManageOptions:(0,u.userCanManageOptions)(e),isDevVersion:(0,u.isDevVersion)(e),siteAdminUrl:(0,u.getSiteAdminUrl)(e),isInIdentityCrisis:(0,d.isInIdentityCrisis)(e),displayDevCard:(0,z.canDisplayDevCard)(e)}},function(e){return{resetOptions:function(){return e((0,z.resetOptions)("options"))},enableDevCard:function(){return e((0,z.enableDevCard)())}}})(m)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.switchRewindState=t.switchThreats=t.switchUserPermission=t.switchPlanPreview=t.disableDevCard=t.enableDevCard=t.resetOptions=void 0;var o,r=n(76),a=n(8),i=n(14),p=(o=n(37))&&o.__esModule?o:{default:o};t.resetOptions=function(e){return function(t){return t({type:i.RESET_OPTIONS}),t((0,r.createNotice)("is-info",(0,a.translate)("Resetting Jetpack options…"),{id:"reset-options"})),p.default.resetOptions(e).then(function(){t({type:i.RESET_OPTIONS_SUCCESS}),t((0,r.removeNotice)("reset-options")),t((0,r.createNotice)("is-success",(0,a.translate)("Options reset."),{id:"reset-options",duration:2e3}))}).catch(function(e){t({type:i.RESET_OPTIONS_FAIL,error:e}),t((0,r.removeNotice)("reset-options")),t((0,r.createNotice)("is-error",(0,a.translate)("Options failed to reset."),{id:"reset-options"}))})}},t.enableDevCard=function(){return function(e){e({type:i.DEV_CARD_DISPLAY})}},t.disableDevCard=function(){return function(e){e({type:i.DEV_CARD_HIDE})}},t.switchPlanPreview=function(e){return function(t){t({type:i.JETPACK_SITE_DATA_FETCH_RECEIVE,siteData:{plan:{product_slug:e}}})}};var s={currentUser:{isMaster:!0,permissions:{admin_page:!0,connect:!0,disconnect:!0,edit_posts:!0,manage_modules:!0,manage_options:!0,manage_plugins:!0}}},c={currentUser:{isMaster:!1,permissions:{admin_page:!0,connect:!0,disconnect:!0,edit_posts:!0,manage_modules:!0,manage_options:!0,manage_plugins:!0}}},b={currentUser:{isMaster:!1,permissions:{admin_page:!0,connect:!1,disconnect:!1,edit_posts:!0,manage_modules:!1,manage_options:!1,manage_plugins:!1}}},M={currentUser:{isMaster:!1,permissions:{admin_page:!0,connect:!1,disconnect:!1,edit_posts:!1,manage_modules:!1,manage_options:!1,manage_plugins:!1}}},l={currentUser:{permissions:{view_stats:!0}}},u={currentUser:{permissions:{view_stats:!1}}},d={currentUser:{isConnected:!0}},z={currentUser:{isConnected:!1}};t.switchUserPermission=function(e){var t={};return function(n){switch(e){case"admin_master":t=s;break;case"admin_secondary":t=c;break;case"editor":case"contributor":case"author":t=b;break;case"subscriber":t=M;break;case"view_stats":t=l;break;case"hide_stats":t=u;break;case"is_linked":t=d;break;case"is_unlinked":t=z}n({type:i.MOCK_SWITCH_USER_PERMISSIONS,initialState:t})}},t.switchThreats=function(e){return function(t){t({type:i.MOCK_SWITCH_THREATS,mockCount:e})}},t.switchRewindState=function(e){return function(t){t({type:i.MOCK_SWITCH_REWIND_STATE,rewindState:{state:e}})}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DevCard=void 0;var o=q(n(3)),r=q(n(4)),a=q(n(7)),i=q(n(5)),p=q(n(6)),s=q(n(2)),c=n(9),b=q(n(12)),M=n(38),l=q(n(22)),u=n(21),d=n(42),z=n(20),f=n(393),O=n(52),A=q(n(17)),h=q(n(105)),m=n(394);function q(e){return e&&e.__esModule?e:{default:e}}var _=t.DevCard=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var c=arguments.length,b=Array(c),M=0;M<c;M++)b[M]=arguments[M];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(b))),a.onPlanChange=function(e){a.props.switchPlanPreview(e.target.value)},a.onPermissionsChange=function(e){a.props.switchUserPermissions(e.target.value)},a.onThreatsChange=function(e){a.props.switchThreats(e.target.value)},a.onRewindStatusChange=function(e){a.props.switchRewindState(e.target.value)},a.maybeShowStatsToggle=function(){if(!a.props.isAdmin)return s.default.createElement("div",null,s.default.createElement("hr",null),s.default.createElement("ul",null,s.default.createElement("li",null,s.default.createElement("label",{htmlFor:"view_stats"},s.default.createElement("input",{type:"radio",id:"view_stats",value:"view_stats",name:"view_stats",checked:a.props.canViewStats,onChange:a.onPermissionsChange}),"Can view stats")),s.default.createElement("li",null,s.default.createElement("label",{htmlFor:"hide_stats"},s.default.createElement("input",{type:"radio",id:"hide_stats",value:"hide_stats",name:"hide_stats",checked:!a.props.canViewStats,onChange:a.onPermissionsChange}),"Can not view stats"))))},a.maybeShowIsLinkedToggle=function(){if(!a.props.isMaster)return s.default.createElement("div",null,s.default.createElement("hr",null),s.default.createElement("ul",null,s.default.createElement("li",null,s.default.createElement("label",{htmlFor:"is_linked"},s.default.createElement("input",{type:"radio",id:"is_linked",value:"is_linked",name:"is_linked",checked:a.props.isUserLinked,onChange:a.onPermissionsChange}),"Linked")),s.default.createElement("li",null,s.default.createElement("label",{htmlFor:"is_unlinked"},s.default.createElement("input",{type:"radio",id:"is_unlinked",value:"is_unlinked",name:"is_unlinked",checked:!a.props.isUserLinked,onChange:a.onPermissionsChange}),"Unlinked"))))},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){if(!this.props.canDisplayDevCard)return null;var e=(0,b.default)(this.props.className,"jp-dev-card"),t=(0,M.getPlanClass)(this.props.sitePlan.product_slug),n=(0,l.default)(this.props.rewindStatus,["state"],!1);return s.default.createElement(A.default,{compact:!0,className:e},s.default.createElement("a",{className:"jp-dev-card__close",role:"button",tabIndex:"0",onKeyDown:(0,h.default)(this.props.disableDevCard),onClick:this.props.disableDevCard},"x"),s.default.createElement("div",{className:"jp-dev-card__heading"},"Dev Tools"),s.default.createElement("ul",null,s.default.createElement("li",null,s.default.createElement("label",{htmlFor:"jetpack_free"},s.default.createElement("input",{type:"radio",id:"jetpack_free",value:"jetpack_free",name:"jetpack_free",checked:"is-free-plan"===t,onChange:this.onPlanChange}),"Free")),s.default.createElement("li",null,s.default.createElement("label",{htmlFor:"jetpack_personal"},s.default.createElement("input",{type:"radio",id:"jetpack_personal",value:"jetpack_personal",name:"jetpack_personal",checked:"is-personal-plan"===t,onChange:this.onPlanChange}),"Personal")),s.default.createElement("li",null,s.default.createElement("label",{htmlFor:"jetpack_premium"},s.default.createElement("input",{type:"radio",id:"jetpack_premium",value:"jetpack_premium",name:"jetpack_premium",checked:"is-premium-plan"===t,onChange:this.onPlanChange}),"Premium")),s.default.createElement("li",null,s.default.createElement("label",{htmlFor:"jetpack_business"},s.default.createElement("input",{type:"radio",id:"jetpack_business",value:"jetpack_business",name:"jetpack_business",checked:"is-business-plan"===t,onChange:this.onPlanChange}),"Pro"))),s.default.createElement("hr",null),s.default.createElement("ul",null,s.default.createElement("li",null,s.default.createElement("label",{htmlFor:"admin_master"},s.default.createElement("input",{type:"radio",id:"admin_master",value:"admin_master",name:"admin_master",checked:this.props.isMaster,onChange:this.onPermissionsChange}),"Admin (master)")),s.default.createElement("li",null,s.default.createElement("label",{htmlFor:"admin_secondary"},s.default.createElement("input",{type:"radio",id:"admin_secondary",value:"admin_secondary",name:"admin_secondary",checked:this.props.isAdmin&&!this.props.isMaster,onChange:this.onPermissionsChange}),"Admin (secondary)")),s.default.createElement("li",null,s.default.createElement("label",{htmlFor:"editor"},s.default.createElement("input",{type:"radio",id:"editor",value:"editor",name:"editor",checked:this.props.canEditPosts&&!this.props.isAdmin,onChange:this.onPermissionsChange}),"Editor")),s.default.createElement("li",null,s.default.createElement("label",{htmlFor:"subscriber"},s.default.createElement("input",{type:"radio",id:"subscriber",value:"subscriber",name:"subscriber",checked:!this.props.canEditPosts&&!this.props.isAdmin,onChange:this.onPermissionsChange}),"Subscriber"))),s.default.createElement("hr",null),s.default.createElement("ul",null,s.default.createElement("li",null,s.default.createElement("label",{htmlFor:"nothreats"},s.default.createElement("input",{type:"radio",id:"nothreats",value:0,name:"nothreats",checked:0===this.props.getVaultPressScanThreatCount(),onChange:this.onThreatsChange}),"No threats")),s.default.createElement("li",null,s.default.createElement("label",{htmlFor:"threats"},s.default.createElement("input",{type:"radio",id:"threats",value:17,name:"threats",checked:0!==this.props.getVaultPressScanThreatCount(),onChange:this.onThreatsChange}),"Threats"))),s.default.createElement("hr",null),s.default.createElement("ul",null,s.default.createElement("strong",null,"Rewind"),s.default.createElement("li",null,s.default.createElement("label",{htmlFor:"rewindUnavailable"},s.default.createElement("input",{type:"radio",id:"rewindUnavailable",value:"unavailable",name:"unavailable",checked:"unavailable"===n,onChange:this.onRewindStatusChange}),"Unavailable")),s.default.createElement("li",null,s.default.createElement("label",{htmlFor:"rewindAvailable"},s.default.createElement("input",{type:"radio",id:"rewindAvailable",value:"available",name:"available",checked:"unavailable"!==n&&"active"!==n,onChange:this.onRewindStatusChange}),"Available")),s.default.createElement("li",null,s.default.createElement("label",{htmlFor:"rewindActive"},s.default.createElement("input",{type:"radio",id:"rewindActive",value:"active",name:"active",checked:"active"===n,onChange:this.onRewindStatusChange}),"Active"))),this.maybeShowStatsToggle(),this.maybeShowIsLinkedToggle())}}]),t}(s.default.Component);_.displayName="DevCard",t.default=(0,c.connect)(function(e){return{isDevVersion:(0,u.isDevVersion)(e),sitePlan:(0,d.getSitePlan)(e),canDisplayDevCard:(0,f.canDisplayDevCard)(e),isUserLinked:(0,z.isCurrentUserLinked)(e),canViewStats:(0,u.userCanViewStats)(e),isMaster:(0,u.userIsMaster)(e),isAdmin:(0,u.userCanDisconnectSite)(e),canEditPosts:(0,u.userCanEditPosts)(e),getVaultPressScanThreatCount:function(){return(0,O.getVaultPressScanThreatCount)(e)},rewindStatus:(0,m.getRewindStatus)(e)}},function(e){return{switchPlanPreview:function(t){return e((0,f.switchPlanPreview)(t))},switchUserPermissions:function(t){return e((0,f.switchUserPermission)(t))},switchThreats:function(t){return e((0,f.switchThreats)(parseInt(t)))},disableDevCard:function(){return e((0,f.disableDevCard)())},switchRewindState:function(t){return e((0,f.switchRewindState)(t))}}})(_)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.fetchRewindStatus=void 0;var o,r=n(14),a=(o=n(37))&&o.__esModule?o:{default:o};t.fetchRewindStatus=function(){return function(e){return e({type:r.REWIND_STATUS_FETCH}),a.default.fetchRewindStatus().then(function(t){return e({type:r.REWIND_STATUS_FETCH_RECEIVE,status:t}),t}).catch(function(t){e({type:r.REWIND_STATUS_FETCH_FAIL,error:t})})}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=M(n(3)),r=M(n(4)),a=M(n(7)),i=M(n(5)),p=M(n(6)),s=M(n(1)),c=M(n(2)),b=M(n(55));function M(e){return e&&e.__esModule?e:{default:e}}n(425);var l=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){var e={className:"dops-notice__action",href:this.props.href,onClick:this.props.onClick};return this.props.external&&(e.target="_blank"),c.default.createElement("a",e,c.default.createElement("span",null,this.props.children),this.props.icon&&c.default.createElement(b.default,{icon:this.props.icon,size:24}),this.props.external&&c.default.createElement(b.default,{icon:"external",size:24}))}}]),t}(c.default.Component);l.displayName="NoticeAction",l.propTypes={href:s.default.string,onClick:s.default.func,external:s.default.bool,icon:s.default.string},l.defaultProps={external:!1},t.default=l,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.dismissJetpackActionNotice=t.dismissJetpackNotice=void 0;var o,r=n(14),a=(o=n(37))&&o.__esModule?o:{default:o};t.dismissJetpackNotice=function(e){return function(t){return t({type:r.JETPACK_NOTICES_DISMISS,notice:e}),a.default.dismissJetpackNotice(e).then(function(e){t({type:r.JETPACK_NOTICES_DISMISS_SUCCESS,dismissedNotices:e,success:!0})}).catch(function(e){t({type:r.JETPACK_NOTICES_DISMISS_FAIL,error:e})})}},t.dismissJetpackActionNotice=function(e){return function(t){t({type:r.JETPACK_ACTION_NOTICES_DISMISS,notice:e})}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=l(n(3)),r=l(n(4)),a=l(n(7)),i=l(n(5)),p=l(n(6)),s=l(n(2)),c=n(8),b=n(67),M=l(n(430));function l(e){return e&&e.__esModule?e:{default:e}}var u=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){return s.default.createElement("div",null,s.default.createElement("img",{src:b.imagePath+"security.svg",className:"jp-welcome__svg",alt:(0,c.translate)("Security")}),s.default.createElement("p",null,(0,c.translate)("Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.")),s.default.createElement(M.default,{module_slug:"monitor"}),s.default.createElement(M.default,{module_slug:"protect"}),s.default.createElement(M.default,{module_slug:"vaultpress"}))}}]),t}(s.default.Component);t.default=u,e.exports=t.default},function(e,t,n){"use strict";t.__esModule=!0,t.locationsAreEqual=t.Actions=t.useQueries=t.useBeforeUnload=t.useBasename=t.createMemoryHistory=t.createHashHistory=t.createHistory=void 0;var o=n(68);Object.defineProperty(t,"locationsAreEqual",{enumerable:!0,get:function(){return o.locationsAreEqual}});var r=M(n(188)),a=M(n(189)),i=M(n(187)),p=M(n(108)),s=M(n(726)),c=M(n(107)),b=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(n(87));function M(e){return e&&e.__esModule?e:{default:e}}t.createHistory=r.default,t.createHashHistory=a.default,t.createMemoryHistory=i.default,t.useBasename=p.default,t.useBeforeUnload=s.default,t.useQueries=c.default,t.Actions=b},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Navigation=void 0;var o=A(n(3)),r=A(n(4)),a=A(n(7)),i=A(n(5)),p=A(n(6)),s=A(n(1)),c=A(n(2)),b=n(9),M=A(n(661)),l=A(n(604)),u=A(n(609)),d=n(8),z=A(n(13)),f=n(24),O=n(21);function A(e){return e&&e.__esModule?e:{default:e}}var h=t.Navigation=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.trackNavClick=function(e){z.default.tracks.recordJetpackClick({target:"nav_item",path:e})},a.trackDashboardClick=function(){a.trackNavClick("dashboard")},a.trackMyPlanClick=function(){a.trackNavClick("my-plan")},a.trackPlansClick=function(){a.trackNavClick("plans")},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){var e;return e=this.props.userCanManageModules?c.default.createElement(l.default,{selectedText:this.props.route.name},c.default.createElement(u.default,{path:"#/dashboard",onClick:this.trackDashboardClick,selected:"/dashboard"===this.props.route.path||"/"===this.props.route.path},(0,d.translate)("At a Glance",{context:"Navigation item."})),c.default.createElement(u.default,{path:"#/my-plan",onClick:this.trackMyPlanClick,selected:"/my-plan"===this.props.route.path},(0,d.translate)("My Plan",{context:"Navigation item."})),c.default.createElement(u.default,{path:"#/plans",onClick:this.trackPlansClick,selected:"/plans"===this.props.route.path},(0,d.translate)("Plans",{context:"Navigation item."}))):c.default.createElement(l.default,{selectedText:this.props.route.name},c.default.createElement(u.default,{path:"#/dashboard",selected:"/dashboard"===this.props.route.path||"/"===this.props.route.path},(0,d.translate)("At a Glance",{context:"Navigation item."}))),c.default.createElement("div",{id:"jp-navigation",className:"dops-navigation"},c.default.createElement(M.default,{selectedText:this.props.route.name},e))}}]),t}(c.default.Component);h.propTypes={route:s.default.object.isRequired},t.default=(0,b.connect)(function(e){return{userCanManageModules:(0,O.userCanManageModules)(e),userCanViewStats:(0,O.userCanViewStats)(e),isModuleActivated:function(t){return(0,f.isModuleActivated)(e,t)}}})(h)},function(e,t,n){"use strict";var o=n(1),r=n(2),a=n(729),i=n(12),p=n(16),s=n(604),c=n(609),b=n(665);n(739);var M=p({displayName:"SectionNav",propTypes:{children:o.node,selectedText:o.node,selectedCount:o.number,hasPinnedItems:o.bool,onMobileNavPanelOpen:o.func},getInitialState:function(){return{mobileOpen:!1}},getDefaultProps:function(){return{onMobileNavPanelOpen:function(){}}},UNSAFE_componentWillMount:function(){this.checkForSiblingControls(this.props.children)},UNSAFE_componentWillReceiveProps:function(e){a(this.props,e)||(this.checkForSiblingControls(e.children),this.hasSiblingControls||this.closeMobilePanel())},render:function(){var e=this.getChildren(),t=void 0;return e?(t=i({"dops-section-nav":!0,"is-open":this.state.mobileOpen,"has-pinned-items":this.hasPinnedSearch||this.props.hasPinnedItems}),r.createElement("div",{className:t},r.createElement("div",{className:"dops-section-nav__mobile-header",role:"button",onClick:this.toggleMobileOpenState,tabIndex:0,onKeyUp:this.toggleMobileOpenState},r.createElement("span",{className:"dops-section-nav__mobile-header-text"},this.props.selectedText)),r.createElement("div",{className:"dops-section-nav__panel"},e))):(t=i({"dops-section-nav":!0,"is-empty":!0}),r.createElement("div",{className:t},r.createElement("div",{className:"dops-section-nav__panel"},r.createElement(c,null))))},getChildren:function(){return r.Children.map(this.props.children,function(e){var t={hasSiblingControls:this.hasSiblingControls,closeSectionNavMobilePanel:this.closeMobilePanel};return e?(e.type!==s||e.props.selectedText||"string"!=typeof this.props.selectedText||(t.selectedText=this.props.selectedText),e.type===s&&this.props.selectedCount&&(t.selectedCount=this.props.selectedCount),e.type===b&&(e.props.pinned&&(this.hasPinnedSearch=!0),t.onSearch=this.generateOnSearch(e.props.onSearch)),r.cloneElement(e,t)):null}.bind(this))},closeMobilePanel:function(){window.innerWidth<480&&this.state.mobileOpen&&this.setState({mobileOpen:!1})},toggleMobileOpenState:function(){var e=!this.state.mobileOpen;this.setState({mobileOpen:e}),e&&this.props.onMobileNavPanelOpen()},generateOnSearch:function(e){return function(){e.apply(this,arguments),this.closeMobilePanel()}.bind(this)},checkForSiblingControls:function(e){this.hasSiblingControls=!1,r.Children.forEach(e,function(e,t){t&&e&&e.type!==b&&(this.hasSiblingControls=!0)}.bind(this))}});e.exports=M},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=q(n(3)),r=q(n(4)),a=q(n(7)),i=q(n(5)),p=q(n(6)),s=q(n(1)),c=q(n(126)),b=q(n(2)),M=q(n(413)),l=q(n(378)),u=q(n(414)),d=q(n(663)),z=q(n(732)),f=q(n(12)),O=q(n(664)),A=q(n(734)),h=q(n(735)),m=q(n(605));function q(e){return e&&e.__esModule?e:{default:e}}n(736);var _=function(){},W=function(e){function t(e){(0,r.default)(this,t);var n=(0,i.default)(this,(t.__proto__||(0,o.default)(t)).call(this,e));n.navigateItem=n.navigateItem.bind(n),n.toggleDropdown=n.toggleDropdown.bind(n),n.handleOutsideClick=n.handleOutsideClick.bind(n),n._onClick=n._onClick.bind(n);var a={isOpen:!1};return e.options.length&&(a.selected=n.getInitialSelectedItem(e)),n.state=a,n}return(0,p.default)(t,e),(0,a.default)(t,[{key:"UNSAFE_componentWillMount",value:function(){this.setState({instanceId:++t.instances})}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){this.state.isOpen&&this.closeDropdown(),void 0!==this.state.selected&&this.props.initialSelected!==e.initialSelected&&this.setState({selected:e.initialSelected})}},{key:"componentWillUnmount",value:function(){window.removeEventListener("click",this.handleOutsideClick)}},{key:"componentDidUpdate",value:function(e,t){this.state.isOpen?window.addEventListener("click",this.handleOutsideClick):window.removeEventListener("click",this.handleOutsideClick),this.state.isOpen!==t.isOpen&&this.props.onToggle({target:this,open:this.state.isOpen})}},{key:"getInitialSelectedItem",value:function(e){if((e=e||this.props).initialSelected)return e.initialSelected;if(e.options.length){var t=(0,M.default)(e.options,function(e){return!e.isLabel});return t&&t.value}}},{key:"dropdownOptions",value:function(){var e=0,t=this;return this.props.children?b.default.Children.map(this.props.children,function(n,o){if(!n)return null;var r=b.default.cloneElement(n,{ref:n.type===O.default?"item-"+e:null,key:"item-"+o,onClick:function(e){t.refs.dropdownContainer.focus(),"function"==typeof n.props.onClick&&n.props.onClick(e)}});return n.type===O.default&&e++,r},this):this.props.options.map(function(t,n){if(!t)return b.default.createElement(A.default,{key:"dropdown-separator-"+this.state.instanceId+"-"+n});if(t.isLabel)return b.default.createElement(h.default,{key:"dropdown-label-"+this.state.instanceId+"-"+n},t.label);var o=b.default.createElement(O.default,{key:"dropdown-item-"+this.state.instanceId+"-"+t.value,ref:"item-"+e,selected:this.state.selected===t.value,onClick:this.onSelectItem(t),path:t.path},t.label);return e++,o},this)}},{key:"render",value:function(){var e={"dops-select-dropdown":!0,"is-compact":this.props.compact,"is-open":this.state.isOpen,"is-disabled":this.props.disabled};this.props.className&&this.props.className.split(" ").forEach(function(t){e[t]=!0});var t=(0,f.default)(e),n=this.props.selectedText?this.props.selectedText:(0,z.default)((0,M.default)(this.props.options,{value:this.state.selected}),"label");return b.default.createElement("div",{style:this.props.style,className:t},b.default.createElement("div",{ref:"dropdownContainer",className:"dops-select-dropdown__container",tabIndex:this.props.tabIndex||0,role:"listbox","aria-labelledby":"select-dropdown-"+this.state.instanceId,"aria-haspopup":"true","aria-owns":"select-submenu-"+this.state.instanceId,"aria-controls":"select-submenu-"+this.state.instanceId,"aria-expanded":this.state.isOpen,onClick:this._onClick,onKeyDown:this.navigateItem},b.default.createElement("div",{id:"select-dropdown-"+this.state.instanceId,className:"dops-select-dropdown__header"},b.default.createElement("span",{className:"dops-select-dropdown__header-text"},n,"number"==typeof this.props.selectedCount&&b.default.createElement(m.default,{count:this.props.selectedCount}))),b.default.createElement("ul",{id:"select-submenu-"+this.state.instanceId,className:"dops-select-dropdown__options"},this.dropdownOptions())))}},{key:"_onClick",value:function(){this.props.disabled||this.toggleDropdown()}},{key:"toggleDropdown",value:function(){this.setState({isOpen:!this.state.isOpen})}},{key:"openDropdown",value:function(){this.setState({isOpen:!0})}},{key:"closeDropdown",value:function(){this.state.isOpen&&(delete this.focused,this.setState({isOpen:!1}))}},{key:"onSelectItem",value:function(e){return this.selectItem.bind(this,e)}},{key:"selectItem",value:function(e){e&&(this.props.onSelect&&this.props.onSelect(e),this.setState({selected:e.value}),this.refs.dropdownContainer.focus())}},{key:"navigateItem",value:function(e){switch(e.keyCode){case 9:this.navigateItemByTabKey(e);break;case 32:case 13:e.preventDefault(),this.activateItem();break;case 38:e.preventDefault(),this.focusSibling("previous"),this.openDropdown();break;case 40:e.preventDefault(),this.focusSibling("next"),this.openDropdown();break;case 27:e.preventDefault(),this.closeDropdown(),this.refs.dropdownContainer.focus()}}},{key:"navigateItemByTabKey",value:function(e){if(this.state.isOpen){e.preventDefault();var t=e.shiftKey?"previous":"next";this.focusSibling(t)}}},{key:"activateItem",value:function(){if(!this.state.isOpen)return this.openDropdown();document.activeElement.click()}},{key:"focusSibling",value:function(e){var t=void 0,n=void 0;if(this.state.isOpen){this.props.options.length?(t=(0,d.default)((0,l.default)(this.props.options,function(e){return e&&!e.isLabel}),"value"),n="number"==typeof this.focused?this.focused:t.indexOf(this.state.selected)):(t=(0,l.default)(this.props.children,function(e){return e.type===O.default}),n="number"==typeof this.focused?this.focused:(0,u.default)(t,function(e){return e.props.selected}));var o=n+("previous"===e?-1:1);o>=t.length||o<0||(c.default.findDOMNode(this.refs["item-"+o].refs.itemLink).focus(),this.focused=o)}}},{key:"handleOutsideClick",value:function(e){c.default.findDOMNode(this.refs.dropdownContainer).contains(e.target)||this.closeDropdown()}}]),t}(b.default.Component);W.defaultProps={options:[],onSelect:_,onToggle:_,disabled:!1,style:{}},W.propTypes={selectedText:s.default.string,selectedCount:s.default.number,initialSelected:s.default.string,className:s.default.string,style:s.default.object,onSelect:s.default.func,onToggle:s.default.func,focusSibling:s.default.func,tabIndex:s.default.number,disabled:s.default.bool,options:s.default.arrayOf(s.default.shape({value:s.default.string.isRequired,label:s.default.string.isRequired,path:s.default.string}))},W.instances=0,t.default=W,e.exports=t.default},function(e,t,n){var o=n(80),r=n(77),a=n(731),i=n(26);e.exports=function(e,t){return(i(e)?o:a)(e,r(t,3))}},function(e,t,n){"use strict";var o=s(n(3)),r=s(n(4)),a=s(n(7)),i=s(n(5)),p=s(n(6));function s(e){return e&&e.__esModule?e:{default:e}}var c=n(1),b=n(2),M=n(12),l=n(605),u=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){var e=M(this.props.className,{"dops-select-dropdown__item":!0,"is-selected":this.props.selected,"is-disabled":this.props.disabled});return b.createElement("li",{className:"dops-select-dropdown__option"},b.createElement("a",{ref:"itemLink",href:this.props.path,className:e,onClick:this.props.disabled?null:this.props.onClick,"data-bold-text":this.props.value||this.props.children,role:"option",tabIndex:0,"aria-selected":this.props.selected},b.createElement("span",{className:"dops-select-dropdown__item-text"},this.props.children,"number"==typeof this.props.count&&b.createElement(l,{count:this.props.count}))))}}]),t}(b.Component);u.propTypes={children:c.string.isRequired,path:c.string,selected:c.bool,onClick:c.func,count:c.number},u.defaultProps={selected:!1},e.exports=u},function(e,t,n){"use strict";var o=h(n(10)),r=h(n(3)),a=h(n(4)),i=h(n(7)),p=h(n(5)),s=h(n(6)),c=h(n(126)),b=h(n(1)),M=h(n(2)),l=h(n(12)),u=h(n(417)),d=h(n(54)),z=h(n(13)),f=h(n(666)),O=h(n(55)),A=n(608);function h(e){return e&&e.__esModule?e:{default:e}}function m(e,t){switch(t.key){case" ":case"Enter":this[e](t)}}n(738);var q=function(e){function t(){var e,n,o,i;(0,a.default)(this,t);for(var s=arguments.length,b=Array(s),l=0;l<s;l++)b[l]=arguments[l];return n=o=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(b))),o.state={keyword:o.props.initialValue||"",isOpen:!!o.props.isOpen,hasFocus:!1},o.scrollOverlay=function(){o.refs.overlay&&window.requestAnimationFrame(function(){o.refs.overlay&&o.refs.searchInput&&(o.refs.overlay.scrollLeft=o.getScrollLeft(o.refs.searchInput))})},o.getScrollLeft=function(e){if(!e.createTextRange)return e.scrollLeft;var t=e.createTextRange(),n=window.getComputedStyle(e,void 0),o=parseFloat(n.paddingLeft),r=t.getBoundingClientRect();return e.getBoundingClientRect().left+e.clientLeft+o-r.left},o.focus=function(){setTimeout(function(){return o.refs.searchInput&&c.default.findDOMNode(o.refs.searchInput).focus()},0)},o.blur=function(){c.default.findDOMNode(o.refs.searchInput).blur()},o.getCurrentSearchValue=function(){return c.default.findDOMNode(o.refs.searchInput).value},o.clear=function(){o.setState({keyword:""})},o.onBlur=function(e){o.props.onBlur&&o.props.onBlur(e),o.setState({hasFocus:!1})},o.onChange=function(){o.setState({keyword:o.getCurrentSearchValue()})},o.openSearch=function(e){o.props.onClick(),e.preventDefault(),o.setState({keyword:"",isOpen:!0}),z.default.ga.recordEvent(o.props.analyticsGroup,"Clicked Open Search")},o.closeSearch=function(e){if(e.preventDefault(),!o.props.disabled){var t=c.default.findDOMNode(o.refs.searchInput);o.setState({keyword:"",isOpen:o.props.isOpen||!1}),t.value="",t.blur(),o.props.pinned&&c.default.findDOMNode(o.refs.openIcon).focus(),o.props.onSearchClose(e),z.default.ga.recordEvent(o.props.analyticsGroup,"Clicked Close Search")}},o.keyUp=function(e){"Enter"===e.key&&(0,A.isMobile)()&&o.blur(),o.props.pinned&&("Escape"===e.key&&o.closeSearch(e),o.scrollOverlay())},o.keyDown=function(e){o.scrollOverlay(),"Escape"===e.key&&""===e.target.value&&o.closeSearch(e),o.props.onKeyDown(e)},o.onFocus=function(){var e=c.default.findDOMNode(o.refs.searchInput),t=e.value;t&&(e.value="",e.value=t),o.setState({hasFocus:!0}),o.props.onSearchOpen()},o.renderStylingDiv=function(){return M.default.createElement("div",{className:"dops-search__text-overlay",ref:"overlay"},o.props.overlayStyling(o.state.keyword))},o.closeButton=function(){return o.props.hideClose||!o.state.keyword&&!o.state.isOpen?null:M.default.createElement("div",{role:"button",className:"dops-search__icon-navigation",onClick:o.closeSearch,tabIndex:"0",onKeyDown:o.closeListener,"aria-controls":"dops-search-component-"+o.state.instanceId,"aria-label":"Close Search"},M.default.createElement(O.default,{icon:"cross",className:"dops-search__close-icon"}))},i=n,(0,p.default)(o,i)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"UNSAFE_componentWillMount",value:function(){this.setState({instanceId:++t.instances}),this.closeListener=m.bind(this,"closeSearch"),this.openListener=m.bind(this,"openSearch")}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){e.onSearch===this.props.onSearch&&e.delaySearch===this.props.delaySearch||(this.onSearch=this.props.delaySearch?(0,u.default)(this.props.onSearch,this.props.delayTimeout):this.props.onSearch),e.isOpen&&this.setState({isOpen:e.isOpen}),e.initialValue===this.props.initialValue||this.state.keyword!==this.props.initialValue&&""!==this.state.keyword||this.setState({keyword:e.initialValue||""})}},{key:"componentDidUpdate",value:function(e,t){this.scrollOverlay(),(this.state.isOpen&&!t.isOpen||this.props.autoFocus&&!e.autoFocus)&&this.focus(),this.state.keyword!==t.keyword&&(this.state.keyword?this.onSearch(this.state.keyword):(this.props.delaySearch&&this.onSearch.cancel(),this.props.onSearch(this.state.keyword)),this.props.onSearchChange(this.state.keyword))}},{key:"componentDidMount",value:function(){var e=this;this.onSearch=this.props.delaySearch?(0,u.default)(this.props.onSearch,this.props.delayTimeout):this.props.onSearch,this.props.autoFocus&&setTimeout(function(){return e.focus()},0)}},{key:"render",value:function(){var e=this.state.keyword,t=this.props.placeholder||"Search…",n=this.props.pinned&&!this.state.isOpen,r=this.state.isOpen||!this.props.pinned||this.props.initialValue,a=this.props.disableAutocorrect&&{autoComplete:"off",autoCorrect:"off",spellCheck:"false"},i=(0,l.default)(this.props.additionalClasses,this.props.dir,{"is-expanded-to-container":this.props.fitsContainer,"is-open":r,"is-searching":this.props.searching,"has-focus":this.state.hasFocus,"dops-search":!0}),p=(0,l.default)("dops-search__input-fade",this.props.dir),s=(0,l.default)("dops-search__input",this.props.dir);return M.default.createElement("div",{dir:this.props.dir||null,className:i,role:"search"},M.default.createElement(f.default,null),M.default.createElement("div",{role:"button",className:"dops-search__icon-navigation",ref:"openIcon",onClick:n?this.openSearch:this.focus,tabIndex:n?"0":null,onKeyDown:n?this.openListener:null,"aria-controls":"dops-search-component-"+this.state.instanceId,"aria-label":"Open Search"},M.default.createElement(O.default,{icon:"search",className:"dops-search__open-icon"})),M.default.createElement("div",{className:p},M.default.createElement("input",(0,o.default)({type:"search",onChange:this.onChange,id:"dops-search-component-"+this.state.instanceId,className:s,placeholder:t,role:"searchbox",value:e,ref:"searchInput",onKeyUp:this.keyUp,onKeyDown:this.keyDown,onMouseUp:this.props.onClick,onFocus:this.onFocus,onBlur:this.onBlur,disabled:this.props.disabled,"aria-hidden":!r,autoCapitalize:"none",dir:this.props.dir,maxLength:this.props.maxLength},a)),this.props.overlayStyling&&this.renderStylingDiv()),this.closeButton())}}]),t}(M.default.Component);q.displayName="Search",q.instances=0,q.propTypes={additionalClasses:b.default.string,initialValue:b.default.string,placeholder:b.default.string,pinned:b.default.bool,delaySearch:b.default.bool,delayTimeout:b.default.number,onSearch:b.default.func.isRequired,onSearchChange:b.default.func,onSearchOpen:b.default.func,onSearchClose:b.default.func,analyticsGroup:b.default.string,overlayStyling:b.default.func,autoFocus:b.default.bool,disabled:b.default.bool,onKeyDown:b.default.func,onClick:b.default.func,disableAutocorrect:b.default.bool,onBlur:b.default.func,searching:b.default.bool,isOpen:b.default.bool,dir:b.default.oneOf(["ltr","rtl"]),fitsContainer:b.default.bool,maxLength:b.default.number,hideClose:b.default.bool},q.defaultProps={pinned:!1,delaySearch:!1,delayTimeout:300,autoFocus:!1,disabled:!1,onSearchChange:d.default,onSearchOpen:d.default,onSearchClose:d.default,onKeyDown:d.default,onClick:d.default,overlayStyling:void 0,disableAutocorrect:!1,searching:!1,isOpen:!1,dir:void 0,fitsContainer:!1,hideClose:!1},e.exports=q},function(e,t,n){"use strict";(function(t){var o=s(n(3)),r=s(n(4)),a=s(n(7)),i=s(n(5)),p=s(n(6));function s(e){return e&&e.__esModule?e:{default:e}}var c=n(1),b=n(2),M=n(12);n(737);var l=function(e){function n(){var e,a,p,s;(0,r.default)(this,n);for(var c=arguments.length,l=Array(c),u=0;u<c;u++)l[u]=arguments[u];return a=p=(0,i.default)(this,(e=n.__proto__||(0,o.default)(n)).call.apply(e,[this].concat(l))),p.isSVGCSSAnimationSupported=function(){var e=t.window?t.window.navigator.userAgent:"";return!/(MSIE |Trident\/)/.test(e)},p.getClassName=function(){return M("dops-spinner",p.props.className,{"is-fallback":!p.isSVGCSSAnimationSupported()})},p.renderFallback=function(){var e={width:p.props.size,height:p.props.size};return b.createElement("div",{className:p.getClassName(),style:e},b.createElement("span",{className:"dops-spinner__progress is-left"}),b.createElement("span",{className:"dops-spinner__progress is-right"}))},s=a,(0,i.default)(p,s)}return(0,p.default)(n,e),(0,a.default)(n,[{key:"UNSAFE_componentWillMount",value:function(){this.setState({instanceId:++n.instances})}},{key:"render",value:function(){var e=parseInt(this.state.instanceId,10);return this.isSVGCSSAnimationSupported()?b.createElement("div",{className:this.getClassName()},b.createElement("svg",{className:"dops-spinner__image",width:this.props.size,height:this.props.size,viewBox:"0 0 100 100",dangerouslySetInnerHTML:{__html:'\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t<mask id="maskBorder'+e+'">\n\t\t\t\t\t\t\t<rect x="0" y="0" width="100%" height="100%" fill="white" />\n\t\t\t\t\t\t\t<circle r="46%" cx="50%" cy="50%" fill="black" />\n\t\t\t\t\t\t</mask>\n\t\t\t\t\t\t<mask id="maskDonut'+e+'">\n\t\t\t\t\t\t\t<rect x="0" y="0" width="100%" height="100%" fill="black" />\n\t\t\t\t\t\t\t<circle r="46%" cx="50%" cy="50%" fill="white" />\n\t\t\t\t\t\t\t<circle r="30%" cx="50%" cy="50%" fill="black" />\n\t\t\t\t\t\t</mask>\n\t\t\t\t\t\t<mask id="maskLeft'+e+'">\n\t\t\t\t\t\t\t<rect x="0" y="0" width="50%" height="100%" fill="white" />\n\t\t\t\t\t\t</mask>\n\t\t\t\t\t\t<mask id="maskRight'+e+'">\n\t\t\t\t\t\t\t<rect x="50%" y="0" width="50%" height="100%" fill="white" />\n\t\t\t\t\t\t</mask>\n\t\t\t\t\t</defs>\n\t\t\t\t\t<circle class="dops-spinner__border" r="50%" cx="50%" cy="50%" mask="url( #maskBorder'+e+' )" />\n\t\t\t\t\t<g mask="url( #maskDonut'+e+' )">\n\t\t\t\t\t\t<g mask="url( #maskLeft'+e+' )">\n\t\t\t\t\t\t\t<rect class="dops-spinner__progress is-left" x="0" y="0" width="50%" height="100%" />\n\t\t\t\t\t\t</g>\n\t\t\t\t\t\t<g mask="url( #maskRight'+e+' )">\n\t\t\t\t\t\t\t<rect class="dops-spinner__progress is-right" x="50%" y="0" width="50%" height="100%" />\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t'}})):this.renderFallback()}}]),n}(b.Component);l.propTypes={className:c.string,size:c.number,duration:c.number},l.instances=0,l.defaultProps={size:20,duration:3e3},e.exports=l}).call(this,n(44))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.NavigationSettings=void 0;var o=q(n(1)),r=q(n(2)),a=q(n(16)),i=n(9),p=q(n(661)),s=q(n(604)),c=q(n(609)),b=q(n(665)),M=n(8),l=q(n(54)),u=q(n(740)),d=q(n(13)),z=n(56),f=n(21),O=n(20),A=n(24),h=n(103),m=q(n(419));function q(e){return e&&e.__esModule?e:{default:e}}var _=t.NavigationSettings=(0,a.default)({displayName:"NavigationSettings",mixins:[u.default],UNSAFE_componentWillMount:function(){this.onRouteChange(this.context.router.getCurrentLocation()),this.context.router.listen(this.onRouteChange)},onRouteChange:function(e){var t=(e.search||"").substr(1).split("&").filter(function(e){return 0===e.indexOf("term=")}),n="";t.length>0&&(n=t[0].split("=")[1]),this.props.searchForTerm(decodeURIComponent(n))},maybeShowSearch:function(){if(this.props.userCanManageModules)return r.default.createElement(b.default,{onClick:this.handleClickForTracking("search"),pinned:!0,fitsContainer:!0,placeholder:(0,M.translate)("Search for a Jetpack feature."),delaySearch:!0,delayTimeout:500,onSearch:this.doSearch,isOpen:!!this.props.searchTerm,initialValue:this.props.searchTerm})},trackNavClick:function(e){d.default.tracks.recordJetpackClick({target:"nav_item",path:e})},buildUrl:function(e,t){var n=e.split("#")[1].split("?");return this.props.searchForTerm(t),"#"+n[0]+(t?"?term="+t:"")},handleClickForTracking:function(e){var t=this;return function(){return t.trackNavClick(e)}},render:function(){var e=void 0,t=void 0;return this.props.userCanManageModules?e=r.default.createElement(s.default,{selectedText:this.props.route.name},this.props.hasAnySecurityFeature&&r.default.createElement(c.default,{path:"#security",onClick:this.handleClickForTracking("security"),selected:"/security"===this.props.route.path||"/settings"===this.props.route.path},(0,M.translate)("Security",{context:"Navigation item."})),this.props.hasAnyPerformanceFeature&&r.default.createElement(c.default,{path:"#performance",onClick:this.handleClickForTracking("performance"),selected:"/performance"===this.props.route.path},(0,M.translate)("Performance",{context:"Navigation item."})),this.props.hasAnyOfTheseModules(["masterbar","markdown","after-the-deadline","custom-content-types","post-by-email","infinite-scroll","minileven","copy-post"])&&r.default.createElement(c.default,{path:"#writing",onClick:this.handleClickForTracking("writing"),selected:"/writing"===this.props.route.path},(0,M.translate)("Writing",{context:"Navigation item."})),this.props.hasAnyOfTheseModules(["publicize","sharedaddy","likes"])&&r.default.createElement(c.default,{path:"#sharing",onClick:this.handleClickForTracking("sharing"),selected:"/sharing"===this.props.route.path},(0,M.translate)("Sharing",{context:"Navigation item."})),this.props.hasAnyOfTheseModules(["comments","gravatar-hovercards","markdown","subscriptions"])&&r.default.createElement(c.default,{path:"#discussion",onClick:this.handleClickForTracking("discussion"),selected:"/discussion"===this.props.route.path},(0,M.translate)("Discussion",{context:"Navigation item."})),this.props.hasAnyOfTheseModules(["seo-tools","wordads","stats","related-posts","verification-tools","sitemaps","google-analytics"])&&r.default.createElement(c.default,{path:"#traffic",onClick:this.handleClickForTracking("traffic"),selected:"/traffic"===this.props.route.path},(0,M.translate)("Traffic",{context:"Navigation item."}))):this.props.isSubscriber?e=!1:(t=this.props.isModuleActivated("publicize")&&this.props.userCanPublish?this.props.hasAnyOfTheseModules(["publicize"])&&r.default.createElement(c.default,{path:"#sharing",onClick:this.handleClickForTracking("sharing"),selected:"/sharing"===this.props.route.path},(0,M.translate)("Sharing",{context:"Navigation item."})):"",e=r.default.createElement(s.default,{selectedText:this.props.route.name},this.props.hasAnyOfTheseModules(["after-the-deadline","post-by-email"])&&r.default.createElement(c.default,{path:"#writing",onClick:this.handleClickForTracking("writing"),selected:"/writing"===this.props.route.path||"/settings"===this.props.route.path},(0,M.translate)("Writing",{context:"Navigation item."})),t)),r.default.createElement("div",{id:"jp-navigation",className:"dops-navigation"},r.default.createElement(m.default,null),r.default.createElement(p.default,{selectedText:this.props.route.name},e,this.maybeShowSearch()))}});_.contextTypes={router:o.default.object.isRequired},_.propTypes={userCanManageModules:o.default.bool.isRequired,isSubscriber:o.default.bool.isRequired,userCanPublish:o.default.bool.isRequired,isLinked:o.default.bool.isRequired,isSiteConnected:o.default.bool.isRequired,isModuleActivated:o.default.func.isRequired,searchHasFocus:o.default.bool.isRequired},_.defaultProps={userCanManageModules:!1,isSubscriber:!1,userCanPublish:!1,isLinked:!1,isSiteConnected:!1,isModuleActivated:l.default,searchHasFocus:!1},t.default=(0,i.connect)(function(e){return{hasAnyOfTheseModules:function(t){return(0,A.hasAnyOfTheseModules)(e,t)},hasAnyPerformanceFeature:(0,A.hasAnyPerformanceFeature)(e),hasAnySecurityFeature:(0,A.hasAnySecurityFeature)(e),userCanManageModules:(0,f.userCanManageModules)(e),isSubscriber:(0,f.userIsSubscriber)(e),userCanPublish:(0,f.userCanPublish)(e),isLinked:(0,O.isCurrentUserLinked)(e),isSiteConnected:(0,O.isSiteConnected)(e),isModuleActivated:function(t){return(0,A.isModuleActivated)(e,t)},moduleList:(0,A.getModules)(e),isPluginActive:function(t){return(0,h.isPluginActive)(e,t)},searchTerm:(0,z.getSearchTerm)(e)}},function(e){return{searchForTerm:function(t){return e((0,z.filterSearch)(t))}}})(_)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=h(n(10)),r=h(n(3)),a=h(n(4)),i=h(n(7)),p=h(n(5)),s=h(n(6)),c=h(n(2)),b=n(8),M=h(n(755)),l=h(n(894)),u=h(n(898)),d=h(n(900)),z=h(n(901)),f=h(n(919)),O=h(n(923)),A=h(n(936));function h(e){return e&&e.__esModule?e:{default:e}}var m=function(e){function t(){return(0,a.default)(this,t),(0,p.default)(this,(t.__proto__||(0,r.default)(t)).apply(this,arguments))}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e={route:this.props.route,searchTerm:this.props.searchTerm,rewindStatus:this.props.rewindStatus};return c.default.createElement("div",{className:"jp-settings-container"},c.default.createElement("div",{className:"jp-no-results"},e.searchTerm?(0,b.translate)("No search results found for %(term)s",{args:{term:e.searchTerm}}):(0,b.translate)("Enter a search term to find settings or close search.")),c.default.createElement(z.default,(0,o.default)({siteAdminUrl:this.props.siteAdminUrl,siteRawUrl:this.props.siteRawUrl,active:"/security"===this.props.route.path||"/settings"===this.props.route.path},e)),c.default.createElement(M.default,(0,o.default)({siteRawUrl:this.props.siteRawUrl,active:"/discussion"===this.props.route.path},e)),c.default.createElement(l.default,(0,o.default)({active:"/performance"===this.props.route.path},e)),c.default.createElement(O.default,(0,o.default)({siteRawUrl:this.props.siteRawUrl,siteAdminUrl:this.props.siteAdminUrl,active:"/traffic"===this.props.route.path},e)),c.default.createElement(A.default,(0,o.default)({siteAdminUrl:this.props.siteAdminUrl,active:"/writing"===this.props.route.path},e)),c.default.createElement(f.default,(0,o.default)({siteAdminUrl:this.props.siteAdminUrl,active:"/sharing"===this.props.route.path},e)),c.default.createElement(u.default,(0,o.default)({active:"/privacy"===this.props.route.path},e)),c.default.createElement(d.default,{searchTerm:this.props.searchTerm}))}}]),t}(c.default.Component);m.displayName="SearchableSettings",t.default=m,e.exports=t.default},function(e,t,n){"use strict";var o=n(40).f,r=n(133),a=n(237),i=n(60),p=n(232),s=n(161),c=n(171),b=n(399),M=n(403),l=n(50),u=n(173).fastKey,d=n(636),z=l?"_s":"size",f=function(e,t){var n,o=u(t);if("F"!==o)return e._i[o];for(n=e._f;n;n=n.n)if(n.k==t)return n};e.exports={getConstructor:function(e,t,n,c){var b=e(function(e,o){p(e,b,t,"_i"),e._t=t,e._i=r(null),e._f=void 0,e._l=void 0,e[z]=0,null!=o&&s(o,n,e[c],e)});return a(b.prototype,{clear:function(){for(var e=d(this,t),n=e._i,o=e._f;o;o=o.n)o.r=!0,o.p&&(o.p=o.p.n=void 0),delete n[o.i];e._f=e._l=void 0,e[z]=0},delete:function(e){var n=d(this,t),o=f(n,e);if(o){var r=o.n,a=o.p;delete n._i[o.i],o.r=!0,a&&(a.n=r),r&&(r.p=a),n._f==o&&(n._f=r),n._l==o&&(n._l=a),n[z]--}return!!o},forEach:function(e){d(this,t);for(var n,o=i(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(o(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!f(d(this,t),e)}}),l&&o(b.prototype,"size",{get:function(){return d(this,t)[z]}}),b},def:function(e,t,n){var o,r,a=f(e,t);return a?a.v=n:(e._l=a={i:r=u(t,!0),k:t,v:n,p:o=e._l,n:void 0,r:!1},e._f||(e._f=a),o&&(o.n=a),e[z]++,"F"!==r&&(e._i[r]=a)),e},getEntry:f,setStrong:function(e,t,n){c(e,t,function(e,n){this._t=d(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?b(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,b(1))},n?"entries":"values",!n,!0),M(t)}}},function(e,t,n){"use strict";var o=n(28),r=n(30),a=n(173),i=n(69),p=n(61),s=n(237),c=n(161),b=n(232),M=n(41),l=n(101),u=n(40).f,d=n(764)(0),z=n(50);e.exports=function(e,t,n,f,O,A){var h=o[e],m=h,q=O?"set":"add",_=m&&m.prototype,W={};return z&&"function"==typeof m&&(A||_.forEach&&!i(function(){(new m).entries().next()}))?(m=t(function(t,n){b(t,m,e,"_c"),t._c=new h,null!=n&&c(n,O,t[q],t)}),d("add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON".split(","),function(e){var t="add"==e||"set"==e;e in _&&(!A||"clear"!=e)&&p(m.prototype,e,function(n,o){if(b(this,m,e),!t&&A&&!M(n))return"get"==e&&void 0;var r=this._c[e](0===n?0:n,o);return t?this:r})}),A||u(m.prototype,"size",{get:function(){return this._c.size}})):(m=f.getConstructor(t,e,O,q),s(m.prototype,n),a.NEED=!0),l(m,e),W[e]=m,r(r.G+r.W+r.F,W),A||f.setStrong(m,e,O),m}},function(e,t,n){var o=n(156),r=n(768);e.exports=function(e){return function(){if(o(this)!=e)throw TypeError(e+"#toJSON isn't generic");return r(this)}}},function(e,t,n){"use strict";var o=n(30);e.exports=function(e){o(o.S,e,{of:function(){for(var e=arguments.length,t=new Array(e);e--;)t[e]=arguments[e];return new this(t)}})}},function(e,t,n){"use strict";var o=n(30),r=n(100),a=n(60),i=n(161);e.exports=function(e){o(o.S,e,{from:function(e){var t,n,o,p,s=arguments[1];return r(this),(t=void 0!==s)&&r(s),null==e?new this:(n=[],t?(o=0,p=a(s,arguments[2],2),i(e,!1,function(e){n.push(p(e,o++))})):i(e,!1,n.push,n),new this(n))}})}},function(e,t,n){"use strict";var o=n(25).Buffer,r=n(638).Transform;function a(e){r.call(this),this._block=o.allocUnsafe(e),this._blockSize=e,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}n(19)(a,r),a.prototype._transform=function(e,t,n){var o=null;try{this.update(e,t)}catch(e){o=e}n(o)},a.prototype._flush=function(e){var t=null;try{this.push(this.digest())}catch(e){t=e}e(t)},a.prototype.update=function(e,t){if(function(e,t){if(!o.isBuffer(e)&&"string"!=typeof e)throw new TypeError("Data must be a string or a buffer")}(e),this._finalized)throw new Error("Digest already called");o.isBuffer(e)||(e=o.from(e,t));for(var n=this._block,r=0;this._blockOffset+e.length-r>=this._blockSize;){for(var a=this._blockOffset;a<this._blockSize;)n[a++]=e[r++];this._update(),this._blockOffset=0}for(;r<e.length;)n[this._blockOffset++]=e[r++];for(var i=0,p=8*e.length;p>0;++i)this._length[i]+=p,(p=this._length[i]/4294967296|0)>0&&(this._length[i]-=4294967296*p);return this},a.prototype._update=function(){throw new Error("_update is not implemented")},a.prototype.digest=function(e){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var t=this._digest();void 0!==e&&(t=t.toString(e)),this._block.fill(0),this._blockOffset=0;for(var n=0;n<4;++n)this._length[n]=0;return t},a.prototype._digest=function(){throw new Error("_digest is not implemented")},e.exports=a},function(e,t,n){"use strict";(function(t,o){var r=n(420);e.exports=h;var a,i=n(611);h.ReadableState=A,n(123).EventEmitter;var p=function(e,t){return e.listeners(t).length},s=n(676),c=n(25).Buffer,b=t.Uint8Array||function(){},M=n(388);M.inherits=n(19);var l=n(784),u=void 0;u=l&&l.debuglog?l.debuglog("stream"):function(){};var d,z=n(785),f=n(677);M.inherits(h,s);var O=["error","close","destroy","pause","resume"];function A(e,t){e=e||{};var o=t instanceof(a=a||n(166));this.objectMode=!!e.objectMode,o&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var r=e.highWaterMark,i=e.readableHighWaterMark,p=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:o&&(i||0===i)?i:p,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new z,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(d||(d=n(641).StringDecoder),this.decoder=new d(e.encoding),this.encoding=e.encoding)}function h(e){if(a=a||n(166),!(this instanceof h))return new h(e);this._readableState=new A(e,this),this.readable=!0,e&&("function"==typeof e.read&&(this._read=e.read),"function"==typeof e.destroy&&(this._destroy=e.destroy)),s.call(this)}function m(e,t,n,o,r){var a,i=e._readableState;return null===t?(i.reading=!1,function(e,t){if(!t.ended){if(t.decoder){var n=t.decoder.end();n&&n.length&&(t.buffer.push(n),t.length+=t.objectMode?1:n.length)}t.ended=!0,g(e)}}(e,i)):(r||(a=function(e,t){var n,o;return o=t,c.isBuffer(o)||o instanceof b||"string"==typeof t||void 0===t||e.objectMode||(n=new TypeError("Invalid non-string/buffer chunk")),n}(i,t)),a?e.emit("error",a):i.objectMode||t&&t.length>0?("string"==typeof t||i.objectMode||Object.getPrototypeOf(t)===c.prototype||(t=function(e){return c.from(e)}(t)),o?i.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):q(e,i,t,!0):i.ended?e.emit("error",new Error("stream.push() after EOF")):(i.reading=!1,i.decoder&&!n?(t=i.decoder.write(t),i.objectMode||0!==t.length?q(e,i,t,!1):y(e,i)):q(e,i,t,!1))):o||(i.reading=!1)),function(e){return!e.ended&&(e.needReadable||e.length<e.highWaterMark||0===e.length)}(i)}function q(e,t,n,o){t.flowing&&0===t.length&&!t.sync?(e.emit("data",n),e.read(0)):(t.length+=t.objectMode?1:n.length,o?t.buffer.unshift(n):t.buffer.push(n),t.needReadable&&g(e)),y(e,t)}Object.defineProperty(h.prototype,"destroyed",{get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(e){this._readableState&&(this._readableState.destroyed=e)}}),h.prototype.destroy=f.destroy,h.prototype._undestroy=f.undestroy,h.prototype._destroy=function(e,t){this.push(null),t(e)},h.prototype.push=function(e,t){var n,o=this._readableState;return o.objectMode?n=!0:"string"==typeof e&&((t=t||o.defaultEncoding)!==o.encoding&&(e=c.from(e,t),t=""),n=!0),m(this,e,t,!1,n)},h.prototype.unshift=function(e){return m(this,e,null,!0,!1)},h.prototype.isPaused=function(){return!1===this._readableState.flowing},h.prototype.setEncoding=function(e){return d||(d=n(641).StringDecoder),this._readableState.decoder=new d(e),this._readableState.encoding=e,this};var _=8388608;function W(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!=e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=function(e){return e>=_?e=_:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function g(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(u("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?r.nextTick(v,e):v(e))}function v(e){u("emit readable"),e.emit("readable"),w(e)}function y(e,t){t.readingMore||(t.readingMore=!0,r.nextTick(L,e,t))}function L(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length<t.highWaterMark&&(u("maybeReadMore read 0"),e.read(0),n!==t.length);)n=t.length;t.readingMore=!1}function R(e){u("readable nexttick read 0"),e.read(0)}function E(e,t){t.reading||(u("resume read 0"),e.read(0)),t.resumeScheduled=!1,t.awaitDrain=0,e.emit("resume"),w(e),t.flowing&&!t.reading&&e.read(0)}function w(e){var t=e._readableState;for(u("flow",t.flowing);t.flowing&&null!==e.read(););}function k(e,t){return 0===t.length?null:(t.objectMode?n=t.buffer.shift():!e||e>=t.length?(n=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):n=function(e,t,n){var o;return e<t.head.data.length?(o=t.head.data.slice(0,e),t.head.data=t.head.data.slice(e)):o=e===t.head.data.length?t.shift():n?function(e,t){var n=t.head,o=1,r=n.data;for(e-=r.length;n=n.next;){var a=n.data,i=e>a.length?a.length:e;if(i===a.length?r+=a:r+=a.slice(0,e),0==(e-=i)){i===a.length?(++o,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=a.slice(i));break}++o}return t.length-=o,r}(e,t):function(e,t){var n=c.allocUnsafe(e),o=t.head,r=1;for(o.data.copy(n),e-=o.data.length;o=o.next;){var a=o.data,i=e>a.length?a.length:e;if(a.copy(n,n.length-e,0,i),0==(e-=i)){i===a.length?(++r,o.next?t.head=o.next:t.head=t.tail=null):(t.head=o,o.data=a.slice(i));break}++r}return t.length-=r,n}(e,t),o}(e,t.buffer,t.decoder),n);var n}function B(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,r.nextTick(T,t,e))}function T(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function S(e,t){for(var n=0,o=e.length;n<o;n++)if(e[n]===t)return n;return-1}h.prototype.read=function(e){u("read",e),e=parseInt(e,10);var t=this._readableState,n=e;if(0!==e&&(t.emittedReadable=!1),0===e&&t.needReadable&&(t.length>=t.highWaterMark||t.ended))return u("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?B(this):g(this),null;if(0===(e=W(e,t))&&t.ended)return 0===t.length&&B(this),null;var o,r=t.needReadable;return u("need readable",r),(0===t.length||t.length-e<t.highWaterMark)&&u("length less than watermark",r=!0),t.ended||t.reading?u("reading or ended",r=!1):r&&(u("do read"),t.reading=!0,t.sync=!0,0===t.length&&(t.needReadable=!0),this._read(t.highWaterMark),t.sync=!1,t.reading||(e=W(n,t))),null===(o=e>0?k(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&B(this)),null!==o&&this.emit("data",o),o},h.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},h.prototype.pipe=function(e,t){var n=this,a=this._readableState;switch(a.pipesCount){case 0:a.pipes=e;break;case 1:a.pipes=[a.pipes,e];break;default:a.pipes.push(e)}a.pipesCount+=1,u("pipe count=%d opts=%j",a.pipesCount,t);var s=t&&!1===t.end||e===o.stdout||e===o.stderr?A:c;function c(){u("onend"),e.end()}a.endEmitted?r.nextTick(s):n.once("end",s),e.on("unpipe",function t(o,r){u("onunpipe"),o===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,u("cleanup"),e.removeListener("close",f),e.removeListener("finish",O),e.removeListener("drain",b),e.removeListener("error",z),e.removeListener("unpipe",t),n.removeListener("end",c),n.removeListener("end",A),n.removeListener("data",d),M=!0,!a.awaitDrain||e._writableState&&!e._writableState.needDrain||b())});var b=function(e){return function(){var t=e._readableState;u("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&p(e,"data")&&(t.flowing=!0,w(e))}}(n);e.on("drain",b);var M=!1,l=!1;function d(t){u("ondata"),l=!1,!1!==e.write(t)||l||((1===a.pipesCount&&a.pipes===e||a.pipesCount>1&&-1!==S(a.pipes,e))&&!M&&(u("false write response, pause",n._readableState.awaitDrain),n._readableState.awaitDrain++,l=!0),n.pause())}function z(t){u("onerror",t),A(),e.removeListener("error",z),0===p(e,"error")&&e.emit("error",t)}function f(){e.removeListener("finish",O),A()}function O(){u("onfinish"),e.removeListener("close",f),A()}function A(){u("unpipe"),n.unpipe(e)}return n.on("data",d),function(e,t,n){if("function"==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?i(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}(e,"error",z),e.once("close",f),e.once("finish",O),e.emit("pipe",n),a.flowing||(u("pipe resume"),n.resume()),e},h.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes?this:(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,n),this);if(!e){var o=t.pipes,r=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var a=0;a<r;a++)o[a].emit("unpipe",this,n);return this}var i=S(t.pipes,e);return-1===i?this:(t.pipes.splice(i,1),t.pipesCount-=1,1===t.pipesCount&&(t.pipes=t.pipes[0]),e.emit("unpipe",this,n),this)},h.prototype.on=function(e,t){var n=s.prototype.on.call(this,e,t);if("data"===e)!1!==this._readableState.flowing&&this.resume();else if("readable"===e){var o=this._readableState;o.endEmitted||o.readableListening||(o.readableListening=o.needReadable=!0,o.emittedReadable=!1,o.reading?o.length&&g(this):r.nextTick(R,this))}return n},h.prototype.addListener=h.prototype.on,h.prototype.resume=function(){var e=this._readableState;return e.flowing||(u("resume"),e.flowing=!0,function(e,t){t.resumeScheduled||(t.resumeScheduled=!0,r.nextTick(E,e,t))}(this,e)),this},h.prototype.pause=function(){return u("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(u("pause"),this._readableState.flowing=!1,this.emit("pause")),this},h.prototype.wrap=function(e){var t=this,n=this._readableState,o=!1;for(var r in e.on("end",function(){if(u("wrapped end"),n.decoder&&!n.ended){var e=n.decoder.end();e&&e.length&&t.push(e)}t.push(null)}),e.on("data",function(r){u("wrapped data"),n.decoder&&(r=n.decoder.write(r)),n.objectMode&&null==r||(n.objectMode||r&&r.length)&&(t.push(r)||(o=!0,e.pause()))}),e)void 0===this[r]&&"function"==typeof e[r]&&(this[r]=function(t){return function(){return e[t].apply(e,arguments)}}(r));for(var a=0;a<O.length;a++)e.on(O[a],this.emit.bind(this,O[a]));return this._read=function(t){u("wrapped _read",t),o&&(o=!1,e.resume())},this},Object.defineProperty(h.prototype,"readableHighWaterMark",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),h._fromList=k}).call(this,n(44),n(71))},function(e,t,n){e.exports=n(123).EventEmitter},function(e,t,n){"use strict";var o=n(420);function r(e,t){e.emit("error",t)}e.exports={destroy:function(e,t){var n=this,a=this._readableState&&this._readableState.destroyed,i=this._writableState&&this._writableState.destroyed;return a||i?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||o.nextTick(r,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,function(e){!t&&e?(o.nextTick(r,n,e),n._writableState&&(n._writableState.errorEmitted=!0)):t&&t(e)}),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},function(e,t,n){"use strict";e.exports=i;var o=n(166),r=n(388);function a(e,t){var n=this._transformState;n.transforming=!1;var o=n.writecb;if(!o)return this.emit("error",new Error("write callback called multiple times"));n.writechunk=null,n.writecb=null,null!=t&&this.push(t),o(e);var r=this._readableState;r.reading=!1,(r.needReadable||r.length<r.highWaterMark)&&this._read(r.highWaterMark)}function i(e){if(!(this instanceof i))return new i(e);o.call(this,e),this._transformState={afterTransform:a.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,e&&("function"==typeof e.transform&&(this._transform=e.transform),"function"==typeof e.flush&&(this._flush=e.flush)),this.on("prefinish",p)}function p(){var e=this;"function"==typeof this._flush?this._flush(function(t,n){s(e,t,n)}):s(this,null,null)}function s(e,t,n){if(t)return e.emit("error",t);if(null!=n&&e.push(n),e._writableState.length)throw new Error("Calling transform done when ws.length != 0");if(e._transformState.transforming)throw new Error("Calling transform done when still transforming");return e.push(null)}r.inherits=n(19),r.inherits(i,o),i.prototype.push=function(e,t){return this._transformState.needTransform=!1,o.prototype.push.call(this,e,t)},i.prototype._transform=function(e,t,n){throw new Error("_transform() is not implemented")},i.prototype._write=function(e,t,n){var o=this._transformState;if(o.writecb=n,o.writechunk=e,o.writeencoding=t,!o.transforming){var r=this._readableState;(o.needTransform||r.needReadable||r.length<r.highWaterMark)&&this._read(r.highWaterMark)}},i.prototype._read=function(e){var t=this._transformState;null!==t.writechunk&&t.writecb&&!t.transforming?(t.transforming=!0,this._transform(t.writechunk,t.writeencoding,t.afterTransform)):t.needTransform=!0},i.prototype._destroy=function(e,t){var n=this;o.prototype._destroy.call(this,e,function(e){t(e),n.emit("close")})}},function(e,t,n){var o=n(19),r=n(185),a=n(25).Buffer,i=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],p=new Array(64);function s(){this.init(),this._w=p,r.call(this,64,56)}function c(e,t,n){return n^e&(t^n)}function b(e,t,n){return e&t|n&(e|t)}function M(e){return(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10)}function l(e){return(e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7)}function u(e){return(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3}o(s,r),s.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},s.prototype._update=function(e){for(var t,n=this._w,o=0|this._a,r=0|this._b,a=0|this._c,p=0|this._d,s=0|this._e,d=0|this._f,z=0|this._g,f=0|this._h,O=0;O<16;++O)n[O]=e.readInt32BE(4*O);for(;O<64;++O)n[O]=0|(((t=n[O-2])>>>17|t<<15)^(t>>>19|t<<13)^t>>>10)+n[O-7]+u(n[O-15])+n[O-16];for(var A=0;A<64;++A){var h=f+l(s)+c(s,d,z)+i[A]+n[A]|0,m=M(o)+b(o,r,a)|0;f=z,z=d,d=s,s=p+h|0,p=a,a=r,r=o,o=h+m|0}this._a=o+this._a|0,this._b=r+this._b|0,this._c=a+this._c|0,this._d=p+this._d|0,this._e=s+this._e|0,this._f=d+this._f|0,this._g=z+this._g|0,this._h=f+this._h|0},s.prototype._hash=function(){var e=a.allocUnsafe(32);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e.writeInt32BE(this._h,28),e},e.exports=s},function(e,t,n){var o=n(19),r=n(185),a=n(25).Buffer,i=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],p=new Array(160);function s(){this.init(),this._w=p,r.call(this,128,112)}function c(e,t,n){return n^e&(t^n)}function b(e,t,n){return e&t|n&(e|t)}function M(e,t){return(e>>>28|t<<4)^(t>>>2|e<<30)^(t>>>7|e<<25)}function l(e,t){return(e>>>14|t<<18)^(e>>>18|t<<14)^(t>>>9|e<<23)}function u(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^e>>>7}function d(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^(e>>>7|t<<25)}function z(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^e>>>6}function f(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^(e>>>6|t<<26)}function O(e,t){return e>>>0<t>>>0?1:0}o(s,r),s.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},s.prototype._update=function(e){for(var t=this._w,n=0|this._ah,o=0|this._bh,r=0|this._ch,a=0|this._dh,p=0|this._eh,s=0|this._fh,A=0|this._gh,h=0|this._hh,m=0|this._al,q=0|this._bl,_=0|this._cl,W=0|this._dl,g=0|this._el,v=0|this._fl,y=0|this._gl,L=0|this._hl,R=0;R<32;R+=2)t[R]=e.readInt32BE(4*R),t[R+1]=e.readInt32BE(4*R+4);for(;R<160;R+=2){var E=t[R-30],w=t[R-30+1],k=u(E,w),B=d(w,E),T=z(E=t[R-4],w=t[R-4+1]),S=f(w,E),N=t[R-14],X=t[R-14+1],C=t[R-32],D=t[R-32+1],P=B+X|0,x=k+N+O(P,B)|0;x=(x=x+T+O(P=P+S|0,S)|0)+C+O(P=P+D|0,D)|0,t[R]=x,t[R+1]=P}for(var H=0;H<160;H+=2){x=t[H],P=t[H+1];var F=b(n,o,r),j=b(m,q,_),Y=M(n,m),I=M(m,n),U=l(p,g),V=l(g,p),K=i[H],J=i[H+1],G=c(p,s,A),Q=c(g,v,y),$=L+V|0,Z=h+U+O($,L)|0;Z=(Z=(Z=Z+G+O($=$+Q|0,Q)|0)+K+O($=$+J|0,J)|0)+x+O($=$+P|0,P)|0;var ee=I+j|0,te=Y+F+O(ee,I)|0;h=A,L=y,A=s,y=v,s=p,v=g,p=a+Z+O(g=W+$|0,W)|0,a=r,W=_,r=o,_=q,o=n,q=m,n=Z+te+O(m=$+ee|0,$)|0}this._al=this._al+m|0,this._bl=this._bl+q|0,this._cl=this._cl+_|0,this._dl=this._dl+W|0,this._el=this._el+g|0,this._fl=this._fl+v|0,this._gl=this._gl+y|0,this._hl=this._hl+L|0,this._ah=this._ah+n+O(this._al,m)|0,this._bh=this._bh+o+O(this._bl,q)|0,this._ch=this._ch+r+O(this._cl,_)|0,this._dh=this._dh+a+O(this._dl,W)|0,this._eh=this._eh+p+O(this._el,g)|0,this._fh=this._fh+s+O(this._fl,v)|0,this._gh=this._gh+A+O(this._gl,y)|0,this._hh=this._hh+h+O(this._hl,L)|0},s.prototype._hash=function(){var e=a.allocUnsafe(64);function t(t,n,o){e.writeInt32BE(t,o),e.writeInt32BE(n,o+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),t(this._gh,this._gl,48),t(this._hh,this._hl,56),e},e.exports=s},function(e,t,n){"use strict";var o=n(19),r=n(799),a=n(135),i=n(25).Buffer,p=n(682),s=n(642),c=n(643),b=i.alloc(128);function M(e,t){a.call(this,"digest"),"string"==typeof t&&(t=i.from(t));var n="sha512"===e||"sha384"===e?128:64;this._alg=e,this._key=t,t.length>n?t=("rmd160"===e?new s:c(e)).update(t).digest():t.length<n&&(t=i.concat([t,b],n));for(var o=this._ipad=i.allocUnsafe(n),r=this._opad=i.allocUnsafe(n),p=0;p<n;p++)o[p]=54^t[p],r[p]=92^t[p];this._hash="rmd160"===e?new s:c(e),this._hash.update(o)}o(M,a),M.prototype._update=function(e){this._hash.update(e)},M.prototype._final=function(){var e=this._hash.digest();return("rmd160"===this._alg?new s:c(this._alg)).update(this._opad).update(e).digest()},e.exports=function(e,t){return"rmd160"===(e=e.toLowerCase())||"ripemd160"===e?new M("rmd160",t):"md5"===e?new r(p,t):new M(e,t)}},function(e,t,n){var o=n(637);e.exports=function(e){return(new o).update(e).digest()}},function(e){e.exports={sha224WithRSAEncryption:{sign:"rsa",hash:"sha224",id:"302d300d06096086480165030402040500041c"},"RSA-SHA224":{sign:"ecdsa/rsa",hash:"sha224",id:"302d300d06096086480165030402040500041c"},sha256WithRSAEncryption:{sign:"rsa",hash:"sha256",id:"3031300d060960864801650304020105000420"},"RSA-SHA256":{sign:"ecdsa/rsa",hash:"sha256",id:"3031300d060960864801650304020105000420"},sha384WithRSAEncryption:{sign:"rsa",hash:"sha384",id:"3041300d060960864801650304020205000430"},"RSA-SHA384":{sign:"ecdsa/rsa",hash:"sha384",id:"3041300d060960864801650304020205000430"},sha512WithRSAEncryption:{sign:"rsa",hash:"sha512",id:"3051300d060960864801650304020305000440"},"RSA-SHA512":{sign:"ecdsa/rsa",hash:"sha512",id:"3051300d060960864801650304020305000440"},"RSA-SHA1":{sign:"rsa",hash:"sha1",id:"3021300906052b0e03021a05000414"},"ecdsa-with-SHA1":{sign:"ecdsa",hash:"sha1",id:""},sha256:{sign:"ecdsa",hash:"sha256",id:""},sha224:{sign:"ecdsa",hash:"sha224",id:""},sha384:{sign:"ecdsa",hash:"sha384",id:""},sha512:{sign:"ecdsa",hash:"sha512",id:""},"DSA-SHA":{sign:"dsa",hash:"sha1",id:""},"DSA-SHA1":{sign:"dsa",hash:"sha1",id:""},DSA:{sign:"dsa",hash:"sha1",id:""},"DSA-WITH-SHA224":{sign:"dsa",hash:"sha224",id:""},"DSA-SHA224":{sign:"dsa",hash:"sha224",id:""},"DSA-WITH-SHA256":{sign:"dsa",hash:"sha256",id:""},"DSA-SHA256":{sign:"dsa",hash:"sha256",id:""},"DSA-WITH-SHA384":{sign:"dsa",hash:"sha384",id:""},"DSA-SHA384":{sign:"dsa",hash:"sha384",id:""},"DSA-WITH-SHA512":{sign:"dsa",hash:"sha512",id:""},"DSA-SHA512":{sign:"dsa",hash:"sha512",id:""},"DSA-RIPEMD160":{sign:"dsa",hash:"rmd160",id:""},ripemd160WithRSA:{sign:"rsa",hash:"rmd160",id:"3021300906052b2403020105000414"},"RSA-RIPEMD160":{sign:"rsa",hash:"rmd160",id:"3021300906052b2403020105000414"},md5WithRSAEncryption:{sign:"rsa",hash:"md5",id:"3020300c06082a864886f70d020505000410"},"RSA-MD5":{sign:"rsa",hash:"md5",id:"3020300c06082a864886f70d020505000410"}}},function(e,t,n){t.pbkdf2=n(801),t.pbkdf2Sync=n(687)},function(e,t,n){(function(t){var n=Math.pow(2,30)-1;function o(e,n){if("string"!=typeof e&&!t.isBuffer(e))throw new TypeError(n+" must be a buffer or string")}e.exports=function(e,t,r,a){if(o(e,"Password"),o(t,"Salt"),"number"!=typeof r)throw new TypeError("Iterations not a number");if(r<0)throw new TypeError("Bad iterations");if("number"!=typeof a)throw new TypeError("Key length not a number");if(a<0||a>n||a!=a)throw new TypeError("Bad key length")}}).call(this,n(57).Buffer)},function(e,t,n){(function(t){var n;n=t.browser?"utf-8":parseInt(t.version.split(".")[0].slice(1),10)>=6?"utf-8":"binary",e.exports=n}).call(this,n(71))},function(e,t,n){var o=n(682),r=n(642),a=n(643),i=n(685),p=n(686),s=n(25).Buffer,c=s.alloc(128),b={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,rmd160:20,ripemd160:20};function M(e,t,n){var i=function(e){return"rmd160"===e||"ripemd160"===e?function(e){return(new r).update(e).digest()}:"md5"===e?o:function(t){return a(e).update(t).digest()}}(e),p="sha512"===e||"sha384"===e?128:64;t.length>p?t=i(t):t.length<p&&(t=s.concat([t,c],p));for(var M=s.allocUnsafe(p+b[e]),l=s.allocUnsafe(p+b[e]),u=0;u<p;u++)M[u]=54^t[u],l[u]=92^t[u];var d=s.allocUnsafe(p+n+4);M.copy(d,0,0,p),this.ipad1=d,this.ipad2=M,this.opad=l,this.alg=e,this.blocksize=p,this.hash=i,this.size=b[e]}M.prototype.run=function(e,t){return e.copy(t,this.blocksize),this.hash(t).copy(this.opad,this.blocksize),this.hash(this.opad)},e.exports=function(e,t,n,o,r){i(e,t,n,o),s.isBuffer(e)||(e=s.from(e,p)),s.isBuffer(t)||(t=s.from(t,p));var a=new M(r=r||"sha1",e,t.length),c=s.allocUnsafe(o),l=s.allocUnsafe(t.length+4);t.copy(l,0,0,t.length);for(var u=0,d=b[r],z=Math.ceil(o/d),f=1;f<=z;f++){l.writeUInt32BE(f,t.length);for(var O=a.run(l,a.ipad1),A=O,h=1;h<n;h++){A=a.run(A,a.ipad2);for(var m=0;m<d;m++)O[m]^=A[m]}O.copy(c,u),u+=d}return c}},function(e,t,n){var o=n(389),r=n(25).Buffer,a=n(689);function i(e){var t=e._cipher.encryptBlockRaw(e._prev);return a(e._prev),t}t.encrypt=function(e,t){var n=Math.ceil(t.length/16),a=e._cache.length;e._cache=r.concat([e._cache,r.allocUnsafe(16*n)]);for(var p=0;p<n;p++){var s=i(e),c=a+16*p;e._cache.writeUInt32BE(s[0],c+0),e._cache.writeUInt32BE(s[1],c+4),e._cache.writeUInt32BE(s[2],c+8),e._cache.writeUInt32BE(s[3],c+12)}var b=e._cache.slice(0,t.length);return e._cache=e._cache.slice(t.length),o(t,b)}},function(e,t){e.exports=function(e){for(var t,n=e.length;n--;){if(255!==(t=e.readUInt8(n))){t++,e.writeUInt8(t,n);break}e.writeUInt8(0,n)}}},function(e){e.exports={"aes-128-ecb":{cipher:"AES",key:128,iv:0,mode:"ECB",type:"block"},"aes-192-ecb":{cipher:"AES",key:192,iv:0,mode:"ECB",type:"block"},"aes-256-ecb":{cipher:"AES",key:256,iv:0,mode:"ECB",type:"block"},"aes-128-cbc":{cipher:"AES",key:128,iv:16,mode:"CBC",type:"block"},"aes-192-cbc":{cipher:"AES",key:192,iv:16,mode:"CBC",type:"block"},"aes-256-cbc":{cipher:"AES",key:256,iv:16,mode:"CBC",type:"block"},aes128:{cipher:"AES",key:128,iv:16,mode:"CBC",type:"block"},aes192:{cipher:"AES",key:192,iv:16,mode:"CBC",type:"block"},aes256:{cipher:"AES",key:256,iv:16,mode:"CBC",type:"block"},"aes-128-cfb":{cipher:"AES",key:128,iv:16,mode:"CFB",type:"stream"},"aes-192-cfb":{cipher:"AES",key:192,iv:16,mode:"CFB",type:"stream"},"aes-256-cfb":{cipher:"AES",key:256,iv:16,mode:"CFB",type:"stream"},"aes-128-cfb8":{cipher:"AES",key:128,iv:16,mode:"CFB8",type:"stream"},"aes-192-cfb8":{cipher:"AES",key:192,iv:16,mode:"CFB8",type:"stream"},"aes-256-cfb8":{cipher:"AES",key:256,iv:16,mode:"CFB8",type:"stream"},"aes-128-cfb1":{cipher:"AES",key:128,iv:16,mode:"CFB1",type:"stream"},"aes-192-cfb1":{cipher:"AES",key:192,iv:16,mode:"CFB1",type:"stream"},"aes-256-cfb1":{cipher:"AES",key:256,iv:16,mode:"CFB1",type:"stream"},"aes-128-ofb":{cipher:"AES",key:128,iv:16,mode:"OFB",type:"stream"},"aes-192-ofb":{cipher:"AES",key:192,iv:16,mode:"OFB",type:"stream"},"aes-256-ofb":{cipher:"AES",key:256,iv:16,mode:"OFB",type:"stream"},"aes-128-ctr":{cipher:"AES",key:128,iv:16,mode:"CTR",type:"stream"},"aes-192-ctr":{cipher:"AES",key:192,iv:16,mode:"CTR",type:"stream"},"aes-256-ctr":{cipher:"AES",key:256,iv:16,mode:"CTR",type:"stream"},"aes-128-gcm":{cipher:"AES",key:128,iv:12,mode:"GCM",type:"auth"},"aes-192-gcm":{cipher:"AES",key:192,iv:12,mode:"GCM",type:"auth"},"aes-256-gcm":{cipher:"AES",key:256,iv:12,mode:"GCM",type:"auth"}}},function(e,t,n){var o=n(421),r=n(25).Buffer,a=n(135),i=n(19),p=n(816),s=n(389),c=n(689);function b(e,t,n,i){a.call(this);var s=r.alloc(4,0);this._cipher=new o.AES(t);var b=this._cipher.encryptBlock(s);this._ghash=new p(b),n=function(e,t,n){if(12===t.length)return e._finID=r.concat([t,r.from([0,0,0,1])]),r.concat([t,r.from([0,0,0,2])]);var o=new p(n),a=t.length,i=a%16;o.update(t),i&&(i=16-i,o.update(r.alloc(i,0))),o.update(r.alloc(8,0));var s=8*a,b=r.alloc(8);b.writeUIntBE(s,0,8),o.update(b),e._finID=o.state;var M=r.from(e._finID);return c(M),M}(this,n,b),this._prev=r.from(n),this._cache=r.allocUnsafe(0),this._secCache=r.allocUnsafe(0),this._decrypt=i,this._alen=0,this._len=0,this._mode=e,this._authTag=null,this._called=!1}i(b,a),b.prototype._update=function(e){if(!this._called&&this._alen){var t=16-this._alen%16;t<16&&(t=r.alloc(t,0),this._ghash.update(t))}this._called=!0;var n=this._mode.encrypt(this,e);return this._decrypt?this._ghash.update(e):this._ghash.update(n),this._len+=e.length,n},b.prototype._final=function(){if(this._decrypt&&!this._authTag)throw new Error("Unsupported state or unable to authenticate data");var e=s(this._ghash.final(8*this._alen,8*this._len),this._cipher.encryptBlock(this._finID));if(this._decrypt&&function(e,t){var n=0;e.length!==t.length&&n++;for(var o=Math.min(e.length,t.length),r=0;r<o;++r)n+=e[r]^t[r];return n}(e,this._authTag))throw new Error("Unsupported state or unable to authenticate data");this._authTag=e,this._cipher.scrub()},b.prototype.getAuthTag=function(){if(this._decrypt||!r.isBuffer(this._authTag))throw new Error("Attempting to get auth tag in unsupported state");return this._authTag},b.prototype.setAuthTag=function(e){if(!this._decrypt)throw new Error("Attempting to set auth tag in unsupported state");this._authTag=e},b.prototype.setAAD=function(e){if(this._called)throw new Error("Attempting to set AAD in unsupported state");this._ghash.update(e),this._alen+=e.length},e.exports=b},function(e,t,n){var o=n(421),r=n(25).Buffer,a=n(135);function i(e,t,n,i){a.call(this),this._cipher=new o.AES(t),this._prev=r.from(n),this._cache=r.allocUnsafe(0),this._secCache=r.allocUnsafe(0),this._decrypt=i,this._mode=e}n(19)(i,a),i.prototype._update=function(e){return this._mode.encrypt(this,e,this._decrypt)},i.prototype._final=function(){this._cipher.scrub()},e.exports=i},function(e,t,n){var o=n(184);e.exports=O,O.simpleSieve=z,O.fermatTest=f;var r=n(48),a=new r(24),i=new(n(694)),p=new r(1),s=new r(2),c=new r(5),b=(new r(16),new r(8),new r(10)),M=new r(3),l=(new r(7),new r(11)),u=new r(4),d=(new r(12),null);function z(e){for(var t=function(){if(null!==d)return d;var e=[];e[0]=2;for(var t=1,n=3;n<1048576;n+=2){for(var o=Math.ceil(Math.sqrt(n)),r=0;r<t&&e[r]<=o&&n%e[r]!=0;r++);t!==r&&e[r]<=o||(e[t++]=n)}return d=e,e}(),n=0;n<t.length;n++)if(0===e.modn(t[n]))return 0===e.cmpn(t[n]);return!0}function f(e){var t=r.mont(e);return 0===s.toRed(t).redPow(e.subn(1)).fromRed().cmpn(1)}function O(e,t){if(e<16)return new r(2===t||5===t?[140,123]:[140,39]);var n,d;for(t=new r(t);;){for(n=new r(o(Math.ceil(e/8)));n.bitLength()>e;)n.ishrn(1);if(n.isEven()&&n.iadd(p),n.testn(1)||n.iadd(s),t.cmp(s)){if(!t.cmp(c))for(;n.mod(b).cmp(M);)n.iadd(u)}else for(;n.mod(a).cmp(l);)n.iadd(u);if(z(d=n.shrn(1))&&z(n)&&f(d)&&f(n)&&i.test(d)&&i.test(n))return n}}},function(e,t,n){var o=n(48),r=n(695);function a(e){this.rand=e||new r.Rand}e.exports=a,a.create=function(e){return new a(e)},a.prototype._randbelow=function(e){var t=e.bitLength(),n=Math.ceil(t/8);do{var r=new o(this.rand.generate(n))}while(r.cmp(e)>=0);return r},a.prototype._randrange=function(e,t){var n=t.sub(e);return e.add(this._randbelow(n))},a.prototype.test=function(e,t,n){var r=e.bitLength(),a=o.mont(e),i=new o(1).toRed(a);t||(t=Math.max(1,r/48|0));for(var p=e.subn(1),s=0;!p.testn(s);s++);for(var c=e.shrn(s),b=p.toRed(a);t>0;t--){var M=this._randrange(new o(2),p);n&&n(M);var l=M.toRed(a).redPow(c);if(0!==l.cmp(i)&&0!==l.cmp(b)){for(var u=1;u<s;u++){if(0===(l=l.redSqr()).cmp(i))return!1;if(0===l.cmp(b))break}if(u===s)return!1}}return!0},a.prototype.getDivisor=function(e,t){var n=e.bitLength(),r=o.mont(e),a=new o(1).toRed(r);t||(t=Math.max(1,n/48|0));for(var i=e.subn(1),p=0;!i.testn(p);p++);for(var s=e.shrn(p),c=i.toRed(r);t>0;t--){var b=this._randrange(new o(2),i),M=e.gcd(b);if(0!==M.cmpn(1))return M;var l=b.toRed(r).redPow(s);if(0!==l.cmp(a)&&0!==l.cmp(c)){for(var u=1;u<p;u++){if(0===(l=l.redSqr()).cmp(a))return l.fromRed().subn(1).gcd(e);if(0===l.cmp(c))break}if(u===p)return(l=l.redSqr()).fromRed().subn(1).gcd(e)}}return!1}},function(e,t,n){var o;function r(e){this.rand=e}if(e.exports=function(e){return o||(o=new r(null)),o.generate(e)},e.exports.Rand=r,r.prototype.generate=function(e){return this._rand(e)},r.prototype._rand=function(e){if(this.rand.getBytes)return this.rand.getBytes(e);for(var t=new Uint8Array(e),n=0;n<t.length;n++)t[n]=this.rand.getByte();return t},"object"==typeof self)self.crypto&&self.crypto.getRandomValues?r.prototype._rand=function(e){var t=new Uint8Array(e);return self.crypto.getRandomValues(t),t}:self.msCrypto&&self.msCrypto.getRandomValues?r.prototype._rand=function(e){var t=new Uint8Array(e);return self.msCrypto.getRandomValues(t),t}:"object"==typeof window&&(r.prototype._rand=function(){throw new Error("Not implemented yet")});else try{var a=n(821);if("function"!=typeof a.randomBytes)throw new Error("Not supported");r.prototype._rand=function(e){return a.randomBytes(e)}}catch(e){}},function(e,t,n){"use strict";var o=t;function r(e){return 1===e.length?"0"+e:e}function a(e){for(var t="",n=0;n<e.length;n++)t+=r(e[n].toString(16));return t}o.toArray=function(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];var n=[];if("string"!=typeof e){for(var o=0;o<e.length;o++)n[o]=0|e[o];return n}if("hex"===t)for((e=e.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(e="0"+e),o=0;o<e.length;o+=2)n.push(parseInt(e[o]+e[o+1],16));else for(o=0;o<e.length;o++){var r=e.charCodeAt(o),a=r>>8,i=255&r;a?n.push(a,i):n.push(i)}return n},o.zero2=r,o.toHex=a,o.encode=function(e,t){return"hex"===t?a(e):e}},function(e,t,n){"use strict";var o=n(72),r=n(163),a=n(405),i=n(66),p=o.sum32,s=o.sum32_4,c=o.sum32_5,b=a.ch32,M=a.maj32,l=a.s0_256,u=a.s1_256,d=a.g0_256,z=a.g1_256,f=r.BlockHash,O=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function A(){if(!(this instanceof A))return new A;f.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=O,this.W=new Array(64)}o.inherits(A,f),e.exports=A,A.blockSize=512,A.outSize=256,A.hmacStrength=192,A.padLength=64,A.prototype._update=function(e,t){for(var n=this.W,o=0;o<16;o++)n[o]=e[t+o];for(;o<n.length;o++)n[o]=s(z(n[o-2]),n[o-7],d(n[o-15]),n[o-16]);var r=this.h[0],a=this.h[1],f=this.h[2],O=this.h[3],A=this.h[4],h=this.h[5],m=this.h[6],q=this.h[7];for(i(this.k.length===n.length),o=0;o<n.length;o++){var _=c(q,u(A),b(A,h,m),this.k[o],n[o]),W=p(l(r),M(r,a,f));q=m,m=h,h=A,A=p(O,_),O=f,f=a,a=r,r=p(_,W)}this.h[0]=p(this.h[0],r),this.h[1]=p(this.h[1],a),this.h[2]=p(this.h[2],f),this.h[3]=p(this.h[3],O),this.h[4]=p(this.h[4],A),this.h[5]=p(this.h[5],h),this.h[6]=p(this.h[6],m),this.h[7]=p(this.h[7],q)},A.prototype._digest=function(e){return"hex"===e?o.toHex32(this.h,"big"):o.split32(this.h,"big")}},function(e,t,n){"use strict";var o=n(72),r=n(163),a=n(66),i=o.rotr64_hi,p=o.rotr64_lo,s=o.shr64_hi,c=o.shr64_lo,b=o.sum64,M=o.sum64_hi,l=o.sum64_lo,u=o.sum64_4_hi,d=o.sum64_4_lo,z=o.sum64_5_hi,f=o.sum64_5_lo,O=r.BlockHash,A=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function h(){if(!(this instanceof h))return new h;O.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=A,this.W=new Array(160)}function m(e,t,n,o,r){var a=e&n^~e&r;return a<0&&(a+=4294967296),a}function q(e,t,n,o,r,a){var i=t&o^~t&a;return i<0&&(i+=4294967296),i}function _(e,t,n,o,r){var a=e&n^e&r^n&r;return a<0&&(a+=4294967296),a}function W(e,t,n,o,r,a){var i=t&o^t&a^o&a;return i<0&&(i+=4294967296),i}function g(e,t){var n=i(e,t,28)^i(t,e,2)^i(t,e,7);return n<0&&(n+=4294967296),n}function v(e,t){var n=p(e,t,28)^p(t,e,2)^p(t,e,7);return n<0&&(n+=4294967296),n}function y(e,t){var n=i(e,t,14)^i(e,t,18)^i(t,e,9);return n<0&&(n+=4294967296),n}function L(e,t){var n=p(e,t,14)^p(e,t,18)^p(t,e,9);return n<0&&(n+=4294967296),n}function R(e,t){var n=i(e,t,1)^i(e,t,8)^s(e,t,7);return n<0&&(n+=4294967296),n}function E(e,t){var n=p(e,t,1)^p(e,t,8)^c(e,t,7);return n<0&&(n+=4294967296),n}function w(e,t){var n=i(e,t,19)^i(t,e,29)^s(e,t,6);return n<0&&(n+=4294967296),n}function k(e,t){var n=p(e,t,19)^p(t,e,29)^c(e,t,6);return n<0&&(n+=4294967296),n}o.inherits(h,O),e.exports=h,h.blockSize=1024,h.outSize=512,h.hmacStrength=192,h.padLength=128,h.prototype._prepareBlock=function(e,t){for(var n=this.W,o=0;o<32;o++)n[o]=e[t+o];for(;o<n.length;o+=2){var r=w(n[o-4],n[o-3]),a=k(n[o-4],n[o-3]),i=n[o-14],p=n[o-13],s=R(n[o-30],n[o-29]),c=E(n[o-30],n[o-29]),b=n[o-32],M=n[o-31];n[o]=u(r,a,i,p,s,c,b,M),n[o+1]=d(r,a,i,p,s,c,b,M)}},h.prototype._update=function(e,t){this._prepareBlock(e,t);var n=this.W,o=this.h[0],r=this.h[1],i=this.h[2],p=this.h[3],s=this.h[4],c=this.h[5],u=this.h[6],d=this.h[7],O=this.h[8],A=this.h[9],h=this.h[10],R=this.h[11],E=this.h[12],w=this.h[13],k=this.h[14],B=this.h[15];a(this.k.length===n.length);for(var T=0;T<n.length;T+=2){var S=k,N=B,X=y(O,A),C=L(O,A),D=m(O,0,h,0,E),P=q(0,A,0,R,0,w),x=this.k[T],H=this.k[T+1],F=n[T],j=n[T+1],Y=z(S,N,X,C,D,P,x,H,F,j),I=f(S,N,X,C,D,P,x,H,F,j);S=g(o,r),N=v(o,r),X=_(o,0,i,0,s),C=W(0,r,0,p,0,c);var U=M(S,N,X,C),V=l(S,N,X,C);k=E,B=w,E=h,w=R,h=O,R=A,O=M(u,d,Y,I),A=l(d,d,Y,I),u=s,d=c,s=i,c=p,i=o,p=r,o=M(Y,I,U,V),r=l(Y,I,U,V)}b(this.h,0,o,r),b(this.h,2,i,p),b(this.h,4,s,c),b(this.h,6,u,d),b(this.h,8,O,A),b(this.h,10,h,R),b(this.h,12,E,w),b(this.h,14,k,B)},h.prototype._digest=function(e){return"hex"===e?o.toHex32(this.h,"big"):o.split32(this.h,"big")}},function(e,t,n){var o=n(19),r=n(391).Reporter,a=n(57).Buffer;function i(e,t){r.call(this,t),a.isBuffer(e)?(this.base=e,this.offset=0,this.length=e.length):this.error("Input not Buffer")}function p(e,t){if(Array.isArray(e))this.length=0,this.value=e.map(function(e){return e instanceof p||(e=new p(e,t)),this.length+=e.length,e},this);else if("number"==typeof e){if(!(0<=e&&e<=255))return t.error("non-byte EncoderBuffer value");this.value=e,this.length=1}else if("string"==typeof e)this.value=e,this.length=a.byteLength(e);else{if(!a.isBuffer(e))return t.error("Unsupported type: "+typeof e);this.value=e,this.length=e.length}}o(i,r),t.DecoderBuffer=i,i.prototype.save=function(){return{offset:this.offset,reporter:r.prototype.save.call(this)}},i.prototype.restore=function(e){var t=new i(this.base);return t.offset=e.offset,t.length=this.offset,this.offset=e.offset,r.prototype.restore.call(this,e.reporter),t},i.prototype.isEmpty=function(){return this.offset===this.length},i.prototype.readUInt8=function(e){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error(e||"DecoderBuffer overrun")},i.prototype.skip=function(e,t){if(!(this.offset+e<=this.length))return this.error(t||"DecoderBuffer overrun");var n=new i(this.base);return n._reporterState=this._reporterState,n.offset=this.offset,n.length=this.offset+e,this.offset+=e,n},i.prototype.raw=function(e){return this.base.slice(e?e.offset:this.offset,this.length)},t.EncoderBuffer=p,p.prototype.join=function(e,t){return e||(e=new a(this.length)),t||(t=0),0===this.length?e:(Array.isArray(this.value)?this.value.forEach(function(n){n.join(e,t),t+=n.length}):("number"==typeof this.value?e[t]=this.value:"string"==typeof this.value?e.write(this.value,t):a.isBuffer(this.value)&&this.value.copy(e,t),t+=this.length),e)}},function(e,t,n){var o=t;o._reverse=function(e){var t={};return Object.keys(e).forEach(function(n){(0|n)==n&&(n|=0);var o=e[n];t[o]=n}),t},o.der=n(852)},function(e,t,n){var o=n(19),r=n(390),a=r.base,i=r.bignum,p=r.constants.der;function s(e){this.enc="der",this.name=e.name,this.entity=e,this.tree=new c,this.tree._init(e.body)}function c(e){a.Node.call(this,"der",e)}function b(e,t){var n=e.readUInt8(t);if(e.isError(n))return n;var o=p.tagClass[n>>6],r=0==(32&n);if(31==(31&n)){var a=n;for(n=0;128==(128&a);){if(a=e.readUInt8(t),e.isError(a))return a;n<<=7,n|=127&a}}else n&=31;return{cls:o,primitive:r,tag:n,tagStr:p.tag[n]}}function M(e,t,n){var o=e.readUInt8(n);if(e.isError(o))return o;if(!t&&128===o)return null;if(0==(128&o))return o;var r=127&o;if(r>4)return e.error("length octect is too long");o=0;for(var a=0;a<r;a++){o<<=8;var i=e.readUInt8(n);if(e.isError(i))return i;o|=i}return o}e.exports=s,s.prototype.decode=function(e,t){return e instanceof a.DecoderBuffer||(e=new a.DecoderBuffer(e,t)),this.tree._decode(e,t)},o(c,a.Node),c.prototype._peekTag=function(e,t,n){if(e.isEmpty())return!1;var o=e.save(),r=b(e,'Failed to peek tag: "'+t+'"');return e.isError(r)?r:(e.restore(o),r.tag===t||r.tagStr===t||r.tagStr+"of"===t||n)},c.prototype._decodeTag=function(e,t,n){var o=b(e,'Failed to decode tag of "'+t+'"');if(e.isError(o))return o;var r=M(e,o.primitive,'Failed to get length of "'+t+'"');if(e.isError(r))return r;if(!n&&o.tag!==t&&o.tagStr!==t&&o.tagStr+"of"!==t)return e.error('Failed to match tag: "'+t+'"');if(o.primitive||null!==r)return e.skip(r,'Failed to match body of: "'+t+'"');var a=e.save(),i=this._skipUntilEnd(e,'Failed to skip indefinite length body: "'+this.tag+'"');return e.isError(i)?i:(r=e.offset-a.offset,e.restore(a),e.skip(r,'Failed to match body of: "'+t+'"'))},c.prototype._skipUntilEnd=function(e,t){for(;;){var n=b(e,t);if(e.isError(n))return n;var o,r=M(e,n.primitive,t);if(e.isError(r))return r;if(o=n.primitive||null!==r?e.skip(r):this._skipUntilEnd(e,t),e.isError(o))return o;if("end"===n.tagStr)break}},c.prototype._decodeList=function(e,t,n,o){for(var r=[];!e.isEmpty();){var a=this._peekTag(e,"end");if(e.isError(a))return a;var i=n.decode(e,"der",o);if(e.isError(i)&&a)break;r.push(i)}return r},c.prototype._decodeStr=function(e,t){if("bitstr"===t){var n=e.readUInt8();return e.isError(n)?n:{unused:n,data:e.raw()}}if("bmpstr"===t){var o=e.raw();if(o.length%2==1)return e.error("Decoding of string type: bmpstr length mismatch");for(var r="",a=0;a<o.length/2;a++)r+=String.fromCharCode(o.readUInt16BE(2*a));return r}if("numstr"===t){var i=e.raw().toString("ascii");return this._isNumstr(i)?i:e.error("Decoding of string type: numstr unsupported characters")}if("octstr"===t)return e.raw();if("objDesc"===t)return e.raw();if("printstr"===t){var p=e.raw().toString("ascii");return this._isPrintstr(p)?p:e.error("Decoding of string type: printstr unsupported characters")}return/str$/.test(t)?e.raw().toString():e.error("Decoding of string type: "+t+" unsupported")},c.prototype._decodeObjid=function(e,t,n){for(var o,r=[],a=0;!e.isEmpty();){var i=e.readUInt8();a<<=7,a|=127&i,0==(128&i)&&(r.push(a),a=0)}128&i&&r.push(a);var p=r[0]/40|0,s=r[0]%40;if(o=n?r:[p,s].concat(r.slice(1)),t){var c=t[o.join(" ")];void 0===c&&(c=t[o.join(".")]),void 0!==c&&(o=c)}return o},c.prototype._decodeTime=function(e,t){var n=e.raw().toString();if("gentime"===t)var o=0|n.slice(0,4),r=0|n.slice(4,6),a=0|n.slice(6,8),i=0|n.slice(8,10),p=0|n.slice(10,12),s=0|n.slice(12,14);else{if("utctime"!==t)return e.error("Decoding "+t+" time is not supported yet");o=0|n.slice(0,2),r=0|n.slice(2,4),a=0|n.slice(4,6),i=0|n.slice(6,8),p=0|n.slice(8,10),s=0|n.slice(10,12),o=o<70?2e3+o:1900+o}return Date.UTC(o,r-1,a,i,p,s,0)},c.prototype._decodeNull=function(e){return null},c.prototype._decodeBool=function(e){var t=e.readUInt8();return e.isError(t)?t:0!==t},c.prototype._decodeInt=function(e,t){var n=e.raw(),o=new i(n);return t&&(o=t[o.toString(10)]||o),o},c.prototype._use=function(e,t){return"function"==typeof e&&(e=e(t)),e._getDecoder("der").tree}},function(e,t,n){var o=n(19),r=n(57).Buffer,a=n(390),i=a.base,p=a.constants.der;function s(e){this.enc="der",this.name=e.name,this.entity=e,this.tree=new c,this.tree._init(e.body)}function c(e){i.Node.call(this,"der",e)}function b(e){return e<10?"0"+e:e}e.exports=s,s.prototype.encode=function(e,t){return this.tree._encode(e,t).join()},o(c,i.Node),c.prototype._encodeComposite=function(e,t,n,o){var a,i=function(e,t,n,o){var r;if("seqof"===e?e="seq":"setof"===e&&(e="set"),p.tagByName.hasOwnProperty(e))r=p.tagByName[e];else{if("number"!=typeof e||(0|e)!==e)return o.error("Unknown tag: "+e);r=e}return r>=31?o.error("Multi-octet tag encoding unsupported"):(t||(r|=32),r|p.tagClassByName[n||"universal"]<<6)}(e,t,n,this.reporter);if(o.length<128)return(a=new r(2))[0]=i,a[1]=o.length,this._createEncoderBuffer([a,o]);for(var s=1,c=o.length;c>=256;c>>=8)s++;(a=new r(2+s))[0]=i,a[1]=128|s,c=1+s;for(var b=o.length;b>0;c--,b>>=8)a[c]=255&b;return this._createEncoderBuffer([a,o])},c.prototype._encodeStr=function(e,t){if("bitstr"===t)return this._createEncoderBuffer([0|e.unused,e.data]);if("bmpstr"===t){for(var n=new r(2*e.length),o=0;o<e.length;o++)n.writeUInt16BE(e.charCodeAt(o),2*o);return this._createEncoderBuffer(n)}return"numstr"===t?this._isNumstr(e)?this._createEncoderBuffer(e):this.reporter.error("Encoding of string type: numstr supports only digits and space"):"printstr"===t?this._isPrintstr(e)?this._createEncoderBuffer(e):this.reporter.error("Encoding of string type: printstr supports only latin upper and lower case letters, digits, space, apostrophe, left and rigth parenthesis, plus sign, comma, hyphen, dot, slash, colon, equal sign, question mark"):/str$/.test(t)?this._createEncoderBuffer(e):"objDesc"===t?this._createEncoderBuffer(e):this.reporter.error("Encoding of string type: "+t+" unsupported")},c.prototype._encodeObjid=function(e,t,n){if("string"==typeof e){if(!t)return this.reporter.error("string objid given, but no values map found");if(!t.hasOwnProperty(e))return this.reporter.error("objid not found in values map");e=t[e].split(/[\s\.]+/g);for(var o=0;o<e.length;o++)e[o]|=0}else if(Array.isArray(e))for(e=e.slice(),o=0;o<e.length;o++)e[o]|=0;if(!Array.isArray(e))return this.reporter.error("objid() should be either array or string, got: "+JSON.stringify(e));if(!n){if(e[1]>=40)return this.reporter.error("Second objid identifier OOB");e.splice(0,2,40*e[0]+e[1])}var a=0;for(o=0;o<e.length;o++){var i=e[o];for(a++;i>=128;i>>=7)a++}var p=new r(a),s=p.length-1;for(o=e.length-1;o>=0;o--)for(i=e[o],p[s--]=127&i;(i>>=7)>0;)p[s--]=128|127&i;return this._createEncoderBuffer(p)},c.prototype._encodeTime=function(e,t){var n,o=new Date(e);return"gentime"===t?n=[b(o.getFullYear()),b(o.getUTCMonth()+1),b(o.getUTCDate()),b(o.getUTCHours()),b(o.getUTCMinutes()),b(o.getUTCSeconds()),"Z"].join(""):"utctime"===t?n=[b(o.getFullYear()%100),b(o.getUTCMonth()+1),b(o.getUTCDate()),b(o.getUTCHours()),b(o.getUTCMinutes()),b(o.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+t+" time is not supported yet"),this._encodeStr(n,"octstr")},c.prototype._encodeNull=function(){return this._createEncoderBuffer("")},c.prototype._encodeInt=function(e,t){if("string"==typeof e){if(!t)return this.reporter.error("String int or enum given, but no values map");if(!t.hasOwnProperty(e))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(e));e=t[e]}if("number"!=typeof e&&!r.isBuffer(e)){var n=e.toArray();!e.sign&&128&n[0]&&n.unshift(0),e=new r(n)}if(r.isBuffer(e)){var o=e.length;0===e.length&&o++;var a=new r(o);return e.copy(a),0===e.length&&(a[0]=0),this._createEncoderBuffer(a)}if(e<128)return this._createEncoderBuffer(e);if(e<256)return this._createEncoderBuffer([0,e]);o=1;for(var i=e;i>=256;i>>=8)o++;for(i=(a=new Array(o)).length-1;i>=0;i--)a[i]=255&e,e>>=8;return 128&a[0]&&a.unshift(0),this._createEncoderBuffer(new r(a))},c.prototype._encodeBool=function(e){return this._createEncoderBuffer(e?255:0)},c.prototype._use=function(e,t){return"function"==typeof e&&(e=e(t)),e._getEncoder("der").tree},c.prototype._skipDefault=function(e,t,n){var o,r=this._baseState;if(null===r.default)return!1;var a=e.join();if(void 0===r.defaultBuffer&&(r.defaultBuffer=this._encodeValue(r.default,t,n).join()),a.length!==r.defaultBuffer.length)return!1;for(o=0;o<a.length;o++)if(a[o]!==r.defaultBuffer[o])return!1;return!0}},function(e){e.exports={"1.3.132.0.10":"secp256k1","1.3.132.0.33":"p224","1.2.840.10045.3.1.1":"p192","1.2.840.10045.3.1.7":"p256","1.3.132.0.34":"p384","1.3.132.0.35":"p521"}},function(e,t,n){var o=n(387),r=n(25).Buffer;function a(e){var t=r.allocUnsafe(4);return t.writeUInt32BE(e,0),t}e.exports=function(e,t){for(var n,i=r.alloc(0),p=0;i.length<t;)n=a(p++),i=r.concat([i,o("sha1").update(e).update(n).digest()]);return i.slice(0,t)}},function(e,t){e.exports=function(e,t){for(var n=e.length,o=-1;++o<n;)e[o]^=t[o];return e}},function(e,t,n){var o=n(48),r=n(25).Buffer;e.exports=function(e,t){return r.from(e.toRed(o.mont(t.modulus)).redPow(new o(t.publicExponent)).fromRed().toArray())}},function(e,t,n){"use strict";t.__esModule=!0;var o=a(n(868)),r=a(n(871));function a(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t){if(Array.isArray(e))return e;if((0,o.default)(Object(e)))return function(e,t){var n=[],o=!0,a=!1,i=void 0;try{for(var p,s=(0,r.default)(e);!(o=(p=s.next()).done)&&(n.push(p.value),!t||n.length!==t);o=!0);}catch(e){a=!0,i=e}finally{try{!o&&s.return&&s.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=l(n(3)),r=l(n(4)),a=l(n(7)),i=l(n(5)),p=l(n(6)),s=l(n(1)),c=l(n(2)),b=l(n(12)),M=l(n(17));function l(e){return e&&e.__esModule?e:{default:e}}n(880);var u=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){var e=(0,b.default)(this.props.className,"dops-section-header");return c.default.createElement(M.default,{compact:!0,className:e},c.default.createElement("div",{className:"dops-section-header__label"},c.default.createElement("span",{className:"dops-section-header__label-text"},this.props.label)),c.default.createElement("div",{className:"dops-section-header__actions"},this.props.children))}}]),t}(c.default.Component);u.displayName="SectionHeader",u.propTypes={label:s.default.string},u.defaultProps={label:""},t.default=u,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=g(n(3)),r=g(n(4)),a=g(n(7)),i=g(n(5)),p=g(n(6)),s=g(n(1)),c=g(n(2)),b=n(9),M=n(8),l=g(n(33)),u=g(n(136)),d=g(n(13)),z=g(n(22)),f=n(21),O=g(n(419)),A=g(n(650)),h=g(n(710)),m=n(20),q=n(103),_=n(52),W=n(42);function g(e){return e&&e.__esModule?e:{default:e}}var v=function(e,t){return function(){return function(e,t){return d.default.tracks.recordJetpackClick({target:"pro-status",type:e,feature:t})}(e,t)}},y=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,b=Array(s),d=0;d<s;d++)b[d]=arguments[d];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(b))),a.getProActions=function(e,t){var n="",o=!1,r=!1,i="";switch(e){case"threats":n="is-error",a.props.isCompact?r=(0,M.translate)("Threats",{context:"A caption for a small button to fix security issues."}):(o=(0,M.translate)("Threats found!",{context:"Short warning message about new threats found."}),r=(0,M.translate)("FIX",{context:"A caption for a small button to fix security issues."})),i="https://dashboard.vaultpress.com/";break;case"free":case"personal":e="upgrade",n="is-warning",a.props.isCompact||(o=(0,M.translate)("No scanning",{context:"Short warning message about site having no security scan."})),r=(0,M.translate)("Upgrade",{context:"Caption for a button to purchase a paid feature."}),i=a.props.paidFeatureUpgradeUrl;break;case"pro":e="upgrade",n="is-warning",r=(0,M.translate)("Upgrade",{context:"Caption for a button to purchase a pro plan."}),i=a.props.planProUpgradeUrl;break;case"secure":n="is-success",o=(0,M.translate)("Secure",{context:"Short message informing user that the site is secure."});break;case"invalid_key":n="is-warning",r=(0,M.translate)("Invalid key",{context:"Short warning message about an invalid key being used for Akismet."}),i=a.props.siteAdminUrl+"admin.php?page=akismet-key-config";break;case"rewind_connected":return c.default.createElement(u.default,{showDismiss:!1,status:"is-success",isCompact:!0},(0,M.translate)("Connected"));case"active":return c.default.createElement("span",{className:"jp-dash-item__active-label"},(0,M.translate)("ACTIVE"))}return c.default.createElement(u.default,{showDismiss:!1,status:n,isCompact:!0},o,r&&c.default.createElement("a",{className:"dops-notice__text-no-underline",onClick:v(e,t),href:i},r))},a.getSetUpButton=function(e){return c.default.createElement(l.default,{onClick:v("set_up",e),compact:!0,primary:!0,href:"https://wordpress.com/plugins/setup/"+a.props.siteRawUrl+"?only="+e},(0,M.translate)("Set up",{context:"Caption for a button to set up a feature."}))},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){var e=this,t=this.props.sitePlan(),n=this.props.getVaultPressData(),o="";"scan"!==this.props.proFeature&&"backups"!==this.props.proFeature&&"vaultpress"!==this.props.proFeature||(o="vaultpress/vaultpress.php"),"akismet"===this.props.proFeature&&(o="akismet/akismet.php");var r=/jetpack_personal*/.test(t.product_slug),a=/jetpack_free*/.test(t.product_slug),i=/jetpack_premium*/.test(t.product_slug),p=(0,z.default)(n,["data","features","backups"],!1),s=(0,z.default)(n,["data","features","security"],!1);return c.default.createElement("div",null,c.default.createElement(O.default,null),c.default.createElement(h.default,null),c.default.createElement(A.default,null),!this.props.isDevMode&&function(c,b,M){switch(c){case"rewind":return e.getProActions("rewind_connected","rewind");case"backups":if(a&&!p&&e.props.isCompact)return e.getProActions("free","backups");break;case"scan":if(e.props.fetchingSiteData||e.props.isFetchingVaultPressData)return"";if((a||r)&&!s)return e.props.isCompact?e.getProActions("free","scan"):r&&!p?e.getSetUpButton("backups"):"";if("N/A"!==n)return s?e.getProActions(0===e.props.getScanThreats()?"secure":"threats","scan"):e.getSetUpButton("scan");break;case"search":return a||r||i?e.getProActions("pro"):"";case"akismet":if(a&&(!b||!M))return e.props.isCompact?e.getProActions("free","anti-spam"):"";if(!e.props.isAkismetKeyValid&&!e.props.fetchingAkismetData&&b&&M)return e.getProActions("invalid_key","anti-spam")}return t.product_slug&&o&&!a?b&&M?e.getProActions("active"):e.getSetUpButton(c):""}(this.props.proFeature,this.props.pluginActive(o),this.props.pluginInstalled(o)))}}]),t}(c.default.Component);y.propTypes={isCompact:s.default.bool,proFeature:s.default.string},y.defaultProps={isCompact:!0,proFeature:""},t.default=(0,b.connect)(function(e){return{siteRawUrl:(0,f.getSiteRawUrl)(e),siteAdminUrl:(0,f.getSiteAdminUrl)(e),getScanThreats:function(){return(0,_.getVaultPressScanThreatCount)(e)},getVaultPressData:function(){return(0,_.getVaultPressData)(e)},getAkismetData:function(){return(0,_.getAkismetData)(e)},isFetchingVaultPressData:(0,_.isFetchingVaultPressData)(e),sitePlan:function(){return(0,W.getSitePlan)(e)},fetchingPluginsData:(0,q.isFetchingPluginsData)(e),pluginActive:function(t){return(0,q.isPluginActive)(e,t)},pluginInstalled:function(t){return(0,q.isPluginInstalled)(e,t)},isDevMode:(0,m.isDevMode)(e),fetchingSiteData:(0,W.isFetchingSiteData)(e),isAkismetKeyValid:(0,_.isAkismetKeyValid)(e),fetchingAkismetData:(0,_.isFetchingAkismetData)(e),paidFeatureUpgradeUrl:(0,f.getUpgradeUrl)(e,"upgrade"),planProUpgradeUrl:(0,f.getUpgradeUrl)(e,"plans-business")}})(y),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=l(n(3)),r=l(n(4)),a=l(n(7)),i=l(n(5)),p=l(n(6)),s=n(2),c=n(9),b=n(15),M=n(52);function l(e){return e&&e.__esModule?e:{default:e}}var u=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"UNSAFE_componentWillMount",value:function(){this.props.isCheckingAkismetKey||this.props.checkAkismetKey()}},{key:"render",value:function(){return null}}]),t}(s.Component);u.defaultProps={checkAkismetKey:function(){}},t.default=(0,c.connect)(function(e){return{checkAkismetKey:(0,M.checkAkismetKey)(),isCheckingAkismetKey:(0,M.isCheckingAkismetKey)(e)}},function(e){return(0,b.bindActionCreators)({checkAkismetKey:M.checkAkismetKey},e)})(u),e.exports=t.default},function(e,t){var n=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");e.exports=function(e){return n.test(e)}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=z(n(3)),r=z(n(4)),a=z(n(7)),i=z(n(5)),p=z(n(6)),s=z(n(1)),c=n(2),b=z(c),M=n(8),l=z(n(13)),u=z(n(889)),d=z(n(186));function z(e){return e&&e.__esModule?e:{default:e}}n(892);var f=function(e){function t(){(0,r.default)(this,t);var e=(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments));return e.getModule=e.getModule.bind(e),e.trackInfoClick=e.trackInfoClick.bind(e),e.trackLearnMoreClick=e.trackLearnMoreClick.bind(e),e.trackPrivacyInfoClick=e.trackPrivacyInfoClick.bind(e),e}return(0,p.default)(t,e),(0,a.default)(t,[{key:"getModule",value:function(){return this.props.module||{}}},{key:"trackInfoClick",value:function(){l.default.tracks.recordJetpackClick({target:"info-icon",feature:this.getModule().module})}},{key:"trackLearnMoreClick",value:function(){l.default.tracks.recordJetpackClick({target:"learn-more",feature:this.getModule().module})}},{key:"trackPrivacyInfoClick",value:function(){l.default.tracks.recordJetpackClick({target:"privacy-info",feature:this.getModule().module})}},{key:"render",value:function(){var e=this.props,t=e.text,n=e.link,o=this.props.privacyLink;return!o&&n&&(o=n+"#privacy"),b.default.createElement("div",{className:"jp-support-info"},b.default.createElement(u.default,{position:"left",onClick:this.trackInfoClick,screenReaderText:(0,M.translate)("Learn more")},t+" ",b.default.createElement("span",{className:"jp-support-info__learn-more"},b.default.createElement(d.default,{href:n,onClick:this.trackLearnMoreClick,target:"_blank",rel:"noopener noreferrer"},(0,M.translate)("Learn more"))),b.default.createElement("span",{className:"jp-support-info__privacy"},b.default.createElement(d.default,{href:o,onClick:this.trackPrivacyInfoClick,target:"_blank",rel:"noopener noreferrer"},(0,M.translate)("Privacy information")))))}}]),t}(c.Component);f.propTypes={module:s.default.object,text:s.default.string,link:s.default.string,privacyLink:s.default.string},f.defaultProps={module:void 0,text:"",link:"",privacyLink:""},t.default=f,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=s(n(3)),r=s(n(4)),a=s(n(7)),i=s(n(5)),p=s(n(6));function s(e){return e&&e.__esModule?e:{default:e}}var c=n(2),b=n(23),M=n(12),l=n(17),u=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){var e=b({},this.props,{className:M(this.props.className,"is-compact")});return c.createElement(l,e,this.props.children)}}]),t}(c.Component);u.displayName="CompactCard",t.default=u,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=c(n(10)),r=c(n(3)),a=c(n(4)),i=c(n(7)),p=c(n(5)),s=c(n(6));function c(e){return e&&e.__esModule?e:{default:e}}var b=n(2),M=n(12),l=n(85);n(917);var u=function(e){function t(){return(0,a.default)(this,t),(0,p.default)(this,(t.__proto__||(0,r.default)(t)).apply(this,arguments))}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){return b.createElement("textarea",(0,o.default)({},l(this.props,"className"),{className:M(this.props.className,"dops-textarea")}),this.props.children)}}]),t}(b.Component);u.displayName="Textarea",t.default=u,e.exports=t.default},function(e,t,n){"use strict";var o=n(123).EventEmitter,r=n(23);e.exports=function(e){r(e,o.prototype),e.emitChange=function(){this.emit("change")},e.off=e.removeListener}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,r=(o=n(10))&&o.__esModule?o:{default:o},a=p(n(410)),i=p(n(950));function p(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}var s=(0,r.default)({},a,i);t.default=s,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=N(n(10)),r=N(n(3)),a=N(n(4)),i=N(n(7)),p=N(n(5)),s=N(n(6)),c=N(n(707)),b=n(2),M=N(b),l=n(9),u=n(8),d=N(n(13)),z=N(n(951)),f=N(n(22)),O=n(27),A=N(n(718)),h=N(n(952)),m=N(n(953)),q=N(n(965)),_=N(n(967)),W=N(n(968)),g=N(n(969)),v=N(n(971)),y=N(n(972)),L=N(n(974)),R=N(n(975)),E=N(n(976)),w=N(n(419)),k=N(n(125)),B=n(21),T=n(20),S=n(24);function N(e){return e&&e.__esModule?e:{default:e}}var X=function(e){function t(){var e,n,o,i;(0,a.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=o=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(c))),o.trackSecurityClick=function(){return d.default.tracks.recordJetpackClick("aag_manage_security_wpcom")},i=n,(0,p.default)(o,i)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e={updateOptions:this.props.updateOptions,getOptionValue:this.props.getOptionValue,isUpdating:this.props.isUpdating},t={siteAdminUrl:this.props.siteAdminUrl,siteRawUrl:this.props.siteRawUrl},n=M.default.createElement(A.default,{key:"securityHeader",label:(0,u.translate)("Security"),settingsPath:this.props.userCanManageModules?"#security":void 0,externalLink:this.props.isDevMode||!this.props.userCanManageModules?"":(0,u.translate)("Manage security settings"),externalLinkPath:this.props.isDevMode?"":"#/security",externalLinkClick:this.trackSecurityClick}),r=M.default.createElement("div",null,M.default.createElement(A.default,{label:(0,u.translate)("Connections")}),M.default.createElement(E.default,null)),a="active"===(0,f.default)(this.props.rewindStatus,["state"],!1),i=[M.default.createElement(W.default,(0,o.default)({},e,{siteRawUrl:this.props.siteRawUrl,isRewindActive:a})),M.default.createElement(v.default,(0,o.default)({},e,{siteRawUrl:this.props.siteRawUrl,isRewindActive:a})),M.default.createElement(g.default,t),M.default.createElement(y.default,(0,o.default)({},e,t))];if("inactive"!==this.props.getModuleOverride("protect")&&i.push(M.default.createElement(q.default,e)),"inactive"!==this.props.getModuleOverride("monitor")&&i.push(M.default.createElement(_.default,e)),a&&i.unshift(M.default.createElement(h.default,(0,o.default)({},e,{siteRawUrl:this.props.siteRawUrl}))),this.props.userCanManageModules){var p=[{header:n,cards:i}],s=[];return"inactive"!==this.props.getModuleOverride("photon")&&s.push(M.default.createElement(L.default,e)),"inactive"!==this.props.getModuleOverride("search")&&s.push(M.default.createElement(R.default,e)),s.length&&p.push({header:M.default.createElement(A.default,{key:"performanceHeader",label:(0,u.translate)("Performance")}),cards:s}),M.default.createElement("div",{className:"jp-at-a-glance"},M.default.createElement(w.default,null),M.default.createElement(k.default,null),M.default.createElement(m.default,(0,o.default)({},e,t)),p.map(function(e,t){return[e.header,(0,z.default)(e.cards,2).map(function(e,n){var o=(0,c.default)(e,2),r=o[0],a=o[1];return M.default.createElement("div",{className:"jp-at-a-glance__item-grid",key:"card-"+t+"-"+n},M.default.createElement("div",{className:"jp-at-a-glance__left"},r),M.default.createElement("div",{className:"jp-at-a-glance__right"},a))})]}),r)}var b="";this.props.userCanViewStats&&(b=M.default.createElement(m.default,(0,o.default)({},e,t)));var l="";return this.props.getOptionValue("protect")&&(l=M.default.createElement(q.default,e)),this.props.userIsSubscriber?M.default.createElement("div",null,b,r):M.default.createElement("div",null,b,this.props.getOptionValue("protect")&&n,l,r)}}]),t}(b.Component);t.default=(0,l.connect)(function(e){return{userCanManageModules:(0,B.userCanManageModules)(e),userCanViewStats:(0,B.userCanViewStats)(e),userIsSubscriber:(0,B.userIsSubscriber)(e),isDevMode:(0,T.isDevMode)(e),getModuleOverride:function(t){return(0,S.getModuleOverride)(e,t)}}})((0,O.withModuleSettingsFormHelpers)(X)),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DashSectionHeader=void 0;var o=l(n(3)),r=l(n(4)),a=l(n(7)),i=l(n(5)),p=l(n(6)),s=l(n(1)),c=l(n(2)),b=l(n(12)),M=l(n(13));function l(e){return e&&e.__esModule?e:{default:e}}var u=t.DashSectionHeader=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.trackCogClick=function(){M.default.tracks.recordJetpackClick({target:"settings-cog",group:"security",page:"aag"})},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){var e=void 0,t=void 0,n=(0,b.default)(this.props.className,"jp-dash-section-header");return this.props.externalLink&&(e=c.default.createElement("a",{className:"jp-dash-section-header__external-link",href:this.props.externalLinkPath,onClick:this.props.externalLinkClick},this.props.externalLink)),this.props.children&&(t=c.default.createElement("div",{className:"jp-dash-section-header__children"},this.props.children)),c.default.createElement("div",{className:n},c.default.createElement("div",{className:"jp-dash-section-header__label"},c.default.createElement("h2",{className:"jp-dash-section-header__name"},this.props.label)),e,t)}}]),t}(c.default.Component);u.displayName="DashSectionHeader",u.propTypes={label:s.default.string.isRequired,settingsPath:s.default.string,externalLinkPath:s.default.string,externalLink:s.default.string,externalLinkClick:s.default.func},u.defaultProps={label:"",settingsPath:"",externalLinkPath:"",externalLink:""},t.default=u},function(e,t,n){var o=n(417),r=n(34);e.exports=function(e,t,n){var a=!0,i=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return r(n)&&(a="leading"in n?!!n.leading:a,i="trailing"in n?!!n.trailing:i),o(e,t,{leading:a,maxWait:t,trailing:i})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=u(n(3)),r=u(n(4)),a=u(n(7)),i=u(n(5)),p=u(n(6)),s=n(2),c=u(s),b=u(n(1)),M=n(9),l=n(21);function u(e){return e&&e.__esModule?e:{default:e}}var d=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){return c.default.createElement("a",{href:this.props.upgradeUrl,target:"_blank",rel:"noopener noreferrer"},this.props.children)}}]),t}(s.PureComponent);d.propTypes={source:b.default.string.isRequired,upgradeUrl:b.default.string.isRequired},t.default=(0,M.connect)(function(e,t){var n=t.source;return{upgradeUrl:(0,l.getUpgradeUrl)(e,n)}})(d),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=M(n(3)),r=M(n(4)),a=M(n(7)),i=M(n(5)),p=M(n(6)),s=M(n(2)),c=n(8),b=M(n(430));function M(e){return e&&e.__esModule?e:{default:e}}var l=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){return s.default.createElement("div",null,s.default.createElement("p",null,(0,c.translate)("VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ")),s.default.createElement(b.default,{module_slug:"videopress"}))}}]),t}(s.default.Component);t.default=l,e.exports=t.default},function(e,t,n){"use strict";var o=d(n(126)),r=d(n(2)),a=n(9),i=n(395),p=n(168),s=n(659),c=(d(n(23)),d(n(22))),b=d(n(727)),M=d(n(480)),l=d(n(8)),u=d(n(728));function d(e){return e&&e.__esModule?e:{default:e}}!function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);t.default=e}(n(14)),(0,b.default)();var z=window.Initial_State;z.locale=JSON.parse(z.locale),z.locale=(0,c.default)(z.locale,["locale_data","jetpack"],{}),void 0!==z.locale[""]?(z.locale[""].localeSlug=z.localeSlug,Number.prototype.realToLocaleString=Number.prototype.toLocaleString,Number.prototype.toLocaleString=function(e,t){return e=e||z.localeSlug,t=t||{},this.realToLocaleString(e,t)}):z.locale={"":{localeSlug:z.localeSlug}},l.default.setLocale(z.locale);var f=(0,i.useRouterHistory)(s.createHashHistory)(),O=(0,p.syncHistoryWithStore)(f,M.default);!function(){var e=document.getElementById("jp-plugin-container");null!==e&&o.default.render(r.default.createElement("div",null,r.default.createElement(a.Provider,{store:M.default},r.default.createElement(i.Router,{history:O},r.default.createElement(i.Route,{path:"/",name:l.default.translate("At A Glance",{context:"Navigation item."}),component:u.default}),r.default.createElement(i.Route,{path:"/dashboard",name:l.default.translate("At A Glance"),component:u.default}),r.default.createElement(i.Route,{path:"/my-plan",name:l.default.translate("My Plan",{context:"Navigation item."}),component:u.default}),r.default.createElement(i.Route,{path:"/plans",name:l.default.translate("Plans",{context:"Navigation item."}),component:u.default}),r.default.createElement(i.Route,{path:"/settings",name:l.default.translate("Settings",{context:"Navigation item."}),component:u.default}),r.default.createElement(i.Route,{path:"/discussion",name:l.default.translate("Discussion",{context:"Navigation item."}),component:u.default}),r.default.createElement(i.Route,{path:"/security",name:l.default.translate("Security",{context:"Navigation item."}),component:u.default}),r.default.createElement(i.Route,{path:"/performance",name:l.default.translate("Performance",{context:"Navigation item."}),component:u.default}),r.default.createElement(i.Route,{path:"/traffic",name:l.default.translate("Traffic",{context:"Navigation item."}),component:u.default}),r.default.createElement(i.Route,{path:"/writing",name:l.default.translate("Writing",{context:"Navigation item."}),component:u.default}),r.default.createElement(i.Route,{path:"/sharing",name:l.default.translate("Sharing",{context:"Navigation item."}),component:u.default}),r.default.createElement(i.Route,{path:"/wpbody-content",component:u.default}),r.default.createElement(i.Route,{path:"/wp-toolbar",component:u.default}),r.default.createElement(i.Route,{path:"/privacy",component:u.default}),r.default.createElement(i.Route,{path:"*",component:u.default})))),e)}()},function(e,t,n){"use strict";var o=n(2),r=n(109),a=n(724);function i(e){for(var t=arguments.length-1,n="https://reactjs.org/docs/error-decoder.html?invariant="+e,o=0;o<t;o++)n+="&args[]="+encodeURIComponent(arguments[o+1]);!function(e,t,n,o,r,a,i,p){if(!e){if(e=void 0,void 0===t)e=Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var s=[n,void 0,void 0,void 0,void 0,void 0],c=0;(e=Error(t.replace(/%s/g,function(){return s[c++]}))).name="Invariant Violation"}throw e.framesToPop=1,e}}(!1,"Minified React error #"+e+"; visit %s for the full message or use the non-minified dev environment for full errors and additional helpful warnings. ",n)}o||i("227");var p=!1,s=null,c=!1,b=null,M={onError:function(e){p=!0,s=e}};function l(e,t,n,o,r,a,i,c,b){p=!1,s=null,function(e,t,n,o,r,a,i,p,s){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(e){this.onError(e)}}.apply(M,arguments)}var u=null,d={};function z(){if(u)for(var e in d){var t=d[e],n=u.indexOf(e);if(-1<n||i("96",e),!O[n])for(var o in t.extractEvents||i("97",e),O[n]=t,n=t.eventTypes){var r=void 0,a=n[o],p=t,s=o;A.hasOwnProperty(s)&&i("99",s),A[s]=a;var c=a.phasedRegistrationNames;if(c){for(r in c)c.hasOwnProperty(r)&&f(c[r],p,s);r=!0}else a.registrationName?(f(a.registrationName,p,s),r=!0):r=!1;r||i("98",o,e)}}}function f(e,t,n){h[e]&&i("100",e),h[e]=t,m[e]=t.eventTypes[n].dependencies}var O=[],A={},h={},m={},q=null,_=null,W=null;function g(e,t,n){var o=e.type||"unknown-event";e.currentTarget=W(n),function(e,t,n,o,r,a,M,u,d){if(l.apply(this,arguments),p){if(p){var z=s;p=!1,s=null}else i("198"),z=void 0;c||(c=!0,b=z)}}(o,t,void 0,e),e.currentTarget=null}function v(e,t){return null==t&&i("30"),null==e?t:Array.isArray(e)?Array.isArray(t)?(e.push.apply(e,t),e):(e.push(t),e):Array.isArray(t)?[e].concat(t):[e,t]}function y(e,t,n){Array.isArray(e)?e.forEach(t,n):e&&t.call(n,e)}var L=null;function R(e){if(e){var t=e._dispatchListeners,n=e._dispatchInstances;if(Array.isArray(t))for(var o=0;o<t.length&&!e.isPropagationStopped();o++)g(e,t[o],n[o]);else t&&g(e,t,n);e._dispatchListeners=null,e._dispatchInstances=null,e.isPersistent()||e.constructor.release(e)}}var E={injectEventPluginOrder:function(e){u&&i("101"),u=Array.prototype.slice.call(e),z()},injectEventPluginsByName:function(e){var t,n=!1;for(t in e)if(e.hasOwnProperty(t)){var o=e[t];d.hasOwnProperty(t)&&d[t]===o||(d[t]&&i("102",t),d[t]=o,n=!0)}n&&z()}};function w(e,t){var n=e.stateNode;if(!n)return null;var o=q(n);if(!o)return null;n=o[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":(o=!o.disabled)||(o=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!o;break e;default:e=!1}return e?null:(n&&"function"!=typeof n&&i("231",t,typeof n),n)}function k(e){if(null!==e&&(L=v(L,e)),e=L,L=null,e&&(y(e,R),L&&i("95"),c))throw e=b,c=!1,b=null,e}var B=Math.random().toString(36).slice(2),T="__reactInternalInstance$"+B,S="__reactEventHandlers$"+B;function N(e){if(e[T])return e[T];for(;!e[T];){if(!e.parentNode)return null;e=e.parentNode}return 5===(e=e[T]).tag||6===e.tag?e:null}function X(e){return!(e=e[T])||5!==e.tag&&6!==e.tag?null:e}function C(e){if(5===e.tag||6===e.tag)return e.stateNode;i("33")}function D(e){return e[S]||null}function P(e){do{e=e.return}while(e&&5!==e.tag);return e||null}function x(e,t,n){(t=w(e,n.dispatchConfig.phasedRegistrationNames[t]))&&(n._dispatchListeners=v(n._dispatchListeners,t),n._dispatchInstances=v(n._dispatchInstances,e))}function H(e){if(e&&e.dispatchConfig.phasedRegistrationNames){for(var t=e._targetInst,n=[];t;)n.push(t),t=P(t);for(t=n.length;0<t--;)x(n[t],"captured",e);for(t=0;t<n.length;t++)x(n[t],"bubbled",e)}}function F(e,t,n){e&&n&&n.dispatchConfig.registrationName&&(t=w(e,n.dispatchConfig.registrationName))&&(n._dispatchListeners=v(n._dispatchListeners,t),n._dispatchInstances=v(n._dispatchInstances,e))}function j(e){e&&e.dispatchConfig.registrationName&&F(e._targetInst,null,e)}function Y(e){y(e,H)}var I=!("undefined"==typeof window||!window.document||!window.document.createElement);function U(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var V={animationend:U("Animation","AnimationEnd"),animationiteration:U("Animation","AnimationIteration"),animationstart:U("Animation","AnimationStart"),transitionend:U("Transition","TransitionEnd")},K={},J={};function G(e){if(K[e])return K[e];if(!V[e])return e;var t,n=V[e];for(t in n)if(n.hasOwnProperty(t)&&t in J)return K[e]=n[t];return e}I&&(J=document.createElement("div").style,"AnimationEvent"in window||(delete V.animationend.animation,delete V.animationiteration.animation,delete V.animationstart.animation),"TransitionEvent"in window||delete V.transitionend.transition);var Q=G("animationend"),$=G("animationiteration"),Z=G("animationstart"),ee=G("transitionend"),te="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),ne=null,oe=null,re=null;function ae(){if(re)return re;var e,t,n=oe,o=n.length,r="value"in ne?ne.value:ne.textContent,a=r.length;for(e=0;e<o&&n[e]===r[e];e++);var i=o-e;for(t=1;t<=i&&n[o-t]===r[a-t];t++);return re=r.slice(e,1<t?1-t:void 0)}function ie(){return!0}function pe(){return!1}function se(e,t,n,o){for(var r in this.dispatchConfig=e,this._targetInst=t,this.nativeEvent=n,e=this.constructor.Interface)e.hasOwnProperty(r)&&((t=e[r])?this[r]=t(n):"target"===r?this.target=o:this[r]=n[r]);return this.isDefaultPrevented=(null!=n.defaultPrevented?n.defaultPrevented:!1===n.returnValue)?ie:pe,this.isPropagationStopped=pe,this}function ce(e,t,n,o){if(this.eventPool.length){var r=this.eventPool.pop();return this.call(r,e,t,n,o),r}return new this(e,t,n,o)}function be(e){e instanceof this||i("279"),e.destructor(),10>this.eventPool.length&&this.eventPool.push(e)}function Me(e){e.eventPool=[],e.getPooled=ce,e.release=be}r(se.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=ie)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=ie)},persist:function(){this.isPersistent=ie},isPersistent:pe,destructor:function(){var e,t=this.constructor.Interface;for(e in t)this[e]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null,this.isPropagationStopped=this.isDefaultPrevented=pe,this._dispatchInstances=this._dispatchListeners=null}}),se.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null},se.extend=function(e){function t(){}function n(){return o.apply(this,arguments)}var o=this;t.prototype=o.prototype;var a=new t;return r(a,n.prototype),n.prototype=a,n.prototype.constructor=n,n.Interface=r({},o.Interface,e),n.extend=o.extend,Me(n),n},Me(se);var le=se.extend({data:null}),ue=se.extend({data:null}),de=[9,13,27,32],ze=I&&"CompositionEvent"in window,fe=null;I&&"documentMode"in document&&(fe=document.documentMode);var Oe=I&&"TextEvent"in window&&!fe,Ae=I&&(!ze||fe&&8<fe&&11>=fe),he=String.fromCharCode(32),me={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["compositionend","keypress","textInput","paste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"blur compositionend keydown keypress keyup mousedown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:"blur compositionstart keydown keypress keyup mousedown".split(" ")},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"blur compositionupdate keydown keypress keyup mousedown".split(" ")}},qe=!1;function _e(e,t){switch(e){case"keyup":return-1!==de.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"blur":return!0;default:return!1}}function We(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var ge=!1,ve={eventTypes:me,extractEvents:function(e,t,n,o){var r=void 0,a=void 0;if(ze)e:{switch(e){case"compositionstart":r=me.compositionStart;break e;case"compositionend":r=me.compositionEnd;break e;case"compositionupdate":r=me.compositionUpdate;break e}r=void 0}else ge?_e(e,n)&&(r=me.compositionEnd):"keydown"===e&&229===n.keyCode&&(r=me.compositionStart);return r?(Ae&&"ko"!==n.locale&&(ge||r!==me.compositionStart?r===me.compositionEnd&&ge&&(a=ae()):(oe="value"in(ne=o)?ne.value:ne.textContent,ge=!0)),r=le.getPooled(r,t,n,o),a?r.data=a:null!==(a=We(n))&&(r.data=a),Y(r),a=r):a=null,(e=Oe?function(e,t){switch(e){case"compositionend":return We(t);case"keypress":return 32!==t.which?null:(qe=!0,he);case"textInput":return(e=t.data)===he&&qe?null:e;default:return null}}(e,n):function(e,t){if(ge)return"compositionend"===e||!ze&&_e(e,t)?(e=ae(),re=oe=ne=null,ge=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Ae&&"ko"!==t.locale?null:t.data;default:return null}}(e,n))?((t=ue.getPooled(me.beforeInput,t,n,o)).data=e,Y(t)):t=null,null===a?t:null===t?a:[a,t]}},ye=null,Le=null,Re=null;function Ee(e){if(e=_(e)){"function"!=typeof ye&&i("280");var t=q(e.stateNode);ye(e.stateNode,e.type,t)}}function we(e){Le?Re?Re.push(e):Re=[e]:Le=e}function ke(){if(Le){var e=Le,t=Re;if(Re=Le=null,Ee(e),t)for(e=0;e<t.length;e++)Ee(t[e])}}function Be(e,t){return e(t)}function Te(e,t,n){return e(t,n)}function Se(){}var Ne=!1;function Xe(e,t){if(Ne)return e(t);Ne=!0;try{return Be(e,t)}finally{Ne=!1,(null!==Le||null!==Re)&&(Se(),ke())}}var Ce={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function De(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Ce[e.type]:"textarea"===t}function Pe(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}function xe(e){if(!I)return!1;var t=(e="on"+e)in document;return t||((t=document.createElement("div")).setAttribute(e,"return;"),t="function"==typeof t[e]),t}function He(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function Fe(e){e._valueTracker||(e._valueTracker=function(e){var t=He(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),o=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var r=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return r.call(this)},set:function(e){o=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return o},setValue:function(e){o=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function je(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),o="";return e&&(o=He(e)?e.checked?"true":"false":e.value),(e=o)!==n&&(t.setValue(e),!0)}var Ye=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;Ye.hasOwnProperty("ReactCurrentDispatcher")||(Ye.ReactCurrentDispatcher={current:null});var Ie=/^(.*)[\\\/]/,Ue="function"==typeof Symbol&&Symbol.for,Ve=Ue?Symbol.for("react.element"):60103,Ke=Ue?Symbol.for("react.portal"):60106,Je=Ue?Symbol.for("react.fragment"):60107,Ge=Ue?Symbol.for("react.strict_mode"):60108,Qe=Ue?Symbol.for("react.profiler"):60114,$e=Ue?Symbol.for("react.provider"):60109,Ze=Ue?Symbol.for("react.context"):60110,et=Ue?Symbol.for("react.concurrent_mode"):60111,tt=Ue?Symbol.for("react.forward_ref"):60112,nt=Ue?Symbol.for("react.suspense"):60113,ot=Ue?Symbol.for("react.memo"):60115,rt=Ue?Symbol.for("react.lazy"):60116,at="function"==typeof Symbol&&Symbol.iterator;function it(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=at&&e[at]||e["@@iterator"])?e:null}function pt(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case et:return"ConcurrentMode";case Je:return"Fragment";case Ke:return"Portal";case Qe:return"Profiler";case Ge:return"StrictMode";case nt:return"Suspense"}if("object"==typeof e)switch(e.$$typeof){case Ze:return"Context.Consumer";case $e:return"Context.Provider";case tt:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case ot:return pt(e.type);case rt:if(e=1===e._status?e._result:null)return pt(e)}return null}function st(e){var t="";do{e:switch(e.tag){case 3:case 4:case 6:case 7:case 10:case 9:var n="";break e;default:var o=e._debugOwner,r=e._debugSource,a=pt(e.type);n=null,o&&(n=pt(o.type)),o=a,a="",r?a=" (at "+r.fileName.replace(Ie,"")+":"+r.lineNumber+")":n&&(a=" (created by "+n+")"),n="\n in "+(o||"Unknown")+a}t+=n,e=e.return}while(e);return t}var ct=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,bt=Object.prototype.hasOwnProperty,Mt={},lt={};function ut(e,t,n,o,r){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=o,this.attributeNamespace=r,this.mustUseProperty=n,this.propertyName=e,this.type=t}var dt={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){dt[e]=new ut(e,0,!1,e,null)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];dt[t]=new ut(t,1,!1,e[1],null)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){dt[e]=new ut(e,2,!1,e.toLowerCase(),null)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){dt[e]=new ut(e,2,!1,e,null)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){dt[e]=new ut(e,3,!1,e.toLowerCase(),null)}),["checked","multiple","muted","selected"].forEach(function(e){dt[e]=new ut(e,3,!0,e,null)}),["capture","download"].forEach(function(e){dt[e]=new ut(e,4,!1,e,null)}),["cols","rows","size","span"].forEach(function(e){dt[e]=new ut(e,6,!1,e,null)}),["rowSpan","start"].forEach(function(e){dt[e]=new ut(e,5,!1,e.toLowerCase(),null)});var zt=/[\-:]([a-z])/g;function ft(e){return e[1].toUpperCase()}function Ot(e,t,n,o){var r=dt.hasOwnProperty(t)?dt[t]:null;(null!==r?0===r.type:!o&&2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1]))||(function(e,t,n,o){if(null==t||function(e,t,n,o){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!o&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,o))return!0;if(o)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,r,o)&&(n=null),o||null===r?function(e){return!!bt.call(lt,e)||!bt.call(Mt,e)&&(ct.test(e)?lt[e]=!0:(Mt[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):r.mustUseProperty?e[r.propertyName]=null===n?3!==r.type&&"":n:(t=r.attributeName,o=r.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(r=r.type)||4===r&&!0===n?"":""+n,o?e.setAttributeNS(o,t,n):e.setAttribute(t,n))))}function At(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function ht(e,t){var n=t.checked;return r({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function mt(e,t){var n=null==t.defaultValue?"":t.defaultValue,o=null!=t.checked?t.checked:t.defaultChecked;n=At(null!=t.value?t.value:n),e._wrapperState={initialChecked:o,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function qt(e,t){null!=(t=t.checked)&&Ot(e,"checked",t,!1)}function _t(e,t){qt(e,t);var n=At(t.value),o=t.type;if(null!=n)"number"===o?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===o||"reset"===o)return void e.removeAttribute("value");t.hasOwnProperty("value")?gt(e,t.type,n):t.hasOwnProperty("defaultValue")&&gt(e,t.type,At(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function Wt(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var o=t.type;if(!("submit"!==o&&"reset"!==o||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!e.defaultChecked,e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function gt(e,t,n){"number"===t&&e.ownerDocument.activeElement===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(zt,ft);dt[t]=new ut(t,1,!1,e,null)}),"xlink:actuate xlink:arcrole xlink:href xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(zt,ft);dt[t]=new ut(t,1,!1,e,"http://www.w3.org/1999/xlink")}),["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(zt,ft);dt[t]=new ut(t,1,!1,e,"http://www.w3.org/XML/1998/namespace")}),["tabIndex","crossOrigin"].forEach(function(e){dt[e]=new ut(e,1,!1,e.toLowerCase(),null)});var vt={change:{phasedRegistrationNames:{bubbled:"onChange",captured:"onChangeCapture"},dependencies:"blur change click focus input keydown keyup selectionchange".split(" ")}};function yt(e,t,n){return(e=se.getPooled(vt.change,e,t,n)).type="change",we(n),Y(e),e}var Lt=null,Rt=null;function Et(e){k(e)}function wt(e){if(je(C(e)))return e}function kt(e,t){if("change"===e)return t}var Bt=!1;function Tt(){Lt&&(Lt.detachEvent("onpropertychange",St),Rt=Lt=null)}function St(e){"value"===e.propertyName&&wt(Rt)&&Xe(Et,e=yt(Rt,e,Pe(e)))}function Nt(e,t,n){"focus"===e?(Tt(),Rt=n,(Lt=t).attachEvent("onpropertychange",St)):"blur"===e&&Tt()}function Xt(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return wt(Rt)}function Ct(e,t){if("click"===e)return wt(t)}function Dt(e,t){if("input"===e||"change"===e)return wt(t)}I&&(Bt=xe("input")&&(!document.documentMode||9<document.documentMode));var Pt={eventTypes:vt,_isInputEventSupported:Bt,extractEvents:function(e,t,n,o){var r=t?C(t):window,a=void 0,i=void 0,p=r.nodeName&&r.nodeName.toLowerCase();if("select"===p||"input"===p&&"file"===r.type?a=kt:De(r)?Bt?a=Dt:(a=Xt,i=Nt):(p=r.nodeName)&&"input"===p.toLowerCase()&&("checkbox"===r.type||"radio"===r.type)&&(a=Ct),a&&(a=a(e,t)))return yt(a,n,o);i&&i(e,r,t),"blur"===e&&(e=r._wrapperState)&&e.controlled&&"number"===r.type&&gt(r,"number",r.value)}},xt=se.extend({view:null,detail:null}),Ht={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Ft(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Ht[e])&&!!t[e]}function jt(){return Ft}var Yt=0,It=0,Ut=!1,Vt=!1,Kt=xt.extend({screenX:null,screenY:null,clientX:null,clientY:null,pageX:null,pageY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:jt,button:null,buttons:null,relatedTarget:function(e){return e.relatedTarget||(e.fromElement===e.srcElement?e.toElement:e.fromElement)},movementX:function(e){if("movementX"in e)return e.movementX;var t=Yt;return Yt=e.screenX,Ut?"mousemove"===e.type?e.screenX-t:0:(Ut=!0,0)},movementY:function(e){if("movementY"in e)return e.movementY;var t=It;return It=e.screenY,Vt?"mousemove"===e.type?e.screenY-t:0:(Vt=!0,0)}}),Jt=Kt.extend({pointerId:null,width:null,height:null,pressure:null,tangentialPressure:null,tiltX:null,tiltY:null,twist:null,pointerType:null,isPrimary:null}),Gt={mouseEnter:{registrationName:"onMouseEnter",dependencies:["mouseout","mouseover"]},mouseLeave:{registrationName:"onMouseLeave",dependencies:["mouseout","mouseover"]},pointerEnter:{registrationName:"onPointerEnter",dependencies:["pointerout","pointerover"]},pointerLeave:{registrationName:"onPointerLeave",dependencies:["pointerout","pointerover"]}},Qt={eventTypes:Gt,extractEvents:function(e,t,n,o){var r="mouseover"===e||"pointerover"===e,a="mouseout"===e||"pointerout"===e;if(r&&(n.relatedTarget||n.fromElement)||!a&&!r)return null;if(r=o.window===o?o:(r=o.ownerDocument)?r.defaultView||r.parentWindow:window,a?(a=t,t=(t=n.relatedTarget||n.toElement)?N(t):null):a=null,a===t)return null;var i=void 0,p=void 0,s=void 0,c=void 0;"mouseout"===e||"mouseover"===e?(i=Kt,p=Gt.mouseLeave,s=Gt.mouseEnter,c="mouse"):"pointerout"!==e&&"pointerover"!==e||(i=Jt,p=Gt.pointerLeave,s=Gt.pointerEnter,c="pointer");var b=null==a?r:C(a);if(r=null==t?r:C(t),(e=i.getPooled(p,a,n,o)).type=c+"leave",e.target=b,e.relatedTarget=r,(n=i.getPooled(s,t,n,o)).type=c+"enter",n.target=r,n.relatedTarget=b,o=t,a&&o)e:{for(r=o,c=0,i=t=a;i;i=P(i))c++;for(i=0,s=r;s;s=P(s))i++;for(;0<c-i;)t=P(t),c--;for(;0<i-c;)r=P(r),i--;for(;c--;){if(t===r||t===r.alternate)break e;t=P(t),r=P(r)}t=null}else t=null;for(r=t,t=[];a&&a!==r&&(null===(c=a.alternate)||c!==r);)t.push(a),a=P(a);for(a=[];o&&o!==r&&(null===(c=o.alternate)||c!==r);)a.push(o),o=P(o);for(o=0;o<t.length;o++)F(t[o],"bubbled",e);for(o=a.length;0<o--;)F(a[o],"captured",n);return[e,n]}};function $t(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t}var Zt=Object.prototype.hasOwnProperty;function en(e,t){if($t(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!1;for(o=0;o<n.length;o++)if(!Zt.call(t,n[o])||!$t(e[n[o]],t[n[o]]))return!1;return!0}function tn(e){var t=e;if(e.alternate)for(;t.return;)t=t.return;else{if(0!=(2&t.effectTag))return 1;for(;t.return;)if(0!=(2&(t=t.return).effectTag))return 1}return 3===t.tag?2:3}function nn(e){2!==tn(e)&&i("188")}function on(e){if(!(e=function(e){var t=e.alternate;if(!t)return 3===(t=tn(e))&&i("188"),1===t?null:e;for(var n=e,o=t;;){var r=n.return,a=r?r.alternate:null;if(!r||!a)break;if(r.child===a.child){for(var p=r.child;p;){if(p===n)return nn(r),e;if(p===o)return nn(r),t;p=p.sibling}i("188")}if(n.return!==o.return)n=r,o=a;else{p=!1;for(var s=r.child;s;){if(s===n){p=!0,n=r,o=a;break}if(s===o){p=!0,o=r,n=a;break}s=s.sibling}if(!p){for(s=a.child;s;){if(s===n){p=!0,n=a,o=r;break}if(s===o){p=!0,o=a,n=r;break}s=s.sibling}p||i("189")}}n.alternate!==o&&i("190")}return 3!==n.tag&&i("188"),n.stateNode.current===n?e:t}(e)))return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}var rn=se.extend({animationName:null,elapsedTime:null,pseudoElement:null}),an=se.extend({clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),pn=xt.extend({relatedTarget:null});function sn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}var cn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},bn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Mn=xt.extend({key:function(e){if(e.key){var t=cn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=sn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?bn[e.keyCode]||"Unidentified":""},location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:jt,charCode:function(e){return"keypress"===e.type?sn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?sn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),ln=Kt.extend({dataTransfer:null}),un=xt.extend({touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:jt}),dn=se.extend({propertyName:null,elapsedTime:null,pseudoElement:null}),zn=Kt.extend({deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:null,deltaMode:null}),fn=[["abort","abort"],[Q,"animationEnd"],[$,"animationIteration"],[Z,"animationStart"],["canplay","canPlay"],["canplaythrough","canPlayThrough"],["drag","drag"],["dragenter","dragEnter"],["dragexit","dragExit"],["dragleave","dragLeave"],["dragover","dragOver"],["durationchange","durationChange"],["emptied","emptied"],["encrypted","encrypted"],["ended","ended"],["error","error"],["gotpointercapture","gotPointerCapture"],["load","load"],["loadeddata","loadedData"],["loadedmetadata","loadedMetadata"],["loadstart","loadStart"],["lostpointercapture","lostPointerCapture"],["mousemove","mouseMove"],["mouseout","mouseOut"],["mouseover","mouseOver"],["playing","playing"],["pointermove","pointerMove"],["pointerout","pointerOut"],["pointerover","pointerOver"],["progress","progress"],["scroll","scroll"],["seeking","seeking"],["stalled","stalled"],["suspend","suspend"],["timeupdate","timeUpdate"],["toggle","toggle"],["touchmove","touchMove"],[ee,"transitionEnd"],["waiting","waiting"],["wheel","wheel"]],On={},An={};function hn(e,t){var n=e[0],o="on"+((e=e[1])[0].toUpperCase()+e.slice(1));t={phasedRegistrationNames:{bubbled:o,captured:o+"Capture"},dependencies:[n],isInteractive:t},On[e]=t,An[n]=t}[["blur","blur"],["cancel","cancel"],["click","click"],["close","close"],["contextmenu","contextMenu"],["copy","copy"],["cut","cut"],["auxclick","auxClick"],["dblclick","doubleClick"],["dragend","dragEnd"],["dragstart","dragStart"],["drop","drop"],["focus","focus"],["input","input"],["invalid","invalid"],["keydown","keyDown"],["keypress","keyPress"],["keyup","keyUp"],["mousedown","mouseDown"],["mouseup","mouseUp"],["paste","paste"],["pause","pause"],["play","play"],["pointercancel","pointerCancel"],["pointerdown","pointerDown"],["pointerup","pointerUp"],["ratechange","rateChange"],["reset","reset"],["seeked","seeked"],["submit","submit"],["touchcancel","touchCancel"],["touchend","touchEnd"],["touchstart","touchStart"],["volumechange","volumeChange"]].forEach(function(e){hn(e,!0)}),fn.forEach(function(e){hn(e,!1)});var mn={eventTypes:On,isInteractiveTopLevelEventType:function(e){return void 0!==(e=An[e])&&!0===e.isInteractive},extractEvents:function(e,t,n,o){var r=An[e];if(!r)return null;switch(e){case"keypress":if(0===sn(n))return null;case"keydown":case"keyup":e=Mn;break;case"blur":case"focus":e=pn;break;case"click":if(2===n.button)return null;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":e=Kt;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":e=ln;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":e=un;break;case Q:case $:case Z:e=rn;break;case ee:e=dn;break;case"scroll":e=xt;break;case"wheel":e=zn;break;case"copy":case"cut":case"paste":e=an;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":e=Jt;break;default:e=se}return Y(t=e.getPooled(r,t,n,o)),t}},qn=mn.isInteractiveTopLevelEventType,_n=[];function Wn(e){var t=e.targetInst,n=t;do{if(!n){e.ancestors.push(n);break}var o;for(o=n;o.return;)o=o.return;if(!(o=3!==o.tag?null:o.stateNode.containerInfo))break;e.ancestors.push(n),n=N(o)}while(n);for(n=0;n<e.ancestors.length;n++){t=e.ancestors[n];var r=Pe(e.nativeEvent);o=e.topLevelType;for(var a=e.nativeEvent,i=null,p=0;p<O.length;p++){var s=O[p];s&&(s=s.extractEvents(o,t,a,r))&&(i=v(i,s))}k(i)}}var gn=!0;function vn(e,t){if(!t)return null;var n=(qn(e)?Ln:Rn).bind(null,e);t.addEventListener(e,n,!1)}function yn(e,t){if(!t)return null;var n=(qn(e)?Ln:Rn).bind(null,e);t.addEventListener(e,n,!0)}function Ln(e,t){Te(Rn,e,t)}function Rn(e,t){if(gn){var n=Pe(t);if(null===(n=N(n))||"number"!=typeof n.tag||2===tn(n)||(n=null),_n.length){var o=_n.pop();o.topLevelType=e,o.nativeEvent=t,o.targetInst=n,e=o}else e={topLevelType:e,nativeEvent:t,targetInst:n,ancestors:[]};try{Xe(Wn,e)}finally{e.topLevelType=null,e.nativeEvent=null,e.targetInst=null,e.ancestors.length=0,10>_n.length&&_n.push(e)}}}var En={},wn=0,kn="_reactListenersID"+(""+Math.random()).slice(2);function Bn(e){return Object.prototype.hasOwnProperty.call(e,kn)||(e[kn]=wn++,En[e[kn]]={}),En[e[kn]]}function Tn(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function Sn(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function Nn(e,t){var n,o=Sn(e);for(e=0;o;){if(3===o.nodeType){if(n=e+o.textContent.length,e<=t&&n>=t)return{node:o,offset:t-e};e=n}e:{for(;o;){if(o.nextSibling){o=o.nextSibling;break e}o=o.parentNode}o=void 0}o=Sn(o)}}function Xn(){for(var e=window,t=Tn();t instanceof e.HTMLIFrameElement;){try{e=t.contentDocument.defaultView}catch(e){break}t=Tn(e.document)}return t}function Cn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var Dn=I&&"documentMode"in document&&11>=document.documentMode,Pn={select:{phasedRegistrationNames:{bubbled:"onSelect",captured:"onSelectCapture"},dependencies:"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange".split(" ")}},xn=null,Hn=null,Fn=null,jn=!1;function Yn(e,t){var n=t.window===t?t.document:9===t.nodeType?t:t.ownerDocument;return jn||null==xn||xn!==Tn(n)?null:(n="selectionStart"in(n=xn)&&Cn(n)?{start:n.selectionStart,end:n.selectionEnd}:{anchorNode:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset},Fn&&en(Fn,n)?null:(Fn=n,(e=se.getPooled(Pn.select,Hn,e,t)).type="select",e.target=xn,Y(e),e))}var In={eventTypes:Pn,extractEvents:function(e,t,n,o){var r,a=o.window===o?o.document:9===o.nodeType?o:o.ownerDocument;if(!(r=!a)){e:{a=Bn(a),r=m.onSelect;for(var i=0;i<r.length;i++){var p=r[i];if(!a.hasOwnProperty(p)||!a[p]){a=!1;break e}}a=!0}r=!a}if(r)return null;switch(a=t?C(t):window,e){case"focus":(De(a)||"true"===a.contentEditable)&&(xn=a,Hn=t,Fn=null);break;case"blur":Fn=Hn=xn=null;break;case"mousedown":jn=!0;break;case"contextmenu":case"mouseup":case"dragend":return jn=!1,Yn(n,o);case"selectionchange":if(Dn)break;case"keydown":case"keyup":return Yn(n,o)}return null}};function Un(e,t){return e=r({children:void 0},t),(t=function(e){var t="";return o.Children.forEach(e,function(e){null!=e&&(t+=e)}),t}(t.children))&&(e.children=t),e}function Vn(e,t,n,o){if(e=e.options,t){t={};for(var r=0;r<n.length;r++)t["$"+n[r]]=!0;for(n=0;n<e.length;n++)r=t.hasOwnProperty("$"+e[n].value),e[n].selected!==r&&(e[n].selected=r),r&&o&&(e[n].defaultSelected=!0)}else{for(n=""+At(n),t=null,r=0;r<e.length;r++){if(e[r].value===n)return e[r].selected=!0,void(o&&(e[r].defaultSelected=!0));null!==t||e[r].disabled||(t=e[r])}null!==t&&(t.selected=!0)}}function Kn(e,t){return null!=t.dangerouslySetInnerHTML&&i("91"),r({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function Jn(e,t){var n=t.value;null==n&&(n=t.defaultValue,null!=(t=t.children)&&(null!=n&&i("92"),Array.isArray(t)&&(1>=t.length||i("93"),t=t[0]),n=t),null==n&&(n="")),e._wrapperState={initialValue:At(n)}}function Gn(e,t){var n=At(t.value),o=At(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=o&&(e.defaultValue=""+o)}function Qn(e){var t=e.textContent;t===e._wrapperState.initialValue&&(e.value=t)}E.injectEventPluginOrder("ResponderEventPlugin SimpleEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin".split(" ")),q=D,_=X,W=C,E.injectEventPluginsByName({SimpleEventPlugin:mn,EnterLeaveEventPlugin:Qt,ChangeEventPlugin:Pt,SelectEventPlugin:In,BeforeInputEventPlugin:ve});var $n={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function Zn(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function eo(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?Zn(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var to,no=void 0,oo=(to=function(e,t){if(e.namespaceURI!==$n.svg||"innerHTML"in e)e.innerHTML=t;else{for((no=no||document.createElement("div")).innerHTML="<svg>"+t+"</svg>",t=no.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,o){MSApp.execUnsafeLocalFunction(function(){return to(e,t)})}:to);function ro(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var ao={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},io=["Webkit","ms","Moz","O"];function po(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||ao.hasOwnProperty(e)&&ao[e]?(""+t).trim():t+"px"}function so(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var o=0===n.indexOf("--"),r=po(n,t[n],o);"float"===n&&(n="cssFloat"),o?e.setProperty(n,r):e[n]=r}}Object.keys(ao).forEach(function(e){io.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ao[t]=ao[e]})});var co=r({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function bo(e,t){t&&(co[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML)&&i("137",e,""),null!=t.dangerouslySetInnerHTML&&(null!=t.children&&i("60"),"object"==typeof t.dangerouslySetInnerHTML&&"__html"in t.dangerouslySetInnerHTML||i("61")),null!=t.style&&"object"!=typeof t.style&&i("62",""))}function Mo(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function lo(e,t){var n=Bn(e=9===e.nodeType||11===e.nodeType?e:e.ownerDocument);t=m[t];for(var o=0;o<t.length;o++){var r=t[o];if(!n.hasOwnProperty(r)||!n[r]){switch(r){case"scroll":yn("scroll",e);break;case"focus":case"blur":yn("focus",e),yn("blur",e),n.blur=!0,n.focus=!0;break;case"cancel":case"close":xe(r)&&yn(r,e);break;case"invalid":case"submit":case"reset":break;default:-1===te.indexOf(r)&&vn(r,e)}n[r]=!0}}}function uo(){}var zo=null,fo=null;function Oo(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Ao(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var ho="function"==typeof setTimeout?setTimeout:void 0,mo="function"==typeof clearTimeout?clearTimeout:void 0,qo=a.unstable_scheduleCallback,_o=a.unstable_cancelCallback;function Wo(e){for(e=e.nextSibling;e&&1!==e.nodeType&&3!==e.nodeType;)e=e.nextSibling;return e}function go(e){for(e=e.firstChild;e&&1!==e.nodeType&&3!==e.nodeType;)e=e.nextSibling;return e}new Set;var vo=[],yo=-1;function Lo(e){0>yo||(e.current=vo[yo],vo[yo]=null,yo--)}function Ro(e,t){vo[++yo]=e.current,e.current=t}var Eo={},wo={current:Eo},ko={current:!1},Bo=Eo;function To(e,t){var n=e.type.contextTypes;if(!n)return Eo;var o=e.stateNode;if(o&&o.__reactInternalMemoizedUnmaskedChildContext===t)return o.__reactInternalMemoizedMaskedChildContext;var r,a={};for(r in n)a[r]=t[r];return o&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function So(e){return null!=e.childContextTypes}function No(e){Lo(ko),Lo(wo)}function Xo(e){Lo(ko),Lo(wo)}function Co(e,t,n){wo.current!==Eo&&i("168"),Ro(wo,t),Ro(ko,n)}function Do(e,t,n){var o=e.stateNode;if(e=t.childContextTypes,"function"!=typeof o.getChildContext)return n;for(var a in o=o.getChildContext())a in e||i("108",pt(t)||"Unknown",a);return r({},n,o)}function Po(e){var t=e.stateNode;return t=t&&t.__reactInternalMemoizedMergedChildContext||Eo,Bo=wo.current,Ro(wo,t),Ro(ko,ko.current),!0}function xo(e,t,n){var o=e.stateNode;o||i("169"),n?(t=Do(e,t,Bo),o.__reactInternalMemoizedMergedChildContext=t,Lo(ko),Lo(wo),Ro(wo,t)):Lo(ko),Ro(ko,n)}var Ho=null,Fo=null;function jo(e){return function(t){try{return e(t)}catch(e){}}}function Yo(e,t,n,o){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.contextDependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=o,this.effectTag=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childExpirationTime=this.expirationTime=0,this.alternate=null}function Io(e,t,n,o){return new Yo(e,t,n,o)}function Uo(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Vo(e,t){var n=e.alternate;return null===n?((n=Io(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.effectTag=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childExpirationTime=e.childExpirationTime,n.expirationTime=e.expirationTime,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,n.contextDependencies=e.contextDependencies,n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Ko(e,t,n,o,r,a){var p=2;if(o=e,"function"==typeof e)Uo(e)&&(p=1);else if("string"==typeof e)p=5;else e:switch(e){case Je:return Jo(n.children,r,a,t);case et:return Go(n,3|r,a,t);case Ge:return Go(n,2|r,a,t);case Qe:return(e=Io(12,n,t,4|r)).elementType=Qe,e.type=Qe,e.expirationTime=a,e;case nt:return(e=Io(13,n,t,r)).elementType=nt,e.type=nt,e.expirationTime=a,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case $e:p=10;break e;case Ze:p=9;break e;case tt:p=11;break e;case ot:p=14;break e;case rt:p=16,o=null;break e}i("130",null==e?e:typeof e,"")}return(t=Io(p,n,t,r)).elementType=e,t.type=o,t.expirationTime=a,t}function Jo(e,t,n,o){return(e=Io(7,e,o,t)).expirationTime=n,e}function Go(e,t,n,o){return e=Io(8,e,o,t),t=0==(1&t)?Ge:et,e.elementType=t,e.type=t,e.expirationTime=n,e}function Qo(e,t,n){return(e=Io(6,e,null,t)).expirationTime=n,e}function $o(e,t,n){return(t=Io(4,null!==e.children?e.children:[],e.key,t)).expirationTime=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Zo(e,t){e.didError=!1;var n=e.earliestPendingTime;0===n?e.earliestPendingTime=e.latestPendingTime=t:n<t?e.earliestPendingTime=t:e.latestPendingTime>t&&(e.latestPendingTime=t),nr(t,e)}function er(e,t){e.didError=!1,e.latestPingedTime>=t&&(e.latestPingedTime=0);var n=e.earliestPendingTime,o=e.latestPendingTime;n===t?e.earliestPendingTime=o===t?e.latestPendingTime=0:o:o===t&&(e.latestPendingTime=n),n=e.earliestSuspendedTime,o=e.latestSuspendedTime,0===n?e.earliestSuspendedTime=e.latestSuspendedTime=t:n<t?e.earliestSuspendedTime=t:o>t&&(e.latestSuspendedTime=t),nr(t,e)}function tr(e,t){var n=e.earliestPendingTime;return n>t&&(t=n),(e=e.earliestSuspendedTime)>t&&(t=e),t}function nr(e,t){var n=t.earliestSuspendedTime,o=t.latestSuspendedTime,r=t.earliestPendingTime,a=t.latestPingedTime;0===(r=0!==r?r:a)&&(0===e||o<e)&&(r=o),0!==(e=r)&&n>e&&(e=n),t.nextExpirationTimeToWorkOn=r,t.expirationTime=e}function or(e,t){if(e&&e.defaultProps)for(var n in t=r({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}var rr=(new o.Component).refs;function ar(e,t,n,o){n=null==(n=n(o,t=e.memoizedState))?t:r({},t,n),e.memoizedState=n,null!==(o=e.updateQueue)&&0===e.expirationTime&&(o.baseState=n)}var ir={isMounted:function(e){return!!(e=e._reactInternalFiber)&&2===tn(e)},enqueueSetState:function(e,t,n){e=e._reactInternalFiber;var o=mp(),r=Ka(o=Vi(o,e));r.payload=t,null!=n&&(r.callback=n),Hi(),Ga(e,r),Gi(e,o)},enqueueReplaceState:function(e,t,n){e=e._reactInternalFiber;var o=mp(),r=Ka(o=Vi(o,e));r.tag=Fa,r.payload=t,null!=n&&(r.callback=n),Hi(),Ga(e,r),Gi(e,o)},enqueueForceUpdate:function(e,t){e=e._reactInternalFiber;var n=mp(),o=Ka(n=Vi(n,e));o.tag=ja,null!=t&&(o.callback=t),Hi(),Ga(e,o),Gi(e,n)}};function pr(e,t,n,o,r,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(o,a,i):!(t.prototype&&t.prototype.isPureReactComponent&&en(n,o)&&en(r,a))}function sr(e,t,n){var o=!1,r=Eo,a=t.contextType;return"object"==typeof a&&null!==a?a=xa(a):(r=So(t)?Bo:wo.current,a=(o=null!=(o=t.contextTypes))?To(e,r):Eo),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=ir,e.stateNode=t,t._reactInternalFiber=e,o&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=r,e.__reactInternalMemoizedMaskedChildContext=a),t}function cr(e,t,n,o){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,o),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,o),t.state!==e&&ir.enqueueReplaceState(t,t.state,null)}function br(e,t,n,o){var r=e.stateNode;r.props=n,r.state=e.memoizedState,r.refs=rr;var a=t.contextType;"object"==typeof a&&null!==a?r.context=xa(a):(a=So(t)?Bo:wo.current,r.context=To(e,a)),null!==(a=e.updateQueue)&&(ei(e,a,n,r,o),r.state=e.memoizedState),"function"==typeof(a=t.getDerivedStateFromProps)&&(ar(e,t,a,n),r.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof r.getSnapshotBeforeUpdate||"function"!=typeof r.UNSAFE_componentWillMount&&"function"!=typeof r.componentWillMount||(t=r.state,"function"==typeof r.componentWillMount&&r.componentWillMount(),"function"==typeof r.UNSAFE_componentWillMount&&r.UNSAFE_componentWillMount(),t!==r.state&&ir.enqueueReplaceState(r,r.state,null),null!==(a=e.updateQueue)&&(ei(e,a,n,r,o),r.state=e.memoizedState)),"function"==typeof r.componentDidMount&&(e.effectTag|=4)}var Mr=Array.isArray;function lr(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){n=n._owner;var o=void 0;n&&(1!==n.tag&&i("309"),o=n.stateNode),o||i("147",e);var r=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===r?t.ref:((t=function(e){var t=o.refs;t===rr&&(t=o.refs={}),null===e?delete t[r]:t[r]=e})._stringRef=r,t)}"string"!=typeof e&&i("284"),n._owner||i("290",e)}return e}function ur(e,t){"textarea"!==e.type&&i("31","[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t,"")}function dr(e){function t(t,n){if(e){var o=t.lastEffect;null!==o?(o.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.effectTag=8}}function n(n,o){if(!e)return null;for(;null!==o;)t(n,o),o=o.sibling;return null}function o(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function r(e,t,n){return(e=Vo(e,t)).index=0,e.sibling=null,e}function a(t,n,o){return t.index=o,e?null!==(o=t.alternate)?(o=o.index)<n?(t.effectTag=2,n):o:(t.effectTag=2,n):n}function p(t){return e&&null===t.alternate&&(t.effectTag=2),t}function s(e,t,n,o){return null===t||6!==t.tag?((t=Qo(n,e.mode,o)).return=e,t):((t=r(t,n)).return=e,t)}function c(e,t,n,o){return null!==t&&t.elementType===n.type?((o=r(t,n.props)).ref=lr(e,t,n),o.return=e,o):((o=Ko(n.type,n.key,n.props,null,e.mode,o)).ref=lr(e,t,n),o.return=e,o)}function b(e,t,n,o){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=$o(n,e.mode,o)).return=e,t):((t=r(t,n.children||[])).return=e,t)}function M(e,t,n,o,a){return null===t||7!==t.tag?((t=Jo(n,e.mode,o,a)).return=e,t):((t=r(t,n)).return=e,t)}function l(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Qo(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case Ve:return(n=Ko(t.type,t.key,t.props,null,e.mode,n)).ref=lr(e,null,t),n.return=e,n;case Ke:return(t=$o(t,e.mode,n)).return=e,t}if(Mr(t)||it(t))return(t=Jo(t,e.mode,n,null)).return=e,t;ur(e,t)}return null}function u(e,t,n,o){var r=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==r?null:s(e,t,""+n,o);if("object"==typeof n&&null!==n){switch(n.$$typeof){case Ve:return n.key===r?n.type===Je?M(e,t,n.props.children,o,r):c(e,t,n,o):null;case Ke:return n.key===r?b(e,t,n,o):null}if(Mr(n)||it(n))return null!==r?null:M(e,t,n,o,null);ur(e,n)}return null}function d(e,t,n,o,r){if("string"==typeof o||"number"==typeof o)return s(t,e=e.get(n)||null,""+o,r);if("object"==typeof o&&null!==o){switch(o.$$typeof){case Ve:return e=e.get(null===o.key?n:o.key)||null,o.type===Je?M(t,e,o.props.children,r,o.key):c(t,e,o,r);case Ke:return b(t,e=e.get(null===o.key?n:o.key)||null,o,r)}if(Mr(o)||it(o))return M(t,e=e.get(n)||null,o,r,null);ur(t,o)}return null}function z(r,i,p,s){for(var c=null,b=null,M=i,z=i=0,f=null;null!==M&&z<p.length;z++){M.index>z?(f=M,M=null):f=M.sibling;var O=u(r,M,p[z],s);if(null===O){null===M&&(M=f);break}e&&M&&null===O.alternate&&t(r,M),i=a(O,i,z),null===b?c=O:b.sibling=O,b=O,M=f}if(z===p.length)return n(r,M),c;if(null===M){for(;z<p.length;z++)(M=l(r,p[z],s))&&(i=a(M,i,z),null===b?c=M:b.sibling=M,b=M);return c}for(M=o(r,M);z<p.length;z++)(f=d(M,r,z,p[z],s))&&(e&&null!==f.alternate&&M.delete(null===f.key?z:f.key),i=a(f,i,z),null===b?c=f:b.sibling=f,b=f);return e&&M.forEach(function(e){return t(r,e)}),c}function f(r,p,s,c){var b=it(s);"function"!=typeof b&&i("150"),null==(s=b.call(s))&&i("151");for(var M=b=null,z=p,f=p=0,O=null,A=s.next();null!==z&&!A.done;f++,A=s.next()){z.index>f?(O=z,z=null):O=z.sibling;var h=u(r,z,A.value,c);if(null===h){z||(z=O);break}e&&z&&null===h.alternate&&t(r,z),p=a(h,p,f),null===M?b=h:M.sibling=h,M=h,z=O}if(A.done)return n(r,z),b;if(null===z){for(;!A.done;f++,A=s.next())null!==(A=l(r,A.value,c))&&(p=a(A,p,f),null===M?b=A:M.sibling=A,M=A);return b}for(z=o(r,z);!A.done;f++,A=s.next())null!==(A=d(z,r,f,A.value,c))&&(e&&null!==A.alternate&&z.delete(null===A.key?f:A.key),p=a(A,p,f),null===M?b=A:M.sibling=A,M=A);return e&&z.forEach(function(e){return t(r,e)}),b}return function(e,o,a,s){var c="object"==typeof a&&null!==a&&a.type===Je&&null===a.key;c&&(a=a.props.children);var b="object"==typeof a&&null!==a;if(b)switch(a.$$typeof){case Ve:e:{for(b=a.key,c=o;null!==c;){if(c.key===b){if(7===c.tag?a.type===Je:c.elementType===a.type){n(e,c.sibling),(o=r(c,a.type===Je?a.props.children:a.props)).ref=lr(e,c,a),o.return=e,e=o;break e}n(e,c);break}t(e,c),c=c.sibling}a.type===Je?((o=Jo(a.props.children,e.mode,s,a.key)).return=e,e=o):((s=Ko(a.type,a.key,a.props,null,e.mode,s)).ref=lr(e,o,a),s.return=e,e=s)}return p(e);case Ke:e:{for(c=a.key;null!==o;){if(o.key===c){if(4===o.tag&&o.stateNode.containerInfo===a.containerInfo&&o.stateNode.implementation===a.implementation){n(e,o.sibling),(o=r(o,a.children||[])).return=e,e=o;break e}n(e,o);break}t(e,o),o=o.sibling}(o=$o(a,e.mode,s)).return=e,e=o}return p(e)}if("string"==typeof a||"number"==typeof a)return a=""+a,null!==o&&6===o.tag?(n(e,o.sibling),(o=r(o,a)).return=e,e=o):(n(e,o),(o=Qo(a,e.mode,s)).return=e,e=o),p(e);if(Mr(a))return z(e,o,a,s);if(it(a))return f(e,o,a,s);if(b&&ur(e,a),void 0===a&&!c)switch(e.tag){case 1:case 0:i("152",(s=e.type).displayName||s.name||"Component")}return n(e,o)}}var zr=dr(!0),fr=dr(!1),Or={},Ar={current:Or},hr={current:Or},mr={current:Or};function qr(e){return e===Or&&i("174"),e}function _r(e,t){Ro(mr,t),Ro(hr,e),Ro(Ar,Or);var n=t.nodeType;switch(n){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:eo(null,"");break;default:t=eo(t=(n=8===n?t.parentNode:t).namespaceURI||null,n=n.tagName)}Lo(Ar),Ro(Ar,t)}function Wr(e){Lo(Ar),Lo(hr),Lo(mr)}function gr(e){qr(mr.current);var t=qr(Ar.current),n=eo(t,e.type);t!==n&&(Ro(hr,e),Ro(Ar,n))}function vr(e){hr.current===e&&(Lo(Ar),Lo(hr))}var yr=0,Lr=2,Rr=4,Er=8,wr=16,kr=32,Br=64,Tr=128,Sr=Ye.ReactCurrentDispatcher,Nr=0,Xr=null,Cr=null,Dr=null,Pr=null,xr=null,Hr=null,Fr=0,jr=null,Yr=0,Ir=!1,Ur=null,Vr=0;function Kr(){i("307")}function Jr(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!$t(e[n],t[n]))return!1;return!0}function Gr(e,t,n,o,r,a){if(Nr=a,Xr=t,Dr=null!==e?e.memoizedState:null,Sr.current=null===Dr?ca:ba,t=n(o,r),Ir){do{Ir=!1,Vr+=1,Dr=null!==e?e.memoizedState:null,Hr=Pr,jr=xr=Cr=null,Sr.current=ba,t=n(o,r)}while(Ir);Ur=null,Vr=0}return Sr.current=sa,(e=Xr).memoizedState=Pr,e.expirationTime=Fr,e.updateQueue=jr,e.effectTag|=Yr,e=null!==Cr&&null!==Cr.next,Nr=0,Hr=xr=Pr=Dr=Cr=Xr=null,Fr=0,jr=null,Yr=0,e&&i("300"),t}function Qr(){Sr.current=sa,Nr=0,Hr=xr=Pr=Dr=Cr=Xr=null,Fr=0,jr=null,Yr=0,Ir=!1,Ur=null,Vr=0}function $r(){var e={memoizedState:null,baseState:null,queue:null,baseUpdate:null,next:null};return null===xr?Pr=xr=e:xr=xr.next=e,xr}function Zr(){if(null!==Hr)Hr=(xr=Hr).next,Dr=null!==(Cr=Dr)?Cr.next:null;else{null===Dr&&i("310");var e={memoizedState:(Cr=Dr).memoizedState,baseState:Cr.baseState,queue:Cr.queue,baseUpdate:Cr.baseUpdate,next:null};xr=null===xr?Pr=e:xr.next=e,Dr=Cr.next}return xr}function ea(e,t){return"function"==typeof t?t(e):t}function ta(e){var t=Zr(),n=t.queue;if(null===n&&i("311"),0<Vr){var o=n.dispatch;if(null!==Ur){var r=Ur.get(n);if(void 0!==r){Ur.delete(n);var a=t.memoizedState;do{a=e(a,r.action),r=r.next}while(null!==r);return $t(a,t.memoizedState)||(qa=!0),t.memoizedState=a,t.baseUpdate===n.last&&(t.baseState=a),n.eagerReducer=e,n.eagerState=a,[a,o]}}return[t.memoizedState,o]}o=n.last;var p=t.baseUpdate;if(a=t.baseState,null!==p?(null!==o&&(o.next=null),o=p.next):o=null!==o?o.next:null,null!==o){var s=r=null,c=o,b=!1;do{var M=c.expirationTime;M<Nr?(b||(b=!0,s=p,r=a),M>Fr&&(Fr=M)):a=c.eagerReducer===e?c.eagerState:e(a,c.action),p=c,c=c.next}while(null!==c&&c!==o);b||(s=p,r=a),$t(a,t.memoizedState)||(qa=!0),t.memoizedState=a,t.baseUpdate=s,t.baseState=r,n.eagerReducer=e,n.eagerState=a}return[t.memoizedState,n.dispatch]}function na(e,t,n,o){return e={tag:e,create:t,destroy:n,deps:o,next:null},null===jr?(jr={lastEffect:null}).lastEffect=e.next=e:null===(t=jr.lastEffect)?jr.lastEffect=e.next=e:(n=t.next,t.next=e,e.next=n,jr.lastEffect=e),e}function oa(e,t,n,o){var r=$r();Yr|=e,r.memoizedState=na(t,n,void 0,void 0===o?null:o)}function ra(e,t,n,o){var r=Zr();o=void 0===o?null:o;var a=void 0;if(null!==Cr){var i=Cr.memoizedState;if(a=i.destroy,null!==o&&Jr(o,i.deps))return void na(yr,n,a,o)}Yr|=e,r.memoizedState=na(t,n,a,o)}function aa(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function ia(){}function pa(e,t,n){25>Vr||i("301");var o=e.alternate;if(e===Xr||null!==o&&o===Xr)if(Ir=!0,e={expirationTime:Nr,action:n,eagerReducer:null,eagerState:null,next:null},null===Ur&&(Ur=new Map),void 0===(n=Ur.get(t)))Ur.set(t,e);else{for(t=n;null!==t.next;)t=t.next;t.next=e}else{Hi();var r=mp(),a={expirationTime:r=Vi(r,e),action:n,eagerReducer:null,eagerState:null,next:null},p=t.last;if(null===p)a.next=a;else{var s=p.next;null!==s&&(a.next=s),p.next=a}if(t.last=a,0===e.expirationTime&&(null===o||0===o.expirationTime)&&null!==(o=t.eagerReducer))try{var c=t.eagerState,b=o(c,n);if(a.eagerReducer=o,a.eagerState=b,$t(b,c))return}catch(e){}Gi(e,r)}}var sa={readContext:xa,useCallback:Kr,useContext:Kr,useEffect:Kr,useImperativeHandle:Kr,useLayoutEffect:Kr,useMemo:Kr,useReducer:Kr,useRef:Kr,useState:Kr,useDebugValue:Kr},ca={readContext:xa,useCallback:function(e,t){return $r().memoizedState=[e,void 0===t?null:t],e},useContext:xa,useEffect:function(e,t){return oa(516,Tr|Br,e,t)},useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,oa(4,Rr|kr,aa.bind(null,t,e),n)},useLayoutEffect:function(e,t){return oa(4,Rr|kr,e,t)},useMemo:function(e,t){var n=$r();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var o=$r();return t=void 0!==n?n(t):t,o.memoizedState=o.baseState=t,e=(e=o.queue={last:null,dispatch:null,eagerReducer:e,eagerState:t}).dispatch=pa.bind(null,Xr,e),[o.memoizedState,e]},useRef:function(e){return e={current:e},$r().memoizedState=e},useState:function(e){var t=$r();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={last:null,dispatch:null,eagerReducer:ea,eagerState:e}).dispatch=pa.bind(null,Xr,e),[t.memoizedState,e]},useDebugValue:ia},ba={readContext:xa,useCallback:function(e,t){var n=Zr();t=void 0===t?null:t;var o=n.memoizedState;return null!==o&&null!==t&&Jr(t,o[1])?o[0]:(n.memoizedState=[e,t],e)},useContext:xa,useEffect:function(e,t){return ra(516,Tr|Br,e,t)},useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,ra(4,Rr|kr,aa.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ra(4,Rr|kr,e,t)},useMemo:function(e,t){var n=Zr();t=void 0===t?null:t;var o=n.memoizedState;return null!==o&&null!==t&&Jr(t,o[1])?o[0]:(e=e(),n.memoizedState=[e,t],e)},useReducer:ta,useRef:function(){return Zr().memoizedState},useState:function(e){return ta(ea)},useDebugValue:ia},Ma=null,la=null,ua=!1;function da(e,t){var n=Io(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.effectTag=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function za(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);case 13:default:return!1}}function fa(e){if(ua){var t=la;if(t){var n=t;if(!za(e,t)){if(!(t=Wo(n))||!za(e,t))return e.effectTag|=2,ua=!1,void(Ma=e);da(Ma,n)}Ma=e,la=go(t)}else e.effectTag|=2,ua=!1,Ma=e}}function Oa(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&18!==e.tag;)e=e.return;Ma=e}function Aa(e){if(e!==Ma)return!1;if(!ua)return Oa(e),ua=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Ao(t,e.memoizedProps))for(t=la;t;)da(e,t),t=Wo(t);return Oa(e),la=Ma?Wo(e.stateNode):null,!0}function ha(){la=Ma=null,ua=!1}var ma=Ye.ReactCurrentOwner,qa=!1;function _a(e,t,n,o){t.child=null===e?fr(t,null,n,o):zr(t,e.child,n,o)}function Wa(e,t,n,o,r){n=n.render;var a=t.ref;return Pa(t,r),o=Gr(e,t,n,o,a,r),null===e||qa?(t.effectTag|=1,_a(e,t,o,r),t.child):(t.updateQueue=e.updateQueue,t.effectTag&=-517,e.expirationTime<=r&&(e.expirationTime=0),Ba(e,t,r))}function ga(e,t,n,o,r,a){if(null===e){var i=n.type;return"function"!=typeof i||Uo(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Ko(n.type,null,o,null,t.mode,a)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,va(e,t,i,o,r,a))}return i=e.child,r<a&&(r=i.memoizedProps,(n=null!==(n=n.compare)?n:en)(r,o)&&e.ref===t.ref)?Ba(e,t,a):(t.effectTag|=1,(e=Vo(i,o)).ref=t.ref,e.return=t,t.child=e)}function va(e,t,n,o,r,a){return null!==e&&en(e.memoizedProps,o)&&e.ref===t.ref&&(qa=!1,r<a)?Ba(e,t,a):La(e,t,n,o,a)}function ya(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.effectTag|=128)}function La(e,t,n,o,r){var a=So(n)?Bo:wo.current;return a=To(t,a),Pa(t,r),n=Gr(e,t,n,o,a,r),null===e||qa?(t.effectTag|=1,_a(e,t,n,r),t.child):(t.updateQueue=e.updateQueue,t.effectTag&=-517,e.expirationTime<=r&&(e.expirationTime=0),Ba(e,t,r))}function Ra(e,t,n,o,r){if(So(n)){var a=!0;Po(t)}else a=!1;if(Pa(t,r),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),sr(t,n,o),br(t,n,o,r),o=!0;else if(null===e){var i=t.stateNode,p=t.memoizedProps;i.props=p;var s=i.context,c=n.contextType;c="object"==typeof c&&null!==c?xa(c):To(t,c=So(n)?Bo:wo.current);var b=n.getDerivedStateFromProps,M="function"==typeof b||"function"==typeof i.getSnapshotBeforeUpdate;M||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(p!==o||s!==c)&&cr(t,i,o,c),Ia=!1;var l=t.memoizedState;s=i.state=l;var u=t.updateQueue;null!==u&&(ei(t,u,o,i,r),s=t.memoizedState),p!==o||l!==s||ko.current||Ia?("function"==typeof b&&(ar(t,n,b,o),s=t.memoizedState),(p=Ia||pr(t,n,p,o,l,s,c))?(M||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.effectTag|=4)):("function"==typeof i.componentDidMount&&(t.effectTag|=4),t.memoizedProps=o,t.memoizedState=s),i.props=o,i.state=s,i.context=c,o=p):("function"==typeof i.componentDidMount&&(t.effectTag|=4),o=!1)}else i=t.stateNode,p=t.memoizedProps,i.props=t.type===t.elementType?p:or(t.type,p),s=i.context,c="object"==typeof(c=n.contextType)&&null!==c?xa(c):To(t,c=So(n)?Bo:wo.current),(M="function"==typeof(b=n.getDerivedStateFromProps)||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(p!==o||s!==c)&&cr(t,i,o,c),Ia=!1,s=t.memoizedState,l=i.state=s,null!==(u=t.updateQueue)&&(ei(t,u,o,i,r),l=t.memoizedState),p!==o||s!==l||ko.current||Ia?("function"==typeof b&&(ar(t,n,b,o),l=t.memoizedState),(b=Ia||pr(t,n,p,o,s,l,c))?(M||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(o,l,c),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(o,l,c)),"function"==typeof i.componentDidUpdate&&(t.effectTag|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.effectTag|=256)):("function"!=typeof i.componentDidUpdate||p===e.memoizedProps&&s===e.memoizedState||(t.effectTag|=4),"function"!=typeof i.getSnapshotBeforeUpdate||p===e.memoizedProps&&s===e.memoizedState||(t.effectTag|=256),t.memoizedProps=o,t.memoizedState=l),i.props=o,i.state=l,i.context=c,o=b):("function"!=typeof i.componentDidUpdate||p===e.memoizedProps&&s===e.memoizedState||(t.effectTag|=4),"function"!=typeof i.getSnapshotBeforeUpdate||p===e.memoizedProps&&s===e.memoizedState||(t.effectTag|=256),o=!1);return Ea(e,t,n,o,a,r)}function Ea(e,t,n,o,r,a){ya(e,t);var i=0!=(64&t.effectTag);if(!o&&!i)return r&&xo(t,n,!1),Ba(e,t,a);o=t.stateNode,ma.current=t;var p=i&&"function"!=typeof n.getDerivedStateFromError?null:o.render();return t.effectTag|=1,null!==e&&i?(t.child=zr(t,e.child,null,a),t.child=zr(t,null,p,a)):_a(e,t,p,a),t.memoizedState=o.state,r&&xo(t,n,!0),t.child}function wa(e){var t=e.stateNode;t.pendingContext?Co(0,t.pendingContext,t.pendingContext!==t.context):t.context&&Co(0,t.context,!1),_r(e,t.containerInfo)}function ka(e,t,n){var o=t.mode,r=t.pendingProps,a=t.memoizedState;if(0==(64&t.effectTag)){a=null;var i=!1}else a={timedOutAt:null!==a?a.timedOutAt:0},i=!0,t.effectTag&=-65;if(null===e)if(i){var p=r.fallback;e=Jo(null,o,0,null),0==(1&t.mode)&&(e.child=null!==t.memoizedState?t.child.child:t.child),o=Jo(p,o,n,null),e.sibling=o,(n=e).return=o.return=t}else n=o=fr(t,null,r.children,n);else null!==e.memoizedState?(p=(o=e.child).sibling,i?(n=r.fallback,r=Vo(o,o.pendingProps),0==(1&t.mode)&&(i=null!==t.memoizedState?t.child.child:t.child)!==o.child&&(r.child=i),o=r.sibling=Vo(p,n,p.expirationTime),n=r,r.childExpirationTime=0,n.return=o.return=t):n=o=zr(t,o.child,r.children,n)):(p=e.child,i?(i=r.fallback,(r=Jo(null,o,0,null)).child=p,0==(1&t.mode)&&(r.child=null!==t.memoizedState?t.child.child:t.child),(o=r.sibling=Jo(i,o,n,null)).effectTag|=2,n=r,r.childExpirationTime=0,n.return=o.return=t):o=n=zr(t,p,r.children,n)),t.stateNode=e.stateNode;return t.memoizedState=a,t.child=n,o}function Ba(e,t,n){if(null!==e&&(t.contextDependencies=e.contextDependencies),t.childExpirationTime<n)return null;if(null!==e&&t.child!==e.child&&i("153"),null!==t.child){for(n=Vo(e=t.child,e.pendingProps,e.expirationTime),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Vo(e,e.pendingProps,e.expirationTime)).return=t;n.sibling=null}return t.child}var Ta={current:null},Sa=null,Na=null,Xa=null;function Ca(e,t){var n=e.type._context;Ro(Ta,n._currentValue),n._currentValue=t}function Da(e){var t=Ta.current;Lo(Ta),e.type._context._currentValue=t}function Pa(e,t){Sa=e,Xa=Na=null;var n=e.contextDependencies;null!==n&&n.expirationTime>=t&&(qa=!0),e.contextDependencies=null}function xa(e,t){return Xa!==e&&!1!==t&&0!==t&&("number"==typeof t&&1073741823!==t||(Xa=e,t=1073741823),t={context:e,observedBits:t,next:null},null===Na?(null===Sa&&i("308"),Na=t,Sa.contextDependencies={first:t,expirationTime:0}):Na=Na.next=t),e._currentValue}var Ha=0,Fa=1,ja=2,Ya=3,Ia=!1;function Ua(e){return{baseState:e,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Va(e){return{baseState:e.baseState,firstUpdate:e.firstUpdate,lastUpdate:e.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Ka(e){return{expirationTime:e,tag:Ha,payload:null,callback:null,next:null,nextEffect:null}}function Ja(e,t){null===e.lastUpdate?e.firstUpdate=e.lastUpdate=t:(e.lastUpdate.next=t,e.lastUpdate=t)}function Ga(e,t){var n=e.alternate;if(null===n){var o=e.updateQueue,r=null;null===o&&(o=e.updateQueue=Ua(e.memoizedState))}else o=e.updateQueue,r=n.updateQueue,null===o?null===r?(o=e.updateQueue=Ua(e.memoizedState),r=n.updateQueue=Ua(n.memoizedState)):o=e.updateQueue=Va(r):null===r&&(r=n.updateQueue=Va(o));null===r||o===r?Ja(o,t):null===o.lastUpdate||null===r.lastUpdate?(Ja(o,t),Ja(r,t)):(Ja(o,t),r.lastUpdate=t)}function Qa(e,t){var n=e.updateQueue;null===(n=null===n?e.updateQueue=Ua(e.memoizedState):$a(e,n)).lastCapturedUpdate?n.firstCapturedUpdate=n.lastCapturedUpdate=t:(n.lastCapturedUpdate.next=t,n.lastCapturedUpdate=t)}function $a(e,t){var n=e.alternate;return null!==n&&t===n.updateQueue&&(t=e.updateQueue=Va(t)),t}function Za(e,t,n,o,a,i){switch(n.tag){case Fa:return"function"==typeof(e=n.payload)?e.call(i,o,a):e;case Ya:e.effectTag=-2049&e.effectTag|64;case Ha:if(null==(a="function"==typeof(e=n.payload)?e.call(i,o,a):e))break;return r({},o,a);case ja:Ia=!0}return o}function ei(e,t,n,o,r){Ia=!1;for(var a=(t=$a(e,t)).baseState,i=null,p=0,s=t.firstUpdate,c=a;null!==s;){var b=s.expirationTime;b<r?(null===i&&(i=s,a=c),p<b&&(p=b)):(c=Za(e,0,s,c,n,o),null!==s.callback&&(e.effectTag|=32,s.nextEffect=null,null===t.lastEffect?t.firstEffect=t.lastEffect=s:(t.lastEffect.nextEffect=s,t.lastEffect=s))),s=s.next}for(b=null,s=t.firstCapturedUpdate;null!==s;){var M=s.expirationTime;M<r?(null===b&&(b=s,null===i&&(a=c)),p<M&&(p=M)):(c=Za(e,0,s,c,n,o),null!==s.callback&&(e.effectTag|=32,s.nextEffect=null,null===t.lastCapturedEffect?t.firstCapturedEffect=t.lastCapturedEffect=s:(t.lastCapturedEffect.nextEffect=s,t.lastCapturedEffect=s))),s=s.next}null===i&&(t.lastUpdate=null),null===b?t.lastCapturedUpdate=null:e.effectTag|=32,null===i&&null===b&&(a=c),t.baseState=a,t.firstUpdate=i,t.firstCapturedUpdate=b,e.expirationTime=p,e.memoizedState=c}function ti(e,t,n){null!==t.firstCapturedUpdate&&(null!==t.lastUpdate&&(t.lastUpdate.next=t.firstCapturedUpdate,t.lastUpdate=t.lastCapturedUpdate),t.firstCapturedUpdate=t.lastCapturedUpdate=null),ni(t.firstEffect,n),t.firstEffect=t.lastEffect=null,ni(t.firstCapturedEffect,n),t.firstCapturedEffect=t.lastCapturedEffect=null}function ni(e,t){for(;null!==e;){var n=e.callback;if(null!==n){e.callback=null;var o=t;"function"!=typeof n&&i("191",n),n.call(o)}e=e.nextEffect}}function oi(e,t){return{value:e,source:t,stack:st(t)}}function ri(e){e.effectTag|=4}var ai=void 0,ii=void 0,pi=void 0,si=void 0;ai=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},ii=function(){},pi=function(e,t,n,o,a){var i=e.memoizedProps;if(i!==o){var p=t.stateNode;switch(qr(Ar.current),e=null,n){case"input":i=ht(p,i),o=ht(p,o),e=[];break;case"option":i=Un(p,i),o=Un(p,o),e=[];break;case"select":i=r({},i,{value:void 0}),o=r({},o,{value:void 0}),e=[];break;case"textarea":i=Kn(p,i),o=Kn(p,o),e=[];break;default:"function"!=typeof i.onClick&&"function"==typeof o.onClick&&(p.onclick=uo)}bo(n,o),p=n=void 0;var s=null;for(n in i)if(!o.hasOwnProperty(n)&&i.hasOwnProperty(n)&&null!=i[n])if("style"===n){var c=i[n];for(p in c)c.hasOwnProperty(p)&&(s||(s={}),s[p]="")}else"dangerouslySetInnerHTML"!==n&&"children"!==n&&"suppressContentEditableWarning"!==n&&"suppressHydrationWarning"!==n&&"autoFocus"!==n&&(h.hasOwnProperty(n)?e||(e=[]):(e=e||[]).push(n,null));for(n in o){var b=o[n];if(c=null!=i?i[n]:void 0,o.hasOwnProperty(n)&&b!==c&&(null!=b||null!=c))if("style"===n)if(c){for(p in c)!c.hasOwnProperty(p)||b&&b.hasOwnProperty(p)||(s||(s={}),s[p]="");for(p in b)b.hasOwnProperty(p)&&c[p]!==b[p]&&(s||(s={}),s[p]=b[p])}else s||(e||(e=[]),e.push(n,s)),s=b;else"dangerouslySetInnerHTML"===n?(b=b?b.__html:void 0,c=c?c.__html:void 0,null!=b&&c!==b&&(e=e||[]).push(n,""+b)):"children"===n?c===b||"string"!=typeof b&&"number"!=typeof b||(e=e||[]).push(n,""+b):"suppressContentEditableWarning"!==n&&"suppressHydrationWarning"!==n&&(h.hasOwnProperty(n)?(null!=b&&lo(a,n),e||c===b||(e=[])):(e=e||[]).push(n,b))}s&&(e=e||[]).push("style",s),a=e,(t.updateQueue=a)&&ri(t)}},si=function(e,t,n,o){n!==o&&ri(t)};var ci="function"==typeof WeakSet?WeakSet:Set;function bi(e,t){var n=t.source,o=t.stack;null===o&&null!==n&&(o=st(n)),null!==n&&pt(n.type),t=t.value,null!==e&&1===e.tag&&pt(e.type);try{console.error(t)}catch(e){setTimeout(function(){throw e})}}function Mi(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(t){Ui(e,t)}else t.current=null}function li(e,t,n){if(null!==(n=null!==(n=n.updateQueue)?n.lastEffect:null)){var o=n=n.next;do{if((o.tag&e)!==yr){var r=o.destroy;o.destroy=void 0,void 0!==r&&r()}(o.tag&t)!==yr&&(r=o.create,o.destroy=r()),o=o.next}while(o!==n)}}function ui(e){switch("function"==typeof Fo&&Fo(e),e.tag){case 0:case 11:case 14:case 15:var t=e.updateQueue;if(null!==t&&null!==(t=t.lastEffect)){var n=t=t.next;do{var o=n.destroy;if(void 0!==o){var r=e;try{o()}catch(e){Ui(r,e)}}n=n.next}while(n!==t)}break;case 1:if(Mi(e),"function"==typeof(t=e.stateNode).componentWillUnmount)try{t.props=e.memoizedProps,t.state=e.memoizedState,t.componentWillUnmount()}catch(t){Ui(e,t)}break;case 5:Mi(e);break;case 4:fi(e)}}function di(e){return 5===e.tag||3===e.tag||4===e.tag}function zi(e){e:{for(var t=e.return;null!==t;){if(di(t)){var n=t;break e}t=t.return}i("160"),n=void 0}var o=t=void 0;switch(n.tag){case 5:t=n.stateNode,o=!1;break;case 3:case 4:t=n.stateNode.containerInfo,o=!0;break;default:i("161")}16&n.effectTag&&(ro(t,""),n.effectTag&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||di(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.effectTag)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.effectTag)){n=n.stateNode;break e}}for(var r=e;;){if(5===r.tag||6===r.tag)if(n)if(o){var a=t,p=r.stateNode,s=n;8===a.nodeType?a.parentNode.insertBefore(p,s):a.insertBefore(p,s)}else t.insertBefore(r.stateNode,n);else o?(p=t,s=r.stateNode,8===p.nodeType?(a=p.parentNode).insertBefore(s,p):(a=p).appendChild(s),null!=(p=p._reactRootContainer)||null!==a.onclick||(a.onclick=uo)):t.appendChild(r.stateNode);else if(4!==r.tag&&null!==r.child){r.child.return=r,r=r.child;continue}if(r===e)break;for(;null===r.sibling;){if(null===r.return||r.return===e)return;r=r.return}r.sibling.return=r.return,r=r.sibling}}function fi(e){for(var t=e,n=!1,o=void 0,r=void 0;;){if(!n){n=t.return;e:for(;;){switch(null===n&&i("160"),n.tag){case 5:o=n.stateNode,r=!1;break e;case 3:case 4:o=n.stateNode.containerInfo,r=!0;break e}n=n.return}n=!0}if(5===t.tag||6===t.tag){e:for(var a=t,p=a;;)if(ui(p),null!==p.child&&4!==p.tag)p.child.return=p,p=p.child;else{if(p===a)break;for(;null===p.sibling;){if(null===p.return||p.return===a)break e;p=p.return}p.sibling.return=p.return,p=p.sibling}r?(a=o,p=t.stateNode,8===a.nodeType?a.parentNode.removeChild(p):a.removeChild(p)):o.removeChild(t.stateNode)}else if(4===t.tag){if(null!==t.child){o=t.stateNode.containerInfo,r=!0,t.child.return=t,t=t.child;continue}}else if(ui(t),null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return;4===(t=t.return).tag&&(n=!1)}t.sibling.return=t.return,t=t.sibling}}function Oi(e,t){switch(t.tag){case 0:case 11:case 14:case 15:li(Rr,Er,t);break;case 1:break;case 5:var n=t.stateNode;if(null!=n){var o=t.memoizedProps;e=null!==e?e.memoizedProps:o;var r=t.type,a=t.updateQueue;t.updateQueue=null,null!==a&&function(e,t,n,o,r){e[S]=r,"input"===n&&"radio"===r.type&&null!=r.name&&qt(e,r),Mo(n,o),o=Mo(n,r);for(var a=0;a<t.length;a+=2){var i=t[a],p=t[a+1];"style"===i?so(e,p):"dangerouslySetInnerHTML"===i?oo(e,p):"children"===i?ro(e,p):Ot(e,i,p,o)}switch(n){case"input":_t(e,r);break;case"textarea":Gn(e,r);break;case"select":t=e._wrapperState.wasMultiple,e._wrapperState.wasMultiple=!!r.multiple,null!=(n=r.value)?Vn(e,!!r.multiple,n,!1):t!==!!r.multiple&&(null!=r.defaultValue?Vn(e,!!r.multiple,r.defaultValue,!0):Vn(e,!!r.multiple,r.multiple?[]:"",!1))}}(n,a,r,e,o)}break;case 6:null===t.stateNode&&i("162"),t.stateNode.nodeValue=t.memoizedProps;break;case 3:case 12:break;case 13:if(n=t.memoizedState,o=void 0,e=t,null===n?o=!1:(o=!0,e=t.child,0===n.timedOutAt&&(n.timedOutAt=mp())),null!==e&&function(e,t){for(var n=e;;){if(5===n.tag){var o=n.stateNode;if(t)o.style.display="none";else{o=n.stateNode;var r=n.memoizedProps.style;r=null!=r&&r.hasOwnProperty("display")?r.display:null,o.style.display=po("display",r)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else{if(13===n.tag&&null!==n.memoizedState){(o=n.child.sibling).return=n,n=o;continue}if(null!==n.child){n.child.return=n,n=n.child;continue}}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}(e,o),null!==(n=t.updateQueue)){t.updateQueue=null;var p=t.stateNode;null===p&&(p=t.stateNode=new ci),n.forEach(function(e){var n=function(e,t){var n=e.stateNode;null!==n&&n.delete(t),null!==(e=Ji(e,t=Vi(t=mp(),e)))&&(Zo(e,t),0!==(t=e.expirationTime)&&qp(e,t))}.bind(null,t,e);p.has(e)||(p.add(e),e.then(n,n))})}break;case 17:break;default:i("163")}}var Ai="function"==typeof WeakMap?WeakMap:Map;function hi(e,t,n){(n=Ka(n)).tag=Ya,n.payload={element:null};var o=t.value;return n.callback=function(){wp(o),bi(e,t)},n}function mi(e,t,n){(n=Ka(n)).tag=Ya;var o=e.type.getDerivedStateFromError;if("function"==typeof o){var r=t.value;n.payload=function(){return o(r)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){"function"!=typeof o&&(null===Xi?Xi=new Set([this]):Xi.add(this));var n=t.value,r=t.stack;bi(e,t),this.componentDidCatch(n,{componentStack:null!==r?r:""})}),n}function qi(e){switch(e.tag){case 1:So(e.type)&&No();var t=e.effectTag;return 2048&t?(e.effectTag=-2049&t|64,e):null;case 3:return Wr(),Xo(),0!=(64&(t=e.effectTag))&&i("285"),e.effectTag=-2049&t|64,e;case 5:return vr(e),null;case 13:return 2048&(t=e.effectTag)?(e.effectTag=-2049&t|64,e):null;case 18:return null;case 4:return Wr(),null;case 10:return Da(e),null;default:return null}}var _i=Ye.ReactCurrentDispatcher,Wi=Ye.ReactCurrentOwner,gi=1073741822,vi=!1,yi=null,Li=null,Ri=0,Ei=-1,wi=!1,ki=null,Bi=!1,Ti=null,Si=null,Ni=null,Xi=null;function Ci(){if(null!==yi)for(var e=yi.return;null!==e;){var t=e;switch(t.tag){case 1:null!=t.type.childContextTypes&&No();break;case 3:Wr(),Xo();break;case 5:vr(t);break;case 4:Wr();break;case 10:Da(t)}e=e.return}Li=null,Ri=0,Ei=-1,wi=!1,yi=null}function Di(){for(;null!==ki;){var e=ki.effectTag;if(16&e&&ro(ki.stateNode,""),128&e){var t=ki.alternate;null!==t&&null!==(t=t.ref)&&("function"==typeof t?t(null):t.current=null)}switch(14&e){case 2:zi(ki),ki.effectTag&=-3;break;case 6:zi(ki),ki.effectTag&=-3,Oi(ki.alternate,ki);break;case 4:Oi(ki.alternate,ki);break;case 8:fi(e=ki),e.return=null,e.child=null,e.memoizedState=null,e.updateQueue=null,null!==(e=e.alternate)&&(e.return=null,e.child=null,e.memoizedState=null,e.updateQueue=null)}ki=ki.nextEffect}}function Pi(){for(;null!==ki;){if(256&ki.effectTag)e:{var e=ki.alternate,t=ki;switch(t.tag){case 0:case 11:case 15:li(Lr,yr,t);break e;case 1:if(256&t.effectTag&&null!==e){var n=e.memoizedProps,o=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:or(t.type,n),o),e.__reactInternalSnapshotBeforeUpdate=t}break e;case 3:case 5:case 6:case 4:case 17:break e;default:i("163")}}ki=ki.nextEffect}}function xi(e,t){for(;null!==ki;){var n=ki.effectTag;if(36&n){var o=ki.alternate,r=ki,a=t;switch(r.tag){case 0:case 11:case 15:li(wr,kr,r);break;case 1:var p=r.stateNode;if(4&r.effectTag)if(null===o)p.componentDidMount();else{var s=r.elementType===r.type?o.memoizedProps:or(r.type,o.memoizedProps);p.componentDidUpdate(s,o.memoizedState,p.__reactInternalSnapshotBeforeUpdate)}null!==(o=r.updateQueue)&&ti(0,o,p);break;case 3:if(null!==(o=r.updateQueue)){if(p=null,null!==r.child)switch(r.child.tag){case 5:p=r.child.stateNode;break;case 1:p=r.child.stateNode}ti(0,o,p)}break;case 5:a=r.stateNode,null===o&&4&r.effectTag&&Oo(r.type,r.memoizedProps)&&a.focus();break;case 6:case 4:case 12:case 13:case 17:break;default:i("163")}}128&n&&null!==(r=ki.ref)&&(a=ki.stateNode,"function"==typeof r?r(a):r.current=a),512&n&&(Ti=e),ki=ki.nextEffect}}function Hi(){null!==Si&&_o(Si),null!==Ni&&Ni()}function Fi(e,t){Bi=vi=!0,e.current===t&&i("177");var n=e.pendingCommitExpirationTime;0===n&&i("261"),e.pendingCommitExpirationTime=0;var o=t.expirationTime,r=t.childExpirationTime;for(function(e,t){if(e.didError=!1,0===t)e.earliestPendingTime=0,e.latestPendingTime=0,e.earliestSuspendedTime=0,e.latestSuspendedTime=0,e.latestPingedTime=0;else{t<e.latestPingedTime&&(e.latestPingedTime=0);var n=e.latestPendingTime;0!==n&&(n>t?e.earliestPendingTime=e.latestPendingTime=0:e.earliestPendingTime>t&&(e.earliestPendingTime=e.latestPendingTime)),0===(n=e.earliestSuspendedTime)?Zo(e,t):t<e.latestSuspendedTime?(e.earliestSuspendedTime=0,e.latestSuspendedTime=0,e.latestPingedTime=0,Zo(e,t)):t>n&&Zo(e,t)}nr(0,e)}(e,r>o?r:o),Wi.current=null,o=void 0,1<t.effectTag?null!==t.lastEffect?(t.lastEffect.nextEffect=t,o=t.firstEffect):o=t:o=t.firstEffect,zo=gn,fo=function(){var e=Xn();if(Cn(e)){if("selectionStart"in e)var t={start:e.selectionStart,end:e.selectionEnd};else e:{var n=(t=(t=e.ownerDocument)&&t.defaultView||window).getSelection&&t.getSelection();if(n&&0!==n.rangeCount){t=n.anchorNode;var o=n.anchorOffset,r=n.focusNode;n=n.focusOffset;try{t.nodeType,r.nodeType}catch(e){t=null;break e}var a=0,i=-1,p=-1,s=0,c=0,b=e,M=null;t:for(;;){for(var l;b!==t||0!==o&&3!==b.nodeType||(i=a+o),b!==r||0!==n&&3!==b.nodeType||(p=a+n),3===b.nodeType&&(a+=b.nodeValue.length),null!==(l=b.firstChild);)M=b,b=l;for(;;){if(b===e)break t;if(M===t&&++s===o&&(i=a),M===r&&++c===n&&(p=a),null!==(l=b.nextSibling))break;M=(b=M).parentNode}b=l}t=-1===i||-1===p?null:{start:i,end:p}}else t=null}t=t||{start:0,end:0}}else t=null;return{focusedElem:e,selectionRange:t}}(),gn=!1,ki=o;null!==ki;){r=!1;var p=void 0;try{Pi()}catch(e){r=!0,p=e}r&&(null===ki&&i("178"),Ui(ki,p),null!==ki&&(ki=ki.nextEffect))}for(ki=o;null!==ki;){r=!1,p=void 0;try{Di()}catch(e){r=!0,p=e}r&&(null===ki&&i("178"),Ui(ki,p),null!==ki&&(ki=ki.nextEffect))}for(function(e){var t=Xn(),n=e.focusedElem,o=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&function e(t,n){return!(!t||!n)&&(t===n||(!t||3!==t.nodeType)&&(n&&3===n.nodeType?e(t,n.parentNode):"contains"in t?t.contains(n):!!t.compareDocumentPosition&&!!(16&t.compareDocumentPosition(n))))}(n.ownerDocument.documentElement,n)){if(null!==o&&Cn(n))if(t=o.start,void 0===(e=o.end)&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if((e=(t=n.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var r=n.textContent.length,a=Math.min(o.start,r);o=void 0===o.end?a:Math.min(o.end,r),!e.extend&&a>o&&(r=o,o=a,a=r),r=Nn(n,a);var i=Nn(n,o);r&&i&&(1!==e.rangeCount||e.anchorNode!==r.node||e.anchorOffset!==r.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&((t=t.createRange()).setStart(r.node,r.offset),e.removeAllRanges(),a>o?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof n.focus&&n.focus(),n=0;n<t.length;n++)(e=t[n]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}(fo),fo=null,gn=!!zo,zo=null,e.current=t,ki=o;null!==ki;){r=!1,p=void 0;try{xi(e,n)}catch(e){r=!0,p=e}r&&(null===ki&&i("178"),Ui(ki,p),null!==ki&&(ki=ki.nextEffect))}if(null!==o&&null!==Ti){var s=function(e,t){Ni=Si=Ti=null;var n=np;np=!0;do{if(512&t.effectTag){var o=!1,r=void 0;try{var a=t;li(Tr,yr,a),li(yr,Br,a)}catch(e){o=!0,r=e}o&&Ui(t,r)}t=t.nextEffect}while(null!==t);np=n,0!==(n=e.expirationTime)&&qp(e,n),sp||np||yp(1073741823,!1)}.bind(null,e,o);Si=a.unstable_runWithPriority(a.unstable_NormalPriority,function(){return qo(s)}),Ni=s}vi=Bi=!1,"function"==typeof Ho&&Ho(t.stateNode),n=t.expirationTime,0===(t=(t=t.childExpirationTime)>n?t:n)&&(Xi=null),function(e,t){e.expirationTime=t,e.finishedWork=null}(e,t)}function ji(e){for(;;){var t=e.alternate,n=e.return,o=e.sibling;if(0==(1024&e.effectTag)){yi=e;e:{var a=t,p=Ri,s=(t=e).pendingProps;switch(t.tag){case 2:case 16:break;case 15:case 0:break;case 1:So(t.type)&&No();break;case 3:Wr(),Xo(),(s=t.stateNode).pendingContext&&(s.context=s.pendingContext,s.pendingContext=null),null!==a&&null!==a.child||(Aa(t),t.effectTag&=-3),ii(t);break;case 5:vr(t);var c=qr(mr.current);if(p=t.type,null!==a&&null!=t.stateNode)pi(a,t,p,s,c),a.ref!==t.ref&&(t.effectTag|=128);else if(s){var b=qr(Ar.current);if(Aa(t)){a=(s=t).stateNode;var M=s.type,l=s.memoizedProps,u=c;switch(a[T]=s,a[S]=l,p=void 0,c=M){case"iframe":case"object":vn("load",a);break;case"video":case"audio":for(M=0;M<te.length;M++)vn(te[M],a);break;case"source":vn("error",a);break;case"img":case"image":case"link":vn("error",a),vn("load",a);break;case"form":vn("reset",a),vn("submit",a);break;case"details":vn("toggle",a);break;case"input":mt(a,l),vn("invalid",a),lo(u,"onChange");break;case"select":a._wrapperState={wasMultiple:!!l.multiple},vn("invalid",a),lo(u,"onChange");break;case"textarea":Jn(a,l),vn("invalid",a),lo(u,"onChange")}for(p in bo(c,l),M=null,l)l.hasOwnProperty(p)&&(b=l[p],"children"===p?"string"==typeof b?a.textContent!==b&&(M=["children",b]):"number"==typeof b&&a.textContent!==""+b&&(M=["children",""+b]):h.hasOwnProperty(p)&&null!=b&&lo(u,p));switch(c){case"input":Fe(a),Wt(a,l,!0);break;case"textarea":Fe(a),Qn(a);break;case"select":case"option":break;default:"function"==typeof l.onClick&&(a.onclick=uo)}p=M,s.updateQueue=p,(s=null!==p)&&ri(t)}else{l=t,a=p,u=s,M=9===c.nodeType?c:c.ownerDocument,b===$n.html&&(b=Zn(a)),b===$n.html?"script"===a?((a=M.createElement("div")).innerHTML="<script><\/script>",M=a.removeChild(a.firstChild)):"string"==typeof u.is?M=M.createElement(a,{is:u.is}):(M=M.createElement(a),"select"===a&&u.multiple&&(M.multiple=!0)):M=M.createElementNS(b,a),(a=M)[T]=l,a[S]=s,ai(a,t,!1,!1),u=a;var d=c,z=Mo(M=p,l=s);switch(M){case"iframe":case"object":vn("load",u),c=l;break;case"video":case"audio":for(c=0;c<te.length;c++)vn(te[c],u);c=l;break;case"source":vn("error",u),c=l;break;case"img":case"image":case"link":vn("error",u),vn("load",u),c=l;break;case"form":vn("reset",u),vn("submit",u),c=l;break;case"details":vn("toggle",u),c=l;break;case"input":mt(u,l),c=ht(u,l),vn("invalid",u),lo(d,"onChange");break;case"option":c=Un(u,l);break;case"select":u._wrapperState={wasMultiple:!!l.multiple},c=r({},l,{value:void 0}),vn("invalid",u),lo(d,"onChange");break;case"textarea":Jn(u,l),c=Kn(u,l),vn("invalid",u),lo(d,"onChange");break;default:c=l}bo(M,c),b=void 0;var f=M,O=u,A=c;for(b in A)if(A.hasOwnProperty(b)){var m=A[b];"style"===b?so(O,m):"dangerouslySetInnerHTML"===b?null!=(m=m?m.__html:void 0)&&oo(O,m):"children"===b?"string"==typeof m?("textarea"!==f||""!==m)&&ro(O,m):"number"==typeof m&&ro(O,""+m):"suppressContentEditableWarning"!==b&&"suppressHydrationWarning"!==b&&"autoFocus"!==b&&(h.hasOwnProperty(b)?null!=m&&lo(d,b):null!=m&&Ot(O,b,m,z))}switch(M){case"input":Fe(u),Wt(u,l,!1);break;case"textarea":Fe(u),Qn(u);break;case"option":null!=l.value&&u.setAttribute("value",""+At(l.value));break;case"select":(c=u).multiple=!!l.multiple,null!=(u=l.value)?Vn(c,!!l.multiple,u,!1):null!=l.defaultValue&&Vn(c,!!l.multiple,l.defaultValue,!0);break;default:"function"==typeof c.onClick&&(u.onclick=uo)}(s=Oo(p,s))&&ri(t),t.stateNode=a}null!==t.ref&&(t.effectTag|=128)}else null===t.stateNode&&i("166");break;case 6:a&&null!=t.stateNode?si(a,t,a.memoizedProps,s):("string"!=typeof s&&null===t.stateNode&&i("166"),a=qr(mr.current),qr(Ar.current),Aa(t)?(p=(s=t).stateNode,a=s.memoizedProps,p[T]=s,(s=p.nodeValue!==a)&&ri(t)):(p=t,(s=(9===a.nodeType?a:a.ownerDocument).createTextNode(s))[T]=t,p.stateNode=s));break;case 11:break;case 13:if(s=t.memoizedState,0!=(64&t.effectTag)){t.expirationTime=p,yi=t;break e}s=null!==s,p=null!==a&&null!==a.memoizedState,null!==a&&!s&&p&&null!==(a=a.child.sibling)&&(null!==(c=t.firstEffect)?(t.firstEffect=a,a.nextEffect=c):(t.firstEffect=t.lastEffect=a,a.nextEffect=null),a.effectTag=8),(s||p)&&(t.effectTag|=4);break;case 7:case 8:case 12:break;case 4:Wr(),ii(t);break;case 10:Da(t);break;case 9:case 14:break;case 17:So(t.type)&&No();break;case 18:break;default:i("156")}yi=null}if(t=e,1===Ri||1!==t.childExpirationTime){for(s=0,p=t.child;null!==p;)(a=p.expirationTime)>s&&(s=a),(c=p.childExpirationTime)>s&&(s=c),p=p.sibling;t.childExpirationTime=s}if(null!==yi)return yi;null!==n&&0==(1024&n.effectTag)&&(null===n.firstEffect&&(n.firstEffect=e.firstEffect),null!==e.lastEffect&&(null!==n.lastEffect&&(n.lastEffect.nextEffect=e.firstEffect),n.lastEffect=e.lastEffect),1<e.effectTag&&(null!==n.lastEffect?n.lastEffect.nextEffect=e:n.firstEffect=e,n.lastEffect=e))}else{if(null!==(e=qi(e)))return e.effectTag&=1023,e;null!==n&&(n.firstEffect=n.lastEffect=null,n.effectTag|=1024)}if(null!==o)return o;if(null===n)break;e=n}return null}function Yi(e){var t=function(e,t,n){var o=t.expirationTime;if(null!==e){if(e.memoizedProps!==t.pendingProps||ko.current)qa=!0;else if(o<n){switch(qa=!1,t.tag){case 3:wa(t),ha();break;case 5:gr(t);break;case 1:So(t.type)&&Po(t);break;case 4:_r(t,t.stateNode.containerInfo);break;case 10:Ca(t,t.memoizedProps.value);break;case 13:if(null!==t.memoizedState)return 0!==(o=t.child.childExpirationTime)&&o>=n?ka(e,t,n):null!==(t=Ba(e,t,n))?t.sibling:null}return Ba(e,t,n)}}else qa=!1;switch(t.expirationTime=0,t.tag){case 2:o=t.elementType,null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),e=t.pendingProps;var r=To(t,wo.current);if(Pa(t,n),r=Gr(null,t,o,e,r,n),t.effectTag|=1,"object"==typeof r&&null!==r&&"function"==typeof r.render&&void 0===r.$$typeof){if(t.tag=1,Qr(),So(o)){var a=!0;Po(t)}else a=!1;t.memoizedState=null!==r.state&&void 0!==r.state?r.state:null;var p=o.getDerivedStateFromProps;"function"==typeof p&&ar(t,o,p,e),r.updater=ir,t.stateNode=r,r._reactInternalFiber=t,br(t,o,e,n),t=Ea(null,t,o,!0,a,n)}else t.tag=0,_a(null,t,r,n),t=t.child;return t;case 16:switch(r=t.elementType,null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),a=t.pendingProps,e=function(e){var t=e._result;switch(e._status){case 1:return t;case 2:case 0:throw t;default:switch(e._status=0,(t=(t=e._ctor)()).then(function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)},function(t){0===e._status&&(e._status=2,e._result=t)}),e._status){case 1:return e._result;case 2:throw e._result}throw e._result=t,t}}(r),t.type=e,r=t.tag=function(e){if("function"==typeof e)return Uo(e)?1:0;if(null!=e){if((e=e.$$typeof)===tt)return 11;if(e===ot)return 14}return 2}(e),a=or(e,a),p=void 0,r){case 0:p=La(null,t,e,a,n);break;case 1:p=Ra(null,t,e,a,n);break;case 11:p=Wa(null,t,e,a,n);break;case 14:p=ga(null,t,e,or(e.type,a),o,n);break;default:i("306",e,"")}return p;case 0:return o=t.type,r=t.pendingProps,La(e,t,o,r=t.elementType===o?r:or(o,r),n);case 1:return o=t.type,r=t.pendingProps,Ra(e,t,o,r=t.elementType===o?r:or(o,r),n);case 3:return wa(t),null===(o=t.updateQueue)&&i("282"),r=null!==(r=t.memoizedState)?r.element:null,ei(t,o,t.pendingProps,null,n),(o=t.memoizedState.element)===r?(ha(),t=Ba(e,t,n)):(r=t.stateNode,(r=(null===e||null===e.child)&&r.hydrate)&&(la=go(t.stateNode.containerInfo),Ma=t,r=ua=!0),r?(t.effectTag|=2,t.child=fr(t,null,o,n)):(_a(e,t,o,n),ha()),t=t.child),t;case 5:return gr(t),null===e&&fa(t),o=t.type,r=t.pendingProps,a=null!==e?e.memoizedProps:null,p=r.children,Ao(o,r)?p=null:null!==a&&Ao(o,a)&&(t.effectTag|=16),ya(e,t),1!==n&&1&t.mode&&r.hidden?(t.expirationTime=t.childExpirationTime=1,t=null):(_a(e,t,p,n),t=t.child),t;case 6:return null===e&&fa(t),null;case 13:return ka(e,t,n);case 4:return _r(t,t.stateNode.containerInfo),o=t.pendingProps,null===e?t.child=zr(t,null,o,n):_a(e,t,o,n),t.child;case 11:return o=t.type,r=t.pendingProps,Wa(e,t,o,r=t.elementType===o?r:or(o,r),n);case 7:return _a(e,t,t.pendingProps,n),t.child;case 8:case 12:return _a(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(o=t.type._context,r=t.pendingProps,p=t.memoizedProps,Ca(t,a=r.value),null!==p){var s=p.value;if(0==(a=$t(s,a)?0:0|("function"==typeof o._calculateChangedBits?o._calculateChangedBits(s,a):1073741823))){if(p.children===r.children&&!ko.current){t=Ba(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var c=s.contextDependencies;if(null!==c){p=s.child;for(var b=c.first;null!==b;){if(b.context===o&&0!=(b.observedBits&a)){1===s.tag&&((b=Ka(n)).tag=ja,Ga(s,b)),s.expirationTime<n&&(s.expirationTime=n),null!==(b=s.alternate)&&b.expirationTime<n&&(b.expirationTime=n),b=n;for(var M=s.return;null!==M;){var l=M.alternate;if(M.childExpirationTime<b)M.childExpirationTime=b,null!==l&&l.childExpirationTime<b&&(l.childExpirationTime=b);else{if(!(null!==l&&l.childExpirationTime<b))break;l.childExpirationTime=b}M=M.return}c.expirationTime<n&&(c.expirationTime=n);break}b=b.next}}else p=10===s.tag&&s.type===t.type?null:s.child;if(null!==p)p.return=s;else for(p=s;null!==p;){if(p===t){p=null;break}if(null!==(s=p.sibling)){s.return=p.return,p=s;break}p=p.return}s=p}}_a(e,t,r.children,n),t=t.child}return t;case 9:return r=t.type,o=(a=t.pendingProps).children,Pa(t,n),o=o(r=xa(r,a.unstable_observedBits)),t.effectTag|=1,_a(e,t,o,n),t.child;case 14:return a=or(r=t.type,t.pendingProps),ga(e,t,r,a=or(r.type,a),o,n);case 15:return va(e,t,t.type,t.pendingProps,o,n);case 17:return o=t.type,r=t.pendingProps,r=t.elementType===o?r:or(o,r),null!==e&&(e.alternate=null,t.alternate=null,t.effectTag|=2),t.tag=1,So(o)?(e=!0,Po(t)):e=!1,Pa(t,n),sr(t,o,r),br(t,o,r,n),Ea(null,t,o,!0,e,n)}i("156")}(e.alternate,e,Ri);return e.memoizedProps=e.pendingProps,null===t&&(t=ji(e)),Wi.current=null,t}function Ii(e,t){vi&&i("243"),Hi(),vi=!0;var n=_i.current;_i.current=sa;var o=e.nextExpirationTimeToWorkOn;o===Ri&&e===Li&&null!==yi||(Ci(),Ri=o,yi=Vo((Li=e).current,null),e.pendingCommitExpirationTime=0);for(var r=!1;;){try{if(t)for(;null!==yi&&!gp();)yi=Yi(yi);else for(;null!==yi;)yi=Yi(yi)}catch(t){if(Xa=Na=Sa=null,Qr(),null===yi)r=!0,wp(t);else{null===yi&&i("271");var a=yi,p=a.return;if(null!==p){e:{var s=e,c=p,b=a,M=t;if(p=Ri,b.effectTag|=1024,b.firstEffect=b.lastEffect=null,null!==M&&"object"==typeof M&&"function"==typeof M.then){var l=M;M=c;var u=-1,d=-1;do{if(13===M.tag){var z=M.alternate;if(null!==z&&null!==(z=z.memoizedState)){d=10*(1073741822-z.timedOutAt);break}"number"==typeof(z=M.pendingProps.maxDuration)&&(0>=z?u=0:(-1===u||z<u)&&(u=z))}M=M.return}while(null!==M);M=c;do{if((z=13===M.tag)&&(z=void 0!==M.memoizedProps.fallback&&null===M.memoizedState),z){if(null===(c=M.updateQueue)?((c=new Set).add(l),M.updateQueue=c):c.add(l),0==(1&M.mode)){M.effectTag|=64,b.effectTag&=-1957,1===b.tag&&(null===b.alternate?b.tag=17:((p=Ka(1073741823)).tag=ja,Ga(b,p))),b.expirationTime=1073741823;break e}c=p;var f=(b=s).pingCache;null===f?(f=b.pingCache=new Ai,z=new Set,f.set(l,z)):void 0===(z=f.get(l))&&(z=new Set,f.set(l,z)),z.has(c)||(z.add(c),b=Ki.bind(null,b,l,c),l.then(b,b)),-1===u?s=1073741823:(-1===d&&(d=10*(1073741822-tr(s,p))-5e3),s=d+u),0<=s&&Ei<s&&(Ei=s),M.effectTag|=2048,M.expirationTime=p;break e}M=M.return}while(null!==M);M=Error((pt(b.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display."+st(b))}wi=!0,M=oi(M,b),s=c;do{switch(s.tag){case 3:s.effectTag|=2048,s.expirationTime=p,Qa(s,p=hi(s,M,p));break e;case 1:if(u=M,d=s.type,b=s.stateNode,0==(64&s.effectTag)&&("function"==typeof d.getDerivedStateFromError||null!==b&&"function"==typeof b.componentDidCatch&&(null===Xi||!Xi.has(b)))){s.effectTag|=2048,s.expirationTime=p,Qa(s,p=mi(s,u,p));break e}}s=s.return}while(null!==s)}yi=ji(a);continue}r=!0,wp(t)}}break}if(vi=!1,_i.current=n,Xa=Na=Sa=null,Qr(),r)Li=null,e.finishedWork=null;else if(null!==yi)e.finishedWork=null;else{if(null===(n=e.current.alternate)&&i("281"),Li=null,wi){if(r=e.latestPendingTime,a=e.latestSuspendedTime,p=e.latestPingedTime,0!==r&&r<o||0!==a&&a<o||0!==p&&p<o)return er(e,o),void hp(e,n,o,e.expirationTime,-1);if(!e.didError&&t)return e.didError=!0,o=e.nextExpirationTimeToWorkOn=o,t=e.expirationTime=1073741823,void hp(e,n,o,t,-1)}t&&-1!==Ei?(er(e,o),(t=10*(1073741822-tr(e,o)))<Ei&&(Ei=t),t=10*(1073741822-mp()),t=Ei-t,hp(e,n,o,e.expirationTime,0>t?0:t)):(e.pendingCommitExpirationTime=o,e.finishedWork=n)}}function Ui(e,t){for(var n=e.return;null!==n;){switch(n.tag){case 1:var o=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof o.componentDidCatch&&(null===Xi||!Xi.has(o)))return Ga(n,e=mi(n,e=oi(t,e),1073741823)),void Gi(n,1073741823);break;case 3:return Ga(n,e=hi(n,e=oi(t,e),1073741823)),void Gi(n,1073741823)}n=n.return}3===e.tag&&(Ga(e,n=hi(e,n=oi(t,e),1073741823)),Gi(e,1073741823))}function Vi(e,t){var n=a.unstable_getCurrentPriorityLevel(),o=void 0;if(0==(1&t.mode))o=1073741823;else if(vi&&!Bi)o=Ri;else{switch(n){case a.unstable_ImmediatePriority:o=1073741823;break;case a.unstable_UserBlockingPriority:o=1073741822-10*(1+((1073741822-e+15)/10|0));break;case a.unstable_NormalPriority:o=1073741822-25*(1+((1073741822-e+500)/25|0));break;case a.unstable_LowPriority:case a.unstable_IdlePriority:o=1;break;default:i("313")}null!==Li&&o===Ri&&--o}return n===a.unstable_UserBlockingPriority&&(0===ap||o<ap)&&(ap=o),o}function Ki(e,t,n){var o=e.pingCache;null!==o&&o.delete(t),null!==Li&&Ri===n?Li=null:(t=e.earliestSuspendedTime,o=e.latestSuspendedTime,0!==t&&n<=t&&n>=o&&(e.didError=!1,(0===(t=e.latestPingedTime)||t>n)&&(e.latestPingedTime=n),nr(n,e),0!==(n=e.expirationTime)&&qp(e,n)))}function Ji(e,t){e.expirationTime<t&&(e.expirationTime=t);var n=e.alternate;null!==n&&n.expirationTime<t&&(n.expirationTime=t);var o=e.return,r=null;if(null===o&&3===e.tag)r=e.stateNode;else for(;null!==o;){if(n=o.alternate,o.childExpirationTime<t&&(o.childExpirationTime=t),null!==n&&n.childExpirationTime<t&&(n.childExpirationTime=t),null===o.return&&3===o.tag){r=o.stateNode;break}o=o.return}return r}function Gi(e,t){null!==(e=Ji(e,t))&&(!vi&&0!==Ri&&t>Ri&&Ci(),Zo(e,t),vi&&!Bi&&Li===e||qp(e,e.expirationTime),zp>dp&&(zp=0,i("185")))}function Qi(e,t,n,o,r){return a.unstable_runWithPriority(a.unstable_ImmediatePriority,function(){return e(t,n,o,r)})}var $i=null,Zi=null,ep=0,tp=void 0,np=!1,op=null,rp=0,ap=0,ip=!1,pp=null,sp=!1,cp=!1,bp=null,Mp=a.unstable_now(),lp=1073741822-(Mp/10|0),up=lp,dp=50,zp=0,fp=null;function Op(){lp=1073741822-((a.unstable_now()-Mp)/10|0)}function Ap(e,t){if(0!==ep){if(t<ep)return;null!==tp&&a.unstable_cancelCallback(tp)}ep=t,e=a.unstable_now()-Mp,tp=a.unstable_scheduleCallback(vp,{timeout:10*(1073741822-t)-e})}function hp(e,t,n,o,r){e.expirationTime=o,0!==r||gp()?0<r&&(e.timeoutHandle=ho(function(e,t,n){e.pendingCommitExpirationTime=n,e.finishedWork=t,Op(),up=lp,Lp(e,n)}.bind(null,e,t,n),r)):(e.pendingCommitExpirationTime=n,e.finishedWork=t)}function mp(){return np?up:(_p(),0!==rp&&1!==rp||(Op(),up=lp),up)}function qp(e,t){null===e.nextScheduledRoot?(e.expirationTime=t,null===Zi?($i=Zi=e,e.nextScheduledRoot=e):(Zi=Zi.nextScheduledRoot=e).nextScheduledRoot=$i):t>e.expirationTime&&(e.expirationTime=t),np||(sp?cp&&(op=e,rp=1073741823,Rp(e,1073741823,!1)):1073741823===t?yp(1073741823,!1):Ap(e,t))}function _p(){var e=0,t=null;if(null!==Zi)for(var n=Zi,o=$i;null!==o;){var r=o.expirationTime;if(0===r){if((null===n||null===Zi)&&i("244"),o===o.nextScheduledRoot){$i=Zi=o.nextScheduledRoot=null;break}if(o===$i)$i=r=o.nextScheduledRoot,Zi.nextScheduledRoot=r,o.nextScheduledRoot=null;else{if(o===Zi){(Zi=n).nextScheduledRoot=$i,o.nextScheduledRoot=null;break}n.nextScheduledRoot=o.nextScheduledRoot,o.nextScheduledRoot=null}o=n.nextScheduledRoot}else{if(r>e&&(e=r,t=o),o===Zi)break;if(1073741823===e)break;n=o,o=o.nextScheduledRoot}}op=t,rp=e}var Wp=!1;function gp(){return!!Wp||!!a.unstable_shouldYield()&&(Wp=!0)}function vp(){try{if(!gp()&&null!==$i){Op();var e=$i;do{var t=e.expirationTime;0!==t&&lp<=t&&(e.nextExpirationTimeToWorkOn=lp),e=e.nextScheduledRoot}while(e!==$i)}yp(0,!0)}finally{Wp=!1}}function yp(e,t){if(_p(),t)for(Op(),up=lp;null!==op&&0!==rp&&e<=rp&&!(Wp&&lp>rp);)Rp(op,rp,lp>rp),_p(),Op(),up=lp;else for(;null!==op&&0!==rp&&e<=rp;)Rp(op,rp,!1),_p();if(t&&(ep=0,tp=null),0!==rp&&Ap(op,rp),zp=0,fp=null,null!==bp)for(e=bp,bp=null,t=0;t<e.length;t++){var n=e[t];try{n._onComplete()}catch(e){ip||(ip=!0,pp=e)}}if(ip)throw e=pp,pp=null,ip=!1,e}function Lp(e,t){np&&i("253"),op=e,rp=t,Rp(e,t,!1),yp(1073741823,!1)}function Rp(e,t,n){if(np&&i("245"),np=!0,n){var o=e.finishedWork;null!==o?Ep(e,o,t):(e.finishedWork=null,-1!==(o=e.timeoutHandle)&&(e.timeoutHandle=-1,mo(o)),Ii(e,n),null!==(o=e.finishedWork)&&(gp()?e.finishedWork=o:Ep(e,o,t)))}else null!==(o=e.finishedWork)?Ep(e,o,t):(e.finishedWork=null,-1!==(o=e.timeoutHandle)&&(e.timeoutHandle=-1,mo(o)),Ii(e,n),null!==(o=e.finishedWork)&&Ep(e,o,t));np=!1}function Ep(e,t,n){var o=e.firstBatch;if(null!==o&&o._expirationTime>=n&&(null===bp?bp=[o]:bp.push(o),o._defer))return e.finishedWork=t,void(e.expirationTime=0);e.finishedWork=null,e===fp?zp++:(fp=e,zp=0),a.unstable_runWithPriority(a.unstable_ImmediatePriority,function(){Fi(e,t)})}function wp(e){null===op&&i("246"),op.expirationTime=0,ip||(ip=!0,pp=e)}function kp(e,t){var n=sp;sp=!0;try{return e(t)}finally{(sp=n)||np||yp(1073741823,!1)}}function Bp(e,t){if(sp&&!cp){cp=!0;try{return e(t)}finally{cp=!1}}return e(t)}function Tp(e,t,n){sp||np||0===ap||(yp(ap,!1),ap=0);var o=sp;sp=!0;try{return a.unstable_runWithPriority(a.unstable_UserBlockingPriority,function(){return e(t,n)})}finally{(sp=o)||np||yp(1073741823,!1)}}function Sp(e,t,n,o,r){var a=t.current;e:if(n){t:{2===tn(n=n._reactInternalFiber)&&1===n.tag||i("170");var p=n;do{switch(p.tag){case 3:p=p.stateNode.context;break t;case 1:if(So(p.type)){p=p.stateNode.__reactInternalMemoizedMergedChildContext;break t}}p=p.return}while(null!==p);i("171"),p=void 0}if(1===n.tag){var s=n.type;if(So(s)){n=Do(n,s,p);break e}}n=p}else n=Eo;return null===t.context?t.context=n:t.pendingContext=n,t=r,(r=Ka(o)).payload={element:e},null!==(t=void 0===t?null:t)&&(r.callback=t),Hi(),Ga(a,r),Gi(a,o),o}function Np(e,t,n,o){var r=t.current;return Sp(e,t,n,r=Vi(mp(),r),o)}function Xp(e){if(!(e=e.current).child)return null;switch(e.child.tag){case 5:default:return e.child.stateNode}}function Cp(e){var t=1073741822-25*(1+((1073741822-mp()+500)/25|0));t>=gi&&(t=gi-1),this._expirationTime=gi=t,this._root=e,this._callbacks=this._next=null,this._hasChildren=this._didComplete=!1,this._children=null,this._defer=!0}function Dp(){this._callbacks=null,this._didCommit=!1,this._onCommit=this._onCommit.bind(this)}function Pp(e,t,n){e={current:t=Io(3,null,null,t?3:0),containerInfo:e,pendingChildren:null,pingCache:null,earliestPendingTime:0,latestPendingTime:0,earliestSuspendedTime:0,latestSuspendedTime:0,latestPingedTime:0,didError:!1,pendingCommitExpirationTime:0,finishedWork:null,timeoutHandle:-1,context:null,pendingContext:null,hydrate:n,nextExpirationTimeToWorkOn:0,expirationTime:0,firstBatch:null,nextScheduledRoot:null},this._internalRoot=t.stateNode=e}function xp(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Hp(e,t,n,o,r){var a=n._reactRootContainer;if(a){if("function"==typeof r){var i=r;r=function(){var e=Xp(a._internalRoot);i.call(e)}}null!=e?a.legacy_renderSubtreeIntoContainer(e,t,r):a.render(t,r)}else{if(a=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new Pp(e,!1,t)}(n,o),"function"==typeof r){var p=r;r=function(){var e=Xp(a._internalRoot);p.call(e)}}Bp(function(){null!=e?a.legacy_renderSubtreeIntoContainer(e,t,r):a.render(t,r)})}return Xp(a._internalRoot)}function Fp(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;return xp(t)||i("200"),function(e,t,n){var o=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:Ke,key:null==o?null:""+o,children:e,containerInfo:t,implementation:null}}(e,t,null,n)}ye=function(e,t,n){switch(t){case"input":if(_t(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var o=n[t];if(o!==e&&o.form===e.form){var r=D(o);r||i("90"),je(o),_t(o,r)}}}break;case"textarea":Gn(e,n);break;case"select":null!=(t=n.value)&&Vn(e,!!n.multiple,t,!1)}},Cp.prototype.render=function(e){this._defer||i("250"),this._hasChildren=!0,this._children=e;var t=this._root._internalRoot,n=this._expirationTime,o=new Dp;return Sp(e,t,null,n,o._onCommit),o},Cp.prototype.then=function(e){if(this._didComplete)e();else{var t=this._callbacks;null===t&&(t=this._callbacks=[]),t.push(e)}},Cp.prototype.commit=function(){var e=this._root._internalRoot,t=e.firstBatch;if(this._defer&&null!==t||i("251"),this._hasChildren){var n=this._expirationTime;if(t!==this){this._hasChildren&&(n=this._expirationTime=t._expirationTime,this.render(this._children));for(var o=null,r=t;r!==this;)o=r,r=r._next;null===o&&i("251"),o._next=r._next,this._next=t,e.firstBatch=this}this._defer=!1,Lp(e,n),t=this._next,this._next=null,null!==(t=e.firstBatch=t)&&t._hasChildren&&t.render(t._children)}else this._next=null,this._defer=!1},Cp.prototype._onComplete=function(){if(!this._didComplete){this._didComplete=!0;var e=this._callbacks;if(null!==e)for(var t=0;t<e.length;t++)(0,e[t])()}},Dp.prototype.then=function(e){if(this._didCommit)e();else{var t=this._callbacks;null===t&&(t=this._callbacks=[]),t.push(e)}},Dp.prototype._onCommit=function(){if(!this._didCommit){this._didCommit=!0;var e=this._callbacks;if(null!==e)for(var t=0;t<e.length;t++){var n=e[t];"function"!=typeof n&&i("191",n),n()}}},Pp.prototype.render=function(e,t){var n=this._internalRoot,o=new Dp;return null!==(t=void 0===t?null:t)&&o.then(t),Np(e,n,null,o._onCommit),o},Pp.prototype.unmount=function(e){var t=this._internalRoot,n=new Dp;return null!==(e=void 0===e?null:e)&&n.then(e),Np(null,t,null,n._onCommit),n},Pp.prototype.legacy_renderSubtreeIntoContainer=function(e,t,n){var o=this._internalRoot,r=new Dp;return null!==(n=void 0===n?null:n)&&r.then(n),Np(t,o,e,r._onCommit),r},Pp.prototype.createBatch=function(){var e=new Cp(this),t=e._expirationTime,n=this._internalRoot,o=n.firstBatch;if(null===o)n.firstBatch=e,e._next=null;else{for(n=null;null!==o&&o._expirationTime>=t;)n=o,o=o._next;e._next=o,null!==n&&(n._next=e)}return e},Be=kp,Te=Tp,Se=function(){np||0===ap||(yp(ap,!1),ap=0)};var jp={createPortal:Fp,findDOMNode:function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternalFiber;return void 0===t&&("function"==typeof e.render?i("188"):i("268",Object.keys(e))),null===(e=on(t))?null:e.stateNode},hydrate:function(e,t,n){return xp(t)||i("200"),Hp(null,e,t,!0,n)},render:function(e,t,n){return xp(t)||i("200"),Hp(null,e,t,!1,n)},unstable_renderSubtreeIntoContainer:function(e,t,n,o){return xp(n)||i("200"),(null==e||void 0===e._reactInternalFiber)&&i("38"),Hp(e,t,n,!1,o)},unmountComponentAtNode:function(e){return xp(e)||i("40"),!!e._reactRootContainer&&(Bp(function(){Hp(null,null,e,!1,function(){e._reactRootContainer=null})}),!0)},unstable_createPortal:function(){return Fp.apply(void 0,arguments)},unstable_batchedUpdates:kp,unstable_interactiveUpdates:Tp,flushSync:function(e,t){np&&i("187");var n=sp;sp=!0;try{return Qi(e,t)}finally{sp=n,yp(1073741823,!1)}},unstable_createRoot:function(e,t){return xp(e)||i("299","unstable_createRoot"),new Pp(e,!0,null!=t&&!0===t.hydrate)},unstable_flushControlled:function(e){var t=sp;sp=!0;try{Qi(e)}finally{(sp=t)||np||yp(1073741823,!1)}},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{Events:[X,C,D,E.injectEventPluginsByName,A,Y,function(e){y(e,j)},we,ke,Rn,k]}};!function(e){var t=e.findFiberByHostInstance;!function(e){if("undefined"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var t=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(t.isDisabled||!t.supportsFiber)return!0;try{var n=t.inject(e);Ho=jo(function(e){return t.onCommitFiberRoot(n,e)}),Fo=jo(function(e){return t.onCommitFiberUnmount(n,e)})}catch(e){}}(r({},e,{overrideProps:null,currentDispatcherRef:Ye.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=on(e))?null:e.stateNode},findFiberByHostInstance:function(e){return t?t(e):null}}))}({findFiberByHostInstance:N,bundleType:0,version:"16.8.4",rendererPackageName:"react-dom"});var Yp={default:jp},Ip=Yp&&jp||Yp;e.exports=Ip.default||Ip},function(e,t,n){"use strict";e.exports=n(725)},function(e,t,n){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0});var n=null,o=!1,r=3,a=-1,i=-1,p=!1,s=!1;function c(){if(!p){var e=n.expirationTime;s?W():s=!0,_(l,e)}}function b(){var e=n,t=n.next;if(n===t)n=null;else{var o=n.previous;n=o.next=t,t.previous=o}e.next=e.previous=null,o=e.callback,t=e.expirationTime,e=e.priorityLevel;var a=r,p=i;r=e,i=t;try{var s=o()}finally{r=a,i=p}if("function"==typeof s)if(s={callback:s,priorityLevel:e,expirationTime:t,next:null,previous:null},null===n)n=s.next=s.previous=s;else{o=null,e=n;do{if(e.expirationTime>=t){o=e;break}e=e.next}while(e!==n);null===o?o=n:o===n&&(n=s,c()),(t=o.previous).next=o.previous=s,s.next=o,s.previous=t}}function M(){if(-1===a&&null!==n&&1===n.priorityLevel){p=!0;try{do{b()}while(null!==n&&1===n.priorityLevel)}finally{p=!1,null!==n?c():s=!1}}}function l(e){p=!0;var r=o;o=e;try{if(e)for(;null!==n;){var a=t.unstable_now();if(!(n.expirationTime<=a))break;do{b()}while(null!==n&&n.expirationTime<=a)}else if(null!==n)do{b()}while(null!==n&&!g())}finally{p=!1,o=r,null!==n?c():s=!1,M()}}var u,d,z=Date,f="function"==typeof setTimeout?setTimeout:void 0,O="function"==typeof clearTimeout?clearTimeout:void 0,A="function"==typeof requestAnimationFrame?requestAnimationFrame:void 0,h="function"==typeof cancelAnimationFrame?cancelAnimationFrame:void 0;function m(e){u=A(function(t){O(d),e(t)}),d=f(function(){h(u),e(t.unstable_now())},100)}if("object"==typeof performance&&"function"==typeof performance.now){var q=performance;t.unstable_now=function(){return q.now()}}else t.unstable_now=function(){return z.now()};var _,W,g,v=null;if("undefined"!=typeof window?v=window:void 0!==e&&(v=e),v&&v._schedMock){var y=v._schedMock;_=y[0],W=y[1],g=y[2],t.unstable_now=y[3]}else if("undefined"==typeof window||"function"!=typeof MessageChannel){var L=null,R=function(e){if(null!==L)try{L(e)}finally{L=null}};_=function(e){null!==L?setTimeout(_,0,e):(L=e,setTimeout(R,0,!1))},W=function(){L=null},g=function(){return!1}}else{"undefined"!=typeof console&&("function"!=typeof A&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),"function"!=typeof h&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"));var E=null,w=!1,k=-1,B=!1,T=!1,S=0,N=33,X=33;g=function(){return S<=t.unstable_now()};var C=new MessageChannel,D=C.port2;C.port1.onmessage=function(){w=!1;var e=E,n=k;E=null,k=-1;var o=t.unstable_now(),r=!1;if(0>=S-o){if(!(-1!==n&&n<=o))return B||(B=!0,m(P)),E=e,void(k=n);r=!0}if(null!==e){T=!0;try{e(r)}finally{T=!1}}};var P=function(e){if(null!==E){m(P);var t=e-S+X;t<X&&N<X?(8>t&&(t=8),X=t<N?N:t):N=t,S=e+X,w||(w=!0,D.postMessage(void 0))}else B=!1};_=function(e,t){E=e,k=t,T||0>t?D.postMessage(void 0):B||(B=!0,m(P))},W=function(){E=null,w=!1,k=-1}}t.unstable_ImmediatePriority=1,t.unstable_UserBlockingPriority=2,t.unstable_NormalPriority=3,t.unstable_IdlePriority=5,t.unstable_LowPriority=4,t.unstable_runWithPriority=function(e,n){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var o=r,i=a;r=e,a=t.unstable_now();try{return n()}finally{r=o,a=i,M()}},t.unstable_scheduleCallback=function(e,o){var i=-1!==a?a:t.unstable_now();if("object"==typeof o&&null!==o&&"number"==typeof o.timeout)o=i+o.timeout;else switch(r){case 1:o=i+-1;break;case 2:o=i+250;break;case 5:o=i+1073741823;break;case 4:o=i+1e4;break;default:o=i+5e3}if(e={callback:e,priorityLevel:r,expirationTime:o,next:null,previous:null},null===n)n=e.next=e.previous=e,c();else{i=null;var p=n;do{if(p.expirationTime>o){i=p;break}p=p.next}while(p!==n);null===i?i=n:i===n&&(n=e,c()),(o=i.previous).next=i.previous=e,e.next=i,e.previous=o}return e},t.unstable_cancelCallback=function(e){var t=e.next;if(null!==t){if(t===e)n=null;else{e===n&&(n=t);var o=e.previous;o.next=t,t.previous=o}e.next=e.previous=null}},t.unstable_wrapCallback=function(e){var n=r;return function(){var o=r,i=a;r=n,a=t.unstable_now();try{return e.apply(this,arguments)}finally{r=o,a=i,M()}}},t.unstable_getCurrentPriorityLevel=function(){return r},t.unstable_shouldYield=function(){return!o&&(null!==n&&n.expirationTime<i||g())}}).call(this,n(44))},function(e,t,n){"use strict";t.__esModule=!0;var o,r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},a=(o=n(11))&&o.__esModule?o:{default:o},i=n(96),p=n(127);t.default=function(e){return p.canUseDOM||(0,a.default)(!1),function(t){var n=e(t),o=[],a=void 0,p=function(){for(var e=void 0,t=0,n=o.length;null==e&&t<n;++t)e=o[t].call();return e};return r({},n,{listenBeforeUnload:function(e){return 1===o.push(e)&&(a=function(e){var t=function(t){var n=e();if("string"==typeof n)return(t||window.event).returnValue=n,n};return(0,i.addEventListener)(window,"beforeunload",t),function(){return(0,i.removeEventListener)(window,"beforeunload",t)}}(p)),function(){0===(o=o.filter(function(t){return t!==e})).length&&a&&(a(),a=null)}}})}}},function(e,t,n){"use strict";var o=[9,32,37,38,39,40],r=!1;e.exports=function(){document.addEventListener("keydown",function(e){r||-1!==o.indexOf(e.keyCode)&&(r=!0,document.documentElement.classList.add("dops-accessible-focus"))}),document.addEventListener("mouseup",function(){r&&(r=!1,document.documentElement.classList.remove("dops-accessible-focus"))})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=P(n(3)),r=P(n(4)),a=P(n(7)),i=P(n(5)),p=P(n(6)),s=P(n(2)),c=n(9),b=P(n(35)),M=n(659),l=n(395),u=n(8),d=P(n(597)),z=P(n(660)),f=P(n(667)),O=P(n(668)),A=P(n(949)),h=n(716),m=n(20),q=n(21),_=n(86),W=n(56),g=P(n(717)),v=P(n(986)),y=P(n(989)),L=P(n(652)),R=P(n(1001)),E=P(n(1002)),w=P(n(1003)),k=P(n(1004)),B=P(n(1015)),T=P(n(1016)),S=P(n(13)),N=P(n(37)),X=P(n(1017)),C=P(n(1022)),D=n(394);function P(e){return e&&e.__esModule?e:{default:e}}var x=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var c=arguments.length,b=Array(c),l=0;l<c;l++)b[l]=arguments[l];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(b))),a.onBeforeUnload=function(){if(a.props.areThereUnsavedSettings){if(!confirm((0,u.translate)("There are unsaved settings in this tab that will be lost if you leave it. Proceed?")))return!1;a.props.clearUnsavedSettingsFlag()}},a.routerWillLeave=function(){if(a.props.areThereUnsavedSettings){if(!confirm((0,u.translate)("There are unsaved settings in this tab that will be lost if you leave it. Proceed?")))return!1;window.setTimeout(a.props.clearUnsavedSettingsFlag,10)}},a.initializeAnalyitics=function(){var e=a.props.tracksUserData;e&&S.default.initialize(e.userid,e.username)},a.renderJumpstart=function(){return a.props.isSiteConnected&&a.props.jumpStartStatus?s.default.createElement("div",{"aria-live":"assertive"},s.default.createElement(A.default,null)):null},a.renderMainContent=function(e){if(!a.props.userCanManageModules)return!!a.props.siteConnectionStatus&&s.default.createElement("div",{"aria-live":"assertive"},s.default.createElement(w.default,a.props));if(!1===a.props.siteConnectionStatus&&a.props.userCanConnectSite)return s.default.createElement("div",{className:"jp-jetpack-connect__container","aria-live":"assertive"});var t=s.default.createElement(f.default,{route:a.props.route,siteRawUrl:a.props.siteRawUrl,siteAdminUrl:a.props.siteAdminUrl}),n=void 0,o=s.default.createElement(z.default,{route:a.props.route});switch(e){case"/dashboard":n=s.default.createElement(g.default,{siteRawUrl:a.props.siteRawUrl,siteAdminUrl:a.props.siteAdminUrl,rewindStatus:a.props.rewindStatus});break;case"/my-plan":n=s.default.createElement(v.default,{siteRawUrl:a.props.siteRawUrl,siteAdminUrl:a.props.siteAdminUrl,rewindStatus:a.props.rewindStatus});break;case"/plans":n=s.default.createElement(y.default,{siteRawUrl:a.props.siteRawUrl,siteAdminUrl:a.props.siteAdminUrl,rewindStatus:a.props.rewindStatus});break;case"/settings":case"/general":case"/engagement":case"/security":case"/traffic":case"/discussion":case"/performance":case"/writing":case"/sharing":case"/privacy":o=t,n=s.default.createElement(O.default,{route:a.props.route,siteAdminUrl:a.props.siteAdminUrl,siteRawUrl:a.props.siteRawUrl,searchTerm:a.props.searchTerm,rewindStatus:a.props.rewindStatus});break;default:(0,M.createHistory)().replace(window.location.pathname+"?page=jetpack#/dashboard"),n=s.default.createElement(g.default,{siteRawUrl:a.props.siteRawUrl,siteAdminUrl:a.props.siteAdminUrl,rewindStatus:a.props.rewindStatus})}return window.wpNavMenuClassChange(),s.default.createElement("div",{"aria-live":"assertive"},o,a.renderJumpstart(),n,s.default.createElement(X.default,{siteRawUrl:a.props.siteRawUrl,newPlanActivated:a.props.newPlanActivated,userCanManageModules:a.props.userCanManageModules}))},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"UNSAFE_componentWillMount",value:function(){this.props.setInitialState(),N.default.setApiRoot(this.props.apiRoot),N.default.setApiNonce(this.props.apiNonce),this.initializeAnalyitics(),window.addEventListener("beforeunload",this.onBeforeUnload),this.props.router.listenBefore(this.routerWillLeave),this.props.isSiteConnected&&S.default.tracks.recordEvent("jetpack_wpa_page_view",{path:this.props.route.path})}},{key:"componentDidMount",value:function(){var e=jQuery(".jp-jetpack-connect__container"),t=jQuery(".jp-connect-full__container");e&&t.length>0&&t.prependTo(e)}},{key:"shouldComponentUpdate",value:function(e){return!(0,b.default)(["/wpbody-content","/wp-toolbar"],e.route.path)&&(e.siteConnectionStatus!==this.props.siteConnectionStatus||e.jumpStartStatus!==this.props.jumpStartStatus||e.isLinked!==this.props.isLinked||e.route.path!==this.props.route.path||e.searchTerm!==this.props.searchTerm||e.newPlanActivated!==this.props.newPlanActivated||e.rewindStatus!==this.props.rewindStatus)}},{key:"componentDidUpdate",value:function(e){if(e.route.path!==this.props.route.path&&this.props.isSiteConnected&&S.default.tracks.recordEvent("jetpack_wpa_page_view",{path:this.props.route.path}),e.siteConnectionStatus!==this.props.siteConnectionStatus){var t=jQuery("#toplevel_page_jetpack").find("ul.wp-submenu li");t.find('a[href$="#/settings"]').hide(),t.find('a[href$="admin.php?page=stats"]').hide()}}},{key:"render",value:function(){return s.default.createElement("div",null,s.default.createElement(d.default,{route:this.props.route}),s.default.createElement("div",{className:"jp-lower"},this.props.isSiteConnected&&s.default.createElement(C.default,null),s.default.createElement(B.default,null),s.default.createElement(k.default,null),this.renderMainContent(this.props.route.path),this.props.isSiteConnected&&s.default.createElement(R.default,{path:this.props.route.path}),this.props.isSiteConnected&&s.default.createElement(E.default,null)),s.default.createElement(L.default,{siteAdminUrl:this.props.siteAdminUrl}),s.default.createElement(T.default,{analytics:S.default}))}}]),t}(s.default.Component);t.default=(0,c.connect)(function(e){return{jumpStartStatus:(0,h.getJumpStartStatus)(e),siteConnectionStatus:(0,m.getSiteConnectionStatus)(e),isLinked:(0,m.isCurrentUserLinked)(e),siteRawUrl:(0,q.getSiteRawUrl)(e),siteAdminUrl:(0,q.getSiteAdminUrl)(e),searchTerm:(0,W.getSearchTerm)(e),apiRoot:(0,q.getApiRootUrl)(e),apiNonce:(0,q.getApiNonce)(e),tracksUserData:(0,q.getTracksUserData)(e),areThereUnsavedSettings:(0,_.areThereUnsavedSettings)(e),userCanManageModules:(0,q.userCanManageModules)(e),userCanConnectSite:(0,q.userCanConnectSite)(e),isSiteConnected:(0,m.isSiteConnected)(e),newPlanActivated:(0,_.showWelcomeForNewPlan)(e),rewindStatus:(0,D.getRewindStatus)(e)}},function(e){return{setInitialState:function(){return e((0,q.setInitialState)())},clearUnsavedSettingsFlag:function(){return e((0,_.clearUnsavedSettingsFlag)())}}})((0,l.withRouter)(x)),window.wpNavMenuClassChange=function(){var e=window.location.hash;jQuery(".current").each(function(e,t){jQuery(t).removeClass("current")}),e=e.split("?")[0],(0,b.default)(["#/","#/dashboard","#/my-plan","#/plans"],e)?jQuery("#toplevel_page_jetpack").find("li").filter(function(e){return 1===e})[0].classList.add("current"):(0,b.default)(["#/settings","#/general","#/discussion","#/security","#/performance","#/traffic","#/writing","#/sharing","#/privacy"],e)&&jQuery("#toplevel_page_jetpack").find("li").filter(function(e){return 2===e})[0].classList.add("current");var t=jQuery("body");t.on("click",'a[href$="#/dashboard"], a[href$="#/settings"], .jp-dash-section-header__settings[href="#/security"], .dops-button[href="#/my-plan"], .dops-button[href="#/plans"], .jp-dash-section-header__external-link[href="#/security"]',function(){window.scrollTo(0,0)}),t.on("click",".jetpack-js-stop-propagation",function(e){e.stopPropagation()})},e.exports=t.default},function(e,t,n){var o=n(180);e.exports=function(e,t){return o(e,t)}},function(e,t,n){var o=n(36);e.exports=function(){return o.Date.now()}},function(e,t,n){var o=n(124),r=n(45);e.exports=function(e,t){var n=-1,a=r(e)?Array(e.length):[];return o(e,function(e,o,r){a[++n]=t(e,o,r)}),a}},function(e,t,n){var o=n(79),r=n(129),a=n(75);e.exports=function(e,t,n){var i=-1,p=(t=o(t,e)).length;for(p||(p=1,e=void 0);++i<p;){var s=null==e?void 0:e[a(t[i])];void 0===s&&(i=p,s=n),e=r(s)?s.call(e):s}return e}},function(e,t,n){},function(e,t,n){"use strict";var o=s(n(3)),r=s(n(4)),a=s(n(7)),i=s(n(5)),p=s(n(6));function s(e){return e&&e.__esModule?e:{default:e}}var c=n(2),b=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){return c.createElement("li",{className:"dops-select-dropdown__separator"})}}]),t}(c.Component);e.exports=b},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=c(n(3)),r=c(n(4)),a=c(n(7)),i=c(n(5)),p=c(n(6)),s=c(n(2));function c(e){return e&&e.__esModule?e:{default:e}}var b=s.default.Component,M=function(e){return e.stopPropagation()},l=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){return s.default.createElement("li",{role:"menuitem",onClick:M,className:"dops-select-dropdown__label"},s.default.createElement("label",null,this.props.children))}}]),t}(b);t.default=l,e.exports=t.default},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){"use strict";var o=n(104)("calypso:url-search"),r=n(741),a=n(743);e.exports={getInitialState:function(){return{searchOpen:!1}},UNSAFE_componentWillReceiveProps:function(e){e.search||this.setState({searchOpen:!1})},doSearch:function(e){var t=void 0;this.setState({searchOpen:!1!==e}),this.onSearch?this.onSearch(e):(t=this.buildUrl&&"function"==typeof this.buildUrl?this.buildUrl(window.location.href,e):a(window.location.href,e),o("search posts for:",e),this.props.search&&e?(o("replacing URL: "+t),r.replace(t)):(o("setting URL: "+t),r(t)))},getSearchOpen:function(){return!1!==this.state.searchOpen||this.props.search}}},function(e,t,n){"use strict";(function(t){var o=n(742);e.exports=l;var r,a,i="undefined"!=typeof document&&document.ontouchstart?"touchstart":"click",p="undefined"!=typeof window&&(window.history.location||window.location),s=!0,c=!0,b="",M=!1;function l(e,t){if("function"==typeof e)return l("*",e);if("function"==typeof t)for(var n=new z(e),o=1;o<arguments.length;++o)l.callbacks.push(n.middleware(arguments[o]));else"string"==typeof e?l["string"==typeof t?"redirect":"show"](e,t):l.start(e)}function u(e){return"string"!=typeof e?e:c?decodeURIComponent(e.replace(/\+/g," ")):e}function d(e,t){"/"===e[0]&&0!==e.indexOf(b)&&(e=b+(M?"#!":"")+e);var n=e.indexOf("?");if(this.canonicalPath=e,this.path=e.replace(b,"")||"/",M&&(this.path=this.path.replace("#!","")||"/"),this.title=document.title,this.state=t||{},this.state.path=e,this.querystring=~n?u(e.slice(n+1)):"",this.pathname=u(~n?e.slice(0,n):e),this.params={},this.hash="",!M){if(!~this.path.indexOf("#"))return;var o=this.path.split("#");this.path=o[0],this.hash=u(o[1])||"",this.querystring=this.querystring.split("#")[0]}}function z(e,t){t=t||{},this.path="*"===e?"(.*)":e,this.method="GET",this.regexp=o(this.path,this.keys=[],t)}l.callbacks=[],l.exits=[],l.current="",l.len=0,l.base=function(e){if(0===arguments.length)return b;b=e},l.start=function(e){if(e=e||{},!r&&(r=!0,!1===e.dispatch&&(s=!1),!1===e.decodeURLComponents&&(c=!1),!1!==e.popstate&&window.addEventListener("popstate",f,!1),!1!==e.click&&document.addEventListener(i,O,!1),!0===e.hashbang&&(M=!0),s)){var t=M&&~p.hash.indexOf("#!")?p.hash.substr(2)+p.search:p.pathname+p.search+p.hash;l.replace(t,null,!0,s)}},l.stop=function(){r&&(l.current="",l.len=0,r=!1,document.removeEventListener(i,O,!1),window.removeEventListener("popstate",f,!1))},l.show=function(e,t,n,o){var r=new d(e,t);return l.current=r.path,!1!==n&&l.dispatch(r),!1!==r.handled&&!1!==o&&r.pushState(),r},l.back=function(e,t){l.len>0?(history.back(),l.len--):e?setTimeout(function(){l.show(e,t)}):setTimeout(function(){l.show(b,t)})},l.redirect=function(e,t){"string"==typeof e&&"string"==typeof t&&l(e,function(e){setTimeout(function(){l.replace(t)},0)}),"string"==typeof e&&void 0===t&&setTimeout(function(){l.replace(e)},0)},l.replace=function(e,t,n,o){var r=new d(e,t);return l.current=r.path,r.init=n,r.save(),!1!==o&&l.dispatch(r),r},l.dispatch=function(e){var t=a,n=0,o=0;function r(){var t=l.callbacks[n++];if(e.path===l.current)return t?void t(e,r):function(e){e.handled||(M?b+p.hash.replace("#!",""):p.pathname+p.search)!==e.canonicalPath&&(l.stop(),e.handled=!1,p.href=e.canonicalPath)}(e);e.handled=!1}a=e,t?function e(){var n=l.exits[o++];if(!n)return r();n(t,e)}():r()},l.exit=function(e,t){if("function"==typeof e)return l.exit("*",e);for(var n=new z(e),o=1;o<arguments.length;++o)l.exits.push(n.middleware(arguments[o]))},l.Context=d,d.prototype.pushState=function(){l.len++,history.pushState(this.state,this.title,M&&"/"!==this.path?"#!"+this.path:this.canonicalPath)},d.prototype.save=function(){history.replaceState(this.state,this.title,M&&"/"!==this.path?"#!"+this.path:this.canonicalPath)},l.Route=z,z.prototype.middleware=function(e){var t=this;return function(n,o){if(t.match(n.path,n.params))return e(n,o);o()}},z.prototype.match=function(e,t){var n=this.keys,o=e.indexOf("?"),r=~o?e.slice(0,o):e,a=this.regexp.exec(decodeURIComponent(r));if(!a)return!1;for(var i=1,p=a.length;i<p;++i){var s=n[i-1],c=u(a[i]);void 0===c&&hasOwnProperty.call(t,s.name)||(t[s.name]=c)}return!0};var f=function(){var e=!1;if("undefined"!=typeof window)return"complete"===document.readyState?e=!0:window.addEventListener("load",function(){setTimeout(function(){e=!0},0)}),function(t){if(e)if(t.state){var n=t.state.path;l.replace(n,t.state)}else l.show(p.pathname+p.hash,void 0,void 0,!1)}}();function O(e){if(1===function(e){return null===(e=e||window.event).which?e.button:e.which}(e)&&!(e.metaKey||e.ctrlKey||e.shiftKey||e.defaultPrevented)){for(var n=e.path?e.path[0]:e.target;n&&"A"!==n.nodeName;)n=n.parentNode;if(n&&"A"===n.nodeName&&!n.hasAttribute("download")&&"external"!==n.getAttribute("rel")){var o=n.getAttribute("href");if((M||n.pathname!==p.pathname||!n.hash&&"#"!==o)&&!(o&&o.indexOf("mailto:")>-1)&&!n.target&&A(n.href)){var r=n.pathname+n.search+(n.hash||"");void 0!==t&&r.match(/^\/[a-zA-Z]:\//)&&(r=r.replace(/^\/[a-zA-Z]:\//,"/"));var a=r;0===r.indexOf(b)&&(r=r.substr(b.length)),M&&(r=r.replace("#!","")),b&&a===r||(e.preventDefault(),l.show(a))}}}}function A(e){var t=p.protocol+"//"+p.hostname;return p.port&&(t+=":"+p.port),e&&0===e.indexOf(t)}l.sameOrigin=A}).call(this,n(71))},function(e,t,n){var o=n(611);e.exports=function e(t,n,r){return o(n=n||[])?r||(r={}):(r=n,n=[]),t instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var o=0;o<n.length;o++)t.push({name:o,prefix:null,delimiter:null,optional:!1,repeat:!1,pattern:null});return c(e,t)}(t,n):o(t)?function(t,n,o){for(var r=[],a=0;a<t.length;a++)r.push(e(t[a],n,o).source);return c(new RegExp("(?:"+r.join("|")+")",b(o)),n)}(t,n,r):function(e,t,n){for(var o=a(e),r=M(o,n),i=0;i<o.length;i++)"string"!=typeof o[i]&&t.push(o[i]);return c(r,t)}(t,n,r)},e.exports.parse=a,e.exports.compile=function(e){return i(a(e))},e.exports.tokensToFunction=i,e.exports.tokensToRegExp=M;var r=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^()])+)\\))?|\\(((?:\\\\.|[^()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e){for(var t,n=[],o=0,a=0,i="";null!=(t=r.exec(e));){var p=t[0],c=t[1],b=t.index;if(i+=e.slice(a,b),a=b+p.length,c)i+=c[1];else{i&&(n.push(i),i="");var M=t[2],l=t[3],u=t[4],d=t[5],z=t[6],f=t[7],O="+"===z||"*"===z,A="?"===z||"*"===z,h=M||"/",m=u||d||(f?".*":"[^"+h+"]+?");n.push({name:l||o++,prefix:M||"",delimiter:h,optional:A,repeat:O,pattern:s(m)})}}return a<e.length&&(i+=e.substr(a)),i&&n.push(i),n}function i(e){for(var t=new Array(e.length),n=0;n<e.length;n++)"object"==typeof e[n]&&(t[n]=new RegExp("^"+e[n].pattern+"$"));return function(n){for(var r="",a=n||{},i=0;i<e.length;i++){var p=e[i];if("string"!=typeof p){var s,c=a[p.name];if(null==c){if(p.optional)continue;throw new TypeError('Expected "'+p.name+'" to be defined')}if(o(c)){if(!p.repeat)throw new TypeError('Expected "'+p.name+'" to not repeat, but received "'+c+'"');if(0===c.length){if(p.optional)continue;throw new TypeError('Expected "'+p.name+'" to not be empty')}for(var b=0;b<c.length;b++){if(s=encodeURIComponent(c[b]),!t[i].test(s))throw new TypeError('Expected all "'+p.name+'" to match "'+p.pattern+'", but received "'+s+'"');r+=(0===b?p.prefix:p.delimiter)+s}}else{if(s=encodeURIComponent(c),!t[i].test(s))throw new TypeError('Expected "'+p.name+'" to match "'+p.pattern+'", but received "'+s+'"');r+=p.prefix+s}}else r+=p}return r}}function p(e){return e.replace(/([.+*?=^!:${}()[\]|\/])/g,"\\$1")}function s(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function c(e,t){return e.keys=t,e}function b(e){return e.sensitive?"":"i"}function M(e,t){for(var n=(t=t||{}).strict,o=!1!==t.end,r="",a=e[e.length-1],i="string"==typeof a&&/\/$/.test(a),s=0;s<e.length;s++){var c=e[s];if("string"==typeof c)r+=p(c);else{var M=p(c.prefix),l=c.pattern;c.repeat&&(l+="(?:"+M+l+")*"),r+=l=c.optional?M?"(?:"+M+"("+l+"))?":"("+l+")?":M+"("+l+")"}}return n||(r=(i?r.slice(0,-2):r)+"(?:\\/(?=$))?"),r+=o?"$":n&&i?"":"(?=\\/|$)",new RegExp("^"+r,b(t))}},function(e,t,n){"use strict";var o=n(744),r=n(750);e.exports=function(e,t){var n=o.parse(e,!0);return t?n.query.s=t:delete n.query.s,n=r(n,"pathname","hash","query"),o.format(n).replace(/\%20/g,"+")}},function(e,t,n){"use strict";var o=n(745),r=n(746);function a(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}t.parse=h,t.resolve=function(e,t){return h(e,!1,!0).resolve(t)},t.resolveObject=function(e,t){return e?h(e,!1,!0).resolveObject(t):t},t.format=function(e){return r.isString(e)&&(e=h(e)),e instanceof a?e.format():a.prototype.format.call(e)},t.Url=a;var i=/^([a-z0-9.+-]+:)/i,p=/:[0-9]*$/,s=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,c=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),b=["'"].concat(c),M=["%","/","?",";","#"].concat(b),l=["/","?","#"],u=/^[+a-z0-9A-Z_-]{0,63}$/,d=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,z={javascript:!0,"javascript:":!0},f={javascript:!0,"javascript:":!0},O={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},A=n(747);function h(e,t,n){if(e&&r.isObject(e)&&e instanceof a)return e;var o=new a;return o.parse(e,t,n),o}a.prototype.parse=function(e,t,n){if(!r.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var a=e.indexOf("?"),p=-1!==a&&a<e.indexOf("#")?"?":"#",c=e.split(p);c[0]=c[0].replace(/\\/g,"/");var h=e=c.join(p);if(h=h.trim(),!n&&1===e.split("#").length){var m=s.exec(h);if(m)return this.path=h,this.href=h,this.pathname=m[1],m[2]?(this.search=m[2],this.query=t?A.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search="",this.query={}),this}var q=i.exec(h);if(q){var _=(q=q[0]).toLowerCase();this.protocol=_,h=h.substr(q.length)}if(n||q||h.match(/^\/\/[^@\/]+@[^@\/]+/)){var W="//"===h.substr(0,2);!W||q&&f[q]||(h=h.substr(2),this.slashes=!0)}if(!f[q]&&(W||q&&!O[q])){for(var g,v,y=-1,L=0;L<l.length;L++)-1!==(R=h.indexOf(l[L]))&&(-1===y||R<y)&&(y=R);for(-1!==(v=-1===y?h.lastIndexOf("@"):h.lastIndexOf("@",y))&&(g=h.slice(0,v),h=h.slice(v+1),this.auth=decodeURIComponent(g)),y=-1,L=0;L<M.length;L++){var R;-1!==(R=h.indexOf(M[L]))&&(-1===y||R<y)&&(y=R)}-1===y&&(y=h.length),this.host=h.slice(0,y),h=h.slice(y),this.parseHost(),this.hostname=this.hostname||"";var E="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!E)for(var w=this.hostname.split(/\./),k=(L=0,w.length);L<k;L++){var B=w[L];if(B&&!B.match(u)){for(var T="",S=0,N=B.length;S<N;S++)B.charCodeAt(S)>127?T+="x":T+=B[S];if(!T.match(u)){var X=w.slice(0,L),C=w.slice(L+1),D=B.match(d);D&&(X.push(D[1]),C.unshift(D[2])),C.length&&(h="/"+C.join(".")+h),this.hostname=X.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),E||(this.hostname=o.toASCII(this.hostname));var P=this.port?":"+this.port:"",x=this.hostname||"";this.host=x+P,this.href+=this.host,E&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==h[0]&&(h="/"+h))}if(!z[_])for(L=0,k=b.length;L<k;L++){var H=b[L];if(-1!==h.indexOf(H)){var F=encodeURIComponent(H);F===H&&(F=escape(H)),h=h.split(H).join(F)}}var j=h.indexOf("#");-1!==j&&(this.hash=h.substr(j),h=h.slice(0,j));var Y=h.indexOf("?");if(-1!==Y?(this.search=h.substr(Y),this.query=h.substr(Y+1),t&&(this.query=A.parse(this.query)),h=h.slice(0,Y)):t&&(this.search="",this.query={}),h&&(this.pathname=h),O[_]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){P=this.pathname||"";var I=this.search||"";this.path=P+I}return this.href=this.format(),this},a.prototype.format=function(){var e=this.auth||"";e&&(e=(e=encodeURIComponent(e)).replace(/%3A/i,":"),e+="@");var t=this.protocol||"",n=this.pathname||"",o=this.hash||"",a=!1,i="";this.host?a=e+this.host:this.hostname&&(a=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(a+=":"+this.port)),this.query&&r.isObject(this.query)&&Object.keys(this.query).length&&(i=A.stringify(this.query));var p=this.search||i&&"?"+i||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||O[t])&&!1!==a?(a="//"+(a||""),n&&"/"!==n.charAt(0)&&(n="/"+n)):a||(a=""),o&&"#"!==o.charAt(0)&&(o="#"+o),p&&"?"!==p.charAt(0)&&(p="?"+p),t+a+(n=n.replace(/[?#]/g,function(e){return encodeURIComponent(e)}))+(p=p.replace("#","%23"))+o},a.prototype.resolve=function(e){return this.resolveObject(h(e,!1,!0)).format()},a.prototype.resolveObject=function(e){if(r.isString(e)){var t=new a;t.parse(e,!1,!0),e=t}for(var n=new a,o=Object.keys(this),i=0;i<o.length;i++){var p=o[i];n[p]=this[p]}if(n.hash=e.hash,""===e.href)return n.href=n.format(),n;if(e.slashes&&!e.protocol){for(var s=Object.keys(e),c=0;c<s.length;c++){var b=s[c];"protocol"!==b&&(n[b]=e[b])}return O[n.protocol]&&n.hostname&&!n.pathname&&(n.path=n.pathname="/"),n.href=n.format(),n}if(e.protocol&&e.protocol!==n.protocol){if(!O[e.protocol]){for(var M=Object.keys(e),l=0;l<M.length;l++){var u=M[l];n[u]=e[u]}return n.href=n.format(),n}if(n.protocol=e.protocol,e.host||f[e.protocol])n.pathname=e.pathname;else{for(var d=(e.pathname||"").split("/");d.length&&!(e.host=d.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==d[0]&&d.unshift(""),d.length<2&&d.unshift(""),n.pathname=d.join("/")}if(n.search=e.search,n.query=e.query,n.host=e.host||"",n.auth=e.auth,n.hostname=e.hostname||e.host,n.port=e.port,n.pathname||n.search){var z=n.pathname||"",A=n.search||"";n.path=z+A}return n.slashes=n.slashes||e.slashes,n.href=n.format(),n}var h=n.pathname&&"/"===n.pathname.charAt(0),m=e.host||e.pathname&&"/"===e.pathname.charAt(0),q=m||h||n.host&&e.pathname,_=q,W=n.pathname&&n.pathname.split("/")||[],g=(d=e.pathname&&e.pathname.split("/")||[],n.protocol&&!O[n.protocol]);if(g&&(n.hostname="",n.port=null,n.host&&(""===W[0]?W[0]=n.host:W.unshift(n.host)),n.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===d[0]?d[0]=e.host:d.unshift(e.host)),e.host=null),q=q&&(""===d[0]||""===W[0])),m)n.host=e.host||""===e.host?e.host:n.host,n.hostname=e.hostname||""===e.hostname?e.hostname:n.hostname,n.search=e.search,n.query=e.query,W=d;else if(d.length)W||(W=[]),W.pop(),W=W.concat(d),n.search=e.search,n.query=e.query;else if(!r.isNullOrUndefined(e.search))return g&&(n.hostname=n.host=W.shift(),(E=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=E.shift(),n.host=n.hostname=E.shift())),n.search=e.search,n.query=e.query,r.isNull(n.pathname)&&r.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n;if(!W.length)return n.pathname=null,n.search?n.path="/"+n.search:n.path=null,n.href=n.format(),n;for(var v=W.slice(-1)[0],y=(n.host||e.host||W.length>1)&&("."===v||".."===v)||""===v,L=0,R=W.length;R>=0;R--)"."===(v=W[R])?W.splice(R,1):".."===v?(W.splice(R,1),L++):L&&(W.splice(R,1),L--);if(!q&&!_)for(;L--;L)W.unshift("..");!q||""===W[0]||W[0]&&"/"===W[0].charAt(0)||W.unshift(""),y&&"/"!==W.join("/").substr(-1)&&W.push("");var E,w=""===W[0]||W[0]&&"/"===W[0].charAt(0);return g&&(n.hostname=n.host=w?"":W.length?W.shift():"",(E=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=E.shift(),n.host=n.hostname=E.shift())),(q=q||n.host&&W.length)&&!w&&W.unshift(""),W.length?n.pathname=W.join("/"):(n.pathname=null,n.path=null),r.isNull(n.pathname)&&r.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},a.prototype.parseHost=function(){var e=this.host,t=p.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},function(e,t,n){(function(e,o){var r;!function(a){t&&t.nodeType,e&&e.nodeType;var i="object"==typeof o&&o;i.global!==i&&i.window!==i&&i.self;var p,s=2147483647,c=36,b=1,M=26,l=38,u=700,d=72,z=128,f="-",O=/^xn--/,A=/[^\x20-\x7E]/,h=/[\x2E\u3002\uFF0E\uFF61]/g,m={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},q=c-b,_=Math.floor,W=String.fromCharCode;function g(e){throw new RangeError(m[e])}function v(e,t){for(var n=e.length,o=[];n--;)o[n]=t(e[n]);return o}function y(e,t){var n=e.split("@"),o="";return n.length>1&&(o=n[0]+"@",e=n[1]),o+v((e=e.replace(h,".")).split("."),t).join(".")}function L(e){for(var t,n,o=[],r=0,a=e.length;r<a;)(t=e.charCodeAt(r++))>=55296&&t<=56319&&r<a?56320==(64512&(n=e.charCodeAt(r++)))?o.push(((1023&t)<<10)+(1023&n)+65536):(o.push(t),r--):o.push(t);return o}function R(e){return v(e,function(e){var t="";return e>65535&&(t+=W((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+W(e)}).join("")}function E(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function w(e,t,n){var o=0;for(e=n?_(e/u):e>>1,e+=_(e/t);e>q*M>>1;o+=c)e=_(e/q);return _(o+(q+1)*e/(e+l))}function k(e){var t,n,o,r,a,i,p,l,u,O,A,h=[],m=e.length,q=0,W=z,v=d;for((n=e.lastIndexOf(f))<0&&(n=0),o=0;o<n;++o)e.charCodeAt(o)>=128&&g("not-basic"),h.push(e.charCodeAt(o));for(r=n>0?n+1:0;r<m;){for(a=q,i=1,p=c;r>=m&&g("invalid-input"),((l=(A=e.charCodeAt(r++))-48<10?A-22:A-65<26?A-65:A-97<26?A-97:c)>=c||l>_((s-q)/i))&&g("overflow"),q+=l*i,!(l<(u=p<=v?b:p>=v+M?M:p-v));p+=c)i>_(s/(O=c-u))&&g("overflow"),i*=O;v=w(q-a,t=h.length+1,0==a),_(q/t)>s-W&&g("overflow"),W+=_(q/t),q%=t,h.splice(q++,0,W)}return R(h)}function B(e){var t,n,o,r,a,i,p,l,u,O,A,h,m,q,v,y=[];for(h=(e=L(e)).length,t=z,n=0,a=d,i=0;i<h;++i)(A=e[i])<128&&y.push(W(A));for(o=r=y.length,r&&y.push(f);o<h;){for(p=s,i=0;i<h;++i)(A=e[i])>=t&&A<p&&(p=A);for(p-t>_((s-n)/(m=o+1))&&g("overflow"),n+=(p-t)*m,t=p,i=0;i<h;++i)if((A=e[i])<t&&++n>s&&g("overflow"),A==t){for(l=n,u=c;!(l<(O=u<=a?b:u>=a+M?M:u-a));u+=c)v=l-O,q=c-O,y.push(W(E(O+v%q,0))),l=_(v/q);y.push(W(E(l,0))),a=w(n,m,o==r),n=0,++o}++n,++t}return y.join("")}p={version:"1.4.1",ucs2:{decode:L,encode:R},decode:k,encode:B,toASCII:function(e){return y(e,function(e){return A.test(e)?"xn--"+B(e):e})},toUnicode:function(e){return y(e,function(e){return O.test(e)?k(e.slice(4).toLowerCase()):e})}},void 0===(r=function(){return p}.call(t,n,t,e))||(e.exports=r)}()}).call(this,n(89)(e),n(44))},function(e,t,n){"use strict";e.exports={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},function(e,t,n){"use strict";t.decode=t.parse=n(748),t.encode=t.stringify=n(749)},function(e,t,n){"use strict";function o(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports=function(e,t,n,a){t=t||"&",n=n||"=";var i={};if("string"!=typeof e||0===e.length)return i;var p=/\+/g;e=e.split(t);var s=1e3;a&&"number"==typeof a.maxKeys&&(s=a.maxKeys);var c=e.length;s>0&&c>s&&(c=s);for(var b=0;b<c;++b){var M,l,u,d,z=e[b].replace(p,"%20"),f=z.indexOf(n);f>=0?(M=z.substr(0,f),l=z.substr(f+1)):(M=z,l=""),u=decodeURIComponent(M),d=decodeURIComponent(l),o(i,u)?r(i[u])?i[u].push(d):i[u]=[i[u],d]:i[u]=d}return i};var r=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},function(e,t,n){"use strict";var o=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};e.exports=function(e,t,n,p){return t=t||"&",n=n||"=",null===e&&(e=void 0),"object"==typeof e?a(i(e),function(i){var p=encodeURIComponent(o(i))+n;return r(e[i])?a(e[i],function(e){return p+encodeURIComponent(o(e))}).join(t):p+encodeURIComponent(o(e[i]))}).join(t):p?encodeURIComponent(o(p))+n+encodeURIComponent(o(e)):""};var r=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};function a(e,t){if(e.map)return e.map(t);for(var n=[],o=0;o<e.length;o++)n.push(t(e[o],o));return n}var i=Object.keys||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return t}},function(e,t,n){var o=n(751),r=n(418)(function(e,t){return null==e?{}:o(e,t)});e.exports=r},function(e,t,n){var o=n(752),r=n(407);e.exports=function(e,t){return o(e,t,function(t,n){return r(e,n)})}},function(e,t,n){var o=n(132),r=n(753),a=n(79);e.exports=function(e,t,n){for(var i=-1,p=t.length,s={};++i<p;){var c=t[i],b=o(e,c);n(b,c)&&r(s,a(c,e),b)}return s}},function(e,t,n){var o=n(128),r=n(79),a=n(130),i=n(34),p=n(75);e.exports=function(e,t,n,s){if(!i(e))return e;for(var c=-1,b=(t=r(t,e)).length,M=b-1,l=e;null!=l&&++c<b;){var u=p(t[c]),d=n;if(c!=M){var z=l[u];void 0===(d=s?s(z,u,l):void 0)&&(d=i(z)?z:a(t[c+1])?[]:{})}o(l,u,d),l=l[u]}return e}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.filterSearch=void 0;var o=n(14);t.filterSearch=function(e){return function(t){t({type:o.JETPACK_SEARCH_TERM,term:e})}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Discussion=void 0;var o=m(n(10)),r=m(n(3)),a=m(n(4)),i=m(n(7)),p=m(n(5)),s=m(n(6)),c=m(n(2)),b=n(9),M=n(8),l=m(n(17)),u=n(24),d=n(86),z=n(20),f=n(56),O=m(n(125)),A=n(757),h=n(893);function m(e){return e&&e.__esModule?e:{default:e}}var q=t.Discussion=function(e){function t(){return(0,a.default)(this,t),(0,p.default)(this,(t.__proto__||(0,r.default)(t)).apply(this,arguments))}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e={settings:this.props.settings,getModule:this.props.module,isDevMode:this.props.isDevMode,isUnavailableInDevMode:this.props.isUnavailableInDevMode},t=this.props.isModuleFound("comments"),n=this.props.isModuleFound("markdown"),r=this.props.isModuleFound("gravatar-hovercards"),a=this.props.isModuleFound("subscriptions"),i=this.props.isModuleFound("comment-likes");return(this.props.searchTerm||this.props.active)&&(t||a||n||r||i)?c.default.createElement("div",null,c.default.createElement(O.default,null),c.default.createElement(l.default,{title:(0,M.translate)("Open your site to comments and invite subscribers to get alerts about your latest work."),className:"jp-settings-description"}),c.default.createElement(A.Comments,(0,o.default)({},e,{isModuleFound:this.props.isModuleFound,getModuleOverride:this.props.getModuleOverride})),a&&c.default.createElement(h.Subscriptions,(0,o.default)({},e,{isLinked:this.props.isLinked,connectUrl:this.props.connectUrl,siteRawUrl:this.props.siteRawUrl}))):null}}]),t}(c.default.Component);q.displayName="DiscussionSettings",t.default=(0,b.connect)(function(e){return{module:function(t){return(0,u.getModule)(e,t)},settings:(0,d.getSettings)(e),isDevMode:(0,z.isDevMode)(e),isUnavailableInDevMode:function(t){return(0,z.isUnavailableInDevMode)(e,t)},isModuleFound:function(t){return(0,f.isModuleFound)(e,t)},connectUrl:(0,z.getConnectUrl)(e),isLinked:(0,z.isCurrentUserLinked)(e),getModuleOverride:function(t){return(0,u.getModuleOverride)(e,t)}}})(q)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.updateSettings=t.updateSetting=t.fetchSettings=t.clearUnsavedSettingsFlag=t.setUnsavedSettingsFlag=void 0;var o=l(n(49)),r=l(n(10)),a=n(76),i=l(n(22)),p=n(8),s=l(n(179)),c=n(14),b=n(24),M=l(n(37));function l(e){return e&&e.__esModule?e:{default:e}}function u(e,t){var n=t;return"regenerate"===(0,i.default)(t,"post_by_email_address")&&(n={post_by_email_address:e.post_by_email_address}),n}t.setUnsavedSettingsFlag=function(){return{type:c.JETPACK_SETTINGS_SET_UNSAVED_FLAG}},t.clearUnsavedSettingsFlag=function(){return{type:c.JETPACK_SETTINGS_CLEAR_UNSAVED_FLAG}},t.fetchSettings=function(){return function(e){return e({type:c.JETPACK_SETTINGS_FETCH}),M.default.fetchSettings().then(function(t){return e({type:c.JETPACK_SETTINGS_FETCH_RECEIVE,settings:t}),t}).catch(function(t){e({type:c.JETPACK_SETTINGS_FETCH_FAIL,error:t})})}},t.updateSetting=function(e){return function(t){return t({type:c.JETPACK_SETTING_UPDATE,updatedOption:e}),M.default.updateSetting(e).then(function(n){t({type:c.JETPACK_SETTING_UPDATE_SUCCESS,updatedOption:e,success:n})}).catch(function(n){t({type:c.JETPACK_SETTING_UPDATE_FAIL,success:!1,error:n,updatedOption:e})})}},t.updateSettings=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function(n){var i=(0,r.default)({progress:(0,p.translate)("Updating settings…"),success:(0,p.translate)("Updated settings."),error:function(e){return(0,p.translate)("Error updating settings. %(error)s",{args:{error:e.message||e.code||e.name||e}})}},t);"object"===(void 0===e?"undefined":(0,o.default)(e))&&(0,s.default)(["masterbar","jetpack_testimonial","jetpack_portfolio"],function(t){return t in e})&&(i.success=(0,p.translate)("Updated settings. Refreshing page…")),n((0,a.removeNotice)("module-setting-update")),n((0,a.removeNotice)("module-setting-update-success"));var l=["dismiss_dash_app_card","dismiss_empty_stats_card","show_welcome_for_new_plan"];return"object"!==(void 0===e?"undefined":(0,o.default)(e))||(0,s.default)(l,function(t){return t in e})||n((0,a.createNotice)("is-info",i.progress,{id:"module-setting-update"})),n({type:c.JETPACK_SETTINGS_UPDATE,updatedOptions:e}),M.default.updateSettings(e).then(function(t){n({type:c.JETPACK_SETTINGS_UPDATE_SUCCESS,updatedOptions:u(t,e),success:t}),(0,b.maybeHideNavMenuItem)(e),(0,b.maybeReloadAfterAction)(e),n((0,a.removeNotice)("module-setting-update")),n((0,a.removeNotice)("module-setting-update-success")),"object"!==(void 0===e?"undefined":(0,o.default)(e))||(0,s.default)(l,function(t){return t in e})||n((0,a.createNotice)("is-success",i.success,{id:"module-setting-update-success",duration:2e3}))}).catch(function(t){n({type:c.JETPACK_SETTINGS_UPDATE_FAIL,success:!1,error:t,updatedOptions:e}),n((0,a.removeNotice)("module-setting-update")),n((0,a.createNotice)("is-error",i.error(t),{id:"module-setting-update"}))})}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Comments=void 0;var o=A(n(10)),r=A(n(3)),a=A(n(4)),i=A(n(7)),p=A(n(5)),s=A(n(6)),c=A(n(2)),b=n(8),M=A(n(386)),l=n(51),u=n(43),d=n(27),z=A(n(32)),f=A(n(29)),O=A(n(78));function A(e){return e&&e.__esModule?e:{default:e}}var h=function(e){function t(){var e,n,o,i;(0,a.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=o=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(c))),o.updateFormStateByMarkdown=function(e){return o.props.getSettingCurrentValue("wpcom_publish_posts_with_markdown",e)?o.props.updateFormStateModuleOption(e,"wpcom_publish_comments_with_markdown"):o.props.updateFormStateModuleOption(e,"wpcom_publish_comments_with_markdown",!0)},o.handleMarkdownCommentsToggle=function(){o.props.updateFormStateModuleOption("markdown","wpcom_publish_comments_with_markdown")},i=n,(0,p.default)(o,i)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e=this.props.isModuleFound("comments"),t=this.props.isModuleFound("gravatar-hovercards"),n=this.props.isModuleFound("markdown"),r=this.props.isModuleFound("comment-likes");if(!(e||t||n||r))return null;var a=this.props,i=a.isUnavailableInDevMode,p=a.getOptionValue,s=this.props.getModule("comments"),d=this.props.getOptionValue("comments"),A=this.props.isUnavailableInDevMode("comments"),h=this.props.getModule("gravatar-hovercards"),m=this.props.getModule("markdown"),q=i("comment-likes"),_=p("comment-likes");return c.default.createElement(z.default,(0,o.default)({},this.props,{header:(0,b.translate)("Comments"),module:"comments",saveDisabled:this.props.isSavingAnyOption(["highlander_comment_form_prompt","jetpack_comment_form_color_scheme"])}),e&&c.default.createElement(f.default,{hasChild:!0,disableInDevMode:!0,module:s,support:{text:(0,b.translate)("Replaces the standard WordPress comment form with a new comment system that includes social media login options."),link:"https://jetpack.com/support/comments"}},c.default.createElement(u.ModuleToggle,{slug:"comments",compact:!0,disabled:A,activated:this.props.getOptionValue("comments"),toggling:this.props.isSavingAnyOption("comments"),toggleModule:this.props.toggleModuleNow},c.default.createElement("span",{className:"jp-form-toggle-explanation"},s.description)),c.default.createElement(l.FormFieldset,null,c.default.createElement(l.FormLabel,null,c.default.createElement("span",{className:"jp-form-label-wide"},(0,b.translate)("Comments headline")),c.default.createElement(M.default,{name:"highlander_comment_form_prompt",value:this.props.getOptionValue("highlander_comment_form_prompt"),disabled:!d||A||this.props.isSavingAnyOption("highlander_comment_form_prompt"),onChange:this.props.onOptionChange})),c.default.createElement("span",{className:"jp-form-setting-explanation"},(0,b.translate)("A few catchy words to motivate your readers to comment.")),c.default.createElement(l.FormLabel,null,c.default.createElement("span",{className:"jp-form-label-wide"},(0,b.translate)("Color scheme")),c.default.createElement(l.FormSelect,(0,o.default)({name:"jetpack_comment_form_color_scheme",value:this.props.getOptionValue("jetpack_comment_form_color_scheme"),disabled:!d||A||this.props.isSavingAnyOption("jetpack_comment_form_color_scheme"),onChange:this.props.onOptionChange},this.props,{validValues:this.props.validValues("jetpack_comment_form_color_scheme","comments")}))))),(t||n||r)&&c.default.createElement(f.default,null,t&&c.default.createElement(l.FormFieldset,null,c.default.createElement(u.ModuleToggle,{slug:"gravatar-hovercards",compact:!0,activated:this.props.getOptionValue("gravatar-hovercards"),toggling:this.props.isSavingAnyOption("gravatar-hovercards"),toggleModule:this.props.toggleModuleNow},c.default.createElement("span",{className:"jp-form-toggle-explanation"},h.description+" ",c.default.createElement("a",{href:h.learn_more_button,target:"_blank",rel:"noopener noreferrer"},(0,b.translate)("Learn more")),c.default.createElement("span",{className:"jp-form-toggle-privacy-info"},c.default.createElement("a",{href:h.learn_more_button+"#privacy",target:"_blank",rel:"noopener noreferrer"},(0,b.translate)("Privacy Information")))))),n&&c.default.createElement(l.FormFieldset,null,c.default.createElement(O.default,{checked:!!this.props.getOptionValue("wpcom_publish_comments_with_markdown","markdown"),disabled:this.props.isSavingAnyOption(["markdown","wpcom_publish_comments_with_markdown"])||"inactive"===this.props.getModuleOverride("markdown"),toggling:this.props.isSavingAnyOption(["markdown","wpcom_publish_comments_with_markdown"]),onChange:this.handleMarkdownCommentsToggle},c.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,b.translate)("Enable Markdown use for comments.")+" ",c.default.createElement("a",{href:m.learn_more_button,target:"_blank",rel:"noopener noreferrer"},(0,b.translate)("Learn more")),c.default.createElement("span",{className:"jp-form-toggle-privacy-info"},c.default.createElement("a",{href:m.learn_more_button+"#privacy",target:"_blank",rel:"noopener noreferrer"},(0,b.translate)("Privacy Information")))))),r&&c.default.createElement(l.FormFieldset,null,c.default.createElement(u.ModuleToggle,{slug:"comment-likes",compact:!0,disabled:q,activated:_,toggling:this.props.isSavingAnyOption("comment-likes"),toggleModule:this.props.toggleModuleNow},c.default.createElement("span",{className:"jp-form-toggle-explanation"},"Enable comment likes. ",c.default.createElement("a",{href:"https://jetpack.com/support/comment-likes/",target:"_blank",rel:"noopener noreferrer"},(0,b.translate)("Learn more")),c.default.createElement("span",{className:"jp-form-toggle-privacy-info"},c.default.createElement("a",{href:"https://jetpack.com/support/comment-likes/#privacy",target:"_blank",rel:"noopener noreferrer"},(0,b.translate)("Privacy Information"))))))))}}]),t}(c.default.Component);t.Comments=(0,d.withModuleSettingsFormHelpers)(h)},function(e,t,n){},function(e,t,n){var o=n(178),r=n(406);e.exports=function(e,t){return e&&o(e,r(t))}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=u(n(3)),r=u(n(4)),a=u(n(7)),i=u(n(5)),p=u(n(6)),s=u(n(1)),c=n(2),b=u(c),M=u(n(12)),l=u(n(635));function u(e){return e&&e.__esModule?e:{default:e}}n(877);var d=function(e){function t(){(0,r.default)(this,t);var e=(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments));return e.state={showPopover:!1},e.togglePopover=function(){e.setState({showPopover:!e.state.showPopover})},e._onPopoverClose=function(){e.setState({showPopover:!1})},e.renderPopover=function(){return b.default.createElement(l.default,{isVisible:e.state.showPopover,context:e.refs&&e.refs.toggleSwitch,position:e.props.disabledPopoverPosition,onClose:e._onPopoverClose,className:"dops-info-popover__tooltip"},e.props.disabledReason)},e.onKeyDown=e.onKeyDown.bind(e),e.onClick=e.onClick.bind(e),e.onLabelClick=e.onLabelClick.bind(e),e}return(0,p.default)(t,e),(0,a.default)(t,[{key:"UNSAFE_componentWillMount",value:function(){this.id=this.constructor.idNum++}},{key:"onKeyDown",value:function(e){this.props.disabled||("Enter"!==e.key&&" "!==e.key||(e.preventDefault(),this.props.onChange()),this.props.onKeyDown(e))}},{key:"onClick",value:function(){this.props.disabled?this.props.disabledReason&&this.togglePopover():this.props.onChange()}},{key:"onLabelClick",value:function(e){if(!this.props.disabled){var t=e.target.nodeName.toLowerCase();"a"!==t&&"input"!==t&&"select"!==t&&(e.preventDefault(),this.props.onChange())}}},{key:"render",value:function(){var e=this.props.id||"toggle-"+this.id,t=(0,M.default)("form-toggle",this.props.className,{"is-toggling":this.props.toggling});return b.default.createElement("span",null,b.default.createElement("input",{className:t,type:"checkbox",checked:this.props.checked,readOnly:!0,disabled:this.props.disabled}),b.default.createElement("label",{className:"form-toggle__label",htmlFor:e},b.default.createElement("span",{className:"form-toggle__switch",disabled:this.props.disabled,id:e,onClick:this.onClick,onKeyDown:this.onKeyDown,role:"checkbox","aria-checked":this.props.checked,"aria-label":this.props["aria-label"],tabIndex:this.props.disabled?-1:0,ref:"toggleSwitch"}),b.default.createElement("span",{className:"form-toggle__label-content",onClick:this.onLabelClick},this.props.children)),this.renderPopover())}}]),t}(c.Component);d.propTypes={onChange:s.default.func,onKeyDown:s.default.func,checked:s.default.bool,disabled:s.default.bool,id:s.default.string,className:s.default.string,toggling:s.default.bool,"aria-label":s.default.string,children:s.default.node,disabledReason:s.default.node},d.defaultProps={checked:!1,disabled:!1,onKeyDown:function(){},onChange:function(){},disabledPopoverPosition:"bottom",disabledReason:""},d.idNum=0,t.default=d,e.exports=t.default},function(e,t,n){e.exports={default:n(762),__esModule:!0}},function(e,t,n){n(155),n(90),n(119),n(763),n(767),n(769),n(770),e.exports=n(18).Set},function(e,t,n){"use strict";var o=n(669),r=n(636);e.exports=n(670)("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return o.def(r(this,"Set"),e=0===e?0:e,e)}},o)},function(e,t,n){var o=n(60),r=n(172),a=n(83),i=n(134),p=n(765);e.exports=function(e,t){var n=1==e,s=2==e,c=3==e,b=4==e,M=6==e,l=5==e||M,u=t||p;return function(t,p,d){for(var z,f,O=a(t),A=r(O),h=o(p,d,3),m=i(A.length),q=0,_=n?u(t,m):s?u(t,0):void 0;m>q;q++)if((l||q in A)&&(f=h(z=A[q],q,O),e))if(n)_[q]=f;else if(f)switch(e){case 3:return!0;case 5:return z;case 6:return q;case 2:_.push(z)}else if(b)return!1;return M?-1:c||b?b:_}}},function(e,t,n){var o=n(766);e.exports=function(e,t){return new(o(e))(t)}},function(e,t,n){var o=n(41),r=n(400),a=n(31)("species");e.exports=function(e){var t;return r(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!r(t.prototype)||(t=void 0),o(t)&&null===(t=t[a])&&(t=void 0)),void 0===t?Array:t}},function(e,t,n){var o=n(30);o(o.P+o.R,"Set",{toJSON:n(671)("Set")})},function(e,t,n){var o=n(161);e.exports=function(e,t){var n=[];return o(e,!1,n.push,n,t),n}},function(e,t,n){n(672)("Set")},function(e,t,n){n(673)("Set")},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=i(n(772));t.default=s;var r=i(n(778)),a=i(n(779));function i(e){return e&&e.__esModule?e:{default:e}}var p=new o.default;function s(e,t){return p.set(e,t),function(){p.delete(e)}}function c(e){p.forEach(function(t,n){(0,a.default)(n,e.target)||t.call(n,e)})}function b(e){e||(e=document),r.default.bind(e,"click",c)}s.globalClick=c,s.install=b,"undefined"!=typeof document&&b(document),e.exports=t.default},function(e,t,n){e.exports={default:n(773),__esModule:!0}},function(e,t,n){n(155),n(90),n(119),n(774),n(775),n(776),n(777),e.exports=n(18).Map},function(e,t,n){"use strict";var o=n(669),r=n(636);e.exports=n(670)("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=o.getEntry(r(this,"Map"),e);return t&&t.v},set:function(e,t){return o.def(r(this,"Map"),0===e?0:e,t)}},o,!0)},function(e,t,n){var o=n(30);o(o.P+o.R,"Map",{toJSON:n(671)("Map")})},function(e,t,n){n(672)("Map")},function(e,t,n){n(673)("Map")},function(e,t){var n=window.addEventListener?"addEventListener":"attachEvent",o=window.removeEventListener?"removeEventListener":"detachEvent",r="addEventListener"!==n?"on":"";t.bind=function(e,t,o,a){return e[n](r+t,o,a||!1),o},t.unbind=function(e,t,n,a){return e[o](r+t,n,a||!1),n}},function(e,t){e.exports=function(e,t){return e===t||!!(16&e.compareDocumentPosition(t))}},function(e,t,n){var o="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_";function r(e){var t,n;for(t=[],n=0;n<e.length;n++)t.push(o[e[n]%64]);return t.join("")}e.exports=function(e){if("undefined"!=typeof window){if(void 0!==window.crypto)return r(window.crypto.getRandomValues(new Uint8Array(e)));for(var t=new Array(e),o=0;o<e;o++)t[o]=Math.floor(256*Math.random());return r(t)}var a=n(781);try{return r(a.randomBytes(e))}catch(t){return r(a.pseudoRandomBytes(e))}}},function(e,t,n){"use strict";t.randomBytes=t.rng=t.pseudoRandomBytes=t.prng=n(184),t.createHash=t.Hash=n(387),t.createHmac=t.Hmac=n(681);var o=n(800),r=Object.keys(o),a=["sha1","sha224","sha256","sha384","sha512","md5","rmd160"].concat(r);t.getHashes=function(){return a};var i=n(684);t.pbkdf2=i.pbkdf2,t.pbkdf2Sync=i.pbkdf2Sync;var p=n(802);t.Cipher=p.Cipher,t.createCipher=p.createCipher,t.Cipheriv=p.Cipheriv,t.createCipheriv=p.createCipheriv,t.Decipher=p.Decipher,t.createDecipher=p.createDecipher,t.Decipheriv=p.Decipheriv,t.createDecipheriv=p.createDecipheriv,t.getCiphers=p.getCiphers,t.listCiphers=p.listCiphers;var s=n(819);t.DiffieHellmanGroup=s.DiffieHellmanGroup,t.createDiffieHellmanGroup=s.createDiffieHellmanGroup,t.getDiffieHellman=s.getDiffieHellman,t.createDiffieHellman=s.createDiffieHellman,t.DiffieHellman=s.DiffieHellman;var c=n(824);t.createSign=c.createSign,t.Sign=c.Sign,t.createVerify=c.createVerify,t.Verify=c.Verify,t.createECDH=n(861);var b=n(862);t.publicEncrypt=b.publicEncrypt,t.privateEncrypt=b.privateEncrypt,t.publicDecrypt=b.publicDecrypt,t.privateDecrypt=b.privateDecrypt;var M=n(865);t.randomFill=M.randomFill,t.randomFillSync=M.randomFillSync,t.createCredentials=function(){throw new Error(["sorry, createCredentials is not implemented yet","we accept pull requests","https://github.com/crypto-browserify/crypto-browserify"].join("\n"))},t.constants={DH_CHECK_P_NOT_SAFE_PRIME:2,DH_CHECK_P_NOT_PRIME:1,DH_UNABLE_TO_CHECK_GENERATOR:4,DH_NOT_SUITABLE_GENERATOR:8,NPN_ENABLED:1,ALPN_ENABLED:1,RSA_PKCS1_PADDING:1,RSA_SSLV23_PADDING:2,RSA_NO_PADDING:3,RSA_PKCS1_OAEP_PADDING:4,RSA_X931_PADDING:5,RSA_PKCS1_PSS_PADDING:6,POINT_CONVERSION_COMPRESSED:2,POINT_CONVERSION_UNCOMPRESSED:4,POINT_CONVERSION_HYBRID:6}},function(e,t,n){"use strict";t.byteLength=function(e){var t=c(e),n=t[0],o=t[1];return 3*(n+o)/4-o},t.toByteArray=function(e){for(var t,n=c(e),o=n[0],i=n[1],p=new a(3*(o+i)/4-i),s=0,b=i>0?o-4:o,M=0;M<b;M+=4)t=r[e.charCodeAt(M)]<<18|r[e.charCodeAt(M+1)]<<12|r[e.charCodeAt(M+2)]<<6|r[e.charCodeAt(M+3)],p[s++]=t>>16&255,p[s++]=t>>8&255,p[s++]=255&t;return 2===i&&(t=r[e.charCodeAt(M)]<<2|r[e.charCodeAt(M+1)]>>4,p[s++]=255&t),1===i&&(t=r[e.charCodeAt(M)]<<10|r[e.charCodeAt(M+1)]<<4|r[e.charCodeAt(M+2)]>>2,p[s++]=t>>8&255,p[s++]=255&t),p},t.fromByteArray=function(e){for(var t,n=e.length,r=n%3,a=[],i=0,p=n-r;i<p;i+=16383)a.push(b(e,i,i+16383>p?p:i+16383));return 1===r?(t=e[n-1],a.push(o[t>>2]+o[t<<4&63]+"==")):2===r&&(t=(e[n-2]<<8)+e[n-1],a.push(o[t>>10]+o[t>>4&63]+o[t<<2&63]+"=")),a.join("")};for(var o=[],r=[],a="undefined"!=typeof Uint8Array?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",p=0,s=i.length;p<s;++p)o[p]=i[p],r[i.charCodeAt(p)]=p;function c(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function b(e,t,n){for(var r,a,i=[],p=t;p<n;p+=3)r=(e[p]<<16&16711680)+(e[p+1]<<8&65280)+(255&e[p+2]),i.push(o[(a=r)>>18&63]+o[a>>12&63]+o[a>>6&63]+o[63&a]);return i.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},function(e,t){t.read=function(e,t,n,o,r){var a,i,p=8*r-o-1,s=(1<<p)-1,c=s>>1,b=-7,M=n?r-1:0,l=n?-1:1,u=e[t+M];for(M+=l,a=u&(1<<-b)-1,u>>=-b,b+=p;b>0;a=256*a+e[t+M],M+=l,b-=8);for(i=a&(1<<-b)-1,a>>=-b,b+=o;b>0;i=256*i+e[t+M],M+=l,b-=8);if(0===a)a=1-c;else{if(a===s)return i?NaN:1/0*(u?-1:1);i+=Math.pow(2,o),a-=c}return(u?-1:1)*i*Math.pow(2,a-o)},t.write=function(e,t,n,o,r,a){var i,p,s,c=8*a-r-1,b=(1<<c)-1,M=b>>1,l=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,u=o?0:a-1,d=o?1:-1,z=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(p=isNaN(t)?1:0,i=b):(i=Math.floor(Math.log(t)/Math.LN2),t*(s=Math.pow(2,-i))<1&&(i--,s*=2),(t+=i+M>=1?l/s:l*Math.pow(2,1-M))*s>=2&&(i++,s/=2),i+M>=b?(p=0,i=b):i+M>=1?(p=(t*s-1)*Math.pow(2,r),i+=M):(p=t*Math.pow(2,M-1)*Math.pow(2,r),i=0));r>=8;e[n+u]=255&p,u+=d,p/=256,r-=8);for(i=i<<r|p,c+=r;c>0;e[n+u]=255&i,u+=d,i/=256,c-=8);e[n+u-d]|=128*z}},function(e,t){},function(e,t,n){"use strict";var o=n(25).Buffer,r=n(786);e.exports=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.head=null,this.tail=null,this.length=0}return e.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,n=""+t.data;t=t.next;)n+=e+t.data;return n},e.prototype.concat=function(e){if(0===this.length)return o.alloc(0);if(1===this.length)return this.head.data;for(var t,n,r=o.allocUnsafe(e>>>0),a=this.head,i=0;a;)t=r,n=i,a.data.copy(t,n),i+=a.data.length,a=a.next;return r},e}(),r&&r.inspect&&r.inspect.custom&&(e.exports.prototype[r.inspect.custom]=function(){var e=r.inspect({length:this.length});return this.constructor.name+" "+e})},function(e,t){},function(e,t,n){(function(e){var o=void 0!==e&&e||"undefined"!=typeof self&&self||window,r=Function.prototype.apply;function a(e,t){this._id=e,this._clearFn=t}t.setTimeout=function(){return new a(r.call(setTimeout,o,arguments),clearTimeout)},t.setInterval=function(){return new a(r.call(setInterval,o,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},a.prototype.unref=a.prototype.ref=function(){},a.prototype.close=function(){this._clearFn.call(o,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},n(788),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,n(44))},function(e,t,n){(function(e,t){!function(e,n){"use strict";if(!e.setImmediate){var o,r,a,i,p,s=1,c={},b=!1,M=e.document,l=Object.getPrototypeOf&&Object.getPrototypeOf(e);l=l&&l.setTimeout?l:e,"[object process]"==={}.toString.call(e.process)?o=function(e){t.nextTick(function(){d(e)})}:function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?(i="setImmediate$"+Math.random()+"$",p=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(i)&&d(+t.data.slice(i.length))},e.addEventListener?e.addEventListener("message",p,!1):e.attachEvent("onmessage",p),o=function(t){e.postMessage(i+t,"*")}):e.MessageChannel?((a=new MessageChannel).port1.onmessage=function(e){d(e.data)},o=function(e){a.port2.postMessage(e)}):M&&"onreadystatechange"in M.createElement("script")?(r=M.documentElement,o=function(e){var t=M.createElement("script");t.onreadystatechange=function(){d(e),t.onreadystatechange=null,r.removeChild(t),t=null},r.appendChild(t)}):o=function(e){setTimeout(d,0,e)},l.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n<t.length;n++)t[n]=arguments[n+1];var r={callback:e,args:t};return c[s]=r,o(s),s++},l.clearImmediate=u}function u(e){delete c[e]}function d(e){if(b)setTimeout(d,0,e);else{var t=c[e];if(t){b=!0;try{!function(e){var t=e.callback,o=e.args;switch(o.length){case 0:t();break;case 1:t(o[0]);break;case 2:t(o[0],o[1]);break;case 3:t(o[0],o[1],o[2]);break;default:t.apply(n,o)}}(t)}finally{u(e),b=!1}}}}}("undefined"==typeof self?void 0===e?this:e:self)}).call(this,n(44),n(71))},function(e,t,n){(function(t){function n(e){try{if(!t.localStorage)return!1}catch(e){return!1}var n=t.localStorage[e];return null!=n&&"true"===String(n).toLowerCase()}e.exports=function(e,t){if(n("noDeprecation"))return e;var o=!1;return function(){if(!o){if(n("throwDeprecation"))throw new Error(t);n("traceDeprecation")?console.trace(t):console.warn(t),o=!0}return e.apply(this,arguments)}}}).call(this,n(44))},function(e,t,n){"use strict";e.exports=a;var o=n(678),r=n(388);function a(e){if(!(this instanceof a))return new a(e);o.call(this,e)}r.inherits=n(19),r.inherits(a,o),a.prototype._transform=function(e,t,n){n(null,e)}},function(e,t,n){e.exports=n(640)},function(e,t,n){e.exports=n(166)},function(e,t,n){e.exports=n(639).Transform},function(e,t,n){e.exports=n(639).PassThrough},function(e,t,n){var o=n(19),r=n(185),a=n(25).Buffer,i=[1518500249,1859775393,-1894007588,-899497514],p=new Array(80);function s(){this.init(),this._w=p,r.call(this,64,56)}function c(e){return e<<30|e>>>2}function b(e,t,n,o){return 0===e?t&n|~t&o:2===e?t&n|t&o|n&o:t^n^o}o(s,r),s.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},s.prototype._update=function(e){for(var t,n=this._w,o=0|this._a,r=0|this._b,a=0|this._c,p=0|this._d,s=0|this._e,M=0;M<16;++M)n[M]=e.readInt32BE(4*M);for(;M<80;++M)n[M]=n[M-3]^n[M-8]^n[M-14]^n[M-16];for(var l=0;l<80;++l){var u=~~(l/20),d=0|((t=o)<<5|t>>>27)+b(u,r,a,p)+s+n[l]+i[u];s=p,p=a,a=c(r),r=o,o=d}this._a=o+this._a|0,this._b=r+this._b|0,this._c=a+this._c|0,this._d=p+this._d|0,this._e=s+this._e|0},s.prototype._hash=function(){var e=a.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=s},function(e,t,n){var o=n(19),r=n(185),a=n(25).Buffer,i=[1518500249,1859775393,-1894007588,-899497514],p=new Array(80);function s(){this.init(),this._w=p,r.call(this,64,56)}function c(e){return e<<5|e>>>27}function b(e){return e<<30|e>>>2}function M(e,t,n,o){return 0===e?t&n|~t&o:2===e?t&n|t&o|n&o:t^n^o}o(s,r),s.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},s.prototype._update=function(e){for(var t,n=this._w,o=0|this._a,r=0|this._b,a=0|this._c,p=0|this._d,s=0|this._e,l=0;l<16;++l)n[l]=e.readInt32BE(4*l);for(;l<80;++l)n[l]=(t=n[l-3]^n[l-8]^n[l-14]^n[l-16])<<1|t>>>31;for(var u=0;u<80;++u){var d=~~(u/20),z=c(o)+M(d,r,a,p)+s+n[u]+i[d]|0;s=p,p=a,a=b(r),r=o,o=z}this._a=o+this._a|0,this._b=r+this._b|0,this._c=a+this._c|0,this._d=p+this._d|0,this._e=s+this._e|0},s.prototype._hash=function(){var e=a.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=s},function(e,t,n){var o=n(19),r=n(679),a=n(185),i=n(25).Buffer,p=new Array(64);function s(){this.init(),this._w=p,a.call(this,64,56)}o(s,r),s.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},s.prototype._hash=function(){var e=i.allocUnsafe(28);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e},e.exports=s},function(e,t,n){var o=n(19),r=n(680),a=n(185),i=n(25).Buffer,p=new Array(160);function s(){this.init(),this._w=p,a.call(this,128,112)}o(s,r),s.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},s.prototype._hash=function(){var e=i.allocUnsafe(48);function t(t,n,o){e.writeInt32BE(t,o),e.writeInt32BE(n,o+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),e},e.exports=s},function(e,t,n){"use strict";var o=n(19),r=n(25).Buffer,a=n(135),i=r.alloc(128),p=64;function s(e,t){a.call(this,"digest"),"string"==typeof t&&(t=r.from(t)),this._alg=e,this._key=t,t.length>p?t=e(t):t.length<p&&(t=r.concat([t,i],p));for(var n=this._ipad=r.allocUnsafe(p),o=this._opad=r.allocUnsafe(p),s=0;s<p;s++)n[s]=54^t[s],o[s]=92^t[s];this._hash=[n]}o(s,a),s.prototype._update=function(e){this._hash.push(e)},s.prototype._final=function(){var e=this._alg(r.concat(this._hash));return this._alg(r.concat([this._opad,e]))},e.exports=s},function(e,t,n){e.exports=n(683)},function(e,t,n){(function(t,o){var r,a=n(685),i=n(686),p=n(687),s=n(25).Buffer,c=t.crypto&&t.crypto.subtle,b={sha:"SHA-1","sha-1":"SHA-1",sha1:"SHA-1",sha256:"SHA-256","sha-256":"SHA-256",sha384:"SHA-384","sha-384":"SHA-384","sha-512":"SHA-512",sha512:"SHA-512"},M=[];function l(e,t,n,o,r){return c.importKey("raw",e,{name:"PBKDF2"},!1,["deriveBits"]).then(function(e){return c.deriveBits({name:"PBKDF2",salt:t,iterations:n,hash:{name:r}},e,o<<3)}).then(function(e){return s.from(e)})}e.exports=function(e,n,u,d,z,f){"function"==typeof z&&(f=z,z=void 0);var O=b[(z=z||"sha1").toLowerCase()];if(!O||"function"!=typeof t.Promise)return o.nextTick(function(){var t;try{t=p(e,n,u,d,z)}catch(e){return f(e)}f(null,t)});if(a(e,n,u,d),"function"!=typeof f)throw new Error("No callback provided to pbkdf2");s.isBuffer(e)||(e=s.from(e,i)),s.isBuffer(n)||(n=s.from(n,i)),function(e,t){e.then(function(e){o.nextTick(function(){t(null,e)})},function(e){o.nextTick(function(){t(e)})})}(function(e){if(t.process&&!t.process.browser)return Promise.resolve(!1);if(!c||!c.importKey||!c.deriveBits)return Promise.resolve(!1);if(void 0!==M[e])return M[e];var n=l(r=r||s.alloc(8),r,10,128,e).then(function(){return!0}).catch(function(){return!1});return M[e]=n,n}(O).then(function(t){return t?l(e,n,u,d,O):p(e,n,u,d,z)}),f)}}).call(this,n(44),n(71))},function(e,t,n){var o=n(803),r=n(645),a=n(646),i=n(818),p=n(422);function s(e,t,n){if(e=e.toLowerCase(),a[e])return r.createCipheriv(e,t,n);if(i[e])return new o({key:t,iv:n,mode:e});throw new TypeError("invalid suite type")}function c(e,t,n){if(e=e.toLowerCase(),a[e])return r.createDecipheriv(e,t,n);if(i[e])return new o({key:t,iv:n,mode:e,decrypt:!0});throw new TypeError("invalid suite type")}t.createCipher=t.Cipher=function(e,t){var n,o;if(e=e.toLowerCase(),a[e])n=a[e].key,o=a[e].iv;else{if(!i[e])throw new TypeError("invalid suite type");n=8*i[e].key,o=i[e].iv}var r=p(t,!1,n,o);return s(e,r.key,r.iv)},t.createCipheriv=t.Cipheriv=s,t.createDecipher=t.Decipher=function(e,t){var n,o;if(e=e.toLowerCase(),a[e])n=a[e].key,o=a[e].iv;else{if(!i[e])throw new TypeError("invalid suite type");n=8*i[e].key,o=i[e].iv}var r=p(t,!1,n,o);return c(e,r.key,r.iv)},t.createDecipheriv=t.Decipheriv=c,t.listCiphers=t.getCiphers=function(){return Object.keys(i).concat(r.getCiphers())}},function(e,t,n){var o=n(135),r=n(644),a=n(19),i=n(25).Buffer,p={"des-ede3-cbc":r.CBC.instantiate(r.EDE),"des-ede3":r.EDE,"des-ede-cbc":r.CBC.instantiate(r.EDE),"des-ede":r.EDE,"des-cbc":r.CBC.instantiate(r.DES),"des-ecb":r.DES};function s(e){o.call(this);var t,n=e.mode.toLowerCase(),r=p[n];t=e.decrypt?"decrypt":"encrypt";var a=e.key;i.isBuffer(a)||(a=i.from(a)),"des-ede"!==n&&"des-ede-cbc"!==n||(a=i.concat([a,a.slice(0,8)]));var s=e.iv;i.isBuffer(s)||(s=i.from(s)),this._des=r.create({key:a,iv:s,type:t})}p.des=p["des-cbc"],p.des3=p["des-ede3-cbc"],e.exports=s,a(s,o),s.prototype._update=function(e){return i.from(this._des.update(e))},s.prototype._final=function(){return i.from(this._des.final())}},function(e,t,n){"use strict";t.readUInt32BE=function(e,t){return(e[0+t]<<24|e[1+t]<<16|e[2+t]<<8|e[3+t])>>>0},t.writeUInt32BE=function(e,t,n){e[0+n]=t>>>24,e[1+n]=t>>>16&255,e[2+n]=t>>>8&255,e[3+n]=255&t},t.ip=function(e,t,n,o){for(var r=0,a=0,i=6;i>=0;i-=2){for(var p=0;p<=24;p+=8)r<<=1,r|=t>>>p+i&1;for(p=0;p<=24;p+=8)r<<=1,r|=e>>>p+i&1}for(i=6;i>=0;i-=2){for(p=1;p<=25;p+=8)a<<=1,a|=t>>>p+i&1;for(p=1;p<=25;p+=8)a<<=1,a|=e>>>p+i&1}n[o+0]=r>>>0,n[o+1]=a>>>0},t.rip=function(e,t,n,o){for(var r=0,a=0,i=0;i<4;i++)for(var p=24;p>=0;p-=8)r<<=1,r|=t>>>p+i&1,r<<=1,r|=e>>>p+i&1;for(i=4;i<8;i++)for(p=24;p>=0;p-=8)a<<=1,a|=t>>>p+i&1,a<<=1,a|=e>>>p+i&1;n[o+0]=r>>>0,n[o+1]=a>>>0},t.pc1=function(e,t,n,o){for(var r=0,a=0,i=7;i>=5;i--){for(var p=0;p<=24;p+=8)r<<=1,r|=t>>p+i&1;for(p=0;p<=24;p+=8)r<<=1,r|=e>>p+i&1}for(p=0;p<=24;p+=8)r<<=1,r|=t>>p+i&1;for(i=1;i<=3;i++){for(p=0;p<=24;p+=8)a<<=1,a|=t>>p+i&1;for(p=0;p<=24;p+=8)a<<=1,a|=e>>p+i&1}for(p=0;p<=24;p+=8)a<<=1,a|=e>>p+i&1;n[o+0]=r>>>0,n[o+1]=a>>>0},t.r28shl=function(e,t){return e<<t&268435455|e>>>28-t};var o=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];t.pc2=function(e,t,n,r){for(var a=0,i=0,p=o.length>>>1,s=0;s<p;s++)a<<=1,a|=e>>>o[s]&1;for(s=p;s<o.length;s++)i<<=1,i|=t>>>o[s]&1;n[r+0]=a>>>0,n[r+1]=i>>>0},t.expand=function(e,t,n){var o=0,r=0;o=(1&e)<<5|e>>>27;for(var a=23;a>=15;a-=4)o<<=6,o|=e>>>a&63;for(a=11;a>=3;a-=4)r|=e>>>a&63,r<<=6;r|=(31&e)<<1|e>>>31,t[n+0]=o>>>0,t[n+1]=r>>>0};var r=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];t.substitute=function(e,t){for(var n=0,o=0;o<4;o++)n<<=4,n|=r[64*o+(e>>>18-6*o&63)];for(o=0;o<4;o++)n<<=4,n|=r[256+64*o+(t>>>18-6*o&63)];return n>>>0};var a=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];t.permute=function(e){for(var t=0,n=0;n<a.length;n++)t<<=1,t|=e>>>a[n]&1;return t>>>0},t.padSplit=function(e,t,n){for(var o=e.toString(2);o.length<t;)o="0"+o;for(var r=[],a=0;a<t;a+=n)r.push(o.slice(a,a+n));return r.join(" ")}},function(e,t,n){"use strict";var o=n(66);function r(e){this.options=e,this.type=this.options.type,this.blockSize=8,this._init(),this.buffer=new Array(this.blockSize),this.bufferOff=0}e.exports=r,r.prototype._init=function(){},r.prototype.update=function(e){return 0===e.length?[]:"decrypt"===this.type?this._updateDecrypt(e):this._updateEncrypt(e)},r.prototype._buffer=function(e,t){for(var n=Math.min(this.buffer.length-this.bufferOff,e.length-t),o=0;o<n;o++)this.buffer[this.bufferOff+o]=e[t+o];return this.bufferOff+=n,n},r.prototype._flushBuffer=function(e,t){return this._update(this.buffer,0,e,t),this.bufferOff=0,this.blockSize},r.prototype._updateEncrypt=function(e){var t=0,n=0,o=(this.bufferOff+e.length)/this.blockSize|0,r=new Array(o*this.blockSize);0!==this.bufferOff&&(t+=this._buffer(e,t),this.bufferOff===this.buffer.length&&(n+=this._flushBuffer(r,n)));for(var a=e.length-(e.length-t)%this.blockSize;t<a;t+=this.blockSize)this._update(e,t,r,n),n+=this.blockSize;for(;t<e.length;t++,this.bufferOff++)this.buffer[this.bufferOff]=e[t];return r},r.prototype._updateDecrypt=function(e){for(var t=0,n=0,o=Math.ceil((this.bufferOff+e.length)/this.blockSize)-1,r=new Array(o*this.blockSize);o>0;o--)t+=this._buffer(e,t),n+=this._flushBuffer(r,n);return t+=this._buffer(e,t),r},r.prototype.final=function(e){var t,n;return e&&(t=this.update(e)),n="encrypt"===this.type?this._finalEncrypt():this._finalDecrypt(),t?t.concat(n):n},r.prototype._pad=function(e,t){if(0===t)return!1;for(;t<e.length;)e[t++]=0;return!0},r.prototype._finalEncrypt=function(){if(!this._pad(this.buffer,this.bufferOff))return[];var e=new Array(this.blockSize);return this._update(this.buffer,0,e,0),e},r.prototype._unpad=function(e){return e},r.prototype._finalDecrypt=function(){o.equal(this.bufferOff,this.blockSize,"Not enough data to decrypt");var e=new Array(this.blockSize);return this._flushBuffer(e,0),this._unpad(e)}},function(e,t,n){"use strict";var o=n(66),r=n(19),a=n(644),i=a.utils,p=a.Cipher;function s(){this.tmp=new Array(2),this.keys=null}function c(e){p.call(this,e);var t=new s;this._desState=t,this.deriveKeys(t,e.key)}r(c,p),e.exports=c,c.create=function(e){return new c(e)};var b=[1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1];c.prototype.deriveKeys=function(e,t){e.keys=new Array(32),o.equal(t.length,this.blockSize,"Invalid key length");var n=i.readUInt32BE(t,0),r=i.readUInt32BE(t,4);i.pc1(n,r,e.tmp,0),n=e.tmp[0],r=e.tmp[1];for(var a=0;a<e.keys.length;a+=2){var p=b[a>>>1];n=i.r28shl(n,p),r=i.r28shl(r,p),i.pc2(n,r,e.keys,a)}},c.prototype._update=function(e,t,n,o){var r=this._desState,a=i.readUInt32BE(e,t),p=i.readUInt32BE(e,t+4);i.ip(a,p,r.tmp,0),a=r.tmp[0],p=r.tmp[1],"encrypt"===this.type?this._encrypt(r,a,p,r.tmp,0):this._decrypt(r,a,p,r.tmp,0),a=r.tmp[0],p=r.tmp[1],i.writeUInt32BE(n,a,o),i.writeUInt32BE(n,p,o+4)},c.prototype._pad=function(e,t){for(var n=e.length-t,o=t;o<e.length;o++)e[o]=n;return!0},c.prototype._unpad=function(e){for(var t=e[e.length-1],n=e.length-t;n<e.length;n++)o.equal(e[n],t);return e.slice(0,e.length-t)},c.prototype._encrypt=function(e,t,n,o,r){for(var a=t,p=n,s=0;s<e.keys.length;s+=2){var c=e.keys[s],b=e.keys[s+1];i.expand(p,e.tmp,0),c^=e.tmp[0],b^=e.tmp[1];var M=i.substitute(c,b),l=p;p=(a^i.permute(M))>>>0,a=l}i.rip(p,a,o,r)},c.prototype._decrypt=function(e,t,n,o,r){for(var a=n,p=t,s=e.keys.length-2;s>=0;s-=2){var c=e.keys[s],b=e.keys[s+1];i.expand(a,e.tmp,0),c^=e.tmp[0],b^=e.tmp[1];var M=i.substitute(c,b),l=a;a=(p^i.permute(M))>>>0,p=l}i.rip(a,p,o,r)}},function(e,t,n){"use strict";var o=n(66),r=n(19),a={};function i(e){o.equal(e.length,8,"Invalid IV length"),this.iv=new Array(8);for(var t=0;t<this.iv.length;t++)this.iv[t]=e[t]}t.instantiate=function(e){function t(t){e.call(this,t),this._cbcInit()}r(t,e);for(var n=Object.keys(a),o=0;o<n.length;o++){var i=n[o];t.prototype[i]=a[i]}return t.create=function(e){return new t(e)},t},a._cbcInit=function(){var e=new i(this.options.iv);this._cbcState=e},a._update=function(e,t,n,o){var r=this._cbcState,a=this.constructor.super_.prototype,i=r.iv;if("encrypt"===this.type){for(var p=0;p<this.blockSize;p++)i[p]^=e[t+p];for(a._update.call(this,i,0,n,o),p=0;p<this.blockSize;p++)i[p]=n[o+p]}else{for(a._update.call(this,e,t,n,o),p=0;p<this.blockSize;p++)n[o+p]^=i[p];for(p=0;p<this.blockSize;p++)i[p]=e[t+p]}}},function(e,t,n){"use strict";var o=n(66),r=n(19),a=n(644),i=a.Cipher,p=a.DES;function s(e,t){o.equal(t.length,24,"Invalid key length");var n=t.slice(0,8),r=t.slice(8,16),a=t.slice(16,24);this.ciphers="encrypt"===e?[p.create({type:"encrypt",key:n}),p.create({type:"decrypt",key:r}),p.create({type:"encrypt",key:a})]:[p.create({type:"decrypt",key:a}),p.create({type:"encrypt",key:r}),p.create({type:"decrypt",key:n})]}function c(e){i.call(this,e);var t=new s(this.type,this.options.key);this._edeState=t}r(c,i),e.exports=c,c.create=function(e){return new c(e)},c.prototype._update=function(e,t,n,o){var r=this._edeState;r.ciphers[0]._update(e,t,n,o),r.ciphers[1]._update(n,o,n,o),r.ciphers[2]._update(n,o,n,o)},c.prototype._pad=p.prototype._pad,c.prototype._unpad=p.prototype._unpad},function(e,t,n){var o=n(646),r=n(691),a=n(25).Buffer,i=n(692),p=n(135),s=n(421),c=n(422);function b(e,t,n){p.call(this),this._cache=new l,this._cipher=new s.AES(t),this._prev=a.from(n),this._mode=e,this._autopadding=!0}n(19)(b,p),b.prototype._update=function(e){var t,n;this._cache.add(e);for(var o=[];t=this._cache.get();)n=this._mode.encrypt(this,t),o.push(n);return a.concat(o)};var M=a.alloc(16,16);function l(){this.cache=a.allocUnsafe(0)}function u(e,t,n){var p=o[e.toLowerCase()];if(!p)throw new TypeError("invalid suite type");if("string"==typeof t&&(t=a.from(t)),t.length!==p.key/8)throw new TypeError("invalid key length "+t.length);if("string"==typeof n&&(n=a.from(n)),"GCM"!==p.mode&&n.length!==p.iv)throw new TypeError("invalid iv length "+n.length);return"stream"===p.type?new i(p.module,t,n):"auth"===p.type?new r(p.module,t,n):new b(p.module,t,n)}b.prototype._final=function(){var e=this._cache.flush();if(this._autopadding)return e=this._mode.encrypt(this,e),this._cipher.scrub(),e;if(!e.equals(M))throw this._cipher.scrub(),new Error("data not multiple of block length")},b.prototype.setAutoPadding=function(e){return this._autopadding=!!e,this},l.prototype.add=function(e){this.cache=a.concat([this.cache,e])},l.prototype.get=function(){if(this.cache.length>15){var e=this.cache.slice(0,16);return this.cache=this.cache.slice(16),e}return null},l.prototype.flush=function(){for(var e=16-this.cache.length,t=a.allocUnsafe(e),n=-1;++n<e;)t.writeUInt8(e,n);return a.concat([this.cache,t])},t.createCipheriv=u,t.createCipher=function(e,t){var n=o[e.toLowerCase()];if(!n)throw new TypeError("invalid suite type");var r=c(t,!1,n.key,n.iv);return u(e,r.key,r.iv)}},function(e,t){t.encrypt=function(e,t){return e._cipher.encryptBlock(t)},t.decrypt=function(e,t){return e._cipher.decryptBlock(t)}},function(e,t,n){var o=n(389);t.encrypt=function(e,t){var n=o(t,e._prev);return e._prev=e._cipher.encryptBlock(n),e._prev},t.decrypt=function(e,t){var n=e._prev;e._prev=t;var r=e._cipher.decryptBlock(t);return o(r,n)}},function(e,t,n){var o=n(25).Buffer,r=n(389);function a(e,t,n){var a=t.length,i=r(t,e._cache);return e._cache=e._cache.slice(a),e._prev=o.concat([e._prev,n?t:i]),i}t.encrypt=function(e,t,n){for(var r,i=o.allocUnsafe(0);t.length;){if(0===e._cache.length&&(e._cache=e._cipher.encryptBlock(e._prev),e._prev=o.allocUnsafe(0)),!(e._cache.length<=t.length)){i=o.concat([i,a(e,t,n)]);break}r=e._cache.length,i=o.concat([i,a(e,t.slice(0,r),n)]),t=t.slice(r)}return i}},function(e,t,n){var o=n(25).Buffer;function r(e,t,n){var r=e._cipher.encryptBlock(e._prev)[0]^t;return e._prev=o.concat([e._prev.slice(1),o.from([n?t:r])]),r}t.encrypt=function(e,t,n){for(var a=t.length,i=o.allocUnsafe(a),p=-1;++p<a;)i[p]=r(e,t[p],n);return i}},function(e,t,n){var o=n(25).Buffer;function r(e,t,n){for(var o,r,i=-1,p=0;++i<8;)o=t&1<<7-i?128:0,p+=(128&(r=e._cipher.encryptBlock(e._prev)[0]^o))>>i%8,e._prev=a(e._prev,n?o:r);return p}function a(e,t){var n=e.length,r=-1,a=o.allocUnsafe(e.length);for(e=o.concat([e,o.from([t])]);++r<n;)a[r]=e[r]<<1|e[r+1]>>7;return a}t.encrypt=function(e,t,n){for(var a=t.length,i=o.allocUnsafe(a),p=-1;++p<a;)i[p]=r(e,t[p],n);return i}},function(e,t,n){(function(e){var o=n(389);function r(e){return e._prev=e._cipher.encryptBlock(e._prev),e._prev}t.encrypt=function(t,n){for(;t._cache.length<n.length;)t._cache=e.concat([t._cache,r(t)]);var a=t._cache.slice(0,n.length);return t._cache=t._cache.slice(n.length),o(n,a)}}).call(this,n(57).Buffer)},function(e,t,n){var o=n(25).Buffer,r=o.alloc(16,0);function a(e){var t=o.allocUnsafe(16);return t.writeUInt32BE(e[0]>>>0,0),t.writeUInt32BE(e[1]>>>0,4),t.writeUInt32BE(e[2]>>>0,8),t.writeUInt32BE(e[3]>>>0,12),t}function i(e){this.h=e,this.state=o.alloc(16,0),this.cache=o.allocUnsafe(0)}i.prototype.ghash=function(e){for(var t=-1;++t<e.length;)this.state[t]^=e[t];this._multiply()},i.prototype._multiply=function(){for(var e,t,n,o=[(e=this.h).readUInt32BE(0),e.readUInt32BE(4),e.readUInt32BE(8),e.readUInt32BE(12)],r=[0,0,0,0],i=-1;++i<128;){for(0!=(this.state[~~(i/8)]&1<<7-i%8)&&(r[0]^=o[0],r[1]^=o[1],r[2]^=o[2],r[3]^=o[3]),n=0!=(1&o[3]),t=3;t>0;t--)o[t]=o[t]>>>1|(1&o[t-1])<<31;o[0]=o[0]>>>1,n&&(o[0]=o[0]^225<<24)}this.state=a(r)},i.prototype.update=function(e){var t;for(this.cache=o.concat([this.cache,e]);this.cache.length>=16;)t=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(t)},i.prototype.final=function(e,t){return this.cache.length&&this.ghash(o.concat([this.cache,r],16)),this.ghash(a([0,e,0,t])),this.state},e.exports=i},function(e,t,n){var o=n(691),r=n(25).Buffer,a=n(646),i=n(692),p=n(135),s=n(421),c=n(422);function b(e,t,n){p.call(this),this._cache=new M,this._last=void 0,this._cipher=new s.AES(t),this._prev=r.from(n),this._mode=e,this._autopadding=!0}function M(){this.cache=r.allocUnsafe(0)}function l(e,t,n){var p=a[e.toLowerCase()];if(!p)throw new TypeError("invalid suite type");if("string"==typeof n&&(n=r.from(n)),"GCM"!==p.mode&&n.length!==p.iv)throw new TypeError("invalid iv length "+n.length);if("string"==typeof t&&(t=r.from(t)),t.length!==p.key/8)throw new TypeError("invalid key length "+t.length);return"stream"===p.type?new i(p.module,t,n,!0):"auth"===p.type?new o(p.module,t,n,!0):new b(p.module,t,n)}n(19)(b,p),b.prototype._update=function(e){var t,n;this._cache.add(e);for(var o=[];t=this._cache.get(this._autopadding);)n=this._mode.decrypt(this,t),o.push(n);return r.concat(o)},b.prototype._final=function(){var e=this._cache.flush();if(this._autopadding)return function(e){var t=e[15];if(t<1||t>16)throw new Error("unable to decrypt data");for(var n=-1;++n<t;)if(e[n+(16-t)]!==t)throw new Error("unable to decrypt data");if(16!==t)return e.slice(0,16-t)}(this._mode.decrypt(this,e));if(e)throw new Error("data not multiple of block length")},b.prototype.setAutoPadding=function(e){return this._autopadding=!!e,this},M.prototype.add=function(e){this.cache=r.concat([this.cache,e])},M.prototype.get=function(e){var t;if(e){if(this.cache.length>16)return t=this.cache.slice(0,16),this.cache=this.cache.slice(16),t}else if(this.cache.length>=16)return t=this.cache.slice(0,16),this.cache=this.cache.slice(16),t;return null},M.prototype.flush=function(){if(this.cache.length)return this.cache},t.createDecipher=function(e,t){var n=a[e.toLowerCase()];if(!n)throw new TypeError("invalid suite type");var o=c(t,!1,n.key,n.iv);return l(e,o.key,o.iv)},t.createDecipheriv=l},function(e,t){t["des-ecb"]={key:8,iv:0},t["des-cbc"]=t.des={key:8,iv:8},t["des-ede3-cbc"]=t.des3={key:24,iv:8},t["des-ede3"]={key:24,iv:0},t["des-ede-cbc"]={key:16,iv:8},t["des-ede"]={key:16,iv:0}},function(e,t,n){(function(e){var o=n(693),r=n(822),a=n(823),i={binary:!0,hex:!0,base64:!0};t.DiffieHellmanGroup=t.createDiffieHellmanGroup=t.getDiffieHellman=function(t){var n=new e(r[t].prime,"hex"),o=new e(r[t].gen,"hex");return new a(n,o)},t.createDiffieHellman=t.DiffieHellman=function t(n,r,p,s){return e.isBuffer(r)||void 0===i[r]?t(n,"binary",r,p):(r=r||"binary",s=s||"binary",p=p||new e([2]),e.isBuffer(p)||(p=new e(p,s)),"number"==typeof n?new a(o(n,p),p,!0):(e.isBuffer(n)||(n=new e(n,r)),new a(n,p,!0)))}}).call(this,n(57).Buffer)},function(e,t){},function(e,t){},function(e){e.exports={modp1:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},modp2:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},modp5:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},modp14:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},modp15:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},modp16:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},modp17:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},modp18:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}},function(e,t,n){(function(t){var o=n(48),r=new(n(694)),a=new o(24),i=new o(11),p=new o(10),s=new o(3),c=new o(7),b=n(693),M=n(184);function l(e,n){return n=n||"utf8",t.isBuffer(e)||(e=new t(e,n)),this._pub=new o(e),this}function u(e,n){return n=n||"utf8",t.isBuffer(e)||(e=new t(e,n)),this._priv=new o(e),this}e.exports=z;var d={};function z(e,t,n){this.setGenerator(t),this.__prime=new o(e),this._prime=o.mont(this.__prime),this._primeLen=e.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,n?(this.setPublicKey=l,this.setPrivateKey=u):this._primeCode=8}function f(e,n){var o=new t(e.toArray());return n?o.toString(n):o}Object.defineProperty(z.prototype,"verifyError",{enumerable:!0,get:function(){return"number"!=typeof this._primeCode&&(this._primeCode=function(e,t){var n=t.toString("hex"),o=[n,e.toString(16)].join("_");if(o in d)return d[o];var M,l=0;if(e.isEven()||!b.simpleSieve||!b.fermatTest(e)||!r.test(e))return l+=1,l+="02"===n||"05"===n?8:4,d[o]=l,l;switch(r.test(e.shrn(1))||(l+=2),n){case"02":e.mod(a).cmp(i)&&(l+=8);break;case"05":(M=e.mod(p)).cmp(s)&&M.cmp(c)&&(l+=8);break;default:l+=4}return d[o]=l,l}(this.__prime,this.__gen)),this._primeCode}}),z.prototype.generateKeys=function(){return this._priv||(this._priv=new o(M(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},z.prototype.computeSecret=function(e){var n=(e=(e=new o(e)).toRed(this._prime)).redPow(this._priv).fromRed(),r=new t(n.toArray()),a=this.getPrime();if(r.length<a.length){var i=new t(a.length-r.length);i.fill(0),r=t.concat([i,r])}return r},z.prototype.getPublicKey=function(e){return f(this._pub,e)},z.prototype.getPrivateKey=function(e){return f(this._priv,e)},z.prototype.getPrime=function(e){return f(this.__prime,e)},z.prototype.getGenerator=function(e){return f(this._gen,e)},z.prototype.setGenerator=function(e,n){return n=n||"utf8",t.isBuffer(e)||(e=new t(e,n)),this.__gen=e,this._gen=new o(e),this}}).call(this,n(57).Buffer)},function(e,t,n){(function(t){var o=n(387),r=n(638),a=n(19),i=n(825),p=n(860),s=n(683);function c(e){r.Writable.call(this);var t=s[e];if(!t)throw new Error("Unknown message digest");this._hashType=t.hash,this._hash=o(t.hash),this._tag=t.id,this._signType=t.sign}function b(e){r.Writable.call(this);var t=s[e];if(!t)throw new Error("Unknown message digest");this._hash=o(t.hash),this._tag=t.id,this._signType=t.sign}function M(e){return new c(e)}function l(e){return new b(e)}Object.keys(s).forEach(function(e){s[e].id=new t(s[e].id,"hex"),s[e.toLowerCase()]=s[e]}),a(c,r.Writable),c.prototype._write=function(e,t,n){this._hash.update(e),n()},c.prototype.update=function(e,n){return"string"==typeof e&&(e=new t(e,n)),this._hash.update(e),this},c.prototype.sign=function(e,t){this.end();var n=this._hash.digest(),o=i(n,e,this._hashType,this._signType,this._tag);return t?o.toString(t):o},a(b,r.Writable),b.prototype._write=function(e,t,n){this._hash.update(e),n()},b.prototype.update=function(e,n){return"string"==typeof e&&(e=new t(e,n)),this._hash.update(e),this},b.prototype.verify=function(e,n,o){"string"==typeof n&&(n=new t(n,o)),this.end();var r=this._hash.digest();return p(n,r,e,this._signType,this._tag)},e.exports={Sign:M,Verify:l,createSign:M,createVerify:l}}).call(this,n(57).Buffer)},function(e,t,n){(function(t){var o=n(681),r=n(647),a=n(73).ec,i=n(48),p=n(424),s=n(703);function c(e,n,r,a){if((e=new t(e.toArray())).length<n.byteLength()){var i=new t(n.byteLength()-e.length);i.fill(0),e=t.concat([i,e])}var p=r.length,s=function(e,n){e=(e=b(e,n)).mod(n);var o=new t(e.toArray());if(o.length<n.byteLength()){var r=new t(n.byteLength()-o.length);r.fill(0),o=t.concat([r,o])}return o}(r,n),c=new t(p);c.fill(1);var M=new t(p);return M.fill(0),M=o(a,M).update(c).update(new t([0])).update(e).update(s).digest(),c=o(a,M).update(c).digest(),{k:M=o(a,M).update(c).update(new t([1])).update(e).update(s).digest(),v:c=o(a,M).update(c).digest()}}function b(e,t){var n=new i(e),o=(e.length<<3)-t.bitLength();return o>0&&n.ishrn(o),n}function M(e,n,r){var a,i;do{for(a=new t(0);8*a.length<e.bitLength();)n.v=o(r,n.k).update(n.v).digest(),a=t.concat([a,n.v]);i=b(a,e),n.k=o(r,n.k).update(n.v).update(new t([0])).digest(),n.v=o(r,n.k).update(n.v).digest()}while(-1!==i.cmp(e));return i}function l(e,t,n,o){return e.toRed(i.mont(n)).redPow(t).fromRed().mod(o)}e.exports=function(e,n,o,u,d){var z=p(n);if(z.curve){if("ecdsa"!==u&&"ecdsa/rsa"!==u)throw new Error("wrong private key type");return function(e,n){var o=s[n.curve.join(".")];if(!o)throw new Error("unknown curve "+n.curve.join("."));var r=new a(o).keyFromPrivate(n.privateKey).sign(e);return new t(r.toDER())}(e,z)}if("dsa"===z.type){if("dsa"!==u)throw new Error("wrong private key type");return function(e,n,o){for(var r,a=n.params.priv_key,p=n.params.p,s=n.params.q,u=n.params.g,d=new i(0),z=b(e,s).mod(s),f=!1,O=c(a,s,e,o);!1===f;)d=l(u,r=M(s,O,o),p,s),0===(f=r.invm(s).imul(z.add(a.mul(d))).mod(s)).cmpn(0)&&(f=!1,d=new i(0));return function(e,n){e=e.toArray(),n=n.toArray(),128&e[0]&&(e=[0].concat(e)),128&n[0]&&(n=[0].concat(n));var o=[48,e.length+n.length+4,2,e.length];return o=o.concat(e,[2,n.length],n),new t(o)}(d,f)}(e,z,o)}if("rsa"!==u&&"ecdsa/rsa"!==u)throw new Error("wrong private key type");e=t.concat([d,e]);for(var f=z.modulus.byteLength(),O=[0,1];e.length+O.length+1<f;)O.push(255);O.push(0);for(var A=-1;++A<e.length;)O.push(e[A]);return r(O,z)},e.exports.getKey=c,e.exports.makeKey=M}).call(this,n(57).Buffer)},function(e){e.exports={name:"elliptic",version:"6.4.1",description:"EC cryptography",main:"lib/elliptic.js",files:["lib"],scripts:{jscs:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",jshint:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",lint:"npm run jscs && npm run jshint",unit:"istanbul test _mocha --reporter=spec test/index.js",test:"npm run lint && npm run unit",version:"grunt dist && git add dist/"},repository:{type:"git",url:"git@github.com:indutny/elliptic"},keywords:["EC","Elliptic","curve","Cryptography"],author:"Fedor Indutny <fedor@indutny.com>",license:"MIT",bugs:{url:"https://github.com/indutny/elliptic/issues"},homepage:"https://github.com/indutny/elliptic",devDependencies:{brfs:"^1.4.3",coveralls:"^2.11.3",grunt:"^0.4.5","grunt-browserify":"^5.0.0","grunt-cli":"^1.2.0","grunt-contrib-connect":"^1.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^1.0.1","grunt-mocha-istanbul":"^3.0.1","grunt-saucelabs":"^8.6.2",istanbul:"^0.4.2",jscs:"^2.9.0",jshint:"^2.6.0",mocha:"^2.1.0"},dependencies:{"bn.js":"^4.4.0",brorand:"^1.0.1","hash.js":"^1.0.0","hmac-drbg":"^1.0.0",inherits:"^2.0.1","minimalistic-assert":"^1.0.0","minimalistic-crypto-utils":"^1.0.0"}}},function(e,t,n){"use strict";var o=t,r=n(48),a=n(66),i=n(696);o.assert=a,o.toArray=i.toArray,o.zero2=i.zero2,o.toHex=i.toHex,o.encode=i.encode,o.getNAF=function(e,t){for(var n=[],o=1<<t+1,r=e.clone();r.cmpn(1)>=0;){var a;if(r.isOdd()){var i=r.andln(o-1);a=i>(o>>1)-1?(o>>1)-i:i,r.isubn(a)}else a=0;n.push(a);for(var p=0!==r.cmpn(0)&&0===r.andln(o-1)?t+1:1,s=1;s<p;s++)n.push(0);r.iushrn(p)}return n},o.getJSF=function(e,t){var n=[[],[]];e=e.clone(),t=t.clone();for(var o=0,r=0;e.cmpn(-o)>0||t.cmpn(-r)>0;){var a,i,p,s=e.andln(3)+o&3,c=t.andln(3)+r&3;3===s&&(s=-1),3===c&&(c=-1),a=0==(1&s)?0:3!=(p=e.andln(7)+o&7)&&5!==p||2!==c?s:-s,n[0].push(a),i=0==(1&c)?0:3!=(p=t.andln(7)+r&7)&&5!==p||2!==s?c:-c,n[1].push(i),2*o===a+1&&(o=1-o),2*r===i+1&&(r=1-r),e.iushrn(1),t.iushrn(1)}return n},o.cachedProperty=function(e,t,n){var o="_"+t;e.prototype[t]=function(){return void 0!==this[o]?this[o]:this[o]=n.call(this)}},o.parseBytes=function(e){return"string"==typeof e?o.toArray(e,"hex"):e},o.intFromLE=function(e){return new r(e,"hex","le")}},function(e,t,n){"use strict";var o=n(48),r=n(73).utils,a=r.getNAF,i=r.getJSF,p=r.assert;function s(e,t){this.type=e,this.p=new o(t.p,16),this.red=t.prime?o.red(t.prime):o.mont(this.p),this.zero=new o(0).toRed(this.red),this.one=new o(1).toRed(this.red),this.two=new o(2).toRed(this.red),this.n=t.n&&new o(t.n,16),this.g=t.g&&this.pointFromJSON(t.g,t.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4);var n=this.n&&this.p.div(this.n);!n||n.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function c(e,t){this.curve=e,this.type=t,this.precomputed=null}e.exports=s,s.prototype.point=function(){throw new Error("Not implemented")},s.prototype.validate=function(){throw new Error("Not implemented")},s.prototype._fixedNafMul=function(e,t){p(e.precomputed);var n=e._getDoubles(),o=a(t,1),r=(1<<n.step+1)-(n.step%2==0?2:1);r/=3;for(var i=[],s=0;s<o.length;s+=n.step){var c=0;for(t=s+n.step-1;t>=s;t--)c=(c<<1)+o[t];i.push(c)}for(var b=this.jpoint(null,null,null),M=this.jpoint(null,null,null),l=r;l>0;l--){for(s=0;s<i.length;s++)(c=i[s])===l?M=M.mixedAdd(n.points[s]):c===-l&&(M=M.mixedAdd(n.points[s].neg()));b=b.add(M)}return b.toP()},s.prototype._wnafMul=function(e,t){var n=4,o=e._getNAFPoints(n);n=o.wnd;for(var r=o.points,i=a(t,n),s=this.jpoint(null,null,null),c=i.length-1;c>=0;c--){for(t=0;c>=0&&0===i[c];c--)t++;if(c>=0&&t++,s=s.dblp(t),c<0)break;var b=i[c];p(0!==b),s="affine"===e.type?b>0?s.mixedAdd(r[b-1>>1]):s.mixedAdd(r[-b-1>>1].neg()):b>0?s.add(r[b-1>>1]):s.add(r[-b-1>>1].neg())}return"affine"===e.type?s.toP():s},s.prototype._wnafMulAdd=function(e,t,n,o,r){for(var p=this._wnafT1,s=this._wnafT2,c=this._wnafT3,b=0,M=0;M<o;M++){var l=(v=t[M])._getNAFPoints(e);p[M]=l.wnd,s[M]=l.points}for(M=o-1;M>=1;M-=2){var u=M-1,d=M;if(1===p[u]&&1===p[d]){var z=[t[u],null,null,t[d]];0===t[u].y.cmp(t[d].y)?(z[1]=t[u].add(t[d]),z[2]=t[u].toJ().mixedAdd(t[d].neg())):0===t[u].y.cmp(t[d].y.redNeg())?(z[1]=t[u].toJ().mixedAdd(t[d]),z[2]=t[u].add(t[d].neg())):(z[1]=t[u].toJ().mixedAdd(t[d]),z[2]=t[u].toJ().mixedAdd(t[d].neg()));var f=[-3,-1,-5,-7,0,7,5,1,3],O=i(n[u],n[d]);b=Math.max(O[0].length,b),c[u]=new Array(b),c[d]=new Array(b);for(var A=0;A<b;A++){var h=0|O[0][A],m=0|O[1][A];c[u][A]=f[3*(h+1)+(m+1)],c[d][A]=0,s[u]=z}}else c[u]=a(n[u],p[u]),c[d]=a(n[d],p[d]),b=Math.max(c[u].length,b),b=Math.max(c[d].length,b)}var q=this.jpoint(null,null,null),_=this._wnafT4;for(M=b;M>=0;M--){for(var W=0;M>=0;){var g=!0;for(A=0;A<o;A++)_[A]=0|c[A][M],0!==_[A]&&(g=!1);if(!g)break;W++,M--}if(M>=0&&W++,q=q.dblp(W),M<0)break;for(A=0;A<o;A++){var v,y=_[A];0!==y&&(y>0?v=s[A][y-1>>1]:y<0&&(v=s[A][-y-1>>1].neg()),q="affine"===v.type?q.mixedAdd(v):q.add(v))}}for(M=0;M<o;M++)s[M]=null;return r?q:q.toP()},s.BasePoint=c,c.prototype.eq=function(){throw new Error("Not implemented")},c.prototype.validate=function(){return this.curve.validate(this)},s.prototype.decodePoint=function(e,t){e=r.toArray(e,t);var n=this.p.byteLength();if((4===e[0]||6===e[0]||7===e[0])&&e.length-1==2*n)return 6===e[0]?p(e[e.length-1]%2==0):7===e[0]&&p(e[e.length-1]%2==1),this.point(e.slice(1,1+n),e.slice(1+n,1+2*n));if((2===e[0]||3===e[0])&&e.length-1===n)return this.pointFromX(e.slice(1,1+n),3===e[0]);throw new Error("Unknown point format")},c.prototype.encodeCompressed=function(e){return this.encode(e,!0)},c.prototype._encode=function(e){var t=this.curve.p.byteLength(),n=this.getX().toArray("be",t);return e?[this.getY().isEven()?2:3].concat(n):[4].concat(n,this.getY().toArray("be",t))},c.prototype.encode=function(e,t){return r.encode(this._encode(t),e)},c.prototype.precompute=function(e){if(this.precomputed)return this;var t={doubles:null,naf:null,beta:null};return t.naf=this._getNAFPoints(8),t.doubles=this._getDoubles(4,e),t.beta=this._getBeta(),this.precomputed=t,this},c.prototype._hasDoubles=function(e){if(!this.precomputed)return!1;var t=this.precomputed.doubles;return!!t&&t.points.length>=Math.ceil((e.bitLength()+1)/t.step)},c.prototype._getDoubles=function(e,t){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var n=[this],o=this,r=0;r<t;r+=e){for(var a=0;a<e;a++)o=o.dbl();n.push(o)}return{step:e,points:n}},c.prototype._getNAFPoints=function(e){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var t=[this],n=(1<<e)-1,o=1===n?null:this.dbl(),r=1;r<n;r++)t[r]=t[r-1].add(o);return{wnd:e,points:t}},c.prototype._getBeta=function(){return null},c.prototype.dblp=function(e){for(var t=this,n=0;n<e;n++)t=t.dbl();return t}},function(e,t,n){"use strict";var o=n(423),r=n(73),a=n(48),i=n(19),p=o.base,s=r.utils.assert;function c(e){p.call(this,"short",e),this.a=new a(e.a,16).toRed(this.red),this.b=new a(e.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(e),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function b(e,t,n,o){p.BasePoint.call(this,e,"affine"),null===t&&null===n?(this.x=null,this.y=null,this.inf=!0):(this.x=new a(t,16),this.y=new a(n,16),o&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function M(e,t,n,o){p.BasePoint.call(this,e,"jacobian"),null===t&&null===n&&null===o?(this.x=this.curve.one,this.y=this.curve.one,this.z=new a(0)):(this.x=new a(t,16),this.y=new a(n,16),this.z=new a(o,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}i(c,p),e.exports=c,c.prototype._getEndomorphism=function(e){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var t,n;if(e.beta)t=new a(e.beta,16).toRed(this.red);else{var o=this._getEndoRoots(this.p);t=(t=o[0].cmp(o[1])<0?o[0]:o[1]).toRed(this.red)}if(e.lambda)n=new a(e.lambda,16);else{var r=this._getEndoRoots(this.n);0===this.g.mul(r[0]).x.cmp(this.g.x.redMul(t))?n=r[0]:(n=r[1],s(0===this.g.mul(n).x.cmp(this.g.x.redMul(t))))}return{beta:t,lambda:n,basis:e.basis?e.basis.map(function(e){return{a:new a(e.a,16),b:new a(e.b,16)}}):this._getEndoBasis(n)}}},c.prototype._getEndoRoots=function(e){var t=e===this.p?this.red:a.mont(e),n=new a(2).toRed(t).redInvm(),o=n.redNeg(),r=new a(3).toRed(t).redNeg().redSqrt().redMul(n);return[o.redAdd(r).fromRed(),o.redSub(r).fromRed()]},c.prototype._getEndoBasis=function(e){for(var t,n,o,r,i,p,s,c,b,M=this.n.ushrn(Math.floor(this.n.bitLength()/2)),l=e,u=this.n.clone(),d=new a(1),z=new a(0),f=new a(0),O=new a(1),A=0;0!==l.cmpn(0);){var h=u.div(l);c=u.sub(h.mul(l)),b=f.sub(h.mul(d));var m=O.sub(h.mul(z));if(!o&&c.cmp(M)<0)t=s.neg(),n=d,o=c.neg(),r=b;else if(o&&2==++A)break;s=c,u=l,l=c,f=d,d=b,O=z,z=m}i=c.neg(),p=b;var q=o.sqr().add(r.sqr());return i.sqr().add(p.sqr()).cmp(q)>=0&&(i=t,p=n),o.negative&&(o=o.neg(),r=r.neg()),i.negative&&(i=i.neg(),p=p.neg()),[{a:o,b:r},{a:i,b:p}]},c.prototype._endoSplit=function(e){var t=this.endo.basis,n=t[0],o=t[1],r=o.b.mul(e).divRound(this.n),a=n.b.neg().mul(e).divRound(this.n),i=r.mul(n.a),p=a.mul(o.a),s=r.mul(n.b),c=a.mul(o.b);return{k1:e.sub(i).sub(p),k2:s.add(c).neg()}},c.prototype.pointFromX=function(e,t){(e=new a(e,16)).red||(e=e.toRed(this.red));var n=e.redSqr().redMul(e).redIAdd(e.redMul(this.a)).redIAdd(this.b),o=n.redSqrt();if(0!==o.redSqr().redSub(n).cmp(this.zero))throw new Error("invalid point");var r=o.fromRed().isOdd();return(t&&!r||!t&&r)&&(o=o.redNeg()),this.point(e,o)},c.prototype.validate=function(e){if(e.inf)return!0;var t=e.x,n=e.y,o=this.a.redMul(t),r=t.redSqr().redMul(t).redIAdd(o).redIAdd(this.b);return 0===n.redSqr().redISub(r).cmpn(0)},c.prototype._endoWnafMulAdd=function(e,t,n){for(var o=this._endoWnafT1,r=this._endoWnafT2,a=0;a<e.length;a++){var i=this._endoSplit(t[a]),p=e[a],s=p._getBeta();i.k1.negative&&(i.k1.ineg(),p=p.neg(!0)),i.k2.negative&&(i.k2.ineg(),s=s.neg(!0)),o[2*a]=p,o[2*a+1]=s,r[2*a]=i.k1,r[2*a+1]=i.k2}for(var c=this._wnafMulAdd(1,o,r,2*a,n),b=0;b<2*a;b++)o[b]=null,r[b]=null;return c},i(b,p.BasePoint),c.prototype.point=function(e,t,n){return new b(this,e,t,n)},c.prototype.pointFromJSON=function(e,t){return b.fromJSON(this,e,t)},b.prototype._getBeta=function(){if(this.curve.endo){var e=this.precomputed;if(e&&e.beta)return e.beta;var t=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(e){var n=this.curve,o=function(e){return n.point(e.x.redMul(n.endo.beta),e.y)};e.beta=t,t.precomputed={beta:null,naf:e.naf&&{wnd:e.naf.wnd,points:e.naf.points.map(o)},doubles:e.doubles&&{step:e.doubles.step,points:e.doubles.points.map(o)}}}return t}},b.prototype.toJSON=function(){return this.precomputed?[this.x,this.y,this.precomputed&&{doubles:this.precomputed.doubles&&{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)},naf:this.precomputed.naf&&{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}}]:[this.x,this.y]},b.fromJSON=function(e,t,n){"string"==typeof t&&(t=JSON.parse(t));var o=e.point(t[0],t[1],n);if(!t[2])return o;function r(t){return e.point(t[0],t[1],n)}var a=t[2];return o.precomputed={beta:null,doubles:a.doubles&&{step:a.doubles.step,points:[o].concat(a.doubles.points.map(r))},naf:a.naf&&{wnd:a.naf.wnd,points:[o].concat(a.naf.points.map(r))}},o},b.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+">"},b.prototype.isInfinity=function(){return this.inf},b.prototype.add=function(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var t=this.y.redSub(e.y);0!==t.cmpn(0)&&(t=t.redMul(this.x.redSub(e.x).redInvm()));var n=t.redSqr().redISub(this.x).redISub(e.x),o=t.redMul(this.x.redSub(n)).redISub(this.y);return this.curve.point(n,o)},b.prototype.dbl=function(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var t=this.curve.a,n=this.x.redSqr(),o=e.redInvm(),r=n.redAdd(n).redIAdd(n).redIAdd(t).redMul(o),a=r.redSqr().redISub(this.x.redAdd(this.x)),i=r.redMul(this.x.redSub(a)).redISub(this.y);return this.curve.point(a,i)},b.prototype.getX=function(){return this.x.fromRed()},b.prototype.getY=function(){return this.y.fromRed()},b.prototype.mul=function(e){return e=new a(e,16),this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},b.prototype.mulAdd=function(e,t,n){var o=[this,t],r=[e,n];return this.curve.endo?this.curve._endoWnafMulAdd(o,r):this.curve._wnafMulAdd(1,o,r,2)},b.prototype.jmulAdd=function(e,t,n){var o=[this,t],r=[e,n];return this.curve.endo?this.curve._endoWnafMulAdd(o,r,!0):this.curve._wnafMulAdd(1,o,r,2,!0)},b.prototype.eq=function(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},b.prototype.neg=function(e){if(this.inf)return this;var t=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var n=this.precomputed,o=function(e){return e.neg()};t.precomputed={naf:n.naf&&{wnd:n.naf.wnd,points:n.naf.points.map(o)},doubles:n.doubles&&{step:n.doubles.step,points:n.doubles.points.map(o)}}}return t},b.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},i(M,p.BasePoint),c.prototype.jpoint=function(e,t,n){return new M(this,e,t,n)},M.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),t=e.redSqr(),n=this.x.redMul(t),o=this.y.redMul(t).redMul(e);return this.curve.point(n,o)},M.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},M.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var t=e.z.redSqr(),n=this.z.redSqr(),o=this.x.redMul(t),r=e.x.redMul(n),a=this.y.redMul(t.redMul(e.z)),i=e.y.redMul(n.redMul(this.z)),p=o.redSub(r),s=a.redSub(i);if(0===p.cmpn(0))return 0!==s.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var c=p.redSqr(),b=c.redMul(p),M=o.redMul(c),l=s.redSqr().redIAdd(b).redISub(M).redISub(M),u=s.redMul(M.redISub(l)).redISub(a.redMul(b)),d=this.z.redMul(e.z).redMul(p);return this.curve.jpoint(l,u,d)},M.prototype.mixedAdd=function(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var t=this.z.redSqr(),n=this.x,o=e.x.redMul(t),r=this.y,a=e.y.redMul(t).redMul(this.z),i=n.redSub(o),p=r.redSub(a);if(0===i.cmpn(0))return 0!==p.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var s=i.redSqr(),c=s.redMul(i),b=n.redMul(s),M=p.redSqr().redIAdd(c).redISub(b).redISub(b),l=p.redMul(b.redISub(M)).redISub(r.redMul(c)),u=this.z.redMul(i);return this.curve.jpoint(M,l,u)},M.prototype.dblp=function(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var t=this,n=0;n<e;n++)t=t.dbl();return t}var o=this.curve.a,r=this.curve.tinv,a=this.x,i=this.y,p=this.z,s=p.redSqr().redSqr(),c=i.redAdd(i);for(n=0;n<e;n++){var b=a.redSqr(),M=c.redSqr(),l=M.redSqr(),u=b.redAdd(b).redIAdd(b).redIAdd(o.redMul(s)),d=a.redMul(M),z=u.redSqr().redISub(d.redAdd(d)),f=d.redISub(z),O=u.redMul(f);O=O.redIAdd(O).redISub(l);var A=c.redMul(p);n+1<e&&(s=s.redMul(l)),a=z,p=A,c=O}return this.curve.jpoint(a,c.redMul(r),p)},M.prototype.dbl=function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},M.prototype._zeroDbl=function(){var e,t,n;if(this.zOne){var o=this.x.redSqr(),r=this.y.redSqr(),a=r.redSqr(),i=this.x.redAdd(r).redSqr().redISub(o).redISub(a);i=i.redIAdd(i);var p=o.redAdd(o).redIAdd(o),s=p.redSqr().redISub(i).redISub(i),c=a.redIAdd(a);c=(c=c.redIAdd(c)).redIAdd(c),e=s,t=p.redMul(i.redISub(s)).redISub(c),n=this.y.redAdd(this.y)}else{var b=this.x.redSqr(),M=this.y.redSqr(),l=M.redSqr(),u=this.x.redAdd(M).redSqr().redISub(b).redISub(l);u=u.redIAdd(u);var d=b.redAdd(b).redIAdd(b),z=d.redSqr(),f=l.redIAdd(l);f=(f=f.redIAdd(f)).redIAdd(f),e=z.redISub(u).redISub(u),t=d.redMul(u.redISub(e)).redISub(f),n=(n=this.y.redMul(this.z)).redIAdd(n)}return this.curve.jpoint(e,t,n)},M.prototype._threeDbl=function(){var e,t,n;if(this.zOne){var o=this.x.redSqr(),r=this.y.redSqr(),a=r.redSqr(),i=this.x.redAdd(r).redSqr().redISub(o).redISub(a);i=i.redIAdd(i);var p=o.redAdd(o).redIAdd(o).redIAdd(this.curve.a),s=p.redSqr().redISub(i).redISub(i);e=s;var c=a.redIAdd(a);c=(c=c.redIAdd(c)).redIAdd(c),t=p.redMul(i.redISub(s)).redISub(c),n=this.y.redAdd(this.y)}else{var b=this.z.redSqr(),M=this.y.redSqr(),l=this.x.redMul(M),u=this.x.redSub(b).redMul(this.x.redAdd(b));u=u.redAdd(u).redIAdd(u);var d=l.redIAdd(l),z=(d=d.redIAdd(d)).redAdd(d);e=u.redSqr().redISub(z),n=this.y.redAdd(this.z).redSqr().redISub(M).redISub(b);var f=M.redSqr();f=(f=(f=f.redIAdd(f)).redIAdd(f)).redIAdd(f),t=u.redMul(d.redISub(e)).redISub(f)}return this.curve.jpoint(e,t,n)},M.prototype._dbl=function(){var e=this.curve.a,t=this.x,n=this.y,o=this.z,r=o.redSqr().redSqr(),a=t.redSqr(),i=n.redSqr(),p=a.redAdd(a).redIAdd(a).redIAdd(e.redMul(r)),s=t.redAdd(t),c=(s=s.redIAdd(s)).redMul(i),b=p.redSqr().redISub(c.redAdd(c)),M=c.redISub(b),l=i.redSqr();l=(l=(l=l.redIAdd(l)).redIAdd(l)).redIAdd(l);var u=p.redMul(M).redISub(l),d=n.redAdd(n).redMul(o);return this.curve.jpoint(b,u,d)},M.prototype.trpl=function(){if(!this.curve.zeroA)return this.dbl().add(this);var e=this.x.redSqr(),t=this.y.redSqr(),n=this.z.redSqr(),o=t.redSqr(),r=e.redAdd(e).redIAdd(e),a=r.redSqr(),i=this.x.redAdd(t).redSqr().redISub(e).redISub(o),p=(i=(i=(i=i.redIAdd(i)).redAdd(i).redIAdd(i)).redISub(a)).redSqr(),s=o.redIAdd(o);s=(s=(s=s.redIAdd(s)).redIAdd(s)).redIAdd(s);var c=r.redIAdd(i).redSqr().redISub(a).redISub(p).redISub(s),b=t.redMul(c);b=(b=b.redIAdd(b)).redIAdd(b);var M=this.x.redMul(p).redISub(b);M=(M=M.redIAdd(M)).redIAdd(M);var l=this.y.redMul(c.redMul(s.redISub(c)).redISub(i.redMul(p)));l=(l=(l=l.redIAdd(l)).redIAdd(l)).redIAdd(l);var u=this.z.redAdd(i).redSqr().redISub(n).redISub(p);return this.curve.jpoint(M,l,u)},M.prototype.mul=function(e,t){return e=new a(e,t),this.curve._wnafMul(this,e)},M.prototype.eq=function(e){if("affine"===e.type)return this.eq(e.toJ());if(this===e)return!0;var t=this.z.redSqr(),n=e.z.redSqr();if(0!==this.x.redMul(n).redISub(e.x.redMul(t)).cmpn(0))return!1;var o=t.redMul(this.z),r=n.redMul(e.z);return 0===this.y.redMul(r).redISub(e.y.redMul(o)).cmpn(0)},M.prototype.eqXToP=function(e){var t=this.z.redSqr(),n=e.toRed(this.curve.red).redMul(t);if(0===this.x.cmp(n))return!0;for(var o=e.clone(),r=this.curve.redN.redMul(t);;){if(o.iadd(this.curve.n),o.cmp(this.curve.p)>=0)return!1;if(n.redIAdd(r),0===this.x.cmp(n))return!0}},M.prototype.inspect=function(){return this.isInfinity()?"<EC JPoint Infinity>":"<EC JPoint x: "+this.x.toString(16,2)+" y: "+this.y.toString(16,2)+" z: "+this.z.toString(16,2)+">"},M.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},function(e,t,n){"use strict";var o=n(423),r=n(48),a=n(19),i=o.base,p=n(73).utils;function s(e){i.call(this,"mont",e),this.a=new r(e.a,16).toRed(this.red),this.b=new r(e.b,16).toRed(this.red),this.i4=new r(4).toRed(this.red).redInvm(),this.two=new r(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function c(e,t,n){i.BasePoint.call(this,e,"projective"),null===t&&null===n?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new r(t,16),this.z=new r(n,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}a(s,i),e.exports=s,s.prototype.validate=function(e){var t=e.normalize().x,n=t.redSqr(),o=n.redMul(t).redAdd(n.redMul(this.a)).redAdd(t);return 0===o.redSqrt().redSqr().cmp(o)},a(c,i.BasePoint),s.prototype.decodePoint=function(e,t){return this.point(p.toArray(e,t),1)},s.prototype.point=function(e,t){return new c(this,e,t)},s.prototype.pointFromJSON=function(e){return c.fromJSON(this,e)},c.prototype.precompute=function(){},c.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},c.fromJSON=function(e,t){return new c(e,t[0],t[1]||e.one)},c.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},c.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},c.prototype.dbl=function(){var e=this.x.redAdd(this.z).redSqr(),t=this.x.redSub(this.z).redSqr(),n=e.redSub(t),o=e.redMul(t),r=n.redMul(t.redAdd(this.curve.a24.redMul(n)));return this.curve.point(o,r)},c.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},c.prototype.diffAdd=function(e,t){var n=this.x.redAdd(this.z),o=this.x.redSub(this.z),r=e.x.redAdd(e.z),a=e.x.redSub(e.z).redMul(n),i=r.redMul(o),p=t.z.redMul(a.redAdd(i).redSqr()),s=t.x.redMul(a.redISub(i).redSqr());return this.curve.point(p,s)},c.prototype.mul=function(e){for(var t=e.clone(),n=this,o=this.curve.point(null,null),r=[];0!==t.cmpn(0);t.iushrn(1))r.push(t.andln(1));for(var a=r.length-1;a>=0;a--)0===r[a]?(n=n.diffAdd(o,this),o=o.dbl()):(o=n.diffAdd(o,this),n=n.dbl());return o},c.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},c.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},c.prototype.eq=function(e){return 0===this.getX().cmp(e.getX())},c.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},c.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},function(e,t,n){"use strict";var o=n(423),r=n(73),a=n(48),i=n(19),p=o.base,s=r.utils.assert;function c(e){this.twisted=1!=(0|e.a),this.mOneA=this.twisted&&-1==(0|e.a),this.extended=this.mOneA,p.call(this,"edwards",e),this.a=new a(e.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new a(e.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new a(e.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),s(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1==(0|e.c)}function b(e,t,n,o,r){p.BasePoint.call(this,e,"projective"),null===t&&null===n&&null===o?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new a(t,16),this.y=new a(n,16),this.z=o?new a(o,16):this.curve.one,this.t=r&&new a(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}i(c,p),e.exports=c,c.prototype._mulA=function(e){return this.mOneA?e.redNeg():this.a.redMul(e)},c.prototype._mulC=function(e){return this.oneC?e:this.c.redMul(e)},c.prototype.jpoint=function(e,t,n,o){return this.point(e,t,n,o)},c.prototype.pointFromX=function(e,t){(e=new a(e,16)).red||(e=e.toRed(this.red));var n=e.redSqr(),o=this.c2.redSub(this.a.redMul(n)),r=this.one.redSub(this.c2.redMul(this.d).redMul(n)),i=o.redMul(r.redInvm()),p=i.redSqrt();if(0!==p.redSqr().redSub(i).cmp(this.zero))throw new Error("invalid point");var s=p.fromRed().isOdd();return(t&&!s||!t&&s)&&(p=p.redNeg()),this.point(e,p)},c.prototype.pointFromY=function(e,t){(e=new a(e,16)).red||(e=e.toRed(this.red));var n=e.redSqr(),o=n.redSub(this.c2),r=n.redMul(this.d).redMul(this.c2).redSub(this.a),i=o.redMul(r.redInvm());if(0===i.cmp(this.zero)){if(t)throw new Error("invalid point");return this.point(this.zero,e)}var p=i.redSqrt();if(0!==p.redSqr().redSub(i).cmp(this.zero))throw new Error("invalid point");return p.fromRed().isOdd()!==t&&(p=p.redNeg()),this.point(p,e)},c.prototype.validate=function(e){if(e.isInfinity())return!0;e.normalize();var t=e.x.redSqr(),n=e.y.redSqr(),o=t.redMul(this.a).redAdd(n),r=this.c2.redMul(this.one.redAdd(this.d.redMul(t).redMul(n)));return 0===o.cmp(r)},i(b,p.BasePoint),c.prototype.pointFromJSON=function(e){return b.fromJSON(this,e)},c.prototype.point=function(e,t,n,o){return new b(this,e,t,n,o)},b.fromJSON=function(e,t){return new b(e,t[0],t[1],t[2])},b.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},b.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},b.prototype._extDbl=function(){var e=this.x.redSqr(),t=this.y.redSqr(),n=this.z.redSqr();n=n.redIAdd(n);var o=this.curve._mulA(e),r=this.x.redAdd(this.y).redSqr().redISub(e).redISub(t),a=o.redAdd(t),i=a.redSub(n),p=o.redSub(t),s=r.redMul(i),c=a.redMul(p),b=r.redMul(p),M=i.redMul(a);return this.curve.point(s,c,M,b)},b.prototype._projDbl=function(){var e,t,n,o=this.x.redAdd(this.y).redSqr(),r=this.x.redSqr(),a=this.y.redSqr();if(this.curve.twisted){var i=(c=this.curve._mulA(r)).redAdd(a);if(this.zOne)e=o.redSub(r).redSub(a).redMul(i.redSub(this.curve.two)),t=i.redMul(c.redSub(a)),n=i.redSqr().redSub(i).redSub(i);else{var p=this.z.redSqr(),s=i.redSub(p).redISub(p);e=o.redSub(r).redISub(a).redMul(s),t=i.redMul(c.redSub(a)),n=i.redMul(s)}}else{var c=r.redAdd(a);p=this.curve._mulC(this.z).redSqr(),s=c.redSub(p).redSub(p),e=this.curve._mulC(o.redISub(c)).redMul(s),t=this.curve._mulC(c).redMul(r.redISub(a)),n=c.redMul(s)}return this.curve.point(e,t,n)},b.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},b.prototype._extAdd=function(e){var t=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),n=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),o=this.t.redMul(this.curve.dd).redMul(e.t),r=this.z.redMul(e.z.redAdd(e.z)),a=n.redSub(t),i=r.redSub(o),p=r.redAdd(o),s=n.redAdd(t),c=a.redMul(i),b=p.redMul(s),M=a.redMul(s),l=i.redMul(p);return this.curve.point(c,b,l,M)},b.prototype._projAdd=function(e){var t,n,o=this.z.redMul(e.z),r=o.redSqr(),a=this.x.redMul(e.x),i=this.y.redMul(e.y),p=this.curve.d.redMul(a).redMul(i),s=r.redSub(p),c=r.redAdd(p),b=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(a).redISub(i),M=o.redMul(s).redMul(b);return this.curve.twisted?(t=o.redMul(c).redMul(i.redSub(this.curve._mulA(a))),n=s.redMul(c)):(t=o.redMul(c).redMul(i.redSub(a)),n=this.curve._mulC(s).redMul(c)),this.curve.point(M,t,n)},b.prototype.add=function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},b.prototype.mul=function(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},b.prototype.mulAdd=function(e,t,n){return this.curve._wnafMulAdd(1,[this,t],[e,n],2,!1)},b.prototype.jmulAdd=function(e,t,n){return this.curve._wnafMulAdd(1,[this,t],[e,n],2,!0)},b.prototype.normalize=function(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},b.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},b.prototype.getX=function(){return this.normalize(),this.x.fromRed()},b.prototype.getY=function(){return this.normalize(),this.y.fromRed()},b.prototype.eq=function(e){return this===e||0===this.getX().cmp(e.getX())&&0===this.getY().cmp(e.getY())},b.prototype.eqXToP=function(e){var t=e.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(t))return!0;for(var n=e.clone(),o=this.curve.redN.redMul(this.z);;){if(n.iadd(this.curve.n),n.cmp(this.curve.p)>=0)return!1;if(t.redIAdd(o),0===this.x.cmp(t))return!0}},b.prototype.toP=b.prototype.normalize,b.prototype.mixedAdd=b.prototype.add},function(e,t,n){"use strict";var o,r=t,a=n(648),i=n(73),p=i.utils.assert;function s(e){"short"===e.type?this.curve=new i.curve.short(e):"edwards"===e.type?this.curve=new i.curve.edwards(e):this.curve=new i.curve.mont(e),this.g=this.curve.g,this.n=this.curve.n,this.hash=e.hash,p(this.g.validate(),"Invalid curve"),p(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function c(e,t){Object.defineProperty(r,e,{configurable:!0,enumerable:!0,get:function(){var n=new s(t);return Object.defineProperty(r,e,{configurable:!0,enumerable:!0,value:n}),n}})}r.PresetCurve=s,c("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:a.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),c("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:a.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),c("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:a.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),c("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:a.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),c("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:a.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),c("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:a.sha256,gRed:!1,g:["9"]}),c("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:a.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});try{o=n(838)}catch(e){o=void 0}c("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:a.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",o]})},function(e,t,n){"use strict";t.sha1=n(404),t.sha224=n(834),t.sha256=n(697),t.sha384=n(835),t.sha512=n(698)},function(e,t,n){"use strict";var o=n(72),r=n(697);function a(){if(!(this instanceof a))return new a;r.call(this),this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]}o.inherits(a,r),e.exports=a,a.blockSize=512,a.outSize=224,a.hmacStrength=192,a.padLength=64,a.prototype._digest=function(e){return"hex"===e?o.toHex32(this.h.slice(0,7),"big"):o.split32(this.h.slice(0,7),"big")}},function(e,t,n){"use strict";var o=n(72),r=n(698);function a(){if(!(this instanceof a))return new a;r.call(this),this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]}o.inherits(a,r),e.exports=a,a.blockSize=1024,a.outSize=384,a.hmacStrength=192,a.padLength=128,a.prototype._digest=function(e){return"hex"===e?o.toHex32(this.h.slice(0,12),"big"):o.split32(this.h.slice(0,12),"big")}},function(e,t,n){"use strict";var o=n(72),r=n(163),a=o.rotl32,i=o.sum32,p=o.sum32_3,s=o.sum32_4,c=r.BlockHash;function b(){if(!(this instanceof b))return new b;c.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian="little"}function M(e,t,n,o){return e<=15?t^n^o:e<=31?t&n|~t&o:e<=47?(t|~n)^o:e<=63?t&o|n&~o:t^(n|~o)}function l(e){return e<=15?0:e<=31?1518500249:e<=47?1859775393:e<=63?2400959708:2840853838}function u(e){return e<=15?1352829926:e<=31?1548603684:e<=47?1836072691:e<=63?2053994217:0}o.inherits(b,c),t.ripemd160=b,b.blockSize=512,b.outSize=160,b.hmacStrength=192,b.padLength=64,b.prototype._update=function(e,t){for(var n=this.h[0],o=this.h[1],r=this.h[2],c=this.h[3],b=this.h[4],A=n,h=o,m=r,q=c,_=b,W=0;W<80;W++){var g=i(a(s(n,M(W,o,r,c),e[d[W]+t],l(W)),f[W]),b);n=b,b=c,c=a(r,10),r=o,o=g,g=i(a(s(A,M(79-W,h,m,q),e[z[W]+t],u(W)),O[W]),_),A=_,_=q,q=a(m,10),m=h,h=g}g=p(this.h[1],r,q),this.h[1]=p(this.h[2],c,_),this.h[2]=p(this.h[3],b,A),this.h[3]=p(this.h[4],n,h),this.h[4]=p(this.h[0],o,m),this.h[0]=g},b.prototype._digest=function(e){return"hex"===e?o.toHex32(this.h,"little"):o.split32(this.h,"little")};var d=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],z=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],f=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],O=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]},function(e,t,n){"use strict";var o=n(72),r=n(66);function a(e,t,n){if(!(this instanceof a))return new a(e,t,n);this.Hash=e,this.blockSize=e.blockSize/8,this.outSize=e.outSize/8,this.inner=null,this.outer=null,this._init(o.toArray(t,n))}e.exports=a,a.prototype._init=function(e){e.length>this.blockSize&&(e=(new this.Hash).update(e).digest()),r(e.length<=this.blockSize);for(var t=e.length;t<this.blockSize;t++)e.push(0);for(t=0;t<e.length;t++)e[t]^=54;for(this.inner=(new this.Hash).update(e),t=0;t<e.length;t++)e[t]^=106;this.outer=(new this.Hash).update(e)},a.prototype.update=function(e,t){return this.inner.update(e,t),this},a.prototype.digest=function(e){return this.outer.update(this.inner.digest()),this.outer.digest(e)}},function(e,t){e.exports={doubles:{step:4,points:[["e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a","f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821"],["8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508","11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf"],["175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739","d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695"],["363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640","4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9"],["8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c","4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36"],["723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda","96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f"],["eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa","5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999"],["100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0","cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09"],["e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d","9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d"],["feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d","e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088"],["da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1","9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d"],["53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0","5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8"],["8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047","10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a"],["385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862","283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453"],["6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7","7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160"],["3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd","56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0"],["85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83","7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6"],["948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a","53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589"],["6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8","bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17"],["e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d","4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda"],["e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725","7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd"],["213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754","4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2"],["4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c","17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6"],["fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6","6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f"],["76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39","c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01"],["c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891","893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3"],["d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b","febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f"],["b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03","2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7"],["e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d","eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78"],["a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070","7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1"],["90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4","e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150"],["8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da","662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82"],["e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11","1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc"],["8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e","efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b"],["e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41","2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51"],["b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef","67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45"],["d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8","db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120"],["324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d","648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84"],["4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96","35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d"],["9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd","ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d"],["6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5","9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8"],["a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266","40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8"],["7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71","34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac"],["928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac","c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f"],["85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751","1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962"],["ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e","493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907"],["827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241","c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec"],["eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3","be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d"],["e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f","4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414"],["1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19","aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd"],["146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be","b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0"],["fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9","6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811"],["da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2","8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1"],["a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13","7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c"],["174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c","ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73"],["959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba","2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd"],["d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151","e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405"],["64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073","d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589"],["8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458","38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e"],["13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b","69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27"],["bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366","d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1"],["8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa","40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482"],["8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0","620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945"],["dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787","7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573"],["f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e","ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82"]]},naf:{wnd:7,points:[["f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9","388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"],["2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4","d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6"],["5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc","6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da"],["acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe","cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37"],["774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb","d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b"],["f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8","ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81"],["d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e","581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58"],["defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34","4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77"],["2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c","85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a"],["352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5","321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c"],["2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f","2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67"],["9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714","73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402"],["daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729","a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55"],["c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db","2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482"],["6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4","e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82"],["1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5","b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396"],["605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479","2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49"],["62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d","80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf"],["80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f","1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a"],["7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb","d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7"],["d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9","eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933"],["49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963","758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a"],["77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74","958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6"],["f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530","e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37"],["463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b","5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e"],["f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247","cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6"],["caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1","cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476"],["2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120","4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40"],["7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435","91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61"],["754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18","673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683"],["e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8","59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5"],["186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb","3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b"],["df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f","55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417"],["5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143","efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868"],["290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba","e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a"],["af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45","f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6"],["766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a","744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996"],["59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e","c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e"],["f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8","e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d"],["7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c","30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2"],["948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519","e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e"],["7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab","100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437"],["3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca","ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311"],["d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf","8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4"],["1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610","68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575"],["733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4","f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d"],["15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c","d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d"],["a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940","edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629"],["e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980","a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06"],["311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3","66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374"],["34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf","9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee"],["f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63","4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1"],["d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448","fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b"],["32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf","5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661"],["7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5","8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6"],["ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6","8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e"],["16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5","5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d"],["eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99","f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc"],["78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51","f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4"],["494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5","42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c"],["a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5","204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b"],["c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997","4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913"],["841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881","73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154"],["5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5","39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865"],["36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66","d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc"],["336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726","ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224"],["8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede","6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e"],["1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94","60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6"],["85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31","3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511"],["29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51","b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b"],["a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252","ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2"],["4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5","cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c"],["d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b","6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3"],["ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4","322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d"],["af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f","6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700"],["e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889","2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4"],["591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246","b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196"],["11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984","998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4"],["3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a","b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257"],["cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030","bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13"],["c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197","6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096"],["c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593","c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38"],["a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef","21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f"],["347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38","60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448"],["da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a","49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a"],["c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111","5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4"],["4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502","7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437"],["3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea","be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7"],["cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26","8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d"],["b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986","39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a"],["d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e","62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54"],["48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4","25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77"],["dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda","ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517"],["6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859","cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10"],["e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f","f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125"],["eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c","6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e"],["13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942","fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1"],["ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a","1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2"],["b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80","5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423"],["ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d","438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8"],["8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1","cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758"],["52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63","c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375"],["e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352","6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d"],["7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193","ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec"],["5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00","9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0"],["32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58","ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c"],["e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7","d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4"],["8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8","c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f"],["4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e","67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649"],["3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d","cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826"],["674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b","299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5"],["d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f","f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87"],["30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6","462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b"],["be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297","62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc"],["93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a","7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c"],["b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c","ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f"],["d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52","4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a"],["d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb","bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46"],["463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065","bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f"],["7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917","603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03"],["74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9","cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08"],["30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3","553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8"],["9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57","712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373"],["176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66","ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3"],["75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8","9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8"],["809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721","9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1"],["1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180","4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9"]]}}},function(e,t,n){"use strict";var o=n(48),r=n(840),a=n(73),i=a.utils.assert,p=n(841),s=n(842);function c(e){if(!(this instanceof c))return new c(e);"string"==typeof e&&(i(a.curves.hasOwnProperty(e),"Unknown curve "+e),e=a.curves[e]),e instanceof a.curves.PresetCurve&&(e={curve:e}),this.curve=e.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=e.curve.g,this.g.precompute(e.curve.n.bitLength()+1),this.hash=e.hash||e.curve.hash}e.exports=c,c.prototype.keyPair=function(e){return new p(this,e)},c.prototype.keyFromPrivate=function(e,t){return p.fromPrivate(this,e,t)},c.prototype.keyFromPublic=function(e,t){return p.fromPublic(this,e,t)},c.prototype.genKeyPair=function(e){e||(e={});for(var t=new r({hash:this.hash,pers:e.pers,persEnc:e.persEnc||"utf8",entropy:e.entropy||a.rand(this.hash.hmacStrength),entropyEnc:e.entropy&&e.entropyEnc||"utf8",nonce:this.n.toArray()}),n=this.n.byteLength(),i=this.n.sub(new o(2));;){var p=new o(t.generate(n));if(!(p.cmp(i)>0))return p.iaddn(1),this.keyFromPrivate(p)}},c.prototype._truncateToN=function(e,t){var n=8*e.byteLength()-this.n.bitLength();return n>0&&(e=e.ushrn(n)),!t&&e.cmp(this.n)>=0?e.sub(this.n):e},c.prototype.sign=function(e,t,n,a){"object"==typeof n&&(a=n,n=null),a||(a={}),t=this.keyFromPrivate(t,n),e=this._truncateToN(new o(e,16));for(var i=this.n.byteLength(),p=t.getPrivate().toArray("be",i),c=e.toArray("be",i),b=new r({hash:this.hash,entropy:p,nonce:c,pers:a.pers,persEnc:a.persEnc||"utf8"}),M=this.n.sub(new o(1)),l=0;;l++){var u=a.k?a.k(l):new o(b.generate(this.n.byteLength()));if(!((u=this._truncateToN(u,!0)).cmpn(1)<=0||u.cmp(M)>=0)){var d=this.g.mul(u);if(!d.isInfinity()){var z=d.getX(),f=z.umod(this.n);if(0!==f.cmpn(0)){var O=u.invm(this.n).mul(f.mul(t.getPrivate()).iadd(e));if(0!==(O=O.umod(this.n)).cmpn(0)){var A=(d.getY().isOdd()?1:0)|(0!==z.cmp(f)?2:0);return a.canonical&&O.cmp(this.nh)>0&&(O=this.n.sub(O),A^=1),new s({r:f,s:O,recoveryParam:A})}}}}}},c.prototype.verify=function(e,t,n,r){e=this._truncateToN(new o(e,16)),n=this.keyFromPublic(n,r);var a=(t=new s(t,"hex")).r,i=t.s;if(a.cmpn(1)<0||a.cmp(this.n)>=0)return!1;if(i.cmpn(1)<0||i.cmp(this.n)>=0)return!1;var p,c=i.invm(this.n),b=c.mul(e).umod(this.n),M=c.mul(a).umod(this.n);return this.curve._maxwellTrick?!(p=this.g.jmulAdd(b,n.getPublic(),M)).isInfinity()&&p.eqXToP(a):!(p=this.g.mulAdd(b,n.getPublic(),M)).isInfinity()&&0===p.getX().umod(this.n).cmp(a)},c.prototype.recoverPubKey=function(e,t,n,r){i((3&n)===n,"The recovery param is more than two bits"),t=new s(t,r);var a=this.n,p=new o(e),c=t.r,b=t.s,M=1&n,l=n>>1;if(c.cmp(this.curve.p.umod(this.curve.n))>=0&&l)throw new Error("Unable to find sencond key candinate");c=l?this.curve.pointFromX(c.add(this.curve.n),M):this.curve.pointFromX(c,M);var u=t.r.invm(a),d=a.sub(p).mul(u).umod(a),z=b.mul(u).umod(a);return this.g.mulAdd(d,c,z)},c.prototype.getKeyRecoveryParam=function(e,t,n,o){if(null!==(t=new s(t,o)).recoveryParam)return t.recoveryParam;for(var r=0;r<4;r++){var a;try{a=this.recoverPubKey(e,t,r)}catch(e){continue}if(a.eq(n))return r}throw new Error("Unable to find valid recovery factor")}},function(e,t,n){"use strict";var o=n(648),r=n(696),a=n(66);function i(e){if(!(this instanceof i))return new i(e);this.hash=e.hash,this.predResist=!!e.predResist,this.outLen=this.hash.outSize,this.minEntropy=e.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var t=r.toArray(e.entropy,e.entropyEnc||"hex"),n=r.toArray(e.nonce,e.nonceEnc||"hex"),o=r.toArray(e.pers,e.persEnc||"hex");a(t.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(t,n,o)}e.exports=i,i.prototype._init=function(e,t,n){var o=e.concat(t).concat(n);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var r=0;r<this.V.length;r++)this.K[r]=0,this.V[r]=1;this._update(o),this._reseed=1,this.reseedInterval=281474976710656},i.prototype._hmac=function(){return new o.hmac(this.hash,this.K)},i.prototype._update=function(e){var t=this._hmac().update(this.V).update([0]);e&&(t=t.update(e)),this.K=t.digest(),this.V=this._hmac().update(this.V).digest(),e&&(this.K=this._hmac().update(this.V).update([1]).update(e).digest(),this.V=this._hmac().update(this.V).digest())},i.prototype.reseed=function(e,t,n,o){"string"!=typeof t&&(o=n,n=t,t=null),e=r.toArray(e,t),n=r.toArray(n,o),a(e.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(e.concat(n||[])),this._reseed=1},i.prototype.generate=function(e,t,n,o){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof t&&(o=n,n=t,t=null),n&&(n=r.toArray(n,o||"hex"),this._update(n));for(var a=[];a.length<e;)this.V=this._hmac().update(this.V).digest(),a=a.concat(this.V);var i=a.slice(0,e);return this._update(n),this._reseed++,r.encode(i,t)}},function(e,t,n){"use strict";var o=n(48),r=n(73).utils.assert;function a(e,t){this.ec=e,this.priv=null,this.pub=null,t.priv&&this._importPrivate(t.priv,t.privEnc),t.pub&&this._importPublic(t.pub,t.pubEnc)}e.exports=a,a.fromPublic=function(e,t,n){return t instanceof a?t:new a(e,{pub:t,pubEnc:n})},a.fromPrivate=function(e,t,n){return t instanceof a?t:new a(e,{priv:t,privEnc:n})},a.prototype.validate=function(){var e=this.getPublic();return e.isInfinity()?{result:!1,reason:"Invalid public key"}:e.validate()?e.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},a.prototype.getPublic=function(e,t){return"string"==typeof e&&(t=e,e=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),t?this.pub.encode(t,e):this.pub},a.prototype.getPrivate=function(e){return"hex"===e?this.priv.toString(16,2):this.priv},a.prototype._importPrivate=function(e,t){this.priv=new o(e,t||16),this.priv=this.priv.umod(this.ec.curve.n)},a.prototype._importPublic=function(e,t){if(e.x||e.y)return"mont"===this.ec.curve.type?r(e.x,"Need x coordinate"):"short"!==this.ec.curve.type&&"edwards"!==this.ec.curve.type||r(e.x&&e.y,"Need both x and y coordinate"),void(this.pub=this.ec.curve.point(e.x,e.y));this.pub=this.ec.curve.decodePoint(e,t)},a.prototype.derive=function(e){return e.mul(this.priv).getX()},a.prototype.sign=function(e,t,n){return this.ec.sign(e,this,t,n)},a.prototype.verify=function(e,t){return this.ec.verify(e,t,this)},a.prototype.inspect=function(){return"<Key priv: "+(this.priv&&this.priv.toString(16,2))+" pub: "+(this.pub&&this.pub.inspect())+" >"}},function(e,t,n){"use strict";var o=n(48),r=n(73).utils,a=r.assert;function i(e,t){if(e instanceof i)return e;this._importDER(e,t)||(a(e.r&&e.s,"Signature without r or s"),this.r=new o(e.r,16),this.s=new o(e.s,16),void 0===e.recoveryParam?this.recoveryParam=null:this.recoveryParam=e.recoveryParam)}function p(){this.place=0}function s(e,t){var n=e[t.place++];if(!(128&n))return n;for(var o=15&n,r=0,a=0,i=t.place;a<o;a++,i++)r<<=8,r|=e[i];return t.place=i,r}function c(e){for(var t=0,n=e.length-1;!e[t]&&!(128&e[t+1])&&t<n;)t++;return 0===t?e:e.slice(t)}function b(e,t){if(t<128)e.push(t);else{var n=1+(Math.log(t)/Math.LN2>>>3);for(e.push(128|n);--n;)e.push(t>>>(n<<3)&255);e.push(t)}}e.exports=i,i.prototype._importDER=function(e,t){e=r.toArray(e,t);var n=new p;if(48!==e[n.place++])return!1;if(s(e,n)+n.place!==e.length)return!1;if(2!==e[n.place++])return!1;var a=s(e,n),i=e.slice(n.place,a+n.place);if(n.place+=a,2!==e[n.place++])return!1;var c=s(e,n);if(e.length!==c+n.place)return!1;var b=e.slice(n.place,c+n.place);return 0===i[0]&&128&i[1]&&(i=i.slice(1)),0===b[0]&&128&b[1]&&(b=b.slice(1)),this.r=new o(i),this.s=new o(b),this.recoveryParam=null,!0},i.prototype.toDER=function(e){var t=this.r.toArray(),n=this.s.toArray();for(128&t[0]&&(t=[0].concat(t)),128&n[0]&&(n=[0].concat(n)),t=c(t),n=c(n);!(n[0]||128&n[1]);)n=n.slice(1);var o=[2];b(o,t.length),(o=o.concat(t)).push(2),b(o,n.length);var a=o.concat(n),i=[48];return b(i,a.length),i=i.concat(a),r.encode(i,e)}},function(e,t,n){"use strict";var o=n(648),r=n(73),a=r.utils,i=a.assert,p=a.parseBytes,s=n(844),c=n(845);function b(e){if(i("ed25519"===e,"only tested with ed25519 so far"),!(this instanceof b))return new b(e);e=r.curves[e].curve,this.curve=e,this.g=e.g,this.g.precompute(e.n.bitLength()+1),this.pointClass=e.point().constructor,this.encodingLength=Math.ceil(e.n.bitLength()/8),this.hash=o.sha512}e.exports=b,b.prototype.sign=function(e,t){e=p(e);var n=this.keyFromSecret(t),o=this.hashInt(n.messagePrefix(),e),r=this.g.mul(o),a=this.encodePoint(r),i=this.hashInt(a,n.pubBytes(),e).mul(n.priv()),s=o.add(i).umod(this.curve.n);return this.makeSignature({R:r,S:s,Rencoded:a})},b.prototype.verify=function(e,t,n){e=p(e),t=this.makeSignature(t);var o=this.keyFromPublic(n),r=this.hashInt(t.Rencoded(),o.pubBytes(),e),a=this.g.mul(t.S());return t.R().add(o.pub().mul(r)).eq(a)},b.prototype.hashInt=function(){for(var e=this.hash(),t=0;t<arguments.length;t++)e.update(arguments[t]);return a.intFromLE(e.digest()).umod(this.curve.n)},b.prototype.keyFromPublic=function(e){return s.fromPublic(this,e)},b.prototype.keyFromSecret=function(e){return s.fromSecret(this,e)},b.prototype.makeSignature=function(e){return e instanceof c?e:new c(this,e)},b.prototype.encodePoint=function(e){var t=e.getY().toArray("le",this.encodingLength);return t[this.encodingLength-1]|=e.getX().isOdd()?128:0,t},b.prototype.decodePoint=function(e){var t=(e=a.parseBytes(e)).length-1,n=e.slice(0,t).concat(-129&e[t]),o=0!=(128&e[t]),r=a.intFromLE(n);return this.curve.pointFromY(r,o)},b.prototype.encodeInt=function(e){return e.toArray("le",this.encodingLength)},b.prototype.decodeInt=function(e){return a.intFromLE(e)},b.prototype.isPoint=function(e){return e instanceof this.pointClass}},function(e,t,n){"use strict";var o=n(73).utils,r=o.assert,a=o.parseBytes,i=o.cachedProperty;function p(e,t){this.eddsa=e,this._secret=a(t.secret),e.isPoint(t.pub)?this._pub=t.pub:this._pubBytes=a(t.pub)}p.fromPublic=function(e,t){return t instanceof p?t:new p(e,{pub:t})},p.fromSecret=function(e,t){return t instanceof p?t:new p(e,{secret:t})},p.prototype.secret=function(){return this._secret},i(p,"pubBytes",function(){return this.eddsa.encodePoint(this.pub())}),i(p,"pub",function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())}),i(p,"privBytes",function(){var e=this.eddsa,t=this.hash(),n=e.encodingLength-1,o=t.slice(0,e.encodingLength);return o[0]&=248,o[n]&=127,o[n]|=64,o}),i(p,"priv",function(){return this.eddsa.decodeInt(this.privBytes())}),i(p,"hash",function(){return this.eddsa.hash().update(this.secret()).digest()}),i(p,"messagePrefix",function(){return this.hash().slice(this.eddsa.encodingLength)}),p.prototype.sign=function(e){return r(this._secret,"KeyPair can only verify"),this.eddsa.sign(e,this)},p.prototype.verify=function(e,t){return this.eddsa.verify(e,t,this)},p.prototype.getSecret=function(e){return r(this._secret,"KeyPair is public only"),o.encode(this.secret(),e)},p.prototype.getPublic=function(e){return o.encode(this.pubBytes(),e)},e.exports=p},function(e,t,n){"use strict";var o=n(48),r=n(73).utils,a=r.assert,i=r.cachedProperty,p=r.parseBytes;function s(e,t){this.eddsa=e,"object"!=typeof t&&(t=p(t)),Array.isArray(t)&&(t={R:t.slice(0,e.encodingLength),S:t.slice(e.encodingLength)}),a(t.R&&t.S,"Signature without R or S"),e.isPoint(t.R)&&(this._R=t.R),t.S instanceof o&&(this._S=t.S),this._Rencoded=Array.isArray(t.R)?t.R:t.Rencoded,this._Sencoded=Array.isArray(t.S)?t.S:t.Sencoded}i(s,"S",function(){return this.eddsa.decodeInt(this.Sencoded())}),i(s,"R",function(){return this.eddsa.decodePoint(this.Rencoded())}),i(s,"Rencoded",function(){return this.eddsa.encodePoint(this.R())}),i(s,"Sencoded",function(){return this.eddsa.encodeInt(this.S())}),s.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},s.prototype.toHex=function(){return r.encode(this.toBytes(),"hex").toUpperCase()},e.exports=s},function(e,t,n){"use strict";var o=n(390);t.certificate=n(857);var r=o.define("RSAPrivateKey",function(){this.seq().obj(this.key("version").int(),this.key("modulus").int(),this.key("publicExponent").int(),this.key("privateExponent").int(),this.key("prime1").int(),this.key("prime2").int(),this.key("exponent1").int(),this.key("exponent2").int(),this.key("coefficient").int())});t.RSAPrivateKey=r;var a=o.define("RSAPublicKey",function(){this.seq().obj(this.key("modulus").int(),this.key("publicExponent").int())});t.RSAPublicKey=a;var i=o.define("SubjectPublicKeyInfo",function(){this.seq().obj(this.key("algorithm").use(p),this.key("subjectPublicKey").bitstr())});t.PublicKey=i;var p=o.define("AlgorithmIdentifier",function(){this.seq().obj(this.key("algorithm").objid(),this.key("none").null_().optional(),this.key("curve").objid().optional(),this.key("params").seq().obj(this.key("p").int(),this.key("q").int(),this.key("g").int()).optional())}),s=o.define("PrivateKeyInfo",function(){this.seq().obj(this.key("version").int(),this.key("algorithm").use(p),this.key("subjectPrivateKey").octstr())});t.PrivateKey=s;var c=o.define("EncryptedPrivateKeyInfo",function(){this.seq().obj(this.key("algorithm").seq().obj(this.key("id").objid(),this.key("decrypt").seq().obj(this.key("kde").seq().obj(this.key("id").objid(),this.key("kdeparams").seq().obj(this.key("salt").octstr(),this.key("iters").int())),this.key("cipher").seq().obj(this.key("algo").objid(),this.key("iv").octstr()))),this.key("subjectPrivateKey").octstr())});t.EncryptedPrivateKey=c;var b=o.define("DSAPrivateKey",function(){this.seq().obj(this.key("version").int(),this.key("p").int(),this.key("q").int(),this.key("g").int(),this.key("pub_key").int(),this.key("priv_key").int())});t.DSAPrivateKey=b,t.DSAparam=o.define("DSAparam",function(){this.int()});var M=o.define("ECPrivateKey",function(){this.seq().obj(this.key("version").int(),this.key("privateKey").octstr(),this.key("parameters").optional().explicit(0).use(l),this.key("publicKey").optional().explicit(1).bitstr())});t.ECPrivateKey=M;var l=o.define("ECParameters",function(){this.choice({namedCurve:this.objid()})});t.signature=o.define("signature",function(){this.seq().obj(this.key("r").int(),this.key("s").int())})},function(e,t,n){var o=n(390),r=n(19);function a(e,t){this.name=e,this.body=t,this.decoders={},this.encoders={}}t.define=function(e,t){return new a(e,t)},a.prototype._createNamed=function(e){var t;try{t=n(848).runInThisContext("(function "+this.name+"(entity) {\n this._initNamed(entity);\n})")}catch(e){t=function(e){this._initNamed(e)}}return r(t,e),t.prototype._initNamed=function(t){e.call(this,t)},new t(this)},a.prototype._getDecoder=function(e){return e=e||"der",this.decoders.hasOwnProperty(e)||(this.decoders[e]=this._createNamed(o.decoders[e])),this.decoders[e]},a.prototype.decode=function(e,t,n){return this._getDecoder(t).decode(e,n)},a.prototype._getEncoder=function(e){return e=e||"der",this.encoders.hasOwnProperty(e)||(this.encoders[e]=this._createNamed(o.encoders[e])),this.encoders[e]},a.prototype.encode=function(e,t,n){return this._getEncoder(t).encode(e,n)}},function(module,exports,__webpack_require__){var indexOf=__webpack_require__(849),Object_keys=function(e){if(Object.keys)return Object.keys(e);var t=[];for(var n in e)t.push(n);return t},forEach=function(e,t){if(e.forEach)return e.forEach(t);for(var n=0;n<e.length;n++)t(e[n],n,e)},defineProp=function(){try{return Object.defineProperty({},"_",{}),function(e,t,n){Object.defineProperty(e,t,{writable:!0,enumerable:!1,configurable:!0,value:n})}}catch(e){return function(e,t,n){e[t]=n}}}(),globals=["Array","Boolean","Date","Error","EvalError","Function","Infinity","JSON","Math","NaN","Number","Object","RangeError","ReferenceError","RegExp","String","SyntaxError","TypeError","URIError","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","eval","isFinite","isNaN","parseFloat","parseInt","undefined","unescape"];function Context(){}Context.prototype={};var Script=exports.Script=function(e){if(!(this instanceof Script))return new Script(e);this.code=e};Script.prototype.runInContext=function(e){if(!(e instanceof Context))throw new TypeError("needs a 'context' argument.");var t=document.createElement("iframe");t.style||(t.style={}),t.style.display="none",document.body.appendChild(t);var n=t.contentWindow,o=n.eval,r=n.execScript;!o&&r&&(r.call(n,"null"),o=n.eval),forEach(Object_keys(e),function(t){n[t]=e[t]}),forEach(globals,function(t){e[t]&&(n[t]=e[t])});var a=Object_keys(n),i=o.call(n,this.code);return forEach(Object_keys(n),function(t){(t in e||-1===indexOf(a,t))&&(e[t]=n[t])}),forEach(globals,function(t){t in e||defineProp(e,t,n[t])}),document.body.removeChild(t),i},Script.prototype.runInThisContext=function(){return eval(this.code)},Script.prototype.runInNewContext=function(e){var t=Script.createContext(e),n=this.runInContext(t);return forEach(Object_keys(t),function(n){e[n]=t[n]}),n},forEach(Object_keys(Script.prototype),function(e){exports[e]=Script[e]=function(t){var n=Script(t);return n[e].apply(n,[].slice.call(arguments,1))}}),exports.createScript=function(e){return exports.Script(e)},exports.createContext=Script.createContext=function(e){var t=new Context;return"object"==typeof e&&forEach(Object_keys(e),function(n){t[n]=e[n]}),t}},function(e,t){var n=[].indexOf;e.exports=function(e,t){if(n)return e.indexOf(t);for(var o=0;o<e.length;++o)if(e[o]===t)return o;return-1}},function(e,t,n){var o=n(19);function r(e){this._reporterState={obj:null,path:[],options:e||{},errors:[]}}function a(e,t){this.path=e,this.rethrow(t)}t.Reporter=r,r.prototype.isError=function(e){return e instanceof a},r.prototype.save=function(){var e=this._reporterState;return{obj:e.obj,pathLen:e.path.length}},r.prototype.restore=function(e){var t=this._reporterState;t.obj=e.obj,t.path=t.path.slice(0,e.pathLen)},r.prototype.enterKey=function(e){return this._reporterState.path.push(e)},r.prototype.exitKey=function(e){var t=this._reporterState;t.path=t.path.slice(0,e-1)},r.prototype.leaveKey=function(e,t,n){var o=this._reporterState;this.exitKey(e),null!==o.obj&&(o.obj[t]=n)},r.prototype.path=function(){return this._reporterState.path.join("/")},r.prototype.enterObject=function(){var e=this._reporterState,t=e.obj;return e.obj={},t},r.prototype.leaveObject=function(e){var t=this._reporterState,n=t.obj;return t.obj=e,n},r.prototype.error=function(e){var t,n=this._reporterState,o=e instanceof a;if(t=o?e:new a(n.path.map(function(e){return"["+JSON.stringify(e)+"]"}).join(""),e.message||e,e.stack),!n.options.partial)throw t;return o||n.errors.push(t),t},r.prototype.wrapResult=function(e){var t=this._reporterState;return t.options.partial?{result:this.isError(e)?null:e,errors:t.errors}:e},o(a,Error),a.prototype.rethrow=function(e){if(this.message=e+" at: "+(this.path||"(shallow)"),Error.captureStackTrace&&Error.captureStackTrace(this,a),!this.stack)try{throw new Error(this.message)}catch(e){this.stack=e.stack}return this}},function(e,t,n){var o=n(391).Reporter,r=n(391).EncoderBuffer,a=n(391).DecoderBuffer,i=n(66),p=["seq","seqof","set","setof","objid","bool","gentime","utctime","null_","enum","int","objDesc","bitstr","bmpstr","charstr","genstr","graphstr","ia5str","iso646str","numstr","octstr","printstr","t61str","unistr","utf8str","videostr"],s=["key","obj","use","optional","explicit","implicit","def","choice","any","contains"].concat(p);function c(e,t){var n={};this._baseState=n,n.enc=e,n.parent=t||null,n.children=null,n.tag=null,n.args=null,n.reverseArgs=null,n.choice=null,n.optional=!1,n.any=!1,n.obj=!1,n.use=null,n.useDecoder=null,n.key=null,n.default=null,n.explicit=null,n.implicit=null,n.contains=null,n.parent||(n.children=[],this._wrap())}e.exports=c;var b=["enc","parent","children","tag","args","reverseArgs","choice","optional","any","obj","use","alteredUse","key","default","explicit","implicit","contains"];c.prototype.clone=function(){var e=this._baseState,t={};b.forEach(function(n){t[n]=e[n]});var n=new this.constructor(t.parent);return n._baseState=t,n},c.prototype._wrap=function(){var e=this._baseState;s.forEach(function(t){this[t]=function(){var n=new this.constructor(this);return e.children.push(n),n[t].apply(n,arguments)}},this)},c.prototype._init=function(e){var t=this._baseState;i(null===t.parent),e.call(this),t.children=t.children.filter(function(e){return e._baseState.parent===this},this),i.equal(t.children.length,1,"Root node can have only one child")},c.prototype._useArgs=function(e){var t=this._baseState,n=e.filter(function(e){return e instanceof this.constructor},this);e=e.filter(function(e){return!(e instanceof this.constructor)},this),0!==n.length&&(i(null===t.children),t.children=n,n.forEach(function(e){e._baseState.parent=this},this)),0!==e.length&&(i(null===t.args),t.args=e,t.reverseArgs=e.map(function(e){if("object"!=typeof e||e.constructor!==Object)return e;var t={};return Object.keys(e).forEach(function(n){n==(0|n)&&(n|=0);var o=e[n];t[o]=n}),t}))},["_peekTag","_decodeTag","_use","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeInt","_decodeBool","_decodeList","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool"].forEach(function(e){c.prototype[e]=function(){var t=this._baseState;throw new Error(e+" not implemented for encoding: "+t.enc)}}),p.forEach(function(e){c.prototype[e]=function(){var t=this._baseState,n=Array.prototype.slice.call(arguments);return i(null===t.tag),t.tag=e,this._useArgs(n),this}}),c.prototype.use=function(e){i(e);var t=this._baseState;return i(null===t.use),t.use=e,this},c.prototype.optional=function(){return this._baseState.optional=!0,this},c.prototype.def=function(e){var t=this._baseState;return i(null===t.default),t.default=e,t.optional=!0,this},c.prototype.explicit=function(e){var t=this._baseState;return i(null===t.explicit&&null===t.implicit),t.explicit=e,this},c.prototype.implicit=function(e){var t=this._baseState;return i(null===t.explicit&&null===t.implicit),t.implicit=e,this},c.prototype.obj=function(){var e=this._baseState,t=Array.prototype.slice.call(arguments);return e.obj=!0,0!==t.length&&this._useArgs(t),this},c.prototype.key=function(e){var t=this._baseState;return i(null===t.key),t.key=e,this},c.prototype.any=function(){return this._baseState.any=!0,this},c.prototype.choice=function(e){var t=this._baseState;return i(null===t.choice),t.choice=e,this._useArgs(Object.keys(e).map(function(t){return e[t]})),this},c.prototype.contains=function(e){var t=this._baseState;return i(null===t.use),t.contains=e,this},c.prototype._decode=function(e,t){var n=this._baseState;if(null===n.parent)return e.wrapResult(n.children[0]._decode(e,t));var o,r=n.default,i=!0,p=null;if(null!==n.key&&(p=e.enterKey(n.key)),n.optional){var s=null;if(null!==n.explicit?s=n.explicit:null!==n.implicit?s=n.implicit:null!==n.tag&&(s=n.tag),null!==s||n.any){if(i=this._peekTag(e,s,n.any),e.isError(i))return i}else{var c=e.save();try{null===n.choice?this._decodeGeneric(n.tag,e,t):this._decodeChoice(e,t),i=!0}catch(e){i=!1}e.restore(c)}}if(n.obj&&i&&(o=e.enterObject()),i){if(null!==n.explicit){var b=this._decodeTag(e,n.explicit);if(e.isError(b))return b;e=b}var M=e.offset;if(null===n.use&&null===n.choice){n.any&&(c=e.save());var l=this._decodeTag(e,null!==n.implicit?n.implicit:n.tag,n.any);if(e.isError(l))return l;n.any?r=e.raw(c):e=l}if(t&&t.track&&null!==n.tag&&t.track(e.path(),M,e.length,"tagged"),t&&t.track&&null!==n.tag&&t.track(e.path(),e.offset,e.length,"content"),r=n.any?r:null===n.choice?this._decodeGeneric(n.tag,e,t):this._decodeChoice(e,t),e.isError(r))return r;if(n.any||null!==n.choice||null===n.children||n.children.forEach(function(n){n._decode(e,t)}),n.contains&&("octstr"===n.tag||"bitstr"===n.tag)){var u=new a(r);r=this._getUse(n.contains,e._reporterState.obj)._decode(u,t)}}return n.obj&&i&&(r=e.leaveObject(o)),null===n.key||null===r&&!0!==i?null!==p&&e.exitKey(p):e.leaveKey(p,n.key,r),r},c.prototype._decodeGeneric=function(e,t,n){var o=this._baseState;return"seq"===e||"set"===e?null:"seqof"===e||"setof"===e?this._decodeList(t,e,o.args[0],n):/str$/.test(e)?this._decodeStr(t,e,n):"objid"===e&&o.args?this._decodeObjid(t,o.args[0],o.args[1],n):"objid"===e?this._decodeObjid(t,null,null,n):"gentime"===e||"utctime"===e?this._decodeTime(t,e,n):"null_"===e?this._decodeNull(t,n):"bool"===e?this._decodeBool(t,n):"objDesc"===e?this._decodeStr(t,e,n):"int"===e||"enum"===e?this._decodeInt(t,o.args&&o.args[0],n):null!==o.use?this._getUse(o.use,t._reporterState.obj)._decode(t,n):t.error("unknown tag: "+e)},c.prototype._getUse=function(e,t){var n=this._baseState;return n.useDecoder=this._use(e,t),i(null===n.useDecoder._baseState.parent),n.useDecoder=n.useDecoder._baseState.children[0],n.implicit!==n.useDecoder._baseState.implicit&&(n.useDecoder=n.useDecoder.clone(),n.useDecoder._baseState.implicit=n.implicit),n.useDecoder},c.prototype._decodeChoice=function(e,t){var n=this._baseState,o=null,r=!1;return Object.keys(n.choice).some(function(a){var i=e.save(),p=n.choice[a];try{var s=p._decode(e,t);if(e.isError(s))return!1;o={type:a,value:s},r=!0}catch(t){return e.restore(i),!1}return!0},this),r?o:e.error("Choice not matched")},c.prototype._createEncoderBuffer=function(e){return new r(e,this.reporter)},c.prototype._encode=function(e,t,n){var o=this._baseState;if(null===o.default||o.default!==e){var r=this._encodeValue(e,t,n);if(void 0!==r&&!this._skipDefault(r,t,n))return r}},c.prototype._encodeValue=function(e,t,n){var r=this._baseState;if(null===r.parent)return r.children[0]._encode(e,t||new o);var a=null;if(this.reporter=t,r.optional&&void 0===e){if(null===r.default)return;e=r.default}var i=null,p=!1;if(r.any)a=this._createEncoderBuffer(e);else if(r.choice)a=this._encodeChoice(e,t);else if(r.contains)i=this._getUse(r.contains,n)._encode(e,t),p=!0;else if(r.children)i=r.children.map(function(n){if("null_"===n._baseState.tag)return n._encode(null,t,e);if(null===n._baseState.key)return t.error("Child should have a key");var o=t.enterKey(n._baseState.key);if("object"!=typeof e)return t.error("Child expected, but input is not object");var r=n._encode(e[n._baseState.key],t,e);return t.leaveKey(o),r},this).filter(function(e){return e}),i=this._createEncoderBuffer(i);else if("seqof"===r.tag||"setof"===r.tag){if(!r.args||1!==r.args.length)return t.error("Too many args for : "+r.tag);if(!Array.isArray(e))return t.error("seqof/setof, but data is not Array");var s=this.clone();s._baseState.implicit=null,i=this._createEncoderBuffer(e.map(function(n){var o=this._baseState;return this._getUse(o.args[0],e)._encode(n,t)},s))}else null!==r.use?a=this._getUse(r.use,n)._encode(e,t):(i=this._encodePrimitive(r.tag,e),p=!0);if(!r.any&&null===r.choice){var c=null!==r.implicit?r.implicit:r.tag,b=null===r.implicit?"universal":"context";null===c?null===r.use&&t.error("Tag could be omitted only for .use()"):null===r.use&&(a=this._encodeComposite(c,p,b,i))}return null!==r.explicit&&(a=this._encodeComposite(r.explicit,!1,"context",a)),a},c.prototype._encodeChoice=function(e,t){var n=this._baseState,o=n.choice[e.type];return o||i(!1,e.type+" not found in "+JSON.stringify(Object.keys(n.choice))),o._encode(e.value,t)},c.prototype._encodePrimitive=function(e,t){var n=this._baseState;if(/str$/.test(e))return this._encodeStr(t,e);if("objid"===e&&n.args)return this._encodeObjid(t,n.reverseArgs[0],n.args[1]);if("objid"===e)return this._encodeObjid(t,null,null);if("gentime"===e||"utctime"===e)return this._encodeTime(t,e);if("null_"===e)return this._encodeNull();if("int"===e||"enum"===e)return this._encodeInt(t,n.args&&n.reverseArgs[0]);if("bool"===e)return this._encodeBool(t);if("objDesc"===e)return this._encodeStr(t,e);throw new Error("Unsupported tag: "+e)},c.prototype._isNumstr=function(e){return/^[0-9 ]*$/.test(e)},c.prototype._isPrintstr=function(e){return/^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(e)}},function(e,t,n){var o=n(700);t.tagClass={0:"universal",1:"application",2:"context",3:"private"},t.tagClassByName=o._reverse(t.tagClass),t.tag={0:"end",1:"bool",2:"int",3:"bitstr",4:"octstr",5:"null_",6:"objid",7:"objDesc",8:"external",9:"real",10:"enum",11:"embed",12:"utf8str",13:"relativeOid",16:"seq",17:"set",18:"numstr",19:"printstr",20:"t61str",21:"videostr",22:"ia5str",23:"utctime",24:"gentime",25:"graphstr",26:"iso646str",27:"genstr",28:"unistr",29:"charstr",30:"bmpstr"},t.tagByName=o._reverse(t.tag)},function(e,t,n){var o=t;o.der=n(701),o.pem=n(854)},function(e,t,n){var o=n(19),r=n(57).Buffer,a=n(701);function i(e){a.call(this,e),this.enc="pem"}o(i,a),e.exports=i,i.prototype.decode=function(e,t){for(var n=e.toString().split(/[\r\n]+/g),o=t.label.toUpperCase(),i=/^-----(BEGIN|END) ([^-]+)-----$/,p=-1,s=-1,c=0;c<n.length;c++){var b=n[c].match(i);if(null!==b&&b[2]===o){if(-1!==p){if("END"!==b[1])break;s=c;break}if("BEGIN"!==b[1])break;p=c}}if(-1===p||-1===s)throw new Error("PEM section not found for: "+o);var M=n.slice(p+1,s).join("");M.replace(/[^a-z0-9\+\/=]+/gi,"");var l=new r(M,"base64");return a.prototype.decode.call(this,l,t)}},function(e,t,n){var o=t;o.der=n(702),o.pem=n(856)},function(e,t,n){var o=n(19),r=n(702);function a(e){r.call(this,e),this.enc="pem"}o(a,r),e.exports=a,a.prototype.encode=function(e,t){for(var n=r.prototype.encode.call(this,e).toString("base64"),o=["-----BEGIN "+t.label+"-----"],a=0;a<n.length;a+=64)o.push(n.slice(a,a+64));return o.push("-----END "+t.label+"-----"),o.join("\n")}},function(e,t,n){"use strict";var o=n(390),r=o.define("Time",function(){this.choice({utcTime:this.utctime(),generalTime:this.gentime()})}),a=o.define("AttributeTypeValue",function(){this.seq().obj(this.key("type").objid(),this.key("value").any())}),i=o.define("AlgorithmIdentifier",function(){this.seq().obj(this.key("algorithm").objid(),this.key("parameters").optional())}),p=o.define("SubjectPublicKeyInfo",function(){this.seq().obj(this.key("algorithm").use(i),this.key("subjectPublicKey").bitstr())}),s=o.define("RelativeDistinguishedName",function(){this.setof(a)}),c=o.define("RDNSequence",function(){this.seqof(s)}),b=o.define("Name",function(){this.choice({rdnSequence:this.use(c)})}),M=o.define("Validity",function(){this.seq().obj(this.key("notBefore").use(r),this.key("notAfter").use(r))}),l=o.define("Extension",function(){this.seq().obj(this.key("extnID").objid(),this.key("critical").bool().def(!1),this.key("extnValue").octstr())}),u=o.define("TBSCertificate",function(){this.seq().obj(this.key("version").explicit(0).int(),this.key("serialNumber").int(),this.key("signature").use(i),this.key("issuer").use(b),this.key("validity").use(M),this.key("subject").use(b),this.key("subjectPublicKeyInfo").use(p),this.key("issuerUniqueID").implicit(1).bitstr().optional(),this.key("subjectUniqueID").implicit(2).bitstr().optional(),this.key("extensions").explicit(3).seqof(l).optional())}),d=o.define("X509Certificate",function(){this.seq().obj(this.key("tbsCertificate").use(u),this.key("signatureAlgorithm").use(i),this.key("signatureValue").bitstr())});e.exports=d},function(e){e.exports={"2.16.840.1.101.3.4.1.1":"aes-128-ecb","2.16.840.1.101.3.4.1.2":"aes-128-cbc","2.16.840.1.101.3.4.1.3":"aes-128-ofb","2.16.840.1.101.3.4.1.4":"aes-128-cfb","2.16.840.1.101.3.4.1.21":"aes-192-ecb","2.16.840.1.101.3.4.1.22":"aes-192-cbc","2.16.840.1.101.3.4.1.23":"aes-192-ofb","2.16.840.1.101.3.4.1.24":"aes-192-cfb","2.16.840.1.101.3.4.1.41":"aes-256-ecb","2.16.840.1.101.3.4.1.42":"aes-256-cbc","2.16.840.1.101.3.4.1.43":"aes-256-ofb","2.16.840.1.101.3.4.1.44":"aes-256-cfb"}},function(e,t,n){(function(t){var o=/Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r\+\/\=]+)[\n\r]+/m,r=/^-----BEGIN ((?:.* KEY)|CERTIFICATE)-----/m,a=/^-----BEGIN ((?:.* KEY)|CERTIFICATE)-----([0-9A-z\n\r\+\/\=]+)-----END \1-----$/m,i=n(422),p=n(645);e.exports=function(e,n){var s,c=e.toString(),b=c.match(o);if(b){var M="aes"+b[1],l=new t(b[2],"hex"),u=new t(b[3].replace(/[\r\n]/g,""),"base64"),d=i(n,l.slice(0,8),parseInt(b[1],10)).key,z=[],f=p.createDecipheriv(M,d,l);z.push(f.update(u)),z.push(f.final()),s=t.concat(z)}else{var O=c.match(a);s=new t(O[2].replace(/[\r\n]/g,""),"base64")}return{tag:c.match(r)[1],data:s}}}).call(this,n(57).Buffer)},function(e,t,n){(function(t){var o=n(48),r=n(73).ec,a=n(424),i=n(703);function p(e,t){if(e.cmpn(0)<=0)throw new Error("invalid sig");if(e.cmp(t)>=t)throw new Error("invalid sig")}e.exports=function(e,n,s,c,b){var M=a(s);if("ec"===M.type){if("ecdsa"!==c&&"ecdsa/rsa"!==c)throw new Error("wrong public key type");return function(e,t,n){var o=i[n.data.algorithm.curve.join(".")];if(!o)throw new Error("unknown curve "+n.data.algorithm.curve.join("."));var a=new r(o),p=n.data.subjectPrivateKey.data;return a.verify(t,e,p)}(e,n,M)}if("dsa"===M.type){if("dsa"!==c)throw new Error("wrong public key type");return function(e,t,n){var r=n.data.p,i=n.data.q,s=n.data.g,c=n.data.pub_key,b=a.signature.decode(e,"der"),M=b.s,l=b.r;p(M,i),p(l,i);var u=o.mont(r),d=M.invm(i);return 0===s.toRed(u).redPow(new o(t).mul(d).mod(i)).fromRed().mul(c.toRed(u).redPow(l.mul(d).mod(i)).fromRed()).mod(r).mod(i).cmp(l)}(e,n,M)}if("rsa"!==c&&"ecdsa/rsa"!==c)throw new Error("wrong public key type");n=t.concat([b,n]);for(var l=M.modulus.byteLength(),u=[1],d=0;n.length+u.length+2<l;)u.push(255),d++;u.push(0);for(var z=-1;++z<n.length;)u.push(n[z]);u=new t(u);var f=o.mont(M.modulus);e=(e=new o(e).toRed(f)).redPow(new o(M.publicExponent)),e=new t(e.fromRed().toArray());var O=d<8?1:0;for(l=Math.min(e.length,u.length),e.length!==u.length&&(O=1),z=-1;++z<l;)O|=e[z]^u[z];return 0===O}}).call(this,n(57).Buffer)},function(e,t,n){(function(t){var o=n(73),r=n(48);e.exports=function(e){return new i(e)};var a={secp256k1:{name:"secp256k1",byteLength:32},secp224r1:{name:"p224",byteLength:28},prime256v1:{name:"p256",byteLength:32},prime192v1:{name:"p192",byteLength:24},ed25519:{name:"ed25519",byteLength:32},secp384r1:{name:"p384",byteLength:48},secp521r1:{name:"p521",byteLength:66}};function i(e){this.curveType=a[e],this.curveType||(this.curveType={name:e}),this.curve=new o.ec(this.curveType.name),this.keys=void 0}function p(e,n,o){Array.isArray(e)||(e=e.toArray());var r=new t(e);if(o&&r.length<o){var a=new t(o-r.length);a.fill(0),r=t.concat([a,r])}return n?r.toString(n):r}a.p224=a.secp224r1,a.p256=a.secp256r1=a.prime256v1,a.p192=a.secp192r1=a.prime192v1,a.p384=a.secp384r1,a.p521=a.secp521r1,i.prototype.generateKeys=function(e,t){return this.keys=this.curve.genKeyPair(),this.getPublicKey(e,t)},i.prototype.computeSecret=function(e,n,o){return n=n||"utf8",t.isBuffer(e)||(e=new t(e,n)),p(this.curve.keyFromPublic(e).getPublic().mul(this.keys.getPrivate()).getX(),o,this.curveType.byteLength)},i.prototype.getPublicKey=function(e,t){var n=this.keys.getPublic("compressed"===t,!0);return"hybrid"===t&&(n[n.length-1]%2?n[0]=7:n[0]=6),p(n,e)},i.prototype.getPrivateKey=function(e){return p(this.keys.getPrivate(),e)},i.prototype.setPublicKey=function(e,n){return n=n||"utf8",t.isBuffer(e)||(e=new t(e,n)),this.keys._importPublic(e),this},i.prototype.setPrivateKey=function(e,n){n=n||"utf8",t.isBuffer(e)||(e=new t(e,n));var o=new r(e);return o=o.toString(16),this.keys=this.curve.genKeyPair(),this.keys._importPrivate(o),this}}).call(this,n(57).Buffer)},function(e,t,n){t.publicEncrypt=n(863),t.privateDecrypt=n(864),t.privateEncrypt=function(e,n){return t.publicEncrypt(e,n,!0)},t.publicDecrypt=function(e,n){return t.privateDecrypt(e,n,!0)}},function(e,t,n){var o=n(424),r=n(184),a=n(387),i=n(704),p=n(705),s=n(48),c=n(706),b=n(647),M=n(25).Buffer;e.exports=function(e,t,n){var l;l=e.padding?e.padding:n?1:4;var u,d=o(e);if(4===l)u=function(e,t){var n=e.modulus.byteLength(),o=t.length,c=a("sha1").update(M.alloc(0)).digest(),b=c.length,l=2*b;if(o>n-l-2)throw new Error("message too long");var u=M.alloc(n-o-l-2),d=n-b-1,z=r(b),f=p(M.concat([c,u,M.alloc(1,1),t],d),i(z,d)),O=p(z,i(f,b));return new s(M.concat([M.alloc(1),O,f],n))}(d,t);else if(1===l)u=function(e,t,n){var o,a=t.length,i=e.modulus.byteLength();if(a>i-11)throw new Error("message too long");return o=n?M.alloc(i-a-3,255):function(e){for(var t,n=M.allocUnsafe(e),o=0,a=r(2*e),i=0;o<e;)i===a.length&&(a=r(2*e),i=0),(t=a[i++])&&(n[o++]=t);return n}(i-a-3),new s(M.concat([M.from([0,n?1:2]),o,M.alloc(1),t],i))}(d,t,n);else{if(3!==l)throw new Error("unknown padding");if((u=new s(t)).cmp(d.modulus)>=0)throw new Error("data too long for modulus")}return n?b(u,d):c(u,d)}},function(e,t,n){var o=n(424),r=n(704),a=n(705),i=n(48),p=n(647),s=n(387),c=n(706),b=n(25).Buffer;e.exports=function(e,t,n){var M;M=e.padding?e.padding:n?1:4;var l,u=o(e),d=u.modulus.byteLength();if(t.length>d||new i(t).cmp(u.modulus)>=0)throw new Error("decryption error");l=n?c(new i(t),u):p(t,u);var z=b.alloc(d-l.length);if(l=b.concat([z,l],d),4===M)return function(e,t){var n=e.modulus.byteLength(),o=s("sha1").update(b.alloc(0)).digest(),i=o.length;if(0!==t[0])throw new Error("decryption error");var p=t.slice(1,i+1),c=t.slice(i+1),M=a(p,r(c,i)),l=a(c,r(M,n-i-1));if(function(e,t){e=b.from(e),t=b.from(t);var n=0,o=e.length;e.length!==t.length&&(n++,o=Math.min(e.length,t.length));for(var r=-1;++r<o;)n+=e[r]^t[r];return n}(o,l.slice(0,i)))throw new Error("decryption error");for(var u=i;0===l[u];)u++;if(1!==l[u++])throw new Error("decryption error");return l.slice(u)}(u,l);if(1===M)return function(e,t,n){for(var o=t.slice(0,2),r=2,a=0;0!==t[r++];)if(r>=t.length){a++;break}var i=t.slice(2,r-1);if(("0002"!==o.toString("hex")&&!n||"0001"!==o.toString("hex")&&n)&&a++,i.length<8&&a++,a)throw new Error("decryption error");return t.slice(r)}(0,l,n);if(3===M)return l;throw new Error("unknown padding")}},function(e,t,n){"use strict";(function(e,o){function r(){throw new Error("secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11")}var a=n(25),i=n(184),p=a.Buffer,s=a.kMaxLength,c=e.crypto||e.msCrypto,b=Math.pow(2,32)-1;function M(e,t){if("number"!=typeof e||e!=e)throw new TypeError("offset must be a number");if(e>b||e<0)throw new TypeError("offset must be a uint32");if(e>s||e>t)throw new RangeError("offset out of range")}function l(e,t,n){if("number"!=typeof e||e!=e)throw new TypeError("size must be a number");if(e>b||e<0)throw new TypeError("size must be a uint32");if(e+t>n||e>s)throw new RangeError("buffer too small")}function u(e,t,n,r){if(o.browser){var a=e.buffer,p=new Uint8Array(a,t,n);return c.getRandomValues(p),r?void o.nextTick(function(){r(null,e)}):e}if(!r)return i(n).copy(e,t),e;i(n,function(n,o){if(n)return r(n);o.copy(e,t),r(null,e)})}c&&c.getRandomValues||!o.browser?(t.randomFill=function(t,n,o,r){if(!(p.isBuffer(t)||t instanceof e.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');if("function"==typeof n)r=n,n=0,o=t.length;else if("function"==typeof o)r=o,o=t.length-n;else if("function"!=typeof r)throw new TypeError('"cb" argument must be a function');return M(n,t.length),l(o,n,t.length),u(t,n,o,r)},t.randomFillSync=function(t,n,o){if(void 0===n&&(n=0),!(p.isBuffer(t)||t instanceof e.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');return M(n,t.length),void 0===o&&(o=t.length-n),l(o,n,t.length),u(t,n,o)}):(t.randomFill=r,t.randomFillSync=r)}).call(this,n(44),n(71))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=u(n(84)),r=u(n(3)),a=u(n(4)),i=u(n(7)),p=u(n(5)),s=u(n(6)),c=u(n(126)),b=u(n(1)),M=u(n(2)),l=n(9);function u(e){return e&&e.__esModule?e:{default:e}}var d=function(e){function t(){var e,n,i,s;(0,a.default)(this,t);for(var b=arguments.length,u=Array(b),d=0;d<b;d++)u[d]=arguments[d];return n=i=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(u))),i.renderChildren=function(){var e=void 0;e=i.props&&((0,o.default)(i.props).length>1||!i.props.children)?M.default.createElement("div",i.props,i.props.children):i.props.children,i.context.store&&(e=M.default.createElement(l.Provider,{store:i.context.store},e)),c.default.render(e,i.container)},s=n,(0,p.default)(i,s)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"componentDidMount",value:function(){this.container=document.createElement("div"),document.body.appendChild(this.container),this.renderChildren()}},{key:"componentDidUpdate",value:function(){this.renderChildren()}},{key:"componentWillUnmount",value:function(){this.container&&(c.default.unmountComponentAtNode(this.container),document.body.removeChild(this.container),delete this.container)}},{key:"render",value:function(){return null}}]),t}(M.default.Component);d.displayName="RootChild",d.propTypes={children:b.default.node},d.contextTypes={store:b.default.object},t.default=d,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isElement=t.offset=t.suggested=t.unbindWindowListeners=t.bindWindowListeners=t.constrainLeft=void 0;var o=i(n(49)),r=i(n(707)),a=i(n(874));function i(e){return e&&e.__esModule?e:{default:e}}var p=(0,i(n(104)).default)("calypso:popover:util");function s(){var e={};return e.top=window.scrollY,e.left=window.scrollX,e.width=window.innerWidth,e.height=window.innerHeight,e.right=e.left+e.width,e.bottom=e.top+e.height,p("viewport: %o",e),e}var c={top:"bottom",bottom:"top",left:"right",right:"left"},b={top:"right",left:"top",bottom:"left",right:"bottom"},M=s();function l(){M=s()}var u=!1;function d(e,t,n){var o=(0,a.default)(t);if(!o)throw new Error("could not get bounding client rect of Tip element");var r=o.width,i=o.height,p=(0,a.default)(n);if(!p)throw new Error("could not get bounding client rect of `target`");var s,c,b,M,l,u,d,z,f=p.width,O=p.height,A=(s=p,b=(c=document).body||c.getElementsByTagName("body")[0],l=(M=c.documentElement||b.parentNode).clientTop||b.clientTop||0,u=M.clientLeft||b.clientLeft||0,d=window.pageYOffset||M.scrollTop,z=window.pageXOffset||M.scrollLeft,{top:s.top+d-l,left:s.left+z-u});if(!A)throw new Error("could not determine page offset of `target`");var h={};switch(e){case"top":h={top:A.top-i,left:A.left+f/2-r/2};break;case"bottom":h={top:A.top+O,left:A.left+f/2-r/2};break;case"right":h={top:A.top+O/2-i/2,left:A.left+f};break;case"left":h={top:A.top+O/2-i/2,left:A.left-r};break;case"top left":h={top:A.top-i,left:A.left+f/2-r+15};break;case"top right":h={top:A.top-i,left:A.left+f/2-15};break;case"bottom left":h={top:A.top+O,left:A.left+f/2-r+15};break;case"bottom right":h={top:A.top+O,left:A.left+f/2-15};break;case"left top":h={top:A.top+O/2-i,left:A.left-r};break;case"left bottom":h={top:A.top+O/2,left:A.left-r};break;case"right top":h={top:A.top+O/2-i,left:A.left+f};break;case"right bottom":h={top:A.top+O/2,left:A.left+f};break;default:throw new Error('invalid position "'+e+'"')}return h}t.constrainLeft=function(e,t){var n=(0,a.default)(t).width;return e.left=Math.max(0,Math.min(e.left,M.width-n)),e},t.bindWindowListeners=function(){if(u)return p("window events already bound");u=!0,p("bind handlers to `resize` and `scroll` events"),window.addEventListener("resize",l,!0),window.addEventListener("scroll",l,!0)},t.unbindWindowListeners=function(){if(!u)return p("window events are not bound");u=!1,p("unbind handlers to `resize` and `scroll` events"),window.removeEventListener("resize",l,!0),window.removeEventListener("scroll",l,!0)},t.suggested=function(e,t,n){var o=(0,a.default)(n),i=t.clientHeight,p=t.clientWidth,s={top:o.top-i,bottom:M.height-o.bottom-i,left:o.left-p,right:M.width-o.right-p},l=e.split(/\s+/),u=(0,r.default)(l,1)[0],z=(0,r.default)(l,2)[1],f=function(e,t){for(var n=[e,c[e],b[e],c[b[e]]],o=-1/0,r=void 0,a=0,i=n.length;a<i;a++){var p=n[a],s=t[p];if(s>0)return p;s>o&&(o=s,r=e)}return r}(u,s);return z!==f&&z!==c[f]||(z=null),function(e,t,n,o,r,a){for(var i=t?[e+" "+t,e,e+" "+c[t]]:[e,e+" "+b[e],e+" "+c[b[e]]],p=void 0,s=0,l=r*a,u=0,z=i.length;u<z;u++){var f=i[u],O=d(f,n,o),A=O.left+r,h=O.top+a,m=Math.min(O.top<M.top?h-M.top:M.bottom-O.top,a),q=Math.min(O.left<M.left?A-M.left:M.right-O.left,r)*m;if(q===l)return f;q>s&&(s=q,p=f)}return p}(f,z,t,n,p,i)||e},t.offset=d,t.isElement=function(e){try{return e instanceof HTMLElement}catch(t){return"object"===(void 0===e?"undefined":(0,o.default)(e))&&1===e.nodeType&&"object"===(0,o.default)(e.style)&&"object"===(0,o.default)(e.ownerDocument)}}},function(e,t,n){e.exports={default:n(869),__esModule:!0}},function(e,t,n){n(119),n(90),e.exports=n(870)},function(e,t,n){var o=n(156),r=n(31)("iterator"),a=n(81);e.exports=n(18).isIterable=function(e){var t=Object(e);return void 0!==t[r]||"@@iterator"in t||a.hasOwnProperty(o(t))}},function(e,t,n){e.exports={default:n(872),__esModule:!0}},function(e,t,n){n(119),n(90),e.exports=n(873)},function(e,t,n){var o=n(46),r=n(174);e.exports=n(18).getIterator=function(e){var t=r(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return o(t.call(e))}},function(e,t,n){var o=n(875);e.exports=function(e){var t=null,n=o(e);if(3===e.nodeType){var r=n.createRange();r.selectNodeContents(e),e=r}if("function"==typeof e.getBoundingClientRect&&(t=e.getBoundingClientRect(),e.startContainer&&0===t.left&&0===t.top)){var a=n.createElement("span");a.appendChild(n.createTextNode("​")),e.insertNode(a),t=a.getBoundingClientRect();var i=a.parentNode;i.removeChild(a),i.normalize()}return t}},function(e,t){e.exports=function e(t){return o(t)?t:o(t.ownerDocument)?t.ownerDocument:o(t.document)?t.document:t.parentNode?e(t.parentNode):t.commonAncestorContainer?e(t.commonAncestorContainer):t.startContainer?e(t.startContainer):t.anchorNode?e(t.anchorNode):void 0};var n=9;function o(e){return e&&e.nodeType===n}},function(e,t,n){},function(e,t,n){},function(e,t,n){e.exports=n(177)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.connectModuleOptions=function(e){return(0,r.connect)(function(e,t){return{validValues:function(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"string"==typeof(0,a.default)(t,["module","module"])&&(o=t.module.module),(0,p.getModuleOptionValidValues)(e,o,n)},getOptionCurrentValue:function(t,n){return(0,p.getModuleOption)(e,t,n)},getSettingCurrentValue:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return(0,s.getSetting)(e,t,n)},getSiteRoles:function(){return(0,c.getSiteRoles)(e)},isUpdating:function(t){return(0,s.isUpdatingSetting)(e,t)},adminEmailAddress:(0,c.getAdminEmailAddress)(e),currentIp:(0,c.getCurrentIp)(e),siteAdminUrl:(0,c.getSiteAdminUrl)(e),isCurrentUserLinked:(0,b.isCurrentUserLinked)(e)}},function(e){return{updateOptions:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e((0,s.updateSettings)(t,n))},regeneratePostByEmailAddress:function(){var t={progress:(0,i.translate)("Updating Post by Email address…"),success:(0,i.translate)("Regenerated Post by Email address."),error:function(e){return(0,i.translate)("Error regenerating Post by Email address. %(error)s",{args:{error:e}})}};return e((0,s.updateSettings)({post_by_email_address:"regenerate"},t))},setUnsavedSettingsFlag:function(){return e((0,s.setUnsavedSettingsFlag)())},clearUnsavedSettingsFlag:function(){return e((0,s.clearUnsavedSettingsFlag)())},refreshSettings:function(){return e((0,s.fetchSettings)())}}})(e)};var o,r=n(9),a=(o=n(22))&&o.__esModule?o:{default:o},i=n(8),p=n(24),s=n(86),c=n(21),b=n(20)},function(e,t,n){},function(e,t,n){var o=n(202),r=n(94),a=n(45),i=n(401),p=n(882);e.exports=function(e){if(null==e)return 0;if(a(e))return i(e)?p(e):e.length;var t=r(e);return"[object Map]"==t||"[object Set]"==t?e.size:o(e).length}},function(e,t,n){var o=n(883),r=n(711),a=n(884);e.exports=function(e){return r(e)?a(e):o(e)}},function(e,t,n){var o=n(408)("length");e.exports=o},function(e,t){var n="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",o="\\ud83c[\\udffb-\\udfff]",r="[^\\ud800-\\udfff]",a="(?:\\ud83c[\\udde6-\\uddff]){2}",i="[\\ud800-\\udbff][\\udc00-\\udfff]",p="(?:"+n+"|"+o+")?",s="[\\ufe0e\\ufe0f]?"+p+"(?:\\u200d(?:"+[r,a,i].join("|")+")[\\ufe0e\\ufe0f]?"+p+")*",c="(?:"+[r+n+"?",n,a,i,"[\\ud800-\\udfff]"].join("|")+")",b=RegExp(o+"(?="+o+")|"+c+s,"g");e.exports=function(e){for(var t=b.lastIndex=0;b.test(e);)++t;return t}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=u(n(3)),r=u(n(4)),a=u(n(7)),i=u(n(5)),p=u(n(6)),s=u(n(1)),c=n(2),b=u(c),M=u(n(12)),l=n(38);function u(e){return e&&e.__esModule?e:{default:e}}n(886);var d=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"getIconClassNames",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=this.props,n=t.plan,o=t.className,r=(0,l.getPlanClass)(n);return(0,M.default)("dops-plan-icon",r,o,e)}},{key:"getPersonalIcon",value:function(){return b.default.createElement("svg",{className:this.getIconClassNames("dops-plan-icon__personal"),xmlns:"http://www.w3.org/2000/svg",version:"1.1",x:"0",y:"0",viewBox:"0 0 124 125"},b.default.createElement("circle",{className:"dops-plan-icon__personal-0",cx:"62",cy:"62.1",r:"62"}),b.default.createElement("path",{className:"dops-plan-icon__personal-1",d:"M64 106.1l4-9.8v-3.5H62v14.6C62.9 107.4 63.6 106.9 64 106.1z"}),b.default.createElement("path",{className:"dops-plan-icon__personal-2",d:"M56.2 92.8v3.5l4 9.8c0.3 0.8 1.1 1.3 1.9 1.3V92.8H56.2z"}),b.default.createElement("path",{className:"dops-plan-icon__personal-2",d:"M62 32.9h17.1V2.5C73.7 0.9 68 0.1 62 0.1V32.9z"}),b.default.createElement("path",{className:"dops-plan-icon__personal-3",d:"M62 32.9V0.1c0 0 0 0 0 0 -5.9 0-11.6 0.8-17 2.4v30.5H62z"}),b.default.createElement("polygon",{className:"dops-plan-icon__personal-4",points:"62 32.9 45 32.9 48.3 48.7 53.3 92.8 62 92.8 "}),b.default.createElement("polygon",{className:"dops-plan-icon__personal-5",points:"62 32.9 79.2 32.9 75.9 48.7 70.9 92.8 62 92.8 "}))}},{key:"getPremiumIcon",value:function(){return b.default.createElement("svg",{className:this.getIconClassNames("dops-plan-icon__premium"),xmlns:"http://www.w3.org/2000/svg",version:"1.1",x:"0",y:"0",viewBox:"0 0 62 61.5"},b.default.createElement("ellipse",{className:"dops-plan-icon__premium-0",cx:"31",cy:"30.8",rx:"31",ry:"30.8"}),b.default.createElement("path",{className:"dops-plan-icon__premium-1",d:"M27.8 46.3v1.9l2.2 5.4c0.2 0.5 0.5 0.7 1 0.7v-7.9L27.8 46.3z"}),b.default.createElement("path",{className:"dops-plan-icon__premium-2",d:"M32 53.6l2.2-5.4v-1.9H31v3.8 4.1C31.5 54.3 31.9 54 32 53.6z"}),b.default.createElement("path",{className:"dops-plan-icon__premium-3",d:"M21.6 18c0.2 2 4.8 28.3 4.8 28.3l4.6 0.1V18H21.6z"}),b.default.createElement("path",{className:"dops-plan-icon__premium-4",d:"M40.5 18H31v23.4 5l4.5-0.1C35.5 46.3 40.1 20.4 40.5 18z"}),b.default.createElement("path",{className:"dops-plan-icon__premium-5",d:"M31 18V0c-3.9 0-7.7 0.7-11.2 2.1 0.7 6 1.8 15.9 1.8 15.9H31z"}),b.default.createElement("path",{className:"dops-plan-icon__premium-6",d:"M31 18h9.5c0 0 1.1-9.9 1.8-15.9C38.8 0.7 35 0 31 0V18z"}))}},{key:"getBusinessIcon",value:function(){return b.default.createElement("svg",{className:this.getIconClassNames("dops-plan-icon__business"),xmlns:"http://www.w3.org/2000/svg",version:"1.1",x:"0",y:"0",viewBox:"0 0 124 124"},b.default.createElement("circle",{className:"dops-plan-icon__business-0",cx:"62",cy:"62",r:"62"}),b.default.createElement("path",{className:"dops-plan-icon__business-1",d:"M57.4 73.8c0-2.5 2-4.6 4.6-4.6V36.8h-9.6v12.1c-8 3.7-13.5 11.7-13.5 21.1 0 4.9 1.5 9.4 4.1 13.1l0 0c15.4 22.4 15.4 22.4 17 24.8h0.3V78.1C58.6 77.4 57.4 75.7 57.4 73.8L57.4 73.8z"}),b.default.createElement("path",{className:"dops-plan-icon__business-2",d:"M85.2 69.8c0-9.4-5.6-17.4-13.5-21.1v-12H62v32.5c2.5 0 4.6 2 4.6 4.6 0 1.9-1.2 3.5-2.9 4.2v29.8H64c1.6-2.4 1.6-2.4 17-24.8l0 0C83.6 79.2 85.2 74.7 85.2 69.8L85.2 69.8z"}),b.default.createElement("path",{className:"dops-plan-icon__business-3",d:"M48.6 32h-2.4c-3.2 0-5.8 2.6-5.8 5.8V38c0 3.2 2.6 5.8 5.8 5.8H62v-4.7V32 0c-7.2 0-14.1 1.2-20.6 3.5 1.1 5.5 2.5 11 4.1 16.5L48.6 32z"}),b.default.createElement("path",{className:"dops-plan-icon__business-4",d:"M62 39.1v4.7h15.8c3.2 0 5.8-2.6 5.8-5.8v-0.2c0-3.2-2.6-5.8-5.8-5.8h-2.4l3.1-12c1.6-5.5 3-11 4.1-16.5C76.1 1.2 69.2 0 62 0v32V39.1z"}))}},{key:"getDefaultIcon",value:function(){return b.default.createElement("svg",{className:this.getIconClassNames("dops-plan-icon__free"),xmlns:"http://www.w3.org/2000/svg",version:"1.1",x:"0",y:"0",viewBox:"0 0 61.8 61.8"},b.default.createElement("circle",{className:"dops-plan-icon__free-0",cx:"30.9",cy:"30.9",r:"30.9"}),b.default.createElement("polygon",{className:"dops-plan-icon__free-1",points:"41.4 32.8 30.9 22.5 20.3 32.8 30.9 51.8 "}),b.default.createElement("path",{className:"dops-plan-icon__free-2",d:"M30.9 41.6L30.9 41.6c-2 0-3.7 1.6-3.7 3.6l3.7 6.5 3.7-6.5C34.5 43.2 32.9 41.6 30.9 41.6L30.9 41.6z"}),b.default.createElement("path",{className:"dops-plan-icon__free-3",d:"M25.6 27.7c0 2.9 2.3 5.2 5.2 5.2h0.1c2.9 0 5.2-2.3 5.2-5.2v-0.1V0.4c-1.7-0.3-3.5-0.5-5.3-0.5s-3.6 0.2-5.3 0.5v27.3H25.6z"}),b.default.createElement("path",{className:"dops-plan-icon__free-4",d:"M25.6 27.6V0.4c-1.8 0.3-3.6 0.8-5.3 1.4v31C23.2 32.8 25.6 30.5 25.6 27.6z"}),b.default.createElement("path",{className:"dops-plan-icon__free-2",d:"M41.4 32.8v-31c-1.7-0.6-3.5-1.1-5.3-1.4v27.2C36.1 30.5 38.5 32.8 41.4 32.8z"}))}},{key:"render",value:function(){switch(this.props.plan){case l.PLAN_PERSONAL:case l.PLAN_PERSONAL_2_YEARS:case l.PLAN_JETPACK_PERSONAL:case l.PLAN_JETPACK_PERSONAL_MONTHLY:return this.getPersonalIcon();case l.PLAN_PREMIUM:case l.PLAN_PREMIUM_2_YEARS:case l.PLAN_JETPACK_PREMIUM:case l.PLAN_JETPACK_PREMIUM_MONTHLY:return this.getPremiumIcon();case l.PLAN_BUSINESS:case l.PLAN_BUSINESS_2_YEARS:case l.PLAN_JETPACK_BUSINESS:case l.PLAN_JETPACK_BUSINESS_MONTHLY:case l.PLAN_VIP:return this.getBusinessIcon();default:return this.getDefaultIcon()}}}]),t}(c.Component);t.default=d,d.propTypes={classNames:s.default.string,plan:s.default.oneOf([l.PLAN_FREE,l.PLAN_PREMIUM,l.PLAN_PREMIUM_2_YEARS,l.PLAN_BUSINESS,l.PLAN_BUSINESS_2_YEARS,l.PLAN_JETPACK_FREE,l.PLAN_JETPACK_BUSINESS,l.PLAN_JETPACK_BUSINESS_MONTHLY,l.PLAN_JETPACK_PREMIUM,l.PLAN_JETPACK_PREMIUM_MONTHLY,l.PLAN_JETPACK_PERSONAL,l.PLAN_JETPACK_PERSONAL_MONTHLY,l.PLAN_PERSONAL,l.PLAN_PERSONAL_2_YEARS,l.PLAN_VIP]).isRequired},e.exports=t.default},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=M(n(1)),r=M(n(2)),a=M(n(16)),i=M(n(54)),p=M(n(635)),s=M(n(55)),c=M(n(12)),b=M(n(13));function M(e){return e&&e.__esModule?e:{default:e}}n(890),t.default=(0,a.default)({displayName:"InfoPopover",propTypes:{id:o.default.string,position:o.default.string,className:o.default.string,rootClassName:o.default.string,gaEventCategory:o.default.string,popoverName:o.default.string,onClick:o.default.func,ignoreContext:o.default.shape({getDOMNode:o.default.function})},getDefaultProps:function(){return{position:"bottom",onClick:i.default}},getInitialState:function(){return{showPopover:!1}},render:function(){var e=(0,c.default)("dops-info-popover","dops-info-popover-button",{is_active:this.state.showPopover},this.props.className);return r.default.createElement("button",{ref:"infoPopover",className:e,onClick:this._onClick},r.default.createElement(s.default,{icon:"info-outline",size:18}),this.props.screenReaderText?r.default.createElement("span",{className:"screen-reader-text"},this.props.screenReaderText):"",r.default.createElement(p.default,{id:this.props.id,isVisible:this.state.showPopover,context:this.refs&&this.refs.infoPopover,ignoreContext:this.props.ignoreContext,position:this.props.position,onClose:this._onClose,className:(0,c.default)("dops-info-popover__tooltip",this.props.className),rootClassName:this.props.rootClassName},this.props.children))},_onClick:function(e){this.props.onClick(),e.preventDefault(),this.setState({showPopover:!this.state.showPopover},this._recordStats)},_onClose:function(){this.setState({showPopover:!1},this._recordStats)},_recordStats:function(){var e=this.props,t=e.gaEventCategory,n=e.popoverName;if(t&&n){var o=this.state.showPopover?" Opened":" Closed";b.default.ga.recordEvent(t,"InfoPopover: "+n+o)}}}),e.exports=t.default},function(e,t,n){},function(e,t,n){},function(e,t,n){},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Subscriptions=void 0;var o=m(n(10)),r=m(n(47)),a=m(n(3)),i=m(n(4)),p=m(n(7)),s=m(n(5)),c=m(n(6)),b=m(n(2)),M=n(8),l=m(n(78)),u=m(n(17)),d=m(n(13)),z=n(51),f=n(43),O=n(27),A=m(n(32)),h=m(n(29));function m(e){return e&&e.__esModule?e:{default:e}}var q=function(e){function t(){var e,n,o,p;(0,i.default)(this,t);for(var c=arguments.length,b=Array(c),M=0;M<c;M++)b[M]=arguments[M];return n=o=(0,s.default)(this,(e=t.__proto__||(0,a.default)(t)).call.apply(e,[this].concat(b))),o.state={stb_enabled:o.props.getOptionValue("stb_enabled","subscriptions"),stc_enabled:o.props.getOptionValue("stc_enabled","subscriptions")},o.updateOptions=function(e){o.setState((0,r.default)({},e,!o.state[e]),o.props.updateFormStateModuleOption("subscriptions",e))},o.trackConfigureClick=function(){d.default.tracks.recordJetpackClick("view-followers")},o.handleSubscribeToBlogToggleChange=function(){o.updateOptions("stb_enabled")},o.handleSubscribeToCommentToggleChange=function(){o.updateOptions("stc_enabled")},p=n,(0,s.default)(o,p)}return(0,c.default)(t,e),(0,p.default)(t,[{key:"render",value:function(){var e=this,t=this.props.getModule("subscriptions"),n=this.props.getOptionValue("subscriptions"),r=this.props.isUnavailableInDevMode("subscriptions");return b.default.createElement(A.default,(0,o.default)({},this.props,{hideButton:!0,module:"subscriptions"}),b.default.createElement(h.default,{hasChild:!0,disableInDevMode:!0,module:t,support:{text:(0,M.translate)("Allows readers to subscribe to your posts or comments, and receive notifications of new content by email."),link:"https://jetpack.com/support/subscriptions/"}},b.default.createElement(f.ModuleToggle,{slug:"subscriptions",disabled:r,activated:n,toggling:this.props.isSavingAnyOption("subscriptions"),toggleModule:this.props.toggleModuleNow},b.default.createElement("span",{className:"jp-form-toggle-explanation"},t.description)),b.default.createElement(z.FormFieldset,null,b.default.createElement(l.default,{checked:this.state.stb_enabled,disabled:!n||r||this.props.isSavingAnyOption(["subscriptions","stb_enabled"]),onChange:this.handleSubscribeToBlogToggleChange},b.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,M.translate)('Show a "follow blog" option in the comment form'))),b.default.createElement(l.default,{checked:this.state.stc_enabled,disabled:!n||r||this.props.isSavingAnyOption(["subscriptions","stc_enabled"]),onChange:this.handleSubscribeToCommentToggleChange},b.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,M.translate)('Show a "follow comments" option in the comment form'))))),r||!n?"":e.props.isLinked?b.default.createElement(u.default,{compact:!0,className:"jp-settings-card__configure-link",onClick:e.trackConfigureClick,href:"https://wordpress.com/people/email-followers/"+e.props.siteRawUrl},(0,M.translate)("View your Email Followers")):b.default.createElement(u.default,{compact:!0,className:"jp-settings-card__configure-link",href:e.props.connectUrl+"&from=unlinked-user-connect-masterbar"},(0,M.translate)("Create a Jetpack account to view your email followers")," "))}}]),t}(b.default.Component);t.Subscriptions=(0,O.withModuleSettingsFormHelpers)(q)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=m(n(3)),r=m(n(4)),a=m(n(7)),i=m(n(5)),p=m(n(6)),s=n(2),c=m(s),b=n(9),M=n(8),l=n(24),u=n(20),d=n(56),z=m(n(17)),f=m(n(125)),O=m(n(895)),A=m(n(896)),h=m(n(897));function m(e){return e&&e.__esModule?e:{default:e}}var q=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){var e={getModule:this.props.module,isUnavailableInDevMode:this.props.isUnavailableInDevMode,isModuleFound:this.props.isModuleFound,getModuleOverride:this.props.getModuleOverride},t=["photon","videopress","lazy-images","photon-cdn","search"].some(this.props.isModuleFound);return(this.props.searchTerm||this.props.active)&&t?c.default.createElement("div",null,c.default.createElement(f.default,null),c.default.createElement(z.default,{title:(0,M.translate)("Load pages faster, optimize images, and speed up your visitors’ experience."),className:"jp-settings-description"}),c.default.createElement(h.default,e),c.default.createElement(O.default,e),c.default.createElement(A.default,e)):null}}]),t}(s.Component);t.default=(0,b.connect)(function(e){return{module:function(t){return(0,l.getModule)(e,t)},isUnavailableInDevMode:function(t){return(0,u.isUnavailableInDevMode)(e,t)},isModuleFound:function(t){return(0,d.isModuleFound)(e,t)},getModuleOverride:function(t){return(0,l.getModuleOverride)(e,t)}}})(q),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=_(n(10)),r=_(n(3)),a=_(n(4)),i=_(n(7)),p=_(n(5)),s=_(n(6)),c=_(n(2)),b=n(9),M=n(8),l=_(n(35)),u=n(38),d=n(51),z=n(43),f=n(27),O=_(n(32)),A=_(n(29)),h=n(24),m=n(56),q=n(42);function _(e){return e&&e.__esModule?e:{default:e}}var W=function(e){function t(){return(0,a.default)(this,t),(0,p.default)(this,(t.__proto__||(0,r.default)(t)).apply(this,arguments))}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e=this.props.isModuleFound("videopress");if(!e)return null;var t=this.props.module("videopress"),n=(0,u.getPlanClass)(this.props.sitePlan.product_slug),r=(0,l.default)(["is-premium-plan","is-business-plan"],n)&&c.default.createElement(A.default,{hasChild:!0,disableInDevMode:!0,module:t,support:{link:"https://jetpack.com/support/videopress/"}},c.default.createElement(d.FormLegend,{className:"jp-form-label-wide"},(0,M.translate)("Video")),c.default.createElement("p",null," ",(0,M.translate)("Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!")," "),c.default.createElement(z.ModuleToggle,{slug:"videopress",disabled:this.props.isUnavailableInDevMode("videopress"),activated:this.props.getOptionValue("videopress"),toggling:this.props.isSavingAnyOption("videopress"),toggleModule:this.props.toggleModuleNow},c.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,M.translate)("Enable high-speed, ad-free video player")))),a="inactive"===this.props.getModuleOverride("videopress");return c.default.createElement(O.default,(0,o.default)({},this.props,{header:(0,M.translate)("Media"),feature:!a&&u.FEATURE_VIDEO_HOSTING_JETPACK,hideButton:!0}),e&&r)}}]),t}(c.default.Component);t.default=(0,b.connect)(function(e){return{module:function(t){return(0,h.getModule)(e,t)},isModuleFound:function(t){return(0,m.isModuleFound)(e,t)},sitePlan:(0,q.getSitePlan)(e),getModuleOverride:function(t){return(0,h.getModuleOverride)(e,t)}}})((0,f.withModuleSettingsFormHelpers)(W)),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=q(n(10)),r=q(n(3)),a=q(n(4)),i=q(n(7)),p=q(n(5)),s=q(n(6)),c=q(n(2)),b=n(9),M=n(8),l=q(n(17)),u=n(38),d=n(27),z=n(43),f=q(n(32)),O=q(n(29)),A=n(21),h=n(42),m=n(51);function q(e){return e&&e.__esModule?e:{default:e}}var _=function(e){function t(){return(0,a.default)(this,t),(0,p.default)(this,(t.__proto__||(0,r.default)(t)).apply(this,arguments))}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e="is-business-plan"===(0,u.getPlanClass)(this.props.sitePlan.product_slug),t=this.props.getOptionValue("search");return c.default.createElement(f.default,(0,o.default)({},this.props,{module:"search",feature:u.FEATURE_SEARCH_JETPACK,hideButton:!0}),c.default.createElement(O.default,{hasChild:!0,module:{module:"search"},support:{text:(0,M.translate)("Jetpack Search supports many customizations."),link:"https://jetpack.com/support/search"}},c.default.createElement("p",null,(0,M.translate)("The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.")," "),c.default.createElement("p",null,(0,M.translate)("Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.")," "),e&&c.default.createElement(z.ModuleToggle,{slug:"search",compact:!0,activated:t,toggling:this.props.isSavingAnyOption("search"),toggleModule:this.props.toggleModuleNow},(0,M.translate)("Replace WordPress built-in search with Jetpack Search, an advanced search experience")),e&&t&&c.default.createElement(m.FormFieldset,null,c.default.createElement("p",{className:"jp-form-setting-explanation"},(0,M.translate)("Add the Jetpack Search widget to your sidebar to configure sorting and filters.")))),e&&t&&c.default.createElement(l.default,{compact:!0,className:"jp-settings-card__configure-link",href:"customize.php?autofocus[panel]=widgets"},(0,M.translate)("Add Jetpack Search Widget")))}}]),t}(c.default.Component);t.default=(0,b.connect)(function(e){return{siteAdminUrl:(0,A.getSiteAdminUrl)(e),sitePlan:(0,h.getSitePlan)(e),fetchingSiteData:(0,h.isFetchingSiteData)(e)}})((0,d.withModuleSettingsFormHelpers)(_)),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=W(n(10)),r=W(n(47)),a=W(n(3)),i=W(n(4)),p=W(n(7)),s=W(n(5)),c=W(n(6)),b=n(2),M=W(b),l=n(9),u=n(8),d=n(51),z=W(n(78)),f=n(27),O=n(24),A=n(56),h=W(n(32)),m=W(n(29)),q=n(43),_=W(n(13));function W(e){return e&&e.__esModule?e:{default:e}}var g=(0,f.withModuleSettingsFormHelpers)(function(e){function t(){var e,n,p,c;(0,i.default)(this,t);for(var b=arguments.length,M=Array(b),l=0;l<b;l++)M[l]=arguments[l];return n=p=(0,s.default)(this,(e=t.__proto__||(0,a.default)(t)).call.apply(e,[this].concat(M))),p.toggleModule=function(e,t){"photon"===e?0==!t?p.props.updateOptions({photon:!1,"tiled-gallery":!1,tiled_galleries:!1}):p.props.updateOptions({photon:!0,"tiled-gallery":!0,tiled_galleries:!0}):p.props.updateOptions((0,r.default)({},e,!t))},p.handleSiteAcceleratorChange=function(){var e=p.props.getOptionValue("photon"),t=p.props.getOptionValue("photon-cdn"),n=e||t,r=p.props.getModuleOverride("photon"),a=p.props.getModuleOverride("photon-cdn");if(!0===n){var i={progress:(0,u.translate)("Disabling site accelerator…"),success:(0,u.translate)("Site accelerator is no longer speeding up your site!"),error:function(e){return(0,u.translate)("Error disabling site accelerator. %(error)s",{args:{error:e}})}},s={};0==!e&&"active"!==r&&(e=!1,s={photon:!1,"tiled-gallery":!1,tiled_galleries:!1}),0==!t&&"active"!==a&&(t=!1,s=(0,o.default)({},s,{"photon-cdn":!1})),p.props.updateOptions(s,i)}else{var c={progress:(0,u.translate)("Enabling Site accelerator…"),success:(0,u.translate)("Site accelerator is now speeding up your site!"),error:function(e){return(0,u.translate)("Error enabling Site accelerator. %(error)s",{args:{error:e}})}},b={};!1===e&&"inactive"!==r&&(e=!0,b={photon:!0,"tiled-gallery":!0,tiled_galleries:!0}),!1===t&&"inactive"!==a&&(t=!0,b=(0,o.default)({},b,{"photon-cdn":!0})),p.props.updateOptions(b,c)}!0===e||!0===t?_.default.tracks.recordJetpackClick({target:"jetpack_site_accelerator_toggle",toggled:"on"}):_.default.tracks.recordJetpackClick({target:"jetpack_site_accelerator_toggle",toggled:"off"}),p.props.getOptionValue("photon")!==e&&_.default.tracks.recordEvent("jetpack_wpa_module_toggle",{module:"photon",toggled:!1===e?"off":"on"}),p.props.getOptionValue("photon-cdn")!==t&&_.default.tracks.recordEvent("jetpack_wpa_module_toggle",{module:"photon-cdn",toggled:!1===t?"off":"on"})},c=n,(0,s.default)(p,c)}return(0,c.default)(t,e),(0,p.default)(t,[{key:"render",value:function(){var e=this.props.isModuleFound("photon"),t=this.props.isModuleFound("photon-cdn"),n=this.props.isModuleFound("lazy-images");if(!e&&!n&&!t)return null;var r=this.props.module("lazy-images"),a=this.props.getOptionValue("photon")||this.props.getOptionValue("photon-cdn"),i=this.props.getModuleOverride("photon"),p=this.props.getModuleOverride("photon-cdn"),s=e&&t&&("inactive"!==i||"inactive"!==p),c=(e||t)&&("inactive"!==i||"inactive"!==p),b=void 0;return!this.props.getOptionValue("photon")&&this.props.isSavingAnyOption("photon")?b=!this.props.getOptionValue("photon-cdn"):!this.props.getOptionValue("photon-cdn")&&this.props.isSavingAnyOption("photon-cdn")?b=!this.props.getOptionValue("photon"):this.props.getOptionValue("photon")&&this.props.isSavingAnyOption("photon")?(b=!this.props.getOptionValue("photon-cdn"),this.props.getOptionValue("photon-cdn")&&this.props.isSavingAnyOption("photon-cdn")&&(b=!0)):b=!(!this.props.getOptionValue("photon-cdn")||!this.props.isSavingAnyOption("photon-cdn")||this.props.getOptionValue("photon")),M.default.createElement(h.default,(0,o.default)({},this.props,{header:(0,u.translate)("Performance & speed"),hideButton:!0}),(e||t)&&M.default.createElement(m.default,{hasChild:!0,support:{link:"http://jetpack.com/support/site-accelerator/"}},M.default.createElement("p",null,(0,u.translate)("Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.")),c&&M.default.createElement(z.default,{checked:a,toggling:b,onChange:this.handleSiteAcceleratorChange,disabled:!s},M.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,u.translate)("Enable site accelerator"))),M.default.createElement(d.FormFieldset,null,e&&M.default.createElement(q.ModuleToggle,{slug:"photon",disabled:this.props.isUnavailableInDevMode("photon"),activated:this.props.getOptionValue("photon"),toggling:this.props.isSavingAnyOption("photon"),toggleModule:this.toggleModule},M.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,u.translate)("Speed up image load times"))),t&&M.default.createElement(q.ModuleToggle,{slug:"photon-cdn",activated:this.props.getOptionValue("photon-cdn"),toggling:this.props.isSavingAnyOption("photon-cdn"),toggleModule:this.toggleModule},M.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,u.translate)("Speed up static file load times"))))),n&&M.default.createElement(m.default,{hasChild:!0,module:r,support:{link:"https://jetpack.com/support/lazy-images/"}},M.default.createElement("p",null,(0,u.translate)("Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.")),M.default.createElement(q.ModuleToggle,{slug:"lazy-images",disabled:this.props.isUnavailableInDevMode("lazy-images"),activated:this.props.getOptionValue("lazy-images"),toggling:this.props.isSavingAnyOption("lazy-images"),toggleModule:this.toggleModule},M.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,u.translate)("Enable Lazy Loading for images")))))}}]),t}(b.Component));t.default=(0,l.connect)(function(e){return{module:function(t){return(0,O.getModule)(e,t)},isModuleFound:function(t){return(0,A.isModuleFound)(e,t)},getModuleOverride:function(t){return(0,O.getModuleOverride)(e,t)}}})(g),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=_(n(10)),r=_(n(3)),a=_(n(4)),i=_(n(7)),p=_(n(5)),s=_(n(6)),c=_(n(2)),b=_(n(1)),M=n(8),l=n(9),u=n(27),d=_(n(78)),z=_(n(32)),f=_(n(29)),O=_(n(186)),A=n(409),h=n(899),m=n(86),q=_(n(13));function _(e){return e&&e.__esModule?e:{default:e}}var W=function(){return q.default.tracks.recordJetpackClick({target:"privacy-policy",feature:"privacy"})},g=function(){return q.default.tracks.recordJetpackClick({target:"cookie-policy",feature:"privacy"})},v=function(){return q.default.tracks.recordJetpackClick({target:"privacy-center",feature:"privacy"})},y=function(e){function t(){var e,n,o,i;(0,a.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=o=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(c))),o.isPrivacyFound=function(){return!o.props.searchTerm||[(0,M.translate)("privacy",{context:"Search term."}),(0,M.translate)("tracks",{context:"Search term."}),(0,M.translate)("data",{context:"Search term."}),(0,M.translate)("gdpr",{context:"Search term."}),(0,M.translate)("tos",{context:"Search term."}),(0,M.translate)("terms of service",{context:"Search term."})].join(" ").toLowerCase().indexOf(o.props.searchTerm.toLowerCase())>-1},o.togglePrivacy=function(){var e=o.props.trackingSettings.tracks_opt_out;o.props.setTrackingSettings(!e)},i=n,(0,p.default)(o,i)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"UNSAFE_componentWillMount",value:function(){this.props.fetchTrackingSettings()}},{key:"render",value:function(){var e=this.props,t=e.searchTerm,n=e.active;return t||n?this.isPrivacyFound()&&c.default.createElement("div",null,c.default.createElement(z.default,(0,o.default)({},this.props,{header:(0,M.translate)("Privacy Settings",{context:"Settings header"}),hideButton:!0}),c.default.createElement(f.default,{hasChild:!0},c.default.createElement("p",null,(0,M.translate)("We are committed to your privacy and security. ")),c.default.createElement("p",null,c.default.createElement(d.default,{compact:!0,checked:!this.props.trackingSettings.tracks_opt_out,disabled:this.props.isFetchingTrackingSettings||this.props.isUpdatingTrackingSettings,onChange:this.togglePrivacy,id:"privacy-settings"},(0,M.translate)("Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.",{components:{cookiePolicyLink:c.default.createElement(O.default,{href:"https://automattic.com/cookies/",onClick:g,target:"_blank",rel:"noopener noreferrer"})}}))),c.default.createElement("p",null,(0,M.translate)("This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.",{components:{pp:c.default.createElement(O.default,{href:"https://automattic.com/privacy/",onClick:W,target:"_blank",rel:"noopener noreferrer"})}})),c.default.createElement("p",null,(0,M.translate)("We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.",{components:{cookiePolicyLink:c.default.createElement(O.default,{href:"https://automattic.com/cookies/",onClick:g,target:"_blank",rel:"noopener noreferrer"})}})),c.default.createElement("p",null,(0,M.translate)("For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.",{components:{privacyCenterLink:c.default.createElement(O.default,{href:"https://jetpack.com/support/privacy",onClick:v,target:"_blank",rel:"noopener noreferrer"})}}))))):null}}]),t}(c.default.Component);y.displayName="PrivacySettings",y.propTypes={searchTerm:b.default.string,active:b.default.bool,toggleTracking:b.default.func,getOptionValue:b.default.func,isSavingAnyOption:b.default.func},y.defaultProps={searchTerm:"",active:!1},t.default=(0,l.connect)(function(e){return{settings:(0,m.getSettings)(e),trackingSettings:(0,A.getTrackingSettings)(e),isUpdatingTrackingSettings:(0,A.isUpdatingTrackingSettings)(e),isFetchingTrackingSettings:(0,A.isFetchingTrackingSettingsList)(e)}},function(e){return{setTrackingSettings:function(t){q.default.tracks.setOptOut(t),e((0,h.updateTrackingSettings)({tracks_opt_out:t}))},fetchTrackingSettings:function(){return e((0,h.fetchTrackingSettings)())}}})((0,u.withModuleSettingsFormHelpers)(y)),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.updateTrackingSettings=t.fetchTrackingSettings=void 0;var o,r=n(76),a=n(8),i=n(14),p=(o=n(37))&&o.__esModule?o:{default:o};t.fetchTrackingSettings=function(){return function(e){return e({type:i.USER_TRACKING_SETTINGS_FETCH}),p.default.fetchUserTrackingSettings().then(function(t){return e({type:i.USER_TRACKING_SETTINGS_FETCH_SUCCESS,settings:t}),t}).catch(function(t){e({type:i.USER_TRACKING_SETTINGS_FETCH_FAIL,error:t})})}},t.updateTrackingSettings=function(e){return function(t){var n={progress:(0,a.translate)("Updating privacy settings…"),success:(0,a.translate)("Updated privacy settings."),error:function(e){return(0,a.translate)("Error updating privacy settings. %(error)s",{args:{error:e.message||e.code||e.name||e}})}};return t((0,r.removeNotice)("tracking-settings-update")),t((0,r.removeNotice)("tracking-settings-update-success")),t((0,r.createNotice)("is-info",n.progress,{id:"tracking-settings-update"})),t({type:i.USER_TRACKING_SETTINGS_UPDATE,updatedSettings:e}),p.default.updateUserTrackingSettings(e).then(function(o){t({type:i.USER_TRACKING_SETTINGS_UPDATE_SUCCESS,updatedSettings:e,success:o}),t((0,r.removeNotice)("tracking-settings-update")),t((0,r.removeNotice)("tracking-settings-update-success")),t((0,r.createNotice)("is-success",n.success,{id:"tracking-settings-update-success",duration:2e3}))}).catch(function(o){t({type:i.USER_TRACKING_SETTINGS_UPDATE_FAIL,updatedSettings:e,success:!1,error:o}),t((0,r.removeNotice)("tracking-settings-update")),t((0,r.removeNotice)("tracking-settings-update-success")),t((0,r.createNotice)("is-error",n.error(o),{id:"tracking-settings-update"}))})}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SearchableModules=void 0;var o=g(n(47)),r=g(n(3)),a=g(n(4)),i=g(n(7)),p=g(n(5)),s=g(n(6)),c=g(n(1)),b=n(2),M=g(b),l=n(9),u=g(n(177)),d=g(n(35)),z=n(8),f=g(n(651)),O=n(27),A=n(24),h=n(56),m=g(n(32)),q=g(n(29)),_=n(21),W=n(20);function g(e){return e&&e.__esModule?e:{default:e}}var v=t.SearchableModules=(0,O.withModuleSettingsFormHelpers)(function(e){function t(){var e,n,i,s;(0,a.default)(this,t);for(var c=arguments.length,b=Array(c),M=0;M<c;M++)b[M]=arguments[M];return n=i=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(b))),i.handleBannerClick=function(e){return function(){return i.props.updateOptions((0,o.default)({},e,!0))}},s=n,(0,p.default)(i,s)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e=this;if(!this.props.canManageModules)return null;if(this.props.searchTerm.length<3)return null;var t=["contact-form","custom-css","enhanced-distribution","json-api","latex","notes","shortcodes","shortlinks","widget-visibility","widgets"],n=this.props.modules,o=[];return(0,u.default)(n,function(n,r){if(e.props.isModuleFound(r)&&(0,d.default)(t,r)){if(e.props.isDevMode&&e.props.isUnavailableInDevMode(n.module))return o.push(M.default.createElement(y,{key:r,moduleData:n,devMode:!0}));e.props.getOptionValue(n.module)?o.push(M.default.createElement(y,{key:r,moduleData:n})):o.push(M.default.createElement(f.default,{className:"jp-searchable-banner",key:r,callToAction:(0,z.translate)("Activate"),description:n.description,href:"javascript:void( 0 )",icon:"cog",onClick:e.handleBannerClick(n.module),title:n.name}))}}),M.default.createElement("div",null,o)}}]),t}(b.Component));v.propTypes={searchTerm:c.default.string},v.defaultProps={searchTerm:""};var y=function(e){function t(){return(0,a.default)(this,t),(0,p.default)(this,(t.__proto__||(0,r.default)(t)).apply(this,arguments))}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e=this.props.moduleData,t=this.props.devMode;return M.default.createElement(m.default,{header:e.name,action:e.module,hideButton:!0},M.default.createElement(q.default,{disableInDevMode:t,module:{module:e.module},support:{link:e.learn_more_button}},e.description))}}]),t}(b.Component);t.default=(0,l.connect)(function(e){return{modules:(0,A.getModules)(e),isModuleFound:function(t){return(0,h.isModuleFound)(e,t)},canManageModules:(0,_.userCanManageModules)(e),isUnavailableInDevMode:function(t){return(0,W.isUnavailableInDevMode)(e,t)},isDevMode:(0,W.isDevMode)(e)}})(v)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Security=void 0;var o=L(n(3)),r=L(n(4)),a=L(n(7)),i=L(n(5)),p=L(n(6)),s=n(2),c=L(s),b=n(9),M=L(n(22)),l=n(8),u=L(n(17)),d=n(24),z=n(86),f=n(20),O=n(56),A=n(103),h=L(n(125)),m=L(n(710)),q=L(n(902)),_=L(n(903)),W=n(914),g=n(915),v=n(916),y=n(918);function L(e){return e&&e.__esModule?e:{default:e}}var R=t.Security=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.isAkismetFound=function(){if(!a.props.isPluginActive("akismet/akismet.php"))return!1;if(a.props.searchTerm){var e=a.props.isPluginInstalled("akismet/akismet.php");return["akismet","antispam","spam","comments",e.Description,e.PluginURI].join(" ").toLowerCase().indexOf(a.props.searchTerm.toLowerCase())>-1}return!0},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){var e={settings:this.props.settings,getModule:this.props.module,isDevMode:this.props.isDevMode,isUnavailableInDevMode:this.props.isUnavailableInDevMode,rewindStatus:this.props.rewindStatus,siteRawUrl:this.props.siteRawUrl},t=this.props.isModuleFound("protect"),n=this.props.isModuleFound("sso"),o=this.isAkismetFound(),r="active"===(0,M.default)(this.props.rewindStatus,["state"],!1),a=this.props.isModuleFound("vaultpress")||r,i=this.props.isModuleFound("monitor"),p=this.props.isModuleFound("manage");return(this.props.searchTerm||this.props.active)&&(n||t||o||a||i||p)?c.default.createElement("div",null,c.default.createElement(h.default,null),c.default.createElement(u.default,{title:(0,l.translate)("Keep your site safe with state-of-the-art security and receive notifications of technical problems."),className:"jp-settings-description"}),a&&c.default.createElement(q.default,e),i&&c.default.createElement(g.Monitor,e),o&&c.default.createElement("div",null,c.default.createElement(_.default,e),c.default.createElement(m.default,null)),p&&c.default.createElement(W.ManagePlugins,e),t&&c.default.createElement(v.Protect,e),n&&c.default.createElement(y.SSO,e)):null}}]),t}(s.Component);R.displayName="SecuritySettings",t.default=(0,b.connect)(function(e){return{module:function(t){return(0,d.getModule)(e,t)},settings:(0,z.getSettings)(e),isDevMode:(0,f.isDevMode)(e),isUnavailableInDevMode:function(t){return(0,f.isUnavailableInDevMode)(e,t)},isModuleFound:function(t){return(0,O.isModuleFound)(e,t)},isPluginActive:function(t){return(0,A.isPluginActive)(e,t)},isPluginInstalled:function(t){return(0,A.isPluginInstalled)(e,t)}}})(R)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.BackupsScan=void 0;var o=y(n(10)),r=y(n(3)),a=y(n(4)),i=y(n(7)),p=y(n(5)),s=y(n(6)),c=n(2),b=y(c),M=n(9),l=n(8),u=y(n(17)),d=y(n(13)),z=y(n(22)),f=y(n(651)),O=n(38),A=n(27),h=y(n(32)),m=y(n(29)),q=n(52),_=n(42),W=y(n(35)),g=n(24),v=n(21);function y(e){return e&&e.__esModule?e:{default:e}}var L=function(e){function t(){return(0,a.default)(this,t),(0,p.default)(this,(t.__proto__||(0,r.default)(t)).apply(this,arguments))}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){return b.default.createElement(h.default,{header:(0,l.translate)("Backups and security scanning",{context:"Settings header"}),hideButton:!0,action:"scan"},b.default.createElement(m.default,{disableInDevMode:!0,module:{module:"backups"},support:{text:(0,l.translate)("Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error."),link:"https://help.vaultpress.com/get-to-know/"}},(0,l.translate)("Checking site status…")))}}]),t}(c.Component),R=function(e){function t(){var e,n,o,i;(0,a.default)(this,t);for(var s=arguments.length,c=Array(s),M=0;M<s;M++)c[M]=arguments[M];return n=o=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(c))),o.getCardText=function(){return o.props.isDevMode?(0,l.translate)("Unavailable in Dev Mode."):b.default.createElement(f.default,{title:(0,l.translate)("Connected"),icon:"checkmark-circle",feature:"rewind",description:(0,l.translate)("Your site is being backed up in real time and regularly scanned for security threats."),className:"is-upgrade-premium jp-banner__no-border",href:"https://wordpress.com/activity-log/"+o.props.siteRawUrl})},i=n,(0,p.default)(o,i)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){return b.default.createElement(h.default,(0,o.default)({feature:"rewind"},this.props,{header:(0,l.translate)("Backups and security scanning",{context:"Settings header"}),action:"rewind",hideButton:!0}),this.getCardText())}}]),t}(c.Component),E=t.BackupsScan=(0,A.withModuleSettingsFormHelpers)(function(e){function t(){var e,n,o,i;(0,a.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=o=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(c))),o.toggleModule=function(e,t){o.props.updateFormStateOptionValue(e,!t)},o.trackConfigureClick=function(){d.default.tracks.recordJetpackClick("configure-scan")},i=n,(0,p.default)(o,i)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"getCardText",value:function(){var e=(0,z.default)(this.props.vaultPressData,["data","features","backups"],!1),t=(0,z.default)(this.props.vaultPressData,["data","features","security"],!1),n=(0,O.getPlanClass)(this.props.sitePlan.product_slug),o="";if(this.props.isDevMode)return(0,l.translate)("Unavailable in Dev Mode.");if(e&&t){var r=this.props.hasThreats;return r?b.default.createElement("div",null,b.default.createElement("strong",null,(0,l.translate)("Uh oh, %(number)s threat found.","Uh oh, %(number)s threats found.",{count:r,args:{number:(0,l.numberFormat)(r)}})),b.default.createElement("br",null),b.default.createElement("br",null),(0,l.translate)("{{a}}View details{{/a}}",{components:{a:b.default.createElement("a",{href:"https://dashboard.vaultpress.com/"})}}),b.default.createElement("br",null),(0,l.translate)("{{a}}Contact Support{{/a}}",{components:{a:b.default.createElement("a",{href:"https://jetpack.com/support"})}})):(0,l.translate)("Your site is backed up and threat-free.")}if(e&&(0,W.default)(["is-free-plan","is-personal-plan"],n))return(0,l.translate)("Your site is backed up.");switch(n){case"is-personal-plan":o=(0,l.translate)("You have paid for backups but they're not yet active."),o+=" "+(0,l.translate)('Click "Set Up" to finish installation.');break;case"is-premium-plan":case"is-business-plan":o=(0,l.translate)("You have paid for backups and security scanning but they’re not yet active."),o+=" "+(0,l.translate)('Click "Set Up" to finish installation.')}return o}},{key:"render",value:function(){if(!this.props.showBackups)return null;var e=(0,z.default)(this.props.vaultPressData,["data","features","security"],!1),t="active"===(0,z.default)(this.props.rewindStatus,["state"],!1),n=!1!==(0,z.default)(this.props.rewindStatus,["state"],!1),r="N/A"!==this.props.vaultPressData&&!1!==(0,z.default)(this.props.vaultPressData,["data"],!1);return!n||this.props.vaultPressActive&&!r?b.default.createElement(L,null):t?b.default.createElement(R,this.props):b.default.createElement(h.default,(0,o.default)({feature:O.FEATURE_SECURITY_SCANNING_JETPACK},this.props,{header:(0,l.translate)("Backups and security scanning",{context:"Settings header"}),action:"scan",hideButton:!0}),b.default.createElement(m.default,{disableInDevMode:!0,module:{module:"backups"},support:{text:(0,l.translate)("Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error."),link:"https://help.vaultpress.com/get-to-know/"}},this.getCardText()),!this.props.isUnavailableInDevMode("backups")&&e&&b.default.createElement(u.default,{compact:!0,className:"jp-settings-card__configure-link",onClick:this.trackConfigureClick,href:"https://dashboard.vaultpress.com/"},(0,l.translate)("Configure your Security Scans")))}}]),t}(c.Component));t.default=(0,M.connect)(function(e){return{sitePlan:(0,_.getSitePlan)(e),vaultPressData:(0,q.getVaultPressData)(e),hasThreats:(0,q.getVaultPressScanThreatCount)(e),vaultPressActive:(0,g.isModuleActivated)(e,"vaultpress"),showBackups:(0,v.showBackups)(e)}})(E)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Antispam=void 0;var o=R(n(10)),r=R(n(3)),a=R(n(4)),i=R(n(7)),p=R(n(5)),s=R(n(6)),c=n(2),b=R(c),M=n(9),l=n(8),u=R(n(386)),d=R(n(427)),z=R(n(905)),f=R(n(55)),O=R(n(417)),A=R(n(23)),h=R(n(183)),m=R(n(907)),q=n(52),_=n(38),W=R(n(13)),g=n(51),v=n(27),y=R(n(32)),L=R(n(29));function R(e){return e&&e.__esModule?e:{default:e}}var E=t.Antispam=(0,v.withModuleSettingsFormHelpers)(function(e){function t(){var e,n,o,i;(0,a.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=o=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(c))),o.state={apiKey:o.props.getOptionValue("wordpress_api_key"),delayKeyCheck:!1,currentEvent:{}},o.keyChanged=!1,o.checkApiKeyTyped=function(e){0<e.currentTarget.value.length&&o.props.checkAkismetKey(e.currentTarget.value),o.keyChanged=!0,o.setState({delayKeyCheck:!1})},o.updateText=function(e){var t=(0,A.default)({},e);t.currentTarget.value=(0,m.default)(t.currentTarget.value),o.setState({apiKey:t.currentTarget.value,delayKeyCheck:!0,currentEvent:t},o.debouncedCheckApiKeyTyped(t))},o.trackOpenCard=function(){W.default.tracks.recordJetpackClick({target:"foldable-settings-open",feature:"anti-spam"})},i=n,(0,p.default)(o,i)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"UNSAFE_componentWillMount",value:function(){this.debouncedCheckApiKeyTyped=(0,O.default)(this.checkApiKeyTyped,500)}},{key:"componentDidUpdate",value:function(){!this.props.isCheckingAkismetKey&&this.props.isAkismetKeyValid&&this.keyChanged&&!(0,h.default)(this.state.currentEvent)&&(this.keyChanged=!1,this.props.onOptionChange(this.state.currentEvent))}},{key:"render",value:function(){var e={name:"wordpress_api_key",value:this.state.apiKey,disabled:this.props.isSavingAnyOption("wordpress_api_key"),onChange:this.updateText},t="",n=(0,l.translate)("Checking your spam protection…"),r=!0;return null===this.props.isAkismetKeyValid?(e.value=(0,l.translate)("Fetching key…"),e.disabled=!0,r=!1):""===this.state.apiKey?(e.value="",n=(0,l.translate)("Your site needs an Antispam key.")):this.state.delayKeyCheck||this.props.isCheckingAkismetKey?this.props.isCheckingAkismetKey&&(t=b.default.createElement("div",{className:"form-input-validation is-warning"},b.default.createElement("span",null,b.default.createElement(f.default,{size:24,icon:"sync"}),(0,l.translate)("Checking key…"))),r=!1):!1===this.props.isAkismetKeyValid?(t=b.default.createElement(z.default,{isError:!0,text:(0,l.translate)("There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.",{components:{a:b.default.createElement("a",{href:"https://docs.akismet.com/getting-started/api-key/"})}})}),e.isError=!0,n=(0,l.translate)("Your site is not protected from spam.")):(t=b.default.createElement(z.default,{text:(0,l.translate)("Your Antispam key is valid.")}),e.isValid=!0,n=(0,l.translate)("Your site is protected from spam."),r=!1),b.default.createElement(y.default,(0,o.default)({},this.props,{header:(0,l.translate)("Spam filtering",{context:"Settings header"}),saveDisabled:this.props.isSavingAnyOption("wordpress_api_key"),feature:_.FEATURE_SPAM_AKISMET_PLUS}),b.default.createElement(d.default,{onOpen:this.trackOpenCard,header:n},b.default.createElement(L.default,{support:{text:(0,l.translate)("Removes spam from comments and contact forms."),link:"https://akismet.com/jetpack/"}},b.default.createElement(g.FormFieldset,null,b.default.createElement(g.FormLabel,null,b.default.createElement("span",{className:"jp-form-label-wide"},(0,l.translate)("Your API key")),b.default.createElement(u.default,e),t),r&&b.default.createElement("p",{className:"jp-form-setting-explanation"},(0,l.translate)("If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.",{components:{a:b.default.createElement("a",{href:"https://akismet.com/wordpress/"})}}))))))}}]),t}(c.Component));t.default=(0,M.connect)(function(e){return{isAkismetKeyValid:(0,q.isAkismetKeyValid)(e),isCheckingAkismetKey:(0,q.isCheckingAkismetKey)(e)}},function(e){return{checkAkismetKey:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e((0,q.checkAkismetKey)(t))}}})(E)},function(e,t,n){},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=s(n(3)),r=s(n(4)),a=s(n(7)),i=s(n(5)),p=s(n(6));function s(e){return e&&e.__esModule?e:{default:e}}var c=n(1),b=n(2),M=n(12),l=n(55);n(906);var u=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){var e=M({"form-input-validation":!0,"is-warning":this.props.isWarning,"is-error":this.props.isError}),t=this.props.isError||this.props.isWarning?"notice-outline":"checkmark";return b.createElement("div",{className:e},b.createElement("span",null,b.createElement(l,{size:24,icon:this.props.icon?this.props.icon:t})," ",this.props.text))}}]),t}(b.Component);u.displayName="FormInputValidation",u.propTypes={isError:c.bool,isWarning:c.bool,text:c.node,icon:c.string},u.defaultProps={isError:!1},t.default=u,e.exports=t.default},function(e,t,n){},function(e,t,n){var o=n(398),r=n(908),a=n(909),i=n(910),p=n(911),s=n(170),c=/^\s+|\s+$/g;e.exports=function(e,t,n){if((e=s(e))&&(n||void 0===t))return e.replace(c,"");if(!e||!(t=o(t)))return e;var b=p(e),M=p(t),l=i(b,M),u=a(b,M)+1;return r(b,l,u).join("")}},function(e,t,n){var o=n(385);e.exports=function(e,t,n){var r=e.length;return n=void 0===n?r:n,!t&&n>=r?e:o(e,t,n)}},function(e,t,n){var o=n(160);e.exports=function(e,t){for(var n=e.length;n--&&o(t,e[n],0)>-1;);return n}},function(e,t,n){var o=n(160);e.exports=function(e,t){for(var n=-1,r=e.length;++n<r&&o(t,e[n],0)>-1;);return n}},function(e,t,n){var o=n(912),r=n(711),a=n(913);e.exports=function(e){return r(e)?a(e):o(e)}},function(e,t){e.exports=function(e){return e.split("")}},function(e,t){var n="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",o="\\ud83c[\\udffb-\\udfff]",r="[^\\ud800-\\udfff]",a="(?:\\ud83c[\\udde6-\\uddff]){2}",i="[\\ud800-\\udbff][\\udc00-\\udfff]",p="(?:"+n+"|"+o+")?",s="[\\ufe0e\\ufe0f]?"+p+"(?:\\u200d(?:"+[r,a,i].join("|")+")[\\ufe0e\\ufe0f]?"+p+")*",c="(?:"+[r+n+"?",n,a,i,"[\\ud800-\\udfff]"].join("|")+")",b=RegExp(o+"(?="+o+")|"+c+s,"g");e.exports=function(e){return e.match(b)||[]}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ManagePlugins=void 0;var o=O(n(10)),r=O(n(3)),a=O(n(4)),i=O(n(7)),p=O(n(5)),s=O(n(6)),c=n(2),b=O(c),M=n(8),l=O(n(13)),u=O(n(17)),d=n(27),z=O(n(32)),f=O(n(29));function O(e){return e&&e.__esModule?e:{default:e}}t.ManagePlugins=(0,d.withModuleSettingsFormHelpers)(function(e){function t(){var e,n,o,i;(0,a.default)(this,t);for(var s=arguments.length,c=Array(s),d=0;d<s;d++)c[d]=arguments[d];return n=o=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(c))),o.trackOpenCard=function(){l.default.tracks.recordJetpackClick({target:"foldable-settings-open",feature:"manage-plugins"})},o.configLink=function(){if(!o.props.isUnavailableInDevMode("manage"))return b.default.createElement(u.default,{compact:!0,className:"jp-settings-card__configure-link",onClick:o.trackClickConfigure,target:"_blank",rel:"noopener noreferrer",href:"https://wordpress.com/plugins/manage/"+o.props.siteRawUrl},(0,M.translate)("Manage your plugins"))},i=n,(0,p.default)(o,i)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"trackClickConfigure",value:function(){l.default.tracks.recordJetpackClick({target:"configure-plugins",page:"plugins-manage"})}},{key:"render",value:function(){return b.default.createElement(z.default,(0,o.default)({},this.props,{module:"manage",header:(0,M.translate)("Plugin Autoupdates",{context:"Settings header"}),hideButton:!0}),b.default.createElement(f.default,{disableInDevMode:!0,module:this.props.getModule("manage")},b.default.createElement("p",null,(0,M.translate)("When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure."))),this.configLink())}}]),t}(c.Component))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Monitor=void 0;var o=A(n(10)),r=A(n(3)),a=A(n(4)),i=A(n(7)),p=A(n(5)),s=A(n(6)),c=n(2),b=A(c),M=n(8),l=A(n(13)),u=A(n(17)),d=n(43),z=n(27),f=A(n(32)),O=A(n(29));function A(e){return e&&e.__esModule?e:{default:e}}t.Monitor=(0,z.withModuleSettingsFormHelpers)(function(e){function t(){var e,n,o,i;(0,a.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=o=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(c))),o.trackConfigureClick=function(){l.default.tracks.recordJetpackClick("configure-monitor")},i=n,(0,p.default)(o,i)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e=this.props.getOptionValue("monitor"),t=this.props.isUnavailableInDevMode("monitor");return b.default.createElement(f.default,(0,o.default)({},this.props,{hideButton:!0,module:"monitor",header:(0,M.translate)("Downtime monitoring",{context:"Settings header"})}),b.default.createElement(O.default,{hasChild:!0,disableInDevMode:!0,module:this.props.getModule("monitor"),support:{text:(0,M.translate)("Jetpack will continuously monitor your site, and alert you the moment downtime is detected."),link:"https://jetpack.com/support/monitor/"}},b.default.createElement(d.ModuleToggle,{slug:"monitor",disabled:t,activated:e,toggling:this.props.isSavingAnyOption("monitor"),toggleModule:this.props.toggleModuleNow},b.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,M.translate)("Monitor your site's downtime")))),b.default.createElement(u.default,{compact:!0,className:"jp-settings-card__configure-link",onClick:this.trackConfigureClick,href:"https://wordpress.com/settings/security/"+this.props.siteRawUrl},(0,M.translate)("Configure your notification settings")))}}]),t}(c.Component))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Protect=void 0;var o=W(n(10)),r=W(n(3)),a=W(n(4)),i=W(n(7)),p=W(n(5)),s=W(n(6)),c=n(2),b=W(c),M=n(8),l=W(n(33)),u=W(n(714)),d=W(n(35)),z=W(n(427)),f=W(n(12)),O=W(n(13)),A=n(51),h=n(43),m=n(27),q=W(n(32)),_=W(n(29));function W(e){return e&&e.__esModule?e:{default:e}}t.Protect=(0,m.withModuleSettingsFormHelpers)(function(e){function t(){var e,n,o,i;(0,a.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=o=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(c))),o.state={whitelist:o.props.getOptionValue("jetpack_protect_global_whitelist")?o.props.getOptionValue("jetpack_protect_global_whitelist").local:""},o.currentIpIsWhitelisted=function(){return!!(0,d.default)(o.state.whitelist,o.props.currentIp)},o.updateText=function(e){o.currentIpIsWhitelisted(),o.setState({whitelist:e.target.value}),o.props.onOptionChange(e)},o.addToWhitelist=function(){var e=o.state.whitelist+(0>=o.state.whitelist.length?"":"\n")+o.props.currentIp;o.props.updateFormStateOptionValue("jetpack_protect_global_whitelist",e),o.setState({whitelist:e}),O.default.tracks.recordJetpackClick({target:"add-to-whitelist",feature:"protect"})},o.trackOpenCard=function(){O.default.tracks.recordJetpackClick({target:"foldable-settings-open",feature:"protect"})},i=n,(0,p.default)(o,i)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e=this.props.getOptionValue("protect"),t=this.props.isUnavailableInDevMode("protect"),n=b.default.createElement(h.ModuleToggle,{slug:"protect",compact:!0,disabled:t,activated:e,toggling:this.props.isSavingAnyOption("protect"),toggleModule:this.props.toggleModuleNow},b.default.createElement("span",{className:"jp-form-toggle-explanation"},this.props.getModule("protect").description));return b.default.createElement(q.default,(0,o.default)({},this.props,{module:"protect",header:(0,M.translate)("Brute force attack protection",{context:"Settings header"}),saveDisabled:this.props.isSavingAnyOption("jetpack_protect_global_whitelist")}),b.default.createElement(z.default,{onOpen:this.trackOpenCard,header:n,className:(0,f.default)({"jp-foldable-settings-disable":t})},b.default.createElement(_.default,{hasChild:!0,disableInDevMode:!0,module:this.props.getModule("protect"),support:{text:(0,M.translate)("Protects your site from traditional and distributed brute force login attacks."),link:"https://jetpack.com/support/protect/"}},b.default.createElement(A.FormFieldset,null,this.props.currentIp&&b.default.createElement("div",null,b.default.createElement("div",{className:"jp-form-label-wide"},(0,M.translate)("Your current IP: %(ip)s",{args:{ip:this.props.currentIp}})),b.default.createElement(l.default,{disabled:!e||t||this.currentIpIsWhitelisted()||this.props.isSavingAnyOption(["protect","jetpack_protect_global_whitelist"]),onClick:this.addToWhitelist},(0,M.translate)("Add to whitelist"))),b.default.createElement(A.FormLabel,null,b.default.createElement(A.FormLegend,null,(0,M.translate)("Whitelisted IP addresses")),b.default.createElement(u.default,{disabled:!e||t||this.props.isSavingAnyOption(["protect","jetpack_protect_global_whitelist"]),name:"jetpack_protect_global_whitelist",placeholder:"Example: 12.12.12.1-12.12.12.100",onChange:this.updateText,value:this.state.whitelist})),b.default.createElement("span",{className:"jp-form-setting-explanation"},(0,M.translate)("You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100",{components:{br:b.default.createElement("br",null)}}))))))}}]),t}(c.Component))},function(e,t,n){},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SSO=void 0;var o=h(n(10)),r=h(n(47)),a=h(n(3)),i=h(n(4)),p=h(n(7)),s=h(n(5)),c=h(n(6)),b=n(2),M=h(b),l=n(8),u=h(n(78)),d=n(51),z=n(43),f=n(27),O=h(n(32)),A=h(n(29));function h(e){return e&&e.__esModule?e:{default:e}}t.SSO=(0,f.withModuleSettingsFormHelpers)(function(e){function t(){var e,n,o,p;(0,i.default)(this,t);for(var c=arguments.length,b=Array(c),M=0;M<c;M++)b[M]=arguments[M];return n=o=(0,s.default)(this,(e=t.__proto__||(0,a.default)(t)).call.apply(e,[this].concat(b))),o.state={jetpack_sso_match_by_email:o.props.getOptionValue("jetpack_sso_match_by_email","sso"),jetpack_sso_require_two_step:o.props.getOptionValue("jetpack_sso_require_two_step","sso")},o.handleTwoStepToggleChange=function(){o.updateOptions("jetpack_sso_require_two_step")},o.handleMatchByEmailToggleChange=function(){o.updateOptions("jetpack_sso_match_by_email")},o.updateOptions=function(e){o.setState((0,r.default)({},e,!o.state[e]),o.props.updateFormStateModuleOption("sso",e))},p=n,(0,s.default)(o,p)}return(0,c.default)(t,e),(0,p.default)(t,[{key:"render",value:function(){var e=this.props.getOptionValue("sso"),t=this.props.isUnavailableInDevMode("sso");return M.default.createElement(O.default,(0,o.default)({},this.props,{hideButton:!0,module:"sso",header:(0,l.translate)("WordPress.com log in",{context:"Settings header"})}),M.default.createElement(A.default,{hasChild:!0,disableInDevMode:!0,module:this.props.getModule("sso"),support:{text:(0,l.translate)("Allows registered users to log in to your site with their WordPress.com accounts."),link:"https://jetpack.com/support/sso/"}},M.default.createElement("p",null,(0,l.translate)("Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.")),M.default.createElement(z.ModuleToggle,{slug:"sso",disabled:t,activated:e,toggling:this.props.isSavingAnyOption("sso"),toggleModule:this.props.toggleModuleNow},M.default.createElement("span",{className:"jp-form-toggle-explanation"},this.props.getModule("sso").description)),M.default.createElement(d.FormFieldset,null,M.default.createElement(u.default,{checked:this.state.jetpack_sso_match_by_email,disabled:!e||t||this.props.isSavingAnyOption(["sso","jetpack_sso_match_by_email"]),onChange:this.handleMatchByEmailToggleChange},M.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,l.translate)("Match accounts using email addresses"))),M.default.createElement(u.default,{checked:this.state.jetpack_sso_require_two_step,disabled:!e||t||this.props.isSavingAnyOption(["sso","jetpack_sso_require_two_step"]),onChange:this.handleTwoStepToggleChange},M.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,l.translate)("Require accounts to use WordPress.com Two-Step Authentication"))))))}}]),t}(b.Component))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=_(n(3)),r=_(n(4)),a=_(n(7)),i=_(n(5)),p=_(n(6)),s=n(2),c=_(s),b=n(9),M=n(8),l=_(n(17)),u=n(24),d=n(86),z=n(20),f=n(56),O=n(21),A=_(n(125)),h=n(920),m=n(921),q=n(922);function _(e){return e&&e.__esModule?e:{default:e}}var W=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){var e={settings:this.props.settings,getModule:this.props.module,isDevMode:this.props.isDevMode,isUnavailableInDevMode:this.props.isUnavailableInDevMode,isLinked:this.props.isLinked,connectUrl:this.props.connectUrl,siteRawUrl:this.props.siteRawUrl,siteAdminUrl:this.props.siteAdminUrl,userCanManageModules:this.props.userCanManageModules},t=this.props.isModuleFound("publicize"),n=this.props.isModuleFound("sharedaddy"),o=this.props.isModuleFound("likes");return(this.props.searchTerm||this.props.active)&&(t||n||o)?c.default.createElement("div",null,c.default.createElement(A.default,null),c.default.createElement(l.default,{title:(0,M.translate)("Share your content on social media and increase audience engagement."),className:"jp-settings-description"}),t&&c.default.createElement(h.Publicize,e),n&&c.default.createElement(m.ShareButtons,e),o&&c.default.createElement(q.Likes,e)):null}}]),t}(s.Component);t.default=(0,b.connect)(function(e){return{module:function(t){return(0,u.getModule)(e,t)},settings:(0,d.getSettings)(e),isDevMode:(0,z.isDevMode)(e),isUnavailableInDevMode:function(t){return(0,z.isUnavailableInDevMode)(e,t)},isModuleFound:function(t){return(0,f.isModuleFound)(e,t)},isLinked:(0,z.isCurrentUserLinked)(e),connectUrl:(0,z.getConnectUrl)(e),siteRawUrl:(0,O.getSiteRawUrl)(e),siteAdminUrl:(0,O.getSiteAdminUrl)(e),userCanManageModules:(0,O.userCanManageModules)(e)}})(W),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Publicize=void 0;var o=A(n(10)),r=A(n(3)),a=A(n(4)),i=A(n(7)),p=A(n(5)),s=A(n(6)),c=n(2),b=A(c),M=n(8),l=A(n(17)),u=A(n(13)),d=n(27),z=A(n(32)),f=A(n(29)),O=n(43);function A(e){return e&&e.__esModule?e:{default:e}}t.Publicize=(0,d.withModuleSettingsFormHelpers)(function(e){function t(){return(0,a.default)(this,t),(0,p.default)(this,(t.__proto__||(0,r.default)(t)).apply(this,arguments))}return(0,s.default)(t,e),(0,i.default)(t,[{key:"trackClickConfigure",value:function(){u.default.tracks.recordJetpackClick({target:"configure-publicize",page:"sharing"})}},{key:"render",value:function(){var e=this,t=this.props.isUnavailableInDevMode("publicize"),n=this.props.isLinked,r=this.props.connectUrl,a=this.props.siteRawUrl,i=this.props.getOptionValue("publicize"),p=this.props.userCanManageModules;return p||i?b.default.createElement(z.default,(0,o.default)({},this.props,{header:(0,M.translate)("Publicize connections",{context:"Settings header"}),module:"publicize",hideButton:!0}),p&&b.default.createElement(f.default,{disableInDevMode:!0,module:{module:"publicize"},support:{text:(0,M.translate)("Allows you to automatically share your newest content on social media sites, including Facebook and Twitter."),link:"https://jetpack.com/support/publicize/"}},b.default.createElement("p",null,(0,M.translate)("Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.")),b.default.createElement(O.ModuleToggle,{slug:"publicize",disabled:t,activated:i,toggling:this.props.isSavingAnyOption("publicize"),toggleModule:this.props.toggleModuleNow},(0,M.translate)("Automatically share your posts to social networks"))),i&&function(){if(!t)return n?b.default.createElement(l.default,{compact:!0,className:"jp-settings-card__configure-link",onClick:e.trackClickConfigure,target:"_blank",rel:"noopener noreferrer",href:"https://wordpress.com/sharing/"+a},(0,M.translate)("Connect your social media accounts")):b.default.createElement(l.default,{compact:!0,className:"jp-settings-card__configure-link",target:"_blank",rel:"noopener noreferrer",href:r+"&from=unlinked-user-connect-publicize"},(0,M.translate)("Create a Jetpack account to use this feature"))}()):null}}]),t}(c.Component))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ShareButtons=void 0;var o=A(n(10)),r=A(n(3)),a=A(n(4)),i=A(n(7)),p=A(n(5)),s=A(n(6)),c=n(2),b=A(c),M=n(8),l=A(n(17)),u=A(n(13)),d=n(27),z=A(n(32)),f=A(n(29)),O=n(43);function A(e){return e&&e.__esModule?e:{default:e}}t.ShareButtons=(0,d.withModuleSettingsFormHelpers)(function(e){function t(){return(0,a.default)(this,t),(0,p.default)(this,(t.__proto__||(0,r.default)(t)).apply(this,arguments))}return(0,s.default)(t,e),(0,i.default)(t,[{key:"trackClickConfigure",value:function(){u.default.tracks.recordJetpackClick({target:"configure-sharing",page:"sharing"})}},{key:"render",value:function(){var e=this.props.isLinked,t=this.props.connectUrl,n=this.props.siteRawUrl,r=this.props.siteAdminUrl,a=this.props.isDevMode,i=this.props.getOptionValue("sharedaddy");return b.default.createElement(z.default,(0,o.default)({},this.props,{header:(0,M.translate)("Sharing buttons",{context:"Settings header"}),module:"sharing",hideButton:!0}),b.default.createElement(f.default,{disableInDevMode:!0,module:{module:"sharing"},support:{text:(0,M.translate)("Adds sharing buttons to your content so that visitors can share it on social media sites."),link:"https://jetpack.com/support/sharing/"}},b.default.createElement(O.ModuleToggle,{slug:"sharedaddy",activated:i,toggling:this.props.isSavingAnyOption("sharedaddy"),toggleModule:this.props.toggleModuleNow},(0,M.translate)("Add sharing buttons to your posts"))),i&&(a?b.default.createElement(l.default,{compact:!0,className:"jp-settings-card__configure-link",href:r+"options-general.php?page=sharing"},(0,M.translate)("Configure your sharing buttons")):e?b.default.createElement(l.default,{compact:!0,className:"jp-settings-card__configure-link",onClick:this.trackClickConfigure,target:"_blank",rel:"noopener noreferrer",href:"https://wordpress.com/sharing/buttons/"+n},(0,M.translate)("Configure your sharing buttons")):b.default.createElement(l.default,{compact:!0,className:"jp-settings-card__configure-link",target:"_blank",rel:"noopener noreferrer",href:t+"&from=unlinked-user-connect-sharing"},(0,M.translate)("Create a Jetpack account to use this feature"))))}}]),t}(c.Component))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Likes=void 0;var o=f(n(10)),r=f(n(3)),a=f(n(4)),i=f(n(7)),p=f(n(5)),s=f(n(6)),c=n(2),b=f(c),M=n(8),l=n(27),u=f(n(32)),d=f(n(29)),z=n(43);function f(e){return e&&e.__esModule?e:{default:e}}t.Likes=(0,l.withModuleSettingsFormHelpers)(function(e){function t(){return(0,a.default)(this,t),(0,p.default)(this,(t.__proto__||(0,r.default)(t)).apply(this,arguments))}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e=this.props.isUnavailableInDevMode("likes"),t=this.props.getOptionValue("likes");return b.default.createElement(u.default,(0,o.default)({},this.props,{header:(0,M.translate)("Like buttons",{context:"Settings header"}),module:"likes",hideButton:!0}),b.default.createElement(d.default,{disableInDevMode:!0,module:{module:"likes"},support:{text:(0,M.translate)("Adds like buttons to your content so that visitors can show their appreciation or enjoyment."),link:"https://jetpack.com/support/likes/"}},b.default.createElement("p",null,(0,M.translate)("When visitors enjoy your content, let them show it with a Like.")),b.default.createElement(z.ModuleToggle,{slug:"likes",disabled:e,activated:t,toggling:this.props.isSavingAnyOption("likes"),toggleModule:this.props.toggleModuleNow},(0,M.translate)("Add Like buttons to your posts and pages"))))}}]),t}(c.Component))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Traffic=void 0;var o=y(n(10)),r=y(n(3)),a=y(n(4)),i=y(n(7)),p=y(n(5)),s=y(n(6)),c=y(n(2)),b=n(9),M=n(8),l=y(n(17)),u=n(24),d=n(86),z=n(20),f=n(56),O=y(n(125)),A=n(924),h=n(925),m=n(926),q=n(927),_=n(928),W=n(929),g=y(n(935)),v=n(21);function y(e){return e&&e.__esModule?e:{default:e}}var L=t.Traffic=function(e){function t(){return(0,a.default)(this,t),(0,p.default)(this,(t.__proto__||(0,r.default)(t)).apply(this,arguments))}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e={settings:this.props.settings,siteRawUrl:this.props.siteRawUrl,getModule:this.props.module,isDevMode:this.props.isDevMode,isUnavailableInDevMode:this.props.isUnavailableInDevMode,getModuleOverride:this.props.getModuleOverride},t=this.props.isModuleFound("seo-tools"),n=this.props.isModuleFound("wordads"),r=this.props.isModuleFound("stats"),a=this.props.isModuleFound("related-posts"),i=this.props.isModuleFound("verification-tools"),p=this.props.isModuleFound("sitemaps"),s=this.props.isModuleFound("google-analytics");return(this.props.searchTerm||this.props.active)&&(t||n||r||a||i||p||s)?c.default.createElement("div",null,c.default.createElement(O.default,null),c.default.createElement(l.default,{title:(0,M.translate)("Maximize your site’s visibility in search engines and view traffic stats in real time."),className:"jp-settings-description"}),n&&c.default.createElement(m.Ads,(0,o.default)({},e,{configureUrl:"https://wordpress.com/ads/earnings/"+this.props.siteRawUrl})),a&&c.default.createElement(_.RelatedPosts,(0,o.default)({},e,{configureUrl:this.props.siteAdminUrl+"customize.php?autofocus[section]=jetpack_relatedposts&return="+encodeURIComponent(this.props.siteAdminUrl+"admin.php?page=jetpack#/traffic")+"&url="+encodeURIComponent(this.props.lastPostUrl)})),t&&c.default.createElement(A.SEO,(0,o.default)({},e,{configureUrl:"https://wordpress.com/settings/traffic/"+this.props.siteRawUrl+"#seo"})),s&&c.default.createElement(h.GoogleAnalytics,(0,o.default)({},e,{configureUrl:"https://wordpress.com/settings/traffic/"+this.props.siteRawUrl+"#analytics"})),r&&c.default.createElement(q.SiteStats,e),p&&c.default.createElement(g.default,e),i&&c.default.createElement(W.VerificationServices,e)):null}}]),t}(c.default.Component);L.displayName="TrafficSettings",t.default=(0,b.connect)(function(e){return{module:function(t){return(0,u.getModule)(e,t)},settings:(0,d.getSettings)(e),isDevMode:(0,z.isDevMode)(e),isUnavailableInDevMode:function(t){return(0,z.isUnavailableInDevMode)(e,t)},isModuleFound:function(t){return(0,f.isModuleFound)(e,t)},lastPostUrl:(0,v.getLastPostUrl)(e),getModuleOverride:function(t){return(0,u.getModuleOverride)(e,t)}}})(L)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SEO=void 0;var o=O(n(10)),r=O(n(3)),a=O(n(4)),i=O(n(7)),p=O(n(5)),s=O(n(6)),c=O(n(2)),b=n(8),M=O(n(17)),l=O(n(13)),u=n(38),d=n(27),z=O(n(32)),f=O(n(29));function O(e){return e&&e.__esModule?e:{default:e}}var A=function(e){function t(){var e,n,o,i;(0,a.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=o=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(c))),o.trackConfigureClick=function(){l.default.tracks.recordJetpackClick("configure-seo")},i=n,(0,p.default)(o,i)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){return c.default.createElement(z.default,(0,o.default)({},this.props,{header:(0,b.translate)("Search engine optimization",{context:"Settings header"}),feature:u.FEATURE_SEO_TOOLS_JETPACK,hideButton:!0}),c.default.createElement(f.default,{disableInDevMode:!0,module:{module:"seo-tools"},support:{text:(0,b.translate)("Allows you to optimize your site and its content for better results in search engines."),link:"https://jetpack.com/support/seo-tools/"}},c.default.createElement("span",null,(0,b.translate)("You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.",{components:{a:c.default.createElement("a",{href:"https://jetpack.com/support/seo-tools/"})}}))),!this.props.isUnavailableInDevMode("seo-tools")&&c.default.createElement(M.default,{compact:!0,className:"jp-settings-card__configure-link",onClick:this.trackConfigureClick,href:this.props.configureUrl},(0,b.translate)("Configure your SEO settings")))}}]),t}(c.default.Component);t.SEO=(0,d.withModuleSettingsFormHelpers)(A)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.GoogleAnalytics=void 0;var o=A(n(10)),r=A(n(3)),a=A(n(4)),i=A(n(7)),p=A(n(5)),s=A(n(6)),c=n(2),b=A(c),M=n(8),l=A(n(17)),u=A(n(13)),d=n(38),z=n(27),f=A(n(32)),O=A(n(29));function A(e){return e&&e.__esModule?e:{default:e}}t.GoogleAnalytics=(0,z.withModuleSettingsFormHelpers)(function(e){function t(){return(0,a.default)(this,t),(0,p.default)(this,(t.__proto__||(0,r.default)(t)).apply(this,arguments))}return(0,s.default)(t,e),(0,i.default)(t,[{key:"trackConfigureClick",value:function(){u.default.tracks.recordJetpackClick("configure-ga")}},{key:"render",value:function(){return b.default.createElement(f.default,(0,o.default)({},this.props,{header:(0,M.translate)("Google Analytics",{context:"Settings header"}),feature:d.FEATURE_GOOGLE_ANALYTICS_JETPACK,hideButton:!0}),b.default.createElement(O.default,{disableInDevMode:!0,module:{module:"google-analytics"},support:{text:(0,M.translate)("Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions."),link:"https://jetpack.com/support/google-analytics/"}},b.default.createElement("p",null,(0,M.translate)("Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.",{components:{a:b.default.createElement("a",{href:"https://wordpress.com/stats/day/"+this.props.siteRawUrl})}}))),!this.props.isUnavailableInDevMode("google-analytics")&&b.default.createElement(l.default,{compact:!0,className:"jp-settings-card__configure-link",onClick:this.trackConfigureClick,href:this.props.configureUrl},(0,M.translate)("Configure your Google Analytics settings")))}}]),t}(c.Component))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Ads=void 0;var o=q(n(10)),r=q(n(3)),a=q(n(4)),i=q(n(7)),p=q(n(5)),s=q(n(6)),c=q(n(2)),b=n(8),M=q(n(17)),l=q(n(78)),u=q(n(13)),d=n(38),z=n(51),f=q(n(714)),O=n(27),A=n(43),h=q(n(32)),m=q(n(29));function q(e){return e&&e.__esModule?e:{default:e}}t.Ads=(0,O.withModuleSettingsFormHelpers)(function(e){function t(){var e,n,o,i;(0,a.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=o=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(c))),o.updateOptions=function(e){o.props.updateFormStateModuleOption("wordads",e)},o.trackConfigureClick=function(){u.default.tracks.recordJetpackClick("view-earnings")},o.trackConfigureWidgetClick=function(){u.default.tracks.recordJetpackClick("place_ad_widget")},o.handleChange=function(e){return function(){return o.updateOptions(e)}},i=n,(0,p.default)(o,i)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e=this.props.getOptionValue("wordads"),t=this.props.isUnavailableInDevMode("wordads"),n=this.props.getOptionValue("enable_header_ad","wordads"),r=this.props.getOptionValue("wordads_second_belowpost","wordads"),a=this.props.getOptionValue("wordads_display_front_page","wordads"),i=this.props.getOptionValue("wordads_display_post","wordads"),p=this.props.getOptionValue("wordads_display_page","wordads"),s=this.props.getOptionValue("wordads_display_archive","wordads"),u=this.props.getOptionValue("wordads_custom_adstxt","wordads"),O=-1!==this.props.siteRawUrl.indexOf("::");return c.default.createElement(h.default,(0,o.default)({},this.props,{header:(0,b.translate)("Ads",{context:"Ads header"}),feature:d.FEATURE_WORDADS_JETPACK,saveDisabled:this.props.isSavingAnyOption(["wordads_custom_adstxt"])}),c.default.createElement(m.default,{disableInDevMode:!0,hasChild:!0,module:{module:"wordads"},support:{text:(0,b.translate)("Displays high-quality ads on your site that allow you to earn income."),link:"https://jetpack.com/support/ads/"}},c.default.createElement("p",null,(0,b.translate)("Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings."),c.default.createElement("br",null),c.default.createElement("small",{className:"jp-form-setting-explanation"},(0,b.translate)("By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.",{components:{link:c.default.createElement("a",{href:"https://wordpress.com/automattic-ads-tos/",target:"_blank",rel:"noopener noreferrer",onClick:this.trackConfigureWidgetClick})}}))),c.default.createElement(A.ModuleToggle,{slug:"wordads",disabled:t,activated:e,toggling:this.props.isSavingAnyOption("wordads"),toggleModule:this.props.toggleModuleNow},c.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,b.translate)("Enable ads and display an ad below each post"))),c.default.createElement(z.FormFieldset,null,c.default.createElement(z.FormLegend,null,(0,b.translate)("Display ads below posts on")),c.default.createElement(l.default,{checked:a,disabled:!e||t||this.props.isSavingAnyOption(["wordads","wordads_display_front_page"]),onChange:this.handleChange("wordads_display_front_page")},c.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,b.translate)("Front page"))),c.default.createElement(l.default,{checked:i,disabled:!e||t||this.props.isSavingAnyOption(["wordads","wordads_display_post"]),onChange:this.handleChange("wordads_display_post")},c.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,b.translate)("Posts"))),c.default.createElement(l.default,{checked:p,disabled:!e||t||this.props.isSavingAnyOption(["wordads","wordads_display_page"]),onChange:this.handleChange("wordads_display_page")},c.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,b.translate)("Pages"))),c.default.createElement(l.default,{checked:s,disabled:!e||t||this.props.isSavingAnyOption(["wordads","wordads_display_archive"]),onChange:this.handleChange("wordads_display_archive")},c.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,b.translate)("Archives")))),c.default.createElement(z.FormFieldset,null,c.default.createElement(z.FormLegend,null,(0,b.translate)("Additional ad placements")),c.default.createElement(l.default,{checked:n,disabled:!e||t||this.props.isSavingAnyOption(["wordads","enable_header_ad"]),onChange:this.handleChange("enable_header_ad")},c.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,b.translate)("Top of each page"))),c.default.createElement(l.default,{checked:r,disabled:!e||t||this.props.isSavingAnyOption(["wordads","wordads_second_belowpost"]),onChange:this.handleChange("wordads_second_belowpost")},c.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,b.translate)("Second ad below post"))),c.default.createElement("small",{className:"jp-form-setting-explanation"},e&&(0,b.translate)("You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}",{components:{link:c.default.createElement("a",{className:"jp-module-settings__external-link",href:"customize.php?autofocus[panel]=widgets"})}}))),!O&&c.default.createElement(z.FormFieldset,null,c.default.createElement(z.FormLegend,null,(0,b.translate)("Custom ads.txt entries")),c.default.createElement("p",null,e&&(0,b.translate)("Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.",{components:{link:c.default.createElement("a",{href:"/ads.txt",target:"_blank",rel:"noopener noreferrer"})}}),!e&&(0,b.translate)("When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.")),c.default.createElement(f.default,{name:"wordads_custom_adstxt",value:u,disabled:!e||t||this.props.isSavingAnyOption(["wordads","wordads_custom_adstxt"]),onChange:this.props.onOptionChange}))),!t&&e&&c.default.createElement(M.default,{compact:!0,className:"jp-settings-card__configure-link",onClick:this.trackConfigureClick,href:this.props.configureUrl},(0,b.translate)("View your earnings")))}}]),t}(c.default.Component))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SiteStats=void 0;var o=L(n(10)),r=L(n(84)),a=L(n(47)),i=L(n(3)),p=L(n(4)),s=L(n(7)),c=L(n(5)),b=L(n(6)),M=L(n(2)),l=n(8),u=L(n(78)),d=L(n(427)),z=L(n(33)),f=L(n(17)),O=L(n(35)),A=L(n(378)),h=L(n(12)),m=n(67),q=L(n(13)),_=n(51),W=n(27),g=L(n(29)),v=L(n(32)),y=L(n(426));function L(e){return e&&e.__esModule?e:{default:e}}var R=function(e){function t(e){(0,p.default)(this,t);var n=(0,c.default)(this,(t.__proto__||(0,i.default)(t)).call(this,e));n.updateOptions=function(e,t){var o=n.props.getOptionValue(t,"stats"),r=!1;n.state[t+"_"+e]?(0,O.default)(o,e)&&(o=(0,A.default)(o,function(t){return t!==e})):(0,O.default)(o,e)||(o.push(e),r=!0),n.setState((0,a.default)({},t+"_"+e,!n.state[t+"_"+e]),function(){n.props.updateOptions((0,a.default)({},t,o))}),q.default.tracks.recordEvent("jetpack_wpa_settings_toggle",{module:"stats",setting:t,role:e,toggled:r?"on":"off"})},n.activateStats=function(){n.props.updateOptions({stats:!0})},n.trackOpenCard=function(){q.default.tracks.recordJetpackClick({target:"foldable-settings-open",feature:"stats"})},n.handleRoleToggleChange=function(e,t){return function(){return n.updateOptions(e,t)}};var o=e.getOptionValue("count_roles","stats"),r=e.getOptionValue("roles","stats");return n.state={count_roles:o,roles:r,count_roles_administrator:(0,O.default)(o,"administrator",!1),count_roles_editor:(0,O.default)(o,"editor",!1),count_roles_author:(0,O.default)(o,"author",!1),count_roles_contributor:(0,O.default)(o,"contributor",!1),count_roles_subscriber:(0,O.default)(o,"subscriber",!1),roles_administrator:!0,roles_editor:(0,O.default)(r,"editor",!1),roles_author:(0,O.default)(r,"author",!1),roles_contributor:(0,O.default)(r,"contributor",!1),roles_subscriber:(0,O.default)(r,"subscriber",!1)},n}return(0,b.default)(t,e),(0,s.default)(t,[{key:"handleStatsOptionToggle",value:function(e){var t=this;return function(){return t.props.updateFormStateModuleOption("stats",e)}}},{key:"render",value:function(){var e=this,t=this.props.getModule("stats"),n=this.props.getOptionValue("stats"),a=this.props.isUnavailableInDevMode("stats"),i=this.props.getSiteRoles();return"inactive"===this.props.getModuleOverride("stats")?M.default.createElement(y.default,{moduleName:t.name}):n?M.default.createElement(v.default,(0,o.default)({},this.props,{header:(0,l.translate)("Site stats",{context:"Settings header"}),hideButton:!0}),M.default.createElement(d.default,{onOpen:this.trackOpenCard,header:(0,l.translate)("Collecting valuable traffic stats and insights"),clickableHeader:!0,className:(0,h.default)("jp-foldable-settings-standalone",{"jp-foldable-settings-disable":a})},M.default.createElement(g.default,{disableInDevMode:!0,module:t,support:{text:(0,l.translate)("Displays information on your site activity, including visitors and popular posts or pages."),link:"https://jetpack.com/support/wordpress-com-stats/"}},M.default.createElement(_.FormFieldset,null,M.default.createElement(u.default,{checked:!!this.props.getOptionValue("admin_bar"),disabled:!n||a,toggling:this.props.isSavingAnyOption(["stats","admin_bar"]),onChange:this.handleStatsOptionToggle("admin_bar")},M.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,l.translate)("Put a chart showing 48 hours of views in the admin bar"))),M.default.createElement(u.default,{checked:!!this.props.getOptionValue("hide_smile"),disabled:!n||a,toggling:this.props.isSavingAnyOption(["stats","hide_smile"]),onChange:this.handleStatsOptionToggle("hide_smile")},M.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,l.translate)("Hide the stats smiley face image")),M.default.createElement("span",{className:"jp-form-setting-explanation"},(0,l.translate)("The image helps collect stats, but should work when hidden.")))),M.default.createElement(_.FormFieldset,null,M.default.createElement(_.FormLegend,null,(0,l.translate)("Count logged in page views from")),(0,r.default)(i).map(function(t){return M.default.createElement(u.default,{checked:e.state["count_roles_"+t],disabled:!n||a||e.props.isSavingAnyOption(["stats","count_roles"]),onChange:e.handleRoleToggleChange(t,"count_roles"),key:"count_roles-"+t},M.default.createElement("span",{className:"jp-form-toggle-explanation"},i[t].name))})),M.default.createElement(_.FormFieldset,null,M.default.createElement(_.FormLegend,null,(0,l.translate)("Allow stats reports to be viewed by")),M.default.createElement(u.default,{checked:!0,disabled:!0},M.default.createElement("span",{className:"jp-form-toggle-explanation"},i.administrator.name)),(0,r.default)(i).map(function(t){return"administrator"!==t&&M.default.createElement(u.default,{checked:e.state["roles_"+t],disabled:!n||a||e.props.isSavingAnyOption(["stats","roles"]),onChange:e.handleRoleToggleChange(t,"roles"),key:"roles-"+t},M.default.createElement("span",{className:"jp-form-toggle-explanation"},i[t].name))}))))):M.default.createElement(f.default,{className:"jp-at-a-glance__stats-card "+(this.props.isDevMode?"is-inactive":"")},M.default.createElement("div",{className:"jp-at-a-glance__stats-inactive"},M.default.createElement("div",{className:"jp-at-a-glance__stats-inactive-icon"},M.default.createElement("img",{src:m.imagePath+"stats.svg",width:"60",height:"60",alt:(0,l.translate)("Jetpack Stats Icon"),className:"jp-at-a-glance__stats-icon"})),M.default.createElement("div",{className:"jp-at-a-glance__stats-inactive-text"},this.props.isDevMode?(0,l.translate)("Unavailable in Dev Mode"):(0,l.translate)("{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}",{components:{a:M.default.createElement("a",{href:"javascript:void(0)",onClick:this.activateStats}),a1:M.default.createElement("a",{href:"https://jetpack.com/support/wordpress-com-stats/",target:"_blank",rel:"noopener noreferrer"})}})),!this.props.isDevMode&&M.default.createElement("div",{className:"jp-at-a-glance__stats-inactive-button"},M.default.createElement(z.default,{onClick:this.activateStats,primary:!0},(0,l.translate)("Activate Site Stats")))))}}]),t}(M.default.Component);t.SiteStats=(0,W.withModuleSettingsFormHelpers)(R)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.RelatedPosts=void 0;var o=m(n(10)),r=m(n(47)),a=m(n(3)),i=m(n(4)),p=m(n(7)),s=m(n(5)),c=m(n(6)),b=m(n(13)),M=m(n(2)),l=n(8),u=m(n(17)),d=m(n(78)),z=n(51),f=n(43),O=n(27),A=m(n(32)),h=m(n(29));function m(e){return e&&e.__esModule?e:{default:e}}var q=function(e){function t(){var e,n,o,p;(0,i.default)(this,t);for(var c=arguments.length,M=Array(c),l=0;l<c;l++)M[l]=arguments[l];return n=o=(0,s.default)(this,(e=t.__proto__||(0,a.default)(t)).call.apply(e,[this].concat(M))),o.state={show_headline:o.props.getOptionValue("show_headline","related-posts"),show_thumbnails:o.props.getOptionValue("show_thumbnails","related-posts")},o.updateOptions=function(e){o.setState((0,r.default)({},e,!o.state[e]),o.props.updateFormStateModuleOption("related-posts",e))},o.handleShowHeadlineToggleChange=function(){o.updateOptions("show_headline")},o.handleShowThumbnailsToggleChange=function(){o.updateOptions("show_thumbnails")},o.trackConfigureClick=function(){b.default.tracks.recordJetpackClick("configure-related-posts")},p=n,(0,s.default)(o,p)}return(0,c.default)(t,e),(0,p.default)(t,[{key:"render",value:function(){var e=this,t=this.props.getOptionValue("related-posts"),n=this.props.isUnavailableInDevMode("related-posts");return M.default.createElement(A.default,(0,o.default)({},this.props,{hideButton:!0,module:"related-posts"}),M.default.createElement(h.default,{hasChild:!0,disableInDevMode:!0,module:this.props.getModule("related-posts"),support:{link:"https://jetpack.com/support/related-posts/"}},M.default.createElement("p",{className:"jp-form-setting-explanation"},(0,l.translate)("These settings won't apply to related posts added using the block editor.")),M.default.createElement(f.ModuleToggle,{slug:"related-posts",disabled:n,activated:t,toggling:this.props.isSavingAnyOption("related-posts"),toggleModule:this.props.toggleModuleNow},M.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,l.translate)("Show related content after posts"))),M.default.createElement(z.FormFieldset,null,M.default.createElement(d.default,{checked:this.state.show_headline,disabled:!t||n||this.props.isSavingAnyOption(["related-posts","show_headline"]),onChange:this.handleShowHeadlineToggleChange},M.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,l.translate)("Highlight related content with a heading"))),M.default.createElement(d.default,{checked:this.state.show_thumbnails,disabled:!t||n||this.props.isSavingAnyOption(["related-posts","show_thumbnails"]),onChange:this.handleShowThumbnailsToggleChange},M.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,l.translate)("Show a thumbnail image where available"))),t&&M.default.createElement("div",null,M.default.createElement(z.FormLabel,{className:"jp-form-label-wide"},(0,l.translate)("Preview",{context:"A header for a preview area in the configuration screen."})),M.default.createElement(u.default,{className:"jp-related-posts-preview"},this.state.show_headline&&M.default.createElement("div",{className:"jp-related-posts-preview__title"},(0,l.translate)("Related")),[{url:"cat-blog.png",text:(0,l.translate)("Big iPhone/iPad Update Now Available"),context:(0,l.translate)('In "Mobile"',{comment:"It refers to the category where a post was found. Used in an example preview."})},{url:"devices.jpg",text:(0,l.translate)("The WordPress for Android App Gets a Big Facelift"),context:(0,l.translate)('In "Mobile"',{comment:"It refers to the category where a post was found. Used in an example preview."})},{url:"mobile-wedding.jpg",text:(0,l.translate)("Upgrade Focus: VideoPress For Weddings"),context:(0,l.translate)('In "Upgrade"',{comment:"It refers to the category where a post was found. Used in an example preview."})}].map(function(t,n){return M.default.createElement("div",{key:"preview_"+n,className:"jp-related-posts-preview__item"},e.state.show_thumbnails&&M.default.createElement("img",{src:"https://jetpackme.files.wordpress.com/2019/03/"+t.url,alt:t.text}),M.default.createElement("h4",{className:"jp-related-posts-preview__post-title"},M.default.createElement("a",{href:"#/traffic"},t.text)),M.default.createElement("p",{className:"jp-related-posts-preview__post-context"},t.context))}))))),!this.props.isUnavailableInDevMode("related-posts")&&t&&M.default.createElement(u.default,{compact:!0,className:"jp-settings-card__configure-link",onClick:this.trackConfigureClick,href:this.props.configureUrl},(0,l.translate)("Configure related posts in the Customizer")))}}]),t}(M.default.Component);t.RelatedPosts=(0,O.withModuleSettingsFormHelpers)(q)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.VerificationServices=void 0;var o=q(n(10)),r=q(n(3)),a=q(n(4)),i=q(n(7)),p=q(n(5)),s=q(n(6)),c=q(n(2)),b=n(8),M=q(n(386)),l=q(n(186)),u=q(n(22)),d=q(n(35)),z=n(51),f=n(27),O=q(n(32)),A=q(n(29)),h=q(n(392)),m=q(n(930));function q(e){return e&&e.__esModule?e:{default:e}}var _=function(e){function t(){var e,n,o,i;(0,a.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=o=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(c))),o.activateVerificationTools=function(){return o.props.updateOptions({"verification-tools":!0})},i=n,(0,p.default)(o,i)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"getMetaTag",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return n?/^[a-z0-9_-]+$/i.test(n)?(0,d.default)(n,"<meta")?n:'<meta name="'+(0,u.default)(t.serviceIds,e,"")+'" content="'+n+'" />':n:""}},{key:"getSiteVerificationValue",value:function(e){var t=this.props.getOptionValue(e);return t===this.props.getSettingCurrentValue(e)?this.getMetaTag(e,t):t}},{key:"render",value:function(){var e=this.props.getModule("verification-tools");return"inactive"===this.props.getModuleOverride("google-analytics")?c.default.createElement(h.default,{title:e.name,icon:"cog",description:(0,b.translate)("%(moduleName)s has been disabled by a site administrator.",{args:{moduleName:e.name}})}):this.props.getOptionValue("verification-tools")?c.default.createElement(O.default,(0,o.default)({},this.props,{module:"verification-tools",saveDisabled:this.props.isSavingAnyOption(["google","bing","pinterest","yandex"])}),c.default.createElement(A.default,{module:e,support:{text:(0,b.translate)("Provides the necessary hidden tags needed to verify your WordPress site with various services."),link:"https://jetpack.com/support/site-verification-tools"}},c.default.createElement("p",null,(0,b.translate)("Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.",{components:{b:c.default.createElement("strong",null),support:c.default.createElement("a",{href:"https://jetpack.com/support/site-verification-tools/"}),google:c.default.createElement(l.default,{icon:!0,target:"_blank",rel:"noopener noreferrer",href:"https://www.google.com/webmasters/tools/"}),bing:c.default.createElement(l.default,{icon:!0,target:"_blank",rel:"noopener noreferrer",href:"https://www.bing.com/webmaster/"}),pinterest:c.default.createElement(l.default,{icon:!0,target:"_blank",rel:"noopener noreferrer",href:"https://pinterest.com/website/verify/"}),yandex:c.default.createElement(l.default,{icon:!0,target:"_blank",rel:"noopener noreferrer",href:"https://webmaster.yandex.com/sites/"})}})),c.default.createElement(z.FormFieldset,null,c.default.createElement(m.default,(0,o.default)({value:this.getSiteVerificationValue("google"),placeholder:this.getMetaTag("google","1234")},this.props)),c.default.createElement(z.FormLabel,{className:"jp-form-input-with-prefix",key:"verification_service_bing"},c.default.createElement("span",null,(0,b.translate)("Bing")),c.default.createElement(M.default,{name:"bing",value:this.getSiteVerificationValue("bing"),placeholder:this.getMetaTag("bing","1234"),className:"code",disabled:this.props.isUpdating("bing"),onChange:this.props.onOptionChange})),c.default.createElement(z.FormLabel,{className:"jp-form-input-with-prefix",key:"verification_service_pinterest"},c.default.createElement("span",null,(0,b.translate)("Pinterest")),c.default.createElement(M.default,{name:"pinterest",value:this.getSiteVerificationValue("pinterest"),placeholder:this.getMetaTag("pinterest","1234"),className:"code",disabled:this.props.isUpdating("pinterest"),onChange:this.props.onOptionChange})),c.default.createElement(z.FormLabel,{className:"jp-form-input-with-prefix",key:"verification_service_yandex"},c.default.createElement("span",null,(0,b.translate)("Yandex")),c.default.createElement(M.default,{name:"yandex",value:this.getSiteVerificationValue("yandex"),placeholder:this.getMetaTag("yandex","1234"),className:"code",disabled:this.props.isUpdating("yandex"),onChange:this.props.onOptionChange}))))):c.default.createElement(h.default,{callToAction:(0,b.translate)("Activate"),title:e.name,icon:"cog",description:e.long_description,onClick:this.activateVerificationTools})}}]),t}(c.default.Component);_.serviceIds={google:"google-site-verification",bing:"msvalidate.01",pinterest:"p:domain_verify",yandex:"yandex-verification"},t.VerificationServices=(0,f.withModuleSettingsFormHelpers)(_)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=W(n(3)),r=W(n(4)),a=W(n(7)),i=W(n(5)),p=W(n(6)),s=W(n(2)),c=n(8),b=W(n(386)),M=W(n(186)),l=n(9),u=W(n(13)),d=n(42),z=n(51),f=W(n(55)),O=W(n(33)),A=W(n(931)),h=n(415),m=n(933),q=n(21),_=n(76);function W(e){return e&&e.__esModule?e:{default:e}}var g=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.state={inputVisible:!1},a.handleClickAutoVerify=function(){a.props.fetchingSiteData||a.props.fetchingGoogleSiteVerify||(u.default.tracks.recordEvent("jetpack_site_verification_google_auto_verify_click"),(0,A.default)(a.props.googleSiteVerificationConnectUrl,function(e){e&&a.checkAndVerifySite(e)}))},a.handleClickSetManually=function(e){u.default.tracks.recordEvent("jetpack_site_verification_google_manual_verify_click",{is_owner:a.props.isOwner}),a.toggleVerifyMethod(e)},a.handleClickEdit=function(e){u.default.tracks.recordEvent("jetpack_site_verification_google_edit_click",{is_owner:a.props.isOwner}),a.toggleVerifyMethod(e)},a.handleClickCancel=function(e){u.default.tracks.recordEvent("jetpack_site_verification_google_cancel_click",{is_owner:a.props.isOwner}),a.props.resetFormStateOption("google"),a.toggleVerifyMethod(e)},a.quickSave=function(e){u.default.tracks.recordEvent("jetpack_site_verification_google_manual_verify_save",{is_owner:a.props.isOwner,is_empty:!a.props.value}),a.props.onSubmit(e)},a.toggleVerifyMethod=function(){a.setState({inputVisible:!a.state.inputVisible})},a.handleOnTextInputKeyPress=function(e){"Enter"===e.key&&a.quickSave()},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"componentDidMount",value:function(){var e=this;this.props.isCurrentUserLinked&&this.props.checkVerifyStatusGoogle().then(function(t){if(e.props.googleSiteVerificationError&&"unverify-site-error"===e.props.googleSiteVerificationError.code&&e.props.updateOptions({google:""}).then(function(){return e.props.checkVerifyStatusGoogle()}),t)return!e.props.getOptionValue("google")&&t.token?e.props.updateOptions({google:t.token}):void(!e.props.getOptionValue("google")||t.token||t.verified||e.setState({inputVisible:!0}))})}},{key:"checkAndVerifySite",value:function(e){var t=this;this.props.createNotice("is-info",(0,c.translate)("Verifying..."),{id:"verifying-site-google"}),this.props.checkVerifyStatusGoogle(e).then(function(e){if(e)return e.token!==t.props.value?t.props.updateOptions({google:e.token}):void 0}).then(function(){t.props.removeNotice("verifying-site-google"),t.props.isSiteVerifiedWithGoogle||t.props.verifySiteGoogle(e).then(function(){if(t.props.googleSiteVerificationError){var e=t.props.googleSiteVerificationError.message;u.default.tracks.recordEvent("jetpack_site_verification_google_verify_error",{error_message:e}),t.props.createNotice("is-error",(0,c.translate)("Site failed to verify: %(error)s",{args:{error:e}}),{id:"verify-site-google-error",duration:5e3})}else t.props.isSiteVerifiedWithGoogle&&u.default.tracks.recordEvent("jetpack_site_verification_google_verify_success")})})}},{key:"render",value:function(){var e=this.props.googleSiteVerificationError&&"forbidden"===this.props.googleSiteVerificationError.code;if(this.state.inputVisible||e||!this.props.isCurrentUserLinked)return s.default.createElement("div",null,s.default.createElement(z.FormLabel,{className:"jp-form-input-with-prefix",key:"verification_service_google"},s.default.createElement("span",null,(0,c.translate)("Google")),s.default.createElement(b.default,{name:"google",value:this.props.value,placeholder:this.props.placeholder,className:"code",disabled:this.props.isUpdating("google"),onChange:this.props.onOptionChange,onKeyPress:this.handleOnTextInputKeyPress}),this.state.inputVisible&&s.default.createElement("div",{className:"jp-form-site-verification-buttons"},s.default.createElement(O.default,{primary:!0,type:"button",className:"jp-form-site-verification-edit-button",disabled:this.props.isUpdating("google"),onClick:this.quickSave},(0,c.translate)("Save")),s.default.createElement(O.default,{type:"button",className:"jp-form-site-verification-edit-button",disabled:this.props.isUpdating("google"),onClick:this.handleClickCancel},(0,c.translate)("Cancel")))));if(this.props.isSiteVerifiedWithGoogle)return s.default.createElement("div",null,s.default.createElement("div",{className:"jp-form-input-with-prefix",key:"verification_service_google"},s.default.createElement("span",null,(0,c.translate)("Google")),s.default.createElement("div",{className:"jp-form-site-verification-verified"},s.default.createElement(f.default,{icon:"checkmark-circle",size:20})," ",s.default.createElement("span",null,(0,c.translate)("Your site is verified with Google"))),s.default.createElement(O.default,{type:"button",className:"jp-form-site-verification-edit-button",onClick:this.handleClickEdit},(0,c.translate)("Edit"))),this.props.isOwner&&s.default.createElement("div",{className:"jp-form-input-with-prefix-bottom-message"},s.default.createElement("div",{className:"jp-form-setting-explanation"},s.default.createElement("p",null,(0,c.translate)("Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.",{components:{a:s.default.createElement(M.default,{icon:!0,iconSize:16,target:"_blank",rel:"noopener noreferrer",href:this.props.googleSearchConsoleUrl})}})," ",(0,c.translate)("Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.",{components:{a1:s.default.createElement(M.default,{icon:!0,iconSize:16,target:"_blank",rel:"noopener noreferrer",href:"https://developers.google.com/web/fundamentals/security/hacked/"}),a2:s.default.createElement(M.default,{icon:!0,iconSize:16,target:"_blank",rel:"noopener noreferrer",href:"https://www.google.com/insidesearch/howsearchworks/crawling-indexing.html"})}})))));var t=this.props.fetchingSiteData||this.props.fetchingGoogleSiteVerify||this.props.isVerifyingGoogleSite||this.props.isUpdating("google");return s.default.createElement("div",{className:"jp-form-input-with-prefix jp-form-google-label-unverified",key:"verification_service_google"},s.default.createElement("span",null,(0,c.translate)("Google")),s.default.createElement("div",{className:"jp-form-google-label-unverified-actions"},s.default.createElement(O.default,{primary:!0,type:"button",disabled:t,onClick:this.handleClickAutoVerify},(0,c.translate)("Verify with Google")),s.default.createElement("span",{className:"jp-form-google-separator"},(0,c.translate)("or")),s.default.createElement(O.default,{type:"button",disabled:t,onClick:this.handleClickSetManually},(0,c.translate)("Manually Verify "))))}}]),t}(s.default.Component);t.default=(0,l.connect)(function(e){return{fetchingSiteData:(0,d.isFetchingSiteData)(e),googleSiteVerificationConnectUrl:(0,h.getExternalServiceConnectUrl)(e,"google_site_verification"),googleSearchConsoleUrl:(0,m.getGoogleSearchConsoleUrl)(e),fetchingGoogleSiteVerify:(0,m.isFetchingGoogleSiteVerify)(e),isConnectedToGoogle:(0,m.isConnectedToGoogleSiteVerificationAPI)(e),isSiteVerifiedWithGoogle:(0,m.isSiteVerifiedWithGoogle)(e),isVerifyingGoogleSite:(0,m.isVerifyingGoogleSite)(e),userCanManageOptions:(0,q.userCanManageOptions)(e),googleSiteVerificationError:(0,m.getGoogleSiteVerificationError)(e),isOwner:(0,m.isGoogleSiteVerificationOwner)(e)}},{checkVerifyStatusGoogle:m.checkVerifyStatusGoogle,createNotice:_.createNotice,removeNotice:_.removeNotice,verifySiteGoogle:m.verifySiteGoogle})(g),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,r=(o=n(932))&&o.__esModule?o:{default:o};t.default=function(e,t){var n=new r.default,o=void 0;n.open(e,null,"toolbar=0,location=0,status=0,menubar=0,"+n.getScreenCenterSpecs(780,700)),n.once("close",function(){var e=null;o&&o.keyring_id&&(e=Number(o.keyring_id)),t(e)}),n.on("message",function(e){return o=e})},e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(84));function r(e){return e&&e.__esModule?e:{default:e}}function a(){var e=this;this.intervals={},this.monitorInterval=null,this.windowInstance=null,this.onMessage=function(t){t.source===e.windowInstance&&e.emit("message",t.data)}}(0,r(n(715)).default)(a.prototype),a.prototype.open=function(e,t,n){return t=t||Date.now(),this.windowInstance=window.open(e,t,n),this.startMonitoring(t,this.windowInstance),window.addEventListener("message",this.onMessage,!1),this},a.prototype.getScreenCenterSpecs=function(e,t){var n=void 0!==window.screenTop?window.screenTop:window.screenY,o=void 0!==window.screenLeft?window.screenLeft:window.screenX;return["width="+e,"height="+t,"top="+(n+window.innerHeight/2-t/2),"left="+(o+window.innerWidth/2-e/2)].join()},a.prototype.isOpen=function(e){var t=!1;try{t=this.intervals[e]&&this.intervals[e].closed}catch(e){}return!t},a.prototype.checkStatus=function(){for(var e in this.intervals)this.intervals.hasOwnProperty(e)&&!this.isOpen(e)&&(this.emit("close",e),delete this.intervals[e]);0===(0,o.default)(this.intervals).length&&(clearInterval(this.monitorInterval),delete this.monitorInterval,window.removeEventListener("message",this.onMessage))},a.prototype.startMonitoring=function(e,t){this.monitorInterval||(this.monitorInterval=setInterval(this.checkStatus.bind(this),100)),this.intervals[e]=t},t.default=a,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,r=(o=n(10))&&o.__esModule?o:{default:o},a=p(n(416)),i=p(n(934));function p(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}var s=(0,r.default)({},a,i);t.default=s,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.verifySiteGoogle=t.checkVerifyStatusGoogle=void 0;var o=s(n(84)),r=n(14),a=s(n(37)),i=n(8),p=n(76);function s(e){return e&&e.__esModule?e:{default:e}}t.checkVerifyStatusGoogle=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return function(t){return t({type:r.JETPACK_SITE_VERIFY_GOOGLE_STATUS_FETCH}),a.default.fetchVerifySiteGoogleStatus(e).then(function(e){if(e.errors&&e.errors.length>0){var n=(0,o.default)(e.errors)[0],a=e.errors[n];return t({type:r.JETPACK_SITE_VERIFY_GOOGLE_STATUS_FETCH_FAIL,error:{code:n,message:a}}),e}return t({type:r.JETPACK_SITE_VERIFY_GOOGLE_STATUS_FETCH_SUCCESS,verified:e.verified,token:e.token,isOwner:e.is_owner,searchConsoleUrl:e.google_search_console_url,verificationConsoleUrl:e.google_verification_console_url}),e}).catch(function(e){t({type:r.JETPACK_SITE_VERIFY_GOOGLE_STATUS_FETCH_FAIL,error:e.response})})}},t.verifySiteGoogle=function(e){return function(t){return t({type:r.JETPACK_SITE_VERIFY_GOOGLE_REQUEST}),a.default.verifySiteGoogle(e).then(function(e){if(e.errors&&e.errors.length>0){var n=(0,o.default)(e.errors)[0],a=e.errors[n];return t({type:r.JETPACK_SITE_VERIFY_GOOGLE_REQUEST_FAIL,error:{code:n,message:a}}),e}return t({verified:e.verified,isOwner:e.is_owner,searchConsoleUrl:e.google_search_console_url,verificationConsoleUrl:e.google_verification_console_url,type:r.JETPACK_SITE_VERIFY_GOOGLE_REQUEST_SUCCESS}),e.verified&&t((0,p.createNotice)("is-success",(0,i.translate)("Site is verified"),{id:"verify-site-google-verified",duration:2e3})),e}).catch(function(e){t({type:r.JETPACK_SITE_VERIFY_GOOGLE_REQUEST_FAIL,error:e.response})})}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Sitemaps=void 0;var o=_(n(10)),r=_(n(3)),a=_(n(4)),i=_(n(7)),p=_(n(5)),s=_(n(6)),c=_(n(2)),b=_(n(12)),M=n(9),l=n(8),u=_(n(186)),d=_(n(22)),z=_(n(13)),f=n(51),O=n(27),A=n(43),h=_(n(32)),m=_(n(29)),q=n(21);function _(e){return e&&e.__esModule?e:{default:e}}var W=t.Sitemaps=function(e){function t(){var e,n,o,i;(0,a.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=o=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(c))),o.trackSitemapUrl=function(){z.default.tracks.recordJetpackClick("sitemap-url-link")},o.trackSitemapNewsUrl=function(){z.default.tracks.recordJetpackClick("sitemap-news-url-link")},i=n,(0,p.default)(o,i)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e=this.props.getModule("sitemaps"),t=(0,d.default)(e,["extra","sitemap_url"],""),n=(0,d.default)(e,["extra","news_sitemap_url"],""),r=(0,b.default)({"jp-form-setting-explanation":!0,"is-warning":!this.props.isSiteVisibleToSearchEngines&&this.props.getOptionValue("sitemaps")});return c.default.createElement(h.default,(0,o.default)({},this.props,{module:"sitemaps",hideButton:!0}),c.default.createElement(m.default,{hasChild:!0,module:{module:"sitemaps"},support:{link:"https://jetpack.com/support/sitemaps/"}},c.default.createElement("p",null,(0,l.translate)("Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.")),c.default.createElement(A.ModuleToggle,{slug:"sitemaps",compact:!0,activated:this.props.getOptionValue("sitemaps"),toggling:this.props.isSavingAnyOption("sitemaps"),toggleModule:this.props.toggleModuleNow},(0,l.translate)("Generate XML sitemaps")),this.props.isSiteVisibleToSearchEngines?this.props.getOptionValue("sitemaps")&&c.default.createElement(f.FormFieldset,null,c.default.createElement("p",{className:"jp-form-setting-explanation"},(0,l.translate)("Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing."),c.default.createElement("br",null),c.default.createElement(u.default,{onClick:this.trackSitemapUrl,icon:!0,target:"_blank",rel:"noopener noreferrer",href:t},t),c.default.createElement("br",null),c.default.createElement(u.default,{onClick:this.trackSitemapNewsUrl,icon:!0,target:"_blank",rel:"noopener noreferrer",href:n},n))):c.default.createElement(f.FormFieldset,null,c.default.createElement("p",{className:r},(0,l.translate)("Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.",{components:{a:c.default.createElement("a",{href:this.props.siteAdminUrl+"options-reading.php"})}})))))}}]),t}(c.default.Component);t.default=(0,M.connect)(function(e){return{isSiteVisibleToSearchEngines:(0,q.isSiteVisibleToSearchEngines)(e),siteAdminUrl:(0,q.getSiteAdminUrl)(e)}})((0,O.withModuleSettingsFormHelpers)(W))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Writing=void 0;var o=v(n(10)),r=v(n(3)),a=v(n(4)),i=v(n(7)),p=v(n(5)),s=v(n(6)),c=v(n(2)),b=n(9),M=n(8),l=v(n(17)),u=n(86),d=n(21),z=n(20),f=n(24),O=n(56),A=v(n(125)),h=v(n(937)),m=v(n(940)),q=v(n(941)),_=v(n(942)),W=n(947),g=v(n(948));function v(e){return e&&e.__esModule?e:{default:e}}var y=t.Writing=function(e){function t(){return(0,a.default)(this,t),(0,p.default)(this,(t.__proto__||(0,r.default)(t)).apply(this,arguments))}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e={settings:this.props.settings,getModule:this.props.module,isDevMode:this.props.isDevMode,isUnavailableInDevMode:this.props.isUnavailableInDevMode,isLinked:this.props.isLinked,getModuleOverride:this.props.getModuleOverride},t=["carousel","copy-post","masterbar","markdown","after-the-deadline","custom-content-types","post-by-email","infinite-scroll","minileven"].some(this.props.isModuleFound);if(!this.props.searchTerm&&!this.props.active)return null;if(!t)return null;var n=this.props.userCanManageModules||this.props.userCanEditPosts&&this.props.isModuleActivated("after-the-deadline"),r=this.props.userCanManageModules||this.props.userCanEditPosts&&this.props.isModuleActivated("post-by-email");return c.default.createElement("div",null,c.default.createElement(A.default,null),c.default.createElement(l.default,{title:(0,M.translate)("Compose content the way you want to and streamline your publishing experience."),className:"jp-settings-description"}),this.props.isModuleFound("carousel")&&c.default.createElement(g.default,e),this.props.isModuleFound("masterbar")&&!this.props.masterbarIsAlwaysActive&&c.default.createElement(W.Masterbar,(0,o.default)({connectUrl:this.props.connectUrl},e)),n&&c.default.createElement(h.default,(0,o.default)({},e,{userCanManageModules:this.props.userCanManageModules})),this.props.isModuleFound("custom-content-types")&&c.default.createElement(m.default,e),c.default.createElement(q.default,e),this.props.isModuleFound("post-by-email")&&r&&c.default.createElement(_.default,(0,o.default)({},e,{connectUrl:this.props.connectUrl,isLinked:this.props.isLinked,userCanManageModules:this.props.userCanManageModules})),!n&&!r&&c.default.createElement(l.default,null,(0,M.translate)("Writing tools available to you will be shown here when an administrator enables them.")))}}]),t}(c.default.Component);y.displayName="WritingSettings",t.default=(0,b.connect)(function(e){return{module:function(t){return(0,f.getModule)(e,t)},settings:(0,u.getSettings)(e),masterbarIsAlwaysActive:(0,d.isAtomicSite)(e),isDevMode:(0,z.isDevMode)(e),isUnavailableInDevMode:function(t){return(0,z.isUnavailableInDevMode)(e,t)},userCanEditPosts:(0,d.userCanEditPosts)(e),isModuleActivated:function(t){return(0,f.isModuleActivated)(e,t)},isLinked:(0,z.isCurrentUserLinked)(e),userCanManageModules:(0,d.userCanManageModules)(e),isModuleFound:function(t){return(0,O.isModuleFound)(e,t)},connectUrl:(0,z.getConnectUrl)(e),getModuleOverride:function(t){return(0,f.getModuleOverride)(e,t)}}})(y)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Composing=void 0;var o=v(n(10)),r=v(n(47)),a=v(n(3)),i=v(n(4)),p=v(n(7)),s=v(n(5)),c=v(n(6)),b=v(n(2)),M=n(9),l=n(8),u=v(n(78)),d=v(n(427)),z=v(n(12)),f=v(n(13)),O=n(51),A=n(56),h=n(43),m=n(27),q=n(24),_=v(n(938)),W=v(n(32)),g=v(n(29));function v(e){return e&&e.__esModule?e:{default:e}}var y=t.Composing=function(e){function t(){var e,n,o,p;(0,i.default)(this,t);for(var c=arguments.length,M=Array(c),d=0;d<c;d++)M[d]=arguments[d];return n=o=(0,s.default)(this,(e=t.__proto__||(0,a.default)(t)).call.apply(e,[this].concat(M))),o.state={onpublish:o.props.getOptionValue("onpublish","after-the-deadline"),onupdate:o.props.getOptionValue("onupdate","after-the-deadline"),guess_lang:o.props.getOptionValue("guess_lang","after-the-deadline"),"Bias Language":o.props.getOptionValue("Bias Language","after-the-deadline"),Cliches:o.props.getOptionValue("Cliches","after-the-deadline"),"Complex Expression":o.props.getOptionValue("Complex Expression","after-the-deadline"),"Diacritical Marks":o.props.getOptionValue("Diacritical Marks","after-the-deadline"),"Double Negative":o.props.getOptionValue("Double Negative","after-the-deadline"),"Hidden Verbs":o.props.getOptionValue("Hidden Verbs","after-the-deadline"),"Jargon Language":o.props.getOptionValue("Jargon Language","after-the-deadline"),"Passive voice":o.props.getOptionValue("Passive voice","after-the-deadline"),"Phrases to Avoid":o.props.getOptionValue("Phrases to Avoid","after-the-deadline"),"Redundant Expression":o.props.getOptionValue("Redundant Expression","after-the-deadline")},o.updateOptions=function(e){o.setState((0,r.default)({},e,!o.state[e]),o.props.updateFormStateModuleOption("after-the-deadline",e))},o.handleToggleChange=function(e){return function(){return o.updateOptions(e)}},o.getToggle=function(e,t){return b.default.createElement(u.default,{checked:o.state[e],disabled:!o.props.getOptionValue("after-the-deadline")||o.props.isUnavailableInDevMode("after-the-deadline")||o.props.isSavingAnyOption(["after-the-deadline",e]),onChange:o.handleToggleChange(e)},b.default.createElement("span",{className:"jp-form-toggle-explanation"},t))},o.getAtdSettings=function(){var e=o.props.getOptionValue("ignored_phrases");return b.default.createElement(g.default,{hasChild:!0,disableInDevMode:!0,module:o.props.getModule("after-the-deadline"),support:{text:(0,l.translate)("Checks your content for correct grammar and spelling, misused words, and style while you write."),link:"https://jetpack.com/support/spelling-and-grammar/"}},b.default.createElement(O.FormFieldset,null,b.default.createElement(O.FormLegend,null," ",(0,l.translate)("Proofreading")," "),b.default.createElement("span",{className:"jp-form-setting-explanation"},(0,l.translate)("Automatically proofread content when: ")),o.getToggle("onpublish",(0,l.translate)("A post or page is first published")),o.getToggle("onupdate",(0,l.translate)("A post or page is updated"))),b.default.createElement(O.FormFieldset,null,b.default.createElement(O.FormLegend,null," ",(0,l.translate)("Automatic Language Detection")),b.default.createElement("span",{className:"jp-form-setting-explanation"},(0,l.translate)("The proofreader supports English, French, German, Portuguese and Spanish.")),o.getToggle("guess_lang",(0,l.translate)("Use automatically detected language to proofread posts and pages"))),b.default.createElement(O.FormFieldset,null,b.default.createElement(O.FormLegend,null," ",(0,l.translate)("English Options")," "),b.default.createElement("span",{className:"jp-form-setting-explanation"},(0,l.translate)("Enable proofreading for the following grammar and style rules: ")),o.getToggle("Bias Language",(0,l.translate)("Bias Language")),o.getToggle("Cliches",(0,l.translate)("Clichés")),o.getToggle("Complex Expression",(0,l.translate)("Complex Phrases")),o.getToggle("Diacritical Marks",(0,l.translate)("Diacritical Marks")),o.getToggle("Double Negative",(0,l.translate)("Double Negatives")),o.getToggle("Hidden Verbs",(0,l.translate)("Hidden Verbs")),o.getToggle("Jargon Language",(0,l.translate)("Jargon")),o.getToggle("Passive voice",(0,l.translate)("Passive Voice")),o.getToggle("Phrases to Avoid",(0,l.translate)("Phrases to Avoid")),o.getToggle("Redundant Expression",(0,l.translate)("Redundant Phrases"))),b.default.createElement(O.FormFieldset,null,b.default.createElement(O.FormLegend,null,(0,l.translate)("Ignored Phrases")),b.default.createElement(_.default,{name:"ignored_phrases",disabled:!o.props.getOptionValue("after-the-deadline"),placeholder:(0,l.translate)("Add a phrase"),value:void 0!==e&&""!==e?e.split(","):[],onChange:o.props.onOptionChange}),b.default.createElement("span",{className:"jp-form-setting-explanation"},(0,l.translate)("Confirm each new phrase you add by pressing enter."))))},o.updateFormStateByMarkdown=function(e){return o.props.getSettingCurrentValue("wpcom_publish_comments_with_markdown",e)?o.props.updateFormStateModuleOption(e,"wpcom_publish_posts_with_markdown"):o.props.updateFormStateModuleOption(e,"wpcom_publish_posts_with_markdown",!0)},o.trackOpenCard=function(){f.default.tracks.recordJetpackClick({target:"foldable-settings-open",feature:"atd"})},p=n,(0,s.default)(o,p)}return(0,c.default)(t,e),(0,p.default)(t,[{key:"render",value:function(){var e=this.props.isModuleFound("copy-post"),t=this.props.isModuleFound("after-the-deadline"),n=this.props.isModuleFound("markdown");if(!e&&!n&&!t)return null;var r=this.props.module("markdown"),a=this.props.module("after-the-deadline"),i=this.props.module("copy-post"),p=this.props.isUnavailableInDevMode("after-the-deadline"),s=b.default.createElement(g.default,{module:i,support:{text:(0,l.translate)("Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more."),link:"https://jetpack.com/support/copy-post-2/"}},b.default.createElement(O.FormFieldset,null,b.default.createElement(h.ModuleToggle,{slug:"copy-post",activated:!!this.props.getOptionValue("copy-post"),toggling:this.props.isSavingAnyOption("copy-post"),disabled:this.props.isSavingAnyOption("copy-post"),toggleModule:this.props.toggleModuleNow},b.default.createElement("span",{className:"jp-form-toggle-explanation"},i.description)))),c=b.default.createElement(g.default,{module:r,support:{text:(0,l.translate)("Allows you to compose content with links, lists, and other styles using the Markdown syntax."),link:"https://jetpack.com/support/markdown/"}},b.default.createElement(O.FormFieldset,null,b.default.createElement(h.ModuleToggle,{slug:"markdown",activated:!!this.props.getOptionValue("wpcom_publish_posts_with_markdown","markdown"),toggling:this.props.isSavingAnyOption(["markdown","wpcom_publish_posts_with_markdown"]),disabled:this.props.isSavingAnyOption(["markdown","wpcom_publish_posts_with_markdown"]),toggleModule:this.updateFormStateByMarkdown},b.default.createElement("span",{className:"jp-form-toggle-explanation"},r.description)))),M=b.default.createElement(d.default,{onOpen:this.trackOpenCard,className:(0,z.default)("jp-foldable-card__main-settings",{"jp-foldable-settings-disable":p}),header:this.props.userCanManageModules?b.default.createElement(h.ModuleToggle,{slug:"after-the-deadline",compact:!0,disabled:p,activated:this.props.getOptionValue("after-the-deadline"),toggling:this.props.isSavingAnyOption("after-the-deadline"),toggleModule:this.props.toggleModuleNow},b.default.createElement("span",{className:"jp-form-toggle-explanation"},a.description)):b.default.createElement("span",{className:"jp-form-toggle-explanation"},a.description)},this.getAtdSettings());return b.default.createElement(W.default,(0,o.default)({},this.props,{header:(0,l.translate)("Composing",{context:"Settings header"}),hideButton:!t,module:"composing",saveDisabled:this.props.isSavingAnyOption("ignored_phrases")}),e&&s,n&&c,t&&M)}}]),t}(b.default.Component);t.default=(0,M.connect)(function(e){return{module:function(t){return(0,q.getModule)(e,t)},isModuleFound:function(t){return(0,A.isModuleFound)(e,t)}}})((0,m.withModuleSettingsFormHelpers)(y))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=b(n(3)),r=b(n(4)),a=b(n(7)),i=b(n(5)),p=b(n(6)),s=b(n(2)),c=b(n(939));function b(e){return e&&e.__esModule?e:{default:e}}var M=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.state={tags:a.props.value||[]},a.handleChange=function(e){a.setState({tags:e}),a.props.onChange&&a.props.onChange({target:{name:a.props.name,value:e.join(",")}})},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){return s.default.createElement(c.default,{disabled:this.props.disabled,inputProps:{placeholder:this.props.placeholder},onChange:this.handleChange,value:this.state.tags})}}]),t}(s.default.Component);t.default=M,e.exports=t.default},function(e,t,n){var o,r,a;r=[e,t,n(2),n(1)],void 0===(a="function"==typeof(o=function(e,t,n,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=a(n);function a(e){return e&&e.__esModule?e:{default:e}}a(o);var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e};function s(e,t){var n={};for(var o in e)t.indexOf(o)>=0||Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=e[o]);return n}var c={className:"react-tagsinput-input",placeholder:"Add a tag"},b=function(e){function t(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var e=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return e.state={tag:"",isFocused:!1},e.focus=e.focus.bind(e),e.blur=e.blur.bind(e),e}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,r.default.Component),i(t,[{key:"_getTagDisplayValue",value:function(e){var t=this.props.tagDisplayProp;return t?e[t]:e}},{key:"_makeTag",value:function(e){var t,n,o,r=this.props.tagDisplayProp;return r?(o=e,(n=r)in(t={})?Object.defineProperty(t,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):t[n]=o,t):e}},{key:"_removeTag",value:function(e){var t=this.props.value.concat([]);if(e>-1&&e<t.length){var n=t.splice(e,1);this.props.onChange(t,n,[e])}}},{key:"_clearInput",value:function(){this.hasControlledInput()?this.props.onChangeInput(""):this.setState({tag:""})}},{key:"_tag",value:function(){return this.hasControlledInput()?this.props.inputValue:this.state.tag}},{key:"_addTags",value:function(e){var t=this,n=this.props,o=n.validationRegex,r=n.onChange,a=n.onValidationReject,i=n.onlyUnique,p=n.maxTags,s=n.value;i&&(e=(e=function(e){for(var t=[],n=0;n<e.length;n++)-1===t.indexOf(e[n])&&t.push(e[n]);return t}(e)).filter(function(e){return s.every(function(n){return t._getTagDisplayValue(n)!==t._getTagDisplayValue(e)})}));var c=e.filter(function(e){return!o.test(t._getTagDisplayValue(e))});if(e=(e=e.filter(function(e){return o.test(t._getTagDisplayValue(e))})).filter(function(e){var n=t._getTagDisplayValue(e);return"function"==typeof n.trim?n.trim().length>0:n}),p>=0){var b=Math.max(p-s.length,0);e=e.slice(0,b)}if(a&&c.length>0&&a(c),e.length>0){for(var M=s.concat(e),l=[],u=0;u<e.length;u++)l.push(s.length+u);return r(M,e,l),this._clearInput(),!0}return!(c.length>0||(this._clearInput(),1))}},{key:"_shouldPreventDefaultEventOnAdd",value:function(e,t,n){return!!e||13===n&&(this.props.preventSubmit||!this.props.preventSubmit&&!t)}},{key:"focus",value:function(){this.input&&"function"==typeof this.input.focus&&this.input.focus(),this.handleOnFocus()}},{key:"blur",value:function(){this.input&&"function"==typeof this.input.blur&&this.input.blur(),this.handleOnBlur()}},{key:"accept",value:function(){var e=this._tag();return""!==e&&(e=this._makeTag(e),this._addTags([e]))}},{key:"addTag",value:function(e){return this._addTags([e])}},{key:"clearInput",value:function(){this._clearInput()}},{key:"handlePaste",value:function(e){var t=this,n=this.props,o=n.addOnPaste,r=n.pasteSplit;if(o){e.preventDefault();var a=r(function(e){return window.clipboardData?window.clipboardData.getData("Text"):e.clipboardData?e.clipboardData.getData("text/plain"):""}(e)).map(function(e){return t._makeTag(e)});this._addTags(a)}}},{key:"handleKeyDown",value:function(e){if(!e.defaultPrevented){var t=this.props,n=t.value,o=t.removeKeys,r=t.addKeys,a=""===this._tag(),i=e.keyCode,p=e.key,s=-1!==r.indexOf(i)||-1!==r.indexOf(p),c=-1!==o.indexOf(i)||-1!==o.indexOf(p);if(s){var b=this.accept();this._shouldPreventDefaultEventOnAdd(b,a,i)&&e.preventDefault()}c&&n.length>0&&a&&(e.preventDefault(),this._removeTag(n.length-1))}}},{key:"handleClick",value:function(e){e.target===this.div&&this.focus()}},{key:"handleChange",value:function(e){var t=this.props.onChangeInput,n=this.props.inputProps.onChange,o=e.target.value;n&&n(e),this.hasControlledInput()?t(o):this.setState({tag:o})}},{key:"handleOnFocus",value:function(e){var t=this.props.inputProps.onFocus;t&&t(e),this.setState({isFocused:!0})}},{key:"handleOnBlur",value:function(e){var t=this.props.inputProps.onBlur;if(this.setState({isFocused:!1}),null!=e&&(t&&t(e),this.props.addOnBlur)){var n=this._makeTag(e.target.value);this._addTags([n])}}},{key:"handleRemove",value:function(e){this._removeTag(e)}},{key:"inputProps",value:function(){var e=this.props.inputProps,t=(e.onChange,e.onFocus,e.onBlur,s(e,["onChange","onFocus","onBlur"])),n=p({},c,t);return this.props.disabled&&(n.disabled=!0),n}},{key:"inputValue",value:function(e){return e.currentValue||e.inputValue||""}},{key:"hasControlledInput",value:function(){var e=this.props,t=e.inputValue;return"function"==typeof e.onChangeInput&&"string"==typeof t}},{key:"componentDidMount",value:function(){this.hasControlledInput()||this.setState({tag:this.inputValue(this.props)})}},{key:"componentWillReceiveProps",value:function(e){this.hasControlledInput()||this.inputValue(e)&&this.setState({tag:this.inputValue(e)})}},{key:"render",value:function(){var e=this,t=this.props,n=t.value,o=(t.onChange,t.tagProps),a=t.renderLayout,i=t.renderTag,c=t.renderInput,b=(t.addKeys,t.removeKeys,t.className),M=t.focusedClassName,l=(t.addOnBlur,t.addOnPaste,t.inputProps,t.pasteSplit,t.onlyUnique,t.maxTags,t.validationRegex,t.disabled);(t.tagDisplayProp,t.inputValue,t.onChangeInput,s(t,["value","onChange","tagProps","renderLayout","renderTag","renderInput","addKeys","removeKeys","className","focusedClassName","addOnBlur","addOnPaste","inputProps","pasteSplit","onlyUnique","maxTags","validationRegex","disabled","tagDisplayProp","inputValue","onChangeInput"]),this.state.isFocused)&&(b+=" "+M);var u=n.map(function(t,n){return i(p({key:n,tag:t,onRemove:e.handleRemove.bind(e),disabled:l,getTagDisplayValue:e._getTagDisplayValue.bind(e)},o))}),d=c(p({ref:function(t){e.input=t},value:this._tag(),onPaste:this.handlePaste.bind(this),onKeyDown:this.handleKeyDown.bind(this),onChange:this.handleChange.bind(this),onFocus:this.handleOnFocus.bind(this),onBlur:this.handleOnBlur.bind(this),addTag:this.addTag.bind(this)},this.inputProps()));return r.default.createElement("div",{ref:function(t){e.div=t},onClick:this.handleClick.bind(this),className:b},a(u,d))}}]),t}();b.defaultProps={className:"react-tagsinput",focusedClassName:"react-tagsinput--focused",addKeys:[9,13],addOnBlur:!1,addOnPaste:!1,inputProps:{},removeKeys:[8],renderInput:function(e){e.addTag;var t=s(e,["addTag"]),n=t.onChange,o=t.value,a=s(t,["onChange","value"]);return r.default.createElement("input",p({type:"text",onChange:n,value:o},a))},renderTag:function(e){var t=e.tag,n=e.key,o=e.disabled,a=e.onRemove,i=e.classNameRemove,c=e.getTagDisplayValue,b=s(e,["tag","key","disabled","onRemove","classNameRemove","getTagDisplayValue"]);return r.default.createElement("span",p({key:n},b),c(t),!o&&r.default.createElement("a",{className:i,onClick:function(e){return a(n)}}))},renderLayout:function(e,t){return r.default.createElement("span",null,e,t)},pasteSplit:function(e){return e.split(" ").map(function(e){return e.trim()})},tagProps:{className:"react-tagsinput-tag",classNameRemove:"react-tagsinput-remove"},onlyUnique:!1,maxTags:-1,validationRegex:/.*/,disabled:!1,tagDisplayProp:null,preventSubmit:!0},t.default=b,e.exports=t.default})?o.apply(t,r):o)||(e.exports=a)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CustomContentTypes=void 0;var o=q(n(10)),r=q(n(47)),a=q(n(3)),i=q(n(4)),p=q(n(7)),s=q(n(5)),c=q(n(6)),b=q(n(2)),M=n(9),l=n(8),u=q(n(78)),d=q(n(713)),z=n(51),f=n(27),O=n(24),A=n(56),h=q(n(32)),m=q(n(29));function q(e){return e&&e.__esModule?e:{default:e}}var _=t.CustomContentTypes=function(e){function t(){var e,n,o,p;(0,i.default)(this,t);for(var c=arguments.length,M=Array(c),l=0;l<c;l++)M[l]=arguments[l];return n=o=(0,s.default)(this,(e=t.__proto__||(0,a.default)(t)).call.apply(e,[this].concat(M))),o.state={testimonial:o.props.getOptionValue("jetpack_testimonial","custom-content-types"),portfolio:o.props.getOptionValue("jetpack_portfolio","custom-content-types")},o.updateCPTs=function(e){var t="testimonial"===e?!(!o.state.testimonial||o.state.portfolio):!(!o.state.portfolio||o.state.testimonial);o.props.updateFormStateModuleOption("custom-content-types","jetpack_"+e,t),o.setState((0,r.default)({},e,!o.state[e]))},o.linkIfActiveCPT=function(e){return o.props.getSettingCurrentValue("jetpack_"+e,"custom-content-types")?b.default.createElement("a",{href:o.props.siteAdminUrl+"edit.php?post_type=jetpack-"+e}):b.default.createElement("span",null)},o.handleTestimonialToggleChange=function(){o.updateCPTs("testimonial")},o.handlePortfolioToggleChange=function(){o.updateCPTs("portfolio")},p=n,(0,s.default)(o,p)}return(0,c.default)(t,e),(0,p.default)(t,[{key:"render",value:function(){if(!this.props.isModuleFound("custom-content-types"))return null;var e=this.props.module("custom-content-types"),t="inactive"===this.props.getModuleOverride("custom-content-types"),n=t&&(0,l.translate)("This feature has been disabled by a site administrator.");return b.default.createElement(h.default,(0,o.default)({},this.props,{module:"custom-content-types",hideButton:!0}),b.default.createElement(m.default,{hasChild:!0,module:e,support:{link:"https://jetpack.com/support/custom-content-types/"}},b.default.createElement("p",null,(0,l.translate)("Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.",{components:{testimonialLink:this.linkIfActiveCPT("testimonial")}})),b.default.createElement(u.default,{checked:this.state.testimonial,disabled:this.props.isSavingAnyOption("jetpack_testimonial")||t,onChange:this.handleTestimonialToggleChange,disabledReason:n},b.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,l.translate)("Testimonials"))),b.default.createElement(z.FormFieldset,null,b.default.createElement("p",{className:"jp-form-setting-explanation"},(0,l.translate)("Testimonials shortcode: [testimonials]")))),this.props.testimonialActive&&b.default.createElement(d.default,{className:"jp-settings-card__configure-link",href:this.props.siteAdminUrl+"post-new.php?post_type=jetpack-testimonial"},(0,l.translate)("Add a testimonial")),b.default.createElement(m.default,{hasChild:!0,module:e,support:{link:"https://jetpack.com/support/custom-content-types/"}},b.default.createElement("p",null,(0,l.translate)("Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.",{components:{portfolioLink:this.linkIfActiveCPT("portfolio")}})),b.default.createElement(u.default,{checked:this.state.portfolio,disabled:this.props.isSavingAnyOption("jetpack_portfolio")||t,onChange:this.handlePortfolioToggleChange,disabledReason:n},b.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,l.translate)("Portfolios"))),b.default.createElement(z.FormFieldset,null,b.default.createElement("p",{className:"jp-form-setting-explanation"},(0,l.translate)("Portfolios shortcode: [portfolio]")))),this.props.portfolioActive&&b.default.createElement(d.default,{className:"jp-settings-card__configure-link",href:this.props.siteAdminUrl+"post-new.php?post_type=jetpack-portfolio"},(0,l.translate)("Add a portfolio item")))}}]),t}(b.default.Component);t.default=(0,f.withModuleSettingsFormHelpers)((0,M.connect)(function(e,t){return{module:function(t){return(0,O.getModule)(e,t)},isModuleFound:function(t){return(0,A.isModuleFound)(e,t)},getModuleOverride:function(t){return(0,O.getModuleOverride)(e,t)},portfolioActive:t.getSettingCurrentValue("jetpack_portfolio","custom-content-types"),testimonialActive:t.getSettingCurrentValue("jetpack_testimonial","custom-content-types")}})(_))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=g(n(10)),r=g(n(47)),a=g(n(3)),i=g(n(4)),p=g(n(7)),s=g(n(5)),c=g(n(6)),b=g(n(2)),M=n(9),l=n(8),u=g(n(78)),d=g(n(13)),z=n(51),f=n(43),O=n(24),A=n(21),h=n(56),m=n(27),q=g(n(32)),_=g(n(29)),W=g(n(426));function g(e){return e&&e.__esModule?e:{default:e}}var v=function(e){function t(){var e,n,o,p;(0,i.default)(this,t);for(var c=arguments.length,b=Array(c),M=0;M<c;M++)b[M]=arguments[M];return n=o=(0,s.default)(this,(e=t.__proto__||(0,a.default)(t)).call.apply(e,[this].concat(b))),o.getInfiniteMode=function(){return o.props.getOptionValue("infinite-scroll")?o.props.getOptionValue("infinite_scroll","infinite-scroll")?"infinite_scroll":"infinite_button":"infinite_default"},o.updateInfiniteMode=function(e){o.setState({infinite_mode:e},o.prepareOptionsToUpdate)},o.prepareOptionsToUpdate=function(){"infinite_default"===o.state.infinite_mode?o.props.updateFormStateOptionValue("infinite-scroll",!1):"infinite_scroll"!==o.state.infinite_mode&&"infinite_button"!==o.state.infinite_mode||o.props.updateFormStateOptionValue({"infinite-scroll":!0,infinite_scroll:"infinite_scroll"===o.state.infinite_mode})},o.updateOptions=function(e,t){o.setState((0,r.default)({},e,!o.state[e]),o.props.updateFormStateModuleOption(t,e))},o.trackLearnMoreIS=function(){d.default.tracks.recordJetpackClick({target:"learn-more",feature:"infinite-scroll",extra:"not-supported-link"})},o.state={infinite_mode:o.getInfiniteMode(),wp_mobile_excerpt:o.props.getOptionValue("wp_mobile_excerpt","minileven"),wp_mobile_featured_images:o.props.getOptionValue("wp_mobile_featured_images","minileven"),wp_mobile_app_promos:o.props.getOptionValue("wp_mobile_app_promos","minileven")},o.handleInfiniteScrollModeChange=function(e){return function(){return o.updateInfiniteMode(e)}},o.handleMinilevenOptionChange=function(e,t){return function(){return o.updateOptions(e,t)}},p=n,(0,s.default)(o,p)}return(0,c.default)(t,e),(0,p.default)(t,[{key:"render",value:function(){var e=this,t=this.props.isModuleFound("infinite-scroll"),n=this.props.isModuleFound("minileven");if(!t&&!n)return null;var r=this.props.getModule("infinite-scroll"),a=this.props.getModule("minileven"),i=this.props.getOptionValue(a.module),p="inactive"===this.props.getModuleOverride("infinite-scroll");return b.default.createElement(q.default,(0,o.default)({},this.props,{header:(0,l.translate)("Theme enhancements"),hideButton:!t||!this.props.isInfiniteScrollSupported}),p&&b.default.createElement(W.default,{moduleName:r.name,compact:!0}),t&&!p&&b.default.createElement(_.default,{hasChild:!0,module:{module:r.module},key:"theme_enhancement_"+r.module,support:{text:(0,l.translate)("Loads the next posts automatically when the reader approaches the bottom of the page."),link:"https://jetpack.com/support/infinite-scroll"}},b.default.createElement(z.FormLegend,{className:"jp-form-label-wide"},r.name),this.props.isInfiniteScrollSupported?[{key:"infinite_default",label:(0,l.translate)("Load more posts using the default theme behavior")},{key:"infinite_button",label:(0,l.translate)("Load more posts in page with a button")},{key:"infinite_scroll",label:(0,l.translate)("Load more posts as the reader scrolls down")}].map(function(t){return b.default.createElement(z.FormLabel,{key:r.module+"_"+t.key},b.default.createElement("input",{type:"radio",name:"infinite_mode",value:t.key,checked:t.key===e.state.infinite_mode,disabled:e.props.isSavingAnyOption([r.module,t.key]),onChange:e.handleInfiniteScrollModeChange(t.key)}),b.default.createElement("span",{className:"jp-form-toggle-explanation"},t.label))}):b.default.createElement("span",null,(0,l.translate)("Theme support required.")+" ",b.default.createElement("a",{onClick:this.trackLearnMoreIS,href:r.learn_more_button+"#theme",title:(0,l.translate)("Learn more about adding support for Infinite Scroll to your theme.")},(0,l.translate)("Learn more")))),n&&b.default.createElement(_.default,{hasChild:!0,module:{module:a.module},key:"theme_enhancement_"+a.module,support:{text:(0,l.translate)("Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices."),link:"https://jetpack.com/support/mobile-theme"}},b.default.createElement(f.ModuleToggle,{slug:a.module,activated:i,toggling:this.props.isSavingAnyOption(a.module),toggleModule:this.props.toggleModuleNow},b.default.createElement("span",{className:"jp-form-toggle-explanation"},a.description)),b.default.createElement(z.FormFieldset,null,[{key:"wp_mobile_excerpt",label:(0,l.translate)("Use excerpts instead of full posts on front page and archive pages")},{key:"wp_mobile_featured_images",label:(0,l.translate)("Show featured images")},{key:"wp_mobile_app_promos",label:(0,l.translate)("Show an ad for the WordPress mobile apps in the footer of the mobile theme")}].map(function(t){return b.default.createElement(u.default,{checked:e.state[t.key],disabled:!i||e.props.isSavingAnyOption([a.module,t.key]),onChange:e.handleMinilevenOptionChange(t.key,a.module),key:a.module+"_"+t.key},b.default.createElement("span",{className:"jp-form-toggle-explanation"},t.label))}))))}}]),t}(b.default.Component);t.default=(0,M.connect)(function(e){return{module:function(t){return(0,O.getModule)(e,t)},isInfiniteScrollSupported:(0,A.currentThemeSupports)(e,"infinite-scroll"),isModuleFound:function(t){return(0,h.isModuleFound)(e,t)}}})((0,m.withModuleSettingsFormHelpers)(v)),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=W(n(10)),r=W(n(3)),a=W(n(4)),i=W(n(7)),p=W(n(5)),s=W(n(6)),c=W(n(2)),b=n(9),M=n(8),l=W(n(33)),u=W(n(943)),d=W(n(17)),z=W(n(13)),f=n(51),O=n(43),A=n(24),h=n(56),m=n(27),q=W(n(32)),_=W(n(29));function W(e){return e&&e.__esModule?e:{default:e}}var g=function(e){function t(){var e,n,o,i;(0,a.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=o=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(c))),o.regeneratePostByEmailAddress=function(e){z.default.tracks.recordJetpackClick("pbe-regenerage-email"),e.preventDefault(),o.props.regeneratePostByEmailAddress()},o.address=function(){var e=o.props.getOptionValue("post_by_email_address");return!1===e||"1"===e||null===e?"":e},i=n,(0,p.default)(o,i)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){if(!this.props.isModuleFound("post-by-email"))return null;var e=this.props.getModule("post-by-email"),t=this.props.getOptionValue("post-by-email"),n=this.props.isUnavailableInDevMode("post-by-email")||!this.props.isLinked,r=this.address();return c.default.createElement(q.default,(0,o.default)({},this.props,{module:"post-by-email",hideButton:!0}),c.default.createElement(_.default,{hasChild:!0,disableInDevMode:!0,module:e,support:{text:(0,M.translate)("Allows you to publish new posts by sending an email to a special address."),link:"https://jetpack.com/support/post-by-email/"}},this.props.userCanManageModules?c.default.createElement(O.ModuleToggle,{slug:"post-by-email",compact:!0,disabled:n,activated:t,toggling:this.props.isSavingAnyOption("post-by-email"),toggleModule:this.props.toggleModuleNow},c.default.createElement("span",{className:"jp-form-toggle-explanation"},this.props.module("post-by-email").description)):c.default.createElement("span",{className:"jp-form-toggle-explanation"},this.props.module("post-by-email").description),c.default.createElement(f.FormFieldset,null,c.default.createElement(f.FormLabel,null,c.default.createElement(f.FormLegend,null,(0,M.translate)("Email Address")),c.default.createElement(u.default,{value:r,disabled:!t||n,copy:(0,M.translate)("Copy",{context:"verb"}),copied:(0,M.translate)("Copied!"),prompt:(0,M.translate)("Highlight and copy the following text to your clipboard:")})),c.default.createElement(l.default,{disabled:!t||n,onClick:this.regeneratePostByEmailAddress},r?(0,M.translate)("Regenerate address"):(0,M.translate)("Create address")))),!this.props.isUnavailableInDevMode("post-by-email")&&!this.props.isLinked&&c.default.createElement(d.default,{compact:!0,className:"jp-settings-card__configure-link",href:this.props.connectUrl+"&from=unlinked-user-pbe"},(0,M.translate)("Create a Jetpack account to use this feature")))}}]),t}(c.default.Component);t.default=(0,b.connect)(function(e){return{module:function(t){return(0,A.getModule)(e,t)},isModuleFound:function(t){return(0,h.isModuleFound)(e,t)}}})((0,m.withModuleSettingsFormHelpers)(g)),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=z(n(10)),r=z(n(3)),a=z(n(4)),i=z(n(7)),p=z(n(5)),s=z(n(6)),c=z(n(1)),b=z(n(2)),M=z(n(12)),l=z(n(85)),u=z(n(944)),d=z(n(386));function z(e){return e&&e.__esModule?e:{default:e}}n(946);var f=function(e){function t(){var e,n,o,i;(0,a.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=o=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(c))),o.state={isCopied:!1,disabled:!1},o.showConfirmation=function(){o.setState({isCopied:!0}),o.confirmationTimeout=setTimeout(function(){o.setState({isCopied:!1})},4e3)},i=n,(0,p.default)(o,i)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"componentWillUnmount",value:function(){clearTimeout(this.confirmationTimeout),delete this.confirmationTimeout}},{key:"render",value:function(){var e=(0,l.default)(this.props,"className","copied","copy","isError","isValid","prompt","selectOnFocus");return b.default.createElement("span",{className:(0,M.default)("dops-clipboard-button-input",this.props.className)},b.default.createElement(d.default,(0,o.default)({},e,{type:"text",selectOnFocus:!0,readOnly:!0})),b.default.createElement(u.default,{text:this.props.value,onCopy:this.showConfirmation,disabled:this.props.disabled,prompt:this.props.prompt,compact:!0},this.state.isCopied?this.props.copied:this.props.copy))}}]),t}(b.default.Component);f.displayName="ClipboardButtonInput",f.propTypes={value:c.default.string,disabled:c.default.bool,className:c.default.string,copied:c.default.string,copy:c.default.string,prompt:c.default.string},f.defaultProps={value:""},t.default=f,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=M(n(10)),r=M(n(84)),a=M(n(3)),i=M(n(4)),p=M(n(7)),s=M(n(5)),c=M(n(6)),b=M(n(33));function M(e){return e&&e.__esModule?e:{default:e}}var l=n(1),u=n(126),d=n(2),z=n(945),f=n(85),O=n(54),A=n(12),h=function(e){function t(){var e,n,o,r;(0,i.default)(this,t);for(var p=arguments.length,c=Array(p),b=0;b<p;b++)c[b]=arguments[b];return n=o=(0,s.default)(this,(e=t.__proto__||(0,a.default)(t)).call.apply(e,[this].concat(c))),o.displayPrompt=function(){window.prompt(o.props.prompt,o.props.text)},r=n,(0,s.default)(o,r)}return(0,c.default)(t,e),(0,p.default)(t,[{key:"componentDidMount",value:function(){var e=this,t=u.findDOMNode(this.refs.button);this.clipboard=new z(t,{text:function(){return e.props.text}}),this.clipboard.on("success",this.props.onCopy),this.clipboard.on("error",this.displayPrompt)}},{key:"componentWillUnmount",value:function(){this.clipboard.destroy(),delete this.clipboard}},{key:"render",value:function(){var e=A("dops-clipboard-button",this.props.className);return d.createElement(b.default,(0,o.default)({ref:"button"},f(this.props,(0,r.default)(this.constructor.propTypes)),{className:e}))}}]),t}(d.Component);h.displayName="ClipboardButton",h.propTypes={className:l.string,text:l.string,prompt:l.string,onCopy:l.func},h.defaultProps={onCopy:O},t.default=h,e.exports=t.default},function(e,t,n){var o;o=function(){return function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){"use strict";var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),a=s(n(1)),i=s(n(3)),p=s(n(4));function s(e){return e&&e.__esModule?e:{default:e}}var c=function(e){function t(e,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var o=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return o.resolveOptions(n),o.listenClick(e),o}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,i.default),r(t,[{key:"resolveOptions",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText,this.container="object"===o(e.container)?e.container:document.body}},{key:"listenClick",value:function(e){var t=this;this.listener=(0,p.default)(e,"click",function(e){return t.onClick(e)})}},{key:"onClick",value:function(e){var t=e.delegateTarget||e.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new a.default({action:this.action(t),target:this.target(t),text:this.text(t),container:this.container,trigger:t,emitter:this})}},{key:"defaultAction",value:function(e){return b("action",e)}},{key:"defaultTarget",value:function(e){var t=b("target",e);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(e){return b("text",e)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof e?[e]:e,n=!!document.queryCommandSupported;return t.forEach(function(e){n=n&&!!document.queryCommandSupported(e)}),n}}]),t}();function b(e,t){var n="data-clipboard-"+e;if(t.hasAttribute(n))return t.getAttribute(n)}e.exports=c},function(e,t,n){"use strict";var o,r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),i=(o=n(2))&&o.__esModule?o:{default:o},p=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.resolveOptions(t),this.initSelection()}return a(e,[{key:"resolveOptions",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=e.action,this.container=e.container,this.emitter=e.emitter,this.target=e.target,this.text=e.text,this.trigger=e.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var e=this,t="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return e.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[t?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,i.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,i.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var e=void 0;try{e=document.execCommand(this.action)}catch(t){e=!1}this.handleResult(e)}},{key:"handleResult",value:function(e){this.emitter.emit(e?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=e,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(e){if(void 0!==e){if(!e||"object"!==(void 0===e?"undefined":r(e))||1!==e.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&e.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(e.hasAttribute("readonly")||e.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=e}},get:function(){return this._target}}]),e}();e.exports=p},function(e,t){e.exports=function(e){var t;if("SELECT"===e.nodeName)e.focus(),t=e.value;else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var n=e.hasAttribute("readonly");n||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),n||e.removeAttribute("readonly"),t=e.value}else{e.hasAttribute("contenteditable")&&e.focus();var o=window.getSelection(),r=document.createRange();r.selectNodeContents(e),o.removeAllRanges(),o.addRange(r),t=o.toString()}return t}},function(e,t){function n(){}n.prototype={on:function(e,t,n){var o=this.e||(this.e={});return(o[e]||(o[e]=[])).push({fn:t,ctx:n}),this},once:function(e,t,n){var o=this;function r(){o.off(e,r),t.apply(n,arguments)}return r._=t,this.on(e,r,n)},emit:function(e){for(var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),o=0,r=n.length;o<r;o++)n[o].fn.apply(n[o].ctx,t);return this},off:function(e,t){var n=this.e||(this.e={}),o=n[e],r=[];if(o&&t)for(var a=0,i=o.length;a<i;a++)o[a].fn!==t&&o[a].fn._!==t&&r.push(o[a]);return r.length?n[e]=r:delete n[e],this}},e.exports=n},function(e,t,n){var o=n(5),r=n(6);e.exports=function(e,t,n){if(!e&&!t&&!n)throw new Error("Missing required arguments");if(!o.string(t))throw new TypeError("Second argument must be a String");if(!o.fn(n))throw new TypeError("Third argument must be a Function");if(o.node(e))return function(e,t,n){return e.addEventListener(t,n),{destroy:function(){e.removeEventListener(t,n)}}}(e,t,n);if(o.nodeList(e))return function(e,t,n){return Array.prototype.forEach.call(e,function(e){e.addEventListener(t,n)}),{destroy:function(){Array.prototype.forEach.call(e,function(e){e.removeEventListener(t,n)})}}}(e,t,n);if(o.string(e))return function(e,t,n){return r(document.body,e,t,n)}(e,t,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}},function(e,t){t.node=function(e){return void 0!==e&&e instanceof HTMLElement&&1===e.nodeType},t.nodeList=function(e){var n=Object.prototype.toString.call(e);return void 0!==e&&("[object NodeList]"===n||"[object HTMLCollection]"===n)&&"length"in e&&(0===e.length||t.node(e[0]))},t.string=function(e){return"string"==typeof e||e instanceof String},t.fn=function(e){return"[object Function]"===Object.prototype.toString.call(e)}},function(e,t,n){var o=n(7);function r(e,t,n,r,a){var i=function(e,t,n,r){return function(n){n.delegateTarget=o(n.target,t),n.delegateTarget&&r.call(e,n)}}.apply(this,arguments);return e.addEventListener(n,i,a),{destroy:function(){e.removeEventListener(n,i,a)}}}e.exports=function(e,t,n,o,a){return"function"==typeof e.addEventListener?r.apply(null,arguments):"function"==typeof n?r.bind(null,document).apply(null,arguments):("string"==typeof e&&(e=document.querySelectorAll(e)),Array.prototype.map.call(e,function(e){return r(e,t,n,o,a)}))}},function(e,t){if("undefined"!=typeof Element&&!Element.prototype.matches){var n=Element.prototype;n.matches=n.matchesSelector||n.mozMatchesSelector||n.msMatchesSelector||n.oMatchesSelector||n.webkitMatchesSelector}e.exports=function(e,t){for(;e&&9!==e.nodeType;){if("function"==typeof e.matches&&e.matches(t))return e;e=e.parentNode}}}])},e.exports=o()},function(e,t,n){},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Masterbar=void 0;var o=O(n(10)),r=O(n(3)),a=O(n(4)),i=O(n(7)),p=O(n(5)),s=O(n(6)),c=n(2),b=O(c),M=n(8),l=O(n(17)),u=n(27),d=O(n(32)),z=O(n(29)),f=n(43);function O(e){return e&&e.__esModule?e:{default:e}}t.Masterbar=(0,u.withModuleSettingsFormHelpers)(function(e){function t(){return(0,a.default)(this,t),(0,p.default)(this,(t.__proto__||(0,r.default)(t)).apply(this,arguments))}return(0,s.default)(t,e),(0,i.default)(t,[{key:"render",value:function(){var e=this.props.getOptionValue("masterbar"),t=this.props.isUnavailableInDevMode("masterbar"),n=this.props.isLinked;return b.default.createElement(d.default,(0,o.default)({},this.props,{header:(0,M.translate)("WordPress.com toolbar",{context:"Settings header"}),module:"masterbar",hideButton:!0}),b.default.createElement(z.default,{disableInDevMode:!0,module:{module:"masterbar"},support:{link:"https://jetpack.com/support/masterbar/"}},b.default.createElement("p",null,(0,M.translate)("The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.")),b.default.createElement(f.ModuleToggle,{slug:"masterbar",disabled:t||!n,activated:e,toggling:this.props.isSavingAnyOption("masterbar"),toggleModule:this.props.toggleModuleNow},(0,M.translate)("Enable the WordPress.com toolbar"))),!this.props.isUnavailableInDevMode("masterbar")&&!this.props.isLinked&&b.default.createElement(l.default,{compact:!0,className:"jp-settings-card__configure-link",href:this.props.connectUrl+"&from=unlinked-user-masterbar"},(0,M.translate)("Create a Jetpack account to use this feature")))}}]),t}(c.Component))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=_(n(10)),r=_(n(47)),a=_(n(3)),i=_(n(4)),p=_(n(7)),s=_(n(5)),c=_(n(6)),b=n(2),M=_(b),l=n(9),u=n(8),d=_(n(78)),z=n(51),f=n(43),O=n(27),A=_(n(32)),h=_(n(29)),m=n(24),q=n(56);function _(e){return e&&e.__esModule?e:{default:e}}var W=function(e){function t(){var e,n,o,p;(0,i.default)(this,t);for(var c=arguments.length,b=Array(c),M=0;M<c;M++)b[M]=arguments[M];return n=o=(0,s.default)(this,(e=t.__proto__||(0,a.default)(t)).call.apply(e,[this].concat(b))),o.state={carousel_display_exif:o.props.getOptionValue("carousel_display_exif","carousel")},o.updateOptions=function(e){o.setState((0,r.default)({},e,!o.state[e]),o.props.updateFormStateModuleOption("carousel",e))},o.handleCarouselDisplayExifChange=function(){o.updateOptions("carousel_display_exif")},p=n,(0,s.default)(o,p)}return(0,c.default)(t,e),(0,p.default)(t,[{key:"render",value:function(){var e=this.props.isModuleFound("carousel");if(!e)return null;var t=this.props.getOptionValue("carousel");return M.default.createElement(A.default,(0,o.default)({},this.props,{header:(0,u.translate)("Media"),hideButton:!e,saveDisabled:this.props.isSavingAnyOption("carousel_background_color")}),M.default.createElement(h.default,{hasChild:!0,module:{module:"carousel"},support:{link:"https://jetpack.com/support/carousel"}},M.default.createElement("p",null,(0,u.translate)("Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.")),M.default.createElement(f.ModuleToggle,{slug:"carousel",activated:t,toggling:this.props.isSavingAnyOption("carousel"),toggleModule:this.props.toggleModuleNow},M.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,u.translate)("Display images in a full-screen carousel gallery"))),M.default.createElement(z.FormFieldset,null,M.default.createElement(d.default,{checked:this.state.carousel_display_exif,disabled:!t||this.props.isSavingAnyOption(["carousel","carousel_display_exif"]),onChange:this.handleCarouselDisplayExifChange},M.default.createElement("span",{className:"jp-form-toggle-explanation"},(0,u.translate)("Show photo Exif metadata in carousel (when available)"))),M.default.createElement(z.FormFieldset,null,M.default.createElement("p",{className:"jp-form-setting-explanation"},(0,u.translate)("Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO."))),M.default.createElement(z.FormLabel,null,M.default.createElement(z.FormLegend,{className:"jp-form-label-wide"},(0,u.translate)("Carousel color scheme")),M.default.createElement(z.FormSelect,(0,o.default)({name:"carousel_background_color",value:this.props.getOptionValue("carousel_background_color"),disabled:!t||this.props.isSavingAnyOption(["carousel","carousel_background_color"])},this.props,{validValues:this.props.validValues("carousel_background_color","carousel")}))))))}}]),t}(b.Component);t.default=(0,l.connect)(function(e){return{module:function(t){return(0,m.getModule)(e,t)},isModuleFound:function(t){return(0,q.isModuleFound)(e,t)}}})((0,O.withModuleSettingsFormHelpers)(W)),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=O(n(3)),r=O(n(4)),a=O(n(7)),i=O(n(5)),p=O(n(6)),s=n(2),c=O(s),b=n(15),M=n(9),l=n(8),u=O(n(33)),d=O(n(17)),z=n(67),f=n(716);function O(e){return e&&e.__esModule?e:{default:e}}var A=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,b=Array(s),M=0;M<s;M++)b[M]=arguments[M];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(b))),a.activateButton=function(){return c.default.createElement(u.default,{primary:!0,onClick:a.props.jumpStartActivate,disabled:a.props.isJumpstarting},a.props.isJumpstarting?(0,l.translate)("Activating recommended features…"):(0,l.translate)("Activate recommended features"))},a.dismissLink=function(){return(0,l.translate)("{{a}}Skip, and explore features individually{{/a}}.",{components:{a:c.default.createElement("a",{href:"#/settings",onClick:a.props.jumpStartSkip,className:"jp-jumpstart__skip-link"})}})},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){return c.default.createElement("div",{className:"jp-jumpstart"},c.default.createElement(d.default,{className:"jp-jumpstart-card__content"},c.default.createElement("div",{className:"jp-jumpstart-card__img"},c.default.createElement("img",{src:z.imagePath+"man-and-laptop.svg",alt:(0,l.translate)("Person with laptop")})),c.default.createElement("div",{className:"jp-jumpstart-card__description"},c.default.createElement("h3",{className:"jp-jumpstart-card__description-title"},(0,l.translate)("Your Jetpack site is ready to go!")),c.default.createElement("p",{className:"jp-jumpstart-card__description-text"},(0,l.translate)("We’re now collecting stats and securing your site. Welcome aboard.")),c.default.createElement("p",{className:"jp-jumpstart-card__description-text"},(0,l.translate)("Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.",{components:{a:c.default.createElement("a",{href:"https://jetpack.com/support/quick-start-guide/#jumpstart",target:"_blank",rel:"noopener noreferrer"})}})),c.default.createElement("p",null,this.activateButton()),this.dismissLink())))}}]),t}(s.Component);t.default=(0,M.connect)(function(e){return{isJumpstarting:(0,f.isJumpstarting)(e)}},function(e){return(0,b.bindActionCreators)({jumpStartActivate:f.jumpStartActivate,jumpStartSkip:f.jumpStartSkip},e)})(A),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.jumpStartSkip=t.jumpStartActivate=void 0;var o=n(76),r=n(8),a=b(n(13)),i=n(14),p=b(n(37)),s=n(24),c=n(86);function b(e){return e&&e.__esModule?e:{default:e}}t.jumpStartActivate=function(){return function(e){return e({type:i.JUMPSTART_ACTIVATE}),e((0,o.removeNotice)("jumpstart-activate")),e((0,o.createNotice)("is-info",(0,r.translate)("Activating recommended features…"),{id:"jumpstart-activate"})),p.default.jumpStart("activate").then(function(){e({type:i.JUMPSTART_ACTIVATE_SUCCESS,jumpStart:!0}),a.default.tracks.recordEvent("jetpack_wpa_jumpstart_submit",{}),e((0,o.removeNotice)("jumpstart-activate")),e((0,o.createNotice)("is-success",(0,r.translate)("Recommended features active."),{id:"jumpstart-activate",duration:2e3})),e((0,s.fetchModules)()),e((0,c.fetchSettings)())}).catch(function(t){e({type:i.JUMPSTART_ACTIVATE_FAIL,error:t}),e((0,o.removeNotice)("jumpstart-activate")),e((0,o.createNotice)("is-error",(0,r.translate)("Recommended features failed to activate. %(error)s",{args:{error:t}}),{id:"jumpstart-activate"}))})}},t.jumpStartSkip=function(){return function(e){return e({type:i.JUMPSTART_SKIP}),a.default.tracks.recordEvent("jetpack_wpa_jumpstart_skip",{}),p.default.jumpStart("deactivate").then(function(){e({type:i.JUMPSTART_SKIP_SUCCESS,jumpStart:!1})}).catch(function(t){e({type:i.JUMPSTART_SKIP_FAIL,error:t})})}}},function(e,t,n){var o=n(385),r=n(169),a=n(176),i=Math.ceil,p=Math.max;e.exports=function(e,t,n){t=(n?r(e,t,n):void 0===t)?1:p(a(t),0);var s=null==e?0:e.length;if(!s||t<1)return[];for(var c=0,b=0,M=Array(i(s/t));c<s;)M[b++]=o(e,c,c+=t);return M}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=O(n(3)),r=O(n(4)),a=O(n(7)),i=O(n(5)),p=O(n(6)),s=n(2),c=O(s),b=O(n(1)),M=n(9),l=O(n(106)),u=n(8),d=O(n(12)),z=n(42),f=n(20);function O(e){return e&&e.__esModule?e:{default:e}}var A=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){var e=this.props,t=e.siteRawUrl,n=e.inDevMode,o=c.default.createElement("a",{href:"https://wordpress.com/activity-log/"+t}),r=(0,u.translate)("{{a}}View your site's activity{{/a}} in a single feed.",{components:{a:o}});return c.default.createElement("div",{className:"jp-dash-item__interior"},c.default.createElement(l.default,{label:(0,u.translate)("Activity"),isModule:!1,className:(0,d.default)({"jp-dash-item__is-inactive":n}),pro:!1},c.default.createElement("p",{className:"jp-dash-item__description"},n?(0,u.translate)("Unavailable in Dev Mode."):r)))}}]),t}(s.Component);A.propTypes={inDevMode:b.default.bool.isRequired,siteRawUrl:b.default.string.isRequired,sitePlan:b.default.object.isRequired},A.defaultProps={inDevMode:!1,siteRawUrl:"",sitePlan:""},t.default=(0,M.connect)(function(e){return{sitePlan:(0,z.getSitePlan)(e),inDevMode:(0,f.isDevMode)(e)}})(A),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DashStats=void 0;var o=B(n(49)),r=B(n(3)),a=B(n(4)),i=B(n(7)),p=B(n(5)),s=B(n(6)),c=B(n(1)),b=n(2),M=B(b),l=B(n(177)),u=B(n(22)),d=B(n(183)),z=B(n(17)),f=B(n(954)),O=n(9),A=B(n(718)),h=B(n(33)),m=B(n(666)),q=n(8),_=B(n(13)),W=n(67),g=n(20),v=n(21),y=B(n(963)),L=B(n(964)),R=n(52),E=n(24),w=n(86),k=B(n(426));function B(e){return e&&e.__esModule?e:{default:e}}var T=t.DashStats=function(e){function t(e){(0,a.default)(this,t);var n=(0,p.default)(this,(t.__proto__||(0,r.default)(t)).call(this,e));return n.dismissCard=function(){n.setState({emptyStatsDismissed:!0}),n.props.updateOptions({dismiss_empty_stats_card:!0})},n.activateStats=function(){return n.props.updateOptions({stats:!0})},n.switchToDay=function(){return n.switchTo("day")},n.switchToWeek=function(){return n.switchTo("week")},n.switchToMonth=function(){return n.switchTo("month")},n.state={emptyStatsDismissed:e.isEmptyStatsCardDismissed},n}return(0,s.default)(t,e),(0,i.default)(t,[{key:"barClick",value:function(e){e.data.link&&(_.default.tracks.recordJetpackClick("stats_bar"),window.open(e.data.link,"_blank"))}},{key:"statsChart",value:function(e){var t=this.props,n=[],r=0;return"object"!==(0,o.default)(t.statsData[e])?{chartData:n,totalViews:!1}:((0,l.default)(t.statsData[e].data,function(o){var a=o[1],i=o[0],p="",s="";r+=a,"day"===e?(p=(0,q.moment)(i).format("MMM D"),s=(0,q.moment)(i).format("MMMM Do")):"week"===e?(i=i.replace(/W/g,"-"),p=(0,q.moment)(i).format("MMM D"),s=(0,q.translate)("Week of %(date)s",{args:{date:(0,q.moment)(i).format("MMMM Do")}})):(p=(0,q.moment)(i).format("MMM"),s=(0,q.moment)(i).format("MMMM, YYYY")),n.push({label:p,value:a,nestedValue:null,className:"statsChartbar",data:{link:"https://wordpress.com/stats/"+e+"/"+t.siteRawUrl+"?startDate="+i},tooltipData:[{label:s,value:(0,q.translate)("Views: %(numberOfViews)s",{args:{numberOfViews:(0,q.numberFormat)(a)}}),className:"tooltip class"},{label:(0,q.translate)("Click to view detailed stats.")}]})}),{chartData:n,totalViews:r})}},{key:"statsErrors",value:function(){return(0,u.default)(this.props.statsData,["general","errors"],!1)}},{key:"renderStatsChart",value:function(e){return M.default.createElement("div",null,M.default.createElement("div",{className:"jp-at-a-glance__stats-chart"},M.default.createElement(f.default,{data:e,barClick:this.barClick}),0===e.length&&M.default.createElement(m.default,null)),M.default.createElement("div",{id:"stats-bottom",className:"jp-at-a-glance__stats-bottom"},M.default.createElement(L.default,{statsData:this.props.statsData,siteRawUrl:this.props.siteRawUrl,siteAdminUrl:this.props.siteAdminUrl,isLinked:this.props.isLinked,connectUrl:this.props.connectUrl})))}},{key:"renderEmptyStatsCard",value:function(){return M.default.createElement(z.default,{className:"jp-at-a-glance__stats-empty"},M.default.createElement("img",{src:W.imagePath+"stats-people.svg",width:"272",height:"144",alt:(0,q.translate)("Jetpack Stats People"),className:"jp-at-a-glance__stats-icon"}),M.default.createElement("p",null,(0,q.translate)("Hello there! Your stats have been activated."),M.default.createElement("br",null),(0,q.translate)("Just give us a little time to collect data so we can display it for you here.")),M.default.createElement(h.default,{onClick:this.dismissCard,primary:!0},(0,q.translate)("Okay, got it!")))}},{key:"renderStatsArea",value:function(){if(this.props.getOptionValue("stats")){if(this.statsErrors())return M.default.createElement("div",{className:"jp-at-a-glance__stats-inactive"},M.default.createElement("span",null,(0,q.translate)("Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}",{components:{a:M.default.createElement("a",{href:"https://wordpress.com/stats/insights/"+this.props.siteRawUrl})}})));var e=this.statsChart(this.props.activeTab),t=e.chartData,n=e.totalViews,o=t.length&&n<=0&&!this.props.isEmptyStatsCardDismissed&&!this.state.emptyStatsDismissed;return M.default.createElement("div",{className:"jp-at-a-glance__stats-container"},o?this.renderEmptyStatsCard():this.renderStatsChart(t))}return M.default.createElement("div",{className:"jp-at-a-glance__stats-inactive"},M.default.createElement("div",{className:"jp-at-a-glance__stats-inactive-icon"},M.default.createElement("img",{src:W.imagePath+"stats.svg",width:"60",height:"60",alt:(0,q.translate)("Jetpack Stats Icon"),className:"jp-at-a-glance__stats-icon"})),M.default.createElement("div",{className:"jp-at-a-glance__stats-inactive-text"},this.props.isDevMode?(0,q.translate)("Unavailable in Dev Mode"):(0,q.translate)("{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}",{components:{a:M.default.createElement("a",{href:"javascript:void(0)",onClick:this.activateStats}),a1:M.default.createElement("a",{href:"https://jetpack.com/support/wordpress-com-stats/",target:"_blank",rel:"noopener noreferrer"})}})),!this.props.isDevMode&&M.default.createElement("div",{className:"jp-at-a-glance__stats-inactive-button"},M.default.createElement(h.default,{onClick:this.activateStats,primary:!0},(0,q.translate)("Activate Site Stats"))))}},{key:"switchTo",value:function(e){_.default.tracks.recordJetpackClick({target:"stats_switch_view",view:e}),this.props.switchView(e),this.props.fetchStatsData(e)}},{key:"maybeShowStatsTabs",value:function(){return!(!1===this.statsChart(this.props.activeTab).totalViews&&!this.props.isEmptyStatsCardDismissed&&!this.state.emptyStatsDismissed)&&(this.props.getOptionValue("stats")&&!this.statsErrors()?M.default.createElement("ul",{className:"jp-at-a-glance__stats-views"},M.default.createElement("li",{className:"jp-at-a-glance__stats-view"},M.default.createElement("a",{tabIndex:"0",href:"javascript:void(0)",onClick:this.switchToDay,className:this.getClass("day")},(0,q.translate)("Days"))),M.default.createElement("li",{className:"jp-at-a-glance__stats-view"},M.default.createElement("a",{tabIndex:"0",href:"javascript:void(0)",onClick:this.switchToWeek,className:this.getClass("week")},(0,q.translate)("Weeks"))),M.default.createElement("li",{className:"jp-at-a-glance__stats-view"},M.default.createElement("a",{tabIndex:"0",href:"javascript:void(0)",onClick:this.switchToMonth,className:this.getClass("month")},(0,q.translate)("Months")))):void 0)}},{key:"getClass",value:function(e){return this.props.activeTab===e?"jp-at-a-glance__stats-view-link is-current":"jp-at-a-glance__stats-view-link"}},{key:"render",value:function(){return"inactive"===this.props.getModuleOverride("stats")?M.default.createElement("div",null,M.default.createElement(k.default,{moduleName:(0,q.translate)("Site Stats")})):this.props.isModuleAvailable&&M.default.createElement("div",null,M.default.createElement(y.default,{range:this.props.activeTab}),M.default.createElement(A.default,{label:(0,q.translate)("Site Stats")},this.maybeShowStatsTabs()),M.default.createElement(z.default,{className:"jp-at-a-glance__stats-card "+(this.props.isDevMode?"is-inactive":"")},this.renderStatsArea()))}}]),t}(b.Component);T.propTypes={isDevMode:c.default.bool.isRequired,siteRawUrl:c.default.string.isRequired,siteAdminUrl:c.default.string.isRequired,statsData:c.default.any.isRequired,isModuleAvailable:c.default.bool.isRequired},t.default=(0,O.connect)(function(e){return{isModuleAvailable:(0,E.isModuleAvailable)(e,"stats"),activeTab:(0,R.getActiveStatsTab)(e),isDevMode:(0,g.isDevMode)(e),isLinked:(0,g.isCurrentUserLinked)(e),connectUrl:(0,g.getConnectUrl)(e),statsData:(0,d.default)((0,R.getStatsData)(e))?(0,v.getInitialStateStatsData)(e):(0,R.getStatsData)(e),isEmptyStatsCardDismissed:(0,w.emptyStatsCardDismissed)(e),getModuleOverride:function(t){return(0,E.getModuleOverride)(e,t)}}},function(e){return{switchView:function(t){return e((0,R.statsSwitchTab)(t))},fetchStatsData:function(t){return e((0,R.fetchStatsData)(t))}}})(T)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=s(n(3)),r=s(n(4)),a=s(n(7)),i=s(n(5)),p=s(n(6));function s(e){return e&&e.__esModule?e:{default:e}}var c=n(2),b=n(1),M=n(54),l=n(719),u=n(955),d=n(961);n(962);var z=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.state={maxBars:100,width:650},a.resize=function(){var e=a.refs.chart.clientWidth-82,t=void 0;d.hasTouch()?(e=e<=0?350:e,t=Math.floor(e/a.props.minTouchBarWidth)):t=Math.floor(e/a.props.minBarWidth),a.setState({maxBars:t,width:e})},a.getYAxisMax=function(e){var t=Math.max.apply(null,e),n=Math.pow(10,t.toString().length-1),o=Math.ceil((t+1)/n)*n;return o<10&&(o=10),o},a.getData=function(){var e=a.props.data;return e.slice(0-a.state.maxBars)},a.getValues=function(){var e=a.getData();return e.map(function(e){return e.value},a)},a.isEmptyChart=function(e){return 0===(e=e.filter(function(e){return e>0},a)).length},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"componentDidMount",value:function(){this.resize=l(this.resize,400),window.addEventListener("resize",this.resize),this.resize()}},{key:"componentWillUnmount",value:function(){window.removeEventListener("resize",this.resize)}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){this.props.loading&&!e.loading&&this.resize()}},{key:"render",value:function(){var e=this.getValues(),t=this.getYAxisMax(e),n=this.getData(),o=void 0;return e.length&&this.isEmptyChart(e)&&(o=c.createElement("div",{className:"dops-chart__empty"},c.createElement("span",{className:"dops-chart__empty_notice"},"No activity this period"))),c.createElement("div",{ref:"chart",className:"dops-chart"},c.createElement("div",{className:"dops-chart__y-axis-markers"},c.createElement("div",{className:"dops-chart__y-axis-marker is-hundred"}),c.createElement("div",{className:"dops-chart__y-axis-marker is-fifty"}),c.createElement("div",{className:"dops-chart__y-axis-marker is-zero"})),c.createElement("div",{className:"dops-chart__y-axis"},c.createElement("div",{className:"dops-chart__y-axis-width-fix"},new Number(1e5).toLocaleString()),c.createElement("div",{className:"dops-chart__y-axis-label is-hundred"},t.toLocaleString()),c.createElement("div",{className:"dops-chart__y-axis-label is-fifty"},(t/2).toLocaleString()),c.createElement("div",{className:"dops-chart__y-axis-label is-zero"},0)),c.createElement(u,{barClick:this.props.barClick,data:n,yAxisMax:t,chartWidth:this.state.width,isTouch:d.hasTouch()}),o)}}]),t}(c.Component);z.displayName="ModuleChart",z.propTypes={loading:b.bool,data:b.array,minTouchBarWidth:b.number,minBarWidth:b.number,barClick:b.func},z.defaultProps={minTouchBarWidth:42,minBarWidth:15,barClick:M},t.default=z,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=s(n(3)),r=s(n(4)),a=s(n(7)),i=s(n(5)),p=s(n(6));function s(e){return e&&e.__esModule?e:{default:e}}var c=n(1),b=n(2),M=n(956),l=n(959),u=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),l=0;l<s;l++)c[l]=arguments[l];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.buildBars=function(e){var t=a.props.data.length,n=a.props.chartWidth,o=n/t,r="bottom right";return a.props.data.map(function(a,i){var p=o*(i+1);return p+230>n&&p+o-230>0&&(r="bottom left"),b.createElement(M,{index:i,key:i,isTouch:this.props.isTouch,tooltipPosition:r,className:a.className,clickHandler:this.props.barClick,data:a,max:e,count:t})},a)},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){return b.createElement("div",null,b.createElement("div",{className:"dops-chart__bars"},this.buildBars(this.props.yAxisMax)),b.createElement(l,{data:this.props.data,labelWidth:42}))}}]),t}(b.Component);u.displayName="ModuleChartBarContainer",u.propTypes={isTouch:c.bool,data:c.array,yAxisMax:c.number,width:c.number,barClick:c.func},t.default=u,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=s(n(3)),r=s(n(4)),a=s(n(7)),i=s(n(5)),p=s(n(6));function s(e){return e&&e.__esModule?e:{default:e}}var c=n(1),b=n(2),M=n(12),l=n(957),u=n(55),d=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),d=0;d<s;d++)c[d]=arguments[d];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.state={showPopover:!1},a.buildSections=function(){var e=a.props.data.value,t=a.props.max,n=100-(t?Math.ceil(e/t*1e4)/100:0),o=Math.max(1,Math.floor(n)),r=[],i=a.props.data.nestedValue,p={"dops-chart__bar-section":!0,"is-spacer":!0,"is-ghost":100===n&&!a.props.active},s=void 0,c=void 0,l={height:o+"%"};r.push(b.createElement("div",{key:"spacer",className:M(p),style:l}));var u={top:o+"%"};return i&&(c={height:(e?Math.ceil(i/e*1e4)/100:0)+"%"},s=b.createElement("div",{key:"nestedValue",className:"dops-chart__bar-section-inner",style:c})),r.push(b.createElement("div",{ref:"valueBar",key:"value",className:"dops-chart__bar-section is-bar",style:u},s)),r.push(b.createElement("div",{key:"label",className:"dops-chart__bar-label"},a.props.label)),r},a.clickHandler=function(){"function"==typeof a.props.clickHandler&&a.props.clickHandler(a.props.data)},a.mouseEnter=function(){a.setState({showPopover:!0})},a.mouseLeave=function(){a.setState({showPopover:!1})},a.renderTooltip=function(){if(!a.props.data.tooltipData||!a.props.data.tooltipData.length||a.props.isTouch)return null;var e=a.props.data.tooltipData.map(function(e,t){var n=["module-content-list-item"],o=void 0;return e.icon&&(o=b.createElement(u,{icon:e.icon,size:18})),n.push(e.className),b.createElement("li",{key:t,className:n.join(" ")},b.createElement("span",{className:"dops-wrapper"},b.createElement("span",{className:"value"},e.value),b.createElement("span",{className:"label"},o,e.label)))});return b.createElement(l,{className:"dops-chart__tooltip",id:"popover__chart-bar",showDelay:200,context:a.refs&&a.refs.valueBar,isVisible:a.state.showPopover,position:a.props.tooltipPosition},b.createElement("ul",null,e))},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){var e=this.props.count||1,t={"dops-chart__bar":!0};this.props.className&&(t[this.props.className]=!0);var n={width:1/e*100+"%"};return b.createElement("div",{role:"button",tabIndex:0,onClick:this.clickHandler,onMouseEnter:this.mouseEnter,onMouseLeave:this.mouseLeave,className:M(t),style:n},this.buildSections(),b.createElement("div",{className:"dops-chart__bar-marker is-hundred"}),b.createElement("div",{className:"dops-chart__bar-marker is-fifty"}),b.createElement("div",{className:"dops-chart__bar-marker is-zero"}),this.renderTooltip())}}]),t}(b.Component);d.displayName="ModuleChartBar",d.propTypes={isTouch:c.bool,tooltipPosition:c.string,className:c.string,clickHandler:c.func,data:c.object.isRequired,max:c.number,count:c.number},t.default=d,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=d(n(3)),r=d(n(4)),a=d(n(7)),i=d(n(5)),p=d(n(6)),s=d(n(1)),c=n(2),b=d(c),M=d(n(12)),l=d(n(635)),u=d(n(608));function d(e){return e&&e.__esModule?e:{default:e}}n(958);var z=function(){},f=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){if(!this.props.showOnMobile&&u.default.isMobile())return null;var e=(0,M.default)("dops-popover","dops-tooltip","is-"+this.props.position,this.props.className);return b.default.createElement(l.default,{autoPosition:this.props.autoPosition,className:e,rootClassName:this.props.rootClassName,context:this.props.context,id:this.props.id,isVisible:this.props.isVisible,onClose:z,position:this.props.position,showDelay:this.props.showDelay},this.props.children)}}]),t}(c.Component);f.propTypes={autoPosition:s.default.bool,className:s.default.string,id:s.default.string,isVisible:s.default.bool,position:s.default.string,rootClassName:s.default.string,status:s.default.string,showDelay:s.default.number,showOnMobile:s.default.bool},f.defaultProps={showDelay:100,position:"top",showOnMobile:!1},t.default=f,e.exports=t.default},function(e,t,n){},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=s(n(3)),r=s(n(4)),a=s(n(7)),i=s(n(5)),p=s(n(6));function s(e){return e&&e.__esModule?e:{default:e}}var c=n(2),b=n(1),M=n(719),l=n(960),u=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.state={divisor:1,spacing:a.props.labelWidth},a.resize=function(e){var t=a.props,n=a.refs.axis;!e||e instanceof Event||(t=e),n.style.overflow="hidden";var o=n.clientWidth;n.style.overflow="visible";var r=o/(t.data.length||1),i=t.labelWidth,p=Math.ceil(i/r);a.setState({divisor:p,spacing:r})},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"componentDidMount",value:function(){this.resizeThrottled=M(this.resize,400),window.addEventListener("resize",this.resizeThrottled),this.resize()}},{key:"componentWillUnmount",value:function(){this.resizeThrottled.cancel&&this.resizeThrottled.cancel(),window.removeEventListener("resize",this.resizeThrottled)}},{key:"UNSAFE_componentWillReceiveProps",value:function(e){this.resize(e)}},{key:"render",value:function(){var e=this.props.data,t=e.map(function(t,n){var o=n*this.state.spacing+(this.state.spacing-this.props.labelWidth)/2,r=void 0;return(e.length-n-1)%this.state.divisor==0&&(r=c.createElement(l,{key:n,label:t.label,width:this.props.labelWidth,x:o})),r},this);return c.createElement("div",{ref:"axis",className:"dops-chart__x-axis"},t)}}]),t}(c.Component);u.displayName="ModuleChartXAxis",u.propTypes={labelWidth:b.number.isRequired,data:b.array.isRequired},t.default=u,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=s(n(3)),r=s(n(4)),a=s(n(7)),i=s(n(5)),p=s(n(6));function s(e){return e&&e.__esModule?e:{default:e}}var c=n(1),b=n(2),M=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){var e={width:this.props.width+"px"};return e.left=this.props.x+"px",b.createElement("div",{className:"dops-chart__x-axis-label",style:e},this.props.label)}}]),t}(b.Component);M.displayName="ModuleChartLabel",M.propTypes={width:c.number.isRequired,x:c.number.isRequired,label:c.string.isRequired},t.default=M,e.exports=t.default},function(e,t,n){"use strict";e.exports={hasTouch:function(){return"ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch}}},function(e,t,n){},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=M(n(3)),r=M(n(4)),a=M(n(7)),i=M(n(5)),p=M(n(6)),s=n(2),c=n(9),b=n(52);function M(e){return e&&e.__esModule?e:{default:e}}var l=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"UNSAFE_componentWillMount",value:function(){this.props.fetchingStatsData||this.props.fetchStatsData(this.props.range)}},{key:"render",value:function(){return null}}]),t}(s.Component);l.defaultProps={fetchStatsData:function(){}},t.default=(0,c.connect)(function(e){return{fetchStatsData:function(t){return(0,b.fetchStatsData)(e,t)},fetchingStatsData:(0,b.isFetchingStatsData)(e)}},function(e){return{fetchStatsData:function(t){return e((0,b.fetchStatsData)(t))}}})(l),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=f(n(49)),r=f(n(3)),a=f(n(4)),i=f(n(7)),p=f(n(5)),s=f(n(6)),c=f(n(1)),b=n(2),M=f(b),l=f(n(33)),u=f(n(13)),d=f(n(17)),z=n(8);function f(e){return e&&e.__esModule?e:{default:e}}var O=function(e){function t(){var e,n,o,i;(0,a.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=o=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(c))),o.trackViewDetailedStats=function(){return u.default.tracks.recordJetpackClick("view_detailed_stats")},o.trackViewWpcomStats=function(){return u.default.tracks.recordJetpackClick("view_wpcom_stats")},i=n,(0,p.default)(o,i)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"statsBottom",value:function(){var e;return[{viewsToday:(e="object"===(0,o.default)(this.props.statsData.general)?this.props.statsData.general.stats:{views:"-",comments:"-",views_today:"-",views_best_day:"-",views_best_day_total:"-"}).views_today,bestDay:{day:e.views_best_day,count:e.views_best_day_total},allTime:{views:e.views,comments:e.comments}}]}},{key:"render",value:function(){var e=this.statsBottom()[0];return M.default.createElement("div",null,M.default.createElement("div",{className:"jp-at-a-glance__stats-summary"},M.default.createElement("div",{className:"jp-at-a-glance__stats-summary-today"},M.default.createElement("p",{className:"jp-at-a-glance__stat-details"},(0,z.translate)("Views today",{comment:"Referring to a number of page views"})),M.default.createElement("h3",{className:"jp-at-a-glance__stat-number"},e.viewsToday)),M.default.createElement("div",{className:"jp-at-a-glance__stats-summary-bestday"},M.default.createElement("p",{className:"jp-at-a-glance__stat-details"},(0,z.translate)("Best overall day",{comment:"Referring to a number of page views"})),M.default.createElement("h3",{className:"jp-at-a-glance__stat-number"},"-"===e.bestDay.count?"-":(0,z.translate)("%(number)s View","%(number)s Views",{count:e.bestDay.count,args:{number:(0,z.numberFormat)(e.bestDay.count)}})),M.default.createElement("p",{className:"jp-at-a-glance__stat-details"},"-"===e.bestDay.day?"-":(0,z.moment)(e.bestDay.day).format("MMMM Do, YYYY"))),M.default.createElement("div",{className:"jp-at-a-glance__stats-summary-alltime"},M.default.createElement("div",{className:"jp-at-a-glance__stats-alltime-views"},M.default.createElement("p",{className:"jp-at-a-glance__stat-details"},(0,z.translate)("All-time views",{comment:"Referring to a number of page views"})),M.default.createElement("h3",{className:"jp-at-a-glance__stat-number"},"-"===e.allTime.views?"-":(0,z.numberFormat)(e.allTime.views))),M.default.createElement("div",{className:"jp-at-a-glance__stats-alltime-comments"},M.default.createElement("p",{className:"jp-at-a-glance__stat-details"},(0,z.translate)("All-time comments",{comment:"Referring to a number of comments"})),M.default.createElement("h3",{className:"jp-at-a-glance__stat-number"},"-"===e.allTime.comments?"-":(0,z.numberFormat)(e.allTime.comments))))),M.default.createElement("div",{className:"jp-at-a-glance__stats-cta"},M.default.createElement("div",{className:"jp-at-a-glance__stats-cta-description"}),M.default.createElement("div",{className:"jp-at-a-glance__stats-cta-buttons"},(0,z.translate)("{{button}}View detailed stats{{/button}}",{components:{button:M.default.createElement(l.default,{onClick:this.trackViewDetailedStats,href:this.props.siteAdminUrl+"admin.php?page=stats"})}}),this.props.isLinked&&(0,z.translate)("{{button}}View more stats on WordPress.com {{/button}}",{components:{button:M.default.createElement(l.default,{onClick:this.trackViewWpcomStats,className:"is-primary",href:"https://wordpress.com/stats/insights/"+this.props.siteRawUrl})}}))),!this.props.isLinked&&M.default.createElement(d.default,{compact:!0,className:"jp-settings-card__configure-link",href:this.props.connectUrl+"&from=unlinked-user-connect"},(0,z.translate)("Connect your account to WordPress.com to view more stats")))}}]),t}(b.Component);O.propTypes={siteRawUrl:c.default.string.isRequired,siteAdminUrl:c.default.string.isRequired,statsData:c.default.object.isRequired,isLinked:c.default.bool.isRequired},O.defaultProps={siteRawUrl:"",siteAdminUrl:"",statsData:{},isLinked:!1},t.default=O,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=A(n(3)),r=A(n(4)),a=A(n(7)),i=A(n(5)),p=A(n(6)),s=A(n(1)),c=n(2),b=A(c),M=n(9),l=A(n(106)),u=n(8),d=A(n(966)),z=n(24),f=n(52),O=n(20);function A(e){return e&&e.__esModule?e:{default:e}}var h=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.activateProtect=function(){return a.props.updateOptions({protect:!0})},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"getContent",value:function(){var e={text:(0,u.translate)("Protects your site from traditional and distributed brute force login attacks."),link:"https://jetpack.com/support/protect/"};if(this.props.getOptionValue("protect")){var t=this.props.protectCount;return!1===t||"0"===t||"N/A"===t?b.default.createElement(l.default,{label:"Protect",module:"protect",support:e,status:"is-working",className:"jp-dash-item__recently-activated"},b.default.createElement("div",{className:"jp-dash-item__recently-activated-lower"},b.default.createElement(d.default,null),b.default.createElement("p",{className:"jp-dash-item__description"},(0,u.translate)("Jetpack is actively blocking malicious login attempts. Data will display here soon!")))):b.default.createElement(l.default,{label:"Protect",module:"protect",support:e,status:"is-working"},b.default.createElement("h2",{className:"jp-dash-item__count"},(0,u.numberFormat)(t)),b.default.createElement("p",{className:"jp-dash-item__description"},(0,u.translate)("Total malicious attacks blocked on your site.")))}return b.default.createElement(l.default,{label:"Protect",module:"protect",support:e,className:"jp-dash-item__is-inactive"},b.default.createElement("p",{className:"jp-dash-item__description"},this.props.isDevMode?(0,u.translate)("Unavailable in Dev Mode"):(0,u.translate)("{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.",{components:{a:b.default.createElement("a",{href:"javascript:void(0)",onClick:this.activateProtect})}})))}},{key:"render",value:function(){return this.props.isModuleAvailable&&b.default.createElement("div",{className:"jp-dash-item__interior"},b.default.createElement(d.default,null),this.getContent())}}]),t}(c.Component);h.propTypes={isDevMode:s.default.bool.isRequired,protectCount:s.default.any.isRequired,isModuleAvailable:s.default.bool.isRequired},t.default=(0,M.connect)(function(e){return{protectCount:(0,f.getProtectCount)(e),isDevMode:(0,O.isDevMode)(e),isModuleAvailable:(0,z.isModuleAvailable)(e,"protect")}})(h),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=u(n(3)),r=u(n(4)),a=u(n(7)),i=u(n(5)),p=u(n(6)),s=n(2),c=n(9),b=n(15),M=n(52),l=n(24);function u(e){return e&&e.__esModule?e:{default:e}}var d=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"UNSAFE_componentWillMount",value:function(){!this.props.fetchingProtectData&&this.props.isModuleActivated("protect")&&this.props.fetchProtectCount()}},{key:"render",value:function(){return null}}]),t}(s.Component);d.defaultProps={fetchProtectCount:function(){}},t.default=(0,c.connect)(function(e){return{fetchProtectCount:(0,M.fetchProtectCount)(),fetchingProtectData:(0,M.isFetchingProtectData)(e),isModuleActivated:function(t){return(0,l.isModuleActivated)(e,t)}}},function(e){return(0,b.bindActionCreators)({fetchProtectCount:M.fetchProtectCount},e)})(d),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=O(n(3)),r=O(n(4)),a=O(n(7)),i=O(n(5)),p=O(n(6)),s=O(n(1)),c=n(2),b=O(c),M=n(9),l=n(8),u=O(n(13)),d=n(24),z=n(20),f=O(n(106));function O(e){return e&&e.__esModule?e:{default:e}}var A=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.activateAndTrack=function(){u.default.tracks.recordEvent("jetpack_wpa_module_toggle",{module:"monitor",toggled:"on"}),a.props.updateOptions({monitor:!0})},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"getContent",value:function(){var e=(0,l.translate)("Downtime monitoring"),t={text:(0,l.translate)("Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected."),link:"https://jetpack.com/support/monitor/"};return this.props.getOptionValue("monitor")?b.default.createElement(f.default,{label:e,module:"monitor",support:t,status:"is-working"},b.default.createElement("p",{className:"jp-dash-item__description"},(0,l.translate)("Jetpack is monitoring your site. If we think your site is down, you will receive an email."))):b.default.createElement(f.default,{label:e,module:"monitor",support:t,className:"jp-dash-item__is-inactive"},b.default.createElement("p",{className:"jp-dash-item__description"},this.props.isDevMode?(0,l.translate)("Unavailable in Dev Mode."):(0,l.translate)("{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.",{components:{a:b.default.createElement("a",{href:"javascript:void(0)",onClick:this.activateAndTrack})}})))}},{key:"render",value:function(){return this.props.isModuleAvailable&&this.getContent()}}]),t}(c.Component);A.propTypes={isDevMode:s.default.bool.isRequired,isModuleAvailable:s.default.bool.isRequired},t.default=(0,M.connect)(function(e){return{isDevMode:(0,z.isDevMode)(e),isModuleAvailable:(0,d.isModuleAvailable)(e,"monitor")}})(A),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=v(n(3)),r=v(n(4)),a=v(n(7)),i=v(n(5)),p=v(n(6)),s=v(n(1)),c=n(2),b=v(c),M=n(9),l=n(8),u=n(38),d=v(n(17)),z=v(n(650)),f=v(n(720)),O=n(42),A=n(103),h=n(52),m=n(20),q=v(n(106)),_=v(n(26)),W=v(n(22)),g=n(21);function v(e){return e&&e.__esModule?e:{default:e}}var y=function(e){return b.default.createElement(q.default,{label:(0,l.translate)("Security Scanning"),module:e.feature||"scan",support:{text:(0,l.translate)("Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data."),link:"https://jetpack.com/support/security/"},className:e.className||"",status:e.status||"",pro:!0},(0,_.default)(e.content)?e.content:b.default.createElement("p",{className:"jp-dash-item__description"},e.content))},L=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"getVPContent",value:function(){var e=this.props,t=e.sitePlan,n=e.fetchingSiteData,o=!1!==t,r=this.props.vaultPressData,a=(0,W.default)(r,["data","features","security"],!1);if(this.props.getOptionValue("vaultpress")){if("N/A"===r)return y({status:"",content:(0,l.translate)("Loading…")});if(a){var i=this.props.scanThreats;if(0!==i)return y({content:[b.default.createElement("h3",null,(0,l.translate)("Uh oh, %(number)s threat found.","Uh oh, %(number)s threats found.",{count:i,args:{number:(0,l.numberFormat)(i)}})),b.default.createElement("p",{className:"jp-dash-item__description"},(0,l.translate)("{{a}}View details at VaultPress.com{{/a}}",{components:{a:b.default.createElement("a",{href:"https://dashboard.vaultpress.com/"})}}),b.default.createElement("br",null),(0,l.translate)("{{a}}Contact Support{{/a}}",{components:{a:b.default.createElement("a",{href:"https://jetpack.com/support"})}}))]});if("success"===r.code)return y({status:"is-working",content:(0,l.translate)("No threats found, you're good to go!")})}}if(n)return y({status:"",content:(0,l.translate)("Loading…")});var p=this.props.isVaultPressInstalled?"pro-inactive":"pro-uninstalled",s=(0,u.getPlanClass)((0,W.default)(t,"product_slug","")),c="is-premium-plan"===s,M="is-business-plan"===s;return y({className:"jp-dash-item__is-inactive",status:o?p:"no-pro-uninstalled-or-inactive",content:[b.default.createElement("p",{className:"jp-dash-item__description",key:"inactive-scanning"},c||M||a?(0,l.translate)("For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.",{components:{a:b.default.createElement("a",{href:"https://wordpress.com/plugins/vaultpress",target:"_blank",rel:"noopener noreferrer"})}}):(0,l.translate)("For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.",{components:{a:b.default.createElement(f.default,{source:"aag-scan"})}}))]})}},{key:"render",value:function(){if(!this.props.showBackups)return null;if(this.props.isDevMode)return y({className:"jp-dash-item__is-inactive",content:(0,l.translate)("Unavailable in Dev Mode.")});var e=(0,W.default)(this.props.vaultPressData,"data",""),t=e&&e.site_id;return b.default.createElement("div",null,b.default.createElement(z.default,null),this.props.isRewindActive?b.default.createElement("div",{className:"jp-dash-item"},y({className:"jp-dash-item__is-active",status:"is-working",content:(0,l.translate)("We are making sure your site stays free of security threats. You will be notified if we find one."),feature:"rewind"}),b.default.createElement(d.default,{key:"security-scanning",className:"jp-dash-item__manage-in-wpcom",compact:!0,href:"https://dashboard.vaultpress.com/"+t+"/security/"},(0,l.translate)("View security scan details"))):this.getVPContent())}}]),t}(c.Component);L.propTypes={siteRawUrl:s.default.string.isRequired,vaultPressData:s.default.any.isRequired,scanThreats:s.default.any.isRequired,sitePlan:s.default.object.isRequired,isDevMode:s.default.bool.isRequired,isPluginInstalled:s.default.bool.isRequired,fetchingSiteData:s.default.bool.isRequired},L.defaultProps={siteRawUrl:"",vaultPressData:"",scanThreats:0,sitePlan:"",isDevMode:!1,isPluginInstalled:!1,fetchingSiteData:!1},t.default=(0,M.connect)(function(e){return{vaultPressData:(0,h.getVaultPressData)(e),scanThreats:(0,h.getVaultPressScanThreatCount)(e),sitePlan:(0,O.getSitePlan)(e),isDevMode:(0,m.isDevMode)(e),isVaultPressInstalled:(0,A.isPluginInstalled)(e,"vaultpress/vaultpress.php"),fetchingSiteData:(0,O.isFetchingSiteData)(e),showBackups:(0,g.showBackups)(e)}})(L),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=h(n(3)),r=h(n(4)),a=h(n(7)),i=h(n(5)),p=h(n(6)),s=h(n(1)),c=n(2),b=h(c),M=n(9),l=n(8),u=h(n(17)),d=h(n(106)),z=h(n(970)),f=n(52),O=n(42),A=n(20);function h(e){return e&&e.__esModule?e:{default:e}}var m=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"getContent",value:function(){var e=this.props.akismetData,t=(0,l.translate)("Spam Protection"),n={text:(0,l.translate)("Akismet checks your comments and contact form submissions against our global database of spam."),link:"https://akismet.com/",privacyLink:"https://automattic.com/privacy/"};if("N/A"===e)return b.default.createElement(d.default,{label:t,module:"akismet",support:n,pro:!0},b.default.createElement("p",{className:"jp-dash-item__description"},(0,l.translate)("Loading…")));var o=!1!==this.props.sitePlan;return"not_installed"===e?b.default.createElement(d.default,{label:t,module:"akismet",support:n,className:"jp-dash-item__is-inactive",status:o?"pro-uninstalled":"no-pro-uninstalled-or-inactive",pro:!0},b.default.createElement("p",{className:"jp-dash-item__description"},(0,l.translate)("For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.",{components:{a:b.default.createElement("a",{href:"https://wordpress.com/plugins/akismet/"+this.props.siteRawUrl,target:"_blank",rel:"noopener noreferrer"})}}))):"not_active"===e?b.default.createElement(d.default,{label:t,module:"akismet",support:n,status:o?"pro-inactive":"no-pro-uninstalled-or-inactive",className:"jp-dash-item__is-inactive",pro:!0},b.default.createElement("p",{className:"jp-dash-item__description"},(0,l.translate)("For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.",{components:{a:b.default.createElement("a",{href:"https://wordpress.com/plugins/akismet/"+this.props.siteRawUrl,target:"_blank",rel:"noopener noreferrer"})}}))):"invalid_key"===e?b.default.createElement(d.default,{label:t,module:"akismet",support:n,className:"jp-dash-item__is-inactive",status:"is-warning",statusText:(0,l.translate)("Invalid key"),pro:!0},b.default.createElement("p",{className:"jp-dash-item__description"},(0,l.translate)("Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.",{components:{akismetSettings:b.default.createElement("a",{href:this.props.siteAdminUrl+"admin.php?page=akismet-key-config"})}}))):[b.default.createElement(d.default,{key:"comment-moderation",label:t,module:"akismet",support:n,status:"is-working",pro:!0},b.default.createElement("h2",{className:"jp-dash-item__count"},(0,l.numberFormat)(e.all.spam)),b.default.createElement("p",{className:"jp-dash-item__description"},(0,l.translate)("Spam comments blocked.",{context:'Example: "412 Spam comments blocked"'}))),!this.props.isDevMode&&b.default.createElement(u.default,{key:"moderate-comments",className:"jp-dash-item__manage-in-wpcom",compact:!0,href:"https://wordpress.com/comments/all/"+this.props.siteRawUrl},(0,l.translate)("Moderate comments"))]}},{key:"render",value:function(){return b.default.createElement("div",{className:"jp-dash-item__interior"},b.default.createElement(z.default,null),this.getContent())}}]),t}(c.Component);m.propTypes={siteRawUrl:s.default.string.isRequired,siteAdminUrl:s.default.string.isRequired,akismetData:s.default.oneOfType([s.default.string,s.default.object]).isRequired,isDevMode:s.default.bool.isRequired},m.defaultProps={siteRawUrl:"",siteAdminUrl:"",akismetData:"N/A",isDevMode:""},t.default=(0,M.connect)(function(e){return{akismetData:(0,f.getAkismetData)(e),sitePlan:(0,O.getSitePlan)(e),isDevMode:(0,A.isDevMode)(e)}})(m),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=l(n(3)),r=l(n(4)),a=l(n(7)),i=l(n(5)),p=l(n(6)),s=n(2),c=n(9),b=n(15),M=n(52);function l(e){return e&&e.__esModule?e:{default:e}}var u=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"UNSAFE_componentWillMount",value:function(){this.props.fetchingAkismetData||this.props.fetchAkismetData()}},{key:"render",value:function(){return null}}]),t}(s.Component);u.defaultProps={fetchAkismetData:function(){}},t.default=(0,c.connect)(function(e){return{fetchAkismetData:(0,M.fetchAkismetData)(),fetchingAkismetData:(0,M.isFetchingAkismetData)(e)}},function(e){return(0,b.bindActionCreators)({fetchAkismetData:M.fetchAkismetData},e)})(u),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=v(n(3)),r=v(n(4)),a=v(n(7)),i=v(n(5)),p=v(n(6)),s=v(n(1)),c=n(2),b=v(c),M=n(9),l=v(n(106)),u=n(8),d=v(n(54)),z=v(n(183)),f=v(n(22)),O=v(n(17)),A=v(n(650)),h=v(n(720)),m=n(42),q=n(103),_=n(52),W=n(20),g=n(21);function v(e){return e&&e.__esModule?e:{default:e}}var y=function(e){return b.default.createElement(l.default,{label:(0,u.translate)("Backups"),module:e.feature||"backups",support:{text:(0,u.translate)("Jetpack Backups allow you to easily restore or download a backup from a specific moment."),link:"https://jetpack.com/support/backups/"},className:e.className,status:e.status,pro:!0},b.default.createElement("p",{className:"jp-dash-item__description"},e.content))},L=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"getVPContent",value:function(){var e=this.props,t=e.sitePlan,n=e.isVaultPressInstalled,o=e.getOptionValue,r=e.siteRawUrl,a=e.vaultPressData;return o("vaultpress")&&"success"===(0,f.default)(a,"code","")?y({className:"jp-dash-item__is-active",status:"is-working",content:b.default.createElement("span",null,(0,f.default)(a,"message","")," ",(0,u.translate)("{{a}}View backup details{{/a}}.",{components:{a:b.default.createElement("a",{href:"https://dashboard.vaultpress.com",target:"_blank",rel:"noopener noreferrer"})}}))}):(0,z.default)(t)?y({className:"",status:"",content:(0,u.translate)("Loading…")}):"jetpack_free"!==(0,f.default)(t,"product_slug","jetpack_free")?y({className:"jp-dash-item__is-inactive",status:n?"pro-inactive":"pro-uninstalled",content:(0,u.translate)("To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.",{components:{a:b.default.createElement("a",{href:"https://wordpress.com/plugins/setup/"+r+"?only=backups",target:"_blank",rel:"noopener noreferrer"})}})}):y({className:"jp-dash-item__is-inactive",status:"no-pro-uninstalled-or-inactive",content:(0,u.translate)("To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.",{components:{a:b.default.createElement(h.default,{source:"aag-backups"})}})})}},{key:"render",value:function(){if(!this.props.showBackups)return null;if(this.props.isDevMode)return b.default.createElement("div",{className:"jp-dash-item__interior"},y({className:"jp-dash-item__is-inactive",status:"no-pro-uninstalled-or-inactive",content:(0,u.translate)("Unavailable in Dev Mode.")}));var e=(0,f.default)(this.props.vaultPressData,"data",""),t=e&&e.site_id;return b.default.createElement("div",null,b.default.createElement(A.default,null),this.props.isRewindActive?b.default.createElement("div",{className:"jp-dash-item"},y({className:"jp-dash-item__is-active",status:"is-working",content:(0,u.translate)("Your site is being backed up in real-time."),feature:"rewind"}),b.default.createElement(O.default,{key:"manage-backups",className:"jp-dash-item__manage-in-wpcom",compact:!0,href:"https://dashboard.vaultpress.com/"+t+"/backups/"},(0,u.translate)("View backup history"))):this.getVPContent())}}]),t}(c.Component);L.propTypes={siteRawUrl:s.default.string.isRequired,getOptionValue:s.default.func.isRequired,isRewindActive:s.default.bool.isRequired,vaultPressData:s.default.any.isRequired,sitePlan:s.default.object.isRequired,isDevMode:s.default.bool.isRequired,isVaultPressInstalled:s.default.bool.isRequired},L.defaultProps={siteRawUrl:"",getOptionValue:d.default,isRewindActive:!1,vaultPressData:"",sitePlan:"",isDevMode:!1,isVaultPressInstalled:!1},t.default=(0,M.connect)(function(e){return{vaultPressData:(0,_.getVaultPressData)(e),sitePlan:(0,m.getSitePlan)(e),isDevMode:(0,W.isDevMode)(e),isVaultPressInstalled:(0,q.isPluginInstalled)(e,"vaultpress/vaultpress.php"),showBackups:(0,g.showBackups)(e)}})(L),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=h(n(3)),r=h(n(4)),a=h(n(7)),i=h(n(5)),p=h(n(6)),s=h(n(1)),c=n(2),b=h(c),M=n(9),l=n(8),u=h(n(17)),d=h(n(106)),z=h(n(973)),f=n(52),O=n(24),A=n(20);function h(e){return e&&e.__esModule?e:{default:e}}var m=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"activateAndRedirect",value:function(e){e.preventDefault(),this.props.activateManage().then(window.location="https://wordpress.com/plugins/manage/"+this.props.siteRawUrl)}},{key:"getContent",value:function(){var e=(0,l.translate)("Plugin Updates"),t=this.props.pluginUpdates,n={text:(0,l.translate)("Jetpack’s Plugin Updates allows you to choose which plugins update automatically."),link:"https://jetpack.com/support/site-management/"};if("N/A"===t)return b.default.createElement(d.default,{label:e,module:"manage",support:n,status:"is-working"},b.default.createElement(z.default,null),b.default.createElement("p",{className:"jp-dash-item__description"},(0,l.translate)("Loading…")));var o="updates-available"===t.code,r="https://wordpress.com/plugins/manage/"+this.props.siteRawUrl,a=this.props.getOptionValue("manage")?"is-working":"is-inactive";return[b.default.createElement(d.default,{key:"plugin-updates",label:e,module:"manage",support:n,status:o?"is-warning":a},o&&b.default.createElement("h2",{className:"jp-dash-item__count"},(0,l.translate)("%(number)s","%(number)s",{count:t.count,args:{number:t.count}})),b.default.createElement("p",{className:"jp-dash-item__description"},o?[(0,l.translate)("Plugin needs updating.","Plugins need updating.",{count:t.count})+" ",!this.props.isDevMode&&(0,l.translate)("{{a}}Turn on plugin autoupdates{{/a}}",{components:{a:b.default.createElement("a",{href:r})}})]:(0,l.translate)("All plugins are up-to-date. Awesome work!"))),!this.props.isDevMode&&b.default.createElement(u.default,{key:"manage-plugins",className:"jp-dash-item__manage-in-wpcom",compact:!0,href:r,target:"_blank"},(0,l.translate)("Manage your plugins"))]}},{key:"render",value:function(){return this.props.isModuleAvailable&&b.default.createElement("div",null,b.default.createElement(z.default,null),this.getContent())}}]),t}(c.Component);m.propTypes={isDevMode:s.default.bool.isRequired,siteRawUrl:s.default.string.isRequired,siteAdminUrl:s.default.string.isRequired,pluginUpdates:s.default.any.isRequired,isModuleAvailable:s.default.bool.isRequired},t.default=(0,M.connect)(function(e){return{pluginUpdates:(0,f.getPluginUpdates)(e),isDevMode:(0,A.isDevMode)(e),isModuleAvailable:(0,O.isModuleAvailable)(e,"manage")}})(m),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=l(n(3)),r=l(n(4)),a=l(n(7)),i=l(n(5)),p=l(n(6)),s=n(2),c=n(9),b=n(15),M=n(52);function l(e){return e&&e.__esModule?e:{default:e}}var u=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"UNSAFE_componentWillMount",value:function(){this.props.fetchingPluginUpdates||this.props.fetchPluginUpdates()}},{key:"render",value:function(){return null}}]),t}(s.Component);u.defaultProps={fetchPluginUpdates:function(){}},t.default=(0,c.connect)(function(e){return{fetchPluginUpdates:(0,M.fetchPluginUpdates)(),fetchingPluginUpdates:(0,M.isFetchingPluginUpdates)(e)}},function(e){return(0,b.bindActionCreators)({fetchPluginUpdates:M.fetchPluginUpdates},e)})(u),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=f(n(3)),r=f(n(4)),a=f(n(7)),i=f(n(5)),p=f(n(6)),s=f(n(1)),c=n(2),b=f(c),M=n(9),l=f(n(106)),u=n(8),d=n(24),z=n(20);function f(e){return e&&e.__esModule?e:{default:e}}var O=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.activatePhoton=function(){return a.props.updateOptions({photon:!0})},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"getContent",value:function(){var e=(0,u.translate)("Image Performance"),t={text:(0,u.translate)("Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site."),link:"https://jetpack.com/support/photon/"};return this.props.getOptionValue("photon")?b.default.createElement(l.default,{label:e,module:"photon",support:t,status:"is-working"},b.default.createElement("p",{className:"jp-dash-item__description"},(0,u.translate)("Jetpack is improving and optimizing your image speed."))):b.default.createElement(l.default,{label:e,module:"photon",support:t,className:"jp-dash-item__is-inactive"},b.default.createElement("p",{className:"jp-dash-item__description"},this.props.isDevMode?(0,u.translate)("Unavailable in Dev Mode"):(0,u.translate)("{{a}}Activate{{/a}} to enhance the performance and speed of your images.",{components:{a:b.default.createElement("a",{href:"javascript:void(0)",onClick:this.activatePhoton})}})))}},{key:"render",value:function(){return this.props.isModuleAvailable&&this.getContent()}}]),t}(c.Component);O.propTypes={isDevMode:s.default.bool.isRequired,isModuleAvailable:s.default.bool.isRequired},t.default=(0,M.connect)(function(e){return{isDevMode:(0,z.isDevMode)(e),isModuleAvailable:(0,d.isModuleAvailable)(e,"photon")}})(O),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=m(n(3)),r=m(n(4)),a=m(n(7)),i=m(n(5)),p=m(n(6)),s=m(n(1)),c=n(2),b=m(c),M=n(9),l=n(8),u=m(n(54)),d=m(n(106)),z=m(n(17)),f=n(56),O=n(20),A=n(42),h=n(38);function m(e){return e&&e.__esModule?e:{default:e}}var q=function(e){return b.default.createElement(d.default,{label:(0,l.translate)("Jetpack Search"),module:"search",support:{text:(0,l.translate)("Jetpack Search is a powerful replacement for the search capability built into WordPress."),link:"https://jetpack.com/support/search/"},className:e.className,status:e.status,isModule:e.pro_inactive,pro:!0},b.default.createElement("p",{className:"jp-dash-item__description"},e.content))},_=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.activateSearch=function(){return a.props.updateOptions({search:!0})},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){var e="is-business-plan"===this.props.planClass;return this.props.isDevMode?q({className:"jp-dash-item__is-inactive",status:"no-pro-uninstalled-or-inactive",pro_inactive:!0,content:(0,l.translate)("Unavailable in Dev Mode")}):e?this.props.getOptionValue("search")?b.default.createElement("div",{className:"jp-dash-item"},b.default.createElement(d.default,{label:(0,l.translate)("Search"),module:"search",support:{text:(0,l.translate)("Jetpack Search is a powerful replacement for the search capability built into WordPress."),link:"https://jetpack.com/support/search/"},className:"jp-dash-item__is-active",isModule:!1,pro:!0},b.default.createElement("p",{className:"jp-dash-item__description"},(0,l.translate)("Jetpack Search is powering search on your site."))),b.default.createElement(z.default,{compact:!0,className:"jp-search-config-aag",href:"customize.php?autofocus[panel]=widgets"},(0,l.translate)("Add Search (Jetpack) Widget"))):q({className:"jp-dash-item__is-inactive",pro_inactive:!1,content:(0,l.translate)("{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.",{components:{a:b.default.createElement("a",{href:"javascript:void(0)",onClick:this.activateSearch})}})}):q({className:"jp-dash-item__is-inactive",status:"no-pro-uninstalled-or-inactive",pro_inactive:!0,content:(0,l.translate)("Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.",{components:{a:b.default.createElement("a",{href:"https://jetpack.com/features/design/elasticsearch-powered-search/",target:"_blank",rel:"noopener noreferrer"})}})})}}]),t}(c.Component);_.propTypes={getOptionValue:s.default.func.isRequired,isDevMode:s.default.bool.isRequired},_.defaultProps={getOptionValue:u.default,isDevMode:!1},t.default=(0,M.connect)(function(e){return{foundSearch:(0,f.isModuleFound)(e,"search"),planClass:(0,h.getPlanClass)((0,A.getSitePlan)(e).product_slug),isDevMode:(0,O.isDevMode)(e)}})(_),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DashConnections=void 0;var o=h(n(3)),r=h(n(4)),a=h(n(7)),i=h(n(5)),p=h(n(6)),s=h(n(1)),c=n(2),b=h(c),M=n(9),l=n(8),u=h(n(55)),d=h(n(106)),z=n(20),f=n(21),O=h(n(977)),A=h(n(978));function h(e){return e&&e.__esModule?e:{default:e}}var m=t.DashConnections=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"siteConnection",value:function(){var e="";return this.props.isDevMode?e=b.default.createElement("div",{className:"jp-connection-settings__info"},this.props.siteIcon?b.default.createElement("img",{width:"64",height:"64",className:"jp-connection-settings__site-icon",src:this.props.siteIcon,alt:""}):b.default.createElement(u.default,{icon:"globe",size:64}),b.default.createElement("div",{className:"jp-connection-settings__text"},(0,l.translate)("Your site is in Development Mode, so it can not be connected to WordPress.com."))):!0===this.props.siteConnectionStatus&&(e=b.default.createElement("div",null,b.default.createElement("div",{className:"jp-connection-settings__info"},this.props.siteIcon?b.default.createElement("img",{width:"64",height:"64",className:"jp-connection-settings__site-icon",src:this.props.siteIcon,alt:""}):b.default.createElement(u.default,{icon:"globe",size:64}),b.default.createElement("div",{className:"jp-connection-settings__text"},(0,l.translate)("Your site is connected to WordPress.com."),this.props.userIsMaster&&b.default.createElement("span",{className:"jp-connection-settings__is-owner"},b.default.createElement("br",null),b.default.createElement("em",null,(0,l.translate)("You are the Jetpack owner."))))),this.props.userCanDisconnectSite&&b.default.createElement("div",{className:"jp-connection-settings__actions"},b.default.createElement(A.default,{asLink:!0})))),e}},{key:"userConnection",value:function(){var e=this.props.userIsMaster?null:b.default.createElement(A.default,{asLink:!0,connectUser:!0,from:"connection-settings"});return this.props.isDevMode?b.default.createElement("div",{className:"jp-connection-settings__info"},b.default.createElement("img",{alt:"gravatar",width:"64",height:"64",className:"jp-connection-settings__gravatar",src:this.props.userWpComAvatar}),b.default.createElement("div",{className:"jp-connection-settings__text"},(0,l.translate)("The site is in Development Mode, so you can not connect to WordPress.com."))):this.props.isLinked?b.default.createElement("div",null,b.default.createElement("div",{className:"jp-connection-settings__info"},b.default.createElement("img",{alt:"gravatar",width:"64",height:"64",className:"jp-connection-settings__gravatar",src:this.props.userWpComAvatar}),b.default.createElement("div",{className:"jp-connection-settings__text"},(0,l.translate)("Connected as {{span}}%(username)s{{/span}}",{args:{username:this.props.userWpComLogin},components:{span:b.default.createElement("span",{className:"jp-connection-settings__username"})},comment:"%(username) is the WordPress user login name."}),b.default.createElement("div",{className:"jp-connection-settings__email"},this.props.userWpComEmail))),b.default.createElement("div",{className:"jp-connection-settings__actions"},e)):b.default.createElement("div",null,b.default.createElement("div",{className:"jp-connection-settings__info"},(0,l.translate)("Link your account to WordPress.com to get the most out of Jetpack.")),b.default.createElement("div",{className:"jp-connection-settings__actions"},e))}},{key:"render",value:function(){return b.default.createElement("div",null,b.default.createElement(O.default,null),b.default.createElement("div",{className:"jp-at-a-glance__item-grid"},b.default.createElement("div",{className:"jp-at-a-glance__left"},b.default.createElement("div",{className:"jp-dash-item__interior"},b.default.createElement(d.default,{className:"jp-connection-type",label:(0,l.translate)("Site connection",{context:"Dashboard widget header"})},this.siteConnection()))),b.default.createElement("div",{className:"jp-at-a-glance__right"},b.default.createElement("div",{className:"jp-dash-item__interior"},b.default.createElement(d.default,{className:"jp-connection-type",label:(0,l.translate)("Account connection",{context:"Dashboard widget header"})},this.userConnection())))))}}]),t}(c.Component);m.propTypes={siteConnectionStatus:s.default.any.isRequired,isDevMode:s.default.bool.isRequired,userCanDisconnectSite:s.default.bool.isRequired,userIsMaster:s.default.bool.isRequired,isLinked:s.default.bool.isRequired,userWpComLogin:s.default.any.isRequired,userWpComEmail:s.default.any.isRequired,userWpComAvatar:s.default.any.isRequired,username:s.default.any.isRequired},t.default=(0,M.connect)(function(e){return{siteConnectionStatus:(0,z.getSiteConnectionStatus)(e),isDevMode:(0,z.isDevMode)(e),userCanDisconnectSite:(0,f.userCanDisconnectSite)(e),userIsMaster:(0,f.userIsMaster)(e),userWpComLogin:(0,f.getUserWpComLogin)(e),userWpComEmail:(0,f.getUserWpComEmail)(e),userWpComAvatar:(0,f.getUserWpComAvatar)(e),username:(0,f.getUsername)(e),isLinked:(0,z.isCurrentUserLinked)(e),siteIcon:(0,f.getSiteIcon)(e)}})(m)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.QueryUserConnectionData=void 0;var o=M(n(3)),r=M(n(4)),a=M(n(7)),i=M(n(5)),p=M(n(6)),s=M(n(2)),c=n(9),b=n(20);function M(e){return e&&e.__esModule?e:{default:e}}var l=t.QueryUserConnectionData=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"UNSAFE_componentWillMount",value:function(){this.props.isFetchingUserData||this.props.isDevMode||this.props.fetchUserConnectionData()}},{key:"render",value:function(){return null}}]),t}(s.default.Component);t.default=(0,c.connect)(function(e){return{isFetchingUserData:(0,b.isFetchingUserData)(e),isDevMode:(0,b.isDevMode)(e)}},function(e){return{fetchUserConnectionData:function(){return e((0,b.fetchUserConnectionData)())}}})(l)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ConnectButton=void 0;var o=A(n(3)),r=A(n(4)),a=A(n(7)),i=A(n(5)),p=A(n(6)),s=A(n(1)),c=A(n(2)),b=n(9),M=A(n(33)),l=n(8),u=A(n(13)),d=n(20),z=n(21),f=A(n(105)),O=A(n(979));function A(e){return e&&e.__esModule?e:{default:e}}n(985);var h=t.ConnectButton=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,b=Array(s),d=0;d<s;d++)b[d]=arguments[d];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(b))),a.state={showModal:!1},a.handleOpenModal=function(e){u.default.tracks.recordJetpackClick("manage_site_connection"),e.preventDefault(),a.toggleVisibility()},a.disconnectSite=function(){a.toggleVisibility(),a.props.disconnectSite()},a.toggleVisibility=function(){a.setState({showModal:!a.state.showModal})},a.renderUserButton=function(){if(a.props.isLinked)return c.default.createElement("div",null,c.default.createElement("a",{role:"button",tabIndex:"0",className:"jp-jetpack-unlink__button",onKeyDown:(0,f.default)(a.props.unlinkUser),onClick:a.props.unlinkUser,disabled:a.props.isUnlinking},(0,l.translate)("Unlink me from WordPress.com")));var e=a.props.connectUrl;a.props.from&&(e+="&from="+a.props.from,e+="&additional-user");var t={className:"is-primary jp-jetpack-connect__button",href:e,disabled:a.props.fetchingConnectUrl},n=(0,l.translate)("Link to WordPress.com");return a.props.asLink?c.default.createElement("a",t,n):c.default.createElement(M.default,t,n)},a.renderContent=function(){if(a.props.connectUser)return a.renderUserButton();if(a.props.isSiteConnected)return c.default.createElement("a",{role:"button",tabIndex:"0",onKeyDown:(0,f.default)(a.handleOpenModal),onClick:a.handleOpenModal,disabled:a.props.isDisconnecting},(0,l.translate)("Manage site connection"));var e=a.props.connectUrl;a.props.from&&(e+="&from="+a.props.from);var t={className:"jp-jetpack-connect__button",href:e,disabled:a.props.fetchingConnectUrl},n=(0,l.translate)("Set up Jetpack");return a.props.asLink?c.default.createElement("a",t,n):c.default.createElement(M.default,t,n)},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){return c.default.createElement("div",null,!this.props.isSiteConnected&&c.default.createElement("p",{className:"jp-banner__tos-blurb"},(0,l.translate)("By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.",{components:{tosLink:c.default.createElement("a",{href:"https://wordpress.com/tos",rel:"noopener noreferrer",target:"_blank"}),shareDetailsLink:c.default.createElement("a",{href:"https://jetpack.com/support/what-data-does-jetpack-sync",rel:"noopener noreferrer",target:"_blank"})}})),this.renderContent(),this.props.children,c.default.createElement(O.default,{show:this.state.showModal,toggleModal:this.toggleVisibility,disconnectSite:this.disconnectSite}))}}]),t}(c.default.Component);h.displayName="ConnectButton",h.propTypes={connectUser:s.default.bool,from:s.default.string,asLink:s.default.bool},h.defaultProps={connectUser:!1,from:"",asLink:!1},t.default=(0,b.connect)(function(e){return{siteRawUrl:(0,z.getSiteRawUrl)(e),isSiteConnected:(0,d.getSiteConnectionStatus)(e),isDisconnecting:(0,d.isDisconnectingSite)(e),fetchingConnectUrl:(0,d.isFetchingConnectUrl)(e),connectUrl:(0,d.getConnectUrl)(e),isLinked:(0,d.isCurrentUserLinked)(e),isUnlinking:(0,d.isUnlinkingUser)(e)}},function(e){return{disconnectSite:function(){return e((0,d.disconnectSite)())},unlinkUser:function(){return e((0,d.unlinkUser)())}}})(h)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.JetpackDisconnectDialog=void 0;var o=_(n(3)),r=_(n(4)),a=_(n(7)),i=_(n(5)),p=_(n(6)),s=_(n(1)),c=_(n(2)),b=n(9),M=n(8),l=_(n(33)),u=_(n(17)),d=_(n(55)),z=_(n(980)),f=n(38),O=_(n(54)),A=_(n(13)),h=n(42),m=n(20),q=n(21);function _(e){return e&&e.__esModule?e:{default:e}}var W=t.JetpackDisconnectDialog=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.getPlanFeatures=function(){switch((0,f.getPlanClass)(a.props.sitePlan.product_slug)){case"is-personal-plan":return[{text:(0,M.translate)("Daily, automated backups (unlimited storage)"),icon:"history"},{text:(0,M.translate)("Priority support"),icon:"chat"},{text:(0,M.translate)("Spam filtering"),icon:"spam"}];case"is-premium-plan":return[{text:(0,M.translate)("Daily, automated backups (unlimited storage)"),icon:"history"},{text:(0,M.translate)("Daily, automated malware scanning"),icon:"spam"},{text:(0,M.translate)("Priority support"),icon:"chat"},{text:(0,M.translate)("Unlimited, high-speed video hosting"),icon:"video"}];case"is-business-plan":return[{text:(0,M.translate)("Real-time, automated backups (unlimited storage)"),icon:"history"},{text:(0,M.translate)("Daily, automated malware scanning with automated resolution"),icon:"spam"},{text:(0,M.translate)("Priority support"),icon:"chat"},{text:(0,M.translate)("Unlimited, high-speed video hosting"),icon:"video"},{text:(0,M.translate)("SEO preview tools"),icon:"globe"}];default:return[{text:(0,M.translate)("Site stats, related content, and sharing tools"),icon:"stats-alt"},{text:(0,M.translate)("Brute force attack protection and downtime monitoring"),icon:"lock"},{text:(0,M.translate)("Unlimited, high-speed image hosting"),icon:"image"}]}},a.closeModal=function(){A.default.tracks.recordJetpackClick({target:"manage_site_connection",button:"stay-connected"}),a.props.toggleModal()},a.disconnectSiteTrack=function(){A.default.tracks.recordJetpackClick({target:"manage_site_connection",button:"disconnect-site"}),a.props.disconnectSite(!0)},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){return this.props.show&&c.default.createElement(z.default,{className:"jp-connection-settings__modal",onRequestClose:this.props.toggleModal},c.default.createElement(u.default,{className:"jp-connection-settings__modal-body"},c.default.createElement("h2",null,(0,M.translate)("Disconnect Jetpack")),c.default.createElement("h4",null,(0,M.translate)("By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:",{args:{siteName:this.props.siteRawUrl.replace(/::/g,"/")}})),c.default.createElement("ul",null,this.getPlanFeatures().map(function(e){return c.default.createElement("li",{key:"feature_"+e.icon},c.default.createElement(d.default,{icon:e.icon,size:18}),e.text)})),c.default.createElement("div",{className:"jp-connection-settings__modal-actions"},c.default.createElement(l.default,{className:"jp-connection-settings__modal-cancel",onClick:this.closeModal},(0,M.translate)("Stay connected",{context:"A caption for a button to cancel disconnection."})),c.default.createElement(l.default,{onClick:this.disconnectSiteTrack,scary:!0,primary:!0},(0,M.translate)("Disconnect",{context:"A caption for a button to disconnect."}))),c.default.createElement("p",{className:"jp-connection-settings__modal-more"},c.default.createElement("a",{href:"https://jetpack.com/features/"},(0,M.translate)("Read more about Jetpack benefits")))))}}]),t}(c.default.Component);W.propTypes={show:s.default.bool,toggleModal:s.default.func,disconnectSite:s.default.func},W.defaultProps={show:!1,toggleModal:O.default,disconnectSite:O.default},t.default=(0,b.connect)(function(e){return{siteRawUrl:(0,q.getSiteRawUrl)(e),isDisconnecting:(0,m.isDisconnectingSite)(e),sitePlan:(0,h.getSitePlan)(e)}},function(e){return{disconnectSite:function(){return e((0,m.disconnectSite)(!0))}}})(W)},function(e,t,n){"use strict";var o=b(n(10)),r=b(n(382)),a=b(n(3)),i=b(n(4)),p=b(n(7)),s=b(n(5)),c=b(n(6));function b(e){return e&&e.__esModule?e:{default:e}}var M=n(1),l=n(2),u=n(126),d=n(12),z=n(23),f=n(85),O=n(981),A=!1;n(984);var h=function(e){function t(){var e,n,o,r;(0,i.default)(this,t);for(var p=arguments.length,c=Array(p),b=0;b<p;b++)c[b]=arguments[b];return n=o=(0,s.default)(this,(e=t.__proto__||(0,a.default)(t)).call.apply(e,[this].concat(c))),o.state={overlayMouseDown:!1},o.handleEscapeKey=function(e){27===e.keyCode&&o.maybeClose()},o.maybeClose=function(){o.props.onRequestClose&&!A&&o.props.onRequestClose()},o.handleMouseDownOverlay=function(e){e.preventDefault(),e.stopPropagation(),o.setState({overlayMouseDown:!0})},o.handleClickOverlay=function(e){e.preventDefault(),e.stopPropagation(),o.state.overlayMouseDown&&o.props.onRequestClose&&!A&&(o.setState({overlayMouseDown:!1}),o.props.onRequestClose())},o.handleMouseEventModal=function(e){e.stopPropagation()},r=n,(0,s.default)(o,r)}return(0,c.default)(t,e),(0,p.default)(t,[{key:"componentDidMount",value:function(){jQuery("body").addClass("dops-modal-showing").on("touchmove.dopsmodal",!1),jQuery(document).keyup(this.handleEscapeKey);try{O.activate(u.findDOMNode(this),{initialFocus:this.props.initialFocus})}catch(e){}}},{key:"componentWillUnmount",value:function(){jQuery("body").removeClass("dops-modal-showing").off("touchmove.dopsmodal",!1),jQuery(document).unbind("keyup",this.handleEscapeKey);try{O.deactivate()}catch(e){}}},{key:"render",value:function(){var e=void 0,t=this.props,n=t.style,a=t.className,i=t.width,p=t.title,s=(0,r.default)(t,["style","className","width","title"]),c=f(s,"onRequestClose").forwardedProps;switch(i){case"wide":e={maxWidth:"inherit",width:"inherit"};break;case"medium":e={maxWidth:1050,width:"inherit"};break;default:e={}}var b=z({},n,e);return l.createElement("div",{className:"dops-modal-wrapper",onClick:this.handleClickOverlay,onMouseDown:this.handleMouseDownOverlay},l.createElement("div",(0,o.default)({className:d("dops-modal",a),style:b,onClick:this.handleMouseEventModal,onMouseDown:this.handleMouseEventModal,onMouseUp:this.handleMouseEventModal,role:"dialog","aria-label":p},c),this.props.children))}}]),t}(l.Component);h.propTypes={style:M.object,width:M.oneOf(["wide","medium","narrow"]),className:M.string,title:M.string,initialFocus:M.string,onRequestClose:M.func},h.defaultProps={style:{}},h.preventClose=function(){A=!0},h.allowClose=function(){A=!1},e.exports=h},function(e,t,n){var o,r=n(982),a=n(983),i=(o=[],{activateTrap:function(e){if(o.length>0){var t=o[o.length-1];t!==e&&t.pause()}var n=o.indexOf(e);-1===n?o.push(e):(o.splice(n,1),o.push(e))},deactivateTrap:function(e){var t=o.indexOf(e);-1!==t&&o.splice(t,1),o.length>0&&o[o.length-1].unpause()}});function p(e){return setTimeout(e,0)}e.exports=function(e,t){var n=document,o="string"==typeof e?n.querySelector(e):e,s=a({returnFocusOnDeactivate:!0,escapeDeactivates:!0},t),c={firstTabbableNode:null,lastTabbableNode:null,nodeFocusedBeforeActivation:null,mostRecentlyFocusedNode:null,active:!1,paused:!1},b={activate:function(e){if(!c.active){m(),c.active=!0,c.paused=!1,c.nodeFocusedBeforeActivation=n.activeElement;var t=e&&e.onActivate?e.onActivate:s.onActivate;return t&&t(),l(),b}},deactivate:M,pause:function(){!c.paused&&c.active&&(c.paused=!0,u())},unpause:function(){c.paused&&c.active&&(c.paused=!1,l())}};return b;function M(e){if(c.active){u(),c.active=!1,c.paused=!1,i.deactivateTrap(b);var t=e&&void 0!==e.onDeactivate?e.onDeactivate:s.onDeactivate;return t&&t(),(e&&void 0!==e.returnFocus?e.returnFocus:s.returnFocusOnDeactivate)&&p(function(){q(c.nodeFocusedBeforeActivation)}),b}}function l(){if(c.active)return i.activateTrap(b),m(),p(function(){q(z())}),n.addEventListener("focusin",O,!0),n.addEventListener("mousedown",f,!0),n.addEventListener("touchstart",f,!0),n.addEventListener("click",h,!0),n.addEventListener("keydown",A,!0),b}function u(){if(c.active)return n.removeEventListener("focusin",O,!0),n.removeEventListener("mousedown",f,!0),n.removeEventListener("touchstart",f,!0),n.removeEventListener("click",h,!0),n.removeEventListener("keydown",A,!0),b}function d(e){var t=s[e],o=t;if(!t)return null;if("string"==typeof t&&!(o=n.querySelector(t)))throw new Error("`"+e+"` refers to no known node");if("function"==typeof t&&!(o=t()))throw new Error("`"+e+"` did not return a node");return o}function z(){var e;if(!(e=null!==d("initialFocus")?d("initialFocus"):o.contains(n.activeElement)?n.activeElement:c.firstTabbableNode||d("fallbackFocus")))throw new Error("You can't have a focus-trap without at least one focusable element");return e}function f(e){o.contains(e.target)||(s.clickOutsideDeactivates?M({returnFocus:!r.isFocusable(e.target)}):e.preventDefault())}function O(e){o.contains(e.target)||e.target instanceof Document||(e.stopImmediatePropagation(),q(c.mostRecentlyFocusedNode||z()))}function A(e){if(!1!==s.escapeDeactivates&&function(e){return"Escape"===e.key||"Esc"===e.key||27===e.keyCode}(e))return e.preventDefault(),void M();(function(e){return"Tab"===e.key||9===e.keyCode})(e)&&function(e){if(m(),e.shiftKey&&e.target===c.firstTabbableNode)return e.preventDefault(),void q(c.lastTabbableNode);e.shiftKey||e.target!==c.lastTabbableNode||(e.preventDefault(),q(c.firstTabbableNode))}(e)}function h(e){s.clickOutsideDeactivates||o.contains(e.target)||(e.preventDefault(),e.stopImmediatePropagation())}function m(){var e=r(o);c.firstTabbableNode=e[0]||z(),c.lastTabbableNode=e[e.length-1]||z()}function q(e){e!==n.activeElement&&(e&&e.focus?(e.focus(),c.mostRecentlyFocusedNode=e,function(e){return e.tagName&&"input"===e.tagName.toLowerCase()&&"function"==typeof e.select}(e)&&e.select()):q(z()))}}},function(e,t){var n=["input","select","textarea","a[href]","button","[tabindex]","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable="false"])'],o=n.join(","),r="undefined"==typeof Element?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector;function a(e,t){t=t||{};var n,a,p,s=[],M=[],u=new l(e.ownerDocument||e),d=e.querySelectorAll(o);for(t.includeContainer&&r.call(e,o)&&(d=Array.prototype.slice.apply(d)).unshift(e),n=0;n<d.length;n++)i(a=d[n],u)&&(0===(p=c(a))?s.push(a):M.push({documentOrder:n,tabIndex:p,node:a}));return M.sort(b).map(function(e){return e.node}).concat(s)}function i(e,t){return!(!p(e,t)||function(e){return function(e){return M(e)&&"radio"===e.type}(e)&&!function(e){if(!e.name)return!0;var t=function(e){for(var t=0;t<e.length;t++)if(e[t].checked)return e[t]}(e.ownerDocument.querySelectorAll('input[type="radio"][name="'+e.name+'"]'));return!t||t===e}(e)}(e)||c(e)<0)}function p(e,t){return t=t||new l(e.ownerDocument||e),!(e.disabled||function(e){return M(e)&&"hidden"===e.type}(e)||t.isUntouchable(e))}a.isTabbable=function(e,t){if(!e)throw new Error("No node provided");return!1!==r.call(e,o)&&i(e,t)},a.isFocusable=function(e,t){if(!e)throw new Error("No node provided");return!1!==r.call(e,s)&&p(e,t)};var s=n.concat("iframe").join(",");function c(e){var t=parseInt(e.getAttribute("tabindex"),10);return isNaN(t)?function(e){return"true"===e.contentEditable}(e)?0:e.tabIndex:t}function b(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex}function M(e){return"INPUT"===e.tagName}function l(e){this.doc=e,this.cache=[]}l.prototype.hasDisplayNone=function(e,t){if(e.nodeType!==Node.ELEMENT_NODE)return!1;var n=function(e,t){for(var n=0,o=e.length;n<o;n++)if(t(e[n]))return e[n]}(this.cache,function(t){return t===e});if(n)return n[1];var o=!1;return"none"===(t=t||this.doc.defaultView.getComputedStyle(e)).display?o=!0:e.parentNode&&(o=this.hasDisplayNone(e.parentNode)),this.cache.push([e,o]),o},l.prototype.isUntouchable=function(e){if(e===this.doc.documentElement)return!1;var t=this.doc.defaultView.getComputedStyle(e);return!!this.hasDisplayNone(e,t)||"hidden"===t.visibility},e.exports=a},function(e,t){e.exports=function(){for(var e={},t=0;t<arguments.length;t++){var o=arguments[t];for(var r in o)n.call(o,r)&&(e[r]=o[r])}return e};var n=Object.prototype.hasOwnProperty},function(e,t,n){},function(e,t,n){},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MyPlan=void 0;var o=z(n(3)),r=z(n(4)),a=z(n(7)),i=z(n(5)),p=z(n(6)),s=z(n(2)),c=n(9),b=n(42),M=z(n(125)),l=n(20),u=z(n(987)),d=z(n(988));function z(e){return e&&e.__esModule?e:{default:e}}var f=t.MyPlan=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var c=arguments.length,b=Array(c),M=0;M<c;M++)b[M]=arguments[M];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(b))),a.renderContent=function(){var e=a.props.sitePlan.product_slug||"",t=a.props.availableFeatures,n=a.props.activeFeatures;return"dev"===a.props.getSiteConnectionStatus(a.props)&&(e="dev",t={},n={}),s.default.createElement("div",null,s.default.createElement("div",{className:"jp-landing__plans dops-card"},s.default.createElement(u.default,{plan:e,siteRawUrl:a.props.siteRawUrl})),s.default.createElement(d.default,{plan:e,availableFeatures:t,activeFeatures:n,siteRawUrl:a.props.siteRawUrl,siteAdminUrl:a.props.siteAdminUrl,rewindStatus:a.props.rewindStatus}))},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){return s.default.createElement("div",null,s.default.createElement(M.default,null),this.renderContent())}}]),t}(s.default.Component);t.default=(0,c.connect)(function(e){return{getSiteConnectionStatus:function(){return(0,l.getSiteConnectionStatus)(e)},sitePlan:(0,b.getSitePlan)(e),availableFeatures:(0,b.getAvailableFeatures)(e),activeFeatures:(0,b.getActiveFeatures)(e)}})(f)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=z(n(3)),r=z(n(4)),a=z(n(7)),i=z(n(5)),p=z(n(6)),s=z(n(2)),c=n(8),b=z(n(13)),M=n(38),l=n(9),u=n(67),d=n(21);function z(e){return e&&e.__esModule?e:{default:e}}var f=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),M=0;M<s;M++)c[M]=arguments[M];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.trackLearnMore=function(){b.default.tracks.recordJetpackClick({target:"learn-more",plan:"free",page:"plans"})},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){var e="";switch("dev"!==this.props.plan?(0,M.getPlanClass)(this.props.plan):"dev"){case"is-free-plan":e=s.default.createElement("div",{className:"jp-landing__plan-card"},s.default.createElement("div",{className:"jp-landing__plan-card-img"},s.default.createElement("img",{src:u.imagePath+"/plans/plan-free.svg",className:"jp-landing__plan-icon",alt:(0,c.translate)("Jetpack Free Plan")})),s.default.createElement("div",{className:"jp-landing__plan-card-current"},s.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,c.translate)("Welcome to Jetpack Free")),s.default.createElement("p",{className:"jp-landing__plan-features-text"},(0,c.translate)("Get started with hassle-free design, stats, and performance tools."))));break;case"is-personal-plan":e=s.default.createElement("div",{className:"jp-landing__plan-card"},s.default.createElement("div",{className:"jp-landing__plan-card-img"},s.default.createElement("img",{src:u.imagePath+"/plans/plan-personal.svg",className:"jp-landing__plan-icon",alt:(0,c.translate)("Jetpack Personal Plan")})),s.default.createElement("div",{className:"jp-landing__plan-card-current"},s.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,c.translate)("Welcome to Jetpack Personal")),this.props.showBackups?s.default.createElement("p",{className:"jp-landing__plan-features-text"},(0,c.translate)("Daily backups, spam filtering, and priority support.")):s.default.createElement("p",{className:"jp-landing__plan-features-text"},(0,c.translate)("Spam filtering and priority support."))));break;case"is-premium-plan":e=s.default.createElement("div",{className:"jp-landing__plan-card"},s.default.createElement("div",{className:"jp-landing__plan-card-img"},s.default.createElement("img",{src:u.imagePath+"/plans/plan-premium.svg",className:"jp-landing__plan-icon",alt:(0,c.translate)("Jetpack Premium Plan")})),s.default.createElement("div",{className:"jp-landing__plan-iconcard-current"},s.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,c.translate)("Welcome to Jetpack Premium")),s.default.createElement("p",{className:"jp-landing__plan-features-text"},(0,c.translate)("Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support."))));break;case"is-business-plan":e=s.default.createElement("div",{className:"jp-landing__plan-card"},s.default.createElement("div",{className:"jp-landing__plan-card-img"},s.default.createElement("img",{src:u.imagePath+"/plans/plan-business.svg",className:"jp-landing__plan-icon",alt:(0,c.translate)("Jetpack Business Plan")})),s.default.createElement("div",{className:"jp-landing__plan-card-current"},s.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,c.translate)("Welcome to Jetpack Professional")),s.default.createElement("p",{className:"jp-landing__plan-features-text"},(0,c.translate)("Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support."))));break;case"dev":e=s.default.createElement("div",{className:"jp-landing__plan-card"},s.default.createElement("div",{className:"jp-landing__plan-card-img"},s.default.createElement("img",{src:u.imagePath+"/plans/plan-free.svg",className:"jp-landing__plan-icon",alt:(0,c.translate)("Jetpack Free Plan")})),s.default.createElement("div",{className:"jp-landing__plan-card-current"},s.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,c.translate)("Your site is on Development Mode")),s.default.createElement("p",{className:"jp-landing__plan-features-text"},(0,c.translate)("Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support."))));break;default:e=s.default.createElement("div",{className:"jp-landing__plan-card"},s.default.createElement("div",{className:"jp-landing__plan-card-img is-placeholder"}),s.default.createElement("div",{className:"jp-landing__plan-card-current"},s.default.createElement("h3",{className:"jp-landing__plan-features-title is-placeholder"}," "),s.default.createElement("p",{className:"jp-landing__plan-features-text is-placeholder"}," ")))}return s.default.createElement("div",null,e)}}]),t}(s.default.Component);t.default=(0,l.connect)(function(e){return{showBackups:(0,d.showBackups)(e),plansMainTopUpgradeUrl:(0,d.getUpgradeUrl)(e,"plans-main-top")}})(f),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=_(n(3)),r=_(n(4)),a=_(n(7)),i=_(n(5)),p=_(n(6)),s=_(n(1)),c=_(n(2)),b=n(9),M=_(n(33)),l=n(8),u=_(n(13)),d=n(38),z=_(n(35)),f=_(n(22)),O=n(67),A=n(103),h=n(24),m=_(n(419)),q=n(21);function _(e){return e&&e.__esModule?e:{default:e}}var W=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.trackPlansClick=function(e){u.default.tracks.recordJetpackClick({page:"my-plan",target:e,plan:a.props.plan})},a.handleButtonClickForTracking=function(e){return function(){return a.trackPlansClick(e)}},a.activateAds=function(){a.props.activateModule("wordads"),a.trackPlansClick("activate_wordads")},a.activatePublicize=function(){a.props.activateModule("publicize"),a.trackPlansClick("activate_publicize")},a.activateSearch=function(){a.props.activateModule("search"),a.trackPlansClick("activate_search")},a.activateVideoPress=function(){a.props.activateModule("videopress"),a.trackPlansClick("activate_videopress")},a.activateSeo=function(){a.props.activateModule("seo-tools"),a.trackPlansClick("activate_seo")},a.activateGoogleAnalytics=function(){a.props.activateModule("google-analytics"),a.trackPlansClick("activate_ga")},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){var e=this,t="",n="dev"!==this.props.plan?(0,d.getPlanClass)(this.props.plan):"dev",o=(0,z.default)(this.props.activeFeatures,d.FEATURE_UNLIMITED_PREMIUM_THEMES),r="active"===(0,f.default)(this.props.rewindStatus,["state"],!1),a=!this.props.showBackups||!r&&"unavailable"!==(0,f.default)(this.props.rewindStatus,["state"],!1),i=function(){if(!a){var t="";switch(n){case"is-personal-plan":t=(0,l.translate)("Daily backup of all your site data with unlimited space and one-click restores");break;case"is-premium-plan":t=(0,l.translate)("Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support");break;case"is-business-plan":t=(0,l.translate)("Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support");break;default:t=""}return r?c.default.createElement("div",{className:"jp-landing__plan-features-card"},c.default.createElement("div",{className:"jp-landing__plan-features-img"},c.default.createElement("img",{src:O.imagePath+"/jetpack-security.svg",className:"jp-landing__plan-features-icon",alt:(0,l.translate)("A secure site, locked and protected by Jetpack")})),c.default.createElement("div",{className:"jp-landing__plan-features-text"},c.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,l.translate)("Site Backups")),c.default.createElement("p",null,(0,l.translate)("Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.")),c.default.createElement(M.default,{onClick:e.handleButtonClickForTracking("view_security_dash_rewind"),href:"https://wordpress.com/activity-log/"+e.props.siteRawUrl},(0,l.translate)("View your security activity")))):c.default.createElement("div",{className:"jp-landing__plan-features-card"},c.default.createElement("div",{className:"jp-landing__plan-features-img"},c.default.createElement("img",{src:O.imagePath+"/jetpack-security.svg",className:"jp-landing__plan-features-icon",alt:(0,l.translate)("A secure site, locked and protected by Jetpack")})),c.default.createElement("div",{className:"jp-landing__plan-features-text"},c.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,l.translate)("Site Security")),c.default.createElement("p",null,t+(0,l.translate)(" (powered by VaultPress).")),e.props.isPluginInstalled("vaultpress/vaultpress.php")&&e.props.isPluginActive("vaultpress/vaultpress.php")?c.default.createElement(M.default,{onClick:e.handleButtonClickForTracking("view_security_dash"),href:"https://dashboard.vaultpress.com/"},(0,l.translate)("View your security dashboard")):c.default.createElement(M.default,{onClick:e.handleButtonClickForTracking("configure_vault"),href:"https://wordpress.com/plugins/setup/"+e.props.siteRawUrl+"?only=vaultpress",className:"is-primary"},(0,l.translate)("View settings"))))}};switch(n){case"is-personal-plan":case"is-premium-plan":case"is-business-plan":t=c.default.createElement("div",{className:"jp-landing__plan-features"},"is-personal-plan"===n&&i(),"is-premium-plan"===n&&i(),"is-business-plan"===n&&i(),c.default.createElement("div",{className:"jp-landing__plan-features-card"},c.default.createElement("div",{className:"jp-landing__plan-features-img"},c.default.createElement("img",{src:O.imagePath+"/jetpack-speed-icon.svg",className:"jp-landing__plan-features-icon",alt:(0,l.translate)("A fast and performant website")})),c.default.createElement("div",{className:"jp-landing__plan-features-text"},c.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,l.translate)("Built-in Performance")),c.default.createElement("p",null,(0,l.translate)("Load pages faster by serving your images from our global network of servers.")),c.default.createElement(M.default,{onClick:this.handleButtonClickForTracking("paid_performance"),href:"https://wordpress.com/settings/performance/"+this.props.siteRawUrl},(0,l.translate)("Make your site faster")))),c.default.createElement("div",{className:"jp-landing__plan-features-card"},c.default.createElement("div",{className:"jp-landing__plan-features-img"},c.default.createElement("img",{src:O.imagePath+"/jetpack-spam.svg",className:"jp-landing__plan-features-icon",alt:(0,l.translate)("A folder holding real comments")})),c.default.createElement("div",{className:"jp-landing__plan-features-text"},c.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,l.translate)("Spam Filtering")),c.default.createElement("p",null,(0,l.translate)("Spam is automatically blocked from your comments.")),this.props.isPluginInstalled("akismet/akismet.php")&&this.props.isPluginActive("akismet/akismet.php")?c.default.createElement(M.default,{onClick:this.handleButtonClickForTracking("view_spam_stats"),href:this.props.siteAdminUrl+"admin.php?page=akismet-key-config"},(0,l.translate)("View your spam stats")):c.default.createElement(M.default,{onClick:this.handleButtonClickForTracking("configure_akismet"),href:"https://wordpress.com/plugins/setup/"+this.props.siteRawUrl+"?only=akismet",className:"is-primary"},(0,l.translate)("View settings")))),("is-business-plan"===n||"is-premium-plan"===n)&&"inactive"!==this.props.getModuleOverride("videopress")&&c.default.createElement("div",{className:"jp-landing__plan-features-card"},c.default.createElement("div",{className:"jp-landing__plan-features-img"},c.default.createElement("img",{src:O.imagePath+"/jetpack-video-hosting.svg",className:"jp-landing__plan-features-icon",alt:(0,l.translate)("A cloud with multiple types of content floating around it")})),c.default.createElement("div",{className:"jp-landing__plan-features-text"},c.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,l.translate)("Video Hosting")),c.default.createElement("p",null,(0,l.translate)("High-speed, high-definition video hosting with no third-party ads.")),this.props.isModuleActivated("videopress")?c.default.createElement(M.default,{onClick:this.handleButtonClickForTracking("upload_videos"),href:this.props.siteAdminUrl+"upload.php"},(0,l.translate)("Upload videos")):c.default.createElement(M.default,{onClick:this.activateVideoPress,className:"is-primary",disabled:this.props.isActivatingModule("videopress")},(0,l.translate)("Activate video hosting")))),c.default.createElement("div",{className:"jp-landing__plan-features-card"},c.default.createElement("div",{className:"jp-landing__plan-features-img"},c.default.createElement("img",{src:O.imagePath+"/jetpack-site-activity.svg",className:"jp-landing__plan-features-icon",alt:(0,l.translate)("Interface showing a chronological list of changes and updates in a site")})),c.default.createElement("div",{className:"jp-landing__plan-features-text"},c.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,l.translate)("Activity")),c.default.createElement("p",null,(0,l.translate)("View a chronological list of all the changes and updates to your site in an organized, readable way.")),c.default.createElement(M.default,{onClick:this.handleButtonClickForTracking("view_site_activity"),href:"https://wordpress.com/activity-log/"+this.props.siteRawUrl},(0,l.translate)("View your site activity")))),("is-business-plan"===n||"is-premium-plan"===n)&&"inactive"!==this.props.getModuleOverride("wordads")&&c.default.createElement("div",{className:"jp-landing__plan-features-card"},c.default.createElement("div",{className:"jp-landing__plan-features-img"},c.default.createElement("img",{src:O.imagePath+"/jetpack-wordads.svg",className:"jp-landing__plan-features-icon",alt:(0,l.translate)("A chart showing an healthy increase in earnings")})),c.default.createElement("div",{className:"jp-landing__plan-features-text"},c.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,l.translate)("Monetize your site with ads")),c.default.createElement("p",null,(0,l.translate)("WordAds lets you earn money by displaying promotional content. Start earning today.")),this.props.isModuleActivated("wordads")?c.default.createElement(M.default,{onClick:this.handleButtonClickForTracking("view_earnings"),href:"https://wordpress.com/ads/earnings/"+this.props.siteRawUrl},(0,l.translate)("View your earnings")):c.default.createElement(M.default,{onClick:this.activateAds,className:"is-primary",disabled:this.props.isActivatingModule("wordads")},(0,l.translate)("Start earning")))),"is-business-plan"===n&&!this.props.getModuleOverride("search")&&"inactive"!==this.props.getModuleOverride("search")&&c.default.createElement("div",{className:"jp-landing__plan-features-card"},c.default.createElement("div",{className:"jp-landing__plan-features-img"},c.default.createElement("img",{src:O.imagePath+"/jetpack-search-icon.svg",className:"jp-landing__plan-features-icon",alt:(0,l.translate)("A hand holding a loupe")})),c.default.createElement("div",{className:"jp-landing__plan-features-text"},c.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,l.translate)("Jetpack Search")),c.default.createElement("p",null,(0,l.translate)("Replace the default WordPress search with better results and filtering powered by Elasticsearch.")),this.props.isModuleActivated("search")?c.default.createElement(M.default,{onClick:this.handleButtonClickForTracking("search_customize"),href:this.props.siteAdminUrl+"widgets.php"},(0,l.translate)("Customize Search Widget")):c.default.createElement(M.default,{onClick:this.activateSearch,className:"is-primary",disabled:this.props.isActivatingModule("search")},(0,l.translate)("Activate Jetpack Search")))),("is-business-plan"===n||"is-premium-plan"===n)&&"inactive"!==this.props.getModuleOverride("seo-tools")&&c.default.createElement("div",{className:"jp-landing__plan-features-card"},c.default.createElement("div",{className:"jp-landing__plan-features-img"},c.default.createElement("img",{src:O.imagePath+"/jetpack-performance-icon.svg",className:"jp-landing__plan-features-icon",alt:(0,l.translate)("Site stats showing an evolution in traffic and engagement")})),c.default.createElement("div",{className:"jp-landing__plan-features-text"},c.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,l.translate)("SEO Tools")),c.default.createElement("p",null,(0,l.translate)("Advanced SEO tools to help your site get found when people search for relevant content.")),this.props.isModuleActivated("seo-tools")?c.default.createElement(M.default,{onClick:this.handleButtonClickForTracking("configure_seo"),href:"https://wordpress.com/settings/traffic/"+this.props.siteRawUrl},(0,l.translate)("Configure site SEO")):c.default.createElement(M.default,{onClick:this.activateSeo,className:"is-primary",disabled:this.props.isActivatingModule("seo-tools")},(0,l.translate)("Activate SEO tools")))),("is-business-plan"===n||"is-premium-plan"===n)&&"inactive"!==this.props.getModuleOverride("google-analytics")&&c.default.createElement("div",{className:"jp-landing__plan-features-card"},c.default.createElement("div",{className:"jp-landing__plan-features-img"},c.default.createElement("img",{src:O.imagePath+"/jetpack-google-analytics.svg",className:"jp-landing__plan-features-icon",alt:(0,l.translate)("Site stats showing an evolution in traffic and engagement")})),c.default.createElement("div",{className:"jp-landing__plan-features-text"},c.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,l.translate)("Google Analytics")),c.default.createElement("p",null,(0,l.translate)("Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.")),this.props.isModuleActivated("google-analytics")?c.default.createElement(M.default,{onClick:this.handleButtonClickForTracking("configure_ga"),href:"https://wordpress.com/settings/traffic/"+this.props.siteRawUrl},(0,l.translate)("Configure Google Analytics")):c.default.createElement(M.default,{onClick:this.activateGoogleAnalytics,className:"is-primary",disabled:this.props.isActivatingModule("google-analytics")},(0,l.translate)("Activate Google Analytics")))),o&&c.default.createElement("div",{className:"jp-landing__plan-features-card"},c.default.createElement("div",{className:"jp-landing__plan-features-img"},c.default.createElement("img",{src:O.imagePath+"/jetpack-themes.svg",className:"jp-landing__plan-features-icon",alt:(0,l.translate)("A secure site, locked and protected by Jetpack")})),c.default.createElement("div",{className:"jp-landing__plan-features-text"},c.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,l.translate)("Try a premium theme")),c.default.createElement("p",null,(0,l.translate)("Access hundreds of beautifully designed premium themes at no extra cost.")),c.default.createElement(M.default,{onClick:this.handleButtonClickForTracking("premium_themes"),href:"https://wordpress.com/themes/premium/"+this.props.siteRawUrl},(0,l.translate)("Browse premium themes")))),("is-business-plan"===n||"is-premium-plan"===n)&&"inactive"!==this.props.getModuleOverride("publicize")&&c.default.createElement("div",{className:"jp-landing__plan-features-card"},c.default.createElement("div",{className:"jp-landing__plan-features-img"},c.default.createElement("img",{src:O.imagePath+"/jetpack-marketing.svg",className:"jp-landing__plan-features-icon",alt:(0,l.translate)("A secure site, locked and protected by Jetpack")})),c.default.createElement("div",{className:"jp-landing__plan-features-text"},c.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,l.translate)("Marketing Automation")),c.default.createElement("p",null,(0,l.translate)("Schedule unlimited tweets, Facebook posts, and other social posts in advance.")),this.props.isModuleActivated("publicize")?c.default.createElement(M.default,{onClick:this.handleButtonClickForTracking("schedule_posts"),href:"https://wordpress.com/posts/"+this.props.siteRawUrl},(0,l.translate)("Schedule posts")):c.default.createElement(M.default,{onClick:this.activatePublicize,className:"is-primary",disabled:this.props.isActivatingModule("publicize")},(0,l.translate)("Activate Publicize")))));break;case"is-free-plan":case"dev":t=c.default.createElement("div",{className:"jp-landing__plan-features"},c.default.createElement("div",{className:"jp-landing__plan-features-card"},c.default.createElement("div",{className:"jp-landing__plan-features-img"},c.default.createElement("img",{src:O.imagePath+"/jetpack-security.svg",className:"jp-landing__plan-features-icon",alt:(0,l.translate)("A secure site, locked and protected by Jetpack")})),c.default.createElement("div",{className:"jp-landing__plan-features-text"},c.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,l.translate)("Always-on Security")),c.default.createElement("p",null,(0,l.translate)("Prevent login attacks, and get instant notifications when there’s an issue with your site.")),c.default.createElement(M.default,{onClick:this.handleButtonClickForTracking("free_security"),href:"https://wordpress.com/settings/security/"+this.props.siteRawUrl},(0,l.translate)("Set up your site security")))),c.default.createElement("div",{className:"jp-landing__plan-features-card"},c.default.createElement("div",{className:"jp-landing__plan-features-img"},c.default.createElement("img",{src:O.imagePath+"/jetpack-speed-icon.svg",className:"jp-landing__plan-features-icon",alt:(0,l.translate)("A fast and performant website")})),c.default.createElement("div",{className:"jp-landing__plan-features-text"},c.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,l.translate)("Built-in Performance")),c.default.createElement("p",null,(0,l.translate)("Load pages faster by serving your images from our global network of servers.")),c.default.createElement(M.default,{onClick:this.handleButtonClickForTracking("free_performance"),href:"https://wordpress.com/settings/performance/"+this.props.siteRawUrl},(0,l.translate)("Make your site faster")))),c.default.createElement("div",{className:"jp-landing__plan-features-card"},c.default.createElement("div",{className:"jp-landing__plan-features-img"},c.default.createElement("img",{src:O.imagePath+"/jetpack-themes.svg",className:"jp-landing__plan-features-icon",alt:(0,l.translate)("A wide variety of themes and tools to customize a site")})),c.default.createElement("div",{className:"jp-landing__plan-features-text"},c.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,l.translate)("Design the perfect website")),c.default.createElement("p",null,(0,l.translate)("Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.")),c.default.createElement(M.default,{onClick:this.handleButtonClickForTracking("free_themes"),href:"https://wordpress.com/themes/"+this.props.siteRawUrl},(0,l.translate)("Explore free themes")))),c.default.createElement("div",{className:"jp-landing__plan-features-card"},c.default.createElement("div",{className:"jp-landing__plan-features-img"},c.default.createElement("img",{src:O.imagePath+"/jetpack-performance-icon.svg",className:"jp-landing__plan-features-icon",alt:(0,l.translate)("Site stats showing an evolution in traffic and engagement")})),c.default.createElement("div",{className:"jp-landing__plan-features-text"},c.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,l.translate)("Increase traffic to your site")),c.default.createElement("p",null,(0,l.translate)("Reach a wider audience by automatically sharing your posts on social media.")),c.default.createElement(M.default,{onClick:this.handleButtonClickForTracking("free_sharing"),href:"https://wordpress.com/sharing/"+this.props.siteRawUrl},(0,l.translate)("Start publicizing now")))),c.default.createElement("div",{className:"jp-landing__plan-features-card"},c.default.createElement("div",{className:"jp-landing__plan-features-img"},c.default.createElement("img",{src:O.imagePath+"/jetpack-site-activity.svg",className:"jp-landing__plan-features-icon",alt:(0,l.translate)("Interface showing a chronological list of changes and updates in a site")})),c.default.createElement("div",{className:"jp-landing__plan-features-text"},c.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,l.translate)("Site Activity")),c.default.createElement("p",null,(0,l.translate)("View a chronological list of all the changes and updates to your site in an organized, readable way.")),c.default.createElement(M.default,{onClick:this.handleButtonClickForTracking("view_site_activity"),href:"https://wordpress.com/activity-log/"+this.props.siteRawUrl},(0,l.translate)("View your site activity")))),c.default.createElement("div",{className:"jp-landing__plan-features-card"},c.default.createElement("div",{className:"jp-landing__plan-features-img"},c.default.createElement("img",{src:O.imagePath+"/jetpack-support.svg",className:"jp-landing__plan-features-icon",alt:(0,l.translate)("Chat bubbles representing getting in touch with support")})),c.default.createElement("div",{className:"jp-landing__plan-features-text"},c.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,l.translate)("Support documentation")),c.default.createElement("p",null,(0,l.translate)("Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.")),c.default.createElement(M.default,{onClick:this.handleButtonClickForTracking("free_support_documentation"),href:"https://jetpack.com/support/"},(0,l.translate)("Support documentation")))),c.default.createElement("div",{className:"jp-landing__plan-features-card"},c.default.createElement("div",{className:"jp-landing__plan-features-text"},c.default.createElement("h3",{className:"jp-landing__plan-features-title"},(0,l.translate)("Jetpack offers so much more")),c.default.createElement("p",null,(0,l.translate)("Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.")),c.default.createElement(M.default,{onClick:this.handleButtonClickForTracking("free_explore_jetpack_plans"),href:"#/plans",className:"is-primary"},(0,l.translate)("Explore Jetpack plans")))));break;default:t=c.default.createElement("div",{className:"jp-landing__plan-features is-loading"},c.default.createElement("div",{className:"jp-landing__plan-features-card"},c.default.createElement("h3",{className:"jp-landing__plan-features-title is-placeholder"}," "),c.default.createElement("p",{className:"jp-landing__plan-features-text is-placeholder"}," ")),c.default.createElement("div",{className:"jp-landing__plan-features-card"},c.default.createElement("h3",{className:"jp-landing__plan-features-title is-placeholder"}," "),c.default.createElement("p",{className:"jp-landing__plan-features-text is-placeholder"}," ")),c.default.createElement("div",{className:"jp-landing__plan-features-card"},c.default.createElement("h3",{className:"jp-landing__plan-features-title is-placeholder"}," "),c.default.createElement("p",{className:"jp-landing__plan-features-text is-placeholder"}," ")))}return c.default.createElement("div",null,c.default.createElement(m.default,null),t)}}]),t}(c.default.Component);W.propTypes={plan:s.default.string},W.defaultProps={plan:""},t.default=(0,b.connect)(function(e){return{isFetchingPluginsData:(0,A.isFetchingPluginsData)(e),isPluginActive:function(t){return(0,A.isPluginActive)(e,t)},isPluginInstalled:function(t){return(0,A.isPluginInstalled)(e,t)},isModuleActivated:function(t){return(0,h.isModuleActivated)(e,t)},isActivatingModule:function(t){return(0,h.isActivatingModule)(e,t)},getModuleOverride:function(t){return(0,h.getModuleOverride)(e,t)},showBackups:(0,q.showBackups)(e)}},function(e){return{fetchPluginsData:function(){return e((0,A.fetchPluginsData)())},activateModule:function(t){return e((0,h.activateModule)(t))}}})(W),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Plans=void 0;var o=O(n(3)),r=O(n(4)),a=O(n(7)),i=O(n(5)),p=O(n(6)),s=O(n(2)),c=n(9),b=n(38),M=O(n(35)),l=n(42),u=O(n(125)),d=n(20),z=O(n(990)),f=O(n(991));function O(e){return e&&e.__esModule?e:{default:e}}var A=t.Plans=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var c=arguments.length,l=Array(c),u=0;u<c;u++)l[u]=arguments[u];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(l))),a.themesPromo=function(){var e=a.props.sitePlan.product_slug||"",t="dev"!==a.props.plan?(0,b.getPlanClass)(e):"dev";switch(t){case"is-personal-plan":case"is-premium-plan":case"is-free-plan":return s.default.createElement(z.default,{plan:t,siteRawUrl:a.props.siteRawUrl})}return null},a.renderContent=function(){var e="",t=void 0!==a.props.availableFeatures[b.FEATURE_UNLIMITED_PREMIUM_THEMES],n=(0,M.default)(a.props.activeFeatures,b.FEATURE_UNLIMITED_PREMIUM_THEMES);return t&&!n&&(e=a.themesPromo()),s.default.createElement("div",null,e,s.default.createElement(f.default,null))},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){return s.default.createElement("div",null,s.default.createElement(u.default,null),this.renderContent())}}]),t}(s.default.Component);t.default=(0,c.connect)(function(e){return{getSiteConnectionStatus:function(){return(0,d.getSiteConnectionStatus)(e)},sitePlan:(0,l.getSitePlan)(e),availableFeatures:(0,l.getAvailableFeatures)(e),activeFeatures:(0,l.getActiveFeatures)(e)}})(A)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=A(n(3)),r=A(n(4)),a=A(n(7)),i=A(n(5)),p=A(n(6)),s=A(n(1)),c=A(n(2)),b=A(n(12)),M=n(8),l=A(n(17)),u=A(n(33)),d=A(n(13)),z=n(9),f=n(67),O=n(21);function A(e){return e&&e.__esModule?e:{default:e}}var h=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.trackGetStarted=function(){d.default.tracks.recordJetpackClick({target:"themes-card",button:"themes-get-started",plan:a.props.plan,type:"upgrade"})},a.trackComparePlans=function(){d.default.tracks.recordJetpackClick({target:"themes-card",button:"themes-compare-all",plan:a.props.plan,type:"upgrade"})},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){var e=(0,b.default)(this.props.className,"jp-themes-card");return c.default.createElement("div",{className:e},c.default.createElement(l.default,{className:"jp-apps-card__content"},c.default.createElement("div",{className:"jp-apps-card__top"},c.default.createElement("img",{src:f.imagePath+"themes.svg",alt:(0,M.translate)(" Premium Themes")})),c.default.createElement("div",{className:"jp-apps-card__description"},c.default.createElement("h3",{className:"jp-apps-card__header"},(0,M.translate)("Introducing Premium Themes")),this.props.showBackups?(0,M.translate)("{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}",{components:{p:c.default.createElement("p",{className:"jp-apps-card__paragraph"})}}):(0,M.translate)("{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}",{components:{p:c.default.createElement("p",{className:"jp-apps-card__paragraph"})}}),c.default.createElement("p",null,c.default.createElement(u.default,{className:"is-primary",onClick:this.trackGetStarted,href:this.props.proUpgradeUrl},(0,M.translate)("Explore Professional"))," ",c.default.createElement(u.default,{onClick:this.trackComparePlans,href:this.props.plansCompareFreeUpgradeUrl},(0,M.translate)("Compare All Plans"))))))}}]),t}(c.default.Component);h.displayName="ThemesPromoCard",h.propTypes={className:s.default.string,plan:s.default.string},t.default=(0,z.connect)(function(e,t){var n=t.plan,o=/(?![is-])(.*)(?=-plan)/g,r=Array.isArray(n.match(o))?n.match(o)[0]:"";return{showBackups:(0,O.showBackups)(e),proUpgradeUrl:(0,O.getUpgradeUrl)(e,"upgrade-pro-"+r),plansCompareFreeUpgradeUrl:(0,O.getUpgradeUrl)(e,"plans-compare-free")}})(h),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=W(n(84)),r=W(n(992)),a=W(n(3)),i=W(n(4)),p=W(n(7)),s=W(n(5)),c=W(n(6)),b=W(n(2)),M=n(9),l=W(n(12)),u=W(n(663)),d=W(n(996)),z=W(n(35)),f=W(n(33)),O=n(21),A=n(181),h=n(38),m=n(8),q=W(n(999)),_=W(n(1e3));function W(e){return e&&e.__esModule?e:{default:e}}var g=function(e){function t(){var e,n,o,r;(0,i.default)(this,t);for(var p=arguments.length,c=Array(p),b=0;b<p;b++)c[b]=arguments[b];return n=o=(0,s.default)(this,(e=t.__proto__||(0,a.default)(t)).call.apply(e,[this].concat(c))),o.featuredPlans=!1,r=n,(0,s.default)(o,r)}return(0,c.default)(t,e),(0,p.default)(t,[{key:"UNSAFE_componentWillUpdate",value:function(){this.featuredPlans=!1}},{key:"render",value:function(){if(void 0===this.props.plans)return null;var e=(0,r.default)(this.getPlans()).length,t=(0,l.default)("plan-features__table","has-"+e+"-cols");return b.default.createElement("div",{className:"plan-features"},this.renderMobileCard(),b.default.createElement("div",{className:"plan-features__content"},b.default.createElement("table",{className:t},b.default.createElement("tbody",null,b.default.createElement("tr",null,this.renderPlanHeaders()),b.default.createElement("tr",null,this.renderPrices()),b.default.createElement("tr",null,this.renderTopButtons()),this.renderPlanFeatureRows(),b.default.createElement("tr",null,this.renderBottomButtons())))))}},{key:"renderMobileCard",value:function(){var e=(0,m.translate)("You’re currently on Jetpack %(plan)s.",{args:{plan:this.props.sitePlan.product_name_short}}),t="https://wordpress.com/plans/my-plan/"+this.props.siteRawUrl,n="https://wordpress.com/plans/"+this.props.siteRawUrl;return b.default.createElement("div",{className:"plans-mobile-notice dops-card"},b.default.createElement("h2",null,(0,m.translate)("Your Plan")),b.default.createElement("p",null,e),b.default.createElement(f.default,{href:t},(0,m.translate)("Manage your plan")),b.default.createElement(f.default,{href:n,primary:!0},(0,m.translate)("View all Jetpack plans")))}},{key:"getCurrentPlanType",value:function(){return(0,h.getPlanClass)(this.props.sitePlan.product_slug).replace(/^is-/,"").replace(/-plan$/,"")}},{key:"isUpgraded",value:function(){return!(0,z.default)(["","free"],this.getCurrentPlanType())}},{key:"isCurrentPlanType",value:function(e){return this.getCurrentPlanType()===e}},{key:"getPlans",value:function(){if(this.featuredPlans)return this.featuredPlans;var e=(0,d.default)(this.props.plans,function(e,t,n){if("free"===n)return e;var o=t.highlight;return t.features=(0,d.default)(t.features,function(e,t){return(0,z.default)(o,t.id)&&e.push(t),e},[]),e[n]=t,e},{});return this.featuredPlans=e,e}},{key:"renderPlanHeaders",value:function(){return(0,u.default)(this.getPlans(),function(e,t){var n=(0,l.default)("plan-features__table-item","is-header","has-border-top","is-"+t+"-plan");return b.default.createElement("td",{key:"plan-header-"+t,className:n},b.default.createElement("header",{className:"plan-features__header"},b.default.createElement("h3",{className:"plan-features__header-title"},e.short_name),b.default.createElement("div",{className:"plan-features__description"},e.tagline)))})}},{key:"renderPrices",value:function(){var e=this;return(0,u.default)(this.getPlans(),function(t,n){var o=(0,l.default)("plan-features__table-item","plan-price");return e.isCurrentPlanType(n)?b.default.createElement("td",{key:"price-"+n,className:o},t.strings.current):e.shouldRenderButton(n)?b.default.createElement("td",{key:"price-"+n,className:o},b.default.createElement("span",{className:"plan-price__yearly",dangerouslySetInnerHTML:{__html:t.price.yearly.per}})):b.default.createElement("td",{key:"price-"+n,className:o})})}},{key:"shouldRenderButton",value:function(e){var t=(0,o.default)(this.props.plans),n=t.indexOf(this.getCurrentPlanType());return t.indexOf(e)>=n}},{key:"renderTopButtons",value:function(){var e=this;return(0,u.default)(this.getPlans(),function(t,n){var o=e.props,r=o.siteRawUrl,a=o.plansUpgradeUrl,i=o.sitePlan,p=e.isCurrentPlanType(n),s=p?t.strings.manage:t.strings.upgrade;return b.default.createElement(q.default,{key:n,buttonText:s,planType:n,isActivePlan:p,isPrimary:e.isPrimary(n,t),shouldRenderButton:e.shouldRenderButton(n),siteRawUrl:r,plansUpgradeUrl:a(n),productSlug:i.product_slug})})}},{key:"isPrimary",value:function(e,t){if(this.isUpgraded()){var n=this.getCurrentPlanType(),r=(0,o.default)(this.getPlans()),a=r.indexOf(n);return r.indexOf(e)===r.indexOf(r[a+1])}return t.is_featured}},{key:"renderBottomButtons",value:function(){var e=this;return(0,u.default)(this.getPlans(),function(t,n){return b.default.createElement("td",{key:"bottom-"+n,className:"plan-features__table-item is-bottom-buttons has-border-bottom"},b.default.createElement(f.default,{href:e.props.plansLearnMoreUpgradeUrl},t.strings.see_all))})}},{key:"getLongestFeaturesList",value:function(){return(0,d.default)(this.getPlans(),function(e,t){var n=(0,o.default)(t.features);return n.length>e.length?n:e},[])}},{key:"renderPlanFeatureRows",value:function(){var e=this;return(0,u.default)(this.getLongestFeaturesList(),function(t,n){return b.default.createElement("tr",{key:"row-"+n,className:"plan-features-row"},e.renderPlanFeatureColumns(n))})}},{key:"renderPlanFeatureColumns",value:function(e){var t=this;return(0,u.default)(this.getPlans(),function(n,o){var r=o+"-row-"+e,a=n.features[e],i=!t.props.showBackups&&a&&(0,z.default)(["backups","malware-scan","real-time-backups"],a.id);return b.default.createElement(_.default,{key:o,itemKey:r,feature:a,hideBackupFeature:i,siteRawUrl:t.props.siteRawUrl,userId:t.props.userId,productSlug:t.props.sitePlan.product_slug})})}}]),t}(b.default.Component);t.default=(0,M.connect)(function(e){var t=(0,O.getUserId)(e);return{plans:(0,A.getAvailablePlans)(e),siteRawUrl:(0,O.getSiteRawUrl)(e),sitePlan:(0,A.getSitePlan)(e),userId:t,showBackups:(0,O.showBackups)(e),plansUpgradeUrl:function(n){return(0,O.getUpgradeUrl)(e,"plans-"+n,t)},plansLearnMoreUpgradeUrl:(0,O.getUpgradeUrl)(e,"plans-learn-more",t)}},null)(g),e.exports=t.default},function(e,t,n){e.exports={default:n(993),__esModule:!0}},function(e,t,n){n(994),e.exports=n(18).Object.values},function(e,t,n){var o=n(30),r=n(995)(!1);o(o.S,"Object",{values:function(e){return r(e)}})},function(e,t,n){var o=n(82),r=n(70),a=n(102).f;e.exports=function(e){return function(t){for(var n,i=r(t),p=o(i),s=p.length,c=0,b=[];s>c;)a.call(i,n=p[c++])&&b.push(e?[n,i[n]]:i[n]);return b}}},function(e,t,n){var o=n(997),r=n(124),a=n(77),i=n(998),p=n(26);e.exports=function(e,t,n){var s=p(e)?o:i,c=arguments.length<3;return s(e,a(t,4),n,c,r)}},function(e,t){e.exports=function(e,t,n,o){var r=-1,a=null==e?0:e.length;for(o&&a&&(n=e[++r]);++r<a;)n=t(n,e[r],r,e);return n}},function(e,t){e.exports=function(e,t,n,o,r){return r(e,function(e,r,a){n=o?(o=!1,e):t(n,e,r,a)}),n}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=l(n(3)),r=l(n(4)),a=l(n(7)),i=l(n(5)),p=l(n(6)),s=l(n(2)),c=l(n(12)),b=l(n(33)),M=l(n(13));function l(e){return e&&e.__esModule?e:{default:e}}var u=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"clickHandler",value:function(){var e=this.props,t=e.planType,n=e.isActivePlan,o=e.productSlug;n&&M.default.tracks.recordJetpackClick({target:"upgrade-"+t,type:"upgrade",plan:o,page:"Plans"})}},{key:"render",value:function(){var e=this.props,t=e.buttonText,n=e.planType,o=e.isActivePlan,r=e.isPrimary,a=e.shouldRenderButton,i=e.siteRawUrl,p=e.plansUpgradeUrl,M=o?"https://wordpress.com/plans/my-plan/"+i:p,l=(0,c.default)("plan-features__table-item","has-border-bottom","is-top-buttons");return a?s.default.createElement("td",{key:"button-"+n,className:l},s.default.createElement(b.default,{href:M,primary:r,onClick:this.clickHandler},t)):s.default.createElement("td",{key:"button-"+n,className:l})}}]),t}(s.default.Component);t.default=u,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=M(n(3)),r=M(n(4)),a=M(n(7)),i=M(n(5)),p=M(n(6)),s=n(2),c=M(s),b=M(n(13));function M(e){return e&&e.__esModule?e:{default:e}}var l=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),M=0;M<s;M++)c[M]=arguments[M];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.featureLinkClickHandler=function(){var e=a.props,t=e.feature,n=e.productSlug;b.default.tracks.recordJetpackClick({target:t.id,type:"feature-discovery",plan:n,page:"Plans"})},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"renderFeatureLink",value:function(e){var t=this.props,n=t.siteRawUrl,o=t.userId;return c.default.createElement("a",{onClick:this.featureLinkClickHandler,href:"https://jetpack.com/features/"+e.info+"?site="+n+"&u="+o},e.name)}},{key:"render",value:function(){var e=this.props,t=e.itemKey,n=e.feature,o=e.hideBackupFeature;return void 0===n||o?c.default.createElement("td",{key:t,className:"plan-features__table-item"}):c.default.createElement("td",{key:t,className:"plan-features__table-item has-partial-border"},c.default.createElement("div",{className:"plan-features__item"},n.info?this.renderFeatureLink(n):n.name))}}]),t}(s.Component);t.default=l,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=_(n(3)),r=_(n(4)),a=_(n(7)),i=_(n(5)),p=_(n(6)),s=_(n(1)),c=_(n(2)),b=n(9),M=_(n(12)),l=n(8),u=_(n(17)),d=_(n(33)),z=_(n(13)),f=n(38),O=n(21),A=n(42),h=n(20),m=_(n(392)),q=n(67);function _(e){return e&&e.__esModule?e:{default:e}}var W=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.trackBannerClick=function(){z.default.tracks.recordJetpackClick({target:"banner-click",feature:"support",page:a.props.path})},a.trackAskQuestionClick=function(){z.default.tracks.recordJetpackClick({target:"support-card",button:"support-ask",page:a.props.path})},a.trackSearchClick=function(){z.default.tracks.recordJetpackClick({target:"support-card",button:"support-search",page:a.props.path})},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"shouldComponentUpdate",value:function(e){return e.sitePlan.product_slug!==this.props.sitePlan.product_slug}},{key:"render",value:function(){if(void 0===this.props.sitePlan.product_slug&&this.props.isFetchingSiteData)return c.default.createElement("div",null);var e=(0,M.default)(this.props.className,"jp-support-card"),t=void 0===this.props.sitePlan.product_slug||"jetpack_free"===this.props.sitePlan.product_slug;return c.default.createElement("div",{className:e},c.default.createElement(u.default,{className:"jp-support-card__happiness"},c.default.createElement("div",{className:"jp-support-card__happiness-contact"},c.default.createElement("h3",{className:"jp-support-card__header"},(0,l.translate)("We're here to help")),c.default.createElement("p",{className:"jp-support-card__description"},t?(0,l.translate)("Jetpack comes with free, basic support for all users."):(0,l.translate)("Your paid plan gives you access to prioritized Jetpack support.")),c.default.createElement("p",{className:"jp-support-card__description"},c.default.createElement(d.default,{onClick:this.trackAskQuestionClick,href:this.props.isAtomicSite?"https://wordpress.com/help/contact/":q.JETPACK_CONTACT_SUPPORT},(0,l.translate)("Ask a question")),c.default.createElement(d.default,{onClick:this.trackSearchClick,href:this.props.isAtomicSite?"https://wordpress.com/help/":"https://jetpack.com/support/"},(0,l.translate)("Search our support site"))))),this.props.siteConnectionStatus&&t&&c.default.createElement(m.default,{title:(0,l.translate)("Get a faster resolution to your support questions."),plan:f.PLAN_JETPACK_PERSONAL,callToAction:(0,l.translate)("Upgrade"),onClick:this.trackBannerClick,href:this.props.supportUpgradeUrl}))}}]),t}(c.default.Component);W.displayName="SupportCard",W.defaultProps={className:"",siteConnectionStatus:!1},W.propTypes={siteConnectionStatus:s.default.any.isRequired,className:s.default.string},t.default=(0,b.connect)(function(e){return{sitePlan:(0,A.getSitePlan)(e),siteConnectionStatus:(0,h.getSiteConnectionStatus)(e),isFetchingSiteData:(0,A.isFetchingSiteData)(e),isAtomicSite:(0,O.isAtomicSite)(e),supportUpgradeUrl:(0,O.getUpgradeUrl)(e,"support")}})(W),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=h(n(3)),r=h(n(4)),a=h(n(7)),i=h(n(5)),p=h(n(6)),s=h(n(1)),c=h(n(2)),b=n(9),M=h(n(12)),l=n(8),u=h(n(17)),d=h(n(33)),z=h(n(13)),f=n(67),O=n(86),A=n(21);function h(e){return e&&e.__esModule?e:{default:e}}var m=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.trackDownloadClick=function(){z.default.tracks.recordJetpackClick({target:"apps-card",button:"apps-download",page:a.props.path})},a.dismissCard=function(){a.props.dismissAppCard(),z.default.tracks.recordJetpackClick({target:"apps-card",button:"dismiss",page:a.props.path})},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){if(!this.props.arePromotionsActive||this.props.isAppsCardDismissed)return null;var e=(0,M.default)(this.props.className,"jp-apps-card");return c.default.createElement("div",{className:e},c.default.createElement(u.default,{className:"jp-apps-card__content"},c.default.createElement("div",{className:"jp-apps-card__top"},c.default.createElement("img",{src:f.imagePath+"get-apps.svg",alt:""})),c.default.createElement("div",{className:"jp-apps-card__description"},c.default.createElement("h3",{className:"jp-apps-card__header"},(0,l.translate)("Get WordPress Apps for every device")),c.default.createElement("p",{className:"jp-apps-card__paragraph"},(0,l.translate)("Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.")),c.default.createElement(d.default,{className:"is-primary",onClick:this.trackDownloadClick,href:"https://apps.wordpress.com/get?utm_source=jpdash&utm_medium=cta&utm_campaign=getappscard"},(0,l.translate)("Download the free apps")),c.default.createElement("br",null),this.props.userCanManageOptions&&c.default.createElement("a",{href:"javascript:void(0)",onClick:this.dismissCard},(0,l.translate)("I already use this app.")))))}}]),t}(c.default.Component);m.displayName="AppsCard",m.propTypes={className:s.default.string},t.default=(0,b.connect)(function(e){return{isAppsCardDismissed:(0,O.appsCardDismissed)(e),arePromotionsActive:(0,A.arePromotionsActive)(e),userCanManageOptions:(0,A.userCanManageOptions)(e)}},function(e){return{dismissAppCard:function(){return e((0,O.updateSettings)({dismiss_dash_app_card:!0}))}}})(m),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=A(n(3)),r=A(n(4)),a=A(n(7)),i=A(n(5)),p=A(n(6)),s=A(n(1)),c=A(n(2)),b=n(9),M=n(21),l=n(24),u=A(n(660)),d=A(n(667)),z=A(n(717)),f=A(n(668)),O=n(20);function A(e){return e&&e.__esModule?e:{default:e}}var h=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,b=Array(s),M=0;M<s;M++)b[M]=arguments[M];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(b))),a.renderMainContent=function(e){var t=void 0,n=c.default.createElement(u.default,a.props);switch(e){case"/dashboard":default:t=c.default.createElement(z.default,a.props);break;case"/settings":case"/writing":case"/sharing":case"/performance":a.props.isSubscriber||(n=c.default.createElement(d.default,a.props),t=c.default.createElement(f.default,{route:a.props.route,siteAdminUrl:a.props.siteAdminUrl,siteRawUrl:a.props.siteRawUrl,searchTerm:a.props.searchTerm}))}return window.wpNavMenuClassChange(),c.default.createElement("div",null,n,t)},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"shouldComponentUpdate",value:function(e){return e.siteConnectionStatus!==this.props.siteConnectionStatus||e.route.path!==this.props.route.path}},{key:"render",value:function(){return this.renderMainContent(this.props.route.path)}}]),t}(c.default.Component);h.propTypes={userCanViewStats:s.default.bool.isRequired,isSubscriber:s.default.bool.isRequired,siteConnectionStatus:s.default.any.isRequired},t.default=(0,b.connect)(function(e){return{userCanViewStats:(0,M.userCanViewStats)(e),siteConnectionStatus:(0,O.getSiteConnectionStatus)(e),isSubscriber:(0,M.userIsSubscriber)(e),isModuleActivated:function(t){return(0,l.isModuleActivated)(e,t)}}})(h),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.UserUnlinked=t.DevModeNotice=t.StagingSiteNotice=t.DevVersionNotice=void 0;var o=q(n(3)),r=q(n(4)),a=q(n(7)),i=q(n(5)),p=q(n(6)),s=q(n(1)),c=q(n(2)),b=n(9),M=q(n(136)),l=q(n(656)),u=n(8),d=q(n(1005)),z=q(n(1012)),f=n(20),O=n(21),A=q(n(1014)),h=q(n(392)),m=n(67);function q(e){return e&&e.__esModule?e:{default:e}}var _=t.DevVersionNotice=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){return!(!this.props.isDevVersion||this.props.userIsSubscriber)&&c.default.createElement(M.default,{showDismiss:!1,text:(0,u.translate)("You are currently running a development version of Jetpack.")},c.default.createElement(l.default,{href:m.JETPACK_CONTACT_BETA_SUPPORT},(0,u.translate)("Submit Beta feedback")))}}]),t}(c.default.Component);_.displayName="DevVersionNotice",_.propTypes={isDevVersion:s.default.bool.isRequired,userIsSubscriber:s.default.bool.isRequired};var W=t.StagingSiteNotice=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){if(this.props.isStaging&&!this.props.isInIdentityCrisis){var e={text:(0,u.translate)("You are running Jetpack on a staging server."),status:"is-basic",showDismiss:!1};return c.default.createElement(M.default,e,c.default.createElement(l.default,{href:"https://jetpack.com/support/staging-sites/"},(0,u.translate)("More Info")))}return!1}}]),t}(c.default.Component);W.displayName="StagingSiteNotice",W.propTypes={isStaging:s.default.bool.isRequired,isInIdentityCrisis:s.default.bool.isRequired};var g=t.DevModeNotice=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){if("dev"===this.props.siteConnectionStatus){var e=this.props.siteDevMode,t=[];e.filter&&t.push((0,u.translate)("{{li}}The jetpack_development_mode filter is active{{/li}}",{components:{li:c.default.createElement("li",null)}})),e.constant&&t.push((0,u.translate)("{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}",{components:{li:c.default.createElement("li",null)}})),e.url&&t.push((0,u.translate)("{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}",{components:{li:c.default.createElement("li",null)}}));var n=(0,u.translate)("Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}",{components:{a:c.default.createElement("a",{href:"https://jetpack.com/support/development-mode/",target:"_blank",rel:"noopener noreferrer"}),reasons:c.default.createElement("ul",null,t)}});return c.default.createElement(M.default,{showDismiss:!1,status:"is-info",text:n},c.default.createElement(l.default,{href:"https://jetpack.com/development-mode/"},(0,u.translate)("Learn More")))}return!1}}]),t}(c.default.Component);g.displayName="DevModeNotice",g.propTypes={siteConnectionStatus:s.default.oneOfType([s.default.string,s.default.bool]).isRequired,siteDevMode:s.default.oneOfType([s.default.bool,s.default.object]).isRequired};var v=t.UserUnlinked=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){return!(this.props.isLinked||!this.props.connectUrl||!this.props.siteConnected)&&c.default.createElement("div",{className:"jp-unlinked-notice"},c.default.createElement(h.default,{title:(0,u.translate)("Jetpack is powering your site, but to access all of its features you’ll need to create an account."),callToAction:(0,u.translate)("Create account"),href:this.props.connectUrl+"&from=unlinked-user-connect",icon:"my-sites",className:"is-jetpack-info"}))}}]),t}(c.default.Component);v.displayName="UserUnlinked",v.propTypes={connectUrl:s.default.string.isRequired,siteConnected:s.default.bool.isRequired};var y=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){return c.default.createElement("div",{"aria-live":"polite"},c.default.createElement(d.default,null),c.default.createElement(z.default,null),c.default.createElement(_,{isDevVersion:this.props.isDevVersion,userIsSubscriber:this.props.userIsSubscriber}),c.default.createElement(g,{siteConnectionStatus:this.props.siteConnectionStatus,siteDevMode:this.props.siteDevMode}),c.default.createElement(W,{isStaging:this.props.isStaging,isInIdentityCrisis:this.props.isInIdentityCrisis}),c.default.createElement(A.default,null),c.default.createElement(v,{connectUrl:this.props.connectUrl,siteConnected:!0===this.props.siteConnectionStatus,isLinked:this.props.isLinked}),!this.props.siteConnectionStatus&&!this.props.userCanConnectSite&&c.default.createElement(M.default,{showDismiss:!1,status:"is-warning",text:(0,u.translate)("This site is not connected to WordPress.com. Please ask the site administrator to connect.")}))}}]),t}(c.default.Component);y.displayName="JetpackNotices",t.default=(0,b.connect)(function(e){return{connectUrl:(0,f.getConnectUrl)(e),siteConnectionStatus:(0,f.getSiteConnectionStatus)(e),userCanConnectSite:(0,O.userCanConnectSite)(e),userIsSubscriber:(0,O.userIsSubscriber)(e),isLinked:(0,f.isCurrentUserLinked)(e),isDevVersion:(0,O.isDevVersion)(e),siteDevMode:(0,f.getSiteDevMode)(e),isStaging:(0,f.isStaging)(e),isInIdentityCrisis:(0,f.isInIdentityCrisis)(e)}})(y)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=A(n(1006)),r=A(n(3)),a=A(n(4)),i=A(n(7)),p=A(n(5)),s=A(n(6)),c=A(n(1)),b=A(n(2)),M=A(n(104)),l=A(n(136)),u=A(n(656)),d=A(n(1009)),z=n(9),f=n(15),O=n(76);function A(e){return e&&e.__esModule?e:{default:e}}var h=(0,M.default)("calypso:notices");n(1011);var m=function(e){function t(){var e,n,o,i;(0,a.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=o=(0,p.default)(this,(e=t.__proto__||(0,r.default)(t)).call.apply(e,[this].concat(c))),o.removeNotice=function(e){e&&d.default.removeNotice(e)},o.handleLocalNoticeDismissClick=function(e){return function(){return o.removeNotice(e)}},o.handleReduxNoticeDismissClick=function(e){return function(){return o.props.removeNotice(e)}},i=n,(0,p.default)(o,i)}return(0,s.default)(t,e),(0,i.default)(t,[{key:"UNSAFE_componentWillMount",value:function(){h("Mounting Global Notices React component.")}},{key:"render",value:function(){var e=(this.props.notices[this.props.id]||[]).map(function(e,t){return b.default.createElement(l.default,{key:"notice-old-"+t,status:e.status,duration:e.duration||null,text:e.text,isCompact:e.isCompact,onDismissClick:this.handleLocalNoticeDismissClick(e),showDismiss:e.showDismiss},e.button&&b.default.createElement(u.default,{href:e.href,onClick:e.onClick},e.button))},this);return(e=e.concat(this.props.storeNotices.map(function(e,t){return b.default.createElement(l.default,{key:"notice-"+t,status:e.status,duration:e.duration||null,showDismiss:e.showDismiss,onDismissClick:this.handleReduxNoticeDismissClick(e.noticeId),text:e.text})},this))).length?b.default.createElement("div",{id:this.props.id,className:"global-notices"},e):null}}]),t}(b.default.Component);m.displayName="NoticesList",m.propTypes={id:c.default.string,notices:c.default.oneOfType([c.default.object,c.default.array])},m.defaultProps={id:"overlay-notices",notices:(0,o.default)([])},t.default=(0,z.connect)(function(e){return{storeNotices:e.globalNotices}},function(e){return(0,f.bindActionCreators)({removeNotice:O.removeNotice},e)})(m),e.exports=t.default},function(e,t,n){e.exports={default:n(1007),__esModule:!0}},function(e,t,n){n(1008),e.exports=n(18).Object.freeze},function(e,t,n){var o=n(41),r=n(173).onFreeze;n(175)("freeze",function(e){return function(t){return e&&o(t)?e(r(t)):t}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=n(104)("calypso:notices"),r=n(715);o("initializing notices");var a={containerNames:{}};r(a);var i=[];n(1010);var p={new:function(e,t,n){var r=t.overlay?"overlay-notices":"notices";a.containerNames[r]=r,o("creating notice",e,t,n),a[r]=[];var s={type:t.type||"message",status:n,text:e,duration:t.duration,container:r,button:t.button,href:t.href,onClick:function(e){if("function"==typeof t.onClick){var n=p.removeNotice.bind(p,s);return t.onClick(e,n)}},onRemoveCallback:t.onRemoveCallback||function(){},arrow:t.arrow,isCompact:t.isCompact,showDismiss:t.showDismiss,persistent:t.persistent};return t.displayOnNextPage?i.push(s):a[r].push(s),a.emit("change"),s},success:function(e,t){return t=t||{},this.new(e,t,"is-success")},error:function(e,t){return t=t||{},this.new(e,t,"is-error")},info:function(e,t){return t=t||{},this.new(e,t,"is-info")},warning:function(e,t){return t=t||{},this.new(e,t,"is-warning")},list:a,removeNotice:function(e){if(e.container){var t=a[e.container],n=t.indexOf(e);-1!==n&&(t.splice(n,1),a.emit("change"))}},clearNoticesOnNavigation:function(e,t){o("clearNoticesOnNavigation");var n=void 0,r=void 0,p=!1,s=function(e){return e.persistent};for(r in a.containerNames)n=a[r].length,a[r]=a[r].filter(s),n!==a[r].length&&(p=!0);i.length&&(i.forEach(function(e){a[e.container]=[],a[e.container].push(e)}),i=[]),p&&a.emit("change"),t()},clearNotices:function(e){a[e]=[],a.emit("change")},getStatusHelper:function(e){return e.error?"is-error":e.warning?"is-warning":e.info?"is-info":e.success?"is-success":void 0}};t.default=p,e.exports=t.default},function(e,t,n){},function(e,t,n){},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=O(n(3)),r=O(n(4)),a=O(n(7)),i=O(n(5)),p=O(n(6)),s=O(n(2)),c=n(9),b=n(8),M=O(n(136)),l=n(21),u=n(428),d=n(20),z=O(n(656)),f=O(n(1013));function O(e){return e&&e.__esModule?e:{default:e}}var A=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var c=arguments.length,l=Array(c),u=0;u<c;u++)l[u]=arguments[u];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(l))),a.state={showNotice:!0},a.dismissJetpackStateNotice=function(){a.setState({showNotice:!1})},a.getErrorFromKey=function(e){var t=a.props.jetpackStateNoticesErrorDescription||!1,n="";switch(e){case"cheatin":n=(0,b.translate)("Cheatin' uh?");break;case"access_denied":n=(0,b.translate)("{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}",{components:{a:s.default.createElement("a",{href:"https://jetpack.com/cancelled-connection/",target:"_blank",rel:"noopener noreferrer"}),p:s.default.createElement("p",null)}});break;case"wrong_state":n=(0,b.translate)("You need to stay logged in to your WordPress blog while you authorize Jetpack.");break;case"invalid_client":n=(0,b.translate)("We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.");break;case"invalid_grant":n=(0,b.translate)('There was an issue connecting your Jetpack. Please click "Connect to WordPress.com" again.');break;case"site_inaccessible":case"site_requires_authorization":n=(0,b.translate)("Your website needs to be publicly accessible to use Jetpack: %(error_key)s",{args:{error_key:e}});break;case"site_blacklisted":n=(0,b.translate)("This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.",{components:{a:s.default.createElement("a",{href:"https://wordpress.com/tos",rel:"noopener noreferrer",target:"_blank"})}});break;case"not_public":n=(0,b.translate)("{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).",{components:{s:s.default.createElement("strong",null)}});break;case"wpcom_408":case"wpcom_5??":case"wpcom_bad_response":case"wpcom_outage":n=(0,b.translate)("WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.");break;case"register_http_request_failed":case"token_http_request_failed":n=(0,b.translate)("Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.",{args:{error_key:e}});break;case"no_role":case"no_cap":case"no_code":case"no_state":case"invalid_state":case"invalid_request":case"invalid_scope":case"unsupported_response_type":case"invalid_token":case"no_token":case"missing_secrets":case"home_missing":case"siteurl_missing":case"gmt_offset_missing":case"site_name_missing":case"secret_1_missing":case"secret_2_missing":case"site_lang_missing":case"home_malformed":case"siteurl_malformed":case"gmt_offset_malformed":case"timezone_string_malformed":case"site_name_malformed":case"secret_1_malformed":case"secret_2_malformed":case"site_lang_malformed":case"secrets_mismatch":case"verify_secret_1_missing":case"verify_secret_1_malformed":case"verify_secrets_missing":case"verify_secrets_mismatch":n=(0,b.translate)("{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s",{components:{s:s.default.createElement("strong",null)},args:{error_key:e}});break;default:n=e}return t?s.default.createElement("div",null,n,s.default.createElement("br",null),t):s.default.createElement("div",null,n)},a.getMessageFromKey=function(e){var t="",n="is-info",o=void 0;switch(e){case"modules_activated":t=(0,b.translate)("Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!",{args:{jetpack_version:a.props.currentVersion},components:{s:s.default.createElement("strong",null)}});break;case"already_authorized":t=(0,b.translate)("Your Jetpack is already connected."),n="is-success";break;case"authorized":t=(0,b.translate)("You're fueled up and ready to go, Jetpack is now active."),n="is-success";break;case"linked":t=(0,b.translate)("You're fueled up and ready to go."),n="is-success";break;case"protect_misconfigured_ip":t=(0,b.translate)("Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site."),n="is-info",o=s.default.createElement(z.default,{href:"https://jetpack.com/support/security/troubleshooting-protect/"},(0,b.translate)("Learn More"));break;default:t=e}return[t,n,o]},a.renderContent=function(){var e="is-info",t="",n=void 0,o=a.props.jetpackStateNoticesErrorCode,r=a.props.jetpackStateNoticesMessageCode;if(o||r){o&&(t=a.getErrorFromKey(o),"access_denied"!==o&&(e="is-error"));var i=a.props,p=i.currentVersion,c=i.gutenbergAvailable,b=p.match(/(6\.8).*/);if("modules_activated"===r&&b&&c)return s.default.createElement(f.default,{adminUrl:a.props.adminUrl,dismiss:a.dismissJetpackStateNotice,isUnavailableInDevMode:a.props.isUnavailableInDevMode,version:b[1]});if(r){var l=a.getMessageFromKey(r);t=l[0],e=l[1],n=l[2]}return s.default.createElement(M.default,{status:e,onDismissClick:a.dismissJetpackStateNotice,text:t},n)}},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){return s.default.createElement("div",null,this.state.showNotice?this.renderContent():null)}}]),t}(s.default.Component);A.displayName="JetpackStateNotices",t.default=(0,c.connect)(function(e){return{currentVersion:(0,l.getCurrentVersion)(e),gutenbergAvailable:(0,l.isGutenbergAvailable)(e),jetpackStateNoticesErrorCode:(0,u.getJetpackStateNoticesErrorCode)(e),jetpackStateNoticesMessageCode:(0,u.getJetpackStateNoticesMessageCode)(e),jetpackStateNoticesErrorDescription:(0,u.getJetpackStateNoticesErrorDescription)(e),adminUrl:(0,l.getSiteAdminUrl)(e),isUnavailableInDevMode:function(t){return(0,d.isUnavailableInDevMode)(e,t)}}})(A),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=A(n(3)),r=A(n(4)),a=A(n(7)),i=A(n(5)),p=A(n(6)),s=A(n(1)),c=n(2),b=A(c),M=n(8),l=A(n(33)),u=A(n(186)),d=A(n(429)),z=n(67),f=n(27),O=A(n(13));function A(e){return e&&e.__esModule?e:{default:e}}var h=(0,f.withModuleSettingsFormHelpers)(function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var s=arguments.length,c=Array(s),b=0;b<s;b++)c[b]=arguments[b];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(c))),a.trackLearnMoreClick=function(){O.default.tracks.recordJetpackClick({target:"warm_welcome_view_editor",version:a.props.version})},a.dismissNotice=function(){O.default.tracks.recordJetpackClick({target:"warm_welcome_dismiss",version:a.props.version}),a.props.dismiss()},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"componentDidMount",value:function(){O.default.tracks.recordEvent("jetpack_warm_welcome_view",{version:this.props.version})}},{key:"renderInnerContent",value:function(){var e=this.props.adminUrl+"post-new.php";return b.default.createElement("div",{className:"jp-upgrade-notice__content"},b.default.createElement("p",null,(0,M.translate)("The features you rely on, adapted for the new WordPress editor."),b.default.createElement("br",null),(0,M.translate)("A new editor? Yes! {{a}}Learn more{{/a}}.",{components:{a:b.default.createElement(u.default,{target:"_blank",rel:"noopener noreferrer",href:"https://wp.me/p1moTy-cee"})}})),b.default.createElement("h2",null,(0,M.translate)("Build your Jetpack site with blocks")),b.default.createElement("p",null,(0,M.translate)("Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.")),b.default.createElement("p",null,b.default.createElement("img",{src:z.imagePath+"block-picker.png",width:"250",alt:(0,M.translate)("Jetpack is ready for the new WordPress editor")})),b.default.createElement("div",{className:"jp-dialogue__cta-container"},b.default.createElement(l.default,{primary:!0,href:e,onClick:this.trackLearnMoreClick},(0,M.translate)("Take me to the new editor")),b.default.createElement(l.default,{onClick:this.dismissNotice},(0,M.translate)("Okay, got it!"))))}},{key:"render",value:function(){return b.default.createElement(d.default,{svg:b.default.createElement("img",{src:z.imagePath+"jetpack-gutenberg.svg",width:"250",alt:(0,M.translate)("Jetpack is ready for the new WordPress editor")}),title:(0,M.translate)("New in Jetpack!"),content:this.renderInnerContent(),dismiss:this.dismissNotice})}}]),t}(c.Component));d.default.propTypes={adminUrl:s.default.string,dismiss:s.default.func,isUnavailableInDevMode:s.default.func,version:s.default.string},t.default=h,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=d(n(3)),r=d(n(4)),a=d(n(7)),i=d(n(5)),p=d(n(6)),s=d(n(2)),c=n(15),b=n(9),M=d(n(136)),l=n(8),u=n(428);function d(e){return e&&e.__esModule?e:{default:e}}var z=function(e){function t(){var e,n,a,p;(0,r.default)(this,t);for(var c=arguments.length,b=Array(c),u=0;u<c;u++)b[u]=arguments[u];return n=a=(0,i.default)(this,(e=t.__proto__||(0,o.default)(t)).call.apply(e,[this].concat(b))),a.dismissJetpackActionNotice=function(){a.props.dismissJetpackActionNotice(a.props.jetpackNotices)},a.renderNotices=function(){var e=a.props.jetpackNotices;switch(e){case"disconnected":return!a.props.isDismissed(e)&&s.default.createElement("div",null,s.default.createElement(M.default,{onDismissClick:a.dismissJetpackActionNotice},(0,l.translate)("You have successfully disconnected Jetpack"),s.default.createElement("br",null),(0,l.translate)("Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.",{components:{a:s.default.createElement("a",{href:"https://jetpack.com/survey-disconnected/",target:"_blank",rel:"noopener noreferrer"})}})));default:return!1}},p=n,(0,i.default)(a,p)}return(0,p.default)(t,e),(0,a.default)(t,[{key:"render",value:function(){return s.default.createElement("div",null,this.renderNotices())}}]),t}(s.default.Component);z.displayName="DismissableNotices",t.default=(0,b.connect)(function(e){return{jetpackNotices:(0,u.getJetpackNotices)(e),isDismissed:function(t){return(0,u.isNoticeDismissed)(e,t)}}},function(e){return(0,c.bindActionCreators)({dismissJetpackActionNotice:u.dismissJetpackActionNotice},e)})(z),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=c(n(3)),r=c(n(4)),a=c(n(7)),i=c(n(5)),p=c(n(6)),s=c(n(2));function c(e){return e&&e.__esModule?e:{default:e}}var b=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"componentDidMount",value:function(){var e=jQuery(this.refs.adminNotices),t=jQuery(".vp-deactivated");t.length>0&&t.each(function(){var t=jQuery(this).addClass("dops-notice is-success is-dismissable").removeClass("wrap vp-notice notice notice-success");t.wrapInner('<span class="dops-notice__content">'),t.find(".dops-notice__content").before('<span class="dops-notice__icon-wrapper"><svg class="gridicon gridicons-notice dops-notice__icon" height="24" width="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M9 19.414l-6.707-6.707 1.414-1.414L9 16.586 20.293 5.293l1.414 1.414"/></g></svg></span>').css("display","block"),t.find(".dops-notice__content").after('<span role="button" tabindex="0" class="dops-notice__dismiss"><svg class="gridicon gridicons-cross" height="24" width="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"></path></g></svg><span class="screen-reader-text"></span></span>'),t.find("h2").replaceWith(function(){return jQuery("<strong />",{html:this.innerHTML})}),t.find("p").replaceWith(function(){return jQuery("<div/>",{html:this.innerHTML})}),t.prependTo(e).css("display","flex")});var n=jQuery(".vp-notice");n.length>0&&n.each(function(){var t=jQuery(this).hasClass("vp-registered"),n=t?"is-success":"is-warning",o=jQuery(this).addClass("dops-notice vp-notice-jp "+n).removeClass("wrap vp-notice"),r=t?'<span class="dops-notice__icon-wrapper"><svg class="gridicon gridicons-notice dops-notice__icon" height="24" width="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M9 19.414l-6.707-6.707 1.414-1.414L9 16.586 20.293 5.293l1.414 1.414"/></g></svg></span>':'<span class="dops-notice__icon-wrapper"><svg class="gridicon gridicons-notice dops-notice__icon" height="24" width="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 15h-2v-2h2v2zm0-4h-2l-.5-6h3l-.5 6z"></path></g></svg></span>';o.wrapInner('<span class="dops-notice__content">'),o.find(".dops-notice__content").before(r),o.find(".vp-message").removeClass("vp-message").addClass("dops-notice__text"),o.find("h3").replaceWith(function(){return jQuery("<strong />",{html:this.innerHTML})}),o.find("p").replaceWith(function(){return jQuery("<div/>",{html:this.innerHTML})}),o.find('a[href*="admin.php?page=vaultpress"]').remove(),o.prependTo(e).css("display","flex")});var o=jQuery(".woocommerce-message");o.length>0&&o.each(function(){var t=jQuery(this).addClass("dops-notice").removeClass("updated wc-connect");t.find(".button-primary").addClass("dops-notice__action").removeClass("button-primary").detach().appendTo(t),t.find("p").not(".submit").wrapAll('<span class="dops-notice__text"/>');var n=t.find(".dops-notice__text");n.find("p").replaceWith(function(){return jQuery("<div/>",{html:this.innerHTML,class:"dops-notice__moved_text"})}),n.find("br").remove(),t.find(".button-secondary").removeClass("button-secondary").detach().appendTo(n),t.find(".submit").remove(),t.find(".woocommerce-message-close").removeClass("woocommerce-message-close notice-dismiss").addClass("dops-notice__action"),t.wrapInner('<span class="dops-notice__content">').prependTo(e).css("display","flex"),t.find(".dops-notice__action").not(":first").removeClass("dops-notice__action").detach().appendTo(t.find(".dops-notice__text")),t.find(".dops-notice__action:first").detach().appendTo(t)});var r=jQuery(".notice");r.length>0&&r.each(function(){jQuery(this).hide()}),e.length>0&&jQuery(".dops-notice__dismiss").click(function(){jQuery(this).parent().closest("div").hide()})}},{key:"render",value:function(){return s.default.createElement("div",{id:"jp-admin-notices",ref:"adminNotices","aria-live":"polite"})}}]),t}(s.default.Component);t.default=b,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Tracker=void 0;var o=l(n(3)),r=l(n(4)),a=l(n(7)),i=l(n(5)),p=l(n(6)),s=l(n(1)),c=n(2),b=n(9),M=n(56);function l(e){return e&&e.__esModule?e:{default:e}}var u=t.Tracker=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"UNSAFE_componentWillReceiveProps",value:function(e){var t=this.props.analytics.tracks.recordEvent;e.searchTerm!==this.props.searchTerm&&t("jetpack_wpa_search_term",{term:e.searchTerm})}},{key:"render",value:function(){return null}}]),t}(c.Component);u.propTypes={analytics:s.default.object,searchTerm:s.default.string},t.default=(0,b.connect)(function(e){return{searchTerm:(0,M.getSearchTerm)(e)}})(u)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=h(n(3)),r=h(n(4)),a=h(n(7)),i=h(n(5)),p=h(n(6)),s=h(n(1)),c=n(2),b=h(c),M=n(9),l=n(38),u=h(n(13)),d=n(42),z=n(86),f=h(n(1018)),O=h(n(1020)),A=h(n(1021));function h(e){return e&&e.__esModule?e:{default:e}}var m=function(e){function t(){(0,r.default)(this,t);var e=(0,i.default)(this,(t.__proto__||(0,o.default)(t)).call(this));return e.state={planWelcomeDismissed:!1},e.boundDismiss=e.dismissWelcome.bind(e),e}return(0,p.default)(t,e),(0,a.default)(t,[{key:"dismissWelcome",value:function(){var e=(0,l.getPlanClass)(this.props.sitePlan.product_slug);u.default.tracks.recordEvent("jetpack_warm_welcome_plan_dismiss",{planClass:e}),this.setState({planWelcomeDismissed:!0}),this.props.dismiss()}},{key:"render",value:function(){var e=(0,l.getPlanClass)(this.props.sitePlan.product_slug),t={dismiss:this.boundDismiss,siteRawUrl:this.props.siteRawUrl,planClass:e};if(!this.props.newPlanActivated||!this.props.userCanManageModules||this.state.planWelcomeDismissed)return!1;switch(e){case"is-personal-plan":return b.default.createElement(f.default,t);case"is-premium-plan":return b.default.createElement(O.default,t);case"is-business-plan":return b.default.createElement(A.default,t);default:return!1}}}]),t}(c.Component);m.propTypes={dismiss:s.default.func,newPlanActivated:s.default.bool,userCanManageModules:s.default.bool},m.defaultProps={newPlanActivated:!1,userCanManageModules:!1},t.default=(0,M.connect)(function(e){return{sitePlan:(0,d.getSitePlan)(e)}},function(e){return{dismiss:function(){return e((0,z.updateSettings)({show_welcome_for_new_plan:!1}))}}})(m),e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=O(n(3)),r=O(n(4)),a=O(n(7)),i=O(n(5)),p=O(n(6)),s=O(n(1)),c=n(2),b=O(c),M=n(8),l=O(n(13)),u=O(n(429)),d=O(n(33)),z=n(67),f=O(n(658));function O(e){return e&&e.__esModule?e:{default:e}}var A=function(e){function t(e){(0,r.default)(this,t);var n=(0,i.default)(this,(t.__proto__||(0,o.default)(t)).call(this,e));return n.clickCtaDismissGetStarted=n.clickCtaDismiss.bind(n,"get-started"),n}return(0,p.default)(t,e),(0,a.default)(t,[{key:"componentDidMount",value:function(){l.default.tracks.recordEvent("jetpack_warm_welcome_plan_view",{planClass:this.props.planClass})}},{key:"clickCtaDismiss",value:function(e){l.default.tracks.recordEvent("jetpack_warm_welcome_plan_click",{planClass:this.props.planClass,cta:e}),this.props.dismiss()}},{key:"renderInnerContent",value:function(){return b.default.createElement("div",null,b.default.createElement("p",null,(0,M.translate)("Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.")),b.default.createElement("img",{src:z.imagePath+"customize-theme.svg",className:"jp-welcome__svg",alt:(0,M.translate)("Themes")}),b.default.createElement("p",null,(0,M.translate)("With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.")),b.default.createElement(f.default,null),b.default.createElement("div",{className:"jp-welcome-new-plan__button"},b.default.createElement(d.default,{onClick:this.clickCtaDismissGetStarted},(0,M.translate)("Got it"))))}},{key:"render",value:function(){return b.default.createElement(u.default,{svg:b.default.createElement("img",{src:z.imagePath+"connect-jetpack.svg",width:"160",alt:(0,M.translate)("Welcome personal"),style:{paddingLeft:"60px"}}),title:(0,M.translate)("Explore your Jetpack Personal plan!"),content:this.renderInnerContent(),dismiss:this.props.dismiss,className:"jp-welcome-new-plan is-personal"})}}]),t}(c.Component);A.propTypes={dismiss:s.default.func},t.default=A,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return"undefined"==typeof DOMParser?e:(new DOMParser).parseFromString(e,"text/html").documentElement.textContent},e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=m(n(3)),r=m(n(4)),a=m(n(7)),i=m(n(5)),p=m(n(6)),s=m(n(1)),c=n(2),b=m(c),M=n(8),l=m(n(13)),u=m(n(33)),d=m(n(17)),z=m(n(429)),f=n(67),O=m(n(721)),A=m(n(658)),h=m(n(430));function m(e){return e&&e.__esModule?e:{default:e}}var q=function(e){function t(e){(0,r.default)(this,t);var n=(0,i.default)(this,(t.__proto__||(0,o.default)(t)).call(this,e));return n.clickCtaDismissVideo=n.clickCtaDismiss.bind(n,"video"),n.clickCtaDismissAds=n.clickCtaDismiss.bind(n,"ads"),n.clickCtaDismissGetStarted=n.clickCtaDismiss.bind(n,"get-started"),n}return(0,p.default)(t,e),(0,a.default)(t,[{key:"componentDidMount",value:function(){l.default.tracks.recordEvent("jetpack_warm_welcome_plan_view",{planClass:this.props.planClass})}},{key:"clickCtaDismiss",value:function(e){l.default.tracks.recordEvent("jetpack_warm_welcome_plan_click",{planClass:this.props.planClass,cta:e}),this.props.dismiss()}},{key:"renderInnerContent",value:function(){return b.default.createElement("div",null,b.default.createElement("p",null,(0,M.translate)("Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.")),b.default.createElement("img",{src:f.imagePath+"customize-theme.svg",className:"jp-welcome__svg",alt:(0,M.translate)("Themes")}),b.default.createElement("p",null,(0,M.translate)("With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.")),b.default.createElement("img",{src:f.imagePath+"wordads.svg",className:"jp-welcome__svg",alt:(0,M.translate)("Sharing")}),b.default.createElement("p",null,(0,M.translate)("Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.")),b.default.createElement(h.default,{module_slug:"publicize"}),b.default.createElement(h.default,{module_slug:"wordads"}),b.default.createElement(O.default,null),b.default.createElement(A.default,null),b.default.createElement("p",null,(0,M.translate)("Start exploring Jetpack Premium now to see all the benefits of your new plan.")),b.default.createElement("div",{className:"jp-welcome-new-plan__button"},b.default.createElement(u.default,{onClick:this.clickCtaDismissGetStarted},(0,M.translate)("Got it"))))}},{key:"renderBelowContent",value:function(){return b.default.createElement("div",null,b.default.createElement(d.default,{href:"#/traffic",compact:!0,className:"jp-dialogue-card__below",onClick:this.clickCtaDismissAds},(0,M.translate)("Monetize your site with ads")))}},{key:"render",value:function(){return b.default.createElement(z.default,{svg:b.default.createElement("img",{src:f.imagePath+"generating-cash-2.svg",width:"250",alt:(0,M.translate)("Welcome Premium")}),title:(0,M.translate)("Explore your Jetpack Premium plan!"),content:this.renderInnerContent(),belowContent:this.renderBelowContent(),dismiss:this.props.dismiss,className:"jp-welcome-new-plan is-premium"})}}]),t}(c.Component);q.propTypes={dismiss:s.default.func},t.default=q,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=m(n(3)),r=m(n(4)),a=m(n(7)),i=m(n(5)),p=m(n(6)),s=m(n(1)),c=n(2),b=m(c),M=n(8),l=m(n(13)),u=m(n(33)),d=m(n(17)),z=m(n(429)),f=n(67),O=m(n(658)),A=m(n(721)),h=m(n(430));function m(e){return e&&e.__esModule?e:{default:e}}var q=function(e){function t(e){(0,r.default)(this,t);var n=(0,i.default)(this,(t.__proto__||(0,o.default)(t)).call(this,e));return n.clickCtaDismissThemes=n.clickCtaDismiss.bind(n,"themes"),n.clickCtaDismissAds=n.clickCtaDismiss.bind(n,"ads"),n.clickCtaDismissSearch=n.clickCtaDismiss.bind(n,"search"),n.clickCtaDismissSeo=n.clickCtaDismiss.bind(n,"seo"),n.clickCtaDismissGetStarted=n.clickCtaDismiss.bind(n,"get-started"),n}return(0,p.default)(t,e),(0,a.default)(t,[{key:"componentDidMount",value:function(){l.default.tracks.recordEvent("jetpack_warm_welcome_plan_view",{planClass:this.props.planClass})}},{key:"clickCtaDismiss",value:function(e){l.default.tracks.recordEvent("jetpack_warm_welcome_plan_click",{planClass:this.props.planClass,cta:e}),this.props.dismiss()}},{key:"renderInnerContent",value:function(){return b.default.createElement("div",null,b.default.createElement("p",null,(0,M.translate)("Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.")),b.default.createElement("img",{src:f.imagePath+"customize-theme.svg",className:"jp-welcome__svg",alt:(0,M.translate)("Themes")}),b.default.createElement("p",null,(0,M.translate)("With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.")),b.default.createElement("p",null,(0,M.translate)("Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.")),b.default.createElement(h.default,{module_slug:"search"}),b.default.createElement("img",{src:f.imagePath+"wordads.svg",className:"jp-welcome__svg",alt:(0,M.translate)("Sharing")}),b.default.createElement("p",null,(0,M.translate)("Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.")),b.default.createElement(h.default,{module_slug:"publicize"}),b.default.createElement(h.default,{module_slug:"wordads"}),b.default.createElement(h.default,{module_slug:"seo-tools"}),b.default.createElement(h.default,{module_slug:"google-analytics"}),b.default.createElement(O.default,null),b.default.createElement(A.default,null),b.default.createElement("p",null,(0,M.translate)("Start exploring Jetpack Professional now to see all the benefits of your new plan.")),b.default.createElement("div",{className:"jp-welcome-new-plan__button"},b.default.createElement(u.default,{onClick:this.clickCtaDismissGetStarted},(0,M.translate)("Got it"))))}},{key:"renderBelowContent",value:function(){return b.default.createElement("div",null,b.default.createElement(d.default,{href:"https://wordpress.com/themes/premium/"+this.props.siteRawUrl,compact:!0,className:"jp-dialogue-card__below",onClick:this.clickCtaDismissThemes},(0,M.translate)("Install premium themes")),b.default.createElement(d.default,{href:"#/traffic",compact:!0,className:"jp-dialogue-card__below",onClick:this.clickCtaDismissAds},(0,M.translate)("Monetize your site with ads")),b.default.createElement(d.default,{href:"customize.php?autofocus[panel]=widgets",compact:!0,className:"jp-dialogue-card__below",onClick:this.clickCtaDismissSearch},(0,M.translate)("Add the Search (Jetpack) widget to your sidebar")),b.default.createElement(d.default,{href:"#/traffic",compact:!0,className:"jp-dialogue-card__below",onClick:this.clickCtaDismissSeo},(0,M.translate)("Review SEO features")))}},{key:"render",value:function(){return b.default.createElement(z.default,{svg:b.default.createElement("img",{src:f.imagePath+"people-around-page.svg",width:"250",alt:(0,M.translate)("Welcome Professional")}),title:(0,M.translate)("Explore your Jetpack Professional plan!"),content:this.renderInnerContent(),belowContent:this.renderBelowContent(),dismiss:this.props.dismiss,className:"jp-welcome-new-plan is-professional"})}}]),t}(c.Component);q.propTypes={dismiss:s.default.func},t.default=q,e.exports=t.default},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=d(n(3)),r=d(n(4)),a=d(n(7)),i=d(n(5)),p=d(n(6)),s=d(n(1)),c=n(2),b=n(9),M=n(394),l=n(42),u=n(20);function d(e){return e&&e.__esModule?e:{default:e}}var z=function(e){function t(){return(0,r.default)(this,t),(0,i.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,p.default)(t,e),(0,a.default)(t,[{key:"UNSAFE_componentWillMount",value:function(){this.props.isFetchingRewindStatus||this.props.isDevMode||this.props.fetchRewind()}},{key:"render",value:function(){return null}}]),t}(c.Component);z.propTypes={isFetchingRewindStatus:s.default.bool,isDevMode:s.default.bool,sitePlan:s.default.object},z.defaultProps={isFetchingRewindStatus:!1,isDevMode:!1,sitePlan:{}},t.default=(0,b.connect)(function(e){return{isFetchingRewindStatus:(0,M.isFetchingRewindStatus)(e),isDevMode:(0,u.isDevMode)(e),sitePlan:(0,l.getSitePlan)(e)}},function(e){return{fetchRewind:function(){return e((0,M.fetchRewindStatus)())}}})(z),e.exports=t.default}]); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/after-the-deadline/atd-autoproofread.min.js b/plugins/jetpack/_inc/build/after-the-deadline/atd-autoproofread.min.js
deleted file mode 100644
index ff353116..00000000
--- a/plugins/jetpack/_inc/build/after-the-deadline/atd-autoproofread.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* jshint devel: true, onevar: false */
-/* global tinyMCE, AtD_restore_if_proofreading, AtD_check, AtD_unbind_proofreader_listeners,
- AtD, AtD_bind_proofreader_listeners, AtD_check_when
- */
-var AtD_proofread_click_count=0;function AtD_submit_check(t){AtD_proofread_click_count>0||(t.stopImmediatePropagation(),t.preventDefault(),"undefined"!=typeof tinyMCE&&tinyMCE.activeEditor&&!tinyMCE.activeEditor.isHidden()?tinyMCE.activeEditor.execCommand("mceWritingImprovementTool",AtD_submit_check_callback):(AtD_restore_if_proofreading(),AtD_check(AtD_submit_check_callback)))}function AtD_submit_check_callback(t){if(t=Number(t||0),AtD_unbind_proofreader_listeners(),0===t||1<AtD_proofread_click_count)AtD_update_post();else if(-1===t)alert(AtD.getLang("message_server_error","There was a problem communicating with the Proofreading service. Try again in one minute.")),AtD_update_post();else{var e;e="publish"===jQuery("#original_post_status").val()?AtD.getLang("dialog_confirm_post_publish","The proofreader has suggestions for this post. Are you sure you want to publish it?\n\nPress OK to publish your post, or Cancel to view the suggestions and edit your post."):AtD.getLang("dialog_confirm_post_update","The proofreader has suggestions for this post. Are you sure you want to update it?\n\nPress OK to update your post, or Cancel to view the suggestions and edit your post."),confirm(e)?AtD_update_post():(AtD_bind_proofreader_listeners(),AtD_kill_autoproofread()),jQuery("#publish").removeClass("button-primary-disabled"),jQuery("#ajax-loading").hide()}}function AtD_kill_autoproofread(){jQuery("#publish").unbind("click.AtD_submit_check")}function AtD_update_post(){"undefined"!=typeof tinyMCE&&tinyMCE.activeEditor&&!tinyMCE.activeEditor.isHidden()||AtD_restore_if_proofreading(),jQuery("#publish").unbind("click.AtD_submit_check").click()}jQuery(document).ready(function(t){var e=t("#original_post_status").val();"undefined"!=typeof AtD_check_when&&t("#content").length&&("publish"!==e&&AtD_check_when.onpublish||("publish"===e||"schedule"===e)&&AtD_check_when.onupdate)&&t("#publish").bind("click.AtD_submit_check",AtD_submit_check)}); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/after-the-deadline/atd-nonvis-editor-plugin.min.js b/plugins/jetpack/_inc/build/after-the-deadline/atd-nonvis-editor-plugin.min.js
deleted file mode 100644
index 9492e37c..00000000
--- a/plugins/jetpack/_inc/build/after-the-deadline/atd-nonvis-editor-plugin.min.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* jshint devel: true, onevar: false, smarttabs: true */
-/* global AtD, QTags, AtD_l10n_r0ar, edButtons, edButton, switchEditors, AtD_unbind_proofreader_listeners */
-/* exported AtD_unbind_proofreader_listeners */
-var AtD_qtbutton,autosave;function AtD_restore_text_area(){var t;jQuery("#atd-content").get(0)?(AtD.remove("atd-content"),t=jQuery("#atd-content").html()):(AtD.remove("content"),t=jQuery("#content").html()),"Microsoft Internet Explorer"===navigator.appName&&(t=t.replace(/<BR.*?class.*?atd_remove_me.*?>/gi,"\n")),void 0!==window.twemoji&&(t=t.replace(/<img [^>]+>/g,function(t){if(-1!==t.indexOf("emoji")){var e=t.match(/alt="([^"]+)"/);if(e&&e[1]&&window.twemoji.test(e[1]))return e[1]}return t})),jQuery("#content").val(t.replace(/\&lt\;/g,"<").replace(/\&gt\;/g,">").replace(/\&amp;/g,"&")).height(AtD.height).show(),jQuery("#atd-content").remove(),AtD_qtbutton&&(jQuery(AtD_qtbutton).val(AtD.getLang("button_proofread","proofread")),jQuery(AtD_qtbutton).css({color:"#464646"}),jQuery(AtD_qtbutton).siblings("input").andSelf().attr("disabled",!1)),void 0!==AtD.autosave&&(window.wp&&window.wp.autosave&&window.wp.autosave.server?(window.wp.autosave.local.resume&&window.wp.autosave.local.resume(),window.wp.autosave.server.resume&&window.wp.autosave.server.resume()):autosave=AtD.autosave)}function AtD_restore_if_proofreading(){AtD_qtbutton&&jQuery(AtD_qtbutton).val()===AtD.getLang("button_edit_text","edit text")&&AtD_restore_text_area()}function AtD_unbind_proofreader_listeners(){jQuery("#save-post, #post-preview, #publish, #edButtonPreview").unbind("focus",AtD_restore_if_proofreading),jQuery("#add_poll, #add_image, #add_video, #add_audio, #add_media").unbind("click",AtD_restore_if_proofreading),jQuery("#post").unbind("submit",AtD_restore_if_proofreading)}function AtD_bind_proofreader_listeners(){jQuery("#save-post, #post-preview, #publish, #edButtonPreview").focus(AtD_restore_if_proofreading),jQuery("#add_poll, #add_image, #add_video, #add_audio, #add_media").click(AtD_restore_if_proofreading),jQuery("#post").submit(AtD_restore_if_proofreading)}function AtD_check(t){var e,o;if(jQuery.isFunction(t)?(e=t,AtD_qtbutton||(AtD_qtbutton=jQuery("#qt_content_AtD, #ed_AtD").get(0))):(t.id||(t=t[0]),AtD_qtbutton=t),!jQuery("#content").length)return void 0!==e&&e(0),void AtD_restore_if_proofreading();if(jQuery(AtD_qtbutton).val()===AtD.getLang("button_edit_text","edit text"))AtD_restore_text_area();else{window.editorExpand&&jQuery("#postdivrich").hasClass("wp-editor-expand")?AtD.wpEditorExpand=!0:AtD.wpEditorExpand=!1,AtD.height?AtD.height=jQuery("#content").height():(AtD.height=jQuery("#content").height(),AtD_bind_proofreader_listeners(),jQuery("#edButtonPreview").attr("onclick",null).click(function(){AtD_restore_if_proofreading(),switchEditors.go("content","tinymce")}),AtD.content_canvas=jQuery("#content"),AtD.autosave=autosave),jQuery(AtD_qtbutton).css({color:"red"}).val(AtD.getLang("button_edit_text","edit text")).attr("disabled",!0);var r,n=jQuery("#content"),a=n.val().replace(/\&/g,"&amp;").replace(/</g,"&lt;").replace(/\>/g,"&gt;"),i=n.css("font-family"),d=n.css("font-size"),u=n.css("line-height");"Microsoft Internet Explorer"===navigator.appName&&(a=a.replace(/[\n\r\f]/gm,'<BR class="atd_remove_me">')),r=jQuery('<div class="input" id="atd-content">'+a+"</div>"),n.after(r).hide(),(o=AtD.height)<200?o=200:o>1e3&&(o=1e3);var s=jQuery("#ed_toolbar").height();r.css({overflow:"auto","background-color":"white",color:"black","white-space":"pre-wrap",padding:"10px","font-family":i||"Consolas, Monaco, monospace","font-size":d||"13px","line-height":u||"1.5",height:o,"margin-top":s+7+"px"}),window.wp&&window.wp.autosave&&window.wp.autosave.server?(window.wp.autosave.local.suspend&&window.wp.autosave.local.suspend(),window.wp.autosave.server.suspend&&window.wp.autosave.server.suspend()):autosave=function(){},jQuery(AtD_qtbutton).siblings("input").andSelf().attr("disabled",!0),AtD.check("atd-content",{success:function(t){0===Number(t)&&"function"!=typeof e&&alert(AtD.getLang("message_no_errors_found","No writing errors were found")),AtD_restore_if_proofreading()},ready:function(t){jQuery(AtD_qtbutton).attr("disabled",!1),"function"==typeof e&&e(t)},error:function(){jQuery(AtD_qtbutton).attr("disabled",!1),"function"==typeof e?e(-1):alert(AtD.getLang("message_server_error","There was a problem communicating with the Proofreading service. Try again in one minute.")),AtD_restore_if_proofreading()},editSelection:function(t){var e=prompt(AtD.getLang("dialog_replace_selection","Replace selection with:"),t.text());null!=e&&t.replaceWith(e)},explain:function(t){var e=screen.width/2-240,o=screen.height/2-190;window.open(t,"","width=480,height=380,toolbar=0,status=0,resizable=0,location=0,menuBar=0,left="+e+",top="+o).focus()},ignore:function(t){jQuery.ajax({type:"GET",url:AtD.rpc_ignore+encodeURI(t).replace(/&/g,"%26"),format:"raw",error:function(t,e,o){void 0!==AtD.callback_f&&void 0!==AtD.callback_f.error&&AtD.callback_f.error(e+": "+o)}})}})}}"undefined"!=typeof QTags&&QTags.addButton?jQuery(document).ready(function(){QTags.addButton("AtD",AtD_l10n_r0ar.button_proofread,AtD_check)}):(edButtons[edButtons.length]=new edButton("ed_AtD","AtD","","",""),jQuery(document).ready(function(t){t("#ed_AtD").replaceWith('<input type="button" id="ed_AtD" accesskey="" class="ed_button" onclick="AtD_check(this);" value="'+AtD_l10n_r0ar.button_proofread+'" />')})); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/after-the-deadline/atd.core.min.js b/plugins/jetpack/_inc/build/after-the-deadline/atd.core.min.js
deleted file mode 100644
index 35f6826b..00000000
--- a/plugins/jetpack/_inc/build/after-the-deadline/atd.core.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/*
- * atd.core.js - A building block to create a front-end for AtD
- * Author : Raphael Mudge, Automattic
- * License : LGPL
- * Project : http://www.afterthedeadline.com/developers.slp
- * Contact : raffi@automattic.com
- */
-var EXPORTED_SYMBOLS=["AtDCore"];function AtDCore(){this.ignore_types=["Bias Language","Cliches","Complex Expression","Diacritical Marks","Double Negatives","Hidden Verbs","Jargon Language","Passive voice","Phrases to Avoid","Redundant Expression"],this.ignore_strings={},this.i18n={}}function TokenIterator(e){this.tokens=e,this.index=0,this.count=0,this.last=0}function atd_sprintf(e,t){for(var r=e,n=0;n<t.length;n++)r=r.replace(new RegExp("%"+(n+1)+"\\$","g"),t[n]);return r}AtDCore.prototype.getLang=function(e,t){return window.AtD_l10n_r0ar&&window.AtD_l10n_r0ar[e]||t},AtDCore.prototype.addI18n=function(e){window.AtD_l10n_r0ar=e},AtDCore.prototype.setIgnoreStrings=function(e){var t=this;this.map(e.split(/,\s*/g),function(e){t.ignore_strings[e]=1})},AtDCore.prototype.showTypes=function(e){var t=e.split(/,\s*/g),r={"Double Negatives":1,"Hidden Verbs":1,"Passive voice":1,"Bias Language":1,Cliches:1,"Complex Expression":1,"Diacritical Marks":1,"Jargon Language":1,"Phrases to Avoid":1,"Redundant Expression":1},n=[];this.map(t,function(e){r[e]=void 0}),this.map(this.ignore_types,function(e){void 0!==r[e]&&n.push(e)}),this.ignore_types=n},AtDCore.prototype.makeError=function(e,t,r,n){var s={};return s.type=r,s.string=e,s.tokens=t,new RegExp("\\b"+e+"\\b").test(e)?s.regexp=new RegExp("(?!"+e+"<)\\b"+e.replace(/\s+/g,n)+"\\b"):new RegExp(e+"\\b").test(e)?s.regexp=new RegExp("(?!"+e+"<)"+e.replace(/\s+/g,n)+"\\b"):new RegExp("\\b"+e).test(e)?s.regexp=new RegExp("(?!"+e+"<)\\b"+e.replace(/\s+/g,n)):s.regexp=new RegExp("(?!"+e+"<)"+e.replace(/\s+/g,n)),s.used=!1,s},AtDCore.prototype.addToErrorStructure=function(e,t,r,n){var s=this;this.map(t,function(t){var i=t.word.split(/\s+/),o=t.pre,a=i[0];void 0===e["__"+a]&&(e["__"+a]={},e["__"+a].pretoks={},e["__"+a].defaults=[]),""===o?e["__"+a].defaults.push(s.makeError(t.word,i,r,n,o)):(void 0===e["__"+a].pretoks["__"+o]&&(e["__"+a].pretoks["__"+o]=[]),e["__"+a].pretoks["__"+o].push(s.makeError(t.word,i,r,n,o)))})},AtDCore.prototype.buildErrorStructure=function(e,t,r){var n=this._getSeparators(),s={};return this.addToErrorStructure(s,e,"hiddenSpellError",n),this.addToErrorStructure(s,r,"hiddenGrammarError",n),this.addToErrorStructure(s,t,"hiddenSuggestion",n),s},AtDCore.prototype._getSeparators=function(){var e,t="",r='"s!#$%&()*+,./:;<=>?@[\\]^_{|}';for(e=0;e<r.length;e++)t+="\\"+r.charAt(e);return"(?:(?:[ "+t+"])|(?:\\-\\-))+"},AtDCore.prototype.processXML=function(e){var t={};this.map(this.ignore_types,function(e){t[e]=1}),this.suggestions=[];for(var r=e.getElementsByTagName("error"),n=[],s=[],i=[],o=0;o<r.length;o++)if(null!==r[o].getElementsByTagName("string").item(0).firstChild){var a,p=r[o].getElementsByTagName("string").item(0).firstChild.data,g=r[o].getElementsByTagName("type").item(0).firstChild.data,u=r[o].getElementsByTagName("description").item(0).firstChild.data;if(a=null!==r[o].getElementsByTagName("precontext").item(0).firstChild?r[o].getElementsByTagName("precontext").item(0).firstChild.data:"",void 0===this.ignore_strings[p]){var h={};if(h.description=u,h.suggestions=[],h.matcher=new RegExp("^"+p.replace(/\s+/,this._getSeparators())+"$"),h.context=a,h.string=p,h.type=g,this.suggestions.push(h),null!==r[o].getElementsByTagName("suggestions").item(0))for(var l=r[o].getElementsByTagName("suggestions").item(0).getElementsByTagName("option"),d=0;d<l.length;d++)h.suggestions.push(l[d].firstChild.data);if(null!==r[o].getElementsByTagName("url").item(0)){var c=r[o].getElementsByTagName("url").item(0).firstChild.data;h.moreinfo=c+"&theme=tinymce"}void 0===t[u]&&("suggestion"===g&&i.push({word:p,pre:a}),"grammar"===g&&n.push({word:p,pre:a})),"spelling"!==g&&"Homophone"!==u||s.push({word:p,pre:a}),"Cliches"===u&&(h.description="Clichés"),"Spelling"===u&&(h.description=this.getLang("menu_title_spelling","Spelling")),"Repeated Word"===u&&(h.description=this.getLang("menu_title_repeated_word","Repeated Word")),"Did you mean..."===u&&(h.description=this.getLang("menu_title_confused_word","Did you mean..."))}}var m=s.length+n.length+i.length;return{errors:m>0?this.buildErrorStructure(s,i,n):void 0,count:m,suggestions:this.suggestions}},AtDCore.prototype.findSuggestion=function(e){var t,r=e.innerHTML,n=(this.getAttrib(e,"pre")+"").replace(/[\\,!\\?\\."\s]/g,"");void 0===this.getAttrib(e,"pre")&&alert(e.innerHTML);for(var s=this.suggestions.length,i=0;i<s;i++)if((""===n||n===this.suggestions[i].context)&&this.suggestions[i].matcher.test(r)){t=this.suggestions[i];break}return t},TokenIterator.prototype.next=function(){var e=this.tokens[this.index];return this.count=this.last,this.last+=e.length+1,this.index++,""!==e&&("'"===e[0]&&(e=e.substring(1,e.length)),"'"===e[e.length-1]&&(e=e.substring(0,e.length-1))),e},TokenIterator.prototype.hasNext=function(){return this.index<this.tokens.length},TokenIterator.prototype.hasNextN=function(e){return this.index+e<this.tokens.length},TokenIterator.prototype.skip=function(e,t){this.index+=e,this.last+=t,this.index<this.tokens.length&&(this.count=this.last-this.tokens[this.index].length)},TokenIterator.prototype.getCount=function(){return this.count},TokenIterator.prototype.peek=function(e){for(var t=[],r=this.index+e,n=this.index;n<r;n++)t.push(this.tokens[n]);return t},AtDCore.prototype.markMyWords=function(e,t){var r,n,s=new RegExp(this._getSeparators()),i=[],o=0,a=this,p=this._isTinyMCE?' data-mce-bogus="1"':"",g='<span class="mceItemHidden"'+p+">&nbsp;</span>";function u(e,t,r){var n,s=e.nodeValue,i=s.search(t),o=s.match(t),p=[];return i<0||!o.length?[e]:(i>0&&p.push(document.createTextNode(s.substr(0,i))),p.push(a.create(o[0].replace(t,r))),(n=i+o[0].length)<s.length&&p.push(document.createTextNode(s.substr(n))),p)}return this._walk(e,function(e){3!==e.nodeType||a.isMarkedNode(e)||function(e){if(e)for(;e.parentNode;){if("PRE"===e.nodeName)return!0;e=e.parentNode}return!1}(e)||i.push(e)}),this.map(i,function(e){var i;if(3===e.nodeType){i=e.nodeValue;var h=e.nodeValue.split(s),l="",d=[];for(n=new TokenIterator(h);n.hasNext();){var c,m=n.next(),f=t["__"+m];if(void 0!==f&&void 0!==f.pretoks){c=f.defaults,f=f.pretoks["__"+l];var v,y,_=!1;v=i.substr(0,n.getCount()),y=i.substr(v.length,i.length);var E=function(e){void 0!==e&&!e.used&&void 0===x["__"+e.string]&&e.regexp.test(y)&&(x["__"+e.string]=1,d.push([e.regexp,'<span class="'+e.type+'" pre="'+l+'"'+p+">$&</span>"]),e.used=!0,_=!0)},x={};void 0!==f&&(l+=" ",a.map(f,E)),_||(l="",a.map(c,E))}l=m}if(d.length>0){for(var C=e,T=0;T<d.length;T++){var k=d[T][0],b=d[T][1];C=function(e){var t,n;if(3===e.nodeType){if(o++,a.isIE()&&e.nodeValue.length>0&&" "===e.nodeValue.substr(0,1))return a.create(g+e.nodeValue.substr(1,e.nodeValue.length-1).replace(k,b),!1);if(r)return a.create(e.nodeValue.replace(k,b),!1);if(t=a.create("<span />"),void 0===r&&(r="function"!=typeof t.appendChild))return a.remove(t),a.create(e.nodeValue.replace(k,b),!1);n=u(e,k,b);for(var s=0;s<n.length;s++)t.appendChild(n[s]);return e=t}for(var i=a.contents(e),p=0;p<i.length;p++){var h;if(3===i[p].nodeType&&k.test(i[p].nodeValue))return h=a.isIE()&&i[p].nodeValue.length>0&&" "===i[p].nodeValue.substr(0,1)?a.create(g+i[p].nodeValue.substr(1,i[p].nodeValue.length-1).replace(k,b),!0):a.create(i[p].nodeValue.replace(k,b),!0),a.replaceWith(i[p],h),a.removeParent(h),o++,e}return e}(C)}a.replaceWith(e,C)}}}),o},AtDCore.prototype._walk=function(e,t){var r;for(r=0;r<e.length;r++)t.call(t,e[r]),this._walk(this.contents(e[r]),t)},AtDCore.prototype.removeWords=function(e,t){var r=0,n=this;return this.map(this.findSpans(e).reverse(),function(e){if(e&&(n.isMarkedNode(e)||n.hasClass(e,"mceItemHidden")||n.isEmptySpan(e)))if("&nbsp;"===e.innerHTML){var s=document.createTextNode(" ");n.replaceWith(e,s)}else t&&e.innerHTML!==t||(n.removeParent(e),r++)}),r},AtDCore.prototype.isEmptySpan=function(e){return""===this.getAttrib(e,"class")&&""===this.getAttrib(e,"style")&&""===this.getAttrib(e,"id")&&!this.hasClass(e,"Apple-style-span")&&""===this.getAttrib(e,"mce_name")},AtDCore.prototype.isMarkedNode=function(e){return this.hasClass(e,"hiddenGrammarError")||this.hasClass(e,"hiddenSpellError")||this.hasClass(e,"hiddenSuggestion")},AtDCore.prototype.applySuggestion=function(e,t){if("(omit)"===t)this.remove(e);else{var r=this.create(t);this.replaceWith(e,r),this.removeParent(r)}},AtDCore.prototype.hasErrorMessage=function(e){return void 0!==e&&null!==e.getElementsByTagName("message").item(0)},AtDCore.prototype.getErrorMessage=function(e){return e.getElementsByTagName("message").item(0)},AtDCore.prototype.isIE=function(){return"Microsoft Internet Explorer"===navigator.appName}; \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/after-the-deadline/jquery.atd.min.js b/plugins/jetpack/_inc/build/after-the-deadline/jquery.atd.min.js
deleted file mode 100644
index eb87f0f4..00000000
--- a/plugins/jetpack/_inc/build/after-the-deadline/jquery.atd.min.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/*
- * jquery.atd.js - jQuery powered writing check with After the Deadline
- * Author : Raphael Mudge, Automattic Inc.
- * License : LGPL or MIT License (take your pick)
- * Project : http://www.afterthedeadline.com/development.slp
- * Contact : raffi@automattic.com
- *
- * Derived from:
- *
- * jquery.spellchecker.js - a simple jQuery Spell Checker
- * Copyright (c) 2008 Richard Willis
- * MIT license : http://www.opensource.org/licenses/mit-license.php
- * Project : http://jquery-spellchecker.googlecode.com
- * Contact : willis.rh@gmail.com
- */
-var AtD={rpc:"",rpc_css:"http://www.polishmywriting.com/atd-jquery/server/proxycss.php?data=",rpc_css_lang:"en",api_key:"",i18n:{},listener:{},getLang:function(e,t){return window.AtD_l10n_r0ar&&window.AtD_l10n_r0ar[e]||t},addI18n:function(e){window.AtD_l10n_r0ar=e},setIgnoreStrings:function(e){AtD.core.setIgnoreStrings(e)},showTypes:function(e){AtD.core.showTypes(e)},checkCrossAJAX:function(e,t){"undefined"!=typeof AtD_proofread_click_count&&AtD_proofread_click_count++,AtD.callback_f=t,AtD.remove(e);var r=jQuery("#"+e),a=jQuery.trim(r.html());a=a.replace(/\&lt;/g,"<").replace(/\&gt;/g,">").replace(/\&amp;/g,"&"),(a=encodeURIComponent(a.replace(/\%/g,"%25"))).length>2e3&&"Microsoft Internet Explorer"===navigator.appName||a.length>7800?void 0!==t&&void 0!==t.error&&t.error("Maximum text length for this browser exceeded"):CSSHttpRequest.get(AtD.rpc_css+a+"&lang="+AtD.rpc_css_lang+"&nocache="+(new Date).getTime(),function(t){var r;if("Microsoft Internet Explorer"===navigator.appName?((r=new ActiveXObject("Microsoft.XMLDOM")).async=!1,r.loadXML(t)):r=(new DOMParser).parseFromString(t,"text/xml"),AtD.core.hasErrorMessage(r))void 0!==AtD.callback_f&&void 0!==AtD.callback_f.error&&AtD.callback_f.error(AtD.core.getErrorMessage(r));else{AtD.container=e;var a=Number(AtD.processXML(e,r));void 0!==AtD.callback_f&&void 0!==AtD.callback_f.ready&&AtD.callback_f.ready(a),0===a&&void 0!==AtD.callback_f&&void 0!==AtD.callback_f.success&&AtD.callback_f.success(a),AtD.counter=a,AtD.count=a}})},check:function(e,t){"undefined"!=typeof AtD_proofread_click_count&&AtD_proofread_click_count++,AtD.callback_f=t,AtD.remove(e);var r=jQuery("#"+e),a=jQuery.trim(r.html());a=a.replace(/\&lt;/g,"<").replace(/\&gt;/g,">").replace(/\&amp;/g,"&"),a=encodeURIComponent(a),jQuery.ajax({type:"POST",url:AtD.rpc+"/checkDocument",data:"key="+AtD.api_key+"&data="+a,format:"raw",dataType:jQuery.browser.msie?"text":"xml",error:function(e,t,r){void 0!==AtD.callback_f&&void 0!==AtD.callback_f.error&&AtD.callback_f.error(t+": "+r)},success:function(t){var r;if("string"==typeof t?((r=new ActiveXObject("Microsoft.XMLDOM")).async=!1,r.loadXML(t)):r=t,AtD.core.hasErrorMessage(r))void 0!==AtD.callback_f&&void 0!==AtD.callback_f.error&&AtD.callback_f.error(AtD.core.getErrorMessage(r));else{AtD.container=e;var a=Number(AtD.processXML(e,r));void 0!==AtD.callback_f&&void 0!==AtD.callback_f.ready&&AtD.callback_f.ready(a),0===a&&void 0!==AtD.callback_f&&void 0!==AtD.callback_f.success&&AtD.callback_f.success(a),AtD.counter=a,AtD.count=a}}})},remove:function(e){AtD._removeWords(e,null)},clickListener:function(e){AtD.core.isMarkedNode(e.target)&&AtD.suggest(e.target)},processXML:function(e,t){var r=AtD.core.processXML(t);return r.count>0&&(r.count=AtD.core.markMyWords(jQuery("#"+e).contents(),r.errors)),jQuery("#"+e).unbind("click",AtD.clickListener),jQuery("#"+e).click(AtD.clickListener),r.count},useSuggestion:function(e){this.core.applySuggestion(AtD.errorElement,e),AtD.counter--,0===AtD.counter&&void 0!==AtD.callback_f&&void 0!==AtD.callback_f.success&&AtD.callback_f.success(AtD.count)},editSelection:function(){var e=AtD.errorElement.parent();void 0!==AtD.callback_f&&void 0!==AtD.callback_f.editSelection&&AtD.callback_f.editSelection(AtD.errorElement),AtD.errorElement.parent()!==e&&(AtD.counter--,0===AtD.counter&&void 0!==AtD.callback_f&&void 0!==AtD.callback_f.success&&AtD.callback_f.success(AtD.count))},ignoreSuggestion:function(){AtD.core.removeParent(AtD.errorElement),AtD.counter--,0===AtD.counter&&void 0!==AtD.callback_f&&void 0!==AtD.callback_f.success&&AtD.callback_f.success(AtD.count)},ignoreAll:function(e){var t=AtD.errorElement.text(),r=AtD._removeWords(e,t);AtD.counter-=r,0===AtD.counter&&void 0!==AtD.callback_f&&void 0!==AtD.callback_f.success&&AtD.callback_f.success(AtD.count),void 0!==AtD.callback_f&&void 0!==AtD.callback_f.ignore&&(AtD.callback_f.ignore(t),AtD.core.setIgnoreStrings(t))},explainError:function(){void 0!==AtD.callback_f&&void 0!==AtD.callback_f.explain&&AtD.callback_f.explain(AtD.explainURL)},suggest:function(e){var t;0===jQuery("#suggestmenu").length?(t=jQuery('<div id="suggestmenu"></div>')).prependTo("body"):(t=jQuery("#suggestmenu")).hide();var r,a=AtD.core.findSuggestion(e);if(AtD.errorElement=jQuery(e),t.empty(),void 0===a)t.append("<strong>"+AtD.getLang("menu_title_no_suggestions","No suggestions")+"</strong>");else if(0===a.suggestions.length)t.append("<strong>"+a.description+"</strong>");else{t.append("<strong>"+a.description+"</strong>");for(var c=0;c<a.suggestions.length;c++)r=a.suggestions[c],t.append("<a href=\"javascript:AtD.useSuggestion('"+r.replace(/'/,"\\'")+"')\">"+r+"</a>")}void 0!==AtD.callback_f&&void 0!==AtD.callback_f.explain&&void 0!==a.moreinfo&&(t.append('<a href="javascript:AtD.explainError()" class="spell_sep_top">'+AtD.getLang("menu_option_explain","Explain...")+"</a>"),AtD.explainURL=a.moreinfo),t.append('<a href="javascript:AtD.ignoreSuggestion()" class="spell_sep_top">'+AtD.getLang("menu_option_ignore_once","Ignore suggestion")+"</a>"),void 0!==AtD.callback_f&&void 0!==AtD.callback_f.editSelection?(void 0!==AtD.callback_f&&void 0!==AtD.callback_f.ignore?t.append("<a href=\"javascript:AtD.ignoreAll('"+AtD.container+"')\">"+AtD.getLang("menu_option_ignore_always","Ignore always")+"</a>"):t.append("<a href=\"javascript:AtD.ignoreAll('"+AtD.container+"')\">"+AtD.getLang("menu_option_ignore_all","Ignore all")+"</a>"),t.append("<a href=\"javascript:AtD.editSelection('"+AtD.container+'\')" class="spell_sep_bottom spell_sep_top">'+AtD.getLang("menu_option_edit_selection","Edit Selection...")+"</a>")):void 0!==AtD.callback_f&&void 0!==AtD.callback_f.ignore?t.append("<a href=\"javascript:AtD.ignoreAll('"+AtD.container+'\')" class="spell_sep_bottom">'+AtD.getLang("menu_option_ignore_always","Ignore always")+"</a>"):t.append("<a href=\"javascript:AtD.ignoreAll('"+AtD.container+'\')" class="spell_sep_bottom">'+AtD.getLang("menu_option_ignore_all","Ignore all")+"</a>");var n=jQuery(e).offset(),o=jQuery(e).width();o>100&&(o=50),jQuery(t).css({left:n.left+o+"px",top:n.top+"px"}),jQuery(t).fadeIn(200),AtD.suggestShow=!0,setTimeout(function(){jQuery("body").bind("click",function(){AtD.suggestShow||jQuery("#suggestmenu").fadeOut(200)})},1),setTimeout(function(){AtD.suggestShow=!1},2)},_removeWords:function(e,t){return this.core.removeWords(jQuery("#"+e),t)},initCoreModule:function(){var e=new AtDCore;return e.hasClass=function(e,t){return jQuery(e).hasClass(t)},e.map=jQuery.map,e.contents=function(e){return jQuery(e).contents()},e.replaceWith=function(e,t){return jQuery(e).replaceWith(t)},e.findSpans=function(e){return jQuery.makeArray(e.find("span"))},e.create=function(t){var r,a=(t=(t=t.replace(/\&/g,"&amp;")).replace(/</g,"&lt;").replace(/\>/g,"&gt;")).match(/\&lt;span class="hidden\w+?" pre="[^"]*"\&gt;.*?\&lt;\/span\&gt;/g);if(a)for(r=0;r<a.length;r++)t=t.replace(a[r],a[r].replace(/\&lt;/gi,"<").replace(/\&gt;/gi,">"));if(e.isIE()&&(a=t.match(/\&lt;span class="mceItemHidden"\&gt;\&amp;nbsp;\&lt;\/span&gt;/g,t)))for(r=0;r<a.length;r++)t=t.replace(a[r],a[r].replace(/\&lt;/gi,"<").replace(/\&gt;/gi,">").replace(/\&amp;/gi,"&"));var c=jQuery('<span class="mceItemHidden"></span>');return c.html(t),c},e.remove=function(e){return jQuery(e).remove()},e.removeParent=function(e){return jQuery(e).unwrap?jQuery(e).contents().unwrap():jQuery(e).replaceWith(jQuery(e).html())},e.getAttrib=function(e,t){return jQuery(e).attr(t)},e}};AtD.core=AtD.initCoreModule(); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/after-the-deadline/tinymce/editor_plugin.min.js b/plugins/jetpack/_inc/build/after-the-deadline/tinymce/editor_plugin.min.js
deleted file mode 100644
index a1b24765..00000000
--- a/plugins/jetpack/_inc/build/after-the-deadline/tinymce/editor_plugin.min.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/*
- * TinyMCE Writing Improvement Tool Plugin
- * Author: Raphael Mudge (raffi@automattic.com)
- *
- * http://www.afterthedeadline.com
- *
- * Distributed under the LGPL
- *
- * Derived from:
- * $Id: editor_plugin_src.js 425 2007-11-21 15:17:39Z spocke $
- *
- * @author Moxiecode
- * @copyright Copyright (C) 2004-2008, Moxiecode Systems AB, All rights reserved.
- *
- * Moxiecode Spell Checker plugin released under the LGPL with TinyMCE
- */
-!function(){var e,t=tinymce.each,n=tinymce.DOM;function o(e,t){return window.AtD_l10n_r0ar&&window.AtD_l10n_r0ar[e]||t}tinymce.create("tinymce.plugins.AfterTheDeadlinePlugin",{getInfo:function(){return{longname:"After The Deadline",author:"Raphael Mudge",authorurl:"http://blog.afterthedeadline.com",infourl:"http://www.afterthedeadline.com",version:tinymce.majorVersion+"."+tinymce.minorVersion}},initAtDCore:function(e){var n=new AtDCore;return n.map=t,n.getAttrib=function(t,n){return e.dom.getAttrib(t,n)},n.findSpans=function(t){return t?e.dom.select("span",t):e.dom.select("span")},n.hasClass=function(t,n){return e.dom.hasClass(t,n)},n.contents=function(e){return e.childNodes},n.replaceWith=function(t,n){return e.dom.replace(n,t)},n.create=function(t){return e.dom.create("span",{class:"mceItemHidden"},t)},n.removeParent=function(t){return e.dom.remove(t,1),t},n.remove=function(t){e.dom.remove(t)},n.setIgnoreStrings(e.getParam("atd_ignore_strings",[]).join(",")),n.showTypes(e.getParam("atd_show_types","")),n},init:function(n,r){if("undefined"!=typeof AtDCore){var i=this,s=n;this.url=r,this.editor=n,e=n.core=this.initAtDCore(s,i);var a=tinymce.util.Cookie.getHash("atd_ignore");a||(a={}),s.addCommand("mceWritingImprovementTool",function(t){"undefined"!=typeof AtD_proofread_click_count&&AtD_proofread_click_count++,i.editor.setProgressState(1),i._removeWords(),i.sendRequest("checkDocument",n.getContent({format:"raw"}),function(r,s){if(i.editor.setProgressState(0),200===s.status&&"html"!==s.responseText.substr(1,4)&&s.responseXML)if(null==s.responseXML.getElementsByTagName("message").item(0)){var a=e.processXML(s.responseXML),d=0;a.count>0&&(d=i.markMyWords(a.errors),n.suggestions=a.suggestions),0!==d||t&&void 0!==t?t&&t(d):n.windowManager.alert(o("message_no_errors_found","No writing errors were found."))}else n.windowManager.alert(s.responseXML.getElementsByTagName("message").item(0).firstChild.data,t?function(){t(0)}:function(){});else n.windowManager.alert(o("message_server_error","There was a problem communicating with the Proofreading service. Try again in one minute."),t?function(){t(0)}:function(){})})}),s.onInit.add(function(){!1!==s.settings.content_css&&s.dom.loadCSS(s.getParam("atd_css_url",r+"/css/content.css"))}),s.onClick.add(i._showMenu,i),s.onContextMenu.add(i._showMenu,i),s.onPreProcess.add(function(e,n){var o=e.dom;t(o.select("span",n.node).reverse(),function(e){!e||!(o.hasClass(e,"hiddenGrammarError")||o.hasClass(e,"hiddenSpellError")||o.hasClass(e,"hiddenSuggestion")||o.hasClass(e,"mceItemHidden"))&&(o.getAttrib(e,"class")||o.getAttrib(e,"style")||o.getAttrib(e,"id")||o.hasClass(e,"Apple-style-span")||o.getAttrib(e,"mce_name"))||o.remove(e,1)})}),s.onBeforeExecCommand.add(function(e,t){"mceCodeEditor"===t?i._removeWords():"mceFullScreen"===t&&i._done()}),n.addButton("AtD",{title:o("button_proofread_tooltip","Proofread Writing"),image:n.getParam("atd_button_url",r+"/atdbuttontr.gif"),cmd:"mceWritingImprovementTool"})}},_removeWords:function(e){var t=this.editor,n=t.dom,o=t.selection,r=o.getBookmark();t.core.removeWords(void 0,e),n.setHTML(n.getRoot(),n.getRoot().innerHTML),o.moveToBookmark(r)},markMyWords:function(e){var t=this.editor,n=t.selection,o=n.getBookmark(),r=t.core.markMyWords(t.core.contents(this.editor.getBody()),e);return n.moveToBookmark(o),r},_showMenu:function(e,t){var r=this;e=r.editor;var i,s,a=r._menu,d=e.dom,c=d.getViewPort(e.getWin());if(a||(i=n.getPos(e.getContentAreaContainer()),a=e.controlManager.createDropMenu("spellcheckermenu",{offset_x:i.x,offset_y:i.y,class:"mceNoIcons"}),r._menu=a),e.core.isMarkedNode(t.target)){a.removeAll();var l=e.core.findSuggestion(t.target);if(l)if(0===l.suggestions.length)a.add({title:l.description,class:"mceMenuItemTitle"}).setDisabled(1);else{a.add({title:l.description,class:"mceMenuItemTitle"}).setDisabled(1);for(var u=0;u<l.suggestions.length;u++)!function(n){a.add({title:n,onclick:function(){e.core.applySuggestion(t.target,n),r._checkDone()}})}(l.suggestions[u]);a.addSeparator()}else a.add({title:o("menu_title_no_suggestions","No suggestions"),class:"mceMenuItemTitle"}).setDisabled(1);return l&&l.moreinfo&&(s=l.moreinfo,a.add({title:o("menu_option_explain","Explain..."),onclick:function(){e.windowManager.open({url:s,width:480,height:380,inline:!0},{theme_url:this.url})}}),a.addSeparator()),a.add({title:o("menu_option_ignore_once","Ignore suggestion"),onclick:function(){d.remove(t.target,1),r._checkDone()}}),"true"===String(this.editor.getParam("atd_ignore_enable","false"))?a.add({title:o("menu_option_ignore_always","Ignore always"),onclick:function(){var e=r.editor.getParam("atd_ignore_rpc_url","{backend}");if("{backend}"===e){var n=tinymce.util.Cookie.getHash("atd_ignore");n||(n={}),n[t.target.innerHTML]=1,tinymce.util.Cookie.setHash("atd_ignore",n,new Date((new Date).getTime()+15768e7))}else{var o=r.editor.getParam("atd_rpc_id","12345678");tinymce.util.XHR.send({url:e+encodeURI(t.target.innerHTML).replace(/&/g,"%26")+"&key="+o,content_type:"text/xml",async:!0,type:"GET",success:function(){},error:function(e,t,n){alert("Ignore preference save failed\n"+e+"\n"+t.status+"\nAt: "+n.url)}}),r.editor.core.setIgnoreStrings(t.target.innerHTML)}r._removeWords(t.target.innerHTML),r._checkDone()}}):a.add({title:o("menu_option_ignore_all","Ignore all"),onclick:function(){r._removeWords(t.target.innerHTML),r._checkDone()}}),e.selection.select(t.target),i=d.getPos(t.target),a.showMenu(i.x,i.y+t.target.offsetHeight-c.y),tinymce.dom.Event.cancel(t)}a.hideMenu()},_checkDone:function(){var e,n=this.editor.dom;t(n.select("span"),function(t){if(t&&n.hasClass(t,"mceItemHidden"))return e=!0,!1}),e||this._done()},_done:function(){this._removeWords(),this._menu&&this._menu.hideMenu(),this.editor.nodeChanged()},sendRequest:function(e,t,n){var o=this.editor.getParam("atd_rpc_id","12345678"),r=this.editor.getParam("atd_rpc_url","{backend}"),i=this;if("{backend}"===r||"12345678"===o)return this.editor.setProgressState(0),void alert("Please specify: atd_rpc_url and atd_rpc_id");tinymce.util.XHR.send({url:r+"/"+e,content_type:"text/xml",type:"POST",data:"data="+encodeURI(t).replace(/&/g,"%26")+"&key="+o,async:!0,success:n,error:function(e,t,n){i.editor.setProgressState(0),alert(e+"\n"+t.status+"\nAt: "+n.url)}})}}),tinymce.PluginManager.add("AtD",tinymce.plugins.AfterTheDeadlinePlugin)}(); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/after-the-deadline/tinymce/plugin.min.js b/plugins/jetpack/_inc/build/after-the-deadline/tinymce/plugin.min.js
deleted file mode 100644
index 10e81fa9..00000000
--- a/plugins/jetpack/_inc/build/after-the-deadline/tinymce/plugin.min.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* global tinymce */
-/*
- * TinyMCE Writing Improvement Tool Plugin
- * Author: Raphael Mudge (raffi@automattic.com)
- *
- * Updated for TinyMCE 4.0
- *
- * http://www.afterthedeadline.com
- *
- * Distributed under the LGPL
- *
- * Derived from:
- * $Id: editor_plugin_src.js 425 2007-11-21 15:17:39Z spocke $
- *
- * @author Moxiecode
- * @copyright Copyright (C) 2004-2008, Moxiecode Systems AB, All rights reserved.
- *
- * Moxiecode Spell Checker plugin released under the LGPL with TinyMCE
- */
-tinymce.PluginManager.add("AtD",function(e){var t,n,o,r,i=tinymce.each;function a(e,t){return window.AtD_l10n_r0ar&&window.AtD_l10n_r0ar[e]||t}function s(e){return e.className&&/\bhidden(GrammarError|SpellError|Suggestion)\b/.test(e.className)}function c(){e.dom.select("span.hiddenSpellError, span.hiddenGrammarError, span.hiddenSuggestion").length||(t&&t.hide(),d())}function l(t,n,o){var r=e.dom;o?i(e.dom.select("span.hiddenSpellError, span.hiddenGrammarError, span.hiddenSuggestion"),function(e){(e.innerText||e.textContent)===n&&r.remove(e,!0)}):r.remove(t,!0),c()}function d(){for(var t,o=e.dom,r=new RegExp("mceItemHidden|hidden(((Grammar|Spell)Error)|Suggestion)"),i=o.select("span"),a=i.length;a--;)(t=i[a]).className&&r.test(t.className)&&o.remove(t,!0);e.setContent(e.getContent({format:"raw"}),{format:"raw"}),n=!1,e.nodeChanged(),e.fire("SpellcheckEnd")}function u(n){var r,d,u,m=[],g=n.innerText||n.textContent,p=o.findSuggestion(n);p?(m.push({text:p.description,classes:"atd-menu-title",disabled:!0}),p.suggestions.length&&(m.push({text:"-"}),i(p.suggestions,function(e){m.push({text:e,onclick:function(){o.applySuggestion(n,e),c()}})}))):m.push({text:a("menu_title_no_suggestions","No suggestions"),classes:"atd-menu-title",disabled:!0}),p&&p.moreinfo&&(m.push({text:"-"}),m.push({text:a("menu_option_explain","Explain..."),onclick:function(){e.windowManager.open({title:a("menu_option_explain","Explain..."),url:p.moreinfo,width:480,height:380,inline:!0})}})),m.push.apply(m,[{text:"-"},{text:a("menu_option_ignore_once","Ignore suggestion"),onclick:function(){l(n,g)}}]),e.getParam("atd_ignore_enable")?m.push({text:a("menu_option_ignore_always","Ignore always"),onclick:function(){!function(t){var n=e.getParam("atd_ignore_rpc_url");n&&"{backend}"!==n&&tinymce.util.XHR.send({url:n+encodeURIComponent(t)+"&key="+e.getParam("atd_rpc_id","12345678"),content_type:"text/xml",type:"GET",error:function(){}}),o.setIgnoreStrings(t)}(g),l(n,g,!0)}}):m.push({text:a("menu_option_ignore_all","Ignore all"),onclick:function(){l(n,g,!0)}}),(t=new tinymce.ui.Menu({items:m,context:"contextmenu",onautohide:function(e){s(e.target)&&e.preventDefault()},onhide:function(){t.remove(),t=null}})).renderTo(document.body),r=tinymce.DOM.getPos(e.getContentAreaContainer()),u=e.dom.getPos(n),"BODY"===(d=e.dom.getRoot()).nodeName?(u.x-=d.ownerDocument.documentElement.scrollLeft||d.scrollLeft,u.y-=d.ownerDocument.documentElement.scrollTop||d.scrollTop):(u.x-=d.scrollLeft,u.y-=d.scrollTop),r.x+=u.x,r.y+=u.y,t.moveTo(r.x,r.y+n.offsetHeight)}e.on("init",function(){void 0!==window.AtDCore&&(r=e.dom,(o=new window.AtDCore).map=i,o._isTinyMCE=!0,o.getAttrib=function(e,t){return r.getAttrib(e,t)},o.findSpans=function(e){return void 0===e?r.select("span"):r.select("span",e)},o.hasClass=function(e,t){return r.hasClass(e,t)},o.contents=function(e){return e.childNodes},o.replaceWith=function(e,t){return r.replace(t,e)},o.create=function(e){return r.create("span",{class:"mceItemHidden","data-mce-bogus":1},e)},o.removeParent=function(e){return r.remove(e,!0),e},o.remove=function(e){r.remove(e)},o.setIgnoreStrings(e.getParam("atd_ignore_strings",[]).join(",")),o.showTypes(e.getParam("atd_show_types","")),e.addCommand("mceWritingImprovementTool",function(t){var r,i,s,c,l,u,m=0;("function"!=typeof t&&(t=function(){}),void 0!==window.AtD_proofread_click_count&&window.AtD_proofread_click_count++,n)?d():(i="checkDocument",s=e.getContent({format:"raw"}),c=function(i,s){var c;e.setProgressState(),200===s.status&&"html"!==s.responseText.substr(1,4)&&s.responseXML?null===s.responseXML.getElementsByTagName("message").item(0)?((r=o.processXML(s.responseXML)).count>0&&(c=r.errors,m=o.markMyWords(o.contents(e.getBody()),c)),m?(n=!0,e.fire("SpellcheckStart")):e.windowManager.alert(a("message_no_errors_found","No writing errors were found.")),t(m)):e.windowManager.alert(s.responseXML.getElementsByTagName("message").item(0).firstChild.data,t(0)):e.windowManager.alert(a("message_server_error","There was a problem communicating with the Proofreading service. Try again in one minute."),t(0))},l=e.getParam("atd_rpc_id","12345678"),"{backend}"!==(u=e.getParam("atd_rpc_url","{backend}"))&&"12345678"!==l?(e.setProgressState(!0),tinymce.util.XHR.send({url:u+"/"+i,content_type:"text/xml",type:"POST",data:"data="+encodeURI(s).replace(/&/g,"%26")+"&key="+l,success:c,error:function(t,n,o){e.setProgressState(),window.alert(t+"\n"+n.status+"\nAt: "+o.url)}})):window.alert("Please specify: atd_rpc_url and atd_rpc_id"))}),!1!==e.settings.content_css&&r.addStyle(".hiddenSpellError{border-bottom:2px solid red;cursor:default;}.hiddenGrammarError{border-bottom:2px solid green;cursor:default;}.hiddenSuggestion{border-bottom:2px solid blue;cursor:default;}"),tinymce.DOM.addStyle("div.mce-floatpanel{z-index:150100 !important;}"),e.on("click",function(t){s(t.target)&&(t.preventDefault(),e.selection.select(t.target),u(t.target))}))}),e.addMenuItem("spellchecker",{text:a("button_proofread_tooltip","Proofread Writing"),context:"tools",cmd:"mceWritingImprovementTool",onPostRender:function(){var t=this;e.on("SpellcheckStart SpellcheckEnd",function(){t.active(n)})}}),e.addButton("spellchecker",{tooltip:a("button_proofread_tooltip","Proofread Writing"),cmd:"mceWritingImprovementTool",onPostRender:function(){var t=this;e.on("SpellcheckStart SpellcheckEnd",function(){t.active(n)})}}),e.on("remove",function(){t&&(t.remove(),t=null)})}); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/carousel/jetpack-carousel.min.js b/plugins/jetpack/_inc/build/carousel/jetpack-carousel.min.js
deleted file mode 100644
index d022480f..00000000
--- a/plugins/jetpack/_inc/build/carousel/jetpack-carousel.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* jshint sub: true, onevar: false, multistr: true, devel: true, smarttabs: true */
-/* global jetpackCarouselStrings, DocumentTouch */
-jQuery(document).ready(function(e){var t,a,i,o,s,r,n,l,c,d,p,u,m,h,f,g,j,v,w,_=110,x=e("body").css("overflow"),b=e("html").css("overflow"),y="";window.innerWidth<=760&&(_=Math.round(window.innerWidth/760*110))<40&&("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)&&(_=0),void 0===Date.now&&(Date.now=function(){return(new Date).getTime()});var S=function(e){switch(e.which){case 38:e.preventDefault(),o.scrollTop(o.scrollTop()-100);break;case 40:e.preventDefault(),o.scrollTop(o.scrollTop()+100);break;case 39:e.preventDefault(),i.jp_carousel("next");break;case 37:case 8:e.preventDefault(),i.jp_carousel("previous");break;case 27:e.preventDefault(),o.jp_carousel("close")}},C=function(){clearTimeout(d),d=setTimeout(function(){i.jp_carousel("slides").jp_carousel("fitSlide",!0),i.jp_carousel("updateSlidePositions",!0),i.jp_carousel("fitMeta",!0)},200)},k=function(){e("a img[data-attachment-id]").each(function(){var t=e(this).parent();if(!t.parent(".gallery-icon").length&&void 0!==e(t).attr("href")){var a=!1;e(t).attr("href").split("?")[0]===e(this).attr("data-orig-file").split("?")[0]&&1===Number(jetpackCarouselStrings.single_image_gallery_media_file)&&(a=!0),e(t).attr("href")===e(this).attr("data-permalink")&&(a=!0),a&&(e(t).addClass("single-image-gallery"),e(t).data("carousel-extra",{blog_id:Number(jetpackCarouselStrings.blog_id)}))}})},I={testForData:function(t){return!(!(t=e(t)).length||!t.data("carousel-extra"))},testIfOpened:function(){return!(void 0===i||void 0===i.opened||!i.opened)},openOrSelectSlide:function(t){e(this).jp_carousel("testIfOpened")?i.jp_carousel("selectSlideAtIndex",t):e(this).jp_carousel("open",{start_index:t})},open:function(d){var m={items_selector:".gallery-item [data-attachment-id], .tiled-gallery-item [data-attachment-id], img[data-attachment-id]",start_index:0},h=e(this).data("carousel-extra");if(h&&(function(){if(!t){t=e("<div></div>").addClass("jp-carousel-overlay").css({position:"fixed",top:0,right:0,bottom:0,left:0});var d='<a class="jp-carousel-commentlink" href="#">'+jetpackCarouselStrings.comment+"</a>";Number(jetpackCarouselStrings.is_logged_in),d=e('<div class="jp-carousel-buttons">'+d+"</div>"),c=e('<h2 itemprop="caption description"></h2>'),p=e('<div class="jp-carousel-photo-info"></div>').append(c),(f=e("<div></div>").addClass("jp-carousel-image-meta").css({float:"right","margin-top":"20px",width:"250px"})).append(d).append("<ul class='jp-carousel-image-exif' style='display:none;'></ul>").append("<a class='jp-carousel-image-download' style='display:none;'></a>").append("<div class='jp-carousel-image-map' style='display:none;'></div>"),g=e("<div></div>").addClass("jp-carousel-titleanddesc").css({width:"100%","margin-top":f.css("margin-top")});var m='<div id="jp-carousel-comment-form-container">';jetpackCarouselStrings.local_comments_commenting_as&&jetpackCarouselStrings.local_comments_commenting_as.length&&(1!==Number(jetpackCarouselStrings.is_logged_in)&&1===Number(jetpackCarouselStrings.comment_registration)?m+='<div id="jp-carousel-comment-form-commenting-as">'+jetpackCarouselStrings.local_comments_commenting_as+"</div>":(m+='<form id="jp-carousel-comment-form">',m+='<textarea name="comment" class="jp-carousel-comment-form-field jp-carousel-comment-form-textarea" id="jp-carousel-comment-form-comment-field" placeholder="'+jetpackCarouselStrings.write_comment+'"></textarea>',m+='<div id="jp-carousel-comment-form-submit-and-info-wrapper">',m+='<div id="jp-carousel-comment-form-commenting-as">'+jetpackCarouselStrings.local_comments_commenting_as+"</div>",m+='<input type="submit" name="submit" class="jp-carousel-comment-form-button" id="jp-carousel-comment-form-button-submit" value="'+jetpackCarouselStrings.post_comment+'" />',m+='<span id="jp-carousel-comment-form-spinner">&nbsp;</span>',m+='<div id="jp-carousel-comment-post-results"></div>',m+="</div>",m+="</form>")),j=e(m+="</div>").css({width:"100%","margin-top":"20px",color:"#999"}),a=e("<div></div>").addClass("jp-carousel-comments").css({width:"100%",bottom:"10px","margin-top":"20px"});var h=e('<div id="jp-carousel-comments-loading"><span>'+jetpackCarouselStrings.loading_comments+"</span></div>").css({width:"100%",bottom:"10px","margin-top":"20px"}),w=e(window).width()-2*_-(f.width()+40);w+="px",v=e("<div></div>").addClass("jp-carousel-left-column-wrapper").css({width:Math.floor(w)}).append(g).append(j).append(a).append(h);var x=e("<div></div>").addClass("jp-carousel-fadeaway");n=e("<div></div>").addClass("jp-carousel-info").css({top:Math.floor(e(window).height()/100*85),left:_,right:_}).append(p).append(f),window.innerWidth<=760?(p.remove().insertAfter(g),n.prepend(v)):n.append(v);var b=e(window).height()-parseInt(n.css("top"),10)+"px";s=e("<div><span></span></div>").addClass("jp-carousel-next-button").css({right:"15px"}).hide(),r=e("<div><span></span></div>").addClass("jp-carousel-previous-button").css({left:0}).hide(),s.add(r).css({position:"fixed",top:"40px",bottom:b,width:_}),i=e("<div></div>").addClass("jp-carousel").css({position:"absolute",top:0,bottom:b,left:0,right:0}),u=e('<div class="jp-carousel-close-hint"><span>&times;</span></div>').css({position:"fixed"}),o=e("<div></div>").addClass("jp-carousel-wrap").addClass("jp-carousel-transitions"),"white"===jetpackCarouselStrings.background_color&&o.addClass("jp-carousel-light"),o.attr("itemscope",""),o.attr("itemtype","https://schema.org/ImageGallery"),o.css({position:"fixed",top:0,right:0,bottom:0,left:0,"z-index":2147483647,"overflow-x":"hidden","overflow-y":"auto",direction:"ltr"}).hide().append(t).append(i).append(x).append(n).append(s).append(r).append(u).appendTo(e("body")).click(function(t){var a=e(t.target),s=a.parents("div.jp-carousel-wrap"),r=s.data("carousel-extra"),l=s.find("div.selected").data("attachment-id");if(r=r||[],a.is(i)||a.parents().add(a).is(u))o.jp_carousel("close");else if(a.hasClass("jp-carousel-commentlink"))t.preventDefault(),t.stopPropagation(),e(window).unbind("keydown",S),o.animate({scrollTop:parseInt(n.position().top,10)},"fast"),e("#jp-carousel-comment-form-submit-and-info-wrapper").slideDown("fast"),e("#jp-carousel-comment-form-comment-field").focus();else if(a.hasClass("jp-carousel-comment-login")){var c=jetpackCarouselStrings.login_url+"%23jp-carousel-"+l;window.location.href=c}else if(a.parents("#jp-carousel-comment-form-container").length){var d=e("#jp-carousel-comment-form-comment-field").blur(function(){e(window).bind("keydown",S)}).focus(function(){e(window).unbind("keydown",S)}),p=e("#jp-carousel-comment-form-email-field").blur(function(){e(window).bind("keydown",S)}).focus(function(){e(window).unbind("keydown",S)}),m=e("#jp-carousel-comment-form-author-field").blur(function(){e(window).bind("keydown",S)}).focus(function(){e(window).unbind("keydown",S)}),h=e("#jp-carousel-comment-form-url-field").blur(function(){e(window).bind("keydown",S)}).focus(function(){e(window).unbind("keydown",S)});if(d&&d.attr("id")===a.attr("id"))e(window).unbind("keydown",S),e("#jp-carousel-comment-form-submit-and-info-wrapper").slideDown("fast");else if(a.is('input[type="submit"]')){t.preventDefault(),t.stopPropagation(),e("#jp-carousel-comment-form-spinner").spin("small","white");var f={action:"post_attachment_comment",nonce:jetpackCarouselStrings.nonce,blog_id:r.blog_id,id:l,comment:d.val()};if(!f.comment.length)return void i.jp_carousel("postCommentError",{field:"jp-carousel-comment-form-comment-field",error:jetpackCarouselStrings.no_comment_text});if(1!==Number(jetpackCarouselStrings.is_logged_in)&&(f.email=p.val(),f.author=m.val(),f.url=h.val(),1===Number(jetpackCarouselStrings.require_name_email))){if(!f.email.length||!f.email.match("@"))return void i.jp_carousel("postCommentError",{field:"jp-carousel-comment-form-email-field",error:jetpackCarouselStrings.no_comment_email});if(!f.author.length)return void i.jp_carousel("postCommentError",{field:"jp-carousel-comment-form-author-field",error:jetpackCarouselStrings.no_comment_author})}e.ajax({type:"POST",url:jetpackCarouselStrings.ajaxurl,data:f,dataType:"json",success:function(t){"approved"===t.comment_status?e("#jp-carousel-comment-post-results").slideUp("fast").html('<span class="jp-carousel-comment-post-success">'+jetpackCarouselStrings.comment_approved+"</span>").slideDown("fast"):"unapproved"===t.comment_status?e("#jp-carousel-comment-post-results").slideUp("fast").html('<span class="jp-carousel-comment-post-success">'+jetpackCarouselStrings.comment_unapproved+"</span>").slideDown("fast"):e("#jp-carousel-comment-post-results").slideUp("fast").html('<span class="jp-carousel-comment-post-error">'+jetpackCarouselStrings.comment_post_error+"</span>").slideDown("fast"),i.jp_carousel("clearCommentTextAreaValue"),i.jp_carousel("getComments",{attachment_id:l,offset:0,clear:!0}),e("#jp-carousel-comment-form-button-submit").val(jetpackCarouselStrings.post_comment),e("#jp-carousel-comment-form-spinner").spin(!1)},error:function(){i.jp_carousel("postCommentError",{field:"jp-carousel-comment-form-comment-field",error:jetpackCarouselStrings.comment_post_error})}})}}else a.parents(".jp-carousel-info").length||o.jp_carousel("next")}).bind("jp_carousel.afterOpen",function(){e(window).bind("keydown",S),e(window).bind("resize",C),i.opened=!0,C()}).bind("jp_carousel.beforeClose",function(){var t=e(window).scrollTop();e(window).unbind("keydown",S),e(window).unbind("resize",C),e(window).scrollTop(t),e(".jp-carousel-previous-button").hide(),e(".jp-carousel-next-button").hide()}).bind("jp_carousel.afterClose",function(){window.location.hash&&history.back&&history.back(),y="",i.opened=!1}).on("transitionend.jp-carousel ",".jp-carousel-slide",function(t){if("transform"===t.originalEvent.propertyName){var a=(Date.now()-l)/1e3/t.originalEvent.elapsedTime;o.off("transitionend.jp-carousel"),a>=2&&e(".jp-carousel-transitions").removeClass("jp-carousel-transitions")}}),e(".jp-carousel-wrap").touchwipe({wipeLeft:function(e){e.preventDefault(),i.jp_carousel("next")},wipeRight:function(e){e.preventDefault(),i.jp_carousel("previous")},preventDefaultEvents:!1}),s.add(r).click(function(e){e.preventDefault(),e.stopPropagation(),s.is(this)?i.jp_carousel("next"):i.jp_carousel("previous")})}}(),!i.jp_carousel("testIfOpened")))return x=e("body").css("overflow"),e("body").css("overflow","hidden"),b=e("html").css("overflow"),e("html").css("overflow","hidden"),w=e(window).scrollTop(),o.data("carousel-extra",h),this.each(function(){var t=e(this);d&&e.extend(m,d),-1===m.start_index&&(m.start_index=0),o.trigger("jp_carousel.beforeOpen").fadeIn("fast",function(){o.trigger("jp_carousel.afterOpen"),i.jp_carousel("initSlides",t.find(m.items_selector),m.start_index).jp_carousel("selectSlideAtIndex",m.start_index)}),i.html("")})},selectSlideAtIndex:function(e){var t=this.jp_carousel("slides"),a=t.eq(e);return 0===a.length&&(a=t.eq(0)),i.jp_carousel("selectSlide",a,!1),this},close:function(){return e("body").css("overflow",x),e("html").css("overflow",b),this.jp_carousel("clearCommentTextAreaValue"),o.trigger("jp_carousel.beforeClose").fadeOut("fast",function(){o.trigger("jp_carousel.afterClose"),e(window).scrollTop(w)})},next:function(){this.jp_carousel("previousOrNext","nextSlide")},previous:function(){this.jp_carousel("previousOrNext","prevSlide")},previousOrNext:function(e){if(!this.jp_carousel("hasMultipleImages"))return!1;var t=i.jp_carousel(e);t&&(o.animate({scrollTop:0},"fast"),this.jp_carousel("clearCommentTextAreaValue"),this.jp_carousel("selectSlide",t))},selectedSlide:function(){return this.find(".selected")},setSlidePosition:function(e){return l=Date.now(),this.css({"-webkit-transform":"translate3d("+e+"px,0,0)","-moz-transform":"translate3d("+e+"px,0,0)","-ms-transform":"translate("+e+"px,0)","-o-transform":"translate("+e+"px,0)",transform:"translate3d("+e+"px,0,0)"})},updateSlidePositions:function(e){var t=this.jp_carousel("selectedSlide"),a=i.width(),o=t.width(),s=i.jp_carousel("prevSlide"),r=i.jp_carousel("nextSlide"),n=s.prev(),l=r.next(),c=Math.floor(.5*(a-o));t.jp_carousel("setSlidePosition",c).show(),i.jp_carousel("fitInfo",e),1===(h.is(t.prevAll())?1:-1)?(l.is(s)||l.jp_carousel("setSlidePosition",a+r.width()).show(),n.is(r)||n.jp_carousel("setSlidePosition",-n.width()-o).show()):l.is(s)||l.jp_carousel("setSlidePosition",a+o).show(),s.jp_carousel("setSlidePosition",Math.floor(-s.width()+.75*_)).show(),r.jp_carousel("setSlidePosition",Math.ceil(a-.75*_)).show()},selectSlide:function(t,a){h=this.find(".selected").removeClass("selected");var s,r,n=i.jp_carousel("slides").css({position:"fixed"}),l=e(t).addClass("selected").css({position:"relative"}),d=l.data("attachment-id"),p=i.jp_carousel("prevSlide"),u=i.jp_carousel("nextSlide"),m=p.prev(),f=u.next();i.jp_carousel("loadFullImage",l),c.hide(),0===u.length&&n.length<=2?e(".jp-carousel-next-button").hide():e(".jp-carousel-next-button").show(),0===p.length&&n.length<=2?e(".jp-carousel-previous-button").hide():e(".jp-carousel-previous-button").show(),s=l.add(p).add(m).add(u).add(f).jp_carousel("loadSlide"),n.not(s).hide(),i.jp_carousel("updateSlidePositions",a),o.trigger("jp_carousel.selectSlide",[l]),i.jp_carousel("getTitleDesc",{title:l.data("title"),desc:l.data("desc")});var g=l.data("image-meta");i.jp_carousel("updateExif",g),i.jp_carousel("updateFullSizeLink",l),i.jp_carousel("updateMap",g),i.jp_carousel("testCommentsOpened",l.data("comments-opened")),i.jp_carousel("getComments",{attachment_id:d,offset:0,clear:!0}),e("#jp-carousel-comment-post-results").slideUp(),l.data("caption")?((r=e("<div />").text(l.data("caption")).html())===e("<div />").text(l.data("title")).html()&&e(".jp-carousel-titleanddesc-title").fadeOut("fast").empty(),r===e("<div />").text(l.data("desc")).html()&&e(".jp-carousel-titleanddesc-desc").fadeOut("fast").empty(),c.html(l.data("caption")).fadeIn("slow")):c.fadeOut("fast").empty(),jetpackCarouselStrings.stats&&((new Image).src=document.location.protocol+"//pixel.wp.com/g.gif?"+jetpackCarouselStrings.stats+"&post="+encodeURIComponent(d)+"&rand="+Math.random()),e(u).add(p).each(function(){i.jp_carousel("loadFullImage",e(this))}),window.location.hash=y="#jp-carousel-"+d},slides:function(){return this.find(".jp-carousel-slide")},slideDimensions:function(){return{width:e(window).width()-2*_,height:Math.floor(e(window).height()/100*85-60)}},loadSlide:function(){return this.each(function(){var t=e(this);t.find("img").one("load",function(){t.jp_carousel("fitSlide",!1)})})},bestFit:function(){var e,t,a=i.jp_carousel("slideDimensions"),o=this.jp_carousel("originalDimensions"),s=o.width/o.height,r=1,n=1;return o.width>a.width&&(r=a.width/o.width),o.height>a.height&&(n=a.height/o.height),r<n?(e=a.width,t=Math.floor(e/s)):n<r?(t=a.height,e=Math.floor(t*s)):(e=o.width,t=o.height),{width:e,height:t}},fitInfo:function(){var e=this.jp_carousel("selectedSlide").jp_carousel("bestFit");return p.css({left:Math.floor(.5*(n.width()-e.width)),width:Math.floor(e.width)}),this},fitMeta:function(t){var a={top:Math.floor(e(window).height()/100*85+5)+"px"},i={width:n.width()-(f.width()+80)+"px"};t?(n.animate(a),v.animate(i)):(n.animate(a),v.css(i))},fitSlide:function(){return this.each(function(){var t=e(this),a=t.jp_carousel("bestFit"),o=i.jp_carousel("slideDimensions");a.left=0,a.top=Math.floor(.5*(o.height-a.height))+40,t.css(a)})},texturize:function(t){return t=(t=(t=(t=""+t).replace(/'/g,"&#8217;").replace(/&#039;/g,"&#8217;").replace(/[\u2019]/g,"&#8217;")).replace(/"/g,"&#8221;").replace(/&#034;/g,"&#8221;").replace(/&quot;/g,"&#8221;").replace(/[\u201D]/g,"&#8221;")).replace(/([\w]+)=&#[\d]+;(.+?)&#[\d]+;/g,'$1="$2"'),e.trim(t)},initSlides:function(t,a){t.length<2?e(".jp-carousel-next-button, .jp-carousel-previous-button").hide():e(".jp-carousel-next-button, .jp-carousel-previous-button").show(),t.each(function(){var t,a=e(this),o=a.data("orig-size")||"",s=i.jp_carousel("slideDimensions"),r=o.split(","),n=a.data("medium-file")||"",l=a.data("large-file")||"";o={width:parseInt(r[0],10),height:parseInt(r[1],10)},t=a.data("orig-file"),t=i.jp_carousel("selectBestImageSize",{orig_file:t,orig_width:o.width,orig_height:o.height,max_width:s.width,max_height:s.height,medium_file:n,large_file:l}),e(this).data("gallery-src",t)}),0!==a&&(e("<img/>")[0].src=e(t[a]).data("gallery-src"));var o=t.first().closest(".tiled-gallery.type-rectangular").length>0;return t.each(function(t){var s=e(this),r=s.data("attachment-id")||0,n=s.data("comments-opened")||0,l=s.data("image-meta")||{},c=s.data("orig-size")||"",d={width:s[0].naturalWidth,height:s[0].naturalHeight},p=s.data("image-title")||"",u=s.data("image-description")||"",m=s.parents(".gallery-item").find(".gallery-caption").html()||"",h=s.data("gallery-src")||"",f=s.data("medium-file")||"",g=s.data("large-file")||"",j=s.data("orig-file")||"",v=s.parents("div.tiled-gallery-item").find("div.tiled-gallery-caption").html();if(v&&(m=v),r&&c.length){p=i.jp_carousel("texturize",p),u=i.jp_carousel("texturize",u),m=i.jp_carousel("texturize",m);var w=e("<img/>").attr("src","data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7").css("width","100%").css("height","100%"),_=e('<div class="jp-carousel-slide" itemprop="associatedMedia" itemscope itemtype="https://schema.org/ImageObject"></div>').hide().css({left:t<a?-1e3:i.width()}).append(w).appendTo(i).data("src",h).data("title",p).data("desc",u).data("caption",m).data("attachment-id",r).data("permalink",s.parents("a").attr("href")).data("orig-size",c).data("comments-opened",n).data("image-meta",l).data("medium-file",f).data("large-file",g).data("orig-file",j).data("thumb-size",d);o&&_.data("preview-image",s.attr("src")).css({"background-image":'url("'+s.attr("src")+'")',"background-size":"100% 100%","background-position":"center center"}),_.jp_carousel("fitSlide",!1)}}),this},selectBestImageSize:function(e){if("object"!=typeof e&&(e={}),void 0===e.orig_file)return"";if(void 0===e.orig_width||void 0===e.max_width)return e.orig_file;if(void 0===e.medium_file||void 0===e.large_file)return e.orig_file;var t=document.createElement("a");t.href=e.large_file;var a=/^i[0-2].wp.com$/i.test(t.hostname),o=i.jp_carousel("getImageSizeParts",e.medium_file,e.orig_width,a),s=i.jp_carousel("getImageSizeParts",e.large_file,e.orig_width,a),r=parseInt(s[0],10),n=parseInt(s[1],10),l=parseInt(o[0],10),c=parseInt(o[1],10);if(e.orig_max_width=e.max_width,e.orig_max_height=e.max_height,void 0!==window.devicePixelRatio&&window.devicePixelRatio>1&&(e.max_width=e.max_width*window.devicePixelRatio,e.max_height=e.max_height*window.devicePixelRatio),r>=e.max_width||n>=e.max_height)return e.large_file;if(l>=e.max_width||c>=e.max_height)return e.medium_file;if(a){var d=e.large_file.lastIndexOf("?"),p=e.large_file;return-1!==d&&(p=e.large_file.substring(0,d),(e.orig_width>e.max_width||e.orig_height>e.max_height)&&(p+="?fit="+e.orig_max_width+"%2C"+e.orig_max_height)),p}return e.orig_file},getImageSizeParts:function(e,t,a){var i=a?e.replace(/.*=([\d]+%2C[\d]+).*$/,"$1"):e.replace(/.*-([\d]+x[\d]+)\..+$/,"$1"),o=i!==e?a?i.split("%2C"):i.split("x"):[t,0];return"9999"===o[0]&&(o[0]="0"),"9999"===o[1]&&(o[1]="0"),o},originalDimensions:function(){var t=e(this).data("orig-size").split(",");return{width:parseInt(t[0],10),height:parseInt(t[1],10)}},format:function(e){if("object"!=typeof e&&(e={}),e.text&&void 0!==e.text)return e.replacements&&void 0!==e.replacements?e.text.replace(/{(\d+)}/g,function(t,a){return void 0!==e.replacements[a]?e.replacements[a]:t}):e.text},shutterSpeed:function(e){return e>=1?Math.round(10*e)/10+"s":"1/"+Math.round(1/e)+"s"},parseTitleDesc:function(t){return!t.match(" ")&&t.match("_")?"":(e(["CIMG","DSC_","DSCF","DSCN","DUW","GEDC","IMG","JD","MGP","PICT","Imagen","Foto","DSC","Scan","SANY","SAM","Screen Shot [0-9]+"]).each(function(e,a){new RegExp("^"+a).test(t)&&(t="")}),t)},getTitleDesc:function(t){var a,o,s="",r="";(o=e("div.jp-carousel-titleanddesc","div.jp-carousel-wrap")).hide(),s=i.jp_carousel("parseTitleDesc",t.title)||"",a=i.jp_carousel("parseTitleDesc",t.desc)||"",(s.length||a.length)&&(e("<div />").html(s).text()===e("<div />").html(a).text()&&(s=""),r=s.length?'<div class="jp-carousel-titleanddesc-title">'+s+"</div>":"",r+=a.length?'<div class="jp-carousel-titleanddesc-desc">'+a+"</div>":"",o.html(r).fadeIn("slow")),e("div#jp-carousel-comment-form-container").css("margin-top","20px"),e("div#jp-carousel-comments-loading").css("margin-top","20px")},updateExif:function(t){if(!t||1!==Number(jetpackCarouselStrings.display_exif))return!1;var a=e("<ul class='jp-carousel-image-exif'></ul>");e.each(t,function(t,o){if(0!==parseFloat(o)&&o.length&&-1!==e.inArray(t,e.makeArray(jetpackCarouselStrings.meta_data))){switch(t){case"focal_length":o+="mm";break;case"shutter_speed":o=i.jp_carousel("shutterSpeed",o);break;case"aperture":o="f/"+o}a.append("<li><h5>"+jetpackCarouselStrings[t]+"</h5>"+o+"</li>")}}),e("div.jp-carousel-image-meta ul.jp-carousel-image-exif").replaceWith(a)},updateFullSizeLink:function(t){if(!t||!t.data)return!1;var a,o=t.data("orig-size").split(","),s=document.createElement("a");s.href=t.data("src").replace(/\?.+$/,""),a=null!==s.hostname.match(/^i[\d]{1}.wp.com$/i)?s.href:t.data("orig-file").replace(/\?.+$/,"");var r=e("<a>"+i.jp_carousel("format",{text:jetpackCarouselStrings.download_original,replacements:o})+"</a>").addClass("jp-carousel-image-download").attr("href",a).attr("target","_blank");e("div.jp-carousel-image-meta a.jp-carousel-image-download").replaceWith(r)},updateMap:function(t){if(t.latitude&&t.longitude&&1===Number(jetpackCarouselStrings.display_geo)){var a=t.latitude,i=t.longitude,o=e("div.jp-carousel-image-meta","div.jp-carousel-wrap"),s="&scale=2&style=feature:all|element:all|invert_lightness:true|hue:0x0077FF|saturation:-50|lightness:-5|gamma:0.91";e("<div></div>").addClass("jp-carousel-image-map").html('<img width="154" height="154" src="https://maps.googleapis.com/maps/api/staticmap?\t\t\t\t\t\t\tcenter='+a+","+i+"&\t\t\t\t\t\t\tzoom=8&\t\t\t\t\t\t\tsize=154x154&\t\t\t\t\t\t\tsensor=false&\t\t\t\t\t\t\tmarkers=size:medium%7Ccolor:blue%7C"+a+","+i+s+'" class="gmap-main" />\t\t\t\t\t\t\t\t\t\t\t\t\t<div class="gmap-topright"><div class="imgclip"><img width="175" height="154" src="https://maps.googleapis.com/maps/api/staticmap?\t\t\t\t\t\t\tcenter='+a+","+i+"&\t\t\t\t\t\t\tzoom=3&\t\t\t\t\t\t\tsize=175x154&\t\t\t\t\t\t\tsensor=false&\t\t\t\t\t\t\tmarkers=size:small%7Ccolor:blue%7C"+a+","+i+s+'"c /></div></div>\t\t\t\t\t\t\t\t\t\t\t\t\t').prependTo(o)}},testCommentsOpened:function(t){1===parseInt(t,10)?(e(".jp-carousel-buttons").fadeIn("fast"),j.fadeIn("fast")):(e(".jp-carousel-buttons").fadeOut("fast"),j.fadeOut("fast"))},getComments:function(t){if(clearInterval(m),"object"==typeof t&&void 0!==t.attachment_id&&t.attachment_id){(!t.offset||void 0===t.offset||t.offset<1)&&(t.offset=0);var a=e(".jp-carousel-comments"),o=e("#jp-carousel-comments-loading").show();t.clear&&a.hide().empty(),e.ajax({type:"GET",url:jetpackCarouselStrings.ajaxurl,dataType:"json",data:{action:"get_attachment_comments",nonce:jetpackCarouselStrings.nonce,id:t.attachment_id,offset:t.offset},success:function(s){t.clear&&a.fadeOut("fast").empty(),e(s).each(function(){var o=e("<div></div>").addClass("jp-carousel-comment").attr("id","jp-carousel-comment-"+this.id).html('<div class="comment-gravatar">'+this.gravatar_markup+'</div><div class="comment-author">'+this.author_markup+'</div><div class="comment-date">'+this.date_gmt+'</div><div class="comment-content">'+this.content+"</div>");a.append(o),clearInterval(m),m=setInterval(function(){e(".jp-carousel-overlay").height()-150<e(".jp-carousel-wrap").scrollTop()+e(window).height()&&(i.jp_carousel("getComments",{attachment_id:t.attachment_id,offset:t.offset+10,clear:!1}),clearInterval(m))},300)});var r=e(".jp-carousel div.selected");if(r&&r.data&&r.data("attachment-id")!=t.attachment_id)return a.fadeOut("fast"),void a.empty();e(".jp-carousel-overlay").height(e(window).height()+g.height()+j.height()+(a.height()>0?a.height():f.height())+200),a.show(),o.hide()},error:function(e,t,i){console.log("Comment get fail...",e,t,i),a.fadeIn("fast"),o.fadeOut("fast")}})}},postCommentError:function(t){"object"!=typeof t&&(t={}),t.field&&void 0!==t.field&&t.error&&void 0!==t.error&&(e("#jp-carousel-comment-post-results").slideUp("fast").html('<span class="jp-carousel-comment-post-error">'+t.error+"</span>").slideDown("fast"),e("#jp-carousel-comment-form-spinner").spin(!1))},setCommentIframeSrc:function(t){var a=e("#jp-carousel-comment-iframe");a&&a.length&&(a.attr("src",a.attr("src").replace(/(postid=)\d+/,"$1"+t)),a.attr("src",a.attr("src").replace(/(%23.+)?$/,"%23jp-carousel-"+t)))},clearCommentTextAreaValue:function(){var t=e("#jp-carousel-comment-form-comment-field");t&&t.val("")},nextSlide:function(){var e=this.jp_carousel("slides"),t=this.jp_carousel("selectedSlide");return 0===t.length||e.length>2&&t.is(e.last())?e.first():t.next()},prevSlide:function(){var e=this.jp_carousel("slides"),t=this.jp_carousel("selectedSlide");return 0===t.length||e.length>2&&t.is(e.first())?e.last():t.prev()},loadFullImage:function(t){var a=t.find("img:first");a.data("loaded")||(a.on("load.jetpack",function(){a.off("load.jetpack"),e(this).closest(".jp-carousel-slide").css("background-image","")}),!t.data("preview-image")||t.data("thumb-size")&&t.width()>t.data("thumb-size").width?a.attr("src",a.closest(".jp-carousel-slide").data("src")).attr("itemprop","image"):a.attr("src",t.data("preview-image")).attr("itemprop","image"),a.data("loaded",1))},hasMultipleImages:function(){return i.jp_carousel("slides").length>1}};e.fn.jp_carousel=function(t){return I[t]?I[t].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof t&&t?void e.error("Method "+t+" does not exist on jQuery.jp_carousel"):I.open.apply(this,arguments)},e(document.body).on("click.jp-carousel","div.gallery, div.tiled-gallery, ul.wp-block-gallery, div.wp-block-jetpack-tiled-gallery, a.single-image-gallery",function(t){e(this).jp_carousel("testForData",t.currentTarget)&&(e(t.target).parent().hasClass("gallery-caption")||e(t.target).parent().is("figcaption")||(t.preventDefault(),t.stopPropagation(),e(this).jp_carousel("open",{start_index:e(this).find(".gallery-item, .tiled-gallery-item, .blocks-gallery-item, .tiled-gallery__item").index(e(t.target).parents(".gallery-item, .tiled-gallery-item, .blocks-gallery-item, .tiled-gallery__item"))})))}),1===Number(jetpackCarouselStrings.single_image_gallery)&&(k(),e(document.body).on("post-load",function(){k()})),e(window).on("hashchange.jp-carousel",function(){var t,a,s,r=/jp-carousel-(\d+)/;window.location.hash&&r.test(window.location.hash)?window.location.hash===y&&i.opened||(window.location.hash&&i&&!i.opened&&history.back?history.back():(y=window.location.hash,t=window.location.hash.match(r),a=parseInt(t[1],10),e("div.gallery, div.tiled-gallery, a.single-image-gallery, ul.wp-block-gallery, div.wp-block-jetpack-tiled-gallery").each(function(t,i){if(e(i).find("img").each(function(t,o){if(e(o).data("attachment-id")===parseInt(a,10))return s={index:t,gallery:i},!1}),s)return e(s.gallery).jp_carousel("openOrSelectSlide",s.index),!1}))):i&&i.opened&&o.jp_carousel("close")}),window.location.hash&&e(window).trigger("hashchange")}),function(e){e.fn.touchwipe=function(t){var a={min_move_x:20,min_move_y:20,wipeLeft:function(){},wipeRight:function(){},wipeUp:function(){},wipeDown:function(){},preventDefaultEvents:!0};return t&&e.extend(a,t),this.each(function(){var e,t,i=!1;function o(){this.removeEventListener("touchmove",s),e=null,i=!1}function s(s){if(a.preventDefaultEvents&&s.preventDefault(),i){var r=s.touches[0].pageX,n=s.touches[0].pageY,l=e-r,c=t-n;Math.abs(l)>=a.min_move_x?(o(),l>0?a.wipeLeft(s):a.wipeRight(s)):Math.abs(c)>=a.min_move_y&&(o(),c>0?a.wipeDown(s):a.wipeUp(s))}}"ontouchstart"in document.documentElement&&this.addEventListener("touchstart",function(a){1===a.touches.length&&(e=a.touches[0].pageX,t=a.touches[0].pageY,i=!0,this.addEventListener("touchmove",s,!1))},!1)}),this}}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/comment-likes/comment-like-count.min.js b/plugins/jetpack/_inc/build/comment-likes/comment-like-count.min.js
deleted file mode 100644
index 11008e6a..00000000
--- a/plugins/jetpack/_inc/build/comment-likes/comment-like-count.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-jQuery(document).ready(function(t){var e="https://public-api.wordpress.com/rest/v1",n=[];t(".comment-like-count").each(function(){var e=t(this).attr("data-blog-id"),a=t(this).attr("data-comment-id");n.push("/sites/"+e+"/comments/"+a+"/likes")}),t.ajax({type:"GET",url:e+"/batch",dataType:"jsonp",data:"urls[]="+n.map(encodeURIComponent).join("&urls[]="),success:function(e){for(var n in e)if(!e[n].error_data){var a=n.split("/")[4],o=e[n].found;if(o<1)return;t("#comment-like-count-"+a).find(".like-count").hide().text(o).fadeIn()}},error:function(){}})}); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/contact-form/js/editor-view.min.js b/plugins/jetpack/_inc/build/contact-form/js/editor-view.min.js
deleted file mode 100644
index 52ef096f..00000000
--- a/plugins/jetpack/_inc/build/contact-form/js/editor-view.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* global grunionEditorView, tinyMCE, QTags, wp */
-!function(t,e,n){if(e.mce=e.mce||{},void 0!==e.mce.views){e.mce.grunion_wp_view_renderer={shortcode_string:"contact-form",template:e.template("grunion-contact-form"),field_templates:{email:e.template("grunion-field-email"),telephone:e.template("grunion-field-telephone"),textarea:e.template("grunion-field-textarea"),radio:e.template("grunion-field-radio"),checkbox:e.template("grunion-field-checkbox"),"checkbox-multiple":e.template("grunion-field-checkbox-multiple"),select:e.template("grunion-field-select"),date:e.template("grunion-field-date"),text:e.template("grunion-field-text"),name:e.template("grunion-field-text"),url:e.template("grunion-field-url")},edit_template:e.template("grunion-field-edit"),editor_inline:e.template("grunion-editor-inline"),editor_option:e.template("grunion-field-edit-option"),getContent:function(){var t,i,o=this.shortcode.content,r=0,c="";for(o||(o=n.default_form);t=e.shortcode.next("contact-field",o,r);)r=t.index+t.content.length,(i=t.shortcode.attrs.named).type&&this.field_templates[i.type]||(i.type="text"),i.required&&(i.required=n.labels.required_field_text),i.options&&"string"==typeof i.options&&(i.options=i.options.split(",")),c+=this.field_templates[i.type](i);var s={body:c,submit_button_text:n.labels.submit_button_text};return this.template(s)},edit:function(i,o){var r,c,s=e.shortcode.next(this.shortcode_string,i).shortcode,l=t(tinyMCE.activeEditor.getDoc()).find(".wpview.wpview-wrap").filter(function(){return t(this).attr("data-mce-selected")}),a=t('<iframe scrolling="no" class="inline-edit-contact-form" />'),d=0,f="";for(s.content||(s.content=n.default_form);c=e.shortcode.next("contact-field",s.content,d);)d=c.index+c.content.length,(r=c.shortcode.attrs.named).options&&"string"==typeof r.options&&(r.options=r.options.split(",")),f+=this.edit_template(r);a.on("checkheight",function(){var t=this.contentDocument?this.contentDocument:this.contentWindow.document;this.style.height="10px",this.style.height=5+t.body.scrollHeight+"px",tinyMCE.activeEditor.execCommand("wpAutoResize")}),a.on("load",function(){var i=1===window.isRtl?n.inline_editing_style_rtl:n.inline_editing_style,r=t('<link rel="stylesheet" href="'+i+'" />'),c=t('<link rel="stylesheet" href="'+n.dashicons_css_url+'" />');r.on("load",function(){a.contents().find("body").css("visibility","visible"),a.trigger("checkheight")}),a.contents().find("head").append(r).append(c),a.contents().find("body").html(e.mce.grunion_wp_view_renderer.editor_inline({to:s.attrs.named.to,subject:s.attrs.named.subject,fields:f})).css("visibility","hidden"),a.contents().find("input:first").focus(),setTimeout(function(){a.trigger("checkheight")},250),setTimeout(function(){a.trigger("checkheight")},500);var l=a.contents().find(".grunion-fields"),d=a.contents().find(".grunion-controls");l.sortable(),l.on("change select","select[name=type]",function(){t(this).closest(".grunion-field-edit")[0].className="card is-compact grunion-field-edit grunion-field-"+t(this).val(),a.trigger("checkheight")}),l.on("click",".delete-option",function(e){e.preventDefault(),t(this).closest("li").remove(),a.trigger("checkheight")}),l.on("click",".add-option",function(n){var i=t(e.mce.grunion_wp_view_renderer.editor_option());n.preventDefault(),t(this).closest("li").before(i),a.trigger("checkheight"),i.find("input:first").focus()}),l.on("click",".delete-field",function(e){e.preventDefault(),t(this).closest(".card").remove(),a.trigger("checkheight")}),d.find("input[name=submit]").on("click",function(){var n=s;n.type="closed",n.attrs={},n.content="",l.children().each(function(){var i={tag:"contact-field",type:"single",attrs:{label:t(this).find("input[name=label]").val(),type:t(this).find("select[name=type]").val()}},o=[];t(this).find("input[name=required]:checked").length&&(i.attrs.required="1"),t(this).find("input[name=option]").each(function(){t(this).val()&&o.push(t(this).val())}),o.length&&(i.attrs.options=o.join(",")),n.content+=e.shortcode.string(i)}),a.contents().find("input[name=to]").val()&&(n.attrs.to=a.contents().find("input[name=to]").val()),a.contents().find("input[name=subject]").val()&&(n.attrs.subject=a.contents().find("input[name=subject]").val()),o(e.shortcode.string(n))}),d.find("input[name=cancel]").on("click",function(){o(e.shortcode.string(s))}),d.find("input[name=add-field]").on("click",function(){var n=t(e.mce.grunion_wp_view_renderer.edit_template({}));l.append(n),l.sortable("refresh"),a.trigger("checkheight"),n.find("input:first").focus()})}),l.html(a)}},e.mce.views.register("contact-form",e.mce.grunion_wp_view_renderer),QTags.addButton("grunion_shortcode",n.labels.quicktags_label,function(){QTags.insertContent("[contact-form]"+n.default_form+"[/contact-form]")});var i=t("#wp-content-wrap");t("#insert-jetpack-contact-form").on("click",function(t){t.preventDefault(),i.hasClass("tmce-active")?tinyMCE.execCommand("grunion_add_form"):i.hasClass("html-active")?QTags.insertContent("[contact-form]"+n.default_form+"[/contact-form]"):window.console.error("Neither TinyMCE nor QuickTags is active. Unable to insert form.")})}}(jQuery,wp,grunionEditorView); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/contact-form/js/grunion-admin.min.js b/plugins/jetpack/_inc/build/contact-form/js/grunion-admin.min.js
deleted file mode 100644
index d9f7a7f8..00000000
--- a/plugins/jetpack/_inc/build/contact-form/js/grunion-admin.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* global ajaxurl */
-jQuery(function(e){e(document).on("click","#jetpack-check-feedback-spam:not(.button-disabled)",function(n){n.preventDefault(),e("#jetpack-check-feedback-spam:not(.button-disabled)").addClass("button-disabled"),e(".jetpack-check-feedback-spam-spinner").addClass("spinner").show(),function n(c,t){e.post(ajaxurl,{action:"grunion_recheck_queue",offset:c,limit:t},function(e){e.processed<t?window.location.reload():n(c+t,t)})}(0,100)})}); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/contact-form/js/grunion-frontend.min.js b/plugins/jetpack/_inc/build/contact-form/js/grunion-frontend.min.js
deleted file mode 100644
index 8fccfff7..00000000
--- a/plugins/jetpack/_inc/build/contact-form/js/grunion-frontend.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-jQuery(function(t){t(".contact-form input.jp-contact-form-date").datepicker()}); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/contact-form/js/grunion.min.js b/plugins/jetpack/_inc/build/contact-form/js/grunion.min.js
deleted file mode 100644
index f04cd4f6..00000000
--- a/plugins/jetpack/_inc/build/contact-form/js/grunion.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* jshint onevar: false, devel: true, smarttabs: true */
-/* global GrunionFB_i18n: true, FB, ajax_nonce_shortcode, ajax_nonce_json, ajaxurl, postId */
-window.FB||(window.FB={}),GrunionFB_i18n=jQuery.extend({nameLabel:"Name",emailLabel:"Email",urlLabel:"Website",commentLabel:"Comment",newLabel:"New Field",optionsLabel:"Options",optionLabel:"Option",firstOptionLabel:"First option",problemGeneratingForm:"Oops, there was a problem generating your form. You'll likely need to try again.",moveInstructions:"Drag up or down\nto re-arrange",moveLabel:"move",editLabel:"edit",savedMessage:"Saved successfully",requiredLabel:"(required)",exitConfirmMessage:"Are you sure you want to exit the form editor without saving? Any changes you have made will be lost.",maxNewFields:5,invalidEmail:" is an invalid email address."},GrunionFB_i18n),GrunionFB_i18n.moveInstructions=GrunionFB_i18n.moveInstructions.replace("\n","<br />"),FB.span=jQuery("<span>"),FB.esc_html=function(e){return FB.span.text(e).html()},FB.esc_attr=function(e){return(e=FB.esc_html(e)).replace('"',"&quot;").replace("'","&#039;")},FB.ContactForm=function(){var e={action:"grunion_shortcode",_ajax_nonce:ajax_nonce_shortcode,to:"",subject:"",fields:{}},i={name:{label:GrunionFB_i18n.nameLabel,type:"name",required:!0,options:[],order:"1"},email:{label:GrunionFB_i18n.emailLabel,type:"email",required:!0,options:[],order:"2"},url:{label:GrunionFB_i18n.urlLabel,type:"url",required:!1,options:[],order:"3"},comment:{label:GrunionFB_i18n.commentLabel,type:"textarea",required:!0,options:[],order:"4"}},n=!1,o=0,t=GrunionFB_i18n.maxNewFields,l={},r=0;function a(e,i){try{for(var o="",t=0;t<l[e].options.length;t++)void 0!==l[e].options[t]&&(o="radio"===i?o+'<div id="fb-radio-'+e+"-"+t+'"><input type="radio" id="fb-field'+e+'" name="radio-'+e+'" /><span>'+FB.esc_html(l[e].options[t])+'</span><div class="clear"></div></div>':"checkbox-multiple"===i?o+'<div id="fb-checkbox-multiple-'+e+"-"+t+'"><input type="checkbox" id="fb-field'+e+'" name="checkbox-multiple-'+e+'" /><span>'+FB.esc_html(l[e].options[t])+'</span><div class="clear"></div></div>':o+'<option id="fb-'+e+"-"+t+'" value="'+e+"-"+t+'">'+FB.esc_html(l[e].options[t])+"</option>");return o}catch(e){n&&console.log("customOptions(): "+e)}}function d(i){try{scroll(0,0),setTimeout(function(){jQuery("#fb-new-label").focus().select()},100),function(i){try{var o=e.fields[i].type;if(jQuery("#fb-options").hide(),jQuery("#fb-field-id").val(i),jQuery("#fb-new-label").val(e.fields[i].label),jQuery("#fb-new-type").val(e.fields[i].type),e.fields[i].required?jQuery("#fb-new-required").prop("checked",!0):jQuery("#fb-new-required").prop("checked",!1),"select"===o||"radio"===o||"checkbox-multiple"===o){var t=e.fields[i].options;jQuery("#fb-options").show(),jQuery("#fb-new-options").html("");for(var l=0;l<t.length;l++)void 0!==t[l]&&jQuery("#fb-new-options").append('<div id="fb-option-box-'+l+'" class="fb-new-fields"><span optionid="'+l+'" class="fb-remove-option"></span><label></label><input type="text" id="fb-option'+l+'" optionid="'+l+'" value="'+FB.esc_attr(e.fields[i].options[l])+'" class="fb-options" /><div>')}s()}catch(e){n&&console.log("loadFieldEditor(): "+e)}}(i.parent().attr("fieldid"))}catch(e){n&&console.log("editField(): "+e)}}function s(){jQuery("#fb-desc").hide(),jQuery("#fb-add-field").show()}function f(){try{return jQuery("#TB_imageOff",window.parent.document).unbind("click"),jQuery("#TB_closeWindowButton",window.parent.document).unbind("click"),jQuery("#TB_window",window.parent.document).fadeOut("fast"),jQuery("body",window.parent.document).removeClass("modal-open"),jQuery("#TB_window,#TB_overlay,#TB_HideSelect",window.parent.document).trigger("unload").unbind().remove(),jQuery("#TB_load",window.parent.document).remove(),void 0===window.parent.document.body.style.maxHeight&&(jQuery("body","html",window.parent.document).css({height:"auto",width:"auto"}),jQuery("html",window.parent.document).css("overflow","")),window.parent.document.onkeydown="",window.parent.document.onkeyup="",!1}catch(e){n&&console.log("hidePopup(): "+e)}}function u(e,i){try{"show"===e?(jQuery(".fb-edit-field").is(":visible")&&jQuery(".fb-edit-field").remove(),i.find("label").prepend('<span class="right fb-edit-field" style="font-weight: normal;"><a href="" class="fb-reorder"><div style="display: none;">'+GrunionFB_i18n.moveInstructions+"</div>"+GrunionFB_i18n.moveLabel+'</a>&nbsp;&nbsp;<span style="color: #C7D8DE;">|</span>&nbsp;&nbsp;<a href="" class="fb-edit">'+GrunionFB_i18n.editLabel+"</a></span>")):jQuery(".fb-edit-field").remove()}catch(e){n&&console.log("hideShowEditLink(): "+e)}}function c(){try{var i=jQuery("#fb-field-id").val();jQuery("#fb-options").hide(),void 0===l[i]&&(l[i]={}),l[i].options=e.fields[i].options,e.fields[i].options=[]}catch(e){n&&console.log("removeOptions(): "+e)}}function b(){jQuery("#fb-desc").show(),jQuery("#fb-add-field").hide()}function p(e){try{var i=e||GrunionFB_i18n.savedMessage;jQuery("#fb-success").text(i),jQuery("#fb-success").slideDown("fast"),setTimeout(function(){jQuery("#fb-success").slideUp("fast")},2500)}catch(e){n&&console.log("showAndHideMessage(): "+e)}}function y(e){try{if("preview"===e){if(!function(e){if(0===e.length)return!0;var i,n=e.split(",");for(i=0;i<n.length;i++)if(!1===(o=n[i],void 0,/[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/i,/[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/i.test(o)))return alert(n[i]+GrunionFB_i18n.invalidEmail),!1;var o;return!0}(jQuery("#fb-field-my-email").val()))return;jQuery("#tab-preview a").addClass("current"),jQuery("#tab-settings a").removeClass("current"),jQuery("#fb-preview-form, #fb-desc").show(),jQuery("#fb-email-settings, #fb-email-desc").hide(),p(GrunionFB_i18n.savedMessage)}else jQuery("#tab-preview a").removeClass("current"),jQuery("#tab-settings a").addClass("current"),jQuery("#fb-preview-form, #fb-desc, #fb-add-field").hide(),jQuery("#fb-email-settings, #fb-email-desc").show(),jQuery("#fb-field-my-email").focus().select()}catch(e){n&&console.log("switchTabs(): "+e)}}function v(i,o,t){try{var d=jQuery("#fb-field-id").val();i||(i=jQuery("#fb-new-type").val()),o||(o=jQuery("#fb-new-field"+d+" .label-text").text());var s=t?'<span class="label-required">'+GrunionFB_i18n.requiredLabel+"</span>":"",f='<label fieldid="'+d+'" for="fb-field'+d+'"><span class="label-text">'+FB.esc_html(o)+"</span>"+s+"</label>",u='<input type="radio" name="radio-'+d+'" id="fb-field'+d+' "disabled="disabled" />',b='<label fieldid="'+d+'" for="fb-field'+d+'" class="fb-radio-label"><span class="label-text">'+FB.esc_html(o)+"</span>"+s+"</label>",p='<div class="fb-remove fb-remove-small" id="'+d+'"></div>',y='<div class="fb-remove" id="'+d+'"></div>',v='<input type="checkbox" id="fb-field'+d+'" "disabled="disabled" />',m='<input type="checkbox" id="fb-field'+d+'" "disabled="disabled" />',w='<div class="fb-remove fb-remove-small" id="'+d+'"></div>',j='<input type="text" id="fb-field'+d+'" "disabled="disabled" />',Q='<textarea id="fb-field'+d+'" "disabled="disabled"></textarea>',h='<div class="clear"></div>',x='<select id="fb-field'+d+'" fieldid="'+d+'"><option id="fb-'+d+"-"+r+'" value="'+d+"-"+r+'">'+GrunionFB_i18n.firstOptionLabel+"</option></select>";switch(i){case"checkbox":c(),jQuery("#fb-new-field"+d+" .fb-fields").html(p+v+b+h);break;case"checkbox-multiple":jQuery("#fb-new-field"+d+" .fb-fields").html(f+w+'<div fieldid="'+d+'" id="fb-custom-checkbox-multiple'+d+'"></div>'),void 0!==l[d]&&0!==l[d].options.length?(e.fields[d].options=l[d].options,jQuery("#fb-custom-checkbox-multiple"+d).append(a(d,i))):(jQuery("#fb-new-options").html('<label for="fb-option0">'+GrunionFB_i18n.optionsLabel+'</label><input type="text" id="fb-option0" optionid="0" value="'+GrunionFB_i18n.firstOptionLabel+'" class="fb-options" />'),jQuery("#fb-custom-checkbox-multiple"+d).append('<div id="fb-checkbox-multiple-'+d+'-0">'+m+"<span>"+GrunionFB_i18n.firstOptionLabel+"</span>"+h+"</div>"),e.fields[d].options[r]=GrunionFB_i18n.firstOptionLabel),jQuery("#fb-options").show(),setTimeout(function(){jQuery("#fb-option0").focus().select()},100);break;case"email":case"name":c(),jQuery("#fb-new-field"+d+" .fb-fields").html(y+f+j);break;case"radio":jQuery("#fb-new-field"+d+" .fb-fields").html(f+p+'<div fieldid="'+d+'" id="fb-custom-radio'+d+'"></div>'),void 0!==l[d]&&0!==l[d].options.length?(e.fields[d].options=l[d].options,jQuery("#fb-custom-radio"+d).append(a(d,i))):(jQuery("#fb-new-options").html('<label for="fb-option0">'+GrunionFB_i18n.optionsLabel+'</label><input type="text" id="fb-option0" optionid="0" value="'+GrunionFB_i18n.firstOptionLabel+'" class="fb-options" />'),jQuery("#fb-custom-radio"+d).append('<div id="fb-radio-'+d+'-0">'+u+"<span>"+GrunionFB_i18n.firstOptionLabel+"</span>"+h+"</div>"),e.fields[d].options[r]=GrunionFB_i18n.firstOptionLabel),jQuery("#fb-options").show(),setTimeout(function(){jQuery("#fb-option0").focus().select()},100);break;case"select":jQuery("#fb-new-field"+d+" .fb-fields").html(y+f+x),void 0!==l[d]&&0!==l[d].options.length?(e.fields[d].options=l[d].options,jQuery("#fb-field"+d).html(a(d,i))):(jQuery("#fb-new-options").html('<label for="fb-option0">'+GrunionFB_i18n.optionsLabel+'</label><input type="text" id="fb-option0" optionid="0" value="'+GrunionFB_i18n.firstOptionLabel+'" class="fb-options" />'),e.fields[d].options[r]=GrunionFB_i18n.firstOptionLabel),jQuery("#fb-options").show(),setTimeout(function(){jQuery("#fb-option0").focus().select()},100);break;case"text":c(),jQuery("#fb-new-field"+d+" .fb-fields").html(y+f+j);break;case"textarea":c(),jQuery("#fb-new-field"+d+" .fb-fields").html(y+f+Q);break;case"url":c(),jQuery("#fb-new-field"+d+" .fb-fields").html(y+f+j)}e.fields[d].type=i}catch(e){n&&console.log("updateType(): "+e)}}return{resizePop:function(){try{var e=jQuery("body",window.parent.document).width(),i=jQuery("body",window.parent.document).height(),o=void 0===document.body.style.maxHeight;jQuery("#TB_window, #TB_iframeContent",window.parent.document).css("width","768px"),jQuery("#TB_window",window.parent.document).css({left:(e-768)/2+"px",top:"23px",position:"absolute",marginLeft:"0"}),o||jQuery("#TB_window, #TB_iframeContent",window.parent.document).css("height",i-73+"px")}catch(e){n&&console.log("resizePop(): "+e)}},init:function(){var a;(window.parent.scroll(0,0),jQuery("#edButtonPreview",window.parent.document).hasClass("active")||jQuery("#wp-content-wrap",window.parent.document).hasClass("tmce-active"))?a=(window.dialogArguments||opener||parent||top).tinyMCE.activeEditor.getContent():a=jQuery("#content",window.parent.document).val();var c={action:"grunion_shortcode_to_json",_ajax_nonce:ajax_nonce_json,post_id:postId,content:a},m=jQuery(document);jQuery.post(ajaxurl,c,function(o){!function(o){try{e.fields={},o?(jQuery.each(o.fields,function(i,n){1===parseInt(n.required,10)&&(n.required="true"),e.fields[i]=n}),e.to=o.to,e.subject=o.subject):e.fields=i}catch(e){n&&console.log("parseShortcode(): "+e)}}(jQuery.parseJSON(o)),function(){try{e.to&&jQuery("#fb-field-my-email").val(e.to),e.subject&&jQuery("#fb-field-subject").val(e.subject),jQuery.each(e.fields,function(e,i){jQuery("#fb-extra-fields").before('<div class="fb-new-fields ui-state-default" fieldid="'+e+'" id="fb-new-field'+e+'"><div class="fb-fields"></div></div>'),jQuery("#fb-field-id").val(e),l[e]={},l[e].options=[],"radio"!==i.type&&"select"!==i.type&&"checkbox-multiple"!==i.type||jQuery.each(i.options,function(i,n){l[e].options[i]=n}),v(i.type,i.label,i.required)})}catch(e){n&&console.log("buildPreview(): "+e)}}()}),jQuery(".fb-add-field").click(function(){return function(){try{++o<=t?(jQuery("#fb-extra-fields").append('<div id="fb-new-field'+o+'" fieldid="'+o+'" class="fb-new-fields"><div class="fb-fields"><div id="'+o+'" class="fb-remove"></div><label fieldid="'+o+'" for="fb-field'+o+'"><span class="label-text">'+GrunionFB_i18n.newLabel+'</span> </label><input type="text" id="fb-field'+o+'" disabled="disabled" /></div></div>'),e.fields[o]={label:GrunionFB_i18n.newLabel,type:"text",required:!1,options:[],order:"5"},o===t&&jQuery("#fb-new-field").hide(),r=0,l={},jQuery("#fb-new-options").html('<label for="fb-option0">'+GrunionFB_i18n.optionsLabel+'</label><input type="text" id="fb-option0" optionid="0" value="'+GrunionFB_i18n.firstOptionLabel+'" class="fb-options" />'),jQuery("#fb-options").hide(),jQuery("#fb-new-label").val(GrunionFB_i18n.newLabel),jQuery("#fb-new-type").val("text"),jQuery("#fb-field-id").val(o),setTimeout(function(){jQuery("#fb-new-label").focus().select()},100)):jQuery("#fb-new-field").hide()}catch(e){n&&console.log("addField(): "+e)}}(),s(),!1}),jQuery("#fb-new-label").keyup(function(){!function(){try{var i=jQuery("#fb-field-id").val(),o=jQuery("#fb-new-label").val();0===o.length?jQuery("#fb-new-field"+i+" label .label-text").text(GrunionFB_i18n.newLabel):jQuery("#fb-new-field"+i+" label .label-text").text(o),e.fields[i].label=o}catch(e){n&&console.log("updateLabel(): "+e)}}()}),jQuery("#fb-new-type").change(function(){v()}),jQuery("#fb-new-required").click(function(){!function(){try{var i=jQuery("#fb-field-id").val();jQuery("#fb-new-required").is(":checked")?(e.fields[i].required=!0,jQuery("#fb-new-field"+i+" label").append('<span class="label-required">'+GrunionFB_i18n.requiredLabel+"</span>")):(e.fields[i].required=!1,jQuery("#fb-new-field"+i+" label .label-required").remove())}catch(e){n&&console.log("updateRequired(): "+e)}}()}),m.on("click",".fb-remove",function(){b(),function(i){try{o--;var l=i.attr("id");delete e.fields[l],jQuery("#"+l).parent().parent().remove(),o<=t&&jQuery("#fb-new-field").show()}catch(e){n&&console.log("deleteField(): "+e)}}(jQuery(this)),function(){try{jQuery.post(ajaxurl,e,function(e){e})}catch(e){alert(GrunionFB_i18n.problemGeneratingForm),n&&console.log("grabShortcode(): "+e)}}()}),jQuery("#fb-preview").submit(function(){return function(){try{jQuery("div#sortable div.fb-new-fields").each(function(i){var n=jQuery(this).attr("fieldid");e.fields[n].order=i}),jQuery.post(ajaxurl,e,function(e){var i=jQuery("#edButtonPreview",window.parent.document).hasClass("active");i||(i=jQuery("#wp-content-wrap",window.parent.document).hasClass("tmce-active"));var n,o=window.dialogArguments||opener||parent||top;i?n=o.tinyMCE.activeEditor.getContent():"string"!=typeof(n=jQuery("#editorcontainer textarea",window.parent.document).val())&&(n=jQuery(".wp-editor-area",window.parent.document).val());var t=new RegExp("\\[contact-form\\b.*?\\/?\\](?:[\\s\\S]+?\\[\\/contact-form\\])?");if(e=(e=e.replace(/\n/g," ")).replace(/%26#x002c;/g,","),n.match(t))i?o.tinyMCE.activeEditor.execCommand("mceSetContent",!1,n.replace(t,e)):jQuery("#content",window.parent.document).val(n.replace(t,e));else try{o.send_to_editor(e)}catch(t){i?o.tinyMCE.activeEditor.execCommand("mceInsertContent",!1,e):jQuery("#content",window.parent.document).val(n+e)}f()})}catch(e){n&&console.log("sendShortcodeToEditor(): "+e)}}(),!1}),jQuery("#TB_overlay, #TB_closeWindowButton",window.parent.document).mousedown(function(){confirm(GrunionFB_i18n.exitConfirmMessage)&&f()}),m.on("click","#fb-another-option",function(){!function(){try{r=jQuery("#fb-new-options .fb-options").length;var i=jQuery("#fb-field-id").val(),o=jQuery("#fb-new-type").val();"radio"===o?(jQuery("#fb-new-options").append('<div id="fb-option-box-'+r+'" class="fb-new-fields"><span optionid="'+r+'" class="fb-remove-option"></span><label></label><input type="text" id="fb-option'+r+'" optionid="'+r+'" value="'+GrunionFB_i18n.optionLabel+'" class="fb-options" /><div>'),jQuery("#fb-new-field"+i+" .fb-fields").append('<div id="fb-radio-'+i+"-"+r+'"><input type="radio" disabled="disabled" id="fb-field'+i+'" name="radio-'+i+'" /><span>'+GrunionFB_i18n.optionLabel+'</span><div class="clear"></div></div>')):"checkbox-multiple"===o?(jQuery("#fb-new-options").append('<div id="fb-option-box-'+r+'" class="fb-new-fields"><span optionid="'+r+'" class="fb-remove-option"></span><label></label><input type="text" id="fb-option'+r+'" optionid="'+r+'" value="'+GrunionFB_i18n.optionLabel+'" class="fb-options" /><div>'),jQuery("#fb-new-field"+i+" .fb-fields").append('<div id="fb-checkbox-multiple-'+i+"-"+r+'"><input type="checkbox" disabled="disabled" id="fb-field'+i+'" name="checkbox-multiple-'+i+'" /><span>'+GrunionFB_i18n.optionLabel+'</span><div class="clear"></div></div>')):(jQuery("#fb-new-options").append('<div id="fb-option-box-'+r+'" class="fb-new-fields"><span optionid="'+r+'" class="fb-remove-option"></span><label></label><input type="text" id="fb-option'+r+'" optionid="'+r+'" value="" class="fb-options" /><div>'),jQuery("#fb-field"+i).append('<option id="fb-'+i+"-"+r+'" value="'+i+"-"+r+'"></option>')),e.fields[i].options[r]="",jQuery("#fb-option"+r).focus().select()}catch(e){n&&console.log("addOption(): "+e)}}()}),m.on("keyup",".fb-options",function(){!function(i){try{var o=jQuery("#fb-field-id").val(),t=i.attr("optionid"),l=i.val(),r=jQuery("#fb-new-type").val();"radio"===r?jQuery("#fb-radio-"+o+"-"+t+" span").text(l):"checkbox-multiple"===r?jQuery("#fb-checkbox-multiple-"+o+"-"+t+" span").text(l):jQuery("#fb-"+o+"-"+t).text(l),e.fields[o].options[t]=l}catch(e){n&&console.log("updateOption(): "+e)}}(jQuery(this))}),m.on("click",".fb-remove-option",function(){!function(i){try{var o=jQuery("#fb-field-id").val(),t=jQuery("#fb-option"+i).val(),l=jQuery("#fb-new-type").val();jQuery("#fb-option-box-"+i).remove(),"radio"===l?jQuery("#fb-radio-"+o+"-"+i).remove():"checkbox-multiple"===l?jQuery("#fb-checkbox-multiple-"+o+"-"+i).remove():jQuery("#fb-"+o+"-"+i).remove();var r=e.fields[o].options.indexOf(t);-1!==r&&e.fields[o].options.splice(r,1)}catch(e){n&&console.log("removeOption(): "+e)}}(jQuery(this).attr("optionid"))}),jQuery("#tab-preview a").click(function(){return y("preview"),!1}),jQuery("#fb-prev-form").click(function(){return y("preview"),!1}),jQuery("#tab-settings a").click(function(){return y(),!1}),jQuery("#fb-field-my-email").blur(function(){!function(){try{var i=jQuery("#fb-field-my-email").val();e.to=i}catch(e){n&&console.log("updateMyEmail(): "+e)}}()}),jQuery("#fb-field-subject").blur(function(){!function(){try{var i=jQuery("#fb-field-subject").val();e.subject=i}catch(e){n&&console.log("updateSubject(): "+e)}}()}),m.on("mouseenter",".fb-form-case .fb-new-fields",function(){u("show",jQuery(this))}),m.on("mouseleave",".fb-form-case .fb-new-fields",function(){return u("hide"),!1}),m.on("click",".fb-edit-field",function(){return d(jQuery(this)),!1}),m.on("click",".fb-edit-field .fb-reorder",function(){return!1}),m.on("click","#fb-save-field",function(){return b(),p(),!1}),jQuery("#fb-feedback").click(function(){var e=jQuery(this).attr("href");return window.parent.location=e,!1}),jQuery("#sortable").sortable({axis:"y",handle:".fb-reorder",revert:!0,start:function(){jQuery(".fb-edit-field").hide()}}),jQuery("#draggable").draggable({axis:"y",handle:".fb-reorder",connectToSortable:"#sortable",helper:"clone",revert:"invalid"})}}}(); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/contact-form/js/tinymce-plugin-form-button.min.js b/plugins/jetpack/_inc/build/contact-form/js/tinymce-plugin-form-button.min.js
deleted file mode 100644
index 04bc90c6..00000000
--- a/plugins/jetpack/_inc/build/contact-form/js/tinymce-plugin-form-button.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* global grunionEditorView, tinymce */
-tinymce.create("tinymce.plugins.grunion_form",{init:function(n){n.addButton("grunion",{title:grunionEditorView.labels.tinymce_label,cmd:"grunion_add_form",icon:"grunion"}),n.addCommand("grunion_add_form",function(){grunionEditorView.default_form?n.execCommand("mceInsertContent",0,"[contact-form]"+grunionEditorView.default_form+"[/contact-form]"):n.execCommand("mceInsertContent",0,"[contact-form /]")})},createControl:function(){return null},getInfo:function(){return{longname:"Grunion Contact Form",author:"Automattic",version:"1"}}}),tinymce.PluginManager.add("grunion_form",tinymce.plugins.grunion_form); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/custom-css/custom-css/js/core-customizer-css-preview.min.js b/plugins/jetpack/_inc/build/custom-css/custom-css/js/core-customizer-css-preview.min.js
deleted file mode 100644
index 19527bfb..00000000
--- a/plugins/jetpack/_inc/build/custom-css/custom-css/js/core-customizer-css-preview.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-// Originally based on https://raw.githubusercontent.com/xwp/wp-custom-scss-demo/master/custom-scss-demo-preview.js
-/* globals jpCustomizerCssPreview */
-!function(e,s){e.settingPreviewHandlers?e.settingPreviewHandlers.custom_css=function(){}:parent.console.warn("Missing core patch that adds support for settingPreviewHandlers"),e.selectiveRefresh.partialConstructor.custom_css=e.selectiveRefresh.Partial.extend({refresh:function(){var t,r,c=e("jetpack_custom_css[preprocessor]").get();return jpCustomizerCssPreview.preprocessors.hasOwnProperty(c)?e.selectiveRefresh.Partial.prototype.refresh.call(this):(t=new s.Deferred,r=e("custom_css["+e.settings.theme.stylesheet+"]"),_.each(this.placements(),function(e){e.container.text(r.get())}),t.resolve(),t.promise())}})}(wp.customize,jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/custom-css/custom-css/js/core-customizer-css.core-4.9.min.js b/plugins/jetpack/_inc/build/custom-css/custom-css/js/core-customizer-css.core-4.9.min.js
deleted file mode 100644
index 74b6e662..00000000
--- a/plugins/jetpack/_inc/build/custom-css/custom-css/js/core-customizer-css.core-4.9.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-!function(s,e){function n(s){var n=e.control.value(s);return n?n.container:null}s(document).ready(function(){var t=n("jetpack_css_mode_control");t&&t.prepend('<span class="customize-control-title">'+window._jp_css_settings.l10n.mode+"</span>");var o=n("jetpack_mobile_css_control");o&&o.prepend('<span class="customize-control-title">'+window._jp_css_settings.l10n.mobile+"</span>");var i=n("wpcom_custom_css_content_width_control");i&&(i.append('<span class="description">'+window._jp_css_settings.l10n.contentWidth+"<span>"),i.find("input").after("<span>px</span>")),s("<div />",{id:"css-help-links",class:"css-help"}).appendTo(n("custom_css")),s("<a />",{id:"help-link",target:"_blank",rel:"noopener noreferrer",href:window._jp_css_settings.cssHelpUrl,text:window._jp_css_settings.l10n.css_help_title}).prependTo("#css-help-links"),window._jp_css_settings.areThereCssRevisions&&s("<a />",{id:"revisions-link",target:"_blank",rel:"noopener noreferrer",href:window._jp_css_settings.revisionsUrl,text:window._jp_css_settings.l10n.revisions}).prependTo("#css-help-links"),e("jetpack_custom_css[preprocessor]",function(s){s.bind(function(s){var n={default:"text/css",less:"text/x-less",sass:"text/x-scss"},t="text/css";void 0!==n[s]&&(t=n[s]),e.control("custom_css").deferred.codemirror.done(function(s){s.setOption("mode",t),"text/css"===t?s.setOption("lint",!0):s.setOption("lint",!1)})})})})}(jQuery,this.wp.customize); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/custom-css/custom-css/js/core-customizer-css.min.js b/plugins/jetpack/_inc/build/custom-css/custom-css/js/core-customizer-css.min.js
deleted file mode 100644
index 870e958e..00000000
--- a/plugins/jetpack/_inc/build/custom-css/custom-css/js/core-customizer-css.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-!function(t,s,i){i.controlConstructor.jetpackCss=i.Control.extend({modes:{default:"text/css",less:"text/x-less",sass:"text/x-scss"},_updating:!1,ready:function(){this.opts=window._jp_css_settings,this.$input=s("<textarea />",{name:this.setting.id,class:"for-codemirror hidden"}).val(this.setting()),this.container.append(this.$input),i(this.setting.id,_.bind(function(t){var s=new i.Element(this.$input);this.elements=[s],s.sync(t),s.set(t())},this)),this.opts.useRichEditor?this.initCodeMirror():this.$input.removeClass("hidden"),i.bind("ready",_.bind(this.addLabels,this))},initCodeMirror:function(){this.editor=window.CodeMirror.fromTextArea(this.$input.get(0),{mode:this.getMode(),lineNumbers:!0,tabSize:2,indentWithTabs:!0,lineWrapping:!0}),this.addListeners()},addListeners:function(){var t=!1;s("#accordion-section-custom_css > .accordion-section-title").click(_.bind(_.debounce(this.editor.refresh,250),this.editor)),this.editor.on("focus",function(t){t.refresh()}),this.editor.on("change",_.bind(function(s){this._updating=!0,this.$input.val(s.getValue()).trigger("change"),this._updating=!1,t||(window.ga&&window.ga("send","event","Customizer","Typed Custom CSS"),t=!0)},this)),this.editor.on("focus",function(){window.ga&&window.ga("send","event","Customizer","Focused CSS Editor")}),this.setting.bind("change",_.bind(this.externalChange,this))},getMode:function(){var t=i("jetpack_custom_css[preprocessor]")();return""!==t&&this.modes[t]||(t="default"),this.modes[t]},externalChange:function(){this._updating||this.editor.setValue(this.setting())},refresh:function(t){"accordion-section-custom_css"===t&&setTimeout(_.bind(function(){this.editor.refresh()},this),300)},addLabels:function(){this.addTitle("jetpack_css_mode_control",this.opts.l10n.mode),this.addTitle("jetpack_mobile_css_control",this.opts.l10n.mobile),this.addDesc("wpcom_custom_css_content_width_control",this.opts.l10n.contentWidth);var t=this._getControl("wpcom_custom_css_content_width_control");t&&t.find("input").after("<span>px</span>"),s("<div />",{id:"css-help-links",class:"css-help"}).appendTo(this.container),s("<a />",{id:"help-link",target:"_blank",href:this.opts.cssHelpUrl,text:this.opts.l10n.css_help_title}).prependTo("#css-help-links"),this.opts.areThereCssRevisions&&s("<a />",{id:"revisions-link",target:"_blank",href:this.opts.revisionsUrl,text:this.opts.l10n.revisions}).prependTo("#css-help-links")},addTitle:function(t,s){var i=this._getControl(t);i&&i.prepend('<span class="customize-control-title">'+s+"<span>")},addDesc:function(t,s){var i=this._getControl(t);i&&i.append('<span class="description">'+s+"<span>")},_getControl:function(t){var s=i.control.value(t);return s?s.container:null}})}(this.wp,jQuery,this.wp.customize); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/custom-css/custom-css/js/css-editor.min.js b/plugins/jetpack/_inc/build/custom-css/custom-css/js/css-editor.min.js
deleted file mode 100644
index 8fa05067..00000000
--- a/plugins/jetpack/_inc/build/custom-css/custom-css/js/css-editor.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* jshint onevar: false, smarttabs: true */
-/* global postboxes, addLoadEvent */
-!function(e){var s,o,c,t;c=function(){s.height(o.height()-s.offset().top-250)},t=function(){s=e("#safecss"),o=e(window),postboxes.add_postbox_toggles("editcss"),c(),e("#safecssform").on("click","#preview",function(e){e.preventDefault(),document.forms.safecssform.target="csspreview",document.forms.safecssform.action.value="preview",document.forms.safecssform.submit(),document.forms.safecssform.target="",document.forms.safecssform.action.value="save"})},window.onresize=c,addLoadEvent(t)}(jQuery),jQuery(function(e){e(".edit-preprocessor").bind("click",function(s){s.preventDefault(),e("#preprocessor-select").slideDown(),e(this).hide()}),e(".cancel-preprocessor").bind("click",function(s){s.preventDefault(),e("#preprocessor-select").slideUp(function(){e(".edit-preprocessor").show(),e("#preprocessor_choices").val(e("#custom_css_preprocessor").val())})}),e(".save-preprocessor").bind("click",function(s){s.preventDefault(),e("#preprocessor-select").slideUp(),e("#preprocessor-display").text(e("#preprocessor_choices option:selected").text()),e("#custom_css_preprocessor").val(e("#preprocessor_choices").val()).change(),e(".edit-preprocessor").show()}),e(".edit-css-mode").bind("click",function(s){s.preventDefault(),e("#css-mode-select").slideDown(),e(this).hide()}),e(".cancel-css-mode").bind("click",function(s){s.preventDefault(),e("#css-mode-select").slideUp(function(){e(".edit-css-mode").show(),e("input[name=add_to_existing_display][value="+e("#add_to_existing").val()+"]").attr("checked",!0)})}),e(".save-css-mode").bind("click",function(s){s.preventDefault(),e("#css-mode-select").slideUp(),e("#css-mode-display").text("true"===e("input[name=add_to_existing_display]:checked").val()?"Add-on":"Replacement"),e("#add_to_existing").val(e("input[name=add_to_existing_display]:checked").val()),e(".edit-css-mode").show()})}); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/custom-css/custom-css/js/use-codemirror.min.js b/plugins/jetpack/_inc/build/custom-css/custom-css/js/use-codemirror.min.js
deleted file mode 100644
index 4ee0adf8..00000000
--- a/plugins/jetpack/_inc/build/custom-css/custom-css/js/use-codemirror.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* jshint onevar: false, smarttabs: true */
-!function(t){var e={modes:{default:"text/css",less:"text/x-less",sass:"text/x-scss"},init:function(){this.$textarea=t("#safecss"),this.editor=window.CodeMirror.fromTextArea(this.$textarea.get(0),{mode:this.getMode(),lineNumbers:!0,tabSize:2,indentWithTabs:!0,lineWrapping:!0}),this.setEditorHeight()},addListeners:function(){t(window).on("resize",_.bind(_.debounce(this.setEditorHeight,100),this)),this.editor.on("change",_.bind(function(t){this.$textarea.val(t.getValue())},this)),t("#preprocessor_choices").change(_.bind(function(){this.editor.setOption("mode",this.getMode())},this))},setEditorHeight:function(){var e=t("html").height()-t(this.editor.getWrapperElement()).offset().top;this.editor.setSize(null,e)},getMode:function(){var e=t("#preprocessor_choices").val();return""!==e&&this.modes[e]||(e="default"),this.modes[e]}};t(document).ready(_.bind(e.init,e))}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/custom-post-types/comics/comics.min.js b/plugins/jetpack/_inc/build/custom-post-types/comics/comics.min.js
deleted file mode 100644
index 139ea86e..00000000
--- a/plugins/jetpack/_inc/build/custom-post-types/comics/comics.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* jshint onevar: false, smarttabs: true, devel: true */
-/* global Jetpack_Comics_Options */
-jQuery(function(e){var o={init:function(){e(document).on("dragover.jetpack-comics","body, #jetpack-comic-drop-zone",this.onDragOver),e(document).on("dragleave.jetpack-comics","body, #jetpack-comic-drop-zone",this.onDragLeave),e(document).on("drop.jetpack-comics","body, #jetpack-comic-drop-zone",this.onDrop),e("body").append(e('<div id="jetpack-comic-drop-zone"><p class="dragging" /><p class="uploading" /></div>')),e("#jetpack-comic-drop-zone").find(".dragging").text(Jetpack_Comics_Options.labels.dragging).end().find(".uploading").text(Jetpack_Comics_Options.labels.uploading).prepend(e('<span class="spinner"/>')),"FileReader"in window&&"File"in window||(e("#jetpack-comic-drop-zone .dragging").text(Jetpack_Comics_Options.labels.unsupported),e(document).off("drop.jetpack-comics").on("drop.jetpack-comics","body, #jetpack-comic-drop-zone",this.onDragLeave))},filterImageFiles:function(e){for(var o=[],n=0,a=e.length;n<a;n++)e[n].type.match(/^image\//i)&&o.push(e[n]);return o},dragTimeout:null,onDragOver:function(n){n.preventDefault(),clearTimeout(o.dragTimeout),e("body").addClass("dragging")},onDragLeave:function(){clearTimeout(o.dragTimeout),o.dragTimeout=setTimeout(function(){e("body").removeClass("dragging")},100)},onDrop:function(n){n.preventDefault(),n.stopPropagation(),n.originalEvent.stopPropagation(),n.originalEvent.preventDefault();var a=o.filterImageFiles(n.originalEvent.dataTransfer.files);if(e("body").removeClass("dragging"),0!==a.length){e("body").addClass("uploading");for(var i=new FormData,t=0,r=a.length;t<r;t++)i.append("image_"+t,a[t]);e("#jetpack-comic-drop-zone .uploading .spinner").spin(),e.ajax({url:Jetpack_Comics_Options.writeURL+"&nonce="+Jetpack_Comics_Options.nonce,data:i,processData:!1,contentType:!1,type:"POST",dataType:"json",xhrFields:{withCredentials:!0}}).done(function(o){e("#jetpack-comic-drop-zone .uploading").text(Jetpack_Comics_Options.labels.processing),"url"in o?document.location.href=o.url:"error"in o&&(alert(o.error),e("body").removeClass("uploading"))}).fail(function(){alert(Jetpack_Comics_Options.labels.error)})}else alert(Jetpack_Comics_Options.labels.invalidUpload)}};o.init()}); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/custom-post-types/js/many-items.min.js b/plugins/jetpack/_inc/build/custom-post-types/js/many-items.min.js
deleted file mode 100644
index 8f18038e..00000000
--- a/plugins/jetpack/_inc/build/custom-post-types/js/many-items.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* jshint onevar: false, smarttabs: true */
-!function(t){var n,a,e;e={init:function(){var i,o,r=this;return this.on("keypress.manyItemsTable",function(t){13===t.which&&(t.preventDefault(),"function"==typeof FormData&&e.submitRow.apply(r),e.addRow.apply(r))}).on("focus.manyItemsTable",":input",function(){r.data("currentRow",t(this).parents("tr:first"))}),o=(i=this.find("tbody:last")).find("tr:first").clone(),this.data("form",this.parents("form:first")),this.data("tbody",i),this.data("row",o),this.data("currentRow",o),n=t("#nova-menu-tax"),a=t("#_wpnonce"),this},destroy:function(){return this.off(".manyItemsTable"),this},submitRow:function(){var e,i,o,r;return i=(e=this.data("currentRow")).find(":input"),o=this.data("form").find(":input").not(i).attr("disabled",!0).end(),(r=new FormData(this.data("form").get(0))).append("ajax","1"),r.append("nova_menu_tax",n.val()),r.append("_wpnonce",a.val()),o.attr("disabled",!1),t.ajax({url:"",type:"POST",data:r,processData:!1,contentType:!1}).complete(function(t){e.html(t.responseText)}),i.attr("disabled",!0),this},addRow:function(){var t=this.data("row").clone();return t.appendTo(this.data("tbody")),t.find(":input:first").focus(),this}},t.fn.manyItemsTable=function(n){return e[n]?e[n].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof n&&n?(t.error("Method "+n+" does not exist on jQuery.manyItemsTable"),this):e.init.apply(this,arguments)},t.fn.clickAddRow=function(){var n=this.find("tbody:last"),a=n.find("tr:first").clone();t(a).find("input, textarea").val(""),t(a).appendTo(n)}}(jQuery),jQuery(".many-items-table").one("focus",":input",function(t){jQuery(t.delegateTarget).manyItemsTable()}),jQuery(".many-items-table").on("click","a.nova-new-row",function(t){jQuery(t.delegateTarget).clickAddRow()}); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/custom-post-types/js/menu-checkboxes.min.js b/plugins/jetpack/_inc/build/custom-post-types/js/menu-checkboxes.min.js
deleted file mode 100644
index 1cf20df1..00000000
--- a/plugins/jetpack/_inc/build/custom-post-types/js/menu-checkboxes.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* jshint onevar: false, smarttabs: true, devel: true */
-!function(c){var n={inputs:null,popInputs:null,initialize:function(){n.popInputs=c("#nova_menuchecklist-pop").find(":checkbox"),n.inputs=c("#nova_menuchecklist").find(":checkbox").change(n.checkOne).change(n.syncPop),n.isChecked()||n.checkFirst(),n.syncPop()},syncPop:function(){n.popInputs.each(function(){var n=c(this);n.prop("checked",c("#in-nova_menu-"+n.val()).is(":checked"))})},isChecked:function(){return n.inputs.is(":checked")},checkFirst:function(){n.inputs.first().prop("checked",!0)},checkOne:function(){return c(this).is(":checked")?n.inputs.not(this).prop("checked",!1):c(this).closest("#nova_menuchecklist").find(":checked").length>0?c(this).prop("checked",!1):n.checkFirst()}};c(n.initialize)}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/custom-post-types/js/nova-drag-drop.min.js b/plugins/jetpack/_inc/build/custom-post-types/js/nova-drag-drop.min.js
deleted file mode 100644
index 8778acf2..00000000
--- a/plugins/jetpack/_inc/build/custom-post-types/js/nova-drag-drop.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* jshint onevar: false, smarttabs: true */
-/* global _novaDragDrop */
-!function(e){var n;e(document).ready(function(){(n=e("#the-list")).sortable({cancel:".no-items",stop:function(t,r){if(r.item.is(":first-child"))return n.sortable("cancel");n.find(".menu-label-row").each(function(){var n=e(this).data("term_id");e(this).nextUntil(".menu-label-row").each(function(t){var r=e(this);r.find(".menu-order-value").val(t),r.find(".nova-menu-term").val(n)})})}}),e("#posts-filter").append('<input type="hidden" name="'+_novaDragDrop.nonceName+'" value="'+_novaDragDrop.nonce+'" />'),e(".tablenav").prepend('<input type="submit" class="button-primary button-reorder alignright" value="'+_novaDragDrop.reorder+'" name="'+_novaDragDrop.reorderName+'" />'),e("#posts-filter").attr("method","post")})}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/facebook-embed.min.js b/plugins/jetpack/_inc/build/facebook-embed.min.js
deleted file mode 100644
index 181fa615..00000000
--- a/plugins/jetpack/_inc/build/facebook-embed.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* global FB, jpfbembed */
-!function(e){var n=function(){var e,n;"undefined"!=typeof FB&&FB.XFBML?FB.XFBML.parse():((e=document.createElement("div")).id="fb-root",document.getElementsByTagName("body")[0].appendChild(e),n="//connect.facebook.net/"+jpfbembed.locale+"/sdk.js#xfbml=1",jpfbembed.appid&&(n+="&appId="+jpfbembed.appid),n+="&version=v2.3",jQuery.getScript(n))};e.fbAsyncInit=function(){FB.init({appId:jpfbembed.appid,version:"v2.3"}),FB.XFBML.parse()},"undefined"!=typeof infiniteScroll&&jQuery(document.body).on("post-load",n),n()}(this); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/gallery-settings.min.js b/plugins/jetpack/_inc/build/gallery-settings.min.js
deleted file mode 100644
index 4955d7b6..00000000
--- a/plugins/jetpack/_inc/build/gallery-settings.min.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/**
- * Jetpack Gallery Settings
- */
-!function(e){var t=wp.media;t.view.Settings.Gallery=t.view.Settings.Gallery.extend({render:function(){var a=this.$el;return t.view.Settings.prototype.render.apply(this,arguments),a.append(t.template("jetpack-gallery-settings")),t.gallery.defaults.type="default",this.update.apply(this,["type"]),a.find("select[name=type]").on("change",function(){var t=a.find("select[name=columns]").closest("label.setting");"default"===e(this).val()||"thumbnails"===e(this).val()?t.show():t.hide()}).change(),this}})}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/idc-notice.min.js b/plugins/jetpack/_inc/build/idc-notice.min.js
deleted file mode 100644
index 0d410e4b..00000000
--- a/plugins/jetpack/_inc/build/idc-notice.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* global idcL10n, jQuery, analytics, history, wpCookies */
-!function(e){var i,c=idcL10n.nonce,n=idcL10n.currentUrl,t=idcL10n.apiRoot,o=e(".jp-idc-notice"),a=e(".jp-idc-notice .dops-button"),r=idcL10n.tracksUserData,s=idcL10n.tracksEventData,d=e("#wp-admin-bar-jetpack-idc"),f=e("#jp-idc-confirm-safe-mode-action"),p=e("#jp-idc-fix-connection-action"),l=e("#jp-idc-migrate-action"),u=e("#jp-idc-reconnect-site-action"),m=e(".jp-idc-error__notice"),_=!1;function h(){a.prop("disabled",!0)}function j(){a.prop("disabled",!1)}function k(){m.hide(),g("confirm_safe_mode");var i=t+"jetpack/v4/identity-crisis/confirm-safe-mode";h(),e.ajax({method:"POST",beforeSend:function(e){e.setRequestHeader("X-WP-Nonce",c)},url:i,data:{},success:function(){o.hide(),d.removeClass("hide"),window.location.search&&1===window.location.search.indexOf("page=jetpack")&&window.location.reload()},error:function(e){_="confirm",v(e),j()}})}function w(){m.hide(),g("migrate");var i=t+"jetpack/v4/identity-crisis/migrate";h(),e.ajax({method:"POST",beforeSend:function(e){e.setRequestHeader("X-WP-Nonce",c)},url:i,data:{},success:function(){o.hide(),e("body").hasClass("toplevel_page_jetpack")&&window.location.reload(!0)},error:function(e){_="migrate",v(e),j()}})}function y(){m.hide(),g("start_fresh");var i=t+"jetpack/v4/identity-crisis/start-fresh";h(),e.ajax({method:"POST",beforeSend:function(e){e.setRequestHeader("X-WP-Nonce",c)},url:i,data:{},success:function(e){window.location=e+"&from=idc-notice"},error:function(e){_="start-fresh",v(e),j()}})}function v(i){var c=e(".jp-idc-error__desc");i&&i.responseJSON&&i.responseJSON.message?c.html(i.responseJSON.message):c.html(""),m.css("display","flex")}function g(e,i){void 0!==i&&"object"==typeof i||(i={}),e&&e.length&&"undefined"!=typeof analytics&&analytics.tracks&&analytics.mc&&(e=0!==(e=e.replace(/-/g,"_")).indexOf("jetpack_idc_")?"jetpack_idc_"+e:e,analytics.tracks.recordEvent(e,i),e=(e=e.replace("jetpack_idc_","")).replace(/_/g,"-"),analytics.mc.bumpStat("jetpack-idc",e))}"undefined"!=typeof analytics&&analytics.initialize(r.userid,r.username),s.isAdmin?g("notice_view"):g("non_admin_notice_view",{page:s.currentScreen}),i=void 0!==i&&i,window.location.search&&-1!==window.location.search.indexOf("jetpack_idc_clear_confirmation")&&(g("clear_confirmation_clicked"),history&&history.pushState?history.pushState({},"",n):i&&(window.location.href=n)),o.on("click",".notice-dismiss",function(){var e="https:"===window.location.protocol;wpCookies.set("jetpack_idc_dismiss_notice","1",604800,!1,!1,e),g("non_admin_notice_dismiss",{page:s.currentScreen})}),o.on("click","#jp-idc-error__action",function(){switch(m.hide(),_){case"confirm":k();break;case"start-fresh":y();break;case"migrate":w();break;default:return}}),f.on("click",k),p.on("click",function(){m.hide(),g("fix_connection"),o.addClass("jp-idc-show-second-step")}),u.on("click",y),l.on("click",w)}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/infinite-scroll/infinity.min.js b/plugins/jetpack/_inc/build/infinite-scroll/infinity.min.js
deleted file mode 100644
index b5951ec5..00000000
--- a/plugins/jetpack/_inc/build/infinite-scroll/infinity.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-!function($){// Open closure
-// Local vars
-var Scroller,ajaxurl,stats,type,text,totop,isIE=-1!=navigator.userAgent.search("MSIE");if(isIE)var IEVersion=navigator.userAgent.match(/MSIE\s?(\d+)\.?\d*;/),IEVersion=parseInt(IEVersion[1]);function fullscreenState(){return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement?1:0}"https:"==document.location.protocol&&(infiniteScroll.settings.ajaxurl=infiniteScroll.settings.ajaxurl.replace("http://","https://")),Scroller=function(e){var t=this;this.id=e.id,this.body=$(document.body),this.window=$(window),this.element=$("#"+e.id),this.wrapperClass=e.wrapper_class,this.ready=!0,this.disabled=!1,this.page=1,this.offset=e.offset,this.currentday=e.currentday,this.order=e.order,this.throttle=!1,this.handle='<div id="infinite-handle"><span><button>'+text.replace("\\","")+"</button></span></div>",this.click_handle=e.click_handle,this.google_analytics=e.google_analytics,this.history=e.history,this.origURL=window.location.href,this.pageCache={},this.footer=$("#infinite-footer"),this.footer.wrap=e.footer,this.wpMediaelement=null,"scroll"==type?(this.window.bind("scroll.infinity",function(){this.throttle=!0}),t.gotop(),setInterval(function(){this.throttle&&(this.throttle=!1,t.thefooter(),t.refresh(),t.determineURL())},250),t.ensureFilledViewport(),this.body.bind("post-load",{self:t},t.checkViewportOnLoad)):"click"==type&&(this.click_handle&&this.element.append(this.handle),this.body.delegate("#infinite-handle","click.infinity",function(){t.click_handle&&$("#infinite-handle").remove(),t.refresh()})),this.body.bind("post-load",{self:t},t.initializeMejs)},Scroller.prototype.check=function(){var e=this.element.offset();return"object"==typeof e&&this.window.scrollTop()+this.window.height()>e.top+this.element.outerHeight(!1)-2*this.window.height()},Scroller.prototype.render=function(e){this.body.addClass("infinity-success"),this.element.append(e.html),this.body.trigger("post-load",e),this.ready=!0},Scroller.prototype.query=function(){return{page:this.page+this.offset,currentday:this.currentday,order:this.order,scripts:window.infiniteScroll.settings.scripts,styles:window.infiniteScroll.settings.styles,query_args:window.infiniteScroll.settings.query_args,query_before:window.infiniteScroll.settings.query_before,last_post_date:window.infiniteScroll.settings.last_post_date}},Scroller.prototype.gotop=function(){var e=$("#infinity-blog-title");e.attr("title",totop),e.bind("click",function(e){$("html, body").animate({scrollTop:0},"fast"),e.preventDefault()})},Scroller.prototype.thefooter=function(){var e;"string"===$.type(this.footer.wrap)&&(e=$("body #"+this.footer.wrap).outerWidth(!1))>479&&this.footer.find(".container").css("width",e),this.window.scrollTop()>=350?this.footer.animate({bottom:0},"fast"):this.window.scrollTop()<350&&this.footer.animate({bottom:"-50px"},"fast")},Scroller.prototype.refresh=function(){var self=this,query,jqxhr,load,loader,color,customized;if(!this.disabled&&this.ready&&this.check()){if(this.ready=!1,this.click_handle){loader='<span class="infinite-loader"></span>',this.element.append(loader),loader=this.element.find(".infinite-loader"),color=loader.css("color");try{loader.spin("medium-left",color)}catch(e){}}return query=$.extend({action:"infinite_scroll"},this.query()),"undefined"!=typeof wp&&wp.customize&&wp.customize.settings.theme&&(customized={},query.wp_customize="on",query.theme=wp.customize.settings.theme.stylesheet,wp.customize.each(function(e){e._dirty&&(customized[e.id]=e())}),query.customized=JSON.stringify(customized),query.nonce=wp.customize.settings.nonce.preview),jqxhr=$.post(infiniteScroll.settings.ajaxurl,query),jqxhr.fail(function(){self.click_handle&&loader.hide(),self.ready=!0}),jqxhr.done(function(response){if(self.click_handle&&loader.hide(),response&&response.type&&"success"==response.type&&(response.scripts&&$(response.scripts).each(function(){var e=this.footer?"body":"head";if(window.infiniteScroll.settings.scripts.push(this.handle),this.extra_data){var t=document.createElement("script"),i=document.createTextNode("//<![CDATA[ \n"+this.extra_data+"\n//]]>");t.type="text/javascript",t.appendChild(i),document.getElementsByTagName(e)[0].appendChild(t)}var s=document.createElement("script");s.type="text/javascript",s.src=this.src,s.id=this.handle,"wp-mediaelement"===this.handle&&self.body.unbind("post-load",self.initializeMejs),"wp-mediaelement"===this.handle&&"undefined"==typeof mejs?(self.wpMediaelement={},self.wpMediaelement.tag=s,self.wpMediaelement.element=e,setTimeout(self.maybeLoadMejs.bind(self),250)):document.getElementsByTagName(e)[0].appendChild(s)}),response.styles&&$(response.styles).each(function(){window.infiniteScroll.settings.styles.push(this.handle);var style=document.createElement("link");if(style.rel="stylesheet",style.href=this.src,style.id=this.handle+"-css",this.conditional&&(!isIE||!eval(this.conditional.replace(/%ver/g,IEVersion))))var style=!1;style&&document.getElementsByTagName("head")[0].appendChild(style)}),self.pageCache[self.page+self.offset]=response,self.page++,stats&&((new Image).src=document.location.protocol+"//pixel.wp.com/g.gif?"+stats+"&post=0&baba="+Math.random()),"object"==typeof response.postflair&&"object"==typeof WPCOM_sharing_counts&&(WPCOM_sharing_counts=$.extend(WPCOM_sharing_counts,response.postflair)),self.render.apply(self,arguments),"click"==type?response.lastbatch?self.click_handle?($("#infinite-handle").remove(),self.body.addClass("infinity-end").removeClass("infinity-success")):self.body.trigger("infinite-scroll-posts-end"):self.click_handle?self.element.append(self.handle):self.body.trigger("infinite-scroll-posts-more"):response.lastbatch&&(self.disabled=!0,self.body.addClass("infinity-end").removeClass("infinity-success")),response.currentday&&(self.currentday=response.currentday),self.google_analytics)){var ga_url=self.history.path.replace(/%d/,self.page);"object"==typeof _gaq&&_gaq.push(["_trackPageview",ga_url]),"function"==typeof ga&&ga("send","pageview",ga_url)}}),jqxhr}},Scroller.prototype.maybeLoadMejs=function(){null!==this.wpMediaelement&&("undefined"==typeof mejs?setTimeout(this.maybeLoadMejs,250):(document.getElementsByTagName(this.wpMediaelement.element)[0].appendChild(this.wpMediaelement.tag),this.wpMediaelement=null,this.body.bind("post-load",{self:this},this.initializeMejs)))},Scroller.prototype.initializeMejs=function(e,t){!t.html||-1===t.html.indexOf("wp-audio-shortcode")&&-1===t.html.indexOf("wp-video-shortcode")||"undefined"!=typeof mejs&&$(function(){var e={};"undefined"!=typeof _wpmejsSettings&&(e.pluginPath=_wpmejsSettings.pluginPath),e.success=function(e){var t=e.attributes.autoplay&&"false"!==e.attributes.autoplay;"flash"===e.pluginType&&t&&e.addEventListener("canplay",function(){e.play()},!1)},$(".wp-audio-shortcode, .wp-video-shortcode").not(".mejs-container").mediaelementplayer(e)})},Scroller.prototype.ensureFilledViewport=function(){var e=this.window.height(),t=this.element.height(),i=0,s=0;0!==t||($(this.element.selector+" > li").each(function(){t+=$(this).height()}),0!==t)?($("."+this.wrapperClass).each(function(){i+=$(this).height(),s++}),s>0?i/=s:i=0,t<e&&t+i<e?(this.ready=!0,this.refresh()):this.body.unbind("post-load",this.checkViewportOnLoad)):this.body.unbind("post-load",this.checkViewportOnLoad)},Scroller.prototype.checkViewportOnLoad=function(e){e.data.self.ensureFilledViewport()};var previousFullScrenState=fullscreenState();Scroller.prototype.determineURL=function(){var e=this,t=$(window).scrollTop(),i=t+$(window).height(),s=i-t,o=[],n=[],l=!1,r=fullscreenState();if(previousFullScrenState^r)previousFullScrenState=r;else{if(previousFullScrenState=r,$("."+e.wrapperClass).each(function(){var e,s=$(this).attr("id"),l=$(this).offset().top,r=$(this).outerHeight(!1),a=$(this).data("page-num");0===r&&$("> *",this).each(function(){r+=$(this).outerHeight(!1)}),e=l+r,l<t&&e>i?o.push({id:s,top:l,bottom:e,pageNum:a}):l>t&&l<i?o.push({id:s,top:l,bottom:e,pageNum:a}):e>t&&e<i?o.push({id:s,top:l,bottom:e,pageNum:a}):n.push({id:s,top:l,bottom:e,pageNum:a})}),$.each(n,function(){var t=$("#"+this.id);t.hasClass("is--replaced")||(e.pageCache[this.pageNum].html=t.html(),t.css("min-height",this.bottom-this.top+"px").addClass("is--replaced").empty())}),$.each(o,function(){var t=$("#"+this.id);t.hasClass("is--replaced")&&(t.css("min-height","").removeClass("is--replaced"),this.pageNum in e.pageCache&&(t.html(e.pageCache[this.pageNum].html),e.body.trigger("post-load",e.pageCache[this.pageNum])))}),0==o.length)l=-1;else if(1==o.length){var a=o.pop();l=(i-a.top)/s<.5?-1:a.pageNum}else{var c=0;$.each(o,function(e,o){var n=0,r=0,a=0;o.top>t&&o.top<i&&(n=(i-o.top)/s),o.bottom>t&&o.bottom<i&&(r=(o.bottom-t)/s),n>=r?a=n:r>=n&&(a=r),a>c&&(l=o.pageNum,c=a)})}"number"==typeof l&&e.updateURL(l)}},Scroller.prototype.updateURL=function(e){if(window.history.pushState){var t=-1==e?this.origURL:window.location.protocol+"//"+this.history.host+this.history.path.replace(/%d/,e)+this.history.parameters;window.location.href!=t&&history.pushState(null,null,t)}},Scroller.prototype.pause=function(){this.disabled=!0},Scroller.prototype.resume=function(){this.disabled=!1},$(document).ready(function(){if("object"==typeof infiniteScroll){if($(document.body).addClass(infiniteScroll.settings.body_class),ajaxurl=infiniteScroll.settings.ajaxurl,stats=infiniteScroll.settings.stats,type=infiniteScroll.settings.type,text=infiniteScroll.settings.text,totop=infiniteScroll.settings.totop,infiniteScroll.scroller=new Scroller(infiniteScroll.settings),"click"==type){var e=null;$(window).bind("scroll",function(){e||(e=setTimeout(function(){infiniteScroll.scroller.determineURL(),e=null},250))})}"undefined"!=typeof wp&&wp.customize&&wp.customize.selectiveRefresh&&(wp.customize.selectiveRefresh.bind("partial-content-rendered",function(e){var t;"string"==typeof e.addedContent?t=e.addedContent:e.container&&(t=$(e.container).html()),t&&$(document.body).trigger("post-load",{html:t})}),"undefined"==typeof MutationObserver&&$(document.body).on("post-load",function(e,t){var i=null;t.html&&-1!==t.html.indexOf("data-customize-partial")&&(infiniteScroll.settings.id&&(i=$("#"+infiniteScroll.settings.id)),wp.customize.selectiveRefresh.addPartials(i))}))}})}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/jetpack-admin.min.js b/plugins/jetpack/_inc/build/jetpack-admin.min.js
deleted file mode 100644
index aefded30..00000000
--- a/plugins/jetpack/_inc/build/jetpack-admin.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-!function(e){e(document).ready(function(){var a,o,t;e(".filter-search").on("click",function(){e(this).toggleClass("active"),e(".manage-right").toggleClass("show"),e(".shade").toggle()}),e(".checkall").on("click",function(){e(".table-bordered").find(":checkbox").prop("checked",this.checked)}),e(".shade, .modal .close").on("click",function(a){e(".shade, .modal").hide(),e(".manage-right").removeClass("show"),a.preventDefault()}),a=e(".frame.top"),o=e(".frame.bottom"),(t=e("body")).scroll(function(){33>a.offset().top&&(a.addClass("fixed"),t.addClass("jp-frame-top-fixed")),120<=o.offset().top&&(a.removeClass("fixed"),t.removeClass("jp-frame-top-fixed"))}),e("table.jetpack-modules",o).addClass("with-transparency"),e(".manage-left",o).css("width",""),e(".manage-right",o).show()})}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/jetpack-connection-banner.min.js b/plugins/jetpack/_inc/build/jetpack-connection-banner.min.js
deleted file mode 100644
index cf8a2320..00000000
--- a/plugins/jetpack/_inc/build/jetpack-connection-banner.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* global jQuery, jp_banner */
-!function(e){var n=e(".jp-wpcom-connect__vertical-nav-container"),c=e(".jp-wpcom-connect__content-container"),i=e(".jp-banner__button-container .next-feature"),t=e(".jp-connect-full__container"),o=e(".jp-connect-full__dismiss, .jp-connect-full__dismiss-paragraph"),s=e("#welcome-panel"),a=e("#message"),l=e(".connection-banner-dismiss");function r(e){n.find(".vertical-menu__feature-item-is-selected").removeClass("vertical-menu__feature-item-is-selected"),c.find(".jp__slide-is-active").removeClass("jp__slide-is-active"),n.children().eq(e).addClass("vertical-menu__feature-item-is-selected"),c.children().eq(e).addClass("jp__slide-is-active")}e(window).on("load",function(){s.insertBefore(a)}),l.on("click",function(){e(a).hide();var n={action:"jetpack_connection_banner",nonce:jp_banner.connectionBannerNonce,dismissBanner:!0};e.post(jp_banner.ajax_url,n,function(n){!0!==n.success&&e(a).show()})}),n.on("click",".vertical-menu__feature-item:not( .vertical-menu__feature-item-is-selected )",function(){r(e(this).index())}),i.on("click",function(n){n.preventDefault(),r(e(this).closest(".jp-wpcom-connect__slide").index()+1)}),o.on("click",function(){e(t).hide()}),e(document).keyup(function(n){27===n.keyCode&&e(o).click()})}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/jetpack-jitm.min.js b/plugins/jetpack/_inc/build/jetpack-jitm.min.js
deleted file mode 100644
index df295af2..00000000
--- a/plugins/jetpack/_inc/build/jetpack-jitm.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-jQuery(document).ready(function(t){var a={default:function(a){var e='<div class="jitm-card jitm-banner '+(a.CTA.message?"has-call-to-action":"")+" is-upgrade-premium "+a.content.classes+'" data-stats_url="'+a.jitm_stats_url+'">';if(e+='<div class="jitm-banner__icon-plan">'+a.content.icon+"</div>",e+='<div class="jitm-banner__content">',e+='<div class="jitm-banner__info">',e+='<div class="jitm-banner__title">'+a.content.message+"</div>",a.content.description&&""!==a.content.description){if(e+='<div class="jitm-banner__description">'+a.content.description,a.content.list.length>0){e+='<ul class="banner__list">';for(var i=0;i<a.content.list.length;i++){var n=a.content.list[i].item;a.content.list[i].url&&(n='<a href="'+a.content.list[i].url+'" target="_blank" rel="noopener noreferrer" data-module="'+a.feature_class+'" data-jptracks-name="nudge_item_click" data-jptracks-prop="jitm-'+a.id+'">'+n+"</a>"),e+='<li><svg class="gridicon gridicons-checkmark" height="16" width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M9 19.414l-6.707-6.707 1.414-1.414L9 16.586 20.293 5.293l1.414 1.414" /></g></svg>'+n+"</li>"}}e+="</div>"}if(e+="</div>",a.activate_module&&(e+='<div class="jitm-banner__action" id="jitm-banner__activate">',e+='<a href="#" data-module="'+a.activate_module+'" type="button" class="jitm-button is-compact is-primary jptracks" data-jptracks-name="nudge_click" data-jptracks-prop="jitm-'+a.id+'-activate_module">'+window.jitm_config.activate_module_text+"</a>",e+="</div>"),a.CTA.message){var c="jitm-button is-compact jptracks";a.CTA.primary&&null===a.activate_module&&(c+=" is-primary"),e+='<div class="jitm-banner__action">',e+='<a href="'+a.url+'" target="'+(!1===a.CTA.newWindow?"_self":"_blank")+'" rel="noopener noreferrer" title="'+a.CTA.message+'" data-module="'+a.feature_class+'" type="button" class="'+c+'" data-jptracks-name="nudge_click" data-jptracks-prop="jitm-'+a.id+'">'+a.CTA.message+"</a>",e+="</div>"}return e+='<a href="#" data-module="'+a.feature_class+'" class="jitm-banner__dismiss"></a>',e+="</div>",t(e+="</div>")}},e=function(){t(".jetpack-jitm-message").each(function(){var e=t(this),i=e.data("message-path"),n=e.data("query"),c=e.data("redirect"),r=location.hash;"_dashboard"!==(r=r.replace(/#\//,"_"))&&(i=i.replace("toplevel_page_jetpack","toplevel_page_jetpack"+r)),t.get(window.jitm_config.api_root+"jetpack/v4/jitm",{message_path:i,query:n,_wpnonce:e.data("nonce")}).then(function(i){"object"==typeof i&&i[1]&&(i=[i[1]]),0!==i.length&&i[0].content&&function(e,i,n){var c;(c=i.template)&&a[c]||(c="default"),i.url=i.url+"&redirect="+n;var r,o=a[c](i);o.find(".jitm-banner__dismiss").click((r=o,function(a){a.preventDefault(),r.hide(),t.ajax({url:window.jitm_config.api_root+"jetpack/v4/jitm",method:"POST",data:{id:i.id,feature_class:i.feature_class}})})),t("#jp-admin-notices").length>0?(e.innerHTML=o,t("#jp-admin-notices").find(".jitm-card")&&t(".jitm-card").replaceWith(o),o.prependTo(t("#jp-admin-notices"))):e.replaceWith(o),o.find("#jitm-banner__activate a").click(function(){var a=t(this);if(a.attr("disabled"))return!1;t.ajax({url:window.jitm_config.api_root+"jetpack/v4/module/"+a.data("module")+"/active",method:"POST",beforeSend:function(a){a.setRequestHeader("X-WP-Nonce",e.data("nonce")),t("#jitm-banner__activate a").text(window.jitm_config.activating_module_text),t("#jitm-banner__activate a").attr("disabled",!0)}}).done(function(){t("#jitm-banner__activate a").text(window.jitm_config.activated_module_text),t("#jitm-banner__activate a").attr("disabled",!0),setTimeout(function(){o.fadeOut("slow")},2e3)})})}(e,i[0],c)})})};e(),t(window).bind("hashchange",function(t){if(t.originalEvent.newURL.indexOf("jetpack#/")>=0){var a=document.querySelector(".jitm-card");a&&a.remove(),e()}})}); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/jetpack-modules.min.js b/plugins/jetpack/_inc/build/jetpack-modules.min.js
deleted file mode 100644
index 8f3ef1d4..00000000
--- a/plugins/jetpack/_inc/build/jetpack-modules.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-!function(e,t,a,n,s,o,i,l){"use strict";var c,r,u,d,p;t(".wp-list-table.jetpack-modules"),u=t(".navbar-form"),d=t("#srch-term-search-input"),t(".jp-frame"),p=t("#doaction"),c=new n.Modules({items:a}),new s.List_Table({el:"#the-list",model:c}),c.trigger("change"),r=function(e){t(".subsubsub").find('a[data-title="'+t(this).data("title")+'"]').addClass("current").closest("li").siblings().find("a.current").removeClass("current"),e.preventDefault(),c.trigger("change")},t(".subsubsub a").on("click",{modules:c},r),u.on("click",".button-group .button",{modules:c},function(e){e.preventDefault(),t(this).addClass("active").siblings(".active").removeClass("active"),c.trigger("change")}),d.on("keyup search",function(e){9!==e.keyCode&&c.trigger("change")}),d.prop("placeholder",o.search_placeholder),p.on("click",function(a){var n,s=t(".jetpack-modules-list-table-form").serialize(),o=t(this).siblings("select").val();s.length&&"-1"!==o&&(n="admin.php?page=jetpack&action="+encodeURIComponent(o),n+="&"+s,n+="&_wpnonce="+encodeURIComponent(l.bulk),e.location.href=n),a.preventDefault()})}(this,jQuery,window.jetpackModulesData.modules,this.jetpackModules.models,this.jetpackModules.views,window.jetpackModulesData.i18n,window.jetpackModulesData.modalinfo,window.jetpackModulesData.nonces); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/jetpack-modules.models.min.js b/plugins/jetpack/_inc/build/jetpack-modules.models.min.js
deleted file mode 100644
index a6c24f06..00000000
--- a/plugins/jetpack/_inc/build/jetpack-modules.models.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-this.jetpackModules=this.jetpackModules||{},window.jetpackModules.models=function(t,e,r,s){"use strict";var a={};return a.Modules=s.Model.extend({visibles:{},filter_and_sort:function(){var t,s=e(".subsubsub .current"),a=this.get("raw"),i=e(".button-group.filter-active .active"),o=e(".button-group.sort .active"),n=e("#srch-term-search-input").val().toLowerCase();return s.closest("li").hasClass("all")||(a=r.filter(a,function(t){return r.contains(t.module_tags,s.data("title"))})),i.data("filter-by")&&(a=r.filter(a,function(t){return t[i.data("filter-by")]===i.data("filter-value")})),n.length&&(a=r.filter(a,function(t){return-1!==(t.name+" "+t.description+" "+t.long_description+" "+t.search_terms+" "+t.jumpstart_desc+" "+t.module_tags).toLowerCase().indexOf(n)})),o.data("sort-by")&&(a=r.sortBy(a,o.data("sort-by")),"reverse"===o.data("sort-order")&&a.reverse()),t=r.groupBy(a,"available"),r.has(t,"false")&&(a=[].concat(t[!0],t[!1])),this.set("items",a),this},initialize:function(){var t=this.get("items");this.set("raw",t)}}),a}(0,jQuery,_,Backbone); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/jetpack-modules.views.min.js b/plugins/jetpack/_inc/build/jetpack-modules.views.min.js
deleted file mode 100644
index 66204117..00000000
--- a/plugins/jetpack/_inc/build/jetpack-modules.views.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-this.jetpackModules=this.jetpackModules||{},window.jetpackModules.views=function(t,e,a,o,i){"use strict";var n={};return n.List_Table=o.View.extend({template:i.template("Jetpack_Modules_List_Table_Template"),updateUrl:function(){if(t.history.replaceState){var a=t.location.href.split("?")[0]+"?page=jetpack_modules",o=e(".subsubsub .current"),i=e(".button-group.filter-active .active"),n=e(".button-group.sort .active"),s=e("#srch-term-search-input").val();s.length&&(a+="&s="+encodeURIComponent(s)),o.hasClass("all")||(a+="&module_tag="+encodeURIComponent(o.data("title"))),i.data("filter-by")&&(a+="&"+encodeURIComponent(i.data("filter-by"))+"="+encodeURIComponent(i.data("filter-value"))),"name"!==n.data("sort-by")&&(a+="&sort_by="+encodeURIComponent(n.data("sort-by"))),t.history.replaceState({},"",a)}},render:function(){return this.model.filter_and_sort(),this.$el.html(this.template(this.model.attributes)),this.updateUrl(),this},initialize:function(){this.listenTo(this.model,"change",this.render)}}),n}(this,jQuery,_,Backbone,wp); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/jquery.jetpack-resize.min.js b/plugins/jetpack/_inc/build/jquery.jetpack-resize.min.js
deleted file mode 100644
index 4fce7781..00000000
--- a/plugins/jetpack/_inc/build/jquery.jetpack-resize.min.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* global Jetpack, JSON */
-/**
- * Resizeable Iframes.
- *
- * Start listening to resize postMessage events for selected iframes:
- * $( selector ).Jetpack( 'resizeable' );
- * - OR -
- * Jetpack.resizeable( 'on', context );
- *
- * Resize selected iframes:
- * $( selector ).Jetpack( 'resizeable', 'resize', { width: 100, height: 200 } );
- * - OR -
- * Jetpack.resizeable( 'resize', { width: 100, height: 200 }, context );
- *
- * Stop listening to resize postMessage events for selected iframes:
- * $( selector ).Jetpack( 'resizeable', 'off' );
- * - OR -
- * Jetpack.resizeable( 'off', context );
- *
- * Stop listening to all resize postMessage events:
- * Jetpack.resizeable( 'off' );
- */
-!function(e){var t,a,i,n,r=!1,o=[],s=!1;void 0===window.Jetpack&&(window.Jetpack={getTarget:function(t){return this instanceof jQuery?t?this.filter(t):this:t?e(t):t}}),void 0===e.fn.Jetpack&&(e.fn.Jetpack=function(t){if("function"==typeof Jetpack[t])return Jetpack[t].apply(this,Array.prototype.slice.call(arguments,1));e.error('Namespace "'+t+'" does not exist on jQuery.Jetpack')}),"function"==typeof window.postMessage?(t=function(e){return e.match(/^https?:\/\//)||(e=document.location.href),e.split("/").slice(0,3).join("/")},a=function(){r=!0,e(window).on("message.JetpackResizeableIframe",function(t){var a,i=t.originalEvent;if(-1!==e.inArray(i.origin,o)){if("object"==typeof i.data)a=i.data.data;else try{a=JSON.parse(i.data)}catch(e){a=!1}a.data&&void 0!==(a=a.data).action&&"resize"===a.action&&s.filter(function(){return void 0!==a.name?this.name===a.name:i.source===this.contentWindow}).first().Jetpack("resizeable","resize",a)}})},i=function(){r=!1,e(window).off("message.JetpackResizeableIframe"),o=[],e(".jetpack-resizeable").removeClass("jetpack-resizeable"),s=!1},n={on:function(i){var n=Jetpack.getTarget.call(this,i);return r||a(),n.each(function(){o.push(t(e(this).attr("src")))}).addClass("jetpack-resizeable"),s=e(".jetpack-resizeable"),n},off:function(a){var n=Jetpack.getTarget.call(this,a);return void 0===n?(i(),n):(n.each(function(){var a=t(e(this).attr("src")),i=e.inArray(a,o);-1!==i&&o.splice(i,1)}).removeClass("jetpack-resizeable"),s=e(".jetpack-resizeable"),n)},resize:function(t,a){var i=Jetpack.getTarget.call(this,a);return e.each(["width","height"],function(e,a){var n,r=0;void 0!==t[a]&&(r=parseInt(t[a],10)),0!==r&&(i[a](r),(n=i.parent()).hasClass("slim-likes-widget")&&n[a](r))}),i}},e.extend(window.Jetpack,{resizeable:function(t){return n[t]?n[t].apply(this,Array.prototype.slice.call(arguments,1)):t?void e.error("Method "+t+" does not exist on Jetpack.resizeable"):n.on.apply(this)}})):e.extend(window.Jetpack,{resizeable:function(){e.error("Browser does not support window.postMessage")}})}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/jquery.spin.min.js b/plugins/jetpack/_inc/build/jquery.spin.min.js
deleted file mode 100644
index 9ac0aba3..00000000
--- a/plugins/jetpack/_inc/build/jquery.spin.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/**
- * Copyright (c) 2011-2013 Felix Gnass
- * Licensed under the MIT license
- */
-!function(e){if("object"==typeof exports)e(require("jquery"),require("spin"));else if("function"==typeof define&&define.amd)define(["jquery","spin"],e);else{if(!window.Spinner)throw new Error("Spin.js not present");e(window.jQuery,window.Spinner)}}(function(e,n){e.fn.spin=function(s,i){return this.each(function(){var t=e(this),r=t.data();if(r.spinner&&(r.spinner.stop(),delete r.spinner),!1!==s){if(void 0!==(s=e.extend({color:i||t.css("color")},e.fn.spin.presets[s]||s)).right&&void 0!==s.length&&void 0!==s.width&&void 0!==s.radius){var p=t.css("padding-left");p=void 0===p?0:parseInt(p,10),s.left=t.outerWidth()-2*(s.length+s.width+s.radius)-p-s.right,delete s.right}r.spinner=new n(s).spin(this)}})},e.fn.spin.presets={tiny:{lines:8,length:2,width:2,radius:3},small:{lines:8,length:4,width:3,radius:5},large:{lines:10,length:8,width:4,radius:8}}}),function(e){e.fn.spin.presets.wp={trail:60,speed:1.3},e.fn.spin.presets.small=e.extend({lines:8,length:2,width:2,radius:3},e.fn.spin.presets.wp),e.fn.spin.presets.medium=e.extend({lines:8,length:4,width:3,radius:5},e.fn.spin.presets.wp),e.fn.spin.presets.large=e.extend({lines:10,length:6,width:4,radius:7},e.fn.spin.presets.wp),e.fn.spin.presets["small-left"]=e.extend({left:5},e.fn.spin.presets.small),e.fn.spin.presets["small-right"]=e.extend({right:5},e.fn.spin.presets.small),e.fn.spin.presets["medium-left"]=e.extend({left:5},e.fn.spin.presets.medium),e.fn.spin.presets["medium-right"]=e.extend({right:5},e.fn.spin.presets.medium),e.fn.spin.presets["large-left"]=e.extend({left:5},e.fn.spin.presets.large),e.fn.spin.presets["large-right"]=e.extend({right:5},e.fn.spin.presets.large)}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/lazy-images/js/lazy-images.min.js b/plugins/jetpack/_inc/build/lazy-images/js/lazy-images.min.js
deleted file mode 100644
index 80bd78f2..00000000
--- a/plugins/jetpack/_inc/build/lazy-images/js/lazy-images.min.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* globals IntersectionObserver, jQuery */
-var jetpackLazyImagesModule=function(t){var e,n,o,i,r={rootMargin:"200px 0px",threshold:.01},s=0;function h(){if(e=document.querySelectorAll("img.jetpack-lazy-image:not(.jetpack-lazy-image--handled)"),s=e.length,n&&n.disconnect(),"IntersectionObserver"in window)for(n=new IntersectionObserver(a,r),i=0;i<e.length;i++)(o=e[i]).getAttribute("data-lazy-loaded")||n.observe(o);else!function(t){var e;for(e=0;e<t.length;e++){var n=t[e];c(n)}}(e)}function a(t){var e;for(0===s&&n.disconnect(),e=0;e<t.length;e++){var o=t[e];o.intersectionRatio>0&&(s--,n.unobserve(o.target),c(o.target))}}function c(e){var n,o,i,r=t(e);r.length&&(n=r.attr("data-lazy-srcset"),o=r.attr("data-lazy-sizes"),(i=r.clone()).removeAttr("data-lazy-srcset"),i.removeAttr("data-lazy-sizes"),i.removeAttr("data-lazy-src"),i.addClass("jetpack-lazy-image--handled"),i.attr("data-lazy-loaded",1),n?i.attr("srcset",n):i.removeAttr("srcset"),o&&i.attr("sizes",o),r.replaceWith(i),i.trigger("jetpack-lazy-loaded-image"))}t(document).ready(function(){h(),t("body").bind("post-load",h),t("body").bind("jetpack-lazy-images-load",h)})};
-/**
- * The following is an Intersection observer polyfill which is licensed under
- * the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE and can be found at:
- * https://github.com/w3c/IntersectionObserver/tree/master/polyfill
- */
-/**
- * Copyright 2016 Google Inc. All Rights Reserved.
- *
- * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.
- *
- * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document
- *
- */
-/**
- * The following is an Intersection observer polyfill which is licensed under
- * the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE and can be found at:
- * https://github.com/w3c/IntersectionObserver/tree/master/polyfill
- */
-/**
- * Copyright 2016 Google Inc. All Rights Reserved.
- *
- * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.
- *
- * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document
- *
- */
-!function(t,e){"use strict";if("IntersectionObserver"in t&&"IntersectionObserverEntry"in t&&"intersectionRatio"in t.IntersectionObserverEntry.prototype)"isIntersecting"in t.IntersectionObserverEntry.prototype||Object.defineProperty(t.IntersectionObserverEntry.prototype,"isIntersecting",{get:function(){return this.intersectionRatio>0}});else{var n=[];i.prototype.THROTTLE_TIMEOUT=100,i.prototype.POLL_INTERVAL=null,i.prototype.USE_MUTATION_OBSERVER=!0,i.prototype.observe=function(t){if(!this._observationTargets.some(function(e){return e.element==t})){if(!t||1!=t.nodeType)throw new Error("target must be an Element");this._registerInstance(),this._observationTargets.push({element:t,entry:null}),this._monitorIntersections(),this._checkForIntersections()}},i.prototype.unobserve=function(t){this._observationTargets=this._observationTargets.filter(function(e){return e.element!=t}),this._observationTargets.length||(this._unmonitorIntersections(),this._unregisterInstance())},i.prototype.disconnect=function(){this._observationTargets=[],this._unmonitorIntersections(),this._unregisterInstance()},i.prototype.takeRecords=function(){var t=this._queuedEntries.slice();return this._queuedEntries=[],t},i.prototype._initThresholds=function(t){var e=t||[0];return Array.isArray(e)||(e=[e]),e.sort().filter(function(t,e,n){if("number"!=typeof t||isNaN(t)||t<0||t>1)throw new Error("threshold must be a number between 0 and 1 inclusively");return t!==n[e-1]})},i.prototype._parseRootMargin=function(t){var e=(t||"0px").split(/\s+/).map(function(t){var e=/^(-?\d*\.?\d+)(px|%)$/.exec(t);if(!e)throw new Error("rootMargin must be specified in pixels or percent");return{value:parseFloat(e[1]),unit:e[2]}});return e[1]=e[1]||e[0],e[2]=e[2]||e[0],e[3]=e[3]||e[1],e},i.prototype._monitorIntersections=function(){this._monitoringIntersections||(this._monitoringIntersections=!0,this.POLL_INTERVAL?this._monitoringInterval=setInterval(this._checkForIntersections,this.POLL_INTERVAL):(r(t,"resize",this._checkForIntersections,!0),r(e,"scroll",this._checkForIntersections,!0),this.USE_MUTATION_OBSERVER&&"MutationObserver"in t&&(this._domObserver=new MutationObserver(this._checkForIntersections),this._domObserver.observe(e,{attributes:!0,childList:!0,characterData:!0,subtree:!0}))))},i.prototype._unmonitorIntersections=function(){this._monitoringIntersections&&(this._monitoringIntersections=!1,clearInterval(this._monitoringInterval),this._monitoringInterval=null,s(t,"resize",this._checkForIntersections,!0),s(e,"scroll",this._checkForIntersections,!0),this._domObserver&&(this._domObserver.disconnect(),this._domObserver=null))},i.prototype._checkForIntersections=function(){var e=this._rootIsInDom(),n=e?this._getRootRect():{top:0,bottom:0,left:0,right:0,width:0,height:0};this._observationTargets.forEach(function(i){var r=i.element,s=h(r),a=this._rootContainsTarget(r),c=i.entry,u=e&&a&&this._computeTargetAndRootIntersection(r,n),l=i.entry=new o({time:t.performance&&performance.now&&performance.now(),target:r,boundingClientRect:s,rootBounds:n,intersectionRect:u});c?e&&a?this._hasCrossedThreshold(c,l)&&this._queuedEntries.push(l):c&&c.isIntersecting&&this._queuedEntries.push(l):this._queuedEntries.push(l)},this),this._queuedEntries.length&&this._callback(this.takeRecords(),this)},i.prototype._computeTargetAndRootIntersection=function(n,o){if("none"!=t.getComputedStyle(n).display){for(var i,r,s,a,u,l,d,p,g=h(n),f=c(n),v=!1;!v;){var m=null,_=1==f.nodeType?t.getComputedStyle(f):{};if("none"==_.display)return;if(f==this.root||f==e?(v=!0,m=o):f!=e.body&&f!=e.documentElement&&"visible"!=_.overflow&&(m=h(f)),m&&(i=m,r=g,s=void 0,a=void 0,u=void 0,l=void 0,d=void 0,p=void 0,s=Math.max(i.top,r.top),a=Math.min(i.bottom,r.bottom),u=Math.max(i.left,r.left),l=Math.min(i.right,r.right),p=a-s,!(g=(d=l-u)>=0&&p>=0&&{top:s,bottom:a,left:u,right:l,width:d,height:p})))break;f=c(f)}return g}},i.prototype._getRootRect=function(){var t;if(this.root)t=h(this.root);else{var n=e.documentElement,o=e.body;t={top:0,left:0,right:n.clientWidth||o.clientWidth,width:n.clientWidth||o.clientWidth,bottom:n.clientHeight||o.clientHeight,height:n.clientHeight||o.clientHeight}}return this._expandRectByRootMargin(t)},i.prototype._expandRectByRootMargin=function(t){var e=this._rootMarginValues.map(function(e,n){return"px"==e.unit?e.value:e.value*(n%2?t.width:t.height)/100}),n={top:t.top-e[0],right:t.right+e[1],bottom:t.bottom+e[2],left:t.left-e[3]};return n.width=n.right-n.left,n.height=n.bottom-n.top,n},i.prototype._hasCrossedThreshold=function(t,e){var n=t&&t.isIntersecting?t.intersectionRatio||0:-1,o=e.isIntersecting?e.intersectionRatio||0:-1;if(n!==o)for(var i=0;i<this.thresholds.length;i++){var r=this.thresholds[i];if(r==n||r==o||r<n!=r<o)return!0}},i.prototype._rootIsInDom=function(){return!this.root||a(e,this.root)},i.prototype._rootContainsTarget=function(t){return a(this.root||e,t)},i.prototype._registerInstance=function(){n.indexOf(this)<0&&n.push(this)},i.prototype._unregisterInstance=function(){var t=n.indexOf(this);-1!=t&&n.splice(t,1)},t.IntersectionObserver=i,t.IntersectionObserverEntry=o}function o(t){this.time=t.time,this.target=t.target,this.rootBounds=t.rootBounds,this.boundingClientRect=t.boundingClientRect,this.intersectionRect=t.intersectionRect||{top:0,bottom:0,left:0,right:0,width:0,height:0},this.isIntersecting=!!t.intersectionRect;var e=this.boundingClientRect,n=e.width*e.height,o=this.intersectionRect,i=o.width*o.height;this.intersectionRatio=n?i/n:this.isIntersecting?1:0}function i(t,e){var n,o,i,r=e||{};if("function"!=typeof t)throw new Error("callback must be a function");if(r.root&&1!=r.root.nodeType)throw new Error("root must be an Element");this._checkForIntersections=(n=this._checkForIntersections.bind(this),o=this.THROTTLE_TIMEOUT,i=null,function(){i||(i=setTimeout(function(){n(),i=null},o))}),this._callback=t,this._observationTargets=[],this._queuedEntries=[],this._rootMarginValues=this._parseRootMargin(r.rootMargin),this.thresholds=this._initThresholds(r.threshold),this.root=r.root||null,this.rootMargin=this._rootMarginValues.map(function(t){return t.value+t.unit}).join(" ")}function r(t,e,n,o){"function"==typeof t.addEventListener?t.addEventListener(e,n,o||!1):"function"==typeof t.attachEvent&&t.attachEvent("on"+e,n)}function s(t,e,n,o){"function"==typeof t.removeEventListener?t.removeEventListener(e,n,o||!1):"function"==typeof t.detatchEvent&&t.detatchEvent("on"+e,n)}function h(t){var e;try{e=t.getBoundingClientRect()}catch(t){}return e?(e.width&&e.height||(e={top:e.top,right:e.right,bottom:e.bottom,left:e.left,width:e.right-e.left,height:e.bottom-e.top}),e):{top:0,bottom:0,left:0,right:0,width:0,height:0}}function a(t,e){for(var n=e;n;){if(n==t)return!0;n=c(n)}return!1}function c(t){var e=t.parentNode;return e&&11==e.nodeType&&e.host?e.host:e}}(window,document),jetpackLazyImagesModule(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/likes/post-count-jetpack.min.js b/plugins/jetpack/_inc/build/likes/post-count-jetpack.min.js
deleted file mode 100644
index d7c03d0b..00000000
--- a/plugins/jetpack/_inc/build/likes/post-count-jetpack.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-var wpPostLikeCount=wpPostLikeCount||{};!function(t){wpPostLikeCount=jQuery.extend(wpPostLikeCount,{request:function(e){return t.ajax({type:"GET",url:wpPostLikeCount.jsonAPIbase+e.path,dataType:"jsonp",data:e.data,success:function(t){e.success(t)},error:function(t){e.error(t)}})}})}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/likes/post-count.min.js b/plugins/jetpack/_inc/build/likes/post-count.min.js
deleted file mode 100644
index 6d081bae..00000000
--- a/plugins/jetpack/_inc/build/likes/post-count.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* jshint onevar: false, smarttabs: true */
-var wpPostLikeCount=wpPostLikeCount||{};!function(t){wpPostLikeCount=jQuery.extend(wpPostLikeCount,{jsonAPIbase:"https://public-api.wordpress.com/rest/v1",APIqueue:[],wpPostLikeCount:function(){t(".post-like-count").each(function(){var o=t(this).attr("data-post-id"),n=t(this).attr("data-blog-id");wpPostLikeCount.APIqueue.push("/sites/"+n+"/posts/"+o+"/likes")}),wpPostLikeCount.getCounts()},showCount:function(o,n){n>0&&(t("#post-like-count-"+o).find(".comment-count").hide(),t("#post-like-count-"+o).find(".comment-count").text(n),t("#post-like-count-"+o).find(".comment-count").fadeIn())},getCounts:function(){for(var t={path:"/batch",data:"",success:function(t){for(var o in t)if(!t[o].error_data){var n=o.split("/")[4];wpPostLikeCount.showCount(n,t[o].found)}},error:function(){}},o="",n=0;n<wpPostLikeCount.APIqueue.length;n++)n>0&&(o="&"),t.data+=o+"urls[]="+wpPostLikeCount.APIqueue[n];wpPostLikeCount.request(t)}})}(jQuery),jQuery(document).ready(function(){wpPostLikeCount.wpPostLikeCount()}); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/likes/queuehandler.min.js b/plugins/jetpack/_inc/build/likes/queuehandler.min.js
deleted file mode 100644
index 19da08dc..00000000
--- a/plugins/jetpack/_inc/build/likes/queuehandler.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* global pm, wpcom_reblog, JSON */
-var jetpackLikesWidgetBatch=[],jetpackLikesMasterReady=!1,jetpackLikesLookAhead=2e3,jetpackCommentLikesLoadedWidgets=[];function JetpackLikesPostMessage(e,t){if("string"==typeof e)try{e=JSON.parse(e)}catch(e){return}pm({target:t,type:"likesMessage",data:e,origin:"*"})}function JetpackLikesBatchHandler(){var e=[];jQuery("div.jetpack-likes-widget-unloaded").each(function(){if(!(jetpackLikesWidgetBatch.indexOf(this.id)>-1)&&jetpackIsScrolledIntoView(this)){jetpackLikesWidgetBatch.push(this.id);var t,i=/like-(post|comment)-wrapper-(\d+)-(\d+)-(\w+)/.exec(this.id);i&&5===i.length&&(t={blog_id:i[2],width:this.width},"post"===i[1]?t.post_id=i[3]:"comment"===i[1]&&(t.comment_id=i[3]),t.obj_id=i[4],e.push(t))}}),e.length>0&&JetpackLikesPostMessage({event:"initialBatch",requests:e},window.frames["likes-master"])}function JetpackLikesMessageListener(e,t){var i,a,s,d,o,r;if(void 0!==e.event&&("https://widgets.wp.com","https://widgets.wp.com"===t.origin))switch(e.event){case"masterReady":jQuery(document).ready(function(){jetpackLikesMasterReady=!0;var e={event:"injectStyles"},t=jQuery(".sd-text-color"),i=jQuery(".sd-link-color");jQuery("iframe.admin-bar-likes-widget").length>0&&(JetpackLikesPostMessage({event:"adminBarEnabled"},window.frames["likes-master"]),e.adminBarStyles={background:jQuery("#wpadminbar .quicklinks li#wp-admin-bar-wpl-like > a").css("background"),isRtl:"rtl"===jQuery("#wpadminbar").css("direction")}),window.addEventListener||jQuery("#wp-admin-bar-admin-bar-likes-widget").hide(),e.textStyles={color:t.css("color"),fontFamily:t.css("font-family"),fontSize:t.css("font-size"),direction:t.css("direction"),fontWeight:t.css("font-weight"),fontStyle:t.css("font-style"),textDecoration:t.css("text-decoration")},e.linkStyles={color:i.css("color"),fontFamily:i.css("font-family"),fontSize:i.css("font-size"),textDecoration:i.css("text-decoration"),fontWeight:i.css("font-weight"),fontStyle:i.css("font-style")},JetpackLikesPostMessage(e,window.frames["likes-master"]),JetpackLikesBatchHandler()});break;case"showLikeWidget":case"showCommentLikeWidget":jQuery("#"+e.id+" .likes-widget-placeholder").fadeOut("fast");break;case"killCommentLikes":jQuery(".jetpack-comment-likes-widget-wrapper").remove();break;case"clickReblogFlair":wpcom_reblog.toggle_reblog_box_flair(e.obj_id);break;case"showOtherGravatars":i=jQuery("#likes-other-gravatars"),a=i.find("ul"),i.hide(),a.html(""),i.find(".likes-text span").text(e.total),jQuery.each(e.likers,function(e,t){var i;"http"===t.profile_URL.substr(0,4)&&((i=jQuery("<li><a><img /></a></li>")).addClass(t.css_class),i.find("a").attr({href:t.profile_URL,rel:"nofollow",target:"_parent"}).addClass("wpl-liker"),i.find("img").attr({src:t.avatar_URL,alt:t.name}).css({width:"30px",height:"30px",paddingRight:"3px"}),a.append(i))}),s=jQuery("body").find("[name='"+e.parent+"']").offset(),i.css("left",s.left+e.position.left-10+"px"),i.css("top",s.top+e.position.top-33+"px"),d=Math.floor(e.width/37),(o=37*Math.ceil(e.likers.length/d)+13)>204&&(o=204),i.css("height",o+"px"),i.css("width",37*d-7+"px"),a.css("width",37*d+"px"),i.fadeIn("slow"),(r=a[0].offsetWidth-a[0].clientWidth)>0&&(i.width(i.width()+r),a.width(a.width()+r))}}function JetpackLikesWidgetQueueHandler(){var e;if(jetpackLikesMasterReady){jetpackUnloadScrolledOutWidgets();var t=jetpackGetUnloadedWidgetsInView();t.length>0&&JetpackLikesBatchHandler();for(var i=0,a=t.length;i<=a-1;i++)(e=t[i].id)&&jetpackLoadLikeWidgetIframe(e)}else setTimeout(JetpackLikesWidgetQueueHandler,500)}function jetpackLoadLikeWidgetIframe(e){var t;if(void 0!==e){(t=jQuery("#"+e)).find("iframe").remove();var i=t.find(".likes-widget-placeholder");if(i.hasClass("post-likes-widget-placeholder")){var a=document.createElement("iframe");a.class="post-likes-widget jetpack-likes-widget",a.name=t.data("name"),a.src=t.data("src"),a.height="18px",a.width="200px",a.frameBorder="0",a.scrolling="no",t.hasClass("slim-likes-widget")?(a.height="22px",a.width="68px",a.scrolling="no"):(a.height="55px",a.width="100%"),i.after(a)}if(i.hasClass("comment-likes-widget-placeholder")){var s=document.createElement("iframe");s.class="comment-likes-widget-frame jetpack-likes-widget-frame",s.name=t.data("name"),s.src=t.data("src"),s.height="18px",s.width="100%",s.frameBorder="0",s.scrolling="no",t.find(".comment-like-feedback").after(s),jetpackCommentLikesLoadedWidgets.push(s)}t.removeClass("jetpack-likes-widget-unloaded").addClass("jetpack-likes-widget-loading"),t.find("iframe").load(function(e){var i=jQuery(e.target);JetpackLikesPostMessage({event:"loadLikeWidget",name:i.attr("name"),width:i.width()},window.frames["likes-master"]),t.removeClass("jetpack-likes-widget-loading").addClass("jetpack-likes-widget-loaded"),t.hasClass("slim-likes-widget")&&t.find("iframe").Jetpack("resizeable")})}}function jetpackGetUnloadedWidgetsInView(){return jQuery("div.jetpack-likes-widget-unloaded").filter(function(){return jetpackIsScrolledIntoView(this)})}function jetpackIsScrolledIntoView(e){var t=e.getBoundingClientRect().top,i=e.getBoundingClientRect().bottom;return t+jetpackLikesLookAhead>=0&&i<=window.innerHeight+jetpackLikesLookAhead}function jetpackUnloadScrolledOutWidgets(){for(var e=jetpackCommentLikesLoadedWidgets.length-1;e>=0;e--){var t=jetpackCommentLikesLoadedWidgets[e];if(!jetpackIsScrolledIntoView(t)){var i=jQuery(t).parent().parent();i.removeClass("jetpack-likes-widget-loaded jetpack-likes-widget-loading").addClass("jetpack-likes-widget-unloaded"),i.children(".comment-likes-widget-placeholder").fadeIn(),jetpackCommentLikesLoadedWidgets.splice(e,1),jQuery(t).remove()}}}pm.bind("likesMessage",JetpackLikesMessageListener),jQuery(document).click(function(e){var t=jQuery("#likes-other-gravatars");0===t.has(e.target).length&&t.fadeOut("slow")});var jetpackWidgetsDelayedExec=function(e,t){var i;return function(){i&&clearTimeout(i),i=setTimeout(t,e)}},jetpackOnScrollStopped=jetpackWidgetsDelayedExec(250,JetpackLikesWidgetQueueHandler);JetpackLikesWidgetQueueHandler(),window.addEventListener("scroll",jetpackOnScrollStopped,!0); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/masterbar/tracks-events.min.js b/plugins/jetpack/_inc/build/masterbar/tracks-events.min.js
deleted file mode 100644
index 665a78a3..00000000
--- a/plugins/jetpack/_inc/build/masterbar/tracks-events.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/*globals jQuery, JSON */
-!function(a){var e={"wp-admin-bar-blog":"my_sites","wp-admin-bar-newdash":"reader","wp-admin-bar-ab-new-post":"write_button","wp-admin-bar-my-account":"my_account","wp-admin-bar-notes":"notifications","wp-admin-bar-switch-site":"my_sites_switch_site","wp-admin-bar-blog-info":"my_sites_blog_info","wp-admin-bar-site-view":"my_sites_view_site","wp-admin-bar-blog-stats":"my_sites_blog_stats","wp-admin-bar-activity":"my_sites_activity","wp-admin-bar-plan":"my_sites_plan","wp-admin-bar-plan-badge":"my_sites_plan_badge","wp-admin-bar-edit-page":"my_sites_manage_site_pages","wp-admin-bar-new-page-badge":"my_sites_manage_add_page","wp-admin-bar-edit-post":"my_sites_manage_blog_posts","wp-admin-bar-new-post-badge":"my_sites_manage_add_new_post","wp-admin-bar-edit-attachment":"my_sites_manage_media","wp-admin-bar-new-attachment-badge":"my_sites_manage_add_media","wp-admin-bar-comments":"my_sites_manage_comments","wp-admin-bar-edit-testimonial":"my_sites_manage_testimonials","wp-admin-bar-new-testimonial":"my_sites_manage_add_testimonial","wp-admin-bar-edit-portfolio":"my_sites_manage_portfolio","wp-admin-bar-new-portfolio":"my_sites_manage_add_portfolio","wp-admin-bar-themes":"my_sites_personalize_themes","wp-admin-bar-cmz":"my_sites_personalize_themes_customize","wp-admin-bar-sharing":"my_sites_configure_sharing","wp-admin-bar-people":"my_sites_configure_people","wp-admin-bar-people-add":"my_sites_configure_people_add_button","wp-admin-bar-plugins":"my_sites_configure_plugins","wp-admin-bar-plugins-add":"my_sites_configure_manage_plugins","wp-admin-bar-blog-settings":"my_sites_configure_settings","wp-admin-bar-followed-sites":"reader_followed_sites","wp-admin-bar-reader-followed-sites-manage":"reader_manage_followed_sites","wp-admin-bar-discover-discover":"reader_discover","wp-admin-bar-discover-search":"reader_search","wp-admin-bar-discover-recommended-blogs":"reader_recommendations","wp-admin-bar-my-activity-my-likes":"reader_my_likes","wp-admin-bar-user-info":"my_account_user_name","wp-admin-bar-my-profile":"my_account_profile_my_profile","wp-admin-bar-account-settings":"my_account_profile_account_settings","wp-admin-bar-billing":"my_account_profile_manage_purchases","wp-admin-bar-security":"my_account_profile_security","wp-admin-bar-notifications":"my_account_profile_notifications","wp-admin-bar-get-apps":"my_account_special_get_apps","wp-admin-bar-next-steps":"my_account_special_next_steps","wp-admin-bar-help":"my_account_special_help"},i={openSite:function(a){return{clicked:"masterbar_notifications_panel_site",site_id:a.siteId}},openPost:function(a){return{clicked:"masterbar_notifications_panel_post",site_id:a.siteId,post_id:a.postId}},openComment:function(a){return{clicked:"masterbar_notifications_panel_comment",site_id:a.siteId,post_id:a.postId,comment_id:a.commentId}}};a(document).ready(function(){a(".mb-trackable .ab-item:not(div),#wp-admin-bar-notes .ab-item,#wp-admin-bar-user-info .ab-item,.mb-trackable .ab-secondary").on("click touchstart",function(i){if(window.jpTracksAJAX&&"function"==typeof window.jpTracksAJAX.record_ajax_event){var t=a(i.target),n=t.closest("li");if(t.is("a")||(t=t.closest("a")),n&&t){var s=t.attr("ID")||n.attr("ID");if(e.hasOwnProperty(s)){var r={clicked:e[s]};n.hasClass("menupop")?window.jpTracksAJAX.record_ajax_event("masterbar_click","click",r):(i.preventDefault(),window.jpTracksAJAX.record_ajax_event("masterbar_click","click",r).always(function(){window.location=t.attr("href")}))}}}})}),a(window).on("message",function(a){if(window.jpTracksAJAX&&"function"==typeof window.jpTracksAJAX.record_ajax_event){var e=!a.data&&a.originalEvent.data?a.originalEvent:a;if("https://widgets.wp.com"===e.origin){var t="string"==typeof e.data?function(a,e){try{return JSON.parse(a)}catch(a){return e}}(e.data,{}):e.data;if("notesIframeMessage"===t.type){var n=i[t.action];n&&window.jpTracksAJAX.record_ajax_event("masterbar_click","click",n(t))}}}})}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/minileven/theme/pub/minileven/js/small-menu.min.js b/plugins/jetpack/_inc/build/minileven/theme/pub/minileven/js/small-menu.min.js
deleted file mode 100644
index b23b7c9e..00000000
--- a/plugins/jetpack/_inc/build/minileven/theme/pub/minileven/js/small-menu.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/**
- * navigation.js
- *
- * Handles toggling the navigation menu for small screens.
- */
-!function(){var e,a,l=document.getElementById("access");l&&(e=l.getElementsByTagName("h3")[0],a=l.getElementsByTagName("ul")[0],e&&(a&&a.childNodes.length?e.onclick=function(){-1===a.className.indexOf("nav-menu")&&(a.className="nav-menu"),-1!==e.className.indexOf("toggled-on")?(e.className=e.className.replace(" toggled-on",""),a.className=a.className.replace(" toggled-on","")):(e.className+=" toggled-on",a.className+=" toggled-on")}:e.style.display="none"))}(); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/photon/photon.min.js b/plugins/jetpack/_inc/build/photon/photon.min.js
deleted file mode 100644
index 8e5e67c3..00000000
--- a/plugins/jetpack/_inc/build/photon/photon.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* jshint onevar: false */
-!function(t){var a=function(){t("img[data-recalc-dims]").each(function a(){var o=t(this);if(this.complete){if(o.data("lazy-src")&&o.attr("src")!==o.data("lazy-src"))return void o.load(a);var d=this.width,i=this.height;d&&d>0&&i&&i>0&&(o.attr({width:d,height:i}),e(this))}else o.load(a)})},e=function(a){t(a).removeAttr("data-recalc-dims").removeAttr("scale")};t(document).ready(a),"on"in t.fn?t(document.body).on("post-load",a):t(document).delegate("body","post-load",a)}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/postmessage.min.js b/plugins/jetpack/_inc/build/postmessage.min.js
deleted file mode 100644
index ae926057..00000000
--- a/plugins/jetpack/_inc/build/postmessage.min.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/**
- The MIT License
-
- Copyright (c) 2010 Daniel Park (http://metaweb.com, http://postmessage.freebaseapps.com)
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
- **/
-var NO_JQUERY={};!function(e,t,a){if(!("console"in e)){var n=e.console={};n.log=n.warn=n.error=n.debug=function(){}}t===NO_JQUERY&&(t={fn:{},extend:function(){for(var e=arguments[0],t=1,a=arguments.length;t<a;t++){var n=arguments[t];for(var r in n)e[r]=n[r]}return e}}),t.fn.pm=function(){return console.log("usage: \nto send: $.pm(options)\nto receive: $.pm.bind(type, fn, [origin])"),this},t.pm=e.pm=function(e){r.send(e)},t.pm.bind=e.pm.bind=function(e,t,a,n,s){r.bind(e,t,a,n,!0===s)},t.pm.unbind=e.pm.unbind=function(e,t){r.unbind(e,t)},t.pm.origin=e.pm.origin=null,t.pm.poll=e.pm.poll=200;var r={send:function(e){var a=t.extend({},r.defaults,e),n=a.target;if(a.target)if(a.type){var s={data:a.data,type:a.type};a.success&&(s.callback=r._callback(a.success)),a.error&&(s.errback=r._callback(a.error)),"postMessage"in n&&!a.hash?(r._bind(),n.postMessage(JSON.stringify(s),a.origin||"*")):(r.hash._bind(),r.hash.send(a,s))}else console.warn("postmessage type required");else console.warn("postmessage target window required")},bind:function(e,t,a,n,s){r._replyBind(e,t,a,n,s)},_replyBind:function(a,n,s,o,i){"postMessage"in e&&!o?r._bind():r.hash._bind();var u=r.data("listeners.postmessage");u||(u={},r.data("listeners.postmessage",u));var c=u[a];c||(c=[],u[a]=c),c.push({fn:n,callback:i,origin:s||t.pm.origin})},unbind:function(e,t){var a=r.data("listeners.postmessage");if(a)if(e)if(t){var n=a[e];if(n){for(var s=[],o=0,i=n.length;o<i;o++){var u=n[o];u.fn!==t&&s.push(u)}a[e]=s}}else delete a[e];else for(var o in a)delete a[o]},data:function(e,t){return void 0===t?r._data[e]:(r._data[e]=t,t)},_data:{},_CHARS:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),_random:function(){for(var e=[],t=0;t<32;t++)e[t]=r._CHARS[0|32*Math.random()];return e.join("")},_callback:function(e){var t=r.data("callbacks.postmessage");t||(t={},r.data("callbacks.postmessage",t));var a=r._random();return t[a]=e,a},_bind:function(){r.data("listening.postmessage")||(e.addEventListener?e.addEventListener("message",r._dispatch,!1):e.attachEvent&&e.attachEvent("onmessage",r._dispatch),r.data("listening.postmessage",1))},_dispatch:function(e){try{var t=JSON.parse(e.data)}catch(e){return}if(t.type){var a=(r.data("callbacks.postmessage")||{})[t.type];if(a)a(t.data);else for(var n=(r.data("listeners.postmessage")||{})[t.type]||[],s=0,o=n.length;s<o;s++){var i=n[s];if(i.origin&&"*"!==i.origin&&e.origin!==i.origin){if(console.warn("postmessage message origin mismatch",e.origin,i.origin),t.errback){var u={message:"postmessage origin mismatch",origin:[e.origin,i.origin]};r.send({target:e.source,data:u,type:t.errback})}}else try{i.callback?i.fn(t.data,c,e):c(i.fn(t.data,e))}catch(a){if(!t.errback)throw a;r.send({target:e.source,data:a,type:t.errback})}function c(a){t.callback&&r.send({target:e.source,data:a,type:t.callback})}}}}};r.hash={send:function(t,a){var n=t.target,s=t.url;if(s){s=r.hash._url(s);var o,i=r.hash._url(e.location.href);if(e==n.parent)o="parent";else try{for(var u=0,c=parent.frames.length;u<c;u++){if(parent.frames[u]==e){o=u;break}}}catch(t){o=e.name}if(null!=o){var l={"x-requested-with":"postmessage",source:{name:o,url:i},postmessage:a},f="#x-postmessage-id="+r._random();n.location=s+f+encodeURIComponent(JSON.stringify(l))}else console.warn("postmessage windows must be direct parent/child windows and the child must be available through the parent window.frames list")}else console.warn("postmessage target window url is required")},_regex:/^\#x\-postmessage\-id\=(\w{32})/,_regex_len:"#x-postmessage-id=".length+32,_bind:function(){r.data("polling.postmessage")||(setInterval(function(){var t=""+e.location.hash,a=r.hash._regex.exec(t);if(a){var n=a[1];r.hash._last!==n&&(r.hash._last=n,r.hash._dispatch(t.substring(r.hash._regex_len)))}},t.pm.poll||200),r.data("polling.postmessage",1))},_dispatch:function(t){if(t){try{if(!("postmessage"===(t=JSON.parse(decodeURIComponent(t)))["x-requested-with"]&&t.source&&null!=t.source.name&&t.source.url&&t.postmessage))return}catch(e){return}var a=t.postmessage,n=(r.data("callbacks.postmessage")||{})[a.type];if(n)n(a.data);else{var s;s="parent"===t.source.name?e.parent:e.frames[t.source.name];for(var o=(r.data("listeners.postmessage")||{})[a.type]||[],i=0,u=o.length;i<u;i++){var c=o[i];if(c.origin){var l=/https?\:\/\/[^\/]*/.exec(t.source.url)[0];if("*"!==c.origin&&l!==c.origin){if(console.warn("postmessage message origin mismatch",l,c.origin),a.errback){var f={message:"postmessage origin mismatch",origin:[l,c.origin]};r.send({target:s,data:f,type:a.errback,hash:!0,url:t.source.url})}continue}}function p(e){a.callback&&r.send({target:s,data:e,type:a.callback,hash:!0,url:t.source.url})}try{c.callback?c.fn(a.data,p):p(c.fn(a.data))}catch(e){if(!a.errback)throw e;r.send({target:s,data:e,type:a.errback,hash:!0,url:t.source.url})}}}}},_url:function(e){return(""+e).replace(/#.*$/,"")}},t.extend(r,{defaults:{target:null,url:null,type:null,data:null,success:null,error:null,origin:"*",hash:!1}})}(this,"undefined"==typeof jQuery?NO_JQUERY:jQuery),"JSON"in window&&window.JSON||(JSON={}),function(){function f(e){return e<10?"0"+e:e}"function"!=typeof Date.prototype.toJSON&&(Date.prototype.toJSON=function(e){return this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z"},String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(e){return this.valueOf()});var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(e){return escapable.lastIndex=0,escapable.test(e)?'"'+e.replace(escapable,function(e){var t=meta[e];return"string"==typeof t?t:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+e+'"'}function str(e,t){var a,n,r,s,o,i=gap,u=t[e];switch(u&&"object"==typeof u&&"function"==typeof u.toJSON&&(u=u.toJSON(e)),"function"==typeof rep&&(u=rep.call(t,e,u)),typeof u){case"string":return quote(u);case"number":return isFinite(u)?String(u):"null";case"boolean":case"null":return String(u);case"object":if(!u)return"null";if(gap+=indent,o=[],"[object Array]"===Object.prototype.toString.apply(u)){for(s=u.length,a=0;a<s;a+=1)o[a]=str(a,u)||"null";return r=0===o.length?"[]":gap?"[\n"+gap+o.join(",\n"+gap)+"\n"+i+"]":"["+o.join(",")+"]",gap=i,r}if(rep&&"object"==typeof rep)for(s=rep.length,a=0;a<s;a+=1)"string"==typeof(n=rep[a])&&(r=str(n,u))&&o.push(quote(n)+(gap?": ":":")+r);else for(n in u)Object.hasOwnProperty.call(u,n)&&(r=str(n,u))&&o.push(quote(n)+(gap?": ":":")+r);return r=0===o.length?"{}":gap?"{\n"+gap+o.join(",\n"+gap)+"\n"+i+"}":"{"+o.join(",")+"}",gap=i,r}}"function"!=typeof JSON.stringify&&(JSON.stringify=function(e,t,a){var n;if(gap="",indent="","number"==typeof a)for(n=0;n<a;n+=1)indent+=" ";else"string"==typeof a&&(indent=a);if(rep=t,t&&"function"!=typeof t&&("object"!=typeof t||"number"!=typeof t.length))throw new Error("JSON.stringify");return str("",{"":e})}),"function"!=typeof JSON.parse&&(JSON.parse=function(text,reviver){var j;function walk(e,t){var a,n,r=e[t];if(r&&"object"==typeof r)for(a in r)Object.hasOwnProperty.call(r,a)&&(void 0!==(n=walk(r,a))?r[a]=n:delete r[a]);return reviver.call(e,t,r)}if(cx.lastIndex=0,cx.test(text)&&(text=text.replace(cx,function(e){return"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})),/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return j=eval("("+text+")"),"function"==typeof reviver?walk({"":j},""):j;throw new SyntaxError("JSON.parse")})}(); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/related-posts/related-posts-customizer.min.js b/plugins/jetpack/_inc/build/related-posts/related-posts-customizer.min.js
deleted file mode 100644
index 368bcddb..00000000
--- a/plugins/jetpack/_inc/build/related-posts/related-posts-customizer.min.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/**
- * Adds functionality for Related Posts controls in Customizer.
- */
-!function(t){"use strict";t("jetpack_relatedposts[show_headline]",function(e){t.control("jetpack_relatedposts[headline]",function(t){var n,i;i=function(){return e.findControls()[0].active.get()&&e.get()},n=function(){t.active.set(i())},t.active.validate=i,n(),e.bind(n)})})}(wp.customize); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/related-posts/related-posts.min.js b/plugins/jetpack/_inc/build/related-posts/related-posts.min.js
deleted file mode 100644
index 308c7567..00000000
--- a/plugins/jetpack/_inc/build/related-posts/related-posts.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* jshint onevar: false */
-/* globals related_posts_js_options */
-!function(t){var e={response:null,getEndpointURL:function(e){var s,a="undefined"!=typeof wp&&wp.customize&&wp.customize.settings&&wp.customize.settings.url&&wp.customize.settings.url.self;a?(s=document.createElement("a")).href=wp.customize.settings.url.self:s=document.location,"string"==typeof e&&e.match(/^https?:\/\//)&&((s=document.createElement("a")).href=e);var o="relatedposts=1";t("#jp-relatedposts").data("exclude")&&(o+="&relatedposts_exclude="+t("#jp-relatedposts").data("exclude")),a&&(o+="&jetpackrpcustomize=1");var p=s.pathname;return"/"!==p[0]&&(p="/"+p),""===s.search?p+"?"+o:p+s.search+"&"+o},getAnchor:function(e,s){var a=e.title;""!=""+e.excerpt&&(a+="\n\n"+e.excerpt);var o=t("<a>");o.attr({class:s,href:e.url,title:a,rel:e.rel,"data-origin":e.url_meta.origin,"data-position":e.url_meta.position});var p=t("<div>").append(o).html();return[p.substring(0,p.length-4),"</a>"]},generateMinimalHtml:function(e,s){var a=this,o="";return t.each(e,function(t,e){var p=a.getAnchor(e,"jp-relatedposts-post-a"),r="jp-relatedposts-post jp-relatedposts-post"+t;e.classes.length>0&&(r+=" "+e.classes.join(" ")),o+='<p class="'+r+'" data-post-id="'+e.id+'" data-post-format="'+e.format+'">',o+='<span class="jp-relatedposts-post-title">'+p[0]+e.title+p[1]+"</span>",s.showDate&&(o+='<span class="jp-relatedposts-post-date">'+e.date+"</span>"),s.showContext&&(o+='<span class="jp-relatedposts-post-context">'+e.context+"</span>"),o+="</p>"}),'<div class="jp-relatedposts-items jp-relatedposts-items-minimal jp-relatedposts-'+s.layout+' ">'+o+"</div>"},generateVisualHtml:function(e,s){var a=this,o="";return t.each(e,function(e,p){var r=a.getAnchor(p,"jp-relatedposts-post-a"),i="jp-relatedposts-post jp-relatedposts-post"+e;if(p.classes.length>0&&(i+=" "+p.classes.join(" ")),p.img.src?i+=" jp-relatedposts-post-thumbs":i+=" jp-relatedposts-post-nothumbs",o+='<div class="'+i+'" data-post-id="'+p.id+'" data-post-format="'+p.format+'">',p.img.src)o+=r[0]+'<img class="jp-relatedposts-post-img" src="'+p.img.src+'" width="'+p.img.width+'" alt="'+p.title+'" />'+r[1];else{var n=a.getAnchor(p,"jp-relatedposts-post-a jp-relatedposts-post-aoverlay");o+=n[0]+n[1]}o+="<"+related_posts_js_options.post_heading+' class="jp-relatedposts-post-title">'+r[0]+p.title+r[1]+"</"+related_posts_js_options.post_heading+">",o+='<p class="jp-relatedposts-post-excerpt">'+t("<p>").text(p.excerpt).html()+"</p>",s.showDate&&(o+='<p class="jp-relatedposts-post-date">'+p.date+"</p>"),s.showContext&&(o+='<p class="jp-relatedposts-post-context">'+p.context+"</p>"),o+="</div>"}),'<div class="jp-relatedposts-items jp-relatedposts-items-visual jp-relatedposts-'+s.layout+' ">'+o+"</div>"},setVisualExcerptHeights:function(){var e=t("#jp-relatedposts .jp-relatedposts-post-nothumbs .jp-relatedposts-post-excerpt");if(!(0>=e.length)){var s=parseInt(e.first().css("font-size"),10),a=parseInt(e.first().css("line-height"),10);e.css("max-height",5*a/s+"em")}},getTrackedUrl:function(e){var s="relatedposts_hit=1";s+="&relatedposts_origin="+t(e).data("origin"),s+="&relatedposts_position="+t(e).data("position");var a=e.pathname;return"/"!==a[0]&&(a="/"+a),""===e.search?a+"?"+s:a+e.search+"&"+s},cleanupTrackedUrl:function(){if("function"==typeof history.replaceState){var t=document.location.search.replace(/\brelatedposts_[a-z]+=[0-9]*&?\b/gi,"");"?"===t&&(t=""),document.location.search!==t&&history.replaceState({},document.title,document.location.pathname+t)}}};function s(){e.setVisualExcerptHeights(),t("#jp-relatedposts a.jp-relatedposts-post-a").click(function(){this.href=e.getTrackedUrl(this)})}function a(){e.cleanupTrackedUrl();var a=e.getEndpointURL(),o=t("#jp-relatedposts");t("#jp-relatedposts .jp-relatedposts-post").length?s():t.getJSON(a,function(t){if(0!==t.items.length&&0!==o.length){e.response=t;var a,p,r={};"undefined"!=typeof wp&&wp.customize?(p=wp.customize.instance("jetpack_relatedposts[show_thumbnails]").get(),r.showDate=wp.customize.instance("jetpack_relatedposts[show_date]").get(),r.showContext=wp.customize.instance("jetpack_relatedposts[show_context]").get(),r.layout=wp.customize.instance("jetpack_relatedposts[layout]").get()):(p=t.show_thumbnails,r.showDate=t.show_date,r.showContext=t.show_context,r.layout=t.layout),a=p?e.generateVisualHtml(t.items,r):e.generateMinimalHtml(t.items,r),o.append(a),r.showDate&&o.find(".jp-relatedposts-post-date").show(),o.show(),s()}})}t(function(){"undefined"!=typeof wp&&wp.customize?(wp.customize.selectiveRefresh&&wp.customize.selectiveRefresh.bind("partial-content-rendered",function(t){"jetpack_relatedposts"===t.partial.id&&a()}),wp.customize.bind("preview-ready",a)):a()})}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/sharedaddy/admin-sharing.min.js b/plugins/jetpack/_inc/build/sharedaddy/admin-sharing.min.js
deleted file mode 100644
index 347a7c06..00000000
--- a/plugins/jetpack/_inc/build/sharedaddy/admin-sharing.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* jshint onevar: false, smarttabs: true */
-/* global sharing_loading_icon */
-!function(e){e(document).ready(function(){function i(){e(".preview a.sharing-anchor").unbind("mouseenter mouseenter").hover(function(){if(!0!==e(this).data("hasappeared")){var i=e(".sharing-hidden .inner"),a=e(this).parents("li"),s=setTimeout(function(){e(i).css({left:e(a).position().left+"px",top:e(a).position().top+e(a).height()+3+"px"}).slideDown(200,function(){e(a).data("hasappeared",!0).data("hasoriginal",!0).data("hasitem",!1),e(i).mouseleave(s).mouseenter(n),e(a).mouseleave(r).mouseenter(t),e(a).click(l)});var s=function(){if(e(a).data("hasitem",!1),!1===e(a).data("hasoriginal")){var i=setTimeout(l,800);e(a).data("timer2",i)}},n=function(){e(a).data("hasitem",!0),clearTimeout(e(a).data("timer2"))},r=function(){if(e(a).data("hasoriginal",!1),!1===e(a).data("hasitem")){var i=setTimeout(l,800);e(a).data("timer2",i)}},t=function(){e(a).data("hasoriginal",!0),clearTimeout(e(a).data("timer2"))},l=function(){return i.slideUp(200),e(a).unbind("mouseleave",r).unbind("mouseenter",t),e(i).unbind("mouseleave",s).unbind("mouseenter",s),e(a).data("hasappeared",!1),e(a).unbind("click",l),!1}},200);e(this).data("timer",s)}},function(){clearTimeout(e(this).data("timer")),e(this).data("timer",!1)})}function a(){var a=e("#button_style").val();e("#live-preview ul.preview li").remove(),(e("#save-enabled-shares input[name=visible]").val()||e("#save-enabled-shares input[name=hidden]").val())&&e("#live-preview ul.preview").append(e("#live-preview ul.archive .sharing-label").clone()),e("ul.services-enabled li").each(function(){if(e(this).hasClass("service")){var i=e(this).attr("id");e("#live-preview ul.preview").append(e("#live-preview ul.archive li.preview-"+i).clone())}}),e("#save-enabled-shares input[name=hidden]").val()&&(e("#live-preview ul.preview").append(e("#live-preview ul.archive .share-more").parent().clone()),e(".sharing-hidden ul li").remove(),e("ul.services-hidden li").each(function(){if(e(this).hasClass("service")){var i=e(this).attr("id");e(".sharing-hidden .inner ul").append(e("#live-preview ul.archive .preview-"+i).clone())}}),i()),e("#live-preview div.sharedaddy").removeClass("sd-social-icon"),e("#live-preview li.advanced").removeClass("no-icon"),"icon"===a?(e("#live-preview ul.preview div span, .sharing-hidden .inner ul div span").html("&nbsp;").parent().addClass("no-text"),e("#live-preview div.sharedaddy").addClass("sd-social-icon")):"official"===a?e("#live-preview ul.preview .advanced, .sharing-hidden .inner ul .advanced").each(function(){e(this).hasClass("preview-press-this")||e(this).hasClass("preview-email")||e(this).hasClass("preview-print")||e(this).hasClass("preview-telegram")||e(this).hasClass("preview-jetpack-whatsapp")||e(this).hasClass("share-custom")||e(this).hasClass("share-deprecated")||e(this).find(".option a span").html("").parent().removeClass("sd-button").parent().attr("class","option option-smart-on")}):"text"===a&&e("#live-preview li.advanced").addClass("no-icon")}function s(e){jQuery("."+e+"-extra-options").css({backgroundColor:"#ffffcc"}).fadeIn()}function n(){e("#enabled-services h3 img").show(),e("#enabled-services ul.services-enabled li.service").length>0?e("#drag-instructions").hide():e("#drag-instructions").show(),e("#enabled-services li.service").length>0?e("#live-preview .services h2").hide():e("#live-preview .services h2").show();var i=[],n=[];e("ul.services-enabled li").each(function(){e(this).hasClass("service")&&(i[i.length]=e(this).attr("id"),s(e(this).attr("id")))}),e("ul.services-available li").each(function(){var i;e(this).hasClass("service")&&(i=e(this).attr("id"),jQuery("."+i+"-extra-options").fadeOut("slow"))}),e("ul.services-hidden li").each(function(){e(this).hasClass("service")&&(n[n.length]=e(this).attr("id"),s(e(this).attr("id")))}),e("#save-enabled-shares input[name=visible]").val(i.join(",")),e("#save-enabled-shares input[name=hidden]").val(n.join(",")),a(),e("#save-enabled-shares").ajaxSubmit(function(){e("#enabled-services h3 img").hide()})}function r(e,i){var a,s=e.parent(),r=s.find("li"),t=r.index(e)+1,l=r.length-1;if(!s.hasClass("services-available")){if("left"===i){if(1===t)return;var c=e.prev();a=e.detach(),c.before(a),c.prev().focus()}if("right"===i){if(t===l)return;var o=e.next();a=e.detach(),o.after(a),o.next().focus()}n()}}function t(i){var a,s=i.parent();a=s.hasClass("services-available")?"services-enabled":s.hasClass("services-enabled")?"services-hidden":"services-available";var r=i.detach();e("."+a).prepend(r).find("li:first-child").focus(),n()}window.sharing_option_changed=function(){var i=this;return e(this).parents("li:first").css("backgroundImage",'url("'+sharing_loading_icon+'")'),e(this).parents("form").ajaxSubmit(function(s){if(s.indexOf("\x3c!---")>=0){var n=s.substring(0,s.indexOf("\x3c!---\x3e")),r=s.substring(s.indexOf("\x3c!---\x3e")+6);!0===e(i).is(":submit")&&e(i).parents("li:first").replaceWith(n),e("#live-preview ul.archive li.preview-"+e(i).parents("form").find("input[name=service]").val()).replaceWith(r)}a(),e(i).parents("li:first").removeAttr("style")}),!0!==e(i).is(":submit")},e("#enabled-services .services ul").sortable({receive:function(){n()},stop:function(){n(),e("li.service").enableSelection()},over:function(){e(this).find("ul").addClass("dropping"),e("#enabled-services li.end-fix").remove(),e("#enabled-services ul").append('<li class="end-fix"></li>')},out:function(){e(this).find("ul").removeClass("dropping"),e("#enabled-services li.end-fix").remove(),e("#enabled-services ul").append('<li class="end-fix"></li>')},helper:function(e,i){return i.find(".advanced-form").hide(),i.clone()},start:function(){e(".advanced-form").hide(),e("li.service").disableSelection()},placeholder:"dropzone",opacity:.8,delay:150,forcePlaceholderSize:!0,items:"li",connectWith:"#available-services ul, #enabled-services .services ul",cancel:".advanced-form"}),e("#available-services ul").sortable({opacity:.8,delay:150,cursor:"move",connectWith:"#enabled-services .services ul",placeholder:"dropzone",forcePlaceholderSize:!0,start:function(){e(".advanced-form").hide()}}),e(".service").on("keydown",function(i){switch(i.keyCode){case 13:case 32:t(e(this));break;case 37:r(e(this),"left");break;case 39:r(e(this),"right");break;default:return!0}i.preventDefault()}),e(".preview-hidden a").click(function(){return e(this).parent().find(".preview").toggle(),!1}),e("#new-service form").ajaxForm({beforeSubmit:function(){e("#new-service-form .error").hide(),e("#new-service-form img").show(),e("#new-service-form input[type=submit]").prop("disabled",!0)},success:function(i){e("#new-service-form img").hide(),""+i=="1"?(e("#new-service-form .inerror").removeClass("inerror").addClass("error"),e("#new-service-form .error").show(),e("#new-service-form input[type=submit]").prop("disabled",!1)):document.location.reload()}}),e("#button_style").change(function(){return a(),!0}).change(),e("input[name=sharing_label]").blur(function(){e("#live-preview h3.sd-title").text(e("<div/>").text(e(this).val()).html())}),e("#services-config a.remove").unbind("click").click(function(){var i=e(this).parent().next();return e(this).parents("li:first").css("backgroundImage",'url("'+sharing_loading_icon+'")'),i.ajaxSubmit(function(){i.parents("li:first").fadeOut(function(){e(this).remove(),a()})}),!1}),i()})}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/sharedaddy/sharing.min.js b/plugins/jetpack/_inc/build/sharedaddy/sharing.min.js
deleted file mode 100644
index 8ba62711..00000000
--- a/plugins/jetpack/_inc/build/sharedaddy/sharing.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* global WPCOM_sharing_counts, grecaptcha */
-/* jshint unused:false */
-var sharing_js_options;if(sharing_js_options&&sharing_js_options.counts)var WPCOMSharing={done_urls:[],get_counts:function(){var t,e,i,n,a;if("undefined"!=typeof WPCOM_sharing_counts)for(t in WPCOM_sharing_counts)if(i=WPCOM_sharing_counts[t],void 0===WPCOMSharing.done_urls[i]){for(n in e={pinterest:[window.location.protocol+"//api.pinterest.com/v1/urls/count.json?callback=WPCOMSharing.update_pinterest_count&url="+encodeURIComponent(t)],facebook:[window.location.protocol+"//graph.facebook.com/?callback=WPCOMSharing.update_facebook_count&ids="+encodeURIComponent(t)]})if(jQuery("a[data-shared=sharing-"+n+"-"+i+"]").length){for(;a=e[n].pop();)jQuery.getScript(a);sharing_js_options.is_stats_active&&WPCOMSharing.bump_sharing_count_stat(n)}WPCOMSharing.done_urls[i]=!0}},get_permalink:function(t){return t="https:"===window.location.protocol?t.replace(/^http:\/\//i,"https://"):t.replace(/^https:\/\//i,"http://")},update_facebook_count:function(t){var e,i;if(t)for(e in t)t.hasOwnProperty(e)&&t[e].share&&t[e].share.share_count&&(i=WPCOMSharing.get_permalink(e))in WPCOM_sharing_counts&&WPCOMSharing.inject_share_count("sharing-facebook-"+WPCOM_sharing_counts[i],t[e].share.share_count)},update_pinterest_count:function(t){void 0!==t.count&&1*t.count>0&&WPCOMSharing.inject_share_count("sharing-pinterest-"+WPCOM_sharing_counts[t.url],t.count)},inject_share_count:function(t,e){var i=jQuery("a[data-shared="+t+"] > span");i.find(".share-count").remove(),i.append('<span class="share-count">'+WPCOMSharing.format_count(e)+"</span>")},format_count:function(t){return t<1e3?t:t>=1e3&&t<1e4?String(t).substring(0,1)+"K+":"10K+"},bump_sharing_count_stat:function(t){(new Image).src=document.location.protocol+"//pixel.wp.com/g.gif?v=wpcom-no-pv&x_sharing-count-request="+t+"&r="+Math.random()}};!function(t){var e,i;function n(){var e;void 0!==WPCOMSharing&&WPCOMSharing.get_counts(),(e=t(".sharedaddy a.sharing-anchor")).click(function(){return!1}),t(".sharedaddy a").each(function(){t(this).attr("href")&&-1!==t(this).attr("href").indexOf("share=")&&t(this).attr("href",t(this).attr("href")+"&nb=1")}),e.on("click",function(){var e=t(this),n=e.parents("div:first").find(".inner");n.is(":animated")||!0!==n.data("justSlid")&&(i.slideUp(200),n.css({left:e.position().left+"px",top:e.position().top+e.height()+3+"px"}).slideToggle(200))}),void 0===document.ontouchstart?e.hover(function(){var e,n=t(this),a=n.parents("div:first").find(".inner");a.is(":animated")||(e=setTimeout(function(){var t,e,r,o,s;i.slideUp(200),a.data("justSlid",!0),a.css({left:n.position().left+"px",top:n.position().top+n.height()+3+"px"}).slideDown(200,function(){n.data("hasoriginal",!0).data("hasitem",!1),setTimeout(function(){a.data("justSlid",!1)},300),a.mouseleave(t).mouseenter(e),n.mouseleave(r).mouseenter(o)}),t=function(){if(n.data("hasitem",!1),!1===n.data("hasoriginal")){var t=setTimeout(s,800);n.data("timer2",t)}},e=function(){n.data("hasitem",!0),clearTimeout(n.data("timer2"))},r=function(){if(n.data("hasoriginal",!1),!1===n.data("hasitem")){var t=setTimeout(s,800);n.data("timer2",t)}},o=function(){n.data("hasoriginal",!0),clearTimeout(n.data("timer2"))},s=function(){return a.data("justSlid",!0),a.slideUp(200,function(){setTimeout(function(){a.data("justSlid",!1)},300)}),n.unbind("mouseleave",r).unbind("mouseenter",o),a.unbind("mouseleave",t).unbind("mouseenter",t),!1}},200),n.data("timer",e))},function(){e.each(function(){clearTimeout(t(this).data("timer"))}),e.data("timer",!1)}):t(document.body).addClass("jp-sharing-input-touch"),t(document).click(function(){e.each(function(){clearTimeout(t(this).data("timer"))}),e.data("timer",!1),t(".sharedaddy .inner").slideUp()}),t(".sharedaddy ul").each(function(){if("yep"!==t(this).data("has-click-events")){t(this).data("has-click-events","yep");t(this).find("a.share-print").click(function(){var e=t(this).attr("href"),i=function(){if(-1===e.indexOf("#print")){var i=(new Date).getTime();n=i,a=e,t("body:first").append('<iframe style="position:fixed;top:100;left:100;height:1px;width:1px;border:none;" id="printFrame-'+n+'" name="printFrame-'+n+'" src="'+a+'" onload="frames[\'printFrame-'+n+"'].focus();frames['printFrame-"+n+"'].print();\"></iframe>")}else print();var n,a};return t(this).parents(".sharing-hidden").length>0?t(this).parents(".inner").slideUp(0,function(){i()}):i(),!1}),t(this).find("a.share-press-this").click(function(){var e="";return window.getSelection?e=window.getSelection():document.getSelection?e=document.getSelection():document.selection&&(e=document.selection.createRange().text),e&&t(this).attr("href",t(this).attr("href")+"&sel="+encodeURI(e)),window.open(t(this).attr("href"),"t","toolbar=0,resizable=1,scrollbars=1,status=1,width=720,height=570")||(document.location.href=t(this).attr("href")),!1}),t("a.share-email",this).on("click",function(){var e=t(this).attr("href"),n=window.location.protocol+"//"+window.location.hostname+"/";return 0!==e.indexOf(n)||(i.is(":visible")?i.slideUp(200):(t(".sharedaddy .inner").slideUp(),t("#sharing_email .response").remove(),t("#sharing_email form").show(),t("#sharing_email form input[type=submit]").removeAttr("disabled"),t("#sharing_email form a.sharing_cancel").show(),"object"==typeof grecaptcha&&"function"==typeof grecaptcha.reset&&window.___grecaptcha_cfg.count&&grecaptcha.reset(),i.css({left:t(this).offset().left+"px",top:t(this).offset().top+t(this).height()+"px"}).slideDown(200),t("#sharing_email a.sharing_cancel").unbind("click").click(function(){return t("#sharing_email .errors").hide(),i.slideUp(200),t("#sharing_background").fadeOut(),!1}),t("#sharing_email input[type=submit]").unbind("click").click(function(){var n=t(this).parents("form"),a=n.find("input[name=source_email]"),r=n.find("input[name=target_email]");return t(this).prop("disabled",!0),n.find("a.sharing_cancel").hide(),n.find("img.loading").show(),t("#sharing_email .errors").hide(),t("#sharing_email .error").removeClass("error"),a.share_is_email()||a.addClass("error"),r.share_is_email()||r.addClass("error"),0===t("#sharing_email .error").length?(t.ajax({url:e,type:"POST",data:n.serialize(),success:function(e){n.find("img.loading").hide(),"1"===e||"2"===e||"3"===e?(t("#sharing_email .errors-"+e).show(),n.find("input[type=submit]").removeAttr("disabled"),n.find("a.sharing_cancel").show(),"object"==typeof grecaptcha&&"function"==typeof grecaptcha.reset&&grecaptcha.reset()):(t("#sharing_email form").hide(),i.append(e),t("#sharing_email a.sharing_cancel").click(function(){return i.slideUp(200),t("#sharing_background").fadeOut(),!1}))}}),!1):(n.find("img.loading").hide(),n.find("input[type=submit]").removeAttr("disabled"),n.find("a.sharing_cancel").show(),t("#sharing_email .errors-1").show(),!1)})),!1)})}}),t("li.share-email, li.share-custom a.sharing-anchor").addClass("share-service-visible")}t.fn.extend({share_is_email:function(){return/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(this.val())}}),e=t(document.body).on("post-load",n),t(document).ready(function(){i=t("#sharing_email"),e.append(i),n()})}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/shortcodes/js/brightcove.min.js b/plugins/jetpack/_inc/build/shortcodes/js/brightcove.min.js
deleted file mode 100644
index ea4469f0..00000000
--- a/plugins/jetpack/_inc/build/shortcodes/js/brightcove.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* global brightcove, brightcoveData */
-!function(e){var t=document.createElement("script"),c="co.jp"===brightcoveData.tld?"co.jp":"com",o=!1;t.src="https://sadmin.brightcove."+c+"/js/BrightcoveExperiences.js",t.type="text/javascript",t.language="JavaScript",document.head.appendChild(t),function t(){clearTimeout(o);"object"==typeof brightcove?(e(document).ready(brightcove.createExperiences),e("body").on("post-load",brightcove.createExperiences),brightcove.createExperiences()):o=setTimeout(t,100)}()}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/shortcodes/js/gist.min.js b/plugins/jetpack/_inc/build/shortcodes/js/gist.min.js
deleted file mode 100644
index 81841f1a..00000000
--- a/plugins/jetpack/_inc/build/shortcodes/js/gist.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-!function(e,t){var a=!1,n=function(){e(".gist-oembed").each(function(t,n){var o="https://gist.github.com/"+e(n).data("gist");e.ajax({url:o,dataType:"jsonp"}).done(function(t){if(e(n).replaceWith(t.div),!a){var o='<link rel="stylesheet" href="'+t.stylesheet+'" type="text/css" />';e("head").append(o),a=!0}})})};e(document).ready(n),e("body").on("post-load",n)}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/shortcodes/js/instagram.min.js b/plugins/jetpack/_inc/build/shortcodes/js/instagram.min.js
deleted file mode 100644
index 58674b6d..00000000
--- a/plugins/jetpack/_inc/build/shortcodes/js/instagram.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* global window */
-!function(){var e=function(){if(void 0!==window.instgrm&&window.instgrm.Embeds&&"function"==typeof window.instgrm.Embeds.process)window.instgrm.Embeds.process();else{var e=document.createElement("script");e.async=!0,e.defer=!0,e.src="//platform.instagram.com/en_US/embeds.js",document.getElementsByTagName("body")[0].appendChild(e)}};"undefined"!=typeof jQuery&&"undefined"!=typeof infiniteScroll&&jQuery(document.body).on("post-load",e),e()}(); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/shortcodes/js/jmpress.min.js b/plugins/jetpack/_inc/build/shortcodes/js/jmpress.min.js
deleted file mode 100644
index 8d751419..00000000
--- a/plugins/jetpack/_inc/build/shortcodes/js/jmpress.min.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/**
- * jmpress.js v0.4.5
- * http://jmpressjs.github.com/jmpress.js
- *
- * A jQuery plugin to build a website on the infinite canvas.
- *
- * Copyright 2013 Kyle Robinson Young @shama & Tobias Koppers @sokra
- * Licensed MIT
- * http://www.opensource.org/licenses/mit-license.php
- *
- * Based on the foundation laid by Bartek Szopka @bartaz
- */
-!function(e,t,s,a){"use strict";var r,n,i,o=(r=t.createElement("dummy").style,n="Webkit Moz O ms Khtml".split(" "),i={},function(e){if(void 0===i[e]){var t=e.charAt(0).toUpperCase()+e.substr(1),s=(e+" "+n.join(t+" ")+t).split(" ");for(var o in i[e]=null,s)if(r[s[o]]!==a){i[e]=s[o];break}}return i[e]});function c(e){if(e){var t=1+e.substr(1).search(/[A-Z]/);return"-"+e.substr(0,t).toLowerCase()+"-"+e.substr(t).toLowerCase()}}function l(e){return e?e+",":""}function u(e){return e.length>0?e:null}var p={stepSelector:".step",containerClass:"",canvasClass:"",areaClass:"",notSupportedClass:"not-supported",fullscreen:!0,animation:{transformOrigin:"top left",transitionProperty:l(c(o("transform")))+l(c(o("perspective")))+"opacity",transitionDuration:"1s",transitionDelay:"500ms",transitionTimingFunction:"ease-in-out",transformStyle:"preserve-3d"},transitionDuration:1500},f={beforeChange:1,beforeInitStep:1,initStep:1,beforeInit:1,afterInit:1,beforeDeinit:1,afterDeinit:1,applyStep:1,unapplyStep:1,setInactive:1,beforeActive:1,setActive:1,selectInitialStep:1,selectPrev:1,selectNext:1,selectHome:1,selectEnd:1,idle:1,applyTarget:1};for(var d in f)p[d]=[];function m(r){r=e.extend(!0,{},r||{});var n={},i=null;for(i in f)n[i]=e.isFunction(r[i])?[r[i]]:r[i],r[i]=[];var o=e.extend(!0,{},p,r);for(i in f)n[i]&&Array.prototype.push.apply(o[i],n[i]);var c=e(this),l=null,d=null,m={container:"",area:""},g=null,b=null,y=!1,j=null,D=!1;function S(t,s){var a=v(t),r={oldStyle:e(t).attr("style")||""},n={data:a,stepData:r};x.call(this,"beforeInitStep",e(t),n),r.delegate=a.delegate,x.call(this,"initStep",e(t),n),e(t).data("stepData",r),e(t).attr("id")||e(t).attr("id","step-"+(s+1)),x.call(this,"applyStep",e(t),n)}function w(t){var s=e(t).data("stepData");e(t).attr("style",s.oldStyle),x.call(this,"unapplyStep",e(t),{stepData:s})}function x(t,s,a){a.settings=o,a.current=b,a.container=l,a.parents=s?e(s).parentsUntil(c).not(c).filter(o.stepSelector):null,a.current=b,a.jmpress=this;var r={};return e.each(o[t],function(e,t){r.value=t.call(c,s,a)||r.value}),r.value}function C(t,s){var r;if(e.isPlainObject(t)&&(r=t.substep,t=t.step),"string"==typeof t&&(t=c.find(t).first()),!t||!e(t).data("stepData"))return!1;T.call(this);var n=e(t).data("stepData"),i=!1;if(x.call(this,"beforeChange",t,{stepData:n,reason:s,cancel:function(){i=!0}}),i)return a;var l={},p=t;e(t).data("stepData").delegate&&((p=u(e(t).parentsUntil(c).filter(o.stepSelector).filter(n.delegate))||u(e(t).near(n.delegate))||u(e(t).near(n.delegate,!0))||u(e(n.delegate,c)))?n=p.data("stepData"):p=t),D&&x.call(this,"setInactive",D,{stepData:e(D).data("stepData"),delegatedFrom:y,reason:s,target:l,nextStep:p,nextSubstep:r,nextStepData:n});var f={stepData:n,delegatedFrom:t,reason:s,target:l,substep:r,prevStep:D,prevSubstep:j,prevStepData:D&&e(D).data("stepData")};return x.call(this,"beforeActive",p,f),x.call(this,"setActive",p,f),b.jmpressClass&&e(c).removeClass(b.jmpressClass),e(c).addClass(b.jmpressClass="step-"+e(p).attr("id")),b.jmpressDelegatedClass&&e(c).removeClass(b.jmpressDelegatedClass),e(c).addClass(b.jmpressDelegatedClass="delegating-step-"+e(t).attr("id")),x.call(this,"applyTarget",p,e.extend({canvas:g,area:d,beforeActive:D},f)),y=t,j=f.substep,D=p,b.idleTimeout&&clearTimeout(b.idleTimeout),b.idleTimeout=setTimeout(function(){x.call(this,"idle",p,f)},Math.max(1,o.transitionDuration-100)),p}function T(){!function t(){if("BODY"===e(l)[0].tagName)try{s.scrollTo(0,0)}catch(e){}function a(){0===e(l).scrollTop()&&0===e(l).scrollLeft()||t()}e(l).scrollTop(0),e(l).scrollLeft(0),setTimeout(a,1),setTimeout(a,10),setTimeout(a,100),setTimeout(a,200),setTimeout(a,400)}()}if(c.data("jmpressmethods",{select:C,reselect:function(e){return C({step:y,substep:j},e)},scrollFix:T,goTo:function(e){return C.call(this,e,"jump")},next:function(){return C.call(this,x.call(this,"selectNext",y,{stepData:e(y).data("stepData"),substep:j}),"next")},prev:function(){return C.call(this,x.call(this,"selectPrev",y,{stepData:e(y).data("stepData"),substep:j}),"prev")},home:function(){return C.call(this,x.call(this,"selectHome",y,{stepData:e(y).data("stepData")}),"home")},end:function(){return C.call(this,x.call(this,"selectEnd",y,{stepData:e(y).data("stepData")}),"end")},canvas:function(t){return h(g,t||{}),e(g)},container:function(){return l},settings:function(){return o},active:function(){return D&&e(D)},current:function(){return b},fire:function(t,s,a){if(f[t])return x.call(this,t,s,a);e.error("callback "+t+" is not registered.")},init:function(t){S.call(this,e(t),b.nextIdNumber++)},deinit:function(t){t?w.call(this,e(t)):function(){y&&x.call(this,"setInactive",y,{stepData:e(y).data("stepData"),reason:"deinit"}),b.jmpressClass&&e(c).removeClass(b.jmpressClass),x.call(this,"beforeDeinit",e(this),{}),e(o.stepSelector,c).each(function(e){w.call(c,this)}),l.attr("style",m.container),o.fullscreen&&e("html").attr("style",""),d.attr("style",m.area),e(g).children().each(function(){c.append(e(this))}),o.fullscreen?g.remove():(g.remove(),d.remove()),x.call(this,"afterDeinit",e(this),{}),e(c).data("jmpressmethods",!1)}.call(this)},reapply:function(t){x.call(this,"unapplyStep",e(t),{stepData:t.data("stepData")}),x.call(this,"applyStep",e(t),{stepData:t.data("stepData")})}}),!1!=(-1===(P=navigator.userAgent.toLowerCase()).search(/(iphone)|(ipod)|(android)/)||-1!==P.search(/(chrome)/))){var P;o.notSupportedClass&&c.removeClass(o.notSupportedClass);var M=e(o.stepSelector,c);l=c,d=e("<div />"),g=e("<div />"),e(c).children().filter(M).each(function(){g.append(e(this))}),o.fullscreen&&(l=e("body"),e("html").css({overflow:"hidden"}),d=c),m.area=d.attr("style")||"",m.container=l.attr("style")||"",o.fullscreen?(l.css({height:"100%"}),c.append(g)):(l.css({position:"relative"}),d.append(g),c.append(d)),e(l).addClass(o.containerClass),e(d).addClass(o.areaClass),e(g).addClass(o.canvasClass),t.documentElement.style.height="100%",l.css({overflow:"hidden"});var A={position:"absolute",transitionDuration:"0s"};A=e.extend({},o.animation,A),h(d,A),h(d,{top:"50%",left:"50%",perspective:"1000px"}),h(g,A),b={},x.call(this,"beforeInit",null,{}),M.each(function(e){S.call(c,this,e)}),b.nextIdNumber=M.length,x.call(this,"afterInit",null,{}),C.call(this,x.call(this,"selectInitialStep","init",{})),o.initClass&&e(M).removeClass(o.initClass)}else o.notSupportedClass&&c.addClass(o.notSupportedClass)}function h(t,s){var a,r,n={};for(a in s)s.hasOwnProperty(a)&&null!==(r=o(a))&&(n[r]=s[a]);return e(t).css(n),t}function v(t){if(e(t)[0].dataset)return e.extend({},e(t)[0].dataset);var s={},a=e(t)[0].attributes;return e.each(a,function(e,t){"data-"===t.nodeName.substr(0,5)&&(s[function(e){e=e.split("-");for(var t=1;t<e.length;t++)e[t]=e[t].substr(0,1).toUpperCase()+e[t].substr(1);return e.join("")}(t.nodeName.substr(5))]=t.nodeValue)}),s}var g={init:m,initialized:function(){return!!e(this).data("jmpressmethods")},deinit:function(){},css:h,pfx:o,defaults:function(){return p},register:function(t,s){e.isFunction(s)?g[t]?e.error("function "+t+" is already registered."):g[t]=s:f[t]?e.error("callback "+t+" is already registered."):(f[t]=1,p[t]=[])},dataset:v};e.fn.jmpress=function(t){var s,a=arguments;return e(this).each(function(r,n){s=function(){var s=e(this).data("jmpressmethods");if(s&&s[t])return s[t].apply(this,Array.prototype.slice.call(arguments,1));if(g[t])return g[t].apply(this,Array.prototype.slice.call(arguments,1));if(f[t]&&s){var a=s.settings(),r=Array.prototype.slice.call(arguments,1)[0];e.isFunction(r)&&(a[t]=a[t]||[],a[t].push(r))}else{if("object"==typeof t||!t)return m.apply(this,arguments);e.error("Method "+t+" does not exist on jQuery.jmpress")}return this}.apply(n,a)}),s},e.extend({jmpress:function(t){if(g[t])return g[t].apply(this,Array.prototype.slice.call(arguments,1));if(f[t]){var s=Array.prototype.slice.call(arguments,1)[0];e.isFunction(s)?p[t].push(s):e.error("Second parameter should be a function: $.jmpress( callbackName, callbackFunction )")}else e.error("Method "+t+" does not exist on jQuery.jmpress")}})}(jQuery,document,window),function(e,t,s,a){"use strict";function r(t,s,a,r){var n;return t.each(function(t,i){return(!r||!(n=s(i,a,r)))&&(e(i).is(a)?(n=i,!1):!(!r&&(n=s(i,a,r)))&&void 0)}),n}function n(t,s,a){var i=e(t).children();return a&&(i=e(i.get().reverse())),r(i,n,s,a)}function i(t,s,a){return r(e(t)[a?"prevAll":"nextAll"](),n,s,a)}e.fn.near=function(t,s){var a=[];return e(this).each(function(r,o){var c=!s&&n(o,t,s)||i(o,t,s)||function(t,s,a){var r,n=e(t).parents();return n=e(n.get()),e.each(n.get(),function(t,n){return a&&e(n).is(s)?(r=n,!1):!(r=i(n,s,a))&&void 0}),r}(o,t,s);c&&a.push(c)}),e(a)}}(jQuery,document,window),function(e,t,s,a){"use strict";function r(e){return Math.round(1e4*e)/1e4+""}var n={3:{transform:function(t,s){var a="translate(-50%,-50%)";e.each(s,function(e,t){var s,n=["X","Y","Z"];if("translate"===t[0])a+=" translate3d("+r(t[1]||0)+"px,"+r(t[2]||0)+"px,"+r(t[3]||0)+"px)";else if("rotate"===t[0]){var i=t[4]?[1,2,3]:[3,2,1];for(s=0;s<3;s++)a+=" rotate"+n[i[s]-1]+"("+r(t[i[s]]||0)+"deg)"}else if("scale"===t[0])for(s=0;s<3;s++)a+=" scale"+n[s]+"("+r(t[s+1]||1)+")"}),e.jmpress("css",t,e.extend({},{transform:a}))}},2:{transform:function(t,s){var a="translate(-50%,-50%)";e.each(s,function(e,t){var s=["X","Y"];if("translate"===t[0])a+=" translate("+r(t[1]||0)+"px,"+r(t[2]||0)+"px)";else if("rotate"===t[0])a+=" rotate("+r(t[3]||0)+"deg)";else if("scale"===t[0])for(var n=0;n<2;n++)a+=" scale"+s[n]+"("+r(t[n+1]||1)+")"}),e.jmpress("css",t,e.extend({},{transform:a}))}},1:{transform:function(t,s){var a={top:0,left:0};e.each(s,function(e,t){"translate"===t[0]&&(a.left=Math.round(t[1]||0)+"px",a.top=Math.round(t[2]||0)+"px")}),t.animate(a,1e3)}}},i=e.jmpress("pfx","perspective")?n[3]:e.jmpress("pfx","transform")?n[2]:n[1];e.jmpress("defaults").reasonableAnimation={},e.jmpress("initStep",function(t,s){var a=s.data,r=s.stepData,n=parseFloat;e.extend(r,{x:n(a.x)||0,y:n(a.y)||0,z:n(a.z)||0,r:n(a.r)||0,phi:n(a.phi)||0,rotate:n(a.rotate)||0,rotateX:n(a.rotateX)||0,rotateY:n(a.rotateY)||0,rotateZ:n(a.rotateZ)||0,revertRotate:!1,scale:n(a.scale)||1,scaleX:n(a.scaleX)||!1,scaleY:n(a.scaleY)||!1,scaleZ:n(a.scaleZ)||1})}),e.jmpress("afterInit",function(t,s){var a=s.settings.stepSelector,r=s.current;r.perspectiveScale=1,r.maxNestedDepth=0;for(var n=e(s.jmpress).find(a).children(a);n.length;)r.maxNestedDepth++,n=n.children(a)}),e.jmpress("applyStep",function(t,s){e.jmpress("css",e(t),{position:"absolute",transformStyle:"preserve-3d"}),s.parents.length>0&&e.jmpress("css",e(t),{top:"50%",left:"50%"});var a=s.stepData,r=[["translate",a.x||a.r*Math.sin(a.phi*Math.PI/180),a.y||-a.r*Math.cos(a.phi*Math.PI/180),a.z],["rotate",a.rotateX,a.rotateY,a.rotateZ||a.rotate,!0],["scale",a.scaleX||a.scale,a.scaleY||a.scale,a.scaleZ||a.scale]];i.transform(t,r)}),e.jmpress("setActive",function(t,s){var r=s.target,n=s.stepData,i=r.transform=[];r.perspectiveScale=1;for(var o=s.current.maxNestedDepth;o>(s.parents.length||0);o--)i.push(["scale"],["rotate"],["translate"]);i.push(["scale",1/(n.scaleX||n.scale),1/(n.scaleY||n.scale),1/n.scaleZ]),i.push(["rotate",-n.rotateX,-n.rotateY,-(n.rotateZ||n.rotate)]),i.push(["translate",-(n.x||n.r*Math.sin(n.phi*Math.PI/180)),-(n.y||-n.r*Math.cos(n.phi*Math.PI/180)),-n.z]),r.perspectiveScale*=n.scaleX||n.scale,e.each(s.parents,function(t,s){var a=e(s).data("stepData");i.push(["scale",1/(a.scaleX||a.scale),1/(a.scaleY||a.scale),1/a.scaleZ]),i.push(["rotate",-a.rotateX,-a.rotateY,-(a.rotateZ||a.rotate)]),i.push(["translate",-(a.x||a.r*Math.sin(a.phi*Math.PI/180)),-(a.y||-a.r*Math.cos(a.phi*Math.PI/180)),-a.z]),r.perspectiveScale*=a.scaleX||a.scale}),e.each(i,function(e,t){function r(r){s.current["rotate"+r+"-"+e]===a&&(s.current["rotate"+r+"-"+e]=t[r]||0);var n=s.current["rotate"+r+"-"+e],i=n%360,o=(t[r]||0)%360;i<0&&(i+=360),o<0&&(o+=360);var c=o-i;c<-180?c+=360:c>180&&(c-=360),s.current["rotate"+r+"-"+e]=t[r]=n+c}"rotate"===t[0]&&(r(1),r(2),r(3))})}),e.jmpress("applyTarget",function(t,s){var a,r=s.target,n=(s.stepData,s.settings),o=1.3*r.perspectiveScale<s.current.perspectiveScale,c=r.perspectiveScale>1.3*s.current.perspectiveScale,l=-1;e.each(r.transform,function(e,t){if(!(t.length<=1||"rotate"===t[0]&&t[1]%360==0&&t[2]%360==0&&t[3]%360==0))return"scale"===t[0]&&void(l=e)}),l!==s.current.oldLastScale&&(o=c=!1,s.current.oldLastScale=l);var u=[];if(-1!==l)for(;l>=0;)"scale"===r.transform[l][0]&&(u.push(r.transform[l]),r.transform[l]=["scale"]),l--;var p=n.animation;n.reasonableAnimation[s.reason]&&(p=e.extend({},p,n.reasonableAnimation[s.reason])),a={perspective:Math.round(1e3*r.perspectiveScale)+"px"},a=e.extend({},p,a),o||(a.transitionDelay="0s"),s.beforeActive||(a.transitionDuration="0s",a.transitionDelay="0s"),e.jmpress("css",s.area,a),i.transform(s.area,u),a=e.extend({},p),c||(a.transitionDelay="0s"),s.beforeActive||(a.transitionDuration="0s",a.transitionDelay="0s"),s.current.perspectiveScale=r.perspectiveScale,e.jmpress("css",s.canvas,a),i.transform(s.canvas,r.transform)})}(jQuery,document,window),function(e,t,s,a){"use strict";var r=e.jmpress,n=r("defaults");n.nestedActiveClass="nested-active",n.activeClass="active",r("setInactive",function(t,s){var a=s.settings,r=a.activeClass,n=a.nestedActiveClass;r&&e(t).removeClass(r),n&&e.each(s.parents,function(t,s){e(s).removeClass(n)})}),r("setActive",function(t,s){var a=s.settings,r=a.activeClass,n=a.nestedActiveClass;r&&e(t).addClass(r),n&&e.each(s.parents,function(t,s){e(s).addClass(n)})})}(jQuery,document,window),function(e,t,s,a){"use strict";var r=e.jmpress;function n(t,s){return e(this).find(s.settings.stepSelector).first()}function i(t,s,a,r){if(!s)return!1;var n=a.settings.stepSelector;s=e(s);do{var i=s.near(n,r);if(0!==i.length&&0!==i.closest(t).length||(i=e(t).find(n)[r?"last":"first"]()),!i.length)return!1;s=i}while(s.data("stepData").exclude);return s}r("initStep",function(e,t){t.stepData.exclude=t.data.exclude&&-1===["false","no"].indexOf(t.data.exclude)}),r("selectInitialStep",n),r("selectHome",n),r("selectEnd",function(t,s){return e(this).find(s.settings.stepSelector).last()}),r("selectPrev",function(e,t){return i(this,e,t,!0)}),r("selectNext",function(e,t){return i(this,e,t)})}(jQuery,document,window),function(e,t,s,a){"use strict";e.jmpress("selectInitialStep",function(e,t){return t.settings.start})}(jQuery,document,window),function(e,t,s,a){"use strict";var r=e.jmpress;function n(t,s,a){for(var r=0;r<s.length-1;r++){var n=s[r],i=s[r+1];e(t).jmpress("initialized")?e(n,t).data("stepData")[a]=i:e(n,t).attr("data-"+a,i)}}function i(t,s,a,r){var n=s.stepData;if(n[a]){var i=e(t).near(n[a],r);if(i&&i.length)return i;if((i=e(n[a],this)[r?"last":"first"]())&&i.length)return i}}r("register","route",function(e,t,s){"string"==typeof e&&(e=[e,e]),n(this,e,s?"prev":"next"),t||n(this,e.reverse(),s?"next":"prev")}),r("initStep",function(e,t){for(var s in{next:1,prev:1})t.stepData[s]=t.data[s]}),r("selectNext",function(e,t){return i.call(this,e,t,"next")}),r("selectPrev",function(e,t){return i.call(this,e,t,"prev",!0)})}(jQuery,document,window),function(e,t,s,a){"use strict";var r=e.jmpress,n="ajax:loadStep";r("register",n),r("register","ajax:afterStepLoaded"),r("defaults").ajaxLoadedClass="loaded",r("initStep",function(t,s){s.stepData.src=e(t).attr("href")||s.data.src||!1,s.stepData.srcLoaded=!1}),r(n,function(t,s){var a=s.stepData,r=a&&a.src,n=s.settings;r&&(e(t).addClass(n.ajaxLoadedClass),a.srcLoaded=!0,e(t).load(r,function(a,r,n){e(s.jmpress).jmpress("fire","ajax:afterStepLoaded",t,e.extend({},s,{response:a,status:r,xhr:n}))}))}),r("idle",function(t,s){if(t){var a=s.settings,r=e(this);s.stepData;e(t).add(e(t).near(a.stepSelector)).add(e(t).near(a.stepSelector,!0)).add(r.jmpress("fire","selectPrev",t,{stepData:e(t).data("stepData")})).add(r.jmpress("fire","selectNext",t,{stepData:e(t).data("stepData")})).each(function(){var t=e(this).data("stepData");t.src&&!t.srcLoaded&&r.jmpress("fire",n,this,{stepData:e(this).data("stepData")})})}}),r("setActive",function(t,s){var a=e(t).data("stepData");a.src&&!a.srcLoaded&&e(this).jmpress("fire",n,t,{stepData:e(t).data("stepData")})})}(jQuery,document,window),function(e,t,s,a){"use strict";var r=e.jmpress;function n(t){try{var r=e("#"+s.location.hash.replace(/^#\/?/,""));return r.length>0&&r.is(t.stepSelector)?r:a}catch(e){}}function i(e){var t="#/"+e;s.history&&s.history.pushState?s.location.hash!==t&&s.history.pushState({},"",t):s.location.hash!==t&&(s.location.hash=t)}r("defaults").hash={use:!0,update:!0,bindChange:!0},r("selectInitialStep",function(t,a){var r=a.settings,o=r.hash,c=a.current,l=e(this);if(a.current.hashNamespace=".jmpress-"+Math.round(1e5*Math.random(),0),o.use)return o.bindChange&&(e(s).bind("hashchange"+c.hashNamespace,function(e){var t=n(r);l.jmpress("initialized")&&l.jmpress("scrollFix"),t&&t.length&&(t.attr("id")!==l.jmpress("active").attr("id")&&l.jmpress("select",t),i(t.attr("id"))),e.preventDefault()}),e("a[href^='#']").on("click"+c.hashNamespace,function(t){var s=e(this).attr("href");try{e(s).is(r.stepSelector)&&(l.jmpress("select",s),t.preventDefault(),t.stopPropagation())}catch(e){}})),n(r)}),r("afterDeinit",function(t,a){e("a[href^='#']").off(a.current.hashNamespace),e(s).unbind(a.current.hashNamespace)}),r("setActive",function(t,s){var a=s.settings,r=s.current;a.hash.use&&a.hash.update&&(clearTimeout(r.hashtimeout),r.hashtimeout=setTimeout(function(){i(e(s.delegatedFrom).attr("id"))},a.transitionDuration+200))})}(jQuery,document,window),function(e,t,s,a){"use strict";var r=e.jmpress;function n(e){e.preventDefault(),e.stopPropagation()}r("defaults").keyboard={use:!0,keys:{33:"prev",37:"prev",38:"prev",9:"next:prev",32:"next",34:"next",39:"next",40:"next",36:"home",35:"end"},ignore:{INPUT:[32,37,38,39,40],TEXTAREA:[32,37,38,39,40],SELECT:[38,40]},tabSelector:"a[href]:visible, :input:visible"},r("afterInit",function(s,a){var r=a.settings,i=r.keyboard,o=i.ignore,c=a.current,l=e(this);r.fullscreen||l.attr("tabindex",0),c.keyboardNamespace=".jmpress-"+Math.round(1e5*Math.random(),0),e(r.fullscreen?t:l).bind("keypress"+c.keyboardNamespace,function(e){for(var t in o)if(e.target.nodeName===t&&-1!==o[t].indexOf(e.which))return;(e.which>=37&&e.which<=40||32===e.which)&&n(e)}),e(r.fullscreen?t:l).bind("keydown"+c.keyboardNamespace,function(t){var s=e(t.target);if((r.fullscreen||s.closest(l).length)&&i.use){for(var a in o)if(s[0].nodeName===a&&-1!==o[a].indexOf(t.which))return;var c,u=!1;if(9===t.which){if(s.closest(l.jmpress("active")).length?(c=s.near(i.tabSelector,t.shiftKey),e(c).closest(r.stepSelector).is(l.jmpress("active"))||(c=void 0)):t.shiftKey?u=!0:c=l.jmpress("active").find("a[href], :input").filter(":visible").first(),c&&c.length>0)return c.focus(),l.jmpress("scrollFix"),void n(t);t.shiftKey&&(u=!0)}var p=i.keys[t.which];"string"==typeof p?(-1!==p.indexOf(":")&&(p=p.split(":"),p=t.shiftKey?p[1]:p[0]),l.jmpress(p),n(t)):e.isFunction(p)?p.call(l,t):p&&(l.jmpress.apply(l,p),n(t)),u&&((c=l.jmpress("active").find("a[href], :input").filter(":visible").last()).focus(),l.jmpress("scrollFix"))}})}),r("afterDeinit",function(s,a){e(t).unbind(a.current.keyboardNamespace)})}(jQuery,document,window),function(e,t,s,a){"use strict";var r,n=(r=navigator.userAgent.toLowerCase(),(/(chrome)[ \/]([\w.]+)/.exec(r)||/(webkit)[ \/]([\w.]+)/.exec(r)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(r)||/(msie) ([\w.]+)/.exec(r)||r.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(r)||[])[1]||""),i=e.jmpress("defaults");i.viewPort={width:!1,height:!1,maxScale:0,minScale:0,zoomable:0,zoomBindMove:!0,zoomBindWheel:!0};var o=i.keyboard.keys;function c(e,t){return Math.max(Math.min(e,t),-t)}function l(t,s,a){var r=e(this).jmpress("current"),n=e(this).jmpress("settings"),i=e(this).jmpress("active").data("stepData"),o=e(this).jmpress("container");if(!(0===r.userZoom&&a<0)){var l=i.viewPortZoomable||n.viewPort.zoomable;if(!(r.userZoom===l&&a>0)){r.userZoom+=a;var u=e(o).innerWidth()/2,p=e(o).innerHeight()/2;t=t?t-u:t,s=s?s-p:s,r.userTranslateX=c(r.userTranslateX-a*t/r.zoomOriginWindowScale/l,u*r.userZoom*r.userZoom/l),r.userTranslateY=c(r.userTranslateY-a*s/r.zoomOriginWindowScale/l,p*r.userZoom*r.userZoom/l),e(this).jmpress("reselect","zoom")}}}o["mozilla"===n?107:187]="zoomIn",o["mozilla"===n?109:189]="zoomOut",i.reasonableAnimation.resize={transitionDuration:"0s",transitionDelay:"0ms"},i.reasonableAnimation.zoom={transitionDuration:"0s",transitionDelay:"0ms"},e.jmpress("initStep",function(e,t){for(var s in{viewPortHeight:1,viewPortWidth:1,viewPortMinScale:1,viewPortMaxScale:1,viewPortZoomable:1})t.stepData[s]=t.data[s]&&parseFloat(t.data[s])}),e.jmpress("afterInit",function(a,r){var n=this;r.current.viewPortNamespace=".jmpress-"+Math.round(1e5*Math.random(),0),e(s).bind("resize"+r.current.viewPortNamespace,function(t){e(n).jmpress("reselect","resize")}),r.current.userZoom=0,r.current.userTranslateX=0,r.current.userTranslateY=0,r.settings.viewPort.zoomBindWheel&&e(r.settings.fullscreen?t:this).bind("mousewheel"+r.current.viewPortNamespace+" DOMMouseScroll"+r.current.viewPortNamespace,function(t,s){var a=(s=s||t.originalEvent.wheelDelta||-t.originalEvent.detail)/Math.abs(s);return a<0?e(r.jmpress).jmpress("zoomOut",t.originalEvent.x,t.originalEvent.y):a>0&&e(r.jmpress).jmpress("zoomIn",t.originalEvent.x,t.originalEvent.y),!1}),r.settings.viewPort.zoomBindMove&&e(r.settings.fullscreen?t:this).bind("mousedown"+r.current.viewPortNamespace,function(e){r.current.userZoom&&(r.current.userTranslating={x:e.clientX,y:e.clientY},e.preventDefault(),e.stopImmediatePropagation())}).bind("mousemove"+r.current.viewPortNamespace,function(t){var s=r.current.userTranslating;s&&(e(n).jmpress("zoomTranslate",t.clientX-s.x,t.clientY-s.y),s.x=t.clientX,s.y=t.clientY,t.preventDefault(),t.stopImmediatePropagation())}).bind("mouseup"+r.current.viewPortNamespace,function(e){r.current.userTranslating&&(r.current.userTranslating=void 0,e.preventDefault(),e.stopImmediatePropagation())})}),e.jmpress("register","zoomIn",function(e,t){l.call(this,e||0,t||0,1)}),e.jmpress("register","zoomOut",function(e,t){l.call(this,e||0,t||0,-1)}),e.jmpress("register","zoomTranslate",function(t,s){var a=e(this).jmpress("current"),r=e(this).jmpress("settings"),n=e(this).jmpress("active").data("stepData"),i=e(this).jmpress("container"),o=n.viewPortZoomable||r.viewPort.zoomable,l=e(i).innerWidth(),u=e(i).innerHeight();a.userTranslateX=c(a.userTranslateX+t/a.zoomOriginWindowScale,l*a.userZoom*a.userZoom/o),a.userTranslateY=c(a.userTranslateY+s/a.zoomOriginWindowScale,u*a.userZoom*a.userZoom/o),e(this).jmpress("reselect","zoom")}),e.jmpress("afterDeinit",function(a,r){e(r.settings.fullscreen?t:this).unbind(r.current.viewPortNamespace),e(s).unbind(r.current.viewPortNamespace)}),e.jmpress("setActive",function(t,s){var a=s.settings.viewPort,r=s.stepData.viewPortHeight||a.height,n=s.stepData.viewPortWidth||a.width,i=s.stepData.viewPortMaxScale||a.maxScale,o=s.stepData.viewPortMinScale||a.minScale,c=r&&e(s.container).innerHeight()/r,l=n&&e(s.container).innerWidth()/n,u=(l||c)&&Math.min(l||c,c||l);if(u){u=u||1,i&&(u=Math.min(u,i)),o&&(u=Math.max(u,o));var p=s.stepData.viewPortZoomable||s.settings.viewPort.zoomable;if(p){var f=1/u-1/i;u=1/(1/u-(f/=p)*s.current.userZoom)}s.target.transform.reverse(),s.current.userTranslateX&&s.current.userTranslateY?s.target.transform.push(["translate",s.current.userTranslateX,s.current.userTranslateY,0]):s.target.transform.push(["translate"]),s.target.transform.push(["scale",u,u,1]),s.target.transform.reverse(),s.target.perspectiveScale/=u}s.current.zoomOriginWindowScale=u}),e.jmpress("setInactive",function(t,s){s.nextStep&&t&&e(s.nextStep).attr("id")===e(t).attr("id")||(s.current.userZoom=0,s.current.userTranslateX=0,s.current.userTranslateY=0)})}(jQuery,document,window),function(e,t,s,a){"use strict";var r=e.jmpress;r("defaults").mouse={clickSelects:!0},r("afterInit",function(t,s){var a=s.settings,r=a.stepSelector,n=s.current,i=e(this);n.clickableStepsNamespace=".jmpress-"+Math.round(1e5*Math.random(),0),i.bind("click"+n.clickableStepsNamespace,function(t){if(a.mouse.clickSelects&&!n.userZoom){var s=e(t.target).closest(r);s.is(i.jmpress("active"))||s.length&&(i.jmpress("select",s[0],"click"),t.preventDefault(),t.stopPropagation())}})}),r("afterDeinit",function(t,s){e(this).unbind(s.current.clickableStepsNamespace)})}(jQuery,document,window),function(e,t,s,a){"use strict";var r=e.jmpress;r("afterInit",function(s,a){var r=a.settings,n=a.current,i=a.jmpress;n.mobileNamespace=".jmpress-"+Math.round(1e5*Math.random(),0);var o,c=[0,0];e(r.fullscreen?t:i).bind("touchstart"+n.mobileNamespace,function(e){o=e.originalEvent.touches[0],c=[o.pageX,o.pageY]}).bind("touchmove"+n.mobileNamespace,function(e){return o=e.originalEvent.touches[0],e.preventDefault(),!1}).bind("touchend"+n.mobileNamespace,function(t){var s=[o.pageX,o.pageY],a=[s[0]-c[0],s[1]-c[1]];if(Math.max(Math.abs(a[0]),Math.abs(a[1]))>50)return a=Math.abs(a[0])>Math.abs(a[1])?a[0]:a[1],e(i).jmpress(a>0?"prev":"next"),t.preventDefault(),!1})}),r("afterDeinit",function(s,a){var r=a.settings,n=a.current,i=a.jmpress;e(r.fullscreen?t:i).unbind(n.mobileNamespace)})}(jQuery,document,window),function(e,t,s,a){"use strict";var r=e.jmpress,n="_template_",i={};function o(t,s,r){for(var n in s){var i=n;r&&(i=r+i.substr(0,1).toUpperCase()+i.substr(1)),e.isPlainObject(s[n])?o(t,s[n],i):t[i]===a&&(t[i]=s[n])}}function c(t,s){e.isArray(s)?s.length<t.length?e.error("more nested steps than children in template"):t.each(function(t,a){var r=(a=e(a)).data(n)||{};o(r,s[t]),a.data(n,r)}):e.isFunction(s)&&t.each(function(a,r){var i=(r=e(r)).data(n)||{};o(i,s(a,r,t)),r.data(n,i)})}function l(e,t,s,a){s.children&&c(t.children(a.settings.stepSelector),s.children);!function(e,t){o(e,t)}(e,s)}r("beforeInitStep",function(t,s){t=e(t);var a=s.data,r=a.template,o=t.data("_applied_template_"),c=t.data(n);r&&e.each(r.split(" "),function(e,r){var n=i[r];l(a,t,n,s)}),o&&l(a,t,o,s),c&&(l(a,t,c,s),t.data(n,null),c.template&&e.each(c.template.split(" "),function(e,r){var n=i[r];l(a,t,n,s)}))}),r("beforeInit",function(t,s){var a=r("dataset",this).template,n=s.settings.stepSelector;if(a){var o=i[a];c(e(this).find(n).filter(function(){return!e(this).parent().is(n)}),o.children)}}),r("register","template",function(t,s){i[t]?i[t]=e.extend(!0,{},i[t],s):i[t]=e.extend(!0,{},s)}),r("register","apply",function(t,s){if(s)if(e.isArray(s))c(e(t),s);else{var a;a="string"==typeof s?i[s]:e.extend(!0,{},s),e(t).each(function(t,s){var r=(s=e(s)).data("_applied_template_")||{};o(r,a),s.data("_applied_template_",r)})}else{var r=e(this).jmpress("settings").stepSelector;c(e(this).find(r).filter(function(){return!e(this).parent().is(r)}),t)}})}(jQuery,document,window),function(e,t,s,a){"use strict";e.jmpress("setActive",function(t,s){s.prevStep!==t&&e(t).triggerHandler("enterStep")}),e.jmpress("setInactive",function(t,s){s.nextStep!==t&&e(t).triggerHandler("leaveStep")})}(jQuery,document,window),function(e,t,s,a){"use strict";function r(t,s,a,r){r=r||t.length-1;for(var n=a=a||0;n<r+1;n++)if(e(t[n].element).is(s))return n}function n(t,s,a){e.each(s._on,function(e,s){t.push({substep:s.substep,delay:s.delay+a}),n(t,s.substep,s.delay+a)})}e.jmpress("defaults").customAnimationDataAttribute="jmpress",e.jmpress("afterInit",function(e,t){t.current.animationTimeouts=[],t.current.animationCleanupWaiting=[]}),e.jmpress("applyStep",function(t,s){var a={},i=[];if(e(t).find("[data-"+s.settings.customAnimationDataAttribute+"]").each(function(a,r){e(r).closest(s.settings.stepSelector).is(t)&&i.push({element:r})}),0!==i.length){e.each(i,function(t,a){a.info=function(t){for(var s=t.split(" "),a=s[0],r={willClass:"will-"+a,doClass:"do-"+a,hasClass:"has-"+a},n="",i=1;i<s.length;i++){var o=s[i];switch(n){case"":"after"===o?n="after":e.warn("unknown keyword in '"+t+"'. '"+o+"' unknown.");break;case"after":if(o.match(/^[1-9][0-9]*m?s?/)){var c=parseFloat(o);-1!==o.indexOf("ms")?c*=1:-1!==o.indexOf("s")?c*=1e3:-1!==o.indexOf("m")&&(c*=6e4),r.delay=c}else r.after=Array.prototype.slice.call(s,i).join(" "),i=s.length}}return r}(e(a.element).data(s.settings.customAnimationDataAttribute)),e(a.element).addClass(a.info.willClass),a._on=[],a._after=null});var o={_after:void 0,_on:[],info:{}};if(e.each(i,function(e,t){var s=t.info.after;if(s)if("step"===s)s=o;else if("prev"===s)s=i[e-1];else{var a=r(i,s,0,e-1);void 0===a&&(a=r(i,s)),s=void 0===a||a===e?i[e-1]:i[a]}else s=i[e-1];if(s){if(!t.info.delay){if(!s._after)return void(s._after=t);s=s._after}s._on.push({substep:t,delay:t.info.delay||0})}}),void 0===o._after&&0===o._on.length){var c=r(i,s.stepData.startSubstep)||0;o._after=i[c]}var l=[];do{var u=[{substep:o,delay:0}];n(u,o,0),l.push(u),o=null,e.each(u,p)}while(o);a.list=l,e(t).data("substepsData",a)}function p(e,t){if(t.substep._after)return o=t.substep._after,!1}}),e.jmpress("unapplyStep",function(t,s){var a=e(t).data("substepsData");a&&e.each(a.list,function(t,s){e.each(s,function(t,s){s.substep.info.willClass&&e(s.substep.element).removeClass(s.substep.info.willClass),s.substep.info.hasClass&&e(s.substep.element).removeClass(s.substep.info.hasClass),s.substep.info.doClass&&e(s.substep.element).removeClass(s.substep.info.doClass)})})}),e.jmpress("setActive",function(t,s){var a=e(t).data("substepsData");if(a){void 0===s.substep&&(s.substep="prev"===s.reason?a.list.length-1:0);var r=s.substep;e.each(s.current.animationTimeouts,function(e,t){clearTimeout(t)}),s.current.animationTimeouts=[],e.each(a.list,function(t,a){var n=t<r,i=t<=r;e.each(a,function(t,a){a.substep.info.hasClass&&e(a.substep.element)[(n?"add":"remove")+"Class"](a.substep.info.hasClass),i&&!n&&a.delay&&"prev"!==s.reason?a.substep.info.doClass&&(e(a.substep.element).removeClass(a.substep.info.doClass),s.current.animationTimeouts.push(setTimeout(function(){e(a.substep.element).addClass(a.substep.info.doClass)},a.delay))):a.substep.info.doClass&&e(a.substep.element)[(i?"add":"remove")+"Class"](a.substep.info.doClass)})})}}),e.jmpress("setInactive",function(t,s){if(s.nextStep!==t){e.each(s.current.animationCleanupWaiting,function(t,s){var a;a=s,e.each(a.list,function(t,s){e.each(s,function(t,s){s.substep.info.hasClass&&e(s.substep.element).removeClass(s.substep.info.hasClass),s.substep.info.doClass&&e(s.substep.element).removeClass(s.substep.info.doClass)})})}),s.current.animationCleanupWaiting=[];var a=e(t).data("substepsData");a&&s.current.animationCleanupWaiting.push(a)}}),e.jmpress("selectNext",function(t,s){if(void 0!==s.substep){var a=e(t).data("substepsData");if(a)return s.substep<a.list.length-1?{step:t,substep:s.substep+1}:void 0}}),e.jmpress("selectPrev",function(t,s){if(void 0!==s.substep&&e(t).data("substepsData"))return s.substep>0?{step:t,substep:s.substep-1}:void 0})}(jQuery,document,window),
-/*!
- * plugin for jmpress.js v0.4.5
- *
- * Copyright 2013 Kyle Robinson Young @shama & Tobias Koppers @sokra
- * Licensed MIT
- * http://www.opensource.org/licenses/mit-license.php
- */
-function(e,t,s,a){"use strict";e.jmpress("register","toggle",function(s,a,r){var n=this;e(t).bind("keydown",function(t){t.keyCode===s&&(e(n).jmpress("initialized")?e(n).jmpress("deinit"):e(n).jmpress(a))}),r&&e(n).jmpress(a)})}(jQuery,document,window),function(e,t,s,a){"use strict";function r(t,s,a){if(t.secondary&&-1!==t.secondary.split(" ").indexOf(s)){for(var r in t)if(r.length>9&&0===r.indexOf("secondary")){var n=t[r],i=r.substr(9);i=i.substr(0,1).toLowerCase()+i.substr(1),t[r]=t[i],t[i]=n}e(this).jmpress("reapply",e(a))}}e.jmpress("initStep",function(e,t){for(var s in t.data)0===s.indexOf("secondary")&&(t.stepData[s]=t.data[s])}),e.jmpress("beforeActive",function(t,s){r.call(s.jmpress,e(t).data("stepData"),"self",t);var a=e(t).parent();e(a).children(s.settings.stepSelector).each(function(t,a){var n=e(a).data("stepData");r.call(s.jmpress,n,"siblings",a)});for(var n=1;n<s.parents.length;n++)e(s.parents[n]).children(s.settings.stepSelector).each()}),e.jmpress("setInactive",function(t,s){r.call(s.jmpress,e(t).data("stepData"),"self",t);var a=e(t).parent();function n(t,a){var n=e(a).data("stepData");r.call(s.jmpress,n,"grandchildren",a)}e(a).children(s.settings.stepSelector).each(function(t,a){var n=e(a).data("stepData");r.call(s.jmpress,n,"siblings",a)});for(var i=1;i<s.parents.length;i++)e(s.parents[i]).children(s.settings.stepSelector).each(n)})}(jQuery,document,window),function(e,t,s,a){"use strict";e.jmpress("defaults").duration={defaultValue:-1,defaultAction:"next",barSelector:void 0,barProperty:"width",barPropertyStart:"0",barPropertyEnd:"100%"},e.jmpress("initStep",function(e,t){t.stepData.duration=t.data.duration&&parseInt(t.data.duration,10),t.stepData.durationAction=t.data.durationAction}),e.jmpress("setInactive",function(t,s){var a=s.settings.duration,r=s.current;s.stepData.duration||a.defaultValue;if(r.durationTimeout){if(a.barSelector){var n={transitionProperty:a.barProperty,transitionDuration:"0",transitionDelay:"0",transitionTimingFunction:"linear"};n[a.barProperty]=a.barPropertyStart;var i=e(a.barSelector);e.jmpress("css",i,n),i.each(function(t,s){var a=e(s).next(),r=e(s).parent();e(s).detach(),a.length?a.insertBefore(s):r.append(s)})}clearTimeout(r.durationTimeout),delete r.durationTimeout}}),e.jmpress("setActive",function(t,s){var a=s.settings,r=a.duration,n=s.current,i=s.stepData.duration||r.defaultValue;if(i&&i>0){if(r.barSelector){var o={transitionProperty:r.barProperty,transitionDuration:i-2*a.transitionDuration/3-100+"ms",transitionDelay:2*a.transitionDuration/3+"ms",transitionTimingFunction:"linear"};o[r.barProperty]=r.barPropertyEnd,e.jmpress("css",e(r.barSelector),o)}var c=this;n.durationTimeout&&(clearTimeout(n.durationTimeout),n.durationTimeout=void 0),n.durationTimeout=setTimeout(function(){var t=s.stepData.durationAction||r.defaultAction;e(c).jmpress(t)},i)}})}(jQuery,document,window),function(e,t,s,a){"use strict";var r=e.jmpress,n="jmpress-presentation-";r("defaults").presentationMode={use:!0,url:"presentation-screen.html",notesUrl:!1,transferredValues:["userZoom","userTranslateX","userTranslateY"]},r("defaults").keyboard.keys[80]="presentationPopup",r("afterInit",function(t,a){var r=a.current;if(r.selectMessageListeners=[],a.settings.presentationMode.use){s.addEventListener("message",function(t){try{if("string"!=typeof t.data||0!==t.data.indexOf(n))return;var i=JSON.parse(t.data.slice(n.length));switch(i.type){case"select":e.each(a.settings.presentationMode.transferredValues,function(e,t){a.current[t]=i[t]}),/[a-z0-9\-]+/i.test(i.targetId)&&typeof i.substep in{number:1,undefined:1}?e(a.jmpress).jmpress("select",{step:"#"+i.targetId,substep:i.substep},i.reason):e.error("For security reasons the targetId must match /[a-z0-9\\-]+/i and substep must be a number.");break;case"listen":r.selectMessageListeners.push(t.source);break;case"ok":clearTimeout(r.presentationPopupTimeout);break;case"read":try{t.source.postMessage(n+JSON.stringify({type:"url",url:s.location.href,notesUrl:a.settings.presentationMode.notesUrl}),"*")}catch(t){e.error("Cannot post message to source: "+t)}break;default:throw"Unknown message type: "+i.type}}catch(t){e.error("Received message is malformed: "+t)}});try{s.parent&&s.parent!==s&&s.parent.postMessage(n+JSON.stringify({type:"afterInit"}),"*")}catch(t){e.error("Cannot post message to parent: "+t)}}}),r("afterDeinit",function(t,a){if(a.settings.presentationMode.use)try{s.parent&&s.parent!==s&&s.parent.postMessage(n+JSON.stringify({type:"afterDeinit"}),"*")}catch(t){e.error("Cannot post message to parent: "+t)}}),r("setActive",function(t,s){var a=e(s.delegatedFrom).attr("id"),r=s.substep,i=s.reason;e.each(s.current.selectMessageListeners,function(t,o){try{var c={type:"select",targetId:a,substep:r,reason:i};e.each(s.settings.presentationMode.transferredValues,function(e,t){c[t]=s.current[t]}),o.postMessage(n+JSON.stringify(c),"*")}catch(t){e.error("Cannot post message to listener: "+t)}})}),r("register","presentationPopup",function(){var t,a=e(this);a.jmpress("settings").presentationMode.use&&(t=s.open(e(this).jmpress("settings").presentationMode.url),a.jmpress("current").presentationPopupTimeout=setTimeout(function e(){a.jmpress("current").presentationPopupTimeout=setTimeout(e,100);try{t.postMessage(n+JSON.stringify({type:"url",url:s.location.href,notesUrl:a.jmpress("settings").presentationMode.notesUrl}),"*")}catch(e){}},100))})}(jQuery,document,window); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/shortcodes/js/main.min.js b/plugins/jetpack/_inc/build/shortcodes/js/main.min.js
deleted file mode 100644
index a7875c9e..00000000
--- a/plugins/jetpack/_inc/build/shortcodes/js/main.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-!function(s){var t={fullscreen:!1,hash:{use:!1},mouse:{clickSelects:!1},keyboard:{use:!0},animation:{transitionDuration:"1s"},presentationMode:!1,stepSelector:".step",duration:{defaultValue:0}};function e(e){var i,o,n,l;(i=this).wrapper=s(e),i.slideshow=s(".presentation",e),i.navLeft=s(".nav-arrow-left",e),i.navRight=s(".nav-arrow-right",e),i.expandButton=s(".nav-fullscreen-button",e),i.overlay=s(".autoplay-overlay",e),i.fullscreen=!1,i.autoPlaying=!1,i.autoplayTime=parseFloat(i.slideshow.attr("data-autoplay"),10)||0,i.wrapper.css({width:i.slideshow.width(),height:i.slideshow.height()}),o=i.slideshow.attr("duration")||"1s",t.animation.transitionDuration=o,i.autoplayTime&&(i.autoplayTime+=1e3*parseFloat(o,10)),o="opacity "+o,n={width:i.slideshow.width(),height:i.slideshow.height(),"-webkit-transition":o,"-moz-transition":o,"-ms-transition":o,"-o-transition":o,transition:o},s(".step",i.slideshow).each(function(t,e){s(e).css(n)}),s(".step.fadebullets li",i.slideshow).each(function(t,e){s(e).attr("data-jmpress","fade")}),s(window).resize(function(){i.fullscreen&&i.resizePresentation()}),i.navLeft.on("click",function(){return i.slideshow.jmpress("prev"),i.overlay.css("opacity",0),!1}),i.navRight.on("click",function(){return i.slideshow.jmpress("next"),i.overlay.css("opacity",0),!1}),i.slideshow.on("click",function(){return i.setAutoplay(!0),!1}),i.slideshow.on("focusout",function(){i.setAutoplay(!1)}),(l=/MSIE\s(\d+)\.\d+/.exec(navigator.userAgent))&&parseInt(l[1],10)<10?(i.expandButton.remove(),i.expandButton=null):i.expandButton.on("click",function(){return i.setFullscreen(!i.fullscreen),!1}),s(window).on("keydown",function(s){27===s.which&&i.setFullscreen(!1)}),i.slideshow.jmpress(t),i.slideshow.jmpress("initialized")&&(i.slideshow.css("display",""),i.overlay.css("display",""),s(".not-supported-msg",i.wrapper).remove()),i.setFullscreen(!1)}s.extend(e.prototype,{resizePresentation:function(){var t,e,i,o,n,l;e=(i=this.slideshow.jmpress("settings")).animation.transitionDuration,i.animation.transitionDuration="0s",this.slideshow.jmpress("reselect"),t=1,o={top:0,left:0,zoom:1},this.fullscreen&&(n=s(window).width()/this.slideshow.width(),l=s(window).height()/this.slideshow.height(),t=Math.min(n,l),o.top=(s(window).height()-t*this.slideshow.height())/2,o.left=(s(window).width()-t*this.slideshow.width())/2),this.slideshow.css("-moz-transform")||this.slideshow.css("-ms-transform")?(o.top+=(t-1)*this.slideshow.height()/2,o.left+=(t-1)*this.slideshow.width()/2,t="scale("+t+")",s.extend(o,{"-moz-transform":t,"-ms-transform":t,transform:t})):(o.top/=t,o.left/=t,o.zoom=t),this.slideshow.css(o),i.animation.transitionDuration=e,this.slideshow.jmpress("reselect")},setFullscreen:function(t){this.fullscreen=t,this.setAutoplay(!1),t&&(this.scrollVert=s(window).scrollTop(),this.scrollHoriz=s(window).scrollLeft(),s(window).scrollTop(0),s(window).scrollLeft(0)),s("html").toggleClass("presentation-global-fullscreen",t),s("body").toggleClass("presentation-global-fullscreen",t),this.wrapper.toggleClass("presentation-wrapper-fullscreen",t),this.wrapper.parents().each(function(e,i){s(i).toggleClass("presentation-wrapper-fullscreen-parent",t)}),this.resizePresentation(),t||(s(window).scrollTop(this.scrollVert),s(window).scrollLeft(this.scrollHoriz))},setAutoplay:function(s){var t;this.autoPlaying!==s&&(t=s&&this.autoplayTime>0?this.autoplayTime:0,this.slideshow.jmpress("settings").duration.defaultValue=t,t?(this.slideshow.jmpress("next"),this.overlay.css("opacity",0)):this.slideshow.jmpress("reselect"),this.autoPlaying=s)}}),s(document).ready(function(){s(".presentation-wrapper").map(function(){new e(this)})})}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/shortcodes/js/quiz.min.js b/plugins/jetpack/_inc/build/shortcodes/js/quiz.min.js
deleted file mode 100644
index c9103bf0..00000000
--- a/plugins/jetpack/_inc/build/shortcodes/js/quiz.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-!function(a){a.fn.shuffleQuiz=function(){var t=this.get(),i=a.map(t,function(){var i,n=(i=t.length,Math.floor(Math.random()*i)),c=a(t[n]).clone(!0)[0];return t.splice(n,1),c});return this.each(function(t){a(this).replaceWith(a(i[t]))}),a(i)}}(jQuery),jQuery(function(a){a(".jetpack-quiz").each(function(){var t=a(this);t.find("div.jetpack-quiz-answer").shuffleQuiz(),t.find("div[data-correct]").removeAttr("data-correct").data("correct",1),t.find("div.jetpack-quiz-answer:last").addClass("last")}),a("div.jetpack-quiz").on("click","div.jetpack-quiz-answer",function(){var t,i=a(this),n=i.closest("div.jetpack-quiz");n.data("a8ctraining")&&((new Image).src="//pixel.wp.com/b.gif?v=wpcom-no-pv&x_trainingchaos-"+n.data("username")+"="+n.data("a8ctraining")+"&rand="+Math.random(),n.data("a8ctraining",!1),n.data("trackid",!1)),t=n.data("trackid"),i.data("correct")?(i.addClass("correct"),t&&((new Image).src="//pixel.wp.com/b.gif?v=wpcom-no-pv&x_quiz-"+t+"=correct&rand="+Math.random())):(i.addClass("wrong"),t&&((new Image).src="//pixel.wp.com/b.gif?v=wpcom-no-pv&x_quiz-"+t+"=wrong&rand="+Math.random())),n.data("trackid",!1)})}); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/shortcodes/js/recipes-printthis.min.js b/plugins/jetpack/_inc/build/shortcodes/js/recipes-printthis.min.js
deleted file mode 100644
index d9d3a4a1..00000000
--- a/plugins/jetpack/_inc/build/shortcodes/js/recipes-printthis.min.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-// jshint ignore: start
-/*
- * printThis v1.9.0
- * @desc Printing plug-in for jQuery
- * @author Jason Day
- *
- * Resources (based on) :
- * jPrintArea: http://plugins.jquery.com/project/jPrintArea
- * jqPrint: https://github.com/permanenttourist/jquery.jqprint
- * Ben Nadal: http://www.bennadel.com/blog/1591-Ask-Ben-Print-Part-Of-A-Web-Page-With-jQuery.htm
- *
- * Licensed under the MIT licence:
- * http://www.opensource.org/licenses/mit-license.php
- *
- * (c) Jason Day 2015
- *
- * Usage:
- *
- * $("#mySelector").printThis({
- * debug: false, * show the iframe for debugging
- * importCSS: true, * import page CSS
- * importStyle: false, * import style tags
- * printContainer: true, * grab outer container as well as the contents of the selector
- * loadCSS: "path/to/my.css", * path to additional css file - us an array [] for multiple
- * pageTitle: "", * add title to print page
- * removeInline: false, * remove all inline styles from print elements
- * printDelay: 333, * variable print delay
- * header: null, * prefix to html
- * footer: null, * postfix to html
- * base: false, * preserve the BASE tag, or accept a string for the URL
- * formValues: true * preserve input/form values
- * canvas: false * copy canvas elements (experimental)
- * doctypeString: '...' * enter a different doctype for older markup
- * });
- *
- * Notes:
- * - the loadCSS will load additional css (with or without @media print) into the iframe, adjusting layout
- *
- * jshint onevar: false, smarttabs: true, devel: true
- */
-!function(e){var t;e.fn.printThis=function(n){t=e.extend({},e.fn.printThis.defaults,n);var i=this instanceof jQuery?this:e(this),a="printThis-"+(new Date).getTime();if(window.location.hostname!==document.domain&&navigator.userAgent.match(/msie/i)){var o='javascript:document.write("<head><script>document.domain=\\"'+document.domain+'\\";<\/script></head><body></body>")',r=document.createElement("iframe");r.name="printIframe",r.id=a,r.className="MSIE",document.body.appendChild(r),r.src=o}else{e("<iframe id='"+a+"' name='printIframe' />").appendTo("body")}var d=e("#"+a);t.debug||d.css({position:"absolute",width:"0px",height:"0px",left:"-600px",top:"-600px"}),setTimeout(function(){t.doctypeString&&function(e,t){var n,i;(i=(n=(n=e.get(0)).contentWindow||n.contentDocument||n).document||n.contentDocument||n).open(),i.write(t),i.close()}(d,t.doctypeString);var n,a=d.contents(),o=a.find("head"),r=a.find("body"),s=e("base");if(n=!0===t.base&&s.length>0?s.attr("href"):"string"==typeof t.base?t.base:document.location.protocol+"//"+document.location.host,o.append('<base href="'+n+'">'),t.importCSS&&e("link[rel=stylesheet]").each(function(){var t=e(this).attr("href");if(t){var n=e(this).attr("media")||"all";o.append("<link type='text/css' rel='stylesheet' href='"+t+"' media='"+n+"'>")}}),t.importStyle&&e("style").each(function(){e(this).clone().appendTo(o)}),t.pageTitle&&o.append("<title>"+t.pageTitle+"</title>"),t.loadCSS&&(e.isArray(t.loadCSS)?jQuery.each(t.loadCSS,function(e,t){o.append("<link type='text/css' rel='stylesheet' href='"+this+"'>")}):o.append("<link type='text/css' rel='stylesheet' href='"+t.loadCSS+"'>")),t.header&&r.append(t.header),t.canvas){var c=0;i.find("canvas").each(function(){e(this).attr("data-printthis",c++)})}if(t.printContainer?r.append(i.outer()):i.each(function(){r.append(e(this).html())}),t.canvas&&r.find("canvas").each(function(){var t=e(this).data("printthis"),n=e('[data-printthis="'+t+'"]');this.getContext("2d").drawImage(n[0],0,0),n.removeData("printthis")}),t.formValues){var p=i.find("input");p.length&&p.each(function(){var t=e(this),n=e(this).attr("name"),i=t.is(":checkbox")||t.is(":radio"),o=a.find('input[name="'+n+'"]'),r=t.val();i?t.is(":checked")&&(t.is(":checkbox")?o.attr("checked","checked"):t.is(":radio")&&a.find('input[name="'+n+'"][value="'+r+'"]').attr("checked","checked")):o.val(r)});var h=i.find("select");h.length&&h.each(function(){var t=e(this),n=e(this).attr("name"),i=t.val();a.find('select[name="'+n+'"]').val(i)});var l=i.find("textarea");l.length&&l.each(function(){var t=e(this),n=e(this).attr("name"),i=t.val();a.find('textarea[name="'+n+'"]').val(i)})}t.removeInline&&(e.isFunction(e.removeAttr)?a.find("body *").removeAttr("style"):a.find("body *").attr("style","")),t.footer&&r.append(t.footer),setTimeout(function(){d.hasClass("MSIE")?(window.frames.printIframe.focus(),o.append("<script> window.print(); <\/script>")):document.queryCommandSupported("print")?d[0].contentWindow.document.execCommand("print",!1,null):(d[0].contentWindow.focus(),d[0].contentWindow.print()),t.debug||setTimeout(function(){d.remove()},1e3)},t.printDelay)},333)},e.fn.printThis.defaults={debug:!1,importCSS:!0,importStyle:!1,printContainer:!0,loadCSS:"",pageTitle:"",removeInline:!1,printDelay:333,header:null,footer:null,formValues:!0,canvas:!1,base:!1,doctypeString:"<!DOCTYPE html>"},jQuery.fn.outer=function(){return e(e("<div></div>").html(this.clone())).html()}}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/shortcodes/js/recipes.min.js b/plugins/jetpack/_inc/build/shortcodes/js/recipes.min.js
deleted file mode 100644
index 6501c94e..00000000
--- a/plugins/jetpack/_inc/build/shortcodes/js/recipes.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* global jetpack_recipes_vars */
-!function(e){e(window).load(function(){e(".jetpack-recipe-print a").click(function(i){i.preventDefault(),e(this).closest(".jetpack-recipe").printThis({pageTitle:jetpack_recipes_vars.pageTitle,loadCSS:jetpack_recipes_vars.loadCSS})})})}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/shortcodes/js/slideshow-shortcode.min.js b/plugins/jetpack/_inc/build/shortcodes/js/slideshow-shortcode.min.js
deleted file mode 100644
index b6925eb8..00000000
--- a/plugins/jetpack/_inc/build/shortcodes/js/slideshow-shortcode.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* jshint onevar:false, loopfunc:true */
-/* global jetpackSlideshowSettings, escape */
-function JetpackSlideshow(e,t,i){this.element=e,this.images=[],this.controls={},this.transition=t||"fade",this.autostart=i}JetpackSlideshow.prototype.showLoadingImage=function(e){if(e){this.loadingImage_=document.createElement("div"),this.loadingImage_.className="slideshow-loading";var t=document.createElement("img");t.src=jetpackSlideshowSettings.spinner,this.loadingImage_.appendChild(t),this.loadingImage_.appendChild(this.makeZeroWidthSpan()),this.element.append(this.loadingImage_)}else this.loadingImage_&&(this.loadingImage_.parentNode.removeChild(this.loadingImage_),this.loadingImage_=null)},JetpackSlideshow.prototype.init=function(){this.showLoadingImage(!0);for(var e=this,t=0;t<this.images.length;t++){var i=this.images[t],s=document.createElement("img");s.src=i.src,s.title=void 0!==i.title?i.title:"",s.alt=void 0!==i.alt?i.alt:"",s.align="middle",s.setAttribute("itemprop","image"),s.nopin="nopin";var o=document.createElement("div");o.className="slideshow-slide-caption",o.setAttribute("itemprop","caption description"),o.innerHTML=i.caption;var n=document.createElement("div");n.className="slideshow-slide",n.setAttribute("itemprop","associatedMedia"),n.setAttribute("itemscope",""),n.setAttribute("itemtype","https://schema.org/ImageObject"),0===t&&(s.complete?setTimeout(function(){e.finishInit_()},1):jQuery(s).load(function(){e.finishInit_()})),n.appendChild(s),s.removeAttribute("width"),s.removeAttribute("height"),n.appendChild(this.makeZeroWidthSpan()),n.appendChild(o),this.element.append(n)}},JetpackSlideshow.prototype.makeZeroWidthSpan=function(){var e=document.createElement("span");return e.className="slideshow-line-height-hack",-1!==window.navigator.userAgent.indexOf("MSIE ")?e.appendChild(document.createTextNode(" ")):e.innerHTML="&nbsp;",e},JetpackSlideshow.prototype.finishInit_=function(){this.showLoadingImage(!1),this.renderControls_();var e=this;if(this.images.length>1){this.element.cycle({fx:this.transition,prev:this.controls.prev,next:this.controls.next,timeout:jetpackSlideshowSettings.speed,slideExpr:".slideshow-slide",onPrevNextEvent:function(){return e.onCyclePrevNextClick_.apply(e,arguments)}});var t=this.element;this.autostart||(t.cycle("pause"),jQuery(this.controls.stop).removeClass("running"),jQuery(this.controls.stop).addClass("paused")),jQuery(this.controls.stop).click(function(){var e=jQuery(this);return e.hasClass("paused")?(e.addClass("running"),e.removeClass("paused"),t.cycle("resume",!0)):(t.cycle("pause"),e.removeClass("running"),e.addClass("paused")),!1})}else this.element.children(":first").show(),this.element.css("position","relative");this.initialized_=!0},JetpackSlideshow.prototype.renderControls_=function(){if(!this.controlsDiv_){var e=document.createElement("div");e.className="slideshow-controls";for(var t=["prev","stop","next"],i=0;i<t.length;i++){var s=t[i],o=document.createElement("a");o.href="#",e.appendChild(o),this.controls[s]=o}this.element.append(e),this.controlsDiv_=e}},JetpackSlideshow.prototype.onCyclePrevNextClick_=function(e,t){if(jetpackSlideshowSettings.blog_id){var i=this.images[t].id;(new Image).src=document.location.protocol+"//pixel.wp.com/g.gif?host="+escape(document.location.host)+"&rand="+Math.random()+"&blog="+jetpackSlideshowSettings.blog_id+"&subd="+jetpackSlideshowSettings.blog_subdomain+"&user_id="+jetpackSlideshowSettings.user_id+"&post="+i+"&ref="+escape(document.location)}},function(e){function t(){e(".jetpack-slideshow-noscript").remove(),e(".jetpack-slideshow").each(function(){var t=e(this);if(!t.data("processed")){var i=new JetpackSlideshow(t,t.data("trans"),t.data("autostart"));i.images=t.data("gallery"),i.init(),t.data("processed",!0)}})}e(document).ready(t),e("body").on("post-load",t)}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/spin.min.js b/plugins/jetpack/_inc/build/spin.min.js
deleted file mode 100644
index d0ce0979..00000000
--- a/plugins/jetpack/_inc/build/spin.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-//fgnass.github.com/spin.js#v1.3
-/**
- * Copyright (c) 2011-2013 Felix Gnass
- * Licensed under the MIT license
- */
-!function(t,e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):t.Spinner=e()}(this,function(){"use strict";var t,e=["webkit","Moz","ms","O"],i={};function o(t,e){var i,o=document.createElement(t||"div");for(i in e)o[i]=e[i];return o}function r(t){for(var e=1,i=arguments.length;e<i;e++)t.appendChild(arguments[e]);return t}var n,s=(n=o("style",{type:"text/css"}),r(document.getElementsByTagName("head")[0],n),n.sheet||n.styleSheet);function a(e,o,r,n){var a=["opacity",o,~~(100*e),r,n].join("-"),l=.01+r/n*100,f=Math.max(1-(1-e)/o*(100-l),e),p=t.substring(0,t.indexOf("Animation")).toLowerCase(),d=p&&"-"+p+"-"||"";return i[a]||(s.insertRule("@"+d+"keyframes "+a+"{0%{opacity:"+f+"}"+l+"%{opacity:"+e+"}"+(l+.01)+"%{opacity:1}"+(l+o)%100+"%{opacity:"+e+"}100%{opacity:"+f+"}}",s.cssRules.length),i[a]=1),a}function l(t,i){var o,r,n=t.style;if(void 0!==n[i])return i;for(i=i.charAt(0).toUpperCase()+i.slice(1),r=0;r<e.length;r++)if(void 0!==n[o=e[r]+i])return o}function f(t,e){for(var i in e)t.style[l(t,i)||i]=e[i];return t}function p(t){for(var e=1;e<arguments.length;e++){var i=arguments[e];for(var o in i)void 0===t[o]&&(t[o]=i[o])}return t}function d(t){for(var e={x:t.offsetLeft,y:t.offsetTop};t=t.offsetParent;)e.x+=t.offsetLeft,e.y+=t.offsetTop;return e}var c={lines:12,length:7,width:5,radius:10,rotate:0,corners:1,color:"#000",direction:1,speed:1,trail:100,opacity:.25,fps:20,zIndex:2e9,className:"spinner",top:"auto",left:"auto",position:"relative"};function u(t){if(void 0===this)return new u(t);this.opts=p(t||{},u.defaults,c)}u.defaults={},p(u.prototype,{spin:function(e){this.stop();var i,r,n=this,s=n.opts,a=n.el=f(o(0,{className:s.className}),{position:s.position,width:0,zIndex:s.zIndex}),l=s.radius+s.length+s.width;if(e&&(e.insertBefore(a,e.firstChild||null),r=d(e),i=d(a),f(a,{left:("auto"==s.left?r.x-i.x+(e.offsetWidth>>1):parseInt(s.left,10)+l)+"px",top:("auto"==s.top?r.y-i.y+(e.offsetHeight>>1):parseInt(s.top,10)+l)+"px"})),a.setAttribute("role","progressbar"),n.lines(a,n.opts),!t){var p,c=0,u=(s.lines-1)*(1-s.direction)/2,h=s.fps,y=h/s.speed,m=(1-s.opacity)/(y*s.trail/100),v=y/s.lines;!function t(){c++;for(var e=0;e<s.lines;e++)p=Math.max(1-(c+(s.lines-e)*v)%y*m,s.opacity),n.opacity(a,e*s.direction+u,p,s);n.timeout=n.el&&setTimeout(t,~~(1e3/h))}()}return n},stop:function(){var t=this.el;return t&&(clearTimeout(this.timeout),t.parentNode&&t.parentNode.removeChild(t),this.el=void 0),this},lines:function(e,i){var n,s=0,l=(i.lines-1)*(1-i.direction)/2;function p(t,e){return f(o(),{position:"absolute",width:i.length+i.width+"px",height:i.width+"px",background:t,boxShadow:e,transformOrigin:"left",transform:"rotate("+~~(360/i.lines*s+i.rotate)+"deg) translate("+i.radius+"px,0)",borderRadius:(i.corners*i.width>>1)+"px"})}for(;s<i.lines;s++)n=f(o(),{position:"absolute",top:1+~(i.width/2)+"px",transform:i.hwaccel?"translate3d(0,0,0)":"",opacity:i.opacity,animation:t&&a(i.opacity,i.trail,l+s*i.direction,i.lines)+" "+1/i.speed+"s linear infinite"}),i.shadow&&r(n,f(p("#000","0 0 4px #000"),{top:"2px"})),r(e,r(n,p(i.color,"0 0 1px rgba(0,0,0,.1)")));return e},opacity:function(t,e,i){e<t.childNodes.length&&(t.childNodes[e].style.opacity=i)}});var h=f(o("group"),{behavior:"url(#default#VML)"});return!l(h,"transform")&&h.adj?function(){function t(t,e){return o("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="spin-vml">',e)}s.addRule(".spin-vml","behavior:url(#default#VML)"),u.prototype.lines=function(e,i){var o=i.length+i.width,n=2*o;function s(){return f(t("group",{coordsize:n+" "+n,coordorigin:-o+" "+-o}),{width:n,height:n})}var a,l=2*-(i.width+i.length)+"px",p=f(s(),{position:"absolute",top:l,left:l});function d(e,n,a){r(p,r(f(s(),{rotation:360/i.lines*e+"deg",left:~~n}),r(f(t("roundrect",{arcsize:i.corners}),{width:o,height:i.width,left:i.radius,top:-i.width>>1,filter:a}),t("fill",{color:i.color,opacity:i.opacity}),t("stroke",{opacity:0}))))}if(i.shadow)for(a=1;a<=i.lines;a++)d(a,-2,"progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)");for(a=1;a<=i.lines;a++)d(a);return r(e,p)},u.prototype.opacity=function(t,e,i,o){var r=t.firstChild;o=o.shadow&&o.lines||0,r&&e+o<r.childNodes.length&&(r=(r=(r=r.childNodes[e+o])&&r.firstChild)&&r.firstChild)&&(r.opacity=i)}}():t=l(h,"animation"),u}); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/static-ie-notice.html b/plugins/jetpack/_inc/build/static-ie-notice.html
deleted file mode 100644
index 3f6dc8aa..00000000
--- a/plugins/jetpack/_inc/build/static-ie-notice.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<div id="ie-legacy-notice" style="display:none"><div class="dops-notice is-warning"><span class="dops-notice__icon-wrapper"><svg class="gridicon gridicons-notice dops-notice__icon" height="24" width="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 15h-2v-2h2v2zm0-4h-2l-.5-6h3l-.5 6z"></path></g></svg></span><span class="dops-notice__content"><span class="dops-notice__text"><div>#HEADER_TEXT#<br/>#TEXT#</div></span></span></div></div><script type="text/javascript">
-/*@cc_on
-if ( @_jscript_version <= 10) {
-jQuery( '#ie-legacy-notice' ).show();
-}
-@*/
-</script> \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/static-noscript-notice.html b/plugins/jetpack/_inc/build/static-noscript-notice.html
deleted file mode 100644
index 70f043e5..00000000
--- a/plugins/jetpack/_inc/build/static-noscript-notice.html
+++ /dev/null
@@ -1 +0,0 @@
-<noscript><div class="dops-notice is-warning"><span class="dops-notice__icon-wrapper"><svg class="gridicon gridicons-notice dops-notice__icon" height="24" width="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 15h-2v-2h2v2zm0-4h-2l-.5-6h3l-.5 6z"></path></g></svg></span><span class="dops-notice__content"><span class="dops-notice__text"><div>#HEADER_TEXT#<br/>#TEXT#</div></span></span></div></noscript> \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/static-version-notice.html b/plugins/jetpack/_inc/build/static-version-notice.html
deleted file mode 100644
index f4bb5704..00000000
--- a/plugins/jetpack/_inc/build/static-version-notice.html
+++ /dev/null
@@ -1 +0,0 @@
-<div class="dops-notice is-warning"><span class="dops-notice__icon-wrapper"><svg class="gridicon gridicons-notice dops-notice__icon" height="24" width="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 15h-2v-2h2v2zm0-4h-2l-.5-6h3l-.5 6z"></path></g></svg></span><span class="dops-notice__content"><span class="dops-notice__text"><div>#HEADER_TEXT#<br/>#TEXT#</div></span></span></div> \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/static.html b/plugins/jetpack/_inc/build/static.html
deleted file mode 100644
index fb64b61d..00000000
--- a/plugins/jetpack/_inc/build/static.html
+++ /dev/null
@@ -1 +0,0 @@
-<div><div id="jp-plugin-container"><div class="jp-masthead"><div class="jp-masthead__inside-container"><div class="jp-masthead__logo-container"><a class="jp-masthead__logo-link" href="#dashboard"><svg class="jetpack-logo__masthead" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" height="32" viewBox="0 0 118 32"><path fill="#00BE28" d="M16,0C7.2,0,0,7.2,0,16s7.2,16,16,16s16-7.2,16-16S24.8,0,16,0z M15,19H7l8-16V19z M17,29V13h8L17,29z"></path><path d="M41.3,26.6c-0.5-0.7-0.9-1.4-1.3-2.1c2.3-1.4,3-2.5,3-4.6V8h-3V6h6v13.4C46,22.8,45,24.8,41.3,26.6z"></path><path d="M65,18.4c0,1.1,0.8,1.3,1.4,1.3c0.5,0,2-0.2,2.6-0.4v2.1c-0.9,0.3-2.5,0.5-3.7,0.5c-1.5,0-3.2-0.5-3.2-3.1V12H60v-2h2.1V7.1 H65V10h4v2h-4V18.4z"></path><path d="M71,10h3v1.3c1.1-0.8,1.9-1.3,3.3-1.3c2.5,0,4.5,1.8,4.5,5.6s-2.2,6.3-5.8,6.3c-0.9,0-1.3-0.1-2-0.3V28h-3V10z M76.5,12.3 c-0.8,0-1.6,0.4-2.5,1.2v5.9c0.6,0.1,0.9,0.2,1.8,0.2c2,0,3.2-1.3,3.2-3.9C79,13.4,78.1,12.3,76.5,12.3z"></path><path d="M93,22h-3v-1.5c-0.9,0.7-1.9,1.5-3.5,1.5c-1.5,0-3.1-1.1-3.1-3.2c0-2.9,2.5-3.4,4.2-3.7l2.4-0.3v-0.3c0-1.5-0.5-2.3-2-2.3 c-0.7,0-2.3,0.5-3.7,1.1L84,11c1.2-0.4,3-1,4.4-1c2.7,0,4.6,1.4,4.6,4.7L93,22z M90,16.4l-2.2,0.4c-0.7,0.1-1.4,0.5-1.4,1.6 c0,0.9,0.5,1.4,1.3,1.4s1.5-0.5,2.3-1V16.4z"></path><path d="M104.5,21.3c-1.1,0.4-2.2,0.6-3.5,0.6c-4.2,0-5.9-2.4-5.9-5.9c0-3.7,2.3-6,6.1-6c1.4,0,2.3,0.2,3.2,0.5V13 c-0.8-0.3-2-0.6-3.2-0.6c-1.7,0-3.2,0.9-3.2,3.6c0,2.9,1.5,3.8,3.3,3.8c0.9,0,1.9-0.2,3.2-0.7V21.3z"></path><path d="M110,15.2c0.2-0.3,0.2-0.8,3.8-5.2h3.7l-4.6,5.7l5,6.3h-3.7l-4.2-5.8V22h-3V6h3V15.2z"></path><path d="M58.5,21.3c-1.5,0.5-2.7,0.6-4.2,0.6c-3.6,0-5.8-1.8-5.8-6c0-3.1,1.9-5.9,5.5-5.9s4.9,2.5,4.9,4.9c0,0.8,0,1.5-0.1,2h-7.3 c0.1,2.5,1.5,2.8,3.6,2.8c1.1,0,2.2-0.3,3.4-0.7C58.5,19,58.5,21.3,58.5,21.3z M56,15c0-1.4-0.5-2.9-2-2.9c-1.4,0-2.3,1.3-2.4,2.9 C51.6,15,56,15,56,15z"></path></svg></a></div></div></div><div class="jp-loading-placeholder"><span class="dashicons dashicons-wordpress-alt"></span></div><div class="jp-footer"><div class="jp-footer__a8c-attr-container"><a href="https://automattic.com" target="_blank" rel="noopener noreferrer"><svg role="img" class="jp-footer__a8c-attr" x="0" y="0" viewBox="0 0 935 38.2" enable-background="new 0 0 935 38.2" aria-labelledby="a8c-svg-title"><title id="a8c-svg-title">An Automattic Airline</title><path d="M317.1 38.2c-12.6 0-20.7-9.1-20.7-18.5v-1.2c0-9.6 8.2-18.5 20.7-18.5 12.6 0 20.8 8.9 20.8 18.5v1.2C337.9 29.1 329.7 38.2 317.1 38.2zM331.2 18.6c0-6.9-5-13-14.1-13s-14 6.1-14 13v0.9c0 6.9 5 13.1 14 13.1s14.1-6.2 14.1-13.1V18.6zM175 36.8l-4.7-8.8h-20.9l-4.5 8.8h-7L157 1.3h5.5L182 36.8H175zM159.7 8.2L152 23.1h15.7L159.7 8.2zM212.4 38.2c-12.7 0-18.7-6.9-18.7-16.2V1.3h6.6v20.9c0 6.6 4.3 10.5 12.5 10.5 8.4 0 11.9-3.9 11.9-10.5V1.3h6.7V22C231.4 30.8 225.8 38.2 212.4 38.2zM268.6 6.8v30h-6.7v-30h-15.5V1.3h37.7v5.5H268.6zM397.3 36.8V8.7l-1.8 3.1 -14.9 25h-3.3l-14.7-25 -1.8-3.1v28.1h-6.5V1.3h9.2l14 24.4 1.7 3 1.7-3 13.9-24.4h9.1v35.5H397.3zM454.4 36.8l-4.7-8.8h-20.9l-4.5 8.8h-7l19.2-35.5h5.5l19.5 35.5H454.4zM439.1 8.2l-7.7 14.9h15.7L439.1 8.2zM488.4 6.8v30h-6.7v-30h-15.5V1.3h37.7v5.5H488.4zM537.3 6.8v30h-6.7v-30h-15.5V1.3h37.7v5.5H537.3zM569.3 36.8V4.6c2.7 0 3.7-1.4 3.7-3.4h2.8v35.5L569.3 36.8 569.3 36.8zM628 11.3c-3.2-2.9-7.9-5.7-14.2-5.7 -9.5 0-14.8 6.5-14.8 13.3v0.7c0 6.7 5.4 13 15.3 13 5.9 0 10.8-2.8 13.9-5.7l4 4.2c-3.9 3.8-10.5 7.1-18.3 7.1 -13.4 0-21.6-8.7-21.6-18.3v-1.2c0-9.6 8.9-18.7 21.9-18.7 7.5 0 14.3 3.1 18 7.1L628 11.3zM321.5 12.4c1.2 0.8 1.5 2.4 0.8 3.6l-6.1 9.4c-0.8 1.2-2.4 1.6-3.6 0.8l0 0c-1.2-0.8-1.5-2.4-0.8-3.6l6.1-9.4C318.7 11.9 320.3 11.6 321.5 12.4L321.5 12.4z"></path><path d="M37.5 36.7l-4.7-8.9H11.7l-4.6 8.9H0L19.4 0.8H25l19.7 35.9H37.5zM22 7.8l-7.8 15.1h15.9L22 7.8zM82.8 36.7l-23.3-24 -2.3-2.5v26.6h-6.7v-36H57l22.6 24 2.3 2.6V0.8h6.7v35.9H82.8z"></path><path d="M719.9 37l-4.8-8.9H694l-4.6 8.9h-7.1l19.5-36h5.6l19.8 36H719.9zM704.4 8l-7.8 15.1h15.9L704.4 8zM733 37V1h6.8v36H733zM781 37c-1.8 0-2.6-2.5-2.9-5.8l-0.2-3.7c-0.2-3.6-1.7-5.1-8.4-5.1h-12.8V37H750V1h19.6c10.8 0 15.7 4.3 15.7 9.9 0 3.9-2 7.7-9 9 7 0.5 8.5 3.7 8.6 7.9l0.1 3c0.1 2.5 0.5 4.3 2.2 6.1V37H781zM778.5 11.8c0-2.6-2.1-5.1-7.9-5.1h-13.8v10.8h14.4c5 0 7.3-2.4 7.3-5.2V11.8zM794.8 37V1h6.8v30.4h28.2V37H794.8zM836.7 37V1h6.8v36H836.7zM886.2 37l-23.4-24.1 -2.3-2.5V37h-6.8V1h6.5l22.7 24.1 2.3 2.6V1h6.8v36H886.2zM902.3 37V1H935v5.6h-26v9.2h20v5.5h-20v10.1h26V37H902.3z"></path></svg></a></div><ul class="jp-footer__links"><li class="jp-footer__link-item"><a href="https://jetpack.com" target="_blank" rel="noopener noreferrer" class="jp-footer__link" title="Jetpack version">Jetpack</a></li><li class="jp-footer__link-item"><a href="https://wordpress.com/tos/" target="_blank" rel="noopener noreferrer" title="WordPress.com Terms of Service" class="jp-footer__link">Terms</a></li><li class="jp-footer__link-item"><a href="#/privacy" rel="noopener noreferrer" title="Automattic&#x27;s Privacy Policy" class="jp-footer__link">Privacy</a></li></ul></div><style type="text/css">.vp-deactivated{ display: none; }</style></div></div> \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/style.min.css b/plugins/jetpack/_inc/build/style.min.css
deleted file mode 100644
index 2f912004..00000000
--- a/plugins/jetpack/_inc/build/style.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled SASS code. */
-@media (max-width: 660px){.jp-hidden-on-mobile{display:none}}.jetpack-pagestyles #wpcontent{padding-left:0}.wp-admin.toplevel_page_jetpack{background-color:#f6f6f6;line-height:1.4;height:auto}.jetpack-pagestyles a{text-decoration:none}.dops-notice__text a{text-decoration:underline}.jetpack-pagestyles #dolly{float:none;position:relative;right:0;left:0;top:0;padding:.625rem;text-align:right;background:#fff;font-size:.75rem;font-style:italic;color:#a2a2a2;border-bottom:1px #eee solid}@media (max-width: 660px){.jetpack-pagestyles #dolly{display:none}}.toplevel_page_jetpack ul#adminmenu a.wp-has-current-submenu:after{border-right-color:#f6f6f6}.jp-lower{margin:0 auto;text-align:left;max-width:65rem;padding:1.5rem}@media (max-width: 1250px){.jp-lower{max-width:95%}}#contextual-help-link-wrap{display:none}.is-placeholder{animation:pulse-light 0.8s ease-in-out infinite;background:#d5d5d5}@keyframes pulse-light{50%{background-color:#eee}}.jp-dash-item .jp-dash-item__content a{font-style:italic}.jp-dash-item .dops-section-header__actions .form-toggle__label{position:relative;top:6px;right:0}.jp-dash-item .dops-section-header__actions .form-toggle__label-content{margin:0}.jp-dash-item__content{flex-grow:1;display:flex;flex-wrap:wrap;align-items:flex-start}.jp-dash-item__card{margin:0}.jp-dash-item__count{margin-top:0;margin-bottom:6px;margin-right:8px;color:#00aadc;font-weight:500;font-size:2rem;display:inline-block;border:1px solid #CBD7E1;border-radius:4px;padding:0px 4px;min-width:36px;text-align:center}@media (max-width: 660px){.jp-dash-item__count{font-size:1.4375rem}}.jp-dash-item__count+.jp-dash-item__description{max-width:61%}.jp-dash-item__description{margin:0;font-size:.875rem;max-width:calc( 100% - 18px)}.jp-dash-item .dops-section-header{width:100%}.jp-dash-item .dops-section-header .dops-button{font-style:normal}.jp-dash-item .dops-section-header.is-working .dops-section-header__actions,.jp-dash-item .dops-section-header.is-premium-inactive .dops-section-header__actions{color:#747474}.jp-dash-item .dops-section-header__actions .dops-notice{margin-top:.125rem}.jp-dash-item__active-label{display:inline-block;padding:.375rem 0;color:#888;color:#a2a2a2;font-size:.75rem;font-weight:400;text-transform:uppercase}.jp-dash-item__is-inactive .dops-section-header__label{padding-right:.5rem}.jp-dash-item__is-inactive .dops-section-header__label-text:before{content:'';display:block;position:absolute;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;background:linear-gradient(to right, rgba(255,255,255,0), #fff 90%);top:0px;bottom:0px;right:0px;left:auto;width:8px;height:auto}.jp-dash-item__is-inactive .jp-dash-item__description{font-style:italic;color:#6f6f6f}.jp-dash-item__disabled{opacity:.5;position:relative}.jp-dash-item__disabled::before{content:"";width:100%;height:100%;display:block;position:absolute;top:0;left:0;z-index:1}.jp-dash-item__recently-activated .jp-dash-item__description{font-style:italic;box-sizing:border-box}.jp-dash-section-header{display:flex;flex-wrap:wrap;margin:2.5rem 0 .5rem}@media (max-width: 660px){.jp-dash-section-header{margin-bottom:1.5rem}}@media (max-width: 480px){.jp-dash-section-header{display:block}}.jp-dash-section-header__label{flex:1;white-space:nowrap}.jp-dash-section-header__name{display:inline-block;margin-top:0;margin-bottom:0;font-size:1.25rem;font-weight:400;white-space:nowrap}@media (min-width: 481px){.jp-dash-section-header__name{display:inline-block}}@media (max-width: 480px){.jp-dash-section-header__name .jp-dash-section-header__label{display:inline-block}}.jp-dash-section-header__settings{display:inline-block;min-width:2.5rem;text-align:center;color:#888}.jp-dash-section-header__settings:focus{outline:0;box-shadow:none}.jp-dash-section-header__settings:focus .gridicon{color:#0087be}.jp-dash-section-header__settings .gridicon{position:relative;top:1px}.jp-dash-section-header__external-link{align-self:center;font-style:italic}@media (max-width: 660px){.jp-dash-section-header__external-link{margin-top:.25rem}}@media (max-width: 480px){.jp-dash-section-header__external-link{display:block;width:100%}}.jp-dash-section-header__children{align-self:center}@media (max-width: 480px){.jp-dash-section-header__children{width:100%}}.dops-foldable-card.dops-card.devmode-disabled .dops-foldable-card__summary,.dops-foldable-card.dops-card.devmode-disabled .dops-foldable-card__summary_expanded{width:100px}.dops-foldable-card.dops-card.is-expanded .dops-foldable-card__content{position:relative;padding-right:2.9375rem;padding-left:1.5rem}@media (min-width: 661px){.dops-foldable-card__main{max-width:85%}}@media (min-width: 481px){.dops-foldable-card__main{max-width:60%}}@media (max-width: 480px){.dops-foldable-card__main{flex-basis:100%}}@media (max-width: 480px){.dops-foldable-card__header{flex-wrap:wrap}}@media (max-width: 480px){.dops-foldable-card__header-text{font-size:.875rem}}.dops-foldable-card__header-text .dops-button{margin-left:.5rem}@media (max-width: 480px){.dops-foldable-card__subheader{display:none}}@media (max-width: 480px){.dops-foldable-card.has-expanded-summary .dops-foldable-card__summary,.dops-foldable-card.has-expanded-summary .dops-foldable-card__summary_expanded{text-align:left;margin-top:.5rem}}.jp-footer{text-align:center;margin:1rem 0 2rem}@media (max-width: 1040px){.jp-footer{margin:2rem 0 1.5rem}}@media (max-width: 660px){.jp-footer{margin:1.5rem 0 1rem}}.jp-footer__a8c-attr-container{margin-bottom:.5rem}.jp-footer__a8c-attr{width:11.25rem}.jp-footer__a8c-attr path{fill:#888}.jp-footer__links{border-top:1px #e1e1e1 solid;border-bottom:1px #e1e1e1 solid;margin-top:0;margin-bottom:1rem}@media (max-width: 660px){.jp-footer__links{border-bottom:none}}.jp-footer__link-item{display:inline-block;margin-bottom:0}@media (min-width: 661px){.jp-footer__link-item{display:inline-block}}@media (max-width: 660px){.jp-footer__link-item{display:block;border-bottom:1px #e1e1e1 solid}}.jp-footer__link{padding:1rem .5rem;color:#888;display:inline-block;cursor:pointer}.jp-footer__link:visited{color:#888}.jp-footer__link:hover,.jp-footer__link:active{color:#272727}@media (max-width: 660px){.jp-footer__link{display:block;padding:.5rem 0;border-bottom:1px #e1e1e1 solid}.jp-footer__link:last-of-type{border-bottom:none}}.jp-dev-card.jp-dev-card{position:fixed;bottom:10px;right:10px;z-index:100;padding:8px;font-size:12px;text-align:left}.jp-dev-card.jp-dev-card ul{margin-top:6px}.jp-dev-card.jp-dev-card li{margin-top:2px;margin-bottom:0}.jp-dev-card__heading{font-weight:600}.jp-dev-card__subheading{font-size:11px;color:#888}.jp-dev-card__close{float:right;cursor:pointer}.jp-loading-placeholder{margin-top:30vh;margin-bottom:25vh;color:#d5d5d5;font-size:12vw;text-align:center}@media (min-width: 961px){.jp-loading-placeholder{font-size:120px}}.jp-loading-placeholder .dashicons{font-size:inherit;width:auto;height:auto}@media (max-width: 480px){.dops-notice ul{font-size:.75rem}}.jp-jumpstart{text-align:left;margin:0 auto 2rem}.jp-jumpstart-card__content{display:flex;margin-bottom:0}.jp-jumpstart-card__content .jp-jumpstart-card__img,.jp-jumpstart-card__content .jp-jumpstart-card__img img{display:none}@media (min-width: 481px){.jp-jumpstart-card__content .jp-jumpstart-card__img,.jp-jumpstart-card__content .jp-jumpstart-card__img img{display:block;width:6.25rem}}@media (min-width: 661px){.jp-jumpstart-card__content .jp-jumpstart-card__img,.jp-jumpstart-card__content .jp-jumpstart-card__img img{width:12.5rem}}@media (min-width: 481px){.jp-jumpstart-card__content .jp-jumpstart-card__description{margin-left:2rem}}.jp-jumpstart-card__content .jp-jumpstart-card__description .jp-jumpstart-card__description-title{margin-top:0}.jp-masthead{background-color:#fff;text-align:center;box-shadow:0 1px 0 rgba(213,213,213,0.5),0 1px 2px #eee}@media (max-width: 48.875rem){.jp-masthead{padding:0 1.5rem}.jetpack-masterbar .jp-masthead{padding-left:4rem}}.jp-masthead__inside-container{display:flex;flex-wrap:wrap;margin:0 auto;width:100%;max-width:65rem;padding-bottom:.375rem}@media (max-width: 1250px){.jp-masthead__inside-container{max-width:95%}}.jp-masthead__logo-container{flex-grow:0;flex-shrink:0;padding:.6875rem 0 0}@media (max-width: 480px){.jp-masthead__logo-container{margin-right:1rem}}.jp-masthead__logo-link{display:inline-block;outline:none;vertical-align:middle}.jp-masthead__logo-link:focus{line-height:0;box-shadow:0 0 0 2px #78dcfa}.jp-masthead__logo-link+code{margin:0 10px;padding:5px 9px;border-radius:2px;background:#e6ecf1;color:#647a88}.jp-masthead__nav{display:flex;flex-wrap:nowrap;flex-grow:1;flex-shrink:0;text-align:right;margin-top:.375rem;padding:.25rem 0}.jp-masthead__nav .dops-button-group{flex-grow:1;align-self:center}@media (max-width: 480px){.jp-masthead__nav{text-align:left}}#sandbox-domain-badge{background:#d54e21;text-transform:uppercase;letter-spacing:0.2em;text-shadow:none;font-size:9px;font-weight:bold;cursor:pointer;color:#ffffff}.jp-module-settings__external-link{font-size:.875rem}.jp-module-settings__read-more{clear:both;margin-top:1rem}@media (min-width: 481px){.jp-module-settings__read-more{margin-top:2rem}}.jp-module-settings__read-more .dops-button.is-compact.is-borderless,.jp-module-settings__read-more .jp-module-settings__more-text{vertical-align:middle}.jp-related-posts-preview{position:relative;margin-top:.5rem;padding:1rem .5rem;width:100%;background:#f6f6f6;box-sizing:border-box;box-shadow:none}.jp-related-posts-settings__preview-label{margin-bottom:.5rem;margin-top:1.5rem;font-size:.875rem;font-weight:600}.jp-related-posts-preview__title{margin:0 0 .6875rem .5rem;font-size:.6875rem;font-weight:600}.jp-related-posts-preview__post-title{font-size:.9375rem;font-weight:400;margin:0}.jp-related-posts-preview__post-context{font-size:.9375rem;opacity:.6;margin:0}.jp-related-posts-preview__item{box-sizing:border-box;display:inline-block;width:33.33%;padding:.5rem;vertical-align:top}@media (max-width: 480px){.jp-related-posts-preview__item{width:100%}}.jp-related-posts-preview__item img{max-width:100%;margin-bottom:.5rem}.jp-support-card{margin-top:1rem;margin-bottom:0}.jp-support-card__description{font-size:.875rem;line-height:1.65;color:#537994}.jp-support-card__description:first-of-type{margin-top:4px}.jp-support-card__description:last-of-type{margin-bottom:0}.jp-support-card__description .dops-button{margin:0 16px 0 0}@media (max-width: 960px){.jp-support-card__description .dops-button{margin:0 16px 8px 0}}.jp-support-card__link{font-style:italic}@media (max-width: 660px){.jp-support-card__link{display:block;width:100%;padding:.625rem 0;border-top:1px rgba(213,213,213,0.5) solid}.jp-support-card__link:first-letter{text-transform:capitalize}.jp-support-card__link:first-of-type{border-top:0}}.jp-support-card__happiness{margin-bottom:0;display:flex;flex-flow:row nowrap}@media (max-width: 660px){.jp-support-card__happiness .jp-support-card__description:first-of-type{margin-bottom:1rem}}.jp-support-card__social{background-color:#fbfbfb;padding:1rem}@media (max-width: 660px){.jp-support-card__social{background:#fff;margin-top:1rem;padding:0 1rem}}.jp-support-card__header{color:#668eaa;font-weight:400;font-size:1.3125rem;margin:0}.jp-support-card__happiness-contact{flex-shrink:1;flex-grow:1}.jp-form-legend,.jp-form-label-wide{padding:1rem 0 .3125rem;font-size:.875rem;font-weight:600}.jp-form-label{display:block;font-size:.875rem;line-height:1.5;margin-bottom:.3125rem}.jp-form-label-wide{padding:.5rem 0;display:block}.jp-form-label input[type="radio"]+span{font-weight:normal;margin-left:8px}.jp-form-button{margin-top:1rem}@media (min-width: 481px){.jp-form-button{position:absolute;right:1rem;bottom:1rem}}.jp-form-toggle-explanation{font-size:.875rem;word-break:break-word;vertical-align:baseline}.jp-form-toggle-explanation .jp-form-toggle-privacy-info{margin-left:.3125rem;padding-left:.3125rem;border-left:1px solid rgba(162,162,162,0.5)}.jp-form-fieldset{clear:both;position:relative}.jp-form-fieldset .jp-form-legend+.jp-form-setting-explanation{margin-top:0;margin-bottom:.5rem}.jp-form-input-with-prefix{display:inline-flex;width:100%;margin-bottom:1.5rem}.jp-form-input-with-prefix span:first-child{min-width:3.75rem;text-align:center;background:#f6f6f6;border:1px solid #c8d7e1;color:#4f748e;padding:.5rem .875rem;white-space:nowrap}@media (max-width: 660px){.jp-form-input-with-prefix span:first-child{display:block;text-align:left}}.jp-form-input-with-prefix input[type="text"]{width:100%}@media (min-width: 661px){.jp-form-input-with-prefix input[type="text"]{border-left:0}}@media (max-width: 660px){.jp-form-input-with-prefix input[type="text"]{border-top:0}}@media (max-width: 660px){.jp-form-input-with-prefix{display:block;box-sizing:border-box}}.jp-form-input-suffix{text-align:center;background:#f6f6f6;border:1px solid #c8d7e1;color:#4f748e;padding:.5rem .875rem;white-space:nowrap;flex:1 0 auto;display:flex}button.jp-form-input-suffix{background:initial;border-radius:0}.jp-form-has-child{margin-bottom:1.5rem}.jp-form-has-child:last-child{margin-bottom:0}.jp-form-has-child>.jp-form-fieldset,.jp-form-has-child>.jp-form-setting-explanation{margin-left:2.25rem}.jp-form-has-child>.jp-form-fieldset{margin-bottom:1rem}.jp-form-block-fade{position:absolute;top:0;left:0;z-index:1;background:rgba(255,255,255,0.8);width:100%;height:100%}.jp-form-devmode-message.is-compact{width:100%;padding:0 1rem;position:absolute;top:-24px;z-index:1}.react-tagsinput{border:1px solid #e9eff3;padding:.15625rem}.react-tagsinput--focused{border-color:#00aadc}.react-tagsinput-tag{background-color:#00aadc;border-radius:2px;border:1px solid #0087be;color:#fff;display:inline-block;font-size:13px;padding:.125rem .375rem .1875rem .5rem;margin:.15625rem;transition:background-color .2s ease-out}.react-tagsinput-tag:hover{background-color:#26b7e2}.react-tagsinput-remove{cursor:pointer;font-weight:bold;transition:color .2s ease-out}.react-tagsinput-remove:hover{color:#caf3ff}.react-tagsinput-tag a::before{content:" \00d7"}input[type=text].react-tagsinput-input{width:9.375rem;height:1.875rem;margin:0;padding:.3125rem;font-size:13px;vertical-align:middle;border:none;box-shadow:none}input[type=text].react-tagsinput-input::-ms-clear{display:none}.jetpack-pagestyles .vp-notice,.jetpack-pagestyles .woocommerce-message,.jetpack-pagestyles .wc-connect{display:none}.jetpack-pagestyles .vp-notice-jp a{text-decoration:underline}.jetpack-pagestyles .woocommerce-message.dops-notice{display:block;padding:0}.jetpack-pagestyles .woocommerce-message.dops-notice::before{content:''}.jetpack-pagestyles .woocommerce-message.dops-notice .submit{padding:0}.jetpack-pagestyles .woocommerce-message.dops-notice .notice-dismiss::before{display:none}.jetpack-pagestyles .woocommerce-message.dops-notice .dops-notice__text>div{max-width:620px}.jetpack-pagestyles .woocommerce-message.dops-notice .dops-notice__text>a{margin-right:15px}.jetpack-pagestyles .woocommerce-message.dops-notice .dops-notice__moved_text{margin-bottom:5px}.jetpack-pagestyles .dops-notice__action.notice-dismiss{height:100%}.jp-inline-expand.dops-card{box-shadow:none;padding:0}.jp-inline-expand .jp-inline-expand-action{font-size:.875rem;cursor:pointer}.jp-inline-expand .jp-inline-expand-action .gridicon{transition:transform 0.15s cubic-bezier(0.175, 0.885, 0.32, 1.275),color 0.5s ease-in;vertical-align:text-bottom;display:inline-block;margin:0 5px}.jp-inline-expand.is-expanded .jp-inline-expand-action .gridicon{transform:rotate(180deg)}.jp-inline-expand.is-expanded .jp-inline-expand-content{padding:16px 0 0}.form-toggle.is-compact.is-toggling+.form-toggle__label .form-toggle__switch:before,.form-toggle.is-compact.is-toggling+.form-toggle__label .form-toggle__switch:after{left:8px}.form-toggle.is-compact.is-toggling:checked+.form-toggle__label .form-toggle__switch:before,.form-toggle.is-compact.is-toggling:checked+.form-toggle__label .form-toggle__switch:after{left:0}.dops-section-nav-tab__text .gridicon{vertical-align:middle;margin:0 0 2px 5px}.jp-settings-card__configure-link{display:flex;margin-bottom:0}.jp-form-settings-card{margin-bottom:1.5rem;font-size:.875rem}.jp-form-settings-card+.jp-at-a-glance__stats-card{margin-bottom:1.5rem}.jp-form-settings-card .dops-foldable-card .dops-foldable-card__header{color:#444}@media (min-width: 481px){.jp-form-settings-card .dops-foldable-card .dops-foldable-card__header{padding-left:1.5rem}}.jp-form-settings-card .dops-foldable-card .form-toggle__switch{float:left;margin-top:.125rem}.jp-form-settings-card .dops-foldable-card .dops-foldable-card__header-text{font-size:.875rem}.jp-form-settings-card .dops-foldable-card.jp-foldable-settings-disable .dops-foldable-card__header{color:#dadada}@media (min-width: 481px){.jp-form-settings-card .dops-foldable-card .dops-foldable-card__main{max-width:85%}}.jp-form-settings-card .dops-foldable-card .dops-foldable-card__action{right:.625rem}@media (max-width: 480px){.jp-form-settings-card .dops-foldable-card .dops-foldable-card__action{right:.0625rem}}.jp-form-settings-card .dops-foldable-card .jp-support-info{right:-1.3125rem;top:.4375rem}@media (max-width: 480px){.jp-form-settings-card .dops-foldable-card .jp-support-info{right:-1.875rem}}.jp-form-settings-card .dops-foldable-card .jp-form-legend:first-child,.jp-form-settings-card .dops-foldable-card .jp-form-label-wide:first-child{padding-top:.4375rem}@media (min-width: 481px){.jp-form-settings-card .dops-foldable-card__header{padding-top:1.75rem;padding-bottom:1.75rem}}.jp-foldable-settings-standalone .dops-foldable-card__header-text{font-size:.875rem}@media (min-width: 481px){.jp-foldable-settings-standalone .dops-foldable-card__header,.jp-foldable-settings-standalone.dops-card.is-expanded .dops-foldable-card__content{padding-left:1.5rem;padding-right:1.5rem}.jp-foldable-settings-standalone .dops-foldable-card__action{right:.625rem}.jp-foldable-settings-standalone .jp-form-settings-group .jp-support-info{right:.125rem;top:0}}@media (max-width: 480px){.jp-foldable-settings-standalone .jp-form-settings-group .jp-support-info{right:-1.9375rem;top:.375rem}}.jp-banner__no-border{border-left:none !important}.jp-banner__no-border .dops-banner__icon-circle{background:none !important;padding:0 0 0 3px}.jp-banner__no-border svg.gridicon.gridicons-checkmark-circle{width:28px;height:28px;color:#4ab866}.jp-banner__no-border .dops-banner__description{font-size:.875rem;line-height:1.65;color:#537994;margin-top:0}.jp-form-settings-group{position:relative;margin-bottom:0}.jp-form-settings-group p{font-size:.875rem;margin-top:0;margin-bottom:1.5rem}.jp-form-settings-group fieldset p:last-child{margin-bottom:8px}.jp-form-settings-group .form-toggle__label{margin-top:.25rem;margin-bottom:.25rem}.jp-form-settings-group .form-toggle__switch{float:left;margin-top:2px}.jp-form-settings-group .jp-form-setting-explanation{color:#747474;display:block;margin:.3125rem .875rem .3125rem 0;font-size:.8125rem;font-style:italic;font-weight:400;word-break:break-word}.jp-form-settings-group .jp-form-setting-explanation+.dops-card{margin-top:1rem}.jp-form-settings-group .jp-form-setting-explanation.is-warning{color:#d94f4f}.jp-form-settings-group .jp-form-setting-explanation a{text-decoration:underline}.dops-foldable-card .jp-form-settings-group{padding-bottom:16px}.jp-form-settings-group .dops-card{padding-right:3rem}@media (max-width: 480px){.jp-form-settings-group .jp-support-info{right:1rem;top:1.25rem}}.jp-form-settings-group .jp-support-info+p{margin-top:2px}.jp-form-settings-group .jp-support-info+span{padding-top:2px;display:block}.jp-form-settings-group .form-toggle__switch{float:left;margin-top:2px}.jp-form-settings-group>.dops-card:first-child{margin-bottom:0}.dops-foldable-card .jp-form-settings-group .dops-card{padding:0;box-shadow:none}.jp-apps-card{margin-top:4rem;margin-bottom:0}.jp-apps-card__content{margin-bottom:0}.jp-apps-card__content.dops-card{padding:0}.jp-apps-card__content a:not(.dops-button){font-style:italic}.jp-apps-card__top{padding:3.75rem 0 0;background:#ffffff;text-align:center}.jp-apps-card__top img{max-width:26%;padding-top:10px}.jp-apps-card__description{max-width:80%;margin:0 auto;padding:.625rem 1.5rem 1.5rem;line-height:1.65;color:#000;text-align:center}.jp-apps-card__description .dops-button{margin:8px 0}.jp-apps-card__paragraph{font-size:.9375rem}.jp-apps-card__header{margin-top:0;margin-bottom:.3125rem;font-weight:500}.jp-apps-card__promo_subhead{margin-top:0;font-style:italic}.jp-themes-card{margin-bottom:1.25rem}.jp-dialogue-full__container{box-sizing:border-box;position:absolute;top:0;right:0;bottom:0;left:0;z-index:100;background:rgba(246,246,246,0.95);text-align:center;padding:2rem;height:100%}.jp-dialogue{text-align:center;max-width:37.5rem;margin:0 auto 2rem;overflow:hidden}@media (max-width: 660px){.jp-dialogue{text-align:left}}.jp-dialogue p{font-size:.875rem;color:#747474}.jp-dialogue img{max-width:100%}.jp-dialogue p+img{margin:2rem 0 1rem}.jp-dialogue .dops-card{margin-bottom:0}.jp-dialogue .jp-dialogue-card__below{text-align:left}.jp-dialogue-full__dismiss{cursor:pointer;position:absolute;right:-10px;top:-10px;fill:#a2a2a2;padding:1rem;height:1.5rem;width:1.5rem}.jp-dialogue__title{font-weight:300;text-align:center;font-size:1.5rem;margin-bottom:2rem}.jp-dialogue__note,a.jp-dialogue__note{margin:0;padding:1rem 0 0;font-size:.875rem;clear:both;font-style:italic}.jp-dialogue-full__svg-jupiter{position:absolute;right:0;top:5rem;opacity:.90}.jp-dialogue-full__svg-stars{position:absolute;left:6.25rem;top:6.25rem;opacity:.90}.jp-dialogue__cta-container{padding:.5rem 0 0}.jp-dialogue__cta-container .dops-button{margin:0 .5rem}.jp-upgrade-notice__content .jp-upgrade-notice__enable-module .jp-form-has-child{padding-left:30px}.jp-upgrade-notice__content .jp-upgrade-notice__enable-module .jp-form-has-child .jp-form-fieldset{margin-bottom:0.4rem}.jp-upgrade-notice__enable-module{margin-bottom:calc(1em + 8px)}.jp-upgrade-notice__enable-module .jp-form-settings-group{margin:0px auto;max-width:400px;text-align:left}.jp-upgrade-notice__enable-module .jp-form-has-child{padding:10px;padding-right:30px}.jp-upgrade-notice__enable-module .jp-support-info{top:.9375rem;right:.9375rem}.jp-welcome-new-plan{overflow:initial}.jp-welcome-new-plan__button{margin-top:1.5rem}img.jp-welcome__svg{margin:2.5rem auto 0;max-width:15rem}.jp-at-a-glance{margin-bottom:3rem}.jp-at-a-glance__stats-card{padding:0}.jp-at-a-glance__stats-empty{text-align:center;margin-bottom:0}.jp-at-a-glance__stats-empty p{font-size:.875rem;color:#747474}.jp-at-a-glance__stats-inactive{padding:1rem}@media (min-width: 661px){.jp-at-a-glance__stats-inactive{display:flex;flex-wrap:nowrap;flex-direction:row;align-items:center}}@media (max-width: 660px){.jp-at-a-glance__stats-inactive-icon{display:none}}@media (min-width: 661px){.jp-at-a-glance__stats-inactive-icon{flex-basis:10%}}.jp-at-a-glance__stats-inactive-text{font-size:.875rem;line-height:1.5}@media (max-width: 660px){.jp-at-a-glance__stats-inactive-text{padding:0 0 1rem}}@media (min-width: 661px){.jp-at-a-glance__stats-inactive-text{flex-basis:50%;padding:0 1rem}}.jp-at-a-glance__stats-inactive-button{text-align:left}@media (min-width: 661px){.jp-at-a-glance__stats-inactive-button{flex-basis:40%;text-align:right}}.jp-at-a-glance__stats-chart{padding:1rem;position:relative}.jp-at-a-glance__stats-chart .dops-spinner{position:absolute;top:50%;left:50%}.jp-at-a-glance__stats-bottom{margin:2rem 0 0}@media (max-width: 480px){.jp-at-a-glance__stats-bottom{box-shadow:0 0 0 1px rgba(200,215,225,0.5),0 1px 2px #eee}}.jp-at-a-glance__stats-summary{text-align:center;border-top:1px #f6f6f6 solid}@media (min-width: 661px){.jp-at-a-glance__stats-summary{flex-wrap:nowrap;display:flex;flex-direction:row}}@media (max-width: 660px){.jp-at-a-glance__stats-summary{display:block}}.jp-at-a-glance__stats-summary-today,.jp-at-a-glance__stats-summary-bestday{flex-basis:25%;padding:1rem;box-shadow:0 0 0 1px rgba(200,215,225,0.5),0 1px 2px #eee}@media (max-width: 660px){.jp-at-a-glance__stats-summary-today{margin-top:-.0625rem}}@media (min-width: 661px){.jp-at-a-glance__stats-summary-bestday{margin:0 .0625rem}}@media (max-width: 660px){.jp-at-a-glance__stats-summary-bestday,.jp-at-a-glance__stats-summary-alltime{margin-top:.0625rem}}.jp-at-a-glance__stats-summary-alltime{flex-basis:50%;padding:1rem;box-shadow:0 0 0 1px rgba(200,215,225,0.5),0 1px 2px #eee}@media (min-width: 661px){.jp-at-a-glance__stats-summary-alltime{max-width:40%;display:flex;flex-grow:1;flex-shrink:1}}.jp-at-a-glance__stats-alltime-views,.jp-at-a-glance__stats-alltime-comments{flex-basis:50%}.jp-at-a-glance__stats-cta{padding:1rem;background-color:#fbfbfb}@media (min-width: 661px){.jp-at-a-glance__stats-cta{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center}}@media (max-width: 660px){.jp-at-a-glance__stats-cta{display:block}}@media (min-width: 661px){.jp-at-a-glance__stats-cta-description{flex-basis:30%}}.jp-at-a-glance__stat-details{margin:0}.jp-at-a-glance__stat-number{font-size:1.375rem;font-weight:400;margin:.5rem 0}@media (min-width: 661px){.jp-at-a-glance__stats-cta-buttons{text-align:right;flex-basis:70%}}@media (max-width: 660px){.jp-at-a-glance__stats-cta-buttons{text-align:center}.jp-at-a-glance__stats-cta-buttons .dops-button{width:100%;margin-bottom:.25rem}}.jp-at-a-glance__stats-cta-buttons .dops-button{text-align:center;margin:.25rem}.jp-at-a-glance__stats-views{margin-top:0;margin-bottom:0}.jp-at-a-glance__stats-view{display:inline-block;margin-top:0;margin-bottom:0;margin-left:1rem}.jp-at-a-glance__stats-view:focus{outline:0}@media (max-width: 480px){.jp-at-a-glance__stats-view{margin-left:0;margin-right:1rem}}.jp-at-a-glance__stats-view-link,.jp-at-a-glance__stats-view-link:visited{color:#a2a2a2;text-decoration:underline}.jp-at-a-glance__stats-view-link.is-current,.jp-at-a-glance__stats-view-link:visited.is-current,.jp-at-a-glance__stats-view-link:focus.is-current,.jp-at-a-glance__stats-view-link:visited.is-current,.jp-at-a-glance__stats-view-link:visited:visited.is-current,.jp-at-a-glance__stats-view-link:visited:focus.is-current{color:#23282d;text-decoration:none}.jp-at-a-glance__stats-view-link:focus{outline:0;box-shadow:none}.jp-at-a-glance__item-grid{display:flex}@media (max-width: 660px){.jp-at-a-glance__item-grid{display:block}}.jp-at-a-glance__left,.jp-at-a-glance__right{display:flex;min-width:0}@media (min-width: 661px){.jp-at-a-glance__left,.jp-at-a-glance__right{flex-basis:50%;margin-bottom:1rem}}@media (max-width: 660px){.jp-at-a-glance__left,.jp-at-a-glance__right{margin-bottom:.75rem}}.jp-at-a-glance__left>div,.jp-at-a-glance__left .jp-dash-item,.jp-at-a-glance__right>div,.jp-at-a-glance__right .jp-dash-item{min-width:0;flex-grow:1;display:flex;flex-direction:column}.jp-at-a-glance__left>div,.jp-at-a-glance__right>div{flex-basis:100%}.jp-at-a-glance__left .jp-dash-item .dops-card,.jp-at-a-glance__right .jp-dash-item .dops-card{flex-grow:1}.jp-at-a-glance__left .jp-dash-item .dops-card.is-compact,.jp-at-a-glance__right .jp-dash-item .dops-card.is-compact{flex-grow:0}.jp-at-a-glance__left .jp-dash-item .dops-card.is-compact a.dops-notice__action,.jp-at-a-glance__right .jp-dash-item .dops-card.is-compact a.dops-notice__action{margin-left:0;padding-left:0}@media (max-width: 480px){.jp-at-a-glance__left .jp-dash-item .dops-card.is-compact a.dops-notice__action,.jp-at-a-glance__right .jp-dash-item .dops-card.is-compact a.dops-notice__action{text-transform:none}}.jp-at-a-glance__left .jp-dash-item__card,.jp-at-a-glance__right .jp-dash-item__card{display:flex}.jp-search-config-aag{width:100%}.jp-at-a-glance__left{display:flex}@media (min-width: 661px){.jp-at-a-glance__left{margin-right:1rem}.jp-at-a-glance__left:last-child{flex-basis:calc( 50% - .5rem)}}.dops-chart__tooltip .tip-arrow{display:none}.jp-connection-type .jp-dash-item__card{align-items:flex-start}.jp-connection-settings__info{display:flex}.jp-connection-settings__actions{margin:1em 0 0}.jp-connection-settings__actions a{cursor:pointer}.jp-connection-settings__text{width:70%;margin-left:1rem;word-break:break-word}.jp-connection-settings__info .gridicon{opacity:.6}.jp-connection-settings__info .gridicon,.jp-connection-settings__info .jp-connection-settings__site-icon{background:#c8d7e1;color:#fff;min-width:4rem}.jp-connection-settings__info .jp-connection-settings__gravatar{display:inline-block;min-width:4rem;background:#a2a2a2;border-radius:50%;margin-bottom:0}.jp-connection-settings__username{font-weight:600}.jp-connection-settings__email{color:#a2a2a2;font-size:.8125rem;font-style:italic;font-weight:400}.jp-connection-settings__modal.dops-modal{max-width:450px}.jp-connection-settings__modal-body{margin:0;padding:1.5rem 2rem;font-size:.875rem;color:#2e4453;text-align:center}.jp-connection-settings__modal-body h2{margin:2rem 0 1.5rem;font-size:2rem;font-weight:300;color:#2e4453}.jp-connection-settings__modal-body h4{margin:1rem 1.5rem 0;font-size:1rem;font-weight:400;line-height:1.5em;color:#668eaa}.jp-connection-settings__modal-body p{font-size:.875rem}.jp-connection-settings__modal-body ul{margin:1.5rem 0 2.25rem;color:#537994}.jp-connection-settings__modal-body li{position:relative;display:block;margin:0;padding:1rem .5rem 1rem 2.75rem;border-bottom:1px solid #e1e1e1;text-align:left}.jp-connection-settings__modal-body li:first-of-type{border-top:1px solid #e1e1e1}.jp-connection-settings__modal-body .gridicon{position:absolute;left:1rem;top:1rem;vertical-align:text-bottom;color:#537994}.jp-connection-settings__modal-cancel{margin-right:1em}.jp-connection-settings__modal-more a{color:#0087be;text-decoration:underline}.jp-dash-item__manage-in-wpcom{margin-top:1px;width:100%}.jp-landing__plans.dops-card{padding:0}.jp-landing__plans .dops-button{margin-right:10px}.jp-landing-plans__header{background:#414141}@media (min-width: 661px){.jp-landing-plans__header{padding:2rem 0 0}}@media (max-width: 660px){.jp-landing-plans__header{padding:2rem}}.jp-landing-plans__header-img-container{margin:2rem 0 0;overflow:hidden}@media (min-width: 661px){.jp-landing-plans__header-img-container{display:flex;flex-wrap:nowrap;flex-direction:row;align-items:center}}@media (max-width: 660px){.jp-landing-plans__header-img-container{margin-bottom:0}}.jp-landing-plans__clouds{position:relative;overflow:hidden;padding-top:5rem}.jp-landing-plans__clouds img{position:absolute;bottom:-2px;left:-5%;right:-5%;height:auto;width:110%}@media (max-width: 660px){.jp-landing-plans__clouds{display:none}}.jp-landing-plans__header-col-left{flex-basis:45%}@media (min-width: 661px){.jp-landing-plans__header-col-left{padding-left:2rem}}.jp-landing-plans__header-col-right{flex-basis:55%}@media (min-width: 661px){.jp-landing-plans__header-col-right{padding:0 2rem}}@media (max-width: 660px){.jp-landing-plans__header-col-right{text-align:center}}.jp-landing-plans__header-title,.jp-landing-plans__header-description{line-height:1.5}@media (min-width: 661px){.jp-landing-plans__header-title,.jp-landing-plans__header-description{text-align:center}}.jp-landing-plans__header-title,.jp-landing-plans__header-subtitle{color:#fff;font-weight:400;margin:0}.jp-landing-plans__header-title{font-size:1.25rem}.jp-landing-plans__header-description{font-size:.875rem;margin:0;padding-bottom:1rem}.jp-landing-plans__header-subtitle{font-size:1rem;line-height:1.25}.jp-landing-plans__header-description,.jp-landing-plans__header-text{color:#bbb}.jp-landing-plans__header-text{font-size:.875rem;padding:1.5rem 0;margin:0}.jp-landing-plans__header-btn-container{margin:0}.jp-landing__plan-iconcard-current h3{font-size:1.5em}.jp-landing__plan-features-card{display:flex;flex-wrap:nowrap;flex-grow:1;box-sizing:border-box;max-width:49.5%;background-color:#fff;box-shadow:0 0 0 1px rgba(213,213,213,0.5),0 1px 2px #eee}.is-loading .jp-landing__plan-features-card{width:49.5%}@media (min-width: 661px){.jp-landing__plan-features-card{margin-bottom:1%}}@media (max-width: 660px){.jp-landing__plan-features-card{max-width:100%;margin-bottom:.5rem}}@media (min-width: 481px){.jp-landing__plan-features-card{padding:2rem}}@media (max-width: 480px){.jp-landing__plan-features-card{padding:1rem}}.jp-landing__plan-features-img{width:90px;margin-right:8px;line-height:1}@media (min-width: 961px){.jp-landing__plan-features-img{width:120px;margin-right:18px}}.jp-landing__plan-features-icon{display:block;margin-left:-8px}@media (min-width: 481px){.jp-landing__plan-features-icon{margin-left:-16px}}.jp-landing__plan-features-text{flex:1}.jp-landing__plan-features-title{margin:0}.jp-landing__plan-features{display:flex;flex-wrap:wrap;align-items:stretch;justify-content:space-between;margin-bottom:2rem}@media (max-width: 660px){.jp-landing__plan-features{display:block}}.jp-landing__plan-card{padding:2rem}@media (max-width: 480px){.jp-landing__plan-card{text-align:center}}@media (min-width: 481px){.jp-landing__plan-card{display:flex;align-items:center;flex-wrap:nowrap}}.jp-landing__plan-card .jp-landing__plan-features-title,.jp-landing__plan-card .jp-landing__plan-features-text{padding:0}.jp-landing__plan-card .jp-landing__plan-features-title{margin-bottom:1rem}.jp-landing__plan-card .jp-landing__plan-features-text:last-child{margin-bottom:0}.jp-landing__plan-card-img{float:left;margin-right:2.625rem}@media (max-width: 960px){.jp-landing__plan-card-img{margin-right:1rem}}@media (max-width: 480px){.jp-landing__plan-card-img{width:100%;max-width:100%;text-align:center}}.jp-landing__plan-icon{width:82px;position:relative;left:-3px}@media (min-width: 961px){.jp-landing__plan-icon{width:96px;left:2px}}.jp-landing__plan-card-img.is-placeholder{width:7.5rem;height:5.3125rem}.jp-landing__plan-card-img.is-placeholder+.jp-landing__plan-card-current{width:80%}.jp-landing__plan-features-title.is-placeholder{height:1.5rem;max-width:50%}.jp-landing__plan-features-text.is-placeholder{height:2.75rem;max-width:75%}.jp-landing__plan-features-link{width:100%}@media (min-width: 661px){.jp-landing__plan-features-link{text-align:center}}.plan-features__content{margin:0 -16px 16px;padding-top:20px}.is-section-plans .plan-features__mobile{display:block}@media (min-width: 752px){.is-section-plans .plan-features__mobile{display:none}}.plan-features__notice{margin-bottom:16px}@media (min-width: 1041px){.plan-features__notice{margin-bottom:32px;margin-top:-19px}}.is-section-plans .plan-features__table{display:table}.plan-features__table{font-size:14px;color:#747474;border-spacing:16px 0;margin-top:-16px;display:table;table-layout:fixed;width:100%;text-align:center}@media (min-width: 661px){.plan-features__table{display:table}}@media (max-width: 660px){.plan-features__table{display:none}}@media (max-width: 1040px){.plan-features__table{border-spacing:0;margin:0 15px;width:calc( 100% - 30px)}}.plan-features__row{background:#fff}.plan-features__table-item{border-right:solid 1px #e6e6e6;border-left:solid 1px #e6e6e6;background-color:#fff;position:relative}.plan-features__table-item.is-header{vertical-align:top}.plan-features__table-item.is-personal-plan{border-bottom:solid 2px #f0b849}.plan-features__table-item.is-premium-plan{border-bottom:solid 2px #4ab866}.plan-features__table-item.is-business-plan{border-bottom:solid 2px #855DA6}.plan-features__table-item.is-highlighted{border:1px solid #0087be;background-color:rgba(0,135,190,0.1);position:relative;top:-1px}.plan-features__table-item.is-highlighted.has-partial-border::after{display:none}.plan-features__table-item.is-selected{display:table-cell}.plan-features__table-item.has-partial-border:after{content:'';display:block;height:1px;width:calc( 100% - 24px);border-bottom:1px solid #e6e6e6;position:absolute;bottom:0;margin:0 12px}.plan-features__table-item.has-border-bottom{border-bottom:solid 1px #e6e6e6}.plan-features__table-item.has-border-top{border-top:solid 1px #e6e6e6}.plan-features__table-item.is-placeholder .spinner-line{margin:0;position:absolute;top:-3px;width:100%}.plan-features__table-item.is-bottom-buttons{padding-top:33px;padding-bottom:15px}.plan-features__table-item.is-top-buttons{padding-top:8px;padding-bottom:16px}.plan-features__header{position:relative;padding:15px 15px 0 15px;background-color:#fff}@media (max-width: 960px){.plan-features__header{padding:12px 12px 0 12px}}.plan-features__header-title{font-size:22px;line-height:0.7;font-weight:normal;margin:0}@media (max-width: 960px){.plan-features__header-title{font-size:20px}}.info-popover.plan-features__header-tip-info{position:relative;top:4px;left:3px;margin-top:-10px;margin-bottom:-10px;display:inline-block}.plan-features__description{margin:0;padding:12px 0}.plan-features__item{margin:0 12px;padding:12px 0;font-size:13px;color:#414141;text-align:center}@media (max-width: 960px){.plan-features__item{font-size:12px}}@media (max-width: 1040px){.plan-features__item{margin:0 12px}}.plan-features__item-description{display:inline-block;margin-left:10px;color:#a2a2a2}.plan-price{padding-top:15px;padding-bottom:15px}.plan-price__yearly{color:#414141}@media (min-width: 661px){.plans-mobile-notice{display:none}}.plans-mobile-notice .dops-button:first-of-type{margin-right:6px;margin-bottom:6px}.plans-mobile-notice.dops-card h2{margin-top:0}.dops-search__input[type="search"]{width:100%}.jp-settings-container .jp-no-results{display:none;font-size:.875rem;line-height:1.5}.jp-settings-container .jp-no-results:last-of-type{display:inherit}@media (max-width: 480px){.dops-search.is-expanded-to-container{height:46px}}.dops-card.jp-settings-description{margin:24px 0 8px;padding:0;background:none;box-shadow:none}.jp-form-google-label-unverified .dops-button{margin:0 15px}@media (max-width: 660px){.jp-form-google-label-unverified .dops-button{margin-top:10px;width:40%}}.jp-form-google-label-unverified .jp-form-google-separator{padding:.5rem 0}@media (max-width: 660px){.jp-form-google-label-unverified .jp-form-google-separator{margin:25px 0 0;display:inline-block}}.jp-form-input-with-prefix-bottom-message{top:-1.25rem;position:relative;line-height:2em;margin-top:5px}.jp-form-site-verification-verified{background-color:#fff;color:#00BE28;box-sizing:border-box;margin:0;padding:7px 14px;font-size:16px;line-height:1.5;border:1px solid #c8d7e1;width:100%;display:flex;flex-direction:row;justify-content:left;align-items:center}.jp-form-site-verification-verified .gridicon:first-child{margin-right:5px}@media (min-width: 661px){.jp-form-site-verification-verified{border-left:0}}@media (max-width: 660px){.jp-form-site-verification-verified{border-top:0}}.jp-form-site-verification-edit-button{margin-left:10px;overflow:visible}@media (max-width: 660px){.jp-form-site-verification-edit-button{margin-left:0;margin-right:5px;margin-top:5px}}.jp-form-site-verification-buttons{flex:0 1 20em;display:inline-flex}.jp-form-site-verification-verified-note{font-size:0.7em}.jp-form-google-label-unverified-actions{display:flex;align-content:center}.jp-form-google-label-unverified-actions .dops-button{margin-left:10px;margin-right:10px;padding-left:7px;padding-right:7px}
diff --git a/plugins/jetpack/_inc/build/style.min.rtl.css b/plugins/jetpack/_inc/build/style.min.rtl.css
deleted file mode 100644
index ed176ea3..00000000
--- a/plugins/jetpack/_inc/build/style.min.rtl.css
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Do not modify this file directly. It is compiled SASS code. */
-@media (max-width: 660px){.jp-hidden-on-mobile{display:none}}.jetpack-pagestyles #wpcontent{padding-right:0}.wp-admin.toplevel_page_jetpack{background-color:#f6f6f6;line-height:1.4;height:auto}.jetpack-pagestyles a{text-decoration:none}.dops-notice__text a{text-decoration:underline}.jetpack-pagestyles #dolly{float:none;position:relative;left:0;right:0;top:0;padding:.625rem;text-align:left;background:#fff;font-size:.75rem;font-style:italic;color:#a2a2a2;border-bottom:1px #eee solid}@media (max-width: 660px){.jetpack-pagestyles #dolly{display:none}}.toplevel_page_jetpack ul#adminmenu a.wp-has-current-submenu:after{border-left-color:#f6f6f6}.jp-lower{margin:0 auto;text-align:right;max-width:65rem;padding:1.5rem}@media (max-width: 1250px){.jp-lower{max-width:95%}}#contextual-help-link-wrap{display:none}.is-placeholder{animation:pulse-light 0.8s ease-in-out infinite;background:#d5d5d5}@keyframes pulse-light{50%{background-color:#eee}}.jp-dash-item .jp-dash-item__content a{font-style:italic}.jp-dash-item .dops-section-header__actions .form-toggle__label{position:relative;top:6px;left:0}.jp-dash-item .dops-section-header__actions .form-toggle__label-content{margin:0}.jp-dash-item__content{flex-grow:1;display:flex;flex-wrap:wrap;align-items:flex-start}.jp-dash-item__card{margin:0}.jp-dash-item__count{margin-top:0;margin-bottom:6px;margin-left:8px;color:#00aadc;font-weight:500;font-size:2rem;display:inline-block;border:1px solid #CBD7E1;border-radius:4px;padding:0px 4px;min-width:36px;text-align:center}@media (max-width: 660px){.jp-dash-item__count{font-size:1.4375rem}}.jp-dash-item__count+.jp-dash-item__description{max-width:61%}.jp-dash-item__description{margin:0;font-size:.875rem;max-width:calc( 100% - 18px)}.jp-dash-item .dops-section-header{width:100%}.jp-dash-item .dops-section-header .dops-button{font-style:normal}.jp-dash-item .dops-section-header.is-working .dops-section-header__actions,.jp-dash-item .dops-section-header.is-premium-inactive .dops-section-header__actions{color:#747474}.jp-dash-item .dops-section-header__actions .dops-notice{margin-top:.125rem}.jp-dash-item__active-label{display:inline-block;padding:.375rem 0;color:#888;color:#a2a2a2;font-size:.75rem;font-weight:400;text-transform:uppercase}.jp-dash-item__is-inactive .dops-section-header__label{padding-left:.5rem}.jp-dash-item__is-inactive .dops-section-header__label-text:before{content:'';display:block;position:absolute;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;background:linear-gradient(to left, rgba(255,255,255,0), #fff 90%);top:0px;bottom:0px;left:0px;right:auto;width:8px;height:auto}.jp-dash-item__is-inactive .jp-dash-item__description{font-style:italic;color:#6f6f6f}.jp-dash-item__disabled{opacity:.5;position:relative}.jp-dash-item__disabled::before{content:"";width:100%;height:100%;display:block;position:absolute;top:0;right:0;z-index:1}.jp-dash-item__recently-activated .jp-dash-item__description{font-style:italic;box-sizing:border-box}.jp-dash-section-header{display:flex;flex-wrap:wrap;margin:2.5rem 0 .5rem}@media (max-width: 660px){.jp-dash-section-header{margin-bottom:1.5rem}}@media (max-width: 480px){.jp-dash-section-header{display:block}}.jp-dash-section-header__label{flex:1;white-space:nowrap}.jp-dash-section-header__name{display:inline-block;margin-top:0;margin-bottom:0;font-size:1.25rem;font-weight:400;white-space:nowrap}@media (min-width: 481px){.jp-dash-section-header__name{display:inline-block}}@media (max-width: 480px){.jp-dash-section-header__name .jp-dash-section-header__label{display:inline-block}}.jp-dash-section-header__settings{display:inline-block;min-width:2.5rem;text-align:center;color:#888}.jp-dash-section-header__settings:focus{outline:0;box-shadow:none}.jp-dash-section-header__settings:focus .gridicon{color:#0087be}.jp-dash-section-header__settings .gridicon{position:relative;top:1px}.jp-dash-section-header__external-link{align-self:center;font-style:italic}@media (max-width: 660px){.jp-dash-section-header__external-link{margin-top:.25rem}}@media (max-width: 480px){.jp-dash-section-header__external-link{display:block;width:100%}}.jp-dash-section-header__children{align-self:center}@media (max-width: 480px){.jp-dash-section-header__children{width:100%}}.dops-foldable-card.dops-card.devmode-disabled .dops-foldable-card__summary,.dops-foldable-card.dops-card.devmode-disabled .dops-foldable-card__summary_expanded{width:100px}.dops-foldable-card.dops-card.is-expanded .dops-foldable-card__content{position:relative;padding-left:2.9375rem;padding-right:1.5rem}@media (min-width: 661px){.dops-foldable-card__main{max-width:85%}}@media (min-width: 481px){.dops-foldable-card__main{max-width:60%}}@media (max-width: 480px){.dops-foldable-card__main{flex-basis:100%}}@media (max-width: 480px){.dops-foldable-card__header{flex-wrap:wrap}}@media (max-width: 480px){.dops-foldable-card__header-text{font-size:.875rem}}.dops-foldable-card__header-text .dops-button{margin-right:.5rem}@media (max-width: 480px){.dops-foldable-card__subheader{display:none}}@media (max-width: 480px){.dops-foldable-card.has-expanded-summary .dops-foldable-card__summary,.dops-foldable-card.has-expanded-summary .dops-foldable-card__summary_expanded{text-align:right;margin-top:.5rem}}.jp-footer{text-align:center;margin:1rem 0 2rem}@media (max-width: 1040px){.jp-footer{margin:2rem 0 1.5rem}}@media (max-width: 660px){.jp-footer{margin:1.5rem 0 1rem}}.jp-footer__a8c-attr-container{margin-bottom:.5rem}.jp-footer__a8c-attr{width:11.25rem}.jp-footer__a8c-attr path{fill:#888}.jp-footer__links{border-top:1px #e1e1e1 solid;border-bottom:1px #e1e1e1 solid;margin-top:0;margin-bottom:1rem}@media (max-width: 660px){.jp-footer__links{border-bottom:none}}.jp-footer__link-item{display:inline-block;margin-bottom:0}@media (min-width: 661px){.jp-footer__link-item{display:inline-block}}@media (max-width: 660px){.jp-footer__link-item{display:block;border-bottom:1px #e1e1e1 solid}}.jp-footer__link{padding:1rem .5rem;color:#888;display:inline-block;cursor:pointer}.jp-footer__link:visited{color:#888}.jp-footer__link:hover,.jp-footer__link:active{color:#272727}@media (max-width: 660px){.jp-footer__link{display:block;padding:.5rem 0;border-bottom:1px #e1e1e1 solid}.jp-footer__link:last-of-type{border-bottom:none}}.jp-dev-card.jp-dev-card{position:fixed;bottom:10px;left:10px;z-index:100;padding:8px;font-size:12px;text-align:right}.jp-dev-card.jp-dev-card ul{margin-top:6px}.jp-dev-card.jp-dev-card li{margin-top:2px;margin-bottom:0}.jp-dev-card__heading{font-weight:600}.jp-dev-card__subheading{font-size:11px;color:#888}.jp-dev-card__close{float:left;cursor:pointer}.jp-loading-placeholder{margin-top:30vh;margin-bottom:25vh;color:#d5d5d5;font-size:12vw;text-align:center}@media (min-width: 961px){.jp-loading-placeholder{font-size:120px}}.jp-loading-placeholder .dashicons{font-size:inherit;width:auto;height:auto}@media (max-width: 480px){.dops-notice ul{font-size:.75rem}}.jp-jumpstart{text-align:right;margin:0 auto 2rem}.jp-jumpstart-card__content{display:flex;margin-bottom:0}.jp-jumpstart-card__content .jp-jumpstart-card__img,.jp-jumpstart-card__content .jp-jumpstart-card__img img{display:none}@media (min-width: 481px){.jp-jumpstart-card__content .jp-jumpstart-card__img,.jp-jumpstart-card__content .jp-jumpstart-card__img img{display:block;width:6.25rem}}@media (min-width: 661px){.jp-jumpstart-card__content .jp-jumpstart-card__img,.jp-jumpstart-card__content .jp-jumpstart-card__img img{width:12.5rem}}@media (min-width: 481px){.jp-jumpstart-card__content .jp-jumpstart-card__description{margin-right:2rem}}.jp-jumpstart-card__content .jp-jumpstart-card__description .jp-jumpstart-card__description-title{margin-top:0}.jp-masthead{background-color:#fff;text-align:center;box-shadow:0 1px 0 rgba(213,213,213,0.5),0 1px 2px #eee}@media (max-width: 48.875rem){.jp-masthead{padding:0 1.5rem}.jetpack-masterbar .jp-masthead{padding-right:4rem}}.jp-masthead__inside-container{display:flex;flex-wrap:wrap;margin:0 auto;width:100%;max-width:65rem;padding-bottom:.375rem}@media (max-width: 1250px){.jp-masthead__inside-container{max-width:95%}}.jp-masthead__logo-container{flex-grow:0;flex-shrink:0;padding:.6875rem 0 0}@media (max-width: 480px){.jp-masthead__logo-container{margin-left:1rem}}.jp-masthead__logo-link{display:inline-block;outline:none;vertical-align:middle}.jp-masthead__logo-link:focus{line-height:0;box-shadow:0 0 0 2px #78dcfa}.jp-masthead__logo-link+code{margin:0 10px;padding:5px 9px;border-radius:2px;background:#e6ecf1;color:#647a88}.jp-masthead__nav{display:flex;flex-wrap:nowrap;flex-grow:1;flex-shrink:0;text-align:left;margin-top:.375rem;padding:.25rem 0}.jp-masthead__nav .dops-button-group{flex-grow:1;align-self:center}@media (max-width: 480px){.jp-masthead__nav{text-align:right}}#sandbox-domain-badge{background:#d54e21;text-transform:uppercase;letter-spacing:0.2em;text-shadow:none;font-size:9px;font-weight:bold;cursor:pointer;color:#ffffff}.jp-module-settings__external-link{font-size:.875rem}.jp-module-settings__read-more{clear:both;margin-top:1rem}@media (min-width: 481px){.jp-module-settings__read-more{margin-top:2rem}}.jp-module-settings__read-more .dops-button.is-compact.is-borderless,.jp-module-settings__read-more .jp-module-settings__more-text{vertical-align:middle}.jp-related-posts-preview{position:relative;margin-top:.5rem;padding:1rem .5rem;width:100%;background:#f6f6f6;box-sizing:border-box;box-shadow:none}.jp-related-posts-settings__preview-label{margin-bottom:.5rem;margin-top:1.5rem;font-size:.875rem;font-weight:600}.jp-related-posts-preview__title{margin:0 .5rem .6875rem 0;font-size:.6875rem;font-weight:600}.jp-related-posts-preview__post-title{font-size:.9375rem;font-weight:400;margin:0}.jp-related-posts-preview__post-context{font-size:.9375rem;opacity:.6;margin:0}.jp-related-posts-preview__item{box-sizing:border-box;display:inline-block;width:33.33%;padding:.5rem;vertical-align:top}@media (max-width: 480px){.jp-related-posts-preview__item{width:100%}}.jp-related-posts-preview__item img{max-width:100%;margin-bottom:.5rem}.jp-support-card{margin-top:1rem;margin-bottom:0}.jp-support-card__description{font-size:.875rem;line-height:1.65;color:#537994}.jp-support-card__description:first-of-type{margin-top:4px}.jp-support-card__description:last-of-type{margin-bottom:0}.jp-support-card__description .dops-button{margin:0 0 0 16px}@media (max-width: 960px){.jp-support-card__description .dops-button{margin:0 0 8px 16px}}.jp-support-card__link{font-style:italic}@media (max-width: 660px){.jp-support-card__link{display:block;width:100%;padding:.625rem 0;border-top:1px rgba(213,213,213,0.5) solid}.jp-support-card__link:first-letter{text-transform:capitalize}.jp-support-card__link:first-of-type{border-top:0}}.jp-support-card__happiness{margin-bottom:0;display:flex;flex-flow:row nowrap}@media (max-width: 660px){.jp-support-card__happiness .jp-support-card__description:first-of-type{margin-bottom:1rem}}.jp-support-card__social{background-color:#fbfbfb;padding:1rem}@media (max-width: 660px){.jp-support-card__social{background:#fff;margin-top:1rem;padding:0 1rem}}.jp-support-card__header{color:#668eaa;font-weight:400;font-size:1.3125rem;margin:0}.jp-support-card__happiness-contact{flex-shrink:1;flex-grow:1}.jp-form-legend,.jp-form-label-wide{padding:1rem 0 .3125rem;font-size:.875rem;font-weight:600}.jp-form-label{display:block;font-size:.875rem;line-height:1.5;margin-bottom:.3125rem}.jp-form-label-wide{padding:.5rem 0;display:block}.jp-form-label input[type="radio"]+span{font-weight:normal;margin-right:8px}.jp-form-button{margin-top:1rem}@media (min-width: 481px){.jp-form-button{position:absolute;left:1rem;bottom:1rem}}.jp-form-toggle-explanation{font-size:.875rem;word-break:break-word;vertical-align:baseline}.jp-form-toggle-explanation .jp-form-toggle-privacy-info{margin-right:.3125rem;padding-right:.3125rem;border-right:1px solid rgba(162,162,162,0.5)}.jp-form-fieldset{clear:both;position:relative}.jp-form-fieldset .jp-form-legend+.jp-form-setting-explanation{margin-top:0;margin-bottom:.5rem}.jp-form-input-with-prefix{display:inline-flex;width:100%;margin-bottom:1.5rem}.jp-form-input-with-prefix span:first-child{min-width:3.75rem;text-align:center;background:#f6f6f6;border:1px solid #c8d7e1;color:#4f748e;padding:.5rem .875rem;white-space:nowrap}@media (max-width: 660px){.jp-form-input-with-prefix span:first-child{display:block;text-align:right}}.jp-form-input-with-prefix input[type="text"]{width:100%}@media (min-width: 661px){.jp-form-input-with-prefix input[type="text"]{border-right:0}}@media (max-width: 660px){.jp-form-input-with-prefix input[type="text"]{border-top:0}}@media (max-width: 660px){.jp-form-input-with-prefix{display:block;box-sizing:border-box}}.jp-form-input-suffix{text-align:center;background:#f6f6f6;border:1px solid #c8d7e1;color:#4f748e;padding:.5rem .875rem;white-space:nowrap;flex:1 0 auto;display:flex}button.jp-form-input-suffix{background:initial;border-radius:0}.jp-form-has-child{margin-bottom:1.5rem}.jp-form-has-child:last-child{margin-bottom:0}.jp-form-has-child>.jp-form-fieldset,.jp-form-has-child>.jp-form-setting-explanation{margin-right:2.25rem}.jp-form-has-child>.jp-form-fieldset{margin-bottom:1rem}.jp-form-block-fade{position:absolute;top:0;right:0;z-index:1;background:rgba(255,255,255,0.8);width:100%;height:100%}.jp-form-devmode-message.is-compact{width:100%;padding:0 1rem;position:absolute;top:-24px;z-index:1}.react-tagsinput{border:1px solid #e9eff3;padding:.15625rem}.react-tagsinput--focused{border-color:#00aadc}.react-tagsinput-tag{background-color:#00aadc;border-radius:2px;border:1px solid #0087be;color:#fff;display:inline-block;font-size:13px;padding:.125rem .5rem .1875rem .375rem;margin:.15625rem;transition:background-color .2s ease-out}.react-tagsinput-tag:hover{background-color:#26b7e2}.react-tagsinput-remove{cursor:pointer;font-weight:bold;transition:color .2s ease-out}.react-tagsinput-remove:hover{color:#caf3ff}.react-tagsinput-tag a::before{content:" \00d7"}input[type=text].react-tagsinput-input{width:9.375rem;height:1.875rem;margin:0;padding:.3125rem;font-size:13px;vertical-align:middle;border:none;box-shadow:none}input[type=text].react-tagsinput-input::-ms-clear{display:none}.jetpack-pagestyles .vp-notice,.jetpack-pagestyles .woocommerce-message,.jetpack-pagestyles .wc-connect{display:none}.jetpack-pagestyles .vp-notice-jp a{text-decoration:underline}.jetpack-pagestyles .woocommerce-message.dops-notice{display:block;padding:0}.jetpack-pagestyles .woocommerce-message.dops-notice::before{content:''}.jetpack-pagestyles .woocommerce-message.dops-notice .submit{padding:0}.jetpack-pagestyles .woocommerce-message.dops-notice .notice-dismiss::before{display:none}.jetpack-pagestyles .woocommerce-message.dops-notice .dops-notice__text>div{max-width:620px}.jetpack-pagestyles .woocommerce-message.dops-notice .dops-notice__text>a{margin-left:15px}.jetpack-pagestyles .woocommerce-message.dops-notice .dops-notice__moved_text{margin-bottom:5px}.jetpack-pagestyles .dops-notice__action.notice-dismiss{height:100%}.jp-inline-expand.dops-card{box-shadow:none;padding:0}.jp-inline-expand .jp-inline-expand-action{font-size:.875rem;cursor:pointer}.jp-inline-expand .jp-inline-expand-action .gridicon{transition:transform 0.15s cubic-bezier(0.175, 0.885, 0.32, 1.275),color 0.5s ease-in;vertical-align:text-bottom;display:inline-block;margin:0 5px}.jp-inline-expand.is-expanded .jp-inline-expand-action .gridicon{transform:rotate(-180deg)}.jp-inline-expand.is-expanded .jp-inline-expand-content{padding:16px 0 0}.form-toggle.is-compact.is-toggling+.form-toggle__label .form-toggle__switch:before,.form-toggle.is-compact.is-toggling+.form-toggle__label .form-toggle__switch:after{right:8px}.form-toggle.is-compact.is-toggling:checked+.form-toggle__label .form-toggle__switch:before,.form-toggle.is-compact.is-toggling:checked+.form-toggle__label .form-toggle__switch:after{right:0}.dops-section-nav-tab__text .gridicon{vertical-align:middle;margin:0 5px 2px 0}.jp-settings-card__configure-link{display:flex;margin-bottom:0}.jp-form-settings-card{margin-bottom:1.5rem;font-size:.875rem}.jp-form-settings-card+.jp-at-a-glance__stats-card{margin-bottom:1.5rem}.jp-form-settings-card .dops-foldable-card .dops-foldable-card__header{color:#444}@media (min-width: 481px){.jp-form-settings-card .dops-foldable-card .dops-foldable-card__header{padding-right:1.5rem}}.jp-form-settings-card .dops-foldable-card .form-toggle__switch{float:right;margin-top:.125rem}.jp-form-settings-card .dops-foldable-card .dops-foldable-card__header-text{font-size:.875rem}.jp-form-settings-card .dops-foldable-card.jp-foldable-settings-disable .dops-foldable-card__header{color:#dadada}@media (min-width: 481px){.jp-form-settings-card .dops-foldable-card .dops-foldable-card__main{max-width:85%}}.jp-form-settings-card .dops-foldable-card .dops-foldable-card__action{left:.625rem}@media (max-width: 480px){.jp-form-settings-card .dops-foldable-card .dops-foldable-card__action{left:.0625rem}}.jp-form-settings-card .dops-foldable-card .jp-support-info{left:-1.3125rem;top:.4375rem}@media (max-width: 480px){.jp-form-settings-card .dops-foldable-card .jp-support-info{left:-1.875rem}}.jp-form-settings-card .dops-foldable-card .jp-form-legend:first-child,.jp-form-settings-card .dops-foldable-card .jp-form-label-wide:first-child{padding-top:.4375rem}@media (min-width: 481px){.jp-form-settings-card .dops-foldable-card__header{padding-top:1.75rem;padding-bottom:1.75rem}}.jp-foldable-settings-standalone .dops-foldable-card__header-text{font-size:.875rem}@media (min-width: 481px){.jp-foldable-settings-standalone .dops-foldable-card__header,.jp-foldable-settings-standalone.dops-card.is-expanded .dops-foldable-card__content{padding-right:1.5rem;padding-left:1.5rem}.jp-foldable-settings-standalone .dops-foldable-card__action{left:.625rem}.jp-foldable-settings-standalone .jp-form-settings-group .jp-support-info{left:.125rem;top:0}}@media (max-width: 480px){.jp-foldable-settings-standalone .jp-form-settings-group .jp-support-info{left:-1.9375rem;top:.375rem}}.jp-banner__no-border{border-right:none !important}.jp-banner__no-border .dops-banner__icon-circle{background:none !important;padding:0 3px 0 0}.jp-banner__no-border svg.gridicon.gridicons-checkmark-circle{width:28px;height:28px;color:#4ab866}.jp-banner__no-border .dops-banner__description{font-size:.875rem;line-height:1.65;color:#537994;margin-top:0}.jp-form-settings-group{position:relative;margin-bottom:0}.jp-form-settings-group p{font-size:.875rem;margin-top:0;margin-bottom:1.5rem}.jp-form-settings-group fieldset p:last-child{margin-bottom:8px}.jp-form-settings-group .form-toggle__label{margin-top:.25rem;margin-bottom:.25rem}.jp-form-settings-group .form-toggle__switch{float:right;margin-top:2px}.jp-form-settings-group .jp-form-setting-explanation{color:#747474;display:block;margin:.3125rem 0 .3125rem .875rem;font-size:.8125rem;font-style:italic;font-weight:400;word-break:break-word}.jp-form-settings-group .jp-form-setting-explanation+.dops-card{margin-top:1rem}.jp-form-settings-group .jp-form-setting-explanation.is-warning{color:#d94f4f}.jp-form-settings-group .jp-form-setting-explanation a{text-decoration:underline}.dops-foldable-card .jp-form-settings-group{padding-bottom:16px}.jp-form-settings-group .dops-card{padding-left:3rem}@media (max-width: 480px){.jp-form-settings-group .jp-support-info{left:1rem;top:1.25rem}}.jp-form-settings-group .jp-support-info+p{margin-top:2px}.jp-form-settings-group .jp-support-info+span{padding-top:2px;display:block}.jp-form-settings-group .form-toggle__switch{float:right;margin-top:2px}.jp-form-settings-group>.dops-card:first-child{margin-bottom:0}.dops-foldable-card .jp-form-settings-group .dops-card{padding:0;box-shadow:none}.jp-apps-card{margin-top:4rem;margin-bottom:0}.jp-apps-card__content{margin-bottom:0}.jp-apps-card__content.dops-card{padding:0}.jp-apps-card__content a:not(.dops-button){font-style:italic}.jp-apps-card__top{padding:3.75rem 0 0;background:#ffffff;text-align:center}.jp-apps-card__top img{max-width:26%;padding-top:10px}.jp-apps-card__description{max-width:80%;margin:0 auto;padding:.625rem 1.5rem 1.5rem;line-height:1.65;color:#000;text-align:center}.jp-apps-card__description .dops-button{margin:8px 0}.jp-apps-card__paragraph{font-size:.9375rem}.jp-apps-card__header{margin-top:0;margin-bottom:.3125rem;font-weight:500}.jp-apps-card__promo_subhead{margin-top:0;font-style:italic}.jp-themes-card{margin-bottom:1.25rem}.jp-dialogue-full__container{box-sizing:border-box;position:absolute;top:0;left:0;bottom:0;right:0;z-index:100;background:rgba(246,246,246,0.95);text-align:center;padding:2rem;height:100%}.jp-dialogue{text-align:center;max-width:37.5rem;margin:0 auto 2rem;overflow:hidden}@media (max-width: 660px){.jp-dialogue{text-align:right}}.jp-dialogue p{font-size:.875rem;color:#747474}.jp-dialogue img{max-width:100%}.jp-dialogue p+img{margin:2rem 0 1rem}.jp-dialogue .dops-card{margin-bottom:0}.jp-dialogue .jp-dialogue-card__below{text-align:right}.jp-dialogue-full__dismiss{cursor:pointer;position:absolute;left:-10px;top:-10px;fill:#a2a2a2;padding:1rem;height:1.5rem;width:1.5rem}.jp-dialogue__title{font-weight:300;text-align:center;font-size:1.5rem;margin-bottom:2rem}.jp-dialogue__note,a.jp-dialogue__note{margin:0;padding:1rem 0 0;font-size:.875rem;clear:both;font-style:italic}.jp-dialogue-full__svg-jupiter{position:absolute;left:0;top:5rem;opacity:.90}.jp-dialogue-full__svg-stars{position:absolute;right:6.25rem;top:6.25rem;opacity:.90}.jp-dialogue__cta-container{padding:.5rem 0 0}.jp-dialogue__cta-container .dops-button{margin:0 .5rem}.jp-upgrade-notice__content .jp-upgrade-notice__enable-module .jp-form-has-child{padding-right:30px}.jp-upgrade-notice__content .jp-upgrade-notice__enable-module .jp-form-has-child .jp-form-fieldset{margin-bottom:0.4rem}.jp-upgrade-notice__enable-module{margin-bottom:calc(1em + 8px)}.jp-upgrade-notice__enable-module .jp-form-settings-group{margin:0px auto;max-width:400px;text-align:right}.jp-upgrade-notice__enable-module .jp-form-has-child{padding:10px;padding-left:30px}.jp-upgrade-notice__enable-module .jp-support-info{top:.9375rem;left:.9375rem}.jp-welcome-new-plan{overflow:initial}.jp-welcome-new-plan__button{margin-top:1.5rem}img.jp-welcome__svg{margin:2.5rem auto 0;max-width:15rem}.jp-at-a-glance{margin-bottom:3rem}.jp-at-a-glance__stats-card{padding:0}.jp-at-a-glance__stats-empty{text-align:center;margin-bottom:0}.jp-at-a-glance__stats-empty p{font-size:.875rem;color:#747474}.jp-at-a-glance__stats-inactive{padding:1rem}@media (min-width: 661px){.jp-at-a-glance__stats-inactive{display:flex;flex-wrap:nowrap;flex-direction:row;align-items:center}}@media (max-width: 660px){.jp-at-a-glance__stats-inactive-icon{display:none}}@media (min-width: 661px){.jp-at-a-glance__stats-inactive-icon{flex-basis:10%}}.jp-at-a-glance__stats-inactive-text{font-size:.875rem;line-height:1.5}@media (max-width: 660px){.jp-at-a-glance__stats-inactive-text{padding:0 0 1rem}}@media (min-width: 661px){.jp-at-a-glance__stats-inactive-text{flex-basis:50%;padding:0 1rem}}.jp-at-a-glance__stats-inactive-button{text-align:right}@media (min-width: 661px){.jp-at-a-glance__stats-inactive-button{flex-basis:40%;text-align:left}}.jp-at-a-glance__stats-chart{padding:1rem;position:relative}.jp-at-a-glance__stats-chart .dops-spinner{position:absolute;top:50%;right:50%}.jp-at-a-glance__stats-bottom{margin:2rem 0 0}@media (max-width: 480px){.jp-at-a-glance__stats-bottom{box-shadow:0 0 0 1px rgba(200,215,225,0.5),0 1px 2px #eee}}.jp-at-a-glance__stats-summary{text-align:center;border-top:1px #f6f6f6 solid}@media (min-width: 661px){.jp-at-a-glance__stats-summary{flex-wrap:nowrap;display:flex;flex-direction:row}}@media (max-width: 660px){.jp-at-a-glance__stats-summary{display:block}}.jp-at-a-glance__stats-summary-today,.jp-at-a-glance__stats-summary-bestday{flex-basis:25%;padding:1rem;box-shadow:0 0 0 1px rgba(200,215,225,0.5),0 1px 2px #eee}@media (max-width: 660px){.jp-at-a-glance__stats-summary-today{margin-top:-.0625rem}}@media (min-width: 661px){.jp-at-a-glance__stats-summary-bestday{margin:0 .0625rem}}@media (max-width: 660px){.jp-at-a-glance__stats-summary-bestday,.jp-at-a-glance__stats-summary-alltime{margin-top:.0625rem}}.jp-at-a-glance__stats-summary-alltime{flex-basis:50%;padding:1rem;box-shadow:0 0 0 1px rgba(200,215,225,0.5),0 1px 2px #eee}@media (min-width: 661px){.jp-at-a-glance__stats-summary-alltime{max-width:40%;display:flex;flex-grow:1;flex-shrink:1}}.jp-at-a-glance__stats-alltime-views,.jp-at-a-glance__stats-alltime-comments{flex-basis:50%}.jp-at-a-glance__stats-cta{padding:1rem;background-color:#fbfbfb}@media (min-width: 661px){.jp-at-a-glance__stats-cta{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center}}@media (max-width: 660px){.jp-at-a-glance__stats-cta{display:block}}@media (min-width: 661px){.jp-at-a-glance__stats-cta-description{flex-basis:30%}}.jp-at-a-glance__stat-details{margin:0}.jp-at-a-glance__stat-number{font-size:1.375rem;font-weight:400;margin:.5rem 0}@media (min-width: 661px){.jp-at-a-glance__stats-cta-buttons{text-align:left;flex-basis:70%}}@media (max-width: 660px){.jp-at-a-glance__stats-cta-buttons{text-align:center}.jp-at-a-glance__stats-cta-buttons .dops-button{width:100%;margin-bottom:.25rem}}.jp-at-a-glance__stats-cta-buttons .dops-button{text-align:center;margin:.25rem}.jp-at-a-glance__stats-views{margin-top:0;margin-bottom:0}.jp-at-a-glance__stats-view{display:inline-block;margin-top:0;margin-bottom:0;margin-right:1rem}.jp-at-a-glance__stats-view:focus{outline:0}@media (max-width: 480px){.jp-at-a-glance__stats-view{margin-right:0;margin-left:1rem}}.jp-at-a-glance__stats-view-link,.jp-at-a-glance__stats-view-link:visited{color:#a2a2a2;text-decoration:underline}.jp-at-a-glance__stats-view-link.is-current,.jp-at-a-glance__stats-view-link:visited.is-current,.jp-at-a-glance__stats-view-link:focus.is-current,.jp-at-a-glance__stats-view-link:visited.is-current,.jp-at-a-glance__stats-view-link:visited:visited.is-current,.jp-at-a-glance__stats-view-link:visited:focus.is-current{color:#23282d;text-decoration:none}.jp-at-a-glance__stats-view-link:focus{outline:0;box-shadow:none}.jp-at-a-glance__item-grid{display:flex}@media (max-width: 660px){.jp-at-a-glance__item-grid{display:block}}.jp-at-a-glance__left,.jp-at-a-glance__right{display:flex;min-width:0}@media (min-width: 661px){.jp-at-a-glance__left,.jp-at-a-glance__right{flex-basis:50%;margin-bottom:1rem}}@media (max-width: 660px){.jp-at-a-glance__left,.jp-at-a-glance__right{margin-bottom:.75rem}}.jp-at-a-glance__left>div,.jp-at-a-glance__left .jp-dash-item,.jp-at-a-glance__right>div,.jp-at-a-glance__right .jp-dash-item{min-width:0;flex-grow:1;display:flex;flex-direction:column}.jp-at-a-glance__left>div,.jp-at-a-glance__right>div{flex-basis:100%}.jp-at-a-glance__left .jp-dash-item .dops-card,.jp-at-a-glance__right .jp-dash-item .dops-card{flex-grow:1}.jp-at-a-glance__left .jp-dash-item .dops-card.is-compact,.jp-at-a-glance__right .jp-dash-item .dops-card.is-compact{flex-grow:0}.jp-at-a-glance__left .jp-dash-item .dops-card.is-compact a.dops-notice__action,.jp-at-a-glance__right .jp-dash-item .dops-card.is-compact a.dops-notice__action{margin-right:0;padding-right:0}@media (max-width: 480px){.jp-at-a-glance__left .jp-dash-item .dops-card.is-compact a.dops-notice__action,.jp-at-a-glance__right .jp-dash-item .dops-card.is-compact a.dops-notice__action{text-transform:none}}.jp-at-a-glance__left .jp-dash-item__card,.jp-at-a-glance__right .jp-dash-item__card{display:flex}.jp-search-config-aag{width:100%}.jp-at-a-glance__left{display:flex}@media (min-width: 661px){.jp-at-a-glance__left{margin-left:1rem}.jp-at-a-glance__left:last-child{flex-basis:calc( 50% - .5rem)}}.dops-chart__tooltip .tip-arrow{display:none}.jp-connection-type .jp-dash-item__card{align-items:flex-start}.jp-connection-settings__info{display:flex}.jp-connection-settings__actions{margin:1em 0 0}.jp-connection-settings__actions a{cursor:pointer}.jp-connection-settings__text{width:70%;margin-right:1rem;word-break:break-word}.jp-connection-settings__info .gridicon{opacity:.6}.jp-connection-settings__info .gridicon,.jp-connection-settings__info .jp-connection-settings__site-icon{background:#c8d7e1;color:#fff;min-width:4rem}.jp-connection-settings__info .jp-connection-settings__gravatar{display:inline-block;min-width:4rem;background:#a2a2a2;border-radius:50%;margin-bottom:0}.jp-connection-settings__username{font-weight:600}.jp-connection-settings__email{color:#a2a2a2;font-size:.8125rem;font-style:italic;font-weight:400}.jp-connection-settings__modal.dops-modal{max-width:450px}.jp-connection-settings__modal-body{margin:0;padding:1.5rem 2rem;font-size:.875rem;color:#2e4453;text-align:center}.jp-connection-settings__modal-body h2{margin:2rem 0 1.5rem;font-size:2rem;font-weight:300;color:#2e4453}.jp-connection-settings__modal-body h4{margin:1rem 1.5rem 0;font-size:1rem;font-weight:400;line-height:1.5em;color:#668eaa}.jp-connection-settings__modal-body p{font-size:.875rem}.jp-connection-settings__modal-body ul{margin:1.5rem 0 2.25rem;color:#537994}.jp-connection-settings__modal-body li{position:relative;display:block;margin:0;padding:1rem 2.75rem 1rem .5rem;border-bottom:1px solid #e1e1e1;text-align:right}.jp-connection-settings__modal-body li:first-of-type{border-top:1px solid #e1e1e1}.jp-connection-settings__modal-body .gridicon{position:absolute;right:1rem;top:1rem;vertical-align:text-bottom;color:#537994}.jp-connection-settings__modal-cancel{margin-left:1em}.jp-connection-settings__modal-more a{color:#0087be;text-decoration:underline}.jp-dash-item__manage-in-wpcom{margin-top:1px;width:100%}.jp-landing__plans.dops-card{padding:0}.jp-landing__plans .dops-button{margin-left:10px}.jp-landing-plans__header{background:#414141}@media (min-width: 661px){.jp-landing-plans__header{padding:2rem 0 0}}@media (max-width: 660px){.jp-landing-plans__header{padding:2rem}}.jp-landing-plans__header-img-container{margin:2rem 0 0;overflow:hidden}@media (min-width: 661px){.jp-landing-plans__header-img-container{display:flex;flex-wrap:nowrap;flex-direction:row;align-items:center}}@media (max-width: 660px){.jp-landing-plans__header-img-container{margin-bottom:0}}.jp-landing-plans__clouds{position:relative;overflow:hidden;padding-top:5rem}.jp-landing-plans__clouds img{position:absolute;bottom:-2px;right:-5%;left:-5%;height:auto;width:110%}@media (max-width: 660px){.jp-landing-plans__clouds{display:none}}.jp-landing-plans__header-col-left{flex-basis:45%}@media (min-width: 661px){.jp-landing-plans__header-col-left{padding-right:2rem}}.jp-landing-plans__header-col-right{flex-basis:55%}@media (min-width: 661px){.jp-landing-plans__header-col-right{padding:0 2rem}}@media (max-width: 660px){.jp-landing-plans__header-col-right{text-align:center}}.jp-landing-plans__header-title,.jp-landing-plans__header-description{line-height:1.5}@media (min-width: 661px){.jp-landing-plans__header-title,.jp-landing-plans__header-description{text-align:center}}.jp-landing-plans__header-title,.jp-landing-plans__header-subtitle{color:#fff;font-weight:400;margin:0}.jp-landing-plans__header-title{font-size:1.25rem}.jp-landing-plans__header-description{font-size:.875rem;margin:0;padding-bottom:1rem}.jp-landing-plans__header-subtitle{font-size:1rem;line-height:1.25}.jp-landing-plans__header-description,.jp-landing-plans__header-text{color:#bbb}.jp-landing-plans__header-text{font-size:.875rem;padding:1.5rem 0;margin:0}.jp-landing-plans__header-btn-container{margin:0}.jp-landing__plan-iconcard-current h3{font-size:1.5em}.jp-landing__plan-features-card{display:flex;flex-wrap:nowrap;flex-grow:1;box-sizing:border-box;max-width:49.5%;background-color:#fff;box-shadow:0 0 0 1px rgba(213,213,213,0.5),0 1px 2px #eee}.is-loading .jp-landing__plan-features-card{width:49.5%}@media (min-width: 661px){.jp-landing__plan-features-card{margin-bottom:1%}}@media (max-width: 660px){.jp-landing__plan-features-card{max-width:100%;margin-bottom:.5rem}}@media (min-width: 481px){.jp-landing__plan-features-card{padding:2rem}}@media (max-width: 480px){.jp-landing__plan-features-card{padding:1rem}}.jp-landing__plan-features-img{width:90px;margin-left:8px;line-height:1}@media (min-width: 961px){.jp-landing__plan-features-img{width:120px;margin-left:18px}}.jp-landing__plan-features-icon{display:block;margin-right:-8px}@media (min-width: 481px){.jp-landing__plan-features-icon{margin-right:-16px}}.jp-landing__plan-features-text{flex:1}.jp-landing__plan-features-title{margin:0}.jp-landing__plan-features{display:flex;flex-wrap:wrap;align-items:stretch;justify-content:space-between;margin-bottom:2rem}@media (max-width: 660px){.jp-landing__plan-features{display:block}}.jp-landing__plan-card{padding:2rem}@media (max-width: 480px){.jp-landing__plan-card{text-align:center}}@media (min-width: 481px){.jp-landing__plan-card{display:flex;align-items:center;flex-wrap:nowrap}}.jp-landing__plan-card .jp-landing__plan-features-title,.jp-landing__plan-card .jp-landing__plan-features-text{padding:0}.jp-landing__plan-card .jp-landing__plan-features-title{margin-bottom:1rem}.jp-landing__plan-card .jp-landing__plan-features-text:last-child{margin-bottom:0}.jp-landing__plan-card-img{float:right;margin-left:2.625rem}@media (max-width: 960px){.jp-landing__plan-card-img{margin-left:1rem}}@media (max-width: 480px){.jp-landing__plan-card-img{width:100%;max-width:100%;text-align:center}}.jp-landing__plan-icon{width:82px;position:relative;right:-3px}@media (min-width: 961px){.jp-landing__plan-icon{width:96px;right:2px}}.jp-landing__plan-card-img.is-placeholder{width:7.5rem;height:5.3125rem}.jp-landing__plan-card-img.is-placeholder+.jp-landing__plan-card-current{width:80%}.jp-landing__plan-features-title.is-placeholder{height:1.5rem;max-width:50%}.jp-landing__plan-features-text.is-placeholder{height:2.75rem;max-width:75%}.jp-landing__plan-features-link{width:100%}@media (min-width: 661px){.jp-landing__plan-features-link{text-align:center}}.plan-features__content{margin:0 -16px 16px;padding-top:20px}.is-section-plans .plan-features__mobile{display:block}@media (min-width: 752px){.is-section-plans .plan-features__mobile{display:none}}.plan-features__notice{margin-bottom:16px}@media (min-width: 1041px){.plan-features__notice{margin-bottom:32px;margin-top:-19px}}.is-section-plans .plan-features__table{display:table}.plan-features__table{font-size:14px;color:#747474;border-spacing:16px 0;margin-top:-16px;display:table;table-layout:fixed;width:100%;text-align:center}@media (min-width: 661px){.plan-features__table{display:table}}@media (max-width: 660px){.plan-features__table{display:none}}@media (max-width: 1040px){.plan-features__table{border-spacing:0;margin:0 15px;width:calc( 100% - 30px)}}.plan-features__row{background:#fff}.plan-features__table-item{border-left:solid 1px #e6e6e6;border-right:solid 1px #e6e6e6;background-color:#fff;position:relative}.plan-features__table-item.is-header{vertical-align:top}.plan-features__table-item.is-personal-plan{border-bottom:solid 2px #f0b849}.plan-features__table-item.is-premium-plan{border-bottom:solid 2px #4ab866}.plan-features__table-item.is-business-plan{border-bottom:solid 2px #855DA6}.plan-features__table-item.is-highlighted{border:1px solid #0087be;background-color:rgba(0,135,190,0.1);position:relative;top:-1px}.plan-features__table-item.is-highlighted.has-partial-border::after{display:none}.plan-features__table-item.is-selected{display:table-cell}.plan-features__table-item.has-partial-border:after{content:'';display:block;height:1px;width:calc( 100% - 24px);border-bottom:1px solid #e6e6e6;position:absolute;bottom:0;margin:0 12px}.plan-features__table-item.has-border-bottom{border-bottom:solid 1px #e6e6e6}.plan-features__table-item.has-border-top{border-top:solid 1px #e6e6e6}.plan-features__table-item.is-placeholder .spinner-line{margin:0;position:absolute;top:-3px;width:100%}.plan-features__table-item.is-bottom-buttons{padding-top:33px;padding-bottom:15px}.plan-features__table-item.is-top-buttons{padding-top:8px;padding-bottom:16px}.plan-features__header{position:relative;padding:15px 15px 0 15px;background-color:#fff}@media (max-width: 960px){.plan-features__header{padding:12px 12px 0 12px}}.plan-features__header-title{font-size:22px;line-height:0.7;font-weight:normal;margin:0}@media (max-width: 960px){.plan-features__header-title{font-size:20px}}.info-popover.plan-features__header-tip-info{position:relative;top:4px;right:3px;margin-top:-10px;margin-bottom:-10px;display:inline-block}.plan-features__description{margin:0;padding:12px 0}.plan-features__item{margin:0 12px;padding:12px 0;font-size:13px;color:#414141;text-align:center}@media (max-width: 960px){.plan-features__item{font-size:12px}}@media (max-width: 1040px){.plan-features__item{margin:0 12px}}.plan-features__item-description{display:inline-block;margin-right:10px;color:#a2a2a2}.plan-price{padding-top:15px;padding-bottom:15px}.plan-price__yearly{color:#414141}@media (min-width: 661px){.plans-mobile-notice{display:none}}.plans-mobile-notice .dops-button:first-of-type{margin-left:6px;margin-bottom:6px}.plans-mobile-notice.dops-card h2{margin-top:0}.dops-search__input[type="search"]{width:100%}.jp-settings-container .jp-no-results{display:none;font-size:.875rem;line-height:1.5}.jp-settings-container .jp-no-results:last-of-type{display:inherit}@media (max-width: 480px){.dops-search.is-expanded-to-container{height:46px}}.dops-card.jp-settings-description{margin:24px 0 8px;padding:0;background:none;box-shadow:none}.jp-form-google-label-unverified .dops-button{margin:0 15px}@media (max-width: 660px){.jp-form-google-label-unverified .dops-button{margin-top:10px;width:40%}}.jp-form-google-label-unverified .jp-form-google-separator{padding:.5rem 0}@media (max-width: 660px){.jp-form-google-label-unverified .jp-form-google-separator{margin:25px 0 0;display:inline-block}}.jp-form-input-with-prefix-bottom-message{top:-1.25rem;position:relative;line-height:2em;margin-top:5px}.jp-form-site-verification-verified{background-color:#fff;color:#00BE28;box-sizing:border-box;margin:0;padding:7px 14px;font-size:16px;line-height:1.5;border:1px solid #c8d7e1;width:100%;display:flex;flex-direction:row;justify-content:left;align-items:center}.jp-form-site-verification-verified .gridicon:first-child{margin-left:5px}@media (min-width: 661px){.jp-form-site-verification-verified{border-right:0}}@media (max-width: 660px){.jp-form-site-verification-verified{border-top:0}}.jp-form-site-verification-edit-button{margin-right:10px;overflow:visible}@media (max-width: 660px){.jp-form-site-verification-edit-button{margin-right:0;margin-left:5px;margin-top:5px}}.jp-form-site-verification-buttons{flex:0 1 20em;display:inline-flex}.jp-form-site-verification-verified-note{font-size:0.7em}.jp-form-google-label-unverified-actions{display:flex;align-content:center}.jp-form-google-label-unverified-actions .dops-button{margin-right:10px;margin-left:10px;padding-right:7px;padding-left:7px}
-
-/*# sourceMappingURL=style.min.rtl.css.map */
diff --git a/plugins/jetpack/_inc/build/tiled-gallery/tiled-gallery/tiled-gallery.min.js b/plugins/jetpack/_inc/build/tiled-gallery/tiled-gallery/tiled-gallery.min.js
deleted file mode 100644
index d914be05..00000000
--- a/plugins/jetpack/_inc/build/tiled-gallery/tiled-gallery/tiled-gallery.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* jshint onevar:false, smarttabs:true */
-!function(e){function i(){this.galleries=[],this.findAndSetupNewGalleries()}function t(e){this.gallery=e,this.addCaptionEvents(),this.resize(),this.gallery.removeClass("tiled-gallery-unresized")}i.prototype.findAndSetupNewGalleries=function(){var i=this;e(".tiled-gallery.tiled-gallery-unresized").each(function(){i.galleries.push(new t(e(this)))})},i.prototype.resizeAll=function(){e.each(this.galleries,function(e,i){i.resize()})},t.prototype.resizeableElementsSelector=".gallery-row, .gallery-group, .tiled-gallery-item img",t.prototype.addCaptionEvents=function(){this.gallery.find(".tiled-gallery-caption").hide(),this.gallery.find(".tiled-gallery-item").hover(function(){e(this).find(".tiled-gallery-caption").stop(!0,!0).slideDown("fast")},function(){e(this).find(".tiled-gallery-caption").stop(!0,!0).slideUp("fast")})},t.prototype.getExtraDimension=function(e,i,t){if("horizontal"===t){var n="border"===i?"borderLeftWidth":i+"Left",r="border"===i?"borderRightWidth":i+"Right";return(parseInt(e.css(n),10)||0)+(parseInt(e.css(r),10)||0)}if("vertical"===t){var o="border"===i?"borderTopWidth":i+"Top",a="border"===i?"borderBottomWidth":i+"Bottom";return(parseInt(e.css(o),10)||0)+(parseInt(e.css(a),10)||0)}return 0},t.prototype.resize=function(){var i=this.gallery.data("original-width"),t=this.gallery.parent().width(),n=Math.min(1,t/i),r=this;this.gallery.find(this.resizeableElementsSelector).each(function(){var i=e(this),t=r.getExtraDimension(i,"margin","horizontal"),o=r.getExtraDimension(i,"margin","vertical"),a=r.getExtraDimension(i,"padding","horizontal"),l=r.getExtraDimension(i,"padding","vertical"),s=r.getExtraDimension(i,"border","horizontal"),d=r.getExtraDimension(i,"border","vertical"),c=i.data("original-width")+a+s+t,h=i.data("original-height")+l+d+o;i.width(Math.floor(n*c)-t).height(Math.floor(n*h)-o)})};var n=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame;e(document).ready(function(){var t=new i;e("body").on("post-load",function(e,i){"string"==typeof i&&"resize"===i?t.resizeAll():t.findAndSetupNewGalleries()}),e(document).on("page-rendered.wpcom-newdash",function(){t.findAndSetupNewGalleries()}),window.chrome&&n?function(i){var t=!1,r=null;function o(){i.resizeAll(),t&&n(o)}e(window).resize(function(){clearTimeout(r),t||n(o),t=!0,r=setTimeout(function(){t=!1},15)})}(t):function(i){e(window).resize(function(){i.resizeAll()})}(t),"undefined"!=typeof wp&&wp.customize&&wp.customize.selectiveRefresh&&wp.customize.selectiveRefresh.bind("partial-content-rendered",function(e){wp.isJetpackWidgetPlaced(e,"gallery")&&t.findAndSetupNewGalleries()})})}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/twitter-timeline.min.js b/plugins/jetpack/_inc/build/twitter-timeline.min.js
deleted file mode 100644
index 33d2daf8..00000000
--- a/plugins/jetpack/_inc/build/twitter-timeline.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* jshint ignore:start */
-!function(t,e,r){var n,s=t.getElementsByTagName(e)[0],i=/^http:/.test(t.location)?"http":"https";t.getElementById(r)||((n=t.createElement(e)).id=r,n.src=i+"://platform.twitter.com/widgets.js",s.parentNode.insertBefore(n,s))}(document,"script","twitter-wjs"); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/videopress/js/editor-view.min.js b/plugins/jetpack/_inc/build/videopress/js/editor-view.min.js
deleted file mode 100644
index 75f565fc..00000000
--- a/plugins/jetpack/_inc/build/videopress/js/editor-view.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* global tinyMCE, vpEditorView */
-!function(e,t,a){t.mce=t.mce||{},void 0!==t.mce.views&&(t.mce.videopress_wp_view_renderer={shortcode_string:"videopress",shortcode_data:{},defaults:{w:"",at:"",permalink:!0,hd:!1,loop:!1,freedom:!1,autoplay:!1,flashonly:!1},coerce:t.media.coerce,template:t.template("videopress_iframe_vnext"),getContent:function(){var e,t,o,s="for="+encodeURIComponent(a.home_url_host),i=this.shortcode.attrs.named;for(t in i)switch(t){case"at":parseInt(i[t],10)&&(s+="&"+t+"="+parseInt(i[t],10));break;case"permalink":"false"===i[t]&&(s+="&"+t+"=0");break;case"hd":case"loop":case"autoplay":"true"===i[t]&&(s+="&"+t+"=1")}return e={width:a.content_width,height:.5625*a.content_width,guid:this.shortcode.attrs.numeric[0],urlargs:s},void 0!==i.w&&(o=parseInt(i.w,10))>=a.min_content_width&&o<a.content_width&&(e.width=o,e.height=parseInt(.5625*o,10)),e.ratio=e.height/e.width*100,this.template(e)},edit:function(o){var s=t.shortcode.next(this.shortcode_string,o),i=s.shortcode.attrs.named,l=tinyMCE.activeEditor,n=this,d=tinyMCE.ui.FormItem.prototype.renderHtml;tinyMCE.ui.TextBox.prototype.renderHtml=function(){var e,t,a=this.settings,o=document.createElement(a.multiline?"textarea":"input"),s=["rows","spellcheck","maxLength","size","readonly","min","max","step","list","pattern","placeholder","required","multiple"];for(e=0;e<s.length;e++)void 0!==a[t=s[e]]&&o.setAttribute(t,a[t]);return a.multiline?o.innerText=this.state.get("value"):(o.setAttribute("type",a.subtype?a.subtype:"text"),o.setAttribute("value",this.state.get("value"))),o.id=this._id,o.className=this.classes,o.setAttribute("hidefocus",1),this.disabled()&&(o.disabled=!0),o.outerHTML},tinyMCE.ui.FormItem.prototype.renderHtml=function(){return _.each(a.modal_labels,function(e,t){e===this.settings.items.text&&this.classes.add("videopress-field-"+t)},this),_.contains([a.modal_labels.hd,a.modal_labels.permalink,a.modal_labels.autoplay,a.modal_labels.loop,a.modal_labels.freedom,a.modal_labels.flashonly],this.settings.items.text)&&this.classes.add("videopress-checkbox"),d.call(this)},_.each(this.defaults,function(e,t){i[t]=this.coerce(i,t)},this),l.windowManager.open({title:a.modal_labels.title,id:"videopress-shortcode-settings-modal",width:520,height:240,body:[{type:"textbox",disabled:!0,name:"guid",label:a.modal_labels.guid,value:s.shortcode.attrs.numeric[0]},{type:"textbox",subtype:"number",min:a.min_content_width,name:"w",label:a.modal_labels.w,value:i.w},{type:"textbox",subtype:"number",min:0,name:"at",label:a.modal_labels.at,value:i.at},{type:"checkbox",name:"hd",label:a.modal_labels.hd,checked:i.hd},{type:"checkbox",name:"permalink",label:a.modal_labels.permalink,checked:i.permalink},{type:"checkbox",name:"autoplay",label:a.modal_labels.autoplay,checked:i.autoplay},{type:"checkbox",name:"loop",label:a.modal_labels.loop,checked:i.loop},{type:"checkbox",name:"freedom",label:a.modal_labels.freedom,checked:i.freedom},{type:"checkbox",name:"flashonly",label:a.modal_labels.flashonly,checked:i.flashonly}],onsubmit:function(e){var a={tag:n.shortcode_string,type:"single",attrs:{named:_.pick(e.data,_.keys(n.defaults)),numeric:[e.data.guid]}};"0"===a.attrs.named.at&&(a.attrs.named.at=""),_.each(n.defaults,function(e,t){a.attrs.named[t]=this.coerce(a.attrs.named,t),e===a.attrs.named[t]&&delete a.attrs.named[t]},n),l.insertContent(t.shortcode.string(a))},onopen:function(t){var o="mce-videopress-field-";_.each(["w","at"],function(e){t.target.$el.find("."+o+e+" .mce-container-body").append('<span class="'+o+"unit "+o+"unit-"+e+'">'+a.modal_labels[e+"_unit"])}),e("body").addClass("modal-open")},onclose:function(){e("body").removeClass("modal-open")}}),tinyMCE.ui.FormItem.prototype.renderHtml=d}},t.mce.views.register("videopress",t.mce.videopress_wp_view_renderer),t.mce.wpvideo_wp_view_renderer=_.extend({},t.mce.videopress_wp_view_renderer,{shortcode_string:"wpvideo"}),t.mce.views.register("wpvideo",t.mce.wpvideo_wp_view_renderer))}(jQuery,wp,vpEditorView); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/videopress/js/media-video-widget-extensions.min.js b/plugins/jetpack/_inc/build/videopress/js/media-video-widget-extensions.min.js
deleted file mode 100644
index 46446bc5..00000000
--- a/plugins/jetpack/_inc/build/videopress/js/media-video-widget-extensions.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-window.wp=window.wp||{},function(e){var o,d;e.mediaWidgets&&(e.mediaWidgets.controlConstructors.media_video.prototype.mapMediaToModelProps=(d=e.mediaWidgets.controlConstructors.media_video.prototype.mapMediaToModelProps,function(e){var o,i,t;return i=d.call(this,e),o=_.extend({},i),e.videopress&&e.videopress.guid&&(t=e.videopress.guid),!t&&e.videopress_guid&&e.videopress_guid.length&&(t=e.videopress_guid[0]),t&&(o=_.extend({},i,{url:"https://videopress.com/v/"+t,attachment_id:0})),o}),e.mediaWidgets.controlConstructors.media_video.prototype.isHostedVideo=(o=e.mediaWidgets.controlConstructors.media_video.prototype.isHostedVideo,function(e){var d=document.createElement("a");return d.href=e,"videopress.com"===d.hostname||o.call(this,e)}))}(window.wp); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/videopress/js/videopress-plupload.min.js b/plugins/jetpack/_inc/build/videopress/js/videopress-plupload.min.js
deleted file mode 100644
index 3e605486..00000000
--- a/plugins/jetpack/_inc/build/videopress/js/videopress-plupload.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* global pluploadL10n, plupload, _wpPluploadSettings, JSON */
-window.wp=window.wp||{},function(e,t){var r,i;"undefined"!=typeof _wpPluploadSettings&&(r=function(o){var a,n,d=this,p=-1!==navigator.userAgent.indexOf("Trident/")||-1!==navigator.userAgent.indexOf("MSIE "),s={container:"container",browser:"browse_button",dropzone:"drop_element"};if(this.supports={upload:r.browser.supported},this.supported=this.supports.upload,this.supported){for(a in this.plupload=t.extend(!0,{multipart_params:{}},r.defaults),this.container=document.body,t.extend(!0,this,o),this)t.isFunction(this[a])&&(this[a]=t.proxy(this[a],this));for(a in s)this[a]&&(this[a]=t(this[a]).first(),this[a].length?(this[a].prop("id")||this[a].prop("id","__wp-uploader-id-"+r.uuid++),this.plupload[s[a]]=this[a].prop("id")):delete this[a]);(this.browser&&this.browser.length||this.dropzone&&this.dropzone.length)&&(p||"flash"!==plupload.predictRuntime(this.plupload)||this.plupload.required_features&&this.plupload.required_features.hasOwnProperty("send_binary_string")||(this.plupload.required_features=this.plupload.required_features||{},this.plupload.required_features.send_binary_string=!0),this.uploader=new plupload.Uploader(this.plupload),delete this.plupload,this.param(this.params||{}),delete this.params,void 0!==e.VideoPress?i=e.VideoPress:window.console&&window.console.error("The VideoPress object was not loaded. Errors may occur."),n=function(e,t,i){i.attachment&&i.attachment.destroy(),r.errors.unshift({message:e||pluploadL10n.default_error,data:t,file:i}),d.error(e,t,i)},this.uploader.bind("init",function(e){var i,o,a,n=d.dropzone;if(a=d.supports.dragdrop=e.features.dragdrop&&!r.browser.mobile,n){if(n.toggleClass("supports-drag-drop",!!a),!a)return n.unbind(".wp-uploader");n.bind("dragover.wp-uploader",function(){i&&clearTimeout(i),o||(n.trigger("dropzone:enter").addClass("drag-over"),o=!0)}),n.bind("dragleave.wp-uploader, drop.wp-uploader",function(){i=setTimeout(function(){o=!1,n.trigger("dropzone:leave").removeClass("drag-over")},0)}),d.ready=!0,t(d).trigger("uploader:ready")}}),this.uploader.bind("postinit",function(e){e.refresh(),d.init()}),this.uploader.init(),this.browser?this.browser.on("mouseenter",this.refresh):(this.uploader.disableBrowse(!0),t("#"+this.uploader.id+"_html5_container").hide()),this.uploader.bind("FilesAdded",function(e,t){_.each(t,function(e){var t,i;plupload.FAILED!==e.status&&(t=_.extend({file:e,uploading:!0,date:new Date,filename:e.name,menuOrder:0,uploadedTo:wp.media.model.settings.post.id},_.pick(e,"loaded","size","percent")),(i=/(?:jpe?g|png|gif)$/i.exec(e.name))&&(t.type="image",t.subtype="jpg"===i[0]?"jpeg":i[0]),e.attachment=wp.media.model.Attachment.create(t),r.queue.add(e.attachment),d.added(e.attachment))}),e.refresh(),e.start()}),this.uploader.bind("UploadProgress",function(e,t){t.attachment.set(_.pick(t,"loaded","percent")),d.progress(t.attachment)}),this.uploader.bind("FileUploaded",function(e,t,o){try{o=JSON.parse(o.response)}catch(e){return n(pluploadL10n.default_error,e,t)}o=void 0!==o.media?i.handleRestApiResponse(o,t):i.handleStandardResponse(o,t),_.each(["file","loaded","size","percent"],function(e){t.attachment.unset(e)}),t.attachment.set(_.extend(o.data,{uploading:!1})),wp.media.model.Attachment.get(o.data.id,t.attachment),r.queue.all(function(e){return!e.get("uploading")})&&(i&&i.resetToOriginalOptions(e),r.queue.reset()),d.success(t.attachment)}),this.uploader.bind("Error",function(e,t){var o,a=pluploadL10n.default_error;for(o in r.errorMap)if(t.code===plupload[o]){a=r.errorMap[o],_.isFunction(a)&&(a=a(t.file,t));break}n(a,t,t.file),i&&i.resetToOriginalOptions(e),e.refresh()}),this.uploader.bind("UploadComplete",function(e){i&&i.resetToOriginalOptions(e)}),this.uploader.bind("BeforeUpload",function(e,t){void 0!==t.videopress&&(i.originalOptions.url=e.getOption("url"),i.originalOptions.multipart_params=e.getOption("multipart_params"),i.originalOptions.file_data_name=e.getOption("file_data_name"),e.setOption("file_data_name","media[]"),e.setOption("url",t.videopress.upload_action_url),e.setOption("headers",{Authorization:'X_UPLOAD_TOKEN token="'+t.videopress.upload_token+'" blog_id="'+t.videopress.upload_blog_id+'"'}))}))}},t.extend(r,_wpPluploadSettings),r.uuid=0,r.errorMap={FAILED:pluploadL10n.upload_failed,FILE_EXTENSION_ERROR:pluploadL10n.invalid_filetype,IMAGE_FORMAT_ERROR:pluploadL10n.not_an_image,IMAGE_MEMORY_ERROR:pluploadL10n.image_memory_exceeded,IMAGE_DIMENSIONS_ERROR:pluploadL10n.image_dimensions_exceeded,GENERIC_ERROR:pluploadL10n.upload_failed,IO_ERROR:pluploadL10n.io_error,HTTP_ERROR:pluploadL10n.http_error,SECURITY_ERROR:pluploadL10n.security_error,FILE_SIZE_ERROR:function(e){return pluploadL10n.file_exceeds_size_limit.replace("%s",e.name)}},t.extend(r.prototype,{param:function(e,r){if(1===arguments.length&&"string"==typeof e)return this.uploader.settings.multipart_params[e];arguments.length>1?this.uploader.settings.multipart_params[e]=r:t.extend(this.uploader.settings.multipart_params,e)},init:function(){},error:function(){},success:function(){},added:function(){},progress:function(){},complete:function(){},refresh:function(){var e,r,i,o;if(this.browser){for(e=this.browser[0];e;){if(e===document.body){r=!0;break}e=e.parentNode}r||(o="wp-uploader-browser-"+this.uploader.id,(i=t("#"+o)).length||(i=t('<div class="wp-uploader-browser" />').css({position:"fixed",top:"-1000px",left:"-1000px",height:0,width:0}).attr("id","wp-uploader-browser-"+this.uploader.id).appendTo("body")),i.append(this.browser))}this.uploader.refresh()}}),r.queue=new wp.media.model.Attachments([],{query:!1}),r.errors=new Backbone.Collection,e.Uploader=r)}(wp,jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/videopress/js/videopress-uploader.min.js b/plugins/jetpack/_inc/build/videopress/js/videopress-uploader.min.js
deleted file mode 100644
index 5677cd3f..00000000
--- a/plugins/jetpack/_inc/build/videopress/js/videopress-uploader.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* globals plupload, pluploadL10n, error */
-window.wp=window.wp||{},function(e){var i={originalOptions:{},handleStandardResponse:function(e,i){return!_.isObject(e)||_.isUndefined(e.success)?error(pluploadL10n.default_error,null,i):e.success?e:error(e.data&&e.data.message,e.data,i)},handleRestApiResponse:function(e,i){if(1!==e.media.length)return error(pluploadL10n.default_error,null,i);var t=e.media[0],a=t.mime_type.split("/"),o={alt:"",author:t.author_ID||0,authorName:"",caption:"",compat:{item:"",meta:""},date:t.date||"",dateFormatted:t.date||"",description:t.description||"",editLink:"",filename:t.file||"",filesizeHumanReadable:"",filesizeInBytes:"",height:t.height,icon:t.icon||"",id:t.ID||"",link:t.URL||"",menuOrder:0,meta:!1,mime:t.mime_type||"",modified:0,name:"",nonces:{update:"",delete:"",edit:""},orientation:"",sizes:void 0,status:"",subtype:a[1]||"",title:t.title||"",type:a[0]||"",uploadedTo:1,uploadedToLink:"",uploadedToTitle:"",url:t.URL||"",width:t.width,success:"",videopress:{guid:t.videopress_guid||null,processing_done:t.videopress_processing_done||!1}};return e.data=o,e},resetToOriginalOptions:function(e){void 0!==i.originalOptions.url&&(e.setOption("url",i.originalOptions.url),delete i.originalOptions.url),void 0!==i.originalOptions.multipart_params&&(e.setOption("multipart_params",i.originalOptions.multipart_params),delete i.originalOptions.multipart_params),void 0!==i.originalOptions.file_data_name&&(e.setOption("file_data_name",i.originalOptions.file_data_name),delete i.originalOptions.file_data_name)}};if(void 0!==e.Uploader){var t=e.media;plupload.VIDEOPRESS_TOKEN_FAILURE="VP_TOKEN_FAILURE",plupload.addFileFilter("videopress_check_uploads",function(e,i,a){var o=i.type.split("/"),n=this;"video"===o[0]?t.ajax("videopress-get-upload-token",{async:!1,data:{filename:i.name}}).done(function(e){i.videopress=e,a(!0)}).fail(function(e){n.trigger("Error",{code:plupload.VIDEOPRESS_TOKEN_FAILURE,message:plupload.translate("Could not get the VideoPress token needed for uploading"),file:i,response:e}),a(!1)}):void 0!==i.size&&e&&i.size>e?(this.trigger("Error",{code:plupload.FILE_SIZE_ERROR,message:plupload.translate("File size error."),file:i}),a(!1)):a(!0)})}e.VideoPress=i}(window.wp); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/widget-visibility/widget-conditions/widget-conditions.min.js b/plugins/jetpack/_inc/build/widget-visibility/widget-conditions/widget-conditions.min.js
deleted file mode 100644
index 89d2f543..00000000
--- a/plugins/jetpack/_inc/build/widget-visibility/widget-conditions/widget-conditions.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* jshint onevar: false, smarttabs: true */
-/* global isRtl */
-/* global widget_conditions_parent_pages */
-/* global widget_conditions_data */
-/* global jQuery */
-jQuery(function(i){var t=i("div#widgets-right");function n(t){var n,e;i("body").hasClass("wp-customizer")?t.find(".widget-inside").css("top",0):t.hasClass("expanded")?(t.attr("style")&&t.data("original-style",t.attr("style")),(n=t.width())<400&&(e=400-n,isRtl?t.css("position","relative").css("right","-"+e+"px").css("width","400px"):t.css("position","relative").css("left","-"+e+"px").css("width","400px"))):t.data("original-style")?t.attr("style",t.data("original-style")).data("original-style",null):t.removeAttr("style")}function e(i){var t=i.find("a.display-options").first();t.insertBefore(i.find("input.widget-control-save")),t.parent().removeClass("widget-control-noform").find(".spinner").remove().css("float","left").prependTo(t.parent())}function o(t){var n,e,o,s,a,c,l,r,h,p,g,u,f=t.find(".conditions-rule-minor").html(""),v=t.data("rule-major");if(v&&"post_type"!==v){for(n=t.data("rule-minor"),e=t.data("rule-has-children"),s=0,r=(o=widget_conditions_data[v]).length;s<r;s++)if(c=o[s][0],"object"==typeof(l=o[s][1])){for(u=i("<optgroup/>").attr("label",c),a=0,h=l.length;a<h;a++)p=o[s][1][a][0],g=o[s][1][a][1],u.append(i("<option/>").val(p).text(d(g.replace(/&nbsp;/g," "))));f.append(u)}else f.append(i("<option/>").val(c).text(d(l.replace(/&nbsp;/g," "))));f.removeAttr("disabled"),f.val(n),"page"===v&&n in widget_conditions_parent_pages?(f.siblings("span.conditions-rule-has-children").show(),e&&f.siblings("span.conditions-rule-has-children").find('input[type="checkbox"]').attr("checked","checked")):f.siblings("span.conditions-rule-has-children").hide().find('input[type="checkbox"]').removeAttr("checked")}else f.attr("disabled","disabled")}function s(t){var n=0;t.find("span.conditions-rule-has-children").find('input[type="checkbox"]').each(function(){i(this).attr("name","conditions[page_children]["+n+"]"),n++})}function d(i){var t=document.createElement("textarea");return t.innerHTML=i,t.value}t.length&&i(t).find(".widget-control-actions").length||(t=i("form#customize-controls")),i(".widget").each(function(){e(i(this))}),i(document).on("widget-added",function(i,t){0===t.find("div.widget-control-actions a.display-options").length&&e(t)}),t.on("click.widgetconditions","a.add-condition",function(t){var n=i(this).closest("div.condition"),e=n.clone().data("rule-major","").data("rule-minor","").data("has-children","").insertAfter(n);t.preventDefault(),e.find("select.conditions-rule-major").val(""),e.find("select.conditions-rule-minor").html("").attr("disabled"),e.find("span.conditions-rule-has-children").hide().find('input[type="checkbox"]').removeAttr("checked"),s(e.closest(".conditions"))}),t.on("click.widgetconditions","a.display-options",function(t){var e=i(this).closest("div.widget");t.preventDefault(),e.find("div.widget-conditional").toggleClass("widget-conditional-hide"),i(this).toggleClass("active"),e.toggleClass("expanded"),n(e),i(this).hasClass("active")?(e.find("input[name=widget-conditions-visible]").val("1"),e.find(".condition").each(function(){o(i(this))})):e.find("input[name=widget-conditions-visible]").val("0")}),t.on("click.widgetconditions","a.delete-condition",function(t){var n=i(this).closest("div.condition");t.preventDefault(),n.is(":first-child")&&n.is(":last-child")?(i(this).closest("div.widget").find("a.display-options").click(),n.find("select.conditions-rule-major").val("").change()):(n.find("select.conditions-rule-major").change(),n.detach()),s(n.closest(".conditions"))}),t.on("click.widgetconditions","div.widget-top",function(){var t=i(this).closest("div.widget"),e=t.find("a.display-options");e.hasClass("active")&&e.attr("opened","true"),e.attr("opened")&&(e.removeAttr("opened"),t.toggleClass("expanded"),n(t))}),t.on("change.widgetconditions","input.conditions-match-all",function(){i(this).parents(".widget-conditional").toggleClass("conjunction").toggleClass("intersection")}),i(document).on("change.widgetconditions","select.conditions-rule-major",function(){var t=i(this),n=t.siblings("select.conditions-rule-minor:first"),e=t.siblings("span.conditions-rule-has-children"),s=n.closest(".condition");s.data("rule-minor","").data("rule-major",t.val()),t.val()?o(s):(t.siblings("select.conditions-rule-minor").attr("disabled","disabled").html(""),e.hide().find('input[type="checkbox"]').removeAttr("checked"))}),i(document).on("change.widgetconditions","select.conditions-rule-minor",function(){var t=i(this),n=t.siblings("select.conditions-rule-major"),e=t.siblings("span.conditions-rule-has-children");t.closest(".condition").data("rule-minor",t.val()),"page"===n.val()&&t.val()in widget_conditions_parent_pages?e.show():e.hide().find('input[type="checkbox"]').removeAttr("checked")}),i(document).on("widget-updated widget-synced",function(t,n){n.find(".condition").each(function(){o(i(this))})})}); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/widgets/contact-info/contact-info-admin.min.js b/plugins/jetpack/_inc/build/widgets/contact-info/contact-info-admin.min.js
deleted file mode 100644
index 2ed8f74d..00000000
--- a/plugins/jetpack/_inc/build/widgets/contact-info/contact-info-admin.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-!function(n){n(document).on("change",".jp-contact-info-showmap",function(){var o=n(this),c=o.is(":checked");o.closest(".widget").find(".jp-contact-info-apikey").toggle(c)})}(window.jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/widgets/customizer-utils.min.js b/plugins/jetpack/_inc/build/widgets/customizer-utils.min.js
deleted file mode 100644
index d16964d1..00000000
--- a/plugins/jetpack/_inc/build/widgets/customizer-utils.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* global wp, gapi, FB, twttr, PaypalExpressCheckout */
-wp.customizerHasPartialWidgetRefresh=function(){return"object"==typeof wp&&"function"==typeof wp.customize&&"object"==typeof wp.customize.selectiveRefresh&&"object"==typeof wp.customize.widgetsPreview&&"function"==typeof wp.customize.widgetsPreview.WidgetPartial},wp.isJetpackWidgetPlaced=function(e,t){return e.partial.widgetId&&0===e.partial.widgetId.indexOf(t)},function(e){e(document).ready(function(){wp&&wp.customize&&wp.customizerHasPartialWidgetRefresh()&&(wp.customize.selectiveRefresh.bind("partial-content-rendered",function(t){if(t.container)if(wp.isJetpackWidgetPlaced(t,"googleplus-badge")&&"object"==typeof gapi&&gapi.person&&"function"==typeof gapi.person.go)gapi.person.go(t.container[0]);else if(wp.isJetpackWidgetPlaced(t,"facebook-likebox")&&"object"==typeof FB&&"object"==typeof FB.XFBML&&"function"==typeof FB.XFBML.parse)FB.XFBML.parse(t.container[0],function(){var i=e(t.container[0]).find(".fb_iframe_widget"),a=i.data("width"),o=i.data("height");i.find("span").css({width:a,height:o}),setTimeout(function(){i.find("iframe").css({width:a,height:o,position:"relative"})},1)});else if(wp.isJetpackWidgetPlaced(t,"twitter_timeline")&&"object"==typeof twttr&&"object"==typeof twttr.widgets&&"function"==typeof twttr.widgets.load)twttr.widgets.load(t.container[0]);else if(wp.isJetpackWidgetPlaced(t,"eu_cookie_law_widget"))e("#eu-cookie-law").hasClass("top")?e(".widget_eu_cookie_law_widget").addClass("top"):e(".widget_eu_cookie_law_widget").removeClass("top"),t.container.fadeIn();else if(wp.isJetpackWidgetPlaced(t,"jetpack_simple_payments_widget"))try{var i=e(".jetpack-simple-payments-button",t.container).attr("id").replace("_button","");PaypalExpressCheckout.renderButton(null,null,i,null)}catch(e){}}),wp.customize.selectiveRefresh.bind("partial-content-moved",function(e){e.container&&(wp.isJetpackWidgetPlaced(e,"twitter_timeline")&&e.container.find("iframe.twitter-timeline:not([src]):first").length?e.partial.refresh():wp.isJetpackWidgetPlaced(e,"jetpack_simple_payments_widget")&&e.partial.refresh())}))})}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/widgets/eu-cookie-law/eu-cookie-law-admin.min.js b/plugins/jetpack/_inc/build/widgets/eu-cookie-law/eu-cookie-law-admin.min.js
deleted file mode 100644
index 654d256c..00000000
--- a/plugins/jetpack/_inc/build/widgets/eu-cookie-law/eu-cookie-law-admin.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-!function(i){var e=i(document);e.on("ready",function(){var o=function(e,o){var c=i(o||this).closest(".eu-cookie-law-widget-policy-url");c.find('input[type="radio"][value="default"]').is(":checked")?(c.find(".notice.default-policy").css("display","block"),c.find(".notice.custom-policy").hide()):(c.find(".notice.default-policy").hide(),c.find(".notice.custom-policy").css("display","block"))};e.on("click",'.eu-cookie-law-widget-policy-url input[type="radio"]',o),e.on("widget-updated widget-added",function(e,c){var d=i(c).attr("id");-1!==d.indexOf("eu_cookie_law_widget")&&o(0,i("#"+d+" .eu-cookie-law-widget-policy-url"))}),i(".eu-cookie-law-widget-policy-url").each(o)})}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/widgets/eu-cookie-law/eu-cookie-law.min.js b/plugins/jetpack/_inc/build/widgets/eu-cookie-law/eu-cookie-law.min.js
deleted file mode 100644
index 2b2d0ee1..00000000
--- a/plugins/jetpack/_inc/build/widgets/eu-cookie-law/eu-cookie-law.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-!function(e){var o,s,a=document.cookie.replace(/(?:(?:^|.*;\s*)eucookielaw\s*\=\s*([^;]*).*$)|^.*$/,"$1"),i=e("#eu-cookie-law");if(i.hasClass("top")&&e(".widget_eu_cookie_law_widget").addClass("top"),i.hasClass("ads-active")){var t=document.cookie.replace(/(?:(?:^|.*;\s*)personalized-ads-consent\s*\=\s*([^;]*).*$)|^.*$/,"$1");""!==a&&""!==t&&i.remove()}else""!==a&&i.remove();e(".widget_eu_cookie_law_widget").appendTo("body").fadeIn(),i.find("form").on("submit",d),i.hasClass("hide-on-scroll")?(o=e(window).scrollTop(),s=function(){Math.abs(e(window).scrollTop()-o)>50&&d()},e(window).on("scroll",s)):i.hasClass("hide-on-time")&&setTimeout(d,1e3*i.data("hide-timeout"));var n=!1;function d(o){if(!n){n=!0,o&&o.preventDefault&&o.preventDefault(),i.hasClass("hide-on-scroll")&&e(window).off("scroll",s);var a=new Date;a.setTime(a.getTime()+24*i.data("consent-expiration")*60*60*1e3),document.cookie="eucookielaw="+a.getTime()+";path=/;expires="+a.toGMTString(),i.hasClass("ads-active")&&i.hasClass("hide-on-button")&&(document.cookie="personalized-ads-consent="+a.getTime()+";path=/;expires="+a.toGMTString()),i.fadeOut(400,function(){i.remove()})}}}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/widgets/gallery/js/admin.min.js b/plugins/jetpack/_inc/build/widgets/gallery/js/admin.min.js
deleted file mode 100644
index da22c2b4..00000000
--- a/plugins/jetpack/_inc/build/widgets/gallery/js/admin.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* jshint onevar: false, multistr: true */
-/* global _wpMediaViewsL10n, _wpGalleryWidgetAdminSettings */
-!function(e){var t,i;e(function(){e(document.body).on("click",".gallery-widget-choose-images",function(l){l.preventDefault();var n=e(this).closest("form, .form");t=n.find(".gallery-widget-ids"),i=n.find(".gallery-widget-thumbs");var r=function(e){if(!e)return null;var t=wp.shortcode.next("gallery",'[gallery ids="'+e+'"]');return t=t.shortcode,wp.media.gallery.attachments(t)}(t.val()),a=null,o=!1;r&&(a=function(e){var t=new wp.media.model.Selection(e.models,{props:e.props.toJSON(),multiple:!0});return t.gallery=e.gallery,t.more().done(function(){t.props.set({query:!1}),t.unmirror(),t.props.unset("orderby")}),t}(r),o=!0),function(e){var l=new wp.media.view.MediaFrame.GalleryWidget(e);return l.on("update",function(e){var n=l.state();if(e=e||n.get("selection")){var r=e.map(function(e){return e.get("id")}).join(",");t.val(r).trigger("change"),function(e,t){t.empty();var i=_wpGalleryWidgetAdminSettings.thumbSize;e.each(function(e){var l=e.get("url")+"?w="+i+"&h="+i+"&crop=true",n=jQuery("<img>",{src:l,alt:e.get("title"),title:e.get("title"),width:i,height:i,class:"thumb"});t.append(n)})}(e,i)}},this),l.setState(l.options.state),l}({state:"gallery-edit",title:wp.media.view.l10n.addMedia,multiple:!0,editing:o,selection:a}).open()}),e(".widget-inside").on("change",".gallery-widget-style",r),r()});var l,n=wp.media;function r(){e(".widget-inside .gallery-widget-style").each(function(){var t=e(this).val(),i=e(this).parents("form");switch(t){case"slideshow":i.find(".gallery-widget-link-wrapper").hide(),i.find(".gallery-widget-columns-wrapper").hide();break;default:i.find(".gallery-widget-link-wrapper").show(),i.find(".gallery-widget-columns-wrapper").show()}})}l=n.view.l10n="undefined"==typeof _wpMediaViewsL10n?{}:_wpMediaViewsL10n,n.view.MediaFrame.GalleryWidget=n.view.MediaFrame.Post.extend({createStates:function(){var e=this.options;"CollectionEdit"in n.controller?this.states.add([new n.controller.CollectionEdit({type:"image",collectionType:"gallery",title:l.editGalleryTitle,SettingsView:n.view.Settings.Gallery,library:e.selection,editing:e.editing,menu:"gallery"}),new n.controller.CollectionAdd({type:"image",collectionType:"gallery",title:l.addToGalleryTitle})]):("WidgetGalleryEdit"in n.controller||(n.controller.WidgetGalleryEdit=n.controller.GalleryEdit.extend({gallerySettings:function(){}})),this.states.add([new n.controller.WidgetGalleryEdit({library:e.selection,editing:e.editing,menu:"gallery"}),new n.controller.GalleryAdd({})]))}})}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/widgets/gallery/js/gallery.min.js b/plugins/jetpack/_inc/build/widgets/gallery/js/gallery.min.js
deleted file mode 100644
index e388329e..00000000
--- a/plugins/jetpack/_inc/build/widgets/gallery/js/gallery.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-jQuery("body").on("click",".widget-gallery .no-carousel .tiled-gallery-item a",function(e){return e.stopPropagation(),!0}); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/widgets/google-translate/google-translate.min.js b/plugins/jetpack/_inc/build/widgets/google-translate/google-translate.min.js
deleted file mode 100644
index 4d416343..00000000
--- a/plugins/jetpack/_inc/build/widgets/google-translate/google-translate.min.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/*global google:true*/
-/*global _wp_google_translate_widget:true*/
-/*exported googleTranslateElementInit*/
-function googleTranslateElementInit(){var e,a="en",t=/[?&#]lang=([a-zA-Z\-_]+)/;"object"==typeof _wp_google_translate_widget&&"string"==typeof _wp_google_translate_widget.lang&&(a=_wp_google_translate_widget.lang),(e=window.location.href.match(t))&&(window.location.href=window.location.href.replace(t,"").replace(/#googtrans\([a-zA-Z\-_|]+\)/,"")+"#googtrans("+a+"|"+e[1]+")"),new google.translate.TranslateElement({pageLanguage:a,layout:_wp_google_translate_widget.layout,autoDisplay:!1},"google_translate_element")} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/widgets/milestone/admin.min.js b/plugins/jetpack/_inc/build/widgets/milestone/admin.min.js
deleted file mode 100644
index eb5e2ea8..00000000
--- a/plugins/jetpack/_inc/build/widgets/milestone/admin.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-!function(e){var n=e("#customize-controls");function t(){n.find(".milestone-type").trigger("change")}n.length||(n=e("#wpbody")),n.on("change",".milestone-type",function(){var n=e(this).parent().find(".milestone-message-wrapper");"since"===e(this).find('input[type="radio"]:checked').val()?n.hide():n.show()}),e(document).on("widget-added widget-updated",function(){t()}),t()}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/widgets/milestone/milestone.min.js b/plugins/jetpack/_inc/build/widgets/milestone/milestone.min.js
deleted file mode 100644
index cdae452c..00000000
--- a/plugins/jetpack/_inc/build/widgets/milestone/milestone.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* global MilestoneConfig */
-var Milestone=function(e){var n=function(n){var i=e("#"+n.id),t=n.id,o=1e3*n.refresh;this.timer=function(){var n=this;e.ajax({url:MilestoneConfig.api_root+"jetpack/v4/widgets/"+t,success:function(e){i.find(".milestone-countdown").replaceWith(e.message),(o=1e3*e.refresh)&&setTimeout(function(){n.timer()},o)}})},o>0&&this.timer()};return function(e){return new n(e)}}(jQuery);!function(){var e,n={};if("undefined"!=typeof MilestoneConfig)for(e=0;e<MilestoneConfig.instances.length;e++)n[e]=new Milestone(MilestoneConfig.instances[e])}(); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/widgets/search/js/search-widget-admin.min.js b/plugins/jetpack/_inc/build/widgets/search/js/search-widget-admin.min.js
deleted file mode 100644
index 7ea8d66d..00000000
--- a/plugins/jetpack/_inc/build/widgets/search/js/search-widget-admin.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* globals jetpack_search_filter_admin, jQuery, analytics */
-!function(e,t){var a=void 0!==t&&t.defaultFilterCount?t.defaultFilterCount:5;function s(a){var s=null,c=null,i=a.find(".filter-select").val();"taxonomy"===i?s=a.find(".taxonomy-select option:selected").text().trim():"date_histogram"===i&&t&&t.i18n?(c=-1!==a.find(".date-field-select").val().indexOf("modified"),s="month"===a.find(".date-interval-select").val()?c?t.i18n.monthUpdated:t.i18n.month:c?t.i18n.yearUpdated:t.i18n.year):s=a.find(".filter-select option:selected").text().trim(),e(a).find(".jetpack-search-filters-widget__title input").prop("placeholder",s)}e(document).ready(function(){i(),window.JetpackSearch=window.JetpackSearch||{},window.JetpackSearch.addFilter=c,"undefined"!=typeof analytics&&t.tracksUserData&&analytics.initialize(t.tracksUserData.userid,t.tracksUserData.username)});var c=function(e,t){var a=_.template(e.closest(".jetpack-search-filters-widget").find(".jetpack-search-filters-widget__filter-template").html());s(e.append(a(t)))},i=function(i){i=void 0===i?e(".jetpack-search-filters-widget"):i;var n=function(t){return e(t).closest(".jetpack-search-filters-widget__filter")};i.on("change",".filter-select",function(){var a=e(this),c=a.val(),i={is_customizer:t.tracksEventData.is_customizer};i.type=c,a.closest(".jetpack-search-filters-widget__filter").attr("class","jetpack-search-filters-widget__filter").addClass("is-"+c),s(n(this)),r("changed_filter_type",i)}),i.on("change",".jetpack-search-filters-widget__search-box-enabled",function(){var a=e(this),s=a.is(":checked"),c=a.closest(".jetpack-search-filters-widget"),i=c.find(".jetpack-search-filters-widget__sort-controls-enabled");c.toggleClass("hide-post-types"),s?(i.removeAttr("disabled"),r("enabled_search_box",t.tracksEventData)):(i.prop("checked",!1),i.prop("disabled",!0),r("disabled_search_box",t.tracksEventData))}),i.on("change",".jetpack-search-filters-widget__sort-controls-enabled",function(){e(this).is(":checked")?r("enabled_sort_controls",t.tracksEventData):r("disabled_sort_controls",t.tracksEventData)}),i.on("click",'.jetpack-search-filters-widget__post-types-select input[type="checkbox"]',function(a){0===e(this).closest(".jetpack-search-filters-widget").find('.jetpack-search-filters-widget__post-types-select input[type="checkbox"]:checked').length&&(a.preventDefault(),a.stopPropagation(),r("attempted_no_post_types",t.tracksEventData))}),i.on("change",'.jetpack-search-filters-widget__post-types-select input[type="checkbox"]',function(){var a=e(this),s={is_customizer:t.tracksEventData.is_customizer,post_type:a.val()};wp&&wp.customize&&wp.customize.state("saved").set(!1),a.is(":checked")?r("added_post_type",s):r("removed_post_type",s)}),i.on("change",".jetpack-search-filters-widget__sort-order",function(){var a={is_customizer:t.tracksEventData.is_customizer};a.order=e(this).val(),wp&&wp.customize&&wp.customize.state("saved").set(!1),r("changed_sort_order",a)}),i.on("change",".jetpack-search-filters-widget__taxonomy-select select",function(){var a={is_customizer:t.tracksEventData.is_customizer};a.taxonomy=e(this).val(),s(n(this)),wp&&wp.customize&&wp.customize.state("saved").set(!1),r("changed_taxonomy",a)}),i.on("change","select.date-field-select",function(){var a={is_customizer:t.tracksEventData.is_customizer};a.field=e(this).val(),s(n(this)),wp&&wp.customize&&wp.customize.state("saved").set(!1),r("changed_date_field",a)}),i.on("change","select.date-interval-select",function(){var a={is_customizer:t.tracksEventData.is_customizer};a.interval=e(this).val(),s(n(this)),wp&&wp.customize&&wp.customize.state("saved").set(!1),r("changed_date_interval",a)}),i.on("change","input.filter-count",function(){var a={is_customizer:t.tracksEventData.is_customizer};a.count=e(this).val(),wp&&wp.customize&&wp.customize.state("saved").set(!1),r("changed_filter_count",a)}),i.on("click",".jetpack-search-filters-widget__add-filter",function(s){s.preventDefault();var i=e(this).closest(".jetpack-search-filters-widget").find(".jetpack-search-filters-widget__filters");c(i,{type:"taxonomy",taxonomy:"",post_type:"",field:"",interval:"",count:a,name_placeholder:"",name:""}),wp&&wp.customize&&wp.customize.state("saved").set(!1),i.find(".jetpack-search-filters-widget__filter").find("input, textarea, select").change(),r("added_filter",t.tracksEventData)}),i.on("click",".jetpack-search-filters-widget__controls .delete",function(a){a.preventDefault();var s=e(this).closest(".jetpack-search-filters-widget__filter"),c={is_customizer:t.tracksEventData.is_customizer};switch(c.type=s.find(".filter-select").val(),c.type){case"taxonomy":c.taxonomy=s.find(".jetpack-search-filters-widget__taxonomy-select select").val();break;case"date_histogram":c.dateField=s.find(".jetpack-search-filters-widget__date-histogram-select:first select").val(),c.dateInterval=s.find(".jetpack-search-filters-widget__date-histogram-select:nth-child( 2 ) select").val()}c.filterCount=s.find(".filter-count").val(),r("deleted_filter",c),s.find("input, textarea, select").change(),s.remove(),wp&&wp.customize&&wp.customize.state("saved").set(!1)}),e(".jetpack-search-filters-widget__filters").sortable({placeholder:"jetpack-search-filters-widget__filter-placeholder",axis:"y",revert:!0,cancel:"input,textarea,button,select,option,.jetpack-search-filters-widget__controls a",change:function(){wp&&wp.customize&&wp.customize.state("saved").set(!1)},update:function(t,a){e(a.item).find("input, textarea, select").change()}}).disableSelection()};function r(e,t){void 0!==t&&"object"==typeof t||(t={}),e&&e.length&&"undefined"!=typeof analytics&&analytics.tracks&&analytics.mc&&(e=0!==(e=e.replace(/-/g,"_")).indexOf("jetpack_widget_search_")?"jetpack_widget_search_"+e:e,analytics.tracks.recordEvent(e,t),e=(e=e.replace("jetpack_widget_search_","")).replace(/_/g,"-"),analytics.mc.bumpStat("jetpack-search-widget",e))}e(document).on("widget-updated widget-added",function(t,a){var s=(a=e(a)).attr("id");s&&-1!==s.indexOf("jetpack-search-filters")&&(a.off("change",".filter-select"),a.off("click",".jetpack-search-filters-widget__controls .delete"),a.off("change",".jetpack-search-filters-widget__use-filters"),a.off("change",".jetpack-search-filters-widget__search-box-enabled"),a.off("change",".jetpack-search-filters-widget__sort-controls-enabled"),a.off("change",".jetpack-search-filters-widget__sort-controls-enabled"),a.off("change",".jetpack-search-filters-widget__post-type-selector"),a.off("change",".jetpack-search-filters-widget__sort-order"),a.off("change",".jetpack-search-filters-widget__taxonomy-select"),a.off("change",".jetpack-search-filters-widget__date-histogram-select:first select"),a.off("change",".jetpack-search-filters-widget__date-histogram-select:eq(1) select"),a.off("click",'.jetpack-search-filters-widget__post-types-select input[type="checkbox"]'),a.off("click",".jetpack-search-filters-widget__add-filter"),i(a))})}(jQuery,jetpack_search_filter_admin); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/widgets/search/js/search-widget.min.js b/plugins/jetpack/_inc/build/widgets/search/js/search-widget.min.js
deleted file mode 100644
index 29a005c8..00000000
--- a/plugins/jetpack/_inc/build/widgets/search/js/search-widget.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-jQuery(document).ready(function(){var e=jQuery(".jetpack-search-filters-widget__filter-list");e.on("click","a",function(){var e=jQuery(this).siblings('input[type="checkbox"]');e.prop("checked",!e.prop("checked"))}),e.find('input[type="checkbox"]').prop("disabled",!1).css("cursor","inherit").on("click",function(){var e=jQuery(this).siblings("a");e.length&&(window.location.href=e.prop("href"))})}); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/widgets/simple-payments/customizer.min.js b/plugins/jetpack/_inc/build/widgets/simple-payments/customizer.min.js
deleted file mode 100644
index bd6cb45c..00000000
--- a/plugins/jetpack/_inc/build/widgets/simple-payments/customizer.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-/* global jQuery, jpSimplePaymentsStrings, confirm, _ */
-/* eslint no-var: 0, quote-props: 0 */
-!function(e,t,i){var a=i(document);function p(e){e.find(".invalid").removeClass("invalid"),e.find(".jetpack-simple-payments-widget-title").add(".jetpack-simple-payments-products").add(".jetpack-simple-payments-add-product").add(".jetpack-simple-payments-edit-product").add(".jetpack-simple-payments-save-product").add(".jetpack-simple-payments-cancel-form").add(".jetpack-simple-payments-delete-product").attr("disabled","disabled"),e.find(".jetpack-simple-payments-form").show()}function n(e){e.find(".jetpack-simple-payments-widget-title").add(".jetpack-simple-payments-products").removeAttr("disabled"),e.find(".jetpack-simple-payments-form").hide()}function s(e,t){e.find(".jetpack-simple-payments-form-action").val(t).change()}function d(e){var t=e.find(".jetpack-simple-payments-form").is(":visible"),i=e.find(".jetpack-simple-payments-products").is(":visible"),a="edit"===e.find(".jetpack-simple-payments-form-action").val();t?e.find(".jetpack-simple-payments-save-product").add(".jetpack-simple-payments-cancel-form").removeAttr("disabled"):e.find(".jetpack-simple-payments-add-product").removeAttr("disabled"),t&&a&&e.find(".jetpack-simple-payments-delete-product").removeAttr("disabled"),i&&!t&&e.find(".jetpack-simple-payments-edit-product").removeAttr("disabled")}function c(e){e.find(".jetpack-simple-payments-add-product").add(".jetpack-simple-payments-edit-product").add(".jetpack-simple-payments-save-product").add(".jetpack-simple-payments-cancel-form").add(".jetpack-simple-payments-delete-product").attr("disabled","disabled")}a.ready(function(){a.on("widget-added",function(a,m){m.is('[id*="jetpack_simple_payments_widget"]')&&function(a){var m=a.find("> .widget-inside > .form, > .widget-inside > form");m.find(".jetpack-simple-payments-add-product").on("click",function(e){return function(t){t.preventDefault(),p(e),s(e,"add")}}(m)),m.find(".jetpack-simple-payments-edit-product").on("click",function(e){return function(t){t.preventDefault(),p(e),s(e,"edit")}}(m)),m.find(".jetpack-simple-payments-image-fieldset .placeholder, .jetpack-simple-payments-image > img").on("click",function(e){return function(i){i.preventDefault();var a=e.find(".jetpack-simple-payments-image"),p=new t.media.view.MediaFrame.Select({title:"Choose Product Image",multiple:!1,library:{type:"image"},button:{text:"Choose Image"}});p.on("select",function(){var t=p.state().get("selection").first().toJSON();e.find(".jetpack-simple-payments-image-fieldset .placeholder").hide(),a.find("img").attr("src",t.url).show(),e.find(".jetpack-simple-payments-image").show(),e.find(".jetpack-simple-payments-form-image-id").val(t.id).change()}),p.open()}}(m)),m.find(".jetpack-simple-payments-remove-image").on("click",function(e){return function(t){t.preventDefault(),e.find(".jetpack-simple-payments-image-fieldset .placeholder").show(),e.find(".jetpack-simple-payments-image").hide(),e.find(".jetpack-simple-payments-form-image-id").val("").change()}}(m)),m.find(".jetpack-simple-payments-save-product").on("click",function(a){return function(p){p.preventDefault();var m=a.find(".jetpack-simple-payments-form-product-id").val();if(function(e){e.find(".invalid").removeClass("invalid");var t=!1;e.find(".jetpack-simple-payments-form-product-title").val()||(e.find(".jetpack-simple-payments-form-product-title").addClass("invalid"),t=!0);var i=e.find(".jetpack-simple-payments-form-product-price").val();(!i||isNaN(i)||parseFloat(i)<=0)&&(e.find(".jetpack-simple-payments-form-product-price").addClass("invalid"),t=!0);var a="JPY"===e.find(".jetpack-simple-payments-form-product-currency").val()?0:2,p=function(e){var t=e.split(".");if(t.length>2)return null;return t[1]?t[1].length:0}(i);(null===p||p>a)&&(e.find(".jetpack-simple-payments-form-product-price").addClass("invalid"),t=!0);var n=e.find(".jetpack-simple-payments-form-product-email").val(),s=/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(n);n&&s||(e.find(".jetpack-simple-payments-form-product-email").addClass("invalid"),t=!0);return!t}(a)){c(a),a.find(".spinner").show();var o=t.ajax.post("customize-jetpack-simple-payments-button-save",{"customize-jetpack-simple-payments-nonce":e.settings.nonce["customize-jetpack-simple-payments"],customize_changeset_uuid:e.settings.changeset.uuid,params:{product_post_id:m,post_title:a.find(".jetpack-simple-payments-form-product-title").val(),post_content:a.find(".jetpack-simple-payments-form-product-description").val(),image_id:a.find(".jetpack-simple-payments-form-image-id").val(),currency:a.find(".jetpack-simple-payments-form-product-currency").val(),price:a.find(".jetpack-simple-payments-form-product-price").val(),multiple:a.find(".jetpack-simple-payments-form-product-multiple").is(":checked")?1:0,email:a.find(".jetpack-simple-payments-form-product-email").val()}});o.done(function(e){var t=a.find("select.jetpack-simple-payments-products"),p=t.find('option[value="'+m+'"]');p.length>0?p.text(e.product_post_title):(t.append(i("<option>",{value:e.product_post_id,text:e.product_post_title})),t.val(e.product_post_id).change()),a.find(".jetpack-simple-payments-products-fieldset").show(),a.find(".jetpack-simple-payments-products-warning").hide(),s(a,"clear"),n(a)}),o.fail(function(e){var t={post_title:"product-title",price:"product-price",email:"product-email"};e.forEach(function(e){t.hasOwnProperty(e.code)&&a.find(".jetpack-simple-payments-form-"+t[e.code]).addClass("invalid")}),d(a)})}}}(m)),m.find(".jetpack-simple-payments-cancel-form").on("click",function(e){return function(t){t.preventDefault(),n(e),e.find(".jetpack-simple-payments-add-product, .jetpack-simple-payments-edit-product").attr("disabled","disabled"),s(e,"clear")}}(m)),m.find(".jetpack-simple-payments-delete-product").on("click",function(a){return function(p){if(p.preventDefault(),confirm(jpSimplePaymentsStrings.deleteConfirmation)){var d=parseInt(a.find(".jetpack-simple-payments-form-product-id").val(),10);if(d){c(a),a.find(".spinner").show();var m=t.ajax.post("customize-jetpack-simple-payments-button-delete",{"customize-jetpack-simple-payments-nonce":e.settings.nonce["customize-jetpack-simple-payments"],customize_changeset_uuid:e.settings.changeset.uuid,params:{product_post_id:d}});m.done(function(){var e=a.find("select.jetpack-simple-payments-products")[0];e.remove(e.selectedIndex),e.dispatchEvent(new Event("change")),0===i(e).has("option").length&&(a.find(".jetpack-simple-payments-products-fieldset").hide(),a.find(".jetpack-simple-payments-products-warning").show()),s(a,"clear"),n(a)})}}}}(m)),m.find("select, input, textarea, checkbox").on("change input propertychange",_.debounce(function(){c(m)},250))}(m)}),a.on("widget-synced widget-updated",function(a,p){if(p.is('[id*="jetpack_simple_payments_widget"]')){a.preventDefault(),t.ajax.post("customize-jetpack-simple-payments-buttons-get",{"customize-jetpack-simple-payments-nonce":e.settings.nonce["customize-jetpack-simple-payments"],customize_changeset_uuid:e.settings.changeset.uuid}).done(function(e){var t=0;i(document).find("select.jetpack-simple-payments-products").each(function(a,p){var n=i(p);t=n.val(),n.find("option").remove(),n.append(i.map(e,function(e){return i("<option>",{value:e.ID,text:e.post_title})})),n.val(t)})});var n=p.find("> .widget-inside > .form, > .widget-inside > form");d(n),function(e){var t=parseInt(e.find(".jetpack-simple-payments-form-image-id").val(),10),i=e.find(".jetpack-simple-payments-form-image-src").val(),a=e.find(".jetpack-simple-payments-image-fieldset .placeholder"),p=e.find(".jetpack-simple-payments-image > img"),n=e.find(".jetpack-simple-payments-image");t&&i?(p.attr("src",i),a.hide(),n.show()):(a.show(),p.removeAttr("src"),n.hide())}(n)}})})}(wp.customize,wp,jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/widgets/social-icons/social-icons-admin.min.js b/plugins/jetpack/_inc/build/widgets/social-icons/social-icons-admin.min.js
deleted file mode 100644
index ad5be6b8..00000000
--- a/plugins/jetpack/_inc/build/widgets/social-icons/social-icons-admin.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-!function(t){var i=null;function e(i){i.find(".jetpack-social-icons-widget-list").sortable({items:"> .jetpack-social-icons-widget-item",handle:".handle",cursor:"move",placeholder:"jetpack-social-icons-widget-item ui-state-placeholder",containment:i,forcePlaceholderSize:!0,update:function(){n(t(this).parents(".form").find(".widget-control-save"))}})}function n(i){t(document.body).hasClass("wp-customizer")&&i.length&&i.trigger("click").hide()}t(document).ready(function(){t(document).on("click",".jetpack-social-icons-widget.add-button button",function(i){var e,n,o,c,a;i.preventDefault(),e=t(t.trim(t("#tmpl-jetpack-widget-social-icons-template").html())),c=(o=(n=t(this).parents(".widget-content")).find(".jetpack-social-icons-widget-list")).data("url-icon-id"),a=o.data("url-icon-name"),e.find(".jetpack-widget-social-icons-url input").attr("id",c).attr("name",a+"[]"),o.append(e),n.find(".jetpack-social-icons-widget-item:last").find("input:first").trigger("focus")}),t(document).on("click",".jetpack-widget-social-icons-remove-item-button",function(i){i.preventDefault();var e=t(this).parents(".form").find(".widget-control-save");t(this).parents(".jetpack-social-icons-widget-item").remove(),n(e)}),t(document).on("click",'div.widget[id*="jetpack_widget_social_icons"] .widget-title, div.widget[id*="jetpack_widget_social_icons"] .widget-action',function(){t(this).parents("#available-widgets").length||e(t(this).parents('.widget[id*="jetpack_widget_social_icons"]'))}),t(document).on("widget-added",function(t,i){i.is('[id*="jetpack_widget_social_icons"]')&&(t.preventDefault(),e(i))}),t(document).on("widget-updated",function(t,i){i.is('[id*="jetpack_widget_social_icons"]')&&(t.preventDefault(),e(i))}),t(document).on("focusout",'input[name*="jetpack_widget_social_icons"]',function(){n(t(this).parents(".form").find(".widget-control-save"))}),t(document).on("keydown",'input[name*="jetpack_widget_social_icons"]',function(i){13===i.keyCode&&n(t(this).parents(".form").find(".widget-control-save"))}),t(document).on("keyup",'input[name*="jetpack_widget_social_icons"]',function(){clearTimeout(i),i=setTimeout(function(){n(t(this).parents(".form").find(".widget-control-save"))},1e3)}),t(document).on("change",'select[name*="jetpack_widget_social_icons"]',function(){n(t(this).parents(".form").find(".widget-control-save"))})})}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/build/widgets/twitter-timeline-admin.min.js b/plugins/jetpack/_inc/build/widgets/twitter-timeline-admin.min.js
deleted file mode 100644
index e33b2617..00000000
--- a/plugins/jetpack/_inc/build/widgets/twitter-timeline-admin.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled from other files. */
-jQuery(function(t){function e(e){var i=t(e).val();t(e).closest(".jetpack-twitter-timeline-widget-type-container").next(".jetpack-twitter-timeline-widget-id-container").find("label").css("display",function(){var e=t(this).data("widget-type");return i===e?"":"none"})}var i=t("#customize-controls");i.length||(i=t("#wpbody")),i.on("change",".jetpack-twitter-timeline-widget-type",function(){e(this)}),i.find(".jetpack-twitter-timeline-widget-type").each(function(){e(this)})}); \ No newline at end of file
diff --git a/plugins/jetpack/_inc/class.jetpack-provision.php b/plugins/jetpack/_inc/class.jetpack-provision.php
deleted file mode 100644
index 600e79ad..00000000
--- a/plugins/jetpack/_inc/class.jetpack-provision.php
+++ /dev/null
@@ -1,284 +0,0 @@
-<?php //phpcs:ignore
-
-class Jetpack_Provision { //phpcs:ignore
-
- /**
- * Responsible for checking pre-conditions, registering site, and returning an array of details
- * that can be used to provision a plan for the site.
- *
- * @param array $named_args The array of arguments.
- *
- * @return WP_Error|array
- */
- public static function register_and_build_request_body( $named_args ) {
- $url_args = array(
- 'home_url' => 'WP_HOME',
- 'site_url' => 'WP_SITEURL',
- );
-
- foreach ( $url_args as $url_arg => $constant_name ) {
- // Anonymous functions were introduced in 5.3.0. So, if we're running on
- // >= 5.3.0, use an anonymous function to set the home/siteurl value%s.
- //
- // Otherwise, fallback to setting the home/siteurl value via the WP_HOME and
- // WP_SITEURL constants if the constant hasn't already been defined.
- if ( isset( $named_args[ $url_arg ] ) ) {
- if ( version_compare( phpversion(), '5.3.0', '>=' ) ) {
- add_filter( $url_arg, function() use ( $url_arg, $named_args ) { // phpcs:ignore PHPCompatibility.PHP.NewClosure.Found
- return $named_args[ $url_arg ];
- }, 11 );
- } elseif ( ! defined( $constant_name ) ) {
- define( $constant_name, $named_args[ $url_arg ] );
- }
- }
- }
-
- // If Jetpack is currently connected, and is not in Safe Mode already, kick off a sync of the current
- // functions/callables so that we can test if this site is in IDC.
- if ( Jetpack::is_active() && ! Jetpack::validate_sync_error_idc_option() && Jetpack_Sync_Actions::sync_allowed() ) {
- Jetpack_Sync_Actions::do_full_sync( array( 'functions' => true ) );
- Jetpack_Sync_Actions::$sender->do_full_sync();
- }
-
- if ( Jetpack::validate_sync_error_idc_option() ) {
- return new WP_Error(
- 'site_in_safe_mode',
- __( 'Can not provision a plan while in safe mode. See: https://jetpack.com/support/safe-mode/', 'jetpack' )
- );
- }
-
- $blog_id = Jetpack_Options::get_option( 'id' );
- $blog_token = Jetpack_Options::get_option( 'blog_token' );
-
- if ( ! $blog_id || ! $blog_token || ( isset( $named_args['force_register'] ) && intval( $named_args['force_register'] ) ) ) {
- // This code mostly copied from Jetpack::admin_page_load.
- Jetpack::maybe_set_version_option();
- $registered = Jetpack::try_registration();
- if ( is_wp_error( $registered ) ) {
- return $registered;
- } elseif ( ! $registered ) {
- return new WP_Error( 'registration_error', __( 'There was an unspecified error registering the site', 'jetpack' ) );
- }
-
- $blog_id = Jetpack_Options::get_option( 'id' );
- $blog_token = Jetpack_Options::get_option( 'blog_token' );
- }
-
- // If the user isn't specified, but we have a current master user, then set that to current user.
- $master_user_id = Jetpack_Options::get_option( 'master_user' );
- if ( ! get_current_user_id() && $master_user_id ) {
- wp_set_current_user( $master_user_id );
- }
-
- $site_icon = get_site_icon_url();
-
- $auto_enable_sso = ( ! Jetpack::is_active() || Jetpack::is_module_active( 'sso' ) );
-
- /** This filter is documented in class.jetpack-cli.php */
- if ( apply_filters( 'jetpack_start_enable_sso', $auto_enable_sso ) ) {
- $redirect_uri = add_query_arg(
- array(
- 'action' => 'jetpack-sso',
- 'redirect_to' => rawurlencode( admin_url() ),
- ),
- wp_login_url() // TODO: come back to Jetpack dashboard?
- );
- } else {
- $redirect_uri = admin_url();
- }
-
- $request_body = array(
- 'jp_version' => JETPACK__VERSION,
- 'redirect_uri' => $redirect_uri,
- );
-
- if ( $site_icon ) {
- $request_body['site_icon'] = $site_icon;
- }
-
- if ( get_current_user_id() ) {
- $user = wp_get_current_user();
-
- // Role.
- $role = Jetpack::translate_current_user_to_role();
- $signed_role = Jetpack::sign_role( $role );
-
- $secrets = Jetpack::init()->generate_secrets( 'authorize' );
-
- // Jetpack auth stuff.
- $request_body['scope'] = $signed_role;
- $request_body['secret'] = $secrets['secret_1'];
-
- // User stuff.
- $request_body['user_id'] = $user->ID;
- $request_body['user_email'] = $user->user_email;
- $request_body['user_login'] = $user->user_login;
- }
-
- // Optional additional params.
- if ( isset( $named_args['wpcom_user_id'] ) && ! empty( $named_args['wpcom_user_id'] ) ) {
- $request_body['wpcom_user_id'] = $named_args['wpcom_user_id'];
- }
-
- // Override email of selected user.
- if ( isset( $named_args['wpcom_user_email'] ) && ! empty( $named_args['wpcom_user_email'] ) ) {
- $request_body['user_email'] = $named_args['wpcom_user_email'];
- }
-
- if ( isset( $named_args['plan'] ) && ! empty( $named_args['plan'] ) ) {
- $request_body['plan'] = $named_args['plan'];
- }
-
- if ( isset( $named_args['onboarding'] ) && ! empty( $named_args['onboarding'] ) ) {
- $request_body['onboarding'] = intval( $named_args['onboarding'] );
- }
-
- if ( isset( $named_args['force_connect'] ) && ! empty( $named_args['force_connect'] ) ) {
- $request_body['force_connect'] = intval( $named_args['force_connect'] );
- }
-
- if ( isset( $request_body['onboarding'] ) && (bool) $request_body['onboarding'] ) {
- Jetpack::create_onboarding_token();
- }
-
- return $request_body;
- }
-
- /**
- * Given an access token and an array of arguments, will provision a plan for this site.
- *
- * @param string $access_token The access token from the partner.
- * @param array $named_args The arguments used for registering the site and then provisioning a plan.
- *
- * @return WP_Error|array
- */
- public static function partner_provision( $access_token, $named_args ) {
- // First, verify the token.
- $verify_response = self::verify_token( $access_token );
-
- if ( is_wp_error( $verify_response ) ) {
- return $verify_response;
- }
-
- $request_body = self::register_and_build_request_body( $named_args );
- if ( is_wp_error( $request_body ) ) {
- return $request_body;
- }
-
- $request = array(
- 'headers' => array(
- 'Authorization' => "Bearer $access_token",
- 'Host' => 'public-api.wordpress.com',
- ),
- 'timeout' => 60,
- 'method' => 'POST',
- 'body' => wp_json_encode( $request_body ),
- );
-
- $blog_id = Jetpack_Options::get_option( 'id' );
- $url = esc_url_raw( sprintf(
- 'https://%s/rest/v1.3/jpphp/%d/partner-provision',
- self::get_api_host(),
- $blog_id
- ) );
- if ( ! empty( $named_args['partner_tracking_id'] ) ) {
- $url = esc_url_raw( add_query_arg( 'partner_tracking_id', $named_args['partner_tracking_id'], $url ) );
- }
-
- // Add calypso env if set.
- if ( getenv( 'CALYPSO_ENV' ) ) {
- $url = add_query_arg( array( 'calypso_env' => getenv( 'CALYPSO_ENV' ) ), $url );
- }
-
- $result = Jetpack_Client::_wp_remote_request( $url, $request );
-
- if ( is_wp_error( $result ) ) {
- return $result;
- }
-
- $response_code = wp_remote_retrieve_response_code( $result );
- $body_json = json_decode( wp_remote_retrieve_body( $result ) );
-
- if ( 200 !== $response_code ) {
- if ( isset( $body_json->error ) ) {
- return new WP_Error( $body_json->error, $body_json->message );
- } else {
- return new WP_Error(
- 'server_error',
- /* translators: %s is an HTTP status code retured from an API request. Ex. – 400 */
- sprintf( __( 'Request failed with code %s', 'jetpack' ), $response_code )
- );
- }
- }
-
- if ( isset( $body_json->access_token ) && is_user_logged_in() ) {
- // Check if this matches the existing token before replacing.
- $existing_token = Jetpack_Data::get_access_token( get_current_user_id() );
- if ( empty( $existing_token ) || $existing_token->secret !== $body_json->access_token ) {
- self::authorize_user( get_current_user_id(), $body_json->access_token );
- }
- }
-
- return $body_json;
- }
-
- private static function authorize_user( $user_id, $access_token ) {
- // authorize user and enable SSO
- Jetpack::update_user_token( $user_id, sprintf( '%s.%d', $access_token, $user_id ), true );
-
- /**
- * Auto-enable SSO module for new Jetpack Start connections
- *
- * @since 5.0.0
- *
- * @param bool $enable_sso Whether to enable the SSO module. Default to true.
- */
- $other_modules = apply_filters( 'jetpack_start_enable_sso', true )
- ? array( 'sso' )
- : array();
-
- if ( $active_modules = Jetpack_Options::get_option( 'active_modules' ) ) {
- Jetpack::delete_active_modules();
- Jetpack::activate_default_modules( 999, 1, array_merge( $active_modules, $other_modules ), false );
- } else {
- Jetpack::activate_default_modules( false, false, $other_modules, false );
- }
- }
-
- private static function verify_token( $access_token ) {
- $request = array(
- 'headers' => array(
- 'Authorization' => "Bearer " . $access_token,
- 'Host' => 'public-api.wordpress.com',
- ),
- 'timeout' => 10,
- 'method' => 'POST',
- 'body' => ''
- );
-
- $url = sprintf( 'https://%s/rest/v1.3/jpphp/partner-keys/verify', self::get_api_host() );
- $result = Jetpack_Client::_wp_remote_request( $url, $request );
-
- if ( is_wp_error( $result ) ) {
- return $result;
- }
-
- $response_code = wp_remote_retrieve_response_code( $result );
- $body_json = json_decode( wp_remote_retrieve_body( $result ) );
-
- if( 200 !== $response_code ) {
- if ( isset( $body_json->error ) ) {
- return new WP_Error( $body_json->error, $body_json->message );
- } else {
- return new WP_Error( 'server_error', sprintf( __( 'Request failed with code %s', 'jetpack' ), $response_code ) );
- }
- }
-
- return true;
- }
-
- private static function get_api_host() {
- $env_api_host = getenv( 'JETPACK_START_API_HOST', true );
- return $env_api_host ? $env_api_host : JETPACK__WPCOM_JSON_API_HOST;
- }
-}
diff --git a/plugins/jetpack/_inc/facebook-embed.js b/plugins/jetpack/_inc/facebook-embed.js
deleted file mode 100644
index 580aef68..00000000
--- a/plugins/jetpack/_inc/facebook-embed.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/* global FB, jpfbembed */
-(function( window ) {
- var facebookEmbed = function() {
- var fbroot, src;
-
- if ( 'undefined' !== typeof FB && FB.XFBML ) {
- FB.XFBML.parse();
- } else {
- fbroot = document.createElement( 'div' );
- fbroot.id = 'fb-root';
- document.getElementsByTagName( 'body' )[0].appendChild( fbroot );
-
- src = '//connect.facebook.net/' + jpfbembed.locale + '/sdk.js#xfbml=1';
- if ( jpfbembed.appid ) {
- src += '&appId=' + jpfbembed.appid;
- }
- src += '&version=v2.3';
- jQuery.getScript( src );
- }
- };
-
- window.fbAsyncInit = function() {
- FB.init( {
- appId : jpfbembed.appid,
- version: 'v2.3'
- } );
-
- FB.XFBML.parse();
- };
-
- if ( 'undefined' !== typeof infiniteScroll ) {
- jQuery( document.body ).on( 'post-load', facebookEmbed );
- }
-
- facebookEmbed();
-})( this );
diff --git a/plugins/jetpack/_inc/fonts/automatticons/automatticons.eot b/plugins/jetpack/_inc/fonts/automatticons/automatticons.eot
deleted file mode 100644
index 1c11732f..00000000
--- a/plugins/jetpack/_inc/fonts/automatticons/automatticons.eot
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/_inc/fonts/automatticons/automatticons.svg b/plugins/jetpack/_inc/fonts/automatticons/automatticons.svg
deleted file mode 100644
index 1d59406f..00000000
--- a/plugins/jetpack/_inc/fonts/automatticons/automatticons.svg
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="automatticonsregular" horiz-adv-x="2048" >
-<font-face units-per-em="2048" ascent="1638" descent="-410" />
-<missing-glyph horiz-adv-x="1200" />
-<glyph />
-<glyph />
-<glyph unicode="&#xd;" />
-<glyph unicode=" " horiz-adv-x="1200" />
-<glyph unicode="&#x09;" horiz-adv-x="1200" />
-<glyph unicode="&#xa0;" horiz-adv-x="1200" />
-<glyph unicode="." d="M24 1100l1000 -1000l1000 1000h-2000z" />
-<glyph unicode="@" d="M24 -8q48 -6 100 -6q281 0 508 176q-133 1 -238.5 81t-145.5 203q39 -6 78 -6q60 0 108 14q-142 29 -236 142t-94 260v6q86 -49 186 -52q-84 57 -133 146.5t-49 195.5q0 110 56 206q154 -189 374 -303t472 -127q-12 45 -12 94q0 111 55 205.5t149.5 149.5t205.5 55 q87 0 165 -34t135 -94q142 27 260 100q-46 -149 -182 -228q123 14 238 64q-82 -124 -206 -212q2 -18 2 -54q0 -117 -24.5 -235.5t-75 -233t-122 -218t-170 -191t-214 -152t-260 -100.5t-302.5 -36q-344 0 -628 184z" />
-<glyph unicode="A" horiz-adv-x="12288" d="M128 356h176l110 220h492l92 -220h176l-458 852h-118zM460 692l186 342l198 -342h-384zM1458 716q0 -174 112.5 -279t337.5 -105q116 0 204 30t140.5 83.5t78 121.5t25.5 149v492h-162v-492q0 -129 -63.5 -197.5t-208.5 -68.5q-147 0 -230.5 71.5t-83.5 194.5v492h-150 v-492zM2710 1056h364v-700h150v700h378v152h-892v-152zM3904 772q0 -82 35 -161t96.5 -141t153 -100t195.5 -38q107 0 199.5 38t153 100.5t95 141t34.5 160.5v24q0 85 -34.5 165t-95 142.5t-152.5 100.5t-200 38q-105 0 -196 -38t-152.5 -100.5t-96.5 -142.5t-35 -165v-24z M4048 784v12q0 125 90.5 216.5t245.5 91.5q82 0 147.5 -26t104.5 -70t59.5 -98t20.5 -114v-12q0 -147 -84.5 -240.5t-247.5 -93.5q-158 0 -247 95t-89 239zM4251 671q0 -15 10 -34q11 -21 33 -37q7 -12 28 -1t30 35l150 224q15 19 10 42t-24 42q-24 10 -46 4.5t-22 -28.5 l-164 -214q-5 -18 -5 -33zM5278 356h152v666l46 -70l330 -596h92l342 596l46 70v-666h164v852h-222l-318 -588l-46 -66l-46 66l-320 588h-220v-852zM6756 356h186l92 220h504l104 -220h160l-448 852h-140zM7092 692l180 342l186 -342h-366zM7928 1056h366v-700h152v700h376 v152h-894v-152zM9076 1056h364v-700h164v700h386v152h-914v-152zM10370 356h160v852h-80q0 -43 -19 -62.5t-61 -19.5v-770zM10908 772q0 -88 37 -167t104 -140t170.5 -97t228.5 -36q237 0 440 164l-104 90q-55 -39 -94.5 -62.5t-108.5 -48.5t-133 -25q-179 0 -277.5 92.5 t-98.5 229.5v12q0 134 98.5 227t277.5 93q170 0 326 -152l114 104q-206 186 -440 186q-116 0 -218.5 -38t-172 -100.5t-109.5 -142.5t-40 -165v-24z" />
-<glyph unicode="C" d="M0 402v286q0 8 2.5 17.5t5.5 14.5l2 6l16 28q6 13 0 26l-16 28q-10 18 -10 38v284q0 28 16.5 52t41.5 30l914 378q27 10 54 10q29 0 52 -10l912 -374q26 -9 42 -33.5t16 -52.5v-284q0 -9 -2.5 -18.5t-5.5 -14.5l-2 -5l-16 -28q-6 -13 0 -26l16 -28q10 -20 10 -38v-286 q0 -27 -16 -51t-42 -33l-912 -374q-23 -10 -52 -10q-27 0 -54 10l-914 374q-25 9 -41.5 33.5t-16.5 50.5zM236 574q0 -42 24 -70t56 -28q36 0 59 27.5t23 70.5v90q0 7 -6 13.5t-14 6.5h-24v-120q0 -15 -9.5 -25.5t-24.5 -10.5t-24.5 10.5t-9.5 25.5v406q0 15 9.5 25.5 t24.5 10.5t24.5 -10.5t9.5 -25.5v-116h24q20 0 20 20v84q0 43 -23 70.5t-59 27.5q-32 0 -56 -28t-24 -70v-384zM256 568v398q0 30 18 50t46 20t45 -19.5t17 -50.5v-88q0 -8 -8 -8h-6v96q0 24 -13.5 41t-34.5 17q-22 0 -36 -17t-14 -41v-398q0 -25 13.5 -40.5t36.5 -15.5 q21 0 34.5 15.5t13.5 40.5v96h10h4v-4v-4v-88q0 -31 -17 -51.5t-45 -20.5t-46 21t-18 51zM432 574q0 -43 25.5 -70.5t60.5 -27.5q37 0 61.5 27.5t24.5 70.5v384q0 43 -24.5 70.5t-61.5 27.5q-35 0 -60.5 -27.5t-25.5 -70.5v-384zM452 568v398q0 30 19 50t47 20 q27 0 45.5 -20t18.5 -50v-398q0 -30 -18.5 -51t-45.5 -21q-28 0 -47 21t-19 51zM468 568q0 -25 13.5 -40.5t36.5 -15.5t36.5 15.5t13.5 40.5v398q0 24 -14 41t-36 17t-36 -17t-14 -41v-398zM480 294h4l4 -4h288l34 -24v6q0 4 -2 7t-4 4l-2 1l-16 12l16 14q8 4 8 12v8 l-34 -28h-296v-8zM484 564v406q0 15 9.5 25.5t24.5 10.5t24.5 -10.5t9.5 -25.5v-406q0 -15 -9.5 -25.5t-24.5 -10.5t-24.5 10.5t-9.5 25.5zM592 1220h256v-28q0 -11 8 -16l58 -34h12h8l58 34q12 6 12 16v28h42v-28q0 -4 12 -16l60 -34h6h12l58 34q8 5 8 16v28h256v10l-4 4 h-252v28q0 11 -8 16l-58 34q-12 6 -18 0l-26 -18l-22 30l24 12q8 8 8 16v68q0 10 -8 18l-60 34q-3 3 -9 3t-9 -3l-60 -34q-6 -6 -6 -18v-68q0 -10 6 -16l24 -12l-22 -30l-24 18q-7 7 -20 0l-58 -34q-8 -5 -8 -16v-28h-252l-4 -4v-10zM636 504q0 -8 7 -14t17 -6h60 q43 0 62.5 27t19.5 83v344q0 58 -19.5 85t-62.5 27h-60q-10 0 -17 -6t-7 -14v-526zM658 508v4v514l2 4h60q34 0 48 -21t14 -67v-352q0 -47 -14 -66.5t-48 -19.5h-60v4h-2zM670 516h50q27 0 37.5 17t10.5 57v352q0 41 -10.5 57.5t-37.5 16.5h-50v-500zM690 534v464h30 q18 0 25 -11t7 -39v-362q0 -29 -7 -40.5t-25 -11.5h-30zM836 504q0 -8 7.5 -14t16.5 -6h96q8 0 14 6t6 14v28h-84v220h38q22 0 22 20v28h-60v202h84v28q0 8 -6 14t-14 6h-96q-9 0 -16.5 -6t-7.5 -14v-526zM850 268h38v8h-28v20h24v6h-24v20h28v4h-38v-58zM856 504v4v518 q0 4 4 4l4 4h86l2 -4l4 -4v-6h-84v-238h58v-6q0 -8 -4 -8h-54v-254h84v-6l-4 -4l-2 -4h-90v4h-4zM860 1192v70q0 4 4 4l58 32l4 4q4 0 4 -4l22 -14l-22 -34h-4q-24 0 -24 -24q0 -22 24 -22q18 0 24 16h38v-28q0 -4 -2 -4l-56 -32q-8 -8 -8 0l-58 32zM902 280q0 -12 8 -12h20 q8 0 8 12v10q0 10 -8 10q-8 2 -16 2q-6 6 -6 8v8q2 4 6 4h12l4 -4v-8h8v8q0 8 -8 8h-20q-8 0 -8 -8v-12q0 -5 8 -10q8 0 16 -2l4 -4v-10q0 -4 -4 -4h-16l-2 4v6h-6v-6zM942 1244l24 34l20 -12q2 0 2 -4v-28h-38q-2 2 -4 5t-4 5zM950 322h16v-54h10v54h16v4h-42v-4zM962 1348 v76l62 32q0 4 2 4v-4l62 -32l4 -4v-68l-4 -4l-24 -12l-20 34q0 2 3 7t3 9q0 10 -7.5 17t-16.5 7q-11 0 -18.5 -7t-7.5 -17q0 -4 8 -16l-22 -34zM972 1288l16 32l28 -18h10h8l28 18l16 -32l-20 -10q-12 -12 -12 -16v-28h-42v28q0 10 -12 16zM986 268h10v12h-10v-12zM996 1328 l24 34h6h8l20 -34l-28 -12q0 -3 -1 -3t-1 3zM1030 268h34v8h-24v10q0 4 4 4q4 2 8.5 4t5.5 2q6 4 6 10v12q0 8 -6 8h-18q-2 0 -6 -2.5t-4 -5.5v-4l10 -4v8q0 4 4 4h10q4 0 4 -4v-12q0 -4 -4 -4q-8 -2 -14 -6q-10 0 -10 -6v-22zM1062 1192v28h40q1 -7 8 -11.5t14 -4.5 q24 0 24 22q0 24 -24 24h-6l-20 34l24 14l2 4q4 0 4 -4l58 -32q4 0 4 -4v-70q0 -4 -4 -4l-58 -32q0 -3 -2 -3t-4 3l-58 32zM1062 1234v28l2 4l20 12l24 -34q-2 -2 -6 -10h-40zM1082 280q0 -12 10 -12h12q12 0 12 12v38q0 8 -12 8h-12q-10 0 -10 -8v-38zM1088 280v38l4 4h12 q4 0 4 -4v-38l-4 -4h-12q-4 0 -4 4zM1094 504q0 -8 6.5 -14t15.5 -6h30v242h34q30 0 52 22t22 72v142q0 88 -74 88h-64q-9 0 -15.5 -6t-6.5 -14v-526zM1112 508v516l4 2l2 4h62q54 0 54 -68v-146q0 -68 -54 -68h-56v-248h-6q-6 0 -6 8zM1124 314l16 8v-54h8v58h-8l-16 -4v-8 zM1124 762h56q44 0 44 54v146q0 54 -44 54h-56v-254zM1146 780v218h34q22 0 22 -32v-158q0 -28 -22 -28h-34zM1166 268h34v8h-28v10l4 4q4 2 18 6q6 6 6 10v12q0 8 -10 8h-18q-6 0 -6 -8v-4l6 -4v8l4 4h10q4 0 4 -4v-12q0 -4 -4 -4l-14 -6q-6 0 -6 -6v-22zM1240 266l38 24 h286l2 4h4v2v6h-292l-38 28v-8q0 -4 2 -7t4 -4l2 -1l20 -14l-20 -12q-8 -4 -8 -12v-6zM1292 574q0 -42 24 -70t56 -28q37 0 61.5 27.5t24.5 70.5v384q0 43 -24.5 70.5t-61.5 27.5q-32 0 -56 -28t-24 -70v-384zM1308 568v398q0 30 19 50t45 20q30 0 50 -20t20 -50v-398 q0 -31 -19.5 -51.5t-50.5 -20.5q-28 0 -46 21t-18 51zM1322 568q0 -25 15 -40.5t35 -15.5q24 0 40 15.5t16 40.5v398q0 24 -16 41t-40 17q-20 0 -35 -17t-15 -41v-398zM1342 564v406q0 15 8.5 25.5t21.5 10.5q15 0 25.5 -10.5t10.5 -25.5v-406q0 -15 -10.5 -25.5 t-25.5 -10.5q-13 0 -21.5 10.5t-8.5 25.5zM1496 504q0 -8 6 -14t14 -6h94q20 0 20 20v28h-84v220h40q20 0 20 20v28h-60v202h84v28q0 20 -20 20h-94q-8 0 -14 -6t-6 -14v-526zM1512 508v518l4 4l4 4h84l2 -4l4 -4v-6h-84v-238h60v-6q0 -8 -6 -8h-54v-254h84v-6q0 -4 -4 -4 l-2 -4h-84l-4 4zM1658 1002h54v-498q0 -8 6.5 -14t15.5 -6h30v518h52v28q0 7 -7 13.5t-15 6.5h-114q-22 0 -22 -20v-28zM1680 1020v6q0 4 2 4q0 4 2 4h104q0 -4 4 -4v-10h-50v-520h-4q-8 0 -8 8v512h-50z" />
-<glyph unicode="F" d="M24 -286q0 -46 34 -80t80 -34h1772q46 0 80 34t34 80v1772q0 46 -34 80t-80 34h-1772q-46 0 -80 -34t-34 -80v-1772zM972 478v264h194v228q0 68 23 128t67.5 108t119 76t170.5 28q48 0 94.5 -2.5t69.5 -5.5l22 -2l-4 -248q-82 2 -170 2q-67 0 -89.5 -28.5t-22.5 -89.5 v-194h288l-12 -264h-276v-736h-280v736h-194z" />
-<glyph unicode="G" d="M134 708q0 183 68 345.5t190 284.5q54 52 129 52t127 -52q50 -52 50 -125t-50 -127q-74 -73 -116 -171.5t-42 -206.5q0 -109 42 -208t113.5 -170.5t170.5 -113.5t208 -42q147 0 270.5 71t195.5 194t72 269q0 173 -99 311.5t-257 194.5v-416q0 -75 -53.5 -126.5 t-128.5 -51.5q-74 0 -126 51.5t-52 126.5v624q0 74 52 126t126 52q182 0 347.5 -70.5t284.5 -190.5t189.5 -285t70.5 -346q0 -182 -70.5 -347.5t-189.5 -285t-284.5 -190.5t-347.5 -71q-181 0 -345.5 71t-284 190.5t-190 285t-70.5 347.5z" />
-<glyph unicode="I" d="M0 26v934q146 30 216.5 53.5t103.5 56.5q16 20 32 54t24 58l8 24q3 -3 6.5 -9t14 -24.5t15 -35.5t8.5 -42.5t-6 -44.5q-6 -12 -11 -20.5t-8.5 -15.5t-9.5 -14t-8 -11t-9.5 -9.5t-10 -8t-12.5 -9t-13.5 -8.5t-17.5 -10.5t-20 -11.5q-48 -40 -48 -91v-7q4 -55 48 -86 q17 -11 33 -11q21 1 41 19q36 34 82 122q17 34 26.5 79.5t13.5 78t25.5 72t62.5 70.5q31 24 70 30q29 4 56 5q10 0 20 -1q11 -1 22 -1q28 0 58 4q42 5 92.5 38.5t101.5 100.5q38 47 81 74t83 33q24 4 47 3q16 0 31 -1q39 -4 70.5 -16.5t56 -25.5t37.5 -23l14 -10 q-6 2 -15.5 6t-38.5 12q-30 8 -58 12q-15 2 -33 1q-15 0 -32 -1q-37 -3 -68.5 -16.5t-61.5 -44t-49 -77.5q-19 -43 -35.5 -75t-29.5 -54t-29 -38t-27 -25t-30 -16t-31.5 -10t-38 -9t-43.5 -11q-60 -16 -77 -69q-5 -16 -5 -30q0 -29 21 -52q22 -24 55 -24q28 0 65 18 q10 5 21 11q59 37 93.5 77.5t46 69t39.5 61t77 56.5q69 32 131 43.5t126 14t99 8.5q304 41 384 174q34 52 53 102t21 74l2 24q2 -6 4 -17.5t7 -45.5q4 -30 4 -60q-1 -4 -1 -7q0 -33 -10.5 -78.5t-30.5 -84.5t-59.5 -79t-95.5 -68q-94 -49 -166 -76t-106 -32t-74 -15t-78 -31 q-107 -58 -107 -146q0 -43 25 -92q36 -62 97 -68q6 -1 12 -1q55 0 111 49q33 29 51.5 72.5t20.5 72.5l2 29q3 -7 7 -19.5t11 -48.5q8 -38 8 -71t-13 -72q-13 -41 -41 -71q-56 -60 -94 -84t-92 -25h-4q-54 0 -138 27q-78 22 -135 26q-20 1 -36 1q-31 -1 -49 -5 q-28 -6 -54 -22q-46 -22 -70 -64q-13 -23 -13 -43q0 -17 9 -31q14 -25 31.5 -35.5t48.5 -5.5t74 31q60 33 102 44.5t100 11.5q122 0 218 -56q25 -16 53 -39t43 -38l16 -15q-9 5 -24.5 13t-61.5 21q-44 14 -86 16q-5 0 -11 1q-38 0 -83 -16q-52 -18 -90 -61 q-74 -82 -122 -114q-46 -31 -79 -31q-1 1 -3 1q-34 2 -90 26q-84 34 -126 46q-12 -18 -12 -56q0 -16 5 -30t10 -20l5 -6q36 0 54 -8q92 0 128 -64q12 -25 17 -50t4 -38l-1 -12q-4 3 -11.5 8.5t-31 17t-47 18t-57 6t-63.5 -13.5q-50 -20 -86 -65.5t-42 -98.5h-424 q-87 0 -152.5 65t-65.5 153z" />
-<glyph unicode="J" d="M305 433q0 152 21 325.5t62 315.5q54 193 138 398q2 4 4 4q9 17 55 27.5t107 10.5q60 0 107 -11t57 -27l2 -4q76 -179 138 -398q1 -2 2 -7t2 -7l28 6l-6 16q-46 160 -86 262q48 138 80 216q4 4 4 6q12 14 56.5 24t99.5 10q57 0 102 -10.5t54 -25.5l4 -4q69 -169 112 -312 l8 -8q5 -4 13 -11.5t30 -32.5t40.5 -53.5t37.5 -73.5t27 -93q5 -27 5 -55q0 -11 -1 -23q-1 -15 -1 -33q0 -32 3 -75q5 -68 22 -126q14 -45 18 -54l-68 -26l-42 -14l-54 -22q-16 31 -30 72q-10 37 -10 102q0 26 2 56q1 29 1 56q0 75 -11 136q-11 57 -41.5 115.5t-52 86 t-36.5 42.5l-12 -2q36 -106 64 -242q19 -87 22.5 -208.5t7.5 -159.5q6 -73 34 -193t32 -171v-8q8 -67 72 -88q5 -3 34 -8q40 64 40 132q0 14 -2 28q0 2 -1 6t-1 6l40 18l128 60q11 -32 14 -80q-1 -57 -11.5 -98.5t-20.5 -54.5l-10 -13l-220 -60l2 4l-10 -4q-26 -8 -53 -8 q-32 0 -65 12q-87 -21 -194 -24q-20 -4 -44 0q-22 0 -34 2q2 22 2 92l156 38q16 3 26 22l-230 -46l-132 -28q0 -10 7.5 -17t18.5 -7l106 26q-8 -104 -8 -114q-3 -20 -22 -34q-41 -20 -94 -36q24 48 24 122h-8q-16 -83 -66 -136q-8 -10 -28 -30q-40 -26 -76 -32q29 34 40 48 q44 59 64 136l6 28q6 24 6 52q4 39 13.5 100t12.5 92q1 13 1 34q0 26 -2 61q-3 65 -17 153q-30 185 -32 356q-1 15 -1 29q0 147 25 185h-10q-21 -19 -39 -51t-25.5 -52t-21.5 -63q-17 -51 -22 -106q-1 -18 -1 -36q0 -38 7 -80q9 -60 19 -102.5t29 -109.5q12 -57 12 -107 q0 -29 -4 -55q0 -1 -46.5 9.5t-93.5 21.5l-46 11v21q0 63 -16 111q-38 80 -45 196q-2 27 -2 51q0 83 19 143q21 96 60 146q-57 -53 -82 -152q-12 -57 -15 -121q-1 -14 -1 -29q0 -51 8 -106q11 -72 36 -124q21 -58 21 -110q0 -10 -1 -20l-10 4q-52 -27 -85.5 -78.5 t-40.5 -89.5l-8 -38l12 -22l12 -6q0 -8 -8 -12q-60 -85 -60 -167q0 -45 18 -89q-78 18 -142 50q-20 12 -20 34q-7 63 -11 159t-4 248zM423 -169q0 6 5 11l54 54q39 -11 74 -16q14 -8 46 -20q70 -23 163 -23q83 0 185 19l10 -14q9 -6 7 -15.5t-11 -14.5q-95 -35 -234 -38 q-14 -2 -27 -2l-27 2q-139 3 -234 38q-11 6 -11 19zM488 19q0 89 64 179h2l178 -86q-46 -78 -46 -154v-14q0 -18 2 -26q1 -8 4 -19.5t4 -14.5q0 -6 4 -10v-4l-22 6q-10 4 -30 8q-61 15 -122 26h-8l-2 2l-14 24q-14 41 -14 83zM548 1472q0 -14 42.5 -24t101.5 -10t101.5 10 t42.5 24q0 15 -41.5 24.5t-102.5 9.5t-102.5 -9.5t-41.5 -24.5zM646 284q19 38 28 42q4 -1 17.5 -6t29 -10.5t27.5 -9.5l-14 -46l-86 30h-2zM942 964q0 -11 8 -18t18 -6l60 10q51 -246 51 -588q0 -52 -1 -106l46 8q-8 403 -70 692l192 36q19 4 26 22zM1038 1560 q0 -13 40.5 -22.5t97.5 -9.5t97.5 9.5t40.5 22.5t-40.5 22.5t-97.5 9.5t-97.5 -9.5t-40.5 -22.5zM1046 -74q16 8 44 24q31 17 28 48q0 6 2 8q20 0 64 -4q14 -2 60 -2q68 0 164 12l28 -28q7 -8 5 -17.5t-11 -12.5q-92 -33 -224 -36q-14 -2 -27 -2l-27 2q-63 0 -106 8z M1610 488l68 26q16 -24 16 -40q-6 -3 -21.5 -9t-28 -10.5t-20.5 -8.5l-8 16z" />
-<glyph unicode="K" d="M126 -198v1798h1798v-1798h-1798zM446 688q0 -20 13 -33t37 -13q25 0 39.5 15t14.5 41q0 19 -12.5 31.5t-35.5 12.5q-26 0 -41 -15t-15 -39zM526 306q0 -18 20 -18h268q8 0 14 5.5t6 12.5q0 20 -20 20q-94 0 -94 48q0 20 14 40l58 138q8 17 20 27.5t30 14.5t29 5t31 1 h252q12 0 12 -10l66 -176q10 -22 10 -46q0 -42 -64 -42q-18 0 -18 -20q0 -18 18 -18h302q16 0 16 18q0 20 -14 20q-49 3 -77.5 23t-44.5 65l-278 722q-6 30 -32 30q-22 0 -42.5 -16.5t-31.5 -39.5l-320 -696q-18 -46 -41.5 -67t-68.5 -21q-9 0 -14.5 -6t-5.5 -14zM840 658v6 l124 272q31 59 38 98q0 6 4 6q2 0 2 -6q6 -51 52 -152l70 -194q4 -6 4 -20t-26 -14h-258q-10 0 -10 4zM1480 688q0 -46 44 -46q27 0 41.5 15t14.5 41q0 19 -12 31.5t-36 12.5q-52 0 -52 -54z" />
-<glyph unicode="P" d="M34 606q0 200 79 384t212 317.5t317 213t386 79.5q201 0 384 -79.5t315.5 -213t210.5 -317t78 -384.5q0 -162 -50 -313.5t-141 -272.5t-212.5 -212t-272.5 -140.5t-312 -49.5q-202 0 -386 77.5t-317 209.5t-212 315.5t-79 385.5zM128 606q0 -182 70.5 -348.5t190.5 -288 t287 -193.5t352 -72q262 0 476 137t326 363q68 139 68 294q0 129 -48.5 245t-131.5 202t-193.5 144t-234.5 77q127 -51 224 -158.5t138 -241.5q36 -100 36 -207q0 -71 -16 -145q-40 -186 -166 -318q-122 -134 -303 -196q-125 -43 -252 -43q-57 0 -115 9q-187 26 -340 151 t-230 303q-77 159 -77 341q0 15 1 31q7 200 104 368q94 173 261.5 289t366.5 149q3 0 12.5 3.5t15.5 4.5q-172 -15 -324.5 -91.5t-261.5 -195.5t-172.5 -278.5t-63.5 -334.5zM282 645q1 -35 4 -71q24 -162 115 -302.5t225 -221.5q138 -80 298 -88q17 -1 33 -1q141 0 265 59 q-84 -24 -170 -24q-122 0 -234 48t-193 129t-129 194.5t-48 238.5q0 231 162 406v8l16 16q110 125 264 198.5t324 73.5q176 0 335.5 -80t264.5 -216q-30 50 -78 110q-116 140 -275.5 221t-332.5 87q-27 2 -54 2q-149 0 -289 -56q-165 -66 -281 -194q-120 -114 -176 -276 q-45 -128 -46 -261zM572 650q0 -22 2 -44q6 -127 92 -235.5t208 -144.5q52 -14 103 -14q69 0 141 26q124 44 186 142q59 90 59 193q1 17 -1 35q-12 122 -96 206q-80 85 -201 97q-19 2 -37 2q-98 0 -170 -55q-88 -63 -114 -178q-7 -28 -7 -58q0 -67 35 -140q61 -94 162 -118 q34 -8 66 -8q65 0 120 32q99 74 110 154q5 25 5 49q0 69 -45 129q-23 33 -64 56.5t-82 29.5q-84 0 -162 -62q-48 -48 -48 -117q0 -20 2 -37q7 -69 86 -132q28 -14 98 -14q-51 0 -89 29.5t-57 76.5v8q-15 30 -15 60q0 43 31 86q47 70 146 70q96 -15 138 -94q25 -34 28 -80 v-11q0 -40 -20 -77q-36 -90 -146 -116q-21 -6 -43 -6l-143 62q-36 36 -56 85q-15 38 -15 76q0 11 1 23q0 71 46.5 130.5t120.5 85.5q39 14 80 14h5q32 0 64 -8q76 -18 131 -78q55 -58 71 -136q6 -31 6 -64q0 -48 -14 -98q-26 -76 -95 -130.5t-153 -68.5q-27 -5 -54 -5 q-57 0 -114 20q-117 41 -186 176q-28 57 -34 128q-2 18 -2 35q0 52 14 99q42 134 172 212q94 56 191 56q37 0 75 -8q144 -15 247 -134.5t109 -271.5q0 -77 -24 -153.5t-68 -132.5q-98 -132 -248 -176q-67 -19 -142 -19q-57 0 -120 11q107 -40 194 -40q143 0 263.5 71.5 t189.5 192.5t69 262q-10 119 -69.5 224.5t-152.5 173.5q-109 88 -256 100q-13 1 -27 1h-13q-123 0 -228 -61q-124 -59 -202 -186q-54 -93 -54 -208z" />
-<glyph unicode="V" d="M155 1198q1 38 21 73q28 49 80 67l718 254q21 8 50 8t50 -8l718 -254q52 -18 80 -67q21 -35 21 -73q0 -15 -3 -30q-6 -30 -14.5 -65.5t-40 -144t-69 -209.5t-102.5 -244t-138.5 -267t-179.5 -258.5t-224 -237.5q-41 -38 -98 -38t-98 38q-118 103 -224 237.5t-179.5 258.5 t-138.5 267t-102.5 244t-69 209.5t-40 144t-14.5 65.5q-3 15 -3 30zM224 1199q0 -8 2 -17q3 -17 13.5 -62.5t39.5 -142.5t66.5 -203t99.5 -240.5t134 -258.5t174.5 -253.5t216.5 -229.5q23 -20 54 -20t54 20q114 101 216.5 230.5t175 253.5t134.5 258.5t99.5 240t66 202.5 t39 142t13.5 63q2 9 2 17q0 21 -11 39q-15 26 -43 36l-718 254q-14 4 -28 4l-28 -4l-718 -254q-28 -10 -43 -36q-11 -19 -11 -39zM306 1198l718 252l718 -252q-4 -18 -11 -50.5t-36 -131.5t-63.5 -197.5t-95.5 -234t-130.5 -256t-170 -248.5t-211.5 -226q-111 98 -211 224.5 t-170.5 251.5t-130 253t-96.5 237t-63 194.5t-37 134.5zM508 1112l96 -242h22q12 0 22 -8.5t14 -17.5l4 -8l254 -626h208l250 618l4 8q14 34 40 34h22l96 242h-284l-232 -586l-232 586h-284z" />
-<glyph unicode="W" d="M24 606q0 203 79.5 388.5t213.5 319t319 213t388 79.5q163 0 315.5 -50.5t275.5 -143t215.5 -215.5t143 -275.5t50.5 -315.5t-50.5 -315.5t-143 -275.5t-215.5 -215.5t-275.5 -143t-315.5 -50.5q-203 0 -388 79.5t-319 213t-213.5 319t-79.5 388.5zM150 606 q0 -252 132 -461.5t352 -320.5l-412 1130q-72 -162 -72 -348zM304 1100h26q68 0 124.5 2.5t79.5 5.5l22 2q28 1 46 -16t19.5 -39.5t-13 -42.5t-42.5 -24t-70 -6l288 -858l194 578l-102 276l-88 10q-22 1 -36.5 14.5t-16.5 31.5t2.5 36t21 29.5t39.5 10.5q52 -10 194 -10 q69 0 125.5 2.5t78.5 5.5l22 2q28 1 46 -16t19.5 -39.5t-13 -42.5t-42.5 -24q-26 -4 -68 -6l286 -850l88 292q68 179 68 288q0 50 -14 102q-21 54 -38 82q-33 51 -45.5 72.5t-27.5 60.5t-15 73q0 62 41 108.5t103 47.5q-117 107 -267 165.5t-315 58.5q-220 0 -410.5 -103 t-309.5 -279zM778 -232q123 -38 246 -38q152 0 290 52q0 2 -2 2l-272 746zM1476 -144q194 118 309 317t115 433q0 208 -96 400q4 -44 4 -66q0 -149 -70 -316z" />
-<glyph unicode="s" horiz-adv-x="1200" d="M604 186q154 133 278.5 378.5t179.5 497.5l-458 168v-24q18 -7 61 -22t65 -24l256 -90q4 -2 17 -7t23 -9t10 -6q0 -6 -4 -18l-428 154v-28q102 -35 178 -64q244 -85 244 -90q0 -4 -6 -16l-416 150v-30l292 -104h30q-1 -2 -2 -5t-2 -5l92 -34q-1 -2 -3 -8t-5 -8l-92 32 l-8 -26q20 -5 57 -18t37 -16l-6 -18l-94 34l-12 -24l98 -34q-3 -13 -8 -20l-96 36q-5 -9 -8 -26l98 -34q-2 -4 -4 -10.5t-4 -9.5l-120 42q-3 0 -9.5 -8t-6.5 -12l128 -46q-1 -2 -4 -9t-6 -9l-126 44q-5 -14 -10 -22l128 -48q-1 -2 -2.5 -6t-3 -6.5t-4.5 -3.5l-124 44 q-2 -4 -10 -24l128 -48l-10 -16l-126 44q-1 -4 -4 -12t-4 -12l124 -46q-1 -2 -4.5 -8t-5.5 -8l-122 44q-2 -4 -5 -12t-5 -12l122 -46l-8 -16l-122 44q-1 -3 -4 -11.5t-4 -14.5l118 -42l-10 -18l-118 42l-8 -24l114 -42q-8 -12 -10 -18l-112 40q-2 -3 -5 -12t-5 -12l106 -36 l2 -4q-8 -12 -12 -16l-104 38l-8 -26l100 -36q-8 -12 -12 -16l-96 34q-8 -16 -10 -24l92 -34q-4 -4 -12 -16l-84 32h-66v-6l134 -48q-8 -12 -14 -16l-120 44v-28l104 -40l-14 -14l-90 32v-28l72 -26q-4 -6 -14 -16l-58 22v-30q28 -8 38 -14l-14 -16q-4 2 -12 5t-12 5v-64z M604 616q10 15 10 24q0 2 -10 2v-26zM604 664l18 -6q1 2 4 10.5t4 15.5l-26 8v-28zM604 714l36 -12q1 4 4 12t4 12l-44 16v-28zM604 764l52 -20q4 10 8 26l-60 20v-26zM604 812l66 -24q9 12 12 24l-78 28v-28zM604 862l86 -32q1 4 2.5 8t3 9t2.5 7l-94 34v-26zM604 910 l102 -36q1 3 4 10.5t4 13.5l-110 40v-28zM604 960l120 -42q1 2 2.5 7t3 9t2.5 8l-128 46v-28zM604 1008l136 -48q3 6 8 26l-144 50v-28zM604 1058l156 -56h74l-230 84v-28z" />
-<glyph unicode="v" horiz-adv-x="1372" d="M155 1059q0 21 10 39q13 24 39 36l460 164q12 4 25 4l25 -4l460 -164q26 -12 39 -36q10 -19 10 -39q0 -6 -1 -13q0 -1 -1 -6q-8 -36 -18 -72.5t-36 -123.5t-63.5 -172t-88 -183.5t-123 -193.5t-154.5 -169q-20 -20 -50 -20q-28 0 -48 20q-102 91 -189 219t-138 238 t-89.5 223.5t-51 165.5t-16.5 74q-1 7 -1 13zM199 1049q0 -5 1 -9q2 -13 8.5 -39.5t24.5 -89t40.5 -128t61 -151t83 -163.5t107.5 -160t133 -145q14 -10 31 -10t29 10q97 87 179.5 209t130 225.5t84.5 214t48.5 156.5t15.5 71q1 6 1 13q0 9 -5 19q-8 16 -24 22l-444 160 q-3 0 -8 1t-8 1l-14 -2l-444 -160q-16 -6 -24 -22q-6 -11 -7 -23zM368 1000h168l152 -390l154 390h168q-6 -15 -16 -43.5t-19 -51.5t-19 -43q-2 -4 -6.5 -6t-10.5 -3.5t-9 -2.5q-5 -3 -8.5 -6.5t-6 -9t-4 -8.5t-4 -10.5t-3.5 -9.5l-24 -60q-108 -273 -128 -324h-126l-54 132 q-8 24 -28 72q-8 24 -28 72l-30 74q-4 9 -9 24t-10.5 27t-14.5 23q-4 4 -9 5.5t-11 1.5t-8 1q-25 61 -56 146z" />
-<glyph unicode="&#x2000;" horiz-adv-x="803" />
-<glyph unicode="&#x2001;" horiz-adv-x="1606" />
-<glyph unicode="&#x2002;" horiz-adv-x="803" />
-<glyph unicode="&#x2003;" horiz-adv-x="1606" />
-<glyph unicode="&#x2004;" horiz-adv-x="535" />
-<glyph unicode="&#x2005;" horiz-adv-x="401" />
-<glyph unicode="&#x2006;" horiz-adv-x="267" />
-<glyph unicode="&#x2007;" horiz-adv-x="267" />
-<glyph unicode="&#x2008;" horiz-adv-x="200" />
-<glyph unicode="&#x2009;" horiz-adv-x="321" />
-<glyph unicode="&#x200a;" horiz-adv-x="89" />
-<glyph unicode="&#x202f;" horiz-adv-x="321" />
-<glyph unicode="&#x205f;" horiz-adv-x="401" />
-<glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" />
-</font>
-</defs></svg> \ No newline at end of file
diff --git a/plugins/jetpack/_inc/fonts/automatticons/automatticons.ttf b/plugins/jetpack/_inc/fonts/automatticons/automatticons.ttf
deleted file mode 100644
index 5f0d103b..00000000
--- a/plugins/jetpack/_inc/fonts/automatticons/automatticons.ttf
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/_inc/fonts/automatticons/automatticons.woff b/plugins/jetpack/_inc/fonts/automatticons/automatticons.woff
deleted file mode 100644
index 6b07c49f..00000000
--- a/plugins/jetpack/_inc/fonts/automatticons/automatticons.woff
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/_inc/fonts/jetpack/jetpack.eot b/plugins/jetpack/_inc/fonts/jetpack/jetpack.eot
deleted file mode 100644
index f4becaf9..00000000
--- a/plugins/jetpack/_inc/fonts/jetpack/jetpack.eot
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/_inc/fonts/jetpack/jetpack.svg b/plugins/jetpack/_inc/fonts/jetpack/jetpack.svg
deleted file mode 100644
index 57a10c6e..00000000
--- a/plugins/jetpack/_inc/fonts/jetpack/jetpack.svg
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<!--
-2017-12-4: Created with FontForge (http://fontforge.org)
--->
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
-<metadata>
-Created by FontForge 20170925 at Mon Dec 4 15:18:51 2017
- By Michael Arestad
-
-</metadata>
-<defs>
-<font id="jetpack" horiz-adv-x="200" >
- <font-face
- font-family="jetpack"
- font-weight="400"
- font-stretch="normal"
- units-per-em="512"
- panose-1="2 0 5 3 0 0 0 0 0 0"
- ascent="448"
- descent="-64"
- bbox="51.2002 -12.7998 460.8 396.8"
- underline-thickness="25.6"
- underline-position="-51.2"
- unicode-range="U+0020-F100"
- />
- <missing-glyph />
- <glyph glyph-name="space" unicode=" "
- />
- <glyph glyph-name="jetpack-logo__icon" unicode="&#xf100;" horiz-adv-x="512"
-d="M256 396.8c112.64 0 204.8 -92.1602 204.8 -204.8s-92.1602 -204.8 -204.8 -204.8s-204.8 92.1602 -204.8 204.8s92.1602 204.8 204.8 204.8zM230.4 166.4v179.199l-102.4 -179.199h102.4zM281.6 38.4004l102.4 179.199h-102.4v-179.199z" />
- </font>
-</defs></svg>
diff --git a/plugins/jetpack/_inc/fonts/jetpack/jetpack.ttf b/plugins/jetpack/_inc/fonts/jetpack/jetpack.ttf
deleted file mode 100644
index 47936c43..00000000
--- a/plugins/jetpack/_inc/fonts/jetpack/jetpack.ttf
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/_inc/fonts/jetpack/jetpack.woff b/plugins/jetpack/_inc/fonts/jetpack/jetpack.woff
deleted file mode 100644
index 347be333..00000000
--- a/plugins/jetpack/_inc/fonts/jetpack/jetpack.woff
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/_inc/footer.php b/plugins/jetpack/_inc/footer.php
deleted file mode 100644
index 434b80f1..00000000
--- a/plugins/jetpack/_inc/footer.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Deprecated. No longer needed.
- *
- * @package Jetpack
- */ \ No newline at end of file
diff --git a/plugins/jetpack/_inc/gallery-settings.js b/plugins/jetpack/_inc/gallery-settings.js
deleted file mode 100644
index 7e7b29f2..00000000
--- a/plugins/jetpack/_inc/gallery-settings.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Jetpack Gallery Settings
- */
-(function($) {
- var media = wp.media;
-
- // Wrap the render() function to append controls.
- media.view.Settings.Gallery = media.view.Settings.Gallery.extend({
- render: function() {
- var $el = this.$el;
-
- media.view.Settings.prototype.render.apply( this, arguments );
-
- // Append the type template and update the settings.
- $el.append( media.template( 'jetpack-gallery-settings' ) );
- media.gallery.defaults.type = 'default'; // lil hack that lets media know there's a type attribute.
- this.update.apply( this, ['type'] );
-
- // Hide the Columns setting for all types except Default
- $el.find( 'select[name=type]' ).on( 'change', function () {
- var columnSetting = $el.find( 'select[name=columns]' ).closest( 'label.setting' );
-
- if ( 'default' === $( this ).val() || 'thumbnails' === $( this ).val() ) {
- columnSetting.show();
- } else {
- columnSetting.hide();
- }
- } ).change();
-
- return this;
- }
- });
-})(jQuery);
diff --git a/plugins/jetpack/_inc/genericons.php b/plugins/jetpack/_inc/genericons.php
deleted file mode 100644
index fc0e6f4f..00000000
--- a/plugins/jetpack/_inc/genericons.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-
-/**
- * Globally registers the 'genericons' style and font.
- *
- * This ensures any theme or plugin using it is on the latest version of Genericons, and helps to avoid conflicts.
- */
-add_action( 'init', 'jetpack_register_genericons', 1 );
-function jetpack_register_genericons() {
- if ( ! wp_style_is( 'genericons', 'registered' ) ) {
- wp_register_style( 'genericons', plugins_url( 'genericons/genericons/genericons.css', __FILE__ ), false, '3.1' );
- }
-}
diff --git a/plugins/jetpack/_inc/genericons/COPYING.txt b/plugins/jetpack/_inc/genericons/COPYING.txt
deleted file mode 100644
index aece214b..00000000
--- a/plugins/jetpack/_inc/genericons/COPYING.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-Genericons is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
-
-The fonts are distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.
-
-This license does not convey any intellectual property rights to third party trademarks that may be included in the icon font; such marks remain subject to all rights and guidelines of use of their owner. \ No newline at end of file
diff --git a/plugins/jetpack/_inc/genericons/LICENSE.txt b/plugins/jetpack/_inc/genericons/LICENSE.txt
deleted file mode 100644
index d159169d..00000000
--- a/plugins/jetpack/_inc/genericons/LICENSE.txt
+++ /dev/null
@@ -1,339 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
diff --git a/plugins/jetpack/_inc/genericons/README.md b/plugins/jetpack/_inc/genericons/README.md
deleted file mode 100644
index 4aa8cc0d..00000000
--- a/plugins/jetpack/_inc/genericons/README.md
+++ /dev/null
@@ -1,218 +0,0 @@
-# Genericons
-
-Genericons are vector icons embedded in a webfont designed to be clean and simple keeping with a generic aesthetic.
-
-Use genericons for instant HiDPI, to change icon colors on the fly, or even with CSS effects such as drop-shadows or gradients!
-
-
-## Usage
-
-To use it, place the `genericons` folder in your stylesheet directory and enqueue the genericons.css file. Now you can create an icon like this:
-
-```
-.my-icon:before {
- content: '\f101';
- font: normal 16px/1 'Genericons';
- display: inline-block;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-```
-
-This will output a comment icon before every element with the class "my-icon". The `content: '\f101';` part of this CSS is easily copied from the helper tool at http://genericons.com/, or `example.html` in the `font` directory.
-
-You can also use the bundled example.css if you'd rather insert the icons using HTML tags.
-
-
-## Building your own Genericons
-
-In the `source` directory, you'll find all Genericons source icons in SVG format. This will allow you to bake your own flavor of Genericons using a tool such as FontCustom (http://fontcustom.com) or Fontello (http://fontello.com). Perhaps you need more logos than are available in the base Genericons package? Just add those logos and bake your own expanded set. Maybe you need just a few of the icons Genericons provides, but would like to trim the fat? Remove the ones you won't need!
-
-
-### FontCustom instructions
-
-FontCustom is a powerful commandline tool which which bakes icon fonts from the SVG source files. It's the tool Genericons is built on, and it provides highly accurate and perfectly crisp icons, *provided all SVGs have the same pixel height*.
-
-It's not that hard to use, and once it's installed you'll never think of icon-fonts the same way again. Seriously, you should try it. Icon fonts for everyone!
-
-1. Install FontCustom. Follow the instructions on the website: http://fontcustom.com/
-2. In the `source` directory from the Genericons download, open the file called `fontcustom.yml` in a text editor. Customize the `font_name` and `css_selector`.
-3. Open a terminal. Browse to the `source` directory. Type `fontcustom compile`.
-
-You'll now receive a brand new subdirectory called `fontcustom-webfont`. Inside here you'll find your very own flavor of Genericons, with only the icons you want, including a handy example page that'll help you copy/paste the necessary glyphs or CSS values.
-
-*Please note*: In the source directory, there's a hidden file called `.fontcustom-manifest.json`. This file is auto-generated by the FontCustom tool, and holds codepoints (unicode addresses) for every glyph, so its address doesn't change when you add or remove icons. If you feel the need to "start fresh" with the unicode addresses, you should delete this file.
-
-
-### Fontello instructions
-
-Fontello is very easy to use. Just drop the SVG files of the icons you want onto their website and download the font. The downside is that Fontello seems to ignore the 16px pixelgrid, so you'll end up with fuzzy icons. Buyer beware.
-
-
-## Notes
-
-**Photoshop mockups**
-
-The `Genericons.ttf` file can be placed in your system fonts folder and used Photoshop or other graphics apps if you like.
-
-If you're using Genericons in your Photoshop mockups, please remember to delete the old version of the font from Font Book, and grab the new one from the zip file. This also affects using it in your webdesigns: if you have an old version of the font installed locally, that's the font that'll be used in your website as well, so if you're missing icons, check for old versions of the font on your system.
-
-**Pixel grid**
-
-Genericons has been designed for a 16x16px grid. That means it'll look sharp at font-size: 16px exactly. It'll also be crisp at multiples thereof, such as 32px or 64px. It'll look reasonably crisp at in-between font sizes such as 24px or 48px, but not quite as crisp as 16 or 32. Please don't set the font-size to 17px, though, that'll just look terrible blurry.
-
-**Antialiasing**
-
-If you keep intact the `-webkit-font-smoothing: antialiased;` and `-moz-osx-font-smoothing: grayscale;` CSS properties. That'll make the icons look their best possible, in Firefox and WebKit based browsers.
-
-**optimizeLegibility**
-
-Note: On Android browsers with version 4.2, 4.3, and probably later, Genericons will simply not show up if you're using the CSS property "text-rendering" set to "optimizeLegibility.
-
-**Updates**
-
-We don't often update icons, but do very carefully when we get good feedback suggesting improvements. Please be mindful if you upgrade, and check that the updated icons behave as you intended.
-
-**Base64 encoding**
-
-By default, Genericons ships with a stylesheet that includes a base64 encoded version of the font. This is to sidestep issues with cross-origin requests for fonts, that happen when a stylesheet loads a font that's stored on a different domain or subdomain. This is very common when using caching plugins.
-
-Base64 encoding comes with a 25% filesize overhead compared to just loading the WOFF file directly. If you know that you won't be loading fonts across domains, or have the ability to edit your server config files to allow it, you can get slightly faster performance by loading Genericons without the base64 encoding. Simply edit `genericons.css` and edit the `@font-face` declaration to match this:
-
-```
-@font-face {
- font-family: 'Genericons';
- src: url('Genericons.woff') format('woff'),
- url('Genericons.ttf') format('truetype'),
- url('Genericons.svg#genericonsregular') format('svg');
- font-weight: normal;
- font-style: normal;
-}
-```
-
-
-
-## Changelog
-
-**3.4.1**
-
-* IE8 support restored.
-
-**3.4**
-
-* Updated: Update Google Plus icon to new geometric version. This also *retires* the "alt" version, so *please be mindful if you choose to update, make sure you use the `f206` glyph, not the `f218` glyph, as it no longer exists!
-* New: Added helper rotation classes to the base CSS, thanks to geminorum. Apply `genericon-rotate-90` to rotate 90 degrees, -180, -270. Or `genericon-flip-horizontal` or -vertical.
-
-*Again, it is important if you choose to update to this version, make sure you're not using `genericon-googleplus-alt` or unicode character `f218`, as that has been retired! Use `genericon-googleplus` and glyph `f206` instead!*
-
-**3.3.1**
-
-Security Hardening: Remove Genericons example.html file. Please visit genericons.com instead.
-
-**3.3**
-
-The Open Source release.
-
-You can now build your own flavors of Genericons with all the SVGs provided.
-
-
-**3.2**
-
-A number of new icons and a couple of quick updates.
-
-* New: Activity
-* New: HTML anchor
-* New: Bug
-* New: Download
-* New: Handset
-* New: Microphone
-* New: Minus
-* New: Plus
-* New: Move
-* New: Rating stars, empty, half, full
-* New: Shuffle
-* New: video camera
-* New: Spotify
-* New: Twitch
-* Update: Fixed geometry in Edit icon
-* Update: Updated Foursquare icon
-* IE8 bugfix, slipstreamed into this.
-
-Twitch and Spotify mark the last social icons that will be added to Genericons.
-Future social icons will have to happen in a separate font.
-
-**3.1**
-
-Genericons is now generated using a commandline tool called FontCustom. This makes it far easier to add new icons to the font, but the switch means the download zip now has a different layout, fonts have different filenames, there's now no .otf font included (but the .ttf should suffice), and the font now has slightly different metrics. I've taken great care to ensure this new version should work as a drop-in replacement, but please be mindful and test carefully if you choose to upgrade.
-
-* Per feedback, the baked-in 16px width and height has been removed from the helper CSS. It wasn't really necessary (the glyph itself has these dimensions naturally), and it caused some headaches.
-* Base64 encoding is now included by default in the helper CSS. This makes it drop-in easy to get Genericons working in Firefox even when using a CDN.
-* Title attribute on website tool.
-* New: Website.
-* New: Ellipsis.
-* New: Foursquare.
-* New: X-post.
-* New: Sitemap.
-* New: Hierarchy.
-* New: Paintbrush.
-* Updated: Show and Hide icons were updated for clarity.
-
-**3.0.3**
-
-Bunch of updates mostly.
-
-* Two new icons, Dropbox and Fullscreen.
-* Updates to all icons containing an exclamation mark.
-* Updates to Image and Quote.
-* Nicer "Share" icon.
-* Bigger default Linkedin icon.
-
-**3.0.2**
-
-A slew of new stuff and updates.
-
-* Social icons: Skype, Digg, Reddit, Stumbleupon, Pocket.
-* New generic icons: heart, lock and print.
-* New editing icons: code, bold, italic, image
-* New interaction icons: subscribe, unsubscribe, subscribed, reply all, reply, flag.
-* The hyperlink icon has been updated to be clearer, chunkier.
-* The "home" icon has been updated for style, size and clarity.
-* The email icon has been updated for style and clarity, and to fit with the new subscribe icons.
-* The document icon has been updated for style.
-* The "pin" icon has been updated for style and clarity.
-* The Twitter icon has been scaled down to fit with the other social icons.
-
-**3.0.1**
-
-Mostly maintenance.
-
-* Fixed an issue with the example page that showed an old "top" icon instead of the actual NEW "refresh" icon.
-* Added inverse Google+ and Path.
-* Replaced tabs with spaces in the helper CSS.
-* Changed the Genericons.com copy/paste tool to serve span's instead of div's for casual icon insertion. It's being converted to "inline-block" anyway.
-
-**3.0**
-
-Mainly maintenance and a few new icons.
-
-* Fast forward, rewind, PollDaddy, Notice, Info, Help, Portfolio
-* Updated the feed icon. It's a bit smaller now for consistency, the previous one was rather big.
-* So, the previous version numbering, 2.09, wasn't very PHP version compare friendly. So from now on it'll be 3.0, 3.1 etc. Props Ipstenu.
-* Genericons.com now has a mini release blog.
-* The CSS has prettier formatting, props Konstantin Obenland.
-
-**2.09**
-
-Updated Facebook icon to new version. Updated Instagram logo to use new one-color version. Updated Google+ icon to use same radius as Instagram and Facebook. Added a bunch of new icons, cog, unapprove, cart, media player buttons, tablet, send to tablet.
-
-**2.06**
-
-Included Base64 encoded version. This is necessary for Genericons to work with CDNs in Firefox. Firefox blocks fonts linked from a different domain. A CDN (typically s.example.com) usually puts the font on a subdomain, and is hence blocked in Firefox.
-
-**2.05**
-
-Added a bunch of new icons, including upload to cloud, download to cloud, many more.
-
-**2.0**
-
-Initial public release
diff --git a/plugins/jetpack/_inc/genericons/genericons.css b/plugins/jetpack/_inc/genericons/genericons.css
deleted file mode 100644
index fe2feba7..00000000
--- a/plugins/jetpack/_inc/genericons/genericons.css
+++ /dev/null
@@ -1,11 +0,0 @@
-@import url('genericons/genericons.css');
-
-/*
-
-
- This file location is deprecated
-
- Please link to the genericons.css file in the font folder instead
-
-
-*/ \ No newline at end of file
diff --git a/plugins/jetpack/_inc/genericons/genericons/Genericons.eot b/plugins/jetpack/_inc/genericons/genericons/Genericons.eot
deleted file mode 100644
index 7322565a..00000000
--- a/plugins/jetpack/_inc/genericons/genericons/Genericons.eot
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/_inc/genericons/genericons/Genericons.svg b/plugins/jetpack/_inc/genericons/genericons/Genericons.svg
deleted file mode 100644
index 47406858..00000000
--- a/plugins/jetpack/_inc/genericons/genericons/Genericons.svg
+++ /dev/null
@@ -1,537 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<!--
-2015-9-18: Created with FontForge (http://fontforge.org)
--->
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
-<metadata>
-Created by FontForge 20150618 at Fri Sep 18 10:24:13 2015
- By Joen Asmussen
-Copyright (c) 2015, Joen Asmussen
-</metadata>
-<defs>
-<font id="Genericons" horiz-adv-x="2048" >
- <font-face
- font-family="Genericons"
- font-weight="400"
- font-stretch="normal"
- units-per-em="2048"
- panose-1="2 0 5 3 0 0 0 0 0 0"
- ascent="2048"
- descent="0"
- bbox="-0.0140489 0 2048.01 2048"
- underline-thickness="102.4"
- underline-position="-204.8"
- unicode-range="U+0020-F517"
- />
- <missing-glyph />
- <glyph glyph-name="space" unicode=" " horiz-adv-x="200"
- />
- <glyph glyph-name="uniF413" unicode="&#xf413;"
-d="M256 1280c565.504 0 1024 -458.496 1024 -1024h-256c0 423.552 -344.448 768 -768 768v256zM256 1792c848.256 0 1536 -687.744 1536 -1536h-256c0 705.792 -574.208 1280 -1280 1280v256zM448 640c106.112 0 192 -86.0156 192 -192s-85.8877 -192 -192 -192
-s-192 86.0156 -192 192s85.8877 192 192 192z" />
- <glyph glyph-name="uniF462" unicode="&#xf462;"
-d="M618.502 1337l-213.004 142.004l-303.335 -455.002l303.335 -455.002l213.004 142.004l-208.665 312.998zM1642.5 1479l-213.004 -142.004l208.665 -312.998l-208.665 -312.998l213.004 -142.004l303.335 455.002zM771.821 543.045l248.357 -62.0898l256 1024
-l-248.357 62.0898z" />
- <glyph glyph-name="uniF457" unicode="&#xf457;"
-d="M1024 1792c424.064 0 768 -343.936 768 -768s-343.936 -768 -768 -768c-424.192 0 -768 343.936 -768 768s343.808 768 768 768zM1024 512c70.6562 0 128 57.4717 128 128s-57.3438 128 -128 128c-70.7842 0 -128 -57.4717 -128 -128s57.2158 -128 128 -128z
-M1342.72 1155.84c24.832 38.9121 37.248 85.1201 37.1201 138.752c0 74.4961 -27.6475 133.504 -83.7119 176.641c-55.9355 43.2637 -133.632 64.7676 -231.936 64.7676c-119.809 0 -234.496 -31.2324 -344.32 -93.9521l91.9043 -180.096
-c89.2158 47.2314 167.168 70.9121 233.983 70.9121c26.752 0 48.5127 -5.37598 65.2803 -16.2559c17.2803 -10.752 25.4717 -25.4727 25.4717 -44.0322c0 -23.2959 -8.06348 -44.0322 -23.5518 -62.208c-16 -18.0479 -41.4717 -38.4004 -77.1836 -60.9277
-c-45.1846 -28.1602 -76.416 -57.0889 -94.3359 -87.04c-17.5361 -29.6963 -26.3682 -66.4326 -26.3682 -109.44v-56.96h203.647v34.0479c0 18.6885 5.50391 35.2002 17.2803 48.8965c12.0322 14.0801 40.96 36.0957 86.9121 66.0479
-c55.04 34.8154 94.5918 71.6797 119.808 110.848z" />
- <glyph glyph-name="uniF403" unicode="&#xf403;"
-d="M1541.38 1530.62l506.624 -506.624l-506.624 -506.624c-131.456 -134.272 -314.752 -217.728 -517.376 -217.728c-202.752 0 -386.048 83.4551 -517.504 217.983l-506.496 506.368v0l506.496 506.496c131.456 134.4 314.624 217.984 517.504 217.984
-c202.752 0 385.92 -83.584 517.376 -217.856zM1404.42 651.776l372.096 372.224l-370.943 370.944c-102.528 104.704 -237.568 161.536 -381.568 161.536c-144.128 0 -279.168 -56.9609 -380.288 -160.385l-372.096 -372.096l370.688 -370.56
-c102.528 -104.96 237.696 -161.792 381.824 -161.792c144 0 279.168 56.832 380.288 160.128zM1408 1024zM640 1024c0 212.096 172.032 384 384 384s384 -171.904 384 -384c0 -211.968 -172.032 -384 -384 -384s-384 172.032 -384 384zM768 1152
-c0 -70.6562 57.2158 -128 128 -128c70.6562 0 128 57.3438 128 128s-57.3438 128 -128 128c-70.7842 0 -128 -57.3438 -128 -128z" />
- <glyph glyph-name="uniF505" unicode="&#xf505;"
-d="M256 1408v256h256v-256h-256zM768 1664h1024v-256h-1024v256zM256 896v256h256v-256h-256zM1408 1152v-256h-640v256h640zM256 384v256h256v-256h-256zM768 384v256h896v-256h-896z" />
- <glyph glyph-name="uniF50F" unicode="&#xf50f;"
-d="M1920 1024l-384 -384v256h-384v-384h256l-384 -384l-384 384h256v384h-384v-256l-384 384l384 384v-256h384v384h-256l384 384l384 -384h-256v-384h384v256z" />
- <glyph glyph-name="uniF307" unicode="&#xf307;"
-d="M768 640v128h128v-128h-128zM768 896v128h128v-128h-128zM768 1152v128h128v-128h-128zM512 640v128h128v-128h-128zM512 896v128h128v-128h-128zM1280 896v128h128v-128h-128zM1024 1152v128h128v-128h-128zM1280 1152v128h128v-128h-128zM1408 1664h256v-1280h-1408
-v1280h256v128h128v-128h640v128h128v-128zM1536 640v640c0 70.7842 -57.2158 128 -128 128h-896c-70.6562 0 -128 -57.2158 -128 -128v-640c0 -70.7842 57.3438 -128 128 -128h896c70.7842 0 128 57.2158 128 128zM1024 896v128h128v-128h-128zM1024 640v128h128v-128h-128z
-" />
- <glyph glyph-name="uniF460" unicode="&#xf460;"
-d="M1664 1280h128l-256 -768h-768l256 768h128l86.2725 256h339.455zM1300.86 1280h214.271l-43.1357 128h-128zM809.728 1536l86.2725 -256l-256 -768h-128l-256 768h128l86.2725 256h339.455zM532.864 1280h214.271l-43.1357 128h-128z" />
- <glyph glyph-name="uniF430" unicode="&#xf430;"
-d="M1024 1453.31l86.6562 -86.6553l-342.656 -342.656h896v-128h-896l342.656 -342.656l-86.6562 -86.6553l-493.312 493.312z" />
- <glyph glyph-name="uniF515" unicode="&#xf515;"
-d="M1024 1920c499.2 0 896 -396.8 896 -896s-396.8 -896 -896 -896s-896 396.8 -896 896s396.8 896 896 896zM1382.4 601.6c38.3994 0 64 25.6006 64 51.2002c0 38.4004 -12.8008 51.2002 -38.4004 64c-153.6 89.6006 -332.8 140.8 -524.8 140.8
-c-115.2 0 -217.601 -25.5996 -320 -51.1992c-25.6006 -12.8008 -51.2002 -25.6006 -51.2002 -64c0 -25.6006 12.7998 -51.2002 51.2002 -51.2002c0 0 25.5996 12.7998 38.3994 12.7998c89.6006 12.7998 192 25.5996 281.601 25.5996
-c166.399 0 332.8 -38.3994 460.8 -115.199c12.7998 -12.8008 25.5996 -12.8008 38.4004 -12.8008zM1484.8 832c38.4004 0 64 38.4004 64 76.7998c0 38.4004 -12.7998 64 -38.3994 76.7998c-179.2 102.4 -409.601 166.4 -640 166.4c-153.601 0 -256 -25.5996 -358.4 -51.2002
-c-38.4004 -12.7998 -51.2002 -38.3994 -51.2002 -76.7998s38.4004 -76.7998 76.7998 -89.5996c12.8008 0 25.6006 12.7998 38.4004 12.7998c76.7998 25.5996 179.2 38.3994 294.4 38.3994c217.6 0 422.399 -51.1992 563.199 -140.8
-c25.6006 0 25.6006 -12.7998 51.2002 -12.7998zM1600 1113.6c38.4004 0 76.7998 38.4004 76.7998 89.6006c0 38.3994 -25.5996 64 -51.2002 76.7998c-204.8 128 -473.6 179.2 -742.399 179.2c-153.601 0 -294.4 -12.7998 -422.4 -51.2002
-c-38.3994 -12.7998 -64 -38.4004 -64 -89.5996c0 -51.2002 38.4004 -89.6006 89.6006 -89.6006c25.5996 0 38.3994 12.7998 51.1992 12.7998c115.2 25.6006 230.4 38.4004 358.4 38.4004c243.2 0 486.4 -51.2002 652.8 -153.6
-c25.6006 -12.8008 38.4004 -12.8008 51.2002 -12.8008z" />
- <glyph glyph-name="uniF448" unicode="&#xf448;"
-d="M512 384v1280h384v-1280h-384zM1152 1664h384v-1280h-384v1280z" />
- <glyph glyph-name="uniF453" unicode="&#xf453;"
-d="M1536 2048c141.312 0 256 -114.688 256 -256v-1536c0 -141.312 -114.688 -256 -256 -256h-1024c-141.312 0 -256 114.688 -256 256v1536c0 141.312 114.688 256 256 256h1024zM1024 128c70.7842 0 128 57.2158 128 128s-57.2158 128 -128 128
-c-70.6562 0 -128 -57.2158 -128 -128s57.3438 -128 128 -128zM1536 512v1280h-1024v-1280h1024z" />
- <glyph glyph-name="uniF419" unicode="&#xf419;"
-d="M0 256v256h2048v-256h-2048zM0 1792h2048v-256h-2048v256zM0 896v256h2048v-256h-2048z" />
- <glyph glyph-name="uniF423" unicode="&#xf423;"
-d="M567.936 1440.9l-267.136 -480.896h403.2v-384h-128v256h-492.8l372.864 671.104zM1644.8 960h403.2v-384h-128v256h-492.8l372.864 671.104l112 -62.207zM1088 1344c176.768 0 320 -143.232 320 -320s-143.232 -320 -320 -320s-320 143.232 -320 320
-s143.232 320 320 320zM1088 832c105.856 0 192 86.1436 192 192s-86.1436 192 -192 192s-192 -86.1436 -192 -192s86.1436 -192 192 -192z" />
- <glyph glyph-name="uniF512" unicode="&#xf512;"
-d="M1920 1280l-555.136 -387.968l212.863 -636.032l-553.728 394.496l-553.728 -394.496l212.991 636.032l-555.264 387.968h685.312l210.688 640l210.688 -640h685.312z" />
- <glyph glyph-name="uniF417" unicode="&#xf417;"
-d="M960 1792c318.08 0 576 -257.92 576 -576c0 -159.232 -64.6396 -303.36 -169.088 -407.68l-406.912 -407.04l-406.912 407.04c-104.448 104.319 -169.088 248.447 -169.088 407.68c0 318.08 257.92 576 576 576zM960 896c176.64 0 320 143.36 320 320
-s-143.36 320 -320 320c-176.768 0 -320 -143.36 -320 -320s143.232 -320 320 -320z" />
- <glyph glyph-name="uniF410" unicode="&#xf410;"
-d="M256 1536h1536v-128l-768 -384l-768 384v128zM256 1216l768 -384l768 384v-704h-1536v704z" />
- <glyph glyph-name="uniF449" unicode="&#xf449;"
-d="M512 512v1024h1024v-1024h-1024z" />
- <glyph glyph-name="uniF467" unicode="&#xf467;"
-d="M1280 1280c282.752 0 512 -229.248 512 -512v-299.904l-150.016 149.889c-99.9688 99.9678 -231.04 150.016 -361.984 150.016h-256v-384l-640 640l640 640v-384h256z" />
- <glyph glyph-name="uniF224" unicode="&#xf224;"
-d="M1536 1792c141.312 0 256 -114.688 256 -256v-384c0 -424.064 -343.936 -768 -768 -768s-768 343.936 -768 768v384c0 141.312 114.688 256 256 256h1024zM1498.5 1189.5c50.0479 50.0479 50.0479 131.072 0 180.992c-50.0479 50.0479 -130.944 50.0479 -180.992 0
-l-293.504 -293.504l-293.504 293.504c-50.0479 50.0479 -131.072 50.0479 -180.992 0c-50.0479 -49.9199 -50.0479 -130.944 0 -180.992l361.984 -361.984l4.22363 4.22461c22.4004 -37.376 61.5684 -63.7441 108.288 -63.7441s85.8877 26.3682 108.288 63.7441
-l4.22363 -4.22461z" />
- <glyph glyph-name="uniF203" unicode="&#xf203;"
-d="M1664 1920c141.312 0 256 -114.688 256 -256v-1280c0 -141.312 -114.688 -256 -256 -256h-281.856v711.168h269.44l12.416 259.456h-281.984v192.384v0.255859v12.0322c0 71.2959 15.2324 114.432 108.544 114.432c86.6562 0 166.017 -0.639648 166.017 -0.639648
-l5.8877 242.304s-77.6963 9.98438 -182.528 9.98438c-259.584 0 -372.096 -159.872 -372.096 -333.952v-236.8h-254.336v-259.328h254.336v-711.296h-723.84c-141.312 0 -256 114.688 -256 256v1280c0 141.312 114.688 256 256 256h1280z" />
- <glyph glyph-name="uniF502" unicode="&#xf502;"
-d="M128 2048h1920l-960 -960z" />
- <glyph glyph-name="uniF412" unicode="&#xf412;"
-d="M1920 832l-640 -640v448h-1024v704l384 384v-704h640v448z" />
- <glyph glyph-name="uniF440" unicode="&#xf440;"
-d="M1152 640v-256h256l-384 -384l-384 384h256v256h256zM1664 1024c141.312 0 256 -114.688 256 -256s-114.688 -256 -256 -256h-384v256h-512v-256h-384c-141.312 0 -256 114.688 -256 256s114.688 256 256 256h6.40039c-4.09668 20.7363 -6.40039 42.1123 -6.40039 64
-c0 176.768 143.232 320 320 320c89.3438 0 169.984 -36.7363 227.968 -95.8721c60.7998 131.84 193.408 223.872 348.032 223.872c211.968 0 384 -171.904 384 -384c0 -45.1836 -9.21582 -87.8076 -23.5518 -128h23.5518z" />
- <glyph glyph-name="uniF305" unicode="&#xf305;"
-d="M1408 1664h256v-1280h-1408v1280h256v128h128v-128h640v128h128v-128zM1536 640v640c0 70.7842 -57.2158 128 -128 128h-896c-70.6562 0 -128 -57.2158 -128 -128v-640c0 -70.7842 57.3438 -128 128 -128h896c70.7842 0 128 57.2158 128 128zM960 1280
-c35.3281 0 64 -28.6719 64 -64v-512c0 -35.3281 -28.6719 -64 -64 -64s-64 28.6719 -64 64v448h-64c-35.3281 0 -64 28.6719 -64 64s28.6719 64 64 64h128z" />
- <glyph glyph-name="uniF443" unicode="&#xf443;"
-d="M1152 1664l384 -384v-121.472v-6.52832v-768h-1024v1280h512h128zM1408 512v640h-256h-128v128v256h-384v-1024h768z" />
- <glyph glyph-name="uniF411" unicode="&#xf411;"
-d="M1280 1728l448 -448l-896 -896h-448v448zM1280 1536l-594.688 -594.688l96 -96l594.688 594.688zM768 512l128 128l-96 96v0l-64 64v0l-96 96l-128 -128zM845.312 781.312l96 -96l594.688 594.688l-96 96z" />
- <glyph glyph-name="uniF402" unicode="&#xf402;"
-d="M896 1536v-256h256v-128h-256v-256h-128v256h-256v128h256v256h128zM1297.15 878.848l494.848 -494.848l-128 -128l-494.848 494.848c-94.8486 -68.9912 -210.816 -110.848 -337.152 -110.848c-318.08 0 -576 257.92 -576 576s257.92 576 576 576s576 -257.92 576 -576
-c0 -126.336 -41.8564 -242.304 -110.848 -337.152zM832 768c247.552 0 448 200.576 448 448s-200.448 448 -448 448c-247.424 0 -448 -200.576 -448 -448s200.576 -448 448 -448z" />
- <glyph glyph-name="uniF420" unicode="&#xf420;"
-d="M483.2 1564.8l-227.2 227.2h640v-640l-232.32 232.32c-93.0557 -92.1602 -151.68 -218.88 -151.68 -360.32c0 -238.208 163.584 -436.736 384 -493.824v-262.656c-363.008 61.0566 -640 376.064 -640 756.48c0 212.096 88.0645 402.048 227.2 540.8zM1792 1024
-c0 -212.096 -88.0645 -401.92 -227.2 -540.8l227.2 -227.2h-640v640l18.5596 -18.5596l213.761 -213.761c93.0557 92.1602 151.68 218.88 151.68 360.32c0 238.208 -163.584 436.736 -384 493.824v262.656c363.008 -61.0566 640 -376.064 640 -756.48z" />
- <glyph glyph-name="uniF425" unicode="&#xf425;"
-d="M704 1024c35.3281 0 64 -28.6719 64 -64s-28.6719 -64 -64 -64s-64 28.6719 -64 64s28.6719 64 64 64zM704 1280c35.3281 0 64 -28.6719 64 -64s-28.6719 -64 -64 -64s-64 28.6719 -64 64s28.6719 64 64 64zM704 768c35.3281 0 64 -28.6719 64 -64s-28.6719 -64 -64 -64
-s-64 28.6719 -64 64s28.6719 64 64 64zM896 896v128h384v-128h-384zM896 640v128h384v-128h-384zM1280 1664h256v-1280h-1152v1280h256c0 70.7842 57.3438 128 128 128h384c70.7842 0 128 -57.2158 128 -128zM832 1664c-35.3281 0 -64 -28.6719 -64 -64s28.6719 -64 64 -64
-h256c35.3281 0 64 28.6719 64 64s-28.6719 64 -64 64h-256zM1408 512v1024h-128v-128h-640v128h-128v-1024h896zM896 1152v128h384v-128h-384z" />
- <glyph glyph-name="uniF508" unicode="&#xf508;"
-d="M1450.5 1395.2c45.6963 -69.376 124.288 -115.2 213.504 -115.2c5.50391 0 10.4961 1.28027 15.8721 1.66406l-399.872 -799.872l-256 512l-256 -512l-128 256l-256 -512l-299.776 599.424l228.992 114.561l70.7842 -141.568l256 512l128 -256l256 512l256 -512z
-M1664 1728c106.112 0 192 -86.0156 192 -192s-85.8877 -192 -192 -192s-192 86.0156 -192 192s85.8877 192 192 192z" />
- <glyph glyph-name="uniF507" unicode="&#xf507;"
-d="M1792 604.544c76.2881 -44.416 128 -126.08 128 -220.544c0 -141.312 -114.688 -256 -256 -256s-256 114.688 -256 256c0 94.5918 51.7119 176.128 128 220.544v163.456c0 70.7842 -57.2158 128 -128 128h-256v-291.456c76.2881 -44.416 128 -126.08 128 -220.544
-c0 -141.312 -114.688 -256 -256 -256s-256 114.688 -256 256c0 94.4639 51.8398 176.128 128 220.544v291.456h-256c-70.6562 0 -128 -57.2158 -128 -128v-163.456c76.1602 -44.416 128 -126.08 128 -220.544c0 -141.312 -114.688 -256 -256 -256s-256 114.688 -256 256
-c0 94.4639 51.8398 176.128 128 220.544v163.456c0 212.096 171.904 384 384 384h256v291.456c-76.1602 44.416 -128 126.08 -128 220.544c0 141.312 114.688 256 256 256s256 -114.688 256 -256c0 -94.4639 -51.7119 -176.128 -128 -220.544v-291.456h256
-c211.968 0 384 -171.904 384 -384v-163.456zM1024 1792c-70.6562 0 -128 -57.3438 -128 -128s57.3438 -128 128 -128s128 57.3438 128 128s-57.3438 128 -128 128zM384 256c70.6562 0 128 57.2158 128 128s-57.3438 128 -128 128s-128 -57.2158 -128 -128
-s57.3438 -128 128 -128zM1024 256c70.6562 0 128 57.2158 128 128s-57.3438 128 -128 128s-128 -57.2158 -128 -128s57.3438 -128 128 -128zM1664 256c70.7842 0 128 57.2158 128 128s-57.2158 128 -128 128s-128 -57.2158 -128 -128s57.2158 -128 128 -128z" />
- <glyph glyph-name="uniF306" unicode="&#xf306;"
-d="M1151.87 1219.46c0.12793 -0.511719 0.12793 -0.896484 0.12793 -1.4082v-1.79199v-0.255859c0 -5.12012 -0.639648 -10.3682 -1.91992 -15.4883l-128 -512c-8.57617 -34.1758 -43.2637 -55.04 -77.5684 -46.5918c-34.3037 8.57617 -55.168 43.2637 -46.5918 77.5684
-l108.16 432.512h-174.08c-35.3281 0 -64 28.6719 -64 64s28.6719 64 64 64h256h1.53613h1.28027c1.02344 -0.12793 1.91992 -0.12793 2.81543 -0.255859h0.255859c30.3359 -2.68848 54.5283 -26.624 57.8564 -56.96v0c0 -0.768555 0.12793 -1.4082 0.12793 -2.04785
-v-1.28027zM1408 1664h256v-1280h-1408v1280h256v128h128v-128h640v128h128v-128zM1536 640v640c0 70.7842 -57.2158 128 -128 128h-896c-70.6562 0 -128 -57.2158 -128 -128v-640c0 -70.7842 57.3438 -128 128 -128h896c70.7842 0 128 57.2158 128 128z" />
- <glyph glyph-name="uniF406" unicode="&#xf406;"
-d="M2048 1920l-832 -832l832 -832l-128 -128l-832 832l-832 -832l-128 128l832 832l-832 832l128 128l832 -832l832 832z" />
- <glyph glyph-name="uniF215" unicode="&#xf215;"
-d="M1664 1920c141.312 0 256 -114.688 256 -256v-1280c0 -141.312 -114.688 -256 -256 -256h-1280c-141.312 0 -256 114.688 -256 256v1280c0 141.312 114.688 256 256 256h1280zM1024 1408c-212.096 0 -384 -171.904 -384 -384c0 -211.968 171.904 -384 384 -384
-c211.968 0 384 172.032 384 384c0 212.096 -172.032 384 -384 384zM1792 384v768h-274.176c10.624 -41.0879 18.1758 -83.4561 18.1758 -128c0 -282.752 -229.248 -512 -512 -512s-512 229.248 -512 512c0 44.5439 7.42383 86.9121 18.1758 128h-274.176v-768
-c0 -70.7842 57.3438 -128 128 -128h1280c70.7842 0 128 57.2158 128 128zM1792 1536v128c0 70.6562 -57.2158 128 -128 128h-128c-70.7842 0 -128 -57.3438 -128 -128v-128c0 -70.6562 57.2158 -128 128 -128h128c70.7842 0 128 57.3438 128 128z" />
- <glyph glyph-name="uniF202" unicode="&#xf202;"
-d="M1920 1583.74c-49.2803 -73.7285 -111.744 -138.368 -183.552 -190.208c0.767578 -15.7441 1.2793 -31.6162 1.2793 -47.4883c0 -485.76 -369.92 -1046.02 -1046.27 -1046.02c-207.616 0 -400.768 60.7998 -563.456 165.248
-c28.7998 -3.45605 58.1123 -5.24805 87.8076 -5.24805c172.032 0 330.752 58.752 456.448 157.439c-160.768 2.81641 -296.576 108.929 -343.424 255.104c22.5283 -3.96777 45.4404 -6.52832 69.248 -6.52832c33.5361 0 65.9199 4.48047 96.7676 12.7998
-c-168.319 33.792 -294.912 182.272 -294.912 360.448v4.73633c49.6641 -27.5205 106.368 -44.0322 166.528 -45.9521c-98.6875 65.9199 -163.456 178.432 -163.456 305.92c0 67.3281 18.1758 130.688 49.792 184.96c181.376 -222.464 452.353 -368.768 757.889 -384.128
-c-6.27246 26.8799 -9.60059 54.9121 -9.60059 83.7119c0 203.008 164.608 367.616 367.616 367.616c105.855 0 201.472 -44.6719 268.544 -116.096c83.584 16.5117 162.304 47.1035 233.216 89.2158c-27.3916 -85.8887 -85.7598 -157.952 -161.536 -203.393
-c74.3682 8.83203 145.152 28.5439 211.072 57.8564z" />
- <glyph glyph-name="uniF222" unicode="&#xf222;"
-d="M1223.94 775.936c20.0967 20.0967 52.0967 19.9688 72.0645 0c19.9678 -19.9678 19.9678 -52.9912 0 -72.96c-56.96 -56.96 -145.92 -86.0156 -270.976 -86.0156c-126.977 0 -216.064 29.0557 -273.024 86.0156c-19.9678 19.9688 -19.9678 52.9922 0 72.96
-c19.9678 19.9688 51.9678 19.9688 71.9355 0c38.0166 -38.0156 103.04 -56.0635 199.04 -56.0635c97.9209 0 162.944 18.0479 200.96 56.0635zM894.976 982.016c0 -61.0557 -49.9199 -112 -112 -112c-60.9277 0 -110.976 50.9443 -110.976 112
-c0 61.9521 49.9199 112 110.976 112c61.9521 0 112 -50.0479 112 -112zM1265.02 1094.02c61.9512 0 112 -50.0479 112 -112c0 -61.0557 -50.0488 -112 -112 -112c-61.9521 0 -112 50.9443 -112 112c0 61.9521 50.0479 112 112 112zM1698.05 1089.02
-c24.96 17.9199 43.0078 45.9512 43.1357 78.9756c0 54.0156 -44.0312 98.0479 -98.0479 98.0479c-32 0 -57.9834 -16 -76.0322 -39.04c53.8887 -39.9355 98.9443 -87.04 130.944 -137.983zM1021.06 500.992c347.904 0 631.937 177.023 632.064 393.983
-c0 219.009 -284.032 396.032 -632.064 396.032c-349.056 0 -632.96 -177.023 -632.96 -395.008s283.904 -395.008 632.96 -395.008zM306.944 1168c0 -30.9756 16 -57.9844 39.9355 -74.8799c32 50.9443 76.9277 97.0234 131.968 136.96
-c-17.9199 22.0156 -43.0078 35.9678 -72.96 35.9678c-54.9121 0 -98.9434 -44.0322 -98.9434 -98.0479zM1600 1805.06c-41.9844 0 -77.0557 -35.0713 -77.0557 -77.0557s35.0713 -77.0557 77.0557 -77.0557s77.0557 34.9434 77.0557 77.0557
-s-35.0713 77.0557 -77.0557 77.0557zM1842.94 1168c0 -75.0078 -41.9844 -137.984 -101.889 -173.056c8.95996 -32 13.9521 -64.8965 13.9521 -98.9443c0 -274.944 -329.088 -498.048 -734.08 -498.048s-734.976 222.976 -734.976 497.023
-c0 35.9688 6.01562 70.0166 16.1279 104.064c-57.9844 34.9443 -97.0244 97.0244 -97.0244 168.96c0 110.976 89.9844 200.96 200.96 200.96c66.0488 0 124.032 -32.8955 160 -82.9443c114.944 60.9287 257.024 99.9688 411.904 105.984l92.0322 456.96
-c3.07227 14.0801 11.0078 25.9844 23.04 33.0244c12.0322 8.06348 25.9834 9.9834 39.04 7.04004l312.96 -72.0645c30.9756 52.9922 88.96 89.9844 155.008 89.9844c98.9443 0 179.072 -80 179.072 -178.944s-80 -178.944 -178.944 -178.944
-c-95.1035 0 -172.032 73.9844 -178.048 167.937l-262.016 60.0322l-77.0566 -386.049c148.992 -7.93555 285.952 -46.9756 397.057 -108.031c35.9678 51.9678 94.9756 86.0156 162.943 86.0156c109.952 0 199.937 -89.9844 199.937 -200.96z" />
- <glyph glyph-name="uniF214" unicode="&#xf214;"
-d="M1091.2 1920v-452.992h425.216v-281.216h-425.216v-459.52c0 -103.937 5.50391 -170.624 16.6396 -200.192c10.8799 -29.3125 31.4883 -52.8643 61.3125 -70.5283c39.6797 -23.8076 84.8633 -35.7119 135.936 -35.7119c90.624 0 180.864 29.4404 270.72 88.4482v-282.624
-c-76.6719 -35.9678 -146.048 -61.3125 -208 -75.9043c-61.9512 -14.4639 -129.023 -21.7598 -201.216 -21.7598c-81.9199 0 -154.368 10.3682 -217.344 30.9756c-62.9756 20.6084 -116.608 50.3047 -161.024 88.4482c-44.5439 38.2725 -75.2637 78.9766 -92.416 122.112
-c-17.1514 43.1357 -25.7275 105.6 -25.7275 187.52v628.736h-198.016v253.568c70.3994 22.9121 130.688 55.6797 180.863 98.4316c50.3047 42.624 90.4961 93.8242 120.832 153.856c30.3359 59.7754 51.2002 135.808 62.7207 228.352h254.72z" />
- <glyph glyph-name="uniF104" unicode="&#xf104;"
-d="M512 1664l1152 -640l-1152 -640v1280z" />
- <glyph glyph-name="uniF50B" unicode="&#xf50b;"
-d="M1408 1152l-384 -384l-384 384h256v512h256v-512h256zM384 640h1280v-256h-1280v256z" />
- <glyph glyph-name="uniF409" unicode="&#xf409;"
-d="M1024 1664l640 -512l-128 -128v-512h-1024v512l-128 128zM1152 576v448h-256v-448h256z" />
- <glyph glyph-name="uniF458" unicode="&#xf458;"
-d="M1920 1024l-1024 -640v480l-768 -480v1280l768 -480v480z" />
- <glyph glyph-name="uniF218" unicode="&#xf218;"
-d="M729.6 1152h550.4s12.7998 -38.4004 12.7998 -89.5996c0 -332.801 -230.399 -563.2 -563.2 -563.2c-320 0 -588.8 268.8 -588.8 588.8s281.601 588.8 588.8 588.8c153.601 0 294.4 -51.2002 384 -153.6l-153.6 -153.601c-38.4004 25.6006 -102.4 76.8008 -230.4 76.8008
-c-204.8 0 -371.199 -166.4 -371.199 -371.2s166.399 -371.2 371.199 -371.2c230.4 0 320 166.4 332.801 243.2h-332.801v204.8zM1664 1152h128v-128h-128v-128h-128v128h-128v128h128v128h128v-128z" />
- <glyph glyph-name="uniF513" unicode="&#xf513;"
-d="M1920 1280l-555.136 -387.968l212.863 -636.032l-553.728 394.496l-553.728 -394.496l212.991 636.032l-555.264 387.968h685.312l210.688 640l210.688 -640h685.312zM1024 807.68l307.584 -219.136l-118.4 353.536l300.288 209.92h-371.456l-118.016 358.528v-702.849z
-" />
- <glyph glyph-name="uniF301" unicode="&#xf301;"
-d="M704 1152h960l-256 -640h-1024v1024h384l64 -128h448v-128h-640l-128 -256h128z" />
- <glyph glyph-name="uniF474" unicode="&#xf474;"
-d="M128 1408v384h384zM640 768v512h768v-512h-768zM1536 1792h384v-384zM128 640l384 -384h-384v384zM1536 256l384 384v-384h-384zM1536 1408l256 384l128 -128zM1536 640l384 -256l-128 -128zM128 384l384 256l-256 -384zM128 1664l128 128l256 -384z" />
- <glyph glyph-name="uniF438" unicode="&#xf438;"
-d="M1280 1792c141.312 0 256 -114.688 256 -256v-1024c0 -141.312 -114.688 -256 -256 -256h-512c-141.312 0 -256 114.688 -256 256v384h128v-128h768v768h-768v-128h-128v128c0 141.312 114.688 256 256 256h512zM1024 384c70.7842 0 128 57.2158 128 128
-s-57.2158 128 -128 128c-70.6562 0 -128 -57.2158 -128 -128s57.3438 -128 128 -128zM768 896v128h-512v256h512v128l384 -256z" />
- <glyph glyph-name="uniF451" unicode="&#xf451;"
-d="M256 384v1280l1024 -640zM1408 1664h384v-1280h-384v1280z" />
- <glyph glyph-name="uniF404" unicode="&#xf404;"
-d="M1024 640c-19.8398 0 -39.04 2.43164 -57.8564 5.63184l436.225 436.225c3.2002 -18.8164 5.63184 -38.0166 5.63184 -57.8564c0 -211.968 -172.032 -384 -384 -384zM1696.26 1375.74l351.744 -351.744l-506.624 -506.624
-c-131.456 -134.272 -314.752 -217.728 -517.376 -217.728c-117.248 0 -226.944 29.3115 -324.864 79.1035l147.072 146.944c56.7041 -20.6084 115.968 -34.0479 177.92 -34.0479c144 0 279.168 56.832 380.288 160.128l372.096 372.224l-216.063 215.936zM1606.02 1722.11
-l128.641 -129.024l-1279.87 -1279.87l-128.896 128.769l128 128.128l-453.888 453.888v0l506.496 506.496c131.456 134.4 314.624 217.984 517.504 217.984c170.368 0 324.48 -61.8242 448 -160.385zM896 1024c70.6562 0 128 57.3438 128 128s-57.3438 128 -128 128
-c-70.7842 0 -128 -57.3438 -128 -128s57.2158 -128 128 -128zM1229.18 1345.28l105.729 105.728c-90.752 66.8164 -197.12 105.473 -310.912 105.473c-144.128 0 -279.168 -56.9609 -380.288 -160.385l-372.096 -372.096l318.208 -318.336l113.023 113.024
-c-38.6553 59.5195 -62.8477 129.023 -62.8477 205.312c0 212.096 172.032 384 384 384c76.2881 0 145.792 -24.1924 205.184 -62.7197z" />
- <glyph glyph-name="uniF209" unicode="&#xf209;"
-d="M1073.15 2048c481.664 0 798.976 -348.672 798.976 -722.944c0 -495.104 -275.328 -865.151 -680.96 -865.151c-136.32 0 -264.448 73.7275 -308.352 157.439c0 0 -73.2168 -290.943 -88.832 -347.136c-26.8809 -97.2803 -79.2324 -194.56 -127.104 -270.208
-l-148.992 54.0156c-3.58398 88.3203 -0.639648 194.049 22.0166 289.92c24.1914 102.4 162.304 687.744 162.304 687.744s-40.3203 80.6406 -40.3203 199.809c0 187.008 108.544 326.784 243.456 326.784c114.816 0 170.24 -86.1445 170.24 -189.44
-c0 -115.328 -73.7275 -288 -111.488 -448c-31.6152 -133.632 67.2002 -242.816 199.168 -242.816c239.232 0 400.128 307.072 400.128 670.977c0 276.607 -186.367 483.712 -525.184 483.712c-382.72 0 -621.312 -285.568 -621.312 -604.544
-c0 -110.08 32.5117 -187.521 83.1992 -247.424c23.5527 -27.7764 26.624 -38.9121 18.3047 -70.6562c-6.0166 -23.04 -19.9688 -78.9766 -25.7285 -101.248c-8.44824 -32 -34.3037 -43.2637 -63.2314 -31.3604c-176.257 71.6807 -258.433 264.96 -258.433 482.048
-c0 358.656 302.336 788.48 902.145 788.48z" />
- <glyph glyph-name="uniF217" unicode="&#xf217;"
-d="M1024 1920c494.08 0 896 -402.048 896 -896c0 -494.08 -401.92 -896 -896 -896c-493.952 0 -896 401.92 -896 896c0 493.952 402.048 896 896 896zM1112.83 1769.47c-211.2 10.4961 -420.864 -73.4717 -564.608 -220.16
-c-146.432 -144.256 -216.063 -354.176 -189.695 -551.68c23.4238 -197.248 142.592 -378.496 307.584 -476.032c160.768 -96 365.312 -104.191 530.943 -29.0557c-47.1035 -13.0557 -96.6396 -20.3516 -147.712 -20.3516c-303.487 0 -550.399 246.911 -550.399 550.399
-c0 143.872 55.6797 274.944 146.304 373.12c1.02441 1.02441 1.91992 1.91992 2.81641 2.94434c4.60742 4.73535 9.08789 9.47168 13.6953 14.208c0.512695 0.383789 0.896484 1.02344 1.4082 1.2793c128 148.353 317.056 242.177 528.256 242.177
-c221.057 0 418.176 -102.912 546.048 -263.424c-20.8633 33.5352 -44.0312 65.6631 -69.376 95.6152c-137.983 168.832 -343.68 273.408 -555.264 280.96zM1415.04 1006.21c4.35156 -90.3682 -25.3438 -182.912 -80.7676 -257.152
-c-55.5527 -73.8555 -135.169 -129.664 -225.28 -156.928c-74.8799 -22.7842 -156.544 -25.5996 -234.112 -7.04004c54.0166 -21.6318 112.896 -33.6641 174.464 -33.6641c259.968 0 471.296 211.456 471.296 471.296c0 0.768555 -0.12793 1.66406 -0.12793 2.68848
-c-13.6953 142.336 -88.1914 276.352 -200.319 359.168c-137.345 104.576 -332.288 116.864 -479.232 38.0156c-73.2158 -38.5273 -136.832 -97.1514 -176.896 -166.912c-40.5762 -69.8877 -58.4961 -151.68 -52.2246 -230.912
-c10.624 -158.976 124.8 -305.023 271.616 -345.216c146.432 -44.0322 313.344 19.584 391.936 142.849c82.5605 120.447 62.7207 293.119 -36.3516 391.68c-94.0801 104.192 -260.992 115.968 -367.872 36.8643c-54.0156 -38.6562 -92.5439 -94.3359 -105.344 -157.057
-c-13.3125 -62.0801 -1.66406 -128.64 30.4639 -181.76c32.1279 -53.7598 83.7119 -93.5684 141.952 -108.032c58.2402 -15.1035 121.6 -4.86328 171.52 25.6006c50.5605 30.4639 87.5518 80.1279 97.9199 135.68c11.3926 55.2959 -1.66406 114.432 -34.3037 158.848
-c-32.1279 45.5684 -82.8164 73.3447 -135.936 76.9287c-52.9922 4.0957 -105.856 -17.2803 -141.568 -54.2725c-36.6084 -35.9678 -52.0957 -89.0879 -44.6719 -137.855c7.55176 -48.6406 38.2715 -93.6963 80 -115.584c26.4961 -14.7207 57.4717 -19.8408 86.9121 -16.3848
-c-62.0801 1.53613 -114.177 43.2646 -131.456 100.097c-0.512695 0.767578 -1.02441 1.66406 -1.4082 2.6875c-17.9199 41.4717 -13.0557 94.3359 16.1279 133.376c28.416 38.7842 77.5684 63.3604 128.768 60.7998c51.0723 -1.66406 101.376 -33.0234 128 -78.9756
-c27.3926 -45.8242 32 -106.752 7.80859 -158.336c-24.0645 -51.7119 -73.7285 -90.2402 -131.584 -101.632c-57.4717 -12.416 -122.752 4.73535 -167.68 47.3594c-44.8008 40.96 -72.0645 104.192 -67.4561 168.32c3.83984 133.12 150.911 237.44 287.104 200.96
-c138.368 -31.6162 226.944 -196.736 173.824 -338.304c-48.6406 -142.72 -224.769 -225.536 -373.888 -166.912c-74.1123 27.5195 -134.784 85.8877 -169.729 157.568c-34.9443 72.1914 -42.2402 158.592 -17.9199 237.695c47.8721 161.664 226.176 269.185 398.848 238.464
-c175.36 -25.5996 313.217 -192.64 317.568 -374.016zM1024 207.488c319.232 0 595.968 184.319 730.112 451.712c37.248 84.7354 58.8799 175.744 58.8799 265.728c0 318.977 -247.04 554.368 -553.216 607.616c154.496 -64 279.296 -200.32 331.52 -362.496
-c70.1445 -203.136 20.8643 -447.872 -133.12 -608.896c-148.224 -162.944 -384.384 -245.633 -608.128 -206.208c-226.048 35.584 -422.912 198.271 -517.504 407.936c-97.792 209.408 -90.3682 468.224 26.8799 674.432c116.736 206.337 329.344 354.433 566.272 395.009
-c11.7754 2.17578 23.6797 3.96777 35.584 5.37598c-420.992 -32.1279 -753.664 -384.641 -753.664 -813.696c0 -450.304 366.208 -816.512 816.384 -816.512z" />
- <glyph glyph-name="uniF469" unicode="&#xf469;"
-d="M256 1280h1536v-768h-256v384h-1024v-384h-256v768zM1408 1664v-256h-768v256h768zM1408 640c0 -98.3037 37.5039 -196.48 112.512 -271.488l112.513 -112.512h-768l-112.513 112.512c-75.0078 75.0078 -112.512 173.185 -112.512 271.488v128h768v-128z" />
- <glyph glyph-name="uniF476" unicode="&#xf476;"
-d="M384 1248c123.776 0 224 -100.224 224 -224c0 -123.648 -100.224 -224 -224 -224s-224 100.352 -224 224c0 123.776 100.224 224 224 224zM1024 1248c123.648 0 224 -100.224 224 -224c0 -123.648 -100.352 -224 -224 -224c-123.776 0 -224 100.352 -224 224
-c0 123.776 100.224 224 224 224zM1664 1248c123.648 0 224 -100.224 224 -224c0 -123.648 -100.352 -224 -224 -224s-224 100.352 -224 224c0 123.776 100.352 224 224 224z" />
- <glyph glyph-name="uniF211" unicode="&#xf211;"
-d="M1472 1440c229.888 0 416 -186.24 416 -416s-186.112 -416 -416 -416s-416 186.24 -416 416s186.112 416 416 416zM576 1440c229.76 0 416 -186.24 416 -416s-186.24 -416 -416 -416s-416 186.24 -416 416s186.24 416 416 416z" />
- <glyph glyph-name="uniF456" unicode="&#xf456;"
-d="M1024 1792c424.064 0 768 -343.936 768 -768s-343.936 -768 -768 -768c-424.192 0 -768 343.936 -768 768s343.808 768 768 768zM1024 512c70.7842 0 128 57.2158 128 128s-57.2158 128 -128 128c-70.6562 0 -128 -57.2158 -128 -128s57.3438 -128 128 -128zM1113.22 896
-l51.584 640h-281.6l51.2002 -640h178.815z" />
- <glyph glyph-name="uniF471" unicode="&#xf471;"
-d="M512 1664h358.656c163.328 0 281.855 -23.2959 355.712 -69.7598c73.7275 -46.4639 110.592 -120.448 110.592 -221.824c0 -68.8643 -16.1279 -125.312 -48.3838 -169.344c-32.3838 -44.1602 -75.2646 -70.6562 -128.769 -79.6162v-7.93652
-c72.96 -16.2559 125.568 -46.7197 157.952 -91.3916c32.2559 -44.6719 48.5127 -104.063 48.5127 -178.048c0 -105.088 -38.0166 -187.008 -113.921 -245.888c-76.0312 -58.8809 -178.943 -88.1924 -309.248 -88.1924h-431.104v1152zM768 1207.81h130.176
-c66.3047 0 114.176 10.2402 143.872 30.7207c29.5684 20.4795 44.5439 54.3994 44.5439 101.632c0 44.1602 -16.1279 75.7754 -48.5117 94.9756c-32.3838 19.0723 -83.4561 28.7998 -153.344 28.7998h-116.736v-256.128zM768 1013.89v-300.16h147.456
-c67.2002 0 116.864 12.9287 148.864 38.6562c32.1279 25.7285 48.1279 65.1523 48.1279 118.145c0 95.6152 -68.3525 143.487 -204.929 143.487h-139.52v-0.12793z" />
- <glyph glyph-name="uniF433" unicode="&#xf433;"
-d="M0 896l896 -896h-896v896z" />
- <glyph glyph-name="uniF447" unicode="&#xf447;"
-d="M1408 512c70.7842 0 128 -57.2158 128 -128s-57.2158 -128 -128 -128s-128 57.2158 -128 128s57.2158 128 128 128zM640 512c70.6562 0 128 -57.2158 128 -128s-57.3438 -128 -128 -128s-128 57.2158 -128 128s57.3438 128 128 128zM1536 896h-896v-128h896v-128h-1024
-v1024h-256v128h384v-256h1152z" />
- <glyph glyph-name="uniF511" unicode="&#xf511;"
-d="M1024 1510.53l-118.016 -358.528h-371.328l300.288 -209.92l-118.272 -353.28l307.328 218.88l307.584 -219.136l-118.4 353.536l300.288 209.92h-371.456zM1024 1920v0l210.688 -640h685.312l-555.136 -387.968l212.863 -636.032l-553.728 394.496l-553.728 -394.496
-l212.991 636.032l-555.264 387.968h685.312z" />
- <glyph glyph-name="uniF427" unicode="&#xf427;"
-d="M1717.72 1436.21c99.7246 -99.7246 99.7246 -261.281 0 -361.006l-232.861 -232.989c-98.5723 -98.5723 -257.44 -99.3398 -357.421 -2.81543l-455.353 -455.354h-288.036v287.908l455.097 454.969l-0.767578 0.768555c-99.5967 99.5957 -99.5967 261.408 0 361.005
-l232.989 232.989c99.5957 99.7246 261.408 99.7246 361.005 0zM1344.04 1104.01l160.02 160.021l-256.031 256.031l-160.021 -160.02z" />
- <glyph glyph-name="uniF219" unicode="&#xf219;"
-d="M1438.08 1832.7c0 0 563.456 -229.376 370.176 -838.4c-267.264 -554.496 -784.64 -349.056 -784.64 -349.056v-277.504s-19.7119 -153.344 -202.88 -220.288c-183.296 -66.6885 -351.616 59.5195 -351.616 59.5195v279.809
-c83.584 -85.5039 195.712 -134.272 240.128 -9.98438v945.92h311.68v-537.472s460.416 -138.496 522.368 289.792c9.85645 475.392 -546.944 472.832 -546.944 472.832s-349.184 22.2715 -522.495 -257.536c-131.2 -222.848 37.1191 -423.424 37.1191 -423.424
-l-225.279 -200.448s-339.2 418.433 -7.42383 871.552c430.848 487.681 1159.81 194.688 1159.81 194.688z" />
- <glyph glyph-name="uniF100" unicode="&#xf100;"
-d="M512 1408h1024v-128h-1024v128zM1152 1152v-128h-640v128h640zM1280 1024v128h256v-128h-256zM896 768v128h640v-128h-640zM768 896v-128h-256v128h256zM512 512v128h768v-128h-768z" />
- <glyph glyph-name="uniF400" unicode="&#xf400;"
-d="M1792 384l-128 -128l-494.848 494.848c-94.8486 -68.9912 -210.816 -110.848 -337.152 -110.848c-318.08 0 -576 257.92 -576 576s257.92 576 576 576s576 -257.92 576 -576c0 -126.336 -41.8564 -242.304 -110.848 -337.152zM384 1216c0 -247.424 200.576 -448 448 -448
-c247.552 0 448 200.576 448 448s-200.448 448 -448 448c-247.424 0 -448 -200.576 -448 -448z" />
- <glyph glyph-name="uniF439" unicode="&#xf439;"
-d="M896 1664v-384h-256v384c0 70.7842 57.3438 128 128 128s128 -57.2158 128 -128zM1408 1664v-384h-256v384c0 70.7842 57.2158 128 128 128s128 -57.2158 128 -128zM384 1152h1280c0 -309.632 -219.904 -567.68 -512 -627.072v-268.928h-256v268.928
-c-292.096 59.2646 -512 317.44 -512 627.072z" />
- <glyph glyph-name="uniF509" unicode="&#xf509;"
-d="M1534.21 717.824l147.712 -88.5762c-134.4 -223.36 -378.24 -373.248 -657.92 -373.248c-279.552 0 -523.52 149.888 -657.92 373.248l147.712 88.7041c92.1602 -98.1758 226.816 -168.96 382.208 -194.688v500.736h-128v128h128v163.456
-c-76.1602 44.416 -128 126.08 -128 220.544c0 141.312 114.688 256 256 256s256 -114.688 256 -256c0 -94.4639 -51.7119 -176.128 -128 -220.544v-163.456h128v-128h-128v-500.864c155.52 25.7285 289.92 96.3838 382.208 194.688zM1024 1664
-c-70.6562 0 -128 -57.3438 -128 -128s57.3438 -128 128 -128c70.7842 0 128 57.3438 128 128s-57.2158 128 -128 128z" />
- <glyph glyph-name="uniF510" unicode="&#xf510;"
-d="M1664 1152v-256h-512v-512h-256v512h-512v256h512v512h256v-512h512z" />
- <glyph glyph-name="uniF445" unicode="&#xf445;"
-d="M1888 748.032l-57.5996 -139.648l-305.408 21.8887c-31.3604 -39.9365 -66.9443 -75.6484 -106.88 -107.009l21.7598 -305.536l-139.264 -57.5996l-200.704 231.552c-25.2158 -3.07129 -49.9199 -7.67969 -75.9043 -7.67969c-25.7275 0 -50.1758 4.6084 -75.1357 7.67969
-l-200.96 -231.808l-139.393 57.7275l21.7607 305.408c-39.9365 31.3604 -75.5205 66.9443 -107.009 106.88l-305.536 -21.7598l-57.7275 139.264l231.68 200.832c-3.07129 25.0879 -7.67969 49.792 -7.67969 75.7764c0 25.7275 4.6084 50.1758 7.55176 75.1357
-l-231.552 200.96l57.7275 139.393l305.28 -21.7607c31.4883 39.9365 67.2002 75.7764 107.265 107.265l-21.7607 305.408l139.137 57.5996l200.96 -231.68c24.96 2.94336 49.5352 7.67969 75.3916 7.67969s50.4316 -4.73633 75.3916 -7.67969l200.96 231.68
-l139.265 -57.5996l-21.8887 -305.408c39.9365 -31.3604 75.6484 -67.0723 107.137 -107.008l305.408 21.6318l57.5996 -139.136l-231.552 -200.832c3.07129 -25.0889 7.67969 -49.6641 7.67969 -75.6484c0 -25.7275 -4.6084 -50.3037 -7.67969 -75.2637zM1280 1024
-c0 141.312 -114.688 256 -256 256s-256 -114.688 -256 -256s114.688 -256 256 -256s256 114.688 256 256z" />
- <glyph glyph-name="uniF516" unicode="&#xf516;"
-d="M1024 1452.42v-467.328h-155.776v467.328h155.776zM1408 1452.42v-467.328h-155.776v467.328h155.776zM323.2 1920h1596.8v-1090.82l-467.456 -445.184h-350.464l-233.6 -256h-228.48v256h-512v1224.32zM1764.22 907.136v857.088h-1285.5v-1129.73h350.977v-211.328
-l233.472 211.328h428.16z" />
- <glyph glyph-name="uniF435" unicode="&#xf435;"
-d="M384 512l640 640l640 -640h-1280zM384 1408h1280v-128h-1280v128z" />
- <glyph glyph-name="uniF300" unicode="&#xf300;"
-d="M1536 1536c141.312 0 256 -114.688 256 -256v-384c0 -141.312 -114.688 -256 -256 -256h-448l-448 -448v448h-128c-141.312 0 -256 114.688 -256 256v384c0 141.312 114.688 256 256 256h1024z" />
- <glyph glyph-name="uniF514" unicode="&#xf514;"
-d="M1664 768v128l256 -256l-256 -256v128h-256c-282.752 0 -512 229.248 -512 512c0 141.312 -114.688 256 -256 256h-384v256h384c282.752 0 512 -229.248 512 -512c0 -141.312 114.688 -256 256 -256h256zM1408 1280c-61.8242 0 -117.888 -22.9121 -162.176 -59.3916
-c-27.3926 83.9678 -70.7842 160 -128 224.768c82.5596 56.96 182.271 90.624 290.176 90.624h256v128l256 -256l-256 -256v128h-256zM640 768c61.8242 0 117.888 22.9121 162.176 59.3916c27.3926 -83.9678 70.7842 -160 128 -224.768
-c-82.5596 -56.832 -182.271 -90.624 -290.176 -90.624h-384v256h384z" />
- <glyph glyph-name="uniF102" unicode="&#xf102;"
-d="M1408 1408l512 -128v-896h-1792v896l512 128l128 256h512zM1024 512.256c247.552 0 448 200.448 448 448c0 247.424 -200.448 448 -448 448c-247.424 0 -448 -200.576 -448 -448c0 -247.552 200.576 -448 448 -448zM512 1600v-96.1279l-256 -64v160.128h256z
-M1024 1280.13c176.768 0 320 -143.231 320 -320c0 -176.768 -143.232 -320 -320 -320s-320 143.232 -320 320c0 176.769 143.232 320 320 320z" />
- <glyph glyph-name="uniF466" unicode="&#xf466;"
-d="M640 1344l-320 -320l320 -320v-320l-640 640l640 640v-320zM1408 1280c282.752 0 512 -229.248 512 -512v-299.904l-150.016 149.889c-99.9688 99.9678 -231.04 150.016 -361.984 150.016h-256v-384l-640 640l640 640v-384h256z" />
- <glyph glyph-name="uniF463" unicode="&#xf463;"
-d="M1536 1408l-768 -384l-768 384v128h1536v-128zM0 1216l768 -384l256 128v-448h-1024v704zM1920 1152c70.7842 0 128 -57.3438 128 -128v-640c0 -70.7842 -57.2158 -128 -128 -128h-640c-70.7842 0 -128 57.2158 -128 128v640c0 70.6562 57.2158 128 128 128h640z
-M1920 640v128h-256v256h-128v-256h-256v-128h256v-256h128v256h256z" />
- <glyph glyph-name="uniF422" unicode="&#xf422;"
-d="M384 1536h1152v-1024h-1152v1024zM1408 640v640h-896v-640h896z" />
- <glyph glyph-name="uniF201" unicode="&#xf201;"
-d="M1024 128c128 0 256 32 368 80c-16 144 -64 368 -208 688c-288 -96 -560 -304 -704 -576c144 -128 336 -192 544 -192zM1536 288c208 144 352 384 384 640c-192 32 -368 32 -576 0c16 -32 128 -304 192 -640zM128 1088v-64c0 -224 80 -432 224 -592
-c176 288 496 496 784 592c-16 48 -48 112 -80 176c-368 -112 -592 -144 -928 -112zM1760 1536c-160 -128 -368 -192 -560 -288c48 -64 64 -112 96 -176c208 48 480 32 624 0c-16 176 -64 336 -160 464zM672 1856c-256 -112 -448 -336 -512 -624c288 -32 688 48 832 96
-c-96 192 -192 352 -320 528zM1024 1920c-64 0 -128 -16 -192 -16c128 -208 192 -320 304 -512c128 48 384 128 528 256c-160 160 -384 272 -640 272zM1024 2048c560 0 1024 -464 1024 -1024s-464 -1024 -1024 -1024s-1024 464 -1024 1024s464 1024 1024 1024z" />
- <glyph glyph-name="uniF426" unicode="&#xf426;"
-d="M1664 1024c141.312 0 256 -114.688 256 -256s-114.688 -256 -256 -256h-1280c-141.312 0 -256 114.688 -256 256s114.688 256 256 256h6.52832c-4.35254 20.8643 -6.52832 41.9844 -6.52832 64c0 176.768 143.232 320 320 320
-c89.3438 0 169.984 -36.8643 227.968 -95.8721c60.7998 131.84 193.408 223.872 348.032 223.872c211.968 0 384 -171.904 384 -384c0 -45.1836 -9.21582 -87.8076 -23.5518 -128h23.5518z" />
- <glyph glyph-name="uniF446" unicode="&#xf446;"
-d="M1024 1792c424.064 0 768 -343.936 768 -768s-343.936 -768 -768 -768s-768 343.936 -768 768s343.936 768 768 768zM1536 1024c0 282.752 -229.248 512 -512 512c-94.8477 0 -182.528 -27.5195 -258.688 -72.4482l698.368 -698.24
-c44.8008 76.1602 72.3203 163.969 72.3203 258.688zM512 1024c0 -282.752 229.248 -512 512 -512c94.7197 0 182.4 27.5195 258.56 72.3203l-698.239 698.239c-44.8008 -76.1592 -72.3203 -163.84 -72.3203 -258.56z" />
- <glyph glyph-name="uniF504" unicode="&#xf504;"
-d="M1664 1536c0 -94.4639 -51.7119 -176.128 -128 -220.544v-163.456c0 -282.752 -229.248 -512 -512 -512c-141.312 0 -256 -114.688 -256 -256v-128h-256v1059.46c-76.1602 44.416 -128 126.08 -128 220.544c0 141.312 114.688 256 256 256s256 -114.688 256 -256
-c0 -94.4639 -51.8398 -176.128 -128 -220.544v-490.496c75.5195 44.0322 162.304 71.04 256 71.04c141.312 0 256 114.688 256 256v163.456c-76.2881 44.416 -128 126.08 -128 220.544c0 141.312 114.688 256 256 256s256 -114.688 256 -256zM640 1664
-c-70.6562 0 -128 -57.3438 -128 -128s57.3438 -128 128 -128s128 57.3438 128 128s-57.3438 128 -128 128zM1408 1408c70.7842 0 128 57.3438 128 128s-57.2158 128 -128 128s-128 -57.3438 -128 -128s57.2158 -128 128 -128z" />
- <glyph glyph-name="uniF465" unicode="&#xf465;"
-d="M1536 1408l-768 -384l-768 384v128h1536v-128zM0 1216l768 -384l256 128v-448h-1024v704zM1920 1152c70.7842 0 128 -57.3438 128 -128v-640c0 -70.7842 -57.2158 -128 -128 -128h-640c-70.7842 0 -128 57.2158 -128 128v640c0 70.6562 57.2158 128 128 128h640z
-M1531.52 384l452.48 452.48l-90.4961 90.4951l-361.984 -361.983l-180.991 180.992l-90.4961 -90.4961z" />
- <glyph glyph-name="uniF424" unicode="&#xf424;"
-d="M1408 1792l384 -384v-768l-384 -384h-768l-384 384v768l384 384h768zM1024 512c70.7842 0 128 57.2158 128 128s-57.2158 128 -128 128c-70.6562 0 -128 -57.2158 -128 -128s57.3438 -128 128 -128zM1113.22 896l51.584 640h-281.6l51.2002 -640h178.815z" />
- <glyph glyph-name="uniF418" unicode="&#xf418;"
-d="M1408 1504l128 -96l-512 -768h-128l-288 416l128 128l224 -192z" />
- <glyph glyph-name="uniF429" unicode="&#xf429;"
-d="M1024 1453.31l493.312 -493.312l-493.312 -493.312l-86.6562 86.6553l342.656 342.656h-896v128h896l-342.656 342.656z" />
- <glyph glyph-name="uniF308" unicode="&#xf308;"
-d="M477.696 568.192l543.104 543.104l90.3682 -90.624l-542.976 -542.976c-100.225 -100.353 -152.32 -115.84 -226.305 -135.809c20.0967 74.1123 35.584 126.08 135.809 226.305zM1189.5 1732.61l180.992 180.991l542.976 -543.104l-180.991 -180.992
-c-50.0488 50.0479 -130.944 50.0479 -180.992 0l-180.992 -180.992c-50.0479 -50.0479 -50.0479 -130.943 0 -180.992l-180.992 -180.991l-543.104 542.976l180.991 180.992c50.0488 -50.0479 131.072 -50.0479 181.12 0l180.992 181.12
-c50.0479 50.0479 50.0479 130.943 0 180.992z" />
- <glyph glyph-name="uniF226" unicode="&#xf226;"
-d="M1477.76 1792c120.32 0 152.576 -68.6084 126.464 -195.584l-51.8398 -258.688c-40.96 -206.848 -88.0635 -445.695 -94.0801 -470.144c-11.0078 -44.1602 -27.9033 -119.168 -132.992 -119.168h-250.367c-9.98438 0 -9.98438 0 -20.0967 -10.1123
-c-6.65527 -6.65527 -393.344 -455.424 -393.344 -455.424c-30.208 -34.6875 -80.3838 -28.5439 -98.6875 -21.1201c-18.3047 7.2959 -50.6885 29.6963 -50.6885 89.9844v1301.63s33.2803 138.624 146.304 138.624h819.328zM1394.94 1391.1l34.3037 179.2
-c6.27148 29.6963 -16.3838 52.4805 -40.5762 52.4805h-657.536c-29.8242 0 -49.792 -26.8799 -49.792 -49.792v-1015.68c0 -3.19922 2.43262 -3.83984 4.86426 -1.15137c0 0 242.304 290.815 269.184 324.352c26.8809 33.4082 39.168 38.6562 79.3604 38.6562h221.184
-c30.208 0 47.2324 25.3438 50.3047 40.1924c3.2002 14.8477 28.9277 149.12 34.4316 176.256s-19.3281 54.9121 -44.7998 54.9121h-270.976c-35.9688 0 -61.8242 25.4717 -61.8242 61.3115v39.04c0 35.9678 25.7275 60.416 61.5674 60.416h319.232
-s46.9756 20.4805 51.0723 39.8076z" />
- <glyph glyph-name="uniF205" unicode="&#xf205;"
-d="M1024 1920c493.952 0 896 -401.92 896 -896c0 -493.952 -402.048 -896 -896 -896c-494.08 0 -896 402.048 -896 896c0 494.08 401.92 896 896 896zM218.496 1024c0 -318.848 185.216 -594.432 454.016 -724.992l-384.256 1052.93
-c-44.6719 -100.224 -69.7598 -211.071 -69.7598 -327.936zM1024 218.496c93.8242 0 183.808 16.1279 267.648 45.5684c-2.17676 3.45508 -4.09668 7.16797 -5.76074 11.2637l-247.552 678.271l-241.92 -702.336c72.1924 -21.248 148.48 -32.7676 227.584 -32.7676z
-M1134.98 1401.73l291.072 -866.176l80.3838 268.544c34.9443 111.488 61.3125 191.488 61.3125 260.48c0 99.584 -35.8398 168.576 -66.4326 222.08c-40.7031 66.4316 -78.9756 122.624 -78.9756 189.056c0 74.1123 56.1924 142.977 135.168 142.977
-c3.58398 0 7.04004 -0.384766 10.4961 -0.640625c-143.36 131.328 -334.208 211.456 -544 211.456c-281.472 0 -529.024 -144.256 -673.024 -363.008c18.9443 -0.639648 36.7363 -0.896484 51.8408 -0.896484c84.2236 0 214.655 10.2402 214.655 10.2402
-c43.3926 2.56055 48.5127 -61.3115 5.24805 -66.4316c0 0 -43.7754 -5.12012 -92.1602 -7.68066l293.12 -872.575l176.256 528.64l-125.439 343.936c-43.3926 2.56055 -84.4805 7.68066 -84.4805 7.68066c-43.2637 2.55957 -38.2715 68.9922 5.12012 66.4316
-c0 0 132.992 -10.2402 212.225 -10.2402c84.2236 0 214.783 10.2402 214.783 10.2402c43.3926 2.56055 48.5127 -61.3115 5.12012 -66.4316c0 0 -43.6475 -5.12012 -92.2881 -7.68066zM1730.82 1410.56c3.58398 -25.7275 5.50391 -53.248 5.63184 -82.8154
-c0 -81.792 -15.4883 -173.696 -61.3125 -288.512l-246.144 -711.425c239.488 139.521 400.512 399.104 400.512 696.192c0 140.16 -35.8398 271.872 -98.6875 386.56z" />
- <glyph glyph-name="uniF472" unicode="&#xf472;"
-d="M1368.06 1408h-128l-240.129 -768h128l-39.9355 -128h-448l39.9355 128h128l240.129 768h-128l39.9355 128h448z" />
- <glyph glyph-name="uniF216" unicode="&#xf216;"
-d="M1791.62 1265.92c0.383789 -2.94434 0.639648 -5.75977 0.639648 -8.7041v-466.943c0 -2.94434 -0.255859 -5.76074 -0.511719 -8.96094c-0.12793 -0.767578 -0.383789 -1.79199 -0.511719 -2.81543c-0.384766 -1.79199 -0.640625 -3.58398 -1.15234 -5.50391
-c-0.255859 -1.02441 -0.768555 -2.04785 -1.02441 -3.07227c-0.639648 -1.66406 -1.15137 -3.2002 -1.79199 -4.86426c-0.511719 -1.02344 -1.02344 -2.04785 -1.53613 -3.07129c-0.639648 -1.53613 -1.40723 -2.94434 -2.30371 -4.48047
-c-0.511719 -0.895508 -1.28027 -1.91992 -1.91992 -2.94434c-0.767578 -1.2793 -1.66406 -2.55957 -2.6875 -3.96777c-0.768555 -0.895508 -1.53613 -1.79199 -2.30469 -2.81543c-1.02344 -1.02441 -2.04785 -2.30469 -3.32812 -3.45605
-c-0.767578 -0.896484 -1.66406 -1.79199 -2.6875 -2.68848c-1.02441 -0.895508 -2.30371 -2.04785 -3.71191 -3.07227c-0.768555 -0.767578 -1.79199 -1.53516 -2.81641 -2.30371l-1.15137 -0.767578l-702.208 -467.072
-c-11.1367 -7.42383 -23.8086 -11.0078 -36.6084 -11.0078s-25.4717 3.58398 -36.7363 11.2637l-702.208 467.072c-0.255859 0.255859 -0.639648 0.511719 -1.02344 0.767578l-2.94434 2.30469c-1.28027 0.895508 -2.55957 2.04785 -3.71191 3.07129
-c-0.895508 0.896484 -1.79199 1.79199 -2.6875 2.68848c-1.02441 1.02344 -2.17676 2.30371 -3.2002 3.45605c-0.768555 0.895508 -1.53613 1.79199 -2.30469 2.81543c-0.895508 1.28027 -1.79199 2.56055 -2.6875 3.96875
-c-0.768555 0.895508 -1.4082 1.91992 -1.91992 2.94336c-0.896484 1.53613 -1.66406 2.94434 -2.30371 4.48047c-0.512695 0.895508 -1.02441 1.91992 -1.53613 3.07129c-0.640625 1.66406 -1.15234 3.2002 -1.66406 4.86426
-c-0.383789 0.896484 -0.768555 1.91992 -1.02441 3.07227c-0.511719 1.91992 -0.767578 3.71191 -1.15137 5.50391c-0.128906 1.02441 -0.384766 2.04785 -0.512695 2.94434c-0.383789 2.81543 -0.639648 5.75977 -0.639648 8.57617v466.943
-c0 2.94434 0.255859 5.75977 0.639648 8.7041c0.12793 0.896484 0.383789 1.79199 0.512695 2.81641c0.383789 1.91992 0.639648 3.71191 1.15137 5.50391c0.255859 1.15137 0.640625 2.17578 1.02441 3.2002c0.511719 1.53516 1.02344 3.19922 1.66406 4.86328
-c0.511719 1.02441 1.02344 2.04785 1.53613 3.2002c0.639648 1.53613 1.40723 2.81641 2.30371 4.48047c0.639648 0.895508 1.28027 1.91992 1.91992 2.94336c0.767578 1.28027 1.79199 2.68848 2.6875 3.96875c0.640625 1.02344 1.4082 1.79199 2.30469 2.81543
-c1.02344 1.28027 2.04785 2.43164 3.2002 3.58398c0.895508 0.768555 1.79199 1.66406 2.6875 2.68848c1.15234 1.02344 2.43164 2.04785 3.71191 3.07129l2.94434 2.17676c0.383789 0.255859 0.767578 0.639648 1.15137 0.895508l702.208 466.944
-c22.1445 14.7197 51.0723 14.7197 73.2168 0l702.08 -467.2c0.383789 -0.255859 0.767578 -0.639648 1.15137 -0.896484c0.896484 -0.767578 1.91992 -1.53516 2.81641 -2.30371c1.2793 -0.895508 2.55957 -1.91992 3.71191 -3.07227
-c1.02344 -0.895508 1.91992 -1.79199 2.6875 -2.6875c1.15234 -1.02441 2.17676 -2.17578 3.32812 -3.45605c0.768555 -0.896484 1.53613 -1.79199 2.30469 -2.81641c0.895508 -1.2793 1.79199 -2.55957 2.6875 -3.96777
-c0.639648 -0.895508 1.4082 -1.91992 1.91992 -2.94434c0.896484 -1.53516 1.66406 -2.81543 2.30371 -4.35156c0.512695 -1.02441 1.02441 -2.04785 1.53613 -3.2002c0.640625 -1.66406 1.15234 -3.2002 1.79199 -4.73535
-c0.255859 -1.02441 0.768555 -2.04883 1.02441 -3.2002c0.511719 -1.79199 0.767578 -3.58398 1.15137 -5.50391c0.128906 -0.896484 0.384766 -1.79199 0.512695 -2.81641zM1090.05 1601.28v-307.328l286.208 -190.977l231.168 154.24zM957.952 1601.28l-517.248 -344.064
-l231.04 -154.24l286.208 191.104v307.2zM387.84 1133.95v-220.416l165.12 110.208zM957.952 446.208v307.328l-286.208 190.976l-231.04 -154.111zM1024 867.84l233.472 155.904l-233.472 155.904l-233.472 -155.904zM1090.05 446.208l517.376 344.064l-231.168 154.111
-l-286.208 -190.976v-307.2zM1660.29 913.536v220.416l-165.248 -110.208z" />
- <glyph glyph-name="uniF475" unicode="&#xf475;"
-d="M1024 1792c424.064 0 768 -343.936 768 -768s-343.936 -768 -768 -768s-768 343.936 -768 768s343.936 768 768 768zM476.16 1340.54l-2.81641 3.96777c-4.60742 -7.93555 -8.83203 -16.1279 -13.1836 -24.3193l4.47949 1.02344l17.5361 6.27246l30.208 2.6875zM1024 384
-c265.088 0 493.056 162.176 590.208 392.576l-6.52832 10.4961l14.9766 50.8154l-34.6885 25.2158l-25.3438 7.55273l-23.5518 19.8398l-55.8086 -21.1201l-52.7354 -3.07227l-39.9365 29.0566l-39.04 53.5039l-0.767578 32.5117l0.895508 54.2725l5.63184 7.55176
-l4.86426 18.1758l22.7842 35.0723l13.3125 13.0557l18.6875 20.7363l13.0557 25.5996l36.8643 34.9443l37.7598 -0.383789l27.6484 9.59961l66.4316 7.16797l25.9844 -36.8643l24.1924 -10.4961c-8.44824 39.4248 -20.2246 77.6963 -35.585 114.049l-5.50391 5.11914
-l-13.4395 -6.65527l-28.9277 -2.68848l-23.8086 -21.248l-25.9834 -35.0723l-50.6885 -11.6475l-23.5518 9.21582l2.6875 40.5762l13.3125 25.2158l46.4639 -2.6875l8.57617 21.8877l-24.0645 26.624l20.6084 8.32031l40.4482 22.0156l14.4639 11.6484
-c-49.1523 77.6953 -113.664 144.256 -190.721 194.688l-4.35156 -1.79199l20.3516 -17.792l-32.8955 5.24805l-4.6084 -9.34375l21.248 -2.56055l-7.93555 -8.95996l-59.9043 -10.3682l-77.3115 -34.3037l-59.9043 -28.9277l-6.27246 59.6475l16.8965 32.6406
-l-12.416 21.7598l-45.9521 19.4561l-22.1436 17.1523l32.1279 7.67969l69.1201 16.8955l29.8232 1.66406c-64.7676 22.1445 -132.991 36.7363 -205.056 36.7363c-146.56 0 -280.064 -51.4561 -388.096 -134.656l38.2715 1.15234l47.7441 -12.2881l32 -8.19238
-l34.8164 7.80859l47.6152 -6.0166l29.9521 7.2959l5.63184 18.0488l28.1602 -2.94434l11.0078 -22.7842l47.6162 4.35254l-74.752 -24.7041l-36.0957 -20.8643l-55.168 -42.2402l13.6963 -14.9756l38.3994 -18.0479l27.3926 -28.0322l33.6641 34.4316l19.4551 37.8887
-l33.0244 22.6553l33.0244 -16.7676l9.08789 -18.4316l28.9277 10.2393l10.2402 -55.168l20.4795 -20.0957l-74.752 -19.0723l-54.7842 -21.5039l42.752 11.7764l-5.24707 -17.1523l13.5674 -15.3604l11.2646 -7.16797l-45.9521 -18.6875l16.1279 18.8154l-25.9844 -5.63184
-l-31.2314 -14.8477l-14.208 -16.5117l-34.9443 -19.3281l-25.6006 -20.2246l-9.72754 -23.4238l-32.7676 -26.752l-25.8564 -59.3916l-8.06348 -25.7285l-23.6807 47.4883l-46.208 -0.12793l-38.3994 0.255859l-49.2803 -39.6797l-6.52832 -43.5205l29.6963 -32.3838
-l57.2158 30.7197l-14.8477 -43.5195l-40.4482 -26.1123l-39.2959 9.47266l-43.5205 18.1758l-49.9199 79.1035l-22.1436 47.2324l-5.24805 16.2559l7.42383 -66.0479l-0.639648 -17.1523l-8.19238 10.2402l-4.99219 16.6396l-9.9834 12.416l-5.12012 22.9121
-l-0.255859 35.9678l-26.752 46.3359c-17.4082 -58.1113 -29.5684 -118.399 -29.5684 -182.144c0 -295.936 202.88 -543.232 476.16 -616.192l-4.0957 12.6729l-9.60059 137.6l-11.1357 62.8477l-67.3281 65.792l-31.7441 56.3203l-10.624 27.9043l7.67969 16.5117
-l14.0801 52.9922l7.55273 61.6953l-8.32031 4.73633l-14.9756 -10.8799l-19.9688 9.34375l13.4404 6.27246l59.9043 13.8242l39.4238 17.6631l-2.43262 -26.752l14.5928 24.1924l19.7119 -6.91211l67.7119 -21.6318l48.5117 -33.6641l34.9443 -19.3281l8.31934 -5.50391
-l-8.19141 -48.7676l33.4082 9.47168l-8.32031 -16.6396l47.3604 -10.1123l48 -3.96777l31.3594 -19.7119l1.28027 -57.3447l-22.7842 -65.4072l-27.6475 -68.0967l-50.1768 -30.8477l-39.9355 -90.8799l-36.0957 5.12012l17.1514 -23.4238l-1.91992 -16.5127
-l-33.2803 -26.4961c19.4561 -1.79199 38.1445 -5.8877 57.9844 -5.8877z" />
- <glyph glyph-name="uniF432" unicode="&#xf432;"
-d="M1408 640l-448 448l-448 -448l-128 128l576 576l576 -576z" />
- <glyph glyph-name="uniF210" unicode="&#xf210;"
-d="M1024 2048c565.632 0 1024 -458.496 1024 -1024c0 -565.632 -458.368 -1024 -1024 -1024c-100.864 0 -198.016 14.7197 -290.176 42.1123c38.7842 61.4395 81.2793 140.288 103.04 219.264c12.6719 45.5684 72.0635 281.6 72.0635 281.6
-c35.7119 -67.9678 139.648 -127.743 250.24 -127.743c329.088 0 552.448 300.159 552.448 701.823c0 303.744 -257.28 586.624 -648.192 586.624c-486.527 0 -731.904 -348.8 -731.904 -639.744c0 -176.128 66.5605 -332.928 209.664 -391.168
-c23.4248 -9.59961 44.416 -0.511719 51.2002 25.4727c4.73633 18.0479 16 63.4873 20.9922 82.1758c6.78418 25.7275 4.0957 34.6875 -14.8477 57.2158c-41.0879 48.6406 -67.4561 111.488 -67.4561 200.704c0 258.816 193.536 490.496 504.063 490.496
-c274.944 0 426.112 -168.064 426.112 -392.448c0 -295.296 -130.432 -544.384 -324.608 -544.384c-107.136 0 -187.264 88.5762 -161.664 197.12c30.7207 129.664 90.4961 269.824 90.4961 363.392c0 83.8398 -44.9277 153.729 -138.111 153.729
-c-109.44 0 -197.504 -113.28 -197.504 -265.088c0 -96.6406 32.7676 -162.049 32.7676 -162.049s-112.128 -474.88 -131.712 -557.951c-18.4316 -77.8242 -20.7363 -163.456 -17.9199 -235.137c-360.832 158.336 -612.992 518.784 -612.992 937.984
-c0 565.504 458.496 1024 1024 1024z" />
- <glyph glyph-name="uniF437" unicode="&#xf437;"
-d="M1280 1792c141.312 0 256 -114.688 256 -256v-1024c0 -141.312 -114.688 -256 -256 -256h-512c-141.312 0 -256 114.688 -256 256v1024c0 141.312 114.688 256 256 256h512zM1024 384c70.7842 0 128 57.2158 128 128s-57.2158 128 -128 128
-c-70.6562 0 -128 -57.2158 -128 -128s57.3438 -128 128 -128zM1408 768v768h-768v-768h768z" />
- <glyph glyph-name="uniF468" unicode="&#xf468;"
-d="M256 256v1536h256v-1536h-256zM1536 1664h256v-768h-256c-256 0 -256 128 -512 128s-256 -128 -384 -128v768c128 0 128 128 384 128s256 -128 512 -128z" />
- <glyph glyph-name="uniF107" unicode="&#xf107;"
-d="M1088 1792c176.768 0 320 -143.232 320 -320v-384c0 -131.2 -78.9756 -243.584 -192 -292.992v150.912c39.04 35.2002 64 85.6318 64 142.08v384c0 105.856 -86.1436 192 -192 192s-192 -86.1436 -192 -192v-384c0 -56.4482 24.96 -106.88 64 -142.08v-150.912
-c-112.896 49.4082 -192 161.792 -192 292.992v384c0 176.768 143.232 320 320 320zM960 1380.99c112.896 -49.4082 192 -161.792 192 -292.992v-384c0 -176.768 -143.232 -320 -320 -320s-320 143.232 -320 320v384c0 131.2 79.1035 243.584 192 292.992v-150.912
-c-39.04 -35.2002 -64 -85.6318 -64 -142.08v-384c0 -105.856 86.1436 -192 192 -192s192 86.1436 192 192v384c0 56.4482 -24.96 106.88 -64 142.08v150.912z" />
- <glyph glyph-name="uniF442" unicode="&#xf442;"
-d="M1280 640v256l128 128v-512h-896v896h512l-128 -128h-256v-640h640zM1024 1664h640v-640h-128v421.504l-549.504 -549.504l-90.4961 90.4961l549.504 549.504h-421.504v128z" />
- <glyph glyph-name="uniF221" unicode="&#xf221;"
-d="M1664 1024c0 -55.9355 -35.9678 -102.912 -85.8877 -120.32c13.8232 -20.6074 21.8877 -45.0557 21.8877 -71.6797c0 -55.8076 -35.9678 -102.784 -85.8877 -120.32c13.8232 -20.6074 21.8877 -45.0557 21.8877 -71.6797c0 -70.6562 -57.3438 -128 -128 -128h-64
-c70.6562 0 128 -57.3438 128 -128s-57.3438 -128 -128 -128h-448c-192 0 -256 128 -384 128h-128v640h192c128 0 320 256 320 640c0 0 0 128 64 128s192 -144 192 -320c0 -192 -32 -320 -32 -320h416c70.6562 0 128 -57.3438 128 -128z" />
- <glyph glyph-name="uniF50A" unicode="&#xf50a;"
-d="M1856 1024c35.3281 0 64 -28.6719 64 -64s-28.6719 -64 -64 -64h-204.928c-9.85645 -48.7676 -26.624 -94.5918 -46.8486 -138.624c116.608 -134.528 187.776 -309.376 187.776 -501.376v-64c0 -35.2002 -28.6719 -64 -64 -64s-64 28.7998 -64 64v64
-c0 144.896 -48.7676 277.888 -130.048 385.152c-116.736 -155.265 -300.672 -257.152 -509.952 -257.152c-208.768 0 -392.448 101.504 -509.312 256.128c-81.2803 -106.88 -130.688 -239.231 -130.688 -384.128v-64c0 -35.2002 -28.6719 -64 -64 -64s-64 28.7998 -64 64v64
-c0 192 71.2959 366.72 187.904 501.376c-20.3525 44.0322 -36.9922 89.8564 -46.9766 138.624h-204.928c-35.3281 0 -64 28.6719 -64 64s28.6719 64 64 64h192c0 61.6963 12.1602 119.936 29.0557 176c-98.1758 129.024 -157.056 289.408 -157.056 464v64
-c0 35.3281 28.6719 64 64 64s64 -28.6719 64 -64v-64c0 -353.408 286.592 -640 640 -640c353.536 0 640 286.592 640 640v64c0 35.3281 28.6719 64 64 64s64 -28.6719 64 -64v-64c0 -173.952 -58.4961 -333.824 -156.032 -462.592
-c17.2803 -56.3203 28.0322 -115.328 28.0322 -177.408h192zM1024 1152c-208.896 0 -388.352 126.08 -467.84 305.92c116.864 126.08 282.496 206.08 467.84 206.08c185.472 0 350.976 -80 467.84 -206.08c-79.4883 -179.84 -258.815 -305.92 -467.84 -305.92z" />
- <glyph glyph-name="uniF455" unicode="&#xf455;"
-d="M1024 1792c424.064 0 768 -343.936 768 -768s-343.936 -768 -768 -768c-424.192 0 -768 343.936 -768 768s343.808 768 768 768zM1024 1536c-70.7842 0 -128 -57.3438 -128 -128s57.2158 -128 128 -128c70.6562 0 128 57.3438 128 128s-57.3438 128 -128 128zM1280 512
-v128h-160v512h-320.128v-128h128.128v-384h-160v-128h512z" />
- <glyph glyph-name="uniF223" unicode="&#xf223;"
-d="M1105.28 1232.51v92.9287c0 44.1592 -36.4805 79.8711 -81.2803 79.8711s-81.2803 -35.7119 -81.2803 -79.8711l-0.383789 -481.024c-2.55957 -184.192 -155.008 -332.416 -342.912 -332.416c-189.696 0 -343.424 150.912 -343.424 337.28v209.151h262.784v-206.592
-c0 -43.9043 36.3516 -79.7441 81.2803 -79.7441c44.9277 0 81.2793 35.7119 81.2793 79.7441v487.168c6.65625 180.48 157.185 324.992 342.656 324.992c186.112 0 337.152 -145.536 342.656 -327.04v-106.624l-156.416 -45.8242zM1529.22 1058.43h262.784v-209.151
-c0 -186.368 -153.728 -337.28 -343.424 -337.28c-188.544 0 -341.632 149.376 -343.296 334.08v210.304l104.96 -48l156.288 45.8242v-211.84c0 -44.2881 36.3516 -80 81.4072 -80c44.9287 0 81.2803 35.7119 81.2803 80v216.063z" />
- <glyph glyph-name="uniF212" unicode="&#xf212;"
-d="M1658.75 1791.87c184.192 -5.37598 270.976 -123.776 260.352 -355.072c-7.93555 -172.928 -129.792 -409.472 -365.439 -710.016c-243.584 -313.729 -449.792 -470.784 -618.368 -470.784c-104.448 0 -192.896 95.6162 -264.96 286.72
-c-48.2559 175.232 -96.5117 350.336 -144.64 525.568c-53.6318 190.976 -111.232 286.592 -172.672 286.592c-13.4404 0 -60.416 -27.7764 -140.673 -83.584l-84.3516 107.648c88.4482 77.0557 175.616 154.111 261.504 231.168
-c117.888 100.991 206.464 154.111 265.472 159.487c139.521 13.3125 225.28 -81.2793 257.536 -283.392c34.8164 -218.24 58.8799 -353.92 72.4482 -407.04c40.1924 -180.992 84.4805 -271.36 132.736 -271.36c37.5039 0 93.8232 58.752 169.088 176.128
-c75.0078 117.376 115.2 206.849 120.576 268.16c10.624 101.376 -29.4404 152.192 -120.576 152.192c-43.0078 0 -87.2959 -9.98438 -132.736 -29.1846c88.0645 285.952 256.512 424.704 504.704 416.769z" />
- <glyph glyph-name="uniF206" unicode="&#xf206;"
-d="M729.6 1152h550.4s12.7998 -38.4004 12.7998 -89.5996c0 -332.801 -230.399 -563.2 -563.2 -563.2c-320 0 -588.8 268.8 -588.8 588.8s281.601 588.8 588.8 588.8c153.601 0 294.4 -51.2002 384 -153.6l-153.6 -153.601c-38.4004 25.6006 -102.4 76.8008 -230.4 76.8008
-c-204.8 0 -371.199 -166.4 -371.199 -371.2s166.399 -371.2 371.199 -371.2c230.4 0 320 166.4 332.801 243.2h-332.801v204.8zM1664 1152h128v-128h-128v-128h-128v128h-128v128h128v128h128v-128z" />
- <glyph glyph-name="uniF407" unicode="&#xf407;"
-d="M1280 1536l256 -128v-128h-128h-128h-128h-128h-128h-128h-128h-128h-128v128l256 128c0 70.7842 57.3438 128 128 128h384c70.7842 0 128 -57.2158 128 -128zM1088 1408c35.3281 0 64 28.6719 64 64s-28.6719 64 -64 64h-256c-35.3281 0 -64 -28.6719 -64 -64
-s28.6719 -64 64 -64h256zM1280 1216h128v-704c0 -70.7842 -57.2158 -128 -128 -128h-640c-70.6562 0 -128 57.2158 -128 128v704h128v-704h128v704h128v-704h128v704h128v-704h128v704z" />
- <glyph glyph-name="uniF414" unicode="&#xf414;"
-d="M1996.03 601.984c116.992 -190.208 29.6953 -345.984 -193.536 -345.984h-1556.99c-223.231 0 -310.528 155.776 -193.536 345.984l759.552 1236.99c116.864 190.336 308.097 190.336 424.961 0zM1024 512c70.7842 0 128 57.2158 128 128s-57.2158 128 -128 128
-c-70.6562 0 -128 -57.2158 -128 -128s57.3438 -128 128 -128zM1113.22 896l51.584 640h-281.6l51.2002 -640h178.815z" />
- <glyph glyph-name="uniF50E" unicode="&#xf50e;"
-d="M384 896v256h1280v-256h-1280z" />
- <glyph glyph-name="uniF461" unicode="&#xf461;"
-d="M1024 384l-647.552 612.992c-149.376 141.312 -161.408 383.231 -27.1367 540.288c134.4 157.184 364.416 169.855 513.792 28.5439l160.896 -152.32l160.768 152.32c149.248 141.184 379.393 128.64 513.792 -28.5439
-c134.656 -157.057 122.368 -398.977 -27.0078 -540.416z" />
- <glyph glyph-name="uniF470" unicode="&#xf470;"
-d="M1536 1152c70.7842 0 128 -57.3438 128 -128v-640c0 -70.7842 -57.2158 -128 -128 -128h-1024c-70.6562 0 -128 57.2158 -128 128v640c0 70.6562 57.3438 128 128 128v128c0 282.752 229.248 512 512 512s512 -229.248 512 -512v-128zM768 1152h512v128
-c0 141.312 -114.688 256 -256 256s-256 -114.688 -256 -256v-128z" />
- <glyph glyph-name="uniF50C" unicode="&#xf50c;"
-d="M1479.55 819.2c98.5605 -32 203.137 -51.2002 312.448 -51.2002v-512c-848.256 0 -1536 687.744 -1536 1536h512c0 -162.048 38.5283 -314.752 105.856 -450.816l-189.185 -189.184c136.192 -235.008 344.96 -422.4 595.328 -532.224z" />
- <glyph glyph-name="uniF220" unicode="&#xf220;"
-d="M1856.77 834.048c32.3848 -65.6641 50.6885 -138.88 50.3047 -217.344c0 -269.696 -218.88 -488.704 -488.576 -488.704c-83.584 0 -161.92 21.376 -230.656 58.1123c-50.4316 -8.83203 -102.016 -13.8242 -154.496 -13.8242
-c-465.279 0 -842.624 377.216 -842.624 842.496c0 58.2402 6.14453 114.688 17.2803 169.6c-42.4961 72.1924 -67.0723 156.8 -67.0723 246.912c0 269.824 218.88 488.704 488.704 488.704c95.7441 0 184.704 -27.3916 260.225 -75.0078
-c46.4639 7.80762 94.5918 12.416 143.871 12.416c465.408 0 842.624 -377.344 842.624 -842.624c0 -62.0801 -6.65527 -122.752 -19.584 -180.736zM1466.11 612.096c38.9121 55.5527 58.624 118.656 58.752 188.16c0 58.2402 -11.2646 107.904 -34.1758 148.353
-c-22.9121 40.3193 -54.7842 73.8555 -95.2324 100.224c-39.168 25.7275 -87.8076 48.1279 -143.744 66.0479c-55.4238 17.9199 -118.271 34.1758 -186.496 48.6396c-53.7598 12.416 -93.0557 21.8887 -116.479 28.6729c-23.04 6.14355 -45.4404 15.2314 -67.8398 26.3672
-c-21.8887 10.624 -38.5283 23.5527 -50.4326 38.0166c-11.1357 13.9521 -16.7676 30.3359 -16.7676 49.2803c0 31.2314 16.8955 57.4717 52.2236 80.5117c36.3525 23.5518 85.6318 35.9678 146.048 35.9678c64.8965 0 112.384 -11.2637 140.544 -32.6396
-c29.1846 -21.6318 54.2725 -53.6318 75.5205 -93.3125c18.5596 -31.3594 34.9434 -53.248 50.6875 -67.2002c16.3838 -14.5918 40.5762 -22.3994 71.9365 -22.3994c34.9434 0 63.8721 12.416 86.9121 36.4795c23.04 23.4248 34.6875 50.8164 34.6875 81.1523
-c0 31.3604 -9.08789 63.3604 -25.2158 95.7441c-17.2803 32.3838 -44.7998 63.1035 -81.9199 92.2881c-36.8643 28.5439 -83.8398 52.0957 -139.008 69.5039c-55.8086 16.7676 -121.729 25.5996 -196.736 25.5996c-94.7197 0 -177.536 -13.1836 -247.424 -39.04
-c-70.5283 -26.3682 -125.952 -64.3838 -163.584 -113.664c-38.0166 -49.2793 -56.96 -106.496 -56.96 -170.239c0 -67.2002 17.792 -123.776 54.2715 -169.217c35.0723 -44.1592 83.9688 -79.8721 144.385 -105.728c58.752 -25.2158 133.247 -47.3604 220.672 -66.0479
-c64.2559 -13.3125 115.712 -26.2402 154.239 -38.0166c36.8643 -11.2637 67.3281 -27.9033 89.9844 -49.2793c22.1436 -20.7363 32.6396 -46.9766 32.6396 -80.1279c0 -42.3682 -20.2236 -76.8008 -62.0801 -105.345c-43.1357 -29.0557 -100.352 -43.9033 -169.728 -43.9033
-c-50.9443 0 -92.416 7.16797 -122.624 21.6318c-30.3359 13.9521 -54.2715 32.5117 -70.5283 54.2715c-17.2793 22.6562 -33.4072 51.4561 -48.6396 85.7607c-13.4404 31.3594 -29.5684 55.8076 -49.2803 72.0635c-20.7354 17.2803 -45.3115 25.7285 -74.4961 25.7285
-c-35.0713 0 -64.7676 -10.3682 -87.8076 -32.3848c-23.5518 -21.8877 -35.3281 -48.6396 -35.3281 -79.6152c0 -48.8965 17.9199 -100.608 53.8877 -152.192c35.0723 -50.9443 82.3047 -92.416 138.752 -123.136c79.3604 -41.8564 180.864 -63.1045 301.696 -63.1045
-c100.736 0 189.44 15.4883 263.04 46.208c75.3926 30.9766 132.225 74.4961 171.648 129.92z" />
- <glyph glyph-name="uniF415" unicode="&#xf415;"
-d="M1408 1024h512v-256h-310.016c-98.8164 -225.92 -323.584 -384 -585.984 -384c-176.768 0 -335.488 72.832 -451.072 188.928l0.640625 0.640625c-50.0488 50.0479 -50.0488 130.943 0 180.991c50.0479 50.0488 130.943 50.1768 180.991 0
-c69.376 -69.6318 163.456 -114.56 269.44 -114.56c212.096 0 384 171.904 384 384zM1024 1408c-212.096 0 -384 -171.904 -384 -384h-512v256h310.016c98.8164 225.92 323.712 384 585.984 384c176.896 0 335.488 -72.96 451.072 -188.928
-c50.0479 -50.0479 50.0479 -130.944 0 -180.992s-130.944 -50.0479 -180.992 0l-0.639648 -0.639648c-69.376 69.6318 -163.328 114.56 -269.44 114.56zM832 1024c0 106.112 86.0156 192 192 192c106.112 0 192 -85.8877 192 -192s-85.8877 -192 -192 -192
-c-105.984 0 -192 85.8877 -192 192z" />
- <glyph glyph-name="uniF207" unicode="&#xf207;"
-d="M604.672 256h-329.216v990.72h329.216v-990.72zM440.064 1381.89h-2.04883c-110.464 0 -182.016 76.1602 -182.016 171.137c0 97.1514 73.5996 171.136 186.368 171.136c112.512 0 181.888 -74.1123 184.063 -171.136c0 -94.9766 -71.5518 -171.137 -186.367 -171.137z
-M1792 256h-329.216v530.048c0 133.12 -47.3604 224 -166.656 224c-91.1357 0 -145.28 -61.1836 -169.088 -120.32c-8.57617 -21.2471 -10.752 -50.9434 -10.752 -80.5117v-553.216h-329.344s4.35156 897.792 0 990.72h329.344v-140.416
-c43.7764 67.4561 121.984 163.584 296.448 163.584c216.704 0 379.264 -141.567 379.264 -445.823v-568.064z" />
- <glyph glyph-name="uniF500" unicode="&#xf500;"
-d="M2048 0h-1920l960 959.872z" />
- <glyph glyph-name="uniF302" unicode="&#xf302;"
-d="M1024 1536h512v-512l-768 -768l-512 512zM1280 1152c70.7842 0 128 57.2158 128 128s-57.2158 128 -128 128s-128 -57.2158 -128 -128s57.2158 -128 128 -128z" />
- <glyph glyph-name="uniF108" unicode="&#xf108;"
-d="M1664 1536c141.312 0 256 -114.688 256 -256v-384c0 -141.312 -114.688 -256 -256 -256h-128v-448l-448 448h-331.008l128 128h395.008c211.712 0 384 172.288 384 384v384zM1280 1792c141.312 0 256 -114.688 256 -256v-384c0 -141.312 -114.688 -256 -256 -256h-448
-l-448 -448v448h-128c-141.312 0 -256 114.688 -256 256v384c0 141.312 114.688 256 256 256h1024z" />
- <glyph glyph-name="uniF405" unicode="&#xf405;"
-d="M1536 1408l-320 -320l320 -320l-128 -128l-320 320l-320 -320l-128 128l320 320l-320 320l128 128l320 -320l320 320z" />
- <glyph glyph-name="uniF501" unicode="&#xf501;"
-d="M0 128v1920l960 -960z" />
- <glyph glyph-name="uniF50D" unicode="&#xf50d;"
-d="M1024.13 896c-105.984 0 -192.128 86.0156 -192.128 192v512c0 105.856 86.1436 192 192.128 192c106.112 0 191.872 -86.1436 191.872 -192v-512c0 -105.984 -85.7598 -192 -191.872 -192zM1401.47 1024h192c-27.3916 -244.48 -206.464 -441.984 -441.472 -496v-272
-h-256v272c-234.88 54.0156 -414.08 251.52 -441.472 496h192c30.5918 -181.504 187.52 -320 377.472 -320c190.208 0 347.008 138.496 377.472 320z" />
- <glyph glyph-name="uniF503" unicode="&#xf503;"
-d="M2048 2048v-1920l-960 960z" />
- <glyph glyph-name="uniF101" unicode="&#xf101;"
-d="M1024 1792c424.064 0 768 -343.936 768 -768s-343.936 -768 -768 -768s-768 343.936 -768 768s343.936 768 768 768zM1024 768c141.312 0 256 114.688 256 256s-114.688 256 -256 256s-256 -114.688 -256 -256s114.688 -256 256 -256z" />
- <glyph glyph-name="uniF204" unicode="&#xf204;"
-d="M1182.21 1271.81h328.704l-14.4639 -302.72h-314.24v-841.088h-320.128v841.088h-222.08v302.72h222.08v258.561c0 203.008 131.456 389.632 434.176 389.632c122.496 0 212.992 -11.6484 212.992 -11.6484l-7.04004 -282.624s-92.5439 0.640625 -193.536 0.640625
-c-108.928 0 -126.464 -50.3037 -126.464 -133.504c0 -12.416 0 -15.3604 0 -13.9521v-207.104z" />
- <glyph glyph-name="uniF444" unicode="&#xf444;"
-d="M1600 640c-70.7842 0 -128 -57.2158 -128 -128s57.2158 -128 128 -128h64v-128h-1024c-141.312 0 -256 114.688 -256 256v1024c0 141.312 114.688 256 256 256h1024v-1152h-64zM640 384h817.92c-30.7197 34.0479 -49.9199 78.5918 -49.9199 128
-s19.2002 93.9521 49.9199 128h-817.92c-70.6562 0 -128 -57.2158 -128 -128s57.3438 -128 128 -128z" />
- <glyph glyph-name="uniF416" unicode="&#xf416;"
-d="M1088 1792c176.768 0 320 -143.232 320 -320v-640c0 -247.424 -200.576 -448 -448 -448s-448 200.576 -448 448v320h128v-320c0 -176.768 143.232 -320 320 -320c176.64 0 320 143.232 320 320v640c0 105.984 -86.0156 192 -192 192c-106.112 0 -192 -86.0156 -192 -192
-v-512c0 -35.3281 28.6719 -64 64 -64s64 28.6719 64 64v451.968h128v-451.968c0 -105.984 -86.0156 -192 -192 -192c-106.112 0 -192 86.0156 -192 192v512c0 176.768 143.232 320 320 320z" />
- <glyph glyph-name="uniF459" unicode="&#xf459;"
-d="M1920 1664v-1280l-768 480v-480l-1024 640l1024 640v-480z" />
- <glyph glyph-name="uniF441" unicode="&#xf441;"
-d="M1664 1024c141.312 0 256 -114.688 256 -256s-114.688 -256 -256 -256h-512v256h256l-384 384l-384 -384h256v-256h-512c-141.312 0 -256 114.688 -256 256s114.688 256 256 256h6.40039c-4.09668 20.7363 -6.40039 42.1123 -6.40039 64c0 176.768 143.232 320 320 320
-c89.3438 0 169.984 -36.7363 227.968 -95.8721c60.7998 131.84 193.408 223.872 348.032 223.872c211.968 0 384 -171.904 384 -384c0 -45.1836 -9.21582 -87.8076 -23.5518 -128h23.5518z" />
- <glyph glyph-name="uniF506" unicode="&#xf506;"
-d="M768 1920l489.344 -489.472l-640 -640l-268.928 269.056c-49.792 49.792 -49.792 131.2 0 180.992l292.864 292.735l-1.28027 2.68848s128 128 128 384zM1738.24 565.76c33.1514 -32.7676 53.7598 -78.208 53.7598 -128.64c0 -99.9678 -81.1523 -181.12 -181.12 -181.12
-c-50.4316 0 -95.7441 20.6084 -128.64 53.7598l-330.24 330.24v128l-64 64c-35.2002 35.2002 -104.704 23.2959 -154.496 -26.4961l-75.0078 -75.0078c-49.792 -49.792 -131.2 -49.792 -180.992 0l-14.8477 14.8477l640 640l14.8477 -14.8477
-c49.792 -49.792 49.792 -131.2 0 -180.992l-75.0078 -75.0078c-49.792 -49.792 -61.6963 -119.296 -26.4961 -154.496l64 -64h128zM1610.88 373.12c35.3281 0 64 28.6719 64 64s-28.6719 64 -64 64s-64 -28.6719 -64 -64s28.6719 -64 64 -64z" />
- <glyph glyph-name="uniF105" unicode="&#xf105;"
-d="M1408 1408c0 -167.04 -107.264 -307.584 -256 -360.448v-535.552l-256 -128v663.552c-148.864 52.8643 -256 193.408 -256 360.448c0 212.096 171.904 384 384 384c211.968 0 384 -171.904 384 -384z" />
- <glyph glyph-name="uniF473" unicode="&#xf473;"
-d="M384 1664h1280v-1280h-1280v1280zM768 1408c-70.6562 0 -128 -57.3438 -128 -128s57.3438 -128 128 -128s128 57.3438 128 128s-57.3438 128 -128 128zM1536 512v576l-128 192l-448 -672l-192 288l-256 -384h1024z" />
- <glyph glyph-name="uniF452" unicode="&#xf452;"
-d="M512 1664l1024 -640l-1024 -640v1280z" />
- <glyph glyph-name="uniF408" unicode="&#xf408;"
-d="M1792 1150.72l-475.904 -329.983l182.528 -535.04l-474.624 331.903l-474.624 -331.903l182.528 535.04l-475.904 329.983l587.52 -1.02344l180.48 535.68l180.48 -535.68z" />
- <glyph glyph-name="uniF450" unicode="&#xf450;"
-d="M768 1024l1024 640v-1280zM256 384v1280h384v-1280h-384z" />
- <glyph glyph-name="uniF517" unicode="&#xf517;"
-d="M1408 1152l384 384v-1024l-384 384v-256c0 -70.7842 -57.2158 -128 -128 -128h-896c-70.6562 0 -128 57.2158 -128 128v768c0 70.6562 57.3438 128 128 128h896c70.7842 0 128 -57.3438 128 -128v-256z" />
- <glyph glyph-name="uniF106" unicode="&#xf106;"
-d="M256 896v640h640v-640c0 -282.752 -229.248 -512 -512 -512v256c141.312 0 256 114.688 256 256h-384zM1152 1536h640v-640c0 -282.752 -229.248 -512 -512 -512v256c141.312 0 256 114.688 256 256h-384v640z" />
- <glyph glyph-name="uniF208" unicode="&#xf208;"
-d="M1664 1920c141.312 0 256 -114.688 256 -256v-1280c0 -141.312 -114.688 -256 -256 -256h-1280c-141.312 0 -256 114.688 -256 256v1280c0 141.312 114.688 256 256 256h1280zM663.168 384v792.96h-263.552v-792.96h263.552zM531.328 1285.25
-c91.9043 0 149.12 60.9277 149.12 136.96c-1.66406 77.6963 -57.2158 136.96 -147.328 136.96c-90.2402 0 -149.12 -59.2637 -149.12 -136.96c0 -76.0322 57.2158 -136.96 145.664 -136.96h1.66406zM1613.44 384v454.656c0 243.456 -130.049 356.863 -303.488 356.863
-c-139.776 0 -202.496 -76.9277 -237.44 -130.943v112.384h-263.552c3.45605 -74.3682 0 -792.96 0 -792.96h263.552v442.88c0 23.6797 1.79199 47.3604 8.57617 64.1279c19.0723 47.3604 62.4639 96.3838 135.296 96.3838c95.4883 0 133.504 -72.7031 133.504 -179.199
-v-424.192h263.553z" />
- <glyph glyph-name="uniF304" unicode="&#xf304;"
-d="M1024 1152c-141.312 0 -256 114.688 -256 256s114.688 256 256 256s256 -114.688 256 -256s-114.688 -256 -256 -256zM1152 1024c211.968 0 384 -171.904 384 -384v-256h-1024v256c0 212.096 172.032 384 384 384h256z" />
- <glyph glyph-name="uniF225" unicode="&#xf225;"
-d="M655.104 1857.54l368.896 -307.968l-531.456 -328.192l-364.544 291.84zM128 929.536l364.544 291.84l531.456 -328.064l-368.896 -308.096zM1024 893.312l531.456 328.064l364.544 -291.84l-527.232 -344.32zM1920 1513.22l-364.544 -291.84l-531.456 328.192
-l368.768 307.968zM1025.02 826.88l369.92 -306.944l158.464 103.297v-115.713l-528.384 -317.056l-528.257 317.056v115.713l158.336 -103.297z" />
- <glyph glyph-name="uniF103" unicode="&#xf103;"
-d="M1152 1408h896v-896h-896v896zM128 1024v384h896v-384h-896zM640 512v384h384v-384h-384zM128 512v384h384v-384h-384z" />
- <glyph glyph-name="uniF431" unicode="&#xf431;"
-d="M1408 1280l128 -128l-576 -576l-576 576l128 128l448 -448z" />
- <glyph glyph-name="uniF200" unicode="&#xf200;"
-d="M1024 2048c565.504 0 1024 -458.496 1024 -1024c0 -452.224 -293.12 -835.712 -699.776 -971.392c-51.9678 -9.98438 -70.3994 21.7598 -70.3994 49.2793c0 33.4082 1.2793 144 1.2793 280.704c0 95.7441 -32.7676 158.208 -69.5039 189.696
-c228.097 25.3438 467.456 112 467.456 505.344c0 111.744 -39.5518 203.136 -105.088 274.688c10.4961 25.8555 45.6963 130.048 -10.2402 270.976c0 0 -85.8877 27.5205 -281.344 -104.96c-81.792 22.7842 -169.344 34.0479 -256.384 34.4316
-c-87.04 -0.383789 -174.592 -11.6475 -256.384 -34.4316c-195.584 132.48 -281.601 104.96 -281.601 104.96c-55.6797 -140.928 -20.4795 -244.992 -9.85547 -270.976c-65.5361 -71.5527 -105.472 -162.944 -105.472 -274.688c0 -392.32 239.104 -480.384 466.432 -506.112
-c-29.3125 -25.7275 -55.6797 -70.6553 -65.0244 -136.96c-58.2393 -26.2393 -206.72 -71.2959 -297.983 85.248c0 0 -54.1445 98.1768 -156.929 105.473c0 0 -100.096 1.2793 -7.04004 -62.208c0 0 67.0723 -31.4883 113.664 -150.017c0 0 60.0322 -198.912 344.96 -137.216
-c0.512695 -85.248 1.4082 -149.76 1.4082 -173.952c0 -27.2637 -18.6875 -58.752 -69.8877 -49.5361c-406.912 135.425 -700.288 519.168 -700.288 971.648c0 565.504 458.496 1024 1024 1024z" />
- <glyph glyph-name="uniF421" unicode="&#xf421;"
-d="M384 896v256h1152v-256h-1152z" />
- <glyph glyph-name="uniF454" unicode="&#xf454;"
-d="M640 896v128h-512v256h512v128l384 -256zM1536 2048c141.312 0 256 -114.688 256 -256v-1536c0 -141.312 -114.688 -256 -256 -256h-1024c-141.312 0 -256 114.688 -256 256v640h256v-384h1024v1280h-1024v-384h-256v384c0 141.312 114.688 256 256 256h1024zM1024 128
-c70.7842 0 128 57.2158 128 128s-57.2158 128 -128 128c-70.6562 0 -128 -57.2158 -128 -128s57.3438 -128 128 -128z" />
- <glyph glyph-name="uniF213" unicode="&#xf213;"
-d="M1536 1664c211.968 0 384 -171.904 384 -384v-512c0 -212.096 -172.032 -384 -384 -384h-1024c-212.096 0 -384 171.904 -384 384v512c0 212.096 171.904 384 384 384h1024zM768 640l640 384l-640 384v-768z" />
- <glyph glyph-name="uniF401" unicode="&#xf401;"
-d="M1297.15 878.848l494.848 -494.848l-128 -128l-494.848 494.848c-94.8486 -68.9912 -210.816 -110.848 -337.152 -110.848c-318.08 0 -576 257.92 -576 576s257.92 576 576 576s576 -257.92 576 -576c0 -126.336 -41.8564 -242.304 -110.848 -337.152zM832 768
-c247.552 0 448 200.576 448 448s-200.448 448 -448 448c-247.424 0 -448 -200.576 -448 -448s200.576 -448 448 -448zM512 1152v128h640v-128h-640z" />
- <glyph glyph-name="uniF436" unicode="&#xf436;"
-d="M512 1408v128h128v-128h-128zM768 1408v128h128v-128h-128zM1024 1408v128h128v-128h-128zM1280 1536h128v-128h-128v128zM512 1152v128h128v-128h-128zM768 1152v128h128v-128h-128zM1024 1152v128h128v-128h-128zM1280 1152v128h128v-128h-128zM512 896v128h128v-128
-h-128zM768 896v128h128v-128h-128zM1024 896v128h128v-128h-128zM1280 896v128h128v-128h-128zM512 640v128h128v-128h-128zM768 640v128h128v-128h-128zM1024 640v128h128v-128h-128zM1280 640v128h128v-128h-128z" />
- <glyph glyph-name="uniF434" unicode="&#xf434;"
-d="M1152 0l896 896v-896h-896z" />
- <glyph glyph-name="uniF303" unicode="&#xf303;"
-d="M960 1792c388.736 0 704 -315.136 704 -704c0 -388.736 -315.264 -704 -704 -704c-388.864 0 -704 315.264 -704 704c0 388.864 315.136 704 704 704zM960 512c317.952 0 576 257.92 576 576s-258.048 576 -576 576c-318.08 0 -576 -257.92 -576 -576
-s257.92 -576 576 -576zM1024 1536v-421.504l297.984 -297.984l-90.4961 -90.4961l-335.488 335.488v474.496h128z" />
- <glyph glyph-name="uniF464" unicode="&#xf464;"
-d="M1536 1408l-768 -384l-768 384v128h1536v-128zM0 1216l768 -384l256 128v-448h-1024v704zM1920 1152c70.7842 0 128 -57.3438 128 -128v-640c0 -70.7842 -57.2158 -128 -128 -128h-640c-70.7842 0 -128 57.2158 -128 128v640c0 70.6562 57.2158 128 128 128h640z
-M1920 640v128h-640v-128h640z" />
- <glyph glyph-name="uniF109" unicode="&#xf109;"
-d="M256 1280h384l384 384v-1280l-384 384h-384v512zM1295.49 1295.62c69.5039 -69.5039 112.512 -165.504 112.512 -271.616s-43.0078 -202.112 -112.512 -271.488l-90.4961 90.4961c46.3359 46.208 75.0078 110.208 75.0078 180.992
-c0 70.6562 -28.6719 134.656 -75.0078 181.12zM1476.61 1476.61c115.712 -115.841 187.392 -275.841 187.392 -452.608c0 -176.896 -71.6797 -336.896 -187.392 -452.608l-90.4961 90.4961c92.6719 92.6719 149.888 220.672 149.888 362.112
-c0 141.312 -57.2158 269.44 -149.888 361.984z" />
- <glyph glyph-name="uniF428" unicode="&#xf428;"
-d="M1024 1280c141.312 0 256 -114.688 256 -256s-114.688 -256 -256 -256s-256 114.688 -256 256s114.688 256 256 256z" />
- </font>
-</defs></svg>
diff --git a/plugins/jetpack/_inc/genericons/genericons/Genericons.ttf b/plugins/jetpack/_inc/genericons/genericons/Genericons.ttf
deleted file mode 100644
index 01744385..00000000
--- a/plugins/jetpack/_inc/genericons/genericons/Genericons.ttf
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/_inc/genericons/genericons/Genericons.woff b/plugins/jetpack/_inc/genericons/genericons/Genericons.woff
deleted file mode 100644
index 0e7212af..00000000
--- a/plugins/jetpack/_inc/genericons/genericons/Genericons.woff
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/_inc/genericons/genericons/genericons.css b/plugins/jetpack/_inc/genericons/genericons/genericons.css
deleted file mode 100644
index 87cf754e..00000000
--- a/plugins/jetpack/_inc/genericons/genericons/genericons.css
+++ /dev/null
@@ -1,263 +0,0 @@
-/**
-
- Genericons
-
-*/
-
-
-/* IE8 and below use EOT and allow cross-site embedding.
- IE9 uses WOFF which is base64 encoded to allow cross-site embedding.
- So unfortunately, IE9 will throw a console error, but it'll still work.
- When the font is base64 encoded, cross-site embedding works in Firefox */
-@font-face {
- font-family: "Genericons";
- src: url("./Genericons.eot");
- src: url("./Genericons.eot?") format("embedded-opentype");
- font-weight: normal;
- font-style: normal;
-}
-
-@font-face {
- font-family: "Genericons";
- src: url("data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAADakAA0AAAAAVqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAA2iAAAABoAAAAcdeu6KE9TLzIAAAGgAAAARQAAAGBkLHXFY21hcAAAAogAAACWAAABsqlys6FjdnQgAAADIAAAAAQAAAAEAEQFEWdhc3AAADaAAAAACAAAAAj//wADZ2x5ZgAABFQAAC7AAABIkKrsSc5oZWFkAAABMAAAAC8AAAA2C2BCV2hoZWEAAAFgAAAAHQAAACQQuAgGaG10eAAAAegAAACfAAABOFjwU3Jsb2NhAAADJAAAATAAAAEwy4vdrm1heHAAAAGAAAAAIAAAACAA6QEZbmFtZQAAMxQAAAE5AAACN1KGf59wb3N0AAA0UAAAAjAAAAXo9iKXv3jaY2BkYGAAYqUtWvLx/DZfGbg5GEDgkmLVWhj9/ycDAwcbWJyDgQlEAQABJgkgAHjaY2BkYOBgAIIdHAz/fwLZbAyMDKiAFQBE7gLWAAAAAAEAAACXAOgAEAAAAAAAAgAAAAEAAQAAAEAALgAAAAB42mNgYf/MOIGBlYGB1Zh1JgMDoxyEZr7OkMYkxMDAxMDKzAADjAIMCBCQ5prC0MCg8FWcA8TdwQFVg6REgYERAPvTCMQAAAB42i1PsRXCUAg8SAprl7FN4QZqb2WZGRjAIVLrHj4be4ews7OJHAd54cMBd+Af7JHmt3RPYAOHAYFweFhmYE4jlj+uVb8nshCzd/qVeNUCLysG8lgwrojfSW/pcTK6o7rWX82En6HJwIEv+wbi28IwpndxRu/JaJGStHRDq5EB+OKCNumZLlSVl2TnOFVtl9nR5t7woR0QzVT+D7cKLeIAeNpjYGBgZoBgGQZGBhBYA+QxgvksDBOAtAIQsoDoj5yfOD9JflL7zPGF84vkF80vll88v0R+yfxS9lX8/3+wCoZPDJ8EPil8ZvjC8EXgi8IXgy8OXwK+JHwp+Mrw////x/wsfHx8HHxMvJo8Rjw6PGo8CjxSPCI8fDwc3PVQ2/ECRjYGuDJGJiDBhK4A4pXhDABtHClYAAAARAURAAAALAAsACwALABaAIQAzADyAQABHAFGAZQBzgIIArIDTAOkA+AEEgTCBRYFYgW+BjAGwgbkByQHSAeCB+AI2Ao4CowLGgvQDBwM6g08DX4Nug4kDkYOYg6ADsoO7A8yD4gP8hAwEGYQpBDuEUgRshHUEfYSQBJeEnoSlhLEEtwTIBNYE6oT6hQaFC4UShSQFJ4UtBTyFSAVjBW4FegV+hYUFiwWQBZWFmQWchaIFuYXFhdUF4gXyhgEGCwYThh8GNYZEhlCGVgZZhl8GZIZoBnQGhIaShp8GtIa6Br+GzAbVBt+G8Ib/Bw6HGgciBy8HOwdHh1WHXAdmB3eHvYfIB8uHzofSB9WH6of4CA4IMghACFCIcQh4CIGIjoiSCJ8IpYiyCLmIxAjWiPwJCQkSHja1Xx5YFTVvf/53nUm++zJJJnMkpkJJJkss5GFMIQ9w04IS0BZRSJLMIIo1l4XFETQFkVFBKwVrbuWpRaXPOtalZaCPKu1D2yf28NX21qfQubk9z3nzoSAS//+Mbn3nnvuuWc/n+/n+z3fCxHIaEKEJfJMIhKVhJ4GUtP8jCqRz+ufVuQ/NT8jChgkT4ssWmbRz6gK9DU/Ayw+bPKY/B6TZ7TgpuVwN71Unnnm0dHS24QQRSACUYis8XyzST6xEAch4LF5ZJsnKkc9NsDDj2ETXgUikT4iaClNJEBSGoZIP74qa+l//YRfKB5EAEyj4g/ztWBZbslcIEjucqHATOpjkYBXsYo18DNYeOQI3UMvonuOHIHXj+/YcXyHSs7FLGQp+o7sYA8IFq+BpmqKhtk6SDEZinWVWfMsHlLfIkRCgjdPsLpAtMlRUu8CmzVP8HlDEInJmkC+wcbihT54cN/6cePW79Mv/f1E+MUT2zvCM68cOWt7Rwc2pk8TNQ3IWW0gEbuI3yxI7KW9HdtnjbxyZrhj+xPbWX0EYhjcf9h3Jg9gldjBfhLm1af1ERF7BTAEmoxngQDeU35mB/YPsDiFtU0gxChgX2tn8S6FP3zG38O+zMWEVkU1yaYQRCMxt13WblvTT9bcdgpaTsnahlcqUp9owt0Vr2zYc+oUHwN8S2FjwMYV62PNA5+pPhaFc0EP4JhuPr2la4eQCVCsNRvnLac3A9nRNShIBFZPXpciEmHjareZsEbRWNTEBhVvHDasmyniwP7HJ+4AhlsgbmOP7PUsWVA8DFmHuzoSa3avSXR09XZ0HaZfHa7raOARKjm8kWoLdwfuamwHbcqaNVOo1t54V2D3QtA2nsQL1TYePrwRtMTaWUWYhvI0gGlYz5FeldWtgPiwvfW8bpVgAk/cwxqtR/hwhHxeVq9YWNG6duzo0miCHtBgy55TlN/jbYIHFGwyi6IJ6NVO7RG0c7c7ugBDRITMuMlYqovNAFYeuNg4BWPRSBCDBRhsEaKRQJCl5mOvSfmxpqbY3GQSCmYvXjy7s6bVP2WcjI/P4iEUxG7ddWt0brKrC5/P+Yz2fTans2bNjWMvPTwOi8B2Vhtw5pEr+cpyCWabVVAkVQngpGDFtChYcIsQCIYgT1ADQUUNifmQB7g4HIrN6pIdiponhCAYkoJDMd7ucEkOlxK32q02qxIMlAewtuYWQVwLdsg6+fyNbcufpfRunw+CruicxZMm1JYsV4zGfIuUV9+8OH7VzTdfFV80IpSVVZBvMErLS2rHT140JxrJtYfGjRjrFIyl3liplFNkNDlFY6nTmwuKwx0fu6gZfL67aOrZ5W03Pn/SQNiZfrXlIfr62RfrVXeh9JvpoxY4FUt5/eRFm2bsvTy/YvzFdSDK5jq/F8DrrzMpglAxtSFekt2zZ/rmRZPr/WYl1JmVJxdEq6VcX3GhoGY7zaAUuoZ5pNwhrqF5WabyKXVZhW4l/MJZaHhoC28cdiIDKkJ4nxqIiZQittSTBJlKiL8+LogKUe3+mDleLrvAjLhidsRIPBDMAda9LsERkxwCsETlccHiVXx2S4sUD1SBWyIIewRxjzDgk8iBw54n/0w3db0rjt/1ViE9TY/nNXaeue+KFT+Cxz4uSNCP6Bp5+biD/9dsLw0qj8DEq51nG1+if695Cb68Zevjbs19yW+VvZO2LB9yLT1Er4JdsAEsP/85/ZxupEvw+PznPweLNhWq4MY2evS13r0roL03FCq+m/5W2Jx4iP5u/dsQm1SrddTDuw0Xd7lKw+05HqUYSuGfM+nhE/bxIXBCrGAf3Sc0ultay6/9qXZB5lggL5R1FyAeVyEef0Aa8EZR7Qi4kuRz++3helzyOL0wgJfhOL8YXsXtkgNnaIsQrrc7YvE8UGOqllwpVM/Vnvo9pdvoEdpfVTXzgZ+MuPJ5n99dV/vjhyfPTs6uvwVu+TCrcfGm5OQt4R+tsLY3rFJquycX25Yff/vwfT0jH5QDY+vEbavV3KI3b5QrxfqfXbS445E3s4dUtm1a3Dg8XpRILPfm6vUlKD9UjQQH0MGHKG3xDEcZEXbEAz4UIKUIiyg0zwMI+hHk5dCPKlv3yZOWX/TT2VWUpqrYAxUR4SxB6HwNpN6c5jj8Iyt28drRp2lfqmFHl4xPOLZjufLHWK6b4YPIBAMrI9IiYU+Ugejl5YrSbpiQT1+lvX/+s6N6/EXXtsW7nE51/pKKiNMofU2P9h0SJ0ANCJEFs8bHShVRpB+Z/NVeUTASRJ9M2yyIzB6yhKzi2GA3s0HxeXFFF5hjgDMXFKjHuZsNdgtYYvEWMRphQGBA6AjXOwLlPq+kqPXh+tgIiNkVVVHBIiKOxBz2c3F+HGpVjJmjEbENVsDEL7aN7Nn38idXH6T7v9i27Qv6pzNv0x+PFQO3XC8JX/+j+y/gmypIBXkW1VFoBYdslvMkVZjcCMZV9NN7b6H9R8YXF/lX+Lw2S561qhb8T13bbs23WjdOCVzm82GkrVLwycO/OvSeqmHu+w9e/cnL+3pGbvsCJvLSU3mn6YYlUul9fTUhWREeSo30SHv7dkOOklNXNzZcGJoT9Qp+gzu7JL/Qlt3QAUu6Ox9YJQsilHlFWei7SzDBbFXwuiErE6lWVN68M9XQBT3vH2FzXSC3wj9Rlm4ldWQ4G0W73q8hITOh1ZARh5FBLM5+Me7xh20+my/qi4ajYeE9IZAbGLPkmh3T1723++JF9797+do3WncKVqO9oMjucpWblz66ZMmjS0d2j48VSXS/uE9nVJIWDE/fcc2SMYGLd7+3bu37uy+ePPEeyFVzDdmqURIXP/rbRxeXx8Y0Fb3Nk2M9RZ13Kc8jJzFjXTkjCTJxx4YX4R/FPkZF2FQHFYWyxxz02FoUfCbYhPn0ILQ9KExbumxGvL0KqjrkAnpoWkfluKG52fSQJMGEbJvbUxNuLZ++eVkDEPG/bl40oW1h9aS62kmhszsF8/Ir/WF3cSz1n+L187eaSnzFxZbs+GWPr2ZcKT0/Gct0k+ZBKzC91Bg/saCYDoEPiYTVjhG8moIa9dgLbCrWOs672mbSVyVbeCiGHfSbG0ZPg6mto6ZPGyk1PbSpftowbwH9GgAMhixvg3fMyMwy1ZfkGSIW9X0sbpzS2DxpclPjlL4N8NqTB4sqg4XdHtpz4CAcrrQ5h5Re3E5nY2c+isJhGsqFqazGLkkf9kBQwJURDMQtbALEWKWsrD/ZGsFVEULemYdJkQSpeewvyOeJLNWt++MT2xZEqmdctePgksVPeicUeOffqZb+TMqzb71kxuxAc57j6iVrn1005obXfzT/0ZtXTQjOMKuqaBVUn33munj5xBV3/fIvBhJftGnvgfkbPnxx18rm+Qn6wbAN22MPXy08ZfQsj9x6+LLp4e3/0bD49l9B3cFLn76uLTSt+6a7p965yOYszJmSVWgy+u54rnvS7nu3rp9Vr+N4RvYtzvCJAiFPwGYGY3ELn8/AGiXqjbI77AgbEI8Fgmk0x6nD2CRS7TinOWxuYboywE5yBMiFXCIt5+/YliwZX7J12lW/u31a0+W73u5Zd3T3tVOGdC0zl8iCSZDlvNHjtN41Sx/oGjZ1x0XRdn9Odp1r3KjY3GiBwbjG4pAP0NO7BjMH+hn9iuU/dP1icEaTlx0G8c7Ox+9YnYhfdM3td7bdcmyoIc9iSGRZbaYpVy185uZpzctvm7n96zujndGaXVcObZ01+upk5TSLhfpnLNo8BRyw7sgAQRDIXmGBukDei4srn/PeAuS2BeXpq2yF2V9+SR/+MnVFOiDvZecv03d41eUlUW9Xc4gXbyQR+bkP0TuIkwWpYhx/FrPDjCITQxhlVjaAtSAHlaGfpu5bsco7bZ71qvaN1z0152hdxNo8YdiabkPBpsSYG1VioA/SFB1Oh0AZ3HYtlLWvuKLnboOV/p7+agr9+1NPzbu7FB5nbcjoT/mIDd9af0ZBIag27OnjZ+CanoKsl/J7Ac99nL0SgHeJplTgWvbqWgUqEw47kw9xEwoHnDaMeEZNvihvVFwaBb+gs0wF1c0TN93cM3/+ig0XXzSqNfJqVzIZqjapGm2iH9PIrqoqZ/ls+lHMbi8ra2i8boOwNuVLJObO2cKm52D8cJBqjsEX1J+4lQK7O1aANeKr0c05B9bNHkb2b8J5WQlepRSs9iaojw2GELGMvnSKqVBIzf/XvPk0/ez0ZjP932RUJtFkMqqlT+ejCCWn9Lf6TolkbCMqSKg7NY1JsVekA5l3knxp9QOooPSTbeSnZAe5h9xH7icPkoeZNodNsNUq7M+q1KHOoNQpqpWdFBsDFOxOJR9A8QahtgYCwdpANKB3byAYCfIVGIhiZAS7IFobi8bqIqzPo/VxftV/I6A2DrF6B9Ta62rtYbtj4GdjRy37szqsdXYwyXEjOPyyLQ4mv+qPB1UjBGV/VFVx1Pk/Af+E9BkvqVZThSnVCiLgdBZZrADn/RNgIDGKVuEFTC68AAIM5JHOCDArcH2cujJ19mNwpV59EO6kH34sjPv000+hUpA/ph8KjQ9K/5AlWi2oAkjsHVaowIpM54D5A63OzoFjLPt0TUX+HC+AL+GLEhyTZAFkEPCWHew1ngE7H8vOptXpFop6jqwMlgzfgCn07Rd3wmz68M4X9/5pVeoFiLx47+Rdu3ZhaPbOF+//06rz56oF5dwL5GM2V5GJFaCO5uaqVQsSYVTXBJQPDrsUV9I8AjEVgXUEMEzFFKiHWTgDUxiRRmStjdQhVQuUsyj+aoyBcAgUPUI4B8whIRjggocnY1Qcc2MP2T0TSiIqi0GO1w6XiLfsjfStAPXlOINQiAVZlojhEpYZDJjjMYyPK5KCcG+2SxI5yJgfI2T0Dkb8OAc8tpueWLlyidW075r14N4wIbn6rTtmlSdC2KNGEUb+/OVlD4Brodt/KX3/dnHo0I4tV6xrn7vgyWuT2V3tl9AvV14xvCXLsHPlqv9qanEkQxs3RTsstnBBVbS0am4gEDEYzEUFlfXFzki1udghK5VlFTWh8bmohxlt9jGBwFirTTYbi70V9spOj9cvCh0bW8Mza3Js5qmXrBtWPjJsKjaaHRsebp91+0y64TRsuqRp1o43eibdsNAZG9/TTQ899BD9dFxb7qzZUP2MyXwv/fSNdde9DyGdd+rNZLQzzUDvMqxdfRn945139E8Yn9dgm739re6xm9bWY1uzBEiuaLp1Q7j62jtTWaNuGtYz1FfiTV775ALhshdbJlmbWpZfds3637g80+d3fpgMV1uDwxcsnFlcWaZm5zkc44YMbfc4PBZByHGai9v8/haTXYFhlQKUTSh1eQSo9Pnag1aP0yIZi8rcc2pHXhYy5Yy5aHU00l5tsOfVDC+Pb2ieclU0P2flA303f/3WTTeuPXrvZVb3yq3T7qJPrN/QXer8rz27YOU99/7BJQk5t7xL/7x7H/3D+9f//8R1mT73Y3W4ej25BG9cuAjy5BAqSKY8A858HnIJsTiKJ5eI+ngspPiC3kAeJgOXWAZqSMLF0iK6RIe8Wy2aMGb26CZnXlnlitVXdl86K2E2I+waTFa3P1IaWdU+xmzxjB41rACGKdbEiNmTpo+oyxLKW6Z3zpsx0mKRCsKR5NgZ48aXFBeJJmeR0XhKdTQOKc0eP2rMww899bO7N8xzqkPEnKH1M+ffsO3QojmbZ8Qtcm6uqtD/EVS7w+3yuUqzzUKRKycXCr2VeeXV4jOpjwQ5W5It1aMuGzPx+s62Km++ASFJyS+sCCerqxdMm9hYlZP9htG9fNWD9786b/LlTW4hr6QoKz2GiEFXIAYNIddh79hVbgwNMqiRUCwy5iaivseUAtlmBWapCgz+YRqmD9rTgn3gORITJpusg2SINS3zB57bMnQgpo4Mw6QbDiy5auWUiZe//yukq6ZRdZ3r75y69cq2sYteeHB7z4wqekmT1ze8qX368g6Xu9xtKYjEOxdVDvWUOIpqIj5vkXPYsBkzu7ctXzGsIR7tnL1xXsswr6el9dLJ1aFCp8NWUlYV8/pikVlXHrxnVbfYuuzyJQdumNSYN3zFrmff62mfefnGqXeu76xL5lTN6Nn+4AuL5tPftl86e3hzRbDY6bAYjeZ8zCPkLXe7W0I2e3l5dai+FqmIMzhkQtuCS0a3BgMlVrPJ46ofMbTKbvN4orWFRagDJSdNrBkRCnH+jKyIKMzuGGESHXFX1wbwrFQiS+EcJSRUgomjOO94Zp1Gwe6ptyuaPVhkZ0cymmCsgSZGXjFu7lCtt27VwgSoiACeOWMLDAbYG01KpLiu3OAJ6mdM3ZWsqK0QtIvu/3qzbKr2lLTvnD5zrz+Q1Cn927BVDas93KIVJLVkBBmPesxmrGUMq6UPWwSJAY4VYC3TWqK9nKkzCrvzxzidV+0oE1iQWwesdgmsjhgzlyjEqzCzbsRi1e0/gBKO866MXoTpLCimHHILYgXrCtQSgn7R7mD3LpBezx/qyu949nBHvmto/rDbfkL/1hoKjRwZCrXC6HmtrfNaBU9lw5DqshmpLY+C75FH6AePPkY/eOQR8KU+rKiZWVo1pFGuxoEYUb1vWCjvilfoF/QE/eKVtQWllUXrZtTNKDn03/Nks9kGDYXT69qWL2+rmVIn0jOT/vxkycz62LyYaMh3VeZ3dORXuvKHgRJqxeJbW/VzKDS8rHZIQ3B4alnXgctWHOzqOnjiYJdwb03JxOHlDUJ7qCVUnUg9Fe8srq9b+uzGKVM2/mop6n/hkb4Z66oDC43whj07Rx4/pG75HcurJ4Wa6bU5CypCsXlsfSK/Znq6RnwkjuPBjDBM7RX5loUwHDw23VzOu81hU2VPRscKRh1x/aE0ze63e2sA5t03f4w2LwZqzega+bUtW16X7kMaoc7bPX/+7nmw/D6Mlo7Os/ttIS8tm3vPnGjnj0YfPeKpqfHAx5uef3HTZdU/Ptq5a+6cnZ1/qA0dZ/FEryPbP8B5nU/KM3ybb+Lo+jrbxkF+yPZyHBB3IamOOxRkxpn9GyTW7wWSXX76Hn3P35UMwHLZ1DC6wSSr3Kx+VN/iOcrs6Kl9LAF9H/z8hR1Sqc9XKhHdrvUCcqnWgT0WByFG0WTMiduMEHUIt8Ga1Od0O6wULBTDggVWpv4u5NPtqc9hDb0dLt+d+iL1xW61lb5FD0F56lnw0V/RtyAC4+kH9CFxL/0TTIDI2W/o28t66EvQ0rOMt10ghCpzsO0uMoa3XRUFNU9iKoQKeaBrOEwcMr6F65vtb8TNyLCYcqGzMKaZcMuiBxVo+dXZjdbIHFlWrEU1rjMGWaVX5g11Z1vL8suaK4RTXtlpSa2ylcr/dFpLyz6wFouCS5RcFvr3Yp+vGEZk2wtUsmgRpbTFarVV2MyCgTYU5IqyWlkh2xxVVSV09S/tZW5zn0GRcZ4U5jnzDLtyrT5vcbDYk2PhOMX2R9h+0GDtb9BmCPnezY/0bgfHOgFnLd9TYnsdqPw5PDaPGBZ6xd5+wjRETJ7i8jylIRPW+klmLmHJCmPHOdwqZYTMRqCESyFFKBHf7GKApmAwRdg+U5Ldk8weC5+HZcSftmtm2DQza+q7f4hNeCdZTKhsmcQ6cIH8XHf3c/Qs/ZCefX716ufhjrXv3NvZee87a3fRr3buhKw/wdBO+rRKVj+vJ2LJkefji8+fXd2588RnJ3Z27qRf0dcxuUToXPqfnTAV3tPnB9aJ8L1IE957GY7arSLrVQ/rTKmL72ZqTGs+tUfS+B4m/ezUnn7siD2nCBncrmxSTKp0W53JEw3b8LAw45c+rbj+mh4vNlQ+VlhYRqFzBg9NwM5ORvu4xiniOdXrRKYcSODZqWhn2RLStLOYjCVIsbNwIOCkhD2HXkx5fl1cZChpxLrUoqasioxHxS16iZ4mqK0PowJRAnU/VFUJy1JC4RJ1xRO8DMK0KYebmya/s8bSb0AwqFij4pxQETyNVRLcDtTnDn9X5QnJGajr4H3rYpwblaQJZdwohqdhm5g+MmFPOowc1Wb6oZ7OvHtuO5vVmF+/pwGU6GnYM37Q9DVzFsh3NQWi+qY5Xx8zYaZ6tXo1tseNCAcOQB2tRYA4qAFvPt+jUyFurx+BsAt/Fsrmpk6VNzUGvTnWYcLX+4WyA/6uwIFCs7lwf+rkgQCG/cIwnspfU5pnDIWnS88dSJ3c7/cfKGptLTwglGHwoL9rYG1ynC8gJdh3KqCUZjv15W7JjOyOIM9HBEMJhdhHNGq6+9n0+oFhkLVzdd/q9Ue+PLKenQAb/LfVmSe4dHY9eze8mX64fv2AfTpdFm/pBcWRdFGoXtgtUY9NNsHfvlVmauxAngZBE1dT07fKpd+cq5VhsG2cr7cSUsFtVza2FeOJMjj6gXqIOIw4UGzpCv+mOkomIb6S+jf14vKNQKWBKO+QXKxTKaJbNdv/Z9AWNEIMqyIagXe8EZi2FUNVI8aNjgLnXYifMpyl8hL6JfKeL5dSBc4shRwYCjl+WEu3Tnrl3Zcn0lvh8kmvrFjxypQUYWauU/SlhRxbZXyTypf09CyDM3BmWU9PXyVcAT2TZ0yfTG+lW/EKL+3RXzglRDk6n1dn5ofh46uOgDcIjDWyuiOtjDNLeByCFgcE46whqEtk8N7PmSM2KK7zTYkUeWC/ckoAWMBbcucvdm2/qH3FK0lY+8fQdWfJdRpt5M268//eSG3h1YC3u257eAVvWsuaEaf2rEDIgf2eoj2nhJN0L2vTlO3e6ZPhinfhQ54DvMoauDf1Fm/4V13LeRNfWrNgJQdjEBho6b4S2P/M7IX1MwIKo15IaLSX9mqQ4CdIyBfcayxNen+R29HPz8NA+nrFhNbX29eriQl+EhPqBfcaS8PmqJaWKxbEsyjzcLFVGqJ+ziLsKutBhlWIVHJ4wPgZPveTiQ44mo49ySgg0DCB4OxPA76mg4+eQuGJEYoOIOjiX2+KqyACXjMH5w1QirxhBzGy9WrBP5CLQSW0/BD1U/8hWi5M3L9f+jE9mPoUJtL9ggPaQHCkPmXYovMFDbs2i692BN4gMxqj1Ne0PqKJuGAUBpiUGahTvdBLE+f4MeMLRu6TZAT8M3kYi0jhT8TfGQxzF5pedmJVJRLvv16lF98zkDzGdIwCW90OHIoaQfXjfMQ+6u3TaELUUo8vEGak9moLEgs0mIThBQqW3qdBL7acPetbwJ/lskdp/oS5syE2Ztx8VOQ5jPYgDCVS/E1WFegdjDc5uLY5g+a+Gp6IUO4z1aMYcwLeZEGgCnxmphyhmAWi7zm09ZMjdPfvj8I2mAYlr67qJ/Me/Jx+TA880b23G//kjLvE72HREZGsepX+lT5JLz/6BCSh6PMH5/VpPB2X7f3fADEo6ovYG07uo+JCecJ1UlyiLcgsBpZmMXgs6luVeZErZnxzunVZs8PhE76u7L68u5L+H193f4zQj8LC3LHa/LgvMbNrmPTO2AkTxp45ylcVRNmeAQ5MZp/BhtgQ1nkNQwXUXeJc3+RIhqCG6Oth0GB3sMYH1ZAgcBqleJnHFv1tkv7mpVkPbm0E1AoC0S2TmIMOHqi+JmH4S9d/MofFg2/G4i95YyWcSo8dD7U3AWoT/tjwU0IZ28h47PiSOSwCyutLaS3vPd3fivsxVWa8mPLAyzg9Liu7m7sz+bwDTkt8rXGazJ2XOIJrLLRmytRuXDcauzLXpZR2NcP2qxk2MD8lQZuypntqmmy9TJvZnUA2snUBP1HY3Mgjhbp/HIKnyrA+GjGjClHAii+wi+VccsyZSpfT5VPn7IR9Nz733I2Ys0qYNFl7DB/AXVOPrd0FWSnnc2B4jjlTMTxbwPBMPsmWEJIJH8QdMucl9KR2Uj65IEVgr9aLY4Vz1EAGuBQpwsFi48WuBvI10Q82k3GZ4pHionAQZ7CQIZhHEFd1HrMLO0w4iKwJzALi8JjKcIJxDwMTTn34y18E7ZOa0f4/PnTz6UcXrZc3DVs69i8pzfLO+KlLnljF4pRSvP8k1L1xzNP0b1X0jH3zqyDeugvsdPKlrz48Dt+3vDP215euPbKtFBR8SFNMJxGxrZLGW8OWpcb87tL1ZPjDOoG1j89EfzrFWVRP+vC9PsKd3RjSzBASBtZnKtczy9gq5/wgfQGHlN7vM6fXizCM/gu2a9QCa6UH04HuvlE4Mdgw/H33mjW718j30zLEJyLsSZ3Sry0L2VOcPvTwGpbkPG6icj7L8IW7kg1emTL3HUNVCa+QPLceEYnTsSJ3IBu8GAnLisuUdN4ZphzXmTJJ4475gqs/7f2pM2Vd/Mhc8Hi4EEK1Ecmzz8TSCPu48Bj8B2nnRuZHmRFDNKGrA/ycwMqx5zgI/A3QX6T6ZZ9OjCVOm5lE0nM9yzVK5oTKCB0j4kRlumgJ12d1cRiJNUHajsVtTNw+OWizT1UPb2xdVxV67vI9pwolwvWyHWWejYfD1Us3nNrT0srXpqaCKqf9Ye1Wxr+DbGEEA5ERbCdNRFquHEwmP207mqQN9CS8Bm1tnyaPt83e20/2yruSx/ARjKcN4GaPjuNdW2rHXiAMkIHJLpnRKPVc/4t6RWS9Qtym+Af5f+UnuKwRsPCoByQCn1PLLJjFXFTpL+THqYVaOmCWBrO4HRIX2B8UTX8H1zySWyS1EplFf8G8UGHWLGqRH++gv8B3O+BzrssnFFYPxuiYgASEiFRvCllNr8xksYDUJsHTMSxJsHRYFyMm41YCIYE/jQlsDKZ6B3wJRKwe88bEGSxyd9o+Pg8BVyhWTX+Gc5st0syzNE+QNe6STIwiq7zGSBmbAWeJoDsecx5fwG5kTfm2/ucjQZzZNShz4lwTJBl9jx3xsM03+D48SB/8vnthgEylMqE+7cLAgAN0xgP6e0K8awRuB+G2DFbnb+1iZ5CF4ZisG2T4WbeNMEMJs5718TiJObNo6dUu4qM0jvD8GX4FLsg/zASuzRcdVI4YZYownCtKYxlpmQI5K2NWwEyZqOExxfhcwQeYituv2xAydnCGM8U6FjN5Lqev4LEKCiOAIRBEfIc3iF/6cJBv+vQn/eQnn96kcODglnD9mnrzbvqvX5bSf0Ju6S8hm9FEoq97Ja3FMXxOAwBDq8Eg4IIBFJCwesz1FnDe8NZi43SHX0U5vLGqfVypDgoCVk3HLmBmGyZH8OJ2bzzsqHSlMeIc9pQPYI9ej+8rPe1JSDJ10If1/JI5HOnQ+R1lCtxfn/EqI7fgmdjWlkfl8hqBGDECFy3zLmf6JzNHpN6bKwToXIGNEMV1xy1yKMD38Qfn2bDymZgo5c4cePJFue86MKjFNP2MZbNhuUpNsdXI8gaUm/q6TY+5iY84kxBNyGrTs5nVLRCJc41F4apFIjN1+4hYX1/fd4TZo9hU0vT5fBZLi/80zjRNAdFyj7pAXUCq+M6K6ldUixpkRDFoCQTlINMf48G4HIuLcQeictwh2h1+h2rHseaT216vLmikv6tptm95Y4Sz5Y0ttqZa+rvGTwyGTxqhrrbJtuWNkdaRb9xqb6qFOhZNN3H4FU7fam+uOZdSzyA3O4E5NNfoST/RM771dcy4jGM3ucDGYEV9/rwvH4Ab+VWI+fnOaRyUC7+BkOo3n96yaYNweHwf4aHUmPHf+iAidWTL6c3jU2M2bGJX4fCGb/GH4nNypTyjVyCgstXPlrusc4eUfmEsCGGYsEkj4ezRY/XF/SaTwWx1n5srOo8y6SyRxWZEvUx0qGbceoBz8ZTsyxH965GBbxIyOK+7D4n48AwrnmTwftD+QyYtkiELm576dyB6iSkuIAa+nyCDvp/A0tLfT4jAHbwN34u5ZBDm6kbwNNalQRc7x4AAeEZfsXj+OgO6vKoixyOWv4LaFcNcjqnG84rxpH+DihPS4CoMFAm82rj0M0XzL1Gw/0UtUzy+hO1mrR+oxoXzznLhvJMym3TI1zy2MDK3C+edsExH+720V9v7rQlXz4vpSzJooWk5dl55ju/+wodx1m995ZMazFsvKOjskfP0yPPKCH93GfrONa4qB9+uZkDLfqUQjnIPqO8pH170t7ffsf/n825aUlHkLCyKjC52vmUyj5n+fXUSGhqndSdGXrR/XEFBia+k2Du0umpkg7fUaquOpH3hdZ1Xn9Xsp+K8YYYKjrknqRuHzQ0nL0jLEhpZ2hSOvESYwZ6lZcyHupk9I2MHYUzHTOz4RhgVg7AFj6DPb0HNLlzMggqjGimWeQe00/85UamlPuvgtkitYwTeybwu3I7JE6bDvO7/xPrkKtvYTgbTQFsEexnEW8CF0horv35CU/DGZ1+YcP/9E1741caK5gk4ZZeO+c1r97YMHXP33WOGttz7+ktj2Jwgl8BJdafixhWsfw3F7F8iqBbRwQzaQeGyE/Qo1Jw4Kh09cfToCag52/U1kK/lhm3IoRu2QQO8to2+Rl/bBq/RshaJtDCdjOunaTtQEdv9MQpRFLSoxX3LgTjKtTREubBJNxIpiCqsnX0oqges7lEm33UTrcxhhFnz8IRU9lwKbtMfMPp+ux6lP1wP2w+Xn/p3JWvkO8os+4EyLSj+g+oPldoHL8+lOw50/lDJOH1e7mSJGIqm56iMcgzLNRkF5rRgCqIIY/Y0k8CtngyARYJyaEfbc0v6OR7LCWYdpb18CrMPyujxHW0Tqabfp/0ldFzP4z7Vg3OVL8iLfMf752wPIuuTjCzycgdl0Weq5w4WHD0kPsnHrk4mV48dt6Il3ODzNYRbVozjMcB7SsaVxzRSdogDoUEYx/lRNrPSQBrEeYnMv9kT5Fv1wC0jDLgljS2shmHdKdLtDxcxNS/FxaPE51EfSW6Nr1lTPvfiem0wd+K2hguHlDkEurFzZE+Uf1qncEW4j583nwb76c1slxR5h3TeGGq6J6rG6SbTNwQiz8I2FBAn99f1cJRUVBt3QfF5mCmOQWglFOlBH8qkZV+uXr1w6sqFf/0NnQbk+iVz6uouXbt96YK3FG3smHuW3ZinFt20+r6nhV8NH9daWkpb6PFJU28jaTs6kTP7wz4xrHriYYsv7pFna19oFTRRwS6oXnKFikvOtM1b49wim2EQ6+eMYwmYgswRk7MLOJCWxzhxe/s5Vko6Xel7U0j0phaAm00QI/ezZv3KeIOR5HB/ZxuOIMp+i8ljYR8asNk2BEC3DKt+I6BKr+nKDWjf8DHTzS2gm5i1bzROhPFeThNjiqVnDC9shEHjLErjagYztmnny0kz+Y/zZZgjqKgjuLtlMF4j5EONMEJ1jIAyCNRAvhQcAY54cIQQCKoO/MsXWSK8RVkXR3jmCeP5QhnGYaAM8iGuloEazzcEK/HGEccMJYdaIyvMXdNRI48QkDiPEPBtScWkIuboyMdZd6GIzBPFLNnkEsjLkGhT8n1FhcMiFUEAWXbkWnL9geJRzsJch5xX6nCGC8XcGkOhrSJ/Yo9k9Ug2Q/OkZqUgJ2R3j3FdtuidJwO1bl+NSynJrk2Wx3ODxV6Lx2MszbYmY0PlvOxQgbMsz+fMcjsNhaFgnVLamD8kWIUKowEMcpYMTtc1726SsrJHubPUPIMh35rbHBTyLaPrvEaDx1BTWyY4Suoryk2CRxr6LcH9L0mxIMPum/zHp7LCRQaLTSyNueOq2ZdndfogS/VnNcdkVbD7so0VTtHuNNqz1ycFk5wlGLN8pc0em9VkMIH/ZsgxGBTVLDrkItvQfHOJN+AwmbPiVos9x1SgWixyvsliLXQ2O2srKt2uSqfRPKW2oNWUZcpxlIcWz/gJ7X+mPOeWEa3DSgqiLXK2Uc01Fxepdq9FrjMWZEuWxpGjyzplh8mpcBm6V3SrC6SMDfJbPH6Az/t+fcMNv75BFAdfpJM38Ougv7SfJLO79DJUxzlvIF9rYq84YK/BGwNbKyRqArEXUb8vwd6REnwvC+ORa/BYA+lLcDtOIr3PJXD+wqL1PAfbACpILRmmf6+sey4hJ/Po3y2nv5YxIWOLDYd0VHl6wUtpYodI08i/Ru4njWOZLtwYuPqmrh083KfvRQrJtMPI2LXeB5jc6NIkn3fdGIZ8oY5WB7WP29H1gHftWIyw87QHMoRZGdAtzv/2PS1LMps7me+4gejSpI8wBV5EAU55jMhAgmlOeFCSCQHnYXqY41ucY4BGcvX9EKOIOjEEWyS+Y+rzBiEaDCj5oDBfLodubiyDcyYaAp9igf/0+8EP3MtP/G0M2xGjBxPOTv9Ef5c/X9Dy/RjKdya0p6KBQNSvatSBtDPX3xWAclG2jZu+8QyNTkx2xaBNSzjzMbH+VheGOp2J1L/wJX+UkMHfEo4mE0k7mUeW8D2jtE9gC8SZU6DHNBDDfGzZ8A6KiHLlf2C0mdUHrxlQH/D8ueCqDgx1Mpoe9rGN/Sjx0kG2m5MOMiealD4N+tJq2vmX+fq484nwAJKqD9L3Y9Z5wZeMPpCeJ3j7wJ5TkJk2OJPoB6f2pMXKmeQgZTiZmTsC9skpNaH08v00ou/Lh42CiGzXwbZHM2tWfsS3plXMFmh3v84k6fH/Hsc9A/Cnb0TJPdEWoe+kwGcPqoOzerYxkxi7F36W3sETYBWuqZ/imvLwvRYH9w6Iu8BhYh7XgzrZFrb5TC2Q6WaZ3rGMPkCX0AeW3TH2lR5NS/edpvW8Qn+kd9OROY/+9s1H5rRdYoF/aQ+c64UHNJptWSqm0o0W0nOCkMk4H3SLVyX75tdcCqytwyESZFt85UFlIMIcDwR9ujUsEg+YeC3xoUtwtwjML47dFah2m98bCOreoI48QeWbBG/neucuCkQC18+lX+28h/5rzg14s3iOJ+9t9rS39D68XfrY5yB9/thSDO4qSWk7U8Pn/mNT5+M/aarY8mu+qTCybRnt38rzS5x49MpbNl/52HH9bivAsgmtmGTqgiMg6HHXY1aY5fX6He0/0tmh/WLzwpXhzsTcWyZnbF3aoL1swZNGC1nTTXps3TOeInHGwMaQMgSAAQ7AuI09bPJWAclCLcHqUO3EIb9+371H6eX0SfrXV1cJpOv5S6D+sBgOU7LqVSiBabDt6Ocnnn+a/m06r8OrOBca+f8FUcr9zjhX5CTaGg8rAjOvBoRg2AXumDR1z5o1UyJzws/2Wr98up88/aW11/EOFB8XtTVTBDJlTXhOhJKpBYfoF0PoF1AwBAoObT50KO3TLGJLB++pySS9p3buO2pHxoLDDZ+mwWE13SeDzpxAZc6MOn1XPKTfy+gJvL+zM9+Z6T/mLsDwltnSGbHWQ6y/+TduhNfNyHbRQPTIoh//PCIKMe654JHIOroVqtahHh25Eqro1nXHhMdT77yTOpE68U7qHeFx+WN6zx/onvffh4V/EFENodekboRb6DrhGrgx8917poyMP4SnGFCFH5TJsWOo7g96Mb0ZN7h++YPfFnklL8zjWKaK386MVrD6wbK07x7X1ezI8CuZ/cmIs4vtZnOc9nBvczbv1EAQYZk9hfq43cFs1gof036udnWxweCBueOHzLphj77r20f0O8q4MQcyLpaBpP/TkKZrF3Xq8ZSH4cLv9arJBLLoO7029Z3hgId9i8x2j+3hWJhv3NnjulJSnv5M2Wp31PNHkqPebhl4xp+EM0/s4njohol/27r1b3Q/vZ3uZyGxy+LKN+bn/Z3+NXb1xNEmk6nI6cz95SU//uKiXK2kPLiJPvPIuFunjA6HyhSn0vPLn0OgK8epuWrCd9Dr3+l7JBEO5Lvlx359GGZfXaRqg7OGiby4s8vykRcX5qlbTWaTIbvYbHPlOpsacj6qcTVYJ8/GEk3NJZGs3GDbqFxwRvxh57xZYduYQDg3MCWZc15fidybtIjNdh//TwL4ZrzoyzARWxxn7y6hZFffxcpwWk3v/+yvlChLzpyFiz+Fx+THaDUcYwccP/s8HcUIiPR6apQ45+yOY8c4DqVtSen95cHaJhPPusJznmcmV3XYyuQx/Pz/AAfdhq542o2QsWrDMBCGfyVOSjOUDn4AdSlJiY1sMCTZ0hQHQqcM6RyMahsSKVj2EChd+wgd+wZ9s7xDz4pKl0IrkO7T3a+73wZwhU8wnNcNHhwzDPDiuIMLvDvu4hYnxx4G7M5xD9fsyXGf8q+kZN4l3e7tq5YZfDw77tDcN8ddPOLDsQef+Y574Cxx3Kd8gQU0DjiiQokcBWpwDJFhRDGGQIQEY+IV6SQU0RwGezR0GpvBQh+OVZkXNR9mIx6LKBnzlZaKz82+MUaSZGmV0k7JqJOit1hKJasy04p4TcWcmu6wJRHWMm92W4LUimsbK1JIayskYxwz2r81PlciTBBgSvv7M5BqVae6yiWPQ8Fn/McAXaJJMA1a8/9wu7FFQ2Vtf4mwE0IbW2fYyMqUWnEholAIwf/u+QXtVlqxAAAAeNpt0meTFVUUheH7DhkJEgQJgpIFhdvn7NM9gxKGCZKzKGZyUHJGySAgSq7i5wrFfYdPdFXX+tRP9V61Wl2tt8//rdbh1vueV29eWl2tYXQxjOGMYCSjGM0YxvIB4xjPBCbyIZOYzBSm8hHTmM7HzGAms5jNJ8xhLp/yGfOYzwIWsojFLOFzlrKML/iS5aygTUUiExRqGrrpYSVf8TWrWM0a1tLLOvroZ4BBvmE9G9jIJjazha1sYzs72MkudvMte/iO79nLD/zIT/zML/zKb+xjPwc4yCEOc4SjHOM4v/MHJzjJKU5zhrOc4zwXuMglLnOFq/zJX1zjOje4yS1uc4e73ONv7vOAh/zDI/7lPx7zhKc84zkveDnqwsljg1W7bVZmMrMZZjFrszG7zZ63mfSSXtJLekkv6SW9pJf00pBX6VV6lV6lV+lVepVepVfpVXpJL+klvaSX9JJe6njZu7J3Ze/K3pW9K3tXbg9915id/wid0Amd0Amd0Amd0Il3TueesJ+wn7CfsJ+wn7CfsJ+wn7CfsJ+wn7CfsJ+wn7CfsJ+wn0h6SS/pZb2sl/WyXtbLelkv62W9rBd6oRd6oRd6oRd6oRd6oVf0il7RK3pFr+gVvaJX9IperVfr1Xq1Xq1X69V6tV6tV+s1eo1eo9foNXqNXtPxijsr7qy4s+LOijsr7qy0h75rzG6zx+w115l9Zr85YA520l0Wd1ncZXGXxV0Wd1ncZama1x+EcTsAAAAB//8AAnjaY2BgYGQAgosrjpwF0ZcUq9bCaABTzgdAAAA=") format("woff"),
- url("./Genericons.ttf") format("truetype"),
- url("./Genericons.svg#Genericons") format("svg");
- font-weight: normal;
- font-style: normal;
-}
-
-@media screen and (-webkit-min-device-pixel-ratio:0) {
- @font-face {
- font-family: "Genericons";
- src: url("./Genericons.svg#Genericons") format("svg");
- }
-}
-
-
-/**
- * All Genericons
- */
-
-.genericon {
- font-size: 16px;
- vertical-align: top;
- text-align: center;
- -moz-transition: color .1s ease-in 0;
- -webkit-transition: color .1s ease-in 0;
- display: inline-block;
- font-family: "Genericons";
- font-style: normal;
- font-weight: normal;
- font-variant: normal;
- line-height: 1;
- text-decoration: inherit;
- text-transform: none;
- -moz-osx-font-smoothing: grayscale;
- -webkit-font-smoothing: antialiased;
- speak: none;
-}
-
-
-/**
- * Helper classes
- */
-
-.genericon-rotate-90 {
- -webkit-transform: rotate(90deg);
- -moz-transform: rotate(90deg);
- -ms-transform: rotate(90deg);
- -o-transform: rotate(90deg);
- transform: rotate(90deg);
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
-}
-
-.genericon-rotate-180 {
- -webkit-transform: rotate(180deg);
- -moz-transform: rotate(180deg);
- -ms-transform: rotate(180deg);
- -o-transform: rotate(180deg);
- transform: rotate(180deg);
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
-}
-
-.genericon-rotate-270 {
- -webkit-transform: rotate(270deg);
- -moz-transform: rotate(270deg);
- -ms-transform: rotate(270deg);
- -o-transform: rotate(270deg);
- transform: rotate(270deg);
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
-}
-
-.genericon-flip-horizontal {
- -webkit-transform: scale(-1, 1);
- -moz-transform: scale(-1, 1);
- -ms-transform: scale(-1, 1);
- -o-transform: scale(-1, 1);
- transform: scale(-1, 1);
-}
-
-.genericon-flip-vertical {
- -webkit-transform: scale(1, -1);
- -moz-transform: scale(1, -1);
- -ms-transform: scale(1, -1);
- -o-transform: scale(1, -1);
- transform: scale(1, -1);
-}
-
-
-/**
- * Individual icons
- */
-
-.genericon-404:before { content: "\f423"; }
-.genericon-activity:before { content: "\f508"; }
-.genericon-anchor:before { content: "\f509"; }
-.genericon-aside:before { content: "\f101"; }
-.genericon-attachment:before { content: "\f416"; }
-.genericon-audio:before { content: "\f109"; }
-.genericon-bold:before { content: "\f471"; }
-.genericon-book:before { content: "\f444"; }
-.genericon-bug:before { content: "\f50a"; }
-.genericon-cart:before { content: "\f447"; }
-.genericon-category:before { content: "\f301"; }
-.genericon-chat:before { content: "\f108"; }
-.genericon-checkmark:before { content: "\f418"; }
-.genericon-close:before { content: "\f405"; }
-.genericon-close-alt:before { content: "\f406"; }
-.genericon-cloud:before { content: "\f426"; }
-.genericon-cloud-download:before { content: "\f440"; }
-.genericon-cloud-upload:before { content: "\f441"; }
-.genericon-code:before { content: "\f462"; }
-.genericon-codepen:before { content: "\f216"; }
-.genericon-cog:before { content: "\f445"; }
-.genericon-collapse:before { content: "\f432"; }
-.genericon-comment:before { content: "\f300"; }
-.genericon-day:before { content: "\f305"; }
-.genericon-digg:before { content: "\f221"; }
-.genericon-document:before { content: "\f443"; }
-.genericon-dot:before { content: "\f428"; }
-.genericon-downarrow:before { content: "\f502"; }
-.genericon-download:before { content: "\f50b"; }
-.genericon-draggable:before { content: "\f436"; }
-.genericon-dribbble:before { content: "\f201"; }
-.genericon-dropbox:before { content: "\f225"; }
-.genericon-dropdown:before { content: "\f433"; }
-.genericon-dropdown-left:before { content: "\f434"; }
-.genericon-edit:before { content: "\f411"; }
-.genericon-ellipsis:before { content: "\f476"; }
-.genericon-expand:before { content: "\f431"; }
-.genericon-external:before { content: "\f442"; }
-.genericon-facebook:before { content: "\f203"; }
-.genericon-facebook-alt:before { content: "\f204"; }
-.genericon-fastforward:before { content: "\f458"; }
-.genericon-feed:before { content: "\f413"; }
-.genericon-flag:before { content: "\f468"; }
-.genericon-flickr:before { content: "\f211"; }
-.genericon-foursquare:before { content: "\f226"; }
-.genericon-fullscreen:before { content: "\f474"; }
-.genericon-gallery:before { content: "\f103"; }
-.genericon-github:before { content: "\f200"; }
-.genericon-googleplus:before { content: "\f206"; }
-.genericon-googleplus-alt:before { content: "\f218"; }
-.genericon-handset:before { content: "\f50c"; }
-.genericon-heart:before { content: "\f461"; }
-.genericon-help:before { content: "\f457"; }
-.genericon-hide:before { content: "\f404"; }
-.genericon-hierarchy:before { content: "\f505"; }
-.genericon-home:before { content: "\f409"; }
-.genericon-image:before { content: "\f102"; }
-.genericon-info:before { content: "\f455"; }
-.genericon-instagram:before { content: "\f215"; }
-.genericon-italic:before { content: "\f472"; }
-.genericon-key:before { content: "\f427"; }
-.genericon-leftarrow:before { content: "\f503"; }
-.genericon-link:before { content: "\f107"; }
-.genericon-linkedin:before { content: "\f207"; }
-.genericon-linkedin-alt:before { content: "\f208"; }
-.genericon-location:before { content: "\f417"; }
-.genericon-lock:before { content: "\f470"; }
-.genericon-mail:before { content: "\f410"; }
-.genericon-maximize:before { content: "\f422"; }
-.genericon-menu:before { content: "\f419"; }
-.genericon-microphone:before { content: "\f50d"; }
-.genericon-minimize:before { content: "\f421"; }
-.genericon-minus:before { content: "\f50e"; }
-.genericon-month:before { content: "\f307"; }
-.genericon-move:before { content: "\f50f"; }
-.genericon-next:before { content: "\f429"; }
-.genericon-notice:before { content: "\f456"; }
-.genericon-paintbrush:before { content: "\f506"; }
-.genericon-path:before { content: "\f219"; }
-.genericon-pause:before { content: "\f448"; }
-.genericon-phone:before { content: "\f437"; }
-.genericon-picture:before { content: "\f473"; }
-.genericon-pinned:before { content: "\f308"; }
-.genericon-pinterest:before { content: "\f209"; }
-.genericon-pinterest-alt:before { content: "\f210"; }
-.genericon-play:before { content: "\f452"; }
-.genericon-plugin:before { content: "\f439"; }
-.genericon-plus:before { content: "\f510"; }
-.genericon-pocket:before { content: "\f224"; }
-.genericon-polldaddy:before { content: "\f217"; }
-.genericon-portfolio:before { content: "\f460"; }
-.genericon-previous:before { content: "\f430"; }
-.genericon-print:before { content: "\f469"; }
-.genericon-quote:before { content: "\f106"; }
-.genericon-rating-empty:before { content: "\f511"; }
-.genericon-rating-full:before { content: "\f512"; }
-.genericon-rating-half:before { content: "\f513"; }
-.genericon-reddit:before { content: "\f222"; }
-.genericon-refresh:before { content: "\f420"; }
-.genericon-reply:before { content: "\f412"; }
-.genericon-reply-alt:before { content: "\f466"; }
-.genericon-reply-single:before { content: "\f467"; }
-.genericon-rewind:before { content: "\f459"; }
-.genericon-rightarrow:before { content: "\f501"; }
-.genericon-search:before { content: "\f400"; }
-.genericon-send-to-phone:before { content: "\f438"; }
-.genericon-send-to-tablet:before { content: "\f454"; }
-.genericon-share:before { content: "\f415"; }
-.genericon-show:before { content: "\f403"; }
-.genericon-shuffle:before { content: "\f514"; }
-.genericon-sitemap:before { content: "\f507"; }
-.genericon-skip-ahead:before { content: "\f451"; }
-.genericon-skip-back:before { content: "\f450"; }
-.genericon-skype:before { content: "\f220"; }
-.genericon-spam:before { content: "\f424"; }
-.genericon-spotify:before { content: "\f515"; }
-.genericon-standard:before { content: "\f100"; }
-.genericon-star:before { content: "\f408"; }
-.genericon-status:before { content: "\f105"; }
-.genericon-stop:before { content: "\f449"; }
-.genericon-stumbleupon:before { content: "\f223"; }
-.genericon-subscribe:before { content: "\f463"; }
-.genericon-subscribed:before { content: "\f465"; }
-.genericon-summary:before { content: "\f425"; }
-.genericon-tablet:before { content: "\f453"; }
-.genericon-tag:before { content: "\f302"; }
-.genericon-time:before { content: "\f303"; }
-.genericon-top:before { content: "\f435"; }
-.genericon-trash:before { content: "\f407"; }
-.genericon-tumblr:before { content: "\f214"; }
-.genericon-twitch:before { content: "\f516"; }
-.genericon-twitter:before { content: "\f202"; }
-.genericon-unapprove:before { content: "\f446"; }
-.genericon-unsubscribe:before { content: "\f464"; }
-.genericon-unzoom:before { content: "\f401"; }
-.genericon-uparrow:before { content: "\f500"; }
-.genericon-user:before { content: "\f304"; }
-.genericon-video:before { content: "\f104"; }
-.genericon-videocamera:before { content: "\f517"; }
-.genericon-vimeo:before { content: "\f212"; }
-.genericon-warning:before { content: "\f414"; }
-.genericon-website:before { content: "\f475"; }
-.genericon-week:before { content: "\f306"; }
-.genericon-wordpress:before { content: "\f205"; }
-.genericon-xpost:before { content: "\f504"; }
-.genericon-youtube:before { content: "\f213"; }
-.genericon-zoom:before { content: "\f402"; }
-
-
-
-
diff --git a/plugins/jetpack/_inc/genericons/genericons/rtl/genericons-rtl.css b/plugins/jetpack/_inc/genericons/genericons/rtl/genericons-rtl.css
deleted file mode 100644
index fbf8fac5..00000000
--- a/plugins/jetpack/_inc/genericons/genericons/rtl/genericons-rtl.css
+++ /dev/null
@@ -1,265 +0,0 @@
-/* This file was automatically generated on Sep 30 2015 12:24:15 */
-
-/**
-
- Genericons
-
-*/
-
-
-/* IE8 and below use EOT and allow cross-site embedding.
- IE9 uses WOFF which is base64 encoded to allow cross-site embedding.
- So unfortunately, IE9 will throw a console error, but it'll still work.
- When the font is base64 encoded, cross-site embedding works in Firefox */
-@font-face {
- font-family: "Genericons";
- src: url(".././Genericons.eot");
- src: url(".././Genericons.eot?") format("embedded-opentype");
- font-weight: normal;
- font-style: normal;
-}
-
-@font-face {
- font-family: "Genericons";
- src: url("data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAADakAA0AAAAAVqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAA2iAAAABoAAAAcdeu6KE9TLzIAAAGgAAAARQAAAGBkLHXFY21hcAAAAogAAACWAAABsqlys6FjdnQgAAADIAAAAAQAAAAEAEQFEWdhc3AAADaAAAAACAAAAAj//wADZ2x5ZgAABFQAAC7AAABIkKrsSc5oZWFkAAABMAAAAC8AAAA2C2BCV2hoZWEAAAFgAAAAHQAAACQQuAgGaG10eAAAAegAAACfAAABOFjwU3Jsb2NhAAADJAAAATAAAAEwy4vdrm1heHAAAAGAAAAAIAAAACAA6QEZbmFtZQAAMxQAAAE5AAACN1KGf59wb3N0AAA0UAAAAjAAAAXo9iKXv3jaY2BkYGAAYqUtWvLx/DZfGbg5GEDgkmLVWhj9/ycDAwcbWJyDgQlEAQABJgkgAHjaY2BkYOBgAIIdHAz/fwLZbAyMDKiAFQBE7gLWAAAAAAEAAACXAOgAEAAAAAAAAgAAAAEAAQAAAEAALgAAAAB42mNgYf/MOIGBlYGB1Zh1JgMDoxyEZr7OkMYkxMDAxMDKzAADjAIMCBCQ5prC0MCg8FWcA8TdwQFVg6REgYERAPvTCMQAAAB42i1PsRXCUAg8SAprl7FN4QZqb2WZGRjAIVLrHj4be4ews7OJHAd54cMBd+Af7JHmt3RPYAOHAYFweFhmYE4jlj+uVb8nshCzd/qVeNUCLysG8lgwrojfSW/pcTK6o7rWX82En6HJwIEv+wbi28IwpndxRu/JaJGStHRDq5EB+OKCNumZLlSVl2TnOFVtl9nR5t7woR0QzVT+D7cKLeIAeNpjYGBgZoBgGQZGBhBYA+QxgvksDBOAtAIQsoDoj5yfOD9JflL7zPGF84vkF80vll88v0R+yfxS9lX8/3+wCoZPDJ8EPil8ZvjC8EXgi8IXgy8OXwK+JHwp+Mrw////x/wsfHx8HHxMvJo8Rjw6PGo8CjxSPCI8fDwc3PVQ2/ECRjYGuDJGJiDBhK4A4pXhDABtHClYAAAARAURAAAALAAsACwALABaAIQAzADyAQABHAFGAZQBzgIIArIDTAOkA+AEEgTCBRYFYgW+BjAGwgbkByQHSAeCB+AI2Ao4CowLGgvQDBwM6g08DX4Nug4kDkYOYg6ADsoO7A8yD4gP8hAwEGYQpBDuEUgRshHUEfYSQBJeEnoSlhLEEtwTIBNYE6oT6hQaFC4UShSQFJ4UtBTyFSAVjBW4FegV+hYUFiwWQBZWFmQWchaIFuYXFhdUF4gXyhgEGCwYThh8GNYZEhlCGVgZZhl8GZIZoBnQGhIaShp8GtIa6Br+GzAbVBt+G8Ib/Bw6HGgciBy8HOwdHh1WHXAdmB3eHvYfIB8uHzofSB9WH6of4CA4IMghACFCIcQh4CIGIjoiSCJ8IpYiyCLmIxAjWiPwJCQkSHja1Xx5YFTVvf/53nUm++zJJJnMkpkJJJkss5GFMIQ9w04IS0BZRSJLMIIo1l4XFETQFkVFBKwVrbuWpRaXPOtalZaCPKu1D2yf28NX21qfQubk9z3nzoSAS//+Mbn3nnvuuWc/n+/n+z3fCxHIaEKEJfJMIhKVhJ4GUtP8jCqRz+ufVuQ/NT8jChgkT4ssWmbRz6gK9DU/Ayw+bPKY/B6TZ7TgpuVwN71Unnnm0dHS24QQRSACUYis8XyzST6xEAch4LF5ZJsnKkc9NsDDj2ETXgUikT4iaClNJEBSGoZIP74qa+l//YRfKB5EAEyj4g/ztWBZbslcIEjucqHATOpjkYBXsYo18DNYeOQI3UMvonuOHIHXj+/YcXyHSs7FLGQp+o7sYA8IFq+BpmqKhtk6SDEZinWVWfMsHlLfIkRCgjdPsLpAtMlRUu8CmzVP8HlDEInJmkC+wcbihT54cN/6cePW79Mv/f1E+MUT2zvCM68cOWt7Rwc2pk8TNQ3IWW0gEbuI3yxI7KW9HdtnjbxyZrhj+xPbWX0EYhjcf9h3Jg9gldjBfhLm1af1ERF7BTAEmoxngQDeU35mB/YPsDiFtU0gxChgX2tn8S6FP3zG38O+zMWEVkU1yaYQRCMxt13WblvTT9bcdgpaTsnahlcqUp9owt0Vr2zYc+oUHwN8S2FjwMYV62PNA5+pPhaFc0EP4JhuPr2la4eQCVCsNRvnLac3A9nRNShIBFZPXpciEmHjareZsEbRWNTEBhVvHDasmyniwP7HJ+4AhlsgbmOP7PUsWVA8DFmHuzoSa3avSXR09XZ0HaZfHa7raOARKjm8kWoLdwfuamwHbcqaNVOo1t54V2D3QtA2nsQL1TYePrwRtMTaWUWYhvI0gGlYz5FeldWtgPiwvfW8bpVgAk/cwxqtR/hwhHxeVq9YWNG6duzo0miCHtBgy55TlN/jbYIHFGwyi6IJ6NVO7RG0c7c7ugBDRITMuMlYqovNAFYeuNg4BWPRSBCDBRhsEaKRQJCl5mOvSfmxpqbY3GQSCmYvXjy7s6bVP2WcjI/P4iEUxG7ddWt0brKrC5/P+Yz2fTans2bNjWMvPTwOi8B2Vhtw5pEr+cpyCWabVVAkVQngpGDFtChYcIsQCIYgT1ADQUUNifmQB7g4HIrN6pIdiponhCAYkoJDMd7ucEkOlxK32q02qxIMlAewtuYWQVwLdsg6+fyNbcufpfRunw+CruicxZMm1JYsV4zGfIuUV9+8OH7VzTdfFV80IpSVVZBvMErLS2rHT140JxrJtYfGjRjrFIyl3liplFNkNDlFY6nTmwuKwx0fu6gZfL67aOrZ5W03Pn/SQNiZfrXlIfr62RfrVXeh9JvpoxY4FUt5/eRFm2bsvTy/YvzFdSDK5jq/F8DrrzMpglAxtSFekt2zZ/rmRZPr/WYl1JmVJxdEq6VcX3GhoGY7zaAUuoZ5pNwhrqF5WabyKXVZhW4l/MJZaHhoC28cdiIDKkJ4nxqIiZQittSTBJlKiL8+LogKUe3+mDleLrvAjLhidsRIPBDMAda9LsERkxwCsETlccHiVXx2S4sUD1SBWyIIewRxjzDgk8iBw54n/0w3db0rjt/1ViE9TY/nNXaeue+KFT+Cxz4uSNCP6Bp5+biD/9dsLw0qj8DEq51nG1+if695Cb68Zevjbs19yW+VvZO2LB9yLT1Er4JdsAEsP/85/ZxupEvw+PznPweLNhWq4MY2evS13r0roL03FCq+m/5W2Jx4iP5u/dsQm1SrddTDuw0Xd7lKw+05HqUYSuGfM+nhE/bxIXBCrGAf3Sc0ultay6/9qXZB5lggL5R1FyAeVyEef0Aa8EZR7Qi4kuRz++3helzyOL0wgJfhOL8YXsXtkgNnaIsQrrc7YvE8UGOqllwpVM/Vnvo9pdvoEdpfVTXzgZ+MuPJ5n99dV/vjhyfPTs6uvwVu+TCrcfGm5OQt4R+tsLY3rFJquycX25Yff/vwfT0jH5QDY+vEbavV3KI3b5QrxfqfXbS445E3s4dUtm1a3Dg8XpRILPfm6vUlKD9UjQQH0MGHKG3xDEcZEXbEAz4UIKUIiyg0zwMI+hHk5dCPKlv3yZOWX/TT2VWUpqrYAxUR4SxB6HwNpN6c5jj8Iyt28drRp2lfqmFHl4xPOLZjufLHWK6b4YPIBAMrI9IiYU+Ugejl5YrSbpiQT1+lvX/+s6N6/EXXtsW7nE51/pKKiNMofU2P9h0SJ0ANCJEFs8bHShVRpB+Z/NVeUTASRJ9M2yyIzB6yhKzi2GA3s0HxeXFFF5hjgDMXFKjHuZsNdgtYYvEWMRphQGBA6AjXOwLlPq+kqPXh+tgIiNkVVVHBIiKOxBz2c3F+HGpVjJmjEbENVsDEL7aN7Nn38idXH6T7v9i27Qv6pzNv0x+PFQO3XC8JX/+j+y/gmypIBXkW1VFoBYdslvMkVZjcCMZV9NN7b6H9R8YXF/lX+Lw2S561qhb8T13bbs23WjdOCVzm82GkrVLwycO/OvSeqmHu+w9e/cnL+3pGbvsCJvLSU3mn6YYlUul9fTUhWREeSo30SHv7dkOOklNXNzZcGJoT9Qp+gzu7JL/Qlt3QAUu6Ox9YJQsilHlFWei7SzDBbFXwuiErE6lWVN68M9XQBT3vH2FzXSC3wj9Rlm4ldWQ4G0W73q8hITOh1ZARh5FBLM5+Me7xh20+my/qi4ajYeE9IZAbGLPkmh3T1723++JF9797+do3WncKVqO9oMjucpWblz66ZMmjS0d2j48VSXS/uE9nVJIWDE/fcc2SMYGLd7+3bu37uy+ePPEeyFVzDdmqURIXP/rbRxeXx8Y0Fb3Nk2M9RZ13Kc8jJzFjXTkjCTJxx4YX4R/FPkZF2FQHFYWyxxz02FoUfCbYhPn0ILQ9KExbumxGvL0KqjrkAnpoWkfluKG52fSQJMGEbJvbUxNuLZ++eVkDEPG/bl40oW1h9aS62kmhszsF8/Ir/WF3cSz1n+L187eaSnzFxZbs+GWPr2ZcKT0/Gct0k+ZBKzC91Bg/saCYDoEPiYTVjhG8moIa9dgLbCrWOs672mbSVyVbeCiGHfSbG0ZPg6mto6ZPGyk1PbSpftowbwH9GgAMhixvg3fMyMwy1ZfkGSIW9X0sbpzS2DxpclPjlL4N8NqTB4sqg4XdHtpz4CAcrrQ5h5Re3E5nY2c+isJhGsqFqazGLkkf9kBQwJURDMQtbALEWKWsrD/ZGsFVEULemYdJkQSpeewvyOeJLNWt++MT2xZEqmdctePgksVPeicUeOffqZb+TMqzb71kxuxAc57j6iVrn1005obXfzT/0ZtXTQjOMKuqaBVUn33munj5xBV3/fIvBhJftGnvgfkbPnxx18rm+Qn6wbAN22MPXy08ZfQsj9x6+LLp4e3/0bD49l9B3cFLn76uLTSt+6a7p965yOYszJmSVWgy+u54rnvS7nu3rp9Vr+N4RvYtzvCJAiFPwGYGY3ELn8/AGiXqjbI77AgbEI8Fgmk0x6nD2CRS7TinOWxuYboywE5yBMiFXCIt5+/YliwZX7J12lW/u31a0+W73u5Zd3T3tVOGdC0zl8iCSZDlvNHjtN41Sx/oGjZ1x0XRdn9Odp1r3KjY3GiBwbjG4pAP0NO7BjMH+hn9iuU/dP1icEaTlx0G8c7Ox+9YnYhfdM3td7bdcmyoIc9iSGRZbaYpVy185uZpzctvm7n96zujndGaXVcObZ01+upk5TSLhfpnLNo8BRyw7sgAQRDIXmGBukDei4srn/PeAuS2BeXpq2yF2V9+SR/+MnVFOiDvZecv03d41eUlUW9Xc4gXbyQR+bkP0TuIkwWpYhx/FrPDjCITQxhlVjaAtSAHlaGfpu5bsco7bZ71qvaN1z0152hdxNo8YdiabkPBpsSYG1VioA/SFB1Oh0AZ3HYtlLWvuKLnboOV/p7+agr9+1NPzbu7FB5nbcjoT/mIDd9af0ZBIag27OnjZ+CanoKsl/J7Ac99nL0SgHeJplTgWvbqWgUqEw47kw9xEwoHnDaMeEZNvihvVFwaBb+gs0wF1c0TN93cM3/+ig0XXzSqNfJqVzIZqjapGm2iH9PIrqoqZ/ls+lHMbi8ra2i8boOwNuVLJObO2cKm52D8cJBqjsEX1J+4lQK7O1aANeKr0c05B9bNHkb2b8J5WQlepRSs9iaojw2GELGMvnSKqVBIzf/XvPk0/ez0ZjP932RUJtFkMqqlT+ejCCWn9Lf6TolkbCMqSKg7NY1JsVekA5l3knxp9QOooPSTbeSnZAe5h9xH7icPkoeZNodNsNUq7M+q1KHOoNQpqpWdFBsDFOxOJR9A8QahtgYCwdpANKB3byAYCfIVGIhiZAS7IFobi8bqIqzPo/VxftV/I6A2DrF6B9Ta62rtYbtj4GdjRy37szqsdXYwyXEjOPyyLQ4mv+qPB1UjBGV/VFVx1Pk/Af+E9BkvqVZThSnVCiLgdBZZrADn/RNgIDGKVuEFTC68AAIM5JHOCDArcH2cujJ19mNwpV59EO6kH34sjPv000+hUpA/ph8KjQ9K/5AlWi2oAkjsHVaowIpM54D5A63OzoFjLPt0TUX+HC+AL+GLEhyTZAFkEPCWHew1ngE7H8vOptXpFop6jqwMlgzfgCn07Rd3wmz68M4X9/5pVeoFiLx47+Rdu3ZhaPbOF+//06rz56oF5dwL5GM2V5GJFaCO5uaqVQsSYVTXBJQPDrsUV9I8AjEVgXUEMEzFFKiHWTgDUxiRRmStjdQhVQuUsyj+aoyBcAgUPUI4B8whIRjggocnY1Qcc2MP2T0TSiIqi0GO1w6XiLfsjfStAPXlOINQiAVZlojhEpYZDJjjMYyPK5KCcG+2SxI5yJgfI2T0Dkb8OAc8tpueWLlyidW075r14N4wIbn6rTtmlSdC2KNGEUb+/OVlD4Brodt/KX3/dnHo0I4tV6xrn7vgyWuT2V3tl9AvV14xvCXLsHPlqv9qanEkQxs3RTsstnBBVbS0am4gEDEYzEUFlfXFzki1udghK5VlFTWh8bmohxlt9jGBwFirTTYbi70V9spOj9cvCh0bW8Mza3Js5qmXrBtWPjJsKjaaHRsebp91+0y64TRsuqRp1o43eibdsNAZG9/TTQ899BD9dFxb7qzZUP2MyXwv/fSNdde9DyGdd+rNZLQzzUDvMqxdfRn945139E8Yn9dgm739re6xm9bWY1uzBEiuaLp1Q7j62jtTWaNuGtYz1FfiTV775ALhshdbJlmbWpZfds3637g80+d3fpgMV1uDwxcsnFlcWaZm5zkc44YMbfc4PBZByHGai9v8/haTXYFhlQKUTSh1eQSo9Pnag1aP0yIZi8rcc2pHXhYy5Yy5aHU00l5tsOfVDC+Pb2ieclU0P2flA303f/3WTTeuPXrvZVb3yq3T7qJPrN/QXer8rz27YOU99/7BJQk5t7xL/7x7H/3D+9f//8R1mT73Y3W4ej25BG9cuAjy5BAqSKY8A858HnIJsTiKJ5eI+ngspPiC3kAeJgOXWAZqSMLF0iK6RIe8Wy2aMGb26CZnXlnlitVXdl86K2E2I+waTFa3P1IaWdU+xmzxjB41rACGKdbEiNmTpo+oyxLKW6Z3zpsx0mKRCsKR5NgZ48aXFBeJJmeR0XhKdTQOKc0eP2rMww899bO7N8xzqkPEnKH1M+ffsO3QojmbZ8Qtcm6uqtD/EVS7w+3yuUqzzUKRKycXCr2VeeXV4jOpjwQ5W5It1aMuGzPx+s62Km++ASFJyS+sCCerqxdMm9hYlZP9htG9fNWD9786b/LlTW4hr6QoKz2GiEFXIAYNIddh79hVbgwNMqiRUCwy5iaivseUAtlmBWapCgz+YRqmD9rTgn3gORITJpusg2SINS3zB57bMnQgpo4Mw6QbDiy5auWUiZe//yukq6ZRdZ3r75y69cq2sYteeHB7z4wqekmT1ze8qX368g6Xu9xtKYjEOxdVDvWUOIpqIj5vkXPYsBkzu7ctXzGsIR7tnL1xXsswr6el9dLJ1aFCp8NWUlYV8/pikVlXHrxnVbfYuuzyJQdumNSYN3zFrmff62mfefnGqXeu76xL5lTN6Nn+4AuL5tPftl86e3hzRbDY6bAYjeZ8zCPkLXe7W0I2e3l5dai+FqmIMzhkQtuCS0a3BgMlVrPJ46ofMbTKbvN4orWFRagDJSdNrBkRCnH+jKyIKMzuGGESHXFX1wbwrFQiS+EcJSRUgomjOO94Zp1Gwe6ptyuaPVhkZ0cymmCsgSZGXjFu7lCtt27VwgSoiACeOWMLDAbYG01KpLiu3OAJ6mdM3ZWsqK0QtIvu/3qzbKr2lLTvnD5zrz+Q1Cn927BVDas93KIVJLVkBBmPesxmrGUMq6UPWwSJAY4VYC3TWqK9nKkzCrvzxzidV+0oE1iQWwesdgmsjhgzlyjEqzCzbsRi1e0/gBKO866MXoTpLCimHHILYgXrCtQSgn7R7mD3LpBezx/qyu949nBHvmto/rDbfkL/1hoKjRwZCrXC6HmtrfNaBU9lw5DqshmpLY+C75FH6AePPkY/eOQR8KU+rKiZWVo1pFGuxoEYUb1vWCjvilfoF/QE/eKVtQWllUXrZtTNKDn03/Nks9kGDYXT69qWL2+rmVIn0jOT/vxkycz62LyYaMh3VeZ3dORXuvKHgRJqxeJbW/VzKDS8rHZIQ3B4alnXgctWHOzqOnjiYJdwb03JxOHlDUJ7qCVUnUg9Fe8srq9b+uzGKVM2/mop6n/hkb4Z66oDC43whj07Rx4/pG75HcurJ4Wa6bU5CypCsXlsfSK/Znq6RnwkjuPBjDBM7RX5loUwHDw23VzOu81hU2VPRscKRh1x/aE0ze63e2sA5t03f4w2LwZqzega+bUtW16X7kMaoc7bPX/+7nmw/D6Mlo7Os/ttIS8tm3vPnGjnj0YfPeKpqfHAx5uef3HTZdU/Ptq5a+6cnZ1/qA0dZ/FEryPbP8B5nU/KM3ybb+Lo+jrbxkF+yPZyHBB3IamOOxRkxpn9GyTW7wWSXX76Hn3P35UMwHLZ1DC6wSSr3Kx+VN/iOcrs6Kl9LAF9H/z8hR1Sqc9XKhHdrvUCcqnWgT0WByFG0WTMiduMEHUIt8Ga1Od0O6wULBTDggVWpv4u5NPtqc9hDb0dLt+d+iL1xW61lb5FD0F56lnw0V/RtyAC4+kH9CFxL/0TTIDI2W/o28t66EvQ0rOMt10ghCpzsO0uMoa3XRUFNU9iKoQKeaBrOEwcMr6F65vtb8TNyLCYcqGzMKaZcMuiBxVo+dXZjdbIHFlWrEU1rjMGWaVX5g11Z1vL8suaK4RTXtlpSa2ylcr/dFpLyz6wFouCS5RcFvr3Yp+vGEZk2wtUsmgRpbTFarVV2MyCgTYU5IqyWlkh2xxVVSV09S/tZW5zn0GRcZ4U5jnzDLtyrT5vcbDYk2PhOMX2R9h+0GDtb9BmCPnezY/0bgfHOgFnLd9TYnsdqPw5PDaPGBZ6xd5+wjRETJ7i8jylIRPW+klmLmHJCmPHOdwqZYTMRqCESyFFKBHf7GKApmAwRdg+U5Ldk8weC5+HZcSftmtm2DQza+q7f4hNeCdZTKhsmcQ6cIH8XHf3c/Qs/ZCefX716ufhjrXv3NvZee87a3fRr3buhKw/wdBO+rRKVj+vJ2LJkefji8+fXd2588RnJ3Z27qRf0dcxuUToXPqfnTAV3tPnB9aJ8L1IE957GY7arSLrVQ/rTKmL72ZqTGs+tUfS+B4m/ezUnn7siD2nCBncrmxSTKp0W53JEw3b8LAw45c+rbj+mh4vNlQ+VlhYRqFzBg9NwM5ORvu4xiniOdXrRKYcSODZqWhn2RLStLOYjCVIsbNwIOCkhD2HXkx5fl1cZChpxLrUoqasioxHxS16iZ4mqK0PowJRAnU/VFUJy1JC4RJ1xRO8DMK0KYebmya/s8bSb0AwqFij4pxQETyNVRLcDtTnDn9X5QnJGajr4H3rYpwblaQJZdwohqdhm5g+MmFPOowc1Wb6oZ7OvHtuO5vVmF+/pwGU6GnYM37Q9DVzFsh3NQWi+qY5Xx8zYaZ6tXo1tseNCAcOQB2tRYA4qAFvPt+jUyFurx+BsAt/Fsrmpk6VNzUGvTnWYcLX+4WyA/6uwIFCs7lwf+rkgQCG/cIwnspfU5pnDIWnS88dSJ3c7/cfKGptLTwglGHwoL9rYG1ynC8gJdh3KqCUZjv15W7JjOyOIM9HBEMJhdhHNGq6+9n0+oFhkLVzdd/q9Ue+PLKenQAb/LfVmSe4dHY9eze8mX64fv2AfTpdFm/pBcWRdFGoXtgtUY9NNsHfvlVmauxAngZBE1dT07fKpd+cq5VhsG2cr7cSUsFtVza2FeOJMjj6gXqIOIw4UGzpCv+mOkomIb6S+jf14vKNQKWBKO+QXKxTKaJbNdv/Z9AWNEIMqyIagXe8EZi2FUNVI8aNjgLnXYifMpyl8hL6JfKeL5dSBc4shRwYCjl+WEu3Tnrl3Zcn0lvh8kmvrFjxypQUYWauU/SlhRxbZXyTypf09CyDM3BmWU9PXyVcAT2TZ0yfTG+lW/EKL+3RXzglRDk6n1dn5ofh46uOgDcIjDWyuiOtjDNLeByCFgcE46whqEtk8N7PmSM2KK7zTYkUeWC/ckoAWMBbcucvdm2/qH3FK0lY+8fQdWfJdRpt5M268//eSG3h1YC3u257eAVvWsuaEaf2rEDIgf2eoj2nhJN0L2vTlO3e6ZPhinfhQ54DvMoauDf1Fm/4V13LeRNfWrNgJQdjEBho6b4S2P/M7IX1MwIKo15IaLSX9mqQ4CdIyBfcayxNen+R29HPz8NA+nrFhNbX29eriQl+EhPqBfcaS8PmqJaWKxbEsyjzcLFVGqJ+ziLsKutBhlWIVHJ4wPgZPveTiQ44mo49ySgg0DCB4OxPA76mg4+eQuGJEYoOIOjiX2+KqyACXjMH5w1QirxhBzGy9WrBP5CLQSW0/BD1U/8hWi5M3L9f+jE9mPoUJtL9ggPaQHCkPmXYovMFDbs2i692BN4gMxqj1Ne0PqKJuGAUBpiUGahTvdBLE+f4MeMLRu6TZAT8M3kYi0jhT8TfGQxzF5pedmJVJRLvv16lF98zkDzGdIwCW90OHIoaQfXjfMQ+6u3TaELUUo8vEGak9moLEgs0mIThBQqW3qdBL7acPetbwJ/lskdp/oS5syE2Ztx8VOQ5jPYgDCVS/E1WFegdjDc5uLY5g+a+Gp6IUO4z1aMYcwLeZEGgCnxmphyhmAWi7zm09ZMjdPfvj8I2mAYlr67qJ/Me/Jx+TA880b23G//kjLvE72HREZGsepX+lT5JLz/6BCSh6PMH5/VpPB2X7f3fADEo6ovYG07uo+JCecJ1UlyiLcgsBpZmMXgs6luVeZErZnxzunVZs8PhE76u7L68u5L+H193f4zQj8LC3LHa/LgvMbNrmPTO2AkTxp45ylcVRNmeAQ5MZp/BhtgQ1nkNQwXUXeJc3+RIhqCG6Oth0GB3sMYH1ZAgcBqleJnHFv1tkv7mpVkPbm0E1AoC0S2TmIMOHqi+JmH4S9d/MofFg2/G4i95YyWcSo8dD7U3AWoT/tjwU0IZ28h47PiSOSwCyutLaS3vPd3fivsxVWa8mPLAyzg9Liu7m7sz+bwDTkt8rXGazJ2XOIJrLLRmytRuXDcauzLXpZR2NcP2qxk2MD8lQZuypntqmmy9TJvZnUA2snUBP1HY3Mgjhbp/HIKnyrA+GjGjClHAii+wi+VccsyZSpfT5VPn7IR9Nz733I2Ys0qYNFl7DB/AXVOPrd0FWSnnc2B4jjlTMTxbwPBMPsmWEJIJH8QdMucl9KR2Uj65IEVgr9aLY4Vz1EAGuBQpwsFi48WuBvI10Q82k3GZ4pHionAQZ7CQIZhHEFd1HrMLO0w4iKwJzALi8JjKcIJxDwMTTn34y18E7ZOa0f4/PnTz6UcXrZc3DVs69i8pzfLO+KlLnljF4pRSvP8k1L1xzNP0b1X0jH3zqyDeugvsdPKlrz48Dt+3vDP215euPbKtFBR8SFNMJxGxrZLGW8OWpcb87tL1ZPjDOoG1j89EfzrFWVRP+vC9PsKd3RjSzBASBtZnKtczy9gq5/wgfQGHlN7vM6fXizCM/gu2a9QCa6UH04HuvlE4Mdgw/H33mjW718j30zLEJyLsSZ3Sry0L2VOcPvTwGpbkPG6icj7L8IW7kg1emTL3HUNVCa+QPLceEYnTsSJ3IBu8GAnLisuUdN4ZphzXmTJJ4475gqs/7f2pM2Vd/Mhc8Hi4EEK1Ecmzz8TSCPu48Bj8B2nnRuZHmRFDNKGrA/ycwMqx5zgI/A3QX6T6ZZ9OjCVOm5lE0nM9yzVK5oTKCB0j4kRlumgJ12d1cRiJNUHajsVtTNw+OWizT1UPb2xdVxV67vI9pwolwvWyHWWejYfD1Us3nNrT0srXpqaCKqf9Ye1Wxr+DbGEEA5ERbCdNRFquHEwmP207mqQN9CS8Bm1tnyaPt83e20/2yruSx/ARjKcN4GaPjuNdW2rHXiAMkIHJLpnRKPVc/4t6RWS9Qtym+Af5f+UnuKwRsPCoByQCn1PLLJjFXFTpL+THqYVaOmCWBrO4HRIX2B8UTX8H1zySWyS1EplFf8G8UGHWLGqRH++gv8B3O+BzrssnFFYPxuiYgASEiFRvCllNr8xksYDUJsHTMSxJsHRYFyMm41YCIYE/jQlsDKZ6B3wJRKwe88bEGSxyd9o+Pg8BVyhWTX+Gc5st0syzNE+QNe6STIwiq7zGSBmbAWeJoDsecx5fwG5kTfm2/ucjQZzZNShz4lwTJBl9jx3xsM03+D48SB/8vnthgEylMqE+7cLAgAN0xgP6e0K8awRuB+G2DFbnb+1iZ5CF4ZisG2T4WbeNMEMJs5718TiJObNo6dUu4qM0jvD8GX4FLsg/zASuzRcdVI4YZYownCtKYxlpmQI5K2NWwEyZqOExxfhcwQeYituv2xAydnCGM8U6FjN5Lqev4LEKCiOAIRBEfIc3iF/6cJBv+vQn/eQnn96kcODglnD9mnrzbvqvX5bSf0Ju6S8hm9FEoq97Ja3FMXxOAwBDq8Eg4IIBFJCwesz1FnDe8NZi43SHX0U5vLGqfVypDgoCVk3HLmBmGyZH8OJ2bzzsqHSlMeIc9pQPYI9ej+8rPe1JSDJ10If1/JI5HOnQ+R1lCtxfn/EqI7fgmdjWlkfl8hqBGDECFy3zLmf6JzNHpN6bKwToXIGNEMV1xy1yKMD38Qfn2bDymZgo5c4cePJFue86MKjFNP2MZbNhuUpNsdXI8gaUm/q6TY+5iY84kxBNyGrTs5nVLRCJc41F4apFIjN1+4hYX1/fd4TZo9hU0vT5fBZLi/80zjRNAdFyj7pAXUCq+M6K6ldUixpkRDFoCQTlINMf48G4HIuLcQeictwh2h1+h2rHseaT216vLmikv6tptm95Y4Sz5Y0ttqZa+rvGTwyGTxqhrrbJtuWNkdaRb9xqb6qFOhZNN3H4FU7fam+uOZdSzyA3O4E5NNfoST/RM771dcy4jGM3ucDGYEV9/rwvH4Ab+VWI+fnOaRyUC7+BkOo3n96yaYNweHwf4aHUmPHf+iAidWTL6c3jU2M2bGJX4fCGb/GH4nNypTyjVyCgstXPlrusc4eUfmEsCGGYsEkj4ezRY/XF/SaTwWx1n5srOo8y6SyRxWZEvUx0qGbceoBz8ZTsyxH965GBbxIyOK+7D4n48AwrnmTwftD+QyYtkiELm576dyB6iSkuIAa+nyCDvp/A0tLfT4jAHbwN34u5ZBDm6kbwNNalQRc7x4AAeEZfsXj+OgO6vKoixyOWv4LaFcNcjqnG84rxpH+DihPS4CoMFAm82rj0M0XzL1Gw/0UtUzy+hO1mrR+oxoXzznLhvJMym3TI1zy2MDK3C+edsExH+720V9v7rQlXz4vpSzJooWk5dl55ju/+wodx1m995ZMazFsvKOjskfP0yPPKCH93GfrONa4qB9+uZkDLfqUQjnIPqO8pH170t7ffsf/n825aUlHkLCyKjC52vmUyj5n+fXUSGhqndSdGXrR/XEFBia+k2Du0umpkg7fUaquOpH3hdZ1Xn9Xsp+K8YYYKjrknqRuHzQ0nL0jLEhpZ2hSOvESYwZ6lZcyHupk9I2MHYUzHTOz4RhgVg7AFj6DPb0HNLlzMggqjGimWeQe00/85UamlPuvgtkitYwTeybwu3I7JE6bDvO7/xPrkKtvYTgbTQFsEexnEW8CF0horv35CU/DGZ1+YcP/9E1741caK5gk4ZZeO+c1r97YMHXP33WOGttz7+ktj2Jwgl8BJdafixhWsfw3F7F8iqBbRwQzaQeGyE/Qo1Jw4Kh09cfToCag52/U1kK/lhm3IoRu2QQO8to2+Rl/bBq/RshaJtDCdjOunaTtQEdv9MQpRFLSoxX3LgTjKtTREubBJNxIpiCqsnX0oqges7lEm33UTrcxhhFnz8IRU9lwKbtMfMPp+ux6lP1wP2w+Xn/p3JWvkO8os+4EyLSj+g+oPldoHL8+lOw50/lDJOH1e7mSJGIqm56iMcgzLNRkF5rRgCqIIY/Y0k8CtngyARYJyaEfbc0v6OR7LCWYdpb18CrMPyujxHW0Tqabfp/0ldFzP4z7Vg3OVL8iLfMf752wPIuuTjCzycgdl0Weq5w4WHD0kPsnHrk4mV48dt6Il3ODzNYRbVozjMcB7SsaVxzRSdogDoUEYx/lRNrPSQBrEeYnMv9kT5Fv1wC0jDLgljS2shmHdKdLtDxcxNS/FxaPE51EfSW6Nr1lTPvfiem0wd+K2hguHlDkEurFzZE+Uf1qncEW4j583nwb76c1slxR5h3TeGGq6J6rG6SbTNwQiz8I2FBAn99f1cJRUVBt3QfF5mCmOQWglFOlBH8qkZV+uXr1w6sqFf/0NnQbk+iVz6uouXbt96YK3FG3smHuW3ZinFt20+r6nhV8NH9daWkpb6PFJU28jaTs6kTP7wz4xrHriYYsv7pFna19oFTRRwS6oXnKFikvOtM1b49wim2EQ6+eMYwmYgswRk7MLOJCWxzhxe/s5Vko6Xel7U0j0phaAm00QI/ezZv3KeIOR5HB/ZxuOIMp+i8ljYR8asNk2BEC3DKt+I6BKr+nKDWjf8DHTzS2gm5i1bzROhPFeThNjiqVnDC9shEHjLErjagYztmnny0kz+Y/zZZgjqKgjuLtlMF4j5EONMEJ1jIAyCNRAvhQcAY54cIQQCKoO/MsXWSK8RVkXR3jmCeP5QhnGYaAM8iGuloEazzcEK/HGEccMJYdaIyvMXdNRI48QkDiPEPBtScWkIuboyMdZd6GIzBPFLNnkEsjLkGhT8n1FhcMiFUEAWXbkWnL9geJRzsJch5xX6nCGC8XcGkOhrSJ/Yo9k9Ug2Q/OkZqUgJ2R3j3FdtuidJwO1bl+NSynJrk2Wx3ODxV6Lx2MszbYmY0PlvOxQgbMsz+fMcjsNhaFgnVLamD8kWIUKowEMcpYMTtc1726SsrJHubPUPIMh35rbHBTyLaPrvEaDx1BTWyY4Suoryk2CRxr6LcH9L0mxIMPum/zHp7LCRQaLTSyNueOq2ZdndfogS/VnNcdkVbD7so0VTtHuNNqz1ycFk5wlGLN8pc0em9VkMIH/ZsgxGBTVLDrkItvQfHOJN+AwmbPiVos9x1SgWixyvsliLXQ2O2srKt2uSqfRPKW2oNWUZcpxlIcWz/gJ7X+mPOeWEa3DSgqiLXK2Uc01Fxepdq9FrjMWZEuWxpGjyzplh8mpcBm6V3SrC6SMDfJbPH6Az/t+fcMNv75BFAdfpJM38Ougv7SfJLO79DJUxzlvIF9rYq84YK/BGwNbKyRqArEXUb8vwd6REnwvC+ORa/BYA+lLcDtOIr3PJXD+wqL1PAfbACpILRmmf6+sey4hJ/Po3y2nv5YxIWOLDYd0VHl6wUtpYodI08i/Ru4njWOZLtwYuPqmrh083KfvRQrJtMPI2LXeB5jc6NIkn3fdGIZ8oY5WB7WP29H1gHftWIyw87QHMoRZGdAtzv/2PS1LMps7me+4gejSpI8wBV5EAU55jMhAgmlOeFCSCQHnYXqY41ucY4BGcvX9EKOIOjEEWyS+Y+rzBiEaDCj5oDBfLodubiyDcyYaAp9igf/0+8EP3MtP/G0M2xGjBxPOTv9Ef5c/X9Dy/RjKdya0p6KBQNSvatSBtDPX3xWAclG2jZu+8QyNTkx2xaBNSzjzMbH+VheGOp2J1L/wJX+UkMHfEo4mE0k7mUeW8D2jtE9gC8SZU6DHNBDDfGzZ8A6KiHLlf2C0mdUHrxlQH/D8ueCqDgx1Mpoe9rGN/Sjx0kG2m5MOMiealD4N+tJq2vmX+fq484nwAJKqD9L3Y9Z5wZeMPpCeJ3j7wJ5TkJk2OJPoB6f2pMXKmeQgZTiZmTsC9skpNaH08v00ou/Lh42CiGzXwbZHM2tWfsS3plXMFmh3v84k6fH/Hsc9A/Cnb0TJPdEWoe+kwGcPqoOzerYxkxi7F36W3sETYBWuqZ/imvLwvRYH9w6Iu8BhYh7XgzrZFrb5TC2Q6WaZ3rGMPkCX0AeW3TH2lR5NS/edpvW8Qn+kd9OROY/+9s1H5rRdYoF/aQ+c64UHNJptWSqm0o0W0nOCkMk4H3SLVyX75tdcCqytwyESZFt85UFlIMIcDwR9ujUsEg+YeC3xoUtwtwjML47dFah2m98bCOreoI48QeWbBG/neucuCkQC18+lX+28h/5rzg14s3iOJ+9t9rS39D68XfrY5yB9/thSDO4qSWk7U8Pn/mNT5+M/aarY8mu+qTCybRnt38rzS5x49MpbNl/52HH9bivAsgmtmGTqgiMg6HHXY1aY5fX6He0/0tmh/WLzwpXhzsTcWyZnbF3aoL1swZNGC1nTTXps3TOeInHGwMaQMgSAAQ7AuI09bPJWAclCLcHqUO3EIb9+371H6eX0SfrXV1cJpOv5S6D+sBgOU7LqVSiBabDt6Ocnnn+a/m06r8OrOBca+f8FUcr9zjhX5CTaGg8rAjOvBoRg2AXumDR1z5o1UyJzws/2Wr98up88/aW11/EOFB8XtTVTBDJlTXhOhJKpBYfoF0PoF1AwBAoObT50KO3TLGJLB++pySS9p3buO2pHxoLDDZ+mwWE13SeDzpxAZc6MOn1XPKTfy+gJvL+zM9+Z6T/mLsDwltnSGbHWQ6y/+TduhNfNyHbRQPTIoh//PCIKMe654JHIOroVqtahHh25Eqro1nXHhMdT77yTOpE68U7qHeFx+WN6zx/onvffh4V/EFENodekboRb6DrhGrgx8917poyMP4SnGFCFH5TJsWOo7g96Mb0ZN7h++YPfFnklL8zjWKaK386MVrD6wbK07x7X1ezI8CuZ/cmIs4vtZnOc9nBvczbv1EAQYZk9hfq43cFs1gof036udnWxweCBueOHzLphj77r20f0O8q4MQcyLpaBpP/TkKZrF3Xq8ZSH4cLv9arJBLLoO7029Z3hgId9i8x2j+3hWJhv3NnjulJSnv5M2Wp31PNHkqPebhl4xp+EM0/s4njohol/27r1b3Q/vZ3uZyGxy+LKN+bn/Z3+NXb1xNEmk6nI6cz95SU//uKiXK2kPLiJPvPIuFunjA6HyhSn0vPLn0OgK8epuWrCd9Dr3+l7JBEO5Lvlx359GGZfXaRqg7OGiby4s8vykRcX5qlbTWaTIbvYbHPlOpsacj6qcTVYJ8/GEk3NJZGs3GDbqFxwRvxh57xZYduYQDg3MCWZc15fidybtIjNdh//TwL4ZrzoyzARWxxn7y6hZFffxcpwWk3v/+yvlChLzpyFiz+Fx+THaDUcYwccP/s8HcUIiPR6apQ45+yOY8c4DqVtSen95cHaJhPPusJznmcmV3XYyuQx/Pz/AAfdhq542o2QsWrDMBCGfyVOSjOUDn4AdSlJiY1sMCTZ0hQHQqcM6RyMahsSKVj2EChd+wgd+wZ9s7xDz4pKl0IrkO7T3a+73wZwhU8wnNcNHhwzDPDiuIMLvDvu4hYnxx4G7M5xD9fsyXGf8q+kZN4l3e7tq5YZfDw77tDcN8ddPOLDsQef+Y574Cxx3Kd8gQU0DjiiQokcBWpwDJFhRDGGQIQEY+IV6SQU0RwGezR0GpvBQh+OVZkXNR9mIx6LKBnzlZaKz82+MUaSZGmV0k7JqJOit1hKJasy04p4TcWcmu6wJRHWMm92W4LUimsbK1JIayskYxwz2r81PlciTBBgSvv7M5BqVae6yiWPQ8Fn/McAXaJJMA1a8/9wu7FFQ2Vtf4mwE0IbW2fYyMqUWnEholAIwf/u+QXtVlqxAAAAeNpt0meTFVUUheH7DhkJEgQJgpIFhdvn7NM9gxKGCZKzKGZyUHJGySAgSq7i5wrFfYdPdFXX+tRP9V61Wl2tt8//rdbh1vueV29eWl2tYXQxjOGMYCSjGM0YxvIB4xjPBCbyIZOYzBSm8hHTmM7HzGAms5jNJ8xhLp/yGfOYzwIWsojFLOFzlrKML/iS5aygTUUiExRqGrrpYSVf8TWrWM0a1tLLOvroZ4BBvmE9G9jIJjazha1sYzs72MkudvMte/iO79nLD/zIT/zML/zKb+xjPwc4yCEOc4SjHOM4v/MHJzjJKU5zhrOc4zwXuMglLnOFq/zJX1zjOje4yS1uc4e73ONv7vOAh/zDI/7lPx7zhKc84zkveDnqwsljg1W7bVZmMrMZZjFrszG7zZ63mfSSXtJLekkv6SW9pJf00pBX6VV6lV6lV+lVepVepVfpVXpJL+klvaSX9JJe6njZu7J3Ze/K3pW9K3tXbg9915id/wid0Amd0Amd0Amd0Il3TueesJ+wn7CfsJ+wn7CfsJ+wn7CfsJ+wn7CfsJ+wn7CfsJ+wn0h6SS/pZb2sl/WyXtbLelkv62W9rBd6oRd6oRd6oRd6oRd6oVf0il7RK3pFr+gVvaJX9IperVfr1Xq1Xq1X69V6tV6tV+s1eo1eo9foNXqNXtPxijsr7qy4s+LOijsr7qy0h75rzG6zx+w115l9Zr85YA520l0Wd1ncZXGXxV0Wd1ncZama1x+EcTsAAAAB//8AAnjaY2BgYGQAgosrjpwF0ZcUq9bCaABTzgdAAAA=") format("woff"),
- url(".././Genericons.ttf") format("truetype"),
- url(".././Genericons.svg#Genericons") format("svg");
- font-weight: normal;
- font-style: normal;
-}
-
-@media screen and (-webkit-min-device-pixel-ratio:0) {
- @font-face {
- font-family: "Genericons";
- src: url(".././Genericons.svg#Genericons") format("svg");
- }
-}
-
-
-/**
- * All Genericons
- */
-
-.genericon {
- font-size: 16px;
- vertical-align: top;
- text-align: center;
- -moz-transition: color .1s ease-in 0;
- -webkit-transition: color .1s ease-in 0;
- display: inline-block;
- font-family: "Genericons";
- font-style: normal;
- font-weight: normal;
- font-variant: normal;
- line-height: 1;
- text-decoration: inherit;
- text-transform: none;
- -moz-osx-font-smoothing: grayscale;
- -webkit-font-smoothing: antialiased;
- speak: none;
-}
-
-
-/**
- * Helper classes
- */
-
-.genericon-rotate-90 {
- -webkit-transform: rotate(90deg);
- -moz-transform: rotate(90deg);
- -ms-transform: rotate(90deg);
- -o-transform: rotate(90deg);
- transform: rotate(90deg);
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
-}
-
-.genericon-rotate-180 {
- -webkit-transform: rotate(180deg);
- -moz-transform: rotate(180deg);
- -ms-transform: rotate(180deg);
- -o-transform: rotate(180deg);
- transform: rotate(180deg);
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
-}
-
-.genericon-rotate-270 {
- -webkit-transform: rotate(270deg);
- -moz-transform: rotate(270deg);
- -ms-transform: rotate(270deg);
- -o-transform: rotate(270deg);
- transform: rotate(270deg);
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
-}
-
-.genericon-flip-horizontal {
- -webkit-transform: scale(-1, 1);
- -moz-transform: scale(-1, 1);
- -ms-transform: scale(-1, 1);
- -o-transform: scale(-1, 1);
- transform: scale(-1, 1);
-}
-
-.genericon-flip-vertical {
- -webkit-transform: scale(1, -1);
- -moz-transform: scale(1, -1);
- -ms-transform: scale(1, -1);
- -o-transform: scale(1, -1);
- transform: scale(1, -1);
-}
-
-
-/**
- * Individual icons
- */
-
-.genericon-404:before { content: "\f423"; }
-.genericon-activity:before { content: "\f508"; }
-.genericon-anchor:before { content: "\f509"; }
-.genericon-aside:before { content: "\f101"; }
-.genericon-attachment:before { content: "\f416"; }
-.genericon-audio:before { content: "\f109"; }
-.genericon-bold:before { content: "\f471"; }
-.genericon-book:before { content: "\f444"; }
-.genericon-bug:before { content: "\f50a"; }
-.genericon-cart:before { content: "\f447"; }
-.genericon-category:before { content: "\f301"; }
-.genericon-chat:before { content: "\f108"; }
-.genericon-checkmark:before { content: "\f418"; }
-.genericon-close:before { content: "\f405"; }
-.genericon-close-alt:before { content: "\f406"; }
-.genericon-cloud:before { content: "\f426"; }
-.genericon-cloud-download:before { content: "\f440"; }
-.genericon-cloud-upload:before { content: "\f441"; }
-.genericon-code:before { content: "\f462"; }
-.genericon-codepen:before { content: "\f216"; }
-.genericon-cog:before { content: "\f445"; }
-.genericon-collapse:before { content: "\f432"; }
-.genericon-comment:before { content: "\f300"; }
-.genericon-day:before { content: "\f305"; }
-.genericon-digg:before { content: "\f221"; }
-.genericon-document:before { content: "\f443"; }
-.genericon-dot:before { content: "\f428"; }
-.genericon-downarrow:before { content: "\f502"; }
-.genericon-download:before { content: "\f50b"; }
-.genericon-draggable:before { content: "\f436"; }
-.genericon-dribbble:before { content: "\f201"; }
-.genericon-dropbox:before { content: "\f225"; }
-.genericon-dropdown:before { content: "\f433"; }
-.genericon-dropdown-left:before { content: "\f434"; }
-.genericon-edit:before { content: "\f411"; }
-.genericon-ellipsis:before { content: "\f476"; }
-.genericon-expand:before { content: "\f431"; }
-.genericon-external:before { content: "\f442"; }
-.genericon-facebook:before { content: "\f203"; }
-.genericon-facebook-alt:before { content: "\f204"; }
-.genericon-fastforward:before { content: "\f458"; }
-.genericon-feed:before { content: "\f413"; }
-.genericon-flag:before { content: "\f468"; }
-.genericon-flickr:before { content: "\f211"; }
-.genericon-foursquare:before { content: "\f226"; }
-.genericon-fullscreen:before { content: "\f474"; }
-.genericon-gallery:before { content: "\f103"; }
-.genericon-github:before { content: "\f200"; }
-.genericon-googleplus:before { content: "\f206"; }
-.genericon-googleplus-alt:before { content: "\f218"; }
-.genericon-handset:before { content: "\f50c"; }
-.genericon-heart:before { content: "\f461"; }
-.genericon-help:before { content: "\f457"; }
-.genericon-hide:before { content: "\f404"; }
-.genericon-hierarchy:before { content: "\f505"; }
-.genericon-home:before { content: "\f409"; }
-.genericon-image:before { content: "\f102"; }
-.genericon-info:before { content: "\f455"; }
-.genericon-instagram:before { content: "\f215"; }
-.genericon-italic:before { content: "\f472"; }
-.genericon-key:before { content: "\f427"; }
-.genericon-leftarrow:before { content: "\f503"; }
-.genericon-link:before { content: "\f107"; }
-.genericon-linkedin:before { content: "\f207"; }
-.genericon-linkedin-alt:before { content: "\f208"; }
-.genericon-location:before { content: "\f417"; }
-.genericon-lock:before { content: "\f470"; }
-.genericon-mail:before { content: "\f410"; }
-.genericon-maximize:before { content: "\f422"; }
-.genericon-menu:before { content: "\f419"; }
-.genericon-microphone:before { content: "\f50d"; }
-.genericon-minimize:before { content: "\f421"; }
-.genericon-minus:before { content: "\f50e"; }
-.genericon-month:before { content: "\f307"; }
-.genericon-move:before { content: "\f50f"; }
-.genericon-next:before { content: "\f429"; }
-.genericon-notice:before { content: "\f456"; }
-.genericon-paintbrush:before { content: "\f506"; }
-.genericon-path:before { content: "\f219"; }
-.genericon-pause:before { content: "\f448"; }
-.genericon-phone:before { content: "\f437"; }
-.genericon-picture:before { content: "\f473"; }
-.genericon-pinned:before { content: "\f308"; }
-.genericon-pinterest:before { content: "\f209"; }
-.genericon-pinterest-alt:before { content: "\f210"; }
-.genericon-play:before { content: "\f452"; }
-.genericon-plugin:before { content: "\f439"; }
-.genericon-plus:before { content: "\f510"; }
-.genericon-pocket:before { content: "\f224"; }
-.genericon-polldaddy:before { content: "\f217"; }
-.genericon-portfolio:before { content: "\f460"; }
-.genericon-previous:before { content: "\f430"; }
-.genericon-print:before { content: "\f469"; }
-.genericon-quote:before { content: "\f106"; }
-.genericon-rating-empty:before { content: "\f511"; }
-.genericon-rating-full:before { content: "\f512"; }
-.genericon-rating-half:before { content: "\f513"; }
-.genericon-reddit:before { content: "\f222"; }
-.genericon-refresh:before { content: "\f420"; }
-.genericon-reply:before { content: "\f412"; }
-.genericon-reply-alt:before { content: "\f466"; }
-.genericon-reply-single:before { content: "\f467"; }
-.genericon-rewind:before { content: "\f459"; }
-.genericon-rightarrow:before { content: "\f501"; }
-.genericon-search:before { content: "\f400"; }
-.genericon-send-to-phone:before { content: "\f438"; }
-.genericon-send-to-tablet:before { content: "\f454"; }
-.genericon-share:before { content: "\f415"; }
-.genericon-show:before { content: "\f403"; }
-.genericon-shuffle:before { content: "\f514"; }
-.genericon-sitemap:before { content: "\f507"; }
-.genericon-skip-ahead:before { content: "\f451"; }
-.genericon-skip-back:before { content: "\f450"; }
-.genericon-skype:before { content: "\f220"; }
-.genericon-spam:before { content: "\f424"; }
-.genericon-spotify:before { content: "\f515"; }
-.genericon-standard:before { content: "\f100"; }
-.genericon-star:before { content: "\f408"; }
-.genericon-status:before { content: "\f105"; }
-.genericon-stop:before { content: "\f449"; }
-.genericon-stumbleupon:before { content: "\f223"; }
-.genericon-subscribe:before { content: "\f463"; }
-.genericon-subscribed:before { content: "\f465"; }
-.genericon-summary:before { content: "\f425"; }
-.genericon-tablet:before { content: "\f453"; }
-.genericon-tag:before { content: "\f302"; }
-.genericon-time:before { content: "\f303"; }
-.genericon-top:before { content: "\f435"; }
-.genericon-trash:before { content: "\f407"; }
-.genericon-tumblr:before { content: "\f214"; }
-.genericon-twitch:before { content: "\f516"; }
-.genericon-twitter:before { content: "\f202"; }
-.genericon-unapprove:before { content: "\f446"; }
-.genericon-unsubscribe:before { content: "\f464"; }
-.genericon-unzoom:before { content: "\f401"; }
-.genericon-uparrow:before { content: "\f500"; }
-.genericon-user:before { content: "\f304"; }
-.genericon-video:before { content: "\f104"; }
-.genericon-videocamera:before { content: "\f517"; }
-.genericon-vimeo:before { content: "\f212"; }
-.genericon-warning:before { content: "\f414"; }
-.genericon-website:before { content: "\f475"; }
-.genericon-week:before { content: "\f306"; }
-.genericon-wordpress:before { content: "\f205"; }
-.genericon-xpost:before { content: "\f504"; }
-.genericon-youtube:before { content: "\f213"; }
-.genericon-zoom:before { content: "\f402"; }
-
-
-
-
diff --git a/plugins/jetpack/_inc/header.php b/plugins/jetpack/_inc/header.php
deleted file mode 100644
index 8c2953d9..00000000
--- a/plugins/jetpack/_inc/header.php
+++ /dev/null
@@ -1,2 +0,0 @@
-<?php $current = $_GET['page']; ?>
-
diff --git a/plugins/jetpack/_inc/idc-notice.js b/plugins/jetpack/_inc/idc-notice.js
deleted file mode 100644
index 93284078..00000000
--- a/plugins/jetpack/_inc/idc-notice.js
+++ /dev/null
@@ -1,231 +0,0 @@
-/* global idcL10n, jQuery, analytics, history, wpCookies */
-
-( function( $ ) {
- var restNonce = idcL10n.nonce,
- currentUrl = idcL10n.currentUrl,
- restRoot = idcL10n.apiRoot,
- notice = $( '.jp-idc-notice' ),
- idcButtons = $( '.jp-idc-notice .dops-button' ),
- tracksUser = idcL10n.tracksUserData,
- tracksEvent = idcL10n.tracksEventData,
- adminBarMenu = $( '#wp-admin-bar-jetpack-idc' ),
- confirmSafeModeButton = $( '#jp-idc-confirm-safe-mode-action' ),
- fixConnectionButton = $( '#jp-idc-fix-connection-action' ),
- migrateButton = $( '#jp-idc-migrate-action'),
- reconnectButton = $( '#jp-idc-reconnect-site-action' ),
- errorNotice = $( '.jp-idc-error__notice'),
- erroredAction = false;
-
- // Initialize Tracks and bump stats.
- if ( 'undefined' !== typeof analytics ) {
- analytics.initialize( tracksUser.userid, tracksUser.username );
- }
-
- if ( tracksEvent.isAdmin ) {
- trackAndBumpMCStats( 'notice_view' );
- } else {
- trackAndBumpMCStats( 'non_admin_notice_view', { 'page': tracksEvent.currentScreen } );
- }
- clearConfirmationArgsFromUrl();
-
- // If the user dismisses the notice, set a cookie for one week so we don't display it for that time.
- notice.on( 'click', '.notice-dismiss', function() {
- var secure = ( 'https:' === window.location.protocol );
- wpCookies.set( 'jetpack_idc_dismiss_notice', '1', 7 * 24 * 60 * 60, false, false, secure );
- trackAndBumpMCStats( 'non_admin_notice_dismiss', { 'page': tracksEvent.currentScreen } );
- } );
-
- notice.on( 'click', '#jp-idc-error__action', function() {
- errorNotice.hide();
- switch( erroredAction ) {
- case 'confirm':
- confirmSafeMode();
- break;
- case 'start-fresh':
- startFreshConnection();
- break;
- case 'migrate':
- migrateStatsAndSubscribers();
- break;
- default:
- return;
- }
- } );
-
- // Confirm Safe Mode
- confirmSafeModeButton.on( 'click', confirmSafeMode );
-
- // Fix connection
- fixConnectionButton.on( 'click', fixJetpackConnection );
-
- // Start fresh connection
- reconnectButton.on( 'click', startFreshConnection );
-
- // Starts migration process.
- migrateButton.on( 'click', migrateStatsAndSubscribers );
-
- function disableDopsButtons() {
- idcButtons.prop( 'disabled', true );
- }
-
- function enableDopsButtons() {
- idcButtons.prop( 'disabled', false );
- }
-
- function clearConfirmationArgsFromUrl( allowReload ) {
- allowReload = 'undefined' === typeof allowReload ? false : allowReload;
-
- // If the jetpack_idc_clear_confirmation query arg is present, let's try to clear it.
- //
- // Otherwise, there's a weird flow where if the user dismisses the notice, then shows the notice, then clicks
- // the confirm safe mode button again, and then reloads the page, then the notice never disappears.
- if ( window.location.search && -1 !== window.location.search.indexOf( 'jetpack_idc_clear_confirmation' ) ) {
- trackAndBumpMCStats( 'clear_confirmation_clicked' );
-
- // If push state is available, let's use that to minimize reloading the page.
- // Otherwise, we can clear the args by reloading the page.
- if ( history && history.pushState ) {
- history.pushState( {}, '', currentUrl );
- } else if ( allowReload ) {
- window.location.href = currentUrl;
- }
- }
- }
-
- function confirmSafeMode() {
- errorNotice.hide();
- trackAndBumpMCStats( 'confirm_safe_mode' );
-
- var route = restRoot + 'jetpack/v4/identity-crisis/confirm-safe-mode';
- disableDopsButtons();
- $.ajax( {
- method: 'POST',
- beforeSend : function ( xhr ) {
- xhr.setRequestHeader( 'X-WP-Nonce', restNonce );
- },
- url: route,
- data: {},
- success: function() {
- notice.hide();
- adminBarMenu.removeClass( 'hide' );
-
- // We must refresh the Jetpack admin UI page in order for the React UI to render.
- if ( window.location.search && 1 === window.location.search.indexOf( 'page=jetpack' ) ) {
- window.location.reload();
- }
- },
- error: function( error ) {
- erroredAction = 'confirm';
- displayErrorNotice( error );
- enableDopsButtons();
- }
- } );
- }
-
- function migrateStatsAndSubscribers() {
- errorNotice.hide();
- trackAndBumpMCStats( 'migrate' );
-
- var route = restRoot + 'jetpack/v4/identity-crisis/migrate';
- disableDopsButtons();
- $.ajax( {
- method: 'POST',
- beforeSend : function ( xhr ) {
- xhr.setRequestHeader( 'X-WP-Nonce', restNonce );
- },
- url: route,
- data: {},
- success: function() {
- notice.hide();
- if ( $( 'body' ).hasClass( 'toplevel_page_jetpack' ) ) {
- // On the main Jetpack page, sites in IDC will not see Jetpack's interface.
- // Once IDC is resolved, we need to refresh the page to regain access to the UI.
- window.location.reload( true );
- }
- },
- error: function( error ) {
- erroredAction = 'migrate';
- displayErrorNotice( error );
- enableDopsButtons();
- }
- } );
- }
-
- function fixJetpackConnection() {
- errorNotice.hide();
- trackAndBumpMCStats( 'fix_connection' );
- notice.addClass( 'jp-idc-show-second-step' );
- }
-
- /**
- * On successful request of the endpoint, we will redirect to the
- * connection auth flow after appending a specific 'from=' param for tracking.
- */
- function startFreshConnection() {
- errorNotice.hide();
- trackAndBumpMCStats( 'start_fresh' );
-
- var route = restRoot + 'jetpack/v4/identity-crisis/start-fresh';
- disableDopsButtons();
- $.ajax( {
- method: 'POST',
- beforeSend : function ( xhr ) {
- xhr.setRequestHeader( 'X-WP-Nonce', restNonce );
- },
- url: route,
- data: {},
- success: function( connectUrl ){
- // Add a from param and take them to connect.
- window.location = connectUrl + '&from=idc-notice';
- },
- error: function( error ) {
- erroredAction = 'start-fresh';
- displayErrorNotice( error );
- enableDopsButtons();
- }
- } );
- }
-
- /**
- * Displays an error message from the REST endpoints we're hitting.
- *
- * @param error {Object} Object containing the errored response from the API
- */
- function displayErrorNotice( error ) {
- var errorDescription = $( '.jp-idc-error__desc' );
- if ( error && error.responseJSON && error.responseJSON.message ) {
- errorDescription.html( error.responseJSON.message );
- } else {
- errorDescription.html( '' );
- }
- errorNotice.css( 'display', 'flex' );
- }
-
- /**
- * This function will fire both a Tracks and MC stat.
- * It will make sure to format the event name properly for the given stat home.
- *
- * Tracks: Will be prefixed by 'jetpack_idc_' and use underscores.
- * MC: Will not be prefixed, and will use dashes.
- *
- * @param eventName string
- * @param extraProps object
- */
- function trackAndBumpMCStats( eventName, extraProps ) {
- if ( 'undefined' === typeof extraProps || 'object' !== typeof extraProps ) {
- extraProps = {};
- }
-
- if ( eventName && eventName.length && 'undefined' !== typeof analytics && analytics.tracks && analytics.mc ) {
- // Format for Tracks
- eventName = eventName.replace( /-/g, '_' );
- eventName = eventName.indexOf( 'jetpack_idc_' ) !== 0 ? 'jetpack_idc_' + eventName : eventName;
- analytics.tracks.recordEvent( eventName, extraProps );
-
- // Now format for MC stats
- eventName = eventName.replace( 'jetpack_idc_', '' );
- eventName = eventName.replace( /_/g, '-' );
- analytics.mc.bumpStat( 'jetpack-idc', eventName );
- }
- }
-})( jQuery );
diff --git a/plugins/jetpack/_inc/jetpack-admin.js b/plugins/jetpack/_inc/jetpack-admin.js
deleted file mode 100644
index 074d43fc..00000000
--- a/plugins/jetpack/_inc/jetpack-admin.js
+++ /dev/null
@@ -1,58 +0,0 @@
-(function($) {
-
- ///////////////////////////////////////
- // INIT
- ///////////////////////////////////////
-
- $(document).ready(function () {
- initEvents();
- configFixedElements();
- });
-
- ///////////////////////////////////////
- // FUNCTIONS
- ///////////////////////////////////////
-
- function configFixedElements() {
- var jpTopFrame = $('.frame.top'),
- jpBottomFrame = $('.frame.bottom'),
- $body = $('body');
-
- $body.scroll(function(){
- if ( 33 > jpTopFrame.offset().top ) {
- jpTopFrame.addClass('fixed');
- $body.addClass('jp-frame-top-fixed');
- }
- if ( 120 <= jpBottomFrame.offset().top ) {
- jpTopFrame.removeClass('fixed');
- $body.removeClass('jp-frame-top-fixed');
- }
- });
-
- $( 'table.jetpack-modules', jpBottomFrame ).addClass( 'with-transparency' );
- $( '.manage-left', jpBottomFrame ).css( 'width', '' );
- $( '.manage-right', jpBottomFrame ).show();
- }
-
- function initEvents() {
- // toggle search and filters at mobile resolution
- $('.filter-search').on('click', function () {
- $(this).toggleClass('active');
- $('.manage-right').toggleClass('show');
- $('.shade').toggle();
- });
-
- // Toggle all checkboxes
- $('.checkall').on('click', function () {
- $('.table-bordered').find(':checkbox').prop('checked', this.checked);
- });
-
- // Clicking outside modal, or close X closes modal
- $('.shade, .modal .close').on('click', function ( event ) {
- $('.shade, .modal').hide();
- $('.manage-right').removeClass('show');
- event.preventDefault();
- });
- }
-
-})(jQuery);
diff --git a/plugins/jetpack/_inc/jetpack-connection-banner.js b/plugins/jetpack/_inc/jetpack-connection-banner.js
deleted file mode 100644
index 37f38d82..00000000
--- a/plugins/jetpack/_inc/jetpack-connection-banner.js
+++ /dev/null
@@ -1,83 +0,0 @@
-/* global jQuery, jp_banner */
-
-( function( $ ) {
- var nav = $( '.jp-wpcom-connect__vertical-nav-container' ),
- contentContainer = $( '.jp-wpcom-connect__content-container' ),
- nextFeatureButtons = $( '.jp-banner__button-container .next-feature' ),
- fullScreenContainer = $( '.jp-connect-full__container' ),
- fullScreenDismiss = $( '.jp-connect-full__dismiss, .jp-connect-full__dismiss-paragraph' ),
- wpWelcomeNotice = $( '#welcome-panel' ),
- connectionBanner = $( '#message' ),
- connectionBannerDismiss = $( '.connection-banner-dismiss' );
-
- // Move the banner below the WP Welcome notice on the dashboard
- $( window ).on( 'load', function() {
- wpWelcomeNotice.insertBefore( connectionBanner );
- } );
-
- // Dismiss the connection banner via AJAX
- connectionBannerDismiss.on( 'click', function() {
- $( connectionBanner ).hide();
-
- var data = {
- action: 'jetpack_connection_banner',
- nonce: jp_banner.connectionBannerNonce,
- dismissBanner: true
- };
-
- $.post( jp_banner.ajax_url, data, function( response ) {
- if ( true !== response.success ) {
- $( connectionBanner ).show();
- }
- } );
- } );
-
- nav.on( 'click', '.vertical-menu__feature-item:not( .vertical-menu__feature-item-is-selected )', function() {
- transitionSlideToIndex( $( this ).index() );
- } );
-
- nextFeatureButtons.on( 'click', function( e ) {
- e.preventDefault();
-
- var slideIndex = $( this )
- .closest( '.jp-wpcom-connect__slide' )
- .index();
-
- transitionSlideToIndex( slideIndex + 1 );
- } );
-
- function transitionSlideToIndex( index ) {
- // Remove classes from previously selected menu item and content
- nav
- .find( '.vertical-menu__feature-item-is-selected' )
- .removeClass( 'vertical-menu__feature-item-is-selected' );
-
- contentContainer
- .find( '.jp__slide-is-active' )
- .removeClass( 'jp__slide-is-active' );
-
- // Add classes to selected menu item and content
- nav
- .children()
- .eq( index )
- .addClass( 'vertical-menu__feature-item-is-selected' );
-
- contentContainer
- .children()
- .eq( index )
- .addClass( 'jp__slide-is-active' );
- }
-
- /**
- * Full-screen connection prompt
- */
- fullScreenDismiss.on( 'click', function() {
- $( fullScreenContainer ).hide();
- } );
-
- $( document ).keyup( function( e ) {
- if ( 27 === e.keyCode ) {
- $( fullScreenDismiss ).click();
- }
- } );
-} )( jQuery );
diff --git a/plugins/jetpack/_inc/jetpack-jitm.js b/plugins/jetpack/_inc/jetpack-jitm.js
deleted file mode 100644
index 49a8fb11..00000000
--- a/plugins/jetpack/_inc/jetpack-jitm.js
+++ /dev/null
@@ -1,187 +0,0 @@
-jQuery( document ).ready( function( $ ) {
- var templates = {
- 'default': function( envelope ) {
- var html = '<div class="jitm-card jitm-banner ' + (
- envelope.CTA.message ? 'has-call-to-action' : ''
- ) + ' is-upgrade-premium ' + envelope.content.classes + '" data-stats_url="' + envelope.jitm_stats_url + '">';
- html += '<div class="jitm-banner__icon-plan">' + envelope.content.icon + '</div>';
- html += '<div class="jitm-banner__content">';
- html += '<div class="jitm-banner__info">';
- html += '<div class="jitm-banner__title">' + envelope.content.message + '</div>';
- if ( envelope.content.description && envelope.content.description !== '' ) {
- html += '<div class="jitm-banner__description">' + envelope.content.description;
- if ( envelope.content.list.length > 0 ) {
- html += '<ul class="banner__list">';
- for ( var i = 0; i < envelope.content.list.length; i++ ) {
-
- var text = envelope.content.list[ i ].item;
-
- if ( envelope.content.list[ i ].url ) {
- text = '<a href="' + envelope.content.list[ i ].url + '" target="_blank" rel="noopener noreferrer" data-module="' + envelope.feature_class + '" data-jptracks-name="nudge_item_click" data-jptracks-prop="jitm-' + envelope.id + '">' +
- text + '</a>';
- }
-
- html += '<li>' +
- '<svg class="gridicon gridicons-checkmark" height="16" width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g>' +
- '<path d="M9 19.414l-6.707-6.707 1.414-1.414L9 16.586 20.293 5.293l1.414 1.414" /></g></svg>' +
- text +
- '</li>';
- }
- }
- html += '</div>';
- }
- html += '</div>';
- if ( envelope.activate_module ) {
- html += '<div class="jitm-banner__action" id="jitm-banner__activate">';
- html += '<a href="#" data-module="' + envelope.activate_module + '" type="button" class="jitm-button is-compact is-primary jptracks" data-jptracks-name="nudge_click" data-jptracks-prop="jitm-' + envelope.id + '-activate_module">' + window.jitm_config.activate_module_text + '</a>';
- html += '</div>';
- }
- if ( envelope.CTA.message ) {
- var ctaClasses = 'jitm-button is-compact jptracks';
- if (
- envelope.CTA.primary &&
- null === envelope.activate_module
- ) {
- ctaClasses += ' is-primary';
- }
-
- html += '<div class="jitm-banner__action">';
- html += '<a href="' + envelope.url + '" target="' + ( envelope.CTA.newWindow === false ? '_self' : '_blank' ) + '" rel="noopener noreferrer" title="' + envelope.CTA.message + '" data-module="' + envelope.feature_class + '" type="button" class="' + ctaClasses + '" data-jptracks-name="nudge_click" data-jptracks-prop="jitm-' + envelope.id + '">' + envelope.CTA.message + '</a>';
- html += '</div>';
- }
- html += '<a href="#" data-module="' + envelope.feature_class + '" class="jitm-banner__dismiss"></a>';
- html += '</div>';
- html += '</div>';
-
- return $( html );
- }
- };
-
- var setJITMContent = function( $el, response, redirect ) {
- var template;
-
- var render = function( $my_template ) {
- return function( e ) {
- e.preventDefault();
-
- $my_template.hide();
-
- $.ajax( {
- url: window.jitm_config.api_root + 'jetpack/v4/jitm',
- method: 'POST', // using DELETE without permalinks is broken in default nginx configuration
- data: {
- id: response.id,
- feature_class: response.feature_class
- }
- } );
- };
- };
-
- template = response.template;
-
- // if we don't have a template for this version, just use the default template
- if ( ! template || ! templates[ template ] ) {
- template = 'default';
- }
-
- response.url = response.url + '&redirect=' + redirect;
-
- var $template = templates[ template ]( response );
- $template.find( '.jitm-banner__dismiss' ).click( render( $template ) );
-
- if ( $( '#jp-admin-notices' ).length > 0 ) {
- // Add to Jetpack notices within the Jetpack settings app.
- $el.innerHTML = $template;
-
- // If we already have a message, replace it.
- if ( $('#jp-admin-notices').find( '.jitm-card' ) ) {
- $( '.jitm-card' ).replaceWith( $template );
- }
-
- // No existing JITM? Add ours to the top of the Jetpack admin notices.
- $template.prependTo( $( '#jp-admin-notices' ) );
- } else {
- // Replace placeholder div on other pages.
- $el.replaceWith($template);
- }
-
- // Handle Module activation button if it exists.
- $template.find( '#jitm-banner__activate a' ).click( function() {
- var $activate_button = $( this );
-
- // Do not allow any requests if the button is disabled.
- if ( $activate_button.attr( 'disabled' ) ) {
- return false;
- }
-
- // Make request to activate module.
- $.ajax( {
- url: window.jitm_config.api_root + 'jetpack/v4/module/' + $activate_button.data( 'module' ) + '/active',
- method: 'POST',
- beforeSend: function( xhr ) {
- xhr.setRequestHeader( 'X-WP-Nonce', $el.data( 'nonce' ) );
-
- // Change the button status to disabled as the change is in progress.
- $( '#jitm-banner__activate a' ).text( window.jitm_config.activating_module_text );
- $( '#jitm-banner__activate a' ).attr( 'disabled', true );
- }
- } ).done( function() {
- $( '#jitm-banner__activate a' ).text( window.jitm_config.activated_module_text );
- $( '#jitm-banner__activate a' ).attr( 'disabled', true );
-
- // Hide the JITM after 2 seconds.
- setTimeout( function () {
- $template.fadeOut( 'slow' );
- }, 2000 );
- } );
- } );
- };
-
- var reFetch = function() {
- $( '.jetpack-jitm-message' ).each( function() {
- var $el = $( this );
-
- var message_path = $el.data( 'message-path' );
- var query = $el.data( 'query' );
- var redirect = $el.data( 'redirect' );
- var hash = location.hash;
-
- hash = hash.replace( /#\//, '_' );
- if ( '_dashboard' !== hash ) {
- message_path = message_path.replace( 'toplevel_page_jetpack', 'toplevel_page_jetpack' + hash );
- }
-
- $.get( window.jitm_config.api_root + 'jetpack/v4/jitm', {
- message_path: message_path,
- query: query,
- _wpnonce: $el.data( 'nonce' )
- } ).then( function( response ) {
- if ( 'object' === typeof response && response['1'] ) {
- response = [ response['1'] ];
- }
-
- // properly handle the case of an empty array or no content set
- if ( 0 === response.length || ! response[ 0 ].content ) {
- return;
- }
-
- // for now, always take the first response
- setJITMContent( $el, response[ 0 ], redirect );
- } );
- } );
- };
-
- reFetch();
-
- $( window ).bind( 'hashchange', function( e ) {
- var newURL = e.originalEvent.newURL;
-
- if ( newURL.indexOf( 'jetpack#/' ) >= 0 ) {
- var jitm_card = document.querySelector( '.jitm-card' );
- if ( jitm_card ) {
- jitm_card.remove();
- }
- reFetch();
- }
- } );
-} );
diff --git a/plugins/jetpack/_inc/jetpack-modules.js b/plugins/jetpack/_inc/jetpack-modules.js
deleted file mode 100644
index b1dc21b1..00000000
--- a/plugins/jetpack/_inc/jetpack-modules.js
+++ /dev/null
@@ -1,71 +0,0 @@
-
-( function( window, $, items, models, views, i18n, modalinfo, nonces ) {
- 'use strict';
-
- var modules, list_table, handle_module_tag_click, $the_table, $the_filters, $the_search, $jp_frame, $bulk_button;
-
- $the_table = $( '.wp-list-table.jetpack-modules' );
- $the_filters = $( '.navbar-form' );
- $the_search = $( '#srch-term-search-input' );
- $jp_frame = $( '.jp-frame' );
- $bulk_button = $( '#doaction' );
-
- modules = new models.Modules( {
- items : items
- } );
-
- list_table = new views.List_Table( {
- el : '#the-list',
- model : modules
- } );
-
- // Kick off an initial redraw.
- modules.trigger( 'change' );
-
- // Handle the filtering of modules.
- handle_module_tag_click = function( event ) {
- // Switch the item in the subsubsub list that's flagged as current.
- $( '.subsubsub' ).find( 'a[data-title="' + $(this).data('title') + '"]' ).addClass( 'current' )
- .closest( 'li' ).siblings().find( 'a.current' ).removeClass( 'current' );
-
- event.preventDefault();
- modules.trigger( 'change' );
- };
-
- $( '.subsubsub a' ).on( 'click', { modules : modules }, handle_module_tag_click );
-
- $the_filters.on( 'click', '.button-group .button', { modules : modules }, function( event ) {
- event.preventDefault();
- $(this).addClass('active').siblings('.active').removeClass('active');
- modules.trigger( 'change' );
- } );
-
- $the_search.on( 'keyup search', function( e ) {
- // Don't trigger change on tab, since it's only used for accessibility
- // anyway, and will remove all checked boxes
- if ( e.keyCode !== 9 ) {
- modules.trigger( 'change' );
- }
- } );
-
- $the_search.prop( 'placeholder', i18n.search_placeholder );
-
- $bulk_button.on( 'click', function( event ) {
- var selectedModules = $('.jetpack-modules-list-table-form').serialize(),
- selectedAction = $(this).siblings('select').val(),
- url;
-
- if ( selectedModules.length && '-1' !== selectedAction ) {
- url = 'admin.php?page=jetpack&action=' + encodeURIComponent( selectedAction );
- url += '&' + selectedModules;
- url += '&_wpnonce=' + encodeURIComponent( nonces.bulk );
-
- window.location.href = url;
- } else {
- // Possibly add in an alert here explaining why nothing's happening?
- }
-
- event.preventDefault();
- } );
-
-} ) ( this, jQuery, window.jetpackModulesData.modules, this.jetpackModules.models, this.jetpackModules.views, window.jetpackModulesData.i18n, window.jetpackModulesData.modalinfo, window.jetpackModulesData.nonces );
diff --git a/plugins/jetpack/_inc/jetpack-modules.models.js b/plugins/jetpack/_inc/jetpack-modules.models.js
deleted file mode 100644
index 92f296da..00000000
--- a/plugins/jetpack/_inc/jetpack-modules.models.js
+++ /dev/null
@@ -1,72 +0,0 @@
-
-this.jetpackModules = this.jetpackModules || {};
-
-window.jetpackModules.models = (function( window, $, _, Backbone ) {
- 'use strict';
-
- var models = {};
-
- models.Modules = Backbone.Model.extend({
- visibles : {},
-
- /**
- * Updates modules.items dataset to be a reflection of both the current
- * modules.raw data, as well as any filters or sorting that may be in effect.
- */
- filter_and_sort : function() {
- var subsubsub = $('.subsubsub .current'),
- items = this.get( 'raw' ),
- m_filter = $('.button-group.filter-active .active'),
- m_sort = $('.button-group.sort .active'),
- m_search = $('#srch-term-search-input').val().toLowerCase(),
- groups;
-
- // If a module filter has been selected, filter it!
- if ( ! subsubsub.closest('li').hasClass( 'all' ) ) {
- items = _.filter( items, function( item ) {
- return _.contains( item.module_tags, subsubsub.data( 'title' ) );
- } );
- }
-
- if ( m_filter.data('filter-by') ) {
- items = _.filter( items, function( item ) {
- return item[ m_filter.data('filter-by') ] === m_filter.data('filter-value');
- } );
- }
-
- if ( m_search.length ) {
- items = _.filter( items, function( item ) {
- var search_text = item.name + ' ' + item.description + ' ' + item.long_description + ' ' + item.search_terms + ' ' + item.jumpstart_desc + ' ' + item.module_tags;
- return ( -1 !== search_text.toLowerCase().indexOf( m_search ) );
- } );
- }
-
- if ( m_sort.data('sort-by') ) {
- items = _.sortBy( items, m_sort.data('sort-by') );
- if ( 'reverse' === m_sort.data('sort-order') ) {
- items.reverse();
- }
- }
-
- // Sort unavailable modules to the end if the user is running in local mode.
- groups = _.groupBy( items, 'available' );
- if ( _.has( groups, 'false' ) ) {
- items = [].concat( groups[true], groups[false] );
- }
-
- // Now shove it back in.
- this.set( 'items', items );
-
- return this;
- },
-
- initialize : function() {
- var items = this.get( 'items' );
- this.set( 'raw', items );
- }
-
- });
-
- return models;
-
-})( this, jQuery, _, Backbone );
diff --git a/plugins/jetpack/_inc/jetpack-modules.views.js b/plugins/jetpack/_inc/jetpack-modules.views.js
deleted file mode 100644
index 58f64c83..00000000
--- a/plugins/jetpack/_inc/jetpack-modules.views.js
+++ /dev/null
@@ -1,62 +0,0 @@
-
-this.jetpackModules = this.jetpackModules || {};
-
-window.jetpackModules.views = (function( window, $, _, Backbone, wp ) {
- 'use strict';
-
- var views = {};
-
- views.List_Table = Backbone.View.extend({
-
- template : wp.template( 'Jetpack_Modules_List_Table_Template' ),
-
- /**
- * If we can, use replaceState to change the URL and indicate the new filtering.
- * This will be handy with redirecting back to the same state after activating/deactivating.
- */
- updateUrl : function() {
- if ( ! window.history.replaceState ) {
- return;
- }
-
- var url = window.location.href.split('?')[0] + '?page=jetpack_modules',
- m_tag = $('.subsubsub .current'),
- m_filter = $('.button-group.filter-active .active'),
- m_sort = $('.button-group.sort .active'),
- m_search = $('#srch-term-search-input').val();
-
- if ( m_search.length ) {
- url += '&s=' + encodeURIComponent( m_search );
- }
-
- if ( ! m_tag.hasClass('all') ) {
- url += '&module_tag=' + encodeURIComponent( m_tag.data('title') );
- }
-
- if ( m_filter.data('filter-by') ) {
- url += '&' + encodeURIComponent( m_filter.data('filter-by') ) + '=' + encodeURIComponent( m_filter.data('filter-value') );
- }
-
- if ( 'name' !== m_sort.data('sort-by') ) {
- url += '&sort_by=' + encodeURIComponent( m_sort.data('sort-by') );
- }
-
- window.history.replaceState( {}, '', url );
- },
-
- render : function() {
- this.model.filter_and_sort();
- this.$el.html( this.template( this.model.attributes ) );
- this.updateUrl();
- return this;
- },
-
- initialize : function() {
- this.listenTo( this.model, 'change', this.render );
- }
-
- });
-
- return views;
-
-})( this, jQuery, _, Backbone, wp );
diff --git a/plugins/jetpack/_inc/jetpack-server-sandbox.php b/plugins/jetpack/_inc/jetpack-server-sandbox.php
deleted file mode 100644
index a0c90798..00000000
--- a/plugins/jetpack/_inc/jetpack-server-sandbox.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-/**
- * This feature is only useful for Automattic developers.
- * It configures Jetpack to talk to staging/sandbox servers
- * on WordPress.com instead of production servers.
- */
-
-/**
- * @param string $sandbox Sandbox domain
- * @param string $url URL of request about to be made
- * @param array $headers Headers of request about to be made
- * @return array [ 'url' => new URL, 'host' => new Host ]
- */
-function jetpack_server_sandbox_request_parameters( $sandbox, $url, $headers ) {
- $host = '';
-
- $url_host = parse_url( $url, PHP_URL_HOST );
-
- switch ( $url_host ) {
- case 'public-api.wordpress.com' :
- case 'jetpack.wordpress.com' :
- case 'jetpack.com' :
- case 'dashboard.wordpress.com' :
- $host = isset( $headers['Host'] ) ? $headers['Host'] : $url_host;
- $url = preg_replace(
- '@^(https?://)' . preg_quote( $url_host, '@' ) . '(?=[/?#].*|$)@',
- '\\1' . $sandbox,
- $url,
- 1
- );
- }
-
- return compact( 'url', 'host' );
-}
-
-/**
- * Modifies parameters of request in order to send the request to the
- * server specified by `JETPACK__SANDBOX_DOMAIN`.
- *
- * Attached to the `requests-requests.before_request` filter.
- * @param string &$url URL of request about to be made
- * @param array &$headers Headers of request about to be made
- * @return void
- */
-function jetpack_server_sandbox( &$url, &$headers ) {
- if ( ! JETPACK__SANDBOX_DOMAIN ) {
- return;
- }
-
- $original_url = $url;
-
- $request_parameters = jetpack_server_sandbox_request_parameters( JETPACK__SANDBOX_DOMAIN, $url, $headers );
- $url = $request_parameters['url'];
- if ( $request_parameters['host'] ) {
- $headers['Host'] = $request_parameters['host'];
- if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
- error_log( sprintf( "SANDBOXING via '%s': '%s'", JETPACK__SANDBOX_DOMAIN, $original_url ) );
- }
- }
-}
-
-add_action( 'requests-requests.before_request', 'jetpack_server_sandbox', 10, 2 );
diff --git a/plugins/jetpack/_inc/jetpack-strings.php b/plugins/jetpack/_inc/jetpack-strings.php
deleted file mode 100644
index a6ea7fc7..00000000
--- a/plugins/jetpack/_inc/jetpack-strings.php
+++ /dev/null
@@ -1,801 +0,0 @@
-<?php
-// This file is automatically generated with yarn gulp languages:phpize
-$jetpack_strings = array(
- __('Sunday','jetpack'),
- __('Monday','jetpack'),
- __('Tuesday','jetpack'),
- __('Wednesday','jetpack'),
- __('Thursday','jetpack'),
- __('Friday','jetpack'),
- __('Saturday','jetpack'),
- __('Loading business hours','jetpack'),
- __('Business Hours','jetpack'),
- __('Display opening hours for your business.','jetpack'),
- __('Write label…','jetpack'),
- __('Required','jetpack'),
- __('(required)','jetpack'),
- __('Insert option','jetpack'),
- __('Add option','jetpack'),
- __('Field Settings','jetpack'),
- __('ID','jetpack'),
- __('Set the placeholder text','jetpack'),
- __('Default Value','jetpack'),
- __('Write option…','jetpack'),
- __('Remove option','jetpack'),
- __('Form','jetpack'),
- __('A simple way to get feedback from folks visiting your site.','jetpack'),
- __('Text','jetpack'),
- __('When you need just a small amount of text, add a text input.','jetpack'),
- __('Name','jetpack'),
- __('Introductions are important. Add an input for folks to add their name.','jetpack'),
- __('Email','jetpack'),
- __('e-mail','jetpack'),
- __('mail','jetpack'),
- __('Want to reply to folks? Add an email address input.','jetpack'),
- __('Website','jetpack'),
- __('email','jetpack'),
- __('feedback','jetpack'),
- __('contact','jetpack'),
- __('internet page','jetpack'),
- __('Add an address input for a website.','jetpack'),
- __('Date Picker','jetpack'),
- __('Calendar','jetpack'),
- __('day month year','jetpack'),
- __('The best way to set a date. Add a date picker.','jetpack'),
- __('Telephone','jetpack'),
- __('Phone','jetpack'),
- __('Cellular phone','jetpack'),
- __('Mobile','jetpack'),
- __('Add a phone number input.','jetpack'),
- __('Message','jetpack'),
- __('Textarea','jetpack'),
- __('Multiline text','jetpack'),
- __('Let folks speak their mind. This text box is great for longer responses.','jetpack'),
- __('Checkbox','jetpack'),
- __('Confirm','jetpack'),
- __('Accept','jetpack'),
- __('Add a single checkbox.','jetpack'),
- __('Checkbox Group','jetpack'),
- __('Choose Multiple','jetpack'),
- __('People love options. Add several checkbox items.','jetpack'),
- __('Radio','jetpack'),
- __('Inspired by radios, only one radio item can be selected at a time. Add several radio button items.','jetpack'),
- __('Select','jetpack'),
- __('Option','jetpack'),
- __('Choose','jetpack'),
- __('Dropdown','jetpack'),
- __('Compact, but powerful. Add a select box with several items.','jetpack'),
- __('Submit','jetpack'),
- __('Address','jetpack'),
- __('Lets you add a physical address with Schema markup.','jetpack'),
- __('Open address in Google Maps','jetpack'),
- __('Phone number','jetpack'),
- __('Phone Number','jetpack'),
- __('Lets you add a phone number with an automatically generated click-to-call link.','jetpack'),
- __('Search for a term or paste a Giphy URL','jetpack'),
- __('Search','jetpack'),
- __('Write caption…','jetpack'),
- __('GIF','jetpack'),
- __('animated','jetpack'),
- __('giphy','jetpack'),
- __('image','jetpack'),
- __('Search for and insert an animated image.','jetpack'),
- __('Marker Title','jetpack'),
- __('Marker Caption','jetpack'),
- __('Delete Marker','jetpack'),
- _n('%d result found, use up and down arrow keys to navigate.',
- '%d results found, use up and down arrow keys to navigate.','jetpack'),
- __('No results.','jetpack'),
- __('Are you sure you wish to leave this page?','jetpack'),
- __('Google+ will shut down in April 2019. You can keep posting with your existing Google+ connection through March.','jetpack'),
- __(' Learn more','jetpack'),
- __('Your LinkedIn connection needs to be reauthenticated to continue working – head to Sharing to take care of it.','jetpack'),
- __('Go to Sharing settings','jetpack'),
- _n('%d character remaining',
- '%d characters remaining','jetpack'),
- __('Customize your message','jetpack'),
- __('Write a message for your audience here. If you leave this blank, we\'ll use the post title as the message.','jetpack'),
- __('Share this post','jetpack'),
- __('Connect and select the accounts where you\'d like to share your post.','jetpack'),
- __('Show after threshold','jetpack'),
- __('Show before threshold','jetpack'),
- _n('This block will only appear to people who have visited this page at least once.',
- 'This block will only appear to people who have visited this page at least %d times.','jetpack'),
- _n('This block will only appear to people who have never visited this page before.',
- 'This block will only appear to people who have visited this page less than %d times.','jetpack'),
- __('Repeat Visitor','jetpack'),
- __('Visit count threshold','jetpack'),
- __('Visibility','jetpack'),
- __('Shortlink','jetpack'),
- __('Invalid price.','jetpack'),
- __('If you’re selling something, you need a price tag. Add yours here.','jetpack'),
- __('Invalid price','jetpack'),
- __('Your price is negative — enter a positive number so people can pay the right amount.','jetpack'),
- __('We know every penny counts, but prices in this currency can’t contain decimal values.','jetpack'),
- _n('The price cannot have more than %d decimal place.',
- 'The price cannot have more than %d decimal places.','jetpack'),
- __('We want to make sure payments reach you, so please add an email address.','jetpack'),
- __('%s is not a valid email address.','jetpack'),
- __('Please add a brief title so that people know what they’re paying for.','jetpack'),
- __('Item name','jetpack'),
- __('Describe your item in a few words','jetpack'),
- __('Currency','jetpack'),
- __('Price','jetpack'),
- __('Allow people to buy more than one item at a time','jetpack'),
- __('Enter the email address associated with your PayPal account. Don’t have an account?','jetpack'),
- __('Create one on PayPal','jetpack'),
- __('Product Image','jetpack'),
- __('Edit Image','jetpack'),
- __('Remove Image','jetpack'),
- __('Pay with PayPal','jetpack'),
- __('Slideshow','jetpack'),
- __('gallery','jetpack'),
- __('slider','jetpack'),
- __('Add an interactive slideshow.','jetpack'),
- __('Pick an image filter','jetpack'),
- __('image %1$d of %2$d in gallery','jetpack'),
- __('Uploading…','jetpack'),
- __('Embedding…','jetpack'),
- __('Edit video','jetpack'),
- __('VR Image','jetpack'),
- __('Rectangle 300x250','jetpack'),
- __('Leaderboard 728x90','jetpack'),
- __('Mobile Leaderboard 320x50','jetpack'),
- __('Wide Skyscraper 160x600','jetpack'),
- _x('opening hours','block search term','jetpack'),
- _x('closing time','block search term','jetpack'),
- _x('schedule','block search term','jetpack'),
- _x('location','block search term','jetpack'),
- _x('direction','block search term','jetpack'),
- _x('place','block search term','jetpack'),
- _x('mobile','block search term','jetpack'),
- _x('telephone','block search term','jetpack'),
- _x('cell','block search term','jetpack'),
- _x('Original','image style','jetpack'),
- _x('Black and White','image style','jetpack'),
- _x('Sepia','image style','jetpack'),
- _x('Clarendon','image style','jetpack'),
- _x('Gingham','image style','jetpack'),
- _x('At A Glance','Navigation item.','jetpack'),
-__('At A Glance','jetpack'),
-_x('My Plan','Navigation item.','jetpack'),
-_x('Plans','Navigation item.','jetpack'),
-_x('Settings','Navigation item.','jetpack'),
-_x('Discussion','Navigation item.','jetpack'),
-_x('Security','Navigation item.','jetpack'),
-_x('Performance','Navigation item.','jetpack'),
-_x('Traffic','Navigation item.','jetpack'),
-_x('Writing','Navigation item.','jetpack'),
-_x('Sharing','Navigation item.','jetpack'),
-__('Testing Jetpack Connection','jetpack'),
-__('There was an error testing Jetpack. Error: %(error)s','jetpack'),
-__('Disconnecting Jetpack','jetpack'),
-__('There was an error disconnecting Jetpack. Error: %(error)s','jetpack'),
-__('Unlinking from WordPress.com','jetpack'),
-__('Unlinked from WordPress.com.','jetpack'),
-__('Error unlinking from WordPress.com. %(error)s','jetpack'),
-__('Resetting Jetpack options…','jetpack'),
-__('Options reset.','jetpack'),
-__('Options failed to reset.','jetpack'),
-__('Activating recommended features…','jetpack'),
-__('Recommended features active.','jetpack'),
-__('Recommended features failed to activate. %(error)s','jetpack'),
-__('Activating %(slug)s…','jetpack'),
-__('%(slug)s has been activated.','jetpack'),
-__('%(slug)s failed to activate. %(error)s','jetpack'),
-__('Deactivating %(slug)s…','jetpack'),
-__('%(slug)s has been deactivated.','jetpack'),
-__('%(slug)s failed to deactivate. %(error)s','jetpack'),
-__('Updating %(slug)s settings…','jetpack'),
-__('Updated %(slug)s settings.','jetpack'),
-__('Error updating %(slug)s settings. %(error)s','jetpack'),
-__('Updating %(slug)s address…','jetpack'),
-__('Regenerated %(slug)s address .','jetpack'),
-__('Error regenerating %(slug)s address. %(error)s','jetpack'),
-__('Updating settings…','jetpack'),
-__('Updated settings.','jetpack'),
-__('Error updating settings. %(error)s','jetpack'),
-__('Updated settings. Refreshing page…','jetpack'),
-__('Site is verified','jetpack'),
-__('Updating privacy settings…','jetpack'),
-__('Updated privacy settings.','jetpack'),
-__('Error updating privacy settings. %(error)s','jetpack'),
-__('There are unsaved settings in this tab that will be lost if you leave it. Proceed?','jetpack'),
-__('{{a}}View your site\'s activity{{/a}} in a single feed.','jetpack'),
-__('Activity','jetpack'),
-__('Unavailable in Dev Mode.','jetpack'),
-__('Spam Protection','jetpack'),
-__('Akismet checks your comments and contact form submissions against our global database of spam.','jetpack'),
-__('Loading…','jetpack'),
-__('For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.','jetpack'),
-__('For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.','jetpack'),
-__('Invalid key','jetpack'),
-__('Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.','jetpack'),
-_x('Spam comments blocked.','Example: "412 Spam comments blocked"','jetpack'),
-__('Moderate comments','jetpack'),
-__('Backups','jetpack'),
-__('Jetpack Backups allow you to easily restore or download a backup from a specific moment.','jetpack'),
-__('{{a}}View backup details{{/a}}.','jetpack'),
-__('To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.','jetpack'),
-__('To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.','jetpack'),
-__('Your site is being backed up in real-time.','jetpack'),
-__('View backup history','jetpack'),
-__('Your site is in Development Mode, so it can not be connected to WordPress.com.','jetpack'),
-__('Your site is connected to WordPress.com.','jetpack'),
-__('You are the Jetpack owner.','jetpack'),
-__('The site is in Development Mode, so you can not connect to WordPress.com.','jetpack'),
-__('Connected as {{span}}%(username)s{{/span}}','jetpack'),
-__('Link your account to WordPress.com to get the most out of Jetpack.','jetpack'),
-_x('Site connection','Dashboard widget header','jetpack'),
-_x('Account connection','Dashboard widget header','jetpack'),
-__('Security','jetpack'),
-__('Manage security settings','jetpack'),
-__('Connections','jetpack'),
-__('Performance','jetpack'),
-__('Downtime monitoring','jetpack'),
-__('Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.','jetpack'),
-__('Jetpack is monitoring your site. If we think your site is down, you will receive an email.','jetpack'),
-__('{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.','jetpack'),
-__('Image Performance','jetpack'),
-__('Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.','jetpack'),
-__('Jetpack is improving and optimizing your image speed.','jetpack'),
-__('Unavailable in Dev Mode','jetpack'),
-__('{{a}}Activate{{/a}} to enhance the performance and speed of your images.','jetpack'),
-__('Plugin Updates','jetpack'),
-__('Jetpack’s Plugin Updates allows you to choose which plugins update automatically.','jetpack'),
-_n('%(number)s',
-'%(number)s','jetpack'),
-_n('Plugin needs updating.',
-'Plugins need updating.','jetpack'),
-__('{{a}}Turn on plugin autoupdates{{/a}}','jetpack'),
-__('All plugins are up-to-date. Awesome work!','jetpack'),
-__('Manage your plugins','jetpack'),
-__('Protects your site from traditional and distributed brute force login attacks.','jetpack'),
-__('Jetpack is actively blocking malicious login attempts. Data will display here soon!','jetpack'),
-__('Total malicious attacks blocked on your site.','jetpack'),
-__('{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.','jetpack'),
-__('Security Scanning','jetpack'),
-__('Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.','jetpack'),
-_n('Uh oh, %(number)s threat found.',
-'Uh oh, %(number)s threats found.','jetpack'),
-__('{{a}}View details at VaultPress.com{{/a}}','jetpack'),
-__('{{a}}Contact Support{{/a}}','jetpack'),
-__('No threats found, you\'re good to go!','jetpack'),
-__('For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.','jetpack'),
-__('For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.','jetpack'),
-__('We are making sure your site stays free of security threats. You will be notified if we find one.','jetpack'),
-__('View security scan details','jetpack'),
-__('Jetpack Search','jetpack'),
-__('Jetpack Search is a powerful replacement for the search capability built into WordPress.','jetpack'),
-__('Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.','jetpack'),
-__('Search','jetpack'),
-__('Jetpack Search is powering search on your site.','jetpack'),
-__('Add Search (Jetpack) Widget','jetpack'),
-__('{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.','jetpack'),
-__('Comments','jetpack'),
-__('Replaces the standard WordPress comment form with a new comment system that includes social media login options.','jetpack'),
-__('Comments headline','jetpack'),
-__('A few catchy words to motivate your readers to comment.','jetpack'),
-__('Color scheme','jetpack'),
-__('Learn more','jetpack'),
-__('Privacy Information','jetpack'),
-__('Enable Markdown use for comments.','jetpack'),
-__('Open your site to comments and invite subscribers to get alerts about your latest work.','jetpack'),
-__('View your Email Followers','jetpack'),
-__('Create a Jetpack account to view your email followers','jetpack'),
-__('Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.','jetpack'),
-__('Show a "follow blog" option in the comment form','jetpack'),
-__('Show a "follow comments" option in the comment form','jetpack'),
-__('Daily backup of all your site data with unlimited space and one-click restores','jetpack'),
-__('Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support','jetpack'),
-__('Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support','jetpack'),
-__('A secure site, locked and protected by Jetpack','jetpack'),
-__('Site Backups','jetpack'),
-__('Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.','jetpack'),
-__('View your security activity','jetpack'),
-__('Site Security','jetpack'),
-__(' (powered by VaultPress).','jetpack'),
-__('View your security dashboard','jetpack'),
-__('View settings','jetpack'),
-__('A fast and performant website','jetpack'),
-__('Built-in Performance','jetpack'),
-__('Load pages faster by serving your images from our global network of servers.','jetpack'),
-__('Make your site faster','jetpack'),
-__('A folder holding real comments','jetpack'),
-__('Spam Filtering','jetpack'),
-__('Spam is automatically blocked from your comments.','jetpack'),
-__('View your spam stats','jetpack'),
-__('A cloud with multiple types of content floating around it','jetpack'),
-__('Video Hosting','jetpack'),
-__('High-speed, high-definition video hosting with no third-party ads.','jetpack'),
-__('Upload videos','jetpack'),
-__('Activate video hosting','jetpack'),
-__('Interface showing a chronological list of changes and updates in a site','jetpack'),
-__('View a chronological list of all the changes and updates to your site in an organized, readable way.','jetpack'),
-__('View your site activity','jetpack'),
-__('A chart showing an healthy increase in earnings','jetpack'),
-__('Monetize your site with ads','jetpack'),
-__('WordAds lets you earn money by displaying promotional content. Start earning today.','jetpack'),
-__('View your earnings','jetpack'),
-__('Start earning','jetpack'),
-__('A hand holding a loupe','jetpack'),
-__('Replace the default WordPress search with better results and filtering powered by Elasticsearch.','jetpack'),
-__('Customize Search Widget','jetpack'),
-__('Activate Jetpack Search','jetpack'),
-__('Site stats showing an evolution in traffic and engagement','jetpack'),
-__('SEO Tools','jetpack'),
-__('Advanced SEO tools to help your site get found when people search for relevant content.','jetpack'),
-__('Configure site SEO','jetpack'),
-__('Activate SEO tools','jetpack'),
-__('Google Analytics','jetpack'),
-__('Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.','jetpack'),
-__('Configure Google Analytics','jetpack'),
-__('Activate Google Analytics','jetpack'),
-__('Try a premium theme','jetpack'),
-__('Access hundreds of beautifully designed premium themes at no extra cost.','jetpack'),
-__('Browse premium themes','jetpack'),
-__('Marketing Automation','jetpack'),
-__('Schedule unlimited tweets, Facebook posts, and other social posts in advance.','jetpack'),
-__('Schedule posts','jetpack'),
-__('Activate Publicize','jetpack'),
-__('Always-on Security','jetpack'),
-__('Prevent login attacks, and get instant notifications when there’s an issue with your site.','jetpack'),
-__('Set up your site security','jetpack'),
-__('A wide variety of themes and tools to customize a site','jetpack'),
-__('Design the perfect website','jetpack'),
-__('Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.','jetpack'),
-__('Explore free themes','jetpack'),
-__('Increase traffic to your site','jetpack'),
-__('Reach a wider audience by automatically sharing your posts on social media.','jetpack'),
-__('Start publicizing now','jetpack'),
-__('Site Activity','jetpack'),
-__('Chat bubbles representing getting in touch with support','jetpack'),
-__('Support documentation','jetpack'),
-__('Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.','jetpack'),
-__('Jetpack offers so much more','jetpack'),
-__('Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.','jetpack'),
-__('Explore Jetpack plans','jetpack'),
-__('Jetpack Free Plan','jetpack'),
-__('Welcome to Jetpack Free','jetpack'),
-__('Get started with hassle-free design, stats, and performance tools.','jetpack'),
-__('Jetpack Personal Plan','jetpack'),
-__('Welcome to Jetpack Personal','jetpack'),
-__('Daily backups, spam filtering, and priority support.','jetpack'),
-__('Spam filtering and priority support.','jetpack'),
-__('Jetpack Premium Plan','jetpack'),
-__('Welcome to Jetpack Premium','jetpack'),
-__('Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.','jetpack'),
-__('Jetpack Business Plan','jetpack'),
-__('Welcome to Jetpack Professional','jetpack'),
-__('Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.','jetpack'),
-__('Your site is on Development Mode','jetpack'),
-__('Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.','jetpack'),
-_n('Please correct the issue below and try again.',
-'Please correct the issues listed below and try again.','jetpack'),
-__('Load pages faster, optimize images, and speed up your visitors’ experience.','jetpack'),
-__('Video','jetpack'),
-__('Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!','jetpack'),
-__('Enable high-speed, ad-free video player','jetpack'),
-__('Media','jetpack'),
-__('Jetpack Search supports many customizations.','jetpack'),
-__('The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.','jetpack'),
-__('Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.','jetpack'),
-__('Replace WordPress built-in search with Jetpack Search, an advanced search experience','jetpack'),
-__('Add the Jetpack Search widget to your sidebar to configure sorting and filters.','jetpack'),
-__('Add Jetpack Search Widget','jetpack'),
-__('Disabling site accelerator…','jetpack'),
-__('Site accelerator is no longer speeding up your site!','jetpack'),
-__('Error disabling site accelerator. %(error)s','jetpack'),
-__('Enabling Site accelerator…','jetpack'),
-__('Site accelerator is now speeding up your site!','jetpack'),
-__('Error enabling Site accelerator. %(error)s','jetpack'),
-__('Performance & speed','jetpack'),
-__('Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.','jetpack'),
-__('Enable site accelerator','jetpack'),
-__('Speed up image load times','jetpack'),
-__('Speed up static file load times','jetpack'),
-__('Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.','jetpack'),
-__('Enable Lazy Loading for images','jetpack'),
-__('You’re currently on Jetpack %(plan)s.','jetpack'),
-__('Your Plan','jetpack'),
-__('Manage your plan','jetpack'),
-__('View all Jetpack plans','jetpack'),
-_x('privacy','Search term.','jetpack'),
-_x('tracks','Search term.','jetpack'),
-_x('data','Search term.','jetpack'),
-_x('gdpr','Search term.','jetpack'),
-_x('tos','Search term.','jetpack'),
-_x('terms of service','Search term.','jetpack'),
-_x('Privacy Settings','Settings header','jetpack'),
-__('We are committed to your privacy and security. ','jetpack'),
-__('Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.','jetpack'),
-__('This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.','jetpack'),
-__('We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.','jetpack'),
-__('For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.','jetpack'),
-_x('Threats','A caption for a small button to fix security issues.','jetpack'),
-_x('Threats found!','Short warning message about new threats found.','jetpack'),
-_x('FIX','A caption for a small button to fix security issues.','jetpack'),
-_x('No scanning','Short warning message about site having no security scan.','jetpack'),
-_x('Upgrade','Caption for a button to purchase a paid feature.','jetpack'),
-_x('Upgrade','Caption for a button to purchase a pro plan.','jetpack'),
-_x('Secure','Short message informing user that the site is secure.','jetpack'),
-_x('Invalid key','Short warning message about an invalid key being used for Akismet.','jetpack'),
-__('Connected','jetpack'),
-__('ACTIVE','jetpack'),
-_x('Set up','Caption for a button to set up a feature.','jetpack'),
-__('Activate','jetpack'),
-__('Checking your spam protection…','jetpack'),
-__('Fetching key…','jetpack'),
-__('Your site needs an Antispam key.','jetpack'),
-__('There\'s a problem with your Antispam API key. {{a}}Learn more{{/a}}.','jetpack'),
-__('Your site is not protected from spam.','jetpack'),
-__('Your Antispam key is valid.','jetpack'),
-__('Your site is protected from spam.','jetpack'),
-__('Checking key…','jetpack'),
-_x('Spam filtering','Settings header','jetpack'),
-__('Removes spam from comments and contact forms.','jetpack'),
-__('Your API key','jetpack'),
-__('If you don\'t already have an API key, then {{a}}get your API key here{{/a}}, and you\'ll be guided through the process of getting one.','jetpack'),
-_x('Backups and security scanning','Settings header','jetpack'),
-__('Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.','jetpack'),
-__('Checking site status…','jetpack'),
-__('Your site is being backed up in real time and regularly scanned for security threats.','jetpack'),
-__('{{a}}View details{{/a}}','jetpack'),
-__('Your site is backed up and threat-free.','jetpack'),
-__('Your site is backed up.','jetpack'),
-__('You have paid for backups but they\'re not yet active.','jetpack'),
-__('Click "Set Up" to finish installation.','jetpack'),
-__('You have paid for backups and security scanning but they’re not yet active.','jetpack'),
-__('Configure your Security Scans','jetpack'),
-__('Keep your site safe with state-of-the-art security and receive notifications of technical problems.','jetpack'),
-_x('Plugin Autoupdates','Settings header','jetpack'),
-__('When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you\'d like to autoupdate so that your site stays secure.','jetpack'),
-_x('Downtime monitoring','Settings header','jetpack'),
-__('Jetpack will continuously monitor your site, and alert you the moment downtime is detected.','jetpack'),
-__('Monitor your site\'s downtime','jetpack'),
-__('Configure your notification settings','jetpack'),
-_x('Brute force attack protection','Settings header','jetpack'),
-__('Your current IP: %(ip)s','jetpack'),
-__('Add to whitelist','jetpack'),
-__('Whitelisted IP addresses','jetpack'),
-__('You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100','jetpack'),
-_x('WordPress.com log in','Settings header','jetpack'),
-__('Allows registered users to log in to your site with their WordPress.com accounts.','jetpack'),
-__('Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.','jetpack'),
-__('Match accounts using email addresses','jetpack'),
-__('Require accounts to use WordPress.com Two-Step Authentication','jetpack'),
-__('No search results found for %(term)s','jetpack'),
-__('Enter a search term to find settings or close search.','jetpack'),
-__('Share your content on social media and increase audience engagement.','jetpack'),
-_x('Like buttons','Settings header','jetpack'),
-__('Adds like buttons to your content so that visitors can show their appreciation or enjoyment.','jetpack'),
-__('When visitors enjoy your content, let them show it with a Like.','jetpack'),
-__('Add Like buttons to your posts and pages','jetpack'),
-__('Connect your social media accounts','jetpack'),
-__('Create a Jetpack account to use this feature','jetpack'),
-_x('Publicize connections','Settings header','jetpack'),
-__('Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.','jetpack'),
-__('Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.','jetpack'),
-__('Automatically share your posts to social networks','jetpack'),
-__('Configure your sharing buttons','jetpack'),
-_x('Sharing buttons','Settings header','jetpack'),
-__('Adds sharing buttons to your content so that visitors can share it on social media sites.','jetpack'),
-__('Add sharing buttons to your posts','jetpack'),
-_x('Ads','Ads header','jetpack'),
-__('Displays high-quality ads on your site that allow you to earn income.','jetpack'),
-__('Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.','jetpack'),
-__('By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.','jetpack'),
-__('Enable ads and display an ad below each post','jetpack'),
-__('Display ads below posts on','jetpack'),
-__('Front page','jetpack'),
-__('Posts','jetpack'),
-__('Pages','jetpack'),
-__('Archives','jetpack'),
-__('Additional ad placements','jetpack'),
-__('Top of each page','jetpack'),
-__('Second ad below post','jetpack'),
-__('You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}','jetpack'),
-__('Custom ads.txt entries','jetpack'),
-__('Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.','jetpack'),
-__('When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.','jetpack'),
-_x('Google Analytics','Settings header','jetpack'),
-__('Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.','jetpack'),
-__('Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.','jetpack'),
-__('Configure your Google Analytics settings','jetpack'),
-__('Maximize your site’s visibility in search engines and view traffic stats in real time.','jetpack'),
-__('These settings won\'t apply to related posts added using the block editor.','jetpack'),
-__('Show related content after posts','jetpack'),
-__('Highlight related content with a heading','jetpack'),
-__('Show a thumbnail image where available','jetpack'),
-_x('Preview','A header for a preview area in the configuration screen.','jetpack'),
-__('Related','jetpack'),
-__('Big iPhone/iPad Update Now Available','jetpack'),
-__('In "Mobile"','jetpack'),
-__('The WordPress for Android App Gets a Big Facelift','jetpack'),
-__('Upgrade Focus: VideoPress For Weddings','jetpack'),
-__('In "Upgrade"','jetpack'),
-__('Configure related posts in the Customizer','jetpack'),
-_x('Search engine optimization','Settings header','jetpack'),
-__('Allows you to optimize your site and its content for better results in search engines.','jetpack'),
-__('You can tweak these settings if you\'d like more advanced control. Read more about what you can do to {{a}}optimize your site\'s SEO{{/a}}.','jetpack'),
-__('Configure your SEO settings','jetpack'),
-__('Jetpack Stats Icon','jetpack'),
-__('{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}','jetpack'),
-__('Activate Site Stats','jetpack'),
-_x('Site stats','Settings header','jetpack'),
-__('Collecting valuable traffic stats and insights','jetpack'),
-__('Displays information on your site activity, including visitors and popular posts or pages.','jetpack'),
-__('Put a chart showing 48 hours of views in the admin bar','jetpack'),
-__('Hide the stats smiley face image','jetpack'),
-__('The image helps collect stats, but should work when hidden.','jetpack'),
-__('Count logged in page views from','jetpack'),
-__('Allow stats reports to be viewed by','jetpack'),
-__('Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.','jetpack'),
-__('Generate XML sitemaps','jetpack'),
-__('Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.','jetpack'),
-__('Search engines can\'t access your site at the moment. If you\'d like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch "Search Engine Visibility" on.','jetpack'),
-__('%(moduleName)s has been disabled by a site administrator.','jetpack'),
-__('Provides the necessary hidden tags needed to verify your WordPress site with various services.','jetpack'),
-__('Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.','jetpack'),
-__('Bing','jetpack'),
-__('Pinterest','jetpack'),
-__('Yandex','jetpack'),
-__('Checks your content for correct grammar and spelling, misused words, and style while you write.','jetpack'),
-__('Proofreading','jetpack'),
-__('Automatically proofread content when: ','jetpack'),
-__('A post or page is first published','jetpack'),
-__('A post or page is updated','jetpack'),
-__('Automatic Language Detection','jetpack'),
-__('The proofreader supports English, French, German, Portuguese and Spanish.','jetpack'),
-__('Use automatically detected language to proofread posts and pages','jetpack'),
-__('English Options','jetpack'),
-__('Enable proofreading for the following grammar and style rules: ','jetpack'),
-__('Bias Language','jetpack'),
-__('Clichés','jetpack'),
-__('Complex Phrases','jetpack'),
-__('Diacritical Marks','jetpack'),
-__('Double Negatives','jetpack'),
-__('Hidden Verbs','jetpack'),
-__('Jargon','jetpack'),
-__('Passive Voice','jetpack'),
-__('Phrases to Avoid','jetpack'),
-__('Redundant Phrases','jetpack'),
-__('Ignored Phrases','jetpack'),
-__('Add a phrase','jetpack'),
-__('Confirm each new phrase you add by pressing enter.','jetpack'),
-__('Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.','jetpack'),
-__('Allows you to compose content with links, lists, and other styles using the Markdown syntax.','jetpack'),
-_x('Composing','Settings header','jetpack'),
-__('This feature has been disabled by a site administrator.','jetpack'),
-__('Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.','jetpack'),
-__('Testimonials','jetpack'),
-__('Testimonials shortcode: [testimonials]','jetpack'),
-__('Add a testimonial','jetpack'),
-__('Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.','jetpack'),
-__('Portfolios','jetpack'),
-__('Portfolios shortcode: [portfolio]','jetpack'),
-__('Add a portfolio item','jetpack'),
-__('Compose content the way you want to and streamline your publishing experience.','jetpack'),
-__('Writing tools available to you will be shown here when an administrator enables them.','jetpack'),
-_x('WordPress.com toolbar','Settings header','jetpack'),
-__('The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.','jetpack'),
-__('Enable the WordPress.com toolbar','jetpack'),
-__('Allows you to publish new posts by sending an email to a special address.','jetpack'),
-__('Email Address','jetpack'),
-_x('Copy','verb','jetpack'),
-__('Copied!','jetpack'),
-__('Highlight and copy the following text to your clipboard:','jetpack'),
-__('Regenerate address','jetpack'),
-__('Create address','jetpack'),
-__('Theme enhancements','jetpack'),
-__('Loads the next posts automatically when the reader approaches the bottom of the page.','jetpack'),
-__('Load more posts using the default theme behavior','jetpack'),
-__('Load more posts in page with a button','jetpack'),
-__('Load more posts as the reader scrolls down','jetpack'),
-__('Theme support required.','jetpack'),
-__('Learn more about adding support for Infinite Scroll to your theme.','jetpack'),
-__('Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.','jetpack'),
-__('Use excerpts instead of full posts on front page and archive pages','jetpack'),
-__('Show featured images','jetpack'),
-__('Show an ad for the WordPress mobile apps in the footer of the mobile theme','jetpack'),
-__('Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.','jetpack'),
-__('Display images in a full-screen carousel gallery','jetpack'),
-__('Show photo Exif metadata in carousel (when available)','jetpack'),
-__('Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.','jetpack'),
-__('Carousel color scheme','jetpack'),
-__('Views today','jetpack'),
-__('Best overall day','jetpack'),
-_n('%(number)s View',
-'%(number)s Views','jetpack'),
-__('All-time views','jetpack'),
-__('All-time comments','jetpack'),
-__('{{button}}View detailed stats{{/button}}','jetpack'),
-__('{{button}}View more stats on WordPress.com {{/button}}','jetpack'),
-__('Connect your account to WordPress.com to view more stats','jetpack'),
-__('Week of %(date)s','jetpack'),
-__('Views: %(numberOfViews)s','jetpack'),
-__('Click to view detailed stats.','jetpack'),
-__('Jetpack Stats People','jetpack'),
-__('Hello there! Your stats have been activated.','jetpack'),
-__('Just give us a little time to collect data so we can display it for you here.','jetpack'),
-__('Okay, got it!','jetpack'),
-__('Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}','jetpack'),
-__('Days','jetpack'),
-__('Weeks','jetpack'),
-__('Months','jetpack'),
-__('Site Stats','jetpack'),
-__('Get WordPress Apps for every device','jetpack'),
-__('Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.','jetpack'),
-__('Download the free apps','jetpack'),
-__('I already use this app.','jetpack'),
-__('Unlink me from WordPress.com','jetpack'),
-__('Link to WordPress.com','jetpack'),
-__('Manage site connection','jetpack'),
-__('Set up Jetpack','jetpack'),
-__('By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.','jetpack'),
-_x('Updates needed','Short warning message','jetpack'),
-__('Active','jetpack'),
-_x('Paid','Short label appearing near a paid feature configuration block.','jetpack'),
-__('This will reset all Jetpack options, are you sure?','jetpack'),
-_x('Reset Options (dev only)','Navigation item.','jetpack'),
-__('Test your site’s compatibility with Jetpack.','jetpack'),
-_x('Debug','Navigation item. Noun. Links to a debugger tool for Jetpack.','jetpack'),
-_x('Dev Tools','Navigation item.','jetpack'),
-__('An Automattic Airline','jetpack'),
-__('Jetpack version','jetpack'),
-__('Jetpack version %(version)s','jetpack'),
-__('WordPress.com Terms of Service','jetpack'),
-_x('Terms','Shorthand for Terms of Service.','jetpack'),
-__('Automattic\'s Privacy Policy','jetpack'),
-_x('Privacy','Shorthand for Privacy Policy.','jetpack'),
-__('Saving…','jetpack'),
-__('Save Settings','jetpack'),
-__('Stars','jetpack'),
-__('Jupiter','jetpack'),
-__('Daily, automated backups (unlimited storage)','jetpack'),
-__('Priority support','jetpack'),
-__('Spam filtering','jetpack'),
-__('Daily, automated malware scanning','jetpack'),
-__('Unlimited, high-speed video hosting','jetpack'),
-__('Real-time, automated backups (unlimited storage)','jetpack'),
-__('Daily, automated malware scanning with automated resolution','jetpack'),
-__('SEO preview tools','jetpack'),
-__('Site stats, related content, and sharing tools','jetpack'),
-__('Brute force attack protection and downtime monitoring','jetpack'),
-__('Unlimited, high-speed image hosting','jetpack'),
-__('Disconnect Jetpack','jetpack'),
-__('By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:','jetpack'),
-_x('Stay connected','A caption for a button to cancel disconnection.','jetpack'),
-_x('Disconnect','A caption for a button to disconnect.','jetpack'),
-__('Read more about Jetpack benefits','jetpack'),
-__('You have successfully disconnected Jetpack','jetpack'),
-__('Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.','jetpack'),
-__('What would you like to see on your Jetpack Dashboard?','jetpack'),
-__('Let us know!','jetpack'),
-__('You are currently running a development version of Jetpack.','jetpack'),
-__('Submit Beta feedback','jetpack'),
-__('You are running Jetpack on a staging server.','jetpack'),
-__('More Info','jetpack'),
-__('{{li}}The jetpack_development_mode filter is active{{/li}}','jetpack'),
-__('{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}','jetpack'),
-__('{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}','jetpack'),
-__('Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}','jetpack'),
-__('Learn More','jetpack'),
-__('Jetpack is powering your site, but to access all of its features you’ll need to create an account.','jetpack'),
-__('Create account','jetpack'),
-__('This site is not connected to WordPress.com. Please ask the site administrator to connect.','jetpack'),
-__('Cheatin\' uh?','jetpack'),
-__('{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}','jetpack'),
-__('You need to stay logged in to your WordPress blog while you authorize Jetpack.','jetpack'),
-__('We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.','jetpack'),
-__('There was an issue connecting your Jetpack. Please click "Connect to WordPress.com" again.','jetpack'),
-__('Your website needs to be publicly accessible to use Jetpack: %(error_key)s','jetpack'),
-__('This site can\'t be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.','jetpack'),
-__('{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).','jetpack'),
-__('WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.','jetpack'),
-__('Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.','jetpack'),
-__('{{s}}Your Jetpack has a glitch.{{/s}} We\'re sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s','jetpack'),
-__('Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!','jetpack'),
-__('Your Jetpack is already connected.','jetpack'),
-__('You\'re fueled up and ready to go, Jetpack is now active.','jetpack'),
-__('You\'re fueled up and ready to go.','jetpack'),
-__('Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.','jetpack'),
-__('Activate recommended features','jetpack'),
-__('{{a}}Skip, and explore features individually{{/a}}.','jetpack'),
-__('Person with laptop','jetpack'),
-__('Your Jetpack site is ready to go!','jetpack'),
-__('We’re now collecting stats and securing your site. Welcome aboard.','jetpack'),
-__('Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.','jetpack'),
-__('Dashboard','jetpack'),
-__('Settings','jetpack'),
-__('%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.','jetpack'),
-__('Updating Post by Email address…','jetpack'),
-__('Regenerated Post by Email address.','jetpack'),
-__('Error regenerating Post by Email address. %(error)s','jetpack'),
-__('The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.','jetpack'),
-__('To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!','jetpack'),
-__('Subscriber','jetpack'),
-_x('Related','A heading for a block of related posts.','jetpack'),
-__('{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}','jetpack'),
-_x('Preview','Noun, a header for a preview block in a configuration screen.','jetpack'),
-__('WordPress.com Likes are:','jetpack'),
-__('{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}','jetpack'),
-__('{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}','jetpack'),
-__('By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!','jetpack'),
-__('Display an ad unit at the top of your site.','jetpack'),
-__('This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.','jetpack'),
-__('This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.','jetpack'),
-__('This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.','jetpack'),
-_x('At a Glance','Navigation item.','jetpack'),
-__('Search for a Jetpack feature.','jetpack'),
-_x('Upgrade','A caption for a button to upgrade an existing paid feature to a higher tier.','jetpack'),
-__('Host fast, high-quality, ad-free video.','jetpack'),
-__('Generate income with high-quality ads.','jetpack'),
-__('Real-time site backups and automatic threat resolution.','jetpack'),
-__('Protect against data loss, malware, and malicious attacks.','jetpack'),
-__('Integrate easily with Google Analytics.','jetpack'),
-__('Help your content get found and shared with SEO tools.','jetpack'),
-__('Add faster, more advanced searching to your site with Jetpack Professional.','jetpack'),
-__('Protect your site from spam.','jetpack'),
-_x('Saving…','Button caption','jetpack'),
-_x('Save settings','Button caption','jetpack'),
-__('We\'re here to help','jetpack'),
-__('Jetpack comes with free, basic support for all users.','jetpack'),
-__('Your paid plan gives you access to prioritized Jetpack support.','jetpack'),
-__('Ask a question','jetpack'),
-__('Search our support site','jetpack'),
-__('Get a faster resolution to your support questions.','jetpack'),
-__('Upgrade','jetpack'),
-__('Privacy information','jetpack'),
-__(' Premium Themes','jetpack'),
-__('Introducing Premium Themes','jetpack'),
-__('{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It\'s also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}','jetpack'),
-__('{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It\'s also about total peace of mind knowing that you\'ll have priority support from our global team of experts should the need arise.{{/p}}','jetpack'),
-__('Explore Professional','jetpack'),
-__('Compare All Plans','jetpack'),
-__('The features you rely on, adapted for the new WordPress editor.','jetpack'),
-__('A new editor? Yes! {{a}}Learn more{{/a}}.','jetpack'),
-__('Build your Jetpack site with blocks','jetpack'),
-__('Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.','jetpack'),
-__('Jetpack is ready for the new WordPress editor','jetpack'),
-__('Take me to the new editor','jetpack'),
-__('New in Jetpack!','jetpack'),
-__('Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.','jetpack'),
-__('Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.','jetpack'),
-__('Themes','jetpack'),
-__('With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.','jetpack'),
-__('Got it','jetpack'),
-__('Welcome personal','jetpack'),
-__('Explore your Jetpack Personal plan!','jetpack'),
-__('Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.','jetpack'),
-__('With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.','jetpack'),
-__('Sharing','jetpack'),
-__('Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.','jetpack'),
-__('Start exploring Jetpack Premium now to see all the benefits of your new plan.','jetpack'),
-__('Welcome Premium','jetpack'),
-__('Explore your Jetpack Premium plan!','jetpack'),
-__('Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.','jetpack'),
-__('With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.','jetpack'),
-__('Give your visitor\'s a great search experience by letting them filter and sort fast, relevant search results.','jetpack'),
-__('Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.','jetpack'),
-__('Start exploring Jetpack Professional now to see all the benefits of your new plan.','jetpack'),
-__('Install premium themes','jetpack'),
-__('Add the Search (Jetpack) widget to your sidebar','jetpack'),
-__('Review SEO features','jetpack'),
-__('Welcome Professional','jetpack'),
-__('Explore your Jetpack Professional plan!','jetpack'),
-__('VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ','jetpack'),
-__('Verifying...','jetpack'),
-__('Site failed to verify: %(error)s','jetpack'),
-__('Google','jetpack'),
-__('Save','jetpack'),
-__('Cancel','jetpack'),
-__('Your site is verified with Google','jetpack'),
-__('Edit','jetpack'),
-__('Monitor your site\'s traffic and performance from the {{a}}Google Search Console{{/a}}.','jetpack'),
-__('Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.','jetpack'),
-__('Verify with Google','jetpack'),
-__('or','jetpack'),
-__('Manually Verify ','jetpack'),
-
-);
diff --git a/plugins/jetpack/_inc/jquery.jetpack-resize.js b/plugins/jetpack/_inc/jquery.jetpack-resize.js
deleted file mode 100644
index 14d60b24..00000000
--- a/plugins/jetpack/_inc/jquery.jetpack-resize.js
+++ /dev/null
@@ -1,285 +0,0 @@
-/* global Jetpack, JSON */
-/**
- * Resizeable Iframes.
- *
- * Start listening to resize postMessage events for selected iframes:
- * $( selector ).Jetpack( 'resizeable' );
- * - OR -
- * Jetpack.resizeable( 'on', context );
- *
- * Resize selected iframes:
- * $( selector ).Jetpack( 'resizeable', 'resize', { width: 100, height: 200 } );
- * - OR -
- * Jetpack.resizeable( 'resize', { width: 100, height: 200 }, context );
- *
- * Stop listening to resize postMessage events for selected iframes:
- * $( selector ).Jetpack( 'resizeable', 'off' );
- * - OR -
- * Jetpack.resizeable( 'off', context );
- *
- * Stop listening to all resize postMessage events:
- * Jetpack.resizeable( 'off' );
- */
-(function($) {
- var listening = false, // Are we listening for resize postMessage events
- sourceOrigins = [], // What origins are allowed to send resize postMessage events
- $sources = false, // What iframe elements are we tracking resize postMessage events from
-
- URLtoOrigin, // Utility to convert URLs into origins
- setupListener, // Binds global resize postMessage event handler
- destroyListener, // Unbinds global resize postMessage event handler
-
- methods; // Jetpack.resizeable methods
-
- // Setup the Jetpack global
- if ( 'undefined' === typeof window.Jetpack ) {
- window.Jetpack = {
- /**
- * Handles the two different calling methods:
- * $( selector ).Jetpack( 'namespace', 'method', context ) // here, context is optional and is used to filter the collection
- * - vs. -
- * Jetpack.namespace( 'method', context ) // here context defines the collection
- *
- * @internal
- *
- * Call as: Jetpack.getTarget.call( this, context )
- *
- * @param string context: jQuery selector
- * @return jQuery|undefined object on which to perform operations or undefined when context cannot be determined
- */
- getTarget: function( context ) {
- if ( this instanceof jQuery ) {
- return context ? this.filter( context ) : this;
- }
-
- return context ? $( context ) : context;
- }
- };
- }
-
- // Setup the Jetpack jQuery method
- if ( 'undefined' === typeof $.fn.Jetpack ) {
- /**
- * Dispatches calls to the correct namespace
- *
- * @param string namespace
- * @param ...
- * @return mixed|jQuery (chainable)
- */
- $.fn.Jetpack = function( namespace ) {
- if ( 'function' === typeof Jetpack[namespace] ) {
- // Send the call to the correct Jetpack.namespace
- return Jetpack[namespace].apply( this, Array.prototype.slice.call( arguments, 1 ) );
- } else {
- $.error( 'Namespace "' + namespace + '" does not exist on jQuery.Jetpack' );
- }
- };
- }
-
- // Define Jetpack.resizeable() namespace to just always bail if no postMessage
- if ( 'function' !== typeof window.postMessage ) {
- $.extend( window.Jetpack, {
- /**
- * Defines the Jetpack.resizeable() namespace.
- * See below for non-trivial definition for browsers with postMessage.
- */
- resizeable: function() {
- $.error( 'Browser does not support window.postMessage' );
- }
- } );
-
- return;
- }
-
- /**
- * Utility to convert URLs into origins
- *
- * http://example.com:port/path?query#fragment -> http://example.com:port
- *
- * @param string URL
- * @return string origin
- */
- URLtoOrigin = function( URL ) {
- if ( ! URL.match( /^https?:\/\// ) ) {
- URL = document.location.href;
- }
- return URL.split( '/' ).slice( 0, 3 ).join( '/' );
- };
-
- /**
- * Binds global resize postMessage event handler
- */
- setupListener = function() {
- listening = true;
-
- $( window ).on( 'message.JetpackResizeableIframe', function( e ) {
- var event = e.originalEvent,
- data;
-
- // Ensure origin is allowed
- if ( -1 === $.inArray( event.origin, sourceOrigins ) ) {
- return;
- }
-
- // Some browsers send structured data, some send JSON strings
- if ( 'object' === typeof event.data ) {
- data = event.data.data;
- } else {
- try {
- data = JSON.parse( event.data );
- } catch ( err ) {
- data = false;
- }
- }
-
- if ( !data.data ) {
- return;
- }
-
- // Un-nest
- data = data.data;
-
- // Is it a resize event?
- if ( 'undefined' === typeof data.action || 'resize' !== data.action ) {
- return;
- }
-
- // Find the correct iframe and resize it
- $sources.filter( function() {
- if ( 'undefined' !== typeof data.name ) {
- return this.name === data.name;
- } else {
- return event.source === this.contentWindow;
- }
- } ).first().Jetpack( 'resizeable', 'resize', data );
- } );
- };
-
- /**
- * Unbinds global resize postMessage event handler
- */
- destroyListener = function() {
- listening = false;
- $( window ).off( 'message.JetpackResizeableIframe' );
-
- sourceOrigins = [];
- $( '.jetpack-resizeable' ).removeClass( 'jetpack-resizeable' );
- $sources = false;
- };
-
- // Methods for Jetpack.resizeable() namespace
- methods = {
- /**
- * Start listening for resize postMessage events on the given iframes
- *
- * Call statically as: Jetpack.resizeable( 'on', context )
- * Call as: $( selector ).Jetpack( 'resizeable', 'on', context ) // context optional: used to filter the collectino
- *
- * @param string context jQuery selector.
- * @return jQuery (chainable)
- */
- on: function( context ) {
- var target = Jetpack.getTarget.call( this, context );
-
- if ( ! listening ) {
- setupListener();
- }
-
- target.each( function() {
- sourceOrigins.push( URLtoOrigin( $( this ).attr( 'src' ) ) );
- } ).addClass( 'jetpack-resizeable' );
-
- $sources = $( '.jetpack-resizeable' );
-
- return target;
- },
-
- /**
- * Stop listening for resize postMessage events on the given iframes
- *
- * Call statically as: Jetpack.resizeable( 'off', context )
- * Call as: $( selector ).Jetpack( 'resizeable', 'off', context ) // context optional: used to filter the collectino
- *
- * @param string context jQuery selector
- * @return jQuery (chainable)
- */
- off: function( context ) {
- var target = Jetpack.getTarget.call( this, context );
-
- if ( 'undefined' === typeof target ) {
- destroyListener();
-
- return target;
- }
-
- target.each( function() {
- var origin = URLtoOrigin( $( this ).attr( 'src' ) ),
- pos = $.inArray( origin, sourceOrigins );
-
- if ( -1 !== pos ) {
- sourceOrigins.splice( pos, 1 );
- }
- } ).removeClass( 'jetpack-resizeable' );
-
- $sources = $( '.jetpack-resizeable' );
-
- return target;
- },
-
- /**
- * Resize the given iframes
- *
- * Call statically as: Jetpack.resizeable( 'resize', dimensions, context )
- * Call as: $( selector ).Jetpack( 'resizeable', 'resize', dimensions, context ) // context optional: used to filter the collectino
- *
- * @param object dimensions in pixels: { width: (int), height: (int) }
- * @param string context jQuery selector
- * @return jQuery (chainable)
- */
- resize: function( dimensions, context ) {
- var target = Jetpack.getTarget.call( this, context );
-
- $.each( [ 'width', 'height' ], function( i, variable ) {
- var value = 0,
- container;
- if ( 'undefined' !== typeof dimensions[variable] ) {
- value = parseInt( dimensions[variable], 10 );
- }
-
- if ( 0 !== value ) {
- target[variable]( value );
- container = target.parent();
- if ( container.hasClass( 'slim-likes-widget' ) ) {
- container[variable]( value );
- }
- }
- } );
-
- return target;
- }
- };
-
- // Define Jetpack.resizeable() namespace
- $.extend( window.Jetpack, {
- /**
- * Defines the Jetpack.resizeable() namespace.
- * See above for trivial definition for browsers with no postMessage.
- *
- * @param string method
- * @param ...
- * @return mixed|jQuery (chainable)
- */
- resizeable: function( method ) {
- if ( methods[method] ) {
- // Send the call to the correct Jetpack.resizeable() method
- return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ) );
- } else if ( ! method ) {
- // By default, send to Jetpack.resizeable( 'on' ), which isn't useful in that form but is when called as
- // jQuery( selector ).Jetpack( 'resizeable' )
- return methods.on.apply( this );
- } else {
- $.error( 'Method ' + method + ' does not exist on Jetpack.resizeable' );
- }
- }
- } );
-})(jQuery);
diff --git a/plugins/jetpack/_inc/jquery.spin.js b/plugins/jetpack/_inc/jquery.spin.js
deleted file mode 100644
index 1e901ca6..00000000
--- a/plugins/jetpack/_inc/jquery.spin.js
+++ /dev/null
@@ -1,104 +0,0 @@
-/**
- * Copyright (c) 2011-2013 Felix Gnass
- * Licensed under the MIT license
- */
-
-/*
-
-Basic Usage:
-============
-
-$('#el').spin(); // Creates a default Spinner using the text color of #el.
-$('#el').spin({ ... }); // Creates a Spinner using the provided options.
-
-$('#el').spin(false); // Stops and removes the spinner.
-
-Using Presets:
-==============
-
-$('#el').spin('small'); // Creates a 'small' Spinner using the text color of #el.
-$('#el').spin('large', '#fff'); // Creates a 'large' white Spinner.
-
-Adding a custom preset:
-=======================
-
-$.fn.spin.presets.flower = {
- lines: 9
- length: 10
- width: 20
- radius: 0
-}
-
-$('#el').spin('flower', 'red');
-
-*/
-
-(function(factory) {
-
- if (typeof exports == 'object') {
- // CommonJS
- factory(require('jquery'), require('spin'))
- }
- else if (typeof define == 'function' && define.amd) {
- // AMD, register as anonymous module
- define(['jquery', 'spin'], factory)
- }
- else {
- // Browser globals
- if (!window.Spinner) throw new Error('Spin.js not present')
- factory(window.jQuery, window.Spinner)
- }
-
-}(function($, Spinner) {
-
- $.fn.spin = function(opts, color) {
-
- return this.each(function() {
- var $this = $(this),
- data = $this.data();
-
- if (data.spinner) {
- data.spinner.stop();
- delete data.spinner;
- }
- if (opts !== false) {
- opts = $.extend(
- { color: color || $this.css('color') },
- $.fn.spin.presets[opts] || opts
- )
- // Begin WordPress Additions
- // To use opts.right, you need to have specified a length, width, and radius.
- if ( typeof opts.right !== 'undefined' && typeof opts.length !== 'undefined'
- && typeof opts.width !== 'undefined' && typeof opts.radius !== 'undefined' ) {
- var pad = $this.css( 'padding-left' );
- pad = ( typeof pad === 'undefined' ) ? 0 : parseInt( pad, 10 );
- opts.left = $this.outerWidth() - ( 2 * ( opts.length + opts.width + opts.radius ) ) - pad - opts.right;
- delete opts.right;
- }
- // End WordPress Additions
- data.spinner = new Spinner(opts).spin(this)
- }
- })
- }
-
- $.fn.spin.presets = {
- tiny: { lines: 8, length: 2, width: 2, radius: 3 },
- small: { lines: 8, length: 4, width: 3, radius: 5 },
- large: { lines: 10, length: 8, width: 4, radius: 8 }
- }
-
-}));
-
-// Jetpack Presets Overrides:
-(function($){
- $.fn.spin.presets.wp = { trail: 60, speed: 1.3 };
- $.fn.spin.presets.small = $.extend( { lines: 8, length: 2, width: 2, radius: 3 }, $.fn.spin.presets.wp );
- $.fn.spin.presets.medium = $.extend( { lines: 8, length: 4, width: 3, radius: 5 }, $.fn.spin.presets.wp );
- $.fn.spin.presets.large = $.extend( { lines: 10, length: 6, width: 4, radius: 7 }, $.fn.spin.presets.wp );
- $.fn.spin.presets['small-left'] = $.extend( { left: 5 }, $.fn.spin.presets.small );
- $.fn.spin.presets['small-right'] = $.extend( { right: 5 }, $.fn.spin.presets.small );
- $.fn.spin.presets['medium-left'] = $.extend( { left: 5 }, $.fn.spin.presets.medium );
- $.fn.spin.presets['medium-right'] = $.extend( { right: 5 }, $.fn.spin.presets.medium );
- $.fn.spin.presets['large-left'] = $.extend( { left: 5 }, $.fn.spin.presets.large );
- $.fn.spin.presets['large-right'] = $.extend( { right: 5 }, $.fn.spin.presets.large );
-})(jQuery);
diff --git a/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-admin-page.php b/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-admin-page.php
deleted file mode 100644
index 0c50f380..00000000
--- a/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-admin-page.php
+++ /dev/null
@@ -1,352 +0,0 @@
-<?php
-
-// Shared logic between Jetpack admin pages
-abstract class Jetpack_Admin_Page {
- // Add page specific actions given the page hook
- abstract function add_page_actions( $hook );
-
- // Create a menu item for the page and returns the hook
- abstract function get_page_hook();
-
- // Enqueue and localize page specific scripts
- abstract function page_admin_scripts();
-
- // Render page specific HTML
- abstract function page_render();
-
- /**
- * Should we block the page rendering because the site is in IDC?
- * @var bool
- */
- static $block_page_rendering_for_idc;
-
- /**
- * Function called after admin_styles to load any additional needed styles.
- *
- * @since 4.3.0
- */
- function additional_styles() {}
-
- function __construct() {
- $this->jetpack = Jetpack::init();
- self::$block_page_rendering_for_idc = (
- Jetpack::validate_sync_error_idc_option() && ! Jetpack_Options::get_option( 'safe_mode_confirmed' )
- );
- }
-
- function add_actions() {
- global $pagenow;
-
- // If user is not an admin and site is in Dev Mode, don't do anything
- if ( ! current_user_can( 'manage_options' ) && Jetpack::is_development_mode() ) {
- return;
- }
-
- // Don't add in the modules page unless modules are available!
- if ( $this->dont_show_if_not_active && ! Jetpack::is_active() && ! Jetpack::is_development_mode() ) {
- return;
- }
-
- // Initialize menu item for the page in the admin
- $hook = $this->get_page_hook();
-
- // Attach hooks common to all Jetpack admin pages based on the created
- // hook
- add_action( "load-$hook", array( $this, 'admin_help' ) );
- add_action( "load-$hook", array( $this, 'admin_page_load' ) );
- add_action( "admin_head-$hook", array( $this, 'admin_head' ) );
-
- add_action( "admin_print_styles-$hook", array( $this, 'admin_styles' ) );
- add_action( "admin_print_scripts-$hook", array( $this, 'admin_scripts' ) );
-
- if ( ! self::$block_page_rendering_for_idc ) {
- add_action( "admin_print_styles-$hook", array( $this, 'additional_styles' ) );
- }
- // If someone just activated Jetpack, let's show them a fullscreen connection banner.
- if (
- ( 'admin.php' === $pagenow && isset( $_GET['page'] ) && 'jetpack' === $_GET['page'] )
- && ! Jetpack::is_active()
- && current_user_can( 'jetpack_connect' )
- && ! Jetpack::is_development_mode()
- ) {
- add_action( 'admin_enqueue_scripts', array( 'Jetpack_Connection_Banner', 'enqueue_banner_scripts' ) );
- add_action( 'admin_print_styles', array( Jetpack::init(), 'admin_banner_styles' ) );
- add_action( 'admin_notices', array( 'Jetpack_Connection_Banner', 'render_connect_prompt_full_screen' ) );
- delete_transient( 'activated_jetpack' );
- }
-
- // Check if the site plan changed and deactivate modules accordingly.
- add_action( 'current_screen', array( $this, 'check_plan_deactivate_modules' ) );
-
- // Attach page specific actions in addition to the above
- $this->add_page_actions( $hook );
- }
-
- function admin_head() {
- if ( isset( $_GET['configure'] ) && Jetpack::is_module( $_GET['configure'] ) && current_user_can( 'manage_options' ) ) {
- /**
- * Fires in the <head> of a particular Jetpack configuration page.
- *
- * The dynamic portion of the hook name, `$_GET['configure']`,
- * refers to the slug of module, such as 'stats', 'sso', etc.
- * A complete hook for the latter would be
- * 'jetpack_module_configuration_head_sso'.
- *
- * @since 3.0.0
- */
- do_action( 'jetpack_module_configuration_head_' . $_GET['configure'] );
- }
- }
-
- // Render the page with a common top and bottom part, and page specific content
- function render() {
- // We're in an IDC: we need a decision made before we show the UI again.
- if ( self::$block_page_rendering_for_idc ) {
- return;
- }
-
- // Check if we are looking at the main dashboard
- if (
- isset( $_GET['page'] ) &&
- 'jetpack' === $_GET['page'] &&
- empty( $_GET['configure'] )
- )
- {
- $this->page_render();
- return;
- }
- Jetpack_Admin_Page::wrap_ui( array( $this, 'page_render' ) );
- }
-
- function admin_help() {
- $this->jetpack->admin_help();
- }
-
- function admin_page_load() {
- // This is big. For the moment, just call the existing one.
- $this->jetpack->admin_page_load();
- }
-
- // Add page specific scripts and jetpack stats for all menu pages
- function admin_scripts() {
- $this->page_admin_scripts(); // Delegate to inheriting class
- add_action( 'admin_footer', array( $this->jetpack, 'do_stats' ) );
- }
-
- // Enqueue the Jetpack admin stylesheet
- function admin_styles() {
- $min = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
-
- wp_enqueue_style( 'jetpack-admin', plugins_url( "css/jetpack-admin{$min}.css", JETPACK__PLUGIN_FILE ), array( 'genericons' ), JETPACK__VERSION . '-20121016' );
- wp_style_add_data( 'jetpack-admin', 'rtl', 'replace' );
- wp_style_add_data( 'jetpack-admin', 'suffix', $min );
- }
-
- /**
- * Checks if REST API is enabled.
- *
- * @since 4.4.2
- *
- * @return bool
- */
- function is_rest_api_enabled() {
- return
- /** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */
- apply_filters( 'rest_enabled', true ) &&
- /** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */
- apply_filters( 'rest_jsonp_enabled', true ) &&
- /** This filter is documented in wp-includes/rest-api/class-wp-rest-server.php */
- apply_filters( 'rest_authentication_errors', true );
- }
-
- /**
- * Checks the site plan and deactivates modules that were active but are no longer included in the plan.
- *
- * @since 4.4.0
- *
- * @param $page
- *
- * @return array
- */
- function check_plan_deactivate_modules( $page ) {
- if (
- Jetpack::is_development_mode()
- || ! in_array(
- $page->base,
- array(
- 'toplevel_page_jetpack',
- 'admin_page_jetpack_modules',
- 'jetpack_page_vaultpress',
- 'jetpack_page_stats',
- 'jetpack_page_akismet-key-config'
- )
- )
- ) {
- return false;
- }
-
- $current = Jetpack_Plan::get();
-
- $to_deactivate = array();
- if ( isset( $current['product_slug'] ) ) {
- $active = Jetpack::get_active_modules();
- switch ( $current['product_slug'] ) {
- case 'jetpack_free':
- $to_deactivate = array( 'seo-tools', 'videopress', 'google-analytics', 'wordads', 'search' );
- break;
- case 'jetpack_personal':
- case 'jetpack_personal_monthly':
- $to_deactivate = array( 'seo-tools', 'videopress', 'google-analytics', 'wordads', 'search' );
- break;
- case 'jetpack_premium':
- case 'jetpack_premium_monthly':
- $to_deactivate = array( 'seo-tools', 'google-analytics', 'search' );
- break;
- }
- $to_deactivate = array_intersect( $active, $to_deactivate );
-
- $to_leave_enabled = array();
- foreach ( $to_deactivate as $feature ) {
- if ( Jetpack_Plan::supports( $feature ) ) {
- $to_leave_enabled []= $feature;
- }
- }
- $to_deactivate = array_diff( $to_deactivate, $to_leave_enabled );
-
- if ( ! empty( $to_deactivate ) ) {
- Jetpack::update_active_modules( array_filter( array_diff( $active, $to_deactivate ) ) );
- }
- }
- return array(
- 'current' => $current,
- 'deactivate' => $to_deactivate
- );
- }
-
- static function load_wrapper_styles( ) {
- $rtl = is_rtl() ? '.rtl' : '';
- wp_enqueue_style( 'dops-css', plugins_url( "_inc/build/admin.dops-style{$rtl}.css", JETPACK__PLUGIN_FILE ), array(), JETPACK__VERSION );
- wp_enqueue_style( 'components-css', plugins_url( "_inc/build/style.min{$rtl}.css", JETPACK__PLUGIN_FILE ), array(), JETPACK__VERSION );
- $custom_css = '
- #wpcontent {
- padding-left: 0 !important;
- }
- #wpbody-content {
- background-color: #f6f6f6;
- }
-
- #jp-plugin-container .wrap {
- margin: 0 auto;
- max-width:45rem;
- padding: 0 1.5rem;
- }
- #jp-plugin-container.is-wide .wrap {
- max-width: 1040px;
- }
- #jp-plugin-container .wrap .jetpack-wrap-container {
- margin-top: 1em;
- }
- .wp-admin #dolly {
- float: none;
- position: relative;
- right: 0;
- left: 0;
- top: 0;
- padding: .625rem;
- text-align: right;
- background: #fff;
- font-size: .75rem;
- font-style: italic;
- color: #87a6bc;
- border-bottom: 1px #e9eff3 solid;
- }
- ';
- wp_add_inline_style( 'dops-css', $custom_css );
- }
-
- static function wrap_ui( $callback, $args = array() ) {
- $defaults = array(
- 'is-wide' => false,
- );
- $args = wp_parse_args( $args, $defaults );
- $jetpack_admin_url = admin_url( 'admin.php?page=jetpack' );
-
- ?>
- <div id="jp-plugin-container" class="<?php if ( $args['is-wide'] ) { echo "is-wide"; } ?>">
-
- <div class="jp-masthead">
- <div class="jp-masthead__inside-container">
- <div class="jp-masthead__logo-container">
- <a class="jp-masthead__logo-link" href="<?php echo esc_url( $jetpack_admin_url ); ?>">
- <svg class="jetpack-logo__masthead" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" height="32" viewBox="0 0 118 32"><path fill="#00BE28" d="M16,0C7.2,0,0,7.2,0,16s7.2,16,16,16s16-7.2,16-16S24.8,0,16,0z M15,19H7l8-16V19z M17,29V13h8L17,29z"></path><path d="M41.3,26.6c-0.5-0.7-0.9-1.4-1.3-2.1c2.3-1.4,3-2.5,3-4.6V8h-3V6h6v13.4C46,22.8,45,24.8,41.3,26.6z"></path><path d="M65,18.4c0,1.1,0.8,1.3,1.4,1.3c0.5,0,2-0.2,2.6-0.4v2.1c-0.9,0.3-2.5,0.5-3.7,0.5c-1.5,0-3.2-0.5-3.2-3.1V12H60v-2h2.1V7.1 H65V10h4v2h-4V18.4z"></path><path d="M71,10h3v1.3c1.1-0.8,1.9-1.3,3.3-1.3c2.5,0,4.5,1.8,4.5,5.6s-2.2,6.3-5.8,6.3c-0.9,0-1.3-0.1-2-0.3V28h-3V10z M76.5,12.3 c-0.8,0-1.6,0.4-2.5,1.2v5.9c0.6,0.1,0.9,0.2,1.8,0.2c2,0,3.2-1.3,3.2-3.9C79,13.4,78.1,12.3,76.5,12.3z"></path><path d="M93,22h-3v-1.5c-0.9,0.7-1.9,1.5-3.5,1.5c-1.5,0-3.1-1.1-3.1-3.2c0-2.9,2.5-3.4,4.2-3.7l2.4-0.3v-0.3c0-1.5-0.5-2.3-2-2.3 c-0.7,0-2.3,0.5-3.7,1.1L84,11c1.2-0.4,3-1,4.4-1c2.7,0,4.6,1.4,4.6,4.7L93,22z M90,16.4l-2.2,0.4c-0.7,0.1-1.4,0.5-1.4,1.6 c0,0.9,0.5,1.4,1.3,1.4s1.5-0.5,2.3-1V16.4z"></path><path d="M104.5,21.3c-1.1,0.4-2.2,0.6-3.5,0.6c-4.2,0-5.9-2.4-5.9-5.9c0-3.7,2.3-6,6.1-6c1.4,0,2.3,0.2,3.2,0.5V13 c-0.8-0.3-2-0.6-3.2-0.6c-1.7,0-3.2,0.9-3.2,3.6c0,2.9,1.5,3.8,3.3,3.8c0.9,0,1.9-0.2,3.2-0.7V21.3z"></path><path d="M110,15.2c0.2-0.3,0.2-0.8,3.8-5.2h3.7l-4.6,5.7l5,6.3h-3.7l-4.2-5.8V22h-3V6h3V15.2z"></path><path d="M58.5,21.3c-1.5,0.5-2.7,0.6-4.2,0.6c-3.6,0-5.8-1.8-5.8-6c0-3.1,1.9-5.9,5.5-5.9s4.9,2.5,4.9,4.9c0,0.8,0,1.5-0.1,2h-7.3 c0.1,2.5,1.5,2.8,3.6,2.8c1.1,0,2.2-0.3,3.4-0.7C58.5,19,58.5,21.3,58.5,21.3z M56,15c0-1.4-0.5-2.9-2-2.9c-1.4,0-2.3,1.3-2.4,2.9 C51.6,15,56,15,56,15z"></path></svg>
- </a>
- </div>
- <div class="jp-masthead__nav">
- <?php if ( is_network_admin() ) {
- $current_screen = get_current_screen();
-
- $highlight_current_sites = ( 'toplevel_page_jetpack-network' === $current_screen->id ? 'is-primary' : '' );
- $highlight_current_settings = ( 'jetpack_page_jetpack-settings-network' === $current_screen->id ? 'is-primary' : '' );
- ?>
- <span class="dops-button-group">
- <?php
- if ( current_user_can( 'jetpack_network_sites_page' ) ) {
- ?><a href="<?php echo esc_url( network_admin_url( 'admin.php?page=jetpack' ) ); ?>" type="button" class="<?php echo esc_attr( $highlight_current_sites ); ?> dops-button is-compact" title="<?php esc_html_e( "Manage your network's Jetpack Sites.", 'jetpack' ); ?>"><?php echo esc_html_x( 'Sites', 'Navigation item', 'jetpack' ); ?></a><?php
- } if ( current_user_can( 'jetpack_network_settings_page' ) ) {
- ?><a href="<?php echo esc_url( network_admin_url( 'admin.php?page=jetpack-settings' ) ); ?>" type="button" class="<?php echo esc_attr( $highlight_current_settings ); ?> dops-button is-compact" title="<?php esc_html_e( "Manage your network's Jetpack Sites.", 'jetpack' ); ?>"><?php echo esc_html_x( 'Network Settings', 'Navigation item', 'jetpack' ); ?></a><?php
- } ?>
- </span>
- <?php } else { ?>
- <span class="dops-button-group">
- <a href="<?php echo esc_url( $jetpack_admin_url ); ?>" type="button" class="dops-button is-compact"><?php esc_html_e( 'Dashboard', 'jetpack' ); ?></a><?php
- if ( current_user_can( 'jetpack_manage_modules' ) ) {
- ?><a href="<?php echo esc_url( $jetpack_admin_url . '#/settings' ); ?>" type="button" class="dops-button is-compact"><?php esc_html_e( 'Settings', 'jetpack' ); ?></a><?php
- } ?>
- </span>
- <?php } ?>
- </div>
- </div>
- </div>
- <div class="wrap"><div id="jp-admin-notices" aria-live="polite"></div></div>
- <!-- START OF CALLBACK -->
- <?php
- ob_start();
- call_user_func( $callback );
- $callback_ui = ob_get_contents();
- ob_end_clean();
- echo $callback_ui;
- ?>
- <!-- END OF CALLBACK -->
- <div class="jp-footer">
- <div class="jp-footer__a8c-attr-container"><a href="https://automattic.com" target="_blank" rel="noopener noreferrer"><svg role="img" class="jp-footer__a8c-attr" x="0" y="0" viewBox="0 0 935 38.2" enable-background="new 0 0 935 38.2" aria-labelledby="a8c-svg-title"><title id="a8c-svg-title">An Automattic Airline</title><path d="M317.1 38.2c-12.6 0-20.7-9.1-20.7-18.5v-1.2c0-9.6 8.2-18.5 20.7-18.5 12.6 0 20.8 8.9 20.8 18.5v1.2C337.9 29.1 329.7 38.2 317.1 38.2zM331.2 18.6c0-6.9-5-13-14.1-13s-14 6.1-14 13v0.9c0 6.9 5 13.1 14 13.1s14.1-6.2 14.1-13.1V18.6zM175 36.8l-4.7-8.8h-20.9l-4.5 8.8h-7L157 1.3h5.5L182 36.8H175zM159.7 8.2L152 23.1h15.7L159.7 8.2zM212.4 38.2c-12.7 0-18.7-6.9-18.7-16.2V1.3h6.6v20.9c0 6.6 4.3 10.5 12.5 10.5 8.4 0 11.9-3.9 11.9-10.5V1.3h6.7V22C231.4 30.8 225.8 38.2 212.4 38.2zM268.6 6.8v30h-6.7v-30h-15.5V1.3h37.7v5.5H268.6zM397.3 36.8V8.7l-1.8 3.1 -14.9 25h-3.3l-14.7-25 -1.8-3.1v28.1h-6.5V1.3h9.2l14 24.4 1.7 3 1.7-3 13.9-24.4h9.1v35.5H397.3zM454.4 36.8l-4.7-8.8h-20.9l-4.5 8.8h-7l19.2-35.5h5.5l19.5 35.5H454.4zM439.1 8.2l-7.7 14.9h15.7L439.1 8.2zM488.4 6.8v30h-6.7v-30h-15.5V1.3h37.7v5.5H488.4zM537.3 6.8v30h-6.7v-30h-15.5V1.3h37.7v5.5H537.3zM569.3 36.8V4.6c2.7 0 3.7-1.4 3.7-3.4h2.8v35.5L569.3 36.8 569.3 36.8zM628 11.3c-3.2-2.9-7.9-5.7-14.2-5.7 -9.5 0-14.8 6.5-14.8 13.3v0.7c0 6.7 5.4 13 15.3 13 5.9 0 10.8-2.8 13.9-5.7l4 4.2c-3.9 3.8-10.5 7.1-18.3 7.1 -13.4 0-21.6-8.7-21.6-18.3v-1.2c0-9.6 8.9-18.7 21.9-18.7 7.5 0 14.3 3.1 18 7.1L628 11.3zM321.5 12.4c1.2 0.8 1.5 2.4 0.8 3.6l-6.1 9.4c-0.8 1.2-2.4 1.6-3.6 0.8l0 0c-1.2-0.8-1.5-2.4-0.8-3.6l6.1-9.4C318.7 11.9 320.3 11.6 321.5 12.4L321.5 12.4z"></path><path d="M37.5 36.7l-4.7-8.9H11.7l-4.6 8.9H0L19.4 0.8H25l19.7 35.9H37.5zM22 7.8l-7.8 15.1h15.9L22 7.8zM82.8 36.7l-23.3-24 -2.3-2.5v26.6h-6.7v-36H57l22.6 24 2.3 2.6V0.8h6.7v35.9H82.8z"></path><path d="M719.9 37l-4.8-8.9H694l-4.6 8.9h-7.1l19.5-36h5.6l19.8 36H719.9zM704.4 8l-7.8 15.1h15.9L704.4 8zM733 37V1h6.8v36H733zM781 37c-1.8 0-2.6-2.5-2.9-5.8l-0.2-3.7c-0.2-3.6-1.7-5.1-8.4-5.1h-12.8V37H750V1h19.6c10.8 0 15.7 4.3 15.7 9.9 0 3.9-2 7.7-9 9 7 0.5 8.5 3.7 8.6 7.9l0.1 3c0.1 2.5 0.5 4.3 2.2 6.1V37H781zM778.5 11.8c0-2.6-2.1-5.1-7.9-5.1h-13.8v10.8h14.4c5 0 7.3-2.4 7.3-5.2V11.8zM794.8 37V1h6.8v30.4h28.2V37H794.8zM836.7 37V1h6.8v36H836.7zM886.2 37l-23.4-24.1 -2.3-2.5V37h-6.8V1h6.5l22.7 24.1 2.3 2.6V1h6.8v36H886.2zM902.3 37V1H935v5.6h-26v9.2h20v5.5h-20v10.1h26V37H902.3z"></path></svg></a></div>
- <ul class="jp-footer__links">
- <li class="jp-footer__link-item">
- <a href="https://jetpack.com" target="_blank" rel="noopener noreferrer" class="jp-footer__link" title="<?php esc_html_e( 'Jetpack version', 'jetpack' ); ?>">Jetpack <?php echo JETPACK__VERSION; ?></a>
- </li>
- <li class="jp-footer__link-item">
- <a href="https://wordpress.com/tos/" target="_blank" rel="noopener noreferrer" title="<?php esc_html__( 'WordPress.com Terms of Service', 'jetpack' ); ?>" class="jp-footer__link"><?php echo esc_html_x( 'Terms', 'Navigation item', 'jetpack' ); ?></a>
- </li>
- <li class="jp-footer__link-item">
- <a href="<?php echo esc_url( $jetpack_admin_url . '#/privacy' ); ?>" rel="noopener noreferrer" title="<?php esc_html_e( "Automattic's Privacy Policy", 'jetpack' ); ?>" class="jp-footer__link"><?php echo esc_html_x( 'Privacy', 'Navigation item', 'jetpack' ); ?></a>
- </li>
- <?php if ( is_multisite() && current_user_can( 'jetpack_network_sites_page' ) ) { ?>
- <li class="jp-footer__link-item">
- <a href="<?php echo esc_url( network_admin_url( 'admin.php?page=jetpack' ) ); ?>" title="<?php esc_html_e( "Manage your network's Jetpack Sites.", 'jetpack' ); ?>" class="jp-footer__link"><?php echo esc_html_x( 'Network Sites', 'Navigation item', 'jetpack' ); ?></a>
- </li>
- <?php } ?>
- <?php if ( is_multisite() && current_user_can( 'jetpack_network_settings_page' ) ) { ?>
- <li class="jp-footer__link-item">
- <a href="<?php echo esc_url( network_admin_url( 'admin.php?page=jetpack-settings' ) ); ?>" title="<?php esc_html_e( "Manage your network's Jetpack Sites.", 'jetpack' ); ?>" class="jp-footer__link"><?php echo esc_html_x( 'Network Settings', 'Navigation item', 'jetpack' ); ?></a>
- </li>
- <?php } ?>
- <?php if ( current_user_can( 'manage_options' ) ) { ?>
- <li class="jp-footer__link-item">
- <a href="<?php echo esc_url( admin_url() . 'admin.php?page=jetpack-debugger' ); ?>" title="<?php esc_html_e( "Test your site's compatibility with Jetpack.", 'jetpack' ); ?>" class="jp-footer__link"><?php echo esc_html_x( 'Debug', 'Navigation item', 'jetpack' ); ?></a>
- </li>
- <?php } ?>
- </ul>
- </div>
- </div>
-<?php return;
- }
-}
diff --git a/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-landing-page.php b/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-landing-page.php
deleted file mode 100644
index 5c06c284..00000000
--- a/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-landing-page.php
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
-// This is intentionally left empty as a stub because some sites were caching the require()
-// @see https://github.com/Automattic/jetpack/issues/5091
diff --git a/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-react-page.php b/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-react-page.php
deleted file mode 100644
index f84b62c3..00000000
--- a/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-react-page.php
+++ /dev/null
@@ -1,422 +0,0 @@
-<?php
-include_once( 'class.jetpack-admin-page.php' );
-
-// Builds the landing page and its menu
-class Jetpack_React_Page extends Jetpack_Admin_Page {
-
- protected $dont_show_if_not_active = false;
-
- protected $is_redirecting = false;
-
- function get_page_hook() {
- // Add the main admin Jetpack menu
- return add_menu_page( 'Jetpack', 'Jetpack', 'jetpack_admin_page', 'jetpack', array( $this, 'render' ), 'div' );
- }
-
- function add_page_actions( $hook ) {
- /** This action is documented in class.jetpack.php */
- do_action( 'jetpack_admin_menu', $hook );
-
- // Place the Jetpack menu item on top and others in the order they appear
- add_filter( 'custom_menu_order', '__return_true' );
- add_filter( 'menu_order', array( $this, 'jetpack_menu_order' ) );
-
- if ( ! isset( $_GET['page'] ) || 'jetpack' !== $_GET['page'] || ! empty( $_GET['configure'] ) ) {
- return; // No need to handle the fallback redirection if we are not on the Jetpack page
- }
-
- // Adding a redirect meta tag if the REST API is disabled
- if ( ! $this->is_rest_api_enabled() ) {
- $this->is_redirecting = true;
- add_action( 'admin_head', array( $this, 'add_fallback_head_meta' ) );
- }
-
- // Adding a redirect meta tag wrapped in noscript tags for all browsers in case they have JavaScript disabled
- add_action( 'admin_head', array( $this, 'add_noscript_head_meta' ) );
-
- // Adding a redirect tag wrapped in browser conditional comments
- add_action( 'admin_head', array( $this, 'add_legacy_browsers_head_script' ) );
- }
-
- /**
- * Add Jetpack Dashboard sub-link and point it to AAG if the user can view stats, manage modules or if Protect is active.
- *
- * Works in Dev Mode or when user is connected.
- *
- * @since 4.3.0
- */
- function jetpack_add_dashboard_sub_nav_item() {
- if ( Jetpack::is_development_mode() || Jetpack::is_active() ) {
- global $submenu;
- if ( current_user_can( 'jetpack_admin_page' ) ) {
- $submenu['jetpack'][] = array( __( 'Dashboard', 'jetpack' ), 'jetpack_admin_page', 'admin.php?page=jetpack#/dashboard' );
- }
- }
- }
-
- /**
- * If user is allowed to see the Jetpack Admin, add Settings sub-link.
- *
- * @since 4.3.0
- */
- function jetpack_add_settings_sub_nav_item() {
- if ( ( Jetpack::is_development_mode() || Jetpack::is_active() ) && current_user_can( 'jetpack_admin_page' ) && current_user_can( 'edit_posts' ) ) {
- global $submenu;
- $submenu['jetpack'][] = array( __( 'Settings', 'jetpack' ), 'jetpack_admin_page', 'admin.php?page=jetpack#/settings' );
- }
- }
-
- function add_fallback_head_meta() {
- echo '<meta http-equiv="refresh" content="0; url=?page=jetpack_modules">';
- }
-
- function add_noscript_head_meta() {
- echo '<noscript>';
- $this->add_fallback_head_meta();
- echo '</noscript>';
- }
-
- function add_legacy_browsers_head_script() {
- echo
- "<script type=\"text/javascript\">\n"
- . "/*@cc_on\n"
- . "if ( @_jscript_version <= 10) {\n"
- . "window.location.href = '?page=jetpack_modules';\n"
- . "}\n"
- . "@*/\n"
- . "</script>";
- }
-
- function jetpack_menu_order( $menu_order ) {
- $jp_menu_order = array();
-
- foreach ( $menu_order as $index => $item ) {
- if ( $item != 'jetpack' )
- $jp_menu_order[] = $item;
-
- if ( $index == 0 )
- $jp_menu_order[] = 'jetpack';
- }
-
- return $jp_menu_order;
- }
-
- // Render the configuration page for the module if it exists and an error
- // screen if the module is not configurable
- // @todo remove when real settings are in place
- function render_nojs_configurable( $module_name ) {
- $module_name = preg_replace( '/[^\da-z\-]+/', '', $_GET['configure'] );
-
- echo '<div class="wrap configure-module">';
-
- if ( Jetpack::is_module( $module_name ) && current_user_can( 'jetpack_configure_modules' ) ) {
- Jetpack::admin_screen_configure_module( $module_name );
- } else {
- echo '<h2>' . esc_html__( 'Error, bad module.', 'jetpack' ) . '</h2>';
- }
-
- echo '</div><!-- /wrap -->';
- }
-
- function page_render() {
- // Handle redirects to configuration pages
- if ( ! empty( $_GET['configure'] ) ) {
- return $this->render_nojs_configurable( $_GET['configure'] );
- }
-
- /** This action is already documented in views/admin/admin-page.php */
- do_action( 'jetpack_notices' );
-
- // Try fetching by patch
- $static_html = @file_get_contents( JETPACK__PLUGIN_DIR . '_inc/build/static.html' );
-
- if ( false === $static_html ) {
-
- // If we still have nothing, display an error
- echo '<p>';
- esc_html_e( 'Error fetching static.html. Try running: ', 'jetpack' );
- echo '<code>yarn distclean && yarn build</code>';
- echo '</p>';
- } else {
-
- // We got the static.html so let's display it
- echo $static_html;
- }
- }
-
- /**
- * Gets array of any Jetpack notices that have been dismissed.
- *
- * @since 4.0.1
- * @return mixed|void
- */
- function get_dismissed_jetpack_notices() {
- $jetpack_dismissed_notices = get_option( 'jetpack_dismissed_notices', array() );
- /**
- * Array of notices that have been dismissed.
- *
- * @since 4.0.1
- *
- * @param array $jetpack_dismissed_notices If empty, will not show any Jetpack notices.
- */
- $dismissed_notices = apply_filters( 'jetpack_dismissed_notices', $jetpack_dismissed_notices );
- return $dismissed_notices;
- }
-
- function additional_styles() {
- Jetpack_Admin_Page::load_wrapper_styles();
- }
-
- function page_admin_scripts() {
- if ( $this->is_redirecting || isset( $_GET['configure'] ) ) {
- return; // No need for scripts on a fallback page.
- }
-
- wp_enqueue_script(
- 'react-plugin',
- plugins_url( '_inc/build/admin.js', JETPACK__PLUGIN_FILE ),
- array( 'wp-i18n' ),
- JETPACK__VERSION,
- true
- );
-
- wp_set_script_translations( 'react-plugin', 'jetpack', JETPACK__PLUGIN_DIR . 'languages/json' );
-
- if ( ! Jetpack::is_development_mode() && Jetpack::is_active() ) {
- // Required for Analytics.
- wp_enqueue_script( 'jp-tracks', '//stats.wp.com/w.js', array(), gmdate( 'YW' ), true );
- }
-
- // Add objects to be passed to the initial state of the app.
- wp_localize_script( 'react-plugin', 'Initial_State', $this->get_initial_state() );
- }
-
- function get_initial_state() {
- // Load API endpoint base classes and endpoints for getting the module list fed into the JS Admin Page
- require_once JETPACK__PLUGIN_DIR . '_inc/lib/core-api/class.jetpack-core-api-xmlrpc-consumer-endpoint.php';
- require_once JETPACK__PLUGIN_DIR . '_inc/lib/core-api/class.jetpack-core-api-module-endpoints.php';
- $moduleListEndpoint = new Jetpack_Core_API_Module_List_Endpoint();
- $modules = $moduleListEndpoint->get_modules();
-
- // Preparing translated fields for JSON encoding by transforming all HTML entities to
- // respective characters.
- foreach( $modules as $slug => $data ) {
- $modules[ $slug ]['name'] = html_entity_decode( $data['name'] );
- $modules[ $slug ]['description'] = html_entity_decode( $data['description'] );
- $modules[ $slug ]['short_description'] = html_entity_decode( $data['short_description'] );
- $modules[ $slug ]['long_description'] = html_entity_decode( $data['long_description'] );
- }
-
- // Collecting roles that can view site stats.
- $stats_roles = array();
- $enabled_roles = function_exists( 'stats_get_option' ) ? stats_get_option( 'roles' ) : array( 'administrator' );
-
- if ( ! function_exists( 'get_editable_roles' ) ) {
- require_once ABSPATH . 'wp-admin/includes/user.php';
- }
- foreach ( get_editable_roles() as $slug => $role ) {
- $stats_roles[ $slug ] = array(
- 'name' => translate_user_role( $role['name'] ),
- 'canView' => is_array( $enabled_roles ) ? in_array( $slug, $enabled_roles, true ) : false,
- );
- }
-
- // Get information about current theme.
- $current_theme = wp_get_theme();
-
- // Get all themes that Infinite Scroll provides support for natively.
- $inf_scr_support_themes = array();
- foreach ( Jetpack::glob_php( JETPACK__PLUGIN_DIR . 'modules/infinite-scroll/themes' ) as $path ) {
- if ( is_readable( $path ) ) {
- $inf_scr_support_themes[] = basename( $path, '.php' );
- }
- }
-
- // Get last post, to build the link to Customizer in the Related Posts module.
- $last_post = get_posts( array( 'posts_per_page' => 1 ) );
- $last_post = isset( $last_post[0] ) && $last_post[0] instanceof WP_Post
- ? get_permalink( $last_post[0]->ID )
- : get_home_url();
-
- // Ensure that class to get the affiliate code is loaded
- if ( ! class_exists( 'Jetpack_Affiliate' ) ) {
- require_once JETPACK__PLUGIN_DIR . 'class.jetpack-affiliate.php';
- }
-
- return array(
- 'WP_API_root' => esc_url_raw( rest_url() ),
- 'WP_API_nonce' => wp_create_nonce( 'wp_rest' ),
- 'pluginBaseUrl' => plugins_url( '', JETPACK__PLUGIN_FILE ),
- 'connectionStatus' => array(
- 'isActive' => Jetpack::is_active(),
- 'isStaging' => Jetpack::is_staging_site(),
- 'devMode' => array(
- 'isActive' => Jetpack::is_development_mode(),
- 'constant' => defined( 'JETPACK_DEV_DEBUG' ) && JETPACK_DEV_DEBUG,
- 'url' => site_url() && false === strpos( site_url(), '.' ),
- 'filter' => apply_filters( 'jetpack_development_mode', false ),
- ),
- 'isPublic' => '1' == get_option( 'blog_public' ),
- 'isInIdentityCrisis' => Jetpack::validate_sync_error_idc_option(),
- 'sandboxDomain' => JETPACK__SANDBOX_DOMAIN,
- ),
- 'connectUrl' => Jetpack::init()->build_connect_url( true, false, false ),
- 'dismissedNotices' => $this->get_dismissed_jetpack_notices(),
- 'isDevVersion' => Jetpack::is_development_version(),
- 'currentVersion' => JETPACK__VERSION,
- 'is_gutenberg_available' => true,
- 'getModules' => $modules,
- 'showJumpstart' => jetpack_show_jumpstart(),
- 'rawUrl' => Jetpack::build_raw_urls( get_home_url() ),
- 'adminUrl' => esc_url( admin_url() ),
- 'stats' => array(
- // data is populated asynchronously on page load
- 'data' => array(
- 'general' => false,
- 'day' => false,
- 'week' => false,
- 'month' => false,
- ),
- 'roles' => $stats_roles,
- ),
- 'aff' => Jetpack_Affiliate::init()->get_affiliate_code(),
- 'settings' => $this->get_flattened_settings( $modules ),
- 'userData' => array(
-// 'othersLinked' => Jetpack::get_other_linked_admins(),
- 'currentUser' => jetpack_current_user_data(),
- ),
- 'siteData' => array(
- 'icon' => has_site_icon()
- ? apply_filters( 'jetpack_photon_url', get_site_icon_url(), array( 'w' => 64 ) )
- : '',
- 'siteVisibleToSearchEngines' => '1' == get_option( 'blog_public' ),
- /**
- * Whether promotions are visible or not.
- *
- * @since 4.8.0
- *
- * @param bool $are_promotions_active Status of promotions visibility. True by default.
- */
- 'showPromotions' => apply_filters( 'jetpack_show_promotions', true ),
- 'isAtomicSite' => jetpack_is_atomic_site(),
- 'plan' => Jetpack_Plan::get(),
- 'showBackups' => Jetpack::show_backups_ui(),
- ),
- 'themeData' => array(
- 'name' => $current_theme->get( 'Name' ),
- 'hasUpdate' => (bool) get_theme_update_available( $current_theme ),
- 'support' => array(
- 'infinite-scroll' => current_theme_supports( 'infinite-scroll' ) || in_array( $current_theme->get_stylesheet(), $inf_scr_support_themes ),
- ),
- ),
- 'locale' => Jetpack::get_i18n_data_json(),
- 'localeSlug' => join( '-', explode( '_', get_user_locale() ) ),
- 'jetpackStateNotices' => array(
- 'messageCode' => Jetpack::state( 'message' ),
- 'errorCode' => Jetpack::state( 'error' ),
- 'errorDescription' => Jetpack::state( 'error_description' ),
- ),
- 'tracksUserData' => Jetpack_Tracks_Client::get_connected_user_tracks_identity(),
- 'currentIp' => function_exists( 'jetpack_protect_get_ip' ) ? jetpack_protect_get_ip() : false,
- 'lastPostUrl' => esc_url( $last_post ),
- 'externalServicesConnectUrls' => $this->get_external_services_connect_urls()
- );
- }
-
- function get_external_services_connect_urls() {
- $connect_urls = array();
- jetpack_require_lib( 'class.jetpack-keyring-service-helper' );
- foreach ( Jetpack_Keyring_Service_Helper::$SERVICES as $service_name => $service_info ) {
- $connect_urls[ $service_name ] = Jetpack_Keyring_Service_Helper::connect_url( $service_name, $service_info[ 'for' ] );
- }
- return $connect_urls;
- }
-
- /**
- * Returns an array of modules and settings both as first class members of the object.
- *
- * @param array $modules the result of an API request to get all modules.
- *
- * @return array flattened settings with modules.
- */
- function get_flattened_settings( $modules ) {
- $core_api_endpoint = new Jetpack_Core_API_Data();
- $settings = $core_api_endpoint->get_all_options();
- return $settings->data;
- }
-}
-
-/*
- * Only show Jump Start on first activation.
- * Any option 'jumpstart' other than 'new connection' will hide it.
- *
- * The option can be of 4 things, and will be stored as such:
- * new_connection : Brand new connection - Show
- * jumpstart_activated : Jump Start has been activated - dismiss
- * jetpack_action_taken: Manual activation of a module already happened - dismiss
- * jumpstart_dismissed : Manual dismissal of Jump Start - dismiss
- *
- * @todo move to functions.global.php when available
- * @since 3.6
- * @return bool | show or hide
- */
-function jetpack_show_jumpstart() {
- if ( ! Jetpack::is_active() ) {
- return false;
- }
- $jumpstart_option = Jetpack_Options::get_option( 'jumpstart' );
-
- $hide_options = array(
- 'jumpstart_activated',
- 'jetpack_action_taken',
- 'jumpstart_dismissed'
- );
-
- if ( ! $jumpstart_option || in_array( $jumpstart_option, $hide_options ) ) {
- return false;
- }
-
- return true;
-}
-
-/**
- * Gather data about the current user.
- *
- * @since 4.1.0
- *
- * @return array
- */
-function jetpack_current_user_data() {
- $current_user = wp_get_current_user();
- $is_master_user = $current_user->ID == Jetpack_Options::get_option( 'master_user' );
- $dotcom_data = Jetpack::get_connected_user_data();
- // Add connected user gravatar to the returned dotcom_data.
- $dotcom_data['avatar'] = get_avatar_url( $dotcom_data['email'], array( 'size' => 64, 'default' => 'mysteryman' ) );
-
- $current_user_data = array(
- 'isConnected' => Jetpack::is_user_connected( $current_user->ID ),
- 'isMaster' => $is_master_user,
- 'username' => $current_user->user_login,
- 'id' => $current_user->ID,
- 'wpcomUser' => $dotcom_data,
- 'gravatar' => get_avatar( $current_user->ID, 40, 'mm', '', array( 'force_display' => true ) ),
- 'permissions' => array(
- 'admin_page' => current_user_can( 'jetpack_admin_page' ),
- 'connect' => current_user_can( 'jetpack_connect' ),
- 'disconnect' => current_user_can( 'jetpack_disconnect' ),
- 'manage_modules' => current_user_can( 'jetpack_manage_modules' ),
- 'network_admin' => current_user_can( 'jetpack_network_admin_page' ),
- 'network_sites_page' => current_user_can( 'jetpack_network_sites_page' ),
- 'edit_posts' => current_user_can( 'edit_posts' ),
- 'publish_posts' => current_user_can( 'publish_posts' ),
- 'manage_options' => current_user_can( 'manage_options' ),
- 'view_stats' => current_user_can( 'view_stats' ),
- 'manage_plugins' => current_user_can( 'install_plugins' )
- && current_user_can( 'activate_plugins' )
- && current_user_can( 'update_plugins' )
- && current_user_can( 'delete_plugins' ),
- ),
- );
-
- return $current_user_data;
-}
diff --git a/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-settings-page.php b/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-settings-page.php
deleted file mode 100644
index 35369ada..00000000
--- a/plugins/jetpack/_inc/lib/admin-pages/class.jetpack-settings-page.php
+++ /dev/null
@@ -1,154 +0,0 @@
-<?php
-include_once( 'class.jetpack-admin-page.php' );
-include_once( JETPACK__PLUGIN_DIR . 'class.jetpack-modules-list-table.php' );
-
-// Builds the settings page and its menu
-class Jetpack_Settings_Page extends Jetpack_Admin_Page {
-
- // Show the settings page only when Jetpack is connected or in dev mode
- protected $dont_show_if_not_active = true;
-
- function add_page_actions( $hook ) {}
-
- // Adds the Settings sub menu
- function get_page_hook() {
- return add_submenu_page(
- null,
- __( 'Jetpack Settings', 'jetpack' ),
- __( 'Settings', 'jetpack' ),
- 'jetpack_manage_modules',
- 'jetpack_modules',
- array( $this, 'render' )
- );
- }
-
- // Renders the module list table where you can use bulk action or row
- // actions to activate/deactivate and configure modules
- function page_render() {
- $list_table = new Jetpack_Modules_List_Table;
-
- // We have static.html so let's continue trying to fetch the others
- $noscript_notice = @file_get_contents( JETPACK__PLUGIN_DIR . '_inc/build/static-noscript-notice.html' );
- $rest_api_notice = @file_get_contents( JETPACK__PLUGIN_DIR . '_inc/build/static-version-notice.html' );
- $ie_notice = @file_get_contents( JETPACK__PLUGIN_DIR . '_inc/build/static-ie-notice.html' );
-
- $noscript_notice = str_replace(
- '#HEADER_TEXT#',
- esc_html__( 'You have JavaScript disabled', 'jetpack' ),
- $noscript_notice
- );
- $noscript_notice = str_replace(
- '#TEXT#',
- esc_html__( "Turn on JavaScript to unlock Jetpack's full potential!", 'jetpack' ),
- $noscript_notice
- );
-
- $rest_api_notice = str_replace(
- '#HEADER_TEXT#',
- esc_html( __( 'WordPress REST API is disabled', 'jetpack' ) ),
- $rest_api_notice
- );
- $rest_api_notice = str_replace(
- '#TEXT#',
- esc_html( __( "Enable WordPress REST API to unlock Jetpack's full potential!", 'jetpack' ) ),
- $rest_api_notice
- );
-
- $ie_notice = str_replace(
- '#HEADER_TEXT#',
- esc_html__( 'You are using an unsupported browser version.', 'jetpack' ),
- $ie_notice
- );
- $ie_notice = str_replace(
- '#TEXT#',
- esc_html__( "Update your browser to unlock Jetpack's full potential!", 'jetpack' ),
- $ie_notice
- );
-
- if ( ! $this->is_rest_api_enabled() ) {
- echo $rest_api_notice;
- }
- echo $noscript_notice;
- echo $ie_notice;
- ?>
-
- <div class="page-content configure">
- <div class="frame top hide-if-no-js">
- <div class="wrap">
- <div class="manage-left">
- <table class="table table-bordered fixed-top">
- <thead>
- <tr>
- <th class="check-column"><input type="checkbox" class="checkall"></th>
- <th colspan="2">
- <?php $list_table->unprotected_display_tablenav( 'top' ); ?>
- <span class="filter-search">
- <button type="button" class="button">Filter</button>
- </span>
- </th>
- </tr>
- </thead>
- </table>
- </div>
- </div><!-- /.wrap -->
- </div><!-- /.frame -->
- <div class="frame bottom">
- <div class="wrap">
- <div class="manage-right" style="display: none;">
- <div class="bumper">
- <form class="navbar-form" role="search">
- <input type="hidden" name="page" value="jetpack_modules" />
- <?php $list_table->search_box( __( 'Search', 'jetpack' ), 'srch-term' ); ?>
- <p><?php esc_html_e( 'View:', 'jetpack' ); ?></p>
- <div class="button-group filter-active">
- <button type="button" class="button <?php if ( empty( $_GET['activated'] ) ) echo 'active'; ?>"><?php esc_html_e( 'All', 'jetpack' ); ?></button>
- <button type="button" class="button <?php if ( ! empty( $_GET['activated'] ) && 'true' == $_GET['activated'] ) echo 'active'; ?>" data-filter-by="activated" data-filter-value="true"><?php esc_html_e( 'Active', 'jetpack' ); ?></button>
- <button type="button" class="button <?php if ( ! empty( $_GET['activated'] ) && 'false' == $_GET['activated'] ) echo 'active'; ?>" data-filter-by="activated" data-filter-value="false"><?php esc_html_e( 'Inactive', 'jetpack' ); ?></button>
- </div>
- <p><?php esc_html_e( 'Sort by:', 'jetpack' ); ?></p>
- <div class="button-group sort">
- <button type="button" class="button <?php if ( empty( $_GET['sort_by'] ) ) echo 'active'; ?>" data-sort-by="name"><?php esc_html_e( 'Alphabetical', 'jetpack' ); ?></button>
- <button type="button" class="button <?php if ( ! empty( $_GET['sort_by'] ) && 'introduced' == $_GET['sort_by'] ) echo 'active'; ?>" data-sort-by="introduced" data-sort-order="reverse"><?php esc_html_e( 'Newest', 'jetpack' ); ?></button>
- <button type="button" class="button <?php if ( ! empty( $_GET['sort_by'] ) && 'sort' == $_GET['sort_by'] ) echo 'active'; ?>" data-sort-by="sort"><?php esc_html_e( 'Popular', 'jetpack' ); ?></button>
- </div>
- <p><?php esc_html_e( 'Show:', 'jetpack' ); ?></p>
- <?php $list_table->views(); ?>
- </form>
- </div>
- </div>
- <div class="manage-left" style="width: 100%;">
- <form class="jetpack-modules-list-table-form" onsubmit="return false;">
- <table class="<?php echo implode( ' ', $list_table->get_table_classes() ); ?>">
- <tbody id="the-list">
- <?php $list_table->display_rows_or_placeholder(); ?>
- </tbody>
- </table>
- </form>
- </div>
- </div><!-- /.wrap -->
- </div><!-- /.frame -->
- </div><!-- /.content -->
- <?php
-
- JetpackTracking::record_user_event( 'wpa_page_view', array( 'path' => 'old_settings' ) );
- }
-
- /**
- * Load styles for static page.
- *
- * @since 4.3.0
- */
- function additional_styles() {
- Jetpack_Admin_Page::load_wrapper_styles();
- }
-
- // Javascript logic specific to the list table
- function page_admin_scripts() {
- wp_enqueue_script(
- 'jetpack-admin-js',
- Jetpack::get_file_url_for_environment( '_inc/build/jetpack-admin.min.js', '_inc/jetpack-admin.js' ),
- array( 'jquery' ),
- JETPACK__VERSION
- );
- }
-}
diff --git a/plugins/jetpack/_inc/lib/class.color.php b/plugins/jetpack/_inc/lib/class.color.php
deleted file mode 100644
index a57f2009..00000000
--- a/plugins/jetpack/_inc/lib/class.color.php
+++ /dev/null
@@ -1,755 +0,0 @@
-<?php
-/**
- * Color utility and conversion
- *
- * Represents a color value, and converts between RGB/HSV/XYZ/Lab/HSL
- *
- * Example:
- * $color = new Jetpack_Color(0xFFFFFF);
- *
- * @author Harold Asbridge <hasbridge@gmail.com>
- * @author Matt Wiebe <wiebe@automattic.com>
- * @license http://www.opensource.org/licenses/MIT
- */
-
-class Jetpack_Color {
- /**
- * @var int
- */
- protected $color = 0;
-
- /**
- * Initialize object
- *
- * @param string|array $color A color of the type $type
- * @param string $type The type of color we will construct from.
- * One of hex (default), rgb, hsl, int
- */
- public function __construct( $color = null, $type = 'hex' ) {
- if ( $color ) {
- switch ( $type ) {
- case 'hex':
- $this->fromHex( $color );
- break;
- case 'rgb':
- if ( is_array( $color ) && count( $color ) == 3 ) {
- list( $r, $g, $b ) = array_values( $color );
- $this->fromRgbInt( $r, $g, $b );
- }
- break;
- case 'hsl':
- if ( is_array( $color ) && count( $color ) == 3 ) {
- list( $h, $s, $l ) = array_values( $color );
- $this->fromHsl( $h, $s, $l );
- }
- break;
- case 'int':
- $this->fromInt( $color );
- break;
- default:
- // there is no default.
- break;
- }
- }
- }
-
- /**
- * Init color from hex value
- *
- * @param string $hexValue
- *
- * @return Jetpack_Color
- */
- public function fromHex($hexValue) {
- $hexValue = str_replace( '#', '', $hexValue );
- // handle short hex codes like #fff
- if ( 3 === strlen( $hexValue ) ) {
- $short = $hexValue;
- $i = 0;
- $hexValue = '';
- while ( $i < 3 ) {
- $chunk = substr($short, $i, 1 );
- $hexValue .= $chunk . $chunk;
- $i++;
- }
- }
- $intValue = hexdec( $hexValue );
-
- if ( $intValue < 0 || $intValue > 16777215 ) {
- throw new RangeException( $hexValue . " out of valid color code range" );
- }
-
- $this->color = $intValue;
-
- return $this;
- }
-
- /**
- * Init color from integer RGB values
- *
- * @param int $red
- * @param int $green
- * @param int $blue
- *
- * @return Jetpack_Color
- */
- public function fromRgbInt($red, $green, $blue)
- {
- if ( $red < 0 || $red > 255 )
- throw new RangeException( "Red value " . $red . " out of valid color code range" );
-
- if ( $green < 0 || $green > 255 )
- throw new RangeException( "Green value " . $green . " out of valid color code range" );
-
- if ( $blue < 0 || $blue > 255 )
- throw new RangeException( "Blue value " . $blue . " out of valid color code range" );
-
- $this->color = (int)(($red << 16) + ($green << 8) + $blue);
-
- return $this;
- }
-
- /**
- * Init color from hex RGB values
- *
- * @param string $red
- * @param string $green
- * @param string $blue
- *
- * @return Jetpack_Color
- */
- public function fromRgbHex($red, $green, $blue)
- {
- return $this->fromRgbInt(hexdec($red), hexdec($green), hexdec($blue));
- }
-
- /**
- * Converts an HSL color value to RGB. Conversion formula
- * adapted from http://en.wikipedia.org/wiki/HSL_color_space.
- * @param int $h Hue. [0-360]
- * @param in $s Saturation [0, 100]
- * @param int $l Lightness [0, 100]
- */
- public function fromHsl( $h, $s, $l ) {
- $h /= 360; $s /= 100; $l /= 100;
-
- if ( $s == 0 ) {
- $r = $g = $b = $l; // achromatic
- }
- else {
- $q = $l < 0.5 ? $l * ( 1 + $s ) : $l + $s - $l * $s;
- $p = 2 * $l - $q;
- $r = $this->hue2rgb( $p, $q, $h + 1/3 );
- $g = $this->hue2rgb( $p, $q, $h );
- $b = $this->hue2rgb( $p, $q, $h - 1/3 );
- }
-
- return $this->fromRgbInt( $r * 255, $g * 255, $b * 255 );
- }
-
- /**
- * Helper function for Jetpack_Color::fromHsl()
- */
- private function hue2rgb( $p, $q, $t ) {
- if ( $t < 0 ) $t += 1;
- if ( $t > 1 ) $t -= 1;
- if ( $t < 1/6 ) return $p + ( $q - $p ) * 6 * $t;
- if ( $t < 1/2 ) return $q;
- if ( $t < 2/3 ) return $p + ( $q - $p ) * ( 2/3 - $t ) * 6;
- return $p;
- }
-
- /**
- * Init color from integer value
- *
- * @param int $intValue
- *
- * @return Jetpack_Color
- */
- public function fromInt($intValue)
- {
- if ( $intValue < 0 || $intValue > 16777215 )
- throw new RangeException( $intValue . " out of valid color code range" );
-
- $this->color = $intValue;
-
- return $this;
- }
-
- /**
- * Convert color to hex
- *
- * @return string
- */
- public function toHex()
- {
- return str_pad(dechex($this->color), 6, '0', STR_PAD_LEFT);
- }
-
- /**
- * Convert color to RGB array (integer values)
- *
- * @return array
- */
- public function toRgbInt()
- {
- return array(
- 'red' => (int)(255 & ($this->color >> 16)),
- 'green' => (int)(255 & ($this->color >> 8)),
- 'blue' => (int)(255 & ($this->color))
- );
- }
-
- /**
- * Convert color to RGB array (hex values)
- *
- * @return array
- */
- public function toRgbHex()
- {
- $r = array();
- foreach ($this->toRgbInt() as $item) {
- $r[] = dechex($item);
- }
- return $r;
- }
-
- /**
- * Get Hue/Saturation/Value for the current color
- * (float values, slow but accurate)
- *
- * @return array
- */
- public function toHsvFloat()
- {
- $rgb = $this->toRgbInt();
-
- $rgbMin = min($rgb);
- $rgbMax = max($rgb);
-
- $hsv = array(
- 'hue' => 0,
- 'sat' => 0,
- 'val' => $rgbMax
- );
-
- // If v is 0, color is black
- if ($hsv['val'] == 0) {
- return $hsv;
- }
-
- // Normalize RGB values to 1
- $rgb['red'] /= $hsv['val'];
- $rgb['green'] /= $hsv['val'];
- $rgb['blue'] /= $hsv['val'];
- $rgbMin = min($rgb);
- $rgbMax = max($rgb);
-
- // Calculate saturation
- $hsv['sat'] = $rgbMax - $rgbMin;
- if ($hsv['sat'] == 0) {
- $hsv['hue'] = 0;
- return $hsv;
- }
-
- // Normalize saturation to 1
- $rgb['red'] = ($rgb['red'] - $rgbMin) / ($rgbMax - $rgbMin);
- $rgb['green'] = ($rgb['green'] - $rgbMin) / ($rgbMax - $rgbMin);
- $rgb['blue'] = ($rgb['blue'] - $rgbMin) / ($rgbMax - $rgbMin);
- $rgbMin = min($rgb);
- $rgbMax = max($rgb);
-
- // Calculate hue
- if ($rgbMax == $rgb['red']) {
- $hsv['hue'] = 0.0 + 60 * ($rgb['green'] - $rgb['blue']);
- if ($hsv['hue'] < 0) {
- $hsv['hue'] += 360;
- }
- } else if ($rgbMax == $rgb['green']) {
- $hsv['hue'] = 120 + (60 * ($rgb['blue'] - $rgb['red']));
- } else {
- $hsv['hue'] = 240 + (60 * ($rgb['red'] - $rgb['green']));
- }
-
- return $hsv;
- }
-
- /**
- * Get HSV values for color
- * (integer values from 0-255, fast but less accurate)
- *
- * @return int
- */
- public function toHsvInt()
- {
- $rgb = $this->toRgbInt();
-
- $rgbMin = min($rgb);
- $rgbMax = max($rgb);
-
- $hsv = array(
- 'hue' => 0,
- 'sat' => 0,
- 'val' => $rgbMax
- );
-
- // If value is 0, color is black
- if ($hsv['val'] == 0) {
- return $hsv;
- }
-
- // Calculate saturation
- $hsv['sat'] = round(255 * ($rgbMax - $rgbMin) / $hsv['val']);
- if ($hsv['sat'] == 0) {
- $hsv['hue'] = 0;
- return $hsv;
- }
-
- // Calculate hue
- if ($rgbMax == $rgb['red']) {
- $hsv['hue'] = round(0 + 43 * ($rgb['green'] - $rgb['blue']) / ($rgbMax - $rgbMin));
- } else if ($rgbMax == $rgb['green']) {
- $hsv['hue'] = round(85 + 43 * ($rgb['blue'] - $rgb['red']) / ($rgbMax - $rgbMin));
- } else {
- $hsv['hue'] = round(171 + 43 * ($rgb['red'] - $rgb['green']) / ($rgbMax - $rgbMin));
- }
- if ($hsv['hue'] < 0) {
- $hsv['hue'] += 255;
- }
-
- return $hsv;
- }
-
- /**
- * Converts an RGB color value to HSL. Conversion formula
- * adapted from http://en.wikipedia.org/wiki/HSL_color_space.
- * Assumes r, g, and b are contained in the set [0, 255] and
- * returns h in [0, 360], s in [0, 100], l in [0, 100]
- *
- * @return Array The HSL representation
- */
- public function toHsl() {
- list( $r, $g, $b ) = array_values( $this->toRgbInt() );
- $r /= 255; $g /= 255; $b /= 255;
- $max = max( $r, $g, $b );
- $min = min( $r, $g, $b );
- $h = $s = $l = ( $max + $min ) / 2;
- #var_dump( array( compact('max', 'min', 'r', 'g', 'b')) );
- if ( $max == $min ) {
- $h = $s = 0; // achromatic
- }
- else {
- $d = $max - $min;
- $s = $l > 0.5 ? $d / ( 2 - $max - $min ) : $d / ( $max + $min );
- switch ( $max ) {
- case $r:
- $h = ( $g - $b ) / $d + ( $g < $b ? 6 : 0 );
- break;
- case $g:
- $h = ( $b - $r ) / $d + 2;
- break;
- case $b:
- $h = ( $r - $g ) / $d + 4;
- break;
- }
- $h /= 6;
- }
- $h = (int) round( $h * 360 );
- $s = (int) round( $s * 100 );
- $l = (int) round( $l * 100 );
- return compact( 'h', 's', 'l' );
- }
-
- public function toCSS( $type = 'hex', $alpha = 1 ) {
- switch ( $type ) {
- case 'hex':
- return $this->toString();
- break;
- case 'rgb':
- case 'rgba':
- list( $r, $g, $b ) = array_values( $this->toRgbInt() );
- if ( is_numeric( $alpha ) && $alpha < 1 ) {
- return "rgba( {$r}, {$g}, {$b}, $alpha )";
- }
- else {
- return "rgb( {$r}, {$g}, {$b} )";
- }
- break;
- case 'hsl':
- case 'hsla':
- list( $h, $s, $l ) = array_values( $this->toHsl() );
- if ( is_numeric( $alpha ) && $alpha < 1 ) {
- return "hsla( {$h}, {$s}, {$l}, $alpha )";
- }
- else {
- return "hsl( {$h}, {$s}, {$l} )";
- }
- break;
- default:
- return $this->toString();
- break;
- }
- }
-
- /**
- * Get current color in XYZ format
- *
- * @return array
- */
- public function toXyz()
- {
- $rgb = $this->toRgbInt();
-
- // Normalize RGB values to 1
-
- $rgb_new = array();
- foreach ($rgb as $item) {
- $rgb_new[] = $item / 255;
- }
- $rgb = $rgb_new;
-
- $rgb_new = array();
- foreach ($rgb as $item) {
- if ($item > 0.04045) {
- $item = pow((($item + 0.055) / 1.055), 2.4);
- } else {
- $item = $item / 12.92;
- }
- $rgb_new[] = $item * 100;
- }
- $rgb = $rgb_new;
-
- // Observer. = 2°, Illuminant = D65
- $xyz = array(
- 'x' => ($rgb['red'] * 0.4124) + ($rgb['green'] * 0.3576) + ($rgb['blue'] * 0.1805),
- 'y' => ($rgb['red'] * 0.2126) + ($rgb['green'] * 0.7152) + ($rgb['blue'] * 0.0722),
- 'z' => ($rgb['red'] * 0.0193) + ($rgb['green'] * 0.1192) + ($rgb['blue'] * 0.9505)
- );
-
- return $xyz;
- }
-
- /**
- * Get color CIE-Lab values
- *
- * @return array
- */
- public function toLabCie()
- {
- $xyz = $this->toXyz();
-
- //Ovserver = 2*, Iluminant=D65
- $xyz['x'] /= 95.047;
- $xyz['y'] /= 100;
- $xyz['z'] /= 108.883;
-
- $xyz_new = array();
- foreach ($xyz as $item) {
- if ($item > 0.008856) {
- $xyz_new[] = pow($item, 1/3);
- } else {
- $xyz_new[] = (7.787 * $item) + (16 / 116);
- }
- }
- $xyz = $xyz_new;
-
- $lab = array(
- 'l' => (116 * $xyz['y']) - 16,
- 'a' => 500 * ($xyz['x'] - $xyz['y']),
- 'b' => 200 * ($xyz['y'] - $xyz['z'])
- );
-
- return $lab;
- }
-
- /**
- * Convert color to integer
- *
- * @return int
- */
- public function toInt()
- {
- return $this->color;
- }
-
- /**
- * Alias of toString()
- *
- * @return string
- */
- public function __toString()
- {
- return $this->toString();
- }
-
- /**
- * Get color as string
- *
- * @return string
- */
- public function toString()
- {
- $str = $this->toHex();
- return strtoupper("#{$str}");
- }
-
- /**
- * Get the distance between this color and the given color
- *
- * @param Jetpack_Color $color
- *
- * @return int
- */
- public function getDistanceRgbFrom(Jetpack_Color $color)
- {
- $rgb1 = $this->toRgbInt();
- $rgb2 = $color->toRgbInt();
-
- $rDiff = abs($rgb1['red'] - $rgb2['red']);
- $gDiff = abs($rgb1['green'] - $rgb2['green']);
- $bDiff = abs($rgb1['blue'] - $rgb2['blue']);
-
- // Sum of RGB differences
- $diff = $rDiff + $gDiff + $bDiff;
- return $diff;
- }
-
- /**
- * Get distance from the given color using the Delta E method
- *
- * @param Jetpack_Color $color
- *
- * @return float
- */
- public function getDistanceLabFrom(Jetpack_Color $color)
- {
- $lab1 = $this->toLabCie();
- $lab2 = $color->toLabCie();
-
- $lDiff = abs($lab2['l'] - $lab1['l']);
- $aDiff = abs($lab2['a'] - $lab1['a']);
- $bDiff = abs($lab2['b'] - $lab1['b']);
-
- $delta = sqrt($lDiff + $aDiff + $bDiff);
-
- return $delta;
- }
-
- public function toLuminosity() {
- $lum = array();
- foreach( $this->toRgbInt() as $slot => $value ) {
- $chan = $value / 255;
- $lum[ $slot ] = ( $chan <= 0.03928 ) ? $chan / 12.92 : pow( ( ( $chan + 0.055 ) / 1.055 ), 2.4 );
- }
- return 0.2126 * $lum['red'] + 0.7152 * $lum['green'] + 0.0722 * $lum['blue'];
- }
-
- /**
- * Get distance between colors using luminance.
- * Should be more than 5 for readable contrast
- *
- * @param Jetpack_Color $color Another color
- * @return float
- */
- public function getDistanceLuminosityFrom( Jetpack_Color $color ) {
- $L1 = $this->toLuminosity();
- $L2 = $color->toLuminosity();
- if ( $L1 > $L2 ) {
- return ( $L1 + 0.05 ) / ( $L2 + 0.05 );
- }
- else{
- return ( $L2 + 0.05 ) / ( $L1 + 0.05 );
- }
- }
-
- public function getMaxContrastColor() {
- $withBlack = $this->getDistanceLuminosityFrom( new Jetpack_Color( '#000') );
- $withWhite = $this->getDistanceLuminosityFrom( new Jetpack_Color( '#fff') );
- $color = new Jetpack_Color;
- $hex = ( $withBlack >= $withWhite ) ? '#000000' : '#ffffff';
- return $color->fromHex( $hex );
- }
-
- public function getGrayscaleContrastingColor( $contrast = false ) {
- if ( ! $contrast ) {
- return $this->getMaxContrastColor();
- }
- // don't allow less than 5
- $target_contrast = ( $contrast < 5 ) ? 5 : $contrast;
- $color = $this->getMaxContrastColor();
- $contrast = $color->getDistanceLuminosityFrom( $this );
-
- // if current max contrast is less than the target contrast, we had wishful thinking.
- if ( $contrast <= $target_contrast ) {
- return $color;
- }
-
- $incr = ( '#000000' === $color->toString() ) ? 1 : -1;
- while ( $contrast > $target_contrast ) {
- $color = $color->incrementLightness( $incr );
- $contrast = $color->getDistanceLuminosityFrom( $this );
- }
-
- return $color;
- }
-
- /**
- * Gets a readable contrasting color. $this is assumed to be the text and $color the background color.
- * @param object $bg_color A Color object that will be compared against $this
- * @param integer $min_contrast The minimum contrast to achieve, if possible.
- * @return object A Color object, an increased contrast $this compared against $bg_color
- */
- public function getReadableContrastingColor( $bg_color = false, $min_contrast = 5 ) {
- if ( ! $bg_color || ! is_a( $bg_color, 'Jetpack_Color' ) ) {
- return $this;
- }
- // you shouldn't use less than 5, but you might want to.
- $target_contrast = $min_contrast;
- // working things
- $contrast = $bg_color->getDistanceLuminosityFrom( $this );
- $max_contrast_color = $bg_color->getMaxContrastColor();
- $max_contrast = $max_contrast_color->getDistanceLuminosityFrom( $bg_color );
-
- // if current max contrast is less than the target contrast, we had wishful thinking.
- // still, go max
- if ( $max_contrast <= $target_contrast ) {
- return $max_contrast_color;
- }
- // or, we might already have sufficient contrast
- if ( $contrast >= $target_contrast ) {
- return $this;
- }
-
- $incr = ( 0 === $max_contrast_color->toInt() ) ? -1 : 1;
- while ( $contrast < $target_contrast ) {
- $this->incrementLightness( $incr );
- $contrast = $bg_color->getDistanceLuminosityFrom( $this );
- // infininite loop prevention: you never know.
- if ( $this->color === 0 || $this->color === 16777215 ) {
- break;
- }
- }
-
- return $this;
- }
-
- /**
- * Detect if color is grayscale
- *
- * @param int @threshold
- *
- * @return bool
- */
- public function isGrayscale($threshold = 16)
- {
- $rgb = $this->toRgbInt();
-
- // Get min and max rgb values, then difference between them
- $rgbMin = min($rgb);
- $rgbMax = max($rgb);
- $diff = $rgbMax - $rgbMin;
-
- return $diff < $threshold;
- }
-
- /**
- * Get the closest matching color from the given array of colors
- *
- * @param array $colors array of integers or Jetpack_Color objects
- *
- * @return mixed the array key of the matched color
- */
- public function getClosestMatch(array $colors)
- {
- $matchDist = 10000;
- $matchKey = null;
- foreach($colors as $key => $color) {
- if (false === ($color instanceof Jetpack_Color)) {
- $c = new Jetpack_Color($color);
- }
- $dist = $this->getDistanceLabFrom($c);
- if ($dist < $matchDist) {
- $matchDist = $dist;
- $matchKey = $key;
- }
- }
-
- return $matchKey;
- }
-
- /* TRANSFORMS */
-
- public function darken( $amount = 5 ) {
- return $this->incrementLightness( - $amount );
- }
-
- public function lighten( $amount = 5 ) {
- return $this->incrementLightness( $amount );
- }
-
- public function incrementLightness( $amount ) {
- $hsl = $this->toHsl();
- extract( $hsl );
- $l += $amount;
- if ( $l < 0 ) $l = 0;
- if ( $l > 100 ) $l = 100;
- return $this->fromHsl( $h, $s, $l );
- }
-
- public function saturate( $amount = 15 ) {
- return $this->incrementSaturation( $amount );
- }
-
- public function desaturate( $amount = 15 ) {
- return $this->incrementSaturation( - $amount );
- }
-
- public function incrementSaturation( $amount ) {
- $hsl = $this->toHsl();
- extract( $hsl );
- $s += $amount;
- if ( $s < 0 ) $s = 0;
- if ( $s > 100 ) $s = 100;
- return $this->fromHsl( $h, $s, $l );
- }
-
- public function toGrayscale() {
- $hsl = $this->toHsl();
- extract( $hsl );
- $s = 0;
- return $this->fromHsl( $h, $s, $l );
- }
-
- public function getComplement() {
- return $this->incrementHue( 180 );
- }
-
- public function getSplitComplement( $step = 1 ) {
- $incr = 180 + ( $step * 30 );
- return $this->incrementHue( $incr );
- }
-
- public function getAnalog( $step = 1 ) {
- $incr = $step * 30;
- return $this->incrementHue( $incr );
- }
-
- public function getTetrad( $step = 1 ) {
- $incr = $step * 60;
- return $this->incrementHue( $incr );
- }
-
- public function getTriad( $step = 1 ) {
- $incr = $step * 120;
- return $this->incrementHue( $incr );
- }
-
- public function incrementHue( $amount ) {
- $hsl = $this->toHsl();
- extract( $hsl );
- $h = ( $h + $amount ) % 360;
- if ( $h < 0 ) $h = 360 - $h;
- return $this->fromHsl( $h, $s, $l );
- }
-
-} // class Jetpack_Color
diff --git a/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php b/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php
deleted file mode 100644
index ba57e923..00000000
--- a/plugins/jetpack/_inc/lib/class.core-rest-api-endpoints.php
+++ /dev/null
@@ -1,3327 +0,0 @@
-<?php
-/**
- * Register WP REST API endpoints for Jetpack.
- *
- * @author Automattic
- */
-
-/**
- * Disable direct access.
- */
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-// Load WP_Error for error messages.
-require_once ABSPATH . '/wp-includes/class-wp-error.php';
-
-// Register endpoints when WP REST API is initialized.
-add_action( 'rest_api_init', array( 'Jetpack_Core_Json_Api_Endpoints', 'register_endpoints' ) );
-// Load API endpoints that are synced with WP.com
-// Each of these is a class that will register its own routes on 'rest_api_init'.
-require_once JETPACK__PLUGIN_DIR . '_inc/lib/core-api/load-wpcom-endpoints.php';
-
-/**
- * Class Jetpack_Core_Json_Api_Endpoints
- *
- * @since 4.3.0
- */
-class Jetpack_Core_Json_Api_Endpoints {
-
- /**
- * @var string Generic error message when user is not allowed to perform an action.
- */
- public static $user_permissions_error_msg;
-
- /**
- * @var array Roles that can access Stats once they're granted access.
- */
- public static $stats_roles;
-
- /**
- * Declare the Jetpack REST API endpoints.
- *
- * @since 4.3.0
- */
- public static function register_endpoints() {
-
- // Load API endpoint base classes
- require_once JETPACK__PLUGIN_DIR . '_inc/lib/core-api/class.jetpack-core-api-xmlrpc-consumer-endpoint.php';
-
- // Load API endpoints
- require_once JETPACK__PLUGIN_DIR . '_inc/lib/core-api/class.jetpack-core-api-module-endpoints.php';
- require_once JETPACK__PLUGIN_DIR . '_inc/lib/core-api/class.jetpack-core-api-site-endpoints.php';
- require_once JETPACK__PLUGIN_DIR . '_inc/lib/core-api/class.jetpack-core-api-widgets-endpoints.php';
-
- self::$user_permissions_error_msg = esc_html__(
- 'You do not have the correct user permissions to perform this action.
- Please contact your site admin if you think this is a mistake.',
- 'jetpack'
- );
-
- self::$stats_roles = array( 'administrator', 'editor', 'author', 'contributor', 'subscriber' );
-
- Jetpack::load_xml_rpc_client();
- $ixr_client = new Jetpack_IXR_Client( array( 'user_id' => get_current_user_id() ) );
- $core_api_endpoint = new Jetpack_Core_API_Data( $ixr_client );
- $module_list_endpoint = new Jetpack_Core_API_Module_List_Endpoint();
- $module_data_endpoint = new Jetpack_Core_API_Module_Data_Endpoint();
- $module_toggle_endpoint = new Jetpack_Core_API_Module_Toggle_Endpoint( new Jetpack_IXR_Client() );
- $site_endpoint = new Jetpack_Core_API_Site_Endpoint();
- $widget_endpoint = new Jetpack_Core_API_Widget_Endpoint();
-
- register_rest_route( 'jetpack/v4', 'plans', array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => __CLASS__ . '::get_plans',
- 'permission_callback' => __CLASS__ . '::connect_url_permission_callback',
-
- ) );
-
- register_rest_route( 'jetpack/v4', '/jitm', array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => __CLASS__ . '::get_jitm_message',
- ) );
-
- register_rest_route( 'jetpack/v4', '/jitm', array(
- 'methods' => WP_REST_Server::CREATABLE,
- 'callback' => __CLASS__ . '::delete_jitm_message'
- ) );
-
- // Register a site
- register_rest_route( 'jetpack/v4', '/verify_registration', array(
- 'methods' => WP_REST_Server::EDITABLE,
- 'callback' => __CLASS__ . '::verify_registration',
- ) );
-
- // Authorize a remote user
- register_rest_route( 'jetpack/v4', '/remote_authorize', array(
- 'methods' => WP_REST_Server::EDITABLE,
- 'callback' => __CLASS__ . '::remote_authorize',
- ) );
-
- // Get current connection status of Jetpack
- register_rest_route( 'jetpack/v4', '/connection', array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => __CLASS__ . '::jetpack_connection_status',
- ) );
-
- // Test current connection status of Jetpack
- register_rest_route( 'jetpack/v4', '/connection/test', array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => __CLASS__ . '::jetpack_connection_test',
- 'permission_callback' => __CLASS__ . '::manage_modules_permission_check',
- ) );
-
- // Endpoint specific for privileged servers to request detailed debug information.
- register_rest_route( 'jetpack/v4', '/connection/test-wpcom/', array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => __CLASS__ . '::jetpack_connection_test_for_external',
- 'permission_callback' => __CLASS__ . '::view_jetpack_connection_test_check',
- ) );
-
- register_rest_route( 'jetpack/v4', '/rewind', array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => __CLASS__ . '::get_rewind_data',
- 'permission_callback' => __CLASS__ . '::view_admin_page_permission_check',
- ) );
-
- // Fetches a fresh connect URL
- register_rest_route( 'jetpack/v4', '/connection/url', array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => __CLASS__ . '::build_connect_url',
- 'permission_callback' => __CLASS__ . '::connect_url_permission_callback',
- ) );
-
- // Get current user connection data
- register_rest_route( 'jetpack/v4', '/connection/data', array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => __CLASS__ . '::get_user_connection_data',
- 'permission_callback' => __CLASS__ . '::get_user_connection_data_permission_callback',
- ) );
-
- // Set the connection owner
- register_rest_route( 'jetpack/v4', '/connection/owner', array(
- 'methods' => WP_REST_Server::EDITABLE,
- 'callback' => __CLASS__ . '::set_connection_owner',
- 'permission_callback' => __CLASS__ . '::set_connection_owner_permission_callback',
- ) );
-
- // Current user: get or set tracking settings.
- register_rest_route( 'jetpack/v4', '/tracking/settings', array(
- array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => __CLASS__ . '::get_user_tracking_settings',
- 'permission_callback' => __CLASS__ . '::view_admin_page_permission_check',
- ),
- array(
- 'methods' => WP_REST_Server::EDITABLE,
- 'callback' => __CLASS__ . '::update_user_tracking_settings',
- 'permission_callback' => __CLASS__ . '::view_admin_page_permission_check',
- 'args' => array(
- 'tracks_opt_out' => array( 'type' => 'boolean' ),
- ),
- ),
- ) );
-
- // Disconnect site from WordPress.com servers
- register_rest_route( 'jetpack/v4', '/connection', array(
- 'methods' => WP_REST_Server::EDITABLE,
- 'callback' => __CLASS__ . '::disconnect_site',
- 'permission_callback' => __CLASS__ . '::disconnect_site_permission_callback',
- ) );
-
- // Disconnect/unlink user from WordPress.com servers
- register_rest_route( 'jetpack/v4', '/connection/user', array(
- 'methods' => WP_REST_Server::EDITABLE,
- 'callback' => __CLASS__ . '::unlink_user',
- 'permission_callback' => __CLASS__ . '::unlink_user_permission_callback',
- ) );
-
- // Get current site data
- register_rest_route( 'jetpack/v4', '/site', array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => __CLASS__ . '::get_site_data',
- 'permission_callback' => __CLASS__ . '::view_admin_page_permission_check',
- ) );
-
- // Get current site data
- register_rest_route( 'jetpack/v4', '/site/features', array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => array( $site_endpoint, 'get_features' ),
- 'permission_callback' => array( $site_endpoint , 'can_request' ),
- ) );
-
- // Confirm that a site in identity crisis should be in staging mode
- register_rest_route( 'jetpack/v4', '/identity-crisis/confirm-safe-mode', array(
- 'methods' => WP_REST_Server::EDITABLE,
- 'callback' => __CLASS__ . '::confirm_safe_mode',
- 'permission_callback' => __CLASS__ . '::identity_crisis_mitigation_permission_check',
- ) );
-
- // IDC resolve: create an entirely new shadow site for this URL.
- register_rest_route( 'jetpack/v4', '/identity-crisis/start-fresh', array(
- 'methods' => WP_REST_Server::EDITABLE,
- 'callback' => __CLASS__ . '::start_fresh_connection',
- 'permission_callback' => __CLASS__ . '::identity_crisis_mitigation_permission_check',
- ) );
-
- // Handles the request to migrate stats and subscribers during an identity crisis.
- register_rest_route( 'jetpack/v4', 'identity-crisis/migrate', array(
- 'methods' => WP_REST_Server::EDITABLE,
- 'callback' => __CLASS__ . '::migrate_stats_and_subscribers',
- 'permissison_callback' => __CLASS__ . '::identity_crisis_mitigation_permission_check',
- ) );
-
- // Return all modules
- register_rest_route( 'jetpack/v4', '/module/all', array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => array( $module_list_endpoint, 'process' ),
- 'permission_callback' => array( $module_list_endpoint, 'can_request' ),
- ) );
-
- // Activate many modules
- register_rest_route( 'jetpack/v4', '/module/all/active', array(
- 'methods' => WP_REST_Server::EDITABLE,
- 'callback' => array( $module_list_endpoint, 'process' ),
- 'permission_callback' => array( $module_list_endpoint, 'can_request' ),
- 'args' => array(
- 'modules' => array(
- 'default' => '',
- 'type' => 'array',
- 'items' => array(
- 'type' => 'string',
- ),
- 'required' => true,
- 'validate_callback' => __CLASS__ . '::validate_module_list',
- ),
- 'active' => array(
- 'default' => true,
- 'type' => 'boolean',
- 'required' => false,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- ),
- )
- ) );
-
- // Return a single module and update it when needed
- register_rest_route( 'jetpack/v4', '/module/(?P<slug>[a-z\-]+)', array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => array( $core_api_endpoint, 'process' ),
- 'permission_callback' => array( $core_api_endpoint, 'can_request' ),
- ) );
-
- // Activate and deactivate a module
- register_rest_route( 'jetpack/v4', '/module/(?P<slug>[a-z\-]+)/active', array(
- 'methods' => WP_REST_Server::EDITABLE,
- 'callback' => array( $module_toggle_endpoint, 'process' ),
- 'permission_callback' => array( $module_toggle_endpoint, 'can_request' ),
- 'args' => array(
- 'active' => array(
- 'default' => true,
- 'type' => 'boolean',
- 'required' => true,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- ),
- )
- ) );
-
- // Update a module
- register_rest_route( 'jetpack/v4', '/module/(?P<slug>[a-z\-]+)', array(
- 'methods' => WP_REST_Server::EDITABLE,
- 'callback' => array( $core_api_endpoint, 'process' ),
- 'permission_callback' => array( $core_api_endpoint, 'can_request' ),
- 'args' => self::get_updateable_parameters( 'any' )
- ) );
-
- // Get data for a specific module, i.e. Protect block count, WPCOM stats,
- // Akismet spam count, etc.
- register_rest_route( 'jetpack/v4', '/module/(?P<slug>[a-z\-]+)/data', array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => array( $module_data_endpoint, 'process' ),
- 'permission_callback' => array( $module_data_endpoint, 'can_request' ),
- 'args' => array(
- 'range' => array(
- 'default' => 'day',
- 'type' => 'string',
- 'required' => false,
- 'validate_callback' => __CLASS__ . '::validate_string',
- ),
- )
- ) );
-
- // Check if the API key for a specific service is valid or not
- register_rest_route( 'jetpack/v4', '/module/(?P<service>[a-z\-]+)/key/check', array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => array( $module_data_endpoint, 'key_check' ),
- 'permission_callback' => __CLASS__ . '::update_settings_permission_check',
- 'sanitize_callback' => 'sanitize_text_field',
- ) );
-
- register_rest_route( 'jetpack/v4', '/module/(?P<service>[a-z\-]+)/key/check', array(
- 'methods' => WP_REST_Server::EDITABLE,
- 'callback' => array( $module_data_endpoint, 'key_check' ),
- 'permission_callback' => __CLASS__ . '::update_settings_permission_check',
- 'sanitize_callback' => 'sanitize_text_field',
- 'args' => array(
- 'api_key' => array(
- 'default' => '',
- 'type' => 'string',
- 'validate_callback' => __CLASS__ . '::validate_alphanum',
- ),
- )
- ) );
-
- // Update any Jetpack module option or setting
- register_rest_route( 'jetpack/v4', '/settings', array(
- 'methods' => WP_REST_Server::EDITABLE,
- 'callback' => array( $core_api_endpoint, 'process' ),
- 'permission_callback' => array( $core_api_endpoint, 'can_request' ),
- 'args' => self::get_updateable_parameters( 'any' )
- ) );
-
- // Update a module
- register_rest_route( 'jetpack/v4', '/settings/(?P<slug>[a-z\-]+)', array(
- 'methods' => WP_REST_Server::EDITABLE,
- 'callback' => array( $core_api_endpoint, 'process' ),
- 'permission_callback' => array( $core_api_endpoint, 'can_request' ),
- 'args' => self::get_updateable_parameters()
- ) );
-
- // Return all module settings
- register_rest_route( 'jetpack/v4', '/settings/', array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => array( $core_api_endpoint, 'process' ),
- 'permission_callback' => array( $core_api_endpoint, 'can_request' ),
- ) );
-
- // Reset all Jetpack options
- register_rest_route( 'jetpack/v4', '/options/(?P<options>[a-z\-]+)', array(
- 'methods' => WP_REST_Server::EDITABLE,
- 'callback' => __CLASS__ . '::reset_jetpack_options',
- 'permission_callback' => __CLASS__ . '::manage_modules_permission_check',
- ) );
-
- // Return current Jumpstart status
- register_rest_route( 'jetpack/v4', '/jumpstart', array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => __CLASS__ . '::jumpstart_status',
- 'permission_callback' => __CLASS__ . '::update_settings_permission_check',
- ) );
-
- // Update Jumpstart
- register_rest_route( 'jetpack/v4', '/jumpstart', array(
- 'methods' => WP_REST_Server::EDITABLE,
- 'callback' => __CLASS__ . '::jumpstart_toggle',
- 'permission_callback' => __CLASS__ . '::manage_modules_permission_check',
- 'args' => array(
- 'active' => array(
- 'required' => true,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- ),
- ),
- ) );
-
- // Updates: get number of plugin updates available
- register_rest_route( 'jetpack/v4', '/updates/plugins', array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => __CLASS__ . '::get_plugin_update_count',
- 'permission_callback' => __CLASS__ . '::view_admin_page_permission_check',
- ) );
-
- // Dismiss Jetpack Notices
- register_rest_route( 'jetpack/v4', '/notice/(?P<notice>[a-z\-_]+)', array(
- 'methods' => WP_REST_Server::EDITABLE,
- 'callback' => __CLASS__ . '::dismiss_notice',
- 'permission_callback' => __CLASS__ . '::view_admin_page_permission_check',
- ) );
-
- // Plugins: get list of all plugins.
- register_rest_route( 'jetpack/v4', '/plugins', array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => __CLASS__ . '::get_plugins',
- 'permission_callback' => __CLASS__ . '::activate_plugins_permission_check',
- ) );
-
- // Plugins: check if the plugin is active.
- register_rest_route( 'jetpack/v4', '/plugin/(?P<plugin>[a-z\/\.\-_]+)', array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => __CLASS__ . '::get_plugin',
- 'permission_callback' => __CLASS__ . '::activate_plugins_permission_check',
- ) );
-
- // Widgets: get information about a widget that supports it.
- register_rest_route( 'jetpack/v4', '/widgets/(?P<id>[0-9a-z\-_]+)', array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => array( $widget_endpoint, 'process' ),
- 'permission_callback' => array( $widget_endpoint, 'can_request' ),
- ) );
-
- // Site Verify: check if the site is verified, and a get verification token if not
- register_rest_route( 'jetpack/v4', '/verify-site/(?P<service>[a-z\-_]+)', array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => __CLASS__ . '::is_site_verified_and_token',
- 'permission_callback' => __CLASS__ . '::update_settings_permission_check',
- ) );
-
- register_rest_route( 'jetpack/v4', '/verify-site/(?P<service>[a-z\-_]+)/(?<keyring_id>[0-9]+)', array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => __CLASS__ . '::is_site_verified_and_token',
- 'permission_callback' => __CLASS__ . '::update_settings_permission_check',
- ) );
-
- // Site Verify: tell a service to verify the site
- register_rest_route( 'jetpack/v4', '/verify-site/(?P<service>[a-z\-_]+)', array(
- 'methods' => WP_REST_Server::EDITABLE,
- 'callback' => __CLASS__ . '::verify_site',
- 'permission_callback' => __CLASS__ . '::update_settings_permission_check',
- 'args' => array(
- 'keyring_id' => array(
- 'required' => true,
- 'type' => 'integer',
- 'validate_callback' => __CLASS__ . '::validate_posint',
- ),
- )
- ) );
-
- // Get and set API keys.
- // Note: permission_callback intentionally omitted from the GET method.
- // Map block requires open access to API keys on the front end.
- register_rest_route(
- 'jetpack/v4',
- '/service-api-keys/(?P<service>[a-z\-_]+)',
- array(
- array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => __CLASS__ . '::get_service_api_key',
- ),
- array(
- 'methods' => WP_REST_Server::EDITABLE,
- 'callback' => __CLASS__ . '::update_service_api_key',
- 'permission_callback' => array( 'WPCOM_REST_API_V2_Endpoint_Service_API_Keys','edit_others_posts_check' ),
- 'args' => array(
- 'service_api_key' => array(
- 'required' => true,
- 'type' => 'text',
- ),
- ),
- ),
- array(
- 'methods' => WP_REST_Server::DELETABLE,
- 'callback' => __CLASS__ . '::delete_service_api_key',
- 'permission_callback' => array( 'WPCOM_REST_API_V2_Endpoint_Service_API_Keys','edit_others_posts_check' ),
- ),
- )
- );
- }
-
- public static function get_plans( $request ) {
- $request = Jetpack_Client::wpcom_json_api_request_as_user(
- '/plans?_locale=' . get_user_locale(),
- '2',
- array(
- 'method' => 'GET',
- 'headers' => array(
- 'X-Forwarded-For' => Jetpack::current_user_ip( true ),
- ),
- )
- );
-
- $body = wp_remote_retrieve_body( $request );
- if ( 200 === wp_remote_retrieve_response_code( $request ) ) {
- $data = $body;
- } else {
- // something went wrong so we'll just return the response without caching
- return $body;
- }
-
- return $data;
- }
-
- /**
- * Asks for a jitm, unless they've been disabled, in which case it returns an empty array
- *
- * @param $request WP_REST_Request
- *
- * @return array An array of jitms
- */
- public static function get_jitm_message( $request ) {
- require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-jitm.php' );
-
- $jitm = Jetpack_JITM::init();
-
- if ( ! $jitm ) {
- return array();
- }
-
- return $jitm->get_messages( $request['message_path'], urldecode_deep( $request['query'] ) );
- }
-
- /**
- * Dismisses a jitm
- * @param $request WP_REST_Request The request
- *
- * @return bool Always True
- */
- public static function delete_jitm_message( $request ) {
- require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-jitm.php' );
-
- $jitm = Jetpack_JITM::init();
-
- if ( ! $jitm ) {
- return true;
- }
-
- return $jitm->dismiss( $request['id'], $request['feature_class'] );
- }
-
- /**
- * Handles verification that a site is registered
- *
- * @since 5.4.0
- *
- * @param WP_REST_Request $request The request sent to the WP REST API.
- *
- * @return array|wp-error
- */
- public static function verify_registration( $request ) {
- require_once JETPACK__PLUGIN_DIR . 'class.jetpack-xmlrpc-server.php';
- $xmlrpc_server = new Jetpack_XMLRPC_Server();
- $result = $xmlrpc_server->verify_registration( array( $request['secret_1'], $request['state'] ) );
-
- if ( is_a( $result, 'IXR_Error' ) ) {
- $result = new WP_Error( $result->code, $result->message );
- }
-
- return $result;
- }
-
-
- /**
- * Checks if this site has been verified using a service - only 'google' supported at present - and a specfic
- * keyring to use to get the token if it is not
- *
- * Returns 'verified' = true/false, and a token if 'verified' is false and site is ready for verification
- *
- * @since 6.6.0
- *
- * @param WP_REST_Request $request The request sent to the WP REST API.
- *
- * @return array|wp-error
- */
- public static function is_site_verified_and_token( $request ) {
- /**
- * Return an error if the site uses a Maintenance / Coming Soon plugin
- * and if the plugin is configured to make the site private.
- *
- * We currently handle the following plugins:
- * - https://github.com/mojoness/mojo-marketplace-wp-plugin (used by bluehost)
- * - https://wordpress.org/plugins/mojo-under-construction
- * - https://wordpress.org/plugins/under-construction-page
- * - https://wordpress.org/plugins/ultimate-under-construction
- * - https://wordpress.org/plugins/coming-soon
- *
- * You can handle this in your own plugin thanks to the `jetpack_is_under_construction_plugin` filter.
- * If the filter returns true, we will consider the site as under construction.
- */
- $mm_coming_soon = get_option( 'mm_coming_soon', null );
- $under_construction_activation_status = get_option( 'underConstructionActivationStatus', null );
- $ucp_options = get_option( 'ucp_options', array() );
- $uuc_settings = get_option( 'uuc_settings', array() );
- $csp4 = get_option( 'seed_csp4_settings_content', array() );
- if (
- ( Jetpack::is_plugin_active( 'mojo-marketplace-wp-plugin/mojo-marketplace.php' ) && 'true' === $mm_coming_soon )
- || Jetpack::is_plugin_active( 'mojo-under-construction/mojo-contruction.php' ) && 1 == $under_construction_activation_status // WPCS: loose comparison ok.
- || ( Jetpack::is_plugin_active( 'under-construction-page/under-construction.php' ) && isset( $ucp_options['status'] ) && 1 == $ucp_options['status'] ) // WPCS: loose comparison ok.
- || ( Jetpack::is_plugin_active( 'ultimate-under-construction/ultimate-under-construction.php' ) && isset( $uuc_settings['enable'] ) && 1 == $uuc_settings['enable'] ) // WPCS: loose comparison ok.
- || ( Jetpack::is_plugin_active( 'coming-soon/coming-soon.php' ) && isset( $csp4['status'] ) && ( 1 == $csp4['status'] || 2 == $csp4['status'] ) ) // WPCS: loose comparison ok.
- /**
- * Allow plugins to mark a site as "under construction".
- *
- * @since 6.7.0
- *
- * @param false bool Is the site under construction? Default to false.
- */
- || true === apply_filters( 'jetpack_is_under_construction_plugin', false )
- ) {
- return new WP_Error( 'forbidden', __( 'Site is under construction and cannot be verified', 'jetpack' ) );
- }
-
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client( array(
- 'user_id' => get_current_user_id(),
- ) );
-
- $args = array(
- 'user_id' => get_current_user_id(),
- 'service' => $request[ 'service' ],
- );
-
- if ( isset( $request[ 'keyring_id' ] ) ) {
- $args[ 'keyring_id' ] = $request[ 'keyring_id' ];
- }
-
- $xml->query( 'jetpack.isSiteVerified', $args );
-
- if ( $xml->isError() ) {
- return new WP_Error( 'error_checking_if_site_verified_google', sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
- } else {
- return $xml->getResponse();
- }
- }
-
-
-
- public static function verify_site( $request ) {
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client( array(
- 'user_id' => get_current_user_id(),
- ) );
-
- $params = $request->get_json_params();
-
- $xml->query( 'jetpack.verifySite', array(
- 'user_id' => get_current_user_id(),
- 'service' => $request[ 'service' ],
- 'keyring_id' => $params[ 'keyring_id' ],
- )
- );
-
- if ( $xml->isError() ) {
- return new WP_Error( 'error_verifying_site_google', sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
- } else {
- $response = $xml->getResponse();
-
- if ( ! empty( $response['errors'] ) ) {
- $error = new WP_Error;
- $error->errors = $response['errors'];
- return $error;
- }
-
- return $response;
- }
- }
-
- /**
- * Handles verification that a site is registered
- *
- * @since 5.4.0
- *
- * @param WP_REST_Request $request The request sent to the WP REST API.
- *
- * @return array|wp-error
- */
- public static function remote_authorize( $request ) {
- require_once JETPACK__PLUGIN_DIR . 'class.jetpack-xmlrpc-server.php';
- $xmlrpc_server = new Jetpack_XMLRPC_Server();
- $result = $xmlrpc_server->remote_authorize( $request );
-
- if ( is_a( $result, 'IXR_Error' ) ) {
- $result = new WP_Error( $result->code, $result->message );
- }
-
- return $result;
- }
-
- /**
- * Handles dismissing of Jetpack Notices
- *
- * @since 4.3.0
- *
- * @param WP_REST_Request $request The request sent to the WP REST API.
- *
- * @return array|wp-error
- */
- public static function dismiss_notice( $request ) {
- $notice = $request['notice'];
-
- if ( ! isset( $request['dismissed'] ) || $request['dismissed'] !== true ) {
- return new WP_Error( 'invalid_param', esc_html__( 'Invalid parameter "dismissed".', 'jetpack' ), array( 'status' => 404 ) );
- }
-
- if ( isset( $notice ) && ! empty( $notice ) ) {
- switch( $notice ) {
- case 'feedback_dash_request':
- case 'welcome':
- $notices = get_option( 'jetpack_dismissed_notices', array() );
- $notices[ $notice ] = true;
- update_option( 'jetpack_dismissed_notices', $notices );
- return rest_ensure_response( get_option( 'jetpack_dismissed_notices', array() ) );
-
- default:
- return new WP_Error( 'invalid_param', esc_html__( 'Invalid parameter "notice".', 'jetpack' ), array( 'status' => 404 ) );
- }
- }
-
- return new WP_Error( 'required_param', esc_html__( 'Missing parameter "notice".', 'jetpack' ), array( 'status' => 404 ) );
- }
-
- /**
- * Verify that the user can disconnect the site.
- *
- * @since 4.3.0
- *
- * @return bool|WP_Error True if user is able to disconnect the site.
- */
- public static function disconnect_site_permission_callback() {
- if ( current_user_can( 'jetpack_disconnect' ) ) {
- return true;
- }
-
- return new WP_Error( 'invalid_user_permission_jetpack_disconnect', self::$user_permissions_error_msg, array( 'status' => self::rest_authorization_required_code() ) );
-
- }
-
- /**
- * Verify that the user can get a connect/link URL
- *
- * @since 4.3.0
- *
- * @return bool|WP_Error True if user is able to disconnect the site.
- */
- public static function connect_url_permission_callback() {
- if ( current_user_can( 'jetpack_connect_user' ) ) {
- return true;
- }
-
- return new WP_Error( 'invalid_user_permission_jetpack_disconnect', self::$user_permissions_error_msg, array( 'status' => self::rest_authorization_required_code() ) );
-
- }
-
- /**
- * Verify that a user can get the data about the current user.
- * Only those who can connect.
- *
- * @since 4.3.0
- *
- * @uses Jetpack::is_user_connected();
- *
- * @return bool|WP_Error True if user is able to unlink.
- */
- public static function get_user_connection_data_permission_callback() {
- if ( current_user_can( 'jetpack_connect_user' ) ) {
- return true;
- }
-
- return new WP_Error( 'invalid_user_permission_user_connection_data', self::$user_permissions_error_msg, array( 'status' => self::rest_authorization_required_code() ) );
- }
-
- /**
- * Check that user has permission to change the master user.
- *
- * @since 6.2.0
- *
- * @return bool|WP_Error True if user is able to change master user.
- */
- public static function set_connection_owner_permission_callback() {
- if ( get_current_user_id() === Jetpack_Options::get_option( 'master_user' ) ) {
- return true;
- }
-
- return new WP_Error( 'invalid_user_permission_set_connection_owner', self::$user_permissions_error_msg, array( 'status' => self::rest_authorization_required_code() ) );
- }
-
- /**
- * Verify that a user can use the /connection/user endpoint. Has to be a registered user and be currently linked.
- *
- * @since 4.3.0
- *
- * @uses Jetpack::is_user_connected();
- *
- * @return bool|WP_Error True if user is able to unlink.
- */
- public static function unlink_user_permission_callback() {
- if ( current_user_can( 'jetpack_connect_user' ) && Jetpack::is_user_connected( get_current_user_id() ) ) {
- return true;
- }
-
- return new WP_Error( 'invalid_user_permission_unlink_user', self::$user_permissions_error_msg, array( 'status' => self::rest_authorization_required_code() ) );
- }
-
- /**
- * Verify that user can manage Jetpack modules.
- *
- * @since 4.3.0
- *
- * @return bool Whether user has the capability 'jetpack_manage_modules'.
- */
- public static function manage_modules_permission_check() {
- if ( current_user_can( 'jetpack_manage_modules' ) ) {
- return true;
- }
-
- return new WP_Error( 'invalid_user_permission_manage_modules', self::$user_permissions_error_msg, array( 'status' => self::rest_authorization_required_code() ) );
- }
-
- /**
- * Verify that user can update Jetpack modules.
- *
- * @since 4.3.0
- *
- * @return bool Whether user has the capability 'jetpack_configure_modules'.
- */
- public static function configure_modules_permission_check() {
- if ( current_user_can( 'jetpack_configure_modules' ) ) {
- return true;
- }
-
- return new WP_Error( 'invalid_user_permission_configure_modules', self::$user_permissions_error_msg, array( 'status' => self::rest_authorization_required_code() ) );
- }
-
- /**
- * Verify that user can view Jetpack admin page.
- *
- * @since 4.3.0
- *
- * @return bool Whether user has the capability 'jetpack_admin_page'.
- */
- public static function view_admin_page_permission_check() {
- if ( current_user_can( 'jetpack_admin_page' ) ) {
- return true;
- }
-
- return new WP_Error( 'invalid_user_permission_view_admin', self::$user_permissions_error_msg, array( 'status' => self::rest_authorization_required_code() ) );
- }
-
- /**
- * Verify that user can mitigate an identity crisis.
- *
- * @since 4.4.0
- *
- * @return bool Whether user has capability 'jetpack_disconnect'.
- */
- public static function identity_crisis_mitigation_permission_check() {
- if ( current_user_can( 'jetpack_disconnect' ) ) {
- return true;
- }
-
- return new WP_Error( 'invalid_user_permission_identity_crisis', self::$user_permissions_error_msg, array( 'status' => self::rest_authorization_required_code() ) );
- }
-
- /**
- * Verify that user can update Jetpack general settings.
- *
- * @since 4.3.0
- *
- * @return bool Whether user has the capability 'update_settings_permission_check'.
- */
- public static function update_settings_permission_check() {
- if ( current_user_can( 'jetpack_configure_modules' ) ) {
- return true;
- }
-
- return new WP_Error( 'invalid_user_permission_manage_settings', self::$user_permissions_error_msg, array( 'status' => self::rest_authorization_required_code() ) );
- }
-
- /**
- * Verify that user can view Jetpack admin page and can activate plugins.
- *
- * @since 4.3.0
- *
- * @return bool Whether user has the capability 'jetpack_admin_page' and 'activate_plugins'.
- */
- public static function activate_plugins_permission_check() {
- if ( current_user_can( 'jetpack_admin_page' ) && current_user_can( 'activate_plugins' ) ) {
- return true;
- }
-
- return new WP_Error( 'invalid_user_permission_activate_plugins', self::$user_permissions_error_msg, array( 'status' => self::rest_authorization_required_code() ) );
- }
-
- /**
- * Verify that user can edit other's posts (Editors and Administrators).
- *
- * @return bool Whether user has the capability 'edit_others_posts'.
- */
- public static function edit_others_posts_check() {
- if ( current_user_can( 'edit_others_posts' ) ) {
- return true;
- }
-
- return new WP_Error( 'invalid_user_permission_edit_others_posts', self::$user_permissions_error_msg, array( 'status' => self::rest_authorization_required_code() ) );
- }
-
- /**
- * Contextual HTTP error code for authorization failure.
- *
- * Taken from rest_authorization_required_code() in WP-API plugin until is added to core.
- * @see https://github.com/WP-API/WP-API/commit/7ba0ae6fe4f605d5ffe4ee85b1cd5f9fb46900a6
- *
- * @since 4.3.0
- *
- * @return int
- */
- public static function rest_authorization_required_code() {
- return is_user_logged_in() ? 403 : 401;
- }
-
- /**
- * Get connection status for this Jetpack site.
- *
- * @since 4.3.0
- *
- * @return bool True if site is connected
- */
- public static function jetpack_connection_status() {
- return rest_ensure_response( array(
- 'isActive' => Jetpack::is_active(),
- 'isStaging' => Jetpack::is_staging_site(),
- 'devMode' => array(
- 'isActive' => Jetpack::is_development_mode(),
- 'constant' => defined( 'JETPACK_DEV_DEBUG' ) && JETPACK_DEV_DEBUG,
- 'url' => site_url() && false === strpos( site_url(), '.' ),
- 'filter' => apply_filters( 'jetpack_development_mode', false ),
- ),
- )
- );
- }
-
- /**
- * Test connection status for this Jetpack site.
- *
- * @since 6.8.0
- *
- * @return array|WP_Error WP_Error returned if connection test does not succeed.
- */
- public static function jetpack_connection_test() {
- jetpack_require_lib( 'debugger' );
- $cxntests = new Jetpack_Cxn_Tests();
-
- if ( $cxntests->pass() ) {
- return rest_ensure_response(
- array(
- 'code' => 'success',
- 'message' => __( 'All connection tests passed.', 'jetpack' ),
- )
- );
- } else {
- return $cxntests->output_fails_as_wp_error();
- }
- }
-
- /**
- * Test connection permission check method.
- *
- * @since 7.1.0
- *
- * @return bool
- */
- public static function view_jetpack_connection_test_check() {
- if ( ! isset( $_GET['signature'], $_GET['timestamp'], $_GET['url'] ) ) {
- return false;
- }
- $signature = base64_decode( $_GET['signature'] );
-
- $signature_data = wp_json_encode(
- array(
- 'rest_route' => $_GET['rest_route'],
- 'timestamp' => intval( $_GET['timestamp'] ),
- 'url' => wp_unslash( $_GET['url'] ),
- )
- );
-
- if (
- ! function_exists( 'openssl_verify' )
- || ! openssl_verify(
- $signature_data,
- $signature,
- JETPACK__DEBUGGER_PUBLIC_KEY
- )
- ) {
- return false;
- }
-
- // signature timestamp must be within 5min of current time
- if ( abs( time() - intval( $_GET['timestamp'] ) ) > 300 ) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Test connection status for this Jetpack site, encrypt the results for decryption by a third-party.
- *
- * @since 7.1.0
- *
- * @return array|mixed|object|WP_Error
- */
- public static function jetpack_connection_test_for_external() {
- // Since we are running this test for inclusion in the WP.com testing suite, let's not try to run them as part of these results.
- add_filter( 'jetpack_debugger_run_self_test', '__return_false' );
- jetpack_require_lib( 'debugger' );
- $cxntests = new Jetpack_Cxn_Tests();
-
- if ( $cxntests->pass() ) {
- $result = array(
- 'code' => 'success',
- 'message' => __( 'All connection tests passed.', 'jetpack' ),
- );
- } else {
- $error = $cxntests->output_fails_as_wp_error(); // Using this so the output is similar both ways.
- $errors = array();
-
- // Borrowed from WP_REST_Server::error_to_response().
- foreach ( (array) $error->errors as $code => $messages ) {
- foreach ( (array) $messages as $message ) {
- $errors[] = array(
- 'code' => $code,
- 'message' => $message,
- 'data' => $error->get_error_data( $code ),
- );
- }
- }
-
- $result = $errors[0];
- if ( count( $errors ) > 1 ) {
- // Remove the primary error.
- array_shift( $errors );
- $result['additional_errors'] = $errors;
- }
- }
-
- $result = wp_json_encode( $result );
-
- $encrypted = $cxntests->encrypt_string_for_wpcom( $result );
-
- if ( ! $encrypted || ! is_array( $encrypted ) ) {
- return rest_ensure_response(
- array(
- 'code' => 'action_required',
- 'message' => 'Please request results from the in-plugin debugger',
- )
- );
- }
-
- return rest_ensure_response(
- array(
- 'code' => 'response',
- 'debug' => array(
- 'data' => $encrypted['data'],
- 'key' => $encrypted['key'],
- ),
- )
- );
- }
-
- public static function rewind_data() {
- $site_id = Jetpack_Options::get_option( 'id' );
-
- if ( ! $site_id ) {
- return new WP_Error( 'site_id_missing' );
- }
-
- $response = Jetpack_Client::wpcom_json_api_request_as_blog( sprintf( '/sites/%d/rewind', $site_id ) .'?force=wpcom', '2', array(), null, 'wpcom' );
-
- if ( 200 !== wp_remote_retrieve_response_code( $response ) ) {
- return new WP_Error( 'rewind_data_fetch_failed' );
- }
-
- $body = wp_remote_retrieve_body( $response );
-
- return json_decode( $body );
- }
-
- /**
- * Get rewind data
- *
- * @since 5.7.0
- *
- * @return array Array of rewind properties.
- */
- public static function get_rewind_data() {
- $rewind_data = self::rewind_data();
-
- if ( ! is_wp_error( $rewind_data ) ) {
- return rest_ensure_response( array(
- 'code' => 'success',
- 'message' => esc_html__( 'Rewind data correctly received.', 'jetpack' ),
- 'data' => wp_json_encode( $rewind_data ),
- )
- );
- }
-
- if ( $rewind_data->get_error_code() === 'rewind_data_fetch_failed' ) {
- return new WP_Error( 'rewind_data_fetch_failed', esc_html__( 'Failed fetching rewind data. Try again later.', 'jetpack' ), array( 'status' => 400 ) );
- }
-
- if ( $rewind_data->get_error_code() === 'site_id_missing' ) {
- return new WP_Error( 'site_id_missing', esc_html__( 'The ID of this site does not exist.', 'jetpack' ), array( 'status' => 404 ) );
- }
-
- return new WP_Error(
- 'error_get_rewind_data',
- esc_html__( 'Could not retrieve Rewind data.', 'jetpack' ),
- array( 'status' => 500 )
- );
- }
-
- /**
- * Disconnects Jetpack from the WordPress.com Servers
- *
- * @uses Jetpack::disconnect();
- * @since 4.3.0
- *
- * @param WP_REST_Request $request The request sent to the WP REST API.
- *
- * @return bool|WP_Error True if Jetpack successfully disconnected.
- */
- public static function disconnect_site( $request ) {
-
- if ( ! isset( $request['isActive'] ) || $request['isActive'] !== false ) {
- return new WP_Error( 'invalid_param', esc_html__( 'Invalid Parameter', 'jetpack' ), array( 'status' => 404 ) );
- }
-
- if ( Jetpack::is_active() ) {
- Jetpack::disconnect();
- return rest_ensure_response( array( 'code' => 'success' ) );
- }
-
- return new WP_Error( 'disconnect_failed', esc_html__( 'Was not able to disconnect the site. Please try again.', 'jetpack' ), array( 'status' => 400 ) );
- }
-
- /**
- * Gets a new connect raw URL with fresh nonce.
- *
- * @uses Jetpack::disconnect();
- * @since 4.3.0
- *
- * @param WP_REST_Request $request The request sent to the WP REST API.
- *
- * @return string|WP_Error A raw URL if the connection URL could be built; error message otherwise.
- */
- public static function build_connect_url() {
- $url = Jetpack::init()->build_connect_url( true, false, false );
- if ( $url ) {
- return rest_ensure_response( $url );
- }
-
- return new WP_Error( 'build_connect_url_failed', esc_html__( 'Unable to build the connect URL. Please reload the page and try again.', 'jetpack' ), array( 'status' => 400 ) );
- }
-
- /**
- * Get miscellaneous user data related to the connection. Similar data available in old "My Jetpack".
- * Information about the master/primary user.
- * Information about the current user.
- *
- * @since 4.3.0
- *
- * @param WP_REST_Request $request The request sent to the WP REST API.
- *
- * @return object
- */
- public static function get_user_connection_data() {
- require_once( JETPACK__PLUGIN_DIR . '_inc/lib/admin-pages/class.jetpack-react-page.php' );
-
- $response = array(
-// 'othersLinked' => Jetpack::get_other_linked_admins(),
- 'currentUser' => jetpack_current_user_data(),
- );
- return rest_ensure_response( $response );
- }
-
- /**
- * Change the master user.
- *
- * @since 6.2.0
- *
- * @param WP_REST_Request $request The request sent to the WP REST API.
- *
- * @return bool|WP_Error True if owner successfully changed.
- */
- public static function set_connection_owner( $request ) {
- if ( ! isset( $request['owner'] ) ) {
- return new WP_Error(
- 'invalid_param',
- esc_html__( 'Invalid Parameter', 'jetpack' ),
- array( 'status' => 400 )
- );
- }
-
- $new_owner_id = $request['owner'];
- if ( ! user_can( $new_owner_id, 'administrator' ) ) {
- return new WP_Error(
- 'new_owner_not_admin',
- esc_html__( 'New owner is not admin', 'jetpack' ),
- array( 'status' => 400 )
- );
- }
-
- if ( $new_owner_id === get_current_user_id() ) {
- return new WP_Error(
- 'new_owner_is_current_user',
- esc_html__( 'New owner is same as current user', 'jetpack' ),
- array( 'status' => 400 )
- );
- }
-
- if ( ! Jetpack::is_user_connected( $new_owner_id ) ) {
- return new WP_Error(
- 'new_owner_not_connected',
- esc_html__( 'New owner is not connected', 'jetpack' ),
- array( 'status' => 400 )
- );
- }
-
- // Update the master user in Jetpack
- $updated = Jetpack_Options::update_option( 'master_user', $new_owner_id );
-
- // Notify WPCOM about the master user change
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client( array(
- 'user_id' => get_current_user_id(),
- ) );
- $xml->query( 'jetpack.switchBlogOwner', array(
- 'new_blog_owner' => $new_owner_id,
- ) );
-
- if ( $updated && ! $xml->isError() ) {
- return rest_ensure_response(
- array(
- 'code' => 'success',
- )
- );
- }
- return new WP_Error(
- 'error_setting_new_owner',
- esc_html__( 'Could not confirm new owner.', 'jetpack' ),
- array( 'status' => 500 )
- );
- }
-
- /**
- * Unlinks current user from the WordPress.com Servers.
- *
- * @since 4.3.0
- * @uses Jetpack::unlink_user
- *
- * @param WP_REST_Request $request The request sent to the WP REST API.
- *
- * @return bool|WP_Error True if user successfully unlinked.
- */
- public static function unlink_user( $request ) {
-
- if ( ! isset( $request['linked'] ) || $request['linked'] !== false ) {
- return new WP_Error( 'invalid_param', esc_html__( 'Invalid Parameter', 'jetpack' ), array( 'status' => 404 ) );
- }
-
- if ( Jetpack::unlink_user() ) {
- return rest_ensure_response(
- array(
- 'code' => 'success'
- )
- );
- }
-
- return new WP_Error( 'unlink_user_failed', esc_html__( 'Was not able to unlink the user. Please try again.', 'jetpack' ), array( 'status' => 400 ) );
- }
-
- /**
- * Gets current user's tracking settings.
- *
- * @since 6.0.0
- *
- * @param WP_REST_Request $request The request sent to the WP REST API.
- *
- * @return WP_REST_Response|WP_Error Response, else error.
- */
- public static function get_user_tracking_settings( $request ) {
- if ( ! Jetpack::is_user_connected() ) {
- $response = array(
- 'tracks_opt_out' => true, // Default to opt-out if not connected to wp.com.
- );
- } else {
- $response = Jetpack_Client::wpcom_json_api_request_as_user(
- '/jetpack-user-tracking',
- 'v2',
- array(
- 'method' => 'GET',
- 'headers' => array(
- 'X-Forwarded-For' => Jetpack::current_user_ip( true ),
- ),
- )
- );
- if ( ! is_wp_error( $response ) ) {
- $response = json_decode( wp_remote_retrieve_body( $response ), true );
- }
- }
-
- return rest_ensure_response( $response );
- }
-
- /**
- * Updates current user's tracking settings.
- *
- * @since 6.0.0
- *
- * @param WP_REST_Request $request The request sent to the WP REST API.
- *
- * @return WP_REST_Response|WP_Error Response, else error.
- */
- public static function update_user_tracking_settings( $request ) {
- if ( ! Jetpack::is_user_connected() ) {
- $response = array(
- 'tracks_opt_out' => true, // Default to opt-out if not connected to wp.com.
- );
- } else {
- $response = Jetpack_Client::wpcom_json_api_request_as_user(
- '/jetpack-user-tracking',
- 'v2',
- array(
- 'method' => 'PUT',
- 'headers' => array(
- 'Content-Type' => 'application/json',
- 'X-Forwarded-For' => Jetpack::current_user_ip( true ),
- ),
- ),
- wp_json_encode( $request->get_params() )
- );
- if ( ! is_wp_error( $response ) ) {
- $response = json_decode( wp_remote_retrieve_body( $response ), true );
- }
- }
-
- return rest_ensure_response( $response );
- }
-
- /**
- * Fetch site data from .com including the site's current plan.
- *
- * @since 5.5.0
- *
- * @return array Array of site properties.
- */
- public static function site_data() {
- $site_id = Jetpack_Options::get_option( 'id' );
-
- if ( ! $site_id ) {
- new WP_Error( 'site_id_missing' );
- }
-
- $response = Jetpack_Client::wpcom_json_api_request_as_blog( sprintf( '/sites/%d', $site_id ) .'?force=wpcom', '1.1' );
-
- if ( 200 !== wp_remote_retrieve_response_code( $response ) ) {
- return new WP_Error( 'site_data_fetch_failed' );
- }
-
- Jetpack_Plan::update_from_sites_response( $response );
-
- $body = wp_remote_retrieve_body( $response );
-
- return json_decode( $body );
- }
- /**
- * Get site data, including for example, the site's current plan.
- *
- * @since 4.3.0
- *
- * @return array Array of site properties.
- */
- public static function get_site_data() {
- $site_data = self::site_data();
-
- if ( ! is_wp_error( $site_data ) ) {
- return rest_ensure_response( array(
- 'code' => 'success',
- 'message' => esc_html__( 'Site data correctly received.', 'jetpack' ),
- 'data' => json_encode( $site_data ),
- )
- );
- }
- if ( $site_data->get_error_code() === 'site_data_fetch_failed' ) {
- return new WP_Error( 'site_data_fetch_failed', esc_html__( 'Failed fetching site data. Try again later.', 'jetpack' ), array( 'status' => 400 ) );
- }
-
- if ( $site_data->get_error_code() === 'site_id_missing' ) {
- return new WP_Error( 'site_id_missing', esc_html__( 'The ID of this site does not exist.', 'jetpack' ), array( 'status' => 404 ) );
- }
- }
-
- /**
- * Handles identity crisis mitigation, confirming safe mode for this site.
- *
- * @since 4.4.0
- *
- * @return bool | WP_Error True if option is properly set.
- */
- public static function confirm_safe_mode() {
- $updated = Jetpack_Options::update_option( 'safe_mode_confirmed', true );
- if ( $updated ) {
- return rest_ensure_response(
- array(
- 'code' => 'success'
- )
- );
- }
- return new WP_Error(
- 'error_setting_jetpack_safe_mode',
- esc_html__( 'Could not confirm safe mode.', 'jetpack' ),
- array( 'status' => 500 )
- );
- }
-
- /**
- * Handles identity crisis mitigation, migrating stats and subscribers from old url to this, new url.
- *
- * @since 4.4.0
- *
- * @return bool | WP_Error True if option is properly set.
- */
- public static function migrate_stats_and_subscribers() {
- if ( Jetpack_Options::get_option( 'sync_error_idc' ) && ! Jetpack_Options::delete_option( 'sync_error_idc' ) ) {
- return new WP_Error(
- 'error_deleting_sync_error_idc',
- esc_html__( 'Could not delete sync error option.', 'jetpack' ),
- array( 'status' => 500 )
- );
- }
-
- if ( Jetpack_Options::get_option( 'migrate_for_idc' ) || Jetpack_Options::update_option( 'migrate_for_idc', true ) ) {
- return rest_ensure_response(
- array(
- 'code' => 'success'
- )
- );
- }
- return new WP_Error(
- 'error_setting_jetpack_migrate',
- esc_html__( 'Could not confirm migration.', 'jetpack' ),
- array( 'status' => 500 )
- );
- }
-
- /**
- * This IDC resolution will disconnect the site and re-connect to a completely new
- * and separate shadow site than the original.
- *
- * It will first will disconnect the site without phoning home as to not disturb the production site.
- * It then builds a fresh connection URL and sends it back along with the response.
- *
- * @since 4.4.0
- * @return bool|WP_Error
- */
- public static function start_fresh_connection() {
- // First clear the options / disconnect.
- Jetpack::disconnect();
- return self::build_connect_url();
- }
-
- /**
- * Reset Jetpack options
- *
- * @since 4.3.0
- *
- * @param WP_REST_Request $request {
- * Array of parameters received by request.
- *
- * @type string $options Available options to reset are options|modules
- * }
- *
- * @return bool|WP_Error True if options were reset. Otherwise, a WP_Error instance with the corresponding error.
- */
- public static function reset_jetpack_options( $request ) {
-
- if ( ! isset( $request['reset'] ) || $request['reset'] !== true ) {
- return new WP_Error( 'invalid_param', esc_html__( 'Invalid Parameter', 'jetpack' ), array( 'status' => 404 ) );
- }
-
- if ( isset( $request['options'] ) ) {
- $data = $request['options'];
-
- switch( $data ) {
- case ( 'options' ) :
- $options_to_reset = Jetpack::get_jetpack_options_for_reset();
-
- // Reset the Jetpack options
- foreach ( $options_to_reset['jp_options'] as $option_to_reset ) {
- Jetpack_Options::delete_option( $option_to_reset );
- }
-
- foreach ( $options_to_reset['wp_options'] as $option_to_reset ) {
- delete_option( $option_to_reset );
- }
-
- // Reset to default modules
- $default_modules = Jetpack::get_default_modules();
- Jetpack::update_active_modules( $default_modules );
-
- // Jumpstart option is special
- Jetpack_Options::update_option( 'jumpstart', 'new_connection' );
- return rest_ensure_response( array(
- 'code' => 'success',
- 'message' => esc_html__( 'Jetpack options reset.', 'jetpack' ),
- ) );
- break;
-
- case 'modules':
- $default_modules = Jetpack::get_default_modules();
- Jetpack::update_active_modules( $default_modules );
- return rest_ensure_response( array(
- 'code' => 'success',
- 'message' => esc_html__( 'Modules reset to default.', 'jetpack' ),
- ) );
- break;
-
- default:
- return new WP_Error( 'invalid_param', esc_html__( 'Invalid Parameter', 'jetpack' ), array( 'status' => 404 ) );
- }
- }
-
- return new WP_Error( 'required_param', esc_html__( 'Missing parameter "type".', 'jetpack' ), array( 'status' => 404 ) );
- }
-
- /**
- * Retrieves the current status of Jumpstart.
- *
- * @since 4.5.0
- *
- * @return bool
- */
- public static function jumpstart_status() {
- return array(
- 'status' => Jetpack_Options::get_option( 'jumpstart' )
- );
- }
-
- /**
- * Toggles activation or deactivation of the JumpStart
- *
- * @since 4.3.0
- *
- * @param WP_REST_Request $request The request sent to the WP REST API.
- *
- * @return bool|WP_Error True if toggling Jumpstart succeeded. Otherwise, a WP_Error instance with the corresponding error.
- */
- public static function jumpstart_toggle( $request ) {
-
- if ( $request[ 'active' ] ) {
- return self::jumpstart_activate( $request );
- } else {
- return self::jumpstart_deactivate( $request );
- }
- }
-
- /**
- * Activates a series of valid Jetpack modules and initializes some options.
- *
- * @since 4.3.0
- *
- * @param WP_REST_Request $request The request sent to the WP REST API.
- *
- * @return bool|WP_Error True if Jumpstart succeeded. Otherwise, a WP_Error instance with the corresponding error.
- */
- public static function jumpstart_activate( $request ) {
- $modules = Jetpack::get_available_modules();
- $activate_modules = array();
- foreach ( $modules as $module ) {
- $module_info = Jetpack::get_module( $module );
- if ( isset( $module_info['feature'] ) && is_array( $module_info['feature'] ) && in_array( 'Jumpstart', $module_info['feature'] ) ) {
- $activate_modules[] = $module;
- }
- }
-
- // Collect success/error messages like modules that are properly activated.
- $result = array(
- 'activated_modules' => array(),
- 'failed_modules' => array(),
- );
-
- // Update the jumpstart option
- if ( 'new_connection' === Jetpack_Options::get_option( 'jumpstart' ) ) {
- $result['jumpstart_activated'] = Jetpack_Options::update_option( 'jumpstart', 'jumpstart_activated' );
- }
-
- // Check for possible conflicting plugins
- $module_slugs_filtered = Jetpack::init()->filter_default_modules( $activate_modules );
-
- foreach ( $module_slugs_filtered as $module_slug ) {
- Jetpack::log( 'activate', $module_slug );
- if ( Jetpack::activate_module( $module_slug, false, false ) ) {
- $result['activated_modules'][] = $module_slug;
- } else {
- $result['failed_modules'][] = $module_slug;
- }
- }
-
- // Set the default sharing buttons and set to display on posts if none have been set.
- $sharing_services = get_option( 'sharing-services' );
- $sharing_options = get_option( 'sharing-options' );
- if ( empty( $sharing_services['visible'] ) ) {
- // Default buttons to set
- $visible = array(
- 'twitter',
- 'facebook',
- );
- $hidden = array();
-
- // Set some sharing settings
- if ( class_exists( 'Sharing_Service' ) ) {
- $sharing = new Sharing_Service();
- $sharing_options['global'] = array(
- 'button_style' => 'icon',
- 'sharing_label' => $sharing->default_sharing_label,
- 'open_links' => 'same',
- 'show' => array( 'post' ),
- 'custom' => isset( $sharing_options['global']['custom'] ) ? $sharing_options['global']['custom'] : array()
- );
-
- $result['sharing_options'] = update_option( 'sharing-options', $sharing_options );
- $result['sharing_services'] = update_option( 'sharing-services', array( 'visible' => $visible, 'hidden' => $hidden ) );
- }
- }
-
- // If all Jumpstart modules were activated
- if ( empty( $result['failed_modules'] ) ) {
- return rest_ensure_response( array(
- 'code' => 'success',
- 'message' => esc_html__( 'Jumpstart done.', 'jetpack' ),
- 'data' => $result,
- ) );
- }
-
- return new WP_Error( 'jumpstart_failed', esc_html( sprintf( _n( 'Jumpstart failed activating this module: %s.', 'Jumpstart failed activating these modules: %s.', count( $result['failed_modules'] ), 'jetpack' ), join( ', ', $result['failed_modules'] ) ) ), array( 'status' => 400 ) );
- }
-
- /**
- * Dismisses Jumpstart so user is not prompted to go through it again.
- *
- * @since 4.3.0
- *
- * @param WP_REST_Request $request The request sent to the WP REST API.
- *
- * @return bool|WP_Error True if Jumpstart was disabled or was nothing to dismiss. Otherwise, a WP_Error instance with a message.
- */
- public static function jumpstart_deactivate( $request ) {
-
- // If dismissed, flag the jumpstart option as such.
- if ( 'new_connection' === Jetpack_Options::get_option( 'jumpstart' ) ) {
- if ( Jetpack_Options::update_option( 'jumpstart', 'jumpstart_dismissed' ) ) {
- return rest_ensure_response( array(
- 'code' => 'success',
- 'message' => esc_html__( 'Jumpstart dismissed.', 'jetpack' ),
- ) );
- } else {
- return new WP_Error( 'jumpstart_failed_dismiss', esc_html__( 'Jumpstart could not be dismissed.', 'jetpack' ), array( 'status' => 400 ) );
- }
- }
-
- // If this was not a new connection and there was nothing to dismiss, don't fail.
- return rest_ensure_response( array(
- 'code' => 'success',
- 'message' => esc_html__( 'Nothing to dismiss. This was not a new connection.', 'jetpack' ),
- ) );
- }
-
- /**
- * Get the query parameters to update module options or general settings.
- *
- * @since 4.3.0
- * @since 4.4.0 Accepts a $selector parameter.
- *
- * @param string $selector Selects a set of options to update, Can be empty, a module slug or 'any'.
- *
- * @return array
- */
- public static function get_updateable_parameters( $selector = '' ) {
- $parameters = array(
- 'context' => array(
- 'default' => 'edit',
- ),
- );
-
- return array_merge( $parameters, self::get_updateable_data_list( $selector ) );
- }
-
- /**
- * Returns a list of module options or general settings that can be updated.
- *
- * @since 4.3.0
- * @since 4.4.0 Accepts 'any' as a parameter which will make it return the entire list.
- *
- * @param string|array $selector Module slug, 'any', or an array of parameters.
- * If empty, it's assumed we're updating a module and we'll try to get its slug.
- * If 'any' the full list is returned.
- * If it's an array of parameters, includes the elements by matching keys.
- *
- * @return array
- */
- public static function get_updateable_data_list( $selector = '' ) {
-
- $options = array(
-
- // Carousel
- 'carousel_background_color' => array(
- 'description' => esc_html__( 'Color scheme.', 'jetpack' ),
- 'type' => 'string',
- 'default' => 'black',
- 'enum' => array(
- 'black',
- 'white',
- ),
- 'enum_labels' => array(
- 'black' => esc_html__( 'Black', 'jetpack' ),
- 'white' => esc_html__( 'White', 'jetpack' ),
- ),
- 'validate_callback' => __CLASS__ . '::validate_list_item',
- 'jp_group' => 'carousel',
- ),
- 'carousel_display_exif' => array(
- 'description' => wp_kses( sprintf( __( 'Show photo metadata (<a href="http://en.wikipedia.org/wiki/Exchangeable_image_file_format" target="_blank">Exif</a>) in carousel, when available.', 'jetpack' ) ), array( 'a' => array( 'href' => true, 'target' => true ) ) ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'carousel',
- ),
-
- // Comments
- 'highlander_comment_form_prompt' => array(
- 'description' => esc_html__( 'Greeting Text', 'jetpack' ),
- 'type' => 'string',
- 'default' => esc_html__( 'Leave a Reply', 'jetpack' ),
- 'sanitize_callback' => 'sanitize_text_field',
- 'jp_group' => 'comments',
- ),
- 'jetpack_comment_form_color_scheme' => array(
- 'description' => esc_html__( "Color scheme", 'jetpack' ),
- 'type' => 'string',
- 'default' => 'light',
- 'enum' => array(
- 'light',
- 'dark',
- 'transparent',
- ),
- 'enum_labels' => array(
- 'light' => esc_html__( 'Light', 'jetpack' ),
- 'dark' => esc_html__( 'Dark', 'jetpack' ),
- 'transparent' => esc_html__( 'Transparent', 'jetpack' ),
- ),
- 'validate_callback' => __CLASS__ . '::validate_list_item',
- 'jp_group' => 'comments',
- ),
-
- // Custom Content Types
- 'jetpack_portfolio' => array(
- 'description' => esc_html__( 'Enable or disable Jetpack portfolio post type.', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'custom-content-types',
- ),
- 'jetpack_portfolio_posts_per_page' => array(
- 'description' => esc_html__( 'Number of entries to show at most in Portfolio pages.', 'jetpack' ),
- 'type' => 'integer',
- 'default' => 10,
- 'validate_callback' => __CLASS__ . '::validate_posint',
- 'jp_group' => 'custom-content-types',
- ),
- 'jetpack_testimonial' => array(
- 'description' => esc_html__( 'Enable or disable Jetpack testimonial post type.', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'custom-content-types',
- ),
- 'jetpack_testimonial_posts_per_page' => array(
- 'description' => esc_html__( 'Number of entries to show at most in Testimonial pages.', 'jetpack' ),
- 'type' => 'integer',
- 'default' => 10,
- 'validate_callback' => __CLASS__ . '::validate_posint',
- 'jp_group' => 'custom-content-types',
- ),
-
- // Galleries
- 'tiled_galleries' => array(
- 'description' => esc_html__( 'Display all your gallery pictures in a cool mosaic.', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'tiled-gallery',
- ),
-
- 'gravatar_disable_hovercards' => array(
- 'description' => esc_html__( "View people's profiles when you mouse over their Gravatars", 'jetpack' ),
- 'type' => 'string',
- 'default' => 'enabled',
- // Not visible. This is used as the checkbox value.
- 'enum' => array(
- 'enabled',
- 'disabled',
- ),
- 'enum_labels' => array(
- 'enabled' => esc_html__( 'Enabled', 'jetpack' ),
- 'disabled' => esc_html__( 'Disabled', 'jetpack' ),
- ),
- 'validate_callback' => __CLASS__ . '::validate_list_item',
- 'jp_group' => 'gravatar-hovercards',
- ),
-
- // Infinite Scroll
- 'infinite_scroll' => array(
- 'description' => esc_html__( 'To infinity and beyond', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 1,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'infinite-scroll',
- ),
- 'infinite_scroll_google_analytics' => array(
- 'description' => esc_html__( 'Use Google Analytics with Infinite Scroll', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'infinite-scroll',
- ),
-
- // Likes
- 'wpl_default' => array(
- 'description' => esc_html__( 'WordPress.com Likes are', 'jetpack' ),
- 'type' => 'string',
- 'default' => 'on',
- 'enum' => array(
- 'on',
- 'off',
- ),
- 'enum_labels' => array(
- 'on' => esc_html__( 'On for all posts', 'jetpack' ),
- 'off' => esc_html__( 'Turned on per post', 'jetpack' ),
- ),
- 'validate_callback' => __CLASS__ . '::validate_list_item',
- 'jp_group' => 'likes',
- ),
- 'social_notifications_like' => array(
- 'description' => esc_html__( 'Send email notification when someone likes a post', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 1,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'likes',
- ),
-
- // Markdown
- 'wpcom_publish_comments_with_markdown' => array(
- 'description' => esc_html__( 'Use Markdown for comments.', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'markdown',
- ),
- 'wpcom_publish_posts_with_markdown' => array(
- 'description' => esc_html__( 'Use Markdown for posts.', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'markdown',
- ),
-
- // Mobile Theme
- 'wp_mobile_excerpt' => array(
- 'description' => esc_html__( 'Excerpts', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'minileven',
- ),
- 'wp_mobile_featured_images' => array(
- 'description' => esc_html__( 'Featured Images', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'minileven',
- ),
- 'wp_mobile_app_promos' => array(
- 'description' => esc_html__( 'Show a promo for the WordPress mobile apps in the footer of the mobile theme.', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'minileven',
- ),
-
- // Monitor
- 'monitor_receive_notifications' => array(
- 'description' => esc_html__( 'Receive Monitor Email Notifications.', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'monitor',
- ),
-
- // Post by Email
- 'post_by_email_address' => array(
- 'description' => esc_html__( 'Email Address', 'jetpack' ),
- 'type' => 'string',
- 'default' => 'noop',
- 'enum' => array(
- 'noop',
- 'create',
- 'regenerate',
- 'delete',
- ),
- 'enum_labels' => array(
- 'noop' => '',
- 'create' => esc_html__( 'Create Post by Email address', 'jetpack' ),
- 'regenerate' => esc_html__( 'Regenerate Post by Email address', 'jetpack' ),
- 'delete' => esc_html__( 'Delete Post by Email address', 'jetpack' ),
- ),
- 'validate_callback' => __CLASS__ . '::validate_list_item',
- 'jp_group' => 'post-by-email',
- ),
-
- // Protect
- 'jetpack_protect_key' => array(
- 'description' => esc_html__( 'Protect API key', 'jetpack' ),
- 'type' => 'string',
- 'default' => '',
- 'validate_callback' => __CLASS__ . '::validate_alphanum',
- 'jp_group' => 'protect',
- ),
- 'jetpack_protect_global_whitelist' => array(
- 'description' => esc_html__( 'Protect global whitelist', 'jetpack' ),
- 'type' => 'string',
- 'default' => '',
- 'validate_callback' => __CLASS__ . '::validate_string',
- 'sanitize_callback' => 'esc_textarea',
- 'jp_group' => 'protect',
- ),
-
- // Sharing
- 'sharing_services' => array(
- 'description' => esc_html__( 'Enabled Services and those hidden behind a button', 'jetpack' ),
- 'type' => 'object',
- 'default' => array(
- 'visible' => array( 'twitter', 'facebook', 'google-plus-1' ),
- 'hidden' => array(),
- ),
- 'validate_callback' => __CLASS__ . '::validate_services',
- 'jp_group' => 'sharedaddy',
- ),
- 'button_style' => array(
- 'description' => esc_html__( 'Button Style', 'jetpack' ),
- 'type' => 'string',
- 'default' => 'icon',
- 'enum' => array(
- 'icon-text',
- 'icon',
- 'text',
- 'official',
- ),
- 'enum_labels' => array(
- 'icon-text' => esc_html__( 'Icon + text', 'jetpack' ),
- 'icon' => esc_html__( 'Icon only', 'jetpack' ),
- 'text' => esc_html__( 'Text only', 'jetpack' ),
- 'official' => esc_html__( 'Official buttons', 'jetpack' ),
- ),
- 'validate_callback' => __CLASS__ . '::validate_list_item',
- 'jp_group' => 'sharedaddy',
- ),
- 'sharing_label' => array(
- 'description' => esc_html__( 'Sharing Label', 'jetpack' ),
- 'type' => 'string',
- 'default' => '',
- 'validate_callback' => __CLASS__ . '::validate_string',
- 'sanitize_callback' => 'esc_html',
- 'jp_group' => 'sharedaddy',
- ),
- 'show' => array(
- 'description' => esc_html__( 'Views where buttons are shown', 'jetpack' ),
- 'type' => 'array',
- 'items' => array(
- 'type' => 'string'
- ),
- 'default' => array( 'post' ),
- 'validate_callback' => __CLASS__ . '::validate_sharing_show',
- 'jp_group' => 'sharedaddy',
- ),
- 'jetpack-twitter-cards-site-tag' => array(
- 'description' => esc_html__( "The Twitter username of the owner of this site's domain.", 'jetpack' ),
- 'type' => 'string',
- 'default' => '',
- 'validate_callback' => __CLASS__ . '::validate_twitter_username',
- 'sanitize_callback' => 'esc_html',
- 'jp_group' => 'sharedaddy',
- ),
- 'sharedaddy_disable_resources' => array(
- 'description' => esc_html__( 'Disable CSS and JS', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'sharedaddy',
- ),
- 'custom' => array(
- 'description' => esc_html__( 'Custom sharing services added by user.', 'jetpack' ),
- 'type' => 'object',
- 'default' => array(
- 'sharing_name' => '',
- 'sharing_url' => '',
- 'sharing_icon' => '',
- ),
- 'validate_callback' => __CLASS__ . '::validate_custom_service',
- 'jp_group' => 'sharedaddy',
- ),
- // Not an option, but an action that can be perfomed on the list of custom services passing the service ID.
- 'sharing_delete_service' => array(
- 'description' => esc_html__( 'Delete custom sharing service.', 'jetpack' ),
- 'type' => 'string',
- 'default' => '',
- 'validate_callback' => __CLASS__ . '::validate_custom_service_id',
- 'jp_group' => 'sharedaddy',
- ),
-
- // SSO
- 'jetpack_sso_require_two_step' => array(
- 'description' => esc_html__( 'Require Two-Step Authentication', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'sso',
- ),
- 'jetpack_sso_match_by_email' => array(
- 'description' => esc_html__( 'Match by Email', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'sso',
- ),
-
- // Subscriptions
- 'stb_enabled' => array(
- 'description' => esc_html__( "Show a <em>'follow blog'</em> option in the comment form", 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 1,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'subscriptions',
- ),
- 'stc_enabled' => array(
- 'description' => esc_html__( "Show a <em>'follow comments'</em> option in the comment form", 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 1,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'subscriptions',
- ),
-
- // Related Posts
- 'show_headline' => array(
- 'description' => esc_html__( 'Highlight related content with a heading', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 1,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'related-posts',
- ),
- 'show_thumbnails' => array(
- 'description' => esc_html__( 'Show a thumbnail image where available', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'related-posts',
- ),
-
- // Spelling and Grammar - After the Deadline
- 'onpublish' => array(
- 'description' => esc_html__( 'Proofread when a post or page is first published.', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'after-the-deadline',
- ),
- 'onupdate' => array(
- 'description' => esc_html__( 'Proofread when a post or page is updated.', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'after-the-deadline',
- ),
- 'Bias Language' => array(
- 'description' => esc_html__( 'Bias Language', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'after-the-deadline',
- ),
- 'Cliches' => array(
- 'description' => esc_html__( 'Clichés', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'after-the-deadline',
- ),
- 'Complex Expression' => array(
- 'description' => esc_html__( 'Complex Phrases', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'after-the-deadline',
- ),
- 'Diacritical Marks' => array(
- 'description' => esc_html__( 'Diacritical Marks', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'after-the-deadline',
- ),
- 'Double Negative' => array(
- 'description' => esc_html__( 'Double Negatives', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'after-the-deadline',
- ),
- 'Hidden Verbs' => array(
- 'description' => esc_html__( 'Hidden Verbs', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'after-the-deadline',
- ),
- 'Jargon Language' => array(
- 'description' => esc_html__( 'Jargon', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'after-the-deadline',
- ),
- 'Passive voice' => array(
- 'description' => esc_html__( 'Passive Voice', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'after-the-deadline',
- ),
- 'Phrases to Avoid' => array(
- 'description' => esc_html__( 'Phrases to Avoid', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'after-the-deadline',
- ),
- 'Redundant Expression' => array(
- 'description' => esc_html__( 'Redundant Phrases', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'after-the-deadline',
- ),
- 'guess_lang' => array(
- 'description' => esc_html__( 'Use automatically detected language to proofread posts and pages', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'after-the-deadline',
- ),
- 'ignored_phrases' => array(
- 'description' => esc_html__( 'Add Phrase to be ignored', 'jetpack' ),
- 'type' => 'string',
- 'default' => '',
- 'sanitize_callback' => 'esc_html',
- 'jp_group' => 'after-the-deadline',
- ),
- 'unignore_phrase' => array(
- 'description' => esc_html__( 'Remove Phrase from being ignored', 'jetpack' ),
- 'type' => 'string',
- 'default' => '',
- 'sanitize_callback' => 'esc_html',
- 'jp_group' => 'after-the-deadline',
- ),
-
- // Verification Tools
- 'google' => array(
- 'description' => esc_html__( 'Google Search Console', 'jetpack' ),
- 'type' => 'string',
- 'default' => '',
- 'validate_callback' => __CLASS__ . '::validate_verification_service',
- 'jp_group' => 'verification-tools',
- ),
- 'bing' => array(
- 'description' => esc_html__( 'Bing Webmaster Center', 'jetpack' ),
- 'type' => 'string',
- 'default' => '',
- 'validate_callback' => __CLASS__ . '::validate_verification_service',
- 'jp_group' => 'verification-tools',
- ),
- 'pinterest' => array(
- 'description' => esc_html__( 'Pinterest Site Verification', 'jetpack' ),
- 'type' => 'string',
- 'default' => '',
- 'validate_callback' => __CLASS__ . '::validate_verification_service',
- 'jp_group' => 'verification-tools',
- ),
- 'yandex' => array(
- 'description' => esc_html__( 'Yandex Site Verification', 'jetpack' ),
- 'type' => 'string',
- 'default' => '',
- 'validate_callback' => __CLASS__ . '::validate_verification_service',
- 'jp_group' => 'verification-tools',
- ),
- 'enable_header_ad' => array(
- 'description' => esc_html__( 'Display an ad unit at the top of each page.', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 1,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'wordads',
- ),
- 'wordads_approved' => array(
- 'description' => esc_html__( 'Is site approved for WordAds?', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'wordads',
- ),
- 'wordads_second_belowpost' => array(
- 'description' => esc_html__( 'Display second ad below post?', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 1,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'wordads',
- ),
- 'wordads_display_front_page' => array(
- 'description' => esc_html__( 'Display ads on the front page?', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 1,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'wordads',
- ),
- 'wordads_display_post' => array(
- 'description' => esc_html__( 'Display ads on posts?', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 1,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'wordads',
- ),
- 'wordads_display_page' => array(
- 'description' => esc_html__( 'Display ads on pages?', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 1,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'wordads',
- ),
- 'wordads_display_archive' => array(
- 'description' => esc_html__( 'Display ads on archive pages?', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 1,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'wordads',
- ),
- 'wordads_custom_adstxt' => array(
- 'description' => esc_html__( 'Custom ads.txt entries', 'jetpack' ),
- 'type' => 'string',
- 'default' => '',
- 'validate_callback' => __CLASS__ . '::validate_string',
- 'sanitize_callback' => 'sanitize_textarea_field',
- 'jp_group' => 'wordads',
- ),
-
- // Google Analytics
- 'google_analytics_tracking_id' => array(
- 'description' => esc_html__( 'Google Analytics', 'jetpack' ),
- 'type' => 'string',
- 'default' => '',
- 'validate_callback' => __CLASS__ . '::validate_alphanum',
- 'jp_group' => 'google-analytics',
- ),
-
- // Stats
- 'admin_bar' => array(
- 'description' => esc_html__( 'Put a chart showing 48 hours of views in the admin bar.', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 1,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'stats',
- ),
- 'roles' => array(
- 'description' => esc_html__( 'Select the roles that will be able to view stats reports.', 'jetpack' ),
- 'type' => 'array',
- 'items' => array(
- 'type' => 'string'
- ),
- 'default' => array( 'administrator' ),
- 'validate_callback' => __CLASS__ . '::validate_stats_roles',
- 'sanitize_callback' => __CLASS__ . '::sanitize_stats_allowed_roles',
- 'jp_group' => 'stats',
- ),
- 'count_roles' => array(
- 'description' => esc_html__( 'Count the page views of registered users who are logged in.', 'jetpack' ),
- 'type' => 'array',
- 'items' => array(
- 'type' => 'string'
- ),
- 'default' => array( 'administrator' ),
- 'validate_callback' => __CLASS__ . '::validate_stats_roles',
- 'jp_group' => 'stats',
- ),
- 'blog_id' => array(
- 'description' => esc_html__( 'Blog ID.', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'stats',
- ),
- 'do_not_track' => array(
- 'description' => esc_html__( 'Do not track.', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 1,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'stats',
- ),
- 'hide_smile' => array(
- 'description' => esc_html__( 'Hide the stats smiley face image.', 'jetpack' ),
- 'type' => 'boolean',
- 'default' => 1,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'stats',
- ),
- 'version' => array(
- 'description' => esc_html__( 'Version.', 'jetpack' ),
- 'type' => 'integer',
- 'default' => 9,
- 'validate_callback' => __CLASS__ . '::validate_posint',
- 'jp_group' => 'stats',
- ),
-
- // Akismet - Not a module, but a plugin. The options can be passed and handled differently.
- 'akismet_show_user_comments_approved' => array(
- 'description' => '',
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'settings',
- ),
-
- 'wordpress_api_key' => array(
- 'description' => '',
- 'type' => 'string',
- 'default' => '',
- 'validate_callback' => __CLASS__ . '::validate_alphanum',
- 'jp_group' => 'settings',
- ),
-
- // Apps card on dashboard
- 'dismiss_dash_app_card' => array(
- 'description' => '',
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'settings',
- ),
-
- // Empty stats card dismiss
- 'dismiss_empty_stats_card' => array(
- 'description' => '',
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'settings',
- ),
-
- 'lang_id' => array(
- 'description' => esc_html__( 'Primary language for the site.', 'jetpack' ),
- 'type' => 'string',
- 'default' => 'en_US',
- 'jp_group' => 'settings',
- ),
-
- 'onboarding' => array(
- 'description' => '',
- 'type' => 'object',
- 'default' => array(
- 'siteTitle' => '',
- 'siteDescription' => '',
- 'siteType' => 'personal',
- 'homepageFormat' => 'posts',
- 'addContactForm' => 0,
- 'businessAddress' => array(
- 'name' => '',
- 'street' => '',
- 'city' => '',
- 'state' => '',
- 'zip' => '',
- ),
- 'installWooCommerce' => false,
- ),
- 'validate_callback' => __CLASS__ . '::validate_onboarding',
- 'jp_group' => 'settings',
- ),
-
- // Show welcome for newly purchased plan
- 'show_welcome_for_new_plan' => array(
- 'description' => '',
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'settings',
- ),
-
- );
-
- // Add modules to list so they can be toggled
- $modules = Jetpack::get_available_modules();
- if ( is_array( $modules ) && ! empty( $modules ) ) {
- $module_args = array(
- 'description' => '',
- 'type' => 'boolean',
- 'default' => 0,
- 'validate_callback' => __CLASS__ . '::validate_boolean',
- 'jp_group' => 'modules',
- );
- foreach( $modules as $module ) {
- $options[ $module ] = $module_args;
- }
- }
-
- if ( is_array( $selector ) ) {
-
- // Return only those options whose keys match $selector keys
- return array_intersect_key( $options, $selector );
- }
-
- if ( 'any' === $selector ) {
-
- // Toggle module or update any module option or any general setting
- return $options;
- }
-
- // We're updating the options for a single module.
- if ( empty( $selector ) ) {
- $selector = self::get_module_requested();
- }
- $selected = array();
- foreach ( $options as $option => $attributes ) {
-
- // Not adding an isset( $attributes['jp_group'] ) because if it's not set, it must be fixed, otherwise options will fail.
- if ( $selector === $attributes['jp_group'] ) {
- $selected[ $option ] = $attributes;
- }
- }
- return $selected;
- }
-
- /**
- * Validates that the parameters are proper values that can be set during Jetpack onboarding.
- *
- * @since 5.4.0
- *
- * @param array $onboarding_data Values to check.
- * @param WP_REST_Request $request The request sent to the WP REST API.
- * @param string $param Name of the parameter passed to endpoint holding $value.
- *
- * @return bool|WP_Error
- */
- public static function validate_onboarding( $onboarding_data, $request, $param ) {
- if ( ! is_array( $onboarding_data ) ) {
- return new WP_Error( 'invalid_param', esc_html__( 'Not valid onboarding data.', 'jetpack' ) );
- }
- foreach ( $onboarding_data as $value ) {
- if ( is_string( $value ) ) {
- $onboarding_choice = self::validate_string( $value, $request, $param );
- } elseif ( is_array( $value ) ) {
- $onboarding_choice = self::validate_onboarding( $value, $request, $param );
- } else {
- $onboarding_choice = self::validate_boolean( $value, $request, $param );
- }
- if ( is_wp_error( $onboarding_choice ) ) {
- return $onboarding_choice;
- }
- }
- return true;
- }
-
- /**
- * Validates that the parameter is either a pure boolean or a numeric string that can be mapped to a boolean.
- *
- * @since 4.3.0
- *
- * @param string|bool $value Value to check.
- * @param WP_REST_Request $request The request sent to the WP REST API.
- * @param string $param Name of the parameter passed to endpoint holding $value.
- *
- * @return bool|WP_Error
- */
- public static function validate_boolean( $value, $request, $param ) {
- if ( ! is_bool( $value ) && ! ( ( ctype_digit( $value ) || is_numeric( $value ) ) && in_array( $value, array( 0, 1 ) ) ) ) {
- return new WP_Error( 'invalid_param', sprintf( esc_html__( '%s must be true, false, 0 or 1.', 'jetpack' ), $param ) );
- }
- return true;
- }
-
- /**
- * Validates that the parameter is a positive integer.
- *
- * @since 4.3.0
- *
- * @param int $value Value to check.
- * @param WP_REST_Request $request The request sent to the WP REST API.
- * @param string $param Name of the parameter passed to endpoint holding $value.
- *
- * @return bool|WP_Error
- */
- public static function validate_posint( $value = 0, $request, $param ) {
- if ( ! is_numeric( $value ) || $value <= 0 ) {
- return new WP_Error( 'invalid_param', sprintf( esc_html__( '%s must be a positive integer.', 'jetpack' ), $param ) );
- }
- return true;
- }
-
- /**
- * Validates that the parameter belongs to a list of admitted values.
- *
- * @since 4.3.0
- *
- * @param string $value Value to check.
- * @param WP_REST_Request $request The request sent to the WP REST API.
- * @param string $param Name of the parameter passed to endpoint holding $value.
- *
- * @return bool|WP_Error
- */
- public static function validate_list_item( $value = '', $request, $param ) {
- $attributes = $request->get_attributes();
- if ( ! isset( $attributes['args'][ $param ] ) || ! is_array( $attributes['args'][ $param ] ) ) {
- return new WP_Error( 'invalid_param', sprintf( esc_html__( '%s not recognized', 'jetpack' ), $param ) );
- }
- $args = $attributes['args'][ $param ];
- if ( ! empty( $args['enum'] ) ) {
-
- // If it's an associative array, use the keys to check that the value is among those admitted.
- $enum = ( count( array_filter( array_keys( $args['enum'] ), 'is_string' ) ) > 0 ) ? array_keys( $args['enum'] ) : $args['enum'];
- if ( ! in_array( $value, $enum ) ) {
- return new WP_Error( 'invalid_param_value', sprintf(
- /* Translators: first variable is the parameter passed to endpoint that holds the list item, the second is a list of admitted values. */
- esc_html__( '%1$s must be one of %2$s', 'jetpack' ), $param, implode( ', ', $enum )
- ) );
- }
- }
- return true;
- }
-
- /**
- * Validates that the parameter belongs to a list of admitted values.
- *
- * @since 4.3.0
- *
- * @param string $value Value to check.
- * @param WP_REST_Request $request The request sent to the WP REST API.
- * @param string $param Name of the parameter passed to endpoint holding $value.
- *
- * @return bool|WP_Error
- */
- public static function validate_module_list( $value = '', $request, $param ) {
- if ( ! is_array( $value ) ) {
- return new WP_Error( 'invalid_param_value', sprintf( esc_html__( '%s must be an array', 'jetpack' ), $param ) );
- }
-
- $modules = Jetpack::get_available_modules();
-
- if ( count( array_intersect( $value, $modules ) ) != count( $value ) ) {
- return new WP_Error( 'invalid_param_value', sprintf( esc_html__( '%s must be a list of valid modules', 'jetpack' ), $param ) );
- }
-
- return true;
- }
-
- /**
- * Validates that the parameter is an alphanumeric or empty string (to be able to clear the field).
- *
- * @since 4.3.0
- *
- * @param string $value Value to check.
- * @param WP_REST_Request $request The request sent to the WP REST API.
- * @param string $param Name of the parameter passed to endpoint holding $value.
- *
- * @return bool|WP_Error
- */
- public static function validate_alphanum( $value = '', $request, $param ) {
- if ( ! empty( $value ) && ( ! is_string( $value ) || ! preg_match( '/^[a-z0-9]+$/i', $value ) ) ) {
- return new WP_Error( 'invalid_param', sprintf( esc_html__( '%s must be an alphanumeric string.', 'jetpack' ), $param ) );
- }
- return true;
- }
-
- /**
- * Validates that the parameter is a tag or id for a verification service, or an empty string (to be able to clear the field).
- *
- * @since 4.6.0
- *
- * @param string $value Value to check.
- * @param WP_REST_Request $request
- * @param string $param Name of the parameter passed to endpoint holding $value.
- *
- * @return bool|WP_Error
- */
- public static function validate_verification_service( $value = '', $request, $param ) {
- if ( ! empty( $value ) && ! ( is_string( $value ) && ( preg_match( '/^[a-z0-9_-]+$/i', $value ) || jetpack_verification_get_code( $value ) !== false ) ) ) {
- return new WP_Error( 'invalid_param', sprintf( esc_html__( '%s must be an alphanumeric string or a verification tag.', 'jetpack' ), $param ) );
- }
- return true;
- }
-
- /**
- * Validates that the parameter is among the roles allowed for Stats.
- *
- * @since 4.3.0
- *
- * @param string|bool $value Value to check.
- * @param WP_REST_Request $request The request sent to the WP REST API.
- * @param string $param Name of the parameter passed to endpoint holding $value.
- *
- * @return bool|WP_Error
- */
- public static function validate_stats_roles( $value, $request, $param ) {
- if ( ! empty( $value ) && ! array_intersect( self::$stats_roles, $value ) ) {
- return new WP_Error( 'invalid_param', sprintf(
- /* Translators: first variable is the name of a parameter passed to endpoint holding the role that will be checked, the second is a list of roles allowed to see stats. The parameter is checked against this list. */
- esc_html__( '%1$s must be %2$s.', 'jetpack' ), $param, join( ', ', self::$stats_roles )
- ) );
- }
- return true;
- }
-
- /**
- * Validates that the parameter is among the views where the Sharing can be displayed.
- *
- * @since 4.3.0
- *
- * @param string|bool $value Value to check.
- * @param WP_REST_Request $request The request sent to the WP REST API.
- * @param string $param Name of the parameter passed to endpoint holding $value.
- *
- * @return bool|WP_Error
- */
- public static function validate_sharing_show( $value, $request, $param ) {
- $views = array( 'index', 'post', 'page', 'attachment', 'jetpack-portfolio' );
- if ( ! is_array( $value ) ) {
- return new WP_Error( 'invalid_param', sprintf( esc_html__( '%s must be an array of post types.', 'jetpack' ), $param ) );
- }
- if ( ! array_intersect( $views, $value ) ) {
- return new WP_Error( 'invalid_param', sprintf(
- /* Translators: first variable is the name of a parameter passed to endpoint holding the post type where Sharing will be displayed, the second is a list of post types where Sharing can be displayed */
- esc_html__( '%1$s must be %2$s.', 'jetpack' ), $param, join( ', ', $views )
- ) );
- }
- return true;
- }
-
- /**
- * Validates that the parameter is among the views where the Sharing can be displayed.
- *
- * @since 4.3.0
- *
- * @param string|bool $value {
- * Value to check received by request.
- *
- * @type array $visible List of slug of services to share to that are displayed directly in the page.
- * @type array $hidden List of slug of services to share to that are concealed in a folding menu.
- * }
- * @param WP_REST_Request $request The request sent to the WP REST API.
- * @param string $param Name of the parameter passed to endpoint holding $value.
- *
- * @return bool|WP_Error
- */
- public static function validate_services( $value, $request, $param ) {
- if ( ! is_array( $value ) || ! isset( $value['visible'] ) || ! isset( $value['hidden'] ) ) {
- return new WP_Error( 'invalid_param', sprintf( esc_html__( '%s must be an array with visible and hidden items.', 'jetpack' ), $param ) );
- }
-
- // Allow to clear everything.
- if ( empty( $value['visible'] ) && empty( $value['hidden'] ) ) {
- return true;
- }
-
- if ( ! class_exists( 'Sharing_Service' ) && ! include_once( JETPACK__PLUGIN_DIR . 'modules/sharedaddy/sharing-service.php' ) ) {
- return new WP_Error( 'invalid_param', esc_html__( 'Failed loading required dependency Sharing_Service.', 'jetpack' ) );
- }
- $sharer = new Sharing_Service();
- $services = array_keys( $sharer->get_all_services() );
-
- if (
- ( ! empty( $value['visible'] ) && ! array_intersect( $value['visible'], $services ) )
- ||
- ( ! empty( $value['hidden'] ) && ! array_intersect( $value['hidden'], $services ) ) )
- {
- return new WP_Error( 'invalid_param', sprintf(
- /* Translators: placeholder 1 is a parameter holding the services passed to endpoint, placeholder 2 is a list of all Jetpack Sharing services */
- esc_html__( '%1$s visible and hidden items must be a list of %2$s.', 'jetpack' ), $param, join( ', ', $services )
- ) );
- }
- return true;
- }
-
- /**
- * Validates that the parameter has enough information to build a custom sharing button.
- *
- * @since 4.3.0
- *
- * @param string|bool $value Value to check.
- * @param WP_REST_Request $request The request sent to the WP REST API.
- * @param string $param Name of the parameter passed to endpoint holding $value.
- *
- * @return bool|WP_Error
- */
- public static function validate_custom_service( $value, $request, $param ) {
- if ( ! is_array( $value ) || ! isset( $value['sharing_name'] ) || ! isset( $value['sharing_url'] ) || ! isset( $value['sharing_icon'] ) ) {
- return new WP_Error( 'invalid_param', sprintf( esc_html__( '%s must be an array with sharing name, url and icon.', 'jetpack' ), $param ) );
- }
-
- // Allow to clear everything.
- if ( empty( $value['sharing_name'] ) && empty( $value['sharing_url'] ) && empty( $value['sharing_icon'] ) ) {
- return true;
- }
-
- if ( ! class_exists( 'Sharing_Service' ) && ! include_once( JETPACK__PLUGIN_DIR . 'modules/sharedaddy/sharing-service.php' ) ) {
- return new WP_Error( 'invalid_param', esc_html__( 'Failed loading required dependency Sharing_Service.', 'jetpack' ) );
- }
-
- if ( ( ! empty( $value['sharing_name'] ) && ! is_string( $value['sharing_name'] ) )
- || ( ! empty( $value['sharing_url'] ) && ! is_string( $value['sharing_url'] ) )
- || ( ! empty( $value['sharing_icon'] ) && ! is_string( $value['sharing_icon'] ) ) ) {
- return new WP_Error( 'invalid_param', sprintf( esc_html__( '%s needs sharing name, url and icon.', 'jetpack' ), $param ) );
- }
- return true;
- }
-
- /**
- * Validates that the parameter is a custom sharing service ID like 'custom-1461976264'.
- *
- * @since 4.3.0
- *
- * @param string $value Value to check.
- * @param WP_REST_Request $request The request sent to the WP REST API.
- * @param string $param Name of the parameter passed to endpoint holding $value.
- *
- * @return bool|WP_Error
- */
- public static function validate_custom_service_id( $value = '', $request, $param ) {
- if ( ! empty( $value ) && ( ! is_string( $value ) || ! preg_match( '/custom\-[0-1]+/i', $value ) ) ) {
- return new WP_Error( 'invalid_param', sprintf( esc_html__( "%s must be a string prefixed with 'custom-' and followed by a numeric ID.", 'jetpack' ), $param ) );
- }
-
- if ( ! class_exists( 'Sharing_Service' ) && ! include_once( JETPACK__PLUGIN_DIR . 'modules/sharedaddy/sharing-service.php' ) ) {
- return new WP_Error( 'invalid_param', esc_html__( 'Failed loading required dependency Sharing_Service.', 'jetpack' ) );
- }
- $sharer = new Sharing_Service();
- $services = array_keys( $sharer->get_all_services() );
-
- if ( ! empty( $value ) && ! in_array( $value, $services ) ) {
- return new WP_Error( 'invalid_param', sprintf( esc_html__( '%s is not a registered custom sharing service.', 'jetpack' ), $param ) );
- }
-
- return true;
- }
-
- /**
- * Validates that the parameter is a Twitter username or empty string (to be able to clear the field).
- *
- * @since 4.3.0
- *
- * @param string $value Value to check.
- * @param WP_REST_Request $request
- * @param string $param Name of the parameter passed to endpoint holding $value.
- *
- * @return bool|WP_Error
- */
- public static function validate_twitter_username( $value = '', $request, $param ) {
- if ( ! empty( $value ) && ( ! is_string( $value ) || ! preg_match( '/^@?\w{1,15}$/i', $value ) ) ) {
- return new WP_Error( 'invalid_param', sprintf( esc_html__( '%s must be a Twitter username.', 'jetpack' ), $param ) );
- }
- return true;
- }
-
- /**
- * Validates that the parameter is a string.
- *
- * @since 4.3.0
- *
- * @param string $value Value to check.
- * @param WP_REST_Request $request The request sent to the WP REST API.
- * @param string $param Name of the parameter passed to endpoint holding $value.
- *
- * @return bool|WP_Error
- */
- public static function validate_string( $value = '', $request, $param ) {
- if ( ! is_string( $value ) ) {
- return new WP_Error( 'invalid_param', sprintf( esc_html__( '%s must be a string.', 'jetpack' ), $param ) );
- }
- return true;
- }
-
- /**
- * If for some reason the roles allowed to see Stats are empty (for example, user tampering with checkboxes),
- * return an array with only 'administrator' as the allowed role and save it for 'roles' option.
- *
- * @since 4.3.0
- *
- * @param string|bool $value Value to check.
- *
- * @return bool|array
- */
- public static function sanitize_stats_allowed_roles( $value ) {
- if ( empty( $value ) ) {
- return array( 'administrator' );
- }
- return $value;
- }
-
- /**
- * Get the currently accessed route and return the module slug in it.
- *
- * @since 4.3.0
- *
- * @param string $route Regular expression for the endpoint with the module slug to return.
- *
- * @return array|string
- */
- public static function get_module_requested( $route = '/module/(?P<slug>[a-z\-]+)' ) {
-
- if ( empty( $GLOBALS['wp']->query_vars['rest_route'] ) ) {
- return '';
- }
-
- preg_match( "#$route#", $GLOBALS['wp']->query_vars['rest_route'], $module );
-
- if ( empty( $module['slug'] ) ) {
- return '';
- }
-
- return $module['slug'];
- }
-
- /**
- * Adds extra information for modules.
- *
- * @since 4.3.0
- *
- * @param string|array $modules Can be a single module or a list of modules.
- * @param null|string $slug Slug of the module in the first parameter.
- *
- * @return array|string
- */
- public static function prepare_modules_for_response( $modules = '', $slug = null ) {
- global $wp_rewrite;
-
- /** This filter is documented in modules/sitemaps/sitemaps.php */
- $location = apply_filters( 'jetpack_sitemap_location', '' );
-
- if ( $wp_rewrite->using_index_permalinks() ) {
- $sitemap_url = home_url( '/index.php' . $location . '/sitemap.xml' );
- $news_sitemap_url = home_url( '/index.php' . $location . '/news-sitemap.xml' );
- } else if ( $wp_rewrite->using_permalinks() ) {
- $sitemap_url = home_url( $location . '/sitemap.xml' );
- $news_sitemap_url = home_url( $location . '/news-sitemap.xml' );
- } else {
- $sitemap_url = home_url( $location . '/?jetpack-sitemap=sitemap.xml' );
- $news_sitemap_url = home_url( $location . '/?jetpack-sitemap=news-sitemap.xml' );
- }
-
- if ( is_null( $slug ) && isset( $modules['sitemaps'] ) ) {
- // Is a list of modules
- $modules['sitemaps']['extra']['sitemap_url'] = $sitemap_url;
- $modules['sitemaps']['extra']['news_sitemap_url'] = $news_sitemap_url;
- } elseif ( 'sitemaps' == $slug ) {
- // It's a single module
- $modules['extra']['sitemap_url'] = $sitemap_url;
- $modules['extra']['news_sitemap_url'] = $news_sitemap_url;
- }
- return $modules;
- }
-
- /**
- * Remove 'validate_callback' item from options available for module.
- * Fetch current option value and add to array of module options.
- * Prepare values of module options that need special handling, like those saved in wpcom.
- *
- * @since 4.3.0
- *
- * @param string $module Module slug.
- * @return array
- */
- public static function prepare_options_for_response( $module = '' ) {
- $options = self::get_updateable_data_list( $module );
-
- if ( ! is_array( $options ) || empty( $options ) ) {
- return $options;
- }
-
- // Some modules need special treatment.
- switch ( $module ) {
-
- case 'monitor':
- // Status of user notifications
- $options['monitor_receive_notifications']['current_value'] = self::cast_value( self::get_remote_value( 'monitor', 'monitor_receive_notifications' ), $options['monitor_receive_notifications'] );
- break;
-
- case 'post-by-email':
- // Email address
- $options['post_by_email_address']['current_value'] = self::cast_value( self::get_remote_value( 'post-by-email', 'post_by_email_address' ), $options['post_by_email_address'] );
- break;
-
- case 'protect':
- // Protect
- $options['jetpack_protect_key']['current_value'] = get_site_option( 'jetpack_protect_key', false );
- if ( ! function_exists( 'jetpack_protect_format_whitelist' ) ) {
- include_once( JETPACK__PLUGIN_DIR . 'modules/protect/shared-functions.php' );
- }
- $options['jetpack_protect_global_whitelist']['current_value'] = jetpack_protect_format_whitelist();
- break;
-
- case 'related-posts':
- // It's local, but it must be broken apart since it's saved as an array.
- $options = self::split_options( $options, Jetpack_Options::get_option( 'relatedposts' ) );
- break;
-
- case 'verification-tools':
- // It's local, but it must be broken apart since it's saved as an array.
- $options = self::split_options( $options, get_option( 'verification_services_codes' ) );
- break;
-
- case 'google-analytics':
- $wga = get_option( 'jetpack_wga' );
- $code = '';
- if ( is_array( $wga ) && array_key_exists( 'code', $wga ) ) {
- $code = $wga[ 'code' ];
- }
- $options[ 'google_analytics_tracking_id' ][ 'current_value' ] = $code;
- break;
-
- case 'sharedaddy':
- // It's local, but it must be broken apart since it's saved as an array.
- if ( ! class_exists( 'Sharing_Service' ) && ! include_once( JETPACK__PLUGIN_DIR . 'modules/sharedaddy/sharing-service.php' ) ) {
- break;
- }
- $sharer = new Sharing_Service();
- $options = self::split_options( $options, $sharer->get_global_options() );
- $options['sharing_services']['current_value'] = $sharer->get_blog_services();
- $other_sharedaddy_options = array( 'jetpack-twitter-cards-site-tag', 'sharedaddy_disable_resources', 'sharing_delete_service' );
- foreach ( $other_sharedaddy_options as $key ) {
- $default_value = isset( $options[ $key ]['default'] ) ? $options[ $key ]['default'] : '';
- $current_value = get_option( $key, $default_value );
- $options[ $key ]['current_value'] = self::cast_value( $current_value, $options[ $key ] );
- }
- break;
-
- case 'after-the-deadline':
- if ( ! function_exists( 'AtD_get_options' ) ) {
- include_once( JETPACK__PLUGIN_DIR . 'modules/after-the-deadline.php' );
- }
- $atd_options = array_merge( AtD_get_options( get_current_user_id(), 'AtD_options' ), AtD_get_options( get_current_user_id(), 'AtD_check_when' ) );
- unset( $atd_options['name'] );
- foreach ( $atd_options as $key => $value ) {
- $options[ $key ]['current_value'] = self::cast_value( $value, $options[ $key ] );
- }
- $atd_options = AtD_get_options( get_current_user_id(), 'AtD_guess_lang' );
- $options['guess_lang']['current_value'] = self::cast_value( isset( $atd_options['true'] ), $options[ 'guess_lang' ] );
- $options['ignored_phrases']['current_value'] = AtD_get_setting( get_current_user_id(), 'AtD_ignored_phrases' );
- unset( $options['unignore_phrase'] );
- break;
-
- case 'stats':
- // It's local, but it must be broken apart since it's saved as an array.
- if ( ! function_exists( 'stats_get_options' ) ) {
- include_once( JETPACK__PLUGIN_DIR . 'modules/stats.php' );
- }
- $options = self::split_options( $options, stats_get_options() );
- break;
- default:
- // These option are just stored as plain WordPress options.
- foreach ( $options as $key => $value ) {
- $default_value = isset( $options[ $key ]['default'] ) ? $options[ $key ]['default'] : '';
- $current_value = get_option( $key, $default_value );
- $options[ $key ]['current_value'] = self::cast_value( $current_value, $options[ $key ] );
- }
- }
- // At this point some options have current_value not set because they're options
- // that only get written on update, so we set current_value to the default one.
- foreach ( $options as $key => $value ) {
- // We don't need validate_callback in the response
- if ( isset( $options[ $key ]['validate_callback'] ) ) {
- unset( $options[ $key ]['validate_callback'] );
- }
- $default_value = isset( $options[ $key ]['default'] ) ? $options[ $key ]['default'] : '';
- if ( ! array_key_exists( 'current_value', $options[ $key ] ) ) {
- $options[ $key ]['current_value'] = self::cast_value( $default_value, $options[ $key ] );
- }
- }
- return $options;
- }
-
- /**
- * Splits module options saved as arrays like relatedposts or verification_services_codes into separate options to be returned in the response.
- *
- * @since 4.3.0
- *
- * @param array $separate_options Array of options admitted by the module.
- * @param array $grouped_options Option saved as array to be splitted.
- * @param string $prefix Optional prefix for the separate option keys.
- *
- * @return array
- */
- public static function split_options( $separate_options, $grouped_options, $prefix = '' ) {
- if ( is_array( $grouped_options ) ) {
- foreach ( $grouped_options as $key => $value ) {
- $option_key = $prefix . $key;
- if ( isset( $separate_options[ $option_key ] ) ) {
- $separate_options[ $option_key ]['current_value'] = self::cast_value( $grouped_options[ $key ], $separate_options[ $option_key ] );
- }
- }
- }
- return $separate_options;
- }
-
- /**
- * Perform a casting to the value specified in the option definition.
- *
- * @since 4.3.0
- *
- * @param mixed $value Value to cast to the proper type.
- * @param array $definition Type to cast the value to.
- *
- * @return bool|float|int|string
- */
- public static function cast_value( $value, $definition ) {
- if ( $value === 'NULL' ) {
- return null;
- }
-
- if ( isset( $definition['type'] ) ) {
- switch ( $definition['type'] ) {
- case 'boolean':
- if ( 'true' === $value ) {
- return true;
- } elseif ( 'false' === $value ) {
- return false;
- }
- return (bool) $value;
- break;
-
- case 'integer':
- return (int) $value;
- break;
-
- case 'float':
- return (float) $value;
- break;
-
- case 'string':
- return (string) $value;
- break;
- }
- }
- return $value;
- }
-
- /**
- * Get a value not saved locally.
- *
- * @since 4.3.0
- *
- * @param string $module Module slug.
- * @param string $option Option name.
- *
- * @return bool Whether user is receiving notifications or not.
- */
- public static function get_remote_value( $module, $option ) {
-
- if ( in_array( $module, array( 'post-by-email' ), true ) ) {
- $option .= get_current_user_id();
- }
-
- // If option doesn't exist, 'does_not_exist' will be returned.
- $value = get_option( $option, 'does_not_exist' );
-
- // If option exists, just return it.
- if ( 'does_not_exist' !== $value ) {
- return $value;
- }
-
- // Only check a remote option if Jetpack is connected.
- if ( ! Jetpack::is_active() ) {
- return false;
- }
-
- // Do what is necessary for each module.
- switch ( $module ) {
- case 'monitor':
- // Load the class to use the method. If class can't be found, do nothing.
- if ( ! class_exists( 'Jetpack_Monitor' ) && ! include_once( Jetpack::get_module_path( $module ) ) ) {
- return false;
- }
- $value = Jetpack_Monitor::user_receives_notifications( false );
- break;
-
- case 'post-by-email':
- // Load the class to use the method. If class can't be found, do nothing.
- if ( ! class_exists( 'Jetpack_Post_By_Email' ) && ! include_once( Jetpack::get_module_path( $module ) ) ) {
- return false;
- }
- $post_by_email = new Jetpack_Post_By_Email();
- $value = $post_by_email->get_post_by_email_address();
- if ( $value === null ) {
- $value = 'NULL'; // sentinel value so it actually gets set
- }
- break;
- }
-
- // Normalize value to boolean.
- if ( is_wp_error( $value ) || is_null( $value ) ) {
- $value = false;
- }
-
- // Save option to use it next time.
- update_option( $option, $value );
-
- return $value;
- }
-
- /**
- * Get number of plugin updates available.
- *
- * @since 4.3.0
- *
- * @return mixed|WP_Error Number of plugin updates available. Otherwise, a WP_Error instance with the corresponding error.
- */
- public static function get_plugin_update_count() {
- $updates = wp_get_update_data();
- if ( isset( $updates['counts'] ) && isset( $updates['counts']['plugins'] ) ) {
- $count = $updates['counts']['plugins'];
- if ( 0 == $count ) {
- $response = array(
- 'code' => 'success',
- 'message' => esc_html__( 'All plugins are up-to-date. Keep up the good work!', 'jetpack' ),
- 'count' => 0,
- );
- } else {
- $response = array(
- 'code' => 'updates-available',
- 'message' => esc_html( sprintf( _n( '%s plugin need updating.', '%s plugins need updating.', $count, 'jetpack' ), $count ) ),
- 'count' => $count,
- );
- }
- return rest_ensure_response( $response );
- }
-
- return new WP_Error( 'not_found', esc_html__( 'Could not check updates for plugins on this site.', 'jetpack' ), array( 'status' => 404 ) );
- }
-
-
- /**
- * Returns a list of all plugins in the site.
- *
- * @since 4.2.0
- * @uses get_plugins()
- *
- * @return array
- */
- private static function core_get_plugins() {
- if ( ! function_exists( 'get_plugins' ) ) {
- require_once ABSPATH . 'wp-admin/includes/plugin.php';
- }
- /** This filter is documented in wp-admin/includes/class-wp-plugins-list-table.php */
- $plugins = apply_filters( 'all_plugins', get_plugins() );
-
- if ( is_array( $plugins ) && ! empty( $plugins ) ) {
- foreach ( $plugins as $plugin_slug => $plugin_data ) {
- $plugins[ $plugin_slug ]['active'] = self::core_is_plugin_active( $plugin_slug );
- }
- return $plugins;
- }
-
- return array();
- }
-
- /**
- * Deprecated - Get third party plugin API keys.
- * @deprecated
- *
- * @param WP_REST_Request $request {
- * Array of parameters received by request.
- *
- * @type string $slug Plugin slug with the syntax 'plugin-directory/plugin-main-file.php'.
- * }
- */
- public static function get_service_api_key( $request ) {
- _deprecated_function( __METHOD__, 'jetpack-6.9.0', 'WPCOM_REST_API_V2_Endpoint_Service_API_Keys::get_service_api_key' );
- return WPCOM_REST_API_V2_Endpoint_Service_API_Keys::get_service_api_key( $request );
- }
-
- /**
- * Deprecated - Update third party plugin API keys.
- * @deprecated
- *
- * @param WP_REST_Request $request {
- * Array of parameters received by request.
- *
- * @type string $slug Plugin slug with the syntax 'plugin-directory/plugin-main-file.php'.
- * }
- */
- public static function update_service_api_key( $request ) {
- _deprecated_function( __METHOD__, 'jetpack-6.9.0', 'WPCOM_REST_API_V2_Endpoint_Service_API_Keys::update_service_api_key' );
- return WPCOM_REST_API_V2_Endpoint_Service_API_Keys::update_service_api_key( $request ) ;
- }
-
- /**
- * Deprecated - Delete a third party plugin API key.
- * @deprecated
- *
- * @param WP_REST_Request $request {
- * Array of parameters received by request.
- *
- * @type string $slug Plugin slug with the syntax 'plugin-directory/plugin-main-file.php'.
- * }
- */
- public static function delete_service_api_key( $request ) {
- _deprecated_function( __METHOD__, 'jetpack-6.9.0', 'WPCOM_REST_API_V2_Endpoint_Service_API_Keys::delete_service_api_key' );
- return WPCOM_REST_API_V2_Endpoint_Service_API_Keys::delete_service_api_key( $request );
- }
-
- /**
- * Deprecated - Validate the service provided in /service-api-keys/ endpoints.
- * To add a service to these endpoints, add the service name to $valid_services
- * and add '{service name}_api_key' to the non-compact return array in get_option_names(),
- * in class-jetpack-options.php
- * @deprecated
- *
- * @param string $service The service the API key is for.
- * @return string Returns the service name if valid, null if invalid.
- */
- public static function validate_service_api_service( $service = null ) {
- _deprecated_function( __METHOD__, 'jetpack-6.9.0', 'WPCOM_REST_API_V2_Endpoint_Service_API_Keys::validate_service_api_service' );
- return WPCOM_REST_API_V2_Endpoint_Service_API_Keys::validate_service_api_service( $service );
- }
-
- /**
- * Error response for invalid service API key requests with an invalid service.
- */
- public static function service_api_invalid_service_response() {
- _deprecated_function( __METHOD__, 'jetpack-6.9.0', 'WPCOM_REST_API_V2_Endpoint_Service_API_Keys::service_api_invalid_service_response' );
- return WPCOM_REST_API_V2_Endpoint_Service_API_Keys::service_api_invalid_service_response();
- }
-
- /**
- * Deprecated - Validate API Key
- * @deprecated
- *
- * @param string $key The API key to be validated.
- * @param string $service The service the API key is for.
- *
- */
- public static function validate_service_api_key( $key = null, $service = null ) {
- _deprecated_function( __METHOD__, 'jetpack-6.9.0', 'WPCOM_REST_API_V2_Endpoint_Service_API_Keys::validate_service_api_key' );
- return WPCOM_REST_API_V2_Endpoint_Service_API_Keys::validate_service_api_key( $key , $service );
- }
-
- /**
- * Deprecated - Validate Mapbox API key
- * Based loosely on https://github.com/mapbox/geocoding-example/blob/master/php/MapboxTest.php
- * @deprecated
- *
- * @param string $key The API key to be validated.
- */
- public static function validate_service_api_key_mapbox( $key ) {
- _deprecated_function( __METHOD__, 'jetpack-6.9.0', 'WPCOM_REST_API_V2_Endpoint_Service_API_Keys::validate_service_api_key' );
- return WPCOM_REST_API_V2_Endpoint_Service_API_Keys::validate_service_api_key_mapbox( $key );
-
- }
-
- /**
- * Checks if the queried plugin is active.
- *
- * @since 4.2.0
- * @uses is_plugin_active()
- *
- * @return bool
- */
- private static function core_is_plugin_active( $plugin ) {
- if ( ! function_exists( 'is_plugin_active' ) ) {
- require_once ABSPATH . 'wp-admin/includes/plugin.php';
- }
-
- return is_plugin_active( $plugin );
- }
-
- /**
- * Get plugins data in site.
- *
- * @since 4.2.0
- *
- * @return WP_REST_Response|WP_Error List of plugins in the site. Otherwise, a WP_Error instance with the corresponding error.
- */
- public static function get_plugins() {
- $plugins = self::core_get_plugins();
-
- if ( ! empty( $plugins ) ) {
- return rest_ensure_response( $plugins );
- }
-
- return new WP_Error( 'not_found', esc_html__( 'Unable to list plugins.', 'jetpack' ), array( 'status' => 404 ) );
- }
-
- /**
- * Get data about the queried plugin. Currently it only returns whether the plugin is active or not.
- *
- * @since 4.2.0
- *
- * @param WP_REST_Request $request {
- * Array of parameters received by request.
- *
- * @type string $slug Plugin slug with the syntax 'plugin-directory/plugin-main-file.php'.
- * }
- *
- * @return bool|WP_Error True if module was activated. Otherwise, a WP_Error instance with the corresponding error.
- */
- public static function get_plugin( $request ) {
-
- $plugins = self::core_get_plugins();
-
- if ( empty( $plugins ) ) {
- return new WP_Error( 'no_plugins_found', esc_html__( 'This site has no plugins.', 'jetpack' ), array( 'status' => 404 ) );
- }
-
- $plugin = stripslashes( $request['plugin'] );
-
- if ( ! in_array( $plugin, array_keys( $plugins ) ) ) {
- return new WP_Error( 'plugin_not_found', esc_html( sprintf( __( 'Plugin %s is not installed.', 'jetpack' ), $plugin ) ), array( 'status' => 404 ) );
- }
-
- $plugin_data = $plugins[ $plugin ];
-
- $plugin_data['active'] = self::core_is_plugin_active( $plugin );
-
- return rest_ensure_response( array(
- 'code' => 'success',
- 'message' => esc_html__( 'Plugin found.', 'jetpack' ),
- 'data' => $plugin_data
- ) );
- }
-
-} // class end
diff --git a/plugins/jetpack/_inc/lib/class.jetpack-automatic-install-skin.php b/plugins/jetpack/_inc/lib/class.jetpack-automatic-install-skin.php
deleted file mode 100644
index 228c6b2c..00000000
--- a/plugins/jetpack/_inc/lib/class.jetpack-automatic-install-skin.php
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-
-include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
-include_once ABSPATH . 'wp-admin/includes/file.php';
-
-/**
- * Allows us to capture that the site doesn't have proper file system access.
- * In order to update the plugin.
- */
-class Jetpack_Automatic_Install_Skin extends Automatic_Upgrader_Skin {
- /**
- * Stores the last error key;
- **/
- protected $main_error_code = 'install_error';
-
- /**
- * Stores the last error message.
- **/
- protected $main_error_message = 'An unknown error occurred during installation';
-
- /**
- * Overwrites the set_upgrader to be able to tell if we e ven have the ability to write to the files.
- *
- * @param WP_Upgrader $upgrader
- *
- */
- public function set_upgrader( &$upgrader ) {
- parent::set_upgrader( $upgrader );
-
- // Check if we even have permission to.
- $result = $upgrader->fs_connect( array( WP_CONTENT_DIR, WP_PLUGIN_DIR ) );
- if ( ! $result ) {
- // set the string here since they are not available just yet
- $upgrader->generic_strings();
- $this->feedback( 'fs_unavailable' );
- }
- }
-
- /**
- * Overwrites the error function
- */
- public function error( $error ) {
- if ( is_wp_error( $error ) ) {
- $this->feedback( $error );
- }
- }
-
- private function set_main_error_code( $code ) {
- // Don't set the process_failed as code since it is not that helpful unless we don't have one already set.
- $this->main_error_code = ( $code === 'process_failed' && $this->main_error_code ? $this->main_error_code : $code );
- }
-
- private function set_main_error_message( $message, $code ) {
- // Don't set the process_failed as message since it is not that helpful unless we don't have one already set.
- $this->main_error_message = ( $code === 'process_failed' && $this->main_error_code ? $this->main_error_code : $message );
- }
-
- public function get_main_error_code() {
- return $this->main_error_code;
- }
-
- public function get_main_error_message() {
- return $this->main_error_message;
- }
-
- /**
- * Overwrites the feedback function
- */
- public function feedback( $data ) {
-
- $current_error = null;
- if ( is_wp_error( $data ) ) {
- $this->set_main_error_code( $data->get_error_code() );
- $string = $data->get_error_message();
- } elseif ( is_array( $data ) ) {
- return;
- } else {
- $string = $data;
- }
-
- if ( ! empty( $this->upgrader->strings[$string] ) ) {
- $this->set_main_error_code( $string );
-
- $current_error = $string;
- $string = $this->upgrader->strings[$string];
- }
-
- if ( strpos( $string, '%' ) !== false ) {
- $args = func_get_args();
- $args = array_splice( $args, 1 );
- if ( ! empty( $args ) ) {
- $string = vsprintf( $string, $args );
- }
- }
-
- $string = trim( $string );
- $string = wp_kses(
- $string, array(
- 'a' => array(
- 'href' => true
- ),
- 'br' => true,
- 'em' => true,
- 'strong' => true,
- )
- );
-
- $this->set_main_error_message( $string, $current_error );
- $this->messages[] = $string;
- }
-}
diff --git a/plugins/jetpack/_inc/lib/class.jetpack-iframe-embed.php b/plugins/jetpack/_inc/lib/class.jetpack-iframe-embed.php
deleted file mode 100644
index 4445cb65..00000000
--- a/plugins/jetpack/_inc/lib/class.jetpack-iframe-embed.php
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-/**
- * Tweak the preview when rendered in an iframe
- */
-
-class Jetpack_Iframe_Embed {
- static function init() {
- if ( ! self::is_embedding_in_iframe() ) {
- return;
- }
-
- // Disable the admin bar
- if ( ! defined( 'IFRAME_REQUEST' ) ) {
- define( 'IFRAME_REQUEST', true );
- }
-
- // Prevent canonical redirects
- remove_filter( 'template_redirect', 'redirect_canonical' );
-
- add_action( 'wp_head', array( 'Jetpack_Iframe_Embed', 'noindex' ), 1 );
- add_action( 'wp_head', array( 'Jetpack_Iframe_Embed', 'base_target_blank' ), 1 );
-
- add_filter( 'shortcode_atts_video', array( 'Jetpack_Iframe_Embed', 'disable_autoplay' ) );
- add_filter( 'shortcode_atts_audio', array( 'Jetpack_Iframe_Embed', 'disable_autoplay' ) );
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- wp_enqueue_script( 'jetpack-iframe-embed', WPMU_PLUGIN_URL . '/jetpack-iframe-embed/jetpack-iframe-embed.js', array( 'jquery' ) );
- } else {
- $ver = sprintf( '%s-%s', gmdate( 'oW' ), defined( 'JETPACK__VERSION' ) ? JETPACK__VERSION : '' );
- wp_enqueue_script( 'jetpack-iframe-embed', '//s0.wp.com/wp-content/mu-plugins/jetpack-iframe-embed/jetpack-iframe-embed.js', array( 'jquery' ), $ver );
- }
- wp_localize_script( 'jetpack-iframe-embed', '_previewSite', array( 'siteURL' => get_site_url() ) );
- }
-
- static function is_embedding_in_iframe() {
- return (
- self::has_iframe_get_param() && (
- self::has_preview_get_param() ||
- self::has_preview_theme_preview_param()
- )
- );
- }
-
- private static function has_iframe_get_param() {
- return isset( $_GET['iframe'] ) && $_GET['iframe'] === 'true';
- }
-
- private static function has_preview_get_param() {
- return isset( $_GET['preview'] ) && $_GET['preview'] === 'true';
- }
-
- private static function has_preview_theme_preview_param() {
- return isset( $_GET['theme_preview'] ) && $_GET['theme_preview'] === 'true';
- }
-
- /**
- * Disable `autoplay` shortcode attribute in context of an iframe
- * Added via `shortcode_atts_video` & `shortcode_atts_audio` in `init`
- *
- * @param array $atts The output array of shortcode attributes.
- *
- * @return array The output array of shortcode attributes.
- */
- static function disable_autoplay( $atts ) {
- return array_merge( $atts, array( 'autoplay' => false ) );
- }
-
- /**
- * We don't want search engines to index iframe previews
- * Added via `wp_head` action in `init`
- */
- static function noindex() {
- echo '<meta name="robots" content="noindex,nofollow" />';
- }
-
- /**
- * Make sure all links and forms open in a new window by default
- * (unless overridden on client-side by JS)
- * Added via `wp_head` action in `init`
- */
- static function base_target_blank() {
- echo '<base target="_blank" />';
- }
-}
diff --git a/plugins/jetpack/_inc/lib/class.jetpack-keyring-service-helper.php b/plugins/jetpack/_inc/lib/class.jetpack-keyring-service-helper.php
deleted file mode 100644
index c8005ea1..00000000
--- a/plugins/jetpack/_inc/lib/class.jetpack-keyring-service-helper.php
+++ /dev/null
@@ -1,204 +0,0 @@
-<?php
-
-class Jetpack_Keyring_Service_Helper {
- /**
- * @var Jetpack_Keyring_Service_Helper
- **/
- private static $instance = null;
-
- static function init() {
- if ( is_null( self::$instance ) ) {
- self::$instance = new Jetpack_Keyring_Service_Helper;
- }
-
- return self::$instance;
- }
-
- public static $SERVICES = array(
- 'facebook' => array(
- 'for' => 'publicize'
- ),
- 'twitter' => array(
- 'for' => 'publicize'
- ),
- 'linkedin' => array(
- 'for' => 'publicize'
- ),
- 'tumblr' => array(
- 'for' => 'publicize'
- ),
- 'path' => array(
- 'for' => 'publicize'
- ),
- 'google_plus' => array(
- 'for' => 'publicize'
- ),
- 'google_site_verification' => array(
- 'for' => 'other'
- )
- );
-
- private function __construct() {
- add_action( 'load-settings_page_sharing', array( __CLASS__, 'admin_page_load' ), 9 );
- }
-
- function get_services( $filter = 'all' ) {
- $services = array(
-
- );
-
- if ( 'all' == $filter ) {
- return $services;
- } else {
- $connected_services = array();
- foreach ( $services as $service => $empty ) {
- $connections = $this->get_connections( $service );
- if ( $connections ) {
- $connected_services[ $service ] = $connections;
- }
- }
- return $connected_services;
- }
- }
-
- /**
- * Gets a URL to the public-api actions. Works like WP's admin_url
- *
- * @param string $service Shortname of a specific service.
- *
- * @return URL to specific public-api process
- */
- // on WordPress.com this is/calls Keyring::admin_url
- static function api_url( $service = false, $params = array() ) {
- /**
- * Filters the API URL used to interact with WordPress.com.
- *
- * @since 2.0.0
- *
- * @param string https://public-api.wordpress.com/connect/?jetpack=publicize Default Publicize API URL.
- */
- $url = apply_filters( 'publicize_api_url', 'https://public-api.wordpress.com/connect/?jetpack=publicize' );
-
- if ( $service ) {
- $url = add_query_arg( array( 'service' => $service ), $url );
- }
-
- if ( count( $params ) ) {
- $url = add_query_arg( $params, $url );
- }
-
- return $url;
- }
-
- static function connect_url( $service_name, $for ) {
- return add_query_arg( array(
- 'action' => 'request',
- 'service' => $service_name,
- 'kr_nonce' => wp_create_nonce( 'keyring-request' ),
- 'nonce' => wp_create_nonce( "keyring-request-$service_name" ),
- 'for' => $for,
- ), menu_page_url( 'sharing', false ) );
- }
-
- static function refresh_url( $service_name, $for ) {
- return add_query_arg( array(
- 'action' => 'request',
- 'service' => $service_name,
- 'kr_nonce' => wp_create_nonce( 'keyring-request' ),
- 'refresh' => 1,
- 'for' => $for,
- 'nonce' => wp_create_nonce( "keyring-request-$service_name" ),
- ), admin_url( 'options-general.php?page=sharing' ) );
- }
-
- static function disconnect_url( $service_name, $id ) {
- return add_query_arg( array(
- 'action' => 'delete',
- 'service' => $service_name,
- 'id' => $id,
- 'kr_nonce' => wp_create_nonce( 'keyring-request' ),
- 'nonce' => wp_create_nonce( "keyring-request-$service_name" ),
- ), menu_page_url( 'sharing', false ) );
- }
-
- static function admin_page_load() {
- if ( isset( $_GET['action'] ) ) {
- if ( isset( $_GET['service'] ) ) {
- $service_name = $_GET['service'];
- }
-
- switch ( $_GET['action'] ) {
-
- case 'request':
- check_admin_referer( 'keyring-request', 'kr_nonce' );
- check_admin_referer( "keyring-request-$service_name", 'nonce' );
-
- $verification = Jetpack::generate_secrets( 'publicize' );
- if ( ! $verification ) {
- $url = Jetpack::admin_url( 'jetpack#/settings' );
- wp_die( sprintf( __( "Jetpack is not connected. Please connect Jetpack by visiting <a href='%s'>Settings</a>.", 'jetpack' ), $url ) );
-
- }
- $stats_options = get_option( 'stats_options' );
- $wpcom_blog_id = Jetpack_Options::get_option( 'id' );
- $wpcom_blog_id = ! empty( $wpcom_blog_id ) ? $wpcom_blog_id : $stats_options['blog_id'];
-
- $user = wp_get_current_user();
- $redirect = Jetpack_Keyring_Service_Helper::api_url( $service_name, urlencode_deep( array(
- 'action' => 'request',
- 'redirect_uri' => add_query_arg( array( 'action' => 'done' ), menu_page_url( 'sharing', false ) ),
- 'for' => 'publicize',
- // required flag that says this connection is intended for publicize
- 'siteurl' => site_url(),
- 'state' => $user->ID,
- 'blog_id' => $wpcom_blog_id,
- 'secret_1' => $verification['secret_1'],
- 'secret_2' => $verification['secret_2'],
- 'eol' => $verification['exp'],
- ) ) );
- wp_redirect( $redirect );
- exit;
- break;
-
- case 'completed':
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client();
- $xml->query( 'jetpack.fetchPublicizeConnections' );
-
- if ( ! $xml->isError() ) {
- $response = $xml->getResponse();
- Jetpack_Options::update_option( 'publicize_connections', $response );
- }
-
- break;
-
- case 'delete':
- $id = $_GET['id'];
-
- check_admin_referer( 'keyring-request', 'kr_nonce' );
- check_admin_referer( "keyring-request-$service_name", 'nonce' );
-
- Jetpack_Keyring_Service_Helper::disconnect( $service_name, $id );
-
- do_action( 'connection_disconnected', $service_name );
- break;
- }
- }
- }
-
- /**
- * Remove a Publicize connection
- */
- static function disconnect( $service_name, $connection_id, $_blog_id = false, $_user_id = false, $force_delete = false ) {
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client();
- $xml->query( 'jetpack.deletePublicizeConnection', $connection_id );
-
- if ( ! $xml->isError() ) {
- Jetpack_Options::update_option( 'publicize_connections', $xml->getResponse() );
- } else {
- return false;
- }
- }
-
-}
diff --git a/plugins/jetpack/_inc/lib/class.jetpack-password-checker.php b/plugins/jetpack/_inc/lib/class.jetpack-password-checker.php
deleted file mode 100644
index 14de6053..00000000
--- a/plugins/jetpack/_inc/lib/class.jetpack-password-checker.php
+++ /dev/null
@@ -1,1288 +0,0 @@
-<?php //phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
-/**
- * The password strength checker.
- *
- * @package jetpack
- */
-
-/**
- * Checks passwords strength.
- */
-class Jetpack_Password_Checker {
-
- /**
- * Minimum entropy bits a password should contain. 36 bits of entropy is considered
- * to be a reasonable password, 28 stands for a weak one.
- *
- * @const Integer
- */
- const MINIMUM_BITS = 28;
-
- /**
- * Currently tested password.
- *
- * @var String
- */
- public $password = '';
-
- /**
- * Test results array.
- *
- * @var Array
- */
- public $test_results = '';
-
- /**
- * Current password score.
- *
- * @var Integer
- */
- public $score = 0;
-
- /**
- * Current multiplier affecting the score.
- *
- * @var Integer
- */
- public $multiplier = 4;
-
- /**
- * A common password blacklist, which on match will immediately disqualify the password.
- *
- * @var Array
- */
- public $common_passwords = array();
-
- /**
- * Minimum password length setting.
- *
- * @var Integer
- */
- public $min_password_length = 6;
-
- /**
- * User defined strings that passwords need to be tested for a match against.
- *
- * @var Array
- */
- private $user_strings_to_test = array();
-
- /**
- * The user object for whom the password is being tested.
- *
- * @var WP_User
- */
- protected $user;
-
- /**
- * The user identifier for whom the password is being tested, used if there's no user object.
- *
- * @var WP_User
- */
- protected $user_id;
-
- /**
- * Creates an instance of the password checker class for the specified user, or
- * defaults to the currently logged in user.
- *
- * @param Mixed $user can be an integer ID, or a WP_User object.
- */
- public function __construct( $user = null ) {
-
- /**
- * Filters Jetpack's password strength enforcement settings. You can supply your own passwords
- * that should not be used for authenticating in addition to weak and easy to guess strings for
- * each user. For example, you can add passwords from known password databases to avoid compromised
- * password usage.
- *
- * @since 7.2.0
- *
- * @param Array $restricted_passwords strings that are forbidden for use as passwords.
- */
- $this->common_passwords = apply_filters( 'jetpack_password_checker_restricted_strings', array() );
-
- if ( is_null( $user ) ) {
- $this->user_id = get_current_user_id();
- } elseif ( is_object( $user ) && isset( $user->ID ) ) {
-
- // Existing user, using their ID.
- $this->user_id = $user->ID;
-
- } elseif ( is_object( $user ) ) {
-
- // Newly created user, using existing data.
- $this->user = $user;
- $this->user_id = 'new_user';
-
- } else {
- $this->user_id = $user;
- }
- $this->min_password_length = apply_filters( 'better_password_min_length', $this->min_password_length );
- }
-
- /**
- * Run tests against a password.
- *
- * @param String $password the tested string.
- * @param Boolean $required_only only test against required conditions, defaults to false.
- * @return Array $results an array containing failed and passed test results.
- */
- public function test( $password, $required_only = false ) {
-
- $this->password = $password;
- $results = $this->run_tests( $this->list_tests(), $required_only );
-
- // If we've failed on the required tests, return now.
- if ( ! empty( $results['failed'] ) ) {
- return array(
- 'passed' => false,
- 'test_results' => $results,
- );
- }
-
- /**
- * Filters Jetpack's password strength enforcement settings. You can modify the minimum
- * entropy bits requirement using this filter.
- *
- * @since 7.2.0
- *
- * @param Array $minimum_entropy_bits minimum entropy bits requirement.
- */
- $bits = apply_filters( 'jetpack_password_checker_minimum_entropy_bits', self::MINIMUM_BITS );
- $entropy_bits = $this->calculate_entropy_bits( $this->password );
-
- // If we have failed the entropy bits test, run the regex tests so we can suggest improvements.
- if ( $entropy_bits < $bits ) {
- $results['failed']['entropy_bits'] = $entropy_bits;
- $results = array_merge(
- $results,
- $this->run_tests( $this->list_tests( 'preg_match' ), false )
- );
- }
-
- return( array(
- 'passed' => empty( $results['failed'] ),
- 'test_results' => $results,
- ) );
- }
-
- /**
- * Run the tests using the currently set up object values.
- *
- * @param Array $tests tests to run.
- * @param Boolean $required_only whether to run only required tests.
- * @return Array test results.
- */
- protected function run_tests( $tests, $required_only = false ) {
-
- $results = array(
- 'passed' => array(),
- 'failed' => array(),
- );
-
- foreach ( $tests as $test_type => $section_tests ) {
- foreach ( $section_tests as $test_name => $test_data ) {
-
- // Skip non-required tests if required_only param is set.
- if ( $required_only && ! $test_data['required'] ) {
- continue;
- }
-
- $test_function = 'test_' . $test_type;
-
- $result = call_user_func( array( $this, $test_function ), $test_data );
-
- if ( $result ) {
- $results['passed'][] = array( 'test_name' => $test_name );
- } else {
- $results['failed'][] = array(
- 'test_name' => $test_name,
- 'explanation' => $test_data['error'],
- );
-
- if ( isset( $test_data['fail_immediately'] ) ) {
- return $results;
- }
- }
- }
- }
-
- return $results;
- }
-
- /**
- * Returns a list of tests that need to be run on password strings.
- *
- * @param Array $sections only return specific sections with the passed keys, defaults to all.
- * @return Array test descriptions.
- */
- protected function list_tests( $sections = false ) {
- // Note: these should be in order of priority.
- $tests = array(
- 'preg_match' => array(
- 'no_backslashes' => array(
- 'pattern' => '^[^\\\\]*$',
- 'error' => __( 'Passwords may not contain the character "\".', 'jetpack' ),
- 'required' => true,
- 'fail_immediately' => true,
- ),
- 'minimum_length' => array(
- 'pattern' => '^.{' . $this->min_password_length . ',}',
- /* translators: %d is a number of characters in the password. */
- 'error' => sprintf( __( 'Password must be at least %d characters.', 'jetpack' ), $this->min_password_length ),
- 'required' => true,
- 'fail_immediately' => true,
- ),
- 'has_mixed_case' => array(
- 'pattern' => '([a-z].*?[A-Z]|[A-Z].*?[a-z])',
- 'error' => __( 'This password is too easy to guess: you can improve it by adding additional uppercase letters, lowercase letters, or numbers.', 'jetpack' ),
- 'trim' => true,
- 'required' => false,
- ),
- 'has_digit' => array(
- 'pattern' => '\d',
- 'error' => __( 'This password is too easy to guess: you can improve it by mixing both letters and numbers.', 'jetpack' ),
- 'trim' => false,
- 'required' => false,
- ),
- 'has_special_char' => array(
- 'pattern' => '[^a-zA-Z\d]',
- 'error' => __( 'This password is too easy to guess: you can improve it by including special characters such as !#=?*&.', 'jetpack' ),
- 'required' => false,
- ),
- ),
- 'compare_to_list' => array(
- 'not_a_common_password' => array(
- 'list_callback' => 'get_common_passwords',
- 'compare_callback' => 'negative_in_array',
- 'error' => __( 'This is a very common password. Choose something that will be harder for others to guess.', 'jetpack' ),
- 'required' => true,
- ),
- 'not_same_as_other_user_data' => array(
- 'list_callback' => 'get_other_user_data',
- 'compare_callback' => 'test_not_same_as_other_user_data',
- 'error' => __( 'Your password is too weak: Looks like you\'re including easy to guess information about yourself. Try something a little more unique.', 'jetpack' ),
- 'required' => true,
- ),
- ),
- );
-
- /**
- * Filters Jetpack's password strength enforcement settings. You can determine the tests run
- * and their order based on whatever criteria you wish to specify.
- *
- * @since 7.2.0
- *
- * @param Array $minimum_entropy_bits minimum entropy bits requirement.
- */
- $tests = apply_filters( 'jetpack_password_checker_tests', $tests );
-
- if ( ! $sections ) {
- return $tests;
- }
-
- $sections = (array) $sections;
- return array_intersect_key( $tests, array_flip( $sections ) );
- }
-
- /**
- * Provides the regular expression tester functionality.
- *
- * @param Array $test_data the current test data.
- * @return Boolean does the test pass?
- */
- protected function test_preg_match( $test_data ) {
- $password = stripslashes( $this->password );
-
- if ( isset( $test_data['trim'] ) ) {
- $password = substr( $password, 1, -1 );
- }
-
- if ( ! preg_match( '/' . $test_data['pattern'] . '/u', $password ) ) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Provides the comparison tester functionality.
- *
- * @param Array $test_data the current test data.
- * @return Boolean does the test pass?
- */
- protected function test_compare_to_list( $test_data ) {
- $list_callback = $test_data['list_callback'];
- $compare_callback = $test_data['compare_callback'];
-
- if (
- ! is_callable( array( $this, $list_callback ) )
- || ! is_callable( array( $this, $compare_callback ) )
- ) {
- return false;
- }
-
- $list = call_user_func( array( $this, $list_callback ) );
- if ( empty( $list ) ) {
- return true;
- }
-
- return call_user_func( array( $this, $compare_callback ), $this->password, $list );
- }
-
- /**
- * Getter for the common password list.
- *
- * @return Array common passwords.
- */
- protected function get_common_passwords() {
- return $this->common_passwords;
- }
-
- /**
- * Returns the widely known user data that can not be used in the password to avoid
- * predictable strings.
- *
- * @return Array user data.
- */
- protected function get_other_user_data() {
-
- if ( ! isset( $this->user ) ) {
- $user_data = get_userdata( $this->user_id );
-
- $first_name = get_user_meta( $user_data->ID, 'first_name', true );
- $last_name = get_user_meta( $user_data->ID, 'last_name', true );
- $nickname = get_user_meta( $user_data->ID, 'nickname', true );
-
- $this->add_user_strings_to_test( $nickname );
- $this->add_user_strings_to_test( $user_data->user_nicename );
- $this->add_user_strings_to_test( $user_data->display_name );
- } else {
- $user_data = $this->user;
-
- $first_name = $user_data->first_name;
- $last_name = $user_data->last_name;
- }
- $email_username = substr( $user_data->user_email, 0, strpos( $user_data->user_email, '@' ) );
-
- $this->add_user_strings_to_test( $user_data->user_email );
- $this->add_user_strings_to_test( $email_username, '.' );
- $this->add_user_strings_to_test( $first_name );
- $this->add_user_strings_to_test( $last_name );
-
- return $this->user_strings_to_test;
- }
-
- /**
- * Compare the password for matches with known user data.
- *
- * @param String $password the string to be tested.
- * @param Array $strings_to_test known user data.
- * @return Boolean does the test pass?
- */
- protected function test_not_same_as_other_user_data( $password, $strings_to_test ) {
- $password_lowercase = strtolower( $password );
- foreach ( array_unique( $strings_to_test ) as $string ) {
- if ( empty( $string ) ) {
- continue;
- }
-
- $string = strtolower( $string );
- $string_reversed = strrev( $string );
-
- if ( $password_lowercase === $string || $password_lowercase === $string_reversed ) {
- return false;
- }
-
- // Also check for the string or reversed string with any numbers just stuck to the end to catch things like bob123 as passwords.
- if (
- preg_match( '/^' . preg_quote( $string, '/' ) . '\d+$/', $password_lowercase )
- || preg_match( '/^' . preg_quote( $string_reversed, '/' ) . '\d+$/', $password_lowercase )
- ) {
- return false;
- }
- }
- return true;
- }
-
- /**
- * A shorthand for the not in array construct.
- *
- * @param Mixed $needle the needle.
- * @param Array $haystack the haystack.
- * @return is the needle not in the haystack?
- */
- protected function negative_in_array( $needle, $haystack ) {
- if ( in_array( $needle, $haystack, true ) ) {
- return false;
- }
-
- return true;
- }
-
- /**
- * A helper function used to break a single string into its constituents so
- * that both the full string and its constituents and any variants thereof
- * can be tested against the password.
- *
- * @param String $string the string to be broken down.
- * @param String $explode_delimiter delimiter.
- * @return NULL|Array array of fragments, or NULL on empty string.
- */
- protected function add_user_strings_to_test( $string, $explode_delimiter = ' ' ) {
-
- // Don't check against empty strings.
- if ( empty( $string ) ) {
- return;
- }
-
- $strings = explode( $explode_delimiter, $string );
-
- // Remove any non alpha numeric characters from the strings to check against.
- foreach ( $strings as $key => $_string ) {
- $strings[ $key ] = preg_replace( '/[^a-zA-Z0-9]/', '', $_string );
- }
-
- // Check the original too.
- $strings[] = $string;
-
- // Check the original minus non alpha numeric characters.
- $strings[] = preg_replace( '/[^a-zA-Z0-9]/', '', $string );
-
- // Remove any empty strings.
- $strings = array_filter( $strings );
- $this->user_strings_to_test = array_merge( $this->user_strings_to_test, $strings );
- }
-
- /**
- * Return a character set size that is used in the string.
- *
- * @param String $password the password.
- * @return Integer number of different character sets in use.
- */
- protected function get_charset_size( $password ) {
- $size = 0;
-
- // Lowercase a-z.
- if ( preg_match( '/[a-z]/', $password ) ) {
- $size += 26;
- }
-
- // Uppercase A-Z.
- if ( preg_match( '/[A-Z]/', substr( $password, 1, -1 ) ) ) {
- $size += 26;
- }
-
- // Digits.
- if ( preg_match( '/\d/', substr( $password, 1, -1 ) ) ) {
- $size += 10;
- }
-
- // Over digits symbols.
- if ( preg_match( '/[!|@|#|$|%|^|&|*|(|)]/', $password ) ) {
- $size += 10;
- }
-
- // Other symbols.
- if ( preg_match( '#[`|~|-|_|=|+|\[|{|\]|}|\\|\|;:\'",<\.>/\?]#', $password ) ) {
- $size += 20;
- }
-
- // Spaces.
- if ( strpos( $password, ' ' ) ) {
- $size++;
- }
-
- return $size;
- }
-
- /**
- * Shorthand for getting a character index.
- *
- * @param String $char character.
- * @return Integer the character code.
- */
- protected function get_char_index( $char ) {
- $char = strtolower( $char[0] );
- if ( $char < 'a' || $char > 'z' ) {
- return 0;
- } else {
- return ord( $char[0] ) - ord( 'a' ) + 1;
- }
- }
-
- /**
- * This is the password strength calculation algorithm, based on the formula H = L(logN/log2).
- *
- * H = Entropy
- * L = String length (the for iterator)
- * N = Our charset size, via get_charset_size()
- *
- * @see http://en.wikipedia.org/wiki/Password_strength#Random_passwords
- *
- * On top of the base formula, we're also multiplying the bits of entropy for every char
- * by 1 - (the probabily of it following the previous char)
- * i.e.: the probablity of U following Q is ~0.84. If our password contains this pair of characters,
- * the u char will only add ( 0.16^2 * charset_score ) to our total of entropy bits.
- *
- * @param String $password the password.
- */
- protected function calculate_entropy_bits( $password ) {
- $bits = 0;
- $charset_score = log( $this->get_charset_size( $password ) ) / log( 2 );
-
- $aidx = $this->get_char_index( $password[0] );
- $length = strlen( $password );
-
- for ( $b = 1; $b < $length; $b++ ) {
- $bidx = $this->get_char_index( $password[ $b ] );
-
- // 27 = number of chars in the index (a-z,' ').
- $c = 1.0 - $this->frequency_table[ $aidx * 27 + $bidx ];
- $bits += $charset_score * $c * $c;
-
- // Move on to next pair.
- $aidx = $bidx;
- }
-
- return $bits;
- }
-
- /**
- * A frequency table of character pairs, starting with ' ' then ' a', ' b' [...] , 'a ', 'aa' etc.
- *
- * @see http://rumkin.com/tools/password/passchk.php
- * @var Array
- */
- public $frequency_table = array(
- 0.23653710453418866,
- 0.04577693541332556,
- 0.03449832337075375,
- 0.042918209651552706,
- 0.037390873305146524,
- 0.028509112115468728,
- 0.02350896632162123,
- 0.022188657238664526,
- 0.028429800262428927,
- 0.04357019973757107,
- 0.00913602565971716,
- 0.03223093745443942,
- 0.02235311269864412,
- 0.04438081352966905,
- 0.04512377897652719,
- 0.020055401662049863,
- 0.055903192885260244,
- 0.0024388394809739026,
- 0.035207464644991984,
- 0.07355941099285611,
- 0.036905671380667734,
- 0.026134421927394666,
- 0.023787724158040528,
- 0.011352092141711621,
- 0.0032354570637119114,
- 0.005986878553725033,
- 0.008861933226417843,
- 0.11511532293337222,
- 0.027556203528211108,
- 0.024331243621519172,
- 0.039266365359381834,
- 0.031599941682461,
- 0.014403265782183991,
- 0.015480973902901297,
- 0.027770812071730572,
- 0.00942761335471643,
- 0.039872867764980315,
- 0.0078122175244204695,
- 0.02808456043154979,
- 0.08429100451960927,
- 0.04688963405744277,
- 0.13831170724595424,
- 0.002540311998833649,
- 0.025211838460416972,
- 0.001543082081936142,
- 0.09519638431258201,
- 0.061845750109345385,
- 0.08907071001603732,
- 0.02137571074500656,
- 0.027093162268552268,
- 0.005521504592506197,
- 0.003023181221752442,
- 0.007086747339262283,
- 0.010262720513194342,
- 0.08785070710016038,
- 0.14617757690625455,
- 0.03417291150313457,
- 0.0059635515381250915,
- 0.006146668610584633,
- 0.195202799241872,
- 0.002774748505613063,
- 0.004715556203528212,
- 0.0044776206444088066,
- 0.11205481848665985,
- 0.005654468581425864,
- 0.0028820527773727946,
- 0.07383000437381543,
- 0.005516839189386207,
- 0.006496573844583759,
- 0.09843067502551392,
- 0.0027140982650532145,
- 0.0006893133109782768,
- 0.08425368129464937,
- 0.021325557661466685,
- 0.006493074792243767,
- 0.07023414491908442,
- 0.002077270739174807,
- 0.0024633328473538415,
- 0.0007744569179180639,
- 0.015413325557661468,
- 0.0011990086018370024,
- 0.13162851727657093,
- 0.10115993585070711,
- 0.0026989357049132527,
- 0.03319317684793702,
- 0.002946202070272634,
- 0.0783216212275842,
- 0.0018358361277154103,
- 0.00258813238081353,
- 0.2141688292754046,
- 0.09853681294649366,
- 0.0032482869222918796,
- 0.04359352675317102,
- 0.01993526753171016,
- 0.0036880011663507797,
- 0.008011663507799971,
- 0.12014696019827964,
- 0.0029846916460125384,
- 0.0017553579238956116,
- 0.029470185158186325,
- 0.010413179763813967,
- 0.030699518880303252,
- 0.03508499781309229,
- 0.002021285901734947,
- 0.0010613792097973467,
- 0.0005295232541186761,
- 0.009677212421635807,
- 0.010585799679253535,
- 0.17101734946785244,
- 0.07968625164018078,
- 0.007839043592360402,
- 0.005438693687126403,
- 0.0183606939787141,
- 0.2732701559994168,
- 0.004953491762647616,
- 0.007259367254701851,
- 0.008104971570199739,
- 0.13274588132380813,
- 0.004210526315789474,
- 0.004997813092287506,
- 0.017006560723137484,
- 0.007442484327161393,
- 0.016789619478058026,
- 0.08477737279486806,
- 0.005106283714827234,
- 0.0005026971861787433,
- 0.04040355736987899,
- 0.037535500801866156,
- 0.00885960052485785,
- 0.0336410555474559,
- 0.007066919376002332,
- 0.005344219273946639,
- 0.0006333284735384167,
- 0.010684939495553289,
- 0.0063064586674442345,
- 0.15386849394955532,
- 0.015049424114302375,
- 0.012162705933809595,
- 0.020425134859308938,
- 0.037366379938766583,
- 0.02157165767604607,
- 0.009373961218836564,
- 0.0173214754337367,
- 0.009616562181075958,
- 0.029522670943286193,
- 0.010154249890654615,
- 0.018600962239393497,
- 0.06362210234728094,
- 0.03157078291296107,
- 0.151603440734801,
- 0.0062329785683044175,
- 0.014775331681003062,
- 0.0020854351946347867,
- 0.1826342032366234,
- 0.0878017203674005,
- 0.054190989940224525,
- 0.010329202507654177,
- 0.012763376585508092,
- 0.0064872430383437815,
- 0.006381105117364048,
- 0.005388540603586529,
- 0.0090800408222773,
- 0.09611196967487973,
- 0.09940691062837148,
- 0.01033969966467415,
- 0.004034407348009914,
- 0.008826942703017933,
- 0.11474675608689314,
- 0.07132584924916169,
- 0.012388977985129028,
- 0.005435194634786413,
- 0.1417174515235457,
- 0.0037066627788307337,
- 0.0045802595130485495,
- 0.060800699810468,
- 0.005341886572386646,
- 0.005683627350925791,
- 0.12434932205860913,
- 0.004596588423968508,
- 0.0007534626038781163,
- 0.07107041842834232,
- 0.022361277154104096,
- 0.04784720804782038,
- 0.06277533168100306,
- 0.003441901151771395,
- 0.005828254847645429,
- 0.0009669047966175828,
- 0.009470768333576322,
- 0.002077270739174807,
- 0.12797667298440007,
- 0.08797783933518005,
- 0.005388540603586529,
- 0.0024913252660737715,
- 0.007550954949701123,
- 0.2786866890217233,
- 0.002509986878553725,
- 0.029002478495407494,
- 0.0303204548768042,
- 0.07576614666861058,
- 0.00246799825047383,
- 0.00592389561160519,
- 0.039574281965301064,
- 0.00706808572678233,
- 0.03304505029887739,
- 0.05474150750838315,
- 0.0028633911648928414,
- 0.0005073625892987316,
- 0.07293541332555767,
- 0.053528502697186175,
- 0.022566554891383584,
- 0.038151334013704616,
- 0.002716430966613209,
- 0.005049132526607377,
- 0.0009902318122175246,
- 0.008997229916897508,
- 0.0011861787432570347,
- 0.1666377022889634,
- 0.14414462749671964,
- 0.003374252806531564,
- 0.005169266656947077,
- 0.008468873013558828,
- 0.16337541915731155,
- 0.002873888321912815,
- 0.004305000728969237,
- 0.0031141565825922144,
- 0.1241172182533897,
- 0.0052800699810468,
- 0.008969237498177577,
- 0.024094474413179766,
- 0.017029887738737422,
- 0.01722700102055693,
- 0.10618457501093455,
- 0.006147834961364631,
- 0.0008269427030179326,
- 0.03303571949263741,
- 0.024188948826359528,
- 0.05213937891820965,
- 0.04505846333284735,
- 0.0035270447587111824,
- 0.006799825047383001,
- 0.0008199445983379502,
- 0.02206735675754483,
- 0.001010059775477475,
- 0.11971191135734072,
- 0.04656538854060359,
- 0.011243621519171892,
- 0.06513019390581717,
- 0.032375564951159064,
- 0.06347047674588133,
- 0.013678961947805804,
- 0.03309870243475726,
- 0.006982942119842543,
- 0.009726199154395685,
- 0.010121592068814697,
- 0.032514360693978714,
- 0.04986032949409535,
- 0.039734072022160664,
- 0.15690683773144773,
- 0.03949963551538125,
- 0.014790494241143023,
- 0.002722262720513194,
- 0.02614375273363464,
- 0.10753637556495116,
- 0.06764834523983088,
- 0.006221315060504448,
- 0.021317393206006705,
- 0.0030826651115322934,
- 0.002399183554454002,
- 0.0019069835252952323,
- 0.015595276279341012,
- 0.0925126111678087,
- 0.18437906400349907,
- 0.006538562472663654,
- 0.008719638431258201,
- 0.02116693395538708,
- 0.18241376293920394,
- 0.007290858725761773,
- 0.005976381396705059,
- 0.005629975215045925,
- 0.09721300481119698,
- 0.004810030616707975,
- 0.024303251202799244,
- 0.012954658113427612,
- 0.011057005394372358,
- 0.02733459688001166,
- 0.10135121737862662,
- 0.012016912086309959,
- 0.001055547455897361,
- 0.009027555037177431,
- 0.07162326869806095,
- 0.01007143898527482,
- 0.07297623560285756,
- 0.006741507508383147,
- 0.0036891675171307776,
- 0.0008409389123778977,
- 0.011272780288671819,
- 0.007020265344802449,
- 0.1030389269572824,
- 0.15350809155853623,
- 0.004232686980609419,
- 0.004353987461729115,
- 0.0023385333138941536,
- 0.14450386353695874,
- 0.002546143752733635,
- 0.0024470039364338824,
- 0.01200758128006998,
- 0.0981227584195947,
- 0.003161976964572095,
- 0.040695145064878264,
- 0.03460446129173349,
- 0.003908441463770229,
- 0.01598483743986004,
- 0.13107216795451232,
- 0.003129319142732177,
- 0.00032307916605919226,
- 0.04050386353695874,
- 0.05452689896486368,
- 0.03589677795597026,
- 0.07087097244496282,
- 0.006143169558244642,
- 0.008684647907858289,
- 0.0004607085580988482,
- 0.022010205569324977,
- 0.0009097536083977258,
- 0.07328765126111678,
- 0.14751421490013122,
- 0.008015162560139961,
- 0.006601545414783497,
- 0.025279486805656802,
- 0.1682449336637994,
- 0.008313748359819215,
- 0.007010934538562473,
- 0.005886572386645284,
- 0.16889575739903775,
- 0.004123050007289692,
- 0.011925936725470185,
- 0.10007289692374982,
- 0.013380376148126549,
- 0.009021723283277445,
- 0.08650823735238372,
- 0.007756232686980609,
- 0.0007243038343781893,
- 0.0026791077416533026,
- 0.02797492345823006,
- 0.032384895757399036,
- 0.04187432570345531,
- 0.00882461000145794,
- 0.0032401224668318998,
- 0.00033357632307916605,
- 0.027878116343490307,
- 0.0022277299897944304,
- 0.14333518005540166,
- 0.1725534334451086,
- 0.02781629975215046,
- 0.006909462020702727,
- 0.005264907420906838,
- 0.16661437527336345,
- 0.004325995043009185,
- 0.003334596880011664,
- 0.005312727802886718,
- 0.14024668318996938,
- 0.0013261408368566844,
- 0.003504884093891238,
- 0.006375273363464061,
- 0.04964922000291588,
- 0.008290421344219274,
- 0.09536783787724158,
- 0.05394372357486515,
- 0.005505175681586237,
- 0.005339553870826651,
- 0.01782067356757545,
- 0.006710016037323225,
- 0.05105933809593235,
- 0.002983525295232541,
- 0.002940370316372649,
- 0.0004548768041988629,
- 0.01208456043154979,
- 0.000915585362297711,
- 0.20146260387811635,
- 0.067196967487972,
- 0.006158332118384605,
- 0.025438110511736407,
- 0.07753783350342616,
- 0.1273876658405015,
- 0.009337804344656656,
- 0.07683452398308792,
- 0.0070412596588423975,
- 0.08747164309666132,
- 0.0038827817466102928,
- 0.018116926665694706,
- 0.005017641055547455,
- 0.004567429654468581,
- 0.028277008310249308,
- 0.05271555620352821,
- 0.004394809739029013,
- 0.0013343052923166642,
- 0.00411605190260971,
- 0.059621519171890944,
- 0.09073859163143316,
- 0.01446858142586383,
- 0.006770666277883074,
- 0.003425572240851436,
- 0.0004455459979588861,
- 0.010401516256013998,
- 0.005825922146085436,
- 0.10833882490158916,
- 0.007584779122321038,
- 0.016903921854497742,
- 0.02719580113719201,
- 0.0304814112844438,
- 0.02206385770520484,
- 0.013064295086747339,
- 0.02696369733197259,
- 0.009581571657676046,
- 0.026761918647033093,
- 0.006510570053943724,
- 0.021941390873305145,
- 0.07042659279778393,
- 0.05437410701268406,
- 0.1425175681586237,
- 0.027802303542790494,
- 0.037690625455605774,
- 0.0019606356611750987,
- 0.1095623268698061,
- 0.06157748942994606,
- 0.044618749088788455,
- 0.04955124653739612,
- 0.03608689313310978,
- 0.018381688292754043,
- 0.003404577926811489,
- 0.015036594255722409,
- 0.009600233270156,
- 0.10794693103951014,
- 0.12447528794284882,
- 0.0031981338387520046,
- 0.0074716430966613205,
- 0.003202799241871993,
- 0.13437643971424407,
- 0.006655197550663361,
- 0.0036693395538708266,
- 0.049338970695436656,
- 0.09486863974340283,
- 0.0015990669193760023,
- 0.0026604461291733486,
- 0.051775477474850555,
- 0.0041347135150896636,
- 0.005450357194926374,
- 0.12030325120279925,
- 0.04581309228750547,
- 0.0004537104534188657,
- 0.12425601399620935,
- 0.025981629975215047,
- 0.023926519900860182,
- 0.04423385333138941,
- 0.0017950138504155123,
- 0.002661612479953346,
- 0.0006333284735384167,
- 0.008449045050298877,
- 0.000653156436798367,
- 0.04816678816153958,
- 0.008625164018078437,
- 0.0039037760606502403,
- 0.005228750546726928,
- 0.004531272780288672,
- 0.0056672984400058316,
- 0.00359585945473101,
- 0.0032179618020119548,
- 0.0038093016474704767,
- 0.011452398308791368,
- 0.002519317684793702,
- 0.00280390727511299,
- 0.005572824026826068,
- 0.004554599795888614,
- 0.004531272780288672,
- 0.0035841959469310393,
- 0.004400641492928998,
- 0.0036670068523108326,
- 0.004839189386207902,
- 0.006258638285464354,
- 0.004897506925207757,
- 0.840776789619478,
- 0.004968654322787578,
- 0.002886718180492783,
- 0.0019757982213150604,
- 0.0018568304417553576,
- 0.001691208630995772,
- 0.09009243329931477,
- 0.14030150167662925,
- 0.013242746756086894,
- 0.013746610293045632,
- 0.027342761335471644,
- 0.16938912377897652,
- 0.006607377168683481,
- 0.01661933226417845,
- 0.008173786266219566,
- 0.13297448607668758,
- 0.0034675608689313307,
- 0.016641492928998396,
- 0.011722991689750693,
- 0.021493512173786266,
- 0.03430820819361423,
- 0.10099548039072752,
- 0.00873596734217816,
- 0.0018323370753754193,
- 0.020103222044029742,
- 0.047197550663362,
- 0.040833940807697915,
- 0.03361189677795597,
- 0.010844729552412887,
- 0.005544831608106138,
- 0.0007522962530981193,
- 0.01525120279924187,
- 0.00815512465373961,
- 0.2109648636827526,
- 0.058258055110074355,
- 0.007181221752442048,
- 0.043560868931331105,
- 0.004058900714389853,
- 0.10618107595859454,
- 0.0062399766729844,
- 0.004835690333867911,
- 0.02679224376731302,
- 0.08414637702288964,
- 0.0030698352529523252,
- 0.03637498177576906,
- 0.01592885260242018,
- 0.017413617145356466,
- 0.008430383437818923,
- 0.037231083248286924,
- 0.03290275550371775,
- 0.007538125091121154,
- 0.004500947660008748,
- 0.05932409972299169,
- 0.16006764834523984,
- 0.03309636973319726,
- 0.007766729844000583,
- 0.005225251494386936,
- 0.0006321621227584196,
- 0.012989648636827526,
- 0.005274238227146815,
- 0.1254503571949264,
- 0.12852719055255868,
- 0.0035433736696311416,
- 0.005203090829566993,
- 0.0019314768916751715,
- 0.20520775623268697,
- 0.002509986878553725,
- 0.00343606939787141,
- 0.027138649948972155,
- 0.13926578218399185,
- 0.004565096952908587,
- 0.005614812654905963,
- 0.00874413179763814,
- 0.004109053797929727,
- 0.008300918501239247,
- 0.08270943286193323,
- 0.002912377897652719,
- 0.0037066627788307337,
- 0.06909578655780726,
- 0.03242805073625893,
- 0.05237614812654906,
- 0.04723487388832191,
- 0.0038991106575302524,
- 0.006299460562764251,
- 0.00043388249015891526,
- 0.020029741944889927,
- 0.005311561452106721,
- 0.09334072022160665,
- 0.022940953491762648,
- 0.024658988190698353,
- 0.02901297565242747,
- 0.03531593526753171,
- 0.0758023035427905,
- 0.013711619769645722,
- 0.021597317393206007,
- 0.009670214316955824,
- 0.044728386062108175,
- 0.010596296836273509,
- 0.03264382563055839,
- 0.0604822860475288,
- 0.05489546581134276,
- 0.11501851581863246,
- 0.01837585653885406,
- 0.026237060796034405,
- 0.0011255285026971862,
- 0.08704125965884241,
- 0.10156349322058608,
- 0.06660562764251349,
- 0.023434319871701415,
- 0.010777081207173057,
- 0.005409534917626476,
- 0.003123487388832191,
- 0.0028762210234728096,
- 0.0089995626184575,
- 0.07518297127861205,
- 0.2314868056568013,
- 0.002226563639014434,
- 0.003285610147251786,
- 0.0027455897361131363,
- 0.2724537104534189,
- 0.0016655489138358362,
- 0.0019209797346551977,
- 0.0022137337804344656,
- 0.17690392185449774,
- 0.0014532730718763668,
- 0.0024994897215337513,
- 0.015302522233561744,
- 0.003441901151771395,
- 0.015303688584341741,
- 0.09314593964134713,
- 0.0017833503426155418,
- 0.0005108616416387229,
- 0.017828838023035427,
- 0.010385187345094037,
- 0.003168975069252078,
- 0.01902901297565243,
- 0.005525003644846187,
- 0.0010088934246974776,
- 0.0009272488700976819,
- 0.036282840064149294,
- 0.0022977110365942554,
- 0.0766805656801283,
- 0.22270418428342326,
- 0.005283569033386791,
- 0.007155562035282111,
- 0.01173582154833066,
- 0.1715620352821111,
- 0.003925936725470185,
- 0.004425134859308937,
- 0.020040239101909902,
- 0.14243242455168392,
- 0.0016737133692958156,
- 0.0066808572678232975,
- 0.011980755212130047,
- 0.012638577052048404,
- 0.07206065024055984,
- 0.08115701997375711,
- 0.00710424260096224,
- 0.0007278028867181805,
- 0.02347630849978131,
- 0.04595538708266512,
- 0.01481965301064295,
- 0.013925061962385188,
- 0.0018125091121154687,
- 0.00529173348884677,
- 0.0016340574427759146,
- 0.03072401224668319,
- 0.0023746901880740633,
- 0.25174165330223064,
- 0.06673392622831317,
- 0.00878378772415804,
- 0.03956261845750109,
- 0.010077270739174807,
- 0.0844787869951888,
- 0.00985216503863537,
- 0.004973319725907567,
- 0.01893220586091267,
- 0.11200583175389998,
- 0.0028715556203528212,
- 0.004095057588569762,
- 0.01202391019098994,
- 0.01756757544831608,
- 0.014825484764542934,
- 0.05312961073042717,
- 0.06746872721971132,
- 0.003845458521650386,
- 0.0210806239976673,
- 0.019443067502551394,
- 0.08017028721387957,
- 0.01825572240851436,
- 0.005365213587986587,
- 0.01959702580551101,
- 0.026184575010934536,
- 0.02474879720075813,
- 0.002171745152354571,
- 0.25827321767021433,
- 0.048050153083539875,
- 0.01043184137629392,
- 0.03930485493512174,
- 0.027640180784370902,
- 0.03294007872867765,
- 0.006474413179763814,
- 0.018314039947514214,
- 0.015119405161102202,
- 0.014706516984983233,
- 0.005494678524566263,
- 0.03309870243475726,
- 0.043864120134130345,
- 0.058996355153812505,
- 0.06265986295378335,
- 0.04633328473538417,
- 0.03790756670068523,
- 0.0004642076104388394,
- 0.037849249161685375,
- 0.08369966467415076,
- 0.04999679253535501,
- 0.02392768625164018,
- 0.010998687855372504,
- 0.009881323808135296,
- 0.003867619186470331,
- 0.012434465665548913,
- 0.007253535500801866,
- 0.11106225397288234,
- 0.17624726636535937,
- 0.008209943140399476,
- 0.008390727511299025,
- 0.012682898381688294,
- 0.1825653885406036,
- 0.001538416678816154,
- 0.004590756670068524,
- 0.008710307625018223,
- 0.1299513048549351,
- 0.002677941390873305,
- 0.012309666132089225,
- 0.014087184720804781,
- 0.01199941682461,
- 0.031246537396121883,
- 0.07206648199445984,
- 0.008254264470039366,
- 0.0007033095203382417,
- 0.007034261554162415,
- 0.006599212713223502,
- 0.013906400349905234,
- 0.050098265053214755,
- 0.007133401370462167,
- 0.017750692520775622,
- 0.0008257763522379356,
- 0.03918821985712203,
- 0.06015454147834961,
- );
-}
diff --git a/plugins/jetpack/_inc/lib/class.jetpack-photon-image-sizes.php b/plugins/jetpack/_inc/lib/class.jetpack-photon-image-sizes.php
deleted file mode 100644
index 8dc22d19..00000000
--- a/plugins/jetpack/_inc/lib/class.jetpack-photon-image-sizes.php
+++ /dev/null
@@ -1,182 +0,0 @@
-<?php
-/**
- * The Image Sizes library.
- *
- * @package jetpack
- */
-
-jetpack_require_lib( 'class.jetpack-photon-image' );
-
-/**
- * Class Jetpack_Photon_ImageSizes
- *
- * Manages image resizing via Jetpack CDN Service.
- */
-class Jetpack_Photon_ImageSizes {
-
- /**
- * @var array $data Attachment metadata.
- */
- public $data;
-
- /**
- * @var Image Image to be resized.
- */
- public $image;
-
- /**
- * @var null|array $sizes Intermediate sizes.
- */
- public static $sizes = null;
-
- /**
- * Construct new sizes meta
- *
- * @param int $attachment_id Attachment ID.
- * @param array $data Attachment metadata.
- */
- public function __construct( $attachment_id, $data ) {
- $this->data = $data;
- $this->image = new Jetpack_Photon_Image( $data, get_post_mime_type( $attachment_id ) );
- $this->generate_sizes();
- }
-
- /**
- * Generate sizes for attachment.
- *
- * @return array Array of sizes; empty array as failure fallback.
- */
- protected function generate_sizes() {
-
- // There is no need to generate the sizes a new for every single image.
- if ( null !== self::$sizes ) {
- return self::$sizes;
- }
-
- /*
- * The following logic is copied over from wp_generate_attachment_metadata
- */
- $_wp_additional_image_sizes = wp_get_additional_image_sizes();
-
- $sizes = array();
-
- $intermediate_image_sizes = get_intermediate_image_sizes();
-
- foreach ( $intermediate_image_sizes as $s ) {
- $sizes[ $s ] = array(
- 'width' => '',
- 'height' => '',
- 'crop' => false,
- );
- if ( isset( $_wp_additional_image_sizes[ $s ]['width'] ) ) {
- // For theme-added sizes.
- $sizes[ $s ]['width'] = intval( $_wp_additional_image_sizes[ $s ]['width'] );
- } else {
- // For default sizes set in options.
- $sizes[ $s ]['width'] = get_option( "{$s}_size_w" );
- }
-
- if ( isset( $_wp_additional_image_sizes[ $s ]['height'] ) ) {
- // For theme-added sizes.
- $sizes[ $s ]['height'] = intval( $_wp_additional_image_sizes[ $s ]['height'] );
- } else {
- // For default sizes set in options.
- $sizes[ $s ]['height'] = get_option( "{$s}_size_h" );
- }
-
- if ( isset( $_wp_additional_image_sizes[ $s ]['crop'] ) ) {
- // For theme-added sizes.
- $sizes[ $s ]['crop'] = $_wp_additional_image_sizes[ $s ]['crop'];
- } else {
- // For default sizes set in options.
- $sizes[ $s ]['crop'] = get_option( "{$s}_crop" );
- }
- }
-
- self::$sizes = $sizes;
-
- return $sizes;
- }
-
- /**
- * @return array
- */
- public function filtered_sizes() {
- // Remove filter preventing the creation of advanced sizes.
- remove_filter(
- 'intermediate_image_sizes_advanced',
- array( 'Jetpack_Photon', 'filter_photon_noresize_intermediate_sizes' )
- );
-
- /** This filter is documented in wp-admin/includes/image.php */
- $sizes = apply_filters( 'intermediate_image_sizes_advanced', self::$sizes, $this->data );
-
- // Re-add the filter removed above.
- add_filter(
- 'intermediate_image_sizes_advanced',
- array( 'Jetpack_Photon', 'filter_photon_noresize_intermediate_sizes' )
- );
-
- return (array) $sizes;
- }
-
- /**
- * Standardises and validates the size_data array.
- *
- * @param array $size_data Size data array - at least containing height or width key. Can contain crop as well.
- *
- * @return array Array with populated width, height and crop keys; empty array if no width and height are provided.
- */
- public function standardize_size_data( $size_data ) {
- $has_at_least_width_or_height = ( isset( $size_data['width'] ) || isset( $size_data['height'] ) );
- if ( ! $has_at_least_width_or_height ) {
- return array();
- }
-
- $defaults = array(
- 'width' => null,
- 'height' => null,
- 'crop' => false,
- );
-
- return array_merge( $defaults, $size_data );
- }
-
- /**
- * Get sizes for attachment post meta.
- *
- * @return array ImageSizes for attachment postmeta.
- */
- public function generate_sizes_meta() {
-
- $metadata = array();
-
- foreach ( $this->filtered_sizes() as $size => $size_data ) {
-
- $size_data = $this->standardize_size_data( $size_data );
-
- if ( true === empty( $size_data ) ) {
- continue;
- }
-
- $resized_image = $this->resize( $size_data );
-
- if ( true === is_array( $resized_image ) ) {
- $metadata[ $size ] = $resized_image;
- }
- }
-
- return $metadata;
- }
-
- /**
- * @param array $size_data
- *
- * @return array|\WP_Error Array for usage in $metadata['sizes']; WP_Error on failure.
- */
- protected function resize( $size_data ) {
-
- return $this->image->get_size( $size_data );
-
- }
-}
diff --git a/plugins/jetpack/_inc/lib/class.jetpack-photon-image.php b/plugins/jetpack/_inc/lib/class.jetpack-photon-image.php
deleted file mode 100644
index d364f2a3..00000000
--- a/plugins/jetpack/_inc/lib/class.jetpack-photon-image.php
+++ /dev/null
@@ -1,243 +0,0 @@
-<?php
-/**
- * The Image Class.
- *
- * @package Jetpack
- */
-
-/**
- * Represents a resizable image, exposing properties necessary for properly generating srcset.
- */
-class Jetpack_Photon_Image {
-
- /**
- * @var string $filename Attachment's Filename.
- */
- public $filename;
-
- /**
- * @var string/WP_Erorr $mime_type Attachment's mime-type, WP_Error on failure when recalculating the dimensions.
- */
- private $mime_type;
-
- /**
- * @var int $original_width Image original width.
- */
- private $original_width;
-
- /**
- * @var int $original_width Image original height.
- */
- private $original_height;
-
- /**
- * @var int $width Current attachment's width.
- */
- private $width;
-
- /**
- * @var int $height Current attachment's height.
- */
- private $height;
-
- /**
- * @var bool $is_resized Whether the attachment has been resized yet, or not.
- */
- private $is_resized = false;
-
- /**
- * Constructs the image object.
- *
- * The $data array should provide at least
- * file : string Image file path
- * width : int Image width
- * height : int Image height
- *
- * @param array $data Array of attachment metadata, typically value of _wp_attachment_metadata postmeta
- * @param string|\WP_Error $mime_type Typically value returned from get_post_mime_type function.
- */
- public function __construct( $data, $mime_type ) {
- $this->filename = $data['file'];
- $this->width = $this->original_width = $data['width'];
- $this->height = $this->original_height = $data['height'];
- $this->mime_type = $mime_type;
- }
-
- /**
- * Resizes the image to given size.
- *
- * @param array $size_data Array of width, height, and crop properties of a size.
- *
- * @return bool|\WP_Error True if resize was successful, WP_Error on failure.
- */
- public function resize( $size_data ) {
-
- $dimensions = $this->image_resize_dimensions( $size_data['width'], $size_data['height'], $size_data['crop'] );
-
- if ( true === is_wp_error( $dimensions ) ) {
- return $dimensions; // Returns \WP_Error.
- }
-
- if ( true === is_wp_error( $this->mime_type ) ) {
- return $this->mime_type; // Returns \WP_Error.
- }
-
- $this->set_width_height( $dimensions );
-
- return $this->is_resized = true;
- }
-
- /**
- * Generates size data for usage in $metadata['sizes'];.
- *
- * @param array $size_data Array of width, height, and crop properties of a size.
- *
- * @return array|\WP_Error An array containing file, width, height, and mime-type keys and it's values. WP_Error on failure.
- */
- public function get_size( $size_data ) {
-
- $is_resized = $this->resize( $size_data );
-
- if ( true === is_wp_error( $is_resized ) ) {
- return $is_resized;
- }
-
- return array(
- 'file' => $this->get_filename(),
- 'width' => $this->get_width(),
- 'height' => $this->get_height(),
- 'mime-type' => $this->get_mime_type(),
- );
- }
-
- /**
- * Resets the image to it's original dimensions.
- *
- * @return bool True on successful reset to original dimensions.
- */
- public function reset_to_original() {
- $this->width = $this->original_width;
- $this->height = $this->original_height;
- $this->is_resized = false;
-
- return true;
- }
-
- /**
- * Return the basename filename. If the image has been resized, including
- * the resizing params for Jetpack CDN.
- *
- * @return string Basename of the filename.
- */
- public function get_filename() {
-
- if ( true === $this->is_resized() ) {
- $filename = $this->get_resized_filename();
- } else {
- $filename = $this->filename;
- }
-
- return wp_basename( $filename );
- }
-
- /**
- * Returns current image width. Either original, or after resize.
- *
- * @return int
- */
- public function get_width() {
- return (int) $this->width;
- }
-
- /**
- * Returns current image height. Either original, or after resize.
- *
- * @return int
- */
- public function get_height() {
- return (int) $this->height;
- }
-
- /**
- * Returns image mime type.
- *
- * @return string|WP_Error Image's mime type or WP_Error if it was not determined.
- */
- public function get_mime_type() {
- return $this->mime_type;
- }
-
- /**
- * Checks the resize status of the image.
- *
- * @return bool If the image has been resized.
- */
- public function is_resized() {
- return ( true === $this->is_resized );
- }
-
- /**
- * Get filename with proper args for the Photon service.
- *
- * @return string Filename with query args for Photon service
- */
- protected function get_resized_filename() {
- $query_args = array(
- 'resize' => join(
- ',',
- array(
- $this->get_width(),
- $this->get_height(),
- )
- ),
- );
-
- return add_query_arg( $query_args, $this->filename );
- }
-
- /**
- * Get resize dimensions used for the Jetpack CDN service.
- *
- * Converts the list of values returned from `image_resize_dimensions()` to
- * associative array for the sake of more readable code no relying on index
- * nor `list`.
- *
- * @param int $max_width
- * @param int $max_height
- * @param bool|array $crop
- *
- * @return array|\WP_Error Array of dimensions matching the parameters to imagecopyresampled. WP_Error on failure.
- */
- protected function image_resize_dimensions( $max_width, $max_height, $crop ) {
- $dimensions = image_resize_dimensions( $this->original_width, $this->original_height, $max_width, $max_height, $crop );
- if ( ! $dimensions ) {
- return new WP_Error( 'error_getting_dimensions', __( 'Could not calculate resized image dimensions' ), $this->filename );
- }
-
- return array_combine(
- array(
- 'dst_x',
- 'dst_y',
- 'src_x',
- 'src_y',
- 'dst_w',
- 'dst_h',
- 'src_w',
- 'src_h',
- ),
- $dimensions
- );
- }
-
- /**
- * Sets proper width and height from dimensions.
- *
- * @param Array $dimensions an array of image dimensions.
- * @return void
- */
- protected function set_width_height( $dimensions ) {
- $this->width = (int) $dimensions['dst_w'];
- $this->height = (int) $dimensions['dst_h'];
- }
-
-}
diff --git a/plugins/jetpack/_inc/lib/class.jetpack-search-performance-logger.php b/plugins/jetpack/_inc/lib/class.jetpack-search-performance-logger.php
deleted file mode 100644
index f8de70ee..00000000
--- a/plugins/jetpack/_inc/lib/class.jetpack-search-performance-logger.php
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-
-class Jetpack_Search_Performance_Logger {
- /**
- * @var Jetpack_Search_Performance_Logger
- **/
- private static $instance = null;
-
- private $current_query = null;
- private $query_started = null;
- private $stats = null;
-
- static function init() {
- if ( is_null( self::$instance ) ) {
- self::$instance = new Jetpack_Search_Performance_Logger;
- }
-
- return self::$instance;
- }
-
- private function __construct() {
- $this->stats = array();
- add_action( 'pre_get_posts', array( $this, 'begin_log_query' ), 10, 1 );
- add_action( 'did_jetpack_search_query', array( $this, 'log_jetpack_search_query' ) );
- add_filter( 'found_posts', array( $this, 'log_mysql_query' ), 10, 2 );
- add_action( 'wp_footer', array( $this, 'print_stats' ) );
- }
-
- public function begin_log_query( $query ) {
- if ( $this->should_log_query( $query ) ) {
- $this->query_started = microtime( true );
- $this->current_query = $query;
- }
- }
-
- public function log_mysql_query( $found_posts, $query ) {
- if ( $this->current_query === $query ) {
- $duration = microtime( true ) - $this->query_started;
- if ( $duration < 60 ) { // eliminate outliers, likely tracking errors
- $this->record_query_time( $duration, false );
- }
- $this->reset_query_state();
- }
-
- return $found_posts;
- }
-
- public function log_jetpack_search_query() {
- $duration = microtime( true ) - $this->query_started;
- if ( $duration < 60 ) { // eliminate outliers, likely tracking errors
- $this->record_query_time( $duration, true );
- }
- $this->reset_query_state();
- }
-
- private function reset_query_state() {
- $this->query_started = null;
- $this->current_query = null;
- }
-
- private function should_log_query( $query ) {
- return $query->is_main_query() && $query->is_search();
- }
-
- private function record_query_time( $duration, $was_jetpack_search ) {
- $this->stats[] = array( $was_jetpack_search, intval( $duration * 1000 ) );
- }
-
- public function print_stats() {
- $beacons = array();
- if ( ! empty( $this->stats ) ) {
- foreach( $this->stats as $stat ) {
- $search_type = $stat[0] ? 'es' : 'mysql';
- $beacons[] = "%22jetpack.search.{$search_type}.duration:{$stat[1]}|ms%22";
- }
-
- $encoded_json = '{%22beacons%22:[' . implode(',', $beacons ) . ']}';
- $encoded_site_url = urlencode( site_url() );
- $url = "https://pixel.wp.com/boom.gif?v=0.9&u={$encoded_site_url}&json={$encoded_json}";
- echo '<img src="' . $url . '" width="1" height="1" style="display:none;" alt=":)"/>';
- }
- }
-}
diff --git a/plugins/jetpack/_inc/lib/class.media-extractor.php b/plugins/jetpack/_inc/lib/class.media-extractor.php
deleted file mode 100644
index 6acf34db..00000000
--- a/plugins/jetpack/_inc/lib/class.media-extractor.php
+++ /dev/null
@@ -1,436 +0,0 @@
-<?php
-/**
- * Class with methods to extract metadata from a post/page about videos, images, links, mentions embedded
- * in or attached to the post/page.
- *
- * @todo Additionally, have some filters on number of items in each field
- */
-class Jetpack_Media_Meta_Extractor {
-
- // Some consts for what to extract
- const ALL = 255;
- const LINKS = 1;
- const MENTIONS = 2;
- const IMAGES = 4;
- const SHORTCODES = 8; // Only the keeper shortcodes below
- const EMBEDS = 16;
- const HASHTAGS = 32;
-
- // For these, we try to extract some data from the shortcode, rather than just recording its presence (which we do for all)
- // There should be a function get_{shortcode}_id( $atts ) or static method SomethingShortcode::get_{shortcode}_id( $atts ) for these.
- private static $KEEPER_SHORTCODES = array(
- 'youtube',
- 'vimeo',
- 'hulu',
- 'ted',
- 'wpvideo',
- 'videopress',
- );
-
- /**
- * Gets the specified media and meta info from the given post.
- * NOTE: If you have the post's HTML content already and don't need image data, use extract_from_content() instead.
- *
- * @param $blog_id The ID of the blog
- * @param $post_id The ID of the post
- * @param $what_to_extract (int) A mask of things to extract, e.g. Jetpack_Media_Meta_Extractor::IMAGES | Jetpack_Media_Meta_Extractor::MENTIONS
- * @returns a structure containing metadata about the embedded things, or empty array if nothing found, or WP_Error on error
- */
- static public function extract( $blog_id, $post_id, $what_to_extract = self::ALL ) {
-
- // multisite?
- if ( function_exists( 'switch_to_blog') )
- switch_to_blog( $blog_id );
-
- $post = get_post( $post_id );
- $content = $post->post_title . "\n\n" . $post->post_content;
- $char_cnt = strlen( $content );
-
- //prevent running extraction on really huge amounts of content
- if ( $char_cnt > 100000 ) //about 20k English words
- $content = substr( $content, 0, 100000 );
-
- $extracted = array();
-
- // Get images first, we need the full post for that
- if ( self::IMAGES & $what_to_extract ) {
- $extracted = self::get_image_fields( $post );
-
- // Turn off images so we can safely call extract_from_content() below
- $what_to_extract = $what_to_extract - self::IMAGES;
- }
-
- if ( function_exists( 'switch_to_blog') )
- restore_current_blog();
-
- // All of the other things besides images can be extracted from just the content
- $extracted = self::extract_from_content( $content, $what_to_extract, $extracted );
-
- return $extracted;
- }
-
- /**
- * Gets the specified meta info from the given post content.
- * NOTE: If you want IMAGES, call extract( $blog_id, $post_id, ...) which will give you more/better image extraction
- * This method will give you an error if you ask for IMAGES.
- *
- * @param $content The HTML post_content of a post
- * @param $what_to_extract (int) A mask of things to extract, e.g. Jetpack_Media_Meta_Extractor::IMAGES | Jetpack_Media_Meta_Extractor::MENTIONS
- * @param $already_extracted (array) Previously extracted things, e.g. images from extract(), which can be used for x-referencing here
- * @returns a structure containing metadata about the embedded things, or empty array if nothing found, or WP_Error on error
- */
- static public function extract_from_content( $content, $what_to_extract = self::ALL, $already_extracted = array() ) {
- $stripped_content = self::get_stripped_content( $content );
-
- // Maybe start with some previously extracted things (e.g. images from extract()
- $extracted = $already_extracted;
-
- // Embedded media objects will have already been converted to shortcodes by pre_kses hooks on save.
-
- if ( self::IMAGES & $what_to_extract ) {
- $images = Jetpack_Media_Meta_Extractor::extract_images_from_content( $stripped_content, array() );
- $extracted = array_merge( $extracted, $images );
- }
-
- // ----------------------------------- MENTIONS ------------------------------
-
- if ( self::MENTIONS & $what_to_extract ) {
- if ( preg_match_all( '/(^|\s)@(\w+)/u', $stripped_content, $matches ) ) {
- $mentions = array_values( array_unique( $matches[2] ) ); //array_unique() retains the keys!
- $mentions = array_map( 'strtolower', $mentions );
- $extracted['mention'] = array( 'name' => $mentions );
- if ( !isset( $extracted['has'] ) )
- $extracted['has'] = array();
- $extracted['has']['mention'] = count( $mentions );
- }
- }
-
- // ----------------------------------- HASHTAGS ------------------------------
- /** Some hosts may not compile with --enable-unicode-properties and kick a warning:
- * Warning: preg_match_all() [function.preg-match-all]: Compilation failed: support for \P, \p, and \X has not been compiled
- * Therefore, we only run this code block on wpcom, not in Jetpack.
- */
- if ( ( defined( 'IS_WPCOM' ) && IS_WPCOM ) && ( self::HASHTAGS & $what_to_extract ) ) {
- //This regex does not exactly match Twitter's
- // if there are problems/complaints we should implement this:
- // https://github.com/twitter/twitter-text/blob/master/java/src/com/twitter/Regex.java
- if ( preg_match_all( '/(?:^|\s)#(\w*\p{L}+\w*)/u', $stripped_content, $matches ) ) {
- $hashtags = array_values( array_unique( $matches[1] ) ); //array_unique() retains the keys!
- $hashtags = array_map( 'strtolower', $hashtags );
- $extracted['hashtag'] = array( 'name' => $hashtags );
- if ( !isset( $extracted['has'] ) )
- $extracted['has'] = array();
- $extracted['has']['hashtag'] = count( $hashtags );
- }
- }
-
- // ----------------------------------- SHORTCODES ------------------------------
-
- // Always look for shortcodes.
- // If we don't want them, we'll just remove them, so we don't grab them as links below
- $shortcode_pattern = '/' . get_shortcode_regex() . '/s';
- if ( preg_match_all( $shortcode_pattern, $content, $matches ) ) {
-
- $shortcode_total_count = 0;
- $shortcode_type_counts = array();
- $shortcode_types = array();
- $shortcode_details = array();
-
- if ( self::SHORTCODES & $what_to_extract ) {
-
- foreach( $matches[2] as $key => $shortcode ) {
- //Elasticsearch (and probably other things) doesn't deal well with some chars as key names
- $shortcode_name = preg_replace( '/[.,*"\'\/\\\\#+ ]/', '_', $shortcode );
-
- $attr = shortcode_parse_atts( $matches[3][ $key ] );
-
- $shortcode_total_count++;
- if ( ! isset( $shortcode_type_counts[$shortcode_name] ) )
- $shortcode_type_counts[$shortcode_name] = 0;
- $shortcode_type_counts[$shortcode_name]++;
-
- // Store (uniquely) presence of all shortcode regardless of whether it's a keeper (for those, get ID below)
- // @todo Store number of occurrences?
- if ( ! in_array( $shortcode_name, $shortcode_types ) )
- $shortcode_types[] = $shortcode_name;
-
- // For keeper shortcodes, also store the id/url of the object (e.g. youtube video, TED talk, etc.)
- if ( in_array( $shortcode, self::$KEEPER_SHORTCODES ) ) {
- unset( $id ); // Clear shortcode ID data left from the last shortcode
- // We'll try to get the salient ID from the function jetpack_shortcode_get_xyz_id()
- // If the shortcode is a class, we'll call XyzShortcode::get_xyz_id()
- $shortcode_get_id_func = "jetpack_shortcode_get_{$shortcode}_id";
- $shortcode_class_name = ucfirst( $shortcode ) . 'Shortcode';
- $shortcode_get_id_method = "get_{$shortcode}_id";
- if ( function_exists( $shortcode_get_id_func ) ) {
- $id = call_user_func( $shortcode_get_id_func, $attr );
- } else if ( method_exists( $shortcode_class_name, $shortcode_get_id_method ) ) {
- $id = call_user_func( array( $shortcode_class_name, $shortcode_get_id_method ), $attr );
- }
- if ( ! empty( $id )
- && ( ! isset( $shortcode_details[$shortcode_name] ) || ! in_array( $id, $shortcode_details[$shortcode_name] ) ) )
- $shortcode_details[$shortcode_name][] = $id;
- }
- }
-
- if ( $shortcode_total_count > 0 ) {
- // Add the shortcode info to the $extracted array
- if ( !isset( $extracted['has'] ) )
- $extracted['has'] = array();
- $extracted['has']['shortcode'] = $shortcode_total_count;
- $extracted['shortcode'] = array();
- foreach ( $shortcode_type_counts as $type => $count )
- $extracted['shortcode'][$type] = array( 'count' => $count );
- if ( ! empty( $shortcode_types ) )
- $extracted['shortcode_types'] = $shortcode_types;
- foreach ( $shortcode_details as $type => $id )
- $extracted['shortcode'][$type]['id'] = $id;
- }
- }
-
- // Remove the shortcodes form our copy of $content, so we don't count links in them as links below.
- $content = preg_replace( $shortcode_pattern, ' ', $content );
- }
-
- // ----------------------------------- LINKS ------------------------------
-
- if ( self::LINKS & $what_to_extract ) {
-
- // To hold the extracted stuff we find
- $links = array();
-
- // @todo Get the text inside the links?
-
- // Grab any links, whether in <a href="..." or not, but subtract those from shortcodes and images
- // (we treat embed links as just another link)
- if ( preg_match_all( '#(?:^|\s|"|\')(https?://([^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))))#', $content, $matches ) ) {
-
- foreach ( $matches[1] as $link_raw ) {
- $url = parse_url( $link_raw );
-
- // Data URI links
- if ( isset( $url['scheme'] ) && 'data' === $url['scheme'] )
- continue;
-
- // Remove large (and likely invalid) links
- if ( 4096 < strlen( $link_raw ) )
- continue;
-
- // Build a simple form of the URL so we can compare it to ones we found in IMAGES or SHORTCODES and exclude those
- $simple_url = $url['scheme'] . '://' . $url['host'] . ( ! empty( $url['path'] ) ? $url['path'] : '' );
- if ( isset( $extracted['image']['url'] ) ) {
- if ( in_array( $simple_url, (array) $extracted['image']['url'] ) )
- continue;
- }
-
- list( $proto, $link_all_but_proto ) = explode( '://', $link_raw );
-
- // Build a reversed hostname
- $host_parts = array_reverse( explode( '.', $url['host'] ) );
- $host_reversed = '';
- foreach ( $host_parts as $part ) {
- $host_reversed .= ( ! empty( $host_reversed ) ? '.' : '' ) . $part;
- }
-
- $link_analyzed = '';
- if ( !empty( $url['path'] ) ) {
- // The whole path (no query args or fragments)
- $path = substr( $url['path'], 1 ); // strip the leading '/'
- $link_analyzed .= ( ! empty( $link_analyzed ) ? ' ' : '' ) . $path;
-
- // The path split by /
- $path_split = explode( '/', $path );
- if ( count( $path_split ) > 1 ) {
- $link_analyzed .= ' ' . implode( ' ', $path_split );
- }
-
- // The fragment
- if ( ! empty( $url['fragment'] ) )
- $link_analyzed .= ( ! empty( $link_analyzed ) ? ' ' : '' ) . $url['fragment'];
- }
-
- // @todo Check unique before adding
- $links[] = array(
- 'url' => $link_all_but_proto,
- 'host_reversed' => $host_reversed,
- 'host' => $url['host'],
- );
- }
-
- }
-
- $link_count = count( $links );
- if ( $link_count ) {
- $extracted[ 'link' ] = $links;
- if ( !isset( $extracted['has'] ) )
- $extracted['has'] = array();
- $extracted['has']['link'] = $link_count;
- }
- }
-
- // ----------------------------------- EMBEDS ------------------------------
-
- //Embeds are just individual links on their own line
- if ( self::EMBEDS & $what_to_extract ) {
-
- if ( !function_exists( '_wp_oembed_get_object' ) )
- include( ABSPATH . WPINC . '/class-oembed.php' );
-
- // get an oembed object
- $oembed = _wp_oembed_get_object();
-
- // Grab any links on their own lines that may be embeds
- if ( preg_match_all( '|^\s*(https?://[^\s"]+)\s*$|im', $content, $matches ) ) {
-
- // To hold the extracted stuff we find
- $embeds = array();
-
- foreach ( $matches[1] as $link_raw ) {
- $url = parse_url( $link_raw );
-
- list( $proto, $link_all_but_proto ) = explode( '://', $link_raw );
-
- // Check whether this "link" is really an embed.
- foreach ( $oembed->providers as $matchmask => $data ) {
- list( $providerurl, $regex ) = $data;
-
- // Turn the asterisk-type provider URLs into regex
- if ( !$regex ) {
- $matchmask = '#' . str_replace( '___wildcard___', '(.+)', preg_quote( str_replace( '*', '___wildcard___', $matchmask ), '#' ) ) . '#i';
- $matchmask = preg_replace( '|^#http\\\://|', '#https?\://', $matchmask );
- }
-
- if ( preg_match( $matchmask, $link_raw ) ) {
- $provider = str_replace( '{format}', 'json', $providerurl ); // JSON is easier to deal with than XML
- $embeds[] = $link_all_but_proto; // @todo Check unique before adding
-
- // @todo Try to get ID's for the ones we care about (shortcode_keepers)
- break;
- }
- }
- }
-
- if ( ! empty( $embeds ) ) {
- if ( !isset( $extracted['has'] ) )
- $extracted['has'] = array();
- $extracted['has']['embed'] = count( $embeds );
- $extracted['embed'] = array( 'url' => array() );
- foreach ( $embeds as $e )
- $extracted['embed']['url'][] = $e;
- }
- }
- }
-
- return $extracted;
- }
-
- /**
- * @param $post A post object
- * @param $args (array) Optional args, see defaults list for details
- * @returns array Returns an array of all images meeting the specified criteria in $args
- *
- * Uses Jetpack Post Images
- */
- private static function get_image_fields( $post, $args = array() ) {
-
- $defaults = array(
- 'width' => 200, // Required minimum width (if possible to determine)
- 'height' => 200, // Required minimum height (if possible to determine)
- );
-
- $args = wp_parse_args( $args, $defaults );
-
- $image_list = array();
- $image_booleans = array();
- $image_booleans['gallery'] = 0;
-
- $from_featured_image = Jetpack_PostImages::from_thumbnail( $post->ID, $args['width'], $args['height'] );
- if ( !empty( $from_featured_image ) ) {
- $srcs = wp_list_pluck( $from_featured_image, 'src' );
- $image_list = array_merge( $image_list, $srcs );
- }
-
- $from_slideshow = Jetpack_PostImages::from_slideshow( $post->ID, $args['width'], $args['height'] );
- if ( !empty( $from_slideshow ) ) {
- $srcs = wp_list_pluck( $from_slideshow, 'src' );
- $image_list = array_merge( $image_list, $srcs );
- }
-
- $from_gallery = Jetpack_PostImages::from_gallery( $post->ID );
- if ( !empty( $from_gallery ) ) {
- $srcs = wp_list_pluck( $from_gallery, 'src' );
- $image_list = array_merge( $image_list, $srcs );
- $image_booleans['gallery']++; // @todo This count isn't correct, will only every count 1
- }
-
- // @todo Can we check width/height of these efficiently? Could maybe use query args at least, before we strip them out
- $image_list = Jetpack_Media_Meta_Extractor::get_images_from_html( $post->post_content, $image_list );
-
- return Jetpack_Media_Meta_Extractor::build_image_struct( $image_list, $image_booleans );
- }
-
- public static function extract_images_from_content( $content, $image_list ) {
- $image_list = Jetpack_Media_Meta_Extractor::get_images_from_html( $content, $image_list );
- return Jetpack_Media_Meta_Extractor::build_image_struct( $image_list, array() );
- }
-
- public static function build_image_struct( $image_list, $image_booleans ) {
- if ( ! empty( $image_list ) ) {
- $retval = array( 'image' => array() );
- $image_list = array_unique( $image_list );
- foreach ( $image_list as $img ) {
- $retval['image'][] = array( 'url' => $img );
- }
- $image_booleans['image'] = count( $retval['image'] );
- if ( ! empty( $image_booleans ) )
- $retval['has'] = $image_booleans;
- return $retval;
- } else {
- return array();
- }
- }
-
- /**
- *
- * @param string $html Some markup, possibly containing image tags
- * @param array $images_already_extracted (just an array of image URLs without query strings, no special structure), used for de-duplication
- * @return array Image URLs extracted from the HTML, stripped of query params and de-duped
- */
- public static function get_images_from_html( $html, $images_already_extracted ) {
- $image_list = $images_already_extracted;
- $from_html = Jetpack_PostImages::from_html( $html );
- if ( !empty( $from_html ) ) {
- $srcs = wp_list_pluck( $from_html, 'src' );
- foreach( $srcs as $image_url ) {
- if ( ( $src = parse_url( $image_url ) ) && isset( $src['scheme'], $src['host'], $src['path'] ) ) {
- // Rebuild the URL without the query string
- $queryless = $src['scheme'] . '://' . $src['host'] . $src['path'];
- } elseif ( $length = strpos( $image_url, '?' ) ) {
- // If parse_url() didn't work, strip off the query string the old fashioned way
- $queryless = substr( $image_url, 0, $length );
- } else {
- // Failing that, there was no spoon! Err ... query string!
- $queryless = $image_url;
- }
-
- // Discard URLs that are longer then 4KB, these are likely data URIs or malformed HTML.
- if ( 4096 < strlen( $queryless ) ) {
- continue;
- }
-
- if ( ! in_array( $queryless, $image_list ) ) {
- $image_list[] = $queryless;
- }
- }
- }
- return $image_list;
- }
-
- private static function get_stripped_content( $content ) {
- $clean_content = strip_tags( $content );
- $clean_content = html_entity_decode( $clean_content );
- //completely strip shortcodes and any content they enclose
- $clean_content = strip_shortcodes( $clean_content );
- return $clean_content;
- }
-}
diff --git a/plugins/jetpack/_inc/lib/class.media-summary.php b/plugins/jetpack/_inc/lib/class.media-summary.php
deleted file mode 100644
index 1cce160b..00000000
--- a/plugins/jetpack/_inc/lib/class.media-summary.php
+++ /dev/null
@@ -1,354 +0,0 @@
-<?php
-/**
- * Class Jetpack_Media_Summary
- *
- * embed [video] > gallery > image > text
- */
-class Jetpack_Media_Summary {
-
- private static $cache = array();
-
- static function get( $post_id, $blog_id = 0, $args = array() ) {
-
- $defaults = array(
- 'max_words' => 16,
- 'max_chars' => 256,
- );
- $args = wp_parse_args( $args, $defaults );
-
- $switched = false;
- if ( !empty( $blog_id ) && $blog_id != get_current_blog_id() && function_exists( 'switch_to_blog' ) ) {
- switch_to_blog( $blog_id );
- $switched = true;
- } else {
- $blog_id = get_current_blog_id();
- }
-
- $cache_key = "{$blog_id}_{$post_id}_{$args['max_words']}_{$args['max_chars']}";
- if ( isset( self::$cache[ $cache_key ] ) ) {
- return self::$cache[ $cache_key ];
- }
-
- if ( ! class_exists( 'Jetpack_Media_Meta_Extractor' ) ) {
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- jetpack_require_lib( 'class.wpcom-media-meta-extractor' );
- } else {
- jetpack_require_lib( 'class.media-extractor' );
- }
- }
-
- $post = get_post( $post_id );
- $permalink = get_permalink( $post_id );
-
- $return = array(
- 'type' => 'standard',
- 'permalink' => $permalink,
- 'image' => '',
- 'excerpt' => '',
- 'word_count' => 0,
- 'secure' => array(
- 'image' => '',
- ),
- 'count' => array(
- 'image' => 0,
- 'video' => 0,
- 'word' => 0,
- 'link' => 0,
- ),
- );
-
- if ( empty( $post->post_password ) ) {
- $return['excerpt'] = self::get_excerpt( $post->post_content, $post->post_excerpt, $args['max_words'], $args['max_chars'] , $post);
- $return['count']['word'] = self::get_word_count( $post->post_content );
- $return['count']['word_remaining'] = self::get_word_remaining_count( $post->post_content, $return['excerpt'] );
- $return['count']['link'] = self::get_link_count( $post->post_content );
- }
-
- $extract = Jetpack_Media_Meta_Extractor::extract( $blog_id, $post_id, Jetpack_Media_Meta_Extractor::ALL );
-
- if ( empty( $extract['has'] ) )
- return $return;
-
- // Prioritize [some] video embeds
- if ( !empty( $extract['has']['shortcode'] ) ) {
- foreach ( $extract['shortcode'] as $type => $data ) {
- switch ( $type ) {
- case 'videopress':
- case 'wpvideo':
- if ( 0 == $return['count']['video'] ) {
- // If there is no id on the video, then let's just skip this
- if ( ! isset ( $data['id'][0] ) ) {
- break;
- }
-
- $guid = $data['id'][0];
- $video_info = videopress_get_video_details( $guid );
-
- // Only add the video tags if the guid returns a valid videopress object.
- if ( $video_info instanceof stdClass ) {
- // Continue early if we can't find a Video slug.
- if ( empty( $video_info->files->std->mp4 ) ) {
- break;
- }
-
- $url = sprintf(
- 'https://videos.files.wordpress.com/%1$s/%2$s',
- $guid,
- $video_info->files->std->mp4
- );
-
- $thumbnail = $video_info->poster;
- if ( ! empty( $thumbnail ) ) {
- $return['image'] = $thumbnail;
- $return['secure']['image'] = $thumbnail;
- }
-
- $return['type'] = 'video';
- $return['video'] = esc_url_raw( $url );
- $return['video_type'] = 'video/mp4';
- $return['secure']['video'] = $return['video'];
- }
-
- }
- $return['count']['video']++;
- break;
- case 'youtube':
- if ( 0 == $return['count']['video'] ) {
- $return['type'] = 'video';
- $return['video'] = esc_url_raw( 'http://www.youtube.com/watch?feature=player_embedded&v=' . $extract['shortcode']['youtube']['id'][0] );
- $return['image'] = self::get_video_poster( 'youtube', $extract['shortcode']['youtube']['id'][0] );
- $return['secure']['video'] = self::https( $return['video'] );
- $return['secure']['image'] = self::https( $return['image'] );
- }
- $return['count']['video']++;
- break;
- case 'vimeo':
- if ( 0 == $return['count']['video'] ) {
- $return['type'] = 'video';
- $return['video'] = esc_url_raw( 'http://vimeo.com/' . $extract['shortcode']['vimeo']['id'][0] );
- $return['secure']['video'] = self::https( $return['video'] );
-
- $poster_image = get_post_meta( $post_id, 'vimeo_poster_image', true );
- if ( !empty( $poster_image ) ) {
- $return['image'] = $poster_image;
- $poster_url_parts = parse_url( $poster_image );
- $return['secure']['image'] = 'https://secure-a.vimeocdn.com' . $poster_url_parts['path'];
- }
- }
- $return['count']['video']++;
- break;
- }
- }
-
- }
-
- if ( !empty( $extract['has']['embed'] ) ) {
- foreach( $extract['embed']['url'] as $embed ) {
- if ( preg_match( '/((youtube|vimeo|dailymotion)\.com|youtu.be)/', $embed ) ) {
- if ( 0 == $return['count']['video'] ) {
- $return['type'] = 'video';
- $return['video'] = 'http://' . $embed;
- $return['secure']['video'] = self::https( $return['video'] );
- if ( false !== strpos( $embed, 'youtube' ) ) {
- $return['image'] = self::get_video_poster( 'youtube', jetpack_get_youtube_id( $return['video'] ) );
- $return['secure']['image'] = self::https( $return['image'] );
- } else if ( false !== strpos( $embed, 'youtu.be' ) ) {
- $youtube_id = jetpack_get_youtube_id( $return['video'] );
- $return['video'] = 'http://youtube.com/watch?v=' . $youtube_id . '&feature=youtu.be';
- $return['secure']['video'] = self::https( $return['video'] );
- $return['image'] = self::get_video_poster( 'youtube', jetpack_get_youtube_id( $return['video'] ) );
- $return['secure']['image'] = self::https( $return['image'] );
- } else if ( false !== strpos( $embed, 'vimeo' ) ) {
- $poster_image = get_post_meta( $post_id, 'vimeo_poster_image', true );
- if ( !empty( $poster_image ) ) {
- $return['image'] = $poster_image;
- $poster_url_parts = parse_url( $poster_image );
- $return['secure']['image'] = 'https://secure-a.vimeocdn.com' . $poster_url_parts['path'];
- }
- } else if ( false !== strpos( $embed, 'dailymotion' ) ) {
- $return['image'] = str_replace( 'dailymotion.com/video/','dailymotion.com/thumbnail/video/', $embed );
- $return['image'] = parse_url( $return['image'], PHP_URL_SCHEME ) === null ? 'http://' . $return['image'] : $return['image'];
- $return['secure']['image'] = self::https( $return['image'] );
- }
-
- }
- $return['count']['video']++;
- }
- }
- }
-
- // Do we really want to make the video the primary focus of the post?
- if ( 'video' == $return['type'] ) {
- $content = wpautop( strip_tags( $post->post_content ) );
- $paragraphs = explode( '</p>', $content );
- $number_of_paragraphs = 0;
-
- foreach ( $paragraphs as $i => $paragraph ) {
- // Don't include blank lines as a paragraph
- if ( '' == trim( $paragraph ) ) {
- unset( $paragraphs[$i] );
- continue;
- }
- $number_of_paragraphs++;
- }
-
- $number_of_paragraphs = $number_of_paragraphs - $return['count']['video']; // subtract amount for videos..
-
- // More than 2 paragraph? The video is not the primary focus so we can do some more analysis
- if ( $number_of_paragraphs > 2 )
- $return['type'] = 'standard';
- }
-
- // If we don't have any prioritized embed...
- if ( 'standard' == $return['type'] ) {
- if ( ( ! empty( $extract['has']['gallery'] ) || ! empty( $extract['shortcode']['gallery']['count'] ) ) && ! empty( $extract['image'] ) ) {
- //... Then we prioritize galleries first (multiple images returned)
- $return['type'] = 'gallery';
- $return['images'] = $extract['image'];
- foreach ( $return['images'] as $image ) {
- $return['secure']['images'][] = array( 'url' => self::ssl_img( $image['url'] ) );
- $return['count']['image']++;
- }
- } else if ( ! empty( $extract['has']['image'] ) ) {
- // ... Or we try and select a single image that would make sense
- $content = wpautop( strip_tags( $post->post_content ) );
- $paragraphs = explode( '</p>', $content );
- $number_of_paragraphs = 0;
-
- foreach ( $paragraphs as $i => $paragraph ) {
- // Don't include 'actual' captions as a paragraph
- if ( false !== strpos( $paragraph, '[caption' ) ) {
- unset( $paragraphs[$i] );
- continue;
- }
- // Don't include blank lines as a paragraph
- if ( '' == trim( $paragraph ) ) {
- unset( $paragraphs[$i] );
- continue;
- }
- $number_of_paragraphs++;
- }
-
- $return['image'] = $extract['image'][0]['url'];
- $return['secure']['image'] = self::ssl_img( $return['image'] );
- $return['count']['image']++;
-
- if ( $number_of_paragraphs <= 2 && 1 == count( $extract['image'] ) ) {
- // If we have lots of text or images, let's not treat it as an image post, but return its first image
- $return['type'] = 'image';
- }
- }
- }
-
- if ( $switched ) {
- restore_current_blog();
- }
-
- /**
- * Allow a theme or plugin to inspect and ultimately change the media summary.
- *
- * @since 4.4.0
- *
- * @param array $data The calculated media summary data.
- * @param int $post_id The id of the post this data applies to.
- */
- $return = apply_filters( 'jetpack_media_summary_output', $return, $post_id );
-
- self::$cache[ $cache_key ] = $return;
-
- return $return;
- }
-
- static function https( $str ) {
- return str_replace( 'http://', 'https://', $str );
- }
-
- static function ssl_img( $url ) {
- if ( false !== strpos( $url, 'files.wordpress.com' ) ) {
- return self::https( $url );
- } else {
- return self::https( jetpack_photon_url( $url ) );
- }
- }
-
- static function get_video_poster( $type, $id ) {
- if ( 'videopress' == $type ) {
- if ( function_exists( 'video_get_highest_resolution_image_url' ) ) {
- return video_get_highest_resolution_image_url( $id );
- } else if ( class_exists( 'VideoPress_Video' ) ) {
- $video = new VideoPress_Video( $id );
- return $video->poster_frame_uri;
- }
- } else if ( 'youtube' == $type ) {
- return 'http://img.youtube.com/vi/'.$id.'/0.jpg';
- }
- }
-
- static function clean_text( $text ) {
- return trim(
- preg_replace(
- '/[\s]+/',
- ' ',
- preg_replace(
- '@https?://[\S]+@',
- '',
- strip_shortcodes(
- strip_tags(
- $text
- )
- )
- )
- )
- );
- }
-
- /**
- * Retrieve an excerpt for the post summary.
- *
- * This function works around a suspected problem with Core. If resolved, this function should be simplified.
- * @link https://github.com/Automattic/jetpack/pull/8510
- * @link https://core.trac.wordpress.org/ticket/42814
- *
- * @param string $post_content The post's content.
- * @param string $post_excerpt The post's excerpt. Empty if none was explicitly set.
- * @param int $max_words Maximum number of words for the excerpt. Used on wp.com. Default 16.
- * @param int $max_chars Maximum characters in the excerpt. Used on wp.com. Default 256.
- * @param WP_Post $requested_post The post object.
- * @return string Post excerpt.
- **/
- static function get_excerpt( $post_content, $post_excerpt, $max_words = 16, $max_chars = 256, $requested_post = null ) {
- global $post;
- $original_post = $post; // Saving the global for later use.
- if ( function_exists( 'wpcom_enhanced_excerpt_extract_excerpt' ) ) {
- return self::clean_text( wpcom_enhanced_excerpt_extract_excerpt( array(
- 'text' => $post_content,
- 'excerpt_only' => true,
- 'show_read_more' => false,
- 'max_words' => $max_words,
- 'max_chars' => $max_chars,
- 'read_more_threshold' => 25,
- ) ) );
- } elseif ( $requested_post instanceof WP_Post ) {
- $post = $requested_post; // setup_postdata does not set the global.
- setup_postdata( $post );
- /** This filter is documented in core/src/wp-includes/post-template.php */
- $post_excerpt = apply_filters( 'get_the_excerpt', $post_excerpt, $post );
- $post = $original_post; // wp_reset_postdata uses the $post global.
- wp_reset_postdata();
- return self::clean_text( $post_excerpt );
- }
- return '';
- }
-
- static function get_word_count( $post_content ) {
- return str_word_count( self::clean_text( $post_content ) );
- }
-
- static function get_word_remaining_count( $post_content, $excerpt_content ) {
- return str_word_count( self::clean_text( $post_content ) ) - str_word_count( self::clean_text( $excerpt_content ) );
- }
-
- static function get_link_count( $post_content ) {
- return preg_match_all( '/\<a[\> ]/', $post_content, $matches );
- }
-}
diff --git a/plugins/jetpack/_inc/lib/class.media.php b/plugins/jetpack/_inc/lib/class.media.php
deleted file mode 100644
index e48c4aad..00000000
--- a/plugins/jetpack/_inc/lib/class.media.php
+++ /dev/null
@@ -1,505 +0,0 @@
-<?php
-
-require_once( JETPACK__PLUGIN_DIR . 'sal/class.json-api-date.php' );
-
-/**
- * Class to handle different actions related to media.
- */
-class Jetpack_Media {
- public static $WP_ORIGINAL_MEDIA = '_wp_original_post_media';
- public static $WP_REVISION_HISTORY = '_wp_revision_history';
- public static $REVISION_HISTORY_MAXIMUM_AMOUNT = 0;
- public static $WP_ATTACHMENT_IMAGE_ALT = '_wp_attachment_image_alt';
-
- /**
- * Generate a filename in function of the original filename of the media.
- * The returned name has the `{basename}-{hash}-{random-number}.{ext}` shape.
- * The hash is built according to the filename trying to avoid name collisions
- * with other media files.
- *
- * @param number $media_id - media post ID
- * @param string $new_filename - the new filename
- * @return string A random filename.
- */
- public static function generate_new_filename( $media_id, $new_filename ) {
- // get the right filename extension
- $new_filename_paths = pathinfo( $new_filename );
- $new_file_ext = $new_filename_paths['extension'];
-
- // take out filename from the original file or from the current attachment
- $original_media = (array) self::get_original_media( $media_id );
-
- if ( ! empty( $original_media ) ) {
- $original_file_parts = pathinfo( $original_media['file'] );
- $filename_base = $original_file_parts['filename'];
- } else {
- $current_file = get_attached_file( $media_id );
- $current_file_parts = pathinfo( $current_file );
- $current_file_ext = $current_file_parts['filename'];
- $filename_base = $current_file_parts['filename'];
- }
-
- // add unique seed based on the filename
- $filename_base .= '-' . crc32( $filename_base ) . '-';
-
- $number_suffix = time() . rand( 100, 999 );
-
- do {
- $filename = $filename_base;
- $filename .= $number_suffix;
- $file_ext = $new_file_ext ? $new_file_ext : $current_file_ext;
-
- $new_filename = "{$filename}.{$file_ext}";
- $new_path = "{$current_file_parts['dirname']}/$new_filename";
- $number_suffix++;
- } while( file_exists( $new_path ) );
-
- return $new_filename;
- }
-
- /**
- * File urls use the post (image item) date to generate a folder path.
- * Post dates can change, so we use the original date used in the `guid`
- * url so edits can remain in the same folder. In the following function
- * we capture a string in the format of `YYYY/MM` from the guid.
- *
- * For example with a guid of
- * "http://test.files.wordpress.com/2016/10/test.png" the resulting string
- * would be: "2016/10"
- *
- * @param number $media_id
- * @return string
- */
- private function get_time_string_from_guid( $media_id ) {
- $time = date( "Y/m", strtotime( current_time( 'mysql' ) ) );
-
- if ( $media = get_post( $media_id ) ) {
- $pattern = '/\/(\d{4}\/\d{2})\//';
- preg_match( $pattern, $media->guid, $matches );
- if ( count( $matches ) > 1 ) {
- $time = $matches[1];
- }
- }
- return $time;
- }
-
- /**
- * Return an array of allowed mime_type items used to upload a media file.
- *
- * @return array mime_type array
- */
- static function get_allowed_mime_types( $default_mime_types ) {
- return array_unique( array_merge( $default_mime_types, array(
- 'application/msword', // .doc
- 'application/vnd.ms-powerpoint', // .ppt, .pps
- 'application/vnd.ms-excel', // .xls
- 'application/vnd.openxmlformats-officedocument.presentationml.presentation', // .pptx
- 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', // .ppsx
- 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', // .xlsx
- 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', // .docx
- 'application/vnd.oasis.opendocument.text', // .odt
- 'application/pdf', // .pdf
- ) ) );
- }
-
- /**
- * Checks that the mime type of the file
- * is among those in a filterable list of mime types.
- *
- * @param string $file Path to file to get its mime type.
- * @return bool
- */
- protected static function is_file_supported_for_sideloading( $file ) {
- if ( class_exists( 'finfo' ) ) { // php 5.3+
- // phpcs:ignore PHPCompatibility.PHP.NewClasses.finfoFound
- $finfo = new finfo( FILEINFO_MIME );
- $mime = explode( '; ', $finfo->file( $file ) );
- $type = $mime[0];
-
- } elseif ( function_exists( 'mime_content_type' ) ) { // PHP 5.2
- $type = mime_content_type( $file );
-
- } else {
- return false;
- }
-
- /**
- * Filter the list of supported mime types for media sideloading.
- *
- * @since 4.0
- *
- * @module json-api
- *
- * @param array $supported_mime_types Array of the supported mime types for media sideloading.
- */
- $supported_mime_types = apply_filters( 'jetpack_supported_media_sideload_types', array(
- 'image/png',
- 'image/jpeg',
- 'image/gif',
- 'image/bmp',
- 'video/quicktime',
- 'video/mp4',
- 'video/mpeg',
- 'video/ogg',
- 'video/3gpp',
- 'video/3gpp2',
- 'video/h261',
- 'video/h262',
- 'video/h264',
- 'video/x-msvideo',
- 'video/x-ms-wmv',
- 'video/x-ms-asf',
- ) );
-
- // If the type returned was not an array as expected, then we know we don't have a match.
- if ( ! is_array( $supported_mime_types ) ) {
- return false;
- }
-
- return in_array( $type, $supported_mime_types );
- }
-
- /**
- * Try to remove the temporal file from the given file array.
- *
- * @param array $file_array Array with data about the temporal file
- * @return bool `true` if the file has been removed. `false` either the file doesn't exist or it couldn't be removed.
- */
- private static function remove_tmp_file( $file_array ) {
- if ( ! file_exists ( $file_array['tmp_name'] ) ) {
- return false;
- }
- return @unlink( $file_array['tmp_name'] );
- }
-
- /**
- * Save the given temporal file considering file type,
- * correct location according to the original file path, etc.
- * The file type control is done through of `jetpack_supported_media_sideload_types` filter,
- * which allows define to the users their own file types list.
- *
- * @param array $file_array file to save
- * @param number $media_id
- * @return array|WP_Error an array with information about the new file saved or a WP_Error is something went wrong.
- */
- public static function save_temporary_file( $file_array, $media_id ) {
- $tmp_filename = $file_array['tmp_name'];
-
- if ( ! file_exists( $tmp_filename ) ) {
- return new WP_Error( 'invalid_input', 'No media provided in input.' );
- }
-
- // add additional mime_types through of the `jetpack_supported_media_sideload_types` filter
- $mime_type_static_filter = array(
- 'Jetpack_Media',
- 'get_allowed_mime_types'
- );
-
- add_filter( 'jetpack_supported_media_sideload_types', $mime_type_static_filter );
- if (
- ! self::is_file_supported_for_sideloading( $tmp_filename ) &&
- ! file_is_displayable_image( $tmp_filename )
- ) {
- @unlink( $tmp_filename );
- return new WP_Error( 'invalid_input', 'Invalid file type.', 403 );
- }
- remove_filter( 'jetpack_supported_media_sideload_types', $mime_type_static_filter );
-
- // generate a new file name
- $tmp_new_filename = self::generate_new_filename( $media_id, $file_array[ 'name' ] );
-
- // start to create the parameters to move the temporal file
- $overrides = array( 'test_form' => false );
-
- // get time according to the original filaname
- $time = self::get_time_string_from_guid( $media_id );
-
- $file_array['name'] = $tmp_new_filename;
- $file = wp_handle_sideload( $file_array, $overrides, $time );
-
- self::remove_tmp_file( $file_array );
-
- if ( isset( $file['error'] ) ) {
- return new WP_Error( 'upload_error', $file['error'] );
- }
-
- return $file;
- }
-
- /**
- * Return an object with an snapshot of a revision item.
- *
- * @param object $media_item - media post object
- * @return object a revision item
- */
- public static function get_snapshot( $media_item ) {
- $current_file = get_attached_file( $media_item->ID );
- $file_paths = pathinfo( $current_file );
-
- $snapshot = array(
- 'date' => (string) WPCOM_JSON_API_Date::format_date( $media_item->post_modified_gmt, $media_item->post_modified ),
- 'URL' => (string) wp_get_attachment_url( $media_item->ID ),
- 'file' => (string) $file_paths['basename'],
- 'extension' => (string) $file_paths['extension'],
- 'mime_type' => (string) $media_item->post_mime_type,
- 'size' => (int) filesize( $current_file )
- );
-
- return (object) $snapshot;
- }
-
- /**
- * Add a new item into revision_history array.
- *
- * @param object $media_item - media post object
- * @param file $file - file recently added
- * @param bool $has_original_media - condition is the original media has been already added
- * @return bool `true` if the item has been added. Otherwise `false`.
- */
- public static function register_revision( $media_item, $file, $has_original_media ) {
- if ( is_wp_error( $file ) || ! $has_original_media ) {
- return false;
- }
-
- add_post_meta( $media_item->ID, self::$WP_REVISION_HISTORY, self::get_snapshot( $media_item ) );
- }
- /**
- * Return the `revision_history` of the given media.
- *
- * @param number $media_id - media post ID
- * @return array `revision_history` array
- */
- public static function get_revision_history( $media_id ) {
- return array_reverse( get_post_meta( $media_id, self::$WP_REVISION_HISTORY ) );
- }
-
- /**
- * Return the original media data
- */
- public static function get_original_media( $media_id ) {
- $original = get_post_meta( $media_id, self::$WP_ORIGINAL_MEDIA, true );
- $original = $original ? $original : array();
- return $original;
- }
-
- public static function delete_file( $pathname ) {
- if ( ! file_exists( $pathname ) || ! is_file( $pathname ) ) {
- // let's touch a fake file to try to `really` remove the media file
- touch( $pathname );
- }
-
- return wp_delete_file( $pathname );
- }
-
- /**
- * Try to delete a file according to the dirname of
- * the media attached file and the filename.
- *
- * @param number $media_id - media post ID
- * @param string $filename - basename of the file ( name-of-file.ext )
- * @return bool `true` is the file has been removed, `false` if not.
- */
- private static function delete_media_history_file( $media_id, $filename ) {
- $attached_path = get_attached_file( $media_id );
- $attached_parts = pathinfo( $attached_path );
- $dirname = $attached_parts['dirname'];
-
- $pathname = $dirname . '/' . $filename;
-
- // remove thumbnails
- $metadata = wp_generate_attachment_metadata( $media_id, $pathname );
-
- if ( isset( $metadata ) && isset( $metadata['sizes'] ) ) {
- foreach ( $metadata['sizes'] as $size => $properties ) {
- self::delete_file( $dirname . '/' . $properties['file'] );
- }
- }
-
- // remove primary file
- self::delete_file( $pathname );
- }
-
- /**
- * Remove specific items from the `revision history` array
- * depending on the given criteria: array(
- * 'from' => (int) <from>,
- * 'to' => (int) <to>,
- * )
- *
- * Also, it removes the file defined in each item.
- *
- * @param number $media_id - media post ID
- * @param object $criteria - criteria to remove the items
- * @param array [$revision_history] - revision history array
- * @return array `revision_history` array updated.
- */
- public static function remove_items_from_revision_history( $media_id, $criteria = array(), $revision_history ) {
- if ( ! isset ( $revision_history ) ) {
- $revision_history = self::get_revision_history( $media_id );
- }
-
- $from = $criteria['from'];
- $to = $criteria['to'] ? $criteria['to'] : ( $from + 1 );
-
- for ( $i = $from; $i < $to; $i++ ) {
- $removed_item = array_slice( $revision_history, $from, 1 );
- if ( ! $removed_item ) {
- break;
- }
-
- array_splice( $revision_history, $from, 1 );
- self::delete_media_history_file( $media_id, $removed_item[0]->file );
- }
-
- // override all history items
- delete_post_meta( $media_id, self::$WP_REVISION_HISTORY );
- $revision_history = array_reverse( $revision_history );
- foreach ( $revision_history as &$item ) {
- add_post_meta( $media_id, self::$WP_REVISION_HISTORY, $item );
- }
-
- return $revision_history;
- }
-
- /**
- * Limit the number of items of the `revision_history` array.
- * When the stack is overflowing the oldest item is remove from there (FIFO).
- *
- * @param number $media_id - media post ID
- * @param number [$limit] - maximun amount of items. 20 as default.
- * @return array items removed from `revision_history`
- */
- public static function limit_revision_history( $media_id, $limit = null) {
- if ( is_null( $limit ) ) {
- $limit = self::$REVISION_HISTORY_MAXIMUM_AMOUNT;
- }
-
- $revision_history = self::get_revision_history( $media_id );
-
- $total = count( $revision_history );
-
- if ( $total < $limit ) {
- return array();
- }
-
- self::remove_items_from_revision_history(
- $media_id,
- array( 'from' => $limit, 'to' => $total ),
- $revision_history
- );
-
- return self::get_revision_history( $media_id );
- }
-
- /**
- * Remove the original file and clean the post metadata.
- *
- * @param number $media_id - media post ID
- */
- public static function clean_original_media( $media_id ) {
- $original_file = self::get_original_media( $media_id );
-
- if ( ! $original_file ) {
- return null;
- }
-
- self::delete_media_history_file( $media_id, $original_file->file );
- return delete_post_meta( $media_id, self::$WP_ORIGINAL_MEDIA );
- }
-
- /**
- * Clean `revision_history` of the given $media_id. it means:
- * - remove all media files tied to the `revision_history` items.
- * - clean `revision_history` meta data.
- * - remove and clean the `original_media`
- *
- * @param number $media_id - media post ID
- * @return array results of removing these files
- */
- public static function clean_revision_history( $media_id ) {
- self::clean_original_media( $media_id );
-
- $revision_history = self::get_revision_history( $media_id );
- $total = count( $revision_history );
- $updated_history = array();
-
- if ( $total < 1 ) {
- return $updated_history;
- }
-
- $updated_history = self::remove_items_from_revision_history(
- $media_id,
- array( 'from' => 0, 'to' => $total ),
- $revision_history
- );
-
- return $updated_history;
- }
-
- /**
- * Edit media item process:
- *
- * - update attachment file
- * - preserve original media file
- * - trace revision history
- *
- * @param number $media_id - media post ID
- * @param array $file_array - temporal file
- * @return {Post|WP_Error} Updated media item or a WP_Error is something went wrong.
- */
- public static function edit_media_file( $media_id, $file_array ) {
- $media_item = get_post( $media_id );
- $has_original_media = self::get_original_media( $media_id );
-
- if ( ! $has_original_media ) {
- // The first time that the media is updated
- // the original media is stored into the revision_history
- $snapshot = self::get_snapshot( $media_item );
- add_post_meta( $media_id, self::$WP_ORIGINAL_MEDIA, $snapshot, true );
- }
-
- // save temporary file in the correct location
- $uploaded_file = self::save_temporary_file( $file_array, $media_id );
-
- if ( is_wp_error( $uploaded_file ) ) {
- self::remove_tmp_file( $file_array );
- return $uploaded_file;
- }
-
- // revision_history control
- self::register_revision( $media_item, $uploaded_file, $has_original_media );
-
- $uploaded_path = $uploaded_file['file'];
- $udpated_mime_type = $uploaded_file['type'];
- $was_updated = update_attached_file( $media_id, $uploaded_path );
-
- if ( ! $was_updated ) {
- return WP_Error( 'update_error', 'Media update error' );
- }
-
- $new_metadata = wp_generate_attachment_metadata( $media_id, $uploaded_path );
- wp_update_attachment_metadata( $media_id, $new_metadata );
-
- // check maximum amount of revision_history
- self::limit_revision_history( $media_id );
-
- $edited_action = wp_update_post( (object) array(
- 'ID' => $media_id,
- 'post_mime_type' => $udpated_mime_type
- ), true );
-
- if ( is_wp_error( $edited_action ) ) {
- return $edited_action;
- }
-
- return $media_item;
- }
-}
-
-// hook: clean revision history when the media item is deleted
-function clean_revision_history( $media_id ) {
- Jetpack_Media::clean_revision_history( $media_id );
-};
-
-add_action( 'delete_attachment', 'clean_revision_history' );
-
diff --git a/plugins/jetpack/_inc/lib/core-api/class-wpcom-rest-field-controller.php b/plugins/jetpack/_inc/lib/core-api/class-wpcom-rest-field-controller.php
deleted file mode 100644
index e599b275..00000000
--- a/plugins/jetpack/_inc/lib/core-api/class-wpcom-rest-field-controller.php
+++ /dev/null
@@ -1,330 +0,0 @@
-<?php
-
-// @todo - nicer API for array values?
-
-/**
- * `WP_REST_Controller` is basically a wrapper for `register_rest_route()`
- * `WPCOM_REST_API_V2_Field_Controller` is a mostly-analogous wrapper for `register_rest_field()`
- */
-abstract class WPCOM_REST_API_V2_Field_Controller {
- /**
- * @var string|string[] $object_type The REST Object Type(s) to which the field should be added.
- */
- protected $object_type;
-
- /**
- * @var string $field_name The name of the REST API field to add.
- */
- protected $field_name;
-
- public function __construct() {
- if ( ! $this->object_type ) {
- /* translators: %s: object_type */
- _doing_it_wrong( 'WPCOM_REST_API_V2_Field_Controller::$object_type', sprintf( __( "Property '%s' must be overridden.", 'jetpack' ), 'object_type' ), 'Jetpack 6.8' );
- return;
- }
-
- if ( ! $this->field_name ) {
- /* translators: %s: field_name */
- _doing_it_wrong( 'WPCOM_REST_API_V2_Field_Controller::$field_name', sprintf( __( "Property '%s' must be overridden.", 'jetpack' ), 'field_name' ), 'Jetpack 6.8' );
- return;
- }
-
- add_action( 'rest_api_init', array( $this, 'register_fields' ) );
- }
-
- /**
- * Registers the field with the appropriate schema and callbacks.
- */
- public function register_fields() {
- foreach ( (array) $this->object_type as $object_type ) {
- register_rest_field(
- $object_type,
- $this->field_name,
- array(
- 'get_callback' => array( $this, 'get_for_response' ),
- 'update_callback' => array( $this, 'update_from_request' ),
- 'schema' => $this->get_schema(),
- )
- );
- }
- }
-
- /**
- * Ensures the response matches the schema and request context.
- *
- * @param mixed $value
- * @param WP_REST_Request $request
- * @return mixed
- */
- private function prepare_for_response( $value, $request ) {
- $context = ! empty( $request['context'] ) ? $request['context'] : 'view';
- $schema = $this->get_schema();
-
- $is_valid = rest_validate_value_from_schema( $value, $schema, $this->field_name );
- if ( is_wp_error( $is_valid ) ) {
- return $is_valid;
- }
-
- return $this->filter_response_by_context( $value, $schema, $context );
- }
-
- /**
- * Returns the schema's default value
- *
- * If there is no default, returns the type's falsey value.
- *
- * @param array $schema
- * @return mixed
- */
- final public function get_default_value( $schema ) {
- if ( isset( $schema['default'] ) ) {
- return $schema['default'];
- }
-
- // If you have something more complicated, use $schema['default'];
- switch ( isset( $schema['type'] ) ? $schema['type'] : 'null' ) {
- case 'string':
- return '';
- case 'integer':
- case 'number':
- return 0;
- case 'object':
- return (object) array();
- case 'array':
- return array();
- case 'boolean':
- return false;
- case 'null':
- default:
- return null;
- }
- }
-
- /**
- * The field's wrapped getter. Does permission checks and output preparation.
- *
- * This cannot be extended: implement `->get()` instead.
- *
- * @param mixed $object_data Probably an array. Whatever the endpoint returns.
- * @param string $field_name Should always match `->field_name`
- * @param WP_REST_Request $request
- * @param string $object_type Should always match `->object_type`
- * @return mixed
- */
- final public function get_for_response( $object_data, $field_name, $request, $object_type ) {
- $permission_check = $this->get_permission_check( $object_data, $request );
-
- if ( ! $permission_check ) {
- /* translators: %s: get_permission_check() */
- _doing_it_wrong( 'WPCOM_REST_API_V2_Field_Controller::get_permission_check', sprintf( __( "Method '%s' must return either true or WP_Error.", 'jetpack' ), 'get_permission_check' ), 'Jetpack 6.8' );
- return $this->get_default_value( $this->get_schema() );
- }
-
- if ( is_wp_error( $permission_check ) ) {
- return $this->get_default_value( $this->get_schema() );
- }
-
- $value = $this->get( $object_data, $request );
-
- return $this->prepare_for_response( $value, $request );
- }
-
- /**
- * The field's wrapped setter. Does permission checks.
- *
- * This cannot be extended: implement `->update()` instead.
- *
- * @param mixed $value The new value for the field.
- * @param mixed $object_data Probably a WordPress object (e.g., WP_Post)
- * @param string $field_name Should always match `->field_name`
- * @param WP_REST_Request $request
- * @param string $object_type Should always match `->object_type`
- * @return void|WP_Error
- */
- final public function update_from_request( $value, $object_data, $field_name, $request, $object_type ) {
- $permission_check = $this->update_permission_check( $value, $object_data, $request );
-
- if ( ! $permission_check ) {
- /* translators: %s: update_permission_check() */
- _doing_it_wrong( 'WPCOM_REST_API_V2_Field_Controller::update_permission_check', sprintf( __( "Method '%s' must return either true or WP_Error.", 'jetpack' ), 'update_permission_check' ), 'Jetpack 6.8' );
- /* translators: %s: the name of an API response field */
- return new WP_Error( 'invalid_user_permission', sprintf( __( "You are not allowed to access the '%s' field.", 'jetpack' ), $this->field_name ) );
- }
-
- if ( is_wp_error( $permission_check ) ) {
- return $permission_check;
- }
-
- $updated = $this->update( $value, $object_data, $request );
-
- if ( is_wp_error( $updated ) ) {
- return $updated;
- }
- }
-
- /**
- * Permission Check for the field's getter. Must be implemented in the inheriting class.
- *
- * @param mixed $object_data Whatever the endpoint would return for its response.
- * @param WP_REST_Request $request
- * @return true|WP_Error
- */
- public function get_permission_check( $object_data, $request ) {
- /* translators: %s: get_permission_check() */
- _doing_it_wrong( 'WPCOM_REST_API_V2_Field_Controller::get_permission_check', sprintf( __( "Method '%s' must be overridden.", 'jetpack' ), __METHOD__ ), 'Jetpack 6.8' );
- }
-
- /**
- * The field's "raw" getter. Must be implemented in the inheriting class.
- *
- * @param mixed $object_data Whatever the endpoint would return for its response.
- * @param WP_REST_Request $request
- * @return mixed
- */
- public function get( $object_data, $request ) {
- /* translators: %s: get() */
- _doing_it_wrong( 'WPCOM_REST_API_V2_Field_Controller::get', sprintf( __( "Method '%s' must be overridden.", 'jetpack' ), __METHOD__ ), 'Jetpack 6.8' );
- }
-
- /**
- * Permission Check for the field's setter. Must be implemented in the inheriting class.
- *
- * @param mixed $value The new value for the field.
- * @param mixed $object_data Probably a WordPress object (e.g., WP_Post)
- * @param WP_REST_Request $request
- * @return true|WP_Error
- */
- public function update_permission_check( $value, $object_data, $request ) {
- /* translators: %s: update_permission_check() */
- _doing_it_wrong( 'WPCOM_REST_API_V2_Field_Controller::update_permission_check', sprintf( __( "Method '%s' must be overridden.", 'jetpack' ), __METHOD__ ), 'Jetpack 6.8' );
- }
-
- /**
- * The field's "raw" setter. Must be implemented in the inheriting class.
- *
- * @param mixed $value The new value for the field.
- * @param mixed $object_data Probably a WordPress object (e.g., WP_Post)
- * @param WP_REST_Request $request
- * @return mixed
- */
- public function update( $value, $object_data, $request ) {
- /* translators: %s: update() */
- _doing_it_wrong( 'WPCOM_REST_API_V2_Field_Controller::update', sprintf( __( "Method '%s' must be overridden.", 'jetpack' ), __METHOD__ ), 'Jetpack 6.8' );
- }
-
- /**
- * The JSON Schema for the field
- *
- * @link https://json-schema.org/understanding-json-schema/
- * As of WordPress 5.0, Core currently understands:
- * * type
- * * string - not minLength, not maxLength, not pattern
- * * integer - minimum, maximum, exclusiveMinimum, exclusiveMaximum, not multipleOf
- * * number - minimum, maximum, exclusiveMinimum, exclusiveMaximum, not multipleOf
- * * boolean
- * * null
- * * object - properties, additionalProperties, not propertyNames, not dependencies, not patternProperties, not required
- * * array: only lists, not tuples - items, not minItems, not maxItems, not uniqueItems, not contains
- * * enum
- * * format
- * * date-time
- * * email
- * * ip
- * * uri
- * As of WordPress 5.0, Core does not support:
- * * Multiple type: `type: [ 'string', 'integer' ]`
- * * $ref, allOf, anyOf, oneOf, not, const
- *
- * @return array
- */
- public function get_schema() {
- /* translators: %s: get_schema() */
- _doing_it_wrong( 'WPCOM_REST_API_V2_Field_Controller::get_schema', sprintf( __( "Method '%s' must be overridden.", 'jetpack' ), __METHOD__ ), 'Jetpack 6.8' );
- }
-
- /**
- * @param array $schema
- * @param string $context REST API Request context
- * @return bool
- */
- private function is_valid_for_context( $schema, $context ) {
- return empty( $schema['context'] ) || in_array( $context, $schema['context'], true );
- }
-
- /**
- * Removes properties that should not appear in the current
- * request's context
- *
- * $context is a Core REST API Framework request attribute that is
- * always one of:
- * * view (what you see on the blog)
- * * edit (what you see in an editor)
- * * embed (what you see in, e.g., an oembed)
- *
- * Fields (and sub-fields, and sub-sub-...) can be flagged for a
- * set of specific contexts via the field's schema.
- *
- * The Core API will filter out top-level fields with the wrong
- * context, but will not recurse deeply enough into arrays/objects
- * to remove all levels of sub-fields with the wrong context.
- *
- * This function handles that recursion.
- *
- * @param mixed $value
- * @param array $schema
- * @param string $context REST API Request context
- * @return mixed Filtered $value
- */
- final public function filter_response_by_context( $value, $schema, $context ) {
- if ( ! $this->is_valid_for_context( $schema, $context ) ) {
- // We use this intentionally odd looking WP_Error object
- // internally only in this recursive function (see below
- // in the `object` case). It will never be output by the REST API.
- // If we return this for the top level object, Core
- // correctly remove the top level object from the response
- // for us.
- return new WP_Error( '__wrong-context__' );
- }
-
- switch ( $schema['type'] ) {
- case 'array':
- if ( ! isset( $schema['items'] ) ) {
- return $value;
- }
-
- // Shortcircuit if we know none of the items are valid for this context.
- // This would only happen in a strangely written schema.
- if ( ! $this->is_valid_for_context( $schema['items'], $context ) ) {
- return array();
- }
-
- // Recurse to prune sub-properties of each item.
- foreach ( $value as $key => $item ) {
- $value[ $key ] = $this->filter_response_by_context( $item, $schema['items'], $context );
- }
-
- return $value;
- case 'object':
- if ( ! isset( $schema['properties'] ) ) {
- return $value;
- }
-
- foreach ( $value as $field_name => $field_value ) {
- if ( isset( $schema['properties'][ $field_name ] ) ) {
- $field_value = $this->filter_response_by_context( $field_value, $schema['properties'][ $field_name ], $context );
- if ( is_wp_error( $field_value ) && '__wrong-context__' === $field_value->get_error_code() ) {
- unset( $value[ $field_name ] );
- } else {
- // Respect recursion that pruned sub-properties of each property.
- $value[ $field_name ] = $field_value;
- }
- }
- }
-
- return (object) $value;
- }
-
- return $value;
- }
-}
diff --git a/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-module-endpoints.php b/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-module-endpoints.php
deleted file mode 100644
index 368b381a..00000000
--- a/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-module-endpoints.php
+++ /dev/null
@@ -1,1769 +0,0 @@
-<?php
-/**
- * This is the base class for every Core API endpoint Jetpack uses.
- *
- */
-class Jetpack_Core_API_Module_Toggle_Endpoint
- extends Jetpack_Core_API_XMLRPC_Consumer_Endpoint {
-
- /**
- * Check if the module requires the site to be publicly accessible from WPCOM.
- * If the site meets this requirement, the module is activated. Otherwise an error is returned.
- *
- * @since 4.3.0
- *
- * @param WP_REST_Request $request {
- * Array of parameters received by request.
- *
- * @type string $slug Module slug.
- * @type bool $active should module be activated.
- * }
- *
- * @return WP_REST_Response|WP_Error A REST response if the request was served successfully, otherwise an error.
- */
- public function process( $request ) {
- if ( $request['active'] ) {
- return $this->activate_module( $request );
- } else {
- return $this->deactivate_module( $request );
- }
- }
-
- /**
- * If it's a valid Jetpack module, activate it.
- *
- * @since 4.3.0
- *
- * @param string|WP_REST_Request $request It's a WP_REST_Request when called from endpoint /module/<slug>/*
- * and a string when called from Jetpack_Core_API_Data->update_data.
- * {
- * Array of parameters received by request.
- *
- * @type string $slug Module slug.
- * }
- *
- * @return bool|WP_Error True if module was activated. Otherwise, a WP_Error instance with the corresponding error.
- */
- public function activate_module( $request ) {
- $module_slug = '';
-
- if (
- (
- is_array( $request )
- || is_object( $request )
- )
- && isset( $request['slug'] )
- ) {
- $module_slug = $request['slug'];
- } else {
- $module_slug = $request;
- }
-
- if ( ! Jetpack::is_module( $module_slug ) ) {
- return new WP_Error(
- 'not_found',
- esc_html__( 'The requested Jetpack module was not found.', 'jetpack' ),
- array( 'status' => 404 )
- );
- }
-
- if ( ! Jetpack_Plan::supports( $module_slug ) ) {
- return new WP_Error(
- 'not_supported',
- esc_html__( 'The requested Jetpack module is not supported by your plan.', 'jetpack' ),
- array( 'status' => 424 )
- );
- }
-
- if ( Jetpack::activate_module( $module_slug, false, false ) ) {
- return rest_ensure_response( array(
- 'code' => 'success',
- 'message' => esc_html__( 'The requested Jetpack module was activated.', 'jetpack' ),
- ) );
- }
-
- return new WP_Error(
- 'activation_failed',
- esc_html__( 'The requested Jetpack module could not be activated.', 'jetpack' ),
- array( 'status' => 424 )
- );
- }
-
- /**
- * If it's a valid Jetpack module, deactivate it.
- *
- * @since 4.3.0
- *
- * @param string|WP_REST_Request $request It's a WP_REST_Request when called from endpoint /module/<slug>/*
- * and a string when called from Jetpack_Core_API_Data->update_data.
- * {
- * Array of parameters received by request.
- *
- * @type string $slug Module slug.
- * }
- *
- * @return bool|WP_Error True if module was activated. Otherwise, a WP_Error instance with the corresponding error.
- */
- public function deactivate_module( $request ) {
- $module_slug = '';
-
- if (
- (
- is_array( $request )
- || is_object( $request )
- )
- && isset( $request['slug'] )
- ) {
- $module_slug = $request['slug'];
- } else {
- $module_slug = $request;
- }
-
- if ( ! Jetpack::is_module( $module_slug ) ) {
- return new WP_Error(
- 'not_found',
- esc_html__( 'The requested Jetpack module was not found.', 'jetpack' ),
- array( 'status' => 404 )
- );
- }
-
- if ( ! Jetpack::is_module_active( $module_slug ) ) {
- return new WP_Error(
- 'already_inactive',
- esc_html__( 'The requested Jetpack module was already inactive.', 'jetpack' ),
- array( 'status' => 409 )
- );
- }
-
- if ( Jetpack::deactivate_module( $module_slug ) ) {
- return rest_ensure_response( array(
- 'code' => 'success',
- 'message' => esc_html__( 'The requested Jetpack module was deactivated.', 'jetpack' ),
- ) );
- }
- return new WP_Error(
- 'deactivation_failed',
- esc_html__( 'The requested Jetpack module could not be deactivated.', 'jetpack' ),
- array( 'status' => 400 )
- );
- }
-
- /**
- * Check that the current user has permissions to manage Jetpack modules.
- *
- * @since 4.3.0
- *
- * @return bool
- */
- public function can_request() {
- return current_user_can( 'jetpack_manage_modules' );
- }
-}
-
-class Jetpack_Core_API_Module_List_Endpoint {
-
- /**
- * A WordPress REST API callback method that accepts a request object and decides what to do with it.
- *
- * @param WP_REST_Request $request The request sent to the WP REST API.
- *
- * @since 4.3.0
- *
- * @return bool|Array|WP_Error a resulting value or object, or an error.
- */
- public function process( $request ) {
- if ( 'GET' === $request->get_method() ) {
- return $this->get_modules( $request );
- } else {
- return $this->activate_modules( $request );
- }
- }
-
- /**
- * Get a list of all Jetpack modules and their information.
- *
- * @since 4.3.0
- *
- * @return array Array of Jetpack modules.
- */
- public function get_modules() {
- require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-admin.php' );
-
- $modules = Jetpack_Admin::init()->get_modules();
- foreach ( $modules as $slug => $properties ) {
- $modules[ $slug ]['options'] =
- Jetpack_Core_Json_Api_Endpoints::prepare_options_for_response( $slug );
- if (
- isset( $modules[ $slug ]['requires_connection'] )
- && $modules[ $slug ]['requires_connection']
- && Jetpack::is_development_mode()
- ) {
- $modules[ $slug ]['activated'] = false;
- }
- }
-
- $modules = Jetpack::get_translated_modules( $modules );
-
- return Jetpack_Core_Json_Api_Endpoints::prepare_modules_for_response( $modules );
- }
-
- /**
- * Activate a list of valid Jetpack modules.
- *
- * @since 4.3.0
- *
- * @param WP_REST_Request $request {
- * Array of parameters received by request.
- *
- * @type string $slug Module slug.
- * }
- *
- * @return bool|WP_Error True if modules were activated. Otherwise, a WP_Error instance with the corresponding error.
- */
- public static function activate_modules( $request ) {
-
- if (
- ! isset( $request['modules'] )
- || ! is_array( $request['modules'] )
- ) {
- return new WP_Error(
- 'not_found',
- esc_html__( 'The requested Jetpack module was not found.', 'jetpack' ),
- array( 'status' => 404 )
- );
- }
-
- $activated = array();
- $failed = array();
-
- foreach ( $request['modules'] as $module ) {
- if ( Jetpack::activate_module( $module, false, false ) ) {
- $activated[] = $module;
- } else {
- $failed[] = $module;
- }
- }
-
- if ( empty( $failed ) ) {
- return rest_ensure_response( array(
- 'code' => 'success',
- 'message' => esc_html__( 'All modules activated.', 'jetpack' ),
- ) );
- }
-
- $error = '';
-
- $activated_count = count( $activated );
- if ( $activated_count > 0 ) {
- $activated_last = array_pop( $activated );
- $activated_text = $activated_count > 1 ? sprintf(
- /* Translators: first variable is a list followed by the last item, which is the second variable. Example: dog, cat and bird. */
- __( '%1$s and %2$s', 'jetpack' ),
- join( ', ', $activated ), $activated_last ) : $activated_last;
-
- $error = sprintf(
- /* Translators: the variable is a module name. */
- _n( 'The module %s was activated.', 'The modules %s were activated.', $activated_count, 'jetpack' ),
- $activated_text ) . ' ';
- }
-
- $failed_count = count( $failed );
- if ( count( $failed ) > 0 ) {
- $failed_last = array_pop( $failed );
- $failed_text = $failed_count > 1 ? sprintf(
- /* Translators: first variable is a list followed by the last item, which is the second variable. Example: dog, cat and bird. */
- __( '%1$s and %2$s', 'jetpack' ),
- join( ', ', $failed ), $failed_last ) : $failed_last;
-
- $error = sprintf(
- /* Translators: the variable is a module name. */
- _n( 'The module %s failed to be activated.', 'The modules %s failed to be activated.', $failed_count, 'jetpack' ),
- $failed_text ) . ' ';
- }
-
- return new WP_Error(
- 'activation_failed',
- esc_html( $error ),
- array( 'status' => 424 )
- );
- }
-
- /**
- * A WordPress REST API permission callback method that accepts a request object and decides
- * if the current user has enough privileges to act.
- *
- * @since 4.3.0
- *
- * @param WP_REST_Request $request The request sent to the WP REST API.
- *
- * @return bool does the current user have enough privilege.
- */
- public function can_request( $request ) {
- if ( 'GET' === $request->get_method() ) {
- return current_user_can( 'jetpack_admin_page' );
- } else {
- return current_user_can( 'jetpack_manage_modules' );
- }
- }
-}
-
-/**
- * Class that manages updating of Jetpack module options and general Jetpack settings or retrieving module data.
- * If no module is specified, all module settings are retrieved/updated.
- *
- * @since 4.3.0
- * @since 4.4.0 Renamed Jetpack_Core_API_Module_Endpoint from to Jetpack_Core_API_Data.
- *
- * @author Automattic
- */
-class Jetpack_Core_API_Data extends Jetpack_Core_API_XMLRPC_Consumer_Endpoint {
-
- /**
- * Process request by returning the module or updating it.
- * If no module is specified, settings for all modules are assumed.
- *
- * @since 4.3.0
- *
- * @param WP_REST_Request $request
- *
- * @return bool|mixed|void|WP_Error
- */
- public function process( $request ) {
- if ( 'GET' === $request->get_method() ) {
- if ( isset( $request['slug'] ) ) {
- return $this->get_module( $request );
- }
-
- return $this->get_all_options();
- } else {
- return $this->update_data( $request );
- }
- }
-
- /**
- * Get information about a specific and valid Jetpack module.
- *
- * @since 4.3.0
- *
- * @param WP_REST_Request $request {
- * Array of parameters received by request.
- *
- * @type string $slug Module slug.
- * }
- *
- * @return mixed|void|WP_Error
- */
- public function get_module( $request ) {
- if ( Jetpack::is_module( $request['slug'] ) ) {
-
- $module = Jetpack::get_module( $request['slug'] );
-
- $module['options'] = Jetpack_Core_Json_Api_Endpoints::prepare_options_for_response( $request['slug'] );
-
- if (
- isset( $module['requires_connection'] )
- && $module['requires_connection']
- && Jetpack::is_development_mode()
- ) {
- $module['activated'] = false;
- }
-
- $i18n = jetpack_get_module_i18n( $request['slug'] );
- if ( isset( $module['name'] ) ) {
- $module['name'] = $i18n['name'];
- }
- if ( isset( $module['description'] ) ) {
- $module['description'] = $i18n['description'];
- $module['short_description'] = $i18n['description'];
- }
-
- return Jetpack_Core_Json_Api_Endpoints::prepare_modules_for_response( $module );
- }
-
- return new WP_Error(
- 'not_found',
- esc_html__( 'The requested Jetpack module was not found.', 'jetpack' ),
- array( 'status' => 404 )
- );
- }
-
- /**
- * Get information about all Jetpack module options and settings.
- *
- * @since 4.6.0
- *
- * @return WP_REST_Response $response
- */
- public function get_all_options() {
- $response = array();
-
- $modules = Jetpack::get_available_modules();
- if ( is_array( $modules ) && ! empty( $modules ) ) {
- foreach ( $modules as $module ) {
- // Add all module options
- $options = Jetpack_Core_Json_Api_Endpoints::prepare_options_for_response( $module );
- foreach ( $options as $option_name => $option ) {
- $response[ $option_name ] = $option['current_value'];
- }
-
- // Add the module activation state
- $response[ $module ] = Jetpack::is_module_active( $module );
- }
- }
-
- $settings = Jetpack_Core_Json_Api_Endpoints::get_updateable_data_list( 'settings' );
-
- if ( ! function_exists( 'is_plugin_active' ) ) {
- require_once ABSPATH . 'wp-admin/includes/plugin.php';
- }
-
- foreach ( $settings as $setting => $properties ) {
- switch ( $setting ) {
- case 'lang_id':
- if ( defined( 'WPLANG' ) ) {
- // We can't affect this setting, so warn the client
- $response[ $setting ] = 'error_const';
- break;
- }
-
- if ( ! current_user_can( 'install_languages' ) ) {
- // The user doesn't have caps to install language packs, so warn the client
- $response[ $setting ] = 'error_cap';
- break;
- }
-
- $value = get_option( 'WPLANG' );
- $response[ $setting ] = empty( $value ) ? 'en_US' : $value;
- break;
-
- case 'wordpress_api_key':
- // When field is clear, return empty. Otherwise it would return "false".
- if ( '' === get_option( 'wordpress_api_key', '' ) ) {
- $response[ $setting ] = '';
- } else {
- if ( ! class_exists( 'Akismet' ) ) {
- if ( is_readable( WP_PLUGIN_DIR . '/akismet/class.akismet.php' ) ) {
- require_once WP_PLUGIN_DIR . '/akismet/class.akismet.php';
- }
- }
- $response[ $setting ] = class_exists( 'Akismet' ) ? Akismet::get_api_key() : '';
- }
- break;
-
- case 'onboarding':
- $business_address = get_option( 'jpo_business_address' );
- $business_address = is_array( $business_address ) ? array_map( array( $this, 'decode_special_characters' ), $business_address ) : $business_address;
-
- $response[ $setting ] = array(
- 'siteTitle' => $this->decode_special_characters( get_option( 'blogname' ) ),
- 'siteDescription' => $this->decode_special_characters( get_option( 'blogdescription' ) ),
- 'siteType' => get_option( 'jpo_site_type' ),
- 'homepageFormat' => get_option( 'jpo_homepage_format' ),
- 'addContactForm' => intval( get_option( 'jpo_contact_page' ) ),
- 'businessAddress' => $business_address,
- 'installWooCommerce' => is_plugin_active( 'woocommerce/woocommerce.php' ),
- 'stats' => Jetpack::is_active() && Jetpack::is_module_active( 'stats' ),
- );
- break;
-
- default:
- $response[ $setting ] = Jetpack_Core_Json_Api_Endpoints::cast_value( get_option( $setting ), $settings[ $setting ] );
- break;
- }
- }
-
- $response['akismet'] = is_plugin_active( 'akismet/akismet.php' );
-
- return rest_ensure_response( $response );
- }
-
- /**
- * Decode the special HTML characters in a certain value.
- *
- * @since 5.8
- *
- * @param string $value Value to decode.
- *
- * @return string Value with decoded HTML characters.
- */
- private function decode_special_characters( $value ) {
- return (string) htmlspecialchars_decode( $value, ENT_QUOTES );
- }
-
- /**
- * If it's a valid Jetpack module and configuration parameters have been sent, update it.
- *
- * @since 4.3.0
- *
- * @param WP_REST_Request $request {
- * Array of parameters received by request.
- *
- * @type string $slug Module slug.
- * }
- *
- * @return bool|WP_Error True if module was updated. Otherwise, a WP_Error instance with the corresponding error.
- */
- public function update_data( $request ) {
-
- // If it's null, we're trying to update many module options from different modules.
- if ( is_null( $request['slug'] ) ) {
-
- // Value admitted by Jetpack_Core_Json_Api_Endpoints::get_updateable_data_list that will make it return all module options.
- // It will not be passed. It's just checked in this method to pass that method a string or array.
- $request['slug'] = 'any';
- } else {
- if ( ! Jetpack::is_module( $request['slug'] ) ) {
- return new WP_Error( 'not_found', esc_html__( 'The requested Jetpack module was not found.', 'jetpack' ), array( 'status' => 404 ) );
- }
-
- if ( ! Jetpack::is_module_active( $request['slug'] ) ) {
- return new WP_Error( 'inactive', esc_html__( 'The requested Jetpack module is inactive.', 'jetpack' ), array( 'status' => 409 ) );
- }
- }
-
- // Get parameters to update the module. We can not simply use $request->get_params() because when we registered
- // this route, we are adding the entire output of Jetpack_Core_Json_Api_Endpoints::get_updateable_data_list() to
- // the current request object's params. We are interested in body of the actual request.
- // This may be JSON:
- $params = $request->get_json_params();
- if ( ! is_array( $params ) ) {
- // Or it may be standard POST key-value pairs:
- $params = $request->get_body_params();
- }
-
- // Exit if no parameters were passed.
- if ( ! is_array( $params ) ) {
- return new WP_Error( 'missing_options', esc_html__( 'Missing options.', 'jetpack' ), array( 'status' => 404 ) );
- }
-
- // If $params was set via `get_body_params()` there may be some additional variables in the request that can
- // cause validation to fail. This method verifies that each param was in fact updated and will throw a `some_updated`
- // error if unused variables are included in the request.
- foreach ( array_keys( $params ) as $key ) {
- if ( is_int( $key ) || 'slug' === $key || 'context' === $key ) {
- unset( $params[ $key ] );
- }
- }
-
- // Get available module options.
- $options = Jetpack_Core_Json_Api_Endpoints::get_updateable_data_list( 'any' === $request['slug']
- ? $params
- : $request['slug']
- );
-
- // Prepare to toggle module if needed
- $toggle_module = new Jetpack_Core_API_Module_Toggle_Endpoint( new Jetpack_IXR_Client() );
-
- // Options that are invalid or failed to update.
- $invalid = array_keys( array_diff_key( $params, $options ) );
- $not_updated = array();
-
- // Remove invalid options
- $params = array_intersect_key( $params, $options );
-
- // Used if response is successful. The message can be overwritten and additional data can be added here.
- $response = array(
- 'code' => 'success',
- 'message' => esc_html__( 'The requested Jetpack data updates were successful.', 'jetpack' ),
- );
-
- // If there are modules to activate, activate them first so they're ready when their options are set.
- foreach ( $params as $option => $value ) {
- if ( 'modules' === $options[ $option ]['jp_group'] ) {
-
- // Used if there was an error. Can be overwritten with specific error messages.
- $error = '';
-
- // Set to true if the module toggling was successful.
- $updated = false;
-
- // Check if user can toggle the module.
- if ( $toggle_module->can_request() ) {
-
- // Activate or deactivate the module according to the value passed.
- $toggle_result = $value
- ? $toggle_module->activate_module( $option )
- : $toggle_module->deactivate_module( $option );
-
- if (
- is_wp_error( $toggle_result )
- && 'already_inactive' === $toggle_result->get_error_code()
- ) {
-
- // If the module is already inactive, we don't fail
- $updated = true;
- } elseif ( is_wp_error( $toggle_result ) ) {
- $error = $toggle_result->get_error_message();
- } else {
- $updated = true;
- }
- } else {
- $error = Jetpack_Core_Json_Api_Endpoints::$user_permissions_error_msg;
- }
-
- // The module was not toggled.
- if ( ! $updated ) {
- $not_updated[ $option ] = $error;
- }
-
- // Remove module from list so we don't go through it again.
- unset( $params[ $option ] );
- }
- }
-
- foreach ( $params as $option => $value ) {
-
- // Used if there was an error. Can be overwritten with specific error messages.
- $error = '';
-
- // Set to true if the option update was successful.
- $updated = false;
-
- // Get option attributes, including the group it belongs to.
- $option_attrs = $options[ $option ];
-
- // If this is a module option and the related module isn't active for any reason, continue with the next one.
- if ( 'settings' !== $option_attrs['jp_group'] ) {
- if ( ! Jetpack::is_module( $option_attrs['jp_group'] ) ) {
- $not_updated[ $option ] = esc_html__( 'The requested Jetpack module was not found.', 'jetpack' );
- continue;
- }
-
- if (
- 'any' !== $request['slug']
- && ! Jetpack::is_module_active( $option_attrs['jp_group'] )
- ) {
-
- // We only take note of skipped options when updating one module
- $not_updated[ $option ] = esc_html__( 'The requested Jetpack module is inactive.', 'jetpack' );
- continue;
- }
- }
-
- // Properly cast value based on its type defined in endpoint accepted args.
- $value = Jetpack_Core_Json_Api_Endpoints::cast_value( $value, $option_attrs );
-
- switch ( $option ) {
- case 'lang_id':
- if ( defined( 'WPLANG' ) || ! current_user_can( 'install_languages' ) ) {
- // We can't affect this setting
- $updated = false;
- break;
- }
-
- if ( $value === 'en_US' || empty( $value ) ) {
- return delete_option( 'WPLANG' );
- }
-
- if ( ! function_exists( 'request_filesystem_credentials' ) ) {
- require_once( ABSPATH . 'wp-admin/includes/file.php' );
- }
-
- if ( ! function_exists( 'wp_download_language_pack' ) ) {
- require_once ABSPATH . 'wp-admin/includes/translation-install.php';
- }
-
- // `wp_download_language_pack` only tries to download packs if they're not already available
- $language = wp_download_language_pack( $value );
- if ( $language === false ) {
- // The language pack download failed.
- $updated = false;
- break;
- }
- $updated = get_option( 'WPLANG' ) === $language ? true : update_option( 'WPLANG', $language );
- break;
-
- case 'monitor_receive_notifications':
- $monitor = new Jetpack_Monitor();
-
- // If we got true as response, consider it done.
- $updated = true === $monitor->update_option_receive_jetpack_monitor_notification( $value );
- break;
-
- case 'post_by_email_address':
- if ( 'create' == $value ) {
- $result = $this->_process_post_by_email(
- 'jetpack.createPostByEmailAddress',
- esc_html__( 'Unable to create the Post by Email address. Please try again later.', 'jetpack' )
- );
- } elseif ( 'regenerate' == $value ) {
- $result = $this->_process_post_by_email(
- 'jetpack.regeneratePostByEmailAddress',
- esc_html__( 'Unable to regenerate the Post by Email address. Please try again later.', 'jetpack' )
- );
- } elseif ( 'delete' == $value ) {
- $result = $this->_process_post_by_email(
- 'jetpack.deletePostByEmailAddress',
- esc_html__( 'Unable to delete the Post by Email address. Please try again later.', 'jetpack' )
- );
- } else {
- $result = false;
- }
-
- // If we got an email address (create or regenerate) or 1 (delete), consider it done.
- if ( is_string( $result ) && preg_match( '/[a-z0-9]+@post.wordpress.com/', $result ) ) {
- $response[$option] = $result;
- $updated = true;
- } elseif ( 1 == $result ) {
- $updated = true;
- } elseif ( is_array( $result ) && isset( $result['message'] ) ) {
- $error = $result['message'];
- }
- break;
-
- case 'jetpack_protect_key':
- $protect = Jetpack_Protect_Module::instance();
- if ( 'create' == $value ) {
- $result = $protect->get_protect_key();
- } else {
- $result = false;
- }
-
- // If we got one of Protect keys, consider it done.
- if ( preg_match( '/[a-z0-9]{40,}/i', $result ) ) {
- $response[$option] = $result;
- $updated = true;
- }
- break;
-
- case 'jetpack_protect_global_whitelist':
- $updated = jetpack_protect_save_whitelist( explode( PHP_EOL, str_replace( array( ' ', ',' ), array( '', "\n" ), $value ) ) );
- if ( is_wp_error( $updated ) ) {
- $error = $updated->get_error_message();
- }
- break;
-
- case 'show_headline':
- case 'show_thumbnails':
- $grouped_options = $grouped_options_current = (array) Jetpack_Options::get_option( 'relatedposts' );
- $grouped_options[$option] = $value;
-
- // If option value was the same, consider it done.
- $updated = $grouped_options_current != $grouped_options ? Jetpack_Options::update_option( 'relatedposts', $grouped_options ) : true;
- break;
-
- case 'google':
- case 'bing':
- case 'pinterest':
- case 'yandex':
- $grouped_options = $grouped_options_current = (array) get_option( 'verification_services_codes' );
-
- // Extracts the content attribute from the HTML meta tag if needed
- if ( preg_match( '#.*<meta name="(?:[^"]+)" content="([^"]+)" />.*#i', $value, $matches ) ) {
- $grouped_options[ $option ] = $matches[1];
- } else {
- $grouped_options[ $option ] = $value;
- }
-
- // If option value was the same, consider it done.
- $updated = $grouped_options_current != $grouped_options ? update_option( 'verification_services_codes', $grouped_options ) : true;
- break;
-
- case 'sharing_services':
- if ( ! class_exists( 'Sharing_Service' ) && ! include_once( JETPACK__PLUGIN_DIR . 'modules/sharedaddy/sharing-service.php' ) ) {
- break;
- }
-
- $sharer = new Sharing_Service();
-
- // If option value was the same, consider it done.
- $updated = $value != $sharer->get_blog_services() ? $sharer->set_blog_services( $value['visible'], $value['hidden'] ) : true;
- break;
-
- case 'button_style':
- case 'sharing_label':
- case 'show':
- if ( ! class_exists( 'Sharing_Service' ) && ! include_once( JETPACK__PLUGIN_DIR . 'modules/sharedaddy/sharing-service.php' ) ) {
- break;
- }
-
- $sharer = new Sharing_Service();
- $grouped_options = $sharer->get_global_options();
- $grouped_options[ $option ] = $value;
- $updated = $sharer->set_global_options( $grouped_options );
- break;
-
- case 'custom':
- if ( ! class_exists( 'Sharing_Service' ) && ! include_once( JETPACK__PLUGIN_DIR . 'modules/sharedaddy/sharing-service.php' ) ) {
- break;
- }
-
- $sharer = new Sharing_Service();
- $updated = $sharer->new_service( stripslashes( $value['sharing_name'] ), stripslashes( $value['sharing_url'] ), stripslashes( $value['sharing_icon'] ) );
-
- // Return new custom service
- $response[$option] = $updated;
- break;
-
- case 'sharing_delete_service':
- if ( ! class_exists( 'Sharing_Service' ) && ! include_once( JETPACK__PLUGIN_DIR . 'modules/sharedaddy/sharing-service.php' ) ) {
- break;
- }
-
- $sharer = new Sharing_Service();
- $updated = $sharer->delete_service( $value );
- break;
-
- case 'jetpack-twitter-cards-site-tag':
- $value = trim( ltrim( strip_tags( $value ), '@' ) );
- $updated = get_option( $option ) !== $value ? update_option( $option, $value ) : true;
- break;
-
- case 'onpublish':
- case 'onupdate':
- case 'Bias Language':
- case 'Cliches':
- case 'Complex Expression':
- case 'Diacritical Marks':
- case 'Double Negative':
- case 'Hidden Verbs':
- case 'Jargon Language':
- case 'Passive voice':
- case 'Phrases to Avoid':
- case 'Redundant Expression':
- case 'guess_lang':
- if ( in_array( $option, array( 'onpublish', 'onupdate' ) ) ) {
- $atd_option = 'AtD_check_when';
- } elseif ( 'guess_lang' == $option ) {
- $atd_option = 'AtD_guess_lang';
- $option = 'true';
- } else {
- $atd_option = 'AtD_options';
- }
- $user_id = get_current_user_id();
- if ( ! function_exists( 'AtD_get_options' ) ) {
- include_once( JETPACK__PLUGIN_DIR . 'modules/after-the-deadline.php' );
- }
- $grouped_options_current = AtD_get_options( $user_id, $atd_option );
- unset( $grouped_options_current['name'] );
- $grouped_options = $grouped_options_current;
- if ( $value && ! isset( $grouped_options [$option] ) ) {
- $grouped_options [$option] = $value;
- } elseif ( ! $value && isset( $grouped_options [$option] ) ) {
- unset( $grouped_options [$option] );
- }
- // If option value was the same, consider it done, otherwise try to update it.
- $options_to_save = implode( ',', array_keys( $grouped_options ) );
- $updated = $grouped_options != $grouped_options_current ? AtD_update_setting( $user_id, $atd_option, $options_to_save ) : true;
- break;
-
- case 'ignored_phrases':
- case 'unignore_phrase':
- $user_id = get_current_user_id();
- $atd_option = 'AtD_ignored_phrases';
- $grouped_options = $grouped_options_current = explode( ',', AtD_get_setting( $user_id, $atd_option ) );
- if ( 'ignored_phrases' == $option ) {
- $grouped_options = explode( ',', $value );
- } else {
- $index = array_search( $value, $grouped_options );
- if ( false !== $index ) {
- unset( $grouped_options[$index] );
- $grouped_options = array_values( $grouped_options );
- }
- }
- $ignored_phrases = implode( ',', array_filter( array_map( 'strip_tags', $grouped_options ) ) );
- $updated = $grouped_options != $grouped_options_current ? AtD_update_setting( $user_id, $atd_option, $ignored_phrases ) : true;
- break;
-
- case 'admin_bar':
- case 'roles':
- case 'count_roles':
- case 'blog_id':
- case 'do_not_track':
- case 'hide_smile':
- case 'version':
- $grouped_options = $grouped_options_current = (array) get_option( 'stats_options' );
- $grouped_options[$option] = $value;
-
- // If option value was the same, consider it done.
- $updated = $grouped_options_current != $grouped_options ? update_option( 'stats_options', $grouped_options ) : true;
- break;
-
- case 'akismet_show_user_comments_approved':
-
- // Save Akismet option '1' or '0' like it's done in akismet/class.akismet-admin.php
- $updated = get_option( $option ) != $value ? update_option( $option, (bool) $value ? '1' : '0' ) : true;
- break;
-
- case 'wordpress_api_key':
-
- if ( ! file_exists( WP_PLUGIN_DIR . '/akismet/class.akismet.php' ) ) {
- $error = esc_html__( 'Please install Akismet.', 'jetpack' );
- $updated = false;
- break;
- }
-
- if ( ! defined( 'AKISMET_VERSION' ) ) {
- $error = esc_html__( 'Please activate Akismet.', 'jetpack' );
- $updated = false;
- break;
- }
-
- // Allow to clear the API key field
- if ( '' === $value ) {
- $updated = get_option( $option ) != $value ? update_option( $option, $value ) : true;
- break;
- }
-
- require_once WP_PLUGIN_DIR . '/akismet/class.akismet.php';
- require_once WP_PLUGIN_DIR . '/akismet/class.akismet-admin.php';
-
- if ( class_exists( 'Akismet_Admin' ) && method_exists( 'Akismet_Admin', 'save_key' ) ) {
- if ( Akismet::verify_key( $value ) === 'valid' ) {
- $akismet_user = Akismet_Admin::get_akismet_user( $value );
- if ( $akismet_user ) {
- if ( in_array( $akismet_user->status, array( 'active', 'active-dunning', 'no-sub' ) ) ) {
- $updated = get_option( $option ) != $value ? update_option( $option, $value ) : true;
- break;
- } else {
- $error = esc_html__( "Akismet user status doesn't allow to update the key", 'jetpack' );
- }
- } else {
- $error = esc_html__( 'Invalid Akismet user', 'jetpack' );
- }
- } else {
- $error = esc_html__( 'Invalid Akismet key', 'jetpack' );
- }
- } else {
- $error = esc_html__( 'Akismet is not installed or active', 'jetpack' );
- }
- $updated = false;
- break;
-
- case 'google_analytics_tracking_id':
- $grouped_options = $grouped_options_current = (array) get_option( 'jetpack_wga' );
- $grouped_options[ 'code' ] = $value;
-
- // If option value was the same, consider it done.
- $updated = $grouped_options_current != $grouped_options ? update_option( 'jetpack_wga', $grouped_options ) : true;
- break;
-
- case 'dismiss_dash_app_card':
- case 'dismiss_empty_stats_card':
- // If option value was the same, consider it done.
- $updated = get_option( $option ) != $value ? update_option( $option, (bool) $value ) : true;
- break;
-
- case 'onboarding':
- jetpack_require_lib( 'widgets' );
- // Break apart and set Jetpack onboarding options.
- $result = $this->_process_onboarding( (array) $value );
- if ( empty( $result ) ) {
- $updated = true;
- } else {
- $error = sprintf( esc_html__( 'Onboarding failed to process: %s', 'jetpack' ), $result );
- $updated = false;
- }
- break;
-
- case 'show_welcome_for_new_plan':
- // If option value was the same, consider it done.
- $updated = get_option( $option ) !== $value ? update_option( $option, (bool) $value ) : true;
- break;
-
- default:
- // If option value was the same, consider it done.
- $updated = get_option( $option ) != $value ? update_option( $option, $value ) : true;
- break;
- }
-
- // The option was not updated.
- if ( ! $updated ) {
- $not_updated[ $option ] = $error;
- }
- }
-
- if ( empty( $invalid ) && empty( $not_updated ) ) {
- // The option was updated.
- return rest_ensure_response( $response );
- } else {
- $invalid_count = count( $invalid );
- $not_updated_count = count( $not_updated );
- $error = '';
- if ( $invalid_count > 0 ) {
- $error = sprintf(
- /* Translators: the plural variable is a comma-separated list. Example: dog, cat, bird. */
- _n( 'Invalid option: %s.', 'Invalid options: %s.', $invalid_count, 'jetpack' ),
- join( ', ', $invalid )
- );
- }
- if ( $not_updated_count > 0 ) {
- $not_updated_messages = array();
- foreach ( $not_updated as $not_updated_option => $not_updated_message ) {
- if ( ! empty( $not_updated_message ) ) {
- $not_updated_messages[] = sprintf(
- /* Translators: the first variable is a module option or slug, or setting. The second is the error message . */
- __( '%1$s: %2$s', 'jetpack' ),
- $not_updated_option, $not_updated_message );
- }
- }
- if ( ! empty( $error ) ) {
- $error .= ' ';
- }
- if ( ! empty( $not_updated_messages ) ) {
- $error .= ' ' . join( '. ', $not_updated_messages );
- }
-
- }
- // There was an error because some options were updated but others were invalid or failed to update.
- return new WP_Error( 'some_updated', esc_html( $error ), array( 'status' => 400 ) );
- }
-
- }
-
- /**
- * Perform tasks in the site based on onboarding choices.
- *
- * @since 5.4.0
- *
- * @param array $data Onboarding choices made by user.
- *
- * @return string Result of onboarding processing and, if there is one, an error message.
- */
- private function _process_onboarding( $data ) {
- if ( isset( $data['end'] ) && $data['end'] ) {
- return Jetpack::invalidate_onboarding_token()
- ? ''
- : esc_html__( "The onboarding token couldn't be deleted.", 'jetpack' );
- }
-
- $error = array();
-
- if ( ! empty( $data['siteTitle'] ) ) {
- // If option value was the same, consider it done.
- if ( ! ( update_option( 'blogname', $data['siteTitle'] ) || get_option( 'blogname' ) == $data['siteTitle'] ) ) {
- $error[] = 'siteTitle';
- }
- }
-
- if ( isset( $data['siteDescription'] ) ) {
- // If option value was the same, consider it done.
- if ( ! ( update_option( 'blogdescription', $data['siteDescription'] ) || get_option( 'blogdescription' ) == $data['siteDescription'] ) ) {
- $error[] = 'siteDescription';
- }
- }
-
- $site_title = get_option( 'blogname' );
- $author = get_current_user_id() || 1;
-
- if ( ! empty( $data['siteType'] ) ) {
- if ( ! ( update_option( 'jpo_site_type', $data['siteType'] ) || get_option( 'jpo_site_type' ) == $data['siteType'] ) ) {
- $error[] = 'siteType';
- }
- }
-
- if ( isset( $data['homepageFormat'] ) ) {
- // If $data['homepageFormat'] is 'posts', we have nothing to do since it's WordPress' default
- // if it exists, just update
- $homepage_format = get_option( 'jpo_homepage_format' );
- if ( ! $homepage_format || $homepage_format !== $data['homepageFormat'] ) {
- if ( 'page' === $data['homepageFormat'] ) {
- if ( ! ( update_option( 'show_on_front', 'page' ) || get_option( 'show_on_front' ) == 'page' ) ) {
- $error[] = 'homepageFormat';
- }
-
- $home = wp_insert_post( array(
- 'post_type' => 'page',
- /* translators: this references the home page of a site, also called front page. */
- 'post_title' => esc_html_x( 'Home Page', 'The home page of a website.', 'jetpack' ),
- 'post_content' => sprintf( esc_html__( 'Welcome to %s.', 'jetpack' ), $site_title ),
- 'post_status' => 'publish',
- 'post_author' => $author,
- ) );
- if ( 0 == $home ) {
- $error[] = 'home insert: 0';
- } elseif ( is_wp_error( $home ) ) {
- $error[] = 'home creation: '. $home->get_error_message();
- }
- if ( ! ( update_option( 'page_on_front', $home ) || get_option( 'page_on_front' ) == $home ) ) {
-
- $error[] = 'home set';
- }
-
- $blog = wp_insert_post( array(
- 'post_type' => 'page',
- /* translators: this references the page where blog posts are listed. */
- 'post_title' => esc_html_x( 'Blog', 'The blog of a website.', 'jetpack' ),
- 'post_content' => sprintf( esc_html__( 'These are the latest posts in %s.', 'jetpack' ), $site_title ),
- 'post_status' => 'publish',
- 'post_author' => $author,
- ) );
- if ( 0 == $blog ) {
- $error[] = 'blog insert: 0';
- } elseif ( is_wp_error( $blog ) ) {
- $error[] = 'blog creation: '. $blog->get_error_message();
- }
- if ( ! ( update_option( 'page_for_posts', $blog ) || get_option( 'page_for_posts' ) == $blog ) ) {
- $error[] = 'blog set';
- }
- } else {
- $front_page = get_option( 'page_on_front' );
- $posts_page = get_option( 'page_for_posts' );
- if ( $posts_page && get_post( $posts_page ) ) {
- wp_delete_post( $posts_page );
- }
- if ( $front_page && get_post( $front_page ) ) {
- wp_delete_post( $front_page );
- }
- update_option( 'show_on_front', 'posts' );
- }
- }
- update_option( 'jpo_homepage_format', $data['homepageFormat'] );
- }
-
- // Setup contact page and add a form and/or business info
- $contact_page = '';
- if ( ! empty( $data['addContactForm'] ) && ! get_option( 'jpo_contact_page' ) ) {
- $contact_form_module_active = Jetpack::is_module_active( 'contact-form' );
- if ( ! $contact_form_module_active ) {
- $contact_form_module_active = Jetpack::activate_module( 'contact-form', false, false );
- }
-
- if ( $contact_form_module_active ) {
- $contact_page = '[contact-form][contact-field label="' . esc_html__( 'Name', 'jetpack' ) . '" type="name" required="true" /][contact-field label="' . esc_html__( 'Email', 'jetpack' ) . '" type="email" required="true" /][contact-field label="' . esc_html__( 'Website', 'jetpack' ) . '" type="url" /][contact-field label="' . esc_html__( 'Message', 'jetpack' ) . '" type="textarea" /][/contact-form]';
- } else {
- $error[] = 'contact-form activate';
- }
- }
-
- if ( isset( $data['businessPersonal'] ) && 'business' === $data['businessPersonal'] ) {
- $contact_page .= "\n" . join( "\n", $data['businessInfo'] );
- }
-
- if ( ! empty( $contact_page ) ) {
- $form = wp_insert_post( array(
- 'post_type' => 'page',
- /* translators: this references a page with contact details and possibly a form. */
- 'post_title' => esc_html_x( 'Contact us', 'Contact page for your website.', 'jetpack' ),
- 'post_content' => esc_html__( 'Send us a message!', 'jetpack' ) . "\n" . $contact_page,
- 'post_status' => 'publish',
- 'post_author' => $author,
- ) );
- if ( 0 == $form ) {
- $error[] = 'form insert: 0';
- } elseif ( is_wp_error( $form ) ) {
- $error[] = 'form creation: '. $form->get_error_message();
- } else {
- update_option( 'jpo_contact_page', $form );
- }
- }
-
- if ( isset( $data['businessAddress'] ) ) {
- $handled_business_address = self::handle_business_address( $data['businessAddress'] );
- if ( is_wp_error( $handled_business_address ) ) {
- $error[] = 'BusinessAddress';
- }
- }
-
- if ( ! empty( $data['installWooCommerce'] ) ) {
- jetpack_require_lib( 'plugins' );
- $wc_install_result = Jetpack_Plugins::install_and_activate_plugin( 'woocommerce' );
- delete_transient( '_wc_activation_redirect' ); // Redirecting to WC setup would kill our users' flow
- if ( is_wp_error( $wc_install_result ) ) {
- $error[] = 'woocommerce installation';
- }
- }
-
- if ( ! empty( $data['stats'] ) ) {
- if ( Jetpack::is_active() ) {
- $stats_module_active = Jetpack::is_module_active( 'stats' );
- if ( ! $stats_module_active ) {
- $stats_module_active = Jetpack::activate_module( 'stats', false, false );
- }
-
- if ( ! $stats_module_active ) {
- $error[] = 'stats activate';
- }
- } else {
- $error[] = 'stats not connected';
- }
- }
-
- return empty( $error )
- ? ''
- : join( ', ', $error );
- }
-
- /**
- * Add or update Business Address widget.
- *
- * @param array $address Array of business address fields.
- *
- * @return WP_Error|true True if the data was saved correctly.
- */
- static function handle_business_address( $address ) {
- $first_sidebar = Jetpack_Widgets::get_first_sidebar();
-
- $widgets_module_active = Jetpack::is_module_active( 'widgets' );
- if ( ! $widgets_module_active ) {
- $widgets_module_active = Jetpack::activate_module( 'widgets', false, false );
- }
- if ( ! $widgets_module_active ) {
- return new WP_Error( 'module_activation_failed', 'Failed to activate the widgets module.', 400 );
- }
-
- if ( $first_sidebar ) {
- $title = isset( $address['name'] ) ? sanitize_text_field( $address['name'] ) : '';
- $street = isset( $address['street'] ) ? sanitize_text_field( $address['street'] ) : '';
- $city = isset( $address['city'] ) ? sanitize_text_field( $address['city'] ) : '';
- $state = isset( $address['state'] ) ? sanitize_text_field( $address['state'] ) : '';
- $zip = isset( $address['zip'] ) ? sanitize_text_field( $address['zip'] ) : '';
- $country = isset( $address['country'] ) ? sanitize_text_field( $address['country'] ) : '';
-
- $full_address = implode( ' ', array_filter( array( $street, $city, $state, $zip, $country ) ) );
-
- $widget_options = array(
- 'title' => $title,
- 'address' => $full_address,
- 'phone' => '',
- 'hours' => '',
- 'showmap' => false,
- 'email' => ''
- );
-
- $widget_updated = '';
- if ( ! self::has_business_address_widget( $first_sidebar ) ) {
- $widget_updated = Jetpack_Widgets::insert_widget_in_sidebar( 'widget_contact_info', $widget_options, $first_sidebar );
- } else {
- $widget_updated = Jetpack_Widgets::update_widget_in_sidebar( 'widget_contact_info', $widget_options, $first_sidebar );
- }
- if ( is_wp_error( $widget_updated ) ) {
- return new WP_Error( 'widget_update_failed', 'Widget could not be updated.', 400 );
- }
-
- $address_save = array(
- 'name' => $title,
- 'street' => $street,
- 'city' => $city,
- 'state' => $state,
- 'zip' => $zip,
- 'country' => $country
- );
- update_option( 'jpo_business_address', $address_save );
- return true;
- }
-
- // No sidebar to place the widget
- return new WP_Error( 'sidebar_not_found', 'No sidebar.', 400 );
- }
-
- /**
- * Check whether "Contact Info & Map" widget is present in a given sidebar.
- *
- * @param string $sidebar ID of the sidebar to which the widget will be added.
- *
- * @return bool Whether the widget is present in a given sidebar.
- */
- static function has_business_address_widget( $sidebar ) {
- $sidebars_widgets = get_option( 'sidebars_widgets', array() );
- if ( ! isset( $sidebars_widgets[ $sidebar ] ) ) {
- return false;
- }
- foreach ( $sidebars_widgets[ $sidebar ] as $widget ) {
- if ( strpos( $widget, 'widget_contact_info' ) !== false ) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Calls WPCOM through authenticated request to create, regenerate or delete the Post by Email address.
- * @todo: When all settings are updated to use endpoints, move this to the Post by Email module and replace __process_ajax_proxy_request.
- *
- * @since 4.3.0
- *
- * @param string $endpoint Process to call on WPCOM to create, regenerate or delete the Post by Email address.
- * @param string $error Error message to return.
- *
- * @return array
- */
- private function _process_post_by_email( $endpoint, $error ) {
- if ( ! current_user_can( 'edit_posts' ) ) {
- return array( 'message' => $error );
- }
-
- $this->xmlrpc->query( $endpoint );
-
- if ( $this->xmlrpc->isError() ) {
- return array( 'message' => $error );
- }
-
- $response = $this->xmlrpc->getResponse();
- if ( empty( $response ) ) {
- return array( 'message' => $error );
- }
-
- // Used only in Jetpack_Core_Json_Api_Endpoints::get_remote_value.
- update_option( 'post_by_email_address' . get_current_user_id(), $response );
-
- return $response;
- }
-
- /**
- * Check if user is allowed to perform the update.
- *
- * @since 4.3.0
- *
- * @param WP_REST_Request $request The request sent to the WP REST API.
- *
- * @return bool
- */
- public function can_request( $request ) {
- $req_params = $request->get_params();
- if ( ! empty( $req_params['onboarding']['token'] ) && isset( $req_params['rest_route'] ) ) {
- return Jetpack::validate_onboarding_token_action( $req_params['onboarding']['token'], $req_params['rest_route'] );
- }
-
- if ( 'GET' === $request->get_method() ) {
- return current_user_can( 'jetpack_admin_page' );
- } else {
- $module = Jetpack_Core_Json_Api_Endpoints::get_module_requested();
- if ( empty( $module ) ) {
- $params = $request->get_json_params();
- if ( ! is_array( $params ) ) {
- $params = $request->get_body_params();
- }
- $options = Jetpack_Core_Json_Api_Endpoints::get_updateable_data_list( $params );
- foreach ( $options as $option => $definition ) {
- if ( in_array( $options[ $option ]['jp_group'], array( 'after-the-deadline', 'post-by-email' ) ) ) {
- $module = $options[ $option ]['jp_group'];
- break;
- }
- }
- }
- // User is trying to create, regenerate or delete its PbE || ATD settings.
- if ( 'post-by-email' === $module || 'after-the-deadline' === $module ) {
- return current_user_can( 'edit_posts' ) && current_user_can( 'jetpack_admin_page' );
- }
- return current_user_can( 'jetpack_configure_modules' );
- }
- }
-}
-
-class Jetpack_Core_API_Module_Data_Endpoint {
-
- public function process( $request ) {
- switch( $request['slug'] ) {
- case 'protect':
- return $this->get_protect_data();
- case 'stats':
- return $this->get_stats_data( $request );
- case 'akismet':
- return $this->get_akismet_data();
- case 'monitor':
- return $this->get_monitor_data();
- case 'verification-tools':
- return $this->get_verification_tools_data();
- case 'vaultpress':
- return $this->get_vaultpress_data();
- }
- }
-
- /**
- * Decide against which service to check the key.
- *
- * @since 4.8.0
- *
- * @param WP_REST_Request $request
- *
- * @return bool
- */
- public function key_check( $request ) {
- switch( $request['service'] ) {
- case 'akismet':
- $params = $request->get_json_params();
- if ( isset( $params['api_key'] ) && ! empty( $params['api_key'] ) ) {
- return $this->check_akismet_key( $params['api_key'] );
- }
- return $this->check_akismet_key();
- }
- return false;
- }
-
- /**
- * Get number of blocked intrusion attempts.
- *
- * @since 4.3.0
- *
- * @return mixed|WP_Error Number of blocked attempts if protection is enabled. Otherwise, a WP_Error instance with the corresponding error.
- */
- public function get_protect_data() {
- if ( Jetpack::is_module_active( 'protect' ) ) {
- return get_site_option( 'jetpack_protect_blocked_attempts' );
- }
-
- return new WP_Error(
- 'not_active',
- esc_html__( 'The requested Jetpack module is not active.', 'jetpack' ),
- array( 'status' => 404 )
- );
- }
-
- /**
- * Get number of spam messages blocked by Akismet.
- *
- * @since 4.3.0
- *
- * @return int|string Number of spam blocked by Akismet. Otherwise, an error message.
- */
- public function get_akismet_data() {
- if ( ! is_wp_error( $status = $this->akismet_is_active_and_registered() ) ) {
- return rest_ensure_response( Akismet_Admin::get_stats( Akismet::get_api_key() ) );
- } else {
- return $status->get_error_code();
- }
- }
-
- /**
- * Verify the Akismet API key.
- *
- * @since 4.8.0
- *
- * @param string $api_key Optional API key to check.
- *
- * @return array Information about the key. 'validKey' is true if key is valid, false otherwise.
- */
- public function check_akismet_key( $api_key = '' ) {
- $akismet_status = $this->akismet_class_exists();
- if ( is_wp_error( $akismet_status ) ) {
- return rest_ensure_response( array(
- 'validKey' => false,
- 'invalidKeyCode' => $akismet_status->get_error_code(),
- 'invalidKeyMessage' => $akismet_status->get_error_message(),
- ) );
- }
-
- $key_status = Akismet::check_key_status( empty( $api_key ) ? Akismet::get_api_key() : $api_key );
-
- if ( ! $key_status || 'invalid' === $key_status || 'failed' === $key_status ) {
- return rest_ensure_response( array(
- 'validKey' => false,
- 'invalidKeyCode' => 'invalid_key',
- 'invalidKeyMessage' => esc_html__( 'Invalid Akismet key. Please contact support.', 'jetpack' ),
- ) );
- }
-
- return rest_ensure_response( array(
- 'validKey' => isset( $key_status[1] ) && 'valid' === $key_status[1]
- ) );
- }
-
- /**
- * Check if Akismet class file exists and if class is loaded.
- *
- * @since 4.8.0
- *
- * @return bool|WP_Error Returns true if class file exists and class is loaded, WP_Error otherwise.
- */
- private function akismet_class_exists() {
- if ( ! file_exists( WP_PLUGIN_DIR . '/akismet/class.akismet.php' ) ) {
- return new WP_Error( 'not_installed', esc_html__( 'Please install Akismet.', 'jetpack' ), array( 'status' => 400 ) );
- }
-
- if ( ! class_exists( 'Akismet' ) ) {
- return new WP_Error( 'not_active', esc_html__( 'Please activate Akismet.', 'jetpack' ), array( 'status' => 400 ) );
- }
-
- return true;
- }
-
- /**
- * Is Akismet registered and active?
- *
- * @since 4.3.0
- *
- * @return bool|WP_Error True if Akismet is active and registered. Otherwise, a WP_Error instance with the corresponding error.
- */
- private function akismet_is_active_and_registered() {
- if ( is_wp_error( $akismet_exists = $this->akismet_class_exists() ) ) {
- return $akismet_exists;
- }
-
- // What about if Akismet is put in a sub-directory or maybe in mu-plugins?
- require_once WP_PLUGIN_DIR . '/akismet/class.akismet.php';
- require_once WP_PLUGIN_DIR . '/akismet/class.akismet-admin.php';
- $akismet_key = Akismet::verify_key( Akismet::get_api_key() );
-
- if ( ! $akismet_key || 'invalid' === $akismet_key || 'failed' === $akismet_key ) {
- return new WP_Error( 'invalid_key', esc_html__( 'Invalid Akismet key. Please contact support.', 'jetpack' ), array( 'status' => 400 ) );
- }
-
- return true;
- }
-
- /**
- * Get stats data for this site
- *
- * @since 4.1.0
- *
- * @param WP_REST_Request $request {
- * Array of parameters received by request.
- *
- * @type string $date Date range to restrict results to.
- * }
- *
- * @return WP_Error|WP_HTTP_Response|WP_REST_Response Stats information relayed from WordPress.com.
- */
- public function get_stats_data( WP_REST_Request $request ) {
- // Get parameters to fetch Stats data.
- $range = $request->get_param( 'range' );
-
- // If no parameters were passed.
- if (
- empty ( $range )
- || ! in_array( $range, array( 'day', 'week', 'month' ), true )
- ) {
- $range = 'day';
- }
-
- if ( ! function_exists( 'stats_get_from_restapi' ) ) {
- require_once( JETPACK__PLUGIN_DIR . 'modules/stats.php' );
- }
-
- switch ( $range ) {
-
- // This is always called first on page load
- case 'day':
- $initial_stats = stats_get_from_restapi();
- return rest_ensure_response( array(
- 'general' => $initial_stats,
-
- // Build data for 'day' as if it was stats_get_from_restapi( array(), 'visits?unit=day&quantity=30' );
- 'day' => isset( $initial_stats->visits )
- ? $initial_stats->visits
- : array(),
- ) );
- case 'week':
- return rest_ensure_response( array(
- 'week' => stats_get_from_restapi( array(), 'visits?unit=week&quantity=14' ),
- ) );
- case 'month':
- return rest_ensure_response( array(
- 'month' => stats_get_from_restapi( array(), 'visits?unit=month&quantity=12&' ),
- ) );
- }
- }
-
- /**
- * Get date of last downtime.
- *
- * @since 4.3.0
- *
- * @return mixed|WP_Error Number of days since last downtime. Otherwise, a WP_Error instance with the corresponding error.
- */
- public function get_monitor_data() {
- if ( ! Jetpack::is_module_active( 'monitor' ) ) {
- return new WP_Error(
- 'not_active',
- esc_html__( 'The requested Jetpack module is not active.', 'jetpack' ),
- array( 'status' => 404 )
- );
- }
-
- $monitor = new Jetpack_Monitor();
- $last_downtime = $monitor->monitor_get_last_downtime();
- if ( is_wp_error( $last_downtime ) ) {
- return $last_downtime;
- } else if ( false === strtotime( $last_downtime ) ) {
- return rest_ensure_response( array(
- 'code' => 'success',
- 'date' => null,
- ) );
- } else {
- return rest_ensure_response( array(
- 'code' => 'success',
- 'date' => human_time_diff( strtotime( $last_downtime ), strtotime( 'now' ) ),
- ) );
- }
- }
-
- /**
- * Get services that this site is verified with.
- *
- * @since 4.3.0
- *
- * @return mixed|WP_Error List of services that verified this site. Otherwise, a WP_Error instance with the corresponding error.
- */
- public function get_verification_tools_data() {
- if ( ! Jetpack::is_module_active( 'verification-tools' ) ) {
- return new WP_Error(
- 'not_active',
- esc_html__( 'The requested Jetpack module is not active.', 'jetpack' ),
- array( 'status' => 404 )
- );
- }
-
- $verification_services_codes = get_option( 'verification_services_codes' );
- if (
- ! is_array( $verification_services_codes )
- || empty( $verification_services_codes )
- ) {
- return new WP_Error(
- 'empty',
- esc_html__( 'Site not verified with any service.', 'jetpack' ),
- array( 'status' => 404 )
- );
- }
-
- $services = array();
- foreach ( jetpack_verification_services() as $name => $service ) {
- if ( is_array( $service ) && ! empty( $verification_services_codes[ $name ] ) ) {
- switch ( $name ) {
- case 'google':
- $services[] = 'Google';
- break;
- case 'bing':
- $services[] = 'Bing';
- break;
- case 'pinterest':
- $services[] = 'Pinterest';
- break;
- case 'yandex':
- $services[] = 'Yandex';
- break;
- }
- }
- }
-
- if ( empty( $services ) ) {
- return new WP_Error(
- 'empty',
- esc_html__( 'Site not verified with any service.', 'jetpack' ),
- array( 'status' => 404 )
- );
- }
-
- if ( 2 > count( $services ) ) {
- $message = esc_html(
- sprintf(
- /* translators: %s is a service name like Google, Bing, Pinterest, etc. */
- __( 'Your site is verified with %s.', 'jetpack' ),
- $services[0]
- )
- );
- } else {
- $copy_services = $services;
- $last = count( $copy_services ) - 1;
- $last_service = $copy_services[ $last ];
- unset( $copy_services[ $last ] );
- $message = esc_html(
- sprintf(
- /* translators: %1$s is a comma separated list of services, and %2$s is a single service name like Google, Bing, Pinterest, etc. */
- __( 'Your site is verified with %1$s and %2$s.', 'jetpack' ),
- join( ', ', $copy_services ),
- $last_service
- )
- );
- }
-
- return rest_ensure_response( array(
- 'code' => 'success',
- 'message' => $message,
- 'services' => $services,
- ) );
- }
-
- /**
- * Get VaultPress site data including, among other things, the date of the last backup if it was completed.
- *
- * @since 4.3.0
- *
- * @return mixed|WP_Error VaultPress site data. Otherwise, a WP_Error instance with the corresponding error.
- */
- public function get_vaultpress_data() {
- if ( ! class_exists( 'VaultPress' ) ) {
- return new WP_Error(
- 'not_active',
- esc_html__( 'The requested Jetpack module is not active.', 'jetpack' ),
- array( 'status' => 404 )
- );
- }
-
- $vaultpress = new VaultPress();
- if ( ! $vaultpress->is_registered() ) {
- return rest_ensure_response( array(
- 'code' => 'not_registered',
- 'message' => esc_html__( 'You need to register for VaultPress.', 'jetpack' )
- ) );
- }
-
- $data = json_decode( base64_decode( $vaultpress->contact_service( 'plugin_data' ) ) );
- if ( false == $data ) {
- return rest_ensure_response( array(
- 'code' => 'not_registered',
- 'message' => esc_html__( 'Could not connect to VaultPress.', 'jetpack' )
- ) );
- } else if ( is_wp_error( $data ) || ! isset( $data->backups->last_backup ) ) {
- return $data;
- } else if ( empty( $data->backups->last_backup ) ) {
- return rest_ensure_response( array(
- 'code' => 'success',
- 'message' => esc_html__( 'VaultPress is active and will back up your site soon.', 'jetpack' ),
- 'data' => $data,
- ) );
- } else {
- return rest_ensure_response( array(
- 'code' => 'success',
- 'message' => esc_html(
- sprintf(
- __( 'Your site was successfully backed-up %s ago.', 'jetpack' ),
- human_time_diff(
- $data->backups->last_backup,
- current_time( 'timestamp' )
- )
- )
- ),
- 'data' => $data,
- ) );
- }
- }
-
- /**
- * A WordPress REST API permission callback method that accepts a request object and
- * decides if the current user has enough privileges to act.
- *
- * @since 4.3.0
- *
- * @return bool does a current user have enough privileges.
- */
- public function can_request() {
- return current_user_can( 'jetpack_admin_page' );
- }
-}
-
-/**
- * Actions performed only when Gravatar Hovercards is activated through the endpoint call.
- *
- * @since 4.3.1
- */
-function jetpack_do_after_gravatar_hovercards_activation() {
-
- // When Gravatar Hovercards is activated, enable them automatically.
- update_option( 'gravatar_disable_hovercards', 'enabled' );
-}
-add_action( 'jetpack_activate_module_gravatar-hovercards', 'jetpack_do_after_gravatar_hovercards_activation' );
-
-/**
- * Actions performed only when Gravatar Hovercards is activated through the endpoint call.
- *
- * @since 4.3.1
- */
-function jetpack_do_after_gravatar_hovercards_deactivation() {
-
- // When Gravatar Hovercards is deactivated, disable them automatically.
- update_option( 'gravatar_disable_hovercards', 'disabled' );
-}
-add_action( 'jetpack_deactivate_module_gravatar-hovercards', 'jetpack_do_after_gravatar_hovercards_deactivation' );
-
-/**
- * Actions performed only when Markdown is activated through the endpoint call.
- *
- * @since 4.7.0
- */
-function jetpack_do_after_markdown_activation() {
-
- // When Markdown is activated, enable support for post editing automatically.
- update_option( 'wpcom_publish_posts_with_markdown', true );
-}
-add_action( 'jetpack_activate_module_markdown', 'jetpack_do_after_markdown_activation' );
diff --git a/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-site-endpoints.php b/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-site-endpoints.php
deleted file mode 100644
index 68327f51..00000000
--- a/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-site-endpoints.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-/**
- * This is the endpoint class for `/site` endpoints.
- *
- */
-class Jetpack_Core_API_Site_Endpoint {
-
- /**
- * Returns the result of `/sites/%s/features` endpoint call.
- * @return object $features has 'active' and 'available' properties each of which contain feature slugs.
- * 'active' is a simple array of slugs that are active on the current plan.
- * 'available' is an object with keys that represent feature slugs and values are arrays
- * of plan slugs that enable these features
- */
- public static function get_features() {
-
- // Make the API request
- $request = sprintf( '/sites/%d/features', Jetpack_Options::get_option( 'id' ) );
- $response = Jetpack_Client::wpcom_json_api_request_as_blog( $request, '1.1' );
-
- // Bail if there was an error or malformed response
- if ( is_wp_error( $response ) || ! is_array( $response ) || ! isset( $response['body'] ) ) {
- return new WP_Error(
- 'failed_to_fetch_data',
- esc_html__( 'Unable to fetch the requested data.', 'jetpack' ),
- array( 'status' => 500 )
- );
- }
-
- // Decode the results
- $results = json_decode( $response['body'], true );
-
- // Bail if there were no results or plan details returned
- if ( ! is_array( $results ) ) {
- return new WP_Error(
- 'failed_to_fetch_data',
- esc_html__( 'Unable to fetch the requested data.', 'jetpack' ),
- array( 'status' => 500 )
- );
- }
-
- return rest_ensure_response( array(
- 'code' => 'success',
- 'message' => esc_html__( 'Site features correctly received.', 'jetpack' ),
- 'data' => wp_remote_retrieve_body( $response ),
- )
- );
- }
-
- /**
- * Check that the current user has permissions to request information about this site.
- *
- * @since 5.1.0
- *
- * @return bool
- */
- public static function can_request() {
- return current_user_can( 'jetpack_manage_modules' );
- }
-}
diff --git a/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-widgets-endpoints.php b/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-widgets-endpoints.php
deleted file mode 100644
index ffd62bb3..00000000
--- a/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-widgets-endpoints.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-/**
- * Widget information getter endpoint.
- *
- */
-class Jetpack_Core_API_Widget_Endpoint {
-
- /**
- * @since 5.5.0
- *
- * @param WP_REST_Request $request {
- * Array of parameters received by request.
- *
- * @type string $id Widget id.
- * }
- *
- * @return WP_REST_Response|WP_Error A REST response if the request was served successfully, otherwise an error.
- */
- public function process( $request ) {
- $widget_base = _get_widget_id_base( $request['id'] );
- $widget_id = (int) substr( $request['id'], strlen( $widget_base ) + 1 );
-
- switch( $widget_base ) {
- case 'milestone_widget':
- $instances = get_option( 'widget_milestone_widget', array() );
-
- if (
- class_exists( 'Milestone_Widget' )
- && is_active_widget( false, $widget_base . '-' . $widget_id, $widget_base )
- && isset( $instances[ $widget_id ] )
- ) {
- $instance = $instances[ $widget_id ];
- $widget = new Milestone_Widget();
- return $widget->get_widget_data( $instance );
- }
- }
-
- return new WP_Error(
- 'not_found',
- esc_html__( 'The requested widget was not found.', 'jetpack' ),
- array( 'status' => 404 )
- );
- }
-
- /**
- * Check that the current user has permissions to view widget information.
- * For the currently supported widget there are no permissions required.
- *
- * @since 5.5.0
- *
- * @return bool
- */
- public function can_request() {
- return true;
- }
-}
diff --git a/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-xmlrpc-consumer-endpoint.php b/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-xmlrpc-consumer-endpoint.php
deleted file mode 100644
index abfc8627..00000000
--- a/plugins/jetpack/_inc/lib/core-api/class.jetpack-core-api-xmlrpc-consumer-endpoint.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-/**
- * This is the base class for every Core API endpoint that needs an XMLRPC client.
- *
- */
-abstract class Jetpack_Core_API_XMLRPC_Consumer_Endpoint {
-
- /**
- * An instance of the Jetpack XMLRPC client to make WordPress.com requests
- *
- * @private
- * @var Jetpack_IXR_Client
- */
- protected $xmlrpc;
-
- /**
- *
- * @since 4.3.0
- *
- * @param Jetpack_IXR_Client $xmlrpc
- */
- public function __construct( $xmlrpc = null ) {
- $this->xmlrpc = $xmlrpc;
- }
-
- /**
- * Checks if the site is public and returns the result.
- *
- * @since 4.3.0
- *
- * @return Boolean $is_public
- */
- protected function is_site_public() {
- if ( $this->xmlrpc->query( 'jetpack.isSitePubliclyAccessible', home_url() ) ) {
- return $this->xmlrpc->getResponse();
- }
- return false;
- }
-} \ No newline at end of file
diff --git a/plugins/jetpack/_inc/lib/core-api/load-wpcom-endpoints.php b/plugins/jetpack/_inc/lib/core-api/load-wpcom-endpoints.php
deleted file mode 100644
index 2b26f78c..00000000
--- a/plugins/jetpack/_inc/lib/core-api/load-wpcom-endpoints.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-/*
- * Loader for WP REST API endpoints that are synced with WP.com.
- *
- * On WP.com see:
- * - wp-content/mu-plugins/rest-api.php
- * - wp-content/rest-api-plugins/jetpack-endpoints/
- */
-
-function wpcom_rest_api_v2_load_plugin_files( $file_pattern ) {
- $plugins = glob( dirname( __FILE__ ) . '/' . $file_pattern );
-
- if ( ! is_array( $plugins ) ) {
- return;
- }
-
- foreach ( array_filter( $plugins, 'is_file' ) as $plugin ) {
- require_once $plugin;
- }
-}
-
-// API v2 plugins: define a class, then call this function.
-function wpcom_rest_api_v2_load_plugin( $class_name ) {
- global $wpcom_rest_api_v2_plugins;
-
- if ( ! isset( $wpcom_rest_api_v2_plugins ) ) {
- $_GLOBALS['wpcom_rest_api_v2_plugins'] = $wpcom_rest_api_v2_plugins = array();
- }
-
- if ( ! isset( $wpcom_rest_api_v2_plugins[ $class_name ] ) ) {
- $wpcom_rest_api_v2_plugins[ $class_name ] = new $class_name;
- }
-}
-
-require dirname( __FILE__ ) . '/class-wpcom-rest-field-controller.php';
-
-// Now load the endpoint files.
-wpcom_rest_api_v2_load_plugin_files( 'wpcom-endpoints/*.php' );
-wpcom_rest_api_v2_load_plugin_files( 'wpcom-fields/*.php' );
diff --git a/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/business-hours.php b/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/business-hours.php
deleted file mode 100644
index 2bf80939..00000000
--- a/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/business-hours.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-/**
- * Business Hours: Localized week
- *
- * @since 7.1
- */
-class WPCOM_REST_API_V2_Endpoint_Business_Hours extends WP_REST_Controller {
- function __construct() {
- $this->namespace = 'wpcom/v2';
- $this->rest_base = 'business-hours';
- // This endpoint *does not* need to connect directly to Jetpack sites.
- add_action( 'rest_api_init', array( $this, 'register_routes' ) );
- }
-
- public function register_routes() {
- // GET /sites/<blog_id>/business-hours/localized-week - Return the localized
- register_rest_route( $this->namespace, '/' . $this->rest_base . '/localized-week', array(
- array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => array( $this, 'get_localized_week' ),
- )
- ) );
- }
-
- /**
- * Retreives localized business hours
- *
- * @return array data object containing information about business hours
- */
- public function get_localized_week() {
- global $wp_locale;
-
- return array(
- 'days' => array(
- 'Sun' => $wp_locale->get_weekday( 0 ),
- 'Mon' => $wp_locale->get_weekday( 1 ),
- 'Tue' => $wp_locale->get_weekday( 2 ),
- 'Wed' => $wp_locale->get_weekday( 3 ),
- 'Thu' => $wp_locale->get_weekday( 4 ),
- 'Fri' => $wp_locale->get_weekday( 5 ),
- 'Sat' => $wp_locale->get_weekday( 6 ),
- ),
- 'startOfWeek' => (int) get_option( 'start_of_week', 0 ),
- );
- }
-}
-
-wpcom_rest_api_v2_load_plugin( 'WPCOM_REST_API_V2_Endpoint_Business_Hours' );
diff --git a/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-mailchimp.php b/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-mailchimp.php
deleted file mode 100644
index 09ef9499..00000000
--- a/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-mailchimp.php
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-
-/**
- * Mailchimp: Get Mailchimp Status.
- * API to determine if current site has linked Mailchimp account and mailing list selected.
- * This API is meant to be used in Jetpack and on WPCOM.
- *
- * @since 7.1
- */
-class WPCOM_REST_API_V2_Endpoint_Mailchimp extends WP_REST_Controller {
- public function __construct() {
- $this->namespace = 'wpcom/v2';
- $this->rest_base = 'mailchimp';
- $this->wpcom_is_wpcom_only_endpoint = true;
-
- add_action( 'rest_api_init', array( $this, 'register_routes' ) );
- }
-
- /**
- * Called automatically on `rest_api_init()`.
- */
- public function register_routes() {
- register_rest_route(
- $this->namespace,
- $this->rest_base,
- array(
- array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => array( $this, 'get_mailchimp_status' ),
- ),
- )
- );
- }
-
- /**
- * Check if MailChimp is set up properly.
- *
- * @return bool
- */
- private function is_connected() {
- $option = get_option( 'jetpack_mailchimp' );
- if ( ! $option ) {
- return false;
- }
- $data = json_decode( $option, true );
- if ( ! $data ) {
- return false;
- }
- return isset( $data['follower_list_id'], $data['keyring_id'] );
- }
-
- /**
- * Get the status of current blog's Mailchimp connection
- *
- * @return mixed
- * code:string (connected|unconnected),
- * connect_url:string
- * site_id:int
- */
- public function get_mailchimp_status() {
- $is_wpcom = ( defined( 'IS_WPCOM' ) && IS_WPCOM );
- $site_id = $is_wpcom ? get_current_blog_id() : Jetpack_Options::get_option( 'id' );
- if ( ! $site_id ) {
- return new WP_Error(
- 'unavailable_site_id',
- __( 'Sorry, something is wrong with your Jetpack connection.', 'jetpack' ),
- 403
- );
- }
- $connect_url = sprintf( 'https://wordpress.com/sharing/%s', rawurlencode( $site_id ) );
- return array(
- 'code' => $this->is_connected() ? 'connected' : 'not_connected',
- 'connect_url' => $connect_url,
- 'site_id' => $site_id,
- );
- }
-}
-
-wpcom_rest_api_v2_load_plugin( 'WPCOM_REST_API_V2_Endpoint_Mailchimp' );
diff --git a/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/gutenberg-available-extensions.php b/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/gutenberg-available-extensions.php
deleted file mode 100644
index a10a4056..00000000
--- a/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/gutenberg-available-extensions.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-
-/*
- * Gutenberg: List Available Gutenberg Extensions (Blocks and Plugins)
- *
- * [
- * { # Availabilty Object. See schema for more detail.
- * available: (boolean) Whether the extension is available
- * unavailable_reason: (string) Reason for the extension not being available
- * },
- * ...
- * ]
- *
- * @since 6.9
- */
-class WPCOM_REST_API_V2_Endpoint_Gutenberg_Available_Extensions extends WP_REST_Controller {
- function __construct() {
- $this->namespace = 'wpcom/v2';
- $this->rest_base = 'gutenberg';
- $this->wpcom_is_site_specific_endpoint = true;
-
- add_action( 'rest_api_init', array( $this, 'register_routes' ) );
- }
-
- public function register_routes() {
- register_rest_route( $this->namespace, $this->rest_base . '/available-extensions', array(
- array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => array( 'Jetpack_Gutenberg', 'get_availability' ),
- 'permission_callback' => array( $this, 'get_items_permission_check' ),
- ),
- 'schema' => array( $this, 'get_item_schema' ),
- ) );
- }
-
- /**
- * Return the available Gutenberg extensions schema
- *
- * @return array Available Gutenberg extensions schema
- */
- public function get_public_item_schema() {
- $schema = array(
- '$schema' => 'http://json-schema.org/draft-04/schema#',
- 'title' => 'gutenberg-available-extensions',
- 'type' => 'object',
- 'properties' => array(
- 'available' => array(
- 'description' => __( 'Whether the extension is available', 'jetpack' ),
- 'type' => 'boolean',
- ),
- 'unavailable_reason' => array(
- 'description' => __( 'Reason for the extension not being available', 'jetpack' ),
- 'type' => 'string',
- ),
- ),
- );
-
- return $this->add_additional_fields_schema( $schema );
- }
-
- /**
- * Ensure the user has proper permissions
- *
- * @return boolean
- */
- public function get_items_permission_check() {
- return current_user_can( 'edit_posts' );
- }
-}
-
-wpcom_rest_api_v2_load_plugin( 'WPCOM_REST_API_V2_Endpoint_Gutenberg_Available_Extensions' );
diff --git a/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/hello.php b/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/hello.php
deleted file mode 100644
index a05769b2..00000000
--- a/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/hello.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-class WPCOM_REST_API_V2_Endpoint_Hello {
- public function __construct() {
- add_action( 'rest_api_init', array( $this, 'register_routes' ) );
- }
-
- public function register_routes() {
- register_rest_route( 'wpcom/v2', '/hello', array(
- array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => array( $this, 'get_data' ),
- ),
- ) );
- }
-
- public function get_data( $request ) {
- return array( 'hello' => 'world' );
- }
-}
-
-wpcom_rest_api_v2_load_plugin( 'WPCOM_REST_API_V2_Endpoint_Hello' );
diff --git a/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/publicize-connection-test-results.php b/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/publicize-connection-test-results.php
deleted file mode 100644
index 6e04a289..00000000
--- a/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/publicize-connection-test-results.php
+++ /dev/null
@@ -1,121 +0,0 @@
-<?php
-
-require_once dirname( __FILE__ ) . '/publicize-connections.php';
-
-/**
- * Publicize: List Connection Test Result Data
- *
- * All the same data as the Publicize Connections Endpoint, plus test results.
- *
- * @since 6.8
- */
-class WPCOM_REST_API_V2_Endpoint_List_Publicize_Connection_Test_Results extends WPCOM_REST_API_V2_Endpoint_List_Publicize_Connections {
- public function __construct() {
- $this->namespace = 'wpcom/v2';
- $this->rest_base = 'publicize/connection-test-results';
-
- add_action( 'rest_api_init', array( $this, 'register_routes' ) );
- }
-
- /**
- * Called automatically on `rest_api_init()`.
- */
- public function register_routes() {
- register_rest_route(
- $this->namespace,
- '/' . $this->rest_base,
- array(
- array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => array( $this, 'get_items' ),
- 'permission_callback' => array( $this, 'get_items_permission_check' ),
- ),
- 'schema' => array( $this, 'get_public_item_schema' ),
- )
- );
- }
-
- /**
- * Adds the test results properties to the Connection schema.
- *
- * @return array
- */
- public function get_item_schema() {
- $schema = array(
- '$schema' => 'http://json-schema.org/draft-04/schema#',
- 'title' => 'jetpack-publicize-connection-test-results',
- 'type' => 'object',
- 'properties' => $this->get_connection_schema_properties() + array(
- 'test_success' => array(
- 'description' => __( 'Did the Publicize Connection test pass?', 'jetpack' ),
- 'type' => 'boolean',
- ),
- 'test_message' => array(
- 'description' => __( 'Publicize Connection success or error message', 'jetpack' ),
- 'type' => 'string',
- ),
- 'can_refresh' => array(
- 'description' => __( 'Can the current user refresh the Publicize Connection?', 'jetpack' ),
- 'type' => 'boolean',
- ),
- 'refresh_text' => array(
- 'description' => __( 'Message instructing the user to refresh their Connection to the Publicize Service', 'jetpack' ),
- 'type' => 'string',
- ),
- 'refresh_url' => array(
- 'description' => __( 'URL for refreshing the Connection to the Publicize Service', 'jetpack' ),
- 'type' => 'string',
- 'format' => 'uri',
- ),
- ),
- );
-
- return $this->add_additional_fields_schema( $schema );
- }
-
- /**
- * @param WP_REST_Request
- * @see Publicize::get_publicize_conns_test_results()
- * @return WP_REST_Response suitable for 1-page collection
- */
- public function get_items( $request ) {
- global $publicize;
-
- $items = $this->get_connections();
-
- $test_results = $publicize->get_publicize_conns_test_results();
- $test_results_by_unique_id = array();
- foreach ( $test_results as $test_result ) {
- $test_results_by_unique_id[ $test_result['unique_id'] ] = $test_result;
- }
-
- $mapping = array(
- 'test_success' => 'connectionTestPassed',
- 'test_message' => 'connectionTestMessage',
- 'can_refresh' => 'userCanRefresh',
- 'refresh_text' => 'refreshText',
- 'refresh_url' => 'refreshURL',
- );
-
- foreach ( $items as &$item ) {
- $test_result = $test_results_by_unique_id[ $item['id'] ];
-
- foreach ( $mapping as $field => $test_result_field ) {
- $item[ $field ] = $test_result[ $test_result_field ];
- }
- }
-
- if ( 'linkedin' === $item['id'] && 'must_reauth' === $test_result['connectionTestPassed'] ) {
- $item['test_success'] = 'must_reauth';
- }
-
- $response = rest_ensure_response( $items );
-
- $response->header( 'X-WP-Total', count( $items ) );
- $response->header( 'X-WP-TotalPages', 1 );
-
- return $response;
- }
-}
-
-wpcom_rest_api_v2_load_plugin( 'WPCOM_REST_API_V2_Endpoint_List_Publicize_Connection_Test_Results' );
diff --git a/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/publicize-connections.php b/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/publicize-connections.php
deleted file mode 100644
index 34d6b2a6..00000000
--- a/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/publicize-connections.php
+++ /dev/null
@@ -1,194 +0,0 @@
-<?php
-
-/**
- * Publicize: List Connections
- *
- * [
- * { # Connnection Object. See schema for more detail.
- * id: (string) Connection unique_id
- * service_name: (string) Service slug
- * display_name: (string) User name/display name of user/connection on Service
- * global: (boolean) Is the Connection available to all users of the site?
- * },
- * ...
- * ]
- *
- * @since 6.8
- */
-class WPCOM_REST_API_V2_Endpoint_List_Publicize_Connections extends WP_REST_Controller {
- /**
- * Flag to help WordPress.com decide where it should look for
- * Publicize data. Ignored for direct requests to Jetpack sites.
- *
- * @var bool $wpcom_is_wpcom_only_endpoint
- */
- public $wpcom_is_wpcom_only_endpoint = true;
-
- public function __construct() {
- $this->namespace = 'wpcom/v2';
- $this->rest_base = 'publicize/connections';
-
- add_action( 'rest_api_init', array( $this, 'register_routes' ) );
- }
-
- /**
- * Called automatically on `rest_api_init()`.
- */
- public function register_routes() {
- register_rest_route(
- $this->namespace,
- '/' . $this->rest_base,
- array(
- array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => array( $this, 'get_items' ),
- 'permission_callback' => array( $this, 'get_items_permission_check' ),
- ),
- 'schema' => array( $this, 'get_public_item_schema' ),
- )
- );
- }
-
- /**
- * Helper for generating schema. Used by this endpoint and by the
- * Connection Test Result endpoint.
- *
- * @internal
- * @return array
- */
- protected function get_connection_schema_properties() {
- return array(
- 'id' => array(
- 'description' => __( 'Unique identifier for the Publicize Connection', 'jetpack' ),
- 'type' => 'string',
- ),
- 'service_name' => array(
- 'description' => __( 'Alphanumeric identifier for the Publicize Service', 'jetpack' ),
- 'type' => 'string',
- ),
- 'display_name' => array(
- 'description' => __( 'Username of the connected account', 'jetpack' ),
- 'type' => 'string',
- ),
- 'global' => array(
- 'description' => __( 'Is this connection available to all users?', 'jetpack' ),
- 'type' => 'boolean',
- ),
- );
- }
-
- /**
- * @return array
- */
- public function get_item_schema() {
- $schema = array(
- '$schema' => 'http://json-schema.org/draft-04/schema#',
- 'title' => 'jetpack-publicize-connection',
- 'type' => 'object',
- 'properties' => $this->get_connection_schema_properties(),
- );
-
- return $this->add_additional_fields_schema( $schema );
- }
-
- /**
- * Helper for retrieving Connections. Used by this endpoint and by
- * the Connection Test Result endpoint.
- *
- * @internal
- * @return array
- */
- protected function get_connections() {
- global $publicize;
-
- $items = array();
-
- foreach ( (array) $publicize->get_services( 'connected' ) as $service_name => $connections ) {
- foreach ( $connections as $connection ) {
- $connection_meta = $publicize->get_connection_meta( $connection );
- $connection_data = $connection_meta['connection_data'];
-
- $items[] = array(
- 'id' => (string) $publicize->get_connection_unique_id( $connection ),
- 'service_name' => $service_name,
- 'display_name' => $publicize->get_display_name( $service_name, $connection ),
- // We expect an integer, but do loose comparison below in case some other type is stored
- 'global' => 0 == $connection_data['user_id'],
- );
- }
- }
-
- return $items;
- }
-
- /**
- * @param WP_REST_Request $request
- * @return WP_REST_Response suitable for 1-page collection
- */
- public function get_items( $request ) {
- $items = array();
-
- foreach ( $this->get_connections() as $item ) {
- $items[] = $this->prepare_item_for_response( $item, $request );
- }
-
- $response = rest_ensure_response( $items );
- $response->header( 'X-WP-Total', count( $items ) );
- $response->header( 'X-WP-TotalPages', 1 );
-
- return $response;
- }
-
- /**
- * Filters out data based on ?_fields= request parameter
- *
- * @param array $connection
- * @param WP_REST_Request $request
- * @return array filtered $connection
- */
- public function prepare_item_for_response( $connection, $request ) {
- if ( ! is_callable( array( $this, 'get_fields_for_response' ) ) ) {
- return $connection;
- }
-
- $fields = $this->get_fields_for_response( $request );
-
- $response_data = array();
- foreach ( $connection as $field => $value ) {
- if ( in_array( $field, $fields, true ) ) {
- $response_data[ $field ] = $value;
- }
- }
-
- return $response_data;
- }
-
- /**
- * Verify that user can access Publicize data
- *
- * @return true|WP_Error
- */
- public function get_items_permission_check() {
- global $publicize;
-
- if ( ! $publicize ) {
- return new WP_Error(
- 'publicize_not_available',
- __( 'Sorry, Publicize is not available on your site right now.', 'jetpack' ),
- array( 'status' => rest_authorization_required_code() )
- );
- }
-
- if ( $publicize->current_user_can_access_publicize_data() ) {
- return true;
- }
-
- return new WP_Error(
- 'invalid_user_permission_publicize',
- __( 'Sorry, you are not allowed to access Publicize data on this site.', 'jetpack' ),
- array( 'status' => rest_authorization_required_code() )
- );
- }
-}
-
-wpcom_rest_api_v2_load_plugin( 'WPCOM_REST_API_V2_Endpoint_List_Publicize_Connections' );
diff --git a/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/publicize-services.php b/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/publicize-services.php
deleted file mode 100644
index 4641b218..00000000
--- a/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/publicize-services.php
+++ /dev/null
@@ -1,167 +0,0 @@
-<?php
-
-/**
- * Publicize: List Publicize Services
- *
- * [
- * { # Service Object. See schema for more detail.
- * name: (string) Service slug
- * label: (string) Human readable label for the Service
- * url: (string) Connect URL
- * },
- * ...
- * ]
- *
- * @since 6.8
- */
-class WPCOM_REST_API_V2_Endpoint_List_Publicize_Services extends WP_REST_Controller {
- /**
- * Flag to help WordPress.com decide where it should look for
- * Publicize data. Ignored for direct requests to Jetpack sites.
- *
- * @var bool $wpcom_is_wpcom_only_endpoint
- */
- public $wpcom_is_wpcom_only_endpoint = true;
-
- public function __construct() {
- $this->namespace = 'wpcom/v2';
- $this->rest_base = 'publicize/services';
-
- add_action( 'rest_api_init', array( $this, 'register_routes' ) );
- }
-
- /**
- * Called automatically on `rest_api_init()`.
- */
- public function register_routes() {
- register_rest_route(
- $this->namespace,
- '/' . $this->rest_base,
- array(
- array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => array( $this, 'get_items' ),
- 'permission_callback' => array( $this, 'get_items_permission_check' ),
- ),
- 'schema' => array( $this, 'get_public_item_schema' ),
- )
- );
- }
-
- /**
- * @return array
- */
- public function get_item_schema() {
- $schema = array(
- '$schema' => 'http://json-schema.org/draft-04/schema#',
- 'title' => 'jetpack-publicize-service',
- 'type' => 'object',
- 'properties' => array(
- 'name' => array(
- 'description' => __( 'Alphanumeric identifier for the Publicize Service', 'jetpack' ),
- 'type' => 'string',
- ),
- 'label' => array(
- 'description' => __( 'Human readable label for the Publicize Service', 'jetpack' ),
- 'type' => 'string',
- ),
- 'url' => array(
- 'description' => __( 'The URL used to connect to the Publicize Service', 'jetpack' ),
- 'type' => 'string',
- 'format' => 'uri',
- ),
- ),
- );
-
- return $this->add_additional_fields_schema( $schema );
- }
-
- /**
- * Retrieves available Publicize Services.
- *
- * @see Publicize::get_available_service_data()
- *
- * @param WP_REST_Request $request
- * @return WP_REST_Response suitable for 1-page collection
- */
- public function get_items( $request ) {
- global $publicize;
- /**
- * We need this because Publicize::get_available_service_data() uses `Jetpack_Keyring_Service_Helper`
- * and `Jetpack_Keyring_Service_Helper` relies on `menu_page_url()`.
- *
- * We also need add_submenu_page(), as the URLs for connecting each service
- * rely on the `sharing` menu subpage being present.
- */
- include_once ABSPATH . 'wp-admin/includes/plugin.php';
-
- // The `sharing` submenu page must exist for service connect URLs to be correct.
- add_submenu_page( 'options-general.php', '', '', 'manage_options', 'sharing', '__return_empty_string' );
-
- $services_data = $publicize->get_available_service_data();
-
- $services = array();
- foreach ( $services_data as $service_data ) {
- $services[] = $this->prepare_item_for_response( $service_data, $request );
- }
-
- $response = rest_ensure_response( $services );
- $response->header( 'X-WP-Total', count( $services ) );
- $response->header( 'X-WP-TotalPages', 1 );
-
- return $response;
- }
-
- /**
- * Filters out data based on ?_fields= request parameter
- *
- * @param array $service
- * @param WP_REST_Request $request
- * @return array filtered $service
- */
- public function prepare_item_for_response( $service, $request ) {
- if ( ! is_callable( array( $this, 'get_fields_for_response' ) ) ) {
- return $service;
- }
-
- $fields = $this->get_fields_for_response( $request );
-
- $response_data = array();
- foreach ( $service as $field => $value ) {
- if ( in_array( $field, $fields, true ) ) {
- $response_data[ $field ] = $value;
- }
- }
-
- return $response_data;
- }
-
- /**
- * Verify that user can access Publicize data
- *
- * @return true|WP_Error
- */
- public function get_items_permission_check() {
- global $publicize;
-
- if ( ! $publicize ) {
- return new WP_Error(
- 'publicize_not_available',
- __( 'Sorry, Publicize is not available on your site right now.', 'jetpack' ),
- array( 'status' => rest_authorization_required_code() )
- );
- }
-
- if ( $publicize->current_user_can_access_publicize_data() ) {
- return true;
- }
-
- return new WP_Error(
- 'invalid_user_permission_publicize',
- __( 'Sorry, you are not allowed to access Publicize data on this site.', 'jetpack' ),
- array( 'status' => rest_authorization_required_code() )
- );
- }
-}
-
-wpcom_rest_api_v2_load_plugin( 'WPCOM_REST_API_V2_Endpoint_List_Publicize_Services' );
diff --git a/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/service-api-keys.php b/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/service-api-keys.php
deleted file mode 100644
index 05d0ddd3..00000000
--- a/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/service-api-keys.php
+++ /dev/null
@@ -1,281 +0,0 @@
-<?php
-/*
- * Service API Keys: Exposes 3rd party api keys that are used on a site.
- *
- * [
- * { # Availabilty Object. See schema for more detail.
- * code: (string) Displays success if the operation was successfully executed and an error code if it was not
- * service: (string) The name of the service in question
- * service_api_key: (string) The API key used by the service empty if one is not set yet
- * message: (string) User friendly message
- * },
- * ...
- * ]
- *
- * @since 6.9
- */
-class WPCOM_REST_API_V2_Endpoint_Service_API_Keys extends WP_REST_Controller {
-
- function __construct() {
- $this->namespace = 'wpcom/v2';
- $this->rest_base = 'service-api-keys';
-
- add_action( 'rest_api_init', array( $this, 'register_routes' ) );
- }
-
- public function register_routes() {
- register_rest_route(
- 'wpcom/v2',
- '/service-api-keys/(?P<service>[a-z\-_]+)',
- array(
- array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => array( __CLASS__, 'get_service_api_key' ),
- ),
- array(
- 'methods' => WP_REST_Server::EDITABLE,
- 'callback' => array( __CLASS__, 'update_service_api_key' ),
- 'permission_callback' => array( __CLASS__, 'edit_others_posts_check' ),
- 'args' => array(
- 'service_api_key' => array(
- 'required' => true,
- 'type' => 'text',
- ),
- ),
- ),
- array(
- 'methods' => WP_REST_Server::DELETABLE,
- 'callback' => array( __CLASS__, 'delete_service_api_key' ),
- 'permission_callback' => array( __CLASS__, 'edit_others_posts_check' ),
- ),
- )
- );
- }
-
- public static function edit_others_posts_check() {
- if ( current_user_can( 'edit_others_posts' ) ) {
- return true;
- }
-
- $user_permissions_error_msg = esc_html__(
- 'You do not have the correct user permissions to perform this action.
- Please contact your site admin if you think this is a mistake.',
- 'jetpack'
- );
-
- return new WP_Error( 'invalid_user_permission_edit_others_posts', $user_permissions_error_msg, rest_authorization_required_code() );
- }
-
- /**
- * Return the available Gutenberg extensions schema
- *
- * @return array Service API Key schema
- */
- public function get_public_item_schema() {
- $schema = array(
- '$schema' => 'http://json-schema.org/draft-04/schema#',
- 'title' => 'service-api-keys',
- 'type' => 'object',
- 'properties' => array(
- 'code' => array(
- 'description' => __( 'Displays success if the operation was successfully executed and an error code if it was not', 'jetpack' ),
- 'type' => 'string',
- ),
- 'service' => array(
- 'description' => __( 'The name of the service in question', 'jetpack' ),
- 'type' => 'string',
- ),
- 'service_api_key' => array(
- 'description' => __( 'The API key used by the service. Empty if none has been set yet', 'jetpack' ),
- 'type' => 'string',
- ),
- 'message' => array(
- 'description' => __( 'User friendly message', 'jetpack' ),
- 'type' => 'string',
- ),
- ),
- );
-
- return $this->add_additional_fields_schema( $schema );
- }
-
- /**
- * Get third party plugin API keys.
- *
- * @param WP_REST_Request $request {
- * Array of parameters received by request.
- *
- * @type string $slug Plugin slug with the syntax 'plugin-directory/plugin-main-file.php'.
- * }
- */
- public static function get_service_api_key( $request ) {
-
- $service = self::validate_service_api_service( $request['service'] );
- if ( ! $service ) {
- return self::service_api_invalid_service_response();
- }
- $option = self::key_for_api_service( $service );
- $message = esc_html__( 'API key retrieved successfully.', 'jetpack' );
- return array(
- 'code' => 'success',
- 'service' => $service,
- 'service_api_key' => Jetpack_Options::get_option( $option, '' ),
- 'message' => $message,
- );
- }
-
- /**
- * Update third party plugin API keys.
- *
- * @param WP_REST_Request $request {
- * Array of parameters received by request.
- *
- * @type string $slug Plugin slug with the syntax 'plugin-directory/plugin-main-file.php'.
- * }
- */
- public static function update_service_api_key( $request ) {
- $service = self::validate_service_api_service( $request['service'] );
- if ( ! $service ) {
- return self::service_api_invalid_service_response();
- }
- $json_params = $request->get_json_params();
- $params = ! empty( $json_params ) ? $json_params : $request->get_body_params();
- $service_api_key = trim( $params['service_api_key'] );
- $option = self::key_for_api_service( $service );
-
- $validation = self::validate_service_api_key( $service_api_key, $service, $params );
- if ( ! $validation['status'] ) {
- return new WP_Error( 'invalid_key', esc_html__( 'Invalid API Key', 'jetpack' ), array( 'status' => 404 ) );
- }
- $message = esc_html__( 'API key updated successfully.', 'jetpack' );
- Jetpack_Options::update_option( $option, $service_api_key );
- return array(
- 'code' => 'success',
- 'service' => $service,
- 'service_api_key' => Jetpack_Options::get_option( $option, '' ),
- 'message' => $message,
- );
- }
-
- /**
- * Delete a third party plugin API key.
- *
- * @param WP_REST_Request $request {
- * Array of parameters received by request.
- *
- * @type string $slug Plugin slug with the syntax 'plugin-directory/plugin-main-file.php'.
- * }
- */
- public static function delete_service_api_key( $request ) {
- $service = self::validate_service_api_service( $request['service'] );
- if ( ! $service ) {
- return self::service_api_invalid_service_response();
- }
- $option = self::key_for_api_service( $service );
- Jetpack_Options::delete_option( $option );
- $message = esc_html__( 'API key deleted successfully.', 'jetpack' );
- return array(
- 'code' => 'success',
- 'service' => $service,
- 'service_api_key' => Jetpack_Options::get_option( $option, '' ),
- 'message' => $message,
- );
- }
-
- /**
- * Validate the service provided in /service-api-keys/ endpoints.
- * To add a service to these endpoints, add the service name to $valid_services
- * and add '{service name}_api_key' to the non-compact return array in get_option_names(),
- * in class-jetpack-options.php
- *
- * @param string $service The service the API key is for.
- * @return string Returns the service name if valid, null if invalid.
- */
- public static function validate_service_api_service( $service = null ) {
- $valid_services = array(
- 'mapbox',
- );
- return in_array( $service, $valid_services, true ) ? $service : null;
- }
-
- /**
- * Error response for invalid service API key requests with an invalid service.
- */
- public static function service_api_invalid_service_response() {
- return new WP_Error(
- 'invalid_service',
- esc_html__( 'Invalid Service', 'jetpack' ),
- array( 'status' => 404 )
- );
- }
-
- /**
- * Validate API Key
- *
- * @param string $key The API key to be validated.
- * @param string $service The service the API key is for.
- */
- public static function validate_service_api_key( $key = null, $service = null ) {
- $validation = false;
- switch ( $service ) {
- case 'mapbox':
- $validation = self::validate_service_api_key_mapbox( $key );
- break;
- }
- return $validation;
- }
-
- /**
- * Validate Mapbox API key
- * Based loosely on https://github.com/mapbox/geocoding-example/blob/master/php/MapboxTest.php
- *
- * @param string $key The API key to be validated.
- */
- public static function validate_service_api_key_mapbox( $key ) {
- $status = true;
- $msg = null;
- $mapbox_url = sprintf(
- 'https://api.mapbox.com?%s',
- $key
- );
- $mapbox_response = wp_safe_remote_get( esc_url_raw( $mapbox_url ) );
- $mapbox_body = wp_remote_retrieve_body( $mapbox_response );
- if ( '{"api":"mapbox"}' !== $mapbox_body ) {
- $status = false;
- $msg = esc_html__( 'Can\'t connect to Mapbox', 'jetpack' );
- return array(
- 'status' => $status,
- 'error_message' => $msg,
- );
- }
- $mapbox_geocode_url = esc_url_raw(
- sprintf(
- 'https://api.mapbox.com/geocoding/v5/mapbox.places/%s.json?access_token=%s',
- '1+broadway+new+york+ny+usa',
- $key
- )
- );
- $mapbox_geocode_response = wp_safe_remote_get( esc_url_raw( $mapbox_geocode_url ) );
- $mapbox_geocode_body = wp_remote_retrieve_body( $mapbox_geocode_response );
- $mapbox_geocode_json = json_decode( $mapbox_geocode_body );
- if ( isset( $mapbox_geocode_json->message ) && ! isset( $mapbox_geocode_json->query ) ) {
- $status = false;
- $msg = $mapbox_geocode_json->message;
- }
- return array(
- 'status' => $status,
- 'error_message' => $msg,
- );
- }
-
- /**
- * Create site option key for service
- *
- * @param string $service The service to create key for.
- */
- private static function key_for_api_service( $service ) {
- return $service . '_api_key';
- }
-}
-
-wpcom_rest_api_v2_load_plugin( 'WPCOM_REST_API_V2_Endpoint_Service_API_Keys' );
diff --git a/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/sites-posts-featured-media-url.php b/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/sites-posts-featured-media-url.php
deleted file mode 100644
index 4c34161c..00000000
--- a/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/sites-posts-featured-media-url.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-/*
- * Plugin Name: WPCOM Add Featured Media URL
- *
- * Adds `jetpack_featured_media_url` to post responses
- */
-
-class WPCOM_REST_API_V2_Sites_Posts_Add_Featured_Media_URL {
- function __construct() {
- add_action( 'rest_api_init', array( $this, 'add_featured_media_url' ) );
- }
-
- function add_featured_media_url() {
- register_rest_field( 'post', 'jetpack_featured_media_url',
- array(
- 'get_callback' => array( $this, 'get_featured_media_url' ),
- 'update_callback' => null,
- 'schema' => null,
- )
- );
- }
-
- function get_featured_media_url( $object, $field_name, $request ) {
- $featured_media_url = '';
- $image_attributes = wp_get_attachment_image_src(
- get_post_thumbnail_id( $object['id'] ),
- 'full'
- );
- if ( is_array( $image_attributes ) && isset( $image_attributes[0] ) ) {
- $featured_media_url = (string) $image_attributes[0];
- }
- return $featured_media_url;
- }
-}
-
-wpcom_rest_api_v2_load_plugin( 'WPCOM_REST_API_V2_Sites_Posts_Add_Featured_Media_URL' );
diff --git a/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/subscribers.php b/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/subscribers.php
deleted file mode 100644
index c1a712bd..00000000
--- a/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/subscribers.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-
-/**
- * Subscribers: Get subscriber count
- *
- * @since 6.9
- */
-class WPCOM_REST_API_V2_Endpoint_Subscribers extends WP_REST_Controller {
- function __construct() {
- $this->namespace = 'wpcom/v2';
- $this->rest_base = 'subscribers';
- // This endpoint *does not* need to connect directly to Jetpack sites.
- $this->wpcom_is_wpcom_only_endpoint = true;
- add_action( 'rest_api_init', array( $this, 'register_routes' ) );
- }
-
- public function register_routes() {
- // GET /sites/<blog_id>/subscribers/count - Return number of subscribers for this site.
- register_rest_route( $this->namespace, '/' . $this->rest_base . '/count', array(
- array(
- 'methods' => WP_REST_Server::READABLE,
- 'callback' => array( $this, 'get_subscriber_count' ),
- 'permission_callback' => array( $this, 'readable_permission_check' ),
- )
- ) );
- }
-
- public function readable_permission_check() {
- if ( ! current_user_can_for_blog( get_current_blog_id(), 'edit_posts' ) ) {
- return new WP_Error( 'authorization_required', 'Only users with the permission to edit posts can see the subscriber count.', array( 'status' => 401 ) );
- }
-
- return true;
- }
-
- /**
- * Retrieves subscriber count
- *
- * @param WP_REST_Request $request incoming API request info
- * @return array data object containing subscriber count
- */
- public function get_subscriber_count( $request ) {
- // Get the most up to date subscriber count when request is not a test
- if ( ! Jetpack_Constants::is_defined( 'TESTING_IN_JETPACK' ) ) {
- delete_transient( 'wpcom_subscribers_total' );
- }
-
- $subscriber_info = Jetpack_Subscriptions_Widget::fetch_subscriber_count();
- $subscriber_count = $subscriber_info['value'];
-
- return array(
- 'count' => $subscriber_count
- );
- }
-}
-
-if (
- Jetpack::is_module_active( 'subscriptions' ) ||
- ( Jetpack_Constants::is_defined( 'TESTING_IN_JETPACK' ) && Jetpack_Constants::get_constant( 'TESTING_IN_JETPACK' ) )
-) {
- wpcom_rest_api_v2_load_plugin( 'WPCOM_REST_API_V2_Endpoint_Subscribers' );
-}
diff --git a/plugins/jetpack/_inc/lib/core-api/wpcom-fields/attachment-fields-videopress.php b/plugins/jetpack/_inc/lib/core-api/wpcom-fields/attachment-fields-videopress.php
deleted file mode 100644
index b615c4e6..00000000
--- a/plugins/jetpack/_inc/lib/core-api/wpcom-fields/attachment-fields-videopress.php
+++ /dev/null
@@ -1,171 +0,0 @@
-<?php
-/**
- * Extend the REST API functionality for VideoPress users.
- *
- * @package Jetpack
- */
-
-/**
- * Add per-attachment VideoPress data.
- *
- * { # Attachment Object
- * ...
- * jetpack_videopress_guid: (string) VideoPress identifier
- * ...
- * }
- *
- * @since 7.1.0
- */
-class WPCOM_REST_API_V2_Attachment_VideoPress_Field extends WPCOM_REST_API_V2_Field_Controller {
- /**
- * The REST Object Type to which the jetpack_videopress_guid field will be added.
- *
- * @var string
- */
- protected $object_type = 'attachment';
-
- /**
- * The name of the REST API field to add.
- *
- * @var string $field_name
- */
- protected $field_name = 'jetpack_videopress_guid';
-
- /**
- * Registers the jetpack_videopress field and adds a filter to remove it for attachments that are not videos.
- */
- public function register_fields() {
- parent::register_fields();
-
- add_filter( 'rest_prepare_attachment', array( $this, 'remove_field_for_non_videos' ), 10, 2 );
- }
-
- /**
- * Defines data structure and what elements are visible in which contexts
- */
- public function get_schema() {
- return array(
- '$schema' => 'http://json-schema.org/draft-04/schema#',
- 'title' => $this->field_name,
- 'type' => 'string',
- 'context' => array( 'view', 'edit' ),
- 'readonly' => true,
- 'description' => __( 'Unique VideoPress ID', 'jetpack' ),
- );
- }
-
- /**
- * Getter: Retrieve current VideoPress data for a given attachment.
- *
- * @param array $attachment Response from the attachment endpoint.
- * @param WP_REST_Request $request Request to the attachment endpoint.
- *
- * @return string
- */
- public function get( $attachment, $request ) {
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $blog_id = get_current_blog_id();
- } else {
- $blog_id = Jetpack_Options::get_option( 'id' );
- }
-
- $post_id = absint( $attachment['id'] );
-
- $videopress_guid = $this->get_videopress_guid( $post_id, $blog_id );
-
- if ( ! $videopress_guid ) {
- return '';
- }
-
- return $videopress_guid;
- }
-
- /**
- * Gets the VideoPress GUID for a given attachment.
- *
- * This is pulled out into a separate method to support unit test mocking.
- *
- * @param int $attachment_id Attachment ID.
- * @param int $blog_id Blog ID.
- *
- * @return string
- */
- public function get_videopress_guid( $attachment_id, $blog_id ) {
- return video_get_info_by_blogpostid( $blog_id, $attachment_id )->guid;
- }
-
- /**
- * Checks if the given attachment is a video.
- *
- * @param object $attachment The attachment object.
- *
- * @return false|int
- */
- public function is_video( $attachment ) {
- return wp_startswith( $attachment->post_mime_type, 'video/' );
- }
-
- /**
- * Removes the jetpack_videopress_guid field from the response if the
- * given attachment is not a video.
- *
- * @param WP_REST_Response $response Response from the attachment endpoint.
- * @param WP_Post $attachment The original attachment object.
- *
- * @return mixed
- */
- public function remove_field_for_non_videos( $response, $attachment ) {
- if ( ! $this->is_video( $attachment ) ) {
- unset( $response->data[ $this->field_name ] );
- }
-
- return $response;
- }
-
- /**
- * Setter: It does nothing since `jetpack_videopress` is a read-only field.
- *
- * @param mixed $value The new value for the field.
- * @param WP_Post $object The attachment object.
- * @param WP_REST_Request $request The request object.
- *
- * @return null
- */
- public function update( $value, $object, $request ) {
- return null;
- }
-
- /**
- * Permission Check for the field's getter. Delegate the responsibility to the
- * attachment endpoint, so it always returns true.
- *
- * @param mixed $object Response from the attachment endpoint.
- * @param WP_REST_Request $request Request to the attachment endpoint.
- *
- * @return true
- */
- public function get_permission_check( $object, $request ) {
- return true;
- }
-
- /**
- * Permission Check for the field's setter. Delegate the responsibility to the
- * attachment endpoint, so it always returns true.
- *
- * @param mixed $value The new value for the field.
- * @param WP_Post $object The attachment object.
- * @param WP_REST_Request $request Request to the attachment endpoint.
- *
- * @return true
- */
- public function update_permission_check( $value, $object, $request ) {
- return true;
- }
-}
-
-if (
- ( method_exists( 'Jetpack', 'is_active' ) && Jetpack::is_active() ) ||
- ( defined( 'IS_WPCOM' ) && IS_WPCOM )
-) {
- wpcom_rest_api_v2_load_plugin( 'WPCOM_REST_API_V2_Attachment_VideoPress_Field' );
-}
diff --git a/plugins/jetpack/_inc/lib/core-api/wpcom-fields/post-fields-publicize-connections.php b/plugins/jetpack/_inc/lib/core-api/wpcom-fields/post-fields-publicize-connections.php
deleted file mode 100644
index c4254a9d..00000000
--- a/plugins/jetpack/_inc/lib/core-api/wpcom-fields/post-fields-publicize-connections.php
+++ /dev/null
@@ -1,353 +0,0 @@
-<?php
-
-/**
- * Add per-post Publicize Connection data.
- *
- * { # Post Object
- * ...
- * jetpack_publicize_connections: { # Defined below in this file. See schema for more detail.
- * id: (string) Connection unique_id
- * service_name: (string) Service slug
- * display_name: (string) User name/display name of user/connection on Service
- * enabled: (boolean) Is this connection slated to be shared to? context=edit only
- * done: (boolean) Is this post (or connection) done sharing? context=edit only
- * toggleable: (boolean) Can the current user change the `enabled` setting for this Connection+Post? context=edit only
- * }
- * ...
- * meta: { # Not defined in this file. Handled in modules/publicize/publicize.php via `register_meta()`
- * jetpack_publicize_message: (string) The message to use instead of the post's title when sharing.
- * }
- * ...
- * }
- *
- * @since 6.8.0
- */
-class WPCOM_REST_API_V2_Post_Publicize_Connections_Field extends WPCOM_REST_API_V2_Field_Controller {
- protected $object_type = 'post';
- protected $field_name = 'jetpack_publicize_connections';
-
- public $memoized_updates = array();
-
- /**
- * Registers the jetpack_publicize_connections field. Called
- * automatically on `rest_api_init()`.
- */
- public function register_fields() {
- $this->object_type = get_post_types_by_support( 'publicize' );
-
- foreach ( $this->object_type as $post_type ) {
- // Adds meta support for those post types that don't already have it.
- // Only runs during REST API requests, so it doesn't impact UI.
- if ( ! post_type_supports( $post_type, 'custom-fields' ) ) {
- add_post_type_support( $post_type, 'custom-fields' );
- }
-
- add_filter( 'rest_pre_insert_' . $post_type, array( $this, 'rest_pre_insert' ), 10, 2 );
- add_action( 'rest_insert_' . $post_type, array( $this, 'rest_insert' ), 10, 3 );
- }
-
- parent::register_fields();
- }
-
- /**
- * Defines data structure and what elements are visible in which contexts
- */
- public function get_schema() {
- return array(
- '$schema' => 'http://json-schema.org/draft-04/schema#',
- 'title' => 'jetpack-publicize-post-connections',
- 'type' => 'array',
- 'context' => array( 'view', 'edit' ),
- 'items' => $this->post_connection_schema(),
- 'default' => array(),
- );
- }
-
- private function post_connection_schema() {
- return array(
- '$schema' => 'http://json-schema.org/draft-04/schema#',
- 'title' => 'jetpack-publicize-post-connection',
- 'type' => 'object',
- 'properties' => array(
- 'id' => array(
- 'description' => __( 'Unique identifier for the Publicize Connection', 'jetpack' ),
- 'type' => 'string',
- 'context' => array( 'view', 'edit' ),
- 'readonly' => true,
- ),
- 'service_name' => array(
- 'description' => __( 'Alphanumeric identifier for the Publicize Service', 'jetpack' ),
- 'type' => 'string',
- 'context' => array( 'view', 'edit' ),
- 'readonly' => true,
- ),
- 'display_name' => array(
- 'description' => __( 'Username of the connected account', 'jetpack' ),
- 'type' => 'string',
- 'context' => array( 'view', 'edit' ),
- 'readonly' => true,
- ),
- 'enabled' => array(
- 'description' => __( 'Whether to share to this connection', 'jetpack' ),
- 'type' => 'boolean',
- 'context' => array( 'edit' ),
- ),
- 'done' => array(
- 'description' => __( 'Whether Publicize has already finished sharing for this post', 'jetpack' ),
- 'type' => 'boolean',
- 'context' => array( 'edit' ),
- 'readonly' => true,
- ),
- 'toggleable' => array(
- 'description' => __( 'Whether `enable` can be changed for this post/connection', 'jetpack' ),
- 'type' => 'boolean',
- 'context' => array( 'edit' ),
- 'readonly' => true,
- ),
- ),
- );
- }
-
- /**
- * @param int $post_id
- * @return true|WP_Error
- */
- function permission_check( $post_id ) {
- global $publicize;
-
- if ( ! $publicize ) {
- return new WP_Error(
- 'publicize_not_available',
- __( 'Sorry, Publicize is not available on your site right now.', 'jetpack' ),
- array( 'status' => rest_authorization_required_code() )
- );
- }
-
- if ( $publicize->current_user_can_access_publicize_data( $post_id ) ) {
- return true;
- }
-
- return new WP_Error(
- 'invalid_user_permission_publicize',
- __( 'Sorry, you are not allowed to access Publicize data for this post.', 'jetpack' ),
- array( 'status' => rest_authorization_required_code() )
- );
- }
-
- /**
- * Getter permission check
- *
- * @param array $post_array Response data from Post Endpoint
- * @return true|WP_Error
- */
- function get_permission_check( $post_array, $request ) {
- return $this->permission_check( isset( $post_array['id'] ) ? $post_array['id'] : 0 );
-
- }
-
- /**
- * Setter permission check
- *
- * @param WP_Post $post
- * @return true|WP_Error
- */
- public function update_permission_check( $value, $post, $request ) {
- return $this->permission_check( isset( $post->ID ) ? $post->ID : 0 );
- }
-
- /**
- * Getter: Retrieve current list of connected social accounts for a given post.
- *
- * @see Publicize::get_filtered_connection_data()
- *
- * @param array $post_array Response from Post Endpoint
- * @param WP_REST_Request
- *
- * @return array List of connections
- */
- public function get( $post_array, $request ) {
- global $publicize;
-
- if ( ! $publicize ) {
- return array();
- }
-
- $schema = $this->post_connection_schema();
- $properties = array_keys( $schema['properties'] );
-
- $connections = $publicize->get_filtered_connection_data( $post_array['id'] );
-
- $output_connections = array();
- foreach ( $connections as $connection ) {
- $output_connection = array();
- foreach ( $properties as $property ) {
- if ( isset( $connection[ $property ] ) ) {
- $output_connection[ $property ] = $connection[ $property ];
- }
- }
-
- $output_connection['id'] = (string) $connection['unique_id'];
-
- $output_connections[] = $output_connection;
- }
-
- return $output_connections;
- }
-
- /**
- * Prior to updating the post, first calculate which Services to
- * Publicize to and which to skip.
- *
- * @param object $post Post data to insert/update.
- * @param WP_REST_Request $request
- * @return Filtered $post
- */
- public function rest_pre_insert( $post, $request ) {
- if ( ! isset( $request['jetpack_publicize_connections'] ) ) {
- return $post;
- }
-
- $permission_check = $this->update_permission_check( $request['jetpack_publicize_connections'], $post, $request );
-
- if ( is_wp_error( $permission_check ) ) {
- return $permission_check;
- }
-
- // memoize
- $this->get_meta_to_update( $request['jetpack_publicize_connections'], isset( $post->ID ) ? $post->ID : 0 );
-
- return $post;
- }
-
- /**
- * After creating a new post, update our cached data to reflect
- * the new post ID.
- *
- * @param WP_Post $post
- * @param WP_REST_Request $request
- * @param bool $is_new
- */
- public function rest_insert( $post, $request, $is_new ) {
- if ( ! $is_new ) {
- // An existing post was edited - no need to update
- // our cache - we started out knowing the correct
- // post ID.
- return;
- }
-
- if ( ! isset( $request['jetpack_publicize_connections'] ) ) {
- return;
- }
-
- if ( ! isset( $this->memoized_updates[0] ) ) {
- return;
- }
-
- $this->memoized_updates[ $post->ID ] = $this->memoized_updates[0];
- unset( $this->memoized_updates[0] );
- }
-
- protected function get_meta_to_update( $requested_connections, $post_id = 0 ) {
- global $publicize;
-
- if ( ! $publicize ) {
- return array();
- }
-
- if ( isset( $this->memoized_updates[$post_id] ) ) {
- return $this->memoized_updates[$post_id];
- }
-
- $available_connections = $publicize->get_filtered_connection_data( $post_id );
-
- $changed_connections = array();
-
- // Build lookup mappings
- $available_connections_by_unique_id = array();
- $available_connections_by_service_name = array();
- foreach ( $available_connections as $available_connection ) {
- $available_connections_by_unique_id[ $available_connection['unique_id'] ] = $available_connection;
-
- if ( ! isset( $available_connections_by_service_name[ $available_connection['service_name'] ] ) ) {
- $available_connections_by_service_name[ $available_connection['service_name'] ] = array();
- }
- $available_connections_by_service_name[ $available_connection['service_name'] ][] = $available_connection;
- }
-
- // Handle { service_name: $service_name, enabled: (bool) }
- foreach ( $requested_connections as $requested_connection ) {
- if ( ! isset( $requested_connection['service_name'] ) ) {
- continue;
- }
-
- if ( ! isset( $available_connections_by_service_name[ $requested_connection['service_name'] ] ) ) {
- continue;
- }
-
- foreach ( $available_connections_by_service_name[ $requested_connection['service_name'] ] as $available_connection ) {
- $changed_connections[ $available_connection['unique_id'] ] = $requested_connection['enabled'];
- }
- }
-
- // Handle { id: $id, enabled: (bool) }
- // These override the service_name settings
- foreach ( $requested_connections as $requested_connection ) {
- if ( ! isset( $requested_connection['id'] ) ) {
- continue;
- }
-
- if ( ! isset( $available_connections_by_unique_id[ $requested_connection['id'] ] ) ) {
- continue;
- }
-
- $changed_connections[ $requested_connection['id'] ] = $requested_connection['enabled'];
- }
-
- // Set all changed connections to their new value
- foreach ( $changed_connections as $unique_id => $enabled ) {
- $connection = $available_connections_by_unique_id[ $unique_id ];
-
- if ( $connection['done'] || ! $connection['toggleable'] ) {
- continue;
- }
-
- $available_connections_by_unique_id[ $unique_id ]['enabled'] = $enabled;
- }
-
- $meta_to_update = array();
- // For all connections, ensure correct post_meta
- foreach ( $available_connections_by_unique_id as $unique_id => $available_connection ) {
- if ( $available_connection['enabled'] ) {
- $meta_to_update[$publicize->POST_SKIP . $unique_id] = null;
- } else {
- $meta_to_update[$publicize->POST_SKIP . $unique_id] = 1;
- }
- }
-
- $this->memoized_updates[$post_id] = $meta_to_update;
-
- return $meta_to_update;
- }
-
- /**
- * Update the connections slated to be shared to.
- *
- * @param array $requested_connections
- * Items are either `{ id: (string) }` or `{ service_name: (string) }`
- * @param WP_Post $post
- * @param WP_REST_Request
- */
- public function update( $requested_connections, $post, $request ) {
- foreach ( $this->get_meta_to_update( $requested_connections, $post->ID ) as $meta_key => $meta_value ) {
- if ( is_null( $meta_value ) ) {
- delete_post_meta( $post->ID, $meta_key );
- } else {
- update_post_meta( $post->ID, $meta_key, $meta_value );
- }
- }
- }
-}
-
-if ( Jetpack::is_module_active( 'publicize' ) ) {
- wpcom_rest_api_v2_load_plugin( 'WPCOM_REST_API_V2_Post_Publicize_Connections_Field' );
-}
diff --git a/plugins/jetpack/_inc/lib/debugger/0-load.php b/plugins/jetpack/_inc/lib/debugger/0-load.php
deleted file mode 100644
index b097dc50..00000000
--- a/plugins/jetpack/_inc/lib/debugger/0-load.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-/**
- * Loading the various functions used for Jetpack Debugging.
- *
- * @package Jetpack.
- */
-
-/* Jetpack Connection Testing Framework */
-require_once 'class-jetpack-cxn-test-base.php';
-/* Jetpack Connection Tests */
-require_once 'class-jetpack-cxn-tests.php';
-/* The "In-Plugin Debugger" admin page. */
-require_once 'class-jetpack-debugger.php';
diff --git a/plugins/jetpack/_inc/lib/debugger/class-jetpack-cxn-test-base.php b/plugins/jetpack/_inc/lib/debugger/class-jetpack-cxn-test-base.php
deleted file mode 100644
index 0cc861db..00000000
--- a/plugins/jetpack/_inc/lib/debugger/class-jetpack-cxn-test-base.php
+++ /dev/null
@@ -1,302 +0,0 @@
-<?php
-/**
- * Jetpack Connection Testing
- *
- * Framework for various "unit tests" against the Jetpack connection.
- *
- * Individual tests should be added to the class-jetpack-cxn-tests.php file.
- *
- * @author Brandon Kraft
- * @package Jetpack
- */
-
-/**
- * "Unit Tests" for the Jetpack connection.
- */
-class Jetpack_Cxn_Test_Base {
-
- /**
- * Tests to run on the Jetpack connection.
- *
- * @var array $tests
- */
- protected $tests = array();
-
- /**
- * Results of the Jetpack connection tests.
- *
- * @var array $results
- */
- protected $results = array();
-
- /**
- * Status of the testing suite.
- *
- * Used internally to determine if a test should be skipped since the tests are already failing. Assume passing.
- *
- * @var bool $pass
- */
- protected $pass = true;
-
- /**
- * Jetpack_Cxn_Test constructor.
- */
- public function __construct() {
- $this->tests = array();
- $this->results = array();
- }
-
- /**
- * Adds a new test to the Jetpack Connection Testing suite.
- *
- * @param callable $callable Test to add to queue.
- * @param array $groups Testing groups to add test to.
- *
- * @return bool True if successfully added. False for a failure.
- */
- public function add_test( $callable, $groups = array( 'default' ) ) {
- if ( is_callable( $callable ) ) {
- $this->tests[] = array(
- 'test' => $callable,
- 'group' => $groups,
- );
- return true;
- }
-
- return false;
- }
-
- /**
- * Runs the Jetpack connection suite.
- */
- public function run_tests() {
- foreach ( $this->tests as $test ) {
- $result = call_user_func( $test['test'] );
- $result['group'] = $test['group'];
- $this->results[] = $result;
- if ( false === $result['pass'] ) {
- $this->pass = false;
- }
- }
- }
-
- /**
- * Returns the full results array.
- *
- * @param string $group Testing group whose results we want. Defaults to "default" group. Use "all" for all tests.
- * @return array Array of test results.
- */
- public function raw_results( $group = 'default' ) {
- if ( ! $this->results ) {
- $this->run_tests();
- }
-
- $results = $this->results;
-
- if ( 'all' === $group ) {
- return $results;
- }
-
- foreach ( $results as $test => $result ) {
- if ( ! in_array( $group, $result['group'], true ) ) {
- unset( $results[ $test ] );
- }
- }
-
- return $results;
- }
-
- /**
- * Returns the status of the connection suite.
- *
- * @param string $group Testing group to check status of. Optional, default all tests.
- *
- * @return true|array True if all tests pass. Array of failed tests.
- */
- public function pass( $group = 'default' ) {
- $results = $this->raw_results( $group );
-
- foreach ( $results as $result ) {
- // 'pass' could be true, false, or 'skipped'. We only want false.
- if ( isset( $result['pass'] ) && false === $result['pass'] ) {
- return false;
- }
- }
-
- return true;
-
- }
-
- /**
- * Return array of failed test messages.
- *
- * @param string $group Testing group whose failures we want. Defaults to "default". Use "all" for all tests.
- *
- * @return false|array False if no failed tests. Otherwise, array of failed tests.
- */
- public function list_fails( $group = 'default' ) {
- $results = $this->raw_results( $group );
-
- foreach ( $results as $test => $result ) {
- // We do not want tests that passed or ones that are misconfigured (no pass status or no failure message).
- if ( ! isset( $result['pass'] ) || false !== $result['pass'] || ! isset( $result['message'] ) ) {
- unset( $results[ $test ] );
- }
- }
-
- return $results;
- }
-
- /**
- * Helper function to return consistent responses for a passing test.
- *
- * @param string $name Test name.
- *
- * @return array Test results.
- */
- public static function passing_test( $name = 'Unnamed' ) {
- return array(
- 'name' => $name,
- 'pass' => true,
- 'message' => __( 'Test Passed!', 'jetpack' ),
- 'resolution' => false,
- );
- }
-
- /**
- * Helper function to return consistent responses for a skipped test.
- *
- * @param string $name Test name.
- * @param string $message Reason for skipping the test. Optional.
- *
- * @return array Test results.
- */
- public static function skipped_test( $name = 'Unnamed', $message = false ) {
- return array(
- 'name' => $name,
- 'pass' => 'skipped',
- 'message' => $message,
- 'resolution' => false,
- );
- }
-
- /**
- * Helper function to return consistent responses for a failing test.
- *
- * @param string $name Test name.
- * @param string $message Message detailing the failure.
- * @param string $resolution Steps to resolve.
- *
- * @return array Test results.
- */
- public static function failing_test( $name, $message, $resolution = false ) {
- // Provide standard resolutions steps, but allow pass-through of non-standard ones.
- switch ( $resolution ) {
- case 'cycle_connection':
- $resolution = __( 'Please disconnect and reconnect Jetpack.', 'jetpack' ); // @todo: Link.
- break;
- case 'outbound_requests':
- $resolution = __( 'Please ask your hosting provider to confirm your server can make outbound requests to jetpack.com.', 'jetpack' );
- break;
- case 'support':
- $resolution = __( 'Please contact support.', 'jetpack' ); // @todo: Link to support.
- break;
- }
-
- return array(
- 'name' => $name,
- 'pass' => false,
- 'message' => $message,
- 'resolution' => $resolution,
- );
- }
-
- /**
- * Provide WP_CLI friendly testing results.
- *
- * @param string $group Testing group whose results we are outputting. Default "default". Use "all" for all tests.
- */
- public function output_results_for_cli( $group = 'default' ) {
- if ( defined( 'WP_CLI' ) && WP_CLI ) {
- if ( Jetpack::is_development_mode() ) {
- WP_CLI::line( __( 'Jetpack is in Development Mode:', 'jetpack' ) );
- WP_CLI::line( Jetpack::development_mode_trigger_text() );
- }
- WP_CLI::line( __( 'TEST RESULTS:', 'jetpack' ) );
- foreach ( $this->raw_results( $group ) as $test ) {
- if ( true === $test['pass'] ) {
- WP_CLI::log( WP_CLI::colorize( '%gPassed:%n ' . $test['name'] ) );
- } elseif ( 'skipped' === $test['pass'] ) {
- WP_CLI::log( WP_CLI::colorize( '%ySkipped:%n ' . $test['name'] ) );
- if ( $test['message'] ) {
- WP_CLI::log( ' ' . $test['message'] ); // Number of spaces to "tab indent" the reason.
- }
- } else { // Failed.
- WP_CLI::log( WP_CLI::colorize( '%rFailed:%n ' . $test['name'] ) );
- WP_CLI::log( ' ' . $test['message'] ); // Number of spaces to "tab indent" the reason.
- }
- }
- }
- }
-
- /**
- * Provide single WP Error instance of all failures.
- *
- * @param string $group Testing group whose failures we want converted. Default "default". Use "all" for all tests.
- *
- * @return WP_Error|false WP_Error with all failed tests or false if there were no failures.
- */
- public function output_fails_as_wp_error( $group = 'default' ) {
- if ( $this->pass( $group ) ) {
- return false;
- }
- $fails = $this->list_fails( $group );
- $error = false;
-
- foreach ( $fails as $result ) {
- $code = 'failed_' . $result['name'];
- $message = $result['message'];
- $data = array(
- 'resolution' => $result['resolution'],
- );
- if ( ! $error ) {
- $error = new WP_Error( $code, $message, $data );
- } else {
- $error->add( $code, $message, $data );
- }
- }
-
- return $error;
- }
-
- /**
- * Encrypt data for sending to WordPress.com.
- *
- * @todo When PHP minimum is 5.3+, add cipher detection to use an agreed better cipher than RC4. RC4 should be the last resort.
- *
- * @param string $data Data to encrypt with the WP.com Public Key.
- *
- * @return false|array False if functionality not available. Array of encrypted data, encryption key.
- */
- public function encrypt_string_for_wpcom( $data ) {
- $return = false;
- if ( ! function_exists( 'openssl_get_publickey' ) || ! function_exists( 'openssl_seal' ) ) {
- return $return;
- }
-
- $public_key = openssl_get_publickey( JETPACK__DEBUGGER_PUBLIC_KEY );
-
- if ( $public_key && openssl_seal( $data, $encrypted_data, $env_key, array( $public_key ) ) ) {
- // We are returning base64-encoded values to ensure they're characters we can use in JSON responses without issue.
- $return = array(
- 'data' => base64_encode( $encrypted_data ), // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode
- 'key' => base64_encode( $env_key[0] ), // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode
- 'cipher' => 'RC4', // When Jetpack's minimum WP version is at PHP 5.3+, we will add in detecting and using a stronger one.
- );
- }
-
- openssl_free_key( $public_key );
-
- return $return;
- }
-}
diff --git a/plugins/jetpack/_inc/lib/debugger/class-jetpack-cxn-tests.php b/plugins/jetpack/_inc/lib/debugger/class-jetpack-cxn-tests.php
deleted file mode 100644
index 6d4f00e6..00000000
--- a/plugins/jetpack/_inc/lib/debugger/class-jetpack-cxn-tests.php
+++ /dev/null
@@ -1,338 +0,0 @@
-<?php
-/**
- * Collection of tests to run on the Jetpack connection locally.
- *
- * @package Jetpack
- */
-
-/**
- * Class Jetpack_Cxn_Tests contains all of the actual tests.
- */
-class Jetpack_Cxn_Tests extends Jetpack_Cxn_Test_Base {
-
- /**
- * Jetpack_Cxn_Tests constructor.
- */
- public function __construct() {
- parent::__construct();
-
- $methods = get_class_methods( 'Jetpack_Cxn_Tests' );
-
- foreach ( $methods as $method ) {
- if ( false === strpos( $method, 'test__' ) ) {
- continue;
- }
- $this->add_test( array( $this, $method ) );
- }
-
- /**
- * Fires after loading default Jetpack Connection tests.
- *
- * @since 7.1.0
- */
- do_action( 'jetpack_connection_tests_loaded' );
-
- /**
- * Determines if the WP.com testing suite should be included.
- *
- * @since 7.1.0
- *
- * @param bool $run_test To run the WP.com testing suite. Default true.
- */
- if ( apply_filters( 'jetpack_debugger_run_self_test', true ) ) {
- /**
- * Intentionally added last as it checks for an existing failure state before attempting.
- * Generally, any failed location condition would result in the WP.com check to fail too, so
- * we will skip it to avoid confusing error messages.
- */
- $this->add_test( array( $this, 'last__wpcom_self_test' ) );
- }
- }
-
- /**
- * Helper function to look up the expected master user and return the local WP_User.
- *
- * @return WP_User Jetpack's expected master user.
- */
- protected function helper_retrieve_local_master_user() {
- $master_user = Jetpack_Options::get_option( 'master_user' );
- return new WP_User( $master_user );
- }
-
- /**
- * Is Jetpack even connected and supposed to be talking to WP.com?
- */
- protected function helper_is_jetpack_connected() {
- return ( Jetpack::is_active() && ! Jetpack::is_development_mode() );
- }
-
- /**
- * Test if Jetpack is connected.
- */
- protected function test__check_if_connected() {
- $name = __FUNCTION__;
- if ( $this->helper_is_jetpack_connected() ) {
- $result = self::passing_test( $name );
- } elseif ( Jetpack::is_development_mode() ) {
- $result = self::skipped_test( $name, __( 'Jetpack is in Development Mode:', 'jetpack' ) . ' ' . Jetpack::development_mode_trigger_text(), __( 'Disable development mode.', 'jetpack' ) );
- } else {
- $result = self::failing_test( $name, __( 'Jetpack is not connected.', 'jetpack' ), 'cycle_connection' );
- }
-
- return $result;
- }
-
- /**
- * Test that the master user still exists on this site.
- *
- * @return array Test results.
- */
- protected function test__master_user_exists_on_site() {
- $name = __FUNCTION__;
- if ( ! $this->helper_is_jetpack_connected() ) {
- return self::skipped_test( $name, __( 'Jetpack is not connected. No master user to check.', 'jetpack' ) ); // Skip test.
- }
- $local_user = $this->helper_retrieve_local_master_user();
-
- if ( $local_user->exists() ) {
- $result = self::passing_test( $name );
- } else {
- $result = self::failing_test( $name, __( 'The user who setup the Jetpack connection no longer exists on this site.', 'jetpack' ), 'cycle_connection' );
- }
-
- return $result;
- }
-
- /**
- * Test that the master user has the manage options capability (e.g. is an admin).
- *
- * Generic calls from WP.com execute on Jetpack as the master user. If it isn't an admin, random things will fail.
- *
- * @return array Test results.
- */
- protected function test__master_user_can_manage_options() {
- $name = __FUNCTION__;
- if ( ! $this->helper_is_jetpack_connected() ) {
- return self::skipped_test( $name, __( 'Jetpack is not connected.', 'jetpack' ) ); // Skip test.
- }
- $master_user = $this->helper_retrieve_local_master_user();
-
- if ( user_can( $master_user, 'manage_options' ) ) {
- $result = self::passing_test( $name );
- } else {
- /* translators: a WordPress username */
- $result = self::failing_test( $name, sprintf( __( 'The user (%s) who setup the Jetpack connection is not an administrator.', 'jetpack' ), $master_user->user_login ), __( 'Either upgrade the user or disconnect and reconnect Jetpack.', 'jetpack' ) ); // @todo: Link to the right places.
- }
-
- return $result;
- }
-
- /**
- * Test that the PHP's XML library is installed.
- *
- * While it should be installed by default, increasingly in PHP 7, some OSes require an additional php-xml package.
- *
- * @return array Test results.
- */
- protected function test__xml_parser_available() {
- $name = __FUNCTION__;
- if ( function_exists( 'xml_parser_create' ) ) {
- $result = self::passing_test( $name );
- } else {
- $result = self::failing_test( $name, __( 'PHP XML manipluation libraries are not available.', 'jetpack' ), __( "Please ask your hosting provider to refer to our server requirements at https://jetpack.com/support/server-requirements/ and enable PHP's XML module.", 'jetpack' ) );
- }
-
- return $result;
- }
-
- /**
- * Test that the server is able to send an outbound http communication.
- *
- * @return array Test results.
- */
- protected function test__outbound_http() {
- $name = __FUNCTION__;
- $request = wp_remote_get( preg_replace( '/^https:/', 'http:', JETPACK__API_BASE ) . 'test/1/' );
- $code = wp_remote_retrieve_response_code( $request );
-
- if ( 200 === intval( $code ) ) {
- $result = self::passing_test( $name );
- } else {
- $result = self::failing_test( $name, __( 'Your server did not successfully connect to the Jetpack server using HTTP', 'jetpack' ), 'outbound_requests' );
- }
-
- return $result;
- }
-
- /**
- * Test that the server is able to send an outbound https communication.
- *
- * @return array Test results.
- */
- protected function test__outbound_https() {
- $name = __FUNCTION__;
- $request = wp_remote_get( preg_replace( '/^http:/', 'https:', JETPACK__API_BASE ) . 'test/1/' );
- $code = wp_remote_retrieve_response_code( $request );
-
- if ( 200 === intval( $code ) ) {
- $result = self::passing_test( $name );
- } else {
- $result = self::failing_test( $name, __( 'Your server did not successfully connect to the Jetpack server using HTTPS', 'jetpack' ), 'outbound_requests' );
- }
-
- return $result;
- }
-
- /**
- * Check for an IDC.
- *
- * @return array Test results.
- */
- protected function test__identity_crisis() {
- $name = __FUNCTION__;
- if ( ! $this->helper_is_jetpack_connected() ) {
- return self::skipped_test( $name, __( 'Jetpack is not connected.', 'jetpack' ) ); // Skip test.
- }
- $identity_crisis = Jetpack::check_identity_crisis();
-
- if ( ! $identity_crisis ) {
- $result = self::passing_test( $name );
- } else {
- $message = sprintf(
- /* translators: Two URLs. The first is the locally-recorded value, the second is the value as recorded on WP.com. */
- __( 'Your url is set as `%1$s`, but your WordPress.com connection lists it as `%2$s`!', 'jetpack' ),
- $identity_crisis['home'],
- $identity_crisis['wpcom_home']
- );
- $result = self::failing_test( $name, $message, 'support' );
- }
- return $result;
- }
-
- /**
- * Tests connection status against wp.com's test-connection endpoint
- *
- * @todo: Compare with the wpcom_self_test. We only need one of these.
- *
- * @return array Test results.
- */
- protected function test__wpcom_connection_test() {
- $name = __FUNCTION__;
-
- if ( ! Jetpack::is_active() || Jetpack::is_development_mode() || Jetpack::is_staging_site() || ! $this->pass ) {
- return self::skipped_test( $name );
- }
-
- $response = Jetpack_Client::wpcom_json_api_request_as_blog(
- sprintf( '/jetpack-blogs/%d/test-connection', Jetpack_Options::get_option( 'id' ) ),
- Jetpack_Client::WPCOM_JSON_API_VERSION
- );
-
- if ( is_wp_error( $response ) ) {
- /* translators: %1$s is the error code, %2$s is the error message */
- $message = sprintf( __( 'Connection test failed (#%1$s: %2$s)', 'jetpack' ), $response->get_error_code(), $response->get_error_message() );
- return self::failing_test( $name, $message );
- }
-
- $body = wp_remote_retrieve_body( $response );
- if ( ! $body ) {
- $message = __( 'Connection test failed (empty response body)', 'jetpack' ) . wp_remote_retrieve_response_code( $response );
- return self::failing_test( $name, $message );
- }
-
- $result = json_decode( $body );
- $is_connected = (bool) $result->connected;
- $message = $result->message . wp_remote_retrieve_response_code( $response );
-
- if ( $is_connected ) {
- return self::passing_test( $name );
- } else {
- return self::failing_test( $name, $message );
- }
- }
-
- /**
- * Tests the port number to ensure it is an expected value.
- *
- * We expect that sites on be on one of:
- * port 80,
- * port 443 (https sites only),
- * the value of JETPACK_SIGNATURE__HTTP_PORT,
- * unless the site is intentionally on a different port (e.g. example.com:8080 is the site's URL).
- *
- * If the value isn't one of those and the site's URL doesn't include a port, then the signature verification will fail.
- *
- * This happens most commonly on sites with reverse proxies, so the edge (e.g. Varnish) is running on 80/443, but nginx
- * or Apache is responding internally on a different port (e.g. 81).
- *
- * @return array Test results
- */
- protected function test__server_port_value() {
- $name = __FUNCTION__;
- if ( ! isset( $_SERVER['HTTP_X_FORWARDED_PORT'] ) && ! isset( $_SERVER['SERVER_PORT'] ) ) {
- $message = 'The server port values are not defined. This is most common when running PHP via a CLI.';
- return self::skipped_test( $name, $message );
- }
- $site_port = wp_parse_url( home_url(), PHP_URL_PORT );
- $server_port = isset( $_SERVER['HTTP_X_FORWARDED_PORT'] ) ? (int) $_SERVER['HTTP_X_FORWARDED_PORT'] : (int) $_SERVER['SERVER_PORT'];
- $http_ports = array( 80 );
- $https_ports = array( 80, 443 );
-
- if ( defined( 'JETPACK_SIGNATURE__HTTP_PORT' ) ) {
- $http_ports[] = JETPACK_SIGNATURE__HTTP_PORT;
- }
-
- if ( defined( 'JETPACK_SIGNATURE__HTTPS_PORT' ) ) {
- $https_ports[] = JETPACK_SIGNATURE__HTTPS_PORT;
- }
-
- if ( $site_port ) {
- return self::skipped_test( $name ); // Not currently testing for this situation.
- }
-
- if ( is_ssl() && in_array( $server_port, $https_ports, true ) ) {
- return self::passing_test( $name );
- } elseif ( in_array( $server_port, $http_ports, true ) ) {
- return self::passing_test( $name );
- } else {
- if ( is_ssl() ) {
- $needed_constant = 'JETPACK_SIGNATURE__HTTPS_PORT';
- } else {
- $needed_constant = 'JETPACK_SIGNATURE__HTTP_PORT';
- }
- $message = __( 'The server port value is unexpected.', 'jetpack' );
- $resolution = __( 'Try adding the following to your wp-config.php file:', 'jetpack' ) . " define( '$needed_constant', $server_port );";
- return self::failing_test( $name, $message, $resolution );
- }
- }
-
- /**
- * Calls to WP.com to run the connection diagnostic testing suite.
- *
- * Intentionally added last as it will be skipped if any local failed conditions exist.
- *
- * @return array Test results.
- */
- protected function last__wpcom_self_test() {
- $name = 'test__wpcom_self_test';
- if ( ! Jetpack::is_active() || Jetpack::is_development_mode() || Jetpack::is_staging_site() || ! $this->pass ) {
- return self::skipped_test( $name );
- }
-
- $self_xml_rpc_url = site_url( 'xmlrpc.php' );
-
- $testsite_url = Jetpack::fix_url_for_bad_hosts( JETPACK__API_BASE . 'testsite/1/?url=' );
-
- add_filter( 'http_request_timeout', array( 'Jetpack_Debugger', 'jetpack_increase_timeout' ) );
-
- $response = wp_remote_get( $testsite_url . $self_xml_rpc_url );
-
- remove_filter( 'http_request_timeout', array( 'Jetpack_Debugger', 'jetpack_increase_timeout' ) );
-
- if ( 200 === wp_remote_retrieve_response_code( $response ) ) {
- return self::passing_test( $name );
- } else {
- return self::failing_test( $name, __( 'Jetpack.com detected an error.', 'jetpack' ), __( 'Visit the Jetpack.com debugging page for more information or contact support.', 'jetpack' ) ); // @todo direct links.
- }
- }
-}
diff --git a/plugins/jetpack/_inc/lib/debugger/class-jetpack-debugger.php b/plugins/jetpack/_inc/lib/debugger/class-jetpack-debugger.php
deleted file mode 100644
index 599ccfda..00000000
--- a/plugins/jetpack/_inc/lib/debugger/class-jetpack-debugger.php
+++ /dev/null
@@ -1,530 +0,0 @@
-<?php
-/**
- * Jetpack Debugger functionality allowing for self-service diagnostic information.
- *
- * @package jetpack
- */
-
-/**
- * Class Jetpack_Debugger
- *
- * A namespacing class for functionality related to the in-plugin diagnostic tooling.
- */
-class Jetpack_Debugger {
-
- /**
- * Determine the active plan and normalize it for the debugger results.
- *
- * @return string The plan slug prepended with "JetpackPlan"
- */
- private static function what_jetpack_plan() {
- $plan = Jetpack_Plan::get();
- $plan = ! empty( $plan['class'] ) ? $plan['class'] : 'undefined';
- return 'JetpackPlan' . $plan;
- }
-
- /**
- * Convert seconds to human readable time.
- *
- * A dedication function instead of using Core functionality to allow for output in seconds.
- *
- * @param int $seconds Number of seconds to convert to human time.
- *
- * @return string Human readable time.
- */
- public static function seconds_to_time( $seconds ) {
- $seconds = intval( $seconds );
- $units = array(
- 'week' => WEEK_IN_SECONDS,
- 'day' => DAY_IN_SECONDS,
- 'hour' => HOUR_IN_SECONDS,
- 'minute' => MINUTE_IN_SECONDS,
- 'second' => 1,
- );
- // specifically handle zero.
- if ( 0 === $seconds ) {
- return '0 seconds';
- }
- $human_readable = '';
- foreach ( $units as $name => $divisor ) {
- $quot = intval( $seconds / $divisor );
- if ( $quot ) {
- $human_readable .= "$quot $name";
- $human_readable .= ( abs( $quot ) > 1 ? 's' : '' ) . ', ';
- $seconds -= $quot * $divisor;
- }
- }
- return substr( $human_readable, 0, -2 );
- }
-
- /**
- * Returns 30 for use with a filter.
- *
- * To allow time for WP.com to run upstream testing, this function exists to increase the http_request_timeout value
- * to 30.
- *
- * @return int 30
- */
- public static function jetpack_increase_timeout() {
- return 30; // seconds.
- }
-
- /**
- * Disconnect Jetpack and redirect user to connection flow.
- */
- public static function disconnect_and_redirect() {
- if ( ! ( isset( $_GET['nonce'] ) && wp_verify_nonce( $_GET['nonce'], 'jp_disconnect' ) ) ) {
- return;
- }
-
- if ( isset( $_GET['disconnect'] ) && $_GET['disconnect'] ) {
- if ( Jetpack::is_active() ) {
- Jetpack::disconnect();
- wp_safe_redirect( Jetpack::admin_url() );
- exit;
- }
- }
- }
-
- /**
- * Handles output to the browser for the in-plugin debugger.
- */
- public static function jetpack_debug_display_handler() {
- if ( ! current_user_can( 'manage_options' ) ) {
- wp_die( esc_html__( 'You do not have sufficient permissions to access this page.', 'jetpack' ) );
- }
-
- $user_id = get_current_user_id();
- $user_tokens = Jetpack_Options::get_option( 'user_tokens' );
- if ( is_array( $user_tokens ) && array_key_exists( $user_id, $user_tokens ) ) {
- $user_token = $user_tokens[ $user_id ];
- } else {
- $user_token = '[this user has no token]';
- }
- unset( $user_tokens );
-
- $debug_info = "\r\n";
- foreach ( array(
- 'CLIENT_ID' => 'id',
- 'BLOG_TOKEN' => 'blog_token',
- 'MASTER_USER' => 'master_user',
- 'CERT' => 'fallback_no_verify_ssl_certs',
- 'TIME_DIFF' => 'time_diff',
- 'VERSION' => 'version',
- 'OLD_VERSION' => 'old_version',
- 'PUBLIC' => 'public',
- ) as $label => $option_name ) {
- $debug_info .= "\r\n" . esc_html( $label . ': ' . Jetpack_Options::get_option( $option_name ) );
- }
-
- $debug_info .= "\r\n" . esc_html( 'USER_ID: ' . $user_id );
- $debug_info .= "\r\n" . esc_html( 'USER_TOKEN: ' . $user_token );
- $debug_info .= "\r\n" . esc_html( 'PHP_VERSION: ' . PHP_VERSION );
- $debug_info .= "\r\n" . esc_html( 'WORDPRESS_VERSION: ' . $GLOBALS['wp_version'] );
- $debug_info .= "\r\n" . esc_html( 'JETPACK__VERSION: ' . JETPACK__VERSION );
- $debug_info .= "\r\n" . esc_html( 'JETPACK__PLUGIN_DIR: ' . JETPACK__PLUGIN_DIR );
- $debug_info .= "\r\n" . esc_html( 'SITE_URL: ' . site_url() );
- $debug_info .= "\r\n" . esc_html( 'HOME_URL: ' . home_url() );
- $debug_info .= "\r\n" . esc_html( 'PLAN: ' . self::what_jetpack_plan() );
-
- $debug_info .= "\r\n";
-
- $debug_info .= "\r\n" . '-- SYNC Status -- ';
- require_once JETPACK__PLUGIN_DIR . 'sync/class.jetpack-sync-modules.php';
- $sync_module = Jetpack_Sync_Modules::get_module( 'full-sync' );
- if ( $sync_module ) {
- $sync_statuses = $sync_module->get_status();
- $human_readable_sync_status = array();
- foreach ( $sync_statuses as $sync_status => $sync_status_value ) {
- $human_readable_sync_status[ $sync_status ] =
- in_array( $sync_status, array( 'started', 'queue_finished', 'send_started', 'finished' ), true )
- ? date( 'r', $sync_status_value ) : $sync_status_value;
- }
- /* translators: A string reporting status. Example: "started" */
- $debug_info .= "\r\n" . sprintf( esc_html__( 'Jetpack Sync Full Status: `%1$s`', 'jetpack' ), print_r( $human_readable_sync_status, 1 ) ); //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_print_r
- }
-
- require_once JETPACK__PLUGIN_DIR . 'sync/class.jetpack-sync-sender.php';
-
- $queue = Jetpack_Sync_Sender::get_instance()->get_sync_queue();
-
- /* translators: The number of items waiting to be synced. */
- $debug_info .= "\r\n" . sprintf( esc_html__( 'Sync Queue size: %1$s', 'jetpack' ), $queue->size() );
- /* translators: Human-readable time since the oldest item in the sync queue. */
- $debug_info .= "\r\n" . sprintf( esc_html__( 'Sync Queue lag: %1$s', 'jetpack' ), self::seconds_to_time( $queue->lag() ) );
-
- $full_sync_queue = Jetpack_Sync_Sender::get_instance()->get_full_sync_queue();
-
- /* translators: The number of items waiting to be synced. */
- $debug_info .= "\r\n" . sprintf( esc_html__( 'Full Sync Queue size: %1$s', 'jetpack' ), $full_sync_queue->size() );
- /* translators: Human-readable time since the oldest item in the sync queue. */
- $debug_info .= "\r\n" . sprintf( esc_html__( 'Full Sync Queue lag: %1$s', 'jetpack' ), self::seconds_to_time( $full_sync_queue->lag() ) );
-
- require_once JETPACK__PLUGIN_DIR . 'sync/class.jetpack-sync-functions.php';
- $idc_urls = array(
- 'home' => Jetpack_Sync_Functions::home_url(),
- 'siteurl' => Jetpack_Sync_Functions::site_url(),
- 'WP_HOME' => Jetpack_Constants::is_defined( 'WP_HOME' ) ? Jetpack_Constants::get_constant( 'WP_HOME' ) : '',
- 'WP_SITEURL' => Jetpack_Constants::is_defined( 'WP_SITEURL' ) ? Jetpack_Constants::get_constant( 'WP_SITEURL' ) : '',
- );
- /* translators: List of URLs. */
- $debug_info .= "\r\n" . esc_html( sprintf( 'Sync IDC URLs: %s', wp_json_encode( $idc_urls ) ) );
- /* translators: String of a current option. */
- $debug_info .= "\r\n" . esc_html( sprintf( 'Sync error IDC option: %s', wp_json_encode( Jetpack_Options::get_option( 'sync_error_idc' ) ) ) );
- /* translators: String of a current option. */
- $debug_info .= "\r\n" . esc_html( sprintf( 'Sync IDC Optin: %s', (string) Jetpack::sync_idc_optin() ) );
-
- $debug_info .= "\r\n";
-
- foreach ( array(
- 'HTTP_HOST',
- 'SERVER_PORT',
- 'HTTPS',
- 'GD_PHP_HANDLER',
- 'HTTP_AKAMAI_ORIGIN_HOP',
- 'HTTP_CF_CONNECTING_IP',
- 'HTTP_CLIENT_IP',
- 'HTTP_FASTLY_CLIENT_IP',
- 'HTTP_FORWARDED',
- 'HTTP_FORWARDED_FOR',
- 'HTTP_INCAP_CLIENT_IP',
- 'HTTP_TRUE_CLIENT_IP',
- 'HTTP_X_CLIENTIP',
- 'HTTP_X_CLUSTER_CLIENT_IP',
- 'HTTP_X_FORWARDED',
- 'HTTP_X_FORWARDED_FOR',
- 'HTTP_X_IP_TRAIL',
- 'HTTP_X_REAL_IP',
- 'HTTP_X_VARNISH',
- 'REMOTE_ADDR',
- ) as $header ) {
- if ( isset( $_SERVER[ $header ] ) ) {
- $debug_info .= "\r\n" . esc_html( $header . ': ' . $_SERVER[ $header ] );
- }
- }
-
- $debug_info .= "\r\n" . esc_html( 'PROTECT_TRUSTED_HEADER: ' . wp_json_encode( get_site_option( 'trusted_ip_header' ) ) );
-
- $debug_info .= "\r\n\r\nTEST RESULTS:\r\n\r\n";
-
- $cxntests = new Jetpack_Cxn_Tests();
- ?>
- <div class="wrap">
- <h2><?php esc_html_e( 'Debugging Center', 'jetpack' ); ?></h2>
- <h3><?php esc_html_e( "Testing your site's compatibility with Jetpack...", 'jetpack' ); ?></h3>
- <div class="jetpack-debug-test-container">
- <?php
- if ( $cxntests->pass() ) {
- echo '<div class="jetpack-tests-succeed">' . esc_html__( 'Your Jetpack setup looks a-okay!', 'jetpack' ) . '</div>';
- $debug_info .= "All tests passed.\r\n";
- $debug_info .= print_r( $cxntests->raw_results(), true ); //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_print_r
- } else {
- $failures = $cxntests->list_fails();
- foreach ( $failures as $fail ) {
- echo '<div class="jetpack-test-error">';
- echo '<p><a class="jetpack-test-heading" href="#">' . esc_html( $fail['message'] );
- echo '<span class="noticon noticon-collapse"></span></a></p>';
- echo '<p class="jetpack-test-details">' . esc_html( $fail['resolution'] ) . '</p>';
- echo '</div>';
-
- $debug_info .= "FAILED TESTS!\r\n";
- $debug_info .= $fail['name'] . ': ' . $fail['message'] . "\r\n";
- $debug_info .= print_r( $cxntests->raw_results(), true ); //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_print_r
- }
- }
- ?>
- </div>
- <div class="entry-content">
- <h3><?php esc_html_e( 'Trouble with Jetpack?', 'jetpack' ); ?></h3>
- <h4><?php esc_html_e( 'It may be caused by one of these issues, which you can diagnose yourself:', 'jetpack' ); ?></h4>
- <ol>
- <li><b><em>
- <?php
- esc_html_e( 'A known issue.', 'jetpack' );
- ?>
- </em></b>
- <?php
- echo sprintf(
- wp_kses(
- /* translators: URLs to Jetpack support pages. */
- __( 'Some themes and plugins have <a href="%1$s" target="_blank">known conflicts</a> with Jetpack – check the <a href="%2$s" target="_blank">list</a>. (You can also browse the <a href="%3$s" target="_blank">Jetpack support pages</a> or <a href="%4$s" target="_blank">Jetpack support forum</a> to see if others have experienced and solved the problem.)', 'jetpack' ),
- array(
- 'a' => array(
- 'href' => array(),
- 'target' => array(),
- ),
- )
- ),
- 'http://jetpack.com/support/getting-started-with-jetpack/known-issues/',
- 'http://jetpack.com/support/getting-started-with-jetpack/known-issues/',
- 'http://jetpack.com/support/',
- 'https://wordpress.org/support/plugin/jetpack'
- );
- ?>
- </li>
- <li><b><em><?php esc_html_e( 'An incompatible plugin.', 'jetpack' ); ?></em></b> <?php esc_html_e( "Find out by disabling all plugins except Jetpack. If the problem persists, it's not a plugin issue. If the problem is solved, turn your plugins on one by one until the problem pops up again – there's the culprit! Let us know, and we'll try to help.", 'jetpack' ); ?></li>
- <li>
- <b><em><?php esc_html_e( 'A theme conflict.', 'jetpack' ); ?></em></b>
- <?php
- $default_theme = wp_get_theme( WP_DEFAULT_THEME );
-
- if ( $default_theme->exists() ) {
- /* translators: %s is the name of a theme */
- echo esc_html( sprintf( __( "If your problem isn't known or caused by a plugin, try activating %s (the default WordPress theme).", 'jetpack' ), $default_theme->get( 'Name' ) ) );
- } else {
- esc_html_e( "If your problem isn't known or caused by a plugin, try activating the default WordPress theme.", 'jetpack' );
- }
- ?>
- <?php esc_html_e( "If this solves the problem, something in your theme is probably broken – let the theme's author know.", 'jetpack' ); ?>
- </li>
- <li><b><em><?php esc_html_e( 'A problem with your XMLRPC file.', 'jetpack' ); ?></em></b>
- <?php
- echo sprintf(
- wp_kses(
- /* translators: The URL to the site's xmlrpc.php file. */
- __( 'Load your <a href="%s">XMLRPC file</a>. It should say “XML-RPC server accepts POST requests only.” on a line by itself.', 'jetpack' ),
- array( 'a' => array( 'href' => array() ) )
- ),
- esc_attr( site_url( 'xmlrpc.php' ) )
- );
- ?>
- <ul>
- <li>- <?php esc_html_e( "If it's not by itself, a theme or plugin is displaying extra characters. Try steps 2 and 3.", 'jetpack' ); ?></li>
- <li>- <?php esc_html_e( 'If you get a 404 message, contact your web host. Their security may block XMLRPC.', 'jetpack' ); ?></li>
- </ul>
- </li>
- <?php if ( current_user_can( 'jetpack_disconnect' ) && Jetpack::is_active() ) : ?>
- <li>
- <strong><em><?php esc_html_e( 'A connection problem with WordPress.com.', 'jetpack' ); ?></em></strong>
- <?php
- echo sprintf(
- wp_kses(
- /* translators: URL to disconnect and reconnect Jetpack. */
- __( 'Jetpack works by connecting to WordPress.com for a lot of features. Sometimes, when the connection gets messed up, you need to disconnect and reconnect to get things working properly. <a href="%s">Disconnect from WordPress.com</a>', 'jetpack' ),
- array(
- 'a' => array(
- 'href' => array(),
- 'class' => array(),
- ),
- )
- ),
- esc_attr(
- wp_nonce_url(
- Jetpack::admin_url(
- array(
- 'page' => 'jetpack-debugger',
- 'disconnect' => true,
- )
- ),
- 'jp_disconnect',
- 'nonce'
- )
- )
- );
- ?>
- </li>
- <?php endif; ?>
- </ol>
- <h4><?php esc_html_e( 'Still having trouble?', 'jetpack' ); ?></h4>
- <p><b><em><?php esc_html_e( 'Ask us for help!', 'jetpack' ); ?></em></b>
- <?php
- echo sprintf(
- wp_kses(
- /* translators: URL for Jetpack support. */
- __( '<a href="%s">Contact our Happiness team</a>. When you do, please include the full debug information below.', 'jetpack' ),
- array( 'a' => array( 'href' => array() ) )
- ),
- 'https://jetpack.com/contact-support/'
- );
- ?>
- </p>
- <hr />
- <?php if ( Jetpack::is_active() ) : ?>
- <div id="connected-user-details">
- <h3><?php esc_html_e( 'More details about your Jetpack settings', 'jetpack' ); ?></h3>
- <p>
- <?php
- printf(
- wp_kses(
- /* translators: %s is an e-mail address */
- __( 'The primary connection is owned by <strong>%s</strong>\'s WordPress.com account.', 'jetpack' ),
- array( 'strong' => array() )
- ),
- esc_html( Jetpack::get_master_user_email() )
- );
- ?>
- </p>
- </div>
- <?php else : ?>
- <div id="dev-mode-details">
- <p>
- <?php
- printf(
- wp_kses(
- /* translators: Link to a Jetpack support page. */
- __( 'Would you like to use Jetpack on your local development site? You can do so thanks to <a href="%s">Jetpack\'s development mode</a>.', 'jetpack' ),
- array( 'a' => array( 'href' => array() ) )
- ),
- 'https://jetpack.com/support/development-mode/'
- );
- ?>
- </p>
- </div>
- <?php endif; ?>
- <?php
- if (
- current_user_can( 'jetpack_manage_modules' )
- && ( Jetpack::is_development_mode() || Jetpack::is_active() )
- ) {
- printf(
- wp_kses(
- '<p><a href="%1$s">%2$s</a></p>',
- array(
- 'a' => array( 'href' => array() ),
- 'p' => array(),
- )
- ),
- esc_attr( Jetpack::admin_url( 'page=jetpack_modules' ) ),
- esc_html__( 'Access the full list of Jetpack modules available on your site.', 'jetpack' )
- );
- }
- ?>
- </div>
- <hr />
- <div id="toggle_debug_info"><?php esc_html_e( 'Advanced Debug Results', 'jetpack' ); ?></div>
- <div id="debug_info_div">
- <h4><?php esc_html_e( 'Debug Info', 'jetpack' ); ?></h4>
- <div id="debug_info"><pre><?php echo esc_html( $debug_info ); ?></pre></div>
- </div>
- </div>
- <?php
- }
-
- /**
- * Outputs html needed within the <head> for the in-plugin debugger page.
- */
- public static function jetpack_debug_admin_head() {
-
- Jetpack_Admin_Page::load_wrapper_styles();
- ?>
- <style type="text/css">
-
- .jetpack-debug-test-container {
- margin-top: 20px;
- margin-bottom: 30px;
- }
-
- .jetpack-tests-succeed {
- font-size: large;
- color: #8BAB3E;
- }
-
- .jetpack-test-details {
- margin: 4px 6px;
- padding: 10px;
- overflow: auto;
- display: none;
- }
-
- .jetpack-test-error {
- margin-bottom: 10px;
- background: #FFEBE8;
- border: solid 1px #C00;
- border-radius: 3px;
- }
-
- .jetpack-test-error p {
- margin: 0;
- padding: 0;
- }
-
- p.jetpack-test-details {
- margin: 4px 6px;
- padding: 10px;
- }
-
- .jetpack-test-error a.jetpack-test-heading {
- padding: 4px 6px;
- display: block;
- text-decoration: none;
- color: inherit;
- }
-
- .jetpack-test-error .noticon {
- float: right;
- }
-
- .formbox {
- margin: 0 0 25px 0;
- }
-
- .formbox input[type="text"], .formbox input[type="email"], .formbox input[type="url"], .formbox textarea, #debug_info_div {
- border: 1px solid #e5e5e5;
- border-radius: 11px;
- box-shadow: inset 0 1px 1px rgba(0,0,0,0.1);
- color: #666;
- font-size: 14px;
- padding: 10px;
- width: 97%;
- }
- #debug_info_div {
- border-radius: 0;
- margin-top: 16px;
- background: #FFF;
- padding: 16px;
- }
- .formbox .contact-support input[type="submit"] {
- float: right;
- margin: 0 !important;
- border-radius: 20px !important;
- cursor: pointer;
- font-size: 13pt !important;
- height: auto !important;
- margin: 0 0 2em 10px !important;
- padding: 8px 16px !important;
- background-color: #ddd;
- border: 1px solid rgba(0,0,0,0.05);
- border-top-color: rgba(255,255,255,0.1);
- border-bottom-color: rgba(0,0,0,0.15);
- color: #333;
- font-weight: 400;
- display: inline-block;
- text-align: center;
- text-decoration: none;
- }
-
- .formbox span.errormsg {
- margin: 0 0 10px 10px;
- color: #d00;
- display: none;
- }
-
- .formbox.error span.errormsg {
- display: block;
- }
-
- #debug_info_div, #toggle_debug_info, #debug_info_div p {
- font-size: 12px;
- }
-
- #category_div ul li {
- list-style-type: none;
- }
-
- </style>
- <script type="text/javascript">
- jQuery( document ).ready( function($) {
-
- $( '#debug_info' ).prepend( 'jQuery version: ' + jQuery.fn.jquery + "\r\n" );
- $( '#debug_form_info' ).prepend( 'jQuery version: ' + jQuery.fn.jquery + "\r\n" );
-
- $( '.jetpack-test-error .jetpack-test-heading' ).on( 'click', function() {
- $( this ).parents( '.jetpack-test-error' ).find( '.jetpack-test-details' ).slideToggle();
- return false;
- } );
-
- } );
- </script>
- <?php
- }
-}
diff --git a/plugins/jetpack/_inc/lib/functions.wp-notify.php b/plugins/jetpack/_inc/lib/functions.wp-notify.php
deleted file mode 100644
index 6be0c3ac..00000000
--- a/plugins/jetpack/_inc/lib/functions.wp-notify.php
+++ /dev/null
@@ -1,353 +0,0 @@
-<?php
-
-if ( ! function_exists( 'wp_notify_postauthor' ) && Jetpack::is_active() ) :
- /**
- * Notify an author (and/or others) of a comment/trackback/pingback on a post.
- *
- * @since 1.0.0
- *
- * @param int|WP_Comment $comment_id Comment ID or WP_Comment object.
- * @param string $deprecated Not used
- * @return bool True on completion. False if no email addresses were specified.
- */
- function wp_notify_postauthor( $comment_id, $deprecated = null ) {
- if ( null !== $deprecated ) {
- _deprecated_argument( __FUNCTION__, '3.8.0' );
- }
-
- $comment = get_comment( $comment_id );
-
- if ( empty( $comment ) || empty( $comment->comment_post_ID ) ) {
- return false;
- }
-
- $post = get_post( $comment->comment_post_ID );
- $author = get_userdata( $post->post_author );
-
- // Who to notify? By default, just the post author, but others can be added.
- $emails = array();
- if ( $author ) {
- $emails[] = $author->user_email;
- }
-
- /** This filter is documented in core/src/wp-includes/pluggable.php */
- $emails = apply_filters( 'comment_notification_recipients', $emails, $comment->comment_ID );
- $emails = array_filter( $emails );
-
- // If there are no addresses to send the comment to, bail.
- if ( ! count( $emails ) ) {
- return false;
- }
-
- // Facilitate unsetting below without knowing the keys.
- $emails = array_flip( $emails );
-
- /** This filter is documented in core/src/wp-includes/pluggable.php */
- $notify_author = apply_filters( 'comment_notification_notify_author', false, $comment->comment_ID );
-
- // The comment was left by the author
- if ( $author && ! $notify_author && $comment->user_id == $post->post_author ) {
- unset( $emails[ $author->user_email ] );
- }
-
- // The author moderated a comment on their own post
- if ( $author && ! $notify_author && $post->post_author == get_current_user_id() ) {
- unset( $emails[ $author->user_email ] );
- }
-
- // The post author is no longer a member of the blog
- if ( $author && ! $notify_author && ! user_can( $post->post_author, 'read_post', $post->ID ) ) {
- unset( $emails[ $author->user_email ] );
- }
-
- // If there's no email to send the comment to, bail, otherwise flip array back around for use below
- if ( ! count( $emails ) ) {
- return false;
- } else {
- $emails = array_flip( $emails );
- }
-
- $switched_locale = switch_to_locale( get_locale() );
-
- $comment_author_domain = @gethostbyaddr( $comment->comment_author_IP );
-
- // The blogname option is escaped with esc_html on the way into the database in sanitize_option
- // we want to reverse this for the plain text arena of emails.
- $blogname = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
- $comment_content = wp_specialchars_decode( $comment->comment_content );
-
- function is_user_connected( $email ) {
- $user = get_user_by( 'email', $email );
- return Jetpack::is_user_connected( $user->ID );
- }
-
- $moderate_on_wpcom = ! in_array( false, array_map( 'is_user_connected', $emails ) );
-
- $primary_site_slug = Jetpack::build_raw_urls( get_home_url() );
-
- switch ( $comment->comment_type ) {
- case 'trackback':
- /* translators: 1: Post title */
- $notify_message = sprintf( __( 'New trackback on your post "%s"' ), $post->post_title ) . "\r\n";
- /* translators: 1: Trackback/pingback website name, 2: website IP address, 3: website hostname */
- $notify_message .= sprintf( __( 'Website: %1$s (IP address: %2$s, %3$s)' ), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
- $notify_message .= sprintf( __( 'URL: %s' ), $comment->comment_author_url ) . "\r\n";
- $notify_message .= sprintf( __( 'Comment: %s' ), "\r\n" . $comment_content ) . "\r\n\r\n";
- $notify_message .= __( 'You can see all trackbacks on this post here:' ) . "\r\n";
- /* translators: 1: blog name, 2: post title */
- $subject = sprintf( __( '[%1$s] Trackback: "%2$s"' ), $blogname, $post->post_title );
- break;
- case 'pingback':
- /* translators: 1: Post title */
- $notify_message = sprintf( __( 'New pingback on your post "%s"' ), $post->post_title ) . "\r\n";
- /* translators: 1: Trackback/pingback website name, 2: website IP address, 3: website hostname */
- $notify_message .= sprintf( __( 'Website: %1$s (IP address: %2$s, %3$s)' ), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
- $notify_message .= sprintf( __( 'URL: %s' ), $comment->comment_author_url ) . "\r\n";
- $notify_message .= sprintf( __( 'Comment: %s' ), "\r\n" . $comment_content ) . "\r\n\r\n";
- $notify_message .= __( 'You can see all pingbacks on this post here:' ) . "\r\n";
- /* translators: 1: blog name, 2: post title */
- $subject = sprintf( __( '[%1$s] Pingback: "%2$s"' ), $blogname, $post->post_title );
- break;
- default: // Comments
- $notify_message = sprintf( __( 'New comment on your post "%s"' ), $post->post_title ) . "\r\n";
- /* translators: 1: comment author, 2: comment author's IP address, 3: comment author's hostname */
- $notify_message .= sprintf( __( 'Author: %1$s (IP address: %2$s, %3$s)' ), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
- $notify_message .= sprintf( __( 'Email: %s' ), $comment->comment_author_email ) . "\r\n";
- $notify_message .= sprintf( __( 'URL: %s' ), $comment->comment_author_url ) . "\r\n";
- $notify_message .= sprintf( __( 'Comment: %s' ), "\r\n" . $comment_content ) . "\r\n\r\n";
- $notify_message .= __( 'You can see all comments on this post here:' ) . "\r\n";
- /* translators: 1: blog name, 2: post title */
- $subject = sprintf( __( '[%1$s] Comment: "%2$s"' ), $blogname, $post->post_title );
- break;
- }
-
- $notify_message .= $moderate_on_wpcom
- ? "https://wordpress.com/comments/all/{$primary_site_slug}/{$comment->comment_post_ID}/\r\n\r\n"
- : get_permalink( $comment->comment_post_ID ) . "#comments\r\n\r\n";
-
- $notify_message .= sprintf( __( 'Permalink: %s' ), get_comment_link( $comment ) ) . "\r\n";
-
- if ( user_can( $post->post_author, 'edit_comment', $comment->comment_ID ) ) {
- if ( EMPTY_TRASH_DAYS ) {
- $notify_message .= sprintf(
- __( 'Trash it: %s' ), $moderate_on_wpcom
- ? "https://wordpress.com/comment/{$primary_site_slug}/{$comment_id}?action=trash"
- : admin_url( "comment.php?action=trash&c={$comment->comment_ID}#wpbody-content" )
- ) . "\r\n";
- } else {
- $notify_message .= sprintf(
- __( 'Delete it: %s' ), $moderate_on_wpcom
- ? "https://wordpress.com/comment/{$primary_site_slug}/{$comment_id}?action=delete"
- : admin_url( "comment.php?action=delete&c={$comment->comment_ID}#wpbody-content" )
- ) . "\r\n";
- }
- $notify_message .= sprintf(
- __( 'Spam it: %s' ), $moderate_on_wpcom ?
- "https://wordpress.com/comment/{$primary_site_slug}/{$comment_id}?action=spam"
- : admin_url( "comment.php?action=spam&c={$comment->comment_ID}#wpbody-content" )
- ) . "\r\n";
- }
-
- $wp_email = 'wordpress@' . preg_replace( '#^www\.#', '', strtolower( $_SERVER['SERVER_NAME'] ) );
-
- if ( '' == $comment->comment_author ) {
- $from = "From: \"$blogname\" <$wp_email>";
- if ( '' != $comment->comment_author_email ) {
- $reply_to = "Reply-To: $comment->comment_author_email";
- }
- } else {
- $from = "From: \"$comment->comment_author\" <$wp_email>";
- if ( '' != $comment->comment_author_email ) {
- $reply_to = "Reply-To: \"$comment->comment_author_email\" <$comment->comment_author_email>";
- }
- }
-
- $message_headers = "$from\n"
- . 'Content-Type: text/plain; charset="' . get_option( 'blog_charset' ) . "\"\n";
-
- if ( isset( $reply_to ) ) {
- $message_headers .= $reply_to . "\n";
- }
-
- /** This filter is documented in core/src/wp-includes/pluggable.php */
- $notify_message = apply_filters( 'comment_notification_text', $notify_message, $comment->comment_ID );
-
- /** This filter is documented in core/src/wp-includes/pluggable.php */
- $subject = apply_filters( 'comment_notification_subject', $subject, $comment->comment_ID );
-
- /** This filter is documented in core/src/wp-includes/pluggable.php */
- $message_headers = apply_filters( 'comment_notification_headers', $message_headers, $comment->comment_ID );
-
- foreach ( $emails as $email ) {
- @wp_mail( $email, wp_specialchars_decode( $subject ), $notify_message, $message_headers );
- }
-
- if ( $switched_locale ) {
- restore_previous_locale();
- }
-
- return true;
- }
-endif;
-
-if ( ! function_exists( 'wp_notify_moderator' ) && Jetpack::is_active() ) :
- /**
- * Notifies the moderator of the site about a new comment that is awaiting approval.
- *
- * @since 1.0.0
- *
- * @global wpdb $wpdb WordPress database abstraction object.
- *
- * Uses the {@see 'notify_moderator'} filter to determine whether the site moderator
- * should be notified, overriding the site setting.
- *
- * @param int $comment_id Comment ID.
- * @return true Always returns true.
- */
- function wp_notify_moderator( $comment_id ) {
- global $wpdb;
-
- $maybe_notify = get_option( 'moderation_notify' );
-
- /** This filter is documented in core/src/wp-includes/pluggable.php */
- $maybe_notify = apply_filters( 'notify_moderator', $maybe_notify, $comment_id );
-
- if ( ! $maybe_notify ) {
- return true;
- }
-
- $comment = get_comment( $comment_id );
- $post = get_post( $comment->comment_post_ID );
- $user = get_userdata( $post->post_author );
- // Send to the administration and to the post author if the author can modify the comment.
- $emails = array( get_option( 'admin_email' ) );
- if ( $user && user_can( $user->ID, 'edit_comment', $comment_id ) && ! empty( $user->user_email ) ) {
- if ( 0 !== strcasecmp( $user->user_email, get_option( 'admin_email' ) ) ) {
- $emails[] = $user->user_email;
- }
- }
-
- $switched_locale = switch_to_locale( get_locale() );
-
- $comment_author_domain = @gethostbyaddr( $comment->comment_author_IP );
- $comments_waiting = $wpdb->get_var( "SELECT count(comment_ID) FROM $wpdb->comments WHERE comment_approved = '0'" );
-
- // The blogname option is escaped with esc_html on the way into the database in sanitize_option
- // we want to reverse this for the plain text arena of emails.
- $blogname = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
- $comment_content = wp_specialchars_decode( $comment->comment_content );
-
- switch ( $comment->comment_type ) {
- case 'trackback':
- /* translators: 1: Post title */
- $notify_message = sprintf( __( 'A new trackback on the post "%s" is waiting for your approval' ), $post->post_title ) . "\r\n";
- $notify_message .= get_permalink( $comment->comment_post_ID ) . "\r\n\r\n";
- /* translators: 1: Trackback/pingback website name, 2: website IP address, 3: website hostname */
- $notify_message .= sprintf( __( 'Website: %1$s (IP address: %2$s, %3$s)' ), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
- /* translators: 1: Trackback/pingback/comment author URL */
- $notify_message .= sprintf( __( 'URL: %s' ), $comment->comment_author_url ) . "\r\n";
- $notify_message .= __( 'Trackback excerpt: ' ) . "\r\n" . $comment_content . "\r\n\r\n";
- break;
- case 'pingback':
- /* translators: 1: Post title */
- $notify_message = sprintf( __( 'A new pingback on the post "%s" is waiting for your approval' ), $post->post_title ) . "\r\n";
- $notify_message .= get_permalink( $comment->comment_post_ID ) . "\r\n\r\n";
- /* translators: 1: Trackback/pingback website name, 2: website IP address, 3: website hostname */
- $notify_message .= sprintf( __( 'Website: %1$s (IP address: %2$s, %3$s)' ), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
- /* translators: 1: Trackback/pingback/comment author URL */
- $notify_message .= sprintf( __( 'URL: %s' ), $comment->comment_author_url ) . "\r\n";
- $notify_message .= __( 'Pingback excerpt: ' ) . "\r\n" . $comment_content . "\r\n\r\n";
- break;
- default: // Comments
- /* translators: 1: Post title */
- $notify_message = sprintf( __( 'A new comment on the post "%s" is waiting for your approval' ), $post->post_title ) . "\r\n";
- $notify_message .= get_permalink( $comment->comment_post_ID ) . "\r\n\r\n";
- /* translators: 1: Comment author name, 2: comment author's IP address, 3: comment author's hostname */
- $notify_message .= sprintf( __( 'Author: %1$s (IP address: %2$s, %3$s)' ), $comment->comment_author, $comment->comment_author_IP, $comment_author_domain ) . "\r\n";
- /* translators: 1: Comment author URL */
- $notify_message .= sprintf( __( 'Email: %s' ), $comment->comment_author_email ) . "\r\n";
- /* translators: 1: Trackback/pingback/comment author URL */
- $notify_message .= sprintf( __( 'URL: %s' ), $comment->comment_author_url ) . "\r\n";
- /* translators: 1: Comment text */
- $notify_message .= sprintf( __( 'Comment: %s' ), "\r\n" . $comment_content ) . "\r\n\r\n";
- break;
- }
-
- /** This filter is documented in core/src/wp-includes/pluggable.php */
- $emails = apply_filters( 'comment_moderation_recipients', $emails, $comment_id );
-
- function is_user_connected( $email ) {
- $user = get_user_by( 'email', $email );
- return Jetpack::is_user_connected( $user->ID );
- }
-
- $moderate_on_wpcom = ! in_array( false, array_map( 'is_user_connected', $emails ) );
-
- $primary_site_slug = Jetpack::build_raw_urls( get_home_url() );
-
- /* translators: Comment moderation. 1: Comment action URL */
- $notify_message .= sprintf(
- __( 'Approve it: %s' ), $moderate_on_wpcom
- ? "https://wordpress.com/comment/{$primary_site_slug}/{$comment_id}?action=approve"
- : admin_url( "comment.php?action=approve&c={$comment_id}#wpbody-content" )
- ) . "\r\n";
-
- if ( EMPTY_TRASH_DAYS ) {
- /* translators: Comment moderation. 1: Comment action URL */
- $notify_message .= sprintf(
- __( 'Trash it: %s' ), $moderate_on_wpcom
- ? "https://wordpress.com/comment/{$primary_site_slug}/{$comment_id}?action=trash"
- : admin_url( "comment.php?action=trash&c={$comment_id}#wpbody-content" )
- ) . "\r\n";
- } else {
- /* translators: Comment moderation. 1: Comment action URL */
- $notify_message .= sprintf(
- __( 'Delete it: %s' ), $moderate_on_wpcom
- ? "https://wordpress.com/comment/{$primary_site_slug}/{$comment_id}?action=delete"
- : admin_url( "comment.php?action=delete&c={$comment_id}#wpbody-content" )
- ) . "\r\n";
- }
-
- /* translators: Comment moderation. 1: Comment action URL */
- $notify_message .= sprintf(
- __( 'Spam it: %s' ), $moderate_on_wpcom
- ? "https://wordpress.com/comment/{$primary_site_slug}/{$comment_id}?action=spam"
- : admin_url( "comment.php?action=spam&c={$comment_id}#wpbody-content" )
- ) . "\r\n";
-
- /* translators: Comment moderation. 1: Number of comments awaiting approval */
- $notify_message .= sprintf(
- _n(
- 'Currently %s comment is waiting for approval. Please visit the moderation panel:',
- 'Currently %s comments are waiting for approval. Please visit the moderation panel:', $comments_waiting
- ), number_format_i18n( $comments_waiting )
- ) . "\r\n";
-
- $notify_message .= $moderate_on_wpcom
- ? "https://wordpress.com/comments/pending/{$primary_site_slug}/"
- : admin_url( 'edit-comments.php?comment_status=moderated#wpbody-content' ) . "\r\n";
-
- /* translators: Comment moderation notification email subject. 1: Site name, 2: Post title */
- $subject = sprintf( __( '[%1$s] Please moderate: "%2$s"' ), $blogname, $post->post_title );
- $message_headers = '';
-
- /** This filter is documented in core/src/wp-includes/pluggable.php */
- $notify_message = apply_filters( 'comment_moderation_text', $notify_message, $comment_id );
-
- /** This filter is documented in core/src/wp-includes/pluggable.php */
- $subject = apply_filters( 'comment_moderation_subject', $subject, $comment_id );
-
- /** This filter is documented in core/src/wp-includes/pluggable.php */
- $message_headers = apply_filters( 'comment_moderation_headers', $message_headers, $comment_id );
-
- foreach ( $emails as $email ) {
- @wp_mail( $email, wp_specialchars_decode( $subject ), $notify_message, $message_headers );
- }
-
- if ( $switched_locale ) {
- restore_previous_locale();
- }
-
- return true;
- }
-endif;
diff --git a/plugins/jetpack/_inc/lib/icalendar-reader.php b/plugins/jetpack/_inc/lib/icalendar-reader.php
deleted file mode 100644
index f7e047f9..00000000
--- a/plugins/jetpack/_inc/lib/icalendar-reader.php
+++ /dev/null
@@ -1,913 +0,0 @@
-<?php
-
-/**
- * Gets and renders iCal feeds for the Upcoming Events widget and shortcode
- */
-
-class iCalendarReader {
-
- public $todo_count = 0;
- public $event_count = 0;
- public $cal = array();
- public $_lastKeyWord = '';
- public $timezone = null;
-
- /**
- * Class constructor
- *
- * @return void
- */
- public function __construct() {}
-
- /**
- * Return an array of events
- *
- * @param string $url (default: '')
- * @return array | false on failure
- */
- public function get_events( $url = '', $count = 5 ) {
- $count = (int) $count;
- $transient_id = 'icalendar_vcal_' . md5( $url ) . '_' . $count;
-
- $vcal = get_transient( $transient_id );
-
- if ( ! empty( $vcal ) ) {
- if ( isset( $vcal['TIMEZONE'] ) )
- $this->timezone = $this->timezone_from_string( $vcal['TIMEZONE'] );
-
- if ( isset( $vcal['VEVENT'] ) ) {
- $vevent = $vcal['VEVENT'];
-
- if ( $count > 0 )
- $vevent = array_slice( $vevent, 0, $count );
-
- $this->cal['VEVENT'] = $vevent;
-
- return $this->cal['VEVENT'];
- }
- }
-
- if ( ! $this->parse( $url ) )
- return false;
-
- $vcal = array();
-
- if ( $this->timezone ) {
- $vcal['TIMEZONE'] = $this->timezone->getName();
- } else {
- $this->timezone = $this->timezone_from_string( '' );
- }
-
- if ( ! empty( $this->cal['VEVENT'] ) ) {
- $vevent = $this->cal['VEVENT'];
-
- // check for recurring events
- // $vevent = $this->add_recurring_events( $vevent );
-
- // remove before caching - no sense in hanging onto the past
- $vevent = $this->filter_past_and_recurring_events( $vevent );
-
- // order by soonest start date
- $vevent = $this->sort_by_recent( $vevent );
-
- $vcal['VEVENT'] = $vevent;
- }
-
- set_transient( $transient_id, $vcal, HOUR_IN_SECONDS );
-
- if ( !isset( $vcal['VEVENT'] ) )
- return false;
-
- if ( $count > 0 )
- return array_slice( $vcal['VEVENT'], 0, $count );
-
- return $vcal['VEVENT'];
- }
-
- function apply_timezone_offset( $events ) {
- if ( ! $events ) {
- return $events;
- }
-
- // get timezone offset from the timezone name.
- $timezone_name = get_option( 'timezone_string' );
- if ( $timezone_name ) {
- $timezone = new DateTimeZone( $timezone_name );
- $timezone_offset_interval = false;
- } else {
- // If the timezone isn't set then the GMT offset must be set.
- // generate a DateInterval object from the timezone offset
- $gmt_offset = get_option( 'gmt_offset' ) * HOUR_IN_SECONDS;
- $timezone_offset_interval = date_interval_create_from_date_string( "{$gmt_offset} seconds" );
- $timezone = new DateTimeZone( 'UTC' );
- }
-
- $offsetted_events = array();
-
- foreach ( $events as $event ) {
- // Don't handle all-day events
- if ( 8 < strlen( $event['DTSTART'] ) ) {
- $start_time = preg_replace( '/Z$/', '', $event['DTSTART'] );
- $start_time = new DateTime( $start_time, $this->timezone );
- $start_time->setTimeZone( $timezone );
-
- $end_time = preg_replace( '/Z$/', '', $event['DTEND'] );
- $end_time = new DateTime( $end_time, $this->timezone );
- $end_time->setTimeZone( $timezone );
-
- if ( $timezone_offset_interval ) {
- $start_time->add( $timezone_offset_interval );
- $end_time->add( $timezone_offset_interval );
- }
-
- $event['DTSTART'] = $start_time->format( 'YmdHis\Z' );
- $event['DTEND'] = $end_time->format( 'YmdHis\Z' );
- }
-
- $offsetted_events[] = $event;
- }
-
- return $offsetted_events;
- }
-
- protected function filter_past_and_recurring_events( $events ) {
- $upcoming = array();
- $set_recurring_events = array();
- $recurrences = array();
- /**
- * This filter allows any time to be passed in for testing or changing timezones, etc...
- *
- * @module widgets
- *
- * @since 3.4.0
- *
- * @param object time() A time object.
- */
- $current = apply_filters( 'ical_get_current_time', time() );
-
- foreach ( $events as $event ) {
-
- $date_from_ics = strtotime( $event['DTSTART'] );
- if ( isset( $event['DTEND'] ) ) {
- $duration = strtotime( $event['DTEND'] ) - strtotime( $event['DTSTART'] );
- } else {
- $duration = 0;
- }
-
- if ( isset( $event['RRULE'] ) && $this->timezone->getName() && 8 != strlen( $event['DTSTART'] ) ) {
- try {
- $adjusted_time = new DateTime( $event['DTSTART'], new DateTimeZone('UTC') );
- $adjusted_time->setTimeZone( new DateTimeZone( $this->timezone->getName() ) );
- $event['DTSTART'] = $adjusted_time->format('Ymd\THis');
- $date_from_ics = strtotime( $event['DTSTART'] );
-
- $event['DTEND'] = date( 'Ymd\THis', strtotime( $event['DTSTART'] ) + $duration );
- } catch ( Exception $e ) {
- // Invalid argument to DateTime
- }
-
- if ( isset( $event['EXDATE'] ) ) {
- $exdates = array();
- foreach ( (array) $event['EXDATE'] as $exdate ) {
- try {
- $adjusted_time = new DateTime( $exdate, new DateTimeZone('UTC') );
- $adjusted_time->setTimeZone( new DateTimeZone( $this->timezone->getName() ) );
- if ( 8 == strlen( $event['DTSTART'] ) ) {
- $exdates[] = $adjusted_time->format( 'Ymd' );
- } else {
- $exdates[] = $adjusted_time->format( 'Ymd\THis' );
- }
- } catch ( Exception $e ) {
- // Invalid argument to DateTime
- }
- }
- $event['EXDATE'] = $exdates;
- } else {
- $event['EXDATE'] = array();
- }
- }
-
- if ( ! isset( $event['DTSTART'] ) ) {
- continue;
- }
-
- // Process events with RRULE before other events
- $rrule = isset( $event['RRULE'] ) ? $event['RRULE'] : false ;
- $uid = $event['UID'];
-
- if ( $rrule && ! in_array( $uid, $set_recurring_events ) ) {
-
- // Break down the RRULE into digestible chunks
- $rrule_array = array();
-
- foreach ( explode( ";", $event['RRULE'] ) as $rline ) {
- list( $rkey, $rvalue ) = explode( "=", $rline, 2 );
- $rrule_array[$rkey] = $rvalue;
- }
-
- $interval = ( isset( $rrule_array['INTERVAL'] ) ) ? $rrule_array['INTERVAL'] : 1;
- $rrule_count = ( isset( $rrule_array['COUNT'] ) ) ? $rrule_array['COUNT'] : 0;
- $until = ( isset( $rrule_array['UNTIL'] ) ) ? strtotime( $rrule_array['UNTIL'] ) : strtotime( '+1 year', $current );
-
- // Used to bound event checks
- $echo_limit = 10;
- $noop = false;
-
- // Set bydays for the event
- $weekdays = array( 'SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA' );
- $bydays = $weekdays;
-
- // Calculate a recent start date for incrementing depending on the frequency and interval
- switch ( $rrule_array['FREQ'] ) {
-
- case 'DAILY':
- $frequency = 'day';
- $echo_limit = 10;
-
- if ( $date_from_ics >= $current ) {
- $recurring_event_date_start = date( 'Ymd\THis', strtotime( $event['DTSTART'] ) );
- } else {
- // Interval and count
- $catchup = floor( ( $current - strtotime( $event['DTSTART'] ) ) / ( $interval * DAY_IN_SECONDS ) );
- if ( $rrule_count && $catchup > 0 ) {
- if ( $catchup < $rrule_count ) {
- $rrule_count = $rrule_count - $catchup;
- $recurring_event_date_start = date( 'Ymd', strtotime( '+ ' . ( $interval * $catchup ) . ' days', strtotime( $event['DTSTART'] ) ) ) . date( '\THis', strtotime( $event['DTSTART'] ) );
- } else {
- $noop = true;
- }
- } else {
- $recurring_event_date_start = date( 'Ymd', strtotime( '+ ' . ( $interval * $catchup ) . ' days', strtotime( $event['DTSTART'] ) ) ) . date( '\THis', strtotime( $event['DTSTART'] ) );
- }
- }
- break;
-
- case 'WEEKLY':
- $frequency = 'week';
- $echo_limit = 4;
-
- // BYDAY exception to current date
- $day = false;
- if ( ! isset( $rrule_array['BYDAY'] ) ) {
- $day = $rrule_array['BYDAY'] = strtoupper( substr( date( 'D', strtotime( $event['DTSTART'] ) ), 0, 2 ) );
- }
- $bydays = explode( ',', $rrule_array['BYDAY'] );
-
- if ( $date_from_ics >= $current ) {
- $recurring_event_date_start = date( 'Ymd\THis', strtotime( $event['DTSTART'] ) );
- } else {
- // Interval and count
- $catchup = floor( ( $current - strtotime( $event['DTSTART'] ) ) / ( $interval * WEEK_IN_SECONDS ) );
- if ( $rrule_count && $catchup > 0 ) {
- if ( ( $catchup * count( $bydays ) ) < $rrule_count ) {
- $rrule_count = $rrule_count - ( $catchup * count( $bydays ) ); // Estimate current event count
- $recurring_event_date_start = date( 'Ymd', strtotime( '+ ' . ( $interval * $catchup ) . ' weeks', strtotime( $event['DTSTART'] ) ) ) . date( '\THis', strtotime( $event['DTSTART'] ) );
- } else {
- $noop = true;
- }
- } else {
- $recurring_event_date_start = date( 'Ymd', strtotime( '+ ' . ( $interval * $catchup ) . ' weeks', strtotime( $event['DTSTART'] ) ) ) . date( '\THis', strtotime( $event['DTSTART'] ) );
- }
- }
-
- // Set to Sunday start
- if ( ! $noop && 'SU' !== strtoupper( substr( date( 'D', strtotime( $recurring_event_date_start ) ), 0, 2 ) ) ) {
- $recurring_event_date_start = date( 'Ymd', strtotime( "last Sunday", strtotime( $recurring_event_date_start ) ) ) . date( '\THis', strtotime( $event['DTSTART'] ) );
- }
- break;
-
- case 'MONTHLY':
- $frequency = 'month';
- $echo_limit = 1;
-
- if ( $date_from_ics >= $current ) {
- $recurring_event_date_start = date( 'Ymd\THis', strtotime( $event['DTSTART'] ) );
- } else {
- // Describe the date in the month
- if ( isset( $rrule_array['BYDAY'] ) ) {
- $day_number = substr( $rrule_array['BYDAY'], 0, 1 );
- $week_day = substr( $rrule_array['BYDAY'], 1 );
- $day_cardinals = array( 1 => 'first', 2 => 'second', 3 => 'third', 4 => 'fourth', 5 => 'fifth' );
- $weekdays = array( 'SU' => 'Sunday', 'MO' => 'Monday', 'TU' => 'Tuesday', 'WE' => 'Wednesday', 'TH' => 'Thursday', 'FR' => 'Friday', 'SA' => 'Saturday' );
- $event_date_desc = "{$day_cardinals[$day_number]} {$weekdays[$week_day]} of ";
- } else {
- $event_date_desc = date( 'd ', strtotime( $event['DTSTART'] ) );
- }
-
- // Interval only
- if ( $interval > 1 ) {
- $catchup = 0;
- $maybe = strtotime( $event['DTSTART'] );
- while ( $maybe < $current ) {
- $maybe = strtotime( '+ ' . ( $interval * $catchup ) . ' months', strtotime( $event['DTSTART'] ) );
- $catchup++;
- }
- $recurring_event_date_start = date( 'Ymd', strtotime( $event_date_desc . date( 'F Y', strtotime( '+ ' . ( $interval * ( $catchup - 1 ) ) . ' months', strtotime( $event['DTSTART'] ) ) ) ) ) . date( '\THis', strtotime( $event['DTSTART'] ) );
- } else {
- $recurring_event_date_start = date( 'Ymd', strtotime( $event_date_desc . date( 'F Y', $current ) ) ) . date( '\THis', strtotime( $event['DTSTART'] ) );
- }
-
- // Add one interval if necessary
- if ( strtotime( $recurring_event_date_start ) < $current ) {
- if ( $interval > 1 ) {
- $recurring_event_date_start = date( 'Ymd', strtotime( $event_date_desc . date( 'F Y', strtotime( '+ ' . ( $interval * $catchup ) . ' months', strtotime( $event['DTSTART'] ) ) ) ) ) . date( '\THis', strtotime( $event['DTSTART'] ) );
- } else {
- try {
- $adjustment = new DateTime( date( 'Y-m-d', $current ) );
- $adjustment->modify( 'first day of next month' );
- $recurring_event_date_start = date( 'Ymd', strtotime( $event_date_desc . $adjustment->format( 'F Y' ) ) ) . date( '\THis', strtotime( $event['DTSTART'] ) );
- } catch ( Exception $e ) {
- // Invalid argument to DateTime
- }
- }
- }
- }
- break;
-
- case 'YEARLY':
- $frequency = 'year';
- $echo_limit = 1;
-
- if ( $date_from_ics >= $current ) {
- $recurring_event_date_start = date( "Ymd\THis", strtotime( $event['DTSTART'] ) );
- } else {
- $recurring_event_date_start = date( 'Y', $current ) . date( "md\THis", strtotime( $event['DTSTART'] ) );
- if ( strtotime( $recurring_event_date_start ) < $current ) {
- try {
- $next = new DateTime( date( 'Y-m-d', $current ) );
- $next->modify( 'first day of next year' );
- $recurring_event_date_start = $next->format( 'Y' ) . date ( 'md\THis', strtotime( $event['DTSTART'] ) );
- } catch ( Exception $e ) {
- // Invalid argument to DateTime
- }
- }
- }
- break;
-
- default:
- $frequency = false;
- }
-
- if ( $frequency !== false && ! $noop ) {
- $count_counter = 1;
-
- // If no COUNT limit, go to 10
- if ( empty( $rrule_count ) ) {
- $rrule_count = 10;
- }
-
- // Set up EXDATE handling for the event
- $exdates = ( isset( $event['EXDATE'] ) ) ? $event['EXDATE'] : array();
-
- for ( $i = 1; $i <= $echo_limit; $i++ ) {
-
- // Weeks need a daily loop and must check for inclusion in BYDAYS
- if ( 'week' == $frequency ) {
- $byday_event_date_start = strtotime( $recurring_event_date_start );
-
- foreach ( $weekdays as $day ) {
-
- $event_start_timestamp = $byday_event_date_start;
- $start_time = date( 'His', $event_start_timestamp );
- $event_end_timestamp = $event_start_timestamp + $duration;
- $end_time = date( 'His', $event_end_timestamp );
- if ( 8 == strlen( $event['DTSTART'] ) ) {
- $exdate_compare = date( 'Ymd', $event_start_timestamp );
- } else {
- $exdate_compare = date( 'Ymd\THis', $event_start_timestamp );
- }
-
- if ( in_array( $day, $bydays ) && $event_end_timestamp > $current && $event_start_timestamp < $until && $count_counter <= $rrule_count && $event_start_timestamp >= $date_from_ics && ! in_array( $exdate_compare, $exdates ) ) {
- if ( 8 == strlen( $event['DTSTART'] ) ) {
- $event['DTSTART'] = date( 'Ymd', $event_start_timestamp );
- $event['DTEND'] = date( 'Ymd', $event_end_timestamp );
- } else {
- $event['DTSTART'] = date( 'Ymd\THis', $event_start_timestamp );
- $event['DTEND'] = date( 'Ymd\THis', $event_end_timestamp );
- }
- if ( $this->timezone->getName() && 8 != strlen( $event['DTSTART'] ) ) {
- try {
- $adjusted_time = new DateTime( $event['DTSTART'], new DateTimeZone( $this->timezone->getName() ) );
- $adjusted_time->setTimeZone( new DateTimeZone( 'UTC' ) );
- $event['DTSTART'] = $adjusted_time->format('Ymd\THis');
-
- $event['DTEND'] = date( 'Ymd\THis', strtotime( $event['DTSTART'] ) + $duration );
- } catch ( Exception $e ) {
- // Invalid argument to DateTime
- }
- }
- $upcoming[] = $event;
- $count_counter++;
- }
-
- // Move forward one day
- $byday_event_date_start = strtotime( date( 'Ymd\T', strtotime( '+ 1 day', $event_start_timestamp ) ) . $start_time );
- }
-
- // Restore first event timestamp
- $event_start_timestamp = strtotime( $recurring_event_date_start );
-
- } else {
-
- $event_start_timestamp = strtotime( $recurring_event_date_start );
- $start_time = date( 'His', $event_start_timestamp );
- $event_end_timestamp = $event_start_timestamp + $duration;
- $end_time = date( 'His', $event_end_timestamp );
- if ( 8 == strlen( $event['DTSTART'] ) ) {
- $exdate_compare = date( 'Ymd', $event_start_timestamp );
- } else {
- $exdate_compare = date( 'Ymd\THis', $event_start_timestamp );
- }
-
- if ( $event_end_timestamp > $current && $event_start_timestamp < $until && $count_counter <= $rrule_count && $event_start_timestamp >= $date_from_ics && ! in_array( $exdate_compare, $exdates ) ) {
- if ( 8 == strlen( $event['DTSTART'] ) ) {
- $event['DTSTART'] = date( 'Ymd', $event_start_timestamp );
- $event['DTEND'] = date( 'Ymd', $event_end_timestamp );
- } else {
- $event['DTSTART'] = date( 'Ymd\T', $event_start_timestamp ) . $start_time;
- $event['DTEND'] = date( 'Ymd\T', $event_end_timestamp ) . $end_time;
- }
- if ( $this->timezone->getName() && 8 != strlen( $event['DTSTART'] ) ) {
- try {
- $adjusted_time = new DateTime( $event['DTSTART'], new DateTimeZone( $this->timezone->getName() ) );
- $adjusted_time->setTimeZone( new DateTimeZone( 'UTC' ) );
- $event['DTSTART'] = $adjusted_time->format('Ymd\THis');
-
- $event['DTEND'] = date( 'Ymd\THis', strtotime( $event['DTSTART'] ) + $duration );
- } catch ( Exception $e ) {
- // Invalid argument to DateTime
- }
- }
- $upcoming[] = $event;
- $count_counter++;
- }
- }
-
- // Set up next interval and reset $event['DTSTART'] and $event['DTEND'], keeping timestamps intact
- $next_start_timestamp = strtotime( "+ {$interval} {$frequency}s", $event_start_timestamp );
- if ( 8 == strlen( $event['DTSTART'] ) ) {
- $event['DTSTART'] = date( 'Ymd', $next_start_timestamp );
- $event['DTEND'] = date( 'Ymd', strtotime( $event['DTSTART'] ) + $duration );
- } else {
- $event['DTSTART'] = date( 'Ymd\THis', $next_start_timestamp );
- $event['DTEND'] = date( 'Ymd\THis', strtotime( $event['DTSTART'] ) + $duration );
- }
-
- // Move recurring event date forward
- $recurring_event_date_start = $event['DTSTART'];
- }
- $set_recurring_events[] = $uid;
-
- }
-
- } else {
- // Process normal events
- if ( strtotime( isset( $event['DTEND'] ) ? $event['DTEND'] : $event['DTSTART'] ) >= $current ) {
- $upcoming[] = $event;
- }
- }
- }
- return $upcoming;
- }
-
- /**
- * Parse events from an iCalendar feed
- *
- * @param string $url (default: '')
- * @return array | false on failure
- */
- public function parse( $url = '' ) {
- $cache_group = 'icalendar_reader_parse';
- $disable_get_key = 'disable:' . md5( $url );
-
- // Check to see if previous attempts have failed
- if ( false !== wp_cache_get( $disable_get_key, $cache_group ) )
- return false;
-
- // rewrite webcal: URI schem to HTTP
- $url = preg_replace('/^webcal/', 'http', $url );
- // try to fetch
- $r = wp_remote_get( $url, array( 'timeout' => 3, 'sslverify' => false ) );
- if ( 200 !== wp_remote_retrieve_response_code( $r ) ) {
- // We were unable to fetch any content, so don't try again for another 60 seconds
- wp_cache_set( $disable_get_key, 1, $cache_group, 60 );
- return false;
- }
-
- $body = wp_remote_retrieve_body( $r );
- if ( empty( $body ) )
- return false;
-
- $body = str_replace( "\r\n", "\n", $body );
- $lines = preg_split( "/\n(?=[A-Z])/", $body );
-
- if ( empty( $lines ) )
- return false;
-
- if ( false === stristr( $lines[0], 'BEGIN:VCALENDAR' ) )
- return false;
-
- foreach ( $lines as $line ) {
- $add = $this->key_value_from_string( $line );
- if ( ! $add ) {
- $this->add_component( $type, false, $line );
- continue;
- }
- list( $keyword, $value ) = $add;
-
- switch ( $keyword ) {
- case 'BEGIN':
- case 'END':
- switch ( $line ) {
- case 'BEGIN:VTODO':
- $this->todo_count++;
- $type = 'VTODO';
- break;
- case 'BEGIN:VEVENT':
- $this->event_count++;
- $type = 'VEVENT';
- break;
- case 'BEGIN:VCALENDAR':
- case 'BEGIN:DAYLIGHT':
- case 'BEGIN:VTIMEZONE':
- case 'BEGIN:STANDARD':
- $type = $value;
- break;
- case 'END:VTODO':
- case 'END:VEVENT':
- case 'END:VCALENDAR':
- case 'END:DAYLIGHT':
- case 'END:VTIMEZONE':
- case 'END:STANDARD':
- $type = 'VCALENDAR';
- break;
- }
- break;
- case 'TZID':
- if ( 'VTIMEZONE' == $type && ! $this->timezone )
- $this->timezone = $this->timezone_from_string( $value );
- break;
- case 'X-WR-TIMEZONE':
- if ( ! $this->timezone )
- $this->timezone = $this->timezone_from_string( $value );
- break;
- default:
- $this->add_component( $type, $keyword, $value );
- break;
- }
- }
-
- // Filter for RECURRENCE-IDs
- $recurrences = array();
- if ( array_key_exists( 'VEVENT', $this->cal ) ) {
- foreach ( $this->cal['VEVENT'] as $event ) {
- if ( isset( $event['RECURRENCE-ID'] ) ) {
- $recurrences[] = $event;
- }
- }
- foreach ( $recurrences as $recurrence ) {
- for ( $i = 0; $i < count( $this->cal['VEVENT'] ); $i++ ) {
- if ( $this->cal['VEVENT'][ $i ]['UID'] == $recurrence['UID'] && ! isset( $this->cal['VEVENT'][ $i ]['RECURRENCE-ID'] ) ) {
- $this->cal['VEVENT'][ $i ]['EXDATE'][] = $recurrence['RECURRENCE-ID'];
- break;
- }
- }
- }
- }
-
- return $this->cal;
- }
-
- /**
- * Parse key:value from a string
- *
- * @param string $text (default: '')
- * @return array
- */
- public function key_value_from_string( $text = '' ) {
- preg_match( '/([^:]+)(;[^:]+)?[:]([\w\W]*)/', $text, $matches );
-
- if ( 0 == count( $matches ) )
- return false;
-
- return array( $matches[1], $matches[3] );
- }
-
- /**
- * Convert a timezone name into a timezone object.
- *
- * @param string $text Timezone name. Example: America/Chicago
- * @return object|null A DateTimeZone object if the conversion was successful.
- */
- private function timezone_from_string( $text ) {
- try {
- $timezone = new DateTimeZone( $text );
- } catch ( Exception $e ) {
- $blog_timezone = get_option( 'timezone_string' );
- if ( ! $blog_timezone ) {
- $blog_timezone = 'Etc/UTC';
- }
-
- $timezone = new DateTimeZone( $blog_timezone );
- }
-
- return $timezone;
- }
-
- /**
- * Add a component to the calendar array
- *
- * @param string $component (default: '')
- * @param string $keyword (default: '')
- * @param string $value (default: '')
- * @return void
- */
- public function add_component( $component = '', $keyword = '', $value = '' ) {
- if ( false == $keyword ) {
- $keyword = $this->last_keyword;
- switch ( $component ) {
- case 'VEVENT':
- $value = $this->cal[ $component ][ $this->event_count - 1 ][ $keyword ] . $value;
- break;
- case 'VTODO' :
- $value = $this->cal[ $component ][ $this->todo_count - 1 ][ $keyword ] . $value;
- break;
- }
- }
-
- /*
- * Some events have a specific timezone set in their start/end date,
- * and it may or may not be different than the calendar timzeone.
- * Valid formats include:
- * DTSTART;TZID=Pacific Standard Time:20141219T180000
- * DTEND;TZID=Pacific Standard Time:20141219T200000
- * EXDATE:19960402T010000Z,19960403T010000Z,19960404T010000Z
- * EXDATE;VALUE=DATE:2015050
- * EXDATE;TZID=America/New_York:20150424T170000
- * EXDATE;TZID=Pacific Standard Time:20120615T140000,20120629T140000,20120706T140000
- */
-
- // Always store EXDATE as an array
- if ( stristr( $keyword, 'EXDATE' ) ) {
- $value = explode( ',', $value );
- }
-
- // Adjust DTSTART, DTEND, and EXDATE according to their TZID if set
- if ( strpos( $keyword, ';' ) && ( stristr( $keyword, 'DTSTART' ) || stristr( $keyword, 'DTEND' ) || stristr( $keyword, 'EXDATE' ) || stristr( $keyword, 'RECURRENCE-ID' ) ) ) {
- $keyword = explode( ';', $keyword );
-
- $tzid = false;
- if ( 2 == count( $keyword ) ) {
- $tparam = $keyword[1];
-
- if ( strpos( $tparam, "TZID" ) !== false ) {
- $tzid = $this->timezone_from_string( str_replace( 'TZID=', '', $tparam ) );
- }
- }
-
- // Normalize all times to default UTC
- if ( $tzid ) {
- $adjusted_times = array();
- foreach ( (array) $value as $v ) {
- try {
- $adjusted_time = new DateTime( $v, $tzid );
- $adjusted_time->setTimeZone( new DateTimeZone( 'UTC' ) );
- $adjusted_times[] = $adjusted_time->format('Ymd\THis');
- } catch ( Exception $e ) {
- // Invalid argument to DateTime
- return;
- }
- }
- $value = $adjusted_times;
- }
-
- // Format for adding to event
- $keyword = $keyword[0];
- if ( 'EXDATE' != $keyword ) {
- $value = implode( (array) $value );
- }
- }
-
- foreach ( (array) $value as $v ) {
- switch ($component) {
- case 'VTODO':
- if ( 'EXDATE' == $keyword ) {
- $this->cal[ $component ][ $this->todo_count - 1 ][ $keyword ][] = $v;
- } else {
- $this->cal[ $component ][ $this->todo_count - 1 ][ $keyword ] = $v;
- }
- break;
- case 'VEVENT':
- if ( 'EXDATE' == $keyword ) {
- $this->cal[ $component ][ $this->event_count - 1 ][ $keyword ][] = $v;
- } else {
- $this->cal[ $component ][ $this->event_count - 1 ][ $keyword ] = $v;
- }
- break;
- default:
- $this->cal[ $component ][ $keyword ] = $v;
- break;
- }
- }
- $this->last_keyword = $keyword;
- }
-
- /**
- * Escape strings with wp_kses, allow links
- *
- * @param string $string (default: '')
- * @return string
- */
- public function escape( $string = '' ) {
- // Unfold content lines per RFC 5545
- $string = str_replace( "\n\t", '', $string );
- $string = str_replace( "\n ", '', $string );
-
- $allowed_html = array(
- 'a' => array(
- 'href' => array(),
- 'title' => array()
- )
- );
-
- $allowed_tags = '';
- foreach ( array_keys( $allowed_html ) as $tag ) {
- $allowed_tags .= "<{$tag}>";
- }
-
- // Running strip_tags() first with allowed tags to get rid of remaining gallery markup, etc
- // because wp_kses() would only htmlentity'fy that. Then still running wp_kses(), for extra
- // safety and good measure.
- return wp_kses( strip_tags( $string, $allowed_tags ), $allowed_html );
- }
-
- /**
- * Render the events
- *
- * @param string $url (default: '')
- * @param string $context (default: 'widget') or 'shortcode'
- * @return mixed bool|string false on failure, rendered HTML string on success.
- */
- public function render( $url = '', $args = array() ) {
-
- $args = wp_parse_args( $args, array(
- 'context' => 'widget',
- 'number' => 5
- ) );
-
- $events = $this->get_events( $url, $args['number'] );
- $events = $this->apply_timezone_offset( $events );
-
- if ( empty( $events ) )
- return false;
-
- ob_start();
-
- if ( 'widget' == $args['context'] ) : ?>
- <ul class="upcoming-events">
- <?php foreach ( $events as $event ) : ?>
- <li>
- <strong class="event-summary"><?php echo $this->escape( stripslashes( $event['SUMMARY'] ) ); ?></strong>
- <span class="event-when"><?php echo $this->formatted_date( $event ); ?></span>
- <?php if ( ! empty( $event['LOCATION'] ) ) : ?>
- <span class="event-location"><?php echo $this->escape( stripslashes( $event['LOCATION'] ) ); ?></span>
- <?php endif; ?>
- <?php if ( ! empty( $event['DESCRIPTION'] ) ) : ?>
- <span class="event-description"><?php echo wp_trim_words( $this->escape( stripcslashes( $event['DESCRIPTION'] ) ) ); ?></span>
- <?php endif; ?>
- </li>
- <?php endforeach; ?>
- </ul>
- <?php endif;
-
- if ( 'shortcode' == $args['context'] ) : ?>
- <table class="upcoming-events">
- <thead>
- <tr>
- <th><?php esc_html_e( 'Location', 'jetpack' ); ?></th>
- <th><?php esc_html_e( 'When', 'jetpack' ); ?></th>
- <th><?php esc_html_e( 'Summary', 'jetpack' ); ?></th>
- <th><?php esc_html_e( 'Description', 'jetpack' ); ?></th>
- </tr>
- </thead>
- <tbody>
- <?php foreach ( $events as $event ) : ?>
- <tr>
- <td><?php echo empty( $event['LOCATION'] ) ? '&nbsp;' : $this->escape( stripslashes( $event['LOCATION'] ) ); ?></td>
- <td><?php echo $this->formatted_date( $event ); ?></td>
- <td><?php echo empty( $event['SUMMARY'] ) ? '&nbsp;' : $this->escape( stripslashes( $event['SUMMARY'] ) ); ?></td>
- <td><?php echo empty( $event['DESCRIPTION'] ) ? '&nbsp;' : wp_trim_words( $this->escape( stripcslashes( $event['DESCRIPTION'] ) ) ); ?></td>
- </tr>
- <?php endforeach; ?>
- </tbody>
- </table>
- <?php endif;
-
- $rendered = ob_get_clean();
-
- if ( empty( $rendered ) )
- return false;
-
- return $rendered;
- }
-
- public function formatted_date( $event ) {
-
- $date_format = get_option( 'date_format' );
- $time_format = get_option( 'time_format' );
- $start = strtotime( $event['DTSTART'] );
- $end = isset( $event['DTEND'] ) ? strtotime( $event['DTEND'] ) : false;
-
- $all_day = ( 8 == strlen( $event['DTSTART'] ) );
-
- if ( !$all_day && $this->timezone ) {
- try {
- $start_time = new DateTime( $event['DTSTART'] );
- $timezone_offset = $this->timezone->getOffset( $start_time );
- $start += $timezone_offset;
-
- if ( $end ) {
- $end += $timezone_offset;
- }
- } catch ( Exception $e ) {
- // Invalid argument to DateTime
- }
- }
- $single_day = $end ? ( $end - $start ) <= DAY_IN_SECONDS : true;
-
- /* translators: Date and time */
- $date_with_time = __( '%1$s at %2$s' , 'jetpack' );
- /* translators: Two dates with a separator */
- $two_dates = __( '%1$s &ndash; %2$s' , 'jetpack' );
-
- // we'll always have the start date. Maybe with time
- if ( $all_day )
- $date = date_i18n( $date_format, $start );
- else
- $date = sprintf( $date_with_time, date_i18n( $date_format, $start ), date_i18n( $time_format, $start ) );
-
- // single day, timed
- if ( $single_day && ! $all_day && false !== $end )
- $date = sprintf( $two_dates, $date, date_i18n( $time_format, $end ) );
-
- // multi-day
- if ( ! $single_day ) {
-
- if ( $all_day ) {
- // DTEND for multi-day events represents "until", not "including", so subtract one minute
- $end_date = date_i18n( $date_format, $end - 60 );
- } else {
- $end_date = sprintf( $date_with_time, date_i18n( $date_format, $end ), date_i18n( $time_format, $end ) );
- }
-
- $date = sprintf( $two_dates, $date, $end_date );
-
- }
-
- return $date;
- }
-
- protected function sort_by_recent( $list ) {
- $dates = $sorted_list = array();
-
- foreach ( $list as $key => $row ) {
- $date = $row['DTSTART'];
- // pad some time onto an all day date
- if ( 8 === strlen( $date ) )
- $date .= 'T000000Z';
- $dates[$key] = $date;
- }
- asort( $dates );
- foreach( $dates as $key => $value ) {
- $sorted_list[$key] = $list[$key];
- }
- unset($list);
- return $sorted_list;
- }
-
-}
-
-
-/**
- * Wrapper function for iCalendarReader->get_events()
- *
- * @param string $url (default: '')
- * @return array
- */
-function icalendar_get_events( $url = '', $count = 5 ) {
- // Find your calendar's address http://support.google.com/calendar/bin/answer.py?hl=en&answer=37103
- $ical = new iCalendarReader();
- return $ical->get_events( $url, $count );
-}
-
-/**
- * Wrapper function for iCalendarReader->render()
- *
- * @param string $url (default: '')
- * @param string $context (default: 'widget') or 'shortcode'
- * @return mixed bool|string false on failure, rendered HTML string on success.
- */
-function icalendar_render_events( $url = '', $args = array() ) {
- $ical = new iCalendarReader();
- return $ical->render( $url, $args );
-}
diff --git a/plugins/jetpack/_inc/lib/jetpack-wpes-query-builder/jetpack-wpes-query-builder.php b/plugins/jetpack/_inc/lib/jetpack-wpes-query-builder/jetpack-wpes-query-builder.php
deleted file mode 100644
index d3481ce5..00000000
--- a/plugins/jetpack/_inc/lib/jetpack-wpes-query-builder/jetpack-wpes-query-builder.php
+++ /dev/null
@@ -1,341 +0,0 @@
-<?php
-
-
-/**
- * Provides an interface for easily building a complex search query that
- * combines multiple ranking signals.
- *
- *
- * $bldr = new Jetpack_WPES_Query_Builder();
- * $bldr->add_filter( ... );
- * $bldr->add_filter( ... );
- * $bldr->add_query( ... );
- * $es_query = $bldr->build_query();
- *
- *
- * All ES queries take a standard form with main query (with some filters),
- * wrapped in a function_score
- *
- * Bucketed queries use an aggregation to diversify results. eg a bunch
- * of separate filters where to get different sets of results.
- *
- */
-
-class Jetpack_WPES_Query_Builder {
-
- protected $es_filters = array();
-
- // Custom boosting with function_score
- protected $functions = array();
- protected $decays = array();
- protected $scripts = array();
- protected $functions_max_boost = 2.0;
- protected $functions_score_mode = 'multiply';
- protected $query_bool_boost = null;
-
- // General aggregations for buckets and metrics
- protected $aggs_query = false;
- protected $aggs = array();
-
- // The set of top level text queries to combine
- protected $must_queries = array();
- protected $should_queries = array();
- protected $dis_max_queries = array();
-
- protected $diverse_buckets_query = false;
- protected $bucket_filters = array();
- protected $bucket_sub_aggs = array();
-
- ////////////////////////////////////
- // Methods for building a query
-
- public function add_filter( $filter ) {
- $this->es_filters[] = $filter;
- }
-
- public function add_query( $query, $type = 'must' ) {
- switch ( $type ) {
- case 'dis_max':
- $this->dis_max_queries[] = $query;
- break;
-
- case 'should':
- $this->should_queries[] = $query;
- break;
-
- case 'must':
- default:
- $this->must_queries[] = $query;
- break;
- }
- }
-
- /**
- * Add a scoring function to the query
- *
- * NOTE: For decays (linear, exp, or gauss), use Jetpack_WPES_Query_Builder::add_decay() instead
- *
- * @see https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html
- *
- * @param $function string name of the function
- * @param $params array functions parameters
- *
- * @return void
- */
- public function add_function( $function, $params ) {
- $this->functions[ $function ][] = $params;
- }
-
- /**
- * Add a decay function to score results
- *
- * This method should be used instead of Jetpack_WPES_Query_Builder::add_function() for decays, as the internal ES structure
- * is slightly different for them.
- *
- * @see https://www.elastic.co/guide/en/elasticsearch/guide/current/decay-functions.html
- *
- * @param $function string name of the decay function - linear, exp, or gauss
- * @param $params array The decay functions parameters, passed to ES directly
- *
- * @return void
- */
- public function add_decay( $function, $params ) {
- $this->decays[ $function ][] = $params;
- }
-
- /**
- * Add a scoring mode to the query
- *
- * @see https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html
- *
- * @param $mode string name of how to score
- *
- * @return void
- */
- public function add_score_mode_to_functions( $mode='multiply' ) {
- $this->functions_score_mode = $mode;
- }
-
- public function add_max_boost_to_functions( $boost ) {
- $this->functions_max_boost = $boost;
- }
-
- public function add_boost_to_query_bool( $boost ) {
- $this->query_bool_boost = $boost;
- }
-
- public function add_aggs( $aggs_name, $aggs ) {
- $this->aggs_query = true;
- $this->aggs[$aggs_name] = $aggs;
- }
-
- public function add_aggs_sub_aggs( $aggs_name, $sub_aggs ) {
- if ( ! array_key_exists( 'aggs', $this->aggs[$aggs_name] ) ) {
- $this->aggs[$aggs_name]['aggs'] = array();
- }
- $this->aggs[$aggs_name]['aggs'] = $sub_aggs;
- }
-
- public function add_bucketed_query( $name, $query ) {
- $this->_add_bucket_filter( $name, $query );
-
- $this->add_query( $query, 'dis_max' );
- }
-
- public function add_bucketed_terms( $name, $field, $terms, $boost = 1 ) {
- if ( ! is_array( $terms ) ) {
- $terms = array( $terms );
- }
-
- $this->_add_bucket_filter( $name, array(
- 'terms' => array(
- $field => $terms,
- ),
- ));
-
- $this->add_query( array(
- 'constant_score' => array(
- 'filter' => array(
- 'terms' => array(
- $field => $terms,
- ),
- ),
- 'boost' => $boost,
- ),
- ), 'dis_max' );
- }
-
- public function add_bucket_sub_aggs( $agg ) {
- $this->bucket_sub_aggs = array_merge( $this->bucket_sub_aggs, $agg );
- }
-
- protected function _add_bucket_filter( $name, $filter ) {
- $this->diverse_buckets_query = true;
- $this->bucket_filters[ $name ] = $filter;
- }
-
- ////////////////////////////////////
- // Building Final Query
-
- /**
- * Combine all the queries, functions, decays, scripts, and max_boost into an ES query
- *
- * @return array Array representation of the built ES query
- */
- public function build_query() {
- $query = array();
-
- //dis_max queries just become a single must query
- if ( ! empty( $this->dis_max_queries ) ) {
- $this->must_queries[] = array(
- 'dis_max' => array(
- 'queries' => $this->dis_max_queries,
- ),
- );
- }
-
- if ( empty( $this->must_queries ) ) {
- $this->must_queries = array(
- array(
- 'match_all' => array(),
- ),
- );
- }
-
- if ( empty( $this->should_queries ) ) {
- if ( 1 == count( $this->must_queries ) ) {
- $query = $this->must_queries[0];
- } else {
- $query = array(
- 'bool' => array(
- 'must' => $this->must_queries,
- ),
- );
- }
- } else {
- $query = array(
- 'bool' => array(
- 'must' => $this->must_queries,
- 'should' => $this->should_queries,
- ),
- );
- }
-
- if ( ! is_null( $this->query_bool_boost ) && isset( $query['bool'] ) ) {
- $query['bool']['boost'] = $this->query_bool_boost;
- }
-
- // If there are any function score adjustments, then combine those
- if ( $this->functions || $this->decays || $this->scripts ) {
- $weighting_functions = array();
-
- if ( $this->functions ) {
- foreach ( $this->functions as $function_type => $configs ) {
- foreach ( $configs as $config ) {
- foreach ( $config as $field => $params ) {
- $func_arr = $params;
-
- $func_arr['field'] = $field;
-
- $weighting_functions[] = array(
- $function_type => $func_arr,
- );
- }
- }
- }
- }
-
- if ( $this->decays ) {
- foreach ( $this->decays as $decay_type => $configs ) {
- foreach ( $configs as $config ) {
- foreach ( $config as $field => $params ) {
- $weighting_functions[] = array(
- $decay_type => array(
- $field => $params,
- ),
- );
- }
- }
- }
- }
-
- if ( $this->scripts ) {
- foreach ( $this->scripts as $script ) {
- $weighting_functions[] = array(
- 'script_score' => array(
- 'script' => $script,
- ),
- );
- }
- }
-
- $query = array(
- 'function_score' => array(
- 'query' => $query,
- 'functions' => $weighting_functions,
- 'max_boost' => $this->functions_max_boost,
- 'score_mode' => $this->functions_score_mode,
- ),
- );
- } // End if().
-
- return $query;
- }
-
- /**
- * Assemble the 'filter' portion of an ES query, from all registered filters
- *
- * @return array|null Combined ES filters, or null if none have been defined
- */
- public function build_filter() {
- if ( empty( $this->es_filters ) ) {
- $filter = null;
- } elseif ( 1 == count( $this->es_filters ) ) {
- $filter = $this->es_filters[0];
- } else {
- $filter = array(
- 'and' => $this->es_filters,
- );
- }
-
- return $filter;
- }
-
- /**
- * Assemble the 'aggregation' portion of an ES query, from all general aggregations.
- *
- * @return array An aggregation query as an array of topics, filters, and bucket names
- */
- public function build_aggregation() {
- if ( empty( $this->bucket_sub_aggs ) && empty( $this->aggs_query ) ) {
- return array();
- }
-
- if ( ! $this->diverse_buckets_query && empty( $this->aggs_query ) ) {
- return $this->bucket_sub_aggs;
- }
-
- $aggregations = array(
- 'topics' => array(
- 'filters' => array(
- 'filters' => array(),
- ),
- ),
- );
-
- if ( ! empty( $this->bucket_sub_aggs ) ) {
- $aggregations['topics']['aggs'] = $this->bucket_sub_aggs;
- }
-
- foreach ( $this->bucket_filters as $bucket_name => $filter ) {
- $aggregations['topics']['filters']['filters'][ $bucket_name ] = $filter;
- }
-
- if ( ! empty( $this->aggs_query ) ) {
- $aggregations = $this->aggs;
- }
-
- return $aggregations;
- }
-
-}
diff --git a/plugins/jetpack/_inc/lib/jetpack-wpes-query-builder/jetpack-wpes-query-parser.php b/plugins/jetpack/_inc/lib/jetpack-wpes-query-builder/jetpack-wpes-query-parser.php
deleted file mode 100644
index 2b7710cb..00000000
--- a/plugins/jetpack/_inc/lib/jetpack-wpes-query-builder/jetpack-wpes-query-parser.php
+++ /dev/null
@@ -1,683 +0,0 @@
-<?php
-
-/**
- * Parse a pure text query into WordPress Elasticsearch query. This builds on
- * the Jetpack_WPES_Query_Builder() to provide search query parsing.
- *
- * The key part of this parser is taking a user's query string typed into a box
- * and converting it into an ES search query.
- *
- * This varies by application, but roughly it means extracting some parts of the query
- * (authors, tags, and phrases) that are treated as a filter. Then taking the
- * remaining words and building the correct query (possibly with prefix searching
- * if we are doing search as you type)
- *
- * This class only supports ES 2.x+
- *
- * This parser builds queries of the form:
- * bool:
- * must:
- * AND match of a single field (ideally an edgengram field)
- * filter:
- * filter clauses from context (eg @gibrown, #news, etc)
- * should:
- * boosting of results by various fields
- *
- * Features supported:
- * - search as you type
- * - phrases
- * - supports querying across multiple languages at once
- *
- * Example usage (from Search on Reader Manage):
- *
- * require_lib( 'jetpack-wpes-query-builder/jetpack-wpes-search-query-parser' );
- * $parser = new WPES_Search_Query_Parser( $args['q'], array( $lang ) );
- *
- * //author
- * $parser->author_field_filter( array(
- * 'prefixes' => array( '@' ),
- * 'wpcom_id_field' => 'author_id',
- * 'must_query_fields' => array( 'author.engram', 'author_login.engram' ),
- * 'boost_query_fields' => array( 'author^2', 'author_login^2', 'title.default.engram' ),
- * ) );
- *
- * //remainder of query
- * $match_content_fields = $parser->merge_ml_fields(
- * array(
- * 'all_content' => 0.1,
- * ),
- * array(
- * 'all_content.default.engram^0.1',
- * )
- * );
- * $boost_content_fields = $parser->merge_ml_fields(
- * array(
- * 'title' => 2,
- * 'description' => 1,
- * 'tags' => 1,
- * ),
- * array(
- * 'author_login^2',
- * 'author^2',
- * )
- * );
- *
- * $parser->phrase_filter( array(
- * 'must_query_fields' => $match_content_fields,
- * 'boost_query_fields' => $boost_content_fields,
- * ) );
- * $parser->remaining_query( array(
- * 'must_query_fields' => $match_content_fields,
- * 'boost_query_fields' => $boost_content_fields,
- * ) );
- *
- * //Boost on phrases
- * $parser->remaining_query( array(
- * 'boost_query_fields' => $boost_content_fields,
- * 'boost_query_type' => 'phrase',
- * ) );
- *
- * //boosting
- * $parser->add_max_boost_to_functions( 20 );
- * $parser->add_function( 'field_value_factor', array(
- * 'follower_count' => array(
- * 'modifier' => 'sqrt',
- * 'factor' => 1,
- * 'missing' => 0,
- * ) ) );
- *
- * //Filtering
- * $parser->add_filter( array(
- * 'exists' => array( 'field' => 'langs.' . $lang )
- * ) );
- *
- * //run the query
- * $es_query_args = array(
- * 'name' => 'feeds',
- * 'blog_id' => false,
- * 'security_strategy' => 'a8c',
- * 'type' => 'feed,blog',
- * 'fields' => array( 'blog_id', 'feed_id' ),
- * 'query' => $parser->build_query(),
- * 'filter' => $parser->build_filter(),
- * 'size' => $size,
- * 'from' => $from
- * );
- * $es_results = es_api_search_index( $es_query_args, 'api-feed-find' );
- *
- */
-
-jetpack_require_lib( 'jetpack-wpes-query-builder' );
-
-class Jetpack_WPES_Search_Query_Parser extends Jetpack_WPES_Query_Builder {
-
- protected $orig_query = '';
- protected $current_query = '';
- protected $langs;
- protected $avail_langs = array( 'ar', 'bg', 'ca', 'cs', 'da', 'de', 'el', 'en', 'es', 'eu', 'fa', 'fi', 'fr', 'he', 'hi', 'hu', 'hy', 'id', 'it', 'ja', 'ko', 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr', 'zh' );
-
- public function __construct( $user_query, $langs ) {
- $this->orig_query = $user_query;
- $this->current_query = $this->orig_query;
- $this->langs = $this->norm_langs( $langs );
- }
-
- protected $extracted_phrases = array();
-
- ///////////////////////////////////////////////////////
- // Methods for Building arrays of multilingual fields
-
- /*
- * Normalize language codes
- */
- public function norm_langs( $langs ) {
- $lst = array();
- foreach( $langs as $l ) {
- $l = strtok( $l, '-_' );
- if ( in_array( $l, $this->avail_langs ) ) {
- $lst[$l] = true;
- } else {
- $lst['default'] = true;
- }
- }
- return array_keys( $lst );
- }
-
- /*
- * Take a list of field prefixes and expand them for multi-lingual
- * with the provided boostings.
- */
- public function merge_ml_fields( $fields2boosts, $additional_fields ) {
- $flds = array();
- foreach( $fields2boosts as $f => $b ) {
- foreach( $this->langs as $l ) {
- $flds[] = $f . '.' . $l . '^' . $b;
- }
- }
- foreach( $additional_fields as $f ) {
- $flds[] = $f;
- }
- return $flds;
- }
-
- ////////////////////////////////////
- // Extract Fields for Filtering on
-
- /*
- * Extract any @mentions from the user query
- * use them as a filter if we can find a wp.com id
- * otherwise use them as a
- *
- * args:
- * wpcom_id_field: wp.com id field
- * must_query_fields: array of fields to search for matching results (optional)
- * boost_query_fields: array of fields to search in for boosting results (optional)
- * prefixes: array of prefixes that the user can use to indicate an author
- *
- * returns true/false of whether any were found
- *
- * See also: https://github.com/twitter/twitter-text/blob/master/java/src/com/twitter/Regex.java
- */
- public function author_field_filter( $args ) {
- $defaults = array(
- 'wpcom_id_field' => 'author_id',
- 'must_query_fields' => null,
- 'boost_query_fields' => null,
- 'prefixes' => array( '@' ),
- );
- $args = wp_parse_args( $args, $defaults );
-
- $names = array();
- foreach( $args['prefixes'] as $p ) {
- $found = $this->get_fields( $p );
- if ( $found ) {
- foreach( $found as $f ) {
- $names[] = $f;
- }
- }
- }
-
- if ( empty( $names ) ) {
- return false;
- }
-
- foreach( $args['prefixes'] as $p ) {
- $this->remove_fields( $p );
- }
-
- $user_ids = array();
- $query_names = array();
-
- //loop through the matches and separate into filters and queries
- foreach( $names as $n ) {
- //check for exact match on login
- $userdata = get_user_by( 'login', strtolower( $n ) );
- $filtering = false;
- if ( $userdata ) {
- $user_ids[ $userdata->ID ] = true;
- $filtering = true;
- }
-
- $is_phrase = false;
- if ( preg_match( '/"/', $n ) ) {
- $is_phrase = true;
- $n = preg_replace( '/"/', '', $n );
- }
-
- if ( !empty( $args['must_query_fields'] ) && !$filtering ) {
- if ( $is_phrase ) {
- $this->add_query( array(
- 'multi_match' => array(
- 'fields' => $args['must_query_fields'],
- 'query' => $n,
- 'type' => 'phrase',
- ) ) );
- } else {
- $this->add_query( array(
- 'multi_match' => array(
- 'fields' => $args['must_query_fields'],
- 'query' => $n,
- ) ) );
- }
- }
-
- if ( !empty( $args['boost_query_fields'] ) ) {
- if ( $is_phrase ) {
- $this->add_query( array(
- 'multi_match' => array(
- 'fields' => $args['boost_query_fields'],
- 'query' => $n,
- 'type' => 'phrase',
- ) ), 'should' );
- } else {
- $this->add_query( array(
- 'multi_match' => array(
- 'fields' => $args['boost_query_fields'],
- 'query' => $n,
- ) ), 'should' );
- }
- }
- }
-
- if ( ! empty( $user_ids ) ) {
- $user_ids = array_keys( $user_ids );
- $this->add_filter( array( 'terms' => array( $args['wpcom_id_field'] => $user_ids ) ) );
- }
-
- return true;
- }
-
- /*
- * Extract any prefix followed by text use them as a must clause,
- * and optionally as a boost to the should query
- * This can be used for hashtags. eg #News, or #"current events",
- * but also works for any arbitrary field. eg from:Greg
- *
- * args:
- * must_query_fields: array of fields that must match the tag (optional)
- * boost_query_fields: array of fields to boost search on (optional)
- * prefixes: array of prefixes that the user can use to indicate a tag
- *
- * returns true/false of whether any were found
- *
- */
- public function text_field_filter( $args ) {
- $defaults = array(
- 'must_query_fields' => array( 'tag.name' ),
- 'boost_query_fields' => array( 'tag.name' ),
- 'prefixes' => array( '#' ),
- );
- $args = wp_parse_args( $args, $defaults );
-
- $tags = array();
- foreach( $args['prefixes'] as $p ) {
- $found = $this->get_fields( $p );
- if ( $found ) {
- foreach( $found as $f ) {
- $tags[] = $f;
- }
- }
- }
-
- if ( empty( $tags ) ) {
- return false;
- }
-
- foreach( $args['prefixes'] as $p ) {
- $this->remove_fields( $p );
- }
-
- foreach( $tags as $t ) {
- $is_phrase = false;
- if ( preg_match( '/"/', $t ) ) {
- $is_phrase = true;
- $t = preg_replace( '/"/', '', $t );
- }
-
- if ( ! empty( $args['must_query_fields'] ) ) {
- if ( $is_phrase ) {
- $this->add_query( array(
- 'multi_match' => array(
- 'fields' => $args['must_query_fields'],
- 'query' => $t,
- 'type' => 'phrase',
- ) ) );
- } else {
- $this->add_query( array(
- 'multi_match' => array(
- 'fields' => $args['must_query_fields'],
- 'query' => $t,
- ) ) );
- }
- }
-
- if ( ! empty( $args['boost_query_fields'] ) ) {
- if ( $is_phrase ) {
- $this->add_query( array(
- 'multi_match' => array(
- 'fields' => $args['boost_query_fields'],
- 'query' => $t,
- 'type' => 'phrase',
- ) ), 'should' );
- } else {
- $this->add_query( array(
- 'multi_match' => array(
- 'fields' => $args['boost_query_fields'],
- 'query' => $t,
- ) ), 'should' );
- }
- }
- }
-
- return true;
- }
-
- /*
- * Extract anything surrounded by quotes or if there is an opening quote
- * that is not complete, and add them to the query as a phrase query.
- * Quotes can be either '' or ""
- *
- * args:
- * must_query_fields: array of fields that must match the phrases
- * boost_query_fields: array of fields to boost the phrases on (optional)
- *
- * returns true/false of whether any were found
- *
- */
- public function phrase_filter( $args ) {
- $defaults = array(
- 'must_query_fields' => array( 'all_content' ),
- 'boost_query_fields' => array( 'title' ),
- );
- $args = wp_parse_args( $args, $defaults );
-
- $phrases = array();
- if ( preg_match_all( '/"([^"]+)"/', $this->current_query, $matches ) ) {
- foreach ( $matches[1] as $match ) {
- $phrases[] = $match;
- }
- $this->current_query = preg_replace( '/"([^"]+)"/', '', $this->current_query );
- }
-
- if ( preg_match_all( "/'([^']+)'/", $this->current_query, $matches ) ) {
- foreach ( $matches[1] as $match ) {
- $phrases[] = $match;
- }
- $this->current_query = preg_replace( "/'([^']+)'/", '', $this->current_query );
- }
-
- //look for a final, uncompleted phrase
- $phrase_prefix = false;
- if ( preg_match_all( '/"([^"]+)$/', $this->current_query, $matches ) ) {
- $phrase_prefix = $matches[1][0];
- $this->current_query = preg_replace( '/"([^"]+)$/', '', $this->current_query );
- }
- if ( preg_match_all( "/(?:'\B|\B')([^']+)$/", $this->current_query, $matches ) ) {
- $phrase_prefix = $matches[1][0];
- $this->current_query = preg_replace( "/(?:'\B|\B')([^']+)$/", '', $this->current_query );
- }
-
- if ( $phrase_prefix ) {
- $phrases[] = $phrase_prefix;
- }
- if ( empty( $phrases ) ) {
- return false;
- }
-
- foreach ( $phrases as $p ) {
- $this->add_query( array(
- 'multi_match' => array(
- 'fields' => $args['must_query_fields'],
- 'query' => $p,
- 'type' => 'phrase',
- ) ) );
-
- if ( ! empty( $args['boost_query_fields'] ) ) {
- $this->add_query( array(
- 'multi_match' => array(
- 'fields' => $args['boost_query_fields'],
- 'query' => $p,
- 'operator' => 'and',
- ) ), 'should' );
- }
- }
-
- return true;
- }
-
- /*
- * Query fields based on the remaining parts of the query
- * This could be the final AND part of the query terms to match, or it
- * could be boosting certain elements of the query
- *
- * args:
- * must_query_fields: array of fields that must match the remaining terms (optional)
- * boost_query_fields: array of fields to boost the remaining terms on (optional)
- *
- */
- public function remaining_query( $args ) {
- $defaults = array(
- 'must_query_fields' => null,
- 'boost_query_fields' => null,
- 'boost_operator' => 'and',
- 'boost_query_type' => 'best_fields',
- );
- $args = wp_parse_args( $args, $defaults );
-
- if ( empty( $this->current_query ) || ctype_space( $this->current_query ) ) {
- return;
- }
-
- if ( ! empty( $args['must_query_fields'] ) ) {
- $this->add_query( array(
- 'multi_match' => array(
- 'fields' => $args['must_query_fields'],
- 'query' => $this->current_query,
- 'operator' => 'and',
- ) ) );
- }
-
- if ( ! empty( $args['boost_query_fields'] ) ) {
- $this->add_query( array(
- 'multi_match' => array(
- 'fields' => $args['boost_query_fields'],
- 'query' => $this->current_query,
- 'operator' => $args['boost_operator'],
- 'type' => $args['boost_query_type'],
- ) ), 'should' );
- }
-
- }
-
- /*
- * Query fields using a prefix query (alphabetical expansions on the index).
- * This is not recommended. Slower performance and worse relevancy.
- *
- * (UNTESTED! Copied from old prefix expansion code)
- *
- * args:
- * must_query_fields: array of fields that must match the remaining terms (optional)
- * boost_query_fields: array of fields to boost the remaining terms on (optional)
- *
- */
- public function remaining_prefix_query( $args ) {
- $defaults = array(
- 'must_query_fields' => array( 'all_content' ),
- 'boost_query_fields' => array( 'title' ),
- 'boost_operator' => 'and',
- 'boost_query_type' => 'best_fields',
- );
- $args = wp_parse_args( $args, $defaults );
-
- if ( empty( $this->current_query ) || ctype_space( $this->current_query ) ) {
- return;
- }
-
- //////////////////////////////////
- // Example cases to think about:
- // "elasticse"
- // "elasticsearch"
- // "elasticsearch "
- // "elasticsearch lucen"
- // "elasticsearch lucene"
- // "the future" - note the stopword which will match nothing!
- // "F1" - an exact match that also has tons of expansions
- // "こんにちは" ja "hello"
- // "こんにちは友人" ja "hello friend" - we just rely on the prefix phrase and ES to split words
- // - this could still be better I bet. Maybe we need to analyze with ES first?
- //
-
- /////////////////////////////
- //extract pieces of query
- // eg: "PREFIXREMAINDER PREFIXWORD"
- // "elasticsearch lucen"
-
- $prefix_word = false;
- $prefix_remainder = false;
- if ( preg_match_all( '/([^ ]+)$/', $this->current_query, $matches ) ) {
- $prefix_word = $matches[1][0];
- }
-
- $prefix_remainder = preg_replace( '/([^ ]+)$/', '', $this->current_query );
- if ( ctype_space( $prefix_remainder ) ) {
- $prefix_remainder = false;
- }
-
- if ( ! $prefix_word ) {
- //Space at the end of the query, so skip using a prefix query
- if ( ! empty( $args['must_query_fields'] ) ) {
- $this->add_query( array(
- 'multi_match' => array(
- 'fields' => $args['must_query_fields'],
- 'query' => $this->current_query,
- 'operator' => 'and',
- ) ) );
- }
-
- if ( ! empty( $args['boost_query_fields'] ) ) {
- $this->add_query( array(
- 'multi_match' => array(
- 'fields' => $args['boost_query_fields'],
- 'query' => $this->current_query,
- 'operator' => $args['boost_operator'],
- 'type' => $args['boost_query_type'],
- ) ), 'should' );
- }
- } else {
-
- //must match the prefix word and the prefix remainder
- if ( ! empty( $args['must_query_fields'] ) ) {
- //need to do an OR across a few fields to handle all cases
- $must_q = array( 'bool' => array( 'should' => array( ), 'minimum_should_match' => 1 ) );
-
- //treat all words as an exact search (boosts complete word like "news"
- //from prefixes of "newspaper")
- $must_q['bool']['should'][] = array( 'multi_match' => array(
- 'fields' => $this->all_fields,
- 'query' => $full_text,
- 'operator' => 'and',
- 'type' => 'cross_fields',
- ) );
-
- //always optimistically try and match the full text as a phrase
- //prefix "the futu" should try to match "the future"
- //otherwise the first stopword kinda breaks
- //This also works as the prefix match for a single word "elasticsea"
- $must_q['bool']['should'][] = array( 'multi_match' => array(
- 'fields' => $this->phrase_fields,
- 'query' => $full_text,
- 'operator' => 'and',
- 'type' => 'phrase_prefix',
- 'max_expansions' => 100,
- ) );
-
- if ( $prefix_remainder ) {
- //Multiple words found, so treat each word on its own and not just as
- //a part of a phrase
- //"elasticsearch lucen" => "elasticsearch" exact AND "lucen" prefix
- $q['bool']['should'][] = array( 'bool' => array(
- 'must' => array(
- array( 'multi_match' => array(
- 'fields' => $this->phrase_fields,
- 'query' => $prefix_word,
- 'operator' => 'and',
- 'type' => 'phrase_prefix',
- 'max_expansions' => 100,
- ) ),
- array( 'multi_match' => array(
- 'fields' => $this->all_fields,
- 'query' => $prefix_remainder,
- 'operator' => 'and',
- 'type' => 'cross_fields',
- ) ),
- )
- ) );
- }
-
- $this->add_query( $must_q );
- }
-
- //Now add any boosting of the query
- if ( ! empty( $args['boost_query_fields'] ) ) {
- //treat all words as an exact search (boosts complete word like "news"
- //from prefixes of "newspaper")
- $this->add_query( array(
- 'multi_match' => array(
- 'fields' => $args['boost_query_fields'],
- 'query' => $this->current_query,
- 'operator' => $args['boost_query_operator'],
- 'type' => $args['boost_query_type'],
- ) ), 'should' );
-
- //optimistically boost the full phrase prefix match
- $this->add_query( array(
- 'multi_match' => array(
- 'fields' => $args['boost_query_fields'],
- 'query' => $this->current_query,
- 'operator' => 'and',
- 'type' => 'phrase_prefix',
- 'max_expansions' => 100,
- ) ) );
- }
- }
- }
-
- /*
- * Boost results based on the lang probability overlaps
- *
- * args:
- * langs2prob: list of languages to search in with associated boosts
- */
- public function boost_lang_probs( $langs2prob ) {
- foreach( $langs2prob as $l => $p ) {
- $this->add_function( 'field_value_factor', array(
- 'modifier' => 'none',
- 'factor' => $p,
- 'missing' => 0.01, //1% chance doc did not have right lang detected
- ) );
- }
- }
-
- ////////////////////////////////////
- // Helper Methods
-
- //Get the text after some prefix. eg @gibrown, or @"Greg Brown"
- protected function get_fields( $field_prefix ) {
- $regex = '/' . $field_prefix . '(("[^"]+")|([^\\p{Z}]+))/';
- if ( preg_match_all( $regex, $this->current_query, $match ) ) {
- return $match[1];
- }
- return false;
- }
-
- //Remove the prefix and text from the query
- protected function remove_fields( $field_name ) {
- $regex = '/' . $field_name . '(("[^"]+")|([^\\p{Z}]+))/';
- $this->current_query = preg_replace( $regex, '', $this->current_query );
- }
-
- //Best effort string truncation that splits on word breaks
- protected function truncate_string( $string, $limit, $break=" " ) {
- if ( mb_strwidth( $string ) <= $limit ) {
- return $string;
- }
-
- // walk backwards from $limit to find first break
- $breakpoint = $limit;
- $broken = false;
- while ( $breakpoint > 0 ) {
- if ( $break === mb_strimwidth( $string, $breakpoint, 1 ) ) {
- $string = mb_strimwidth( $string, 0, $breakpoint );
- $broken = true;
- break;
- }
- $breakpoint--;
- }
- // if we weren't able to find a break, need to chop mid-word
- if ( !$broken ) {
- $string = mb_strimwidth( $string, 0, $limit );
- }
- return $string;
- }
-
-}
diff --git a/plugins/jetpack/_inc/lib/markdown/0-load.php b/plugins/jetpack/_inc/lib/markdown/0-load.php
deleted file mode 100644
index bf5993e3..00000000
--- a/plugins/jetpack/_inc/lib/markdown/0-load.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-
-if ( ! class_exists( 'MarkdownExtra_Parser' ) )
- jetpack_require_lib( 'markdown/extra' );
-
-jetpack_require_lib( 'markdown/gfm' );
diff --git a/plugins/jetpack/_inc/lib/markdown/README.md b/plugins/jetpack/_inc/lib/markdown/README.md
deleted file mode 100644
index 45f298d1..00000000
--- a/plugins/jetpack/_inc/lib/markdown/README.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Markdown parsing library
-
-Contains two libraries:
-
-* `/extra`
- - Gives you `MardownExtra_Parser` and `Markdown_Parser`
- - Docs at http://michelf.ca/projects/php-markdown/extra/
-
-* `/gfm` -- Github Flavored Markdown
- - Gives you `WPCom_GHF_Markdown_Parser`
- - It has the same interface as `MarkdownExtra_Parser`
- - Adds support for fenced code blocks: https://help.github.com/articles/creating-and-highlighting-code-blocks/#fenced-code-blocks
- - By default it replaces them with a code shortcode
- - You can change this using the `$use_code_shortcode` member variable
- - You can change the code shortcode wrapping with `$shortcode_start` and `$shortcode_end` member variables
- - The `$preserve_shortcodes` member variable will preserve all registered shortcodes untouched. Requires WordPress to be loaded for `get_shortcode_regex()`
- - The `$preserve_latex` member variable will preserve oldskool $latex yer-latex$ codes untouched.
- - The `$strip_paras` member variable will strip <p> tags because that's what WordPress likes.
- - See `WPCom_GHF_Markdown_Parser::__construct()` for how the above member variable defaults are set.
diff --git a/plugins/jetpack/_inc/lib/markdown/extra.php b/plugins/jetpack/_inc/lib/markdown/extra.php
deleted file mode 100644
index fd85a3c8..00000000
--- a/plugins/jetpack/_inc/lib/markdown/extra.php
+++ /dev/null
@@ -1,3207 +0,0 @@
-<?php
-#
-# Markdown Extra - A text-to-HTML conversion tool for web writers
-#
-# PHP Markdown & Extra
-# Copyright (c) 2004-2013 Michel Fortin
-# <http://michelf.ca/projects/php-markdown/>
-#
-# Original Markdown
-# Copyright (c) 2004-2006 John Gruber
-# <http://daringfireball.net/projects/markdown/>
-#
-# Tweaked to remove WordPress interface
-
-
-define( 'MARKDOWN_VERSION', "1.0.2" ); # 29 Nov 2013
-define( 'MARKDOWNEXTRA_VERSION', "1.2.8" ); # 29 Nov 2013
-
-
-#
-# Global default settings:
-#
-
-# Change to ">" for HTML output
-@define( 'MARKDOWN_EMPTY_ELEMENT_SUFFIX', " />");
-
-# Define the width of a tab for code blocks.
-@define( 'MARKDOWN_TAB_WIDTH', 4 );
-
-# Optional title attribute for footnote links and backlinks.
-@define( 'MARKDOWN_FN_LINK_TITLE', "" );
-@define( 'MARKDOWN_FN_BACKLINK_TITLE', "" );
-
-# Optional class attribute for footnote links and backlinks.
-@define( 'MARKDOWN_FN_LINK_CLASS', "jetpack-footnote" );
-@define( 'MARKDOWN_FN_BACKLINK_CLASS', "" );
-
-# Optional class prefix for fenced code block.
-@define( 'MARKDOWN_CODE_CLASS_PREFIX', "language-" );
-
-# Class attribute for code blocks goes on the `code` tag;
-# setting this to true will put attributes on the `pre` tag instead.
-@define( 'MARKDOWN_CODE_ATTR_ON_PRE', false );
-
-
-
-### Standard Function Interface ###
-
-@define( 'MARKDOWN_PARSER_CLASS', 'MarkdownExtra_Parser' );
-
-function Markdown($text) {
-#
-# Initialize the parser and return the result of its transform method.
-#
- # Setup static parser variable.
- static $parser;
- if (!isset($parser)) {
- $parser_class = MARKDOWN_PARSER_CLASS;
- $parser = new $parser_class;
- }
-
- # Transform text using parser.
- return $parser->transform($text);
-}
-
-/**
- * Returns the length of $text loosely counting the number of UTF-8 characters with regular expression.
- * Used by the Markdown_Parser class when mb_strlen is not available.
- *
- * @since 5.9
- *
- * @return string Length of the multibyte string
- *
- */
-function jetpack_utf8_strlen( $text ) {
- return preg_match_all( "/[\\x00-\\xBF]|[\\xC0-\\xFF][\\x80-\\xBF]*/", $text, $m );
-}
-
-#
-# Markdown Parser Class
-#
-
-class Markdown_Parser {
-
- ### Configuration Variables ###
-
- # Change to ">" for HTML output.
- public $empty_element_suffix = MARKDOWN_EMPTY_ELEMENT_SUFFIX;
- public $tab_width = MARKDOWN_TAB_WIDTH;
-
- # Change to `true` to disallow markup or entities.
- public $no_markup = false;
- public $no_entities = false;
-
- # Predefined urls and titles for reference links and images.
- public $predef_urls = array();
- public $predef_titles = array();
-
-
- ### Parser Implementation ###
-
- # Regex to match balanced [brackets].
- # Needed to insert a maximum bracked depth while converting to PHP.
- public $nested_brackets_depth = 6;
- public $nested_brackets_re;
-
- public $nested_url_parenthesis_depth = 4;
- public $nested_url_parenthesis_re;
-
- # Table of hash values for escaped characters:
- public $escape_chars = '\`*_{}[]()>#+-.!';
- public $escape_chars_re;
-
-
- function __construct() {
- #
- # Constructor function. Initialize appropriate member variables.
- #
- $this->_initDetab();
- $this->prepareItalicsAndBold();
-
- $this->nested_brackets_re =
- str_repeat('(?>[^\[\]]+|\[', $this->nested_brackets_depth).
- str_repeat('\])*', $this->nested_brackets_depth);
-
- $this->nested_url_parenthesis_re =
- str_repeat('(?>[^()\s]+|\(', $this->nested_url_parenthesis_depth).
- str_repeat('(?>\)))*', $this->nested_url_parenthesis_depth);
-
- $this->escape_chars_re = '['.preg_quote($this->escape_chars).']';
-
- # Sort document, block, and span gamut in ascendent priority order.
- asort($this->document_gamut);
- asort($this->block_gamut);
- asort($this->span_gamut);
- }
-
-
- # Internal hashes used during transformation.
- public $urls = array();
- public $titles = array();
- public $html_hashes = array();
-
- # Status flag to avoid invalid nesting.
- public $in_anchor = false;
-
-
- function setup() {
- #
- # Called before the transformation process starts to setup parser
- # states.
- #
- # Clear global hashes.
- $this->urls = $this->predef_urls;
- $this->titles = $this->predef_titles;
- $this->html_hashes = array();
-
- $this->in_anchor = false;
- }
-
- function teardown() {
- #
- # Called after the transformation process to clear any variable
- # which may be taking up memory unnecessarly.
- #
- $this->urls = array();
- $this->titles = array();
- $this->html_hashes = array();
- }
-
-
- function transform($text) {
- #
- # Main function. Performs some preprocessing on the input text
- # and pass it through the document gamut.
- #
- $this->setup();
-
- # Remove UTF-8 BOM and marker character in input, if present.
- $text = preg_replace('{^\xEF\xBB\xBF|\x1A}', '', $text);
-
- # Standardize line endings:
- # DOS to Unix and Mac to Unix
- $text = preg_replace('{\r\n?}', "\n", $text);
-
- # Make sure $text ends with a couple of newlines:
- $text .= "\n\n";
-
- # Convert all tabs to spaces.
- $text = $this->detab($text);
-
- # Turn block-level HTML blocks into hash entries
- $text = $this->hashHTMLBlocks($text);
-
- # Strip any lines consisting only of spaces and tabs.
- # This makes subsequent regexen easier to write, because we can
- # match consecutive blank lines with /\n+/ instead of something
- # contorted like /[ ]*\n+/ .
- $text = preg_replace('/^[ ]+$/m', '', $text);
-
- # Run document gamut methods.
- foreach ($this->document_gamut as $method => $priority) {
- $text = $this->$method($text);
- }
-
- $this->teardown();
-
- return $text . "\n";
- }
-
- public $document_gamut = array(
- # Strip link definitions, store in hashes.
- "stripLinkDefinitions" => 20,
-
- "runBasicBlockGamut" => 30,
- );
-
-
- function stripLinkDefinitions($text) {
- #
- # Strips link definitions from text, stores the URLs and titles in
- # hash references.
- #
- $less_than_tab = $this->tab_width - 1;
-
- # Link defs are in the form: ^[id]: url "optional title"
- $text = preg_replace_callback('{
- ^[ ]{0,'.$less_than_tab.'}\[(.+)\][ ]?: # id = $1
- [ ]*
- \n? # maybe *one* newline
- [ ]*
- (?:
- <(.+?)> # url = $2
- |
- (\S+?) # url = $3
- )
- [ ]*
- \n? # maybe one newline
- [ ]*
- (?:
- (?<=\s) # lookbehind for whitespace
- ["(]
- (.*?) # title = $4
- [")]
- [ ]*
- )? # title is optional
- (?:\n+|\Z)
- }xm',
- array(&$this, '_stripLinkDefinitions_callback'),
- $text);
- return $text;
- }
- function _stripLinkDefinitions_callback($matches) {
- $link_id = strtolower($matches[1]);
- $url = $matches[2] == '' ? $matches[3] : $matches[2];
- $this->urls[$link_id] = $url;
- $this->titles[$link_id] =& $matches[4];
- return ''; # String that will replace the block
- }
-
-
- function hashHTMLBlocks($text) {
- if ($this->no_markup) return $text;
-
- $less_than_tab = $this->tab_width - 1;
-
- # Hashify HTML blocks:
- # We only want to do this for block-level HTML tags, such as headers,
- # lists, and tables. That's because we still want to wrap <p>s around
- # "paragraphs" that are wrapped in non-block-level tags, such as anchors,
- # phrase emphasis, and spans. The list of tags we're looking for is
- # hard-coded:
- #
- # * List "a" is made of tags which can be both inline or block-level.
- # These will be treated block-level when the start tag is alone on
- # its line, otherwise they're not matched here and will be taken as
- # inline later.
- # * List "b" is made of tags which are always block-level;
- #
- $block_tags_a_re = 'ins|del';
- $block_tags_b_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|'.
- 'script|noscript|form|fieldset|iframe|math|svg|'.
- 'article|section|nav|aside|hgroup|header|footer|'.
- 'figure';
-
- # Regular expression for the content of a block tag.
- $nested_tags_level = 4;
- $attr = '
- (?> # optional tag attributes
- \s # starts with whitespace
- (?>
- [^>"/]+ # text outside quotes
- |
- /+(?!>) # slash not followed by ">"
- |
- "[^"]*" # text inside double quotes (tolerate ">")
- |
- \'[^\']*\' # text inside single quotes (tolerate ">")
- )*
- )?
- ';
- $content =
- str_repeat('
- (?>
- [^<]+ # content without tag
- |
- <\2 # nested opening tag
- '.$attr.' # attributes
- (?>
- />
- |
- >', $nested_tags_level). # end of opening tag
- '.*?'. # last level nested tag content
- str_repeat('
- </\2\s*> # closing nested tag
- )
- |
- <(?!/\2\s*> # other tags with a different name
- )
- )*',
- $nested_tags_level);
- $content2 = str_replace('\2', '\3', $content);
-
- # First, look for nested blocks, e.g.:
- # <div>
- # <div>
- # tags for inner block must be indented.
- # </div>
- # </div>
- #
- # The outermost tags must start at the left margin for this to match, and
- # the inner nested divs must be indented.
- # We need to do this before the next, more liberal match, because the next
- # match will start at the first `<div>` and stop at the first `</div>`.
- $text = preg_replace_callback('{(?>
- (?>
- (?<=\n\n) # Starting after a blank line
- | # or
- \A\n? # the beginning of the doc
- )
- ( # save in $1
-
- # Match from `\n<tag>` to `</tag>\n`, handling nested tags
- # in between.
-
- [ ]{0,'.$less_than_tab.'}
- <('.$block_tags_b_re.')# start tag = $2
- '.$attr.'> # attributes followed by > and \n
- '.$content.' # content, support nesting
- </\2> # the matching end tag
- [ ]* # trailing spaces/tabs
- (?=\n+|\Z) # followed by a newline or end of document
-
- | # Special version for tags of group a.
-
- [ ]{0,'.$less_than_tab.'}
- <('.$block_tags_a_re.')# start tag = $3
- '.$attr.'>[ ]*\n # attributes followed by >
- '.$content2.' # content, support nesting
- </\3> # the matching end tag
- [ ]* # trailing spaces/tabs
- (?=\n+|\Z) # followed by a newline or end of document
-
- | # Special case just for <hr />. It was easier to make a special
- # case than to make the other regex more complicated.
-
- [ ]{0,'.$less_than_tab.'}
- <(hr) # start tag = $2
- '.$attr.' # attributes
- /?> # the matching end tag
- [ ]*
- (?=\n{2,}|\Z) # followed by a blank line or end of document
-
- | # Special case for standalone HTML comments:
-
- [ ]{0,'.$less_than_tab.'}
- (?s:
- <!-- .*? -->
- )
- [ ]*
- (?=\n{2,}|\Z) # followed by a blank line or end of document
-
- | # PHP and ASP-style processor instructions (<? and <%)
-
- [ ]{0,'.$less_than_tab.'}
- (?s:
- <([?%]) # $2
- .*?
- \2>
- )
- [ ]*
- (?=\n{2,}|\Z) # followed by a blank line or end of document
-
- )
- )}Sxmi',
- array(&$this, '_hashHTMLBlocks_callback'),
- $text);
-
- return $text;
- }
- function _hashHTMLBlocks_callback($matches) {
- $text = $matches[1];
- $key = $this->hashBlock($text);
- return "\n\n$key\n\n";
- }
-
-
- function hashPart($text, $boundary = 'X') {
- #
- # Called whenever a tag must be hashed when a function insert an atomic
- # element in the text stream. Passing $text to through this function gives
- # a unique text-token which will be reverted back when calling unhash.
- #
- # The $boundary argument specify what character should be used to surround
- # the token. By convension, "B" is used for block elements that needs not
- # to be wrapped into paragraph tags at the end, ":" is used for elements
- # that are word separators and "X" is used in the general case.
- #
- # Swap back any tag hash found in $text so we do not have to `unhash`
- # multiple times at the end.
- $text = $this->unhash($text);
-
- # Then hash the block.
- static $i = 0;
- $key = "$boundary\x1A" . ++$i . $boundary;
- $this->html_hashes[$key] = $text;
- return $key; # String that will replace the tag.
- }
-
-
- function hashBlock($text) {
- #
- # Shortcut function for hashPart with block-level boundaries.
- #
- return $this->hashPart($text, 'B');
- }
-
-
- public $block_gamut = array(
- #
- # These are all the transformations that form block-level
- # tags like paragraphs, headers, and list items.
- #
- "doHeaders" => 10,
- "doHorizontalRules" => 20,
-
- "doLists" => 40,
- "doCodeBlocks" => 50,
- "doBlockQuotes" => 60,
- );
-
- function runBlockGamut($text) {
- #
- # Run block gamut tranformations.
- #
- # We need to escape raw HTML in Markdown source before doing anything
- # else. This need to be done for each block, and not only at the
- # beginning in the Markdown function since hashed blocks can be part of
- # list items and could have been indented. Indented blocks would have
- # been seen as a code block in a previous pass of hashHTMLBlocks.
- $text = $this->hashHTMLBlocks($text);
-
- return $this->runBasicBlockGamut($text);
- }
-
- function runBasicBlockGamut($text) {
- #
- # Run block gamut tranformations, without hashing HTML blocks. This is
- # useful when HTML blocks are known to be already hashed, like in the first
- # whole-document pass.
- #
- foreach ($this->block_gamut as $method => $priority) {
- $text = $this->$method($text);
- }
-
- # Finally form paragraph and restore hashed blocks.
- $text = $this->formParagraphs($text);
-
- return $text;
- }
-
-
- function doHorizontalRules($text) {
- # Do Horizontal Rules:
- return preg_replace(
- '{
- ^[ ]{0,3} # Leading space
- ([-*_]) # $1: First marker
- (?> # Repeated marker group
- [ ]{0,2} # Zero, one, or two spaces.
- \1 # Marker character
- ){2,} # Group repeated at least twice
- [ ]* # Tailing spaces
- $ # End of line.
- }mx',
- "\n".$this->hashBlock("<hr$this->empty_element_suffix")."\n",
- $text);
- }
-
-
- public $span_gamut = array(
- #
- # These are all the transformations that occur *within* block-level
- # tags like paragraphs, headers, and list items.
- #
- # Process character escapes, code spans, and inline HTML
- # in one shot.
- "parseSpan" => -30,
-
- # Process anchor and image tags. Images must come first,
- # because ![foo][f] looks like an anchor.
- "doImages" => 10,
- "doAnchors" => 20,
-
- # Make links out of things like `<http://example.com/>`
- # Must come after doAnchors, because you can use < and >
- # delimiters in inline links like [this](<url>).
- "doAutoLinks" => 30,
- "encodeAmpsAndAngles" => 40,
-
- "doItalicsAndBold" => 50,
- "doHardBreaks" => 60,
- );
-
- function runSpanGamut($text) {
- #
- # Run span gamut tranformations.
- #
- foreach ($this->span_gamut as $method => $priority) {
- $text = $this->$method($text);
- }
-
- return $text;
- }
-
-
- function doHardBreaks($text) {
- # Do hard breaks:
- return preg_replace_callback('/ {2,}\n/',
- array(&$this, '_doHardBreaks_callback'), $text);
- }
- function _doHardBreaks_callback($matches) {
- return $this->hashPart("<br$this->empty_element_suffix\n");
- }
-
-
- function doAnchors($text) {
- #
- # Turn Markdown link shortcuts into XHTML <a> tags.
- #
- if ($this->in_anchor) return $text;
- $this->in_anchor = true;
-
- #
- # First, handle reference-style links: [link text] [id]
- #
- $text = preg_replace_callback('{
- ( # wrap whole match in $1
- \[
- ('.$this->nested_brackets_re.') # link text = $2
- \]
-
- [ ]? # one optional space
- (?:\n[ ]*)? # one optional newline followed by spaces
-
- \[
- (.*?) # id = $3
- \]
- )
- }xs',
- array(&$this, '_doAnchors_reference_callback'), $text);
-
- #
- # Next, inline-style links: [link text](url "optional title")
- #
- $text = preg_replace_callback('{
- ( # wrap whole match in $1
- \[
- ('.$this->nested_brackets_re.') # link text = $2
- \]
- \( # literal paren
- [ \n]*
- (?:
- <(.+?)> # href = $3
- |
- ('.$this->nested_url_parenthesis_re.') # href = $4
- )
- [ \n]*
- ( # $5
- ([\'"]) # quote char = $6
- (.*?) # Title = $7
- \6 # matching quote
- [ \n]* # ignore any spaces/tabs between closing quote and )
- )? # title is optional
- \)
- )
- }xs',
- array(&$this, '_doAnchors_inline_callback'), $text);
-
- #
- # Last, handle reference-style shortcuts: [link text]
- # These must come last in case you've also got [link text][1]
- # or [link text](/foo)
- #
- $text = preg_replace_callback('{
- ( # wrap whole match in $1
- \[
- ([^\[\]]+) # link text = $2; can\'t contain [ or ]
- \]
- )
- }xs',
- array(&$this, '_doAnchors_reference_callback'), $text);
-
- $this->in_anchor = false;
- return $text;
- }
- function _doAnchors_reference_callback($matches) {
- $whole_match = $matches[1];
- $link_text = $matches[2];
- $link_id =& $matches[3];
-
- if ($link_id == "") {
- # for shortcut links like [this][] or [this].
- $link_id = $link_text;
- }
-
- # lower-case and turn embedded newlines into spaces
- $link_id = strtolower($link_id);
- $link_id = preg_replace('{[ ]?\n}', ' ', $link_id);
-
- if (isset($this->urls[$link_id])) {
- $url = $this->urls[$link_id];
- $url = $this->encodeAttribute($url);
-
- $result = "<a href=\"$url\"";
- if ( isset( $this->titles[$link_id] ) ) {
- $title = $this->titles[$link_id];
- $title = $this->encodeAttribute($title);
- $result .= " title=\"$title\"";
- }
-
- $link_text = $this->runSpanGamut($link_text);
- $result .= ">$link_text</a>";
- $result = $this->hashPart($result);
- }
- else {
- $result = $whole_match;
- }
- return $result;
- }
- function _doAnchors_inline_callback($matches) {
- $whole_match = $matches[1];
- $link_text = $this->runSpanGamut($matches[2]);
- $url = $matches[3] == '' ? $matches[4] : $matches[3];
- $title =& $matches[7];
-
- $url = $this->encodeAttribute($url);
-
- $result = "<a href=\"$url\"";
- if (isset($title)) {
- $title = $this->encodeAttribute($title);
- $result .= " title=\"$title\"";
- }
-
- $link_text = $this->runSpanGamut($link_text);
- $result .= ">$link_text</a>";
-
- return $this->hashPart($result);
- }
-
-
- function doImages($text) {
- #
- # Turn Markdown image shortcuts into <img> tags.
- #
- #
- # First, handle reference-style labeled images: ![alt text][id]
- #
- $text = preg_replace_callback('{
- ( # wrap whole match in $1
- !\[
- ('.$this->nested_brackets_re.') # alt text = $2
- \]
-
- [ ]? # one optional space
- (?:\n[ ]*)? # one optional newline followed by spaces
-
- \[
- (.*?) # id = $3
- \]
-
- )
- }xs',
- array(&$this, '_doImages_reference_callback'), $text);
-
- #
- # Next, handle inline images: ![alt text](url "optional title")
- # Don't forget: encode * and _
- #
- $text = preg_replace_callback('{
- ( # wrap whole match in $1
- !\[
- ('.$this->nested_brackets_re.') # alt text = $2
- \]
- \s? # One optional whitespace character
- \( # literal paren
- [ \n]*
- (?:
- <(\S*)> # src url = $3
- |
- ('.$this->nested_url_parenthesis_re.') # src url = $4
- )
- [ \n]*
- ( # $5
- ([\'"]) # quote char = $6
- (.*?) # title = $7
- \6 # matching quote
- [ \n]*
- )? # title is optional
- \)
- )
- }xs',
- array(&$this, '_doImages_inline_callback'), $text);
-
- return $text;
- }
- function _doImages_reference_callback($matches) {
- $whole_match = $matches[1];
- $alt_text = $matches[2];
- $link_id = strtolower($matches[3]);
-
- if ($link_id == "") {
- $link_id = strtolower($alt_text); # for shortcut links like ![this][].
- }
-
- $alt_text = $this->encodeAttribute($alt_text);
- if (isset($this->urls[$link_id])) {
- $url = $this->encodeAttribute($this->urls[$link_id]);
- $result = "<img src=\"$url\" alt=\"$alt_text\"";
- if (isset($this->titles[$link_id])) {
- $title = $this->titles[$link_id];
- $title = $this->encodeAttribute($title);
- $result .= " title=\"$title\"";
- }
- $result .= $this->empty_element_suffix;
- $result = $this->hashPart($result);
- }
- else {
- # If there's no such link ID, leave intact:
- $result = $whole_match;
- }
-
- return $result;
- }
- function _doImages_inline_callback($matches) {
- $whole_match = $matches[1];
- $alt_text = $matches[2];
- $url = $matches[3] == '' ? $matches[4] : $matches[3];
- $title =& $matches[7];
-
- $alt_text = $this->encodeAttribute($alt_text);
- $url = $this->encodeAttribute($url);
- $result = "<img src=\"$url\" alt=\"$alt_text\"";
- if (isset($title)) {
- $title = $this->encodeAttribute($title);
- $result .= " title=\"$title\""; # $title already quoted
- }
- $result .= $this->empty_element_suffix;
-
- return $this->hashPart($result);
- }
-
-
- function doHeaders($text) {
- # Setext-style headers:
- # Header 1
- # ========
- #
- # Header 2
- # --------
- #
- $text = preg_replace_callback('{ ^(.+?)[ ]*\n(=+|-+)[ ]*\n+ }mx',
- array(&$this, '_doHeaders_callback_setext'), $text);
-
- # atx-style headers:
- # # Header 1
- # ## Header 2
- # ## Header 2 with closing hashes ##
- # ...
- # ###### Header 6
- #
- $text = preg_replace_callback('{
- ^(\#{1,6}) # $1 = string of #\'s
- [ ]*
- (.+?) # $2 = Header text
- [ ]*
- \#* # optional closing #\'s (not counted)
- \n+
- }xm',
- array(&$this, '_doHeaders_callback_atx'), $text);
-
- return $text;
- }
- function _doHeaders_callback_setext($matches) {
- # Terrible hack to check we haven't found an empty list item.
- if ($matches[2] == '-' && preg_match('{^-(?: |$)}', $matches[1]))
- return $matches[0];
-
- $level = $matches[2]{0} == '=' ? 1 : 2;
- $block = "<h$level>".$this->runSpanGamut($matches[1])."</h$level>";
- return "\n" . $this->hashBlock($block) . "\n\n";
- }
- function _doHeaders_callback_atx($matches) {
- $level = strlen($matches[1]);
- $block = "<h$level>".$this->runSpanGamut($matches[2])."</h$level>";
- return "\n" . $this->hashBlock($block) . "\n\n";
- }
-
-
- function doLists($text) {
- #
- # Form HTML ordered (numbered) and unordered (bulleted) lists.
- #
- $less_than_tab = $this->tab_width - 1;
-
- # Re-usable patterns to match list item bullets and number markers:
- $marker_ul_re = '[*+-]';
- $marker_ol_re = '\d+[\.]';
- $marker_any_re = "(?:$marker_ul_re|$marker_ol_re)";
-
- $markers_relist = array(
- $marker_ul_re => $marker_ol_re,
- $marker_ol_re => $marker_ul_re,
- );
-
- foreach ($markers_relist as $marker_re => $other_marker_re) {
- # Re-usable pattern to match any entirel ul or ol list:
- $whole_list_re = '
- ( # $1 = whole list
- ( # $2
- ([ ]{0,'.$less_than_tab.'}) # $3 = number of spaces
- ('.$marker_re.') # $4 = first list item marker
- [ ]+
- )
- (?s:.+?)
- ( # $5
- \z
- |
- \n{2,}
- (?=\S)
- (?! # Negative lookahead for another list item marker
- [ ]*
- '.$marker_re.'[ ]+
- )
- |
- (?= # Lookahead for another kind of list
- \n
- \3 # Must have the same indentation
- '.$other_marker_re.'[ ]+
- )
- )
- )
- '; // mx
-
- # We use a different prefix before nested lists than top-level lists.
- # See extended comment in _ProcessListItems().
-
- if ($this->list_level) {
- $text = preg_replace_callback('{
- ^
- '.$whole_list_re.'
- }mx',
- array(&$this, '_doLists_callback'), $text);
- }
- else {
- $text = preg_replace_callback('{
- (?:(?<=\n)\n|\A\n?) # Must eat the newline
- '.$whole_list_re.'
- }mx',
- array(&$this, '_doLists_callback'), $text);
- }
- }
-
- return $text;
- }
- function _doLists_callback($matches) {
- # Re-usable patterns to match list item bullets and number markers:
- $marker_ul_re = '[*+-]';
- $marker_ol_re = '\d+[\.]';
- $marker_any_re = "(?:$marker_ul_re|$marker_ol_re)";
-
- $list = $matches[1];
- $list_type = preg_match("/$marker_ul_re/", $matches[4]) ? "ul" : "ol";
-
- $marker_any_re = ( $list_type == "ul" ? $marker_ul_re : $marker_ol_re );
-
- $list .= "\n";
- $result = $this->processListItems($list, $marker_any_re);
-
- $result = $this->hashBlock("<$list_type>\n" . $result . "</$list_type>");
- return "\n". $result ."\n\n";
- }
-
- public $list_level = 0;
-
- function processListItems($list_str, $marker_any_re) {
- #
- # Process the contents of a single ordered or unordered list, splitting it
- # into individual list items.
- #
- # The $this->list_level global keeps track of when we're inside a list.
- # Each time we enter a list, we increment it; when we leave a list,
- # we decrement. If it's zero, we're not in a list anymore.
- #
- # We do this because when we're not inside a list, we want to treat
- # something like this:
- #
- # I recommend upgrading to version
- # 8. Oops, now this line is treated
- # as a sub-list.
- #
- # As a single paragraph, despite the fact that the second line starts
- # with a digit-period-space sequence.
- #
- # Whereas when we're inside a list (or sub-list), that line will be
- # treated as the start of a sub-list. What a kludge, huh? This is
- # an aspect of Markdown's syntax that's hard to parse perfectly
- # without resorting to mind-reading. Perhaps the solution is to
- # change the syntax rules such that sub-lists must start with a
- # starting cardinal number; e.g. "1." or "a.".
-
- $this->list_level++;
-
- # trim trailing blank lines:
- $list_str = preg_replace("/\n{2,}\\z/", "\n", $list_str);
-
- $list_str = preg_replace_callback('{
- (\n)? # leading line = $1
- (^[ ]*) # leading whitespace = $2
- ('.$marker_any_re.' # list marker and space = $3
- (?:[ ]+|(?=\n)) # space only required if item is not empty
- )
- ((?s:.*?)) # list item text = $4
- (?:(\n+(?=\n))|\n) # tailing blank line = $5
- (?= \n* (\z | \2 ('.$marker_any_re.') (?:[ ]+|(?=\n))))
- }xm',
- array(&$this, '_processListItems_callback'), $list_str);
-
- $this->list_level--;
- return $list_str;
- }
- function _processListItems_callback($matches) {
- $item = $matches[4];
- $leading_line =& $matches[1];
- $leading_space =& $matches[2];
- $marker_space = $matches[3];
- $tailing_blank_line =& $matches[5];
-
- if ($leading_line || $tailing_blank_line ||
- preg_match('/\n{2,}/', $item))
- {
- # Replace marker with the appropriate whitespace indentation
- $item = $leading_space . str_repeat(' ', strlen($marker_space)) . $item;
- $item = $this->runBlockGamut($this->outdent($item)."\n");
- }
- else {
- # Recursion for sub-lists:
- $item = $this->doLists($this->outdent($item));
- $item = preg_replace('/\n+$/', '', $item);
- $item = $this->runSpanGamut($item);
- }
-
- return "<li>" . $item . "</li>\n";
- }
-
-
- function doCodeBlocks($text) {
- #
- # Process Markdown `<pre><code>` blocks.
- #
- $text = preg_replace_callback('{
- (?:\n\n|\A\n?)
- ( # $1 = the code block -- one or more lines, starting with a space/tab
- (?>
- [ ]{'.$this->tab_width.'} # Lines must start with a tab or a tab-width of spaces
- .*\n+
- )+
- )
- ((?=^[ ]{0,'.$this->tab_width.'}\S)|\Z) # Lookahead for non-space at line-start, or end of doc
- }xm',
- array(&$this, '_doCodeBlocks_callback'), $text);
-
- return $text;
- }
- function _doCodeBlocks_callback($matches) {
- $codeblock = $matches[1];
-
- $codeblock = $this->outdent($codeblock);
- $codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES);
-
- # trim leading newlines and trailing newlines
- $codeblock = preg_replace('/\A\n+|\n+\z/', '', $codeblock);
-
- $codeblock = "<pre><code>$codeblock\n</code></pre>";
- return "\n\n".$this->hashBlock($codeblock)."\n\n";
- }
-
-
- function makeCodeSpan($code) {
- #
- # Create a code span markup for $code. Called from handleSpanToken.
- #
- $code = htmlspecialchars(trim($code), ENT_NOQUOTES);
- return $this->hashPart("<code>$code</code>");
- }
-
-
- public $em_relist = array(
- '' => '(?:(?<!\*)\*(?!\*)|(?<!_)_(?!_))(?=\S|$)(?![\.,:;]\s)',
- '*' => '(?<=\S|^)(?<!\*)\*(?!\*)',
- '_' => '(?<=\S|^)(?<!_)_(?!_)',
- );
- public $strong_relist = array(
- '' => '(?:(?<!\*)\*\*(?!\*)|(?<!_)__(?!_))(?=\S|$)(?![\.,:;]\s)',
- '**' => '(?<=\S|^)(?<!\*)\*\*(?!\*)',
- '__' => '(?<=\S|^)(?<!_)__(?!_)',
- );
- public $em_strong_relist = array(
- '' => '(?:(?<!\*)\*\*\*(?!\*)|(?<!_)___(?!_))(?=\S|$)(?![\.,:;]\s)',
- '***' => '(?<=\S|^)(?<!\*)\*\*\*(?!\*)',
- '___' => '(?<=\S|^)(?<!_)___(?!_)',
- );
- public $em_strong_prepared_relist;
-
- function prepareItalicsAndBold() {
- #
- # Prepare regular expressions for searching emphasis tokens in any
- # context.
- #
- foreach ($this->em_relist as $em => $em_re) {
- foreach ($this->strong_relist as $strong => $strong_re) {
- # Construct list of allowed token expressions.
- $token_relist = array();
- if (isset($this->em_strong_relist["$em$strong"])) {
- $token_relist[] = $this->em_strong_relist["$em$strong"];
- }
- $token_relist[] = $em_re;
- $token_relist[] = $strong_re;
-
- # Construct master expression from list.
- $token_re = '{('. implode('|', $token_relist) .')}';
- $this->em_strong_prepared_relist["$em$strong"] = $token_re;
- }
- }
- }
-
- function doItalicsAndBold($text) {
- $token_stack = array('');
- $text_stack = array('');
- $em = '';
- $strong = '';
- $tree_char_em = false;
-
- while (1) {
- #
- # Get prepared regular expression for seraching emphasis tokens
- # in current context.
- #
- $token_re = $this->em_strong_prepared_relist["$em$strong"];
-
- #
- # Each loop iteration search for the next emphasis token.
- # Each token is then passed to handleSpanToken.
- #
- $parts = preg_split($token_re, $text, 2, PREG_SPLIT_DELIM_CAPTURE);
- $text_stack[0] .= $parts[0];
- $token =& $parts[1];
- $text =& $parts[2];
-
- if (empty($token)) {
- # Reached end of text span: empty stack without emitting.
- # any more emphasis.
- while ($token_stack[0]) {
- $text_stack[1] .= array_shift($token_stack);
- $text_stack[0] .= array_shift($text_stack);
- }
- break;
- }
-
- $token_len = strlen($token);
- if ($tree_char_em) {
- # Reached closing marker while inside a three-char emphasis.
- if ($token_len == 3) {
- # Three-char closing marker, close em and strong.
- array_shift($token_stack);
- $span = array_shift($text_stack);
- $span = $this->runSpanGamut($span);
- $span = "<strong><em>$span</em></strong>";
- $text_stack[0] .= $this->hashPart($span);
- $em = '';
- $strong = '';
- } else {
- # Other closing marker: close one em or strong and
- # change current token state to match the other
- $token_stack[0] = str_repeat($token{0}, 3-$token_len);
- $tag = $token_len == 2 ? "strong" : "em";
- $span = $text_stack[0];
- $span = $this->runSpanGamut($span);
- $span = "<$tag>$span</$tag>";
- $text_stack[0] = $this->hashPart($span);
- $$tag = ''; # $$tag stands for $em or $strong
- }
- $tree_char_em = false;
- } else if ($token_len == 3) {
- if ($em) {
- # Reached closing marker for both em and strong.
- # Closing strong marker:
- for ($i = 0; $i < 2; ++$i) {
- $shifted_token = array_shift($token_stack);
- $tag = strlen($shifted_token) == 2 ? "strong" : "em";
- $span = array_shift($text_stack);
- $span = $this->runSpanGamut($span);
- $span = "<$tag>$span</$tag>";
- $text_stack[0] .= $this->hashPart($span);
- $$tag = ''; # $$tag stands for $em or $strong
- }
- } else {
- # Reached opening three-char emphasis marker. Push on token
- # stack; will be handled by the special condition above.
- $em = $token{0};
- $strong = "$em$em";
- array_unshift($token_stack, $token);
- array_unshift($text_stack, '');
- $tree_char_em = true;
- }
- } else if ($token_len == 2) {
- if ($strong) {
- # Unwind any dangling emphasis marker:
- if (strlen($token_stack[0]) == 1) {
- $text_stack[1] .= array_shift($token_stack);
- $text_stack[0] .= array_shift($text_stack);
- }
- # Closing strong marker:
- array_shift($token_stack);
- $span = array_shift($text_stack);
- $span = $this->runSpanGamut($span);
- $span = "<strong>$span</strong>";
- $text_stack[0] .= $this->hashPart($span);
- $strong = '';
- } else {
- array_unshift($token_stack, $token);
- array_unshift($text_stack, '');
- $strong = $token;
- }
- } else {
- # Here $token_len == 1
- if ($em) {
- if (strlen($token_stack[0]) == 1) {
- # Closing emphasis marker:
- array_shift($token_stack);
- $span = array_shift($text_stack);
- $span = $this->runSpanGamut($span);
- $span = "<em>$span</em>";
- $text_stack[0] .= $this->hashPart($span);
- $em = '';
- } else {
- $text_stack[0] .= $token;
- }
- } else {
- array_unshift($token_stack, $token);
- array_unshift($text_stack, '');
- $em = $token;
- }
- }
- }
- return $text_stack[0];
- }
-
-
- function doBlockQuotes($text) {
- $text = preg_replace_callback('/
- ( # Wrap whole match in $1
- (?>
- ^[ ]*>[ ]? # ">" at the start of a line
- .+\n # rest of the first line
- (.+\n)* # subsequent consecutive lines
- \n* # blanks
- )+
- )
- /xm',
- array(&$this, '_doBlockQuotes_callback'), $text);
-
- return $text;
- }
- function _doBlockQuotes_callback($matches) {
- $bq = $matches[1];
- # trim one level of quoting - trim whitespace-only lines
- $bq = preg_replace('/^[ ]*>[ ]?|^[ ]+$/m', '', $bq);
- $bq = $this->runBlockGamut($bq); # recurse
-
- $bq = preg_replace('/^/m', " ", $bq);
- # These leading spaces cause problem with <pre> content,
- # so we need to fix that:
- $bq = preg_replace_callback('{(\s*<pre>.+?</pre>)}sx',
- array(&$this, '_doBlockQuotes_callback2'), $bq);
-
- return "\n". $this->hashBlock("<blockquote>\n$bq\n</blockquote>")."\n\n";
- }
- function _doBlockQuotes_callback2($matches) {
- $pre = $matches[1];
- $pre = preg_replace('/^ /m', '', $pre);
- return $pre;
- }
-
-
- function formParagraphs($text) {
- #
- # Params:
- # $text - string to process with html <p> tags
- #
- # Strip leading and trailing lines:
- $text = preg_replace('/\A\n+|\n+\z/', '', $text);
-
- $grafs = preg_split('/\n{2,}/', $text, -1, PREG_SPLIT_NO_EMPTY);
-
- #
- # Wrap <p> tags and unhashify HTML blocks
- #
- foreach ($grafs as $key => $value) {
- if (!preg_match('/^B\x1A[0-9]+B$/', $value)) {
- # Is a paragraph.
- $value = $this->runSpanGamut($value);
- $value = preg_replace('/^([ ]*)/', "<p>", $value);
- $value .= "</p>";
- $grafs[$key] = $this->unhash($value);
- }
- else {
- # Is a block.
- # Modify elements of @grafs in-place...
- $graf = $value;
- $block = $this->html_hashes[$graf];
- $graf = $block;
-// if (preg_match('{
-// \A
-// ( # $1 = <div> tag
-// <div \s+
-// [^>]*
-// \b
-// markdown\s*=\s* ([\'"]) # $2 = attr quote char
-// 1
-// \2
-// [^>]*
-// >
-// )
-// ( # $3 = contents
-// .*
-// )
-// (</div>) # $4 = closing tag
-// \z
-// }xs', $block, $matches))
-// {
-// list(, $div_open, , $div_content, $div_close) = $matches;
-//
-// # We can't call Markdown(), because that resets the hash;
-// # that initialization code should be pulled into its own sub, though.
-// $div_content = $this->hashHTMLBlocks($div_content);
-//
-// # Run document gamut methods on the content.
-// foreach ($this->document_gamut as $method => $priority) {
-// $div_content = $this->$method($div_content);
-// }
-//
-// $div_open = preg_replace(
-// '{\smarkdown\s*=\s*([\'"]).+?\1}', '', $div_open);
-//
-// $graf = $div_open . "\n" . $div_content . "\n" . $div_close;
-// }
- $grafs[$key] = $graf;
- }
- }
-
- return implode("\n\n", $grafs);
- }
-
-
- function encodeAttribute($text) {
- #
- # Encode text for a double-quoted HTML attribute. This function
- # is *not* suitable for attributes enclosed in single quotes.
- #
- $text = $this->encodeAmpsAndAngles($text);
- $text = str_replace('"', '&quot;', $text);
- return $text;
- }
-
-
- function encodeAmpsAndAngles($text) {
- #
- # Smart processing for ampersands and angle brackets that need to
- # be encoded. Valid character entities are left alone unless the
- # no-entities mode is set.
- #
- if ($this->no_entities) {
- $text = str_replace('&', '&amp;', $text);
- } else {
- # Ampersand-encoding based entirely on Nat Irons's Amputator
- # MT plugin: <http://bumppo.net/projects/amputator/>
- $text = preg_replace('/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/',
- '&amp;', $text);;
- }
- # Encode remaining <'s
- $text = str_replace('<', '&lt;', $text);
-
- return $text;
- }
-
-
- function doAutoLinks($text) {
- $text = preg_replace_callback('{<((https?|ftp|dict):[^\'">\s]+)>}i',
- array(&$this, '_doAutoLinks_url_callback'), $text);
-
- # Email addresses: <address@domain.foo>
- $text = preg_replace_callback('{
- <
- (?:mailto:)?
- (
- (?:
- [-!#$%&\'*+/=?^_`.{|}~\w\x80-\xFF]+
- |
- ".*?"
- )
- \@
- (?:
- [-a-z0-9\x80-\xFF]+(\.[-a-z0-9\x80-\xFF]+)*\.[a-z]+
- |
- \[[\d.a-fA-F:]+\] # IPv4 & IPv6
- )
- )
- >
- }xi',
- array(&$this, '_doAutoLinks_email_callback'), $text);
- $text = preg_replace_callback('{<(tel:([^\'">\s]+))>}i',array(&$this, '_doAutoLinks_tel_callback'), $text);
-
- return $text;
- }
- function _doAutoLinks_tel_callback($matches) {
- $url = $this->encodeAttribute($matches[1]);
- $tel = $this->encodeAttribute($matches[2]);
- $link = "<a href=\"$url\">$tel</a>";
- return $this->hashPart($link);
- }
- function _doAutoLinks_url_callback($matches) {
- $url = $this->encodeAttribute($matches[1]);
- $link = "<a href=\"$url\">$url</a>";
- return $this->hashPart($link);
- }
- function _doAutoLinks_email_callback($matches) {
- $address = $matches[1];
- $link = $this->encodeEmailAddress($address);
- return $this->hashPart($link);
- }
-
-
- function encodeEmailAddress($addr) {
- #
- # Input: an email address, e.g. "foo@example.com"
- #
- # Output: the email address as a mailto link, with each character
- # of the address encoded as either a decimal or hex entity, in
- # the hopes of foiling most address harvesting spam bots. E.g.:
- #
- # <p><a href="&#109;&#x61;&#105;&#x6c;&#116;&#x6f;&#58;&#x66;o&#111;
- # &#x40;&#101;&#x78;&#97;&#x6d;&#112;&#x6c;&#101;&#46;&#x63;&#111;
- # &#x6d;">&#x66;o&#111;&#x40;&#101;&#x78;&#97;&#x6d;&#112;&#x6c;
- # &#101;&#46;&#x63;&#111;&#x6d;</a></p>
- #
- # Based by a filter by Matthew Wickline, posted to BBEdit-Talk.
- # With some optimizations by Milian Wolff.
- #
- $addr = "mailto:" . $addr;
- $chars = preg_split('/(?<!^)(?!$)/', $addr);
- $seed = (int)abs(crc32($addr) / strlen($addr)); # Deterministic seed.
-
- foreach ($chars as $key => $char) {
- $ord = ord($char);
- # Ignore non-ascii chars.
- if ($ord < 128) {
- $r = ($seed * (1 + $key)) % 100; # Pseudo-random function.
- # roughly 10% raw, 45% hex, 45% dec
- # '@' *must* be encoded. I insist.
- if ($r > 90 && $char != '@') /* do nothing */;
- else if ($r < 45) $chars[$key] = '&#x'.dechex($ord).';';
- else $chars[$key] = '&#'.$ord.';';
- }
- }
-
- $addr = implode('', $chars);
- $text = implode('', array_slice($chars, 7)); # text without `mailto:`
- $addr = "<a href=\"$addr\">$text</a>";
-
- return $addr;
- }
-
-
- function parseSpan($str) {
- #
- # Take the string $str and parse it into tokens, hashing embedded HTML,
- # escaped characters and handling code spans.
- #
- $output = '';
-
- $span_re = '{
- (
- \\\\'.$this->escape_chars_re.'
- |
- (?<![`\\\\])
- `+ # code span marker
- '.( $this->no_markup ? '' : '
- |
- <!-- .*? --> # comment
- |
- <\?.*?\?> | <%.*?%> # processing instruction
- |
- <[!$]?[-a-zA-Z0-9:_]+ # regular tags
- (?>
- \s
- (?>[^"\'>]+|"[^"]*"|\'[^\']*\')*
- )?
- >
- |
- <[-a-zA-Z0-9:_]+\s*/> # xml-style empty tag
- |
- </[-a-zA-Z0-9:_]+\s*> # closing tag
- ').'
- )
- }xs';
-
- while (1) {
- #
- # Each loop iteration search for either the next tag, the next
- # openning code span marker, or the next escaped character.
- # Each token is then passed to handleSpanToken.
- #
- $parts = preg_split($span_re, $str, 2, PREG_SPLIT_DELIM_CAPTURE);
-
- # Create token from text preceding tag.
- if ($parts[0] != "") {
- $output .= $parts[0];
- }
-
- # Check if we reach the end.
- if (isset($parts[1])) {
- $output .= $this->handleSpanToken($parts[1], $parts[2]);
- $str = $parts[2];
- }
- else {
- break;
- }
- }
-
- return $output;
- }
-
-
- function handleSpanToken($token, &$str) {
- #
- # Handle $token provided by parseSpan by determining its nature and
- # returning the corresponding value that should replace it.
- #
- switch ($token{0}) {
- case "\\":
- return $this->hashPart("&#". ord($token{1}). ";");
- case "`":
- # Search for end marker in remaining text.
- if (preg_match('/^(.*?[^`])'.preg_quote($token).'(?!`)(.*)$/sm',
- $str, $matches))
- {
- $str = $matches[2];
- $codespan = $this->makeCodeSpan($matches[1]);
- return $this->hashPart($codespan);
- }
- return $token; // return as text since no ending marker found.
- default:
- return $this->hashPart($token);
- }
- }
-
-
- function outdent($text) {
- #
- # Remove one level of line-leading tabs or spaces
- #
- return preg_replace('/^(\t|[ ]{1,'.$this->tab_width.'})/m', '', $text);
- }
-
-
- # String length function for detab. `_initDetab` will create a function to
- # hanlde UTF-8 if the default function does not exist.
- public $utf8_strlen = 'mb_strlen';
-
- function detab($text) {
- #
- # Replace tabs with the appropriate amount of space.
- #
- # For each line we separate the line in blocks delemited by
- # tab characters. Then we reconstruct every line by adding the
- # appropriate number of space between each blocks.
-
- $text = preg_replace_callback('/^.*\t.*$/m',
- array(&$this, '_detab_callback'), $text);
-
- return $text;
- }
- function _detab_callback($matches) {
- $line = $matches[0];
- $strlen = $this->utf8_strlen; # strlen function for UTF-8.
-
- # Split in blocks.
- $blocks = explode("\t", $line);
- # Add each blocks to the line.
- $line = $blocks[0];
- unset($blocks[0]); # Do not add first block twice.
- foreach ($blocks as $block) {
- # Calculate amount of space, insert spaces, insert block.
- $amount = $this->tab_width -
- $strlen($line, 'UTF-8') % $this->tab_width;
- $line .= str_repeat(" ", $amount) . $block;
- }
- return $line;
- }
- function _initDetab() {
- #
- # Check for the availability of the function in the `utf8_strlen` property
- # (initially `mb_strlen`). If the function is not available, use jetpack_utf8_strlen
- # that will loosely count the number of UTF-8 characters with a
- # regular expression.
- #
- if ( function_exists( $this->utf8_strlen ) ) {
- return;
- }
- $this->utf8_strlen = 'jetpack_utf8_strlen';
- }
-
-
- function unhash($text) {
- #
- # Swap back in all the tags hashed by _HashHTMLBlocks.
- #
- return preg_replace_callback('/(.)\x1A[0-9]+\1/',
- array(&$this, '_unhash_callback'), $text);
- }
- function _unhash_callback($matches) {
- return $this->html_hashes[$matches[0]];
- }
-
-}
-
-
-#
-# Markdown Extra Parser Class
-#
-
-class MarkdownExtra_Parser extends Markdown_Parser {
-
- ### Configuration Variables ###
-
- # Prefix for footnote ids.
- public $fn_id_prefix = "";
-
- # Optional title attribute for footnote links and backlinks.
- public $fn_link_title = MARKDOWN_FN_LINK_TITLE;
- public $fn_backlink_title = MARKDOWN_FN_BACKLINK_TITLE;
-
- # Optional class attribute for footnote links and backlinks.
- public $fn_link_class = MARKDOWN_FN_LINK_CLASS;
- public $fn_backlink_class = MARKDOWN_FN_BACKLINK_CLASS;
-
- # Optional class prefix for fenced code block.
- public $code_class_prefix = MARKDOWN_CODE_CLASS_PREFIX;
- # Class attribute for code blocks goes on the `code` tag;
- # setting this to true will put attributes on the `pre` tag instead.
- public $code_attr_on_pre = MARKDOWN_CODE_ATTR_ON_PRE;
-
- # Predefined abbreviations.
- public $predef_abbr = array();
-
-
- ### Parser Implementation ###
-
- function __construct() {
- #
- # Constructor function. Initialize the parser object.
- #
- # Add extra escapable characters before parent constructor
- # initialize the table.
- $this->escape_chars .= ':|';
-
- # Insert extra document, block, and span transformations.
- # Parent constructor will do the sorting.
- $this->document_gamut += array(
- "doFencedCodeBlocks" => 5,
- "stripFootnotes" => 15,
- "stripAbbreviations" => 25,
- "appendFootnotes" => 50,
- );
- $this->block_gamut += array(
- "doFencedCodeBlocks" => 5,
- "doTables" => 15,
- "doDefLists" => 45,
- );
- $this->span_gamut += array(
- "doFootnotes" => 5,
- "doAbbreviations" => 70,
- );
-
- parent::__construct();
- }
-
-
- # Extra variables used during extra transformations.
- public $footnotes = array();
- public $footnotes_ordered = array();
- public $footnotes_ref_count = array();
- public $footnotes_numbers = array();
- public $abbr_desciptions = array();
- public $abbr_word_re = '';
-
- # Give the current footnote number.
- public $footnote_counter = 1;
-
-
- function setup() {
- #
- # Setting up Extra-specific variables.
- #
- parent::setup();
-
- $this->footnotes = array();
- $this->footnotes_ordered = array();
- $this->footnotes_ref_count = array();
- $this->footnotes_numbers = array();
- $this->abbr_desciptions = array();
- $this->abbr_word_re = '';
- $this->footnote_counter = 1;
-
- foreach ($this->predef_abbr as $abbr_word => $abbr_desc) {
- if ($this->abbr_word_re)
- $this->abbr_word_re .= '|';
- $this->abbr_word_re .= preg_quote($abbr_word);
- $this->abbr_desciptions[$abbr_word] = trim($abbr_desc);
- }
- }
-
- function teardown() {
- #
- # Clearing Extra-specific variables.
- #
- $this->footnotes = array();
- $this->footnotes_ordered = array();
- $this->footnotes_ref_count = array();
- $this->footnotes_numbers = array();
- $this->abbr_desciptions = array();
- $this->abbr_word_re = '';
-
- parent::teardown();
- }
-
-
- ### Extra Attribute Parser ###
-
- # Expression to use to catch attributes (includes the braces)
- public $id_class_attr_catch_re = '\{((?:[ ]*[#.][-_:a-zA-Z0-9]+){1,})[ ]*\}';
- # Expression to use when parsing in a context when no capture is desired
- public $id_class_attr_nocatch_re = '\{(?:[ ]*[#.][-_:a-zA-Z0-9]+){1,}[ ]*\}';
-
- function doExtraAttributes($tag_name, $attr) {
- #
- # Parse attributes caught by the $this->id_class_attr_catch_re expression
- # and return the HTML-formatted list of attributes.
- #
- # Currently supported attributes are .class and #id.
- #
- if (empty($attr)) return "";
-
- # Split on components
- preg_match_all('/[#.][-_:a-zA-Z0-9]+/', $attr, $matches);
- $elements = $matches[0];
-
- # handle classes and ids (only first id taken into account)
- $classes = array();
- $id = false;
- foreach ($elements as $element) {
- if ($element{0} == '.') {
- $classes[] = substr($element, 1);
- } else if ($element{0} == '#') {
- if ($id === false) $id = substr($element, 1);
- }
- }
-
- # compose attributes as string
- $attr_str = "";
- if (!empty($id)) {
- $attr_str .= ' id="'.$id.'"';
- }
- if (!empty($classes)) {
- $attr_str .= ' class="'.implode(" ", $classes).'"';
- }
- return $attr_str;
- }
-
-
- function stripLinkDefinitions($text) {
- #
- # Strips link definitions from text, stores the URLs and titles in
- # hash references.
- #
- $less_than_tab = $this->tab_width - 1;
-
- # Link defs are in the form: ^[id]: url "optional title"
- $text = preg_replace_callback('{
- ^[ ]{0,'.$less_than_tab.'}\[(.+)\][ ]?: # id = $1
- [ ]*
- \n? # maybe *one* newline
- [ ]*
- (?:
- <(.+?)> # url = $2
- |
- (\S+?) # url = $3
- )
- [ ]*
- \n? # maybe one newline
- [ ]*
- (?:
- (?<=\s) # lookbehind for whitespace
- ["(]
- (.*?) # title = $4
- [")]
- [ ]*
- )? # title is optional
- (?:[ ]* '.$this->id_class_attr_catch_re.' )? # $5 = extra id & class attr
- (?:\n+|\Z)
- }xm',
- array(&$this, '_stripLinkDefinitions_callback'),
- $text);
- return $text;
- }
- function _stripLinkDefinitions_callback($matches) {
- $link_id = strtolower($matches[1]);
- $url = $matches[2] == '' ? $matches[3] : $matches[2];
- $this->urls[$link_id] = $url;
- $this->titles[$link_id] =& $matches[4];
- $this->ref_attr[$link_id] = $this->doExtraAttributes("", $dummy =& $matches[5]);
- return ''; # String that will replace the block
- }
-
-
- ### HTML Block Parser ###
-
- # Tags that are always treated as block tags:
- public $block_tags_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|form|fieldset|iframe|hr|legend|article|section|nav|aside|hgroup|header|footer|figcaption';
-
- # Tags treated as block tags only if the opening tag is alone on its line:
- public $context_block_tags_re = 'script|noscript|ins|del|iframe|object|source|track|param|math|svg|canvas|audio|video';
-
- # Tags where markdown="1" default to span mode:
- public $contain_span_tags_re = 'p|h[1-6]|li|dd|dt|td|th|legend|address';
-
- # Tags which must not have their contents modified, no matter where
- # they appear:
- public $clean_tags_re = 'script|math|svg';
-
- # Tags that do not need to be closed.
- public $auto_close_tags_re = 'hr|img|param|source|track';
-
-
- function hashHTMLBlocks($text) {
- #
- # Hashify HTML Blocks and "clean tags".
- #
- # We only want to do this for block-level HTML tags, such as headers,
- # lists, and tables. That's because we still want to wrap <p>s around
- # "paragraphs" that are wrapped in non-block-level tags, such as anchors,
- # phrase emphasis, and spans. The list of tags we're looking for is
- # hard-coded.
- #
- # This works by calling _HashHTMLBlocks_InMarkdown, which then calls
- # _HashHTMLBlocks_InHTML when it encounter block tags. When the markdown="1"
- # attribute is found within a tag, _HashHTMLBlocks_InHTML calls back
- # _HashHTMLBlocks_InMarkdown to handle the Markdown syntax within the tag.
- # These two functions are calling each other. It's recursive!
- #
- if ($this->no_markup) return $text;
-
- #
- # Call the HTML-in-Markdown hasher.
- #
- list($text, ) = $this->_hashHTMLBlocks_inMarkdown($text);
-
- return $text;
- }
- function _hashHTMLBlocks_inMarkdown($text, $indent = 0,
- $enclosing_tag_re = '', $span = false)
- {
- #
- # Parse markdown text, calling _HashHTMLBlocks_InHTML for block tags.
- #
- # * $indent is the number of space to be ignored when checking for code
- # blocks. This is important because if we don't take the indent into
- # account, something like this (which looks right) won't work as expected:
- #
- # <div>
- # <div markdown="1">
- # Hello World. <-- Is this a Markdown code block or text?
- # </div> <-- Is this a Markdown code block or a real tag?
- # <div>
- #
- # If you don't like this, just don't indent the tag on which
- # you apply the markdown="1" attribute.
- #
- # * If $enclosing_tag_re is not empty, stops at the first unmatched closing
- # tag with that name. Nested tags supported.
- #
- # * If $span is true, text inside must treated as span. So any double
- # newline will be replaced by a single newline so that it does not create
- # paragraphs.
- #
- # Returns an array of that form: ( processed text , remaining text )
- #
- if ($text === '') return array('', '');
-
- # Regex to check for the presence of newlines around a block tag.
- $newline_before_re = '/(?:^\n?|\n\n)*$/';
- $newline_after_re =
- '{
- ^ # Start of text following the tag.
- (?>[ ]*<!--.*?-->)? # Optional comment.
- [ ]*\n # Must be followed by newline.
- }xs';
-
- # Regex to match any tag.
- $block_tag_re =
- '{
- ( # $2: Capture whole tag.
- </? # Any opening or closing tag.
- (?> # Tag name.
- '.$this->block_tags_re.' |
- '.$this->context_block_tags_re.' |
- '.$this->clean_tags_re.' |
- (?!\s)'.$enclosing_tag_re.'
- )
- (?:
- (?=[\s"\'/a-zA-Z0-9]) # Allowed characters after tag name.
- (?>
- ".*?" | # Double quotes (can contain `>`)
- \'.*?\' | # Single quotes (can contain `>`)
- .+? # Anything but quotes and `>`.
- )*?
- )?
- > # End of tag.
- |
- <!-- .*? --> # HTML Comment
- |
- <\?.*?\?> | <%.*?%> # Processing instruction
- |
- <!\[CDATA\[.*?\]\]> # CData Block
- '. ( !$span ? ' # If not in span.
- |
- # Indented code block
- (?: ^[ ]*\n | ^ | \n[ ]*\n )
- [ ]{'.($indent+4).'}[^\n]* \n
- (?>
- (?: [ ]{'.($indent+4).'}[^\n]* | [ ]* ) \n
- )*
- |
- # Fenced code block marker
- (?<= ^ | \n )
- [ ]{0,'.($indent+3).'}(?:~{3,}|`{3,})
- [ ]*
- (?:
- \.?[-_:a-zA-Z0-9]+ # standalone class name
- |
- '.$this->id_class_attr_nocatch_re.' # extra attributes
- )?
- [ ]*
- (?= \n )
- ' : '' ). ' # End (if not is span).
- |
- # Code span marker
- # Note, this regex needs to go after backtick fenced
- # code blocks but it should also be kept outside of the
- # "if not in span" condition adding backticks to the parser
- `+
- )
- }xs';
-
-
- $depth = 0; # Current depth inside the tag tree.
- $parsed = ""; # Parsed text that will be returned.
-
- #
- # Loop through every tag until we find the closing tag of the parent
- # or loop until reaching the end of text if no parent tag specified.
- #
- do {
- #
- # Split the text using the first $tag_match pattern found.
- # Text before pattern will be first in the array, text after
- # pattern will be at the end, and between will be any catches made
- # by the pattern.
- #
- $parts = preg_split($block_tag_re, $text, 2,
- PREG_SPLIT_DELIM_CAPTURE);
-
- # If in Markdown span mode, add a empty-string span-level hash
- # after each newline to prevent triggering any block element.
- if ($span) {
- $void = $this->hashPart("", ':');
- $newline = "$void\n";
- $parts[0] = $void . str_replace("\n", $newline, $parts[0]) . $void;
- }
-
- $parsed .= $parts[0]; # Text before current tag.
-
- # If end of $text has been reached. Stop loop.
- if (count($parts) < 3) {
- $text = "";
- break;
- }
-
- $tag = $parts[1]; # Tag to handle.
- $text = $parts[2]; # Remaining text after current tag.
- $tag_re = preg_quote($tag); # For use in a regular expression.
-
- #
- # Check for: Fenced code block marker.
- # Note: need to recheck the whole tag to disambiguate backtick
- # fences from code spans
- #
- if (preg_match('{^\n?([ ]{0,'.($indent+3).'})(~{3,}|`{3,})[ ]*(?:\.?[-_:a-zA-Z0-9]+|'.$this->id_class_attr_nocatch_re.')?[ ]*\n?$}', $tag, $capture)) {
- # Fenced code block marker: find matching end marker.
- $fence_indent = strlen($capture[1]); # use captured indent in re
- $fence_re = $capture[2]; # use captured fence in re
- if (preg_match('{^(?>.*\n)*?[ ]{'.($fence_indent).'}'.$fence_re.'[ ]*(?:\n|$)}', $text,
- $matches))
- {
- # End marker found: pass text unchanged until marker.
- $parsed .= $tag . $matches[0];
- $text = substr($text, strlen($matches[0]));
- }
- else {
- # No end marker: just skip it.
- $parsed .= $tag;
- }
- }
- #
- # Check for: Indented code block.
- #
- else if ($tag{0} == "\n" || $tag{0} == " ") {
- # Indented code block: pass it unchanged, will be handled
- # later.
- $parsed .= $tag;
- }
- #
- # Check for: Code span marker
- # Note: need to check this after backtick fenced code blocks
- #
- else if ($tag{0} == "`") {
- # Find corresponding end marker.
- $tag_re = preg_quote($tag);
- if (preg_match('{^(?>.+?|\n(?!\n))*?(?<!`)'.$tag_re.'(?!`)}',
- $text, $matches))
- {
- # End marker found: pass text unchanged until marker.
- $parsed .= $tag . $matches[0];
- $text = substr($text, strlen($matches[0]));
- }
- else {
- # Unmatched marker: just skip it.
- $parsed .= $tag;
- }
- }
- #
- # Check for: Opening Block level tag or
- # Opening Context Block tag (like ins and del)
- # used as a block tag (tag is alone on it's line).
- #
- else if (preg_match('{^<(?:'.$this->block_tags_re.')\b}', $tag) ||
- ( preg_match('{^<(?:'.$this->context_block_tags_re.')\b}', $tag) &&
- preg_match($newline_before_re, $parsed) &&
- preg_match($newline_after_re, $text) )
- )
- {
- # Need to parse tag and following text using the HTML parser.
- list($block_text, $text) =
- $this->_hashHTMLBlocks_inHTML($tag . $text, "hashBlock", true);
-
- # Make sure it stays outside of any paragraph by adding newlines.
- $parsed .= "\n\n$block_text\n\n";
- }
- #
- # Check for: Clean tag (like script, math)
- # HTML Comments, processing instructions.
- #
- else if (preg_match('{^<(?:'.$this->clean_tags_re.')\b}', $tag) ||
- $tag{1} == '!' || $tag{1} == '?')
- {
- # Need to parse tag and following text using the HTML parser.
- # (don't check for markdown attribute)
- list($block_text, $text) =
- $this->_hashHTMLBlocks_inHTML($tag . $text, "hashClean", false);
-
- $parsed .= $block_text;
- }
- #
- # Check for: Tag with same name as enclosing tag.
- #
- else if ($enclosing_tag_re !== '' &&
- # Same name as enclosing tag.
- preg_match('{^</?(?:'.$enclosing_tag_re.')\b}', $tag))
- {
- #
- # Increase/decrease nested tag count.
- #
- if ($tag{1} == '/') $depth--;
- else if ($tag{strlen($tag)-2} != '/') $depth++;
-
- if ($depth < 0) {
- #
- # Going out of parent element. Clean up and break so we
- # return to the calling function.
- #
- $text = $tag . $text;
- break;
- }
-
- $parsed .= $tag;
- }
- else {
- $parsed .= $tag;
- }
- } while ($depth >= 0);
-
- return array($parsed, $text);
- }
- function _hashHTMLBlocks_inHTML($text, $hash_method, $md_attr) {
- #
- # Parse HTML, calling _HashHTMLBlocks_InMarkdown for block tags.
- #
- # * Calls $hash_method to convert any blocks.
- # * Stops when the first opening tag closes.
- # * $md_attr indicate if the use of the `markdown="1"` attribute is allowed.
- # (it is not inside clean tags)
- #
- # Returns an array of that form: ( processed text , remaining text )
- #
- if ($text === '') return array('', '');
-
- # Regex to match `markdown` attribute inside of a tag.
- $markdown_attr_re = '
- {
- \s* # Eat whitespace before the `markdown` attribute
- markdown
- \s*=\s*
- (?>
- (["\']) # $1: quote delimiter
- (.*?) # $2: attribute value
- \1 # matching delimiter
- |
- ([^\s>]*) # $3: unquoted attribute value
- )
- () # $4: make $3 always defined (avoid warnings)
- }xs';
-
- # Regex to match any tag.
- $tag_re = '{
- ( # $2: Capture whole tag.
- </? # Any opening or closing tag.
- [\w:$]+ # Tag name.
- (?:
- (?=[\s"\'/a-zA-Z0-9]) # Allowed characters after tag name.
- (?>
- ".*?" | # Double quotes (can contain `>`)
- \'.*?\' | # Single quotes (can contain `>`)
- .+? # Anything but quotes and `>`.
- )*?
- )?
- > # End of tag.
- |
- <!-- .*? --> # HTML Comment
- |
- <\?.*?\?> | <%.*?%> # Processing instruction
- |
- <!\[CDATA\[.*?\]\]> # CData Block
- )
- }xs';
-
- $original_text = $text; # Save original text in case of faliure.
-
- $depth = 0; # Current depth inside the tag tree.
- $block_text = ""; # Temporary text holder for current text.
- $parsed = ""; # Parsed text that will be returned.
-
- #
- # Get the name of the starting tag.
- # (This pattern makes $base_tag_name_re safe without quoting.)
- #
- if (preg_match('/^<([\w:$]*)\b/', $text, $matches))
- $base_tag_name_re = $matches[1];
-
- #
- # Loop through every tag until we find the corresponding closing tag.
- #
- do {
- #
- # Split the text using the first $tag_match pattern found.
- # Text before pattern will be first in the array, text after
- # pattern will be at the end, and between will be any catches made
- # by the pattern.
- #
- $parts = preg_split($tag_re, $text, 2, PREG_SPLIT_DELIM_CAPTURE);
-
- if (count($parts) < 3) {
- #
- # End of $text reached with unbalenced tag(s).
- # In that case, we return original text unchanged and pass the
- # first character as filtered to prevent an infinite loop in the
- # parent function.
- #
- return array($original_text{0}, substr($original_text, 1));
- }
-
- $block_text .= $parts[0]; # Text before current tag.
- $tag = $parts[1]; # Tag to handle.
- $text = $parts[2]; # Remaining text after current tag.
-
- #
- # Check for: Auto-close tag (like <hr/>)
- # Comments and Processing Instructions.
- #
- if (preg_match('{^</?(?:'.$this->auto_close_tags_re.')\b}', $tag) ||
- $tag{1} == '!' || $tag{1} == '?')
- {
- # Just add the tag to the block as if it was text.
- $block_text .= $tag;
- }
- else {
- #
- # Increase/decrease nested tag count. Only do so if
- # the tag's name match base tag's.
- #
- if (preg_match('{^</?'.$base_tag_name_re.'\b}', $tag)) {
- if ($tag{1} == '/') $depth--;
- else if ($tag{strlen($tag)-2} != '/') $depth++;
- }
-
- #
- # Check for `markdown="1"` attribute and handle it.
- #
- if ($md_attr &&
- preg_match($markdown_attr_re, $tag, $attr_m) &&
- preg_match('/^1|block|span$/', $attr_m[2] . $attr_m[3]))
- {
- # Remove `markdown` attribute from opening tag.
- $tag = preg_replace($markdown_attr_re, '', $tag);
-
- # Check if text inside this tag must be parsed in span mode.
- $this->mode = $attr_m[2] . $attr_m[3];
- $span_mode = $this->mode == 'span' || $this->mode != 'block' &&
- preg_match('{^<(?:'.$this->contain_span_tags_re.')\b}', $tag);
-
- # Calculate indent before tag.
- if (preg_match('/(?:^|\n)( *?)(?! ).*?$/', $block_text, $matches)) {
- $strlen = $this->utf8_strlen;
- $indent = $strlen($matches[1], 'UTF-8');
- } else {
- $indent = 0;
- }
-
- # End preceding block with this tag.
- $block_text .= $tag;
- $parsed .= $this->$hash_method($block_text);
-
- # Get enclosing tag name for the ParseMarkdown function.
- # (This pattern makes $tag_name_re safe without quoting.)
- preg_match('/^<([\w:$]*)\b/', $tag, $matches);
- $tag_name_re = $matches[1];
-
- # Parse the content using the HTML-in-Markdown parser.
- list ($block_text, $text)
- = $this->_hashHTMLBlocks_inMarkdown($text, $indent,
- $tag_name_re, $span_mode);
-
- # Outdent markdown text.
- if ($indent > 0) {
- $block_text = preg_replace("/^[ ]{1,$indent}/m", "",
- $block_text);
- }
-
- # Append tag content to parsed text.
- if (!$span_mode) $parsed .= "\n\n$block_text\n\n";
- else $parsed .= "$block_text";
-
- # Start over with a new block.
- $block_text = "";
- }
- else $block_text .= $tag;
- }
-
- } while ($depth > 0);
-
- #
- # Hash last block text that wasn't processed inside the loop.
- #
- $parsed .= $this->$hash_method($block_text);
-
- return array($parsed, $text);
- }
-
-
- function hashClean($text) {
- #
- # Called whenever a tag must be hashed when a function inserts a "clean" tag
- # in $text, it passes through this function and is automaticaly escaped,
- # blocking invalid nested overlap.
- #
- return $this->hashPart($text, 'C');
- }
-
-
- function doAnchors($text) {
- #
- # Turn Markdown link shortcuts into XHTML <a> tags.
- #
- if ($this->in_anchor) return $text;
- $this->in_anchor = true;
-
- #
- # First, handle reference-style links: [link text] [id]
- #
- $text = preg_replace_callback('{
- ( # wrap whole match in $1
- \[
- ('.$this->nested_brackets_re.') # link text = $2
- \]
-
- [ ]? # one optional space
- (?:\n[ ]*)? # one optional newline followed by spaces
-
- \[
- (.*?) # id = $3
- \]
- )
- }xs',
- array(&$this, '_doAnchors_reference_callback'), $text);
-
- #
- # Next, inline-style links: [link text](url "optional title")
- #
- $text = preg_replace_callback('{
- ( # wrap whole match in $1
- \[
- ('.$this->nested_brackets_re.') # link text = $2
- \]
- \( # literal paren
- [ \n]*
- (?:
- <(.+?)> # href = $3
- |
- ('.$this->nested_url_parenthesis_re.') # href = $4
- )
- [ \n]*
- ( # $5
- ([\'"]) # quote char = $6
- (.*?) # Title = $7
- \6 # matching quote
- [ \n]* # ignore any spaces/tabs between closing quote and )
- )? # title is optional
- \)
- (?:[ ]? '.$this->id_class_attr_catch_re.' )? # $8 = id/class attributes
- )
- }xs',
- array(&$this, '_doAnchors_inline_callback'), $text);
-
- #
- # Last, handle reference-style shortcuts: [link text]
- # These must come last in case you've also got [link text][1]
- # or [link text](/foo)
- #
- $text = preg_replace_callback('{
- ( # wrap whole match in $1
- \[
- ([^\[\]]+) # link text = $2; can\'t contain [ or ]
- \]
- )
- }xs',
- array(&$this, '_doAnchors_reference_callback'), $text);
-
- $this->in_anchor = false;
- return $text;
- }
- function _doAnchors_reference_callback($matches) {
- $whole_match = $matches[1];
- $link_text = $matches[2];
- $link_id =& $matches[3];
-
- if ($link_id == "") {
- # for shortcut links like [this][] or [this].
- $link_id = $link_text;
- }
-
- # lower-case and turn embedded newlines into spaces
- $link_id = strtolower($link_id);
- $link_id = preg_replace('{[ ]?\n}', ' ', $link_id);
-
- if (isset($this->urls[$link_id])) {
- $url = $this->urls[$link_id];
- $url = $this->encodeAttribute($url);
-
- $result = "<a href=\"$url\"";
- if ( isset( $this->titles[$link_id] ) ) {
- $title = $this->titles[$link_id];
- $title = $this->encodeAttribute($title);
- $result .= " title=\"$title\"";
- }
- if (isset($this->ref_attr[$link_id]))
- $result .= $this->ref_attr[$link_id];
-
- $link_text = $this->runSpanGamut($link_text);
- $result .= ">$link_text</a>";
- $result = $this->hashPart($result);
- }
- else {
- $result = $whole_match;
- }
- return $result;
- }
- function _doAnchors_inline_callback($matches) {
- $whole_match = $matches[1];
- $link_text = $this->runSpanGamut($matches[2]);
- $url = $matches[3] == '' ? $matches[4] : $matches[3];
- $title =& $matches[7];
- $attr = $this->doExtraAttributes("a", $dummy =& $matches[8]);
-
-
- $url = $this->encodeAttribute($url);
-
- $result = "<a href=\"$url\"";
- if (isset($title)) {
- $title = $this->encodeAttribute($title);
- $result .= " title=\"$title\"";
- }
- $result .= $attr;
-
- $link_text = $this->runSpanGamut($link_text);
- $result .= ">$link_text</a>";
-
- return $this->hashPart($result);
- }
-
-
- function doImages($text) {
- #
- # Turn Markdown image shortcuts into <img> tags.
- #
- #
- # First, handle reference-style labeled images: ![alt text][id]
- #
- $text = preg_replace_callback('{
- ( # wrap whole match in $1
- !\[
- ('.$this->nested_brackets_re.') # alt text = $2
- \]
-
- [ ]? # one optional space
- (?:\n[ ]*)? # one optional newline followed by spaces
-
- \[
- (.*?) # id = $3
- \]
-
- )
- }xs',
- array(&$this, '_doImages_reference_callback'), $text);
-
- #
- # Next, handle inline images: ![alt text](url "optional title")
- # Don't forget: encode * and _
- #
- $text = preg_replace_callback('{
- ( # wrap whole match in $1
- !\[
- ('.$this->nested_brackets_re.') # alt text = $2
- \]
- \s? # One optional whitespace character
- \( # literal paren
- [ \n]*
- (?:
- <(\S*)> # src url = $3
- |
- ('.$this->nested_url_parenthesis_re.') # src url = $4
- )
- [ \n]*
- ( # $5
- ([\'"]) # quote char = $6
- (.*?) # title = $7
- \6 # matching quote
- [ \n]*
- )? # title is optional
- \)
- (?:[ ]? '.$this->id_class_attr_catch_re.' )? # $8 = id/class attributes
- )
- }xs',
- array(&$this, '_doImages_inline_callback'), $text);
-
- return $text;
- }
- function _doImages_reference_callback($matches) {
- $whole_match = $matches[1];
- $alt_text = $matches[2];
- $link_id = strtolower($matches[3]);
-
- if ($link_id == "") {
- $link_id = strtolower($alt_text); # for shortcut links like ![this][].
- }
-
- $alt_text = $this->encodeAttribute($alt_text);
- if (isset($this->urls[$link_id])) {
- $url = $this->encodeAttribute($this->urls[$link_id]);
- $result = "<img src=\"$url\" alt=\"$alt_text\"";
- if (isset($this->titles[$link_id])) {
- $title = $this->titles[$link_id];
- $title = $this->encodeAttribute($title);
- $result .= " title=\"$title\"";
- }
- if (isset($this->ref_attr[$link_id]))
- $result .= $this->ref_attr[$link_id];
- $result .= $this->empty_element_suffix;
- $result = $this->hashPart($result);
- }
- else {
- # If there's no such link ID, leave intact:
- $result = $whole_match;
- }
-
- return $result;
- }
- function _doImages_inline_callback($matches) {
- $whole_match = $matches[1];
- $alt_text = $matches[2];
- $url = $matches[3] == '' ? $matches[4] : $matches[3];
- $title =& $matches[7];
- $attr = $this->doExtraAttributes("img", $dummy =& $matches[8]);
-
- $alt_text = $this->encodeAttribute($alt_text);
- $url = $this->encodeAttribute($url);
- $result = "<img src=\"$url\" alt=\"$alt_text\"";
- if (isset($title)) {
- $title = $this->encodeAttribute($title);
- $result .= " title=\"$title\""; # $title already quoted
- }
- $result .= $attr;
- $result .= $this->empty_element_suffix;
-
- return $this->hashPart($result);
- }
-
-
- function doHeaders($text) {
- #
- # Redefined to add id and class attribute support.
- #
- # Setext-style headers:
- # Header 1 {#header1}
- # ========
- #
- # Header 2 {#header2 .class1 .class2}
- # --------
- #
- $text = preg_replace_callback(
- '{
- (^.+?) # $1: Header text
- (?:[ ]+ '.$this->id_class_attr_catch_re.' )? # $3 = id/class attributes
- [ ]*\n(=+|-+)[ ]*\n+ # $3: Header footer
- }mx',
- array(&$this, '_doHeaders_callback_setext'), $text);
-
- # atx-style headers:
- # # Header 1 {#header1}
- # ## Header 2 {#header2}
- # ## Header 2 with closing hashes ## {#header3.class1.class2}
- # ...
- # ###### Header 6 {.class2}
- #
- $text = preg_replace_callback('{
- ^(\#{1,6}) # $1 = string of #\'s
- [ ]*
- (.+?) # $2 = Header text
- [ ]*
- \#* # optional closing #\'s (not counted)
- (?:[ ]+ '.$this->id_class_attr_catch_re.' )? # $3 = id/class attributes
- [ ]*
- \n+
- }xm',
- array(&$this, '_doHeaders_callback_atx'), $text);
-
- return $text;
- }
- function _doHeaders_callback_setext($matches) {
- if ($matches[3] == '-' && preg_match('{^- }', $matches[1]))
- return $matches[0];
- $level = $matches[3]{0} == '=' ? 1 : 2;
- $attr = $this->doExtraAttributes("h$level", $dummy =& $matches[2]);
- $block = "<h$level$attr>".$this->runSpanGamut($matches[1])."</h$level>";
- return "\n" . $this->hashBlock($block) . "\n\n";
- }
- function _doHeaders_callback_atx($matches) {
- $level = strlen($matches[1]);
- $attr = $this->doExtraAttributes("h$level", $dummy =& $matches[3]);
- $block = "<h$level$attr>".$this->runSpanGamut($matches[2])."</h$level>";
- return "\n" . $this->hashBlock($block) . "\n\n";
- }
-
-
- function doTables($text) {
- #
- # Form HTML tables.
- #
- $less_than_tab = $this->tab_width - 1;
- #
- # Find tables with leading pipe.
- #
- # | Header 1 | Header 2
- # | -------- | --------
- # | Cell 1 | Cell 2
- # | Cell 3 | Cell 4
- #
- $text = preg_replace_callback('
- {
- ^ # Start of a line
- [ ]{0,'.$less_than_tab.'} # Allowed whitespace.
- [|] # Optional leading pipe (present)
- (.+) \n # $1: Header row (at least one pipe)
-
- [ ]{0,'.$less_than_tab.'} # Allowed whitespace.
- [|] ([ ]*[-:]+[-| :]*) \n # $2: Header underline
-
- ( # $3: Cells
- (?>
- [ ]* # Allowed whitespace.
- [|] .* \n # Row content.
- )*
- )
- (?=\n|\Z) # Stop at final double newline.
- }xm',
- array(&$this, '_doTable_leadingPipe_callback'), $text);
-
- #
- # Find tables without leading pipe.
- #
- # Header 1 | Header 2
- # -------- | --------
- # Cell 1 | Cell 2
- # Cell 3 | Cell 4
- #
- $text = preg_replace_callback('
- {
- ^ # Start of a line
- [ ]{0,'.$less_than_tab.'} # Allowed whitespace.
- (\S.*[|].*) \n # $1: Header row (at least one pipe)
-
- [ ]{0,'.$less_than_tab.'} # Allowed whitespace.
- ([-:]+[ ]*[|][-| :]*) \n # $2: Header underline
-
- ( # $3: Cells
- (?>
- .* [|] .* \n # Row content
- )*
- )
- (?=\n|\Z) # Stop at final double newline.
- }xm',
- array(&$this, '_DoTable_callback'), $text);
-
- return $text;
- }
- function _doTable_leadingPipe_callback($matches) {
- $head = $matches[1];
- $underline = $matches[2];
- $content = $matches[3];
-
- # Remove leading pipe for each row.
- $content = preg_replace('/^ *[|]/m', '', $content);
-
- return $this->_doTable_callback(array($matches[0], $head, $underline, $content));
- }
- function _doTable_callback($matches) {
- $head = $matches[1];
- $underline = $matches[2];
- $content = $matches[3];
-
- # Remove any tailing pipes for each line.
- $head = preg_replace('/[|] *$/m', '', $head);
- $underline = preg_replace('/[|] *$/m', '', $underline);
- $content = preg_replace('/[|] *$/m', '', $content);
-
- # Reading alignement from header underline.
- $separators = preg_split('/ *[|] */', $underline);
- foreach ($separators as $n => $s) {
- if (preg_match('/^ *-+: *$/', $s)) $attr[$n] = ' align="right"';
- else if (preg_match('/^ *:-+: *$/', $s))$attr[$n] = ' align="center"';
- else if (preg_match('/^ *:-+ *$/', $s)) $attr[$n] = ' align="left"';
- else $attr[$n] = '';
- }
-
- # Parsing span elements, including code spans, character escapes,
- # and inline HTML tags, so that pipes inside those gets ignored.
- $head = $this->parseSpan($head);
- $headers = preg_split('/ *[|] */', $head);
- $col_count = count($headers);
- $attr = array_pad($attr, $col_count, '');
-
- # Write column headers.
- $text = "<table>\n";
- $text .= "<thead>\n";
- $text .= "<tr>\n";
- foreach ($headers as $n => $header)
- $text .= " <th$attr[$n]>".$this->runSpanGamut(trim($header))."</th>\n";
- $text .= "</tr>\n";
- $text .= "</thead>\n";
-
- # Split content by row.
- $rows = explode("\n", trim($content, "\n"));
-
- $text .= "<tbody>\n";
- foreach ($rows as $row) {
- # Parsing span elements, including code spans, character escapes,
- # and inline HTML tags, so that pipes inside those gets ignored.
- $row = $this->parseSpan($row);
-
- # Split row by cell.
- $row_cells = preg_split('/ *[|] */', $row, $col_count);
- $row_cells = array_pad($row_cells, $col_count, '');
-
- $text .= "<tr>\n";
- foreach ($row_cells as $n => $cell)
- $text .= " <td$attr[$n]>".$this->runSpanGamut(trim($cell))."</td>\n";
- $text .= "</tr>\n";
- }
- $text .= "</tbody>\n";
- $text .= "</table>";
-
- return $this->hashBlock($text) . "\n";
- }
-
-
- function doDefLists($text) {
- #
- # Form HTML definition lists.
- #
- $less_than_tab = $this->tab_width - 1;
-
- # Re-usable pattern to match any entire dl list:
- $whole_list_re = '(?>
- ( # $1 = whole list
- ( # $2
- [ ]{0,'.$less_than_tab.'}
- ((?>.*\S.*\n)+) # $3 = defined term
- \n?
- [ ]{0,'.$less_than_tab.'}:[ ]+ # colon starting definition
- )
- (?s:.+?)
- ( # $4
- \z
- |
- \n{2,}
- (?=\S)
- (?! # Negative lookahead for another term
- [ ]{0,'.$less_than_tab.'}
- (?: \S.*\n )+? # defined term
- \n?
- [ ]{0,'.$less_than_tab.'}:[ ]+ # colon starting definition
- )
- (?! # Negative lookahead for another definition
- [ ]{0,'.$less_than_tab.'}:[ ]+ # colon starting definition
- )
- )
- )
- )'; // mx
-
- $text = preg_replace_callback('{
- (?>\A\n?|(?<=\n\n))
- '.$whole_list_re.'
- }mx',
- array(&$this, '_doDefLists_callback'), $text);
-
- return $text;
- }
- function _doDefLists_callback($matches) {
- # Re-usable patterns to match list item bullets and number markers:
- $list = $matches[1];
-
- # Turn double returns into triple returns, so that we can make a
- # paragraph for the last item in a list, if necessary:
- $result = trim($this->processDefListItems($list));
- $result = "<dl>\n" . $result . "\n</dl>";
- return $this->hashBlock($result) . "\n\n";
- }
-
-
- function processDefListItems($list_str) {
- #
- # Process the contents of a single definition list, splitting it
- # into individual term and definition list items.
- #
- $less_than_tab = $this->tab_width - 1;
-
- # trim trailing blank lines:
- $list_str = preg_replace("/\n{2,}\\z/", "\n", $list_str);
-
- # Process definition terms.
- $list_str = preg_replace_callback('{
- (?>\A\n?|\n\n+) # leading line
- ( # definition terms = $1
- [ ]{0,'.$less_than_tab.'} # leading whitespace
- (?!\:[ ]|[ ]) # negative lookahead for a definition
- # mark (colon) or more whitespace.
- (?> \S.* \n)+? # actual term (not whitespace).
- )
- (?=\n?[ ]{0,3}:[ ]) # lookahead for following line feed
- # with a definition mark.
- }xm',
- array(&$this, '_processDefListItems_callback_dt'), $list_str);
-
- # Process actual definitions.
- $list_str = preg_replace_callback('{
- \n(\n+)? # leading line = $1
- ( # marker space = $2
- [ ]{0,'.$less_than_tab.'} # whitespace before colon
- \:[ ]+ # definition mark (colon)
- )
- ((?s:.+?)) # definition text = $3
- (?= \n+ # stop at next definition mark,
- (?: # next term or end of text
- [ ]{0,'.$less_than_tab.'} \:[ ] |
- <dt> | \z
- )
- )
- }xm',
- array(&$this, '_processDefListItems_callback_dd'), $list_str);
-
- return $list_str;
- }
- function _processDefListItems_callback_dt($matches) {
- $terms = explode("\n", trim($matches[1]));
- $text = '';
- foreach ($terms as $term) {
- $term = $this->runSpanGamut(trim($term));
- $text .= "\n<dt>" . $term . "</dt>";
- }
- return $text . "\n";
- }
- function _processDefListItems_callback_dd($matches) {
- $leading_line = $matches[1];
- $marker_space = $matches[2];
- $def = $matches[3];
-
- if ($leading_line || preg_match('/\n{2,}/', $def)) {
- # Replace marker with the appropriate whitespace indentation
- $def = str_repeat(' ', strlen($marker_space)) . $def;
- $def = $this->runBlockGamut($this->outdent($def . "\n\n"));
- $def = "\n". $def ."\n";
- }
- else {
- $def = rtrim($def);
- $def = $this->runSpanGamut($this->outdent($def));
- }
-
- return "\n<dd>" . $def . "</dd>\n";
- }
-
-
- function doFencedCodeBlocks($text) {
- #
- # Adding the fenced code block syntax to regular Markdown:
- #
- # ~~~
- # Code block
- # ~~~
- #
- $less_than_tab = $this->tab_width;
-
- $text = preg_replace_callback('{
- (?:\n|\A)
- # 1: Opening marker
- (
- (?:~{3,}|`{3,}) # 3 or more tildes/backticks.
- )
- [ ]*
- (?:
- \.?([-_:a-zA-Z0-9]+) # 2: standalone class name
- |
- '.$this->id_class_attr_catch_re.' # 3: Extra attributes
- )?
- [ ]* \n # Whitespace and newline following marker.
-
- # 4: Content
- (
- (?>
- (?!\1 [ ]* \n) # Not a closing marker.
- .*\n+
- )+
- )
-
- # Closing marker.
- \1 [ ]* (?= \n )
- }xm',
- array(&$this, '_doFencedCodeBlocks_callback'), $text);
-
- return $text;
- }
- function _doFencedCodeBlocks_callback($matches) {
- $classname =& $matches[2];
- $attrs =& $matches[3];
- $codeblock = $matches[4];
- $codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES);
- $codeblock = preg_replace_callback('/^\n+/',
- array(&$this, '_doFencedCodeBlocks_newlines'), $codeblock);
-
- if ($classname != "") {
- if ($classname{0} == '.')
- $classname = substr($classname, 1);
- $attr_str = ' class="'.$this->code_class_prefix.$classname.'"';
- } else {
- $attr_str = $this->doExtraAttributes($this->code_attr_on_pre ? "pre" : "code", $attrs);
- }
- $pre_attr_str = $this->code_attr_on_pre ? $attr_str : '';
- $code_attr_str = $this->code_attr_on_pre ? '' : $attr_str;
- $codeblock = "<pre$pre_attr_str><code$code_attr_str>$codeblock</code></pre>";
-
- return "\n\n".$this->hashBlock($codeblock)."\n\n";
- }
- function _doFencedCodeBlocks_newlines($matches) {
- return str_repeat("<br$this->empty_element_suffix",
- strlen($matches[0]));
- }
-
-
- #
- # Redefining emphasis markers so that emphasis by underscore does not
- # work in the middle of a word.
- #
- public $em_relist = array(
- '' => '(?:(?<!\*)\*(?!\*)|(?<![a-zA-Z0-9_])_(?!_))(?=\S|$)(?![\.,:;]\s)',
- '*' => '(?<=\S|^)(?<!\*)\*(?!\*)',
- '_' => '(?<=\S|^)(?<!_)_(?![a-zA-Z0-9_])',
- );
- public $strong_relist = array(
- '' => '(?:(?<!\*)\*\*(?!\*)|(?<![a-zA-Z0-9_])__(?!_))(?=\S|$)(?![\.,:;]\s)',
- '**' => '(?<=\S|^)(?<!\*)\*\*(?!\*)',
- '__' => '(?<=\S|^)(?<!_)__(?![a-zA-Z0-9_])',
- );
- public $em_strong_relist = array(
- '' => '(?:(?<!\*)\*\*\*(?!\*)|(?<![a-zA-Z0-9_])___(?!_))(?=\S|$)(?![\.,:;]\s)',
- '***' => '(?<=\S|^)(?<!\*)\*\*\*(?!\*)',
- '___' => '(?<=\S|^)(?<!_)___(?![a-zA-Z0-9_])',
- );
-
-
- function formParagraphs($text) {
- #
- # Params:
- # $text - string to process with html <p> tags
- #
- # Strip leading and trailing lines:
- $text = preg_replace('/\A\n+|\n+\z/', '', $text);
-
- $grafs = preg_split('/\n{2,}/', $text, -1, PREG_SPLIT_NO_EMPTY);
-
- #
- # Wrap <p> tags and unhashify HTML blocks
- #
- foreach ($grafs as $key => $value) {
- $value = trim($this->runSpanGamut($value));
-
- # Check if this should be enclosed in a paragraph.
- # Clean tag hashes & block tag hashes are left alone.
- $is_p = !preg_match('/^B\x1A[0-9]+B|^C\x1A[0-9]+C$/', $value);
-
- if ($is_p) {
- $value = "<p>$value</p>";
- }
- $grafs[$key] = $value;
- }
-
- # Join grafs in one text, then unhash HTML tags.
- $text = implode("\n\n", $grafs);
-
- # Finish by removing any tag hashes still present in $text.
- $text = $this->unhash($text);
-
- return $text;
- }
-
-
- ### Footnotes
-
- function stripFootnotes($text) {
- #
- # Strips link definitions from text, stores the URLs and titles in
- # hash references.
- #
- $less_than_tab = $this->tab_width - 1;
-
- # Link defs are in the form: [^id]: url "optional title"
- $text = preg_replace_callback('{
- ^[ ]{0,'.$less_than_tab.'}\[\^(.+?)\][ ]?: # note_id = $1
- [ ]*
- \n? # maybe *one* newline
- ( # text = $2 (no blank lines allowed)
- (?:
- .+ # actual text
- |
- \n # newlines but
- (?!\[\^.+?\]:\s)# negative lookahead for footnote marker.
- (?!\n+[ ]{0,3}\S)# ensure line is not blank and followed
- # by non-indented content
- )*
- )
- }xm',
- array(&$this, '_stripFootnotes_callback'),
- $text);
- return $text;
- }
- function _stripFootnotes_callback($matches) {
- $note_id = $this->fn_id_prefix . $matches[1];
- $this->footnotes[$note_id] = $this->outdent($matches[2]);
- return ''; # String that will replace the block
- }
-
-
- function doFootnotes($text) {
- #
- # Replace footnote references in $text [^id] with a special text-token
- # which will be replaced by the actual footnote marker in appendFootnotes.
- #
- if (!$this->in_anchor) {
- $text = preg_replace('{\[\^(.+?)\]}', "F\x1Afn:\\1\x1A:", $text);
- }
- return $text;
- }
-
-
- function appendFootnotes($text) {
- #
- # Append footnote list to text.
- #
- $text = preg_replace_callback('{F\x1Afn:(.*?)\x1A:}',
- array(&$this, '_appendFootnotes_callback'), $text);
-
- if (!empty($this->footnotes_ordered)) {
- $text .= "\n\n";
- $text .= "<div class=\"footnotes\">\n";
- $text .= "<hr". $this->empty_element_suffix ."\n";
- $text .= "<ol>\n\n";
-
- $attr = "";
- if ($this->fn_backlink_class != "") {
- $class = $this->fn_backlink_class;
- $class = $this->encodeAttribute($class);
- $attr .= " class=\"$class\"";
- }
- if ($this->fn_backlink_title != "") {
- $title = $this->fn_backlink_title;
- $title = $this->encodeAttribute($title);
- $attr .= " title=\"$title\"";
- }
- $num = 0;
-
- while (!empty($this->footnotes_ordered)) {
- $footnote = reset($this->footnotes_ordered);
- $note_id = key($this->footnotes_ordered);
- unset($this->footnotes_ordered[$note_id]);
- $ref_count = $this->footnotes_ref_count[$note_id];
- unset($this->footnotes_ref_count[$note_id]);
- unset($this->footnotes[$note_id]);
-
- $footnote .= "\n"; # Need to append newline before parsing.
- $footnote = $this->runBlockGamut("$footnote\n");
- $footnote = preg_replace_callback('{F\x1Afn:(.*?)\x1A:}',
- array(&$this, '_appendFootnotes_callback'), $footnote);
-
- $attr = str_replace("%%", ++$num, $attr);
- $note_id = $this->encodeAttribute($note_id);
-
- # Prepare backlink, multiple backlinks if multiple references
- $backlink = "<a href=\"#fnref:$note_id\"$attr>&#8617;</a>";
- for ($ref_num = 2; $ref_num <= $ref_count; ++$ref_num) {
- $backlink .= " <a href=\"#fnref$ref_num:$note_id\"$attr>&#8617;</a>";
- }
- # Add backlink to last paragraph; create new paragraph if needed.
- if (preg_match('{</p>$}', $footnote)) {
- $footnote = substr($footnote, 0, -4) . "&#160;$backlink</p>";
- } else {
- $footnote .= "\n\n<p>$backlink</p>";
- }
-
- $text .= "<li id=\"fn:$note_id\">\n";
- $text .= $footnote . "\n";
- $text .= "</li>\n\n";
- }
-
- $text .= "</ol>\n";
- $text .= "</div>";
- }
- return $text;
- }
- function _appendFootnotes_callback($matches) {
- $node_id = $this->fn_id_prefix . $matches[1];
-
- # Create footnote marker only if it has a corresponding footnote *and*
- # the footnote hasn't been used by another marker.
- if (isset($this->footnotes[$node_id])) {
- $num =& $this->footnotes_numbers[$node_id];
- if (!isset($num)) {
- # Transfer footnote content to the ordered list and give it its
- # number
- $this->footnotes_ordered[$node_id] = $this->footnotes[$node_id];
- $this->footnotes_ref_count[$node_id] = 1;
- $num = $this->footnote_counter++;
- $ref_count_mark = '';
- } else {
- $ref_count_mark = $this->footnotes_ref_count[$node_id] += 1;
- }
-
- $attr = "";
- if ($this->fn_link_class != "") {
- $class = $this->fn_link_class;
- $class = $this->encodeAttribute($class);
- $attr .= " class=\"$class\"";
- }
- if ($this->fn_link_title != "") {
- $title = $this->fn_link_title;
- $title = $this->encodeAttribute($title);
- $attr .= " title=\"$title\"";
- }
-
- $attr = str_replace("%%", $num, $attr);
- $node_id = $this->encodeAttribute($node_id);
-
- return
- "<sup id=\"fnref$ref_count_mark:$node_id\">".
- "<a href=\"#fn:$node_id\"$attr>$num</a>".
- "</sup>";
- }
-
- return "[^".$matches[1]."]";
- }
-
-
- ### Abbreviations ###
-
- function stripAbbreviations($text) {
- #
- # Strips abbreviations from text, stores titles in hash references.
- #
- $less_than_tab = $this->tab_width - 1;
-
- # Link defs are in the form: [id]*: url "optional title"
- $text = preg_replace_callback('{
- ^[ ]{0,'.$less_than_tab.'}\*\[(.+?)\][ ]?: # abbr_id = $1
- (.*) # text = $2 (no blank lines allowed)
- }xm',
- array(&$this, '_stripAbbreviations_callback'),
- $text);
- return $text;
- }
- function _stripAbbreviations_callback($matches) {
- $abbr_word = $matches[1];
- $abbr_desc = $matches[2];
- if ($this->abbr_word_re)
- $this->abbr_word_re .= '|';
- $this->abbr_word_re .= preg_quote($abbr_word);
- $this->abbr_desciptions[$abbr_word] = trim($abbr_desc);
- return ''; # String that will replace the block
- }
-
-
- function doAbbreviations($text) {
- #
- # Find defined abbreviations in text and wrap them in <abbr> elements.
- #
- if ($this->abbr_word_re) {
- // cannot use the /x modifier because abbr_word_re may
- // contain significant spaces:
- $text = preg_replace_callback('{'.
- '(?<![\w\x1A])'.
- '(?:'.$this->abbr_word_re.')'.
- '(?![\w\x1A])'.
- '}',
- array(&$this, '_doAbbreviations_callback'), $text);
- }
- return $text;
- }
- function _doAbbreviations_callback($matches) {
- $abbr = $matches[0];
- if (isset($this->abbr_desciptions[$abbr])) {
- $desc = $this->abbr_desciptions[$abbr];
- if (empty($desc)) {
- return $this->hashPart("<abbr>$abbr</abbr>");
- } else {
- $desc = $this->encodeAttribute($desc);
- return $this->hashPart("<abbr title=\"$desc\">$abbr</abbr>");
- }
- } else {
- return $matches[0];
- }
- }
-
-}
-
-
-/*
-
-PHP Markdown Extra
-==================
-
-Description
------------
-
-This is a PHP port of the original Markdown formatter written in Perl
-by John Gruber. This special "Extra" version of PHP Markdown features
-further enhancements to the syntax for making additional constructs
-such as tables and definition list.
-
-Markdown is a text-to-HTML filter; it translates an easy-to-read /
-easy-to-write structured text format into HTML. Markdown's text format
-is mostly similar to that of plain text email, and supports features such
-as headers, *emphasis*, code blocks, blockquotes, and links.
-
-Markdown's syntax is designed not as a generic markup language, but
-specifically to serve as a front-end to (X)HTML. You can use span-level
-HTML tags anywhere in a Markdown document, and you can use block level
-HTML tags (like <div> and <table> as well).
-
-For more information about Markdown's syntax, see:
-
-<http://daringfireball.net/projects/markdown/>
-
-
-Bugs
-----
-
-To file bug reports please send email to:
-
-<michel.fortin@michelf.ca>
-
-Please include with your report: (1) the example input; (2) the output you
-expected; (3) the output Markdown actually produced.
-
-
-Version History
----------------
-
-See the readme file for detailed release notes for this version.
-
-
-Copyright and License
----------------------
-
-PHP Markdown & Extra
-Copyright (c) 2004-2013 Michel Fortin
-<http://michelf.ca/>
-All rights reserved.
-
-Based on Markdown
-Copyright (c) 2003-2006 John Gruber
-<http://daringfireball.net/>
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-* Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-* Neither the name "Markdown" nor the names of its contributors may
- be used to endorse or promote products derived from this software
- without specific prior written permission.
-
-This software is provided by the copyright holders and contributors "as
-is" and any express or implied warranties, including, but not limited
-to, the implied warranties of merchantability and fitness for a
-particular purpose are disclaimed. In no event shall the copyright owner
-or contributors be liable for any direct, indirect, incidental, special,
-exemplary, or consequential damages (including, but not limited to,
-procurement of substitute goods or services; loss of use, data, or
-profits; or business interruption) however caused and on any theory of
-liability, whether in contract, strict liability, or tort (including
-negligence or otherwise) arising in any way out of the use of this
-software, even if advised of the possibility of such damage.
-
-*/
-?>
diff --git a/plugins/jetpack/_inc/lib/markdown/gfm.php b/plugins/jetpack/_inc/lib/markdown/gfm.php
deleted file mode 100644
index 081e1a11..00000000
--- a/plugins/jetpack/_inc/lib/markdown/gfm.php
+++ /dev/null
@@ -1,400 +0,0 @@
-<?php
-/**
- * GitHub-Flavoured Markdown. Inspired by Evan's plugin, but modified.
- *
- * @author Evan Solomon
- * @author Matt Wiebe <wiebe@automattic.com>
- * @link https://github.com/evansolomon/wp-github-flavored-markdown-comments
- *
- * Add a few extras from GitHub's Markdown implementation. Must be used in a WordPress environment.
- */
-
-class WPCom_GHF_Markdown_Parser extends MarkdownExtra_Parser {
-
- /**
- * Hooray somewhat arbitrary numbers that are fearful of 1.0.x.
- */
- const WPCOM_GHF_MARDOWN_VERSION = '0.9.0';
-
- /**
- * Use a [code] shortcode when encountering a fenced code block
- * @var boolean
- */
- public $use_code_shortcode = true;
-
- /**
- * Preserve shortcodes, untouched by Markdown.
- * This requires use within a WordPress installation.
- * @var boolean
- */
- public $preserve_shortcodes = true;
-
- /**
- * Preserve the legacy $latex your-latex-code-here$ style
- * LaTeX markup
- */
- public $preserve_latex = true;
-
- /**
- * Preserve single-line <code> blocks.
- * @var boolean
- */
- public $preserve_inline_code_blocks = true;
-
- /**
- * Strip paragraphs from the output. This is the right default for WordPress,
- * which generally wants to create its own paragraphs with `wpautop`
- * @var boolean
- */
- public $strip_paras = true;
-
- // Will run through sprintf - you can supply your own syntax if you want
- public $shortcode_start = '[code lang=%s]';
- public $shortcode_end = '[/code]';
-
- // Stores shortcodes we remove and then replace
- protected $preserve_text_hash = array();
-
- /**
- * Set environment defaults based on presence of key functions/classes.
- */
- public function __construct() {
- $this->use_code_shortcode = class_exists( 'SyntaxHighlighter' );
- /**
- * Allow processing shortcode contents.
- *
- * @module markdown
- *
- * @since 4.4.0
- *
- * @param boolean $preserve_shortcodes Defaults to $this->preserve_shortcodes.
- */
- $this->preserve_shortcodes = apply_filters( 'jetpack_markdown_preserve_shortcodes', $this->preserve_shortcodes ) && function_exists( 'get_shortcode_regex' );
- $this->preserve_latex = function_exists( 'latex_markup' );
- $this->strip_paras = function_exists( 'wpautop' );
-
- parent::__construct();
- }
-
- /**
- * Overload to specify heading styles only if the hash has space(s) after it. This is actually in keeping with
- * the documentation and eases the semantic overload of the hash character.
- * #Will Not Produce a Heading 1
- * # This Will Produce a Heading 1
- *
- * @param string $text Markdown text
- * @return string HTML-transformed text
- */
- public function transform( $text ) {
- // Preserve anything inside a single-line <code> element
- if ( $this->preserve_inline_code_blocks ) {
- $text = $this->single_line_code_preserve( $text );
- }
- // Remove all shortcodes so their interiors are left intact
- if ( $this->preserve_shortcodes ) {
- $text = $this->shortcode_preserve( $text );
- }
- // Remove legacy LaTeX so it's left intact
- if ( $this->preserve_latex ) {
- $text = $this->latex_preserve( $text );
- }
-
- // escape line-beginning # chars that do not have a space after them.
- $text = preg_replace_callback( '|^#{1,6}( )?|um', array( $this, '_doEscapeForHashWithoutSpacing' ), $text );
-
- /**
- * Allow third-party plugins to define custom patterns that won't be processed by Markdown.
- *
- * @module markdown
- *
- * @since 3.9.2
- *
- * @param array $custom_patterns Array of custom patterns to be ignored by Markdown.
- */
- $custom_patterns = apply_filters( 'jetpack_markdown_preserve_pattern', array() );
- if ( is_array( $custom_patterns ) && ! empty( $custom_patterns ) ) {
- foreach ( $custom_patterns as $pattern ) {
- $text = preg_replace_callback( $pattern, array( $this, '_doRemoveText'), $text );
- }
- }
-
- // run through core Markdown
- $text = parent::transform( $text );
-
- // Occasionally Markdown Extra chokes on a para structure, producing odd paragraphs.
- $text = str_replace( "<p>&lt;</p>\n\n<p>p>", '<p>', $text );
-
- // put start-of-line # chars back in place
- $text = $this->restore_leading_hash( $text );
-
- // Strip paras if set
- if ( $this->strip_paras ) {
- $text = $this->unp( $text );
- }
-
- // Restore preserved things like shortcodes/LaTeX
- $text = $this->do_restore( $text );
-
- return $text;
- }
-
- /**
- * Prevents blocks like <code>__this__</code> from turning into <code><strong>this</strong></code>
- * @param string $text Text that may need preserving
- * @return string Text that was preserved if needed
- */
- public function single_line_code_preserve( $text ) {
- return preg_replace_callback( '|<code\b[^>]*>(.*?)</code>|', array( $this, 'do_single_line_code_preserve' ), $text );
- }
-
- /**
- * Regex callback for inline code presevation
- * @param array $matches Regex matches
- * @return string Hashed content for later restoration
- */
- public function do_single_line_code_preserve( $matches ) {
- return '<code>' . $this->hash_block( $matches[1] ) . '</code>';
- }
-
- /**
- * Preserve code block contents by HTML encoding them. Useful before getting to KSES stripping.
- * @param string $text Markdown/HTML content
- * @return string Markdown/HTML content with escaped code blocks
- */
- public function codeblock_preserve( $text ) {
- return preg_replace_callback( "/^([`~]{3})([^`\n]+)?\n([^`~]+)(\\1)/m", array( $this, 'do_codeblock_preserve' ), $text );
- }
-
- /**
- * Regex callback for code block preservation.
- * @param array $matches Regex matches
- * @return string Codeblock with escaped interior
- */
- public function do_codeblock_preserve( $matches ) {
- $block = stripslashes( $matches[3] );
- $block = esc_html( $block );
- $block = str_replace( '\\', '\\\\', $block );
- $open = $matches[1] . $matches[2] . "\n";
- return $open . $block . $matches[4];
- }
-
- /**
- * Restore previously preserved (i.e. escaped) code block contents.
- * @param string $text Markdown/HTML content with escaped code blocks
- * @return string Markdown/HTML content
- */
- public function codeblock_restore( $text ) {
- return preg_replace_callback( "/^([`~]{3})([^`\n]+)?\n([^`~]+)(\\1)/m", array( $this, 'do_codeblock_restore' ), $text );
- }
-
- /**
- * Regex callback for code block restoration (unescaping).
- * @param array $matches Regex matches
- * @return string Codeblock with unescaped interior
- */
- public function do_codeblock_restore( $matches ) {
- $block = html_entity_decode( $matches[3], ENT_QUOTES );
- $open = $matches[1] . $matches[2] . "\n";
- return $open . $block . $matches[4];
- }
-
- /**
- * Called to preserve legacy LaTeX like $latex some-latex-text $
- * @param string $text Text in which to preserve LaTeX
- * @return string Text with LaTeX replaced by a hash that will be restored later
- */
- protected function latex_preserve( $text ) {
- // regex from latex_remove()
- $regex = '%
- \$latex(?:=\s*|\s+)
- ((?:
- [^$]+ # Not a dollar
- |
- (?<=(?<!\\\\)\\\\)\$ # Dollar preceded by exactly one slash
- )+)
- (?<!\\\\)\$ # Dollar preceded by zero slashes
- %ix';
- $text = preg_replace_callback( $regex, array( $this, '_doRemoveText'), $text );
- return $text;
- }
-
- /**
- * Called to preserve WP shortcodes from being formatted by Markdown in any way.
- * @param string $text Text in which to preserve shortcodes
- * @return string Text with shortcodes replaced by a hash that will be restored later
- */
- protected function shortcode_preserve( $text ) {
- $text = preg_replace_callback( $this->get_shortcode_regex(), array( $this, '_doRemoveText' ), $text );
- return $text;
- }
-
- /**
- * Restores any text preserved by $this->hash_block()
- * @param string $text Text that may have hashed preservation placeholders
- * @return string Text with hashed preseravtion placeholders replaced by original text
- */
- protected function do_restore( $text ) {
- // Reverse hashes to ensure nested blocks are restored.
- $hashes = array_reverse( $this->preserve_text_hash, true );
- foreach( $hashes as $hash => $value ) {
- $placeholder = $this->hash_maker( $hash );
- $text = str_replace( $placeholder, $value, $text );
- }
- // reset the hash
- $this->preserve_text_hash = array();
- return $text;
- }
-
- /**
- * Regex callback for text preservation
- * @param array $m Regex $matches array
- * @return string A placeholder that will later be replaced by the original text
- */
- protected function _doRemoveText( $m ) {
- return $this->hash_block( $m[0] );
- }
-
- /**
- * Call this to store a text block for later restoration.
- * @param string $text Text to preserve for later
- * @return string Placeholder that will be swapped out later for the original text
- */
- protected function hash_block( $text ) {
- $hash = md5( $text );
- $this->preserve_text_hash[ $hash ] = $text;
- $placeholder = $this->hash_maker( $hash );
- return $placeholder;
- }
-
- /**
- * Less glamorous than the Keymaker
- * @param string $hash An md5 hash
- * @return string A placeholder hash
- */
- protected function hash_maker( $hash ) {
- return 'MARKDOWN_HASH' . $hash . 'MARKDOWN_HASH';
- }
-
- /**
- * Remove bare <p> elements. <p>s with attributes will be preserved.
- * @param string $text HTML content
- * @return string <p>-less content
- */
- public function unp( $text ) {
- return preg_replace( "#<p>(.*?)</p>(\n|$)#ums", '$1$2', $text );
- }
-
- /**
- * A regex of all shortcodes currently registered by the current
- * WordPress installation
- * @uses get_shortcode_regex()
- * @return string A regex for grabbing shortcodes.
- */
- protected function get_shortcode_regex() {
- $pattern = get_shortcode_regex();
-
- // don't match markdown link anchors that could be mistaken for shortcodes.
- $pattern .= '(?!\()';
-
- return "/$pattern/s";
- }
-
- /**
- * Since we escape unspaced #Headings, put things back later.
- * @param string $text text with a leading escaped hash
- * @return string text with leading hashes unescaped
- */
- protected function restore_leading_hash( $text ) {
- return preg_replace( "/^(<p>)?(&#35;|\\\\#)/um", "$1#", $text );
- }
-
- /**
- * Overload to support ```-fenced code blocks for pre-Markdown Extra 1.2.8
- * https://help.github.com/articles/github-flavored-markdown#fenced-code-blocks
- */
- public function doFencedCodeBlocks( $text ) {
- // If we're at least at 1.2.8, native fenced code blocks are in.
- // Below is just copied from it in case we somehow got loaded on
- // top of someone else's Markdown Extra
- if ( version_compare( MARKDOWNEXTRA_VERSION, '1.2.8', '>=' ) )
- return parent::doFencedCodeBlocks( $text );
-
- #
- # Adding the fenced code block syntax to regular Markdown:
- #
- # ~~~
- # Code block
- # ~~~
- #
- $less_than_tab = $this->tab_width;
-
- $text = preg_replace_callback('{
- (?:\n|\A)
- # 1: Opening marker
- (
- (?:~{3,}|`{3,}) # 3 or more tildes/backticks.
- )
- [ ]*
- (?:
- \.?([-_:a-zA-Z0-9]+) # 2: standalone class name
- |
- '.$this->id_class_attr_catch_re.' # 3: Extra attributes
- )?
- [ ]* \n # Whitespace and newline following marker.
-
- # 4: Content
- (
- (?>
- (?!\1 [ ]* \n) # Not a closing marker.
- .*\n+
- )+
- )
-
- # Closing marker.
- \1 [ ]* (?= \n )
- }xm',
- array($this, '_doFencedCodeBlocks_callback'), $text);
-
- return $text;
- }
-
- /**
- * Callback for pre-processing start of line hashes to slyly escape headings that don't
- * have a leading space
- * @param array $m preg_match matches
- * @return string possibly escaped start of line hash
- */
- public function _doEscapeForHashWithoutSpacing( $m ) {
- if ( ! isset( $m[1] ) )
- $m[0] = '\\' . $m[0];
- return $m[0];
- }
-
- /**
- * Overload to support Viper's [code] shortcode. Because awesome.
- */
- public function _doFencedCodeBlocks_callback( $matches ) {
- // in case we have some escaped leading hashes right at the start of the block
- $matches[4] = $this->restore_leading_hash( $matches[4] );
- // just MarkdownExtra_Parser if we're not going ultra-deluxe
- if ( ! $this->use_code_shortcode ) {
- return parent::_doFencedCodeBlocks_callback( $matches );
- }
-
- // default to a "text" class if one wasn't passed. Helps with encoding issues later.
- if ( empty( $matches[2] ) ) {
- $matches[2] = 'text';
- }
-
- $classname =& $matches[2];
- $codeblock = preg_replace_callback('/^\n+/', array( $this, '_doFencedCodeBlocks_newlines' ), $matches[4] );
-
- if ( $classname{0} == '.' )
- $classname = substr( $classname, 1 );
-
- $codeblock = esc_html( $codeblock );
- $codeblock = sprintf( $this->shortcode_start, $classname ) . "\n{$codeblock}" . $this->shortcode_end;
- return "\n\n" . $this->hashBlock( $codeblock ). "\n\n";
- }
-
-}
diff --git a/plugins/jetpack/_inc/lib/plugins.php b/plugins/jetpack/_inc/lib/plugins.php
deleted file mode 100644
index 9c8e3bc4..00000000
--- a/plugins/jetpack/_inc/lib/plugins.php
+++ /dev/null
@@ -1,132 +0,0 @@
-<?php
-/**
- * Plugins Library
- *
- * Helper functions for installing and activating plugins.
- *
- * Used by the REST API
- *
- * @autounit api plugins
- */
-
-include_once( 'class.jetpack-automatic-install-skin.php' );
-
-class Jetpack_Plugins {
-
- /**
- * Install and activate a plugin.
- *
- * @since 5.8.0
- *
- * @param string $slug Plugin slug.
- *
- * @return bool|WP_Error True if installation succeeded, error object otherwise.
- */
- public static function install_and_activate_plugin( $slug ) {
- $plugin_id = self::get_plugin_id_by_slug( $slug );
-
- if ( ! $plugin_id ) {
- $installed = self::install_plugin( $slug );
- if ( is_wp_error( $installed ) ) {
- return $installed;
- }
- $plugin_id = self::get_plugin_id_by_slug( $slug );
- } else if ( is_plugin_active( $plugin_id ) ) {
- return true; // Already installed and active
- }
-
- if ( ! current_user_can( 'activate_plugins' ) ) {
- return new WP_Error( 'not_allowed', __( 'You are not allowed to activate plugins on this site.', 'jetpack' ) );
- }
-
- $activated = activate_plugin( $plugin_id );
- if ( is_wp_error( $activated ) ) {
- return $activated;
- }
-
- return true;
- }
-
- /**
- * Install a plugin.
- *
- * @since 5.8.0
- *
- * @param string $slug Plugin slug.
- *
- * @return bool|WP_Error True if installation succeeded, error object otherwise.
- */
- public static function install_plugin( $slug ) {
- if ( is_multisite() && ! current_user_can( 'manage_network' ) ) {
- return new WP_Error( 'not_allowed', __( 'You are not allowed to install plugins on this site.', 'jetpack' ) );
- }
-
- $skin = new Jetpack_Automatic_Install_Skin();
- $upgrader = new Plugin_Upgrader( $skin );
- $zip_url = self::generate_wordpress_org_plugin_download_link( $slug );
-
- $result = $upgrader->install( $zip_url );
-
- if ( is_wp_error( $result ) ) {
- return $result;
- }
-
- $plugin = Jetpack_Plugins::get_plugin_id_by_slug( $slug );
- $error_code = 'install_error';
- if ( ! $plugin ) {
- $error = __( 'There was an error installing your plugin', 'jetpack' );
- }
-
- if ( ! $result ) {
- $error_code = $upgrader->skin->get_main_error_code();
- $message = $upgrader->skin->get_main_error_message();
- $error = $message ? $message : __( 'An unknown error occurred during installation', 'jetpack' );
- }
-
- if ( ! empty( $error ) ) {
- if ( 'download_failed' === $error_code ) {
- // For backwards compatibility: versions prior to 3.9 would return no_package instead of download_failed.
- $error_code = 'no_package';
- }
-
- return new WP_Error( $error_code, $error, 400 );
- }
-
- return (array) $upgrader->skin->get_upgrade_messages();
- }
-
- protected static function generate_wordpress_org_plugin_download_link( $plugin_slug ) {
- return "https://downloads.wordpress.org/plugin/$plugin_slug.latest-stable.zip";
- }
-
- public static function get_plugin_id_by_slug( $slug ) {
- // Check if get_plugins() function exists. This is required on the front end of the
- // site, since it is in a file that is normally only loaded in the admin.
- if ( ! function_exists( 'get_plugins' ) ) {
- require_once ABSPATH . 'wp-admin/includes/plugin.php';
- }
-
- /** This filter is documented in wp-admin/includes/class-wp-plugins-list-table.php */
- $plugins = apply_filters( 'all_plugins', get_plugins() );
- if ( ! is_array( $plugins ) ) {
- return false;
- }
- foreach ( $plugins as $plugin_file => $plugin_data ) {
- if ( self::get_slug_from_file_path( $plugin_file ) === $slug ) {
- return $plugin_file;
- }
- }
-
- return false;
- }
-
- protected static function get_slug_from_file_path( $plugin_file ) {
- // Similar to get_plugin_slug() method.
- $slug = dirname( $plugin_file );
- if ( '.' === $slug ) {
- $slug = preg_replace( "/(.+)\.php$/", "$1", $plugin_file );
- }
-
- return $slug;
- }
-}
diff --git a/plugins/jetpack/_inc/lib/tonesque.php b/plugins/jetpack/_inc/lib/tonesque.php
deleted file mode 100644
index 17158e3d..00000000
--- a/plugins/jetpack/_inc/lib/tonesque.php
+++ /dev/null
@@ -1,237 +0,0 @@
-<?php
-/*
-Plugin Name: Tonesque
-Plugin URI: http://automattic.com/
-Description: Grab an average color representation from an image.
-Version: 1.0
-Author: Automattic, Matias Ventura
-Author URI: http://automattic.com/
-License: GNU General Public License v2 or later
-License URI: http://www.gnu.org/licenses/gpl-2.0.html
-*/
-
-class Tonesque {
-
- private $image_url = '';
- private $image_obj = NULL;
- private $color = '';
-
- function __construct( $image_url ) {
- if ( ! class_exists( 'Jetpack_Color' ) ) {
- jetpack_require_lib( 'class.color' );
- }
-
- $this->image_url = esc_url_raw( $image_url );
- $this->image_url = trim( $this->image_url );
- /**
- * Allows any image URL to be passed in for $this->image_url.
- *
- * @module theme-tools
- *
- * @since 2.5.0
- *
- * @param string $image_url The URL to any image
- */
- $this->image_url = apply_filters( 'tonesque_image_url', $this->image_url );
-
- $this->image_obj = self::imagecreatefromurl( $this->image_url );
- }
-
- public static function imagecreatefromurl( $image_url ) {
- $data = null;
-
- // If it's a URL:
- if ( preg_match( '#^https?://#i', $image_url ) ) {
- // If it's a url pointing to a local media library url:
- $content_url = content_url();
- $_image_url = set_url_scheme( $image_url );
- if ( wp_startswith( $_image_url, $content_url ) ) {
- $_image_path = str_replace( $content_url, WP_CONTENT_DIR, $_image_url );
- if ( file_exists( $_image_path ) ) {
- $filetype = wp_check_filetype( $_image_path );
- $ext = $filetype['ext'];
- $type = $filetype['type'];
-
- if ( wp_startswith( $type, 'image/' ) ) {
- $data = file_get_contents( $_image_path );
- }
- }
- }
-
- if ( empty( $data ) ) {
- $response = wp_remote_get( $image_url );
- if ( is_wp_error( $response ) ) {
- return false;
- }
- $data = wp_remote_retrieve_body( $response );
- }
- }
-
- // If it's a local path in our WordPress install:
- if ( file_exists( $image_url ) ) {
- $filetype = wp_check_filetype( $image_url );
- $ext = $filetype['ext'];
- $type = $filetype['type'];
-
- if ( wp_startswith( $type, 'image/' ) ) {
- $data = file_get_contents( $image_url );
- }
- }
-
- // Now turn it into an image and return it.
- return imagecreatefromstring( $data );
- }
-
- /**
- *
- * Construct object from image.
- *
- * @param optional $type (hex, rgb, hsv)
- * @return color as a string formatted as $type
- *
- */
- function color( $type = 'hex' ) {
- // Bail if there is no image to work with
- if ( ! $this->image_obj )
- return false;
-
- // Finds dominant color
- $color = self::grab_color();
- // Passes value to Color class
- $color = self::get_color( $color, $type );
- return $color;
- }
-
- /**
- *
- * Grabs the color index for each of five sample points of the image
- *
- * @param $image
- * @param $type can be 'index' or 'hex'
- * @return array() with color indices
- *
- */
- function grab_points( $type = 'index' ) {
- $img = $this->image_obj;
- if ( ! $img )
- return false;
-
- $height = imagesy( $img );
- $width = imagesx( $img );
-
- // Sample five points in the image
- // Based on rule of thirds and center
- $topy = round( $height / 3 );
- $bottomy = round( ( $height / 3 ) * 2 );
- $leftx = round( $width / 3 );
- $rightx = round( ( $width / 3 ) * 2 );
- $centery = round( $height / 2 );
- $centerx = round( $width / 2 );
-
- // Cast those colors into an array
- $points = array(
- imagecolorat( $img, $leftx, $topy ),
- imagecolorat( $img, $rightx, $topy ),
- imagecolorat( $img, $leftx, $bottomy ),
- imagecolorat( $img, $rightx, $bottomy ),
- imagecolorat( $img, $centerx, $centery ),
- );
-
- if ( 'hex' == $type ) {
- foreach ( $points as $i => $p ) {
- $c = imagecolorsforindex( $img, $p );
- $points[ $i ] = self::get_color( array(
- 'r' => $c['red'],
- 'g' => $c['green'],
- 'b' => $c['blue'],
- ), 'hex' );
- }
- }
-
- return $points;
- }
-
- /**
- *
- * Finds the average color of the image based on five sample points
- *
- * @param $image
- * @return array() with rgb color
- *
- */
- function grab_color() {
- $img = $this->image_obj;
- if ( ! $img )
- return false;
-
- $rgb = self::grab_points();
-
- // Process the color points
- // Find the average representation
- foreach ( $rgb as $color ) {
- $index = imagecolorsforindex( $img, $color );
- $r[] = $index['red'];
- $g[] = $index['green'];
- $b[] = $index['blue'];
-
- $red = round( array_sum( $r ) / 5 );
- $green = round( array_sum( $g ) / 5 );
- $blue = round( array_sum( $b ) / 5 );
- }
-
- // The average color of the image as rgb array
- $color = array(
- 'r' => $red,
- 'g' => $green,
- 'b' => $blue,
- );
-
- return $color;
- }
-
- /**
- *
- * Get a Color object using /lib class.color
- * Convert to appropriate type
- *
- * @return string
- *
- */
- function get_color( $color, $type ) {
- $c = new Jetpack_Color( $color, 'rgb' );
- $this->color = $c;
-
- switch ( $type ) {
- case 'rgb' :
- $color = implode( $c->toRgbInt(), ',' );
- break;
- case 'hex' :
- $color = $c->toHex();
- break;
- case 'hsv' :
- $color = implode( $c->toHsvInt(), ',' );
- break;
- default:
- return $color = $c->toHex();
- }
-
- return $color;
- }
-
- /**
- *
- * Checks contrast against main color
- * Gives either black or white for using with opacity
- *
- * @return string
- *
- */
- function contrast() {
- if ( ! $this->color )
- return false;
-
- $c = $this->color->getMaxContrastColor();
- return implode( $c->toRgbInt(), ',' );
- }
-
-};
diff --git a/plugins/jetpack/_inc/lib/tracks/class.tracks-client.php b/plugins/jetpack/_inc/lib/tracks/class.tracks-client.php
deleted file mode 100644
index b83c94f1..00000000
--- a/plugins/jetpack/_inc/lib/tracks/class.tracks-client.php
+++ /dev/null
@@ -1,191 +0,0 @@
-<?php
-
-/**
- * Jetpack_Tracks_Client
- * @autounit nosara tracks-client
- *
- * Send Tracks events on behalf of a user
- *
- * Example Usage:
-```php
- require( dirname(__FILE__).'path/to/tracks/class.tracks-client' );
-
- $result = Jetpack_Tracks_Client::record_event( array(
- '_en' => $event_name, // required
- '_ui' => $user_id, // required unless _ul is provided
- '_ul' => $user_login, // required unless _ui is provided
-
- // Optional, but recommended
- '_ts' => $ts_in_ms, // Default: now
- '_via_ip' => $client_ip, // we use it for geo, etc.
-
- // Possibly useful to set some context for the event
- '_via_ua' => $client_user_agent,
- '_via_url' => $client_url,
- '_via_ref' => $client_referrer,
-
- // For user-targeted tests
- 'abtest_name' => $abtest_name,
- 'abtest_variation' => $abtest_variation,
-
- // Your application-specific properties
- 'custom_property' => $some_value,
- ) );
-
- if ( is_wp_error( $result ) ) {
- // Handle the error in your app
- }
-```
- */
-
-require_once( dirname(__FILE__).'/class.tracks-client.php' );
-
-class Jetpack_Tracks_Client {
- const PIXEL = 'https://pixel.wp.com/t.gif';
- const BROWSER_TYPE = 'php-agent';
- const USER_AGENT_SLUG = 'tracks-client';
- const VERSION = '0.3';
-
- /**
- * record_event
- * @param mixed $event Event object to send to Tracks. An array will be cast to object. Required.
- * Properties are included directly in the pixel query string after light validation.
- * @return mixed True on success, WP_Error on failure
- */
- static function record_event( $event ) {
- if ( ! Jetpack::jetpack_tos_agreed() || ! empty( $_COOKIE['tk_opt-out'] ) ) {
- return false;
- }
-
- if ( ! $event instanceof Jetpack_Tracks_Event ) {
- $event = new Jetpack_Tracks_Event( $event );
- }
- if ( is_wp_error( $event ) ) {
- return $event;
- }
-
- $pixel = $event->build_pixel_url( $event );
-
- if ( ! $pixel ) {
- return new WP_Error( 'invalid_pixel', 'cannot generate tracks pixel for given input', 400 );
- }
-
- return self::record_pixel( $pixel );
- }
-
- /**
- * Synchronously request the pixel
- */
- static function record_pixel( $pixel ) {
- // Add the Request Timestamp and URL terminator just before the HTTP request.
- $pixel .= '&_rt=' . self::build_timestamp() . '&_=_';
-
- $response = wp_remote_get( $pixel, array(
- 'blocking' => true, // The default, but being explicit here :)
- 'timeout' => 1,
- 'redirection' => 2,
- 'httpversion' => '1.1',
- 'user-agent' => self::get_user_agent(),
- ) );
-
- if ( is_wp_error( $response ) ) {
- return $response;
- }
-
- $code = isset( $response['response']['code'] ) ? $response['response']['code'] : 0;
-
- if ( $code !== 200 ) {
- return new WP_Error( 'request_failed', 'Tracks pixel request failed', $code );
- }
-
- return true;
- }
-
- static function get_user_agent() {
- return Jetpack_Tracks_Client::USER_AGENT_SLUG . '-v' . Jetpack_Tracks_Client::VERSION;
- }
-
- /**
- * Build an event and return its tracking URL
- * @deprecated Call the `build_pixel_url` method on a Jetpack_Tracks_Event object instead.
- * @param array $event Event keys and values
- * @return string URL of a tracking pixel
- */
- static function build_pixel_url( $event ) {
- $_event = new Jetpack_Tracks_Event( $event );
- return $_event->build_pixel_url();
- }
-
- /**
- * Validate input for a tracks event.
- * @deprecated Instantiate a Jetpack_Tracks_Event object instead
- * @param array $event Event keys and values
- * @return mixed Validated keys and values or WP_Error on failure
- */
- private static function validate_and_sanitize( $event ) {
- $_event = new Jetpack_Tracks_Event( $event );
- if ( is_wp_error( $_event ) ) {
- return $_event;
- }
- return get_object_vars( $_event );
- }
-
- // Milliseconds since 1970-01-01
- static function build_timestamp() {
- $ts = round( microtime( true ) * 1000 );
- return number_format( $ts, 0, '', '' );
- }
-
- /**
- * Grabs the user's anon id from cookies, or generates and sets a new one
- *
- * @return string An anon id for the user
- */
- static function get_anon_id() {
- static $anon_id = null;
-
- if ( ! isset( $anon_id ) ) {
-
- // Did the browser send us a cookie?
- if ( isset( $_COOKIE[ 'tk_ai' ] ) && preg_match( '#^[A-Za-z0-9+/=]{24}$#', $_COOKIE[ 'tk_ai' ] ) ) {
- $anon_id = $_COOKIE[ 'tk_ai' ];
- } else {
-
- $binary = '';
-
- // Generate a new anonId and try to save it in the browser's cookies
- // Note that base64-encoding an 18 character string generates a 24-character anon id
- for ( $i = 0; $i < 18; ++$i ) {
- $binary .= chr( mt_rand( 0, 255 ) );
- }
-
- $anon_id = 'jetpack:' . base64_encode( $binary );
-
- if ( ! headers_sent()
- && ! ( defined( 'REST_REQUEST' ) && REST_REQUEST )
- && ! ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST )
- ) {
- setcookie( 'tk_ai', $anon_id );
- }
- }
- }
-
- return $anon_id;
- }
-
- /**
- * Gets the WordPress.com user's Tracks identity, if connected.
- *
- * @return array|bool
- */
- static function get_connected_user_tracks_identity() {
- if ( ! $user_data = Jetpack::get_connected_user_data() ) {
- return false;
- }
-
- return array(
- 'userid' => $user_data['ID'],
- 'username' => $user_data['login'],
- );
- }
-}
diff --git a/plugins/jetpack/_inc/lib/tracks/class.tracks-event.php b/plugins/jetpack/_inc/lib/tracks/class.tracks-event.php
deleted file mode 100644
index fb86e0ba..00000000
--- a/plugins/jetpack/_inc/lib/tracks/class.tracks-event.php
+++ /dev/null
@@ -1,149 +0,0 @@
-<?php
-
-/**
- * @autounit nosara tracks-client
- *
- * Example Usage:
-```php
- require_once( dirname(__FILE__) . 'path/to/tracks/class.tracks-event' );
-
- $event = new Jetpack_Tracks_Event( array(
- '_en' => $event_name, // required
- '_ui' => $user_id, // required unless _ul is provided
- '_ul' => $user_login, // required unless _ui is provided
-
- // Optional, but recommended
- '_via_ip' => $client_ip, // for geo, etc.
-
- // Possibly useful to set some context for the event
- '_via_ua' => $client_user_agent,
- '_via_url' => $client_url,
- '_via_ref' => $client_referrer,
-
- // For user-targeted tests
- 'abtest_name' => $abtest_name,
- 'abtest_variation' => $abtest_variation,
-
- // Your application-specific properties
- 'custom_property' => $some_value,
- ) );
-
- if ( is_wp_error( $event->error ) ) {
- // Handle the error in your app
- }
-
- $bump_and_redirect_pixel = $event->build_signed_pixel_url();
-```
- */
-
-require_once( dirname(__FILE__) . '/class.tracks-client.php' );
-
-class Jetpack_Tracks_Event {
- const EVENT_NAME_REGEX = '/^(([a-z0-9]+)_){2}([a-z0-9_]+)$/';
- const PROP_NAME_REGEX = '/^[a-z_][a-z0-9_]*$/';
- public $error;
-
- function __construct( $event ) {
- $_event = self::validate_and_sanitize( $event );
- if ( is_wp_error( $_event ) ) {
- $this->error = $_event;
- return;
- }
-
- foreach( $_event as $key => $value ) {
- $this->{$key} = $value;
- }
- }
-
- function record() {
- return Jetpack_Tracks_Client::record_event( $this );
- }
-
- /**
- * Annotate the event with all relevant info.
- * @param mixed $event Object or (flat) array
- * @return mixed The transformed event array or WP_Error on failure.
- */
- static function validate_and_sanitize( $event ) {
- $event = (object) $event;
-
- // Required
- if ( ! $event->_en ) {
- return new WP_Error( 'invalid_event', 'A valid event must be specified via `_en`', 400 );
- }
-
- // delete non-routable addresses otherwise geoip will discard the record entirely
- if ( property_exists( $event, '_via_ip' ) && preg_match( '/^192\.168|^10\./', $event->_via_ip ) ) {
- unset($event->_via_ip);
- }
-
- $validated = array(
- 'browser_type' => Jetpack_Tracks_Client::BROWSER_TYPE,
- '_aua' => Jetpack_Tracks_Client::get_user_agent(),
- );
-
- $_event = (object) array_merge( (array) $event, $validated );
-
- // If you want to blacklist property names, do it here.
-
- // Make sure we have an event timestamp.
- if ( ! isset( $_event->_ts ) ) {
- $_event->_ts = Jetpack_Tracks_Client::build_timestamp();
- }
-
- return $_event;
- }
-
- /**
- * Build a pixel URL that will send a Tracks event when fired.
- * On error, returns an empty string ('').
- *
- * @return string A pixel URL or empty string ('') if there were invalid args.
- */
- function build_pixel_url() {
- if ( $this->error ) {
- return '';
- }
-
- $args = get_object_vars( $this );
-
- // Request Timestamp and URL Terminator must be added just before the HTTP request or not at all.
- unset( $args['_rt'] );
- unset( $args['_'] );
-
- $validated = self::validate_and_sanitize( $args );
-
- if ( is_wp_error( $validated ) )
- return '';
-
- return Jetpack_Tracks_Client::PIXEL . '?' . http_build_query( $validated );
- }
-
- static function event_name_is_valid( $name ) {
- return preg_match( Jetpack_Tracks_Event::EVENT_NAME_REGEX, $name );
- }
-
- static function prop_name_is_valid( $name ) {
- return preg_match( Jetpack_Tracks_Event::PROP_NAME_REGEX, $name );
- }
-
- static function scrutinize_event_names( $event ) {
- if ( ! Jetpack_Tracks_Event::event_name_is_valid( $event->_en ) ) {
- return;
- }
-
- $whitelisted_key_names = array(
- 'anonId',
- 'Browser_Type',
- );
-
- foreach ( array_keys( (array) $event ) as $key ) {
- if ( in_array( $key, $whitelisted_key_names ) ) {
- continue;
- }
- if ( ! Jetpack_Tracks_Event::prop_name_is_valid( $key ) ) {
- return;
- }
- }
- }
-}
diff --git a/plugins/jetpack/_inc/lib/tracks/client.php b/plugins/jetpack/_inc/lib/tracks/client.php
deleted file mode 100644
index ef7cfaea..00000000
--- a/plugins/jetpack/_inc/lib/tracks/client.php
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-/**
- * PHP Tracks Client
- * @autounit nosara tracks-client
- * Example Usage:
- *
-```php
- include( plugin_dir_path( __FILE__ ) . 'lib/tracks/client.php');
- $result = jetpack_tracks_record_event( $user, $event_name, $properties );
-
- if ( is_wp_error( $result ) ) {
- // Handle the error in your app
- }
-```
- */
-
-// Load the client classes
-require_once( dirname(__FILE__) . '/class.tracks-event.php' );
-require_once( dirname(__FILE__) . '/class.tracks-client.php' );
-
-// Now, let's export a sprinkling of syntactic sugar!
-
-/**
- * Procedurally (vs. Object-oriented), track an event object (or flat array)
- * NOTE: Use this only when the simpler jetpack_tracks_record_event() function won't work for you.
- * @param \Jetpack_Tracks_Event $event The event object.
- * @return \Jetpack_Tracks_Event|\WP_Error
- */
-function jetpack_tracks_record_event_raw( $event ) {
- return Jetpack_Tracks_Client::record_event( $event );
-}
-
-/**
- * Procedurally build a Tracks Event Object.
- * NOTE: Use this only when the simpler jetpack_tracks_record_event() function won't work for you.
- * @param $identity WP_user object
- * @param string $event_name The name of the event
- * @param array $properties Custom properties to send with the event
- * @param int $event_timestamp_millis The time in millis since 1970-01-01 00:00:00 when the event occurred
- * @return \Jetpack_Tracks_Event|\WP_Error
- */
-function jetpack_tracks_build_event_obj( $user, $event_name, $properties = array(), $event_timestamp_millis = false ) {
-
- $identity = jetpack_tracks_get_identity( $user->ID );
-
- $properties['user_lang'] = $user->get( 'WPLANG' );
-
- $blog_details = array(
- 'blog_lang' => isset( $properties['blog_lang'] ) ? $properties['blog_lang'] : get_bloginfo( 'language' )
- );
-
- $timestamp = ( $event_timestamp_millis !== false ) ? $event_timestamp_millis : round( microtime( true ) * 1000 );
- $timestamp_string = is_string( $timestamp ) ? $timestamp : number_format( $timestamp, 0, '', '' );
-
- return new Jetpack_Tracks_Event( array_merge( $blog_details, (array) $properties, $identity, array(
- '_en' => $event_name,
- '_ts' => $timestamp_string
- ) ) );
-}
-
-/*
- * Get the identity to send to tracks.
- *
- * @param int $user_id The user id of the local user
- * @return array $identity
- */
-function jetpack_tracks_get_identity( $user_id ) {
-
- // Meta is set, and user is still connected. Use WPCOM ID
- $wpcom_id = get_user_meta( $user_id, 'jetpack_tracks_wpcom_id', true );
- if ( $wpcom_id && Jetpack::is_user_connected( $user_id ) ) {
- return array(
- '_ut' => 'wpcom:user_id',
- '_ui' => $wpcom_id
- );
- }
-
- // User is connected, but no meta is set yet. Use WPCOM ID and set meta.
- if ( Jetpack::is_user_connected( $user_id ) ) {
- $wpcom_user_data = Jetpack::get_connected_user_data( $user_id );
- add_user_meta( $user_id, 'jetpack_tracks_wpcom_id', $wpcom_user_data['ID'], true );
-
- return array(
- '_ut' => 'wpcom:user_id',
- '_ui' => $wpcom_user_data['ID']
- );
- }
-
- // User isn't linked at all. Fall back to anonymous ID.
- $anon_id = get_user_meta( $user_id, 'jetpack_tracks_anon_id', true );
- if ( ! $anon_id ) {
- $anon_id = Jetpack_Tracks_Client::get_anon_id();
- add_user_meta( $user_id, 'jetpack_tracks_anon_id', $anon_id, false );
- }
-
- if ( ! isset( $_COOKIE[ 'tk_ai' ] ) && ! headers_sent() ) {
- setcookie( 'tk_ai', $anon_id );
- }
-
- return array(
- '_ut' => 'anon',
- '_ui' => $anon_id
- );
-
-}
-
-/**
- * Record an event in Tracks - this is the preferred way to record events from PHP.
- *
- * @param mixed $identity username, user_id, or WP_user object
- * @param string $event_name The name of the event
- * @param array $properties Custom properties to send with the event
- * @param int $event_timestamp_millis The time in millis since 1970-01-01 00:00:00 when the event occurred
- * @return bool true for success | \WP_Error if the event pixel could not be fired
- */
-function jetpack_tracks_record_event( $user, $event_name, $properties = array(), $event_timestamp_millis = false ) {
-
- // We don't want to track user events during unit tests/CI runs.
- if ( $user instanceof WP_User && 'wptests_capabilities' === $user->cap_key ) {
- return false;
- }
-
- $event_obj = jetpack_tracks_build_event_obj( $user, $event_name, $properties, $event_timestamp_millis );
-
- if ( is_wp_error( $event_obj->error ) ) {
- return $event_obj->error;
- }
-
- return $event_obj->record();
-}
diff --git a/plugins/jetpack/_inc/lib/tracks/tracks-ajax.js b/plugins/jetpack/_inc/lib/tracks/tracks-ajax.js
deleted file mode 100644
index f9ed5cfd..00000000
--- a/plugins/jetpack/_inc/lib/tracks/tracks-ajax.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/* global jpTracksAJAX, jQuery */
-(function( $, jpTracksAJAX ) {
- window.jpTracksAJAX = window.jpTracksAJAX || {};
- const debugSet = localStorage.getItem( 'debug' ) === 'dops:analytics';
-
- window.jpTracksAJAX.record_ajax_event = function ( eventName, eventType, eventProp ) {
- var data = {
- tracksNonce: jpTracksAJAX.jpTracksAJAX_nonce,
- action: 'jetpack_tracks',
- tracksEventType: eventType,
- tracksEventName: eventName,
- tracksEventProp: eventProp || false
- };
-
- return $.ajax( {
- type: 'POST',
- url: jpTracksAJAX.ajaxurl,
- data: data,
- success: function( response ) {
- if ( debugSet ) {
- // eslint-disable-next-line
- console.log( 'AJAX tracks event recorded: ', data, response );
- }
- }
- } );
- };
-
- $( document ).ready( function() {
- $( 'body' ).on( 'click', '.jptracks a, a.jptracks', function( event ) {
- // We know that the jptracks element is either this, or its ancestor
- var $jptracks = $( this ).closest( '.jptracks' );
-
- // We need an event name at least
- var eventName = $jptracks.attr( 'data-jptracks-name' );
- if ( undefined === eventName ) {
- return;
- }
-
- var eventProp = $jptracks.attr( 'data-jptracks-prop' ) || false;
-
- var url = $( this ).attr( 'href' );
- var target = $( this ).get( 0 ).target;
- if ( url && target && '_self' !== target ) {
- var newTabWindow = window.open( '', target );
- newTabWindow.opener = null;
- }
-
- event.preventDefault();
-
- window.jpTracksAJAX.record_ajax_event( eventName, 'click', eventProp ).always( function() {
- // Continue on to whatever url they were trying to get to.
- if ( url ) {
- if ( newTabWindow ) {
- newTabWindow.location = url;
- return;
- }
- window.location = url;
- }
- } );
- } );
- } );
-
-} )( jQuery, jpTracksAJAX );
diff --git a/plugins/jetpack/_inc/lib/tracks/tracks-callables.js b/plugins/jetpack/_inc/lib/tracks/tracks-callables.js
deleted file mode 100644
index 7ce54a94..00000000
--- a/plugins/jetpack/_inc/lib/tracks/tracks-callables.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * This was abstracted from wp-calypso's analytics lib: https://github.com/Automattic/wp-calypso/blob/master/client/lib/analytics/README.md
- * Some stuff was removed like GA tracking and other things not necessary for Jetpack tracking.
- *
- * This library should only be used and loaded if the Jetpack site is connected.
- */
-
-// Load tracking scripts
-window._tkq = window._tkq || [];
-
-function buildQuerystring( group, name ) {
- var uriComponent = '';
-
- if ( 'object' === typeof group ) {
- for ( var key in group ) {
- uriComponent += '&x_' + encodeURIComponent( key ) + '=' + encodeURIComponent( group[ key ] );
- }
- } else {
- uriComponent = '&x_' + encodeURIComponent( group ) + '=' + encodeURIComponent( name );
- }
-
- return uriComponent;
-}
-
-var analytics = {
-
- initialize: function( userId, username ) {
- analytics.setUser( userId, username );
- analytics.identifyUser();
- },
-
- mc: {
- bumpStat: function( group, name ) {
- var uriComponent = buildQuerystring( group, name ); // prints debug info
- new Image().src = document.location.protocol + '//pixel.wp.com/g.gif?v=wpcom-no-pv' + uriComponent + '&t=' + Math.random();
- }
- },
-
- tracks: {
- recordEvent: function( eventName, eventProperties ) {
- eventProperties = eventProperties || {};
-
- if ( eventName.indexOf( 'jetpack_' ) !== 0 ) {
- debug( '- Event name must be prefixed by "jetpack_"' );
- return;
- }
-
- window._tkq.push( [ 'recordEvent', eventName, eventProperties ] );
- },
-
- recordPageView: function( urlPath ) {
- analytics.tracks.recordEvent( 'jetpack_page_view', {
- 'path': urlPath
- } );
- }
- },
-
- setUser: function( userId, username ) {
- _user = { ID: userId, username: username };
- },
-
- identifyUser: function() {
- // Don't identify the user if we don't have one
- if ( _user ) {
- window._tkq.push( [ 'identifyUser', _user.ID, _user.username ] );
- }
- },
-
- clearedIdentity: function() {
- window._tkq.push( [ 'clearIdentity' ] );
- }
-};
diff --git a/plugins/jetpack/_inc/lib/widgets.php b/plugins/jetpack/_inc/lib/widgets.php
deleted file mode 100644
index 3f072b75..00000000
--- a/plugins/jetpack/_inc/lib/widgets.php
+++ /dev/null
@@ -1,776 +0,0 @@
-<?php
-/**
- * Widgets and Sidebars Library
- *
- * Helper functions for manipulating widgets on a per-blog basis.
- * Only helpful on `wp_loaded` or later (currently requires widgets to be registered and the theme context to already be loaded).
- *
- * Used by the REST API
- *
- * @autounit api widgets
- */
-
-class Jetpack_Widgets {
-
- /**
- * Returns the `sidebars_widgets` option with the `array_version` element removed.
- *
- * @return array The current value of sidebars_widgets
- */
- public static function get_sidebars_widgets() {
- $sidebars = get_option( 'sidebars_widgets', array() );
- if ( isset( $sidebars['array_version'] ) ) {
- unset( $sidebars['array_version'] );
- }
- return $sidebars;
- }
-
- /**
- * Format widget data for output and for use by other widget functions.
- *
- * The output looks like:
- *
- * array(
- * 'id' => 'text-3',
- * 'sidebar' => 'sidebar-1',
- * 'position' => '0',
- * 'settings' => array(
- * 'title' => 'hello world'
- * )
- * )
- *
- *
- * @param string|integer $position The position of the widget in its sidebar.
- * @param string $widget_id The widget's id (eg: 'text-3').
- * @param string $sidebar The widget's sidebar id (eg: 'sidebar-1').
- * @param array (Optional) $settings The settings for the widget.
- *
- * @return array A normalized array representing this widget.
- */
- public static function format_widget( $position, $widget_id, $sidebar, $settings = null ) {
- if ( ! $settings ) {
- $all_settings = get_option( self::get_widget_option_name( $widget_id ) );
- $instance = self::get_widget_instance_key( $widget_id );
- $settings = $all_settings[$instance];
- }
- $widget = array();
-
- $widget['id'] = $widget_id;
- $widget['id_base'] = self::get_widget_id_base( $widget_id );
- $widget['settings'] = $settings;
- $widget['sidebar'] = $sidebar;
- $widget['position'] = $position;
-
- return $widget;
- }
-
- /**
- * Return a widget's id_base from its id.
- *
- * @param string $widget_id The id of a widget. (eg: 'text-3')
- *
- * @return string The id_base of a widget (eg: 'text').
- */
- public static function get_widget_id_base( $widget_id ) {
- // Grab what's before the hyphen.
- return substr( $widget_id, 0, strrpos( $widget_id, '-' ) );
- }
-
- /**
- * Determine a widget's option name (the WP option where the widget's settings
- * are stored - generally `widget_` + the widget's id_base).
- *
- * @param string $widget_id The id of a widget. (eg: 'text-3')
- *
- * @return string The option name of the widget's settings. (eg: 'widget_text')
- */
- public static function get_widget_option_name( $widget_id ) {
- return 'widget_' . self::get_widget_id_base( $widget_id );
- }
-
- /**
- * Determine a widget instance key from its ID. (eg: 'text-3' becomes '3').
- * Used to access the widget's settings.
- *
- * @param string $widget_id The id of a widget.
- *
- * @return integer The instance key of that widget.
- */
- public static function get_widget_instance_key( $widget_id ) {
- // Grab all numbers from the end of the id.
- preg_match('/(\d+)$/', $widget_id, $matches );
-
- return intval( $matches[0] );
- }
-
- /**
- * Return a widget by ID (formatted for output) or null if nothing is found.
- *
- * @param string $widget_id The id of a widget to look for.
- *
- * @return array|null The matching formatted widget (see format_widget).
- */
- public static function get_widget_by_id( $widget_id ) {
- $found = null;
- foreach ( self::get_all_widgets() as $widget ) {
- if ( $widget['id'] === $widget_id ) {
- $found = $widget;
- }
- }
- return $found;
- }
-
- /**
- * Return an array of all widgets (active and inactive) formatted for output.
- *
- * @return array An array of all widgets (see format_widget).
- */
- public static function get_all_widgets() {
- $all_widgets = array();
- $sidebars_widgets = self::get_all_sidebars();
-
- foreach ( $sidebars_widgets as $sidebar => $widgets ) {
- if ( ! is_array( $widgets ) ) {
- continue;
- }
- foreach ( $widgets as $key => $widget_id ) {
- array_push( $all_widgets, self::format_widget( $key, $widget_id, $sidebar ) );
- }
- }
-
- return $all_widgets;
- }
-
- /**
- * Return an array of all active widgets formatted for output.
- *
- * @return array An array of all active widgets (see format_widget).
- */
- public static function get_active_widgets() {
- $active_widgets = array();
- $all_widgets = self::get_all_widgets();
- foreach( $all_widgets as $widget ) {
- if ( 'wp_inactive_widgets' === $widget['sidebar'] ) {
- continue;
- }
- array_push( $active_widgets, $widget );
- }
- return $active_widgets;
- }
-
- /**
- * Return an array of all widget IDs (active and inactive)
- *
- * @return array An array of all widget IDs.
- */
- public static function get_all_widget_ids() {
- $all_widgets = array();
- $sidebars_widgets = self::get_all_sidebars();
- foreach ( array_values( $sidebars_widgets ) as $widgets ) {
- if ( ! is_array( $widgets ) ) {
- continue;
- }
- foreach ( array_values( $widgets ) as $widget_id ) {
- array_push( $all_widgets, $widget_id );
- }
- }
- return $all_widgets;
- }
-
- /**
- * Return an array of widgets with a specific id_base (eg: `text`).
- *
- * @param string $id_base The id_base of a widget type.
- *
- * @return array All the formatted widgets matching that widget type (see format_widget).
- */
- public static function get_widgets_with_id_base( $id_base ) {
- $matching_widgets = array();
- foreach ( self::get_all_widgets() as $widget ) {
- if ( self::get_widget_id_base( $widget['id'] ) === $id_base ) {
- array_push( $matching_widgets, $widget );
- }
- }
- return $matching_widgets;
- }
-
- /**
- * Return the array of widget IDs in a sidebar or null if that sidebar does
- * not exist. Will return an empty array for an existing empty sidebar.
- *
- * @param string $sidebar The id of a sidebar.
- *
- * @return array|null The array of widget IDs in the sidebar.
- */
- public static function get_widgets_in_sidebar( $sidebar ) {
- $sidebars = self::get_all_sidebars();
-
-
- if ( ! $sidebars || ! is_array( $sidebars ) ) {
- return null;
- }
- if ( ! $sidebars[ $sidebar ] && array_key_exists( $sidebar, $sidebars ) ) {
- return array();
- }
- return $sidebars[ $sidebar ];
- }
-
- /**
- * Return an associative array of all registered sidebars for this theme,
- * active and inactive, including the hidden disabled widgets sidebar (keyed
- * by `wp_inactive_widgets`). Each sidebar is keyed by the ID of the sidebar
- * and its value is an array of widget IDs for that sidebar.
- *
- * @return array An associative array of all sidebars and their widget IDs.
- */
- public static function get_all_sidebars() {
- $sidebars_widgets = self::get_sidebars_widgets();
-
- if ( ! is_array( $sidebars_widgets ) ) {
- return array();
- }
- return $sidebars_widgets;
- }
-
- /**
- * Return an associative array of all active sidebars for this theme, Each
- * sidebar is keyed by the ID of the sidebar and its value is an array of
- * widget IDs for that sidebar.
- *
- * @return array An associative array of all active sidebars and their widget IDs.
- */
- public static function get_active_sidebars() {
- $sidebars = array();
- foreach ( self::get_all_sidebars() as $sidebar => $widgets ) {
- if ( 'wp_inactive_widgets' === $sidebar || ! isset( $widgets ) || ! is_array( $widgets ) ) {
- continue;
- }
- $sidebars[ $sidebar ] = $widgets;
- }
- return $sidebars;
- }
-
- /**
- * Activates a widget in a sidebar. Does not validate that the sidebar exists,
- * so please do that first. Also does not save the widget's settings. Please
- * do that with `set_widget_settings`.
- *
- * If position is not set, it will be set to the next available position.
- *
- * @param string $widget_id The newly-formed id of the widget to be added.
- * @param string $sidebar The id of the sidebar where the widget will be added.
- * @param string|integer $position (Optional) The position within the sidebar where the widget will be added.
- *
- * @return bool
- */
- public static function add_widget_to_sidebar( $widget_id, $sidebar, $position ) {
- return self::move_widget_to_sidebar( array( 'id' => $widget_id ), $sidebar, $position );
- }
-
- /**
- * Removes a widget from a sidebar. Does not validate that the sidebar exists
- * or remove any settings from the widget, so please do that separately.
- *
- * @param array $widget The widget to be removed.
- */
- public static function remove_widget_from_sidebar( $widget ) {
- $sidebars_widgets = self::get_sidebars_widgets();
- // Remove the widget from its old location and reflow the positions of the remaining widgets.
- array_splice( $sidebars_widgets[ $widget['sidebar'] ], $widget['position'], 1 );
-
- update_option( 'sidebars_widgets', $sidebars_widgets );
- }
-
- /**
- * Moves a widget to a sidebar. Does not validate that the sidebar exists,
- * so please do that first. Also does not save the widget's settings. Please
- * do that with `set_widget_settings`. The first argument should be a
- * widget as returned by `format_widget` including `id`, `sidebar`, and
- * `position`.
- *
- * If $position is not set, it will be set to the next available position.
- *
- * Can be used to add a new widget to a sidebar if
- * $widget['sidebar'] === NULL
- *
- * Can be used to move a widget within a sidebar as well if
- * $widget['sidebar'] === $sidebar.
- *
- * @param array $widget The widget to be moved (see format_widget).
- * @param string $sidebar The sidebar where this widget will be moved.
- * @param string|integer $position (Optional) The position where this widget will be moved in the sidebar.
- *
- * @return bool
- */
- public static function move_widget_to_sidebar( $widget, $sidebar, $position ) {
- $sidebars_widgets = self::get_sidebars_widgets();
-
- // If a position is passed and the sidebar isn't empty,
- // splice the widget into the sidebar, update the sidebar option, and return the result
- if ( isset( $widget['sidebar'] ) && isset( $widget['position'] ) ) {
- array_splice( $sidebars_widgets[ $widget['sidebar'] ], $widget['position'], 1 );
- }
-
- // Sometimes an existing empty sidebar is NULL, so initialize it.
- if ( array_key_exists( $sidebar, $sidebars_widgets ) && ! is_array( $sidebars_widgets[ $sidebar ] ) ) {
- $sidebars_widgets[ $sidebar ] = array();
- }
-
- // If no position is passed, set one from items in sidebar
- if ( ! isset( $position ) ) {
- $position = 0;
- $last_position = self::get_last_position_in_sidebar( $sidebar );
- if ( isset( $last_position ) && is_numeric( $last_position ) ) {
- $position = $last_position + 1;
- }
- }
-
- // Add the widget to the sidebar and reflow the positions of the other widgets.
- if ( empty( $sidebars_widgets[ $sidebar ] ) ) {
- $sidebars_widgets[ $sidebar ][] = $widget['id'];
- } else {
- array_splice( $sidebars_widgets[ $sidebar ], (int)$position, 0, $widget['id'] );
- }
-
- set_theme_mod( 'sidebars_widgets', array( 'time' => time(), 'data' => $sidebars_widgets ) );
- return update_option( 'sidebars_widgets', $sidebars_widgets );
- }
-
- /**
- * Return an integer containing the largest position number in a sidebar or
- * null if there are no widgets in that sidebar.
- *
- * @param string $sidebar The id of a sidebar.
- *
- * @return integer|null The last index position of a widget in that sidebar.
- */
- public static function get_last_position_in_sidebar( $sidebar ) {
- $widgets = self::get_widgets_in_sidebar( $sidebar );
- if ( ! $widgets ) {
- return null;
- }
- $last_position = 0;
- foreach ( $widgets as $widget_id ) {
- $widget = self::get_widget_by_id( $widget_id );
- if ( intval( $widget['position'] ) > intval( $last_position ) ) {
- $last_position = intval( $widget['position'] );
- }
- }
- return $last_position;
- }
-
- /**
- * Saves settings for a widget. Does not add that widget to a sidebar. Please
- * do that with `move_widget_to_sidebar` first. Will merge the settings of
- * any existing widget with the same `$widget_id`.
- *
- * @param string $widget_id The id of a widget.
- * @param array $settings An associative array of settings to merge with any existing settings on this widget.
- *
- * @return boolean|WP_Error True if update was successful.
- */
- public static function set_widget_settings( $widget_id, $settings ) {
- $widget_option_name = self::get_widget_option_name( $widget_id );
- $widget_settings = get_option( $widget_option_name );
- $instance_key = self::get_widget_instance_key( $widget_id );
- $old_settings = $widget_settings[ $instance_key ];
-
- if ( ! $settings = self::sanitize_widget_settings( $widget_id, $settings, $old_settings ) ) {
- return new WP_Error( 'invalid_data', 'Update failed.', 500 );
- }
- if ( is_array( $old_settings ) ) {
- // array_filter prevents empty arguments from replacing existing ones
- $settings = wp_parse_args( array_filter( $settings ), $old_settings );
- }
-
- $widget_settings[ $instance_key ] = $settings;
-
- return update_option( $widget_option_name, $widget_settings );
- }
-
- /**
- * Sanitize an associative array for saving.
- *
- * @param string $widget_id The id of a widget.
- * @param array $settings A widget settings array.
- * @param array $old_settings The existing widget settings array.
- *
- * @return array|false The settings array sanitized by `WP_Widget::update` or false if sanitization failed.
- */
- private static function sanitize_widget_settings( $widget_id, $settings, $old_settings ) {
- if ( ! $widget = self::get_registered_widget_object( self::get_widget_id_base( $widget_id ) ) ) {
- return false;
- }
- $new_settings = $widget->update( $settings, $old_settings );
- if ( ! is_array( $new_settings ) ) {
- return false;
- }
- return $new_settings;
- }
-
- /**
- * Deletes settings for a widget. Does not remove that widget to a sidebar. Please
- * do that with `remove_widget_from_sidebar` first.
- *
- * @param array $widget The widget which will have its settings removed (see format_widget).
- */
- public static function remove_widget_settings( $widget ) {
- $widget_option_name = self::get_widget_option_name( $widget['id'] );
- $widget_settings = get_option( $widget_option_name );
- unset( $widget_settings[ self::get_widget_instance_key( $widget['id'] ) ] );
- update_option( $widget_option_name, $widget_settings );
- }
-
- /**
- * Update a widget's settings, sidebar, and position. Returns the (updated)
- * formatted widget if successful or a WP_Error if it fails.
- *
- * @param string $widget_id The id of a widget to update.
- * @param string $sidebar (Optional) A sidebar to which this widget will be moved.
- * @param string|integer (Optional) A new position to which this widget will be moved within its new or existing sidebar.
- * @param array|object|string $settings Settings to merge with the existing settings of the widget (will be passed through `decode_settings`).
- *
- * @return array|WP_Error The newly added widget as an associative array with all the above properties.
- */
- public static function update_widget( $widget_id, $sidebar, $position, $settings ) {
- $settings = self::decode_settings( $settings );
- if ( isset( $settings ) && ! is_array( $settings ) ) {
- return new WP_Error( 'invalid_data', 'Invalid settings', 400 );
- }
- // Default to an empty array if nothing is specified.
- if ( ! is_array( $settings ) ) {
- $settings = array();
- }
- $widget = self::get_widget_by_id( $widget_id );
- if ( ! $widget ) {
- return new WP_Error( 'not_found', 'No widget found.', 400 );
- }
- if ( ! $sidebar ) {
- $sidebar = $widget['sidebar'];
- }
- if ( ! isset( $position ) ) {
- $position = $widget['position'];
- }
- if ( ! is_numeric( $position ) ) {
- return new WP_Error( 'invalid_data', 'Invalid position', 400 );
- }
- $widgets_in_sidebar = self::get_widgets_in_sidebar( $sidebar );
- if ( ! isset( $widgets_in_sidebar ) ) {
- return new WP_Error( 'invalid_data', 'No such sidebar exists', 400 );
- }
- self::move_widget_to_sidebar( $widget, $sidebar, $position );
- $widget_save_status = self::set_widget_settings( $widget_id, $settings );
- if ( is_wp_error( $widget_save_status ) ) {
- return $widget_save_status;
- }
- return self::get_widget_by_id( $widget_id );
- }
-
- /**
- * Deletes a widget entirely including all its settings. Returns a WP_Error if
- * the widget could not be found. Otherwise returns an empty array.
- *
- * @param string $widget_id The id of a widget to delete. (eg: 'text-2')
- *
- * @return array|WP_Error An empty array if successful.
- */
- public static function delete_widget( $widget_id ) {
- $widget = self::get_widget_by_id( $widget_id );
- if ( ! $widget ) {
- return new WP_Error( 'not_found', 'No widget found.', 400 );
- }
- self::remove_widget_from_sidebar( $widget );
- self::remove_widget_settings( $widget );
- return array();
- }
-
- /**
- * Return an array of settings. The input can be either an object, a JSON
- * string, or an array.
- *
- * @param array|string|object $settings The settings of a widget as passed into the API.
- *
- * @return array Decoded associative array of settings.
- */
- public static function decode_settings( $settings ) {
- // Treat as string in case JSON was passed
- if ( is_object( $settings ) && property_exists( $settings, 'scalar' ) ) {
- $settings = $settings->scalar;
- }
- if ( is_object( $settings ) ) {
- $settings = (array) $settings;
- }
- // Attempt to decode JSON string
- if ( is_string( $settings ) ) {
- $settings = (array) json_decode( $settings );
- }
- return $settings;
- }
-
- /**
- * Activate a new widget.
- *
- * @param string $id_base The id_base of the new widget (eg: 'text')
- * @param string $sidebar The id of the sidebar where this widget will go. Dependent on theme. (eg: 'sidebar-1')
- * @param string|integer $position (Optional) The position of the widget in the sidebar. Defaults to the last position.
- * @param array|object|string $settings (Optional) An associative array of settings for this widget (will be passed through `decode_settings`). Varies by widget.
- *
- * @return array|WP_Error The newly added widget as an associative array with all the above properties except 'id_base' replaced with the generated 'id'.
- */
- public static function activate_widget( $id_base, $sidebar, $position, $settings ) {
- if ( ! isset( $id_base ) || ! self::validate_id_base( $id_base ) ) {
- return new WP_Error( 'invalid_data', 'Invalid ID base', 400 );
- }
-
- if ( ! isset( $sidebar ) ) {
- return new WP_Error( 'invalid_data', 'No sidebar provided', 400 );
- }
-
- if ( isset( $position ) && ! is_numeric( $position ) ) {
- return new WP_Error( 'invalid_data', 'Invalid position', 400 );
- }
-
- $settings = self::decode_settings( $settings );
- if ( isset( $settings ) && ! is_array( $settings ) ) {
- return new WP_Error( 'invalid_data', 'Invalid settings', 400 );
- }
-
- // Default to an empty array if nothing is specified.
- if ( ! is_array( $settings ) ) {
- $settings = array();
- }
-
- $widget_counter = 1 + self::get_last_widget_instance_key_with_id_base( $id_base );
- $widget_id = $id_base . '-' . $widget_counter;
- if ( 0 >= $widget_counter ) {
- return new WP_Error( 'invalid_data', 'Error creating widget ID' . $widget_id, 500 );
- }
- if ( self::get_widget_by_id( $widget_id ) ) {
- return new WP_Error( 'invalid_data', 'Widget ID already exists', 500 );
- }
-
- self::add_widget_to_sidebar( $widget_id, $sidebar, $position );
- $widget_save_status = self::set_widget_settings( $widget_id, $settings );
- if ( is_wp_error( $widget_save_status ) ) {
- return $widget_save_status;
- }
-
- // Add a Tracks event for non-Headstart activity.
- if ( ! defined( 'HEADSTART' ) ) {
- jetpack_require_lib( 'tracks/client' );
- jetpack_tracks_record_event( wp_get_current_user(), 'wpcom_widgets_activate_widget', array(
- 'widget' => $id_base,
- 'settings' => json_encode( $settings ),
- ) );
- }
-
- return self::get_widget_by_id( $widget_id );
- }
-
- /**
- * Activate an array of new widgets. Like calling `activate_widget` multiple times.
- *
- * @param array $widgets An array of widget arrays. Each sub-array must be of the format required by `activate_widget`.
- *
- * @return array|WP_Error The newly added widgets in the form returned by `get_all_widgets`.
- */
- public static function activate_widgets( $widgets ) {
- if ( ! is_array( $widgets ) ) {
- return new WP_Error( 'invalid_data', 'Invalid widgets', 400 );
- }
-
- $added_widgets = array();
-
- foreach( $widgets as $widget ) {
- $added_widgets[] = self::activate_widget( $widget['id_base'], $widget['sidebar'], $widget['position'], $widget['settings'] );
- }
-
- return $added_widgets;
- }
-
- /**
- * Return the last instance key (integer) of an existing widget matching
- * `$id_base`. So if you pass in `text`, and there is a widget with the id
- * `text-2`, this function will return `2`.
- *
- * @param string $id_base The id_base of a type of widget. (eg: 'rss')
- *
- * @return integer The last instance key of that type of widget.
- */
- public static function get_last_widget_instance_key_with_id_base( $id_base ) {
- $similar_widgets = self::get_widgets_with_id_base( $id_base );
-
- if ( ! empty( $similar_widgets ) ) {
- // If the last widget with the same name is `text-3`, we want `text-4`
- usort( $similar_widgets, __CLASS__ . '::sort_widgets' );
-
- $last_widget = array_pop( $similar_widgets );
- $last_val = intval( self::get_widget_instance_key( $last_widget['id'] ) );
-
- return $last_val;
- }
-
- return 0;
- }
-
- /**
- * Method used to sort widgets
- *
- * @since 5.4
- *
- * @param array $a
- * @param array $b
- *
- * @return int
- */
- public static function sort_widgets( $a, $b ) {
- $a_val = intval( self::get_widget_instance_key( $a['id'] ) );
- $b_val = intval( self::get_widget_instance_key( $b['id'] ) );
- if ( $a_val > $b_val ) {
- return 1;
- }
- if ( $a_val < $b_val ) {
- return -1;
- }
- return 0;
- }
-
- /**
- * Retrieve a given widget object instance by ID base (eg. 'text' or 'archives').
- *
- * @param string $id_base The id_base of a type of widget.
- *
- * @return WP_Widget|false The found widget object or false if the id_base was not found.
- */
- public static function get_registered_widget_object( $id_base ) {
- if ( ! $id_base ) {
- return false;
- }
-
- // Get all of the registered widgets.
- global $wp_widget_factory;
- if ( ! isset( $wp_widget_factory ) ) {
- return false;
- }
-
- $registered_widgets = $wp_widget_factory->widgets;
- if ( empty( $registered_widgets ) ) {
- return false;
- }
-
- foreach ( array_values( $registered_widgets ) as $registered_widget_object ) {
- if ( $registered_widget_object->id_base === $id_base ) {
- return $registered_widget_object;
- }
- }
- return false;
- }
-
- /**
- * Validate a given widget ID base (eg. 'text' or 'archives').
- *
- * @param string $id_base The id_base of a type of widget.
- *
- * @return boolean True if the widget is of a known type.
- */
- public static function validate_id_base( $id_base ) {
- return ( false !== self::get_registered_widget_object( $id_base ) );
- }
-
- /**
- * Insert a new widget in a given sidebar.
- *
- * @param string $widget_id ID of the widget.
- * @param array $widget_options Content of the widget.
- * @param string $sidebar ID of the sidebar to which the widget will be added.
- *
- * @return WP_Error|true True when data has been saved correctly, error otherwise.
- */
- static function insert_widget_in_sidebar( $widget_id, $widget_options, $sidebar ) {
- // Retrieve sidebars, widgets and their instances
- $sidebars_widgets = get_option( 'sidebars_widgets', array() );
- $widget_instances = get_option( 'widget_' . $widget_id, array() );
-
- // Retrieve the key of the next widget instance
- $numeric_keys = array_filter( array_keys( $widget_instances ), 'is_int' );
- $next_key = $numeric_keys ? max( $numeric_keys ) + 1 : 2;
-
- // Add this widget to the sidebar
- if ( ! isset( $sidebars_widgets[ $sidebar ] ) ) {
- $sidebars_widgets[ $sidebar ] = array();
- }
- $sidebars_widgets[ $sidebar ][] = $widget_id . '-' . $next_key;
-
- // Add the new widget instance
- $widget_instances[ $next_key ] = $widget_options;
-
- // Store updated sidebars, widgets and their instances
- if (
- ! ( update_option( 'sidebars_widgets', $sidebars_widgets ) )
- || ( ! ( update_option( 'widget_' . $widget_id, $widget_instances ) ) )
- ) {
- return new WP_Error( 'widget_update_failed', 'Failed to update widget or sidebar.', 400 );
- };
-
- return true;
- }
-
- /**
- * Update the content of an existing widget in a given sidebar.
- *
- * @param string $widget_id ID of the widget.
- * @param array $widget_options New content for the update.
- * @param string $sidebar ID of the sidebar to which the widget will be added.
- *
- * @return WP_Error|true True when data has been updated correctly, error otherwise.
- */
- static function update_widget_in_sidebar( $widget_id, $widget_options, $sidebar ) {
- // Retrieve sidebars, widgets and their instances
- $sidebars_widgets = get_option( 'sidebars_widgets', array() );
- $widget_instances = get_option( 'widget_' . $widget_id, array() );
-
- // Retrieve index of first widget instance in that sidebar
- $widget_key = false;
- foreach ( $sidebars_widgets[ $sidebar ] as $widget ) {
- if ( strpos( $widget, $widget_id ) !== false ) {
- $widget_key = absint( str_replace( $widget_id . '-', '', $widget ) );
- break;
- }
- }
-
- // There is no widget instance
- if ( ! $widget_key ) {
- return new WP_Error( 'invalid_data', 'No such widget.', 400 );
- }
-
- // Update the widget instance and option if the data has changed
- if ( $widget_instances[ $widget_key ]['title'] !== $widget_options['title']
- || $widget_instances[ $widget_key ]['address'] !== $widget_options['address']
- ) {
-
- $widget_instances[ $widget_key ] = array_merge( $widget_instances[ $widget_key ], $widget_options );
-
- // Store updated widget instances and return Error when not successful
- if ( ! ( update_option( 'widget_' . $widget_id, $widget_instances ) ) ) {
- return new WP_Error( 'widget_update_failed', 'Failed to update widget.', 400 );
- };
- };
- return true;
- }
-
- /**
- * Retrieve the first active sidebar.
- *
- * @return string|WP_Error First active sidebar, error if none exists.
- */
- static function get_first_sidebar() {
- $active_sidebars = get_option( 'sidebars_widgets', array() );
- unset( $active_sidebars[ 'wp_inactive_widgets' ], $active_sidebars[ 'array_version' ] );
-
- if ( empty( $active_sidebars ) ) {
- return false;
- }
- $active_sidebars_keys = array_keys( $active_sidebars );
- return array_shift( $active_sidebars_keys );
- }
-}
diff --git a/plugins/jetpack/_inc/postmessage.js b/plugins/jetpack/_inc/postmessage.js
deleted file mode 100644
index 51f8567b..00000000
--- a/plugins/jetpack/_inc/postmessage.js
+++ /dev/null
@@ -1,438 +0,0 @@
-/**
- The MIT License
-
- Copyright (c) 2010 Daniel Park (http://metaweb.com, http://postmessage.freebaseapps.com)
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
- **/
-var NO_JQUERY = {};
-(function(window, $, undefined) {
-
- if (!("console" in window)) {
- var c = window.console = {};
- c.log = c.warn = c.error = c.debug = function(){};
- }
-
- if ($ === NO_JQUERY) {
- // jQuery is optional
- $ = {
- fn: {},
- extend: function() {
- var a = arguments[0];
- for (var i=1,len=arguments.length; i<len; i++) {
- var b = arguments[i];
- for (var prop in b) {
- a[prop] = b[prop];
- }
- }
- return a;
- }
- };
- }
-
- $.fn.pm = function() {
- console.log("usage: \nto send: $.pm(options)\nto receive: $.pm.bind(type, fn, [origin])");
- return this;
- };
-
- // send postmessage
- $.pm = window.pm = function(options) {
- pm.send(options);
- };
-
- // bind postmessage handler
- $.pm.bind = window.pm.bind = function(type, fn, origin, hash, async_reply) {
- pm.bind(type, fn, origin, hash, async_reply === true);
- };
-
- // unbind postmessage handler
- $.pm.unbind = window.pm.unbind = function(type, fn) {
- pm.unbind(type, fn);
- };
-
- // default postmessage origin on bind
- $.pm.origin = window.pm.origin = null;
-
- // default postmessage polling if using location hash to pass postmessages
- $.pm.poll = window.pm.poll = 200;
-
- var pm = {
-
- send: function(options) {
- var o = $.extend({}, pm.defaults, options),
- target = o.target;
- if (!o.target) {
- console.warn("postmessage target window required");
- return;
- }
- if (!o.type) {
- console.warn("postmessage type required");
- return;
- }
- var msg = {data:o.data, type:o.type};
- if (o.success) {
- msg.callback = pm._callback(o.success);
- }
- if (o.error) {
- msg.errback = pm._callback(o.error);
- }
- if (("postMessage" in target) && !o.hash) {
- pm._bind();
- target.postMessage(JSON.stringify(msg), o.origin || '*');
- }
- else {
- pm.hash._bind();
- pm.hash.send(o, msg);
- }
- },
-
- bind: function(type, fn, origin, hash, async_reply) {
- pm._replyBind ( type, fn, origin, hash, async_reply );
- },
-
- _replyBind: function(type, fn, origin, hash, isCallback) {
- if (("postMessage" in window) && !hash) {
- pm._bind();
- }
- else {
- pm.hash._bind();
- }
- var l = pm.data("listeners.postmessage");
- if (!l) {
- l = {};
- pm.data("listeners.postmessage", l);
- }
- var fns = l[type];
- if (!fns) {
- fns = [];
- l[type] = fns;
- }
- fns.push({fn:fn, callback: isCallback, origin:origin || $.pm.origin});
- },
-
- unbind: function(type, fn) {
- var l = pm.data("listeners.postmessage");
- if (l) {
- if (type) {
- if (fn) {
- // remove specific listener
- var fns = l[type];
- if (fns) {
- var m = [];
- for (var i=0,len=fns.length; i<len; i++) {
- var o = fns[i];
- if (o.fn !== fn) {
- m.push(o);
- }
- }
- l[type] = m;
- }
- }
- else {
- // remove all listeners by type
- delete l[type];
- }
- }
- else {
- // unbind all listeners of all type
- for (var i in l) {
- delete l[i];
- }
- }
- }
- },
-
- data: function(k, v) {
- if (v === undefined) {
- return pm._data[k];
- }
- pm._data[k] = v;
- return v;
- },
-
- _data: {},
-
- _CHARS: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split(''),
-
- _random: function() {
- var r = [];
- for (var i=0; i<32; i++) {
- r[i] = pm._CHARS[0 | Math.random() * 32];
- };
- return r.join("");
- },
-
- _callback: function(fn) {
- var cbs = pm.data("callbacks.postmessage");
- if (!cbs) {
- cbs = {};
- pm.data("callbacks.postmessage", cbs);
- }
- var r = pm._random();
- cbs[r] = fn;
- return r;
- },
-
- _bind: function() {
- // are we already listening to message events on this w?
- if (!pm.data("listening.postmessage")) {
- if (window.addEventListener) {
- window.addEventListener("message", pm._dispatch, false);
- }
- else if (window.attachEvent) {
- window.attachEvent("onmessage", pm._dispatch);
- }
- pm.data("listening.postmessage", 1);
- }
- },
-
- _dispatch: function(e) {
- //console.log("$.pm.dispatch", e, this);
- try {
- var msg = JSON.parse(e.data);
- }
- catch (ex) {
- //console.warn("postmessage data invalid json: ", ex); //message wasn't meant for pm
- return;
- }
- if (!msg.type) {
- //console.warn("postmessage message type required"); //message wasn't meant for pm
- return;
- }
- var cbs = pm.data("callbacks.postmessage") || {},
- cb = cbs[msg.type];
- if (cb) {
- cb(msg.data);
- }
- else {
- var l = pm.data("listeners.postmessage") || {};
- var fns = l[msg.type] || [];
- for (var i=0,len=fns.length; i<len; i++) {
- var o = fns[i];
- if (o.origin && o.origin !== '*' && e.origin !== o.origin) {
- console.warn("postmessage message origin mismatch", e.origin, o.origin);
- if (msg.errback) {
- // notify post message errback
- var error = {
- message: "postmessage origin mismatch",
- origin: [e.origin, o.origin]
- };
- pm.send({target:e.source, data:error, type:msg.errback});
- }
- continue;
- }
-
- function sendReply ( data ) {
- if (msg.callback) {
- pm.send({target:e.source, data:data, type:msg.callback});
- }
- }
-
- try {
- if ( o.callback ) {
- o.fn(msg.data, sendReply, e);
- } else {
- sendReply ( o.fn(msg.data, e) );
- }
- }
- catch (ex) {
- if (msg.errback) {
- // notify post message errback
- pm.send({target:e.source, data:ex, type:msg.errback});
- } else {
- throw ex;
- }
- }
- };
- }
- }
- };
-
- // location hash polling
- pm.hash = {
-
- send: function(options, msg) {
- //console.log("hash.send", target_window, options, msg);
- var target_window = options.target,
- target_url = options.url;
- if (!target_url) {
- console.warn("postmessage target window url is required");
- return;
- }
- target_url = pm.hash._url(target_url);
- var source_window,
- source_url = pm.hash._url(window.location.href);
- if (window == target_window.parent) {
- source_window = "parent";
- }
- else {
- try {
- for (var i=0,len=parent.frames.length; i<len; i++) {
- var f = parent.frames[i];
- if (f == window) {
- source_window = i;
- break;
- }
- };
- }
- catch(ex) {
- // Opera: security error trying to access parent.frames x-origin
- // juse use window.name
- source_window = window.name;
- }
- }
- if (source_window == null) {
- console.warn("postmessage windows must be direct parent/child windows and the child must be available through the parent window.frames list");
- return;
- }
- var hashmessage = {
- "x-requested-with": "postmessage",
- source: {
- name: source_window,
- url: source_url
- },
- postmessage: msg
- };
- var hash_id = "#x-postmessage-id=" + pm._random();
- target_window.location = target_url + hash_id + encodeURIComponent(JSON.stringify(hashmessage));
- },
-
- _regex: /^\#x\-postmessage\-id\=(\w{32})/,
-
- _regex_len: "#x-postmessage-id=".length + 32,
-
- _bind: function() {
- // are we already listening to message events on this w?
- if (!pm.data("polling.postmessage")) {
- setInterval(function() {
- var hash = "" + window.location.hash,
- m = pm.hash._regex.exec(hash);
- if (m) {
- var id = m[1];
- if (pm.hash._last !== id) {
- pm.hash._last = id;
- pm.hash._dispatch(hash.substring(pm.hash._regex_len));
- }
- }
- }, $.pm.poll || 200);
- pm.data("polling.postmessage", 1);
- }
- },
-
- _dispatch: function(hash) {
- if (!hash) {
- return;
- }
- try {
- hash = JSON.parse(decodeURIComponent(hash));
- if (!(hash['x-requested-with'] === 'postmessage' &&
- hash.source && hash.source.name != null && hash.source.url && hash.postmessage)) {
- // ignore since hash could've come from somewhere else
- return;
- }
- }
- catch (ex) {
- // ignore since hash could've come from somewhere else
- return;
- }
- var msg = hash.postmessage,
- cbs = pm.data("callbacks.postmessage") || {},
- cb = cbs[msg.type];
- if (cb) {
- cb(msg.data);
- }
- else {
- var source_window;
- if (hash.source.name === "parent") {
- source_window = window.parent;
- }
- else {
- source_window = window.frames[hash.source.name];
- }
- var l = pm.data("listeners.postmessage") || {};
- var fns = l[msg.type] || [];
- for (var i=0,len=fns.length; i<len; i++) {
- var o = fns[i];
- if (o.origin) {
- var origin = /https?\:\/\/[^\/]*/.exec(hash.source.url)[0];
- if (o.origin !== '*' && origin !== o.origin) {
- console.warn("postmessage message origin mismatch", origin, o.origin);
- if (msg.errback) {
- // notify post message errback
- var error = {
- message: "postmessage origin mismatch",
- origin: [origin, o.origin]
- };
- pm.send({target:source_window, data:error, type:msg.errback, hash:true, url:hash.source.url});
- }
- continue;
- }
- }
-
- function sendReply ( data ) {
- if (msg.callback) {
- pm.send({target:source_window, data:data, type:msg.callback, hash:true, url:hash.source.url});
- }
- }
-
- try {
- if ( o.callback ) {
- o.fn(msg.data, sendReply);
- } else {
- sendReply ( o.fn(msg.data) );
- }
- }
- catch (ex) {
- if (msg.errback) {
- // notify post message errback
- pm.send({target:source_window, data:ex, type:msg.errback, hash:true, url:hash.source.url});
- } else {
- throw ex;
- }
- }
- };
- }
- },
-
- _url: function(url) {
- // url minus hash part
- return (""+url).replace(/#.*$/, "");
- }
-
- };
-
- $.extend(pm, {
- defaults: {
- target: null, /* target window (required) */
- url: null, /* target window url (required if no window.postMessage or hash == true) */
- type: null, /* message type (required) */
- data: null, /* message data (required) */
- success: null, /* success callback (optional) */
- error: null, /* error callback (optional) */
- origin: "*", /* postmessage origin (optional) */
- hash: false /* use location hash for message passing (optional) */
- }
- });
-
- })(this, typeof jQuery === "undefined" ? NO_JQUERY : jQuery);
-
-/**
- * http://www.JSON.org/json2.js
- **/
-if (! ("JSON" in window && window.JSON)){JSON={}}(function(){function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(key){return this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z"};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||"null"}v=partial.length===0?"[]":gap?"[\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"]":"["+partial.join(",")+"]";gap=mind;return v}if(rep&&typeof rep==="object"){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==="string"){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}v=partial.length===0?"{}":gap?"{\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"}":"{"+partial.join(",")+"}";gap=mind;return v}}if(typeof JSON.stringify!=="function"){JSON.stringify=function(value,replacer,space){var i;gap="";indent="";if(typeof space==="number"){for(i=0;i<space;i+=1){indent+=" "}}else{if(typeof space==="string"){indent=space}}rep=replacer;if(replacer&&typeof replacer!=="function"&&(typeof replacer!=="object"||typeof replacer.length!=="number")){throw new Error("JSON.stringify")}return str("",{"":value})}}if(typeof JSON.parse!=="function"){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==="object"){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return reviver.call(holder,key,value)}cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){j=eval("("+text+")");return typeof reviver==="function"?walk({"":j},""):j}throw new SyntaxError("JSON.parse")}}}());
diff --git a/plugins/jetpack/_inc/social-logos.php b/plugins/jetpack/_inc/social-logos.php
deleted file mode 100644
index c7c7187e..00000000
--- a/plugins/jetpack/_inc/social-logos.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Globally registers the 'social-logos' style and font.
- *
- * This ensures any theme or plugin using it is on the latest version of Social Logos, and helps to avoid conflicts.
- */
-add_action( 'init', 'jetpack_register_social_logos', 1 );
-function jetpack_register_social_logos() {
- if ( ! wp_style_is( 'social-logos', 'registered' ) ) {
- $post_fix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
- wp_register_style( 'social-logos', plugins_url( 'social-logos/social-logos' . $post_fix . '.css', __FILE__ ), false, '1' );
- }
-}
-
diff --git a/plugins/jetpack/_inc/social-logos/social-logos.css b/plugins/jetpack/_inc/social-logos/social-logos.css
deleted file mode 100644
index 2f2955f5..00000000
--- a/plugins/jetpack/_inc/social-logos/social-logos.css
+++ /dev/null
@@ -1,257 +0,0 @@
-/* Generated by grunt-webfont */
-
-
-
-@font-face {
- font-family:"social-logos";
- src:url("social-logos.eot?51b607ee5b5cb2a0e4517176475a424c");
- font-weight:normal;
- font-style:normal;
-}
-@font-face {
- font-family:"social-logos";
- src:url("social-logos.eot?51b607ee5b5cb2a0e4517176475a424c");
- src:url("social-logos.eot?#iefix") format("embedded-opentype"),
- url("data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAEZAAAoAAAAAfBAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAQsUAAHZfa1y5A0ZGVE0AAEO8AAAAGQAAABx4Dt9ZT1MvMgAAQ9gAAABKAAAAYEC7Yj5jbWFwAABEJAAAAIUAAAG6pEWcoGhlYWQAAESsAAAALwAAADYHEbeJaGhlYQAARNwAAAAdAAAAJAOvAd5obXR4AABE/AAAADgAAABeCDEE521heHAAAEU0AAAABgAAAAYALVAAbmFtZQAARTwAAADrAAAB5koHYmpwb3N0AABGKAAAABYAAAAg/8MAGnicrZ13mJXFFfDn3XbvVnb37i596SC9d8uLDQyKFXtD7F0RYzSGay9LDCpqjB1REaPR2CXCFbGB2ACR3otLWdje5zu/M++9QGK+fH98Dzyz804vZ86cOtczKSnG87zsKTdMvmrStX2vveGKG6YYL8l45qTaFqZ2rFc7Lqn2hOTaVinTs7zibW36ZyUXd3vVZqUUZ5jWp+fbkpJEJCv04mW102p7pbZLat2inTG57ZJuzmtn+rSb2jLf9KfJsGlhikx709X0NoPMSOObsWaCmWjON5PN1eYmc5uZZu43fzYzzTNmlnndvG0+NPPNF+Zbs8ysNpvMTlNmqk2Tl+Jlevlea6+j18Pr5w2Vf2O8k6Zef9XxAwcM5M+gAQPcn+BrkPsz2P0Z6v4Mc3+Guz8j9c9AV2+gqzfQ1Rvo6g0c4v646gNd9YGu+sAR7o9rZZBrZZCrPshVH+SqD3LVB2n1Ia6/Ia6HIa7pIcO0laHua6jraJib0TA3o2FuRsPcjIYNGOL+DHV/ggrD3Z8R7o+2Ocz1N2zgMfpn0OCDd/0QCDDGe8B70HvIe9gr8aZ7f/Ye8f7izfAe9R7zHvdmek94T3pPeX/1nvb+5j3jPes95z3vveC96L3kzfJe9mZ7r3iveq95c7zXvbneG97fvTe9t7x/eG9773j/NH2BhM5p96T3yXojZ11u18hThd1aprSe33Zru1uK7+w4otO5XWb1OXzIE0Orh/965AXH3nF8vxMyT2g48dyTcid0O3n/qS+fXnVG5TkF526/YPCkYya3vTx6xQ1Xzry2/Lpzb/joxqtvHlsyu2b6bG/27NoBs5NnF9VeUjO/8ZK02Q2vFNZMrx3QMD2UY83oVsaa7ta3dt3OmDV93ola0+1rSeu4WmLebAl63GystY9Jbo9r5bPoFAn6fChpy++Qcq23m3xres2V7JGLJbhgoWSPyJTsnx4i7QUpk5cpsSE3mshlF1vz6iRjveNv8gutvfeEmG2ue0Qypw2NpVmT+ZlfIuHtvvR8m6RmZkvlpEZih0la0m75TG+UIOV+CcLvSZDWVXLDz0ufaW34lJmYUKkEqV0lSF8guamtiTGOpL/42rx0kv27qIS518k4G1tJoezmmLW1qdJO5geyGLW5lHwxam1lWGLh3pJbtkFiKa9Gw5KzUlpLfZacjRILDaPrFozp+2g4ctmLklnH1woJkpN8nQmdDqHTrCHSaXOKZGWcLl01NNHMGOmqYYd0Hz5fuqofJ2lpsySt9nXmkkzsaSbeLHVr6C75FSlX9aHUSOprwhKdxQSPYMR/l5hXJLGKG/yScGToi1L5Qfl8oo5F/2K6ZB9xssx5WAtZL5NaHJNBpdRKATtHUlO+kkHZFsR+ItZNukjpJ7nNt0paMqvTBIAkz5MBNP3CAHZLWuMeYsMlrbGYkfQgFvGDkdTvl5nbuu2y9LayiazPYvdIwgUSbejC+OtOkpk15EtLNQ/Q8KNSq+pTxn+TAE3yCEmbMdbI+BfKoplxY6WPI5dFZfxZN7K0Ge2oxJ6H/ipt1B9BjIbq+0osWfbLVl8sE7Xl0wwjYVDN6xnZOAmaXmMjnpFCTX9nRDMAi28Z5n06IeZ8I7HD6OVcitxAA0Pp6oeYNiVzqGchXKszJdHeKc3UTzAlAjEfvCaLZzYygVoBJhN62bjyJkcaMQbIa9EiJiUf6uTLrEwDWZ/S9NdSPKdAGm18UtKy7yA2A5C9iyb+IBWzwoCsgJDJuDcajwms2+oOQNR1EqsAytKG+uHI6x3la7fUTxsv6ft3saktAe9SFmb/FDaq/GdmfJmkVrZiNmuIRZjsj9JnlWy/rd3HVp0pGTUZxCZJuZo28lk3hZ27mAU9Bhh8m9U6Q2pUKMCw0uXztKvF7Mf+kzjZ40i9HkgrYbCf+bIQKU/6rrpJu5wm7+JEnUg3gGT4TmK9TbD1dYdLuSwG2wCqcLERrNKtTOUpKZdTycEvvAtwyb8e+N4pqS3aSGPpG1n+8ZKWvgJsM1iayD1L0kJXSJEi3dyfQnJabPMoYKodrV9I7HTW+2Zi7xO7hDV6m5XfCjBNlFjVHazo/guYbCXoVYGxtjetv8w8R9dKH5NXCmiYtFHSSF2eCdahur8MxpOZ2fK5Ahr2jVYcWDMs6s6hMd/H3Nk03tnUecnEYws5gieRewP7ew4rO4RDexVpXfi8mlbuA49dww78SOx+zvAaVvxXGr2SdT6N9cr6ibXLmMa5ONZBkgy0hwlHugg4/X2qJJ1wT0xmcPXZMb0TBNu85qflWK9fL8m7orfxgkvipCFR6+UOlMSTjo0l18y03hMTQUsP95U6L94ZCwL57CAL9tInUvCIYkl4O1cGcwa4acuX0kzGXI5GAXPYxHgfY5SpfweVpYY5e9/LfLI5s3ar5Od9IRUXvQo8HgZUccX0vN6USBfV46Vkq7dY5LSgJUnd/QywM0qyCtaBBedHSzjGhdeAu/8IRj9Gaux6WJKtiSRJ6oZJUqO4TGqkT5Ygi0VOvZUd2c9QlvIJCKdfILG01lI4FUTyw2wW/jxp4Dt2O/9spnDqAsKWx/u6/tIBF2H2a6AEhStt7Bo/uB4K/w7MCvYy7c+NhRlQ3i4KfCophy2Q8lsvM8ElrICRD3JMYqPyOwNFhUHMWi5OcvWYag09xOawjyVoSw9524HwY1gjk8kVtPmVYBi2lEPctAyk9ELMDdfuLwKEDpfY7lqOwc6PZYDWvtWC+crVbfdUsAa3+e4AmdCcqMMgJm0ZO9JIpd3ZnJ0tAquyD1JyZxXfdZnkyVA4UUAjq57xM1NrKcEZHLV2IwGfHAlO3sqKXjiUAzd1WQBq5qK7fQW14hwZPtBZvExqzftRgg4fS3MzdknQYVI0DrwdBPN4Vwu+MZ2u9AFeahV2zLDm3T1S8qOOcgRszQZpfunJrM12CZZz3a/sKB1tPRfggWDJFKpLAE/GNRQUsRNkMOZP8jmS9UrvIW0N6svypXHWQDnN6eCgx4+UelP7c4uUsmHVb8py7SgDRYOxt3/O/bpiHcuzqo+0lCO0lt3UDgBnk5NPkFjauxJ03SyfY4Gvy7+Wcl2YsbmEoKNkmCsIuvvxGGmtZ0pTn4IgMp6Q2NdcwEngvH2pjGwge9Z3J/PfvF2iHUHUe31potc8KWmEIDT9lrEH3hoT3HfeGnqA0tK0UBUguFpiZ5/IPbpKYudBPLU9kiMyJOpuHkcDKbmTItegrQLOmp7kpJ+aiB1PbBYAM1pis+Rg200vSGxpnQRv9peMhs3uEpOxr0iWTl7oFhX0lclCjHhE2u4OOdnPyucgCNBWGZweSII6sGLHx2U0P22SesVyau1iCLm5MUn7FYrmPWghcyp34yrWry1Q9wDEVclKwXUmG7IteQIbBAx4X3Cw/8ni9BsPHuvFrbL3ORlAR4EMu+UWaakRirtBELndyqzXtJceFwghaHcIoNrNnaXwMFkxux7M3beAU1gD8HwKTfHh51JlYR4IurWgH7vJSKEWgrDsL/cEu2yXQ5bVQV17YyX2+WcmIFU/v8gEN1vzR1I4mZ6bAaLkLsAzhE0ySLWRCya8AZxR7jvi1zZ8RkyQqzlGWjFtp3HGpkvnPbjDk5WM7u+H5Z5YLaSrN+YFQHsfsFMH8inrSBsCtXbvePDeFvBTXoxzLtWzt0iQ110+0x6QhgpulCJlhVy57PKe4xj2e6Ce7Ci0qHzu4xLJk0Nlf4VeyBA8ZbcvA498P4dD88v3UQ00QSnWTuzkIsZzGhD7J2JPcxd/6McCInzB3ZLTWQZklwvBbIZASdfeJr1V5Eus4Q3OiGKssirInk1wIi3gqbZxvbT8YyyY8X6YLQMtUX4viyOLaCu53NOm02HzVhPidD/JEsqlatdyRR0mM7I19dEABzcpGwMz0bw3pgwNOPJC0EI9jZpHAIxX2GRQSyY7uI5hdDwL/PFPabE7K22PlyY2Z0mwE85hNXdCuSfBz5YW5dywOGkmgJ06MJb5HtaoOzTrDuiyfilgsHukyYHXAdsvGcKz2YL7LoacmPIOwJ78Lf2VAk9fcnSXA2OATR54K+tkCXLkLjAtrgVxCg1p8h6JhnOk5kw5EmYkV92Y4VJ+WDf5HOX5+UusWQrPN3qtZP0e6nSRYF4z+lUTqbTe3B9NbUGhbZ57IfRc5cmg0btiQSCfHSRrcjQkceFOTfqfgnyT+XasWE4SVyQd26Vyc5mR1SCILNDc+zAjA5+W72IoirZgrj5HGalT2F9JzhGclmukUip3gx2vN+G3PcHQp5FQH02N1AboXA96JQe9bJjpIMc9ialONqGAlfsyXYLvCqA+7DVCXJtJa/ySVB2kG7ML5LMDc544S2pqppuLzkrmmrj3CgWxe21nAJnfAY/QZ8TMGUe63DiPrwXHjJVZHtZWgiJolsJH/cjz1kvmhP9jNGh01H4Z3oV/9FMD+LAZYBluedsRSLmHLR8Q1atdZiS8ji2FY2rsAgqdyzHZ05Mjs+cXqZgEYt37ncRSc8DXt04yNScWypK2BVsrp91mMsdZSBHTchUI7zwh8GzqKSbV2hhXTQeh8u0yQflmzNPw4OP3CM/p5pH+j2ghh/OxmLKiQtSx9tXHSbCjBVfbbgjAWJHkfPK2NCBkWmpkvqzmw6B2mPKMqzhPw31oogzIKokHfFsLJqk3lL3CsN8bS2MBc7urPFocWS9T7Cotb4TZSLo+WtLBFdeGtQm7D3KfZq2dFKOL9MWxoHWVH9CwUH6CGu1bwu7Znzl2d8OhfNJDan6/yLjhsrluuJNjB4YLM/3vw4UFllaBrY1wecFwOfKNl7E3itUhG20DCF0phc5wG0NkO2XzJeg8Wfo+JgnAH7iLFe8L37p7JyXh1zYuYmmBAaUNglhbXwUOie0vB0HLzkh07yR6VsBMbxtzWSb9E5DrQJlUSJg3WwHDFwa4yv7KaHeOZWm6gz1OO5vLL6dOSm1FPhLmFG0EZVrIjvVzaP1jWK1Vc6X+Qg7rl5Re/zmX9yiBTvP6ZIEnk8H02p4DlnpVGircwuwit4DbQi2kUftnX1G2xMCCaW2Qbpz1btQ2fzcrKrRi/Mj9SRC0kJEy7a5TJeh4uBTuFiFNCBVy40TnxGbuF/j8wT/K5+khzl2KSfBOnTKEvmwRs83Lj4WR+oG7ZNVJ0lp3Lun+0rML9DOe1kFOypmMOQJZXXMzWFZ4F5C8DHfH78H83eX82jqIk9R1Mp0qYcOUMbRlq2LCDNktl8rK7YRz2gmFv3lTENAyadJmuycFn5pORSr34i4rEv7FJMGAZD8KBPygRGch0r+OgNEpG2KhACLr/0LWPumvfjsQUIs0zaRKzndv+o7QsWv3gAe7qYhlvhxZc/zlgn/stolRAv8awQwwihJ9w0UJ3tAEotE07pERi6XhD8dI0DoTSAemS4RRtks6A9Pr9EYZsU2yvkJYMOQiCY6AEu7COSDDHDWfWJUUH7HAjzwlOHL2sb5eMx/+Xu4Fu49VqngiGgTy2UGzQi7LZF0dZJkWp/rF1hv3ILeJxF2WC+Szg2aFXJaroFWlkWJrs18SKPhosSmMLOGOgHjVaY00jGHLfb7OsDCyUnL3CA1q90MF5YBZuZ0cY4jQyeSADfInmCAj52sKDxL42IPsZ89CPodr4GuabPL+HyQqkCXL/5WcA3NOO4QVhUdxJF72OTKQFF9K9c0XSskGMPROaMSdbWXG9hWYYV1fHfIwWUO7vRI8s9iEIi9HnWDP5FwusfwnjMNVpu0HPls/ci54ba5UWZ0FfMzhznxmWjQUP2znCaFm3kQ03WelxLr9TmIndzwglIBc6MEl1R2uY8xMiZ1qovM0538KKV55iX0XcLf/XEK75/sBnldeL3cjmByhOWIRkwJVoeKnZK6j3JclVojc8pwrETFAVkEgZn3FpnCY2isrPlCKFSFKKbyM+oOkufBi6accVqHsuSjj2PNPbnWYzK0v+Y6Wt9uFPBdOQGKlMUDoLYntBQcUVOjKdUPq376nZPUQItKMfF+yBiOFXQN70gVp7xIg9vMJnLaLpLGfBBPZH/a5Hv8eDbDe7jNAvd+DJk6RJrwFsYBcN0qMwupbkAoCY9t8ngR1R/t6nzgaEXpIclV0I7hMhfJS2HdY1DYgI/M2cqrP5bhQrUywjOleCWrpMJ5L/xjY2wHbpNMjEJCcz2X0OyFazUg6WII08uOHpMUP/ijBj0Jt20VIuBfM4eyUTgbH7HpDimcibK4TVGCyj9NbkCnZlcpTIhOtTmFEfSW2B+FiBdKfnYtBo8yBc2AiNTSBLLEQvrWRK6ewGayp0gcVPLhAP/9TItFBWKI02W8HeGaSsGRmPPqIT5+V4LWh0vzLN0jRz+n8fYbxxi2CU+yWJ7g9tyHez+kgqdVcfrkfQzjY/ful7LfvMJ6XJFYBiqvmolrXH3wK/fu90OG2iTPbeAdgizyy6VOJNSIwMLtMcL8lvU2sI1dDusSqRwE78C9hxFldHpZYKndZQYV8tkVgd+PzAXjX/BWwRxzR8hsp1g1MXPQcCAIRSjvEZi3hBiBY7N7PZWS7LowBbDshE/fB0K1D8l0L57MRigGO3G4bQnfPSKwUjNX24SiLPZAt6H6cBIMulNRx4FqfC/L7b6THPrBq85DFvM3p/VEOmf0Skcqiz1yPiH/S4YZ3jAYu7uPAcSshWlXprjGnmUBp4KQPMJ1NcqZsDXxdw5FxlOmA+liAnyk1ZNEAoNFcL7n1IKEk0OLaZlDbc0wDln5gHoxSj0kA+RlfSc++3LTmpJ+k+B+MzDBHyAOGsWJi1HuDP2AIufyIJVvzsLTrCYZD7TPRP+88/aPBvPOEqKHXUXOj8+Yl4rHz5pENeVA6N1qk8f+sFtWi/1nN78B1+hAc2RNg1ItLhYjx1sn8vR69kW8nQaGPlD2xpdAz7ZHV/CTTVqm1XXgLhxys9bOgS7vud6wCGPcjIdZM5gm+U0mZDEFnJonCwsBLh0Uq/EUxaCtAUyp2384+Ns+RtH0vA+cwTL/+Q4I9yE1VarkHJcVmSEwkv3a/cPi2+iPgxlaGoQerBLYFNo2rbvoeFT/K2WxzvSdpnWSyqvwww6ZHAw3ioL8wcMReLZ/jdHE6qWb3TzbBmEq5psoRn+mNuB2YoIbd/a+o4iJipLUkbSFkrMqht7WGp4qgKMwGc6OidErP5NNZihZjWIocJIY7ixjo76TSD1BimYJB7fLB1Nkdc1JJk1keDdLykNj/MAx8BSOxUyV+22mr5xdA4OB8bojREhx+rnQ24SYJRsH2jG/vO3GEGY3ehd0zvUfEAMx+vqCvLrcnLtnXx0aTrfdjnkBD4cmxQjBSAwKg9uDUClQuWYItbBlYIc+AXcHiBsarZg6xBokt4vpMgWl/9SbhYNgr+71JozESXAHbAKdbw13XbNly0CsiBlu2iCAl6NBWZBs3CLv5b75DTw3z4lu27g45BnbDy35I49LtsaTeakqKYZ1Semo1Sc9CLFiRBaIFjeyF7irkFkTa4nhtNIWmc2cQqWyruR5SW06+TEBaOgfqRYWso2HfU84Aj8IQerIKJr+vcaugrZtcWQXtUVbLd6OQFXS4VUdoOiPo6fwwNFnH86GmSdB5mc4PxUrkrkuCUp9yDqSarZfk36MimYKY7fOVwmNLQyfL2pmy34NwVkc9IX+fFHrMjIblfXNdLFmvJSFvOwvr8ZCQhc3fv4Xgbonw49aiBNyN2KB7CwCozRLEQhN8aX2HrD4qEhlTV+iFbJBEeIEkdlwEAkSOkg92UY4SMaRbAuQFxjyuGL0LusqFiGT7l8os1swDmRN7/0aYCIPAtAqttGqqVaUT6RtvI+08Gkf/Gkbu6XE7pKC8SurMEVMEv+6XqLA9DS9ysYAvdk/lXIND9qKGtG8ZgLuPgKBpDxPQh+16XEVZJ6xATnItIApqM33Yjsc/iDq2RbKlkc3gLakYedZ6j6PEWzedpVv/mEmL/A0ZAMgKCak3xVcFbomKvQXO5yNZW9JexrCEK0s/gzRpZshmqTNmbKwYrp4b0EMir4rNJBSr6VNgt9Y/II1ecD/sgIqm00BuqjkJ9xYqyEtfAd+BuYNmuSDcHSZu1h+ioci/AtH9FZMQ80hGUFvbqVkOIb/sAz9oXbNcIJ9ylpa9gwDr3zvuLrVMnxNiv91x5BdrWVF4FVmnlYi81yPbXC/MgfskMJ3yfJdhDoOd04A0F8inTOEwBLlaRktLvWJmxDY0V3dFQNDqZuAFrKRBq9vguOT6DUU+0S8Bh55Bpt3xgKxY8y9PI0bc8ecgywWSJfzdL7OZ7g6oPK2gVaWHYva+x7XCfApmRAPX9TPp9Xn4rq7o51zsQyPHbIVQFl7yVczcVnEIxoLJymIBXe3SxsQCLadBqGHLgDe043ZVLC5r0xqQKi7NtUI5aCG7nBhWAi5XY4hhzW2JGloXAxhXV9NcXT9eA7xtsF6x81174UO6g+A6qAqY0hVEs2DBDOaCRJo2802iO21aJ6xpGnvLj9dAU6faFvuWObRGYjCHJ8q5uiY+pZcTNea4RQ3HqwyLxqsMix2StpVYbjS+5iqz0lghYvrDMc24O0tFJ4peYGRqVPLPt23YwbocfrtE72yOpbq6uhlBzAVR1cYGIjKkcamOjdYhyWBJfDdYhiBtvqbFAiWp/TwWT/smUe4tEy+sMW1AG50fjWd848drLPfjRRYFKxV8PheLF3nZj5fTugdi37sBhePjeODQKsiYsShTkAoGA8JwlQ/EllPjwUTaA4kajyVWSsttTSxHWSw+V60BN6UXv707scCwobY+UaM0sVia5gatnfQ28QZHg4XlW7L+lKJqGAvOQXd5sORS01SaiTjIwYhCUEYsHtNydycg6E7jLjsdVdCeAmfb6CE15kfj5R6IOVrBWeSZgfT250Su1u2Y6K27H8xIL72gioLzcwkUomnd/XiV3sHCBOUWJc7Mc4lz9HLiDGpsWKI7PR7zE2k6aD1belb1hOp5OzExuTHReDkkiAf15gZ9WuLYKkLQ2Z11YE6IG+z5qmXQVSpL7ERpYv3LKPn57dLQnXWUTIZvR7BgkrntoQ9N8gxVRLkQKZmHfhRFp0nKi2l9id4dCrAGE011U9OZyoR8N/vgU4NL/HiR82Nu9sHnmOghsTExN/uggTHReI3TzCENjDWHdDnWHFJjWOyQli/x458XJMqdHwvg4ODKJwago1sbDOa6xGC0md6JtO6JKXWMHVJ3bAA5quMJ0q5L1L05APegnOaeGID7wWkPJsrdGSBWbq+wOz9BwdzEoDMTc9BmkMIqlWwWs41OGXlXI7SmEl9mRXCanTrX3WUrONGHo0a84Fyu/xlC29gXAd4FYNgVOQIhb7MPQ3uCqteMkE4mPuqjL5qLGIw8uxhh6wKOTK/9lNqPwGDdPxHb9MW6ZRN85U9pLiZDO+I81AjPfyRt+49A+90IRXUR2jafvnptjzkC3C7+GY5m7i3AbT5s8lRGaefD7/XGkmsM1HHvS30Xs8ufof8fIbguGo1Wy0yEQlVifigyPv8sZqU8ZA66/M4n0d5PyMiKhV82fZtjGkuNy03zMbk9KtU4WaTXmZJdViZYunw48enCmJoshOJbEV60vu0Qsy5Y2RdBAhro58NM5SIQ94vs5FTsaKciQ72IRdRAP8lwRbSwVOvgZKV2bU+kCYMQmChnNQDWcIcwHmq2bFdCJaTB8ddinpt6l5SrFbzhrFzh0e2mR6TZ7lix/Qh92ErYAbvkQkSASz8k/KlRCv36OpuG8HDt3/34rVCWuDT0hsHYRz+blafD+POg2FYTtw11t5/epAeuWP3k7ikVXtrufF7SylF2bgSG7bpPCT8EPY4Cxr5AxDVujOpSegLkmd/K0D1M5DKBTLXM+AUN/942EnyP9sCrloqrkOoWYR3yC4ZcLYWPt1uQHPTuLH3XXyXl+tWrES5t9UcOnvu4ZA9skA47Yw/YGbVmZ9iKztisDkTEE8GkdJCaz97FKR0rxKj93TFAdHMljYNpNwyQQj2Y8c8YA6Vhx/ozOqAQ4rIV06XKdtiqymek8CqWuh7V2x6glZnZXTf4zgjOaYDD3CJ7sbLLuYnVwhYrD1Fu3XUS6zKNNNjInhjdReCvMlGSdEIukfWqFOkka2FLOWI9GMEGVBWhB6DcNnATYquiQji1YbAWc5KN3FfNqJv2fSxF0hAf70PXoxqH6lHEsPms4lZpASfQgCgzG7O8pP3SfjZmS0nvxwL7ovQ+PtZ5nBq4yFTUElmwOPRhcpDD1mH+noH5WJ2qNtCnVyZJWgjqpQLeRJCzDLoClaABcDBXsPWIGLCFtdWIlBBi2+p3jbOmUomvk2KoYbCKVgC/gGRQmllj4KKUYsktV/NipO3VmLejFnIknOrslUKCNXZGqrDLJnlaLCisFlu1SFwzkGzpQZXNCDsjWmewmIzAI+tVqRdmacNAHQpcDOklA4Pn1AK2DvBQKwIKO6P0LCx6lIUMMaKqrsQ4UVUYtOph2I90rgk5Yjn2OU33E0PgVgNVXdlPilQgqa9dILFKJlyLveS+hJK+HPYsWQddjjw2GZl7BWClYp1ablcV/9SCubOQrTdhTtMCMzZIDVWdmWSEQzlqG4pZXvZRDB+0mY7hSmvh9E0+Fk09oMOb+nNaORQ7IChbYs+OFY5J+SDmDo/dfa6kbcGoeg8CPpVm/gK3s2+1xNaxEhnTONDrkGCmz5TErUhOOzP3JmRZ3VCtNGMLkr/WBIKjCFROOvCmWim1IFE80ILlzsbOIu/6+Bw6C4I0+dKe6XctjSLt74hwfgc6vDboB3YjCMmLSWwjF3MyCpj1bcBpDujAwwJ0JQpwMtiFmDQuRZa+FIuJhe2ixbKFZ6utOOcXy2RbgU42tScD5wZu4HRHbgByMYXNWyGx1BslKLzVd0fV5OsRROOn9rx5KPey+1P4dQ5UIaudHguQViGozM7i5I1ZgYBsJiqiOUDjWRD614xAM2AuR+J5MttzOkf9UuxM1aS/qSeAOgf46RkNGJWmITFH6tuv2MvqMyW2FNnzWkS8WwdL7nfrJdiKhf134JlmpGUL0Vi0xBDrOyybih4wavIjC87Vsupo6XIogk38JcxQJNLVCE1QRJoI56oL+rDuX0P2dZX7y3SXjp0F1Siwdhn27gMgrCuwDemORGYzjicdsUFbgy1FC4zcxm0D5jEyGoX1/1fKy76nNrlqtKPeAaWYotRg5bpLMJLdCMcTg1Sfj03Kco7Wu02+KiyUchjOWfahEQcPlpbHVbk0D/WFr1r0ZGvmUnKF0hHfLjVq0xvCDQIMDj31KypnvUMW7USbaZcmS8LPqIh7ocpWcxQNej4dTxvUGBMqon0yUu3I1SBFLsJMpIpVEzH1OIyj1iMDBn5bnVRoxd2zHpMuSCa78i3t6U2BMfupwJML3sTSnMAc/WWQZk5DU3QmBlIjQfiHy7DNxInoTU06A4dMEHzuB3aVgtml9382SkMrJgJ5KHMOBLps5BA7EMQSGa6IGjQ8jHZhKvZpJ2FxPhsCtx0S2a445Jx0q8Gg4XSgoxva1C63xALh/tHolXsA55IbmXawmHeO7JDNO9ovjCxA0sfRQ4+gtk2NqCaqn1JR5WuQrFVY1Cr3Vo3uLeUdEGjp3GhI2rRbLwPZgrzLcBrZ0sUUq+wQ8x6waJKKq1E/h+5mQzpt94WIT+ESqgfppIEBG0t8NUZBJIyfj+abFKjQ0J9RX01lQZiU/aQRg4k0DArUcF5j6uAkLVG/NYaGhcmSlbtPKrWBPO0paXYtnbRALLAG36D1UFVr1xkn3rarz1YlYeVl8TFXPxULZKI1DNxu4bLY8SCiG51Ynmq8QRXZSwG/ol/Z8dHcgwNBSp02cgiYzAj4phG0tAUK7bOj/WKMsf4q8T3YUW1nCbbi4yL3mpwpW4MgYUIHaeQwEDYKb6eQGQ7q7oWt1HG/JIz4boDyeUG56fPRGhm5e70+kBfXPyYNPwqSv+RnP7JP/q6UK8m7/xq4oxQZurVnqtAK2tJJ7sAiBr7CxeAynTLf0cfgL4y6g7QNJhwpl69LcBa46E7IeHq3DV/GUiOVJi6ZUMMsHSD0mEt7S/lX5TyhFRx/iPIgnha2Xgly1vdOBmPQM9YWCRtEzAWcEEIHeknUpQXj9GNxSREwE0+Tuagp4aSHYOew3cCinAXAGsAxBGNMXLI0OpGmff3b8uiSXRELRyBN34V4vvxNWElTwG1ej3lGgeyBre4lsbx/RP/nyP4fZxiOCNdjkjjamfTqYTGddSwQ6MK2qMJUBd1mclQdlgTrwS5X/RJ9We5e6IBCsCywZ/JxAtoDXskH6EsxZcm5S2I7YWMz8PtT8191RdsGb6f2rlu/5cKo6BuEgXFjBdRi07Mq6KxXSkCFcBpUKR+v+69yJsDEqiIwgIlw3BLxdRUBvefHBQkKHgoU8TS7F7uedA41GlaTAsbafTuD2dgdzLMZlKm2Wb/eFosHWHtroBmb04LiYQFUbEUgA5XI3R0xgVnm3kkOvv8HnAYw/5mfGqn6HzDvXEVtJc5wUCi28gz1JDuXIWxFD5jKFbHt2Wiw5G7xO/tTZFsgGUpROB20aYmYbun+Kb5scdWWxJazxQoGChACGiXO3xV2E3tq3DkdT4W67v8O6YGmVqD1f50YIdxiDENiBdBD9RgKFLwEdHbYQNh+rx8IGYoekFgRJvFKEpkiiFhYFNO+IurKhwMc1r8KRLA8DO7GnncDVP88nIU+QmOxAYunLoPjKD8bWUk6LG863Ff2Quy9i2cBHWprshwEObIHK9H+KPUeRuLVQh2LcpUrT8fLDMMg9U8IIO0z4DR2liuaGhEq2n6LDjhrZczxZqbtPJpok8VlNwy3k0FQrAVYvvdHNdMnW4LB6Op3wOhsgMMsb+kHvEsNwofyI6CVt61TV16Aoiu8zZJz1BhoC1NQI6vKfiSUtVBvhEK3xIG7Fi5jTjlh+uN1UTUdKdVgdYGOsjpC4NtNG9UT6xlVgWZDhOc+Lnnt0Frl3imjHA2ZqBdP51v8IDcNvj0XxVqR9QOOoh+0T+5fY/EbSQumYmCai4nyqT3izRwHLzcaEjFDyz2YqIyBtLo656JlhyigwYitt54SQ5/v4XJps8QPLIIKMcPZNgRbr4pzWJFKrPjrUYXX4AmjYqGN+DsVcNZWAIvZ2Ir8iJFkku5OK7xyJ9TJ9zFcNPsyWSMVrZfilZKHgdpe+NzCOj03RZDredXxoIjNJc3uTdc0af3XXVgZOHvl/dSHd3aqov0rAJ33EYXkvQAVgS+JasRtA5p25VDxxLENayGwtsgy2dkVlPzuKU4X4L4Mi5jye6Wn9eiKS2EV1dw3BGuihJr6eQtTW6LrU+LWiyCRsHeWFEuHx9+HQC0b+8+aaznq6F/VQcc6eycaaejMuD/GcHgiQ/xSmBtzVR+/OGKriURduhnZSUocP0oZKnXlUl1ECoZnikxSbuCQ58wxgTlEuqwX8hWcKUKwafPgUZ4/0xSy6yYLr6uMhwMk5mw7NNDP30gzGbxQkLUnFq97b9AAhii4gcDETpoLGCFiMjlnSv85mBDIp+CGtDcZioq0mpYG8GsbMRfYg5Xjftju8lekjb0wbLVIJvdwXdQNki5SYd0a/hZToUeJuiGgaMAr7ZwfkKG9wCX4Di5yA5GrHIGthAYTkN1o2sUZsQ66phcjDCfdfofl1ELYVw3eWWOCNGlOqOKPIXWn7wQt4mBl8hFzlmOqlHeSjHYPQJ/zGMODX04W/GLSsPVJ4jSH2oBeZO4lbhnwWAI41KiC01P1TxP48FfrjCFK6nsADCFUcmvegIjKRWafjcWrBvqZi8i9HEFjNiZhmABJwPJdFQ/0U22DtIgWlmoyp+cQTLRX+b1rB4FG0E5Qx5Zf+BvtvHSgnWAMMiRzYFyCKbZjPvThVqTkjVjkJh8JvlT3db55xkAQyWYCKAq1KKv/mx8nd2wp58GJjPWid9+J1EBbqN+uBi04115aNZlIsVzPGKXWqy8lS90oKJfew8EY5LskICJ1jCSanIvBIpgTFyEsrUNb0AFGC111SVyboooU912kJJdqIasSqR2Ws+FFvP6glmY4lbog+UgNaDD1qGBQJHI7qLfweHjM92A/xy1OKA3GLZJe+yKAGYdYpS/4bRz2P337u4KqPrj0MrUoQsa1AgGeBvIpyPK227CrqEB9B8Xgggr8GBJp+iiAybqdK/xwmLUPoZ2Fjwq5NnHXcm2aIdwhGvRCQksGn1Lx4RDaI2mE5qLxNnn0JEiLJfpW/kzdrIs5heUQ28qhZy9l8WQxUh1Zqz25jnUIMhi9KOBJz4hwLhfee9AgY/85yLfNIYM8/Chp70PQ8Oef/eayxNdGabzEsqCHuiMWyBdkuKmyZUk4jE4NY7O57EvhCC9/gPHUQz+2gFDbrx7WR7izWRKOC+/WnCBQ0/zVtdGSVPWw5CKDfFYvzHrkQvvzjDOBdy9r2G5cFZdSUNh8jO6mIWfiyReUAXKlpuFU+wVy8WJMGZdCGPRDoL32vlhclXe+DNaAUy3Wly52Ppe0s4J5jnZa0/Ee5PDtkDeov0TxcTF9iQSJph9IW3PweWyeHtPXOHioRd9EyVYlBBJaNbVLUjcv9EaqgPQe8uMxmHf00oHSU7WQt5m4+lNVouoMg3osDSFcG9RqvFFhWsGwCEoNx/Wfl6hqmcd3zPN+IhZ1s3ZCTlZCVR26OmbQJolhK25GDefC1KdzWj/NDKIfK3MIY4aZm7Vc/Lz8YJtvIu1cSOVXEOH8YSMip2fwZ31hPgZwunH6jIn60Kphc+3H6ofznu9CWRIE+/XohgRlSVPPvCiJF4+hfiUGfpkwesrJwCvqp8lUE3sXi5LhOwZCP23lt0zhFLQQ71LmFLinE3+CwdPiWpE6rlntAJcHfSFIO3X2KXA4kuG7FnPAKEd0BZznsCcnoJK9G07orRRp/8zvJPbJvfD1rw/SKNZtd96l+dL2WVgsnXC2NHYXazuhA8P5E6Z072zk2jkLe5YPZsnw7oSHOA1HWRoyx93BbtK8RLlE7kafcqrwGHbOQCn0AUpX19AaMMRd70nOLPy07WuQ9R8gDF6NZ12rp5Xfw1bxTgjZ96L0hjhr/DTFMA9LzdXHSM6OKwyHeQpCvf7s93j8MvugYxmPprh/Cp5lV4OJ+1k/2Xq3CukcaGvbXY1l4EbUSdVQizsRIexvBzH05E0+di9lnNR0E407huFo3oSYFHN/2wSXlo3SuxmBaZhtTZ+tXovXoHv6I6NQt3/1+E/6IaYvj5Cf9KUiwuOm4zXUXj1mU3jCoQB/nWTMj7PQUXioJ9LwTlLj0aOBvUwmOPI2JRYvl8Sxq4D6EALNLugceKBGn9DAyhK89Ssk9IzZqqnU13qwAa/D+l+hvi6mpV47FUNGNRxX2q0OX6eqZgwZq3oiiFaj8NAAH3/oqBqgCz4efwwWlCFYLOcsV4vem7eTnFN4EPODRlfHHSncgwQotlxMH8+pReha85x62y38C8OpXMkRbFRpgBqcg+yqP0rE8Iz7F2qof4xW52D1SnAiJOXUe+s9v03wjdemJdebmsSm8iYUqkUTHsskPngNa8y0j4CsNHAjWkjb7EtbNYvkeq9Zrne5l5BAR603MRBNC0Qht/euxu2gee5cIGon7DbOnxIY/ezQMDPk0k0E2TvppuVj2KBKQ2kad1km0spldaiRKpru/EhJp4Vi9cBKsRZPCPsU8jH1ibgSwY66PtJkScKm4WruZYX/saiqxuLFIrH4ZP5LdrLL9kJtQJQfbUOmPBXXrIuw1HgRWffDZ0OOSlkZ/nMchyjOMNPOl6xLdmPk+sgohunqLoKpfwGrtIux1RxdHk3U3YXtsY9GZAHO6wUXQcUMneg3LOd1DWQ8OxFp7cRGbDPPPBHg+OzSTPs74gFppiUGi+3RTRBoXU2jqQ5uUWoKVO+S+OPVLK8pSC7YWFugSyHdlg3gut7HzasGvSqPqroMtvMqcOJZz3HmPH26aGf83krZyTF2D4wpc+QeEwMEVPkhJeXMPom+5qy3YKUzlVBh81A5OuVu7mpn9w3+aIdCWAP97IL+ZovLkNhaxqQBaXbL1ZqmLnqw+Y5GaACaGCcxRv+0JM45FQlVJaSdPiy0j9GriXJZN/UHOahVgkRPOhg3BBlRBzfaQGGqJszMiDaZJyzTHHWqbUbdp85BejRlJCXq5UpPoMh2KLm38GpTl0TQLp4RT/ODIu1ejWm1hDP/oaoh9/nEQYqjhNQFUD9IpXQgVhjEIhU1Z8QhYIWDD6kYojlfFTqFqqT7b8eyNFBUpf1mfqTG2l7/DT24cTmdUcN/KSGnPBSpWTI+7VBE4geIhPkcikgIQCRLQg0zNbvwoJnToaAkWZOUhgIdmfRcUxCynq7G73QR9qK73T83HuhnIs3kQNvlzY0H+vkbaYm6xYE2VBBm9GB3bjNpRcw2f3uCsp3Yk9dhtFKDeW0z15Ga6egzYktxAioGUGNcQWlYHr2Pv576uOgNo86WtXoc1aVPeEITwnCDDBPSEzk1Hguh+/PgGE9Fv6yOtsd9GL0HtbL0vg6zrDSU0439/MBXqwZbXzfKTzjObWCVRrVj7OojyXN3tmqhBE0lfOKtn7LUOE8704VDMAeRIE4L9l88sLeLI6YWGk04XnK7Ocst9bgLL0rEvg8y1EdP/WFNkrrzKu7D7v5itCHYFpkxQnXYlfguhqDWVEqLVMNWsVwNiM5qh3FMeUPRHH47dB1yYF5PEdpDuCyT3F5yUlkCFRDr+49apHFnUMRW3xUUsW9DrvfjYc275/kB0f0ex/rXThJUoT7WFwbr82JOeOAsU8kwyShkqjBgUKq2HoMmFU6RYcYARxFe8LvpepYexe6xyABW9lbOuwOC3SOwx5iAqPxKVA/HrZeg8/YYrjyStSuw49JSnTGG4o01YnJ7XyRsqhe5AXpwXWtu1DGurhyzF+EkpEGyuOBc1m4Ik3NheX/kDTi7TchS+0lfuMKdcAnSIKQIfsRmCA9ImCE4kQ2BXZ7wAN9XLmCg8BWm8kYIYe24fY7ywyrM2uT3pgnhHQiCJuw7V+r7a7z76HVMPeiO74SWoj8QfQR63SuR2w74s2QcwyD8E7ntb+B6Pxu59Lm4WE1sDenSaYEcx7wpdLwWAX0jD5T8hKajCdnOBpybVLC3GiK/DHsOPJLt+uncj999DXX2GXKWHki8NmLKNFjf/uzdkltQkVEG3XUCZFXjm4kL7z6MWJPRMkMvmgIeQiljdVN4gbLpUclNxYpMGcmUsCscjttrbYAhyeId0wwscopgWiJAq+pFMniLIwUJZwr6RXXbTXvMd8+t6KN0tlKfQoRWrBwZVQmBDLbdZfRw4U1RIfzNYRjRJvG8Gj4qSoYYHoyxOzEpLIJIXIXOJYSGR3JlHb48hXAB7FgpJ41njexHH0fjpCs4mycHbSOalRSc/5q30uUobCDrZsM76ZN5avqbjO4yFe93D8llKmecp/5MK+T/Bbhd6LOsLTuqZnMqYQ5yhIarGRYi/kp4CX04suLhaGCdubdM7YsegZKpRBtye2c2v3qSywuebqhimHvrlBDfibFYOWuaJ+yaacMLdOhJTD+c/PXxv95rEeqXb/JDgbhup5pwY5q5G42YvqW5K4m5zsJ65i/16k6FMCGtGzCAE3s6DEkN3g/qJf8V3go4ZtqFmOFUImf+GvW9fVNfmHwb7WIRb8Yu4JnebghAlTXn1TfbgFVOPWcUrsrpTXkfyX6DKefJPI+zQboyZ61i5498EypmHD5UakM5CAVKNx7fMdnC4tk1r6puhZdQivBVS+Ohhv4IoVRalLZMmqtHkJ6G0OaH0lgg796CaHIXugvstgKncvC5eic6wpG7IJdLQt9N7Aqoq0dkGmZmNXgIpF0TczF9MtSux8+9Dt/2fXrf9aI9KDJ9QasZ2yl98TL5dh4ac1K4S3iooS8c5Hkg0v44/1xagvnRGLQ9l3AHfALanTQcFvkVbGl2fwje25Wvamp0cLzYJGPQx0mqjuOg9YhiMmrUuC8cdCXAK3B8LHfv19i1Y+Bh501DuvzZFKifeRC9X8MRfg1ozpsW69DQLkS69D8cDuFrhEnHRmEh7rsDmobWnKXIcDbt2NshPVWQe1apH5c08spcIEWG5Co/SaEX9arp9ynX2/FDeWlW1XhK9VapLBDNpb7/qp9BGuTWx4u5AjRfSXRVyGltlZrrJ3awyM1kONPRKo09lcM0JRsfuQpEFFUQLBk80Jg1VYNo8BlPo2YFMoBEltZxJzbRRCJNPc5PWCyNHoEgry2e0foii/pmHimkihl3s157v2M7D+dt4hPAz1dwS56wgAtvFLq7mXs4giEOWR2vRqfB7NaeyDbN+ZiJ154YZLlAP2v1xFJS64T0XZ2zjmdZaUmzXKBZ9m9oG45fhRqk9+2UwlroUIfH//SqVNfJ5ffFftOr8rfcKWUMuxCY/OERphRQ3uZgyrxZSeM4VW0OpqqbHRnsCOpW5hDO/AAp75jyBGdu7QfYec06Wx0VUVx98whnY8VTxhGNLljxJNrXN88DGnjHztGTnXmPqtdklu6MIYgkeiFo7QzZpUGvqwD87p8ikkhkBQ0+hVunMyRdrkYgoNhaDkIabvZ1IOhwW9XFOv8RCJisCsNbaVwEJg1OjFf+bM3dAkwv3mrN7WDJgUi3egHNfW5HIH4tVoSnl4MMohuNfHeRtW3GTtNE1jLVdfglbMF5XAP5lLVsHsVaruOMtDs2yMegXtbS+yIaVFVWzvkitwUtt7ke5CulZNCrQ3ibqQ2+3YZaqg1U8hqaUY20Xiz2lUeRSah4BsQXPGfN+8SN2D404c3e0BQNni+p4yVPdUIQgClRewJCqAIeBbQbMvhWrdI+TD9V1bSP548asX3bB9Ud4e0afTi2gKtMX9uNNHHltvgjF0iLd2OBIDoJBWjFGUqrKP+NzYIKvOrl+nBm9ZrWpEplrEJwkXe+18o7NIHHlA5rXuXH2Wbsoep3M9Ad+jyYOhGoZfoO9flD5abXZpleoJiPl50ZdS9n2zJ0B50wa1LjnA7OKyimr7oGJmwmG0WcmhOlf8EQ8SaHd7LlXjQwHKvHaaMZiznsEvWRafeCnD6C6x4R30yf0P5qaNAMVeHmfTlzxExPPd94QNH5I9bpYzga4zgrfaeHXb0r664MVjtIwy+m7mlF7NuOYzO3q/kw1Ni2o4IJ2IouwWbZGp4xScVgVR/4VSuV5k+D25nnyXm5TLbXw/4iFR19Jk+5DEcbrw/IDef5vkzePRuunCLPEqXSFA4AqgTUZ0zkxo45ctaZYKtFtj5PHQJSktqxwiEQV5Iq1lg+qDGe30bkeJeG0/VYc0hvcgdcYAx3f9ViREIx6/z81LcaT0/nmaEux/p2vkJl2uWq0FGDHX3avxl9tvd0zJFQTplUh5qc16SV17LNGAs1XKqWlaXI1o5E4NznRmluBP4M74Dsj9rgc60czeWh+ccxyalDXEzwxPUs7CV/Adnr67i8imY6ovykJXdHD/8zNNUNcBXPQsEObhnE7HM85jQHf8tFEO1P3orOzq68OY7adjxuHL6wm6bQxiDG2fsMmKf9j0hLObCeDexe7uusgBDIUupo7KqO1McoMKU9HMJbrbCZgd3yjkFTKhV/5EXK1fpYF3zOshnY6FZ8C4TxYqaK4Z3eJXkzRxucaT/h3ZMBY0B55foqNKPXoHyumt18CelUwWtAaWhJyeIHFAR4P2+CVFY3n3IUnG15FFRHn3OTiv8G44xZCMHWHr54wGqui25fc13kobLhsQ9e4QugI/905uxmnq/6qUe1LakaGsrrJJ6aaNePgKTbAMTw+pxdspYR8k0g4/ojnkASpKoPd9yRuxxFaRjVPS+vBjEU5tlhAJdvAhn23ayyBILlc/UJD1Bmmzw1GUPNXgYAk0MMcxt0J2X6Ukkp6zIN7DUNE2KtqllYipXE2yuil8mC6glSg0f0Oqrkewg8ZHxu0tZylGMSFAaDDWOjL1MpScyNUndiQi9BqhucC7btpVQZeFKH4eoz7fIaFqSmPnZggf7LKnXsboLhyMBKDoxUVykWX6UwF3SYZ2tNdk40vsD6xPRyuIB7kg7sGK7KB+/Y8qiOPxoff3xWOhbzGzvmJ3ZMe83ghNzDS6syoEN3zK242wH/v+/4oeMPH7RSB9Y/Wnjo+un6QzJJYnz8DuICOPiN9VcwyEXVDjAdGKmMPwqvEL0tvn+ufLx+VBOll2e5EJ99FcIlWDsKLOFW14Nw4Ej8tx1ze8GO5R6Ycbo5AFvhQBaDcFMIqCvwKbvu/kPlnGPeN7b5i/6+PgZUjzS6nGC/PpF/Odv5DaR9TwQu60b5uOL5qZRtwu2picPShIeTN1YfOGsCA6uPOqI1jGAlhuNIBm5xZTgdDeVFN2l3MYYQ+S1dazW4WOqvmKgzv/KXdmjM/fCEs5lIviWmPwCwAl3n6btjqVhCzeRC4wquGOyjSVF2ezyK1znQFUNAHkt4rvPIAmzvP8AQ8jIG/dnRUvOoDD/ytvUu4622EzdzLGtRtzZexApwzzfCQVWp3oRONqhDIraZdVijtdSXCT6WJvMmgwSmgQFPw2dIegtF5gihjTb2SnjKz3dA7tsUKKVm7B+UAFPP06al0XDkh+C9t428rrk/TWJfIcb5DJPmX2cCMEs4Fj2xhf5Doz6A8BMXdyfuzfk8MXcOPzvhQc8Uw3DrazudoP+yXgLnXiFBxiblv9VcrMsbvvUu4kHHLh/AdfflhxK6yPXjXYQWUhKT5TbjFSce2LfmRtaz/TXAW/FWsBJGzp0RE+FzZLrwEqlcqGEbvCV6y/3I3C7E6FsD5Y1v4YZVZ/ARvN5Yij//0GJp4xfOeA/egf2Fg9QDvLGYV+wRpNmvbvYDHqPkFpDNS9BqGqhNV4leOiDA1Vhn8ZNDdg3iILW03qDvD5yF7fPPbUBdn2KHuBfBLJ5xPK/krDlN2mvooPbyQHTbJj8wDe6I3aMyLZ0gtdQR/mLY2wks+oRlEruYt7hNP0zDlaTog68VT0GaTn2kmfWQJp36RINY/tEyvGVKMTHkH3EQ1Wm8AA3yDjU0eKGbEpVCR2MQcDOAs0l/ywE5xTasRnNBymYR8plLa5X/QJ6Pm4FtxDzKw8aiHpMqXn1zP++gse2ozXnf0v1Ui6dG04dFicXrGl6RV4ikAU1zP7BStd4Ev0nD7w25Ii5GEeTwTjSjhnL/1u/eeuPoALsLOWG+vnTLy+smhyeTqy6LYgVpAnF+6nFB084Ukjeo3U+j6Bt2SZhMK6XrAoTpPGTuMpJbGcf46C/rOLpa/S/0pX/3woSLsQ9tghqygH4wVLeUxKrQ27aBBlNb0YyZ6vXwDjhtggmeqWrGeExt79QUWQdtuG0blcDlmmlUVwdZrhL341Lag66/W1fV1GisnJemK0ZQfFuzC4FlkOP2rfFF1YZdjO3qjMXj4lfiKO/XduCjLN5i1Dd8+U0d9+5ZCF05Zsvqi618n9OQqtQP9wzjgfvxInHYREm+zGOigYNXFnyFi13EjZMBydnMs/VJI0w4p6SmwP3PXxKPRU6pOaNmZmFkRkNBKPJgTUFaZFyNxAY0zCySLPkcUFNA1riamQ0FhZGuNQV8p0XubSxIIZ4WeZDPGQ1kB5nInC7E3GchwHXhHAMjcCpmLUsR1F/8ePSQF9K+QTZ542qEMepy7d5FhfxrUtP8pvVsi+r6v+M5zvdRfrzyJIu/9UhlbvEICsMJluLCiIGN+80TfYszGT88fToluUZ1DKngPt4ddSxWLpqobH7zonSaCVyF9F11fnkKYxcegeZST0YRYREeJ2PDq6/AJB/GMqeoPiAFrY0+IY5vuPGQmvzKJqmOogyPugjkmGn5nfq4PK9+d7OAEnwZQo+bwAMvrBam+DqX87ND6PFsDU4jLRA9mDx99BIjI/d0WRgdTYq62KIRaaWPTQseM11xSNsNW3YYaFTpAX10WxUpbnHUtyJZh9UW1+EiDL5UQSKf3Og5XSmRhZCjnhshjGd7NZxC5uD4uVXlWwr2euoUrQq+Rsi5yvsNekPpvBo1Kw/P2Tok6ukIr5U9Tr8tjjRUX5m8ww+Yd/y8hG/xg5/RqlaJQJ6q8NQw90TMfoOATyx65VNoqSkjXFTuyFX6dmAusEVRe7kM3L47Ihay3rRvXCOCmi+HlX6XWk8jcnZPpmw/U+6j5ijo4d0RUSlfhVzuctxptp8CQm89O15r+3nUevohP94gqS5LvtNy5LQJxC8Q4snr1l99+vTlmNnsAnSfe3JF71F8i/XXHpzps4peCg9KC15fcudjOi+mjdwFmYrzW+DSxg67d4U0xuo360vR+tRwWRwPNqtmp2GGhqgb+Nk6nM30J+qkn0/RLj/OVX3627GGdtLJA4g2X3wrxgMv9yKuuA5J2jd9lH/j5qtZxOzO5RL9aZMaJcKB8+qCSdeT0Eqx0n7gf9VA2YVmdYbqom8tPrI+qj8uk+pA1UnbmnkqQZ9rax6lV24Dhmrud+dUqf4I4tXMeTGILn0WQn+gT3/jLRVwa4rQ2eRXjf6CVKr7lUPb/FFweng7TKEYWE8bwOGFbVcnIeFAhItuuBTLPn10J/F0m42/FRUN59TOLCgpfDorY2XGMzOfeGzGzBl/+9tjr7+YlfVW5jMznn7sL0/MeHLG48+8mpXdzvSJgEM8c7p5xcv/L2+6cHTcmy7IuHgKxgWkuSCR5oq4N2JeinXI/K33t13gnk3WB5QT7yn/P7yxnPn/XxBOVug3he6Z/wc6K4ayAAAAeJxjYGBgZACCS9IZNmD65+4+GA0ARvgHuwAAAHicY2BhYmCcwMDKwMDow5jGwMDgDqW/MkgytDAwMDGwcjLAgQCCyRCQ5prC0PCR8Zsy44H/Bxj0GKcyqAKFGeEKFICQEQAJOQuTAAB4nN3OPQ7CMAwF4OcWaJMmaSRUJFCHqEjcjRtxkF4MEzywtOZ3hZknWfaTvsEASjynB+GeURs9+gIn3QOSXsWZuOSKDW858SHHvM5dPl43YiRKL/tpAtSAl2qimuFjOsHbtAhFoAB/89lfnHW1q5qxMTbZnW2tef3wJbTCb/CPMwM4ACwLAAAAeJxjYGRgYADi0OesrfH8Nl8ZuJkYQODSz919cFr0/23GV4xTgVwOBrA0AFr7DRcAeJxjYGRgYJz6/zaDHhMDCDC+YmBkQAVMAF+2A5AAAAB4nGNiYGBgYmDQAkN9BgcwDSJ9GBQYlMBsiJgolNZi0AbiLLg6ECnF4AhWB+H3AlVAeA4AdyMJHQAAUAAALQAAeJyNkD1qw0AQRt/KkiHGmKRzE9jSxEistjDYuFadyr0xQgiEFiSfI0dJm3PkAj5LRtIE3Bi8MMybH775WGDFN4b/FykblrwrRyTslGds+FKOZedXOeHVoDxnabayaeIXVZ3YsBaaOGLBh/KMT47Ksez8KCdYbspz1uZtkOoJXKg505BKBCqJXgbhUp+btAlVkOpuoJ1CqpbrmDuZlaLuyXCSDxKPhKepZy9dP4Yjl/+gCO21CF1VWp85e7D3BqT0+9Sn3uW7pz2fxFMn7Xp0auXOcCkb8+CSU9n1dWitc3nmnLPPKv8Br9RH5wB4nGNgZgCD/wcYJIEUIwMaAAArwwHdAAA=") format("woff"),
- url("social-logos.ttf?51b607ee5b5cb2a0e4517176475a424c") format("truetype");
- font-weight:normal;
- font-style:normal;
-}
-
-.social-logo {
- font-family:"social-logos";
- display:inline-block;
- vertical-align:middle;
- line-height:1;
- font-weight:normal;
- font-style:normal;
- speak:none;
- text-decoration:inherit;
- text-transform:none;
- text-rendering:auto;
- -webkit-font-smoothing:antialiased;
- -moz-osx-font-smoothing:grayscale;
-}
-
-
-/* Icons */
-
-
-.social-logo__amazon:before {
- content:"\f600";
-}
-
-
-.social-logo__behance:before {
- content:"\f101";
-}
-
-
-.social-logo__blogger-alt:before {
- content:"\f601";
-}
-
-
-.social-logo__blogger:before {
- content:"\f602";
-}
-
-
-.social-logo__codepen:before {
- content:"\f216";
-}
-
-
-.social-logo__dribbble:before {
- content:"\f201";
-}
-
-
-.social-logo__dropbox:before {
- content:"\f225";
-}
-
-
-.social-logo__eventbrite:before {
- content:"\f603";
-}
-
-
-.social-logo__facebook:before {
- content:"\f203";
-}
-
-
-.social-logo__feed:before {
- content:"\f413";
-}
-
-
-.social-logo__flickr:before {
- content:"\f211";
-}
-
-
-.social-logo__foursquare:before {
- content:"\f226";
-}
-
-
-.social-logo__ghost:before {
- content:"\f61c";
-}
-
-
-.social-logo__github:before {
- content:"\f200";
-}
-
-
-.social-logo__google-plus-alt:before {
- content:"\f218";
-}
-
-
-.social-logo__google-plus:before {
- content:"\f206";
-}
-
-
-.social-logo__instagram:before {
- content:"\f215";
-}
-
-
-.social-logo__linkedin:before {
- content:"\f207";
-}
-
-
-.social-logo__mail:before {
- content:"\f410";
-}
-
-
-.social-logo__medium:before {
- content:"\f623";
-}
-
-
-.social-logo__path-alt:before {
- content:"\f604";
-}
-
-
-.social-logo__path:before {
- content:"\f219";
-}
-
-
-.social-logo__pinterest-alt:before {
- content:"\f210";
-}
-
-
-.social-logo__pinterest:before {
- content:"\f209";
-}
-
-
-.social-logo__pocket:before {
- content:"\f224";
-}
-
-
-.social-logo__polldaddy:before {
- content:"\f217";
-}
-
-
-.social-logo__print:before {
- content:"\f469";
-}
-
-
-.social-logo__reddit:before {
- content:"\f222";
-}
-
-
-.social-logo__share:before {
- content:"\f415";
-}
-
-
-.social-logo__skype:before {
- content:"\f220";
-}
-
-
-.social-logo__spotify:before {
- content:"\f515";
-}
-
-
-.social-logo__squarespace:before {
- content:"\f605";
-}
-
-
-.social-logo__stumbleupon:before {
- content:"\f223";
-}
-
-
-.social-logo__telegram:before {
- content:"\f606";
-}
-
-
-.social-logo__tumblr-alt:before {
- content:"\f607";
-}
-
-
-.social-logo__tumblr:before {
- content:"\f214";
-}
-
-
-.social-logo__twitch:before {
- content:"\f516";
-}
-
-
-.social-logo__twitter-alt:before {
- content:"\f202";
-}
-
-
-.social-logo__twitter:before {
- content:"\f610";
-}
-
-
-.social-logo__vimeo:before {
- content:"\f212";
-}
-
-
-.social-logo__whatsapp:before {
- content:"\f608";
-}
-
-
-.social-logo__wordpress:before {
- content:"\f205";
-}
-
-
-.social-logo__xanga:before {
- content:"\f609";
-}
-
-
-.social-logo__youtube:before {
- content:"\f213";
-}
diff --git a/plugins/jetpack/_inc/social-logos/social-logos.eot b/plugins/jetpack/_inc/social-logos/social-logos.eot
deleted file mode 100644
index 9b8a76f2..00000000
--- a/plugins/jetpack/_inc/social-logos/social-logos.eot
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/_inc/social-logos/social-logos.html b/plugins/jetpack/_inc/social-logos/social-logos.html
deleted file mode 100644
index 94119b4d..00000000
--- a/plugins/jetpack/_inc/social-logos/social-logos.html
+++ /dev/null
@@ -1,428 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <meta charset="utf-8">
- <title>social-logos</title>
- <style>
- body {
- margin:0;
- padding:10px 20px;
- background:#fff;
- color:#222;
- }
- h1, div, footer {
- font-family:"Helvetica Neue", Arial, sans-serif;
- }
- h1 {
- margin:0 0 20px;
- font-size:32px;
- font-weight:normal;
- }
- .icons {
- margin-bottom:40px;
- -webkit-column-count:5;
- -moz-column-count:5;
- column-count:5;
- -webkit-column-gap:20px;
- -moz-column-gap:20px;
- column-gap:20px;
- }
- .icons__item,
- .icons__item i {
- line-height:2em;
- cursor:pointer;
- overflow:hidden;
- }
- .icons__item:hover {
- color:#3c90be;
- }
- .icons__item i {
- display:inline-block;
- width:32px;
- text-align:center;
- }
- .icons__item:hover i {
- -webkit-transform:scale(1.5);
- transform:scale(1.5);
- }
- footer {
- margin-top:40px;
- font-size:14px;
- color:#999;
- }
-
- /* Generated by grunt-webfont */
-
-
-
-@font-face {
- font-family:"social-logos";
- src:url("social-logos.eot?51b607ee5b5cb2a0e4517176475a424c");
- font-weight:normal;
- font-style:normal;
-}
-@font-face {
- font-family:"social-logos";
- src:url("social-logos.eot?51b607ee5b5cb2a0e4517176475a424c");
- src:url("social-logos.eot?#iefix") format("embedded-opentype"),
- url("data:application/x-font-woff;charset=utf-8;base64,d09GRk9UVE8AAEZAAAoAAAAAfBAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAQsUAAHZfa1y5A0ZGVE0AAEO8AAAAGQAAABx4Dt9ZT1MvMgAAQ9gAAABKAAAAYEC7Yj5jbWFwAABEJAAAAIUAAAG6pEWcoGhlYWQAAESsAAAALwAAADYHEbeJaGhlYQAARNwAAAAdAAAAJAOvAd5obXR4AABE/AAAADgAAABeCDEE521heHAAAEU0AAAABgAAAAYALVAAbmFtZQAARTwAAADrAAAB5koHYmpwb3N0AABGKAAAABYAAAAg/8MAGnicrZ13mJXFFfDn3XbvVnb37i596SC9d8uLDQyKFXtD7F0RYzSGay9LDCpqjB1REaPR2CXCFbGB2ACR3otLWdje5zu/M++9QGK+fH98Dzyz804vZ86cOtczKSnG87zsKTdMvmrStX2vveGKG6YYL8l45qTaFqZ2rFc7Lqn2hOTaVinTs7zibW36ZyUXd3vVZqUUZ5jWp+fbkpJEJCv04mW102p7pbZLat2inTG57ZJuzmtn+rSb2jLf9KfJsGlhikx709X0NoPMSOObsWaCmWjON5PN1eYmc5uZZu43fzYzzTNmlnndvG0+NPPNF+Zbs8ysNpvMTlNmqk2Tl+Jlevlea6+j18Pr5w2Vf2O8k6Zef9XxAwcM5M+gAQPcn+BrkPsz2P0Z6v4Mc3+Guz8j9c9AV2+gqzfQ1Rvo6g0c4v646gNd9YGu+sAR7o9rZZBrZZCrPshVH+SqD3LVB2n1Ia6/Ia6HIa7pIcO0laHua6jraJib0TA3o2FuRsPcjIYNGOL+DHV/ggrD3Z8R7o+2Ocz1N2zgMfpn0OCDd/0QCDDGe8B70HvIe9gr8aZ7f/Ye8f7izfAe9R7zHvdmek94T3pPeX/1nvb+5j3jPes95z3vveC96L3kzfJe9mZ7r3iveq95c7zXvbneG97fvTe9t7x/eG9773j/NH2BhM5p96T3yXojZ11u18hThd1aprSe33Zru1uK7+w4otO5XWb1OXzIE0Orh/965AXH3nF8vxMyT2g48dyTcid0O3n/qS+fXnVG5TkF526/YPCkYya3vTx6xQ1Xzry2/Lpzb/joxqtvHlsyu2b6bG/27NoBs5NnF9VeUjO/8ZK02Q2vFNZMrx3QMD2UY83oVsaa7ta3dt3OmDV93ola0+1rSeu4WmLebAl63GystY9Jbo9r5bPoFAn6fChpy++Qcq23m3xres2V7JGLJbhgoWSPyJTsnx4i7QUpk5cpsSE3mshlF1vz6iRjveNv8gutvfeEmG2ue0Qypw2NpVmT+ZlfIuHtvvR8m6RmZkvlpEZih0la0m75TG+UIOV+CcLvSZDWVXLDz0ufaW34lJmYUKkEqV0lSF8guamtiTGOpL/42rx0kv27qIS518k4G1tJoezmmLW1qdJO5geyGLW5lHwxam1lWGLh3pJbtkFiKa9Gw5KzUlpLfZacjRILDaPrFozp+2g4ctmLklnH1woJkpN8nQmdDqHTrCHSaXOKZGWcLl01NNHMGOmqYYd0Hz5fuqofJ2lpsySt9nXmkkzsaSbeLHVr6C75FSlX9aHUSOprwhKdxQSPYMR/l5hXJLGKG/yScGToi1L5Qfl8oo5F/2K6ZB9xssx5WAtZL5NaHJNBpdRKATtHUlO+kkHZFsR+ItZNukjpJ7nNt0paMqvTBIAkz5MBNP3CAHZLWuMeYsMlrbGYkfQgFvGDkdTvl5nbuu2y9LayiazPYvdIwgUSbejC+OtOkpk15EtLNQ/Q8KNSq+pTxn+TAE3yCEmbMdbI+BfKoplxY6WPI5dFZfxZN7K0Ge2oxJ6H/ipt1B9BjIbq+0osWfbLVl8sE7Xl0wwjYVDN6xnZOAmaXmMjnpFCTX9nRDMAi28Z5n06IeZ8I7HD6OVcitxAA0Pp6oeYNiVzqGchXKszJdHeKc3UTzAlAjEfvCaLZzYygVoBJhN62bjyJkcaMQbIa9EiJiUf6uTLrEwDWZ/S9NdSPKdAGm18UtKy7yA2A5C9iyb+IBWzwoCsgJDJuDcajwms2+oOQNR1EqsAytKG+uHI6x3la7fUTxsv6ft3saktAe9SFmb/FDaq/GdmfJmkVrZiNmuIRZjsj9JnlWy/rd3HVp0pGTUZxCZJuZo28lk3hZ27mAU9Bhh8m9U6Q2pUKMCw0uXztKvF7Mf+kzjZ40i9HkgrYbCf+bIQKU/6rrpJu5wm7+JEnUg3gGT4TmK9TbD1dYdLuSwG2wCqcLERrNKtTOUpKZdTycEvvAtwyb8e+N4pqS3aSGPpG1n+8ZKWvgJsM1iayD1L0kJXSJEi3dyfQnJabPMoYKodrV9I7HTW+2Zi7xO7hDV6m5XfCjBNlFjVHazo/guYbCXoVYGxtjetv8w8R9dKH5NXCmiYtFHSSF2eCdahur8MxpOZ2fK5Ahr2jVYcWDMs6s6hMd/H3Nk03tnUecnEYws5gieRewP7ew4rO4RDexVpXfi8mlbuA49dww78SOx+zvAaVvxXGr2SdT6N9cr6ibXLmMa5ONZBkgy0hwlHugg4/X2qJJ1wT0xmcPXZMb0TBNu85qflWK9fL8m7orfxgkvipCFR6+UOlMSTjo0l18y03hMTQUsP95U6L94ZCwL57CAL9tInUvCIYkl4O1cGcwa4acuX0kzGXI5GAXPYxHgfY5SpfweVpYY5e9/LfLI5s3ar5Od9IRUXvQo8HgZUccX0vN6USBfV46Vkq7dY5LSgJUnd/QywM0qyCtaBBedHSzjGhdeAu/8IRj9Gaux6WJKtiSRJ6oZJUqO4TGqkT5Ygi0VOvZUd2c9QlvIJCKdfILG01lI4FUTyw2wW/jxp4Dt2O/9spnDqAsKWx/u6/tIBF2H2a6AEhStt7Bo/uB4K/w7MCvYy7c+NhRlQ3i4KfCophy2Q8lsvM8ElrICRD3JMYqPyOwNFhUHMWi5OcvWYag09xOawjyVoSw9524HwY1gjk8kVtPmVYBi2lEPctAyk9ELMDdfuLwKEDpfY7lqOwc6PZYDWvtWC+crVbfdUsAa3+e4AmdCcqMMgJm0ZO9JIpd3ZnJ0tAquyD1JyZxXfdZnkyVA4UUAjq57xM1NrKcEZHLV2IwGfHAlO3sqKXjiUAzd1WQBq5qK7fQW14hwZPtBZvExqzftRgg4fS3MzdknQYVI0DrwdBPN4Vwu+MZ2u9AFeahV2zLDm3T1S8qOOcgRszQZpfunJrM12CZZz3a/sKB1tPRfggWDJFKpLAE/GNRQUsRNkMOZP8jmS9UrvIW0N6svypXHWQDnN6eCgx4+UelP7c4uUsmHVb8py7SgDRYOxt3/O/bpiHcuzqo+0lCO0lt3UDgBnk5NPkFjauxJ03SyfY4Gvy7+Wcl2YsbmEoKNkmCsIuvvxGGmtZ0pTn4IgMp6Q2NdcwEngvH2pjGwge9Z3J/PfvF2iHUHUe31potc8KWmEIDT9lrEH3hoT3HfeGnqA0tK0UBUguFpiZ5/IPbpKYudBPLU9kiMyJOpuHkcDKbmTItegrQLOmp7kpJ+aiB1PbBYAM1pis+Rg200vSGxpnQRv9peMhs3uEpOxr0iWTl7oFhX0lclCjHhE2u4OOdnPyucgCNBWGZweSII6sGLHx2U0P22SesVyau1iCLm5MUn7FYrmPWghcyp34yrWry1Q9wDEVclKwXUmG7IteQIbBAx4X3Cw/8ni9BsPHuvFrbL3ORlAR4EMu+UWaakRirtBELndyqzXtJceFwghaHcIoNrNnaXwMFkxux7M3beAU1gD8HwKTfHh51JlYR4IurWgH7vJSKEWgrDsL/cEu2yXQ5bVQV17YyX2+WcmIFU/v8gEN1vzR1I4mZ6bAaLkLsAzhE0ySLWRCya8AZxR7jvi1zZ8RkyQqzlGWjFtp3HGpkvnPbjDk5WM7u+H5Z5YLaSrN+YFQHsfsFMH8inrSBsCtXbvePDeFvBTXoxzLtWzt0iQ110+0x6QhgpulCJlhVy57PKe4xj2e6Ce7Ci0qHzu4xLJk0Nlf4VeyBA8ZbcvA498P4dD88v3UQ00QSnWTuzkIsZzGhD7J2JPcxd/6McCInzB3ZLTWQZklwvBbIZASdfeJr1V5Eus4Q3OiGKssirInk1wIi3gqbZxvbT8YyyY8X6YLQMtUX4viyOLaCu53NOm02HzVhPidD/JEsqlatdyRR0mM7I19dEABzcpGwMz0bw3pgwNOPJC0EI9jZpHAIxX2GRQSyY7uI5hdDwL/PFPabE7K22PlyY2Z0mwE85hNXdCuSfBz5YW5dywOGkmgJ06MJb5HtaoOzTrDuiyfilgsHukyYHXAdsvGcKz2YL7LoacmPIOwJ78Lf2VAk9fcnSXA2OATR54K+tkCXLkLjAtrgVxCg1p8h6JhnOk5kw5EmYkV92Y4VJ+WDf5HOX5+UusWQrPN3qtZP0e6nSRYF4z+lUTqbTe3B9NbUGhbZ57IfRc5cmg0btiQSCfHSRrcjQkceFOTfqfgnyT+XasWE4SVyQd26Vyc5mR1SCILNDc+zAjA5+W72IoirZgrj5HGalT2F9JzhGclmukUip3gx2vN+G3PcHQp5FQH02N1AboXA96JQe9bJjpIMc9ialONqGAlfsyXYLvCqA+7DVCXJtJa/ySVB2kG7ML5LMDc544S2pqppuLzkrmmrj3CgWxe21nAJnfAY/QZ8TMGUe63DiPrwXHjJVZHtZWgiJolsJH/cjz1kvmhP9jNGh01H4Z3oV/9FMD+LAZYBluedsRSLmHLR8Q1atdZiS8ji2FY2rsAgqdyzHZ05Mjs+cXqZgEYt37ncRSc8DXt04yNScWypK2BVsrp91mMsdZSBHTchUI7zwh8GzqKSbV2hhXTQeh8u0yQflmzNPw4OP3CM/p5pH+j2ghh/OxmLKiQtSx9tXHSbCjBVfbbgjAWJHkfPK2NCBkWmpkvqzmw6B2mPKMqzhPw31oogzIKokHfFsLJqk3lL3CsN8bS2MBc7urPFocWS9T7Cotb4TZSLo+WtLBFdeGtQm7D3KfZq2dFKOL9MWxoHWVH9CwUH6CGu1bwu7Znzl2d8OhfNJDan6/yLjhsrluuJNjB4YLM/3vw4UFllaBrY1wecFwOfKNl7E3itUhG20DCF0phc5wG0NkO2XzJeg8Wfo+JgnAH7iLFe8L37p7JyXh1zYuYmmBAaUNglhbXwUOie0vB0HLzkh07yR6VsBMbxtzWSb9E5DrQJlUSJg3WwHDFwa4yv7KaHeOZWm6gz1OO5vLL6dOSm1FPhLmFG0EZVrIjvVzaP1jWK1Vc6X+Qg7rl5Re/zmX9yiBTvP6ZIEnk8H02p4DlnpVGircwuwit4DbQi2kUftnX1G2xMCCaW2Qbpz1btQ2fzcrKrRi/Mj9SRC0kJEy7a5TJeh4uBTuFiFNCBVy40TnxGbuF/j8wT/K5+khzl2KSfBOnTKEvmwRs83Lj4WR+oG7ZNVJ0lp3Lun+0rML9DOe1kFOypmMOQJZXXMzWFZ4F5C8DHfH78H83eX82jqIk9R1Mp0qYcOUMbRlq2LCDNktl8rK7YRz2gmFv3lTENAyadJmuycFn5pORSr34i4rEv7FJMGAZD8KBPygRGch0r+OgNEpG2KhACLr/0LWPumvfjsQUIs0zaRKzndv+o7QsWv3gAe7qYhlvhxZc/zlgn/stolRAv8awQwwihJ9w0UJ3tAEotE07pERi6XhD8dI0DoTSAemS4RRtks6A9Pr9EYZsU2yvkJYMOQiCY6AEu7COSDDHDWfWJUUH7HAjzwlOHL2sb5eMx/+Xu4Fu49VqngiGgTy2UGzQi7LZF0dZJkWp/rF1hv3ILeJxF2WC+Szg2aFXJaroFWlkWJrs18SKPhosSmMLOGOgHjVaY00jGHLfb7OsDCyUnL3CA1q90MF5YBZuZ0cY4jQyeSADfInmCAj52sKDxL42IPsZ89CPodr4GuabPL+HyQqkCXL/5WcA3NOO4QVhUdxJF72OTKQFF9K9c0XSskGMPROaMSdbWXG9hWYYV1fHfIwWUO7vRI8s9iEIi9HnWDP5FwusfwnjMNVpu0HPls/ci54ba5UWZ0FfMzhznxmWjQUP2znCaFm3kQ03WelxLr9TmIndzwglIBc6MEl1R2uY8xMiZ1qovM0538KKV55iX0XcLf/XEK75/sBnldeL3cjmByhOWIRkwJVoeKnZK6j3JclVojc8pwrETFAVkEgZn3FpnCY2isrPlCKFSFKKbyM+oOkufBi6accVqHsuSjj2PNPbnWYzK0v+Y6Wt9uFPBdOQGKlMUDoLYntBQcUVOjKdUPq376nZPUQItKMfF+yBiOFXQN70gVp7xIg9vMJnLaLpLGfBBPZH/a5Hv8eDbDe7jNAvd+DJk6RJrwFsYBcN0qMwupbkAoCY9t8ngR1R/t6nzgaEXpIclV0I7hMhfJS2HdY1DYgI/M2cqrP5bhQrUywjOleCWrpMJ5L/xjY2wHbpNMjEJCcz2X0OyFazUg6WII08uOHpMUP/ijBj0Jt20VIuBfM4eyUTgbH7HpDimcibK4TVGCyj9NbkCnZlcpTIhOtTmFEfSW2B+FiBdKfnYtBo8yBc2AiNTSBLLEQvrWRK6ewGayp0gcVPLhAP/9TItFBWKI02W8HeGaSsGRmPPqIT5+V4LWh0vzLN0jRz+n8fYbxxi2CU+yWJ7g9tyHez+kgqdVcfrkfQzjY/ful7LfvMJ6XJFYBiqvmolrXH3wK/fu90OG2iTPbeAdgizyy6VOJNSIwMLtMcL8lvU2sI1dDusSqRwE78C9hxFldHpZYKndZQYV8tkVgd+PzAXjX/BWwRxzR8hsp1g1MXPQcCAIRSjvEZi3hBiBY7N7PZWS7LowBbDshE/fB0K1D8l0L57MRigGO3G4bQnfPSKwUjNX24SiLPZAt6H6cBIMulNRx4FqfC/L7b6THPrBq85DFvM3p/VEOmf0Skcqiz1yPiH/S4YZ3jAYu7uPAcSshWlXprjGnmUBp4KQPMJ1NcqZsDXxdw5FxlOmA+liAnyk1ZNEAoNFcL7n1IKEk0OLaZlDbc0wDln5gHoxSj0kA+RlfSc++3LTmpJ+k+B+MzDBHyAOGsWJi1HuDP2AIufyIJVvzsLTrCYZD7TPRP+88/aPBvPOEqKHXUXOj8+Yl4rHz5pENeVA6N1qk8f+sFtWi/1nN78B1+hAc2RNg1ItLhYjx1sn8vR69kW8nQaGPlD2xpdAz7ZHV/CTTVqm1XXgLhxys9bOgS7vud6wCGPcjIdZM5gm+U0mZDEFnJonCwsBLh0Uq/EUxaCtAUyp2384+Ns+RtH0vA+cwTL/+Q4I9yE1VarkHJcVmSEwkv3a/cPi2+iPgxlaGoQerBLYFNo2rbvoeFT/K2WxzvSdpnWSyqvwww6ZHAw3ioL8wcMReLZ/jdHE6qWb3TzbBmEq5psoRn+mNuB2YoIbd/a+o4iJipLUkbSFkrMqht7WGp4qgKMwGc6OidErP5NNZihZjWIocJIY7ixjo76TSD1BimYJB7fLB1Nkdc1JJk1keDdLykNj/MAx8BSOxUyV+22mr5xdA4OB8bojREhx+rnQ24SYJRsH2jG/vO3GEGY3ehd0zvUfEAMx+vqCvLrcnLtnXx0aTrfdjnkBD4cmxQjBSAwKg9uDUClQuWYItbBlYIc+AXcHiBsarZg6xBokt4vpMgWl/9SbhYNgr+71JozESXAHbAKdbw13XbNly0CsiBlu2iCAl6NBWZBs3CLv5b75DTw3z4lu27g45BnbDy35I49LtsaTeakqKYZ1Semo1Sc9CLFiRBaIFjeyF7irkFkTa4nhtNIWmc2cQqWyruR5SW06+TEBaOgfqRYWso2HfU84Aj8IQerIKJr+vcaugrZtcWQXtUVbLd6OQFXS4VUdoOiPo6fwwNFnH86GmSdB5mc4PxUrkrkuCUp9yDqSarZfk36MimYKY7fOVwmNLQyfL2pmy34NwVkc9IX+fFHrMjIblfXNdLFmvJSFvOwvr8ZCQhc3fv4Xgbonw49aiBNyN2KB7CwCozRLEQhN8aX2HrD4qEhlTV+iFbJBEeIEkdlwEAkSOkg92UY4SMaRbAuQFxjyuGL0LusqFiGT7l8os1swDmRN7/0aYCIPAtAqttGqqVaUT6RtvI+08Gkf/Gkbu6XE7pKC8SurMEVMEv+6XqLA9DS9ysYAvdk/lXIND9qKGtG8ZgLuPgKBpDxPQh+16XEVZJ6xATnItIApqM33Yjsc/iDq2RbKlkc3gLakYedZ6j6PEWzedpVv/mEmL/A0ZAMgKCak3xVcFbomKvQXO5yNZW9JexrCEK0s/gzRpZshmqTNmbKwYrp4b0EMir4rNJBSr6VNgt9Y/II1ecD/sgIqm00BuqjkJ9xYqyEtfAd+BuYNmuSDcHSZu1h+ioci/AtH9FZMQ80hGUFvbqVkOIb/sAz9oXbNcIJ9ylpa9gwDr3zvuLrVMnxNiv91x5BdrWVF4FVmnlYi81yPbXC/MgfskMJ3yfJdhDoOd04A0F8inTOEwBLlaRktLvWJmxDY0V3dFQNDqZuAFrKRBq9vguOT6DUU+0S8Bh55Bpt3xgKxY8y9PI0bc8ecgywWSJfzdL7OZ7g6oPK2gVaWHYva+x7XCfApmRAPX9TPp9Xn4rq7o51zsQyPHbIVQFl7yVczcVnEIxoLJymIBXe3SxsQCLadBqGHLgDe043ZVLC5r0xqQKi7NtUI5aCG7nBhWAi5XY4hhzW2JGloXAxhXV9NcXT9eA7xtsF6x81174UO6g+A6qAqY0hVEs2DBDOaCRJo2802iO21aJ6xpGnvLj9dAU6faFvuWObRGYjCHJ8q5uiY+pZcTNea4RQ3HqwyLxqsMix2StpVYbjS+5iqz0lghYvrDMc24O0tFJ4peYGRqVPLPt23YwbocfrtE72yOpbq6uhlBzAVR1cYGIjKkcamOjdYhyWBJfDdYhiBtvqbFAiWp/TwWT/smUe4tEy+sMW1AG50fjWd848drLPfjRRYFKxV8PheLF3nZj5fTugdi37sBhePjeODQKsiYsShTkAoGA8JwlQ/EllPjwUTaA4kajyVWSsttTSxHWSw+V60BN6UXv707scCwobY+UaM0sVia5gatnfQ28QZHg4XlW7L+lKJqGAvOQXd5sORS01SaiTjIwYhCUEYsHtNydycg6E7jLjsdVdCeAmfb6CE15kfj5R6IOVrBWeSZgfT250Su1u2Y6K27H8xIL72gioLzcwkUomnd/XiV3sHCBOUWJc7Mc4lz9HLiDGpsWKI7PR7zE2k6aD1belb1hOp5OzExuTHReDkkiAf15gZ9WuLYKkLQ2Z11YE6IG+z5qmXQVSpL7ERpYv3LKPn57dLQnXWUTIZvR7BgkrntoQ9N8gxVRLkQKZmHfhRFp0nKi2l9id4dCrAGE011U9OZyoR8N/vgU4NL/HiR82Nu9sHnmOghsTExN/uggTHReI3TzCENjDWHdDnWHFJjWOyQli/x458XJMqdHwvg4ODKJwago1sbDOa6xGC0md6JtO6JKXWMHVJ3bAA5quMJ0q5L1L05APegnOaeGID7wWkPJsrdGSBWbq+wOz9BwdzEoDMTc9BmkMIqlWwWs41OGXlXI7SmEl9mRXCanTrX3WUrONGHo0a84Fyu/xlC29gXAd4FYNgVOQIhb7MPQ3uCqteMkE4mPuqjL5qLGIw8uxhh6wKOTK/9lNqPwGDdPxHb9MW6ZRN85U9pLiZDO+I81AjPfyRt+49A+90IRXUR2jafvnptjzkC3C7+GY5m7i3AbT5s8lRGaefD7/XGkmsM1HHvS30Xs8ufof8fIbguGo1Wy0yEQlVifigyPv8sZqU8ZA66/M4n0d5PyMiKhV82fZtjGkuNy03zMbk9KtU4WaTXmZJdViZYunw48enCmJoshOJbEV60vu0Qsy5Y2RdBAhro58NM5SIQ94vs5FTsaKciQ72IRdRAP8lwRbSwVOvgZKV2bU+kCYMQmChnNQDWcIcwHmq2bFdCJaTB8ddinpt6l5SrFbzhrFzh0e2mR6TZ7lix/Qh92ErYAbvkQkSASz8k/KlRCv36OpuG8HDt3/34rVCWuDT0hsHYRz+blafD+POg2FYTtw11t5/epAeuWP3k7ikVXtrufF7SylF2bgSG7bpPCT8EPY4Cxr5AxDVujOpSegLkmd/K0D1M5DKBTLXM+AUN/942EnyP9sCrloqrkOoWYR3yC4ZcLYWPt1uQHPTuLH3XXyXl+tWrES5t9UcOnvu4ZA9skA47Yw/YGbVmZ9iKztisDkTEE8GkdJCaz97FKR0rxKj93TFAdHMljYNpNwyQQj2Y8c8YA6Vhx/ozOqAQ4rIV06XKdtiqymek8CqWuh7V2x6glZnZXTf4zgjOaYDD3CJ7sbLLuYnVwhYrD1Fu3XUS6zKNNNjInhjdReCvMlGSdEIukfWqFOkka2FLOWI9GMEGVBWhB6DcNnATYquiQji1YbAWc5KN3FfNqJv2fSxF0hAf70PXoxqH6lHEsPms4lZpASfQgCgzG7O8pP3SfjZmS0nvxwL7ovQ+PtZ5nBq4yFTUElmwOPRhcpDD1mH+noH5WJ2qNtCnVyZJWgjqpQLeRJCzDLoClaABcDBXsPWIGLCFtdWIlBBi2+p3jbOmUomvk2KoYbCKVgC/gGRQmllj4KKUYsktV/NipO3VmLejFnIknOrslUKCNXZGqrDLJnlaLCisFlu1SFwzkGzpQZXNCDsjWmewmIzAI+tVqRdmacNAHQpcDOklA4Pn1AK2DvBQKwIKO6P0LCx6lIUMMaKqrsQ4UVUYtOph2I90rgk5Yjn2OU33E0PgVgNVXdlPilQgqa9dILFKJlyLveS+hJK+HPYsWQddjjw2GZl7BWClYp1ablcV/9SCubOQrTdhTtMCMzZIDVWdmWSEQzlqG4pZXvZRDB+0mY7hSmvh9E0+Fk09oMOb+nNaORQ7IChbYs+OFY5J+SDmDo/dfa6kbcGoeg8CPpVm/gK3s2+1xNaxEhnTONDrkGCmz5TErUhOOzP3JmRZ3VCtNGMLkr/WBIKjCFROOvCmWim1IFE80ILlzsbOIu/6+Bw6C4I0+dKe6XctjSLt74hwfgc6vDboB3YjCMmLSWwjF3MyCpj1bcBpDujAwwJ0JQpwMtiFmDQuRZa+FIuJhe2ixbKFZ6utOOcXy2RbgU42tScD5wZu4HRHbgByMYXNWyGx1BslKLzVd0fV5OsRROOn9rx5KPey+1P4dQ5UIaudHguQViGozM7i5I1ZgYBsJiqiOUDjWRD614xAM2AuR+J5MttzOkf9UuxM1aS/qSeAOgf46RkNGJWmITFH6tuv2MvqMyW2FNnzWkS8WwdL7nfrJdiKhf134JlmpGUL0Vi0xBDrOyybih4wavIjC87Vsupo6XIogk38JcxQJNLVCE1QRJoI56oL+rDuX0P2dZX7y3SXjp0F1Siwdhn27gMgrCuwDemORGYzjicdsUFbgy1FC4zcxm0D5jEyGoX1/1fKy76nNrlqtKPeAaWYotRg5bpLMJLdCMcTg1Sfj03Kco7Wu02+KiyUchjOWfahEQcPlpbHVbk0D/WFr1r0ZGvmUnKF0hHfLjVq0xvCDQIMDj31KypnvUMW7USbaZcmS8LPqIh7ocpWcxQNej4dTxvUGBMqon0yUu3I1SBFLsJMpIpVEzH1OIyj1iMDBn5bnVRoxd2zHpMuSCa78i3t6U2BMfupwJML3sTSnMAc/WWQZk5DU3QmBlIjQfiHy7DNxInoTU06A4dMEHzuB3aVgtml9382SkMrJgJ5KHMOBLps5BA7EMQSGa6IGjQ8jHZhKvZpJ2FxPhsCtx0S2a445Jx0q8Gg4XSgoxva1C63xALh/tHolXsA55IbmXawmHeO7JDNO9ovjCxA0sfRQ4+gtk2NqCaqn1JR5WuQrFVY1Cr3Vo3uLeUdEGjp3GhI2rRbLwPZgrzLcBrZ0sUUq+wQ8x6waJKKq1E/h+5mQzpt94WIT+ESqgfppIEBG0t8NUZBJIyfj+abFKjQ0J9RX01lQZiU/aQRg4k0DArUcF5j6uAkLVG/NYaGhcmSlbtPKrWBPO0paXYtnbRALLAG36D1UFVr1xkn3rarz1YlYeVl8TFXPxULZKI1DNxu4bLY8SCiG51Ynmq8QRXZSwG/ol/Z8dHcgwNBSp02cgiYzAj4phG0tAUK7bOj/WKMsf4q8T3YUW1nCbbi4yL3mpwpW4MgYUIHaeQwEDYKb6eQGQ7q7oWt1HG/JIz4boDyeUG56fPRGhm5e70+kBfXPyYNPwqSv+RnP7JP/q6UK8m7/xq4oxQZurVnqtAK2tJJ7sAiBr7CxeAynTLf0cfgL4y6g7QNJhwpl69LcBa46E7IeHq3DV/GUiOVJi6ZUMMsHSD0mEt7S/lX5TyhFRx/iPIgnha2Xgly1vdOBmPQM9YWCRtEzAWcEEIHeknUpQXj9GNxSREwE0+Tuagp4aSHYOew3cCinAXAGsAxBGNMXLI0OpGmff3b8uiSXRELRyBN34V4vvxNWElTwG1ej3lGgeyBre4lsbx/RP/nyP4fZxiOCNdjkjjamfTqYTGddSwQ6MK2qMJUBd1mclQdlgTrwS5X/RJ9We5e6IBCsCywZ/JxAtoDXskH6EsxZcm5S2I7YWMz8PtT8191RdsGb6f2rlu/5cKo6BuEgXFjBdRi07Mq6KxXSkCFcBpUKR+v+69yJsDEqiIwgIlw3BLxdRUBvefHBQkKHgoU8TS7F7uedA41GlaTAsbafTuD2dgdzLMZlKm2Wb/eFosHWHtroBmb04LiYQFUbEUgA5XI3R0xgVnm3kkOvv8HnAYw/5mfGqn6HzDvXEVtJc5wUCi28gz1JDuXIWxFD5jKFbHt2Wiw5G7xO/tTZFsgGUpROB20aYmYbun+Kb5scdWWxJazxQoGChACGiXO3xV2E3tq3DkdT4W67v8O6YGmVqD1f50YIdxiDENiBdBD9RgKFLwEdHbYQNh+rx8IGYoekFgRJvFKEpkiiFhYFNO+IurKhwMc1r8KRLA8DO7GnncDVP88nIU+QmOxAYunLoPjKD8bWUk6LG863Ff2Quy9i2cBHWprshwEObIHK9H+KPUeRuLVQh2LcpUrT8fLDMMg9U8IIO0z4DR2liuaGhEq2n6LDjhrZczxZqbtPJpok8VlNwy3k0FQrAVYvvdHNdMnW4LB6Op3wOhsgMMsb+kHvEsNwofyI6CVt61TV16Aoiu8zZJz1BhoC1NQI6vKfiSUtVBvhEK3xIG7Fi5jTjlh+uN1UTUdKdVgdYGOsjpC4NtNG9UT6xlVgWZDhOc+Lnnt0Frl3imjHA2ZqBdP51v8IDcNvj0XxVqR9QOOoh+0T+5fY/EbSQumYmCai4nyqT3izRwHLzcaEjFDyz2YqIyBtLo656JlhyigwYitt54SQ5/v4XJps8QPLIIKMcPZNgRbr4pzWJFKrPjrUYXX4AmjYqGN+DsVcNZWAIvZ2Ir8iJFkku5OK7xyJ9TJ9zFcNPsyWSMVrZfilZKHgdpe+NzCOj03RZDredXxoIjNJc3uTdc0af3XXVgZOHvl/dSHd3aqov0rAJ33EYXkvQAVgS+JasRtA5p25VDxxLENayGwtsgy2dkVlPzuKU4X4L4Mi5jye6Wn9eiKS2EV1dw3BGuihJr6eQtTW6LrU+LWiyCRsHeWFEuHx9+HQC0b+8+aaznq6F/VQcc6eycaaejMuD/GcHgiQ/xSmBtzVR+/OGKriURduhnZSUocP0oZKnXlUl1ECoZnikxSbuCQ58wxgTlEuqwX8hWcKUKwafPgUZ4/0xSy6yYLr6uMhwMk5mw7NNDP30gzGbxQkLUnFq97b9AAhii4gcDETpoLGCFiMjlnSv85mBDIp+CGtDcZioq0mpYG8GsbMRfYg5Xjftju8lekjb0wbLVIJvdwXdQNki5SYd0a/hZToUeJuiGgaMAr7ZwfkKG9wCX4Di5yA5GrHIGthAYTkN1o2sUZsQ66phcjDCfdfofl1ELYVw3eWWOCNGlOqOKPIXWn7wQt4mBl8hFzlmOqlHeSjHYPQJ/zGMODX04W/GLSsPVJ4jSH2oBeZO4lbhnwWAI41KiC01P1TxP48FfrjCFK6nsADCFUcmvegIjKRWafjcWrBvqZi8i9HEFjNiZhmABJwPJdFQ/0U22DtIgWlmoyp+cQTLRX+b1rB4FG0E5Qx5Zf+BvtvHSgnWAMMiRzYFyCKbZjPvThVqTkjVjkJh8JvlT3db55xkAQyWYCKAq1KKv/mx8nd2wp58GJjPWid9+J1EBbqN+uBi04115aNZlIsVzPGKXWqy8lS90oKJfew8EY5LskICJ1jCSanIvBIpgTFyEsrUNb0AFGC111SVyboooU912kJJdqIasSqR2Ws+FFvP6glmY4lbog+UgNaDD1qGBQJHI7qLfweHjM92A/xy1OKA3GLZJe+yKAGYdYpS/4bRz2P337u4KqPrj0MrUoQsa1AgGeBvIpyPK227CrqEB9B8Xgggr8GBJp+iiAybqdK/xwmLUPoZ2Fjwq5NnHXcm2aIdwhGvRCQksGn1Lx4RDaI2mE5qLxNnn0JEiLJfpW/kzdrIs5heUQ28qhZy9l8WQxUh1Zqz25jnUIMhi9KOBJz4hwLhfee9AgY/85yLfNIYM8/Chp70PQ8Oef/eayxNdGabzEsqCHuiMWyBdkuKmyZUk4jE4NY7O57EvhCC9/gPHUQz+2gFDbrx7WR7izWRKOC+/WnCBQ0/zVtdGSVPWw5CKDfFYvzHrkQvvzjDOBdy9r2G5cFZdSUNh8jO6mIWfiyReUAXKlpuFU+wVy8WJMGZdCGPRDoL32vlhclXe+DNaAUy3Wly52Ppe0s4J5jnZa0/Ee5PDtkDeov0TxcTF9iQSJph9IW3PweWyeHtPXOHioRd9EyVYlBBJaNbVLUjcv9EaqgPQe8uMxmHf00oHSU7WQt5m4+lNVouoMg3osDSFcG9RqvFFhWsGwCEoNx/Wfl6hqmcd3zPN+IhZ1s3ZCTlZCVR26OmbQJolhK25GDefC1KdzWj/NDKIfK3MIY4aZm7Vc/Lz8YJtvIu1cSOVXEOH8YSMip2fwZ31hPgZwunH6jIn60Kphc+3H6ofznu9CWRIE+/XohgRlSVPPvCiJF4+hfiUGfpkwesrJwCvqp8lUE3sXi5LhOwZCP23lt0zhFLQQ71LmFLinE3+CwdPiWpE6rlntAJcHfSFIO3X2KXA4kuG7FnPAKEd0BZznsCcnoJK9G07orRRp/8zvJPbJvfD1rw/SKNZtd96l+dL2WVgsnXC2NHYXazuhA8P5E6Z072zk2jkLe5YPZsnw7oSHOA1HWRoyx93BbtK8RLlE7kafcqrwGHbOQCn0AUpX19AaMMRd70nOLPy07WuQ9R8gDF6NZ12rp5Xfw1bxTgjZ96L0hjhr/DTFMA9LzdXHSM6OKwyHeQpCvf7s93j8MvugYxmPprh/Cp5lV4OJ+1k/2Xq3CukcaGvbXY1l4EbUSdVQizsRIexvBzH05E0+di9lnNR0E407huFo3oSYFHN/2wSXlo3SuxmBaZhtTZ+tXovXoHv6I6NQt3/1+E/6IaYvj5Cf9KUiwuOm4zXUXj1mU3jCoQB/nWTMj7PQUXioJ9LwTlLj0aOBvUwmOPI2JRYvl8Sxq4D6EALNLugceKBGn9DAyhK89Ssk9IzZqqnU13qwAa/D+l+hvi6mpV47FUNGNRxX2q0OX6eqZgwZq3oiiFaj8NAAH3/oqBqgCz4efwwWlCFYLOcsV4vem7eTnFN4EPODRlfHHSncgwQotlxMH8+pReha85x62y38C8OpXMkRbFRpgBqcg+yqP0rE8Iz7F2qof4xW52D1SnAiJOXUe+s9v03wjdemJdebmsSm8iYUqkUTHsskPngNa8y0j4CsNHAjWkjb7EtbNYvkeq9Zrne5l5BAR603MRBNC0Qht/euxu2gee5cIGon7DbOnxIY/ezQMDPk0k0E2TvppuVj2KBKQ2kad1km0spldaiRKpru/EhJp4Vi9cBKsRZPCPsU8jH1ibgSwY66PtJkScKm4WruZYX/saiqxuLFIrH4ZP5LdrLL9kJtQJQfbUOmPBXXrIuw1HgRWffDZ0OOSlkZ/nMchyjOMNPOl6xLdmPk+sgohunqLoKpfwGrtIux1RxdHk3U3YXtsY9GZAHO6wUXQcUMneg3LOd1DWQ8OxFp7cRGbDPPPBHg+OzSTPs74gFppiUGi+3RTRBoXU2jqQ5uUWoKVO+S+OPVLK8pSC7YWFugSyHdlg3gut7HzasGvSqPqroMtvMqcOJZz3HmPH26aGf83krZyTF2D4wpc+QeEwMEVPkhJeXMPom+5qy3YKUzlVBh81A5OuVu7mpn9w3+aIdCWAP97IL+ZovLkNhaxqQBaXbL1ZqmLnqw+Y5GaACaGCcxRv+0JM45FQlVJaSdPiy0j9GriXJZN/UHOahVgkRPOhg3BBlRBzfaQGGqJszMiDaZJyzTHHWqbUbdp85BejRlJCXq5UpPoMh2KLm38GpTl0TQLp4RT/ODIu1ejWm1hDP/oaoh9/nEQYqjhNQFUD9IpXQgVhjEIhU1Z8QhYIWDD6kYojlfFTqFqqT7b8eyNFBUpf1mfqTG2l7/DT24cTmdUcN/KSGnPBSpWTI+7VBE4geIhPkcikgIQCRLQg0zNbvwoJnToaAkWZOUhgIdmfRcUxCynq7G73QR9qK73T83HuhnIs3kQNvlzY0H+vkbaYm6xYE2VBBm9GB3bjNpRcw2f3uCsp3Yk9dhtFKDeW0z15Ga6egzYktxAioGUGNcQWlYHr2Pv576uOgNo86WtXoc1aVPeEITwnCDDBPSEzk1Hguh+/PgGE9Fv6yOtsd9GL0HtbL0vg6zrDSU0439/MBXqwZbXzfKTzjObWCVRrVj7OojyXN3tmqhBE0lfOKtn7LUOE8704VDMAeRIE4L9l88sLeLI6YWGk04XnK7Ocst9bgLL0rEvg8y1EdP/WFNkrrzKu7D7v5itCHYFpkxQnXYlfguhqDWVEqLVMNWsVwNiM5qh3FMeUPRHH47dB1yYF5PEdpDuCyT3F5yUlkCFRDr+49apHFnUMRW3xUUsW9DrvfjYc275/kB0f0ex/rXThJUoT7WFwbr82JOeOAsU8kwyShkqjBgUKq2HoMmFU6RYcYARxFe8LvpepYexe6xyABW9lbOuwOC3SOwx5iAqPxKVA/HrZeg8/YYrjyStSuw49JSnTGG4o01YnJ7XyRsqhe5AXpwXWtu1DGurhyzF+EkpEGyuOBc1m4Ik3NheX/kDTi7TchS+0lfuMKdcAnSIKQIfsRmCA9ImCE4kQ2BXZ7wAN9XLmCg8BWm8kYIYe24fY7ywyrM2uT3pgnhHQiCJuw7V+r7a7z76HVMPeiO74SWoj8QfQR63SuR2w74s2QcwyD8E7ntb+B6Pxu59Lm4WE1sDenSaYEcx7wpdLwWAX0jD5T8hKajCdnOBpybVLC3GiK/DHsOPJLt+uncj999DXX2GXKWHki8NmLKNFjf/uzdkltQkVEG3XUCZFXjm4kL7z6MWJPRMkMvmgIeQiljdVN4gbLpUclNxYpMGcmUsCscjttrbYAhyeId0wwscopgWiJAq+pFMniLIwUJZwr6RXXbTXvMd8+t6KN0tlKfQoRWrBwZVQmBDLbdZfRw4U1RIfzNYRjRJvG8Gj4qSoYYHoyxOzEpLIJIXIXOJYSGR3JlHb48hXAB7FgpJ41njexHH0fjpCs4mycHbSOalRSc/5q30uUobCDrZsM76ZN5avqbjO4yFe93D8llKmecp/5MK+T/Bbhd6LOsLTuqZnMqYQ5yhIarGRYi/kp4CX04suLhaGCdubdM7YsegZKpRBtye2c2v3qSywuebqhimHvrlBDfibFYOWuaJ+yaacMLdOhJTD+c/PXxv95rEeqXb/JDgbhup5pwY5q5G42YvqW5K4m5zsJ65i/16k6FMCGtGzCAE3s6DEkN3g/qJf8V3go4ZtqFmOFUImf+GvW9fVNfmHwb7WIRb8Yu4JnebghAlTXn1TfbgFVOPWcUrsrpTXkfyX6DKefJPI+zQboyZ61i5498EypmHD5UakM5CAVKNx7fMdnC4tk1r6puhZdQivBVS+Ohhv4IoVRalLZMmqtHkJ6G0OaH0lgg796CaHIXugvstgKncvC5eic6wpG7IJdLQt9N7Aqoq0dkGmZmNXgIpF0TczF9MtSux8+9Dt/2fXrf9aI9KDJ9QasZ2yl98TL5dh4ac1K4S3iooS8c5Hkg0v44/1xagvnRGLQ9l3AHfALanTQcFvkVbGl2fwje25Wvamp0cLzYJGPQx0mqjuOg9YhiMmrUuC8cdCXAK3B8LHfv19i1Y+Bh501DuvzZFKifeRC9X8MRfg1ozpsW69DQLkS69D8cDuFrhEnHRmEh7rsDmobWnKXIcDbt2NshPVWQe1apH5c08spcIEWG5Co/SaEX9arp9ynX2/FDeWlW1XhK9VapLBDNpb7/qp9BGuTWx4u5AjRfSXRVyGltlZrrJ3awyM1kONPRKo09lcM0JRsfuQpEFFUQLBk80Jg1VYNo8BlPo2YFMoBEltZxJzbRRCJNPc5PWCyNHoEgry2e0foii/pmHimkihl3s157v2M7D+dt4hPAz1dwS56wgAtvFLq7mXs4giEOWR2vRqfB7NaeyDbN+ZiJ154YZLlAP2v1xFJS64T0XZ2zjmdZaUmzXKBZ9m9oG45fhRqk9+2UwlroUIfH//SqVNfJ5ffFftOr8rfcKWUMuxCY/OERphRQ3uZgyrxZSeM4VW0OpqqbHRnsCOpW5hDO/AAp75jyBGdu7QfYec06Wx0VUVx98whnY8VTxhGNLljxJNrXN88DGnjHztGTnXmPqtdklu6MIYgkeiFo7QzZpUGvqwD87p8ikkhkBQ0+hVunMyRdrkYgoNhaDkIabvZ1IOhwW9XFOv8RCJisCsNbaVwEJg1OjFf+bM3dAkwv3mrN7WDJgUi3egHNfW5HIH4tVoSnl4MMohuNfHeRtW3GTtNE1jLVdfglbMF5XAP5lLVsHsVaruOMtDs2yMegXtbS+yIaVFVWzvkitwUtt7ke5CulZNCrQ3ibqQ2+3YZaqg1U8hqaUY20Xiz2lUeRSah4BsQXPGfN+8SN2D404c3e0BQNni+p4yVPdUIQgClRewJCqAIeBbQbMvhWrdI+TD9V1bSP548asX3bB9Ud4e0afTi2gKtMX9uNNHHltvgjF0iLd2OBIDoJBWjFGUqrKP+NzYIKvOrl+nBm9ZrWpEplrEJwkXe+18o7NIHHlA5rXuXH2Wbsoep3M9Ad+jyYOhGoZfoO9flD5abXZpleoJiPl50ZdS9n2zJ0B50wa1LjnA7OKyimr7oGJmwmG0WcmhOlf8EQ8SaHd7LlXjQwHKvHaaMZiznsEvWRafeCnD6C6x4R30yf0P5qaNAMVeHmfTlzxExPPd94QNH5I9bpYzga4zgrfaeHXb0r664MVjtIwy+m7mlF7NuOYzO3q/kw1Ni2o4IJ2IouwWbZGp4xScVgVR/4VSuV5k+D25nnyXm5TLbXw/4iFR19Jk+5DEcbrw/IDef5vkzePRuunCLPEqXSFA4AqgTUZ0zkxo45ctaZYKtFtj5PHQJSktqxwiEQV5Iq1lg+qDGe30bkeJeG0/VYc0hvcgdcYAx3f9ViREIx6/z81LcaT0/nmaEux/p2vkJl2uWq0FGDHX3avxl9tvd0zJFQTplUh5qc16SV17LNGAs1XKqWlaXI1o5E4NznRmluBP4M74Dsj9rgc60czeWh+ccxyalDXEzwxPUs7CV/Adnr67i8imY6ovykJXdHD/8zNNUNcBXPQsEObhnE7HM85jQHf8tFEO1P3orOzq68OY7adjxuHL6wm6bQxiDG2fsMmKf9j0hLObCeDexe7uusgBDIUupo7KqO1McoMKU9HMJbrbCZgd3yjkFTKhV/5EXK1fpYF3zOshnY6FZ8C4TxYqaK4Z3eJXkzRxucaT/h3ZMBY0B55foqNKPXoHyumt18CelUwWtAaWhJyeIHFAR4P2+CVFY3n3IUnG15FFRHn3OTiv8G44xZCMHWHr54wGqui25fc13kobLhsQ9e4QugI/905uxmnq/6qUe1LakaGsrrJJ6aaNePgKTbAMTw+pxdspYR8k0g4/ojnkASpKoPd9yRuxxFaRjVPS+vBjEU5tlhAJdvAhn23ayyBILlc/UJD1Bmmzw1GUPNXgYAk0MMcxt0J2X6Ukkp6zIN7DUNE2KtqllYipXE2yuil8mC6glSg0f0Oqrkewg8ZHxu0tZylGMSFAaDDWOjL1MpScyNUndiQi9BqhucC7btpVQZeFKH4eoz7fIaFqSmPnZggf7LKnXsboLhyMBKDoxUVykWX6UwF3SYZ2tNdk40vsD6xPRyuIB7kg7sGK7KB+/Y8qiOPxoff3xWOhbzGzvmJ3ZMe83ghNzDS6syoEN3zK242wH/v+/4oeMPH7RSB9Y/Wnjo+un6QzJJYnz8DuICOPiN9VcwyEXVDjAdGKmMPwqvEL0tvn+ufLx+VBOll2e5EJ99FcIlWDsKLOFW14Nw4Ej8tx1ze8GO5R6Ycbo5AFvhQBaDcFMIqCvwKbvu/kPlnGPeN7b5i/6+PgZUjzS6nGC/PpF/Odv5DaR9TwQu60b5uOL5qZRtwu2picPShIeTN1YfOGsCA6uPOqI1jGAlhuNIBm5xZTgdDeVFN2l3MYYQ+S1dazW4WOqvmKgzv/KXdmjM/fCEs5lIviWmPwCwAl3n6btjqVhCzeRC4wquGOyjSVF2ezyK1znQFUNAHkt4rvPIAmzvP8AQ8jIG/dnRUvOoDD/ytvUu4622EzdzLGtRtzZexApwzzfCQVWp3oRONqhDIraZdVijtdSXCT6WJvMmgwSmgQFPw2dIegtF5gihjTb2SnjKz3dA7tsUKKVm7B+UAFPP06al0XDkh+C9t428rrk/TWJfIcb5DJPmX2cCMEs4Fj2xhf5Doz6A8BMXdyfuzfk8MXcOPzvhQc8Uw3DrazudoP+yXgLnXiFBxiblv9VcrMsbvvUu4kHHLh/AdfflhxK6yPXjXYQWUhKT5TbjFSce2LfmRtaz/TXAW/FWsBJGzp0RE+FzZLrwEqlcqGEbvCV6y/3I3C7E6FsD5Y1v4YZVZ/ARvN5Yij//0GJp4xfOeA/egf2Fg9QDvLGYV+wRpNmvbvYDHqPkFpDNS9BqGqhNV4leOiDA1Vhn8ZNDdg3iILW03qDvD5yF7fPPbUBdn2KHuBfBLJ5xPK/krDlN2mvooPbyQHTbJj8wDe6I3aMyLZ0gtdQR/mLY2wks+oRlEruYt7hNP0zDlaTog68VT0GaTn2kmfWQJp36RINY/tEyvGVKMTHkH3EQ1Wm8AA3yDjU0eKGbEpVCR2MQcDOAs0l/ywE5xTasRnNBymYR8plLa5X/QJ6Pm4FtxDzKw8aiHpMqXn1zP++gse2ozXnf0v1Ui6dG04dFicXrGl6RV4ikAU1zP7BStd4Ev0nD7w25Ii5GEeTwTjSjhnL/1u/eeuPoALsLOWG+vnTLy+smhyeTqy6LYgVpAnF+6nFB084Ukjeo3U+j6Bt2SZhMK6XrAoTpPGTuMpJbGcf46C/rOLpa/S/0pX/3woSLsQ9tghqygH4wVLeUxKrQ27aBBlNb0YyZ6vXwDjhtggmeqWrGeExt79QUWQdtuG0blcDlmmlUVwdZrhL341Lag66/W1fV1GisnJemK0ZQfFuzC4FlkOP2rfFF1YZdjO3qjMXj4lfiKO/XduCjLN5i1Dd8+U0d9+5ZCF05Zsvqi618n9OQqtQP9wzjgfvxInHYREm+zGOigYNXFnyFi13EjZMBydnMs/VJI0w4p6SmwP3PXxKPRU6pOaNmZmFkRkNBKPJgTUFaZFyNxAY0zCySLPkcUFNA1riamQ0FhZGuNQV8p0XubSxIIZ4WeZDPGQ1kB5nInC7E3GchwHXhHAMjcCpmLUsR1F/8ePSQF9K+QTZ542qEMepy7d5FhfxrUtP8pvVsi+r6v+M5zvdRfrzyJIu/9UhlbvEICsMJluLCiIGN+80TfYszGT88fToluUZ1DKngPt4ddSxWLpqobH7zonSaCVyF9F11fnkKYxcegeZST0YRYREeJ2PDq6/AJB/GMqeoPiAFrY0+IY5vuPGQmvzKJqmOogyPugjkmGn5nfq4PK9+d7OAEnwZQo+bwAMvrBam+DqX87ND6PFsDU4jLRA9mDx99BIjI/d0WRgdTYq62KIRaaWPTQseM11xSNsNW3YYaFTpAX10WxUpbnHUtyJZh9UW1+EiDL5UQSKf3Og5XSmRhZCjnhshjGd7NZxC5uD4uVXlWwr2euoUrQq+Rsi5yvsNekPpvBo1Kw/P2Tok6ukIr5U9Tr8tjjRUX5m8ww+Yd/y8hG/xg5/RqlaJQJ6q8NQw90TMfoOATyx65VNoqSkjXFTuyFX6dmAusEVRe7kM3L47Ihay3rRvXCOCmi+HlX6XWk8jcnZPpmw/U+6j5ijo4d0RUSlfhVzuctxptp8CQm89O15r+3nUevohP94gqS5LvtNy5LQJxC8Q4snr1l99+vTlmNnsAnSfe3JF71F8i/XXHpzps4peCg9KC15fcudjOi+mjdwFmYrzW+DSxg67d4U0xuo360vR+tRwWRwPNqtmp2GGhqgb+Nk6nM30J+qkn0/RLj/OVX3627GGdtLJA4g2X3wrxgMv9yKuuA5J2jd9lH/j5qtZxOzO5RL9aZMaJcKB8+qCSdeT0Eqx0n7gf9VA2YVmdYbqom8tPrI+qj8uk+pA1UnbmnkqQZ9rax6lV24Dhmrud+dUqf4I4tXMeTGILn0WQn+gT3/jLRVwa4rQ2eRXjf6CVKr7lUPb/FFweng7TKEYWE8bwOGFbVcnIeFAhItuuBTLPn10J/F0m42/FRUN59TOLCgpfDorY2XGMzOfeGzGzBl/+9tjr7+YlfVW5jMznn7sL0/MeHLG48+8mpXdzvSJgEM8c7p5xcv/L2+6cHTcmy7IuHgKxgWkuSCR5oq4N2JeinXI/K33t13gnk3WB5QT7yn/P7yxnPn/XxBOVug3he6Z/wc6K4ayAAAAeJxjYGBgZACCS9IZNmD65+4+GA0ARvgHuwAAAHicY2BhYmCcwMDKwMDow5jGwMDgDqW/MkgytDAwMDGwcjLAgQCCyRCQ5prC0PCR8Zsy44H/Bxj0GKcyqAKFGeEKFICQEQAJOQuTAAB4nN3OPQ7CMAwF4OcWaJMmaSRUJFCHqEjcjRtxkF4MEzywtOZ3hZknWfaTvsEASjynB+GeURs9+gIn3QOSXsWZuOSKDW858SHHvM5dPl43YiRKL/tpAtSAl2qimuFjOsHbtAhFoAB/89lfnHW1q5qxMTbZnW2tef3wJbTCb/CPMwM4ACwLAAAAeJxjYGRgYADi0OesrfH8Nl8ZuJkYQODSz919cFr0/23GV4xTgVwOBrA0AFr7DRcAeJxjYGRgYJz6/zaDHhMDCDC+YmBkQAVMAF+2A5AAAAB4nGNiYGBgYmDQAkN9BgcwDSJ9GBQYlMBsiJgolNZi0AbiLLg6ECnF4AhWB+H3AlVAeA4AdyMJHQAAUAAALQAAeJyNkD1qw0AQRt/KkiHGmKRzE9jSxEistjDYuFadyr0xQgiEFiSfI0dJm3PkAj5LRtIE3Bi8MMybH775WGDFN4b/FykblrwrRyTslGds+FKOZedXOeHVoDxnabayaeIXVZ3YsBaaOGLBh/KMT47Ksez8KCdYbspz1uZtkOoJXKg505BKBCqJXgbhUp+btAlVkOpuoJ1CqpbrmDuZlaLuyXCSDxKPhKepZy9dP4Yjl/+gCO21CF1VWp85e7D3BqT0+9Sn3uW7pz2fxFMn7Xp0auXOcCkb8+CSU9n1dWitc3nmnLPPKv8Br9RH5wB4nGNgZgCD/wcYJIEUIwMaAAArwwHdAAA=") format("woff"),
- url("social-logos.ttf?51b607ee5b5cb2a0e4517176475a424c") format("truetype");
- font-weight:normal;
- font-style:normal;
-}
-
-.social-logo {
- font-family:"social-logos";
- display:inline-block;
- vertical-align:middle;
- line-height:1;
- font-weight:normal;
- font-style:normal;
- speak:none;
- text-decoration:inherit;
- text-transform:none;
- text-rendering:auto;
- -webkit-font-smoothing:antialiased;
- -moz-osx-font-smoothing:grayscale;
-}
-
-
-/* Icons */
-
-
-.social-logo__amazon:before {
- content:"\f600";
-}
-
-
-.social-logo__behance:before {
- content:"\f101";
-}
-
-
-.social-logo__blogger-alt:before {
- content:"\f601";
-}
-
-
-.social-logo__blogger:before {
- content:"\f602";
-}
-
-
-.social-logo__codepen:before {
- content:"\f216";
-}
-
-
-.social-logo__dribbble:before {
- content:"\f201";
-}
-
-
-.social-logo__dropbox:before {
- content:"\f225";
-}
-
-
-.social-logo__eventbrite:before {
- content:"\f603";
-}
-
-
-.social-logo__facebook:before {
- content:"\f203";
-}
-
-
-.social-logo__feed:before {
- content:"\f413";
-}
-
-
-.social-logo__flickr:before {
- content:"\f211";
-}
-
-
-.social-logo__foursquare:before {
- content:"\f226";
-}
-
-
-.social-logo__ghost:before {
- content:"\f61c";
-}
-
-
-.social-logo__github:before {
- content:"\f200";
-}
-
-
-.social-logo__google-plus-alt:before {
- content:"\f218";
-}
-
-
-.social-logo__google-plus:before {
- content:"\f206";
-}
-
-
-.social-logo__instagram:before {
- content:"\f215";
-}
-
-
-.social-logo__linkedin:before {
- content:"\f207";
-}
-
-
-.social-logo__mail:before {
- content:"\f410";
-}
-
-
-.social-logo__medium:before {
- content:"\f623";
-}
-
-
-.social-logo__path-alt:before {
- content:"\f604";
-}
-
-
-.social-logo__path:before {
- content:"\f219";
-}
-
-
-.social-logo__pinterest-alt:before {
- content:"\f210";
-}
-
-
-.social-logo__pinterest:before {
- content:"\f209";
-}
-
-
-.social-logo__pocket:before {
- content:"\f224";
-}
-
-
-.social-logo__polldaddy:before {
- content:"\f217";
-}
-
-
-.social-logo__print:before {
- content:"\f469";
-}
-
-
-.social-logo__reddit:before {
- content:"\f222";
-}
-
-
-.social-logo__share:before {
- content:"\f415";
-}
-
-
-.social-logo__skype:before {
- content:"\f220";
-}
-
-
-.social-logo__spotify:before {
- content:"\f515";
-}
-
-
-.social-logo__squarespace:before {
- content:"\f605";
-}
-
-
-.social-logo__stumbleupon:before {
- content:"\f223";
-}
-
-
-.social-logo__telegram:before {
- content:"\f606";
-}
-
-
-.social-logo__tumblr-alt:before {
- content:"\f607";
-}
-
-
-.social-logo__tumblr:before {
- content:"\f214";
-}
-
-
-.social-logo__twitch:before {
- content:"\f516";
-}
-
-
-.social-logo__twitter-alt:before {
- content:"\f202";
-}
-
-
-.social-logo__twitter:before {
- content:"\f610";
-}
-
-
-.social-logo__vimeo:before {
- content:"\f212";
-}
-
-
-.social-logo__whatsapp:before {
- content:"\f608";
-}
-
-
-.social-logo__wordpress:before {
- content:"\f205";
-}
-
-
-.social-logo__xanga:before {
- content:"\f609";
-}
-
-
-.social-logo__youtube:before {
- content:"\f213";
-}
-
- </style>
- </head>
- <body>
- <h1>social-logos</h1>
-
- <div class="icons" id="icons">
-
- <div class="icons__item" data-name="amazon"><i class="social-logo social-logo__amazon"></i> social-logo__amazon</div>
-
- <div class="icons__item" data-name="behance"><i class="social-logo social-logo__behance"></i> social-logo__behance</div>
-
- <div class="icons__item" data-name="blogger-alt"><i class="social-logo social-logo__blogger-alt"></i> social-logo__blogger-alt</div>
-
- <div class="icons__item" data-name="blogger"><i class="social-logo social-logo__blogger"></i> social-logo__blogger</div>
-
- <div class="icons__item" data-name="codepen"><i class="social-logo social-logo__codepen"></i> social-logo__codepen</div>
-
- <div class="icons__item" data-name="dribbble"><i class="social-logo social-logo__dribbble"></i> social-logo__dribbble</div>
-
- <div class="icons__item" data-name="dropbox"><i class="social-logo social-logo__dropbox"></i> social-logo__dropbox</div>
-
- <div class="icons__item" data-name="eventbrite"><i class="social-logo social-logo__eventbrite"></i> social-logo__eventbrite</div>
-
- <div class="icons__item" data-name="facebook"><i class="social-logo social-logo__facebook"></i> social-logo__facebook</div>
-
- <div class="icons__item" data-name="feed"><i class="social-logo social-logo__feed"></i> social-logo__feed</div>
-
- <div class="icons__item" data-name="flickr"><i class="social-logo social-logo__flickr"></i> social-logo__flickr</div>
-
- <div class="icons__item" data-name="foursquare"><i class="social-logo social-logo__foursquare"></i> social-logo__foursquare</div>
-
- <div class="icons__item" data-name="ghost"><i class="social-logo social-logo__ghost"></i> social-logo__ghost</div>
-
- <div class="icons__item" data-name="github"><i class="social-logo social-logo__github"></i> social-logo__github</div>
-
- <div class="icons__item" data-name="google-plus-alt"><i class="social-logo social-logo__google-plus-alt"></i> social-logo__google-plus-alt</div>
-
- <div class="icons__item" data-name="google-plus"><i class="social-logo social-logo__google-plus"></i> social-logo__google-plus</div>
-
- <div class="icons__item" data-name="instagram"><i class="social-logo social-logo__instagram"></i> social-logo__instagram</div>
-
- <div class="icons__item" data-name="linkedin"><i class="social-logo social-logo__linkedin"></i> social-logo__linkedin</div>
-
- <div class="icons__item" data-name="mail"><i class="social-logo social-logo__mail"></i> social-logo__mail</div>
-
- <div class="icons__item" data-name="medium"><i class="social-logo social-logo__medium"></i> social-logo__medium</div>
-
- <div class="icons__item" data-name="path-alt"><i class="social-logo social-logo__path-alt"></i> social-logo__path-alt</div>
-
- <div class="icons__item" data-name="path"><i class="social-logo social-logo__path"></i> social-logo__path</div>
-
- <div class="icons__item" data-name="pinterest-alt"><i class="social-logo social-logo__pinterest-alt"></i> social-logo__pinterest-alt</div>
-
- <div class="icons__item" data-name="pinterest"><i class="social-logo social-logo__pinterest"></i> social-logo__pinterest</div>
-
- <div class="icons__item" data-name="pocket"><i class="social-logo social-logo__pocket"></i> social-logo__pocket</div>
-
- <div class="icons__item" data-name="polldaddy"><i class="social-logo social-logo__polldaddy"></i> social-logo__polldaddy</div>
-
- <div class="icons__item" data-name="print"><i class="social-logo social-logo__print"></i> social-logo__print</div>
-
- <div class="icons__item" data-name="reddit"><i class="social-logo social-logo__reddit"></i> social-logo__reddit</div>
-
- <div class="icons__item" data-name="share"><i class="social-logo social-logo__share"></i> social-logo__share</div>
-
- <div class="icons__item" data-name="skype"><i class="social-logo social-logo__skype"></i> social-logo__skype</div>
-
- <div class="icons__item" data-name="spotify"><i class="social-logo social-logo__spotify"></i> social-logo__spotify</div>
-
- <div class="icons__item" data-name="squarespace"><i class="social-logo social-logo__squarespace"></i> social-logo__squarespace</div>
-
- <div class="icons__item" data-name="stumbleupon"><i class="social-logo social-logo__stumbleupon"></i> social-logo__stumbleupon</div>
-
- <div class="icons__item" data-name="telegram"><i class="social-logo social-logo__telegram"></i> social-logo__telegram</div>
-
- <div class="icons__item" data-name="tumblr-alt"><i class="social-logo social-logo__tumblr-alt"></i> social-logo__tumblr-alt</div>
-
- <div class="icons__item" data-name="tumblr"><i class="social-logo social-logo__tumblr"></i> social-logo__tumblr</div>
-
- <div class="icons__item" data-name="twitch"><i class="social-logo social-logo__twitch"></i> social-logo__twitch</div>
-
- <div class="icons__item" data-name="twitter-alt"><i class="social-logo social-logo__twitter-alt"></i> social-logo__twitter-alt</div>
-
- <div class="icons__item" data-name="twitter"><i class="social-logo social-logo__twitter"></i> social-logo__twitter</div>
-
- <div class="icons__item" data-name="vimeo"><i class="social-logo social-logo__vimeo"></i> social-logo__vimeo</div>
-
- <div class="icons__item" data-name="whatsapp"><i class="social-logo social-logo__whatsapp"></i> social-logo__whatsapp</div>
-
- <div class="icons__item" data-name="wordpress"><i class="social-logo social-logo__wordpress"></i> social-logo__wordpress</div>
-
- <div class="icons__item" data-name="xanga"><i class="social-logo social-logo__xanga"></i> social-logo__xanga</div>
-
- <div class="icons__item" data-name="youtube"><i class="social-logo social-logo__youtube"></i> social-logo__youtube</div>
-
- </div>
-
-
-
- <h1>Usage</h1>
- <pre><code>&lt;i class=&quot;social-logo social-logo__<span id="name">name</span>&quot;&gt;&lt;/i&gt;</code></pre>
-
-
- <footer>Generated by <a href="https://github.com/sapegin/grunt-webfont">grunt-webfont</a>.</footer>
-
- <script>
- (function() {
- document.getElementById('icons').onclick = function(e) {
- e = e || window.event;
- var name = e.target.getAttribute('data-name') || e.target.parentNode.getAttribute('data-name');
- document.getElementById('name').innerHTML = name;
-
- }
- })();
- </script>
- </body>
-</html>
diff --git a/plugins/jetpack/_inc/social-logos/social-logos.min.css b/plugins/jetpack/_inc/social-logos/social-logos.min.css
deleted file mode 100644
index f5223f30..00000000
--- a/plugins/jetpack/_inc/social-logos/social-logos.min.css
+++ /dev/null
@@ -1 +0,0 @@
-@font-face{font-family:social-logos;src:url(social-logos.eot?51b607ee5b5cb2a0e4517176475a424c);font-weight:400;font-style:normal}@font-face{font-family:social-logos;src:url(social-logos.eot?51b607ee5b5cb2a0e4517176475a424c);src:url(social-logos.eot?#iefix) format("embedded-opentype"),url("data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAEZAAAoAAAAAfBAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAQsUAAHZfa1y5A0ZGVE0AAEO8AAAAGQAAABx4Dt9ZT1MvMgAAQ9gAAABKAAAAYEC7Yj5jbWFwAABEJAAAAIUAAAG6pEWcoGhlYWQAAESsAAAALwAAADYHEbeJaGhlYQAARNwAAAAdAAAAJAOvAd5obXR4AABE/AAAADgAAABeCDEE521heHAAAEU0AAAABgAAAAYALVAAbmFtZQAARTwAAADrAAAB5koHYmpwb3N0AABGKAAAABYAAAAg/8MAGnicrZ13mJXFFfDn3XbvVnb37i596SC9d8uLDQyKFXtD7F0RYzSGay9LDCpqjB1REaPR2CXCFbGB2ACR3otLWdje5zu/M++9QGK+fH98Dzyz804vZ86cOtczKSnG87zsKTdMvmrStX2vveGKG6YYL8l45qTaFqZ2rFc7Lqn2hOTaVinTs7zibW36ZyUXd3vVZqUUZ5jWp+fbkpJEJCv04mW102p7pbZLat2inTG57ZJuzmtn+rSb2jLf9KfJsGlhikx709X0NoPMSOObsWaCmWjON5PN1eYmc5uZZu43fzYzzTNmlnndvG0+NPPNF+Zbs8ysNpvMTlNmqk2Tl+Jlevlea6+j18Pr5w2Vf2O8k6Zef9XxAwcM5M+gAQPcn+BrkPsz2P0Z6v4Mc3+Guz8j9c9AV2+gqzfQ1Rvo6g0c4v646gNd9YGu+sAR7o9rZZBrZZCrPshVH+SqD3LVB2n1Ia6/Ia6HIa7pIcO0laHua6jraJib0TA3o2FuRsPcjIYNGOL+DHV/ggrD3Z8R7o+2Ocz1N2zgMfpn0OCDd/0QCDDGe8B70HvIe9gr8aZ7f/Ye8f7izfAe9R7zHvdmek94T3pPeX/1nvb+5j3jPes95z3vveC96L3kzfJe9mZ7r3iveq95c7zXvbneG97fvTe9t7x/eG9773j/NH2BhM5p96T3yXojZ11u18hThd1aprSe33Zru1uK7+w4otO5XWb1OXzIE0Orh/965AXH3nF8vxMyT2g48dyTcid0O3n/qS+fXnVG5TkF526/YPCkYya3vTx6xQ1Xzry2/Lpzb/joxqtvHlsyu2b6bG/27NoBs5NnF9VeUjO/8ZK02Q2vFNZMrx3QMD2UY83oVsaa7ta3dt3OmDV93ola0+1rSeu4WmLebAl63GystY9Jbo9r5bPoFAn6fChpy++Qcq23m3xres2V7JGLJbhgoWSPyJTsnx4i7QUpk5cpsSE3mshlF1vz6iRjveNv8gutvfeEmG2ue0Qypw2NpVmT+ZlfIuHtvvR8m6RmZkvlpEZih0la0m75TG+UIOV+CcLvSZDWVXLDz0ufaW34lJmYUKkEqV0lSF8guamtiTGOpL/42rx0kv27qIS518k4G1tJoezmmLW1qdJO5geyGLW5lHwxam1lWGLh3pJbtkFiKa9Gw5KzUlpLfZacjRILDaPrFozp+2g4ctmLklnH1woJkpN8nQmdDqHTrCHSaXOKZGWcLl01NNHMGOmqYYd0Hz5fuqofJ2lpsySt9nXmkkzsaSbeLHVr6C75FSlX9aHUSOprwhKdxQSPYMR/l5hXJLGKG/yScGToi1L5Qfl8oo5F/2K6ZB9xssx5WAtZL5NaHJNBpdRKATtHUlO+kkHZFsR+ItZNukjpJ7nNt0paMqvTBIAkz5MBNP3CAHZLWuMeYsMlrbGYkfQgFvGDkdTvl5nbuu2y9LayiazPYvdIwgUSbejC+OtOkpk15EtLNQ/Q8KNSq+pTxn+TAE3yCEmbMdbI+BfKoplxY6WPI5dFZfxZN7K0Ge2oxJ6H/ipt1B9BjIbq+0osWfbLVl8sE7Xl0wwjYVDN6xnZOAmaXmMjnpFCTX9nRDMAi28Z5n06IeZ8I7HD6OVcitxAA0Pp6oeYNiVzqGchXKszJdHeKc3UTzAlAjEfvCaLZzYygVoBJhN62bjyJkcaMQbIa9EiJiUf6uTLrEwDWZ/S9NdSPKdAGm18UtKy7yA2A5C9iyb+IBWzwoCsgJDJuDcajwms2+oOQNR1EqsAytKG+uHI6x3la7fUTxsv6ft3saktAe9SFmb/FDaq/GdmfJmkVrZiNmuIRZjsj9JnlWy/rd3HVp0pGTUZxCZJuZo28lk3hZ27mAU9Bhh8m9U6Q2pUKMCw0uXztKvF7Mf+kzjZ40i9HkgrYbCf+bIQKU/6rrpJu5wm7+JEnUg3gGT4TmK9TbD1dYdLuSwG2wCqcLERrNKtTOUpKZdTycEvvAtwyb8e+N4pqS3aSGPpG1n+8ZKWvgJsM1iayD1L0kJXSJEi3dyfQnJabPMoYKodrV9I7HTW+2Zi7xO7hDV6m5XfCjBNlFjVHazo/guYbCXoVYGxtjetv8w8R9dKH5NXCmiYtFHSSF2eCdahur8MxpOZ2fK5Ahr2jVYcWDMs6s6hMd/H3Nk03tnUecnEYws5gieRewP7ew4rO4RDexVpXfi8mlbuA49dww78SOx+zvAaVvxXGr2SdT6N9cr6ibXLmMa5ONZBkgy0hwlHugg4/X2qJJ1wT0xmcPXZMb0TBNu85qflWK9fL8m7orfxgkvipCFR6+UOlMSTjo0l18y03hMTQUsP95U6L94ZCwL57CAL9tInUvCIYkl4O1cGcwa4acuX0kzGXI5GAXPYxHgfY5SpfweVpYY5e9/LfLI5s3ar5Od9IRUXvQo8HgZUccX0vN6USBfV46Vkq7dY5LSgJUnd/QywM0qyCtaBBedHSzjGhdeAu/8IRj9Gaux6WJKtiSRJ6oZJUqO4TGqkT5Ygi0VOvZUd2c9QlvIJCKdfILG01lI4FUTyw2wW/jxp4Dt2O/9spnDqAsKWx/u6/tIBF2H2a6AEhStt7Bo/uB4K/w7MCvYy7c+NhRlQ3i4KfCophy2Q8lsvM8ElrICRD3JMYqPyOwNFhUHMWi5OcvWYag09xOawjyVoSw9524HwY1gjk8kVtPmVYBi2lEPctAyk9ELMDdfuLwKEDpfY7lqOwc6PZYDWvtWC+crVbfdUsAa3+e4AmdCcqMMgJm0ZO9JIpd3ZnJ0tAquyD1JyZxXfdZnkyVA4UUAjq57xM1NrKcEZHLV2IwGfHAlO3sqKXjiUAzd1WQBq5qK7fQW14hwZPtBZvExqzftRgg4fS3MzdknQYVI0DrwdBPN4Vwu+MZ2u9AFeahV2zLDm3T1S8qOOcgRszQZpfunJrM12CZZz3a/sKB1tPRfggWDJFKpLAE/GNRQUsRNkMOZP8jmS9UrvIW0N6svypXHWQDnN6eCgx4+UelP7c4uUsmHVb8py7SgDRYOxt3/O/bpiHcuzqo+0lCO0lt3UDgBnk5NPkFjauxJ03SyfY4Gvy7+Wcl2YsbmEoKNkmCsIuvvxGGmtZ0pTn4IgMp6Q2NdcwEngvH2pjGwge9Z3J/PfvF2iHUHUe31potc8KWmEIDT9lrEH3hoT3HfeGnqA0tK0UBUguFpiZ5/IPbpKYudBPLU9kiMyJOpuHkcDKbmTItegrQLOmp7kpJ+aiB1PbBYAM1pis+Rg200vSGxpnQRv9peMhs3uEpOxr0iWTl7oFhX0lclCjHhE2u4OOdnPyucgCNBWGZweSII6sGLHx2U0P22SesVyau1iCLm5MUn7FYrmPWghcyp34yrWry1Q9wDEVclKwXUmG7IteQIbBAx4X3Cw/8ni9BsPHuvFrbL3ORlAR4EMu+UWaakRirtBELndyqzXtJceFwghaHcIoNrNnaXwMFkxux7M3beAU1gD8HwKTfHh51JlYR4IurWgH7vJSKEWgrDsL/cEu2yXQ5bVQV17YyX2+WcmIFU/v8gEN1vzR1I4mZ6bAaLkLsAzhE0ySLWRCya8AZxR7jvi1zZ8RkyQqzlGWjFtp3HGpkvnPbjDk5WM7u+H5Z5YLaSrN+YFQHsfsFMH8inrSBsCtXbvePDeFvBTXoxzLtWzt0iQ110+0x6QhgpulCJlhVy57PKe4xj2e6Ce7Ci0qHzu4xLJk0Nlf4VeyBA8ZbcvA498P4dD88v3UQ00QSnWTuzkIsZzGhD7J2JPcxd/6McCInzB3ZLTWQZklwvBbIZASdfeJr1V5Eus4Q3OiGKssirInk1wIi3gqbZxvbT8YyyY8X6YLQMtUX4viyOLaCu53NOm02HzVhPidD/JEsqlatdyRR0mM7I19dEABzcpGwMz0bw3pgwNOPJC0EI9jZpHAIxX2GRQSyY7uI5hdDwL/PFPabE7K22PlyY2Z0mwE85hNXdCuSfBz5YW5dywOGkmgJ06MJb5HtaoOzTrDuiyfilgsHukyYHXAdsvGcKz2YL7LoacmPIOwJ78Lf2VAk9fcnSXA2OATR54K+tkCXLkLjAtrgVxCg1p8h6JhnOk5kw5EmYkV92Y4VJ+WDf5HOX5+UusWQrPN3qtZP0e6nSRYF4z+lUTqbTe3B9NbUGhbZ57IfRc5cmg0btiQSCfHSRrcjQkceFOTfqfgnyT+XasWE4SVyQd26Vyc5mR1SCILNDc+zAjA5+W72IoirZgrj5HGalT2F9JzhGclmukUip3gx2vN+G3PcHQp5FQH02N1AboXA96JQe9bJjpIMc9ialONqGAlfsyXYLvCqA+7DVCXJtJa/ySVB2kG7ML5LMDc544S2pqppuLzkrmmrj3CgWxe21nAJnfAY/QZ8TMGUe63DiPrwXHjJVZHtZWgiJolsJH/cjz1kvmhP9jNGh01H4Z3oV/9FMD+LAZYBluedsRSLmHLR8Q1atdZiS8ji2FY2rsAgqdyzHZ05Mjs+cXqZgEYt37ncRSc8DXt04yNScWypK2BVsrp91mMsdZSBHTchUI7zwh8GzqKSbV2hhXTQeh8u0yQflmzNPw4OP3CM/p5pH+j2ghh/OxmLKiQtSx9tXHSbCjBVfbbgjAWJHkfPK2NCBkWmpkvqzmw6B2mPKMqzhPw31oogzIKokHfFsLJqk3lL3CsN8bS2MBc7urPFocWS9T7Cotb4TZSLo+WtLBFdeGtQm7D3KfZq2dFKOL9MWxoHWVH9CwUH6CGu1bwu7Znzl2d8OhfNJDan6/yLjhsrluuJNjB4YLM/3vw4UFllaBrY1wecFwOfKNl7E3itUhG20DCF0phc5wG0NkO2XzJeg8Wfo+JgnAH7iLFe8L37p7JyXh1zYuYmmBAaUNglhbXwUOie0vB0HLzkh07yR6VsBMbxtzWSb9E5DrQJlUSJg3WwHDFwa4yv7KaHeOZWm6gz1OO5vLL6dOSm1FPhLmFG0EZVrIjvVzaP1jWK1Vc6X+Qg7rl5Re/zmX9yiBTvP6ZIEnk8H02p4DlnpVGircwuwit4DbQi2kUftnX1G2xMCCaW2Qbpz1btQ2fzcrKrRi/Mj9SRC0kJEy7a5TJeh4uBTuFiFNCBVy40TnxGbuF/j8wT/K5+khzl2KSfBOnTKEvmwRs83Lj4WR+oG7ZNVJ0lp3Lun+0rML9DOe1kFOypmMOQJZXXMzWFZ4F5C8DHfH78H83eX82jqIk9R1Mp0qYcOUMbRlq2LCDNktl8rK7YRz2gmFv3lTENAyadJmuycFn5pORSr34i4rEv7FJMGAZD8KBPygRGch0r+OgNEpG2KhACLr/0LWPumvfjsQUIs0zaRKzndv+o7QsWv3gAe7qYhlvhxZc/zlgn/stolRAv8awQwwihJ9w0UJ3tAEotE07pERi6XhD8dI0DoTSAemS4RRtks6A9Pr9EYZsU2yvkJYMOQiCY6AEu7COSDDHDWfWJUUH7HAjzwlOHL2sb5eMx/+Xu4Fu49VqngiGgTy2UGzQi7LZF0dZJkWp/rF1hv3ILeJxF2WC+Szg2aFXJaroFWlkWJrs18SKPhosSmMLOGOgHjVaY00jGHLfb7OsDCyUnL3CA1q90MF5YBZuZ0cY4jQyeSADfInmCAj52sKDxL42IPsZ89CPodr4GuabPL+HyQqkCXL/5WcA3NOO4QVhUdxJF72OTKQFF9K9c0XSskGMPROaMSdbWXG9hWYYV1fHfIwWUO7vRI8s9iEIi9HnWDP5FwusfwnjMNVpu0HPls/ci54ba5UWZ0FfMzhznxmWjQUP2znCaFm3kQ03WelxLr9TmIndzwglIBc6MEl1R2uY8xMiZ1qovM0538KKV55iX0XcLf/XEK75/sBnldeL3cjmByhOWIRkwJVoeKnZK6j3JclVojc8pwrETFAVkEgZn3FpnCY2isrPlCKFSFKKbyM+oOkufBi6accVqHsuSjj2PNPbnWYzK0v+Y6Wt9uFPBdOQGKlMUDoLYntBQcUVOjKdUPq376nZPUQItKMfF+yBiOFXQN70gVp7xIg9vMJnLaLpLGfBBPZH/a5Hv8eDbDe7jNAvd+DJk6RJrwFsYBcN0qMwupbkAoCY9t8ngR1R/t6nzgaEXpIclV0I7hMhfJS2HdY1DYgI/M2cqrP5bhQrUywjOleCWrpMJ5L/xjY2wHbpNMjEJCcz2X0OyFazUg6WII08uOHpMUP/ijBj0Jt20VIuBfM4eyUTgbH7HpDimcibK4TVGCyj9NbkCnZlcpTIhOtTmFEfSW2B+FiBdKfnYtBo8yBc2AiNTSBLLEQvrWRK6ewGayp0gcVPLhAP/9TItFBWKI02W8HeGaSsGRmPPqIT5+V4LWh0vzLN0jRz+n8fYbxxi2CU+yWJ7g9tyHez+kgqdVcfrkfQzjY/ful7LfvMJ6XJFYBiqvmolrXH3wK/fu90OG2iTPbeAdgizyy6VOJNSIwMLtMcL8lvU2sI1dDusSqRwE78C9hxFldHpZYKndZQYV8tkVgd+PzAXjX/BWwRxzR8hsp1g1MXPQcCAIRSjvEZi3hBiBY7N7PZWS7LowBbDshE/fB0K1D8l0L57MRigGO3G4bQnfPSKwUjNX24SiLPZAt6H6cBIMulNRx4FqfC/L7b6THPrBq85DFvM3p/VEOmf0Skcqiz1yPiH/S4YZ3jAYu7uPAcSshWlXprjGnmUBp4KQPMJ1NcqZsDXxdw5FxlOmA+liAnyk1ZNEAoNFcL7n1IKEk0OLaZlDbc0wDln5gHoxSj0kA+RlfSc++3LTmpJ+k+B+MzDBHyAOGsWJi1HuDP2AIufyIJVvzsLTrCYZD7TPRP+88/aPBvPOEqKHXUXOj8+Yl4rHz5pENeVA6N1qk8f+sFtWi/1nN78B1+hAc2RNg1ItLhYjx1sn8vR69kW8nQaGPlD2xpdAz7ZHV/CTTVqm1XXgLhxys9bOgS7vud6wCGPcjIdZM5gm+U0mZDEFnJonCwsBLh0Uq/EUxaCtAUyp2384+Ns+RtH0vA+cwTL/+Q4I9yE1VarkHJcVmSEwkv3a/cPi2+iPgxlaGoQerBLYFNo2rbvoeFT/K2WxzvSdpnWSyqvwww6ZHAw3ioL8wcMReLZ/jdHE6qWb3TzbBmEq5psoRn+mNuB2YoIbd/a+o4iJipLUkbSFkrMqht7WGp4qgKMwGc6OidErP5NNZihZjWIocJIY7ixjo76TSD1BimYJB7fLB1Nkdc1JJk1keDdLykNj/MAx8BSOxUyV+22mr5xdA4OB8bojREhx+rnQ24SYJRsH2jG/vO3GEGY3ehd0zvUfEAMx+vqCvLrcnLtnXx0aTrfdjnkBD4cmxQjBSAwKg9uDUClQuWYItbBlYIc+AXcHiBsarZg6xBokt4vpMgWl/9SbhYNgr+71JozESXAHbAKdbw13XbNly0CsiBlu2iCAl6NBWZBs3CLv5b75DTw3z4lu27g45BnbDy35I49LtsaTeakqKYZ1Semo1Sc9CLFiRBaIFjeyF7irkFkTa4nhtNIWmc2cQqWyruR5SW06+TEBaOgfqRYWso2HfU84Aj8IQerIKJr+vcaugrZtcWQXtUVbLd6OQFXS4VUdoOiPo6fwwNFnH86GmSdB5mc4PxUrkrkuCUp9yDqSarZfk36MimYKY7fOVwmNLQyfL2pmy34NwVkc9IX+fFHrMjIblfXNdLFmvJSFvOwvr8ZCQhc3fv4Xgbonw49aiBNyN2KB7CwCozRLEQhN8aX2HrD4qEhlTV+iFbJBEeIEkdlwEAkSOkg92UY4SMaRbAuQFxjyuGL0LusqFiGT7l8os1swDmRN7/0aYCIPAtAqttGqqVaUT6RtvI+08Gkf/Gkbu6XE7pKC8SurMEVMEv+6XqLA9DS9ysYAvdk/lXIND9qKGtG8ZgLuPgKBpDxPQh+16XEVZJ6xATnItIApqM33Yjsc/iDq2RbKlkc3gLakYedZ6j6PEWzedpVv/mEmL/A0ZAMgKCak3xVcFbomKvQXO5yNZW9JexrCEK0s/gzRpZshmqTNmbKwYrp4b0EMir4rNJBSr6VNgt9Y/II1ecD/sgIqm00BuqjkJ9xYqyEtfAd+BuYNmuSDcHSZu1h+ioci/AtH9FZMQ80hGUFvbqVkOIb/sAz9oXbNcIJ9ylpa9gwDr3zvuLrVMnxNiv91x5BdrWVF4FVmnlYi81yPbXC/MgfskMJ3yfJdhDoOd04A0F8inTOEwBLlaRktLvWJmxDY0V3dFQNDqZuAFrKRBq9vguOT6DUU+0S8Bh55Bpt3xgKxY8y9PI0bc8ecgywWSJfzdL7OZ7g6oPK2gVaWHYva+x7XCfApmRAPX9TPp9Xn4rq7o51zsQyPHbIVQFl7yVczcVnEIxoLJymIBXe3SxsQCLadBqGHLgDe043ZVLC5r0xqQKi7NtUI5aCG7nBhWAi5XY4hhzW2JGloXAxhXV9NcXT9eA7xtsF6x81174UO6g+A6qAqY0hVEs2DBDOaCRJo2802iO21aJ6xpGnvLj9dAU6faFvuWObRGYjCHJ8q5uiY+pZcTNea4RQ3HqwyLxqsMix2StpVYbjS+5iqz0lghYvrDMc24O0tFJ4peYGRqVPLPt23YwbocfrtE72yOpbq6uhlBzAVR1cYGIjKkcamOjdYhyWBJfDdYhiBtvqbFAiWp/TwWT/smUe4tEy+sMW1AG50fjWd848drLPfjRRYFKxV8PheLF3nZj5fTugdi37sBhePjeODQKsiYsShTkAoGA8JwlQ/EllPjwUTaA4kajyVWSsttTSxHWSw+V60BN6UXv707scCwobY+UaM0sVia5gatnfQ28QZHg4XlW7L+lKJqGAvOQXd5sORS01SaiTjIwYhCUEYsHtNydycg6E7jLjsdVdCeAmfb6CE15kfj5R6IOVrBWeSZgfT250Su1u2Y6K27H8xIL72gioLzcwkUomnd/XiV3sHCBOUWJc7Mc4lz9HLiDGpsWKI7PR7zE2k6aD1belb1hOp5OzExuTHReDkkiAf15gZ9WuLYKkLQ2Z11YE6IG+z5qmXQVSpL7ERpYv3LKPn57dLQnXWUTIZvR7BgkrntoQ9N8gxVRLkQKZmHfhRFp0nKi2l9id4dCrAGE011U9OZyoR8N/vgU4NL/HiR82Nu9sHnmOghsTExN/uggTHReI3TzCENjDWHdDnWHFJjWOyQli/x458XJMqdHwvg4ODKJwago1sbDOa6xGC0md6JtO6JKXWMHVJ3bAA5quMJ0q5L1L05APegnOaeGID7wWkPJsrdGSBWbq+wOz9BwdzEoDMTc9BmkMIqlWwWs41OGXlXI7SmEl9mRXCanTrX3WUrONGHo0a84Fyu/xlC29gXAd4FYNgVOQIhb7MPQ3uCqteMkE4mPuqjL5qLGIw8uxhh6wKOTK/9lNqPwGDdPxHb9MW6ZRN85U9pLiZDO+I81AjPfyRt+49A+90IRXUR2jafvnptjzkC3C7+GY5m7i3AbT5s8lRGaefD7/XGkmsM1HHvS30Xs8ufof8fIbguGo1Wy0yEQlVifigyPv8sZqU8ZA66/M4n0d5PyMiKhV82fZtjGkuNy03zMbk9KtU4WaTXmZJdViZYunw48enCmJoshOJbEV60vu0Qsy5Y2RdBAhro58NM5SIQ94vs5FTsaKciQ72IRdRAP8lwRbSwVOvgZKV2bU+kCYMQmChnNQDWcIcwHmq2bFdCJaTB8ddinpt6l5SrFbzhrFzh0e2mR6TZ7lix/Qh92ErYAbvkQkSASz8k/KlRCv36OpuG8HDt3/34rVCWuDT0hsHYRz+blafD+POg2FYTtw11t5/epAeuWP3k7ikVXtrufF7SylF2bgSG7bpPCT8EPY4Cxr5AxDVujOpSegLkmd/K0D1M5DKBTLXM+AUN/942EnyP9sCrloqrkOoWYR3yC4ZcLYWPt1uQHPTuLH3XXyXl+tWrES5t9UcOnvu4ZA9skA47Yw/YGbVmZ9iKztisDkTEE8GkdJCaz97FKR0rxKj93TFAdHMljYNpNwyQQj2Y8c8YA6Vhx/ozOqAQ4rIV06XKdtiqymek8CqWuh7V2x6glZnZXTf4zgjOaYDD3CJ7sbLLuYnVwhYrD1Fu3XUS6zKNNNjInhjdReCvMlGSdEIukfWqFOkka2FLOWI9GMEGVBWhB6DcNnATYquiQji1YbAWc5KN3FfNqJv2fSxF0hAf70PXoxqH6lHEsPms4lZpASfQgCgzG7O8pP3SfjZmS0nvxwL7ovQ+PtZ5nBq4yFTUElmwOPRhcpDD1mH+noH5WJ2qNtCnVyZJWgjqpQLeRJCzDLoClaABcDBXsPWIGLCFtdWIlBBi2+p3jbOmUomvk2KoYbCKVgC/gGRQmllj4KKUYsktV/NipO3VmLejFnIknOrslUKCNXZGqrDLJnlaLCisFlu1SFwzkGzpQZXNCDsjWmewmIzAI+tVqRdmacNAHQpcDOklA4Pn1AK2DvBQKwIKO6P0LCx6lIUMMaKqrsQ4UVUYtOph2I90rgk5Yjn2OU33E0PgVgNVXdlPilQgqa9dILFKJlyLveS+hJK+HPYsWQddjjw2GZl7BWClYp1ablcV/9SCubOQrTdhTtMCMzZIDVWdmWSEQzlqG4pZXvZRDB+0mY7hSmvh9E0+Fk09oMOb+nNaORQ7IChbYs+OFY5J+SDmDo/dfa6kbcGoeg8CPpVm/gK3s2+1xNaxEhnTONDrkGCmz5TErUhOOzP3JmRZ3VCtNGMLkr/WBIKjCFROOvCmWim1IFE80ILlzsbOIu/6+Bw6C4I0+dKe6XctjSLt74hwfgc6vDboB3YjCMmLSWwjF3MyCpj1bcBpDujAwwJ0JQpwMtiFmDQuRZa+FIuJhe2ixbKFZ6utOOcXy2RbgU42tScD5wZu4HRHbgByMYXNWyGx1BslKLzVd0fV5OsRROOn9rx5KPey+1P4dQ5UIaudHguQViGozM7i5I1ZgYBsJiqiOUDjWRD614xAM2AuR+J5MttzOkf9UuxM1aS/qSeAOgf46RkNGJWmITFH6tuv2MvqMyW2FNnzWkS8WwdL7nfrJdiKhf134JlmpGUL0Vi0xBDrOyybih4wavIjC87Vsupo6XIogk38JcxQJNLVCE1QRJoI56oL+rDuX0P2dZX7y3SXjp0F1Siwdhn27gMgrCuwDemORGYzjicdsUFbgy1FC4zcxm0D5jEyGoX1/1fKy76nNrlqtKPeAaWYotRg5bpLMJLdCMcTg1Sfj03Kco7Wu02+KiyUchjOWfahEQcPlpbHVbk0D/WFr1r0ZGvmUnKF0hHfLjVq0xvCDQIMDj31KypnvUMW7USbaZcmS8LPqIh7ocpWcxQNej4dTxvUGBMqon0yUu3I1SBFLsJMpIpVEzH1OIyj1iMDBn5bnVRoxd2zHpMuSCa78i3t6U2BMfupwJML3sTSnMAc/WWQZk5DU3QmBlIjQfiHy7DNxInoTU06A4dMEHzuB3aVgtml9382SkMrJgJ5KHMOBLps5BA7EMQSGa6IGjQ8jHZhKvZpJ2FxPhsCtx0S2a445Jx0q8Gg4XSgoxva1C63xALh/tHolXsA55IbmXawmHeO7JDNO9ovjCxA0sfRQ4+gtk2NqCaqn1JR5WuQrFVY1Cr3Vo3uLeUdEGjp3GhI2rRbLwPZgrzLcBrZ0sUUq+wQ8x6waJKKq1E/h+5mQzpt94WIT+ESqgfppIEBG0t8NUZBJIyfj+abFKjQ0J9RX01lQZiU/aQRg4k0DArUcF5j6uAkLVG/NYaGhcmSlbtPKrWBPO0paXYtnbRALLAG36D1UFVr1xkn3rarz1YlYeVl8TFXPxULZKI1DNxu4bLY8SCiG51Ynmq8QRXZSwG/ol/Z8dHcgwNBSp02cgiYzAj4phG0tAUK7bOj/WKMsf4q8T3YUW1nCbbi4yL3mpwpW4MgYUIHaeQwEDYKb6eQGQ7q7oWt1HG/JIz4boDyeUG56fPRGhm5e70+kBfXPyYNPwqSv+RnP7JP/q6UK8m7/xq4oxQZurVnqtAK2tJJ7sAiBr7CxeAynTLf0cfgL4y6g7QNJhwpl69LcBa46E7IeHq3DV/GUiOVJi6ZUMMsHSD0mEt7S/lX5TyhFRx/iPIgnha2Xgly1vdOBmPQM9YWCRtEzAWcEEIHeknUpQXj9GNxSREwE0+Tuagp4aSHYOew3cCinAXAGsAxBGNMXLI0OpGmff3b8uiSXRELRyBN34V4vvxNWElTwG1ej3lGgeyBre4lsbx/RP/nyP4fZxiOCNdjkjjamfTqYTGddSwQ6MK2qMJUBd1mclQdlgTrwS5X/RJ9We5e6IBCsCywZ/JxAtoDXskH6EsxZcm5S2I7YWMz8PtT8191RdsGb6f2rlu/5cKo6BuEgXFjBdRi07Mq6KxXSkCFcBpUKR+v+69yJsDEqiIwgIlw3BLxdRUBvefHBQkKHgoU8TS7F7uedA41GlaTAsbafTuD2dgdzLMZlKm2Wb/eFosHWHtroBmb04LiYQFUbEUgA5XI3R0xgVnm3kkOvv8HnAYw/5mfGqn6HzDvXEVtJc5wUCi28gz1JDuXIWxFD5jKFbHt2Wiw5G7xO/tTZFsgGUpROB20aYmYbun+Kb5scdWWxJazxQoGChACGiXO3xV2E3tq3DkdT4W67v8O6YGmVqD1f50YIdxiDENiBdBD9RgKFLwEdHbYQNh+rx8IGYoekFgRJvFKEpkiiFhYFNO+IurKhwMc1r8KRLA8DO7GnncDVP88nIU+QmOxAYunLoPjKD8bWUk6LG863Ff2Quy9i2cBHWprshwEObIHK9H+KPUeRuLVQh2LcpUrT8fLDMMg9U8IIO0z4DR2liuaGhEq2n6LDjhrZczxZqbtPJpok8VlNwy3k0FQrAVYvvdHNdMnW4LB6Op3wOhsgMMsb+kHvEsNwofyI6CVt61TV16Aoiu8zZJz1BhoC1NQI6vKfiSUtVBvhEK3xIG7Fi5jTjlh+uN1UTUdKdVgdYGOsjpC4NtNG9UT6xlVgWZDhOc+Lnnt0Frl3imjHA2ZqBdP51v8IDcNvj0XxVqR9QOOoh+0T+5fY/EbSQumYmCai4nyqT3izRwHLzcaEjFDyz2YqIyBtLo656JlhyigwYitt54SQ5/v4XJps8QPLIIKMcPZNgRbr4pzWJFKrPjrUYXX4AmjYqGN+DsVcNZWAIvZ2Ir8iJFkku5OK7xyJ9TJ9zFcNPsyWSMVrZfilZKHgdpe+NzCOj03RZDredXxoIjNJc3uTdc0af3XXVgZOHvl/dSHd3aqov0rAJ33EYXkvQAVgS+JasRtA5p25VDxxLENayGwtsgy2dkVlPzuKU4X4L4Mi5jye6Wn9eiKS2EV1dw3BGuihJr6eQtTW6LrU+LWiyCRsHeWFEuHx9+HQC0b+8+aaznq6F/VQcc6eycaaejMuD/GcHgiQ/xSmBtzVR+/OGKriURduhnZSUocP0oZKnXlUl1ECoZnikxSbuCQ58wxgTlEuqwX8hWcKUKwafPgUZ4/0xSy6yYLr6uMhwMk5mw7NNDP30gzGbxQkLUnFq97b9AAhii4gcDETpoLGCFiMjlnSv85mBDIp+CGtDcZioq0mpYG8GsbMRfYg5Xjftju8lekjb0wbLVIJvdwXdQNki5SYd0a/hZToUeJuiGgaMAr7ZwfkKG9wCX4Di5yA5GrHIGthAYTkN1o2sUZsQ66phcjDCfdfofl1ELYVw3eWWOCNGlOqOKPIXWn7wQt4mBl8hFzlmOqlHeSjHYPQJ/zGMODX04W/GLSsPVJ4jSH2oBeZO4lbhnwWAI41KiC01P1TxP48FfrjCFK6nsADCFUcmvegIjKRWafjcWrBvqZi8i9HEFjNiZhmABJwPJdFQ/0U22DtIgWlmoyp+cQTLRX+b1rB4FG0E5Qx5Zf+BvtvHSgnWAMMiRzYFyCKbZjPvThVqTkjVjkJh8JvlT3db55xkAQyWYCKAq1KKv/mx8nd2wp58GJjPWid9+J1EBbqN+uBi04115aNZlIsVzPGKXWqy8lS90oKJfew8EY5LskICJ1jCSanIvBIpgTFyEsrUNb0AFGC111SVyboooU912kJJdqIasSqR2Ws+FFvP6glmY4lbog+UgNaDD1qGBQJHI7qLfweHjM92A/xy1OKA3GLZJe+yKAGYdYpS/4bRz2P337u4KqPrj0MrUoQsa1AgGeBvIpyPK227CrqEB9B8Xgggr8GBJp+iiAybqdK/xwmLUPoZ2Fjwq5NnHXcm2aIdwhGvRCQksGn1Lx4RDaI2mE5qLxNnn0JEiLJfpW/kzdrIs5heUQ28qhZy9l8WQxUh1Zqz25jnUIMhi9KOBJz4hwLhfee9AgY/85yLfNIYM8/Chp70PQ8Oef/eayxNdGabzEsqCHuiMWyBdkuKmyZUk4jE4NY7O57EvhCC9/gPHUQz+2gFDbrx7WR7izWRKOC+/WnCBQ0/zVtdGSVPWw5CKDfFYvzHrkQvvzjDOBdy9r2G5cFZdSUNh8jO6mIWfiyReUAXKlpuFU+wVy8WJMGZdCGPRDoL32vlhclXe+DNaAUy3Wly52Ppe0s4J5jnZa0/Ee5PDtkDeov0TxcTF9iQSJph9IW3PweWyeHtPXOHioRd9EyVYlBBJaNbVLUjcv9EaqgPQe8uMxmHf00oHSU7WQt5m4+lNVouoMg3osDSFcG9RqvFFhWsGwCEoNx/Wfl6hqmcd3zPN+IhZ1s3ZCTlZCVR26OmbQJolhK25GDefC1KdzWj/NDKIfK3MIY4aZm7Vc/Lz8YJtvIu1cSOVXEOH8YSMip2fwZ31hPgZwunH6jIn60Kphc+3H6ofznu9CWRIE+/XohgRlSVPPvCiJF4+hfiUGfpkwesrJwCvqp8lUE3sXi5LhOwZCP23lt0zhFLQQ71LmFLinE3+CwdPiWpE6rlntAJcHfSFIO3X2KXA4kuG7FnPAKEd0BZznsCcnoJK9G07orRRp/8zvJPbJvfD1rw/SKNZtd96l+dL2WVgsnXC2NHYXazuhA8P5E6Z072zk2jkLe5YPZsnw7oSHOA1HWRoyx93BbtK8RLlE7kafcqrwGHbOQCn0AUpX19AaMMRd70nOLPy07WuQ9R8gDF6NZ12rp5Xfw1bxTgjZ96L0hjhr/DTFMA9LzdXHSM6OKwyHeQpCvf7s93j8MvugYxmPprh/Cp5lV4OJ+1k/2Xq3CukcaGvbXY1l4EbUSdVQizsRIexvBzH05E0+di9lnNR0E407huFo3oSYFHN/2wSXlo3SuxmBaZhtTZ+tXovXoHv6I6NQt3/1+E/6IaYvj5Cf9KUiwuOm4zXUXj1mU3jCoQB/nWTMj7PQUXioJ9LwTlLj0aOBvUwmOPI2JRYvl8Sxq4D6EALNLugceKBGn9DAyhK89Ssk9IzZqqnU13qwAa/D+l+hvi6mpV47FUNGNRxX2q0OX6eqZgwZq3oiiFaj8NAAH3/oqBqgCz4efwwWlCFYLOcsV4vem7eTnFN4EPODRlfHHSncgwQotlxMH8+pReha85x62y38C8OpXMkRbFRpgBqcg+yqP0rE8Iz7F2qof4xW52D1SnAiJOXUe+s9v03wjdemJdebmsSm8iYUqkUTHsskPngNa8y0j4CsNHAjWkjb7EtbNYvkeq9Zrne5l5BAR603MRBNC0Qht/euxu2gee5cIGon7DbOnxIY/ezQMDPk0k0E2TvppuVj2KBKQ2kad1km0spldaiRKpru/EhJp4Vi9cBKsRZPCPsU8jH1ibgSwY66PtJkScKm4WruZYX/saiqxuLFIrH4ZP5LdrLL9kJtQJQfbUOmPBXXrIuw1HgRWffDZ0OOSlkZ/nMchyjOMNPOl6xLdmPk+sgohunqLoKpfwGrtIux1RxdHk3U3YXtsY9GZAHO6wUXQcUMneg3LOd1DWQ8OxFp7cRGbDPPPBHg+OzSTPs74gFppiUGi+3RTRBoXU2jqQ5uUWoKVO+S+OPVLK8pSC7YWFugSyHdlg3gut7HzasGvSqPqroMtvMqcOJZz3HmPH26aGf83krZyTF2D4wpc+QeEwMEVPkhJeXMPom+5qy3YKUzlVBh81A5OuVu7mpn9w3+aIdCWAP97IL+ZovLkNhaxqQBaXbL1ZqmLnqw+Y5GaACaGCcxRv+0JM45FQlVJaSdPiy0j9GriXJZN/UHOahVgkRPOhg3BBlRBzfaQGGqJszMiDaZJyzTHHWqbUbdp85BejRlJCXq5UpPoMh2KLm38GpTl0TQLp4RT/ODIu1ejWm1hDP/oaoh9/nEQYqjhNQFUD9IpXQgVhjEIhU1Z8QhYIWDD6kYojlfFTqFqqT7b8eyNFBUpf1mfqTG2l7/DT24cTmdUcN/KSGnPBSpWTI+7VBE4geIhPkcikgIQCRLQg0zNbvwoJnToaAkWZOUhgIdmfRcUxCynq7G73QR9qK73T83HuhnIs3kQNvlzY0H+vkbaYm6xYE2VBBm9GB3bjNpRcw2f3uCsp3Yk9dhtFKDeW0z15Ga6egzYktxAioGUGNcQWlYHr2Pv576uOgNo86WtXoc1aVPeEITwnCDDBPSEzk1Hguh+/PgGE9Fv6yOtsd9GL0HtbL0vg6zrDSU0439/MBXqwZbXzfKTzjObWCVRrVj7OojyXN3tmqhBE0lfOKtn7LUOE8704VDMAeRIE4L9l88sLeLI6YWGk04XnK7Ocst9bgLL0rEvg8y1EdP/WFNkrrzKu7D7v5itCHYFpkxQnXYlfguhqDWVEqLVMNWsVwNiM5qh3FMeUPRHH47dB1yYF5PEdpDuCyT3F5yUlkCFRDr+49apHFnUMRW3xUUsW9DrvfjYc275/kB0f0ex/rXThJUoT7WFwbr82JOeOAsU8kwyShkqjBgUKq2HoMmFU6RYcYARxFe8LvpepYexe6xyABW9lbOuwOC3SOwx5iAqPxKVA/HrZeg8/YYrjyStSuw49JSnTGG4o01YnJ7XyRsqhe5AXpwXWtu1DGurhyzF+EkpEGyuOBc1m4Ik3NheX/kDTi7TchS+0lfuMKdcAnSIKQIfsRmCA9ImCE4kQ2BXZ7wAN9XLmCg8BWm8kYIYe24fY7ywyrM2uT3pgnhHQiCJuw7V+r7a7z76HVMPeiO74SWoj8QfQR63SuR2w74s2QcwyD8E7ntb+B6Pxu59Lm4WE1sDenSaYEcx7wpdLwWAX0jD5T8hKajCdnOBpybVLC3GiK/DHsOPJLt+uncj999DXX2GXKWHki8NmLKNFjf/uzdkltQkVEG3XUCZFXjm4kL7z6MWJPRMkMvmgIeQiljdVN4gbLpUclNxYpMGcmUsCscjttrbYAhyeId0wwscopgWiJAq+pFMniLIwUJZwr6RXXbTXvMd8+t6KN0tlKfQoRWrBwZVQmBDLbdZfRw4U1RIfzNYRjRJvG8Gj4qSoYYHoyxOzEpLIJIXIXOJYSGR3JlHb48hXAB7FgpJ41njexHH0fjpCs4mycHbSOalRSc/5q30uUobCDrZsM76ZN5avqbjO4yFe93D8llKmecp/5MK+T/Bbhd6LOsLTuqZnMqYQ5yhIarGRYi/kp4CX04suLhaGCdubdM7YsegZKpRBtye2c2v3qSywuebqhimHvrlBDfibFYOWuaJ+yaacMLdOhJTD+c/PXxv95rEeqXb/JDgbhup5pwY5q5G42YvqW5K4m5zsJ65i/16k6FMCGtGzCAE3s6DEkN3g/qJf8V3go4ZtqFmOFUImf+GvW9fVNfmHwb7WIRb8Yu4JnebghAlTXn1TfbgFVOPWcUrsrpTXkfyX6DKefJPI+zQboyZ61i5498EypmHD5UakM5CAVKNx7fMdnC4tk1r6puhZdQivBVS+Ohhv4IoVRalLZMmqtHkJ6G0OaH0lgg796CaHIXugvstgKncvC5eic6wpG7IJdLQt9N7Aqoq0dkGmZmNXgIpF0TczF9MtSux8+9Dt/2fXrf9aI9KDJ9QasZ2yl98TL5dh4ac1K4S3iooS8c5Hkg0v44/1xagvnRGLQ9l3AHfALanTQcFvkVbGl2fwje25Wvamp0cLzYJGPQx0mqjuOg9YhiMmrUuC8cdCXAK3B8LHfv19i1Y+Bh501DuvzZFKifeRC9X8MRfg1ozpsW69DQLkS69D8cDuFrhEnHRmEh7rsDmobWnKXIcDbt2NshPVWQe1apH5c08spcIEWG5Co/SaEX9arp9ynX2/FDeWlW1XhK9VapLBDNpb7/qp9BGuTWx4u5AjRfSXRVyGltlZrrJ3awyM1kONPRKo09lcM0JRsfuQpEFFUQLBk80Jg1VYNo8BlPo2YFMoBEltZxJzbRRCJNPc5PWCyNHoEgry2e0foii/pmHimkihl3s157v2M7D+dt4hPAz1dwS56wgAtvFLq7mXs4giEOWR2vRqfB7NaeyDbN+ZiJ154YZLlAP2v1xFJS64T0XZ2zjmdZaUmzXKBZ9m9oG45fhRqk9+2UwlroUIfH//SqVNfJ5ffFftOr8rfcKWUMuxCY/OERphRQ3uZgyrxZSeM4VW0OpqqbHRnsCOpW5hDO/AAp75jyBGdu7QfYec06Wx0VUVx98whnY8VTxhGNLljxJNrXN88DGnjHztGTnXmPqtdklu6MIYgkeiFo7QzZpUGvqwD87p8ikkhkBQ0+hVunMyRdrkYgoNhaDkIabvZ1IOhwW9XFOv8RCJisCsNbaVwEJg1OjFf+bM3dAkwv3mrN7WDJgUi3egHNfW5HIH4tVoSnl4MMohuNfHeRtW3GTtNE1jLVdfglbMF5XAP5lLVsHsVaruOMtDs2yMegXtbS+yIaVFVWzvkitwUtt7ke5CulZNCrQ3ibqQ2+3YZaqg1U8hqaUY20Xiz2lUeRSah4BsQXPGfN+8SN2D404c3e0BQNni+p4yVPdUIQgClRewJCqAIeBbQbMvhWrdI+TD9V1bSP548asX3bB9Ud4e0afTi2gKtMX9uNNHHltvgjF0iLd2OBIDoJBWjFGUqrKP+NzYIKvOrl+nBm9ZrWpEplrEJwkXe+18o7NIHHlA5rXuXH2Wbsoep3M9Ad+jyYOhGoZfoO9flD5abXZpleoJiPl50ZdS9n2zJ0B50wa1LjnA7OKyimr7oGJmwmG0WcmhOlf8EQ8SaHd7LlXjQwHKvHaaMZiznsEvWRafeCnD6C6x4R30yf0P5qaNAMVeHmfTlzxExPPd94QNH5I9bpYzga4zgrfaeHXb0r664MVjtIwy+m7mlF7NuOYzO3q/kw1Ni2o4IJ2IouwWbZGp4xScVgVR/4VSuV5k+D25nnyXm5TLbXw/4iFR19Jk+5DEcbrw/IDef5vkzePRuunCLPEqXSFA4AqgTUZ0zkxo45ctaZYKtFtj5PHQJSktqxwiEQV5Iq1lg+qDGe30bkeJeG0/VYc0hvcgdcYAx3f9ViREIx6/z81LcaT0/nmaEux/p2vkJl2uWq0FGDHX3avxl9tvd0zJFQTplUh5qc16SV17LNGAs1XKqWlaXI1o5E4NznRmluBP4M74Dsj9rgc60czeWh+ccxyalDXEzwxPUs7CV/Adnr67i8imY6ovykJXdHD/8zNNUNcBXPQsEObhnE7HM85jQHf8tFEO1P3orOzq68OY7adjxuHL6wm6bQxiDG2fsMmKf9j0hLObCeDexe7uusgBDIUupo7KqO1McoMKU9HMJbrbCZgd3yjkFTKhV/5EXK1fpYF3zOshnY6FZ8C4TxYqaK4Z3eJXkzRxucaT/h3ZMBY0B55foqNKPXoHyumt18CelUwWtAaWhJyeIHFAR4P2+CVFY3n3IUnG15FFRHn3OTiv8G44xZCMHWHr54wGqui25fc13kobLhsQ9e4QugI/905uxmnq/6qUe1LakaGsrrJJ6aaNePgKTbAMTw+pxdspYR8k0g4/ojnkASpKoPd9yRuxxFaRjVPS+vBjEU5tlhAJdvAhn23ayyBILlc/UJD1Bmmzw1GUPNXgYAk0MMcxt0J2X6Ukkp6zIN7DUNE2KtqllYipXE2yuil8mC6glSg0f0Oqrkewg8ZHxu0tZylGMSFAaDDWOjL1MpScyNUndiQi9BqhucC7btpVQZeFKH4eoz7fIaFqSmPnZggf7LKnXsboLhyMBKDoxUVykWX6UwF3SYZ2tNdk40vsD6xPRyuIB7kg7sGK7KB+/Y8qiOPxoff3xWOhbzGzvmJ3ZMe83ghNzDS6syoEN3zK242wH/v+/4oeMPH7RSB9Y/Wnjo+un6QzJJYnz8DuICOPiN9VcwyEXVDjAdGKmMPwqvEL0tvn+ufLx+VBOll2e5EJ99FcIlWDsKLOFW14Nw4Ej8tx1ze8GO5R6Ycbo5AFvhQBaDcFMIqCvwKbvu/kPlnGPeN7b5i/6+PgZUjzS6nGC/PpF/Odv5DaR9TwQu60b5uOL5qZRtwu2picPShIeTN1YfOGsCA6uPOqI1jGAlhuNIBm5xZTgdDeVFN2l3MYYQ+S1dazW4WOqvmKgzv/KXdmjM/fCEs5lIviWmPwCwAl3n6btjqVhCzeRC4wquGOyjSVF2ezyK1znQFUNAHkt4rvPIAmzvP8AQ8jIG/dnRUvOoDD/ytvUu4622EzdzLGtRtzZexApwzzfCQVWp3oRONqhDIraZdVijtdSXCT6WJvMmgwSmgQFPw2dIegtF5gihjTb2SnjKz3dA7tsUKKVm7B+UAFPP06al0XDkh+C9t428rrk/TWJfIcb5DJPmX2cCMEs4Fj2xhf5Doz6A8BMXdyfuzfk8MXcOPzvhQc8Uw3DrazudoP+yXgLnXiFBxiblv9VcrMsbvvUu4kHHLh/AdfflhxK6yPXjXYQWUhKT5TbjFSce2LfmRtaz/TXAW/FWsBJGzp0RE+FzZLrwEqlcqGEbvCV6y/3I3C7E6FsD5Y1v4YZVZ/ARvN5Yij//0GJp4xfOeA/egf2Fg9QDvLGYV+wRpNmvbvYDHqPkFpDNS9BqGqhNV4leOiDA1Vhn8ZNDdg3iILW03qDvD5yF7fPPbUBdn2KHuBfBLJ5xPK/krDlN2mvooPbyQHTbJj8wDe6I3aMyLZ0gtdQR/mLY2wks+oRlEruYt7hNP0zDlaTog68VT0GaTn2kmfWQJp36RINY/tEyvGVKMTHkH3EQ1Wm8AA3yDjU0eKGbEpVCR2MQcDOAs0l/ywE5xTasRnNBymYR8plLa5X/QJ6Pm4FtxDzKw8aiHpMqXn1zP++gse2ozXnf0v1Ui6dG04dFicXrGl6RV4ikAU1zP7BStd4Ev0nD7w25Ii5GEeTwTjSjhnL/1u/eeuPoALsLOWG+vnTLy+smhyeTqy6LYgVpAnF+6nFB084Ukjeo3U+j6Bt2SZhMK6XrAoTpPGTuMpJbGcf46C/rOLpa/S/0pX/3woSLsQ9tghqygH4wVLeUxKrQ27aBBlNb0YyZ6vXwDjhtggmeqWrGeExt79QUWQdtuG0blcDlmmlUVwdZrhL341Lag66/W1fV1GisnJemK0ZQfFuzC4FlkOP2rfFF1YZdjO3qjMXj4lfiKO/XduCjLN5i1Dd8+U0d9+5ZCF05Zsvqi618n9OQqtQP9wzjgfvxInHYREm+zGOigYNXFnyFi13EjZMBydnMs/VJI0w4p6SmwP3PXxKPRU6pOaNmZmFkRkNBKPJgTUFaZFyNxAY0zCySLPkcUFNA1riamQ0FhZGuNQV8p0XubSxIIZ4WeZDPGQ1kB5nInC7E3GchwHXhHAMjcCpmLUsR1F/8ePSQF9K+QTZ542qEMepy7d5FhfxrUtP8pvVsi+r6v+M5zvdRfrzyJIu/9UhlbvEICsMJluLCiIGN+80TfYszGT88fToluUZ1DKngPt4ddSxWLpqobH7zonSaCVyF9F11fnkKYxcegeZST0YRYREeJ2PDq6/AJB/GMqeoPiAFrY0+IY5vuPGQmvzKJqmOogyPugjkmGn5nfq4PK9+d7OAEnwZQo+bwAMvrBam+DqX87ND6PFsDU4jLRA9mDx99BIjI/d0WRgdTYq62KIRaaWPTQseM11xSNsNW3YYaFTpAX10WxUpbnHUtyJZh9UW1+EiDL5UQSKf3Og5XSmRhZCjnhshjGd7NZxC5uD4uVXlWwr2euoUrQq+Rsi5yvsNekPpvBo1Kw/P2Tok6ukIr5U9Tr8tjjRUX5m8ww+Yd/y8hG/xg5/RqlaJQJ6q8NQw90TMfoOATyx65VNoqSkjXFTuyFX6dmAusEVRe7kM3L47Ihay3rRvXCOCmi+HlX6XWk8jcnZPpmw/U+6j5ijo4d0RUSlfhVzuctxptp8CQm89O15r+3nUevohP94gqS5LvtNy5LQJxC8Q4snr1l99+vTlmNnsAnSfe3JF71F8i/XXHpzps4peCg9KC15fcudjOi+mjdwFmYrzW+DSxg67d4U0xuo360vR+tRwWRwPNqtmp2GGhqgb+Nk6nM30J+qkn0/RLj/OVX3627GGdtLJA4g2X3wrxgMv9yKuuA5J2jd9lH/j5qtZxOzO5RL9aZMaJcKB8+qCSdeT0Eqx0n7gf9VA2YVmdYbqom8tPrI+qj8uk+pA1UnbmnkqQZ9rax6lV24Dhmrud+dUqf4I4tXMeTGILn0WQn+gT3/jLRVwa4rQ2eRXjf6CVKr7lUPb/FFweng7TKEYWE8bwOGFbVcnIeFAhItuuBTLPn10J/F0m42/FRUN59TOLCgpfDorY2XGMzOfeGzGzBl/+9tjr7+YlfVW5jMznn7sL0/MeHLG48+8mpXdzvSJgEM8c7p5xcv/L2+6cHTcmy7IuHgKxgWkuSCR5oq4N2JeinXI/K33t13gnk3WB5QT7yn/P7yxnPn/XxBOVug3he6Z/wc6K4ayAAAAeJxjYGBgZACCS9IZNmD65+4+GA0ARvgHuwAAAHicY2BhYmCcwMDKwMDow5jGwMDgDqW/MkgytDAwMDGwcjLAgQCCyRCQ5prC0PCR8Zsy44H/Bxj0GKcyqAKFGeEKFICQEQAJOQuTAAB4nN3OPQ7CMAwF4OcWaJMmaSRUJFCHqEjcjRtxkF4MEzywtOZ3hZknWfaTvsEASjynB+GeURs9+gIn3QOSXsWZuOSKDW858SHHvM5dPl43YiRKL/tpAtSAl2qimuFjOsHbtAhFoAB/89lfnHW1q5qxMTbZnW2tef3wJbTCb/CPMwM4ACwLAAAAeJxjYGRgYADi0OesrfH8Nl8ZuJkYQODSz919cFr0/23GV4xTgVwOBrA0AFr7DRcAeJxjYGRgYJz6/zaDHhMDCDC+YmBkQAVMAF+2A5AAAAB4nGNiYGBgYmDQAkN9BgcwDSJ9GBQYlMBsiJgolNZi0AbiLLg6ECnF4AhWB+H3AlVAeA4AdyMJHQAAUAAALQAAeJyNkD1qw0AQRt/KkiHGmKRzE9jSxEistjDYuFadyr0xQgiEFiSfI0dJm3PkAj5LRtIE3Bi8MMybH775WGDFN4b/FykblrwrRyTslGds+FKOZedXOeHVoDxnabayaeIXVZ3YsBaaOGLBh/KMT47Ksez8KCdYbspz1uZtkOoJXKg505BKBCqJXgbhUp+btAlVkOpuoJ1CqpbrmDuZlaLuyXCSDxKPhKepZy9dP4Yjl/+gCO21CF1VWp85e7D3BqT0+9Sn3uW7pz2fxFMn7Xp0auXOcCkb8+CSU9n1dWitc3nmnLPPKv8Br9RH5wB4nGNgZgCD/wcYJIEUIwMaAAArwwHdAAA=") format("woff"),url(social-logos.ttf?51b607ee5b5cb2a0e4517176475a424c) format("truetype");font-weight:400;font-style:normal}.social-logo{font-family:social-logos;display:inline-block;vertical-align:middle;line-height:1;font-weight:400;font-style:normal;speak:none;text-decoration:inherit;text-transform:none;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.social-logo__amazon:before{content:"\f600"}.social-logo__behance:before{content:"\f101"}.social-logo__blogger-alt:before{content:"\f601"}.social-logo__blogger:before{content:"\f602"}.social-logo__codepen:before{content:"\f216"}.social-logo__dribbble:before{content:"\f201"}.social-logo__dropbox:before{content:"\f225"}.social-logo__eventbrite:before{content:"\f603"}.social-logo__facebook:before{content:"\f203"}.social-logo__feed:before{content:"\f413"}.social-logo__flickr:before{content:"\f211"}.social-logo__foursquare:before{content:"\f226"}.social-logo__ghost:before{content:"\f61c"}.social-logo__github:before{content:"\f200"}.social-logo__google-plus-alt:before{content:"\f218"}.social-logo__google-plus:before{content:"\f206"}.social-logo__instagram:before{content:"\f215"}.social-logo__linkedin:before{content:"\f207"}.social-logo__mail:before{content:"\f410"}.social-logo__medium:before{content:"\f623"}.social-logo__path-alt:before{content:"\f604"}.social-logo__path:before{content:"\f219"}.social-logo__pinterest-alt:before{content:"\f210"}.social-logo__pinterest:before{content:"\f209"}.social-logo__pocket:before{content:"\f224"}.social-logo__polldaddy:before{content:"\f217"}.social-logo__print:before{content:"\f469"}.social-logo__reddit:before{content:"\f222"}.social-logo__share:before{content:"\f415"}.social-logo__skype:before{content:"\f220"}.social-logo__spotify:before{content:"\f515"}.social-logo__squarespace:before{content:"\f605"}.social-logo__stumbleupon:before{content:"\f223"}.social-logo__telegram:before{content:"\f606"}.social-logo__tumblr-alt:before{content:"\f607"}.social-logo__tumblr:before{content:"\f214"}.social-logo__twitch:before{content:"\f516"}.social-logo__twitter-alt:before{content:"\f202"}.social-logo__twitter:before{content:"\f610"}.social-logo__vimeo:before{content:"\f212"}.social-logo__whatsapp:before{content:"\f608"}.social-logo__wordpress:before{content:"\f205"}.social-logo__xanga:before{content:"\f609"}.social-logo__youtube:before{content:"\f213"}
diff --git a/plugins/jetpack/_inc/social-logos/social-logos.ttf b/plugins/jetpack/_inc/social-logos/social-logos.ttf
deleted file mode 100644
index 9b7f5289..00000000
--- a/plugins/jetpack/_inc/social-logos/social-logos.ttf
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/_inc/social-logos/social-logos.woff b/plugins/jetpack/_inc/social-logos/social-logos.woff
deleted file mode 100644
index cbb3616e..00000000
--- a/plugins/jetpack/_inc/social-logos/social-logos.woff
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/_inc/social-logos/social-logos.woff2 b/plugins/jetpack/_inc/social-logos/social-logos.woff2
deleted file mode 100644
index 51f2a4f9..00000000
--- a/plugins/jetpack/_inc/social-logos/social-logos.woff2
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/_inc/spin.js b/plugins/jetpack/_inc/spin.js
deleted file mode 100644
index c66c607a..00000000
--- a/plugins/jetpack/_inc/spin.js
+++ /dev/null
@@ -1,349 +0,0 @@
-//fgnass.github.com/spin.js#v1.3
-
-/**
- * Copyright (c) 2011-2013 Felix Gnass
- * Licensed under the MIT license
- */
-(function(root, factory) {
-
- /* CommonJS */
- if (typeof exports == 'object') module.exports = factory()
-
- /* AMD module */
- else if (typeof define == 'function' && define.amd) define(factory)
-
- /* Browser global */
- else root.Spinner = factory()
-}
-(this, function() {
- "use strict";
-
- var prefixes = ['webkit', 'Moz', 'ms', 'O'] /* Vendor prefixes */
- , animations = {} /* Animation rules keyed by their name */
- , useCssAnimations /* Whether to use CSS animations or setTimeout */
-
- /**
- * Utility function to create elements. If no tag name is given,
- * a DIV is created. Optionally properties can be passed.
- */
- function createEl(tag, prop) {
- var el = document.createElement(tag || 'div')
- , n
-
- for(n in prop) el[n] = prop[n]
- return el
- }
-
- /**
- * Appends children and returns the parent.
- */
- function ins(parent /* child1, child2, ...*/) {
- for (var i=1, n=arguments.length; i<n; i++)
- parent.appendChild(arguments[i])
-
- return parent
- }
-
- /**
- * Insert a new stylesheet to hold the @keyframe or VML rules.
- */
- var sheet = (function() {
- var el = createEl('style', {type : 'text/css'})
- ins(document.getElementsByTagName('head')[0], el)
- return el.sheet || el.styleSheet
- }())
-
- /**
- * Creates an opacity keyframe animation rule and returns its name.
- * Since most mobile Webkits have timing issues with animation-delay,
- * we create separate rules for each line/segment.
- */
- function addAnimation(alpha, trail, i, lines) {
- var name = ['opacity', trail, ~~(alpha*100), i, lines].join('-')
- , start = 0.01 + i/lines * 100
- , z = Math.max(1 - (1-alpha) / trail * (100-start), alpha)
- , prefix = useCssAnimations.substring(0, useCssAnimations.indexOf('Animation')).toLowerCase()
- , pre = prefix && '-' + prefix + '-' || ''
-
- if (!animations[name]) {
- sheet.insertRule(
- '@' + pre + 'keyframes ' + name + '{' +
- '0%{opacity:' + z + '}' +
- start + '%{opacity:' + alpha + '}' +
- (start+0.01) + '%{opacity:1}' +
- (start+trail) % 100 + '%{opacity:' + alpha + '}' +
- '100%{opacity:' + z + '}' +
- '}', sheet.cssRules.length)
-
- animations[name] = 1
- }
-
- return name
- }
-
- /**
- * Tries various vendor prefixes and returns the first supported property.
- */
- function vendor(el, prop) {
- var s = el.style
- , pp
- , i
-
- if(s[prop] !== undefined) return prop
- prop = prop.charAt(0).toUpperCase() + prop.slice(1)
- for(i=0; i<prefixes.length; i++) {
- pp = prefixes[i]+prop
- if(s[pp] !== undefined) return pp
- }
- }
-
- /**
- * Sets multiple style properties at once.
- */
- function css(el, prop) {
- for (var n in prop)
- el.style[vendor(el, n)||n] = prop[n]
-
- return el
- }
-
- /**
- * Fills in default values.
- */
- function merge(obj) {
- for (var i=1; i < arguments.length; i++) {
- var def = arguments[i]
- for (var n in def)
- if (obj[n] === undefined) obj[n] = def[n]
- }
- return obj
- }
-
- /**
- * Returns the absolute page-offset of the given element.
- */
- function pos(el) {
- var o = { x:el.offsetLeft, y:el.offsetTop }
- while((el = el.offsetParent))
- o.x+=el.offsetLeft, o.y+=el.offsetTop
-
- return o
- }
-
- // Built-in defaults
-
- var defaults = {
- lines: 12, // The number of lines to draw
- length: 7, // The length of each line
- width: 5, // The line thickness
- radius: 10, // The radius of the inner circle
- rotate: 0, // Rotation offset
- corners: 1, // Roundness (0..1)
- color: '#000', // #rgb or #rrggbb
- direction: 1, // 1: clockwise, -1: counterclockwise
- speed: 1, // Rounds per second
- trail: 100, // Afterglow percentage
- opacity: 1/4, // Opacity of the lines
- fps: 20, // Frames per second when using setTimeout()
- zIndex: 2e9, // Use a high z-index by default
- className: 'spinner', // CSS class to assign to the element
- top: 'auto', // center vertically
- left: 'auto', // center horizontally
- position: 'relative' // element position
- }
-
- /** The constructor */
- function Spinner(o) {
- if (typeof this == 'undefined') return new Spinner(o)
- this.opts = merge(o || {}, Spinner.defaults, defaults)
- }
-
- // Global defaults that override the built-ins:
- Spinner.defaults = {}
-
- merge(Spinner.prototype, {
-
- /**
- * Adds the spinner to the given target element. If this instance is already
- * spinning, it is automatically removed from its previous target b calling
- * stop() internally.
- */
- spin: function(target) {
- this.stop()
-
- var self = this
- , o = self.opts
- , el = self.el = css(createEl(0, {className: o.className}), {position: o.position, width: 0, zIndex: o.zIndex})
- , mid = o.radius+o.length+o.width
- , ep // element position
- , tp // target position
-
- if (target) {
- target.insertBefore(el, target.firstChild||null)
- tp = pos(target)
- ep = pos(el)
- css(el, {
- left: (o.left == 'auto' ? tp.x-ep.x + (target.offsetWidth >> 1) : parseInt(o.left, 10) + mid) + 'px',
- top: (o.top == 'auto' ? tp.y-ep.y + (target.offsetHeight >> 1) : parseInt(o.top, 10) + mid) + 'px'
- })
- }
-
- el.setAttribute('role', 'progressbar')
- self.lines(el, self.opts)
-
- if (!useCssAnimations) {
- // No CSS animation support, use setTimeout() instead
- var i = 0
- , start = (o.lines - 1) * (1 - o.direction) / 2
- , alpha
- , fps = o.fps
- , f = fps/o.speed
- , ostep = (1-o.opacity) / (f*o.trail / 100)
- , astep = f/o.lines
-
- ;(function anim() {
- i++;
- for (var j = 0; j < o.lines; j++) {
- alpha = Math.max(1 - (i + (o.lines - j) * astep) % f * ostep, o.opacity)
-
- self.opacity(el, j * o.direction + start, alpha, o)
- }
- self.timeout = self.el && setTimeout(anim, ~~(1000/fps))
- })()
- }
- return self
- },
-
- /**
- * Stops and removes the Spinner.
- */
- stop: function() {
- var el = this.el
- if (el) {
- clearTimeout(this.timeout)
- if (el.parentNode) el.parentNode.removeChild(el)
- this.el = undefined
- }
- return this
- },
-
- /**
- * Internal method that draws the individual lines. Will be overwritten
- * in VML fallback mode below.
- */
- lines: function(el, o) {
- var i = 0
- , start = (o.lines - 1) * (1 - o.direction) / 2
- , seg
-
- function fill(color, shadow) {
- return css(createEl(), {
- position: 'absolute',
- width: (o.length+o.width) + 'px',
- height: o.width + 'px',
- background: color,
- boxShadow: shadow,
- transformOrigin: 'left',
- transform: 'rotate(' + ~~(360/o.lines*i+o.rotate) + 'deg) translate(' + o.radius+'px' +',0)',
- borderRadius: (o.corners * o.width>>1) + 'px'
- })
- }
-
- for (; i < o.lines; i++) {
- seg = css(createEl(), {
- position: 'absolute',
- top: 1+~(o.width/2) + 'px',
- transform: o.hwaccel ? 'translate3d(0,0,0)' : '',
- opacity: o.opacity,
- animation: useCssAnimations && addAnimation(o.opacity, o.trail, start + i * o.direction, o.lines) + ' ' + 1/o.speed + 's linear infinite'
- })
-
- if (o.shadow) ins(seg, css(fill('#000', '0 0 4px ' + '#000'), {top: 2+'px'}))
-
- ins(el, ins(seg, fill(o.color, '0 0 1px rgba(0,0,0,.1)')))
- }
- return el
- },
-
- /**
- * Internal method that adjusts the opacity of a single line.
- * Will be overwritten in VML fallback mode below.
- */
- opacity: function(el, i, val) {
- if (i < el.childNodes.length) el.childNodes[i].style.opacity = val
- }
-
- })
-
-
- function initVML() {
-
- /* Utility function to create a VML tag */
- function vml(tag, attr) {
- return createEl('<' + tag + ' xmlns="urn:schemas-microsoft.com:vml" class="spin-vml">', attr)
- }
-
- // No CSS transforms but VML support, add a CSS rule for VML elements:
- sheet.addRule('.spin-vml', 'behavior:url(#default#VML)')
-
- Spinner.prototype.lines = function(el, o) {
- var r = o.length+o.width
- , s = 2*r
-
- function grp() {
- return css(
- vml('group', {
- coordsize: s + ' ' + s,
- coordorigin: -r + ' ' + -r
- }),
- { width: s, height: s }
- )
- }
-
- var margin = -(o.width+o.length)*2 + 'px'
- , g = css(grp(), {position: 'absolute', top: margin, left: margin})
- , i
-
- function seg(i, dx, filter) {
- ins(g,
- ins(css(grp(), {rotation: 360 / o.lines * i + 'deg', left: ~~dx}),
- ins(css(vml('roundrect', {arcsize: o.corners}), {
- width: r,
- height: o.width,
- left: o.radius,
- top: -o.width>>1,
- filter: filter
- }),
- vml('fill', {color: o.color, opacity: o.opacity}),
- vml('stroke', {opacity: 0}) // transparent stroke to fix color bleeding upon opacity change
- )
- )
- )
- }
-
- if (o.shadow)
- for (i = 1; i <= o.lines; i++)
- seg(i, -2, 'progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)')
-
- for (i = 1; i <= o.lines; i++) seg(i)
- return ins(el, g)
- }
-
- Spinner.prototype.opacity = function(el, i, val, o) {
- var c = el.firstChild
- o = o.shadow && o.lines || 0
- if (c && i+o < c.childNodes.length) {
- c = c.childNodes[i+o]; c = c && c.firstChild; c = c && c.firstChild
- if (c) c.opacity = val
- }
- }
- }
-
- var probe = css(createEl('group'), {behavior: 'url(#default#VML)'})
-
- if (!vendor(probe, 'transform') && probe.adj) initVML()
- else useCssAnimations = vendor(probe, 'animation')
-
- return Spinner
-
-}));
diff --git a/plugins/jetpack/_inc/twitter-timeline.js b/plugins/jetpack/_inc/twitter-timeline.js
deleted file mode 100644
index 43fba4d5..00000000
--- a/plugins/jetpack/_inc/twitter-timeline.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/* jshint ignore:start */
-!function(d,s,id){
- var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';
- if(!d.getElementById(id)){
- js=d.createElement(s);
- js.id=id;js.src=p+"://platform.twitter.com/widgets.js";
- fjs.parentNode.insertBefore(js,fjs);
- }
-}(document,"script","twitter-wjs");
-/* jshint ignore:end */
diff --git a/plugins/jetpack/bin/build-asset-cdn-json.php b/plugins/jetpack/bin/build-asset-cdn-json.php
deleted file mode 100644
index 09c64e0a..00000000
--- a/plugins/jetpack/bin/build-asset-cdn-json.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-$path = dirname( dirname( __FILE__ ) ) . '/';
-$directory = new RecursiveDirectoryIterator( $path );
-$iterator = new RecursiveIteratorIterator( $directory );
-$regex = new RegexIterator( $iterator, '/^.+\.(css|js)$/i', RecursiveRegexIterator::GET_MATCH );
-
-$manifest = array();
-foreach ( $regex as $file => $value ) {
- $file = str_replace( $path, '', $file );
- $directory = substr( $file, 0, strpos( $file, '/' ) );
- if ( in_array( $directory, array( 'node_modules', 'tests' ) ) ) {
- continue;
- }
- $manifest[] = $file;
-}
-
-$export = var_export( $manifest, true );
-
-file_put_contents( $path . 'modules/photon-cdn/jetpack-manifest.php', "<?php \r\n\$assets = $export;\r\n" );
diff --git a/plugins/jetpack/bin/partner-cancel.sh b/plugins/jetpack/bin/partner-cancel.sh
deleted file mode 100755
index 1be859b1..00000000
--- a/plugins/jetpack/bin/partner-cancel.sh
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/env sh
-
-# cancel a the plan provided for the current site using the given partner keys
-
-usage () {
- echo "Usage: partner-cancel.sh --partner_id=partner_id --partner_secret=partner_secret [--url=http://example.com] [--allow-root] [--partner-tracking-id]"
-}
-
-GLOBAL_ARGS=""
-
-for i in "$@"; do
- case $i in
- -c=* | --partner_id=* ) CLIENT_ID="${i#*=}"
- shift
- ;;
- -s=* | --partner_secret=* ) CLIENT_SECRET="${i#*=}"
- shift
- ;;
- -u=* | --url=* ) SITE_URL="${i#*=}"
- shift
- ;;
- --partner-tracking-id=* ) PARTNER_TRACKING_ID="${i#*=}"
- shift
- ;;
- --allow-root ) GLOBAL_ARGS="--allow-root"
- shift
- ;;
- -h | --help ) usage
- exit
- ;;
- * ) usage
- exit 1
- esac
-done
-
-if [ "$CLIENT_ID" = "" ] || [ "$CLIENT_SECRET" = "" ]; then
- usage
- exit 1
-fi
-
-# default API host that can be overridden
-if [ -z "$JETPACK_START_API_HOST" ]; then
- JETPACK_START_API_HOST='public-api.wordpress.com'
-fi
-
-# fetch an access token using our client ID/secret
-ACCESS_TOKEN_JSON=$(curl https://$JETPACK_START_API_HOST/oauth2/token --silent --header "Host: public-api.wordpress.com" -d "grant_type=client_credentials&client_id=$CLIENT_ID&client_secret=$CLIENT_SECRET&scope=jetpack-partner")
-
-# set URL arg for multisite compatibility
-if [ ! -z "$SITE_URL" ]; then
- GLOBAL_ARGS=" --url=$SITE_URL"
-fi
-
-ADDITIONAL_ARGS=""
-if [ ! -z "$PARTNER_TRACKING_ID" ]; then
- ADDITIONAL_ARGS="$ADDITIONAL_ARGS --partner-tracking-id=$PARTNER_TRACKING_ID"
-fi
-
-# Remove leading whitespace
-GLOBAL_ARGS=$(echo "$GLOBAL_ARGS" | xargs echo)
-
-# Intentionally not quoting $GLOBAL_ARGS below so that words in the string are split
-
-# silently ensure Jetpack is active
-wp $GLOBAL_ARGS plugin activate jetpack >/dev/null 2>&1
-
-# cancel the partner plan
-wp $GLOBAL_ARGS jetpack partner_cancel "$ACCESS_TOKEN_JSON" $ADDITIONAL_ARGS
diff --git a/plugins/jetpack/bin/partner-provision.sh b/plugins/jetpack/bin/partner-provision.sh
deleted file mode 100755
index 587bd2a6..00000000
--- a/plugins/jetpack/bin/partner-provision.sh
+++ /dev/null
@@ -1,228 +0,0 @@
-#!/usr/bin/env sh
-
-# accepts: partner client ID and secret key, and some site info
-# executes wp-cli command to provision Jetpack site for given partner
-
-usage () {
- echo 'Usage: partner-provision.sh \
- --partner_id=partner_id \
- --partner_secret=partner_secret \
- --user=wp_user_id \
- [--wp-cli-path=/usr/local/bin/wp]
- [--plan=plan_name] \
- [--onboarding=1] \
- [--wpcom_user_id=1234] \
- [--wpcom_user_email=wpcom_user_email] \
- [--url=http://example.com] \
- [--force_connect=1] \
- [--force_register=1] \
- [--allow-root] \
- [--partner-tracking-id=1]'
-}
-
-# Note: this script should always be designed to keep wp-cli OPTIONAL
-# so that it can be run outside of the WordPress installation.
-WP_CLI_COMMAND="wp"
-WP_CLI_ARGS=""
-
-# Default API host that can be overridden.
-if [ -z "$JETPACK_START_API_HOST" ]; then
- JETPACK_START_API_HOST='public-api.wordpress.com'
-fi
-
-PROVISION_REQUEST_ARGS=""
-PROVISION_REQUEST_URL="https://$JETPACK_START_API_HOST/rest/v1.3/jpphp/provision"
-
-for i in "$@"; do
- case $i in
- -c=* | --partner_id=* )
- CLIENT_ID="${i#*=}"
- shift
- ;;
- -s=* | --partner_secret=* )
- CLIENT_SECRET="${i#*=}"
- shift
- ;;
- -i=* | --user_id=* | --user=* )
- WP_USER="${i#*=}"
- WP_CLI_ARGS="$WP_CLI_ARGS --user=${i#*=}"
- PROVISION_REQUEST_ARGS="$PROVISION_REQUEST_ARGS --form local_user=${i#*=}"
- shift
- ;;
- -w=* | --wpcom_user_id=* )
- WPCOM_USER_ID=${i#*=}
- PROVISION_REQUEST_ARGS="$PROVISION_REQUEST_ARGS --form wpcom_user_id=${i#*=}"
- shift
- ;;
- -e=* | --wpcom_user_email=* )
- PROVISION_REQUEST_ARGS="$PROVISION_REQUEST_ARGS --form wpcom_user_email=${i#*=}"
- shift
- ;;
- -p=* | --plan=* )
- PROVISION_REQUEST_ARGS="$PROVISION_REQUEST_ARGS --form plan=${i#*=}"
- shift
- ;;
- -o=* | --onboarding=* )
- PROVISION_REQUEST_ARGS="$PROVISION_REQUEST_ARGS --form onboarding=${i#*=}"
- shift
- ;;
- -u=* | --url=* )
- WP_CLI_ARGS="$WP_CLI_ARGS --url=${i#*=}"
- SITEURL="${i#*=}"
- shift
- ;;
- --force_register=* )
- PROVISION_REQUEST_ARGS="$PROVISION_REQUEST_ARGS --form force_register=${i#*=}"
- shift
- ;;
- --force_connect=* )
- PROVISION_REQUEST_ARGS="$PROVISION_REQUEST_ARGS --form force_connect=${i#*=}"
- shift
- ;;
- --partner-tracking-id=* )
- PROVISION_REQUEST_URL="$PROVISION_REQUEST_URL?partner-tracking-id=${i#*=}"
- shift
- ;;
- --allow-root )
- WP_CLI_ARGS="$WP_CLI_ARGS --allow-root"
- shift
- ;;
- --wp-cli-path=* )
- WP_CLI_COMMAND="${i#*=}"
- shift
- ;;
- -h | --help )
- usage
- exit
- ;;
- * )
- echo $(usage) >&2
- exit 1
- esac
-done
-
-WP_CLI_CHECK=$($WP_CLI_COMMAND --skip-plugins --skip-themes option get home 2>/dev/null)
-if [ -z "$WP_CLI_CHECK" ]; then
- WP_CLI_EXISTS=0
-else
- WP_CLI_EXISTS=1
-fi
-
-if [ "$WP_CLI_EXISTS" -eq "1" ]; then
- WP_CLI_ARGS="$WP_CLI_ARGS --skip-themes --skip-plugins=$($WP_CLI_COMMAND plugin list --field=name | grep -v ^jetpack$ | tr '\n' ',')"
-fi
-
-if [ "$CLIENT_ID" = "" ] || [ "$CLIENT_SECRET" = "" ] || [ "$WP_USER" = "" ]; then
- echo $(usage) >&2
- exit 1
-fi
-
-jetpack_shell_is_errored() {
- if [ -z "$1" ]; then
- exit 1
- fi
-
- JSON_ERROR=$( jetpack_echo_key_from_json "$1" error | xargs echo )
-
- if [ -z "$JSON_ERROR" ]; then
- return 1
- else
- return 0
- fi
-}
-
-jetpack_is_wp_cli_error() {
- if [ -z "$1" ]; then
- exit 1
- fi
-
- if [ ! -z $( echo "$1" | grep Error:) ] || [ -z "$1" ]; then
- return 0
- fi
-
- return 1
-}
-
-jetpack_echo_key_from_json() {
- if [ -z "$1" ]; then
- exit 1
- fi
-
- echo $1 | sed -n "s/.*\"$2\":\"\([^\"]*\)\".*/\1/p"
-}
-
-# Fetch an access token using our client ID/secret.
-ACCESS_TOKEN_JSON=$(
- curl \
- --silent \
- --request POST \
- --url https://$JETPACK_START_API_HOST/oauth2/token \
- --header 'cache-control: no-cache' \
- --header 'content-type: multipart/form-data;' \
- --header "Host: public-api.wordpress.com" \
- --form client_id="$CLIENT_ID" \
- --form client_secret="$CLIENT_SECRET" \
- --form grant_type=client_credentials \
- --form scope=jetpack-partner
-)
-
-if jetpack_shell_is_errored "$ACCESS_TOKEN_JSON"; then
- echo "$ACCESS_TOKEN_JSON" >&2
- exit 1
-fi
-
-ACCESS_TOKEN=$( jetpack_echo_key_from_json "$ACCESS_TOKEN_JSON" access_token | xargs echo )
-
-# If we don't have an access token, we can't go further.
-if [ -z "$ACCESS_TOKEN" ] || [ "$ACCESS_TOKEN" = "" ]; then
- echo "$ACCESS_TOKEN_JSON" >&2
- exit 1
-fi
-
-# Silently ensure Jetpack is active
-# Intentionally not quoting $WP_CLI_ARGS so that words in the string are split
-if [ "$WP_CLI_EXISTS" -eq "1" ]; then
- $WP_CLI_COMMAND $WP_CLI_ARGS plugin activate jetpack >/dev/null 2>&1
-fi
-
-if [ -z "$SITEURL" ] && [ "$WP_CLI_EXISTS" -eq "1" ]; then
- SITEURL=$( $WP_CLI_COMMAND $WP_CLI_ARGS option get siteurl | xargs echo )
-fi
-
-PROVISION_REQUEST_ARGS="$PROVISION_REQUEST_ARGS --form siteurl=$SITEURL"
-
-PROVISION_REQUEST=$(
- curl \
- --silent \
- --request POST \
- --url "$PROVISION_REQUEST_URL" \
- --header "authorization: Bearer $ACCESS_TOKEN" \
- --header "Host: public-api.wordpress.com" \
- --header 'cache-control: no-cache' \
- --header 'content-type: multipart/form-data;' \
- $PROVISION_REQUEST_ARGS
-)
-
-if [ -z "$PROVISION_REQUEST" ]; then
- echo "{\"success\":false,\"error_code\":\"unknown_error\",\"error_message\":\"Empty response from server\"}" >&2
-fi
-
-if jetpack_shell_is_errored "$PROVISION_REQUEST"; then
- echo "$PROVISION_REQUEST" >&2
- exit 1
-fi
-
-# Get the access token for the Jetpack connection.
-ACCESS_TOKEN=$( jetpack_echo_key_from_json "$PROVISION_REQUEST" access_token | xargs echo )
-
-# If we have an access token, set it and activate default modules!
-if [ ! -z "$ACCESS_TOKEN" ] && [ "$ACCESS_TOKEN" != "" ] && [ ! -z "$WPCOM_USER_ID" ] && [ "$WP_CLI_EXISTS" -eq "1" ]; then
- AUTHORIZE_RESULT=$( $WP_CLI_COMMAND $WP_CLI_ARGS jetpack authorize_user --token="$ACCESS_TOKEN" )
- if jetpack_is_wp_cli_error "$AUTHORIZE_RESULT"; then
- echo "{\"success\":false,\"error_code\":\"authorization_failure\",\"error_message\":\"$AUTHORIZE_RESULT\"}" >&2
- exit 1
- fi
-fi
-
-echo "$PROVISION_REQUEST"
-exit 0
diff --git a/plugins/jetpack/changelog.txt b/plugins/jetpack/changelog.txt
deleted file mode 100644
index 4d654616..00000000
--- a/plugins/jetpack/changelog.txt
+++ /dev/null
@@ -1,4247 +0,0 @@
-== Changelog ==
-
-**This is a list detailing changes for all the past Jetpack releases. For more information about the current release, see [the readme](https://github.com/Automattic/jetpack/blob/master/readme.txt).**
-
-= 7.1.1 =
-
-* Release date: March 06, 2019
-* Release post: https://wp.me/p1moTy-foJ
-
-**Bug fixes**
-
-* General: avoid conflicting with other plugins when suggesting Jetpack features on the Plugins screen.
-* Publicize: avoid errors when the feature is not active on a site.
-* Widgets: improve performance of the Top Posts and the Blog Stats widgets on high-traffic sites.
-* Subscriptions: fix an issue that prevented displaying subscribers count in the subscription forms.
-* Tiled Galleries / Slideshows: ensure they can be displayed properly in Internet Explorer 11.
-
-= 7.1 =
-
-* Release date: March 05, 2019
-* Release post: https://wp.me/p1moTy-e9x
-
-**Major Enhancements**
-
-* Block Editor: this release introduces 6 new blocks:
- - the Ads block allows you to insert different ads from [our WordAds program](https://jetpack.com/support/ads/) within your posts and pages.
- - the Mailchimp block allows your readers to easily subscribe to your Mailchimp newsletter.
- - the Video block supports VideoPress videos if you've purchased our Premium or Professional plan.
- - the Slideshow block allows you to insert beautiful slideshows in your posts and pages.
- - The Business Hours blocks is useful for companies who want to display their business's Opening Hours on their site.
- - The Contact Info block is useful for any business who may want to display useful information on a post or page.
-
-**Enhancements**
-
-* Admin Page: move Carousel settings from Performance to Writing section.
-* Ads: include search results pages under the `Archive` toggle.
-* Block Editor: improve block registration structure for better management of block availability.
-* General: remove IE8 support fallbacks.
-* General: add feature suggestions to the plugin search screen.
-* Image CDN: add new mode that disables the creation of resized images, thus saving disk space.
-* Instagram: update embed to support Instagram TV URLs.
-* Post Images detection: add support for alt text.
-* Plans: clarify upgrade prompts in the Jetpack dashboard's Plans page.
-* Publicize: remove the Google+ interface as the Social Network is now deprecated.
-* Related Posts: update block to allow for up to 6 related posts.
-* Social Menus & Icons: add Discord Support.
-* Support: add additional tests to check when Jetpack isn't working as expected and ensures all current debugging platforms use the same testing list.
-* Simple Payments: add generic currency fallback symbol.
-* Sync: further performance improvements in PHP 7+ environments.
-* Woocommerce Analytics: include product type with analytics data.
-
-**Improved compatibility**
-
-* General: replace all .dev TLD references by .test as the .dev TLD will soon become available for registration.
-* PHP 7.3: introduce automated testing for PHP 7.3.
-* Site Accelerator: ensure compatibility with the AMP plugin.
-* Twenty Nineteen: fix Top Posts and Pages Widget image list margins.
-* WordPress 5.1 Compatibility: update usage of `wp_schedule_single_event` to match changes in WordPress.
-
-**Bug fixes**
-
-* Copy Post: ensure the feature can be used when using non-standard post formats.
-* Infinite Scroll: fix vertical spacing for new posts loaded with Infinite Scroll.
-* Internationalization: fix minor problem affecting translations in the block editor.
-* Mobile Theme: fix PHP notices when trying to display gallery images.
-* Mobile Theme: fix redirection issues when clicking on the "Desktop version" links.
-* Photon: add paypalobjects.com to the list of banned domains, as this domain already relies on a CDN.
-* Publicize / Subscriptions: do not show message at the top of the editor when creating a private post.
-* Spelling / Grammar: fix error when spellchecking the contents of a Classic block in the block editor.
-* Top Posts: allow fetching posts from a long timeframe when using the `jetpack_top_posts_days` filter.
-* Related Posts: avoid display a dulplicated set of related posts when using the Related Posts block.
-* REST API: fix a bug causing Likes settings on a post to sometimes be flipped.
-* Security: fix an XSS vulnerability in the "My Community" widget.
-* Security: avoid bypassing Protect's Math Fallback challenge.
-* Site Stats: do not show the Jetpack logo in the Stats dashboard widget title in the Screen Options tab.
-* Theme Tools: support alternative Pinterest domain extensions in the Social Menus tool.
-* Widgets: support alternative Pinterest domain extensions in the Social Icons Widget.
-* Widgets: update the Cookies & Consents Banner to be fully accessible on mobile devices.
-
-= 7.0.1 =
-
-* Release date: February 14, 2019
-* Release post: https://wp.me/p1moTy-eFX
-
-**Improved compatibility**
-
-* Publicize: update LinkedIn connections to use newer API, anticipating changes with LinkedIn's API v1 on March 1st.
-* Publicize: display a message inviting site owners to reconnect their site to their LinkedIn profile.
-* Publicize: remove section in Settings > Sharing in the dashboard.
-
-**Bug fixes**
-
-* Tiled Galleries: avoid errors when converting a tiled gallery into a block.
-* Security: ensure json_encode()d data safely output to the page.
-* Shortlinks: do not show Jetpack Sidebar in the block editor if Shortlinks are not available.
-* Sync: avoid errors in WordPress' code editor, for sites using PHP 7 with `fastcgi_finish_request` enabled.
-
-= 7.0 =
-
-* Release date: February 05, 2019
-* Release post: https://wp.me/p1moTy-dqO
-
-**Major Enhancements**
-
-* Block Editor: introduce a new Gif block to help you quickly search and add Gif images to your posts.
-* Copy Post: this new feature allows you to quickly create a new draft based on a post that's already published.
-
-**Enhancements**
-
-* Block Editor: update the way we check for available blocks and extensions.
-* Connection flow: display a notice upon connection when the site is suspended.
-* Contact Form: add more options to customize the look of the submit button.
-* Likes / Publicize: in the Jetpack Dashboard, add explanation to clarify the role of the features.
-* REST API: add likes and sharing settings to the REST API Post response.
-* Sharing: deprecate the Google+ sharing Button.
-* Sharing: deprecate the Google+ embed shortcode.
-* Shortcodes: rely on WordPress Core to handle SlideShare slideshow embeds.
-* Shortcodes: cache the output of the Twitter shortcode.
-* Subscriptions: remove obsolete polyfill JavaScript from the Subscriptions form.
-* Subscriptions: allow more customization of the subscription form's submit button.
-* Sync: improvements to the synchronization of plugin and theme updates.
-* Sync: improve performance for sites using PHP 7, with `fastcgi_finish_request` enabled.
-* Sync: synchronize plugin and theme fatal errors reported by WordPress 5.1.
-* Widgets: deprecate the Google+ widgets.
-* WordPress.com: allow the display of plugin action links in the WordPress.com plugins' interface.
-
-**Improved compatibility**
-
-* Lazy Images: fix a compatibility issue with themes that overwrite classes on html.
-* Contact Form: ensure contact form submissions with long words do not break the site layout, regardless of the theme.
-* Publicize: remove the option to connect your site to a Google+ account, in anticipation of the service's shutdown.
-
-**Bug fixes**
-
-* Admin Page: avoid PHP notices when looking at non-Jetpack admin pages.
-* Carousel: fix display issue when viewing images with long captions.
-* Carousel: avoid errors when fetching comments in the Carousel modal.
-* CSS: fix the behavior of the CSS concatenation filter.
-* Multisite: fix the display of the main connection banner.
-* Protect: ensure the Math fallback is displayed when necessary.
-* Publicize: avoid Fatal Errors on sites using Development Mode.
-* Responsive videos: do not apply for videos that benefit from WordPress' own Responsive Embeds solution.
-* Shortcodes: only load Mailchimp CSS when needed.
-* Subscriptions: display subscription options below the comment form, even when you are logged in to your WordPress account.
-* WordPress.com REST API: add new endpoint to allow the creation of a WooCommerce connection via the API.
-
-= 6.9 =
-
-* Release date: January 10, 2019
-* Release post: https://wp.me/p1moTy-cEZ
-
-**Major Enhancements**
-
-* Block Editor: this release introduces new blocks: a Subcription form block, a Tiled Gallery block, and a Related Posts block.
-
-**Enhancements**
-
-* Admin Page: several changes to improve navigation and connection flows for new and existing Jetpack site owners.
-* Admin Page: make the Jetpack dashboard wider on large screens for a better experience.
-* Affiliate tools: offer options for affiliate partners to manage affiliation links on their site.
-* Carousel: add support for the new Tiled Gallery block.
-* Contact Form: use the comment blacklist to filter contact form submissions.
-* Dashboard notices: automatically dismiss notices once a feature has been activated.
-* Dashboard notices: fix styling to work better with the Hello Dolly plugin.
-* Internationalization: add new locales, ensure existing ones are up to date.
-* REST API: new endpoint to expose Gutenberg block and plugin availabilty.
-* Search: add hook to get_filters() to allow the use of custom filters.
-* Shortcodes: add new Mailchimp shortcode to insert Mailchimp subscription forms anywhere in your posts and pages.
-* SSO: offer message introducing the feature to new users.
-* Stats: improve the design of the Stats dashboard widget.
-* Widgets: add filter to set DoNotTrack in Twitter Timeline widget.
-* WordPress.com REST API: add new option to set sites to private.
-
-**Improved compatibility**
-
-* AMP: ensure that all Jetpack features are compatible with the latest version of the AMP plugin. Solves issues previously encountered with sharing buttons and stats.
-* Images: ensure that images inserted with new block editor can be used in Open Graph Meta tags, Related Posts, and Publicized posts.
-* PHP 7.3: avoid PHP warnings so the plugin can be fully compatible with the latest version of PHP.
-* Sharing: do not add Jetpack's Twitter Meta Tags when the WP To Twitter plugin is active.
-* Twenty Nineteen: additional style adjustments to make sure all Jetpack widgets look good with the theme.
-* WooCommerce: do not include product reviews in comment counts in the WordPress.com REST API.
-
-**Bug fixes**
-
-* Admin Page: update feature limits mentioned when disconnecting Jetpack from WordPress.com
-* Block Editor: fix loading of translations in the editor when Jetpack's Site Accelerator feature is active.
-* Carousel: ensure that Carousel works well with the Gallery block in the new block editor.
-* Carousel: do not open modal when clicking on a link in a caption
-* Publicize: improve synchronization of sharing settings with WordPress.com.
-* Publicize: only display Gutenberg Publicize UI to users with the correct permissions.
-* Responsive videos: don't load if theme supports core responsive embeds.
-* Search: fix fatal error when the Search Widget is enabled while the site is in Development Mode.
-* Sharing: update Tumblr official sharing button.
-* Shortcodes: update YouTube shortcode to support more video link formats.
-* Shortlinks: add the option to view shortlinks in the block editor.
-* Simple Payments: only register block when all needed data is available.
-* Widgets: only load Social Icons widget scripts and styles when necessary.
-* WooCommerce Analytics: avoid Fatal Errors in some specific site setups.
-* WooCommerce Analytics: improve performance by avoiding unnecessary calls to the feature when it is not needed.
-
-= 6.8.1 =
-
-* Release date: December 6, 2018
-* Release post: https://wp.me/p1moTy-d3t
-
-**Bug fixes**
-
-* Contact Form: security changes to improve the display of success messages after submitting a form.
-* Publicize: avoid Fatal errors when trying to create or edit posts from a Custom Post Type that supports Publicize.
-* Sync: improve synchronization of WooCommerce events.
-* WordPress.com REST API: handle WooCommerce Product reviews for a better display in apps that use the API.
-
-= 6.8 =
-
-* Release date: November 27, 2018
-* Release post: https://wp.me/p1moTy-cee
-
-**Major Enhancements**
-
-* This release introduces the first wave of Jetpack blocks built for the new block editor, available in WordPress 5.0.
-
-**Enhancements**
-
-* General: improve ability to create and troubleshoot Jetpack connections.
-* REST API: new endpoint for testing the Jetpack connection.
-
-**Improved compatibility**
-
-* Akismet: improve caching of all queries for Akismet status.
-* Spellcheck / Grammar: we've made sure the Jetpack feature did not create any error when using the block editor.
-* Twenty Nineteen: ensure compatibility with Jetpack's widgets.
-
-**Bug fixes**
-
-* Asset CDN: do not try to serve assets from non-public versions.
-* Carousel: handle galleries created via the Gallery block in the new block editor.
-* Photon: make sure our image CDN is fully compatible with the block editor.
-
-= 6.7 =
-
-* Release date: November 6, 2018
-* Release post: https://wp.me/p1moTy-aEq
-
-**Major Enhancements**
-
-* Site acceleration: new toggle to serve both your images and static files (like CSS and JavaScript) from our CDN.
-* Activity: update Jetpack dashboard to include links to our Activity page, where you can view a record of every change and update on your site.
-
-**Enhancements**
-
-* Admin page: add site Activity card.
-* Blocks: provide a mechanism so editor blocks can be translated.
-* Blocks: enqueue Jetpack blocks in the block editor when blocks are available.
-* Debug tools: add information about missing XML extension in self-help tools.
-* REST API: introduce endpoint for retrieving related posts of a particular post.
-* Search: add an advanced `excess_boost` param which can be adjusted with filters to fine tune query scoring.
-* Sharing / Publicize: change the icons used in the Jetpack dashboard to clarify where the configuration links lead.
-* Secure Sign On: update wording on admin pages to avoid confusion.
-* Shortcodes: update the Polldaddy shortcode to use the new brand, Crowdsignal.
-* Sitemaps: coding standards changes.
-* Site Verification Tools: improve display of the tool's description on mobile devices.
-* Unit Tests: improve process for faster tests.
-
-**Improved compatibility**
-
-* Themes: ensure compatibility between Jetpack features and the new WordPress default theme, Twenty Nineteen.
-* AMP: add support for GitHub's Gist shortcodes.
-* PHP 7.3: update Infinite Scroll to avoid PHP warnings when using the latest version of PHP.
-* Protect: fix output of Protect's Math challenge on login forms created by third-party plugins.
-* Plugins: add a WordPress.com themed plugins page for users managing their plugins via the WordPress.com interface.
-* Site Verification Tools: do not enable Google's Auto-verification option when a site using a maintenance / coming soon plugin.
-
-**Bug fixes**
-
-* Blocks: update the VR block to be fully compatible with the latest version of WordPress and Gutenberg.
-* Comment Likes: only prefetch domains used by the feature.
-* CSS Concatenation: make sure all concatenated CSS is up to date.
-* Featured Content: no longer hides the "featured" tag from the WordPress.com Editor or the mobile apps.
-* Geolocation: avoid a PHP notice when setting location for a post in the WordPress.com post editor.
-* Likes: ensure that the Likes column is accessible.
-* REST API: Ensure only strings as escaped as URLs.
-* Search: avoid PHP warning with Search widget.
-* Sharing: improve accessibility of email sharing button.
-* Simple Payments / Widget Visibility: avoid potential Fatal errors on some specific server configurations when updating Jetpack.
-* Sitemaps: remove double encoding of site name in news sitemap.
-* Sitemaps: ensure homepage is only included once.
-* Sitemaps: provide richer "not found" message to site admins.
-* Sitemaps: ensure sitemap is refreshed faster after upgrading Jetpack.
-* Sitemaps: avoid protocol mismatches between the sitemaps and the site.
-* Site Verification Tools: make sure we validate meta tags when saving.
-
-= 6.6.1 =
-
-* Release date: October 10, 2018
-* Release post: https://wp.me/p1moTy-aEt
-
-**Bug fixes**
-
-* Sitemaps: improve initial sitemap creation process.
-* Widgets: fix missing CSS for the Social Icons Widgets.
-
-= 6.6 =
-
-* Release date: October 9, 2018
-* Release post: https://wp.me/p1moTy-aa1
-
-**Major Enhancements**
-
-* Verification Tools: enable one-click site verification and sitemap.xml registration with Google.
-
-**Enhancements**
-
-* Admin Interface: update all Jetpack settings screens to use a similar design.
-* API: add flags to determine if Jetpack Search is enabled and supported.
-* CDN: First Beta version of the Photon CDN -- Speed up sites and increase max concurrent connections through Photon by cloud-hosting Jetpack and WordPress Core scripts, styles, and assets.
-* Contact Form: add filters to allow customizing the class attributes of inputs and buttons.
-* General: add more constants to error log for the Jetpack test suite.
-* Gutenberg: add infrastructure necessary to add new blocks via Jetpack.
-* Lazy Images: load the placeholder via the `srcset` attribute instead of the `src` attribute.
-* Masterbar: add link to Activity Log.
-* Publicize: the Path Social Network is closing in October. The option has consequently been removed from the Publicize interface.
-* Search: improve the feature activation process.
-* Search: update the admin interface to give more information about what the feature does and how it can be used.
-* Simple Payments: update all mentions of the product for a more consistent naming convention and less confusion for both site owners and translators.
-* Sync: log action when an attachment is added to a post for the first time.
-* Sync: add URL details to synchronization requests.
-* Sync: detect if a post is saved via Gutenberg when synchronizing post events.
-
-**Improved compatibility**
-
-* Shortcodes: update Mailchimp shortcode to match the new format offered by Mailchimp.
-
-**Bug fixes**
-
-* CSS Concatenation: add Authors and Social Icons widgets to concatenated styles.
-* Featured Content: avoid registering duplicate Post Types.
-* Geo Location: only enqueue Dashicons when necessary.
-* Google Analytics: do not output tracking code when the "Enhanced eCommerce" option is active, but the WooCommerce plugin is not.
-* Infinite Scroll: add a Privacy Link to the site's footer if a Privacy Policy was set up via WordPress's privacy options.
-* Infinite Scroll: fix video playback of VideoPress videos loaded via Infinite Scroll.
-* Protect: fix layout of legend that prompts the user to solve the math fallback so it works better in all languages.
-* Responsive Videos: avoid PHP notice.
-* Sharing: do not record stats if the stats module is disabled.
-* Sharing: allow saving sharing button options on media edit page as well.
-* Shortcodes: ensure we build minified and RTL stylesheets for slideshows.
-* Simple Payments: Stop contributors from creating inaccessible buttons with a "pending" post status.
-* Sitemaps: no longer add images attached to non-published posts to the image sitemap.
-* Slideshows: ensure arrows point in the right direction for RTL Languages.
-* Sync: avoid PHP notices when synchronizing user information.
-* VideoPress: avoid duplicate rel attributes in links.
-* VideoPress: do not block access to the Video settings for our customers using a 2-year plan.
-
-= 6.5 =
-
-* Release date: September 4, 2018
-* Release post: https://wp.me/p1moTy-a7U
-
-**Major Enhancements**
-
-* WordAds: Added ability to include custom ads.txt entries in the ads module.
-
-**Enhancements**
-
-* Admin Page: Added ability to disable backups UI by filter when VaultPress is not activated.
-* Comments: Moved the Subscription checkboxes on a comment form from after the submit button to before the submit button.
-* General: Removed the outdated "Site Verification Services" card in Tools.
-* General: Removed jetpack_enable_site_verification filter. We recommend filtering access to verification tools using jetpack_get_available_modules instead.
-* General: Simplified the logic of Jetpack's signed HTTP requests code.
-* Lazy Images: Updated lazy images to use a default base64 encoded transparent to reduce a network request.
-
-**Improved compatibility**
-
-* Geo Location: Fixed a compatibility issue with other plugins that added meta attributes to site feeds with the `rss2_ns`, `atom_ns` or `rdf_ns` filters.
-
-**Bug fixes**
-
-* AMP: Fix PHP notice when rendering AMP images with unknown width and height.
-* Contact Forms: We fixed an issue where personal data eraser requests didn't erase all requested feedback.
-* General: Improves compatibility with the upcoming PHP 7.3.
-* General: Updated input validation for meta tags given in site verification.
-* Lazy Images: Deprecated jetpack_lazy_images_skip_image_with_atttributes filter in favor of jetpack_lazy_images_skip_image_with_attributes to address typo.
-* Sharing: Fixed duplicate rel tags on Sharing links.
-* Search: Fixed an issue where a CSS and JavaScript file could be enqueued unnecessarily if the Search module was activated and if the site was using the Query Monitor plugin.
-* Shortcodes: Updated Wufoo Shortcode to always load over https and use async form embed.
-* Widgets: Fixed excessive logging issue with Twitter Timeline widget.
-* Widgets: Removed cutoff date check for Twitter Timeline widget as it is no longer necessary.
-* Widgets: Added decimal precision validator to Simple Payments Widget price field on the Customizer for supporting Japanese Yen.
-
-= 6.4.2 =
-
-* Release date: August 10, 2018
-* Release post: https://wp.me/p1moTy-9pL
-
-**Bug fixes**
-
-Comments: We fixed an error that broke functionality of Social Login for comments.
-
-= 6.4.1 =
-
-* Release date: August 8, 2018
-* Release post: https://wp.me/p1moTy-9pc
-
-**Bug fixes**
-
-Comments: We fixed an error that broke functionality of nested comments.
-
-= 6.4 =
-
-* Release date: August 7, 2018
-* Release post: https://wp.me/p1moTy-9md
-
-**Enhancements**
-
-* Connection: Updated connect splash screen with new content.
-* Sharing: Sharing section in wp-admin will now redirect to Calypso instead.
-* Docs: Added documentation for retrieving provision status of a site.
-* Shortcodes: Added oEmbed support for flat.io.
-* Widgets: Added `jetpack_top_posts_widget_layout` filter that allows you to create a custom display layout for the Top posts widget.
-* Privacy tools: Identify the data export/erasure callbacks for Feedback posts using associative keys, to better match the convention in Core.
-* Privacy tools: Added the `grunion_contact_form_delete_feedback_post` filter hook to allow specific Feedback posts to be bypassed during data erasure requests, similar to the `wp_anonymize_comment` filter in Core.
-* Contact Fork: Disabled random table optimizations on core tables.
-
-**Improved compatibility**
-
-* AMP: Improved AMP compatibility for Comments iframe.
-* General: The SEO Framework is no longer a conflicting Open Graph plugin and is now better compatible with Jetpack.
-
-**Bug fixes**
-
-* Shortcodes: Removed extra black bars from YouTube embeds as controls are inside the container now.
-* Simple Payments: Fixed the custom post type bug that affected Simple Payments widget for 2 year subscriptions.
-* Simple Payments: Fixed site failure which happens on Multisite installation with Simple Payments widget.
-* Simple Payments: Fixed syntax and misc compatibility issues with Simple Payments widget on PHP 5.2.
-* Simple Payments: Added warning for admin users if Simple Payments is not enabled but there are products published on pages/posts as a widget.
-* Lazy Images: Fixed an issue with images not loading while updating quantity in WooCommerce shopping cart.
-* Lazy Images: Fixed centered images that do not crop properly when no JavaScript is enabled.
-* General: Fixed auto scrolling to top when following the Quick Tour buttons.
-* General: Removed ability to set custom name for Site Identity section.
-* General: Added advanced control capabilities to image extraction from posts.
-
-= 6.3.3 =
-
-* Release date: July 30, 2018
-* Release post: https://wp.me/p1moTy-9n0
-
-**Facebook API Maintenance**
-
-On the 1st of August, 2018 Facebook sunsets its API allowing to post updates to your Profile Page. Only the API allowing to post to Facebook Pages will remain. This required several changes to Jetpack that we are presenting in this release:
-
-* Publicize: making sure we are handling existing connections gracefully.
-* Publicize: using logo font instead of images to make the UI up to date and mobile ready.
-* Publicize: removing the ability to select Facebook Profile connections in the UI.
-
-**Bug fixes**
-
-* General: properly handle Jetpack connection owner transition process.
-
-= 6.3.2 =
-
-* Release date: July 4, 2018
-* Release post: https://wp.me/p1moTy-96E
-
-**Bug fixes**
-
-* Simple Payment: Fix compatibility issues with PHP versions 5.3 and below
-
-= 6.3 =
-
-* Release date: July 3, 2018
-* Release post: https://wp.me/p1moTy-8ag
-
-**Major Enhancements**
-
-* Simple Payment: Added Simple Payment Products as Widgets, with the option to manage them via the Customizer.
-
-**Enhancements**
-
-* Connection: Added a new connect splash screen content.
-* Jetpack Dashboard: We removed the labels reading 'PAID' in order to introduce a better way to remark paid features.
-* General: Added support to display geo-location data added to posts and pages with Calypso.
-
-**Improved compatibility**
-
-* Protect: We solved an issue related to interaction with bbPress when trying to log in via a bbPress login widget. You would get redirected a few times to log in again after solving the math puzzle.
-
-**Bug fixes**
-
-* Comments: Implemented Core WordPress' Comment Cookie Consent Checkbox in Jetpack Comments.
-* General: We solved an issue that arised when using the Front End Editor feature plugin. A fatal error wass thrown due to us assuming the `enter_title_here` filter would only run within wp-admin.
-* General: Fixed a compatibility problem between WordPress TinyMCE and Jetpack Markdown when visiting the WordPress Dashboard.
-* Lazy Images: Fixed behavior for when JavaScript is disabled.
-* Markdown: We fixed the naming of the class used for code blocks that specify a language.
-* Simple Payments: Fixed an error when the user had published Simple Payment Products but their Professional Subscription had expired.
-* Sitemap: We fixed the format of the date shown for videos on the video sitemap.
-* Stats: We fixed the width of the Stats page for wide screens.
-
-= 6.2.1 =
-
-* Release date: June 8, 2018
-* Release post: https://wp.me/p1moTy-8am
-
-
-**Bug fixes**
-
-* AMP: We fixed the rendering of the stats pixel for legacy, non-paired, non-canonical AMP pages.
-* Shortcodes: Fixed a fatal coming form the VR shortcode when using the Gutenberg editor in the frontend.
-
-= 6.2 =
-
-* Release date: June 5, 2018
-* Release post: https://wp.me/p1moTy-88v
-
-**Major Enhancements**
-
-* Shortcodes: Added Gutenberg block for the [vr] shortcode.
-
-**Enhancements**
-
-* AMP: Allow Jetpack features to work on AMP pages, and prevent Jetpack features from rendering to the front end at all.
-* Content Options: We now exclude Custom Post Types like Portfolio and Testimonial when we toggle content/excerpt via the Blog Display option in the customizer.
-* Cookies & Consent Widget: Added a "top" option for the cookie widget position. The existing bottom of the screen position is the default.
-* Tiled Galleries: use Photon if active when a Tiled Gallery links to media file.
-
-**Improved compatibility**
-
-* Widgets: Deprecated the use of Widget IDs in the Twitter Timeline Widget given that Twitter deprecates Widget IDs on July, 27th 2018.
-
-**Bug fixes**
-
-* Contact Form: Fixed an issue with undefined variables and a warning being logged when submitting the Contact Form.
-* Contact Form: Fixed scrolling/height for very large contact forms.
-* Widgets: Fixed Cookies & Consent Widget's bottom margin for themes that set a specific margin for forms.
-* Related Posts: Made it not try to fetch related posts for an unpublished post.
-* Sharing: Fixed an issue that resulted in wrong URLs for sharing on WhatsApp.
-* Sharing: Fixed the way we check if Akismet is active and has a valid key by caching the result of the verification.
-* Shortcodes: Fixed the Facebook shortcode in wp-admin.
-* Widget Visibility: Fixed styling for MS Edge.
-* Widgets: Removed .widget class from Cookies and Consent widget styles since .widget is not used in every theme.
-
-= 6.1.1 =
-
-* Release date: May 22, 2018
-* Release post: https://wp.me/p1moTy-85t
-
-**Enhancements**
-
-* Ads: Added new setting for Banner consent expiration. Added new filter jetpack_disable_eu_cookie_law_widget, which can be used to disable the banner.
-* Ads: Added a new personalized-ads-consent cookie for ads-enabled sites.
-* Ads: Added requirement and notice, and button-click opt-in for ads module users.
-* Ads: When a user site has a Privacy Policy page set (introduced in 4.9.6), we now default to using that privacy policy as a custom policy URL.
-* GDPR: A new warning is displayed while configuring an instance of the EU Cookie Law widget: "Caution: The default policy URL only covers cookies set by Jetpack. If you're running other plugins, custom cookies, or third-party tracking technologies, you should create and link to your own cookie statement."
-* GDPR: Added Feedback data (i.e., Contact Form Submissions) to the Personal Data exported and/or erased by the latest version of WordPress core.
-
-**Bug fixes**
-
-* Ads: We updated Ads behavior to not show unless the visitor is on the main query within the loop.
-* General: We fixed a bug that resulted in an alert box showing for sites set to languages deriving from main ones.
-* Lazy Images: Fixed a bug where images would disappear when scrolling.
-* Sharing: make sure JS files can be loaded on development sites.
-* Sharing: Added check for validating Akismet key before allowing sharing by email.
-* WooCommerce Analytics: Fixed PHP warning when attemping to get a list of plugins.
-
-= 6.1 =
-
-* Release date: May 1, 2018
-* Release post: https://wp.me/p1moTy-7Sj
-
-**Major Enhancements**
-
-* WordAds: Introduced shortcode for inline Ad placement.
-* WordAds: Added support for the ads.txt file.
-
-**Enhancements**
-
-* Dashboard: We improved the styles of status numbers so it doesn't look like floating.
-* JSON API: Added support for Google My Business integration available on WordPress.com.
-* Masterbar: We removed the Next Steps link from the Account sidebar.
-* Publicize: Let the user know that we are going to send emails to subscribers and publicize to the different accounts.
-* Settings: Added "Privacy Information" links to each Jetpack module/feature card.
-* Shortcodes: Mixcloud shortcode now uses oEmbed.
-* Stats: Added a new filter jetpack_honor_dnt_header_for_stats, which if enabled would not track stats for visitors with DNT enabled.
-* Sync: Removed requirement for gzencode.
-* Widgets: always load script via HTTPS for Gravatar Hovercards.
-
-**Improved compatibility**
-
-* Social Icons Widget: Improved support on screen reader text for themes that do not provide support out of the box.
-* Sharing: Removed the sharing and like display functionality from Cart, Checkout, and Account WooCommerce pages.
-
-**Bug fixes**
-
-* Admin Page: We fixed the internationalization of the plans page.
-* Ads: We fixed a problem that impeded Premium Plan customers to activate Google Analytics.
-* Auto Updates: We fixed a warning being thrown due to a bad concatenation of strings.
-* General: Fixed a warning that was being logged due to attempting to use in_array() over a variable that didn't always contain an array.
-* General: Fixed Warning: count(): Parameter must be an array or an object that implements Countable showing on PHP 7.x.
-* JSON API: Fixed internationalization on embed endpoint.
-* Theme Tools: Show featured images in WooCommerce pages when Display on blog and archives is turned off for Themes that support this feature.
-* Publicize: Avoid adding Publicize post meta when a post transitions to publish and it is not a publicize-able post type.
-* Settings: Fixed the icon representing the minimum plan needed for SEO and Google Analytics features.
-* Slideshow: Fixed an invalid argument supplied for foreach() warning.
-* SSO: We fixed the name of a filter which contained a typo before. The filter is now named: `jetpack_sso_auth_cookie_expiration`.
-* SSO: Fixed some cases where we were not handling secure cookies for sites running over https.
-* Sync: Fixed Warning: Invalid argument supplied for foreach().
-* Sync: Fixed Warning: Warning: json_encode(): recursion detected.
-* WooCommerce Analytics: fixed broken Remove From Cart link.
-
-= 6.0 =
-
-* Release date: April 3, 2018
-* Release post: https://wp.me/p1moTy-7xM
-
-**Major Enhancements**
-* Admin Page: Introduced a new Privacy admin page linked at the bottom of the Jetpack dashboard.
-* Admin Page: Introduced a Privacy toggle that allows the user to disable event tracking.
-* Widgets: Added new Social Icons widget and deprecated old Social Media Icons widget.
-
-**Enhancements**
-
-* Activity Log: Started syncing comment untrashed and comment unspammed events.
-* Admin Page: Added inline module settings for plan welcome page.
-* Admin Page: Removed Javascript patterns previously used in the Admin Page that should improve performance lightly (bind pattern).
-* Admin Page: Made Jetpack Monitor setting management easier by adding a simple toggle.
-* Admin Page: Moved the button for closing the Jumpstart modal closer to the dialog so it's more visible.
-* Admin Page: Updated the "install and activate" link in the Backups card to be a functional link matching the "Set up" button.
-* Admin Page: Updated notices style to be more accessible.
-* Admin Page: We now show a link to see all plans on small screens.
-* Admin Page: Settings in Jetpack dashboard now feature contextual help and a link to learn more about it.
-* Ads: Added site id to head meta.
-* Comments: Improved accessibility of comments form by adding title attributes.
-* Connect: Removed account creation links from below the Set Up Jetpack buttons.
-* General: Show correct available status in Jetpack modules list if module is not supported by current plan.
-* General: Removed holiday snow module.
-* General: Return error in wp-cli if activating a module that is not supported by the current plan.
-* Google Translate Widget: Made sure the widget is responsive by default.
-* JITM: We now allow specifying that a jitm can be opened in a new window, or the same window.
-* JITM: We now don't use all caps for buttons text.
-* Likes: Removed Likes from Jumpstart.
-* Likes/Sharing: Moved metabox in post editor to the right side for a better fit.
-* Masterbar: Made the Sign Out link in the Master always log you out from WordPress.com.
-* Publicize: Made styling of Publicize more consistent with wp-admin.
-* Protect: Started blocking XML RPC requests when they get marked as blocked by Protect.
-* Search: Made the Search widget available whether or not Extra Sidebar Widgets is enabled.
-* SEO Tools: Removed SEO Tools from Jumpstart
-* Shortcodes: We now load Twitters widget.js over https.
-* Subscriptions: We've made it a better experience if you try to subscribe to a site you are already subscribed to.
-* Sync: Stopped syncing personal data coming from WooCommerce orders.
-* VideoPress: Default to grid view when linking to upload videos
-* Warm Welcome: Added Search to the features listed on the Warm Welcome dialog for Professional Plan.
-* Widgets: Added rel=noopener attribute to links in the Display WordPress Posts widget if set to open in a new window.
-
-
-**Improved compatibility**
-
-* bbPress: Markdown support added for bbPress CPTs.
-* PHP 7.1: Fixed an error coming from one of our json-api endpoints.
-
-**Bug fixes**
-
-* Admin Page: Fixed Dashboard connection card from showing text that overflows the card.
-* Admin Page: Fixed directory separator character used when displaying the site URL on the disconnect dialog.
-* Admin Page: Fixed an issue by which clicking the back button on a page visited after the Admin Page would result in the Admin Page being rendered with cached data.
-* Admin Page: Don't show a Set Up button when searching for modules that are inactive in Jetpack Settings page. The Set Up button is meant for paid features coming from plugins.
-* Admin Page: Make it clear when tracking begins in the connetion dialog.
-* Admin Page: Hide the date range tabs when the initial dialog is shown.
-* Admin Page: Fixed the positioning of popovers in the Jetpack Settings page.
-* Admin Page: Fixed a bug with the Ads settings toggle.
-* Admin Page: Fixed a display issue for the custom user capability "jetpack_connect".
-* Admin Page: Made sure translations are properly applied to several phrases.
-* Connection Banner: Updated style to better fit wide screens.
-* Connection Banner: Added illustration SVGs.
-* Contact Form: Fixed width style of input for Website address.
-* Google Analytics: fix PHP notice on search pages.
-* Infinite Scroll: Fixed issues where the first was being duplicated on scroll.
-* Likes: Made manually enabled likes remain being likeable if Likes are enabled for all posts
-* Masterbar: Fixed a javascript error that would pop up with the Grammarly extension enabled on Chrome macOS.
-* Search: Added default values for the Search widget so it can be added from the Customizer.
-* Settings: Fixed overflow/overlap when there are many ignored phrases in spelling options.
-* Settings: Updated SEO/analytics links to avoid unnecessary redirects.
-* Stats: Fixed column spacing styling issues in WP Dashboard box for Jetpack stats.
-* VaultPress: Remove menu item that links nowhere when Rewind is enabled.
-* Widgets: Fixed issue with custom URL choice and selective refresh in the EU Cookie Law widget.
-* WooCommerce Analytics: Fixed PHP warning coming from str_replace usage.
-* WooCommerce Analytics: Started tracking all possible ways to add a product to a cart.
-
-== 5.9 ==
-
-* Release date: March 6, 2018
-* Release post: https://wp.me/p1moTy-7mW
-
-**Major Enhancements**
-
-* WooCommerce Analytics: Added a new module for WooCommerce analytics that will use Jetpack's analytics functionality to help you track activity on your WooCommerce store.
-* Custom Content Types: Added support for excerpts on Testimonial and Portfolio.
-
-**Enhancements**
-
-* Activity Log: Improved the way we show failed login attempts in Jetpack's Activity Log.
-* Admin Page: We now hide settings for Lazy Images and Photon in the Admin page when the modules are not enabled due to being filtered out by jetpack_get_available_modules.
-* Admin Page: Now we only show the dismissal button in Apps card of the Jetpack Dashboard for admin users.
-* Build: Added a pre-commit hook for linting the Jetpack Admin Page source code. This aids in finding common syntax and style problems before having to wait for automated tests to run.
-* JSON API: We removed an obsolete endpoint for updating invites.
-* Onboarding: Added the ability to configure the country for a business address the using the Onboarding functionality of Jetpack.
-* Onboarding: Added the ability to enable the stats module when using the Onboarding functionality.
-* Onboarding: We now delete the onboarding token when the site gets connected.
-* Jetpack Start: Updated scripts for partners allowing to pass a tracking ID when provisioning or cancelling a plan which will help in debugging.
-* Jetpack Start: Improved the documentation for partners so they're now able to get them right on the Jetpack's Github repository under the docs/partners directory.
-* Plans: Correctly forward the client IP address for currency localization.
-* Plans: Updated the copy-text on Jetpack's Admin page for plans to be more concise on the features of each plan.
-* REST API: Added a plans endpoint to Jetpack's REST API to better handle the features of each Jetpack plan internally.
-* Search Implicitly activate Jetpack Search when attempting to add the Jetpack Search widget.
-* Search: Updated the Jetpack Search settings card to be more helpful in setting up the widget.
-* Search: We made the "Add Jetpack Search Widget" link in the Search module settings card open the widgets section of the customizer.
-* Search: Move any active search widgets to the inactive list if you disable the search module.
-* Search: Only log mysql and ES query times that are less than 60 seconds. There are some outliers that mess up our stats.
-* Sync: Improved the way widget titles are synchronized to WordPress.com servers when widgets are saved or updated.
-* Twitter Cards: Added new jetpack_twitter_image_default filter to allow themes and plugins to customize twitter:image when no suitable image is found automatically.
-* We updated the way we handle Jetpack's green color in out stylesheets for better compatibility with Jetpack's new logo.
-
-**Improved compatibility**
-
-* Admin Page: Jetpack's Admin Page javascript code is now fully compatible with React 16.
-* JSON API: Updated the modules endpoint Jetpack's JSON API to reply with a new property `override` that indicates if a module was either enabled or disabled by a filter.
-* Lazy Images: Updated the library used as IntersectionObserver for Lazy Images. We now use the W3C IntersectionObserver polyfill.
-* Lazy Images: Jetpack now allows the lazy images module to skip images with the skip-lazy css class or any given class of your choice by using the jetpack_lazy_images_blacklisted_classes filter.
-* Masterbar: Updated the sign out button behavior of the Masterbar to not sign you out of WordPress.com when you sign out of your site for regular Jetpack sites.
-* REST API: Updated the modules endpoint in Jetpack's REST API to be aware of modules that have been filtered through option_jetpack_active_modules allowing for better compatibility with custom Jetpack installation where the administrator decides to filter out specific Jetpack modules.
-* Sync: Added the jetpack_sync_action_before_enqueue action that's done when anything gets enqueued before being synchronized to WordPress.com servers.
-
-**Bug fixes**
-
-* Admin Page: Removed all linting warnings for the JS code of the Admin page. These were only shown in development builds.
-* Connect: Fixed an issue that sometimes resulted in a notice being shown about another user already having connected a Jetpack site when attempting to connect your site to WordPress.com
-* General: Added suppress_filters param to get_posts / get_children function calls.
-* Markdown: Updated WordAds code to not use create_function which is getting deprecated in PHP 7.2.
-* Sync: Fixed a problem in Jetpack Sync code when trying to get property of non-object in the post syncing file.
-* Sync: Stopped synchronizing the sitemap post types to WordPress.com servers as it was an issue given the size of these.
-* Tracks events: Track events are logged now only if the user has accepted ToS and not just if Jetpack is connected.
-* Widget Visibility: Added a decodeEntities function in widget-conditions.js to handle entity decoding for the minor conditions dropdown.
-* WordAds: Updated WordAds code to not use create_function which is getting deprecated in PHP 7.2.
-
-= 5.8 =
-
-* Release date: February 6, 2018
-* Release post: https://wp.me/p1moTy-731
-
-**Major Enhancements**
-
-* [Lazy Images](https://jetpack.com/support/lazy-images/): after a Beta
-period, you can now enable this new feature from Jetpack > Settings in your
-dashboard.
-* [Elasticsearch-powered
-search](https://jetpack.com/features/design/elasticsearch-powered-search/):
-also out of Beta! We've improved the way data is indexed behind the scenes,
-and made changes to the Search widget and its filters. (Elasticsearch is a
-trademark of Elasticsearch BV, registered in the U.S. and in other countries.)
-
-**Enhancements**
-
-* Comment moderation tools: moderation emails now point to WordPress.com when
-using the `edit_links_calypso_redirect` option.
-* Custom CSS: add CSS Grid Layout support.
-* Dashboard: update list of features available in Paid plans.
-* Dashboard: improve the display of notices inside the Jetpack dashboard.
-* Dashboard: update content displayed in the Jetpack dashboard when not
-connected to WordPress.com.
-* Development mode: improve the display of the development notice.
-* General: add a new filter, `jetpack_active_modules`, allowing site owners to
-filter the list of active modules.
-* Notices: add rel tags to notice links to avoid issues when links open in a
-new window.
-* Onboarding: add functionality for saving Business Address in the Contact
-Info widget.
-* Onboarding: save site type during site setup process.
-* Onboarding: enable loading of specific modules when using the Onboarding
-process.
-* Post Images: allow passing size when searching for images in HTML.
-* REST API: update the plugin installation process to use a new library.
-* REST API: allow changing the number of posts displayed in the RSS feed, and
-whether feeds display full text or a summary.
-* REST API: simplify our invites endpoint.
-* Sharing: make sure the Whatsapp button works on mobile and on desktop.
-* Sharing: add new filter, `wp_sharing_email_send_post_subject`, to allow
-modifying the email sharing subject line.
-* Shortcodes: update the GettyImages shortcode to use the new format required
-by GettyImages.
-* Site Settings: add support for site language and timezone settings.
-* Sync: improve synchronization of user actions, theme and plugin edits /
-updates, post status, updates on Multisite networks, Protect events, and
-WooCommerce's meta data.
-* WordAds: enable the Ads in the header by default.
-* WordAds: add filters so site owners can control the display of the ads via
-code as well.
-
-**Improved compatibility**
-
-* Lazy Images: fix issues with the Gazette theme.
-* Open Graph: add Open Graph Metabox to the list of conflicting plugins.
-* Masterbar: fix incompatibility with BeaverBuilder plugin.
-* PHP 7.2: fix issues when running Jetpack with PHP 7.2.
-
-**Bug fixes**
-
-* Carousel: fix PHP Notice with images using custom meta.
-* Dashboard: make sure all links to WordPress.com point to the right site's
-settings on WordPress.com.
-* Dashboard: update links to the plugin interface on WordPress.com to load the
-full plugin management page.
-* General: fix images shown in the dashboard when Jetpack is installed in a
-directory different than `jetpack`.
-* Lazy Images: make sure Lazy Load can be triggered even when images are added
-to the content very late.
-* Stats: make sure the Stats script is XHTML compliant.
-* Widgets: Mailchimp - avoid conflicts with jQuery UI.
-
-= 5.7.1 =
-
-* Release date: January 16, 2018
-* Release post: https://wp.me/p1moTy-7aS
-
-**Bug Fixes**
-
-* Protect: Fixed the math problem fallback for logging into Multisite installations.
-* Settings: Made sure that the Security tab is no longer constantly updating the displayed information.
-
-= 5.7 =
-
-* Release date: January 2, 2018
-* Release post: https://wp.me/p1moTy-6FR
-
-**Enhancements**
-
-* Added ability to create revisions of Portfolio Projects.
-* Users hosting their sites with our Pressable partner who have Rewind access can now jump from the new Activity card in the Jetpack dashboard to the Activity Log in WordPress.com and restore or download backups for the site.
-* Comments: Edit links for comments in the frontend can redirect to calypso if the Jetpack option `edit_links_calypso_redirect` is enabled.
-* Protect: Updated the styling of the Protect page for recovering access to your site when you're locked out of it.
-* Search: Improved the UI for customizing the Search widget.
-
-**Improved compatibility**
-
-* Comments: Updated our filtering behavior for Jetpack comments so other plugins appending html to the comments section are able to do it instead of being filtered out by Jetpack.
-* Widgets: We updated Goodreads URLs to support https schema.
-* Masterbar: We now hide the Masterbar settings card in Jetpack’s Admin Page for sites that are set to always show the Masterbar.
-* Lazy Images: Added a callback for processing image attributes array when attempting to lazy load images are loaded via `wp_get_attachment_image`.
-* Search: Added hooks to the search filters widget so that other plugins/themes can hook in and change its output.
-
-**Bug fixes**
-
-* REST API: Added a check for avoiding a fatal error when attempting to include Akismet class files in case the Akismet plugin files are present but the permissions on the files there are set to be not readable
-* Markdown: Fixed bug where code inside shortcodes wasn't correctly restored from the hash.
-* Search: Fixed the link that acts as a month and year filter removal toggle.
-
-= 5.6.1 =
-
-* Release date: December 14, 2017
-* Release post: https://wp.me/p1moTy-6Jk
-
-**Security Improvements**
-
-* Contact Forms: Hardened security in Contact Form processing.
-
-**Enhancements**
-
-* Sharing: Bumped the character limit to 280 when sharing a post to Twitter.
-
-**Bug fixes**
-
-* Widget Visibility: Fixed a bug that disabled "saving" the widget when removing a Widget Visibility rule.
-
-= 5.6 =
-
-* Release date: December 5, 2017
-* Release post: https://wp.me/p1moTy-6zt
-
-**Major Enhancements**
-* Google Analytics: Add support for universal analytics for WooCommerce.
-* Performance: minify all JavaScript files used in the plugin.
-* Performance: add new Lazy Images module.
-* Protect: add new mechanism allowing you to send yourself an email with a
-link to the form when you are locked out of your site.
-
-**Enhancements**
-* Custom CSS: add new set of font properties that can be used in the CSS
-editor.
-* Photon: do not remove `width` and `height` attributes from image tags when
-known.
-* Sitemaps: add CLI commands to purge and built the sitemaps.
-* Sitemaps: only display the reporter log success messages if
-`JETPACK_DEV_DEBUG` is defined.
-* WordPress.com API: add new endpoints to allow for better comment management
-in third party interfaces like WordPress.com.
-* WordPress.com Toolbar: prevent dns prefetching for logged out users.
-
-**Improved compatibility**
-* Stats: remove function deprecated in PHP 7.2.
-
-**Bug fixes**
-* Comment Likes: make sure Like text is properly translated.
-* General: only load stats code when necessary.
-* Related Posts: allow site owners to exclude multiple blog posts from the
-list of Related Posts.
-* Sharing: remove inline JavaScript used in the email sharing form.
-* Search: Maintain ordering of the search filters in the widget.
-* Sync: avoid PHP notices during the synchronization process.
-
-= 5.5.1 =
-
-* Release date: November 21, 2017
-* Release post: https://wp.me/p1moTy-6Bd
-
-**Bug fixes**
-* In Jetpack 5.5 we made some changes that created errors if you were using other plugins that added custom links to the Plugins menu. This is now fixed.
-* We have fixed a problem that did not allow to upload plugins using API requests.
-* Open Graph links in post headers are no longer invalid in some special cases.
-* We fixed warnings happening when syncing users with WordPress.com.
-* We updated the way the Google+ button is loaded to match changes made by Google, to ensure the button is always displayed properly.
-* We fixed conflicts between Jetpack's Responsive Videos and the updates made to Video players in WordPress 4.9.
-* We updated Publicize's message length to match Twitter's new 280 character limit.
-
-= 5.5 =
-
-* Release date: November 7, 2017
-* Release post: https://wp.me/p1moTy-6rk
-
-**Major Enhancements**
-
-* Jetpack is now fully compatible with WordPress's [new Gallery Widget](https://make.wordpress.org/core/2017/09/25/introducing-the-gallery-widget/). Your old Gallery widgets powered by Jetpack will switch to the new Widget when you update to WordPress 4.9.
-
-**Enhancements**
-* We have improved the performance when loading the Jetpack Settings in the dashboard by optimizing the number of calls made when loading the page.
-* We have updated the plugin to do a better job of cleaning up after itself whenever you decide to remove Jetpack from your site.
-* We made some changes to reduce the number of connection issues that may happen on a site when switching from HTTP to HTTPs.
-* We made some performance improvements to the Jetpack dashboard interface, to make sure your options and settings are loaded faster there.
-* Error messages are also better in the Jetpack Dashboard; whenever you can't update settings, Jetpack will provide you with more information about why.
-* We improved the Jetpack update process to make sure updating Jetpack does not stress your database during it, even on high-traffic sites.
-* The next version of WordPress, 4.9, will be released very soon and will include [a lot of changes to its code editors](https://make.wordpress.org/core/2017/10/22/code-editing-improvements-in-wordpress-4-9/). Jetpack's Custom CSS will be fully compatible with the new editors and their syntax highlighting feature.
-* We also made changes to make sure Jetpack was fully compatible with the [role and capability changes](https://make.wordpress.org/core/2017/10/15/improvements-for-roles-and-capabilities-in-4-9/) in WordPress 4.9.
-* We have made some performance improvements to the Carousel feature.
-* Contact Form: do not process shortcodes in widgets when WordPress itself does, starting in 4.9.
-* Contact Form: we have improved the "website" field to display better error messages when you don't supply a URL. We have also improved the look of the date picker for the date field.
-* Contact Form: avoid duplicate slashes when loading editor style.
-* Masterbar: update the "Plugins" menu item to match the updated design on WordPress.com.
-* Open Graph: do not display images smaller than Facebook's required size.
-* Sharing: use Google's minified libraries to improve performance when loading Google buttons.
-* Sharing: update Open Graph Image tags appearing on the home page to offer better alternatives based on your site settings in Appearance > Customize.
-* We improved the way sitemaps are built so they do not consume too much memory when they are generated.
-* WP.me Shorlinks: those links will now always use HTTPS.
-* Spellchecker: we improved the admin interface to make it more clear when adding ignored phrases and saving them.
-* Subscriptions: we added a filter so third party developers can track comment subscription activations.
-* Sync: synchronize plugin action links to add that information to WordPress.com.
-* Sync: improvements to better track theme and widget changes.
-* VideoPress: we removed Jetpack version locking for directly embedded VideoPress videos to ensure all users receive the newest version of the player.
-* We added a new filter (`jetpack_google_translate_widget_layout`) to the Google Translate Widget to allow you to change its layout.
-* WordPress.com REST API: improve comment management for all roles, including post authors.
-* WordPress.com REST API: allow site owners to manage comments on attachment pages from WordPress.com.
-* WordPress.com REST API: improve the response from the API when WordPress' autoupdates are disabled.
-
-**Improved compatibility**
-* You can now use Jetpack's contact form and Yoast SEO's Focus keywords on the same page without any issues in the editor.
-* Top Posts Widget: avoid Fatal Errors when the widget is used on a site using WPML, and when a popular post cannot be found by WPML.
-* Sync: add more Custom Post Types from third-party plugins to the list of things we do not synchronize with WordPress.com, to improve sync performance.
-* Sharing: since [Press This is now a plugin and not part of WordPress itself](https://make.wordpress.org/core/2017/11/02/press-this-in-4-9/), we removed the Press This sharing button if you are not using the plugin.
-
-**Bug fixes**
-* We now avoid displaying notices to user roles that cannot benefit or act based on the info in the notices.
-* Gravatar Hovercards: avoid PHP Notices when the user info is an object.
-* Infinite Scroll: avoid PHP notices when a site customizes galleries thanks to the `post_gallery` filter.
-* Mailchimp: make sure subscription forms can still be embedded in posts and pages.
-* Mailchimp: do not require the use of the shortcodes feature to use the Mailchimp widget.
-* Mailchimp: fix issue where Mailchimp form code could not be added to the Mailchimp widget.
-* Masterbar: avoid JavaScript errors by always loading jQuery.
-* Post By Email: do not display any content in the email address field if no email address has ever been set before.
-* Publicize: avoid errors when DOMDocument is not available.
-* Publicize: we now hide the feature activation toggle if you are not allowed to manage Jetpack features.
-* Search: make sure module cannot be activated when the site does not use a Plan.
-* SEO Tools: do not output any custom meta tags if another SEO plugin is already active.
-* Sharing: make sure Twitter Cards can be displayed even when a post does not include a title.
-* Sharing: fix alignment of sharing buttons in the admin preview when using custom sharing buttons.
-* Sitemaps: wait a minute before to generate sitemaps when the feature is activated, to avoid performance issues.
-* Sync: avoid synchronization issues on Multisite networks using custom domains.
-* Top Posts Widget: display the default title when it is set to empty.
-* Milestone Widget: make sure the widget is displayed properly and can easily be translated into other languages.
-* Verification Tools: avoid notices when saving changes on a Multisite network admin page.
-* VideoPress: avoid missing file warning in the editor when using an RTL language.
-* Upcoming events Widget: avoid PHP notices on sites using a custom timezone setting.
-* WordPress.com REST API: avoid errors when installing plugins via the WordPress.com API.
-
-= 5.4 =
-
-* Release date: October 3, 2017
-* Release post: http://wp.me/p1moTy-67V
-
-**Major Enhancements**
-* Multiple improvements to the connection process, to allow more people to use the Jetpack plugin, even on very specific server configurations.
-* Add a new Welcome screen to guide site owners after they have purchased a Jetpack plan.
-
-**Enhancements**
-* Add Schema.org markup to the Contact Info Widget.
-* Add a new "Date" field to the Contact Form.
-* Do not show any update notices when in [development mode](http://jetpack.com/support/development-mode).
-* Improve our documentation to help contributors set up a unit testing environment.
-* Avoid conflicts between Jetpack's Infinite Scroll and other Infinite Scroll plugins.
-* Improvements to the WordPress.com REST API to avoid issues when interacting with your site's categories and tags on WordPress.com.
-* Allow third party plugin and theme authors to add new menu items to the WordPress.com toolbar.
-* Improve the Content Options panel displayed in the Customizer with certain themes.
-* Add architecture for the Jetpack Search feature, available for Jetpack Professional users.
-* Simple Payments: improve the display of the payment items when used on your site.
-* Ensure a proper display of the Recipe shortcode on sites using an RTL language.
-* Improve the display of the Facebook posts, images, and all other Facebook embeds in your posts.
-* Synchronize the author information for all published posts.
-* Record how Jetpack was discovered and activated to better understand how site owners first discover Jetpack.
-* Improve the display and options offered with the Milestone Widget.
-
-**Bug fixes**
-* We fixed layout issues appearing in the admin interface for IE11 users.
-* Comment Form: avoid whitespace sometimes appearing below the form with some themes.
-* Contact Form: avoid errors in the post editor on sites using RTL languages.
-* Toolbar: always display the Toolbar when it's active, regardless of other admin bar settings.
-* Widget Visibility: make sure rules are correctly migrated from the old Jetpack image widget to the new WordPress Image Widget.
-* Avoid errors showing that Jetpack is out of date on WordPress.com, when running a Multisite network.
-* WP CLI: avoid warnings when using the `wp jetpack protect whitelist list` command to list the whitelisted IP addresses in the Protect feature.
-* Avoid displaying raw HTML in the Stats Configuration screen.
-* Comment edits are reflected properly in wordpress.com.
-
-= 5.3 =
-
-* Release date: September 5, 2017
-* Release post: http://wp.me/p1moTy-5Xv
-
-**Major Enhancements**
-* Full PHP 7.1 compatibility.
-* It's now possible to preview your site within WordPress.com.
-
-**Enhancements**
-* The Ads feature now gives you more options and control over the ads displayed on your site.
-* Increased performance in the admin by cutting back on unnecessary requests.
-* Loading comment avatars from Facebook and Twitter through a more secure https.
-* Admin UI is much friendlier on initial activation when there are no stats to display.
-* You're now able to stop VideoPress from looping a video during autoplay through the shortcode.
-* Made some optimizations to the Jetpack connection process which means connecting your site more is more reliable.
-* The EU Cookie Law widget got some styling improvements and looks better in any theme.
-* There's a new Jetpack CLI command to allow testing of the Jetpack connection.
-* Added the Likes and Monitor features to our recommended features list, making it easier to activate for new sites.
-* Improvements made that makes sure we have the most up-to-date version of your site when managing from WordPress.com.
-* Added a link to view your Comments in the WordPress.com toolbar.
-* Lots of minor design improvements to the Jetpack admin area.
-* We've found a few places where we were able to optimize the loading of css files.
-* Removed the Omnisearch feature.
-
-**Bug fixes**
-* Fixed compatibility issues with plugins using TinyMCE.
-* Contact Form submission emails have been fixed for sites hosted on SiteGround.
-* Updating WordPress.com themes will no longer have any problems.
-* The Sitemaps feature will no longer error with posts/images with special characters in the title.
-* There are no more conflicts with the ACF plugin when adding a new custom field.
-* Fixed a bug that would cause some plugins to throw warnings with the Shortcode feature.
-* We're no longer loading a font on the front-end for the Likes feature, which will also have some performance benefits.
-* The Jetpack admin UI had some bugs that were causing some features to not display the correct active status, which are squashed now.
-* Cleaned up our markup to avoid XHTML validation errors.
-* Brought back a filter for the Widget Visibility feature that was accidentally removed.
-* Managing your comments and comment authors more reliable from WordPress.com.
-
-
-= 5.2.1 =
-
-* Release date: August 2, 2017
-* Release post: https://jetpack.com/?p=22686
-
-**Bug fixes**
-* Solves an issue that caused widgets to lose their content when saved in WP Admin or Customizer.
-
-= 5.2 =
-
-* Release date: August 1, 2017
-* Release post: https://jetpack.com/?p=22509
-
-**Major Enhancements**
-* Contact Forms now sports a fancy new interface that allows you to visually compose your form in the editor.
-* We have a new and slick way to showcase and explain the features we recommend to activate to new users.
-
-**Enhancements**
-* Reduced 500kb from plugin zip file, which means faster updates.
-* Refactored and reduced code for Comment Likes so it's faster and lighter.
-
-**Bug fixes**
-* An inconsistency experienced in WordPress.com dashboard when Related Posts settings were set in the local site's WP Admin is now fixed.
-* Fixed a 404 when loading Open Sans font from a stylesheet plus now it's only enqueued if it will be used.
-* Solve PHP warnings when Image widget wasn't migrated.
-
-= 5.1 =
-
-* Release date: July 5th, 2017
-* Release post: https://jetpack.com/?p=20888
-
-**Major Enhancements**
-* You and your readers can now show appreciation to particularly clever comments with the new Comment Likes feature.
-
-**Enhancements**
-* Quickly visit your current site's front-end directly from the Masterbar's new "View Site" item.
-* Site data fetch from /me/sites REST API endpoint now includes `blog_public` in the list of returned options.
-* The Flickr widget now automatically displays images in a grid if there's enough room.
-* E-mail sharing is now disabled by default unless it's explicitly enabled by a filter or Akismet is active.
-
-**Compatibility Improvements**
-
-* Updated instructions in Flickr widget to reflect recent changes to the Flickr UI.
-
-**Bug fixes**
-
-* EU Cookie Law Banner cookie no longer cached.
-* WP Admin menu can now be accessed in mobile when Masterbar is displayed.
-* We now sync the `order_id` for `order_items` in older WooCommerce versions.
-* UI now handles VaultPress connection or registration problems gracefully.
-* Photon now works correctly with images uploaded before WordPress 2.7.
-
-= 5.0 =
-
-* Release date: June 6th, 2017
-* Release post: http://wp.me/p1moTy-5hK
-
-**Enhancements**
-
-* Several changes to the Jetpack dashboard and notices: alignment tweaks, code refactor, text simplification, and more.
-* Changes to the communication layer between your site and WordPress.com, to improve performance and allow you to do more to manage your site from WordPress.com.
-* Social menu gets icons for Etsy, Meetup, 500px, and Goodreads.
-* Jetpack data sync now better supports WordPress updates, themes changes, widgets, and multisite networks.
-* Video is updated to be fully compatible with the upcoming Media Widget.
-* Force secure WordPress.com API requests for request body, remove deprecated stats methods, and add new endpoints for post listing and user invitations.
-* Jetpack's Command Line tools can now output information about the primary Jetpack site owner. Try `wp jetpack status`!
-* Custom CSS now supports the `animation-fill-mode`, `fill`, and `stroke` properties.
-* Remove the "Menus" item from the WordPress.com toolbar for parity with the toolbar on WordPress.com.
-* Improve the display of the Omnisearch results page on sites using an RTL language.
-* Trim any white space when adding new email address in the Contact Info Widget.
-* Improve the look of your recipes in search engine result pages, when you use the Recipe shortcode.
-
-**Compatibility Improvements**
-
-* Improve the connection process for end users and hosts.
-* Improve compatibility of Jetpack data sync with WooCommerce and Pet Manager plugins.
-* Make sure Jetpack's SEO Tools don't conflict with other SEO plugins that may already be active on the site, like Yoast SEO or All In One SEO Pack.
-
-**Bug Fixes**
-
-* Add a "Set Up" button when a Personal plan is purchased, but VaultPress isn't active yet.
-* When the Ads feature is active, do not display Ads in RSS feeds.
-* Comments do not use Photon for Facebook and Twitter avatars and now avoid non-secure warnings when submitting comments on a HTTP site in Safari.
-* Contact form emails are now sent in a way that ensures they are correctly rendered as HTML.
-* Properly print the full list of modules when using the sync command in Jetpack's Command Line Interface (CLI).
-* Avoid errors when reordering a lot of Restaurant menu items at once.
-* Add a mechanism to detect broken connection states and resolve them.
-* Autosaves can now be restored as Markdown.
-* Photon no longer conflicts with Facebook's CDN, local images, and plugins that customize reponsive images.
-* Avoid potential PHP notice in Publicize.
-* Fix bad jQuery selector in Presentations shortcode.
-* Avoid fatal errors for Social Links on sites running PHP 7.1.
-* Properly escape button attribute in spellchecker.
-* Avoid PHP notices for stats on some sites when user roles are not attributed properly.
-* No longer attempt to sync options that do not exist and avoid fatal errors when de/activating plugins.
-* Avoid errors when Social Menu functions have already been defined in the theme or in another plugin.
-* VideoPress media items now always return their unique ID, and do not trigger any PHP notice.
-* Fix style of the EU Cookie Law Widget on themes with specific positioning.
-* Use correct time constant to define an hour in Upcoming Events Widget.
-* Avoid HTML encoding issues in sitemaps.
-
-= 4.9 =
-
-* Release date: May 2nd, 2017
-* Release post: http://wp.me/p1moTy-4Rl
-
-**Major Enhancements**
-
-* New "EU Cookie Law Banner", Flickr, and "Internet Defense League" widgets.
-
-**Slightly Less Exciting Enhancements**
-
-* Success notices are automatically dismissed after a short period.
-* Removed unused code from "My Jetpack" interface and deprecated an XML-RPC method.
-* Contact Form now adds display names to email addresses in the `To` header.
-* Added an updated multiple unit tests increasing code coverage.
-* Development mode now also shows module list.
-* Updated the list of locales available in Jetpack.
-* Plugin auto-updates only triggered from WordPress.com and now trigger WordPress' maintenance mode.
-
-**Performance Improvements**
-
-* Record comment content modifications and moderation events to make sure comments are always up to date on WordPress.com.
-* Sync post deletions, changes to sidebar, user events (addition, removal, and update) and theme installation.
-* We now distinguish between a new and an updated attachment.
-* Sync plugin and theme names when a related event is triggered including theme updates.
-
-**Compatibility Improvements**
-
-* Protect avoid conflicts with other plugins hooking into the log in form.
-* Contact Form not auto-activated when Ninja Forms is active.
-* WordPess.com REST API now allows `HTTP PUT` requests.
-
-**Bug Fixes**
-
-* Fixed wording in Post By Email button when no email address has been generated.
-* Fixed a notice in the subscription widget in PHP 7.1
-* Properly display VaultPress notices in the Jetpack dashboard.
-* VideoPress now included in search results for "video" and fixed positioning of search icon on mobile screens.
-* Protect supports IPv6 addresses properly.
-* Dashboard avoids API requests being cached on some hosts and avoids errors when Spellchecker is inactive.
-* Contact Form message content type is now set properly to restore compatibility with email plugins.
-* Ads not displayed in the portfolio projects custom content type.
-* Display all sites available in a network, even on large multisite installations.
-* Featured Image is always used in tweets posted via Publicize.
-* Avoid fatal errors when the exclusion parameter in Related Posts is not a string.
-* Allow the removal of all custom title settings in the SEO feature.
-* Make sure images are not distorted when Tiled Galleries uses Photon.
-* Avoid PHP warnings and errors in the Stats dashboard on Multisite.
-* Avoid errors when the Jetpack plugin is deleted.
-
-= 4.8.2 =
-
-* Release date: April 7th, 2017
-* Release post: http://wp.me/p1moTy-4P0
-
-**Bug Fixes**
-
-* Fixed a bug that prevented activating/deactivating of some features in PHP versions below 5.4.
-* Removed an unused function that was also incompatible with PHP versions below 5.4.
-* Fixed a bug that was causing a blank Jetpack admin area.
-
-= 4.8.1 =
-
-* Release date: April 5th, 2017
-* Release post: http://wp.me/p1moTy-4N5
-
-**Bug Fixes**
-
-* An incompatibility with PHP versions lower than 5.4 was introduced in the last release, causing a fatal error and we've immediately fixed this.
-* Sitemaps: Some plugins were relying on a function that was removed in the last release, which has been fixed.
-* General: Clicking on the info icon in the settings area will no longer jump to the top of the page.
-* General: The Anti-spam card will always display the correct status in the Jetpack dashboard.
-
-= 4.8 =
-
-* Release date: April 4th, 2017
-* Release post: http://wp.me/p1moTy-4gA
-
-**Major Enhancements**
-
-* Easier to navigate Jetpack's feature settings in your dashboard and WordPress.com.
-* New WordPress.com Toolbar provides quick access to site management, stats, and other services.
-* New MailChimp Subscribe Popup widget.
-* Sitemaps are faster and now support sites with a very large amount of posts.
-* Contact Form now has a plain-text alternative and better avoids spam filters.
-* Debug form includes extra information to better prioritize your support requests.
-* Photon can now be used within the dashboard, and supports bbPress topics and replies.
-
-**Slightly Less Exciting Enhancements**
-
-* Improved previously confusing wording in Stats dashboard, and Featured Content options.
-* You can now embed Apple Keynotes straight from icloud.com in your posts and pages.
-* Changed Infinite Scroll button text on taxonomy page and added a new filter to short-circuit the `is_last_batch()` method.
-* Open Graph now uses transients to save image IDs.
-* You can now use full URLs in the Social Media Icons widget.
-* Milestone widget now allows custom links to open in a new window.
-* VideoPress videos can be used as headers in themes that support it, like Twenty Seventeen.
-* Extracted the timezone offset method from the Upcoming Events widget so it can be used by other features.
-
-**Performance Improvements**
-
-* Database load is reduced during updates on large sites with multiple servers by retaining hashes for current and current-1 versions.
-* Disk storage is reduced on large multisite networks by storing the `jetpack_file_data` option in the `wp_sitemeta` table.
-* Jetpack plan data now uses the WordPress.com REST API.
-* Slovakian language files now rely on WordPress.org's language packs.
-
-**Accessibility Improvements**
-
-* Improved post details clipping for better screen reader support.
-* Updated custom language packs for multiple languages.
-
-**Security Improvements**
-
-* We now avoid path disclosure via cookies in PHP error messages.
-
-**Compatibility Improvements**
-
-* Removed deprecated functions `get_theme` and `get_current_theme`.
-* Publicize now works with third-party plugins like WP Recipe Maker.
-* Open Graph Meta Tags are now enabled when you use the "Head, Footer and Post Injections" plugin.
-* Better support for WooCommerce data sync and backup.
-* We now also sync the `sync_via_cron` setting, the user's chosen language, and WP Super Cache's globals and constants.
-* We no longer sync post types from the WordPress Automatic Plugin and RSS AutoPilot to avoid synchronization issues.
-* Sync settings can now be edited from the WordPress.com REST API to better troubleshoot sync issues.
-
-**Bug Fixes**
-
-* Gravatar is always displayed in Settings.
-* Submenu items always use relative links.
-* Contact Form avoids PHP notices when using the form in a Text widget.
-* Content Options now correctly displays single characters word count on sites with multibyte languages.
-* Administrator area translations fixed for several languages.
-* Added proper support for Formal/Informal translation versions for languages that support them.
-* Site Icons are always used as fallback Open Graph Image tags.
-* Protect removes port number when server returns a port alongside a stored IP address.
-* Filters ensure that more than 1,024 posts can be excluded from Related Posts.
-* When the email is already subscribed we now show the correct notification in the subscription form.
-* When using the Email sharing button, we now avoid syntax errors due to unexpected characters in the from name.
-* Remove deprecated `jetpack_publicize_post` action.
-* VideoPress now avoids PHP Notices when fetching video information.
-* Instagram base URL now uses `www` in the Social Media Icons widget.
-* All values entered in Facebook Page Plugin widget settings are now escaped.
-* Widget Visibility now avoids memory issues on sites with a lot of registered users.
-
-= 4.7.1 =
-
-* Release date: March 14th, 2017
-* Release post: http://wp.me/p1moTy-48Y
-
-**Bug Fixes**
-
-* Carousel: avoid javascript errors that may cause issues with Slideshows or Tiled Galleries.
-* Markdown: always enable Markdown for posts whenever the module is active.
-* Sharing: make sure that sharing buttons open in a small pop-up instead of a separate window.
-* SSO: Avoid token or nonce errors when trying to log in to your site via the Secure Sign On option.
-* VideoPress: add in the ability to get video thumbnails from the WordPress.com REST API.
-* Widgets: improve rendering of the Image Widget via Photon.
-* Widget Visibility: avoid empty widget visibility rules after updating to Jetpack 4.7.
-* Widget Visibility: restore the option to make widgets appear on archive pages of different Custom Post Types.
-* Widget Visibility: migrate widget visibility settings to the new major Page rule for Custom Post Types.
-* Widget Visibility: add missing CSS for widget visibility settings on sites using an RTL language.
-
-= 4.7 =
-
-* Release date: March 7th, 2017
-* Release post: http://wp.me/p1moTy-46L
-
-**Enhancements**
-
-* Quickly jump to post specific stats on WordPress.com with a new link.
-* We've added more information to our debug tools to improve your support experience.
-* New HTML5 versions of our house ads are out.
-* Display custom copyright EXIF information in the Carousel with this new filter.
-* We've highlighted the ability to export Contact Form feedback as it was being overlooked.
-* If you have images on WordPress.com we're going to skip using Photon when the images include resize parameters.
-* It is now possible to use the Sharing filter to customize the emails sent from the Email Sharing button.
-* We've updated the library powering the Print link in the Recipe shortcode.
-* Customize the speed and display of your slideshows with new Slideshow shortcode filters.
-* The Twitch.tv shortcode now uses Twitch's new embedded player.
-* Social Menus now come with the option to use SVG icons.
-* Customize the content of the Display Posts Widget with a new filter.
-* We've added a new email field to the Contact Info Widget.
-* The Image and the Text widgets now use Photon if it is enabled.
-* The WordPress.com REST API got several updates including using `register_rest_route()` consistently for registering, new date and time format settings, a filter for theme info results, new links and endpoints, and more.
-* We cleaned up the Google+ Shortcode JS library and added a way to filter the SlideShare shortcode.
-
-**Performance Improvements**
-
-* Experience better performance with single page load caching of the media summary.
-* We made some improvements to avoid slow queries on sites with thousands of images.
-* The Top Posts widget now utilizes an endpoint from the WP.com REST API improving performance.
-* Improve development mode performance by only calling `site_url()` once.
-* We rewrote the way major/minor rules lists are generated to save bandwidth, and memory for sites using Widget Visibility.
-* We've removed sync options that weren't needed to save memory during the sync process.
-
-**Accessibility**
-
-* We've improved the highlight of the stats range for a better visual experience and to make it consistent with other areas of the dashboard.
-* Added a missing label to one of the fields in the Email sharing dialog.
-* We've enabled keyboard focus styling in the new admin interface.
-* Increased padding to sharing buttons on mobile to avoid usability issues.
-* We've replaced Widget Visibility text labels with icons to improve usability on smaller devices.
-
-**Slightly Less Exciting Enhancements:**
-
-* We've added a filter to allow you to remove the Comment Form title.
-* The Development Mode notice got an update to include all possible options to activate Development mode.
-* Jetpack registration function got an update and cleanup.
-* A notice displayed to WooCommerce store owners now detects when WooCommerce Services is installed, but not active.
-* We've removed the Holiday Snow settings until you need them.
-* Improved Infinite Scroll settings to reduce confusion.
-* The HTML classes `infinite-scroll` and `neverending` are now applied using JS instead of PHP.
-* We've updated the support link appearing when you're locked out of your site.
-* New Unit Tests were added to make sure Publicize doesn't break when making changes to the Publicize process.
-* We've added a sync filter to allow customizing timeout.
-* The Top Posts widget now supports non-square image sizes.
-* Added the Video GUID to the media API endpoint.
-
-**Improved Compatibility**
-
-* Fixed some W3C validation errors in Comments.
-* Infinite Scroll now works beautifully with the Twenty Seventeen Theme.
-* Translate new terms easier with an improvement to the translator comments.
-* We switched to use Core functions to retrieve the list of sites in a multisite network for more accurate results.
-* We added Product visibility to post meta whitelist, for better control of products displayed in Related Posts.
-* We no longer sync specific post meta data added by Postman or WP RSS Multi Importer to avoid performance issues during the sync process.
-* We're now avoiding conflicts with plugins adding the core Video upload library to the post editor.
-* Removed deprecated compatibility code for older versions of WordPress.
-* We had some Shortcode conflicts with WordPress Post embeds, but that's been fixed.
-
-**Bug Fixes**
-
-* The Carousel `jp_carousel_load_for_images_linked_to_file` filter wasn't working well with Photon, this has been fixed.
-* Carousel is now working well when loaded from infinite scroll.
-* We removed double slashes from file paths in the Contact Form to avoid errors in specific server environments.
-* Fixed a problem where CSS was being stripped when migrating from Jetpack's Custom CSS to Core's CSS editor.
-* Our Debug Tool is now reporting the correct URL when WordPress lives in a subdirectory.
-* Found and fixed a PHP error when uninstalling Jetpack.
-* Infinite Scroll is no longer buggy when displaying the last page, and is more compatible with certain themes that were returning posts when there were none left to show.
-* We're now skipping Photon for .ashx files.
-* The Twitter character counter in Publicize got a fix to display info correctly.
-* Related Posts are now displaying correctly for everyone, and we brought back the `jetpack_sharing_headline_html` filter.
-* We've improved Sharing to render custom sharing services correctly, include Open Graph Meta Tags, and avoid JavaScript errors when jQuery is enqueued in the footer.
-* Synchronization scheduling issues have been resolved.
-* We're now trimming spaces in URLs for Image and Display Posts Widgets.
-* Widget Visibility wasn't playing nice on taxonomy pages, this is no longer the case.
-* The WordPress.com REST API received a couple of fixes to remove PHP errors when editing via the WordPress.com interface, authentication errors when using third-party apps, and permission errors when trying to preview edited posts in the WordPress.com editor.
-
-= 4.6 =
-
-* Release date: February 7, 2017
-* Release post: http://wp.me/p1moTy-40g
-
-**New Features and Improvements**
-
-* Enable Google Analytics without touching a line of code with this new Jetpack feature.
-
-**Performance Improvements**
-
-* We've updated all outbound links to use HTTPS to improve performance and security.
-* Photon now leverages a new WordPress core function to improve performance a bit.
-
-**Enhancements**
-
-* Keep an eye out for a note from WooCommerce on how your e-commerce store may benefit from our new USPS and CanadaPost shipping functionality.
-* We've added an error message if Publicize isn't functioning as it should be.
-* The Twitter Widget timeline now displays the tweet limit count as 20, prior to this it appeared to have no limit.
-
-**Slightly Less Exciting Enhancements:**
-
-* In an effort to help us better understand features that are being used, Twitter's timeline widget and Twitter's shortcodes now pass Jetpack's partner ID.
-* We've added new API endpoints allowing us to enable translation auto-updates and pull post rows and metadata for backups.
-* We're now retrieving all feature settings in the readable `/settings` endpoint.
-
-**Improved Compatibility**
-
-* We've eliminated some notices and warnings when using Jetpack on a server running PHP 7.1 or on servers where `print_r()` is disabled.
-* Photon now avoids PHP notices when your site is using plugins that do srcset CDN replacement.
-* When the sharing options appear to be incorrect due to site configuration issues we force it to retrieve the right options avoiding potential fatal errors.
-* We've added some shortcode CSS and widget class names prefixes to avoid conflicts with other plugins.
-
-**Bug Fixes**
-
-* Some sites were using illegal multibyte characters and failing to sync posts, this has been fixed.
-* IE11 was giving our admin layout a bit of a problem but we rectified that.
-* There were some PHP notices popping up when a site has no posts so we got rid of them.
-* The new Jetpack Ads feature will auto disable itself if your Jetpack plan doesn't support the feature.
-* We fixed a few PHP notices and warnings related to the Custom CSS feature.
-* The connection banner's "dismiss" icon was giving us a little trouble, but we got it fixed right up.
-* The Likes feature was showing a PHP notice when there was no $post object, this has been fixed.
-* We've brought back the Twitter Widget "noscrollbar" option.
-* We're now forcing only Photon URLs to HTTPS as your custom CDN URLs may use a different protocol.
-* If a Publicize connection is not shared with all users on the site, do not trigger Publicize for the other users.
-* Publicize was having trouble working with scheduled posts, this should be fixed now.
-* SSO may not have been displaying the login form when using JSON API authorization. Sorry about that, we've fixed it.
-* We've eliminated some PHP notices that were showing with some Shortcodes.
-* There was a Top Posts Widget image size issue when using list layouts, but is no longer causing issues.
-* We fixed some notices and warnings when updating data from the WordPress.com central interface.
-
-= 4.5 =
-
-* Release date: January 17, 2017
-* Release post: http://wp.me/p1moTy-3Kc
-
-This release introduces a brand-new module, Jetpack Ads, a brand-new VideoPress feature, and a lot of new shortcodes and widgets.
-
-**Exciting New Features and Improvements:**
-
-* Generate revenue from your site with an all-new WordAds feature, which when enabled displays high-quality ads for your visitors.
-* Today we are proud to release a fully redesigned VideoPress interface for easy uploading, management, and add-free playback of your fantastic videos now fully integrated with your Jetpack Premium or Professional plans.
-* Spice up your sidebar with new widgets that display blog stats, author info, "Follow my blog" buttons, and even an event countdown.
-* Embed your amazing 360° photos with the VR shortcode
-* Link your visitors to your Tumblr or Twitch pages using the new icons in the Social Media Icons Widget.
-
-**Enhancements**
-
-* Use the beautiful Jetpack carousel feature to display single images.
-* Turn on and update Related Posts right from the Customizer.
-* Customize the output of the Related Posts headline using a new filter.
-
-**Performance and Security Improvements:**
-
-* Your Custom CSS will now be served in a separate stylesheet when it is more than 2,000 characters.
-* Your Stats queries are now always being made over HTTPS.
-* Holiday Snow files now load in the footer, but rest assured the snow still falls from above.
-* We have improved Jetpack's synchronization process to support more plugins and use less resources.
-* The jQuery Cycle script used by slideshow galleries is now minified, resulting in faster loading times.
-
-**Slightly Less Exciting Enhancements:**
-
-* The JSON API now allows updating translations and alternative theme installation methods.
-* Public Custom Post Types are now automatically available via the WordPress.com REST API.
-* We've added a token-based authentication mechanism to the REST API in order for the site to be able to receive authenticated requests from WordPress.com.
-* Use `sync` commands in Jetpack's WP CLI.
-* You can now set the value for options directly in the Contact Form shortcode.
-* Updated some verbiage around IP Whitelisting on the Protect settings screen.
-* Custom sharing buttons got some new variables.
-* RIP blip.tv — we've removed your shortcode.
-* Improved Image and Display Posts Widget settings to provide more explanation and better error messages.
-* We've added a few new Content Options to the Customizer for supported themes.
-* Improved the Facebook Widget to avoid confusion when editing width and height settings.
-* Added and improved a few shortcodes.
-
-**Improved Compatibility:**
-
-* If your server is misconfigured and we can't get an IP address we're going to deactivate Protect and send you a notice so you're in the loop.
-* The WPML compatibility file wasn't loading at the right time, but we've fixed that.
-* We've improved compatibility with tools like Cavalcade to avoid stuck Cron jobs.
-* Some selected WooCommerce data (order items and order item meta) are now syncing to WordPress.com.
-
-**Bug Fixes**
-
-* You'll notice numerous design improvements to the Jetpack UI.
-* Accessibility is important to us so we've made some improvements there.
-* Missing attachments in the Carousel were causing an infinite loop, but we've corrected that.
-* Eliminated a PHP Notice when running the CLI `wp jetpack` command.
-* PHP warnings in the Restaurant Menu Post type have seen their last day with us.
-* Fixed a bug that displayed the wrong connected user for up to 24 hours after they disconnected.
-* Removed a deprecated function to prevent notices when using Infinite Scroll in the Customizer.
-* Long titles in Jetpack widgets weren't looking so great, so we cleaned them up.
-* Before now you weren't able to create a child category from WordPress.com. Now you can!
-* Rogue colons were showing up in the related posts area on sites with the Twenty Fourteen and Twenty Sixteen themes.
-* Fixed a ReCaptcha error on the Email sharing button.
-* Confirmed Instagram embeds actually load when using Infinite Scroll.
-* Site Icons now display on the WordPress.com site management interface.
-* Set a default time limit of 30 seconds when sending sync requests via Cron.
-* Synchronized supported shortcodes on a site.
-* Fixed an issue where empty categories weren't showing with the Widget Visibility feature dropdown.
-* Fixed various little bugs when working with multiple widgets in the Customizer and in the Widgets admin screen.
-* Added a Translate Widget default title in case you haven't defined one.
-* The Top Posts Widget now avoids layout issues when using the Grid layout while displaying a post without an image.
-
-= 4.4.2 =
-
-* Release date: December 6, 2016
-* Release post: http://wp.me/p1moTy-3JR
-
-This release improves Jetpack compatibility with WordPress 4.7.
-
-**Compatibility changes**
-
-* Custom CSS: Made the Custom CSS feature of Jetpack compatible with the CSS Customizer editor in WordPress 4.7.
-* Sync: improved compatibility with the wp-missed-schedule plugin.
-
-**Bug fixes**
-
-* Featured Content: made sure there is no infinite loop when removing the featured tag from the tag list.
-* Admin: made sure help tabs are not being hidden.
-* Admin: made At a Glance page work nicely when there is no backup data yet.
-* Sync: now making sure that needed classes are loaded, preventing errors.
-* Sync: cleared out unneeded scheduled jobs.
-
-= 4.4.1 =
-
-* Release date: November 22, 2016
-* Release post: http://wp.me/p1moTy-3JR
-
-**Bug Fixes**
-
-* Fixed an issue where some users with slower servers would get an error on
-the Jetpack dashboard when `WP_DEBUG` was enabled.
-* Fixed an issue where users on a Jetpack Professional plan who were paying
-monthly (as opposed to annually) wouldn’t be able to enable SEO Tools.
-
-= 4.4 =
-
-* Release date: November 21, 2016
-* Release post: http://wp.me/p5U9nj-2Ow
-
-**Enhancements**
-
-* Additional unit tests have been added to improve Jetpack's development process and stability.
-* Custom post types have been added to the WP REST API output.
-* Many of the screenshots throughout the plugin have been replaced by SVGs in order to make Jetpack smaller.
-* New endpoints have been added to allow the installation of plugin and theme zip files via the API.
-* Twelve new filters to make Jetpack more extensible! See: http://wp.me/p5U9nj-2Ow.
-* New widget: "Google Translate" to allow users to translate your site into their own language.
-* New widget: "My Community" where you can see who recently interacted with your site.
-* One of the biggest issues facing Jetpack users for years now has been difficulties in moving sites from one domain name to another. This update makes strides towards improving that process.
-* Photon now uses HTTPS by default. Secure all the things!
-* There are now helpful hints throughout the admin interface to make Jetpack easier to use.
-* We now allow you to embed pins, boards and profiles from Pinterest.
-* We've added a new feature: SEO Tools, available to Jetpack Professional subscribers. You can read more about our plans here: https://jetpack.com/features/
-* We've made numerous improvements to the data sync process.
-
-**Bug Fixes:**
-
-* Fixed link to Akismet settings.
-* Improved compatibility between Infinite Scroll and WPML.
-* Move email notification settings back with the other email settings in the Discussion Settings.
-* Various minor performance/compatibility fixes.
-
-= 4.3.2 =
-
-* Release date: October 13, 2016
-
-**Enhancements**
-
-* Unsaved changes were getting lost when users were navigating away from settings so we put in a confirmation message to prevent this from happening.
-* We've stopped counting carousel views in stats by default, you can use the `jetpack_enable_carousel_stats` filter to enable counting them again.
-* Stats are now responding faster.
-* There were several improvements and repairs made to sync including additional endpoints, performance enhancements, whitelisted data, better decision making around when to sync information, and more.
-* Markdown now has a CSS class on footnotes.
-
-**Improved Compatibility:**
-
-* We've improved compatibility with Kinsta by automatically turning on Staging Mode for Jetpack when in a staging environment.
-
-**Bug Fixes:**
-
-* Several fixes have been made to sync to repair issues with Publicize, Notifications, and Subscriptions.
-* We removed PHP warnings by checking to make sure json language files like jetpack-en_US.json are readable before we load them.
-* We found an unused option in Gravatar Hovercard settings and removed it.
-* The correct support link is now being used to make it easier for you to connect with the Jetpack team if you need us.
-* The permissions check for plugin information retrieval was fixed as well.
-* Some plugins were adding content on outbound http requests causing an infinite loop we fixed this right up.
-* We removed some warnings that were occurring when translations didn't exist by adding a fallback.
-* We've added Moroccan Arabic translations, and switched to language packs for Croatian, Spanish (Chile) and Greek.
-* Sync was running into issues so we've limited dequeue time to 1/3 of PHP's max execution time, which has unclogged the problem.
-* We're now sending full and incremental queues separately so that a failure in one doesn't block the other.
-* There was a JavaScript enqueuing error with our Sharing feature that has been repaired.
-* The Top Posts widget now includes the ability to list attachment (media) pages.
-* We weren't building CPT links correctly resulting in bad navigation, which is now fixed.
-* We removed the form legend for default Tiled Gallery settings as it doesn't relate.
-* With shortcodes we now return early from processing them if no string is passed, as they are required.
-
-= 4.3.1 =
-
-* Release date: September 8, 2016
-
-**Support Enhancements**
-
-* We're now syncing data about hosts so that we can provide better support
-when needed.
-* Minor update to inline docs to match version numbers.
-
-**Bug Fixes:**
-
-* Admin Page: fix error when Admin Page resources could not be fetched with
-`wp_remote_get` due to unique host configurations.
-* Admin Page: fix error when Post By Email could not be enabled when the
-browser's dev console was enabled.
-* Admin Page: make sure all translated strings are encoded properly.
-* Admin Page: only use POST requests for updating the state of Jetpack, to
-avoid issues on servers not allowing PUT requests.
-* Admin Page: search icon no longer overlaps the global notices.
-* Admin Page: make sure that non-admins can also modify Spellchecking
-settings.
-* Admin Page: check that a json language file like jetpack-en_US.json is
-readable before loading its contents and thus avoid a PHP warning.
-* General: Improve random number generation for compatibility with more hosts.
-* General: Add deprecated PHP file (class.jetpack-landing-page.php) back as an
-empty file, to avoid generating fatal errors on sites with aggressive caching.
-* General: Ensure concatenated CSS is generated for RTL languages.
-* Security: Ensure that all options are included on the security tab.
-* Stats: fix display for sites with pretty permalinks disabled.
-* Subscriptions: ensure that no email is sent when updating a published post.
-* Sync: To improve performance, add snapTW to the list of post meta data that
-won't be synchronized for each post.
-* Sync: do not schedule a full sync after each import.
-* Verification Tools: in the Settings card, use appropriate link for each
-service.
-
-
-= 4.3 =
-
-* Release date: September 6th, 2016
-
-**Exciting Performance and UI Improvements:**
-
-* We have launched the all new React powered interface, a year in the making,
-designed to give you better control of your favorite Jetpack features.
-
-= 4.2.2 =
-
-* Release date: August 19th, 2016
-
-**Bug Fixes:**
-
-* We fixed the code which displays the Facebook share count to accomodate
-Facebook's new data structure.
-* We fixed an issue which caused PHP notices to get logged for users of the
-Twenty Fourteen theme.
-* We fixed an issue with the Minileven mobile theme which was preventing it
-from loading.
-* Improved Sync performance.
-* Increase security by sanitizing a URL used in the SSO process.
-
-= 4.2.1 =
-
-* Release date: August 17th, 2016
-
-**Bug Fixes:**
-
-* We fixed a conflict between Jetpack and W3 Total Cache.
-* We fixed some issues with Publicize and Custom Post Types.
-* Very large Multisite networks with lots of users can now be synchronized
-with WordPress.com.
-* We improved the synchronization process between your site and WordPress.com.
-
-= 4.2 =
-
-* Release date: August 10th, 2016
-
-**Performance Enhancements:**
-
-* We’ve improved Jetpack’s performance by making calls to the database more
-efficient; essentially, Jetpack is doing less on each page load, making things
-faster. #4281, #4316
-* We’ve ensured that every feature uses information that is up to date by
-completely refactoring the way information was synchronized between your site
-and WordPress.com.
-* We've improved the way Jetpack queries for information about features, which
-results in less overall queries.
-
-**Exciting Feature and UI Improvements:**
-
-* We now track your visitor views of Carousel images in stats.
-* You can now customize advanced typographic settings like ligatures in the
-Custom CSS editor with new support for the `font-feature-settings` property.
-* We’ve improved the experience when you don’t actually have enough posts to
-Infinitely Scroll.
-* Our Contact Info Widget allows you to enter a Google Maps API Key which is
-now required by Google if you want to display a map.
-
-**Security:**
-
-* We’re continuing our efforts to harden Jetpack security, by implementing the
-`hash_equals()` function to avoid timing attacks when comparing strings. We
-also improved security on CSVs exported from your contact form.
-
-**Slightly Less Exciting Feature Improvements:**
-
-* The Cartodb shortcode has been changed to match the new product name, Carto.
-* The YouTube shortcode now uses the content width defined by the theme when
-available, even if an embed size was defined in an old version of WordPress.
-* Breadcrumbs now support hierarchical post types and taxonomies.
-* We’ve added the Portfolio Post Type to the WordPress.com REST API whitelist.
-* There are a few new parameters for the Dailymotion shortcode.
-
-**Improved Compatibility:**
-
-* We now work well with WP Stagecoach staging sites, so you should not see any
-future impact on production sites.
-* We had some PHP notices popping up in the WooCommerce plugin wizard screen,
-these are gone.
-
-**Bug Fixes:**
-
-* We stopped loading compatibility stylesheets on the default theme's singular
-views for Infinite Scroll.
-* Debug tests forwarded through the contact form in the Jetpack Debug menu are
-now successfully sent to the support team.
-* We’ve removed the PHP notices you might have seen when moderating comments.
-* There are no longer PHP notices cropping up when publishing via Cron.
-* We’ve fixed the official Sharing buttons so they now line up just right.
-* The PHP warnings of Sitemaps stylesheets have been eliminated.
-* We’ve done away with the warnings that appeared when Tonesque processes a
-file which claims to be one filetype, but is actually another.
-* We’ve exterminated PHP notices that appeared when using Random Redirect, as
-well as when the author wasn't set.
-
-= 4.1.1 =
-
-* Release date: July 7th, 2016
-
-**Bug Fixes:**
-
-* SSO: Use high-resolution Gravatar images on the log-in form on Retina
-devices.
-* Publicize: improve reliability of Publicize when publishing new posts.
-
-= 4.1 =
-
-* Release date: July 6th, 2016
-* Release Post: http://wp.me/p1moTy-3jd
-
-**Performance Enhancements:**
-
-* Carousel no longer loads full-size images in the previous and next previews,
-increasing the speed and performance of slideshows.
-* We’ve improved Jetpack’s performance by making calls to the database more
-efficient; essentially, Jetpack is doing less on each page load, making things
-faster.
-* We’ve improved Photon dev mode, eliminating unnecessary attempts to sync
-images.
-
-**Exciting Feature and UI Improvements:**
-
-* A new look: SSO, redesigned and refactored, provides a new and improved
-experience.
-* Tracking made simple: quickly view the number of unread feedback submissions
-in your sidebar.
-* Getting support just got easier! Access improved self-help tools in the
-Jetpack Debug menu.
-* Greater control over Infinite Scroll: pause and resume Infinite Scroll with
-two new JavaScript methods.
-* Improved Sharing: we’ve swapped image icons for icon fonts and added
-Telegram and WhatsApp buttons.
-* Untappd shortcode: now you can sip and share your favorite craft brews.
-Cheers!
-* Recipes, revamped: we’ve added new recipe shortcodes and options to create
-more detailed recipes.
-* Improved Gallery Widgets now use Photon to resize and serve images.
-
-**Security:**
-
-* We’re continuing our efforts to harden Jetpack security by implementing the
-`hash_equals()` function in an effort to avoid timing attacks when comparing
-strings.
-* We’ve made it easier to use SSL connections on ports `80` and `443`,
-improving our ability to communicate with an increased number of secure
-websites.
-* You will now receive a warning for any failed attempts when connecting your
-website via SSL.
-
-**Slightly Less Exciting Feature Improvements:**
-
-* Updated the Infinite Scroll settings verbiage, which was a bit confusing.
-* Removed Jetpack Audio Shortcode, which is no longer in use.
-* Redesigned Jetpack banner notices to match core notification styles.
-* Added an icon on a connected Jetpack user’s profile page, next to their
-name.
-* Added the ability to edit Portfolio custom-post-type options in the
-Customizer.
-* Added a new filter called `jetpack_publicize_capability` which allows you to
-override user role restrictions for Publicize.
-* Improved the connection process between Jetpack and WordPress.com making it
-easier to start using Manage.
-* Updated the Top Posts Widget so you can use and display posts that are older
-than 10 days.
-* Updated the Twitter Timeline Widget to support updates made by Twitter.
-* Improved the VideoPress Shortcode modal.
-* Updated VideoPress, which now defaults to HTML5 videos when the `freedom`
-shortcode parameter is in use.
-* Improved how Jetpack syncs by removing mock options.
-* Updated the naming convention for feedback posts.
-* Updated several JSON API endpoints to match WordPress.com endpoints, added
-support for custom taxonomies, and enabled trash as a valid status for the
-post update endpoint.
-
-**Improved Compatibility:**
-
-* A community member found and fixed a compatibility issue with our Open Graph
-Meta Tags and Bitly’s older plugin -- we now check to make sure we don’t
-create conflicts.
-* We’ve fixed a rare scenario where an error would occur when other plugins or
-sites were using the `JETPACK__GLOTPRESS_LOCALES_PATH` constant.
-
-**Bug Fixes:**
-
-* Comment avatars are now retrieved in a manner more consistent with the login
-avatar, improving consistency and eliminating the possibility of a future bug.
-* We eliminated PHP notices that were appearing when Custom Content Types were
-defined without labels or sections.
-* PHP memory limits were reached in rare cases when a website had thousands of
-revisions of their Custom CSS. The issue is fixed -- happy editing!
-* jQuery deprecated the `size()` function -- as a result, we’ve stopped using
-it as well.
-* A PHP notice popped up when plugins were updated from the WordPress.com
-plugin management interface -- these notices will no longer appear.
-* We fixed a bug where Photon wasn’t providing the original size for images
-that were being used outside of the post content.
-* We eliminated the PHP notices that displayed when posts with slideshows were
-added to a sitemap.
-* We fixed an error that was showing up in Sitemaps when a website permalink
-structure used `index.php`.
-* We eliminated JavaScript errors that displayed when tiled galleries were
-viewed.
-* We fixed an issue where image dimensions weren’t properly saved when added
-to a new widget.
-* Since Google Maps API keys are now required to use maps, we’ve updated the
-Contact Info Widget to allow site owners to set up their keys.
-* We fixed a bug where multiple `display` properties weren’t able to be saved
-in Custom CSS.
-
-= 4.0.4 =
-Release date: June 20th, 2016
-Release Post: http://wp.me/p1moTy-3eT
-
-Security:
-
-* Post By Email: Added an additional layer of security to prevent unauthorized
-changes to Post By Email settings.
-* Likes: Fixed an XSS vulnerability in the Likes module.
-* REST API/Contact Form: We've eliminated unauthenticated access to Feedback
-posts.
-
-Feature Improvements:
-
-* Customizing Protect: We've increased Protect’s response time and added a new
-filter, `jetpack_protect_connect_timeout`, reducing the likelihood of seeing
-the fall back form.
-* Connection Process: Your site url and icon are displayed on the Jetpack
-connection screens to help improve communication.
-* Jetpack for Multisite: It’s now easier to manage your Jetpack connections on
-the network admin screen.
-* Photon Responsive Image Improvements: We’re now auto-generating new scrset
-options, improving how images served from Photon are handled.
-* Developing on Kinsta: A new constant has been added to improve developing
-with Jetpack on a staging environment hosted with Kinsta.
-
-Jetpack UI Improvements:
-
-* Better Access to Our Support Team: We wanted to make it easier for you to
-get help so we added a contact form in the admin that links directly to our
-Jetpack Support Team.
-
-Improved Compatibility:
-
-* We’ve stopped adding Open Graph Meta tags if you’re using the SEO Framework
-plugin.
-* Having both GlotPress and Jetpack active at the same time was causing
-errors, we’ve eliminated them.
-
-Bug Fixes:
-
-* Fixed the handling of special characters like ampersands in Carousel Titles
-and Descriptions.
-* When visitors tried to view a Carousel image with a hash in the URL, a
-JavaScript error would occur; we’ve fixed that.
-* Jetpack Comment form fields now use the default language you’ve set for
-WordPress, previously the verbiage was always in English.
-* Custom CSS wasn’t handling slashes and quotes properly; we’ve squashed that
-bug.
-* There were some rare cases where PHP notices were popping up when a Contact
-Form was submitted. These instances have been identified and eliminated.
-* We’ve replaced a bit of code with a Jetpack native function to fix a bug
-that was breaking things during an API request for available updates.
-* We accidentally removed the ability for Open Graph to select images from
-slideshows, it’s up and running again.
-* There was an issue where Open Graph meta tags weren’t being set when your
-homepage is a “Static Front Page”, it’s working again.
-* In rare cases when developers were customizing Photon they were seeing a PHP
-notice when arguments were passed as a string rather than an array. This has
-been fixed.
-* We’ve fixed an issue where Protect’s backup math form wasn’t showing on
-custom front end login forms.
-* When setting up WooCommerce you might have seen a Related Posts notice which
-didn’t belong. We’ve eliminated them.
-* If you’ve been using our sharing tool with unofficial sharing buttons you
-might have noticed your sharing numbers were missing. They’re now back.
-* In unique situations where special characters were used in sitemap
-stylesheets an error would occur; that has been remedied.
-* We’ve fixed a problem with mismatching HTML tags in our Spelling and Grammar
-feature.
-* We’ve ensured that the `jetpack_disable_twitter_cards` filter actually
-removes Twitter cards.
-* We’ve fixed some JavaScript errors that would crop up if you were editing a
-custom-post-type post that didn’t support the core media editor — say that 10
-times fast.
-* We had some JavaScript errors when you were using the customizer to modify
-widgets. They are no longer with us.
-
-= 4.0.3 =
-Release date: May 26th, 2016
-Release Post: http://wp.me/p1moTy-3hm
-
-* Important security update. Please upgrade immediately.
-
-= 4.0.2 =
-Release date: April 21st, 2016
-
-Bug Fix:
-
-* Addresses an issue where Jetpack 4.0 caused a fatal error on sites with
-specific configurations.
-
-= 4.0 =
-Release date: April 20th, 2016
-Release Post: http://wp.me/p1moTy-3dL
-
-Performance Enhancements:
-
-* Protect: the routine that verifies your site is protected from brute-force
-attacks got some love and is more efficient.
-* Contact Forms: cleaning the database of spam form submission records is more
-efficient.
-
-Feature Improvements:
-
-* VideoPress: edit your VideoPress shortcode in the editor with a fancy new
-modal options window.
-* Custom Content Types are now classier: a new CSS class on Testimonial
-featured images — has-testimonial-thumbnail — allows you to customize Jetpack
-custom post types as you see fit.
-* Sharing: social icons are now placed under the "add to cart” singular
-product views in WooCommerce, making it easier for customers to share your
-products on social media.
-* Theme Tools: search engines will now have an easier time knowing what page
-they are on, and how that page relates to the other pages in your site
-hierarchy with improved schema.org microdata for breadcrumbs.
-* Widget Visibility: now you can select widgets and when to show or hide them
-right from custom post type single and archive views.
-
-Jetpack UI Improvements:
-
-* What’s in it for me? We’ve done a better job explaining the benefits of
-Jetpack and connecting it to WordPress.com.
-* Shortcodes: handy links to shortcode documentation convey the types of media
-you can quickly and safely embed.
-* Widgets: As of WordPress 4.5, Jetpack widgets now refresh in the customizer
-without making you refresh the entire page. Live previews, yes indeed.
-
-Bug Fixes:
-
-* Comments: we fixed a mistake where a comment subscription checkbox appeared
-on custom post types — despite the fact you couldn’t actually subscribe to
-those types of comments. Our bad.
-* Contact Forms: we fixed a bug where the telephone field (which can only be
-added manually) rendered incorrectly — breaking some forms in the process.
-* General: we blocked direct access to the Jetpack_IXR_Client class which
-caused fatal PHP errors in some server setups.
-* Shortcodes: we removed the frameborder attribute in the YouTube embed code.
-It was deprecated in HTML 5.
-* Unminified responsive-videos.min.js in order to address a false positive
-virus alert in ClamAV. Expect it to be re-minified in 4.0.3 once we resolve
-the issue with ClamAV.
-
-= 3.9.6 =
-Release date: March 31st, 2016
-Release Post: http://wp.me/p1moTy-3bz
-
-Bug fix: Shortcodes: fixed incorrect Vimeo embed logic.
-
-= 3.9.5 =
-Release date: March 31st, 2016
-Release Post: http://wp.me/p1moTy-3bz
-
-This release features several WordPress 4.5 compatibility changes that make
-several Jetpack features work properly in the Customizer view. Big thanks to
-@westonruter for contributing the code!
-
-Other enhancements and bug fixes:
-
-* Contact Form: no longer calling the datepicker method if it's not available.
-* SSO: settings checkboxes now honor filters and constants that restrict
-certain sign-in modes.
-* Shortcodes: fixed a problem with Gist fetching.
-* Shortcodes: fixed invalid HTML5 markup in YouTube embed code.
-* Shortcodes: made the Vimeo links work properly in case of multiple mixed
-uses in one post.
-
-= 3.9.4 =
-Release date: March 10th, 2016
-Release post: http://wp.me/p1moTy-396
-
-Bug fix: Shortcodes: Addresses an issue with embedded Vimeo content
-
-= 3.9.3 =
-Release date: March 9th, 2016
-Release post: http://wp.me/p1moTy-396
-
-Featured:
-
-* Site Logo now supports Custom Logo - a theme tool to be introduced in
-WordPress 4.5.
-
-Enhancements:
-
-* Carousel: Made the full size image URL use a Photon URL if enabled.
-* Comments: Removed an unnecessary redirect by always connecting via HTTPS.
-* General: Added new actions that fire before automatic updates.
-* Infinite Scroll: Introduced a later filter for settings.
-* Infinite Scroll: Removed code that is now redundant due to WordPress Core.
-* Markdown: Removed deprecated markup from the output.
-* Publicize: Improved handling of featured images in posts.
-* Shortcodes: Added houzz.com support.
-* Sitemaps: Added a language attribute to the news sitemap.
-* Sitemaps: Improved the image retrieval mechanism for posts.
-* Widgets: Added new filters in the Top Posts Widget code.
-* Widgets: Cleaned up the CSS for the Subscription widget.
-
-Bug Fixes:
-
-* Comments: No longer reloading the page on clicking the reply button.
-* Contact Forms: Fixed a fatal error on missing metadata.
-* Contact Forms: Fixed message formatting for plaintext email clients.
-* Shortcodes: Fixed dimensions of Vimeo embeds in certain cases.
-* Shortcodes: Fixed warnings and allowed shorter style Vimeo embeds.
-* Shortcodes: Removed alignment markup from feeds for YouTube embeds.
-* Sitemaps: Made URLs display properly according to the permalink structure.
-* Stats: Fixed non-XHTML-valid markup.
-* Widgets: No longer showing errors when adding new instances of the Display
-Post Widget.
-
-= 3.9.2 =
-Release date: February 25th, 2016
-Release post: http://wp.me/p1moTy-2Ei
-
-Maintenance and Security Release
-
-Featured:
-
-* Beautiful Math: fix XSS vulnerability when parsing LaTeX markup within HTML
-elements.
-* Contact Form: do not save private site credentials in post meta. Thanks to
-@visualdatasolutions.
-
-Enhancements:
-
-* Contact Info: Added two hooks for adding arbitrary information to the
-widget.
-* Development: Added new possibilities for REST API debugging.
-* Embeds: Added Codepen embeds support.
-* Embeds: Added Sketchfab embeds support.
-* I18n: Added support for translation packages for the Finnish language.
-* Markdown: Added a filter to enable skipping processing of developer supplied
-patterns.
-* Related Posts: Added a filter to change heading markup.
-* Staging: Added a constant to force staging mode.
-* Staging: Added a notice to make staging mode more obvious.
-* Top Posts Widget: Added a new `[jetpack_top_posts_widget]` shortcode.
-
-Bug Fixes:
-
-* Custom Post Types: Nova: Fixed a JavaScript bug on adding multiple items.
-* Embeds: Allowing embeds from Instagram with a www in an URL.
-* General: Fixed untranslated module names on the Settings screen.
-* General: Improved module descriptions and fixed misleading or broken links
-in descriptions.
-* General: No more notices on module deprecation on older installations.
-* General: Only showing one prompt to enable Photon when uploading several new
-images.
-* Multisite: Fixed a problem with site lists for older WordPress
-installations.
-* OpenGraph: Fixed a bug to properly fallback to a WordPress Site Icon image.
-* Photon: Improve performance for images over a secure connection.
-* Photon: No longer including links from data attributes.
-* Publicize: Fixed problems for en_AU and en_CA locales with Facebook.
-* Related Posts: Fixed a notice on certain requests.
-* Site Logo: It's no longer possible to choose a non-image.
-* Widget Visibility: No longer confusing page IDs and titles in certain cases.
-
-= 3.9.1 =
-Release date: January 21st, 2016
-
-Bug Fixes:
-
-* General: Addresses a namespacing issue which was causing conflicts on some
-hosting providers.
-* Sitemaps: Added MSM-Sitemap to the list of plugins which, if installed, will
-prevent Jetpack Sitemaps from being used
-
-= 3.9 =
-Release date: January 20th, 2016
-Release Post: http://wp.me/p1moTy-29R
-
-Featured:
-
-* New sharing button: let users share your content using Skype.
-* New "Social Menu" theme tool that uses Genericons to display Social Links.
-* Sitemap support for better search engine indexing.
-
-Enhancements:
-
-* Contact Form: Added a new filter that allows you to change the "Required"
-text.
-* General: Hidden archived sites in multisite site list.
-* General: Removed several function calls that would be deprecated in
-WordPress 4.5.
-* Infinite Scroll: Added a new filter to check if Infinite Scroll has been
-triggered.
-* Likes: Added a conditional to ensure WordPress 4.5 compatibility.
-* Photon: Improved compatibility with responsive images feature added in
-WordPress 4.4.
-* Photon: Now enabled by default on sites using HTTPS.
-* REST API: Extended the ability to manage users from WordPress.com.
-* REST API: Increased the performance of the plugin update endpoint.
-* Responsive Videos: Centering videos when they are wrapped in a centered
-paragraph.
-* Sharing: Added a new filter to customize the default OpenGraph description.
-* Shortcodes: Added Wistia oEmbed support.
-* Shortcodes: Bandcamp: Added support for new attributes for tracks approved
-by artists.
-* Shortcodes: Improved Medium path format recognition.
-* Slideshow: Improved compatibility with older IE versions.
-* Staging: Improved staging environment detection.
-* Widgets: Added "width" option to the Facebook Page widget.
-* Widgets: Added size parameters to tags in Top Posts to avoid warnings.
-* Widgets: Introduced major performance and stability improvements to the
-Display Posts Widget.
-* Widgets: Refactored to remove deprecated code patterns.
-
-Bug Fixes:
-
-* AtD: Fixed replacing emojis with images in the text editor in Chrome.
-* AtD: Made pre tags be excluded from spell-checking.
-* CPT: Not registering Nova if it is already registered.
-* Carousel: Fixed a bug where full size images were not always served by
-Photon.
-* Carousel: Reverted a change that broke direct link to carousel image.
-* Contact Form: Fixed a CSV export bug with multiple choice questions.
-* Contact Form: Fixed notices when creating feedback entries without a contact
-form.
-* General: Fixed a scrolling bug on modal window closing.
-* Infinite Scroll: Disabled in the Customizer when previewing a non-active
-theme.
-* Publicize: Fixed notices appearing with bbPress or BuddyPress installed.
-* Publicize: Showing options only to users that can change them.
-* Related Posts: Fixed incorrect URLs generated for posts.
-* Responsive Videos: Fixed warnings in debug mode.
-* Shortcodes: Bandcamp: Fixed a problem with large track IDs.
-* Shortcodes: Fixed a problem with dynamic Gist embeds.
-* Stats: Fixed dashboard widget resize problem.
-* Widgets: Added a fallback to English US when a locale isn't supported by
-Facebook.
-* Widgets: Fixed layout for Twenty Sixteen.
-
-= 3.8.2 =
-Release date: December 17th, 2015
-Release post: http://wp.me/p1moTy-26v
-
-Jetpack 3.8.2 is here to squash a few annoying bugs.
-
-Bug Fixes:
-
-* Photon: Fixed a bug where some custom thumbnail image sizes weren't being
-sized properly.
-* Shortcodes: Fixed an incompatibility with how WordPress renders the YouTube
-shortcode.
-* Shortcodes: Tightened up security in the Wufoo shortcode.
-* Image Widget: Now shows the caption.
-* Fixed typos in inline docs.
-* Very minor fixes to: Carousel, Publicize, Google+, and Infinite Scroll.
-
-= 3.8.1 =
-Release date: December 1st, 2015
-Release post: http://wp.me/p1moTy-23V
-
-Jetpack 3.8.1 is here and is fully compatible with WordPress 4.4.
-
-Featured:
-
-* Photon + Responsive Images FTW.
-* Fully compatible with Twenty Sixteen.
-* More accessibility enhancements.
-* Dropped some weight by optimizing Jetpack's plugin images.
-
-Enhancements:
-
-* Comments: filter to allow disabling comments per post type.
-
-Bug Fixes:
-
-* Carousel: Stop page from scrolling to top when Carousel is closed.
-* Carousel: Browser compatibility fixes with older version of IE.
-* Markdown: Fixed a bug that would strip markdown when saving in "Quick Edit"
-mode.
-* Single Sign On: Fixed login always redirecting to the admin dashboard.
-* Subscriptions: Filter to allow per-post emails fixed for use in themes.
-
-= 3.8.0 =
-Release date: November 4th, 2015
-Release post: http://wp.me/p1moTy-1VN
-
-We're happy to introduce Jetpack 3.8, which has significant contributions from
-the Jetpack community. Read more about it here: http://wp.me/p1moTy-1VN
-
-Feature enhancements:
-
-* New Google+ Badge Widget. Display your profile, page, or community Google+
-badge.
-* New twitch.tv shortcode embeds. Display a Twitch.tv stream in your posts.
-* Accessibility enhancements.
-* A handful of new filters to allow further customization of Jetpack.
-
-Other enhancements:
-
-* Carousel: Added support to retrieve image dimensions from an image url.
-* Carousel: Simpler algorithm to detect shutter speeds.
-* Contact Form: New "Checkbox with Multiple Items" field available in the
-Contact Form.
-* Contact Form: Allow pre-filling form fields with URL parameters.
-* Contact Form: Better styling of the emailed form responses.
-* Performance: Replaced some custom-built functions with core's native
-functions.
-* Related Posts: New filter to add post classes to post's container class.
-* Sharing: New filter to choose if sharing meta box should be shown.
-* Sharing: New filter to allow sharing button markup to be editable.
-* Sharing: New filter to allow you to specify a custom Facebook app ID.
-* Social Media Icons Widget: Added option for YouTube username as well as
-Channel ID.
-* Social Media Icons Widget: Added Google+ icon.
-* Social Media Icons Widget: New filter to allow you to add your own social
-media icons and links.
-* Subscriptions: Better errors to your visitors if their subscription sign-up
-fails.
-* Subscriptions: Removed "widget" class from Subs shortcode form.
-
-
-Bug fixes:
-
-* Carousel: Fixed browser back/forward button behavior.
-* Contact Form: Allow the email field to be set to empty when building form in
-post editor.
-* Facebook Likebox Widget: Fixed an issue where some languages were not
-translating.
-* Facebook Likebox Widget: Return a language when none found.
-* General: Fixed some minor styling issues in the Jetpack admin areas.
-* General: Add missing parameter to the_title filter call.
-* General: Prevent scrolling of body when the Jetpack admin modals are opened.
-* General: Update doc to reflect that Open Graph filter
-jetpack_enable_opengraph has been deprecated in favor of
-jetpack_enable_open_graph.
-* Infinite Scroll: Fixed an error that sometimes occurred that would stop
-posts from loading.
-* JSON API: Fixed some undefined notices when publishing a post with the API.
-* Open Graph: Fixed bug where facebook description content was sometimes being
-polluted by a filter.
-* Sharing: Use full SSL Pinterest url instead of protocol relative.
-* Sharing: Fixed plus signs appearing in tweets shared from iOS.
-* Shortcodes: Prefer HTTPS for video embeds to avoid mixed content warnings.
-* Subscriptions Widget: Fix HTML Validation error.
-* Theme Tools: Check oEmbeds for the presence of a video before adding the
-responsive videos filter.
-* Tiled Galleries: Add image alt attribute if there is a title set. This was
-breaking some screen reader functionality.
-
-= 3.7.2 =
-Release date: September 29th, 2015
-Release Post: http://wp.me/p1moTy-1LB
-
-* Bug Fix: REST API: Fixed an error when saving drafts and publishing posts
-
-= 3.7.1 =
-Release date: September 28th, 2015
-Release Post: http://wp.me/p1moTy-1LB
-
-* Enhancement: General: Added inline documentation for various filters and
-functions
-* Enhancement: General: Added custom capabilities for module management on
-multi-site installs
-* Enhancement: General: Cleaned up old changelog entries from readme
-* Enhancement: General: Cleaned up unused i18n textdomains
-* Enhancement: General: Updated the new settings page to look better in
-various translations
-* Enhancement: REST API: Added new endpoints to manage users
-* Enhancement: Sharing: Updated the Google logo
-* Bug Fix: Carousel: Page scroll no longer disappears after closing the
-carousel
-* Bug Fix: Contact Form: Fields are sent and displayed in the correct order
-* Bug Fix: Contact Form: No longer showing a notice on AJAX actions in
-feedback lists
-* Bug Fix: Contact Form: Made using more than two notification emails possible
-* Bug Fix: Contact Form: Mitigate a potential stored XSS vulnerability. Thanks
-to Marc-Alexandre Montpas (Sucuri)
-* Bug Fix: General: Mitigate a potential information disclosure. Thanks to
-Jaime Delgado Horna
-* Bug Fix: General: Fixed a locale error in the notifications popout
-* Bug Fix: General: Fixed a possible fatal error in the client area
-* Bug Fix: General: Fixed compatibility issues with certain use cases
-* Bug Fix: General: Disabled connection warnings for multisites with domain
-mapping
-* Bug Fix: General: Updated translations for correct link display in admin
-notices
-* Bug Fix: REST API: Fixed a fatal error in one of the endpoints
-* Bug Fix: Sharing: Fixed OpenGraph tags for Instagram embeds
-* Bug Fix: Sharing: Fixed compatibility issues with bbPress
-* Bug Fix: Widget Visibility: Fixed a fatal error in case of a missing tag
-
-= 3.7.0 =
-Release date: September 9th, 2015
-Release Post: http://wp.me/p1moTy-1JB
-
-Feature Enhancements:
-
-* New admin page interface to easily configure Jetpack
-* Added staging site support for testing a connected Jetpack site
-
-Additional changes:
-
-* Enhancement: CLI: Added a possibility to change all options with
-confirmation for some of them
-* Enhancement: Gallery: Added filters to allow new gallery types to be
-declared
-* Enhancement: General: Added inline documentation for actions, filters, etc.
-* Enhancement: General: Changed class variable declarations keyword from var
-to public
-* Enhancement: General: Made the Settings page module toggle buttons more
-accessible
-* Enhancement: General: The admin bar now loads new notifications popout
-* Enhancement: General: Renamed some modules to avoid redundant prefixes
-* Enhancement: General: Switched to the WordPress Core's spinner image
-* Enhancement: General: Updated the bot list
-* Enhancement: Manage: Added the ability to activate a network-wide plugin on
-a single site from WordPress.com
-* Enhancement: Photon: Added a way to check image URLs against custom domains
-* Enhancement: Photon: Added prompts on the media upload page telling the user
-about Photon
-* Enhancement: Publicize: Added width and height values to OpenGraph tags for
-default images
-* Enhancement: Related Posts: Added a filter to allow disabling nofollow
-* Enhancement: REST API: Added new API endpoints to extend API functionality
-* Enhancement: REST API: Added new fields to existing API endpoints
-* Enhancement: Sharing: Added a possibility to opt-out of sharing for a single
-post
-* Enhancement: Sharing: Added bbPress support
-* Enhancement: Sharing: Added more configuration to the Likes modal
-* Enhancement: Sharing: Made the reddit button open a new tab
-* Enhancement: Sharing: Removed unused files
-* Enhancement: Shortcodes: Added auto embed option inside comments
-* Enhancement: Shortcodes: Added autohide parameter to the YouTube shortcode
-* Enhancement: Subscriptions: added an action that triggers at the end of the
-subscription process
-* Enhancement: VideoPress: Videos are now embedded using a new player
-* Enhancement: Widget Visibility: Added parent page logic
-* Enhancement: Widget Visibility: Added support for split terms
-* Enhancement: Widgets: Added actions to the Social Media widget
-* Enhancement: Widgets: Switched the Display Posts widget to the new API
-version
-* Bug Fix: General: Fixed scrolling to top after modal window closing
-* Bug Fix: Infinite Scroll: Added a check for cases when output buffering is
-disabled
-* Bug Fix: Infinite Scroll: Added translation to the copyright message
-* Bug Fix: Manage: Fixed automatic update synchronization on WordPress
-multisite network admin
-* Bug Fix: Manage: Redirects back to WordPress.com are allowed from the
-customizer view
-* Bug Fix: Media: Fixed duplicate images bug in the Media Extractor
-* Bug Fix: Publicize: Made it possible to remove previously set message
-* Bug Fix: Sharing: Added a thumbnail image to OpenGraph tags on pages with
-DailyMotion embeds
-* Bug Fix: Sharing: Fixed Twitter Cards tags escaping
-* Bug Fix: Sharing: Made OpenGraph tags for title and description use proper
-punctuation
-* Bug Fix: Sharing: Made sure Likes can be disabled on the front page
-* Bug Fix: Shortcodes: Fixed Facebook embeds by placing the scipt in the
-footer
-* Bug Fix: Shortcodes: Fixed PollDaddy shortcode issues over SSL connections
-* Bug Fix: Shortcodes: Made responsive video wrappers only wrap video embeds
-* Bug Fix: Shortcodes: Made SoundCloud accept percents for dimensions
-* Bug Fix: Social Links: Fixed a possible conflict with another class
-* Bug Fix: Stats: Made sure the Stats URL is always escaped properly
-
-= 3.6.1 =
-Release Date: July 24, 2015
-
-* Enhancement: Fully compatible with upcoming WordPress 4.3
-* Enhancement: Site Icon: Start to deprecate Site Icon in favor of Core's
-version (if available)
-* Bug Fix: Subscriptions: You can now use more than one Subscription form on a
-single page
-* Bug Fix: Quieted PHP notices and warnings with the JSON API, Display Posts
-Widget and Gallery Widget (slideshow mode)
-* Bug Fix: Correct permissions check for connection panel
-* Hardening: Increase permissions checks
-
-= 3.6 =
-Release Date: July 6th, 2015
-Release Post: http://wp.me/p1moTy-1ua
-
-Feature Enhancements:
-
-* CLI: Add a number of Jetpack CLI improvements: see
-http://jetpack.com/support/jetpack-cli
-* New Jetpack admin page for connection management
-* New Social Media Icons widget
-* FB Like Box: A visual refresh of the Facebook likebox widget
-* Protect: When your IP is blocked, use a math captcha as a fallback instead
-of a complete block
-
-Additional changes:
-
-* Enhancement: Custom CSS: Add more Flexbox support and other enhancements
-* Enhancement: Extra Sidebar Widgets: Top Posts Widget: Choose what Post Types
-to display
-* Enhancement: General: Save on some requests! print CSS inline when there
-isn't much of it
-* Enhancement: Likes: Likes can now be shown on all post types
-* Enhancement: Minileven: Add Featured Image to Gallery Post Format and Pages
-* Enhancement: Mobile Theme: Add div wrapping View Mobile Site link to allow
-for easier CSS customizations
-* Enhancement: Omnisearch: Link to edit post in titles
-* Enhancement: Protect: Learn Trusted Headers locally and cache blocks
-properly
-* Enhancement: REST API: Add locale support
-* Enhancement: Sharing: Retire StumbleUpon
-* Enhancement: Sharing: Upgrade to reCAPTCHA 2.0 for Email Sharing
-* Enhancement: Shortcode Embeds: Add Mesh oembed support
-* Enhancement: Shortcode Embeds: New Wufoo Shortcode from WordPress.com
-* Enhancement: Shortcode Embeds: Mixcloud: handle accented characters in URLs
-* Enhancement: Site Logo: Adding itemprops to support logo schema.
-* Enhancement: Slideshow Gallery: New parameters *size* and *autostart*
-* Enhancement: Slideshow Gallery: Use more reliable CSS for resizing instead
-of js
-* Enhancement: Stats: No longer track stats for preview pages
-* Enhancement: Tiled Gallery: Improve the shapes and distributions of shapes
-in the Tiled Gallery, based on observations for its usage.
-* Enhancement: Protect: Whitelist for multisite globally and locally
-* Enhancement: Sharing: LinkedIn always uses https for share counts. (saved
-extra http request)
-* Bug Fix: Carousel: Jetpack Carousel now supports HTML5 gallery
-* Bug Fix: Extra Sidebar Widgets: Choose Images button works in accessibility
-mode
-* Bug Fix: General: Fix: Cannot remove hooks from filter
-'jetpack_get_available_modules'
-* Bug Fix: Infinite Scroll: Check that search terms exist before matching
-against post title. fixes #2075
-* Bug Fix: Likes: Never double show on search results
-* Bug Fix: Notifications: Notifications didn't load on wp-admin/network pages
-* Bug Fix: Sharing: Fix Facebook share button not showing for Australian &
-Canadian locale
-* Bug Fix: Shortcode Embed: Slideshare Shortcode now fixed
-* Bug Fix: SSO: Hide login no matter what when using the filter to do so
-* Bug Fix: Subs Widget: Don't hide email input if submit failed
-* Bug Fix: Tiled Gallery: Show columns setting for Thumbnail Grid when Tiled
-Mosaic galleries are the default
-* Bug Fix: Twitter Cards: Remove deprecated card types
-
-= 3.5.3 =
-Release Date: May 6th, 2015
-
-* Security Hardening: Remove Genericons example.html file.
-
-= 3.5.2 =
-Release Date: May 5th, 2015
-
-* Bug Fix: Sharing: Changes Facebook share count endpoint
-
-
-= 3.5.1 =
-Release Date: May 5th, 2015
-
-* Enhancement: Sharing: Changes Facebook share count method per Facebook API
-change
-* Enhancement: General: Remove .po files to reduce plugin size
-* Bug Fix: General: Remove identity crisis notification
-* Bug Fix: Subscriptions: Correct required input validation
-* Security hardening
-
-= 3.5 =
-Release Date: April 23rd, 2015
-Release Post: http://wp.me/p1moTy-1jF
-
-Jetpack 3.5 introduces the ability to manage your site's menus directly from
-WordPress.com and several bug fixes and enhancements. This upgrade is
-recommended for all users.
-
-* Enhancement: General: Change security reporting to use a transient instead
-of option to reduce backup load
-* Enhancement: General: Improve module search
-* Enhancement: JSON API: Allow users to manage menus through WordPress.com
-* Enhancement: Sharing: Reduce spam through email sharing
-* Bug Fix: Custom CSS: Improve recall of CSS revisions
-* Bug Fix: Extra Sidebar Widgets: Change class name for Contact Info widget
-* Bug Fix: Extra Sidebar Widgets: Fix errors when adding widgets via the
-customizer
-* Bug Fix: Extra Sidebar Widgets: Fix PHP notices in RSS widget
-* Bug Fix: General: Fix redirect loop on activation
-* Bug Fix: General: Styling fixes
-* Bug Fix: Protect: Add IP translation fallback when inet_pton is not
-available
-* Bug Fix: Protect: Always allow login from local IDs
-* Bug Fix: Protect: Sanitize displayed IP after block
-* Bug Fix: Publicize: Prevent generating Facebook profile links for app-scoped
-user IDs
-* Bug Fix: Subscriptions: Improve error handling
-* Bug Fix: Theme Tools: Include breadcrumb code
-* Misc: Extra Sidebar Widgets: Remove Readmill Widget
-
-= 3.4.3 =
-Release Date: April 20th, 2015
-Release Post: http://wp.me/p1moTy-1jb
-
-* Security hardening.
-
-= 3.4.2 =
-Release Date: April 19th, 2015
-Release Post: http://wp.me/p1moTy-1j6
-
-* Bug Fix: Contact info widget namespacing
-* Bug Fix: Javascript errors on wp-admin due to stats display code
-* Bug Fix: Potential fatal error from improperly called function
-* Bug Fix: Potential fatal error when protect servers are unreachable for
-WordPress Multisite
-
-= 3.4.1 =
-Release Date: March 19th, 2015
-
-* Bug Fix: General: Modules not displaying properly in non-English installs
-* Bug Fix: Manage: Some installs showing a transient fatal error
-* Bug Fix: Protect: Protect module not auto-activating for users who upgrade
-* Bug Fix: Omnisearch: Some installs not properly reporting WP version number,
-causing Omnisearch error
-* Bug Fix: Stats: Top posts/pages widget not loading
-* Bug Fix: Contact Info Widget: Fix conflict with Avada theme
-
-= 3.4 =
-Release Date: March 18th, 2015
-Release Post: http://wp.me/p1moTy-1fU
-
-* Enhancement: Config Settings: provide a notification for users that update
-features settings
-* Enhancement: Config Settings: provide a notification for users that update
-features settings
-* Enhancement: Contact Form: Use the predefined $title variable in the anchor
-tag in grunion contact form button
-* Enhancement: Contact Form: Use the predefined $title variable in the anchor
-tag in the button on admin
-* Enhancement: Custom Content Type: Add all Custom Post Types to Omnisearch
-* Enhancement: Custom Content Type: Add option to add Testimonial Custom
-Content Type in admin
-* Enhancement: Custom Content Type: bring consistency between the portfolio
-and testimonial shared codebase
-* Enhancement: Custom Content Type: code cleanup
-* Enhancement: Custom Content Type: register namespaced 'jetpack_portfolio'
-shortcode/use a prefix for shortcode for Portfolio
-* Enhancement: Custom Content Type: set shortcode image size to 'large' and
-add jetpack_portfolio_thumbnail_size filter to allow themes to set their own
-size for Portfolio
-* Enhancement: Custom Content Type: testimonial shortcode enhancement
-* Enhancement: Extra Sidebar Widgets: Add subscription widget wildcard
-* Enhancement: Extra Sidebar Widgets: Likes and Sharing Shortcodes
-* Enhancement: Extra Sidebar Widgets: Minor fixes to Facebook widget plugin
-for SSL
-* Enhancement: Fix/update jetpack version
-* Enhancement: General: Add DNS Prefetching
-* Enhancement: General: Add Jetpack admin dashboard widget
-* Enhancement: GlotPress: Update GP_Locales and GP_Locale classes
-* Enhancement: Improved control over Nova Theme Menu output markup
-* Enhancement: Infinite Scroll: Adds a `button` wrapper for the infinity
-handle.
-* Enhancement: Infinite Scroll: Check for response.html before using indexOf
-* Enhancement: Integrate BruteProtect for protection against Brute Force
-attacks
-* Enhancement: JSON API Manage: Added Mock Jetpack Option to Sync options that
-don't have to live in the Database
-* Enhancement: JSON API: Add/empty trash days option to sync
-* Enhancement: Jump Start: Add "Jump Start" interface for new users
-* Enhancement: Manage: Add "modified_before" and "modified_after" parameters
-to /sites/%s/posts/ via JSON API
-* Enhancement: Mobile Theme: Add filter for choosing mobile theme menu
-* Enhancement: Notifications: Changes to load the new notifications client.
-* Enhancement: Protect: Add a filter so that user can add thier own bots
-* Enhancement: Protect: Add security reporting
-* Enhancement: Protect: Add/whitelist endpoints via JSON API for Jetpack
-Protect
-* Enhancement: Publicize: update connection confirmation message
-* Enhancement: Sharing: Add custom service name as a class
-* Enhancement: Sharing: display name of custom service in link title
-* Enhancement: Sharing: Remove default post types for showing share links
-* Enhancement: Sharing: use Jetpack version number when enqueing sharing.js
-* Enhancement: Shortcodes Team Partnerships: Backport fixes from SoundCloud
-2.3.1 through 3.0.2
-* Enhancement: Shortlinks: use HTTPS when possible
-* Enhancement: Stats: Make loading of stats async
-* Enhancement: Subscriptions: Added settings field for comment sub text
-* Enhancement: Subscriptions: Hide Form After Submit
-* Enhancement: Subscriptions: remove label from widget title
-* Enhancement: Subscriptions: Update subscriptions.php
-* Bug Fix: Contact form: Increase CSS specificity for Contact Forms in widgets
-* Bug Fix: Custom Content Type: Testimonial Custom Content Type: use core
-`WP_Customize_Image_Control` instead of custom...
-* Bug Fix: Extra Sidebar Widgets: add missing & to if statement for widget
-visibility
-* Bug Fix: Extra Sidebar Widgets: Don't require height/width values in the
-Twitter Timeline widget
-* Bug Fix: Extra Sidebar Widgets: Upload images from the customizer/Extra
-Sidebar Widgets Tiled Galleries for Gallery Widget
-* Bug Fix: General: Fix bug that was preventing modules from displaying
-properly
-* Bug Fix: Manage: When calling /sites/%s/posts/ include all attachments not
-just the first five via JSON API
-* Bug Fix: Mobile Theme: Minileven; Start after DOM ready
-* Bug Fix: Sharing: Open sharing in same window
-* Bug Fix: Stats language
-* Bug Fix: Subscritpions: fix invalid field when no email address
-
-
-= 3.3.2 =
-Release Date: February 19th, 2015
-
-* Enhancement: Updated translation files.
-* Enhancement: Heartbeat: Correctly stat new datasets.
-* Bug Fix: Widget Visibility: Correct some caching of visibility results that
-may get evaluated too soon.
-* Bug Fix: Contact Form: Hardening.
-* Bug Fix: Photon: Make sure our gallery filter can parse array inputs as well
-as the default html.
-
-= 3.3.1 =
-Release Date: February 11th, 2015
-
-* Bug Fix: JSON API: Minor versioning data.
-* Bug Fix: Markdown: Re-run KSES after processing to account for syntax
-changes.
-* Bug Fix: Media Extractor: Don't call a gallery a gallery if it hasn't got
-any pictures!
-* Bug Fix: Module Management: Handle a core api change for folks running
-trunk.
-* Bug Fix: Related Posts: CSS -- better clear rows.
-* Bug Fix: Sharing: Including sharing account on Pinterest unofficial buttons
-as well.
-* Bug Fix: Sharing: Properly version external assets by Jetpack release
-version.
-* Bug Fix: Shortcodes: Soundcloud: Backport API compatibility fixes.
-* Bug Fix: Shortcodes: Flickr: Tidy up our regex url pattern matching.
-* Bug Fix: Subscriptions: Don't add 'Email Address' as the value -- we have
-placeholders!
-* Bug Fix: Widgets: Gallery Widget: Allow folks to upload images from the
-widget area in the customizer.
-
-= 3.3 =
-Release Date: December 15th, 2014
-Release Post: http://wp.me/p1moTy-1aF
-
-* Enhancement: Adds responsive video support to BuddyPress.
-* Enhancement: Custom Content Types: Added 'order' and 'orderby' options to
-portfolio shortcode.
-* Enhancement: Display notice when Jetpack Development Mode is on.
-* Enhancement: General: Update compatibility with Twenty Fifteen.
-* Enhancement: Image URL can now be overwritten with the
-`jetpack_images_fit_image_url_override` filter after dimensions are set by
-Photon.
-* Enhancement: JSON API: Add Endpoint for trigger Plugin Autoupdates.
-* Enhancement: JSON API: General Improvements. Documentation on
-http://developer.wordpress.com/
-* Enhancement: Likes: Updated the code to accept arbitrary CPTs.
-* Enhancement: Related Posts: Allow filter by `post_format`.
-* Enhancement: Sharing: add new `jetpack_sharing_counts` filter for option to
-turn off sharing counts.
-* Enhancement: Sharing: Use the Site Logo Theme Tool and the Site Icon as
-fallbacks for image tags.
-* Enhancement: Shortcodes: Made the code more readable by using output buffers
-instead of string concatenation.
-* Enhancement: Site Logo: Add alias functions to provide backward
-compatibility for themes expecting the old function calls.
-* Enhancement: Slideshow: Add title and alt text to images.
-* Enhancement: Subscription Form: Do not display the logged in user's email
-address by default.
-* Enhancement: Top Posts Widget: Refactor to allow conditional loading of the
-css.
-* Enhancement: Top Posts: Add `jetpack_top_posts_widget_count` filter to
-control number of displayed posts.
-* Bug Fix: Change subscribe_text from `p` to `div` so that it can contain
-block-level elements.
-* Bug Fix: Fonts: Change path to look for the svg in the right directory.
-* Bug Fix: Increase CSS specificity for Contact Forms in widgets.
-* Bug Fix: JSON API: Plugins Update: Make sure the plugin doesn't get
-deactivated.
-* Bug Fix: Likes: Fixes issues where likes don't load, load master iframe
-after scripts are loaded.
-* Bug Fix: Notes Module: Avoid a PHP Notice in cli scripts when the request
-doesn't contain a User-Agent header.
-* Bug Fix: Nova Menu CPT: fix notice when we have no taxonomies.
-* Bug Fix: Nova Menus: Use current instance to maintain object context.
-* Bug Fix: Related Posts: Add filter for `_enabled_for_request()`.
-* Bug Fix: Sharing: Prevent duplicate @ in shared Tweets.
-* Bug Fix: Site Logo: `get_site_logo()` now properly returns the site logo ID
-when provided in the `$show` argument.
-* Bug Fix: Site Logo: Correct evaluation of the Display Header Text in
-Customizer preview.
-
-= 3.2.1 =
-Release Date: November 14th, 2014
-
-* Enhancement: Updated translation files.
-* Enhancement: JSON API: More object vars passed back to some queries.
-Documentation on http://developer.wordpress.com/
-* Bug Fix: JSON API: Pass back correct author in `me/posts` data.
-* Bug Fix: JSON API: Don't check if a post is freshly pressed on remote
-Jetpack sites where the function doesn't exist.
-* Bug Fix: Site Logo: Add backward-compatible template tags to match the
-standalone release.
-* Bug Fix: Don't use __DIR__ -- it's 5.3+ only, and WordPress supports back to
-5.2.
-* Bug Fix: Retool how we remove the source styles when using the concatenated
-version.
-* Bug Fix: Shortcodes: TED: Correct default language code from `eng` to `en`.
-* Bug Fix: Gallery Widget: Add a default background color.
-* Bug Fix: Subscription Notifications: Remove the label.
-* Bug Fix: Sharing: enqueue Genericons on static front page as well if
-selected.
-
-= 3.2 =
-Release Date: October 29, 2014
-Release Post: http://wp.me/p1moTy-181
-
-* Enhancement: Speed Improvements (woohoo!).
-* Enhancement: Add site icons: an avatar for your blog.
-* Enhancement: Improvements to API endpoints.
-* Enhancement: Add oEmbed sources (Twitter, SoundCloud, Instagram,
-DailyMotion, Vine).
-* Enhancement: Add indicators to make it easier to see which modules are
-active.
-* Enhancement: Improve debug tool.
-* Enhancement: Add new 'Site Logos' code to theme tools, for themes that opt
-in to support it.
-* Enhancement: Improved caching for related posts.
-* Enhancement: Added "Remember Me" functionality to Single Sign On.
-* Enhancement: Improved accessibility.
-* Enhancement: Added additional filters to Widget Visibility.
-* Bug Fix: Fixed PHP Notice errors for Likes, Widget Visibility.
-* Bug Fix: Improvements to the testimonials CPT.
-* Bug Fix: Improved RTL on VideoPress admin.
-* Bug Fix: Removed Google+ Authorship module (discontinued by Google).
-* Bug Fix: Fixed use of deprecated function in mobile theme.
-* Bug Fix: Various fixes to Tiled Galleries.
-* Bug Fix: Various fixes to Contact Form.
-* Bug Fix: Various fixes to oEmbed.
-* Bug Fix: Various fixes to Single Sign On.
-* Bug Fix: Fixed styles in ShareDaddy.
-* Bug Fix: Better match protocols (http/https) to the site.
-
-
-= 3.1.1 =
-Release Date: August 7, 2014
-
-* Enhancement: Update translation files for strings that had been
-submitted/approved since release.
-* Bug Fix: Social Links: Add a function check to better degrade if Publicize
-isn't around.
-* Bug Fix: Open Graph: Add WordPress SEO back to the blacklist, until they
-update how they opt us out.
-* Bug Fix: Asset Minification: Add another caveat ( empty $plugin ) to short
-out on.
-* Bug Fix: Deprecated Hooks: Fixing our expectations where something that
-should be an array occasionally wasn't.
-* Bug Fix: Custom CSS: Add extra whitelist rule for -o-keyframe rules.
-
-= 3.1 =
-Release Date: July 31, 2014
-Release Post: http://wp.me/p1moTy-129
-
-* Enhancement: New Custom Content Types module.
-* Enhancement: New Jetpack Logo.
-* Enhancement: New optional JSON API endpoints for viewing updates and
-managing plugins and themes.
-* Enhancement: New Custom Post Type: Portfolio!
-* Enhancement: Rearranged buttons on the modules modals for easier management.
-* Enhancement: Jetpack Settings have improved keyboard accessibility.
-* Enhancement: Improved RTL support for After the Deadline, Carousel, Contact
-Form, Comics CPT, Custom CSS, Omnisearch, Publicize, Related Posts, Slideshow
-short code, Tiled Gallery, Widget-Visibility and Widgets Gallery.
-* Enhancement: Contact Form: Add an "Empty Spam" option.
-* Enhancement: i18n: Change the priority of where plugin_textdomain is hooked
-so that the plugins can better translate Jetpack.
-* Enhancement: Monitor: Displays how often the site is checked for downtime.
-* Enhancement: Shortcode: Added Mixcloud shortcode and oEmbed support.
-* Enhancement: Social Links: Improved handling of customizer hooks in
-non-admin context.
-* Enhancement: Stats: The smiley image is gone by default.
-* Enhancement: Stats: Added link to the configure page for stats so that the
-stats settings page is easier to find.
-* Enhancement: Theme Tools: Added the responsive videos to theme tools so that
-themes can support responsive videos more easily.
-* Update: Updated Genericons to version 3.1, new icons for website, ellipsis,
-foursquare, x-post, sitemap, hierarchy and paintbrush.
-* Bug Fix: Contact Form: Prefix function to avoid conflicts with other
-plugins.
-* Bug Fix: Custom CSS: Admin UI has a responsive layout.
-* Bug Fix: Custom CSS: Custom $content_width value doesn't overwrite theme's
-$content_width.
-* Bug Fix: Contact Form: Feedback link takes you to the form page.
-* Bug Fix: Carousel: Confirms an avatar is returned by get_avatar before
-displaying.
-* Bug Fix: Featured Content: Don't remove setting validation.
-* Bug Fix: Infinite Scroll: Google Universal Analytics support added.
-* Bug Fix: Multisite: Add message when updating multisite settings.
-* Bug Fix: Photon: Photon will no longer upscale images larger than the
-original size.
-* Bug Fix: Photon: Check that the image exists before rewriting the image URL
-to utilize Photon.
-* Bug Fix: Sharing: Pinterest adds attribute to display share count.
-* Bug Fix: Sharing: Respect an empty sharing title.
-* Bug Fix: Sharing: Share buttons now appear in the bbPress forms.
-* Bug Fix: Sharing: Support for multiple meta html tag og:image values.
-* Bug Fix: Single Sign On: Logout allows override of forcing Single Sign On.
-* Bug Fix: Single Sign On: Remove the lost password link on auto-forward
-logout.
-* Bug Fix: Social Links: Do not use anonymous function for compatibility with
-PHP 5.2.
-* Bug Fix: Tiled Galleries: Update jQuery mouseover caption effect to reduce
-flickering.
-* Bug Fix: Widgets Visibility: Works better in the customizer admin view.
-
-= 3.0.2 =
-Release Date: June 17, 2014
-
-* Enhancement: General: Make module categories filter more visible when
-active.
-* Enhancement: General: Updated translation files with more strings added
-since the last release.
-* Enhancement: General: Allow deep-linking to the Contact Support form.
-* Bug Fix: General: RTL Jetpack Admin UI looks better.
-* Bug Fix: General: Fixed PHP warning when bulk deactivating modules.
-* Bug Fix: General: Removed an unnecessary description.
-* Bug Fix: General: Resolved an SSL error on Jetpack Admin UI.
-* Bug Fix: General: Fix error comparing signatures when the WordPress
-installation is using site_url filters (applied mostly to WPEngine sites).
-* Bug Fix: General: Resolved PHP strict error on the mobile menu.
-* Bug Fix: General: Fix timing of conditional checks, so that calling
-developer mode via a plugin works again.
-* Bug Fix: General: Main page categories tab now properly translates module
-names.
-* Bug Fix: Related Posts: Fix a typo, the "more info" link now works.
-* Bug Fix: Likes: Improve button styling.
-* Bug Fix: Likes: Remove unused UI for Reblog settings on social settings
-page.
-* Bug Fix: Contact Form: Updated to no longer use a deprecated Akismet
-function.
-* Bug Fix: Contact Form: Sends email to the administrator that is not marked
-as spam again.
-* Bug Fix: Open Graph: Resolved PHP warning on open graph gallery pages when
-the gallery is empty.
-
-= 3.0.1 =
-Release Date: May 22, 2014
-
-* Bug Fix: AtD: A wpcom-only function got synced by mistake and caused a few
-errors. Fixed.
-* Bug Fix: Post By Email: Add static keyword to a function.
-* Bug Fix: ShareDaddy: In the admin-side configuration of sharing links, we
-used a Path icon instead of Pinterest. Oops!
-* Bug Fix: ShareDaddy: We inadvertently appended `via @jetpack` to some
-twitter shares. This is no longer the case.
-* Bug Fix: Related Posts: Tidying up and relocation of the `resync` button
-formerly on the more info modal.
-* Bug Fix: Infinite Scroll: Work better with core's MediaElement.js
-* Bug Fix: Heartbeat: Undeclared variable fixed.
-
-= 3.0 =
-Release Date: May 20, 2014
-Release Post: http://wp.me/p1moTy-Wi
-
-* New User Interface for managing modules and settings
-* New Module: Verfication Tools
-* Enhancement: New look for the Sharing module
-* Enhancement: Multiple improvements on which Twitter handle a Twitter card
-will display
-* Enhancement: Add option to hide Google+ Authorship banner while still
-receiving the benefits
-* Enhancement: Many Infinite Scroll enhancements to improve performance
-* Enhancement: Infinite Scroll will use your CPT's display name instead of
-"Older Posts"
-* Enhancement: JSON API added /media/new endpoint
-* Enhancement: Added filter to assign new default image for Open Graph tags
-* Enhancement: New [jetpack-related-posts] shortcode to add Related Posts to
-page instead of default placement
-* Enhancement: Added SSO option to turn off login form completely, to use
-WordPress.com login exclusively
-* Enhancement: The [googlemaps] shortcode allows for Google Maps Engine
-* Enhancement: YouTube shortcode allows HD playback
-* Enhancement: Smoother, Faster Tiled Galleries!
-* Enhancement: New languages! Use Jetpack in Irish, Fulah, and Tigrinya
-* Bug Fix: Use your browser's Back and Forward buttons when naviagating a
-Carousel
-* Bug Fix: Various Related Posts fixes and improvements for added flexibility
-* Bug Fix: WordPress 3.9: Restores ability to edit Contact Forms
-* Bug Fix: WordPress 3.9: Restores Gallery Widget compatability
-* Bug Fix: Ensure Markdown is kept when Bulk Editing posts
-* Bug Fix: Improved Jetpack's Multisite Network Admin page for networks with a
-large number of sites
-* Bug Fix: Ensure Sharing settings persist when Bulk Editing a post
-* Bug Fix: Various other shortcode improvements
-
-= 2.9.3 =
-Release Date: April 10, 2014
-Release Post: http://wp.me/p1moTy-U2
-
-* Important security update. CVE-2014-0173
-
-= 2.9.2 =
-Release Date: March 17, 2014
-
-* Bug Fix: Publicize: When publishing from a mobile app or third-party client,
-Publicize now works again.
-
-= 2.9.1 =
-Release Date: March 6, 2014
-
-* Bug Fix: After the Deadline: Fix a Javascript glitch that could prevent
-publishing of posts.
-* Bug Fix: SSO: Disable the implementation of an option that had been removed
-before release. This would have only been an issue if a site administrator
-had enabled the module during an early beta of 2.9.
-
-= 2.9 =
-Release Date: February 26, 2014
-Release Post: http://wp.me/p1moTy-RN
-
-* Added Multisite network functionality
-* New Module: Related Posts
-* Enhancement: Single Sign On
-* Enhancement: Mixcloud shortcode and oEmbed
-* Enhancement: Gist shortcode and oEmbed
-* Enhancement: Modify Facebook Like Box widget to support new Facebook
-parameters
-* Enhancement: Rolled the Push Notifications module into the Notes module
-* Enhancement: Update kses with Markdown
-* Enhancement: Adding keyboard accessibility to sharing buttons config page
-* Enhancement: Pull WordPress testing bits from the new official git mirror at
-WordPress.org
-* Bug Fix: Widget Visibility
-* Bug Fix: Revisions box in Custom CSS
-* Bug Fix: Fix several bugs in the WordPress Posts Widget so that it correctly
-updates
-* Bug Fix: Limit Login Attempts no longer generates false positives from
-xmlrpc.
-* Bug Fix: Clear max_posts transient on theme switch.
-* Bug Fix: Lower priority of sync to allow all CPTs to be registered.
-* Bug Fix: Contact form fields emailed in correct order.
-
-* Other bugfixes and enhancements at
-https://github.com/Automattic/jetpack/commits/2.9
-
-= 2.8 =
-Release Date: January 31, 2014
-Release Post: http://wp.me/p1moTy-Pd
-
-* New Module: Markdown
-* Module Update: Jetpack Monitor
-* Enhancement: Infinite Scroll: Keep track of $current_day between requests so
-the_date() works well.
-* Enhancement: Embeds: New filter to turn off embeds in comments.
-* Enhancement: Contact Form: Add placeholder support.
-* Enhancement: Widget: Gravatar Profile: Added filters to allow users to
-customize headings and fixed output of personal links.
-* Enhancement: Facebook OG Tags: Add `published_time`, `modified_time`, and
-`author` if the post type supports it.
-* Enhancement: Sharing: Display buttons on CPT archive pages.
-* Enhancement: Sharing: Add `get_share_title` function and filter.
-* Enhancement: Sharing: Add filter `sharing_display_link`.
-* Enhancement: Twitter Timeline: Flesh out tweet limit option.
-* Enhancement: Social Links: Add Google+ to the list of supported services.
-* Enhancement: Stats: Improve dashboard styles in 3.8.
-* Enhancement: Stats: No longer use Quantcast.
-* Enhancement: Top Posts: Add `jetpack_top_posts_days` filter.
-* Enhancement: AtD: Add TinyMCE 4 compatibility for its pending arrival in
-WordPress 3.9
-* Enhancement: Genericons: Update to v3.0.3
-* Enhancement: Tiled Galleries: Add alt attributes to images.
-* Enhancement: Shortcode: YouTube: Accept protocol-relative URLs.
-* Enhancement: Shortcode: Slideshow: Add white background option.
-* Enhancement: Shortcode: YouTube: Add support for the two closed-caption
-arguments.
-* Enhancement: Shortcode: Vimeo: Update the regex to support the new embed
-code.
-* Enhancement: Shortcode: Google Maps: Update the regex to handle new format
-for embeds.
-* Enhancement: Likes: Avoid a PHP Notice when $_POST['post_type'] is not set
-in meta_box_save.
-* Enhancement: Smush images to save on file size.
-* Enhancement: Publicize: Enable opt-in publicizing of custom post types.
-* Bug Fix: Random Redirect: Further namespace to avoid conflicts.
-* Bug Fix: Twitter Timeline: Resolve undefined index notice.
-* Bug Fix: Featured Content: Add extra class_exists() check to be extra
-careful.
-* Bug Fix: Facebook OG Tags: Change OG type of Home and Front Page to
-'website'
-* Bug Fix: Widget Visibility: Add support for old-style single use widgets.
-* Bug Fix: Google Authorship: Support apostrophe in author names.
-* Bug Fix: Media Extractor: Assorted graceful failure caveats.
-* Bug Fix: Carousel: 'Link to None' bug fixed.
-* Bug Fix: Embeds: Bandcamp: Switch escaping function for album and track IDs
-to handle (int)s greater than PHP_INT_MAX
-* Bug Fix: Some plugins trying to catch brute-force attacks mistakenly flagged
-the Jetpack connection as one.
-
-= 2.7 =
-Release Date: December 11, 2013
-Release Post: http://wp.me/p1moTy-Mk
-
-* Enhancement: Google+ Publicize
-* Enhancement: Add Cloudup as an oEmbed provider
-* Enhancement: Subscriptions: Add subscribe_field_id filter to allow updated
-ids when using multiple widgets
-* Enhancement: Infinite Scroll: TwentyFourteen Support
-* Bug Fix: Contact Form: Fix warning when form is called outside the loop
-* Bug Fix: Featured Content: Moving Settings to Customizer, provide option to
-set default tag as fallback, specify all supported post-types rather than just
-additional ones. Description Updates
-* Bug Fix: Featured Content: Compat with 'additional_post_types' theme support
-argument. Comment updates
-* Bug Fix: Featured Content: Make sure $term is an object before we treat it
-as one
-* Bug Fix: GlotPress: Merge with latest GlotPress
-* Bug Fix: Infinite Scroll: prevent Undefined index notice that can cause IS
-to fail when user has WP_DEBUG set to true
-* Bug Fix: Infinite Scroll: Improved compatibility with Carousel, Tiled
-Galleries, VideoPress, and the `[audio]` and `[video]` shortcodes
-* Bug Fix: Likes: Stop manually including version.php and trust the global.
-Some whitespace fixes, and if it's an attachment, follow the post_status of
-the parent post
-* Bug Fix: Mobile Theme: Display password field for Gallery format protected
-posts
-* Bug Fix: Sharing: Add new translation width for share button, and Google
-Plus icons
-* Bug Fix: Shortcodes: Support Ineternational Google domains for maps
-* Bug Fix: Shortcodes: Facebook Embeds: Register alternate permalink.php URL
-for posts
-* Bug Fix: Subscriptions: Moved inline styles from widget email input to
-separate css file
-* Bug Fix: Theme Tools: Fix glitch where random-redirect.php also showed as a
-plugin being deleted if you were deleting Jetpack
-* Bug Fix: Misc: Internationalization & RTL updates
-* Bug Fix: Misc: Prevent collisions with 'Facebook Featured Image & OG Meta
-Tags' plugin
-
-= 2.6.1 =
-Release Date: December 3, 2013
-
-* Bug Fix: minor styling fix in pre- and post-MP6/3.8 UI changes.
-* Bug Fix: Stats: spinner gif url fix when the user is viewing it over https.
-* Bug Fix: Stats: Switch to esc_html from htmlspecialchars in error message --
-better to be native
-* Bug Fix: Media Extractor: some hosts don't compile unicode for
-preg_match_all, so we temporarily removed the block that depended on it.
-* Bug Fix: Media Extractor: Add in some error handling for malformed URLs.
-* Bug Fix: Twitter Cards: treat single-image galleries as a photo-type.
-* Bug Fix: Update conflicting plugins for OG tags and Twitter Cards.
-* Bug Fix: Correct max supported version number -- had been 3.6, update to
-3.7.1
-
-= 2.6 =
-Release Date: November 28, 2013
-Release Post: http://wp.me/p1moTy-KE
-
-* Enhancement: WPCC / now called [SSO](http://jetpack.com/support/sso/):
-refactored.
-* Enhancement: Monitor: new module which will notify you if your site goes
-down(http://jetpack.com/support/monitor/).
-* Enhancement: Custom CSS: replace Ace editor with Codemirror.
-* Enhancement: Widgets: new “Display Posts” widget.
-* Enhancement: WP-CLI: add commands to disconnect a site and manage modules.
-* Enhancement: Contact Form: new filters, `grunion_contact_form_field_html`
-and `grunion_should_send_email`.
-* Enhancement: Custom Post Types: new restaurant post type.
-* Enhancement: Genericons: update to version 3.0.2.
-* Enhancement: Infinite Scroll: many improvements and fixes.
-* Enhancement: Likes: performance improvements.
-* Enhancement: MP6: Jetpack icons are now compatible with WordPress 3.8.
-* Enhancement: Open Graph: better descriptions, fallback images, and media
-extraction from video posts.
-* Enhancement: Publicize: new background token tests for connected publicize
-services and display problems on settings sharing and add new post.
-* Enhancement: Shortcodes: updated Bandcamp shortcode to support the
-`tracklist` and `minimal` attributes, as well as more `artwork` attribute
-values.
-* Enhancement: Shortlinks: add Custom Post Type support.
-* Enhancement: Subscriptions: add more ways to customize the subscriptions
-widget.
-* Enhancement: Twitter Cards: better media management and card type detection,
-and better handling of conflicts with other Twitter Cards plugins.
-* Enhancement: better handling of conflicts with other plugins.
-* Bug Fix: After the Deadline: add a typeof check for `tinyMCEPreInit.mceInit`
-to prevent js errors.
-* Bug Fix: Carousel: speed improvements and several bugfixes.
-* Bug Fix: Contact Form: remove nonce creating issues with caching plugins.
-* Bug Fix: Custom Post Types: Testimonials: return if featured image is empty
-so it can be removed after it’s been set.
-* Bug Fix: Featured Content: add additional post type support through the
-`additional_post_types` argument.
-* Bug Fix: Google Authorship: support apostrophes in Google+ profiles.
-* Bug Fix: Google Authorship: use a regexp Instead of using
-`mb_convert_encoding`, which doesn’t enjoy universal support.
-* Bug Fix: Heartbeat: ensure that it never triggers more than once per week.
-* Bug Fix: JSON API: add new `?meta=` parameter that allows you to expand the
-data found in the `meta->links` responses.
-* Bug Fix: JSON API: add new `is_private` response to the sites endpoint and
-`global_ID` response to the reader and post endpoints.
-* Bug Fix: Mobile Theme: allow small images to display inline.
-* Bug Fix: Mobile Theme: fix fatal errors for missing `minileven_header`
-function.
-* Bug Fix: Photon: fix errors when an image is not uploaded properly.
-* Bug Fix: Shortcodes: improvements to Archives, Google+, Presentations, Vine
-and Youtube.
-* Bug Fix: Tiled Galleries: improve display of panoramic images and fix errors
-when an image is not uploaded properly.
-
-= 2.5 =
-Release Date: September 19, 2013
-Release Post: http://wp.me/p1moTy-xS
-
-* Enhancement: Connect your Google+ profile and WordPress site to prove
-authorship of posts.
-* Enhancement: Improved sharing buttons display.
-* Enhancement: Comment on your posts using Google+ to signin.
-* Enhancement: Embed Google+ posts into your posts.
-* Enhancement: Added event logging capabilities for debugging
-* Enhancement: LaTeX is now available in dev mode
-* Enhancement: Introduced gallery widget
-* Enhancement: Added new module: VideoPress
-* Enhancement: Updated identity crisis checker
-* Enhancement: Tiled Gallery widget added
-* Enhancement: Google +1 button changed to Google+ Share button, to avoid
-confusion
-* Enhancement: Added check to ensure Google+ authorship accounts have
-disconnected properly
-* Enhancement: Updated identity crisis checker
-* Enhancement: Tiled Gallery widget added
-* Enhancement: Google +1 button changed to Google+ Share button, to avoid
-confusion
-* Enhancement: Added the ability to embed Facebook posts
-* Bug Fix: Redirect issue with G+ authorship when WordPress is not in the root
-directory
-* Enhancement: Better security if carousel to prevent self-XSS
-* Enhancement: Better handling of cookies for subsites on multisite installs
-* Bug Fix: Check for post in G+ authorship before accessing it
-
-= 2.4.2 =
-Release Date: September 5, 2013
-
-* Enhancement: Converted to module headers to detect Auto-Activating modules.
-* Enhancement: WPCC: Added 'Close' link to deactivate WPCC in the admin nag.
-* Enhancement: JSON API: Add User Nicename to the user data.
-* Bug Fix: Contact Form: Stopped using a short tag.
-* Bug Fix: Changed CSS selector to catch MP6 stylings.
-* Bug Fix: Dropped __FILE__ references in class.jetpack.php in favor of
-JETPACK__PLUGIN_DIR constant, now code that deactivates the plugin from the
-connect nag works again.
-* Bug Fix: Random Redirect: Add random-redirect to the plugins overriden list,
-in case someone is using Matt's Random Redirect plugin.
-* Bug Fix: Tiled Gallery: Revert r757178 relating to tiled gallery defaults.
-* Bug Fix: Return false, not zero, if $GLOBALS['content_width'] isn't defined.
-* Bug Fix: WPCC: Don't call wp_login_url() in the constructor -- if someone is
-running a custom login page, that can break things if their plugin runs
-get_permalink as a filter before init.
-* Bug Fix: Tiled Gallery: Add fallback if post_parent == 0 due to
-infinite_scroll_load_other_plugins_scripts.
-* Bug Fix: Custom CSS: Set the ACE gutter z-index to 1.
-* Bug Fix: Custom Post Types: Switch from wp_redirect() to wp_safe_redirect().
-* Bug Fix: Likes: Set overflow:hidden; on the likes adminbar item.
-* Bug Fix: Mobile Theme: Migrate where/when the custom header stuff is
-included.
-* Bug Fix: Slideshow Shortcode: Add a height of 410px.
-
-= 2.4.1 =
-Release Date: September 4, 2013
-
-* Enhancement: Don't auto-activate WPCC.
-
-= 2.4 =
-Release Date: August 30, 2013
-Release Post: http://wp.me/p1moTy-wv
-
-* Enhancement: WordPress.com Connect (WPCC): New Module.
-* Enhancement: Widget Visibility: New Module.
-* Enhancement: Shortcode: Addition of new Twitter Timeline shortcode.
-* Enhancement: Shortcode: Addition of new Presentation shortcode.
-* Enhancement: Shortcode: Addition of new Vine shortcode.
-* Enhancement: Custom Post Types: CPTs are available.
-* Enhancement: Subscriptions: Add 'jetpack_is_post_mailable' filter.
-* Enhancement: OpenGraph: Add Twitter Cards meta tags as well.
-* Enhancement: Custom CSS: Update lessc and scssc preprocessors to 0.4.0 and
-0.0.7 respectively.
-* Enhancement: Omnisearch: Add Media results.
-* Enhancement: Likes: Use a protocol-agnostic iframe, instead of forced HTTPS.
-* Enhancement: Top Posts: Increase post limit.
-* Enhancement: Publicize: Updated JS and UI.
-* Enhancement: Photon: New filter to let site admins/owners enable photon for
-HTTPS urls.
-* Enhancement: New jetpack_get_available_modules filter.
-* Enhancement: Subscriptions: Antispam measures.
-* Bug Fix: Add inline style to keep plugins/themes from inadvertently hiding
-the Connect box.
-* Bug Fix: Custom CSS: Respect the new wp_revisions_to_keep filter.
-* Bug Fix: Photon: Only hook jetpack_photon_url into the filter if the user
-has Photon active.
-* Bug Fix: Heartbeat: Used wrong object, occasinally fatal-erroring out for
-the cron.
-* Bug Fix: Add an empty debug.php file to the /modules/ folder, to solve some
-update issues where it never got deleted.
-
-= 2.3.5 =
-Release Date: August 12, 2013
-Release Post: http://wp.me/p1moTy-vf
-
-* Enhancement: Added Path support to Publicize.
-
-= 2.3.4 =
-Release Date: August 6, 2013
-Release Post: http://wp.me/p1moTy-uL
-
-* Bug Fix: Correct when output occurs with CSV export for feedback.
-* Bug Fix: Tidy up the Heartbeat API.
-* Enhancement: User Agent: Improve detecting of bots.
-* Enhancement: Genericons: Make sure we're pulling the freshest version from
-genericons.com on each release.
-* Enhancement: JSON API: Open up replies/new endpoints so that users can
-comment on blogs that are not in their access token.
-* Enhancement: Photon: Apply to `get_post_gallery()` function as well.
-* Enhancement: Tiled Galleries: Add a default bottom margin to be more robust
-out of the box.
-* Translations: Adding in fresher translation files.
-* Deprecation: Removing the retinization code for 3.4, as it was included in
-WordPress trunk from 3.5 onwards.
-
-= 2.3.3 =
-Release Date: July 26, 2013
-Release Post: http://wp.me/p1moTy-uv
-
-* Bug Fix: We were inadvertently overwriting cron schedules with our Jetpack
-heartbeat. This should now be fixed.
-* Enhancement: New Facebook Sharing icons.
-* Enhancement: Minor update to the Minileven stylesheet.
-
-= 2.3.2 =
-Release Date: July 25, 2013
-Release Post: http://wp.me/p1moTy-uv
-
-* Bug Fix: Fixed an issue where Facebook Pages were not available when
-connecting a Publicize account.
-* Bug Fix: For some web hosts, fixed an issue where 'Jetpack ID' error would
-occur consistently on connecting to WordPress.com.
-* Enhancement: Adding some new stats and heartbeat checking to Jetpack.
-
-= 2.3.1 =
-Release Date: July 2, 2013
-Release Post: http://wp.me/p1moTy-t9
-
-* Enhancement: Social Links: Retooling the class for better consistency and
-performance behind the scenes.
-* Enhancement: Omnisearch: Make it easier to search Custom Post Types. No
-longer need to extend the class, if all you want is a basic display. Just
-call `new Jetpack_Omnisearch_Posts( 'cpt' );`
-* Enhancement: Sharing Buttons: LinkedIn: Use the official button's sharing
-link on the Jetpack implementation for a more consistent sharing experience
-and produce better results on LinkedIn's end.
-* Enhancement: Debug / Connection: Better logic in determining whether the
-server can use SSL to connect to WPCOM servers.
-* Enhancement: Sharing: Twitter: Calculate the size of the Tweet based on the
-short URL rather than the full URL size.
-* Enhancement: Debug: More readable and understandable messages.
-* Enhancement: Likes: Including some MP6 styles.
-* Enhancement: Comments: Add new core classes to comment form. See
-http://core.trac.wordpress.org/changeset/24525
-* Bug Fix: Omnisearch: Don't load everything initially, run the providers off
-admin_init, and then issue an action for folks to hook into.
-* Bug Fix: Omnisearch: Modify some child class functions to match the parent's
-parameters and avoid strict notices in newer versions of PHP.
-* Bug Fix: Omnisearch: Hide the search form in the module description if the
-current user can't use it.
-* Bug Fix: Comment Form: Use edit_pages, not edit_page (fixes glitch in
-previous beta, never publicly released).
-* Bug Fix: Twitter Timeline Widget: Additional testing of values and casting
-to default if they are nonconforming.
-* Bug Fix: Sharing: Pinterest: Make the button wider if there's a count to
-avoid overlapping with others.
-* Bug Fix: Post By Email: Change configuration_redirect to static.
-* Bug Fix: Likes: Don't call configuration_redirect as a static, do it as a
-method.
-* Bug Fix: Add some further security measures to module activation.
-
-= 2.3 =
-Release Date: June 19, 2013
-Release Post: http://wp.me/p1moTy-rX
-
-* Enhancement: Omnisearch: Search once, get results from everything!
-Omnisearch is a single search box that lets you search many different things
-* Enhancement: Debugger: this module helps you debug connection issues right
-from your dashboard, and contact the Jetpack support team if needed
-* Enhancement: Social Links: this module is a canonical source, based on
-Publicize, that themes can use to let users specify where social icons should
-link to
-* Enhancement: It’s now easier to find out if a module is active or note,
-thanks to the new Jetpack::is_module_active()
-* Enhancement: Contact Form: You are now able to customize the submit button
-text thanks to the submit_button_text parameter
-* Enhancement: Comments: We've added a filter to let users customize the
-Comment Reply label, and users can now also customize the prompt on the
-comment form again.
-* Enhancement: Mobile Theme: Add genericons.css and registering it so it’s
-easily accessible to other modules that may want it
-* Enhancement: Tiled Galleries: You can now customize the captions, thanks to
-the jetpack_slideshow_slide_caption filter
-* Enhancement: Widgets: Twitter Timeline: Add the noscrollbar option
-* Enhancement: Widgets: Facebook Like Box Widget: add a show_border attribute
-* Enhancement: Widgets: FB Like Box: let Jetpack users override the iframe
-background color set in an inline style attribute by using the
-jetpack_fb_likebox_bg filter
-* Bug Fix: Carousel: Fix a bug where double-clicking a gallery thumbnail broke
-the carousel functionality
-* Bug Fix: Comments: Change “must-log-in” to class from ID
-* Bug Fix: Contact Form: Make the Add Contact Form link a button, ala Add
-Media in core
-* Bug Fix: Contact Form: Fix encoding of field labels
-* Bug Fix: Contact Form: Remove references to missing images
-* Bug Fix: Fix 2 XSS vulnerabilities
-* Bug Fix: JSON API: Minor fixes for bbPress compatibility
-* Bug Fix: JSON API: Fix metadata bugs
-* Bug Fix: JSON API: Add a new hook that is fired when a post is posted using
-the API
-* Bug Fix: JSON API: Prefork/REST: update path normalizer to accept versions
-other than 1
-* Bug Fix: JSON API: Remove extra parenthesis in CSS
-* Bug Fix: Custom CSS: Move content width filters higher up so that they’re
-active for all users, not just logged-in admins.
-* Bug Fix: Custom CSS: All CSS properties that accept images as values need to
-be allowed to be declared multiple times so that cross-browser gradients work
-* Bug Fix: Infinite Scroll: Allow themes to define a custom function to render
-the IS footer
-* Bug Fix: Infinite Scroll: Fix up Twenty Thirteen styles for RTL and small
-viewports.
-* Bug Fix: Likes: Fix ‘Call to undefined function’
-* Bug Fix: Likes: Add scrolling no to iframe to make sure that like button in
-admin bar does not show scrollbars
-* Bug Fix: Likes: Remove setInterval( JetpackLikesWidgetQueueHandler, 250 )
-call that was causing heavy CPU load
-* Bug Fix: Mobile Theme: Remove unused variable & function call
-* Bug Fix: Publicize: Fix LinkedIn profile URL generation
-* Bug Fix: Publicize: Better refresh handling for services such as LinkedIn
-and Facebook
-* Bug Fix: Shortcodes: Audio shortcode: Treat src as element 0. Fixes audio
-shortcodes created by wp_embed_register_handler when an audio url is on a line
-by itself
-* Bug Fix: Bandcamp: Updates to the Bandcamp shortcode
-* Bug Fix: Stats: Fix missing function get_editable_roles on non-admin page
-loads
-* Bug Fix: Widgets: Twitter Timeline: Fix HTML links in admin; set default
-values for width/height; change some of the sanitization functions
-* Bug Fix: Widgets: Top Posts Widget: Exclude attachments
-* Bug Fix: Widgets: Top Posts Widget: fix data validation for number of posts
-* Bug Fix: Fix PHP warnings non-static method called dynamically
-* Bug Fix: Fixed an issue in image extraction from HTML content
-* Bug Fix: Open Graph: Change default minimum size for og:image too 200×200
-* Note: The old Twitter widget was removed in favour of Twitter Timeline
-widget
-* Note: Add is_module_active() to make it easier to detect what is and what
-isn’t
-* Note: Compressing images via lossless methods
-* Note: Tidying up jetpack’s CSS
-* Note: Set the max DB version for our retina overrides that were meant to
-stop for WordPress 3.5
-* Note: Updating spin.js to the current version, and shifting to the canonical
-jquery.spin.js library
-* Note: Adding Jetpack_Options class, and abstracting out options functions to
-it
-
-= 2.2.5 =
-Release Date: May 1, 2013
-Release Post: http://wp.me/p1moTy-p8
-
-* Enhancement: Stats: Counting of registered users' views can now be enabled
-for specific roles
-* Bug Fix: Security tightening for metadata support in the REST API
-* Bug Fix: Update the method for checking Twitter Timeline widget_id and
-update coding standards
-* Bug Fix: Custom CSS: Allow the content width setting to be larger than the
-theme's content width
-* Bug Fix: Custom CSS: Fix possible missing argument warning.
-
-= 2.2.4 =
-Release Date: April 26, 2013
-Release Post: http://wp.me/p1moTy-oU
-
-* Bug Fix: JSON API compat file include was not assigning a variable
-correctly, thus throwing errors. This has been resolved.
-
-= 2.2.3 =
-Release Date: April 26, 2013
-Release Post: http://wp.me/p1moTy-oR
-
-* Enhancement: Comments - Add the reply-title H3 to the comment form so that
-themes or user CSS can style it
-* Enhancement: Custom CSS - Support for the CSS @viewport
-* Enhancement: JSON API - Support for i_like, is_following, and is_reblogged
-* Enhancement: JSON API: Custom Post Type Support
-* Enhancement: JSON API: Meta Data Support
-* Enhancement: JSON API: Bundled Support for bbPress
-* Enhancement: JSON API: Additions of following, reblog, and like status for
-post endpoints.
-* Enhancement: Shortcodes - Add Bandcamp shortcode
-* Enhancement: Tiled Galleries - Add code to get blog_id
-* Bug Fix: Carousel - Support relative image paths incase a plugin is
-filtering attachment URLs to be relative instead of absolute
-* Bug Fix: Carousel - Add likes widget to images / Respect comment settings
-for name/email
-* Bug Fix: Carousel - Make name and email optional if the setting in the admin
-area says they are
-* Bug Fix: Contact Form - Bug fixes, including a fix for WP-CLI
-* Bug Fix: Contact Form - Remove deprecated .live calls, delegate lazily to
-jQuery(document) since it's all in an iframe modal
-* Bug Fix: Contact Form - RTL styles
-* Bug Fix: Contact Form - Better handle MP6 icons
-* Bug Fix: Custom CSS - array_shift() took a variable by reference, so avoid
-passing it the result of a function
-* Bug Fix: Custom CSS - Allow case-insensitive CSS properties (<a
-href="https://wordpress.org/support/topic/two-issues-with-jetpack-css-module?replies=9">ref</a>)
-* Bug Fix: Infinite Scroll - Maintain main query's `post__not_in` values when
-querying posts for IS
-* Bug Fix: Infinite Scroll - Ensure that IS's `pre_get_posts` method isn't
-applied in the admin. Also fixes an incorrect use of `add_filter()` where
-`add_action()` was meant. Fixes #1696-plugins
-* Bug Fix: Infinite Scroll - CSS update - IS footer was too large in Firefox
-* Bug Fix: Infinite Scroll - Add bundled support for Twenty Thirteen default
-theme
-* Bug Fix: Infinite Scroll - Include posts table's prefix when modifying the
-SQL WordPress generates to retrieve posts for Infinite Scroll
-* Bug Fix: JSON API - Use wp_set_comment_status to change the comment status,
-to make sure actions are run where needed
-* Bug Fix: Likes - Update style and logic for matching id's
-* Bug Fix: Mobile Theme - Ensure that
-<code>minileven_actual_current_theme()</code> is child-theme compatible +
-other updates
-* Bug Fix: Mobile Theme - Update method for finding currently active theme.
-* Bug Fix: Notifications - Remove the postmessage.js enqueue since this
-feature solely supports native postMessage
-* Bug Fix: Notifications - Clean up script enqueues and use core versions of
-underscore and backbone on wpcom as fallbacks
-* Bug Fix: Notifications - Enqueue v2 scripts and style
-* Bug Fix: Notifications - Prefix module-specific scripts and style to prevent
-collision
-* Bug Fix: Notifications - Include lang and dir attributes on
-#wpnt-notes-panel so the notifications iframe can use these to display
-correctly
-* Bug Fix: Open Graph: Use the profile OG type instead of author. Add tags for
-first/last names
-* Bug Fix: Publicize - Remove the Yahoo! service because they stopped
-supporting that API entirely
-* Bug Fix: Publicize - fix fatal errors caused by using a method on a
-non-object. Props @ipstenu
-* Bug Fix: Sharing - Adding 2x graphics for Pocket sharing service
-* Bug Fix: Sharing - Bug fixes, and a new filter
-* Bug Fix: Shortcodes - Audio: make sure that the Jetpack audion shortcode
-does not override the 3.6 core audio shortcode. Also, we need to filter the
-old Jetpack-style shortcode to properly set the params for the Core audio
-shortcode.
-* Bug Fix: Shortcodes - Audio: Re-enable the flash player
-* Bug Fix: Shortcodes - Slideshow: RTL styling update
-* Bug Fix: Tiled Galleries - Fix IE8 display bug where it doesn't honor inline
-CSS for width on images
-* Bug Fix: Tiled Galleries - Remove depreacted hover call, use mouseenter
-mouseleave instead
-* Enhancement: Twitter Timeline Widget: New JavaScript based widget. Old one
-will discontinue May 7th.
-
-= 2.2.2 =
-Release Date: April 5, 2013
-
-* Enhancement: Mobile Theme: Add controls for custom CSS.
-* Enhancement: Sharing: Add Pocket to the available services.
-* Bug Fix: Custom CSS: Update the method for generating content width setting.
-* Bug Fix: JSON API: Security updates.
-* Bug Fix: Likes: Add settings for email notifications and misc style updates.
-* Bug Fix: Notifications: Add the post types to sync after init.
-* Bug Fix: Publicize: RTL styling.
-* Bug Fix: Shortcodes: security fixes and function prefixing.
-* Bug Fix: Widgets: Update wording on the Top Posts widget for clarity.
-* Bug Fix: Jetpack Post Images security fixes.
-
-= 2.2.1 =
-Release Date: March 28, 2013
-Release Post: http://wp.me/p1moTy-ob
-
-* Enhancement: Development Mode: Define the `JETPACK_DEV_DEBUG` constant to
-`true` to enable an offline mode for localhost development. Only modules that
-don't require a WordPress.com connection can be enabled in this mode.
-* Enhancement: Likes: Added the number of likes to the wp-admin/edit.php
-screens.
-* Enhancement: Mobile Theme - design refresh
-* Enhancement: Shortcodes - Add a filter to the shortcode loading section so
-that a plugin can override what Jetpack loads for shortcodes
-* Enhancement: Widgets - Filter Jetpack's widgets so that a plugin can control
-which widgets get loaded
-* Bug Fix: Comments - Add in a wrapper div with id='commentform'
-* Bug Fix: Contact Form - Added date field with datepicker
-* Bug Fix: Contact Form - Allowed non-text widgets to use contact forms by
-running their output through the widget_text filter
-* Bug Fix: Custom CSS - Allowing color values to be defined multiple times
-* Bug Fix: Custom CSS - Dynamically loading the correct CSS/LESS/SCSS mode for
-the CSS editor if the user changes the preprocessor
-* Bug Fix: Custom CSS - Using the unminified worker CSS
-* Bug Fix: Custom CSS - Added rule: reminder about using .custom-background on
-body selector
-* Bug Fix: Custom CSS - Modified rule: Removed portion of overqualification
-rule that deems 'a.foo' overqualified if there are no other 'a' rules
-* Bug Fix: Custom CSS - Ensuring that the editor and the textarea behind it
-are using the same font so that the cursor appears in the correct location
-* Bug Fix: Custom CSS - Fix a bug that caused some sites to always ignore the
-base theme's CSS when in preview mode
-* Bug Fix: Custom CSS - Run stripslashes() before passing CSS to save()
-* Bug Fix: Custom CSS - Moving inline CSS and JavaScript into external files
-* Bug Fix: Infinite Scroll - Use the `is_main_query()` function and query
-method
-* Bug Fix: Infinite Scroll - Remove unused styles and an unnecessary margin
-setting
-* Bug Fix: Infinite Scroll - Allow the query used with IS to be filtered, so
-IS can be applied to a new query within a page template
-* Bug Fix: JSON API - Catch the 'User cannot view password protected post'
-error from can_view_post and bypass it for likes actions if the user has the
-password entered
-* Bug Fix: Likes - Bump cache buster, Don't show likes for password protected
-posts
-* Bug Fix: Notifications - Remove a redundant span closing tag
-* Bug Fix: Photon - If an image is already served from Photon but the anchor
-tag that surrounds it hasn't had its `href` value rewritten to use Photon, do
-so. Accounts for WP galleries whose individual items are linked to the
-original image files
-* Bug Fix: Publicize - Allows GLOBAL_CAP to be filtered, Adds an AYS to
-connection deletion, UI improvement for MP6 (and in general)
-* Bug Fix: Sharedaddy - Fire the sharing redirect earlier for increased plugin
-compatibility
-* Bug Fix: Stats - Move the display:none CSS output to wp_head so it gets
-written inside the HEAD tag if the option to hide the stats smilie is active
-* Bug Fix: Tiled Galleries - A more descriptive name for the default gallery
-type
-* Bug Fix: Tiled Galleries - Hide the Columns setting for gallery types that
-don't support it
-* Bug Fix: Run the admin_menu action late so that plugins hooking into it get
-a chance to run
-* Bug Fix: Prophylactic strict equality check
-
-= 2.2 =
-Release Date: February 26, 2013
-Release Post: http://wp.me/p1moTy-ns
-
-* Enhancement: Likes: Allow your readers to show their appreciation of your
-posts.
-* Enhancement: Shortcodes: SoundCloud: Update to version 2.3 of the SoundCloud
-plugin (HTML5 default player, various fixes).
-* Enhancement: Shortcodes: Subscriptions: Add a shortcode to enable placement
-of a subscription signup form in a post or page.
-* Enhancement: Sharedaddy: Allow selecting multiple images from a post using
-the Pinterest share button.
-* Enhancement: Contact Form: Allow feedbacks to be marked spam in bulk.
-* Enhancement: Widgets: Readmill Widget: Give your visitors a link to send
-your book to their Readmill library.
-* Note: Notifications: Discontinue support for Internet Explorer 7 and below.
-* Bug Fix: JSON API: Fix authorization problems that some users were
-experiencing.
-* Bug Fix: JSON API: Sticky posts were not being sorted correctly in /posts
-requests.
-* Bug Fix: Stats: sync stats_options so server has roles array needed for
-view_stats cap check.
-* Bug Fix: Infinite Scroll: Display improvements.
-* Bug Fix: Infinite Scroll: WordPress compatibility fixes.
-* Bug Fix: Photon: Only rewrite iamge urls if the URL is compatible with
-Photon.
-* Bug Fix: Photon: Account for registered image sizes with one or more
-dimesions set to zero.
-* Bug Fix: Subscriptions: Make HTML markup more valid.
-* Bug Fix: Subscriptions: Fixed notices displayed in debug mode.
-* Bug Fix: Custom CSS: CSS warnings and errors should now work in environments
-where JavaScript is concatenated or otherwise modified before being served.
-* Bug Fix: Hovercards: WordPress compatibility fixes.
-* Bug Fix: Improved image handling for the Sharing and Publicize modules.
-* Bug Fix: Carousel: Display and Scrollbar fixes.
-* Bug Fix: Tiled Galleries: Restrict images in tiled galleries from being set
-larger than their containers.
-* Bug Fix: Widgets: Gravatar Profile: CSS fixes.
-* Bug Fix: Publicize: Strip HTML comments from the data we send to the third
-party services.
-* Bug Fix: Notifications: Dropped support for IE7 and below in the
-notifications menu.
-* Bug Fix: Custom CSS Editor: Allow custom themes to save CSS more easily.
-* Bug Fix: Infinite Scroll: Waits until the DOM is ready before loading the
-scrolling code.
-* Bug Fix: Mobile Theme: If the user has disabled the custom header text
-color, show the default black header text color.
-* Bug Fix: Mobile Theme: Fix for the "View Full Site" link.
-* Bug Fix: Mobile Theme: Use a filter to modify the output of wp_title().
-* Bug Fix: Publicize: Twitter: Re-enable character count turning red when more
-than 140 characters are typed.
-
-= 2.1.2 =
-Release Date: February 5, 2013
-
-* Enhancement: Infinite Scroll: Introduce filters for Infinite Scroll.
-* Enhancement: Shortcodes: TED shortcode.
-* Bug Fix: Carousel: Make sure to use large image sizes.
-* Bug Fix: Carousel: Clicking the back button in your browser after exiting a
-carousel gallery brings you back to the gallery.
-* Bug Fix: Carousel: Fix a scrollbar issue.
-* Bug Fix: Comments: Move the get_avatar() function out of the base class.
-* Bug Fix: Contact Form: Prevent the form from displaying i18n characters.
-* Bug Fix: Contact Form: Remove the !important CSS rule.
-* Bug Fix: Infinite Scroll: Main query arguments are not respected when using
-default permalink.
-* Bug Fix: JSON API: Trap 'wp_die' for new comments and image uploads.
-* Bug Fix: JSON API: Use a better array key for the user_ID.
-* Bug Fix: JSON API: Make the class instantiable only once, but multi-use.
-* Bug Fix: JSON API: Fix lookup of pages by page slug.
-* Bug Fix: JSON API: Updates for post likes.
-* Bug Fix: Mobile Theme: Remove Android download link for BB10 and Playbook.
-* Bug Fix: Open Graph: Stop using Loop functions to get post data for meta
-tags.
-* Bug Fix: Photon: Suppress and check for warnings when pasing_url and using
-it.
-* Bug Fix: Photon: Ensure full image size can be used.
-* Bug Fix: Photon: Resolve Photon / YouTube embed conflict.
-* Bug Fix: Photon: Fix dimension parsing from URLs.
-* Bug Fix: Photon: Make sure that width/height atts are greater than zero.
-* Bug Fix: Sharedaddy: Layout fixes for share buttons.
-* Bug Fix: Sharedaddy: Always send Facebook a language locale.
-* Bug Fix: Sharedaddy: Don't look up share counts for empty URLs.
-* Bug Fix: Shortcodes: Ensure that images don't overflow their containers in
-the slideshow shortcode.
-* Bug Fix: Shortcodes: only enqueue jquery if archive supports Infinite Scroll
-in the Audio Shortcode.
-* Bug Fix: Tiled Galleries: Use a more specific class for gallery item size to
-avoid conflicts.
-* Bug Fix: Tiled Galleries: Fixing scrolling issue when tapping on a Tiled
-Gallery on Android.
-* Bug Fix: Widgets: Gravatar profile widget typo.
-* Bug Fix: Widgets: Add (Jetpack) to widget titles.
-* Bug Fix: Widgets: Twitter wasn't wrapping links in the t.co shortener.
-* Bug Fix: Widgets: Facebook Likebox updates to handling the language locale.
-* Bug Fix: Widgets: Top Posts: Fixed a WP_DEBUG notice.
-* Bug Fix: Widgets: Gravatar Profile Widget: transient names must be less than
-45 characters long.
-* Bug Fix: typo in delete_post_action function.
-* Bug Fix: Load rendered LaTeX image on same protocol as its page.
-
-
-= 2.1.1 =
-Release Date: January 5, 2013
-Release Post: http://wp.me/p1moTy-ng
-
-* Bug Fix: Fix for an error appearing for blogs updating from Jetpack 1.9.2 or
-earlier to 2.1.
-
-= 2.1 =
-Release Date: January 4, 2013
-Release Post: http://wp.me/p1moTy-m3
-
-* Enhancement: Tiled Galleries: Show off your photos with cool mosaic
-galleries.
-* Enhancement: Slideshow gallery type: Display any gallery as a slideshow.
-* Enhancement: Custom CSS: Allow zoom property.
-* Enhancement: Stats: Show WordPress.com subscribers in stats.
-* Bug Fix: Fix errors shown after connecting Jetpack to WordPress.com.
-* Bug Fix: Photon: Fix bug causing errors to be shown in some posts.
-* Bug Fix: Photon: Convert all images in posts when Photon is active.
-* Bug Fix: Infinite Scroll: Improved compatibility with the other modules.
-* Bug Fix: Custom CSS: Updated editor to fix missing file errors.
-* Bug Fix: Publicize: Don't show the Facebook profile option if this is a
-Page-only account.
-* Bug Fix: Photon: A fix for photos appearing shrunken if they didn't load
-quickly enough.
-* Bug Fix: Sharing: A compatibility fix for posts that only have partial
-featured image data.
-* Bug Fix: Publicize/Sharing: For sites without a static homepage, don't set
-the OpenGraph url value to the first post permalink.
-* Bug Fix: Mobile Theme: Better compatibility with the customizer on mobile
-devices.
-* Bug Fix: Sharing: Don't show sharing options on front page if that option is
-turned off.
-* Bug Fix: Contact Form: Fix PHP warning shown when adding a Contact Form in
-WordPress 3.5.
-* Bug Fix: Photon: Handle images with relative paths.
-* Bug Fix: Contact Form: Fix compatibility with the Shortcode Embeds module.
-
-
-= 2.0.4 =
-Release Date: December 14, 2012
-Release Post: http://wp.me/p1moTy-lT
-
-* Bug Fix: Open Graph: Correct a bug that prevents Jetpack from being
-activated if the SharePress plugin isn't installed.
-
-= 2.0.3 =
-Release Date: December 14, 2012
-Release Post: http://wp.me/p1moTy-lJ
-
-* Enhancement: Infinite Scroll: support
-[VideoPress](https://wordpress.org/plugins/video/) plugin.
-* Enhancement: Photon: Apply to all images retrieved from the Media Library.
-* Enhancement: Photon: Retina image support.
-* Enhancement: Custom CSS: Refined editor interface.
-* Enhancement: Custom CSS: Support [Sass](http://sass-lang.com/) and
-[LESS](http://lesscss.org/) with built-in preprocessors.
-* Enhancement: Open Graph: Better checks for other plugins that may be loading
-Open Graph tags to prevent Jetpack from doubling meta tag output.
-* Bug Fix: Infinite Scroll: Respect relative image dimensions.
-* Bug Fix: Photon: Detect custom-cropped images and use those with Photon,
-rather than trying to use the original.
-* Bug Fix: Custom CSS: Fix for bug preventing @import from working with
-url()-style URLs.
-
-= 2.0.2 =
-Release Date: November 21, 2012
-Release Post: http://wp.me/p1moTy-lu
-
-* Bug Fix: Remove an erroneous PHP short open tag with the full tag to correct
-fatal errors under certain PHP configurations.
-
-= 2.0.1 =
-Release Date: November 21, 2012
-Release Post: http://wp.me/p1moTy-lc
-
-* Enhancement: Photon: Support for the [Lazy
-Load](https://wordpress.org/plugins/lazy-load/) plugin.
-* Bug Fix: Photon: Fix warped images with un- or under-specified dimensions.
-* Bug Fix: Photon: Fix warped images with pre-photonized URLs; don't try to
-photonize them twice.
-* Bug Fix: Infinite Scroll: Check a child theme's parent theme for infinite
-scroll support.
-* Bug Fix: Infinite Scroll: Correct a bug with archives that resulted in posts
-appearing on archives that they didn't belong on.
-* Bug Fix: Publicize: Send the correct shortlink to Twitter (et al.) if your
-site uses a shortener other than wp.me.
-* Bug Fix: Sharing: Improved theme compatibility for the Google+ button.
-* Bug Fix: Notifications: Use locally-installed Javascript libraries if
-available.
-
-= 2.0 =
-Release Date: November 8, 2012
-Release Post: http://wp.me/p1moTy-jg
-
-* Enhancement: Publicize: Connect your site to popular social networks and
-automatically share new posts with your friends.
-* Enhancement: Post By Email: Publish posts to your blog directly from your
-personal email account.
-* Enhancement: Photon: Images served through the global WordPress.com cloud.
-* Enhancement: Infinite Scroll: Better/faster browsing by pulling the next set
-of posts into view automatically when the reader approaches the bottom of the
-page.
-* Enhancement: Open Graph: Provides more detailed information about your posts
-to social networks.
-* Enhancement: JSON API: New parameters for creating and viewing posts.
-* Enhancement: Improved compatibility for the upcoming WordPress 3.5.
-* Bug Fix: Sharing: When you set your sharing buttons to use icon, text, or
-icon + text mode, the Google+ button will display accordingly.
-* Bug Fix: Gravatar Profile Widget: Allow basic HTML to be displayed.
-* Bug Fix: Twitter Widget: Error handling fixes.
-* Bug Fix: Sharing: Improved theme compatibility
-* Bug Fix: JSON API: Fixed error when creating some posts in some versions of
-PHP.
-
-= 1.9.2 =
-Release Date: October 29, 2012
-
-* Bug Fix: Only sync options on upgrade once.
-
-= 1.9.1 =
-Release Date: October 29, 2012
-Release Post: http://wp.me/p1moTy-iC
-
-* Enhancement: Notifications feature is enabled for logged-out users when the
-module is active & the toolbar is shown by another plugin.
-* Bug Fix: Use proper CDN addresses to avoid SSL cert issues.
-* Bug Fix: Prioritize syncing comments over deleting comments on
-WordPress.com. Fixes comment notifications marked as spam appearing to be
-trashed.
-
-= 1.9 =
-Release Date: October 26, 2012
-Release Post: http://wp.me/p1moTy-hC
-
-* Enhancement: Notifications: Display Notifications in the toolbar and support
-reply/moderation of comment notifications.
-* Enhancement: Mobile Push Notifications: Added support for mobile push
-notifications of new comments for users that linked their accounts to
-WordPress.com accounts.
-* Enhancement: JSON API: Allows applications to send API requests via
-WordPress.com (see [the docs](http://developer.wordpress.com/docs/api/) )
-* Enhancement: Sync: Modules (that require the data) sync full Post/Comment to
-ensure consistent data on WP.com (eg Stats)
-* Enhancement: Sync: Improve syncing of site options to WP.com
-* Enhancement: Sync: Sync attachment parents to WP.com
-* Enhancement: Sync: Add signing of WP.com user ids for Jetpack Comments
-* Enhancement: Sync: Mark and obfuscate private posts.
-* Enhancement: Privacy: Default disable enhanced-distribution and json-api
-modules if site appears to be private.
-* Enhancement: Custom CSS: allow applying Custom CSS to mobile theme.
-* Enhancement: Sharing: On HTTPS pageloads, load as much of the sharing embeds
-as possible from HTTPS URLs.
-* Enhancement: Contact Form: Overhaul of the contact form code to fix
-incompatibilites with other plugins.
-* Bug Fix: Only allow users with manage_options permission to enable/disable
-modules
-* Bug Fix: Custom CSS: allow '/' in media query units; e.g.
-(-o-min-device-pixel-ratio: 3/2)
-* Bug Fix: Custom CSS: leave comments alone in CSS when editing but minify on
-the front end
-* Bug Fix: Sharing: Keep "more" pane open so Google+ Button isn't obscured
-* Bug Fix: Carousel: Make sure the original size is used, even when it is
-exceedingly large.
-* Bug Fix: Exclude iPad from Twitter on iPhone mobile browsing
-* Bug Fix: Sync: On .org user role changes synchronize the change to .com
-* Bug Fix: Contact Form: Fix a bug where some web hosts would reject mail from
-the contact form due to email address spoofing.
-
-= 1.8.3 =
-Release Date: October 23, 2012
-
-* Bug Fix: Subscriptions: Fix a bug where subscriptions were not being sent
-from the blog.
-* Bug Fix: Twitter: Fix a bug where the Twitter username was being saved as
-blank.
-* Bug Fix: Fix a bug where Contact Form notification emails were not being
-sent.
-
-= 1.8.2 =
-Release Date: October 4, 2012
-Release Post: http://wp.me/p1moTy-gI
-
-* Bug Fix: Subscriptions: Fix a bug where subscriptions were not sent for
-posts and comments written by some authors.
-* Bug Fix: Widgets: Fix CSS that was uglifying some themes (like P2).
-* Bug Fix: Widgets: Improve Top Posts and Pages styling.
-* Bug Fix: Custom CSS: Make the default "Welcome" message translatable.
-* Bug Fix: Fix Lithuanian translation.
-
-= 1.8.1 =
-Release Date: September 28, 2012
-Release Post: http://wp.me/p1moTy-gx
-
-* Bug Fix: Stats: Fixed a bug preventing some users from viewing stats.
-* Bug Fix: Mobile Theme: Fixed some disabled toolbar buttons.
-* Bug Fix: Top Posts widget: Fixed a bug preventing the usage of the Top Posts
-widget.
-* Bug Fix: Mobile Theme: Fixed a bug that broke some sites when the
-Subscriptions module was not enabled and the Mobile Theme module was enabled.
-* Bug Fix: Mobile Theme: Made mobile app promos in the Mobile Theme footer
-opt-in.
-* Bug Fix: Twitter Widget: A fix to prevent malware warnings.
-* Bug Fix: Mobile Theme: Fixed a bug that caused errors for some users with
-custom header images.
-
-= 1.8 =
-Release Date: September 27, 2012
-Release Post: http://wp.me/p1moTy-fV
-
-* Enhancement: Mobile Theme: Automatically serve a slimmed down version of
-your site to users on mobile devices.
-* Enhancement: Multiuser: Allow multiple users to link their accounts to
-WordPress.com accounts.
-* Enhancement: Custom CSS: Added support for object-fit, object-position,
-transition, and filter properties.
-* Enhancement: Twitter Widget: Added Follow button
-* Enhancement: Widgets: Added Top Posts and Pages widget
-* Enhancement: Mobile Push Notifications: Added support for mobile push
-notifications on new comments.
-* Enhancement: VideoPress: Shortcodes now support the HD option, for default
-HD playback.
-* Bug Fix: Twitter Widget: Fixed tweet permalinks in the Twitter widget
-* Bug Fix: Custom CSS: @import rules and external images are no longer
-stripped out of custom CSS
-* Bug Fix: Custom CSS: Fixed warnings and notices displayed in debug mode
-* Bug Fix: Sharing: Fixed double-encoding of image URLs
-* Bug Fix: Sharing: Fix Google +1 button HTML validation issues (again :))
-* Bug Fix: Gravatar Profile Widget: Reduce size of header margins
-
-= 1.7 =
-Release Date: August 23, 2012
-Release Post: http://wp.me/p1moTy-eq
-
-* Enhancement: CSS Editor: Customize your site's design without modifying your
-theme.
-* Enhancement: Comments: Submit the comment within the iframe. No more full
-page load to jetpack.wordpress.com.
-* Enhancement: Sharing: Share counts for Twitter, Facebook, LinkedIn
-* Enhancement: Sharing: Improve styling
-* Enhancement: Sharing: Add support for ReCaptcha
-* Enhancement: Sharing: Better extensability through filters
-* Enhancement: Widgets: Twitter: Attempt to reduce errors by storing a long
-lasting copy of the data. Thanks, kareldonk :)
-* Regression Fix: Sharing: Properly store and display the sharing label
-option's default value.
-* Bug Fix: Contact Form: remove worse-than-useless nonce.
-* Bug Fix: Subscriptions: remove worse-than-useless nonce.
-* Bug Fix: Sharing: Don't show sharing buttons twice on attachment pages.
-* Bug Fix: Sharing: Increase width of Spanish Like button for Facebook.
-* Bug Fix: Sharing: Use the correct URL to the throbber.
-* Bug Fix: Stats: Fix notice about undefined variable $alt
-* Bug Fix: Subscriptions: Make Subscriptions module obey the settings of the
-Settngs -> Discussion checkboxes for Follow Blog/Comments
-* Bug Fix: Shortcodes: VideoPress: Compatibility with the latest version of
-VideoPress
-* Bug Fix: Shortcodes: Audio: Include JS File for HTML5 audio player
-* Bug Fix: Hovercards: Improve cache handling.
-* Bug Fix: Widgets: Gravatar Profle: Correctly display service icons in edge
-cases.
-* Bug Fix: Widgets: Gravatar Profle: Prevent ugly "flash" of too-large image
-when page first loads on some sites
-* Bug Fix: Carousel: CSS Compatibility with more themes.
-
-= 1.6.1 =
-Release Date: August 4, 2012
-
-* Bug Fix: Prevent Fatal error under certain conditions in sharing module
-* Bug Fix: Add cachebuster to sharing.css
-* Bug Fix: Disable via for Twitter until more robust code is in place
-
-= 1.6 =
-Release Date: August 2, 2012
-Release Post: http://wp.me/p1moTy-e0
-
-* Enhancement: Carousel: Better image resolution selection based on available
-width/height.
-* Enhancement: Carousel: Load image caption, metadata, comments, et alii when
-a slide is clicked to switch to instead of waiting.
-* Enhancement: Carousel: Added a "Comment" button and handling to scroll to
-and focus on comment textarea.
-* Enhancement: Widgets: Facebook Likebox now supports a height parameter and a
-better width parameter.
-* Enhancement: Widgets: Better feedback when widgets are not set up properly.
-* Enhancement: Shortcodes: Google Maps shortcode now supports percentages in
-the width.
-* Enhancement: Shortcodes: Update Polldaddy shortcode for more efficient
-Javascript libraries.
-* Enhancement: Shortcodes: Youtube shortcode now has playlist support.
-* Enhancement: Add Gravatar Profile widget.
-* Enhancement: Update Sharedaddy to latest version, including Pinterest
-support.
-* Enhancement: Retinize Jetpack and much of WordPress.
-* Bug Fix: Shortcodes: Fix Audio shortcode color parameter and rename encoding
-function.
-* Bug Fix: Shortcodes: Don't output HTML 5 version of the Audio shortcode
-because of a bug with Google Reader.
-* Bug Fix: Jetpack Comments: Don't overlead the addComments object if it
-doesn't exist. Fixes spacing issue with comment form.
-* Bug Fix: Contact Form: If send_to_editor() exists, use it. Fixes an IE9 text
-area issue.
-
-= 1.5 =
-Release Date: July 31, 2012
-Release Post: http://wp.me/p1moTy-d7
-
-* Enhancement: Add Gallery Carousel feature
-* Note: the Carousel module bundles http://fgnass.github.com/spin.js/ (MIT
-license)
-
-= 1.4.2 =
-Release Date: June 20, 2012
-
-* Bug Fix: Jetpack Comments: Add alternative Javascript event listener for
-Internet 8 users.
-* Enhancement: Remove more PHP 4 backwards-compatible code (WordPress
-andJetpack only support PHP 5).
-* Enhancement: Remove more WordPress 3.1 and under backwards-compatible code.
-
-= 1.4.1 =
-Release Date: June 15, 2012
-
-* Bug Fix: Jetpack Comments / Subscriptions: Add checkboxes and logic control
-for the Subscription checkboxes.
-
-= 1.4 =
-Release Date: June 14, 2012
-Release Post: http://wp.me/p1moTy-cz
-
-* Enhancement: Add Jetpack Comments feature.
-* Bug Fix: Sharing: Make the sharing_label translatable.
-* Bug Fix: Sharing: Fixed the file type on the LinkedIn graphic.
-* Bug Fix: Sharing: Fixes for the Faceboox Like button language locales.
-* Bug Fix: Sharing: Updates for the "more" button when used with touch screen
-devices.
-* Bug Fix: Sharing: Properly scope the More button so that multiple More
-buttons on a page behave properly.
-* Bug Fix: Shortcodes: Update the YouTube and Audio shortcodes to better
-handle spaces in the URLs.
-* Bug Fix: Shortcodes: Make the YouTube shortcode respect embed settings in
-Settings -> Media when appropriate.
-* Bug Fix: Shortcodes: Removed the Slide.com shortcode; Slide.com no longer
-exists.
-* Bug Fix: Shortcodes: Match both http and https links in the [googlemaps]
-shortcode.
-* Bug Fix: After the Deadline: Code clean up and removal of inconsistencies.
-
-= 1.3.4 =
-Release Date: May 24, 2012
-
-* Bug Fix: Revert changes to the top level menu that are causing problems.
-
-= 1.3.3 =
-Release Date: May 22, 2012
-
-* Bug Fix: Fix notices caused by last update
-
-= 1.3.2 =
-Release Date: May 22, 2012
-
-* Bug Fix: Fix Jetpack menu so that Akismet and VaultPress submenus show up.
-
-= 1.3.1 =
-Release Date: May 22, 2012
-
-* Enhancement: Add a new widget, the Facebook Likebox
-* Bug Fix: Sharing: Sharing buttons can now be used on custom post types.
-* Bug Fix: Contact Forms: Make Contact Forms widget shortcode less aggressive
-about the shortcodes it converts.
-* Bug Fix: Ensure contact forms are parsed correctly in text widgets.
-* Bug Fix: Connection notices now only appear on the Dashboard and plugin
-page.
-* Bug Fix: Connection notices are now dismissable if Jetpack is not network
-activated.
-* Bug Fix: Subscriptions: Fix an issue that was causing errors with new
-BuddyPress forum posts.
-
-= 1.3 =
-Release Date: April 25, 2012
-Release Post: http://wp.me/p1moTy-bq
-
-* Enhancement: Add Contact Forms feature. Formerly Grunion Contact Forms.
-* Bug Fix: Tweak YouTube autoembedder to catch more YouTube URLs.
-* Bug Fix: Correctly load the Sharing CSS files.
-
-= 1.2.4 =
-Release Date: April 6, 2012
-
-* Bug Fix: Fix rare bug with static front pages
-
-= 1.2.3 =
-Release Date: April 5, 2012
-Release Post: http://wp.me/p1moTy-b4
-
-* Enhancement: Twitter Widget: Expand t.co URLs
-* Bug Fix: Various PHP Notices.
-* Bug Fix: WordPress Deprecated `add_contextual_help()` notices
-* Bug Fix: Don't display unimportant DB errors when processing Jetpack nonces
-* Bug Fix: Correctly sync data during certain MultiSite cases.
-* Bug Fix: Stats: Allow sparkline img to load even when there is a DB upgrade.
-* Bug Fix: Stats: Replace "loading title" with post title regardless of type
-and status.
-* Bug Fix: Stats: Avoid edge case infinite redirect for `show_on_front=page`
-sites where the `home_url()` conatins uppercase letters.
-* Bug Fix: Subscriptions: Don't send subscriptions if the feature is turned
-off in Jetpack.
-* Bug Fix: Subscriptions: Fix pagination of subscribers.
-* Bug Fix: Subscriptions: Sync data about categories/tags as well to improve
-subscription emails.
-* Bug Fix: Subscriptions: Better styling for the subscription success message.
-* Bug Fix: Shortcodes: Support for multiple Google Maps in one post. Support
-for all Google Maps URLs.
-* Bug Fix: Shortcodes: Improved support for youtu.be URLs
-* Bug Fix: Shortcodes: Improved Vimeo embeds.
-* Bug Fix: Sharing: Switch to the 20px version of Google's +1 button for
-consistency.
-* Bug Fix: Sharing: Fix Google +1 button HTML validation issues.
-* Bug Fix: Sharing: Disable sharing buttons during preview.
-* Bug Fix: Spelling and Grammar: Properly handle proofreading settings.
-* Bug Fix: Spelling and Grammar: Don't prevent post save when proofreading
-service is unavailable.
-
-= 1.2.2 =
-Release Date: December 6, 2011
-Release Post: http://wp.me/p1moTy-ax
-
-* Bug Fix: Ensure expected modules get reactivated correctly during upgrade.
-* Bug Fix: Don't send subscription request during spam comment submission.
-* Bug Fix: Increased theme compatibility for subscriptions.
-* Bug Fix: Remove reference to unused background image.
-
-= 1.2.1 =
-Release Date: November 18, 2011
-Release Post: http://wp.me/p1moTy-9H
-
-* Bug Fix: Ensure Site Stats menu item is accessible.
-* Bug Fix: Fixed errors displayed during some upgrades.
-* Bug Fix: Fix inaccurate new modules "bubble" in menu for some upgrades.
-* Bug Fix: Fix VaultPress detection.
-* Bug Fix: Fix link to http://jetpack.com/faq/
-
-= 1.2 =
-Release Date: November 17, 2011
-Release Post: http://wp.me/p1moTy-8x
-
-* Enhancement: Add Subscriptions: Subscribe to site's posts and posts'
-comments.
-* Enhancement: Add Google Maps shortcode.
-* Enhancement: Add Image Widget.
-* Enhancement: Add RSS Links Widget.
-* Enhancement: Stats: More responsive stats dashboard.
-* Enhancement: Shortcodes: Google Maps, VideoPress
-* Enhancement: Sharing: Google+, LinkedIn
-* Enhancement: Enhanced Distribution: Added Jetpack blogs to
-https://en.wordpress.com/firehose/
-* Bug Fix: Spelling and Grammar: WordPress 3.3 compatibility.
-* Bug Fix: Translatable module names/descriptinos.
-* Bug Fix: Correctly detect host's ability to make outgoing HTTPS requests.
-
-= 1.1.3 =
-Release Date: July 19, 2011
-Release Post: http://wp.me/p1moTy-90
-
-* Bug Fix: Increase compatibility with WordPress 3.2's new
-`wp_remote_request()` API.
-* Bug Fix: Increase compatibility with Admin Bar.
-* Bug Fix: Stats: Improved performance when creating new posts.
-* Bug Fix: Twitter Widget: Fix PHP Notice.
-* Bug Fix: Sharedaddy: Fix PHP Warning.
-* Enhancement: AtD: Add spellcheck button to Distraction Free Writing screen.
-* Translations: Added: Bosnian, Danish, German, Finnish, Galician, Croatian,
-Indonesian, Macedonian, Norwegian (Bokmål), Russian, Slovak, Serbian, Swedish
-* Translations: Updated: Spanish, French, Italian, Japanese, Brazilian
-Portuguese, Portuguese
-
-= 1.1.2 =
-Release Date: July 6, 2011
-Release Post: http://wp.me/p1moTy-8B
-
-* Bug Fix: Note, store, and keep fresh the time difference between the Jetpack
-site's host and the Jetpack servers at WordPress.com. Should fix all
-"timestamp is too old" errors.
-* Bug Fix: Improve experience on hosts capable of making outgoing HTTPS
-requests but incapable of verifying SSL certificates. Fixes some
-"register_http_request_failed", "error setting certificate verify locations",
-and "error:14090086:lib(20):func(144):reason(134)" errors.
-* Bug Fix: Better fallback when WordPress.com is experiencing problems.
-* Bug Fix: It's Jetpack, not JetPack :)
-* Bug Fix: Remove PHP Warnings/Notices.
-* Bug Fix: AtD: JS based XSS bug. Props markjaquith.
-* Bug Fix: AtD: Prevent stored configuration options from becoming corrupted.
-* Bug Fix: Stats: Prevent missing old stats for some blogs.
-* Bug Fix: Twitter Widget: Fix formatting of dates/times in PHP4.
-* Bug Fix: Twitter Widget: Cache the response from Twitter to prevent "Twitter
-did not respond. Please wait a few minutes and refresh this page." errors.
-* Enhancement: Slightly improved RTL experience. Jetpack 1.2 should include a
-much better fix.
-* Enhancement: Sharedaddy: Improve localization for Facebook Like button.
-* Enhancement: Gravatar Hovercards: Improved experience for Windows browsers.
-
-= 1.1.1 =
-Release Date: March 19, 2011
-Release Post: http://wp.me/p1moTy-8i
-
-* Bug Fix: Improve experience on hosts capable of making outgoing HTTPS
-requests but incapable of verifying SSL certificates. Fixes most "Your Jetpack
-has a glitch. Connecting this site with WordPress.com is not possible. This
-usually means your site is not publicly accessible (localhost)." errors.
-* Bug Fix: Sharedaddy: Fatal error under PHP4. Disable on PHP4 hosts.
-* Bug Fix: Stats: Fatal error under PHP4. Rewrite to be PHP4 compatible.
-* Bug Fix: Stats: Fatal error on some sites modifying/removing core WordPress
-user roles. Add sanity check.
-* Bug Fix: Stats: Replace debug output with error message in dashboard widget.
-* Bug Fix: Stats: Rework hook priorities so that stats views are always
-counted even if a plugin (such as Paginated Comments) bails early on
-template_redirect.
-* Bug Fix: Identify the module that connot be activated to fatal error during
-single module activation.
-* Bug Fix: `glob()` is not always available. Use `opendir()`, `readdir()`,
-`closedir()`.
-* Bug Fix: Send permalink options to Stats Server for improved per post
-permalink calculation.
-* Bug Fix: Do not hide Screen Options and Help links during Jetpack call to
-connect.
-* Bug Fix: Improve readablitiy of text.
-* Bug Fix: AtD: Correctly store/display options.
-* Enhancement: Output more informative error messages.
-* Enhancement: Improve CSS styling.
-* Enhancement: Stats: Query all post types and statuses when getting posts for
-stats reports.
-* Enhancement: Improve performance of LaTeX URLs be using cookieless CDN.
-
-= 1.1 =
-Release Date: March 9, 2011
-Release post: http://wp.me/p1moTy-7R
-
-* Initial release
diff --git a/plugins/jetpack/class.frame-nonce-preview.php b/plugins/jetpack/class.frame-nonce-preview.php
deleted file mode 100644
index 19c0f220..00000000
--- a/plugins/jetpack/class.frame-nonce-preview.php
+++ /dev/null
@@ -1,119 +0,0 @@
-<?php
-
-/**
- * Allows viewing posts on the frontend when the user is not logged in.
- */
-class Jetpack_Frame_Nonce_Preview {
- static $instance = null;
-
- /**
- * Returns the single instance of the Jetpack_Frame_Nonce_Preview object
- *
- * @since 4.3.0
- *
- * @return Jetpack_Frame_Nonce_Preview
- **/
- public static function get_instance() {
- if ( ! is_null( self::$instance ) ) {
- return self::$instance;
- }
-
- return self::$instance = new Jetpack_Frame_Nonce_Preview();
- }
-
- function __construct() {
- if ( isset( $_GET['frame-nonce'] ) && ! is_admin() ) {
- add_filter( 'pre_get_posts', array( $this, 'maybe_display_post' ) );
- }
-
- // autosave previews are validated differently
- if ( isset( $_GET[ 'frame-nonce' ] ) && isset( $_GET[ 'preview_id' ] ) && isset( $_GET[ 'preview_nonce' ] ) ) {
- remove_action( 'init', '_show_post_preview' );
- add_action( 'init', array( $this, 'handle_autosave_nonce_validation' ) );
- }
- }
-
- /**
- * Verify that frame nonce exists, and if so, validate the nonce by calling WP.com.
- *
- * @since 4.3.0
- *
- * @return bool
- */
- public function is_frame_nonce_valid() {
- if ( empty( $_GET[ 'frame-nonce' ] ) ) {
- return false;
- }
-
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client();
- $xml->query( 'jetpack.verifyFrameNonce', sanitize_key( $_GET['frame-nonce'] ) );
-
- if ( $xml->isError() ) {
- return false;
- }
-
- return (bool) $xml->getResponse();
- }
-
- /**
- * Conditionally add a hook on posts_results if this is the main query, a preview, and singular.
- *
- * @since 4.3.0
- *
- * @param WP_Query $query
- *
- * @return WP_Query
- */
- public function maybe_display_post( $query ) {
- if (
- $query->is_main_query() &&
- $query->is_preview() &&
- $query->is_singular()
- ) {
- add_filter( 'posts_results', array( $this, 'set_post_to_publish' ), 10, 2 );
- }
-
- return $query;
- }
-
- /**
- * Conditionally set the first post to 'publish' if the frame nonce is valid and there is a post.
- *
- * @since 4.3.0
- *
- * @param array $posts
- *
- * @return array
- */
- public function set_post_to_publish( $posts ) {
- remove_filter( 'posts_results', array( $this, 'set_post_to_publish' ), 10, 2 );
-
- if ( empty( $posts ) || is_user_logged_in() || ! $this->is_frame_nonce_valid() ) {
- return $posts;
- }
-
- $posts[0]->post_status = 'publish';
-
- // Disable comments and pings for this post.
- add_filter( 'comments_open', '__return_false' );
- add_filter( 'pings_open', '__return_false' );
-
- return $posts;
- }
-
- /**
- * Handle validation for autosave preview request
- *
- * @since 4.7.0
- *
- */
- public function handle_autosave_nonce_validation() {
- if ( ! $this->is_frame_nonce_valid() ) {
- wp_die( __( 'Sorry, you are not allowed to preview drafts.', 'jetpack' ) );
- }
- add_filter( 'the_preview', '_set_preview' );
- }
-}
-
-Jetpack_Frame_Nonce_Preview::get_instance();
diff --git a/plugins/jetpack/class.jetpack-admin.php b/plugins/jetpack/class.jetpack-admin.php
deleted file mode 100644
index bf802675..00000000
--- a/plugins/jetpack/class.jetpack-admin.php
+++ /dev/null
@@ -1,280 +0,0 @@
-<?php
-
-
-// Build the Jetpack admin menu as a whole
-class Jetpack_Admin {
-
- /**
- * @var Jetpack_Admin
- **/
- private static $instance = null;
-
- /**
- * @var Jetpack
- **/
- private $jetpack;
-
- static function init() {
- if( isset( $_GET['page'] ) && $_GET['page'] === 'jetpack' ) {
- add_filter( 'nocache_headers', array( 'Jetpack_Admin', 'add_no_store_header' ), 100 );
- }
-
- if ( is_null( self::$instance ) ) {
- self::$instance = new Jetpack_Admin;
- }
- return self::$instance;
- }
-
- static function add_no_store_header( $headers ) {
- $headers['Cache-Control'] .= ', no-store';
- return $headers;
- }
-
- private function __construct() {
- $this->jetpack = Jetpack::init();
-
- jetpack_require_lib( 'admin-pages/class.jetpack-react-page' );
- $this->jetpack_react = new Jetpack_React_Page;
-
- jetpack_require_lib( 'admin-pages/class.jetpack-settings-page' );
- $this->fallback_page = new Jetpack_Settings_Page;
-
- add_action( 'admin_menu', array( $this->jetpack_react, 'add_actions' ), 998 );
- add_action( 'jetpack_admin_menu', array( $this->jetpack_react, 'jetpack_add_dashboard_sub_nav_item' ) );
- add_action( 'jetpack_admin_menu', array( $this->jetpack_react, 'jetpack_add_settings_sub_nav_item' ) );
- add_action( 'jetpack_admin_menu', array( $this, 'admin_menu_debugger' ) );
- add_action( 'jetpack_admin_menu', array( $this->fallback_page, 'add_actions' ) );
-
- // Add redirect to current page for activation/deactivation of modules
- add_action( 'jetpack_pre_activate_module', array( $this, 'fix_redirect' ), 10, 2 );
- add_action( 'jetpack_pre_deactivate_module', array( $this, 'fix_redirect' ) );
-
- // Add module bulk actions handler
- add_action( 'jetpack_unrecognized_action', array( $this, 'handle_unrecognized_action' ) );
- }
-
- static function sort_requires_connection_last( $module1, $module2 ) {
- if ( $module1['requires_connection'] == $module2['requires_connection'] ) {
- return 0;
- } elseif ( $module1['requires_connection'] ) {
- return 1;
- } elseif ( $module2['requires_connection'] ) {
- return -1;
- }
-
- return 0;
- }
-
- // Produce JS understandable objects of modules containing information for
- // presentation like description, name, configuration url, etc.
- function get_modules() {
- include_once( JETPACK__PLUGIN_DIR . 'modules/module-info.php' );
- $available_modules = Jetpack::get_available_modules();
- $active_modules = Jetpack::get_active_modules();
- $modules = array();
- $jetpack_active = Jetpack::is_active() || Jetpack::is_development_mode();
- $overrides = Jetpack_Modules_Overrides::instance();
- foreach ( $available_modules as $module ) {
- if ( $module_array = Jetpack::get_module( $module ) ) {
- /**
- * Filters each module's short description.
- *
- * @since 3.0.0
- *
- * @param string $module_array['description'] Module description.
- * @param string $module Module slug.
- */
- $short_desc = apply_filters( 'jetpack_short_module_description', $module_array['description'], $module );
- // Fix: correct multibyte strings truncate with checking for mbstring extension
- $short_desc_trunc = ( function_exists( 'mb_strlen' ) )
- ? ( ( mb_strlen( $short_desc ) > 143 )
- ? mb_substr( $short_desc, 0, 140 ) . '...'
- : $short_desc )
- : ( ( strlen( $short_desc ) > 143 )
- ? substr( $short_desc, 0, 140 ) . '...'
- : $short_desc );
-
- $module_array['module'] = $module;
- $module_array['activated'] = ( $jetpack_active ? in_array( $module, $active_modules ) : false );
- $module_array['deactivate_nonce'] = wp_create_nonce( 'jetpack_deactivate-' . $module );
- $module_array['activate_nonce'] = wp_create_nonce( 'jetpack_activate-' . $module );
- $module_array['available'] = self::is_module_available( $module_array );
- $module_array['short_description'] = $short_desc_trunc;
- $module_array['configure_url'] = Jetpack::module_configuration_url( $module );
- $module_array['override'] = $overrides->get_module_override( $module );
-
- ob_start();
- /**
- * Allow the display of a "Learn More" button.
- * The dynamic part of the action, $module, is the module slug.
- *
- * @since 3.0.0
- */
- do_action( 'jetpack_learn_more_button_' . $module );
- $module_array['learn_more_button'] = ob_get_clean();
-
- ob_start();
- /**
- * Allow the display of information text when Jetpack is connected to WordPress.com.
- * The dynamic part of the action, $module, is the module slug.
- *
- * @since 3.0.0
- */
- do_action( 'jetpack_module_more_info_' . $module );
-
- /**
- * Filter the long description of a module.
- *
- * @since 3.5.0
- *
- * @param string ob_get_clean() The module long description.
- * @param string $module The module name.
- */
- $module_array['long_description'] = apply_filters( 'jetpack_long_module_description', ob_get_clean(), $module );
-
- ob_start();
- /**
- * Filter the search terms for a module
- *
- * Search terms are typically added to the module headers, under "Additional Search Queries".
- *
- * Use syntax:
- * function jetpack_$module_search_terms( $terms ) {
- * $terms = _x( 'term 1, term 2', 'search terms', 'jetpack' );
- * return $terms;
- * }
- * add_filter( 'jetpack_search_terms_$module', 'jetpack_$module_search_terms' );
- *
- * @since 3.5.0
- *
- * @param string The search terms (comma separated).
- */
- echo apply_filters( 'jetpack_search_terms_' . $module, $module_array['additional_search_queries'] );
- $module_array['search_terms'] = ob_get_clean();
-
- $module_array['configurable'] = false;
- if (
- current_user_can( 'manage_options' ) &&
- /**
- * Allow the display of a configuration link in the Jetpack Settings screen.
- *
- * @since 3.0.0
- *
- * @param string $module Module name.
- * @param bool false Should the Configure module link be displayed? Default to false.
- */
- apply_filters( 'jetpack_module_configurable_' . $module, false )
- ) {
- $module_array['configurable'] = sprintf( '<a href="%1$s">%2$s</a>', esc_url( $module_array['configure_url'] ), __( 'Configure', 'jetpack' ) );
- }
-
- $modules[ $module ] = $module_array;
- }
- }
-
- uasort( $modules, array( $this->jetpack, 'sort_modules' ) );
-
- if ( ! Jetpack::is_active() ) {
- uasort( $modules, array( __CLASS__, 'sort_requires_connection_last' ) );
- }
-
- return $modules;
- }
-
- static function is_module_available( $module ) {
- if ( ! is_array( $module ) || empty( $module ) )
- return false;
-
- /**
- * We never want to show VaultPress as activatable through Jetpack.
- */
- if ( 'vaultpress' === $module['module'] ) {
- return false;
- }
-
- if ( Jetpack::is_development_mode() ) {
- return ! ( $module['requires_connection'] );
- } else {
- if ( ! Jetpack::is_active() ) {
- return false;
- }
-
- return Jetpack_Plan::supports( $module['module'] );
- }
- }
-
- function handle_unrecognized_action( $action ) {
- switch( $action ) {
- case 'bulk-activate' :
- if ( ! current_user_can( 'jetpack_activate_modules' ) ) {
- break;
- }
-
- $modules = (array) $_GET['modules'];
- $modules = array_map( 'sanitize_key', $modules );
- check_admin_referer( 'bulk-jetpack_page_jetpack_modules' );
- foreach( $modules as $module ) {
- Jetpack::log( 'activate', $module );
- Jetpack::activate_module( $module, false );
- }
- // The following two lines will rarely happen, as Jetpack::activate_module normally exits at the end.
- wp_safe_redirect( wp_get_referer() );
- exit;
- case 'bulk-deactivate' :
- if ( ! current_user_can( 'jetpack_deactivate_modules' ) ) {
- break;
- }
-
- $modules = (array) $_GET['modules'];
- $modules = array_map( 'sanitize_key', $modules );
- check_admin_referer( 'bulk-jetpack_page_jetpack_modules' );
- foreach ( $modules as $module ) {
- Jetpack::log( 'deactivate', $module );
- Jetpack::deactivate_module( $module );
- Jetpack::state( 'message', 'module_deactivated' );
- }
- Jetpack::state( 'module', $modules );
- wp_safe_redirect( wp_get_referer() );
- exit;
- default:
- return;
- }
- }
-
- function fix_redirect( $module, $redirect = true ) {
- if ( ! $redirect ) {
- return;
- }
- if ( wp_get_referer() ) {
- add_filter( 'wp_redirect', 'wp_get_referer' );
- }
- }
-
- function admin_menu_debugger() {
- jetpack_require_lib( 'debugger' );
- Jetpack_Debugger::disconnect_and_redirect();
- $debugger_hook = add_submenu_page(
- null,
- __( 'Debugging Center', 'jetpack' ),
- '',
- 'manage_options',
- 'jetpack-debugger',
- array( $this, 'wrap_debugger_page' )
- );
- add_action( "admin_head-$debugger_hook", array( 'Jetpack_Debugger', 'jetpack_debug_admin_head' ) );
- }
-
- function wrap_debugger_page( ) {
- nocache_headers();
- if ( ! current_user_can( 'manage_options' ) ) {
- die( '-1' );
- }
- Jetpack_Admin_Page::wrap_ui( array( $this, 'debugger_page' ) );
- }
-
- function debugger_page() {
- jetpack_require_lib( 'debugger' );
- Jetpack_Debugger::jetpack_debug_display_handler();
- }
-}
-Jetpack_Admin::init();
diff --git a/plugins/jetpack/class.jetpack-affiliate.php b/plugins/jetpack/class.jetpack-affiliate.php
deleted file mode 100644
index 1bbf1d45..00000000
--- a/plugins/jetpack/class.jetpack-affiliate.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-
-if ( ! defined( 'ABSPATH' ) ) {
- // Exit if accessed directly
- exit;
-}
-
-/**
- * This class introduces routines to get an affiliate code, that might be obtained from:
- * - an `jetpack_affiliate_code` option in the WP database
- * - an affiliate code returned by a filter bound to the `jetpack_affiliate_code` filter hook
- *
- * @since 6.9.0
- */
-class Jetpack_Affiliate {
-
- /**
- * @since 6.9.0
- * @var Jetpack_Affiliate This class instance.
- **/
- private static $instance = null;
-
- private function __construct() {
- if ( Jetpack::is_development_mode() ) {
- return;
- }
- }
-
- /**
- * Initializes the class or returns the singleton
- *
- * @since 6.9.0
- *
- * @return Jetpack_Affiliate | false
- */
- public static function init() {
- if ( is_null( self::$instance ) ) {
- self::$instance = new Jetpack_Affiliate;
- }
- return self::$instance;
- }
-
- /**
- * Returns the affiliate code from database after filtering it.
- *
- * @since 6.9.0
- *
- * @return string The affiliate code.
- */
- public function get_affiliate_code() {
- /**
- * Allow to filter the affiliate code.
- *
- * @since 6.9.0
- *
- * @param string $aff_code The affiliate code, blank by default.
- */
- return apply_filters( 'jetpack_affiliate_code', get_option( 'jetpack_affiliate_code', '' ) );
- }
-
- /**
- * Returns the passed URL with the affiliate code added as a URL query arg.
- *
- * @since 6.9.0
- *
- * @param string $url The URL where the code will be added.
- *
- * @return string The passed URL with the code added.
- */
- public function add_code_as_query_arg( $url ) {
- if ( '' !== ( $aff = $this->get_affiliate_code() ) ) {
- $url = add_query_arg( 'aff', $aff, $url );
- }
- return $url;
- }
-}
-
-add_action( 'init', array( 'Jetpack_Affiliate', 'init' ) );
diff --git a/plugins/jetpack/class.jetpack-autoupdate.php b/plugins/jetpack/class.jetpack-autoupdate.php
deleted file mode 100644
index 0c9df00e..00000000
--- a/plugins/jetpack/class.jetpack-autoupdate.php
+++ /dev/null
@@ -1,302 +0,0 @@
-<?php
-
-/**
- * Handles items that have been selected for automatic updates.
- * Hooks into WP_Automatic_Updater
- */
-class Jetpack_Autoupdate {
-
- private $results = array();
-
- private $expected = array();
-
- private $success = array(
- 'plugin' => array(),
- 'theme' => array(),
- );
-
- private $failed = array(
- 'plugin' => array(),
- 'theme' => array(),
- );
-
- private static $instance = null;
-
- static function init() {
- if ( is_null( self::$instance ) ) {
- self::$instance = new Jetpack_Autoupdate;
- }
-
- return self::$instance;
- }
-
- private function __construct() {
- if ( Jetpack::is_module_active( 'manage' ) ) {
- add_filter( 'auto_update_theme', array( $this, 'autoupdate_theme' ), 10, 2 );
- add_filter( 'auto_update_core', array( $this, 'autoupdate_core' ), 10, 2 );
- add_filter( 'auto_update_translation', array( $this, 'autoupdate_translation' ), 10, 2 );
- add_action( 'automatic_updates_complete', array( $this, 'automatic_updates_complete' ), 999, 1 );
- }
- }
-
- public function autoupdate_translation( $update, $item ) {
- // Autoupdate all translations
- if ( Jetpack_Options::get_option( 'autoupdate_translations', false ) ) {
- return true;
- }
-
- // Themes
- $autoupdate_themes_translations = Jetpack_Options::get_option( 'autoupdate_themes_translations', array() );
- $autoupdate_theme_list = Jetpack_Options::get_option( 'autoupdate_themes', array() );
-
- /*
- $item = {
- "type":"theme",
- "slug":"twentyfourteen",
- "language":"en_CA",
- "version":"1.8",
- "updated":"2015-07-18 11:27:20",
- "package":"https:\/\/downloads.wordpress.org\/translation\/theme\/twentyfourteen\/1.8\/en_CA.zip",
- "autoupdate":true
- }
- */
- if ( ( in_array( $item->slug, $autoupdate_themes_translations )
- || in_array( $item->slug, $autoupdate_theme_list ) )
- && 'theme' === $item->type
- ) {
- $this->expect( $item->type . ':' . $item->slug, 'translation' );
-
- return true;
- }
-
- // Plugins
- $autoupdate_plugin_translations = Jetpack_Options::get_option( 'autoupdate_plugins_translations', array() );
- $autoupdate_plugin_list = Jetpack_Options::get_option( 'autoupdate_plugins', array() );
- $plugin_files = array_unique( array_merge( $autoupdate_plugin_list, $autoupdate_plugin_translations ) );
- $plugin_slugs = array_map( array( __CLASS__, 'get_plugin_slug' ), $plugin_files );
-
- if ( in_array( $item->slug, $plugin_slugs )
- && 'plugin' === $item->type
- ) {
- $this->expect( $item->type . ':' . $item->slug, 'translation' );
- return true;
- }
-
- return $update;
- }
-
- public function autoupdate_theme( $update, $item ) {
- $autoupdate_theme_list = Jetpack_Options::get_option( 'autoupdate_themes', array() );
- if ( in_array( $item->theme, $autoupdate_theme_list ) ) {
- $this->expect( $item->theme, 'theme' );
- return true;
- }
-
- return $update;
- }
-
- public function autoupdate_core( $update, $item ) {
- $autoupdate_core = Jetpack_Options::get_option( 'autoupdate_core', false );
- if ( $autoupdate_core ) {
- return $autoupdate_core;
- }
-
- return $update;
- }
-
- /**
- * Stores the an item identifier to the expected array.
- *
- * @param string $item Example: 'jetpack/jetpack.php' for type 'plugin' or 'twentyfifteen' for type 'theme'
- * @param string $type 'plugin' or 'theme'
- */
- private function expect( $item, $type ) {
- if ( ! isset( $this->expected[ $type ] ) ) {
- $this->expected[ $type ] = array();
- }
- $this->expected[ $type ][] = $item;
- }
-
- /**
- * On completion of an automatic update, let's store the results.
- *
- * @param $results - Sent by WP_Automatic_Updater after it completes an autoupdate action. Results may be empty.
- */
- public function automatic_updates_complete( $results ) {
- if ( empty( $this->expected ) ) {
- return;
- }
- $this->results = empty( $results ) ? self::get_possible_failures() : $results;
-
- add_action( 'shutdown', array( $this, 'bump_stats' ) );
-
- Jetpack::init();
-
- $items_to_log = array( 'plugin', 'theme', 'translation' );
- foreach ( $items_to_log as $items ) {
- $this->log_items( $items );
- }
-
- Jetpack::log( 'autoupdates', $this->get_log() );
- }
-
- public function get_log() {
- return array(
- 'results' => $this->results,
- 'failed' => $this->failed,
- 'success' => $this->success
- );
- }
-
- /**
- * Iterates through expected items ( plugins or themes ) and compares them to actual results.
- *
- * @param $items 'plugin' or 'theme'
- */
- private function log_items( $items ) {
- if ( ! isset( $this->expected[ $items ] ) ) {
- return;
- }
-
- $item_results = $this->get_successful_updates( $items );
-
- if ( is_array( $this->expected[ $items ] ) ) {
- foreach ( $this->expected[ $items ] as $item ) {
- if ( in_array( $item, $item_results ) ) {
- $this->success[ $items ][] = $item;
- } else {
- $this->failed[ $items ][] = $item;
- }
- }
- }
- }
-
- public function bump_stats() {
- $instance = Jetpack::init();
- $log = array();
- // Bump numbers
-
- if ( ! empty( $this->success['theme'] ) ) {
- $instance->stat( 'autoupdates/theme-success', count( $this->success['theme'] ) );
- $log['themes_success'] = $this->success['theme'];
- }
-
- if ( ! empty( $this->failed['theme'] ) ) {
- $instance->stat( 'autoupdates/theme-fail', count( $this->failed['theme'] ) );
- $log['themes_failed'] = $this->failed['theme'];
- }
-
- $instance->do_stats( 'server_side' );
-
- // Send a more detailed log to logstash
- if ( ! empty( $log ) ) {
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client( array(
- 'user_id' => get_current_user_id()
- ) );
- $log['blog_id'] = Jetpack_Options::get_option( 'id' );
- $xml->query( 'jetpack.debug_autoupdate', $log );
- }
- }
-
- /**
- * Parses the autoupdate results generated by WP_Automatic_Updater and returns a simple array of successful items
- *
- * @param string $type 'plugin' or 'theme'
- *
- * @return array
- */
- private function get_successful_updates( $type ) {
- $successful_updates = array();
-
- if ( ! isset( $this->results[ $type ] ) ) {
- return $successful_updates;
- }
-
- foreach ( $this->results[ $type ] as $result ) {
- if ( $result->result ) {
- switch ( $type ) {
- case 'theme':
- $successful_updates[] = $result->item->theme;
- break;
- case 'translation':
- $successful_updates[] = $result->item->type . ':' . $result->item->slug;
- break;
- }
- }
- }
-
- return $successful_updates;
- }
-
- static function get_possible_failures() {
- $result = array();
- // Lets check some reasons why it might not be working as expected
- include_once( ABSPATH . '/wp-admin/includes/admin.php' );
- include_once( ABSPATH . '/wp-admin/includes/class-wp-upgrader.php' );
- $upgrader = new WP_Automatic_Updater;
-
- if ( $upgrader->is_disabled() ) {
- $result[] = 'autoupdates-disabled';
- }
- if ( ! is_main_site() ) {
- $result[] = 'is-not-main-site';
- }
- if ( ! is_main_network() ) {
- $result[] = 'is-not-main-network';
- }
- if ( $upgrader->is_vcs_checkout( ABSPATH ) ) {
- $result[] = 'site-on-vcs';
- }
- if ( $upgrader->is_vcs_checkout( WP_PLUGIN_DIR ) ) {
- $result[] = 'plugin-directory-on-vcs';
- }
- if ( $upgrader->is_vcs_checkout( WP_CONTENT_DIR ) ) {
- $result[] = 'content-directory-on-vcs';
- }
- $lock = get_option( 'auto_updater.lock' );
- if ( $lock > ( time() - HOUR_IN_SECONDS ) ) {
- $result[] = 'lock-is-set';
- }
- $skin = new Automatic_Upgrader_Skin;
- include_once( ABSPATH . 'wp-admin/includes/file.php' );
- include_once( ABSPATH . 'wp-admin/includes/template.php' );
- if ( ! $skin->request_filesystem_credentials( false, ABSPATH, false ) ) {
- $result[] = 'no-system-write-access';
- }
- if ( ! $skin->request_filesystem_credentials( false, WP_PLUGIN_DIR, false ) ) {
- $result[] = 'no-plugin-directory-write-access';
- }
- if ( ! $skin->request_filesystem_credentials( false, WP_CONTENT_DIR, false ) ) {
- $result[] = 'no-wp-content-directory-write-access';
- }
-
- return $result;
- }
-
- static function get_plugin_slug( $plugin_file ) {
- $update_plugins = get_site_transient( 'update_plugins' );
- if ( isset( $update_plugins->no_update ) ) {
- if ( isset( $update_plugins->no_update[ $plugin_file ] ) ) {
- $slug = $update_plugins->no_update[ $plugin_file ]->slug;
- }
- }
- if ( empty( $slug ) && isset( $update_plugins->response ) ) {
- if ( isset( $update_plugins->response[ $plugin_file ] ) ) {
- $slug = $update_plugins->response[ $plugin_file ]->slug;
- }
- }
-
- // Try to infer from the plugin file if not cached
- if ( empty( $slug) ) {
- $slug = dirname( $plugin_file );
- if ( '.' === $slug ) {
- $slug = preg_replace("/(.+)\.php$/", "$1", $plugin_file );
- }
- }
- return $slug;
- }
-
-}
-
-Jetpack_Autoupdate::init();
diff --git a/plugins/jetpack/class.jetpack-bbpress-json-api-compat.php b/plugins/jetpack/class.jetpack-bbpress-json-api-compat.php
deleted file mode 100644
index 0038874b..00000000
--- a/plugins/jetpack/class.jetpack-bbpress-json-api-compat.php
+++ /dev/null
@@ -1,98 +0,0 @@
-<?php
-/**
-* bbPress & Jetpack REST API Compatibility
-* Enables bbPress to work with the Jetpack REST API
-*/
-class bbPress_Jetpack_REST_API {
-
- private static $instance;
-
- public static function instance() {
- if ( isset( self::$instance ) )
- return self::$instance;
-
- self::$instance = new self;
- }
-
- private function __construct() {
- add_filter( 'rest_api_allowed_post_types', array( $this, 'allow_bbpress_post_types' ) );
- add_filter( 'bbp_map_meta_caps', array( $this, 'adjust_meta_caps' ), 10, 4 );
- add_filter( 'rest_api_allowed_public_metadata', array( $this, 'allow_bbpress_public_metadata' ) );
- }
-
- function allow_bbpress_post_types( $allowed_post_types ) {
- $allowed_post_types[] = 'forum';
- $allowed_post_types[] = 'topic';
- $allowed_post_types[] = 'reply';
- return $allowed_post_types;
- }
-
- function allow_bbpress_public_metadata( $allowed_meta_keys ) {
- $allowed_meta_keys[] = '_bbp_forum_id';
- $allowed_meta_keys[] = '_bbp_topic_id';
- $allowed_meta_keys[] = '_bbp_status';
- $allowed_meta_keys[] = '_bbp_forum_type';
- $allowed_meta_keys[] = '_bbp_forum_subforum_count';
- $allowed_meta_keys[] = '_bbp_reply_count';
- $allowed_meta_keys[] = '_bbp_total_reply_count';
- $allowed_meta_keys[] = '_bbp_topic_count';
- $allowed_meta_keys[] = '_bbp_total_topic_count';
- $allowed_meta_keys[] = '_bbp_topic_count_hidden';
- $allowed_meta_keys[] = '_bbp_last_topic_id';
- $allowed_meta_keys[] = '_bbp_last_reply_id';
- $allowed_meta_keys[] = '_bbp_last_active_time';
- $allowed_meta_keys[] = '_bbp_last_active_id';
- $allowed_meta_keys[] = '_bbp_sticky_topics';
- $allowed_meta_keys[] = '_bbp_voice_count';
- $allowed_meta_keys[] = '_bbp_reply_count_hidden';
- $allowed_meta_keys[] = '_bbp_anonymous_reply_count';
-
- return $allowed_meta_keys;
- }
-
- function adjust_meta_caps( $caps, $cap, $user_id, $args ) {
-
- // only run for REST API requests
- if ( ! defined( 'REST_API_REQUEST' ) || ! REST_API_REQUEST )
- return $caps;
-
- // only modify caps for meta caps and for bbPress meta keys
- if ( ! in_array( $cap, array( 'edit_post_meta', 'delete_post_meta', 'add_post_meta' ) ) || empty( $args[1] ) || false === strpos( $args[1], '_bbp_' ) )
- return $caps;
-
- // $args[0] could be a post ID or a post_type string
- if ( is_int( $args[0] ) ) {
- $_post = get_post( $args[0] );
- if ( ! empty( $_post ) ) {
- $post_type = get_post_type_object( $_post->post_type );
- }
- } elseif ( is_string( $args[0] ) ) {
- $post_type = get_post_type_object( $args[0] );
- }
-
- // no post type found, bail
- if ( empty( $post_type ) )
- return $caps;
-
- // reset the needed caps
- $caps = array();
-
- // Add 'do_not_allow' cap if user is spam or deleted
- if ( bbp_is_user_inactive( $user_id ) ) {
- $caps[] = 'do_not_allow';
-
- // Moderators can always edit meta
- } elseif ( user_can( $user_id, 'moderate' ) ) {
- $caps[] = 'moderate';
-
- // Unknown so map to edit_posts
- } else {
- $caps[] = $post_type->cap->edit_posts;
- }
-
- return $caps;
- }
-
-}
-
-bbPress_Jetpack_REST_API::instance();
diff --git a/plugins/jetpack/class.jetpack-cli.php b/plugins/jetpack/class.jetpack-cli.php
deleted file mode 100644
index 298286f5..00000000
--- a/plugins/jetpack/class.jetpack-cli.php
+++ /dev/null
@@ -1,1515 +0,0 @@
-<?php
-
-WP_CLI::add_command( 'jetpack', 'Jetpack_CLI' );
-
-/**
- * Control your local Jetpack installation.
- *
- * Minimum PHP requirement for WP-CLI is PHP 5.3, so ignore PHP 5.2 compatibility issues.
- * @phpcs:disable PHPCompatibility.PHP.NewLanguageConstructs.t_ns_separatorFound
- */
-class Jetpack_CLI extends WP_CLI_Command {
- // Aesthetics
- public $green_open = "\033[32m";
- public $red_open = "\033[31m";
- public $yellow_open = "\033[33m";
- public $color_close = "\033[0m";
-
- /**
- * Get Jetpack Details
- *
- * ## OPTIONS
- *
- * empty: Leave it empty for basic stats
- *
- * full: View full stats. It's the data from the heartbeat
- *
- * ## EXAMPLES
- *
- * wp jetpack status
- * wp jetpack status full
- *
- */
- public function status( $args, $assoc_args ) {
- jetpack_require_lib( 'debugger' );
-
- WP_CLI::line( sprintf( __( 'Checking status for %s', 'jetpack' ), esc_url( get_home_url() ) ) );
-
- if ( isset( $args[0] ) && 'full' !== $args[0] ) {
- /* translators: %s is a command like "prompt" */
- WP_CLI::error( sprintf( __( '%s is not a valid command.', 'jetpack' ), $args[0] ) );
- }
-
- $master_user_email = Jetpack::get_master_user_email();
-
- $cxntests = new Jetpack_Cxn_Tests();
-
- if ( $cxntests->pass() ) {
- $cxntests->output_results_for_cli();
-
- WP_CLI::success( __( 'Jetpack is currently connected to WordPress.com', 'jetpack' ) );
- } else {
- $error = array();
- foreach ( $cxntests->list_fails() as $fail ) {
- $error[] = $fail['name'] . ': ' . $fail['message'];
- }
- WP_CLI::error_multi_line( $error );
-
- $cxntests->output_results_for_cli();
-
- WP_CLI::error( __('Jetpack connection is broken.', 'jetpack' ) ); // Exit CLI.
- }
-
- WP_CLI::line( sprintf( __( 'The Jetpack Version is %s', 'jetpack' ), JETPACK__VERSION ) );
- WP_CLI::line( sprintf( __( 'The WordPress.com blog_id is %d', 'jetpack' ), Jetpack_Options::get_option( 'id' ) ) );
- WP_CLI::line( sprintf( __( 'The WordPress.com account for the primary connection is %s', 'jetpack' ), $master_user_email ) );
-
- /*
- * Are they asking for all data?
- *
- * Loop through heartbeat data and organize by priority.
- */
- $all_data = ( isset( $args[0] ) && 'full' == $args[0] ) ? 'full' : false;
- if ( $all_data ) {
- // Heartbeat data
- WP_CLI::line( "\n" . __( 'Additional data: ', 'jetpack' ) );
-
- // Get the filtered heartbeat data.
- // Filtered so we can color/list by severity
- $stats = Jetpack::jetpack_check_heartbeat_data();
-
- // Display red flags first
- foreach ( $stats['bad'] as $stat => $value ) {
- printf( "$this->red_open%-'.16s %s $this->color_close\n", $stat, $value );
- }
-
- // Display caution warnings next
- foreach ( $stats['caution'] as $stat => $value ) {
- printf( "$this->yellow_open%-'.16s %s $this->color_close\n", $stat, $value );
- }
-
- // The rest of the results are good!
- foreach ( $stats['good'] as $stat => $value ) {
-
- // Modules should get special spacing for aestetics
- if ( strpos( $stat, 'odule-' ) ) {
- printf( "%-'.30s %s\n", $stat, $value );
- usleep( 4000 ); // For dramatic effect lolz
- continue;
- }
- printf( "%-'.16s %s\n", $stat, $value );
- usleep( 4000 ); // For dramatic effect lolz
- }
- } else {
- // Just the basics
- WP_CLI::line( "\n" . _x( "View full status with 'wp jetpack status full'", '"wp jetpack status full" is a command - do not translate', 'jetpack' ) );
- }
- }
-
- /**
- * Tests the active connection
- *
- * Does a two-way test to verify that the local site can communicate with remote Jetpack/WP.com servers and that Jetpack/WP.com servers can talk to the local site.
- *
- * ## EXAMPLES
- *
- * wp jetpack test-connection
- *
- * @subcommand test-connection
- */
- public function test_connection( $args, $assoc_args ) {
-
- WP_CLI::line( sprintf( __( 'Testing connection for %s', 'jetpack' ), esc_url( get_site_url() ) ) );
-
- if ( ! Jetpack::is_active() ) {
- WP_CLI::error( __( 'Jetpack is not currently connected to WordPress.com', 'jetpack' ) );
- }
-
- $response = Jetpack_Client::wpcom_json_api_request_as_blog(
- sprintf( '/jetpack-blogs/%d/test-connection', Jetpack_Options::get_option( 'id' ) ),
- Jetpack_Client::WPCOM_JSON_API_VERSION
- );
-
- if ( is_wp_error( $response ) ) {
- /* translators: %1$s is the error code, %2$s is the error message */
- WP_CLI::error( sprintf( __( 'Failed to test connection (#%1$s: %2$s)', 'jetpack' ), $response->get_error_code(), $response->get_error_message() ) );
- }
-
- $body = wp_remote_retrieve_body( $response );
- if ( ! $body ) {
- WP_CLI::error( __( 'Failed to test connection (empty response body)', 'jetpack' ) );
- }
-
- $result = json_decode( $body );
- $is_connected = (bool) $result->connected;
- $message = $result->message;
-
- if ( $is_connected ) {
- WP_CLI::success( $message );
- } else {
- WP_CLI::error( $message );
- }
- }
-
- /**
- * Disconnect Jetpack Blogs or Users
- *
- * ## OPTIONS
- *
- * blog: Disconnect the entire blog.
- *
- * user <user_identifier>: Disconnect a specific user from WordPress.com.
- *
- * Please note, the primary account that the blog is connected
- * to WordPress.com with cannot be disconnected without
- * disconnecting the entire blog.
- *
- * ## EXAMPLES
- *
- * wp jetpack disconnect blog
- * wp jetpack disconnect user 13
- * wp jetpack disconnect user username
- * wp jetpack disconnect user email@domain.com
- *
- * @synopsis <blog|user> [<user_identifier>]
- */
- public function disconnect( $args, $assoc_args ) {
- if ( ! Jetpack::is_active() ) {
- WP_CLI::error( __( 'You cannot disconnect, without having first connected.', 'jetpack' ) );
- }
-
- $action = isset( $args[0] ) ? $args[0] : 'prompt';
- if ( ! in_array( $action, array( 'blog', 'user', 'prompt' ) ) ) {
- /* translators: %s is a command like "prompt" */
- WP_CLI::error( sprintf( __( '%s is not a valid command.', 'jetpack' ), $action ) );
- }
-
- if ( in_array( $action, array( 'user' ) ) ) {
- if ( isset( $args[1] ) ) {
- $user_id = $args[1];
- if ( ctype_digit( $user_id ) ) {
- $field = 'id';
- $user_id = (int) $user_id;
- } elseif ( is_email( $user_id ) ) {
- $field = 'email';
- $user_id = sanitize_user( $user_id, true );
- } else {
- $field = 'login';
- $user_id = sanitize_user( $user_id, true );
- }
- if ( ! $user = get_user_by( $field, $user_id ) ) {
- WP_CLI::error( __( 'Please specify a valid user.', 'jetpack' ) );
- }
- } else {
- WP_CLI::error( __( 'Please specify a user by either ID, username, or email.', 'jetpack' ) );
- }
- }
-
- switch ( $action ) {
- case 'blog':
- Jetpack::log( 'disconnect' );
- Jetpack::disconnect();
- WP_CLI::success( sprintf(
- __( 'Jetpack has been successfully disconnected for %s.', 'jetpack' ),
- esc_url( get_site_url() )
- ) );
- break;
- case 'user':
- if ( Jetpack::unlink_user( $user->ID ) ) {
- Jetpack::log( 'unlink', $user->ID );
- WP_CLI::success( __( 'User has been successfully disconnected.', 'jetpack' ) );
- } else {
- /* translators: %s is a username */
- WP_CLI::error( sprintf( __( "User %s could not be disconnected. Are you sure they're connected currently?", 'jetpack' ), "{$user->login} <{$user->email}>" ) );
- }
- break;
- case 'prompt':
- WP_CLI::error( __( 'Please specify if you would like to disconnect a blog or user.', 'jetpack' ) );
- break;
- }
- }
-
- /**
- * Reset Jetpack options and settings to default
- *
- * ## OPTIONS
- *
- * modules: Resets modules to default state ( get_default_modules() )
- *
- * options: Resets all Jetpack options except:
- * - All private options (Blog token, user token, etc...)
- * - id (The Client ID/WP.com Blog ID of this site)
- * - master_user
- * - version
- * - activated
- *
- * ## EXAMPLES
- *
- * wp jetpack reset options
- * wp jetpack reset modules
- *
- * @synopsis <modules|options>
- */
- public function reset( $args, $assoc_args ) {
- $action = isset( $args[0] ) ? $args[0] : 'prompt';
- if ( ! in_array( $action, array( 'options', 'modules' ) ) ) {
- /* translators: %s is a command like "prompt" */
- WP_CLI::error( sprintf( __( '%s is not a valid command.', 'jetpack' ), $action ) );
- }
-
- // Are you sure?
- jetpack_cli_are_you_sure();
-
- switch ( $action ) {
- case 'options':
- $options_to_reset = Jetpack_Options::get_options_for_reset();
-
- // Reset the Jetpack options
- WP_CLI::line( sprintf(
- __( "Resetting Jetpack Options for %s...\n", "jetpack" ),
- esc_url( get_site_url() )
- ) );
- sleep(1); // Take a breath
- foreach ( $options_to_reset['jp_options'] as $option_to_reset ) {
- Jetpack_Options::delete_option( $option_to_reset );
- usleep( 100000 );
- /* translators: This is the result of an action. The option named %s was reset */
- WP_CLI::success( sprintf( __( '%s option reset', 'jetpack' ), $option_to_reset ) );
- }
-
- // Reset the WP options
- WP_CLI::line( __( "Resetting the jetpack options stored in wp_options...\n", "jetpack" ) );
- usleep( 500000 ); // Take a breath
- foreach ( $options_to_reset['wp_options'] as $option_to_reset ) {
- delete_option( $option_to_reset );
- usleep( 100000 );
- /* translators: This is the result of an action. The option named %s was reset */
- WP_CLI::success( sprintf( __( '%s option reset', 'jetpack' ), $option_to_reset ) );
- }
-
- // Reset to default modules
- WP_CLI::line( __( "Resetting default modules...\n", "jetpack" ) );
- usleep( 500000 ); // Take a breath
- $default_modules = Jetpack::get_default_modules();
- Jetpack::update_active_modules( $default_modules );
- WP_CLI::success( __( 'Modules reset to default.', 'jetpack' ) );
-
- // Jumpstart option is special
- Jetpack_Options::update_option( 'jumpstart', 'new_connection' );
- WP_CLI::success( __( 'jumpstart option reset', 'jetpack' ) );
- break;
- case 'modules':
- $default_modules = Jetpack::get_default_modules();
- Jetpack::update_active_modules( $default_modules );
- WP_CLI::success( __( 'Modules reset to default.', 'jetpack' ) );
- break;
- case 'prompt':
- WP_CLI::error( __( 'Please specify if you would like to reset your options, or modules', 'jetpack' ) );
- break;
- }
- }
-
- /**
- * Manage Jetpack Modules
- *
- * ## OPTIONS
- *
- * <list|activate|deactivate|toggle>
- * : The action to take.
- * ---
- * default: list
- * options:
- * - list
- * - activate
- * - deactivate
- * - toggle
- * ---
- *
- * [<module_slug>]
- * : The slug of the module to perform an action on.
- *
- * [--format=<format>]
- * : Allows overriding the output of the command when listing modules.
- * ---
- * default: table
- * options:
- * - table
- * - json
- * - csv
- * - yaml
- * - ids
- * - count
- * ---
- *
- * ## EXAMPLES
- *
- * wp jetpack module list
- * wp jetpack module list --format=json
- * wp jetpack module activate stats
- * wp jetpack module deactivate stats
- * wp jetpack module toggle stats
- * wp jetpack module activate all
- * wp jetpack module deactivate all
- */
- public function module( $args, $assoc_args ) {
- $action = isset( $args[0] ) ? $args[0] : 'list';
-
- if ( isset( $args[1] ) ) {
- $module_slug = $args[1];
- if ( 'all' !== $module_slug && ! Jetpack::is_module( $module_slug ) ) {
- /* translators: %s is a module slug like "stats" */
- WP_CLI::error( sprintf( __( '%s is not a valid module.', 'jetpack' ), $module_slug ) );
- }
- if ( 'toggle' === $action ) {
- $action = Jetpack::is_module_active( $module_slug )
- ? 'deactivate'
- : 'activate';
- }
- if ( 'all' === $args[1] ) {
- $action = ( 'deactivate' === $action )
- ? 'deactivate_all'
- : 'activate_all';
- }
- } elseif ( 'list' !== $action ) {
- WP_CLI::line( __( 'Please specify a valid module.', 'jetpack' ) );
- $action = 'list';
- }
-
- switch ( $action ) {
- case 'list':
- $modules_list = array();
- $modules = Jetpack::get_available_modules();
- sort( $modules );
- foreach ( (array) $modules as $module_slug ) {
- if ( 'vaultpress' === $module_slug ) {
- continue;
- }
- $modules_list[] = array(
- 'slug' => $module_slug,
- 'status' => Jetpack::is_module_active( $module_slug )
- ? __( 'Active', 'jetpack' )
- : __( 'Inactive', 'jetpack' ),
- );
- }
- WP_CLI\Utils\format_items( $assoc_args['format'], $modules_list, array( 'slug', 'status' ) );
- break;
- case 'activate':
- $module = Jetpack::get_module( $module_slug );
- Jetpack::log( 'activate', $module_slug );
- if ( Jetpack::activate_module( $module_slug, false, false ) ) {
- WP_CLI::success( sprintf( __( '%s has been activated.', 'jetpack' ), $module['name'] ) );
- } else {
- WP_CLI::error( sprintf( __( '%s could not be activated.', 'jetpack' ), $module['name'] ) );
- }
- break;
- case 'activate_all':
- $modules = Jetpack::get_available_modules();
- Jetpack::update_active_modules( $modules );
- WP_CLI::success( __( 'All modules activated!', 'jetpack' ) );
- break;
- case 'deactivate':
- $module = Jetpack::get_module( $module_slug );
- Jetpack::log( 'deactivate', $module_slug );
- Jetpack::deactivate_module( $module_slug );
- WP_CLI::success( sprintf( __( '%s has been deactivated.', 'jetpack' ), $module['name'] ) );
- break;
- case 'deactivate_all':
- Jetpack::delete_active_modules();
- WP_CLI::success( __( 'All modules deactivated!', 'jetpack' ) );
- break;
- case 'toggle':
- // Will never happen, should have been handled above and changed to activate or deactivate.
- break;
- }
- }
-
- /**
- * Manage Protect Settings
- *
- * ## OPTIONS
- *
- * whitelist: Whitelist an IP address. You can also read or clear the whitelist.
- *
- *
- * ## EXAMPLES
- *
- * wp jetpack protect whitelist <ip address>
- * wp jetpack protect whitelist list
- * wp jetpack protect whitelist clear
- *
- * @synopsis <whitelist> [<ip|ip_low-ip_high|list|clear>]
- */
- public function protect( $args, $assoc_args ) {
- $action = isset( $args[0] ) ? $args[0] : 'prompt';
- if ( ! in_array( $action, array( 'whitelist' ) ) ) {
- /* translators: %s is a command like "prompt" */
- WP_CLI::error( sprintf( __( '%s is not a valid command.', 'jetpack' ), $action ) );
- }
- // Check if module is active
- if ( ! Jetpack::is_module_active( __FUNCTION__ ) ) {
- WP_CLI::error( sprintf( _x( '%s is not active. You can activate it with "wp jetpack module activate %s"', '"wp jetpack module activate" is a command - do not translate', 'jetpack' ), __FUNCTION__, __FUNCTION__ ) );
- }
- if ( in_array( $action, array( 'whitelist' ) ) ) {
- if ( isset( $args[1] ) ) {
- $action = 'whitelist';
- } else {
- $action = 'prompt';
- }
- }
- switch ( $action ) {
- case 'whitelist':
- $whitelist = array();
- $new_ip = $args[1];
- $current_whitelist = get_site_option( 'jetpack_protect_whitelist', array() );
-
- // Build array of IPs that are already whitelisted.
- // Re-build manually instead of using jetpack_protect_format_whitelist() so we can easily get
- // low & high range params for jetpack_protect_ip_address_is_in_range();
- foreach( $current_whitelist as $whitelisted ) {
-
- // IP ranges
- if ( $whitelisted->range ) {
-
- // Is it already whitelisted?
- if ( jetpack_protect_ip_address_is_in_range( $new_ip, $whitelisted->range_low, $whitelisted->range_high ) ) {
- /* translators: %s is an IP address */
- WP_CLI::error( sprintf( __( '%s has already been whitelisted', 'jetpack' ), $new_ip ) );
- break;
- }
- $whitelist[] = $whitelisted->range_low . " - " . $whitelisted->range_high;
-
- } else { // Individual IPs
-
- // Check if the IP is already whitelisted (single IP only)
- if ( $new_ip == $whitelisted->ip_address ) {
- /* translators: %s is an IP address */
- WP_CLI::error( sprintf( __( '%s has already been whitelisted', 'jetpack' ), $new_ip ) );
- break;
- }
- $whitelist[] = $whitelisted->ip_address;
-
- }
- }
-
- /*
- * List the whitelist
- * Done here because it's easier to read the $whitelist array after it's been rebuilt
- */
- if ( isset( $args[1] ) && 'list' == $args[1] ) {
- if ( ! empty( $whitelist ) ) {
- WP_CLI::success( __( 'Here are your whitelisted IPs:', 'jetpack' ) );
- foreach ( $whitelist as $ip ) {
- WP_CLI::line( "\t" . str_pad( $ip, 24 ) ) ;
- }
- } else {
- WP_CLI::line( __( 'Whitelist is empty.', "jetpack" ) ) ;
- }
- break;
- }
-
- /*
- * Clear the whitelist
- */
- if ( isset( $args[1] ) && 'clear' == $args[1] ) {
- if ( ! empty( $whitelist ) ) {
- $whitelist = array();
- jetpack_protect_save_whitelist( $whitelist );
- WP_CLI::success( __( 'Cleared all whitelisted IPs', 'jetpack' ) );
- } else {
- WP_CLI::line( __( 'Whitelist is empty.', "jetpack" ) ) ;
- }
- break;
- }
-
- // Append new IP to whitelist array
- array_push( $whitelist, $new_ip );
-
- // Save whitelist if there are no errors
- $result = jetpack_protect_save_whitelist( $whitelist );
- if ( is_wp_error( $result ) ) {
- WP_CLI::error( __( $result, 'jetpack' ) );
- }
-
- /* translators: %s is an IP address */
- WP_CLI::success( sprintf( __( '%s has been whitelisted.', 'jetpack' ), $new_ip ) );
- break;
- case 'prompt':
- WP_CLI::error(
- __( 'No command found.', 'jetpack' ) . "\n" .
- __( 'Please enter the IP address you want to whitelist.', 'jetpack' ) . "\n" .
- _x( 'You can save a range of IPs {low_range}-{high_range}. No spaces allowed. (example: 1.1.1.1-2.2.2.2)', 'Instructions on how to whitelist IP ranges - low_range/high_range should be translated.', 'jetpack' ) . "\n" .
- _x( "You can also 'list' or 'clear' the whitelist.", "'list' and 'clear' are commands and should not be translated", 'jetpack' ) . "\n"
- );
- break;
- }
- }
-
- /**
- * Manage Jetpack Options
- *
- * ## OPTIONS
- *
- * list : List all jetpack options and their values
- * delete : Delete an option
- * - can only delete options that are white listed.
- * update : update an option
- * - can only update option strings
- * get : get the value of an option
- *
- * ## EXAMPLES
- *
- * wp jetpack options list
- * wp jetpack options get <option_name>
- * wp jetpack options delete <option_name>
- * wp jetpack options update <option_name> [<option_value>]
- *
- * @synopsis <list|get|delete|update> [<option_name>] [<option_value>]
- */
- public function options( $args, $assoc_args ) {
- $action = isset( $args[0] ) ? $args[0] : 'list';
- $safe_to_modify = Jetpack_Options::get_options_for_reset();
-
- // Jumpstart is special
- array_push( $safe_to_modify, 'jumpstart' );
-
- // Is the option flagged as unsafe?
- $flagged = ! in_array( $args[1], $safe_to_modify );
-
- if ( ! in_array( $action, array( 'list', 'get', 'delete', 'update' ) ) ) {
- /* translators: %s is a command like "prompt" */
- WP_CLI::error( sprintf( __( '%s is not a valid command.', 'jetpack' ), $action ) );
- }
-
- if ( isset( $args[0] ) ) {
- if ( 'get' == $args[0] && isset( $args[1] ) ) {
- $action = 'get';
- } else if ( 'delete' == $args[0] && isset( $args[1] ) ) {
- $action = 'delete';
- } else if ( 'update' == $args[0] && isset( $args[1] ) ) {
- $action = 'update';
- } else {
- $action = 'list';
- }
- }
-
- // Bail if the option isn't found
- $option = isset( $args[1] ) ? Jetpack_Options::get_option( $args[1] ) : false;
- if ( isset( $args[1] ) && ! $option && 'update' !== $args[0] ) {
- WP_CLI::error( __( 'Option not found or is empty. Use "list" to list option names', 'jetpack' ) );
- }
-
- // Let's print_r the option if it's an array
- // Used in the 'get' and 'list' actions
- $option = is_array( $option ) ? print_r( $option ) : $option;
-
- switch ( $action ) {
- case 'get':
- WP_CLI::success( "\t" . $option );
- break;
- case 'delete':
- jetpack_cli_are_you_sure( $flagged );
-
- Jetpack_Options::delete_option( $args[1] );
- WP_CLI::success( sprintf( __( 'Deleted option: %s', 'jetpack' ), $args[1] ) );
- break;
- case 'update':
- jetpack_cli_are_you_sure( $flagged );
-
- // Updating arrays would get pretty tricky...
- $value = Jetpack_Options::get_option( $args[1] );
- if ( $value && is_array( $value ) ) {
- WP_CLI::error( __( 'Sorry, no updating arrays at this time', 'jetpack' ) );
- }
-
- Jetpack_Options::update_option( $args[1], $args[2] );
- WP_CLI::success( sprintf( _x( 'Updated option: %s to "%s"', 'Updating an option from "this" to "that".', 'jetpack' ), $args[1], $args[2] ) );
- break;
- case 'list':
- $options_compact = Jetpack_Options::get_option_names();
- $options_non_compact = Jetpack_Options::get_option_names( 'non_compact' );
- $options_private = Jetpack_Options::get_option_names( 'private' );
- $options = array_merge( $options_compact, $options_non_compact, $options_private );
-
- // Table headers
- WP_CLI::line( "\t" . str_pad( __( 'Option', 'jetpack' ), 30 ) . __( 'Value', 'jetpack' ) );
-
- // List out the options and their values
- // Tell them if the value is empty or not
- // Tell them if it's an array
- foreach ( $options as $option ) {
- $value = Jetpack_Options::get_option( $option );
- if ( ! $value ) {
- WP_CLI::line( "\t" . str_pad( $option, 30 ) . 'Empty' );
- continue;
- }
-
- if ( ! is_array( $value ) ) {
- WP_CLI::line( "\t" . str_pad( $option, 30 ) . $value );
- } else if ( is_array( $value ) ) {
- WP_CLI::line( "\t" . str_pad( $option, 30 ) . 'Array - Use "get <option>" to read option array.' );
- }
- }
- $option_text = '{' . _x( 'option', 'a variable command that a user can write, provided in the printed instructions', 'jetpack' ) . '}';
- $value_text = '{' . _x( 'value', 'the value that they want to update the option to', 'jetpack' ) . '}';
-
- WP_CLI::success(
- _x( "Above are your options. You may 'get', 'delete', and 'update' them.", "'get', 'delete', and 'update' are commands - do not translate.", 'jetpack' ) . "\n" .
- str_pad( 'wp jetpack options get', 26 ) . $option_text . "\n" .
- str_pad( 'wp jetpack options delete', 26 ) . $option_text . "\n" .
- str_pad( 'wp jetpack options update', 26 ) . "$option_text $value_text" . "\n" .
- _x( "Type 'wp jetpack options' for more info.", "'wp jetpack options' is a command - do not translate.", 'jetpack' ) . "\n"
- );
- break;
- }
- }
-
- /**
- * Get the status of or start a new Jetpack sync.
- *
- * ## OPTIONS
- *
- * status : Print the current sync status
- * start : Start a full sync from this site to WordPress.com
- *
- * ## EXAMPLES
- *
- * wp jetpack sync status
- * wp jetpack sync start --modules=functions --sync_wait_time=5
- *
- * @synopsis <status|start> [--<field>=<value>]
- */
- public function sync( $args, $assoc_args ) {
- if ( ! Jetpack_Sync_Actions::sync_allowed() ) {
- WP_CLI::error( __( 'Jetpack sync is not currently allowed for this site.', 'jetpack' ) );
- }
-
- $action = isset( $args[0] ) ? $args[0] : 'status';
-
- switch ( $action ) {
- case 'status':
- $status = Jetpack_Sync_Actions::get_sync_status();
- $collection = array();
- foreach ( $status as $key => $item ) {
- $collection[] = array(
- 'option' => $key,
- 'value' => is_scalar( $item ) ? $item : json_encode( $item )
- );
- }
-
- WP_CLI\Utils\format_items( 'table', $collection, array( 'option', 'value' ) );
- break;
- case 'start':
- // Get the original settings so that we can restore them later
- $original_settings = Jetpack_Sync_Settings::get_settings();
-
- // Initialize sync settigns so we can sync as quickly as possible
- $sync_settings = wp_parse_args(
- array_intersect_key( $assoc_args, Jetpack_Sync_Settings::$valid_settings ),
- array(
- 'sync_wait_time' => 0,
- 'enqueue_wait_time' => 0,
- 'queue_max_writes_sec' => 10000,
- 'max_queue_size_full_sync' => 100000
- )
- );
- Jetpack_Sync_Settings::update_settings( $sync_settings );
-
- // Convert comma-delimited string of modules to an array
- if ( ! empty( $assoc_args['modules'] ) ) {
- $modules = array_map( 'trim', explode( ',', $assoc_args['modules'] ) );
-
- // Convert the array so that the keys are the module name and the value is true to indicate
- // that we want to sync the module
- $modules = array_map( '__return_true', array_flip( $modules ) );
- }
-
- foreach ( array( 'posts', 'comments', 'users' ) as $module_name ) {
- if (
- 'users' === $module_name &&
- isset( $assoc_args[ $module_name ] ) &&
- 'initial' === $assoc_args[ $module_name ]
- ) {
- $modules[ 'users' ] = 'initial';
- } elseif ( isset( $assoc_args[ $module_name ] ) ) {
- $ids = explode( ',', $assoc_args[ $module_name ] );
- if ( count( $ids ) > 0 ) {
- $modules[ $module_name ] = $ids;
- }
- }
- }
-
- if ( empty( $modules ) ) {
- $modules = null;
- }
-
- // Kick off a full sync
- if ( Jetpack_Sync_Actions::do_full_sync( $modules ) ) {
- if ( $modules ) {
- WP_CLI::log( sprintf( __( 'Initialized a new full sync with modules: %s', 'jetpack' ), join( ', ', array_keys( $modules ) ) ) );
- } else {
- WP_CLI::log( __( 'Initialized a new full sync', 'jetpack' ) );
- }
- } else {
-
- // Reset sync settings to original.
- Jetpack_Sync_Settings::update_settings( $original_settings );
-
- if ( $modules ) {
- WP_CLI::error( sprintf( __( 'Could not start a new full sync with modules: %s', 'jetpack' ), join( ', ', $modules ) ) );
- } else {
- WP_CLI::error( __( 'Could not start a new full sync', 'jetpack' ) );
- }
- }
-
- // Keep sending to WPCOM until there's nothing to send
- $i = 1;
- do {
- $result = Jetpack_Sync_Actions::$sender->do_full_sync();
- if ( is_wp_error( $result ) ) {
- $queue_empty_error = ( 'empty_queue_full_sync' == $result->get_error_code() );
- if ( ! $queue_empty_error || ( $queue_empty_error && ( 1 == $i ) ) ) {
- WP_CLI::error( sprintf( __( 'Sync errored with code: %s', 'jetpack' ), $result->get_error_code() ) );
- }
- } else {
- if ( 1 == $i ) {
- WP_CLI::log( __( 'Sent data to WordPress.com', 'jetpack' ) );
- } else {
- WP_CLI::log( __( 'Sent more data to WordPress.com', 'jetpack' ) );
- }
- }
- $i++;
- } while ( $result && ! is_wp_error( $result ) );
-
- // Reset sync settings to original.
- Jetpack_Sync_Settings::update_settings( $original_settings );
-
- WP_CLI::success( __( 'Finished syncing to WordPress.com', 'jetpack' ) );
- break;
- }
- }
-
- /**
- * List the contents of a specific Jetpack sync queue.
- *
- * ## OPTIONS
- *
- * peek : List the 100 front-most items on the queue.
- *
- * ## EXAMPLES
- *
- * wp jetpack sync_queue full_sync peek
- *
- * @synopsis <incremental|full_sync> <peek>
- */
- public function sync_queue( $args, $assoc_args ) {
- if ( ! Jetpack_Sync_Actions::sync_allowed() ) {
- WP_CLI::error( __( 'Jetpack sync is not currently allowed for this site.', 'jetpack' ) );
- }
-
- $queue_name = isset( $args[0] ) ? $args[0] : 'sync';
- $action = isset( $args[1] ) ? $args[1] : 'peek';
-
- // We map the queue name that way we can support more friendly queue names in the commands, but still use
- // the queue name that the code expects.
- $queue_name_map = $allowed_queues = array(
- 'incremental' => 'sync',
- 'full' => 'full_sync',
- );
- $mapped_queue_name = isset( $queue_name_map[ $queue_name ] ) ? $queue_name_map[ $queue_name ] : $queue_name;
-
- switch( $action ) {
- case 'peek':
- require_once JETPACK__PLUGIN_DIR . 'sync/class.jetpack-sync-queue.php';
- $queue = new Jetpack_Sync_Queue( $mapped_queue_name );
- $items = $queue->peek( 100 );
-
- if ( empty( $items ) ) {
- /* translators: %s is the name of the queue, either 'incremental' or 'full' */
- WP_CLI::log( sprintf( __( 'Nothing is in the queue: %s', 'jetpack' ), $queue_name ) );
- } else {
- $collection = array();
- foreach ( $items as $item ) {
- $collection[] = array(
- 'action' => $item[0],
- 'args' => json_encode( $item[1] ),
- 'current_user_id' => $item[2],
- 'microtime' => $item[3],
- 'importing' => (string) $item[4],
- );
- }
- WP_CLI\Utils\format_items(
- 'table',
- $collection,
- array(
- 'action',
- 'args',
- 'current_user_id',
- 'microtime',
- 'importing',
- )
- );
- }
- break;
- }
- }
-
- /**
- * Cancel's the current Jetpack plan granted by this partner, if applicable
- *
- * Returns success or error JSON
- *
- * <token_json>
- * : JSON blob of WPCOM API token
- * [--partner_tracking_id=<partner_tracking_id>]
- * : This is an optional ID that a host can pass to help identify a site in logs on WordPress.com
- *
- * * @synopsis <token_json> [--partner_tracking_id=<partner_tracking_id>]
- */
- public function partner_cancel( $args, $named_args ) {
- list( $token_json ) = $args;
-
- if ( ! $token_json || ! ( $token = json_decode( $token_json ) ) ) {
- $this->partner_provision_error( new WP_Error( 'missing_access_token', sprintf( __( 'Invalid token JSON: %s', 'jetpack' ), $token_json ) ) );
- }
-
- if ( isset( $token->error ) ) {
- $this->partner_provision_error( new WP_Error( $token->error, $token->message ) );
- }
-
- if ( ! isset( $token->access_token ) ) {
- $this->partner_provision_error( new WP_Error( 'missing_access_token', __( 'Missing or invalid access token', 'jetpack' ) ) );
- }
-
- if ( Jetpack::validate_sync_error_idc_option() ) {
- $this->partner_provision_error( new WP_Error(
- 'site_in_safe_mode',
- esc_html__( 'Can not cancel a plan while in safe mode. See: https://jetpack.com/support/safe-mode/', 'jetpack' )
- ) );
- }
-
- $site_identifier = Jetpack_Options::get_option( 'id' );
-
- if ( ! $site_identifier ) {
- $site_identifier = Jetpack::build_raw_urls( get_home_url() );
- }
-
- $request = array(
- 'headers' => array(
- 'Authorization' => "Bearer " . $token->access_token,
- 'Host' => 'public-api.wordpress.com',
- ),
- 'timeout' => 60,
- 'method' => 'POST',
- );
-
- $url = sprintf( 'https://%s/rest/v1.3/jpphp/%s/partner-cancel', $this->get_api_host(), $site_identifier );
- if ( ! empty( $named_args ) && ! empty( $named_args['partner_tracking_id'] ) ) {
- $url = esc_url_raw( add_query_arg( 'partner_tracking_id', $named_args['partner_tracking_id'], $url ) );
- }
-
- $result = Jetpack_Client::_wp_remote_request( $url, $request );
-
- Jetpack_Options::delete_option( 'onboarding' );
-
- if ( is_wp_error( $result ) ) {
- $this->partner_provision_error( $result );
- }
-
- WP_CLI::log( wp_remote_retrieve_body( $result ) );
- }
-
- /**
- * Provision a site using a Jetpack Partner license
- *
- * Returns JSON blob
- *
- * ## OPTIONS
- *
- * <token_json>
- * : JSON blob of WPCOM API token
- * [--plan=<plan_name>]
- * : Slug of the requested plan, e.g. premium
- * [--wpcom_user_id=<user_id>]
- * : WordPress.com ID of user to connect as (must be whitelisted against partner key)
- * [--wpcom_user_email=<wpcom_user_email>]
- * : Override the email we send to WordPress.com for registration
- * [--onboarding=<onboarding>]
- * : Guide the user through an onboarding wizard
- * [--force_register=<register>]
- * : Whether to force a site to register
- * [--force_connect=<force_connect>]
- * : Force JPS to not reuse existing credentials
- * [--home_url=<home_url>]
- * : Overrides the home option via the home_url filter, or the WP_HOME constant
- * [--site_url=<site_url>]
- * : Overrides the siteurl option via the site_url filter, or the WP_SITEURL constant
- * [--partner_tracking_id=<partner_tracking_id>]
- * : This is an optional ID that a host can pass to help identify a site in logs on WordPress.com
- *
- * ## EXAMPLES
- *
- * $ wp jetpack partner_provision '{ some: "json" }' premium 1
- * { success: true }
- *
- * @synopsis <token_json> [--wpcom_user_id=<user_id>] [--plan=<plan_name>] [--onboarding=<onboarding>] [--force_register=<register>] [--force_connect=<force_connect>] [--home_url=<home_url>] [--site_url=<site_url>] [--wpcom_user_email=<wpcom_user_email>] [--partner_tracking_id=<partner_tracking_id>]
- */
- public function partner_provision( $args, $named_args ) {
- list( $token_json ) = $args;
-
- if ( ! $token_json || ! ( $token = json_decode( $token_json ) ) ) {
- $this->partner_provision_error( new WP_Error( 'missing_access_token', sprintf( __( 'Invalid token JSON: %s', 'jetpack' ), $token_json ) ) );
- }
-
- if ( isset( $token->error ) ) {
- $message = isset( $token->message )
- ? $token->message
- : '';
- $this->partner_provision_error( new WP_Error( $token->error, $message ) );
- }
-
- if ( ! isset( $token->access_token ) ) {
- $this->partner_provision_error( new WP_Error( 'missing_access_token', __( 'Missing or invalid access token', 'jetpack' ) ) );
- }
-
- require_once JETPACK__PLUGIN_DIR . '_inc/class.jetpack-provision.php';
-
- $body_json = Jetpack_Provision::partner_provision( $token->access_token, $named_args );
-
- if ( is_wp_error( $body_json ) ) {
- error_log( json_encode( array(
- 'success' => false,
- 'error_code' => $body_json->get_error_code(),
- 'error_message' => $body_json->get_error_message()
- ) ) );
- exit( 1 );
- }
-
- WP_CLI::log( json_encode( $body_json ) );
- }
-
- /**
- * Manages your Jetpack sitemap
- *
- * ## OPTIONS
- *
- * rebuild : Rebuild all sitemaps
- * --purge : if set, will remove all existing sitemap data before rebuilding
- *
- * ## EXAMPLES
- *
- * wp jetpack sitemap rebuild
- *
- * @subcommand sitemap
- * @synopsis <rebuild> [--purge]
- */
- public function sitemap( $args, $assoc_args ) {
- if ( ! Jetpack::is_active() ) {
- WP_CLI::error( __( 'Jetpack is not currently connected to WordPress.com', 'jetpack' ) );
- }
- if ( ! Jetpack::is_module_active( 'sitemaps' ) ) {
- WP_CLI::error( __( 'Jetpack Sitemaps module is not currently active. Activate it first if you want to work with sitemaps.', 'jetpack' ) );
- }
- if ( ! class_exists( 'Jetpack_Sitemap_Builder' ) ) {
- WP_CLI::error( __( 'Jetpack Sitemaps module is active, but unavailable. This can happen if your site is set to discourage search engine indexing. Please enable search engine indexing to allow sitemap generation.', 'jetpack' ) );
- }
-
- if ( isset( $assoc_args['purge'] ) && $assoc_args['purge'] ) {
- $librarian = new Jetpack_Sitemap_Librarian();
- $librarian->delete_all_stored_sitemap_data();
- }
-
- $sitemap_builder = new Jetpack_Sitemap_Builder();
- $sitemap_builder->update_sitemap();
- }
-
- /**
- * Allows authorizing a user via the command line and will activate
- *
- * ## EXAMPLES
- *
- * wp jetpack authorize_user --token=123456789abcdef
- *
- * @synopsis --token=<value>
- */
- public function authorize_user( $args, $named_args ) {
- if ( ! is_user_logged_in() ) {
- WP_CLI::error( __( 'Please select a user to authorize via the --user global argument.', 'jetpack' ) );
- }
-
- if ( empty( $named_args['token'] ) ) {
- WP_CLI::error( __( 'A non-empty token argument must be passed.', 'jetpack' ) );
- }
-
- $is_master_user = ! Jetpack::is_active();
- $current_user_id = get_current_user_id();
-
- Jetpack::update_user_token( $current_user_id, sprintf( '%s.%d', $named_args['token'], $current_user_id ), $is_master_user );
-
- WP_CLI::log( wp_json_encode( $named_args ) );
-
- if ( $is_master_user ) {
- /**
- * Auto-enable SSO module for new Jetpack Start connections
- *
- * @since 5.0.0
- *
- * @param bool $enable_sso Whether to enable the SSO module. Default to true.
- */
- $enable_sso = apply_filters( 'jetpack_start_enable_sso', true );
- Jetpack::handle_post_authorization_actions( $enable_sso, false );
-
- /* translators: %d is a user ID */
- WP_CLI::success( sprintf( __( 'Authorized %d and activated default modules.', 'jetpack' ), $current_user_id ) );
- } else {
- /* translators: %d is a user ID */
- WP_CLI::success( sprintf( __( 'Authorized %d.', 'jetpack' ), $current_user_id ) );
- }
- }
-
- /**
- * Allows calling a WordPress.com API endpoint using the current blog's token.
- *
- * ## OPTIONS
- * --resource=<resource>
- * : The resource to call with the current blog's token, where `%d` represents the current blog's ID.
- *
- * [--api_version=<api_version>]
- * : The API version to query against.
- *
- * [--base_api_path=<base_api_path>]
- * : The base API path to query.
- * ---
- * default: rest
- * ---
- *
- * [--body=<body>]
- * : A JSON encoded string representing arguments to send in the body.
- *
- * [--field=<value>]
- * : Any number of arguments that should be passed to the resource.
- *
- * [--pretty]
- * : Will pretty print the results of a successful API call.
- *
- * [--strip-success]
- * : Will remove the green success label from successful API calls.
- *
- * ## EXAMPLES
- *
- * wp jetpack call_api --resource='/sites/%d'
- */
- public function call_api( $args, $named_args ) {
- if ( ! Jetpack::is_active() ) {
- WP_CLI::error( __( 'Jetpack is not currently connected to WordPress.com', 'jetpack' ) );
- }
-
- $consumed_args = array(
- 'resource',
- 'api_version',
- 'base_api_path',
- 'body',
- 'pretty',
- );
-
- // Get args that should be passed to resource.
- $other_args = array_diff_key( $named_args, array_flip( $consumed_args ) );
-
- $decoded_body = ! empty( $named_args['body'] )
- ? json_decode( $named_args['body'] )
- : false;
-
- $resource_url = ( false === strpos( $named_args['resource'], '%d' ) )
- ? $named_args['resource']
- : sprintf( $named_args['resource'], Jetpack_Options::get_option( 'id' ) );
-
- $response = Jetpack_Client::wpcom_json_api_request_as_blog(
- $resource_url,
- empty( $named_args['api_version'] ) ? Jetpack_Client::WPCOM_JSON_API_VERSION : $named_args['api_version'],
- $other_args,
- empty( $decoded_body ) ? null : $decoded_body,
- $named_args['base_api_path']
- );
-
- if ( is_wp_error( $response ) ) {
- WP_CLI::error( sprintf(
- /* translators: %1$s is an endpoint route (ex. /sites/123456), %2$d is an error code, %3$s is an error message. */
- __( 'Request to %1$s returned an error: (%2$d) %3$s.', 'jetpack' ),
- $resource_url,
- $response->get_error_code(),
- $response->get_error_message()
- ) );
- }
-
- if ( 200 !== wp_remote_retrieve_response_code( $response ) ) {
- WP_CLI::error( sprintf(
- /* translators: %1$s is an endpoint route (ex. /sites/123456), %2$d is an HTTP status code. */
- __( 'Request to %1$s returned a non-200 response code: %2$d.', 'jetpack' ),
- $resource_url,
- wp_remote_retrieve_response_code( $response )
- ) );
- }
-
- $output = wp_remote_retrieve_body( $response );
- if ( isset( $named_args['pretty'] ) ) {
- $decoded_output = json_decode( $output );
- if ( $decoded_output ) {
- $output = wp_json_encode( $decoded_output, JSON_PRETTY_PRINT );
- }
- }
-
- if ( isset( $named_args['strip-success'] ) ) {
- WP_CLI::log( $output );
- WP_CLI::halt( 0 );
- }
-
- WP_CLI::success( $output );
- }
-
- /**
- * API wrapper for getting stats from the WordPress.com API for the current site.
- *
- * ## OPTIONS
- *
- * [--quantity=<quantity>]
- * : The number of units to include.
- * ---
- * default: 30
- * ---
- *
- * [--period=<period>]
- * : The unit of time to query stats for.
- * ---
- * default: day
- * options:
- * - day
- * - week
- * - month
- * - year
- * ---
- *
- * [--date=<date>]
- * : The latest date to return stats for. Ex. - 2018-01-01.
- *
- * [--pretty]
- * : Will pretty print the results of a successful API call.
- *
- * [--strip-success]
- * : Will remove the green success label from successful API calls.
- *
- * ## EXAMPLES
- *
- * wp jetpack get_stats
- */
- public function get_stats( $args, $named_args ) {
- $selected_args = array_intersect_key(
- $named_args,
- array_flip( array(
- 'quantity',
- 'date',
- ) )
- );
-
- // The API expects unit, but period seems to be more correct.
- $selected_args['unit'] = $named_args['period'];
-
- $command = sprintf(
- 'jetpack call_api --resource=/sites/%d/stats/%s',
- Jetpack_Options::get_option( 'id' ),
- add_query_arg( $selected_args, 'visits' )
- );
-
- if ( isset( $named_args['pretty'] ) ) {
- $command .= ' --pretty';
- }
-
- if ( isset( $named_args['strip-success'] ) ) {
- $command .= ' --strip-success';
- }
-
- WP_CLI::runcommand(
- $command,
- array(
- 'launch' => false, // Use the current process.
- )
- );
- }
-
- /**
- * Allows management of publicize connections.
- *
- * ## OPTIONS
- *
- * <list|disconnect>
- * : The action to perform.
- * ---
- * options:
- * - list
- * - disconnect
- * ---
- *
- * [<identifier>]
- * : The connection ID or service to perform an action on.
- *
- * [--format=<format>]
- * : Allows overriding the output of the command when listing connections.
- * ---
- * default: table
- * options:
- * - table
- * - json
- * - csv
- * - yaml
- * - ids
- * - count
- * ---
- *
- * ## EXAMPLES
- *
- * # List all publicize connections.
- * $ wp jetpack publicize list
- *
- * # List publicize connections for a given service.
- * $ wp jetpack publicize list twitter
- *
- * # List all publicize connections for a given user.
- * $ wp --user=1 jetpack publicize list
- *
- * # List all publicize connections for a given user and service.
- * $ wp --user=1 jetpack publicize list twitter
- *
- * # Display details for a given connection.
- * $ wp jetpack publicize list 123456
- *
- * # Diconnection a given connection.
- * $ wp jetpack publicize disconnect 123456
- *
- * # Disconnect all connections.
- * $ wp jetpack publicize disconnect all
- *
- * # Disconnect all connections for a given service.
- * $ wp jetpack publicize disconnect twitter
- */
- public function publicize( $args, $named_args ) {
- if ( ! Jetpack::is_active() ) {
- WP_CLI::error( __( 'Jetpack is not currently connected to WordPress.com', 'jetpack' ) );
- }
-
- if ( ! Jetpack::is_module_active( 'publicize' ) ) {
- WP_CLI::error( __( 'The publicize module is not active.', 'jetpack' ) );
- }
-
- if ( Jetpack::is_development_mode() ) {
- if (
- ! defined( 'JETPACK_DEV_DEBUG' ) &&
- ! has_filter( 'jetpack_development_mode' ) &&
- false === strpos( site_url(), '.' )
- ) {
- WP_CLI::error( __( "Jetpack is current in development mode because the site url does not contain a '.', which often occurs when dynamically setting the WP_SITEURL constant. While in development mode, the publicize module will not load.", 'jetpack' ) );
- }
-
- WP_CLI::error( __( 'Jetpack is currently in development mode, so the publicize module will not load.', 'jetpack' ) );
- }
-
- if ( ! class_exists( 'Publicize' ) ) {
- WP_CLI::error( __( 'The publicize module is not loaded.', 'jetpack' ) );
- }
-
- $action = $args[0];
- $publicize = new Publicize();
- $identifier = ! empty( $args[1] ) ? $args[1] : false;
- $services = array_keys( $publicize->get_services() );
- $id_is_service = in_array( $identifier, $services, true );
-
- switch ( $action ) {
- case 'list':
- $connections_to_return = array();
-
- // For the CLI command, let's return all connections when a user isn't specified. This
- // differs from the logic in the Publicize class.
- $option_connections = is_user_logged_in()
- ? (array) $publicize->get_all_connections_for_user()
- : (array) $publicize->get_all_connections();
-
- foreach ( $option_connections as $service_name => $connections ) {
- foreach ( (array) $connections as $id => $connection ) {
- $connection['id'] = $id;
- $connection['service'] = $service_name;
- $connections_to_return[] = $connection;
- }
- }
-
- if ( $id_is_service && ! empty( $identifier ) && ! empty( $connections_to_return ) ) {
- $temp_connections = $connections_to_return;
- $connections_to_return = array();
-
- foreach ( $temp_connections as $connection ) {
- if ( $identifier === $connection['service'] ) {
- $connections_to_return[] = $connection;
- }
- }
- }
-
- if ( $identifier && ! $id_is_service && ! empty( $connections_to_return ) ) {
- $connections_to_return = wp_list_filter( $connections_to_return, array( 'id' => $identifier ) );
- }
-
- $expected_keys = array(
- 'id',
- 'service',
- 'user_id',
- 'provider',
- 'issued',
- 'expires',
- 'external_id',
- 'external_name',
- 'external_display',
- 'type',
- 'connection_data',
- );
-
- // Somehow, a test site ended up in a state where $connections_to_return looked like:
- // array( array( array( 'id' => 0, 'service' => 0 ) ) ) // phpcs:ignore Squiz.PHP.CommentedOutCode.Found
- // This caused the CLI command to error when running WP_CLI\Utils\format_items() below. So
- // to minimize future issues, this nested loop will remove any connections that don't contain
- // any keys that we expect.
- foreach ( (array) $connections_to_return as $connection_key => $connection ) {
- foreach ( $expected_keys as $expected_key ) {
- if ( ! isset( $connection[ $expected_key ] ) ) {
- unset( $connections_to_return[ $connection_key ] );
- continue;
- }
- }
- }
-
- if ( empty( $connections_to_return ) ) {
- return false;
- }
-
- WP_CLI\Utils\format_items( $named_args['format'], $connections_to_return, $expected_keys );
- break; // list.
- case 'disconnect':
- if ( ! $identifier ) {
- WP_CLI::error( __( 'A connection ID must be passed in order to disconnect.', 'jetpack' ) );
- }
-
- // If the connection ID is 'all' then delete all connections. If the connection ID
- // matches a service, delete all connections for that service.
- if ( 'all' === $identifier || $id_is_service ) {
- if ( 'all' === $identifier ) {
- WP_CLI::log( __( "You're about to delete all publicize connections.", 'jetpack' ) );
- } else {
- /* translators: %s is a lowercase string for a social network. */
- WP_CLI::log( sprintf( __( "You're about to delete all publicize connections to %s.", 'jetpack' ), $identifier ) );
- }
-
- jetpack_cli_are_you_sure();
-
- $connections = array();
- $service = $identifier;
-
- $option_connections = is_user_logged_in()
- ? (array) $publicize->get_all_connections_for_user()
- : (array) $publicize->get_all_connections();
-
- if ( 'all' === $service ) {
- foreach ( (array) $option_connections as $service_name => $service_connections ) {
- foreach ( $service_connections as $id => $connection ) {
- $connections[ $id ] = $connection;
- }
- }
- } elseif ( ! empty( $option_connections[ $service ] ) ) {
- $connections = $option_connections[ $service ];
- }
-
- if ( ! empty( $connections ) ) {
- $count = count( $connections );
- $progress = \WP_CLI\Utils\make_progress_bar(
- /* translators: %s is a lowercase string for a social network. */
- sprintf( __( 'Disconnecting all connections to %s.', 'jetpack' ), $service ),
- $count
- );
-
- foreach ( $connections as $id => $connection ) {
- if ( false === $publicize->disconnect( false, $id ) ) {
- WP_CLI::error( sprintf(
- /* translators: %1$d is a numeric ID and %2$s is a lowercase string for a social network. */
- __( 'Publicize connection %d could not be disconnected', 'jetpack' ),
- $id
- ) );
- }
-
- $progress->tick();
- }
-
- $progress->finish();
-
- if ( 'all' === $service ) {
- WP_CLI::success( __( 'All publicize connections were successfully disconnected.', 'jetpack' ) );
- } else {
- /* translators: %s is a lowercase string for a social network. */
- WP_CLI::success( __( 'All publicize connections to %s were successfully disconnected.', 'jetpack' ), $service );
- }
- }
- } else {
- if ( false !== $publicize->disconnect( false, $identifier ) ) {
- /* translators: %d is a numeric ID. Example: 1234. */
- WP_CLI::success( sprintf( __( 'Publicize connection %d has been disconnected.', 'jetpack' ), $identifier ) );
- } else {
- /* translators: %d is a numeric ID. Example: 1234. */
- WP_CLI::error( sprintf( __( 'Publicize connection %d could not be disconnected.', 'jetpack' ), $identifier ) );
- }
- }
- break; // disconnect.
- }
- }
-
- private function get_api_host() {
- $env_api_host = getenv( 'JETPACK_START_API_HOST', true );
- return $env_api_host ? $env_api_host : JETPACK__WPCOM_JSON_API_HOST;
- }
-
- private function partner_provision_error( $error ) {
- WP_CLI::log( json_encode( array(
- 'success' => false,
- 'error_code' => $error->get_error_code(),
- 'error_message' => $error->get_error_message()
- ) ) );
- exit( 1 );
- }
-}
-
-/*
- * Standard "ask for permission to continue" function.
- * If action cancelled, ask if they need help.
- *
- * Written outside of the class so it's not listed as an executable command w/ 'wp jetpack'
- *
- * @param $flagged bool false = normal option | true = flagged by get_jetpack_options_for_reset()
- * @param $error_msg string (optional)
- */
-function jetpack_cli_are_you_sure( $flagged = false, $error_msg = false ) {
- $cli = new Jetpack_CLI();
-
- // Default cancellation message
- if ( ! $error_msg ) {
- $error_msg =
- __( 'Action cancelled. Have a question?', 'jetpack' )
- . ' '
- . $cli->green_open
- . 'jetpack.com/support'
- . $cli->color_close;
- }
-
- if ( ! $flagged ) {
- $prompt_message = _x( 'Are you sure? This cannot be undone. Type "yes" to continue:', '"yes" is a command - do not translate.', 'jetpack' );
- } else {
- $prompt_message = _x( 'Are you sure? Modifying this option may disrupt your Jetpack connection. Type "yes" to continue.', '"yes" is a command - do not translate.', 'jetpack' );
- }
-
- WP_CLI::line( $prompt_message );
- $handle = fopen( "php://stdin", "r" );
- $line = fgets( $handle );
- if ( 'yes' != trim( $line ) ){
- WP_CLI::error( $error_msg );
- }
-}
diff --git a/plugins/jetpack/class.jetpack-client-server.php b/plugins/jetpack/class.jetpack-client-server.php
deleted file mode 100644
index cfe5bd26..00000000
--- a/plugins/jetpack/class.jetpack-client-server.php
+++ /dev/null
@@ -1,290 +0,0 @@
-<?php
-
-/**
- * Client = Plugin
- * Client Server = API Methods the Plugin must respond to
- */
-class Jetpack_Client_Server {
-
- /**
- * Authorizations
- */
- function client_authorize() {
- $data = stripslashes_deep( $_GET );
- $data['auth_type'] = 'client';
- $role = Jetpack::translate_current_user_to_role();
- $redirect = isset( $data['redirect'] ) ? esc_url_raw( (string) $data['redirect'] ) : '';
-
- check_admin_referer( "jetpack-authorize_{$role}_{$redirect}" );
-
- $result = $this->authorize( $data );
- if ( is_wp_error( $result ) ) {
- Jetpack::state( 'error', $result->get_error_code() );
- JetpackTracking::record_user_event( 'jpc_client_authorize_fail', array(
- 'error_code' => $result->get_error_code(),
- 'error_message' => $result->get_error_message()
- ) );
- } else {
- /**
- * Fires after the Jetpack client is authorized to communicate with WordPress.com.
- *
- * @since 4.2.0
- *
- * @param int Jetpack Blog ID.
- */
- do_action( 'jetpack_client_authorized', Jetpack_Options::get_option( 'id' ) );
- }
-
- if ( wp_validate_redirect( $redirect ) ) {
- // Exit happens below in $this->do_exit()
- wp_safe_redirect( $redirect );
- } else {
- // Exit happens below in $this->do_exit()
- wp_safe_redirect( Jetpack::admin_url() );
- }
-
- JetpackTracking::record_user_event( 'jpc_client_authorize_success' );
-
- $this->do_exit();
- }
-
- function authorize( $data = array() ) {
- $redirect = isset( $data['redirect'] ) ? esc_url_raw( (string) $data['redirect'] ) : '';
-
- $jetpack_unique_connection = Jetpack_Options::get_option( 'unique_connection' );
- // Checking if site has been active/connected previously before recording unique connection
- if ( ! $jetpack_unique_connection ) {
- // jetpack_unique_connection option has never been set
- $jetpack_unique_connection = array(
- 'connected' => 0,
- 'disconnected' => 0,
- 'version' => '3.6.1',
- );
-
- update_option( 'jetpack_unique_connection', $jetpack_unique_connection );
-
- //track unique connection
- $jetpack = $this->get_jetpack();
-
- $jetpack->stat( 'connections', 'unique-connection' );
- $jetpack->do_stats( 'server_side' );
- }
-
- // increment number of times connected
- $jetpack_unique_connection['connected'] += 1;
- Jetpack_Options::update_option( 'unique_connection', $jetpack_unique_connection );
-
- $role = Jetpack::translate_current_user_to_role();
-
- if ( ! $role ) {
- return new Jetpack_Error( 'no_role', 'Invalid request.', 400 );
- }
-
- $cap = Jetpack::translate_role_to_cap( $role );
- if ( ! $cap ) {
- return new Jetpack_Error( 'no_cap', 'Invalid request.', 400 );
- }
-
- if ( ! empty( $data['error'] ) ) {
- return new Jetpack_Error( $data['error'], 'Error included in the request.', 400 );
- }
-
- if ( ! isset( $data['state'] ) ) {
- return new Jetpack_Error( 'no_state', 'Request must include state.', 400 );
- }
-
- if ( ! ctype_digit( $data['state'] ) ) {
- return new Jetpack_Error( $data['error'], 'State must be an integer.', 400 );
- }
-
- $current_user_id = get_current_user_id();
- if ( $current_user_id != $data['state'] ) {
- return new Jetpack_Error( 'wrong_state', 'State does not match current user.', 400 );
- }
-
- if ( empty( $data['code'] ) ) {
- return new Jetpack_Error( 'no_code', 'Request must include an authorization code.', 400 );
- }
-
- $token = $this->get_token( $data );
-
- if ( is_wp_error( $token ) ) {
- $code = $token->get_error_code();
- if ( empty( $code ) ) {
- $code = 'invalid_token';
- }
- return new Jetpack_Error( $code, $token->get_error_message(), 400 );
- }
-
- if ( ! $token ) {
- return new Jetpack_Error( 'no_token', 'Error generating token.', 400 );
- }
-
- $is_master_user = ! Jetpack::is_active();
-
- Jetpack::update_user_token( $current_user_id, sprintf( '%s.%d', $token, $current_user_id ), $is_master_user );
-
- if ( ! $is_master_user ) {
- Jetpack::state( 'message', 'linked' );
- // Don't activate anything since we are just connecting a user.
- return 'linked';
- }
-
- // If this site has been through the Jetpack Onboarding flow, delete the onboarding token
- Jetpack::invalidate_onboarding_token();
-
- // If redirect_uri is SSO, ensure SSO module is enabled
- parse_str( parse_url( $data['redirect_uri'], PHP_URL_QUERY ), $redirect_options );
-
- /** This filter is documented in class.jetpack-cli.php */
- $jetpack_start_enable_sso = apply_filters( 'jetpack_start_enable_sso', true );
-
- $activate_sso = (
- isset( $redirect_options['action'] ) &&
- 'jetpack-sso' === $redirect_options['action'] &&
- $jetpack_start_enable_sso
- );
-
- $do_redirect_on_error = ( 'client' === $data['auth_type'] );
-
- Jetpack::handle_post_authorization_actions( $activate_sso, $do_redirect_on_error );
-
- return 'authorized';
- }
-
- public static function deactivate_plugin( $probable_file, $probable_title ) {
- include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
- if ( is_plugin_active( $probable_file ) ) {
- deactivate_plugins( $probable_file );
- return 1;
- } else {
- // If the plugin is not in the usual place, try looking through all active plugins.
- $active_plugins = Jetpack::get_active_plugins();
- foreach ( $active_plugins as $plugin ) {
- $data = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin );
- if ( $data['Name'] == $probable_title ) {
- deactivate_plugins( $plugin );
- return 1;
- }
- }
- }
-
- return 0;
- }
-
- /**
- * @return object|WP_Error
- */
- function get_token( $data ) {
- $role = Jetpack::translate_current_user_to_role();
-
- if ( ! $role ) {
- return new Jetpack_Error( 'role', __( 'An administrator for this blog must set up the Jetpack connection.', 'jetpack' ) );
- }
-
- $client_secret = Jetpack_Data::get_access_token();
- if ( ! $client_secret ) {
- return new Jetpack_Error( 'client_secret', __( 'You need to register your Jetpack before connecting it.', 'jetpack' ) );
- }
-
- $redirect = isset( $data['redirect'] ) ? esc_url_raw( (string) $data['redirect'] ) : '';
- $redirect_uri = ( 'calypso' === $data['auth_type'] )
- ? $data['redirect_uri']
- : add_query_arg( array(
- 'action' => 'authorize',
- '_wpnonce' => wp_create_nonce( "jetpack-authorize_{$role}_{$redirect}" ),
- 'redirect' => $redirect ? urlencode( $redirect ) : false,
- ), menu_page_url( 'jetpack', false ) );
-
- // inject identity for analytics
- $tracks_identity = jetpack_tracks_get_identity( get_current_user_id() );
-
- $body = array(
- 'client_id' => Jetpack_Options::get_option( 'id' ),
- 'client_secret' => $client_secret->secret,
- 'grant_type' => 'authorization_code',
- 'code' => $data['code'],
- 'redirect_uri' => $redirect_uri,
- '_ui' => $tracks_identity['_ui'],
- '_ut' => $tracks_identity['_ut'],
- );
-
- $args = array(
- 'method' => 'POST',
- 'body' => $body,
- 'headers' => array(
- 'Accept' => 'application/json',
- ),
- );
- $response = Jetpack_Client::_wp_remote_request( Jetpack::fix_url_for_bad_hosts( Jetpack::api_url( 'token' ) ), $args );
-
- if ( is_wp_error( $response ) ) {
- return new Jetpack_Error( 'token_http_request_failed', $response->get_error_message() );
- }
-
- $code = wp_remote_retrieve_response_code( $response );
- $entity = wp_remote_retrieve_body( $response );
-
- if ( $entity ) {
- $json = json_decode( $entity );
- } else {
- $json = false;
- }
-
- if ( 200 != $code || ! empty( $json->error ) ) {
- if ( empty( $json->error ) ) {
- return new Jetpack_Error( 'unknown', '', $code );
- }
-
- $error_description = isset( $json->error_description ) ? sprintf( __( 'Error Details: %s', 'jetpack' ), (string) $json->error_description ) : '';
-
- return new Jetpack_Error( (string) $json->error, $error_description, $code );
- }
-
- if ( empty( $json->access_token ) || ! is_scalar( $json->access_token ) ) {
- return new Jetpack_Error( 'access_token', '', $code );
- }
-
- if ( empty( $json->token_type ) || 'X_JETPACK' != strtoupper( $json->token_type ) ) {
- return new Jetpack_Error( 'token_type', '', $code );
- }
-
- if ( empty( $json->scope ) ) {
- return new Jetpack_Error( 'scope', 'No Scope', $code );
- }
-
- @list( $role, $hmac ) = explode( ':', $json->scope );
- if ( empty( $role ) || empty( $hmac ) ) {
- return new Jetpack_Error( 'scope', 'Malformed Scope', $code );
- }
-
- if ( Jetpack::sign_role( $role ) !== $json->scope ) {
- return new Jetpack_Error( 'scope', 'Invalid Scope', $code );
- }
-
- if ( ! $cap = Jetpack::translate_role_to_cap( $role ) ) {
- return new Jetpack_Error( 'scope', 'No Cap', $code );
- }
-
- if ( ! current_user_can( $cap ) ) {
- return new Jetpack_Error( 'scope', 'current_user_cannot', $code );
- }
-
- /**
- * Fires after user has successfully received an auth token.
- *
- * @since 3.9.0
- */
- do_action( 'jetpack_user_authorized' );
-
- return (string) $json->access_token;
- }
-
- public function get_jetpack() {
- return Jetpack::init();
- }
-
- public function do_exit() {
- exit;
- }
-}
diff --git a/plugins/jetpack/class.jetpack-client.php b/plugins/jetpack/class.jetpack-client.php
deleted file mode 100644
index cabb2e03..00000000
--- a/plugins/jetpack/class.jetpack-client.php
+++ /dev/null
@@ -1,388 +0,0 @@
-<?php
-
-class Jetpack_Client {
- const WPCOM_JSON_API_VERSION = '1.1';
-
- /**
- * Makes an authorized remote request using Jetpack_Signature
- *
- * @return array|WP_Error WP HTTP response on success
- */
- public static function remote_request( $args, $body = null ) {
- $defaults = array(
- 'url' => '',
- 'user_id' => 0,
- 'blog_id' => 0,
- 'auth_location' => JETPACK_CLIENT__AUTH_LOCATION,
- 'method' => 'POST',
- 'timeout' => 10,
- 'redirection' => 0,
- 'headers' => array(),
- 'stream' => false,
- 'filename' => null,
- 'sslverify' => true,
- );
-
- $args = wp_parse_args( $args, $defaults );
-
- $args['blog_id'] = (int) $args['blog_id'];
-
- if ( 'header' != $args['auth_location'] ) {
- $args['auth_location'] = 'query_string';
- }
-
- $token = Jetpack_Data::get_access_token( $args['user_id'] );
- if ( !$token ) {
- return new Jetpack_Error( 'missing_token' );
- }
-
- $method = strtoupper( $args['method'] );
-
- $timeout = intval( $args['timeout'] );
-
- $redirection = $args['redirection'];
- $stream = $args['stream'];
- $filename = $args['filename'];
- $sslverify = $args['sslverify'];
-
- $request = compact( 'method', 'body', 'timeout', 'redirection', 'stream', 'filename', 'sslverify' );
-
- @list( $token_key, $secret ) = explode( '.', $token->secret );
- if ( empty( $token ) || empty( $secret ) ) {
- return new Jetpack_Error( 'malformed_token' );
- }
-
- $token_key = sprintf( '%s:%d:%d', $token_key, JETPACK__API_VERSION, $token->external_user_id );
-
- require_once JETPACK__PLUGIN_DIR . 'class.jetpack-signature.php';
-
- $time_diff = (int) Jetpack_Options::get_option( 'time_diff' );
- $jetpack_signature = new Jetpack_Signature( $token->secret, $time_diff );
-
- $timestamp = time() + $time_diff;
-
- if( function_exists( 'wp_generate_password' ) ) {
- $nonce = wp_generate_password( 10, false );
- } else {
- $nonce = substr( sha1( rand( 0, 1000000 ) ), 0, 10);
- }
-
- // Kind of annoying. Maybe refactor Jetpack_Signature to handle body-hashing
- if ( is_null( $body ) ) {
- $body_hash = '';
-
- } else {
- // Allow arrays to be used in passing data.
- $body_to_hash = $body;
-
- if ( is_array( $body ) ) {
- // We cast this to a new variable, because the array form of $body needs to be
- // maintained so it can be passed into the request later on in the code.
- if ( count( $body ) > 0 ) {
- $body_to_hash = json_encode( self::_stringify_data( $body ) );
- } else {
- $body_to_hash = '';
- }
- }
-
- if ( ! is_string( $body_to_hash ) ) {
- return new Jetpack_Error( 'invalid_body', 'Body is malformed.' );
- }
-
- $body_hash = jetpack_sha1_base64( $body_to_hash );
- }
-
- $auth = array(
- 'token' => $token_key,
- 'timestamp' => $timestamp,
- 'nonce' => $nonce,
- 'body-hash' => $body_hash,
- );
-
- if ( false !== strpos( $args['url'], 'xmlrpc.php' ) ) {
- $url_args = array(
- 'for' => 'jetpack',
- 'wpcom_blog_id' => Jetpack_Options::get_option( 'id' ),
- );
- } else {
- $url_args = array();
- }
-
- if ( 'header' != $args['auth_location'] ) {
- $url_args += $auth;
- }
-
- $url = add_query_arg( urlencode_deep( $url_args ), $args['url'] );
- $url = Jetpack::fix_url_for_bad_hosts( $url );
-
- $signature = $jetpack_signature->sign_request( $token_key, $timestamp, $nonce, $body_hash, $method, $url, $body, false );
-
- if ( !$signature || is_wp_error( $signature ) ) {
- return $signature;
- }
-
- // Send an Authorization header so various caches/proxies do the right thing
- $auth['signature'] = $signature;
- $auth['version'] = JETPACK__VERSION;
- $header_pieces = array();
- foreach ( $auth as $key => $value ) {
- $header_pieces[] = sprintf( '%s="%s"', $key, $value );
- }
- $request['headers'] = array_merge( $args['headers'], array(
- 'Authorization' => "X_JETPACK " . join( ' ', $header_pieces ),
- ) );
-
- if ( 'header' != $args['auth_location'] ) {
- $url = add_query_arg( 'signature', urlencode( $signature ), $url );
- }
-
- return Jetpack_Client::_wp_remote_request( $url, $request );
- }
-
- /**
- * Wrapper for wp_remote_request(). Turns off SSL verification for certain SSL errors.
- * This is lame, but many, many, many hosts have misconfigured SSL.
- *
- * When Jetpack is registered, the jetpack_fallback_no_verify_ssl_certs option is set to the current time if:
- * 1. a certificate error is found AND
- * 2. not verifying the certificate works around the problem.
- *
- * The option is checked on each request.
- *
- * @internal
- * @see Jetpack::fix_url_for_bad_hosts()
- *
- * @return array|WP_Error WP HTTP response on success
- */
- public static function _wp_remote_request( $url, $args, $set_fallback = false ) {
- /**
- * SSL verification (`sslverify`) for the JetpackClient remote request
- * defaults to off, use this filter to force it on.
- *
- * Return `true` to ENABLE SSL verification, return `false`
- * to DISABLE SSL verification.
- *
- * @since 3.6.0
- *
- * @param bool Whether to force `sslverify` or not.
- */
- if ( apply_filters( 'jetpack_client_verify_ssl_certs', false ) ) {
- return wp_remote_request( $url, $args );
- }
-
- $fallback = Jetpack_Options::get_option( 'fallback_no_verify_ssl_certs' );
- if ( false === $fallback ) {
- Jetpack_Options::update_option( 'fallback_no_verify_ssl_certs', 0 );
- }
-
- if ( (int) $fallback ) {
- // We're flagged to fallback
- $args['sslverify'] = false;
- }
-
- $response = wp_remote_request( $url, $args );
-
- if (
- !$set_fallback // We're not allowed to set the flag on this request, so whatever happens happens
- ||
- isset( $args['sslverify'] ) && !$args['sslverify'] // No verification - no point in doing it again
- ||
- !is_wp_error( $response ) // Let it ride
- ) {
- Jetpack_Client::set_time_diff( $response, $set_fallback );
- return $response;
- }
-
- // At this point, we're not flagged to fallback and we are allowed to set the flag on this request.
-
- $message = $response->get_error_message();
-
- // Is it an SSL Certificate verification error?
- if (
- false === strpos( $message, '14090086' ) // OpenSSL SSL3 certificate error
- &&
- false === strpos( $message, '1407E086' ) // OpenSSL SSL2 certificate error
- &&
- false === strpos( $message, 'error setting certificate verify locations' ) // cURL CA bundle not found
- &&
- false === strpos( $message, 'Peer certificate cannot be authenticated with' ) // cURL CURLE_SSL_CACERT: CA bundle found, but not helpful
- // different versions of curl have different error messages
- // this string should catch them all
- &&
- false === strpos( $message, 'Problem with the SSL CA cert' ) // cURL CURLE_SSL_CACERT_BADFILE: probably access rights
- ) {
- // No, it is not.
- return $response;
- }
-
- // Redo the request without SSL certificate verification.
- $args['sslverify'] = false;
- $response = wp_remote_request( $url, $args );
-
- if ( !is_wp_error( $response ) ) {
- // The request went through this time, flag for future fallbacks
- Jetpack_Options::update_option( 'fallback_no_verify_ssl_certs', time() );
- Jetpack_Client::set_time_diff( $response, $set_fallback );
- }
-
- return $response;
- }
-
- public static function set_time_diff( &$response, $force_set = false ) {
- $code = wp_remote_retrieve_response_code( $response );
-
- // Only trust the Date header on some responses
- if ( 200 != $code && 304 != $code && 400 != $code && 401 != $code ) {
- return;
- }
-
- if ( !$date = wp_remote_retrieve_header( $response, 'date' ) ) {
- return;
- }
-
- if ( 0 >= $time = (int) strtotime( $date ) ) {
- return;
- }
-
- $time_diff = $time - time();
-
- if ( $force_set ) { // during register
- Jetpack_Options::update_option( 'time_diff', $time_diff );
- } else { // otherwise
- $old_diff = Jetpack_Options::get_option( 'time_diff' );
- if ( false === $old_diff || abs( $time_diff - (int) $old_diff ) > 10 ) {
- Jetpack_Options::update_option( 'time_diff', $time_diff );
- }
- }
- }
-
- /**
- * Queries the WordPress.com REST API with a user token.
- *
- * @param string $path REST API path.
- * @param string $version REST API version. Default is `2`.
- * @param array $args Arguments to {@see WP_Http}. Default is `array()`.
- * @param string $body Body passed to {@see WP_Http}. Default is `null`.
- * @param string $base_api_path REST API root. Default is `wpcom`.
- *
- * @return array|WP_Error $response Response data, else {@see WP_Error} on failure.
- */
- public static function wpcom_json_api_request_as_user( $path, $version = '2', $args = array(), $body = null, $base_api_path = 'wpcom' ) {
- $base_api_path = trim( $base_api_path, '/' );
- $version = ltrim( $version, 'v' );
- $path = ltrim( $path, '/' );
-
- $args = array_intersect_key( $args, array(
- 'headers' => 'array',
- 'method' => 'string',
- 'timeout' => 'int',
- 'redirection' => 'int',
- 'stream' => 'boolean',
- 'filename' => 'string',
- 'sslverify' => 'boolean',
- ) );
-
- $args['user_id'] = get_current_user_id();
- $args['method'] = isset( $args['method'] ) ? strtoupper( $args['method'] ) : 'GET';
- $args['url'] = sprintf( '%s://%s/%s/v%s/%s', self::protocol(), JETPACK__WPCOM_JSON_API_HOST, $base_api_path, $version, $path );
-
- if ( isset( $body ) && ! isset( $args['headers'] ) && in_array( $args['method'], array( 'POST', 'PUT', 'PATCH' ), true ) ) {
- $args['headers'] = array( 'Content-Type' => 'application/json' );
- }
-
- if ( isset( $body ) && ! is_string( $body ) ) {
- $body = wp_json_encode( $body );
- }
-
- return self::remote_request( $args, $body );
- }
-
- /**
- * Query the WordPress.com REST API using the blog token
- *
- * @param string $path
- * @param string $version
- * @param array $args
- * @param string $body
- * @param string $base_api_path
- * @return array|WP_Error $response Data.
- */
- static function wpcom_json_api_request_as_blog( $path, $version = self::WPCOM_JSON_API_VERSION, $args = array(), $body = null, $base_api_path = 'rest' ) {
- $filtered_args = array_intersect_key( $args, array(
- 'headers' => 'array',
- 'method' => 'string',
- 'timeout' => 'int',
- 'redirection' => 'int',
- 'stream' => 'boolean',
- 'filename' => 'string',
- 'sslverify' => 'boolean',
- ) );
-
- // unprecedingslashit
- $_path = preg_replace( '/^\//', '', $path );
-
- // Use GET by default whereas `remote_request` uses POST
- $request_method = ( isset( $filtered_args['method'] ) ) ? $filtered_args['method'] : 'GET';
-
- $url = sprintf( '%s://%s/%s/v%s/%s', self::protocol(), JETPACK__WPCOM_JSON_API_HOST, $base_api_path, $version, $_path );
-
- $validated_args = array_merge( $filtered_args, array(
- 'url' => $url,
- 'blog_id' => (int) Jetpack_Options::get_option( 'id' ),
- 'method' => $request_method,
- ) );
-
- return Jetpack_Client::remote_request( $validated_args, $body );
- }
-
- /**
- * Takes an array or similar structure and recursively turns all values into strings. This is used to
- * make sure that body hashes are made ith the string version, which is what will be seen after a
- * server pulls up the data in the $_POST array.
- *
- * @param array|mixed $data
- *
- * @return array|string
- */
- public static function _stringify_data( $data ) {
-
- // Booleans are special, lets just makes them and explicit 1/0 instead of the 0 being an empty string.
- if ( is_bool( $data ) ) {
- return $data ? "1" : "0";
- }
-
- // Cast objects into arrays.
- if ( is_object( $data ) ) {
- $data = (array) $data;
- }
-
- // Non arrays at this point should be just converted to strings.
- if ( ! is_array( $data ) ) {
- return (string)$data;
- }
-
- foreach ( $data as $key => &$value ) {
- $value = self::_stringify_data( $value );
- }
-
- return $data;
- }
-
- /**
- * Gets protocol string.
- *
- * @return string `https` (if possible), else `http`.
- */
- public static function protocol() {
- /**
- * Determines whether Jetpack can send outbound https requests to the WPCOM api.
- *
- * @since 3.6.0
- *
- * @param bool $proto Defaults to true.
- */
- $https = apply_filters( 'jetpack_can_make_outbound_https', true );
-
- return $https ? 'https' : 'http';
- }
-}
diff --git a/plugins/jetpack/class.jetpack-connection-banner.php b/plugins/jetpack/class.jetpack-connection-banner.php
deleted file mode 100644
index 056f138c..00000000
--- a/plugins/jetpack/class.jetpack-connection-banner.php
+++ /dev/null
@@ -1,324 +0,0 @@
-<?php
-
-class Jetpack_Connection_Banner {
- /**
- * @var Jetpack_Connection_Banner
- **/
- private static $instance = null;
-
- static function init() {
- if ( is_null( self::$instance ) ) {
- self::$instance = new Jetpack_Connection_Banner();
- }
-
- return self::$instance;
- }
-
- /**
- * Jetpack_Connection_Banner constructor.
- *
- * Since we call the Jetpack_Connection_Banner:init() method from the `Jetpack` class, and after
- * the admin_init action fires, we know that the admin is initialized at this point.
- */
- private function __construct() {
- add_action( 'current_screen', array( $this, 'maybe_initialize_hooks' ) );
- }
-
- /**
- * Given a string for the the banner was added, and an int that represents the slide to
- * a URL for, this function returns a connection URL with a from parameter that will
- * support split testing.
- *
- * @since 7.2 Event key format is now banner-connect-banner-72-dashboard or connect-banner-72-plugins.
- * The param $slide_num was removed since we removed all slides but the first one.
- * @since 4.4.0
- *
- * @param string $jp_version_banner_added A short version of when the banner was added. Ex. 44
- *
- * @return string
- */
- function build_connect_url_for_slide( $jp_version_banner_added ) {
- global $current_screen;
- $url = Jetpack::init()->build_connect_url(
- true,
- false,
- sprintf( 'connect-banner-%s-%s', $jp_version_banner_added, $current_screen->base )
- );
- return add_query_arg( 'auth_approved', 'true', $url );
- }
-
- /**
- * Return an img HTML tag pointing to the Jetpack logo. Includes alt text.
- *
- * @since 7.2
- *
- * @return string
- */
- public static function get_jetpack_logo() {
- return sprintf(
- '<img src="%s" class="jetpack-logo" alt="%s" />',
- esc_url( plugins_url( 'images/jetpack-logo-green.svg', JETPACK__PLUGIN_FILE ) ),
- esc_attr__(
- 'Jetpack is a free plugin that utilizes powerful WordPress.com servers to enhance your site and simplify managing it',
- 'jetpack'
- )
- );
- }
-
- /**
- * Will initialize hooks to display the new (as of 4.4) connection banner if the current user can
- * connect Jetpack, if Jetpack has not been deactivated, and if the current page is the plugins page.
- *
- * This method should not be called if the site is connected to WordPress.com or if the site is in development mode.
- *
- * @since 4.4.0
- * @since 4.5.0 Made the new (as of 4.4) connection banner display to everyone by default.
- * @since 5.3.0 Running another split test between 4.4 banner and a new one in 5.3.
- * @since 7.2 B test was removed.
- *
- * @param $current_screen
- */
- function maybe_initialize_hooks( $current_screen ) {
- // Kill if banner has been dismissed
- if ( Jetpack_Options::get_option( 'dismissed_connection_banner' ) ) {
- return;
- }
-
- // Don't show the connect notice anywhere but the plugins.php after activating
- if ( 'plugins' !== $current_screen->base && 'dashboard' !== $current_screen->base ) {
- return;
- }
-
- if ( ! current_user_can( 'jetpack_connect' ) ) {
- return;
- }
-
- add_action( 'admin_notices', array( $this, 'render_banner' ) );
- add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_banner_scripts' ) );
- add_action( 'admin_print_styles', array( Jetpack::init(), 'admin_banner_styles' ) );
-
- if ( Jetpack::state( 'network_nag' ) ) {
- add_action( 'network_admin_notices', array( $this, 'network_connect_notice' ) );
- }
-
- // Only fires immediately after plugin activation
- if ( get_transient( 'activated_jetpack' ) ) {
- add_action( 'admin_notices', array( $this, 'render_connect_prompt_full_screen' ) );
- delete_transient( 'activated_jetpack' );
- }
- }
-
- /**
- * Enqueues JavaScript for new connection banner.
- *
- * @since 4.4.0
- */
- public static function enqueue_banner_scripts() {
- wp_enqueue_script(
- 'jetpack-connection-banner-js',
- Jetpack::get_file_url_for_environment(
- '_inc/build/jetpack-connection-banner.min.js',
- '_inc/jetpack-connection-banner.js'
- ),
- array( 'jquery' ),
- JETPACK__VERSION,
- true
- );
-
- wp_localize_script(
- 'jetpack-connection-banner-js',
- 'jp_banner',
- array(
- 'ajax_url' => admin_url( 'admin-ajax.php' ),
- 'connectionBannerNonce' => wp_create_nonce( 'jp-connection-banner-nonce' ),
- )
- );
- }
-
- /**
- * Renders the new connection banner as of 4.4.0.
- *
- * @since 7.2 Copy and visual elements reduced to show the new focus of Jetpack on Security and Performance.
- * @since 4.4.0
- */
- function render_banner() { ?>
- <div id="message" class="updated jp-wpcom-connect__container">
- <div class="jp-wpcom-connect__container-top-text">
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><rect x="0" fill="none" width="24" height="24"/><g><path d="M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 15h-2v-2h2v2zm0-4h-2l-.5-6h3l-.5 6z"/></g></svg>
- <span><?php esc_html_e( 'You’re almost done. Set up Jetpack to enable powerful security and performance tools for WordPress.', 'jetpack' ); ?></span>
- </div>
- <div class="jp-wpcom-connect__inner-container">
- <span
- class="notice-dismiss connection-banner-dismiss"
- title="<?php esc_attr_e( 'Dismiss this notice', 'jetpack' ); ?>">
- </span>
-
- <div class="jp-wpcom-connect__content-container">
-
- <!-- slide 1: intro -->
- <div class="jp-wpcom-connect__slide jp-wpcom-connect__slide-one jp__slide-is-active">
-
- <div class="jp-wpcom-connect__content-icon jp-connect-illo">
- <?php echo self::get_jetpack_logo(); ?>
- <img
- src="<?php echo plugins_url( 'images/jetpack-powering-up.svg', JETPACK__PLUGIN_FILE ); ?>"
- class="jp-wpcom-connect__hide-phone-and-smaller"
- alt="<?php esc_attr_e(
- 'Jetpack premium services offer even more powerful performance, security, ' .
- 'and revenue tools to help you keep your site safe, fast, and help generate income.',
- 'jetpack'
- ); ?>"
- height="auto"
- width="225"
- />
- </div>
-
- <div class="jp-wpcom-connect__slide-text">
- <h2><?php esc_html_e( 'Simplify your site security and performance with Jetpack', 'jetpack' ) ?></h2>
-
- <p>
- <?php
- esc_html_e(
- 'Jetpack protects you against brute force attacks and unauthorized logins. Basic protection ' .
- 'is always free, while premium plans add unlimited backups of your whole site, spam protection, ' .
- 'malware scanning, and automated fixes.',
- 'jetpack'
- );
- ?>
- </p>
-
- <p>
- <?php
- esc_html_e(
- 'Activate site accelerator tools and watch your page load times and hosting costs drop – we’ll ' .
- 'optimize your images and serve them from our own powerful global network of servers, ' .
- 'and speed up your mobile site to reduce bandwidth usage.',
- 'jetpack'
- );
- ?>
- </p>
-
- <div class="jp-banner__button-container">
- <span class="jp-banner__tos-blurb"><?php jetpack_render_tos_blurb(); ?></span>
- <a
- href="<?php echo esc_url( $this->build_connect_url_for_slide( '72' ) ); ?>"
- class="dops-button is-primary">
- <?php esc_html_e( 'Set up Jetpack', 'jetpack' ); ?>
- </a>
- </div>
- </div>
- </div> <!-- end slide 1 -->
- </div>
- </div>
- </div>
- <?php
- }
-
- /**
- * Renders the full-screen connection prompt. Only shown once and on plugin activation.
- */
- public static function render_connect_prompt_full_screen() {
- $current_screen = get_current_screen();
- if ( 'plugins' === $current_screen->base ) {
- $bottom_connect_url_from = 'full-screen-prompt';
- } else {
- $bottom_connect_url_from = 'landing-page-bottom';
- }
- ?>
- <div class="jp-connect-full__container"><div class="jp-connect-full__container-card">
-
- <?php if ( 'plugins' === $current_screen->base ) : ?>
- <?php echo self::get_jetpack_logo(); ?>
-
- <div class="jp-connect-full__dismiss">
- <svg class="jp-connect-full__svg-dismiss" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><title>Dismiss Jetpack Connection Window</title><rect x="0" fill="none" /><g><path d="M17.705 7.705l-1.41-1.41L12 10.59 7.705 6.295l-1.41 1.41L10.59 12l-4.295 4.295 1.41 1.41L12 13.41l4.295 4.295 1.41-1.41L13.41 12l4.295-4.295z"/></g></svg>
- </div>
- <?php endif; ?>
-
- <div class="jp-connect-full__step-header">
- <h2 class="jp-connect-full__step-header-title"><?php esc_html_e( 'Activate essential WordPress security and performance tools by setting up Jetpack', 'jetpack' ) ?></h2>
- </div>
-
- <div class="jp-connect-full__row">
- <div class="jp-connect-full__slide">
- <div class="jp-connect-full__slide-card illustration">
- <img
- src="<?php echo plugins_url( 'images/security.svg', JETPACK__PLUGIN_FILE ); ?>"
- alt="<?php esc_attr_e( 'Security & Backups', 'jetpack' ); ?>"
- />
- </div>
- <div class="jp-connect-full__slide-card">
- <p><?php
- esc_html_e(
- 'Jetpack protects you against brute force attacks and unauthorized logins. ' .
- 'Basic protection is always free, while premium plans add unlimited backups of your whole site, ' .
- 'spam protection, malware scanning, and automated fixes.',
- 'jetpack'
- );
- ?></p>
- </div>
- </div>
- <div class="jp-connect-full__slide">
- <div class="jp-connect-full__slide-card illustration">
- <img
- src="<?php echo plugins_url( 'images/jetpack-speed.svg', JETPACK__PLUGIN_FILE ); ?>"
- alt="<?php esc_attr_e( 'Built-in Performance', 'jetpack' ); ?>"
- />
- </div>
- <div class="jp-connect-full__slide-card">
- <p><?php
- esc_html_e(
- "Activate site accelerator tools and watch your page load times and hosting costs drop—" .
- "we'll optimize your images and serve them from our own powerful global network of servers, " .
- "and speed up your mobile site to reduce bandwidth usage.",
- 'jetpack'
- );
- ?></p>
- </div>
- </div>
- </div>
-
- <p class="jp-connect-full__tos-blurb">
- <?php jetpack_render_tos_blurb(); ?>
- </p>
- <p class="jp-connect-full__button-container">
- <a href="<?php echo esc_url( Jetpack::init()->build_connect_url( true, false, $bottom_connect_url_from ) ); ?>" class="dops-button is-primary">
- <?php esc_html_e( 'Set up Jetpack', 'jetpack' ); ?>
- </a>
- </p>
- <?php if ( 'plugins' === $current_screen->base ) : ?>
- <p class="jp-connect-full__dismiss-paragraph">
- <a>
- <?php echo esc_html_x(
- 'Not now, thank you.', 'a link that closes the modal window that offers to connect Jetpack', 'jetpack'
- ); ?>
- </a>
- </p>
- <?php endif; ?>
- </div></div>
- <?php
- }
-
- /**
- * Renders the legacy network connection banner.
- */
- function network_connect_notice() {
- ?>
- <div id="message" class="updated jetpack-message">
- <div class="squeezer">
- <h2>
- <?php
- echo wp_kses(
- __(
- '<strong>Jetpack is activated!</strong> Each site on your network must be connected individually by an admin on that site.',
- 'jetpack'
- ),
- array( 'strong' => array() )
- );
- ?>
- </h2>
- </div>
- </div>
- <?php
- }
-}
diff --git a/plugins/jetpack/class.jetpack-constants.php b/plugins/jetpack/class.jetpack-constants.php
deleted file mode 100644
index 1c6390d3..00000000
--- a/plugins/jetpack/class.jetpack-constants.php
+++ /dev/null
@@ -1,94 +0,0 @@
-<?php
-
-/**
- * Class Jetpack_Constants
- *
- * Testing constants is hard. Once you define a constant, it's defined. Jetpack_Constants is an
- * abstraction layer so that unit tests can set "constants" for tests.
- *
- * To test your code, you'll need to swap out `defined( 'CONSTANT' )` with `Jetpack_Constants::is_defined( 'CONSTANT' )`
- * and replace `CONSTANT` with `Jetpack_Constants::get_constant( 'CONSTANT' )`. Then in the unit test, you can set the
- * constant with `Jetpack::set_constant( 'CONSTANT', $value )` and then clean up after each test with something like
- * this:
- *
- * function tearDown() {
- * Jetpack_Constants::clear_constants();
- * }
- */
-class Jetpack_Constants {
- static $set_constants = array();
-
- /**
- * Checks if a "constant" has been set in Jetpack_Constants, and if not,
- * checks if the constant was defined with define( 'name', 'value ).
- *
- * @param $name string The name of the constant
- *
- * @return bool
- */
- public static function is_defined( $name ) {
- return array_key_exists( $name, self::$set_constants )
- ? true
- : defined( $name );
- }
- /**
- * Checks if a "constant" has been set in Jetpack_Constants
- * and has the value of true
- *
- * @param $name string The name of the constant
- *
- * @return bool
- */
- public static function is_true( $name ) {
- return self::is_defined( $name) && self::get_constant( $name );
- }
-
- /**
- * Attempts to retrieve the "constant" from Jetpack_Constants, and if it hasn't been set,
- * then attempts to get the constant with the constant() function.
- *
- * @param $name
- *
- * @return mixed null if the constant does not exist or the value of the constant.
- */
- public static function get_constant( $name ) {
- if ( array_key_exists( $name, self::$set_constants ) ) {
- return self::$set_constants[ $name ];
- }
-
- return defined( $name ) ? constant( $name ) : null;
- }
-
- /**
- * Sets the value of the "constant" within Jetpack_Constants.
- *
- * @param $name string The name of the "constant"
- * @param $value string The value of the "constant"
- */
- public static function set_constant( $name, $value ) {
- self::$set_constants[ $name ] = $value;
- }
-
- /**
- * Will unset a "constant" from Jetpack_Constants if the constant exists.
- *
- * @param $name string The name of the "constant"
- *
- * @return bool Whether the constant was removed.
- */
- public static function clear_single_constant( $name ) {
- if ( ! array_key_exists( $name, self::$set_constants ) ) {
- return false;
- }
-
- unset( self::$set_constants[ $name ] );
- return true;
- }
-
- /**
- * Resets all of the constants within Jetpack_Constants.
- */
- public static function clear_constants() {
- self::$set_constants = array();
- }
-}
diff --git a/plugins/jetpack/class.jetpack-data.php b/plugins/jetpack/class.jetpack-data.php
deleted file mode 100644
index 13b15bbc..00000000
--- a/plugins/jetpack/class.jetpack-data.php
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-
-class Jetpack_Data {
- /**
- * Gets locally stored token
- *
- * @return object|false
- */
- public static function get_access_token( $user_id = false ) {
- if ( $user_id ) {
- if ( !$tokens = Jetpack_Options::get_option( 'user_tokens' ) ) {
- return false;
- }
- if ( $user_id === JETPACK_MASTER_USER ) {
- if ( !$user_id = Jetpack_Options::get_option( 'master_user' ) ) {
- return false;
- }
- }
- if ( !isset( $tokens[$user_id] ) || !$token = $tokens[$user_id] ) {
- return false;
- }
- $token_chunks = explode( '.', $token );
- if ( empty( $token_chunks[1] ) || empty( $token_chunks[2] ) ) {
- return false;
- }
- if ( $user_id != $token_chunks[2] ) {
- return false;
- }
- $token = "{$token_chunks[0]}.{$token_chunks[1]}";
- } else {
- $token = Jetpack_Options::get_option( 'blog_token' );
- if ( empty( $token ) ) {
- return false;
- }
- }
-
- return (object) array(
- 'secret' => $token,
- 'external_user_id' => (int) $user_id,
- );
- }
-
- /**
- * This function mirrors Jetpack_Data::is_usable_domain() in the WPCOM codebase.
- *
- * @param $domain
- * @param array $extra
- *
- * @return bool|WP_Error
- */
- public static function is_usable_domain( $domain, $extra = array() ) {
-
- // If it's empty, just fail out.
- if ( ! $domain ) {
- return new WP_Error( 'fail_domain_empty', sprintf( __( 'Domain `%1$s` just failed is_usable_domain check as it is empty.', 'jetpack' ), $domain ) );
- }
-
- /**
- * Skips the usuable domain check when connecting a site.
- *
- * Allows site administrators with domains that fail gethostname-based checks to pass the request to WP.com
- *
- * @since 4.1.0
- *
- * @param bool If the check should be skipped. Default false.
- */
- if ( apply_filters( 'jetpack_skip_usuable_domain_check', false ) ) {
- return true;
- }
-
- // None of the explicit localhosts.
- $forbidden_domains = array(
- 'wordpress.com',
- 'localhost',
- 'localhost.localdomain',
- '127.0.0.1',
- 'local.wordpress.test', // VVV
- 'local.wordpress-trunk.test', // VVV
- 'src.wordpress-develop.test', // VVV
- 'build.wordpress-develop.test', // VVV
- );
- if ( in_array( $domain, $forbidden_domains ) ) {
- return new WP_Error( 'fail_domain_forbidden', sprintf( __( 'Domain `%1$s` just failed is_usable_domain check as it is in the forbidden array.', 'jetpack' ), $domain ) );
- }
-
- // No .test or .local domains
- if ( preg_match( '#\.(test|local)$#i', $domain ) ) {
- return new WP_Error( 'fail_domain_tld', sprintf( __( 'Domain `%1$s` just failed is_usable_domain check as it uses an invalid top level domain.', 'jetpack' ), $domain ) );
- }
-
- // No WPCOM subdomains
- if ( preg_match( '#\.wordpress\.com$#i', $domain ) ) {
- return new WP_Error( 'fail_subdomain_wpcom', sprintf( __( 'Domain `%1$s` just failed is_usable_domain check as it is a subdomain of WordPress.com.', 'jetpack' ), $domain ) );
- }
-
- // If PHP was compiled without support for the Filter module (very edge case)
- if ( ! function_exists( 'filter_var' ) ) {
- // Just pass back true for now, and let wpcom sort it out.
- return true;
- }
-
- return true;
- }
-
- /**
- * Returns true if the IP address passed in should not be in a reserved range, even if PHP says that it is.
- * See: https://bugs.php.net/bug.php?id=66229 and https://github.com/php/php-src/commit/d1314893fd1325ca6aa0831101896e31135a2658
- *
- * This function mirrors Jetpack_Data::php_bug_66229_check() in the WPCOM codebase.
- */
- public static function php_bug_66229_check( $ip ) {
- if ( ! filter_var( $ip, FILTER_VALIDATE_IP ) ) {
- return false;
- }
-
- $ip_arr = array_map( 'intval', explode( '.', $ip ) );
-
- if ( 128 == $ip_arr[0] && 0 == $ip_arr[1] ) {
- return true;
- }
-
- if ( 191 == $ip_arr[0] && 255 == $ip_arr[1] ) {
- return true;
- }
-
- return false;
- }
-}
diff --git a/plugins/jetpack/class.jetpack-debugger.php b/plugins/jetpack/class.jetpack-debugger.php
deleted file mode 100644
index 88c13090..00000000
--- a/plugins/jetpack/class.jetpack-debugger.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Deprecated. No longer needed.
- *
- * @package Jetpack
- */
diff --git a/plugins/jetpack/class.jetpack-error.php b/plugins/jetpack/class.jetpack-error.php
deleted file mode 100644
index 9b7725ad..00000000
--- a/plugins/jetpack/class.jetpack-error.php
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
-
-class Jetpack_Error extends WP_Error {}
diff --git a/plugins/jetpack/class.jetpack-gutenberg.php b/plugins/jetpack/class.jetpack-gutenberg.php
deleted file mode 100644
index fd66c8c5..00000000
--- a/plugins/jetpack/class.jetpack-gutenberg.php
+++ /dev/null
@@ -1,662 +0,0 @@
-<?php //phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
-/**
- * Handles server-side registration and use of all blocks and plugins available in Jetpack for the block editor, aka Gutenberg.
- * Works in tandem with client-side block registration via `index.json`
- *
- * @package Jetpack
- */
-
-/**
- * Wrapper function to safely register a gutenberg block type
- *
- * @param string $slug Slug of the block.
- * @param array $args Arguments that are passed into register_block_type.
- *
- * @see register_block_type
- *
- * @since 6.7.0
- *
- * @return WP_Block_Type|false The registered block type on success, or false on failure.
- */
-function jetpack_register_block( $slug, $args = array() ) {
- if ( 0 !== strpos( $slug, 'jetpack/' ) && ! strpos( $slug, '/' ) ) {
- _doing_it_wrong( 'jetpack_register_block', 'Prefix the block with jetpack/ ', '7.1.0' );
- $slug = 'jetpack/' . $slug;
- }
-
- // Checking whether block is registered to ensure it isn't registered twice.
- if ( Jetpack_Gutenberg::is_registered( $slug ) ) {
- return false;
- }
-
- return register_block_type( $slug, $args );
-}
-
-/**
- * Helper function to register a Jetpack Gutenberg plugin
- *
- * @deprecated 7.1.0 Use Jetpack_Gutenberg::set_extension_available() instead
- *
- * @param string $slug Slug of the plugin.
- *
- * @since 6.9.0
- *
- * @return void
- */
-function jetpack_register_plugin( $slug ) {
- _deprecated_function( __FUNCTION__, '7.1', 'Jetpack_Gutenberg::set_extension_available' );
-
- Jetpack_Gutenberg::register_plugin( $slug );
-}
-
-/**
- * Set the reason why an extension (block or plugin) is unavailable
- *
- * @deprecated 7.1.0 Use Jetpack_Gutenberg::set_extension_unavailable() instead
- *
- * @param string $slug Slug of the block.
- * @param string $reason A string representation of why the extension is unavailable.
- *
- * @since 7.0.0
- *
- * @return void
- */
-function jetpack_set_extension_unavailability_reason( $slug, $reason ) {
- _deprecated_function( __FUNCTION__, '7.1', 'Jetpack_Gutenberg::set_extension_unavailable' );
-
- Jetpack_Gutenberg::set_extension_unavailability_reason( $slug, $reason );
-}
-
-/**
- * General Gutenberg editor specific functionality
- */
-class Jetpack_Gutenberg {
-
- /**
- * Only these extensions can be registered. Used to control availability of beta blocks.
- *
- * @var array Extensions whitelist
- */
- private static $extensions = array();
-
- /**
- * Keeps track of the reasons why a given extension is unavailable.
- *
- * @var array Extensions availability information
- */
- private static $availability = array();
-
- /**
- * Prepend the 'jetpack/' prefix to a block name
- *
- * @param string $block_name The block name.
- *
- * @return string The prefixed block name.
- */
- private static function prepend_block_prefix( $block_name ) {
- return 'jetpack/' . $block_name;
- }
-
- /**
- * Remove the 'jetpack/' or jetpack-' prefix from an extension name
- *
- * @param string $extension_name The extension name.
- *
- * @return string The unprefixed extension name.
- */
- private static function remove_extension_prefix( $extension_name ) {
- if ( wp_startswith( $extension_name, 'jetpack/' ) || wp_startswith( $extension_name, 'jetpack-' ) ) {
- return substr( $extension_name, strlen( 'jetpack/' ) );
- }
- return $extension_name;
- }
-
- /**
- * Whether two arrays share at least one item
- *
- * @param array $a An array.
- * @param array $b Another array.
- *
- * @return boolean True if $a and $b share at least one item
- */
- protected static function share_items( $a, $b ) {
- return count( array_intersect( $a, $b ) ) > 0;
- }
-
- /**
- * Register a block
- *
- * @deprecated 7.1.0 Use jetpack_register_block() instead
- *
- * @param string $slug Slug of the block.
- * @param array $args Arguments that are passed into register_block_type().
- */
- public static function register_block( $slug, $args ) {
- _deprecated_function( __METHOD__, '7.1', 'jetpack_register_block' );
-
- jetpack_register_block( 'jetpack/' . $slug, $args );
- }
-
- /**
- * Register a plugin
- *
- * @deprecated 7.1.0 Use Jetpack_Gutenberg::set_extension_available() instead
- *
- * @param string $slug Slug of the plugin.
- */
- public static function register_plugin( $slug ) {
- _deprecated_function( __METHOD__, '7.1', 'Jetpack_Gutenberg::set_extension_available' );
-
- self::set_extension_available( $slug );
- }
-
- /**
- * Register a block
- *
- * @deprecated 7.0.0 Use jetpack_register_block() instead
- *
- * @param string $slug Slug of the block.
- * @param array $args Arguments that are passed into the register_block_type.
- * @param array $availability array containing if a block is available and the reason when it is not.
- */
- public static function register( $slug, $args, $availability ) {
- _deprecated_function( __METHOD__, '7.0', 'jetpack_register_block' );
-
- if ( isset( $availability['available'] ) && ! $availability['available'] ) {
- self::set_extension_unavailability_reason( $slug, $availability['unavailable_reason'] );
- } else {
- self::register_block( $slug, $args );
- }
- }
-
- /**
- * Set a (non-block) extension as available
- *
- * @param string $slug Slug of the extension.
- */
- public static function set_extension_available( $slug ) {
- self::$availability[ self::remove_extension_prefix( $slug ) ] = true;
- }
-
- /**
- * Set the reason why an extension (block or plugin) is unavailable
- *
- * @param string $slug Slug of the extension.
- * @param string $reason A string representation of why the extension is unavailable.
- */
- public static function set_extension_unavailable( $slug, $reason ) {
- self::$availability[ self::remove_extension_prefix( $slug ) ] = $reason;
- }
-
- /**
- * Set the reason why an extension (block or plugin) is unavailable
- *
- * @deprecated 7.1.0 Use set_extension_unavailable() instead
- *
- * @param string $slug Slug of the extension.
- * @param string $reason A string representation of why the extension is unavailable.
- */
- public static function set_extension_unavailability_reason( $slug, $reason ) {
- _deprecated_function( __METHOD__, '7.1', 'Jetpack_Gutenberg::set_extension_unavailable' );
-
- self::set_extension_unavailable( $slug, $reason );
- }
-
- /**
- * Set up a whitelist of allowed block editor extensions
- *
- * @return void
- */
- public static function init() {
- if ( ! self::should_load() ) {
- return;
- }
-
- /**
- * Alternative to `JETPACK_BETA_BLOCKS`, set to `true` to load Beta Blocks.
- *
- * @since 6.9.0
- *
- * @param boolean
- */
- if ( apply_filters( 'jetpack_load_beta_blocks', false ) ) {
- Jetpack_Constants::set_constant( 'JETPACK_BETA_BLOCKS', true );
- }
-
- /**
- * Filter the whitelist of block editor extensions that are available through Jetpack.
- *
- * @since 7.0.0
- *
- * @param array
- */
- self::$extensions = apply_filters( 'jetpack_set_available_extensions', self::get_jetpack_gutenberg_extensions_whitelist() );
-
- /**
- * Filter the whitelist of block editor plugins that are available through Jetpack.
- *
- * @deprecated 7.0.0 Use jetpack_set_available_extensions instead
- *
- * @since 6.8.0
- *
- * @param array
- */
- self::$extensions = apply_filters( 'jetpack_set_available_blocks', self::$extensions );
-
- /**
- * Filter the whitelist of block editor plugins that are available through Jetpack.
- *
- * @deprecated 7.0.0 Use jetpack_set_available_extensions instead
- *
- * @since 6.9.0
- *
- * @param array
- */
- self::$extensions = apply_filters( 'jetpack_set_available_plugins', self::$extensions );
- }
-
- /**
- * Resets the class to its original state
- *
- * Used in unit tests
- *
- * @return void
- */
- public static function reset() {
- self::$extensions = array();
- self::$availability = array();
- }
-
- /**
- * Return the Gutenberg extensions (blocks and plugins) directory
- *
- * @return string The Gutenberg extensions directory
- */
- public static function get_blocks_directory() {
- /**
- * Filter to select Gutenberg blocks directory
- *
- * @since 6.9.0
- *
- * @param string default: '_inc/blocks/'
- */
- return apply_filters( 'jetpack_blocks_directory', '_inc/blocks/' );
- }
-
- /**
- * Checks for a given .json file in the blocks folder.
- *
- * @param string $preset The name of the .json file to look for.
- *
- * @return bool True if the file is found.
- */
- public static function preset_exists( $preset ) {
- return file_exists( JETPACK__PLUGIN_DIR . self::get_blocks_directory() . $preset . '.json' );
- }
-
- /**
- * Decodes JSON loaded from a preset file in the blocks folder
- *
- * @param string $preset The name of the .json file to load.
- *
- * @return mixed Returns an object if the file is present, or false if a valid .json file is not present.
- */
- public static function get_preset( $preset ) {
- return json_decode(
- // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents
- file_get_contents( JETPACK__PLUGIN_DIR . self::get_blocks_directory() . $preset . '.json' )
- );
- }
-
- /**
- * Returns a whitelist of Jetpack Gutenberg extensions (blocks and plugins), based on index.json
- *
- * @return array A list of blocks: eg [ 'publicize', 'markdown' ]
- */
- public static function get_jetpack_gutenberg_extensions_whitelist() {
- $preset_extensions_manifest = self::preset_exists( 'index' ) ? self::get_preset( 'index' ) : (object) array();
-
- $preset_extensions = isset( $preset_extensions_manifest->production ) ? (array) $preset_extensions_manifest->production : array();
-
- if ( Jetpack_Constants::is_true( 'JETPACK_BETA_BLOCKS' ) ) {
- $beta_extensions = isset( $preset_extensions_manifest->beta ) ? (array) $preset_extensions_manifest->beta : array();
- return array_unique( array_merge( $preset_extensions, $beta_extensions ) );
- }
-
- return $preset_extensions;
- }
-
- /**
- * Get availability of each block / plugin.
- *
- * @return array A list of block and plugins and their availablity status
- */
- public static function get_availability() {
- /**
- * Fires before Gutenberg extensions availability is computed.
- *
- * In the function call you supply, use `jetpack_register_block()` to set a block as available.
- * Alternatively, use `Jetpack_Gutenberg::set_extension_available()` (for a non-block plugin), and
- * `Jetpack_Gutenberg::set_extension_unavailable()` (if the block or plugin should not be registered
- * but marked as unavailable).
- *
- * @since 7.0.0
- */
- do_action( 'jetpack_register_gutenberg_extensions' );
-
- $available_extensions = array();
-
- foreach ( self::$extensions as $extension ) {
- $is_available = self::is_registered( 'jetpack/' . $extension ) ||
- ( isset( self::$availability[ $extension ] ) && true === self::$availability[ $extension ] );
-
- $available_extensions[ $extension ] = array(
- 'available' => $is_available,
- );
-
- if ( ! $is_available ) {
- $reason = isset( self::$availability[ $extension ] ) ? self::$availability[ $extension ] : 'missing_module';
- $available_extensions[ $extension ]['unavailable_reason'] = $reason;
- }
- }
-
- $unwhitelisted_blocks = array();
- $all_registered_blocks = WP_Block_Type_Registry::get_instance()->get_all_registered();
- foreach ( $all_registered_blocks as $block_name => $block_type ) {
- if ( ! wp_startswith( $block_name, 'jetpack/' ) || isset( $block_type->parent ) ) {
- continue;
- }
-
- $unprefixed_block_name = self::remove_extension_prefix( $block_name );
-
- if ( in_array( $unprefixed_block_name, self::$extensions, true ) ) {
- continue;
- }
-
- $unwhitelisted_blocks[ $unprefixed_block_name ] = array(
- 'available' => false,
- 'unavailable_reason' => 'not_whitelisted',
- );
- }
-
- // Finally: Unwhitelisted non-block extensions. These are in $availability.
- $unwhitelisted_extensions = array_fill_keys(
- array_diff( array_keys( self::$availability ), self::$extensions ),
- array(
- 'available' => false,
- 'unavailable_reason' => 'not_whitelisted',
- )
- );
- return array_merge( $available_extensions, $unwhitelisted_blocks, $unwhitelisted_extensions );
- }
-
- /**
- * Check if an extension/block is already registered
- *
- * @since 7.2
- *
- * @param string $slug Name of extension/block to check.
- *
- * @return bool
- */
- public static function is_registered( $slug ) {
- return WP_Block_Type_Registry::get_instance()->is_registered( $slug );
- }
-
- /**
- * Check if Gutenberg editor is available
- *
- * @since 6.7.0
- *
- * @return bool
- */
- public static function is_gutenberg_available() {
- return true;
- }
-
- /**
- * Check whether conditions indicate Gutenberg Extensions (blocks and plugins) should be loaded
- *
- * Loading blocks and plugins is enabled by default and may be disabled via filter:
- * add_filter( 'jetpack_gutenberg', '__return_false' );
- *
- * @since 6.9.0
- *
- * @return bool
- */
- public static function should_load() {
- if ( ! Jetpack::is_active() && ! Jetpack::is_development_mode() ) {
- return false;
- }
-
- /**
- * Filter to disable Gutenberg blocks
- *
- * @since 6.5.0
- *
- * @param bool true Whether to load Gutenberg blocks
- */
- return (bool) apply_filters( 'jetpack_gutenberg', true );
- }
-
- /**
- * Only enqueue block assets when needed.
- *
- * @param string $type Slug of the block.
- * @param array $script_dependencies An array of view-side Javascript dependencies to be enqueued.
- *
- * @return void
- */
- public static function load_assets_as_required( $type, $script_dependencies = array() ) {
- if ( is_admin() ) {
- // A block's view assets will not be required in wp-admin.
- return;
- }
-
- $type = sanitize_title_with_dashes( $type );
- self::load_styles_as_required( $type );
- self::load_scripts_as_required( $type, $script_dependencies );
- }
-
- /**
- * Only enqueue block sytles when needed.
- *
- * @param string $type Slug of the block.
- *
- * @since 7.2.0
- *
- * @return void
- */
- public static function load_styles_as_required( $type ) {
- if ( is_admin() ) {
- // A block's view assets will not be required in wp-admin.
- return;
- }
-
- // Enqueue styles.
- $style_relative_path = self::get_blocks_directory() . $type . '/view' . ( is_rtl() ? '.rtl' : '' ) . '.css';
- if ( self::block_has_asset( $style_relative_path ) ) {
- $style_version = self::get_asset_version( $style_relative_path );
- $view_style = plugins_url( $style_relative_path, JETPACK__PLUGIN_FILE );
- wp_enqueue_style( 'jetpack-block-' . $type, $view_style, array(), $style_version );
- }
-
- }
- /**
- * Only enqueue block scripts when needed.
- *
- * @param string $type Slug of the block.
- * @param array $script_dependencies An array of view-side Javascript dependencies to be enqueued.
- *
- * @since 7.2.0
- *
- * @return void
- */
- public static function load_scripts_as_required( $type, $script_dependencies = array() ) {
- if ( is_admin() ) {
- // A block's view assets will not be required in wp-admin.
- return;
- }
-
- // Enqueue script.
- $script_relative_path = self::get_blocks_directory() . $type . '/view.js';
- if ( self::block_has_asset( $script_relative_path ) ) {
- $script_version = self::get_asset_version( $script_relative_path );
- $view_script = plugins_url( $script_relative_path, JETPACK__PLUGIN_FILE );
- wp_enqueue_script( 'jetpack-block-' . $type, $view_script, $script_dependencies, $script_version, false );
- }
-
- wp_localize_script(
- 'jetpack-block-' . $type,
- 'Jetpack_Block_Assets_Base_Url',
- plugins_url( self::get_blocks_directory(), JETPACK__PLUGIN_FILE )
- );
- }
-
- /**
- * Check if an asset exists for a block.
- *
- * @param string $file Path of the file we are looking for.
- *
- * @return bool $block_has_asset Does the file exist.
- */
- public static function block_has_asset( $file ) {
- return file_exists( JETPACK__PLUGIN_DIR . $file );
- }
-
- /**
- * Get the version number to use when loading the file. Allows us to bypass cache when developing.
- *
- * @param string $file Path of the file we are looking for.
- *
- * @return string $script_version Version number.
- */
- public static function get_asset_version( $file ) {
- return Jetpack::is_development_version() && self::block_has_asset( $file )
- ? filemtime( JETPACK__PLUGIN_DIR . $file )
- : JETPACK__VERSION;
- }
-
- /**
- * Load Gutenberg editor assets
- *
- * @since 6.7.0
- *
- * @return void
- */
- public static function enqueue_block_editor_assets() {
- if ( ! self::should_load() ) {
- return;
- }
-
- $rtl = is_rtl() ? '.rtl' : '';
- $beta = Jetpack_Constants::is_true( 'JETPACK_BETA_BLOCKS' ) ? '-beta' : '';
- $blocks_dir = self::get_blocks_directory();
-
- $editor_script = plugins_url( "{$blocks_dir}editor{$beta}.js", JETPACK__PLUGIN_FILE );
- $editor_style = plugins_url( "{$blocks_dir}editor{$beta}{$rtl}.css", JETPACK__PLUGIN_FILE );
-
- $version = Jetpack::is_development_version() && file_exists( JETPACK__PLUGIN_DIR . $blocks_dir . 'editor.js' )
- ? filemtime( JETPACK__PLUGIN_DIR . $blocks_dir . 'editor.js' )
- : JETPACK__VERSION;
-
- if ( method_exists( 'Jetpack', 'build_raw_urls' ) ) {
- $site_fragment = Jetpack::build_raw_urls( home_url() );
- } elseif ( class_exists( 'WPCOM_Masterbar' ) && method_exists( 'WPCOM_Masterbar', 'get_calypso_site_slug' ) ) {
- $site_fragment = WPCOM_Masterbar::get_calypso_site_slug( get_current_blog_id() );
- } else {
- $site_fragment = '';
- }
-
- wp_enqueue_script(
- 'jetpack-blocks-editor',
- $editor_script,
- array(
- 'lodash',
- 'wp-api-fetch',
- 'wp-blob',
- 'wp-blocks',
- 'wp-components',
- 'wp-compose',
- 'wp-data',
- 'wp-date',
- 'wp-edit-post',
- 'wp-editor',
- 'wp-element',
- 'wp-hooks',
- 'wp-i18n',
- 'wp-keycodes',
- 'wp-plugins',
- 'wp-polyfill',
- 'wp-rich-text',
- 'wp-token-list',
- 'wp-url',
- ),
- $version,
- false
- );
-
- wp_localize_script(
- 'jetpack-blocks-editor',
- 'Jetpack_Block_Assets_Base_Url',
- plugins_url( $blocks_dir . '/', JETPACK__PLUGIN_FILE )
- );
-
- wp_localize_script(
- 'jetpack-blocks-editor',
- 'Jetpack_Editor_Initial_State',
- array(
- 'available_blocks' => self::get_availability(),
- 'jetpack' => array( 'is_active' => Jetpack::is_active() ),
- 'siteFragment' => $site_fragment,
- )
- );
-
- wp_set_script_translations( 'jetpack-blocks-editor', 'jetpack', plugins_url( 'languages/json', JETPACK__PLUGIN_FILE ) );
-
- // Adding a filter late to allow every other filter to process the path, including the CDN.
- add_filter( 'pre_load_script_translations', array( __CLASS__, 'filter_pre_load_script_translations' ), 1000, 3 );
-
- wp_enqueue_style( 'jetpack-blocks-editor', $editor_style, array(), $version );
- }
-
- /**
- * A workaround for setting i18n data for WordPress client-side i18n mechanism.
- * We are not yet using dotorg language packs for the editor file, so this short-circuits
- * the translation loading and feeds our JSON data directly into the translation getter.
- *
- * @param NULL $null not used.
- * @param String $file the file path that is being loaded, ignored.
- * @param String $handle the script handle.
- * @return NULL|String the translation data only if we're working with our handle.
- */
- public static function filter_pre_load_script_translations( $null, $file, $handle ) {
- if ( 'jetpack-blocks-editor' !== $handle ) {
- return null;
- }
-
- return Jetpack::get_i18n_data_json();
- }
-
- /**
- * Some blocks do not depend on a specific module,
- * and can consequently be loaded outside of the usual modules.
- * We will look for such modules in the extensions/ directory.
- *
- * @since 7.1.0
- */
- public static function load_independent_blocks() {
- if ( self::should_load() ) {
- /**
- * Look for files that match our list of available Jetpack Gutenberg extensions (blocks and plugins).
- * If available, load them.
- */
- foreach ( self::$extensions as $extension ) {
- $extension_file_glob = glob( JETPACK__PLUGIN_DIR . 'extensions/*/' . $extension . '/' . $extension . '.php' );
- if ( ! empty( $extension_file_glob ) ) {
- include_once $extension_file_glob[0];
- }
- }
- }
- }
-}
diff --git a/plugins/jetpack/class.jetpack-heartbeat.php b/plugins/jetpack/class.jetpack-heartbeat.php
deleted file mode 100644
index 67945c45..00000000
--- a/plugins/jetpack/class.jetpack-heartbeat.php
+++ /dev/null
@@ -1,165 +0,0 @@
-<?php
-
-class Jetpack_Heartbeat {
-
- /**
- * Holds the singleton instance of this class
- *
- * @since 2.3.3
- * @var Jetpack_Heartbeat
- */
- private static $instance = false;
-
- private $cron_name = 'jetpack_v2_heartbeat';
-
- /**
- * Singleton
- *
- * @since 2.3.3
- * @static
- * @return Jetpack_Heartbeat
- */
- public static function init() {
- if ( ! self::$instance ) {
- self::$instance = new Jetpack_Heartbeat;
- }
-
- return self::$instance;
- }
-
- /**
- * Constructor for singleton
- *
- * @since 2.3.3
- * @return Jetpack_Heartbeat
- */
- private function __construct() {
- if ( ! Jetpack::is_active() )
- return;
-
- // Schedule the task
- add_action( $this->cron_name, array( $this, 'cron_exec' ) );
-
- if ( ! wp_next_scheduled( $this->cron_name ) ) {
- // Deal with the old pre-3.0 weekly one.
- if ( $timestamp = wp_next_scheduled( 'jetpack_heartbeat' ) ) {
- wp_unschedule_event( $timestamp, 'jetpack_heartbeat' );
- }
-
- wp_schedule_event( time(), 'daily', $this->cron_name );
- }
-
- add_filter( 'jetpack_xmlrpc_methods', array( __CLASS__, 'jetpack_xmlrpc_methods' ) );
- }
-
- /**
- * Method that gets executed on the wp-cron call
- *
- * @since 2.3.3
- * @global string $wp_version
- */
- public function cron_exec() {
-
- $jetpack = Jetpack::init();
-
- /*
- * This should run daily. Figuring in for variances in
- * WP_CRON, don't let it run more than every 23 hours at most.
- *
- * i.e. if it ran less than 23 hours ago, fail out.
- */
- $last = (int) Jetpack_Options::get_option( 'last_heartbeat' );
- if ( $last && ( $last + DAY_IN_SECONDS - HOUR_IN_SECONDS > time() ) ) {
- return;
- }
-
- /*
- * Check for an identity crisis
- *
- * If one exists:
- * - Bump stat for ID crisis
- * - Email site admin about potential ID crisis
- */
-
- // Coming Soon!
-
- foreach ( self::generate_stats_array( 'v2-' ) as $key => $value ) {
- $jetpack->stat( $key, $value );
- }
-
- Jetpack_Options::update_option( 'last_heartbeat', time() );
-
- $jetpack->do_stats( 'server_side' );
-
- /**
- * Fires when we synchronize all registered options on heartbeat.
- *
- * @since 3.3.0
- */
- do_action( 'jetpack_heartbeat' );
- }
-
- public static function generate_stats_array( $prefix = '' ) {
- $return = array();
-
- $return["{$prefix}version"] = JETPACK__VERSION;
- $return["{$prefix}wp-version"] = get_bloginfo( 'version' );
- $return["{$prefix}php-version"] = PHP_VERSION;
- $return["{$prefix}branch"] = floatval( JETPACK__VERSION );
- $return["{$prefix}wp-branch"] = floatval( get_bloginfo( 'version' ) );
- $return["{$prefix}php-branch"] = floatval( PHP_VERSION );
- $return["{$prefix}public"] = Jetpack_Options::get_option( 'public' );
- $return["{$prefix}ssl"] = Jetpack::permit_ssl();
- $return["{$prefix}is-https"] = is_ssl() ? 'https' : 'http';
- $return["{$prefix}language"] = get_bloginfo( 'language' );
- $return["{$prefix}charset"] = get_bloginfo( 'charset' );
- $return["{$prefix}is-multisite"] = is_multisite() ? 'multisite' : 'singlesite';
- $return["{$prefix}identitycrisis"] = Jetpack::check_identity_crisis() ? 'yes' : 'no';
- $return["{$prefix}plugins"] = implode( ',', Jetpack::get_active_plugins() );
- $return["{$prefix}manage-enabled"] = Jetpack::is_module_active( 'manage' );
-
- // is-multi-network can have three values, `single-site`, `single-network`, and `multi-network`
- $return["{$prefix}is-multi-network"] = 'single-site';
- if ( is_multisite() ) {
- $return["{$prefix}is-multi-network"] = Jetpack::is_multi_network() ? 'multi-network' : 'single-network';
- }
-
- if ( ! empty( $_SERVER['SERVER_ADDR'] ) || ! empty( $_SERVER['LOCAL_ADDR'] ) ) {
- $ip = ! empty( $_SERVER['SERVER_ADDR'] ) ? $_SERVER['SERVER_ADDR'] : $_SERVER['LOCAL_ADDR'];
- $ip_arr = array_map( 'intval', explode( '.', $ip ) );
- if ( 4 == count( $ip_arr ) ) {
- $return["{$prefix}ip-2-octets"] = implode( '.', array_slice( $ip_arr, 0, 2 ) );
- }
- }
-
- foreach ( Jetpack::get_available_modules() as $slug ) {
- $return["{$prefix}module-{$slug}"] = Jetpack::is_module_active( $slug ) ? 'on' : 'off';
- }
-
- return $return;
- }
-
- public static function jetpack_xmlrpc_methods( $methods ) {
- $methods['jetpack.getHeartbeatData'] = array( __CLASS__, 'xmlrpc_data_response' );
- return $methods;
- }
-
- public static function xmlrpc_data_response( $params = array() ) {
- // The WordPress XML-RPC server sets a default param of array()
- // if no argument is passed on the request and the method handlers get this array in $params.
- // generate_stats_array() needs a string as first argument.
- $params = empty( $params ) ? '' : $params;
- return self::generate_stats_array( $params );
- }
-
- public function deactivate() {
- // Deal with the old pre-3.0 weekly one.
- if ( $timestamp = wp_next_scheduled( 'jetpack_heartbeat' ) ) {
- wp_unschedule_event( $timestamp, 'jetpack_heartbeat' );
- }
-
- $timestamp = wp_next_scheduled( $this->cron_name );
- wp_unschedule_event( $timestamp, $this->cron_name );
- }
-
-}
diff --git a/plugins/jetpack/class.jetpack-idc.php b/plugins/jetpack/class.jetpack-idc.php
deleted file mode 100644
index 64d91f1d..00000000
--- a/plugins/jetpack/class.jetpack-idc.php
+++ /dev/null
@@ -1,700 +0,0 @@
-<?php
-
-/**
- * This class will handle everything involved with fixing an Identity Crisis.
- *
- * @since 4.4.0
- */
-class Jetpack_IDC {
-
- /**
- * @var Jetpack_IDC
- **/
- private static $instance = null;
-
- /**
- * The wpcom value of the home URL
- * @var string
- */
- static $wpcom_home_url;
-
- /**
- * Has safe mode been confirmed?
- * @var bool
- */
- static $is_safe_mode_confirmed;
-
- /**
- * The current screen, which is set if the current user is a non-admin and this is an admin page.
- * @var WP_Screen
- */
- static $current_screen;
-
- /**
- * The link to the support document used to explain Safe Mode to users
- * @var string
- */
- const SAFE_MODE_DOC_LINK = 'https://jetpack.com/support/safe-mode';
-
- static function init() {
- if ( is_null( self::$instance ) ) {
- self::$instance = new Jetpack_IDC;
- }
-
- return self::$instance;
- }
-
- private function __construct() {
- add_action( 'jetpack_sync_processed_actions', array( $this, 'maybe_clear_migrate_option' ) );
-
- if ( false === $urls_in_crisis = Jetpack::check_identity_crisis() ) {
- return;
- }
-
- self::$wpcom_home_url = $urls_in_crisis['wpcom_home'];
- add_action( 'init', array( $this, 'wordpress_init' ) );
- }
-
- /**
- * This method loops through the array of processed items from sync and checks if one of the items was the
- * home_url or site_url callable. If so, then we delete the jetpack_migrate_for_idc option.
- *
- * @param $processed_items array Array of processed items that were synced to WordPress.com
- */
- function maybe_clear_migrate_option( $processed_items ) {
- foreach ( (array) $processed_items as $item ) {
-
- // First, is this item a jetpack_sync_callable action? If so, then proceed.
- $callable_args = ( is_array( $item ) && isset( $item[0], $item[1] ) && 'jetpack_sync_callable' === $item[0] )
- ? $item[1]
- : null;
-
- // Second, if $callable_args is set, check if the callable was home_url or site_url. If so,
- // clear the migrate option.
- if (
- isset( $callable_args, $callable_args[0] )
- && ( 'home_url' === $callable_args[0] || 'site_url' === $callable_args[1] )
- ) {
- Jetpack_Options::delete_option( 'migrate_for_idc' );
- break;
- }
- }
- }
-
- function wordpress_init() {
- if ( ! current_user_can( 'jetpack_disconnect' ) && is_admin() ) {
- add_action( 'admin_notices', array( $this, 'display_non_admin_idc_notice' ) );
- add_action( 'admin_enqueue_scripts', array( $this,'enqueue_idc_notice_files' ) );
- add_action( 'current_screen', array( $this, 'non_admins_current_screen_check' ) );
- return;
- }
-
- if (
- isset( $_GET['jetpack_idc_clear_confirmation'], $_GET['_wpnonce'] ) &&
- wp_verify_nonce( $_GET['_wpnonce'], 'jetpack_idc_clear_confirmation' )
- ) {
- Jetpack_Options::delete_option( 'safe_mode_confirmed' );
- self::$is_safe_mode_confirmed = false;
- } else {
- self::$is_safe_mode_confirmed = (bool) Jetpack_Options::get_option( 'safe_mode_confirmed' );
- }
-
- // 121 Priority so that it's the most inner Jetpack item in the admin bar.
- add_action( 'admin_bar_menu', array( $this, 'display_admin_bar_button' ), 121 );
- add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_bar_css' ) );
-
- if ( is_admin() && ! self::$is_safe_mode_confirmed ) {
- add_action( 'admin_notices', array( $this, 'display_idc_notice' ) );
- add_action( 'admin_enqueue_scripts', array( $this,'enqueue_idc_notice_files' ) );
- }
- }
-
- function non_admins_current_screen_check( $current_screen ) {
- self::$current_screen = $current_screen;
- if ( isset( $current_screen->id ) && 'toplevel_page_jetpack' == $current_screen->id ) {
- return null;
- }
-
- // If the user has dismissed the notice, and we're not currently on a Jetpack page,
- // then do not show the non-admin notice.
- if ( isset( $_COOKIE, $_COOKIE['jetpack_idc_dismiss_notice'] ) ) {
- remove_action( 'admin_notices', array( $this, 'display_non_admin_idc_notice' ) );
- remove_action( 'admin_enqueue_scripts', array( $this,'enqueue_idc_notice_files' ) );
- }
- }
-
- function display_admin_bar_button() {
- global $wp_admin_bar;
-
- $href = is_admin()
- ? add_query_arg( 'jetpack_idc_clear_confirmation', '1' )
- : add_query_arg( 'jetpack_idc_clear_confirmation', '1', admin_url() );
-
- $href = wp_nonce_url( $href, 'jetpack_idc_clear_confirmation' );
-
- $title = sprintf(
- '<span class="jp-idc-admin-bar">%s %s</span>',
- '<span class="dashicons dashicons-warning"></span>',
- esc_html__( 'Jetpack Safe Mode', 'jetpack' )
- );
-
- $menu = array(
- 'id' => 'jetpack-idc',
- 'title' => $title,
- 'href' => esc_url( $href ),
- 'parent' => 'top-secondary',
- );
-
- if ( ! self::$is_safe_mode_confirmed ) {
- $menu['meta'] = array(
- 'class' => 'hide'
- );
- }
-
- $wp_admin_bar->add_node( $menu );
- }
-
- static function prepare_url_for_display( $url ) {
- return untrailingslashit( Jetpack::normalize_url_protocol_agnostic( $url ) );
- }
-
- /**
- * Clears all IDC specific options. This method is used on disconnect and reconnect.
- */
- static function clear_all_idc_options() {
- // If the site is currently in IDC, let's also clear the VaultPress connection options.
- // We have to check if the site is in IDC, otherwise we'd be clearing the VaultPress
- // connection any time the Jetpack connection is cycled.
- if ( Jetpack::validate_sync_error_idc_option() ) {
- delete_option( 'vaultpress' );
- delete_option( 'vaultpress_auto_register' );
- }
-
- Jetpack_Options::delete_option(
- array(
- 'sync_error_idc',
- 'safe_mode_confirmed',
- 'migrate_for_idc',
- )
- );
- }
-
- /**
- * Does the current admin page have help tabs?
- *
- * @return bool
- */
- function admin_page_has_help_tabs() {
- if ( ! function_exists( 'get_current_screen' ) ) {
- return false;
- }
-
- $current_screen = get_current_screen();
- $tabs = $current_screen->get_help_tabs();
-
- return ! empty( $tabs );
- }
-
- function display_non_admin_idc_notice() {
- $classes = 'jp-idc-notice inline is-non-admin notice notice-warning';
- if ( isset( self::$current_screen ) && 'toplevel_page_jetpack' != self::$current_screen->id ) {
- $classes .= ' is-dismissible';
- }
-
- if ( $this->admin_page_has_help_tabs() ) {
- $classes .= ' has-help-tabs';
- }
- ?>
-
- <div class="<?php echo $classes; ?>">
- <?php $this->render_notice_header(); ?>
- <div class="jp-idc-notice__content-header">
- <h3 class="jp-idc-notice__content-header__lead">
- <?php echo $this->get_non_admin_notice_text(); ?>
- </h3>
-
- <p class="jp-idc-notice__content-header__explanation">
- <?php echo $this->get_non_admin_contact_admin_text(); ?>
- </p>
- </div>
- </div>
- <?php }
-
- /**
- * First "step" of the IDC mitigation. Will provide some messaging and two options/buttons.
- * "Confirm Staging" - Dismiss the notice and continue on with our lives in staging mode.
- * "Fix Jetpack Connection" - Will disconnect the site and start the mitigation...
- */
- function display_idc_notice() {
- $classes = 'jp-idc-notice inline notice notice-warning';
- if ( $this->admin_page_has_help_tabs() ) {
- $classes .= ' has-help-tabs';
- }
- ?>
- <div class="<?php echo $classes; ?>">
- <?php $this->render_notice_header(); ?>
- <?php $this->render_notice_first_step(); ?>
- <?php $this->render_notice_second_step(); ?>
- </div>
- <?php }
-
- function enqueue_admin_bar_css() {
- wp_enqueue_style(
- 'jetpack-idc-admin-bar-css',
- plugins_url( 'css/jetpack-idc-admin-bar.css', JETPACK__PLUGIN_FILE ),
- array( 'dashicons' ),
- JETPACK__VERSION
- );
- }
-
- /**
- * Enqueue scripts for the notice
- */
- function enqueue_idc_notice_files() {
-
- wp_enqueue_script(
- 'jetpack-idc-js',
- Jetpack::get_file_url_for_environment( '_inc/build/idc-notice.min.js', '_inc/idc-notice.js' ),
- array( 'jquery' ),
- JETPACK__VERSION,
- true
- );
-
- wp_localize_script(
- 'jetpack-idc-js',
- 'idcL10n',
- array(
- 'apiRoot' => esc_url_raw( rest_url() ),
- 'nonce' => wp_create_nonce( 'wp_rest' ),
- 'tracksUserData' => Jetpack_Tracks_Client::get_connected_user_tracks_identity(),
- 'currentUrl' => remove_query_arg( '_wpnonce', remove_query_arg( 'jetpack_idc_clear_confirmation' ) ),
- 'tracksEventData' => array(
- 'isAdmin' => current_user_can( 'jetpack_disconnect' ),
- 'currentScreen' => self::$current_screen ? self::$current_screen->id : false,
- ),
- )
- );
-
- if ( ! wp_style_is( 'jetpack-dops-style' ) ) {
- wp_register_style(
- 'jetpack-dops-style',
- plugins_url( '_inc/build/admin.dops-style.css', JETPACK__PLUGIN_FILE ),
- array(),
- JETPACK__VERSION
- );
- }
-
- wp_enqueue_style(
- 'jetpack-idc-css',
- plugins_url( 'css/jetpack-idc.css', JETPACK__PLUGIN_FILE ),
- array( 'jetpack-dops-style' ),
- JETPACK__VERSION
- );
-
- // Required for Tracks
- wp_enqueue_script(
- 'jp-tracks',
- '//stats.wp.com/w.js',
- array(),
- gmdate( 'YW' ),
- true
- );
-
- wp_enqueue_script(
- 'jp-tracks-functions',
- plugins_url( '_inc/lib/tracks/tracks-callables.js', JETPACK__PLUGIN_FILE ),
- array(),
- JETPACK__VERSION,
- false
- );
- }
-
- function render_notice_header() { ?>
- <div class="jp-idc-notice__header">
- <div class="jp-idc-notice__header__emblem">
- <?php echo Jetpack::get_jp_emblem(); ?>
- </div>
- <p class="jp-idc-notice__header__text">
- <?php esc_html_e( 'Jetpack Safe Mode', 'jetpack' ); ?>
- </p>
- </div>
-
- <div class="jp-idc-notice__separator"></div>
- <?php }
-
- /**
- * Is a container for the error notices.
- * Will be shown/controlled by jQuery in idc-notice.js
- */
- function render_error_notice() { ?>
- <div class="jp-idc-error__notice dops-notice is-error">
- <svg class="gridicon gridicons-notice dops-notice__icon" height="24" width="24" viewBox="0 0 24 24">
- <g>
- <path d="M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 15h-2v-2h2v2zm0-4h-2l-.5-6h3l-.5 6z"></path>
- </g>
- </svg>
- <div class="dops-notice__content">
- <span class="dops-notice__text">
- <?php esc_html_e( 'Something went wrong:', 'jetpack' ); ?>
- <span class="jp-idc-error__desc"></span>
- </span>
- <a class="dops-notice__action" href="javascript:void(0);">
- <span id="jp-idc-error__action">
- <?php esc_html_e( 'Try Again', 'jetpack' ); ?>
- </span>
- </a>
- </div>
- </div>
- <?php }
-
- function render_notice_first_step() { ?>
- <div class="jp-idc-notice__first-step">
- <div class="jp-idc-notice__content-header">
- <h3 class="jp-idc-notice__content-header__lead">
- <?php echo $this->get_first_step_header_lead(); ?>
- </h3>
-
- <p class="jp-idc-notice__content-header__explanation">
- <?php echo $this->get_first_step_header_explanation(); ?>
- </p>
- </div>
-
- <?php $this->render_error_notice(); ?>
-
- <div class="jp-idc-notice__actions">
- <div class="jp-idc-notice__action">
- <p class="jp-idc-notice__action__explanation">
- <?php echo $this->get_confirm_safe_mode_action_explanation(); ?>
- </p>
- <button id="jp-idc-confirm-safe-mode-action" class="dops-button">
- <?php echo $this->get_confirm_safe_mode_button_text(); ?>
- </button>
- </div>
-
- <div class="jp-idc-notice__action">
- <p class="jp-idc-notice__action__explanation">
- <?php echo $this->get_first_step_fix_connection_action_explanation(); ?>
- </p>
- <button id="jp-idc-fix-connection-action" class="dops-button">
- <?php echo $this->get_first_step_fix_connection_button_text(); ?>
- </button>
- </div>
- </div>
- </div>
- <?php }
-
- function render_notice_second_step() { ?>
- <div class="jp-idc-notice__second-step">
- <div class="jp-idc-notice__content-header">
- <h3 class="jp-idc-notice__content-header__lead">
- <?php echo $this->get_second_step_header_lead(); ?>
- </h3>
- </div>
-
- <?php $this->render_error_notice(); ?>
-
- <div class="jp-idc-notice__actions">
- <div class="jp-idc-notice__action">
- <p class="jp-idc-notice__action__explanation">
- <?php echo $this->get_migrate_site_action_explanation(); ?>
- </p>
- <button id="jp-idc-migrate-action" class="dops-button">
- <?php echo $this->get_migrate_site_button_text(); ?>
- </button>
- </div>
-
- <div class="jp-idc-notice__action">
- <p class="jp-idc-notice__action__explanation">
- <?php echo $this->get_start_fresh_action_explanation(); ?>
- </p>
- <button id="jp-idc-reconnect-site-action" class="dops-button">
- <?php echo $this->get_start_fresh_button_text(); ?>
- </button>
- </div>
-
- </div>
-
- <p class="jp-idc-notice__unsure-prompt">
- <?php echo $this->get_unsure_prompt(); ?>
- </p>
- </div>
- <?php }
-
- function get_first_step_header_lead() {
- $html = wp_kses(
- sprintf(
- __(
- 'Jetpack has been placed into <a href="%1$s">Safe mode</a> because we noticed this is an exact copy of <a href="%2$s">%3$s</a>.',
- 'jetpack'
- ),
- esc_url( self::SAFE_MODE_DOC_LINK ),
- esc_url( self::$wpcom_home_url ),
- self::prepare_url_for_display( esc_url_raw( self::$wpcom_home_url ) )
- ),
- array( 'a' => array( 'href' => array() ) )
- );
-
- /**
- * Allows overriding of the default header text in the first step of the Safe Mode notice.
- *
- * @since 4.4.0
- *
- * @param string $html The HTML to be displayed
- */
- return apply_filters( 'jetpack_idc_first_step_header_lead', $html );
- }
-
- function get_first_step_header_explanation() {
- $html = wp_kses(
- sprintf(
- __(
- 'Please confirm Safe Mode or fix the Jetpack connection. Select one of the options below or <a href="%1$s">learn
- more about Safe Mode</a>.',
- 'jetpack'
- ),
- esc_url( self::SAFE_MODE_DOC_LINK )
- ),
- array( 'a' => array( 'href' => array() ) )
- );
-
- /**
- * Allows overriding of the default header explanation text in the first step of the Safe Mode notice.
- *
- * @since 4.4.0
- *
- * @param string $html The HTML to be displayed
- */
- return apply_filters( 'jetpack_idc_first_step_header_explanation', $html );
- }
-
- function get_confirm_safe_mode_action_explanation() {
- $html = wp_kses(
- sprintf(
- __(
- 'Is this website a temporary duplicate of <a href="%1$s">%2$s</a> for the purposes
- of testing, staging or development? If so, we recommend keeping it in Safe Mode.',
- 'jetpack'
- ),
- esc_url( untrailingslashit( self::$wpcom_home_url ) ),
- self::prepare_url_for_display( esc_url( self::$wpcom_home_url ) )
- ),
- array( 'a' => array( 'href' => array() ) )
- );
-
- /**
- * Allows overriding of the default text used to explain the confirm safe mode action.
- *
- * @since 4.4.0
- *
- * @param string $html The HTML to be displayed
- */
- return apply_filters( 'jetpack_idc_confirm_safe_mode_explanation', $html );
- }
-
- function get_confirm_safe_mode_button_text() {
- $string = esc_html__( 'Confirm Safe Mode', 'jetpack' );
-
- /**
- * Allows overriding of the default text used for the confirm safe mode action button.
- *
- * @since 4.4.0
- *
- * @param string $string The string to be displayed
- */
- return apply_filters( 'jetpack_idc_confirm_safe_mode_button_text', $string );
- }
-
- function get_first_step_fix_connection_action_explanation() {
- $html = wp_kses(
- sprintf(
- __(
- 'If this is a separate and new website, or the new home of <a href="%1$s">%2$s</a>,
- we recommend turning Safe Mode off, and re-establishing your connection to WordPress.com.',
- 'jetpack'
- ),
- esc_url( untrailingslashit( self::$wpcom_home_url ) ),
- self::prepare_url_for_display( esc_url( self::$wpcom_home_url ) )
- ),
- array( 'a' => array( 'href' => array() ) )
- );
-
- /**
- * Allows overriding of the default text used to explain the fix Jetpack connection action.
- *
- * @since 4.4.0
- *
- * @param string $html The HTML to be displayed
- */
- return apply_filters( 'jetpack_idc_first_fix_connection_explanation', $html );
- }
-
- function get_first_step_fix_connection_button_text() {
- $string = esc_html__( "Fix Jetpack's Connection", 'jetpack' );
-
- /**
- * Allows overriding of the default text used for the fix Jetpack connection action button.
- *
- * @since 4.4.0
- *
- * @param string $string The string to be displayed
- */
- return apply_filters( 'jetpack_idc_first_step_fix_connection_button_text', $string );
- }
-
- function get_second_step_header_lead() {
- $string = sprintf(
- esc_html__(
- 'Is %1$s the new home of %2$s?',
- 'jetpack'
- ),
- untrailingslashit( Jetpack::normalize_url_protocol_agnostic( get_home_url() ) ),
- untrailingslashit( Jetpack::normalize_url_protocol_agnostic( esc_url_raw( self::$wpcom_home_url ) ) )
- );
-
- /**
- * Allows overriding of the default header text in the second step of the Safe Mode notice.
- *
- * @since 4.4.0
- *
- * @param string $html The HTML to be displayed
- */
- return apply_filters( 'jetpack_idc_second_step_header_lead', $string );
- }
-
- function get_migrate_site_action_explanation() {
- $html = wp_kses(
- sprintf(
- __(
- 'Yes. <a href="%1$s">%2$s</a> is replacing <a href="%3$s">%4$s</a>. I would like to
- migrate my stats and subscribers from <a href="%3$s">%4$s</a> to <a href="%1$s">%2$s</a>.',
- 'jetpack'
- ),
- esc_url( get_home_url() ),
- self::prepare_url_for_display( get_home_url() ),
- esc_url( self::$wpcom_home_url ),
- untrailingslashit( Jetpack::normalize_url_protocol_agnostic( esc_url_raw( self::$wpcom_home_url ) ) )
- ),
- array( 'a' => array( 'href' => array() ) )
- );
-
- /**
- * Allows overriding of the default text for explaining the migrate site action.
- *
- * @since 4.4.0
- *
- * @param string $html The HTML to be displayed
- */
- return apply_filters( 'jetpack_idc_migrate_site_explanation', $html );
- }
-
- function get_migrate_site_button_text() {
- $string = esc_html__( 'Migrate Stats &amp; Subscribers', 'jetpack' );
-
- /**
- * Allows overriding of the default text used for the migrate site action button.
- *
- * @since 4.4.0
- *
- * @param string $string The string to be displayed
- */
- return apply_filters( 'jetpack_idc_migrate_site_button_text', $string );
- }
-
- function get_start_fresh_action_explanation() {
- $html = wp_kses(
- sprintf(
- __(
- 'No. <a href="%1$s">%2$s</a> is a new and different website that\'s separate from
- <a href="%3$s">%4$s</a>. It requires a new connection to WordPress.com for new stats and subscribers.',
- 'jetpack'
- ),
- esc_url( get_home_url() ),
- self::prepare_url_for_display( get_home_url() ),
- esc_url( self::$wpcom_home_url ),
- untrailingslashit( Jetpack::normalize_url_protocol_agnostic( esc_url_raw( self::$wpcom_home_url ) ) )
- ),
- array( 'a' => array( 'href' => array() ) )
- );
-
- /**
- * Allows overriding of the default text for explaining the start fresh action.
- *
- * @since 4.4.0
- *
- * @param string $html The HTML to be displayed
- */
- return apply_filters( 'jetpack_idc_start_fresh_explanation', $html );
- }
-
- function get_start_fresh_button_text() {
- $string = esc_html__( 'Start Fresh &amp; Create New Connection', 'jetpack' );
-
- /**
- * Allows overriding of the default text used for the start fresh action button.
- *
- * @since 4.4.0
- *
- * @param string $string The string to be displayed
- */
- return apply_filters( 'jetpack_idc_start_fresh_button_text', $string );
- }
-
- function get_unsure_prompt() {
- $html = wp_kses(
- sprintf(
- __(
- 'Unsure what to do? <a href="%1$s">Read more about Jetpack Safe Mode</a>',
- 'jetpack'
- ),
- esc_url( self::SAFE_MODE_DOC_LINK )
- ),
- array( 'a' => array( 'href' => array() ) )
- );
-
- /**
- * Allows overriding of the default text using in the "Unsure what to do?" prompt.
- *
- * @since 4.4.0
- *
- * @param string $html The HTML to be displayed
- */
- return apply_filters( 'jetpack_idc_unsure_prompt', $html );
- }
-
- function get_non_admin_notice_text() {
- $html = wp_kses(
- sprintf(
- __(
- 'Jetpack has been placed into Safe Mode. Learn more about <a href="%1$s">Safe Mode</a>.',
- 'jetpack'
- ),
- esc_url( self::SAFE_MODE_DOC_LINK )
- ),
- array( 'a' => array( 'href' => array() ) )
- );
-
- /**
- * Allows overriding of the default text that is displayed to non-admin on the Jetpack admin page.
- *
- * @since 4.4.0
- *
- * @param string $html The HTML to be displayed
- */
- return apply_filters( 'jetpack_idc_non_admin_notice_text', $html );
- }
-
- function get_non_admin_contact_admin_text() {
- $string = esc_html__( 'An administrator of this site can take Jetpack out of Safe Mode.', 'jetpack' );
-
- /**
- * Allows overriding of the default text that is displayed to non-admins prompting them to contact an admin.
- *
- * @since 4.4.0
- *
- * @param string $string The string to be displayed
- */
- return apply_filters( 'jetpack_idc_non_admin_contact_admin_text', $string );
- }
-}
-
-Jetpack_IDC::init();
diff --git a/plugins/jetpack/class.jetpack-ixr-client.php b/plugins/jetpack/class.jetpack-ixr-client.php
deleted file mode 100644
index 5d2f7516..00000000
--- a/plugins/jetpack/class.jetpack-ixr-client.php
+++ /dev/null
@@ -1,135 +0,0 @@
-<?php
-
-defined( 'ABSPATH' ) or die( 'No direct access, please.' );
-
-require_once( ABSPATH . WPINC . '/class-IXR.php' );
-
-/**
- * IXR_Client
- *
- * @package IXR
- * @since 1.5
- *
- */
-class Jetpack_IXR_Client extends IXR_Client {
- public $jetpack_args = null;
-
- function __construct( $args = array(), $path = false, $port = 80, $timeout = 15 ) {
- $defaults = array(
- 'url' => Jetpack::xmlrpc_api_url(),
- 'user_id' => 0,
- );
-
- $args = wp_parse_args( $args, $defaults );
-
- $this->jetpack_args = $args;
-
- $this->IXR_Client( $args['url'], $path, $port, $timeout );
- }
-
- function query() {
- $args = func_get_args();
- $method = array_shift( $args );
- $request = new IXR_Request( $method, $args );
- $xml = trim( $request->getXml() );
-
- $response = Jetpack_Client::remote_request( $this->jetpack_args, $xml );
-
- if ( is_wp_error( $response ) ) {
- $this->error = new IXR_Error( -10520, sprintf( 'Jetpack: [%s] %s', $response->get_error_code(), $response->get_error_message() ) );
- return false;
- }
-
- if ( !$response ) {
- $this->error = new IXR_Error( -10520, 'Jetpack: Unknown Error' );
- return false;
- }
-
- if ( 200 != wp_remote_retrieve_response_code( $response ) ) {
- $this->error = new IXR_Error( -32300, 'transport error - HTTP status code was not 200' );
- return false;
- }
-
- $content = wp_remote_retrieve_body( $response );
-
- // Now parse what we've got back
- $this->message = new IXR_Message( $content );
- if ( !$this->message->parse() ) {
- // XML error
- $this->error = new IXR_Error( -32700, 'parse error. not well formed' );
- return false;
- }
-
- // Is the message a fault?
- if ( $this->message->messageType == 'fault' ) {
- $this->error = new IXR_Error( $this->message->faultCode, $this->message->faultString );
- return false;
- }
-
- // Message must be OK
- return true;
- }
-
- function get_jetpack_error( $fault_code = null, $fault_string = null ) {
- if ( is_null( $fault_code ) ) {
- $fault_code = $this->error->code;
- }
-
- if ( is_null( $fault_string ) ) {
- $fault_string = $this->error->message;
- }
-
- if ( preg_match( '#jetpack:\s+\[(\w+)\]\s*(.*)?$#i', $fault_string, $match ) ) {
- $code = $match[1];
- $message = $match[2];
- $status = $fault_code;
- return new Jetpack_Error( $code, $message, $status );
- }
-
- return new Jetpack_Error( "IXR_{$fault_code}", $fault_string );
- }
-}
-
-/**
- * IXR_ClientMulticall
- *
- * @package IXR
- * @since 1.5
- */
-class Jetpack_IXR_ClientMulticall extends Jetpack_IXR_Client {
- public $calls = array();
-
- function __construct( $args = array(), $path = false, $port = 80, $timeout = 15 ) {
- parent::__construct( $args, $path, $port, $timeout );
- }
-
- function addCall() {
- $args = func_get_args();
- $methodName = array_shift( $args );
- $struct = array(
- 'methodName' => $methodName,
- 'params' => $args
- );
- $this->calls[] = $struct;
- }
-
- function query() {
- usort( $this->calls, array( $this, 'sort_calls' ) );
-
- // Prepare multicall, then call the parent::query() method
- return parent::query( 'system.multicall', $this->calls );
- }
-
- // Make sure syncs are always done first
- function sort_calls( $a, $b ) {
- if ( 'jetpack.syncContent' == $a['methodName'] ) {
- return -1;
- }
-
- if ( 'jetpack.syncContent' == $b['methodName'] ) {
- return 1;
- }
-
- return 0;
- }
-}
diff --git a/plugins/jetpack/class.jetpack-jitm.php b/plugins/jetpack/class.jetpack-jitm.php
deleted file mode 100644
index 6746471e..00000000
--- a/plugins/jetpack/class.jetpack-jitm.php
+++ /dev/null
@@ -1,408 +0,0 @@
-<?php
-
-/**
- * Jetpack just in time messaging through out the admin
- *
- * @since 3.7.0
- */
-class Jetpack_JITM {
-
- /**
- * @var Jetpack_JITM
- **/
- private static $instance = null;
-
- /**
- * Initializes the class, or returns the singleton
- *
- * @return Jetpack_JITM | false
- */
- static function init() {
- /**
- * Filter to turn off all just in time messages
- *
- * @since 3.7.0
- * @since 5.4.0 Correct docblock to reflect default arg value
- *
- * @param bool false Whether to show just in time messages.
- */
- if ( ! apply_filters( 'jetpack_just_in_time_msgs', false ) ) {
- return false;
- }
-
- if ( is_null( self::$instance ) ) {
- self::$instance = new Jetpack_JITM;
- }
-
- return self::$instance;
- }
-
- /**
- * Jetpack_JITM constructor.
- */
- private function __construct() {
- if ( ! Jetpack::is_active() || Jetpack::is_development_mode() ) {
- return;
- }
- add_action( 'current_screen', array( $this, 'prepare_jitms' ) );
- }
-
- /**
- * Get's the Jetpack emblem
- *
- * @return string The Jetpack emblem
- */
- function get_emblem() {
- return '<div class="jp-emblem">' . Jetpack::get_jp_emblem() . '</div>';
- }
-
- /**
- * Prepare actions according to screen and post type.
- *
- * @since 3.8.2
- *
- * @uses Jetpack_Autoupdate::get_possible_failures()
- *
- * @param object $screen
- */
- function prepare_jitms( $screen ) {
- if ( ! in_array( $screen->id, array(
- 'jetpack_page_stats',
- 'jetpack_page_akismet-key-config',
- 'admin_page_jetpack_modules'
- ) ) ) {
- add_action( 'admin_enqueue_scripts', array( $this, 'jitm_enqueue_files' ) );
- add_action( 'admin_notices', array( $this, 'ajax_message' ) );
- add_action( 'edit_form_top', array( $this, 'ajax_message' ) );
- }
- }
-
- /**
- * A special filter for WooCommerce, to set a message based on local state.
- *
- * @param $message string The current message
- *
- * @return array The new message
- */
- static function jitm_woocommerce_services_msg( $content ) {
- if ( ! function_exists( 'wc_get_base_location' ) ) {
- return $content;
- }
-
- $base_location = wc_get_base_location();
-
- switch ( $base_location['country'] ) {
- case 'US':
- $content->message = esc_html__( 'New free service: Show USPS shipping rates on your store! Added bonus: print shipping labels without leaving WooCommerce.', 'jetpack' );
- break;
- case 'CA':
- $content->message = esc_html__( 'New free service: Show Canada Post shipping rates on your store!', 'jetpack' );
- break;
- default:
- $content->message = '';
- }
-
- return $content;
- }
-
- /**
- * A special filter for WooCommerce Call To Action button
- *
- * @param $CTA string The existing CTA
- *
- * @return string The new CTA
- */
- static function jitm_jetpack_woo_services_install( $CTA ) {
- return wp_nonce_url( add_query_arg( array(
- 'wc-services-action' => 'install'
- ), admin_url( 'admin.php?page=wc-settings' ) ), 'wc-services-install' );
- }
-
- /**
- * A special filter for WooCommerce Call To Action button
- *
- * @param $CTA string The existing CTA
- *
- * @return string The new CTA
- */
- static function jitm_jetpack_woo_services_activate( $CTA ) {
- return wp_nonce_url( add_query_arg( array(
- 'wc-services-action' => 'activate'
- ), admin_url( 'admin.php?page=wc-settings' ) ), 'wc-services-install' );
- }
-
- /**
- * Injects the dom to show a JITM inside of
- */
- function ajax_message() {
- $message_path = $this->get_message_path();
- $query_string = _http_build_query( $_GET, '', ',' );
- $current_screen = wp_unslash( $_SERVER['REQUEST_URI'] );
- ?>
- <div class="jetpack-jitm-message"
- data-nonce="<?php echo wp_create_nonce( 'wp_rest' ) ?>"
- data-message-path="<?php echo esc_attr( $message_path ) ?>"
- data-query="<?php echo urlencode_deep( $query_string ) ?>"
- data-redirect="<?php echo urlencode_deep( $current_screen ) ?>"
- ></div>
- <?php
- }
-
- /**
- * Get's the current message path for display of a JITM
- *
- * @return string The message path
- */
- function get_message_path() {
- $screen = get_current_screen();
-
- return 'wp:' . $screen->id . ':' . current_filter();
- }
-
- /**
- * Function to enqueue jitm css and js
- */
- function jitm_enqueue_files() {
- $min = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
- wp_register_style(
- 'jetpack-jitm-css',
- plugins_url( "css/jetpack-admin-jitm{$min}.css", JETPACK__PLUGIN_FILE ),
- false,
- JETPACK__VERSION .
- '-201243242'
- );
- wp_style_add_data( 'jetpack-jitm-css', 'rtl', 'replace' );
- wp_style_add_data( 'jetpack-jitm-css', 'suffix', $min );
- wp_enqueue_style( 'jetpack-jitm-css' );
-
- wp_enqueue_script(
- 'jetpack-jitm-new',
- Jetpack::get_file_url_for_environment( '_inc/build/jetpack-jitm.min.js', '_inc/jetpack-jitm.js' ),
- array( 'jquery' ),
- JETPACK__VERSION,
- true
- );
- wp_localize_script( 'jetpack-jitm-new', 'jitm_config', array(
- 'api_root' => esc_url_raw( rest_url() ),
- 'activate_module_text' => esc_html__( 'Activate', 'jetpack' ),
- 'activated_module_text' => esc_html__( 'Activated', 'jetpack' ),
- 'activating_module_text' => esc_html__( 'Activating', 'jetpack' ),
- ) );
- }
-
- /**
- * Dismisses a JITM feature class so that it will no longer be shown
- *
- * @param $id string The id of the JITM that was dismissed
- * @param $feature_class string The feature class of the JITM that was dismissed
- *
- * @return bool Always true
- */
- function dismiss( $id, $feature_class ) {
- JetpackTracking::record_user_event( 'jitm_dismiss_client', array(
- 'jitm_id' => $id,
- 'feature_class' => $feature_class,
- ) );
-
-
- $hide_jitm = Jetpack_Options::get_option( 'hide_jitm' );
- if ( ! is_array( $hide_jitm ) ) {
- $hide_jitm = array();
- }
-
- if ( isset( $hide_jitm[ $feature_class ] ) ) {
- if ( ! is_array( $hide_jitm[ $feature_class ] ) ) {
- $hide_jitm[ $feature_class ] = array( 'last_dismissal' => 0, 'number' => 0 );
- }
- } else {
- $hide_jitm[ $feature_class ] = array( 'last_dismissal' => 0, 'number' => 0 );
- }
-
- $number = $hide_jitm[ $feature_class ]['number'];
-
- $hide_jitm[ $feature_class ] = array( 'last_dismissal' => time(), 'number' => $number + 1 );
-
- Jetpack_Options::update_option( 'hide_jitm', $hide_jitm );
-
- return true;
- }
-
- /**
- * Asks the wpcom API for the current message to display keyed on query string and message path
- *
- * @param $message_path string The message path to ask for
- * @param $query string The query string originally from the front end
- *
- * @return array The JITM's to show, or an empty array if there is nothing to show
- */
- function get_messages( $message_path, $query ) {
- // custom filters go here
- add_filter( 'jitm_woocommerce_services_msg', array( 'Jetpack_JITM', 'jitm_woocommerce_services_msg' ) );
- add_filter( 'jitm_jetpack_woo_services_install', array( 'Jetpack_JITM', 'jitm_jetpack_woo_services_install' ) );
- add_filter( 'jitm_jetpack_woo_services_activate', array(
- 'Jetpack_JITM',
- 'jitm_jetpack_woo_services_activate'
- ) );
-
- $user = wp_get_current_user();
-
- // unauthenticated or invalid requests just bail
- if ( ! $user ) {
- return array();
- }
-
- require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-client.php' );
-
- $site_id = Jetpack_Options::get_option( 'id' );
-
- // build our jitm request
- $path = add_query_arg( array(
- 'external_user_id' => urlencode_deep( $user->ID ),
- 'query_string' => urlencode_deep( $query ),
- 'mobile_browser' => jetpack_is_mobile( 'smart' ) ? 1 : 0,
- ), sprintf( '/sites/%d/jitm/%s', $site_id, $message_path ) );
-
- // attempt to get from cache
- $envelopes = get_transient( 'jetpack_jitm_' . substr( md5( $path ), 0, 31 ) );
-
- // if something is in the cache and it was put in the cache after the last sync we care about, use it
- $use_cache = false;
-
- /** This filter is documented in class.jetpack.php */
- if ( apply_filters( 'jetpack_just_in_time_msg_cache', false ) ) {
- $use_cache = true;
- }
-
- if ( $use_cache ) {
- $last_sync = (int) get_transient( 'jetpack_last_plugin_sync' );
- $from_cache = $envelopes && $last_sync > 0 && $last_sync < $envelopes['last_response_time'];
- } else {
- $from_cache = false;
- }
-
- // otherwise, ask again
- if ( ! $from_cache ) {
- $wpcom_response = Jetpack_Client::wpcom_json_api_request_as_blog(
- $path,
- '2',
- array(
- 'user_id' => $user->ID,
- 'user_roles' => implode( ',', $user->roles ),
- ),
- null,
- 'wpcom'
- );
-
- // silently fail...might be helpful to track it?
- if ( is_wp_error( $wpcom_response ) ) {
- return array();
- }
-
- $envelopes = json_decode( $wpcom_response['body'] );
-
- if ( ! is_array( $envelopes ) ) {
- return array();
- }
-
- $expiration = isset( $envelopes[0] ) ? $envelopes[0]->ttl : 300;
-
- // do not cache if expiration is 0 or we're not using the cache
- if ( 0 != $expiration && $use_cache ) {
- $envelopes['last_response_time'] = time();
-
- set_transient( 'jetpack_jitm_' . substr( md5( $path ), 0, 31 ), $envelopes, $expiration );
- }
- }
-
- $hidden_jitms = Jetpack_Options::get_option( 'hide_jitm' );
- unset( $envelopes['last_response_time'] );
-
- /**
- * Allow adding your own custom JITMs after a set of JITMs has been received.
- *
- * @since 6.9.0
- *
- * @param array $envelopes array of existing JITMs.
- */
- $envelopes = apply_filters( 'jetpack_jitm_received_envelopes', $envelopes );
-
- foreach ( $envelopes as $idx => &$envelope ) {
-
- $dismissed_feature = isset( $hidden_jitms[ $envelope->feature_class ] ) && is_array( $hidden_jitms[ $envelope->feature_class ] ) ? $hidden_jitms[ $envelope->feature_class ] : null;
-
- // if the this feature class has been dismissed and the request has not passed the ttl, skip it as it's been dismissed
- if ( is_array( $dismissed_feature ) && ( time() - $dismissed_feature['last_dismissal'] < $envelope->expires || $dismissed_feature['number'] >= $envelope->max_dismissal ) ) {
- unset( $envelopes[ $idx ] );
- continue;
- }
-
- JetpackTracking::record_user_event( 'jitm_view_client', array(
- 'jitm_id' => $envelope->id,
- ) );
-
- $normalized_site_url = Jetpack::build_raw_urls( get_home_url() );
-
- $url_params = array(
- 'source' => "jitm-$envelope->id",
- 'site' => $normalized_site_url,
- 'u' => $user->ID,
- );
-
- if ( ! class_exists( 'Jetpack_Affiliate' ) ) {
- require_once JETPACK__PLUGIN_DIR . 'class.jetpack-affiliate.php';
- }
- // Get affiliate code and add it to the array of URL parameters
- if ( '' !== ( $aff = Jetpack_Affiliate::init()->get_affiliate_code() ) ) {
- $url_params['aff'] = $aff;
- }
-
- $envelope->url = add_query_arg( $url_params, 'https://jetpack.com/redirect/' );
-
- $envelope->jitm_stats_url = Jetpack::build_stats_url( array( 'x_jetpack-jitm' => $envelope->id ) );
-
- if ( $envelope->CTA->hook ) {
- $envelope->url = apply_filters( 'jitm_' . $envelope->CTA->hook, $envelope->url );
- unset( $envelope->CTA->hook );
- }
-
- if ( isset( $envelope->content->hook ) ) {
- $envelope->content = apply_filters( 'jitm_' . $envelope->content->hook, $envelope->content );
- unset( $envelope->content->hook );
- }
-
- // no point in showing an empty message
- if ( empty( $envelope->content->message ) ) {
- unset( $envelopes[ $idx ] );
- continue;
- }
-
- switch ( $envelope->content->icon ) {
- case 'jetpack':
- $envelope->content->icon = '<div class="jp-emblem">' . Jetpack::get_jp_emblem() . '</div>';
- break;
- case 'woocommerce':
- $envelope->content->icon = '<div class="jp-emblem"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 168 100" xml:space="preserve" enable-background="new 0 0 168 100" width="50" height="30"><style type="text/css">
- .st0{clip-path:url(#SVGID_2_);enable-background:new ;}
- .st1{clip-path:url(#SVGID_4_);}
- .st2{clip-path:url(#SVGID_6_);}
- .st3{clip-path:url(#SVGID_8_);fill:#8F567F;}
- .st4{clip-path:url(#SVGID_10_);fill:#FFFFFE;}
- .st5{clip-path:url(#SVGID_12_);fill:#FFFFFE;}
- .st6{clip-path:url(#SVGID_14_);fill:#FFFFFE;}
- </style><g><defs><polygon id="SVGID_1_" points="83.8 100 0 100 0 0.3 83.8 0.3 167.6 0.3 167.6 100 "/></defs><clipPath id="SVGID_2_"><use xlink:href="#SVGID_1_" overflow="visible"/></clipPath><g class="st0"><g><defs><rect id="SVGID_3_" width="168" height="100"/></defs><clipPath id="SVGID_4_"><use xlink:href="#SVGID_3_" overflow="visible"/></clipPath><g class="st1"><defs><path id="SVGID_5_" d="M15.6 0.3H152c8.6 0 15.6 7 15.6 15.6v52c0 8.6-7 15.6-15.6 15.6h-48.9l6.7 16.4L80.2 83.6H15.6C7 83.6 0 76.6 0 67.9v-52C0 7.3 7 0.3 15.6 0.3"/></defs><clipPath id="SVGID_6_"><use xlink:href="#SVGID_5_" overflow="visible"/></clipPath><g class="st2"><defs><rect id="SVGID_7_" width="168" height="100"/></defs><clipPath id="SVGID_8_"><use xlink:href="#SVGID_7_" overflow="visible"/></clipPath><rect x="-10" y="-9.7" class="st3" width="187.6" height="119.7"/></g></g></g></g></g><g><defs><path id="SVGID_9_" d="M8.4 14.5c1-1.3 2.4-2 4.3-2.1 3.5-0.2 5.5 1.4 6 4.9 2.1 14.3 4.4 26.4 6.9 36.4l15-28.6c1.4-2.6 3.1-3.9 5.2-4.1 3-0.2 4.9 1.7 5.6 5.7 1.7 9.1 3.9 16.9 6.5 23.4 1.8-17.4 4.8-30 9-37.7 1-1.9 2.5-2.9 4.5-3 1.6-0.1 3 0.3 4.3 1.4 1.3 1 2 2.3 2.1 3.9 0.1 1.2-0.1 2.3-0.7 3.3 -2.7 5-4.9 13.2-6.6 24.7 -1.7 11.1-2.3 19.8-1.9 26.1 0.1 1.7-0.1 3.2-0.8 4.5 -0.8 1.5-2 2.4-3.7 2.5 -1.8 0.1-3.6-0.7-5.4-2.5C52.4 66.7 47.4 57 43.7 44.1c-4.4 8.8-7.7 15.3-9.9 19.7 -4 7.7-7.5 11.7-10.3 11.9 -1.9 0.1-3.5-1.4-4.8-4.7 -3.5-9-7.3-26.3-11.3-52C7.1 17.3 7.5 15.8 8.4 14.5"/></defs><clipPath id="SVGID_10_"><use xlink:href="#SVGID_9_" overflow="visible"/></clipPath><rect x="-2.7" y="-0.6" class="st4" width="90.6" height="86.4"/></g><g><defs><path id="SVGID_11_" d="M155.6 25.2c-2.5-4.3-6.1-6.9-11-7.9 -1.3-0.3-2.5-0.4-3.7-0.4 -6.6 0-11.9 3.4-16.1 10.2 -3.6 5.8-5.3 12.3-5.3 19.3 0 5.3 1.1 9.8 3.3 13.6 2.5 4.3 6.1 6.9 11 7.9 1.3 0.3 2.5 0.4 3.7 0.4 6.6 0 12-3.4 16.1-10.2 3.6-5.9 5.3-12.4 5.3-19.4C159 33.4 157.9 28.9 155.6 25.2zM147 44.2c-0.9 4.5-2.7 7.9-5.2 10.1 -2 1.8-3.9 2.5-5.5 2.2 -1.7-0.3-3-1.8-4-4.4 -0.8-2.1-1.2-4.2-1.2-6.2 0-1.7 0.2-3.4 0.5-5 0.6-2.8 1.8-5.5 3.6-8.1 2.3-3.3 4.7-4.8 7.1-4.2 1.7 0.3 3 1.8 4 4.4 0.8 2.1 1.2 4.2 1.2 6.2C147.5 40.9 147.3 42.6 147 44.2z"/></defs><clipPath id="SVGID_12_"><use xlink:href="#SVGID_11_" overflow="visible"/></clipPath><rect x="109.6" y="6.9" class="st5" width="59.4" height="71.4"/></g><g><defs><path id="SVGID_13_" d="M112.7 25.2c-2.5-4.3-6.1-6.9-11-7.9 -1.3-0.3-2.5-0.4-3.7-0.4 -6.6 0-11.9 3.4-16.1 10.2 -3.5 5.8-5.3 12.3-5.3 19.3 0 5.3 1.1 9.8 3.3 13.6 2.5 4.3 6.1 6.9 11 7.9 1.3 0.3 2.5 0.4 3.7 0.4 6.6 0 12-3.4 16.1-10.2 3.5-5.9 5.3-12.4 5.3-19.4C116 33.4 114.9 28.9 112.7 25.2zM104.1 44.2c-0.9 4.5-2.7 7.9-5.2 10.1 -2 1.8-3.9 2.5-5.5 2.2 -1.7-0.3-3-1.8-4-4.4 -0.8-2.1-1.2-4.2-1.2-6.2 0-1.7 0.2-3.4 0.5-5 0.6-2.8 1.8-5.5 3.6-8.1 2.3-3.3 4.7-4.8 7.1-4.2 1.7 0.3 3 1.8 4 4.4 0.8 2.1 1.2 4.2 1.2 6.2C104.6 40.9 104.4 42.6 104.1 44.2z"/></defs><clipPath id="SVGID_14_"><use xlink:href="#SVGID_13_" overflow="visible"/></clipPath><rect x="66.7" y="6.9" class="st6" width="59.4" height="71.4"/></g></svg></div>';
- break;
- default:
- $envelope->content->icon = '';
- break;
- }
-
- $jetpack = Jetpack::init();
- $jetpack->stat( 'jitm', $envelope->id . '-viewed-' . JETPACK__VERSION );
- $jetpack->do_stats( 'server_side' );
- }
-
- return $envelopes;
- }
-}
-
-add_action( 'init', array( 'Jetpack_JITM', 'init' ) );
diff --git a/plugins/jetpack/class.jetpack-modules-list-table.php b/plugins/jetpack/class.jetpack-modules-list-table.php
deleted file mode 100644
index 16c11ab9..00000000
--- a/plugins/jetpack/class.jetpack-modules-list-table.php
+++ /dev/null
@@ -1,345 +0,0 @@
-<?php
-
-if ( ! class_exists( 'WP_List_Table' ) )
- require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
-
-class Jetpack_Modules_List_Table extends WP_List_Table {
-
- function __construct() {
- parent::__construct();
-
- Jetpack::init();
-
- if ( $this->compat_fields && is_array( $this->compat_fields ) ) {
- array_push( $this->compat_fields, 'all_items' );
- }
-
- $this->items = $this->all_items = Jetpack_Admin::init()->get_modules();
- $this->items = $this->filter_displayed_table_items( $this->items );
- /**
- * Filters the list of modules available to be displayed in the Jetpack Settings screen.
- *
- * @since 3.0.0
- *
- * @param array $this->items Array of Jetpack modules.
- */
- $this->items = apply_filters( 'jetpack_modules_list_table_items', $this->items );
- $this->_column_headers = array( $this->get_columns(), array(), array(), 'name' );
- $modal_info = isset( $_GET['info'] ) ? $_GET['info'] : false;
-
- wp_register_script(
- 'models.jetpack-modules',
- Jetpack::get_file_url_for_environment(
- '_inc/build/jetpack-modules.models.min.js',
- '_inc/jetpack-modules.models.js'
- ),
- array( 'backbone', 'underscore' ),
- JETPACK__VERSION
- );
- wp_register_script(
- 'views.jetpack-modules',
- Jetpack::get_file_url_for_environment(
- '_inc/build/jetpack-modules.views.min.js',
- '_inc/jetpack-modules.views.js'
- ),
- array( 'backbone', 'underscore', 'wp-util' ),
- JETPACK__VERSION
- );
- wp_register_script(
- 'jetpack-modules-list-table',
- Jetpack::get_file_url_for_environment(
- '_inc/build/jetpack-modules.min.js',
- '_inc/jetpack-modules.js'
- ),
- array(
- 'views.jetpack-modules',
- 'models.jetpack-modules',
- 'jquery',
- ),
- JETPACK__VERSION,
- true
- );
-
- wp_localize_script( 'jetpack-modules-list-table', 'jetpackModulesData', array(
- 'modules' => Jetpack::get_translated_modules( $this->all_items ),
- 'i18n' => array(
- 'search_placeholder' => __( 'Search Modules…', 'jetpack' ),
- ),
- 'modalinfo' => $this->module_info_check( $modal_info, $this->all_items ),
- 'nonces' => array(
- 'bulk' => wp_create_nonce( 'bulk-jetpack_page_jetpack_modules' ),
- ),
- ) );
-
- wp_enqueue_script( 'jetpack-modules-list-table' );
-
- /**
- * Filters the js_templates callback value.
- *
- * @since 3.6.0
- *
- * @param array array( $this, 'js_templates' ) js_templates callback.
- */
- add_action( 'admin_footer', apply_filters( 'jetpack_modules_list_table_js_template_callback', array( $this, 'js_templates' ) ), 9 );
- }
-
- function js_templates() {
- ?>
- <script type="text/html" id="tmpl-Jetpack_Modules_List_Table_Template">
- <# var i = 0;
- if ( data.items.length ) {
- _.each( data.items, function( item, key, list ) {
- if ( item === undefined ) return;
- if ( 'manage' == item.module && item.activated ) return; #>
- <tr class="jetpack-module <# if ( ++i % 2 ) { #> alternate<# } #><# if ( item.activated ) { #> active<# } #><# if ( ! item.available ) { #> unavailable<# } #>" id="{{{ item.module }}}">
- <th scope="row" class="check-column">
- <# if ( 'videopress' !== item.module ) { #>
- <input type="checkbox" name="modules[]" value="{{{ item.module }}}" />
- <# } #>
- </th>
- <td class='name column-name'>
- <span class='info'><a href="{{{item.learn_more_button}}}" target="blank">{{{ item.name }}}</a></span>
- <div class="row-actions">
- <# if ( item.configurable ) { #>
- <span class='configure'>{{{ item.configurable }}}</span>
- <# } #>
- <# if ( item.activated && 'vaultpress' !== item.module && item.available && 'videopress' !== item.module ) { #>
- <span class='delete'><a href="<?php echo admin_url( 'admin.php' ); ?>?page=jetpack&#038;action=deactivate&#038;module={{{ item.module }}}&#038;_wpnonce={{{ item.deactivate_nonce }}}"><?php _e( 'Deactivate', 'jetpack' ); ?></a></span>
- <# } else if ( item.available && 'videopress' !== item.module ) { #>
- <span class='activate'><a href="<?php echo admin_url( 'admin.php' ); ?>?page=jetpack&#038;action=activate&#038;module={{{ item.module }}}&#038;_wpnonce={{{ item.activate_nonce }}}"><?php _e( 'Activate', 'jetpack' ); ?></a></span>
- <# } #>
- </div>
- </td>
- </tr>
- <#
- });
- } else {
- #>
- <tr class="no-modules-found">
- <td colspan="2"><?php esc_html_e( 'No Modules Found' , 'jetpack' ); ?></td>
- </tr>
- <#
- }
- #>
- </script>
- <?php
- }
-
- function get_views() {
- $modules = Jetpack_Admin::init()->get_modules();
- $array_of_module_tags = wp_list_pluck( $modules, 'module_tags' );
- $module_tags = call_user_func_array( 'array_merge', $array_of_module_tags );
- $module_tags_unique = array_count_values( $module_tags );
- ksort( $module_tags_unique );
-
- $format = '<a href="%3$s"%4$s data-title="%1$s">%1$s <span class="count">(%2$s)</span></a>';
- $title = __( 'All', 'jetpack' );
- $count = count( $modules );
- $url = esc_url( remove_query_arg( 'module_tag' ) );
- $current = empty( $_GET['module_tag'] ) ? ' class="current all"' : ' class="all"';
- $views = array(
- 'all' => sprintf( $format, $title, $count, $url, $current ),
- );
- foreach ( $module_tags_unique as $title => $count ) {
- if ( 'Jumpstart' == $title ) {
- continue;
- }
- $key = sanitize_title( $title );
- if ( 'centralized-management' === $key && Jetpack::is_module_active( 'manage' ) ) {
- continue;
- }
- $display_title = esc_html( wptexturize( $title ) );
- $url = esc_url( add_query_arg( 'module_tag', urlencode( $title ) ) );
- $current = '';
- if ( ! empty( $_GET['module_tag'] ) && $title == $_GET['module_tag'] )
- $current = ' class="current"';
- $views[ $key ] = sprintf( $format, $display_title, $count, $url, $current );
- }
- return $views;
- }
-
- function views() {
- $views = $this->get_views();
-
- echo "<ul class='subsubsub'>\n";
- foreach ( $views as $class => $view ) {
- $views[ $class ] = "\t<li class='$class'>$view</li>";
- }
- echo implode( "\n", $views ) . "\n";
- echo "</ul>";
- }
-
- function filter_displayed_table_items( $modules ) {
- return array_filter( $modules, array( $this, 'is_module_displayed' ) );
- }
-
- static function is_module_displayed( $module ) {
- // Handle module tag based filtering.
- if ( ! empty( $_REQUEST['module_tag'] ) ) {
- $module_tag = sanitize_text_field( $_REQUEST['module_tag'] );
- if ( ! in_array( $module_tag, $module['module_tags'] ) )
- return false;
- }
-
- // If nothing rejected it, include it!
- return true;
- }
-
- static function sort_requires_connection_last( $module1, $module2 ) {
- if ( $module1['requires_connection'] == $module2['requires_connection'] )
- return 0;
- if ( $module1['requires_connection'] )
- return 1;
- if ( $module2['requires_connection'] )
- return -1;
-
- return 0;
- }
-
- function get_columns() {
- $columns = array(
- 'cb' => '<input type="checkbox" />',
- 'name' => __( 'Name', 'jetpack' ),
- );
- return $columns;
- }
-
- function get_bulk_actions() {
- $actions = array(
- 'bulk-activate' => __( 'Activate', 'jetpack' ),
- 'bulk-deactivate' => __( 'Deactivate', 'jetpack' ),
- );
- return $actions;
- }
-
- function single_row( $item ) {
- static $i = 0;
- $row_class = ( ++$i % 2 ) ? ' alternate' : '';
-
- if ( ! empty( $item['activated'] ) )
- $row_class .= ' active';
-
- if ( ! Jetpack_Admin::is_module_available( $item ) ) {
- $row_class .= ' unavailable';
- }
-
- echo '<tr class="jetpack-module' . esc_attr( $row_class ) . '" id="' . esc_attr( $item['module'] ) . '">';
- $this->single_row_columns( $item );
- echo '</tr>';
- }
-
- function get_table_classes() {
- return array( 'table', 'table-bordered', 'wp-list-table', 'widefat', 'fixed', 'jetpack-modules' );
- }
-
- function column_cb( $item ) {
- if ( ! Jetpack_Admin::is_module_available( $item ) )
- return '';
-
- return sprintf( '<input type="checkbox" name="modules[]" value="%s" />', $item['module'] );
- }
-
- function column_icon( $item ) {
- $badge_text = $free_text = '';
- ob_start();
- ?>
- <a href="#TB_inline?width=600&height=550&inlineId=more-info-module-settings-modal" class="thickbox">
- <div class="module-image">
- <p><span class="module-image-badge"><?php echo $badge_text; ?></span><span class="module-image-free" style="display: none"><?php echo $free_text; ?></span></p>
- </div>
- </a>
- <?php
- return ob_get_clean();
-
- }
-
- function column_name( $item ) {
- $actions = array(
- 'info' => sprintf( '<a href="%s" target="blank">%s</a>', esc_url( $item['learn_more_button'] ), esc_html__( 'Feature Info', 'jetpack' ) ),
- );
-
- if ( ! empty( $item['configurable'] ) ) {
- $actions['configure'] = $item['configurable'];
- }
-
- if ( empty( $item['activated'] ) && Jetpack_Admin::is_module_available( $item ) ) {
- $url = wp_nonce_url(
- Jetpack::admin_url( array(
- 'page' => 'jetpack',
- 'action' => 'activate',
- 'module' => $item['module'],
- ) ),
- 'jetpack_activate-' . $item['module']
- );
- $actions['activate'] = sprintf( '<a href="%s">%s</a>', esc_url( $url ), esc_html__( 'Activate', 'jetpack' ) );
- } elseif ( ! empty( $item['activated'] ) ) {
- $url = wp_nonce_url(
- Jetpack::admin_url( array(
- 'page' => 'jetpack',
- 'action' => 'deactivate',
- 'module' => $item['module'],
- ) ),
- 'jetpack_deactivate-' . $item['module']
- );
- $actions['delete'] = sprintf( '<a href="%s">%s</a>', esc_url( $url ), esc_html__( 'Deactivate', 'jetpack' ) );
- }
-
- return $this->row_actions( $actions ) . wptexturize( $item['name'] );
- }
-
- function column_description( $item ) {
- ob_start();
- /** This action is documented in class.jetpack-admin.php */
- echo apply_filters( 'jetpack_short_module_description', $item['description'], $item['module'] );
- /** This action is documented in class.jetpack-admin.php */
- do_action( 'jetpack_learn_more_button_' . $item['module'] );
- echo '<div id="more-info-' . $item['module'] . '" class="more-info">';
- /** This action is documented in class.jetpack-admin.php */
- do_action( 'jetpack_module_more_info_' . $item['module'] );
- echo '</div>';
- return ob_get_clean();
- }
-
- function column_module_tags( $item ) {
- $module_tags = array();
- foreach( $item['module_tags'] as $module_tag ) {
- $module_tags[] = sprintf( '<a href="%3$s" data-title="%2$s">%1$s</a>', esc_html( $module_tag ), esc_attr( $module_tag ), esc_url( add_query_arg( 'module_tag', urlencode( $module_tag ) ) ) );
- }
- return implode( ', ', $module_tags );
- }
-
- function column_default( $item, $column_name ) {
- switch ( $column_name ) {
- case 'icon':
- case 'name':
- case 'description':
- break;
- default:
- return print_r( $item, true );
- }
- }
-
- //Check if the info parameter provided in the URL corresponds to an actual module
- function module_info_check( $info = false, $modules ) {
- if ( false == $info ) {
- return false;
- } else if ( array_key_exists( $info, $modules ) ) {
- return $info;
- }
- }
-
- /**
- * Core switched their `display_tablenav()` method to protected, so we can't access it directly.
- * Instead, let's include an access function to make it doable without errors!
- *
- * @see https://github.com/WordPress/WordPress/commit/d28f6344de97616de8ece543ed290c4ba2383622
- *
- * @param string $which
- *
- * @return mixed
- */
- function unprotected_display_tablenav( $which = 'top' ) {
- return $this->display_tablenav( $which );
- }
-
-}
diff --git a/plugins/jetpack/class.jetpack-network-sites-list-table.php b/plugins/jetpack/class.jetpack-network-sites-list-table.php
deleted file mode 100644
index 168b52cd..00000000
--- a/plugins/jetpack/class.jetpack-network-sites-list-table.php
+++ /dev/null
@@ -1,148 +0,0 @@
-<?php
-
-if( ! class_exists( 'WP_List_Table' ) ) {
- require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
-}
-
-class Jetpack_Network_Sites_List_Table extends WP_List_Table {
-
-
- public function get_columns() {
- // site name, status, username connected under
- $columns = array(
- 'cb' => '<input type="checkbox" />',
- 'blogname' => __( 'Site Name', 'jetpack' ),
- 'blog_path' => __( 'Path', 'jetpack' ),
- 'connected' => __( 'Connected', 'jetpack' ),
- );
-
- return $columns;
- }
-
- public function prepare_items() {
- $jpms = Jetpack_Network::init();
-
- // Deal with bulk actions if any were requested by the user
- $this->process_bulk_action();
-
- $sites = get_sites( array(
- 'site__not_in' => array( get_current_blog_id() ),
- 'archived' => false,
- 'number' => 0,
- ) );
-
- // Setup pagination
- $per_page = 25;
- $current_page = $this->get_pagenum();
- $total_items = count( $sites );
- $sites = array_slice( $sites, ( ( $current_page-1 ) * $per_page ), $per_page );
- $this->set_pagination_args( array(
- 'total_items' => $total_items,
- 'per_page' => $per_page
- ) );
-
- $columns = $this->get_columns();
- $hidden = array();
- $sortable = array();
- $this->_column_headers = array( $columns, $hidden, $sortable );
- $this->items = $sites;
- }
-
- public function column_blogname( $item ) {
- // http://jpms/wp-admin/network/site-info.php?id=1
- switch_to_blog( $item->blog_id );
- $jp_url = admin_url( 'admin.php?page=jetpack' );
- restore_current_blog();
-
- $actions = array(
- 'edit' => '<a href="' . esc_url( network_admin_url( 'site-info.php?id=' . $item->blog_id ) ) . '">' . esc_html__( 'Edit', 'jetpack' ) . '</a>',
- 'dashboard' => '<a href="' . esc_url( get_admin_url( $item->blog_id, '', 'admin' ) ) . '">' . esc_html__( 'Dashboard', 'jetpack' ) . '</a>',
- 'view' => '<a href="' . esc_url( get_site_url( $item->blog_id, '', 'admin' ) ) . '">' . esc_html__( 'View', 'jetpack' ) . '</a>',
- 'jetpack-' . $item->blog_id => '<a href="' . esc_url( $jp_url ) . '">Jetpack</a>',
- );
-
- return sprintf('%1$s %2$s', '<strong>' . get_blog_option( $item->blog_id, 'blogname' ) . '</strong>', $this->row_actions($actions) );
- }
-
- public function column_blog_path( $item ) {
- return
- '<a href="' .
- get_site_url( $item->blog_id, '', 'admin' ) .
- '">' .
- str_replace( array( 'http://', 'https://' ), '', get_site_url( $item->blog_id, '', 'admin' ) ) .
- '</a>';
- }
-
- public function column_connected( $item ) {
- $jpms = Jetpack_Network::init();
- $jp = Jetpack::init();
-
- switch_to_blog( $item->blog_id );
-
- if ( ! is_plugin_active( 'jetpack/jetpack.php' ) ) {
- $title = __( 'Jetpack is not active on this site.', 'jetpack' );
- $action = array(
- 'manage-plugins' => '<a href="' . get_admin_url( $item->blog_id, 'plugins.php', 'admin' ) . '">' . __( 'Manage Plugins', 'jetpack' ) . '</a>',
- );
- restore_current_blog();
- return sprintf( '%1$s %2$s', $title, $this->row_actions( $action ) );
- }
-
- if( $jp->is_active() ) {
- // Build url for disconnecting
- $url = $jpms->get_url( array(
- 'name' => 'subsitedisconnect',
- 'site_id' => $item->blog_id,
-
- ) );
- restore_current_blog();
- return '<a href="' . esc_url( $url ) . '">' . esc_html__( 'Disconnect', 'jetpack' ) . '</a>';
- }
- restore_current_blog();
-
- // Build URL for connecting
- $url = $jpms->get_url( array(
- 'name' => 'subsiteregister',
- 'site_id' => $item->blog_id,
- ) );
- return '<a href="' . esc_url( $url ) . '">' . esc_html__( 'Connect', 'jetpack' ) . '</a>';
- }
-
- public function get_bulk_actions() {
- $actions = array(
- 'connect' => esc_html__( 'Connect', 'jetpack' ),
- 'disconnect' => esc_html__( 'Disconnect', 'jetpack' )
- );
-
- return $actions;
- }
-
- function column_cb($item) {
- return sprintf(
- '<input type="checkbox" name="bulk[]" value="%s" />', $item->blog_id
- );
- }
-
- public function process_bulk_action() {
- if( !isset( $_POST['bulk'] ) || empty ( $_POST['bulk'] ) )
- return; // Thou shall not pass! There is nothing to do
-
-
- $jpms = Jetpack_Network::init();
-
- $action = $this->current_action();
- switch ( $action ) {
-
- case 'connect':
- foreach( $_POST['bulk'] as $k => $site ) {
- $jpms->do_subsiteregister( $site );
- }
- break;
- case 'disconnect':
- foreach( $_POST['bulk'] as $k => $site ) {
- $jpms->do_subsitedisconnect( $site );
- }
- break;
- }
- }
-} // end h
diff --git a/plugins/jetpack/class.jetpack-network.php b/plugins/jetpack/class.jetpack-network.php
deleted file mode 100644
index ba7a0a6f..00000000
--- a/plugins/jetpack/class.jetpack-network.php
+++ /dev/null
@@ -1,776 +0,0 @@
-<?php
-
-/**
- * Used to manage Jetpack installation on Multisite Network installs
- *
- * SINGLETON: To use call Jetpack_Network::init()
- *
- * DO NOT USE ANY STATIC METHODS IN THIS CLASS!!!!!!
- *
- * @since 2.9
- */
-class Jetpack_Network {
-
- /**
- * Holds a static copy of Jetpack_Network for the singleton
- *
- * @since 2.9
- * @var Jetpack_Network
- */
- private static $instance = null;
-
- /**
- * Name of the network wide settings
- *
- * @since 2.9
- * @var string
- */
- private $settings_name = 'jetpack-network-settings';
-
- /**
- * Defaults for settings found on the Jetpack > Settings page
- *
- * @since 2.9
- * @var array
- */
- private $setting_defaults = array(
- 'auto-connect' => 0,
- 'sub-site-connection-override' => 1,
- //'manage_auto_activated_modules' => 0,
- );
-
- /**
- * Constructor
- *
- * @since 2.9
- */
- private function __construct() {
- require_once( ABSPATH . '/wp-admin/includes/plugin.php' ); // For the is_plugin... check
- require_once( JETPACK__PLUGIN_DIR . 'modules/protect/shared-functions.php' ); // For managing the global whitelist
- /*
- * Sanity check to ensure the install is Multisite and we
- * are in Network Admin
- */
- if ( is_multisite() && is_network_admin() ) {
- add_action( 'network_admin_menu', array( $this, 'add_network_admin_menu' ) );
- add_action( 'network_admin_edit_jetpack-network-settings', array( $this, 'save_network_settings_page' ), 10, 0 );
- add_filter( 'admin_body_class', array( $this, 'body_class' ) );
-
- if ( isset( $_GET['page'] ) && 'jetpack' == $_GET['page'] ) {
- add_action( 'admin_init', array( $this, 'jetpack_sites_list' ) );
- }
- }
-
- /*
- * Things that should only run on multisite
- */
- if ( is_multisite() && is_plugin_active_for_network( 'jetpack/jetpack.php' ) ) {
- add_action( 'wp_before_admin_bar_render', array( $this, 'add_to_menubar' ) );
-
- /*
- * If admin wants to automagically register new sites set the hook here
- *
- * This is a hacky way because xmlrpc is not available on wpmu_new_blog
- */
- if ( $this->get_option( 'auto-connect' ) == 1 ) {
- add_action( 'wpmu_new_blog', array( $this, 'do_automatically_add_new_site' ) );
- }
- }
-
- // Remove the toggles for 2.9, re-evaluate how they're done and added for a 3.0 release. They don't feel quite right yet.
- // add_filter( 'jetpack_get_default_modules', array( $this, 'set_auto_activated_modules' ) );
- }
-
- /**
- * Sets which modules get activated by default on subsite connection.
- * Modules can be set in Network Admin > Jetpack > Settings
- *
- * @since 2.9
- *
- * @param array $modules
- *
- * @return array
- **/
- public function set_auto_activated_modules( $modules ) {
- return $modules;
-
- /* Remove the toggles for 2.9, re-evaluate how they're done and added for a 3.0 release. They don't feel quite right yet.
- if( 1 == $this->get_option( 'manage_auto_activated_modules' ) ) {
- return (array) $this->get_option( 'modules' );
- } else {
- return $modules;
- }
- */
- }
-
- /**
- * Registers new sites upon creation
- *
- * @since 2.9
- * @uses wpmu_new_blog
- *
- * @param int $blog_id
- **/
- public function do_automatically_add_new_site( $blog_id ) {
- $this->do_subsiteregister( $blog_id );
- }
-
- /**
- * Adds .network-admin class to the body tag
- * Helps distinguish network admin JP styles from regular site JP styles
- *
- * @since 2.9
- */
- public function body_class( $classes ) {
- return trim( $classes ) . ' network-admin ';
- }
-
- /**
- * Provides access to an instance of Jetpack_Network
- *
- * This is how the Jetpack_Network object should *always* be accessed
- *
- * @since 2.9
- * @return Jetpack_Network
- */
- public static function init() {
- if ( ! self::$instance || ! is_a( self::$instance, 'Jetpack_Network' ) ) {
- self::$instance = new Jetpack_Network;
- }
-
- return self::$instance;
- }
-
- /**
- * Registers the Multisite admin bar menu item shortcut.
- * This shortcut helps users quickly and easily navigate to the Jetpack Network Admin
- * menu from anywhere in their network.
- *
- * @since 2.9
- */
- public function register_menubar() {
- add_action( 'wp_before_admin_bar_render', array( $this, 'add_to_menubar' ) );
- }
-
- /**
- * Runs when Jetpack is deactivated from the network admin plugins menu.
- * Each individual site will need to have Jetpack::disconnect called on it.
- * Site that had Jetpack individually enabled will not be disconnected as
- * on Multisite individually activated plugins are still activated when
- * a plugin is deactivated network wide.
- *
- * @since 2.9
- **/
- public function deactivate() {
- // Only fire if in network admin
- if ( ! is_network_admin() ) {
- return;
- }
-
- $sites = get_sites();
-
- foreach ( $sites as $s ) {
- switch_to_blog( $s->blog_id );
- $active_plugins = get_option( 'active_plugins' );
-
- /*
- * If this plugin was activated in the subsite individually
- * we do not want to call disconnect. Plugins activated
- * individually (before network activation) stay activated
- * when the network deactivation occurs
- */
- if ( ! in_array( 'jetpack/jetpack.php', $active_plugins ) ) {
- Jetpack::disconnect();
- }
- }
- restore_current_blog();
- }
-
- /**
- * Adds a link to the Jetpack Network Admin page in the network admin menu bar.
- *
- * @since 2.9
- **/
- public function add_to_menubar() {
- global $wp_admin_bar;
- // Don't show for logged out users or single site mode.
- if ( ! is_user_logged_in() || ! is_multisite() ) {
- return;
- }
-
- $wp_admin_bar->add_node( array(
- 'parent' => 'network-admin',
- 'id' => 'network-admin-jetpack',
- 'title' => 'Jetpack',
- 'href' => $this->get_url( 'network_admin_page' ),
- ) );
- }
-
- /**
- * Returns various URL strings. Factory like
- *
- * $args can be a string or an array.
- * If $args is an array there must be an element called name for the switch statement
- *
- * Currently supports:
- * - subsiteregister: Pass array( 'name' => 'subsiteregister', 'site_id' => SITE_ID )
- * - network_admin_page: Provides link to /wp-admin/network/JETPACK
- * - subsitedisconnect: Pass array( 'name' => 'subsitedisconnect', 'site_id' => SITE_ID )
- *
- * @since 2.9
- *
- * @param Mixed $args
- *
- * @return String
- **/
- public function get_url( $args ) {
- $url = null; // Default url value
-
- if ( is_string( $args ) ) {
- $name = $args;
- } else {
- $name = $args['name'];
- }
-
- switch ( $name ) {
- case 'subsiteregister':
- if ( ! isset( $args['site_id'] ) ) {
- break; // If there is not a site id present we cannot go further
- }
- $url = network_admin_url(
- 'admin.php?page=jetpack&action=subsiteregister&site_id='
- . $args['site_id']
- );
- break;
-
- case 'network_admin_page':
- $url = network_admin_url( 'admin.php?page=jetpack' );
- break;
-
- case 'subsitedisconnect':
- if ( ! isset( $args['site_id'] ) ) {
- break; // If there is not a site id present we cannot go further
- }
- $url = network_admin_url(
- 'admin.php?page=jetpack&action=subsitedisconnect&site_id='
- . $args['site_id']
- );
- break;
- }
-
- return $url;
- }
-
- /**
- * Adds the Jetpack menu item to the Network Admin area
- *
- * @since 2.9
- */
- public function add_network_admin_menu() {
- add_menu_page( 'Jetpack', 'Jetpack', 'jetpack_network_admin_page', 'jetpack', array( $this, 'wrap_network_admin_page' ), 'div', 3 );
- $jetpack_sites_page_hook = add_submenu_page( 'jetpack', __( 'Jetpack Sites', 'jetpack' ), __( 'Sites', 'jetpack' ), 'jetpack_network_sites_page', 'jetpack', array( $this, 'wrap_network_admin_page' ) );
- $jetpack_settings_page_hook = add_submenu_page( 'jetpack', __( 'Settings', 'jetpack' ), __( 'Settings', 'jetpack' ), 'jetpack_network_settings_page', 'jetpack-settings', array( $this, 'wrap_render_network_admin_settings_page' ) );
- add_action( "admin_print_styles-$jetpack_sites_page_hook", array( 'Jetpack_Admin_Page', 'load_wrapper_styles' ) );
- add_action( "admin_print_styles-$jetpack_settings_page_hook", array( 'Jetpack_Admin_Page', 'load_wrapper_styles' ) );
- /**
- * As jetpack_register_genericons is by default fired off a hook,
- * the hook may have already fired by this point.
- * So, let's just trigger it manually.
- */
- require_once( JETPACK__PLUGIN_DIR . '_inc/genericons.php' );
- jetpack_register_genericons();
-
- if ( ! wp_style_is( 'jetpack-icons', 'registered' ) ) {
- wp_register_style( 'jetpack-icons', plugins_url( 'css/jetpack-icons.min.css', JETPACK__PLUGIN_FILE ), false, JETPACK__VERSION );
- }
-
- add_action( 'admin_enqueue_scripts', array( $this, 'admin_menu_css' ) );
- }
-
- /**
- * Adds JP menu icon
- *
- * @since 2.9
- **/
- function admin_menu_css() {
- wp_enqueue_style( 'jetpack-icons' );
- }
-
- /**
- * Provides functionality for the Jetpack > Sites page.
- * Does not do the display!
- *
- * @since 2.9
- */
- public function jetpack_sites_list() {
- Jetpack::init();
-
- if ( isset( $_GET['action'] ) ) {
- switch ( $_GET['action'] ) {
- case 'subsiteregister':
- /*
- * @todo check_admin_referer( 'jetpack-subsite-register' );
- */
- Jetpack::log( 'subsiteregister' );
-
- // If !$_GET['site_id'] stop registration and error
- if ( ! isset( $_GET['site_id'] ) || empty( $_GET['site_id'] ) ) {
- // Log error to state cookie for display later
- /**
- * @todo Make state messages show on Jetpack NA pages
- **/
- Jetpack::state( 'missing_site_id', esc_html__( 'Site ID must be provided to register a sub-site.', 'jetpack' ) );
- break;
- }
-
- // Send data to register endpoint and retrieve shadow blog details
- $result = $this->do_subsiteregister();
- $url = $this->get_url( 'network_admin_page' );
-
- if ( is_wp_error( $result ) ) {
- $url = add_query_arg( 'action', 'connection_failed', $url );
- } else {
- $url = add_query_arg( 'action', 'connected', $url );
- }
-
- wp_safe_redirect( $url );
- exit;
-
- case 'subsitedisconnect':
- Jetpack::log( 'subsitedisconnect' );
-
- if ( ! isset( $_GET['site_id'] ) || empty( $_GET['site_id'] ) ) {
- Jetpack::state( 'missing_site_id', esc_html__( 'Site ID must be provided to disconnect a sub-site.', 'jetpack' ) );
- break;
- }
-
- $this->do_subsitedisconnect();
- break;
-
- case 'connected':
- case 'connection_failed':
- add_action( 'jetpack_notices', array( $this, 'show_jetpack_notice' ) );
- break;
- }
- }
- }
-
- public function show_jetpack_notice() {
- if ( isset( $_GET['action'] ) && 'connected' == $_GET['action'] ) {
- $notice = __( 'Site successfully connected.', 'jetpack' );
- $classname = 'updated';
- } else if ( isset( $_GET['action'] ) && 'connection_failed' == $_GET['action'] ) {
- $notice = __( 'Site connection failed!', 'jetpack' );
- $classname = 'error';
- }
- ?>
- <div id="message" class="<?php echo esc_attr( $classname );?> jetpack-message jp-connect" style="display:block !important;">
- <p><?php echo esc_html( $notice ); ?></p>
- </div>
- <?php
- }
-
- /**
- * Disconnect functionality for an individual site
- *
- * @since 2.9
- * @see Jetpack_Network::jetpack_sites_list()
- */
- public function do_subsitedisconnect( $site_id = null ) {
- if ( ! current_user_can( 'jetpack_disconnect' ) ) {
- return;
- }
- $site_id = ( is_null( $site_id ) ) ? $_GET['site_id'] : $site_id;
- switch_to_blog( $site_id );
- Jetpack::disconnect();
- restore_current_blog();
- }
-
- /**
- * Registers a subsite with the Jetpack servers
- *
- * @since 2.9
- * @todo Break apart into easier to manage chunks that can be unit tested
- * @see Jetpack_Network::jetpack_sites_list();
- */
- public function do_subsiteregister( $site_id = null ) {
- if ( ! current_user_can( 'jetpack_disconnect' ) ) {
- return;
- }
-
- if ( Jetpack::is_development_mode() ) {
- return;
- }
-
- $jp = Jetpack::init();
-
- // Figure out what site we are working on
- $site_id = ( is_null( $site_id ) ) ? $_GET['site_id'] : $site_id;
-
- // better to try (and fail) to set a higher timeout than this system
- // supports than to have register fail for more users than it should
- $timeout = Jetpack::set_min_time_limit( 60 ) / 2;
-
- // The blog id on WordPress.com of the primary network site
- $network_wpcom_blog_id = Jetpack_Options::get_option( 'id' );
-
- /*
- * Here we need to switch to the subsite
- * For the registration process we really only hijack how it
- * works for an individual site and pass in some extra data here
- */
- switch_to_blog( $site_id );
-
- // Save the secrets in the subsite so when the wpcom server does a pingback it
- // will be able to validate the connection
- $secrets = $jp->generate_secrets( 'register' );
- if (
- empty( $secrets['secret_1'] ) ||
- empty( $secrets['secret_2'] ) ||
- empty( $secrets['exp'] )
- ) {
- return new Jetpack_Error( 'missing_secrets' );
- }
-
- // Gra info for gmt offset
- $gmt_offset = get_option( 'gmt_offset' );
- if ( ! $gmt_offset ) {
- $gmt_offset = 0;
- }
-
- /*
- * Get the stats_option option from the db.
- * It looks like the server strips this out so maybe it is not necessary?
- * Does it match the Jetpack site with the old stats plugin id?
- *
- * @todo Find out if sending the stats_id is necessary
- */
- $stat_options = get_option( 'stats_options' );
- $stat_id = $stat_options = isset( $stats_options['blog_id'] ) ? $stats_options['blog_id'] : null;
- $user_id = get_current_user_id();
-
- $tracks_identity = jetpack_tracks_get_identity( $user_id );
-
- /*
- * Use the subsite's registration date as the site creation date.
- *
- * This is in contrast to regular standalone sites, where we use the helper
- * `Jetpack::get_assumed_site_creation_date()` to assume the site's creation date.
- */
- $blog_details = get_blog_details();
- $site_creation_date = $blog_details['registered'];
-
- /**
- * Both `state` and `user_id` need to be sent in the request, even though they are the same value.
- * Connecting via the network admin combines `register()` and `authorize()` methods into one step,
- * because we assume the main site is already authorized. `state` is used to verify the `register()`
- * request, while `user_id()` is used to create the token in the `authorize()` request.
- */
- $args = array(
- 'method' => 'POST',
- 'body' => array(
- 'network_url' => $this->get_url( 'network_admin_page' ),
- 'network_wpcom_blog_id' => $network_wpcom_blog_id,
- 'siteurl' => site_url(),
- 'home' => home_url(),
- 'gmt_offset' => $gmt_offset,
- 'timezone_string' => (string) get_option( 'timezone_string' ),
- 'site_name' => (string) get_option( 'blogname' ),
- 'secret_1' => $secrets['secret_1'],
- 'secret_2' => $secrets['secret_2'],
- 'site_lang' => get_locale(),
- 'timeout' => $timeout,
- 'stats_id' => $stat_id, // Is this still required?
- 'user_id' => $user_id,
- 'state' => $user_id,
- '_ui' => $tracks_identity['_ui'],
- '_ut' => $tracks_identity['_ut'],
- 'site_created' => $site_creation_date,
- 'jetpack_version' => JETPACK__VERSION
- ),
- 'headers' => array(
- 'Accept' => 'application/json',
- ),
- 'timeout' => $timeout,
- );
-
- Jetpack::apply_activation_source_to_args( $args['body'] );
-
- // Attempt to retrieve shadow blog details
- $response = Jetpack_Client::_wp_remote_request(
- Jetpack::fix_url_for_bad_hosts( Jetpack::api_url( 'subsiteregister' ) ), $args, true
- );
-
- /*
- * $response should either be invalid or contain:
- * - jetpack_id => id
- * - jetpack_secret => blog_token
- * - jetpack_public
- *
- * Store the wpcom site details
- */
- $valid_response = $jp->validate_remote_register_response( $response );
-
- if ( is_wp_error( $valid_response ) || ! $valid_response ) {
- restore_current_blog();
- return $valid_response;
- }
-
- // Grab the response values to work with
- $code = wp_remote_retrieve_response_code( $response );
- $entity = wp_remote_retrieve_body( $response );
- if ( $entity ) {
- $json = json_decode( $entity );
- } else {
- $json = false;
- }
-
- if ( empty( $json->jetpack_secret ) || ! is_string( $json->jetpack_secret ) ) {
- restore_current_blog();
- return new Jetpack_Error( 'jetpack_secret', '', $code );
- }
-
- if ( isset( $json->jetpack_public ) ) {
- $jetpack_public = (int) $json->jetpack_public;
- } else {
- $jetpack_public = false;
- }
-
- Jetpack_Options::update_options( array(
- 'id' => (int) $json->jetpack_id,
- 'blog_token' => (string) $json->jetpack_secret,
- 'public' => $jetpack_public,
- ) );
-
- /*
- * Update the subsiteregister method on wpcom so that it also sends back the
- * token in this same request
- */
- $is_master_user = ! Jetpack::is_active();
- Jetpack::update_user_token(
- get_current_user_id(),
- sprintf( '%s.%d', $json->token->secret, get_current_user_id() ),
- $is_master_user
- );
-
- Jetpack::activate_default_modules();
-
- restore_current_blog();
- }
-
- function wrap_network_admin_page() {
- Jetpack_Admin_Page::wrap_ui( array( $this, 'network_admin_page' ) );
- }
-
- /**
- * Handles the displaying of all sites on the network that are
- * dis/connected to Jetpack
- *
- * @since 2.9
- * @see Jetpack_Network::jetpack_sites_list()
- */
- function network_admin_page() {
- global $current_site;
- $this->network_admin_page_header();
-
- $jp = Jetpack::init();
-
- // We should be, but ensure we are on the main blog
- switch_to_blog( $current_site->blog_id );
- $main_active = $jp->is_active();
- restore_current_blog();
-
- // If we are in dev mode, just show the notice and bail
- if ( Jetpack::is_development_mode() ) {
- Jetpack::show_development_mode_notice();
- return;
- }
-
- /*
- * Ensure the main blog is connected as all other subsite blog
- * connections will feed off this one
- */
- if ( ! $main_active ) {
- $url = $this->get_url( array(
- 'name' => 'subsiteregister',
- 'site_id' => 1,
- ) );
- $data = array( 'url' => $jp->build_connect_url() );
- Jetpack::init()->load_view( 'admin/must-connect-main-blog.php', $data );
-
- return;
- }
-
- require_once( 'class.jetpack-network-sites-list-table.php' );
- $myListTable = new Jetpack_Network_Sites_List_Table();
- echo '<div class="wrap"><h2>' . __( 'Sites', 'jetpack' ) . '</h2>';
- echo '<form method="post">';
- $myListTable->prepare_items();
- $myListTable->display();
- echo '</form></div>';
-
- }
-
- /**
- * Stylized JP header formatting
- *
- * @since 2.9
- */
- function network_admin_page_header() {
- global $current_user;
-
- $is_connected = Jetpack::is_active();
-
- $data = array(
- 'is_connected' => $is_connected
- );
- Jetpack::init()->load_view( 'admin/network-admin-header.php', $data );
- }
-
-
- /**
- * Fires when the Jetpack > Settings page is saved.
- *
- * @since 2.9
- */
- public function save_network_settings_page() {
-
- if ( ! wp_verify_nonce( $_POST['_wpnonce'], 'jetpack-network-settings' ) ) {
- // no nonce, push back to settings page
- wp_safe_redirect(
- add_query_arg(
- array( 'page' => 'jetpack-settings' ),
- network_admin_url( 'admin.php' )
- )
- );
- exit();
- }
-
- // try to save the Protect whitelist before anything else, since that action can result in errors
- $whitelist = str_replace( ' ', '', $_POST['global-whitelist'] );
- $whitelist = explode( PHP_EOL, $whitelist );
- $result = jetpack_protect_save_whitelist( $whitelist, $global = true );
- if ( is_wp_error( $result ) ) {
- wp_safe_redirect(
- add_query_arg(
- array( 'page' => 'jetpack-settings', 'error' => 'jetpack_protect_whitelist' ),
- network_admin_url( 'admin.php' )
- )
- );
- exit();
- }
-
- /*
- * Fields
- *
- * auto-connect - Checkbox for global Jetpack connection
- * sub-site-connection-override - Allow sub-site admins to (dis)reconnect with their own Jetpack account
- */
- $auto_connect = 0;
- if ( isset( $_POST['auto-connect'] ) ) {
- $auto_connect = 1;
- }
-
- $sub_site_connection_override = 0;
- if ( isset( $_POST['sub-site-connection-override'] ) ) {
- $sub_site_connection_override = 1;
- }
-
- /* Remove the toggles for 2.9, re-evaluate how they're done and added for a 3.0 release. They don't feel quite right yet.
- $manage_auto_activated_modules = 0;
- if ( isset( $_POST['manage_auto_activated_modules'] ) ) {
- $manage_auto_activated_modules = 1;
- }
-
- $modules = array();
- if ( isset( $_POST['modules'] ) ) {
- $modules = $_POST['modules'];
- }
- */
-
- $data = array(
- 'auto-connect' => $auto_connect,
- 'sub-site-connection-override' => $sub_site_connection_override,
- //'manage_auto_activated_modules' => $manage_auto_activated_modules,
- //'modules' => $modules,
- );
-
- update_site_option( $this->settings_name, $data );
- wp_safe_redirect(
- add_query_arg(
- array( 'page' => 'jetpack-settings', 'updated' => 'true' ),
- network_admin_url( 'admin.php' )
- )
- );
- exit();
- }
-
- public function wrap_render_network_admin_settings_page() {
- Jetpack_Admin_Page::wrap_ui( array( $this, 'render_network_admin_settings_page' ) );
- }
-
- public function render_network_admin_settings_page() {
- $this->network_admin_page_header();
- $options = wp_parse_args( get_site_option( $this->settings_name ), $this->setting_defaults );
-
- $modules = array();
- $module_slugs = Jetpack::get_available_modules();
- foreach ( $module_slugs as $slug ) {
- $module = Jetpack::get_module( $slug );
- $module['module'] = $slug;
- $modules[] = $module;
- }
-
- usort( $modules, array( 'Jetpack', 'sort_modules' ) );
-
- if ( ! isset( $options['modules'] ) ) {
- $options['modules'] = $modules;
- }
-
- $data = array(
- 'modules' => $modules,
- 'options' => $options,
- 'jetpack_protect_whitelist' => jetpack_protect_format_whitelist(),
- );
-
- Jetpack::init()->load_view( 'admin/network-settings.php', $data );
- }
-
- /**
- * Updates a site wide option
- *
- * @since 2.9
- *
- * @param string $key
- * @param mixed $value
- *
- * @return boolean
- **/
- public function update_option( $key, $value ) {
- $options = get_site_option( $this->settings_name, $this->setting_defaults );
- $options[ $key ] = $value;
-
- return update_site_option( $this->settings_name, $options );
- }
-
- /**
- * Retrieves a site wide option
- *
- * @since 2.9
- *
- * @param string $name - Name of the option in the database
- **/
- public function get_option( $name ) {
- $options = get_site_option( $this->settings_name, $this->setting_defaults );
- $options = wp_parse_args( $options, $this->setting_defaults );
-
- if ( ! isset( $options[ $name ] ) ) {
- $options[ $name ] = null;
- }
-
- return $options[ $name ];
- }
-
-}
-
-// end class
diff --git a/plugins/jetpack/class.jetpack-options.php b/plugins/jetpack/class.jetpack-options.php
deleted file mode 100644
index c8199b2e..00000000
--- a/plugins/jetpack/class.jetpack-options.php
+++ /dev/null
@@ -1,592 +0,0 @@
-<?php
-
-class Jetpack_Options {
-
- /**
- * An array that maps a grouped option type to an option name.
- * @var array
- */
- private static $grouped_options = array(
- 'compact' => 'jetpack_options',
- 'private' => 'jetpack_private_options'
- );
-
- /**
- * Returns an array of option names for a given type.
- *
- * @param string $type The type of option to return. Defaults to 'compact'.
- *
- * @return array
- */
- public static function get_option_names( $type = 'compact' ) {
- switch ( $type ) {
- case 'non-compact' :
- case 'non_compact' :
- return array(
- 'activated',
- 'active_modules',
- 'available_modules',
- 'do_activate',
- 'edit_links_calypso_redirect', // (bool) Whether post/page edit links on front end should point to Calypso.
- 'log',
- 'slideshow_background_color',
- 'widget_twitter',
- 'wpcc_options',
- 'relatedposts',
- 'file_data',
- 'autoupdate_plugins', // (array) An array of plugin ids ( eg. jetpack/jetpack ) that should be autoupdated
- 'autoupdate_plugins_translations', // (array) An array of plugin ids ( eg. jetpack/jetpack ) that should be autoupdated translation files.
- 'autoupdate_themes', // (array) An array of theme ids ( eg. twentyfourteen ) that should be autoupdated
- 'autoupdate_themes_translations', // (array) An array of theme ids ( eg. twentyfourteen ) that should autoupdated translation files.
- 'autoupdate_core', // (bool) Whether or not to autoupdate core
- 'autoupdate_translations', // (bool) Whether or not to autoupdate all translations
- 'json_api_full_management', // (bool) Allow full management (eg. Activate, Upgrade plugins) of the site via the JSON API.
- 'sync_non_public_post_stati', // (bool) Allow synchronisation of posts and pages with non-public status.
- 'site_icon_url', // (string) url to the full site icon
- 'site_icon_id', // (int) Attachment id of the site icon file
- 'dismissed_manage_banner', // (bool) Dismiss Jetpack manage banner allows the user to dismiss the banner permanently
- 'restapi_stats_cache', // (array) Stats Cache data.
- 'unique_connection', // (array) A flag to determine a unique connection to wordpress.com two values "connected" and "disconnected" with values for how many times each has occured
- 'protect_whitelist', // (array) IP Address for the Protect module to ignore
- 'sync_error_idc', // (bool|array) false or array containing the site's home and siteurl at time of IDC error
- 'safe_mode_confirmed', // (bool) True if someone confirms that this site was correctly put into safe mode automatically after an identity crisis is discovered.
- 'migrate_for_idc', // (bool) True if someone confirms that this site should migrate stats and subscribers from its previous URL
- 'dismissed_connection_banner', // (bool) True if the connection banner has been dismissed
- 'onboarding', // (string) Auth token to be used in the onboarding connection flow
- 'tos_agreed', // (bool) Whether or not the TOS for connection has been agreed upon.
- 'static_asset_cdn_files', // (array) An nested array of files that we can swap out for cdn versions.
- 'mapbox_api_key', // (string) Mapbox API Key, for use with Map block.
- 'mailchimp', // (string) Mailchimp keyring data, for mailchimp block.
- );
-
- case 'private' :
- return array(
- 'blog_token', // (string) The Client Secret/Blog Token of this site.
- 'user_token', // (string) The User Token of this site. (deprecated)
- 'user_tokens' // (array) User Tokens for each user of this site who has connected to jetpack.wordpress.com.
- );
-
- case 'network' :
- return array(
- 'onboarding', // (string) Auth token to be used in the onboarding connection flow
- 'file_data' // (array) List of absolute paths to all Jetpack modules
- );
- }
-
- return array(
- 'id', // (int) The Client ID/WP.com Blog ID of this site.
- 'publicize_connections', // (array) An array of Publicize connections from WordPress.com
- 'master_user', // (int) The local User ID of the user who connected this site to jetpack.wordpress.com.
- 'version', // (string) Used during upgrade procedure to auto-activate new modules. version:time
- 'old_version', // (string) Used to determine which modules are the most recently added. previous_version:time
- 'fallback_no_verify_ssl_certs', // (int) Flag for determining if this host must skip SSL Certificate verification due to misconfigured SSL.
- 'time_diff', // (int) Offset between Jetpack server's clocks and this server's clocks. Jetpack Server Time = time() + (int) Jetpack_Options::get_option( 'time_diff' )
- 'public', // (int|bool) If we think this site is public or not (1, 0), false if we haven't yet tried to figure it out.
- 'videopress', // (array) VideoPress options array.
- 'is_network_site', // (int|bool) If we think this site is a network or a single blog (1, 0), false if we haven't yet tried to figue it out.
- 'social_links', // (array) The specified links for each social networking site.
- 'identity_crisis_whitelist', // (array) An array of options, each having an array of the values whitelisted for it.
- 'gplus_authors', // (array) The Google+ authorship information for connected users.
- 'last_heartbeat', // (int) The timestamp of the last heartbeat that fired.
- 'jumpstart', // (string) A flag for whether or not to show the Jump Start. Accepts: new_connection, jumpstart_activated, jetpack_action_taken, jumpstart_dismissed.
- 'hide_jitm', // (array) A list of just in time messages that we should not show because they have been dismissed by the user
- 'custom_css_4.7_migration', // (bool) Whether Custom CSS has scanned for and migrated any legacy CSS CPT entries to the new Core format.
- 'image_widget_migration', // (bool) Whether any legacy Image Widgets have been converted to the new Core widget
- 'gallery_widget_migration', // (bool) Whether any legacy Gallery Widgets have been converted to the new Core widget
- 'sso_first_login', // (bool) Is this the first time the user logins via SSO.
- 'dismissed_hints', // (array) Part of Plugin Search Hints. List of cards that have been dismissed.
- );
- }
-
- /**
- * Is the option name valid?
- *
- * @param string $name The name of the option
- * @param string|null $group The name of the group that the option is in. Default to null, which will search non_compact.
- *
- * @return bool Is the option name valid?
- */
- public static function is_valid( $name, $group = null ) {
- if ( is_array( $name ) ) {
- $compact_names = array();
- foreach ( array_keys( self::$grouped_options ) as $_group ) {
- $compact_names = array_merge( $compact_names, self::get_option_names( $_group ) );
- }
-
- $result = array_diff( $name, self::get_option_names( 'non_compact' ), $compact_names );
-
- return empty( $result );
- }
-
- if ( is_null( $group ) || 'non_compact' === $group ) {
- if ( in_array( $name, self::get_option_names( $group ) ) ) {
- return true;
- }
- }
-
- foreach ( array_keys( self::$grouped_options ) as $_group ) {
- if ( is_null( $group ) || $group === $_group ) {
- if ( in_array( $name, self::get_option_names( $_group ) ) ) {
- return true;
- }
- }
- }
-
- return false;
- }
-
- /**
- * Checks if an option must be saved for the whole network in WP Multisite
- *
- * @param string $option_name Option name. It must come _without_ `jetpack_%` prefix. The method will prefix the option name.
- *
- * @return bool
- */
- public static function is_network_option( $option_name ) {
- if ( ! is_multisite() ) {
- return false;
- }
- return in_array( $option_name, self::get_option_names( 'network' ) );
- }
-
- /**
- * Returns the requested option. Looks in jetpack_options or jetpack_$name as appropriate.
- *
- * @param string $name Option name. It must come _without_ `jetpack_%` prefix. The method will prefix the option name.
- * @param mixed $default (optional)
- *
- * @return mixed
- */
- public static function get_option( $name, $default = false ) {
- if ( self::is_valid( $name, 'non_compact' ) ) {
- if ( self::is_network_option( $name ) ) {
- return get_site_option( "jetpack_$name", $default );
- }
-
- return get_option( "jetpack_$name", $default );
- }
-
- foreach ( array_keys( self::$grouped_options ) as $group ) {
- if ( self::is_valid( $name, $group ) ) {
- return self::get_grouped_option( $group, $name, $default );
- }
- }
-
- trigger_error( sprintf( 'Invalid Jetpack option name: %s', $name ), E_USER_WARNING );
-
- return $default;
- }
-
- /**
- * Returns the requested option, and ensures it's autoloaded in the future.
- * This does _not_ adjust the prefix in any way (does not prefix jetpack_%)
- *
- * @param string $name Option name
- * @param mixed $default (optional)
- *
- * @return mixed
- */
- public static function get_option_and_ensure_autoload( $name, $default ) {
- // In this function the name is not adjusted by prefixing jetpack_
- // so if it has already prefixed, we'll replace it and then
- // check if the option name is a network option or not
- $jetpack_name = preg_replace( '/^jetpack_/', '', $name, 1 );
- $is_network_option = self::is_network_option( $jetpack_name );
- $value = $is_network_option ? get_site_option( $name ) : get_option( $name );
-
- if ( false === $value && false !== $default ) {
- if ( $is_network_option ) {
- add_site_option( $name, $default );
- } else {
- add_option( $name, $default );
- }
- $value = $default;
- }
-
- return $value;
- }
-
- private static function update_grouped_option( $group, $name, $value ) {
- $options = get_option( self::$grouped_options[ $group ] );
- if ( ! is_array( $options ) ) {
- $options = array();
- }
- $options[ $name ] = $value;
-
- return update_option( self::$grouped_options[ $group ], $options );
- }
-
- /**
- * Updates the single given option. Updates jetpack_options or jetpack_$name as appropriate.
- *
- * @param string $name Option name. It must come _without_ `jetpack_%` prefix. The method will prefix the option name.
- * @param mixed $value Option value
- * @param string $autoload If not compact option, allows specifying whether to autoload or not.
- *
- * @return bool Was the option successfully updated?
- */
- public static function update_option( $name, $value, $autoload = null ) {
- /**
- * Fires before Jetpack updates a specific option.
- *
- * @since 3.0.0
- *
- * @param str $name The name of the option being updated.
- * @param mixed $value The new value of the option.
- */
- do_action( 'pre_update_jetpack_option_' . $name, $name, $value );
- if ( self::is_valid( $name, 'non_compact' ) ) {
- if ( self::is_network_option( $name ) ) {
- return update_site_option( "jetpack_$name", $value );
- }
-
- return update_option( "jetpack_$name", $value, $autoload );
-
- }
-
- foreach ( array_keys( self::$grouped_options ) as $group ) {
- if ( self::is_valid( $name, $group ) ) {
- return self::update_grouped_option( $group, $name, $value );
- }
- }
-
- trigger_error( sprintf( 'Invalid Jetpack option name: %s', $name ), E_USER_WARNING );
-
- return false;
- }
-
- /**
- * Updates the multiple given options. Updates jetpack_options and/or jetpack_$name as appropriate.
- *
- * @param array $array array( option name => option value, ... )
- */
- public static function update_options( $array ) {
- $names = array_keys( $array );
-
- foreach ( array_diff( $names, self::get_option_names(), self::get_option_names( 'non_compact' ), self::get_option_names( 'private' ) ) as $unknown_name ) {
- trigger_error( sprintf( 'Invalid Jetpack option name: %s', $unknown_name ), E_USER_WARNING );
- unset( $array[ $unknown_name ] );
- }
-
- foreach ( $names as $name ) {
- self::update_option( $name, $array[ $name ] );
- }
- }
-
- /**
- * Deletes the given option. May be passed multiple option names as an array.
- * Updates jetpack_options and/or deletes jetpack_$name as appropriate.
- *
- * @param string|array $names Option names. They must come _without_ `jetpack_%` prefix. The method will prefix the option names.
- *
- * @return bool Was the option successfully deleted?
- */
- public static function delete_option( $names ) {
- $result = true;
- $names = (array) $names;
-
- if ( ! self::is_valid( $names ) ) {
- trigger_error( sprintf( 'Invalid Jetpack option names: %s', print_r( $names, 1 ) ), E_USER_WARNING );
- return false;
- }
-
- foreach ( array_intersect( $names, self::get_option_names( 'non_compact' ) ) as $name ) {
- if ( self::is_network_option( $name ) ) {
- $result = delete_site_option( "jetpack_$name" );
- } else {
- $result = delete_option( "jetpack_$name" );
- }
-
- }
-
- foreach ( array_keys( self::$grouped_options ) as $group ) {
- if ( ! self::delete_grouped_option( $group, $names ) ) {
- $result = false;
- }
- }
-
- return $result;
- }
-
- private static function get_grouped_option( $group, $name, $default ) {
- $options = get_option( self::$grouped_options[ $group ] );
- if ( is_array( $options ) && isset( $options[ $name ] ) ) {
- return $options[ $name ];
- }
-
- return $default;
- }
-
- private static function delete_grouped_option( $group, $names ) {
- $options = get_option( self::$grouped_options[ $group ], array() );
-
- $to_delete = array_intersect( $names, self::get_option_names( $group ), array_keys( $options ) );
- if ( $to_delete ) {
- foreach ( $to_delete as $name ) {
- unset( $options[ $name ] );
- }
-
- return update_option( self::$grouped_options[ $group ], $options );
- }
-
- return true;
- }
-
- // Raw option methods allow Jetpack to get / update / delete options via direct DB queries, including options
- // that are not created by the Jetpack plugin. This is helpful only in rare cases when we need to bypass
- // cache and filters.
-
- /**
- * Deletes an option via $wpdb query.
- *
- * @param string $name Option name.
- *
- * @return bool Is the option deleted?
- */
- static function delete_raw_option( $name ) {
- if ( self::bypass_raw_option( $name ) ) {
- return delete_option( $name );
- }
- global $wpdb;
- $result = $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->options WHERE option_name = %s", $name ) );
- return $result;
- }
-
- /**
- * Updates an option via $wpdb query.
- *
- * @param string $name Option name.
- * @param mixed $value Option value.
- * @param bool $autoload Specifying whether to autoload or not.
- *
- * @return bool Is the option updated?
- */
- static function update_raw_option( $name, $value, $autoload = false ) {
- if ( self::bypass_raw_option( $name ) ) {
- return update_option( $name, $value, $autoload );
- }
- global $wpdb;
- $autoload_value = $autoload ? 'yes' : 'no';
-
- $serialized_value = maybe_serialize( $value );
- // try updating, if no update then insert
- // TODO: try to deal with the fact that unchanged values can return updated_num = 0
- // below we used "insert ignore" to at least suppress the resulting error
- $updated_num = $wpdb->query(
- $wpdb->prepare(
- "UPDATE $wpdb->options SET option_value = %s WHERE option_name = %s",
- $serialized_value,
- $name
- )
- );
-
- if ( ! $updated_num ) {
- $updated_num = $wpdb->query(
- $wpdb->prepare(
- "INSERT IGNORE INTO $wpdb->options ( option_name, option_value, autoload ) VALUES ( %s, %s, '$autoload_value' )",
- $name,
- $serialized_value
- )
- );
- }
- return $updated_num;
- }
-
- /**
- * Gets an option via $wpdb query.
- *
- * @since 5.4.0
- *
- * @param string $name Option name.
- * @param mixed $default Default option value if option is not found.
- *
- * @return mixed Option value, or null if option is not found and default is not specified.
- */
- static function get_raw_option( $name, $default = null ) {
- if ( self::bypass_raw_option( $name ) ) {
- return get_option( $name, $default );
- }
-
- global $wpdb;
- $value = $wpdb->get_var(
- $wpdb->prepare(
- "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1",
- $name
- )
- );
- $value = maybe_unserialize( $value );
-
- if ( $value === null && $default !== null ) {
- return $default;
- }
-
- return $value;
- }
-
- /**
- * This function checks for a constant that, if present, will disable direct DB queries Jetpack uses to manage certain options and force Jetpack to always use Options API instead.
- * Options can be selectively managed via a blacklist by filtering option names via the jetpack_disabled_raw_option filter.
- *
- * @param $name Option name
- *
- * @return bool
- */
- static function bypass_raw_option( $name ) {
-
- if ( Jetpack_Constants::get_constant( 'JETPACK_DISABLE_RAW_OPTIONS' ) ) {
- return true;
- }
- /**
- * Allows to disable particular raw options.
- * @since 5.5.0
- *
- * @param array $disabled_raw_options An array of option names that you can selectively blacklist from being managed via direct database queries.
- */
- $disabled_raw_options = apply_filters( 'jetpack_disabled_raw_options', array() );
- return isset( $disabled_raw_options[ $name ] );
- }
-
- /**
- * Gets all known options that are used by Jetpack and managed by Jetpack_Options.
- *
- * @since 5.4.0
- *
- * @param boolean $strip_unsafe_options If true, and by default, will strip out options necessary for the connection to WordPress.com.
- * @return array An array of all options managed via the Jetpack_Options class.
- */
- static function get_all_jetpack_options( $strip_unsafe_options = true ) {
- $jetpack_options = self::get_option_names();
- $jetpack_options_non_compat = self::get_option_names( 'non_compact' );
- $jetpack_options_private = self::get_option_names( 'private' );
-
- $all_jp_options = array_merge( $jetpack_options, $jetpack_options_non_compat, $jetpack_options_private );
-
- if ( $strip_unsafe_options ) {
- // Flag some Jetpack options as unsafe
- $unsafe_options = array(
- 'id', // (int) The Client ID/WP.com Blog ID of this site.
- 'master_user', // (int) The local User ID of the user who connected this site to jetpack.wordpress.com.
- 'version', // (string) Used during upgrade procedure to auto-activate new modules. version:time
- 'jumpstart', // (string) A flag for whether or not to show the Jump Start. Accepts: new_connection, jumpstart_activated, jetpack_action_taken, jumpstart_dismissed.
-
- // non_compact
- 'activated',
-
- // private
- 'register',
- 'blog_token', // (string) The Client Secret/Blog Token of this site.
- 'user_token', // (string) The User Token of this site. (deprecated)
- 'user_tokens'
- );
-
- // Remove the unsafe Jetpack options
- foreach ( $unsafe_options as $unsafe_option ) {
- if ( false !== ( $key = array_search( $unsafe_option, $all_jp_options ) ) ) {
- unset( $all_jp_options[ $key ] );
- }
- }
- }
-
- return $all_jp_options;
- }
-
- /**
- * Get all options that are not managed by the Jetpack_Options class that are used by Jetpack.
- *
- * @since 5.4.0
- *
- * @return array
- */
- static function get_all_wp_options() {
- // A manual build of the wp options
- return array(
- 'sharing-options',
- 'disabled_likes',
- 'disabled_reblogs',
- 'jetpack_comments_likes_enabled',
- 'wp_mobile_excerpt',
- 'wp_mobile_featured_images',
- 'wp_mobile_app_promos',
- 'stats_options',
- 'stats_dashboard_widget',
- 'safecss_preview_rev',
- 'safecss_rev',
- 'safecss_revision_migrated',
- 'nova_menu_order',
- 'jetpack_portfolio',
- 'jetpack_portfolio_posts_per_page',
- 'jetpack_testimonial',
- 'jetpack_testimonial_posts_per_page',
- 'wp_mobile_custom_css',
- 'sharedaddy_disable_resources',
- 'sharing-options',
- 'sharing-services',
- 'site_icon_temp_data',
- 'featured-content',
- 'site_logo',
- 'jetpack_dismissed_notices',
- 'jetpack-twitter-cards-site-tag',
- 'jetpack-sitemap-state',
- 'jetpack_sitemap_post_types',
- 'jetpack_sitemap_location',
- 'jetpack_protect_key',
- 'jetpack_protect_blocked_attempts',
- 'jetpack_protect_activating',
- 'jetpack_connection_banner_ab',
- 'jetpack_active_plan',
- 'jetpack_activation_source',
- 'jetpack_sso_match_by_email',
- 'jetpack_sso_require_two_step',
- 'jetpack_sso_remove_login_form',
- 'jetpack_last_connect_url_check',
- 'jpo_business_address',
- 'jpo_site_type',
- 'jpo_homepage_format',
- 'jpo_contact_page',
- );
- }
-
- /**
- * Gets all options that can be safely reset by CLI.
- *
- * @since 5.4.0
- *
- * @return array array Associative array containing jp_options which are managed by the Jetpack_Options class and wp_options which are not.
- */
- static function get_options_for_reset() {
- $all_jp_options = self::get_all_jetpack_options();
-
- $wp_options = self::get_all_wp_options();
-
- $options = array(
- 'jp_options' => $all_jp_options,
- 'wp_options' => $wp_options
- );
-
- return $options;
- }
-
- /**
- * Delete all known options
- *
- * @since 5.4.0
- *
- * @return void
- */
- static function delete_all_known_options() {
- // Delete all compact options
- foreach ( (array) self::$grouped_options as $option_name ) {
- delete_option( $option_name );
- }
-
- // Delete all non-compact Jetpack options
- foreach ( (array) self::get_option_names( 'non-compact' ) as $option_name ) {
- Jetpack_Options::delete_option( $option_name );
- }
-
- // Delete all options that can be reset via CLI, that aren't Jetpack options
- foreach ( (array) self::get_all_wp_options() as $option_name ) {
- delete_option( $option_name );
- }
- }
-}
diff --git a/plugins/jetpack/class.jetpack-plan.php b/plugins/jetpack/class.jetpack-plan.php
deleted file mode 100644
index 99351503..00000000
--- a/plugins/jetpack/class.jetpack-plan.php
+++ /dev/null
@@ -1,231 +0,0 @@
-<?php //phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
-/**
- * Handles fetching of the site's plan from WordPress.com and caching the value locally.
- *
- * @package Jetpack
- */
-
-/**
- * Provides methods methods for fetching the plan from WordPress.com.
- */
-class Jetpack_Plan {
- /**
- * A cache variable to hold the active plan for the current request.
- *
- * @var array
- */
- private static $active_plan_cache;
-
- const PLAN_OPTION = 'jetpack_active_plan';
-
- /**
- * Given a response to the `/sites/%d` endpoint, will parse the response and attempt to set the
- * plan from the response.
- *
- * @param array $response The response from `/sites/%d`.
- * @return bool Was the plan successfully updated?
- */
- public static function update_from_sites_response( $response ) {
- // Bail if there was an error or malformed response.
- if ( is_wp_error( $response ) || ! is_array( $response ) || ! isset( $response['body'] ) ) {
- return false;
- }
-
- $body = wp_remote_retrieve_body( $response );
- if ( is_wp_error( $body ) ) {
- return false;
- }
-
- // Decode the results.
- $results = json_decode( $body, true );
-
- // Bail if there were no results or plan details returned.
- if ( ! is_array( $results ) || ! isset( $results['plan'] ) ) {
- return false;
- }
-
- $current_plan = get_option( self::PLAN_OPTION, array() );
-
- // If the plans don't differ, then there's nothing to do.
- if ( ! empty( $current_plan ) && $current_plan['product_slug'] === $results['plan']['product_slug'] ) {
- return false;
- }
-
- // Set flag for newly purchased plan.
- if ( 'jetpack_free' !== $results['plan']['product_slug'] ) {
- update_option( 'show_welcome_for_new_plan', true );
- }
-
- // Store the new plan in an option and return true if updated.
- $result = update_option( self::PLAN_OPTION, $results['plan'], true );
- if ( ! $result ) {
- // If we got to this point, then we know we need to update. So, assume there is an issue
- // with caching. To fix that issue, we can delete the current option and then update.
- delete_option( self::PLAN_OPTION );
- $result = update_option( self::PLAN_OPTION, $results['plan'], true );
- }
-
- if ( $result ) {
- // Reset the cache since we've just updated the plan.
- self::$active_plan_cache = null;
- }
-
- return $result;
- }
-
- /**
- * Make an API call to WordPress.com for plan status
- *
- * @uses Jetpack_Options::get_option()
- * @uses Jetpack_Client::wpcom_json_api_request_as_blog()
- * @uses update_option()
- *
- * @access public
- * @static
- *
- * @return bool True if plan is updated, false if no update
- */
- public static function refresh_from_wpcom() {
- // Make the API request.
- $request = sprintf( '/sites/%d', Jetpack_Options::get_option( 'id' ) );
- $response = Jetpack_Client::wpcom_json_api_request_as_blog( $request, '1.1' );
-
- return self::update_from_sites_response( $response );
- }
-
- /**
- * Get the plan that this Jetpack site is currently using.
- *
- * @uses get_option()
- *
- * @access public
- * @static
- *
- * @return array Active Jetpack plan details
- */
- public static function get() {
- // this can be expensive to compute so we cache for the duration of a request.
- if ( is_array( self::$active_plan_cache ) && ! empty( self::$active_plan_cache ) ) {
- return self::$active_plan_cache;
- }
-
- $plan = get_option( self::PLAN_OPTION, array() );
-
- // Set the default options.
- $plan = wp_parse_args(
- $plan,
- array(
- 'product_slug' => 'jetpack_free',
- 'class' => 'free',
- 'features' => array(
- 'active' => array(),
- ),
- )
- );
-
- $supports = array();
-
- // Define what paid modules are supported by personal plans.
- $personal_plans = array(
- 'jetpack_personal',
- 'jetpack_personal_monthly',
- 'personal-bundle',
- 'personal-bundle-2y',
- );
-
- if ( in_array( $plan['product_slug'], $personal_plans, true ) ) {
- // special support value, not a module but a separate plugin.
- $supports[] = 'akismet';
- $plan['class'] = 'personal';
- }
-
- // Define what paid modules are supported by premium plans.
- $premium_plans = array(
- 'jetpack_premium',
- 'jetpack_premium_monthly',
- 'value_bundle',
- 'value_bundle-2y',
- );
-
- if ( in_array( $plan['product_slug'], $premium_plans, true ) ) {
- $supports[] = 'akismet';
- $supports[] = 'simple-payments';
- $supports[] = 'vaultpress';
- $supports[] = 'videopress';
- $plan['class'] = 'premium';
- }
-
- // Define what paid modules are supported by professional plans.
- $business_plans = array(
- 'jetpack_business',
- 'jetpack_business_monthly',
- 'business-bundle',
- 'business-bundle-2y',
- 'ecommerce-bundle',
- 'ecommerce-bundle-2y',
- 'vip',
- );
-
- if ( in_array( $plan['product_slug'], $business_plans, true ) ) {
- $supports[] = 'akismet';
- $supports[] = 'simple-payments';
- $supports[] = 'vaultpress';
- $supports[] = 'videopress';
- $plan['class'] = 'business';
- }
-
- // get available features.
- foreach ( Jetpack::get_available_modules() as $module_slug ) {
- $module = Jetpack::get_module( $module_slug );
- if ( ! isset( $module ) || ! is_array( $module ) ) {
- continue;
- }
- if ( in_array( 'free', $module['plan_classes'], true ) || in_array( $plan['class'], $module['plan_classes'], true ) ) {
- $supports[] = $module_slug;
- }
- }
-
- $plan['supports'] = $supports;
-
- self::$active_plan_cache = $plan;
-
- return $plan;
- }
-
- /**
- * Determine whether the active plan supports a particular feature
- *
- * @uses Jetpack_Plan::get()
- *
- * @access public
- * @static
- *
- * @param string $feature The module or feature to check.
- *
- * @return bool True if plan supports feature, false if not
- */
- public static function supports( $feature ) {
- $plan = self::get();
-
- // Manually mapping WordPress.com features to Jetpack module slugs.
- foreach ( $plan['features']['active'] as $wpcom_feature ) {
- switch ( $wpcom_feature ) {
- case 'wordads-jetpack':
- // WordAds are supported for this site.
- if ( 'wordads' === $feature ) {
- return true;
- }
- break;
- }
- }
-
- if (
- in_array( $feature, $plan['supports'], true )
- || in_array( $feature, $plan['features']['active'], true )
- ) {
- return true;
- }
-
- return false;
- }
-}
diff --git a/plugins/jetpack/class.jetpack-post-images.php b/plugins/jetpack/class.jetpack-post-images.php
deleted file mode 100644
index f0119c14..00000000
--- a/plugins/jetpack/class.jetpack-post-images.php
+++ /dev/null
@@ -1,790 +0,0 @@
-<?php
-
-/**
- * Useful for finding an image to display alongside/in representation of a specific post.
- *
- * Includes a few different methods, all of which return a similar-format array containing
- * details of any images found. Everything can (should) be called statically, it's just a
- * function-bucket. You can also call Jetpack_PostImages::get_image() to cycle through all of the methods until
- * one of them finds something useful.
- *
- * This file is included verbatim in Jetpack
- */
-class Jetpack_PostImages {
- /**
- * If a slideshow is embedded within a post, then parse out the images involved and return them
- */
- static function from_slideshow( $post_id, $width = 200, $height = 200 ) {
- $images = array();
-
- $post = get_post( $post_id );
-
- if ( ! $post ) {
- return $images;
- }
-
- if ( ! empty( $post->post_password ) ) {
- return $images;
- }
-
- if ( false === has_shortcode( $post->post_content, 'slideshow' ) ) {
- return $images; // no slideshow - bail
- }
-
- $permalink = get_permalink( $post->ID );
-
- // Mechanic: Somebody set us up the bomb
- $old_post = $GLOBALS['post'];
- $GLOBALS['post'] = $post;
- $old_shortcodes = $GLOBALS['shortcode_tags'];
- $GLOBALS['shortcode_tags'] = array( 'slideshow' => $old_shortcodes['slideshow'] );
-
- // Find all the slideshows
- preg_match_all( '/' . get_shortcode_regex() . '/sx', $post->post_content, $slideshow_matches, PREG_SET_ORDER );
-
- ob_start(); // The slideshow shortcode handler calls wp_print_scripts and wp_print_styles... not too happy about that
-
- foreach ( $slideshow_matches as $slideshow_match ) {
- $slideshow = do_shortcode_tag( $slideshow_match );
- if ( false === $pos = stripos( $slideshow, 'jetpack-slideshow' ) ) // must be something wrong - or we changed the output format in which case none of the following will work
- continue;
- $start = strpos( $slideshow, '[', $pos );
- $end = strpos( $slideshow, ']', $start );
- $post_images = json_decode( wp_specialchars_decode( str_replace( "'", '"', substr( $slideshow, $start, $end - $start + 1 ) ), ENT_QUOTES ) ); // parse via JSON
- // If the JSON didn't decode don't try and act on it.
- if ( is_array( $post_images ) ) {
- foreach ( $post_images as $post_image ) {
- if ( !$post_image_id = absint( $post_image->id ) )
- continue;
-
- $meta = wp_get_attachment_metadata( $post_image_id );
-
- // Must be larger than 200x200 (or user-specified)
- if ( !isset( $meta['width'] ) || $meta['width'] < $width )
- continue;
- if ( !isset( $meta['height'] ) || $meta['height'] < $height )
- continue;
-
- $url = wp_get_attachment_url( $post_image_id );
-
- $images[] = array(
- 'type' => 'image',
- 'from' => 'slideshow',
- 'src' => $url,
- 'src_width' => $meta['width'],
- 'src_height' => $meta['height'],
- 'href' => $permalink,
- );
- }
- }
- }
- ob_end_clean();
-
- // Operator: Main screen turn on
- $GLOBALS['shortcode_tags'] = $old_shortcodes;
- $GLOBALS['post'] = $old_post;
-
- return $images;
- }
-
- /**
- * If a gallery is detected, then get all the images from it.
- */
- static function from_gallery( $post_id ) {
- $images = array();
-
- $post = get_post( $post_id );
-
- if ( ! $post ) {
- return $images;
- }
-
- if ( ! empty( $post->post_password ) ) {
- return $images;
- }
-
- $permalink = get_permalink( $post->ID );
-
- /**
- * Juggle global post object because the gallery shortcode uses the
- * global object.
- *
- * See core ticket:
- * https://core.trac.wordpress.org/ticket/39304
- */
- if ( isset( $GLOBALS['post'] ) ) {
- $juggle_post = $GLOBALS['post'];
- $GLOBALS['post'] = $post;
- $galleries = get_post_galleries( $post->ID, false );
- $GLOBALS['post'] = $juggle_post;
- } else {
- $GLOBALS['post'] = $post;
- $galleries = get_post_galleries( $post->ID, false );
- unset( $GLOBALS['post'] );
- }
-
- foreach ( $galleries as $gallery ) {
- if ( isset( $gallery['type'] ) && 'slideshow' === $gallery['type'] && ! empty( $gallery['ids'] ) ) {
- $image_ids = explode( ',', $gallery['ids'] );
- $image_size = isset( $gallery['size'] ) ? $gallery['size'] : 'thumbnail';
- foreach ( $image_ids as $image_id ) {
- $image = wp_get_attachment_image_src( $image_id, $image_size );
- if ( ! empty( $image[0] ) ) {
- list( $raw_src ) = explode( '?', $image[0] ); // pull off any Query string (?w=250)
- $raw_src = wp_specialchars_decode( $raw_src ); // rawify it
- $raw_src = esc_url_raw( $raw_src ); // clean it
- $images[] = array(
- 'type' => 'image',
- 'from' => 'gallery',
- 'src' => $raw_src,
- 'href' => $permalink,
- );
- }
- }
- } elseif ( ! empty( $gallery['src'] ) ) {
- foreach ( $gallery['src'] as $src ) {
- list( $raw_src ) = explode( '?', $src ); // pull off any Query string (?w=250)
- $raw_src = wp_specialchars_decode( $raw_src ); // rawify it
- $raw_src = esc_url_raw( $raw_src ); // clean it
- $images[] = array(
- 'type' => 'image',
- 'from' => 'gallery',
- 'src' => $raw_src,
- 'href' => $permalink,
- );
- }
- }
- }
-
- return $images;
- }
-
- /**
- * Get attachment images for a specified post and return them. Also make sure
- * their dimensions are at or above a required minimum.
- */
- static function from_attachment( $post_id, $width = 200, $height = 200 ) {
- $images = array();
-
- $post = get_post( $post_id );
-
- if ( ! empty( $post->post_password ) ) {
- return $images;
- }
-
- $post_images = get_posts( array(
- 'post_parent' => $post_id, // Must be children of post
- 'numberposts' => 5, // No more than 5
- 'post_type' => 'attachment', // Must be attachments
- 'post_mime_type' => 'image', // Must be images
- 'suppress_filters' => false,
- ) );
-
- if ( ! $post_images ) {
- return $images;
- }
-
- $permalink = get_permalink( $post_id );
-
- foreach ( $post_images as $post_image ) {
- $current_image = self::get_attachment_data( $post_image->ID, $permalink, $width, $height );
- if ( false !== $current_image ) {
- $images[] = $current_image;
- }
- }
-
- /*
- * We only want to pass back attached images that were actually inserted.
- * We can load up all the images found in the HTML source and then
- * compare URLs to see if an image is attached AND inserted.
- */
- $html_images = self::from_html( $post_id );
- $inserted_images = array();
-
- foreach( $html_images as $html_image ) {
- $src = parse_url( $html_image['src'] );
- // strip off any query strings from src
- if( ! empty( $src['scheme'] ) && ! empty( $src['host'] ) ) {
- $inserted_images[] = $src['scheme'] . '://' . $src['host'] . $src['path'];
- } elseif( ! empty( $src['host'] ) ) {
- $inserted_images[] = set_url_scheme( 'http://' . $src['host'] . $src['path'] );
- } else {
- $inserted_images[] = site_url( '/' ) . $src['path'];
- }
- }
- foreach( $images as $i => $image ) {
- if ( !in_array( $image['src'], $inserted_images ) )
- unset( $images[$i] );
- }
-
- return $images;
- }
-
- /**
- * Check if a Featured Image is set for this post, and return it in a similar
- * format to the other images?_from_*() methods.
- * @param int $post_id The post ID to check
- * @return Array containing details of the Featured Image, or empty array if none.
- */
- static function from_thumbnail( $post_id, $width = 200, $height = 200 ) {
- $images = array();
-
- $post = get_post( $post_id );
-
- if ( ! empty( $post->post_password ) ) {
- return $images;
- }
-
- if ( 'attachment' === get_post_type( $post ) && wp_attachment_is_image( $post ) ) {
- $thumb = $post_id;
- } else {
- $thumb = get_post_thumbnail_id( $post );
- }
-
- if ( $thumb ) {
- $meta = wp_get_attachment_metadata( $thumb );
- // Must be larger than requested minimums
- if ( !isset( $meta['width'] ) || $meta['width'] < $width )
- return $images;
- if ( !isset( $meta['height'] ) || $meta['height'] < $height )
- return $images;
-
- $too_big = ( ( ! empty( $meta['width'] ) && $meta['width'] > 1200 ) || ( ! empty( $meta['height'] ) && $meta['height'] > 1200 ) );
-
- if (
- $too_big &&
- (
- ( method_exists( 'Jetpack', 'is_module_active' ) && Jetpack::is_module_active( 'photon' ) ) ||
- ( defined( 'IS_WPCOM' ) && IS_WPCOM )
- )
- ) {
- $img_src = wp_get_attachment_image_src( $thumb, array( 1200, 1200 ) );
- } else {
- $img_src = wp_get_attachment_image_src( $thumb, 'full' );
- }
- if ( ! is_array( $img_src ) ) {
- // If wp_get_attachment_image_src returns false but we know that there should be an image that could be used.
- // we try a bit harder and user the data that we have.
- $thumb_post_data = get_post( $thumb );
- $img_src = array( $thumb_post_data->guid, $meta['width'], $meta['height'] );
- }
-
- $url = $img_src[0];
- $images = array( array( // Other methods below all return an array of arrays
- 'type' => 'image',
- 'from' => 'thumbnail',
- 'src' => $url,
- 'src_width' => $img_src[1],
- 'src_height' => $img_src[2],
- 'href' => get_permalink( $thumb ),
- 'alt_text' => self::get_alt_text( $thumb ),
- ) );
-
- }
-
- if ( empty( $images ) && ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ) {
- $meta_thumbnail = get_post_meta( $post_id, '_jetpack_post_thumbnail', true );
- if ( ! empty( $meta_thumbnail ) ) {
- if ( ! isset( $meta_thumbnail['width'] ) || $meta_thumbnail['width'] < $width ) {
- return $images;
- }
-
- if ( ! isset( $meta_thumbnail['height'] ) || $meta_thumbnail['height'] < $height ) {
- return $images;
- }
-
- $images = array( array( // Other methods below all return an array of arrays
- 'type' => 'image',
- 'from' => 'thumbnail',
- 'src' => $meta_thumbnail['URL'],
- 'src_width' => $meta_thumbnail['width'],
- 'src_height' => $meta_thumbnail['height'],
- 'href' => $meta_thumbnail['URL'],
- 'alt_text' => self::get_alt_text( $thumb ),
- ) );
- }
- }
-
- return $images;
- }
-
- /**
- * Get images from Gutenberg Image blocks.
- *
- * @since 6.9.0
- *
- * @param mixed $html_or_id The HTML string to parse for images, or a post id.
- * @param int $width Minimum Image width.
- * @param int $height Minimum Image height.
- */
- public static function from_blocks( $html_or_id, $width = 200, $height = 200 ) {
- $images = array();
-
- $html_info = self::get_post_html( $html_or_id );
-
- if ( empty( $html_info['html'] ) ) {
- return $images;
- }
-
- // Look for block information in the HTML.
- $blocks = parse_blocks( $html_info['html'] );
- if ( empty( $blocks ) ) {
- return $images;
- }
-
- foreach ( $blocks as $block ) {
- /**
- * Parse content from Core Image blocks.
- * If it is an image block for an image hosted on our site, it will have an ID.
- * If it does not have an ID, let `from_html` parse that content later,
- * and extract an image if it has size parameters.
- */
- if (
- 'core/image' === $block['blockName']
- && ! empty( $block['attrs']['id'] )
- ) {
- $images[] = self::get_attachment_data( $block['attrs']['id'], $html_info['post_url'], $width, $height );
- }
-
- /**
- * Parse content from Core Gallery blocks and Jetpack's Tiled Gallery blocks.
- * Gallery blocks include the ID of each one of the images in the gallery.
- */
- if (
- ( 'core/gallery' === $block['blockName'] || 'jetpack/tiled-gallery' === $block['blockName'] )
- && ! empty( $block['attrs']['ids'] )
- ) {
- foreach ( $block['attrs']['ids'] as $img_id ) {
- $images[] = self::get_attachment_data( $img_id, $html_info['post_url'], $width, $height );
- }
- }
- }
-
- /**
- * Returning a filtered array because get_attachment_data returns false
- * for unsuccessful attempts.
- */
- return array_filter( $images );
- }
-
- /**
- * Very raw -- just parse the HTML and pull out any/all img tags and return their src
- *
- * @param mixed $html_or_id The HTML string to parse for images, or a post id.
- * @param int $width Minimum Image width.
- * @param int $height Minimum Image height.
- *
- * @uses DOMDocument
- *
- * @return Array containing images
- */
- static function from_html( $html_or_id, $width = 200, $height = 200 ) {
- $images = array();
-
- $html_info = self::get_post_html( $html_or_id );
-
- if ( empty( $html_info['html'] ) ) {
- return $images;
- }
-
- // Do not go any further if DOMDocument is disabled on the server.
- if ( ! class_exists( 'DOMDocument' ) ) {
- return $images;
- }
-
- // Let's grab all image tags from the HTML.
- $dom_doc = new DOMDocument;
-
- // The @ is not enough to suppress errors when dealing with libxml,
- // we have to tell it directly how we want to handle errors.
- libxml_use_internal_errors( true );
- @$dom_doc->loadHTML( $html_info['html'] );
- libxml_use_internal_errors( false );
-
- $image_tags = $dom_doc->getElementsByTagName( 'img' );
-
- // For each image Tag, make sure it can be added to the $images array, and add it.
- foreach ( $image_tags as $image_tag ) {
- $img_src = $image_tag->getAttribute( 'src' );
-
- if ( empty( $img_src ) ) {
- continue;
- }
-
- // Do not grab smiley images that were automatically created by WP when entering text smilies.
- if ( stripos( $img_src, '/smilies/' ) ) {
- continue;
- }
-
- $meta = array(
- 'width' => (int) $image_tag->getAttribute( 'width' ),
- 'height' => (int) $image_tag->getAttribute( 'height' ),
- 'alt_text' => $image_tag->getAttribute( 'alt' ),
- );
-
- /**
- * Filters the switch to ignore minimum image size requirements. Can be used
- * to add custom logic to image dimensions, like only enforcing one of the dimensions,
- * or disabling it entirely.
- *
- * @since 6.4.0
- *
- * @param bool $ignore Should the image dimensions be ignored?
- * @param array $meta Array containing image dimensions parsed from the markup.
- */
- $ignore_dimensions = apply_filters( 'jetpack_postimages_ignore_minimum_dimensions', false, $meta );
-
- // Must be larger than 200x200 (or user-specified).
- if (
- ! $ignore_dimensions
- && (
- empty( $meta['width'] )
- || empty( $meta['height'] )
- || $meta['width'] < $width
- || $meta['height'] < $height
- )
- ) {
- continue;
- }
-
- $images[] = array(
- 'type' => 'image',
- 'from' => 'html',
- 'src' => $img_src,
- 'src_width' => $meta['width'],
- 'src_height' => $meta['height'],
- 'href' => $html_info['post_url'],
- 'alt_text' => $meta['alt_text'],
- );
- }
- return $images;
- }
-
- /**
- * @param int $post_id The post ID to check
- * @param int $size
- * @return Array containing details of the image, or empty array if none.
- */
- static function from_blavatar( $post_id, $size = 96 ) {
-
- $permalink = get_permalink( $post_id );
-
- if ( function_exists( 'blavatar_domain' ) && function_exists( 'blavatar_exists' ) && function_exists( 'blavatar_url' ) ) {
- $domain = blavatar_domain( $permalink );
-
- if ( ! blavatar_exists( $domain ) ) {
- return array();
- }
-
- $url = blavatar_url( $domain, 'img', $size );
- } else {
- $url = get_site_icon_url( $size );
- if ( ! $url ) {
- return array();
- }
- }
-
- return array( array(
- 'type' => 'image',
- 'from' => 'blavatar',
- 'src' => $url,
- 'src_width' => $size,
- 'src_height' => $size,
- 'href' => $permalink,
- 'alt_text' => '',
- ) );
- }
-
- /**
- * Gets a post image from the author avatar.
- *
- * @param int $post_id The post ID to check.
- * @param int $size The size of the avatar to get.
- * @param string $default The default image to use.
- * @return Array containing details of the image, or empty array if none.
- */
- static function from_gravatar( $post_id, $size = 96, $default = false ) {
- $post = get_post( $post_id );
- $permalink = get_permalink( $post_id );
-
- if ( function_exists( 'wpcom_get_avatar_url' ) ) {
- $url = wpcom_get_avatar_url( $post->post_author, $size, $default, true );
- if ( $url && is_array( $url ) ) {
- $url = $url[0];
- }
- } else {
- $url = get_avatar_url( $post->post_author, array(
- 'size' => $size,
- 'default' => $default,
- ) );
- }
-
- return array(
- array(
- 'type' => 'image',
- 'from' => 'gravatar',
- 'src' => $url,
- 'src_width' => $size,
- 'src_height' => $size,
- 'href' => $permalink,
- 'alt_text' => '',
- ),
- );
- }
-
- /**
- * Run through the different methods that we have available to try to find a single good
- * display image for this post.
- * @param int $post_id
- * @param array $args Other arguments (currently width and height required for images where possible to determine)
- * @return Array containing details of the best image to be used
- */
- static function get_image( $post_id, $args = array() ) {
- $image = '';
-
- /**
- * Fires before we find a single good image for a specific post.
- *
- * @since 2.2.0
- *
- * @param int $post_id Post ID.
- */
- do_action( 'jetpack_postimages_pre_get_image', $post_id );
- $media = self::get_images( $post_id, $args );
-
-
- if ( is_array( $media ) ) {
- foreach ( $media as $item ) {
- if ( 'image' == $item['type'] ) {
- $image = $item;
- break;
- }
- }
- }
-
- /**
- * Fires after we find a single good image for a specific post.
- *
- * @since 2.2.0
- *
- * @param int $post_id Post ID.
- */
- do_action( 'jetpack_postimages_post_get_image', $post_id );
-
- return $image;
- }
-
- /**
- * Get an array containing a collection of possible images for this post, stopping once we hit a method
- * that returns something useful.
- * @param int $post_id
- * @param array $args Optional args, see defaults list for details
- * @return Array containing images that would be good for representing this post
- */
- static function get_images( $post_id, $args = array() ) {
- // Figure out which image to attach to this post.
- $media = false;
-
- /**
- * Filters the array of images that would be good for a specific post.
- * This filter is applied before options ($args) filter the original array.
- *
- * @since 2.0.0
- *
- * @param array $media Array of images that would be good for a specific post.
- * @param int $post_id Post ID.
- * @param array $args Array of options to get images.
- */
- $media = apply_filters( 'jetpack_images_pre_get_images', $media, $post_id, $args );
- if ( $media )
- return $media;
-
- $defaults = array(
- 'width' => 200, // Required minimum width (if possible to determine)
- 'height' => 200, // Required minimum height (if possible to determine)
-
- 'fallback_to_avatars' => false, // Optionally include Blavatar and Gravatar (in that order) in the image stack
- 'avatar_size' => 96, // Used for both Grav and Blav
- 'gravatar_default' => false, // Default image to use if we end up with no Gravatar
-
- 'from_thumbnail' => true, // Use these flags to specify which methods to use to find an image
- 'from_slideshow' => true,
- 'from_gallery' => true,
- 'from_attachment' => true,
- 'from_blocks' => true,
- 'from_html' => true,
-
- 'html_content' => '' // HTML string to pass to from_html()
- );
- $args = wp_parse_args( $args, $defaults );
-
- $media = false;
- if ( $args['from_thumbnail'] )
- $media = self::from_thumbnail( $post_id, $args['width'], $args['height'] );
- if ( !$media && $args['from_slideshow'] )
- $media = self::from_slideshow( $post_id, $args['width'], $args['height'] );
- if ( !$media && $args['from_gallery'] )
- $media = self::from_gallery( $post_id );
- if ( !$media && $args['from_attachment'] )
- $media = self::from_attachment( $post_id, $args['width'], $args['height'] );
- if ( ! $media && $args['from_blocks'] ) {
- if ( empty( $args['html_content'] ) )
- $media = self::from_blocks( $post_id, $args['width'], $args['height'] ); // Use the post_id, which will load the content
- else
- $media = self::from_blocks( $args['html_content'], $args['width'], $args['height'] ); // If html_content is provided, use that
- }
- if ( !$media && $args['from_html'] ) {
- if ( empty( $args['html_content'] ) )
- $media = self::from_html( $post_id, $args['width'], $args['height'] ); // Use the post_id, which will load the content
- else
- $media = self::from_html( $args['html_content'], $args['width'], $args['height'] ); // If html_content is provided, use that
- }
-
- if ( !$media && $args['fallback_to_avatars'] ) {
- $media = self::from_blavatar( $post_id, $args['avatar_size'] );
- if ( !$media )
- $media = self::from_gravatar( $post_id, $args['avatar_size'], $args['gravatar_default'] );
- }
-
- /**
- * Filters the array of images that would be good for a specific post.
- * This filter is applied after options ($args) filter the original array.
- *
- * @since 2.0.0
- *
- * @param array $media Array of images that would be good for a specific post.
- * @param int $post_id Post ID.
- * @param array $args Array of options to get images.
- */
- return apply_filters( 'jetpack_images_get_images', $media, $post_id, $args );
- }
-
- /**
- * Takes an image URL and pixel dimensions then returns a URL for the
- * resized and cropped image.
- *
- * @param string $src
- * @param int $dimension
- * @return string Transformed image URL
- */
- static function fit_image_url( $src, $width, $height ) {
- $width = (int) $width;
- $height = (int) $height;
-
- if ( $width < 1 || $height < 1 ) {
- return $src;
- }
-
- // See if we should bypass WordPress.com SaaS resizing
- if ( has_filter( 'jetpack_images_fit_image_url_override' ) ) {
- /**
- * Filters the image URL used after dimensions are set by Photon.
- *
- * @since 3.3.0
- *
- * @param string $src Image URL.
- * @param int $width Image width.
- * @param int $width Image height.
- */
- return apply_filters( 'jetpack_images_fit_image_url_override', $src, $width, $height );
- }
-
- // If WPCOM hosted image use native transformations
- $img_host = parse_url( $src, PHP_URL_HOST );
- if ( '.files.wordpress.com' == substr( $img_host, -20 ) ) {
- return add_query_arg( array( 'w' => $width, 'h' => $height, 'crop' => 1 ), set_url_scheme( $src ) );
- }
-
- // Use Photon magic
- if( function_exists( 'jetpack_photon_url' ) ) {
- return jetpack_photon_url( $src, array( 'resize' => "$width,$height" ) );
- }
-
- // Arg... no way to resize image using WordPress.com infrastructure!
- return $src;
- }
-
- /**
- * Get HTML from given post content.
- *
- * @since 6.9.0
- *
- * @param mixed $html_or_id The HTML string to parse for images, or a post id.
- *
- * @return array $html_info {
- * @type string $html Post content.
- * @type string $post_url Post URL.
- * }
- */
- static function get_post_html( $html_or_id ) {
- if ( is_numeric( $html_or_id ) ) {
- $post = get_post( $html_or_id );
-
- if ( empty( $post ) || ! empty( $post->post_password ) ) {
- return '';
- }
-
- $html_info = array(
- 'html' => $post->post_content, // DO NOT apply the_content filters here, it will cause loops.
- 'post_url' => get_permalink( $post->ID ),
- );
- } else {
- $html_info = array(
- 'html' => $html_or_id,
- 'post_url' => '',
- );
- }
- return $html_info;
- }
-
- /**
- * Get info about a WordPress attachment.
- *
- * @since 6.9.0
- *
- * @param int $attachment_id Attachment ID.
- * @param string $post_url URL of the post, if we have one.
- * @param int $width Minimum Image width.
- * @param int $height Minimum Image height.
- * @return array|bool Image data or false if unavailable.
- */
- public static function get_attachment_data( $attachment_id, $post_url = '', $width, $height ) {
- if ( empty( $attachment_id ) ) {
- return false;
- }
-
- $meta = wp_get_attachment_metadata( $attachment_id );
-
- // The image must be larger than 200x200.
- if ( ! isset( $meta['width'] ) || $meta['width'] < $width ) {
- return false;
- }
- if ( ! isset( $meta['height'] ) || $meta['height'] < $height ) {
- return false;
- }
-
- $url = wp_get_attachment_url( $attachment_id );
-
- return array(
- 'type' => 'image',
- 'from' => 'attachment',
- 'src' => $url,
- 'src_width' => $meta['width'],
- 'src_height' => $meta['height'],
- 'href' => $post_url,
- 'alt_text' => self::get_alt_text( $attachment_id ),
- );
- }
-
- /**
- * Get the alt text for an image or other media from the Media Library.
- *
- * @since 7.1
- *
- * @param int $attachment_id The Post ID of the media.
- * @return string The alt text value or an emptry string.
- */
- public static function get_alt_text( $attachment_id ) {
- return get_post_meta( $attachment_id, '_wp_attachment_image_alt', true );
- }
-}
diff --git a/plugins/jetpack/class.jetpack-signature.php b/plugins/jetpack/class.jetpack-signature.php
deleted file mode 100644
index 8d925d7d..00000000
--- a/plugins/jetpack/class.jetpack-signature.php
+++ /dev/null
@@ -1,266 +0,0 @@
-<?php
-
-// These constants can be set in wp-config.php to ensure sites behind proxies will still work.
-// Setting these constants, though, is *not* the preferred method. It's better to configure
-// the proxy to send the X-Forwarded-Port header.
-defined( 'JETPACK_SIGNATURE__HTTP_PORT' ) or define( 'JETPACK_SIGNATURE__HTTP_PORT' , 80 );
-defined( 'JETPACK_SIGNATURE__HTTPS_PORT' ) or define( 'JETPACK_SIGNATURE__HTTPS_PORT', 443 );
-
-class Jetpack_Signature {
- public $token;
- public $secret;
-
- function __construct( $access_token, $time_diff = 0 ) {
- $secret = explode( '.', $access_token );
- if ( 2 != count( $secret ) )
- return;
-
- $this->token = $secret[0];
- $this->secret = $secret[1];
- $this->time_diff = $time_diff;
- }
-
- function sign_current_request( $override = array() ) {
- if ( isset( $override['scheme'] ) ) {
- $scheme = $override['scheme'];
- if ( !in_array( $scheme, array( 'http', 'https' ) ) ) {
- return new Jetpack_Error( 'invalid_scheme', 'Invalid URL scheme' );
- }
- } else {
- if ( is_ssl() ) {
- $scheme = 'https';
- } else {
- $scheme = 'http';
- }
- }
-
- $host_port = isset( $_SERVER['HTTP_X_FORWARDED_PORT'] ) ? $_SERVER['HTTP_X_FORWARDED_PORT'] : $_SERVER['SERVER_PORT'];
-
- /**
- * Note: This port logic is tested in the Jetpack_Cxn_Tests->test__server_port_value() test.
- * Please update the test if any changes are made in this logic.
- */
- if ( is_ssl() ) {
- // 443: Standard Port
- // 80: Assume we're behind a proxy without X-Forwarded-Port. Hardcoding "80" here means most sites
- // with SSL termination proxies (self-served, Cloudflare, etc.) don't need to fiddle with
- // the JETPACK_SIGNATURE__HTTPS_PORT constant. The code also implies we can't talk to a
- // site at https://example.com:80/ (which would be a strange configuration).
- // JETPACK_SIGNATURE__HTTPS_PORT: Set this constant in wp-config.php to the back end webserver's port
- // if the site is behind a proxy running on port 443 without
- // X-Forwarded-Port and the back end's port is *not* 80. It's better,
- // though, to configure the proxy to send X-Forwarded-Port.
- $port = in_array( $host_port, array( 443, 80, JETPACK_SIGNATURE__HTTPS_PORT ) ) ? '' : $host_port;
- } else {
- // 80: Standard Port
- // JETPACK_SIGNATURE__HTTPS_PORT: Set this constant in wp-config.php to the back end webserver's port
- // if the site is behind a proxy running on port 80 without
- // X-Forwarded-Port. It's better, though, to configure the proxy to
- // send X-Forwarded-Port.
- $port = in_array( $host_port, array( 80, JETPACK_SIGNATURE__HTTP_PORT ) ) ? '' : $host_port;
- }
-
- $url = "{$scheme}://{$_SERVER['HTTP_HOST']}:{$port}" . stripslashes( $_SERVER['REQUEST_URI'] );
-
- if ( array_key_exists( 'body', $override ) && ! empty( $override['body'] ) ) {
- $body = $override['body'];
- } else if ( 'POST' == strtoupper( $_SERVER['REQUEST_METHOD'] ) ) {
- $body = isset( $GLOBALS['HTTP_RAW_POST_DATA'] ) ? $GLOBALS['HTTP_RAW_POST_DATA'] : null;
-
- // Convert the $_POST to the body, if the body was empty. This is how arrays are hashed
- // and encoded on the Jetpack side.
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- if ( empty( $body ) && is_array( $_POST ) && count( $_POST ) > 0 ) {
- $body = $_POST;
- }
- }
- } else if ( 'PUT' == strtoupper( $_SERVER['REQUEST_METHOD'] ) ) {
- // This is a little strange-looking, but there doesn't seem to be another way to get the PUT body
- $raw_put_data = file_get_contents( 'php://input' );
- parse_str( $raw_put_data, $body );
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $put_data = json_decode( $raw_put_data, true );
- if ( is_array( $put_data ) && count( $put_data ) > 0 ) {
- $body = $put_data;
- }
- }
- } else {
- $body = null;
- }
-
- if ( empty( $body ) ) {
- $body = null;
- }
-
- $a = array();
- foreach ( array( 'token', 'timestamp', 'nonce', 'body-hash' ) as $parameter ) {
- if ( isset( $override[$parameter] ) ) {
- $a[$parameter] = $override[$parameter];
- } else {
- $a[$parameter] = isset( $_GET[$parameter] ) ? stripslashes( $_GET[$parameter] ) : '';
- }
- }
-
- $method = isset( $override['method'] ) ? $override['method'] : $_SERVER['REQUEST_METHOD'];
- return $this->sign_request( $a['token'], $a['timestamp'], $a['nonce'], $a['body-hash'], $method, $url, $body, true );
- }
-
- // body_hash v. body-hash is annoying. Refactor to accept an array?
- function sign_request( $token = '', $timestamp = 0, $nonce = '', $body_hash = '', $method = '', $url = '', $body = null, $verify_body_hash = true ) {
- if ( !$this->secret ) {
- return new Jetpack_Error( 'invalid_secret', 'Invalid secret' );
- }
-
- if ( !$this->token ) {
- return new Jetpack_Error( 'invalid_token', 'Invalid token' );
- }
-
- list( $token ) = explode( '.', $token );
-
- if ( 0 !== strpos( $token, "$this->token:" ) ) {
- return new Jetpack_Error( 'token_mismatch', 'Incorrect token' );
- }
-
- // If we got an array at this point, let's encode it, so we can see what it looks like as a string.
- if ( is_array( $body ) ) {
- if ( count( $body ) > 0 ) {
- $body = json_encode( $body );
-
- } else {
- $body = '';
- }
- }
-
- $required_parameters = array( 'token', 'timestamp', 'nonce', 'method', 'url' );
- if ( !is_null( $body ) ) {
- $required_parameters[] = 'body_hash';
- if ( !is_string( $body ) ) {
- return new Jetpack_Error( 'invalid_body', 'Body is malformed.' );
- }
- }
-
- foreach ( $required_parameters as $required ) {
- if ( !is_scalar( $$required ) ) {
- return new Jetpack_Error( 'invalid_signature', sprintf( 'The required "%s" parameter is malformed.', str_replace( '_', '-', $required ) ) );
- }
-
- if ( !strlen( $$required ) ) {
- return new Jetpack_Error( 'invalid_signature', sprintf( 'The required "%s" parameter is missing.', str_replace( '_', '-', $required ) ) );
- }
- }
-
- if ( empty( $body ) ) {
- if ( $body_hash ) {
- return new Jetpack_Error( 'invalid_body_hash', 'The body hash does not match.' );
- }
- } else {
- if ( $verify_body_hash && jetpack_sha1_base64( $body ) !== $body_hash ) {
- return new Jetpack_Error( 'invalid_body_hash', 'The body hash does not match.' );
- }
- }
-
- $parsed = parse_url( $url );
- if ( !isset( $parsed['host'] ) ) {
- return new Jetpack_Error( 'invalid_signature', sprintf( 'The required "%s" parameter is malformed.', 'url' ) );
- }
-
- if ( !empty( $parsed['port'] ) ) {
- $port = $parsed['port'];
- } else {
- if ( 'http' == $parsed['scheme'] ) {
- $port = 80;
- } else if ( 'https' == $parsed['scheme'] ) {
- $port = 443;
- } else {
- return new Jetpack_Error( 'unknown_scheme_port', "The scheme's port is unknown" );
- }
- }
-
- if ( !ctype_digit( "$timestamp" ) || 10 < strlen( $timestamp ) ) { // If Jetpack is around in 275 years, you can blame mdawaffe for the bug.
- return new Jetpack_Error( 'invalid_signature', sprintf( 'The required "%s" parameter is malformed.', 'timestamp' ) );
- }
-
- $local_time = $timestamp - $this->time_diff;
- if ( $local_time < time() - 600 || $local_time > time() + 300 ) {
- return new Jetpack_Error( 'invalid_signature', 'The timestamp is too old.' );
- }
-
- if ( 12 < strlen( $nonce ) || preg_match( '/[^a-zA-Z0-9]/', $nonce ) ) {
- return new Jetpack_Error( 'invalid_signature', sprintf( 'The required "%s" parameter is malformed.', 'nonce' ) );
- }
-
- $normalized_request_pieces = array(
- $token,
- $timestamp,
- $nonce,
- $body_hash,
- strtoupper( $method ),
- strtolower( $parsed['host'] ),
- $port,
- $parsed['path'],
- // Normalized Query String
- );
-
- $normalized_request_pieces = array_merge( $normalized_request_pieces, $this->normalized_query_parameters( isset( $parsed['query'] ) ? $parsed['query'] : '' ) );
- $flat_normalized_request_pieces = array();
- foreach ($normalized_request_pieces as $piece) {
- if ( is_array( $piece ) ) {
- foreach ( $piece as $subpiece ) {
- $flat_normalized_request_pieces[] = $subpiece;
- }
- } else {
- $flat_normalized_request_pieces[] = $piece;
- }
- }
- $normalized_request_pieces = $flat_normalized_request_pieces;
-
- $normalized_request_string = join( "\n", $normalized_request_pieces ) . "\n";
-
- return base64_encode( hash_hmac( 'sha1', $normalized_request_string, $this->secret, true ) );
- }
-
- function normalized_query_parameters( $query_string ) {
- parse_str( $query_string, $array );
- if ( get_magic_quotes_gpc() )
- $array = stripslashes_deep( $array );
-
- unset( $array['signature'] );
-
- $names = array_keys( $array );
- $values = array_values( $array );
-
- $names = array_map( array( $this, 'encode_3986' ), $names );
- $values = array_map( array( $this, 'encode_3986' ), $values );
-
- $pairs = array_map( array( $this, 'join_with_equal_sign' ), $names, $values );
-
- sort( $pairs );
-
- return $pairs;
- }
-
- function encode_3986( $string_or_array ) {
- if ( is_array( $string_or_array ) ) {
- return array_map( array( $this, 'encode_3986' ), $string_or_array );
- }
-
- $string_or_array = rawurlencode( $string_or_array );
- return str_replace( '%7E', '~', $string_or_array ); // prior to PHP 5.3, rawurlencode was RFC 1738
- }
-
- function join_with_equal_sign( $name, $value ) {
- if ( is_array( $value ) ) {
- $result = array();
- foreach ( $value as $array_key => $array_value ) {
- $result[] = $name . '[' . $array_key . ']' . '=' . $array_value;
- }
- return $result;
- }
- return "{$name}={$value}";
- }
-}
-
-function jetpack_sha1_base64( $text ) {
- return base64_encode( sha1( $text, true ) );
-}
diff --git a/plugins/jetpack/class.jetpack-tracks.php b/plugins/jetpack/class.jetpack-tracks.php
deleted file mode 100644
index ae361fbe..00000000
--- a/plugins/jetpack/class.jetpack-tracks.php
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-/**
- * Nosara Tracks for Jetpack
- */
-
-require_once( dirname( __FILE__ ) . '/_inc/lib/tracks/client.php' );
-
-class JetpackTracking {
- static $product_name = 'jetpack';
-
- static function track_jetpack_usage() {
- if ( ! Jetpack::jetpack_tos_agreed() ) {
- return;
- }
-
- // For tracking stuff via js/ajax
- add_action( 'admin_enqueue_scripts', array( __CLASS__, 'enqueue_tracks_scripts' ) );
-
- add_action( 'jetpack_activate_module', array( __CLASS__, 'track_activate_module'), 1, 1 );
- add_action( 'jetpack_deactivate_module', array( __CLASS__, 'track_deactivate_module'), 1, 1 );
- add_action( 'jetpack_user_authorized', array( __CLASS__, 'track_user_linked' ) );
- add_action( 'wp_login_failed', array( __CLASS__, 'track_failed_login_attempts' ) );
- }
-
- static function enqueue_tracks_scripts() {
- wp_enqueue_script( 'jptracks', plugins_url( '_inc/lib/tracks/tracks-ajax.js', JETPACK__PLUGIN_FILE ), array(), JETPACK__VERSION, true );
- wp_localize_script( 'jptracks', 'jpTracksAJAX', array(
- 'ajaxurl' => admin_url( 'admin-ajax.php' ),
- 'jpTracksAJAX_nonce' => wp_create_nonce( 'jp-tracks-ajax-nonce' ),
- ) );
- }
-
- /* User has linked their account */
- static function track_user_linked() {
- $user_id = get_current_user_id();
- $anon_id = get_user_meta( $user_id, 'jetpack_tracks_anon_id', true );
-
- if ( $anon_id ) {
- self::record_user_event( '_aliasUser', array( 'anonId' => $anon_id ) );
- delete_user_meta( $user_id, 'jetpack_tracks_anon_id' );
- if ( ! headers_sent() ) {
- setcookie( 'tk_ai', 'expired', time() - 1000 );
- }
- }
-
- $wpcom_user_data = Jetpack::get_connected_user_data( $user_id );
- update_user_meta( $user_id, 'jetpack_tracks_wpcom_id', $wpcom_user_data['ID'] );
-
- self::record_user_event( 'wpa_user_linked', array() );
- }
-
- /* Activated module */
- static function track_activate_module( $module ) {
- self::record_user_event( 'module_activated', array( 'module' => $module ) );
- }
-
- /* Deactivated module */
- static function track_deactivate_module( $module ) {
- self::record_user_event( 'module_deactivated', array( 'module' => $module ) );
- }
-
- /* Failed login attempts */
- static function track_failed_login_attempts( $login ) {
- require_once( JETPACK__PLUGIN_DIR . 'modules/protect/shared-functions.php' );
- self::record_user_event( 'failed_login', array( 'origin_ip' => jetpack_protect_get_ip(), 'login' => $login ) );
- }
-
- static function record_user_event( $event_type, $data= array(), $user = null ) {
-
- if ( ! $user ) {
- $user = wp_get_current_user();
- }
- $site_url = get_option( 'siteurl' );
-
- $data['_via_ua'] = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '';
- $data['_via_ip'] = isset( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : '';
- $data['_lg'] = isset( $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : '';
- $data['blog_url'] = $site_url;
- $data['blog_id'] = Jetpack_Options::get_option( 'id' );
-
- // Top level events should not be namespaced
- if ( '_aliasUser' != $event_type ) {
- $event_type = self::$product_name . '_' . $event_type;
- }
-
- $data['jetpack_version'] = defined( 'JETPACK__VERSION' ) ? JETPACK__VERSION : '0';
-
- return jetpack_tracks_record_event( $user, $event_type, $data );
- }
-}
-
-add_action( 'init', array( 'JetpackTracking', 'track_jetpack_usage' ) );
diff --git a/plugins/jetpack/class.jetpack-twitter-cards.php b/plugins/jetpack/class.jetpack-twitter-cards.php
deleted file mode 100644
index 63d19917..00000000
--- a/plugins/jetpack/class.jetpack-twitter-cards.php
+++ /dev/null
@@ -1,270 +0,0 @@
-<?php
-
-/* Twitter Cards
- *
- * Hooks onto the Open Graph protocol and extends it by adding only the tags
- * we need for twitter cards.
- *
- * @see /wp-content/blog-plugins/open-graph.php
- * @see https://dev.twitter.com/cards/overview
- */
-class Jetpack_Twitter_Cards {
-
- static function twitter_cards_tags( $og_tags ) {
- global $post;
-
- /**
- * Maximum alt text length.
- *
- * @see https://developer.twitter.com/en/docs/tweets/optimize-with-cards/overview/summary-card-with-large-image.html
- */
- $alt_length = 420;
-
- if ( post_password_required() ) {
- return $og_tags;
- }
-
- /** This action is documented in class.jetpack.php */
- if ( apply_filters( 'jetpack_disable_twitter_cards', false ) ) {
- return $og_tags;
- }
-
- /*
- * These tags apply to any page (home, archives, etc)
- */
-
- // If we have information on the author/creator, then include that as well
- if ( ! empty( $post ) && ! empty( $post->post_author ) ) {
- /** This action is documented in modules/sharedaddy/sharing-sources.php */
- $handle = apply_filters( 'jetpack_sharing_twitter_via', '', $post->ID );
- if ( ! empty( $handle ) && ! self::is_default_site_tag( $handle ) ) {
- $og_tags['twitter:creator'] = self::sanitize_twitter_user( $handle );
- }
- }
-
- $site_tag = self::site_tag();
- /** This action is documented in modules/sharedaddy/sharing-sources.php */
- $site_tag = apply_filters( 'jetpack_sharing_twitter_via', $site_tag, ( is_singular() ? $post->ID : null ) );
- /** This action is documented in modules/sharedaddy/sharing-sources.php */
- $site_tag = apply_filters( 'jetpack_twitter_cards_site_tag', $site_tag, $og_tags );
- if ( ! empty( $site_tag ) ) {
- $og_tags['twitter:site'] = self::sanitize_twitter_user( $site_tag );
- }
-
- if ( ! is_singular() || ! empty( $og_tags['twitter:card'] ) ) {
- /**
- * Filter the default Twitter card image, used when no image can be found in a post.
- *
- * @module sharedaddy, publicize
- *
- * @since 5.9.0
- *
- * @param string $str Default image URL.
- */
- $image = apply_filters( 'jetpack_twitter_cards_image_default', '' );
- if ( ! empty( $image ) ) {
- $og_tags['twitter:image'] = $image;
- }
-
- return $og_tags;
- }
-
- $the_title = get_the_title();
- if ( ! $the_title ) {
- $the_title = get_bloginfo( 'name' );
- }
- $og_tags['twitter:text:title'] = $the_title;
-
- /*
- * The following tags only apply to single pages.
- */
-
- $card_type = 'summary';
-
- // Try to give priority to featured images
- if ( class_exists('Jetpack_PostImages') ) {
- $featured = Jetpack_PostImages::from_thumbnail( $post->ID, 240, 240 );
- if ( !empty( $featured ) && count( $featured ) > 0 ) {
- if ( (int) $featured[0]['src_width'] >= 280 && (int) $featured[0]['src_height'] >= 150 ) {
- $card_type = 'summary_large_image';
- $og_tags['twitter:image'] = esc_url( add_query_arg( 'w', 640, $featured[0]['src'] ) );
- } else {
- $og_tags['twitter:image'] = esc_url( add_query_arg( 'w', 240, $featured[0]['src'] ) );
- }
-
- // Add the alt tag if we have one.
- if ( ! empty( $featured[0]['alt_text'] ) ) {
- // Shorten it if it is too long.
- if ( strlen( $featured[0]['alt_text'] ) > $alt_length ) {
- $og_tags['twitter:image:alt'] = esc_attr( mb_substr( $featured[0]['alt_text'], 0, $alt_length ) . '…' );
- } else {
- $og_tags['twitter:image:alt'] = esc_attr( $featured[0]['alt_text'] );
- }
- }
- }
- }
-
- // Only proceed with media analysis if a featured image has not superseded it already.
- if ( empty( $og_tags['twitter:image'] ) && empty( $og_tags['twitter:image:src'] ) ) {
- if ( ! class_exists( 'Jetpack_Media_Summary' ) && defined('IS_WPCOM') && IS_WPCOM ) {
- include( WP_CONTENT_DIR . '/lib/class.wpcom-media-summary.php' );
- }
-
- if ( ! class_exists( 'Jetpack_Media_Summary' ) ) {
- jetpack_require_lib( 'class.media-summary' );
- }
-
- // Test again, class should already be auto-loaded in Jetpack.
- // If not, skip extra media analysis and stick with a summary card
- if ( class_exists( 'Jetpack_Media_Summary' ) ) {
- $extract = Jetpack_Media_Summary::get( $post->ID );
-
- if ( 'gallery' == $extract['type'] ) {
- list( $og_tags, $card_type ) = self::twitter_cards_define_type_based_on_image_count( $og_tags, $extract );
- } elseif ( 'video' == $extract['type'] ) {
- // Leave as summary, but with large pict of poster frame (we know those comply to Twitter's size requirements)
- $card_type = 'summary_large_image';
- $og_tags['twitter:image'] = esc_url( add_query_arg( 'w', 640, $extract['image'] ) );
- } else {
- list( $og_tags, $card_type ) = self::twitter_cards_define_type_based_on_image_count( $og_tags, $extract );
- }
- }
- }
-
- $og_tags['twitter:card'] = $card_type;
-
- // Make sure we have a description for Twitter, their validator isn't happy without some content (single space not valid).
- if ( ! isset( $og_tags['og:description'] ) || '' == trim( $og_tags['og:description'] ) || __('Visit the post for more.', 'jetpack') == $og_tags['og:description'] ) { // empty( trim( $og_tags['og:description'] ) ) isn't valid php
- $has_creator = ( ! empty($og_tags['twitter:creator']) && '@wordpressdotcom' != $og_tags['twitter:creator'] ) ? true : false;
- if ( ! empty( $extract ) && 'video' == $extract['type'] ) { // use $extract['type'] since $card_type is 'summary' for video posts
- /* translators: %s is the post author */
- $og_tags['twitter:description'] = ( $has_creator ) ? sprintf( __( 'Video post by %s.', 'jetpack' ), $og_tags['twitter:creator'] ) : __( 'Video post.', 'jetpack' );
- } else {
- /* translators: %s is the post author */
- $og_tags['twitter:description'] = ( $has_creator ) ? sprintf( __( 'Post by %s.', 'jetpack' ), $og_tags['twitter:creator'] ) : __( 'Visit the post for more.', 'jetpack');
- }
- }
-
- if ( empty( $og_tags['twitter:image'] ) && empty( $og_tags['twitter:image:src'] ) ) {
- /** This action is documented in class.jetpack-twitter-cards.php */
- $image = apply_filters( 'jetpack_twitter_cards_image_default', '' );
- if ( ! empty( $image ) ) {
- $og_tags['twitter:image'] = $image;
- }
- }
-
- return $og_tags;
- }
-
- static function sanitize_twitter_user( $str ) {
- return '@' . preg_replace( '/^@/', '', $str );
- }
-
- static function is_default_site_tag( $site_tag ) {
- return in_array( $site_tag, array( '@wordpressdotcom', '@jetpack', 'wordpressdotcom', 'jetpack' ) );
- }
-
- static function prioritize_creator_over_default_site( $site_tag, $og_tags = array() ) {
- if ( ! empty( $og_tags['twitter:creator'] ) && self::is_default_site_tag( $site_tag ) ) {
- return $og_tags['twitter:creator'];
- }
- return $site_tag;
- }
-
- static function twitter_cards_define_type_based_on_image_count( $og_tags, $extract ) {
- $card_type = 'summary';
- $img_count = $extract['count']['image'];
-
- if ( empty( $img_count ) ) {
-
- // No images, use Blavatar as a thumbnail for the summary type.
- if ( function_exists('blavatar_domain') ) {
- $blavatar_domain = blavatar_domain( site_url() );
- if ( blavatar_exists( $blavatar_domain ) ) {
- $og_tags['twitter:image'] = blavatar_url( $blavatar_domain, 'img', 240 );
- }
- }
-
- // Second fall back, Site Logo
- if ( empty( $og_tags['twitter:image'] ) && ( function_exists( 'jetpack_has_site_logo' ) && jetpack_has_site_logo() ) ) {
- $og_tags['twitter:image'] = jetpack_get_site_logo( 'url' );
- }
-
- // Third fall back, Site Icon
- if ( empty( $og_tags['twitter:image'] ) && has_site_icon() ) {
- $og_tags['twitter:image'] = get_site_icon_url( '240' );
- }
-
- // Not falling back on Gravatar, because there's no way to know if we end up with an auto-generated one.
-
- } elseif ( $img_count && ( 'image' == $extract['type'] || 'gallery' == $extract['type'] ) ) {
- // Test for $extract['type'] to limit to image and gallery, so we don't send a potential fallback image like a Gravatar as a photo post.
- $card_type = 'summary_large_image';
- $og_tags['twitter:image'] = esc_url( add_query_arg( 'w', 1400, ( empty( $extract['images'] ) ) ? $extract['image'] : $extract['images'][0]['url'] ) );
- }
-
- return array( $og_tags, $card_type );
- }
-
- static function twitter_cards_output( $og_tag ) {
- return ( false !== strpos( $og_tag, 'twitter:' ) ) ? preg_replace( '/property="([^"]+)"/', 'name="\1"', $og_tag ) : $og_tag;
- }
-
- static function settings_init() {
- add_settings_section( 'jetpack-twitter-cards-settings', 'Twitter Cards', '__return_false', 'sharing' );
- add_settings_field(
- 'jetpack-twitter-cards-site-tag',
- __( 'Twitter Site Tag', 'jetpack' ),
- array( __CLASS__, 'settings_field' ),
- 'sharing',
- 'jetpack-twitter-cards-settings',
- array(
- 'label_for' => 'jetpack-twitter-cards-site-tag',
- )
- );
- }
-
- static function sharing_global_options() {
- do_settings_fields( 'sharing', 'jetpack-twitter-cards-settings' );
- }
-
- static function site_tag() {
- $site_tag = ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ?
- trim( get_option( 'twitter_via' ) ) :
- Jetpack_Options::get_option_and_ensure_autoload( 'jetpack-twitter-cards-site-tag', '' );
- if ( empty( $site_tag ) ) {
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- return 'wordpressdotcom';
- } else {
- return;
- }
- }
- return $site_tag;
- }
-
- static function settings_field() {
- wp_nonce_field( 'jetpack-twitter-cards-settings', 'jetpack_twitter_cards_nonce', false );
- ?>
- <input type="text" id="jetpack-twitter-cards-site-tag" class="regular-text" name="jetpack-twitter-cards-site-tag" value="<?php echo esc_attr( get_option( 'jetpack-twitter-cards-site-tag' ) ); ?>" />
- <p class="description" style="width: auto;"><?php esc_html_e( 'The Twitter username of the owner of this site\'s domain.', 'jetpack' ); ?></p>
- <?php
- }
-
- static function settings_validate() {
- if ( wp_verify_nonce( $_POST['jetpack_twitter_cards_nonce'], 'jetpack-twitter-cards-settings' ) ) {
- update_option( 'jetpack-twitter-cards-site-tag', trim( ltrim( strip_tags( $_POST['jetpack-twitter-cards-site-tag'] ), '@' ) ) );
- }
- }
-
- static function init() {
- add_filter( 'jetpack_open_graph_tags', array( __CLASS__, 'twitter_cards_tags' ) );
- add_filter( 'jetpack_open_graph_output', array( __CLASS__, 'twitter_cards_output' ) );
- add_filter( 'jetpack_twitter_cards_site_tag', array( __CLASS__, 'site_tag' ), -99 );
- add_filter( 'jetpack_twitter_cards_site_tag', array( __CLASS__, 'prioritize_creator_over_default_site' ), 99, 2 );
- add_action( 'admin_init', array( __CLASS__, 'settings_init' ) );
- add_action( 'sharing_global_options', array( __CLASS__, 'sharing_global_options' ) );
- add_action( 'sharing_admin_update', array( __CLASS__, 'settings_validate' ) );
- }
-}
-
-Jetpack_Twitter_Cards::init();
diff --git a/plugins/jetpack/class.jetpack-user-agent.php b/plugins/jetpack/class.jetpack-user-agent.php
deleted file mode 100644
index 346b340b..00000000
--- a/plugins/jetpack/class.jetpack-user-agent.php
+++ /dev/null
@@ -1,1475 +0,0 @@
-<?php
-
-/**
- * Determine if the current User Agent matches the passed $kind
- *
- * @param string $kind Category of mobile device to check for.
- * Either: any, dumb, smart.
- * @param bool $return_matched_agent Boolean indicating if the UA should be returned
- *
- * @return bool|string Boolean indicating if current UA matches $kind. If
- * $return_matched_agent is true, returns the UA string
- */
-function jetpack_is_mobile( $kind = 'any', $return_matched_agent = false ) {
- static $kinds = array( 'smart' => false, 'dumb' => false, 'any' => false );
- static $first_run = true;
- static $matched_agent = '';
-
- // If an invalid kind is passed in, reset it to default.
- if ( ! isset( $kinds[ $kind ] ) ) {
- $kind = 'any';
- }
-
- if ( function_exists( 'apply_filters' ) ) {
- /**
- * Filter the value of jetpack_is_mobile before it is calculated.
- *
- * Passing a truthy value to the filter will short-circuit determining the
- * mobile type, returning the passed value instead.
- *
- * @since 4.2.0
- *
- * @param bool|string $matches Boolean if current UA matches $kind or not. If
- * $return_matched_agent is true, should return the UA string
- * @param string $kind Category of mobile device being checked
- * @param bool $return_matched_agent Boolean indicating if the UA should be returned
- */
- $pre = apply_filters( 'pre_jetpack_is_mobile', null, $kind, $return_matched_agent );
-
- if ( null !== $pre ) {
- return $pre;
- }
- }
-
- $ua_info = new Jetpack_User_Agent_Info();
-
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) || strpos( strtolower( $_SERVER['HTTP_USER_AGENT'] ), 'ipad' ) ) {
- return false;
- }
-
- // Remove Samsung Galaxy tablets (SCH-I800) from being mobile devices
- if ( strpos( strtolower( $_SERVER['HTTP_USER_AGENT'] ) , 'sch-i800') ) {
- return false;
- }
-
- if( $ua_info->is_android_tablet() && false === $ua_info->is_kindle_touch() ) {
- return false;
- }
-
- if( $ua_info->is_blackberry_tablet() ) {
- return false;
- }
-
- if ( $first_run ) {
- $first_run = false;
-
- //checks for iPhoneTier devices & RichCSS devices
- if ( $ua_info->isTierIphone() || $ua_info->isTierRichCSS() ) {
- $kinds['smart'] = true;
- $matched_agent = $ua_info->matched_agent;
- }
-
- if ( ! $kinds['smart'] ) {
- // if smart, we are not dumb so no need to check
- $dumb_agents = $ua_info->dumb_agents;
- $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- foreach ( $dumb_agents as $dumb_agent ) {
- if ( false !== strpos( $agent, $dumb_agent ) ) {
- $kinds['dumb'] = true;
- $matched_agent = $dumb_agent;
-
- break;
- }
- }
-
- if ( ! $kinds['dumb'] ) {
- if ( isset( $_SERVER['HTTP_X_WAP_PROFILE'] ) ) {
- $kinds['dumb'] = true;
- $matched_agent = 'http_x_wap_profile';
- } elseif ( isset( $_SERVER['HTTP_ACCEPT']) && ( preg_match( '/wap\.|\.wap/i', $_SERVER['HTTP_ACCEPT'] ) || false !== strpos( strtolower( $_SERVER['HTTP_ACCEPT'] ), 'application/vnd.wap.xhtml+xml' ) ) ) {
- $kinds['dumb'] = true;
- $matched_agent = 'vnd.wap.xhtml+xml';
- }
- }
- }
-
- if ( $kinds['dumb'] || $kinds['smart'] ) {
- $kinds['any'] = true;
- }
- }
-
- $value = $kinds[ $kind ];
-
- if ( $return_matched_agent ) {
- $value = $matched_agent;
- }
-
- if ( function_exists( 'apply_filters' ) ) {
- /**
- * Filter the value of jetpack_is_mobile
- *
- * @since 4.2.0
- *
- * @param bool|string $matches Boolean if current UA matches $kind or not. If
- * $return_matched_agent is true, should return the UA string
- * @param string $kind Category of mobile device being checked
- * @param bool $return_matched_agent Boolean indicating if the UA should be returned
- */
- $value = apply_filters( 'jetpack_is_mobile', $value, $kind, $return_matched_agent );
- }
-
- return $value;
-}
-
-class Jetpack_User_Agent_Info {
-
- public $useragent;
- public $matched_agent;
- public $isTierIphone; //Stores whether is the iPhone tier of devices.
- public $isTierRichCss; //Stores whether the device can probably support Rich CSS, but JavaScript (jQuery) support is not assumed.
- public $isTierGenericMobile; //Stores whether it is another mobile device, which cannot be assumed to support CSS or JS (eg, older BlackBerry, RAZR)
-
- private $_platform = null; //Stores the device platform name
- const PLATFORM_WINDOWS = 'windows';
- const PLATFORM_IPHONE = 'iphone';
- const PLATFORM_IPOD = 'ipod';
- const PLATFORM_IPAD = 'ipad';
- const PLATFORM_BLACKBERRY = 'blackberry';
- const PLATFORM_BLACKBERRY_10 = 'blackberry_10';
- const PLATFORM_SYMBIAN = 'symbian_series60';
- const PLATFORM_SYMBIAN_S40 = 'symbian_series40';
- const PLATFORM_J2ME_MIDP = 'j2me_midp';
- const PLATFORM_ANDROID = 'android';
- const PLATFORM_ANDROID_TABLET = 'android_tablet';
- const PLATFORM_FIREFOX_OS = 'firefoxOS';
-
- public $dumb_agents = array(
- 'nokia', 'blackberry', 'philips', 'samsung', 'sanyo', 'sony', 'panasonic', 'webos',
- 'ericsson', 'alcatel', 'palm',
- 'windows ce', 'opera mini', 'series60', 'series40',
- 'au-mic,', 'audiovox', 'avantgo', 'blazer',
- 'danger', 'docomo', 'epoc',
- 'ericy', 'i-mode', 'ipaq', 'midp-',
- 'mot-', 'netfront', 'nitro',
- 'palmsource', 'pocketpc', 'portalmmm',
- 'rover', 'sie-',
- 'symbian', 'cldc-', 'j2me',
- 'smartphone', 'up.browser', 'up.link',
- 'up.link', 'vodafone/', 'wap1.', 'wap2.', 'mobile', 'googlebot-mobile',
- );
-
- //The constructor. Initializes default variables.
- function __construct()
- {
- if ( !empty( $_SERVER['HTTP_USER_AGENT'] ) )
- $this->useragent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
- }
-
- /**
- * This method detects the mobile User Agent name.
- *
- * @return string The matched User Agent name, false otherwise.
- */
- function get_mobile_user_agent_name() {
- if( $this->is_chrome_for_iOS( ) ) //keep this check before the safari rule
- return 'chrome-for-ios';
- elseif ( $this->is_iphone_or_ipod( 'iphone-safari' ) )
- return 'iphone';
- elseif ( $this->is_ipad( 'ipad-safari' ) )
- return 'ipad';
- elseif ( $this->is_android_tablet() ) //keep this check before the android rule
- return 'android_tablet';
- elseif ( $this->is_android() )
- return 'android';
- elseif ( $this->is_blackberry_10() )
- return 'blackberry_10';
- elseif ( $this->is_blackbeberry() )
- return 'blackberry';
- elseif ( $this->is_WindowsPhone7() )
- return 'win7';
- elseif ( $this->is_windows_phone_8() )
- return 'winphone8';
- elseif ( $this->is_opera_mini() )
- return 'opera-mini';
- elseif ( $this->is_opera_mini_dumb() )
- return 'opera-mini-dumb';
- elseif ( $this->is_opera_mobile() )
- return 'opera-mobi';
- elseif ( $this->is_blackberry_tablet() )
- return 'blackberry_tablet';
- elseif ( $this->is_kindle_fire() )
- return 'kindle-fire';
- elseif ( $this->is_PalmWebOS() )
- return 'webos';
- elseif ( $this->is_S60_OSSBrowser() )
- return 'series60';
- elseif ( $this->is_firefox_os() )
- return 'firefoxOS';
- elseif ( $this->is_firefox_mobile() )
- return 'firefox_mobile';
- elseif ( $this->is_MaemoTablet() )
- return 'maemo';
- elseif ( $this->is_MeeGo() )
- return 'meego';
- elseif( $this->is_TouchPad() )
- return 'hp_tablet';
- elseif ( $this->is_facebook_for_iphone() )
- return 'facebook-for-iphone';
- elseif ( $this->is_facebook_for_ipad() )
- return 'facebook-for-ipad';
- elseif ( $this->is_twitter_for_iphone() )
- return 'twitter-for-iphone';
- elseif ( $this->is_twitter_for_ipad() )
- return 'twitter-for-ipad';
- elseif ( $this->is_wordpress_for_ios() )
- return 'ios-app';
- elseif ( $this->is_iphone_or_ipod( 'iphone-not-safari' ) )
- return 'iphone-unknown';
- elseif ( $this->is_ipad( 'ipad-not-safari' ) )
- return 'ipad-unknown';
- elseif ( $this->is_Nintendo_3DS() )
- return 'nintendo-3ds';
- else {
- $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
- $dumb_agents = $this->dumb_agents;
- foreach ( $dumb_agents as $dumb_agent ) {
- if ( false !== strpos( $agent, $dumb_agent ) ) {
- return $dumb_agent;
- }
- }
- }
-
- return false;
- }
-
- /**
- * This method detects the mobile device's platform. All return strings are from the class constants.
- * Note that this function returns the platform name, not the UA name/type. You should use a different function
- * if you need to test the UA capabilites.
- *
- * @return string Name of the platform, false otherwise.
- */
- public function get_platform() {
- if ( isset( $this->_platform ) ) {
- return $this->_platform;
- }
-
- if ( strpos( $this->useragent, 'windows phone' ) !== false ) {
- $this->_platform = self::PLATFORM_WINDOWS;
- }
- elseif ( strpos( $this->useragent, 'windows ce' ) !== false ) {
- $this->_platform = self::PLATFORM_WINDOWS;
- }
- elseif ( strpos( $this->useragent, 'ipad' ) !== false ) {
- $this->_platform = self::PLATFORM_IPAD;
- }
- else if ( strpos( $this->useragent, 'ipod' ) !== false ) {
- $this->_platform = self::PLATFORM_IPOD;
- }
- else if ( strpos( $this->useragent, 'iphone' ) !== false ) {
- $this->_platform = self::PLATFORM_IPHONE;
- }
- elseif ( strpos( $this->useragent, 'android' ) !== false ) {
- if ( $this->is_android_tablet() )
- $this->_platform = self::PLATFORM_ANDROID_TABLET;
- else
- $this->_platform = self::PLATFORM_ANDROID;
- }
- elseif ( $this->is_kindle_fire() ) {
- $this->_platform = self::PLATFORM_ANDROID_TABLET;
- }
- elseif ( $this->is_blackberry_10() ) {
- $this->_platform = self::PLATFORM_BLACKBERRY_10;
- }
- elseif ( strpos( $this->useragent, 'blackberry' ) !== false ) {
- $this->_platform = self::PLATFORM_BLACKBERRY;
- }
- elseif ( $this->is_blackberry_tablet() ) {
- $this->_platform = self::PLATFORM_BLACKBERRY;
- }
- elseif ( $this->is_symbian_platform() ) {
- $this->_platform = self::PLATFORM_SYMBIAN;
- }
- elseif ( $this->is_symbian_s40_platform() ) {
- $this->_platform = self::PLATFORM_SYMBIAN_S40;
- }
- elseif ( $this->is_J2ME_platform() ) {
- $this->_platform = self::PLATFORM_J2ME_MIDP;
- }
- elseif ( $this->is_firefox_os() ) {
- $this->_platform = self::PLATFORM_FIREFOX_OS;
- }
- else
- $this->_platform = false;
-
- return $this->_platform;
- }
-
- /*
- * This method detects for UA which can display iPhone-optimized web content.
- * Includes iPhone, iPod Touch, Android, WebOS, Fennec (Firefox mobile), etc.
- *
- */
- function isTierIphone() {
- if ( isset( $this->isTierIphone ) ) {
- return $this->isTierIphone;
- }
- if ( $this->is_iphoneOrIpod() ) {
- $this->matched_agent = 'iphone';
- $this->isTierIphone = true;
- $this->isTierRichCss = false;
- $this->isTierGenericMobile = false;
- }
- elseif ( $this->is_android() ) {
- $this->matched_agent = 'android';
- $this->isTierIphone = true;
- $this->isTierRichCss = false;
- $this->isTierGenericMobile = false;
- }
- elseif ( $this->is_windows_phone_8() ) {
- $this->matched_agent = 'winphone8';
- $this->isTierIphone = true;
- $this->isTierRichCss = false;
- $this->isTierGenericMobile = false;
- }
- elseif ( $this->is_WindowsPhone7() ) {
- $this->matched_agent = 'win7';
- $this->isTierIphone = true;
- $this->isTierRichCss = false;
- $this->isTierGenericMobile = false;
- }
- elseif ( $this->is_blackberry_10() ) {
- $this->matched_agent = 'blackberry-10';
- $this->isTierIphone = true;
- $this->isTierRichCss = false;
- $this->isTierGenericMobile = false;
- }
- elseif ( $this->is_blackbeberry() && $this->detect_blackberry_browser_version() == 'blackberry-webkit' ) {
- $this->matched_agent = 'blackberry-webkit';
- $this->isTierIphone = true;
- $this->isTierRichCss = false;
- $this->isTierGenericMobile = false;
- }
- elseif ( $this->is_blackberry_tablet() ) {
- $this->matched_agent = 'blackberry_tablet';
- $this->isTierIphone = true;
- $this->isTierRichCss = false;
- $this->isTierGenericMobile = false;
- }
- elseif ( $this->is_PalmWebOS() ) {
- $this->matched_agent = 'webos';
- $this->isTierIphone = true;
- $this->isTierRichCss = false;
- $this->isTierGenericMobile = false;
- }
- elseif ( $this->is_TouchPad() ) {
- $this->matched_agent = 'hp_tablet';
- $this->isTierIphone = true;
- $this->isTierRichCss = false;
- $this->isTierGenericMobile = false;
- }
- elseif ( $this->is_firefox_os() ) {
- $this->matched_agent = 'firefoxOS';
- $this->isTierIphone = true;
- $this->isTierRichCss = false;
- $this->isTierGenericMobile = false;
- }
- elseif ( $this->is_firefox_mobile() ) {
- $this->matched_agent = 'fennec';
- $this->isTierIphone = true;
- $this->isTierRichCss = false;
- $this->isTierGenericMobile = false;
- }
- elseif ( $this->is_opera_mobile() ) {
- $this->matched_agent = 'opera-mobi';
- $this->isTierIphone = true;
- $this->isTierRichCss = false;
- $this->isTierGenericMobile = false;
- }
- elseif ( $this->is_MaemoTablet() ) {
- $this->matched_agent = 'maemo';
- $this->isTierIphone = true;
- $this->isTierRichCss = false;
- $this->isTierGenericMobile = false;
- }
- elseif ( $this->is_MeeGo() ) {
- $this->matched_agent = 'meego';
- $this->isTierIphone = true;
- $this->isTierRichCss = false;
- $this->isTierGenericMobile = false;
- }
- elseif ( $this->is_kindle_touch() ) {
- $this->matched_agent = 'kindle-touch';
- $this->isTierIphone = true;
- $this->isTierRichCss = false;
- $this->isTierGenericMobile = false;
- }
- elseif ( $this->is_Nintendo_3DS() ) {
- $this->matched_agent = 'nintendo-3ds';
- $this->isTierIphone = true;
- $this->isTierRichCss = false;
- $this->isTierGenericMobile = false;
- }
- else {
- $this->isTierIphone = false;
- }
- return $this->isTierIphone;
- }
-
- /*
- * This method detects for UA which are likely to be capable
- * but may not necessarily support JavaScript.
- * Excludes all iPhone Tier UA.
- *
- */
- function isTierRichCss(){
- if ( isset( $this->isTierRichCss ) ) {
- return $this->isTierRichCss;
- }
- if ($this->isTierIphone())
- return false;
-
- //The following devices are explicitly ok.
- if ( $this->is_S60_OSSBrowser() ) {
- $this->matched_agent = 'series60';
- $this->isTierIphone = false;
- $this->isTierRichCss = true;
- $this->isTierGenericMobile = false;
- }
- elseif ( $this->is_opera_mini() ) {
- $this->matched_agent = 'opera-mini';
- $this->isTierIphone = false;
- $this->isTierRichCss = true;
- $this->isTierGenericMobile = false;
- }
- elseif ( $this->is_blackbeberry() ) {
- $detectedDevice = $this->detect_blackberry_browser_version();
- if ( $detectedDevice === 'blackberry-5' || $detectedDevice == 'blackberry-4.7' || $detectedDevice === 'blackberry-4.6' ) {
- $this->matched_agent = $detectedDevice;
- $this->isTierIphone = false;
- $this->isTierRichCss = true;
- $this->isTierGenericMobile = false;
- }
- }
- else {
- $this->isTierRichCss = false;
- }
-
- return $this->isTierRichCss;
- }
-
- // Detects if the user is using a tablet.
- // props Corey Gilmore, BGR.com
- static function is_tablet() {
- return ( 0 // never true, but makes it easier to manage our list of tablet conditions
- || self::is_ipad()
- || self::is_android_tablet()
- || self::is_blackberry_tablet()
- || self::is_kindle_fire()
- || self::is_MaemoTablet()
- || self::is_TouchPad()
- );
- }
-
- /*
- * Detects if the current UA is the default iPhone or iPod Touch Browser.
- *
- * DEPRECATED: use is_iphone_or_ipod
- *
- */
- static function is_iphoneOrIpod(){
-
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $ua = strtolower( $_SERVER['HTTP_USER_AGENT'] );
- if ( ( strpos( $ua, 'iphone' ) !== false ) || ( strpos( $ua,'ipod' ) !== false ) ) {
- if ( self::is_opera_mini() || self::is_opera_mobile() || self::is_firefox_mobile() )
- return false;
- else
- return true;
- }
- else
- return false;
- }
-
-
- /*
- * Detects if the current UA is iPhone Mobile Safari or another iPhone or iPod Touch Browser.
- *
- * They type can check for any iPhone, an iPhone using Safari, or an iPhone using something other than Safari.
- *
- * Note: If you want to check for Opera mini, Opera mobile or Firefox mobile (or any 3rd party iPhone browser),
- * you should put the check condition before the check for 'iphone-any' or 'iphone-not-safari'.
- * Otherwise those browsers will be 'catched' by the iphone string.
- *
- */
- static function is_iphone_or_ipod( $type = 'iphone-any' ) {
-
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $ua = strtolower( $_SERVER['HTTP_USER_AGENT'] );
- $is_iphone = ( strpos( $ua, 'iphone' ) !== false ) || ( strpos( $ua,'ipod' ) !== false );
- $is_safari = ( false !== strpos( $ua, 'safari' ) );
-
- if ( 'iphone-safari' == $type )
- return $is_iphone && $is_safari;
- elseif ( 'iphone-not-safari' == $type )
- return $is_iphone && !$is_safari;
- else
- return $is_iphone;
- }
-
-
- /*
- * Detects if the current UA is Chrome for iOS
- *
- * The User-Agent string in Chrome for iOS is the same as the Mobile Safari User-Agent, with CriOS/<ChromeRevision> instead of Version/<VersionNum>.
- * - Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3
- */
- static function is_chrome_for_iOS( ) {
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- if ( self::is_iphone_or_ipod( 'iphone-safari' ) === false ) return false;
-
- $ua = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- if ( strpos( $ua, 'crios/' ) !== false )
- return true;
- else
- return false;
- }
-
-
- /*
- * Detects if the current UA is Twitter for iPhone
- *
- * Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_5 like Mac OS X; nb-no) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile/8L1 Twitter for iPhone
- * Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9B206 Twitter for iPhone
- *
- */
- static function is_twitter_for_iphone( ) {
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $ua = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- if ( strpos( $ua, 'ipad' ) !== false )
- return false;
-
- if ( strpos( $ua, 'twitter for iphone' ) !== false )
- return true;
- else
- return false;
- }
-
- /*
- * Detects if the current UA is Twitter for iPad
- *
- * Old version 4.X - Mozilla/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile/8L1 Twitter for iPad
- * Ver 5.0 or Higher - Mozilla/5.0 (iPad; CPU OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9B206 Twitter for iPhone
- *
- */
- static function is_twitter_for_ipad( ) {
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $ua = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- if ( strpos( $ua, 'twitter for ipad' ) !== false )
- return true;
- elseif( strpos( $ua, 'ipad' ) !== false && strpos( $ua, 'twitter for iphone' ) !== false )
- return true;
- else
- return false;
- }
-
-
- /*
- * Detects if the current UA is Facebook for iPhone
- * - Facebook 4020.0 (iPhone; iPhone OS 5.0.1; fr_FR)
- * - Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_0 like Mac OS X; en_US) AppleWebKit (KHTML, like Gecko) Mobile [FBAN/FBForIPhone;FBAV/4.0.2;FBBV/4020.0;FBDV/iPhone3,1;FBMD/iPhone;FBSN/iPhone OS;FBSV/5.0;FBSS/2; FBCR/O2;FBID/phone;FBLC/en_US;FBSF/2.0]
- * - Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9B206 [FBAN/FBIOS;FBAV/5.0;FBBV/47423;FBDV/iPhone3,1;FBMD/iPhone;FBSN/iPhone OS;FBSV/5.1.1;FBSS/2; FBCR/3ITA;FBID/phone;FBLC/en_US]
- */
- static function is_facebook_for_iphone( ) {
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $ua = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- if( false === strpos( $ua, 'iphone' ) )
- return false;
-
- if ( false !== strpos( $ua, 'facebook' ) && false === strpos( $ua, 'ipad' ) )
- return true;
- else if ( false !== strpos( $ua, 'fbforiphone' ) && false === strpos( $ua, 'tablet' ) )
- return true;
- else if ( false !== strpos( $ua, 'fban/fbios;' ) && false === strpos( $ua, 'tablet' ) ) //FB app v5.0 or higher
- return true;
- else
- return false;
- }
-
- /*
- * Detects if the current UA is Facebook for iPad
- * - Facebook 4020.0 (iPad; iPhone OS 5.0.1; en_US)
- * - Mozilla/5.0 (iPad; U; CPU iPhone OS 5_0 like Mac OS X; en_US) AppleWebKit (KHTML, like Gecko) Mobile [FBAN/FBForIPhone;FBAV/4.0.2;FBBV/4020.0;FBDV/iPad2,1;FBMD/iPad;FBSN/iPhone OS;FBSV/5.0;FBSS/1; FBCR/;FBID/tablet;FBLC/en_US;FBSF/1.0]
- * - Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10A403 [FBAN/FBIOS;FBAV/5.0;FBBV/47423;FBDV/iPad2,1;FBMD/iPad;FBSN/iPhone OS;FBSV/6.0;FBSS/1; FBCR/;FBID/tablet;FBLC/en_US]
- */
- static function is_facebook_for_ipad( ) {
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $ua = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- if ( false === strpos( $ua, 'ipad' ) )
- return false;
-
- if ( false !== strpos( $ua, 'facebook' ) || false !== strpos( $ua, 'fbforiphone' ) || false !== strpos( $ua, 'fban/fbios;' ) )
- return true;
- else
- return false;
- }
-
- /*
- * Detects if the current UA is WordPress for iOS
- */
- static function is_wordpress_for_ios( ) {
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $ua = strtolower( $_SERVER['HTTP_USER_AGENT'] );
- if ( false !== strpos( $ua, 'wp-iphone' ) )
- return true;
- else
- return false;
- }
-
- /*
- * Detects if the current device is an iPad.
- * They type can check for any iPad, an iPad using Safari, or an iPad using something other than Safari.
- *
- * Note: If you want to check for Opera mini, Opera mobile or Firefox mobile (or any 3rd party iPad browser),
- * you should put the check condition before the check for 'iphone-any' or 'iphone-not-safari'.
- * Otherwise those browsers will be 'catched' by the ipad string.
- *
- */
- static function is_ipad( $type = 'ipad-any' ) {
-
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $ua = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- $is_ipad = ( false !== strpos( $ua, 'ipad' ) );
- $is_safari = ( false !== strpos( $ua, 'safari' ) );
-
- if ( 'ipad-safari' == $type )
- return $is_ipad && $is_safari;
- elseif ( 'ipad-not-safari' == $type )
- return $is_ipad && !$is_safari;
- else
- return $is_ipad;
- }
-
- /*
- * Detects if the current browser is Firefox Mobile (Fennec)
- *
- * http://www.useragentstring.com/pages/Fennec/
- * Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.1.1) Gecko/20110415 Firefox/4.0.2pre Fennec/4.0.1
- * Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1b2pre) Gecko/20081015 Fennec/1.0a1
- */
- static function is_firefox_mobile( ) {
-
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $ua = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- if ( strpos( $ua, 'fennec' ) !== false )
- return true;
- else
- return false;
- }
-
-
- /*
- * Detects if the current browser is FirefoxOS Native browser
- *
- * Mozilla/5.0 (Mobile; rv:14.0) Gecko/14.0 Firefox/14.0
- *
- */
- static function is_firefox_os( ) {
-
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $ua = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- if ( strpos( $ua, 'mozilla' ) !== false && strpos( $ua, 'mobile' ) !== false && strpos( $ua, 'gecko' ) !== false && strpos( $ua, 'firefox' ) !== false)
- return true;
- else
- return false;
- }
-
-
- /*
- * Detects if the current browser is Opera Mobile
- *
- * What is the difference between Opera Mobile and Opera Mini?
- * - Opera Mobile is a full Internet browser for mobile devices.
- * - Opera Mini always uses a transcoder to convert the page for a small display.
- * (it uses Opera advanced server compression technology to compress web content before it gets to a device.
- * The rendering engine is on Opera's server.)
- *
- * Opera/9.80 (Windows NT 6.1; Opera Mobi/14316; U; en) Presto/2.7.81 Version/11.00"
- * Opera/9.50 (Nintendo DSi; Opera/507; U; en-US)
- */
- static function is_opera_mobile( ) {
-
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $ua = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- if ( strpos( $ua, 'opera' ) !== false && strpos( $ua, 'mobi' ) !== false )
- return true;
- elseif ( strpos( $ua, 'opera' ) !== false && strpos( $ua, 'nintendo dsi' ) !== false )
- return true;
- else
- return false;
- }
-
-
- /*
- * Detects if the current browser is Opera Mini
- *
- * Opera/8.01 (J2ME/MIDP; Opera Mini/3.0.6306/1528; en; U; ssr)
- * Opera/9.80 (Android;Opera Mini/6.0.24212/24.746 U;en) Presto/2.5.25 Version/10.5454
- * Opera/9.80 (iPhone; Opera Mini/5.0.019802/18.738; U; en) Presto/2.4.15
- * Opera/9.80 (J2ME/iPhone;Opera Mini/5.0.019802/886; U; ja) Presto/2.4.15
- * Opera/9.80 (J2ME/iPhone;Opera Mini/5.0.019802/886; U; ja) Presto/2.4.15
- * Opera/9.80 (Series 60; Opera Mini/5.1.22783/23.334; U; en) Presto/2.5.25 Version/10.54
- * Opera/9.80 (BlackBerry; Opera Mini/5.1.22303/22.387; U; en) Presto/2.5.25 Version/10.54
- *
- */
- static function is_opera_mini( ) {
-
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $ua = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- if ( strpos( $ua, 'opera' ) !== false && strpos( $ua, 'mini' ) !== false )
- return true;
- else
- return false;
- }
-
- /*
- * Detects if the current browser is Opera Mini, but not on a smart device OS(Android, iOS, etc)
- * Used to send users on dumb devices to m.wor
- */
- static function is_opera_mini_dumb( ) {
-
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
- $ua = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- if ( self::is_opera_mini() ) {
- if ( strpos( $ua, 'android' ) !== false || strpos( $ua, 'iphone' ) !== false || strpos( $ua, 'ipod' ) !== false
- || strpos( $ua, 'ipad' ) !== false || strpos( $ua, 'blackberry' ) !== false)
- return false;
- else
- return true;
- } else {
- return false;
- }
- }
-
- /*
- * Detects if the current browser is Opera Mobile or Mini.
- * DEPRECATED: use is_opera_mobile or is_opera_mini
- *
- * Opera Mini 5 Beta: Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.15650/756; U; en) Presto/2.2.0
- * Opera Mini 8: Opera/8.01 (J2ME/MIDP; Opera Mini/3.0.6306/1528; en; U; ssr)
- */
- static function is_OperaMobile() {
- _deprecated_function( __FUNCTION__, 'always', 'is_opera_mini() or is_opera_mobile()' );
-
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $ua = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- if ( strpos( $ua, 'opera' ) !== false ) {
- if ( ( strpos( $ua, 'mini' ) !== false ) || ( strpos( $ua,'mobi' ) !== false ) )
- return true;
- else
- return false;
- } else {
- return false;
- }
- }
-
- /*
- * Detects if the current browser is a Windows Phone 7 device.
- * ex: Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; LG; GW910)
- */
- static function is_WindowsPhone7() {
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $ua = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- if ( false === strpos( $ua, 'windows phone os 7' ) ) {
- return false;
- } else {
- if ( self::is_opera_mini() || self::is_opera_mobile() || self::is_firefox_mobile() )
- return false;
- else
- return true;
- }
- }
-
- /*
- * Detects if the current browser is a Windows Phone 8 device.
- * ex: Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; ARM; Touch; IEMobile/10.0; <Manufacturer>; <Device> [;<Operator>])
- */
- static function is_windows_phone_8() {
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $ua = strtolower( $_SERVER['HTTP_USER_AGENT'] );
- if ( strpos( $ua, 'windows phone 8' ) === false ) {
- return false;
- } else {
- return true;
- }
- }
-
-
- /*
- * Detects if the current browser is on a Palm device running the new WebOS. This EXCLUDES TouchPad.
- *
- * ex1: Mozilla/5.0 (webOS/1.4.0; U; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Version/1.0 Safari/532.2 Pre/1.1
- * ex2: Mozilla/5.0 (webOS/1.4.0; U; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Version/1.0 Safari/532.2 Pixi/1.1
- *
- */
- static function is_PalmWebOS() {
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $ua = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- if ( false === strpos( $ua, 'webos' ) ) {
- return false;
- } else {
- if ( self::is_opera_mini() || self::is_opera_mobile() || self::is_firefox_mobile() )
- return false;
- else
- return true;
- }
- }
-
- /*
- * Detects if the current browser is the HP TouchPad default browser. This excludes phones wt WebOS.
- *
- * TouchPad Emulator: Mozilla/5.0 (hp-desktop; Linux; hpwOS/2.0; U; it-IT) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.70 Safari/534.6 Desktop/1.0
- * TouchPad: Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.0; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.70 Safari/534.6 TouchPad/1.0
- *
- */
- static function is_TouchPad() {
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $http_user_agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
- if ( false !== strpos( $http_user_agent, 'hp-tablet' ) || false !== strpos( $http_user_agent, 'hpwos' ) || false !== strpos( $http_user_agent, 'touchpad' ) ) {
- if ( self::is_opera_mini() || self::is_opera_mobile() || self::is_firefox_mobile() )
- return false;
- else
- return true;
- }
- else
- return false;
- }
-
-
- /*
- * Detects if the current browser is the Series 60 Open Source Browser.
- *
- * OSS Browser 3.2 on E75: Mozilla/5.0 (SymbianOS/9.3; U; Series60/3.2 NokiaE75-1/110.48.125 Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413
- *
- * 7.0 Browser (Nokia 5800 XpressMusic (v21.0.025)) : Mozilla/5.0 (SymbianOS/9.4; U; Series60/5.0 Nokia5800d-1/21.0.025; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413
- *
- * Browser 7.1 (Nokia N97 (v12.0.024)) : Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/12.0.024; Profile/MIDP-2.1 Configuration/CLDC-1.1; en-us) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.12344
- *
- */
- static function is_S60_OSSBrowser() {
-
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
- if ( self::is_opera_mini() || self::is_opera_mobile() || self::is_firefox_mobile() )
- return false;
-
- $pos_webkit = strpos( $agent, 'webkit' );
- if ( $pos_webkit !== false ) {
- //First, test for WebKit, then make sure it's either Symbian or S60.
- if ( strpos( $agent, 'symbian' ) !== false || strpos( $agent, 'series60' ) !== false ) {
- return true;
- } else
- return false;
- } elseif ( strpos( $agent, 'symbianos' ) !== false && strpos( $agent,'series60' ) !== false ) {
- return true;
- } elseif ( strpos( $agent, 'nokia' ) !== false && strpos( $agent,'series60' ) !== false ) {
- return true;
- }
-
- return false;
- }
-
- /*
- *
- * Detects if the device platform is the Symbian Series 60.
- *
- */
- static function is_symbian_platform() {
-
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- $pos_webkit = strpos( $agent, 'webkit' );
- if ( $pos_webkit !== false ) {
- //First, test for WebKit, then make sure it's either Symbian or S60.
- if ( strpos( $agent, 'symbian' ) !== false || strpos( $agent, 'series60' ) !== false ) {
- return true;
- } else
- return false;
- } elseif ( strpos( $agent, 'symbianos' ) !== false && strpos( $agent,'series60' ) !== false ) {
- return true;
- } elseif ( strpos( $agent, 'nokia' ) !== false && strpos( $agent,'series60' ) !== false ) {
- return true;
- } elseif ( strpos( $agent, 'opera mini' ) !== false ) {
- if( strpos( $agent,'symbianos' ) !== false || strpos( $agent,'symbos' ) !== false || strpos( $agent,'series 60' ) !== false )
- return true;
- }
-
- return false;
- }
-
- /*
- *
- * Detects if the device platform is the Symbian Series 40.
- * Nokia Browser for Series 40 is a proxy based browser, previously known as Ovi Browser.
- * This browser will report 'NokiaBrowser' in the header, however some older version will also report 'OviBrowser'.
- *
- */
- static function is_symbian_s40_platform() {
-
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- if ( strpos( $agent, 'series40' ) !== false ) {
- if( strpos( $agent,'nokia' ) !== false || strpos( $agent,'ovibrowser' ) !== false || strpos( $agent,'nokiabrowser' ) !== false )
- return true;
- }
-
- return false;
- }
-
- static function is_J2ME_platform() {
-
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- if ( strpos( $agent, 'j2me/midp' ) !== false ) {
- return true;
- } elseif ( strpos( $agent, 'midp' ) !== false && strpos( $agent, 'cldc' ) ) {
- return true;
- }
-
- return false;
- }
-
-
- /*
- * Detects if the current UA is on one of the Maemo-based Nokia Internet Tablets.
- */
- static function is_MaemoTablet() {
-
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- $pos_maemo = strpos( $agent, 'maemo' );
- if ( $pos_maemo === false ) return false;
-
- //Must be Linux + Tablet, or else it could be something else.
- if ( strpos( $agent, 'tablet' ) !== false && strpos( $agent, 'linux' ) !== false ) {
- if ( self::is_opera_mini() || self::is_opera_mobile() || self::is_firefox_mobile() )
- return false;
- else
- return true;
- } else
- return false;
- }
-
- /*
- * Detects if the current UA is a MeeGo device (Nokia Smartphone).
- */
- static function is_MeeGo() {
-
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $ua = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- if ( false === strpos( $ua, 'meego' ) ) {
- return false;
- } else {
- if ( self::is_opera_mini() || self::is_opera_mobile() || self::is_firefox_mobile() )
- return false;
- else
- return true;
- }
- }
-
-
- /*
- is_webkit() can be used to check the User Agent for an webkit generic browser
- */
- static function is_webkit() {
-
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- $pos_webkit = strpos( $agent, 'webkit' );
-
- if ( $pos_webkit !== false )
- return true;
- else
- return false;
- }
-
- /**
- * Detects if the current browser is the Native Android browser.
- * @return boolean true if the browser is Android otherwise false
- */
- static function is_android() {
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
- $pos_android = strpos( $agent, 'android' );
- if ( $pos_android !== false ) {
- if ( self::is_opera_mini() || self::is_opera_mobile() || self::is_firefox_mobile() )
- return false;
- else
- return true;
- }
- else
- return false;
- }
-
-
- /**
- * Detects if the current browser is the Native Android Tablet browser.
- * Assumes 'Android' should be in the user agent, but not 'mobile'
- *
- * @return boolean true if the browser is Android and not 'mobile' otherwise false
- */
- static function is_android_tablet( ) {
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- $pos_android = strpos( $agent, 'android' );
- $pos_mobile = strpos( $agent, 'mobile' );
- $post_android_app = strpos( $agent, 'wp-android' );
-
- if ( false !== $pos_android && false === $pos_mobile && false === $post_android_app ) {
- if ( self::is_opera_mini() || self::is_opera_mobile() || self::is_firefox_mobile() )
- return false;
- else
- return true;
- } else
- return false;
- }
-
- /**
- * Detects if the current browser is the Kindle Fire Native browser.
- *
- * Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.1.0-84) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true
- * Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.1.0-84) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=false
- *
- * @return boolean true if the browser is Kindle Fire Native browser otherwise false
- */
- static function is_kindle_fire( ) {
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
- $pos_silk = strpos( $agent, 'silk/' );
- $pos_silk_acc = strpos( $agent, 'silk-accelerated=' );
- if ( $pos_silk !== false && $pos_silk_acc !== false )
- return true;
- else
- return false;
- }
-
-
-/**
- * Detects if the current browser is the Kindle Touch Native browser
- *
- * Mozilla/5.0 (X11; U; Linux armv7l like Android; en-us) AppleWebKit/531.2+ (KHTML, like Gecko) Version/5.0 Safari/533.2+ Kindle/3.0+
- *
- * @return boolean true if the browser is Kindle monochrome Native browser otherwise false
- */
- static function is_kindle_touch( ) {
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
- $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
- $pos_kindle_touch = strpos( $agent, 'kindle/3.0+' );
- if ( false !== $pos_kindle_touch && false === self::is_kindle_fire() )
- return true;
- else
- return false;
- }
-
-
- // Detect if user agent is the WordPress.com Windows 8 app (used ONLY on the custom oauth stylesheet)
- static function is_windows8_auth( ) {
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
- $pos = strpos( $agent, 'msauthhost' );
- if ( false !== $pos )
- return true;
- else
- return false;
- }
-
- // Detect if user agent is the WordPress.com Windows 8 app.
- static function is_wordpress_for_win8( ) {
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
- $pos = strpos( $agent, 'wp-windows8' );
- if ( false !== $pos )
- return true;
- else
- return false;
- }
-
-
- /*
- * is_blackberry_tablet() can be used to check the User Agent for a RIM blackberry tablet
- * The user agent of the BlackBerry® Tablet OS follows a format similar to the following:
- * Mozilla/5.0 (PlayBook; U; RIM Tablet OS 1.0.0; en-US) AppleWebKit/534.8+ (KHTML, like Gecko) Version/0.0.1 Safari/534.8+
- *
- */
- static function is_blackberry_tablet() {
-
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
- $pos_playbook = stripos( $agent, 'PlayBook' );
- $pos_rim_tablet = stripos( $agent, 'RIM Tablet' );
-
- if ( ( false === $pos_playbook ) || ( false === $pos_rim_tablet ) )
- {
- return false;
- } else {
- return true;
- }
- }
-
- /*
- is_blackbeberry() can be used to check the User Agent for a blackberry device
- Note that opera mini on BB matches this rule.
- */
- static function is_blackbeberry() {
-
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- $pos_blackberry = strpos( $agent, 'blackberry' );
- if ( $pos_blackberry !== false ) {
- if ( self::is_opera_mini() || self::is_opera_mobile() || self::is_firefox_mobile() )
- return false;
- else
- return true;
- } else {
- return false;
- }
- }
-
- /*
- is_blackberry_10() can be used to check the User Agent for a BlackBerry 10 device.
- */
- static function is_blackberry_10() {
- $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
- return ( strpos( $agent, 'bb10' ) !== false ) && ( strpos( $agent, 'mobile' ) !== false );
- }
-
- /**
- * Retrieve the blackberry OS version.
- *
- * Return strings are from the following list:
- * - blackberry-10
- * - blackberry-7
- * - blackberry-6
- * - blackberry-torch //only the first edition. The 2nd edition has the OS7 onboard and doesn't need any special rule.
- * - blackberry-5
- * - blackberry-4.7
- * - blackberry-4.6
- * - blackberry-4.5
- *
- * @return string Version of the BB OS.
- * If version is not found, get_blackbeberry_OS_version will return boolean false.
- */
- static function get_blackbeberry_OS_version() {
-
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- if ( self::is_blackberry_10() ) {
- return 'blackberry-10';
- }
-
- $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- $pos_blackberry = stripos( $agent, 'blackberry' );
- if ( false === $pos_blackberry ) {
- // not a blackberry device
- return false;
- }
-
- // blackberry devices OS 6.0 or higher
- // Mozilla/5.0 (BlackBerry; U; BlackBerry 9670; en) AppleWebKit/534.3+ (KHTML, like Gecko) Version/6.0.0.286 Mobile Safari/534.3+
- // Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, Like Gecko) Version/6.0.0.141 Mobile Safari/534.1+
- // Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0 Mobile Safari/534.11+
- $pos_webkit = stripos( $agent, 'webkit' );
- if ( false !== $pos_webkit ) {
- // detected blackberry webkit browser
- $pos_torch = stripos( $agent, 'BlackBerry 9800' );
- if ( false !== $pos_torch ) {
- return 'blackberry-torch'; // match the torch first edition. the 2nd edition should use the OS7 and doesn't need any special rule
- } else {
- // detecting the BB OS version for devices running OS 6.0 or higher
- if ( preg_match( '#Version\/([\d\.]+)#i', $agent, $matches ) ) {
- $version = $matches[1];
- $version_num = explode( '.', $version );
- if ( false === is_array( $version_num ) || count( $version_num ) <= 1 ) {
- return 'blackberry-6'; // not a BB device that match our rule.
- } else {
- return 'blackberry-' . $version_num[0];
- }
- } else {
- // if doesn't match returns the minimun version with a webkit browser. we should never fall here.
- return 'blackberry-6'; // not a BB device that match our rule.
- }
- }
- }
-
- // blackberry devices <= 5.XX
- // BlackBerry9000/5.0.0.93 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/179
- if ( preg_match( '#BlackBerry\w+\/([\d\.]+)#i', $agent, $matches ) ) {
- $version = $matches[1];
- } else {
- return false; //not a BB device that match our rule.
- }
-
- $version_num = explode( '.', $version );
-
- if ( is_array( $version_num ) === false || count( $version_num ) <= 1 ) {
- return false;
- }
- if ( $version_num[0] == 5 ) {
- return 'blackberry-5';
- } elseif ( $version_num[0] == 4 && $version_num[1] == 7 ) {
- return 'blackberry-4.7';
- } elseif ( $version_num[0] == 4 && $version_num[1] == 6 ) {
- return 'blackberry-4.6';
- } elseif ( $version_num[0] == 4 && $version_num[1] == 5 ) {
- return 'blackberry-4.5';
- } else {
- return false;
- }
-
- }
-
- /**
- * Retrieve the blackberry browser version.
- *
- * Return string are from the following list:
- * - blackberry-10
- * - blackberry-webkit
- * - blackberry-5
- * - blackberry-4.7
- * - blackberry-4.6
- *
- * @return string Type of the BB browser.
- * If browser's version is not found, detect_blackbeberry_browser_version will return boolean false.
- */
- static function detect_blackberry_browser_version() {
-
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) {
- return false;
- }
-
- $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- if ( self::is_blackberry_10() ) {
- return 'blackberry-10';
- }
-
- $pos_blackberry = strpos( $agent, 'blackberry' );
- if ( false === $pos_blackberry ) {
- // not a blackberry device
- return false;
- }
-
- $pos_webkit = strpos( $agent, 'webkit' );
-
- if ( ! ( false === $pos_webkit ) ) {
- return 'blackberry-webkit';
- } else {
- if ( preg_match( '#BlackBerry\w+\/([\d\.]+)#i', $agent, $matches ) ) {
- $version = $matches[1];
- } else {
- return false; // not a BB device that match our rule.
- }
-
- $version_num = explode( '.', $version );
-
- if ( false === is_array( $version_num ) || count( $version_num ) <= 1 ) {
- return false;
- }
-
- if ( $version_num[0] == 5 ) {
- return 'blackberry-5';
- } elseif ( $version_num[0] == 4 && $version_num[1] == 7 ) {
- return 'blackberry-4.7';
- } elseif ( $version_num[0] == 4 && $version_num[1] == 6 ) {
- return 'blackberry-4.6';
- } else {
- // A very old BB device is found or this is a BB device that doesn't match our rules.
- return false;
- }
- }
-
- }
-
- // Checks if a visitor is coming from one of the WordPress mobile apps
- static function is_mobile_app() {
-
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) )
- return false;
-
- $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
-
- if ( isset( $_SERVER['X_USER_AGENT'] ) && preg_match( '|wp-webos|', $_SERVER['X_USER_AGENT'] ) )
- return true; //wp4webos 1.1 or higher
-
- $app_agents = array( 'wp-android', 'wp-blackberry', 'wp-iphone', 'wp-nokia', 'wp-webos', 'wp-windowsphone' );
- // the mobile reader on iOS has an incorrect UA when loading the reader
- // currently it is the default one provided by the iOS framework which
- // causes problems with 2-step-auth
- // User-Agent WordPress/3.1.4 CFNetwork/609 Darwin/13.0.0
- $app_agents[] = 'wordpress/3.1';
-
- foreach ( $app_agents as $app_agent ) {
- if ( false !== strpos( $agent, $app_agent ) )
- return true;
- }
- return false;
- }
-
- /*
- * Detects if the current browser is Nintendo 3DS handheld.
- *
- * example: Mozilla/5.0 (Nintendo 3DS; U; ; en) Version/1.7498.US
- * can differ in language, version and region
- */
- static function is_Nintendo_3DS() {
- if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) {
- return false;
- }
-
- $ua = strtolower( $_SERVER['HTTP_USER_AGENT'] );
- if ( strpos( $ua, 'nintendo 3ds' ) !== false ) {
- return true;
- }
- return false;
- }
-
- /**
- * Was the current request made by a known bot?
- *
- * @return boolean
- */
- static function is_bot() {
- static $is_bot = null;
-
- if ( is_null( $is_bot ) ) {
- $is_bot = Jetpack_User_Agent_Info::is_bot_user_agent( $_SERVER['HTTP_USER_AGENT'] );
- }
-
- return $is_bot;
- }
-
- /**
- * Is the given user-agent a known bot?
- * If you want an is_bot check for the current request's UA, use is_bot() instead of passing a user-agent to this method.
- *
- * @param $ua (string) A user-agent string
- * @return boolean
- */
- static function is_bot_user_agent( $ua = null ) {
-
- if ( empty( $ua ) )
- return false;
-
- $bot_agents = array(
- 'alexa', 'altavista', 'ask jeeves', 'attentio', 'baiduspider', 'bingbot', 'chtml generic', 'crawler', 'fastmobilecrawl',
- 'feedfetcher-google', 'firefly', 'froogle', 'gigabot', 'googlebot', 'googlebot-mobile', 'heritrix', 'httrack', 'ia_archiver', 'irlbot',
- 'iescholar', 'infoseek', 'jumpbot', 'linkcheck', 'lycos', 'mediapartners', 'mediobot', 'motionbot', 'msnbot', 'mshots', 'openbot',
- 'pss-webkit-request', 'pythumbnail', 'scooter', 'slurp', 'snapbot', 'spider', 'taptubot', 'technoratisnoop',
- 'teoma', 'twiceler', 'yahooseeker', 'yahooysmcm', 'yammybot', 'ahrefsbot', 'pingdom.com_bot', 'kraken', 'yandexbot',
- 'twitterbot', 'tweetmemebot', 'openhosebot', 'queryseekerspider', 'linkdexbot', 'grokkit-crawler',
- 'livelapbot', 'germcrawler', 'domaintunocrawler', 'grapeshotcrawler', 'cloudflare-alwaysonline',
- );
-
- foreach ( $bot_agents as $bot_agent ) {
- if ( false !== stripos( $ua, $bot_agent ) ) {
- return true;
- }
- }
-
- return false;
- }
-
-
-
-}
diff --git a/plugins/jetpack/class.jetpack-xmlrpc-server.php b/plugins/jetpack/class.jetpack-xmlrpc-server.php
deleted file mode 100644
index 4677f887..00000000
--- a/plugins/jetpack/class.jetpack-xmlrpc-server.php
+++ /dev/null
@@ -1,786 +0,0 @@
-<?php
-
-/**
- * Just a sack of functions. Not actually an IXR_Server
- */
-class Jetpack_XMLRPC_Server {
- /**
- * The current error object
- */
- public $error = null;
-
- /**
- * The current user
- */
- public $user = null;
-
- /**
- * Whitelist of the XML-RPC methods available to the Jetpack Server. If the
- * user is not authenticated (->login()) then the methods are never added,
- * so they will get a "does not exist" error.
- */
- function xmlrpc_methods( $core_methods ) {
- $jetpack_methods = array(
- 'jetpack.jsonAPI' => array( $this, 'json_api' ),
- 'jetpack.verifyAction' => array( $this, 'verify_action' ),
- 'jetpack.remoteRegister' => array( $this, 'remote_register' ),
- 'jetpack.remoteProvision' => array( $this, 'remote_provision' ),
- );
-
- $this->user = $this->login();
-
- if ( $this->user ) {
- $jetpack_methods = array_merge( $jetpack_methods, array(
- 'jetpack.testConnection' => array( $this, 'test_connection' ),
- 'jetpack.testAPIUserCode' => array( $this, 'test_api_user_code' ),
- 'jetpack.featuresAvailable' => array( $this, 'features_available' ),
- 'jetpack.featuresEnabled' => array( $this, 'features_enabled' ),
- 'jetpack.disconnectBlog' => array( $this, 'disconnect_blog' ),
- 'jetpack.unlinkUser' => array( $this, 'unlink_user' ),
- 'jetpack.syncObject' => array( $this, 'sync_object' ),
- 'jetpack.idcUrlValidation' => array( $this, 'validate_urls_for_idc_mitigation' ),
- ) );
-
- if ( isset( $core_methods['metaWeblog.editPost'] ) ) {
- $jetpack_methods['metaWeblog.newMediaObject'] = $core_methods['metaWeblog.newMediaObject'];
- $jetpack_methods['jetpack.updateAttachmentParent'] = array( $this, 'update_attachment_parent' );
- }
-
- /**
- * Filters the XML-RPC methods available to Jetpack for authenticated users.
- *
- * @since 1.1.0
- *
- * @param array $jetpack_methods XML-RPC methods available to the Jetpack Server.
- * @param array $core_methods Available core XML-RPC methods.
- * @param WP_User $user Information about a given WordPress user.
- */
- $jetpack_methods = apply_filters( 'jetpack_xmlrpc_methods', $jetpack_methods, $core_methods, $this->user );
- }
-
- /**
- * Filters the XML-RPC methods available to Jetpack for unauthenticated users.
- *
- * @since 3.0.0
- *
- * @param array $jetpack_methods XML-RPC methods available to the Jetpack Server.
- * @param array $core_methods Available core XML-RPC methods.
- */
- return apply_filters( 'jetpack_xmlrpc_unauthenticated_methods', $jetpack_methods, $core_methods );
- }
-
- /**
- * Whitelist of the bootstrap XML-RPC methods
- */
- function bootstrap_xmlrpc_methods() {
- return array(
- 'jetpack.verifyRegistration' => array( $this, 'verify_registration' ),
- 'jetpack.remoteAuthorize' => array( $this, 'remote_authorize' ),
- 'jetpack.remoteRegister' => array( $this, 'remote_register' ),
- );
- }
-
- function authorize_xmlrpc_methods() {
- return array(
- 'jetpack.remoteAuthorize' => array( $this, 'remote_authorize' ),
- );
- }
-
- function provision_xmlrpc_methods() {
- return array(
- 'jetpack.remoteRegister' => array( $this, 'remote_register' ),
- 'jetpack.remoteProvision' => array( $this, 'remote_provision' ),
- 'jetpack.remoteConnect' => array( $this, 'remote_connect' ),
- );
- }
-
- function remote_authorize( $request ) {
- $user = get_user_by( 'id', $request['state'] );
- JetpackTracking::record_user_event( 'jpc_remote_authorize_begin', array(), $user );
-
- foreach( array( 'secret', 'state', 'redirect_uri', 'code' ) as $required ) {
- if ( ! isset( $request[ $required ] ) || empty( $request[ $required ] ) ) {
- return $this->error( new Jetpack_Error( 'missing_parameter', 'One or more parameters is missing from the request.', 400 ), 'jpc_remote_authorize_fail' );
- }
- }
-
- if ( ! $user ) {
- return $this->error( new Jetpack_Error( 'user_unknown', 'User not found.', 404 ), 'jpc_remote_authorize_fail' );
- }
-
- if ( Jetpack::is_active() && Jetpack::is_user_connected( $request['state'] ) ) {
- return $this->error( new Jetpack_Error( 'already_connected', 'User already connected.', 400 ), 'jpc_remote_authorize_fail' );
- }
-
- $verified = $this->verify_action( array( 'authorize', $request['secret'], $request['state'] ) );
-
- if ( is_a( $verified, 'IXR_Error' ) ) {
- return $this->error( $verified, 'jpc_remote_authorize_fail' );
- }
-
- wp_set_current_user( $request['state'] );
-
- $client_server = new Jetpack_Client_Server;
- $result = $client_server->authorize( $request );
-
- if ( is_wp_error( $result ) ) {
- return $this->error( $result, 'jpc_remote_authorize_fail' );
- }
-
- JetpackTracking::record_user_event( 'jpc_remote_authorize_success' );
-
- return array(
- 'result' => $result,
- );
- }
-
- /**
- * This XML-RPC method is called from the /jpphp/provision endpoint on WPCOM in order to
- * register this site so that a plan can be provisioned.
- *
- * @param array $request An array containing at minimum nonce and local_user keys.
- *
- * @return WP_Error|array
- */
- public function remote_register( $request ) {
- JetpackTracking::record_user_event( 'jpc_remote_register_begin', array() );
-
- $user = $this->fetch_and_verify_local_user( $request );
-
- if ( ! $user ) {
- return $this->error( new WP_Error( 'input_error', __( 'Valid user is required', 'jetpack' ), 400 ), 'jpc_remote_register_fail' );
- }
-
- if ( is_wp_error( $user ) || is_a( $user, 'IXR_Error' ) ) {
- return $this->error( $user, 'jpc_remote_register_fail' );
- }
-
- if ( empty( $request['nonce'] ) ) {
- return $this->error(
- new Jetpack_Error(
- 'nonce_missing',
- __( 'The required "nonce" parameter is missing.', 'jetpack' ),
- 400
- ),
- 'jpc_remote_register_fail'
- );
- }
-
- $nonce = sanitize_text_field( $request['nonce'] );
- unset( $request['nonce'] );
-
- $api_url = Jetpack::fix_url_for_bad_hosts( Jetpack::api_url( 'partner_provision_nonce_check' ) );
- $response = Jetpack_Client::_wp_remote_request(
- esc_url_raw( add_query_arg( 'nonce', $nonce, $api_url ) ),
- array( 'method' => 'GET' ),
- true
- );
-
- if (
- 200 !== wp_remote_retrieve_response_code( $response ) ||
- 'OK' !== trim( wp_remote_retrieve_body( $response ) )
- ) {
- return $this->error(
- new Jetpack_Error(
- 'invalid_nonce',
- __( 'There was an issue validating this request.', 'jetpack' ),
- 400
- ),
- 'jpc_remote_register_fail'
- );
- }
-
- if ( ! Jetpack_Options::get_option( 'id' ) || ! Jetpack_Options::get_option( 'blog_token' ) || ! empty( $request['force'] ) ) {
- wp_set_current_user( $user->ID );
-
- // This code mostly copied from Jetpack::admin_page_load.
- Jetpack::maybe_set_version_option();
- $registered = Jetpack::try_registration();
- if ( is_wp_error( $registered ) ) {
- return $this->error( $registered, 'jpc_remote_register_fail' );
- } elseif ( ! $registered ) {
- return $this->error(
- new Jetpack_Error(
- 'registration_error',
- __( 'There was an unspecified error registering the site', 'jetpack' ),
- 400
- ),
- 'jpc_remote_register_fail'
- );
- }
- }
-
- JetpackTracking::record_user_event( 'jpc_remote_register_success' );
-
- return array(
- 'client_id' => Jetpack_Options::get_option( 'id' )
- );
- }
-
- /**
- * This XML-RPC method is called from the /jpphp/provision endpoint on WPCOM in order to
- * register this site so that a plan can be provisioned.
- *
- * @param array $request An array containing at minimum a nonce key and a local_username key.
- *
- * @return WP_Error|array
- */
- public function remote_provision( $request ) {
- $user = $this->fetch_and_verify_local_user( $request );
-
- if ( ! $user ) {
- return $this->error( new WP_Error( 'input_error', __( 'Valid user is required', 'jetpack' ), 400 ), 'jpc_remote_provision_fail' );
- }
-
- if ( is_wp_error( $user ) || is_a( $user, 'IXR_Error' ) ) {
- return $this->error( $user, 'jpc_remote_provision_fail' );
- }
-
- $site_icon = get_site_icon_url();
-
- $auto_enable_sso = ( ! Jetpack::is_active() || Jetpack::is_module_active( 'sso' ) );
-
- /** This filter is documented in class.jetpack-cli.php */
- if ( apply_filters( 'jetpack_start_enable_sso', $auto_enable_sso ) ) {
- $redirect_uri = add_query_arg(
- array(
- 'action' => 'jetpack-sso',
- 'redirect_to' => rawurlencode( admin_url() ),
- ),
- wp_login_url() // TODO: come back to Jetpack dashboard?
- );
- } else {
- $redirect_uri = admin_url();
- }
-
- // Generate secrets.
- $role = Jetpack::translate_user_to_role( $user );
- $secrets = Jetpack::init()->generate_secrets( 'authorize', $user->ID );
-
- $response = array(
- 'jp_version' => JETPACK__VERSION,
- 'redirect_uri' => $redirect_uri,
- 'user_id' => $user->ID,
- 'user_email' => $user->user_email,
- 'user_login' => $user->user_login,
- 'scope' => Jetpack::sign_role( $role, $user->ID ),
- 'secret' => $secrets['secret_1'],
- 'is_active' => Jetpack::is_active(),
- );
-
- if ( $site_icon ) {
- $response['site_icon'] = $site_icon;
- }
-
- if ( ! empty( $request['onboarding'] ) ) {
- Jetpack::create_onboarding_token();
- $response['onboarding_token'] = Jetpack_Options::get_option( 'onboarding' );
- }
-
- return $response;
- }
-
- /**
- * Given an array containing a local user identifier and a nonce, will attempt to fetch and set
- * an access token for the given user.
- *
- * @param array $request An array containing local_user and nonce keys at minimum.
- * @return mixed
- */
- public function remote_connect( $request, $ixr_client = false ) {
- if ( Jetpack::is_active() ) {
- return $this->error(
- new WP_Error(
- 'already_connected',
- __( 'Jetpack is already connected.', 'jetpack' ),
- 400
- ),
- 'jpc_remote_connect_fail'
- );
- }
-
- $user = $this->fetch_and_verify_local_user( $request );
-
- if ( ! $user || is_wp_error( $user ) || is_a( $user, 'IXR_Error' ) ) {
- return $this->error(
- new WP_Error(
- 'input_error',
- __( 'Valid user is required.', 'jetpack' ),
- 400
- ),
- 'jpc_remote_connect_fail'
- );
- }
-
- if ( empty( $request['nonce'] ) ) {
- return $this->error(
- new WP_Error(
- 'input_error',
- __( 'A non-empty nonce must be supplied.', 'jetpack' ),
- 400
- ),
- 'jpc_remote_connect_fail'
- );
- }
-
- if ( ! $ixr_client ) {
- Jetpack::load_xml_rpc_client();
- $ixr_client = new Jetpack_IXR_Client();
- }
- $ixr_client->query( 'jetpack.getUserAccessToken', array(
- 'nonce' => sanitize_text_field( $request['nonce'] ),
- 'external_user_id' => $user->ID,
- ) );
-
- $token = $ixr_client->isError() ? false : $ixr_client->getResponse();
- if ( empty( $token ) ) {
- return $this->error(
- new WP_Error(
- 'token_fetch_failed',
- __( 'Failed to fetch user token from WordPress.com.', 'jetpack' ),
- 400
- ),
- 'jpc_remote_connect_fail'
- );
- }
- $token = sanitize_text_field( $token );
-
- Jetpack::update_user_token( $user->ID, sprintf( '%s.%d', $token, $user->ID ), true );
-
- $this->do_post_authorization();
-
- return Jetpack::is_active();
- }
-
- private function fetch_and_verify_local_user( $request ) {
- if ( empty( $request['local_user'] ) ) {
- return $this->error(
- new Jetpack_Error(
- 'local_user_missing',
- __( 'The required "local_user" parameter is missing.', 'jetpack' ),
- 400
- ),
- 'jpc_remote_provision_fail'
- );
- }
-
- // local user is used to look up by login, email or ID
- $local_user_info = $request['local_user'];
-
- $user = get_user_by( 'login', $local_user_info );
-
- if ( ! $user ) {
- $user = get_user_by( 'email', $local_user_info );
- }
-
- if ( ! $user ) {
- $user = get_user_by( 'ID', $local_user_info );
- }
-
- return $user;
- }
-
- private function tracks_record_error( $name, $error, $user = null ) {
- if ( is_wp_error( $error ) ) {
- JetpackTracking::record_user_event( $name, array(
- 'error_code' => $error->get_error_code(),
- 'error_message' => $error->get_error_message()
- ), $user );
- } elseif( is_a( $error, 'IXR_Error' ) ) {
- JetpackTracking::record_user_event( $name, array(
- 'error_code' => $error->code,
- 'error_message' => $error->message
- ), $user );
- }
-
- return $error;
- }
-
- /**
- * Verifies that Jetpack.WordPress.com received a registration request from this site
- */
- function verify_registration( $data ) {
- // failure modes will be recorded in tracks in the verify_action method
- return $this->verify_action( array( 'register', $data[0], $data[1] ) );
- }
-
- /**
- * @return WP_Error|string secret_2 on success, WP_Error( error_code => error_code, error_message => error description, error_data => status code ) on failure
- *
- * Possible error_codes:
- *
- * verify_secret_1_missing
- * verify_secret_1_malformed
- * verify_secrets_missing: verification secrets are not found in database
- * verify_secrets_incomplete: verification secrets are only partially found in database
- * verify_secrets_expired: verification secrets have expired
- * verify_secrets_mismatch: stored secret_1 does not match secret_1 sent by Jetpack.WordPress.com
- * state_missing: required parameter of state not found
- * state_malformed: state is not a digit
- * invalid_state: state in request does not match the stored state
- *
- * The 'authorize' and 'register' actions have additional error codes
- *
- * state_missing: a state ( user id ) was not supplied
- * state_malformed: state is not the correct data type
- * invalid_state: supplied state does not match the stored state
- */
- function verify_action( $params ) {
- $action = $params[0];
- $verify_secret = $params[1];
- $state = isset( $params[2] ) ? $params[2] : '';
- $user = get_user_by( 'id', $state );
- JetpackTracking::record_user_event( 'jpc_verify_' . $action . '_begin', array(), $user );
- $tracks_failure_event_name = 'jpc_verify_' . $action . '_fail';
-
- if ( empty( $verify_secret ) ) {
- return $this->error( new Jetpack_Error( 'verify_secret_1_missing', sprintf( 'The required "%s" parameter is missing.', 'secret_1' ), 400 ), $tracks_failure_event_name, $user );
- } else if ( ! is_string( $verify_secret ) ) {
- return $this->error( new Jetpack_Error( 'verify_secret_1_malformed', sprintf( 'The required "%s" parameter is malformed.', 'secret_1' ), 400 ), $tracks_failure_event_name, $user );
- } else if ( empty( $state ) ) {
- return $this->error( new Jetpack_Error( 'state_missing', sprintf( 'The required "%s" parameter is missing.', 'state' ), 400 ), $tracks_failure_event_name, $user );
- } else if ( ! ctype_digit( $state ) ) {
- return $this->error( new Jetpack_Error( 'state_malformed', sprintf( 'The required "%s" parameter is malformed.', 'state' ), 400 ), $tracks_failure_event_name, $user );
- }
-
- $secrets = Jetpack::get_secrets( $action, $state );
-
- if ( ! $secrets ) {
- Jetpack::delete_secrets( $action, $state );
- return $this->error( new Jetpack_Error( 'verify_secrets_missing', 'Verification secrets not found', 400 ), $tracks_failure_event_name, $user );
- }
-
- if ( is_wp_error( $secrets ) ) {
- Jetpack::delete_secrets( $action, $state );
- return $this->error( new Jetpack_Error( $secrets->get_error_code(), $secrets->get_error_message(), 400 ), $tracks_failure_event_name, $user );
- }
-
- if ( empty( $secrets['secret_1'] ) || empty( $secrets['secret_2'] ) || empty( $secrets['exp'] ) ) {
- Jetpack::delete_secrets( $action, $state );
- return $this->error( new Jetpack_Error( 'verify_secrets_incomplete', 'Verification secrets are incomplete', 400 ), $tracks_failure_event_name, $user );
- }
-
- if ( ! hash_equals( $verify_secret, $secrets['secret_1'] ) ) {
- Jetpack::delete_secrets( $action, $state );
- return $this->error( new Jetpack_Error( 'verify_secrets_mismatch', 'Secret mismatch', 400 ), $tracks_failure_event_name, $user );
- }
-
- Jetpack::delete_secrets( $action, $state );
-
- JetpackTracking::record_user_event( 'jpc_verify_' . $action . '_success', array(), $user );
-
- return $secrets['secret_2'];
- }
-
- /**
- * Wrapper for wp_authenticate( $username, $password );
- *
- * @return WP_User|bool
- */
- function login() {
- Jetpack::init()->require_jetpack_authentication();
- $user = wp_authenticate( 'username', 'password' );
- if ( is_wp_error( $user ) ) {
- if ( 'authentication_failed' == $user->get_error_code() ) { // Generic error could mean most anything.
- $this->error = new Jetpack_Error( 'invalid_request', 'Invalid Request', 403 );
- } else {
- $this->error = $user;
- }
- return false;
- } else if ( !$user ) { // Shouldn't happen.
- $this->error = new Jetpack_Error( 'invalid_request', 'Invalid Request', 403 );
- return false;
- }
-
- return $user;
- }
-
- /**
- * Returns the current error as an IXR_Error
- *
- * @return bool|IXR_Error
- */
- function error( $error = null, $tracks_event_name = null, $user = null ) {
- // record using Tracks
- if ( null !== $tracks_event_name ) {
- $this->tracks_record_error( $tracks_event_name, $error, $user );
- }
-
- if ( !is_null( $error ) ) {
- $this->error = $error;
- }
-
- if ( is_wp_error( $this->error ) ) {
- $code = $this->error->get_error_data();
- if ( !$code ) {
- $code = -10520;
- }
- $message = sprintf( 'Jetpack: [%s] %s', $this->error->get_error_code(), $this->error->get_error_message() );
- return new IXR_Error( $code, $message );
- } else if ( is_a( $this->error, 'IXR_Error' ) ) {
- return $this->error;
- }
-
- return false;
- }
-
-/* API Methods */
-
- /**
- * Just authenticates with the given Jetpack credentials.
- *
- * @return string The current Jetpack version number
- */
- function test_connection() {
- return JETPACK__VERSION;
- }
-
- function test_api_user_code( $args ) {
- $client_id = (int) $args[0];
- $user_id = (int) $args[1];
- $nonce = (string) $args[2];
- $verify = (string) $args[3];
-
- if ( !$client_id || !$user_id || !strlen( $nonce ) || 32 !== strlen( $verify ) ) {
- return false;
- }
-
- $user = get_user_by( 'id', $user_id );
- if ( !$user || is_wp_error( $user ) ) {
- return false;
- }
-
- /* debugging
- error_log( "CLIENT: $client_id" );
- error_log( "USER: $user_id" );
- error_log( "NONCE: $nonce" );
- error_log( "VERIFY: $verify" );
- */
-
- $jetpack_token = Jetpack_Data::get_access_token( $user_id );
-
- $api_user_code = get_user_meta( $user_id, "jetpack_json_api_$client_id", true );
- if ( !$api_user_code ) {
- return false;
- }
-
- $hmac = hash_hmac( 'md5', json_encode( (object) array(
- 'client_id' => (int) $client_id,
- 'user_id' => (int) $user_id,
- 'nonce' => (string) $nonce,
- 'code' => (string) $api_user_code,
- ) ), $jetpack_token->secret );
-
- if ( ! hash_equals( $hmac, $verify ) ) {
- return false;
- }
-
- return $user_id;
- }
-
- /**
- * Disconnect this blog from the connected wordpress.com account
- * @return boolean
- */
- function disconnect_blog() {
-
- // For tracking
- if ( ! empty( $this->user->ID ) ) {
- wp_set_current_user( $this->user->ID );
- }
-
- Jetpack::log( 'disconnect' );
- Jetpack::disconnect();
-
- return true;
- }
-
- /**
- * Unlink a user from WordPress.com
- *
- * This will fail if called by the Master User.
- */
- function unlink_user() {
- Jetpack::log( 'unlink' );
- return Jetpack::unlink_user();
- }
-
- /**
- * Returns any object that is able to be synced
- */
- function sync_object( $args ) {
- // e.g. posts, post, 5
- list( $module_name, $object_type, $id ) = $args;
- require_once dirname( __FILE__ ) . '/sync/class.jetpack-sync-modules.php';
- require_once dirname( __FILE__ ) . '/sync/class.jetpack-sync-sender.php';
-
- $sync_module = Jetpack_Sync_Modules::get_module( $module_name );
- $codec = Jetpack_Sync_Sender::get_instance()->get_codec();
-
- return $codec->encode( $sync_module->get_object_by_id( $object_type, $id ) );
- }
-
- /**
- * Returns the home URL and site URL for the current site which can be used on the WPCOM side for
- * IDC mitigation to decide whether sync should be allowed if the home and siteurl values differ between WPCOM
- * and the remote Jetpack site.
- *
- * @return array
- */
- function validate_urls_for_idc_mitigation() {
- require_once JETPACK__PLUGIN_DIR . 'sync/class.jetpack-sync-functions.php';
- return array(
- 'home' => Jetpack_Sync_Functions::home_url(),
- 'siteurl' => Jetpack_Sync_Functions::site_url(),
- );
- }
-
- /**
- * Returns what features are available. Uses the slug of the module files.
- *
- * @return array
- */
- function features_available() {
- $raw_modules = Jetpack::get_available_modules();
- $modules = array();
- foreach ( $raw_modules as $module ) {
- $modules[] = Jetpack::get_module_slug( $module );
- }
-
- return $modules;
- }
-
- /**
- * Returns what features are enabled. Uses the slug of the modules files.
- *
- * @return array
- */
- function features_enabled() {
- $raw_modules = Jetpack::get_active_modules();
- $modules = array();
- foreach ( $raw_modules as $module ) {
- $modules[] = Jetpack::get_module_slug( $module );
- }
-
- return $modules;
- }
-
- function update_attachment_parent( $args ) {
- $attachment_id = (int) $args[0];
- $parent_id = (int) $args[1];
-
- return wp_update_post( array(
- 'ID' => $attachment_id,
- 'post_parent' => $parent_id,
- ) );
- }
-
- function json_api( $args = array() ) {
- $json_api_args = $args[0];
- $verify_api_user_args = $args[1];
-
- $method = (string) $json_api_args[0];
- $url = (string) $json_api_args[1];
- $post_body = is_null( $json_api_args[2] ) ? null : (string) $json_api_args[2];
- $user_details = (array) $json_api_args[4];
- $locale = (string) $json_api_args[5];
-
- if ( !$verify_api_user_args ) {
- $user_id = 0;
- } elseif ( 'internal' === $verify_api_user_args[0] ) {
- $user_id = (int) $verify_api_user_args[1];
- if ( $user_id ) {
- $user = get_user_by( 'id', $user_id );
- if ( !$user || is_wp_error( $user ) ) {
- return false;
- }
- }
- } else {
- $user_id = call_user_func( array( $this, 'test_api_user_code' ), $verify_api_user_args );
- if ( !$user_id ) {
- return false;
- }
- }
-
- /* debugging
- error_log( "-- begin json api via jetpack debugging -- " );
- error_log( "METHOD: $method" );
- error_log( "URL: $url" );
- error_log( "POST BODY: $post_body" );
- error_log( "VERIFY_ARGS: " . print_r( $verify_api_user_args, 1 ) );
- error_log( "VERIFIED USER_ID: " . (int) $user_id );
- error_log( "-- end json api via jetpack debugging -- " );
- */
-
- if ( 'en' !== $locale ) {
- // .org mo files are named slightly different from .com, and all we have is this the locale -- try to guess them.
- $new_locale = $locale;
- if ( strpos( $locale, '-' ) !== false ) {
- $locale_pieces = explode( '-', $locale );
- $new_locale = $locale_pieces[0];
- $new_locale .= ( ! empty( $locale_pieces[1] ) ) ? '_' . strtoupper( $locale_pieces[1] ) : '';
- } else {
- // .com might pass 'fr' because thats what our language files are named as, where core seems
- // to do fr_FR - so try that if we don't think we can load the file.
- if ( ! file_exists( WP_LANG_DIR . '/' . $locale . '.mo' ) ) {
- $new_locale = $locale . '_' . strtoupper( $locale );
- }
- }
-
- if ( file_exists( WP_LANG_DIR . '/' . $new_locale . '.mo' ) ) {
- unload_textdomain( 'default' );
- load_textdomain( 'default', WP_LANG_DIR . '/' . $new_locale . '.mo' );
- }
- }
-
- $old_user = wp_get_current_user();
- wp_set_current_user( $user_id );
-
- $token = Jetpack_Data::get_access_token( get_current_user_id() );
- if ( !$token || is_wp_error( $token ) ) {
- return false;
- }
-
- define( 'REST_API_REQUEST', true );
- define( 'WPCOM_JSON_API__BASE', 'public-api.wordpress.com/rest/v1' );
-
- // needed?
- require_once ABSPATH . 'wp-admin/includes/admin.php';
-
- require_once JETPACK__PLUGIN_DIR . 'class.json-api.php';
- $api = WPCOM_JSON_API::init( $method, $url, $post_body );
- $api->token_details['user'] = $user_details;
- require_once JETPACK__PLUGIN_DIR . 'class.json-api-endpoints.php';
-
- $display_errors = ini_set( 'display_errors', 0 );
- ob_start();
- $content_type = $api->serve( false );
- $output = ob_get_clean();
- ini_set( 'display_errors', $display_errors );
-
- $nonce = wp_generate_password( 10, false );
- $hmac = hash_hmac( 'md5', $nonce . $output, $token->secret );
-
- wp_set_current_user( isset( $old_user->ID ) ? $old_user->ID : 0 );
-
- return array(
- (string) $output,
- (string) $nonce,
- (string) $hmac,
- );
- }
-
- /**
- * Handles authorization actions after connecting a site, such as enabling modules.
- *
- * This do_post_authorization() is used in this class, as opposed to calling
- * Jetpack::handle_post_authorization_actions() directly so that we can mock this method as necessary.
- *
- * @return void
- */
- public function do_post_authorization() {
- /** This filter is documented in class.jetpack-cli.php */
- $enable_sso = apply_filters( 'jetpack_start_enable_sso', true );
- Jetpack::handle_post_authorization_actions( $enable_sso, false, false );
- }
-}
diff --git a/plugins/jetpack/class.jetpack.php b/plugins/jetpack/class.jetpack.php
deleted file mode 100644
index 0bebf2c4..00000000
--- a/plugins/jetpack/class.jetpack.php
+++ /dev/null
@@ -1,7389 +0,0 @@
-<?php
-
-/*
-Options:
-jetpack_options (array)
- An array of options.
- @see Jetpack_Options::get_option_names()
-
-jetpack_register (string)
- Temporary verification secrets.
-
-jetpack_activated (int)
- 1: the plugin was activated normally
- 2: the plugin was activated on this site because of a network-wide activation
- 3: the plugin was auto-installed
- 4: the plugin was manually disconnected (but is still installed)
-
-jetpack_active_modules (array)
- Array of active module slugs.
-
-jetpack_do_activate (bool)
- Flag for "activating" the plugin on sites where the activation hook never fired (auto-installs)
-*/
-
-require_once( JETPACK__PLUGIN_DIR . '_inc/lib/class.media.php' );
-
-class Jetpack {
- public $xmlrpc_server = null;
-
- private $xmlrpc_verification = null;
- private $rest_authentication_status = null;
-
- public $HTTP_RAW_POST_DATA = null; // copy of $GLOBALS['HTTP_RAW_POST_DATA']
-
- /**
- * @var array The handles of styles that are concatenated into jetpack.css.
- *
- * When making changes to that list, you must also update concat_list in tools/builder/frontend-css.js.
- */
- public $concatenated_style_handles = array(
- 'jetpack-carousel',
- 'grunion.css',
- 'the-neverending-homepage',
- 'jetpack_likes',
- 'jetpack_related-posts',
- 'sharedaddy',
- 'jetpack-slideshow',
- 'presentations',
- 'quiz',
- 'jetpack-subscriptions',
- 'jetpack-responsive-videos-style',
- 'jetpack-social-menu',
- 'tiled-gallery',
- 'jetpack_display_posts_widget',
- 'gravatar-profile-widget',
- 'goodreads-widget',
- 'jetpack_social_media_icons_widget',
- 'jetpack-top-posts-widget',
- 'jetpack_image_widget',
- 'jetpack-my-community-widget',
- 'jetpack-authors-widget',
- 'wordads',
- 'eu-cookie-law-style',
- 'flickr-widget-style',
- 'jetpack-search-widget',
- 'jetpack-simple-payments-widget-style',
- 'jetpack-widget-social-icons-styles',
- );
-
- /**
- * Contains all assets that have had their URL rewritten to minified versions.
- *
- * @var array
- */
- static $min_assets = array();
-
- public $plugins_to_deactivate = array(
- 'stats' => array( 'stats/stats.php', 'WordPress.com Stats' ),
- 'shortlinks' => array( 'stats/stats.php', 'WordPress.com Stats' ),
- 'sharedaddy' => array( 'sharedaddy/sharedaddy.php', 'Sharedaddy' ),
- 'twitter-widget' => array( 'wickett-twitter-widget/wickett-twitter-widget.php', 'Wickett Twitter Widget' ),
- 'after-the-deadline' => array( 'after-the-deadline/after-the-deadline.php', 'After The Deadline' ),
- 'contact-form' => array( 'grunion-contact-form/grunion-contact-form.php', 'Grunion Contact Form' ),
- 'contact-form' => array( 'mullet/mullet-contact-form.php', 'Mullet Contact Form' ),
- 'custom-css' => array( 'safecss/safecss.php', 'WordPress.com Custom CSS' ),
- 'random-redirect' => array( 'random-redirect/random-redirect.php', 'Random Redirect' ),
- 'videopress' => array( 'video/video.php', 'VideoPress' ),
- 'widget-visibility' => array( 'jetpack-widget-visibility/widget-visibility.php', 'Jetpack Widget Visibility' ),
- 'widget-visibility' => array( 'widget-visibility-without-jetpack/widget-visibility-without-jetpack.php', 'Widget Visibility Without Jetpack' ),
- 'sharedaddy' => array( 'jetpack-sharing/sharedaddy.php', 'Jetpack Sharing' ),
- 'gravatar-hovercards' => array( 'jetpack-gravatar-hovercards/gravatar-hovercards.php', 'Jetpack Gravatar Hovercards' ),
- 'latex' => array( 'wp-latex/wp-latex.php', 'WP LaTeX' )
- );
-
- static $capability_translations = array(
- 'administrator' => 'manage_options',
- 'editor' => 'edit_others_posts',
- 'author' => 'publish_posts',
- 'contributor' => 'edit_posts',
- 'subscriber' => 'read',
- );
-
- /**
- * Map of modules that have conflicts with plugins and should not be auto-activated
- * if the plugins are active. Used by filter_default_modules
- *
- * Plugin Authors: If you'd like to prevent a single module from auto-activating,
- * change `module-slug` and add this to your plugin:
- *
- * add_filter( 'jetpack_get_default_modules', 'my_jetpack_get_default_modules' );
- * function my_jetpack_get_default_modules( $modules ) {
- * return array_diff( $modules, array( 'module-slug' ) );
- * }
- *
- * @var array
- */
- private $conflicting_plugins = array(
- 'comments' => array(
- 'Intense Debate' => 'intensedebate/intensedebate.php',
- 'Disqus' => 'disqus-comment-system/disqus.php',
- 'Livefyre' => 'livefyre-comments/livefyre.php',
- 'Comments Evolved for WordPress' => 'gplus-comments/comments-evolved.php',
- 'Google+ Comments' => 'google-plus-comments/google-plus-comments.php',
- 'WP-SpamShield Anti-Spam' => 'wp-spamshield/wp-spamshield.php',
- ),
- 'comment-likes' => array(
- 'Epoch' => 'epoch/plugincore.php',
- ),
- 'contact-form' => array(
- 'Contact Form 7' => 'contact-form-7/wp-contact-form-7.php',
- 'Gravity Forms' => 'gravityforms/gravityforms.php',
- 'Contact Form Plugin' => 'contact-form-plugin/contact_form.php',
- 'Easy Contact Forms' => 'easy-contact-forms/easy-contact-forms.php',
- 'Fast Secure Contact Form' => 'si-contact-form/si-contact-form.php',
- 'Ninja Forms' => 'ninja-forms/ninja-forms.php',
- ),
- 'minileven' => array(
- 'WPtouch' => 'wptouch/wptouch.php',
- ),
- 'latex' => array(
- 'LaTeX for WordPress' => 'latex/latex.php',
- 'Youngwhans Simple Latex' => 'youngwhans-simple-latex/yw-latex.php',
- 'Easy WP LaTeX' => 'easy-wp-latex-lite/easy-wp-latex-lite.php',
- 'MathJax-LaTeX' => 'mathjax-latex/mathjax-latex.php',
- 'Enable Latex' => 'enable-latex/enable-latex.php',
- 'WP QuickLaTeX' => 'wp-quicklatex/wp-quicklatex.php',
- ),
- 'protect' => array(
- 'Limit Login Attempts' => 'limit-login-attempts/limit-login-attempts.php',
- 'Captcha' => 'captcha/captcha.php',
- 'Brute Force Login Protection' => 'brute-force-login-protection/brute-force-login-protection.php',
- 'Login Security Solution' => 'login-security-solution/login-security-solution.php',
- 'WPSecureOps Brute Force Protect' => 'wpsecureops-bruteforce-protect/wpsecureops-bruteforce-protect.php',
- 'BulletProof Security' => 'bulletproof-security/bulletproof-security.php',
- 'SiteGuard WP Plugin' => 'siteguard/siteguard.php',
- 'Security-protection' => 'security-protection/security-protection.php',
- 'Login Security' => 'login-security/login-security.php',
- 'Botnet Attack Blocker' => 'botnet-attack-blocker/botnet-attack-blocker.php',
- 'Wordfence Security' => 'wordfence/wordfence.php',
- 'All In One WP Security & Firewall' => 'all-in-one-wp-security-and-firewall/wp-security.php',
- 'iThemes Security' => 'better-wp-security/better-wp-security.php',
- ),
- 'random-redirect' => array(
- 'Random Redirect 2' => 'random-redirect-2/random-redirect.php',
- ),
- 'related-posts' => array(
- 'YARPP' => 'yet-another-related-posts-plugin/yarpp.php',
- 'WordPress Related Posts' => 'wordpress-23-related-posts-plugin/wp_related_posts.php',
- 'nrelate Related Content' => 'nrelate-related-content/nrelate-related.php',
- 'Contextual Related Posts' => 'contextual-related-posts/contextual-related-posts.php',
- 'Related Posts for WordPress' => 'microkids-related-posts/microkids-related-posts.php',
- 'outbrain' => 'outbrain/outbrain.php',
- 'Shareaholic' => 'shareaholic/shareaholic.php',
- 'Sexybookmarks' => 'sexybookmarks/shareaholic.php',
- ),
- 'sharedaddy' => array(
- 'AddThis' => 'addthis/addthis_social_widget.php',
- 'Add To Any' => 'add-to-any/add-to-any.php',
- 'ShareThis' => 'share-this/sharethis.php',
- 'Shareaholic' => 'shareaholic/shareaholic.php',
- ),
- 'seo-tools' => array(
- 'WordPress SEO by Yoast' => 'wordpress-seo/wp-seo.php',
- 'WordPress SEO Premium by Yoast' => 'wordpress-seo-premium/wp-seo-premium.php',
- 'All in One SEO Pack' => 'all-in-one-seo-pack/all_in_one_seo_pack.php',
- 'All in One SEO Pack Pro' => 'all-in-one-seo-pack-pro/all_in_one_seo_pack.php',
- 'The SEO Framework' => 'autodescription/autodescription.php',
- ),
- 'verification-tools' => array(
- 'WordPress SEO by Yoast' => 'wordpress-seo/wp-seo.php',
- 'WordPress SEO Premium by Yoast' => 'wordpress-seo-premium/wp-seo-premium.php',
- 'All in One SEO Pack' => 'all-in-one-seo-pack/all_in_one_seo_pack.php',
- 'All in One SEO Pack Pro' => 'all-in-one-seo-pack-pro/all_in_one_seo_pack.php',
- 'The SEO Framework' => 'autodescription/autodescription.php',
- ),
- 'widget-visibility' => array(
- 'Widget Logic' => 'widget-logic/widget_logic.php',
- 'Dynamic Widgets' => 'dynamic-widgets/dynamic-widgets.php',
- ),
- 'sitemaps' => array(
- 'Google XML Sitemaps' => 'google-sitemap-generator/sitemap.php',
- 'Better WordPress Google XML Sitemaps' => 'bwp-google-xml-sitemaps/bwp-simple-gxs.php',
- 'Google XML Sitemaps for qTranslate' => 'google-xml-sitemaps-v3-for-qtranslate/sitemap.php',
- 'XML Sitemap & Google News feeds' => 'xml-sitemap-feed/xml-sitemap.php',
- 'Google Sitemap by BestWebSoft' => 'google-sitemap-plugin/google-sitemap-plugin.php',
- 'WordPress SEO by Yoast' => 'wordpress-seo/wp-seo.php',
- 'WordPress SEO Premium by Yoast' => 'wordpress-seo-premium/wp-seo-premium.php',
- 'All in One SEO Pack' => 'all-in-one-seo-pack/all_in_one_seo_pack.php',
- 'All in One SEO Pack Pro' => 'all-in-one-seo-pack-pro/all_in_one_seo_pack.php',
- 'The SEO Framework' => 'autodescription/autodescription.php',
- 'Sitemap' => 'sitemap/sitemap.php',
- 'Simple Wp Sitemap' => 'simple-wp-sitemap/simple-wp-sitemap.php',
- 'Simple Sitemap' => 'simple-sitemap/simple-sitemap.php',
- 'XML Sitemaps' => 'xml-sitemaps/xml-sitemaps.php',
- 'MSM Sitemaps' => 'msm-sitemap/msm-sitemap.php',
- ),
- 'lazy-images' => array(
- 'Lazy Load' => 'lazy-load/lazy-load.php',
- 'BJ Lazy Load' => 'bj-lazy-load/bj-lazy-load.php',
- 'Lazy Load by WP Rocket' => 'rocket-lazy-load/rocket-lazy-load.php',
- ),
- );
-
- /**
- * Plugins for which we turn off our Facebook OG Tags implementation.
- *
- * Note: All in One SEO Pack, All in one SEO Pack Pro, WordPress SEO by Yoast, and WordPress SEO Premium by Yoast automatically deactivate
- * Jetpack's Open Graph tags via filter when their Social Meta modules are active.
- *
- * Plugin authors: If you'd like to prevent Jetpack's Open Graph tag generation in your plugin, you can do so via this filter:
- * add_filter( 'jetpack_enable_open_graph', '__return_false' );
- */
- private $open_graph_conflicting_plugins = array(
- '2-click-socialmedia-buttons/2-click-socialmedia-buttons.php',
- // 2 Click Social Media Buttons
- 'add-link-to-facebook/add-link-to-facebook.php', // Add Link to Facebook
- 'add-meta-tags/add-meta-tags.php', // Add Meta Tags
- 'easy-facebook-share-thumbnails/esft.php', // Easy Facebook Share Thumbnail
- 'heateor-open-graph-meta-tags/heateor-open-graph-meta-tags.php',
- // Open Graph Meta Tags by Heateor
- 'facebook/facebook.php', // Facebook (official plugin)
- 'facebook-awd/AWD_facebook.php', // Facebook AWD All in one
- 'facebook-featured-image-and-open-graph-meta-tags/fb-featured-image.php',
- // Facebook Featured Image & OG Meta Tags
- 'facebook-meta-tags/facebook-metatags.php', // Facebook Meta Tags
- 'wonderm00ns-simple-facebook-open-graph-tags/wonderm00n-open-graph.php',
- // Facebook Open Graph Meta Tags for WordPress
- 'facebook-revised-open-graph-meta-tag/index.php', // Facebook Revised Open Graph Meta Tag
- 'facebook-thumb-fixer/_facebook-thumb-fixer.php', // Facebook Thumb Fixer
- 'facebook-and-digg-thumbnail-generator/facebook-and-digg-thumbnail-generator.php',
- // Fedmich's Facebook Open Graph Meta
- 'network-publisher/networkpub.php', // Network Publisher
- 'nextgen-facebook/nextgen-facebook.php', // NextGEN Facebook OG
- 'social-networks-auto-poster-facebook-twitter-g/NextScripts_SNAP.php',
- // NextScripts SNAP
- 'og-tags/og-tags.php', // OG Tags
- 'opengraph/opengraph.php', // Open Graph
- 'open-graph-protocol-framework/open-graph-protocol-framework.php',
- // Open Graph Protocol Framework
- 'seo-facebook-comments/seofacebook.php', // SEO Facebook Comments
- 'seo-ultimate/seo-ultimate.php', // SEO Ultimate
- 'sexybookmarks/sexy-bookmarks.php', // Shareaholic
- 'shareaholic/sexy-bookmarks.php', // Shareaholic
- 'sharepress/sharepress.php', // SharePress
- 'simple-facebook-connect/sfc.php', // Simple Facebook Connect
- 'social-discussions/social-discussions.php', // Social Discussions
- 'social-sharing-toolkit/social_sharing_toolkit.php', // Social Sharing Toolkit
- 'socialize/socialize.php', // Socialize
- 'squirrly-seo/squirrly.php', // SEO by SQUIRRLY™
- 'only-tweet-like-share-and-google-1/tweet-like-plusone.php',
- // Tweet, Like, Google +1 and Share
- 'wordbooker/wordbooker.php', // Wordbooker
- 'wpsso/wpsso.php', // WordPress Social Sharing Optimization
- 'wp-caregiver/wp-caregiver.php', // WP Caregiver
- 'wp-facebook-like-send-open-graph-meta/wp-facebook-like-send-open-graph-meta.php',
- // WP Facebook Like Send & Open Graph Meta
- 'wp-facebook-open-graph-protocol/wp-facebook-ogp.php', // WP Facebook Open Graph protocol
- 'wp-ogp/wp-ogp.php', // WP-OGP
- 'zoltonorg-social-plugin/zosp.php', // Zolton.org Social Plugin
- 'wp-fb-share-like-button/wp_fb_share-like_widget.php', // WP Facebook Like Button
- 'open-graph-metabox/open-graph-metabox.php' // Open Graph Metabox
- );
-
- /**
- * Plugins for which we turn off our Twitter Cards Tags implementation.
- */
- private $twitter_cards_conflicting_plugins = array(
- // 'twitter/twitter.php', // The official one handles this on its own.
- // // https://github.com/twitter/wordpress/blob/master/src/Twitter/WordPress/Cards/Compatibility.php
- 'eewee-twitter-card/index.php', // Eewee Twitter Card
- 'ig-twitter-cards/ig-twitter-cards.php', // IG:Twitter Cards
- 'jm-twitter-cards/jm-twitter-cards.php', // JM Twitter Cards
- 'kevinjohn-gallagher-pure-web-brilliants-social-graph-twitter-cards-extention/kevinjohn_gallagher___social_graph_twitter_output.php',
- // Pure Web Brilliant's Social Graph Twitter Cards Extension
- 'twitter-cards/twitter-cards.php', // Twitter Cards
- 'twitter-cards-meta/twitter-cards-meta.php', // Twitter Cards Meta
- 'wp-to-twitter/wp-to-twitter.php', // WP to Twitter
- 'wp-twitter-cards/twitter_cards.php', // WP Twitter Cards
- );
-
- /**
- * Message to display in admin_notice
- * @var string
- */
- public $message = '';
-
- /**
- * Error to display in admin_notice
- * @var string
- */
- public $error = '';
-
- /**
- * Modules that need more privacy description.
- * @var string
- */
- public $privacy_checks = '';
-
- /**
- * Stats to record once the page loads
- *
- * @var array
- */
- public $stats = array();
-
- /**
- * Jetpack_Sync object
- */
- public $sync;
-
- /**
- * Verified data for JSON authorization request
- */
- public $json_api_authorization_request = array();
-
- /**
- * @var string Transient key used to prevent multiple simultaneous plugin upgrades
- */
- public static $plugin_upgrade_lock_key = 'jetpack_upgrade_lock';
-
- /**
- * Holds the singleton instance of this class
- * @since 2.3.3
- * @var Jetpack
- */
- static $instance = false;
-
- /**
- * Singleton
- * @static
- */
- public static function init() {
- if ( ! self::$instance ) {
- self::$instance = new Jetpack;
-
- self::$instance->plugin_upgrade();
- }
-
- return self::$instance;
- }
-
- /**
- * Must never be called statically
- */
- function plugin_upgrade() {
- if ( Jetpack::is_active() ) {
- list( $version ) = explode( ':', Jetpack_Options::get_option( 'version' ) );
- if ( JETPACK__VERSION != $version ) {
- // Prevent multiple upgrades at once - only a single process should trigger
- // an upgrade to avoid stampedes
- if ( false !== get_transient( self::$plugin_upgrade_lock_key ) ) {
- return;
- }
-
- // Set a short lock to prevent multiple instances of the upgrade
- set_transient( self::$plugin_upgrade_lock_key, 1, 10 );
-
- // check which active modules actually exist and remove others from active_modules list
- $unfiltered_modules = Jetpack::get_active_modules();
- $modules = array_filter( $unfiltered_modules, array( 'Jetpack', 'is_module' ) );
- if ( array_diff( $unfiltered_modules, $modules ) ) {
- Jetpack::update_active_modules( $modules );
- }
-
- add_action( 'init', array( __CLASS__, 'activate_new_modules' ) );
-
- // Upgrade to 4.3.0
- if ( Jetpack_Options::get_option( 'identity_crisis_whitelist' ) ) {
- Jetpack_Options::delete_option( 'identity_crisis_whitelist' );
- }
-
- // Make sure Markdown for posts gets turned back on
- if ( ! get_option( 'wpcom_publish_posts_with_markdown' ) ) {
- update_option( 'wpcom_publish_posts_with_markdown', true );
- }
-
- if ( did_action( 'wp_loaded' ) ) {
- self::upgrade_on_load();
- } else {
- add_action(
- 'wp_loaded',
- array( __CLASS__, 'upgrade_on_load' )
- );
- }
- }
- }
- }
-
- /**
- * Runs upgrade routines that need to have modules loaded.
- */
- static function upgrade_on_load() {
-
- // Not attempting any upgrades if jetpack_modules_loaded did not fire.
- // This can happen in case Jetpack has been just upgraded and is
- // being initialized late during the page load. In this case we wait
- // until the next proper admin page load with Jetpack active.
- if ( ! did_action( 'jetpack_modules_loaded' ) ) {
- delete_transient( self::$plugin_upgrade_lock_key );
-
- return;
- }
-
- Jetpack::maybe_set_version_option();
-
- if ( method_exists( 'Jetpack_Widget_Conditions', 'migrate_post_type_rules' ) ) {
- Jetpack_Widget_Conditions::migrate_post_type_rules();
- }
-
- if (
- class_exists( 'Jetpack_Sitemap_Manager' )
- && version_compare( JETPACK__VERSION, '5.3', '>=' )
- ) {
- do_action( 'jetpack_sitemaps_purge_data' );
- }
-
- delete_transient( self::$plugin_upgrade_lock_key );
- }
-
- static function activate_manage( ) {
- if ( did_action( 'init' ) || current_filter() == 'init' ) {
- self::activate_module( 'manage', false, false );
- } else if ( ! has_action( 'init' , array( __CLASS__, 'activate_manage' ) ) ) {
- add_action( 'init', array( __CLASS__, 'activate_manage' ) );
- }
- }
-
- static function update_active_modules( $modules ) {
- $current_modules = Jetpack_Options::get_option( 'active_modules', array() );
-
- $success = Jetpack_Options::update_option( 'active_modules', array_unique( $modules ) );
-
- if ( is_array( $modules ) && is_array( $current_modules ) ) {
- $new_active_modules = array_diff( $modules, $current_modules );
- foreach( $new_active_modules as $module ) {
- /**
- * Fires when a specific module is activated.
- *
- * @since 1.9.0
- *
- * @param string $module Module slug.
- * @param boolean $success whether the module was activated. @since 4.2
- */
- do_action( 'jetpack_activate_module', $module, $success );
-
- /**
- * Fires when a module is activated.
- * The dynamic part of the filter, $module, is the module slug.
- *
- * @since 1.9.0
- *
- * @param string $module Module slug.
- */
- do_action( "jetpack_activate_module_$module", $module );
- }
-
- $new_deactive_modules = array_diff( $current_modules, $modules );
- foreach( $new_deactive_modules as $module ) {
- /**
- * Fired after a module has been deactivated.
- *
- * @since 4.2.0
- *
- * @param string $module Module slug.
- * @param boolean $success whether the module was deactivated.
- */
- do_action( 'jetpack_deactivate_module', $module, $success );
- /**
- * Fires when a module is deactivated.
- * The dynamic part of the filter, $module, is the module slug.
- *
- * @since 1.9.0
- *
- * @param string $module Module slug.
- */
- do_action( "jetpack_deactivate_module_$module", $module );
- }
- }
-
- return $success;
- }
-
- static function delete_active_modules() {
- self::update_active_modules( array() );
- }
-
- /**
- * Constructor. Initializes WordPress hooks
- */
- private function __construct() {
- /*
- * Check for and alert any deprecated hooks
- */
- add_action( 'init', array( $this, 'deprecated_hooks' ) );
-
- /*
- * Enable enhanced handling of previewing sites in Calypso
- */
- if ( Jetpack::is_active() ) {
- require_once JETPACK__PLUGIN_DIR . '_inc/lib/class.jetpack-iframe-embed.php';
- add_action( 'init', array( 'Jetpack_Iframe_Embed', 'init' ), 9, 0 );
- require_once JETPACK__PLUGIN_DIR . '_inc/lib/class.jetpack-keyring-service-helper.php';
- add_action( 'init', array( 'Jetpack_Keyring_Service_Helper', 'init' ), 9, 0 );
- }
-
- /*
- * Load things that should only be in Network Admin.
- *
- * For now blow away everything else until a more full
- * understanding of what is needed at the network level is
- * available
- */
- if ( is_multisite() ) {
- Jetpack_Network::init();
- }
-
- /**
- * Prepare Gutenberg Editor functionality
- */
- require_once JETPACK__PLUGIN_DIR . 'class.jetpack-gutenberg.php';
- Jetpack_Gutenberg::init();
- Jetpack_Gutenberg::load_independent_blocks();
- add_action( 'enqueue_block_editor_assets', array( 'Jetpack_Gutenberg', 'enqueue_block_editor_assets' ) );
-
- add_action( 'set_user_role', array( $this, 'maybe_clear_other_linked_admins_transient' ), 10, 3 );
-
- // Unlink user before deleting the user from .com
- add_action( 'deleted_user', array( $this, 'unlink_user' ), 10, 1 );
- add_action( 'remove_user_from_blog', array( $this, 'unlink_user' ), 10, 1 );
-
- // Alternate XML-RPC, via ?for=jetpack&jetpack=comms
- if ( isset( $_GET['jetpack'] ) && 'comms' == $_GET['jetpack'] && isset( $_GET['for'] ) && 'jetpack' == $_GET['for'] ) {
- if ( ! defined( 'XMLRPC_REQUEST' ) ) {
- define( 'XMLRPC_REQUEST', true );
- }
-
- add_action( 'template_redirect', array( $this, 'alternate_xmlrpc' ) );
-
- add_filter( 'xmlrpc_methods', array( $this, 'remove_non_jetpack_xmlrpc_methods' ), 1000 );
- }
-
- if ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST && isset( $_GET['for'] ) && 'jetpack' == $_GET['for'] ) {
- @ini_set( 'display_errors', false ); // Display errors can cause the XML to be not well formed.
-
- require_once JETPACK__PLUGIN_DIR . 'class.jetpack-xmlrpc-server.php';
- $this->xmlrpc_server = new Jetpack_XMLRPC_Server();
-
- $this->require_jetpack_authentication();
-
- if ( Jetpack::is_active() ) {
- // Hack to preserve $HTTP_RAW_POST_DATA
- add_filter( 'xmlrpc_methods', array( $this, 'xmlrpc_methods' ) );
-
- $signed = $this->verify_xml_rpc_signature();
- if ( $signed && ! is_wp_error( $signed ) ) {
- // The actual API methods.
- add_filter( 'xmlrpc_methods', array( $this->xmlrpc_server, 'xmlrpc_methods' ) );
- } else {
- // The jetpack.authorize method should be available for unauthenticated users on a site with an
- // active Jetpack connection, so that additional users can link their account.
- add_filter( 'xmlrpc_methods', array( $this->xmlrpc_server, 'authorize_xmlrpc_methods' ) );
- }
- } else {
- // The bootstrap API methods.
- add_filter( 'xmlrpc_methods', array( $this->xmlrpc_server, 'bootstrap_xmlrpc_methods' ) );
- $signed = $this->verify_xml_rpc_signature();
- if ( $signed && ! is_wp_error( $signed ) ) {
- // the jetpack Provision method is available for blog-token-signed requests
- add_filter( 'xmlrpc_methods', array( $this->xmlrpc_server, 'provision_xmlrpc_methods' ) );
- }
- }
-
- // Now that no one can authenticate, and we're whitelisting all XML-RPC methods, force enable_xmlrpc on.
- add_filter( 'pre_option_enable_xmlrpc', '__return_true' );
- } elseif (
- is_admin() &&
- isset( $_POST['action'] ) && (
- 'jetpack_upload_file' == $_POST['action'] ||
- 'jetpack_update_file' == $_POST['action']
- )
- ) {
- $this->require_jetpack_authentication();
- $this->add_remote_request_handlers();
- } else {
- if ( Jetpack::is_active() ) {
- add_action( 'login_form_jetpack_json_api_authorization', array( &$this, 'login_form_json_api_authorization' ) );
- add_filter( 'xmlrpc_methods', array( $this, 'public_xmlrpc_methods' ) );
- }
- }
-
- if ( Jetpack::is_active() ) {
- Jetpack_Heartbeat::init();
- if ( Jetpack::is_module_active( 'stats' ) && Jetpack::is_module_active( 'search' ) ) {
- require_once JETPACK__PLUGIN_DIR . '_inc/lib/class.jetpack-search-performance-logger.php';
- Jetpack_Search_Performance_Logger::init();
- }
- }
-
- add_filter( 'determine_current_user', array( $this, 'wp_rest_authenticate' ) );
- add_filter( 'rest_authentication_errors', array( $this, 'wp_rest_authentication_errors' ) );
-
- add_action( 'jetpack_clean_nonces', array( 'Jetpack', 'clean_nonces' ) );
- if ( ! wp_next_scheduled( 'jetpack_clean_nonces' ) ) {
- wp_schedule_event( time(), 'hourly', 'jetpack_clean_nonces' );
- }
-
- add_filter( 'xmlrpc_blog_options', array( $this, 'xmlrpc_options' ) );
-
- add_action( 'admin_init', array( $this, 'admin_init' ) );
- add_action( 'admin_init', array( $this, 'dismiss_jetpack_notice' ) );
-
- add_filter( 'admin_body_class', array( $this, 'admin_body_class' ) );
-
- add_action( 'wp_dashboard_setup', array( $this, 'wp_dashboard_setup' ) );
- // Filter the dashboard meta box order to swap the new one in in place of the old one.
- add_filter( 'get_user_option_meta-box-order_dashboard', array( $this, 'get_user_option_meta_box_order_dashboard' ) );
-
- // returns HTTPS support status
- add_action( 'wp_ajax_jetpack-recheck-ssl', array( $this, 'ajax_recheck_ssl' ) );
-
- // If any module option is updated before Jump Start is dismissed, hide Jump Start.
- add_action( 'update_option', array( $this, 'jumpstart_has_updated_module_option' ) );
-
- // JITM AJAX callback function
- add_action( 'wp_ajax_jitm_ajax', array( $this, 'jetpack_jitm_ajax_callback' ) );
-
- // Universal ajax callback for all tracking events triggered via js
- add_action( 'wp_ajax_jetpack_tracks', array( $this, 'jetpack_admin_ajax_tracks_callback' ) );
-
- add_action( 'wp_ajax_jetpack_connection_banner', array( $this, 'jetpack_connection_banner_callback' ) );
-
- add_action( 'wp_loaded', array( $this, 'register_assets' ) );
- add_action( 'wp_enqueue_scripts', array( $this, 'devicepx' ) );
- add_action( 'customize_controls_enqueue_scripts', array( $this, 'devicepx' ) );
- add_action( 'admin_enqueue_scripts', array( $this, 'devicepx' ) );
-
- add_action( 'plugins_loaded', array( $this, 'extra_oembed_providers' ), 100 );
-
- /**
- * These actions run checks to load additional files.
- * They check for external files or plugins, so they need to run as late as possible.
- */
- add_action( 'wp_head', array( $this, 'check_open_graph' ), 1 );
- add_action( 'plugins_loaded', array( $this, 'check_twitter_tags' ), 999 );
- add_action( 'plugins_loaded', array( $this, 'check_rest_api_compat' ), 1000 );
-
- add_filter( 'plugins_url', array( 'Jetpack', 'maybe_min_asset' ), 1, 3 );
- add_action( 'style_loader_src', array( 'Jetpack', 'set_suffix_on_min' ), 10, 2 );
- add_filter( 'style_loader_tag', array( 'Jetpack', 'maybe_inline_style' ), 10, 2 );
-
- add_filter( 'map_meta_cap', array( $this, 'jetpack_custom_caps' ), 1, 4 );
-
- add_filter( 'jetpack_get_default_modules', array( $this, 'filter_default_modules' ) );
- add_filter( 'jetpack_get_default_modules', array( $this, 'handle_deprecated_modules' ), 99 );
-
- // A filter to control all just in time messages
- add_filter( 'jetpack_just_in_time_msgs', '__return_true', 9 );
- add_filter( 'jetpack_just_in_time_msg_cache', '__return_true', 9);
-
- // If enabled, point edit post, page, and comment links to Calypso instead of WP-Admin.
- // We should make sure to only do this for front end links.
- if ( Jetpack::get_option( 'edit_links_calypso_redirect' ) && ! is_admin() ) {
- add_filter( 'get_edit_post_link', array( $this, 'point_edit_post_links_to_calypso' ), 1, 2 );
- add_filter( 'get_edit_comment_link', array( $this, 'point_edit_comment_links_to_calypso' ), 1 );
-
- //we'll override wp_notify_postauthor and wp_notify_moderator pluggable functions
- //so they point moderation links on emails to Calypso
- jetpack_require_lib( 'functions.wp-notify' );
- }
-
- // Update the Jetpack plan from API on heartbeats
- add_action( 'jetpack_heartbeat', array( 'Jetpack_Plan', 'refresh_from_wpcom' ) );
-
- /**
- * This is the hack to concatenate all css files into one.
- * For description and reasoning see the implode_frontend_css method
- *
- * Super late priority so we catch all the registered styles
- */
- if( !is_admin() ) {
- add_action( 'wp_print_styles', array( $this, 'implode_frontend_css' ), -1 ); // Run first
- add_action( 'wp_print_footer_scripts', array( $this, 'implode_frontend_css' ), -1 ); // Run first to trigger before `print_late_styles`
- }
-
- /**
- * These are sync actions that we need to keep track of for jitms
- */
- add_filter( 'jetpack_sync_before_send_updated_option', array( $this, 'jetpack_track_last_sync_callback' ), 99 );
-
- // Actually push the stats on shutdown.
- if ( ! has_action( 'shutdown', array( $this, 'push_stats' ) ) ) {
- add_action( 'shutdown', array( $this, 'push_stats' ) );
- }
- }
-
- function point_edit_post_links_to_calypso( $default_url, $post_id ) {
- $post = get_post( $post_id );
-
- if ( empty( $post ) ) {
- return $default_url;
- }
-
- $post_type = $post->post_type;
-
- // Mapping the allowed CPTs on WordPress.com to corresponding paths in Calypso.
- // https://en.support.wordpress.com/custom-post-types/
- $allowed_post_types = array(
- 'post' => 'post',
- 'page' => 'page',
- 'jetpack-portfolio' => 'edit/jetpack-portfolio',
- 'jetpack-testimonial' => 'edit/jetpack-testimonial',
- );
-
- if ( ! in_array( $post_type, array_keys( $allowed_post_types ) ) ) {
- return $default_url;
- }
-
- $path_prefix = $allowed_post_types[ $post_type ];
-
- $site_slug = Jetpack::build_raw_urls( get_home_url() );
-
- return esc_url( sprintf( 'https://wordpress.com/%s/%s/%d', $path_prefix, $site_slug, $post_id ) );
- }
-
- function point_edit_comment_links_to_calypso( $url ) {
- // Take the `query` key value from the URL, and parse its parts to the $query_args. `amp;c` matches the comment ID.
- wp_parse_str( wp_parse_url( $url, PHP_URL_QUERY ), $query_args );
- return esc_url( sprintf( 'https://wordpress.com/comment/%s/%d',
- Jetpack::build_raw_urls( get_home_url() ),
- $query_args['amp;c']
- ) );
- }
-
- function jetpack_track_last_sync_callback( $params ) {
- /**
- * Filter to turn off jitm caching
- *
- * @since 5.4.0
- *
- * @param bool false Whether to cache just in time messages
- */
- if ( ! apply_filters( 'jetpack_just_in_time_msg_cache', false ) ) {
- return $params;
- }
-
- if ( is_array( $params ) && isset( $params[0] ) ) {
- $option = $params[0];
- if ( 'active_plugins' === $option ) {
- // use the cache if we can, but not terribly important if it gets evicted
- set_transient( 'jetpack_last_plugin_sync', time(), HOUR_IN_SECONDS );
- }
- }
-
- return $params;
- }
-
- function jetpack_connection_banner_callback() {
- check_ajax_referer( 'jp-connection-banner-nonce', 'nonce' );
-
- if ( isset( $_REQUEST['dismissBanner'] ) ) {
- Jetpack_Options::update_option( 'dismissed_connection_banner', 1 );
- wp_send_json_success();
- }
-
- wp_die();
- }
-
- /**
- * Removes all XML-RPC methods that are not `jetpack.*`.
- * Only used in our alternate XML-RPC endpoint, where we want to
- * ensure that Core and other plugins' methods are not exposed.
- *
- * @param array $methods
- * @return array filtered $methods
- */
- function remove_non_jetpack_xmlrpc_methods( $methods ) {
- $jetpack_methods = array();
-
- foreach ( $methods as $method => $callback ) {
- if ( 0 === strpos( $method, 'jetpack.' ) ) {
- $jetpack_methods[ $method ] = $callback;
- }
- }
-
- return $jetpack_methods;
- }
-
- /**
- * Since a lot of hosts use a hammer approach to "protecting" WordPress sites,
- * and just blanket block all requests to /xmlrpc.php, or apply other overly-sensitive
- * security/firewall policies, we provide our own alternate XML RPC API endpoint
- * which is accessible via a different URI. Most of the below is copied directly
- * from /xmlrpc.php so that we're replicating it as closely as possible.
- */
- function alternate_xmlrpc() {
- // phpcs:disable PHPCompatibility.PHP.RemovedGlobalVariables.http_raw_post_dataDeprecatedRemoved
- global $HTTP_RAW_POST_DATA;
-
- // Some browser-embedded clients send cookies. We don't want them.
- $_COOKIE = array();
-
- // A bug in PHP < 5.2.2 makes $HTTP_RAW_POST_DATA not set by default,
- // but we can do it ourself.
- if ( ! isset( $HTTP_RAW_POST_DATA ) ) {
- $HTTP_RAW_POST_DATA = file_get_contents( 'php://input' );
- }
-
- // fix for mozBlog and other cases where '<?xml' isn't on the very first line
- if ( isset( $HTTP_RAW_POST_DATA ) ) {
- $HTTP_RAW_POST_DATA = trim( $HTTP_RAW_POST_DATA );
- }
-
- // phpcs:enable
-
- include_once( ABSPATH . 'wp-admin/includes/admin.php' );
- include_once( ABSPATH . WPINC . '/class-IXR.php' );
- include_once( ABSPATH . WPINC . '/class-wp-xmlrpc-server.php' );
-
- /**
- * Filters the class used for handling XML-RPC requests.
- *
- * @since 3.1.0
- *
- * @param string $class The name of the XML-RPC server class.
- */
- $wp_xmlrpc_server_class = apply_filters( 'wp_xmlrpc_server_class', 'wp_xmlrpc_server' );
- $wp_xmlrpc_server = new $wp_xmlrpc_server_class;
-
- // Fire off the request
- nocache_headers();
- $wp_xmlrpc_server->serve_request();
-
- exit;
- }
-
- function jetpack_admin_ajax_tracks_callback() {
- // Check for nonce
- if ( ! isset( $_REQUEST['tracksNonce'] ) || ! wp_verify_nonce( $_REQUEST['tracksNonce'], 'jp-tracks-ajax-nonce' ) ) {
- wp_die( 'Permissions check failed.' );
- }
-
- if ( ! isset( $_REQUEST['tracksEventName'] ) || ! isset( $_REQUEST['tracksEventType'] ) ) {
- wp_die( 'No valid event name or type.' );
- }
-
- $tracks_data = array();
- if ( 'click' === $_REQUEST['tracksEventType'] && isset( $_REQUEST['tracksEventProp'] ) ) {
- if ( is_array( $_REQUEST['tracksEventProp'] ) ) {
- $tracks_data = $_REQUEST['tracksEventProp'];
- } else {
- $tracks_data = array( 'clicked' => $_REQUEST['tracksEventProp'] );
- }
- }
-
- JetpackTracking::record_user_event( $_REQUEST['tracksEventName'], $tracks_data );
- wp_send_json_success();
- wp_die();
- }
-
- /**
- * The callback for the JITM ajax requests.
- */
- function jetpack_jitm_ajax_callback() {
- // Check for nonce
- if ( ! isset( $_REQUEST['jitmNonce'] ) || ! wp_verify_nonce( $_REQUEST['jitmNonce'], 'jetpack-jitm-nonce' ) ) {
- wp_die( 'Module activation failed due to lack of appropriate permissions' );
- }
- if ( isset( $_REQUEST['jitmActionToTake'] ) && 'activate' == $_REQUEST['jitmActionToTake'] ) {
- $module_slug = $_REQUEST['jitmModule'];
- Jetpack::log( 'activate', $module_slug );
- Jetpack::activate_module( $module_slug, false, false );
- Jetpack::state( 'message', 'no_message' );
-
- //A Jetpack module is being activated through a JITM, track it
- $this->stat( 'jitm', $module_slug.'-activated-' . JETPACK__VERSION );
- $this->do_stats( 'server_side' );
-
- wp_send_json_success();
- }
- if ( isset( $_REQUEST['jitmActionToTake'] ) && 'dismiss' == $_REQUEST['jitmActionToTake'] ) {
- // get the hide_jitm options array
- $jetpack_hide_jitm = Jetpack_Options::get_option( 'hide_jitm' );
- $module_slug = $_REQUEST['jitmModule'];
-
- if( ! $jetpack_hide_jitm ) {
- $jetpack_hide_jitm = array(
- $module_slug => 'hide'
- );
- } else {
- $jetpack_hide_jitm[$module_slug] = 'hide';
- }
-
- Jetpack_Options::update_option( 'hide_jitm', $jetpack_hide_jitm );
-
- //jitm is being dismissed forever, track it
- $this->stat( 'jitm', $module_slug.'-dismissed-' . JETPACK__VERSION );
- $this->do_stats( 'server_side' );
-
- wp_send_json_success();
- }
- if ( isset( $_REQUEST['jitmActionToTake'] ) && 'launch' == $_REQUEST['jitmActionToTake'] ) {
- $module_slug = $_REQUEST['jitmModule'];
-
- // User went to WordPress.com, track this
- $this->stat( 'jitm', $module_slug.'-wordpress-tools-' . JETPACK__VERSION );
- $this->do_stats( 'server_side' );
-
- wp_send_json_success();
- }
- if ( isset( $_REQUEST['jitmActionToTake'] ) && 'viewed' == $_REQUEST['jitmActionToTake'] ) {
- $track = $_REQUEST['jitmModule'];
-
- // User is viewing JITM, track it.
- $this->stat( 'jitm', $track . '-viewed-' . JETPACK__VERSION );
- $this->do_stats( 'server_side' );
-
- wp_send_json_success();
- }
- }
-
- /**
- * If there are any stats that need to be pushed, but haven't been, push them now.
- */
- function push_stats() {
- if ( ! empty( $this->stats ) ) {
- $this->do_stats( 'server_side' );
- }
- }
-
- function jetpack_custom_caps( $caps, $cap, $user_id, $args ) {
- switch( $cap ) {
- case 'jetpack_connect' :
- case 'jetpack_reconnect' :
- if ( Jetpack::is_development_mode() ) {
- $caps = array( 'do_not_allow' );
- break;
- }
- /**
- * Pass through. If it's not development mode, these should match disconnect.
- * Let users disconnect if it's development mode, just in case things glitch.
- */
- case 'jetpack_disconnect' :
- /**
- * In multisite, can individual site admins manage their own connection?
- *
- * Ideally, this should be extracted out to a separate filter in the Jetpack_Network class.
- */
- if ( is_multisite() && ! is_super_admin() && is_plugin_active_for_network( 'jetpack/jetpack.php' ) ) {
- if ( ! Jetpack_Network::init()->get_option( 'sub-site-connection-override' ) ) {
- /**
- * We need to update the option name -- it's terribly unclear which
- * direction the override goes.
- *
- * @todo: Update the option name to `sub-sites-can-manage-own-connections`
- */
- $caps = array( 'do_not_allow' );
- break;
- }
- }
-
- $caps = array( 'manage_options' );
- break;
- case 'jetpack_manage_modules' :
- case 'jetpack_activate_modules' :
- case 'jetpack_deactivate_modules' :
- $caps = array( 'manage_options' );
- break;
- case 'jetpack_configure_modules' :
- $caps = array( 'manage_options' );
- break;
- case 'jetpack_manage_autoupdates' :
- $caps = array(
- 'manage_options',
- 'update_plugins',
- );
- break;
- case 'jetpack_network_admin_page':
- case 'jetpack_network_settings_page':
- $caps = array( 'manage_network_plugins' );
- break;
- case 'jetpack_network_sites_page':
- $caps = array( 'manage_sites' );
- break;
- case 'jetpack_admin_page' :
- if ( Jetpack::is_development_mode() ) {
- $caps = array( 'manage_options' );
- break;
- } else {
- $caps = array( 'read' );
- }
- break;
- case 'jetpack_connect_user' :
- if ( Jetpack::is_development_mode() ) {
- $caps = array( 'do_not_allow' );
- break;
- }
- $caps = array( 'read' );
- break;
- }
- return $caps;
- }
-
- function require_jetpack_authentication() {
- // Don't let anyone authenticate
- $_COOKIE = array();
- remove_all_filters( 'authenticate' );
- remove_all_actions( 'wp_login_failed' );
-
- if ( Jetpack::is_active() ) {
- // Allow Jetpack authentication
- add_filter( 'authenticate', array( $this, 'authenticate_jetpack' ), 10, 3 );
- }
- }
-
- /**
- * Load language files
- * @action plugins_loaded
- */
- public static function plugin_textdomain() {
- // Note to self, the third argument must not be hardcoded, to account for relocated folders.
- load_plugin_textdomain( 'jetpack', false, dirname( plugin_basename( JETPACK__PLUGIN_FILE ) ) . '/languages/' );
- }
-
- /**
- * Register assets for use in various modules and the Jetpack admin page.
- *
- * @uses wp_script_is, wp_register_script, plugins_url
- * @action wp_loaded
- * @return null
- */
- public function register_assets() {
- if ( ! wp_script_is( 'spin', 'registered' ) ) {
- wp_register_script(
- 'spin',
- self::get_file_url_for_environment( '_inc/build/spin.min.js', '_inc/spin.js' ),
- false,
- '1.3'
- );
- }
-
- if ( ! wp_script_is( 'jquery.spin', 'registered' ) ) {
- wp_register_script(
- 'jquery.spin',
- self::get_file_url_for_environment( '_inc/build/jquery.spin.min.js', '_inc/jquery.spin.js' ),
- array( 'jquery', 'spin' ),
- '1.3'
- );
- }
-
- if ( ! wp_script_is( 'jetpack-gallery-settings', 'registered' ) ) {
- wp_register_script(
- 'jetpack-gallery-settings',
- self::get_file_url_for_environment( '_inc/build/gallery-settings.min.js', '_inc/gallery-settings.js' ),
- array( 'media-views' ),
- '20121225'
- );
- }
-
- if ( ! wp_script_is( 'jetpack-twitter-timeline', 'registered' ) ) {
- wp_register_script(
- 'jetpack-twitter-timeline',
- self::get_file_url_for_environment( '_inc/build/twitter-timeline.min.js', '_inc/twitter-timeline.js' ),
- array( 'jquery' ),
- '4.0.0',
- true
- );
- }
-
- if ( ! wp_script_is( 'jetpack-facebook-embed', 'registered' ) ) {
- wp_register_script(
- 'jetpack-facebook-embed',
- self::get_file_url_for_environment( '_inc/build/facebook-embed.min.js', '_inc/facebook-embed.js' ),
- array( 'jquery' ),
- null,
- true
- );
-
- /** This filter is documented in modules/sharedaddy/sharing-sources.php */
- $fb_app_id = apply_filters( 'jetpack_sharing_facebook_app_id', '249643311490' );
- if ( ! is_numeric( $fb_app_id ) ) {
- $fb_app_id = '';
- }
- wp_localize_script(
- 'jetpack-facebook-embed',
- 'jpfbembed',
- array(
- 'appid' => $fb_app_id,
- 'locale' => $this->get_locale(),
- )
- );
- }
-
- /**
- * As jetpack_register_genericons is by default fired off a hook,
- * the hook may have already fired by this point.
- * So, let's just trigger it manually.
- */
- require_once( JETPACK__PLUGIN_DIR . '_inc/genericons.php' );
- jetpack_register_genericons();
-
- /**
- * Register the social logos
- */
- require_once( JETPACK__PLUGIN_DIR . '_inc/social-logos.php' );
- jetpack_register_social_logos();
-
- if ( ! wp_style_is( 'jetpack-icons', 'registered' ) )
- wp_register_style( 'jetpack-icons', plugins_url( 'css/jetpack-icons.min.css', JETPACK__PLUGIN_FILE ), false, JETPACK__VERSION );
- }
-
- /**
- * Guess locale from language code.
- *
- * @param string $lang Language code.
- * @return string|bool
- */
- function guess_locale_from_lang( $lang ) {
- if ( 'en' === $lang || 'en_US' === $lang || ! $lang ) {
- return 'en_US';
- }
-
- if ( ! class_exists( 'GP_Locales' ) ) {
- if ( ! defined( 'JETPACK__GLOTPRESS_LOCALES_PATH' ) || ! file_exists( JETPACK__GLOTPRESS_LOCALES_PATH ) ) {
- return false;
- }
-
- require JETPACK__GLOTPRESS_LOCALES_PATH;
- }
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- // WP.com: get_locale() returns 'it'
- $locale = GP_Locales::by_slug( $lang );
- } else {
- // Jetpack: get_locale() returns 'it_IT';
- $locale = GP_Locales::by_field( 'facebook_locale', $lang );
- }
-
- if ( ! $locale ) {
- return false;
- }
-
- if ( empty( $locale->facebook_locale ) ) {
- if ( empty( $locale->wp_locale ) ) {
- return false;
- } else {
- // Facebook SDK is smart enough to fall back to en_US if a
- // locale isn't supported. Since supported Facebook locales
- // can fall out of sync, we'll attempt to use the known
- // wp_locale value and rely on said fallback.
- return $locale->wp_locale;
- }
- }
-
- return $locale->facebook_locale;
- }
-
- /**
- * Get the locale.
- *
- * @return string|bool
- */
- function get_locale() {
- $locale = $this->guess_locale_from_lang( get_locale() );
-
- if ( ! $locale ) {
- $locale = 'en_US';
- }
-
- return $locale;
- }
-
- /**
- * Device Pixels support
- * This improves the resolution of gravatars and wordpress.com uploads on hi-res and zoomed browsers.
- */
- function devicepx() {
- if ( Jetpack::is_active() && ! Jetpack_AMP_Support::is_amp_request() ) {
- wp_enqueue_script( 'devicepx', 'https://s0.wp.com/wp-content/js/devicepx-jetpack.js', array(), gmdate( 'oW' ), true );
- }
- }
-
- /**
- * Return the network_site_url so that .com knows what network this site is a part of.
- * @param bool $option
- * @return string
- */
- public function jetpack_main_network_site_option( $option ) {
- return network_site_url();
- }
- /**
- * Network Name.
- */
- static function network_name( $option = null ) {
- global $current_site;
- return $current_site->site_name;
- }
- /**
- * Does the network allow new user and site registrations.
- * @return string
- */
- static function network_allow_new_registrations( $option = null ) {
- return ( in_array( get_site_option( 'registration' ), array('none', 'user', 'blog', 'all' ) ) ? get_site_option( 'registration') : 'none' );
- }
- /**
- * Does the network allow admins to add new users.
- * @return boolian
- */
- static function network_add_new_users( $option = null ) {
- return (bool) get_site_option( 'add_new_users' );
- }
- /**
- * File upload psace left per site in MB.
- * -1 means NO LIMIT.
- * @return number
- */
- static function network_site_upload_space( $option = null ) {
- // value in MB
- return ( get_site_option( 'upload_space_check_disabled' ) ? -1 : get_space_allowed() );
- }
-
- /**
- * Network allowed file types.
- * @return string
- */
- static function network_upload_file_types( $option = null ) {
- return get_site_option( 'upload_filetypes', 'jpg jpeg png gif' );
- }
-
- /**
- * Maximum file upload size set by the network.
- * @return number
- */
- static function network_max_upload_file_size( $option = null ) {
- // value in KB
- return get_site_option( 'fileupload_maxk', 300 );
- }
-
- /**
- * Lets us know if a site allows admins to manage the network.
- * @return array
- */
- static function network_enable_administration_menus( $option = null ) {
- return get_site_option( 'menu_items' );
- }
-
- /**
- * If a user has been promoted to or demoted from admin, we need to clear the
- * jetpack_other_linked_admins transient.
- *
- * @since 4.3.2
- * @since 4.4.0 $old_roles is null by default and if it's not passed, the transient is cleared.
- *
- * @param int $user_id The user ID whose role changed.
- * @param string $role The new role.
- * @param array $old_roles An array of the user's previous roles.
- */
- function maybe_clear_other_linked_admins_transient( $user_id, $role, $old_roles = null ) {
- if ( 'administrator' == $role
- || ( is_array( $old_roles ) && in_array( 'administrator', $old_roles ) )
- || is_null( $old_roles )
- ) {
- delete_transient( 'jetpack_other_linked_admins' );
- }
- }
-
- /**
- * Checks to see if there are any other users available to become primary
- * Users must both:
- * - Be linked to wpcom
- * - Be an admin
- *
- * @return mixed False if no other users are linked, Int if there are.
- */
- static function get_other_linked_admins() {
- $other_linked_users = get_transient( 'jetpack_other_linked_admins' );
-
- if ( false === $other_linked_users ) {
- $admins = get_users( array( 'role' => 'administrator' ) );
- if ( count( $admins ) > 1 ) {
- $available = array();
- foreach ( $admins as $admin ) {
- if ( Jetpack::is_user_connected( $admin->ID ) ) {
- $available[] = $admin->ID;
- }
- }
-
- $count_connected_admins = count( $available );
- if ( count( $available ) > 1 ) {
- $other_linked_users = $count_connected_admins;
- } else {
- $other_linked_users = 0;
- }
- } else {
- $other_linked_users = 0;
- }
-
- set_transient( 'jetpack_other_linked_admins', $other_linked_users, HOUR_IN_SECONDS );
- }
-
- return ( 0 === $other_linked_users ) ? false : $other_linked_users;
- }
-
- /**
- * Return whether we are dealing with a multi network setup or not.
- * The reason we are type casting this is because we want to avoid the situation where
- * the result is false since when is_main_network_option return false it cases
- * the rest the get_option( 'jetpack_is_multi_network' ); to return the value that is set in the
- * database which could be set to anything as opposed to what this function returns.
- * @param bool $option
- *
- * @return boolean
- */
- public function is_main_network_option( $option ) {
- // return '1' or ''
- return (string) (bool) Jetpack::is_multi_network();
- }
-
- /**
- * Return true if we are with multi-site or multi-network false if we are dealing with single site.
- *
- * @param string $option
- * @return boolean
- */
- public function is_multisite( $option ) {
- return (string) (bool) is_multisite();
- }
-
- /**
- * Implemented since there is no core is multi network function
- * Right now there is no way to tell if we which network is the dominant network on the system
- *
- * @since 3.3
- * @return boolean
- */
- public static function is_multi_network() {
- global $wpdb;
-
- // if we don't have a multi site setup no need to do any more
- if ( ! is_multisite() ) {
- return false;
- }
-
- $num_sites = $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->site}" );
- if ( $num_sites > 1 ) {
- return true;
- } else {
- return false;
- }
- }
-
- /**
- * Trigger an update to the main_network_site when we update the siteurl of a site.
- * @return null
- */
- function update_jetpack_main_network_site_option() {
- _deprecated_function( __METHOD__, 'jetpack-4.2' );
- }
- /**
- * Triggered after a user updates the network settings via Network Settings Admin Page
- *
- */
- function update_jetpack_network_settings() {
- _deprecated_function( __METHOD__, 'jetpack-4.2' );
- // Only sync this info for the main network site.
- }
-
- /**
- * Get back if the current site is single user site.
- *
- * @return bool
- */
- public static function is_single_user_site() {
- global $wpdb;
-
- if ( false === ( $some_users = get_transient( 'jetpack_is_single_user' ) ) ) {
- $some_users = $wpdb->get_var( "SELECT COUNT(*) FROM (SELECT user_id FROM $wpdb->usermeta WHERE meta_key = '{$wpdb->prefix}capabilities' LIMIT 2) AS someusers" );
- set_transient( 'jetpack_is_single_user', (int) $some_users, 12 * HOUR_IN_SECONDS );
- }
- return 1 === (int) $some_users;
- }
-
- /**
- * Returns true if the site has file write access false otherwise.
- * @return string ( '1' | '0' )
- **/
- public static function file_system_write_access() {
- if ( ! function_exists( 'get_filesystem_method' ) ) {
- require_once( ABSPATH . 'wp-admin/includes/file.php' );
- }
-
- require_once( ABSPATH . 'wp-admin/includes/template.php' );
-
- $filesystem_method = get_filesystem_method();
- if ( $filesystem_method === 'direct' ) {
- return 1;
- }
-
- ob_start();
- $filesystem_credentials_are_stored = request_filesystem_credentials( self_admin_url() );
- ob_end_clean();
- if ( $filesystem_credentials_are_stored ) {
- return 1;
- }
- return 0;
- }
-
- /**
- * Finds out if a site is using a version control system.
- * @return string ( '1' | '0' )
- **/
- public static function is_version_controlled() {
- _deprecated_function( __METHOD__, 'jetpack-4.2', 'Jetpack_Sync_Functions::is_version_controlled' );
- return (string) (int) Jetpack_Sync_Functions::is_version_controlled();
- }
-
- /**
- * Determines whether the current theme supports featured images or not.
- * @return string ( '1' | '0' )
- */
- public static function featured_images_enabled() {
- _deprecated_function( __METHOD__, 'jetpack-4.2' );
- return current_theme_supports( 'post-thumbnails' ) ? '1' : '0';
- }
-
- /**
- * Wrapper for core's get_avatar_url(). This one is deprecated.
- *
- * @deprecated 4.7 use get_avatar_url instead.
- * @param int|string|object $id_or_email A user ID, email address, or comment object
- * @param int $size Size of the avatar image
- * @param string $default URL to a default image to use if no avatar is available
- * @param bool $force_display Whether to force it to return an avatar even if show_avatars is disabled
- *
- * @return array
- */
- public static function get_avatar_url( $id_or_email, $size = 96, $default = '', $force_display = false ) {
- _deprecated_function( __METHOD__, 'jetpack-4.7', 'get_avatar_url' );
- return get_avatar_url( $id_or_email, array(
- 'size' => $size,
- 'default' => $default,
- 'force_default' => $force_display,
- ) );
- }
-
- /**
- * jetpack_updates is saved in the following schema:
- *
- * array (
- * 'plugins' => (int) Number of plugin updates available.
- * 'themes' => (int) Number of theme updates available.
- * 'wordpress' => (int) Number of WordPress core updates available.
- * 'translations' => (int) Number of translation updates available.
- * 'total' => (int) Total of all available updates.
- * 'wp_update_version' => (string) The latest available version of WordPress, only present if a WordPress update is needed.
- * )
- * @return array
- */
- public static function get_updates() {
- $update_data = wp_get_update_data();
-
- // Stores the individual update counts as well as the total count.
- if ( isset( $update_data['counts'] ) ) {
- $updates = $update_data['counts'];
- }
-
- // If we need to update WordPress core, let's find the latest version number.
- if ( ! empty( $updates['wordpress'] ) ) {
- $cur = get_preferred_from_update_core();
- if ( isset( $cur->response ) && 'upgrade' === $cur->response ) {
- $updates['wp_update_version'] = $cur->current;
- }
- }
- return isset( $updates ) ? $updates : array();
- }
-
- public static function get_update_details() {
- $update_details = array(
- 'update_core' => get_site_transient( 'update_core' ),
- 'update_plugins' => get_site_transient( 'update_plugins' ),
- 'update_themes' => get_site_transient( 'update_themes' ),
- );
- return $update_details;
- }
-
- public static function refresh_update_data() {
- _deprecated_function( __METHOD__, 'jetpack-4.2' );
-
- }
-
- public static function refresh_theme_data() {
- _deprecated_function( __METHOD__, 'jetpack-4.2' );
- }
-
- /**
- * Is Jetpack active?
- */
- public static function is_active() {
- return (bool) Jetpack_Data::get_access_token( JETPACK_MASTER_USER );
- }
-
- /**
- * Make an API call to WordPress.com for plan status
- *
- * @deprecated 7.2.0 Use Jetpack_Plan::refresh_from_wpcom.
- *
- * @return bool True if plan is updated, false if no update
- */
- public static function refresh_active_plan_from_wpcom() {
- _deprecated_function( __METHOD__, 'jetpack-7.2.0', 'Jetpack_Plan::refresh_from_wpcom' );
- return Jetpack_Plan::refresh_from_wpcom();
- }
-
- /**
- * Get the plan that this Jetpack site is currently using
- *
- * @deprecated 7.2.0 Use Jetpack_Plan::get.
- * @return array Active Jetpack plan details.
- */
- public static function get_active_plan() {
- _deprecated_function( __METHOD__, 'jetpack-7.2.0', 'Jetpack_Plan::get' );
- return Jetpack_Plan::get();
- }
-
- /**
- * Determine whether the active plan supports a particular feature
- *
- * @deprecated 7.2.0 Use Jetpack_Plan::supports.
- * @return bool True if plan supports feature, false if not.
- */
- public static function active_plan_supports( $feature ) {
- _deprecated_function( __METHOD__, 'jetpack-7.2.0', 'Jetpack_Plan::supports' );
- return Jetpack_Plan::supports( $feature );
- }
-
- /**
- * Is Jetpack in development (offline) mode?
- */
- public static function is_development_mode() {
- $development_mode = false;
-
- if ( defined( 'JETPACK_DEV_DEBUG' ) ) {
- $development_mode = JETPACK_DEV_DEBUG;
- } elseif ( $site_url = site_url() ) {
- $development_mode = false === strpos( $site_url, '.' );
- }
-
- /**
- * Filters Jetpack's development mode.
- *
- * @see https://jetpack.com/support/development-mode/
- *
- * @since 2.2.1
- *
- * @param bool $development_mode Is Jetpack's development mode active.
- */
- $development_mode = ( bool ) apply_filters( 'jetpack_development_mode', $development_mode );
- return $development_mode;
- }
-
- /**
- * Whether the site is currently onboarding or not.
- * A site is considered as being onboarded if it currently has an onboarding token.
- *
- * @since 5.8
- *
- * @access public
- * @static
- *
- * @return bool True if the site is currently onboarding, false otherwise
- */
- public static function is_onboarding() {
- return Jetpack_Options::get_option( 'onboarding' ) !== false;
- }
-
- /**
- * Determines reason for Jetpack development mode.
- */
- public static function development_mode_trigger_text() {
- if ( ! Jetpack::is_development_mode() ) {
- return __( 'Jetpack is not in Development Mode.', 'jetpack' );
- }
-
- if ( defined( 'JETPACK_DEV_DEBUG' ) && JETPACK_DEV_DEBUG ) {
- $notice = __( 'The JETPACK_DEV_DEBUG constant is defined in wp-config.php or elsewhere.', 'jetpack' );
- } elseif ( site_url() && false === strpos( site_url(), '.' ) ) {
- $notice = __( 'The site URL lacking a dot (e.g. http://localhost).', 'jetpack' );
- } else {
- $notice = __( 'The jetpack_development_mode filter is set to true.', 'jetpack' );
- }
-
- return $notice;
-
- }
- /**
- * Get Jetpack development mode notice text and notice class.
- *
- * Mirrors the checks made in Jetpack::is_development_mode
- *
- */
- public static function show_development_mode_notice() {
- if ( Jetpack::is_development_mode() ) {
- $notice = sprintf(
- /* translators: %s is a URL */
- __( 'In <a href="%s" target="_blank">Development Mode</a>:', 'jetpack' ),
- 'https://jetpack.com/support/development-mode/'
- );
-
- $notice .= ' ' . Jetpack::development_mode_trigger_text();
-
- echo '<div class="updated" style="border-color: #f0821e;"><p>' . $notice . '</p></div>';
- }
-
- // Throw up a notice if using a development version and as for feedback.
- if ( Jetpack::is_development_version() ) {
- /* translators: %s is a URL */
- $notice = sprintf( __( 'You are currently running a development version of Jetpack. <a href="%s" target="_blank">Submit your feedback</a>', 'jetpack' ), 'https://jetpack.com/contact-support/beta-group/' );
-
- echo '<div class="updated" style="border-color: #f0821e;"><p>' . $notice . '</p></div>';
- }
- // Throw up a notice if using staging mode
- if ( Jetpack::is_staging_site() ) {
- /* translators: %s is a URL */
- $notice = sprintf( __( 'You are running Jetpack on a <a href="%s" target="_blank">staging server</a>.', 'jetpack' ), 'https://jetpack.com/support/staging-sites/' );
-
- echo '<div class="updated" style="border-color: #f0821e;"><p>' . $notice . '</p></div>';
- }
- }
-
- /**
- * Whether Jetpack's version maps to a public release, or a development version.
- */
- public static function is_development_version() {
- /**
- * Allows filtering whether this is a development version of Jetpack.
- *
- * This filter is especially useful for tests.
- *
- * @since 4.3.0
- *
- * @param bool $development_version Is this a develoment version of Jetpack?
- */
- return (bool) apply_filters(
- 'jetpack_development_version',
- ! preg_match( '/^\d+(\.\d+)+$/', Jetpack_Constants::get_constant( 'JETPACK__VERSION' ) )
- );
- }
-
- /**
- * Is a given user (or the current user if none is specified) linked to a WordPress.com user?
- */
- public static function is_user_connected( $user_id = false ) {
- $user_id = false === $user_id ? get_current_user_id() : absint( $user_id );
- if ( ! $user_id ) {
- return false;
- }
-
- return (bool) Jetpack_Data::get_access_token( $user_id );
- }
-
- /**
- * Get the wpcom user data of the current|specified connected user.
- */
- public static function get_connected_user_data( $user_id = null ) {
- if ( ! $user_id ) {
- $user_id = get_current_user_id();
- }
-
- $transient_key = "jetpack_connected_user_data_$user_id";
-
- if ( $cached_user_data = get_transient( $transient_key ) ) {
- return $cached_user_data;
- }
-
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client( array(
- 'user_id' => $user_id,
- ) );
- $xml->query( 'wpcom.getUser' );
- if ( ! $xml->isError() ) {
- $user_data = $xml->getResponse();
- set_transient( $transient_key, $xml->getResponse(), DAY_IN_SECONDS );
- return $user_data;
- }
-
- return false;
- }
-
- /**
- * Get the wpcom email of the current|specified connected user.
- */
- public static function get_connected_user_email( $user_id = null ) {
- if ( ! $user_id ) {
- $user_id = get_current_user_id();
- }
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client( array(
- 'user_id' => $user_id,
- ) );
- $xml->query( 'wpcom.getUserEmail' );
- if ( ! $xml->isError() ) {
- return $xml->getResponse();
- }
- return false;
- }
-
- /**
- * Get the wpcom email of the master user.
- */
- public static function get_master_user_email() {
- $master_user_id = Jetpack_Options::get_option( 'master_user' );
- if ( $master_user_id ) {
- return self::get_connected_user_email( $master_user_id );
- }
- return '';
- }
-
- function current_user_is_connection_owner() {
- $user_token = Jetpack_Data::get_access_token( JETPACK_MASTER_USER );
- return $user_token && is_object( $user_token ) && isset( $user_token->external_user_id ) && get_current_user_id() === $user_token->external_user_id;
- }
-
- /**
- * Gets current user IP address.
- *
- * @param bool $check_all_headers Check all headers? Default is `false`.
- *
- * @return string Current user IP address.
- */
- public static function current_user_ip( $check_all_headers = false ) {
- if ( $check_all_headers ) {
- foreach ( array(
- 'HTTP_CF_CONNECTING_IP',
- 'HTTP_CLIENT_IP',
- 'HTTP_X_FORWARDED_FOR',
- 'HTTP_X_FORWARDED',
- 'HTTP_X_CLUSTER_CLIENT_IP',
- 'HTTP_FORWARDED_FOR',
- 'HTTP_FORWARDED',
- 'HTTP_VIA',
- ) as $key ) {
- if ( ! empty( $_SERVER[ $key ] ) ) {
- return $_SERVER[ $key ];
- }
- }
- }
-
- return ! empty( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : '';
- }
-
- /**
- * Add any extra oEmbed providers that we know about and use on wpcom for feature parity.
- */
- function extra_oembed_providers() {
- // Cloudup: https://dev.cloudup.com/#oembed
- wp_oembed_add_provider( 'https://cloudup.com/*' , 'https://cloudup.com/oembed' );
- wp_oembed_add_provider( 'https://me.sh/*', 'https://me.sh/oembed?format=json' );
- wp_oembed_add_provider( '#https?://(www\.)?gfycat\.com/.*#i', 'https://api.gfycat.com/v1/oembed', true );
- wp_oembed_add_provider( '#https?://[^.]+\.(wistia\.com|wi\.st)/(medias|embed)/.*#', 'https://fast.wistia.com/oembed', true );
- wp_oembed_add_provider( '#https?://sketchfab\.com/.*#i', 'https://sketchfab.com/oembed', true );
- wp_oembed_add_provider( '#https?://(www\.)?icloud\.com/keynote/.*#i', 'https://iwmb.icloud.com/iwmb/oembed', true );
- }
-
- /**
- * Synchronize connected user role changes
- */
- function user_role_change( $user_id ) {
- _deprecated_function( __METHOD__, 'jetpack-4.2', 'Jetpack_Sync_Users::user_role_change()' );
- Jetpack_Sync_Users::user_role_change( $user_id );
- }
-
- /**
- * Loads the currently active modules.
- */
- public static function load_modules() {
- if (
- ! self::is_active()
- && ! self::is_development_mode()
- && ! self::is_onboarding()
- && (
- ! is_multisite()
- || ! get_site_option( 'jetpack_protect_active' )
- )
- ) {
- return;
- }
-
- $version = Jetpack_Options::get_option( 'version' );
- if ( ! $version ) {
- $version = $old_version = JETPACK__VERSION . ':' . time();
- /** This action is documented in class.jetpack.php */
- do_action( 'updating_jetpack_version', $version, false );
- Jetpack_Options::update_options( compact( 'version', 'old_version' ) );
- }
- list( $version ) = explode( ':', $version );
-
- $modules = array_filter( Jetpack::get_active_modules(), array( 'Jetpack', 'is_module' ) );
-
- $modules_data = array();
-
- // Don't load modules that have had "Major" changes since the stored version until they have been deactivated/reactivated through the lint check.
- if ( version_compare( $version, JETPACK__VERSION, '<' ) ) {
- $updated_modules = array();
- foreach ( $modules as $module ) {
- $modules_data[ $module ] = Jetpack::get_module( $module );
- if ( ! isset( $modules_data[ $module ]['changed'] ) ) {
- continue;
- }
-
- if ( version_compare( $modules_data[ $module ]['changed'], $version, '<=' ) ) {
- continue;
- }
-
- $updated_modules[] = $module;
- }
-
- $modules = array_diff( $modules, $updated_modules );
- }
-
- $is_development_mode = Jetpack::is_development_mode();
-
- foreach ( $modules as $index => $module ) {
- // If we're in dev mode, disable modules requiring a connection
- if ( $is_development_mode ) {
- // Prime the pump if we need to
- if ( empty( $modules_data[ $module ] ) ) {
- $modules_data[ $module ] = Jetpack::get_module( $module );
- }
- // If the module requires a connection, but we're in local mode, don't include it.
- if ( $modules_data[ $module ]['requires_connection'] ) {
- continue;
- }
- }
-
- if ( did_action( 'jetpack_module_loaded_' . $module ) ) {
- continue;
- }
-
- if ( ! include_once( Jetpack::get_module_path( $module ) ) ) {
- unset( $modules[ $index ] );
- self::update_active_modules( array_values( $modules ) );
- continue;
- }
-
- /**
- * Fires when a specific module is loaded.
- * The dynamic part of the hook, $module, is the module slug.
- *
- * @since 1.1.0
- */
- do_action( 'jetpack_module_loaded_' . $module );
- }
-
- /**
- * Fires when all the modules are loaded.
- *
- * @since 1.1.0
- */
- do_action( 'jetpack_modules_loaded' );
-
- // Load module-specific code that is needed even when a module isn't active. Loaded here because code contained therein may need actions such as setup_theme.
- require_once( JETPACK__PLUGIN_DIR . 'modules/module-extras.php' );
- }
-
- /**
- * Check if Jetpack's REST API compat file should be included
- * @action plugins_loaded
- * @return null
- */
- public function check_rest_api_compat() {
- /**
- * Filters the list of REST API compat files to be included.
- *
- * @since 2.2.5
- *
- * @param array $args Array of REST API compat files to include.
- */
- $_jetpack_rest_api_compat_includes = apply_filters( 'jetpack_rest_api_compat', array() );
-
- if ( function_exists( 'bbpress' ) )
- $_jetpack_rest_api_compat_includes[] = JETPACK__PLUGIN_DIR . 'class.jetpack-bbpress-json-api-compat.php';
-
- foreach ( $_jetpack_rest_api_compat_includes as $_jetpack_rest_api_compat_include )
- require_once $_jetpack_rest_api_compat_include;
- }
-
- /**
- * Gets all plugins currently active in values, regardless of whether they're
- * traditionally activated or network activated.
- *
- * @todo Store the result in core's object cache maybe?
- */
- public static function get_active_plugins() {
- $active_plugins = (array) get_option( 'active_plugins', array() );
-
- if ( is_multisite() ) {
- // Due to legacy code, active_sitewide_plugins stores them in the keys,
- // whereas active_plugins stores them in the values.
- $network_plugins = array_keys( get_site_option( 'active_sitewide_plugins', array() ) );
- if ( $network_plugins ) {
- $active_plugins = array_merge( $active_plugins, $network_plugins );
- }
- }
-
- sort( $active_plugins );
-
- return array_unique( $active_plugins );
- }
-
- /**
- * Gets and parses additional plugin data to send with the heartbeat data
- *
- * @since 3.8.1
- *
- * @return array Array of plugin data
- */
- public static function get_parsed_plugin_data() {
- if ( ! function_exists( 'get_plugins' ) ) {
- require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
- }
- /** This filter is documented in wp-admin/includes/class-wp-plugins-list-table.php */
- $all_plugins = apply_filters( 'all_plugins', get_plugins() );
- $active_plugins = Jetpack::get_active_plugins();
-
- $plugins = array();
- foreach ( $all_plugins as $path => $plugin_data ) {
- $plugins[ $path ] = array(
- 'is_active' => in_array( $path, $active_plugins ),
- 'file' => $path,
- 'name' => $plugin_data['Name'],
- 'version' => $plugin_data['Version'],
- 'author' => $plugin_data['Author'],
- );
- }
-
- return $plugins;
- }
-
- /**
- * Gets and parses theme data to send with the heartbeat data
- *
- * @since 3.8.1
- *
- * @return array Array of theme data
- */
- public static function get_parsed_theme_data() {
- $all_themes = wp_get_themes( array( 'allowed' => true ) );
- $header_keys = array( 'Name', 'Author', 'Version', 'ThemeURI', 'AuthorURI', 'Status', 'Tags' );
-
- $themes = array();
- foreach ( $all_themes as $slug => $theme_data ) {
- $theme_headers = array();
- foreach ( $header_keys as $header_key ) {
- $theme_headers[ $header_key ] = $theme_data->get( $header_key );
- }
-
- $themes[ $slug ] = array(
- 'is_active_theme' => $slug == wp_get_theme()->get_template(),
- 'slug' => $slug,
- 'theme_root' => $theme_data->get_theme_root_uri(),
- 'parent' => $theme_data->parent(),
- 'headers' => $theme_headers
- );
- }
-
- return $themes;
- }
-
- /**
- * Checks whether a specific plugin is active.
- *
- * We don't want to store these in a static variable, in case
- * there are switch_to_blog() calls involved.
- */
- public static function is_plugin_active( $plugin = 'jetpack/jetpack.php' ) {
- return in_array( $plugin, self::get_active_plugins() );
- }
-
- /**
- * Check if Jetpack's Open Graph tags should be used.
- * If certain plugins are active, Jetpack's og tags are suppressed.
- *
- * @uses Jetpack::get_active_modules, add_filter, get_option, apply_filters
- * @action plugins_loaded
- * @return null
- */
- public function check_open_graph() {
- if ( in_array( 'publicize', Jetpack::get_active_modules() ) || in_array( 'sharedaddy', Jetpack::get_active_modules() ) ) {
- add_filter( 'jetpack_enable_open_graph', '__return_true', 0 );
- }
-
- $active_plugins = self::get_active_plugins();
-
- if ( ! empty( $active_plugins ) ) {
- foreach ( $this->open_graph_conflicting_plugins as $plugin ) {
- if ( in_array( $plugin, $active_plugins ) ) {
- add_filter( 'jetpack_enable_open_graph', '__return_false', 99 );
- break;
- }
- }
- }
-
- /**
- * Allow the addition of Open Graph Meta Tags to all pages.
- *
- * @since 2.0.3
- *
- * @param bool false Should Open Graph Meta tags be added. Default to false.
- */
- if ( apply_filters( 'jetpack_enable_open_graph', false ) ) {
- require_once JETPACK__PLUGIN_DIR . 'functions.opengraph.php';
- }
- }
-
- /**
- * Check if Jetpack's Twitter tags should be used.
- * If certain plugins are active, Jetpack's twitter tags are suppressed.
- *
- * @uses Jetpack::get_active_modules, add_filter, get_option, apply_filters
- * @action plugins_loaded
- * @return null
- */
- public function check_twitter_tags() {
-
- $active_plugins = self::get_active_plugins();
-
- if ( ! empty( $active_plugins ) ) {
- foreach ( $this->twitter_cards_conflicting_plugins as $plugin ) {
- if ( in_array( $plugin, $active_plugins ) ) {
- add_filter( 'jetpack_disable_twitter_cards', '__return_true', 99 );
- break;
- }
- }
- }
-
- /**
- * Allow Twitter Card Meta tags to be disabled.
- *
- * @since 2.6.0
- *
- * @param bool true Should Twitter Card Meta tags be disabled. Default to true.
- */
- if ( ! apply_filters( 'jetpack_disable_twitter_cards', false ) ) {
- require_once JETPACK__PLUGIN_DIR . 'class.jetpack-twitter-cards.php';
- }
- }
-
- /**
- * Allows plugins to submit security reports.
- *
- * @param string $type Report type (login_form, backup, file_scanning, spam)
- * @param string $plugin_file Plugin __FILE__, so that we can pull plugin data
- * @param array $args See definitions above
- */
- public static function submit_security_report( $type = '', $plugin_file = '', $args = array() ) {
- _deprecated_function( __FUNCTION__, 'jetpack-4.2', null );
- }
-
-/* Jetpack Options API */
-
- public static function get_option_names( $type = 'compact' ) {
- return Jetpack_Options::get_option_names( $type );
- }
-
- /**
- * Returns the requested option. Looks in jetpack_options or jetpack_$name as appropriate.
- *
- * @param string $name Option name
- * @param mixed $default (optional)
- */
- public static function get_option( $name, $default = false ) {
- return Jetpack_Options::get_option( $name, $default );
- }
-
- /**
- * Updates the single given option. Updates jetpack_options or jetpack_$name as appropriate.
- *
- * @deprecated 3.4 use Jetpack_Options::update_option() instead.
- * @param string $name Option name
- * @param mixed $value Option value
- */
- public static function update_option( $name, $value ) {
- _deprecated_function( __METHOD__, 'jetpack-3.4', 'Jetpack_Options::update_option()' );
- return Jetpack_Options::update_option( $name, $value );
- }
-
- /**
- * Updates the multiple given options. Updates jetpack_options and/or jetpack_$name as appropriate.
- *
- * @deprecated 3.4 use Jetpack_Options::update_options() instead.
- * @param array $array array( option name => option value, ... )
- */
- public static function update_options( $array ) {
- _deprecated_function( __METHOD__, 'jetpack-3.4', 'Jetpack_Options::update_options()' );
- return Jetpack_Options::update_options( $array );
- }
-
- /**
- * Deletes the given option. May be passed multiple option names as an array.
- * Updates jetpack_options and/or deletes jetpack_$name as appropriate.
- *
- * @deprecated 3.4 use Jetpack_Options::delete_option() instead.
- * @param string|array $names
- */
- public static function delete_option( $names ) {
- _deprecated_function( __METHOD__, 'jetpack-3.4', 'Jetpack_Options::delete_option()' );
- return Jetpack_Options::delete_option( $names );
- }
-
- /**
- * Enters a user token into the user_tokens option
- *
- * @param int $user_id
- * @param string $token
- * return bool
- */
- public static function update_user_token( $user_id, $token, $is_master_user ) {
- // not designed for concurrent updates
- $user_tokens = Jetpack_Options::get_option( 'user_tokens' );
- if ( ! is_array( $user_tokens ) )
- $user_tokens = array();
- $user_tokens[$user_id] = $token;
- if ( $is_master_user ) {
- $master_user = $user_id;
- $options = compact( 'user_tokens', 'master_user' );
- } else {
- $options = compact( 'user_tokens' );
- }
- return Jetpack_Options::update_options( $options );
- }
-
- /**
- * Returns an array of all PHP files in the specified absolute path.
- * Equivalent to glob( "$absolute_path/*.php" ).
- *
- * @param string $absolute_path The absolute path of the directory to search.
- * @return array Array of absolute paths to the PHP files.
- */
- public static function glob_php( $absolute_path ) {
- if ( function_exists( 'glob' ) ) {
- return glob( "$absolute_path/*.php" );
- }
-
- $absolute_path = untrailingslashit( $absolute_path );
- $files = array();
- if ( ! $dir = @opendir( $absolute_path ) ) {
- return $files;
- }
-
- while ( false !== $file = readdir( $dir ) ) {
- if ( '.' == substr( $file, 0, 1 ) || '.php' != substr( $file, -4 ) ) {
- continue;
- }
-
- $file = "$absolute_path/$file";
-
- if ( ! is_file( $file ) ) {
- continue;
- }
-
- $files[] = $file;
- }
-
- closedir( $dir );
-
- return $files;
- }
-
- public static function activate_new_modules( $redirect = false ) {
- if ( ! Jetpack::is_active() && ! Jetpack::is_development_mode() ) {
- return;
- }
-
- $jetpack_old_version = Jetpack_Options::get_option( 'version' ); // [sic]
- if ( ! $jetpack_old_version ) {
- $jetpack_old_version = $version = $old_version = '1.1:' . time();
- /** This action is documented in class.jetpack.php */
- do_action( 'updating_jetpack_version', $version, false );
- Jetpack_Options::update_options( compact( 'version', 'old_version' ) );
- }
-
- list( $jetpack_version ) = explode( ':', $jetpack_old_version ); // [sic]
-
- if ( version_compare( JETPACK__VERSION, $jetpack_version, '<=' ) ) {
- return;
- }
-
- $active_modules = Jetpack::get_active_modules();
- $reactivate_modules = array();
- foreach ( $active_modules as $active_module ) {
- $module = Jetpack::get_module( $active_module );
- if ( ! isset( $module['changed'] ) ) {
- continue;
- }
-
- if ( version_compare( $module['changed'], $jetpack_version, '<=' ) ) {
- continue;
- }
-
- $reactivate_modules[] = $active_module;
- Jetpack::deactivate_module( $active_module );
- }
-
- $new_version = JETPACK__VERSION . ':' . time();
- /** This action is documented in class.jetpack.php */
- do_action( 'updating_jetpack_version', $new_version, $jetpack_old_version );
- Jetpack_Options::update_options(
- array(
- 'version' => $new_version,
- 'old_version' => $jetpack_old_version,
- )
- );
-
- Jetpack::state( 'message', 'modules_activated' );
- Jetpack::activate_default_modules( $jetpack_version, JETPACK__VERSION, $reactivate_modules );
-
- if ( $redirect ) {
- $page = 'jetpack'; // make sure we redirect to either settings or the jetpack page
- if ( isset( $_GET['page'] ) && in_array( $_GET['page'], array( 'jetpack', 'jetpack_modules' ) ) ) {
- $page = $_GET['page'];
- }
-
- wp_safe_redirect( Jetpack::admin_url( 'page=' . $page ) );
- exit;
- }
- }
-
- /**
- * List available Jetpack modules. Simply lists .php files in /modules/.
- * Make sure to tuck away module "library" files in a sub-directory.
- */
- public static function get_available_modules( $min_version = false, $max_version = false ) {
- static $modules = null;
-
- if ( ! isset( $modules ) ) {
- $available_modules_option = Jetpack_Options::get_option( 'available_modules', array() );
- // Use the cache if we're on the front-end and it's available...
- if ( ! is_admin() && ! empty( $available_modules_option[ JETPACK__VERSION ] ) ) {
- $modules = $available_modules_option[ JETPACK__VERSION ];
- } else {
- $files = Jetpack::glob_php( JETPACK__PLUGIN_DIR . 'modules' );
-
- $modules = array();
-
- foreach ( $files as $file ) {
- if ( ! $headers = Jetpack::get_module( $file ) ) {
- continue;
- }
-
- $modules[ Jetpack::get_module_slug( $file ) ] = $headers['introduced'];
- }
-
- Jetpack_Options::update_option( 'available_modules', array(
- JETPACK__VERSION => $modules,
- ) );
- }
- }
-
- /**
- * Filters the array of modules available to be activated.
- *
- * @since 2.4.0
- *
- * @param array $modules Array of available modules.
- * @param string $min_version Minimum version number required to use modules.
- * @param string $max_version Maximum version number required to use modules.
- */
- $mods = apply_filters( 'jetpack_get_available_modules', $modules, $min_version, $max_version );
-
- if ( ! $min_version && ! $max_version ) {
- return array_keys( $mods );
- }
-
- $r = array();
- foreach ( $mods as $slug => $introduced ) {
- if ( $min_version && version_compare( $min_version, $introduced, '>=' ) ) {
- continue;
- }
-
- if ( $max_version && version_compare( $max_version, $introduced, '<' ) ) {
- continue;
- }
-
- $r[] = $slug;
- }
-
- return $r;
- }
-
- /**
- * Default modules loaded on activation.
- */
- public static function get_default_modules( $min_version = false, $max_version = false ) {
- $return = array();
-
- foreach ( Jetpack::get_available_modules( $min_version, $max_version ) as $module ) {
- $module_data = Jetpack::get_module( $module );
-
- switch ( strtolower( $module_data['auto_activate'] ) ) {
- case 'yes' :
- $return[] = $module;
- break;
- case 'public' :
- if ( Jetpack_Options::get_option( 'public' ) ) {
- $return[] = $module;
- }
- break;
- case 'no' :
- default :
- break;
- }
- }
- /**
- * Filters the array of default modules.
- *
- * @since 2.5.0
- *
- * @param array $return Array of default modules.
- * @param string $min_version Minimum version number required to use modules.
- * @param string $max_version Maximum version number required to use modules.
- */
- return apply_filters( 'jetpack_get_default_modules', $return, $min_version, $max_version );
- }
-
- /**
- * Checks activated modules during auto-activation to determine
- * if any of those modules are being deprecated. If so, close
- * them out, and add any replacement modules.
- *
- * Runs at priority 99 by default.
- *
- * This is run late, so that it can still activate a module if
- * the new module is a replacement for another that the user
- * currently has active, even if something at the normal priority
- * would kibosh everything.
- *
- * @since 2.6
- * @uses jetpack_get_default_modules filter
- * @param array $modules
- * @return array
- */
- function handle_deprecated_modules( $modules ) {
- $deprecated_modules = array(
- 'debug' => null, // Closed out and moved to the debugger library.
- 'wpcc' => 'sso', // Closed out in 2.6 -- SSO provides the same functionality.
- 'gplus-authorship' => null, // Closed out in 3.2 -- Google dropped support.
- );
-
- // Don't activate SSO if they never completed activating WPCC.
- if ( Jetpack::is_module_active( 'wpcc' ) ) {
- $wpcc_options = Jetpack_Options::get_option( 'wpcc_options' );
- if ( empty( $wpcc_options ) || empty( $wpcc_options['client_id'] ) || empty( $wpcc_options['client_id'] ) ) {
- $deprecated_modules['wpcc'] = null;
- }
- }
-
- foreach ( $deprecated_modules as $module => $replacement ) {
- if ( Jetpack::is_module_active( $module ) ) {
- self::deactivate_module( $module );
- if ( $replacement ) {
- $modules[] = $replacement;
- }
- }
- }
-
- return array_unique( $modules );
- }
-
- /**
- * Checks activated plugins during auto-activation to determine
- * if any of those plugins are in the list with a corresponding module
- * that is not compatible with the plugin. The module will not be allowed
- * to auto-activate.
- *
- * @since 2.6
- * @uses jetpack_get_default_modules filter
- * @param array $modules
- * @return array
- */
- function filter_default_modules( $modules ) {
-
- $active_plugins = self::get_active_plugins();
-
- if ( ! empty( $active_plugins ) ) {
-
- // For each module we'd like to auto-activate...
- foreach ( $modules as $key => $module ) {
- // If there are potential conflicts for it...
- if ( ! empty( $this->conflicting_plugins[ $module ] ) ) {
- // For each potential conflict...
- foreach ( $this->conflicting_plugins[ $module ] as $title => $plugin ) {
- // If that conflicting plugin is active...
- if ( in_array( $plugin, $active_plugins ) ) {
- // Remove that item from being auto-activated.
- unset( $modules[ $key ] );
- }
- }
- }
- }
- }
-
- return $modules;
- }
-
- /**
- * Extract a module's slug from its full path.
- */
- public static function get_module_slug( $file ) {
- return str_replace( '.php', '', basename( $file ) );
- }
-
- /**
- * Generate a module's path from its slug.
- */
- public static function get_module_path( $slug ) {
- return JETPACK__PLUGIN_DIR . "modules/$slug.php";
- }
-
- /**
- * Load module data from module file. Headers differ from WordPress
- * plugin headers to avoid them being identified as standalone
- * plugins on the WordPress plugins page.
- */
- public static function get_module( $module ) {
- $headers = array(
- 'name' => 'Module Name',
- 'description' => 'Module Description',
- 'jumpstart_desc' => 'Jumpstart Description',
- 'sort' => 'Sort Order',
- 'recommendation_order' => 'Recommendation Order',
- 'introduced' => 'First Introduced',
- 'changed' => 'Major Changes In',
- 'deactivate' => 'Deactivate',
- 'free' => 'Free',
- 'requires_connection' => 'Requires Connection',
- 'auto_activate' => 'Auto Activate',
- 'module_tags' => 'Module Tags',
- 'feature' => 'Feature',
- 'additional_search_queries' => 'Additional Search Queries',
- 'plan_classes' => 'Plans',
- );
-
- $file = Jetpack::get_module_path( Jetpack::get_module_slug( $module ) );
-
- $mod = Jetpack::get_file_data( $file, $headers );
- if ( empty( $mod['name'] ) ) {
- return false;
- }
-
- $mod['sort'] = empty( $mod['sort'] ) ? 10 : (int) $mod['sort'];
- $mod['recommendation_order'] = empty( $mod['recommendation_order'] ) ? 20 : (int) $mod['recommendation_order'];
- $mod['deactivate'] = empty( $mod['deactivate'] );
- $mod['free'] = empty( $mod['free'] );
- $mod['requires_connection'] = ( ! empty( $mod['requires_connection'] ) && 'No' == $mod['requires_connection'] ) ? false : true;
-
- if ( empty( $mod['auto_activate'] ) || ! in_array( strtolower( $mod['auto_activate'] ), array( 'yes', 'no', 'public' ) ) ) {
- $mod['auto_activate'] = 'No';
- } else {
- $mod['auto_activate'] = (string) $mod['auto_activate'];
- }
-
- if ( $mod['module_tags'] ) {
- $mod['module_tags'] = explode( ',', $mod['module_tags'] );
- $mod['module_tags'] = array_map( 'trim', $mod['module_tags'] );
- $mod['module_tags'] = array_map( array( __CLASS__, 'translate_module_tag' ), $mod['module_tags'] );
- } else {
- $mod['module_tags'] = array( self::translate_module_tag( 'Other' ) );
- }
-
- if ( $mod['plan_classes'] ) {
- $mod['plan_classes'] = explode( ',', $mod['plan_classes'] );
- $mod['plan_classes'] = array_map( 'strtolower', array_map( 'trim', $mod['plan_classes'] ) );
- } else {
- $mod['plan_classes'] = array( 'free' );
- }
-
- if ( $mod['feature'] ) {
- $mod['feature'] = explode( ',', $mod['feature'] );
- $mod['feature'] = array_map( 'trim', $mod['feature'] );
- } else {
- $mod['feature'] = array( self::translate_module_tag( 'Other' ) );
- }
-
- /**
- * Filters the feature array on a module.
- *
- * This filter allows you to control where each module is filtered: Recommended,
- * Jumpstart, and the default "Other" listing.
- *
- * @since 3.5.0
- *
- * @param array $mod['feature'] The areas to feature this module:
- * 'Jumpstart' adds to the "Jumpstart" option to activate many modules at once.
- * 'Recommended' shows on the main Jetpack admin screen.
- * 'Other' should be the default if no other value is in the array.
- * @param string $module The slug of the module, e.g. sharedaddy.
- * @param array $mod All the currently assembled module data.
- */
- $mod['feature'] = apply_filters( 'jetpack_module_feature', $mod['feature'], $module, $mod );
-
- /**
- * Filter the returned data about a module.
- *
- * This filter allows overriding any info about Jetpack modules. It is dangerous,
- * so please be careful.
- *
- * @since 3.6.0
- *
- * @param array $mod The details of the requested module.
- * @param string $module The slug of the module, e.g. sharedaddy
- * @param string $file The path to the module source file.
- */
- return apply_filters( 'jetpack_get_module', $mod, $module, $file );
- }
-
- /**
- * Like core's get_file_data implementation, but caches the result.
- */
- public static function get_file_data( $file, $headers ) {
- //Get just the filename from $file (i.e. exclude full path) so that a consistent hash is generated
- $file_name = basename( $file );
-
- $cache_key = 'jetpack_file_data_' . JETPACK__VERSION;
-
- $file_data_option = get_transient( $cache_key );
-
- if ( false === $file_data_option ) {
- $file_data_option = array();
- }
-
- $key = md5( $file_name . serialize( $headers ) );
- $refresh_cache = is_admin() && isset( $_GET['page'] ) && 'jetpack' === substr( $_GET['page'], 0, 7 );
-
- // If we don't need to refresh the cache, and already have the value, short-circuit!
- if ( ! $refresh_cache && isset( $file_data_option[ $key ] ) ) {
- return $file_data_option[ $key ];
- }
-
- $data = get_file_data( $file, $headers );
-
- $file_data_option[ $key ] = $data;
-
- set_transient( $cache_key, $file_data_option, 29 * DAY_IN_SECONDS );
-
- return $data;
- }
-
-
- /**
- * Return translated module tag.
- *
- * @param string $tag Tag as it appears in each module heading.
- *
- * @return mixed
- */
- public static function translate_module_tag( $tag ) {
- return jetpack_get_module_i18n_tag( $tag );
- }
-
- /**
- * Get i18n strings as a JSON-encoded string
- *
- * @return string The locale as JSON
- */
- public static function get_i18n_data_json() {
-
- // WordPress 5.0 uses md5 hashes of file paths to associate translation
- // JSON files with the file they should be included for. This is an md5
- // of '_inc/build/admin.js'.
- $path_md5 = '1bac79e646a8bf4081a5011ab72d5807';
-
- $i18n_json =
- JETPACK__PLUGIN_DIR
- . 'languages/json/jetpack-'
- . get_user_locale()
- . '-'
- . $path_md5
- . '.json';
-
- if ( is_file( $i18n_json ) && is_readable( $i18n_json ) ) {
- $locale_data = @file_get_contents( $i18n_json );
- if ( $locale_data ) {
- return $locale_data;
- }
- }
-
- // Return valid empty Jed locale
- return '{ "locale_data": { "messages": { "": {} } } }';
- }
-
- /**
- * Add locale data setup to wp-i18n
- *
- * Any Jetpack script that depends on wp-i18n should use this method to set up the locale.
- *
- * The locale setup depends on an adding inline script. This is error-prone and could easily
- * result in multiple additions of the same script when exactly 0 or 1 is desireable.
- *
- * This method provides a safe way to request the setup multiple times but add the script at
- * most once.
- *
- * @since 6.7.0
- *
- * @return void
- */
- public static function setup_wp_i18n_locale_data() {
- static $script_added = false;
- if ( ! $script_added ) {
- $script_added = true;
- wp_add_inline_script(
- 'wp-i18n',
- 'wp.i18n.setLocaleData( ' . Jetpack::get_i18n_data_json() . ', \'jetpack\' );'
- );
- }
- }
-
- /**
- * Return module name translation. Uses matching string created in modules/module-headings.php.
- *
- * @since 3.9.2
- *
- * @param array $modules
- *
- * @return string|void
- */
- public static function get_translated_modules( $modules ) {
- foreach ( $modules as $index => $module ) {
- $i18n_module = jetpack_get_module_i18n( $module['module'] );
- if ( isset( $module['name'] ) ) {
- $modules[ $index ]['name'] = $i18n_module['name'];
- }
- if ( isset( $module['description'] ) ) {
- $modules[ $index ]['description'] = $i18n_module['description'];
- $modules[ $index ]['short_description'] = $i18n_module['description'];
- }
- }
- return $modules;
- }
-
- /**
- * Get a list of activated modules as an array of module slugs.
- */
- public static function get_active_modules() {
- $active = Jetpack_Options::get_option( 'active_modules' );
-
- if ( ! is_array( $active ) ) {
- $active = array();
- }
-
- if ( class_exists( 'VaultPress' ) || function_exists( 'vaultpress_contact_service' ) ) {
- $active[] = 'vaultpress';
- } else {
- $active = array_diff( $active, array( 'vaultpress' ) );
- }
-
- //If protect is active on the main site of a multisite, it should be active on all sites.
- if ( ! in_array( 'protect', $active ) && is_multisite() && get_site_option( 'jetpack_protect_active' ) ) {
- $active[] = 'protect';
- }
-
- /**
- * Allow filtering of the active modules.
- *
- * Gives theme and plugin developers the power to alter the modules that
- * are activated on the fly.
- *
- * @since 5.8.0
- *
- * @param array $active Array of active module slugs.
- */
- $active = apply_filters( 'jetpack_active_modules', $active );
-
- return array_unique( $active );
- }
-
- /**
- * Check whether or not a Jetpack module is active.
- *
- * @param string $module The slug of a Jetpack module.
- * @return bool
- *
- * @static
- */
- public static function is_module_active( $module ) {
- return in_array( $module, self::get_active_modules() );
- }
-
- public static function is_module( $module ) {
- return ! empty( $module ) && ! validate_file( $module, Jetpack::get_available_modules() );
- }
-
- /**
- * Catches PHP errors. Must be used in conjunction with output buffering.
- *
- * @param bool $catch True to start catching, False to stop.
- *
- * @static
- */
- public static function catch_errors( $catch ) {
- static $display_errors, $error_reporting;
-
- if ( $catch ) {
- $display_errors = @ini_set( 'display_errors', 1 );
- $error_reporting = @error_reporting( E_ALL );
- add_action( 'shutdown', array( 'Jetpack', 'catch_errors_on_shutdown' ), 0 );
- } else {
- @ini_set( 'display_errors', $display_errors );
- @error_reporting( $error_reporting );
- remove_action( 'shutdown', array( 'Jetpack', 'catch_errors_on_shutdown' ), 0 );
- }
- }
-
- /**
- * Saves any generated PHP errors in ::state( 'php_errors', {errors} )
- */
- public static function catch_errors_on_shutdown() {
- Jetpack::state( 'php_errors', self::alias_directories( ob_get_clean() ) );
- }
-
- /**
- * Rewrite any string to make paths easier to read.
- *
- * Rewrites ABSPATH (eg `/home/jetpack/wordpress/`) to ABSPATH, and if WP_CONTENT_DIR
- * is located outside of ABSPATH, rewrites that to WP_CONTENT_DIR.
- *
- * @param $string
- * @return mixed
- */
- public static function alias_directories( $string ) {
- // ABSPATH has a trailing slash.
- $string = str_replace( ABSPATH, 'ABSPATH/', $string );
- // WP_CONTENT_DIR does not have a trailing slash.
- $string = str_replace( WP_CONTENT_DIR, 'WP_CONTENT_DIR', $string );
-
- return $string;
- }
-
- public static function activate_default_modules(
- $min_version = false,
- $max_version = false,
- $other_modules = array(),
- $redirect = true,
- $send_state_messages = true
- ) {
- $jetpack = Jetpack::init();
-
- $modules = Jetpack::get_default_modules( $min_version, $max_version );
- $modules = array_merge( $other_modules, $modules );
-
- // Look for standalone plugins and disable if active.
-
- $to_deactivate = array();
- foreach ( $modules as $module ) {
- if ( isset( $jetpack->plugins_to_deactivate[$module] ) ) {
- $to_deactivate[$module] = $jetpack->plugins_to_deactivate[$module];
- }
- }
-
- $deactivated = array();
- foreach ( $to_deactivate as $module => $deactivate_me ) {
- list( $probable_file, $probable_title ) = $deactivate_me;
- if ( Jetpack_Client_Server::deactivate_plugin( $probable_file, $probable_title ) ) {
- $deactivated[] = $module;
- }
- }
-
- if ( $deactivated && $redirect ) {
- Jetpack::state( 'deactivated_plugins', join( ',', $deactivated ) );
-
- $url = add_query_arg(
- array(
- 'action' => 'activate_default_modules',
- '_wpnonce' => wp_create_nonce( 'activate_default_modules' ),
- ),
- add_query_arg( compact( 'min_version', 'max_version', 'other_modules' ), Jetpack::admin_url( 'page=jetpack' ) )
- );
- wp_safe_redirect( $url );
- exit;
- }
-
- /**
- * Fires before default modules are activated.
- *
- * @since 1.9.0
- *
- * @param string $min_version Minimum version number required to use modules.
- * @param string $max_version Maximum version number required to use modules.
- * @param array $other_modules Array of other modules to activate alongside the default modules.
- */
- do_action( 'jetpack_before_activate_default_modules', $min_version, $max_version, $other_modules );
-
- // Check each module for fatal errors, a la wp-admin/plugins.php::activate before activating
- if ( $send_state_messages ) {
- Jetpack::restate();
- Jetpack::catch_errors( true );
- }
-
- $active = Jetpack::get_active_modules();
-
- foreach ( $modules as $module ) {
- if ( did_action( "jetpack_module_loaded_$module" ) ) {
- $active[] = $module;
- self::update_active_modules( $active );
- continue;
- }
-
- if ( $send_state_messages && in_array( $module, $active ) ) {
- $module_info = Jetpack::get_module( $module );
- if ( ! $module_info['deactivate'] ) {
- $state = in_array( $module, $other_modules ) ? 'reactivated_modules' : 'activated_modules';
- if ( $active_state = Jetpack::state( $state ) ) {
- $active_state = explode( ',', $active_state );
- } else {
- $active_state = array();
- }
- $active_state[] = $module;
- Jetpack::state( $state, implode( ',', $active_state ) );
- }
- continue;
- }
-
- $file = Jetpack::get_module_path( $module );
- if ( ! file_exists( $file ) ) {
- continue;
- }
-
- // we'll override this later if the plugin can be included without fatal error
- if ( $redirect ) {
- wp_safe_redirect( Jetpack::admin_url( 'page=jetpack' ) );
- }
-
- if ( $send_state_messages ) {
- Jetpack::state( 'error', 'module_activation_failed' );
- Jetpack::state( 'module', $module );
- }
-
- ob_start();
- require_once $file;
-
- $active[] = $module;
-
- if ( $send_state_messages ) {
-
- $state = in_array( $module, $other_modules ) ? 'reactivated_modules' : 'activated_modules';
- if ( $active_state = Jetpack::state( $state ) ) {
- $active_state = explode( ',', $active_state );
- } else {
- $active_state = array();
- }
- $active_state[] = $module;
- Jetpack::state( $state, implode( ',', $active_state ) );
- }
-
- Jetpack::update_active_modules( $active );
-
- ob_end_clean();
- }
-
- if ( $send_state_messages ) {
- Jetpack::state( 'error', false );
- Jetpack::state( 'module', false );
- }
-
- Jetpack::catch_errors( false );
- /**
- * Fires when default modules are activated.
- *
- * @since 1.9.0
- *
- * @param string $min_version Minimum version number required to use modules.
- * @param string $max_version Maximum version number required to use modules.
- * @param array $other_modules Array of other modules to activate alongside the default modules.
- */
- do_action( 'jetpack_activate_default_modules', $min_version, $max_version, $other_modules );
- }
-
- public static function activate_module( $module, $exit = true, $redirect = true ) {
- /**
- * Fires before a module is activated.
- *
- * @since 2.6.0
- *
- * @param string $module Module slug.
- * @param bool $exit Should we exit after the module has been activated. Default to true.
- * @param bool $redirect Should the user be redirected after module activation? Default to true.
- */
- do_action( 'jetpack_pre_activate_module', $module, $exit, $redirect );
-
- $jetpack = Jetpack::init();
-
- if ( ! strlen( $module ) )
- return false;
-
- if ( ! Jetpack::is_module( $module ) )
- return false;
-
- // If it's already active, then don't do it again
- $active = Jetpack::get_active_modules();
- foreach ( $active as $act ) {
- if ( $act == $module )
- return true;
- }
-
- $module_data = Jetpack::get_module( $module );
-
- if ( ! Jetpack::is_active() ) {
- if ( ! Jetpack::is_development_mode() && ! Jetpack::is_onboarding() )
- return false;
-
- // If we're not connected but in development mode, make sure the module doesn't require a connection
- if ( Jetpack::is_development_mode() && $module_data['requires_connection'] )
- return false;
- }
-
- // Check and see if the old plugin is active
- if ( isset( $jetpack->plugins_to_deactivate[ $module ] ) ) {
- // Deactivate the old plugin
- if ( Jetpack_Client_Server::deactivate_plugin( $jetpack->plugins_to_deactivate[ $module ][0], $jetpack->plugins_to_deactivate[ $module ][1] ) ) {
- // If we deactivated the old plugin, remembere that with ::state() and redirect back to this page to activate the module
- // We can't activate the module on this page load since the newly deactivated old plugin is still loaded on this page load.
- Jetpack::state( 'deactivated_plugins', $module );
- wp_safe_redirect( add_query_arg( 'jetpack_restate', 1 ) );
- exit;
- }
- }
-
- // Protect won't work with mis-configured IPs
- if ( 'protect' === $module ) {
- include_once JETPACK__PLUGIN_DIR . 'modules/protect/shared-functions.php';
- if ( ! jetpack_protect_get_ip() ) {
- Jetpack::state( 'message', 'protect_misconfigured_ip' );
- return false;
- }
- }
-
- if ( ! Jetpack_Plan::supports( $module ) ) {
- return false;
- }
-
- // Check the file for fatal errors, a la wp-admin/plugins.php::activate
- Jetpack::state( 'module', $module );
- Jetpack::state( 'error', 'module_activation_failed' ); // we'll override this later if the plugin can be included without fatal error
-
- Jetpack::catch_errors( true );
- ob_start();
- require Jetpack::get_module_path( $module );
- /** This action is documented in class.jetpack.php */
- do_action( 'jetpack_activate_module', $module );
- $active[] = $module;
- Jetpack::update_active_modules( $active );
-
- Jetpack::state( 'error', false ); // the override
- ob_end_clean();
- Jetpack::catch_errors( false );
-
- // A flag for Jump Start so it's not shown again. Only set if it hasn't been yet.
- if ( 'new_connection' === Jetpack_Options::get_option( 'jumpstart' ) ) {
- Jetpack_Options::update_option( 'jumpstart', 'jetpack_action_taken' );
-
- //Jump start is being dismissed send data to MC Stats
- $jetpack->stat( 'jumpstart', 'manual,'.$module );
-
- $jetpack->do_stats( 'server_side' );
- }
-
- if ( $redirect ) {
- wp_safe_redirect( Jetpack::admin_url( 'page=jetpack' ) );
- }
- if ( $exit ) {
- exit;
- }
- return true;
- }
-
- function activate_module_actions( $module ) {
- _deprecated_function( __METHOD__, 'jetpack-4.2' );
- }
-
- public static function deactivate_module( $module ) {
- /**
- * Fires when a module is deactivated.
- *
- * @since 1.9.0
- *
- * @param string $module Module slug.
- */
- do_action( 'jetpack_pre_deactivate_module', $module );
-
- $jetpack = Jetpack::init();
-
- $active = Jetpack::get_active_modules();
- $new = array_filter( array_diff( $active, (array) $module ) );
-
- // A flag for Jump Start so it's not shown again.
- if ( 'new_connection' === Jetpack_Options::get_option( 'jumpstart' ) ) {
- Jetpack_Options::update_option( 'jumpstart', 'jetpack_action_taken' );
-
- //Jump start is being dismissed send data to MC Stats
- $jetpack->stat( 'jumpstart', 'manual,deactivated-'.$module );
-
- $jetpack->do_stats( 'server_side' );
- }
-
- return self::update_active_modules( $new );
- }
-
- public static function enable_module_configurable( $module ) {
- $module = Jetpack::get_module_slug( $module );
- add_filter( 'jetpack_module_configurable_' . $module, '__return_true' );
- }
-
- /**
- * Composes a module configure URL. It uses Jetpack settings search as default value
- * It is possible to redefine resulting URL by using "jetpack_module_configuration_url_$module" filter
- *
- * @param string $module Module slug
- * @return string $url module configuration URL
- */
- public static function module_configuration_url( $module ) {
- $module = Jetpack::get_module_slug( $module );
- $default_url = Jetpack::admin_url() . "#/settings?term=$module";
- /**
- * Allows to modify configure_url of specific module to be able to redirect to some custom location.
- *
- * @since 6.9.0
- *
- * @param string $default_url Default url, which redirects to jetpack settings page.
- */
- $url = apply_filters( 'jetpack_module_configuration_url_' . $module, $default_url );
-
- return $url;
- }
-
- public static function module_configuration_load( $module, $method ) {
- $module = Jetpack::get_module_slug( $module );
- add_action( 'jetpack_module_configuration_load_' . $module, $method );
- }
-
- public static function module_configuration_head( $module, $method ) {
- $module = Jetpack::get_module_slug( $module );
- add_action( 'jetpack_module_configuration_head_' . $module, $method );
- }
-
- public static function module_configuration_screen( $module, $method ) {
- $module = Jetpack::get_module_slug( $module );
- add_action( 'jetpack_module_configuration_screen_' . $module, $method );
- }
-
- public static function module_configuration_activation_screen( $module, $method ) {
- $module = Jetpack::get_module_slug( $module );
- add_action( 'display_activate_module_setting_' . $module, $method );
- }
-
-/* Installation */
-
- public static function bail_on_activation( $message, $deactivate = true ) {
-?>
-<!doctype html>
-<html>
-<head>
-<meta charset="<?php bloginfo( 'charset' ); ?>">
-<style>
-* {
- text-align: center;
- margin: 0;
- padding: 0;
- font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;
-}
-p {
- margin-top: 1em;
- font-size: 18px;
-}
-</style>
-<body>
-<p><?php echo esc_html( $message ); ?></p>
-</body>
-</html>
-<?php
- if ( $deactivate ) {
- $plugins = get_option( 'active_plugins' );
- $jetpack = plugin_basename( JETPACK__PLUGIN_DIR . 'jetpack.php' );
- $update = false;
- foreach ( $plugins as $i => $plugin ) {
- if ( $plugin === $jetpack ) {
- $plugins[$i] = false;
- $update = true;
- }
- }
-
- if ( $update ) {
- update_option( 'active_plugins', array_filter( $plugins ) );
- }
- }
- exit;
- }
-
- /**
- * Attached to activate_{ plugin_basename( __FILES__ ) } by register_activation_hook()
- * @static
- */
- public static function plugin_activation( $network_wide ) {
- Jetpack_Options::update_option( 'activated', 1 );
-
- if ( version_compare( $GLOBALS['wp_version'], JETPACK__MINIMUM_WP_VERSION, '<' ) ) {
- Jetpack::bail_on_activation( sprintf( __( 'Jetpack requires WordPress version %s or later.', 'jetpack' ), JETPACK__MINIMUM_WP_VERSION ) );
- }
-
- if ( $network_wide )
- Jetpack::state( 'network_nag', true );
-
- // For firing one-off events (notices) immediately after activation
- set_transient( 'activated_jetpack', true, .1 * MINUTE_IN_SECONDS );
-
- update_option( 'jetpack_activation_source', self::get_activation_source( wp_get_referer() ) );
-
- Jetpack::plugin_initialize();
- }
-
- public static function get_activation_source( $referer_url ) {
-
- if ( defined( 'WP_CLI' ) && WP_CLI ) {
- return array( 'wp-cli', null );
- }
-
- $referer = parse_url( $referer_url );
-
- $source_type = 'unknown';
- $source_query = null;
-
- if ( ! is_array( $referer ) ) {
- return array( $source_type, $source_query );
- }
-
- $plugins_path = parse_url( admin_url( 'plugins.php' ), PHP_URL_PATH );
- $plugins_install_path = parse_url( admin_url( 'plugin-install.php' ), PHP_URL_PATH );// /wp-admin/plugin-install.php
-
- if ( isset( $referer['query'] ) ) {
- parse_str( $referer['query'], $query_parts );
- } else {
- $query_parts = array();
- }
-
- if ( $plugins_path === $referer['path'] ) {
- $source_type = 'list';
- } elseif ( $plugins_install_path === $referer['path'] ) {
- $tab = isset( $query_parts['tab'] ) ? $query_parts['tab'] : 'featured';
- switch( $tab ) {
- case 'popular':
- $source_type = 'popular';
- break;
- case 'recommended':
- $source_type = 'recommended';
- break;
- case 'favorites':
- $source_type = 'favorites';
- break;
- case 'search':
- $source_type = 'search-' . ( isset( $query_parts['type'] ) ? $query_parts['type'] : 'term' );
- $source_query = isset( $query_parts['s'] ) ? $query_parts['s'] : null;
- break;
- default:
- $source_type = 'featured';
- }
- }
-
- return array( $source_type, $source_query );
- }
-
- /**
- * Runs before bumping version numbers up to a new version
- * @param string $version Version:timestamp
- * @param string $old_version Old Version:timestamp or false if not set yet.
- * @return null [description]
- */
- public static function do_version_bump( $version, $old_version ) {
- if ( ! $old_version ) { // For new sites
- // Setting up jetpack manage
- Jetpack::activate_manage();
- } else {
- // If a Jetpack is still active but not connected when updating verion, remind them to connect with the banner.
- if ( ! Jetpack::is_active() ) {
- Jetpack_Options::delete_option( 'dismissed_connection_banner' );
- }
- }
- }
-
- /**
- * Sets the internal version number and activation state.
- * @static
- */
- public static function plugin_initialize() {
- if ( ! Jetpack_Options::get_option( 'activated' ) ) {
- Jetpack_Options::update_option( 'activated', 2 );
- }
-
- if ( ! Jetpack_Options::get_option( 'version' ) ) {
- $version = $old_version = JETPACK__VERSION . ':' . time();
- /** This action is documented in class.jetpack.php */
- do_action( 'updating_jetpack_version', $version, false );
- Jetpack_Options::update_options( compact( 'version', 'old_version' ) );
- }
-
- Jetpack::load_modules();
-
- Jetpack_Options::delete_option( 'do_activate' );
- Jetpack_Options::delete_option( 'dismissed_connection_banner' );
- }
-
- /**
- * Removes all connection options
- * @static
- */
- public static function plugin_deactivation( ) {
- require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
- if( is_plugin_active_for_network( 'jetpack/jetpack.php' ) ) {
- Jetpack_Network::init()->deactivate();
- } else {
- Jetpack::disconnect( false );
- //Jetpack_Heartbeat::init()->deactivate();
- }
- }
-
- /**
- * Disconnects from the Jetpack servers.
- * Forgets all connection details and tells the Jetpack servers to do the same.
- * @static
- */
- public static function disconnect( $update_activated_state = true ) {
- wp_clear_scheduled_hook( 'jetpack_clean_nonces' );
- Jetpack::clean_nonces( true );
-
- // If the site is in an IDC because sync is not allowed,
- // let's make sure to not disconnect the production site.
- if ( ! self::validate_sync_error_idc_option() ) {
- JetpackTracking::record_user_event( 'disconnect_site', array() );
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client();
- $xml->query( 'jetpack.deregister' );
- }
-
- Jetpack_Options::delete_option(
- array(
- 'blog_token',
- 'user_token',
- 'user_tokens',
- 'master_user',
- 'time_diff',
- 'fallback_no_verify_ssl_certs',
- )
- );
-
- Jetpack_IDC::clear_all_idc_options();
- Jetpack_Options::delete_raw_option( 'jetpack_secrets' );
-
- if ( $update_activated_state ) {
- Jetpack_Options::update_option( 'activated', 4 );
- }
-
- if ( $jetpack_unique_connection = Jetpack_Options::get_option( 'unique_connection' ) ) {
- // Check then record unique disconnection if site has never been disconnected previously
- if ( - 1 == $jetpack_unique_connection['disconnected'] ) {
- $jetpack_unique_connection['disconnected'] = 1;
- } else {
- if ( 0 == $jetpack_unique_connection['disconnected'] ) {
- //track unique disconnect
- $jetpack = Jetpack::init();
-
- $jetpack->stat( 'connections', 'unique-disconnect' );
- $jetpack->do_stats( 'server_side' );
- }
- // increment number of times disconnected
- $jetpack_unique_connection['disconnected'] += 1;
- }
-
- Jetpack_Options::update_option( 'unique_connection', $jetpack_unique_connection );
- }
-
- // Delete cached connected user data
- $transient_key = "jetpack_connected_user_data_" . get_current_user_id();
- delete_transient( $transient_key );
-
- // Delete all the sync related data. Since it could be taking up space.
- require_once JETPACK__PLUGIN_DIR . 'sync/class.jetpack-sync-sender.php';
- Jetpack_Sync_Sender::get_instance()->uninstall();
-
- // Disable the Heartbeat cron
- Jetpack_Heartbeat::init()->deactivate();
- }
-
- /**
- * Unlinks the current user from the linked WordPress.com user
- */
- public static function unlink_user( $user_id = null ) {
- if ( ! $tokens = Jetpack_Options::get_option( 'user_tokens' ) )
- return false;
-
- $user_id = empty( $user_id ) ? get_current_user_id() : intval( $user_id );
-
- if ( Jetpack_Options::get_option( 'master_user' ) == $user_id )
- return false;
-
- if ( ! isset( $tokens[ $user_id ] ) )
- return false;
-
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client( compact( 'user_id' ) );
- $xml->query( 'jetpack.unlink_user', $user_id );
-
- unset( $tokens[ $user_id ] );
-
- Jetpack_Options::update_option( 'user_tokens', $tokens );
-
- /**
- * Fires after the current user has been unlinked from WordPress.com.
- *
- * @since 4.1.0
- *
- * @param int $user_id The current user's ID.
- */
- do_action( 'jetpack_unlinked_user', $user_id );
-
- return true;
- }
-
- /**
- * Attempts Jetpack registration. If it fail, a state flag is set: @see ::admin_page_load()
- */
- public static function try_registration() {
- // The user has agreed to the TOS at some point by now.
- Jetpack_Options::update_option( 'tos_agreed', true );
-
- // Let's get some testing in beta versions and such.
- if ( self::is_development_version() && defined( 'PHP_URL_HOST' ) ) {
- // Before attempting to connect, let's make sure that the domains are viable.
- $domains_to_check = array_unique( array(
- 'siteurl' => parse_url( get_site_url(), PHP_URL_HOST ),
- 'homeurl' => parse_url( get_home_url(), PHP_URL_HOST ),
- ) );
- foreach ( $domains_to_check as $domain ) {
- $result = Jetpack_Data::is_usable_domain( $domain );
- if ( is_wp_error( $result ) ) {
- return $result;
- }
- }
- }
-
- $result = Jetpack::register();
-
- // If there was an error with registration and the site was not registered, record this so we can show a message.
- if ( ! $result || is_wp_error( $result ) ) {
- return $result;
- } else {
- return true;
- }
- }
-
- /**
- * Tracking an internal event log. Try not to put too much chaff in here.
- *
- * [Everyone Loves a Log!](https://www.youtube.com/watch?v=2C7mNr5WMjA)
- */
- public static function log( $code, $data = null ) {
- // only grab the latest 200 entries
- $log = array_slice( Jetpack_Options::get_option( 'log', array() ), -199, 199 );
-
- // Append our event to the log
- $log_entry = array(
- 'time' => time(),
- 'user_id' => get_current_user_id(),
- 'blog_id' => Jetpack_Options::get_option( 'id' ),
- 'code' => $code,
- );
- // Don't bother storing it unless we've got some.
- if ( ! is_null( $data ) ) {
- $log_entry['data'] = $data;
- }
- $log[] = $log_entry;
-
- // Try add_option first, to make sure it's not autoloaded.
- // @todo: Add an add_option method to Jetpack_Options
- if ( ! add_option( 'jetpack_log', $log, null, 'no' ) ) {
- Jetpack_Options::update_option( 'log', $log );
- }
-
- /**
- * Fires when Jetpack logs an internal event.
- *
- * @since 3.0.0
- *
- * @param array $log_entry {
- * Array of details about the log entry.
- *
- * @param string time Time of the event.
- * @param int user_id ID of the user who trigerred the event.
- * @param int blog_id Jetpack Blog ID.
- * @param string code Unique name for the event.
- * @param string data Data about the event.
- * }
- */
- do_action( 'jetpack_log_entry', $log_entry );
- }
-
- /**
- * Get the internal event log.
- *
- * @param $event (string) - only return the specific log events
- * @param $num (int) - get specific number of latest results, limited to 200
- *
- * @return array of log events || WP_Error for invalid params
- */
- public static function get_log( $event = false, $num = false ) {
- if ( $event && ! is_string( $event ) ) {
- return new WP_Error( __( 'First param must be string or empty', 'jetpack' ) );
- }
-
- if ( $num && ! is_numeric( $num ) ) {
- return new WP_Error( __( 'Second param must be numeric or empty', 'jetpack' ) );
- }
-
- $entire_log = Jetpack_Options::get_option( 'log', array() );
-
- // If nothing set - act as it did before, otherwise let's start customizing the output
- if ( ! $num && ! $event ) {
- return $entire_log;
- } else {
- $entire_log = array_reverse( $entire_log );
- }
-
- $custom_log_output = array();
-
- if ( $event ) {
- foreach ( $entire_log as $log_event ) {
- if ( $event == $log_event[ 'code' ] ) {
- $custom_log_output[] = $log_event;
- }
- }
- } else {
- $custom_log_output = $entire_log;
- }
-
- if ( $num ) {
- $custom_log_output = array_slice( $custom_log_output, 0, $num );
- }
-
- return $custom_log_output;
- }
-
- /**
- * Log modification of important settings.
- */
- public static function log_settings_change( $option, $old_value, $value ) {
- switch( $option ) {
- case 'jetpack_sync_non_public_post_stati':
- self::log( $option, $value );
- break;
- }
- }
-
- /**
- * Return stat data for WPCOM sync
- */
- public static function get_stat_data( $encode = true, $extended = true ) {
- $data = Jetpack_Heartbeat::generate_stats_array();
-
- if ( $extended ) {
- $additional_data = self::get_additional_stat_data();
- $data = array_merge( $data, $additional_data );
- }
-
- if ( $encode ) {
- return json_encode( $data );
- }
-
- return $data;
- }
-
- /**
- * Get additional stat data to sync to WPCOM
- */
- public static function get_additional_stat_data( $prefix = '' ) {
- $return["{$prefix}themes"] = Jetpack::get_parsed_theme_data();
- $return["{$prefix}plugins-extra"] = Jetpack::get_parsed_plugin_data();
- $return["{$prefix}users"] = (int) Jetpack::get_site_user_count();
- $return["{$prefix}site-count"] = 0;
-
- if ( function_exists( 'get_blog_count' ) ) {
- $return["{$prefix}site-count"] = get_blog_count();
- }
- return $return;
- }
-
- private static function get_site_user_count() {
- global $wpdb;
-
- if ( function_exists( 'wp_is_large_network' ) ) {
- if ( wp_is_large_network( 'users' ) ) {
- return -1; // Not a real value but should tell us that we are dealing with a large network.
- }
- }
- if ( false === ( $user_count = get_transient( 'jetpack_site_user_count' ) ) ) {
- // It wasn't there, so regenerate the data and save the transient
- $user_count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->usermeta WHERE meta_key = '{$wpdb->prefix}capabilities'" );
- set_transient( 'jetpack_site_user_count', $user_count, DAY_IN_SECONDS );
- }
- return $user_count;
- }
-
- /* Admin Pages */
-
- function admin_init() {
- // If the plugin is not connected, display a connect message.
- if (
- // the plugin was auto-activated and needs its candy
- Jetpack_Options::get_option_and_ensure_autoload( 'do_activate', '0' )
- ||
- // the plugin is active, but was never activated. Probably came from a site-wide network activation
- ! Jetpack_Options::get_option( 'activated' )
- ) {
- Jetpack::plugin_initialize();
- }
-
- if ( ! Jetpack::is_active() && ! Jetpack::is_development_mode() ) {
- Jetpack_Connection_Banner::init();
- } elseif ( false === Jetpack_Options::get_option( 'fallback_no_verify_ssl_certs' ) ) {
- // Upgrade: 1.1 -> 1.1.1
- // Check and see if host can verify the Jetpack servers' SSL certificate
- $args = array();
- Jetpack_Client::_wp_remote_request(
- Jetpack::fix_url_for_bad_hosts( Jetpack::api_url( 'test' ) ),
- $args,
- true
- );
- } else if ( $this->can_display_jetpack_manage_notice() && ! Jetpack_Options::get_option( 'dismissed_manage_banner' ) ) {
- // Show the notice on the Dashboard only for now
- add_action( 'load-index.php', array( $this, 'prepare_manage_jetpack_notice' ) );
- }
-
- if ( current_user_can( 'manage_options' ) && 'AUTO' == JETPACK_CLIENT__HTTPS && ! self::permit_ssl() ) {
- add_action( 'jetpack_notices', array( $this, 'alert_auto_ssl_fail' ) );
- }
-
- add_action( 'load-plugins.php', array( $this, 'intercept_plugin_error_scrape_init' ) );
- add_action( 'admin_enqueue_scripts', array( $this, 'admin_menu_css' ) );
- add_filter( 'plugin_action_links_' . plugin_basename( JETPACK__PLUGIN_DIR . 'jetpack.php' ), array( $this, 'plugin_action_links' ) );
-
- if ( Jetpack::is_active() || Jetpack::is_development_mode() ) {
- // Artificially throw errors in certain whitelisted cases during plugin activation
- add_action( 'activate_plugin', array( $this, 'throw_error_on_activate_plugin' ) );
- }
-
- // Jetpack Manage Activation Screen from .com
- Jetpack::module_configuration_activation_screen( 'manage', array( $this, 'manage_activate_screen' ) );
-
- // Add custom column in wp-admin/users.php to show whether user is linked.
- add_filter( 'manage_users_columns', array( $this, 'jetpack_icon_user_connected' ) );
- add_action( 'manage_users_custom_column', array( $this, 'jetpack_show_user_connected_icon' ), 10, 3 );
- add_action( 'admin_print_styles', array( $this, 'jetpack_user_col_style' ) );
- }
-
- function admin_body_class( $admin_body_class = '' ) {
- $classes = explode( ' ', trim( $admin_body_class ) );
-
- $classes[] = self::is_active() ? 'jetpack-connected' : 'jetpack-disconnected';
-
- $admin_body_class = implode( ' ', array_unique( $classes ) );
- return " $admin_body_class ";
- }
-
- static function add_jetpack_pagestyles( $admin_body_class = '' ) {
- return $admin_body_class . ' jetpack-pagestyles ';
- }
-
- /**
- * Call this function if you want the Big Jetpack Manage Notice to show up.
- *
- * @return null
- */
- function prepare_manage_jetpack_notice() {
-
- add_action( 'admin_print_styles', array( $this, 'admin_banner_styles' ) );
- add_action( 'admin_notices', array( $this, 'admin_jetpack_manage_notice' ) );
- }
-
- function manage_activate_screen() {
- include ( JETPACK__PLUGIN_DIR . 'modules/manage/activate-admin.php' );
- }
- /**
- * Sometimes a plugin can activate without causing errors, but it will cause errors on the next page load.
- * This function artificially throws errors for such cases (whitelisted).
- *
- * @param string $plugin The activated plugin.
- */
- function throw_error_on_activate_plugin( $plugin ) {
- $active_modules = Jetpack::get_active_modules();
-
- // The Shortlinks module and the Stats plugin conflict, but won't cause errors on activation because of some function_exists() checks.
- if ( function_exists( 'stats_get_api_key' ) && in_array( 'shortlinks', $active_modules ) ) {
- $throw = false;
-
- // Try and make sure it really was the stats plugin
- if ( ! class_exists( 'ReflectionFunction' ) ) {
- if ( 'stats.php' == basename( $plugin ) ) {
- $throw = true;
- }
- } else {
- $reflection = new ReflectionFunction( 'stats_get_api_key' );
- if ( basename( $plugin ) == basename( $reflection->getFileName() ) ) {
- $throw = true;
- }
- }
-
- if ( $throw ) {
- trigger_error( sprintf( __( 'Jetpack contains the most recent version of the old &#8220;%1$s&#8221; plugin.', 'jetpack' ), 'WordPress.com Stats' ), E_USER_ERROR );
- }
- }
- }
-
- function intercept_plugin_error_scrape_init() {
- add_action( 'check_admin_referer', array( $this, 'intercept_plugin_error_scrape' ), 10, 2 );
- }
-
- function intercept_plugin_error_scrape( $action, $result ) {
- if ( ! $result ) {
- return;
- }
-
- foreach ( $this->plugins_to_deactivate as $deactivate_me ) {
- if ( "plugin-activation-error_{$deactivate_me[0]}" == $action ) {
- Jetpack::bail_on_activation( sprintf( __( 'Jetpack contains the most recent version of the old &#8220;%1$s&#8221; plugin.', 'jetpack' ), $deactivate_me[1] ), false );
- }
- }
- }
-
- function add_remote_request_handlers() {
- add_action( 'wp_ajax_nopriv_jetpack_upload_file', array( $this, 'remote_request_handlers' ) );
- add_action( 'wp_ajax_nopriv_jetpack_update_file', array( $this, 'remote_request_handlers' ) );
- }
-
- function remote_request_handlers() {
- $action = current_filter();
-
- switch ( current_filter() ) {
- case 'wp_ajax_nopriv_jetpack_upload_file' :
- $response = $this->upload_handler();
- break;
-
- case 'wp_ajax_nopriv_jetpack_update_file' :
- $response = $this->upload_handler( true );
- break;
- default :
- $response = new Jetpack_Error( 'unknown_handler', 'Unknown Handler', 400 );
- break;
- }
-
- if ( ! $response ) {
- $response = new Jetpack_Error( 'unknown_error', 'Unknown Error', 400 );
- }
-
- if ( is_wp_error( $response ) ) {
- $status_code = $response->get_error_data();
- $error = $response->get_error_code();
- $error_description = $response->get_error_message();
-
- if ( ! is_int( $status_code ) ) {
- $status_code = 400;
- }
-
- status_header( $status_code );
- die( json_encode( (object) compact( 'error', 'error_description' ) ) );
- }
-
- status_header( 200 );
- if ( true === $response ) {
- exit;
- }
-
- die( json_encode( (object) $response ) );
- }
-
- /**
- * Uploads a file gotten from the global $_FILES.
- * If `$update_media_item` is true and `post_id` is defined
- * the attachment file of the media item (gotten through of the post_id)
- * will be updated instead of add a new one.
- *
- * @param boolean $update_media_item - update media attachment
- * @return array - An array describing the uploadind files process
- */
- function upload_handler( $update_media_item = false ) {
- if ( 'POST' !== strtoupper( $_SERVER['REQUEST_METHOD'] ) ) {
- return new Jetpack_Error( 405, get_status_header_desc( 405 ), 405 );
- }
-
- $user = wp_authenticate( '', '' );
- if ( ! $user || is_wp_error( $user ) ) {
- return new Jetpack_Error( 403, get_status_header_desc( 403 ), 403 );
- }
-
- wp_set_current_user( $user->ID );
-
- if ( ! current_user_can( 'upload_files' ) ) {
- return new Jetpack_Error( 'cannot_upload_files', 'User does not have permission to upload files', 403 );
- }
-
- if ( empty( $_FILES ) ) {
- return new Jetpack_Error( 'no_files_uploaded', 'No files were uploaded: nothing to process', 400 );
- }
-
- foreach ( array_keys( $_FILES ) as $files_key ) {
- if ( ! isset( $_POST["_jetpack_file_hmac_{$files_key}"] ) ) {
- return new Jetpack_Error( 'missing_hmac', 'An HMAC for one or more files is missing', 400 );
- }
- }
-
- $media_keys = array_keys( $_FILES['media'] );
-
- $token = Jetpack_Data::get_access_token( get_current_user_id() );
- if ( ! $token || is_wp_error( $token ) ) {
- return new Jetpack_Error( 'unknown_token', 'Unknown Jetpack token', 403 );
- }
-
- $uploaded_files = array();
- $global_post = isset( $GLOBALS['post'] ) ? $GLOBALS['post'] : null;
- unset( $GLOBALS['post'] );
- foreach ( $_FILES['media']['name'] as $index => $name ) {
- $file = array();
- foreach ( $media_keys as $media_key ) {
- $file[$media_key] = $_FILES['media'][$media_key][$index];
- }
-
- list( $hmac_provided, $salt ) = explode( ':', $_POST['_jetpack_file_hmac_media'][$index] );
-
- $hmac_file = hash_hmac_file( 'sha1', $file['tmp_name'], $salt . $token->secret );
- if ( $hmac_provided !== $hmac_file ) {
- $uploaded_files[$index] = (object) array( 'error' => 'invalid_hmac', 'error_description' => 'The corresponding HMAC for this file does not match' );
- continue;
- }
-
- $_FILES['.jetpack.upload.'] = $file;
- $post_id = isset( $_POST['post_id'][$index] ) ? absint( $_POST['post_id'][$index] ) : 0;
- if ( ! current_user_can( 'edit_post', $post_id ) ) {
- $post_id = 0;
- }
-
- if ( $update_media_item ) {
- if ( ! isset( $post_id ) || $post_id === 0 ) {
- return new Jetpack_Error( 'invalid_input', 'Media ID must be defined.', 400 );
- }
-
- $media_array = $_FILES['media'];
-
- $file_array['name'] = $media_array['name'][0];
- $file_array['type'] = $media_array['type'][0];
- $file_array['tmp_name'] = $media_array['tmp_name'][0];
- $file_array['error'] = $media_array['error'][0];
- $file_array['size'] = $media_array['size'][0];
-
- $edited_media_item = Jetpack_Media::edit_media_file( $post_id, $file_array );
-
- if ( is_wp_error( $edited_media_item ) ) {
- return $edited_media_item;
- }
-
- $response = (object) array(
- 'id' => (string) $post_id,
- 'file' => (string) $edited_media_item->post_title,
- 'url' => (string) wp_get_attachment_url( $post_id ),
- 'type' => (string) $edited_media_item->post_mime_type,
- 'meta' => (array) wp_get_attachment_metadata( $post_id ),
- );
-
- return (array) array( $response );
- }
-
- $attachment_id = media_handle_upload(
- '.jetpack.upload.',
- $post_id,
- array(),
- array(
- 'action' => 'jetpack_upload_file',
- )
- );
-
- if ( ! $attachment_id ) {
- $uploaded_files[$index] = (object) array( 'error' => 'unknown', 'error_description' => 'An unknown problem occurred processing the upload on the Jetpack site' );
- } elseif ( is_wp_error( $attachment_id ) ) {
- $uploaded_files[$index] = (object) array( 'error' => 'attachment_' . $attachment_id->get_error_code(), 'error_description' => $attachment_id->get_error_message() );
- } else {
- $attachment = get_post( $attachment_id );
- $uploaded_files[$index] = (object) array(
- 'id' => (string) $attachment_id,
- 'file' => $attachment->post_title,
- 'url' => wp_get_attachment_url( $attachment_id ),
- 'type' => $attachment->post_mime_type,
- 'meta' => wp_get_attachment_metadata( $attachment_id ),
- );
- // Zip files uploads are not supported unless they are done for installation purposed
- // lets delete them in case something goes wrong in this whole process
- if ( 'application/zip' === $attachment->post_mime_type ) {
- // Schedule a cleanup for 2 hours from now in case of failed install.
- wp_schedule_single_event( time() + 2 * HOUR_IN_SECONDS, 'upgrader_scheduled_cleanup', array( $attachment_id ) );
- }
- }
- }
- if ( ! is_null( $global_post ) ) {
- $GLOBALS['post'] = $global_post;
- }
-
- return $uploaded_files;
- }
-
- /**
- * Add help to the Jetpack page
- *
- * @since Jetpack (1.2.3)
- * @return false if not the Jetpack page
- */
- function admin_help() {
- $current_screen = get_current_screen();
-
- // Overview
- $current_screen->add_help_tab(
- array(
- 'id' => 'home',
- 'title' => __( 'Home', 'jetpack' ),
- 'content' =>
- '<p><strong>' . __( 'Jetpack by WordPress.com', 'jetpack' ) . '</strong></p>' .
- '<p>' . __( 'Jetpack supercharges your self-hosted WordPress site with the awesome cloud power of WordPress.com.', 'jetpack' ) . '</p>' .
- '<p>' . __( 'On this page, you are able to view the modules available within Jetpack, learn more about them, and activate or deactivate them as needed.', 'jetpack' ) . '</p>',
- )
- );
-
- // Screen Content
- if ( current_user_can( 'manage_options' ) ) {
- $current_screen->add_help_tab(
- array(
- 'id' => 'settings',
- 'title' => __( 'Settings', 'jetpack' ),
- 'content' =>
- '<p><strong>' . __( 'Jetpack by WordPress.com', 'jetpack' ) . '</strong></p>' .
- '<p>' . __( 'You can activate or deactivate individual Jetpack modules to suit your needs.', 'jetpack' ) . '</p>' .
- '<ol>' .
- '<li>' . __( 'Each module has an Activate or Deactivate link so you can toggle one individually.', 'jetpack' ) . '</li>' .
- '<li>' . __( 'Using the checkboxes next to each module, you can select multiple modules to toggle via the Bulk Actions menu at the top of the list.', 'jetpack' ) . '</li>' .
- '</ol>' .
- '<p>' . __( 'Using the tools on the right, you can search for specific modules, filter by module categories or which are active, or change the sorting order.', 'jetpack' ) . '</p>'
- )
- );
- }
-
- // Help Sidebar
- $current_screen->set_help_sidebar(
- '<p><strong>' . __( 'For more information:', 'jetpack' ) . '</strong></p>' .
- '<p><a href="https://jetpack.com/faq/" target="_blank">' . __( 'Jetpack FAQ', 'jetpack' ) . '</a></p>' .
- '<p><a href="https://jetpack.com/support/" target="_blank">' . __( 'Jetpack Support', 'jetpack' ) . '</a></p>' .
- '<p><a href="' . Jetpack::admin_url( array( 'page' => 'jetpack-debugger' ) ) .'">' . __( 'Jetpack Debugging Center', 'jetpack' ) . '</a></p>'
- );
- }
-
- function admin_menu_css() {
- wp_enqueue_style( 'jetpack-icons' );
- }
-
- function admin_menu_order() {
- return true;
- }
-
- function jetpack_menu_order( $menu_order ) {
- $jp_menu_order = array();
-
- foreach ( $menu_order as $index => $item ) {
- if ( $item != 'jetpack' ) {
- $jp_menu_order[] = $item;
- }
-
- if ( $index == 0 ) {
- $jp_menu_order[] = 'jetpack';
- }
- }
-
- return $jp_menu_order;
- }
-
- function admin_head() {
- if ( isset( $_GET['configure'] ) && Jetpack::is_module( $_GET['configure'] ) && current_user_can( 'manage_options' ) )
- /** This action is documented in class.jetpack-admin-page.php */
- do_action( 'jetpack_module_configuration_head_' . $_GET['configure'] );
- }
-
- function admin_banner_styles() {
- $min = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
-
- if ( ! wp_style_is( 'jetpack-dops-style' ) ) {
- wp_register_style(
- 'jetpack-dops-style',
- plugins_url( '_inc/build/admin.dops-style.css', JETPACK__PLUGIN_FILE ),
- array(),
- JETPACK__VERSION
- );
- }
-
- wp_enqueue_style(
- 'jetpack',
- plugins_url( "css/jetpack-banners{$min}.css", JETPACK__PLUGIN_FILE ),
- array( 'jetpack-dops-style' ),
- JETPACK__VERSION . '-20121016'
- );
- wp_style_add_data( 'jetpack', 'rtl', 'replace' );
- wp_style_add_data( 'jetpack', 'suffix', $min );
- }
-
- function plugin_action_links( $actions ) {
-
- $jetpack_home = array( 'jetpack-home' => sprintf( '<a href="%s">%s</a>', Jetpack::admin_url( 'page=jetpack' ), 'Jetpack' ) );
-
- if( current_user_can( 'jetpack_manage_modules' ) && ( Jetpack::is_active() || Jetpack::is_development_mode() ) ) {
- return array_merge(
- $jetpack_home,
- array( 'settings' => sprintf( '<a href="%s">%s</a>', Jetpack::admin_url( 'page=jetpack#/settings' ), __( 'Settings', 'jetpack' ) ) ),
- array( 'support' => sprintf( '<a href="%s">%s</a>', Jetpack::admin_url( 'page=jetpack-debugger '), __( 'Support', 'jetpack' ) ) ),
- $actions
- );
- }
-
- return array_merge( $jetpack_home, $actions );
- }
-
- /**
- * This is the first banner
- * It should be visible only to user that can update the option
- * Are not connected
- *
- * @return null
- */
- function admin_jetpack_manage_notice() {
- $screen = get_current_screen();
-
- // Don't show the connect notice on the jetpack settings page.
- if ( ! in_array( $screen->base, array( 'dashboard' ) ) || $screen->is_network || $screen->action ) {
- return;
- }
-
- $opt_out_url = $this->opt_out_jetpack_manage_url();
- $opt_in_url = $this->opt_in_jetpack_manage_url();
- /**
- * I think it would be great to have different wordsing depending on where you are
- * for example if we show the notice on dashboard and a different one if we show it on Plugins screen
- * etc..
- */
-
- ?>
- <div id="message" class="updated jp-banner">
- <a href="<?php echo esc_url( $opt_out_url ); ?>" class="notice-dismiss" title="<?php esc_attr_e( 'Dismiss this notice', 'jetpack' ); ?>"></a>
- <div class="jp-banner__description-container">
- <h2 class="jp-banner__header"><?php esc_html_e( 'Jetpack Centralized Site Management', 'jetpack' ); ?></h2>
- <p class="jp-banner__description"><?php printf( __( 'Manage multiple Jetpack enabled sites from one single dashboard at wordpress.com. Allows all existing, connected Administrators to modify your site.', 'jetpack' ), 'https://jetpack.com/support/site-management' ); ?></p>
- <p class="jp-banner__button-container">
- <a href="<?php echo esc_url( $opt_in_url ); ?>" class="button button-primary" id="wpcom-connect"><?php _e( 'Activate Jetpack Manage', 'jetpack' ); ?></a>
- <a href="https://jetpack.com/support/site-management" class="button" target="_blank" title="<?php esc_attr_e( 'Learn more about Jetpack Manage on Jetpack.com', 'jetpack' ); ?>"><?php _e( 'Learn more', 'jetpack' ); ?></a>
- </p>
- </div>
- </div>
- <?php
- }
-
- /**
- * Returns the url that the user clicks to remove the notice for the big banner
- * @return string
- */
- function opt_out_jetpack_manage_url() {
- $referer = '&_wp_http_referer=' . add_query_arg( '_wp_http_referer', null );
- return wp_nonce_url( Jetpack::admin_url( 'jetpack-notice=jetpack-manage-opt-out' . $referer ), 'jetpack_manage_banner_opt_out' );
- }
- /**
- * Returns the url that the user clicks to opt in to Jetpack Manage
- * @return string
- */
- function opt_in_jetpack_manage_url() {
- return wp_nonce_url( Jetpack::admin_url( 'jetpack-notice=jetpack-manage-opt-in' ), 'jetpack_manage_banner_opt_in' );
- }
-
- function opt_in_jetpack_manage_notice() {
- ?>
- <div class="wrap">
- <div id="message" class="jetpack-message is-opt-in">
- <?php echo sprintf( __( '<p><a href="%1$s" title="Opt in to WordPress.com Site Management" >Activate Site Management</a> to manage multiple sites from our centralized dashboard at wordpress.com/sites. <a href="%2$s" target="_blank">Learn more</a>.</p><a href="%1$s" class="jp-button">Activate Now</a>', 'jetpack' ), $this->opt_in_jetpack_manage_url(), 'https://jetpack.com/support/site-management' ); ?>
- </div>
- </div>
- <?php
-
- }
- /**
- * Determines whether to show the notice of not true = display notice
- * @return bool
- */
- function can_display_jetpack_manage_notice() {
- // never display the notice to users that can't do anything about it anyways
- if( ! current_user_can( 'jetpack_manage_modules' ) )
- return false;
-
- // don't display if we are in development more
- if( Jetpack::is_development_mode() ) {
- return false;
- }
- // don't display if the site is private
- if( ! Jetpack_Options::get_option( 'public' ) )
- return false;
-
- /**
- * Should the Jetpack Remote Site Management notice be displayed.
- *
- * @since 3.3.0
- *
- * @param bool ! self::is_module_active( 'manage' ) Is the Manage module inactive.
- */
- return apply_filters( 'can_display_jetpack_manage_notice', ! self::is_module_active( 'manage' ) );
- }
-
- /*
- * Registration flow:
- * 1 - ::admin_page_load() action=register
- * 2 - ::try_registration()
- * 3 - ::register()
- * - Creates jetpack_register option containing two secrets and a timestamp
- * - Calls https://jetpack.wordpress.com/jetpack.register/1/ with
- * siteurl, home, gmt_offset, timezone_string, site_name, secret_1, secret_2, site_lang, timeout, stats_id
- * - That request to jetpack.wordpress.com does not immediately respond. It first makes a request BACK to this site's
- * xmlrpc.php?for=jetpack: RPC method: jetpack.verifyRegistration, Parameters: secret_1
- * - The XML-RPC request verifies secret_1, deletes both secrets and responds with: secret_2
- * - https://jetpack.wordpress.com/jetpack.register/1/ verifies that XML-RPC response (secret_2) then finally responds itself with
- * jetpack_id, jetpack_secret, jetpack_public
- * - ::register() then stores jetpack_options: id => jetpack_id, blog_token => jetpack_secret
- * 4 - redirect to https://wordpress.com/start/jetpack-connect
- * 5 - user logs in with WP.com account
- * 6 - remote request to this site's xmlrpc.php with action remoteAuthorize, Jetpack_XMLRPC_Server->remote_authorize
- * - Jetpack_Client_Server::authorize()
- * - Jetpack_Client_Server::get_token()
- * - GET https://jetpack.wordpress.com/jetpack.token/1/ with
- * client_id, client_secret, grant_type, code, redirect_uri:action=authorize, state, scope, user_email, user_login
- * - which responds with access_token, token_type, scope
- * - Jetpack_Client_Server::authorize() stores jetpack_options: user_token => access_token.$user_id
- * - Jetpack::activate_default_modules()
- * - Deactivates deprecated plugins
- * - Activates all default modules
- * - Responds with either error, or 'connected' for new connection, or 'linked' for additional linked users
- * 7 - For a new connection, user selects a Jetpack plan on wordpress.com
- * 8 - User is redirected back to wp-admin/index.php?page=jetpack with state:message=authorized
- * Done!
- */
-
- /**
- * Handles the page load events for the Jetpack admin page
- */
- function admin_page_load() {
- $error = false;
-
- // Make sure we have the right body class to hook stylings for subpages off of.
- add_filter( 'admin_body_class', array( __CLASS__, 'add_jetpack_pagestyles' ) );
-
- if ( ! empty( $_GET['jetpack_restate'] ) ) {
- // Should only be used in intermediate redirects to preserve state across redirects
- Jetpack::restate();
- }
-
- if ( isset( $_GET['connect_url_redirect'] ) ) {
- // User clicked in the iframe to link their accounts
- if ( ! Jetpack::is_user_connected() ) {
- $from = ! empty( $_GET['from'] ) ? $_GET['from'] : 'iframe';
- $redirect = ! empty( $_GET['redirect_after_auth'] ) ? $_GET['redirect_after_auth'] : false;
-
- add_filter( 'allowed_redirect_hosts', array( &$this, 'allow_wpcom_environments' ) );
- $connect_url = $this->build_connect_url( true, $redirect, $from );
- remove_filter( 'allowed_redirect_hosts', array( &$this, 'allow_wpcom_environments' ) );
-
- if ( isset( $_GET['notes_iframe'] ) )
- $connect_url .= '&notes_iframe';
- wp_redirect( $connect_url );
- exit;
- } else {
- if ( ! isset( $_GET['calypso_env'] ) ) {
- Jetpack::state( 'message', 'already_authorized' );
- wp_safe_redirect( Jetpack::admin_url() );
- exit;
- } else {
- $connect_url = $this->build_connect_url( true, false, 'iframe' );
- $connect_url .= '&already_authorized=true';
- wp_redirect( $connect_url );
- exit;
- }
- }
- }
-
-
- if ( isset( $_GET['action'] ) ) {
- switch ( $_GET['action'] ) {
- case 'authorize':
- if ( Jetpack::is_active() && Jetpack::is_user_connected() ) {
- Jetpack::state( 'message', 'already_authorized' );
- wp_safe_redirect( Jetpack::admin_url() );
- exit;
- }
- Jetpack::log( 'authorize' );
- $client_server = new Jetpack_Client_Server;
- $client_server->client_authorize();
- exit;
- case 'register' :
- if ( ! current_user_can( 'jetpack_connect' ) ) {
- $error = 'cheatin';
- break;
- }
- check_admin_referer( 'jetpack-register' );
- Jetpack::log( 'register' );
- Jetpack::maybe_set_version_option();
- $registered = Jetpack::try_registration();
- if ( is_wp_error( $registered ) ) {
- $error = $registered->get_error_code();
- Jetpack::state( 'error', $error );
- Jetpack::state( 'error', $registered->get_error_message() );
- JetpackTracking::record_user_event( 'jpc_register_fail', array(
- 'error_code' => $error,
- 'error_message' => $registered->get_error_message()
- ) );
- break;
- }
-
- $from = isset( $_GET['from'] ) ? $_GET['from'] : false;
- $redirect = isset( $_GET['redirect'] ) ? $_GET['redirect'] : false;
-
- JetpackTracking::record_user_event( 'jpc_register_success', array(
- 'from' => $from
- ) );
-
- $url = $this->build_connect_url( true, $redirect, $from );
-
- if ( ! empty( $_GET['onboarding'] ) ) {
- $url = add_query_arg( 'onboarding', $_GET['onboarding'], $url );
- }
-
- if ( ! empty( $_GET['auth_approved'] ) && 'true' === $_GET['auth_approved'] ) {
- $url = add_query_arg( 'auth_approved', 'true', $url );
- }
-
- wp_redirect( $url );
- exit;
- case 'activate' :
- if ( ! current_user_can( 'jetpack_activate_modules' ) ) {
- $error = 'cheatin';
- break;
- }
-
- $module = stripslashes( $_GET['module'] );
- check_admin_referer( "jetpack_activate-$module" );
- Jetpack::log( 'activate', $module );
- if ( ! Jetpack::activate_module( $module ) ) {
- Jetpack::state( 'error', sprintf( __( 'Could not activate %s', 'jetpack' ), $module ) );
- }
- // The following two lines will rarely happen, as Jetpack::activate_module normally exits at the end.
- wp_safe_redirect( Jetpack::admin_url( 'page=jetpack' ) );
- exit;
- case 'activate_default_modules' :
- check_admin_referer( 'activate_default_modules' );
- Jetpack::log( 'activate_default_modules' );
- Jetpack::restate();
- $min_version = isset( $_GET['min_version'] ) ? $_GET['min_version'] : false;
- $max_version = isset( $_GET['max_version'] ) ? $_GET['max_version'] : false;
- $other_modules = isset( $_GET['other_modules'] ) && is_array( $_GET['other_modules'] ) ? $_GET['other_modules'] : array();
- Jetpack::activate_default_modules( $min_version, $max_version, $other_modules );
- wp_safe_redirect( Jetpack::admin_url( 'page=jetpack' ) );
- exit;
- case 'disconnect' :
- if ( ! current_user_can( 'jetpack_disconnect' ) ) {
- $error = 'cheatin';
- break;
- }
-
- check_admin_referer( 'jetpack-disconnect' );
- Jetpack::log( 'disconnect' );
- Jetpack::disconnect();
- wp_safe_redirect( Jetpack::admin_url( 'disconnected=true' ) );
- exit;
- case 'reconnect' :
- if ( ! current_user_can( 'jetpack_reconnect' ) ) {
- $error = 'cheatin';
- break;
- }
-
- check_admin_referer( 'jetpack-reconnect' );
- Jetpack::log( 'reconnect' );
- $this->disconnect();
- wp_redirect( $this->build_connect_url( true, false, 'reconnect' ) );
- exit;
- case 'deactivate' :
- if ( ! current_user_can( 'jetpack_deactivate_modules' ) ) {
- $error = 'cheatin';
- break;
- }
-
- $modules = stripslashes( $_GET['module'] );
- check_admin_referer( "jetpack_deactivate-$modules" );
- foreach ( explode( ',', $modules ) as $module ) {
- Jetpack::log( 'deactivate', $module );
- Jetpack::deactivate_module( $module );
- Jetpack::state( 'message', 'module_deactivated' );
- }
- Jetpack::state( 'module', $modules );
- wp_safe_redirect( Jetpack::admin_url( 'page=jetpack' ) );
- exit;
- case 'unlink' :
- $redirect = isset( $_GET['redirect'] ) ? $_GET['redirect'] : '';
- check_admin_referer( 'jetpack-unlink' );
- Jetpack::log( 'unlink' );
- $this->unlink_user();
- Jetpack::state( 'message', 'unlinked' );
- if ( 'sub-unlink' == $redirect ) {
- wp_safe_redirect( admin_url() );
- } else {
- wp_safe_redirect( Jetpack::admin_url( array( 'page' => $redirect ) ) );
- }
- exit;
- case 'onboard' :
- if ( ! current_user_can( 'manage_options' ) ) {
- wp_safe_redirect( Jetpack::admin_url( 'page=jetpack' ) );
- } else {
- Jetpack::create_onboarding_token();
- $url = $this->build_connect_url( true );
-
- if ( false !== ( $token = Jetpack_Options::get_option( 'onboarding' ) ) ) {
- $url = add_query_arg( 'onboarding', $token, $url );
- }
-
- $calypso_env = ! empty( $_GET[ 'calypso_env' ] ) ? $_GET[ 'calypso_env' ] : false;
- if ( $calypso_env ) {
- $url = add_query_arg( 'calypso_env', $calypso_env, $url );
- }
-
- wp_redirect( $url );
- exit;
- }
- exit;
- default:
- /**
- * Fires when a Jetpack admin page is loaded with an unrecognized parameter.
- *
- * @since 2.6.0
- *
- * @param string sanitize_key( $_GET['action'] ) Unrecognized URL parameter.
- */
- do_action( 'jetpack_unrecognized_action', sanitize_key( $_GET['action'] ) );
- }
- }
-
- if ( ! $error = $error ? $error : Jetpack::state( 'error' ) ) {
- self::activate_new_modules( true );
- }
-
- $message_code = Jetpack::state( 'message' );
- if ( Jetpack::state( 'optin-manage' ) ) {
- $activated_manage = $message_code;
- $message_code = 'jetpack-manage';
- }
-
- switch ( $message_code ) {
- case 'jetpack-manage':
- $this->message = '<strong>' . sprintf( __( 'You are all set! Your site can now be managed from <a href="%s" target="_blank">wordpress.com/sites</a>.', 'jetpack' ), 'https://wordpress.com/sites' ) . '</strong>';
- if ( $activated_manage ) {
- $this->message .= '<br /><strong>' . __( 'Manage has been activated for you!', 'jetpack' ) . '</strong>';
- }
- break;
-
- }
-
- $deactivated_plugins = Jetpack::state( 'deactivated_plugins' );
-
- if ( ! empty( $deactivated_plugins ) ) {
- $deactivated_plugins = explode( ',', $deactivated_plugins );
- $deactivated_titles = array();
- foreach ( $deactivated_plugins as $deactivated_plugin ) {
- if ( ! isset( $this->plugins_to_deactivate[$deactivated_plugin] ) ) {
- continue;
- }
-
- $deactivated_titles[] = '<strong>' . str_replace( ' ', '&nbsp;', $this->plugins_to_deactivate[$deactivated_plugin][1] ) . '</strong>';
- }
-
- if ( $deactivated_titles ) {
- if ( $this->message ) {
- $this->message .= "<br /><br />\n";
- }
-
- $this->message .= wp_sprintf(
- _n(
- 'Jetpack contains the most recent version of the old %l plugin.',
- 'Jetpack contains the most recent versions of the old %l plugins.',
- count( $deactivated_titles ),
- 'jetpack'
- ),
- $deactivated_titles
- );
-
- $this->message .= "<br />\n";
-
- $this->message .= _n(
- 'The old version has been deactivated and can be removed from your site.',
- 'The old versions have been deactivated and can be removed from your site.',
- count( $deactivated_titles ),
- 'jetpack'
- );
- }
- }
-
- $this->privacy_checks = Jetpack::state( 'privacy_checks' );
-
- if ( $this->message || $this->error || $this->privacy_checks || $this->can_display_jetpack_manage_notice() ) {
- add_action( 'jetpack_notices', array( $this, 'admin_notices' ) );
- }
-
- if ( isset( $_GET['configure'] ) && Jetpack::is_module( $_GET['configure'] ) && current_user_can( 'manage_options' ) ) {
- /**
- * Fires when a module configuration page is loaded.
- * The dynamic part of the hook is the configure parameter from the URL.
- *
- * @since 1.1.0
- */
- do_action( 'jetpack_module_configuration_load_' . $_GET['configure'] );
- }
-
- add_filter( 'jetpack_short_module_description', 'wptexturize' );
- }
-
- function admin_notices() {
-
- if ( $this->error ) {
-?>
-<div id="message" class="jetpack-message jetpack-err">
- <div class="squeezer">
- <h2><?php echo wp_kses( $this->error, array( 'a' => array( 'href' => array() ), 'small' => true, 'code' => true, 'strong' => true, 'br' => true, 'b' => true ) ); ?></h2>
-<?php if ( $desc = Jetpack::state( 'error_description' ) ) : ?>
- <p><?php echo esc_html( stripslashes( $desc ) ); ?></p>
-<?php endif; ?>
- </div>
-</div>
-<?php
- }
-
- if ( $this->message ) {
-?>
-<div id="message" class="jetpack-message">
- <div class="squeezer">
- <h2><?php echo wp_kses( $this->message, array( 'strong' => array(), 'a' => array( 'href' => true ), 'br' => true ) ); ?></h2>
- </div>
-</div>
-<?php
- }
-
- if ( $this->privacy_checks ) :
- $module_names = $module_slugs = array();
-
- $privacy_checks = explode( ',', $this->privacy_checks );
- $privacy_checks = array_filter( $privacy_checks, array( 'Jetpack', 'is_module' ) );
- foreach ( $privacy_checks as $module_slug ) {
- $module = Jetpack::get_module( $module_slug );
- if ( ! $module ) {
- continue;
- }
-
- $module_slugs[] = $module_slug;
- $module_names[] = "<strong>{$module['name']}</strong>";
- }
-
- $module_slugs = join( ',', $module_slugs );
-?>
-<div id="message" class="jetpack-message jetpack-err">
- <div class="squeezer">
- <h2><strong><?php esc_html_e( 'Is this site private?', 'jetpack' ); ?></strong></h2><br />
- <p><?php
- echo wp_kses(
- wptexturize(
- wp_sprintf(
- _nx(
- "Like your site's RSS feeds, %l allows access to your posts and other content to third parties.",
- "Like your site's RSS feeds, %l allow access to your posts and other content to third parties.",
- count( $privacy_checks ),
- '%l = list of Jetpack module/feature names',
- 'jetpack'
- ),
- $module_names
- )
- ),
- array( 'strong' => true )
- );
-
- echo "\n<br />\n";
-
- echo wp_kses(
- sprintf(
- _nx(
- 'If your site is not publicly accessible, consider <a href="%1$s" title="%2$s">deactivating this feature</a>.',
- 'If your site is not publicly accessible, consider <a href="%1$s" title="%2$s">deactivating these features</a>.',
- count( $privacy_checks ),
- '%1$s = deactivation URL, %2$s = "Deactivate {list of Jetpack module/feature names}',
- 'jetpack'
- ),
- wp_nonce_url(
- Jetpack::admin_url(
- array(
- 'page' => 'jetpack',
- 'action' => 'deactivate',
- 'module' => urlencode( $module_slugs ),
- )
- ),
- "jetpack_deactivate-$module_slugs"
- ),
- esc_attr( wp_kses( wp_sprintf( _x( 'Deactivate %l', '%l = list of Jetpack module/feature names', 'jetpack' ), $module_names ), array() ) )
- ),
- array( 'a' => array( 'href' => true, 'title' => true ) )
- );
- ?></p>
- </div>
-</div>
-<?php endif;
- // only display the notice if the other stuff is not there
- if( $this->can_display_jetpack_manage_notice() && ! $this->error && ! $this->message && ! $this->privacy_checks ) {
- if( isset( $_GET['page'] ) && 'jetpack' != $_GET['page'] )
- $this->opt_in_jetpack_manage_notice();
- }
- }
-
- /**
- * Record a stat for later output. This will only currently output in the admin_footer.
- */
- function stat( $group, $detail ) {
- if ( ! isset( $this->stats[ $group ] ) )
- $this->stats[ $group ] = array();
- $this->stats[ $group ][] = $detail;
- }
-
- /**
- * Load stats pixels. $group is auto-prefixed with "x_jetpack-"
- */
- function do_stats( $method = '' ) {
- if ( is_array( $this->stats ) && count( $this->stats ) ) {
- foreach ( $this->stats as $group => $stats ) {
- if ( is_array( $stats ) && count( $stats ) ) {
- $args = array( "x_jetpack-{$group}" => implode( ',', $stats ) );
- if ( 'server_side' === $method ) {
- self::do_server_side_stat( $args );
- } else {
- echo '<img src="' . esc_url( self::build_stats_url( $args ) ) . '" width="1" height="1" style="display:none;" />';
- }
- }
- unset( $this->stats[ $group ] );
- }
- }
- }
-
- /**
- * Runs stats code for a one-off, server-side.
- *
- * @param $args array|string The arguments to append to the URL. Should include `x_jetpack-{$group}={$stats}` or whatever we want to store.
- *
- * @return bool If it worked.
- */
- static function do_server_side_stat( $args ) {
- $response = wp_remote_get( esc_url_raw( self::build_stats_url( $args ) ) );
- if ( is_wp_error( $response ) )
- return false;
-
- if ( 200 !== wp_remote_retrieve_response_code( $response ) )
- return false;
-
- return true;
- }
-
- /**
- * Builds the stats url.
- *
- * @param $args array|string The arguments to append to the URL.
- *
- * @return string The URL to be pinged.
- */
- static function build_stats_url( $args ) {
- $defaults = array(
- 'v' => 'wpcom2',
- 'rand' => md5( mt_rand( 0, 999 ) . time() ),
- );
- $args = wp_parse_args( $args, $defaults );
- /**
- * Filter the URL used as the Stats tracking pixel.
- *
- * @since 2.3.2
- *
- * @param string $url Base URL used as the Stats tracking pixel.
- */
- $base_url = apply_filters(
- 'jetpack_stats_base_url',
- 'https://pixel.wp.com/g.gif'
- );
- $url = add_query_arg( $args, $base_url );
- return $url;
- }
-
- static function translate_current_user_to_role() {
- foreach ( self::$capability_translations as $role => $cap ) {
- if ( current_user_can( $role ) || current_user_can( $cap ) ) {
- return $role;
- }
- }
-
- return false;
- }
-
- static function translate_user_to_role( $user ) {
- foreach ( self::$capability_translations as $role => $cap ) {
- if ( user_can( $user, $role ) || user_can( $user, $cap ) ) {
- return $role;
- }
- }
-
- return false;
- }
-
- static function translate_role_to_cap( $role ) {
- if ( ! isset( self::$capability_translations[$role] ) ) {
- return false;
- }
-
- return self::$capability_translations[$role];
- }
-
- static function sign_role( $role, $user_id = null ) {
- if ( empty( $user_id ) ) {
- $user_id = (int) get_current_user_id();
- }
-
- if ( ! $user_id ) {
- return false;
- }
-
- $token = Jetpack_Data::get_access_token();
- if ( ! $token || is_wp_error( $token ) ) {
- return false;
- }
-
- return $role . ':' . hash_hmac( 'md5', "{$role}|{$user_id}", $token->secret );
- }
-
-
- /**
- * Builds a URL to the Jetpack connection auth page
- *
- * @since 3.9.5
- *
- * @param bool $raw If true, URL will not be escaped.
- * @param bool|string $redirect If true, will redirect back to Jetpack wp-admin landing page after connection.
- * If string, will be a custom redirect.
- * @param bool|string $from If not false, adds 'from=$from' param to the connect URL.
- * @param bool $register If true, will generate a register URL regardless of the existing token, since 4.9.0
- *
- * @return string Connect URL
- */
- function build_connect_url( $raw = false, $redirect = false, $from = false, $register = false ) {
- $site_id = Jetpack_Options::get_option( 'id' );
- $token = Jetpack_Options::get_option( 'blog_token' );
-
- if ( $register || ! $token || ! $site_id ) {
- $url = Jetpack::nonce_url_no_esc( Jetpack::admin_url( 'action=register' ), 'jetpack-register' );
-
- if ( ! empty( $redirect ) ) {
- $url = add_query_arg(
- 'redirect',
- urlencode( wp_validate_redirect( esc_url_raw( $redirect ) ) ),
- $url
- );
- }
-
- if( is_network_admin() ) {
- $url = add_query_arg( 'is_multisite', network_admin_url( 'admin.php?page=jetpack-settings' ), $url );
- }
- } else {
-
- // Let's check the existing blog token to see if we need to re-register. We only check once per minute
- // because otherwise this logic can get us in to a loop.
- $last_connect_url_check = intval( Jetpack_Options::get_raw_option( 'jetpack_last_connect_url_check' ) );
- if ( ! $last_connect_url_check || ( time() - $last_connect_url_check ) > MINUTE_IN_SECONDS ) {
- Jetpack_Options::update_raw_option( 'jetpack_last_connect_url_check', time() );
-
- $response = Jetpack_Client::wpcom_json_api_request_as_blog(
- sprintf( '/sites/%d', $site_id ) .'?force=wpcom',
- '1.1'
- );
-
- if ( 200 !== wp_remote_retrieve_response_code( $response ) ) {
- // Generating a register URL instead to refresh the existing token
- return $this->build_connect_url( $raw, $redirect, $from, true );
- }
- }
-
- if ( defined( 'JETPACK__GLOTPRESS_LOCALES_PATH' ) && include_once JETPACK__GLOTPRESS_LOCALES_PATH ) {
- $gp_locale = GP_Locales::by_field( 'wp_locale', get_locale() );
- }
-
- $role = self::translate_current_user_to_role();
- $signed_role = self::sign_role( $role );
-
- $user = wp_get_current_user();
-
- $jetpack_admin_page = esc_url_raw( admin_url( 'admin.php?page=jetpack' ) );
- $redirect = $redirect
- ? wp_validate_redirect( esc_url_raw( $redirect ), $jetpack_admin_page )
- : $jetpack_admin_page;
-
- if( isset( $_REQUEST['is_multisite'] ) ) {
- $redirect = Jetpack_Network::init()->get_url( 'network_admin_page' );
- }
-
- $secrets = Jetpack::generate_secrets( 'authorize', false, 2 * HOUR_IN_SECONDS );
-
- /**
- * Filter the type of authorization.
- * 'calypso' completes authorization on wordpress.com/jetpack/connect
- * while 'jetpack' ( or any other value ) completes the authorization at jetpack.wordpress.com.
- *
- * @since 4.3.3
- *
- * @param string $auth_type Defaults to 'calypso', can also be 'jetpack'.
- */
- $auth_type = apply_filters( 'jetpack_auth_type', 'calypso' );
-
- $tracks_identity = jetpack_tracks_get_identity( get_current_user_id() );
-
- $args = urlencode_deep(
- array(
- 'response_type' => 'code',
- 'client_id' => Jetpack_Options::get_option( 'id' ),
- 'redirect_uri' => add_query_arg(
- array(
- 'action' => 'authorize',
- '_wpnonce' => wp_create_nonce( "jetpack-authorize_{$role}_{$redirect}" ),
- 'redirect' => urlencode( $redirect ),
- ),
- esc_url( admin_url( 'admin.php?page=jetpack' ) )
- ),
- 'state' => $user->ID,
- 'scope' => $signed_role,
- 'user_email' => $user->user_email,
- 'user_login' => $user->user_login,
- 'is_active' => Jetpack::is_active(),
- 'jp_version' => JETPACK__VERSION,
- 'auth_type' => $auth_type,
- 'secret' => $secrets['secret_1'],
- 'locale' => ( isset( $gp_locale ) && isset( $gp_locale->slug ) ) ? $gp_locale->slug : '',
- 'blogname' => get_option( 'blogname' ),
- 'site_url' => site_url(),
- 'home_url' => home_url(),
- 'site_icon' => get_site_icon_url(),
- 'site_lang' => get_locale(),
- '_ui' => $tracks_identity['_ui'],
- '_ut' => $tracks_identity['_ut'],
- 'site_created' => Jetpack::get_assumed_site_creation_date(),
- )
- );
-
- self::apply_activation_source_to_args( $args );
-
- $url = add_query_arg( $args, Jetpack::api_url( 'authorize' ) );
- }
-
- if ( $from ) {
- $url = add_query_arg( 'from', $from, $url );
- }
-
- // Ensure that class to get the affiliate code is loaded
- if ( ! class_exists( 'Jetpack_Affiliate' ) ) {
- require_once JETPACK__PLUGIN_DIR . 'class.jetpack-affiliate.php';
- }
- // Get affiliate code and add it to the URL
- $url = Jetpack_Affiliate::init()->add_code_as_query_arg( $url );
-
- if ( isset( $_GET['calypso_env'] ) ) {
- $url = add_query_arg( 'calypso_env', sanitize_key( $_GET['calypso_env'] ), $url );
- }
-
- return $raw ? $url : esc_url( $url );
- }
-
- /**
- * Get our assumed site creation date.
- * Calculated based on the earlier date of either:
- * - Earliest admin user registration date.
- * - Earliest date of post of any post type.
- *
- * @since 7.2.0
- *
- * @return string Assumed site creation date and time.
- */
- public static function get_assumed_site_creation_date() {
- $earliest_registered_users = get_users( array(
- 'role' => 'administrator',
- 'orderby' => 'user_registered',
- 'order' => 'ASC',
- 'fields' => array( 'user_registered' ),
- 'number' => 1,
- ) );
- $earliest_registration_date = $earliest_registered_users[0]->user_registered;
-
- $earliest_posts = get_posts( array(
- 'posts_per_page' => 1,
- 'post_type' => 'any',
- 'post_status' => 'any',
- 'orderby' => 'date',
- 'order' => 'ASC',
- ) );
-
- // If there are no posts at all, we'll count only on user registration date.
- if ( $earliest_posts ) {
- $earliest_post_date = $earliest_posts[0]->post_date;
- } else {
- $earliest_post_date = PHP_INT_MAX;
- }
-
- return min( $earliest_registration_date, $earliest_post_date );
- }
-
- public static function apply_activation_source_to_args( &$args ) {
- list( $activation_source_name, $activation_source_keyword ) = get_option( 'jetpack_activation_source' );
-
- if ( $activation_source_name ) {
- $args['_as'] = urlencode( $activation_source_name );
- }
-
- if ( $activation_source_keyword ) {
- $args['_ak'] = urlencode( $activation_source_keyword );
- }
- }
-
- function build_reconnect_url( $raw = false ) {
- $url = wp_nonce_url( Jetpack::admin_url( 'action=reconnect' ), 'jetpack-reconnect' );
- return $raw ? $url : esc_url( $url );
- }
-
- public static function admin_url( $args = null ) {
- $args = wp_parse_args( $args, array( 'page' => 'jetpack' ) );
- $url = add_query_arg( $args, admin_url( 'admin.php' ) );
- return $url;
- }
-
- public static function nonce_url_no_esc( $actionurl, $action = -1, $name = '_wpnonce' ) {
- $actionurl = str_replace( '&amp;', '&', $actionurl );
- return add_query_arg( $name, wp_create_nonce( $action ), $actionurl );
- }
-
- function dismiss_jetpack_notice() {
-
- if ( ! isset( $_GET['jetpack-notice'] ) ) {
- return;
- }
-
- switch( $_GET['jetpack-notice'] ) {
- case 'dismiss':
- if ( check_admin_referer( 'jetpack-deactivate' ) && ! is_plugin_active_for_network( plugin_basename( JETPACK__PLUGIN_DIR . 'jetpack.php' ) ) ) {
-
- require_once ABSPATH . 'wp-admin/includes/plugin.php';
- deactivate_plugins( JETPACK__PLUGIN_DIR . 'jetpack.php', false, false );
- wp_safe_redirect( admin_url() . 'plugins.php?deactivate=true&plugin_status=all&paged=1&s=' );
- }
- break;
- case 'jetpack-manage-opt-out':
-
- if ( check_admin_referer( 'jetpack_manage_banner_opt_out' ) ) {
- // Don't show the banner again
-
- Jetpack_Options::update_option( 'dismissed_manage_banner', true );
- // redirect back to the page that had the notice
- if ( wp_get_referer() ) {
- wp_safe_redirect( wp_get_referer() );
- } else {
- // Take me to Jetpack
- wp_safe_redirect( admin_url( 'admin.php?page=jetpack' ) );
- }
- }
- break;
- case 'jetpack-protect-multisite-opt-out':
-
- if ( check_admin_referer( 'jetpack_protect_multisite_banner_opt_out' ) ) {
- // Don't show the banner again
-
- update_site_option( 'jetpack_dismissed_protect_multisite_banner', true );
- // redirect back to the page that had the notice
- if ( wp_get_referer() ) {
- wp_safe_redirect( wp_get_referer() );
- } else {
- // Take me to Jetpack
- wp_safe_redirect( admin_url( 'admin.php?page=jetpack' ) );
- }
- }
- break;
- case 'jetpack-manage-opt-in':
- if ( check_admin_referer( 'jetpack_manage_banner_opt_in' ) ) {
- // This makes sure that we are redirect to jetpack home so that we can see the Success Message.
-
- $redirection_url = Jetpack::admin_url();
- remove_action( 'jetpack_pre_activate_module', array( Jetpack_Admin::init(), 'fix_redirect' ) );
-
- // Don't redirect form the Jetpack Setting Page
- $referer_parsed = wp_parse_url ( wp_get_referer() );
- // check that we do have a wp_get_referer and the query paramater is set orderwise go to the Jetpack Home
- if ( isset( $referer_parsed['query'] ) && false !== strpos( $referer_parsed['query'], 'page=jetpack_modules' ) ) {
- // Take the user to Jetpack home except when on the setting page
- $redirection_url = wp_get_referer();
- add_action( 'jetpack_pre_activate_module', array( Jetpack_Admin::init(), 'fix_redirect' ) );
- }
- // Also update the JSON API FULL MANAGEMENT Option
- Jetpack::activate_module( 'manage', false, false );
-
- // Special Message when option in.
- Jetpack::state( 'optin-manage', 'true' );
- // Activate the Module if not activated already
-
- // Redirect properly
- wp_safe_redirect( $redirection_url );
-
- }
- break;
- }
- }
-
- public static function admin_screen_configure_module( $module_id ) {
-
- // User that doesn't have 'jetpack_configure_modules' will never end up here since Jetpack Landing Page woun't let them.
- if ( ! in_array( $module_id, Jetpack::get_active_modules() ) && current_user_can( 'manage_options' ) ) {
- if ( has_action( 'display_activate_module_setting_' . $module_id ) ) {
- /**
- * Fires to diplay a custom module activation screen.
- *
- * To add a module actionation screen use Jetpack::module_configuration_activation_screen method.
- * Example: Jetpack::module_configuration_activation_screen( 'manage', array( $this, 'manage_activate_screen' ) );
- *
- * @module manage
- *
- * @since 3.8.0
- *
- * @param int $module_id Module ID.
- */
- do_action( 'display_activate_module_setting_' . $module_id );
- } else {
- self::display_activate_module_link( $module_id );
- }
-
- return false;
- } ?>
-
- <div id="jp-settings-screen" style="position: relative">
- <h3>
- <?php
- $module = Jetpack::get_module( $module_id );
- printf( __( 'Configure %s', 'jetpack' ), $module['name'] );
- ?>
- </h3>
- <?php
- /**
- * Fires within the displayed message when a feature configuation is updated.
- *
- * @since 3.4.0
- *
- * @param int $module_id Module ID.
- */
- do_action( 'jetpack_notices_update_settings', $module_id );
- /**
- * Fires when a feature configuation screen is loaded.
- * The dynamic part of the hook, $module_id, is the module ID.
- *
- * @since 1.1.0
- */
- do_action( 'jetpack_module_configuration_screen_' . $module_id );
- ?>
- </div><?php
- }
-
- /**
- * Display link to activate the module to see the settings screen.
- * @param string $module_id
- * @return null
- */
- public static function display_activate_module_link( $module_id ) {
-
- $info = Jetpack::get_module( $module_id );
- $extra = '';
- $activate_url = wp_nonce_url(
- Jetpack::admin_url(
- array(
- 'page' => 'jetpack',
- 'action' => 'activate',
- 'module' => $module_id,
- )
- ),
- "jetpack_activate-$module_id"
- );
-
- ?>
-
- <div class="wrap configure-module">
- <div id="jp-settings-screen">
- <?php
- if ( $module_id == 'json-api' ) {
-
- $info['name'] = esc_html__( 'Activate Site Management and JSON API', 'jetpack' );
-
- $activate_url = Jetpack::init()->opt_in_jetpack_manage_url();
-
- $info['description'] = sprintf( __( 'Manage your multiple Jetpack sites from our centralized dashboard at wordpress.com/sites. <a href="%s" target="_blank">Learn more</a>.', 'jetpack' ), 'https://jetpack.com/support/site-management' );
-
- // $extra = __( 'To use Site Management, you need to first activate JSON API to allow remote management of your site. ', 'jetpack' );
- } ?>
-
- <h3><?php echo esc_html( $info['name'] ); ?></h3>
- <div class="narrow">
- <p><?php echo $info['description']; ?></p>
- <?php if( $extra ) { ?>
- <p><?php echo esc_html( $extra ); ?></p>
- <?php } ?>
- <p>
- <?php
- if( wp_get_referer() ) {
- printf( __( '<a class="button-primary" href="%s">Activate Now</a> or <a href="%s" >return to previous page</a>.', 'jetpack' ) , $activate_url, wp_get_referer() );
- } else {
- printf( __( '<a class="button-primary" href="%s">Activate Now</a>', 'jetpack' ) , $activate_url );
- } ?>
- </p>
- </div>
-
- </div>
- </div>
-
- <?php
- }
-
- public static function sort_modules( $a, $b ) {
- if ( $a['sort'] == $b['sort'] )
- return 0;
-
- return ( $a['sort'] < $b['sort'] ) ? -1 : 1;
- }
-
- function ajax_recheck_ssl() {
- check_ajax_referer( 'recheck-ssl', 'ajax-nonce' );
- $result = Jetpack::permit_ssl( true );
- wp_send_json( array(
- 'enabled' => $result,
- 'message' => get_transient( 'jetpack_https_test_message' )
- ) );
- }
-
-/* Client API */
-
- /**
- * Returns the requested Jetpack API URL
- *
- * @return string
- */
- public static function api_url( $relative_url ) {
- return trailingslashit( JETPACK__API_BASE . $relative_url ) . JETPACK__API_VERSION . '/';
- }
-
- /**
- * Some hosts disable the OpenSSL extension and so cannot make outgoing HTTPS requsets
- */
- public static function fix_url_for_bad_hosts( $url ) {
- if ( 0 !== strpos( $url, 'https://' ) ) {
- return $url;
- }
-
- switch ( JETPACK_CLIENT__HTTPS ) {
- case 'ALWAYS' :
- return $url;
- case 'NEVER' :
- return set_url_scheme( $url, 'http' );
- // default : case 'AUTO' :
- }
-
- // we now return the unmodified SSL URL by default, as a security precaution
- return $url;
- }
-
- /**
- * Create a random secret for validating onboarding payload
- *
- * @return string Secret token
- */
- public static function create_onboarding_token() {
- if ( false === ( $token = Jetpack_Options::get_option( 'onboarding' ) ) ) {
- $token = wp_generate_password( 32, false );
- Jetpack_Options::update_option( 'onboarding', $token );
- }
-
- return $token;
- }
-
- /**
- * Remove the onboarding token
- *
- * @return bool True on success, false on failure
- */
- public static function invalidate_onboarding_token() {
- return Jetpack_Options::delete_option( 'onboarding' );
- }
-
- /**
- * Validate an onboarding token for a specific action
- *
- * @return boolean True if token/action pair is accepted, false if not
- */
- public static function validate_onboarding_token_action( $token, $action ) {
- // Compare tokens, bail if tokens do not match
- if ( ! hash_equals( $token, Jetpack_Options::get_option( 'onboarding' ) ) ) {
- return false;
- }
-
- // List of valid actions we can take
- $valid_actions = array(
- '/jetpack/v4/settings',
- );
-
- // Whitelist the action
- if ( ! in_array( $action, $valid_actions ) ) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Checks to see if the URL is using SSL to connect with Jetpack
- *
- * @since 2.3.3
- * @return boolean
- */
- public static function permit_ssl( $force_recheck = false ) {
- // Do some fancy tests to see if ssl is being supported
- if ( $force_recheck || false === ( $ssl = get_transient( 'jetpack_https_test' ) ) ) {
- $message = '';
- if ( 'https' !== substr( JETPACK__API_BASE, 0, 5 ) ) {
- $ssl = 0;
- } else {
- switch ( JETPACK_CLIENT__HTTPS ) {
- case 'NEVER':
- $ssl = 0;
- $message = __( 'JETPACK_CLIENT__HTTPS is set to NEVER', 'jetpack' );
- break;
- case 'ALWAYS':
- case 'AUTO':
- default:
- $ssl = 1;
- break;
- }
-
- // If it's not 'NEVER', test to see
- if ( $ssl ) {
- if ( ! wp_http_supports( array( 'ssl' => true ) ) ) {
- $ssl = 0;
- $message = __( 'WordPress reports no SSL support', 'jetpack' );
- } else {
- $response = wp_remote_get( JETPACK__API_BASE . 'test/1/' );
- if ( is_wp_error( $response ) ) {
- $ssl = 0;
- $message = __( 'WordPress reports no SSL support', 'jetpack' );
- } elseif ( 'OK' !== wp_remote_retrieve_body( $response ) ) {
- $ssl = 0;
- $message = __( 'Response was not OK: ', 'jetpack' ) . wp_remote_retrieve_body( $response );
- }
- }
- }
- }
- set_transient( 'jetpack_https_test', $ssl, DAY_IN_SECONDS );
- set_transient( 'jetpack_https_test_message', $message, DAY_IN_SECONDS );
- }
-
- return (bool) $ssl;
- }
-
- /*
- * Displays an admin_notice, alerting the user to their JETPACK_CLIENT__HTTPS constant being 'AUTO' but SSL isn't working.
- */
- public function alert_auto_ssl_fail() {
- if ( ! current_user_can( 'manage_options' ) )
- return;
-
- $ajax_nonce = wp_create_nonce( 'recheck-ssl' );
- ?>
-
- <div id="jetpack-ssl-warning" class="error jp-identity-crisis">
- <div class="jp-banner__content">
- <h2><?php _e( 'Outbound HTTPS not working', 'jetpack' ); ?></h2>
- <p><?php _e( 'Your site could not connect to WordPress.com via HTTPS. This could be due to any number of reasons, including faulty SSL certificates, misconfigured or missing SSL libraries, or network issues.', 'jetpack' ); ?></p>
- <p>
- <?php _e( 'Jetpack will re-test for HTTPS support once a day, but you can click here to try again immediately: ', 'jetpack' ); ?>
- <a href="#" id="jetpack-recheck-ssl-button"><?php _e( 'Try again', 'jetpack' ); ?></a>
- <span id="jetpack-recheck-ssl-output"><?php echo get_transient( 'jetpack_https_test_message' ); ?></span>
- </p>
- <p>
- <?php printf( __( 'For more help, try our <a href="%1$s">connection debugger</a> or <a href="%2$s" target="_blank">troubleshooting tips</a>.', 'jetpack' ),
- esc_url( Jetpack::admin_url( array( 'page' => 'jetpack-debugger' ) ) ),
- esc_url( 'https://jetpack.com/support/getting-started-with-jetpack/troubleshooting-tips/' ) ); ?>
- </p>
- </div>
- </div>
- <style>
- #jetpack-recheck-ssl-output { margin-left: 5px; color: red; }
- </style>
- <script type="text/javascript">
- jQuery( document ).ready( function( $ ) {
- $( '#jetpack-recheck-ssl-button' ).click( function( e ) {
- var $this = $( this );
- $this.html( <?php echo json_encode( __( 'Checking', 'jetpack' ) ); ?> );
- $( '#jetpack-recheck-ssl-output' ).html( '' );
- e.preventDefault();
- var data = { action: 'jetpack-recheck-ssl', 'ajax-nonce': '<?php echo $ajax_nonce; ?>' };
- $.post( ajaxurl, data )
- .done( function( response ) {
- if ( response.enabled ) {
- $( '#jetpack-ssl-warning' ).hide();
- } else {
- this.html( <?php echo json_encode( __( 'Try again', 'jetpack' ) ); ?> );
- $( '#jetpack-recheck-ssl-output' ).html( 'SSL Failed: ' + response.message );
- }
- }.bind( $this ) );
- } );
- } );
- </script>
-
- <?php
- }
-
- /**
- * Returns the Jetpack XML-RPC API
- *
- * @return string
- */
- public static function xmlrpc_api_url() {
- $base = preg_replace( '#(https?://[^?/]+)(/?.*)?$#', '\\1', JETPACK__API_BASE );
- return untrailingslashit( $base ) . '/xmlrpc.php';
- }
-
- /**
- * Creates two secret tokens and the end of life timestamp for them.
- *
- * Note these tokens are unique per call, NOT static per site for connecting.
- *
- * @since 2.6
- * @return array
- */
- public static function generate_secrets( $action, $user_id = false, $exp = 600 ) {
- if ( ! $user_id ) {
- $user_id = get_current_user_id();
- }
-
- $secret_name = 'jetpack_' . $action . '_' . $user_id;
- $secrets = Jetpack_Options::get_raw_option( 'jetpack_secrets', array() );
-
- if (
- isset( $secrets[ $secret_name ] ) &&
- $secrets[ $secret_name ]['exp'] > time()
- ) {
- return $secrets[ $secret_name ];
- }
-
- $secret_value = array(
- 'secret_1' => wp_generate_password( 32, false ),
- 'secret_2' => wp_generate_password( 32, false ),
- 'exp' => time() + $exp,
- );
-
- $secrets[ $secret_name ] = $secret_value;
-
- Jetpack_Options::update_raw_option( 'jetpack_secrets', $secrets );
- return $secrets[ $secret_name ];
- }
-
- public static function get_secrets( $action, $user_id ) {
- $secret_name = 'jetpack_' . $action . '_' . $user_id;
- $secrets = Jetpack_Options::get_raw_option( 'jetpack_secrets', array() );
-
- if ( ! isset( $secrets[ $secret_name ] ) ) {
- return new WP_Error( 'verify_secrets_missing', 'Verification secrets not found' );
- }
-
- if ( $secrets[ $secret_name ]['exp'] < time() ) {
- self::delete_secrets( $action, $user_id );
- return new WP_Error( 'verify_secrets_expired', 'Verification took too long' );
- }
-
- return $secrets[ $secret_name ];
- }
-
- public static function delete_secrets( $action, $user_id ) {
- $secret_name = 'jetpack_' . $action . '_' . $user_id;
- $secrets = Jetpack_Options::get_raw_option( 'jetpack_secrets', array() );
- if ( isset( $secrets[ $secret_name ] ) ) {
- unset( $secrets[ $secret_name ] );
- Jetpack_Options::update_raw_option( 'jetpack_secrets', $secrets );
- }
- }
-
- /**
- * Builds the timeout limit for queries talking with the wpcom servers.
- *
- * Based on local php max_execution_time in php.ini
- *
- * @since 2.6
- * @return int
- * @deprecated
- **/
- public function get_remote_query_timeout_limit() {
- _deprecated_function( __METHOD__, 'jetpack-5.4' );
- return Jetpack::get_max_execution_time();
- }
-
- /**
- * Builds the timeout limit for queries talking with the wpcom servers.
- *
- * Based on local php max_execution_time in php.ini
- *
- * @since 5.4
- * @return int
- **/
- public static function get_max_execution_time() {
- $timeout = (int) ini_get( 'max_execution_time' );
-
- // Ensure exec time set in php.ini
- if ( ! $timeout ) {
- $timeout = 30;
- }
- return $timeout;
- }
-
- /**
- * Sets a minimum request timeout, and returns the current timeout
- *
- * @since 5.4
- **/
- public static function set_min_time_limit( $min_timeout ) {
- $timeout = self::get_max_execution_time();
- if ( $timeout < $min_timeout ) {
- $timeout = $min_timeout;
- set_time_limit( $timeout );
- }
- return $timeout;
- }
-
-
- /**
- * Takes the response from the Jetpack register new site endpoint and
- * verifies it worked properly.
- *
- * @since 2.6
- * @return string|Jetpack_Error A JSON object on success or Jetpack_Error on failures
- **/
- public function validate_remote_register_response( $response ) {
- if ( is_wp_error( $response ) ) {
- return new Jetpack_Error( 'register_http_request_failed', $response->get_error_message() );
- }
-
- $code = wp_remote_retrieve_response_code( $response );
- $entity = wp_remote_retrieve_body( $response );
- if ( $entity )
- $registration_response = json_decode( $entity );
- else
- $registration_response = false;
-
- $code_type = intval( $code / 100 );
- if ( 5 == $code_type ) {
- return new Jetpack_Error( 'wpcom_5??', sprintf( __( 'Error Details: %s', 'jetpack' ), $code ), $code );
- } elseif ( 408 == $code ) {
- return new Jetpack_Error( 'wpcom_408', sprintf( __( 'Error Details: %s', 'jetpack' ), $code ), $code );
- } elseif ( ! empty( $registration_response->error ) ) {
- if ( 'xml_rpc-32700' == $registration_response->error && ! function_exists( 'xml_parser_create' ) ) {
- $error_description = __( "PHP's XML extension is not available. Jetpack requires the XML extension to communicate with WordPress.com. Please contact your hosting provider to enable PHP's XML extension.", 'jetpack' );
- } else {
- $error_description = isset( $registration_response->error_description ) ? sprintf( __( 'Error Details: %s', 'jetpack' ), (string) $registration_response->error_description ) : '';
- }
-
- return new Jetpack_Error( (string) $registration_response->error, $error_description, $code );
- } elseif ( 200 != $code ) {
- return new Jetpack_Error( 'wpcom_bad_response', sprintf( __( 'Error Details: %s', 'jetpack' ), $code ), $code );
- }
-
- // Jetpack ID error block
- if ( empty( $registration_response->jetpack_id ) ) {
- return new Jetpack_Error( 'jetpack_id', sprintf( __( 'Error Details: Jetpack ID is empty. Do not publicly post this error message! %s', 'jetpack' ), $entity ), $entity );
- } elseif ( ! is_scalar( $registration_response->jetpack_id ) ) {
- return new Jetpack_Error( 'jetpack_id', sprintf( __( 'Error Details: Jetpack ID is not a scalar. Do not publicly post this error message! %s', 'jetpack' ) , $entity ), $entity );
- } elseif ( preg_match( '/[^0-9]/', $registration_response->jetpack_id ) ) {
- return new Jetpack_Error( 'jetpack_id', sprintf( __( 'Error Details: Jetpack ID begins with a numeral. Do not publicly post this error message! %s', 'jetpack' ) , $entity ), $entity );
- }
-
- return $registration_response;
- }
- /**
- * @return bool|WP_Error
- */
- public static function register() {
- JetpackTracking::record_user_event( 'jpc_register_begin' );
- add_action( 'pre_update_jetpack_option_register', array( 'Jetpack_Options', 'delete_option' ) );
- $secrets = Jetpack::generate_secrets( 'register' );
-
- if (
- empty( $secrets['secret_1'] ) ||
- empty( $secrets['secret_2'] ) ||
- empty( $secrets['exp'] )
- ) {
- return new Jetpack_Error( 'missing_secrets' );
- }
-
- // better to try (and fail) to set a higher timeout than this system
- // supports than to have register fail for more users than it should
- $timeout = Jetpack::set_min_time_limit( 60 ) / 2;
-
- $gmt_offset = get_option( 'gmt_offset' );
- if ( ! $gmt_offset ) {
- $gmt_offset = 0;
- }
-
- $stats_options = get_option( 'stats_options' );
- $stats_id = isset($stats_options['blog_id']) ? $stats_options['blog_id'] : null;
-
- $tracks_identity = jetpack_tracks_get_identity( get_current_user_id() );
-
- $args = array(
- 'method' => 'POST',
- 'body' => array(
- 'siteurl' => site_url(),
- 'home' => home_url(),
- 'gmt_offset' => $gmt_offset,
- 'timezone_string' => (string) get_option( 'timezone_string' ),
- 'site_name' => (string) get_option( 'blogname' ),
- 'secret_1' => $secrets['secret_1'],
- 'secret_2' => $secrets['secret_2'],
- 'site_lang' => get_locale(),
- 'timeout' => $timeout,
- 'stats_id' => $stats_id,
- 'state' => get_current_user_id(),
- '_ui' => $tracks_identity['_ui'],
- '_ut' => $tracks_identity['_ut'],
- 'site_created' => Jetpack::get_assumed_site_creation_date(),
- 'jetpack_version' => JETPACK__VERSION
- ),
- 'headers' => array(
- 'Accept' => 'application/json',
- ),
- 'timeout' => $timeout,
- );
-
- self::apply_activation_source_to_args( $args['body'] );
-
- $response = Jetpack_Client::_wp_remote_request( Jetpack::fix_url_for_bad_hosts( Jetpack::api_url( 'register' ) ), $args, true );
-
- // Make sure the response is valid and does not contain any Jetpack errors
- $registration_details = Jetpack::init()->validate_remote_register_response( $response );
- if ( is_wp_error( $registration_details ) ) {
- return $registration_details;
- } elseif ( ! $registration_details ) {
- return new Jetpack_Error( 'unknown_error', __( 'Unknown error registering your Jetpack site', 'jetpack' ), wp_remote_retrieve_response_code( $response ) );
- }
-
- if ( empty( $registration_details->jetpack_secret ) || ! is_string( $registration_details->jetpack_secret ) ) {
- return new Jetpack_Error( 'jetpack_secret', '', wp_remote_retrieve_response_code( $response ) );
- }
-
- if ( isset( $registration_details->jetpack_public ) ) {
- $jetpack_public = (int) $registration_details->jetpack_public;
- } else {
- $jetpack_public = false;
- }
-
- Jetpack_Options::update_options(
- array(
- 'id' => (int) $registration_details->jetpack_id,
- 'blog_token' => (string) $registration_details->jetpack_secret,
- 'public' => $jetpack_public,
- )
- );
-
- /**
- * Fires when a site is registered on WordPress.com.
- *
- * @since 3.7.0
- *
- * @param int $json->jetpack_id Jetpack Blog ID.
- * @param string $json->jetpack_secret Jetpack Blog Token.
- * @param int|bool $jetpack_public Is the site public.
- */
- do_action( 'jetpack_site_registered', $registration_details->jetpack_id, $registration_details->jetpack_secret, $jetpack_public );
-
- // Initialize Jump Start for the first and only time.
- if ( ! Jetpack_Options::get_option( 'jumpstart' ) ) {
- Jetpack_Options::update_option( 'jumpstart', 'new_connection' );
-
- $jetpack = Jetpack::init();
-
- $jetpack->stat( 'jumpstart', 'unique-views' );
- $jetpack->do_stats( 'server_side' );
- };
-
- return true;
- }
-
- /**
- * If the db version is showing something other that what we've got now, bump it to current.
- *
- * @return bool: True if the option was incorrect and updated, false if nothing happened.
- */
- public static function maybe_set_version_option() {
- list( $version ) = explode( ':', Jetpack_Options::get_option( 'version' ) );
- if ( JETPACK__VERSION != $version ) {
- Jetpack_Options::update_option( 'version', JETPACK__VERSION . ':' . time() );
-
- if ( version_compare( JETPACK__VERSION, $version, '>' ) ) {
- /** This action is documented in class.jetpack.php */
- do_action( 'updating_jetpack_version', JETPACK__VERSION, $version );
- }
-
- return true;
- }
- return false;
- }
-
-/* Client Server API */
-
- /**
- * Loads the Jetpack XML-RPC client
- */
- public static function load_xml_rpc_client() {
- require_once ABSPATH . WPINC . '/class-IXR.php';
- require_once JETPACK__PLUGIN_DIR . 'class.jetpack-ixr-client.php';
- }
-
- /**
- * Resets the saved authentication state in between testing requests.
- */
- public function reset_saved_auth_state() {
- $this->xmlrpc_verification = null;
- $this->rest_authentication_status = null;
- }
-
- function verify_xml_rpc_signature() {
- if ( $this->xmlrpc_verification ) {
- return $this->xmlrpc_verification;
- }
-
- // It's not for us
- if ( ! isset( $_GET['token'] ) || empty( $_GET['signature'] ) ) {
- return false;
- }
-
- @list( $token_key, $version, $user_id ) = explode( ':', $_GET['token'] );
- if (
- empty( $token_key )
- ||
- empty( $version ) || strval( JETPACK__API_VERSION ) !== $version
- ) {
- return false;
- }
-
- if ( '0' === $user_id ) {
- $token_type = 'blog';
- $user_id = 0;
- } else {
- $token_type = 'user';
- if ( empty( $user_id ) || ! ctype_digit( $user_id ) ) {
- return false;
- }
- $user_id = (int) $user_id;
-
- $user = new WP_User( $user_id );
- if ( ! $user || ! $user->exists() ) {
- return false;
- }
- }
-
- $token = Jetpack_Data::get_access_token( $user_id );
- if ( ! $token ) {
- return false;
- }
-
- $token_check = "$token_key.";
- if ( ! hash_equals( substr( $token->secret, 0, strlen( $token_check ) ), $token_check ) ) {
- return false;
- }
-
- require_once JETPACK__PLUGIN_DIR . 'class.jetpack-signature.php';
-
- $jetpack_signature = new Jetpack_Signature( $token->secret, (int) Jetpack_Options::get_option( 'time_diff' ) );
- if ( isset( $_POST['_jetpack_is_multipart'] ) ) {
- $post_data = $_POST;
- $file_hashes = array();
- foreach ( $post_data as $post_data_key => $post_data_value ) {
- if ( 0 !== strpos( $post_data_key, '_jetpack_file_hmac_' ) ) {
- continue;
- }
- $post_data_key = substr( $post_data_key, strlen( '_jetpack_file_hmac_' ) );
- $file_hashes[$post_data_key] = $post_data_value;
- }
-
- foreach ( $file_hashes as $post_data_key => $post_data_value ) {
- unset( $post_data["_jetpack_file_hmac_{$post_data_key}"] );
- $post_data[$post_data_key] = $post_data_value;
- }
-
- ksort( $post_data );
-
- $body = http_build_query( stripslashes_deep( $post_data ) );
- } elseif ( is_null( $this->HTTP_RAW_POST_DATA ) ) {
- $body = file_get_contents( 'php://input' );
- } else {
- $body = null;
- }
-
- $signature = $jetpack_signature->sign_current_request(
- array( 'body' => is_null( $body ) ? $this->HTTP_RAW_POST_DATA : $body, )
- );
-
- if ( ! $signature ) {
- return false;
- } else if ( is_wp_error( $signature ) ) {
- return $signature;
- } else if ( ! hash_equals( $signature, $_GET['signature'] ) ) {
- return false;
- }
-
- $timestamp = (int) $_GET['timestamp'];
- $nonce = stripslashes( (string) $_GET['nonce'] );
-
- if ( ! $this->add_nonce( $timestamp, $nonce ) ) {
- return false;
- }
-
- // Let's see if this is onboarding. In such case, use user token type and the provided user id.
- if ( isset( $this->HTTP_RAW_POST_DATA ) || ! empty( $_GET['onboarding'] ) ) {
- if ( ! empty( $_GET['onboarding'] ) ) {
- $jpo = $_GET;
- } else {
- $jpo = json_decode( $this->HTTP_RAW_POST_DATA, true );
- }
-
- $jpo_token = ! empty( $jpo['onboarding']['token'] ) ? $jpo['onboarding']['token'] : null;
- $jpo_user = ! empty( $jpo['onboarding']['jpUser'] ) ? $jpo['onboarding']['jpUser'] : null;
-
- if (
- isset( $jpo_user ) && isset( $jpo_token ) &&
- is_email( $jpo_user ) && ctype_alnum( $jpo_token ) &&
- isset( $_GET['rest_route'] ) &&
- self::validate_onboarding_token_action( $jpo_token, $_GET['rest_route'] )
- ) {
- $jpUser = get_user_by( 'email', $jpo_user );
- if ( is_a( $jpUser, 'WP_User' ) ) {
- wp_set_current_user( $jpUser->ID );
- $user_can = is_multisite()
- ? current_user_can_for_blog( get_current_blog_id(), 'manage_options' )
- : current_user_can( 'manage_options' );
- if ( $user_can ) {
- $token_type = 'user';
- $token->external_user_id = $jpUser->ID;
- }
- }
- }
- }
-
- $this->xmlrpc_verification = array(
- 'type' => $token_type,
- 'user_id' => $token->external_user_id,
- );
-
- return $this->xmlrpc_verification;
- }
-
- /**
- * Authenticates XML-RPC and other requests from the Jetpack Server
- */
- function authenticate_jetpack( $user, $username, $password ) {
- if ( is_a( $user, 'WP_User' ) ) {
- return $user;
- }
-
- $token_details = $this->verify_xml_rpc_signature();
-
- if ( ! $token_details || is_wp_error( $token_details ) ) {
- return $user;
- }
-
- if ( 'user' !== $token_details['type'] ) {
- return $user;
- }
-
- if ( ! $token_details['user_id'] ) {
- return $user;
- }
-
- nocache_headers();
-
- return new WP_User( $token_details['user_id'] );
- }
-
- // Authenticates requests from Jetpack server to WP REST API endpoints.
- // Uses the existing XMLRPC request signing implementation.
- function wp_rest_authenticate( $user ) {
- if ( ! empty( $user ) ) {
- // Another authentication method is in effect.
- return $user;
- }
-
- if ( ! isset( $_GET['_for'] ) || $_GET['_for'] !== 'jetpack' ) {
- // Nothing to do for this authentication method.
- return null;
- }
-
- if ( ! isset( $_GET['token'] ) && ! isset( $_GET['signature'] ) ) {
- // Nothing to do for this authentication method.
- return null;
- }
-
- // Ensure that we always have the request body available. At this
- // point, the WP REST API code to determine the request body has not
- // run yet. That code may try to read from 'php://input' later, but
- // this can only be done once per request in PHP versions prior to 5.6.
- // So we will go ahead and perform this read now if needed, and save
- // the request body where both the Jetpack signature verification code
- // and the WP REST API code can see it.
- if ( ! isset( $GLOBALS['HTTP_RAW_POST_DATA'] ) ) {
- $GLOBALS['HTTP_RAW_POST_DATA'] = file_get_contents( 'php://input' );
- }
- $this->HTTP_RAW_POST_DATA = $GLOBALS['HTTP_RAW_POST_DATA'];
-
- // Only support specific request parameters that have been tested and
- // are known to work with signature verification. A different method
- // can be passed to the WP REST API via the '?_method=' parameter if
- // needed.
- if ( $_SERVER['REQUEST_METHOD'] !== 'GET' && $_SERVER['REQUEST_METHOD'] !== 'POST' ) {
- $this->rest_authentication_status = new WP_Error(
- 'rest_invalid_request',
- __( 'This request method is not supported.', 'jetpack' ),
- array( 'status' => 400 )
- );
- return null;
- }
- if ( $_SERVER['REQUEST_METHOD'] !== 'POST' && ! empty( $this->HTTP_RAW_POST_DATA ) ) {
- $this->rest_authentication_status = new WP_Error(
- 'rest_invalid_request',
- __( 'This request method does not support body parameters.', 'jetpack' ),
- array( 'status' => 400 )
- );
- return null;
- }
-
- $verified = $this->verify_xml_rpc_signature();
-
- if ( is_wp_error( $verified ) ) {
- $this->rest_authentication_status = $verified;
- return null;
- }
-
- if (
- $verified &&
- isset( $verified['type'] ) &&
- 'user' === $verified['type'] &&
- ! empty( $verified['user_id'] )
- ) {
- // Authentication successful.
- $this->rest_authentication_status = true;
- return $verified['user_id'];
- }
-
- // Something else went wrong. Probably a signature error.
- $this->rest_authentication_status = new WP_Error(
- 'rest_invalid_signature',
- __( 'The request is not signed correctly.', 'jetpack' ),
- array( 'status' => 400 )
- );
- return null;
- }
-
- /**
- * Report authentication status to the WP REST API.
- *
- * @param WP_Error|mixed $result Error from another authentication handler, null if we should handle it, or another value if not
- * @return WP_Error|boolean|null {@see WP_JSON_Server::check_authentication}
- */
- public function wp_rest_authentication_errors( $value ) {
- if ( $value !== null ) {
- return $value;
- }
- return $this->rest_authentication_status;
- }
-
- function add_nonce( $timestamp, $nonce ) {
- global $wpdb;
- static $nonces_used_this_request = array();
-
- if ( isset( $nonces_used_this_request["$timestamp:$nonce"] ) ) {
- return $nonces_used_this_request["$timestamp:$nonce"];
- }
-
- // This should always have gone through Jetpack_Signature::sign_request() first to check $timestamp an $nonce
- $timestamp = (int) $timestamp;
- $nonce = esc_sql( $nonce );
-
- // Raw query so we can avoid races: add_option will also update
- $show_errors = $wpdb->show_errors( false );
-
- $old_nonce = $wpdb->get_row(
- $wpdb->prepare( "SELECT * FROM `$wpdb->options` WHERE option_name = %s", "jetpack_nonce_{$timestamp}_{$nonce}" )
- );
-
- if ( is_null( $old_nonce ) ) {
- $return = $wpdb->query(
- $wpdb->prepare(
- "INSERT INTO `$wpdb->options` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, %s)",
- "jetpack_nonce_{$timestamp}_{$nonce}",
- time(),
- 'no'
- )
- );
- } else {
- $return = false;
- }
-
- $wpdb->show_errors( $show_errors );
-
- $nonces_used_this_request["$timestamp:$nonce"] = $return;
-
- return $return;
- }
-
- /**
- * In some setups, $HTTP_RAW_POST_DATA can be emptied during some IXR_Server paths since it is passed by reference to various methods.
- * Capture it here so we can verify the signature later.
- */
- function xmlrpc_methods( $methods ) {
- $this->HTTP_RAW_POST_DATA = $GLOBALS['HTTP_RAW_POST_DATA'];
- return $methods;
- }
-
- function public_xmlrpc_methods( $methods ) {
- if ( array_key_exists( 'wp.getOptions', $methods ) ) {
- $methods['wp.getOptions'] = array( $this, 'jetpack_getOptions' );
- }
- return $methods;
- }
-
- function jetpack_getOptions( $args ) {
- global $wp_xmlrpc_server;
-
- $wp_xmlrpc_server->escape( $args );
-
- $username = $args[1];
- $password = $args[2];
-
- if ( !$user = $wp_xmlrpc_server->login($username, $password) ) {
- return $wp_xmlrpc_server->error;
- }
-
- $options = array();
- $user_data = $this->get_connected_user_data();
- if ( is_array( $user_data ) ) {
- $options['jetpack_user_id'] = array(
- 'desc' => __( 'The WP.com user ID of the connected user', 'jetpack' ),
- 'readonly' => true,
- 'value' => $user_data['ID'],
- );
- $options['jetpack_user_login'] = array(
- 'desc' => __( 'The WP.com username of the connected user', 'jetpack' ),
- 'readonly' => true,
- 'value' => $user_data['login'],
- );
- $options['jetpack_user_email'] = array(
- 'desc' => __( 'The WP.com user email of the connected user', 'jetpack' ),
- 'readonly' => true,
- 'value' => $user_data['email'],
- );
- $options['jetpack_user_site_count'] = array(
- 'desc' => __( 'The number of sites of the connected WP.com user', 'jetpack' ),
- 'readonly' => true,
- 'value' => $user_data['site_count'],
- );
- }
- $wp_xmlrpc_server->blog_options = array_merge( $wp_xmlrpc_server->blog_options, $options );
- $args = stripslashes_deep( $args );
- return $wp_xmlrpc_server->wp_getOptions( $args );
- }
-
- function xmlrpc_options( $options ) {
- $jetpack_client_id = false;
- if ( self::is_active() ) {
- $jetpack_client_id = Jetpack_Options::get_option( 'id' );
- }
- $options['jetpack_version'] = array(
- 'desc' => __( 'Jetpack Plugin Version', 'jetpack' ),
- 'readonly' => true,
- 'value' => JETPACK__VERSION,
- );
-
- $options['jetpack_client_id'] = array(
- 'desc' => __( 'The Client ID/WP.com Blog ID of this site', 'jetpack' ),
- 'readonly' => true,
- 'value' => $jetpack_client_id,
- );
- return $options;
- }
-
- public static function clean_nonces( $all = false ) {
- global $wpdb;
-
- $sql = "DELETE FROM `$wpdb->options` WHERE `option_name` LIKE %s";
- $sql_args = array( $wpdb->esc_like( 'jetpack_nonce_' ) . '%' );
-
- if ( true !== $all ) {
- $sql .= ' AND CAST( `option_value` AS UNSIGNED ) < %d';
- $sql_args[] = time() - 3600;
- }
-
- $sql .= ' ORDER BY `option_id` LIMIT 100';
-
- $sql = $wpdb->prepare( $sql, $sql_args );
-
- for ( $i = 0; $i < 1000; $i++ ) {
- if ( ! $wpdb->query( $sql ) ) {
- break;
- }
- }
- }
-
- /**
- * State is passed via cookies from one request to the next, but never to subsequent requests.
- * SET: state( $key, $value );
- * GET: $value = state( $key );
- *
- * @param string $key
- * @param string $value
- * @param bool $restate private
- */
- public static function state( $key = null, $value = null, $restate = false ) {
- static $state = array();
- static $path, $domain;
- if ( ! isset( $path ) ) {
- require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
- $admin_url = Jetpack::admin_url();
- $bits = wp_parse_url( $admin_url );
-
- if ( is_array( $bits ) ) {
- $path = ( isset( $bits['path'] ) ) ? dirname( $bits['path'] ) : null;
- $domain = ( isset( $bits['host'] ) ) ? $bits['host'] : null;
- } else {
- $path = $domain = null;
- }
- }
-
- // Extract state from cookies and delete cookies
- if ( isset( $_COOKIE[ 'jetpackState' ] ) && is_array( $_COOKIE[ 'jetpackState' ] ) ) {
- $yum = $_COOKIE[ 'jetpackState' ];
- unset( $_COOKIE[ 'jetpackState' ] );
- foreach ( $yum as $k => $v ) {
- if ( strlen( $v ) )
- $state[ $k ] = $v;
- setcookie( "jetpackState[$k]", false, 0, $path, $domain );
- }
- }
-
- if ( $restate ) {
- foreach ( $state as $k => $v ) {
- setcookie( "jetpackState[$k]", $v, 0, $path, $domain );
- }
- return;
- }
-
- // Get a state variable
- if ( isset( $key ) && ! isset( $value ) ) {
- if ( array_key_exists( $key, $state ) )
- return $state[ $key ];
- return null;
- }
-
- // Set a state variable
- if ( isset ( $key ) && isset( $value ) ) {
- if( is_array( $value ) && isset( $value[0] ) ) {
- $value = $value[0];
- }
- $state[ $key ] = $value;
- setcookie( "jetpackState[$key]", $value, 0, $path, $domain );
- }
- }
-
- public static function restate() {
- Jetpack::state( null, null, true );
- }
-
- public static function check_privacy( $file ) {
- static $is_site_publicly_accessible = null;
-
- if ( is_null( $is_site_publicly_accessible ) ) {
- $is_site_publicly_accessible = false;
-
- Jetpack::load_xml_rpc_client();
- $rpc = new Jetpack_IXR_Client();
-
- $success = $rpc->query( 'jetpack.isSitePubliclyAccessible', home_url() );
- if ( $success ) {
- $response = $rpc->getResponse();
- if ( $response ) {
- $is_site_publicly_accessible = true;
- }
- }
-
- Jetpack_Options::update_option( 'public', (int) $is_site_publicly_accessible );
- }
-
- if ( $is_site_publicly_accessible ) {
- return;
- }
-
- $module_slug = self::get_module_slug( $file );
-
- $privacy_checks = Jetpack::state( 'privacy_checks' );
- if ( ! $privacy_checks ) {
- $privacy_checks = $module_slug;
- } else {
- $privacy_checks .= ",$module_slug";
- }
-
- Jetpack::state( 'privacy_checks', $privacy_checks );
- }
-
- /**
- * Helper method for multicall XMLRPC.
- */
- public static function xmlrpc_async_call() {
- global $blog_id;
- static $clients = array();
-
- $client_blog_id = is_multisite() ? $blog_id : 0;
-
- if ( ! isset( $clients[$client_blog_id] ) ) {
- Jetpack::load_xml_rpc_client();
- $clients[$client_blog_id] = new Jetpack_IXR_ClientMulticall( array( 'user_id' => JETPACK_MASTER_USER, ) );
- if ( function_exists( 'ignore_user_abort' ) ) {
- ignore_user_abort( true );
- }
- add_action( 'shutdown', array( 'Jetpack', 'xmlrpc_async_call' ) );
- }
-
- $args = func_get_args();
-
- if ( ! empty( $args[0] ) ) {
- call_user_func_array( array( $clients[$client_blog_id], 'addCall' ), $args );
- } elseif ( is_multisite() ) {
- foreach ( $clients as $client_blog_id => $client ) {
- if ( ! $client_blog_id || empty( $client->calls ) ) {
- continue;
- }
-
- $switch_success = switch_to_blog( $client_blog_id, true );
- if ( ! $switch_success ) {
- continue;
- }
-
- flush();
- $client->query();
-
- restore_current_blog();
- }
- } else {
- if ( isset( $clients[0] ) && ! empty( $clients[0]->calls ) ) {
- flush();
- $clients[0]->query();
- }
- }
- }
-
- public static function staticize_subdomain( $url ) {
-
- // Extract hostname from URL
- $host = parse_url( $url, PHP_URL_HOST );
-
- // Explode hostname on '.'
- $exploded_host = explode( '.', $host );
-
- // Retrieve the name and TLD
- if ( count( $exploded_host ) > 1 ) {
- $name = $exploded_host[ count( $exploded_host ) - 2 ];
- $tld = $exploded_host[ count( $exploded_host ) - 1 ];
- // Rebuild domain excluding subdomains
- $domain = $name . '.' . $tld;
- } else {
- $domain = $host;
- }
- // Array of Automattic domains
- $domain_whitelist = array( 'wordpress.com', 'wp.com' );
-
- // Return $url if not an Automattic domain
- if ( ! in_array( $domain, $domain_whitelist ) ) {
- return $url;
- }
-
- if ( is_ssl() ) {
- return preg_replace( '|https?://[^/]++/|', 'https://s-ssl.wordpress.com/', $url );
- }
-
- srand( crc32( basename( $url ) ) );
- $static_counter = rand( 0, 2 );
- srand(); // this resets everything that relies on this, like array_rand() and shuffle()
-
- return preg_replace( '|://[^/]+?/|', "://s$static_counter.wp.com/", $url );
- }
-
-/* JSON API Authorization */
-
- /**
- * Handles the login action for Authorizing the JSON API
- */
- function login_form_json_api_authorization() {
- $this->verify_json_api_authorization_request();
-
- add_action( 'wp_login', array( &$this, 'store_json_api_authorization_token' ), 10, 2 );
-
- add_action( 'login_message', array( &$this, 'login_message_json_api_authorization' ) );
- add_action( 'login_form', array( &$this, 'preserve_action_in_login_form_for_json_api_authorization' ) );
- add_filter( 'site_url', array( &$this, 'post_login_form_to_signed_url' ), 10, 3 );
- }
-
- // Make sure the login form is POSTed to the signed URL so we can reverify the request
- function post_login_form_to_signed_url( $url, $path, $scheme ) {
- if ( 'wp-login.php' !== $path || ( 'login_post' !== $scheme && 'login' !== $scheme ) ) {
- return $url;
- }
-
- $parsed_url = parse_url( $url );
- $url = strtok( $url, '?' );
- $url = "$url?{$_SERVER['QUERY_STRING']}";
- if ( ! empty( $parsed_url['query'] ) )
- $url .= "&{$parsed_url['query']}";
-
- return $url;
- }
-
- // Make sure the POSTed request is handled by the same action
- function preserve_action_in_login_form_for_json_api_authorization() {
- echo "<input type='hidden' name='action' value='jetpack_json_api_authorization' />\n";
- echo "<input type='hidden' name='jetpack_json_api_original_query' value='" . esc_url( set_url_scheme( $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ) ) . "' />\n";
- }
-
- // If someone logs in to approve API access, store the Access Code in usermeta
- function store_json_api_authorization_token( $user_login, $user ) {
- add_filter( 'login_redirect', array( &$this, 'add_token_to_login_redirect_json_api_authorization' ), 10, 3 );
- add_filter( 'allowed_redirect_hosts', array( &$this, 'allow_wpcom_public_api_domain' ) );
- $token = wp_generate_password( 32, false );
- update_user_meta( $user->ID, 'jetpack_json_api_' . $this->json_api_authorization_request['client_id'], $token );
- }
-
- // Add public-api.wordpress.com to the safe redirect whitelist - only added when someone allows API access
- function allow_wpcom_public_api_domain( $domains ) {
- $domains[] = 'public-api.wordpress.com';
- return $domains;
- }
-
- static function is_redirect_encoded( $redirect_url ) {
- return preg_match( '/https?%3A%2F%2F/i', $redirect_url ) > 0;
- }
-
- // Add all wordpress.com environments to the safe redirect whitelist
- function allow_wpcom_environments( $domains ) {
- $domains[] = 'wordpress.com';
- $domains[] = 'wpcalypso.wordpress.com';
- $domains[] = 'horizon.wordpress.com';
- $domains[] = 'calypso.localhost';
- return $domains;
- }
-
- // Add the Access Code details to the public-api.wordpress.com redirect
- function add_token_to_login_redirect_json_api_authorization( $redirect_to, $original_redirect_to, $user ) {
- return add_query_arg(
- urlencode_deep(
- array(
- 'jetpack-code' => get_user_meta( $user->ID, 'jetpack_json_api_' . $this->json_api_authorization_request['client_id'], true ),
- 'jetpack-user-id' => (int) $user->ID,
- 'jetpack-state' => $this->json_api_authorization_request['state'],
- )
- ),
- $redirect_to
- );
- }
-
-
- /**
- * Verifies the request by checking the signature
- *
- * @since 4.6.0 Method was updated to use `$_REQUEST` instead of `$_GET` and `$_POST`. Method also updated to allow
- * passing in an `$environment` argument that overrides `$_REQUEST`. This was useful for integrating with SSO.
- *
- * @param null|array $environment
- */
- function verify_json_api_authorization_request( $environment = null ) {
- require_once JETPACK__PLUGIN_DIR . 'class.jetpack-signature.php';
-
- $environment = is_null( $environment )
- ? $_REQUEST
- : $environment;
-
- list( $envToken, $envVersion, $envUserId ) = explode( ':', $environment['token'] );
- $token = Jetpack_Data::get_access_token( $envUserId );
- if ( ! $token || empty( $token->secret ) ) {
- wp_die( __( 'You must connect your Jetpack plugin to WordPress.com to use this feature.' , 'jetpack' ) );
- }
-
- $die_error = __( 'Someone may be trying to trick you into giving them access to your site. Or it could be you just encountered a bug :). Either way, please close this window.', 'jetpack' );
-
- // Host has encoded the request URL, probably as a result of a bad http => https redirect
- if ( Jetpack::is_redirect_encoded( $_GET['redirect_to'] ) ) {
- JetpackTracking::record_user_event( 'error_double_encode' );
-
- $die_error = sprintf(
- /* translators: %s is a URL */
- __( 'Your site is incorrectly double-encoding redirects from http to https. This is preventing Jetpack from authenticating your connection. Please visit our <a href="%s">support page</a> for details about how to resolve this.', 'jetpack' ),
- 'https://jetpack.com/support/double-encoding/'
- );
- }
-
- $jetpack_signature = new Jetpack_Signature( $token->secret, (int) Jetpack_Options::get_option( 'time_diff' ) );
-
- if ( isset( $environment['jetpack_json_api_original_query'] ) ) {
- $signature = $jetpack_signature->sign_request(
- $environment['token'],
- $environment['timestamp'],
- $environment['nonce'],
- '',
- 'GET',
- $environment['jetpack_json_api_original_query'],
- null,
- true
- );
- } else {
- $signature = $jetpack_signature->sign_current_request( array( 'body' => null, 'method' => 'GET' ) );
- }
-
- if ( ! $signature ) {
- wp_die( $die_error );
- } else if ( is_wp_error( $signature ) ) {
- wp_die( $die_error );
- } else if ( ! hash_equals( $signature, $environment['signature'] ) ) {
- if ( is_ssl() ) {
- // If we signed an HTTP request on the Jetpack Servers, but got redirected to HTTPS by the local blog, check the HTTP signature as well
- $signature = $jetpack_signature->sign_current_request( array( 'scheme' => 'http', 'body' => null, 'method' => 'GET' ) );
- if ( ! $signature || is_wp_error( $signature ) || ! hash_equals( $signature, $environment['signature'] ) ) {
- wp_die( $die_error );
- }
- } else {
- wp_die( $die_error );
- }
- }
-
- $timestamp = (int) $environment['timestamp'];
- $nonce = stripslashes( (string) $environment['nonce'] );
-
- if ( ! $this->add_nonce( $timestamp, $nonce ) ) {
- // De-nonce the nonce, at least for 5 minutes.
- // We have to reuse this nonce at least once (used the first time when the initial request is made, used a second time when the login form is POSTed)
- $old_nonce_time = get_option( "jetpack_nonce_{$timestamp}_{$nonce}" );
- if ( $old_nonce_time < time() - 300 ) {
- wp_die( __( 'The authorization process expired. Please go back and try again.' , 'jetpack' ) );
- }
- }
-
- $data = json_decode( base64_decode( stripslashes( $environment['data'] ) ) );
- $data_filters = array(
- 'state' => 'opaque',
- 'client_id' => 'int',
- 'client_title' => 'string',
- 'client_image' => 'url',
- );
-
- foreach ( $data_filters as $key => $sanitation ) {
- if ( ! isset( $data->$key ) ) {
- wp_die( $die_error );
- }
-
- switch ( $sanitation ) {
- case 'int' :
- $this->json_api_authorization_request[$key] = (int) $data->$key;
- break;
- case 'opaque' :
- $this->json_api_authorization_request[$key] = (string) $data->$key;
- break;
- case 'string' :
- $this->json_api_authorization_request[$key] = wp_kses( (string) $data->$key, array() );
- break;
- case 'url' :
- $this->json_api_authorization_request[$key] = esc_url_raw( (string) $data->$key );
- break;
- }
- }
-
- if ( empty( $this->json_api_authorization_request['client_id'] ) ) {
- wp_die( $die_error );
- }
- }
-
- function login_message_json_api_authorization( $message ) {
- return '<p class="message">' . sprintf(
- esc_html__( '%s wants to access your site&#8217;s data. Log in to authorize that access.' , 'jetpack' ),
- '<strong>' . esc_html( $this->json_api_authorization_request['client_title'] ) . '</strong>'
- ) . '<img src="' . esc_url( $this->json_api_authorization_request['client_image'] ) . '" /></p>';
- }
-
- /**
- * Get $content_width, but with a <s>twist</s> filter.
- */
- public static function get_content_width() {
- $content_width = isset( $GLOBALS['content_width'] ) ? $GLOBALS['content_width'] : false;
- /**
- * Filter the Content Width value.
- *
- * @since 2.2.3
- *
- * @param string $content_width Content Width value.
- */
- return apply_filters( 'jetpack_content_width', $content_width );
- }
-
- /**
- * Pings the WordPress.com Mirror Site for the specified options.
- *
- * @param string|array $option_names The option names to request from the WordPress.com Mirror Site
- *
- * @return array An associative array of the option values as stored in the WordPress.com Mirror Site
- */
- public function get_cloud_site_options( $option_names ) {
- $option_names = array_filter( (array) $option_names, 'is_string' );
-
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client( array( 'user_id' => JETPACK_MASTER_USER, ) );
- $xml->query( 'jetpack.fetchSiteOptions', $option_names );
- if ( $xml->isError() ) {
- return array(
- 'error_code' => $xml->getErrorCode(),
- 'error_msg' => $xml->getErrorMessage(),
- );
- }
- $cloud_site_options = $xml->getResponse();
-
- return $cloud_site_options;
- }
-
- /**
- * Checks if the site is currently in an identity crisis.
- *
- * @return array|bool Array of options that are in a crisis, or false if everything is OK.
- */
- public static function check_identity_crisis() {
- if ( ! Jetpack::is_active() || Jetpack::is_development_mode() || ! self::validate_sync_error_idc_option() ) {
- return false;
- }
-
- return Jetpack_Options::get_option( 'sync_error_idc' );
- }
-
- /**
- * Checks whether the home and siteurl specifically are whitelisted
- * Written so that we don't have re-check $key and $value params every time
- * we want to check if this site is whitelisted, for example in footer.php
- *
- * @since 3.8.0
- * @return bool True = already whitelisted False = not whitelisted
- */
- public static function is_staging_site() {
- $is_staging = false;
-
- $known_staging = array(
- 'urls' => array(
- '#\.staging\.wpengine\.com$#i', // WP Engine
- '#\.staging\.kinsta\.com$#i', // Kinsta.com
- ),
- 'constants' => array(
- 'IS_WPE_SNAPSHOT', // WP Engine
- 'KINSTA_DEV_ENV', // Kinsta.com
- 'WPSTAGECOACH_STAGING', // WP Stagecoach
- 'JETPACK_STAGING_MODE', // Generic
- )
- );
- /**
- * Filters the flags of known staging sites.
- *
- * @since 3.9.0
- *
- * @param array $known_staging {
- * An array of arrays that each are used to check if the current site is staging.
- * @type array $urls URLs of staging sites in regex to check against site_url.
- * @type array $constants PHP constants of known staging/developement environments.
- * }
- */
- $known_staging = apply_filters( 'jetpack_known_staging', $known_staging );
-
- if ( isset( $known_staging['urls'] ) ) {
- foreach ( $known_staging['urls'] as $url ){
- if ( preg_match( $url, site_url() ) ) {
- $is_staging = true;
- break;
- }
- }
- }
-
- if ( isset( $known_staging['constants'] ) ) {
- foreach ( $known_staging['constants'] as $constant ) {
- if ( defined( $constant ) && constant( $constant ) ) {
- $is_staging = true;
- }
- }
- }
-
- // Last, let's check if sync is erroring due to an IDC. If so, set the site to staging mode.
- if ( ! $is_staging && self::validate_sync_error_idc_option() ) {
- $is_staging = true;
- }
-
- /**
- * Filters is_staging_site check.
- *
- * @since 3.9.0
- *
- * @param bool $is_staging If the current site is a staging site.
- */
- return apply_filters( 'jetpack_is_staging_site', $is_staging );
- }
-
- /**
- * Checks whether the sync_error_idc option is valid or not, and if not, will do cleanup.
- *
- * @since 4.4.0
- * @since 5.4.0 Do not call get_sync_error_idc_option() unless site is in IDC
- *
- * @return bool
- */
- public static function validate_sync_error_idc_option() {
- $is_valid = false;
-
- $idc_allowed = get_transient( 'jetpack_idc_allowed' );
- if ( false === $idc_allowed ) {
- $response = wp_remote_get( 'https://jetpack.com/is-idc-allowed/' );
- if ( 200 === (int) wp_remote_retrieve_response_code( $response ) ) {
- $json = json_decode( wp_remote_retrieve_body( $response ) );
- $idc_allowed = isset( $json, $json->result ) && $json->result ? '1' : '0';
- $transient_duration = HOUR_IN_SECONDS;
- } else {
- // If the request failed for some reason, then assume IDC is allowed and set shorter transient.
- $idc_allowed = '1';
- $transient_duration = 5 * MINUTE_IN_SECONDS;
- }
-
- set_transient( 'jetpack_idc_allowed', $idc_allowed, $transient_duration );
- }
-
- // Is the site opted in and does the stored sync_error_idc option match what we now generate?
- $sync_error = Jetpack_Options::get_option( 'sync_error_idc' );
- if ( $idc_allowed && $sync_error && self::sync_idc_optin() ) {
- $local_options = self::get_sync_error_idc_option();
- if ( $sync_error['home'] === $local_options['home'] && $sync_error['siteurl'] === $local_options['siteurl'] ) {
- $is_valid = true;
- }
- }
-
- /**
- * Filters whether the sync_error_idc option is valid.
- *
- * @since 4.4.0
- *
- * @param bool $is_valid If the sync_error_idc is valid or not.
- */
- $is_valid = (bool) apply_filters( 'jetpack_sync_error_idc_validation', $is_valid );
-
- if ( ! $idc_allowed || ( ! $is_valid && $sync_error ) ) {
- // Since the option exists, and did not validate, delete it
- Jetpack_Options::delete_option( 'sync_error_idc' );
- }
-
- return $is_valid;
- }
-
- /**
- * Normalizes a url by doing three things:
- * - Strips protocol
- * - Strips www
- * - Adds a trailing slash
- *
- * @since 4.4.0
- * @param string $url
- * @return WP_Error|string
- */
- public static function normalize_url_protocol_agnostic( $url ) {
- $parsed_url = wp_parse_url( trailingslashit( esc_url_raw( $url ) ) );
- if ( ! $parsed_url || empty( $parsed_url['host'] ) || empty( $parsed_url['path'] ) ) {
- return new WP_Error( 'cannot_parse_url', sprintf( esc_html__( 'Cannot parse URL %s', 'jetpack' ), $url ) );
- }
-
- // Strip www and protocols
- $url = preg_replace( '/^www\./i', '', $parsed_url['host'] . $parsed_url['path'] );
- return $url;
- }
-
- /**
- * Gets the value that is to be saved in the jetpack_sync_error_idc option.
- *
- * @since 4.4.0
- * @since 5.4.0 Add transient since home/siteurl retrieved directly from DB
- *
- * @param array $response
- * @return array Array of the local urls, wpcom urls, and error code
- */
- public static function get_sync_error_idc_option( $response = array() ) {
- // Since the local options will hit the database directly, store the values
- // in a transient to allow for autoloading and caching on subsequent views.
- $local_options = get_transient( 'jetpack_idc_local' );
- if ( false === $local_options ) {
- require_once JETPACK__PLUGIN_DIR . 'sync/class.jetpack-sync-functions.php';
- $local_options = array(
- 'home' => Jetpack_Sync_Functions::home_url(),
- 'siteurl' => Jetpack_Sync_Functions::site_url(),
- );
- set_transient( 'jetpack_idc_local', $local_options, MINUTE_IN_SECONDS );
- }
-
- $options = array_merge( $local_options, $response );
-
- $returned_values = array();
- foreach( $options as $key => $option ) {
- if ( 'error_code' === $key ) {
- $returned_values[ $key ] = $option;
- continue;
- }
-
- if ( is_wp_error( $normalized_url = self::normalize_url_protocol_agnostic( $option ) ) ) {
- continue;
- }
-
- $returned_values[ $key ] = $normalized_url;
- }
-
- set_transient( 'jetpack_idc_option', $returned_values, MINUTE_IN_SECONDS );
-
- return $returned_values;
- }
-
- /**
- * Returns the value of the jetpack_sync_idc_optin filter, or constant.
- * If set to true, the site will be put into staging mode.
- *
- * @since 4.3.2
- * @return bool
- */
- public static function sync_idc_optin() {
- if ( Jetpack_Constants::is_defined( 'JETPACK_SYNC_IDC_OPTIN' ) ) {
- $default = Jetpack_Constants::get_constant( 'JETPACK_SYNC_IDC_OPTIN' );
- } else {
- $default = ! Jetpack_Constants::is_defined( 'SUNRISE' ) && ! is_multisite();
- }
-
- /**
- * Allows sites to optin to IDC mitigation which blocks the site from syncing to WordPress.com when the home
- * URL or site URL do not match what WordPress.com expects. The default value is either false, or the value of
- * JETPACK_SYNC_IDC_OPTIN constant if set.
- *
- * @since 4.3.2
- *
- * @param bool $default Whether the site is opted in to IDC mitigation.
- */
- return (bool) apply_filters( 'jetpack_sync_idc_optin', $default );
- }
-
- /**
- * Maybe Use a .min.css stylesheet, maybe not.
- *
- * Hooks onto `plugins_url` filter at priority 1, and accepts all 3 args.
- */
- public static function maybe_min_asset( $url, $path, $plugin ) {
- // Short out on things trying to find actual paths.
- if ( ! $path || empty( $plugin ) ) {
- return $url;
- }
-
- $path = ltrim( $path, '/' );
-
- // Strip out the abspath.
- $base = dirname( plugin_basename( $plugin ) );
-
- // Short out on non-Jetpack assets.
- if ( 'jetpack/' !== substr( $base, 0, 8 ) ) {
- return $url;
- }
-
- // File name parsing.
- $file = "{$base}/{$path}";
- $full_path = JETPACK__PLUGIN_DIR . substr( $file, 8 );
- $file_name = substr( $full_path, strrpos( $full_path, '/' ) + 1 );
- $file_name_parts_r = array_reverse( explode( '.', $file_name ) );
- $extension = array_shift( $file_name_parts_r );
-
- if ( in_array( strtolower( $extension ), array( 'css', 'js' ) ) ) {
- // Already pointing at the minified version.
- if ( 'min' === $file_name_parts_r[0] ) {
- return $url;
- }
-
- $min_full_path = preg_replace( "#\.{$extension}$#", ".min.{$extension}", $full_path );
- if ( file_exists( $min_full_path ) ) {
- $url = preg_replace( "#\.{$extension}$#", ".min.{$extension}", $url );
- // If it's a CSS file, stash it so we can set the .min suffix for rtl-ing.
- if ( 'css' === $extension ) {
- $key = str_replace( JETPACK__PLUGIN_DIR, 'jetpack/', $min_full_path );
- self::$min_assets[ $key ] = $path;
- }
- }
- }
-
- return $url;
- }
-
- /**
- * If the asset is minified, let's flag .min as the suffix.
- *
- * Attached to `style_loader_src` filter.
- *
- * @param string $tag The tag that would link to the external asset.
- * @param string $handle The registered handle of the script in question.
- * @param string $href The url of the asset in question.
- */
- public static function set_suffix_on_min( $src, $handle ) {
- if ( false === strpos( $src, '.min.css' ) ) {
- return $src;
- }
-
- if ( ! empty( self::$min_assets ) ) {
- foreach ( self::$min_assets as $file => $path ) {
- if ( false !== strpos( $src, $file ) ) {
- wp_style_add_data( $handle, 'suffix', '.min' );
- return $src;
- }
- }
- }
-
- return $src;
- }
-
- /**
- * Maybe inlines a stylesheet.
- *
- * If you'd like to inline a stylesheet instead of printing a link to it,
- * wp_style_add_data( 'handle', 'jetpack-inline', true );
- *
- * Attached to `style_loader_tag` filter.
- *
- * @param string $tag The tag that would link to the external asset.
- * @param string $handle The registered handle of the script in question.
- *
- * @return string
- */
- public static function maybe_inline_style( $tag, $handle ) {
- global $wp_styles;
- $item = $wp_styles->registered[ $handle ];
-
- if ( ! isset( $item->extra['jetpack-inline'] ) || ! $item->extra['jetpack-inline'] ) {
- return $tag;
- }
-
- if ( preg_match( '# href=\'([^\']+)\' #i', $tag, $matches ) ) {
- $href = $matches[1];
- // Strip off query string
- if ( $pos = strpos( $href, '?' ) ) {
- $href = substr( $href, 0, $pos );
- }
- // Strip off fragment
- if ( $pos = strpos( $href, '#' ) ) {
- $href = substr( $href, 0, $pos );
- }
- } else {
- return $tag;
- }
-
- $plugins_dir = plugin_dir_url( JETPACK__PLUGIN_FILE );
- if ( $plugins_dir !== substr( $href, 0, strlen( $plugins_dir ) ) ) {
- return $tag;
- }
-
- // If this stylesheet has a RTL version, and the RTL version replaces normal...
- if ( isset( $item->extra['rtl'] ) && 'replace' === $item->extra['rtl'] && is_rtl() ) {
- // And this isn't the pass that actually deals with the RTL version...
- if ( false === strpos( $tag, " id='$handle-rtl-css' " ) ) {
- // Short out, as the RTL version will deal with it in a moment.
- return $tag;
- }
- }
-
- $file = JETPACK__PLUGIN_DIR . substr( $href, strlen( $plugins_dir ) );
- $css = Jetpack::absolutize_css_urls( file_get_contents( $file ), $href );
- if ( $css ) {
- $tag = "<!-- Inline {$item->handle} -->\r\n";
- if ( empty( $item->extra['after'] ) ) {
- wp_add_inline_style( $handle, $css );
- } else {
- array_unshift( $item->extra['after'], $css );
- wp_style_add_data( $handle, 'after', $item->extra['after'] );
- }
- }
-
- return $tag;
- }
-
- /**
- * Loads a view file from the views
- *
- * Data passed in with the $data parameter will be available in the
- * template file as $data['value']
- *
- * @param string $template - Template file to load
- * @param array $data - Any data to pass along to the template
- * @return boolean - If template file was found
- **/
- public function load_view( $template, $data = array() ) {
- $views_dir = JETPACK__PLUGIN_DIR . 'views/';
-
- if( file_exists( $views_dir . $template ) ) {
- require_once( $views_dir . $template );
- return true;
- }
-
- error_log( "Jetpack: Unable to find view file $views_dir$template" );
- return false;
- }
-
- /**
- * Throws warnings for deprecated hooks to be removed from Jetpack
- */
- public function deprecated_hooks() {
- global $wp_filter;
-
- /*
- * Format:
- * deprecated_filter_name => replacement_name
- *
- * If there is no replacement, use null for replacement_name
- */
- $deprecated_list = array(
- 'jetpack_bail_on_shortcode' => 'jetpack_shortcodes_to_include',
- 'wpl_sharing_2014_1' => null,
- 'jetpack-tools-to-include' => 'jetpack_tools_to_include',
- 'jetpack_identity_crisis_options_to_check' => null,
- 'update_option_jetpack_single_user_site' => null,
- 'audio_player_default_colors' => null,
- 'add_option_jetpack_featured_images_enabled' => null,
- 'add_option_jetpack_update_details' => null,
- 'add_option_jetpack_updates' => null,
- 'add_option_jetpack_network_name' => null,
- 'add_option_jetpack_network_allow_new_registrations' => null,
- 'add_option_jetpack_network_add_new_users' => null,
- 'add_option_jetpack_network_site_upload_space' => null,
- 'add_option_jetpack_network_upload_file_types' => null,
- 'add_option_jetpack_network_enable_administration_menus' => null,
- 'add_option_jetpack_is_multi_site' => null,
- 'add_option_jetpack_is_main_network' => null,
- 'add_option_jetpack_main_network_site' => null,
- 'jetpack_sync_all_registered_options' => null,
- 'jetpack_has_identity_crisis' => 'jetpack_sync_error_idc_validation',
- 'jetpack_is_post_mailable' => null,
- 'jetpack_seo_site_host' => null,
- 'jetpack_installed_plugin' => 'jetpack_plugin_installed',
- 'jetpack_holiday_snow_option_name' => null,
- 'jetpack_holiday_chance_of_snow' => null,
- 'jetpack_holiday_snow_js_url' => null,
- 'jetpack_is_holiday_snow_season' => null,
- 'jetpack_holiday_snow_option_updated' => null,
- 'jetpack_holiday_snowing' => null,
- 'jetpack_sso_auth_cookie_expirtation' => 'jetpack_sso_auth_cookie_expiration',
- 'jetpack_cache_plans' => null,
- 'jetpack_updated_theme' => 'jetpack_updated_themes',
- 'jetpack_lazy_images_skip_image_with_atttributes' => 'jetpack_lazy_images_skip_image_with_attributes',
- 'jetpack_enable_site_verification' => null,
- );
-
- // This is a silly loop depth. Better way?
- foreach( $deprecated_list AS $hook => $hook_alt ) {
- if ( has_action( $hook ) ) {
- foreach( $wp_filter[ $hook ] AS $func => $values ) {
- foreach( $values AS $hooked ) {
- if ( is_callable( $hooked['function'] ) ) {
- $function_name = 'an anonymous function';
- } else {
- $function_name = $hooked['function'];
- }
- _deprecated_function( $hook . ' used for ' . $function_name, null, $hook_alt );
- }
- }
- }
- }
- }
-
- /**
- * Converts any url in a stylesheet, to the correct absolute url.
- *
- * Considerations:
- * - Normal, relative URLs `feh.png`
- * - Data URLs `data:image/gif;base64,eh129ehiuehjdhsa==`
- * - Schema-agnostic URLs `//domain.com/feh.png`
- * - Absolute URLs `http://domain.com/feh.png`
- * - Domain root relative URLs `/feh.png`
- *
- * @param $css string: The raw CSS -- should be read in directly from the file.
- * @param $css_file_url : The URL that the file can be accessed at, for calculating paths from.
- *
- * @return mixed|string
- */
- public static function absolutize_css_urls( $css, $css_file_url ) {
- $pattern = '#url\((?P<path>[^)]*)\)#i';
- $css_dir = dirname( $css_file_url );
- $p = parse_url( $css_dir );
- $domain = sprintf(
- '%1$s//%2$s%3$s%4$s',
- isset( $p['scheme'] ) ? "{$p['scheme']}:" : '',
- isset( $p['user'], $p['pass'] ) ? "{$p['user']}:{$p['pass']}@" : '',
- $p['host'],
- isset( $p['port'] ) ? ":{$p['port']}" : ''
- );
-
- if ( preg_match_all( $pattern, $css, $matches, PREG_SET_ORDER ) ) {
- $find = $replace = array();
- foreach ( $matches as $match ) {
- $url = trim( $match['path'], "'\" \t" );
-
- // If this is a data url, we don't want to mess with it.
- if ( 'data:' === substr( $url, 0, 5 ) ) {
- continue;
- }
-
- // If this is an absolute or protocol-agnostic url,
- // we don't want to mess with it.
- if ( preg_match( '#^(https?:)?//#i', $url ) ) {
- continue;
- }
-
- switch ( substr( $url, 0, 1 ) ) {
- case '/':
- $absolute = $domain . $url;
- break;
- default:
- $absolute = $css_dir . '/' . $url;
- }
-
- $find[] = $match[0];
- $replace[] = sprintf( 'url("%s")', $absolute );
- }
- $css = str_replace( $find, $replace, $css );
- }
-
- return $css;
- }
-
- /**
- * This methods removes all of the registered css files on the front end
- * from Jetpack in favor of using a single file. In effect "imploding"
- * all the files into one file.
- *
- * Pros:
- * - Uses only ONE css asset connection instead of 15
- * - Saves a minimum of 56k
- * - Reduces server load
- * - Reduces time to first painted byte
- *
- * Cons:
- * - Loads css for ALL modules. However all selectors are prefixed so it
- * should not cause any issues with themes.
- * - Plugins/themes dequeuing styles no longer do anything. See
- * jetpack_implode_frontend_css filter for a workaround
- *
- * For some situations developers may wish to disable css imploding and
- * instead operate in legacy mode where each file loads seperately and
- * can be edited individually or dequeued. This can be accomplished with
- * the following line:
- *
- * add_filter( 'jetpack_implode_frontend_css', '__return_false' );
- *
- * @since 3.2
- **/
- public function implode_frontend_css( $travis_test = false ) {
- $do_implode = true;
- if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) {
- $do_implode = false;
- }
-
- // Do not implode CSS when the page loads via the AMP plugin.
- if ( Jetpack_AMP_Support::is_amp_request() ) {
- $do_implode = false;
- }
-
- /**
- * Allow CSS to be concatenated into a single jetpack.css file.
- *
- * @since 3.2.0
- *
- * @param bool $do_implode Should CSS be concatenated? Default to true.
- */
- $do_implode = apply_filters( 'jetpack_implode_frontend_css', $do_implode );
-
- // Do not use the imploded file when default behavior was altered through the filter
- if ( ! $do_implode ) {
- return;
- }
-
- // We do not want to use the imploded file in dev mode, or if not connected
- if ( Jetpack::is_development_mode() || ! self::is_active() ) {
- if ( ! $travis_test ) {
- return;
- }
- }
-
- // Do not use the imploded file if sharing css was dequeued via the sharing settings screen
- if ( get_option( 'sharedaddy_disable_resources' ) ) {
- return;
- }
-
- /*
- * Now we assume Jetpack is connected and able to serve the single
- * file.
- *
- * In the future there will be a check here to serve the file locally
- * or potentially from the Jetpack CDN
- *
- * For now:
- * - Enqueue a single imploded css file
- * - Zero out the style_loader_tag for the bundled ones
- * - Be happy, drink scotch
- */
-
- add_filter( 'style_loader_tag', array( $this, 'concat_remove_style_loader_tag' ), 10, 2 );
-
- $version = Jetpack::is_development_version() ? filemtime( JETPACK__PLUGIN_DIR . 'css/jetpack.css' ) : JETPACK__VERSION;
-
- wp_enqueue_style( 'jetpack_css', plugins_url( 'css/jetpack.css', __FILE__ ), array(), $version );
- wp_style_add_data( 'jetpack_css', 'rtl', 'replace' );
- }
-
- function concat_remove_style_loader_tag( $tag, $handle ) {
- if ( in_array( $handle, $this->concatenated_style_handles ) ) {
- $tag = '';
- if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
- $tag = "<!-- `" . esc_html( $handle ) . "` is included in the concatenated jetpack.css -->\r\n";
- }
- }
-
- return $tag;
- }
-
- /*
- * Check the heartbeat data
- *
- * Organizes the heartbeat data by severity. For example, if the site
- * is in an ID crisis, it will be in the $filtered_data['bad'] array.
- *
- * Data will be added to "caution" array, if it either:
- * - Out of date Jetpack version
- * - Out of date WP version
- * - Out of date PHP version
- *
- * $return array $filtered_data
- */
- public static function jetpack_check_heartbeat_data() {
- $raw_data = Jetpack_Heartbeat::generate_stats_array();
-
- $good = array();
- $caution = array();
- $bad = array();
-
- foreach ( $raw_data as $stat => $value ) {
-
- // Check jetpack version
- if ( 'version' == $stat ) {
- if ( version_compare( $value, JETPACK__VERSION, '<' ) ) {
- $caution[ $stat ] = $value . " - min supported is " . JETPACK__VERSION;
- continue;
- }
- }
-
- // Check WP version
- if ( 'wp-version' == $stat ) {
- if ( version_compare( $value, JETPACK__MINIMUM_WP_VERSION, '<' ) ) {
- $caution[ $stat ] = $value . " - min supported is " . JETPACK__MINIMUM_WP_VERSION;
- continue;
- }
- }
-
- // Check PHP version
- if ( 'php-version' == $stat ) {
- if ( version_compare( PHP_VERSION, '5.2.4', '<' ) ) {
- $caution[ $stat ] = $value . " - min supported is 5.2.4";
- continue;
- }
- }
-
- // Check ID crisis
- if ( 'identitycrisis' == $stat ) {
- if ( 'yes' == $value ) {
- $bad[ $stat ] = $value;
- continue;
- }
- }
-
- // The rest are good :)
- $good[ $stat ] = $value;
- }
-
- $filtered_data = array(
- 'good' => $good,
- 'caution' => $caution,
- 'bad' => $bad
- );
-
- return $filtered_data;
- }
-
-
- /*
- * This method is used to organize all options that can be reset
- * without disconnecting Jetpack.
- *
- * It is used in class.jetpack-cli.php to reset options
- *
- * @since 5.4.0 Logic moved to Jetpack_Options class. Method left in Jetpack class for backwards compat.
- *
- * @return array of options to delete.
- */
- public static function get_jetpack_options_for_reset() {
- return Jetpack_Options::get_options_for_reset();
- }
-
- /**
- * Check if an option of a Jetpack module has been updated.
- *
- * If any module option has been updated before Jump Start has been dismissed,
- * update the 'jumpstart' option so we can hide Jump Start.
- *
- * @param string $option_name
- *
- * @return bool
- */
- public static function jumpstart_has_updated_module_option( $option_name = '' ) {
- // Bail if Jump Start has already been dismissed
- if ( 'new_connection' !== Jetpack_Options::get_option( 'jumpstart' ) ) {
- return false;
- }
-
- $jetpack = Jetpack::init();
-
- // Manual build of module options
- $option_names = self::get_jetpack_options_for_reset();
-
- if ( in_array( $option_name, $option_names['wp_options'] ) ) {
- Jetpack_Options::update_option( 'jumpstart', 'jetpack_action_taken' );
-
- //Jump start is being dismissed send data to MC Stats
- $jetpack->stat( 'jumpstart', 'manual,'.$option_name );
-
- $jetpack->do_stats( 'server_side' );
- }
-
- }
-
- /*
- * Strip http:// or https:// from a url, replaces forward slash with ::,
- * so we can bring them directly to their site in calypso.
- *
- * @param string | url
- * @return string | url without the guff
- */
- public static function build_raw_urls( $url ) {
- $strip_http = '/.*?:\/\//i';
- $url = preg_replace( $strip_http, '', $url );
- $url = str_replace( '/', '::', $url );
- return $url;
- }
-
- /**
- * Stores and prints out domains to prefetch for page speed optimization.
- *
- * @param mixed $new_urls
- */
- public static function dns_prefetch( $new_urls = null ) {
- static $prefetch_urls = array();
- if ( empty( $new_urls ) && ! empty( $prefetch_urls ) ) {
- echo "\r\n";
- foreach ( $prefetch_urls as $this_prefetch_url ) {
- printf( "<link rel='dns-prefetch' href='%s'/>\r\n", esc_attr( $this_prefetch_url ) );
- }
- } elseif ( ! empty( $new_urls ) ) {
- if ( ! has_action( 'wp_head', array( __CLASS__, __FUNCTION__ ) ) ) {
- add_action( 'wp_head', array( __CLASS__, __FUNCTION__ ) );
- }
- foreach ( (array) $new_urls as $this_new_url ) {
- $prefetch_urls[] = strtolower( untrailingslashit( preg_replace( '#^https?://#i', '//', $this_new_url ) ) );
- }
- $prefetch_urls = array_unique( $prefetch_urls );
- }
- }
-
- public function wp_dashboard_setup() {
- if ( self::is_active() ) {
- add_action( 'jetpack_dashboard_widget', array( __CLASS__, 'dashboard_widget_footer' ), 999 );
- }
-
- if ( has_action( 'jetpack_dashboard_widget' ) ) {
- $widget_title = sprintf(
- wp_kses(
- /* translators: Placeholder is a Jetpack logo. */
- __( 'Stats <span>by %s</span>', 'jetpack' ),
- array( 'span' => array() )
- ),
- Jetpack::get_jp_emblem( true )
- );
-
- wp_add_dashboard_widget(
- 'jetpack_summary_widget',
- $widget_title,
- array( __CLASS__, 'dashboard_widget' )
- );
- wp_enqueue_style( 'jetpack-dashboard-widget', plugins_url( 'css/dashboard-widget.css', JETPACK__PLUGIN_FILE ), array(), JETPACK__VERSION );
-
- // If we're inactive and not in development mode, sort our box to the top.
- if ( ! self::is_active() && ! self::is_development_mode() ) {
- global $wp_meta_boxes;
-
- $dashboard = $wp_meta_boxes['dashboard']['normal']['core'];
- $ours = array( 'jetpack_summary_widget' => $dashboard['jetpack_summary_widget'] );
-
- $wp_meta_boxes['dashboard']['normal']['core'] = array_merge( $ours, $dashboard );
- }
- }
- }
-
- /**
- * @param mixed $result Value for the user's option
- * @return mixed
- */
- function get_user_option_meta_box_order_dashboard( $sorted ) {
- if ( ! is_array( $sorted ) ) {
- return $sorted;
- }
-
- foreach ( $sorted as $box_context => $ids ) {
- if ( false === strpos( $ids, 'dashboard_stats' ) ) {
- // If the old id isn't anywhere in the ids, don't bother exploding and fail out.
- continue;
- }
-
- $ids_array = explode( ',', $ids );
- $key = array_search( 'dashboard_stats', $ids_array );
-
- if ( false !== $key ) {
- // If we've found that exact value in the option (and not `google_dashboard_stats` for example)
- $ids_array[ $key ] = 'jetpack_summary_widget';
- $sorted[ $box_context ] = implode( ',', $ids_array );
- // We've found it, stop searching, and just return.
- break;
- }
- }
-
- return $sorted;
- }
-
- public static function dashboard_widget() {
- /**
- * Fires when the dashboard is loaded.
- *
- * @since 3.4.0
- */
- do_action( 'jetpack_dashboard_widget' );
- }
-
- public static function dashboard_widget_footer() {
- ?>
- <footer>
-
- <div class="protect">
- <?php if ( Jetpack::is_module_active( 'protect' ) ) : ?>
- <h3><?php echo number_format_i18n( get_site_option( 'jetpack_protect_blocked_attempts', 0 ) ); ?></h3>
- <p><?php echo esc_html_x( 'Blocked malicious login attempts', '{#} Blocked malicious login attempts -- number is on a prior line, text is a caption.', 'jetpack' ); ?></p>
- <?php elseif ( current_user_can( 'jetpack_activate_modules' ) && ! self::is_development_mode() ) : ?>
- <a href="<?php echo esc_url( wp_nonce_url( Jetpack::admin_url( array( 'action' => 'activate', 'module' => 'protect' ) ), 'jetpack_activate-protect' ) ); ?>" class="button button-jetpack" title="<?php esc_attr_e( 'Protect helps to keep you secure from brute-force login attacks.', 'jetpack' ); ?>">
- <?php esc_html_e( 'Activate Protect', 'jetpack' ); ?>
- </a>
- <?php else : ?>
- <?php esc_html_e( 'Protect is inactive.', 'jetpack' ); ?>
- <?php endif; ?>
- </div>
-
- <div class="akismet">
- <?php if ( is_plugin_active( 'akismet/akismet.php' ) ) : ?>
- <h3><?php echo number_format_i18n( get_option( 'akismet_spam_count', 0 ) ); ?></h3>
- <p><?php echo esc_html_x( 'Spam comments blocked by Akismet.', '{#} Spam comments blocked by Akismet -- number is on a prior line, text is a caption.', 'jetpack' ); ?></p>
- <?php elseif ( current_user_can( 'activate_plugins' ) && ! is_wp_error( validate_plugin( 'akismet/akismet.php' ) ) ) : ?>
- <a href="<?php echo esc_url( wp_nonce_url( add_query_arg( array( 'action' => 'activate', 'plugin' => 'akismet/akismet.php' ), admin_url( 'plugins.php' ) ), 'activate-plugin_akismet/akismet.php' ) ); ?>" class="button button-jetpack">
- <?php esc_html_e( 'Activate Akismet', 'jetpack' ); ?>
- </a>
- <?php else : ?>
- <p><a href="<?php echo esc_url( 'https://akismet.com/?utm_source=jetpack&utm_medium=link&utm_campaign=Jetpack%20Dashboard%20Widget%20Footer%20Link' ); ?>"><?php esc_html_e( 'Akismet can help to keep your blog safe from spam!', 'jetpack' ); ?></a></p>
- <?php endif; ?>
- </div>
-
- </footer>
- <?php
- }
-
- /**
- * Return string containing the Jetpack logo.
- *
- * @since 3.9.0
- *
- * @param bool $logotype Should we use the full logotype (logo + text). Default to false.
- *
- * @return string
- */
- public static function get_jp_emblem( $logotype = false ) {
- $logo = '<path fill="#00BE28" d="M16,0C7.2,0,0,7.2,0,16s7.2,16,16,16c8.8,0,16-7.2,16-16S24.8,0,16,0z M15.2,18.7h-8l8-15.5V18.7z M16.8,28.8 V13.3h8L16.8,28.8z"/>';
- $text = '
-<path d="M41.3,26.6c-0.5-0.7-0.9-1.4-1.3-2.1c2.3-1.4,3-2.5,3-4.6V8h-3V6h6v13.4C46,22.8,45,24.8,41.3,26.6z" />
-<path d="M65,18.4c0,1.1,0.8,1.3,1.4,1.3c0.5,0,2-0.2,2.6-0.4v2.1c-0.9,0.3-2.5,0.5-3.7,0.5c-1.5,0-3.2-0.5-3.2-3.1V12H60v-2h2.1V7.1 H65V10h4v2h-4V18.4z" />
-<path d="M71,10h3v1.3c1.1-0.8,1.9-1.3,3.3-1.3c2.5,0,4.5,1.8,4.5,5.6s-2.2,6.3-5.8,6.3c-0.9,0-1.3-0.1-2-0.3V28h-3V10z M76.5,12.3 c-0.8,0-1.6,0.4-2.5,1.2v5.9c0.6,0.1,0.9,0.2,1.8,0.2c2,0,3.2-1.3,3.2-3.9C79,13.4,78.1,12.3,76.5,12.3z" />
-<path d="M93,22h-3v-1.5c-0.9,0.7-1.9,1.5-3.5,1.5c-1.5,0-3.1-1.1-3.1-3.2c0-2.9,2.5-3.4,4.2-3.7l2.4-0.3v-0.3c0-1.5-0.5-2.3-2-2.3 c-0.7,0-2.3,0.5-3.7,1.1L84,11c1.2-0.4,3-1,4.4-1c2.7,0,4.6,1.4,4.6,4.7L93,22z M90,16.4l-2.2,0.4c-0.7,0.1-1.4,0.5-1.4,1.6 c0,0.9,0.5,1.4,1.3,1.4s1.5-0.5,2.3-1V16.4z" />
-<path d="M104.5,21.3c-1.1,0.4-2.2,0.6-3.5,0.6c-4.2,0-5.9-2.4-5.9-5.9c0-3.7,2.3-6,6.1-6c1.4,0,2.3,0.2,3.2,0.5V13 c-0.8-0.3-2-0.6-3.2-0.6c-1.7,0-3.2,0.9-3.2,3.6c0,2.9,1.5,3.8,3.3,3.8c0.9,0,1.9-0.2,3.2-0.7V21.3z" />
-<path d="M110,15.2c0.2-0.3,0.2-0.8,3.8-5.2h3.7l-4.6,5.7l5,6.3h-3.7l-4.2-5.8V22h-3V6h3V15.2z" />
-<path d="M58.5,21.3c-1.5,0.5-2.7,0.6-4.2,0.6c-3.6,0-5.8-1.8-5.8-6c0-3.1,1.9-5.9,5.5-5.9s4.9,2.5,4.9,4.9c0,0.8,0,1.5-0.1,2h-7.3 c0.1,2.5,1.5,2.8,3.6,2.8c1.1,0,2.2-0.3,3.4-0.7C58.5,19,58.5,21.3,58.5,21.3z M56,15c0-1.4-0.5-2.9-2-2.9c-1.4,0-2.3,1.3-2.4,2.9 C51.6,15,56,15,56,15z" />
- ';
-
- return sprintf(
- '<svg id="jetpack-logo__icon" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 %1$s 32">%2$s</svg>',
- ( true === $logotype ? '118' : '32' ),
- ( true === $logotype ? $logo . $text : $logo )
- );
- }
-
- /*
- * Adds a "blank" column in the user admin table to display indication of user connection.
- */
- function jetpack_icon_user_connected( $columns ) {
- $columns['user_jetpack'] = '';
- return $columns;
- }
-
- /*
- * Show Jetpack icon if the user is linked.
- */
- function jetpack_show_user_connected_icon( $val, $col, $user_id ) {
- if ( 'user_jetpack' == $col && Jetpack::is_user_connected( $user_id ) ) {
- $emblem_html = sprintf(
- '<a title="%1$s" class="jp-emblem-user-admin">%2$s</a>',
- esc_attr__( 'This user is linked and ready to fly with Jetpack.', 'jetpack' ),
- Jetpack::get_jp_emblem()
- );
- return $emblem_html;
- }
-
- return $val;
- }
-
- /*
- * Style the Jetpack user column
- */
- function jetpack_user_col_style() {
- global $current_screen;
- if ( ! empty( $current_screen->base ) && 'users' == $current_screen->base ) { ?>
- <style>
- .fixed .column-user_jetpack {
- width: 21px;
- }
- .jp-emblem-user-admin svg {
- width: 20px;
- height: 20px;
- }
- .jp-emblem-user-admin path {
- fill: #00BE28;
- }
- </style>
- <?php }
- }
-
- /**
- * Checks if Akismet is active and working.
- *
- * We dropped support for Akismet 3.0 with Jetpack 6.1.1 while introducing a check for an Akismet valid key
- * that implied usage of methods present since more recent version.
- * See https://github.com/Automattic/jetpack/pull/9585
- *
- * @since 5.1.0
- *
- * @return bool True = Akismet available. False = Aksimet not available.
- */
- public static function is_akismet_active() {
- static $status = null;
-
- if ( ! is_null( $status ) ) {
- return $status;
- }
-
- // Check if a modern version of Akismet is active.
- if ( ! method_exists( 'Akismet', 'http_post' ) ) {
- $status = false;
- return $status;
- }
-
- // Make sure there is a key known to Akismet at all before verifying key.
- $akismet_key = Akismet::get_api_key();
- if ( ! $akismet_key ) {
- $status = false;
- return $status;
- }
-
- // Possible values: valid, invalid, failure via Akismet. false if no status is cached.
- $akismet_key_state = get_transient( 'jetpack_akismet_key_is_valid' );
-
- // Do not used the cache result in wp-admin or REST API requests if the key isn't valid, in case someone is actively renewing, etc.
- $recheck = ( is_admin() || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) ) && 'valid' !== $akismet_key_state;
- // We cache the result of the Akismet key verification for ten minutes.
- if ( ! $akismet_key_state || $recheck ) {
- $akismet_key_state = Akismet::verify_key( $akismet_key );
- set_transient( 'jetpack_akismet_key_is_valid', $akismet_key_state, 10 * MINUTE_IN_SECONDS );
- }
-
- $status = 'valid' === $akismet_key_state;
-
- return $status;
- }
-
- /**
- * Checks if one or more function names is in debug_backtrace
- *
- * @param $names Mixed string name of function or array of string names of functions
- *
- * @return bool
- */
- public static function is_function_in_backtrace( $names ) {
- $backtrace = debug_backtrace( false ); // phpcs:ignore PHPCompatibility.PHP.NewFunctionParameters.debug_backtrace_optionsFound
- if ( ! is_array( $names ) ) {
- $names = array( $names );
- }
- $names_as_keys = array_flip( $names );
-
- //Do check in constant O(1) time for PHP5.5+
- if ( function_exists( 'array_column' ) ) {
- $backtrace_functions = array_column( $backtrace, 'function' ); // phpcs:ignore PHPCompatibility.PHP.NewFunctions.array_columnFound
- $backtrace_functions_as_keys = array_flip( $backtrace_functions );
- $intersection = array_intersect_key( $backtrace_functions_as_keys, $names_as_keys );
- return ! empty ( $intersection );
- }
-
- //Do check in linear O(n) time for < PHP5.5 ( using isset at least prevents O(n^2) )
- foreach ( $backtrace as $call ) {
- if ( isset( $names_as_keys[ $call['function'] ] ) ) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Given a minified path, and a non-minified path, will return
- * a minified or non-minified file URL based on whether SCRIPT_DEBUG is set and truthy.
- *
- * Both `$min_base` and `$non_min_base` are expected to be relative to the
- * root Jetpack directory.
- *
- * @since 5.6.0
- *
- * @param string $min_path
- * @param string $non_min_path
- * @return string The URL to the file
- */
- public static function get_file_url_for_environment( $min_path, $non_min_path ) {
- $path = ( Jetpack_Constants::is_defined( 'SCRIPT_DEBUG' ) && Jetpack_Constants::get_constant( 'SCRIPT_DEBUG' ) )
- ? $non_min_path
- : $min_path;
-
- return plugins_url( $path, JETPACK__PLUGIN_FILE );
- }
-
- /**
- * Checks for whether Jetpack Rewind is enabled.
- * Will return true if the state of Rewind is anything except "unavailable".
- * @return bool|int|mixed
- */
- public static function is_rewind_enabled() {
- if ( ! Jetpack::is_active() ) {
- return false;
- }
-
- $rewind_enabled = get_transient( 'jetpack_rewind_enabled' );
- if ( false === $rewind_enabled ) {
- jetpack_require_lib( 'class.core-rest-api-endpoints' );
- $rewind_data = (array) Jetpack_Core_Json_Api_Endpoints::rewind_data();
- $rewind_enabled = ( ! is_wp_error( $rewind_data )
- && ! empty( $rewind_data['state'] )
- && 'active' === $rewind_data['state'] )
- ? 1
- : 0;
-
- set_transient( 'jetpack_rewind_enabled', $rewind_enabled, 10 * MINUTE_IN_SECONDS );
- }
- return $rewind_enabled;
- }
-
- /**
- * Checks whether or not TOS has been agreed upon.
- * Will return true if a user has clicked to register, or is already connected.
- */
- public static function jetpack_tos_agreed() {
- return Jetpack_Options::get_option( 'tos_agreed' ) || Jetpack::is_active();
- }
-
- /**
- * Handles activating default modules as well general cleanup for the new connection.
- *
- * @param boolean $activate_sso Whether to activate the SSO module when activating default modules.
- * @param boolean $redirect_on_activation_error Whether to redirect on activation error.
- * @param boolean $send_state_messages Whether to send state messages.
- * @return void
- */
- public static function handle_post_authorization_actions(
- $activate_sso = false,
- $redirect_on_activation_error = false,
- $send_state_messages = true
- ) {
- $other_modules = $activate_sso
- ? array( 'sso' )
- : array();
-
- if ( $active_modules = Jetpack_Options::get_option( 'active_modules' ) ) {
- Jetpack::delete_active_modules();
-
- Jetpack::activate_default_modules( 999, 1, array_merge( $active_modules, $other_modules ), $redirect_on_activation_error, $send_state_messages );
- } else {
- Jetpack::activate_default_modules( false, false, $other_modules, $redirect_on_activation_error, $send_state_messages );
- }
-
- // Since this is a fresh connection, be sure to clear out IDC options
- Jetpack_IDC::clear_all_idc_options();
- Jetpack_Options::delete_raw_option( 'jetpack_last_connect_url_check' );
-
- // Start nonce cleaner
- wp_clear_scheduled_hook( 'jetpack_clean_nonces' );
- wp_schedule_event( time(), 'hourly', 'jetpack_clean_nonces' );
-
- if ( $send_state_messages ) {
- Jetpack::state( 'message', 'authorized' );
- }
- }
-
- /**
- * Returns a boolean for whether backups UI should be displayed or not.
- *
- * @return bool Should backups UI be displayed?
- */
- public static function show_backups_ui() {
- /**
- * Whether UI for backups should be displayed.
- *
- * @since 6.5.0
- *
- * @param bool $show_backups Should UI for backups be displayed? True by default.
- */
- return Jetpack::is_plugin_active( 'vaultpress/vaultpress.php' ) || apply_filters( 'jetpack_show_backups', true );
- }
-}
diff --git a/plugins/jetpack/class.json-api-endpoints.php b/plugins/jetpack/class.json-api-endpoints.php
deleted file mode 100644
index c17e2faa..00000000
--- a/plugins/jetpack/class.json-api-endpoints.php
+++ /dev/null
@@ -1,2091 +0,0 @@
-<?php
-
-require_once( dirname( __FILE__ ) . '/json-api-config.php' );
-require_once( dirname( __FILE__ ) . '/sal/class.json-api-links.php' );
-require_once( dirname( __FILE__ ) . '/sal/class.json-api-metadata.php' );
-require_once( dirname( __FILE__ ) . '/sal/class.json-api-date.php' );
-
-// Endpoint
-abstract class WPCOM_JSON_API_Endpoint {
- // The API Object
- public $api;
-
- // The link-generating utility class
- public $links;
-
- public $pass_wpcom_user_details = false;
-
- // One liner.
- public $description;
-
- // Object Grouping For Documentation (Users, Posts, Comments)
- public $group;
-
- // Stats extra value to bump
- public $stat;
-
- // HTTP Method
- public $method = 'GET';
-
- // Minimum version of the api for which to serve this endpoint
- public $min_version = '0';
-
- // Maximum version of the api for which to serve this endpoint
- public $max_version = WPCOM_JSON_API__CURRENT_VERSION;
-
- // Path at which to serve this endpoint: sprintf() format.
- public $path = '';
-
- // Identifiers to fill sprintf() formatted $path
- public $path_labels = array();
-
- // Accepted query parameters
- public $query = array(
- // Parameter name
- 'context' => array(
- // Default value => description
- 'display' => 'Formats the output as HTML for display. Shortcodes are parsed, paragraph tags are added, etc..',
- // Other possible values => description
- 'edit' => 'Formats the output for editing. Shortcodes are left unparsed, significant whitespace is kept, etc..',
- ),
- 'http_envelope' => array(
- 'false' => '',
- 'true' => 'Some environments (like in-browser JavaScript or Flash) block or divert responses with a non-200 HTTP status code. Setting this parameter will force the HTTP status code to always be 200. The JSON response is wrapped in an "envelope" containing the "real" HTTP status code and headers.',
- ),
- 'pretty' => array(
- 'false' => '',
- 'true' => 'Output pretty JSON',
- ),
- 'meta' => "(string) Optional. Loads data from the endpoints found in the 'meta' part of the response. Comma-separated list. Example: meta=site,likes",
- 'fields' => '(string) Optional. Returns specified fields only. Comma-separated list. Example: fields=ID,title',
- // Parameter name => description (default value is empty)
- 'callback' => '(string) An optional JSONP callback function.',
- );
-
- // Response format
- public $response_format = array();
-
- // Request format
- public $request_format = array();
-
- // Is this endpoint still in testing phase? If so, not available to the public.
- public $in_testing = false;
-
- // Is this endpoint still allowed if the site in question is flagged?
- public $allowed_if_flagged = false;
-
- // Is this endpoint allowed if the site is red flagged?
- public $allowed_if_red_flagged = false;
-
- // Is this endpoint allowed if the site is deleted?
- public $allowed_if_deleted = false;
-
- /**
- * @var string Version of the API
- */
- public $version = '';
-
- /**
- * @var string Example request to make
- */
- public $example_request = '';
-
- /**
- * @var string Example request data (for POST methods)
- */
- public $example_request_data = '';
-
- /**
- * @var string Example response from $example_request
- */
- public $example_response = '';
-
- /**
- * @var bool Set to true if the endpoint implements its own filtering instead of the standard `fields` query method
- */
- public $custom_fields_filtering = false;
-
- /**
- * @var bool Set to true if the endpoint accepts all cross origin requests. You probably should not set this flag.
- */
- public $allow_cross_origin_request = false;
-
- /**
- * @var bool Set to true if the endpoint can recieve unauthorized POST requests.
- */
- public $allow_unauthorized_request = false;
-
- /**
- * @var bool Set to true if the endpoint should accept site based (not user based) authentication.
- */
- public $allow_jetpack_site_auth = false;
-
- /**
- * @var bool Set to true if the endpoint should accept auth from an upload token.
- */
- public $allow_upload_token_auth = false;
-
- function __construct( $args ) {
- $defaults = array(
- 'in_testing' => false,
- 'allowed_if_flagged' => false,
- 'allowed_if_red_flagged' => false,
- 'allowed_if_deleted' => false,
- 'description' => '',
- 'group' => '',
- 'method' => 'GET',
- 'path' => '/',
- 'min_version' => '0',
- 'max_version' => WPCOM_JSON_API__CURRENT_VERSION,
- 'force' => '',
- 'deprecated' => false,
- 'new_version' => WPCOM_JSON_API__CURRENT_VERSION,
- 'jp_disabled' => false,
- 'path_labels' => array(),
- 'request_format' => array(),
- 'response_format' => array(),
- 'query_parameters' => array(),
- 'version' => 'v1',
- 'example_request' => '',
- 'example_request_data' => '',
- 'example_response' => '',
- 'required_scope' => '',
- 'pass_wpcom_user_details' => false,
- 'custom_fields_filtering' => false,
- 'allow_cross_origin_request' => false,
- 'allow_unauthorized_request' => false,
- 'allow_jetpack_site_auth' => false,
- 'allow_upload_token_auth' => false,
- );
-
- $args = wp_parse_args( $args, $defaults );
-
- $this->in_testing = $args['in_testing'];
-
- $this->allowed_if_flagged = $args['allowed_if_flagged'];
- $this->allowed_if_red_flagged = $args['allowed_if_red_flagged'];
- $this->allowed_if_deleted = $args['allowed_if_deleted'];
-
- $this->description = $args['description'];
- $this->group = $args['group'];
- $this->stat = $args['stat'];
- $this->force = $args['force'];
- $this->jp_disabled = $args['jp_disabled'];
-
- $this->method = $args['method'];
- $this->path = $args['path'];
- $this->path_labels = $args['path_labels'];
- $this->min_version = $args['min_version'];
- $this->max_version = $args['max_version'];
- $this->deprecated = $args['deprecated'];
- $this->new_version = $args['new_version'];
-
- // Ensure max version is not less than min version
- if ( version_compare( $this->min_version, $this->max_version, '>' ) ) {
- $this->max_version = $this->min_version;
- }
-
- $this->pass_wpcom_user_details = $args['pass_wpcom_user_details'];
- $this->custom_fields_filtering = (bool) $args['custom_fields_filtering'];
-
- $this->allow_cross_origin_request = (bool) $args['allow_cross_origin_request'];
- $this->allow_unauthorized_request = (bool) $args['allow_unauthorized_request'];
- $this->allow_jetpack_site_auth = (bool) $args['allow_jetpack_site_auth'];
- $this->allow_upload_token_auth = (bool) $args['allow_upload_token_auth'];
-
- $this->version = $args['version'];
-
- $this->required_scope = $args['required_scope'];
-
- if ( $this->request_format ) {
- $this->request_format = array_filter( array_merge( $this->request_format, $args['request_format'] ) );
- } else {
- $this->request_format = $args['request_format'];
- }
-
- if ( $this->response_format ) {
- $this->response_format = array_filter( array_merge( $this->response_format, $args['response_format'] ) );
- } else {
- $this->response_format = $args['response_format'];
- }
-
- if ( false === $args['query_parameters'] ) {
- $this->query = array();
- } elseif ( is_array( $args['query_parameters'] ) ) {
- $this->query = array_filter( array_merge( $this->query, $args['query_parameters'] ) );
- }
-
- $this->api = WPCOM_JSON_API::init(); // Auto-add to WPCOM_JSON_API
- $this->links = WPCOM_JSON_API_Links::getInstance();
-
- /** Example Request/Response ******************************************/
-
- // Examples for endpoint documentation request
- $this->example_request = $args['example_request'];
- $this->example_request_data = $args['example_request_data'];
- $this->example_response = $args['example_response'];
-
- $this->api->add( $this );
- }
-
- // Get all query args. Prefill with defaults
- function query_args( $return_default_values = true, $cast_and_filter = true ) {
- $args = array_intersect_key( $this->api->query, $this->query );
-
- if ( !$cast_and_filter ) {
- return $args;
- }
-
- return $this->cast_and_filter( $args, $this->query, $return_default_values );
- }
-
- // Get POST body data
- function input( $return_default_values = true, $cast_and_filter = true ) {
- $input = trim( $this->api->post_body );
- $content_type = $this->api->content_type;
- if ( $content_type ) {
- list ( $content_type ) = explode( ';', $content_type );
- }
- $content_type = trim( $content_type );
- switch ( $content_type ) {
- case 'application/json' :
- case 'application/x-javascript' :
- case 'text/javascript' :
- case 'text/x-javascript' :
- case 'text/x-json' :
- case 'text/json' :
- $return = json_decode( $input, true );
-
- if ( function_exists( 'json_last_error' ) ) {
- if ( JSON_ERROR_NONE !== json_last_error() ) { // phpcs:ignore PHPCompatibility
- return null;
- }
- } else {
- if ( is_null( $return ) && json_encode( null ) !== $input ) {
- return null;
- }
- }
-
- break;
- case 'multipart/form-data' :
- $return = array_merge( stripslashes_deep( $_POST ), $_FILES );
- break;
- case 'application/x-www-form-urlencoded' :
- //attempt JSON first, since probably a curl command
- $return = json_decode( $input, true );
-
- if ( is_null( $return ) ) {
- wp_parse_str( $input, $return );
- }
-
- break;
- default :
- wp_parse_str( $input, $return );
- break;
- }
-
- if ( isset( $this->api->query['force'] )
- && 'secure' === $this->api->query['force']
- && isset( $return['secure_key'] ) ) {
- $this->api->post_body = $this->get_secure_body( $return['secure_key'] );
- $this->api->query['force'] = false;
- return $this->input( $return_default_values, $cast_and_filter );
- }
-
- if ( $cast_and_filter ) {
- $return = $this->cast_and_filter( $return, $this->request_format, $return_default_values );
- }
- return $return;
- }
-
-
- protected function get_secure_body( $secure_key ) {
- $response = Jetpack_Client::wpcom_json_api_request_as_blog(
- sprintf( '/sites/%d/secure-request', Jetpack_Options::get_option('id' ) ),
- '1.1',
- array( 'method' => 'POST' ),
- array( 'secure_key' => $secure_key )
- );
- if ( 200 !== $response['response']['code'] ) {
- return null;
- }
- return json_decode( $response['body'], true );
- }
-
- function cast_and_filter( $data, $documentation, $return_default_values = false, $for_output = false ) {
- $return_as_object = false;
- if ( is_object( $data ) ) {
- // @todo this should probably be a deep copy if $data can ever have nested objects
- $data = (array) $data;
- $return_as_object = true;
- } elseif ( !is_array( $data ) ) {
- return $data;
- }
-
- $boolean_arg = array( 'false', 'true' );
- $naeloob_arg = array( 'true', 'false' );
-
- $return = array();
-
- foreach ( $documentation as $key => $description ) {
- if ( is_array( $description ) ) {
- // String or boolean array keys only
- $whitelist = array_keys( $description );
-
- if ( $whitelist === $boolean_arg || $whitelist === $naeloob_arg ) {
- // Truthiness
- if ( isset( $data[$key] ) ) {
- $return[$key] = (bool) WPCOM_JSON_API::is_truthy( $data[$key] );
- } elseif ( $return_default_values ) {
- $return[$key] = $whitelist === $naeloob_arg; // Default to true for naeloob_arg and false for boolean_arg.
- }
- } elseif ( isset( $data[$key] ) && isset( $description[$data[$key]] ) ) {
- // String Key
- $return[$key] = (string) $data[$key];
- } elseif ( $return_default_values ) {
- // Default value
- $return[$key] = (string) current( $whitelist );
- }
-
- continue;
- }
-
- $types = $this->parse_types( $description );
- $type = array_shift( $types );
-
- // Explicit default - string and int only for now. Always set these reguardless of $return_default_values
- if ( isset( $type['default'] ) ) {
- if ( !isset( $data[$key] ) ) {
- $data[$key] = $type['default'];
- }
- }
-
- if ( !isset( $data[$key] ) ) {
- continue;
- }
-
- $this->cast_and_filter_item( $return, $type, $key, $data[$key], $types, $for_output );
- }
-
- if ( $return_as_object ) {
- return (object) $return;
- }
-
- return $return;
- }
-
- /**
- * Casts $value according to $type.
- * Handles fallbacks for certain values of $type when $value is not that $type
- * Currently, only handles fallback between string <-> array (two way), from string -> false (one way), and from object -> false (one way),
- * and string -> object (one way)
- *
- * Handles "child types" - array:URL, object:category
- * array:URL means an array of URLs
- * object:category means a hash of categories
- *
- * Handles object typing - object>post means an object of type post
- */
- function cast_and_filter_item( &$return, $type, $key, $value, $types = array(), $for_output = false ) {
- if ( is_string( $type ) ) {
- $type = compact( 'type' );
- }
-
- switch ( $type['type'] ) {
- case 'false' :
- $return[$key] = false;
- break;
- case 'url' :
- if ( is_object( $value ) && isset( $value->url ) && false !== strpos( $value->url, 'https://videos.files.wordpress.com/' ) ) {
- $value = $value->url;
- }
- // Check for string since esc_url_raw() expects one.
- if ( ! is_string( $value ) ) {
- break;
- }
- $return[$key] = (string) esc_url_raw( $value );
- break;
- case 'string' :
- // Fallback string -> array, or for string -> object
- if ( is_array( $value ) || is_object( $value ) ) {
- if ( !empty( $types[0] ) ) {
- $next_type = array_shift( $types );
- return $this->cast_and_filter_item( $return, $next_type, $key, $value, $types, $for_output );
- }
- }
-
- // Fallback string -> false
- if ( !is_string( $value ) ) {
- if ( !empty( $types[0] ) && 'false' === $types[0]['type'] ) {
- $next_type = array_shift( $types );
- return $this->cast_and_filter_item( $return, $next_type, $key, $value, $types, $for_output );
- }
- }
- $return[$key] = (string) $value;
- break;
- case 'html' :
- $return[$key] = (string) $value;
- break;
- case 'safehtml' :
- $return[$key] = wp_kses( (string) $value, wp_kses_allowed_html() );
- break;
- case 'zip' :
- case 'media' :
- if ( is_array( $value ) ) {
- if ( isset( $value['name'] ) && is_array( $value['name'] ) ) {
- // It's a $_FILES array
- // Reformat into array of $_FILES items
- $files = array();
-
- foreach ( $value['name'] as $k => $v ) {
- $files[$k] = array();
- foreach ( array_keys( $value ) as $file_key ) {
- $files[$k][$file_key] = $value[$file_key][$k];
- }
- }
-
- $return[$key] = $files;
- break;
- }
- } else {
- // no break - treat as 'array'
- }
- // nobreak
- case 'array' :
- // Fallback array -> string
- if ( is_string( $value ) ) {
- if ( !empty( $types[0] ) ) {
- $next_type = array_shift( $types );
- return $this->cast_and_filter_item( $return, $next_type, $key, $value, $types, $for_output );
- }
- }
-
- if ( isset( $type['children'] ) ) {
- $children = array();
- foreach ( (array) $value as $k => $child ) {
- $this->cast_and_filter_item( $children, $type['children'], $k, $child, array(), $for_output );
- }
- $return[$key] = (array) $children;
- break;
- }
-
- $return[$key] = (array) $value;
- break;
- case 'iso 8601 datetime' :
- case 'datetime' :
- // (string)s
- $dates = $this->parse_date( (string) $value );
- if ( $for_output ) {
- $return[$key] = $this->format_date( $dates[1], $dates[0] );
- } else {
- list( $return[$key], $return["{$key}_gmt"] ) = $dates;
- }
- break;
- case 'float' :
- $return[$key] = (float) $value;
- break;
- case 'int' :
- case 'integer' :
- $return[$key] = (int) $value;
- break;
- case 'bool' :
- case 'boolean' :
- $return[$key] = (bool) WPCOM_JSON_API::is_truthy( $value );
- break;
- case 'object' :
- // Fallback object -> false
- if ( is_scalar( $value ) || is_null( $value ) ) {
- if ( !empty( $types[0] ) && 'false' === $types[0]['type'] ) {
- return $this->cast_and_filter_item( $return, 'false', $key, $value, $types, $for_output );
- }
- }
-
- if ( isset( $type['children'] ) ) {
- $children = array();
- foreach ( (array) $value as $k => $child ) {
- $this->cast_and_filter_item( $children, $type['children'], $k, $child, array(), $for_output );
- }
- $return[$key] = (object) $children;
- break;
- }
-
- if ( isset( $type['subtype'] ) ) {
- return $this->cast_and_filter_item( $return, $type['subtype'], $key, $value, $types, $for_output );
- }
-
- $return[$key] = (object) $value;
- break;
- case 'post' :
- $return[$key] = (object) $this->cast_and_filter( $value, $this->post_object_format, false, $for_output );
- break;
- case 'comment' :
- $return[$key] = (object) $this->cast_and_filter( $value, $this->comment_object_format, false, $for_output );
- break;
- case 'tag' :
- case 'category' :
- $docs = array(
- 'ID' => '(int)',
- 'name' => '(string)',
- 'slug' => '(string)',
- 'description' => '(HTML)',
- 'post_count' => '(int)',
- 'feed_url' => '(string)',
- 'meta' => '(object)',
- );
- if ( 'category' === $type['type'] ) {
- $docs['parent'] = '(int)';
- }
- $return[$key] = (object) $this->cast_and_filter( $value, $docs, false, $for_output );
- break;
- case 'post_reference' :
- case 'comment_reference' :
- $docs = array(
- 'ID' => '(int)',
- 'type' => '(string)',
- 'title' => '(string)',
- 'link' => '(URL)',
- );
- $return[$key] = (object) $this->cast_and_filter( $value, $docs, false, $for_output );
- break;
- case 'geo' :
- $docs = array(
- 'latitude' => '(float)',
- 'longitude' => '(float)',
- 'address' => '(string)',
- );
- $return[$key] = (object) $this->cast_and_filter( $value, $docs, false, $for_output );
- break;
- case 'author' :
- $docs = array(
- 'ID' => '(int)',
- 'user_login' => '(string)',
- 'login' => '(string)',
- 'email' => '(string|false)',
- 'name' => '(string)',
- 'first_name' => '(string)',
- 'last_name' => '(string)',
- 'nice_name' => '(string)',
- 'URL' => '(URL)',
- 'avatar_URL' => '(URL)',
- 'profile_URL' => '(URL)',
- 'is_super_admin' => '(bool)',
- 'roles' => '(array:string)',
- 'ip_address' => '(string|false)',
- );
- $return[$key] = (object) $this->cast_and_filter( $value, $docs, false, $for_output );
- break;
- case 'role' :
- $docs = array(
- 'name' => '(string)',
- 'display_name' => '(string)',
- 'capabilities' => '(object:boolean)',
- );
- $return[$key] = (object) $this->cast_and_filter( $value, $docs, false, $for_output );
- break;
- case 'attachment' :
- $docs = array(
- 'ID' => '(int)',
- 'URL' => '(URL)',
- 'guid' => '(string)',
- 'mime_type' => '(string)',
- 'width' => '(int)',
- 'height' => '(int)',
- 'duration' => '(int)',
- );
- $return[$key] = (object) $this->cast_and_filter(
- $value,
- /**
- * Filter the documentation returned for a post attachment.
- *
- * @module json-api
- *
- * @since 1.9.0
- *
- * @param array $docs Array of documentation about a post attachment.
- */
- apply_filters( 'wpcom_json_api_attachment_cast_and_filter', $docs ),
- false,
- $for_output
- );
- break;
- case 'metadata' :
- $docs = array(
- 'id' => '(int)',
- 'key' => '(string)',
- 'value' => '(string|false|float|int|array|object)',
- 'previous_value' => '(string)',
- 'operation' => '(string)',
- );
- $return[$key] = (object) $this->cast_and_filter(
- $value,
- /** This filter is documented in class.json-api-endpoints.php */
- apply_filters( 'wpcom_json_api_attachment_cast_and_filter', $docs ),
- false,
- $for_output
- );
- break;
- case 'plugin' :
- $docs = array(
- 'id' => '(safehtml) The plugin\'s ID',
- 'slug' => '(safehtml) The plugin\'s Slug',
- 'active' => '(boolean) The plugin status.',
- 'update' => '(object) The plugin update info.',
- 'name' => '(safehtml) The name of the plugin.',
- 'plugin_url' => '(url) Link to the plugin\'s web site.',
- 'version' => '(safehtml) The plugin version number.',
- 'description' => '(safehtml) Description of what the plugin does and/or notes from the author',
- 'author' => '(safehtml) The plugin author\'s name',
- 'author_url' => '(url) The plugin author web site address',
- 'network' => '(boolean) Whether the plugin can only be activated network wide.',
- 'autoupdate' => '(boolean) Whether the plugin is auto updated',
- 'log' => '(array:safehtml) An array of update log strings.',
- 'action_links' => '(array) An array of action links that the plugin uses.',
- );
- $return[$key] = (object) $this->cast_and_filter(
- $value,
- /**
- * Filter the documentation returned for a plugin.
- *
- * @module json-api
- *
- * @since 3.1.0
- *
- * @param array $docs Array of documentation about a plugin.
- */
- apply_filters( 'wpcom_json_api_plugin_cast_and_filter', $docs ),
- false,
- $for_output
- );
- break;
- case 'plugin_v1_2' :
- $docs = class_exists( 'Jetpack_JSON_API_Get_Plugins_v1_2_Endpoint' )
- ? Jetpack_JSON_API_Get_Plugins_v1_2_Endpoint::$_response_format
- : Jetpack_JSON_API_Plugins_Endpoint::$_response_format_v1_2;
- $return[$key] = (object) $this->cast_and_filter(
- $value,
- /**
- * Filter the documentation returned for a plugin.
- *
- * @module json-api
- *
- * @since 3.1.0
- *
- * @param array $docs Array of documentation about a plugin.
- */
- apply_filters( 'wpcom_json_api_plugin_cast_and_filter', $docs ),
- false,
- $for_output
- );
- break;
- case 'file_mod_capabilities':
- $docs = array(
- 'reasons_modify_files_unavailable' => '(array) The reasons why files can\'t be modified',
- 'reasons_autoupdate_unavailable' => '(array) The reasons why autoupdates aren\'t allowed',
- 'modify_files' => '(boolean) true if files can be modified',
- 'autoupdate_files' => '(boolean) true if autoupdates are allowed',
- );
- $return[ $key ] = (array) $this->cast_and_filter( $value, $docs, false, $for_output );
- break;
- case 'jetpackmodule' :
- $docs = array(
- 'id' => '(string) The module\'s ID',
- 'active' => '(boolean) The module\'s status.',
- 'name' => '(string) The module\'s name.',
- 'description' => '(safehtml) The module\'s description.',
- 'sort' => '(int) The module\'s display order.',
- 'introduced' => '(string) The Jetpack version when the module was introduced.',
- 'changed' => '(string) The Jetpack version when the module was changed.',
- 'free' => '(boolean) The module\'s Free or Paid status.',
- 'module_tags' => '(array) The module\'s tags.',
- 'override' => '(string) The module\'s override. Empty if no override, otherwise \'active\' or \'inactive\'',
- );
- $return[$key] = (object) $this->cast_and_filter(
- $value,
- /** This filter is documented in class.json-api-endpoints.php */
- apply_filters( 'wpcom_json_api_plugin_cast_and_filter', $docs ),
- false,
- $for_output
- );
- break;
- case 'sharing_button' :
- $docs = array(
- 'ID' => '(string)',
- 'name' => '(string)',
- 'URL' => '(string)',
- 'icon' => '(string)',
- 'enabled' => '(bool)',
- 'visibility' => '(string)',
- );
- $return[$key] = (array) $this->cast_and_filter( $value, $docs, false, $for_output );
- break;
- case 'sharing_button_service':
- $docs = array(
- 'ID' => '(string) The service identifier',
- 'name' => '(string) The service name',
- 'class_name' => '(string) Class name for custom style sharing button elements',
- 'genericon' => '(string) The Genericon unicode character for the custom style sharing button icon',
- 'preview_smart' => '(string) An HTML snippet of a rendered sharing button smart preview',
- 'preview_smart_js' => '(string) An HTML snippet of the page-wide initialization scripts used for rendering the sharing button smart preview'
- );
- $return[$key] = (array) $this->cast_and_filter( $value, $docs, false, $for_output );
- break;
- case 'site_keyring':
- $docs = array(
- 'keyring_id' => '(int) Keyring ID',
- 'service' => '(string) The service name',
- 'external_user_id' => '(string) External user id for the service'
- );
- $return[$key] = (array) $this->cast_and_filter( $value, $docs, false, $for_output );
- break;
- case 'taxonomy':
- $docs = array(
- 'name' => '(string) The taxonomy slug',
- 'label' => '(string) The taxonomy human-readable name',
- 'labels' => '(object) Mapping of labels for the taxonomy',
- 'description' => '(string) The taxonomy description',
- 'hierarchical' => '(bool) Whether the taxonomy is hierarchical',
- 'public' => '(bool) Whether the taxonomy is public',
- 'capabilities' => '(object) Mapping of current user capabilities for the taxonomy',
- );
- $return[$key] = (array) $this->cast_and_filter( $value, $docs, false, $for_output );
- break;
-
- default :
- $method_name = $type['type'] . '_docs';
- if ( method_exists( 'WPCOM_JSON_API_Jetpack_Overrides', $method_name ) ) {
- $docs = WPCOM_JSON_API_Jetpack_Overrides::$method_name();
- }
-
- if ( ! empty( $docs ) ) {
- $return[$key] = (object) $this->cast_and_filter(
- $value,
- /** This filter is documented in class.json-api-endpoints.php */
- apply_filters( 'wpcom_json_api_plugin_cast_and_filter', $docs ),
- false,
- $for_output
- );
- } else {
- trigger_error( "Unknown API casting type {$type['type']}", E_USER_WARNING );
- }
- }
- }
-
- function parse_types( $text ) {
- if ( !preg_match( '#^\(([^)]+)\)#', ltrim( $text ), $matches ) ) {
- return 'none';
- }
-
- $types = explode( '|', strtolower( $matches[1] ) );
- $return = array();
- foreach ( $types as $type ) {
- foreach ( array( ':' => 'children', '>' => 'subtype', '=' => 'default' ) as $operator => $meaning ) {
- if ( false !== strpos( $type, $operator ) ) {
- $item = explode( $operator, $type, 2 );
- $return[] = array( 'type' => $item[0], $meaning => $item[1] );
- continue 2;
- }
- }
- $return[] = compact( 'type' );
- }
-
- return $return;
- }
-
- /**
- * Checks if the endpoint is publicly displayable
- */
- function is_publicly_documentable() {
- return '__do_not_document' !== $this->group && true !== $this->in_testing;
- }
-
- /**
- * Auto generates documentation based on description, method, path, path_labels, and query parameters.
- * Echoes HTML.
- */
- function document( $show_description = true ) {
- global $wpdb;
- $original_post = isset( $GLOBALS['post'] ) ? $GLOBALS['post'] : 'unset';
- unset( $GLOBALS['post'] );
-
- $doc = $this->generate_documentation();
-
- if ( $show_description ) :
-?>
-<caption>
- <h1><?php echo wp_kses_post( $doc['method'] ); ?> <?php echo wp_kses_post( $doc['path_labeled'] ); ?></h1>
- <p><?php echo wp_kses_post( $doc['description'] ); ?></p>
-</caption>
-
-<?php endif; ?>
-
-<?php if ( true === $this->deprecated ) { ?>
-<p><strong>This endpoint is deprecated in favor of version <?php echo floatval( $this->new_version ); ?></strong></p>
-<?php } ?>
-
-<section class="resource-info">
- <h2 id="apidoc-resource-info">Resource Information</h2>
-
- <table class="api-doc api-doc-resource-parameters api-doc-resource">
-
- <thead>
- <tr>
- <th class="api-index-title" scope="column">&nbsp;</th>
- <th class="api-index-title" scope="column">&nbsp;</th>
- </tr>
- </thead>
- <tbody>
-
- <tr class="api-index-item">
- <th scope="row" class="parameter api-index-item-title">Method</th>
- <td class="type api-index-item-title"><?php echo wp_kses_post( $doc['method'] ); ?></td>
- </tr>
-
- <tr class="api-index-item">
- <th scope="row" class="parameter api-index-item-title">URL</th>
- <?php
- $version = WPCOM_JSON_API__CURRENT_VERSION;
- if ( !empty( $this->max_version ) ) {
- $version = $this->max_version;
- }
- ?>
- <td class="type api-index-item-title">https://public-api.wordpress.com/rest/v<?php echo floatval( $version ); ?><?php echo wp_kses_post( $doc['path_labeled'] ); ?></td>
- </tr>
-
- <tr class="api-index-item">
- <th scope="row" class="parameter api-index-item-title">Requires authentication?</th>
- <?php
- $requires_auth = $wpdb->get_row( $wpdb->prepare( "SELECT requires_authentication FROM rest_api_documentation WHERE `version` = %s AND `path` = %s AND `method` = %s LIMIT 1", $version, untrailingslashit( $doc['path_labeled'] ), $doc['method'] ) );
- ?>
- <td class="type api-index-item-title"><?php echo ( true === (bool) $requires_auth->requires_authentication ? 'Yes' : 'No' ); ?></td>
- </tr>
-
- </tbody>
- </table>
-
-</section>
-
-<?php
-
- foreach ( array(
- 'path' => 'Method Parameters',
- 'query' => 'Query Parameters',
- 'body' => 'Request Parameters',
- 'response' => 'Response Parameters',
- ) as $doc_section_key => $label ) :
- $doc_section = 'response' === $doc_section_key ? $doc['response']['body'] : $doc['request'][$doc_section_key];
- if ( !$doc_section ) {
- continue;
- }
-
- $param_label = strtolower( str_replace( ' ', '-', $label ) );
-?>
-
-<section class="<?php echo $param_label; ?>">
-
-<h2 id="apidoc-<?php echo esc_attr( $doc_section_key ); ?>"><?php echo wp_kses_post( $label ); ?></h2>
-
-<table class="api-doc api-doc-<?php echo $param_label; ?>-parameters api-doc-<?php echo strtolower( str_replace( ' ', '-', $doc['group'] ) ); ?>">
-
-<thead>
- <tr>
- <th class="api-index-title" scope="column">Parameter</th>
- <th class="api-index-title" scope="column">Type</th>
- <th class="api-index-title" scope="column">Description</th>
- </tr>
-</thead>
-<tbody>
-
-<?php foreach ( $doc_section as $key => $item ) : ?>
-
- <tr class="api-index-item">
- <th scope="row" class="parameter api-index-item-title"><?php echo wp_kses_post( $key ); ?></th>
- <td class="type api-index-item-title"><?php echo wp_kses_post( $item['type'] ); // @todo auto-link? ?></td>
- <td class="description api-index-item-body"><?php
-
- $this->generate_doc_description( $item['description'] );
-
- ?></td>
- </tr>
-
-<?php endforeach; ?>
-</tbody>
-</table>
-</section>
-<?php endforeach; ?>
-
-<?php
- if ( 'unset' !== $original_post ) {
- $GLOBALS['post'] = $original_post;
- }
- }
-
- function add_http_build_query_to_php_content_example( $matches ) {
- $trimmed_match = ltrim( $matches[0] );
- $pad = substr( $matches[0], 0, -1 * strlen( $trimmed_match ) );
- $pad = ltrim( $pad, ' ' );
- $return = ' ' . str_replace( "\n", "\n ", $matches[0] );
- return " http_build_query({$return}{$pad})";
- }
-
- /**
- * Recursively generates the <dl>'s to document item descriptions.
- * Echoes HTML.
- */
- function generate_doc_description( $item ) {
- if ( is_array( $item ) ) : ?>
-
- <dl>
-<?php foreach ( $item as $description_key => $description_value ) : ?>
-
- <dt><?php echo wp_kses_post( $description_key . ':' ); ?></dt>
- <dd><?php $this->generate_doc_description( $description_value ); ?></dd>
-
-<?php endforeach; ?>
-
- </dl>
-
-<?php
- else :
- echo wp_kses_post( $item );
- endif;
- }
-
- /**
- * Auto generates documentation based on description, method, path, path_labels, and query parameters.
- * Echoes HTML.
- */
- function generate_documentation() {
- $format = str_replace( '%d', '%s', $this->path );
- $path_labeled = $format;
- if ( ! empty( $this->path_labels ) ) {
- $path_labeled = vsprintf( $format, array_keys( $this->path_labels ) );
- }
- $boolean_arg = array( 'false', 'true' );
- $naeloob_arg = array( 'true', 'false' );
-
- $doc = array(
- 'description' => $this->description,
- 'method' => $this->method,
- 'path_format' => $this->path,
- 'path_labeled' => $path_labeled,
- 'group' => $this->group,
- 'request' => array(
- 'path' => array(),
- 'query' => array(),
- 'body' => array(),
- ),
- 'response' => array(
- 'body' => array(),
- )
- );
-
- foreach ( array( 'path_labels' => 'path', 'query' => 'query', 'request_format' => 'body', 'response_format' => 'body' ) as $_property => $doc_item ) {
- foreach ( (array) $this->$_property as $key => $description ) {
- if ( is_array( $description ) ) {
- $description_keys = array_keys( $description );
- if ( $boolean_arg === $description_keys || $naeloob_arg === $description_keys ) {
- $type = '(bool)';
- } else {
- $type = '(string)';
- }
-
- if ( 'response_format' !== $_property ) {
- // hack - don't show "(default)" in response format
- reset( $description );
- $description_key = key( $description );
- $description[$description_key] = "(default) {$description[$description_key]}";
- }
- } else {
- $types = $this->parse_types( $description );
- $type = array();
- $default = '';
-
- if ( 'none' == $types ) {
- $types = array();
- $types[]['type'] = 'none';
- }
-
- foreach ( $types as $type_array ) {
- $type[] = $type_array['type'];
- if ( isset( $type_array['default'] ) ) {
- $default = $type_array['default'];
- if ( 'string' === $type_array['type'] ) {
- $default = "'$default'";
- }
- }
- }
- $type = '(' . join( '|', $type ) . ')';
- $noop = ''; // skip an index in list below
- list( $noop, $description ) = explode( ')', $description, 2 );
- $description = trim( $description );
- if ( $default ) {
- $description .= " Default: $default.";
- }
- }
-
- $item = compact( 'type', 'description' );
-
- if ( 'response_format' === $_property ) {
- $doc['response'][$doc_item][$key] = $item;
- } else {
- $doc['request'][$doc_item][$key] = $item;
- }
- }
- }
-
- return $doc;
- }
-
- function user_can_view_post( $post_id ) {
- $post = get_post( $post_id );
- if ( !$post || is_wp_error( $post ) ) {
- return false;
- }
-
- if ( 'inherit' === $post->post_status ) {
- $parent_post = get_post( $post->post_parent );
- $post_status_obj = get_post_status_object( $parent_post->post_status );
- } else {
- $post_status_obj = get_post_status_object( $post->post_status );
- }
-
- if ( !$post_status_obj->public ) {
- if ( is_user_logged_in() ) {
- if ( $post_status_obj->protected ) {
- if ( !current_user_can( 'edit_post', $post->ID ) ) {
- return new WP_Error( 'unauthorized', 'User cannot view post', 403 );
- }
- } elseif ( $post_status_obj->private ) {
- if ( !current_user_can( 'read_post', $post->ID ) ) {
- return new WP_Error( 'unauthorized', 'User cannot view post', 403 );
- }
- } elseif ( in_array( $post->post_status, array( 'inherit', 'trash' ) ) ) {
- if ( !current_user_can( 'edit_post', $post->ID ) ) {
- return new WP_Error( 'unauthorized', 'User cannot view post', 403 );
- }
- } elseif ( 'auto-draft' === $post->post_status ) {
- //allow auto-drafts
- } else {
- return new WP_Error( 'unauthorized', 'User cannot view post', 403 );
- }
- } else {
- return new WP_Error( 'unauthorized', 'User cannot view post', 403 );
- }
- }
-
- if (
- -1 == get_option( 'blog_public' ) &&
- /**
- * Filter access to a specific post.
- *
- * @module json-api
- *
- * @since 3.4.0
- *
- * @param bool current_user_can( 'read_post', $post->ID ) Can the current user access the post.
- * @param WP_Post $post Post data.
- */
- ! apply_filters(
- 'wpcom_json_api_user_can_view_post',
- current_user_can( 'read_post', $post->ID ),
- $post
- )
- ) {
- return new WP_Error( 'unauthorized', 'User cannot view post', array( 'status_code' => 403, 'error' => 'private_blog' ) );
- }
-
- if ( strlen( $post->post_password ) && !current_user_can( 'edit_post', $post->ID ) ) {
- return new WP_Error( 'unauthorized', 'User cannot view password protected post', array( 'status_code' => 403, 'error' => 'password_protected' ) );
- }
-
- return true;
- }
-
- /**
- * Returns author object.
- *
- * @param object $author user ID, user row, WP_User object, comment row, post row
- * @param bool $show_email_and_ip output the author's email address and IP address?
- *
- * @return object
- */
- function get_author( $author, $show_email_and_ip = false ) {
- $ip_address = isset( $author->comment_author_IP ) ? $author->comment_author_IP : '';
-
- if ( isset( $author->comment_author_email ) ) {
- $ID = 0;
- $login = '';
- $email = $author->comment_author_email;
- $name = $author->comment_author;
- $first_name = '';
- $last_name = '';
- $URL = $author->comment_author_url;
- $avatar_URL = $this->api->get_avatar_url( $author );
- $profile_URL = 'https://en.gravatar.com/' . md5( strtolower( trim( $email ) ) );
- $nice = '';
- $site_id = -1;
-
- // Comment author URLs and Emails are sent through wp_kses() on save, which replaces "&" with "&amp;"
- // "&" is the only email/URL character altered by wp_kses()
- foreach ( array( 'email', 'URL' ) as $field ) {
- $$field = str_replace( '&amp;', '&', $$field );
- }
- } else {
- if ( isset( $author->user_id ) && $author->user_id ) {
- $author = $author->user_id;
- } elseif ( isset( $author->user_email ) ) {
- $author = $author->ID;
- } elseif ( isset( $author->post_author ) ) {
- // then $author is a Post Object.
- if ( 0 == $author->post_author )
- return null;
- /**
- * Filter whether the current site is a Jetpack site.
- *
- * @module json-api
- *
- * @since 3.3.0
- *
- * @param bool false Is the current site a Jetpack site. Default to false.
- * @param int get_current_blog_id() Blog ID.
- */
- $is_jetpack = true === apply_filters( 'is_jetpack_site', false, get_current_blog_id() );
- $post_id = $author->ID;
- if ( $is_jetpack && ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ) {
- $ID = get_post_meta( $post_id, '_jetpack_post_author_external_id', true );
- $email = get_post_meta( $post_id, '_jetpack_author_email', true );
- $login = '';
- $name = get_post_meta( $post_id, '_jetpack_author', true );
- $first_name = '';
- $last_name = '';
- $URL = '';
- $nice = '';
- } else {
- $author = $author->post_author;
- }
- }
-
- if ( ! isset( $ID ) ) {
- $user = get_user_by( 'id', $author );
- if ( ! $user || is_wp_error( $user ) ) {
- trigger_error( 'Unknown user', E_USER_WARNING );
-
- return null;
- }
- $ID = $user->ID;
- $email = $user->user_email;
- $login = $user->user_login;
- $name = $user->display_name;
- $first_name = $user->first_name;
- $last_name = $user->last_name;
- $URL = $user->user_url;
- $nice = $user->user_nicename;
- }
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM && ! $is_jetpack ) {
- $active_blog = get_active_blog_for_user( $ID );
- $site_id = $active_blog->blog_id;
- if ( $site_id > -1 ) {
- $site_visible = (
- -1 != $active_blog->public ||
- is_private_blog_user( $site_id, get_current_user_id() )
- );
- }
- $profile_URL = "https://en.gravatar.com/{$login}";
- } else {
- $profile_URL = 'https://en.gravatar.com/' . md5( strtolower( trim( $email ) ) );
- $site_id = -1;
- }
-
- $avatar_URL = $this->api->get_avatar_url( $email );
- }
-
- if ( $show_email_and_ip ) {
- $email = (string) $email;
- $ip_address = (string) $ip_address;
- } else {
- $email = false;
- $ip_address = false;
- }
-
- $author = array(
- 'ID' => (int) $ID,
- 'login' => (string) $login,
- 'email' => $email, // (string|bool)
- 'name' => (string) $name,
- 'first_name' => (string) $first_name,
- 'last_name' => (string) $last_name,
- 'nice_name' => (string) $nice,
- 'URL' => (string) esc_url_raw( $URL ),
- 'avatar_URL' => (string) esc_url_raw( $avatar_URL ),
- 'profile_URL' => (string) esc_url_raw( $profile_URL ),
- 'ip_address' => $ip_address, // (string|bool)
- );
-
- if ( $site_id > -1 ) {
- $author['site_ID'] = (int) $site_id;
- $author['site_visible'] = $site_visible;
- }
-
- return (object) $author;
- }
-
- function get_media_item( $media_id ) {
- $media_item = get_post( $media_id );
-
- if ( !$media_item || is_wp_error( $media_item ) )
- return new WP_Error( 'unknown_media', 'Unknown Media', 404 );
-
- $response = array(
- 'id' => strval( $media_item->ID ),
- 'date' => (string) $this->format_date( $media_item->post_date_gmt, $media_item->post_date ),
- 'parent' => $media_item->post_parent,
- 'link' => wp_get_attachment_url( $media_item->ID ),
- 'title' => $media_item->post_title,
- 'caption' => $media_item->post_excerpt,
- 'description' => $media_item->post_content,
- 'metadata' => wp_get_attachment_metadata( $media_item->ID ),
- );
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM && is_array( $response['metadata'] ) && ! empty( $response['metadata']['file'] ) ) {
- remove_filter( '_wp_relative_upload_path', 'wpcom_wp_relative_upload_path', 10 );
- $response['metadata']['file'] = _wp_relative_upload_path( $response['metadata']['file'] );
- add_filter( '_wp_relative_upload_path', 'wpcom_wp_relative_upload_path', 10, 2 );
- }
-
- $response['meta'] = (object) array(
- 'links' => (object) array(
- 'self' => (string) $this->links->get_media_link( $this->api->get_blog_id_for_output(), $media_id ),
- 'help' => (string) $this->links->get_media_link( $this->api->get_blog_id_for_output(), $media_id, 'help' ),
- 'site' => (string) $this->links->get_site_link( $this->api->get_blog_id_for_output() ),
- ),
- );
-
- return (object) $response;
- }
-
- function get_media_item_v1_1( $media_id, $media_item = null, $file = null ) {
-
- if ( ! $media_item ) {
- $media_item = get_post( $media_id );
- }
-
- if ( ! $media_item || is_wp_error( $media_item ) ) {
- return new WP_Error( 'unknown_media', 'Unknown Media', 404 );
- }
-
- $attachment_file = get_attached_file( $media_item->ID );
-
- $file = basename( $attachment_file ? $attachment_file : $file );
- $file_info = pathinfo( $file );
- $ext = isset( $file_info['extension'] ) ? $file_info['extension'] : null;
-
- $response = array(
- 'ID' => $media_item->ID,
- 'URL' => wp_get_attachment_url( $media_item->ID ),
- 'guid' => $media_item->guid,
- 'date' => (string) $this->format_date( $media_item->post_date_gmt, $media_item->post_date ),
- 'post_ID' => $media_item->post_parent,
- 'author_ID' => (int) $media_item->post_author,
- 'file' => $file,
- 'mime_type' => $media_item->post_mime_type,
- 'extension' => $ext,
- 'title' => $media_item->post_title,
- 'caption' => $media_item->post_excerpt,
- 'description' => $media_item->post_content,
- 'alt' => get_post_meta( $media_item->ID, '_wp_attachment_image_alt', true ),
- 'icon' => wp_mime_type_icon( $media_item->ID ),
- 'thumbnails' => array()
- );
-
- if ( in_array( $ext, array( 'jpg', 'jpeg', 'png', 'gif' ) ) ) {
- $metadata = wp_get_attachment_metadata( $media_item->ID );
- if ( isset( $metadata['height'], $metadata['width'] ) ) {
- $response['height'] = $metadata['height'];
- $response['width'] = $metadata['width'];
- }
-
- if ( isset( $metadata['sizes'] ) ) {
- /**
- * Filter the thumbnail sizes available for each attachment ID.
- *
- * @module json-api
- *
- * @since 3.9.0
- *
- * @param array $metadata['sizes'] Array of thumbnail sizes available for a given attachment ID.
- * @param string $media_id Attachment ID.
- */
- $sizes = apply_filters( 'rest_api_thumbnail_sizes', $metadata['sizes'], $media_item->ID );
- if ( is_array( $sizes ) ) {
- foreach ( $sizes as $size => $size_details ) {
- $response['thumbnails'][ $size ] = dirname( $response['URL'] ) . '/' . $size_details['file'];
- }
- /**
- * Filter the thumbnail URLs for attachment files.
- *
- * @module json-api
- *
- * @since 7.1.0
- *
- * @param array $metadata['sizes'] Array with thumbnail sizes as keys and URLs as values.
- */
- $response['thumbnails'] = apply_filters( 'rest_api_thumbnail_size_urls', $response['thumbnails'] );
- }
- }
-
- if ( isset( $metadata['image_meta'] ) ) {
- $response['exif'] = $metadata['image_meta'];
- }
- }
-
- if ( in_array( $ext, array( 'mp3', 'm4a', 'wav', 'ogg' ) ) ) {
- $metadata = wp_get_attachment_metadata( $media_item->ID );
- $response['length'] = $metadata['length'];
- $response['exif'] = $metadata;
- }
-
- $is_video = false;
-
- if (
- in_array( $ext, array( 'ogv', 'mp4', 'mov', 'wmv', 'avi', 'mpg', '3gp', '3g2', 'm4v' ) )
- ||
- $response['mime_type'] === 'video/videopress'
- ) {
- $is_video = true;
- }
-
-
- if ( $is_video ) {
- $metadata = wp_get_attachment_metadata( $media_item->ID );
-
- if ( isset( $metadata['height'], $metadata['width'] ) ) {
- $response['height'] = $metadata['height'];
- $response['width'] = $metadata['width'];
- }
-
- if ( isset( $metadata['length'] ) ) {
- $response['length'] = $metadata['length'];
- }
-
- // add VideoPress info
- if ( function_exists( 'video_get_info_by_blogpostid' ) ) {
- $info = video_get_info_by_blogpostid( $this->api->get_blog_id_for_output(), $media_item->ID );
-
- // If we failed to get VideoPress info, but it exists in the meta data (for some reason)
- // then let's use that.
- if ( false === $info && isset( $metadata['videopress'] ) ) {
- $info = (object) $metadata['videopress'];
- }
-
- // Thumbnails
- if ( function_exists( 'video_format_done' ) && function_exists( 'video_image_url_by_guid' ) ) {
- $response['thumbnails'] = array( 'fmt_hd' => '', 'fmt_dvd' => '', 'fmt_std' => '' );
- foreach ( $response['thumbnails'] as $size => $thumbnail_url ) {
- if ( video_format_done( $info, $size ) ) {
- $response['thumbnails'][ $size ] = video_image_url_by_guid( $info->guid, $size );
- } else {
- unset( $response['thumbnails'][ $size ] );
- }
- }
- }
-
- // If we didn't get VideoPress information (for some reason) then let's
- // not try and include it in the response.
- if ( isset( $info->guid ) ) {
- $response['videopress_guid'] = $info->guid;
- $response['videopress_processing_done'] = true;
- if ( '0000-00-00 00:00:00' === $info->finish_date_gmt ) {
- $response['videopress_processing_done'] = false;
- }
- }
- }
- }
-
- $response['thumbnails'] = (object) $response['thumbnails'];
-
- $response['meta'] = (object) array(
- 'links' => (object) array(
- 'self' => (string) $this->links->get_media_link( $this->api->get_blog_id_for_output(), $media_item->ID ),
- 'help' => (string) $this->links->get_media_link( $this->api->get_blog_id_for_output(), $media_item->ID, 'help' ),
- 'site' => (string) $this->links->get_site_link( $this->api->get_blog_id_for_output() ),
- ),
- );
-
- // add VideoPress link to the meta
- if ( isset ( $response['videopress_guid'] ) ) {
- if ( function_exists( 'video_get_info_by_blogpostid' ) ) {
- $response['meta']->links->videopress = (string) $this->links->get_link( '/videos/%s', $response['videopress_guid'], '' );
- }
- }
-
- if ( $media_item->post_parent > 0 ) {
- $response['meta']->links->parent = (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $media_item->post_parent );
- }
-
- return (object) $response;
- }
-
- function get_taxonomy( $taxonomy_id, $taxonomy_type, $context ) {
-
- $taxonomy = get_term_by( 'slug', $taxonomy_id, $taxonomy_type );
- /// keep updating this function
- if ( !$taxonomy || is_wp_error( $taxonomy ) ) {
- return new WP_Error( 'unknown_taxonomy', 'Unknown taxonomy', 404 );
- }
-
- return $this->format_taxonomy( $taxonomy, $taxonomy_type, $context );
- }
-
- function format_taxonomy( $taxonomy, $taxonomy_type, $context ) {
- // Permissions
- switch ( $context ) {
- case 'edit' :
- $tax = get_taxonomy( $taxonomy_type );
- if ( !current_user_can( $tax->cap->edit_terms ) )
- return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
- break;
- case 'display' :
- if ( -1 == get_option( 'blog_public' ) && ! current_user_can( 'read' ) ) {
- return new WP_Error( 'unauthorized', 'User cannot view taxonomy', 403 );
- }
- break;
- default :
- return new WP_Error( 'invalid_context', 'Invalid API CONTEXT', 400 );
- }
-
- $response = array();
- $response['ID'] = (int) $taxonomy->term_id;
- $response['name'] = (string) $taxonomy->name;
- $response['slug'] = (string) $taxonomy->slug;
- $response['description'] = (string) $taxonomy->description;
- $response['post_count'] = (int) $taxonomy->count;
- $response['feed_url'] = get_term_feed_link( $taxonomy->term_id, $taxonomy_type );
-
- if ( is_taxonomy_hierarchical( $taxonomy_type ) ) {
- $response['parent'] = (int) $taxonomy->parent;
- }
-
- $response['meta'] = (object) array(
- 'links' => (object) array(
- 'self' => (string) $this->links->get_taxonomy_link( $this->api->get_blog_id_for_output(), $taxonomy->slug, $taxonomy_type ),
- 'help' => (string) $this->links->get_taxonomy_link( $this->api->get_blog_id_for_output(), $taxonomy->slug, $taxonomy_type, 'help' ),
- 'site' => (string) $this->links->get_site_link( $this->api->get_blog_id_for_output() ),
- ),
- );
-
- return (object) $response;
- }
-
- /**
- * Returns ISO 8601 formatted datetime: 2011-12-08T01:15:36-08:00
- *
- * @param $date_gmt (string) GMT datetime string.
- * @param $date (string) Optional. Used to calculate the offset from GMT.
- *
- * @return string
- */
- function format_date( $date_gmt, $date = null ) {
- return WPCOM_JSON_API_Date::format_date( $date_gmt, $date );
- }
-
- /**
- * Parses a date string and returns the local and GMT representations
- * of that date & time in 'YYYY-MM-DD HH:MM:SS' format without
- * timezones or offsets. If the parsed datetime was not localized to a
- * particular timezone or offset we will assume it was given in GMT
- * relative to now and will convert it to local time using either the
- * timezone set in the options table for the blog or the GMT offset.
- *
- * @param datetime string
- *
- * @return array( $local_time_string, $gmt_time_string )
- */
- function parse_date( $date_string ) {
- $date_string_info = date_parse( $date_string );
- if ( is_array( $date_string_info ) && 0 === $date_string_info['error_count'] ) {
- // Check if it's already localized. Can't just check is_localtime because date_parse('oppossum') returns true; WTF, PHP.
- if ( isset( $date_string_info['zone'] ) && true === $date_string_info['is_localtime'] ) {
- $dt_local = clone $dt_utc = new DateTime( $date_string );
- $dt_utc->setTimezone( new DateTimeZone( 'UTC' ) );
- return array(
- (string) $dt_local->format( 'Y-m-d H:i:s' ),
- (string) $dt_utc->format( 'Y-m-d H:i:s' ),
- );
- }
-
- // It's parseable but no TZ info so assume UTC
- $dt_local = clone $dt_utc = new DateTime( $date_string, new DateTimeZone( 'UTC' ) );
- } else {
- // Could not parse time, use now in UTC
- $dt_local = clone $dt_utc = new DateTime( 'now', new DateTimeZone( 'UTC' ) );
- }
-
- // First try to use timezone as it's daylight savings aware.
- $timezone_string = get_option( 'timezone_string' );
- if ( $timezone_string ) {
- $tz = timezone_open( $timezone_string );
- if ( $tz ) {
- $dt_local->setTimezone( $tz );
- return array(
- (string) $dt_local->format( 'Y-m-d H:i:s' ),
- (string) $dt_utc->format( 'Y-m-d H:i:s' ),
- );
- }
- }
-
- // Fallback to GMT offset (in hours)
- // NOTE: TZ of $dt_local is still UTC, we simply modified the timestamp with an offset.
- $gmt_offset_seconds = intval( get_option( 'gmt_offset' ) * 3600 );
- $dt_local->modify("+{$gmt_offset_seconds} seconds");
- return array(
- (string) $dt_local->format( 'Y-m-d H:i:s' ),
- (string) $dt_utc->format( 'Y-m-d H:i:s' ),
- );
- }
-
- // Load the functions.php file for the current theme to get its post formats, CPTs, etc.
- function load_theme_functions() {
- // bail if we've done this already (can happen when calling /batch endpoint)
- if ( defined( 'REST_API_THEME_FUNCTIONS_LOADED' ) )
- return;
-
- // VIP context loading is handled elsewhere, so bail to prevent
- // duplicate loading. See `switch_to_blog_and_validate_user()`
- if ( function_exists( 'wpcom_is_vip' ) && wpcom_is_vip() ) {
- return;
- }
-
- define( 'REST_API_THEME_FUNCTIONS_LOADED', true );
-
- // the theme info we care about is found either within functions.php or one of the jetpack files.
- $function_files = array( '/functions.php', '/inc/jetpack.compat.php', '/inc/jetpack.php', '/includes/jetpack.compat.php' );
-
- $copy_dirs = array( get_template_directory() );
-
- // Is this a child theme? Load the child theme's functions file.
- if ( get_stylesheet_directory() !== get_template_directory() && wpcom_is_child_theme() ) {
- foreach ( $function_files as $function_file ) {
- if ( file_exists( get_stylesheet_directory() . $function_file ) ) {
- require_once( get_stylesheet_directory() . $function_file );
- }
- }
- $copy_dirs[] = get_stylesheet_directory();
- }
-
- foreach ( $function_files as $function_file ) {
- if ( file_exists( get_template_directory() . $function_file ) ) {
- require_once( get_template_directory() . $function_file );
- }
- }
-
- // add inc/wpcom.php and/or includes/wpcom.php
- wpcom_load_theme_compat_file();
-
- // Enable including additional directories or files in actions to be copied
- $copy_dirs = apply_filters( 'restapi_theme_action_copy_dirs', $copy_dirs );
-
- // since the stuff we care about (CPTS, post formats, are usually on setup or init hooks, we want to load those)
- $this->copy_hooks( 'after_setup_theme', 'restapi_theme_after_setup_theme', $copy_dirs );
-
- /**
- * Fires functions hooked onto `after_setup_theme` by the theme for the purpose of the REST API.
- *
- * The REST API does not load the theme when processing requests.
- * To enable theme-based functionality, the API will load the '/functions.php',
- * '/inc/jetpack.compat.php', '/inc/jetpack.php', '/includes/jetpack.compat.php files
- * of the theme (parent and child) and copy functions hooked onto 'after_setup_theme' within those files.
- *
- * @module json-api
- *
- * @since 3.2.0
- */
- do_action( 'restapi_theme_after_setup_theme' );
- $this->copy_hooks( 'init', 'restapi_theme_init', $copy_dirs );
-
- /**
- * Fires functions hooked onto `init` by the theme for the purpose of the REST API.
- *
- * The REST API does not load the theme when processing requests.
- * To enable theme-based functionality, the API will load the '/functions.php',
- * '/inc/jetpack.compat.php', '/inc/jetpack.php', '/includes/jetpack.compat.php files
- * of the theme (parent and child) and copy functions hooked onto 'init' within those files.
- *
- * @module json-api
- *
- * @since 3.2.0
- */
- do_action( 'restapi_theme_init' );
- }
-
- function copy_hooks( $from_hook, $to_hook, $base_paths ) {
- global $wp_filter;
- foreach ( $wp_filter as $hook => $actions ) {
-
- if ( $from_hook != $hook ) {
- continue;
- }
- if ( ! has_action( $hook ) ) {
- continue;
- }
-
- foreach ( $actions as $priority => $callbacks ) {
- foreach( $callbacks as $callback_key => $callback_data ) {
- $callback = $callback_data['function'];
-
- // use reflection api to determine filename where function is defined
- $reflection = $this->get_reflection( $callback );
-
- if ( false !== $reflection ) {
- $file_name = $reflection->getFileName();
- foreach( $base_paths as $base_path ) {
-
- // only copy hooks with functions which are part of the specified files
- if ( 0 === strpos( $file_name, $base_path ) ) {
- add_action(
- $to_hook,
- $callback_data['function'],
- $priority,
- $callback_data['accepted_args']
- );
- }
- }
- }
- }
- }
- }
- }
-
- function get_reflection( $callback ) {
- if ( is_array( $callback ) ) {
- list( $class, $method ) = $callback;
- return new ReflectionMethod( $class, $method );
- }
-
- if ( is_string( $callback ) && strpos( $callback, "::" ) !== false ) {
- list( $class, $method ) = explode( "::", $callback );
- return new ReflectionMethod( $class, $method );
- }
-
- if ( version_compare( PHP_VERSION, "5.3.0", ">=" ) && method_exists( $callback, "__invoke" ) ) {
- return new ReflectionMethod( $callback, "__invoke" );
- }
-
- if ( is_string( $callback ) && strpos( $callback, "::" ) == false && function_exists( $callback ) ) {
- return new ReflectionFunction( $callback );
- }
-
- return false;
- }
-
- /**
- * Check whether a user can view or edit a post type
- * @param string $post_type post type to check
- * @param string $context 'display' or 'edit'
- * @return bool
- */
- function current_user_can_access_post_type( $post_type, $context='display' ) {
- $post_type_object = get_post_type_object( $post_type );
- if ( ! $post_type_object ) {
- return false;
- }
-
- switch( $context ) {
- case 'edit':
- return current_user_can( $post_type_object->cap->edit_posts );
- case 'display':
- return $post_type_object->public || current_user_can( $post_type_object->cap->read_private_posts );
- default:
- return false;
- }
- }
-
- function is_post_type_allowed( $post_type ) {
- // if the post type is empty, that's fine, WordPress will default to post
- if ( empty( $post_type ) ) {
- return true;
- }
-
- // allow special 'any' type
- if ( 'any' == $post_type ) {
- return true;
- }
-
- // check for allowed types
- if ( in_array( $post_type, $this->_get_whitelisted_post_types() ) ) {
- return true;
- }
-
- if ( $post_type_object = get_post_type_object( $post_type ) ) {
- if ( ! empty( $post_type_object->show_in_rest ) ) {
- return $post_type_object->show_in_rest;
- }
- if ( ! empty( $post_type_object->publicly_queryable ) ) {
- return $post_type_object->publicly_queryable;
- }
- }
-
- return ! empty( $post_type_object->public );
- }
-
- /**
- * Gets the whitelisted post types that JP should allow access to.
- *
- * @return array Whitelisted post types.
- */
- protected function _get_whitelisted_post_types() {
- $allowed_types = array( 'post', 'page', 'revision' );
-
- /**
- * Filter the post types Jetpack has access to, and can synchronize with WordPress.com.
- *
- * @module json-api
- *
- * @since 2.2.3
- *
- * @param array $allowed_types Array of whitelisted post types. Default to `array( 'post', 'page', 'revision' )`.
- */
- $allowed_types = apply_filters( 'rest_api_allowed_post_types', $allowed_types );
-
- return array_unique( $allowed_types );
- }
-
- function handle_media_creation_v1_1( $media_files, $media_urls, $media_attrs = array(), $force_parent_id = false ) {
-
- add_filter( 'upload_mimes', array( $this, 'allow_video_uploads' ) );
-
- $media_ids = $errors = array();
- $user_can_upload_files = current_user_can( 'upload_files' ) || $this->api->is_authorized_with_upload_token();
- $media_attrs = array_values( $media_attrs ); // reset the keys
- $i = 0;
-
- if ( ! empty( $media_files ) ) {
- $this->api->trap_wp_die( 'upload_error' );
- foreach ( $media_files as $media_item ) {
- $_FILES['.api.media.item.'] = $media_item;
- if ( ! $user_can_upload_files ) {
- $media_id = new WP_Error( 'unauthorized', 'User cannot upload media.', 403 );
- } else {
- if ( $force_parent_id ) {
- $parent_id = absint( $force_parent_id );
- } elseif ( ! empty( $media_attrs[$i] ) && ! empty( $media_attrs[$i]['parent_id'] ) ) {
- $parent_id = absint( $media_attrs[$i]['parent_id'] );
- } else {
- $parent_id = 0;
- }
- $media_id = media_handle_upload( '.api.media.item.', $parent_id );
- }
- if ( is_wp_error( $media_id ) ) {
- $errors[$i]['file'] = $media_item['name'];
- $errors[$i]['error'] = $media_id->get_error_code();
- $errors[$i]['message'] = $media_id->get_error_message();
- } else {
- $media_ids[$i] = $media_id;
- }
-
- $i++;
- }
- $this->api->trap_wp_die( null );
- unset( $_FILES['.api.media.item.'] );
- }
-
- if ( ! empty( $media_urls ) ) {
- foreach ( $media_urls as $url ) {
- if ( ! $user_can_upload_files ) {
- $media_id = new WP_Error( 'unauthorized', 'User cannot upload media.', 403 );
- } else {
- if ( $force_parent_id ) {
- $parent_id = absint( $force_parent_id );
- } else if ( ! empty( $media_attrs[$i] ) && ! empty( $media_attrs[$i]['parent_id'] ) ) {
- $parent_id = absint( $media_attrs[$i]['parent_id'] );
- } else {
- $parent_id = 0;
- }
- $media_id = $this->handle_media_sideload( $url, $parent_id );
- }
- if ( is_wp_error( $media_id ) ) {
- $errors[$i] = array(
- 'file' => $url,
- 'error' => $media_id->get_error_code(),
- 'message' => $media_id->get_error_message(),
- );
- } elseif ( ! empty( $media_id ) ) {
- $media_ids[$i] = $media_id;
- }
-
- $i++;
- }
- }
-
- if ( ! empty( $media_attrs ) ) {
- foreach ( $media_ids as $index => $media_id ) {
- if ( empty( $media_attrs[$index] ) )
- continue;
-
- $attrs = $media_attrs[$index];
- $insert = array();
-
- // Attributes: Title, Caption, Description
-
- if ( isset( $attrs['title'] ) ) {
- $insert['post_title'] = $attrs['title'];
- }
-
- if ( isset( $attrs['caption'] ) ) {
- $insert['post_excerpt'] = $attrs['caption'];
- }
-
- if ( isset( $attrs['description'] ) ) {
- $insert['post_content'] = $attrs['description'];
- }
-
- if ( ! empty( $insert ) ) {
- $insert['ID'] = $media_id;
- wp_update_post( (object) $insert );
- }
-
- // Attributes: Alt
-
- if ( isset( $attrs['alt'] ) ) {
- $alt = wp_strip_all_tags( $attrs['alt'], true );
- update_post_meta( $media_id, '_wp_attachment_image_alt', $alt );
- }
-
- // Attributes: Artist, Album
-
- $id3_meta = array();
-
- foreach ( array( 'artist', 'album' ) as $key ) {
- if ( isset( $attrs[ $key ] ) ) {
- $id3_meta[ $key ] = wp_strip_all_tags( $attrs[ $key ], true );
- }
- }
-
- if ( ! empty( $id3_meta ) ) {
- // Before updating metadata, ensure that the item is audio
- $item = $this->get_media_item_v1_1( $media_id );
- if ( 0 === strpos( $item->mime_type, 'audio/' ) ) {
- wp_update_attachment_metadata( $media_id, $id3_meta );
- }
- }
- }
- }
-
- return array( 'media_ids' => $media_ids, 'errors' => $errors );
-
- }
-
- function handle_media_sideload( $url, $parent_post_id = 0, $type = 'any' ) {
- if ( ! function_exists( 'download_url' ) || ! function_exists( 'media_handle_sideload' ) )
- return false;
-
- // if we didn't get a URL, let's bail
- $parsed = @parse_url( $url );
- if ( empty( $parsed ) )
- return false;
-
- $tmp = download_url( $url );
- if ( is_wp_error( $tmp ) ) {
- return $tmp;
- }
-
- // First check to see if we get a mime-type match by file, otherwise, check to
- // see if WordPress supports this file as an image. If neither, then it is not supported.
- if ( ! $this->is_file_supported_for_sideloading( $tmp ) || 'image' === $type && ! file_is_displayable_image( $tmp ) ) {
- @unlink( $tmp );
- return new WP_Error( 'invalid_input', 'Invalid file type.', 403 );
- }
-
- // emulate a $_FILES entry
- $file_array = array(
- 'name' => basename( parse_url( $url, PHP_URL_PATH ) ),
- 'tmp_name' => $tmp,
- );
-
- $id = media_handle_sideload( $file_array, $parent_post_id );
- if ( file_exists( $tmp ) ) {
- @unlink( $tmp );
- }
-
- if ( is_wp_error( $id ) ) {
- return $id;
- }
-
- if ( ! $id || ! is_int( $id ) ) {
- return false;
- }
-
- return $id;
- }
-
- /**
- * Checks that the mime type of the specified file is among those in a filterable list of mime types.
- *
- * @param string $file Path to file to get its mime type.
- *
- * @return bool
- */
- protected function is_file_supported_for_sideloading( $file ) {
- if ( class_exists( 'finfo' ) ) { // php 5.3+
- // phpcs:ignore PHPCompatibility.PHP.NewClasses.finfoFound
- $finfo = new finfo( FILEINFO_MIME );
- $mime = explode( '; ', $finfo->file( $file ) );
- $type = $mime[0];
-
- } elseif ( function_exists( 'mime_content_type' ) ) { // PHP 5.2
- $type = mime_content_type( $file );
-
- } else {
- return false;
- }
-
- /**
- * Filter the list of supported mime types for media sideloading.
- *
- * @since 4.0.0
- *
- * @module json-api
- *
- * @param array $supported_mime_types Array of the supported mime types for media sideloading.
- */
- $supported_mime_types = apply_filters( 'jetpack_supported_media_sideload_types', array(
- 'image/png',
- 'image/jpeg',
- 'image/gif',
- 'image/bmp',
- 'video/quicktime',
- 'video/mp4',
- 'video/mpeg',
- 'video/ogg',
- 'video/3gpp',
- 'video/3gpp2',
- 'video/h261',
- 'video/h262',
- 'video/h264',
- 'video/x-msvideo',
- 'video/x-ms-wmv',
- 'video/x-ms-asf',
- ) );
-
- // If the type returned was not an array as expected, then we know we don't have a match.
- if ( ! is_array( $supported_mime_types ) ) {
- return false;
- }
-
- return in_array( $type, $supported_mime_types );
- }
-
- function allow_video_uploads( $mimes ) {
- // if we are on Jetpack, bail - Videos are already allowed
- if ( ! defined( 'IS_WPCOM' ) || !IS_WPCOM ) {
- return $mimes;
- }
-
- // extra check that this filter is only ever applied during REST API requests
- if ( ! defined( 'REST_API_REQUEST' ) || ! REST_API_REQUEST ) {
- return $mimes;
- }
-
- // bail early if they already have the upgrade..
- if ( get_option( 'video_upgrade' ) == '1' ) {
- return $mimes;
- }
-
- // lets whitelist to only specific clients right now
- $clients_allowed_video_uploads = array();
- /**
- * Filter the list of whitelisted video clients.
- *
- * @module json-api
- *
- * @since 3.2.0
- *
- * @param array $clients_allowed_video_uploads Array of whitelisted Video clients.
- */
- $clients_allowed_video_uploads = apply_filters( 'rest_api_clients_allowed_video_uploads', $clients_allowed_video_uploads );
- if ( !in_array( $this->api->token_details['client_id'], $clients_allowed_video_uploads ) ) {
- return $mimes;
- }
-
- $mime_list = wp_get_mime_types();
-
- $video_exts = explode( ' ', get_site_option( 'video_upload_filetypes', false, false ) );
- /**
- * Filter the video filetypes allowed on the site.
- *
- * @module json-api
- *
- * @since 3.2.0
- *
- * @param array $video_exts Array of video filetypes allowed on the site.
- */
- $video_exts = apply_filters( 'video_upload_filetypes', $video_exts );
- $video_mimes = array();
-
- if ( !empty( $video_exts ) ) {
- foreach ( $video_exts as $ext ) {
- foreach ( $mime_list as $ext_pattern => $mime ) {
- if ( $ext != '' && strpos( $ext_pattern, $ext ) !== false )
- $video_mimes[$ext_pattern] = $mime;
- }
- }
-
- $mimes = array_merge( $mimes, $video_mimes );
- }
-
- return $mimes;
- }
-
- function is_current_site_multi_user() {
- $users = wp_cache_get( 'site_user_count', 'WPCOM_JSON_API_Endpoint' );
- if ( false === $users ) {
- $user_query = new WP_User_Query( array(
- 'blog_id' => get_current_blog_id(),
- 'fields' => 'ID',
- ) );
- $users = (int) $user_query->get_total();
- wp_cache_set( 'site_user_count', $users, 'WPCOM_JSON_API_Endpoint', DAY_IN_SECONDS );
- }
- return $users > 1;
- }
-
- function allows_cross_origin_requests() {
- return 'GET' == $this->method || $this->allow_cross_origin_request;
- }
-
- function allows_unauthorized_requests( $origin, $complete_access_origins ) {
- return 'GET' == $this->method || ( $this->allow_unauthorized_request && in_array( $origin, $complete_access_origins ) );
- }
-
- function get_platform() {
- return wpcom_get_sal_platform( $this->api->token_details );
- }
-
- /**
- * Allows the endpoint to perform logic to allow it to decide whether-or-not it should force a
- * response from the WPCOM API, or potentially go to the Jetpack blog.
- *
- * Override this method if you want to do something different.
- *
- * @param int $blog_id
- * @return bool
- */
- function force_wpcom_request( $blog_id ) {
- return false;
- }
-
- /**
- * Return endpoint response
- *
- * @param ... determined by ->$path
- *
- * @return
- * falsy: HTTP 500, no response body
- * WP_Error( $error_code, $error_message, $http_status_code ): HTTP $status_code, json_encode( array( 'error' => $error_code, 'message' => $error_message ) ) response body
- * $data: HTTP 200, json_encode( $data ) response body
- */
- abstract function callback( $path = '' );
-
-
-}
-
-require_once( dirname( __FILE__ ) . '/json-endpoints.php' );
diff --git a/plugins/jetpack/class.json-api.php b/plugins/jetpack/class.json-api.php
deleted file mode 100644
index 2a20dd05..00000000
--- a/plugins/jetpack/class.json-api.php
+++ /dev/null
@@ -1,782 +0,0 @@
-<?php
-
-defined( 'WPCOM_JSON_API__DEBUG' ) or define( 'WPCOM_JSON_API__DEBUG', false );
-
-require_once dirname( __FILE__ ) . '/sal/class.json-api-platform.php';
-
-class WPCOM_JSON_API {
- static $self = null;
-
- public $endpoints = array();
-
- public $token_details = array();
-
- public $method = '';
- public $url = '';
- public $path = '';
- public $version = null;
- public $query = array();
- public $post_body = null;
- public $files = null;
- public $content_type = null;
- public $accept = '';
-
- public $_server_https;
- public $exit = true;
- public $public_api_scheme = 'https';
-
- public $output_status_code = 200;
-
- public $trapped_error = null;
- public $did_output = false;
-
- public $extra_headers = array();
-
- /**
- * @return WPCOM_JSON_API instance
- */
- static function init( $method = null, $url = null, $post_body = null ) {
- if ( !self::$self ) {
- $class = function_exists( 'get_called_class' ) ? get_called_class() : __CLASS__; // phpcs:ignore PHPCompatibility.PHP.NewFunctions.get_called_classFound
- self::$self = new $class( $method, $url, $post_body );
- }
- return self::$self;
- }
-
- function add( WPCOM_JSON_API_Endpoint $endpoint ) {
- $path_versions = serialize( array (
- $endpoint->path,
- $endpoint->min_version,
- $endpoint->max_version,
- ) );
- if ( !isset( $this->endpoints[$path_versions] ) ) {
- $this->endpoints[$path_versions] = array();
- }
- $this->endpoints[$path_versions][$endpoint->method] = $endpoint;
- }
-
- static function is_truthy( $value ) {
- switch ( strtolower( (string) $value ) ) {
- case '1' :
- case 't' :
- case 'true' :
- return true;
- }
-
- return false;
- }
-
- static function is_falsy( $value ) {
- switch ( strtolower( (string) $value ) ) {
- case '0' :
- case 'f' :
- case 'false' :
- return true;
- }
-
- return false;
- }
-
- function __construct() {
- $args = func_get_args();
- call_user_func_array( array( $this, 'setup_inputs' ), $args );
- }
-
- function setup_inputs( $method = null, $url = null, $post_body = null ) {
- if ( is_null( $method ) ) {
- $this->method = strtoupper( $_SERVER['REQUEST_METHOD'] );
- } else {
- $this->method = strtoupper( $method );
- }
- if ( is_null( $url ) ) {
- $this->url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
- } else {
- $this->url = $url;
- }
-
- $parsed = parse_url( $this->url );
- $this->path = $parsed['path'];
-
- if ( !empty( $parsed['query'] ) ) {
- wp_parse_str( $parsed['query'], $this->query );
- }
-
- if ( isset( $_SERVER['HTTP_ACCEPT'] ) && $_SERVER['HTTP_ACCEPT'] ) {
- $this->accept = $_SERVER['HTTP_ACCEPT'];
- }
-
- if ( 'POST' === $this->method ) {
- if ( is_null( $post_body ) ) {
- $this->post_body = file_get_contents( 'php://input' );
-
- if ( isset( $_SERVER['HTTP_CONTENT_TYPE'] ) && $_SERVER['HTTP_CONTENT_TYPE'] ) {
- $this->content_type = $_SERVER['HTTP_CONTENT_TYPE'];
- } elseif ( isset( $_SERVER['CONTENT_TYPE'] ) && $_SERVER['CONTENT_TYPE'] ) {
- $this->content_type = $_SERVER['CONTENT_TYPE'] ;
- } elseif ( '{' === $this->post_body[0] ) {
- $this->content_type = 'application/json';
- } else {
- $this->content_type = 'application/x-www-form-urlencoded';
- }
-
- if ( 0 === strpos( strtolower( $this->content_type ), 'multipart/' ) ) {
- $this->post_body = http_build_query( stripslashes_deep( $_POST ) );
- $this->files = $_FILES;
- $this->content_type = 'multipart/form-data';
- }
- } else {
- $this->post_body = $post_body;
- $this->content_type = '{' === isset( $this->post_body[0] ) && $this->post_body[0] ? 'application/json' : 'application/x-www-form-urlencoded';
- }
- } else {
- $this->post_body = null;
- $this->content_type = null;
- }
-
- $this->_server_https = array_key_exists( 'HTTPS', $_SERVER ) ? $_SERVER['HTTPS'] : '--UNset--';
- }
-
- function initialize() {
- $this->token_details['blog_id'] = Jetpack_Options::get_option( 'id' );
- }
-
- function serve( $exit = true ) {
- ini_set( 'display_errors', false );
-
- $this->exit = (bool) $exit;
-
- // This was causing problems with Jetpack, but is necessary for wpcom
- // @see https://github.com/Automattic/jetpack/pull/2603
- // @see r124548-wpcom
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- add_filter( 'home_url', array( $this, 'ensure_http_scheme_of_home_url' ), 10, 3 );
- }
-
- add_filter( 'user_can_richedit', '__return_true' );
-
- add_filter( 'comment_edit_pre', array( $this, 'comment_edit_pre' ) );
-
- $initialization = $this->initialize();
- if ( 'OPTIONS' == $this->method ) {
- /**
- * Fires before the page output.
- * Can be used to specify custom header options.
- *
- * @module json-api
- *
- * @since 3.1.0
- */
- do_action( 'wpcom_json_api_options' );
- return $this->output( 200, '', 'text/plain' );
- }
-
- if ( is_wp_error( $initialization ) ) {
- $this->output_error( $initialization );
- return;
- }
-
- // Normalize path and extract API version
- $this->path = untrailingslashit( $this->path );
- preg_match( '#^/rest/v(\d+(\.\d+)*)#', $this->path, $matches );
- $this->path = substr( $this->path, strlen( $matches[0] ) );
- $this->version = $matches[1];
-
- $allowed_methods = array( 'GET', 'POST' );
- $four_oh_five = false;
-
- $is_help = preg_match( '#/help/?$#i', $this->path );
- $matching_endpoints = array();
-
- if ( $is_help ) {
- $origin = get_http_origin();
-
- if ( !empty( $origin ) && 'GET' == $this->method ) {
- header( 'Access-Control-Allow-Origin: ' . esc_url_raw( $origin ) );
- }
-
- $this->path = substr( rtrim( $this->path, '/' ), 0, -5 );
- // Show help for all matching endpoints regardless of method
- $methods = $allowed_methods;
- $find_all_matching_endpoints = true;
- // How deep to truncate each endpoint's path to see if it matches this help request
- $depth = substr_count( $this->path, '/' ) + 1;
- if ( false !== stripos( $this->accept, 'javascript' ) || false !== stripos( $this->accept, 'json' ) ) {
- $help_content_type = 'json';
- } else {
- $help_content_type = 'html';
- }
- } else {
- if ( in_array( $this->method, $allowed_methods ) ) {
- // Only serve requested method
- $methods = array( $this->method );
- $find_all_matching_endpoints = false;
- } else {
- // We don't allow this requested method - find matching endpoints and send 405
- $methods = $allowed_methods;
- $find_all_matching_endpoints = true;
- $four_oh_five = true;
- }
- }
-
- // Find which endpoint to serve
- $found = false;
- foreach ( $this->endpoints as $endpoint_path_versions => $endpoints_by_method ) {
- $endpoint_path_versions = unserialize( $endpoint_path_versions );
- $endpoint_path = $endpoint_path_versions[0];
- $endpoint_min_version = $endpoint_path_versions[1];
- $endpoint_max_version = $endpoint_path_versions[2];
-
- // Make sure max_version is not less than min_version
- if ( version_compare( $endpoint_max_version, $endpoint_min_version, '<' ) ) {
- $endpoint_max_version = $endpoint_min_version;
- }
-
- foreach ( $methods as $method ) {
- if ( !isset( $endpoints_by_method[$method] ) ) {
- continue;
- }
-
- // Normalize
- $endpoint_path = untrailingslashit( $endpoint_path );
- if ( $is_help ) {
- // Truncate path at help depth
- $endpoint_path = join( '/', array_slice( explode( '/', $endpoint_path ), 0, $depth ) );
- }
-
- // Generate regular expression from sprintf()
- $endpoint_path_regex = str_replace( array( '%s', '%d' ), array( '([^/?&]+)', '(\d+)' ), $endpoint_path );
-
- if ( !preg_match( "#^$endpoint_path_regex\$#", $this->path, $path_pieces ) ) {
- // This endpoint does not match the requested path.
- continue;
- }
-
- if ( version_compare( $this->version, $endpoint_min_version, '<' ) || version_compare( $this->version, $endpoint_max_version, '>' ) ) {
- // This endpoint does not match the requested version.
- continue;
- }
-
- $found = true;
-
- if ( $find_all_matching_endpoints ) {
- $matching_endpoints[] = array( $endpoints_by_method[$method], $path_pieces );
- } else {
- // The method parameters are now in $path_pieces
- $endpoint = $endpoints_by_method[$method];
- break 2;
- }
- }
- }
-
- if ( !$found ) {
- return $this->output( 404, '', 'text/plain' );
- }
-
- if ( $four_oh_five ) {
- $allowed_methods = array();
- foreach ( $matching_endpoints as $matching_endpoint ) {
- $allowed_methods[] = $matching_endpoint[0]->method;
- }
-
- header( 'Allow: ' . strtoupper( join( ',', array_unique( $allowed_methods ) ) ) );
- return $this->output( 405, array( 'error' => 'not_allowed', 'error_message' => 'Method not allowed' ) );
- }
-
- if ( $is_help ) {
- /**
- * Fires before the API output.
- *
- * @since 1.9.0
- *
- * @param string help.
- */
- do_action( 'wpcom_json_api_output', 'help' );
- $proxied = function_exists( 'wpcom_is_proxied_request' ) ? wpcom_is_proxied_request() : false;
- if ( 'json' === $help_content_type ) {
- $docs = array();
- foreach ( $matching_endpoints as $matching_endpoint ) {
- if ( $matching_endpoint[0]->is_publicly_documentable() || $proxied || WPCOM_JSON_API__DEBUG )
- $docs[] = call_user_func( array( $matching_endpoint[0], 'generate_documentation' ) );
- }
- return $this->output( 200, $docs );
- } else {
- status_header( 200 );
- foreach ( $matching_endpoints as $matching_endpoint ) {
- if ( $matching_endpoint[0]->is_publicly_documentable() || $proxied || WPCOM_JSON_API__DEBUG )
- call_user_func( array( $matching_endpoint[0], 'document' ) );
- }
- }
- exit;
- }
-
- if ( $endpoint->in_testing && !WPCOM_JSON_API__DEBUG ) {
- return $this->output( 404, '', 'text/plain' );
- }
-
- /** This action is documented in class.json-api.php */
- do_action( 'wpcom_json_api_output', $endpoint->stat );
-
- $response = $this->process_request( $endpoint, $path_pieces );
-
- if ( !$response && !is_array( $response ) ) {
- return $this->output( 500, '', 'text/plain' );
- } elseif ( is_wp_error( $response ) ) {
- return $this->output_error( $response );
- }
-
- $output_status_code = $this->output_status_code;
- $this->set_output_status_code();
-
- return $this->output( $output_status_code, $response, 'application/json', $this->extra_headers );
- }
-
- function process_request( WPCOM_JSON_API_Endpoint $endpoint, $path_pieces ) {
- $this->endpoint = $endpoint;
- return call_user_func_array( array( $endpoint, 'callback' ), $path_pieces );
- }
-
- function output_early( $status_code, $response = null, $content_type = 'application/json' ) {
- $exit = $this->exit;
- $this->exit = false;
- if ( is_wp_error( $response ) )
- $this->output_error( $response );
- else
- $this->output( $status_code, $response, $content_type );
- $this->exit = $exit;
- if ( ! defined( 'XMLRPC_REQUEST' ) || ! XMLRPC_REQUEST ) {
- $this->finish_request();
- }
- }
-
- function set_output_status_code( $code = 200 ) {
- $this->output_status_code = $code;
- }
-
- function output( $status_code, $response = null, $content_type = 'application/json', $extra = array() ) {
- // In case output() was called before the callback returned
- if ( $this->did_output ) {
- if ( $this->exit )
- exit;
- return $content_type;
- }
- $this->did_output = true;
-
- // 400s and 404s are allowed for all origins
- if ( 404 == $status_code || 400 == $status_code )
- header( 'Access-Control-Allow-Origin: *' );
-
- if ( is_null( $response ) ) {
- $response = new stdClass;
- }
-
- if ( 'text/plain' === $content_type ) {
- status_header( (int) $status_code );
- header( 'Content-Type: text/plain' );
- foreach( $extra as $key => $value ) {
- header( "$key: $value" );
- }
- echo $response;
- if ( $this->exit ) {
- exit;
- }
-
- return $content_type;
- }
-
- $response = $this->filter_fields( $response );
-
- if ( isset( $this->query['http_envelope'] ) && self::is_truthy( $this->query['http_envelope'] ) ) {
- $headers = array(
- array(
- 'name' => 'Content-Type',
- 'value' => $content_type,
- )
- );
-
- foreach( $extra as $key => $value ) {
- $headers[] = array( 'name' => $key, 'value' => $value );
- }
-
- $response = array(
- 'code' => (int) $status_code,
- 'headers' => $headers,
- 'body' => $response,
- );
- $status_code = 200;
- $content_type = 'application/json';
- }
-
- status_header( (int) $status_code );
- header( "Content-Type: $content_type" );
- if ( isset( $this->query['callback'] ) && is_string( $this->query['callback'] ) ) {
- $callback = preg_replace( '/[^a-z0-9_.]/i', '', $this->query['callback'] );
- } else {
- $callback = false;
- }
-
- if ( $callback ) {
- // Mitigate Rosetta Flash [1] by setting the Content-Type-Options: nosniff header
- // and by prepending the JSONP response with a JS comment.
- // [1] http://miki.it/blog/2014/7/8/abusing-jsonp-with-rosetta-flash/
- echo "/**/$callback(";
-
- }
- echo $this->json_encode( $response );
- if ( $callback ) {
- echo ");";
- }
-
- if ( $this->exit ) {
- exit;
- }
-
- return $content_type;
- }
-
- public static function serializable_error ( $error ) {
-
- $status_code = $error->get_error_data();
-
- if ( is_array( $status_code ) ) {
- $status_code = $status_code['status_code'];
- }
-
- if ( !$status_code ) {
- $status_code = 400;
- }
- $response = array(
- 'error' => $error->get_error_code(),
- 'message' => $error->get_error_message(),
- );
-
- if ( $additional_data = $error->get_error_data( 'additional_data' ) ) {
- $response['data'] = $additional_data;
- }
-
- return array(
- 'status_code' => $status_code,
- 'errors' => $response
- );
- }
-
- function output_error( $error ) {
- $error_response = $this->serializable_error( $error );
-
- return $this->output( $error_response[ 'status_code'], $error_response['errors'] );
- }
-
- function filter_fields( $response ) {
- if ( empty( $this->query['fields'] ) || ( is_array( $response ) && ! empty( $response['error'] ) ) || ! empty( $this->endpoint->custom_fields_filtering ) )
- return $response;
-
- $fields = array_map( 'trim', explode( ',', $this->query['fields'] ) );
-
- if ( is_object( $response ) ) {
- $response = (array) $response;
- }
-
- $has_filtered = false;
- if ( is_array( $response ) && empty( $response['ID'] ) ) {
- $keys_to_filter = array(
- 'categories',
- 'comments',
- 'connections',
- 'domains',
- 'groups',
- 'likes',
- 'media',
- 'notes',
- 'posts',
- 'services',
- 'sites',
- 'suggestions',
- 'tags',
- 'themes',
- 'topics',
- 'users',
- );
-
- foreach ( $keys_to_filter as $key_to_filter ) {
- if ( ! isset( $response[ $key_to_filter ] ) || $has_filtered )
- continue;
-
- foreach ( $response[ $key_to_filter ] as $key => $values ) {
- if ( is_object( $values ) ) {
- if ( is_object( $response[ $key_to_filter ] ) ) {
- $response[ $key_to_filter ]->$key = (object) array_intersect_key( ( (array) $values ), array_flip( $fields ) );
- } elseif ( is_array( $response[ $key_to_filter ] ) ) {
- $response[ $key_to_filter ][ $key ] = (object) array_intersect_key( ( (array) $values ), array_flip( $fields ) );
- }
- } elseif ( is_array( $values ) ) {
- $response[ $key_to_filter ][ $key ] = array_intersect_key( $values, array_flip( $fields ) );
- }
- }
-
- $has_filtered = true;
- }
- }
-
- if ( ! $has_filtered ) {
- if ( is_object( $response ) ) {
- $response = (object) array_intersect_key( (array) $response, array_flip( $fields ) );
- } else if ( is_array( $response ) ) {
- $response = array_intersect_key( $response, array_flip( $fields ) );
- }
- }
-
- return $response;
- }
-
- function ensure_http_scheme_of_home_url( $url, $path, $original_scheme ) {
- if ( $original_scheme ) {
- return $url;
- }
-
- return preg_replace( '#^https:#', 'http:', $url );
- }
-
- function comment_edit_pre( $comment_content ) {
- return htmlspecialchars_decode( $comment_content, ENT_QUOTES );
- }
-
- function json_encode( $data ) {
- return json_encode( $data );
- }
-
- function ends_with( $haystack, $needle ) {
- return $needle === substr( $haystack, -strlen( $needle ) );
- }
-
- // Returns the site's blog_id in the WP.com ecosystem
- function get_blog_id_for_output() {
- return $this->token_details['blog_id'];
- }
-
- // Returns the site's local blog_id
- function get_blog_id( $blog_id ) {
- return $GLOBALS['blog_id'];
- }
-
- function switch_to_blog_and_validate_user( $blog_id = 0, $verify_token_for_blog = true ) {
- if ( $this->is_restricted_blog( $blog_id ) ) {
- return new WP_Error( 'unauthorized', 'User cannot access this restricted blog', 403 );
- }
-
- if ( -1 == get_option( 'blog_public' ) && !current_user_can( 'read' ) ) {
- return new WP_Error( 'unauthorized', 'User cannot access this private blog.', 403 );
- }
-
- return $blog_id;
- }
-
- // Returns true if the specified blog ID is a restricted blog
- function is_restricted_blog( $blog_id ) {
- /**
- * Filters all REST API access and return a 403 unauthorized response for all Restricted blog IDs.
- *
- * @module json-api
- *
- * @since 3.4.0
- *
- * @param array $array Array of Blog IDs.
- */
- $restricted_blog_ids = apply_filters( 'wpcom_json_api_restricted_blog_ids', array() );
- return true === in_array( $blog_id, $restricted_blog_ids );
- }
-
- function post_like_count( $blog_id, $post_id ) {
- return 0;
- }
-
- function is_liked( $blog_id, $post_id ) {
- return false;
- }
-
- function is_reblogged( $blog_id, $post_id ) {
- return false;
- }
-
- function is_following( $blog_id ) {
- return false;
- }
-
- function add_global_ID( $blog_id, $post_id ) {
- return '';
- }
-
- function get_avatar_url( $email, $avatar_size = null ) {
- if ( function_exists( 'wpcom_get_avatar_url' ) ) {
- return null === $avatar_size
- ? wpcom_get_avatar_url( $email )
- : wpcom_get_avatar_url( $email, $avatar_size );
- } else {
- return null === $avatar_size
- ? get_avatar_url( $email )
- : get_avatar_url( $email, $avatar_size );
- }
- }
-
- /**
- * Counts the number of comments on a site, excluding certain comment types.
- *
- * @param $post_id int Post ID.
- * @return array Array of counts, matching the output of https://developer.wordpress.org/reference/functions/get_comment_count/.
- */
- public function wp_count_comments( $post_id ) {
- global $wpdb;
- if ( 0 !== $post_id ) {
- return wp_count_comments( $post_id );
- }
-
- $counts = array(
- 'total_comments' => 0,
- 'all' => 0,
- );
-
- /**
- * Exclude certain comment types from comment counts in the REST API.
- *
- * @since 6.9.0
- * @module json-api
- *
- * @param array Array of comment types to exclude (default: 'order_note', 'webhook_delivery', 'review', 'action_log')
- */
- $exclude = apply_filters( 'jetpack_api_exclude_comment_types_count',
- array( 'order_note', 'webhook_delivery', 'review', 'action_log' )
- );
-
- if ( empty( $exclude ) ) {
- return wp_count_comments( $post_id );
- }
-
- array_walk( $exclude, 'esc_sql' );
- $where = sprintf(
- "WHERE comment_type NOT IN ( '%s' )",
- implode( "','", $exclude )
- );
-
- $count = $wpdb->get_results(
- "SELECT comment_approved, COUNT(*) AS num_comments
- FROM $wpdb->comments
- {$where}
- GROUP BY comment_approved
- "
- );
-
- $approved = array(
- '0' => 'moderated',
- '1' => 'approved',
- 'spam' => 'spam',
- 'trash' => 'trash',
- 'post-trashed' => 'post-trashed',
- );
-
- // https://developer.wordpress.org/reference/functions/get_comment_count/#source
- foreach ( $count as $row ) {
- if ( ! in_array( $row->comment_approved, array( 'post-trashed', 'trash', 'spam' ), true ) ) {
- $counts['all'] += $row->num_comments;
- $counts['total_comments'] += $row->num_comments;
- } elseif ( ! in_array( $row->comment_approved, array( 'post-trashed', 'trash' ), true ) ) {
- $counts['total_comments'] += $row->num_comments;
- }
- if ( isset( $approved[ $row->comment_approved ] ) ) {
- $counts[ $approved[ $row->comment_approved ] ] = $row->num_comments;
- }
- }
-
- foreach ( $approved as $key ) {
- if ( empty( $counts[ $key ] ) ) {
- $counts[ $key ] = 0;
- }
- }
-
- $counts = (object) $counts;
-
- return $counts;
- }
-
- /**
- * traps `wp_die()` calls and outputs a JSON response instead.
- * The result is always output, never returned.
- *
- * @param string|null $error_code Call with string to start the trapping. Call with null to stop.
- * @param int $http_status HTTP status code, 400 by default.
- */
- function trap_wp_die( $error_code = null, $http_status = 400 ) {
- if ( is_null( $error_code ) ) {
- $this->trapped_error = null;
- // Stop trapping
- remove_filter( 'wp_die_handler', array( $this, 'wp_die_handler_callback' ) );
- return;
- }
-
- // If API called via PHP, bail: don't do our custom wp_die(). Do the normal wp_die().
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- if ( ! defined( 'REST_API_REQUEST' ) || ! REST_API_REQUEST ) {
- return;
- }
- } else {
- if ( ! defined( 'XMLRPC_REQUEST' ) || ! XMLRPC_REQUEST ) {
- return;
- }
- }
-
- $this->trapped_error = array(
- 'status' => $http_status,
- 'code' => $error_code,
- 'message' => '',
- );
- // Start trapping
- add_filter( 'wp_die_handler', array( $this, 'wp_die_handler_callback' ) );
- }
-
- function wp_die_handler_callback() {
- return array( $this, 'wp_die_handler' );
- }
-
- function wp_die_handler( $message, $title = '', $args = array() ) {
- // Allow wp_die calls to override HTTP status code...
- $args = wp_parse_args( $args, array(
- 'response' => $this->trapped_error['status'],
- ) );
-
- // ... unless it's 500 ( see http://wp.me/pMz3w-5VV )
- if ( (int) $args['response'] !== 500 ) {
- $this->trapped_error['status'] = $args['response'];
- }
-
- if ( $title ) {
- $message = "$title: $message";
- }
-
- $this->trapped_error['message'] = wp_kses( $message, array() );
-
- switch ( $this->trapped_error['code'] ) {
- case 'comment_failure' :
- if ( did_action( 'comment_duplicate_trigger' ) ) {
- $this->trapped_error['code'] = 'comment_duplicate';
- } else if ( did_action( 'comment_flood_trigger' ) ) {
- $this->trapped_error['code'] = 'comment_flood';
- }
- break;
- }
-
- // We still want to exit so that code execution stops where it should.
- // Attach the JSON output to the WordPress shutdown handler
- add_action( 'shutdown', array( $this, 'output_trapped_error' ), 0 );
- exit;
- }
-
- function output_trapped_error() {
- $this->exit = false; // We're already exiting once. Don't do it twice.
- $this->output( $this->trapped_error['status'], (object) array(
- 'error' => $this->trapped_error['code'],
- 'message' => $this->trapped_error['message'],
- ) );
- }
-
- function finish_request() {
- if ( function_exists( 'fastcgi_finish_request' ) )
- return fastcgi_finish_request();
- }
-}
diff --git a/plugins/jetpack/class.photon.php b/plugins/jetpack/class.photon.php
deleted file mode 100644
index 1a06b899..00000000
--- a/plugins/jetpack/class.photon.php
+++ /dev/null
@@ -1,1265 +0,0 @@
-<?php
-
-class Jetpack_Photon {
- /**
- * Class variables
- */
- // Oh look, a singleton
- private static $__instance = null;
-
- // Allowed extensions must match http://code.trac.wordpress.org/browser/photon/index.php#L31
- protected static $extensions = array(
- 'gif',
- 'jpg',
- 'jpeg',
- 'png'
- );
-
- // Don't access this directly. Instead, use self::image_sizes() so it's actually populated with something.
- protected static $image_sizes = null;
-
- /**
- * Singleton implementation
- *
- * @return object
- */
- public static function instance() {
- if ( ! is_a( self::$__instance, 'Jetpack_Photon' ) ) {
- self::$__instance = new Jetpack_Photon;
- self::$__instance->setup();
- }
-
- return self::$__instance;
- }
-
- /**
- * Silence is golden.
- */
- private function __construct() {}
-
- /**
- * Register actions and filters, but only if basic Photon functions are available.
- * The basic functions are found in ./functions.photon.php.
- *
- * @uses add_action, add_filter
- * @return null
- */
- private function setup() {
- if ( ! function_exists( 'jetpack_photon_url' ) ) {
- return;
- }
-
- // Images in post content and galleries
- add_filter( 'the_content', array( __CLASS__, 'filter_the_content' ), 999999 );
- add_filter( 'get_post_galleries', array( __CLASS__, 'filter_the_galleries' ), 999999 );
- add_filter( 'widget_media_image_instance', array( __CLASS__, 'filter_the_image_widget' ), 999999 );
-
- // Core image retrieval
- add_filter( 'image_downsize', array( $this, 'filter_image_downsize' ), 10, 3 );
- add_filter( 'rest_request_before_callbacks', array( $this, 'should_rest_photon_image_downsize' ), 10, 3 );
- add_filter( 'rest_request_after_callbacks', array( $this, 'cleanup_rest_photon_image_downsize' ) );
-
- // Responsive image srcset substitution
- add_filter( 'wp_calculate_image_srcset', array( $this, 'filter_srcset_array' ), 10, 5 );
- add_filter( 'wp_calculate_image_sizes', array( $this, 'filter_sizes' ), 1, 2 ); // Early so themes can still easily filter.
-
- // Helpers for maniuplated images
- add_action( 'wp_enqueue_scripts', array( $this, 'action_wp_enqueue_scripts' ), 9 );
-
- /**
- * Allow Photon to disable uploaded images resizing and use its own resize capabilities instead.
- *
- * @module photon
- *
- * @since 7.1.0
- *
- * @param bool false Should Photon enable noresize mode. Default to false.
- */
- if ( apply_filters( 'jetpack_photon_noresize_mode', false ) ) {
- $this->enable_noresize_mode();
- }
- }
-
- /**
- * Enables the noresize mode for Photon, allowing to avoid intermediate size files generation.
- */
- private function enable_noresize_mode() {
- jetpack_require_lib( 'class.jetpack-photon-image-sizes' );
-
- // The main objective of noresize mode is to disable additional resized image versions creation.
- // This filter handles removal of additional sizes.
- add_filter( 'intermediate_image_sizes_advanced', array( __CLASS__, 'filter_photon_noresize_intermediate_sizes' ) );
-
- // Load the noresize srcset solution on priority of 20, allowing other plugins to set sizes earlier.
- add_filter( 'wp_get_attachment_metadata', array( __CLASS__, 'filter_photon_norezise_maybe_inject_sizes' ), 20, 2 );
-
- // Photonize thumbnail URLs in the API response.
- add_filter( 'rest_api_thumbnail_size_urls', array( __CLASS__, 'filter_photon_noresize_thumbnail_urls' ) );
-
- // This allows to assign the Photon domain to images that normally use the home URL as base.
- add_filter( 'jetpack_photon_domain', array( __CLASS__, 'filter_photon_norezise_domain' ), 10, 2 );
-
- add_filter( 'the_content', array( __CLASS__, 'filter_content_add' ), 0 );
-
- // Jetpack hooks in at six nines (999999) so this filter does at seven.
- add_filter( 'the_content', array( __CLASS__, 'filter_content_remove' ), 9999999 );
-
- // Regular Photon operation mode filter doesn't run when is_admin(), so we need an additional filter.
- // This is temporary until Jetpack allows more easily running these filters for is_admin().
- if ( is_admin() ) {
- add_filter( 'image_downsize', array( $this, 'filter_image_downsize' ), 5, 3 );
-
- // Allows any image that gets passed to Photon to be resized via Photon.
- add_filter( 'jetpack_photon_admin_allow_image_downsize', '__return_true' );
- }
- }
-
- /**
- * This is our catch-all to strip dimensions from intermediate images in content.
- * Since this primarily only impacts post_content we do a little dance to add the filter early
- * to `the_content` and then remove it later on in the same hook.
- *
- * @param String $content the post content.
- * @return String the post content unchanged.
- */
- public static function filter_content_add( $content ) {
- add_filter( 'jetpack_photon_pre_image_url', array( __CLASS__, 'strip_image_dimensions_maybe' ) );
- return $content;
- }
-
- /**
- * Removing the content filter that was set previously.
- *
- * @param String $content the post content.
- * @return String the post content unchanged.
- */
- public static function filter_content_remove( $content ) {
- remove_filter( 'jetpack_photon_pre_image_url', array( __CLASS__, 'strip_image_dimensions_maybe' ) );
- return $content;
- }
-
- /**
- * Short circuits the Photon filter to enable Photon processing for any URL.
- *
- * @param String $photon_url a proposed Photon URL for the media file.
- * @param String $image_url the original media URL.
- * @return String an URL to be used for the media file.
- */
- public static function filter_photon_norezise_domain( $photon_url, $image_url ) {
- return $photon_url;
- }
-
- /**
- * Disables intermediate sizes to disallow resizing.
- *
- * @param Array $sizes an array containing image sizes.
- * @return Boolean
- */
- public static function filter_photon_noresize_intermediate_sizes( $sizes ) {
- return array();
- }
-
- public static function filter_photon_noresize_thumbnail_urls( $sizes ) {
- foreach ( $sizes as $size => $url ) {
- $parts = explode( '?', $url );
- $arguments = isset( $parts[1] ) ? $parts[1] : array();
-
- $sizes[ $size ] = jetpack_photon_url( $url, wp_parse_args( $arguments ) );
- }
-
- return $sizes;
- }
-
- /**
- * Inject image sizes to attachment metadata.
- *
- * @param array $data Attachment metadata.
- * @param int $attachment_id Attachment's post ID.
- *
- * @return array Attachment metadata.
- */
- public static function filter_photon_norezise_maybe_inject_sizes( $data, $attachment_id ) {
- // Can't do much if data is empty.
- if ( empty( $data ) ) {
- return $data;
- }
- $sizes_already_exist = (
- true === is_array( $data )
- && true === array_key_exists( 'sizes', $data )
- && true === is_array( $data['sizes'] )
- && false === empty( $data['sizes'] )
- );
- if ( $sizes_already_exist ) {
- return $data;
- }
- // Missing some critical data we need to determine sizes, not processing.
- if ( ! isset( $data['file'] )
- || ! isset( $data['width'] )
- || ! isset( $data['height'] )
- ) {
- return $data;
- }
-
- $mime_type = get_post_mime_type( $attachment_id );
- $attachment_is_image = preg_match( '!^image/!', $mime_type );
-
- if ( 1 === $attachment_is_image ) {
- $image_sizes = new Jetpack_Photon_ImageSizes( $attachment_id, $data );
- $data['sizes'] = $image_sizes->generate_sizes_meta();
- }
- return $data;
- }
-
- /**
- * Inject image sizes to Jetpack REST API responses. This wraps the filter_photon_norezise_maybe_inject_sizes function.
- *
- * @param array $data Attachment sizes data.
- * @param int $attachment_id Attachment's post ID.
- *
- * @return array Attachment sizes array.
- */
- public static function filter_photon_norezise_maybe_inject_sizes_api( $sizes, $attachment_id ) {
- return self::filter_photon_norezise_maybe_inject_sizes( wp_get_attachment_metadata( $attachment_id ), $attachment_id );
- }
-
- /**
- ** IN-CONTENT IMAGE MANIPULATION FUNCTIONS
- **/
-
- /**
- * Match all images and any relevant <a> tags in a block of HTML.
- *
- * @param string $content Some HTML.
- * @return array An array of $images matches, where $images[0] is
- * an array of full matches, and the link_url, img_tag,
- * and img_url keys are arrays of those matches.
- */
- public static function parse_images_from_html( $content ) {
- $images = array();
-
- if ( preg_match_all( '#(?:<a[^>]+?href=["|\'](?P<link_url>[^\s]+?)["|\'][^>]*?>\s*)?(?P<img_tag><img[^>]*?\s+?src=["|\'](?P<img_url>[^\s]+?)["|\'].*?>){1}(?:\s*</a>)?#is', $content, $images ) ) {
- foreach ( $images as $key => $unused ) {
- // Simplify the output as much as possible, mostly for confirming test results.
- if ( is_numeric( $key ) && $key > 0 )
- unset( $images[$key] );
- }
-
- return $images;
- }
-
- return array();
- }
-
- /**
- * Try to determine height and width from strings WP appends to resized image filenames.
- *
- * @param string $src The image URL.
- * @return array An array consisting of width and height.
- */
- public static function parse_dimensions_from_filename( $src ) {
- $width_height_string = array();
-
- if ( preg_match( '#-(\d+)x(\d+)\.(?:' . implode('|', self::$extensions ) . '){1}$#i', $src, $width_height_string ) ) {
- $width = (int) $width_height_string[1];
- $height = (int) $width_height_string[2];
-
- if ( $width && $height )
- return array( $width, $height );
- }
-
- return array( false, false );
- }
-
- /**
- * Identify images in post content, and if images are local (uploaded to the current site), pass through Photon.
- *
- * @param string $content
- * @uses self::validate_image_url, apply_filters, jetpack_photon_url, esc_url
- * @filter the_content
- * @return string
- */
- public static function filter_the_content( $content ) {
- $images = Jetpack_Photon::parse_images_from_html( $content );
-
- if ( ! empty( $images ) ) {
- $content_width = Jetpack::get_content_width();
-
- $image_sizes = self::image_sizes();
- $upload_dir = wp_get_upload_dir();
-
- foreach ( $images[0] as $index => $tag ) {
- // Default to resize, though fit may be used in certain cases where a dimension cannot be ascertained
- $transform = 'resize';
-
- // Start with a clean attachment ID each time
- $attachment_id = false;
-
- // Flag if we need to munge a fullsize URL
- $fullsize_url = false;
-
- // Identify image source
- $src = $src_orig = $images['img_url'][ $index ];
-
- /**
- * Allow specific images to be skipped by Photon.
- *
- * @module photon
- *
- * @since 2.0.3
- *
- * @param bool false Should Photon ignore this image. Default to false.
- * @param string $src Image URL.
- * @param string $tag Image Tag (Image HTML output).
- */
- if ( apply_filters( 'jetpack_photon_skip_image', false, $src, $tag ) )
- continue;
-
- // Support Automattic's Lazy Load plugin
- // Can't modify $tag yet as we need unadulterated version later
- if ( preg_match( '#data-lazy-src=["|\'](.+?)["|\']#i', $images['img_tag'][ $index ], $lazy_load_src ) ) {
- $placeholder_src = $placeholder_src_orig = $src;
- $src = $src_orig = $lazy_load_src[1];
- } elseif ( preg_match( '#data-lazy-original=["|\'](.+?)["|\']#i', $images['img_tag'][ $index ], $lazy_load_src ) ) {
- $placeholder_src = $placeholder_src_orig = $src;
- $src = $src_orig = $lazy_load_src[1];
- }
-
- // Check if image URL should be used with Photon
- if ( self::validate_image_url( $src ) ) {
- // Find the width and height attributes
- $width = $height = false;
-
- // First, check the image tag
- if ( preg_match( '#width=["|\']?([\d%]+)["|\']?#i', $images['img_tag'][ $index ], $width_string ) )
- $width = $width_string[1];
-
- if ( preg_match( '#height=["|\']?([\d%]+)["|\']?#i', $images['img_tag'][ $index ], $height_string ) )
- $height = $height_string[1];
-
- // Can't pass both a relative width and height, so unset the height in favor of not breaking the horizontal layout.
- if ( false !== strpos( $width, '%' ) && false !== strpos( $height, '%' ) )
- $width = $height = false;
-
- // Detect WP registered image size from HTML class
- if ( preg_match( '#class=["|\']?[^"\']*size-([^"\'\s]+)[^"\']*["|\']?#i', $images['img_tag'][ $index ], $size ) ) {
- $size = array_pop( $size );
-
- if ( false === $width && false === $height && 'full' != $size && array_key_exists( $size, $image_sizes ) ) {
- $width = (int) $image_sizes[ $size ]['width'];
- $height = (int) $image_sizes[ $size ]['height'];
- $transform = $image_sizes[ $size ]['crop'] ? 'resize' : 'fit';
- }
- } else {
- unset( $size );
- }
-
- // WP Attachment ID, if uploaded to this site
- if (
- preg_match( '#class=["|\']?[^"\']*wp-image-([\d]+)[^"\']*["|\']?#i', $images['img_tag'][ $index ], $attachment_id ) &&
- 0 === strpos( $src, $upload_dir['baseurl'] ) &&
- /**
- * Filter whether an image using an attachment ID in its class has to be uploaded to the local site to go through Photon.
- *
- * @module photon
- *
- * @since 2.0.3
- *
- * @param bool false Was the image uploaded to the local site. Default to false.
- * @param array $args {
- * Array of image details.
- *
- * @type $src Image URL.
- * @type tag Image tag (Image HTML output).
- * @type $images Array of information about the image.
- * @type $index Image index.
- * }
- */
- apply_filters( 'jetpack_photon_image_is_local', false, compact( 'src', 'tag', 'images', 'index' ) )
- ) {
- $attachment_id = intval( array_pop( $attachment_id ) );
-
- if ( $attachment_id ) {
- $attachment = get_post( $attachment_id );
-
- // Basic check on returned post object
- if ( is_object( $attachment ) && ! is_wp_error( $attachment ) && 'attachment' == $attachment->post_type ) {
- $src_per_wp = wp_get_attachment_image_src( $attachment_id, isset( $size ) ? $size : 'full' );
-
- if ( self::validate_image_url( $src_per_wp[0] ) ) {
- $src = $src_per_wp[0];
- $fullsize_url = true;
-
- // Prevent image distortion if a detected dimension exceeds the image's natural dimensions
- if ( ( false !== $width && $width > $src_per_wp[1] ) || ( false !== $height && $height > $src_per_wp[2] ) ) {
- $width = false === $width ? false : min( $width, $src_per_wp[1] );
- $height = false === $height ? false : min( $height, $src_per_wp[2] );
- }
-
- // If no width and height are found, max out at source image's natural dimensions
- // Otherwise, respect registered image sizes' cropping setting
- if ( false === $width && false === $height ) {
- $width = $src_per_wp[1];
- $height = $src_per_wp[2];
- $transform = 'fit';
- } elseif ( isset( $size ) && array_key_exists( $size, $image_sizes ) && isset( $image_sizes[ $size ]['crop'] ) ) {
- $transform = (bool) $image_sizes[ $size ]['crop'] ? 'resize' : 'fit';
- }
- }
- } else {
- unset( $attachment_id );
- unset( $attachment );
- }
- }
- }
-
- // If image tag lacks width and height arguments, try to determine from strings WP appends to resized image filenames.
- if ( false === $width && false === $height ) {
- list( $width, $height ) = Jetpack_Photon::parse_dimensions_from_filename( $src );
- }
-
- // If width is available, constrain to $content_width
- if ( false !== $width && false === strpos( $width, '%' ) && is_numeric( $content_width ) ) {
- if ( $width > $content_width && false !== $height && false === strpos( $height, '%' ) ) {
- $height = round( ( $content_width * $height ) / $width );
- $width = $content_width;
- } elseif ( $width > $content_width ) {
- $width = $content_width;
- }
- }
-
- // Set a width if none is found and $content_width is available
- // If width is set in this manner and height is available, use `fit` instead of `resize` to prevent skewing
- if ( false === $width && is_numeric( $content_width ) ) {
- $width = (int) $content_width;
-
- if ( false !== $height )
- $transform = 'fit';
- }
-
- // Detect if image source is for a custom-cropped thumbnail and prevent further URL manipulation.
- if ( ! $fullsize_url && preg_match_all( '#-e[a-z0-9]+(-\d+x\d+)?\.(' . implode('|', self::$extensions ) . '){1}$#i', basename( $src ), $filename ) )
- $fullsize_url = true;
-
- // Build URL, first maybe removing WP's resized string so we pass the original image to Photon
- if ( ! $fullsize_url ) {
- $src = self::strip_image_dimensions_maybe( $src );
- }
-
- // Build array of Photon args and expose to filter before passing to Photon URL function
- $args = array();
-
- if ( false !== $width && false !== $height && false === strpos( $width, '%' ) && false === strpos( $height, '%' ) )
- $args[ $transform ] = $width . ',' . $height;
- elseif ( false !== $width )
- $args['w'] = $width;
- elseif ( false !== $height )
- $args['h'] = $height;
-
- /**
- * Filter the array of Photon arguments added to an image when it goes through Photon.
- * By default, only includes width and height values.
- * @see https://developer.wordpress.com/docs/photon/api/
- *
- * @module photon
- *
- * @since 2.0.0
- *
- * @param array $args Array of Photon Arguments.
- * @param array $args {
- * Array of image details.
- *
- * @type $tag Image tag (Image HTML output).
- * @type $src Image URL.
- * @type $src_orig Original Image URL.
- * @type $width Image width.
- * @type $height Image height.
- * }
- */
- $args = apply_filters( 'jetpack_photon_post_image_args', $args, compact( 'tag', 'src', 'src_orig', 'width', 'height' ) );
-
- $photon_url = jetpack_photon_url( $src, $args );
-
- // Modify image tag if Photon function provides a URL
- // Ensure changes are only applied to the current image by copying and modifying the matched tag, then replacing the entire tag with our modified version.
- if ( $src != $photon_url ) {
- $new_tag = $tag;
-
- // If present, replace the link href with a Photoned URL for the full-size image.
- if ( ! empty( $images['link_url'][ $index ] ) && self::validate_image_url( $images['link_url'][ $index ] ) )
- $new_tag = preg_replace( '#(href=["|\'])' . $images['link_url'][ $index ] . '(["|\'])#i', '\1' . jetpack_photon_url( $images['link_url'][ $index ] ) . '\2', $new_tag, 1 );
-
- // Supplant the original source value with our Photon URL
- $photon_url = esc_url( $photon_url );
- $new_tag = str_replace( $src_orig, $photon_url, $new_tag );
-
- // If Lazy Load is in use, pass placeholder image through Photon
- if ( isset( $placeholder_src ) && self::validate_image_url( $placeholder_src ) ) {
- $placeholder_src = jetpack_photon_url( $placeholder_src );
-
- if ( $placeholder_src != $placeholder_src_orig )
- $new_tag = str_replace( $placeholder_src_orig, esc_url( $placeholder_src ), $new_tag );
-
- unset( $placeholder_src );
- }
-
- // If we are not transforming the image with resize, fit, or letterbox (lb), then we should remove
- // the width and height arguments from the image to prevent distortion. Even if $args['w'] and $args['h']
- // are present, Photon does not crop to those dimensions. Instead, it appears to favor height.
- //
- // If we are transforming the image via one of those methods, let's update the width and height attributes.
- if ( empty( $args['resize'] ) && empty( $args['fit'] ) && empty( $args['lb'] ) ) {
- $new_tag = preg_replace( '#(?<=\s)(width|height)=["|\']?[\d%]+["|\']?\s?#i', '', $new_tag );
- } else {
- $resize_args = isset( $args['resize'] ) ? $args['resize'] : false;
- if ( false == $resize_args ) {
- $resize_args = ( ! $resize_args && isset( $args['fit'] ) )
- ? $args['fit']
- : false;
- }
- if ( false == $resize_args ) {
- $resize_args = ( ! $resize_args && isset( $args['lb'] ) )
- ? $args['lb']
- : false;
- }
-
- $resize_args = array_map( 'trim', explode( ',', $resize_args ) );
-
- // (?<=\s) - Ensure width or height attribute is preceded by a space
- // (width=["|\']?) - Matches, and captures, width=, width=", or width='
- // [\d%]+ - Matches 1 or more digits
- // (["|\']?) - Matches, and captures, ", ', or empty string
- // \s - Ensures there's a space after the attribute
- $new_tag = preg_replace( '#(?<=\s)(width=["|\']?)[\d%]+(["|\']?)\s?#i', sprintf( '${1}%d${2} ', $resize_args[0] ), $new_tag );
- $new_tag = preg_replace( '#(?<=\s)(height=["|\']?)[\d%]+(["|\']?)\s?#i', sprintf( '${1}%d${2} ', $resize_args[1] ), $new_tag );
- }
-
- // Tag an image for dimension checking
- $new_tag = preg_replace( '#(\s?/)?>(\s*</a>)?$#i', ' data-recalc-dims="1"\1>\2', $new_tag );
-
- // Replace original tag with modified version
- $content = str_replace( $tag, $new_tag, $content );
- }
- } elseif ( preg_match( '#^http(s)?://i[\d]{1}.wp.com#', $src ) && ! empty( $images['link_url'][ $index ] ) && self::validate_image_url( $images['link_url'][ $index ] ) ) {
- $new_tag = preg_replace( '#(href=["|\'])' . $images['link_url'][ $index ] . '(["|\'])#i', '\1' . jetpack_photon_url( $images['link_url'][ $index ] ) . '\2', $tag, 1 );
-
- $content = str_replace( $tag, $new_tag, $content );
- }
- }
- }
-
- return $content;
- }
-
- public static function filter_the_galleries( $galleries ) {
- if ( empty( $galleries ) || ! is_array( $galleries ) ) {
- return $galleries;
- }
-
- // Pass by reference, so we can modify them in place.
- foreach ( $galleries as &$this_gallery ) {
- if ( is_string( $this_gallery ) ) {
- $this_gallery = self::filter_the_content( $this_gallery );
- // LEAVING COMMENTED OUT as for the moment it doesn't seem
- // necessary and I'm not sure how it would propagate through.
- // } elseif ( is_array( $this_gallery )
- // && ! empty( $this_gallery['src'] )
- // && ! empty( $this_gallery['type'] )
- // && in_array( $this_gallery['type'], array( 'rectangle', 'square', 'circle' ) ) ) {
- // $this_gallery['src'] = array_map( 'jetpack_photon_url', $this_gallery['src'] );
- }
- }
- unset( $this_gallery ); // break the reference.
-
- return $galleries;
- }
-
-
- /**
- * Runs the image widget through photon.
- *
- * @param array $instance Image widget instance data.
- * @return array
- */
- public static function filter_the_image_widget( $instance ) {
- if ( Jetpack::is_module_active( 'photon' ) && ! $instance['attachment_id'] && $instance['url'] ) {
- jetpack_photon_url( $instance['url'], array(
- 'w' => $instance['width'],
- 'h' => $instance['height'],
- ) );
- }
-
- return $instance;
- }
-
- /**
- ** CORE IMAGE RETRIEVAL
- **/
-
- /**
- * Filter post thumbnail image retrieval, passing images through Photon
- *
- * @param string|bool $image
- * @param int $attachment_id
- * @param string|array $size
- * @uses is_admin, apply_filters, wp_get_attachment_url, self::validate_image_url, this::image_sizes, jetpack_photon_url
- * @filter image_downsize
- * @return string|bool
- */
- public function filter_image_downsize( $image, $attachment_id, $size ) {
- // Don't foul up the admin side of things, unless a plugin wants to.
- if ( is_admin() &&
- /**
- * Provide plugins a way of running Photon for images in the WordPress Dashboard (wp-admin).
- *
- * Note: enabling this will result in Photon URLs added to your post content, which could make migrations across domains (and off Photon) a bit more challenging.
- *
- * @module photon
- *
- * @since 4.8.0
- *
- * @param bool false Stop Photon from being run on the Dashboard. Default to false.
- * @param array $args {
- * Array of image details.
- *
- * @type $image Image URL.
- * @type $attachment_id Attachment ID of the image.
- * @type $size Image size. Can be a string (name of the image size, e.g. full) or an array of width and height.
- * }
- */
- false === apply_filters( 'jetpack_photon_admin_allow_image_downsize', false, compact( 'image', 'attachment_id', 'size' ) )
- ) {
- return $image;
- }
-
- /**
- * Provide plugins a way of preventing Photon from being applied to images retrieved from WordPress Core.
- *
- * @module photon
- *
- * @since 2.0.0
- *
- * @param bool false Stop Photon from being applied to the image. Default to false.
- * @param array $args {
- * Array of image details.
- *
- * @type $image Image URL.
- * @type $attachment_id Attachment ID of the image.
- * @type $size Image size. Can be a string (name of the image size, e.g. full) or an array of width and height.
- * }
- */
- if ( apply_filters( 'jetpack_photon_override_image_downsize', false, compact( 'image', 'attachment_id', 'size' ) ) ) {
- return $image;
- }
-
- // Get the image URL and proceed with Photon-ification if successful
- $image_url = wp_get_attachment_url( $attachment_id );
-
- // Set this to true later when we know we have size meta.
- $has_size_meta = false;
-
- if ( $image_url ) {
- // Check if image URL should be used with Photon
- if ( ! self::validate_image_url( $image_url ) ) {
- return $image;
- }
-
- $intermediate = true; // For the fourth array item returned by the image_downsize filter.
-
- // If an image is requested with a size known to WordPress, use that size's settings with Photon.
- // WP states that `add_image_size()` should use a string for the name, but doesn't enforce that.
- // Due to differences in how Core and Photon check for the registered image size, we check both types.
- if ( ( is_string( $size ) || is_int( $size ) ) && array_key_exists( $size, self::image_sizes() ) ) {
- $image_args = self::image_sizes();
- $image_args = $image_args[ $size ];
-
- $photon_args = array();
-
- $image_meta = image_get_intermediate_size( $attachment_id, $size );
-
- // 'full' is a special case: We need consistent data regardless of the requested size.
- if ( 'full' == $size ) {
- $image_meta = wp_get_attachment_metadata( $attachment_id );
- $intermediate = false;
- } elseif ( ! $image_meta ) {
- // If we still don't have any image meta at this point, it's probably from a custom thumbnail size
- // for an image that was uploaded before the custom image was added to the theme. Try to determine the size manually.
- $image_meta = wp_get_attachment_metadata( $attachment_id );
-
- if ( isset( $image_meta['width'], $image_meta['height'] ) ) {
- $image_resized = image_resize_dimensions( $image_meta['width'], $image_meta['height'], $image_args['width'], $image_args['height'], $image_args['crop'] );
- if ( $image_resized ) { // This could be false when the requested image size is larger than the full-size image.
- $image_meta['width'] = $image_resized[6];
- $image_meta['height'] = $image_resized[7];
- }
- }
- }
-
- if ( isset( $image_meta['width'], $image_meta['height'] ) ) {
- $image_args['width'] = $image_meta['width'];
- $image_args['height'] = $image_meta['height'];
-
- list( $image_args['width'], $image_args['height'] ) = image_constrain_size_for_editor( $image_args['width'], $image_args['height'], $size, 'display' );
- $has_size_meta = true;
- }
-
- // Expose determined arguments to a filter before passing to Photon
- $transform = $image_args['crop'] ? 'resize' : 'fit';
-
- // Check specified image dimensions and account for possible zero values; photon fails to resize if a dimension is zero.
- if ( 0 == $image_args['width'] || 0 == $image_args['height'] ) {
- if ( 0 == $image_args['width'] && 0 < $image_args['height'] ) {
- $photon_args['h'] = $image_args['height'];
- } elseif ( 0 == $image_args['height'] && 0 < $image_args['width'] ) {
- $photon_args['w'] = $image_args['width'];
- }
- } else {
- if ( ( 'resize' === $transform ) && $image_meta = wp_get_attachment_metadata( $attachment_id ) ) {
- if ( isset( $image_meta['width'], $image_meta['height'] ) ) {
- // Lets make sure that we don't upscale images since wp never upscales them as well
- $smaller_width = ( ( $image_meta['width'] < $image_args['width'] ) ? $image_meta['width'] : $image_args['width'] );
- $smaller_height = ( ( $image_meta['height'] < $image_args['height'] ) ? $image_meta['height'] : $image_args['height'] );
-
- $photon_args[ $transform ] = $smaller_width . ',' . $smaller_height;
- }
- } else {
- $photon_args[ $transform ] = $image_args['width'] . ',' . $image_args['height'];
- }
-
- }
-
-
- /**
- * Filter the Photon Arguments added to an image when going through Photon, when that image size is a string.
- * Image size will be a string (e.g. "full", "medium") when it is known to WordPress.
- *
- * @module photon
- *
- * @since 2.0.0
- *
- * @param array $photon_args Array of Photon arguments.
- * @param array $args {
- * Array of image details.
- *
- * @type $image_args Array of Image arguments (width, height, crop).
- * @type $image_url Image URL.
- * @type $attachment_id Attachment ID of the image.
- * @type $size Image size. Can be a string (name of the image size, e.g. full) or an integer.
- * @type $transform Value can be resize or fit.
- * @see https://developer.wordpress.com/docs/photon/api
- * }
- */
- $photon_args = apply_filters( 'jetpack_photon_image_downsize_string', $photon_args, compact( 'image_args', 'image_url', 'attachment_id', 'size', 'transform' ) );
-
- // Generate Photon URL
- $image = array(
- jetpack_photon_url( $image_url, $photon_args ),
- $has_size_meta ? $image_args['width'] : false,
- $has_size_meta ? $image_args['height'] : false,
- $intermediate
- );
- } elseif ( is_array( $size ) ) {
- // Pull width and height values from the provided array, if possible
- $width = isset( $size[0] ) ? (int) $size[0] : false;
- $height = isset( $size[1] ) ? (int) $size[1] : false;
-
- // Don't bother if necessary parameters aren't passed.
- if ( ! $width || ! $height ) {
- return $image;
- }
-
- $image_meta = wp_get_attachment_metadata( $attachment_id );
- if ( isset( $image_meta['width'], $image_meta['height'] ) ) {
- $image_resized = image_resize_dimensions( $image_meta['width'], $image_meta['height'], $width, $height );
-
- if ( $image_resized ) { // This could be false when the requested image size is larger than the full-size image.
- $width = $image_resized[6];
- $height = $image_resized[7];
- } else {
- $width = $image_meta['width'];
- $height = $image_meta['height'];
- }
-
- $has_size_meta = true;
- }
-
- list( $width, $height ) = image_constrain_size_for_editor( $width, $height, $size );
-
- // Expose arguments to a filter before passing to Photon
- $photon_args = array(
- 'fit' => $width . ',' . $height
- );
-
- /**
- * Filter the Photon Arguments added to an image when going through Photon,
- * when the image size is an array of height and width values.
- *
- * @module photon
- *
- * @since 2.0.0
- *
- * @param array $photon_args Array of Photon arguments.
- * @param array $args {
- * Array of image details.
- *
- * @type $width Image width.
- * @type height Image height.
- * @type $image_url Image URL.
- * @type $attachment_id Attachment ID of the image.
- * }
- */
- $photon_args = apply_filters( 'jetpack_photon_image_downsize_array', $photon_args, compact( 'width', 'height', 'image_url', 'attachment_id' ) );
-
- // Generate Photon URL
- $image = array(
- jetpack_photon_url( $image_url, $photon_args ),
- $has_size_meta ? $width : false,
- $has_size_meta ? $height : false,
- $intermediate
- );
- }
- }
-
- return $image;
- }
-
- /**
- * Filters an array of image `srcset` values, replacing each URL with its Photon equivalent.
- *
- * @since 3.8.0
- * @since 4.0.4 Added automatically additional sizes beyond declared image sizes.
- * @param array $sources An array of image urls and widths.
- * @uses self::validate_image_url, jetpack_photon_url, Jetpack_Photon::parse_from_filename
- * @uses Jetpack_Photon::strip_image_dimensions_maybe, Jetpack::get_content_width
- * @return array An array of Photon image urls and widths.
- */
- public function filter_srcset_array( $sources = array(), $size_array = array(), $image_src = array(), $image_meta = array(), $attachment_id = 0 ) {
- if ( ! is_array( $sources ) ) {
- return $sources;
- }
- $upload_dir = wp_get_upload_dir();
-
- foreach ( $sources as $i => $source ) {
- if ( ! self::validate_image_url( $source['url'] ) ) {
- continue;
- }
-
- /** This filter is already documented in class.photon.php */
- if ( apply_filters( 'jetpack_photon_skip_image', false, $source['url'], $source ) ) {
- continue;
- }
-
- $url = $source['url'];
- list( $width, $height ) = Jetpack_Photon::parse_dimensions_from_filename( $url );
-
- // It's quicker to get the full size with the data we have already, if available
- if ( ! empty( $attachment_id ) ) {
- $url = wp_get_attachment_url( $attachment_id );
- } else {
- $url = Jetpack_Photon::strip_image_dimensions_maybe( $url );
- }
-
- $args = array();
- if ( 'w' === $source['descriptor'] ) {
- if ( $height && ( $source['value'] == $width ) ) {
- $args['resize'] = $width . ',' . $height;
- } else {
- $args['w'] = $source['value'];
- }
-
- }
-
- $sources[ $i ]['url'] = jetpack_photon_url( $url, $args );
- }
-
- /**
- * At this point, $sources is the original srcset with Photonized URLs.
- * Now, we're going to construct additional sizes based on multiples of the content_width.
- * This will reduce the gap between the largest defined size and the original image.
- */
-
- /**
- * Filter the multiplier Photon uses to create new srcset items.
- * Return false to short-circuit and bypass auto-generation.
- *
- * @module photon
- *
- * @since 4.0.4
- *
- * @param array|bool $multipliers Array of multipliers to use or false to bypass.
- */
- $multipliers = apply_filters( 'jetpack_photon_srcset_multipliers', array( 2, 3 ) );
- $url = trailingslashit( $upload_dir['baseurl'] ) . $image_meta['file'];
-
- if (
- /** Short-circuit via jetpack_photon_srcset_multipliers filter. */
- is_array( $multipliers )
- /** This filter is already documented in class.photon.php */
- && ! apply_filters( 'jetpack_photon_skip_image', false, $url, null )
- /** Verify basic meta is intact. */
- && isset( $image_meta['width'] ) && isset( $image_meta['height'] ) && isset( $image_meta['file'] )
- /** Verify we have the requested width/height. */
- && isset( $size_array[0] ) && isset( $size_array[1] )
- ) {
-
- $fullwidth = $image_meta['width'];
- $fullheight = $image_meta['height'];
- $reqwidth = $size_array[0];
- $reqheight = $size_array[1];
-
- $constrained_size = wp_constrain_dimensions( $fullwidth, $fullheight, $reqwidth );
- $expected_size = array( $reqwidth, $reqheight );
-
- if ( abs( $constrained_size[0] - $expected_size[0] ) <= 1 && abs( $constrained_size[1] - $expected_size[1] ) <= 1 ) {
- $crop = 'soft';
- $base = Jetpack::get_content_width() ? Jetpack::get_content_width() : 1000; // Provide a default width if none set by the theme.
- } else {
- $crop = 'hard';
- $base = $reqwidth;
- }
-
-
- $currentwidths = array_keys( $sources );
- $newsources = null;
-
- foreach ( $multipliers as $multiplier ) {
-
- $newwidth = $base * $multiplier;
- foreach ( $currentwidths as $currentwidth ){
- // If a new width would be within 100 pixes of an existing one or larger than the full size image, skip.
- if ( abs( $currentwidth - $newwidth ) < 50 || ( $newwidth > $fullwidth ) ) {
- continue 2; // Back to the foreach ( $multipliers as $multiplier )
- }
- } // foreach ( $currentwidths as $currentwidth ){
-
- if ( 'soft' == $crop ) {
- $args = array(
- 'w' => $newwidth,
- );
- } else { // hard crop, e.g. add_image_size( 'example', 200, 200, true );
- $args = array(
- 'zoom' => $multiplier,
- 'resize' => $reqwidth . ',' . $reqheight,
- );
- }
-
- $newsources[ $newwidth ] = array(
- 'url' => jetpack_photon_url( $url, $args ),
- 'descriptor' => 'w',
- 'value' => $newwidth,
- );
- } // foreach ( $multipliers as $multiplier )
- if ( is_array( $newsources ) ) {
- if ( function_exists( 'array_replace' ) ) { // PHP 5.3+, preferred
- // phpcs:disable
- $sources = array_replace( $sources, $newsources );
- // phpcs:enable
- } else { // For PHP 5.2 using WP shim function
- $sources = array_replace_recursive( $sources, $newsources );
- }
- }
- } // if ( isset( $image_meta['width'] ) && isset( $image_meta['file'] ) )
-
- return $sources;
- }
-
- /**
- * Filters an array of image `sizes` values, using $content_width instead of image's full size.
- *
- * @since 4.0.4
- * @since 4.1.0 Returns early for images not within the_content.
- * @param array $sizes An array of media query breakpoints.
- * @param array $size Width and height of the image
- * @uses Jetpack::get_content_width
- * @return array An array of media query breakpoints.
- */
- public function filter_sizes( $sizes, $size ) {
- if ( ! doing_filter( 'the_content' ) ){
- return $sizes;
- }
- $content_width = Jetpack::get_content_width();
- if ( ! $content_width ) {
- $content_width = 1000;
- }
-
- if ( ( is_array( $size ) && $size[0] < $content_width ) ) {
- return $sizes;
- }
-
- return sprintf( '(max-width: %1$dpx) 100vw, %1$dpx', $content_width );
- }
-
- /**
- ** GENERAL FUNCTIONS
- **/
-
- /**
- * Ensure image URL is valid for Photon.
- * Though Photon functions address some of the URL issues, we should avoid unnecessary processing if we know early on that the image isn't supported.
- *
- * @param string $url
- * @uses wp_parse_args
- * @return bool
- */
- protected static function validate_image_url( $url ) {
- $parsed_url = @parse_url( $url );
-
- if ( ! $parsed_url )
- return false;
-
- // Parse URL and ensure needed keys exist, since the array returned by `parse_url` only includes the URL components it finds.
- $url_info = wp_parse_args( $parsed_url, array(
- 'scheme' => null,
- 'host' => null,
- 'port' => null,
- 'path' => null
- ) );
-
- // Bail if scheme isn't http or port is set that isn't port 80
- if (
- ( 'http' != $url_info['scheme'] || ! in_array( $url_info['port'], array( 80, null ) ) ) &&
- /**
- * Allow Photon to fetch images that are served via HTTPS.
- *
- * @module photon
- *
- * @since 2.4.0
- * @since 3.9.0 Default to false.
- *
- * @param bool $reject_https Should Photon ignore images using the HTTPS scheme. Default to false.
- */
- apply_filters( 'jetpack_photon_reject_https', false )
- ) {
- return false;
- }
-
- // Bail if no host is found
- if ( is_null( $url_info['host'] ) )
- return false;
-
- // Bail if the image alredy went through Photon
- if ( preg_match( '#^i[\d]{1}.wp.com$#i', $url_info['host'] ) )
- return false;
-
- // Bail if no path is found
- if ( is_null( $url_info['path'] ) )
- return false;
-
- // Ensure image extension is acceptable
- if ( ! in_array( strtolower( pathinfo( $url_info['path'], PATHINFO_EXTENSION ) ), self::$extensions ) )
- return false;
-
- // If we got this far, we should have an acceptable image URL
- // But let folks filter to decline if they prefer.
- /**
- * Overwrite the results of the validation steps an image goes through before to be considered valid to be used by Photon.
- *
- * @module photon
- *
- * @since 3.0.0
- *
- * @param bool true Is the image URL valid and can it be used by Photon. Default to true.
- * @param string $url Image URL.
- * @param array $parsed_url Array of information about the image.
- */
- return apply_filters( 'photon_validate_image_url', true, $url, $parsed_url );
- }
-
- /**
- * Checks if the file exists before it passes the file to photon
- *
- * @param string $src The image URL
- * @return string
- **/
- public static function strip_image_dimensions_maybe( $src ){
- $stripped_src = $src;
-
- // Build URL, first removing WP's resized string so we pass the original image to Photon
- if ( preg_match( '#(-\d+x\d+)\.(' . implode('|', self::$extensions ) . '){1}$#i', $src, $src_parts ) ) {
- $stripped_src = str_replace( $src_parts[1], '', $src );
- $upload_dir = wp_get_upload_dir();
-
- // Extracts the file path to the image minus the base url
- $file_path = substr( $stripped_src, strlen ( $upload_dir['baseurl'] ) );
-
- if( file_exists( $upload_dir["basedir"] . $file_path ) )
- $src = $stripped_src;
- }
-
- return $src;
- }
-
- /**
- * Provide an array of available image sizes and corresponding dimensions.
- * Similar to get_intermediate_image_sizes() except that it includes image sizes' dimensions, not just their names.
- *
- * @global $wp_additional_image_sizes
- * @uses get_option
- * @return array
- */
- protected static function image_sizes() {
- if ( null == self::$image_sizes ) {
- global $_wp_additional_image_sizes;
-
- // Populate an array matching the data structure of $_wp_additional_image_sizes so we have a consistent structure for image sizes
- $images = array(
- 'thumb' => array(
- 'width' => intval( get_option( 'thumbnail_size_w' ) ),
- 'height' => intval( get_option( 'thumbnail_size_h' ) ),
- 'crop' => (bool) get_option( 'thumbnail_crop' )
- ),
- 'medium' => array(
- 'width' => intval( get_option( 'medium_size_w' ) ),
- 'height' => intval( get_option( 'medium_size_h' ) ),
- 'crop' => false
- ),
- 'large' => array(
- 'width' => intval( get_option( 'large_size_w' ) ),
- 'height' => intval( get_option( 'large_size_h' ) ),
- 'crop' => false
- ),
- 'full' => array(
- 'width' => null,
- 'height' => null,
- 'crop' => false
- )
- );
-
- // Compatibility mapping as found in wp-includes/media.php
- $images['thumbnail'] = $images['thumb'];
-
- // Update class variable, merging in $_wp_additional_image_sizes if any are set
- if ( is_array( $_wp_additional_image_sizes ) && ! empty( $_wp_additional_image_sizes ) )
- self::$image_sizes = array_merge( $images, $_wp_additional_image_sizes );
- else
- self::$image_sizes = $images;
- }
-
- return is_array( self::$image_sizes ) ? self::$image_sizes : array();
- }
-
- /**
- * Pass og:image URLs through Photon
- *
- * @param array $tags
- * @param array $parameters
- * @uses jetpack_photon_url
- * @return array
- */
- function filter_open_graph_tags( $tags, $parameters ) {
- if ( empty( $tags['og:image'] ) ) {
- return $tags;
- }
-
- $photon_args = array(
- 'fit' => sprintf( '%d,%d', 2 * $parameters['image_width'], 2 * $parameters['image_height'] ),
- );
-
- if ( is_array( $tags['og:image'] ) ) {
- $images = array();
- foreach ( $tags['og:image'] as $image ) {
- $images[] = jetpack_photon_url( $image, $photon_args );
- }
- $tags['og:image'] = $images;
- } else {
- $tags['og:image'] = jetpack_photon_url( $tags['og:image'], $photon_args );
- }
-
- return $tags;
- }
-
- public function noresize_intermediate_sizes( $sizes ) {
- return __return_empty_array();
- }
-
- /**
- * Enqueue Photon helper script
- *
- * @uses wp_enqueue_script, plugins_url
- * @action wp_enqueue_script
- * @return null
- */
- public function action_wp_enqueue_scripts() {
- if ( Jetpack_AMP_Support::is_amp_request() ) {
- return;
- }
- wp_enqueue_script(
- 'jetpack-photon',
- Jetpack::get_file_url_for_environment(
- '_inc/build/photon/photon.min.js',
- 'modules/photon/photon.js'
- ),
- array( 'jquery' ),
- 20130122,
- true
- );
- }
-
- /**
- * Determine if image_downsize should utilize Photon via REST API.
- *
- * The WordPress Block Editor (Gutenberg) and other REST API consumers using the wp/v2/media endpoint, especially in the "edit"
- * context is more akin to the is_admin usage of Photon (see filter_image_downsize). Since consumers are trying to edit content in posts,
- * Photon should not fire as it will fire later on display. By aborting an attempt to Photonize an image here, we
- * prevents issues like https://github.com/Automattic/jetpack/issues/10580 .
- *
- * To determine if we're using the wp/v2/media endpoint, we hook onto the `rest_request_before_callbacks` filter and
- * if determined we are using it in the edit context, we'll false out the `jetpack_photon_override_image_downsize` filter.
- *
- * @see Jetpack_Photon::filter_image_downsize()
- *
- * @param null|WP_Error $response
- * @param array $endpoint_data
- * @param WP_REST_Request $request Request used to generate the response.
- *
- * @return null|WP_Error The original response object without modification.
- */
- public function should_rest_photon_image_downsize( $response, $endpoint_data, $request ) {
- if ( ! is_a( $request , 'WP_REST_Request' ) ) {
- return $response; // Something odd is happening. Do nothing and return the response.
- }
-
- if ( is_wp_error( $response ) ) {
- // If we're going to return an error, we don't need to do anything with Photon.
- return $response;
- }
-
- $route = $request->get_route();
-
- if ( false !== strpos( $route, 'wp/v2/media' ) && 'edit' === $request['context'] ) {
- // Don't use `__return_true()`: Use something unique. See ::_override_image_downsize_in_rest_edit_context()
- // Late execution to avoid conflict with other plugins as we really don't want to run in this situation.
- add_filter( 'jetpack_photon_override_image_downsize', array( $this, '_override_image_downsize_in_rest_edit_context' ), 999999 );
- }
-
- return $response;
-
- }
-
- /**
- * Remove the override we may have added in ::should_rest_photon_image_downsize()
- * Since ::_override_image_downsize_in_rest_edit_context() is only
- * every used here, we can always remove it without ever worrying
- * about breaking any other configuration.
- *
- * @param mixed $response
- * @return mixed Unchanged $response
- */
- public function cleanup_rest_photon_image_downsize( $response ) {
- remove_filter( 'jetpack_photon_override_image_downsize', array( $this, '_override_image_downsize_in_rest_edit_context' ), 999999 );
- return $response;
- }
-
- /**
- * Used internally by ::should_rest_photon_image_downsize() to not photonize
- * image URLs in ?context=edit REST requests.
- * MUST NOT be used anywhere else.
- * We use a unique function instead of __return_true so that we can clean up
- * after ourselves without breaking anyone else's filters.
- *
- * @internal
- * @return true
- */
- public function _override_image_downsize_in_rest_edit_context() {
- return true;
- }
-}
diff --git a/plugins/jetpack/composer.json b/plugins/jetpack/composer.json
deleted file mode 100644
index 755f54b4..00000000
--- a/plugins/jetpack/composer.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "name" : "automattic/jetpack",
- "description": "Jetpack supercharges your self‑hosted WordPress site with the awesome cloud power of WordPress.com",
- "homepage" : "http://jetpack.com/",
- "type" : "wordpress-plugin",
- "license" : "GPL-2.0-or-later",
- "support": {
- "issues": "https://github.com/Automattic/jetpack/issues"
- },
- "require" : {
- "composer/installers": "1.6.0",
- "ext-openssl": "*"
- },
- "require-dev": {
- "dealerdirect/phpcodesniffer-composer-installer": "0.5.0",
- "wp-coding-standards/wpcs": "2.0.0",
- "sirbrillig/phpcs-variable-analysis": "2.6.0",
- "phpcompatibility/phpcompatibility-wp": "2.0.0"
- },
- "scripts": {
- "php:compatibility": "composer install && vendor/bin/phpcs -p --runtime-set testVersion '5.2-' --standard=PHPCompatibilityWP --ignore=docker,tools,tests,node_modules,vendor --extensions=php",
- "php:lint": "composer install && vendor/bin/phpcs -p",
- "php:autofix": "composer install && vendor/bin/phpcbf",
- "php:lint:errors": "composer install && vendor/bin/phpcs -p --runtime-set ignore_warnings_on_exit 1"
- }
-}
diff --git a/plugins/jetpack/css/dashboard-widget-rtl.css b/plugins/jetpack/css/dashboard-widget-rtl.css
deleted file mode 100644
index 1399fa13..00000000
--- a/plugins/jetpack/css/dashboard-widget-rtl.css
+++ /dev/null
@@ -1,186 +0,0 @@
-/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/
-@charset "UTF-8";
-/*
-The MIT License (MIT)
-
-Copyright © 2011–2015 thoughtbot, inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
-documentation files (the “Software”), to deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
-persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial
-portions of the Software.
-
-THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-https://github.com/thoughtbot/bourbon
-*/
-#jetpack_summary_widget * {
- box-sizing: border-box;
-}
-
-#jetpack_summary_widget h2.hndle span.js-toggle-stats_dashboard_widget_control {
- position: absolute;
- top: 8px;
- left: 36px;
-}
-
-#jetpack_summary_widget h2.hndle span:not(.js-toggle-stats_dashboard_widget_control) {
- display: flex;
- align-items: center;
-}
-
-#jetpack_summary_widget h2.hndle span:not(.js-toggle-stats_dashboard_widget_control) span {
- padding: 0 0.4em;
-}
-
-#jetpack_summary_widget h2.hndle svg {
- height: 20px;
- margin: .15em .5em 0 0;
-}
-
-#jetpack_summary_widget .inside {
- margin: 0;
- padding: 0;
-}
-
-#jetpack_summary_widget .inside .stats-view-all {
- text-align: center;
- margin: 1em 0;
-}
-
-#jetpack_summary_widget .stats,
-#jetpack_summary_widget .widgets,
-#jetpack_summary_widget .wpcom-connect {
- padding: .75em;
-}
-
-#jetpack_summary_widget .wpcom-connect {
- background: #fafafa;
- text-align: center;
-}
-
-#jetpack_summary_widget .wpcom-connect .jp-emblem {
- padding: 5px 0 0 0;
-}
-
-#jetpack_summary_widget .wpcom-connect svg {
- width: 40px;
- height: 40px;
-}
-
-#jetpack_summary_widget .wpcom-connect svg path {
- fill: #00BE28;
-}
-
-#jetpack_summary_widget .wpcom-connect .jp-emblem,
-#jetpack_summary_widget .wpcom-connect h3,
-#jetpack_summary_widget .wpcom-connect p {
- width: 100%;
-}
-
-#jetpack_summary_widget .wpcom-connect h3 {
- font-size: 1.25em;
- font-weight: 400;
-}
-
-#jetpack_summary_widget .wpcom-connect p {
- color: #555d66;
- margin-top: 0;
- padding: 0 15px;
-}
-
-#jetpack_summary_widget .wpcom-connect .actions {
- text-align: center;
- padding: 15px 0 10px 0;
-}
-
-#jetpack_summary_widget .wpcom-connect .actions small {
- display: block;
-}
-
-#jetpack_summary_widget .wpcom-connect .actions small a {
- color: #999;
-}
-
-#jetpack_summary_widget .button-jetpack {
- background: #00BE28;
- border-color: #008b1d;
- color: white;
- box-shadow: inset 0 1px 0 #0cff3f, 0 1px 0 rgba(0, 0, 0, 0.15);
-}
-
-#jetpack_summary_widget .button-jetpack:hover, #jetpack_summary_widget .button-jetpack:focus {
- background: #00a523;
- border-color: #007218;
- color: white;
- box-shadow: inset 0 1px 0 #00f133;
-}
-
-#jetpack_summary_widget .button-jetpack:focus {
- box-shadow: inset 0 1px 0 #00f133, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
-}
-
-#jetpack_summary_widget .button-jetpack:active {
- background: #008b1d;
- border-color: #007218;
- color: white;
- box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
-}
-
-#jetpack_summary_widget .button-jetpack[disabled], #jetpack_summary_widget .button-jetpack:disabled, #jetpack_summary_widget .button-jetpack.button-primary-disabled, #jetpack_summary_widget .button-jetpack.disabled {
- color: #c7d1c9 !important;
- background: #00951f !important;
- border-color: #007218 !important;
- text-shadow: none !important;
-}
-
-#jetpack_summary_widget footer {
- background: #fafafa;
- padding: .75em;
- overflow: hidden;
- border-top: 1px solid #ccc;
-}
-
-#jetpack_summary_widget footer .protect,
-#jetpack_summary_widget footer .akismet {
- width: 50%;
- float: right;
- text-align: right;
-}
-
-#jetpack_summary_widget footer .protect {
- padding-left: 3%;
-}
-
-#jetpack_summary_widget footer h3 {
- font-size: 1.5em;
- font-weight: normal;
- margin: 0;
- padding: 0;
-}
-
-#jetpack_summary_widget footer p {
- margin: 0;
- padding: 0;
-}
-
-#jetpack_summary_widget footer section {
- margin: 0;
- padding: 0;
- text-align: center;
-}
-
-/* Hide the widget title's SVG in the Screen Options tab */
-.metabox-prefs label[for="jetpack_summary_widget-hide"] span {
- display: none;
-}
-
-/*# sourceMappingURL=dashboard-widget-rtl.css.map */
diff --git a/plugins/jetpack/css/dashboard-widget-rtl.css.map b/plugins/jetpack/css/dashboard-widget-rtl.css.map
deleted file mode 100644
index 66c14238..00000000
--- a/plugins/jetpack/css/dashboard-widget-rtl.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"names":[],"mappings":"","sources":["dashboard-widget-rtl.css"],"sourcesContent":["/*!\n* Do not modify this file directly. It is compiled SASS code.\n*/\n@charset \"UTF-8\";\n/*\nThe MIT License (MIT)\n\nCopyright © 2011–2015 thoughtbot, inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\ndocumentation files (the “Software”), to deal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit\npersons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial\nportions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nhttps://github.com/thoughtbot/bourbon\n*/\n#jetpack_summary_widget * {\n box-sizing: border-box;\n}\n\n#jetpack_summary_widget h2.hndle span.js-toggle-stats_dashboard_widget_control {\n position: absolute;\n top: 8px;\n left: 36px;\n}\n\n#jetpack_summary_widget h2.hndle span:not(.js-toggle-stats_dashboard_widget_control) {\n display: flex;\n align-items: center;\n}\n\n#jetpack_summary_widget h2.hndle span:not(.js-toggle-stats_dashboard_widget_control) span {\n padding: 0 0.4em;\n}\n\n#jetpack_summary_widget h2.hndle svg {\n height: 20px;\n margin: .15em .5em 0 0;\n}\n\n#jetpack_summary_widget .inside {\n margin: 0;\n padding: 0;\n}\n\n#jetpack_summary_widget .inside .stats-view-all {\n text-align: center;\n margin: 1em 0;\n}\n\n#jetpack_summary_widget .stats,\n#jetpack_summary_widget .widgets,\n#jetpack_summary_widget .wpcom-connect {\n padding: .75em;\n}\n\n#jetpack_summary_widget .wpcom-connect {\n background: #fafafa;\n text-align: center;\n}\n\n#jetpack_summary_widget .wpcom-connect .jp-emblem {\n padding: 5px 0 0 0;\n}\n\n#jetpack_summary_widget .wpcom-connect svg {\n width: 40px;\n height: 40px;\n}\n\n#jetpack_summary_widget .wpcom-connect svg path {\n fill: #00BE28;\n}\n\n#jetpack_summary_widget .wpcom-connect .jp-emblem,\n#jetpack_summary_widget .wpcom-connect h3,\n#jetpack_summary_widget .wpcom-connect p {\n width: 100%;\n}\n\n#jetpack_summary_widget .wpcom-connect h3 {\n font-size: 1.25em;\n font-weight: 400;\n}\n\n#jetpack_summary_widget .wpcom-connect p {\n color: #555d66;\n margin-top: 0;\n padding: 0 15px;\n}\n\n#jetpack_summary_widget .wpcom-connect .actions {\n text-align: center;\n padding: 15px 0 10px 0;\n}\n\n#jetpack_summary_widget .wpcom-connect .actions small {\n display: block;\n}\n\n#jetpack_summary_widget .wpcom-connect .actions small a {\n color: #999;\n}\n\n#jetpack_summary_widget .button-jetpack {\n background: #00BE28;\n border-color: #008b1d;\n color: white;\n box-shadow: inset 0 1px 0 #0cff3f, 0 1px 0 rgba(0, 0, 0, 0.15);\n}\n\n#jetpack_summary_widget .button-jetpack:hover, #jetpack_summary_widget .button-jetpack:focus {\n background: #00a523;\n border-color: #007218;\n color: white;\n box-shadow: inset 0 1px 0 #00f133;\n}\n\n#jetpack_summary_widget .button-jetpack:focus {\n box-shadow: inset 0 1px 0 #00f133, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);\n}\n\n#jetpack_summary_widget .button-jetpack:active {\n background: #008b1d;\n border-color: #007218;\n color: white;\n box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);\n}\n\n#jetpack_summary_widget .button-jetpack[disabled], #jetpack_summary_widget .button-jetpack:disabled, #jetpack_summary_widget .button-jetpack.button-primary-disabled, #jetpack_summary_widget .button-jetpack.disabled {\n color: #c7d1c9 !important;\n background: #00951f !important;\n border-color: #007218 !important;\n text-shadow: none !important;\n}\n\n#jetpack_summary_widget footer {\n background: #fafafa;\n padding: .75em;\n overflow: hidden;\n border-top: 1px solid #ccc;\n}\n\n#jetpack_summary_widget footer .protect,\n#jetpack_summary_widget footer .akismet {\n width: 50%;\n float: right;\n text-align: right;\n}\n\n#jetpack_summary_widget footer .protect {\n padding-left: 3%;\n}\n\n#jetpack_summary_widget footer h3 {\n font-size: 1.5em;\n font-weight: normal;\n margin: 0;\n padding: 0;\n}\n\n#jetpack_summary_widget footer p {\n margin: 0;\n padding: 0;\n}\n\n#jetpack_summary_widget footer section {\n margin: 0;\n padding: 0;\n text-align: center;\n}\n\n/* Hide the widget title's SVG in the Screen Options tab */\n.metabox-prefs label[for=\"jetpack_summary_widget-hide\"] span {\n display: none;\n}\n"],"file":"dashboard-widget-rtl.css"} \ No newline at end of file
diff --git a/plugins/jetpack/css/dashboard-widget-rtl.css.min.map b/plugins/jetpack/css/dashboard-widget-rtl.css.min.map
deleted file mode 100644
index e69de29b..00000000
--- a/plugins/jetpack/css/dashboard-widget-rtl.css.min.map
+++ /dev/null
diff --git a/plugins/jetpack/css/dashboard-widget-rtl.min.css b/plugins/jetpack/css/dashboard-widget-rtl.min.css
deleted file mode 100644
index 458b7ce2..00000000
--- a/plugins/jetpack/css/dashboard-widget-rtl.min.css
+++ /dev/null
@@ -1,3 +0,0 @@
-@charset "UTF-8";/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/#jetpack_summary_widget *{box-sizing:border-box}#jetpack_summary_widget h2.hndle span.js-toggle-stats_dashboard_widget_control{position:absolute;top:8px;left:36px}#jetpack_summary_widget h2.hndle span:not(.js-toggle-stats_dashboard_widget_control){display:flex;align-items:center}#jetpack_summary_widget h2.hndle span:not(.js-toggle-stats_dashboard_widget_control) span{padding:0 .4em}#jetpack_summary_widget h2.hndle svg{height:20px;margin:.15em .5em 0 0}#jetpack_summary_widget .inside{margin:0;padding:0}#jetpack_summary_widget .inside .stats-view-all{text-align:center;margin:1em 0}#jetpack_summary_widget .stats,#jetpack_summary_widget .widgets,#jetpack_summary_widget .wpcom-connect{padding:.75em}#jetpack_summary_widget .wpcom-connect{background:#fafafa;text-align:center}#jetpack_summary_widget .wpcom-connect .jp-emblem{padding:5px 0 0 0}#jetpack_summary_widget .wpcom-connect svg{width:40px;height:40px}#jetpack_summary_widget .wpcom-connect svg path{fill:#00be28}#jetpack_summary_widget .wpcom-connect .jp-emblem,#jetpack_summary_widget .wpcom-connect h3,#jetpack_summary_widget .wpcom-connect p{width:100%}#jetpack_summary_widget .wpcom-connect h3{font-size:1.25em;font-weight:400}#jetpack_summary_widget .wpcom-connect p{color:#555d66;margin-top:0;padding:0 15px}#jetpack_summary_widget .wpcom-connect .actions{text-align:center;padding:15px 0 10px 0}#jetpack_summary_widget .wpcom-connect .actions small{display:block}#jetpack_summary_widget .wpcom-connect .actions small a{color:#999}#jetpack_summary_widget .button-jetpack{background:#00be28;border-color:#008b1d;color:#fff;box-shadow:inset 0 1px 0 #0cff3f,0 1px 0 rgba(0,0,0,.15)}#jetpack_summary_widget .button-jetpack:focus,#jetpack_summary_widget .button-jetpack:hover{background:#00a523;border-color:#007218;color:#fff;box-shadow:inset 0 1px 0 #00f133}#jetpack_summary_widget .button-jetpack:focus{box-shadow:inset 0 1px 0 #00f133,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}#jetpack_summary_widget .button-jetpack:active{background:#008b1d;border-color:#007218;color:#fff;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}#jetpack_summary_widget .button-jetpack.button-primary-disabled,#jetpack_summary_widget .button-jetpack.disabled,#jetpack_summary_widget .button-jetpack:disabled,#jetpack_summary_widget .button-jetpack[disabled]{color:#c7d1c9!important;background:#00951f!important;border-color:#007218!important;text-shadow:none!important}#jetpack_summary_widget footer{background:#fafafa;padding:.75em;overflow:hidden;border-top:1px solid #ccc}#jetpack_summary_widget footer .akismet,#jetpack_summary_widget footer .protect{width:50%;float:right;text-align:right}#jetpack_summary_widget footer .protect{padding-left:3%}#jetpack_summary_widget footer h3{font-size:1.5em;font-weight:400;margin:0;padding:0}#jetpack_summary_widget footer p{margin:0;padding:0}#jetpack_summary_widget footer section{margin:0;padding:0;text-align:center}.metabox-prefs label[for=jetpack_summary_widget-hide] span{display:none} \ No newline at end of file
diff --git a/plugins/jetpack/css/dashboard-widget.css b/plugins/jetpack/css/dashboard-widget.css
deleted file mode 100644
index 369644f3..00000000
--- a/plugins/jetpack/css/dashboard-widget.css
+++ /dev/null
@@ -1,186 +0,0 @@
-/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/
-@charset "UTF-8";
-/*
-The MIT License (MIT)
-
-Copyright © 2011–2015 thoughtbot, inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
-documentation files (the “Software”), to deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
-persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial
-portions of the Software.
-
-THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-https://github.com/thoughtbot/bourbon
-*/
-#jetpack_summary_widget * {
- box-sizing: border-box;
-}
-
-#jetpack_summary_widget h2.hndle span.js-toggle-stats_dashboard_widget_control {
- position: absolute;
- top: 8px;
- right: 36px;
-}
-
-#jetpack_summary_widget h2.hndle span:not(.js-toggle-stats_dashboard_widget_control) {
- display: flex;
- align-items: center;
-}
-
-#jetpack_summary_widget h2.hndle span:not(.js-toggle-stats_dashboard_widget_control) span {
- padding: 0 0.4em;
-}
-
-#jetpack_summary_widget h2.hndle svg {
- height: 20px;
- margin: .15em 0 0 .5em;
-}
-
-#jetpack_summary_widget .inside {
- margin: 0;
- padding: 0;
-}
-
-#jetpack_summary_widget .inside .stats-view-all {
- text-align: center;
- margin: 1em 0;
-}
-
-#jetpack_summary_widget .stats,
-#jetpack_summary_widget .widgets,
-#jetpack_summary_widget .wpcom-connect {
- padding: .75em;
-}
-
-#jetpack_summary_widget .wpcom-connect {
- background: #fafafa;
- text-align: center;
-}
-
-#jetpack_summary_widget .wpcom-connect .jp-emblem {
- padding: 5px 0 0 0;
-}
-
-#jetpack_summary_widget .wpcom-connect svg {
- width: 40px;
- height: 40px;
-}
-
-#jetpack_summary_widget .wpcom-connect svg path {
- fill: #00BE28;
-}
-
-#jetpack_summary_widget .wpcom-connect .jp-emblem,
-#jetpack_summary_widget .wpcom-connect h3,
-#jetpack_summary_widget .wpcom-connect p {
- width: 100%;
-}
-
-#jetpack_summary_widget .wpcom-connect h3 {
- font-size: 1.25em;
- font-weight: 400;
-}
-
-#jetpack_summary_widget .wpcom-connect p {
- color: #555d66;
- margin-top: 0;
- padding: 0 15px;
-}
-
-#jetpack_summary_widget .wpcom-connect .actions {
- text-align: center;
- padding: 15px 0 10px 0;
-}
-
-#jetpack_summary_widget .wpcom-connect .actions small {
- display: block;
-}
-
-#jetpack_summary_widget .wpcom-connect .actions small a {
- color: #999;
-}
-
-#jetpack_summary_widget .button-jetpack {
- background: #00BE28;
- border-color: #008b1d;
- color: white;
- box-shadow: inset 0 1px 0 #0cff3f, 0 1px 0 rgba(0, 0, 0, 0.15);
-}
-
-#jetpack_summary_widget .button-jetpack:hover, #jetpack_summary_widget .button-jetpack:focus {
- background: #00a523;
- border-color: #007218;
- color: white;
- box-shadow: inset 0 1px 0 #00f133;
-}
-
-#jetpack_summary_widget .button-jetpack:focus {
- box-shadow: inset 0 1px 0 #00f133, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
-}
-
-#jetpack_summary_widget .button-jetpack:active {
- background: #008b1d;
- border-color: #007218;
- color: white;
- box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);
-}
-
-#jetpack_summary_widget .button-jetpack[disabled], #jetpack_summary_widget .button-jetpack:disabled, #jetpack_summary_widget .button-jetpack.button-primary-disabled, #jetpack_summary_widget .button-jetpack.disabled {
- color: #c7d1c9 !important;
- background: #00951f !important;
- border-color: #007218 !important;
- text-shadow: none !important;
-}
-
-#jetpack_summary_widget footer {
- background: #fafafa;
- padding: .75em;
- overflow: hidden;
- border-top: 1px solid #ccc;
-}
-
-#jetpack_summary_widget footer .protect,
-#jetpack_summary_widget footer .akismet {
- width: 50%;
- float: left;
- text-align: left;
-}
-
-#jetpack_summary_widget footer .protect {
- padding-right: 3%;
-}
-
-#jetpack_summary_widget footer h3 {
- font-size: 1.5em;
- font-weight: normal;
- margin: 0;
- padding: 0;
-}
-
-#jetpack_summary_widget footer p {
- margin: 0;
- padding: 0;
-}
-
-#jetpack_summary_widget footer section {
- margin: 0;
- padding: 0;
- text-align: center;
-}
-
-/* Hide the widget title's SVG in the Screen Options tab */
-.metabox-prefs label[for="jetpack_summary_widget-hide"] span {
- display: none;
-}
-
-/*# sourceMappingURL=dashboard-widget.css.map */
diff --git a/plugins/jetpack/css/dashboard-widget.css.map b/plugins/jetpack/css/dashboard-widget.css.map
deleted file mode 100644
index 63401101..00000000
--- a/plugins/jetpack/css/dashboard-widget.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"names":[],"mappings":"","sources":["dashboard-widget.css"],"sourcesContent":["/*!\n* Do not modify this file directly. It is compiled SASS code.\n*/\n@charset \"UTF-8\";\n/*\nThe MIT License (MIT)\n\nCopyright © 2011–2015 thoughtbot, inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\ndocumentation files (the “Software”), to deal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit\npersons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial\nportions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nhttps://github.com/thoughtbot/bourbon\n*/\n#jetpack_summary_widget * {\n box-sizing: border-box;\n}\n\n#jetpack_summary_widget h2.hndle span.js-toggle-stats_dashboard_widget_control {\n position: absolute;\n top: 8px;\n right: 36px;\n}\n\n#jetpack_summary_widget h2.hndle span:not(.js-toggle-stats_dashboard_widget_control) {\n display: flex;\n align-items: center;\n}\n\n#jetpack_summary_widget h2.hndle span:not(.js-toggle-stats_dashboard_widget_control) span {\n padding: 0 0.4em;\n}\n\n#jetpack_summary_widget h2.hndle svg {\n height: 20px;\n margin: .15em 0 0 .5em;\n}\n\n#jetpack_summary_widget .inside {\n margin: 0;\n padding: 0;\n}\n\n#jetpack_summary_widget .inside .stats-view-all {\n text-align: center;\n margin: 1em 0;\n}\n\n#jetpack_summary_widget .stats,\n#jetpack_summary_widget .widgets,\n#jetpack_summary_widget .wpcom-connect {\n padding: .75em;\n}\n\n#jetpack_summary_widget .wpcom-connect {\n background: #fafafa;\n text-align: center;\n}\n\n#jetpack_summary_widget .wpcom-connect .jp-emblem {\n padding: 5px 0 0 0;\n}\n\n#jetpack_summary_widget .wpcom-connect svg {\n width: 40px;\n height: 40px;\n}\n\n#jetpack_summary_widget .wpcom-connect svg path {\n fill: #00BE28;\n}\n\n#jetpack_summary_widget .wpcom-connect .jp-emblem,\n#jetpack_summary_widget .wpcom-connect h3,\n#jetpack_summary_widget .wpcom-connect p {\n width: 100%;\n}\n\n#jetpack_summary_widget .wpcom-connect h3 {\n font-size: 1.25em;\n font-weight: 400;\n}\n\n#jetpack_summary_widget .wpcom-connect p {\n color: #555d66;\n margin-top: 0;\n padding: 0 15px;\n}\n\n#jetpack_summary_widget .wpcom-connect .actions {\n text-align: center;\n padding: 15px 0 10px 0;\n}\n\n#jetpack_summary_widget .wpcom-connect .actions small {\n display: block;\n}\n\n#jetpack_summary_widget .wpcom-connect .actions small a {\n color: #999;\n}\n\n#jetpack_summary_widget .button-jetpack {\n background: #00BE28;\n border-color: #008b1d;\n color: white;\n box-shadow: inset 0 1px 0 #0cff3f, 0 1px 0 rgba(0, 0, 0, 0.15);\n}\n\n#jetpack_summary_widget .button-jetpack:hover, #jetpack_summary_widget .button-jetpack:focus {\n background: #00a523;\n border-color: #007218;\n color: white;\n box-shadow: inset 0 1px 0 #00f133;\n}\n\n#jetpack_summary_widget .button-jetpack:focus {\n box-shadow: inset 0 1px 0 #00f133, 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);\n}\n\n#jetpack_summary_widget .button-jetpack:active {\n background: #008b1d;\n border-color: #007218;\n color: white;\n box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5), 0 0 0 1px #5b9dd9, 0 0 2px 1px rgba(30, 140, 190, 0.8);\n}\n\n#jetpack_summary_widget .button-jetpack[disabled], #jetpack_summary_widget .button-jetpack:disabled, #jetpack_summary_widget .button-jetpack.button-primary-disabled, #jetpack_summary_widget .button-jetpack.disabled {\n color: #c7d1c9 !important;\n background: #00951f !important;\n border-color: #007218 !important;\n text-shadow: none !important;\n}\n\n#jetpack_summary_widget footer {\n background: #fafafa;\n padding: .75em;\n overflow: hidden;\n border-top: 1px solid #ccc;\n}\n\n#jetpack_summary_widget footer .protect,\n#jetpack_summary_widget footer .akismet {\n width: 50%;\n float: left;\n text-align: left;\n}\n\n#jetpack_summary_widget footer .protect {\n padding-right: 3%;\n}\n\n#jetpack_summary_widget footer h3 {\n font-size: 1.5em;\n font-weight: normal;\n margin: 0;\n padding: 0;\n}\n\n#jetpack_summary_widget footer p {\n margin: 0;\n padding: 0;\n}\n\n#jetpack_summary_widget footer section {\n margin: 0;\n padding: 0;\n text-align: center;\n}\n\n/* Hide the widget title's SVG in the Screen Options tab */\n.metabox-prefs label[for=\"jetpack_summary_widget-hide\"] span {\n display: none;\n}\n"],"file":"dashboard-widget.css"} \ No newline at end of file
diff --git a/plugins/jetpack/css/dashboard-widget.css.min.map b/plugins/jetpack/css/dashboard-widget.css.min.map
deleted file mode 100644
index e69de29b..00000000
--- a/plugins/jetpack/css/dashboard-widget.css.min.map
+++ /dev/null
diff --git a/plugins/jetpack/css/dashboard-widget.min.css b/plugins/jetpack/css/dashboard-widget.min.css
deleted file mode 100644
index 2693413b..00000000
--- a/plugins/jetpack/css/dashboard-widget.min.css
+++ /dev/null
@@ -1,3 +0,0 @@
-@charset "UTF-8";/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/#jetpack_summary_widget *{box-sizing:border-box}#jetpack_summary_widget h2.hndle span.js-toggle-stats_dashboard_widget_control{position:absolute;top:8px;right:36px}#jetpack_summary_widget h2.hndle span:not(.js-toggle-stats_dashboard_widget_control){display:flex;align-items:center}#jetpack_summary_widget h2.hndle span:not(.js-toggle-stats_dashboard_widget_control) span{padding:0 .4em}#jetpack_summary_widget h2.hndle svg{height:20px;margin:.15em 0 0 .5em}#jetpack_summary_widget .inside{margin:0;padding:0}#jetpack_summary_widget .inside .stats-view-all{text-align:center;margin:1em 0}#jetpack_summary_widget .stats,#jetpack_summary_widget .widgets,#jetpack_summary_widget .wpcom-connect{padding:.75em}#jetpack_summary_widget .wpcom-connect{background:#fafafa;text-align:center}#jetpack_summary_widget .wpcom-connect .jp-emblem{padding:5px 0 0 0}#jetpack_summary_widget .wpcom-connect svg{width:40px;height:40px}#jetpack_summary_widget .wpcom-connect svg path{fill:#00be28}#jetpack_summary_widget .wpcom-connect .jp-emblem,#jetpack_summary_widget .wpcom-connect h3,#jetpack_summary_widget .wpcom-connect p{width:100%}#jetpack_summary_widget .wpcom-connect h3{font-size:1.25em;font-weight:400}#jetpack_summary_widget .wpcom-connect p{color:#555d66;margin-top:0;padding:0 15px}#jetpack_summary_widget .wpcom-connect .actions{text-align:center;padding:15px 0 10px 0}#jetpack_summary_widget .wpcom-connect .actions small{display:block}#jetpack_summary_widget .wpcom-connect .actions small a{color:#999}#jetpack_summary_widget .button-jetpack{background:#00be28;border-color:#008b1d;color:#fff;box-shadow:inset 0 1px 0 #0cff3f,0 1px 0 rgba(0,0,0,.15)}#jetpack_summary_widget .button-jetpack:focus,#jetpack_summary_widget .button-jetpack:hover{background:#00a523;border-color:#007218;color:#fff;box-shadow:inset 0 1px 0 #00f133}#jetpack_summary_widget .button-jetpack:focus{box-shadow:inset 0 1px 0 #00f133,0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}#jetpack_summary_widget .button-jetpack:active{background:#008b1d;border-color:#007218;color:#fff;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}#jetpack_summary_widget .button-jetpack.button-primary-disabled,#jetpack_summary_widget .button-jetpack.disabled,#jetpack_summary_widget .button-jetpack:disabled,#jetpack_summary_widget .button-jetpack[disabled]{color:#c7d1c9!important;background:#00951f!important;border-color:#007218!important;text-shadow:none!important}#jetpack_summary_widget footer{background:#fafafa;padding:.75em;overflow:hidden;border-top:1px solid #ccc}#jetpack_summary_widget footer .akismet,#jetpack_summary_widget footer .protect{width:50%;float:left;text-align:left}#jetpack_summary_widget footer .protect{padding-right:3%}#jetpack_summary_widget footer h3{font-size:1.5em;font-weight:400;margin:0;padding:0}#jetpack_summary_widget footer p{margin:0;padding:0}#jetpack_summary_widget footer section{margin:0;padding:0;text-align:center}.metabox-prefs label[for=jetpack_summary_widget-hide] span{display:none} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-admin-jitm-rtl.css b/plugins/jetpack/css/jetpack-admin-jitm-rtl.css
deleted file mode 100644
index 6e674a60..00000000
--- a/plugins/jetpack/css/jetpack-admin-jitm-rtl.css
+++ /dev/null
@@ -1,478 +0,0 @@
-/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/
-@charset "UTF-8";
-/*
-The MIT License (MIT)
-
-Copyright © 2011–2015 thoughtbot, inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
-documentation files (the “Software”), to deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
-persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial
-portions of the Software.
-
-THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-https://github.com/thoughtbot/bourbon
-*/
-.jitm-button {
- background: white;
- border-color: #d5d5d5;
- border-style: solid;
- border-width: 1px 1px 2px;
- color: #414141;
- cursor: pointer;
- display: inline-block;
- margin: 0;
- outline: 0;
- overflow: hidden;
- font-weight: 500;
- text-overflow: ellipsis;
- text-decoration: none;
- vertical-align: top;
- box-sizing: border-box;
- font-size: 0.875rem;
- line-height: 1.3125rem;
- border-radius: 0.25rem;
- padding: 0.4375rem 0.875rem 0.5625rem;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
-}
-
-.jitm-button:hover {
- border-color: #bbbbbb;
- color: #414141;
-}
-
-.jitm-button:active {
- border-width: 2px 1px 1px;
-}
-
-.jitm-button:visited {
- color: #414141;
-}
-
-.jitm-button[disabled], .jitm-button:disabled {
- color: #eeeeee;
- background: white;
- border-color: #eeeeee;
- cursor: default;
-}
-
-.jitm-button[disabled]:active, .jitm-button:disabled:active {
- border-width: 1px 1px 2px;
-}
-
-.jitm-button:focus {
- outline: 0;
- border-color: #00aadc;
- box-shadow: 0 0 0 2px #78dcfa;
-}
-
-.jitm-button.is-compact {
- padding: 0.4375rem;
- color: #888888;
- font-size: 0.75rem;
- line-height: 1;
-}
-
-.jitm-button.is-compact:disabled {
- color: #eeeeee;
-}
-
-.jitm-button.hidden {
- display: none;
-}
-
-.jitm-button.is-primary {
- background: #00aadc;
- border-color: #0087be;
- color: white;
-}
-
-.jitm-button.is-primary:hover, .jitm-button.is-primary:focus {
- border-color: #005082;
- color: white;
-}
-
-.jitm-button.is-primary[disabled], .jitm-button.is-primary:disabled {
- background: #bceefd;
- border-color: #8cc9e2;
- color: white;
-}
-
-.jitm-button.is-primary.is-compact {
- color: white;
-}
-
-.jitm-card {
- display: block;
- clear: both;
- position: relative;
- margin: 3rem auto 0 1.25rem;
- padding: 1rem;
- box-sizing: border-box;
- background: white;
- box-shadow: 0 0 0 1px rgba(213, 213, 213, 0.5), 0 1px 2px #eeeeee;
-}
-
-.jitm-card:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden;
-}
-
-@media (min-width: 481px) {
- .jitm-card {
- margin-bottom: 1rem;
- padding: 1.5rem;
- }
-}
-
-.jitm-card.is-compact {
- margin-bottom: 0.0625rem;
-}
-
-@media (min-width: 481px) {
- .jitm-card.is-compact {
- margin-bottom: 1px;
- padding: 1rem 1.5rem;
- }
-}
-
-.jitm-card.is-card-link {
- padding-left: 3rem;
-}
-
-#screen-meta-links + .jitm-card {
- margin: 2.5rem auto 0 1.5385em;
-}
-
-#dolly + .jitm-card {
- margin: 3rem auto 0 1rem;
-}
-
-.post-php .jitm-card {
- margin-left: 0;
-}
-
-.jp-lower .jitm-card {
- margin: 3rem 0 1.5rem;
-}
-
-.jitm-banner.jitm-card {
- border-right: 4px solid;
- display: flex;
- padding: 0.75rem 0.75rem 0.75rem 0.375rem;
- position: relative;
- z-index: 2;
- border-right-color: #4ab866;
-}
-
-@media (max-width: 480px) {
- .jitm-banner.jitm-card {
- display: block;
- }
-}
-
-.jitm-banner.jitm-card.is-card-link {
- padding: 0.75rem 1rem 0.75rem 3rem;
-}
-
-.jitm-banner.jitm-card.is-dismissible {
- padding-left: 3rem;
-}
-
-.jitm-banner.jitm-card .jitm-banner__icon {
- color: #4ab866;
-}
-
-.jitm-banner.jitm-card .jitm-banner__icon-circle {
- background-color: #4ab866;
-}
-
-.jitm-banner.jitm-card.is-upgrade-personal {
- border-right-color: #f0b849;
-}
-
-.jitm-banner.jitm-card.is-upgrade-personal .jitm-banner__icon {
- color: #f0b849;
-}
-
-.jitm-banner.jitm-card.is-upgrade-personal .jitm-banner__icon-circle {
- background-color: #f0b849;
-}
-
-.jitm-banner.jitm-card.is-upgrade-premium {
- border-right-color: #4ab866;
-}
-
-.jitm-banner.jitm-card.is-upgrade-premium .jitm-banner__icon {
- color: #4ab866;
-}
-
-.jitm-banner.jitm-card.is-upgrade-premium .jitm-banner__icon-circle {
- background-color: #4ab866;
-}
-
-.jitm-banner.jitm-card.is-upgrade-business, .jitm-banner.jitm-card.woo-jitm {
- border-right-color: #855DA6;
-}
-
-.jitm-banner.jitm-card.is-upgrade-business .jitm-banner__icon, .jitm-banner.jitm-card.woo-jitm .jitm-banner__icon {
- color: #855DA6;
-}
-
-.jitm-banner.jitm-card.is-upgrade-business .jitm-banner__icon-circle, .jitm-banner.jitm-card.woo-jitm .jitm-banner__icon-circle {
- background-color: #855DA6;
-}
-
-.jitm-banner.jitm-card .jitm-card__link-indicator {
- align-items: center;
- color: #0087be;
- display: flex;
-}
-
-.jitm-banner.jitm-card:hover {
- transition: all 100ms ease-in-out;
-}
-
-.jitm-banner.jitm-card:hover.is-card-link {
- box-shadow: 0 0 0 1px #a2a2a2, 0 2px 4px #d5d5d5;
-}
-
-.jitm-banner.jitm-card:hover .jitm-card__link-indicator {
- color: #005082;
-}
-
-@media (min-width: 481px) {
- .jitm-banner.jitm-card {
- padding: 0.75rem 1rem;
- }
- .jitm-banner.jitm-card.is-dismissible {
- padding-left: 1rem;
- }
-}
-
-.jitm-banner__icons {
- display: flex;
-}
-
-.jitm-banner__icons .jitm-banner__icon,
-.jitm-banner__icons .jitm-banner__icon-circle {
- border-radius: 50%;
- flex-shrink: 0;
- height: 1.5rem;
- width: 1.5rem;
- margin-left: 1rem;
- margin-top: -0.125rem;
- text-align: center;
- top: 0.25rem;
-}
-
-.jitm-banner__icons .jitm-banner__icon {
- align-self: center;
- color: white;
- display: block;
-}
-
-.jitm-banner__icons .jitm-banner__icon-circle {
- color: white;
- display: none;
- padding: 0.1875rem 0.1875rem 0.25rem 0.25rem;
-}
-
-@media (min-width: 481px) {
- .jitm-banner__icons {
- align-items: center;
- }
- .jitm-banner__icons .jitm-banner__icon {
- display: none;
- }
- .jitm-banner__icons .jitm-banner__icon-circle {
- display: block;
- }
-}
-
-.jitm-banner__icon-plan {
- display: flex;
- margin-left: 1rem;
-}
-
-.jitm-banner__icon-plan .dops-plan-icon {
- height: 2rem;
- width: 2rem;
-}
-
-.jitm-banner__icon-plan .jp-emblem {
- position: relative;
- top: 0.125rem;
-}
-
-@media (max-width: 480px) {
- .jitm-banner__icon-plan .jp-emblem {
- margin-bottom: 0.75rem;
- }
-}
-
-.jitm-banner__icon-plan .jp-emblem svg {
- height: 2rem;
- width: 2rem;
- fill: #00BE28;
-}
-
-@media (min-width: 481px) {
- .jitm-banner__icon-plan {
- align-items: center;
- }
-}
-
-.jitm-banner__content {
- align-items: center;
- display: flex;
- flex-grow: 1;
- flex-wrap: wrap;
-}
-
-@media (min-width: 481px) {
- .jitm-banner__content {
- flex-wrap: nowrap;
- }
-}
-
-.jitm-banner__info {
- flex-grow: 1;
- line-height: 1.4;
-}
-
-@media (min-width: 481px) {
- .jitm-banner__info {
- flex-basis: 50%;
- }
-}
-
-@media (min-width: 961px) {
- .jitm-banner__info {
- flex-basis: 70%;
- }
-}
-
-.jitm-banner__info .jitm-banner__title,
-.jitm-banner__info .jitm-banner__description {
- color: #414141;
-}
-
-.jitm-banner__info .jitm-banner__title {
- font-size: 14px;
- font-weight: 500;
-}
-
-.jitm-banner__info .jitm-banner__description {
- font-size: 0.75rem;
- line-height: 1.5;
- margin-top: 0.375rem;
-}
-
-.jitm-banner__info .banner__list {
- font-size: 12px;
- list-style: none;
- margin: 10px 0;
-}
-
-.jitm-banner__info .banner__list li {
- margin: 6px 0;
-}
-
-.jitm-banner__info .banner__list li .gridicon {
- fill: #a2a2a2;
- display: inline;
- margin-left: 12px;
- vertical-align: bottom;
-}
-
-.jitm-banner__action {
- align-self: center;
- font-size: 0.75rem;
- margin: 0.5rem 0 0;
- text-align: right;
- width: 100%;
-}
-
-.jitm-banner__action .jitm-banner__prices {
- display: flex;
- justify-content: flex-start;
-}
-
-.jitm-banner__action .jitm-banner__prices .dops-plan-price {
- margin-bottom: 0;
-}
-
-.jitm-banner__action .jitm-banner__prices .dops-plan-price.is-discounted,
-.jitm-banner__action .jitm-banner__prices .dops-plan-price.is-discounted .dops-plan-price__currency-symbol {
- color: #414141;
-}
-
-.has-call-to-action .jitm-banner__action .jitm-banner__prices .dops-plan-price {
- margin-bottom: 0.5rem;
-}
-
-@media (min-width: 481px) {
- .jitm-banner__action {
- margin: 0 0.5rem 0 0.25rem;
- text-align: center;
- width: auto;
- }
- .jitm-banner__action .is-dismissible {
- margin-top: 2.5rem;
- }
- .jitm-banner__action .jitm-banner__prices {
- justify-content: flex-end;
- text-align: left;
- }
-}
-
-.jitm-banner__dismiss {
- display: block;
- text-decoration: none;
- line-height: .5;
-}
-
-.jitm-banner__dismiss:before {
- color: #6f6f6f;
- font: 400 16px/1 dashicons;
- content: '\f158';
-}
-
-@media (min-width: 661px) {
- .jitm-banner__dismiss {
- margin-left: -0.5rem;
- }
-}
-
-@media (max-width: 480px) {
- .jitm-banner__dismiss {
- position: absolute;
- top: 0.875rem;
- left: 0.875rem;
- }
-}
-
-.jitm-banner__action + .jitm-banner__dismiss {
- margin-right: 0.625rem;
-}
-
-#dolly + .jitm-card {
- margin: 3rem auto 0 1rem;
-}
-
-/*# sourceMappingURL=jetpack-admin-jitm-rtl.css.map */
diff --git a/plugins/jetpack/css/jetpack-admin-jitm-rtl.css.map b/plugins/jetpack/css/jetpack-admin-jitm-rtl.css.map
deleted file mode 100644
index 01c29721..00000000
--- a/plugins/jetpack/css/jetpack-admin-jitm-rtl.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"names":[],"mappings":"","sources":["jetpack-admin-jitm-rtl.css"],"sourcesContent":["/*!\n* Do not modify this file directly. It is compiled SASS code.\n*/\n@charset \"UTF-8\";\n/*\nThe MIT License (MIT)\n\nCopyright © 2011–2015 thoughtbot, inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\ndocumentation files (the “Software”), to deal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit\npersons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial\nportions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nhttps://github.com/thoughtbot/bourbon\n*/\n.jitm-button {\n background: white;\n border-color: #d5d5d5;\n border-style: solid;\n border-width: 1px 1px 2px;\n color: #414141;\n cursor: pointer;\n display: inline-block;\n margin: 0;\n outline: 0;\n overflow: hidden;\n font-weight: 500;\n text-overflow: ellipsis;\n text-decoration: none;\n vertical-align: top;\n box-sizing: border-box;\n font-size: 0.875rem;\n line-height: 1.3125rem;\n border-radius: 0.25rem;\n padding: 0.4375rem 0.875rem 0.5625rem;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\n.jitm-button:hover {\n border-color: #bbbbbb;\n color: #414141;\n}\n\n.jitm-button:active {\n border-width: 2px 1px 1px;\n}\n\n.jitm-button:visited {\n color: #414141;\n}\n\n.jitm-button[disabled], .jitm-button:disabled {\n color: #eeeeee;\n background: white;\n border-color: #eeeeee;\n cursor: default;\n}\n\n.jitm-button[disabled]:active, .jitm-button:disabled:active {\n border-width: 1px 1px 2px;\n}\n\n.jitm-button:focus {\n outline: 0;\n border-color: #00aadc;\n box-shadow: 0 0 0 2px #78dcfa;\n}\n\n.jitm-button.is-compact {\n padding: 0.4375rem;\n color: #888888;\n font-size: 0.75rem;\n line-height: 1;\n}\n\n.jitm-button.is-compact:disabled {\n color: #eeeeee;\n}\n\n.jitm-button.hidden {\n display: none;\n}\n\n.jitm-button.is-primary {\n background: #00aadc;\n border-color: #0087be;\n color: white;\n}\n\n.jitm-button.is-primary:hover, .jitm-button.is-primary:focus {\n border-color: #005082;\n color: white;\n}\n\n.jitm-button.is-primary[disabled], .jitm-button.is-primary:disabled {\n background: #bceefd;\n border-color: #8cc9e2;\n color: white;\n}\n\n.jitm-button.is-primary.is-compact {\n color: white;\n}\n\n.jitm-card {\n display: block;\n clear: both;\n position: relative;\n margin: 3rem auto 0 1.25rem;\n padding: 1rem;\n box-sizing: border-box;\n background: white;\n box-shadow: 0 0 0 1px rgba(213, 213, 213, 0.5), 0 1px 2px #eeeeee;\n}\n\n.jitm-card:after {\n content: \".\";\n display: block;\n height: 0;\n clear: both;\n visibility: hidden;\n}\n\n@media (min-width: 481px) {\n .jitm-card {\n margin-bottom: 1rem;\n padding: 1.5rem;\n }\n}\n\n.jitm-card.is-compact {\n margin-bottom: 0.0625rem;\n}\n\n@media (min-width: 481px) {\n .jitm-card.is-compact {\n margin-bottom: 1px;\n padding: 1rem 1.5rem;\n }\n}\n\n.jitm-card.is-card-link {\n padding-left: 3rem;\n}\n\n#screen-meta-links + .jitm-card {\n margin: 2.5rem auto 0 1.5385em;\n}\n\n#dolly + .jitm-card {\n margin: 3rem auto 0 1rem;\n}\n\n.post-php .jitm-card {\n margin-left: 0;\n}\n\n.jp-lower .jitm-card {\n margin: 3rem 0 1.5rem;\n}\n\n.jitm-banner.jitm-card {\n border-right: 4px solid;\n display: flex;\n padding: 0.75rem 0.75rem 0.75rem 0.375rem;\n position: relative;\n z-index: 2;\n border-right-color: #4ab866;\n}\n\n@media (max-width: 480px) {\n .jitm-banner.jitm-card {\n display: block;\n }\n}\n\n.jitm-banner.jitm-card.is-card-link {\n padding: 0.75rem 1rem 0.75rem 3rem;\n}\n\n.jitm-banner.jitm-card.is-dismissible {\n padding-left: 3rem;\n}\n\n.jitm-banner.jitm-card .jitm-banner__icon {\n color: #4ab866;\n}\n\n.jitm-banner.jitm-card .jitm-banner__icon-circle {\n background-color: #4ab866;\n}\n\n.jitm-banner.jitm-card.is-upgrade-personal {\n border-right-color: #f0b849;\n}\n\n.jitm-banner.jitm-card.is-upgrade-personal .jitm-banner__icon {\n color: #f0b849;\n}\n\n.jitm-banner.jitm-card.is-upgrade-personal .jitm-banner__icon-circle {\n background-color: #f0b849;\n}\n\n.jitm-banner.jitm-card.is-upgrade-premium {\n border-right-color: #4ab866;\n}\n\n.jitm-banner.jitm-card.is-upgrade-premium .jitm-banner__icon {\n color: #4ab866;\n}\n\n.jitm-banner.jitm-card.is-upgrade-premium .jitm-banner__icon-circle {\n background-color: #4ab866;\n}\n\n.jitm-banner.jitm-card.is-upgrade-business, .jitm-banner.jitm-card.woo-jitm {\n border-right-color: #855DA6;\n}\n\n.jitm-banner.jitm-card.is-upgrade-business .jitm-banner__icon, .jitm-banner.jitm-card.woo-jitm .jitm-banner__icon {\n color: #855DA6;\n}\n\n.jitm-banner.jitm-card.is-upgrade-business .jitm-banner__icon-circle, .jitm-banner.jitm-card.woo-jitm .jitm-banner__icon-circle {\n background-color: #855DA6;\n}\n\n.jitm-banner.jitm-card .jitm-card__link-indicator {\n align-items: center;\n color: #0087be;\n display: flex;\n}\n\n.jitm-banner.jitm-card:hover {\n transition: all 100ms ease-in-out;\n}\n\n.jitm-banner.jitm-card:hover.is-card-link {\n box-shadow: 0 0 0 1px #a2a2a2, 0 2px 4px #d5d5d5;\n}\n\n.jitm-banner.jitm-card:hover .jitm-card__link-indicator {\n color: #005082;\n}\n\n@media (min-width: 481px) {\n .jitm-banner.jitm-card {\n padding: 0.75rem 1rem;\n }\n .jitm-banner.jitm-card.is-dismissible {\n padding-left: 1rem;\n }\n}\n\n.jitm-banner__icons {\n display: flex;\n}\n\n.jitm-banner__icons .jitm-banner__icon,\n.jitm-banner__icons .jitm-banner__icon-circle {\n border-radius: 50%;\n flex-shrink: 0;\n height: 1.5rem;\n width: 1.5rem;\n margin-left: 1rem;\n margin-top: -0.125rem;\n text-align: center;\n top: 0.25rem;\n}\n\n.jitm-banner__icons .jitm-banner__icon {\n align-self: center;\n color: white;\n display: block;\n}\n\n.jitm-banner__icons .jitm-banner__icon-circle {\n color: white;\n display: none;\n padding: 0.1875rem 0.1875rem 0.25rem 0.25rem;\n}\n\n@media (min-width: 481px) {\n .jitm-banner__icons {\n align-items: center;\n }\n .jitm-banner__icons .jitm-banner__icon {\n display: none;\n }\n .jitm-banner__icons .jitm-banner__icon-circle {\n display: block;\n }\n}\n\n.jitm-banner__icon-plan {\n display: flex;\n margin-left: 1rem;\n}\n\n.jitm-banner__icon-plan .dops-plan-icon {\n height: 2rem;\n width: 2rem;\n}\n\n.jitm-banner__icon-plan .jp-emblem {\n position: relative;\n top: 0.125rem;\n}\n\n@media (max-width: 480px) {\n .jitm-banner__icon-plan .jp-emblem {\n margin-bottom: 0.75rem;\n }\n}\n\n.jitm-banner__icon-plan .jp-emblem svg {\n height: 2rem;\n width: 2rem;\n fill: #00BE28;\n}\n\n@media (min-width: 481px) {\n .jitm-banner__icon-plan {\n align-items: center;\n }\n}\n\n.jitm-banner__content {\n align-items: center;\n display: flex;\n flex-grow: 1;\n flex-wrap: wrap;\n}\n\n@media (min-width: 481px) {\n .jitm-banner__content {\n flex-wrap: nowrap;\n }\n}\n\n.jitm-banner__info {\n flex-grow: 1;\n line-height: 1.4;\n}\n\n@media (min-width: 481px) {\n .jitm-banner__info {\n flex-basis: 50%;\n }\n}\n\n@media (min-width: 961px) {\n .jitm-banner__info {\n flex-basis: 70%;\n }\n}\n\n.jitm-banner__info .jitm-banner__title,\n.jitm-banner__info .jitm-banner__description {\n color: #414141;\n}\n\n.jitm-banner__info .jitm-banner__title {\n font-size: 14px;\n font-weight: 500;\n}\n\n.jitm-banner__info .jitm-banner__description {\n font-size: 0.75rem;\n line-height: 1.5;\n margin-top: 0.375rem;\n}\n\n.jitm-banner__info .banner__list {\n font-size: 12px;\n list-style: none;\n margin: 10px 0;\n}\n\n.jitm-banner__info .banner__list li {\n margin: 6px 0;\n}\n\n.jitm-banner__info .banner__list li .gridicon {\n fill: #a2a2a2;\n display: inline;\n margin-left: 12px;\n vertical-align: bottom;\n}\n\n.jitm-banner__action {\n align-self: center;\n font-size: 0.75rem;\n margin: 0.5rem 0 0;\n text-align: right;\n width: 100%;\n}\n\n.jitm-banner__action .jitm-banner__prices {\n display: flex;\n justify-content: flex-start;\n}\n\n.jitm-banner__action .jitm-banner__prices .dops-plan-price {\n margin-bottom: 0;\n}\n\n.jitm-banner__action .jitm-banner__prices .dops-plan-price.is-discounted,\n.jitm-banner__action .jitm-banner__prices .dops-plan-price.is-discounted .dops-plan-price__currency-symbol {\n color: #414141;\n}\n\n.has-call-to-action .jitm-banner__action .jitm-banner__prices .dops-plan-price {\n margin-bottom: 0.5rem;\n}\n\n@media (min-width: 481px) {\n .jitm-banner__action {\n margin: 0 0.5rem 0 0.25rem;\n text-align: center;\n width: auto;\n }\n .jitm-banner__action .is-dismissible {\n margin-top: 2.5rem;\n }\n .jitm-banner__action .jitm-banner__prices {\n justify-content: flex-end;\n text-align: left;\n }\n}\n\n.jitm-banner__dismiss {\n display: block;\n text-decoration: none;\n line-height: .5;\n}\n\n.jitm-banner__dismiss:before {\n color: #6f6f6f;\n font: 400 16px/1 dashicons;\n content: '\\f158';\n}\n\n@media (min-width: 661px) {\n .jitm-banner__dismiss {\n margin-left: -0.5rem;\n }\n}\n\n@media (max-width: 480px) {\n .jitm-banner__dismiss {\n position: absolute;\n top: 0.875rem;\n left: 0.875rem;\n }\n}\n\n.jitm-banner__action + .jitm-banner__dismiss {\n margin-right: 0.625rem;\n}\n\n#dolly + .jitm-card {\n margin: 3rem auto 0 1rem;\n}\n"],"file":"jetpack-admin-jitm-rtl.css"} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-admin-jitm-rtl.css.min.map b/plugins/jetpack/css/jetpack-admin-jitm-rtl.css.min.map
deleted file mode 100644
index e69de29b..00000000
--- a/plugins/jetpack/css/jetpack-admin-jitm-rtl.css.min.map
+++ /dev/null
diff --git a/plugins/jetpack/css/jetpack-admin-jitm-rtl.min.css b/plugins/jetpack/css/jetpack-admin-jitm-rtl.min.css
deleted file mode 100644
index bc8e692e..00000000
--- a/plugins/jetpack/css/jetpack-admin-jitm-rtl.min.css
+++ /dev/null
@@ -1,3 +0,0 @@
-@charset "UTF-8";/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/.jitm-button{background:#fff;border-color:#d5d5d5;border-style:solid;border-width:1px 1px 2px;color:#414141;cursor:pointer;display:inline-block;margin:0;outline:0;overflow:hidden;font-weight:500;text-overflow:ellipsis;text-decoration:none;vertical-align:top;box-sizing:border-box;font-size:.875rem;line-height:1.3125rem;border-radius:.25rem;padding:.4375rem .875rem .5625rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.jitm-button:hover{border-color:#bbb;color:#414141}.jitm-button:active{border-width:2px 1px 1px}.jitm-button:visited{color:#414141}.jitm-button:disabled,.jitm-button[disabled]{color:#eee;background:#fff;border-color:#eee;cursor:default}.jitm-button:disabled:active,.jitm-button[disabled]:active{border-width:1px 1px 2px}.jitm-button:focus{outline:0;border-color:#00aadc;box-shadow:0 0 0 2px #78dcfa}.jitm-button.is-compact{padding:.4375rem;color:#888;font-size:.75rem;line-height:1}.jitm-button.is-compact:disabled{color:#eee}.jitm-button.hidden{display:none}.jitm-button.is-primary{background:#00aadc;border-color:#0087be;color:#fff}.jitm-button.is-primary:focus,.jitm-button.is-primary:hover{border-color:#005082;color:#fff}.jitm-button.is-primary:disabled,.jitm-button.is-primary[disabled]{background:#bceefd;border-color:#8cc9e2;color:#fff}.jitm-button.is-primary.is-compact{color:#fff}.jitm-card{display:block;clear:both;position:relative;margin:3rem auto 0 1.25rem;padding:1rem;box-sizing:border-box;background:#fff;box-shadow:0 0 0 1px rgba(213,213,213,.5),0 1px 2px #eee}.jitm-card:after{content:".";display:block;height:0;clear:both;visibility:hidden}@media (min-width:481px){.jitm-card{margin-bottom:1rem;padding:1.5rem}}.jitm-card.is-compact{margin-bottom:.0625rem}@media (min-width:481px){.jitm-card.is-compact{margin-bottom:1px;padding:1rem 1.5rem}}.jitm-card.is-card-link{padding-left:3rem}#screen-meta-links+.jitm-card{margin:2.5rem auto 0 1.5385em}#dolly+.jitm-card{margin:3rem auto 0 1rem}.post-php .jitm-card{margin-left:0}.jp-lower .jitm-card{margin:3rem 0 1.5rem}.jitm-banner.jitm-card{border-right:4px solid;display:flex;padding:.75rem .75rem .75rem .375rem;position:relative;z-index:2;border-right-color:#4ab866}@media (max-width:480px){.jitm-banner.jitm-card{display:block}}.jitm-banner.jitm-card.is-card-link{padding:.75rem 1rem .75rem 3rem}.jitm-banner.jitm-card.is-dismissible{padding-left:3rem}.jitm-banner.jitm-card .jitm-banner__icon{color:#4ab866}.jitm-banner.jitm-card .jitm-banner__icon-circle{background-color:#4ab866}.jitm-banner.jitm-card.is-upgrade-personal{border-right-color:#f0b849}.jitm-banner.jitm-card.is-upgrade-personal .jitm-banner__icon{color:#f0b849}.jitm-banner.jitm-card.is-upgrade-personal .jitm-banner__icon-circle{background-color:#f0b849}.jitm-banner.jitm-card.is-upgrade-premium{border-right-color:#4ab866}.jitm-banner.jitm-card.is-upgrade-premium .jitm-banner__icon{color:#4ab866}.jitm-banner.jitm-card.is-upgrade-premium .jitm-banner__icon-circle{background-color:#4ab866}.jitm-banner.jitm-card.is-upgrade-business,.jitm-banner.jitm-card.woo-jitm{border-right-color:#855da6}.jitm-banner.jitm-card.is-upgrade-business .jitm-banner__icon,.jitm-banner.jitm-card.woo-jitm .jitm-banner__icon{color:#855da6}.jitm-banner.jitm-card.is-upgrade-business .jitm-banner__icon-circle,.jitm-banner.jitm-card.woo-jitm .jitm-banner__icon-circle{background-color:#855da6}.jitm-banner.jitm-card .jitm-card__link-indicator{align-items:center;color:#0087be;display:flex}.jitm-banner.jitm-card:hover{transition:all .1s ease-in-out}.jitm-banner.jitm-card:hover.is-card-link{box-shadow:0 0 0 1px #a2a2a2,0 2px 4px #d5d5d5}.jitm-banner.jitm-card:hover .jitm-card__link-indicator{color:#005082}@media (min-width:481px){.jitm-banner.jitm-card{padding:.75rem 1rem}.jitm-banner.jitm-card.is-dismissible{padding-left:1rem}}.jitm-banner__icons{display:flex}.jitm-banner__icons .jitm-banner__icon,.jitm-banner__icons .jitm-banner__icon-circle{border-radius:50%;flex-shrink:0;height:1.5rem;width:1.5rem;margin-left:1rem;margin-top:-.125rem;text-align:center;top:.25rem}.jitm-banner__icons .jitm-banner__icon{align-self:center;color:#fff;display:block}.jitm-banner__icons .jitm-banner__icon-circle{color:#fff;display:none;padding:.1875rem .1875rem .25rem .25rem}@media (min-width:481px){.jitm-banner__icons{align-items:center}.jitm-banner__icons .jitm-banner__icon{display:none}.jitm-banner__icons .jitm-banner__icon-circle{display:block}}.jitm-banner__icon-plan{display:flex;margin-left:1rem}.jitm-banner__icon-plan .dops-plan-icon{height:2rem;width:2rem}.jitm-banner__icon-plan .jp-emblem{position:relative;top:.125rem}@media (max-width:480px){.jitm-banner__icon-plan .jp-emblem{margin-bottom:.75rem}}.jitm-banner__icon-plan .jp-emblem svg{height:2rem;width:2rem;fill:#00be28}@media (min-width:481px){.jitm-banner__icon-plan{align-items:center}}.jitm-banner__content{align-items:center;display:flex;flex-grow:1;flex-wrap:wrap}@media (min-width:481px){.jitm-banner__content{flex-wrap:nowrap}}.jitm-banner__info{flex-grow:1;line-height:1.4}@media (min-width:481px){.jitm-banner__info{flex-basis:50%}}@media (min-width:961px){.jitm-banner__info{flex-basis:70%}}.jitm-banner__info .jitm-banner__description,.jitm-banner__info .jitm-banner__title{color:#414141}.jitm-banner__info .jitm-banner__title{font-size:14px;font-weight:500}.jitm-banner__info .jitm-banner__description{font-size:.75rem;line-height:1.5;margin-top:.375rem}.jitm-banner__info .banner__list{font-size:12px;list-style:none;margin:10px 0}.jitm-banner__info .banner__list li{margin:6px 0}.jitm-banner__info .banner__list li .gridicon{fill:#a2a2a2;display:inline;margin-left:12px;vertical-align:bottom}.jitm-banner__action{align-self:center;font-size:.75rem;margin:.5rem 0 0;text-align:right;width:100%}.jitm-banner__action .jitm-banner__prices{display:flex;justify-content:flex-start}.jitm-banner__action .jitm-banner__prices .dops-plan-price{margin-bottom:0}.jitm-banner__action .jitm-banner__prices .dops-plan-price.is-discounted,.jitm-banner__action .jitm-banner__prices .dops-plan-price.is-discounted .dops-plan-price__currency-symbol{color:#414141}.has-call-to-action .jitm-banner__action .jitm-banner__prices .dops-plan-price{margin-bottom:.5rem}@media (min-width:481px){.jitm-banner__action{margin:0 .5rem 0 .25rem;text-align:center;width:auto}.jitm-banner__action .is-dismissible{margin-top:2.5rem}.jitm-banner__action .jitm-banner__prices{justify-content:flex-end;text-align:left}}.jitm-banner__dismiss{display:block;text-decoration:none;line-height:.5}.jitm-banner__dismiss:before{color:#6f6f6f;font:400 16px/1 dashicons;content:'\f158'}@media (min-width:661px){.jitm-banner__dismiss{margin-left:-.5rem}}@media (max-width:480px){.jitm-banner__dismiss{position:absolute;top:.875rem;left:.875rem}}.jitm-banner__action+.jitm-banner__dismiss{margin-right:.625rem}#dolly+.jitm-card{margin:3rem auto 0 1rem} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-admin-jitm.css b/plugins/jetpack/css/jetpack-admin-jitm.css
deleted file mode 100644
index c0de2651..00000000
--- a/plugins/jetpack/css/jetpack-admin-jitm.css
+++ /dev/null
@@ -1,478 +0,0 @@
-/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/
-@charset "UTF-8";
-/*
-The MIT License (MIT)
-
-Copyright © 2011–2015 thoughtbot, inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
-documentation files (the “Software”), to deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
-persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial
-portions of the Software.
-
-THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-https://github.com/thoughtbot/bourbon
-*/
-.jitm-button {
- background: white;
- border-color: #d5d5d5;
- border-style: solid;
- border-width: 1px 1px 2px;
- color: #414141;
- cursor: pointer;
- display: inline-block;
- margin: 0;
- outline: 0;
- overflow: hidden;
- font-weight: 500;
- text-overflow: ellipsis;
- text-decoration: none;
- vertical-align: top;
- box-sizing: border-box;
- font-size: 0.875rem;
- line-height: 1.3125rem;
- border-radius: 0.25rem;
- padding: 0.4375rem 0.875rem 0.5625rem;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
-}
-
-.jitm-button:hover {
- border-color: #bbbbbb;
- color: #414141;
-}
-
-.jitm-button:active {
- border-width: 2px 1px 1px;
-}
-
-.jitm-button:visited {
- color: #414141;
-}
-
-.jitm-button[disabled], .jitm-button:disabled {
- color: #eeeeee;
- background: white;
- border-color: #eeeeee;
- cursor: default;
-}
-
-.jitm-button[disabled]:active, .jitm-button:disabled:active {
- border-width: 1px 1px 2px;
-}
-
-.jitm-button:focus {
- outline: 0;
- border-color: #00aadc;
- box-shadow: 0 0 0 2px #78dcfa;
-}
-
-.jitm-button.is-compact {
- padding: 0.4375rem;
- color: #888888;
- font-size: 0.75rem;
- line-height: 1;
-}
-
-.jitm-button.is-compact:disabled {
- color: #eeeeee;
-}
-
-.jitm-button.hidden {
- display: none;
-}
-
-.jitm-button.is-primary {
- background: #00aadc;
- border-color: #0087be;
- color: white;
-}
-
-.jitm-button.is-primary:hover, .jitm-button.is-primary:focus {
- border-color: #005082;
- color: white;
-}
-
-.jitm-button.is-primary[disabled], .jitm-button.is-primary:disabled {
- background: #bceefd;
- border-color: #8cc9e2;
- color: white;
-}
-
-.jitm-button.is-primary.is-compact {
- color: white;
-}
-
-.jitm-card {
- display: block;
- clear: both;
- position: relative;
- margin: 3rem 1.25rem 0 auto;
- padding: 1rem;
- box-sizing: border-box;
- background: white;
- box-shadow: 0 0 0 1px rgba(213, 213, 213, 0.5), 0 1px 2px #eeeeee;
-}
-
-.jitm-card:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden;
-}
-
-@media (min-width: 481px) {
- .jitm-card {
- margin-bottom: 1rem;
- padding: 1.5rem;
- }
-}
-
-.jitm-card.is-compact {
- margin-bottom: 0.0625rem;
-}
-
-@media (min-width: 481px) {
- .jitm-card.is-compact {
- margin-bottom: 1px;
- padding: 1rem 1.5rem;
- }
-}
-
-.jitm-card.is-card-link {
- padding-right: 3rem;
-}
-
-#screen-meta-links + .jitm-card {
- margin: 2.5rem 1.5385em 0 auto;
-}
-
-#dolly + .jitm-card {
- margin: 3rem 1rem 0 auto;
-}
-
-.post-php .jitm-card {
- margin-right: 0;
-}
-
-.jp-lower .jitm-card {
- margin: 3rem 0 1.5rem;
-}
-
-.jitm-banner.jitm-card {
- border-left: 4px solid;
- display: flex;
- padding: 0.75rem 0.375rem 0.75rem 0.75rem;
- position: relative;
- z-index: 2;
- border-left-color: #4ab866;
-}
-
-@media (max-width: 480px) {
- .jitm-banner.jitm-card {
- display: block;
- }
-}
-
-.jitm-banner.jitm-card.is-card-link {
- padding: 0.75rem 3rem 0.75rem 1rem;
-}
-
-.jitm-banner.jitm-card.is-dismissible {
- padding-right: 3rem;
-}
-
-.jitm-banner.jitm-card .jitm-banner__icon {
- color: #4ab866;
-}
-
-.jitm-banner.jitm-card .jitm-banner__icon-circle {
- background-color: #4ab866;
-}
-
-.jitm-banner.jitm-card.is-upgrade-personal {
- border-left-color: #f0b849;
-}
-
-.jitm-banner.jitm-card.is-upgrade-personal .jitm-banner__icon {
- color: #f0b849;
-}
-
-.jitm-banner.jitm-card.is-upgrade-personal .jitm-banner__icon-circle {
- background-color: #f0b849;
-}
-
-.jitm-banner.jitm-card.is-upgrade-premium {
- border-left-color: #4ab866;
-}
-
-.jitm-banner.jitm-card.is-upgrade-premium .jitm-banner__icon {
- color: #4ab866;
-}
-
-.jitm-banner.jitm-card.is-upgrade-premium .jitm-banner__icon-circle {
- background-color: #4ab866;
-}
-
-.jitm-banner.jitm-card.is-upgrade-business, .jitm-banner.jitm-card.woo-jitm {
- border-left-color: #855DA6;
-}
-
-.jitm-banner.jitm-card.is-upgrade-business .jitm-banner__icon, .jitm-banner.jitm-card.woo-jitm .jitm-banner__icon {
- color: #855DA6;
-}
-
-.jitm-banner.jitm-card.is-upgrade-business .jitm-banner__icon-circle, .jitm-banner.jitm-card.woo-jitm .jitm-banner__icon-circle {
- background-color: #855DA6;
-}
-
-.jitm-banner.jitm-card .jitm-card__link-indicator {
- align-items: center;
- color: #0087be;
- display: flex;
-}
-
-.jitm-banner.jitm-card:hover {
- transition: all 100ms ease-in-out;
-}
-
-.jitm-banner.jitm-card:hover.is-card-link {
- box-shadow: 0 0 0 1px #a2a2a2, 0 2px 4px #d5d5d5;
-}
-
-.jitm-banner.jitm-card:hover .jitm-card__link-indicator {
- color: #005082;
-}
-
-@media (min-width: 481px) {
- .jitm-banner.jitm-card {
- padding: 0.75rem 1rem;
- }
- .jitm-banner.jitm-card.is-dismissible {
- padding-right: 1rem;
- }
-}
-
-.jitm-banner__icons {
- display: flex;
-}
-
-.jitm-banner__icons .jitm-banner__icon,
-.jitm-banner__icons .jitm-banner__icon-circle {
- border-radius: 50%;
- flex-shrink: 0;
- height: 1.5rem;
- width: 1.5rem;
- margin-right: 1rem;
- margin-top: -0.125rem;
- text-align: center;
- top: 0.25rem;
-}
-
-.jitm-banner__icons .jitm-banner__icon {
- align-self: center;
- color: white;
- display: block;
-}
-
-.jitm-banner__icons .jitm-banner__icon-circle {
- color: white;
- display: none;
- padding: 0.1875rem 0.25rem 0.25rem 0.1875rem;
-}
-
-@media (min-width: 481px) {
- .jitm-banner__icons {
- align-items: center;
- }
- .jitm-banner__icons .jitm-banner__icon {
- display: none;
- }
- .jitm-banner__icons .jitm-banner__icon-circle {
- display: block;
- }
-}
-
-.jitm-banner__icon-plan {
- display: flex;
- margin-right: 1rem;
-}
-
-.jitm-banner__icon-plan .dops-plan-icon {
- height: 2rem;
- width: 2rem;
-}
-
-.jitm-banner__icon-plan .jp-emblem {
- position: relative;
- top: 0.125rem;
-}
-
-@media (max-width: 480px) {
- .jitm-banner__icon-plan .jp-emblem {
- margin-bottom: 0.75rem;
- }
-}
-
-.jitm-banner__icon-plan .jp-emblem svg {
- height: 2rem;
- width: 2rem;
- fill: #00BE28;
-}
-
-@media (min-width: 481px) {
- .jitm-banner__icon-plan {
- align-items: center;
- }
-}
-
-.jitm-banner__content {
- align-items: center;
- display: flex;
- flex-grow: 1;
- flex-wrap: wrap;
-}
-
-@media (min-width: 481px) {
- .jitm-banner__content {
- flex-wrap: nowrap;
- }
-}
-
-.jitm-banner__info {
- flex-grow: 1;
- line-height: 1.4;
-}
-
-@media (min-width: 481px) {
- .jitm-banner__info {
- flex-basis: 50%;
- }
-}
-
-@media (min-width: 961px) {
- .jitm-banner__info {
- flex-basis: 70%;
- }
-}
-
-.jitm-banner__info .jitm-banner__title,
-.jitm-banner__info .jitm-banner__description {
- color: #414141;
-}
-
-.jitm-banner__info .jitm-banner__title {
- font-size: 14px;
- font-weight: 500;
-}
-
-.jitm-banner__info .jitm-banner__description {
- font-size: 0.75rem;
- line-height: 1.5;
- margin-top: 0.375rem;
-}
-
-.jitm-banner__info .banner__list {
- font-size: 12px;
- list-style: none;
- margin: 10px 0;
-}
-
-.jitm-banner__info .banner__list li {
- margin: 6px 0;
-}
-
-.jitm-banner__info .banner__list li .gridicon {
- fill: #a2a2a2;
- display: inline;
- margin-right: 12px;
- vertical-align: bottom;
-}
-
-.jitm-banner__action {
- align-self: center;
- font-size: 0.75rem;
- margin: 0.5rem 0 0;
- text-align: left;
- width: 100%;
-}
-
-.jitm-banner__action .jitm-banner__prices {
- display: flex;
- justify-content: flex-start;
-}
-
-.jitm-banner__action .jitm-banner__prices .dops-plan-price {
- margin-bottom: 0;
-}
-
-.jitm-banner__action .jitm-banner__prices .dops-plan-price.is-discounted,
-.jitm-banner__action .jitm-banner__prices .dops-plan-price.is-discounted .dops-plan-price__currency-symbol {
- color: #414141;
-}
-
-.has-call-to-action .jitm-banner__action .jitm-banner__prices .dops-plan-price {
- margin-bottom: 0.5rem;
-}
-
-@media (min-width: 481px) {
- .jitm-banner__action {
- margin: 0 0.25rem 0 0.5rem;
- text-align: center;
- width: auto;
- }
- .jitm-banner__action .is-dismissible {
- margin-top: 2.5rem;
- }
- .jitm-banner__action .jitm-banner__prices {
- justify-content: flex-end;
- text-align: right;
- }
-}
-
-.jitm-banner__dismiss {
- display: block;
- text-decoration: none;
- line-height: .5;
-}
-
-.jitm-banner__dismiss:before {
- color: #6f6f6f;
- font: 400 16px/1 dashicons;
- content: '\f158';
-}
-
-@media (min-width: 661px) {
- .jitm-banner__dismiss {
- margin-right: -0.5rem;
- }
-}
-
-@media (max-width: 480px) {
- .jitm-banner__dismiss {
- position: absolute;
- top: 0.875rem;
- right: 0.875rem;
- }
-}
-
-.jitm-banner__action + .jitm-banner__dismiss {
- margin-left: 0.625rem;
-}
-
-#dolly + .jitm-card {
- margin: 3rem 1rem 0 auto;
-}
-
-/*# sourceMappingURL=jetpack-admin-jitm.css.map */
diff --git a/plugins/jetpack/css/jetpack-admin-jitm.css.map b/plugins/jetpack/css/jetpack-admin-jitm.css.map
deleted file mode 100644
index 7e28a67d..00000000
--- a/plugins/jetpack/css/jetpack-admin-jitm.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"names":[],"mappings":"","sources":["jetpack-admin-jitm.css"],"sourcesContent":["/*!\n* Do not modify this file directly. It is compiled SASS code.\n*/\n@charset \"UTF-8\";\n/*\nThe MIT License (MIT)\n\nCopyright © 2011–2015 thoughtbot, inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\ndocumentation files (the “Software”), to deal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit\npersons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial\nportions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nhttps://github.com/thoughtbot/bourbon\n*/\n.jitm-button {\n background: white;\n border-color: #d5d5d5;\n border-style: solid;\n border-width: 1px 1px 2px;\n color: #414141;\n cursor: pointer;\n display: inline-block;\n margin: 0;\n outline: 0;\n overflow: hidden;\n font-weight: 500;\n text-overflow: ellipsis;\n text-decoration: none;\n vertical-align: top;\n box-sizing: border-box;\n font-size: 0.875rem;\n line-height: 1.3125rem;\n border-radius: 0.25rem;\n padding: 0.4375rem 0.875rem 0.5625rem;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\n.jitm-button:hover {\n border-color: #bbbbbb;\n color: #414141;\n}\n\n.jitm-button:active {\n border-width: 2px 1px 1px;\n}\n\n.jitm-button:visited {\n color: #414141;\n}\n\n.jitm-button[disabled], .jitm-button:disabled {\n color: #eeeeee;\n background: white;\n border-color: #eeeeee;\n cursor: default;\n}\n\n.jitm-button[disabled]:active, .jitm-button:disabled:active {\n border-width: 1px 1px 2px;\n}\n\n.jitm-button:focus {\n outline: 0;\n border-color: #00aadc;\n box-shadow: 0 0 0 2px #78dcfa;\n}\n\n.jitm-button.is-compact {\n padding: 0.4375rem;\n color: #888888;\n font-size: 0.75rem;\n line-height: 1;\n}\n\n.jitm-button.is-compact:disabled {\n color: #eeeeee;\n}\n\n.jitm-button.hidden {\n display: none;\n}\n\n.jitm-button.is-primary {\n background: #00aadc;\n border-color: #0087be;\n color: white;\n}\n\n.jitm-button.is-primary:hover, .jitm-button.is-primary:focus {\n border-color: #005082;\n color: white;\n}\n\n.jitm-button.is-primary[disabled], .jitm-button.is-primary:disabled {\n background: #bceefd;\n border-color: #8cc9e2;\n color: white;\n}\n\n.jitm-button.is-primary.is-compact {\n color: white;\n}\n\n.jitm-card {\n display: block;\n clear: both;\n position: relative;\n margin: 3rem 1.25rem 0 auto;\n padding: 1rem;\n box-sizing: border-box;\n background: white;\n box-shadow: 0 0 0 1px rgba(213, 213, 213, 0.5), 0 1px 2px #eeeeee;\n}\n\n.jitm-card:after {\n content: \".\";\n display: block;\n height: 0;\n clear: both;\n visibility: hidden;\n}\n\n@media (min-width: 481px) {\n .jitm-card {\n margin-bottom: 1rem;\n padding: 1.5rem;\n }\n}\n\n.jitm-card.is-compact {\n margin-bottom: 0.0625rem;\n}\n\n@media (min-width: 481px) {\n .jitm-card.is-compact {\n margin-bottom: 1px;\n padding: 1rem 1.5rem;\n }\n}\n\n.jitm-card.is-card-link {\n padding-right: 3rem;\n}\n\n#screen-meta-links + .jitm-card {\n margin: 2.5rem 1.5385em 0 auto;\n}\n\n#dolly + .jitm-card {\n margin: 3rem 1rem 0 auto;\n}\n\n.post-php .jitm-card {\n margin-right: 0;\n}\n\n.jp-lower .jitm-card {\n margin: 3rem 0 1.5rem;\n}\n\n.jitm-banner.jitm-card {\n border-left: 4px solid;\n display: flex;\n padding: 0.75rem 0.375rem 0.75rem 0.75rem;\n position: relative;\n z-index: 2;\n border-left-color: #4ab866;\n}\n\n@media (max-width: 480px) {\n .jitm-banner.jitm-card {\n display: block;\n }\n}\n\n.jitm-banner.jitm-card.is-card-link {\n padding: 0.75rem 3rem 0.75rem 1rem;\n}\n\n.jitm-banner.jitm-card.is-dismissible {\n padding-right: 3rem;\n}\n\n.jitm-banner.jitm-card .jitm-banner__icon {\n color: #4ab866;\n}\n\n.jitm-banner.jitm-card .jitm-banner__icon-circle {\n background-color: #4ab866;\n}\n\n.jitm-banner.jitm-card.is-upgrade-personal {\n border-left-color: #f0b849;\n}\n\n.jitm-banner.jitm-card.is-upgrade-personal .jitm-banner__icon {\n color: #f0b849;\n}\n\n.jitm-banner.jitm-card.is-upgrade-personal .jitm-banner__icon-circle {\n background-color: #f0b849;\n}\n\n.jitm-banner.jitm-card.is-upgrade-premium {\n border-left-color: #4ab866;\n}\n\n.jitm-banner.jitm-card.is-upgrade-premium .jitm-banner__icon {\n color: #4ab866;\n}\n\n.jitm-banner.jitm-card.is-upgrade-premium .jitm-banner__icon-circle {\n background-color: #4ab866;\n}\n\n.jitm-banner.jitm-card.is-upgrade-business, .jitm-banner.jitm-card.woo-jitm {\n border-left-color: #855DA6;\n}\n\n.jitm-banner.jitm-card.is-upgrade-business .jitm-banner__icon, .jitm-banner.jitm-card.woo-jitm .jitm-banner__icon {\n color: #855DA6;\n}\n\n.jitm-banner.jitm-card.is-upgrade-business .jitm-banner__icon-circle, .jitm-banner.jitm-card.woo-jitm .jitm-banner__icon-circle {\n background-color: #855DA6;\n}\n\n.jitm-banner.jitm-card .jitm-card__link-indicator {\n align-items: center;\n color: #0087be;\n display: flex;\n}\n\n.jitm-banner.jitm-card:hover {\n transition: all 100ms ease-in-out;\n}\n\n.jitm-banner.jitm-card:hover.is-card-link {\n box-shadow: 0 0 0 1px #a2a2a2, 0 2px 4px #d5d5d5;\n}\n\n.jitm-banner.jitm-card:hover .jitm-card__link-indicator {\n color: #005082;\n}\n\n@media (min-width: 481px) {\n .jitm-banner.jitm-card {\n padding: 0.75rem 1rem;\n }\n .jitm-banner.jitm-card.is-dismissible {\n padding-right: 1rem;\n }\n}\n\n.jitm-banner__icons {\n display: flex;\n}\n\n.jitm-banner__icons .jitm-banner__icon,\n.jitm-banner__icons .jitm-banner__icon-circle {\n border-radius: 50%;\n flex-shrink: 0;\n height: 1.5rem;\n width: 1.5rem;\n margin-right: 1rem;\n margin-top: -0.125rem;\n text-align: center;\n top: 0.25rem;\n}\n\n.jitm-banner__icons .jitm-banner__icon {\n align-self: center;\n color: white;\n display: block;\n}\n\n.jitm-banner__icons .jitm-banner__icon-circle {\n color: white;\n display: none;\n padding: 0.1875rem 0.25rem 0.25rem 0.1875rem;\n}\n\n@media (min-width: 481px) {\n .jitm-banner__icons {\n align-items: center;\n }\n .jitm-banner__icons .jitm-banner__icon {\n display: none;\n }\n .jitm-banner__icons .jitm-banner__icon-circle {\n display: block;\n }\n}\n\n.jitm-banner__icon-plan {\n display: flex;\n margin-right: 1rem;\n}\n\n.jitm-banner__icon-plan .dops-plan-icon {\n height: 2rem;\n width: 2rem;\n}\n\n.jitm-banner__icon-plan .jp-emblem {\n position: relative;\n top: 0.125rem;\n}\n\n@media (max-width: 480px) {\n .jitm-banner__icon-plan .jp-emblem {\n margin-bottom: 0.75rem;\n }\n}\n\n.jitm-banner__icon-plan .jp-emblem svg {\n height: 2rem;\n width: 2rem;\n fill: #00BE28;\n}\n\n@media (min-width: 481px) {\n .jitm-banner__icon-plan {\n align-items: center;\n }\n}\n\n.jitm-banner__content {\n align-items: center;\n display: flex;\n flex-grow: 1;\n flex-wrap: wrap;\n}\n\n@media (min-width: 481px) {\n .jitm-banner__content {\n flex-wrap: nowrap;\n }\n}\n\n.jitm-banner__info {\n flex-grow: 1;\n line-height: 1.4;\n}\n\n@media (min-width: 481px) {\n .jitm-banner__info {\n flex-basis: 50%;\n }\n}\n\n@media (min-width: 961px) {\n .jitm-banner__info {\n flex-basis: 70%;\n }\n}\n\n.jitm-banner__info .jitm-banner__title,\n.jitm-banner__info .jitm-banner__description {\n color: #414141;\n}\n\n.jitm-banner__info .jitm-banner__title {\n font-size: 14px;\n font-weight: 500;\n}\n\n.jitm-banner__info .jitm-banner__description {\n font-size: 0.75rem;\n line-height: 1.5;\n margin-top: 0.375rem;\n}\n\n.jitm-banner__info .banner__list {\n font-size: 12px;\n list-style: none;\n margin: 10px 0;\n}\n\n.jitm-banner__info .banner__list li {\n margin: 6px 0;\n}\n\n.jitm-banner__info .banner__list li .gridicon {\n fill: #a2a2a2;\n display: inline;\n margin-right: 12px;\n vertical-align: bottom;\n}\n\n.jitm-banner__action {\n align-self: center;\n font-size: 0.75rem;\n margin: 0.5rem 0 0;\n text-align: left;\n width: 100%;\n}\n\n.jitm-banner__action .jitm-banner__prices {\n display: flex;\n justify-content: flex-start;\n}\n\n.jitm-banner__action .jitm-banner__prices .dops-plan-price {\n margin-bottom: 0;\n}\n\n.jitm-banner__action .jitm-banner__prices .dops-plan-price.is-discounted,\n.jitm-banner__action .jitm-banner__prices .dops-plan-price.is-discounted .dops-plan-price__currency-symbol {\n color: #414141;\n}\n\n.has-call-to-action .jitm-banner__action .jitm-banner__prices .dops-plan-price {\n margin-bottom: 0.5rem;\n}\n\n@media (min-width: 481px) {\n .jitm-banner__action {\n margin: 0 0.25rem 0 0.5rem;\n text-align: center;\n width: auto;\n }\n .jitm-banner__action .is-dismissible {\n margin-top: 2.5rem;\n }\n .jitm-banner__action .jitm-banner__prices {\n justify-content: flex-end;\n text-align: right;\n }\n}\n\n.jitm-banner__dismiss {\n display: block;\n text-decoration: none;\n line-height: .5;\n}\n\n.jitm-banner__dismiss:before {\n color: #6f6f6f;\n font: 400 16px/1 dashicons;\n content: '\\f158';\n}\n\n@media (min-width: 661px) {\n .jitm-banner__dismiss {\n margin-right: -0.5rem;\n }\n}\n\n@media (max-width: 480px) {\n .jitm-banner__dismiss {\n position: absolute;\n top: 0.875rem;\n right: 0.875rem;\n }\n}\n\n.jitm-banner__action + .jitm-banner__dismiss {\n margin-left: 0.625rem;\n}\n\n#dolly + .jitm-card {\n margin: 3rem 1rem 0 auto;\n}\n"],"file":"jetpack-admin-jitm.css"} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-admin-jitm.css.min.map b/plugins/jetpack/css/jetpack-admin-jitm.css.min.map
deleted file mode 100644
index e69de29b..00000000
--- a/plugins/jetpack/css/jetpack-admin-jitm.css.min.map
+++ /dev/null
diff --git a/plugins/jetpack/css/jetpack-admin-jitm.min.css b/plugins/jetpack/css/jetpack-admin-jitm.min.css
deleted file mode 100644
index a0e91c03..00000000
--- a/plugins/jetpack/css/jetpack-admin-jitm.min.css
+++ /dev/null
@@ -1,3 +0,0 @@
-@charset "UTF-8";/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/.jitm-button{background:#fff;border-color:#d5d5d5;border-style:solid;border-width:1px 1px 2px;color:#414141;cursor:pointer;display:inline-block;margin:0;outline:0;overflow:hidden;font-weight:500;text-overflow:ellipsis;text-decoration:none;vertical-align:top;box-sizing:border-box;font-size:.875rem;line-height:1.3125rem;border-radius:.25rem;padding:.4375rem .875rem .5625rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.jitm-button:hover{border-color:#bbb;color:#414141}.jitm-button:active{border-width:2px 1px 1px}.jitm-button:visited{color:#414141}.jitm-button:disabled,.jitm-button[disabled]{color:#eee;background:#fff;border-color:#eee;cursor:default}.jitm-button:disabled:active,.jitm-button[disabled]:active{border-width:1px 1px 2px}.jitm-button:focus{outline:0;border-color:#00aadc;box-shadow:0 0 0 2px #78dcfa}.jitm-button.is-compact{padding:.4375rem;color:#888;font-size:.75rem;line-height:1}.jitm-button.is-compact:disabled{color:#eee}.jitm-button.hidden{display:none}.jitm-button.is-primary{background:#00aadc;border-color:#0087be;color:#fff}.jitm-button.is-primary:focus,.jitm-button.is-primary:hover{border-color:#005082;color:#fff}.jitm-button.is-primary:disabled,.jitm-button.is-primary[disabled]{background:#bceefd;border-color:#8cc9e2;color:#fff}.jitm-button.is-primary.is-compact{color:#fff}.jitm-card{display:block;clear:both;position:relative;margin:3rem 1.25rem 0 auto;padding:1rem;box-sizing:border-box;background:#fff;box-shadow:0 0 0 1px rgba(213,213,213,.5),0 1px 2px #eee}.jitm-card:after{content:".";display:block;height:0;clear:both;visibility:hidden}@media (min-width:481px){.jitm-card{margin-bottom:1rem;padding:1.5rem}}.jitm-card.is-compact{margin-bottom:.0625rem}@media (min-width:481px){.jitm-card.is-compact{margin-bottom:1px;padding:1rem 1.5rem}}.jitm-card.is-card-link{padding-right:3rem}#screen-meta-links+.jitm-card{margin:2.5rem 1.5385em 0 auto}#dolly+.jitm-card{margin:3rem 1rem 0 auto}.post-php .jitm-card{margin-right:0}.jp-lower .jitm-card{margin:3rem 0 1.5rem}.jitm-banner.jitm-card{border-left:4px solid;display:flex;padding:.75rem .375rem .75rem .75rem;position:relative;z-index:2;border-left-color:#4ab866}@media (max-width:480px){.jitm-banner.jitm-card{display:block}}.jitm-banner.jitm-card.is-card-link{padding:.75rem 3rem .75rem 1rem}.jitm-banner.jitm-card.is-dismissible{padding-right:3rem}.jitm-banner.jitm-card .jitm-banner__icon{color:#4ab866}.jitm-banner.jitm-card .jitm-banner__icon-circle{background-color:#4ab866}.jitm-banner.jitm-card.is-upgrade-personal{border-left-color:#f0b849}.jitm-banner.jitm-card.is-upgrade-personal .jitm-banner__icon{color:#f0b849}.jitm-banner.jitm-card.is-upgrade-personal .jitm-banner__icon-circle{background-color:#f0b849}.jitm-banner.jitm-card.is-upgrade-premium{border-left-color:#4ab866}.jitm-banner.jitm-card.is-upgrade-premium .jitm-banner__icon{color:#4ab866}.jitm-banner.jitm-card.is-upgrade-premium .jitm-banner__icon-circle{background-color:#4ab866}.jitm-banner.jitm-card.is-upgrade-business,.jitm-banner.jitm-card.woo-jitm{border-left-color:#855da6}.jitm-banner.jitm-card.is-upgrade-business .jitm-banner__icon,.jitm-banner.jitm-card.woo-jitm .jitm-banner__icon{color:#855da6}.jitm-banner.jitm-card.is-upgrade-business .jitm-banner__icon-circle,.jitm-banner.jitm-card.woo-jitm .jitm-banner__icon-circle{background-color:#855da6}.jitm-banner.jitm-card .jitm-card__link-indicator{align-items:center;color:#0087be;display:flex}.jitm-banner.jitm-card:hover{transition:all .1s ease-in-out}.jitm-banner.jitm-card:hover.is-card-link{box-shadow:0 0 0 1px #a2a2a2,0 2px 4px #d5d5d5}.jitm-banner.jitm-card:hover .jitm-card__link-indicator{color:#005082}@media (min-width:481px){.jitm-banner.jitm-card{padding:.75rem 1rem}.jitm-banner.jitm-card.is-dismissible{padding-right:1rem}}.jitm-banner__icons{display:flex}.jitm-banner__icons .jitm-banner__icon,.jitm-banner__icons .jitm-banner__icon-circle{border-radius:50%;flex-shrink:0;height:1.5rem;width:1.5rem;margin-right:1rem;margin-top:-.125rem;text-align:center;top:.25rem}.jitm-banner__icons .jitm-banner__icon{align-self:center;color:#fff;display:block}.jitm-banner__icons .jitm-banner__icon-circle{color:#fff;display:none;padding:.1875rem .25rem .25rem .1875rem}@media (min-width:481px){.jitm-banner__icons{align-items:center}.jitm-banner__icons .jitm-banner__icon{display:none}.jitm-banner__icons .jitm-banner__icon-circle{display:block}}.jitm-banner__icon-plan{display:flex;margin-right:1rem}.jitm-banner__icon-plan .dops-plan-icon{height:2rem;width:2rem}.jitm-banner__icon-plan .jp-emblem{position:relative;top:.125rem}@media (max-width:480px){.jitm-banner__icon-plan .jp-emblem{margin-bottom:.75rem}}.jitm-banner__icon-plan .jp-emblem svg{height:2rem;width:2rem;fill:#00be28}@media (min-width:481px){.jitm-banner__icon-plan{align-items:center}}.jitm-banner__content{align-items:center;display:flex;flex-grow:1;flex-wrap:wrap}@media (min-width:481px){.jitm-banner__content{flex-wrap:nowrap}}.jitm-banner__info{flex-grow:1;line-height:1.4}@media (min-width:481px){.jitm-banner__info{flex-basis:50%}}@media (min-width:961px){.jitm-banner__info{flex-basis:70%}}.jitm-banner__info .jitm-banner__description,.jitm-banner__info .jitm-banner__title{color:#414141}.jitm-banner__info .jitm-banner__title{font-size:14px;font-weight:500}.jitm-banner__info .jitm-banner__description{font-size:.75rem;line-height:1.5;margin-top:.375rem}.jitm-banner__info .banner__list{font-size:12px;list-style:none;margin:10px 0}.jitm-banner__info .banner__list li{margin:6px 0}.jitm-banner__info .banner__list li .gridicon{fill:#a2a2a2;display:inline;margin-right:12px;vertical-align:bottom}.jitm-banner__action{align-self:center;font-size:.75rem;margin:.5rem 0 0;text-align:left;width:100%}.jitm-banner__action .jitm-banner__prices{display:flex;justify-content:flex-start}.jitm-banner__action .jitm-banner__prices .dops-plan-price{margin-bottom:0}.jitm-banner__action .jitm-banner__prices .dops-plan-price.is-discounted,.jitm-banner__action .jitm-banner__prices .dops-plan-price.is-discounted .dops-plan-price__currency-symbol{color:#414141}.has-call-to-action .jitm-banner__action .jitm-banner__prices .dops-plan-price{margin-bottom:.5rem}@media (min-width:481px){.jitm-banner__action{margin:0 .25rem 0 .5rem;text-align:center;width:auto}.jitm-banner__action .is-dismissible{margin-top:2.5rem}.jitm-banner__action .jitm-banner__prices{justify-content:flex-end;text-align:right}}.jitm-banner__dismiss{display:block;text-decoration:none;line-height:.5}.jitm-banner__dismiss:before{color:#6f6f6f;font:400 16px/1 dashicons;content:'\f158'}@media (min-width:661px){.jitm-banner__dismiss{margin-right:-.5rem}}@media (max-width:480px){.jitm-banner__dismiss{position:absolute;top:.875rem;right:.875rem}}.jitm-banner__action+.jitm-banner__dismiss{margin-left:.625rem}#dolly+.jitm-card{margin:3rem 1rem 0 auto} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-admin-rtl.css b/plugins/jetpack/css/jetpack-admin-rtl.css
deleted file mode 100644
index d67254b1..00000000
--- a/plugins/jetpack/css/jetpack-admin-rtl.css
+++ /dev/null
@@ -1,1494 +0,0 @@
-/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/
-.j-row {
- width: 100%;
- margin: 0 auto;
-}
-
-.j-row:before, .j-row:after {
- content: " ";
- display: table;
-}
-
-.j-row:after {
- clear: both;
-}
-
-.j-col {
- padding: 0.85em;
- width: 100%;
- float: right;
- position: relative;
-}
-
-@media only screen {
- .j-sm-5 {
- width: 41.66667%;
- }
- .j-sm-7 {
- width: 58.33333%;
- }
- .j-sm-12 {
- width: 100%;
- }
-}
-
-@media (min-width: 530px) {
- .j-md-4 {
- width: 33.33333%;
- }
- .j-md-6 {
- width: 50%;
- }
- .j-md-8 {
- width: 66.66667%;
- }
- .j-md-12 {
- width: 100%;
- }
-}
-
-@media (min-width: 782px) {
- .j-lrg-4 {
- width: 33.33333%;
- }
- .j-lrg-5 {
- width: 41.66667%;
- }
- .j-lrg-6 {
- width: 50%;
- }
- .j-lrg-7 {
- width: 58.33333%;
- }
- .j-lrg-8 {
- width: 66.66667%;
- }
- .j-lrg-12 {
- width: 100%;
- }
-}
-
-@keyframes "candy" {
- 0% {
- transform: scale(1);
- }
- 20% {
- transform: scale(1.15);
- }
- 60% {
- transform: scale(0.95);
- }
- 100% {
- transform: scale(1);
- }
-}
-
-.button,
-.download-jetpack {
- transition: all .1s ease-in-out;
-}
-
-.jp-button, .jp-button--settings {
- display: inline-block;
- position: relative;
- padding: 0.76923em 1.46154em;
- color: #efefef;
- font-weight: bold;
- font-size: 0.9285714286em;
- line-height: 1;
- text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
- background: #6f7476;
- border-radius: 3px;
-}
-
-.jp-button:visited, .jp-button--settings:visited {
- color: #efefef;
-}
-
-.jp-button:hover, .jp-button--settings:hover, .jp-button:focus, .jp-button--settings:focus {
- color: #fff;
- background: #57972d;
-}
-
-.jp-button:active, .jp-button--settings:active {
- background: #57972d;
- opacity: 0.8;
-}
-
-.jp-button--settings {
- background: #93b45f;
- color: #e8eedf;
-}
-
-.jp-button--settings:visited {
- color: #e8eedf;
-}
-
-.jp-button--settings:hover, .jp-button--settings:focus {
- background: #9fbd72;
- color: #fff;
-}
-
-.jp-button--settings.current {
- background: #3c6621;
- color: #fff;
- box-shadow: inset 0 2px 0 #365A1F, inset 0 1px 3px #3c6621;
-}
-
-.download-jetpack {
- display: inline-block;
- position: relative;
- padding: 0.64286em 1.08696em 0.53571em;
- color: #fff;
- font-weight: 400;
- font-size: 20px;
- line-height: 1;
- background: #518d2a;
- z-index: 3;
- border-radius: 6px;
- box-shadow: 0 6px 0 #3e6c20, 0 6px 3px rgba(0, 0, 0, 0.4);
-}
-
-.download-jetpack:visited {
- color: #fff;
-}
-
-.download-jetpack:hover, .download-jetpack:focus {
- color: #fff;
- background: #57972d;
- box-shadow: 0 6px 0 #3e6c20, 0 6px 3px rgba(0, 0, 0, 0.4);
-}
-
-.download-jetpack:active {
- top: 6px;
- box-shadow: 0 0px 0 #3e6c20, 0 0 0 rgba(0, 0, 0, 0.4);
-}
-
-.download-jetpack:active:after {
- top: -6px;
-}
-
-.download-jetpack:before {
- content: '';
- display: inline-block;
- position: relative;
- top: -2px;
- margin-left: 13px;
- width: 30px;
- height: 30px;
- vertical-align: middle;
- background: url("../images/connect-plug.svg") center center no-repeat;
- background-size: 100%;
-}
-
-.download-jetpack:after {
- content: '';
- position: absolute;
- top: 0;
- right: 0;
- width: 100%;
- height: 100%;
-}
-
-@media (max-width: 1147px) {
- .download-jetpack {
- font-size: 1.28571em;
- }
- .download-jetpack:before {
- top: -1px;
- width: 23px;
- height: 23px;
- }
-}
-
-@media (max-width: 900px) {
- .download-jetpack:active {
- top: 0;
- }
-}
-
-@media (max-width: 530px) {
- .download-jetpack {
- font-size: 1.21429em;
- font-weight: 600;
- }
- .download-jetpack:before {
- width: 19px;
- height: 19px;
- margin-left: 9px;
- }
-}
-
-@font-face {
- font-family: 'automatticons';
- src: url("../_inc/fonts/automatticons/automatticons.eot");
- src: url("../_inc/fonts/automatticons/automatticons.eot?#iefix") format("embedded-opentype"), url("../_inc/fonts/automatticons/automatticons.woff") format("woff"), url("../_inc/fonts/automatticons/automatticons.ttf") format("truetype"), url("../_inc/fonts/automatticons/automatticons.svg#automatticonsregular") format("svg");
- font-weight: normal;
- font-style: normal;
-}
-
-.nav-horizontal:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden;
-}
-
-.nav-horizontal a {
- display: inline-block;
-}
-
-.nav-horizontal li {
- position: relative;
- float: right;
-}
-
-.nav-horizontal ul {
- margin: 0;
- padding: 0;
-}
-
-@media (max-width: 782px) {
- .configure .frame.top.fixed {
- padding-right: 0;
- }
-}
-
-.wrap.inner,
-.page-content {
- max-width: 950px;
- margin: 0 auto;
-}
-
-.wrap.inner li,
-.page-content li {
- line-height: 23px;
-}
-
-@media (max-width: 530px) {
- .page-content {
- margin-top: 0;
- }
-}
-
-@media (max-width: 1147px) {
- .wrap.inner {
- background: #f9f9f9;
- padding: 15px;
- }
-}
-
-@media (max-width: 530px) {
- .wrap.inner {
- margin-top: 1.71429em;
- }
-}
-
-.page-content.about {
- position: relative;
- z-index: 10;
-}
-
-@media (max-width: 1147px) {
- .page-content.about {
- background: #f9f9f9;
- padding: 15px;
- }
-}
-
-@media (max-width: 1147px) {
- .page-content.configure {
- background: #f9f9f9;
- }
-}
-
-.footer nav {
- max-width: 550px;
- margin: 0 auto;
-}
-
-.header {
- right: 0;
- left: 0;
- background: #81a844;
-}
-
-.header-nav li {
- line-height: 60px;
-}
-
-.header-nav a {
- padding: 0 0.71429em;
- line-height: 24px;
-}
-
-.header-nav .jetpack-logo a {
- display: inline-block;
- position: relative;
- width: 214px;
- margin-left: 6px;
- background: url(../images/jetpack-logo.png) center center no-repeat;
- background: url(../images/jetpack-logo.svg) center center no-repeat, none;
- background-size: 183px auto;
- color: #fff;
- line-height: 60px;
- font-weight: normal;
-}
-
-.header-nav .jetpack-logo a span {
- text-indent: -9999px;
- visibility: hidden;
-}
-
-.header-nav .jetpack-logo a:before {
- content: '';
- position: absolute;
- top: 0;
- right: 0;
- width: 100%;
- height: 100%;
- background-size: 183px 32px;
-}
-
-.header-nav .jetpack-modules + .jetpack-modules {
- margin-right: 15px;
-}
-
-.main-nav {
- float: right;
-}
-
-.main-nav li {
- margin: 0;
-}
-
-@media (max-width: 900px) {
- .main-nav {
- font-size: 13px;
- }
-}
-
-.jetpack-pagestyles #screen-meta {
- margin: 0;
-}
-
-.jetpack-pagestyles #screen-meta-links .screen-meta-toggle {
- z-index: 2;
-}
-
-.jetpack-pagestyles #screen-options-link-wrap, .jetpack-pagestyles #contextual-help-link-wrap {
- border: none;
-}
-
-.jetpack-pagestyles .update-nag {
- display: none;
-}
-
-.loading {
- bottom: 50%;
- position: absolute;
- top: 50%;
- width: 100%;
-}
-
-.loading span {
- color: #999;
-}
-
-.modal {
- background: #fff;
- position: fixed;
- top: 52px;
- bottom: 20px;
- left: 20px;
- right: 20px;
- margin-right: 160px;
- display: none;
- box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1);
- z-index: 500;
-}
-
-.modal .close {
- position: absolute;
- top: 0;
- left: 0;
- font: 300 1.71429em "genericons" !important;
- color: #777;
- content: '\f405';
- display: inline-block;
- padding: 0.28571em 0.71429em 0.42857em;
- z-index: 5;
-}
-
-.modal .close:hover {
- background: #eee;
- opacity: 0.8;
-}
-
-.modal .close:active {
- background: #eee;
- opacity: 0.4;
-}
-
-.modal .content-container {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
- overflow: auto;
- padding: 2.14286em;
-}
-
-.modal .content {
- margin: 0 auto;
- max-width: 900px;
- text-align: right;
-}
-
-.modal h2 {
- text-align: right;
- margin-top: 0;
- color: #5d6d74;
- font-weight: 300;
- line-height: 32px;
- text-shadow: 0 1px 1px #fff;
-}
-
-@media (max-width: 530px) {
- .modal h2 {
- font-size: 26px;
- }
-}
-
-.modal h5 {
- clear: right;
-}
-
-.modal p {
- font-size: 1.23077em;
-}
-
-.modal footer {
- position: absolute;
- right: 0;
- bottom: 0;
- width: 100%;
- padding: 12px 20px;
- border-top: 1px solid #ddd;
- background: #fff;
- text-align: left;
-}
-
-.modal footer ul {
- margin: 0;
-}
-
-.modal footer li {
- display: inline-block;
- margin: 0;
-}
-
-.modal .button-secondary,
-.modal .button-primary:active {
- vertical-align: baseline;
-}
-
-@media (max-width: 900px) {
- .modal {
- bottom: 5%;
- margin-right: 36px;
- font-size: 80%;
- }
- .modal .content {
- top: 38px;
- }
-}
-
-@media (max-width: 782px) {
- .modal {
- top: 66px;
- margin-right: 0;
- }
-}
-
-@media (max-width: 600px) {
- .modal {
- top: 10px;
- left: 10px;
- bottom: 10px;
- right: 10px;
- }
-}
-
-.jp-info-img {
- float: left;
- margin: 0 30px 8px 0;
-}
-
-.jp-info-img img {
- border: 1px solid #ddd;
- max-width: 100%;
- height: auto;
-}
-
-.jp-info-img img:first-child {
- margin-top: 0;
-}
-
-@media (max-width: 782px) {
- .jp-info-img {
- float: none;
- margin: 0 0 15px;
- }
-}
-
-.content-container.modal-footer {
- bottom: 53px;
-}
-
-.shade {
- background: #000;
- bottom: 0;
- cursor: pointer;
- display: none;
- right: 0;
- opacity: 0.2;
- position: fixed;
- left: 0;
- top: 0;
- z-index: 11;
-}
-
-.footer {
- margin-top: 1.42857em;
- position: relative;
- padding: 10em 0 4.28571em;
- text-align: center;
-}
-
-.footer:before, .footer:after {
- content: '';
- position: absolute;
- right: 0;
- pointer-events: none;
-}
-
-.footer:before {
- top: 0;
- margin-top: -1px;
- width: 100%;
- height: 195px;
-}
-
-.footer:after {
- display: none;
-}
-
-.footer .download-jetpack {
- margin-bottom: 33px;
-}
-
-@media (min-width: 1147px) {
- .footer {
- padding-bottom: 35px;
- }
-}
-
-@media (max-width: 1147px) {
- .footer {
- padding-top: 165px;
- padding-bottom: 0;
- }
- .footer:before {
- background-size: 160% auto;
- }
- .footer ul {
- float: none;
- overflow: hidden;
- }
-}
-
-@media (max-width: 900px) {
- .footer {
- padding-top: 146px;
- }
-}
-
-@media (max-width: 782px) {
- .footer {
- margin-top: 0;
- }
-}
-
-@media (max-width: 530px) {
- .footer {
- margin-top: 0;
- padding-top: 135px;
- }
-}
-
-@media (max-width: 320px) {
- .footer {
- padding-top: 76px;
- }
-}
-
-.footer nav {
- max-width: 100%;
-}
-
-.footer nav a,
-.footer nav a:visited {
- padding: 4px 6px;
- color: #999;
-}
-
-.footer nav a:hover, .footer nav a:focus,
-.footer nav a:visited:hover,
-.footer nav a:visited:focus {
- color: #81A844;
-}
-
-@media (max-width: 1147px) {
- .footer nav a:hover, .footer nav a:focus,
- .footer nav a:visited:hover,
- .footer nav a:visited:focus {
- color: #81a844;
- }
-}
-
-@media (max-width: 530px) {
- .footer nav li {
- display: block;
- float: none;
- margin: 0;
- text-align: right;
- }
- .footer nav a {
- display: block;
- padding: 0 16px;
- line-height: 44px;
- }
-}
-
-.primary {
- padding: 25px 15px 10px 15px;
- border-bottom: 1px solid #eee;
-}
-
-.secondary-footer {
- margin: 0 auto;
-}
-
-.secondary-footer li {
- margin-left: 5px;
-}
-
-@media (min-width: 782px) {
- .secondary-footer {
- padding: 8px 15px 10px;
- margin-bottom: 30px;
- border-bottom: 1px solid #eee;
- }
-}
-
-@media (min-width: 1147px) {
- .secondary-footer {
- margin-bottom: 0;
- }
-}
-
-@media (max-width: 782px) {
- .secondary-footer {
- padding: 8px 15px 8px;
- border-bottom: none;
- }
-}
-
-@media (max-width: 530px) {
- .secondary-footer {
- margin: 0;
- padding: 0;
- border: none;
- font-weight: 400;
- }
- .secondary-footer a {
- border-top: 1px solid #eee;
- }
-}
-
-.footer .a8c-attribution {
- margin: 0;
- padding: 0 6px;
- color: #bbb;
- font-size: 0.78571em;
- font-family: "Gill Sans", "Gill Sans MT", Helvetica, Arial, sans-serif;
- text-transform: uppercase;
-}
-
-.footer .a8c-attribution a {
- display: inline-block;
- position: relative;
- padding: 4px 16px;
- left: 9999px;
- outline: 0;
-}
-
-.footer .a8c-attribution a:after {
- content: 'A';
- position: absolute;
- top: 2px;
- left: -9999px;
- height: 100%;
- color: #999;
- font-size: 1.54545em;
- font-family: "automatticons";
- text-align: center;
-}
-
-.footer .a8c-attribution a:hover:after {
- animation: candy .4s ease-in-out;
-}
-
-@media (min-width: 782px) {
- .secondary {
- padding: 0 15px 10px 15px;
- border-bottom: 1px solid #eee;
- }
-}
-
-@media (min-width: 1147px) {
- .secondary {
- padding: 0 15px 10px 15px;
- border-bottom: none;
- }
-}
-
-.jetpack-message {
- background: #8eb74e;
- border: 1px solid #73963d;
- margin: 33px auto 0;
- max-width: 90%;
- position: relative;
- z-index: 2;
-}
-
-.jetpack-message.is-opt-in {
- margin: 50px 0 0;
- max-width: 100%;
- padding: 10px 15px;
- background: #fff;
- border: 0;
- box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
- font-size: 13px;
- text-align: center;
-}
-
-.subhead .jetpack-message.is-opt-in {
- margin: 0;
- padding-bottom: 0;
- background: transparent;
- box-shadow: none;
-}
-
-.subhead .jetpack-message.is-opt-in .jp-button, .subhead .jetpack-message.is-opt-in .jp-button--settings {
- display: inline-block;
-}
-
-.jetpack-message.is-opt-in p {
- color: #3c4549;
-}
-
-.jetpack-message.is-opt-in .jp-button, .jetpack-message.is-opt-in .jp-button--settings {
- margin-top: 15px;
- display: none;
-}
-
-.jetpack-message .squeezer h2 {
- font-size: 1em;
-}
-
-.jetpack-message h2 {
- color: #fff;
- margin: 0;
-}
-
-.jetpack-message p {
- color: #fff;
- margin: 0;
- opacity: 0.7;
-}
-
-.jetpack-message .squeezer {
- padding: 23px 80px 23px 23px;
- position: relative;
- text-align: right;
-}
-
-.jetpack-message .squeezer:before {
- color: #fff;
- content: '\f418';
- font-family: 'Genericons';
- font-size: 33px;
- height: 33px;
- right: 25px;
- opacity: 0.6;
- position: absolute;
- top: 23px;
- top: calc( 50% - 22px);
-}
-
-@media (max-width: 530px) {
- .jetpack-message .squeezer {
- padding: 23px;
- }
- .jetpack-message .squeezer:before {
- display: none;
- }
-}
-
-.jetpack-message .squeezer a {
- color: #FFF;
- border-bottom: 1px solid #D5E4BD;
-}
-
-.jetpack-message .squeezer a:hover {
- border-bottom: 1px solid #F1F6E9;
-}
-
-.jetpack-message.error .squeezer:before,
-.jetpack-message.jetpack-err .squeezer:before {
- content: '\f414';
-}
-
-.configure-module .jetpack-message {
- max-width: 100%;
-}
-
-@media (max-width: 530px) {
- .wrap.inner.jp-support .jp-support-column-left {
- width: 100%;
- }
- .wrap.inner.jp-support .jp-support-column-left .widget-text {
- margin-left: 0;
- width: 100%;
- }
- .wrap.inner.jp-support .jp-support-column-right {
- width: 100%;
- }
-}
-
-@media screen and (max-width: 515px) {
- .jp-frame .header-nav {
- padding-bottom: 10px;
- }
- .jp-frame .header-nav li {
- line-height: 30px;
- }
- .jp-frame .header-nav .jetpack-logo {
- width: 100%;
- text-align: center;
- }
- .jp-frame .header-nav .jetpack-modules {
- margin: 0;
- width: 50%;
- text-align: left;
- padding: 0 5px;
- }
- .jp-frame .header-nav .jetpack-modules + .jetpack-modules {
- text-align: right;
- }
- .jp-frame .header-nav .jetpack-modules:nth-child(4) {
- text-align: center;
- margin: 0 auto;
- width: 100%;
- }
- .jp-frame .header-nav .jetpack-modules:nth-child(4) a {
- padding: 0 10px;
- }
-}
-
-#ie-legacy-notice .dops-notice__content {
- display: inline-block;
- margin-right: 10px;
-}
-
-.page-content.configure {
- margin-top: 0;
-}
-
-.configure .frame.top {
- border: none;
- box-shadow: none;
- padding-top: 1.42857em;
- position: relative;
- top: auto;
-}
-
-.configure .frame.top.fixed {
- background: #f9f9f9;
- border-bottom: 1px solid #e9e9e9;
- padding-right: 160px;
- margin-top: -6px;
- position: fixed;
- left: 0;
- top: 32px;
- width: 100%;
- z-index: 4;
- box-shadow: 0 2px 2px -2px #eee;
-}
-
-@media (max-width: 782px) {
- .configure .frame.top.fixed {
- border: none;
- box-shadow: none;
- padding-top: 1.42857em;
- position: relative;
- top: auto;
- }
-}
-
-@media (max-width: 600px) {
- .configure .frame.top.fixed {
- top: 0;
- }
-}
-
-.jp-frame-top-fixed .configure {
- padding-top: 94px;
-}
-
-.filter-search {
- display: none;
- float: left;
- margin-top: 10px;
-}
-
-@media (max-width: 782px) {
- .filter-search {
- display: block;
- }
-}
-
-@media (max-width: 530px) {
- .filter-search {
- display: none;
- }
-}
-
-.table-bordered.jetpack-modules {
- border: none;
- margin-bottom: 0;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module th {
- border-right: 0;
- padding: 14px 4px 0;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module th input {
- display: block;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module:hover .genericon {
- display: inline-block;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module.active th,
-.table-bordered.jetpack-modules tr.jetpack-module.active td {
- background: #f7fcfe;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module.active th {
- border-right: 4px solid #2ea2cc;
- padding-right: 0px;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module.active td:first-child {
- border-right: 4px solid #2ea2cc;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module.unavailable input {
- display: none;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module.deprecated span {
- color: #888;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module.deprecated .dep-msg {
- margin-left: 10px;
- color: #555;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module th,
-.table-bordered.jetpack-modules tr.jetpack-module td {
- background: #fff;
- margin: 0;
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module td {
- padding: 10px 14px 8px 10px;
- line-height: 25px;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module td:first-child {
- border-right: 4px solid #fff;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module td .row-actions {
- float: left;
- padding: 0 0 1px;
- visibility: visible;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module td .row-actions span {
- margin-right: 5px;
-}
-
-@media (max-width: 530px) {
- .table-bordered.jetpack-modules tr.jetpack-module td .row-actions {
- display: none;
- }
-}
-
-@media (max-width: 782px) {
- .table-bordered.jetpack-modules tr.jetpack-module td .row-actions {
- display: block;
- padding-right: 10px;
- visibility: visible;
- }
-}
-
-.table-bordered.jetpack-modules.with-transparency tr.jetpack-module:hover td .row-actions span a {
- opacity: 1;
-}
-
-.table-bordered.jetpack-modules.with-transparency tr.jetpack-module.unavailable {
- opacity: 0.3;
-}
-
-.table-bordered.jetpack-modules.with-transparency tr.jetpack-module td .row-actions span a {
- opacity: 0;
-}
-
-.table-bordered.jetpack-modules.with-transparency tr.jetpack-module td .row-actions span a:focus {
- opacity: 1;
-}
-
-.table-bordered.jetpack-modules > thead > tr > th {
- border: 0;
- vertical-align: middle;
-}
-
-.table-bordered.jetpack-modules > thead > tr > th:last-child {
- padding-left: 0;
-}
-
-@media (max-width: 782px) {
- .table-bordered.jetpack-modules > thead > tr > th:last-child {
- padding-right: 0;
- }
-}
-
-.table-bordered.jetpack-modules td {
- background: #fff;
-}
-
-.table-bordered.jetpack-modules #doaction {
- margin-top: 0;
-}
-
-@media (max-width: 782px) {
- .table-bordered.jetpack-modules #doaction {
- padding: 10px 7px;
- }
-}
-
-.table-bordered.jetpack-modules .checkall {
- margin-top: 1px;
-}
-
-.table-bordered.jetpack-modules .filter-search {
- margin-top: 8px;
-}
-
-.table-bordered.jetpack-modules .genericon {
- color: #999;
- display: none;
- margin: 7px 3px 0;
-}
-
-@media (max-width: 900px) {
- .table-bordered.jetpack-modules .genericon {
- display: inline-block;
- }
-}
-
-.table-bordered.jetpack-modules .med {
- width: 70px;
-}
-
-.table-bordered.jetpack-modules .sm {
- width: 30px;
-}
-
-@media (max-width: 782px) {
- .table-bordered.jetpack-modules .check-column {
- width: 50px;
- }
-}
-
-.fixed-top .check-column {
- padding: 8px 10px 0 10px;
- width: 2.2em;
-}
-
-.wrap {
- margin: 0;
- padding: 0 1.5em 1em;
- overflow: hidden;
-}
-
-.wrap h2 {
- font-size: 24px;
- font-weight: 400;
-}
-
-.wrap .manage-left {
- float: right;
- margin: 0;
- padding: 0;
- width: 63%;
-}
-
-.wrap .manage-left table {
- width: 100%;
-}
-
-.wrap .manage-left th {
- font-weight: 400;
-}
-
-@media (max-width: 782px) {
- .wrap .manage-left {
- width: 100%;
- }
-}
-
-.wrap .manage-right {
- margin: 0;
- padding: 0;
- float: left;
- width: 35%;
- z-index: 1;
-}
-
-.wrap .manage-right p {
- font-size: 12px;
- font-weight: bold;
- color: #bbb;
- padding-top: 2px;
- text-transform: uppercase;
- letter-spacing: 1px;
- clear: right;
-}
-
-.wrap .manage-right .bumper {
- margin-right: 33px;
-}
-
-.wrap .manage-right.show {
- display: block;
- overflow-y: auto;
- overflow-x: hidden;
- position: absolute;
- z-index: 100000;
-}
-
-.wrap .manage-right .search-bar {
- margin-bottom: 18px;
- max-width: 300px;
-}
-
-.wrap .manage-right p.search-box {
- float: none;
- height: auto;
- margin-bottom: 0;
- position: relative;
-}
-
-.wrap .manage-right p.search-box input[type='search'] {
- padding: 0 8px;
- width: 90%;
- line-height: initial;
-}
-
-@media (max-width: 782px) {
- .wrap .manage-right p.search-box input[type='search'] {
- float: right;
- padding: 9px 8px;
- }
-}
-
-.wrap .manage-right p.search-box input[type="submit"] {
- display: none;
-}
-
-.wrap .manage-right .button-group .button {
- outline: none;
-}
-
-.wrap .manage-right .subsubsub {
- margin: 0;
- padding: 0;
-}
-
-.wrap .manage-right .subsubsub a {
- padding: 0;
- line-height: inherit;
-}
-
-.wrap .manage-right .subsubsub .current {
- padding: 1px 5px;
- border-radius: 2px;
- margin-right: -5px;
- background: #0D72B2;
- color: #fff;
-}
-
-.wrap .manage-right .subsubsub .current .count {
- color: #BCD7E7;
- font-weight: 200;
-}
-
-.wrap .manage-right .subsubsub li {
- display: block;
- text-align: right;
-}
-
-@media (max-width: 782px) {
- .wrap .manage-right {
- background: #fff;
- bottom: 0;
- display: none;
- min-width: 300px;
- position: fixed;
- left: 0;
- top: 0;
- z-index: 13;
- box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1);
- }
- .wrap .manage-right .bumper {
- margin: 13px;
- }
- .wrap .manage-right .navbar-form {
- margin: 0;
- padding: 0;
- }
-}
-
-@media (max-width: 782px) {
- .wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.column-primary):not(.check-column) {
- padding: 11px 10px;
- display: block;
- }
- .manage-right.show .subsubsub li {
- padding: 5px;
- }
-}
-
-@media (max-width: 650px) {
- .table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions {
- float: none;
- padding-right: 18px;
- }
-}
-
-@media (max-width: 430px) {
- .table-bordered.jetpack-modules tr.jetpack-module td .row-actions {
- display: none;
- }
- .table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions {
- display: block;
- }
-}
-
-/* 'Pages' is a temporary location for these styles, until we can break them up into their proper atmoic locations */
-.configure-module p {
- font-size: 14px;
-}
-
-.configure-module p.success, .configure-module p.error {
- color: #fff;
- padding: 10px;
-}
-
-.configure-module p.success {
- background-color: #81a844;
-}
-
-.configure-module p.error {
- background-color: #d94f4f;
-}
-
-.protect-status p {
- font-size: 16px;
-}
-
-.protect-status strong {
- display: inline-block;
- margin-top: 10px;
- background: #fff;
- padding: 10px;
- border: 1px #ddd solid;
- font-size: 16px;
- color: #000;
- max-width: 100%;
-}
-
-.protect-status.attn {
- color: #d94f4f;
-}
-
-.protect-status.working {
- color: #81a844;
-}
-
-.protect-whitelist textarea {
- width: 100%;
- min-height: 150px;
-}
-
-/* btns + inputs */
-.configure-module input[disabled] {
- opacity: .5;
-}
-
-.configure-module input.button-primary {
- font-weight: bold;
-}
-
-/* whitelist table */
-@media only screen and (min-width: 1100px) {
- .protect-whitelist {
- width: 65%;
- float: right;
- }
-}
-
-/* end > 1065px */
-@media only screen and (max-width: 400px) {
- .protect-status strong {
- font-size: 12px;
- overflow: auto;
- }
-}
-
-/* end < 400px */
-.manage__icon {
- width: 155px;
- height: 155px;
- margin: 20px auto;
-}
-
-.manage-page .manage__description {
- max-width: 600px;
- text-align: center;
- font-size: 22px;
- color: #999;
- margin: 20px auto;
-}
-
-.manage-page .manage__button {
- font-size: 16px;
- padding: 0 20px;
- height: 40px;
- line-height: 40px;
-}
-
-.manage__title .genericon {
- font-size: 38px;
- color: #81A944;
-}
-
-.manage__link {
- font-size: 16px;
- padding: 0 20px;
- height: 40px;
- line-height: 40px;
- font-weight: normal;
-}
-
-.manage__link .genericon {
- font-size: 28px;
- vertical-align: middle;
- margin-top: -6px;
-}
-
-.jp-content .hide {
- display: none;
-}
-
-.jp-content .landing {
- margin: 0 auto;
- z-index: 2;
- position: relative;
-}
-
-.jp-content h1 {
- font-weight: 400;
- line-height: 1.75em;
- position: relative;
- z-index: 3;
- width: 100%;
- text-align: center;
-}
-
-.jp-content h1.success {
- color: #81a844;
-}
-
-.jp-content .footer {
- padding-top: 0;
- margin-top: 0;
- background-image: none;
-}
-
-.jp-content .footer:before {
- height: inherit;
-}
-
-.jp-content .more-info:before {
- content: none;
-}
-
-.landing .wpcom-connect {
- min-height: 400px;
-}
-
-.wpcom-connect .j-col {
- padding: 0;
-}
-
-@media (max-width: 1147px) {
- .jp-content .landing {
- padding: 0 2em;
- }
- .jp-content .footer {
- padding-top: 1.5em;
- }
-}
-
-@media (max-width: 530px) {
- .jp-content .landing {
- padding: 0 .5em;
- }
-}
-
-/*# sourceMappingURL=jetpack-admin-rtl.css.map */
diff --git a/plugins/jetpack/css/jetpack-admin-rtl.css.map b/plugins/jetpack/css/jetpack-admin-rtl.css.map
deleted file mode 100644
index d16d46d4..00000000
--- a/plugins/jetpack/css/jetpack-admin-rtl.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"names":[],"mappings":"","sources":["jetpack-admin-rtl.css"],"sourcesContent":["/*!\n* Do not modify this file directly. It is compiled SASS code.\n*/\n.j-row {\n width: 100%;\n margin: 0 auto;\n}\n\n.j-row:before, .j-row:after {\n content: \" \";\n display: table;\n}\n\n.j-row:after {\n clear: both;\n}\n\n.j-col {\n padding: 0.85em;\n width: 100%;\n float: right;\n position: relative;\n}\n\n@media only screen {\n .j-sm-5 {\n width: 41.66667%;\n }\n .j-sm-7 {\n width: 58.33333%;\n }\n .j-sm-12 {\n width: 100%;\n }\n}\n\n@media (min-width: 530px) {\n .j-md-4 {\n width: 33.33333%;\n }\n .j-md-6 {\n width: 50%;\n }\n .j-md-8 {\n width: 66.66667%;\n }\n .j-md-12 {\n width: 100%;\n }\n}\n\n@media (min-width: 782px) {\n .j-lrg-4 {\n width: 33.33333%;\n }\n .j-lrg-5 {\n width: 41.66667%;\n }\n .j-lrg-6 {\n width: 50%;\n }\n .j-lrg-7 {\n width: 58.33333%;\n }\n .j-lrg-8 {\n width: 66.66667%;\n }\n .j-lrg-12 {\n width: 100%;\n }\n}\n\n@keyframes \"candy\" {\n 0% {\n transform: scale(1);\n }\n 20% {\n transform: scale(1.15);\n }\n 60% {\n transform: scale(0.95);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n.button,\n.download-jetpack {\n transition: all .1s ease-in-out;\n}\n\n.jp-button, .jp-button--settings {\n display: inline-block;\n position: relative;\n padding: 0.76923em 1.46154em;\n color: #efefef;\n font-weight: bold;\n font-size: 0.9285714286em;\n line-height: 1;\n text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);\n background: #6f7476;\n border-radius: 3px;\n}\n\n.jp-button:visited, .jp-button--settings:visited {\n color: #efefef;\n}\n\n.jp-button:hover, .jp-button--settings:hover, .jp-button:focus, .jp-button--settings:focus {\n color: #fff;\n background: #57972d;\n}\n\n.jp-button:active, .jp-button--settings:active {\n background: #57972d;\n opacity: 0.8;\n}\n\n.jp-button--settings {\n background: #93b45f;\n color: #e8eedf;\n}\n\n.jp-button--settings:visited {\n color: #e8eedf;\n}\n\n.jp-button--settings:hover, .jp-button--settings:focus {\n background: #9fbd72;\n color: #fff;\n}\n\n.jp-button--settings.current {\n background: #3c6621;\n color: #fff;\n box-shadow: inset 0 2px 0 #365A1F, inset 0 1px 3px #3c6621;\n}\n\n.download-jetpack {\n display: inline-block;\n position: relative;\n padding: 0.64286em 1.08696em 0.53571em;\n color: #fff;\n font-weight: 400;\n font-size: 20px;\n line-height: 1;\n background: #518d2a;\n z-index: 3;\n border-radius: 6px;\n box-shadow: 0 6px 0 #3e6c20, 0 6px 3px rgba(0, 0, 0, 0.4);\n}\n\n.download-jetpack:visited {\n color: #fff;\n}\n\n.download-jetpack:hover, .download-jetpack:focus {\n color: #fff;\n background: #57972d;\n box-shadow: 0 6px 0 #3e6c20, 0 6px 3px rgba(0, 0, 0, 0.4);\n}\n\n.download-jetpack:active {\n top: 6px;\n box-shadow: 0 0px 0 #3e6c20, 0 0 0 rgba(0, 0, 0, 0.4);\n}\n\n.download-jetpack:active:after {\n top: -6px;\n}\n\n.download-jetpack:before {\n content: '';\n display: inline-block;\n position: relative;\n top: -2px;\n margin-left: 13px;\n width: 30px;\n height: 30px;\n vertical-align: middle;\n background: url(\"../images/connect-plug.svg\") center center no-repeat;\n background-size: 100%;\n}\n\n.download-jetpack:after {\n content: '';\n position: absolute;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n}\n\n@media (max-width: 1147px) {\n .download-jetpack {\n font-size: 1.28571em;\n }\n .download-jetpack:before {\n top: -1px;\n width: 23px;\n height: 23px;\n }\n}\n\n@media (max-width: 900px) {\n .download-jetpack:active {\n top: 0;\n }\n}\n\n@media (max-width: 530px) {\n .download-jetpack {\n font-size: 1.21429em;\n font-weight: 600;\n }\n .download-jetpack:before {\n width: 19px;\n height: 19px;\n margin-left: 9px;\n }\n}\n\n@font-face {\n font-family: 'automatticons';\n src: url(\"../_inc/fonts/automatticons/automatticons.eot\");\n src: url(\"../_inc/fonts/automatticons/automatticons.eot?#iefix\") format(\"embedded-opentype\"), url(\"../_inc/fonts/automatticons/automatticons.woff\") format(\"woff\"), url(\"../_inc/fonts/automatticons/automatticons.ttf\") format(\"truetype\"), url(\"../_inc/fonts/automatticons/automatticons.svg#automatticonsregular\") format(\"svg\");\n font-weight: normal;\n font-style: normal;\n}\n\n.nav-horizontal:after {\n content: \".\";\n display: block;\n height: 0;\n clear: both;\n visibility: hidden;\n}\n\n.nav-horizontal a {\n display: inline-block;\n}\n\n.nav-horizontal li {\n position: relative;\n float: right;\n}\n\n.nav-horizontal ul {\n margin: 0;\n padding: 0;\n}\n\n@media (max-width: 782px) {\n .configure .frame.top.fixed {\n padding-right: 0;\n }\n}\n\n.wrap.inner,\n.page-content {\n max-width: 950px;\n margin: 0 auto;\n}\n\n.wrap.inner li,\n.page-content li {\n line-height: 23px;\n}\n\n@media (max-width: 530px) {\n .page-content {\n margin-top: 0;\n }\n}\n\n@media (max-width: 1147px) {\n .wrap.inner {\n background: #f9f9f9;\n padding: 15px;\n }\n}\n\n@media (max-width: 530px) {\n .wrap.inner {\n margin-top: 1.71429em;\n }\n}\n\n.page-content.about {\n position: relative;\n z-index: 10;\n}\n\n@media (max-width: 1147px) {\n .page-content.about {\n background: #f9f9f9;\n padding: 15px;\n }\n}\n\n@media (max-width: 1147px) {\n .page-content.configure {\n background: #f9f9f9;\n }\n}\n\n.footer nav {\n max-width: 550px;\n margin: 0 auto;\n}\n\n.header {\n right: 0;\n left: 0;\n background: #81a844;\n}\n\n.header-nav li {\n line-height: 60px;\n}\n\n.header-nav a {\n padding: 0 0.71429em;\n line-height: 24px;\n}\n\n.header-nav .jetpack-logo a {\n display: inline-block;\n position: relative;\n width: 214px;\n margin-left: 6px;\n background: url(../images/jetpack-logo.png) center center no-repeat;\n background: url(../images/jetpack-logo.svg) center center no-repeat, none;\n background-size: 183px auto;\n color: #fff;\n line-height: 60px;\n font-weight: normal;\n}\n\n.header-nav .jetpack-logo a span {\n text-indent: -9999px;\n visibility: hidden;\n}\n\n.header-nav .jetpack-logo a:before {\n content: '';\n position: absolute;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n background-size: 183px 32px;\n}\n\n.header-nav .jetpack-modules + .jetpack-modules {\n margin-right: 15px;\n}\n\n.main-nav {\n float: right;\n}\n\n.main-nav li {\n margin: 0;\n}\n\n@media (max-width: 900px) {\n .main-nav {\n font-size: 13px;\n }\n}\n\n.jetpack-pagestyles #screen-meta {\n margin: 0;\n}\n\n.jetpack-pagestyles #screen-meta-links .screen-meta-toggle {\n z-index: 2;\n}\n\n.jetpack-pagestyles #screen-options-link-wrap, .jetpack-pagestyles #contextual-help-link-wrap {\n border: none;\n}\n\n.jetpack-pagestyles .update-nag {\n display: none;\n}\n\n.loading {\n bottom: 50%;\n position: absolute;\n top: 50%;\n width: 100%;\n}\n\n.loading span {\n color: #999;\n}\n\n.modal {\n background: #fff;\n position: fixed;\n top: 52px;\n bottom: 20px;\n left: 20px;\n right: 20px;\n margin-right: 160px;\n display: none;\n box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1);\n z-index: 500;\n}\n\n.modal .close {\n position: absolute;\n top: 0;\n left: 0;\n font: 300 1.71429em \"genericons\" !important;\n color: #777;\n content: '\\f405';\n display: inline-block;\n padding: 0.28571em 0.71429em 0.42857em;\n z-index: 5;\n}\n\n.modal .close:hover {\n background: #eee;\n opacity: 0.8;\n}\n\n.modal .close:active {\n background: #eee;\n opacity: 0.4;\n}\n\n.modal .content-container {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n overflow: auto;\n padding: 2.14286em;\n}\n\n.modal .content {\n margin: 0 auto;\n max-width: 900px;\n text-align: right;\n}\n\n.modal h2 {\n text-align: right;\n margin-top: 0;\n color: #5d6d74;\n font-weight: 300;\n line-height: 32px;\n text-shadow: 0 1px 1px #fff;\n}\n\n@media (max-width: 530px) {\n .modal h2 {\n font-size: 26px;\n }\n}\n\n.modal h5 {\n clear: right;\n}\n\n.modal p {\n font-size: 1.23077em;\n}\n\n.modal footer {\n position: absolute;\n right: 0;\n bottom: 0;\n width: 100%;\n padding: 12px 20px;\n border-top: 1px solid #ddd;\n background: #fff;\n text-align: left;\n}\n\n.modal footer ul {\n margin: 0;\n}\n\n.modal footer li {\n display: inline-block;\n margin: 0;\n}\n\n.modal .button-secondary,\n.modal .button-primary:active {\n vertical-align: baseline;\n}\n\n@media (max-width: 900px) {\n .modal {\n bottom: 5%;\n margin-right: 36px;\n font-size: 80%;\n }\n .modal .content {\n top: 38px;\n }\n}\n\n@media (max-width: 782px) {\n .modal {\n top: 66px;\n margin-right: 0;\n }\n}\n\n@media (max-width: 600px) {\n .modal {\n top: 10px;\n left: 10px;\n bottom: 10px;\n right: 10px;\n }\n}\n\n.jp-info-img {\n float: left;\n margin: 0 30px 8px 0;\n}\n\n.jp-info-img img {\n border: 1px solid #ddd;\n max-width: 100%;\n height: auto;\n}\n\n.jp-info-img img:first-child {\n margin-top: 0;\n}\n\n@media (max-width: 782px) {\n .jp-info-img {\n float: none;\n margin: 0 0 15px;\n }\n}\n\n.content-container.modal-footer {\n bottom: 53px;\n}\n\n.shade {\n background: #000;\n bottom: 0;\n cursor: pointer;\n display: none;\n right: 0;\n opacity: 0.2;\n position: fixed;\n left: 0;\n top: 0;\n z-index: 11;\n}\n\n.footer {\n margin-top: 1.42857em;\n position: relative;\n padding: 10em 0 4.28571em;\n text-align: center;\n}\n\n.footer:before, .footer:after {\n content: '';\n position: absolute;\n right: 0;\n pointer-events: none;\n}\n\n.footer:before {\n top: 0;\n margin-top: -1px;\n width: 100%;\n height: 195px;\n}\n\n.footer:after {\n display: none;\n}\n\n.footer .download-jetpack {\n margin-bottom: 33px;\n}\n\n@media (min-width: 1147px) {\n .footer {\n padding-bottom: 35px;\n }\n}\n\n@media (max-width: 1147px) {\n .footer {\n padding-top: 165px;\n padding-bottom: 0;\n }\n .footer:before {\n background-size: 160% auto;\n }\n .footer ul {\n float: none;\n overflow: hidden;\n }\n}\n\n@media (max-width: 900px) {\n .footer {\n padding-top: 146px;\n }\n}\n\n@media (max-width: 782px) {\n .footer {\n margin-top: 0;\n }\n}\n\n@media (max-width: 530px) {\n .footer {\n margin-top: 0;\n padding-top: 135px;\n }\n}\n\n@media (max-width: 320px) {\n .footer {\n padding-top: 76px;\n }\n}\n\n.footer nav {\n max-width: 100%;\n}\n\n.footer nav a,\n.footer nav a:visited {\n padding: 4px 6px;\n color: #999;\n}\n\n.footer nav a:hover, .footer nav a:focus,\n.footer nav a:visited:hover,\n.footer nav a:visited:focus {\n color: #81A844;\n}\n\n@media (max-width: 1147px) {\n .footer nav a:hover, .footer nav a:focus,\n .footer nav a:visited:hover,\n .footer nav a:visited:focus {\n color: #81a844;\n }\n}\n\n@media (max-width: 530px) {\n .footer nav li {\n display: block;\n float: none;\n margin: 0;\n text-align: right;\n }\n .footer nav a {\n display: block;\n padding: 0 16px;\n line-height: 44px;\n }\n}\n\n.primary {\n padding: 25px 15px 10px 15px;\n border-bottom: 1px solid #eee;\n}\n\n.secondary-footer {\n margin: 0 auto;\n}\n\n.secondary-footer li {\n margin-left: 5px;\n}\n\n@media (min-width: 782px) {\n .secondary-footer {\n padding: 8px 15px 10px;\n margin-bottom: 30px;\n border-bottom: 1px solid #eee;\n }\n}\n\n@media (min-width: 1147px) {\n .secondary-footer {\n margin-bottom: 0;\n }\n}\n\n@media (max-width: 782px) {\n .secondary-footer {\n padding: 8px 15px 8px;\n border-bottom: none;\n }\n}\n\n@media (max-width: 530px) {\n .secondary-footer {\n margin: 0;\n padding: 0;\n border: none;\n font-weight: 400;\n }\n .secondary-footer a {\n border-top: 1px solid #eee;\n }\n}\n\n.footer .a8c-attribution {\n margin: 0;\n padding: 0 6px;\n color: #bbb;\n font-size: 0.78571em;\n font-family: \"Gill Sans\", \"Gill Sans MT\", Helvetica, Arial, sans-serif;\n text-transform: uppercase;\n}\n\n.footer .a8c-attribution a {\n display: inline-block;\n position: relative;\n padding: 4px 16px;\n left: 9999px;\n outline: 0;\n}\n\n.footer .a8c-attribution a:after {\n content: 'A';\n position: absolute;\n top: 2px;\n left: -9999px;\n height: 100%;\n color: #999;\n font-size: 1.54545em;\n font-family: \"automatticons\";\n text-align: center;\n}\n\n.footer .a8c-attribution a:hover:after {\n animation: candy .4s ease-in-out;\n}\n\n@media (min-width: 782px) {\n .secondary {\n padding: 0 15px 10px 15px;\n border-bottom: 1px solid #eee;\n }\n}\n\n@media (min-width: 1147px) {\n .secondary {\n padding: 0 15px 10px 15px;\n border-bottom: none;\n }\n}\n\n.jetpack-message {\n background: #8eb74e;\n border: 1px solid #73963d;\n margin: 33px auto 0;\n max-width: 90%;\n position: relative;\n z-index: 2;\n}\n\n.jetpack-message.is-opt-in {\n margin: 50px 0 0;\n max-width: 100%;\n padding: 10px 15px;\n background: #fff;\n border: 0;\n box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);\n font-size: 13px;\n text-align: center;\n}\n\n.subhead .jetpack-message.is-opt-in {\n margin: 0;\n padding-bottom: 0;\n background: transparent;\n box-shadow: none;\n}\n\n.subhead .jetpack-message.is-opt-in .jp-button, .subhead .jetpack-message.is-opt-in .jp-button--settings {\n display: inline-block;\n}\n\n.jetpack-message.is-opt-in p {\n color: #3c4549;\n}\n\n.jetpack-message.is-opt-in .jp-button, .jetpack-message.is-opt-in .jp-button--settings {\n margin-top: 15px;\n display: none;\n}\n\n.jetpack-message .squeezer h2 {\n font-size: 1em;\n}\n\n.jetpack-message h2 {\n color: #fff;\n margin: 0;\n}\n\n.jetpack-message p {\n color: #fff;\n margin: 0;\n opacity: 0.7;\n}\n\n.jetpack-message .squeezer {\n padding: 23px 80px 23px 23px;\n position: relative;\n text-align: right;\n}\n\n.jetpack-message .squeezer:before {\n color: #fff;\n content: '\\f418';\n font-family: 'Genericons';\n font-size: 33px;\n height: 33px;\n right: 25px;\n opacity: 0.6;\n position: absolute;\n top: 23px;\n top: calc( 50% - 22px);\n}\n\n@media (max-width: 530px) {\n .jetpack-message .squeezer {\n padding: 23px;\n }\n .jetpack-message .squeezer:before {\n display: none;\n }\n}\n\n.jetpack-message .squeezer a {\n color: #FFF;\n border-bottom: 1px solid #D5E4BD;\n}\n\n.jetpack-message .squeezer a:hover {\n border-bottom: 1px solid #F1F6E9;\n}\n\n.jetpack-message.error .squeezer:before,\n.jetpack-message.jetpack-err .squeezer:before {\n content: '\\f414';\n}\n\n.configure-module .jetpack-message {\n max-width: 100%;\n}\n\n@media (max-width: 530px) {\n .wrap.inner.jp-support .jp-support-column-left {\n width: 100%;\n }\n .wrap.inner.jp-support .jp-support-column-left .widget-text {\n margin-left: 0;\n width: 100%;\n }\n .wrap.inner.jp-support .jp-support-column-right {\n width: 100%;\n }\n}\n\n@media screen and (max-width: 515px) {\n .jp-frame .header-nav {\n padding-bottom: 10px;\n }\n .jp-frame .header-nav li {\n line-height: 30px;\n }\n .jp-frame .header-nav .jetpack-logo {\n width: 100%;\n text-align: center;\n }\n .jp-frame .header-nav .jetpack-modules {\n margin: 0;\n width: 50%;\n text-align: left;\n padding: 0 5px;\n }\n .jp-frame .header-nav .jetpack-modules + .jetpack-modules {\n text-align: right;\n }\n .jp-frame .header-nav .jetpack-modules:nth-child(4) {\n text-align: center;\n margin: 0 auto;\n width: 100%;\n }\n .jp-frame .header-nav .jetpack-modules:nth-child(4) a {\n padding: 0 10px;\n }\n}\n\n#ie-legacy-notice .dops-notice__content {\n display: inline-block;\n margin-right: 10px;\n}\n\n.page-content.configure {\n margin-top: 0;\n}\n\n.configure .frame.top {\n border: none;\n box-shadow: none;\n padding-top: 1.42857em;\n position: relative;\n top: auto;\n}\n\n.configure .frame.top.fixed {\n background: #f9f9f9;\n border-bottom: 1px solid #e9e9e9;\n padding-right: 160px;\n margin-top: -6px;\n position: fixed;\n left: 0;\n top: 32px;\n width: 100%;\n z-index: 4;\n box-shadow: 0 2px 2px -2px #eee;\n}\n\n@media (max-width: 782px) {\n .configure .frame.top.fixed {\n border: none;\n box-shadow: none;\n padding-top: 1.42857em;\n position: relative;\n top: auto;\n }\n}\n\n@media (max-width: 600px) {\n .configure .frame.top.fixed {\n top: 0;\n }\n}\n\n.jp-frame-top-fixed .configure {\n padding-top: 94px;\n}\n\n.filter-search {\n display: none;\n float: left;\n margin-top: 10px;\n}\n\n@media (max-width: 782px) {\n .filter-search {\n display: block;\n }\n}\n\n@media (max-width: 530px) {\n .filter-search {\n display: none;\n }\n}\n\n.table-bordered.jetpack-modules {\n border: none;\n margin-bottom: 0;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module th {\n border-right: 0;\n padding: 14px 4px 0;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module th input {\n display: block;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module:hover .genericon {\n display: inline-block;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module.active th,\n.table-bordered.jetpack-modules tr.jetpack-module.active td {\n background: #f7fcfe;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module.active th {\n border-right: 4px solid #2ea2cc;\n padding-right: 0px;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module.active td:first-child {\n border-right: 4px solid #2ea2cc;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module.unavailable input {\n display: none;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module.deprecated span {\n color: #888;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module.deprecated .dep-msg {\n margin-left: 10px;\n color: #555;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module th,\n.table-bordered.jetpack-modules tr.jetpack-module td {\n background: #fff;\n margin: 0;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1);\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module td {\n padding: 10px 14px 8px 10px;\n line-height: 25px;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module td:first-child {\n border-right: 4px solid #fff;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module td .row-actions {\n float: left;\n padding: 0 0 1px;\n visibility: visible;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module td .row-actions span {\n margin-right: 5px;\n}\n\n@media (max-width: 530px) {\n .table-bordered.jetpack-modules tr.jetpack-module td .row-actions {\n display: none;\n }\n}\n\n@media (max-width: 782px) {\n .table-bordered.jetpack-modules tr.jetpack-module td .row-actions {\n display: block;\n padding-right: 10px;\n visibility: visible;\n }\n}\n\n.table-bordered.jetpack-modules.with-transparency tr.jetpack-module:hover td .row-actions span a {\n opacity: 1;\n}\n\n.table-bordered.jetpack-modules.with-transparency tr.jetpack-module.unavailable {\n opacity: 0.3;\n}\n\n.table-bordered.jetpack-modules.with-transparency tr.jetpack-module td .row-actions span a {\n opacity: 0;\n}\n\n.table-bordered.jetpack-modules.with-transparency tr.jetpack-module td .row-actions span a:focus {\n opacity: 1;\n}\n\n.table-bordered.jetpack-modules > thead > tr > th {\n border: 0;\n vertical-align: middle;\n}\n\n.table-bordered.jetpack-modules > thead > tr > th:last-child {\n padding-left: 0;\n}\n\n@media (max-width: 782px) {\n .table-bordered.jetpack-modules > thead > tr > th:last-child {\n padding-right: 0;\n }\n}\n\n.table-bordered.jetpack-modules td {\n background: #fff;\n}\n\n.table-bordered.jetpack-modules #doaction {\n margin-top: 0;\n}\n\n@media (max-width: 782px) {\n .table-bordered.jetpack-modules #doaction {\n padding: 10px 7px;\n }\n}\n\n.table-bordered.jetpack-modules .checkall {\n margin-top: 1px;\n}\n\n.table-bordered.jetpack-modules .filter-search {\n margin-top: 8px;\n}\n\n.table-bordered.jetpack-modules .genericon {\n color: #999;\n display: none;\n margin: 7px 3px 0;\n}\n\n@media (max-width: 900px) {\n .table-bordered.jetpack-modules .genericon {\n display: inline-block;\n }\n}\n\n.table-bordered.jetpack-modules .med {\n width: 70px;\n}\n\n.table-bordered.jetpack-modules .sm {\n width: 30px;\n}\n\n@media (max-width: 782px) {\n .table-bordered.jetpack-modules .check-column {\n width: 50px;\n }\n}\n\n.fixed-top .check-column {\n padding: 8px 10px 0 10px;\n width: 2.2em;\n}\n\n.wrap {\n margin: 0;\n padding: 0 1.5em 1em;\n overflow: hidden;\n}\n\n.wrap h2 {\n font-size: 24px;\n font-weight: 400;\n}\n\n.wrap .manage-left {\n float: right;\n margin: 0;\n padding: 0;\n width: 63%;\n}\n\n.wrap .manage-left table {\n width: 100%;\n}\n\n.wrap .manage-left th {\n font-weight: 400;\n}\n\n@media (max-width: 782px) {\n .wrap .manage-left {\n width: 100%;\n }\n}\n\n.wrap .manage-right {\n margin: 0;\n padding: 0;\n float: left;\n width: 35%;\n z-index: 1;\n}\n\n.wrap .manage-right p {\n font-size: 12px;\n font-weight: bold;\n color: #bbb;\n padding-top: 2px;\n text-transform: uppercase;\n letter-spacing: 1px;\n clear: right;\n}\n\n.wrap .manage-right .bumper {\n margin-right: 33px;\n}\n\n.wrap .manage-right.show {\n display: block;\n overflow-y: auto;\n overflow-x: hidden;\n position: absolute;\n z-index: 100000;\n}\n\n.wrap .manage-right .search-bar {\n margin-bottom: 18px;\n max-width: 300px;\n}\n\n.wrap .manage-right p.search-box {\n float: none;\n height: auto;\n margin-bottom: 0;\n position: relative;\n}\n\n.wrap .manage-right p.search-box input[type='search'] {\n padding: 0 8px;\n width: 90%;\n line-height: initial;\n}\n\n@media (max-width: 782px) {\n .wrap .manage-right p.search-box input[type='search'] {\n float: right;\n padding: 9px 8px;\n }\n}\n\n.wrap .manage-right p.search-box input[type=\"submit\"] {\n display: none;\n}\n\n.wrap .manage-right .button-group .button {\n outline: none;\n}\n\n.wrap .manage-right .subsubsub {\n margin: 0;\n padding: 0;\n}\n\n.wrap .manage-right .subsubsub a {\n padding: 0;\n line-height: inherit;\n}\n\n.wrap .manage-right .subsubsub .current {\n padding: 1px 5px;\n border-radius: 2px;\n margin-right: -5px;\n background: #0D72B2;\n color: #fff;\n}\n\n.wrap .manage-right .subsubsub .current .count {\n color: #BCD7E7;\n font-weight: 200;\n}\n\n.wrap .manage-right .subsubsub li {\n display: block;\n text-align: right;\n}\n\n@media (max-width: 782px) {\n .wrap .manage-right {\n background: #fff;\n bottom: 0;\n display: none;\n min-width: 300px;\n position: fixed;\n left: 0;\n top: 0;\n z-index: 13;\n box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1);\n }\n .wrap .manage-right .bumper {\n margin: 13px;\n }\n .wrap .manage-right .navbar-form {\n margin: 0;\n padding: 0;\n }\n}\n\n@media (max-width: 782px) {\n .wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.column-primary):not(.check-column) {\n padding: 11px 10px;\n display: block;\n }\n .manage-right.show .subsubsub li {\n padding: 5px;\n }\n}\n\n@media (max-width: 650px) {\n .table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions {\n float: none;\n padding-right: 18px;\n }\n}\n\n@media (max-width: 430px) {\n .table-bordered.jetpack-modules tr.jetpack-module td .row-actions {\n display: none;\n }\n .table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions {\n display: block;\n }\n}\n\n/* 'Pages' is a temporary location for these styles, until we can break them up into their proper atmoic locations */\n.configure-module p {\n font-size: 14px;\n}\n\n.configure-module p.success, .configure-module p.error {\n color: #fff;\n padding: 10px;\n}\n\n.configure-module p.success {\n background-color: #81a844;\n}\n\n.configure-module p.error {\n background-color: #d94f4f;\n}\n\n.protect-status p {\n font-size: 16px;\n}\n\n.protect-status strong {\n display: inline-block;\n margin-top: 10px;\n background: #fff;\n padding: 10px;\n border: 1px #ddd solid;\n font-size: 16px;\n color: #000;\n max-width: 100%;\n}\n\n.protect-status.attn {\n color: #d94f4f;\n}\n\n.protect-status.working {\n color: #81a844;\n}\n\n.protect-whitelist textarea {\n width: 100%;\n min-height: 150px;\n}\n\n/* btns + inputs */\n.configure-module input[disabled] {\n opacity: .5;\n}\n\n.configure-module input.button-primary {\n font-weight: bold;\n}\n\n/* whitelist table */\n@media only screen and (min-width: 1100px) {\n .protect-whitelist {\n width: 65%;\n float: right;\n }\n}\n\n/* end > 1065px */\n@media only screen and (max-width: 400px) {\n .protect-status strong {\n font-size: 12px;\n overflow: auto;\n }\n}\n\n/* end < 400px */\n.manage__icon {\n width: 155px;\n height: 155px;\n margin: 20px auto;\n}\n\n.manage-page .manage__description {\n max-width: 600px;\n text-align: center;\n font-size: 22px;\n color: #999;\n margin: 20px auto;\n}\n\n.manage-page .manage__button {\n font-size: 16px;\n padding: 0 20px;\n height: 40px;\n line-height: 40px;\n}\n\n.manage__title .genericon {\n font-size: 38px;\n color: #81A944;\n}\n\n.manage__link {\n font-size: 16px;\n padding: 0 20px;\n height: 40px;\n line-height: 40px;\n font-weight: normal;\n}\n\n.manage__link .genericon {\n font-size: 28px;\n vertical-align: middle;\n margin-top: -6px;\n}\n\n.jp-content .hide {\n display: none;\n}\n\n.jp-content .landing {\n margin: 0 auto;\n z-index: 2;\n position: relative;\n}\n\n.jp-content h1 {\n font-weight: 400;\n line-height: 1.75em;\n position: relative;\n z-index: 3;\n width: 100%;\n text-align: center;\n}\n\n.jp-content h1.success {\n color: #81a844;\n}\n\n.jp-content .footer {\n padding-top: 0;\n margin-top: 0;\n background-image: none;\n}\n\n.jp-content .footer:before {\n height: inherit;\n}\n\n.jp-content .more-info:before {\n content: none;\n}\n\n.landing .wpcom-connect {\n min-height: 400px;\n}\n\n.wpcom-connect .j-col {\n padding: 0;\n}\n\n@media (max-width: 1147px) {\n .jp-content .landing {\n padding: 0 2em;\n }\n .jp-content .footer {\n padding-top: 1.5em;\n }\n}\n\n@media (max-width: 530px) {\n .jp-content .landing {\n padding: 0 .5em;\n }\n}\n"],"file":"jetpack-admin-rtl.css"} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-admin-rtl.css.min.map b/plugins/jetpack/css/jetpack-admin-rtl.css.min.map
deleted file mode 100644
index e69de29b..00000000
--- a/plugins/jetpack/css/jetpack-admin-rtl.css.min.map
+++ /dev/null
diff --git a/plugins/jetpack/css/jetpack-admin-rtl.min.css b/plugins/jetpack/css/jetpack-admin-rtl.min.css
deleted file mode 100644
index 5d16697c..00000000
--- a/plugins/jetpack/css/jetpack-admin-rtl.min.css
+++ /dev/null
@@ -1,3 +0,0 @@
-/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/.j-row{width:100%;margin:0 auto}.j-row:after,.j-row:before{content:" ";display:table}.j-row:after{clear:both}.j-col{padding:.85em;width:100%;float:right;position:relative}@media only screen{.j-sm-5{width:41.66667%}.j-sm-7{width:58.33333%}.j-sm-12{width:100%}}@media (min-width:530px){.j-md-4{width:33.33333%}.j-md-6{width:50%}.j-md-8{width:66.66667%}.j-md-12{width:100%}}@media (min-width:782px){.j-lrg-4{width:33.33333%}.j-lrg-5{width:41.66667%}.j-lrg-6{width:50%}.j-lrg-7{width:58.33333%}.j-lrg-8{width:66.66667%}.j-lrg-12{width:100%}}@keyframes candy{0%{transform:scale(1)}20%{transform:scale(1.15)}60%{transform:scale(.95)}100%{transform:scale(1)}}.button,.download-jetpack{transition:all .1s ease-in-out}.jp-button,.jp-button--settings{display:inline-block;position:relative;padding:.76923em 1.46154em;color:#efefef;font-weight:700;font-size:.9285714286em;line-height:1;text-shadow:0 1px 1px rgba(0,0,0,.2);background:#6f7476;border-radius:3px}.jp-button--settings:visited,.jp-button:visited{color:#efefef}.jp-button--settings:focus,.jp-button--settings:hover,.jp-button:focus,.jp-button:hover{color:#fff;background:#57972d}.jp-button--settings:active,.jp-button:active{background:#57972d;opacity:.8}.jp-button--settings{background:#93b45f;color:#e8eedf}.jp-button--settings:visited{color:#e8eedf}.jp-button--settings:focus,.jp-button--settings:hover{background:#9fbd72;color:#fff}.jp-button--settings.current{background:#3c6621;color:#fff;box-shadow:inset 0 2px 0 #365a1f,inset 0 1px 3px #3c6621}.download-jetpack{display:inline-block;position:relative;padding:.64286em 1.08696em .53571em;color:#fff;font-weight:400;font-size:20px;line-height:1;background:#518d2a;z-index:3;border-radius:6px;box-shadow:0 6px 0 #3e6c20,0 6px 3px rgba(0,0,0,.4)}.download-jetpack:visited{color:#fff}.download-jetpack:focus,.download-jetpack:hover{color:#fff;background:#57972d;box-shadow:0 6px 0 #3e6c20,0 6px 3px rgba(0,0,0,.4)}.download-jetpack:active{top:6px;box-shadow:0 0 0 #3e6c20,0 0 0 rgba(0,0,0,.4)}.download-jetpack:active:after{top:-6px}.download-jetpack:before{content:'';display:inline-block;position:relative;top:-2px;margin-left:13px;width:30px;height:30px;vertical-align:middle;background:url(../images/connect-plug.svg) center center no-repeat;background-size:100%}.download-jetpack:after{content:'';position:absolute;top:0;right:0;width:100%;height:100%}@media (max-width:1147px){.download-jetpack{font-size:1.28571em}.download-jetpack:before{top:-1px;width:23px;height:23px}}@media (max-width:900px){.download-jetpack:active{top:0}}@media (max-width:530px){.download-jetpack{font-size:1.21429em;font-weight:600}.download-jetpack:before{width:19px;height:19px;margin-left:9px}}@font-face{font-family:automatticons;src:url(../_inc/fonts/automatticons/automatticons.eot);src:url(../_inc/fonts/automatticons/automatticons.eot?#iefix) format("embedded-opentype"),url(../_inc/fonts/automatticons/automatticons.woff) format("woff"),url(../_inc/fonts/automatticons/automatticons.ttf) format("truetype"),url(../_inc/fonts/automatticons/automatticons.svg#automatticonsregular) format("svg");font-weight:400;font-style:normal}.nav-horizontal:after{content:".";display:block;height:0;clear:both;visibility:hidden}.nav-horizontal a{display:inline-block}.nav-horizontal li{position:relative;float:right}.nav-horizontal ul{margin:0;padding:0}@media (max-width:782px){.configure .frame.top.fixed{padding-right:0}}.page-content,.wrap.inner{max-width:950px;margin:0 auto}.page-content li,.wrap.inner li{line-height:23px}@media (max-width:530px){.page-content{margin-top:0}}@media (max-width:1147px){.wrap.inner{background:#f9f9f9;padding:15px}}@media (max-width:530px){.wrap.inner{margin-top:1.71429em}}.page-content.about{position:relative;z-index:10}@media (max-width:1147px){.page-content.about{background:#f9f9f9;padding:15px}}@media (max-width:1147px){.page-content.configure{background:#f9f9f9}}.footer nav{max-width:550px;margin:0 auto}.header{right:0;left:0;background:#81a844}.header-nav li{line-height:60px}.header-nav a{padding:0 .71429em;line-height:24px}.header-nav .jetpack-logo a{display:inline-block;position:relative;width:214px;margin-left:6px;background:url(../images/jetpack-logo.png) center center no-repeat;background:url(../images/jetpack-logo.svg) center center no-repeat,none;background-size:183px auto;color:#fff;line-height:60px;font-weight:400}.header-nav .jetpack-logo a span{text-indent:-9999px;visibility:hidden}.header-nav .jetpack-logo a:before{content:'';position:absolute;top:0;right:0;width:100%;height:100%;background-size:183px 32px}.header-nav .jetpack-modules+.jetpack-modules{margin-right:15px}.main-nav{float:right}.main-nav li{margin:0}@media (max-width:900px){.main-nav{font-size:13px}}.jetpack-pagestyles #screen-meta{margin:0}.jetpack-pagestyles #screen-meta-links .screen-meta-toggle{z-index:2}.jetpack-pagestyles #contextual-help-link-wrap,.jetpack-pagestyles #screen-options-link-wrap{border:none}.jetpack-pagestyles .update-nag{display:none}.loading{bottom:50%;position:absolute;top:50%;width:100%}.loading span{color:#999}.modal{background:#fff;position:fixed;top:52px;bottom:20px;left:20px;right:20px;margin-right:160px;display:none;box-shadow:0 1px 20px 5px rgba(0,0,0,.1);z-index:500}.modal .close{position:absolute;top:0;left:0;font:300 1.71429em genericons!important;color:#777;content:'\f405';display:inline-block;padding:.28571em .71429em .42857em;z-index:5}.modal .close:hover{background:#eee;opacity:.8}.modal .close:active{background:#eee;opacity:.4}.modal .content-container{position:absolute;top:0;left:0;bottom:0;right:0;overflow:auto;padding:2.14286em}.modal .content{margin:0 auto;max-width:900px;text-align:right}.modal h2{text-align:right;margin-top:0;color:#5d6d74;font-weight:300;line-height:32px;text-shadow:0 1px 1px #fff}@media (max-width:530px){.modal h2{font-size:26px}}.modal h5{clear:right}.modal p{font-size:1.23077em}.modal footer{position:absolute;right:0;bottom:0;width:100%;padding:12px 20px;border-top:1px solid #ddd;background:#fff;text-align:left}.modal footer ul{margin:0}.modal footer li{display:inline-block;margin:0}.modal .button-primary:active,.modal .button-secondary{vertical-align:baseline}@media (max-width:900px){.modal{bottom:5%;margin-right:36px;font-size:80%}.modal .content{top:38px}}@media (max-width:782px){.modal{top:66px;margin-right:0}}@media (max-width:600px){.modal{top:10px;left:10px;bottom:10px;right:10px}}.jp-info-img{float:left;margin:0 30px 8px 0}.jp-info-img img{border:1px solid #ddd;max-width:100%;height:auto}.jp-info-img img:first-child{margin-top:0}@media (max-width:782px){.jp-info-img{float:none;margin:0 0 15px}}.content-container.modal-footer{bottom:53px}.shade{background:#000;bottom:0;cursor:pointer;display:none;right:0;opacity:.2;position:fixed;left:0;top:0;z-index:11}.footer{margin-top:1.42857em;position:relative;padding:10em 0 4.28571em;text-align:center}.footer:after,.footer:before{content:'';position:absolute;right:0;pointer-events:none}.footer:before{top:0;margin-top:-1px;width:100%;height:195px}.footer:after{display:none}.footer .download-jetpack{margin-bottom:33px}@media (min-width:1147px){.footer{padding-bottom:35px}}@media (max-width:1147px){.footer{padding-top:165px;padding-bottom:0}.footer:before{background-size:160% auto}.footer ul{float:none;overflow:hidden}}@media (max-width:900px){.footer{padding-top:146px}}@media (max-width:782px){.footer{margin-top:0}}@media (max-width:530px){.footer{margin-top:0;padding-top:135px}}@media (max-width:320px){.footer{padding-top:76px}}.footer nav{max-width:100%}.footer nav a,.footer nav a:visited{padding:4px 6px;color:#999}.footer nav a:focus,.footer nav a:hover,.footer nav a:visited:focus,.footer nav a:visited:hover{color:#81a844}@media (max-width:1147px){.footer nav a:focus,.footer nav a:hover,.footer nav a:visited:focus,.footer nav a:visited:hover{color:#81a844}}@media (max-width:530px){.footer nav li{display:block;float:none;margin:0;text-align:right}.footer nav a{display:block;padding:0 16px;line-height:44px}}.primary{padding:25px 15px 10px 15px;border-bottom:1px solid #eee}.secondary-footer{margin:0 auto}.secondary-footer li{margin-left:5px}@media (min-width:782px){.secondary-footer{padding:8px 15px 10px;margin-bottom:30px;border-bottom:1px solid #eee}}@media (min-width:1147px){.secondary-footer{margin-bottom:0}}@media (max-width:782px){.secondary-footer{padding:8px 15px 8px;border-bottom:none}}@media (max-width:530px){.secondary-footer{margin:0;padding:0;border:none;font-weight:400}.secondary-footer a{border-top:1px solid #eee}}.footer .a8c-attribution{margin:0;padding:0 6px;color:#bbb;font-size:.78571em;font-family:"Gill Sans","Gill Sans MT",Helvetica,Arial,sans-serif;text-transform:uppercase}.footer .a8c-attribution a{display:inline-block;position:relative;padding:4px 16px;left:9999px;outline:0}.footer .a8c-attribution a:after{content:'A';position:absolute;top:2px;left:-9999px;height:100%;color:#999;font-size:1.54545em;font-family:automatticons;text-align:center}.footer .a8c-attribution a:hover:after{animation:candy .4s ease-in-out}@media (min-width:782px){.secondary{padding:0 15px 10px 15px;border-bottom:1px solid #eee}}@media (min-width:1147px){.secondary{padding:0 15px 10px 15px;border-bottom:none}}.jetpack-message{background:#8eb74e;border:1px solid #73963d;margin:33px auto 0;max-width:90%;position:relative;z-index:2}.jetpack-message.is-opt-in{margin:50px 0 0;max-width:100%;padding:10px 15px;background:#fff;border:0;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);font-size:13px;text-align:center}.subhead .jetpack-message.is-opt-in{margin:0;padding-bottom:0;background:0 0;box-shadow:none}.subhead .jetpack-message.is-opt-in .jp-button,.subhead .jetpack-message.is-opt-in .jp-button--settings{display:inline-block}.jetpack-message.is-opt-in p{color:#3c4549}.jetpack-message.is-opt-in .jp-button,.jetpack-message.is-opt-in .jp-button--settings{margin-top:15px;display:none}.jetpack-message .squeezer h2{font-size:1em}.jetpack-message h2{color:#fff;margin:0}.jetpack-message p{color:#fff;margin:0;opacity:.7}.jetpack-message .squeezer{padding:23px 80px 23px 23px;position:relative;text-align:right}.jetpack-message .squeezer:before{color:#fff;content:'\f418';font-family:Genericons;font-size:33px;height:33px;right:25px;opacity:.6;position:absolute;top:23px;top:calc(50% - 22px)}@media (max-width:530px){.jetpack-message .squeezer{padding:23px}.jetpack-message .squeezer:before{display:none}}.jetpack-message .squeezer a{color:#fff;border-bottom:1px solid #d5e4bd}.jetpack-message .squeezer a:hover{border-bottom:1px solid #f1f6e9}.jetpack-message.error .squeezer:before,.jetpack-message.jetpack-err .squeezer:before{content:'\f414'}.configure-module .jetpack-message{max-width:100%}@media (max-width:530px){.wrap.inner.jp-support .jp-support-column-left{width:100%}.wrap.inner.jp-support .jp-support-column-left .widget-text{margin-left:0;width:100%}.wrap.inner.jp-support .jp-support-column-right{width:100%}}@media screen and (max-width:515px){.jp-frame .header-nav{padding-bottom:10px}.jp-frame .header-nav li{line-height:30px}.jp-frame .header-nav .jetpack-logo{width:100%;text-align:center}.jp-frame .header-nav .jetpack-modules{margin:0;width:50%;text-align:left;padding:0 5px}.jp-frame .header-nav .jetpack-modules+.jetpack-modules{text-align:right}.jp-frame .header-nav .jetpack-modules:nth-child(4){text-align:center;margin:0 auto;width:100%}.jp-frame .header-nav .jetpack-modules:nth-child(4) a{padding:0 10px}}#ie-legacy-notice .dops-notice__content{display:inline-block;margin-right:10px}.page-content.configure{margin-top:0}.configure .frame.top{border:none;box-shadow:none;padding-top:1.42857em;position:relative;top:auto}.configure .frame.top.fixed{background:#f9f9f9;border-bottom:1px solid #e9e9e9;padding-right:160px;margin-top:-6px;position:fixed;left:0;top:32px;width:100%;z-index:4;box-shadow:0 2px 2px -2px #eee}@media (max-width:782px){.configure .frame.top.fixed{border:none;box-shadow:none;padding-top:1.42857em;position:relative;top:auto}}@media (max-width:600px){.configure .frame.top.fixed{top:0}}.jp-frame-top-fixed .configure{padding-top:94px}.filter-search{display:none;float:left;margin-top:10px}@media (max-width:782px){.filter-search{display:block}}@media (max-width:530px){.filter-search{display:none}}.table-bordered.jetpack-modules{border:none;margin-bottom:0}.table-bordered.jetpack-modules tr.jetpack-module th{border-right:0;padding:14px 4px 0}.table-bordered.jetpack-modules tr.jetpack-module th input{display:block}.table-bordered.jetpack-modules tr.jetpack-module:hover .genericon{display:inline-block}.table-bordered.jetpack-modules tr.jetpack-module.active td,.table-bordered.jetpack-modules tr.jetpack-module.active th{background:#f7fcfe}.table-bordered.jetpack-modules tr.jetpack-module.active th{border-right:4px solid #2ea2cc;padding-right:0}.table-bordered.jetpack-modules tr.jetpack-module.active td:first-child{border-right:4px solid #2ea2cc}.table-bordered.jetpack-modules tr.jetpack-module.unavailable input{display:none}.table-bordered.jetpack-modules tr.jetpack-module.deprecated span{color:#888}.table-bordered.jetpack-modules tr.jetpack-module.deprecated .dep-msg{margin-left:10px;color:#555}.table-bordered.jetpack-modules tr.jetpack-module td,.table-bordered.jetpack-modules tr.jetpack-module th{background:#fff;margin:0;box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.table-bordered.jetpack-modules tr.jetpack-module td{padding:10px 14px 8px 10px;line-height:25px}.table-bordered.jetpack-modules tr.jetpack-module td:first-child{border-right:4px solid #fff}.table-bordered.jetpack-modules tr.jetpack-module td .row-actions{float:left;padding:0 0 1px;visibility:visible}.table-bordered.jetpack-modules tr.jetpack-module td .row-actions span{margin-right:5px}@media (max-width:530px){.table-bordered.jetpack-modules tr.jetpack-module td .row-actions{display:none}}@media (max-width:782px){.table-bordered.jetpack-modules tr.jetpack-module td .row-actions{display:block;padding-right:10px;visibility:visible}}.table-bordered.jetpack-modules.with-transparency tr.jetpack-module:hover td .row-actions span a{opacity:1}.table-bordered.jetpack-modules.with-transparency tr.jetpack-module.unavailable{opacity:.3}.table-bordered.jetpack-modules.with-transparency tr.jetpack-module td .row-actions span a{opacity:0}.table-bordered.jetpack-modules.with-transparency tr.jetpack-module td .row-actions span a:focus{opacity:1}.table-bordered.jetpack-modules>thead>tr>th{border:0;vertical-align:middle}.table-bordered.jetpack-modules>thead>tr>th:last-child{padding-left:0}@media (max-width:782px){.table-bordered.jetpack-modules>thead>tr>th:last-child{padding-right:0}}.table-bordered.jetpack-modules td{background:#fff}.table-bordered.jetpack-modules #doaction{margin-top:0}@media (max-width:782px){.table-bordered.jetpack-modules #doaction{padding:10px 7px}}.table-bordered.jetpack-modules .checkall{margin-top:1px}.table-bordered.jetpack-modules .filter-search{margin-top:8px}.table-bordered.jetpack-modules .genericon{color:#999;display:none;margin:7px 3px 0}@media (max-width:900px){.table-bordered.jetpack-modules .genericon{display:inline-block}}.table-bordered.jetpack-modules .med{width:70px}.table-bordered.jetpack-modules .sm{width:30px}@media (max-width:782px){.table-bordered.jetpack-modules .check-column{width:50px}}.fixed-top .check-column{padding:8px 10px 0 10px;width:2.2em}.wrap{margin:0;padding:0 1.5em 1em;overflow:hidden}.wrap h2{font-size:24px;font-weight:400}.wrap .manage-left{float:right;margin:0;padding:0;width:63%}.wrap .manage-left table{width:100%}.wrap .manage-left th{font-weight:400}@media (max-width:782px){.wrap .manage-left{width:100%}}.wrap .manage-right{margin:0;padding:0;float:left;width:35%;z-index:1}.wrap .manage-right p{font-size:12px;font-weight:700;color:#bbb;padding-top:2px;text-transform:uppercase;letter-spacing:1px;clear:right}.wrap .manage-right .bumper{margin-right:33px}.wrap .manage-right.show{display:block;overflow-y:auto;overflow-x:hidden;position:absolute;z-index:100000}.wrap .manage-right .search-bar{margin-bottom:18px;max-width:300px}.wrap .manage-right p.search-box{float:none;height:auto;margin-bottom:0;position:relative}.wrap .manage-right p.search-box input[type=search]{padding:0 8px;width:90%;line-height:initial}@media (max-width:782px){.wrap .manage-right p.search-box input[type=search]{float:right;padding:9px 8px}}.wrap .manage-right p.search-box input[type=submit]{display:none}.wrap .manage-right .button-group .button{outline:0}.wrap .manage-right .subsubsub{margin:0;padding:0}.wrap .manage-right .subsubsub a{padding:0;line-height:inherit}.wrap .manage-right .subsubsub .current{padding:1px 5px;border-radius:2px;margin-right:-5px;background:#0d72b2;color:#fff}.wrap .manage-right .subsubsub .current .count{color:#bcd7e7;font-weight:200}.wrap .manage-right .subsubsub li{display:block;text-align:right}@media (max-width:782px){.wrap .manage-right{background:#fff;bottom:0;display:none;min-width:300px;position:fixed;left:0;top:0;z-index:13;box-shadow:0 1px 20px 5px rgba(0,0,0,.1)}.wrap .manage-right .bumper{margin:13px}.wrap .manage-right .navbar-form{margin:0;padding:0}}@media (max-width:782px){.wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.column-primary):not(.check-column){padding:11px 10px;display:block}.manage-right.show .subsubsub li{padding:5px}}@media (max-width:650px){.table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions{float:none;padding-right:18px}}@media (max-width:430px){.table-bordered.jetpack-modules tr.jetpack-module td .row-actions{display:none}.table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions{display:block}}.configure-module p{font-size:14px}.configure-module p.error,.configure-module p.success{color:#fff;padding:10px}.configure-module p.success{background-color:#81a844}.configure-module p.error{background-color:#d94f4f}.protect-status p{font-size:16px}.protect-status strong{display:inline-block;margin-top:10px;background:#fff;padding:10px;border:1px #ddd solid;font-size:16px;color:#000;max-width:100%}.protect-status.attn{color:#d94f4f}.protect-status.working{color:#81a844}.protect-whitelist textarea{width:100%;min-height:150px}.configure-module input[disabled]{opacity:.5}.configure-module input.button-primary{font-weight:700}@media only screen and (min-width:1100px){.protect-whitelist{width:65%;float:right}}@media only screen and (max-width:400px){.protect-status strong{font-size:12px;overflow:auto}}.manage__icon{width:155px;height:155px;margin:20px auto}.manage-page .manage__description{max-width:600px;text-align:center;font-size:22px;color:#999;margin:20px auto}.manage-page .manage__button{font-size:16px;padding:0 20px;height:40px;line-height:40px}.manage__title .genericon{font-size:38px;color:#81a944}.manage__link{font-size:16px;padding:0 20px;height:40px;line-height:40px;font-weight:400}.manage__link .genericon{font-size:28px;vertical-align:middle;margin-top:-6px}.jp-content .hide{display:none}.jp-content .landing{margin:0 auto;z-index:2;position:relative}.jp-content h1{font-weight:400;line-height:1.75em;position:relative;z-index:3;width:100%;text-align:center}.jp-content h1.success{color:#81a844}.jp-content .footer{padding-top:0;margin-top:0;background-image:none}.jp-content .footer:before{height:inherit}.jp-content .more-info:before{content:none}.landing .wpcom-connect{min-height:400px}.wpcom-connect .j-col{padding:0}@media (max-width:1147px){.jp-content .landing{padding:0 2em}.jp-content .footer{padding-top:1.5em}}@media (max-width:530px){.jp-content .landing{padding:0 .5em}} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-admin.css b/plugins/jetpack/css/jetpack-admin.css
deleted file mode 100644
index ee30bdf1..00000000
--- a/plugins/jetpack/css/jetpack-admin.css
+++ /dev/null
@@ -1,1494 +0,0 @@
-/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/
-.j-row {
- width: 100%;
- margin: 0 auto;
-}
-
-.j-row:before, .j-row:after {
- content: " ";
- display: table;
-}
-
-.j-row:after {
- clear: both;
-}
-
-.j-col {
- padding: 0.85em;
- width: 100%;
- float: left;
- position: relative;
-}
-
-@media only screen {
- .j-sm-5 {
- width: 41.66667%;
- }
- .j-sm-7 {
- width: 58.33333%;
- }
- .j-sm-12 {
- width: 100%;
- }
-}
-
-@media (min-width: 530px) {
- .j-md-4 {
- width: 33.33333%;
- }
- .j-md-6 {
- width: 50%;
- }
- .j-md-8 {
- width: 66.66667%;
- }
- .j-md-12 {
- width: 100%;
- }
-}
-
-@media (min-width: 782px) {
- .j-lrg-4 {
- width: 33.33333%;
- }
- .j-lrg-5 {
- width: 41.66667%;
- }
- .j-lrg-6 {
- width: 50%;
- }
- .j-lrg-7 {
- width: 58.33333%;
- }
- .j-lrg-8 {
- width: 66.66667%;
- }
- .j-lrg-12 {
- width: 100%;
- }
-}
-
-@keyframes "candy" {
- 0% {
- transform: scale(1);
- }
- 20% {
- transform: scale(1.15);
- }
- 60% {
- transform: scale(0.95);
- }
- 100% {
- transform: scale(1);
- }
-}
-
-.button,
-.download-jetpack {
- transition: all .1s ease-in-out;
-}
-
-.jp-button, .jp-button--settings {
- display: inline-block;
- position: relative;
- padding: 0.76923em 1.46154em;
- color: #efefef;
- font-weight: bold;
- font-size: 0.9285714286em;
- line-height: 1;
- text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
- background: #6f7476;
- border-radius: 3px;
-}
-
-.jp-button:visited, .jp-button--settings:visited {
- color: #efefef;
-}
-
-.jp-button:hover, .jp-button--settings:hover, .jp-button:focus, .jp-button--settings:focus {
- color: #fff;
- background: #57972d;
-}
-
-.jp-button:active, .jp-button--settings:active {
- background: #57972d;
- opacity: 0.8;
-}
-
-.jp-button--settings {
- background: #93b45f;
- color: #e8eedf;
-}
-
-.jp-button--settings:visited {
- color: #e8eedf;
-}
-
-.jp-button--settings:hover, .jp-button--settings:focus {
- background: #9fbd72;
- color: #fff;
-}
-
-.jp-button--settings.current {
- background: #3c6621;
- color: #fff;
- box-shadow: inset 0 2px 0 #365A1F, inset 0 1px 3px #3c6621;
-}
-
-.download-jetpack {
- display: inline-block;
- position: relative;
- padding: 0.64286em 1.08696em 0.53571em;
- color: #fff;
- font-weight: 400;
- font-size: 20px;
- line-height: 1;
- background: #518d2a;
- z-index: 3;
- border-radius: 6px;
- box-shadow: 0 6px 0 #3e6c20, 0 6px 3px rgba(0, 0, 0, 0.4);
-}
-
-.download-jetpack:visited {
- color: #fff;
-}
-
-.download-jetpack:hover, .download-jetpack:focus {
- color: #fff;
- background: #57972d;
- box-shadow: 0 6px 0 #3e6c20, 0 6px 3px rgba(0, 0, 0, 0.4);
-}
-
-.download-jetpack:active {
- top: 6px;
- box-shadow: 0 0px 0 #3e6c20, 0 0 0 rgba(0, 0, 0, 0.4);
-}
-
-.download-jetpack:active:after {
- top: -6px;
-}
-
-.download-jetpack:before {
- content: '';
- display: inline-block;
- position: relative;
- top: -2px;
- margin-right: 13px;
- width: 30px;
- height: 30px;
- vertical-align: middle;
- background: url("../images/connect-plug.svg") center center no-repeat;
- background-size: 100%;
-}
-
-.download-jetpack:after {
- content: '';
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
-}
-
-@media (max-width: 1147px) {
- .download-jetpack {
- font-size: 1.28571em;
- }
- .download-jetpack:before {
- top: -1px;
- width: 23px;
- height: 23px;
- }
-}
-
-@media (max-width: 900px) {
- .download-jetpack:active {
- top: 0;
- }
-}
-
-@media (max-width: 530px) {
- .download-jetpack {
- font-size: 1.21429em;
- font-weight: 600;
- }
- .download-jetpack:before {
- width: 19px;
- height: 19px;
- margin-right: 9px;
- }
-}
-
-@font-face {
- font-family: 'automatticons';
- src: url("../_inc/fonts/automatticons/automatticons.eot");
- src: url("../_inc/fonts/automatticons/automatticons.eot?#iefix") format("embedded-opentype"), url("../_inc/fonts/automatticons/automatticons.woff") format("woff"), url("../_inc/fonts/automatticons/automatticons.ttf") format("truetype"), url("../_inc/fonts/automatticons/automatticons.svg#automatticonsregular") format("svg");
- font-weight: normal;
- font-style: normal;
-}
-
-.nav-horizontal:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden;
-}
-
-.nav-horizontal a {
- display: inline-block;
-}
-
-.nav-horizontal li {
- position: relative;
- float: left;
-}
-
-.nav-horizontal ul {
- margin: 0;
- padding: 0;
-}
-
-@media (max-width: 782px) {
- .configure .frame.top.fixed {
- padding-left: 0;
- }
-}
-
-.wrap.inner,
-.page-content {
- max-width: 950px;
- margin: 0 auto;
-}
-
-.wrap.inner li,
-.page-content li {
- line-height: 23px;
-}
-
-@media (max-width: 530px) {
- .page-content {
- margin-top: 0;
- }
-}
-
-@media (max-width: 1147px) {
- .wrap.inner {
- background: #f9f9f9;
- padding: 15px;
- }
-}
-
-@media (max-width: 530px) {
- .wrap.inner {
- margin-top: 1.71429em;
- }
-}
-
-.page-content.about {
- position: relative;
- z-index: 10;
-}
-
-@media (max-width: 1147px) {
- .page-content.about {
- background: #f9f9f9;
- padding: 15px;
- }
-}
-
-@media (max-width: 1147px) {
- .page-content.configure {
- background: #f9f9f9;
- }
-}
-
-.footer nav {
- max-width: 550px;
- margin: 0 auto;
-}
-
-.header {
- left: 0;
- right: 0;
- background: #81a844;
-}
-
-.header-nav li {
- line-height: 60px;
-}
-
-.header-nav a {
- padding: 0 0.71429em;
- line-height: 24px;
-}
-
-.header-nav .jetpack-logo a {
- display: inline-block;
- position: relative;
- width: 214px;
- margin-right: 6px;
- background: url(../images/jetpack-logo.png) center center no-repeat;
- background: url(../images/jetpack-logo.svg) center center no-repeat, none;
- background-size: 183px auto;
- color: #fff;
- line-height: 60px;
- font-weight: normal;
-}
-
-.header-nav .jetpack-logo a span {
- text-indent: -9999px;
- visibility: hidden;
-}
-
-.header-nav .jetpack-logo a:before {
- content: '';
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background-size: 183px 32px;
-}
-
-.header-nav .jetpack-modules + .jetpack-modules {
- margin-left: 15px;
-}
-
-.main-nav {
- float: left;
-}
-
-.main-nav li {
- margin: 0;
-}
-
-@media (max-width: 900px) {
- .main-nav {
- font-size: 13px;
- }
-}
-
-.jetpack-pagestyles #screen-meta {
- margin: 0;
-}
-
-.jetpack-pagestyles #screen-meta-links .screen-meta-toggle {
- z-index: 2;
-}
-
-.jetpack-pagestyles #screen-options-link-wrap, .jetpack-pagestyles #contextual-help-link-wrap {
- border: none;
-}
-
-.jetpack-pagestyles .update-nag {
- display: none;
-}
-
-.loading {
- bottom: 50%;
- position: absolute;
- top: 50%;
- width: 100%;
-}
-
-.loading span {
- color: #999;
-}
-
-.modal {
- background: #fff;
- position: fixed;
- top: 52px;
- bottom: 20px;
- right: 20px;
- left: 20px;
- margin-left: 160px;
- display: none;
- box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1);
- z-index: 500;
-}
-
-.modal .close {
- position: absolute;
- top: 0;
- right: 0;
- font: 300 1.71429em "genericons" !important;
- color: #777;
- content: '\f405';
- display: inline-block;
- padding: 0.28571em 0.71429em 0.42857em;
- z-index: 5;
-}
-
-.modal .close:hover {
- background: #eee;
- opacity: 0.8;
-}
-
-.modal .close:active {
- background: #eee;
- opacity: 0.4;
-}
-
-.modal .content-container {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- overflow: auto;
- padding: 2.14286em;
-}
-
-.modal .content {
- margin: 0 auto;
- max-width: 900px;
- text-align: left;
-}
-
-.modal h2 {
- text-align: left;
- margin-top: 0;
- color: #5d6d74;
- font-weight: 300;
- line-height: 32px;
- text-shadow: 0 1px 1px #fff;
-}
-
-@media (max-width: 530px) {
- .modal h2 {
- font-size: 26px;
- }
-}
-
-.modal h5 {
- clear: left;
-}
-
-.modal p {
- font-size: 1.23077em;
-}
-
-.modal footer {
- position: absolute;
- left: 0;
- bottom: 0;
- width: 100%;
- padding: 12px 20px;
- border-top: 1px solid #ddd;
- background: #fff;
- text-align: right;
-}
-
-.modal footer ul {
- margin: 0;
-}
-
-.modal footer li {
- display: inline-block;
- margin: 0;
-}
-
-.modal .button-secondary,
-.modal .button-primary:active {
- vertical-align: baseline;
-}
-
-@media (max-width: 900px) {
- .modal {
- bottom: 5%;
- margin-left: 36px;
- font-size: 80%;
- }
- .modal .content {
- top: 38px;
- }
-}
-
-@media (max-width: 782px) {
- .modal {
- top: 66px;
- margin-left: 0;
- }
-}
-
-@media (max-width: 600px) {
- .modal {
- top: 10px;
- right: 10px;
- bottom: 10px;
- left: 10px;
- }
-}
-
-.jp-info-img {
- float: right;
- margin: 0 0 8px 30px;
-}
-
-.jp-info-img img {
- border: 1px solid #ddd;
- max-width: 100%;
- height: auto;
-}
-
-.jp-info-img img:first-child {
- margin-top: 0;
-}
-
-@media (max-width: 782px) {
- .jp-info-img {
- float: none;
- margin: 0 0 15px;
- }
-}
-
-.content-container.modal-footer {
- bottom: 53px;
-}
-
-.shade {
- background: #000;
- bottom: 0;
- cursor: pointer;
- display: none;
- left: 0;
- opacity: 0.2;
- position: fixed;
- right: 0;
- top: 0;
- z-index: 11;
-}
-
-.footer {
- margin-top: 1.42857em;
- position: relative;
- padding: 10em 0 4.28571em;
- text-align: center;
-}
-
-.footer:before, .footer:after {
- content: '';
- position: absolute;
- left: 0;
- pointer-events: none;
-}
-
-.footer:before {
- top: 0;
- margin-top: -1px;
- width: 100%;
- height: 195px;
-}
-
-.footer:after {
- display: none;
-}
-
-.footer .download-jetpack {
- margin-bottom: 33px;
-}
-
-@media (min-width: 1147px) {
- .footer {
- padding-bottom: 35px;
- }
-}
-
-@media (max-width: 1147px) {
- .footer {
- padding-top: 165px;
- padding-bottom: 0;
- }
- .footer:before {
- background-size: 160% auto;
- }
- .footer ul {
- float: none;
- overflow: hidden;
- }
-}
-
-@media (max-width: 900px) {
- .footer {
- padding-top: 146px;
- }
-}
-
-@media (max-width: 782px) {
- .footer {
- margin-top: 0;
- }
-}
-
-@media (max-width: 530px) {
- .footer {
- margin-top: 0;
- padding-top: 135px;
- }
-}
-
-@media (max-width: 320px) {
- .footer {
- padding-top: 76px;
- }
-}
-
-.footer nav {
- max-width: 100%;
-}
-
-.footer nav a,
-.footer nav a:visited {
- padding: 4px 6px;
- color: #999;
-}
-
-.footer nav a:hover, .footer nav a:focus,
-.footer nav a:visited:hover,
-.footer nav a:visited:focus {
- color: #81A844;
-}
-
-@media (max-width: 1147px) {
- .footer nav a:hover, .footer nav a:focus,
- .footer nav a:visited:hover,
- .footer nav a:visited:focus {
- color: #81a844;
- }
-}
-
-@media (max-width: 530px) {
- .footer nav li {
- display: block;
- float: none;
- margin: 0;
- text-align: left;
- }
- .footer nav a {
- display: block;
- padding: 0 16px;
- line-height: 44px;
- }
-}
-
-.primary {
- padding: 25px 15px 10px 15px;
- border-bottom: 1px solid #eee;
-}
-
-.secondary-footer {
- margin: 0 auto;
-}
-
-.secondary-footer li {
- margin-right: 5px;
-}
-
-@media (min-width: 782px) {
- .secondary-footer {
- padding: 8px 15px 10px;
- margin-bottom: 30px;
- border-bottom: 1px solid #eee;
- }
-}
-
-@media (min-width: 1147px) {
- .secondary-footer {
- margin-bottom: 0;
- }
-}
-
-@media (max-width: 782px) {
- .secondary-footer {
- padding: 8px 15px 8px;
- border-bottom: none;
- }
-}
-
-@media (max-width: 530px) {
- .secondary-footer {
- margin: 0;
- padding: 0;
- border: none;
- font-weight: 400;
- }
- .secondary-footer a {
- border-top: 1px solid #eee;
- }
-}
-
-.footer .a8c-attribution {
- margin: 0;
- padding: 0 6px;
- color: #bbb;
- font-size: 0.78571em;
- font-family: "Gill Sans", "Gill Sans MT", Helvetica, Arial, sans-serif;
- text-transform: uppercase;
-}
-
-.footer .a8c-attribution a {
- display: inline-block;
- position: relative;
- padding: 4px 16px;
- right: 9999px;
- outline: 0;
-}
-
-.footer .a8c-attribution a:after {
- content: 'A';
- position: absolute;
- top: 2px;
- right: -9999px;
- height: 100%;
- color: #999;
- font-size: 1.54545em;
- font-family: "automatticons";
- text-align: center;
-}
-
-.footer .a8c-attribution a:hover:after {
- animation: candy .4s ease-in-out;
-}
-
-@media (min-width: 782px) {
- .secondary {
- padding: 0 15px 10px 15px;
- border-bottom: 1px solid #eee;
- }
-}
-
-@media (min-width: 1147px) {
- .secondary {
- padding: 0 15px 10px 15px;
- border-bottom: none;
- }
-}
-
-.jetpack-message {
- background: #8eb74e;
- border: 1px solid #73963d;
- margin: 33px auto 0;
- max-width: 90%;
- position: relative;
- z-index: 2;
-}
-
-.jetpack-message.is-opt-in {
- margin: 50px 0 0;
- max-width: 100%;
- padding: 10px 15px;
- background: #fff;
- border: 0;
- box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);
- font-size: 13px;
- text-align: center;
-}
-
-.subhead .jetpack-message.is-opt-in {
- margin: 0;
- padding-bottom: 0;
- background: transparent;
- box-shadow: none;
-}
-
-.subhead .jetpack-message.is-opt-in .jp-button, .subhead .jetpack-message.is-opt-in .jp-button--settings {
- display: inline-block;
-}
-
-.jetpack-message.is-opt-in p {
- color: #3c4549;
-}
-
-.jetpack-message.is-opt-in .jp-button, .jetpack-message.is-opt-in .jp-button--settings {
- margin-top: 15px;
- display: none;
-}
-
-.jetpack-message .squeezer h2 {
- font-size: 1em;
-}
-
-.jetpack-message h2 {
- color: #fff;
- margin: 0;
-}
-
-.jetpack-message p {
- color: #fff;
- margin: 0;
- opacity: 0.7;
-}
-
-.jetpack-message .squeezer {
- padding: 23px 23px 23px 80px;
- position: relative;
- text-align: left;
-}
-
-.jetpack-message .squeezer:before {
- color: #fff;
- content: '\f418';
- font-family: 'Genericons';
- font-size: 33px;
- height: 33px;
- left: 25px;
- opacity: 0.6;
- position: absolute;
- top: 23px;
- top: calc( 50% - 22px);
-}
-
-@media (max-width: 530px) {
- .jetpack-message .squeezer {
- padding: 23px;
- }
- .jetpack-message .squeezer:before {
- display: none;
- }
-}
-
-.jetpack-message .squeezer a {
- color: #FFF;
- border-bottom: 1px solid #D5E4BD;
-}
-
-.jetpack-message .squeezer a:hover {
- border-bottom: 1px solid #F1F6E9;
-}
-
-.jetpack-message.error .squeezer:before,
-.jetpack-message.jetpack-err .squeezer:before {
- content: '\f414';
-}
-
-.configure-module .jetpack-message {
- max-width: 100%;
-}
-
-@media (max-width: 530px) {
- .wrap.inner.jp-support .jp-support-column-left {
- width: 100%;
- }
- .wrap.inner.jp-support .jp-support-column-left .widget-text {
- margin-right: 0;
- width: 100%;
- }
- .wrap.inner.jp-support .jp-support-column-right {
- width: 100%;
- }
-}
-
-@media screen and (max-width: 515px) {
- .jp-frame .header-nav {
- padding-bottom: 10px;
- }
- .jp-frame .header-nav li {
- line-height: 30px;
- }
- .jp-frame .header-nav .jetpack-logo {
- width: 100%;
- text-align: center;
- }
- .jp-frame .header-nav .jetpack-modules {
- margin: 0;
- width: 50%;
- text-align: right;
- padding: 0 5px;
- }
- .jp-frame .header-nav .jetpack-modules + .jetpack-modules {
- text-align: left;
- }
- .jp-frame .header-nav .jetpack-modules:nth-child(4) {
- text-align: center;
- margin: 0 auto;
- width: 100%;
- }
- .jp-frame .header-nav .jetpack-modules:nth-child(4) a {
- padding: 0 10px;
- }
-}
-
-#ie-legacy-notice .dops-notice__content {
- display: inline-block;
- margin-left: 10px;
-}
-
-.page-content.configure {
- margin-top: 0;
-}
-
-.configure .frame.top {
- border: none;
- box-shadow: none;
- padding-top: 1.42857em;
- position: relative;
- top: auto;
-}
-
-.configure .frame.top.fixed {
- background: #f9f9f9;
- border-bottom: 1px solid #e9e9e9;
- padding-left: 160px;
- margin-top: -6px;
- position: fixed;
- right: 0;
- top: 32px;
- width: 100%;
- z-index: 4;
- box-shadow: 0 2px 2px -2px #eee;
-}
-
-@media (max-width: 782px) {
- .configure .frame.top.fixed {
- border: none;
- box-shadow: none;
- padding-top: 1.42857em;
- position: relative;
- top: auto;
- }
-}
-
-@media (max-width: 600px) {
- .configure .frame.top.fixed {
- top: 0;
- }
-}
-
-.jp-frame-top-fixed .configure {
- padding-top: 94px;
-}
-
-.filter-search {
- display: none;
- float: right;
- margin-top: 10px;
-}
-
-@media (max-width: 782px) {
- .filter-search {
- display: block;
- }
-}
-
-@media (max-width: 530px) {
- .filter-search {
- display: none;
- }
-}
-
-.table-bordered.jetpack-modules {
- border: none;
- margin-bottom: 0;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module th {
- border-left: 0;
- padding: 14px 4px 0;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module th input {
- display: block;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module:hover .genericon {
- display: inline-block;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module.active th,
-.table-bordered.jetpack-modules tr.jetpack-module.active td {
- background: #f7fcfe;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module.active th {
- border-left: 4px solid #2ea2cc;
- padding-left: 0px;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module.active td:first-child {
- border-left: 4px solid #2ea2cc;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module.unavailable input {
- display: none;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module.deprecated span {
- color: #888;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module.deprecated .dep-msg {
- margin-right: 10px;
- color: #555;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module th,
-.table-bordered.jetpack-modules tr.jetpack-module td {
- background: #fff;
- margin: 0;
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module td {
- padding: 10px 10px 8px 14px;
- line-height: 25px;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module td:first-child {
- border-left: 4px solid #fff;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module td .row-actions {
- float: right;
- padding: 0 0 1px;
- visibility: visible;
-}
-
-.table-bordered.jetpack-modules tr.jetpack-module td .row-actions span {
- margin-left: 5px;
-}
-
-@media (max-width: 530px) {
- .table-bordered.jetpack-modules tr.jetpack-module td .row-actions {
- display: none;
- }
-}
-
-@media (max-width: 782px) {
- .table-bordered.jetpack-modules tr.jetpack-module td .row-actions {
- display: block;
- padding-left: 10px;
- visibility: visible;
- }
-}
-
-.table-bordered.jetpack-modules.with-transparency tr.jetpack-module:hover td .row-actions span a {
- opacity: 1;
-}
-
-.table-bordered.jetpack-modules.with-transparency tr.jetpack-module.unavailable {
- opacity: 0.3;
-}
-
-.table-bordered.jetpack-modules.with-transparency tr.jetpack-module td .row-actions span a {
- opacity: 0;
-}
-
-.table-bordered.jetpack-modules.with-transparency tr.jetpack-module td .row-actions span a:focus {
- opacity: 1;
-}
-
-.table-bordered.jetpack-modules > thead > tr > th {
- border: 0;
- vertical-align: middle;
-}
-
-.table-bordered.jetpack-modules > thead > tr > th:last-child {
- padding-right: 0;
-}
-
-@media (max-width: 782px) {
- .table-bordered.jetpack-modules > thead > tr > th:last-child {
- padding-left: 0;
- }
-}
-
-.table-bordered.jetpack-modules td {
- background: #fff;
-}
-
-.table-bordered.jetpack-modules #doaction {
- margin-top: 0;
-}
-
-@media (max-width: 782px) {
- .table-bordered.jetpack-modules #doaction {
- padding: 10px 7px;
- }
-}
-
-.table-bordered.jetpack-modules .checkall {
- margin-top: 1px;
-}
-
-.table-bordered.jetpack-modules .filter-search {
- margin-top: 8px;
-}
-
-.table-bordered.jetpack-modules .genericon {
- color: #999;
- display: none;
- margin: 7px 3px 0;
-}
-
-@media (max-width: 900px) {
- .table-bordered.jetpack-modules .genericon {
- display: inline-block;
- }
-}
-
-.table-bordered.jetpack-modules .med {
- width: 70px;
-}
-
-.table-bordered.jetpack-modules .sm {
- width: 30px;
-}
-
-@media (max-width: 782px) {
- .table-bordered.jetpack-modules .check-column {
- width: 50px;
- }
-}
-
-.fixed-top .check-column {
- padding: 8px 10px 0 10px;
- width: 2.2em;
-}
-
-.wrap {
- margin: 0;
- padding: 0 1.5em 1em;
- overflow: hidden;
-}
-
-.wrap h2 {
- font-size: 24px;
- font-weight: 400;
-}
-
-.wrap .manage-left {
- float: left;
- margin: 0;
- padding: 0;
- width: 63%;
-}
-
-.wrap .manage-left table {
- width: 100%;
-}
-
-.wrap .manage-left th {
- font-weight: 400;
-}
-
-@media (max-width: 782px) {
- .wrap .manage-left {
- width: 100%;
- }
-}
-
-.wrap .manage-right {
- margin: 0;
- padding: 0;
- float: right;
- width: 35%;
- z-index: 1;
-}
-
-.wrap .manage-right p {
- font-size: 12px;
- font-weight: bold;
- color: #bbb;
- padding-top: 2px;
- text-transform: uppercase;
- letter-spacing: 1px;
- clear: left;
-}
-
-.wrap .manage-right .bumper {
- margin-left: 33px;
-}
-
-.wrap .manage-right.show {
- display: block;
- overflow-y: auto;
- overflow-x: hidden;
- position: absolute;
- z-index: 100000;
-}
-
-.wrap .manage-right .search-bar {
- margin-bottom: 18px;
- max-width: 300px;
-}
-
-.wrap .manage-right p.search-box {
- float: none;
- height: auto;
- margin-bottom: 0;
- position: relative;
-}
-
-.wrap .manage-right p.search-box input[type='search'] {
- padding: 0 8px;
- width: 90%;
- line-height: initial;
-}
-
-@media (max-width: 782px) {
- .wrap .manage-right p.search-box input[type='search'] {
- float: left;
- padding: 9px 8px;
- }
-}
-
-.wrap .manage-right p.search-box input[type="submit"] {
- display: none;
-}
-
-.wrap .manage-right .button-group .button {
- outline: none;
-}
-
-.wrap .manage-right .subsubsub {
- margin: 0;
- padding: 0;
-}
-
-.wrap .manage-right .subsubsub a {
- padding: 0;
- line-height: inherit;
-}
-
-.wrap .manage-right .subsubsub .current {
- padding: 1px 5px;
- border-radius: 2px;
- margin-left: -5px;
- background: #0D72B2;
- color: #fff;
-}
-
-.wrap .manage-right .subsubsub .current .count {
- color: #BCD7E7;
- font-weight: 200;
-}
-
-.wrap .manage-right .subsubsub li {
- display: block;
- text-align: left;
-}
-
-@media (max-width: 782px) {
- .wrap .manage-right {
- background: #fff;
- bottom: 0;
- display: none;
- min-width: 300px;
- position: fixed;
- right: 0;
- top: 0;
- z-index: 13;
- box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1);
- }
- .wrap .manage-right .bumper {
- margin: 13px;
- }
- .wrap .manage-right .navbar-form {
- margin: 0;
- padding: 0;
- }
-}
-
-@media (max-width: 782px) {
- .wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.column-primary):not(.check-column) {
- padding: 11px 10px;
- display: block;
- }
- .manage-right.show .subsubsub li {
- padding: 5px;
- }
-}
-
-@media (max-width: 650px) {
- .table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions {
- float: none;
- padding-left: 18px;
- }
-}
-
-@media (max-width: 430px) {
- .table-bordered.jetpack-modules tr.jetpack-module td .row-actions {
- display: none;
- }
- .table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions {
- display: block;
- }
-}
-
-/* 'Pages' is a temporary location for these styles, until we can break them up into their proper atmoic locations */
-.configure-module p {
- font-size: 14px;
-}
-
-.configure-module p.success, .configure-module p.error {
- color: #fff;
- padding: 10px;
-}
-
-.configure-module p.success {
- background-color: #81a844;
-}
-
-.configure-module p.error {
- background-color: #d94f4f;
-}
-
-.protect-status p {
- font-size: 16px;
-}
-
-.protect-status strong {
- display: inline-block;
- margin-top: 10px;
- background: #fff;
- padding: 10px;
- border: 1px #ddd solid;
- font-size: 16px;
- color: #000;
- max-width: 100%;
-}
-
-.protect-status.attn {
- color: #d94f4f;
-}
-
-.protect-status.working {
- color: #81a844;
-}
-
-.protect-whitelist textarea {
- width: 100%;
- min-height: 150px;
-}
-
-/* btns + inputs */
-.configure-module input[disabled] {
- opacity: .5;
-}
-
-.configure-module input.button-primary {
- font-weight: bold;
-}
-
-/* whitelist table */
-@media only screen and (min-width: 1100px) {
- .protect-whitelist {
- width: 65%;
- float: left;
- }
-}
-
-/* end > 1065px */
-@media only screen and (max-width: 400px) {
- .protect-status strong {
- font-size: 12px;
- overflow: auto;
- }
-}
-
-/* end < 400px */
-.manage__icon {
- width: 155px;
- height: 155px;
- margin: 20px auto;
-}
-
-.manage-page .manage__description {
- max-width: 600px;
- text-align: center;
- font-size: 22px;
- color: #999;
- margin: 20px auto;
-}
-
-.manage-page .manage__button {
- font-size: 16px;
- padding: 0 20px;
- height: 40px;
- line-height: 40px;
-}
-
-.manage__title .genericon {
- font-size: 38px;
- color: #81A944;
-}
-
-.manage__link {
- font-size: 16px;
- padding: 0 20px;
- height: 40px;
- line-height: 40px;
- font-weight: normal;
-}
-
-.manage__link .genericon {
- font-size: 28px;
- vertical-align: middle;
- margin-top: -6px;
-}
-
-.jp-content .hide {
- display: none;
-}
-
-.jp-content .landing {
- margin: 0 auto;
- z-index: 2;
- position: relative;
-}
-
-.jp-content h1 {
- font-weight: 400;
- line-height: 1.75em;
- position: relative;
- z-index: 3;
- width: 100%;
- text-align: center;
-}
-
-.jp-content h1.success {
- color: #81a844;
-}
-
-.jp-content .footer {
- padding-top: 0;
- margin-top: 0;
- background-image: none;
-}
-
-.jp-content .footer:before {
- height: inherit;
-}
-
-.jp-content .more-info:before {
- content: none;
-}
-
-.landing .wpcom-connect {
- min-height: 400px;
-}
-
-.wpcom-connect .j-col {
- padding: 0;
-}
-
-@media (max-width: 1147px) {
- .jp-content .landing {
- padding: 0 2em;
- }
- .jp-content .footer {
- padding-top: 1.5em;
- }
-}
-
-@media (max-width: 530px) {
- .jp-content .landing {
- padding: 0 .5em;
- }
-}
-
-/*# sourceMappingURL=jetpack-admin.css.map */
diff --git a/plugins/jetpack/css/jetpack-admin.css.map b/plugins/jetpack/css/jetpack-admin.css.map
deleted file mode 100644
index 27430102..00000000
--- a/plugins/jetpack/css/jetpack-admin.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"names":[],"mappings":"","sources":["jetpack-admin.css"],"sourcesContent":["/*!\n* Do not modify this file directly. It is compiled SASS code.\n*/\n.j-row {\n width: 100%;\n margin: 0 auto;\n}\n\n.j-row:before, .j-row:after {\n content: \" \";\n display: table;\n}\n\n.j-row:after {\n clear: both;\n}\n\n.j-col {\n padding: 0.85em;\n width: 100%;\n float: left;\n position: relative;\n}\n\n@media only screen {\n .j-sm-5 {\n width: 41.66667%;\n }\n .j-sm-7 {\n width: 58.33333%;\n }\n .j-sm-12 {\n width: 100%;\n }\n}\n\n@media (min-width: 530px) {\n .j-md-4 {\n width: 33.33333%;\n }\n .j-md-6 {\n width: 50%;\n }\n .j-md-8 {\n width: 66.66667%;\n }\n .j-md-12 {\n width: 100%;\n }\n}\n\n@media (min-width: 782px) {\n .j-lrg-4 {\n width: 33.33333%;\n }\n .j-lrg-5 {\n width: 41.66667%;\n }\n .j-lrg-6 {\n width: 50%;\n }\n .j-lrg-7 {\n width: 58.33333%;\n }\n .j-lrg-8 {\n width: 66.66667%;\n }\n .j-lrg-12 {\n width: 100%;\n }\n}\n\n@keyframes \"candy\" {\n 0% {\n transform: scale(1);\n }\n 20% {\n transform: scale(1.15);\n }\n 60% {\n transform: scale(0.95);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n.button,\n.download-jetpack {\n transition: all .1s ease-in-out;\n}\n\n.jp-button, .jp-button--settings {\n display: inline-block;\n position: relative;\n padding: 0.76923em 1.46154em;\n color: #efefef;\n font-weight: bold;\n font-size: 0.9285714286em;\n line-height: 1;\n text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);\n background: #6f7476;\n border-radius: 3px;\n}\n\n.jp-button:visited, .jp-button--settings:visited {\n color: #efefef;\n}\n\n.jp-button:hover, .jp-button--settings:hover, .jp-button:focus, .jp-button--settings:focus {\n color: #fff;\n background: #57972d;\n}\n\n.jp-button:active, .jp-button--settings:active {\n background: #57972d;\n opacity: 0.8;\n}\n\n.jp-button--settings {\n background: #93b45f;\n color: #e8eedf;\n}\n\n.jp-button--settings:visited {\n color: #e8eedf;\n}\n\n.jp-button--settings:hover, .jp-button--settings:focus {\n background: #9fbd72;\n color: #fff;\n}\n\n.jp-button--settings.current {\n background: #3c6621;\n color: #fff;\n box-shadow: inset 0 2px 0 #365A1F, inset 0 1px 3px #3c6621;\n}\n\n.download-jetpack {\n display: inline-block;\n position: relative;\n padding: 0.64286em 1.08696em 0.53571em;\n color: #fff;\n font-weight: 400;\n font-size: 20px;\n line-height: 1;\n background: #518d2a;\n z-index: 3;\n border-radius: 6px;\n box-shadow: 0 6px 0 #3e6c20, 0 6px 3px rgba(0, 0, 0, 0.4);\n}\n\n.download-jetpack:visited {\n color: #fff;\n}\n\n.download-jetpack:hover, .download-jetpack:focus {\n color: #fff;\n background: #57972d;\n box-shadow: 0 6px 0 #3e6c20, 0 6px 3px rgba(0, 0, 0, 0.4);\n}\n\n.download-jetpack:active {\n top: 6px;\n box-shadow: 0 0px 0 #3e6c20, 0 0 0 rgba(0, 0, 0, 0.4);\n}\n\n.download-jetpack:active:after {\n top: -6px;\n}\n\n.download-jetpack:before {\n content: '';\n display: inline-block;\n position: relative;\n top: -2px;\n margin-right: 13px;\n width: 30px;\n height: 30px;\n vertical-align: middle;\n background: url(\"../images/connect-plug.svg\") center center no-repeat;\n background-size: 100%;\n}\n\n.download-jetpack:after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n@media (max-width: 1147px) {\n .download-jetpack {\n font-size: 1.28571em;\n }\n .download-jetpack:before {\n top: -1px;\n width: 23px;\n height: 23px;\n }\n}\n\n@media (max-width: 900px) {\n .download-jetpack:active {\n top: 0;\n }\n}\n\n@media (max-width: 530px) {\n .download-jetpack {\n font-size: 1.21429em;\n font-weight: 600;\n }\n .download-jetpack:before {\n width: 19px;\n height: 19px;\n margin-right: 9px;\n }\n}\n\n@font-face {\n font-family: 'automatticons';\n src: url(\"../_inc/fonts/automatticons/automatticons.eot\");\n src: url(\"../_inc/fonts/automatticons/automatticons.eot?#iefix\") format(\"embedded-opentype\"), url(\"../_inc/fonts/automatticons/automatticons.woff\") format(\"woff\"), url(\"../_inc/fonts/automatticons/automatticons.ttf\") format(\"truetype\"), url(\"../_inc/fonts/automatticons/automatticons.svg#automatticonsregular\") format(\"svg\");\n font-weight: normal;\n font-style: normal;\n}\n\n.nav-horizontal:after {\n content: \".\";\n display: block;\n height: 0;\n clear: both;\n visibility: hidden;\n}\n\n.nav-horizontal a {\n display: inline-block;\n}\n\n.nav-horizontal li {\n position: relative;\n float: left;\n}\n\n.nav-horizontal ul {\n margin: 0;\n padding: 0;\n}\n\n@media (max-width: 782px) {\n .configure .frame.top.fixed {\n padding-left: 0;\n }\n}\n\n.wrap.inner,\n.page-content {\n max-width: 950px;\n margin: 0 auto;\n}\n\n.wrap.inner li,\n.page-content li {\n line-height: 23px;\n}\n\n@media (max-width: 530px) {\n .page-content {\n margin-top: 0;\n }\n}\n\n@media (max-width: 1147px) {\n .wrap.inner {\n background: #f9f9f9;\n padding: 15px;\n }\n}\n\n@media (max-width: 530px) {\n .wrap.inner {\n margin-top: 1.71429em;\n }\n}\n\n.page-content.about {\n position: relative;\n z-index: 10;\n}\n\n@media (max-width: 1147px) {\n .page-content.about {\n background: #f9f9f9;\n padding: 15px;\n }\n}\n\n@media (max-width: 1147px) {\n .page-content.configure {\n background: #f9f9f9;\n }\n}\n\n.footer nav {\n max-width: 550px;\n margin: 0 auto;\n}\n\n.header {\n left: 0;\n right: 0;\n background: #81a844;\n}\n\n.header-nav li {\n line-height: 60px;\n}\n\n.header-nav a {\n padding: 0 0.71429em;\n line-height: 24px;\n}\n\n.header-nav .jetpack-logo a {\n display: inline-block;\n position: relative;\n width: 214px;\n margin-right: 6px;\n background: url(../images/jetpack-logo.png) center center no-repeat;\n background: url(../images/jetpack-logo.svg) center center no-repeat, none;\n background-size: 183px auto;\n color: #fff;\n line-height: 60px;\n font-weight: normal;\n}\n\n.header-nav .jetpack-logo a span {\n text-indent: -9999px;\n visibility: hidden;\n}\n\n.header-nav .jetpack-logo a:before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-size: 183px 32px;\n}\n\n.header-nav .jetpack-modules + .jetpack-modules {\n margin-left: 15px;\n}\n\n.main-nav {\n float: left;\n}\n\n.main-nav li {\n margin: 0;\n}\n\n@media (max-width: 900px) {\n .main-nav {\n font-size: 13px;\n }\n}\n\n.jetpack-pagestyles #screen-meta {\n margin: 0;\n}\n\n.jetpack-pagestyles #screen-meta-links .screen-meta-toggle {\n z-index: 2;\n}\n\n.jetpack-pagestyles #screen-options-link-wrap, .jetpack-pagestyles #contextual-help-link-wrap {\n border: none;\n}\n\n.jetpack-pagestyles .update-nag {\n display: none;\n}\n\n.loading {\n bottom: 50%;\n position: absolute;\n top: 50%;\n width: 100%;\n}\n\n.loading span {\n color: #999;\n}\n\n.modal {\n background: #fff;\n position: fixed;\n top: 52px;\n bottom: 20px;\n right: 20px;\n left: 20px;\n margin-left: 160px;\n display: none;\n box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1);\n z-index: 500;\n}\n\n.modal .close {\n position: absolute;\n top: 0;\n right: 0;\n font: 300 1.71429em \"genericons\" !important;\n color: #777;\n content: '\\f405';\n display: inline-block;\n padding: 0.28571em 0.71429em 0.42857em;\n z-index: 5;\n}\n\n.modal .close:hover {\n background: #eee;\n opacity: 0.8;\n}\n\n.modal .close:active {\n background: #eee;\n opacity: 0.4;\n}\n\n.modal .content-container {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: auto;\n padding: 2.14286em;\n}\n\n.modal .content {\n margin: 0 auto;\n max-width: 900px;\n text-align: left;\n}\n\n.modal h2 {\n text-align: left;\n margin-top: 0;\n color: #5d6d74;\n font-weight: 300;\n line-height: 32px;\n text-shadow: 0 1px 1px #fff;\n}\n\n@media (max-width: 530px) {\n .modal h2 {\n font-size: 26px;\n }\n}\n\n.modal h5 {\n clear: left;\n}\n\n.modal p {\n font-size: 1.23077em;\n}\n\n.modal footer {\n position: absolute;\n left: 0;\n bottom: 0;\n width: 100%;\n padding: 12px 20px;\n border-top: 1px solid #ddd;\n background: #fff;\n text-align: right;\n}\n\n.modal footer ul {\n margin: 0;\n}\n\n.modal footer li {\n display: inline-block;\n margin: 0;\n}\n\n.modal .button-secondary,\n.modal .button-primary:active {\n vertical-align: baseline;\n}\n\n@media (max-width: 900px) {\n .modal {\n bottom: 5%;\n margin-left: 36px;\n font-size: 80%;\n }\n .modal .content {\n top: 38px;\n }\n}\n\n@media (max-width: 782px) {\n .modal {\n top: 66px;\n margin-left: 0;\n }\n}\n\n@media (max-width: 600px) {\n .modal {\n top: 10px;\n right: 10px;\n bottom: 10px;\n left: 10px;\n }\n}\n\n.jp-info-img {\n float: right;\n margin: 0 0 8px 30px;\n}\n\n.jp-info-img img {\n border: 1px solid #ddd;\n max-width: 100%;\n height: auto;\n}\n\n.jp-info-img img:first-child {\n margin-top: 0;\n}\n\n@media (max-width: 782px) {\n .jp-info-img {\n float: none;\n margin: 0 0 15px;\n }\n}\n\n.content-container.modal-footer {\n bottom: 53px;\n}\n\n.shade {\n background: #000;\n bottom: 0;\n cursor: pointer;\n display: none;\n left: 0;\n opacity: 0.2;\n position: fixed;\n right: 0;\n top: 0;\n z-index: 11;\n}\n\n.footer {\n margin-top: 1.42857em;\n position: relative;\n padding: 10em 0 4.28571em;\n text-align: center;\n}\n\n.footer:before, .footer:after {\n content: '';\n position: absolute;\n left: 0;\n pointer-events: none;\n}\n\n.footer:before {\n top: 0;\n margin-top: -1px;\n width: 100%;\n height: 195px;\n}\n\n.footer:after {\n display: none;\n}\n\n.footer .download-jetpack {\n margin-bottom: 33px;\n}\n\n@media (min-width: 1147px) {\n .footer {\n padding-bottom: 35px;\n }\n}\n\n@media (max-width: 1147px) {\n .footer {\n padding-top: 165px;\n padding-bottom: 0;\n }\n .footer:before {\n background-size: 160% auto;\n }\n .footer ul {\n float: none;\n overflow: hidden;\n }\n}\n\n@media (max-width: 900px) {\n .footer {\n padding-top: 146px;\n }\n}\n\n@media (max-width: 782px) {\n .footer {\n margin-top: 0;\n }\n}\n\n@media (max-width: 530px) {\n .footer {\n margin-top: 0;\n padding-top: 135px;\n }\n}\n\n@media (max-width: 320px) {\n .footer {\n padding-top: 76px;\n }\n}\n\n.footer nav {\n max-width: 100%;\n}\n\n.footer nav a,\n.footer nav a:visited {\n padding: 4px 6px;\n color: #999;\n}\n\n.footer nav a:hover, .footer nav a:focus,\n.footer nav a:visited:hover,\n.footer nav a:visited:focus {\n color: #81A844;\n}\n\n@media (max-width: 1147px) {\n .footer nav a:hover, .footer nav a:focus,\n .footer nav a:visited:hover,\n .footer nav a:visited:focus {\n color: #81a844;\n }\n}\n\n@media (max-width: 530px) {\n .footer nav li {\n display: block;\n float: none;\n margin: 0;\n text-align: left;\n }\n .footer nav a {\n display: block;\n padding: 0 16px;\n line-height: 44px;\n }\n}\n\n.primary {\n padding: 25px 15px 10px 15px;\n border-bottom: 1px solid #eee;\n}\n\n.secondary-footer {\n margin: 0 auto;\n}\n\n.secondary-footer li {\n margin-right: 5px;\n}\n\n@media (min-width: 782px) {\n .secondary-footer {\n padding: 8px 15px 10px;\n margin-bottom: 30px;\n border-bottom: 1px solid #eee;\n }\n}\n\n@media (min-width: 1147px) {\n .secondary-footer {\n margin-bottom: 0;\n }\n}\n\n@media (max-width: 782px) {\n .secondary-footer {\n padding: 8px 15px 8px;\n border-bottom: none;\n }\n}\n\n@media (max-width: 530px) {\n .secondary-footer {\n margin: 0;\n padding: 0;\n border: none;\n font-weight: 400;\n }\n .secondary-footer a {\n border-top: 1px solid #eee;\n }\n}\n\n.footer .a8c-attribution {\n margin: 0;\n padding: 0 6px;\n color: #bbb;\n font-size: 0.78571em;\n font-family: \"Gill Sans\", \"Gill Sans MT\", Helvetica, Arial, sans-serif;\n text-transform: uppercase;\n}\n\n.footer .a8c-attribution a {\n display: inline-block;\n position: relative;\n padding: 4px 16px;\n right: 9999px;\n outline: 0;\n}\n\n.footer .a8c-attribution a:after {\n content: 'A';\n position: absolute;\n top: 2px;\n right: -9999px;\n height: 100%;\n color: #999;\n font-size: 1.54545em;\n font-family: \"automatticons\";\n text-align: center;\n}\n\n.footer .a8c-attribution a:hover:after {\n animation: candy .4s ease-in-out;\n}\n\n@media (min-width: 782px) {\n .secondary {\n padding: 0 15px 10px 15px;\n border-bottom: 1px solid #eee;\n }\n}\n\n@media (min-width: 1147px) {\n .secondary {\n padding: 0 15px 10px 15px;\n border-bottom: none;\n }\n}\n\n.jetpack-message {\n background: #8eb74e;\n border: 1px solid #73963d;\n margin: 33px auto 0;\n max-width: 90%;\n position: relative;\n z-index: 2;\n}\n\n.jetpack-message.is-opt-in {\n margin: 50px 0 0;\n max-width: 100%;\n padding: 10px 15px;\n background: #fff;\n border: 0;\n box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.1);\n font-size: 13px;\n text-align: center;\n}\n\n.subhead .jetpack-message.is-opt-in {\n margin: 0;\n padding-bottom: 0;\n background: transparent;\n box-shadow: none;\n}\n\n.subhead .jetpack-message.is-opt-in .jp-button, .subhead .jetpack-message.is-opt-in .jp-button--settings {\n display: inline-block;\n}\n\n.jetpack-message.is-opt-in p {\n color: #3c4549;\n}\n\n.jetpack-message.is-opt-in .jp-button, .jetpack-message.is-opt-in .jp-button--settings {\n margin-top: 15px;\n display: none;\n}\n\n.jetpack-message .squeezer h2 {\n font-size: 1em;\n}\n\n.jetpack-message h2 {\n color: #fff;\n margin: 0;\n}\n\n.jetpack-message p {\n color: #fff;\n margin: 0;\n opacity: 0.7;\n}\n\n.jetpack-message .squeezer {\n padding: 23px 23px 23px 80px;\n position: relative;\n text-align: left;\n}\n\n.jetpack-message .squeezer:before {\n color: #fff;\n content: '\\f418';\n font-family: 'Genericons';\n font-size: 33px;\n height: 33px;\n left: 25px;\n opacity: 0.6;\n position: absolute;\n top: 23px;\n top: calc( 50% - 22px);\n}\n\n@media (max-width: 530px) {\n .jetpack-message .squeezer {\n padding: 23px;\n }\n .jetpack-message .squeezer:before {\n display: none;\n }\n}\n\n.jetpack-message .squeezer a {\n color: #FFF;\n border-bottom: 1px solid #D5E4BD;\n}\n\n.jetpack-message .squeezer a:hover {\n border-bottom: 1px solid #F1F6E9;\n}\n\n.jetpack-message.error .squeezer:before,\n.jetpack-message.jetpack-err .squeezer:before {\n content: '\\f414';\n}\n\n.configure-module .jetpack-message {\n max-width: 100%;\n}\n\n@media (max-width: 530px) {\n .wrap.inner.jp-support .jp-support-column-left {\n width: 100%;\n }\n .wrap.inner.jp-support .jp-support-column-left .widget-text {\n margin-right: 0;\n width: 100%;\n }\n .wrap.inner.jp-support .jp-support-column-right {\n width: 100%;\n }\n}\n\n@media screen and (max-width: 515px) {\n .jp-frame .header-nav {\n padding-bottom: 10px;\n }\n .jp-frame .header-nav li {\n line-height: 30px;\n }\n .jp-frame .header-nav .jetpack-logo {\n width: 100%;\n text-align: center;\n }\n .jp-frame .header-nav .jetpack-modules {\n margin: 0;\n width: 50%;\n text-align: right;\n padding: 0 5px;\n }\n .jp-frame .header-nav .jetpack-modules + .jetpack-modules {\n text-align: left;\n }\n .jp-frame .header-nav .jetpack-modules:nth-child(4) {\n text-align: center;\n margin: 0 auto;\n width: 100%;\n }\n .jp-frame .header-nav .jetpack-modules:nth-child(4) a {\n padding: 0 10px;\n }\n}\n\n#ie-legacy-notice .dops-notice__content {\n display: inline-block;\n margin-left: 10px;\n}\n\n.page-content.configure {\n margin-top: 0;\n}\n\n.configure .frame.top {\n border: none;\n box-shadow: none;\n padding-top: 1.42857em;\n position: relative;\n top: auto;\n}\n\n.configure .frame.top.fixed {\n background: #f9f9f9;\n border-bottom: 1px solid #e9e9e9;\n padding-left: 160px;\n margin-top: -6px;\n position: fixed;\n right: 0;\n top: 32px;\n width: 100%;\n z-index: 4;\n box-shadow: 0 2px 2px -2px #eee;\n}\n\n@media (max-width: 782px) {\n .configure .frame.top.fixed {\n border: none;\n box-shadow: none;\n padding-top: 1.42857em;\n position: relative;\n top: auto;\n }\n}\n\n@media (max-width: 600px) {\n .configure .frame.top.fixed {\n top: 0;\n }\n}\n\n.jp-frame-top-fixed .configure {\n padding-top: 94px;\n}\n\n.filter-search {\n display: none;\n float: right;\n margin-top: 10px;\n}\n\n@media (max-width: 782px) {\n .filter-search {\n display: block;\n }\n}\n\n@media (max-width: 530px) {\n .filter-search {\n display: none;\n }\n}\n\n.table-bordered.jetpack-modules {\n border: none;\n margin-bottom: 0;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module th {\n border-left: 0;\n padding: 14px 4px 0;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module th input {\n display: block;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module:hover .genericon {\n display: inline-block;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module.active th,\n.table-bordered.jetpack-modules tr.jetpack-module.active td {\n background: #f7fcfe;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module.active th {\n border-left: 4px solid #2ea2cc;\n padding-left: 0px;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module.active td:first-child {\n border-left: 4px solid #2ea2cc;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module.unavailable input {\n display: none;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module.deprecated span {\n color: #888;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module.deprecated .dep-msg {\n margin-right: 10px;\n color: #555;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module th,\n.table-bordered.jetpack-modules tr.jetpack-module td {\n background: #fff;\n margin: 0;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1);\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module td {\n padding: 10px 10px 8px 14px;\n line-height: 25px;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module td:first-child {\n border-left: 4px solid #fff;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module td .row-actions {\n float: right;\n padding: 0 0 1px;\n visibility: visible;\n}\n\n.table-bordered.jetpack-modules tr.jetpack-module td .row-actions span {\n margin-left: 5px;\n}\n\n@media (max-width: 530px) {\n .table-bordered.jetpack-modules tr.jetpack-module td .row-actions {\n display: none;\n }\n}\n\n@media (max-width: 782px) {\n .table-bordered.jetpack-modules tr.jetpack-module td .row-actions {\n display: block;\n padding-left: 10px;\n visibility: visible;\n }\n}\n\n.table-bordered.jetpack-modules.with-transparency tr.jetpack-module:hover td .row-actions span a {\n opacity: 1;\n}\n\n.table-bordered.jetpack-modules.with-transparency tr.jetpack-module.unavailable {\n opacity: 0.3;\n}\n\n.table-bordered.jetpack-modules.with-transparency tr.jetpack-module td .row-actions span a {\n opacity: 0;\n}\n\n.table-bordered.jetpack-modules.with-transparency tr.jetpack-module td .row-actions span a:focus {\n opacity: 1;\n}\n\n.table-bordered.jetpack-modules > thead > tr > th {\n border: 0;\n vertical-align: middle;\n}\n\n.table-bordered.jetpack-modules > thead > tr > th:last-child {\n padding-right: 0;\n}\n\n@media (max-width: 782px) {\n .table-bordered.jetpack-modules > thead > tr > th:last-child {\n padding-left: 0;\n }\n}\n\n.table-bordered.jetpack-modules td {\n background: #fff;\n}\n\n.table-bordered.jetpack-modules #doaction {\n margin-top: 0;\n}\n\n@media (max-width: 782px) {\n .table-bordered.jetpack-modules #doaction {\n padding: 10px 7px;\n }\n}\n\n.table-bordered.jetpack-modules .checkall {\n margin-top: 1px;\n}\n\n.table-bordered.jetpack-modules .filter-search {\n margin-top: 8px;\n}\n\n.table-bordered.jetpack-modules .genericon {\n color: #999;\n display: none;\n margin: 7px 3px 0;\n}\n\n@media (max-width: 900px) {\n .table-bordered.jetpack-modules .genericon {\n display: inline-block;\n }\n}\n\n.table-bordered.jetpack-modules .med {\n width: 70px;\n}\n\n.table-bordered.jetpack-modules .sm {\n width: 30px;\n}\n\n@media (max-width: 782px) {\n .table-bordered.jetpack-modules .check-column {\n width: 50px;\n }\n}\n\n.fixed-top .check-column {\n padding: 8px 10px 0 10px;\n width: 2.2em;\n}\n\n.wrap {\n margin: 0;\n padding: 0 1.5em 1em;\n overflow: hidden;\n}\n\n.wrap h2 {\n font-size: 24px;\n font-weight: 400;\n}\n\n.wrap .manage-left {\n float: left;\n margin: 0;\n padding: 0;\n width: 63%;\n}\n\n.wrap .manage-left table {\n width: 100%;\n}\n\n.wrap .manage-left th {\n font-weight: 400;\n}\n\n@media (max-width: 782px) {\n .wrap .manage-left {\n width: 100%;\n }\n}\n\n.wrap .manage-right {\n margin: 0;\n padding: 0;\n float: right;\n width: 35%;\n z-index: 1;\n}\n\n.wrap .manage-right p {\n font-size: 12px;\n font-weight: bold;\n color: #bbb;\n padding-top: 2px;\n text-transform: uppercase;\n letter-spacing: 1px;\n clear: left;\n}\n\n.wrap .manage-right .bumper {\n margin-left: 33px;\n}\n\n.wrap .manage-right.show {\n display: block;\n overflow-y: auto;\n overflow-x: hidden;\n position: absolute;\n z-index: 100000;\n}\n\n.wrap .manage-right .search-bar {\n margin-bottom: 18px;\n max-width: 300px;\n}\n\n.wrap .manage-right p.search-box {\n float: none;\n height: auto;\n margin-bottom: 0;\n position: relative;\n}\n\n.wrap .manage-right p.search-box input[type='search'] {\n padding: 0 8px;\n width: 90%;\n line-height: initial;\n}\n\n@media (max-width: 782px) {\n .wrap .manage-right p.search-box input[type='search'] {\n float: left;\n padding: 9px 8px;\n }\n}\n\n.wrap .manage-right p.search-box input[type=\"submit\"] {\n display: none;\n}\n\n.wrap .manage-right .button-group .button {\n outline: none;\n}\n\n.wrap .manage-right .subsubsub {\n margin: 0;\n padding: 0;\n}\n\n.wrap .manage-right .subsubsub a {\n padding: 0;\n line-height: inherit;\n}\n\n.wrap .manage-right .subsubsub .current {\n padding: 1px 5px;\n border-radius: 2px;\n margin-left: -5px;\n background: #0D72B2;\n color: #fff;\n}\n\n.wrap .manage-right .subsubsub .current .count {\n color: #BCD7E7;\n font-weight: 200;\n}\n\n.wrap .manage-right .subsubsub li {\n display: block;\n text-align: left;\n}\n\n@media (max-width: 782px) {\n .wrap .manage-right {\n background: #fff;\n bottom: 0;\n display: none;\n min-width: 300px;\n position: fixed;\n right: 0;\n top: 0;\n z-index: 13;\n box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1);\n }\n .wrap .manage-right .bumper {\n margin: 13px;\n }\n .wrap .manage-right .navbar-form {\n margin: 0;\n padding: 0;\n }\n}\n\n@media (max-width: 782px) {\n .wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.column-primary):not(.check-column) {\n padding: 11px 10px;\n display: block;\n }\n .manage-right.show .subsubsub li {\n padding: 5px;\n }\n}\n\n@media (max-width: 650px) {\n .table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions {\n float: none;\n padding-left: 18px;\n }\n}\n\n@media (max-width: 430px) {\n .table-bordered.jetpack-modules tr.jetpack-module td .row-actions {\n display: none;\n }\n .table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions {\n display: block;\n }\n}\n\n/* 'Pages' is a temporary location for these styles, until we can break them up into their proper atmoic locations */\n.configure-module p {\n font-size: 14px;\n}\n\n.configure-module p.success, .configure-module p.error {\n color: #fff;\n padding: 10px;\n}\n\n.configure-module p.success {\n background-color: #81a844;\n}\n\n.configure-module p.error {\n background-color: #d94f4f;\n}\n\n.protect-status p {\n font-size: 16px;\n}\n\n.protect-status strong {\n display: inline-block;\n margin-top: 10px;\n background: #fff;\n padding: 10px;\n border: 1px #ddd solid;\n font-size: 16px;\n color: #000;\n max-width: 100%;\n}\n\n.protect-status.attn {\n color: #d94f4f;\n}\n\n.protect-status.working {\n color: #81a844;\n}\n\n.protect-whitelist textarea {\n width: 100%;\n min-height: 150px;\n}\n\n/* btns + inputs */\n.configure-module input[disabled] {\n opacity: .5;\n}\n\n.configure-module input.button-primary {\n font-weight: bold;\n}\n\n/* whitelist table */\n@media only screen and (min-width: 1100px) {\n .protect-whitelist {\n width: 65%;\n float: left;\n }\n}\n\n/* end > 1065px */\n@media only screen and (max-width: 400px) {\n .protect-status strong {\n font-size: 12px;\n overflow: auto;\n }\n}\n\n/* end < 400px */\n.manage__icon {\n width: 155px;\n height: 155px;\n margin: 20px auto;\n}\n\n.manage-page .manage__description {\n max-width: 600px;\n text-align: center;\n font-size: 22px;\n color: #999;\n margin: 20px auto;\n}\n\n.manage-page .manage__button {\n font-size: 16px;\n padding: 0 20px;\n height: 40px;\n line-height: 40px;\n}\n\n.manage__title .genericon {\n font-size: 38px;\n color: #81A944;\n}\n\n.manage__link {\n font-size: 16px;\n padding: 0 20px;\n height: 40px;\n line-height: 40px;\n font-weight: normal;\n}\n\n.manage__link .genericon {\n font-size: 28px;\n vertical-align: middle;\n margin-top: -6px;\n}\n\n.jp-content .hide {\n display: none;\n}\n\n.jp-content .landing {\n margin: 0 auto;\n z-index: 2;\n position: relative;\n}\n\n.jp-content h1 {\n font-weight: 400;\n line-height: 1.75em;\n position: relative;\n z-index: 3;\n width: 100%;\n text-align: center;\n}\n\n.jp-content h1.success {\n color: #81a844;\n}\n\n.jp-content .footer {\n padding-top: 0;\n margin-top: 0;\n background-image: none;\n}\n\n.jp-content .footer:before {\n height: inherit;\n}\n\n.jp-content .more-info:before {\n content: none;\n}\n\n.landing .wpcom-connect {\n min-height: 400px;\n}\n\n.wpcom-connect .j-col {\n padding: 0;\n}\n\n@media (max-width: 1147px) {\n .jp-content .landing {\n padding: 0 2em;\n }\n .jp-content .footer {\n padding-top: 1.5em;\n }\n}\n\n@media (max-width: 530px) {\n .jp-content .landing {\n padding: 0 .5em;\n }\n}\n"],"file":"jetpack-admin.css"} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-admin.css.min.map b/plugins/jetpack/css/jetpack-admin.css.min.map
deleted file mode 100644
index e69de29b..00000000
--- a/plugins/jetpack/css/jetpack-admin.css.min.map
+++ /dev/null
diff --git a/plugins/jetpack/css/jetpack-admin.min.css b/plugins/jetpack/css/jetpack-admin.min.css
deleted file mode 100644
index 01a06063..00000000
--- a/plugins/jetpack/css/jetpack-admin.min.css
+++ /dev/null
@@ -1,3 +0,0 @@
-/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/.j-row{width:100%;margin:0 auto}.j-row:after,.j-row:before{content:" ";display:table}.j-row:after{clear:both}.j-col{padding:.85em;width:100%;float:left;position:relative}@media only screen{.j-sm-5{width:41.66667%}.j-sm-7{width:58.33333%}.j-sm-12{width:100%}}@media (min-width:530px){.j-md-4{width:33.33333%}.j-md-6{width:50%}.j-md-8{width:66.66667%}.j-md-12{width:100%}}@media (min-width:782px){.j-lrg-4{width:33.33333%}.j-lrg-5{width:41.66667%}.j-lrg-6{width:50%}.j-lrg-7{width:58.33333%}.j-lrg-8{width:66.66667%}.j-lrg-12{width:100%}}@keyframes candy{0%{transform:scale(1)}20%{transform:scale(1.15)}60%{transform:scale(.95)}100%{transform:scale(1)}}.button,.download-jetpack{transition:all .1s ease-in-out}.jp-button,.jp-button--settings{display:inline-block;position:relative;padding:.76923em 1.46154em;color:#efefef;font-weight:700;font-size:.9285714286em;line-height:1;text-shadow:0 1px 1px rgba(0,0,0,.2);background:#6f7476;border-radius:3px}.jp-button--settings:visited,.jp-button:visited{color:#efefef}.jp-button--settings:focus,.jp-button--settings:hover,.jp-button:focus,.jp-button:hover{color:#fff;background:#57972d}.jp-button--settings:active,.jp-button:active{background:#57972d;opacity:.8}.jp-button--settings{background:#93b45f;color:#e8eedf}.jp-button--settings:visited{color:#e8eedf}.jp-button--settings:focus,.jp-button--settings:hover{background:#9fbd72;color:#fff}.jp-button--settings.current{background:#3c6621;color:#fff;box-shadow:inset 0 2px 0 #365a1f,inset 0 1px 3px #3c6621}.download-jetpack{display:inline-block;position:relative;padding:.64286em 1.08696em .53571em;color:#fff;font-weight:400;font-size:20px;line-height:1;background:#518d2a;z-index:3;border-radius:6px;box-shadow:0 6px 0 #3e6c20,0 6px 3px rgba(0,0,0,.4)}.download-jetpack:visited{color:#fff}.download-jetpack:focus,.download-jetpack:hover{color:#fff;background:#57972d;box-shadow:0 6px 0 #3e6c20,0 6px 3px rgba(0,0,0,.4)}.download-jetpack:active{top:6px;box-shadow:0 0 0 #3e6c20,0 0 0 rgba(0,0,0,.4)}.download-jetpack:active:after{top:-6px}.download-jetpack:before{content:'';display:inline-block;position:relative;top:-2px;margin-right:13px;width:30px;height:30px;vertical-align:middle;background:url(../images/connect-plug.svg) center center no-repeat;background-size:100%}.download-jetpack:after{content:'';position:absolute;top:0;left:0;width:100%;height:100%}@media (max-width:1147px){.download-jetpack{font-size:1.28571em}.download-jetpack:before{top:-1px;width:23px;height:23px}}@media (max-width:900px){.download-jetpack:active{top:0}}@media (max-width:530px){.download-jetpack{font-size:1.21429em;font-weight:600}.download-jetpack:before{width:19px;height:19px;margin-right:9px}}@font-face{font-family:automatticons;src:url(../_inc/fonts/automatticons/automatticons.eot);src:url(../_inc/fonts/automatticons/automatticons.eot?#iefix) format("embedded-opentype"),url(../_inc/fonts/automatticons/automatticons.woff) format("woff"),url(../_inc/fonts/automatticons/automatticons.ttf) format("truetype"),url(../_inc/fonts/automatticons/automatticons.svg#automatticonsregular) format("svg");font-weight:400;font-style:normal}.nav-horizontal:after{content:".";display:block;height:0;clear:both;visibility:hidden}.nav-horizontal a{display:inline-block}.nav-horizontal li{position:relative;float:left}.nav-horizontal ul{margin:0;padding:0}@media (max-width:782px){.configure .frame.top.fixed{padding-left:0}}.page-content,.wrap.inner{max-width:950px;margin:0 auto}.page-content li,.wrap.inner li{line-height:23px}@media (max-width:530px){.page-content{margin-top:0}}@media (max-width:1147px){.wrap.inner{background:#f9f9f9;padding:15px}}@media (max-width:530px){.wrap.inner{margin-top:1.71429em}}.page-content.about{position:relative;z-index:10}@media (max-width:1147px){.page-content.about{background:#f9f9f9;padding:15px}}@media (max-width:1147px){.page-content.configure{background:#f9f9f9}}.footer nav{max-width:550px;margin:0 auto}.header{left:0;right:0;background:#81a844}.header-nav li{line-height:60px}.header-nav a{padding:0 .71429em;line-height:24px}.header-nav .jetpack-logo a{display:inline-block;position:relative;width:214px;margin-right:6px;background:url(../images/jetpack-logo.png) center center no-repeat;background:url(../images/jetpack-logo.svg) center center no-repeat,none;background-size:183px auto;color:#fff;line-height:60px;font-weight:400}.header-nav .jetpack-logo a span{text-indent:-9999px;visibility:hidden}.header-nav .jetpack-logo a:before{content:'';position:absolute;top:0;left:0;width:100%;height:100%;background-size:183px 32px}.header-nav .jetpack-modules+.jetpack-modules{margin-left:15px}.main-nav{float:left}.main-nav li{margin:0}@media (max-width:900px){.main-nav{font-size:13px}}.jetpack-pagestyles #screen-meta{margin:0}.jetpack-pagestyles #screen-meta-links .screen-meta-toggle{z-index:2}.jetpack-pagestyles #contextual-help-link-wrap,.jetpack-pagestyles #screen-options-link-wrap{border:none}.jetpack-pagestyles .update-nag{display:none}.loading{bottom:50%;position:absolute;top:50%;width:100%}.loading span{color:#999}.modal{background:#fff;position:fixed;top:52px;bottom:20px;right:20px;left:20px;margin-left:160px;display:none;box-shadow:0 1px 20px 5px rgba(0,0,0,.1);z-index:500}.modal .close{position:absolute;top:0;right:0;font:300 1.71429em genericons!important;color:#777;content:'\f405';display:inline-block;padding:.28571em .71429em .42857em;z-index:5}.modal .close:hover{background:#eee;opacity:.8}.modal .close:active{background:#eee;opacity:.4}.modal .content-container{position:absolute;top:0;right:0;bottom:0;left:0;overflow:auto;padding:2.14286em}.modal .content{margin:0 auto;max-width:900px;text-align:left}.modal h2{text-align:left;margin-top:0;color:#5d6d74;font-weight:300;line-height:32px;text-shadow:0 1px 1px #fff}@media (max-width:530px){.modal h2{font-size:26px}}.modal h5{clear:left}.modal p{font-size:1.23077em}.modal footer{position:absolute;left:0;bottom:0;width:100%;padding:12px 20px;border-top:1px solid #ddd;background:#fff;text-align:right}.modal footer ul{margin:0}.modal footer li{display:inline-block;margin:0}.modal .button-primary:active,.modal .button-secondary{vertical-align:baseline}@media (max-width:900px){.modal{bottom:5%;margin-left:36px;font-size:80%}.modal .content{top:38px}}@media (max-width:782px){.modal{top:66px;margin-left:0}}@media (max-width:600px){.modal{top:10px;right:10px;bottom:10px;left:10px}}.jp-info-img{float:right;margin:0 0 8px 30px}.jp-info-img img{border:1px solid #ddd;max-width:100%;height:auto}.jp-info-img img:first-child{margin-top:0}@media (max-width:782px){.jp-info-img{float:none;margin:0 0 15px}}.content-container.modal-footer{bottom:53px}.shade{background:#000;bottom:0;cursor:pointer;display:none;left:0;opacity:.2;position:fixed;right:0;top:0;z-index:11}.footer{margin-top:1.42857em;position:relative;padding:10em 0 4.28571em;text-align:center}.footer:after,.footer:before{content:'';position:absolute;left:0;pointer-events:none}.footer:before{top:0;margin-top:-1px;width:100%;height:195px}.footer:after{display:none}.footer .download-jetpack{margin-bottom:33px}@media (min-width:1147px){.footer{padding-bottom:35px}}@media (max-width:1147px){.footer{padding-top:165px;padding-bottom:0}.footer:before{background-size:160% auto}.footer ul{float:none;overflow:hidden}}@media (max-width:900px){.footer{padding-top:146px}}@media (max-width:782px){.footer{margin-top:0}}@media (max-width:530px){.footer{margin-top:0;padding-top:135px}}@media (max-width:320px){.footer{padding-top:76px}}.footer nav{max-width:100%}.footer nav a,.footer nav a:visited{padding:4px 6px;color:#999}.footer nav a:focus,.footer nav a:hover,.footer nav a:visited:focus,.footer nav a:visited:hover{color:#81a844}@media (max-width:1147px){.footer nav a:focus,.footer nav a:hover,.footer nav a:visited:focus,.footer nav a:visited:hover{color:#81a844}}@media (max-width:530px){.footer nav li{display:block;float:none;margin:0;text-align:left}.footer nav a{display:block;padding:0 16px;line-height:44px}}.primary{padding:25px 15px 10px 15px;border-bottom:1px solid #eee}.secondary-footer{margin:0 auto}.secondary-footer li{margin-right:5px}@media (min-width:782px){.secondary-footer{padding:8px 15px 10px;margin-bottom:30px;border-bottom:1px solid #eee}}@media (min-width:1147px){.secondary-footer{margin-bottom:0}}@media (max-width:782px){.secondary-footer{padding:8px 15px 8px;border-bottom:none}}@media (max-width:530px){.secondary-footer{margin:0;padding:0;border:none;font-weight:400}.secondary-footer a{border-top:1px solid #eee}}.footer .a8c-attribution{margin:0;padding:0 6px;color:#bbb;font-size:.78571em;font-family:"Gill Sans","Gill Sans MT",Helvetica,Arial,sans-serif;text-transform:uppercase}.footer .a8c-attribution a{display:inline-block;position:relative;padding:4px 16px;right:9999px;outline:0}.footer .a8c-attribution a:after{content:'A';position:absolute;top:2px;right:-9999px;height:100%;color:#999;font-size:1.54545em;font-family:automatticons;text-align:center}.footer .a8c-attribution a:hover:after{animation:candy .4s ease-in-out}@media (min-width:782px){.secondary{padding:0 15px 10px 15px;border-bottom:1px solid #eee}}@media (min-width:1147px){.secondary{padding:0 15px 10px 15px;border-bottom:none}}.jetpack-message{background:#8eb74e;border:1px solid #73963d;margin:33px auto 0;max-width:90%;position:relative;z-index:2}.jetpack-message.is-opt-in{margin:50px 0 0;max-width:100%;padding:10px 15px;background:#fff;border:0;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);font-size:13px;text-align:center}.subhead .jetpack-message.is-opt-in{margin:0;padding-bottom:0;background:0 0;box-shadow:none}.subhead .jetpack-message.is-opt-in .jp-button,.subhead .jetpack-message.is-opt-in .jp-button--settings{display:inline-block}.jetpack-message.is-opt-in p{color:#3c4549}.jetpack-message.is-opt-in .jp-button,.jetpack-message.is-opt-in .jp-button--settings{margin-top:15px;display:none}.jetpack-message .squeezer h2{font-size:1em}.jetpack-message h2{color:#fff;margin:0}.jetpack-message p{color:#fff;margin:0;opacity:.7}.jetpack-message .squeezer{padding:23px 23px 23px 80px;position:relative;text-align:left}.jetpack-message .squeezer:before{color:#fff;content:'\f418';font-family:Genericons;font-size:33px;height:33px;left:25px;opacity:.6;position:absolute;top:23px;top:calc(50% - 22px)}@media (max-width:530px){.jetpack-message .squeezer{padding:23px}.jetpack-message .squeezer:before{display:none}}.jetpack-message .squeezer a{color:#fff;border-bottom:1px solid #d5e4bd}.jetpack-message .squeezer a:hover{border-bottom:1px solid #f1f6e9}.jetpack-message.error .squeezer:before,.jetpack-message.jetpack-err .squeezer:before{content:'\f414'}.configure-module .jetpack-message{max-width:100%}@media (max-width:530px){.wrap.inner.jp-support .jp-support-column-left{width:100%}.wrap.inner.jp-support .jp-support-column-left .widget-text{margin-right:0;width:100%}.wrap.inner.jp-support .jp-support-column-right{width:100%}}@media screen and (max-width:515px){.jp-frame .header-nav{padding-bottom:10px}.jp-frame .header-nav li{line-height:30px}.jp-frame .header-nav .jetpack-logo{width:100%;text-align:center}.jp-frame .header-nav .jetpack-modules{margin:0;width:50%;text-align:right;padding:0 5px}.jp-frame .header-nav .jetpack-modules+.jetpack-modules{text-align:left}.jp-frame .header-nav .jetpack-modules:nth-child(4){text-align:center;margin:0 auto;width:100%}.jp-frame .header-nav .jetpack-modules:nth-child(4) a{padding:0 10px}}#ie-legacy-notice .dops-notice__content{display:inline-block;margin-left:10px}.page-content.configure{margin-top:0}.configure .frame.top{border:none;box-shadow:none;padding-top:1.42857em;position:relative;top:auto}.configure .frame.top.fixed{background:#f9f9f9;border-bottom:1px solid #e9e9e9;padding-left:160px;margin-top:-6px;position:fixed;right:0;top:32px;width:100%;z-index:4;box-shadow:0 2px 2px -2px #eee}@media (max-width:782px){.configure .frame.top.fixed{border:none;box-shadow:none;padding-top:1.42857em;position:relative;top:auto}}@media (max-width:600px){.configure .frame.top.fixed{top:0}}.jp-frame-top-fixed .configure{padding-top:94px}.filter-search{display:none;float:right;margin-top:10px}@media (max-width:782px){.filter-search{display:block}}@media (max-width:530px){.filter-search{display:none}}.table-bordered.jetpack-modules{border:none;margin-bottom:0}.table-bordered.jetpack-modules tr.jetpack-module th{border-left:0;padding:14px 4px 0}.table-bordered.jetpack-modules tr.jetpack-module th input{display:block}.table-bordered.jetpack-modules tr.jetpack-module:hover .genericon{display:inline-block}.table-bordered.jetpack-modules tr.jetpack-module.active td,.table-bordered.jetpack-modules tr.jetpack-module.active th{background:#f7fcfe}.table-bordered.jetpack-modules tr.jetpack-module.active th{border-left:4px solid #2ea2cc;padding-left:0}.table-bordered.jetpack-modules tr.jetpack-module.active td:first-child{border-left:4px solid #2ea2cc}.table-bordered.jetpack-modules tr.jetpack-module.unavailable input{display:none}.table-bordered.jetpack-modules tr.jetpack-module.deprecated span{color:#888}.table-bordered.jetpack-modules tr.jetpack-module.deprecated .dep-msg{margin-right:10px;color:#555}.table-bordered.jetpack-modules tr.jetpack-module td,.table-bordered.jetpack-modules tr.jetpack-module th{background:#fff;margin:0;box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.table-bordered.jetpack-modules tr.jetpack-module td{padding:10px 10px 8px 14px;line-height:25px}.table-bordered.jetpack-modules tr.jetpack-module td:first-child{border-left:4px solid #fff}.table-bordered.jetpack-modules tr.jetpack-module td .row-actions{float:right;padding:0 0 1px;visibility:visible}.table-bordered.jetpack-modules tr.jetpack-module td .row-actions span{margin-left:5px}@media (max-width:530px){.table-bordered.jetpack-modules tr.jetpack-module td .row-actions{display:none}}@media (max-width:782px){.table-bordered.jetpack-modules tr.jetpack-module td .row-actions{display:block;padding-left:10px;visibility:visible}}.table-bordered.jetpack-modules.with-transparency tr.jetpack-module:hover td .row-actions span a{opacity:1}.table-bordered.jetpack-modules.with-transparency tr.jetpack-module.unavailable{opacity:.3}.table-bordered.jetpack-modules.with-transparency tr.jetpack-module td .row-actions span a{opacity:0}.table-bordered.jetpack-modules.with-transparency tr.jetpack-module td .row-actions span a:focus{opacity:1}.table-bordered.jetpack-modules>thead>tr>th{border:0;vertical-align:middle}.table-bordered.jetpack-modules>thead>tr>th:last-child{padding-right:0}@media (max-width:782px){.table-bordered.jetpack-modules>thead>tr>th:last-child{padding-left:0}}.table-bordered.jetpack-modules td{background:#fff}.table-bordered.jetpack-modules #doaction{margin-top:0}@media (max-width:782px){.table-bordered.jetpack-modules #doaction{padding:10px 7px}}.table-bordered.jetpack-modules .checkall{margin-top:1px}.table-bordered.jetpack-modules .filter-search{margin-top:8px}.table-bordered.jetpack-modules .genericon{color:#999;display:none;margin:7px 3px 0}@media (max-width:900px){.table-bordered.jetpack-modules .genericon{display:inline-block}}.table-bordered.jetpack-modules .med{width:70px}.table-bordered.jetpack-modules .sm{width:30px}@media (max-width:782px){.table-bordered.jetpack-modules .check-column{width:50px}}.fixed-top .check-column{padding:8px 10px 0 10px;width:2.2em}.wrap{margin:0;padding:0 1.5em 1em;overflow:hidden}.wrap h2{font-size:24px;font-weight:400}.wrap .manage-left{float:left;margin:0;padding:0;width:63%}.wrap .manage-left table{width:100%}.wrap .manage-left th{font-weight:400}@media (max-width:782px){.wrap .manage-left{width:100%}}.wrap .manage-right{margin:0;padding:0;float:right;width:35%;z-index:1}.wrap .manage-right p{font-size:12px;font-weight:700;color:#bbb;padding-top:2px;text-transform:uppercase;letter-spacing:1px;clear:left}.wrap .manage-right .bumper{margin-left:33px}.wrap .manage-right.show{display:block;overflow-y:auto;overflow-x:hidden;position:absolute;z-index:100000}.wrap .manage-right .search-bar{margin-bottom:18px;max-width:300px}.wrap .manage-right p.search-box{float:none;height:auto;margin-bottom:0;position:relative}.wrap .manage-right p.search-box input[type=search]{padding:0 8px;width:90%;line-height:initial}@media (max-width:782px){.wrap .manage-right p.search-box input[type=search]{float:left;padding:9px 8px}}.wrap .manage-right p.search-box input[type=submit]{display:none}.wrap .manage-right .button-group .button{outline:0}.wrap .manage-right .subsubsub{margin:0;padding:0}.wrap .manage-right .subsubsub a{padding:0;line-height:inherit}.wrap .manage-right .subsubsub .current{padding:1px 5px;border-radius:2px;margin-left:-5px;background:#0d72b2;color:#fff}.wrap .manage-right .subsubsub .current .count{color:#bcd7e7;font-weight:200}.wrap .manage-right .subsubsub li{display:block;text-align:left}@media (max-width:782px){.wrap .manage-right{background:#fff;bottom:0;display:none;min-width:300px;position:fixed;right:0;top:0;z-index:13;box-shadow:0 1px 20px 5px rgba(0,0,0,.1)}.wrap .manage-right .bumper{margin:13px}.wrap .manage-right .navbar-form{margin:0;padding:0}}@media (max-width:782px){.wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.column-primary):not(.check-column){padding:11px 10px;display:block}.manage-right.show .subsubsub li{padding:5px}}@media (max-width:650px){.table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions{float:none;padding-left:18px}}@media (max-width:430px){.table-bordered.jetpack-modules tr.jetpack-module td .row-actions{display:none}.table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions{display:block}}.configure-module p{font-size:14px}.configure-module p.error,.configure-module p.success{color:#fff;padding:10px}.configure-module p.success{background-color:#81a844}.configure-module p.error{background-color:#d94f4f}.protect-status p{font-size:16px}.protect-status strong{display:inline-block;margin-top:10px;background:#fff;padding:10px;border:1px #ddd solid;font-size:16px;color:#000;max-width:100%}.protect-status.attn{color:#d94f4f}.protect-status.working{color:#81a844}.protect-whitelist textarea{width:100%;min-height:150px}.configure-module input[disabled]{opacity:.5}.configure-module input.button-primary{font-weight:700}@media only screen and (min-width:1100px){.protect-whitelist{width:65%;float:left}}@media only screen and (max-width:400px){.protect-status strong{font-size:12px;overflow:auto}}.manage__icon{width:155px;height:155px;margin:20px auto}.manage-page .manage__description{max-width:600px;text-align:center;font-size:22px;color:#999;margin:20px auto}.manage-page .manage__button{font-size:16px;padding:0 20px;height:40px;line-height:40px}.manage__title .genericon{font-size:38px;color:#81a944}.manage__link{font-size:16px;padding:0 20px;height:40px;line-height:40px;font-weight:400}.manage__link .genericon{font-size:28px;vertical-align:middle;margin-top:-6px}.jp-content .hide{display:none}.jp-content .landing{margin:0 auto;z-index:2;position:relative}.jp-content h1{font-weight:400;line-height:1.75em;position:relative;z-index:3;width:100%;text-align:center}.jp-content h1.success{color:#81a844}.jp-content .footer{padding-top:0;margin-top:0;background-image:none}.jp-content .footer:before{height:inherit}.jp-content .more-info:before{content:none}.landing .wpcom-connect{min-height:400px}.wpcom-connect .j-col{padding:0}@media (max-width:1147px){.jp-content .landing{padding:0 2em}.jp-content .footer{padding-top:1.5em}}@media (max-width:530px){.jp-content .landing{padding:0 .5em}} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-banners-rtl.css b/plugins/jetpack/css/jetpack-banners-rtl.css
deleted file mode 100644
index e1ba139d..00000000
--- a/plugins/jetpack/css/jetpack-banners-rtl.css
+++ /dev/null
@@ -1,477 +0,0 @@
-/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/
-@charset "UTF-8";
-/*
-The MIT License (MIT)
-
-Copyright © 2011–2015 thoughtbot, inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
-documentation files (the “Software”), to deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
-persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial
-portions of the Software.
-
-THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-https://github.com/thoughtbot/bourbon
-*/
-.updated.jp-banner {
- position: relative;
- padding: 0;
-}
-
-.updated .jp-banner__header {
- font-size: 1.125rem;
- font-weight: 400;
- margin-top: 0;
-}
-
-.updated .jp-banner__button-container {
- padding: 2rem 0 0;
- flex-direction: row-reverse;
- align-items: center;
- justify-content: flex-end;
-}
-
-@media (min-width: 600px) {
- .updated .jp-banner__button-container {
- display: flex;
- }
-}
-
-.updated .jp-banner__tos-blurb {
- display: block;
- padding: 0.375rem 0;
- line-height: 1.5;
- font-size: 0.6875rem;
- color: #414141;
-}
-
-@media (min-width: 600px) {
- .updated .jp-banner__tos-blurb {
- margin-right: 1.125rem;
- }
-}
-
-.updated .jp-banner__tos-blurb a {
- color: inherit;
-}
-
-.jp-banner .notice-dismiss {
- text-decoration: none;
-}
-
-.jp-banner__description {
- font-size: 0.875rem;
-}
-
-.jp-banner__description-container {
- padding: 1rem;
-}
-
-.jetpack-disconnected .jp-connect-full__container {
- box-sizing: border-box;
- position: absolute;
- top: 0;
- left: 0;
- bottom: 1.25rem;
- right: 0;
- z-index: 999;
- background: #f1f1f1;
- text-align: center;
-}
-
-@media (max-width: 530px) {
- .jetpack-disconnected .jp-connect-full__container {
- top: 42px;
- }
-}
-
-@media (min-width: 782px) {
- .jetpack-disconnected .jp-connect-full__container {
- right: -20px;
- }
-}
-
-.jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card {
- padding: 4rem 4rem 6rem;
- background: white;
- margin: 1em;
-}
-
-.jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card img.jetpack-logo {
- width: 160px;
-}
-
-.jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card img.support-characters {
- margin-top: 1.5rem;
- width: 50%;
-}
-
-.jetpack-disconnected .jp-connect-full__container h4 {
- line-height: 1.25;
- font-size: 1.375rem;
- font-weight: normal;
- margin: 1em 0;
-}
-
-.jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container {
- position: relative;
- bottom: 0;
- box-shadow: 0 0 0 1px rgba(213, 213, 213, 0.5), 0 1px 2px #eeeeee;
- display: none;
-}
-
-.jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container .jp-connect-full__container-card {
- margin: 0;
-}
-
-@media (min-width: 782px) {
- .jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container {
- right: 0;
- }
-}
-
-@media (max-width: 782px) {
- .jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container {
- top: 46px;
- }
-}
-
-.jetpack-disconnected.toplevel_page_jetpack .jp-jetpack-connect__container .jp-connect-full__container {
- display: block;
-}
-
-.jp-connect-full__svg-dismiss {
- position: absolute;
- left: 0;
- top: 0;
- fill: #a2a2a2;
- padding: 1rem;
- height: 1.5rem;
- width: 1.5rem;
-}
-
-.jp-connect-full__step-header {
- max-width: 700px;
- margin: 0 auto;
- line-height: 1.5;
-}
-
-.jp-connect-full__step-header h2 {
- margin: 1.5rem 10% 0;
- font-size: 1.375rem;
- font-weight: bold;
- color: black;
-}
-
-@media (max-width: 530px) {
- .jp-connect-full__step-header h2 {
- margin: 1.5rem 0 0;
- }
-}
-
-.jp-connect-full__step-header h3 {
- color: #747474;
- font-size: 1rem;
- font-weight: normal;
- margin: 0.625rem 0 1.5rem;
-}
-
-.jp-connect-full__step-header.bottom {
- margin-top: 5rem;
-}
-
-.jp-connect-full__button-container {
- margin: 0;
-}
-
-.jp-connect-full__button-container .dops-button.is-primary {
- background: #00BE28;
- border-color: #00a523;
- padding-right: 1.5rem;
- padding-left: 1.5rem;
-}
-
-.jp-connect-full__button-container .dops-button.is-primary:hover, .jp-connect-full__button-container .dops-button.is-primary:focus {
- background: #00a523;
- border-color: #008b1d;
-}
-
-.jp-connect-full__tos-blurb {
- font-size: 0.6875rem;
- margin: 0 auto 1rem;
-}
-
-.jp-connect-full__dismiss {
- cursor: pointer;
-}
-
-.jp-connect-full__dismiss-paragraph {
- font-size: .6875rem;
-}
-
-.jp-connect-full__tos-blurb a,
-.jp-connect-full__dismiss-paragraph a {
- cursor: pointer;
- color: inherit;
- text-decoration: underline;
-}
-
-.jp-connect-full__row {
- display: flex;
- justify-content: space-evenly;
- text-align: right;
- align-items: baseline;
- margin: 0 auto;
- max-width: 1000px;
-}
-
-.jp-connect-full__slide {
- max-width: 35%;
- margin: 3rem 0;
-}
-
-@media (max-width: 782px) {
- .jp-connect-full__slide {
- margin: 1.875rem 0;
- }
-}
-
-.jp-connect-full__slide p {
- font-size: 0.875rem;
-}
-
-.jp-connect-full__slide .illustration {
- padding: 0.75rem;
-}
-
-@media (min-width: 600px) {
- .jp-connect-full__slide .illustration {
- margin-bottom: 2.625rem;
- }
-}
-
-.jp-connect-full__step-support {
- max-width: 700px;
- margin: 0 auto;
- line-height: 1.25;
-}
-
-.jp-connect-full__step-support h2 {
- margin: 1rem 0 0;
- font-size: 1.375rem;
- font-weight: normal;
- color: black;
-}
-
-.jp-connect-full__step-support h3 {
- color: #747474;
- font-size: 1rem;
- font-weight: normal;
- margin: 0.625rem 0 1.5rem;
-}
-
-@media screen and (max-width: 480px) {
- .jp-connect-full__row {
- display: block;
- }
- .jp-connect-full__slide {
- margin: 2em 0;
- max-width: 100%;
- }
- .jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card {
- padding: 3rem 2rem;
- }
-}
-
-.updated.jp-wpcom-connect__container {
- border-right: none;
- padding: 0;
- box-shadow: 0 0 0 1px rgba(200, 215, 225, 0.5), 0 1px 2px #e9eff3;
-}
-
-@media screen and (max-width: 782px) {
- .updated.jp-wpcom-connect__container {
- padding: 0 !important;
- }
-}
-
-.updated.jp-wpcom-connect__container .dops-button {
- padding: 7px 14px 9px;
-}
-
-.updated .notice-dismiss {
- z-index: 1;
- text-decoration: none;
-}
-
-.updated .notice-dismiss:before {
- color: white;
-}
-
-.jp-wpcom-connect__container-top-text {
- padding: 15px 15px 25px 35px;
- background-color: #00BE28;
- color: white;
- display: flex;
- align-items: baseline;
-}
-
-.jp-wpcom-connect__container-top-text svg {
- width: 24px;
- height: 24px;
- margin-left: 10px;
- position: relative;
- top: 7px;
-}
-
-@media (max-width: 530px) {
- .jp-wpcom-connect__container-top-text svg {
- flex: 1;
- }
-}
-
-.jp-wpcom-connect__container-top-text svg path {
- fill: #fff;
-}
-
-.jp-wpcom-connect__container-top-text span {
- display: inline-block;
-}
-
-@media (max-width: 530px) {
- .jp-wpcom-connect__container-top-text span {
- flex: 9;
- }
-}
-
-.jp-wpcom-connect__container {
- display: block;
- position: relative;
- box-sizing: border-box;
- background-color: #00BE28;
-}
-
-.jp-wpcom-connect__inner-container > a:first-child {
- z-index: 1;
-}
-
-.jp-wpcom-connect__inner-container {
- display: flex;
- flex-direction: row;
- flex-wrap: nowrap;
- justify-content: left;
- background: #fff;
-}
-
-.jp-wpcom-connect__content-container {
- width: 1250px;
- position: relative;
- padding: 2rem;
- z-index: 0;
-}
-
-.jp-wpcom-connect__content-container p {
- color: #6f6f6f;
- font-size: 0.875rem;
-}
-
-.jp-wpcom-connect__content-container h2 {
- margin-top: 0;
- line-height: 1.6;
- display: block;
- margin-bottom: 1.5rem;
-}
-
-@media (max-width: 530px) {
- .jp-wpcom-connect__hide-phone-and-smaller {
- display: none !important;
- }
-}
-
-.jp-wpcom-connect__content-icon {
- margin: 0 1.5rem;
- display: flex;
- flex-direction: column;
-}
-
-.jp-connect-illo img {
- display: block;
- margin: 0 auto;
-}
-
-.jp-connect-illo img.jetpack-logo {
- margin-bottom: 2.25rem;
-}
-
-@media (max-width: 530px) {
- .jp-connect-illo img.jetpack-logo {
- margin-right: 0;
- }
-}
-
-@media (max-width: 782px) {
- .jp-connect-illo {
- width: 100%;
- margin: 0.5rem 0;
- display: block;
- }
-}
-
-@media (min-width: 900px) {
- .jp-wpcom-connect__slide-text {
- padding-right: 2.8125rem;
- }
-}
-
-.jp-wpcom-connect__slide {
- display: none;
-}
-
-.jp-wpcom-connect__slide.jp__slide-is-active {
- display: flex;
- align-items: flex-start;
-}
-
-@media (max-width: 782px) {
- .jp-wpcom-connect__slide.jp__slide-is-active {
- display: block;
- }
-}
-
-.jp-wpcom-connect__slide ul {
- list-style: disc;
- padding: 0 0.9375rem 0 0;
-}
-
-.jp-wpcom-connect__slide ul li {
- color: #6f6f6f;
- font-size: 0.75rem;
-}
-
-.jp-banner__button-container .dops-button {
- margin: 0.3125rem 0;
-}
-
-.jp-banner__button-container .dops-button.is-primary {
- background: #00BE28;
- border-color: #00a523;
- padding-right: 1.5rem;
- padding-left: 1.5rem;
- flex-shrink: 0;
-}
-
-.jp-banner__button-container .dops-button.is-primary:hover, .jp-banner__button-container .dops-button.is-primary:focus {
- background: #00a523;
- border-color: #008b1d;
-}
-
-/*# sourceMappingURL=jetpack-banners-rtl.css.map */
diff --git a/plugins/jetpack/css/jetpack-banners-rtl.css.map b/plugins/jetpack/css/jetpack-banners-rtl.css.map
deleted file mode 100644
index 06bbd426..00000000
--- a/plugins/jetpack/css/jetpack-banners-rtl.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"names":[],"mappings":"","sources":["jetpack-banners-rtl.css"],"sourcesContent":["/*!\n* Do not modify this file directly. It is compiled SASS code.\n*/\n@charset \"UTF-8\";\n/*\nThe MIT License (MIT)\n\nCopyright © 2011–2015 thoughtbot, inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\ndocumentation files (the “Software”), to deal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit\npersons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial\nportions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nhttps://github.com/thoughtbot/bourbon\n*/\n.updated.jp-banner {\n position: relative;\n padding: 0;\n}\n\n.updated .jp-banner__header {\n font-size: 1.125rem;\n font-weight: 400;\n margin-top: 0;\n}\n\n.updated .jp-banner__button-container {\n padding: 2rem 0 0;\n flex-direction: row-reverse;\n align-items: center;\n justify-content: flex-end;\n}\n\n@media (min-width: 600px) {\n .updated .jp-banner__button-container {\n display: flex;\n }\n}\n\n.updated .jp-banner__tos-blurb {\n display: block;\n padding: 0.375rem 0;\n line-height: 1.5;\n font-size: 0.6875rem;\n color: #414141;\n}\n\n@media (min-width: 600px) {\n .updated .jp-banner__tos-blurb {\n margin-right: 1.125rem;\n }\n}\n\n.updated .jp-banner__tos-blurb a {\n color: inherit;\n}\n\n.jp-banner .notice-dismiss {\n text-decoration: none;\n}\n\n.jp-banner__description {\n font-size: 0.875rem;\n}\n\n.jp-banner__description-container {\n padding: 1rem;\n}\n\n.jetpack-disconnected .jp-connect-full__container {\n box-sizing: border-box;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 1.25rem;\n right: 0;\n z-index: 999;\n background: #f1f1f1;\n text-align: center;\n}\n\n@media (max-width: 530px) {\n .jetpack-disconnected .jp-connect-full__container {\n top: 42px;\n }\n}\n\n@media (min-width: 782px) {\n .jetpack-disconnected .jp-connect-full__container {\n right: -20px;\n }\n}\n\n.jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card {\n padding: 4rem 4rem 6rem;\n background: white;\n margin: 1em;\n}\n\n.jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card img.jetpack-logo {\n width: 160px;\n}\n\n.jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card img.support-characters {\n margin-top: 1.5rem;\n width: 50%;\n}\n\n.jetpack-disconnected .jp-connect-full__container h4 {\n line-height: 1.25;\n font-size: 1.375rem;\n font-weight: normal;\n margin: 1em 0;\n}\n\n.jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container {\n position: relative;\n bottom: 0;\n box-shadow: 0 0 0 1px rgba(213, 213, 213, 0.5), 0 1px 2px #eeeeee;\n display: none;\n}\n\n.jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container .jp-connect-full__container-card {\n margin: 0;\n}\n\n@media (min-width: 782px) {\n .jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container {\n right: 0;\n }\n}\n\n@media (max-width: 782px) {\n .jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container {\n top: 46px;\n }\n}\n\n.jetpack-disconnected.toplevel_page_jetpack .jp-jetpack-connect__container .jp-connect-full__container {\n display: block;\n}\n\n.jp-connect-full__svg-dismiss {\n position: absolute;\n left: 0;\n top: 0;\n fill: #a2a2a2;\n padding: 1rem;\n height: 1.5rem;\n width: 1.5rem;\n}\n\n.jp-connect-full__step-header {\n max-width: 700px;\n margin: 0 auto;\n line-height: 1.5;\n}\n\n.jp-connect-full__step-header h2 {\n margin: 1.5rem 10% 0;\n font-size: 1.375rem;\n font-weight: bold;\n color: black;\n}\n\n@media (max-width: 530px) {\n .jp-connect-full__step-header h2 {\n margin: 1.5rem 0 0;\n }\n}\n\n.jp-connect-full__step-header h3 {\n color: #747474;\n font-size: 1rem;\n font-weight: normal;\n margin: 0.625rem 0 1.5rem;\n}\n\n.jp-connect-full__step-header.bottom {\n margin-top: 5rem;\n}\n\n.jp-connect-full__button-container {\n margin: 0;\n}\n\n.jp-connect-full__button-container .dops-button.is-primary {\n background: #00BE28;\n border-color: #00a523;\n padding-right: 1.5rem;\n padding-left: 1.5rem;\n}\n\n.jp-connect-full__button-container .dops-button.is-primary:hover, .jp-connect-full__button-container .dops-button.is-primary:focus {\n background: #00a523;\n border-color: #008b1d;\n}\n\n.jp-connect-full__tos-blurb {\n font-size: 0.6875rem;\n margin: 0 auto 1rem;\n}\n\n.jp-connect-full__dismiss {\n cursor: pointer;\n}\n\n.jp-connect-full__dismiss-paragraph {\n font-size: .6875rem;\n}\n\n.jp-connect-full__tos-blurb a,\n.jp-connect-full__dismiss-paragraph a {\n cursor: pointer;\n color: inherit;\n text-decoration: underline;\n}\n\n.jp-connect-full__row {\n display: flex;\n justify-content: space-evenly;\n text-align: right;\n align-items: baseline;\n margin: 0 auto;\n max-width: 1000px;\n}\n\n.jp-connect-full__slide {\n max-width: 35%;\n margin: 3rem 0;\n}\n\n@media (max-width: 782px) {\n .jp-connect-full__slide {\n margin: 1.875rem 0;\n }\n}\n\n.jp-connect-full__slide p {\n font-size: 0.875rem;\n}\n\n.jp-connect-full__slide .illustration {\n padding: 0.75rem;\n}\n\n@media (min-width: 600px) {\n .jp-connect-full__slide .illustration {\n margin-bottom: 2.625rem;\n }\n}\n\n.jp-connect-full__step-support {\n max-width: 700px;\n margin: 0 auto;\n line-height: 1.25;\n}\n\n.jp-connect-full__step-support h2 {\n margin: 1rem 0 0;\n font-size: 1.375rem;\n font-weight: normal;\n color: black;\n}\n\n.jp-connect-full__step-support h3 {\n color: #747474;\n font-size: 1rem;\n font-weight: normal;\n margin: 0.625rem 0 1.5rem;\n}\n\n@media screen and (max-width: 480px) {\n .jp-connect-full__row {\n display: block;\n }\n .jp-connect-full__slide {\n margin: 2em 0;\n max-width: 100%;\n }\n .jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card {\n padding: 3rem 2rem;\n }\n}\n\n.updated.jp-wpcom-connect__container {\n border-right: none;\n padding: 0;\n box-shadow: 0 0 0 1px rgba(200, 215, 225, 0.5), 0 1px 2px #e9eff3;\n}\n\n@media screen and (max-width: 782px) {\n .updated.jp-wpcom-connect__container {\n padding: 0 !important;\n }\n}\n\n.updated.jp-wpcom-connect__container .dops-button {\n padding: 7px 14px 9px;\n}\n\n.updated .notice-dismiss {\n z-index: 1;\n text-decoration: none;\n}\n\n.updated .notice-dismiss:before {\n color: white;\n}\n\n.jp-wpcom-connect__container-top-text {\n padding: 15px 15px 25px 35px;\n background-color: #00BE28;\n color: white;\n display: flex;\n align-items: baseline;\n}\n\n.jp-wpcom-connect__container-top-text svg {\n width: 24px;\n height: 24px;\n margin-left: 10px;\n position: relative;\n top: 7px;\n}\n\n@media (max-width: 530px) {\n .jp-wpcom-connect__container-top-text svg {\n flex: 1;\n }\n}\n\n.jp-wpcom-connect__container-top-text svg path {\n fill: #fff;\n}\n\n.jp-wpcom-connect__container-top-text span {\n display: inline-block;\n}\n\n@media (max-width: 530px) {\n .jp-wpcom-connect__container-top-text span {\n flex: 9;\n }\n}\n\n.jp-wpcom-connect__container {\n display: block;\n position: relative;\n box-sizing: border-box;\n background-color: #00BE28;\n}\n\n.jp-wpcom-connect__inner-container > a:first-child {\n z-index: 1;\n}\n\n.jp-wpcom-connect__inner-container {\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: left;\n background: #fff;\n}\n\n.jp-wpcom-connect__content-container {\n width: 1250px;\n position: relative;\n padding: 2rem;\n z-index: 0;\n}\n\n.jp-wpcom-connect__content-container p {\n color: #6f6f6f;\n font-size: 0.875rem;\n}\n\n.jp-wpcom-connect__content-container h2 {\n margin-top: 0;\n line-height: 1.6;\n display: block;\n margin-bottom: 1.5rem;\n}\n\n@media (max-width: 530px) {\n .jp-wpcom-connect__hide-phone-and-smaller {\n display: none !important;\n }\n}\n\n.jp-wpcom-connect__content-icon {\n margin: 0 1.5rem;\n display: flex;\n flex-direction: column;\n}\n\n.jp-connect-illo img {\n display: block;\n margin: 0 auto;\n}\n\n.jp-connect-illo img.jetpack-logo {\n margin-bottom: 2.25rem;\n}\n\n@media (max-width: 530px) {\n .jp-connect-illo img.jetpack-logo {\n margin-right: 0;\n }\n}\n\n@media (max-width: 782px) {\n .jp-connect-illo {\n width: 100%;\n margin: 0.5rem 0;\n display: block;\n }\n}\n\n@media (min-width: 900px) {\n .jp-wpcom-connect__slide-text {\n padding-right: 2.8125rem;\n }\n}\n\n.jp-wpcom-connect__slide {\n display: none;\n}\n\n.jp-wpcom-connect__slide.jp__slide-is-active {\n display: flex;\n align-items: flex-start;\n}\n\n@media (max-width: 782px) {\n .jp-wpcom-connect__slide.jp__slide-is-active {\n display: block;\n }\n}\n\n.jp-wpcom-connect__slide ul {\n list-style: disc;\n padding: 0 0.9375rem 0 0;\n}\n\n.jp-wpcom-connect__slide ul li {\n color: #6f6f6f;\n font-size: 0.75rem;\n}\n\n.jp-banner__button-container .dops-button {\n margin: 0.3125rem 0;\n}\n\n.jp-banner__button-container .dops-button.is-primary {\n background: #00BE28;\n border-color: #00a523;\n padding-right: 1.5rem;\n padding-left: 1.5rem;\n flex-shrink: 0;\n}\n\n.jp-banner__button-container .dops-button.is-primary:hover, .jp-banner__button-container .dops-button.is-primary:focus {\n background: #00a523;\n border-color: #008b1d;\n}\n"],"file":"jetpack-banners-rtl.css"} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-banners-rtl.css.min.map b/plugins/jetpack/css/jetpack-banners-rtl.css.min.map
deleted file mode 100644
index e69de29b..00000000
--- a/plugins/jetpack/css/jetpack-banners-rtl.css.min.map
+++ /dev/null
diff --git a/plugins/jetpack/css/jetpack-banners-rtl.min.css b/plugins/jetpack/css/jetpack-banners-rtl.min.css
deleted file mode 100644
index 8d167a2d..00000000
--- a/plugins/jetpack/css/jetpack-banners-rtl.min.css
+++ /dev/null
@@ -1,3 +0,0 @@
-@charset "UTF-8";/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/.updated.jp-banner{position:relative;padding:0}.updated .jp-banner__header{font-size:1.125rem;font-weight:400;margin-top:0}.updated .jp-banner__button-container{padding:2rem 0 0;flex-direction:row-reverse;align-items:center;justify-content:flex-end}@media (min-width:600px){.updated .jp-banner__button-container{display:flex}}.updated .jp-banner__tos-blurb{display:block;padding:.375rem 0;line-height:1.5;font-size:.6875rem;color:#414141}@media (min-width:600px){.updated .jp-banner__tos-blurb{margin-right:1.125rem}}.updated .jp-banner__tos-blurb a{color:inherit}.jp-banner .notice-dismiss{text-decoration:none}.jp-banner__description{font-size:.875rem}.jp-banner__description-container{padding:1rem}.jetpack-disconnected .jp-connect-full__container{box-sizing:border-box;position:absolute;top:0;left:0;bottom:1.25rem;right:0;z-index:999;background:#f1f1f1;text-align:center}@media (max-width:530px){.jetpack-disconnected .jp-connect-full__container{top:42px}}@media (min-width:782px){.jetpack-disconnected .jp-connect-full__container{right:-20px}}.jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card{padding:4rem 4rem 6rem;background:#fff;margin:1em}.jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card img.jetpack-logo{width:160px}.jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card img.support-characters{margin-top:1.5rem;width:50%}.jetpack-disconnected .jp-connect-full__container h4{line-height:1.25;font-size:1.375rem;font-weight:400;margin:1em 0}.jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container{position:relative;bottom:0;box-shadow:0 0 0 1px rgba(213,213,213,.5),0 1px 2px #eee;display:none}.jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container .jp-connect-full__container-card{margin:0}@media (min-width:782px){.jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container{right:0}}@media (max-width:782px){.jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container{top:46px}}.jetpack-disconnected.toplevel_page_jetpack .jp-jetpack-connect__container .jp-connect-full__container{display:block}.jp-connect-full__svg-dismiss{position:absolute;left:0;top:0;fill:#a2a2a2;padding:1rem;height:1.5rem;width:1.5rem}.jp-connect-full__step-header{max-width:700px;margin:0 auto;line-height:1.5}.jp-connect-full__step-header h2{margin:1.5rem 10% 0;font-size:1.375rem;font-weight:700;color:#000}@media (max-width:530px){.jp-connect-full__step-header h2{margin:1.5rem 0 0}}.jp-connect-full__step-header h3{color:#747474;font-size:1rem;font-weight:400;margin:.625rem 0 1.5rem}.jp-connect-full__step-header.bottom{margin-top:5rem}.jp-connect-full__button-container{margin:0}.jp-connect-full__button-container .dops-button.is-primary{background:#00be28;border-color:#00a523;padding-right:1.5rem;padding-left:1.5rem}.jp-connect-full__button-container .dops-button.is-primary:focus,.jp-connect-full__button-container .dops-button.is-primary:hover{background:#00a523;border-color:#008b1d}.jp-connect-full__tos-blurb{font-size:.6875rem;margin:0 auto 1rem}.jp-connect-full__dismiss{cursor:pointer}.jp-connect-full__dismiss-paragraph{font-size:.6875rem}.jp-connect-full__dismiss-paragraph a,.jp-connect-full__tos-blurb a{cursor:pointer;color:inherit;text-decoration:underline}.jp-connect-full__row{display:flex;justify-content:space-evenly;text-align:right;align-items:baseline;margin:0 auto;max-width:1000px}.jp-connect-full__slide{max-width:35%;margin:3rem 0}@media (max-width:782px){.jp-connect-full__slide{margin:1.875rem 0}}.jp-connect-full__slide p{font-size:.875rem}.jp-connect-full__slide .illustration{padding:.75rem}@media (min-width:600px){.jp-connect-full__slide .illustration{margin-bottom:2.625rem}}.jp-connect-full__step-support{max-width:700px;margin:0 auto;line-height:1.25}.jp-connect-full__step-support h2{margin:1rem 0 0;font-size:1.375rem;font-weight:400;color:#000}.jp-connect-full__step-support h3{color:#747474;font-size:1rem;font-weight:400;margin:.625rem 0 1.5rem}@media screen and (max-width:480px){.jp-connect-full__row{display:block}.jp-connect-full__slide{margin:2em 0;max-width:100%}.jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card{padding:3rem 2rem}}.updated.jp-wpcom-connect__container{border-right:none;padding:0;box-shadow:0 0 0 1px rgba(200,215,225,.5),0 1px 2px #e9eff3}@media screen and (max-width:782px){.updated.jp-wpcom-connect__container{padding:0!important}}.updated.jp-wpcom-connect__container .dops-button{padding:7px 14px 9px}.updated .notice-dismiss{z-index:1;text-decoration:none}.updated .notice-dismiss:before{color:#fff}.jp-wpcom-connect__container-top-text{padding:15px 15px 25px 35px;background-color:#00be28;color:#fff;display:flex;align-items:baseline}.jp-wpcom-connect__container-top-text svg{width:24px;height:24px;margin-left:10px;position:relative;top:7px}@media (max-width:530px){.jp-wpcom-connect__container-top-text svg{flex:1}}.jp-wpcom-connect__container-top-text svg path{fill:#fff}.jp-wpcom-connect__container-top-text span{display:inline-block}@media (max-width:530px){.jp-wpcom-connect__container-top-text span{flex:9}}.jp-wpcom-connect__container{display:block;position:relative;box-sizing:border-box;background-color:#00be28}.jp-wpcom-connect__inner-container>a:first-child{z-index:1}.jp-wpcom-connect__inner-container{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:left;background:#fff}.jp-wpcom-connect__content-container{width:1250px;position:relative;padding:2rem;z-index:0}.jp-wpcom-connect__content-container p{color:#6f6f6f;font-size:.875rem}.jp-wpcom-connect__content-container h2{margin-top:0;line-height:1.6;display:block;margin-bottom:1.5rem}@media (max-width:530px){.jp-wpcom-connect__hide-phone-and-smaller{display:none!important}}.jp-wpcom-connect__content-icon{margin:0 1.5rem;display:flex;flex-direction:column}.jp-connect-illo img{display:block;margin:0 auto}.jp-connect-illo img.jetpack-logo{margin-bottom:2.25rem}@media (max-width:530px){.jp-connect-illo img.jetpack-logo{margin-right:0}}@media (max-width:782px){.jp-connect-illo{width:100%;margin:.5rem 0;display:block}}@media (min-width:900px){.jp-wpcom-connect__slide-text{padding-right:2.8125rem}}.jp-wpcom-connect__slide{display:none}.jp-wpcom-connect__slide.jp__slide-is-active{display:flex;align-items:flex-start}@media (max-width:782px){.jp-wpcom-connect__slide.jp__slide-is-active{display:block}}.jp-wpcom-connect__slide ul{list-style:disc;padding:0 .9375rem 0 0}.jp-wpcom-connect__slide ul li{color:#6f6f6f;font-size:.75rem}.jp-banner__button-container .dops-button{margin:.3125rem 0}.jp-banner__button-container .dops-button.is-primary{background:#00be28;border-color:#00a523;padding-right:1.5rem;padding-left:1.5rem;flex-shrink:0}.jp-banner__button-container .dops-button.is-primary:focus,.jp-banner__button-container .dops-button.is-primary:hover{background:#00a523;border-color:#008b1d} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-banners.css b/plugins/jetpack/css/jetpack-banners.css
deleted file mode 100644
index d335ef9b..00000000
--- a/plugins/jetpack/css/jetpack-banners.css
+++ /dev/null
@@ -1,477 +0,0 @@
-/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/
-@charset "UTF-8";
-/*
-The MIT License (MIT)
-
-Copyright © 2011–2015 thoughtbot, inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
-documentation files (the “Software”), to deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
-persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial
-portions of the Software.
-
-THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-https://github.com/thoughtbot/bourbon
-*/
-.updated.jp-banner {
- position: relative;
- padding: 0;
-}
-
-.updated .jp-banner__header {
- font-size: 1.125rem;
- font-weight: 400;
- margin-top: 0;
-}
-
-.updated .jp-banner__button-container {
- padding: 2rem 0 0;
- flex-direction: row-reverse;
- align-items: center;
- justify-content: flex-end;
-}
-
-@media (min-width: 600px) {
- .updated .jp-banner__button-container {
- display: flex;
- }
-}
-
-.updated .jp-banner__tos-blurb {
- display: block;
- padding: 0.375rem 0;
- line-height: 1.5;
- font-size: 0.6875rem;
- color: #414141;
-}
-
-@media (min-width: 600px) {
- .updated .jp-banner__tos-blurb {
- margin-left: 1.125rem;
- }
-}
-
-.updated .jp-banner__tos-blurb a {
- color: inherit;
-}
-
-.jp-banner .notice-dismiss {
- text-decoration: none;
-}
-
-.jp-banner__description {
- font-size: 0.875rem;
-}
-
-.jp-banner__description-container {
- padding: 1rem;
-}
-
-.jetpack-disconnected .jp-connect-full__container {
- box-sizing: border-box;
- position: absolute;
- top: 0;
- right: 0;
- bottom: 1.25rem;
- left: 0;
- z-index: 999;
- background: #f1f1f1;
- text-align: center;
-}
-
-@media (max-width: 530px) {
- .jetpack-disconnected .jp-connect-full__container {
- top: 42px;
- }
-}
-
-@media (min-width: 782px) {
- .jetpack-disconnected .jp-connect-full__container {
- left: -20px;
- }
-}
-
-.jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card {
- padding: 4rem 4rem 6rem;
- background: white;
- margin: 1em;
-}
-
-.jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card img.jetpack-logo {
- width: 160px;
-}
-
-.jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card img.support-characters {
- margin-top: 1.5rem;
- width: 50%;
-}
-
-.jetpack-disconnected .jp-connect-full__container h4 {
- line-height: 1.25;
- font-size: 1.375rem;
- font-weight: normal;
- margin: 1em 0;
-}
-
-.jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container {
- position: relative;
- bottom: 0;
- box-shadow: 0 0 0 1px rgba(213, 213, 213, 0.5), 0 1px 2px #eeeeee;
- display: none;
-}
-
-.jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container .jp-connect-full__container-card {
- margin: 0;
-}
-
-@media (min-width: 782px) {
- .jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container {
- left: 0;
- }
-}
-
-@media (max-width: 782px) {
- .jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container {
- top: 46px;
- }
-}
-
-.jetpack-disconnected.toplevel_page_jetpack .jp-jetpack-connect__container .jp-connect-full__container {
- display: block;
-}
-
-.jp-connect-full__svg-dismiss {
- position: absolute;
- right: 0;
- top: 0;
- fill: #a2a2a2;
- padding: 1rem;
- height: 1.5rem;
- width: 1.5rem;
-}
-
-.jp-connect-full__step-header {
- max-width: 700px;
- margin: 0 auto;
- line-height: 1.5;
-}
-
-.jp-connect-full__step-header h2 {
- margin: 1.5rem 10% 0;
- font-size: 1.375rem;
- font-weight: bold;
- color: black;
-}
-
-@media (max-width: 530px) {
- .jp-connect-full__step-header h2 {
- margin: 1.5rem 0 0;
- }
-}
-
-.jp-connect-full__step-header h3 {
- color: #747474;
- font-size: 1rem;
- font-weight: normal;
- margin: 0.625rem 0 1.5rem;
-}
-
-.jp-connect-full__step-header.bottom {
- margin-top: 5rem;
-}
-
-.jp-connect-full__button-container {
- margin: 0;
-}
-
-.jp-connect-full__button-container .dops-button.is-primary {
- background: #00BE28;
- border-color: #00a523;
- padding-left: 1.5rem;
- padding-right: 1.5rem;
-}
-
-.jp-connect-full__button-container .dops-button.is-primary:hover, .jp-connect-full__button-container .dops-button.is-primary:focus {
- background: #00a523;
- border-color: #008b1d;
-}
-
-.jp-connect-full__tos-blurb {
- font-size: 0.6875rem;
- margin: 0 auto 1rem;
-}
-
-.jp-connect-full__dismiss {
- cursor: pointer;
-}
-
-.jp-connect-full__dismiss-paragraph {
- font-size: .6875rem;
-}
-
-.jp-connect-full__tos-blurb a,
-.jp-connect-full__dismiss-paragraph a {
- cursor: pointer;
- color: inherit;
- text-decoration: underline;
-}
-
-.jp-connect-full__row {
- display: flex;
- justify-content: space-evenly;
- text-align: left;
- align-items: baseline;
- margin: 0 auto;
- max-width: 1000px;
-}
-
-.jp-connect-full__slide {
- max-width: 35%;
- margin: 3rem 0;
-}
-
-@media (max-width: 782px) {
- .jp-connect-full__slide {
- margin: 1.875rem 0;
- }
-}
-
-.jp-connect-full__slide p {
- font-size: 0.875rem;
-}
-
-.jp-connect-full__slide .illustration {
- padding: 0.75rem;
-}
-
-@media (min-width: 600px) {
- .jp-connect-full__slide .illustration {
- margin-bottom: 2.625rem;
- }
-}
-
-.jp-connect-full__step-support {
- max-width: 700px;
- margin: 0 auto;
- line-height: 1.25;
-}
-
-.jp-connect-full__step-support h2 {
- margin: 1rem 0 0;
- font-size: 1.375rem;
- font-weight: normal;
- color: black;
-}
-
-.jp-connect-full__step-support h3 {
- color: #747474;
- font-size: 1rem;
- font-weight: normal;
- margin: 0.625rem 0 1.5rem;
-}
-
-@media screen and (max-width: 480px) {
- .jp-connect-full__row {
- display: block;
- }
- .jp-connect-full__slide {
- margin: 2em 0;
- max-width: 100%;
- }
- .jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card {
- padding: 3rem 2rem;
- }
-}
-
-.updated.jp-wpcom-connect__container {
- border-left: none;
- padding: 0;
- box-shadow: 0 0 0 1px rgba(200, 215, 225, 0.5), 0 1px 2px #e9eff3;
-}
-
-@media screen and (max-width: 782px) {
- .updated.jp-wpcom-connect__container {
- padding: 0 !important;
- }
-}
-
-.updated.jp-wpcom-connect__container .dops-button {
- padding: 7px 14px 9px;
-}
-
-.updated .notice-dismiss {
- z-index: 1;
- text-decoration: none;
-}
-
-.updated .notice-dismiss:before {
- color: white;
-}
-
-.jp-wpcom-connect__container-top-text {
- padding: 15px 35px 25px 15px;
- background-color: #00BE28;
- color: white;
- display: flex;
- align-items: baseline;
-}
-
-.jp-wpcom-connect__container-top-text svg {
- width: 24px;
- height: 24px;
- margin-right: 10px;
- position: relative;
- top: 7px;
-}
-
-@media (max-width: 530px) {
- .jp-wpcom-connect__container-top-text svg {
- flex: 1;
- }
-}
-
-.jp-wpcom-connect__container-top-text svg path {
- fill: #fff;
-}
-
-.jp-wpcom-connect__container-top-text span {
- display: inline-block;
-}
-
-@media (max-width: 530px) {
- .jp-wpcom-connect__container-top-text span {
- flex: 9;
- }
-}
-
-.jp-wpcom-connect__container {
- display: block;
- position: relative;
- box-sizing: border-box;
- background-color: #00BE28;
-}
-
-.jp-wpcom-connect__inner-container > a:first-child {
- z-index: 1;
-}
-
-.jp-wpcom-connect__inner-container {
- display: flex;
- flex-direction: row;
- flex-wrap: nowrap;
- justify-content: left;
- background: #fff;
-}
-
-.jp-wpcom-connect__content-container {
- width: 1250px;
- position: relative;
- padding: 2rem;
- z-index: 0;
-}
-
-.jp-wpcom-connect__content-container p {
- color: #6f6f6f;
- font-size: 0.875rem;
-}
-
-.jp-wpcom-connect__content-container h2 {
- margin-top: 0;
- line-height: 1.6;
- display: block;
- margin-bottom: 1.5rem;
-}
-
-@media (max-width: 530px) {
- .jp-wpcom-connect__hide-phone-and-smaller {
- display: none !important;
- }
-}
-
-.jp-wpcom-connect__content-icon {
- margin: 0 1.5rem;
- display: flex;
- flex-direction: column;
-}
-
-.jp-connect-illo img {
- display: block;
- margin: 0 auto;
-}
-
-.jp-connect-illo img.jetpack-logo {
- margin-bottom: 2.25rem;
-}
-
-@media (max-width: 530px) {
- .jp-connect-illo img.jetpack-logo {
- margin-left: 0;
- }
-}
-
-@media (max-width: 782px) {
- .jp-connect-illo {
- width: 100%;
- margin: 0.5rem 0;
- display: block;
- }
-}
-
-@media (min-width: 900px) {
- .jp-wpcom-connect__slide-text {
- padding-left: 2.8125rem;
- }
-}
-
-.jp-wpcom-connect__slide {
- display: none;
-}
-
-.jp-wpcom-connect__slide.jp__slide-is-active {
- display: flex;
- align-items: flex-start;
-}
-
-@media (max-width: 782px) {
- .jp-wpcom-connect__slide.jp__slide-is-active {
- display: block;
- }
-}
-
-.jp-wpcom-connect__slide ul {
- list-style: disc;
- padding: 0 0 0 0.9375rem;
-}
-
-.jp-wpcom-connect__slide ul li {
- color: #6f6f6f;
- font-size: 0.75rem;
-}
-
-.jp-banner__button-container .dops-button {
- margin: 0.3125rem 0;
-}
-
-.jp-banner__button-container .dops-button.is-primary {
- background: #00BE28;
- border-color: #00a523;
- padding-left: 1.5rem;
- padding-right: 1.5rem;
- flex-shrink: 0;
-}
-
-.jp-banner__button-container .dops-button.is-primary:hover, .jp-banner__button-container .dops-button.is-primary:focus {
- background: #00a523;
- border-color: #008b1d;
-}
-
-/*# sourceMappingURL=jetpack-banners.css.map */
diff --git a/plugins/jetpack/css/jetpack-banners.css.map b/plugins/jetpack/css/jetpack-banners.css.map
deleted file mode 100644
index 6119ada9..00000000
--- a/plugins/jetpack/css/jetpack-banners.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"names":[],"mappings":"","sources":["jetpack-banners.css"],"sourcesContent":["/*!\n* Do not modify this file directly. It is compiled SASS code.\n*/\n@charset \"UTF-8\";\n/*\nThe MIT License (MIT)\n\nCopyright © 2011–2015 thoughtbot, inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\ndocumentation files (the “Software”), to deal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit\npersons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial\nportions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nhttps://github.com/thoughtbot/bourbon\n*/\n.updated.jp-banner {\n position: relative;\n padding: 0;\n}\n\n.updated .jp-banner__header {\n font-size: 1.125rem;\n font-weight: 400;\n margin-top: 0;\n}\n\n.updated .jp-banner__button-container {\n padding: 2rem 0 0;\n flex-direction: row-reverse;\n align-items: center;\n justify-content: flex-end;\n}\n\n@media (min-width: 600px) {\n .updated .jp-banner__button-container {\n display: flex;\n }\n}\n\n.updated .jp-banner__tos-blurb {\n display: block;\n padding: 0.375rem 0;\n line-height: 1.5;\n font-size: 0.6875rem;\n color: #414141;\n}\n\n@media (min-width: 600px) {\n .updated .jp-banner__tos-blurb {\n margin-left: 1.125rem;\n }\n}\n\n.updated .jp-banner__tos-blurb a {\n color: inherit;\n}\n\n.jp-banner .notice-dismiss {\n text-decoration: none;\n}\n\n.jp-banner__description {\n font-size: 0.875rem;\n}\n\n.jp-banner__description-container {\n padding: 1rem;\n}\n\n.jetpack-disconnected .jp-connect-full__container {\n box-sizing: border-box;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 1.25rem;\n left: 0;\n z-index: 999;\n background: #f1f1f1;\n text-align: center;\n}\n\n@media (max-width: 530px) {\n .jetpack-disconnected .jp-connect-full__container {\n top: 42px;\n }\n}\n\n@media (min-width: 782px) {\n .jetpack-disconnected .jp-connect-full__container {\n left: -20px;\n }\n}\n\n.jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card {\n padding: 4rem 4rem 6rem;\n background: white;\n margin: 1em;\n}\n\n.jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card img.jetpack-logo {\n width: 160px;\n}\n\n.jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card img.support-characters {\n margin-top: 1.5rem;\n width: 50%;\n}\n\n.jetpack-disconnected .jp-connect-full__container h4 {\n line-height: 1.25;\n font-size: 1.375rem;\n font-weight: normal;\n margin: 1em 0;\n}\n\n.jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container {\n position: relative;\n bottom: 0;\n box-shadow: 0 0 0 1px rgba(213, 213, 213, 0.5), 0 1px 2px #eeeeee;\n display: none;\n}\n\n.jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container .jp-connect-full__container-card {\n margin: 0;\n}\n\n@media (min-width: 782px) {\n .jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container {\n left: 0;\n }\n}\n\n@media (max-width: 782px) {\n .jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container {\n top: 46px;\n }\n}\n\n.jetpack-disconnected.toplevel_page_jetpack .jp-jetpack-connect__container .jp-connect-full__container {\n display: block;\n}\n\n.jp-connect-full__svg-dismiss {\n position: absolute;\n right: 0;\n top: 0;\n fill: #a2a2a2;\n padding: 1rem;\n height: 1.5rem;\n width: 1.5rem;\n}\n\n.jp-connect-full__step-header {\n max-width: 700px;\n margin: 0 auto;\n line-height: 1.5;\n}\n\n.jp-connect-full__step-header h2 {\n margin: 1.5rem 10% 0;\n font-size: 1.375rem;\n font-weight: bold;\n color: black;\n}\n\n@media (max-width: 530px) {\n .jp-connect-full__step-header h2 {\n margin: 1.5rem 0 0;\n }\n}\n\n.jp-connect-full__step-header h3 {\n color: #747474;\n font-size: 1rem;\n font-weight: normal;\n margin: 0.625rem 0 1.5rem;\n}\n\n.jp-connect-full__step-header.bottom {\n margin-top: 5rem;\n}\n\n.jp-connect-full__button-container {\n margin: 0;\n}\n\n.jp-connect-full__button-container .dops-button.is-primary {\n background: #00BE28;\n border-color: #00a523;\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n\n.jp-connect-full__button-container .dops-button.is-primary:hover, .jp-connect-full__button-container .dops-button.is-primary:focus {\n background: #00a523;\n border-color: #008b1d;\n}\n\n.jp-connect-full__tos-blurb {\n font-size: 0.6875rem;\n margin: 0 auto 1rem;\n}\n\n.jp-connect-full__dismiss {\n cursor: pointer;\n}\n\n.jp-connect-full__dismiss-paragraph {\n font-size: .6875rem;\n}\n\n.jp-connect-full__tos-blurb a,\n.jp-connect-full__dismiss-paragraph a {\n cursor: pointer;\n color: inherit;\n text-decoration: underline;\n}\n\n.jp-connect-full__row {\n display: flex;\n justify-content: space-evenly;\n text-align: left;\n align-items: baseline;\n margin: 0 auto;\n max-width: 1000px;\n}\n\n.jp-connect-full__slide {\n max-width: 35%;\n margin: 3rem 0;\n}\n\n@media (max-width: 782px) {\n .jp-connect-full__slide {\n margin: 1.875rem 0;\n }\n}\n\n.jp-connect-full__slide p {\n font-size: 0.875rem;\n}\n\n.jp-connect-full__slide .illustration {\n padding: 0.75rem;\n}\n\n@media (min-width: 600px) {\n .jp-connect-full__slide .illustration {\n margin-bottom: 2.625rem;\n }\n}\n\n.jp-connect-full__step-support {\n max-width: 700px;\n margin: 0 auto;\n line-height: 1.25;\n}\n\n.jp-connect-full__step-support h2 {\n margin: 1rem 0 0;\n font-size: 1.375rem;\n font-weight: normal;\n color: black;\n}\n\n.jp-connect-full__step-support h3 {\n color: #747474;\n font-size: 1rem;\n font-weight: normal;\n margin: 0.625rem 0 1.5rem;\n}\n\n@media screen and (max-width: 480px) {\n .jp-connect-full__row {\n display: block;\n }\n .jp-connect-full__slide {\n margin: 2em 0;\n max-width: 100%;\n }\n .jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card {\n padding: 3rem 2rem;\n }\n}\n\n.updated.jp-wpcom-connect__container {\n border-left: none;\n padding: 0;\n box-shadow: 0 0 0 1px rgba(200, 215, 225, 0.5), 0 1px 2px #e9eff3;\n}\n\n@media screen and (max-width: 782px) {\n .updated.jp-wpcom-connect__container {\n padding: 0 !important;\n }\n}\n\n.updated.jp-wpcom-connect__container .dops-button {\n padding: 7px 14px 9px;\n}\n\n.updated .notice-dismiss {\n z-index: 1;\n text-decoration: none;\n}\n\n.updated .notice-dismiss:before {\n color: white;\n}\n\n.jp-wpcom-connect__container-top-text {\n padding: 15px 35px 25px 15px;\n background-color: #00BE28;\n color: white;\n display: flex;\n align-items: baseline;\n}\n\n.jp-wpcom-connect__container-top-text svg {\n width: 24px;\n height: 24px;\n margin-right: 10px;\n position: relative;\n top: 7px;\n}\n\n@media (max-width: 530px) {\n .jp-wpcom-connect__container-top-text svg {\n flex: 1;\n }\n}\n\n.jp-wpcom-connect__container-top-text svg path {\n fill: #fff;\n}\n\n.jp-wpcom-connect__container-top-text span {\n display: inline-block;\n}\n\n@media (max-width: 530px) {\n .jp-wpcom-connect__container-top-text span {\n flex: 9;\n }\n}\n\n.jp-wpcom-connect__container {\n display: block;\n position: relative;\n box-sizing: border-box;\n background-color: #00BE28;\n}\n\n.jp-wpcom-connect__inner-container > a:first-child {\n z-index: 1;\n}\n\n.jp-wpcom-connect__inner-container {\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: left;\n background: #fff;\n}\n\n.jp-wpcom-connect__content-container {\n width: 1250px;\n position: relative;\n padding: 2rem;\n z-index: 0;\n}\n\n.jp-wpcom-connect__content-container p {\n color: #6f6f6f;\n font-size: 0.875rem;\n}\n\n.jp-wpcom-connect__content-container h2 {\n margin-top: 0;\n line-height: 1.6;\n display: block;\n margin-bottom: 1.5rem;\n}\n\n@media (max-width: 530px) {\n .jp-wpcom-connect__hide-phone-and-smaller {\n display: none !important;\n }\n}\n\n.jp-wpcom-connect__content-icon {\n margin: 0 1.5rem;\n display: flex;\n flex-direction: column;\n}\n\n.jp-connect-illo img {\n display: block;\n margin: 0 auto;\n}\n\n.jp-connect-illo img.jetpack-logo {\n margin-bottom: 2.25rem;\n}\n\n@media (max-width: 530px) {\n .jp-connect-illo img.jetpack-logo {\n margin-left: 0;\n }\n}\n\n@media (max-width: 782px) {\n .jp-connect-illo {\n width: 100%;\n margin: 0.5rem 0;\n display: block;\n }\n}\n\n@media (min-width: 900px) {\n .jp-wpcom-connect__slide-text {\n padding-left: 2.8125rem;\n }\n}\n\n.jp-wpcom-connect__slide {\n display: none;\n}\n\n.jp-wpcom-connect__slide.jp__slide-is-active {\n display: flex;\n align-items: flex-start;\n}\n\n@media (max-width: 782px) {\n .jp-wpcom-connect__slide.jp__slide-is-active {\n display: block;\n }\n}\n\n.jp-wpcom-connect__slide ul {\n list-style: disc;\n padding: 0 0 0 0.9375rem;\n}\n\n.jp-wpcom-connect__slide ul li {\n color: #6f6f6f;\n font-size: 0.75rem;\n}\n\n.jp-banner__button-container .dops-button {\n margin: 0.3125rem 0;\n}\n\n.jp-banner__button-container .dops-button.is-primary {\n background: #00BE28;\n border-color: #00a523;\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n flex-shrink: 0;\n}\n\n.jp-banner__button-container .dops-button.is-primary:hover, .jp-banner__button-container .dops-button.is-primary:focus {\n background: #00a523;\n border-color: #008b1d;\n}\n"],"file":"jetpack-banners.css"} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-banners.css.min.map b/plugins/jetpack/css/jetpack-banners.css.min.map
deleted file mode 100644
index e69de29b..00000000
--- a/plugins/jetpack/css/jetpack-banners.css.min.map
+++ /dev/null
diff --git a/plugins/jetpack/css/jetpack-banners.min.css b/plugins/jetpack/css/jetpack-banners.min.css
deleted file mode 100644
index 791a647b..00000000
--- a/plugins/jetpack/css/jetpack-banners.min.css
+++ /dev/null
@@ -1,3 +0,0 @@
-@charset "UTF-8";/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/.updated.jp-banner{position:relative;padding:0}.updated .jp-banner__header{font-size:1.125rem;font-weight:400;margin-top:0}.updated .jp-banner__button-container{padding:2rem 0 0;flex-direction:row-reverse;align-items:center;justify-content:flex-end}@media (min-width:600px){.updated .jp-banner__button-container{display:flex}}.updated .jp-banner__tos-blurb{display:block;padding:.375rem 0;line-height:1.5;font-size:.6875rem;color:#414141}@media (min-width:600px){.updated .jp-banner__tos-blurb{margin-left:1.125rem}}.updated .jp-banner__tos-blurb a{color:inherit}.jp-banner .notice-dismiss{text-decoration:none}.jp-banner__description{font-size:.875rem}.jp-banner__description-container{padding:1rem}.jetpack-disconnected .jp-connect-full__container{box-sizing:border-box;position:absolute;top:0;right:0;bottom:1.25rem;left:0;z-index:999;background:#f1f1f1;text-align:center}@media (max-width:530px){.jetpack-disconnected .jp-connect-full__container{top:42px}}@media (min-width:782px){.jetpack-disconnected .jp-connect-full__container{left:-20px}}.jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card{padding:4rem 4rem 6rem;background:#fff;margin:1em}.jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card img.jetpack-logo{width:160px}.jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card img.support-characters{margin-top:1.5rem;width:50%}.jetpack-disconnected .jp-connect-full__container h4{line-height:1.25;font-size:1.375rem;font-weight:400;margin:1em 0}.jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container{position:relative;bottom:0;box-shadow:0 0 0 1px rgba(213,213,213,.5),0 1px 2px #eee;display:none}.jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container .jp-connect-full__container-card{margin:0}@media (min-width:782px){.jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container{left:0}}@media (max-width:782px){.jetpack-disconnected.toplevel_page_jetpack .jp-connect-full__container{top:46px}}.jetpack-disconnected.toplevel_page_jetpack .jp-jetpack-connect__container .jp-connect-full__container{display:block}.jp-connect-full__svg-dismiss{position:absolute;right:0;top:0;fill:#a2a2a2;padding:1rem;height:1.5rem;width:1.5rem}.jp-connect-full__step-header{max-width:700px;margin:0 auto;line-height:1.5}.jp-connect-full__step-header h2{margin:1.5rem 10% 0;font-size:1.375rem;font-weight:700;color:#000}@media (max-width:530px){.jp-connect-full__step-header h2{margin:1.5rem 0 0}}.jp-connect-full__step-header h3{color:#747474;font-size:1rem;font-weight:400;margin:.625rem 0 1.5rem}.jp-connect-full__step-header.bottom{margin-top:5rem}.jp-connect-full__button-container{margin:0}.jp-connect-full__button-container .dops-button.is-primary{background:#00be28;border-color:#00a523;padding-left:1.5rem;padding-right:1.5rem}.jp-connect-full__button-container .dops-button.is-primary:focus,.jp-connect-full__button-container .dops-button.is-primary:hover{background:#00a523;border-color:#008b1d}.jp-connect-full__tos-blurb{font-size:.6875rem;margin:0 auto 1rem}.jp-connect-full__dismiss{cursor:pointer}.jp-connect-full__dismiss-paragraph{font-size:.6875rem}.jp-connect-full__dismiss-paragraph a,.jp-connect-full__tos-blurb a{cursor:pointer;color:inherit;text-decoration:underline}.jp-connect-full__row{display:flex;justify-content:space-evenly;text-align:left;align-items:baseline;margin:0 auto;max-width:1000px}.jp-connect-full__slide{max-width:35%;margin:3rem 0}@media (max-width:782px){.jp-connect-full__slide{margin:1.875rem 0}}.jp-connect-full__slide p{font-size:.875rem}.jp-connect-full__slide .illustration{padding:.75rem}@media (min-width:600px){.jp-connect-full__slide .illustration{margin-bottom:2.625rem}}.jp-connect-full__step-support{max-width:700px;margin:0 auto;line-height:1.25}.jp-connect-full__step-support h2{margin:1rem 0 0;font-size:1.375rem;font-weight:400;color:#000}.jp-connect-full__step-support h3{color:#747474;font-size:1rem;font-weight:400;margin:.625rem 0 1.5rem}@media screen and (max-width:480px){.jp-connect-full__row{display:block}.jp-connect-full__slide{margin:2em 0;max-width:100%}.jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card{padding:3rem 2rem}}.updated.jp-wpcom-connect__container{border-left:none;padding:0;box-shadow:0 0 0 1px rgba(200,215,225,.5),0 1px 2px #e9eff3}@media screen and (max-width:782px){.updated.jp-wpcom-connect__container{padding:0!important}}.updated.jp-wpcom-connect__container .dops-button{padding:7px 14px 9px}.updated .notice-dismiss{z-index:1;text-decoration:none}.updated .notice-dismiss:before{color:#fff}.jp-wpcom-connect__container-top-text{padding:15px 35px 25px 15px;background-color:#00be28;color:#fff;display:flex;align-items:baseline}.jp-wpcom-connect__container-top-text svg{width:24px;height:24px;margin-right:10px;position:relative;top:7px}@media (max-width:530px){.jp-wpcom-connect__container-top-text svg{flex:1}}.jp-wpcom-connect__container-top-text svg path{fill:#fff}.jp-wpcom-connect__container-top-text span{display:inline-block}@media (max-width:530px){.jp-wpcom-connect__container-top-text span{flex:9}}.jp-wpcom-connect__container{display:block;position:relative;box-sizing:border-box;background-color:#00be28}.jp-wpcom-connect__inner-container>a:first-child{z-index:1}.jp-wpcom-connect__inner-container{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:left;background:#fff}.jp-wpcom-connect__content-container{width:1250px;position:relative;padding:2rem;z-index:0}.jp-wpcom-connect__content-container p{color:#6f6f6f;font-size:.875rem}.jp-wpcom-connect__content-container h2{margin-top:0;line-height:1.6;display:block;margin-bottom:1.5rem}@media (max-width:530px){.jp-wpcom-connect__hide-phone-and-smaller{display:none!important}}.jp-wpcom-connect__content-icon{margin:0 1.5rem;display:flex;flex-direction:column}.jp-connect-illo img{display:block;margin:0 auto}.jp-connect-illo img.jetpack-logo{margin-bottom:2.25rem}@media (max-width:530px){.jp-connect-illo img.jetpack-logo{margin-left:0}}@media (max-width:782px){.jp-connect-illo{width:100%;margin:.5rem 0;display:block}}@media (min-width:900px){.jp-wpcom-connect__slide-text{padding-left:2.8125rem}}.jp-wpcom-connect__slide{display:none}.jp-wpcom-connect__slide.jp__slide-is-active{display:flex;align-items:flex-start}@media (max-width:782px){.jp-wpcom-connect__slide.jp__slide-is-active{display:block}}.jp-wpcom-connect__slide ul{list-style:disc;padding:0 0 0 .9375rem}.jp-wpcom-connect__slide ul li{color:#6f6f6f;font-size:.75rem}.jp-banner__button-container .dops-button{margin:.3125rem 0}.jp-banner__button-container .dops-button.is-primary{background:#00be28;border-color:#00a523;padding-left:1.5rem;padding-right:1.5rem;flex-shrink:0}.jp-banner__button-container .dops-button.is-primary:focus,.jp-banner__button-container .dops-button.is-primary:hover{background:#00a523;border-color:#008b1d} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-icons-rtl.css b/plugins/jetpack/css/jetpack-icons-rtl.css
deleted file mode 100644
index 6286b54a..00000000
--- a/plugins/jetpack/css/jetpack-icons-rtl.css
+++ /dev/null
@@ -1,24 +0,0 @@
-/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/
-@font-face {
- font-family: "jetpack";
- src: url("../_inc/fonts/jetpack/jetpack.eot");
- src: url("../_inc/fonts/jetpack/jetpack.eot?#iefix") format("embedded-opentype"), url("../_inc/fonts/jetpack/jetpack.woff") format("woff"), url("../_inc/fonts/jetpack/jetpack.ttf") format("truetype"), url("../_inc/fonts/jetpack/jetpack.svg#jetpack") format("svg");
- font-weight: normal;
- font-style: normal;
-}
-
-@media screen and (-webkit-min-device-pixel-ratio: 0) {
- @font-face {
- font-family: "jetpack";
- src: url("../_inc/fonts/jetpack/jetpack.svg#jetpack") format("svg");
- }
-}
-
-li.toplevel_page_jetpack .wp-menu-image:before {
- font-family: 'jetpack' !important;
- content: '\f100';
-}
-
-/*# sourceMappingURL=jetpack-icons-rtl.css.map */
diff --git a/plugins/jetpack/css/jetpack-icons-rtl.css.map b/plugins/jetpack/css/jetpack-icons-rtl.css.map
deleted file mode 100644
index b24d001b..00000000
--- a/plugins/jetpack/css/jetpack-icons-rtl.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"names":[],"mappings":"","sources":["jetpack-icons-rtl.css"],"sourcesContent":["/*!\n* Do not modify this file directly. It is compiled SASS code.\n*/\n@font-face {\n font-family: \"jetpack\";\n src: url(\"../_inc/fonts/jetpack/jetpack.eot\");\n src: url(\"../_inc/fonts/jetpack/jetpack.eot?#iefix\") format(\"embedded-opentype\"), url(\"../_inc/fonts/jetpack/jetpack.woff\") format(\"woff\"), url(\"../_inc/fonts/jetpack/jetpack.ttf\") format(\"truetype\"), url(\"../_inc/fonts/jetpack/jetpack.svg#jetpack\") format(\"svg\");\n font-weight: normal;\n font-style: normal;\n}\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n @font-face {\n font-family: \"jetpack\";\n src: url(\"../_inc/fonts/jetpack/jetpack.svg#jetpack\") format(\"svg\");\n }\n}\n\nli.toplevel_page_jetpack .wp-menu-image:before {\n font-family: 'jetpack' !important;\n content: '\\f100';\n}\n"],"file":"jetpack-icons-rtl.css"} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-icons-rtl.css.min.map b/plugins/jetpack/css/jetpack-icons-rtl.css.min.map
deleted file mode 100644
index e69de29b..00000000
--- a/plugins/jetpack/css/jetpack-icons-rtl.css.min.map
+++ /dev/null
diff --git a/plugins/jetpack/css/jetpack-icons-rtl.min.css b/plugins/jetpack/css/jetpack-icons-rtl.min.css
deleted file mode 100644
index 631977a4..00000000
--- a/plugins/jetpack/css/jetpack-icons-rtl.min.css
+++ /dev/null
@@ -1,3 +0,0 @@
-/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/@font-face{font-family:jetpack;src:url(../_inc/fonts/jetpack/jetpack.eot);src:url(../_inc/fonts/jetpack/jetpack.eot?#iefix) format("embedded-opentype"),url(../_inc/fonts/jetpack/jetpack.woff) format("woff"),url(../_inc/fonts/jetpack/jetpack.ttf) format("truetype"),url(../_inc/fonts/jetpack/jetpack.svg#jetpack) format("svg");font-weight:400;font-style:normal}@media screen and (-webkit-min-device-pixel-ratio:0){@font-face{font-family:jetpack;src:url(../_inc/fonts/jetpack/jetpack.svg#jetpack) format("svg")}}li.toplevel_page_jetpack .wp-menu-image:before{font-family:jetpack!important;content:'\f100'} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-icons.css b/plugins/jetpack/css/jetpack-icons.css
deleted file mode 100644
index 16605acd..00000000
--- a/plugins/jetpack/css/jetpack-icons.css
+++ /dev/null
@@ -1,24 +0,0 @@
-/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/
-@font-face {
- font-family: "jetpack";
- src: url("../_inc/fonts/jetpack/jetpack.eot");
- src: url("../_inc/fonts/jetpack/jetpack.eot?#iefix") format("embedded-opentype"), url("../_inc/fonts/jetpack/jetpack.woff") format("woff"), url("../_inc/fonts/jetpack/jetpack.ttf") format("truetype"), url("../_inc/fonts/jetpack/jetpack.svg#jetpack") format("svg");
- font-weight: normal;
- font-style: normal;
-}
-
-@media screen and (-webkit-min-device-pixel-ratio: 0) {
- @font-face {
- font-family: "jetpack";
- src: url("../_inc/fonts/jetpack/jetpack.svg#jetpack") format("svg");
- }
-}
-
-li.toplevel_page_jetpack .wp-menu-image:before {
- font-family: 'jetpack' !important;
- content: '\f100';
-}
-
-/*# sourceMappingURL=jetpack-icons.css.map */
diff --git a/plugins/jetpack/css/jetpack-icons.css.map b/plugins/jetpack/css/jetpack-icons.css.map
deleted file mode 100644
index 6351e46c..00000000
--- a/plugins/jetpack/css/jetpack-icons.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"names":[],"mappings":"","sources":["jetpack-icons.css"],"sourcesContent":["/*!\n* Do not modify this file directly. It is compiled SASS code.\n*/\n@font-face {\n font-family: \"jetpack\";\n src: url(\"../_inc/fonts/jetpack/jetpack.eot\");\n src: url(\"../_inc/fonts/jetpack/jetpack.eot?#iefix\") format(\"embedded-opentype\"), url(\"../_inc/fonts/jetpack/jetpack.woff\") format(\"woff\"), url(\"../_inc/fonts/jetpack/jetpack.ttf\") format(\"truetype\"), url(\"../_inc/fonts/jetpack/jetpack.svg#jetpack\") format(\"svg\");\n font-weight: normal;\n font-style: normal;\n}\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n @font-face {\n font-family: \"jetpack\";\n src: url(\"../_inc/fonts/jetpack/jetpack.svg#jetpack\") format(\"svg\");\n }\n}\n\nli.toplevel_page_jetpack .wp-menu-image:before {\n font-family: 'jetpack' !important;\n content: '\\f100';\n}\n"],"file":"jetpack-icons.css"} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-icons.css.min.map b/plugins/jetpack/css/jetpack-icons.css.min.map
deleted file mode 100644
index e69de29b..00000000
--- a/plugins/jetpack/css/jetpack-icons.css.min.map
+++ /dev/null
diff --git a/plugins/jetpack/css/jetpack-icons.min.css b/plugins/jetpack/css/jetpack-icons.min.css
deleted file mode 100644
index 631977a4..00000000
--- a/plugins/jetpack/css/jetpack-icons.min.css
+++ /dev/null
@@ -1,3 +0,0 @@
-/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/@font-face{font-family:jetpack;src:url(../_inc/fonts/jetpack/jetpack.eot);src:url(../_inc/fonts/jetpack/jetpack.eot?#iefix) format("embedded-opentype"),url(../_inc/fonts/jetpack/jetpack.woff) format("woff"),url(../_inc/fonts/jetpack/jetpack.ttf) format("truetype"),url(../_inc/fonts/jetpack/jetpack.svg#jetpack) format("svg");font-weight:400;font-style:normal}@media screen and (-webkit-min-device-pixel-ratio:0){@font-face{font-family:jetpack;src:url(../_inc/fonts/jetpack/jetpack.svg#jetpack) format("svg")}}li.toplevel_page_jetpack .wp-menu-image:before{font-family:jetpack!important;content:'\f100'} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-idc-admin-bar-rtl.css b/plugins/jetpack/css/jetpack-idc-admin-bar-rtl.css
deleted file mode 100644
index cdfbe282..00000000
--- a/plugins/jetpack/css/jetpack-idc-admin-bar-rtl.css
+++ /dev/null
@@ -1,33 +0,0 @@
-/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/
-#wp-admin-bar-jetpack-idc.hide {
- display: none;
-}
-
-#wp-admin-bar-jetpack-idc .jp-idc-admin-bar {
- background: #fff;
- border-radius: 2px;
- color: #23282d;
- padding: 4px 8px;
- font-size: 12px;
-}
-
-#wpadminbar #wp-admin-bar-jetpack-idc .dashicons {
- color: #23282d;
- font-family: 'dashicons';
-}
-
-#wpadminbar #wp-admin-bar-jetpack-idc .dashicons:before {
- font-size: 16px;
-}
-
-#wpadminbar #wp-admin-bar-jetpack-idc:hover .ab-item {
- background: inherit;
-}
-
-#wpadminbar #wp-admin-bar-jetpack-idc:hover .jp-idc-admin-bar {
- background: #eee;
-}
-
-/*# sourceMappingURL=jetpack-idc-admin-bar-rtl.css.map */
diff --git a/plugins/jetpack/css/jetpack-idc-admin-bar-rtl.css.map b/plugins/jetpack/css/jetpack-idc-admin-bar-rtl.css.map
deleted file mode 100644
index 0c66f9f9..00000000
--- a/plugins/jetpack/css/jetpack-idc-admin-bar-rtl.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"names":[],"mappings":"","sources":["jetpack-idc-admin-bar-rtl.css"],"sourcesContent":["/*!\n* Do not modify this file directly. It is compiled SASS code.\n*/\n#wp-admin-bar-jetpack-idc.hide {\n display: none;\n}\n\n#wp-admin-bar-jetpack-idc .jp-idc-admin-bar {\n background: #fff;\n border-radius: 2px;\n color: #23282d;\n padding: 4px 8px;\n font-size: 12px;\n}\n\n#wpadminbar #wp-admin-bar-jetpack-idc .dashicons {\n color: #23282d;\n font-family: 'dashicons';\n}\n\n#wpadminbar #wp-admin-bar-jetpack-idc .dashicons:before {\n font-size: 16px;\n}\n\n#wpadminbar #wp-admin-bar-jetpack-idc:hover .ab-item {\n background: inherit;\n}\n\n#wpadminbar #wp-admin-bar-jetpack-idc:hover .jp-idc-admin-bar {\n background: #eee;\n}\n"],"file":"jetpack-idc-admin-bar-rtl.css"} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-idc-admin-bar-rtl.css.min.map b/plugins/jetpack/css/jetpack-idc-admin-bar-rtl.css.min.map
deleted file mode 100644
index e69de29b..00000000
--- a/plugins/jetpack/css/jetpack-idc-admin-bar-rtl.css.min.map
+++ /dev/null
diff --git a/plugins/jetpack/css/jetpack-idc-admin-bar-rtl.min.css b/plugins/jetpack/css/jetpack-idc-admin-bar-rtl.min.css
deleted file mode 100644
index 5ae0b72c..00000000
--- a/plugins/jetpack/css/jetpack-idc-admin-bar-rtl.min.css
+++ /dev/null
@@ -1,3 +0,0 @@
-/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/#wp-admin-bar-jetpack-idc.hide{display:none}#wp-admin-bar-jetpack-idc .jp-idc-admin-bar{background:#fff;border-radius:2px;color:#23282d;padding:4px 8px;font-size:12px}#wpadminbar #wp-admin-bar-jetpack-idc .dashicons{color:#23282d;font-family:dashicons}#wpadminbar #wp-admin-bar-jetpack-idc .dashicons:before{font-size:16px}#wpadminbar #wp-admin-bar-jetpack-idc:hover .ab-item{background:inherit}#wpadminbar #wp-admin-bar-jetpack-idc:hover .jp-idc-admin-bar{background:#eee} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-idc-admin-bar.css b/plugins/jetpack/css/jetpack-idc-admin-bar.css
deleted file mode 100644
index b77caf14..00000000
--- a/plugins/jetpack/css/jetpack-idc-admin-bar.css
+++ /dev/null
@@ -1,33 +0,0 @@
-/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/
-#wp-admin-bar-jetpack-idc.hide {
- display: none;
-}
-
-#wp-admin-bar-jetpack-idc .jp-idc-admin-bar {
- background: #fff;
- border-radius: 2px;
- color: #23282d;
- padding: 4px 8px;
- font-size: 12px;
-}
-
-#wpadminbar #wp-admin-bar-jetpack-idc .dashicons {
- color: #23282d;
- font-family: 'dashicons';
-}
-
-#wpadminbar #wp-admin-bar-jetpack-idc .dashicons:before {
- font-size: 16px;
-}
-
-#wpadminbar #wp-admin-bar-jetpack-idc:hover .ab-item {
- background: inherit;
-}
-
-#wpadminbar #wp-admin-bar-jetpack-idc:hover .jp-idc-admin-bar {
- background: #eee;
-}
-
-/*# sourceMappingURL=jetpack-idc-admin-bar.css.map */
diff --git a/plugins/jetpack/css/jetpack-idc-admin-bar.css.map b/plugins/jetpack/css/jetpack-idc-admin-bar.css.map
deleted file mode 100644
index 533d4f26..00000000
--- a/plugins/jetpack/css/jetpack-idc-admin-bar.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"names":[],"mappings":"","sources":["jetpack-idc-admin-bar.css"],"sourcesContent":["/*!\n* Do not modify this file directly. It is compiled SASS code.\n*/\n#wp-admin-bar-jetpack-idc.hide {\n display: none;\n}\n\n#wp-admin-bar-jetpack-idc .jp-idc-admin-bar {\n background: #fff;\n border-radius: 2px;\n color: #23282d;\n padding: 4px 8px;\n font-size: 12px;\n}\n\n#wpadminbar #wp-admin-bar-jetpack-idc .dashicons {\n color: #23282d;\n font-family: 'dashicons';\n}\n\n#wpadminbar #wp-admin-bar-jetpack-idc .dashicons:before {\n font-size: 16px;\n}\n\n#wpadminbar #wp-admin-bar-jetpack-idc:hover .ab-item {\n background: inherit;\n}\n\n#wpadminbar #wp-admin-bar-jetpack-idc:hover .jp-idc-admin-bar {\n background: #eee;\n}\n"],"file":"jetpack-idc-admin-bar.css"} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-idc-admin-bar.css.min.map b/plugins/jetpack/css/jetpack-idc-admin-bar.css.min.map
deleted file mode 100644
index e69de29b..00000000
--- a/plugins/jetpack/css/jetpack-idc-admin-bar.css.min.map
+++ /dev/null
diff --git a/plugins/jetpack/css/jetpack-idc-admin-bar.min.css b/plugins/jetpack/css/jetpack-idc-admin-bar.min.css
deleted file mode 100644
index 5ae0b72c..00000000
--- a/plugins/jetpack/css/jetpack-idc-admin-bar.min.css
+++ /dev/null
@@ -1,3 +0,0 @@
-/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/#wp-admin-bar-jetpack-idc.hide{display:none}#wp-admin-bar-jetpack-idc .jp-idc-admin-bar{background:#fff;border-radius:2px;color:#23282d;padding:4px 8px;font-size:12px}#wpadminbar #wp-admin-bar-jetpack-idc .dashicons{color:#23282d;font-family:dashicons}#wpadminbar #wp-admin-bar-jetpack-idc .dashicons:before{font-size:16px}#wpadminbar #wp-admin-bar-jetpack-idc:hover .ab-item{background:inherit}#wpadminbar #wp-admin-bar-jetpack-idc:hover .jp-idc-admin-bar{background:#eee} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-idc-rtl.css b/plugins/jetpack/css/jetpack-idc-rtl.css
deleted file mode 100644
index 3617b4a4..00000000
--- a/plugins/jetpack/css/jetpack-idc-rtl.css
+++ /dev/null
@@ -1,217 +0,0 @@
-/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/
-@charset "UTF-8";
-/*
-The MIT License (MIT)
-
-Copyright © 2011–2015 thoughtbot, inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
-documentation files (the “Software”), to deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
-persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial
-portions of the Software.
-
-THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-https://github.com/thoughtbot/bourbon
-*/
-.jp-idc-notice,
-.jp-idc-notice * {
- box-sizing: border-box;
-}
-
-.jp-idc-notice {
- margin-right: 0;
- margin-left: 10px;
- margin-top: 10px;
- overflow: hidden;
- padding-bottom: 16px;
- padding-top: 0;
-}
-
-.jp-idc-notice.is-non-admin {
- padding-bottom: 0;
-}
-
-@media all and (min-width: 783px) {
- .jp-idc-notice {
- margin-left: 20px;
- margin-top: 20px;
- }
- .jp-idc-notice.has-help-tabs {
- margin-top: 48px;
- }
-}
-
-.jp-idc-notice p {
- margin: 0;
- padding: 0;
-}
-
-.jp-idc-notice h3, .jp-idc-notice p {
- color: #414141;
-}
-
-.jp-idc-notice a:not(.dops-notice__action) {
- color: #0087be;
- text-decoration: none;
-}
-
-.jp-idc-notice a:not(.dops-notice__action):visited {
- color: #0087be;
-}
-
-.jp-idc-notice a:not(.dops-notice__action):hover, .jp-idc-notice a:not(.dops-notice__action):focus, .jp-idc-notice a:not(.dops-notice__action):active {
- color: #33bbe3;
-}
-
-.jp-idc-notice .dops-button {
- align-self: flex-start;
- margin-top: auto;
-}
-
-.jp-idc-notice > div {
- padding: 0 8px;
-}
-
-.jp-idc-notice__first-step {
- display: inline-block;
-}
-
-.jp-idc-notice__second-step {
- display: none;
-}
-
-.jp-idc-notice.jp-idc-show-second-step .jp-idc-notice__first-step {
- display: none;
-}
-
-.jp-idc-notice.jp-idc-show-second-step .jp-idc-notice__second-step {
- display: inline-block;
-}
-
-.jp-idc-notice .jp-idc-notice__header {
- padding-top: 8px;
- padding-bottom: 8px;
-}
-
-.jp-idc-notice__header__emblem {
- fill: #00BE28;
- width: 25px;
- height: 25px;
- margin: 0 auto 0 1em;
- float: right;
-}
-
-.jp-idc-notice__header__text {
- font-size: 14px;
- font-weight: 600;
- line-height: 25px;
- margin: 0;
-}
-
-.jp-idc-notice__content-header {
- margin: 16px 0;
-}
-
-.jp-idc-notice__content-header__lead {
- font-size: 16px;
- font-weight: 600;
- line-height: 21px;
- margin: 0;
-}
-
-.jp-idc-notice__content-header .jp-idc-notice__content-header__explanation {
- font-size: 14px;
- font-weight: 400;
- margin: 8px 0 0;
-}
-
-@media only screen and (min-width: 960px) {
- .jp-idc-notice__content-header .jp-idc-notice__content-header__explanation {
- margin: 4px 0 0;
- }
-}
-
-.jp-idc-notice__action {
- border: 1px solid #eeeeee;
- border-radius: 4px;
- display: flex;
- padding: 16px;
- flex-direction: column;
- margin-top: auto;
-}
-
-.jp-idc-notice__action:last-child {
- margin: 16px 0 0;
-}
-
-@media only screen and (min-width: 960px) {
- .jp-idc-notice__actions {
- display: flex;
- }
- .jp-idc-notice__action {
- flex: 1;
- margin: 0 0 0 8px;
- }
- .jp-idc-notice__action:last-child {
- margin: 0 8px 0 0;
- }
- .jp-idc-notice__action:first-child {
- padding-left: 24px;
- }
- .jp-idc-notice__action:last-child {
- padding-right: 24px;
- }
-}
-
-.jp-idc-notice .jp-idc-notice__action__explanation {
- margin: 0 0 16px 0;
-}
-
-.jp-idc-notice__separator {
- background-color: #eeeeee;
- margin: 0 -10px 0 -10px;
- height: 1px;
-}
-
-.jp-idc-notice.is-dismissible .jp-idc-notice__separator {
- margin-left: -46px;
-}
-
-@media only screen and (min-width: 782px) {
- .jp-idc-notice__separator {
- margin: 0 -12px 0 -12px;
- }
- .jp-idc-notice.is-dismissible .jp-idc-notice__separator {
- margin-left: -38px;
- }
-}
-
-.jp-idc-notice .jp-idc-notice__unsure-prompt {
- margin: 16px 0 0;
-}
-
-.jp-idc-notice .jp-idc-error__notice {
- display: none;
-}
-
-.jp-idc-notice .jp-idc-error__notice .dops-notice__icon {
- height: auto;
- width: auto;
-}
-
-@media only screen and (min-width: 683px) {
- .jp-idc-notice .jp-idc-error__notice .dops-notice__text {
- line-height: 24px;
- }
-}
-
-/*# sourceMappingURL=jetpack-idc-rtl.css.map */
diff --git a/plugins/jetpack/css/jetpack-idc-rtl.css.map b/plugins/jetpack/css/jetpack-idc-rtl.css.map
deleted file mode 100644
index 609ab037..00000000
--- a/plugins/jetpack/css/jetpack-idc-rtl.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"names":[],"mappings":"","sources":["jetpack-idc-rtl.css"],"sourcesContent":["/*!\n* Do not modify this file directly. It is compiled SASS code.\n*/\n@charset \"UTF-8\";\n/*\nThe MIT License (MIT)\n\nCopyright © 2011–2015 thoughtbot, inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\ndocumentation files (the “Software”), to deal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit\npersons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial\nportions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nhttps://github.com/thoughtbot/bourbon\n*/\n.jp-idc-notice,\n.jp-idc-notice * {\n box-sizing: border-box;\n}\n\n.jp-idc-notice {\n margin-right: 0;\n margin-left: 10px;\n margin-top: 10px;\n overflow: hidden;\n padding-bottom: 16px;\n padding-top: 0;\n}\n\n.jp-idc-notice.is-non-admin {\n padding-bottom: 0;\n}\n\n@media all and (min-width: 783px) {\n .jp-idc-notice {\n margin-left: 20px;\n margin-top: 20px;\n }\n .jp-idc-notice.has-help-tabs {\n margin-top: 48px;\n }\n}\n\n.jp-idc-notice p {\n margin: 0;\n padding: 0;\n}\n\n.jp-idc-notice h3, .jp-idc-notice p {\n color: #414141;\n}\n\n.jp-idc-notice a:not(.dops-notice__action) {\n color: #0087be;\n text-decoration: none;\n}\n\n.jp-idc-notice a:not(.dops-notice__action):visited {\n color: #0087be;\n}\n\n.jp-idc-notice a:not(.dops-notice__action):hover, .jp-idc-notice a:not(.dops-notice__action):focus, .jp-idc-notice a:not(.dops-notice__action):active {\n color: #33bbe3;\n}\n\n.jp-idc-notice .dops-button {\n align-self: flex-start;\n margin-top: auto;\n}\n\n.jp-idc-notice > div {\n padding: 0 8px;\n}\n\n.jp-idc-notice__first-step {\n display: inline-block;\n}\n\n.jp-idc-notice__second-step {\n display: none;\n}\n\n.jp-idc-notice.jp-idc-show-second-step .jp-idc-notice__first-step {\n display: none;\n}\n\n.jp-idc-notice.jp-idc-show-second-step .jp-idc-notice__second-step {\n display: inline-block;\n}\n\n.jp-idc-notice .jp-idc-notice__header {\n padding-top: 8px;\n padding-bottom: 8px;\n}\n\n.jp-idc-notice__header__emblem {\n fill: #00BE28;\n width: 25px;\n height: 25px;\n margin: 0 auto 0 1em;\n float: right;\n}\n\n.jp-idc-notice__header__text {\n font-size: 14px;\n font-weight: 600;\n line-height: 25px;\n margin: 0;\n}\n\n.jp-idc-notice__content-header {\n margin: 16px 0;\n}\n\n.jp-idc-notice__content-header__lead {\n font-size: 16px;\n font-weight: 600;\n line-height: 21px;\n margin: 0;\n}\n\n.jp-idc-notice__content-header .jp-idc-notice__content-header__explanation {\n font-size: 14px;\n font-weight: 400;\n margin: 8px 0 0;\n}\n\n@media only screen and (min-width: 960px) {\n .jp-idc-notice__content-header .jp-idc-notice__content-header__explanation {\n margin: 4px 0 0;\n }\n}\n\n.jp-idc-notice__action {\n border: 1px solid #eeeeee;\n border-radius: 4px;\n display: flex;\n padding: 16px;\n flex-direction: column;\n margin-top: auto;\n}\n\n.jp-idc-notice__action:last-child {\n margin: 16px 0 0;\n}\n\n@media only screen and (min-width: 960px) {\n .jp-idc-notice__actions {\n display: flex;\n }\n .jp-idc-notice__action {\n flex: 1;\n margin: 0 0 0 8px;\n }\n .jp-idc-notice__action:last-child {\n margin: 0 8px 0 0;\n }\n .jp-idc-notice__action:first-child {\n padding-left: 24px;\n }\n .jp-idc-notice__action:last-child {\n padding-right: 24px;\n }\n}\n\n.jp-idc-notice .jp-idc-notice__action__explanation {\n margin: 0 0 16px 0;\n}\n\n.jp-idc-notice__separator {\n background-color: #eeeeee;\n margin: 0 -10px 0 -10px;\n height: 1px;\n}\n\n.jp-idc-notice.is-dismissible .jp-idc-notice__separator {\n margin-left: -46px;\n}\n\n@media only screen and (min-width: 782px) {\n .jp-idc-notice__separator {\n margin: 0 -12px 0 -12px;\n }\n .jp-idc-notice.is-dismissible .jp-idc-notice__separator {\n margin-left: -38px;\n }\n}\n\n.jp-idc-notice .jp-idc-notice__unsure-prompt {\n margin: 16px 0 0;\n}\n\n.jp-idc-notice .jp-idc-error__notice {\n display: none;\n}\n\n.jp-idc-notice .jp-idc-error__notice .dops-notice__icon {\n height: auto;\n width: auto;\n}\n\n@media only screen and (min-width: 683px) {\n .jp-idc-notice .jp-idc-error__notice .dops-notice__text {\n line-height: 24px;\n }\n}\n"],"file":"jetpack-idc-rtl.css"} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-idc-rtl.css.min.map b/plugins/jetpack/css/jetpack-idc-rtl.css.min.map
deleted file mode 100644
index e69de29b..00000000
--- a/plugins/jetpack/css/jetpack-idc-rtl.css.min.map
+++ /dev/null
diff --git a/plugins/jetpack/css/jetpack-idc-rtl.min.css b/plugins/jetpack/css/jetpack-idc-rtl.min.css
deleted file mode 100644
index 959999f3..00000000
--- a/plugins/jetpack/css/jetpack-idc-rtl.min.css
+++ /dev/null
@@ -1,3 +0,0 @@
-@charset "UTF-8";/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/.jp-idc-notice,.jp-idc-notice *{box-sizing:border-box}.jp-idc-notice{margin-right:0;margin-left:10px;margin-top:10px;overflow:hidden;padding-bottom:16px;padding-top:0}.jp-idc-notice.is-non-admin{padding-bottom:0}@media all and (min-width:783px){.jp-idc-notice{margin-left:20px;margin-top:20px}.jp-idc-notice.has-help-tabs{margin-top:48px}}.jp-idc-notice p{margin:0;padding:0}.jp-idc-notice h3,.jp-idc-notice p{color:#414141}.jp-idc-notice a:not(.dops-notice__action){color:#0087be;text-decoration:none}.jp-idc-notice a:not(.dops-notice__action):visited{color:#0087be}.jp-idc-notice a:not(.dops-notice__action):active,.jp-idc-notice a:not(.dops-notice__action):focus,.jp-idc-notice a:not(.dops-notice__action):hover{color:#33bbe3}.jp-idc-notice .dops-button{align-self:flex-start;margin-top:auto}.jp-idc-notice>div{padding:0 8px}.jp-idc-notice__first-step{display:inline-block}.jp-idc-notice__second-step{display:none}.jp-idc-notice.jp-idc-show-second-step .jp-idc-notice__first-step{display:none}.jp-idc-notice.jp-idc-show-second-step .jp-idc-notice__second-step{display:inline-block}.jp-idc-notice .jp-idc-notice__header{padding-top:8px;padding-bottom:8px}.jp-idc-notice__header__emblem{fill:#00be28;width:25px;height:25px;margin:0 auto 0 1em;float:right}.jp-idc-notice__header__text{font-size:14px;font-weight:600;line-height:25px;margin:0}.jp-idc-notice__content-header{margin:16px 0}.jp-idc-notice__content-header__lead{font-size:16px;font-weight:600;line-height:21px;margin:0}.jp-idc-notice__content-header .jp-idc-notice__content-header__explanation{font-size:14px;font-weight:400;margin:8px 0 0}@media only screen and (min-width:960px){.jp-idc-notice__content-header .jp-idc-notice__content-header__explanation{margin:4px 0 0}}.jp-idc-notice__action{border:1px solid #eee;border-radius:4px;display:flex;padding:16px;flex-direction:column;margin-top:auto}.jp-idc-notice__action:last-child{margin:16px 0 0}@media only screen and (min-width:960px){.jp-idc-notice__actions{display:flex}.jp-idc-notice__action{flex:1;margin:0 0 0 8px}.jp-idc-notice__action:last-child{margin:0 8px 0 0}.jp-idc-notice__action:first-child{padding-left:24px}.jp-idc-notice__action:last-child{padding-right:24px}}.jp-idc-notice .jp-idc-notice__action__explanation{margin:0 0 16px 0}.jp-idc-notice__separator{background-color:#eee;margin:0 -10px 0 -10px;height:1px}.jp-idc-notice.is-dismissible .jp-idc-notice__separator{margin-left:-46px}@media only screen and (min-width:782px){.jp-idc-notice__separator{margin:0 -12px 0 -12px}.jp-idc-notice.is-dismissible .jp-idc-notice__separator{margin-left:-38px}}.jp-idc-notice .jp-idc-notice__unsure-prompt{margin:16px 0 0}.jp-idc-notice .jp-idc-error__notice{display:none}.jp-idc-notice .jp-idc-error__notice .dops-notice__icon{height:auto;width:auto}@media only screen and (min-width:683px){.jp-idc-notice .jp-idc-error__notice .dops-notice__text{line-height:24px}} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-idc.css b/plugins/jetpack/css/jetpack-idc.css
deleted file mode 100644
index f4274560..00000000
--- a/plugins/jetpack/css/jetpack-idc.css
+++ /dev/null
@@ -1,217 +0,0 @@
-/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/
-@charset "UTF-8";
-/*
-The MIT License (MIT)
-
-Copyright © 2011–2015 thoughtbot, inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
-documentation files (the “Software”), to deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
-persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial
-portions of the Software.
-
-THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-https://github.com/thoughtbot/bourbon
-*/
-.jp-idc-notice,
-.jp-idc-notice * {
- box-sizing: border-box;
-}
-
-.jp-idc-notice {
- margin-left: 0;
- margin-right: 10px;
- margin-top: 10px;
- overflow: hidden;
- padding-bottom: 16px;
- padding-top: 0;
-}
-
-.jp-idc-notice.is-non-admin {
- padding-bottom: 0;
-}
-
-@media all and (min-width: 783px) {
- .jp-idc-notice {
- margin-right: 20px;
- margin-top: 20px;
- }
- .jp-idc-notice.has-help-tabs {
- margin-top: 48px;
- }
-}
-
-.jp-idc-notice p {
- margin: 0;
- padding: 0;
-}
-
-.jp-idc-notice h3, .jp-idc-notice p {
- color: #414141;
-}
-
-.jp-idc-notice a:not(.dops-notice__action) {
- color: #0087be;
- text-decoration: none;
-}
-
-.jp-idc-notice a:not(.dops-notice__action):visited {
- color: #0087be;
-}
-
-.jp-idc-notice a:not(.dops-notice__action):hover, .jp-idc-notice a:not(.dops-notice__action):focus, .jp-idc-notice a:not(.dops-notice__action):active {
- color: #33bbe3;
-}
-
-.jp-idc-notice .dops-button {
- align-self: flex-start;
- margin-top: auto;
-}
-
-.jp-idc-notice > div {
- padding: 0 8px;
-}
-
-.jp-idc-notice__first-step {
- display: inline-block;
-}
-
-.jp-idc-notice__second-step {
- display: none;
-}
-
-.jp-idc-notice.jp-idc-show-second-step .jp-idc-notice__first-step {
- display: none;
-}
-
-.jp-idc-notice.jp-idc-show-second-step .jp-idc-notice__second-step {
- display: inline-block;
-}
-
-.jp-idc-notice .jp-idc-notice__header {
- padding-top: 8px;
- padding-bottom: 8px;
-}
-
-.jp-idc-notice__header__emblem {
- fill: #00BE28;
- width: 25px;
- height: 25px;
- margin: 0 1em 0 auto;
- float: left;
-}
-
-.jp-idc-notice__header__text {
- font-size: 14px;
- font-weight: 600;
- line-height: 25px;
- margin: 0;
-}
-
-.jp-idc-notice__content-header {
- margin: 16px 0;
-}
-
-.jp-idc-notice__content-header__lead {
- font-size: 16px;
- font-weight: 600;
- line-height: 21px;
- margin: 0;
-}
-
-.jp-idc-notice__content-header .jp-idc-notice__content-header__explanation {
- font-size: 14px;
- font-weight: 400;
- margin: 8px 0 0;
-}
-
-@media only screen and (min-width: 960px) {
- .jp-idc-notice__content-header .jp-idc-notice__content-header__explanation {
- margin: 4px 0 0;
- }
-}
-
-.jp-idc-notice__action {
- border: 1px solid #eeeeee;
- border-radius: 4px;
- display: flex;
- padding: 16px;
- flex-direction: column;
- margin-top: auto;
-}
-
-.jp-idc-notice__action:last-child {
- margin: 16px 0 0;
-}
-
-@media only screen and (min-width: 960px) {
- .jp-idc-notice__actions {
- display: flex;
- }
- .jp-idc-notice__action {
- flex: 1;
- margin: 0 8px 0 0;
- }
- .jp-idc-notice__action:last-child {
- margin: 0 0 0 8px;
- }
- .jp-idc-notice__action:first-child {
- padding-right: 24px;
- }
- .jp-idc-notice__action:last-child {
- padding-left: 24px;
- }
-}
-
-.jp-idc-notice .jp-idc-notice__action__explanation {
- margin: 0 0 16px 0;
-}
-
-.jp-idc-notice__separator {
- background-color: #eeeeee;
- margin: 0 -10px 0 -10px;
- height: 1px;
-}
-
-.jp-idc-notice.is-dismissible .jp-idc-notice__separator {
- margin-right: -46px;
-}
-
-@media only screen and (min-width: 782px) {
- .jp-idc-notice__separator {
- margin: 0 -12px 0 -12px;
- }
- .jp-idc-notice.is-dismissible .jp-idc-notice__separator {
- margin-right: -38px;
- }
-}
-
-.jp-idc-notice .jp-idc-notice__unsure-prompt {
- margin: 16px 0 0;
-}
-
-.jp-idc-notice .jp-idc-error__notice {
- display: none;
-}
-
-.jp-idc-notice .jp-idc-error__notice .dops-notice__icon {
- height: auto;
- width: auto;
-}
-
-@media only screen and (min-width: 683px) {
- .jp-idc-notice .jp-idc-error__notice .dops-notice__text {
- line-height: 24px;
- }
-}
-
-/*# sourceMappingURL=jetpack-idc.css.map */
diff --git a/plugins/jetpack/css/jetpack-idc.css.map b/plugins/jetpack/css/jetpack-idc.css.map
deleted file mode 100644
index 7a0654d0..00000000
--- a/plugins/jetpack/css/jetpack-idc.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"names":[],"mappings":"","sources":["jetpack-idc.css"],"sourcesContent":["/*!\n* Do not modify this file directly. It is compiled SASS code.\n*/\n@charset \"UTF-8\";\n/*\nThe MIT License (MIT)\n\nCopyright © 2011–2015 thoughtbot, inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\ndocumentation files (the “Software”), to deal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit\npersons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial\nportions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nhttps://github.com/thoughtbot/bourbon\n*/\n.jp-idc-notice,\n.jp-idc-notice * {\n box-sizing: border-box;\n}\n\n.jp-idc-notice {\n margin-left: 0;\n margin-right: 10px;\n margin-top: 10px;\n overflow: hidden;\n padding-bottom: 16px;\n padding-top: 0;\n}\n\n.jp-idc-notice.is-non-admin {\n padding-bottom: 0;\n}\n\n@media all and (min-width: 783px) {\n .jp-idc-notice {\n margin-right: 20px;\n margin-top: 20px;\n }\n .jp-idc-notice.has-help-tabs {\n margin-top: 48px;\n }\n}\n\n.jp-idc-notice p {\n margin: 0;\n padding: 0;\n}\n\n.jp-idc-notice h3, .jp-idc-notice p {\n color: #414141;\n}\n\n.jp-idc-notice a:not(.dops-notice__action) {\n color: #0087be;\n text-decoration: none;\n}\n\n.jp-idc-notice a:not(.dops-notice__action):visited {\n color: #0087be;\n}\n\n.jp-idc-notice a:not(.dops-notice__action):hover, .jp-idc-notice a:not(.dops-notice__action):focus, .jp-idc-notice a:not(.dops-notice__action):active {\n color: #33bbe3;\n}\n\n.jp-idc-notice .dops-button {\n align-self: flex-start;\n margin-top: auto;\n}\n\n.jp-idc-notice > div {\n padding: 0 8px;\n}\n\n.jp-idc-notice__first-step {\n display: inline-block;\n}\n\n.jp-idc-notice__second-step {\n display: none;\n}\n\n.jp-idc-notice.jp-idc-show-second-step .jp-idc-notice__first-step {\n display: none;\n}\n\n.jp-idc-notice.jp-idc-show-second-step .jp-idc-notice__second-step {\n display: inline-block;\n}\n\n.jp-idc-notice .jp-idc-notice__header {\n padding-top: 8px;\n padding-bottom: 8px;\n}\n\n.jp-idc-notice__header__emblem {\n fill: #00BE28;\n width: 25px;\n height: 25px;\n margin: 0 1em 0 auto;\n float: left;\n}\n\n.jp-idc-notice__header__text {\n font-size: 14px;\n font-weight: 600;\n line-height: 25px;\n margin: 0;\n}\n\n.jp-idc-notice__content-header {\n margin: 16px 0;\n}\n\n.jp-idc-notice__content-header__lead {\n font-size: 16px;\n font-weight: 600;\n line-height: 21px;\n margin: 0;\n}\n\n.jp-idc-notice__content-header .jp-idc-notice__content-header__explanation {\n font-size: 14px;\n font-weight: 400;\n margin: 8px 0 0;\n}\n\n@media only screen and (min-width: 960px) {\n .jp-idc-notice__content-header .jp-idc-notice__content-header__explanation {\n margin: 4px 0 0;\n }\n}\n\n.jp-idc-notice__action {\n border: 1px solid #eeeeee;\n border-radius: 4px;\n display: flex;\n padding: 16px;\n flex-direction: column;\n margin-top: auto;\n}\n\n.jp-idc-notice__action:last-child {\n margin: 16px 0 0;\n}\n\n@media only screen and (min-width: 960px) {\n .jp-idc-notice__actions {\n display: flex;\n }\n .jp-idc-notice__action {\n flex: 1;\n margin: 0 8px 0 0;\n }\n .jp-idc-notice__action:last-child {\n margin: 0 0 0 8px;\n }\n .jp-idc-notice__action:first-child {\n padding-right: 24px;\n }\n .jp-idc-notice__action:last-child {\n padding-left: 24px;\n }\n}\n\n.jp-idc-notice .jp-idc-notice__action__explanation {\n margin: 0 0 16px 0;\n}\n\n.jp-idc-notice__separator {\n background-color: #eeeeee;\n margin: 0 -10px 0 -10px;\n height: 1px;\n}\n\n.jp-idc-notice.is-dismissible .jp-idc-notice__separator {\n margin-right: -46px;\n}\n\n@media only screen and (min-width: 782px) {\n .jp-idc-notice__separator {\n margin: 0 -12px 0 -12px;\n }\n .jp-idc-notice.is-dismissible .jp-idc-notice__separator {\n margin-right: -38px;\n }\n}\n\n.jp-idc-notice .jp-idc-notice__unsure-prompt {\n margin: 16px 0 0;\n}\n\n.jp-idc-notice .jp-idc-error__notice {\n display: none;\n}\n\n.jp-idc-notice .jp-idc-error__notice .dops-notice__icon {\n height: auto;\n width: auto;\n}\n\n@media only screen and (min-width: 683px) {\n .jp-idc-notice .jp-idc-error__notice .dops-notice__text {\n line-height: 24px;\n }\n}\n"],"file":"jetpack-idc.css"} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-idc.css.min.map b/plugins/jetpack/css/jetpack-idc.css.min.map
deleted file mode 100644
index e69de29b..00000000
--- a/plugins/jetpack/css/jetpack-idc.css.min.map
+++ /dev/null
diff --git a/plugins/jetpack/css/jetpack-idc.min.css b/plugins/jetpack/css/jetpack-idc.min.css
deleted file mode 100644
index 96d9633a..00000000
--- a/plugins/jetpack/css/jetpack-idc.min.css
+++ /dev/null
@@ -1,3 +0,0 @@
-@charset "UTF-8";/*!
-* Do not modify this file directly. It is compiled SASS code.
-*/.jp-idc-notice,.jp-idc-notice *{box-sizing:border-box}.jp-idc-notice{margin-left:0;margin-right:10px;margin-top:10px;overflow:hidden;padding-bottom:16px;padding-top:0}.jp-idc-notice.is-non-admin{padding-bottom:0}@media all and (min-width:783px){.jp-idc-notice{margin-right:20px;margin-top:20px}.jp-idc-notice.has-help-tabs{margin-top:48px}}.jp-idc-notice p{margin:0;padding:0}.jp-idc-notice h3,.jp-idc-notice p{color:#414141}.jp-idc-notice a:not(.dops-notice__action){color:#0087be;text-decoration:none}.jp-idc-notice a:not(.dops-notice__action):visited{color:#0087be}.jp-idc-notice a:not(.dops-notice__action):active,.jp-idc-notice a:not(.dops-notice__action):focus,.jp-idc-notice a:not(.dops-notice__action):hover{color:#33bbe3}.jp-idc-notice .dops-button{align-self:flex-start;margin-top:auto}.jp-idc-notice>div{padding:0 8px}.jp-idc-notice__first-step{display:inline-block}.jp-idc-notice__second-step{display:none}.jp-idc-notice.jp-idc-show-second-step .jp-idc-notice__first-step{display:none}.jp-idc-notice.jp-idc-show-second-step .jp-idc-notice__second-step{display:inline-block}.jp-idc-notice .jp-idc-notice__header{padding-top:8px;padding-bottom:8px}.jp-idc-notice__header__emblem{fill:#00be28;width:25px;height:25px;margin:0 1em 0 auto;float:left}.jp-idc-notice__header__text{font-size:14px;font-weight:600;line-height:25px;margin:0}.jp-idc-notice__content-header{margin:16px 0}.jp-idc-notice__content-header__lead{font-size:16px;font-weight:600;line-height:21px;margin:0}.jp-idc-notice__content-header .jp-idc-notice__content-header__explanation{font-size:14px;font-weight:400;margin:8px 0 0}@media only screen and (min-width:960px){.jp-idc-notice__content-header .jp-idc-notice__content-header__explanation{margin:4px 0 0}}.jp-idc-notice__action{border:1px solid #eee;border-radius:4px;display:flex;padding:16px;flex-direction:column;margin-top:auto}.jp-idc-notice__action:last-child{margin:16px 0 0}@media only screen and (min-width:960px){.jp-idc-notice__actions{display:flex}.jp-idc-notice__action{flex:1;margin:0 8px 0 0}.jp-idc-notice__action:last-child{margin:0 0 0 8px}.jp-idc-notice__action:first-child{padding-right:24px}.jp-idc-notice__action:last-child{padding-left:24px}}.jp-idc-notice .jp-idc-notice__action__explanation{margin:0 0 16px 0}.jp-idc-notice__separator{background-color:#eee;margin:0 -10px 0 -10px;height:1px}.jp-idc-notice.is-dismissible .jp-idc-notice__separator{margin-right:-46px}@media only screen and (min-width:782px){.jp-idc-notice__separator{margin:0 -12px 0 -12px}.jp-idc-notice.is-dismissible .jp-idc-notice__separator{margin-right:-38px}}.jp-idc-notice .jp-idc-notice__unsure-prompt{margin:16px 0 0}.jp-idc-notice .jp-idc-error__notice{display:none}.jp-idc-notice .jp-idc-error__notice .dops-notice__icon{height:auto;width:auto}@media only screen and (min-width:683px){.jp-idc-notice .jp-idc-error__notice .dops-notice__text{line-height:24px}} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack-rtl.css b/plugins/jetpack/css/jetpack-rtl.css
deleted file mode 100644
index 38f29ee7..00000000
--- a/plugins/jetpack/css/jetpack-rtl.css
+++ /dev/null
@@ -1,30 +0,0 @@
-/*!
-* Do not modify this file directly. It is concatenated from individual module CSS files.
-*/
-.jp-carousel-wrap *{line-height:inherit}.jp-carousel-overlay{background:#000}div.jp-carousel-fadeaway{background:-moz-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background:-webkit-gradient(linear,right bottom,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));position:fixed;bottom:0;z-index:2147483647;width:100%;height:15px}.jp-carousel-next-button span,.jp-carousel-previous-button span{background:url(../modules/carousel/images/arrows.png) no-repeat center center;background-size:200px 126px}.jp-carousel-msg{font-family:"Open Sans",sans-serif;font-style:normal;display:inline-block;line-height:19px;padding:11px 15px;font-size:14px;text-align:center;margin:25px 2px 0 20px;background-color:#fff;border-right:4px solid #ffba00;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.jp-carousel-next-button span,.jp-carousel-previous-button span{background-image:url(../modules/carousel/images/arrows-2x.png)}}.jp-carousel-wrap{font-family:"Helvetica Neue",sans-serif!important}.jp-carousel-info{position:absolute;bottom:0;text-align:right!important;-webkit-font-smoothing:subpixel-antialiased!important}.jp-carousel-info ::selection{background:#68c9e8;color:#fff}.jp-carousel-info ::-moz-selection{background:#68c9e8;color:#fff}.jp-carousel-photo-info{position:relative;right:25%;width:50%}.jp-carousel-transitions .jp-carousel-photo-info{transition:.4s ease-out}.jp-carousel-info h2{background:100% 0!important;border:none!important;color:#999;display:block!important;font:normal 13px/1.25em "Helvetica Neue",sans-serif!important;letter-spacing:0!important;margin:7px 0 0 0!important;padding:10px 0 0!important;overflow:hidden;text-align:right;text-shadow:none!important;text-transform:none!important;-webkit-font-smoothing:subpixel-antialiased}.jp-carousel-next-button,.jp-carousel-previous-button{text-indent:-9999px;overflow:hidden;cursor:pointer}.jp-carousel-next-button span,.jp-carousel-previous-button span{position:absolute;top:0;bottom:0;width:82px;zoom:1;opacity:.2}.jp-carousel-transitions .jp-carousel-next-button span,.jp-carousel-transitions .jp-carousel-previous-button span{transition:.5s opacity ease-out}.jp-carousel-next-button:hover span,.jp-carousel-previous-button:hover span{opacity:.6}.jp-carousel-next-button span{background-position:-110px center;left:0}.jp-carousel-previous-button span{background-position:-10px center;right:0}.jp-carousel-buttons{margin:-18px -20px 15px;padding:8px 10px;border-bottom:1px solid #222;background:#222;text-align:center}div.jp-carousel-buttons a{border:none!important;color:#999;font:normal 11px/1.2em "Helvetica Neue",sans-serif!important;letter-spacing:0!important;padding:5px 0 5px 2px;text-decoration:none!important;text-shadow:none!important;vertical-align:middle;-webkit-font-smoothing:subpixel-antialiased}div.jp-carousel-buttons a:hover{color:#68c9e8;border:none!important}.jp-carousel-transitions div.jp-carousel-buttons a:hover{transition:none!important}.jp-carousel-next-button,.jp-carousel-previous-button,.jp-carousel-slide,.jp-carousel-slide img{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.jp-carousel-slide{position:fixed;width:0;bottom:0;background-color:#000;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px}.jp-carousel-transitions .jp-carousel-slide{transition:.3s ease-out}.jp-carousel-slide.selected{position:absolute!important;opacity:1}.jp-carousel-slide{opacity:.25}.jp-carousel-slide img{display:block;width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important;background:100% 0!important;border:none!important;padding:0!important;box-shadow:0 2px 8px rgba(0,0,0,.1);zoom:1}.jp-carousel-transitions .jp-carousel-slide{transition:opacity .4s linear}.jp-carousel-close-hint{color:#999;cursor:default;letter-spacing:0!important;padding:.35em 0 0;position:absolute;text-align:left;width:90%}.jp-carousel-transitions .jp-carousel-close-hint{transition:color .2s linear}.jp-carousel-close-hint span{cursor:pointer;background-color:#000;background-color:rgba(0,0,0,.8);display:inline-block;height:22px;font:400 24px/1 "Helvetica Neue",sans-serif!important;line-height:22px;margin:0 .4em 0 0;text-align:center;vertical-align:middle;width:22px;border-radius:4px}.jp-carousel-transitions .jp-carousel-close-hint span{transition:border-color .2s linear}.jp-carousel-close-hint:hover{cursor:default;color:#fff}.jp-carousel-close-hint:hover span{border-color:#fff}a.jp-carousel-image-download,div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{background:url(../modules/carousel/images/carousel-sprite.png?5) no-repeat;background-size:16px 200px}div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{margin:0 0 0 14px!important}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-color:#303030;padding-left:8px!important;border-radius:2px;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{margin:0 -12px 0 2px!important}div.jp-carousel-buttons a.jp-carousel-reblog,div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover{background-position:6px -36px;padding-left:auto!important;padding-right:26px!important;color:#999}div.jp-carousel-buttons a.jp-carousel-commentlink{background-position:100% -156px;padding-right:19px!important}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover{cursor:default}div.jp-carousel-buttons a.jp-carousel-reblog:hover{background-position:6px -56px;color:#68c9e8}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){a.jp-carousel-image-download,div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{background-image:url(../modules/carousel/images/carousel-sprite-2x.png?5)}}div#carousel-reblog-box{background:#222;background:-moz-linear-gradient(bottom,#222,#333);background:-webkit-gradient(linear,right bottom,right top,from(#222),to(#333));padding:3px 0 0;display:none;margin:5px auto 0;border-radius:2px;box-shadow:0 0 20px rgba(0,0,0,.9);height:74px;width:565px}#carousel-reblog-box textarea{background:#999;font:13px/1.4 "Helvetica Neue",sans-serif!important;color:#444;padding:3px 6px;width:370px;height:48px;float:right;margin:6px 9px 0 9px;border:1px solid #666;box-shadow:inset -2px 2px 2px rgba(0,0,0,.2);border-radius:2px}#carousel-reblog-box textarea:focus{background:#ccc;color:#222}#carousel-reblog-box label{color:#aaa;font-size:11px;padding-left:2px;padding-right:2px;display:inline;font-weight:400}#carousel-reblog-box select{width:110px;padding:0;font-size:12px;font-family:"Helvetica Neue",sans-serif!important;background:#333;color:#eee;border:1px solid #444;margin-top:5px}#carousel-reblog-box .submit,#wrapper #carousel-reblog-box p.response{float:right;width:154px;padding-top:0;padding-right:1px;overflow:hidden;height:34px;margin:3px 2px 0 0!important}#wrapper #carousel-reblog-box p.response{font-size:13px;clear:none;padding-right:2px;height:34px;color:#aaa}#carousel-reblog-box input#carousel-reblog-submit,#jp-carousel-comment-form-button-submit{font:13px/24px "Helvetica Neue",sans-serif!important;margin-top:8px;padding:0 10px!important;border-radius:1em;height:24px;color:#333;cursor:pointer;font-weight:400;background:#aaa;background:-moz-linear-gradient(bottom,#aaa,#ccc);background:-webkit-gradient(linear,right bottom,right top,from(#aaa),to(#ccc));border:1px solid #444}#carousel-reblog-box input#carousel-reblog-submit:hover,#jp-carousel-comment-form-button-submit:hover{background:#ccc;background:-moz-linear-gradient(bottom,#ccc,#eee);background:-webkit-gradient(linear,right bottom,right top,from(#ccc),to(#eee))}#carousel-reblog-box .canceltext{color:#aaa;font-size:11px;line-height:24px}#carousel-reblog-box .canceltext a{color:#fff}.jp-carousel-titleanddesc{border-top:1px solid #222;color:#999;font-size:15px;padding-top:24px;margin-bottom:20px;font-weight:400}.jp-carousel-titleanddesc-title{font:300 1.5em/1.1 "Helvetica Neue",sans-serif!important;text-transform:none!important;color:#fff;margin:0 0 15px;padding:0}.jp-carousel-titleanddesc-desc p{color:#999;line-height:1.4;margin-bottom:.75em}.jp-carousel-comments p a,.jp-carousel-info h2 a,.jp-carousel-titleanddesc p a{color:#fff!important;border:none!important;text-decoration:underline!important;font-weight:400!important;font-style:normal!important}.jp-carousel-titleanddesc p b,.jp-carousel-titleanddesc p strong{font-weight:700;color:#999}.jp-carousel-titleanddesc p em,.jp-carousel-titleanddesc p i{font-style:italic;color:#999}.jp-carousel-comments p a:hover,.jp-carousel-info h2 a:hover,.jp-carousel-titleanddesc p a:hover{color:#68c9e8!important}.jp-carousel-titleanddesc p:empty{display:none}.jp-carousel-left-column-wrapper h1:after,.jp-carousel-left-column-wrapper h1:before,.jp-carousel-photo-info h1:after,.jp-carousel-photo-info h1:before{content:none!important}.jp-carousel-image-meta{background:#111;border:1px solid #222;color:#fff;font-size:13px;font:12px/1.4 "Helvetica Neue",sans-serif!important;overflow:hidden;padding:18px 20px;width:209px!important}.jp-carousel-image-meta h5,.jp-carousel-image-meta li{font-family:"Helvetica Neue",sans-serif!important;position:inherit!important;top:auto!important;left:auto!important;right:auto!important;bottom:auto!important;background:100% 0!important;border:none!important;font-weight:400!important;line-height:1.3em!important}.jp-carousel-image-meta ul{margin:0!important;padding:0!important;list-style:none!important}.jp-carousel-image-meta li{width:48%!important;display:inline-block!important;vertical-align:top!important;margin:0 0 15px 2%!important;color:#fff!important;font-size:13px!important}.jp-carousel-image-meta h5{color:#999!important;text-transform:uppercase!important;font-size:10px!important;margin:0 0 2px!important;letter-spacing:.1em!important}a.jp-carousel-image-download{padding-right:23px;display:inline-block;clear:both;color:#999;line-height:1;font-weight:400;font-size:13px;text-decoration:none;background-position:100% -82px}a.jp-carousel-image-download span.photo-size{font-size:11px;border-radius:1em;margin-right:2px;display:inline-block}a.jp-carousel-image-download span.photo-size-times{padding:0 2px 0 1px}a.jp-carousel-image-download:hover{background-position:100% -122px;color:#68c9e8;border:none!important}.jp-carousel-image-map{position:relative;margin:-20px -20px 20px;border-bottom:1px solid rgba(255,255,255,.17);height:154px}.jp-carousel-image-map img.gmap-main{border-top-right-radius:6px;border-left:1px solid rgba(255,255,255,.17)}.jp-carousel-image-map div.gmap-topright{width:94px;height:154px;position:absolute;top:0;left:0}.jp-carousel-image-map div.imgclip{overflow:hidden;border-top-left-radius:6px}.jp-carousel-image-map div.gmap-topright img{margin-right:-40px}.jp-carousel-image-map img.gmap-bottomright{position:absolute;top:96px;left:0}.jp-carousel-comments{font:15px/1.7 "Helvetica Neue",sans-serif!important;font-weight:400;background:none transparent}.jp-carousel-comments p a:active,.jp-carousel-comments p a:focus,.jp-carousel-comments p a:hover{color:#68c9e8!important}.jp-carousel-comment{background:none transparent;color:#999;margin-bottom:20px;clear:right;overflow:auto;width:100%}.jp-carousel-comment p{color:#999!important}.jp-carousel-comment .comment-author{font-size:13px;font-weight:400;padding:0;width:auto;display:inline;float:none;border:none;margin:0}.jp-carousel-comment .comment-author a{color:#fff}.jp-carousel-comment .comment-gravatar{float:right}.jp-carousel-comment .comment-content{border:none;margin-right:85px;padding:0}.jp-carousel-comment .avatar{margin:0 0 0 20px;border-radius:4px;border:none!important;padding:0!important;background-color:transparent!important}.jp-carousel-comment .comment-date{color:#999;margin-top:4px;font-size:11px;display:inline;float:left}#jp-carousel-comment-form{margin:0 0 10px!important;float:right;width:100%}textarea#jp-carousel-comment-form-comment-field{background:rgba(34,34,34,.9);border:1px solid #3a3a3a;color:#aaa;font:15px/1.4 "Helvetica Neue",sans-serif!important;width:100%;padding:10px 10px 5px;margin:0;float:none;height:147px;box-shadow:inset -2px 2px 2px rgba(0,0,0,.2);border-radius:3px;overflow:hidden;box-sizing:border-box}textarea#jp-carousel-comment-form-comment-field::-webkit-input-placeholder{color:#555}textarea#jp-carousel-comment-form-comment-field:focus{background:#ccc;color:#222}textarea#jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder{color:#aaa}#jp-carousel-comment-form-spinner{color:#fff;margin:22px 10px 0 0;display:block;width:20px;height:20px;float:right}#jp-carousel-comment-form-submit-and-info-wrapper{display:none;overflow:hidden;width:100%}#jp-carousel-comment-form-commenting-as input{background:rgba(34,34,34,.9);border:1px solid #3a3a3a;color:#aaa;font:13px/1.4 "Helvetica Neue",sans-serif!important;padding:3px 6px;float:right;box-shadow:inset -2px 2px 2px rgba(0,0,0,.2);border-radius:2px;width:285px}#jp-carousel-comment-form-commenting-as input:focus{background:#ccc;color:#222}#jp-carousel-comment-form-commenting-as p{font:400 13px/1.7 "Helvetica Neue",sans-serif!important;margin:22px 0 0;float:right}#jp-carousel-comment-form-commenting-as fieldset{float:right;border:none;margin:20px 0 0 0;padding:0}#jp-carousel-comment-form-commenting-as fieldset{clear:both}#jp-carousel-comment-form-commenting-as label{font:400 13px/1.7 "Helvetica Neue",sans-serif!important;margin:0 0 3px 20px;float:right;width:100px}#jp-carousel-comment-form-button-submit{margin-top:20px;float:left}#js-carousel-comment-form-container{margin-bottom:15px;overflow:auto;width:100%}#jp-carousel-comment-form-container{margin-bottom:15px;overflow:auto;width:100%}#jp-carousel-comment-post-results{display:none;overflow:auto;width:100%}#jp-carousel-comment-post-results span{display:block;text-align:center;margin-top:20px;width:100%;overflow:auto;padding:1em 0;box-sizing:border-box;background:rgba(0,0,0,.7);border-radius:2px;font:13px/1.4 "Helvetica Neue",sans-serif!important;border:1px solid rgba(255,255,255,.17);box-shadow:inset 0 0 5px 5px rgba(0,0,0,1)}.jp-carousel-comment-post-error{color:#df4926}#jp-carousel-comments-closed{display:none;color:#999}#jp-carousel-comments-loading{font:400 15px/1.7 "Helvetica Neue",sans-serif!important;display:none;color:#999;text-align:right;margin-bottom:20px}.jp-carousel-light .jp-carousel-overlay{background:#fff}.jp-carousel-light .jp-carousel-next-button:hover span,.jp-carousel-light .jp-carousel-previous-button:hover span{opacity:.8}.jp-carousel-light .jp-carousel-close-hint:hover,.jp-carousel-light .jp-carousel-titleanddesc div{color:#000!important}.jp-carousel-light .jp-carousel-comment .comment-author a,.jp-carousel-light .jp-carousel-comments p a,.jp-carousel-light .jp-carousel-info h2 a,.jp-carousel-light .jp-carousel-titleanddesc p a{color:#1e8cbe!important}.jp-carousel-light .jp-carousel-comment .comment-author a:hover,.jp-carousel-light .jp-carousel-comments p a:hover,.jp-carousel-light .jp-carousel-info h2 a:hover,.jp-carousel-light .jp-carousel-titleanddesc p a:hover{color:#f1831e!important}.jp-carousel-light .jp-carousel-comment,.jp-carousel-light .jp-carousel-comment p,.jp-carousel-light .jp-carousel-info h2,.jp-carousel-light .jp-carousel-titleanddesc,.jp-carousel-light .jp-carousel-titleanddesc p,.jp-carousel-light .jp-carousel-titleanddesc p b,.jp-carousel-light .jp-carousel-titleanddesc p em,.jp-carousel-light .jp-carousel-titleanddesc p i,.jp-carousel-light .jp-carousel-titleanddesc p strong,.jp-carousel-light div.jp-carousel-buttons a{color:#666}.jp-carousel-light .jp-carousel-buttons{border-bottom-color:#f0f0f0;background:#f5f5f5}.jp-carousel-light div.jp-carousel-buttons a:hover{text-decoration:none;color:#f1831e}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog,.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog:hover{background-position:4px -56px;padding-right:24px!important}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-color:#2ea2cc;color:#fff}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-commentlink{background-position:100% -176px}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-position:5px -36px}.jp-carousel-light div#carousel-reblog-box{background:#eee;background:-moz-linear-gradient(bottom,#ececec,#f7f7f7);background:-webkit-gradient(linear,right bottom,right top,from(#ececec),to(#f7f7f7));box-shadow:0 2px 10px rgba(0,0,0,.1);border:1px solid #ddd}.jp-carousel-light #carousel-reblog-box textarea{border:1px inset #ccc;color:#666;border:1px solid #cfcfcf;background:#fff}.jp-carousel-light #carousel-reblog-box .canceltext{color:#888}.jp-carousel-light #carousel-reblog-box .canceltext a{color:#666}.jp-carousel-light #carousel-reblog-box select{background:#eee;color:#333;border:1px solid #aaa}#jp-carousel-comment-form-button-submit,.jp-carousel-light #carousel-reblog-box input#carousel-reblog-submit{color:#333;background:#fff;background:-moz-linear-gradient(bottom,#ddd,#fff);background:-webkit-gradient(linear,right bottom,right top,from(#ddd),to(#fff));border:1px solid #aaa}.jp-carousel-light .jp-carousel-image-meta{background:#fafafa;border:1px solid #eee;border-top-color:#f5f5f5;border-right-color:#f5f5f5;color:#333}.jp-carousel-light .jp-carousel-image-meta li{color:#000!important}.jp-carousel-light .jp-carousel-close-hint{color:#ccc}.jp-carousel-light .jp-carousel-close-hint span{background-color:#fff;border-color:#ccc}.jp-carousel-light #jp-carousel-comment-form-comment-field::-webkit-input-placeholder{color:#aaa}.jp-carousel-light #jp-carousel-comment-form-comment-field:focus{color:#333}.jp-carousel-light #jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder{color:#ddd}.jp-carousel-light a.jp-carousel-image-download{background-position:100% -122px}.jp-carousel-light a.jp-carousel-image-download:hover{background-position:100% -122px;color:#f1831e}.jp-carousel-light textarea#jp-carousel-comment-form-comment-field{background:#fbfbfb;color:#333;border:1px solid #dfdfdf;box-shadow:inset -2px 2px 2px rgba(0,0,0,.1)}.jp-carousel-light #jp-carousel-comment-form-commenting-as input{background:#fbfbfb;border:1px solid #dfdfdf;color:#333;box-shadow:inset -2px 2px 2px rgba(0,0,0,.1)}.jp-carousel-light #jp-carousel-comment-form-commenting-as input:focus{background:#fbfbfb;color:#333}.jp-carousel-light #jp-carousel-comment-post-results span{background:#f7f7f7;border:1px solid #dfdfdf;box-shadow:inset 0 0 5px rgba(0,0,0,.05)}.jp-carousel-light .jp-carousel-slide{background-color:#fff}.jp-carousel-light .jp-carousel-titleanddesc{border-top:1px solid #eee}.jp-carousel-light .jp-carousel-fadeaway{background:-moz-linear-gradient(bottom,rgba(255,255,255,.75),rgba(255,255,255,0));background:-webkit-gradient(linear,right bottom,right top,from(rgba(255,255,255,.75)),to(rgba(255,255,255,0)))}@media only screen and (max-width:760px){.jp-carousel-info{margin:0 10px!important}.jp-carousel-next-button,.jp-carousel-previous-button{display:none!important}.jp-carousel-buttons{display:none!important}.jp-carousel-image-meta{float:none!important;width:100%!important;box-sizing:border-box}.jp-carousel-close-hint{font-weight:800!important;font-size:26px!important;position:fixed!important;top:-10px}.jp-carousel-slide img{opacity:1}.jp-carousel-wrap{background-color:#000}.jp-carousel-fadeaway{display:none}#jp-carousel-comment-form-container{display:none!important}.jp-carousel-titleanddesc{padding-top:0!important;border:none!important}.jp-carousel-titleanddesc-title{font-size:1em!important}.jp-carousel-left-column-wrapper{padding:0;width:100%!important}.jp-carousel-photo-info{right:0!important;width:100%!important}}
-.contact-form .clear-form{clear:both}.contact-form input:-ms-input-placeholder{transition:opacity .3s ease-out}.contact-form input::-ms-input-placeholder{transition:opacity .3s ease-out}.contact-form input::placeholder{transition:opacity .3s ease-out}.contact-form input:hover:-ms-input-placeholder{opacity:.5}.contact-form input:hover::-ms-input-placeholder{opacity:.5}.contact-form input:hover::placeholder{opacity:.5}.contact-form input:focus:-ms-input-placeholder{opacity:.3}.contact-form input:focus::-ms-input-placeholder{opacity:.3}.contact-form input:focus::placeholder{opacity:.3}.contact-form input[type=email],.contact-form input[type=text],.contact-form input[type=url]{width:300px;max-width:98%;margin-bottom:13px}.contact-form select{margin-bottom:13px}.contact-form textarea{height:200px;width:80%;float:none;margin-bottom:13px}.contact-form input[type=checkbox],.contact-form input[type=radio]{float:none;margin-bottom:13px}.contact-form label{margin-bottom:3px;float:none;font-weight:700;display:block}.contact-form label.checkbox,.contact-form label.radio{margin-bottom:3px;float:none;font-weight:700;display:inline-block}.contact-form label span{color:#aaa;margin-right:4px;font-weight:400}.contact-form-submission{margin-bottom:4em;padding:1.5em 1em}.contact-form-submission p{margin:0 auto;word-wrap:break-word}.form-errors .form-error-message{color:red}.textwidget .contact-form input[type=email],.textwidget .contact-form input[type=text],.textwidget .contact-form input[type=url],.textwidget .contact-form textarea{width:250px;max-width:100%;box-sizing:border-box}#jetpack-check-feedback-spam{margin:1px 0 0 8px}.jetpack-check-feedback-spam-spinner{display:inline-block;margin-top:7px}
-.infinite-loader{color:#000;display:block;height:28px;text-indent:-9999px}#infinite-handle span{background:#333;border-radius:1px;color:#eee;cursor:pointer;font-size:13px;padding:6px 16px}#infinite-handle span button,#infinite-handle span button:focus,#infinite-handle span button:hover{display:inline;position:static;padding:0;margin:0;border:none;line-height:inherit;background:100% 0;color:inherit;cursor:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}#infinite-handle span button::-moz-focus-inner{margin:0;padding:0;border:none}@media (max-width:800px){#infinite-handle span:before{display:none}#infinite-handle span{display:block}}#infinite-footer{position:fixed;bottom:-50px;right:0;width:100%}#infinite-footer a{text-decoration:none}#infinite-footer .blog-credits a:hover,#infinite-footer .blog-info a:hover{color:#444;text-decoration:underline}#infinite-footer .container{background:rgba(255,255,255,.8);border-color:#ccc;border-color:rgba(0,0,0,.1);border-style:solid;border-width:1px 0 0;box-sizing:border-box;margin:0 auto;overflow:hidden;padding:1px 20px;width:780px}#infinite-footer .blog-credits,#infinite-footer .blog-info{box-sizing:border-box;line-height:25px}#infinite-footer .blog-info{float:right;overflow:hidden;text-align:right;text-overflow:ellipsis;white-space:nowrap;width:40%}#infinite-footer .blog-credits{font-weight:400;float:left;width:60%}#infinite-footer .blog-info a{color:#111;font-size:14px;font-weight:700}#infinite-footer .blog-credits{color:#888;font-size:12px;text-align:left}#infinite-footer .blog-credits a{color:#666}.infinity-end.neverending #infinite-footer{display:none}@media (max-width:640px){#infinite-footer .container{box-sizing:border-box;width:100%}#infinite-footer .blog-info{width:30%}#infinite-footer .blog-credits{width:70%}#infinite-footer .blog-credits,#infinite-footer .blog-info a{font-size:10px}}@media (max-width:640px){#infinite-footer{position:static}}
-@font-face{font-family:Noticons;src:url(https://wordpress.com/i/noticons/Noticons.woff)}#jp-post-flair{padding-top:.5em}#content div.sharedaddy,#main div.sharedaddy,div.sharedaddy{clear:both}div.sharedaddy h3.sd-title{margin:0 0 1em 0;display:inline-block;line-height:1.2;font-size:9pt;font-weight:700}div.sharedaddy h3.sd-title:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;margin-bottom:1em}#wpadminbar li#wp-admin-bar-admin-bar-likes-widget{width:61px;overflow:hidden}#wpadminbar iframe.admin-bar-likes-widget{width:61px;height:28px;min-height:28px;border-width:0;position:absolute;top:0}div.jetpack-likes-widget-wrapper{width:100%;min-height:50px;position:relative}div.jetpack-likes-widget-wrapper .sd-link-color{font-size:12px}div.jetpack-likes-widget-wrapper.slim-likes-widget{width:1px;min-height:0}div.jetpack-comment-likes-widget-wrapper{width:100%;position:relative;min-height:31px}div.jetpack-comment-likes-widget-wrapper iframe{margin-bottom:0}#likes-other-gravatars{display:none;position:absolute;padding:10px 10px 12px 10px;background-color:#2e4453;border-width:0;box-shadow:0 0 10px #2e4453;box-shadow:0 0 10px rgba(46,68,83,.6);min-width:130px;z-index:1000}#likes-other-gravatars *{line-height:normal}#likes-other-gravatars .likes-text{color:#fff;font-size:12px;padding-bottom:8px}#likes-other-gravatars li,#likes-other-gravatars ul{margin:0;padding:0;text-indent:0;list-style-type:none}#likes-other-gravatars li::before{content:""}#likes-other-gravatars ul.wpl-avatars{overflow:auto;display:block;max-height:190px}#likes-other-gravatars ul.wpl-avatars li{width:32px;height:32px;float:right;margin:0 0 5px 5px}#likes-other-gravatars ul.wpl-avatars li a{margin:0 0 0 2px;border-bottom:none!important;display:block}#likes-other-gravatars ul.wpl-avatars li a img{background:100% 0;border:none;margin:0!important;padding:0!important;position:static}div.sd-box{border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.13)}.comment-likes-widget,.entry-content .post-likes-widget,.post-likes-widget{margin:0;border-width:0;display:block}.comment-likes-widget-placeholder,.post-likes-widget-placeholder{margin:0;border-width:0;position:relative}.comment-likes-widget-placeholder{height:18px;position:absolute;display:flex;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;margin-top:4px}.comment-likes-widget-placeholder::before{-webkit-font-smoothing:antialiased;font-family:Noticons;font-size:20px;line-height:.9;color:#5cb5d4;content:'\f408';width:16px;display:inline-block;vertical-align:middle}.post-likes-widget-placeholder .button{display:none}.comment-likes-widget-placeholder .loading,.post-likes-widget-placeholder .loading{color:#999;font-size:12px}.comment-likes-widget-placeholder .loading{padding-right:5px;margin-top:2px;align-self:center;color:#4e4e4e}.slim-likes-widget .post-likes-widget{width:auto;float:none}div.sharedaddy.sd-like-enabled .sd-like h3{display:none}div.sharedaddy.sd-like-enabled .sd-like .post-likes-widget{width:100%;float:none;position:absolute;top:0}.comment-likes-widget{width:100%}.cs-rating,.pd-rating{display:block!important}.sd-gplus .sd-title{display:none}
-.jp-related-posts-i2__row{display:flex;margin-top:1.5rem}.jp-related-posts-i2__row:first-child{margin-top:0}.jp-related-posts-i2__post{flex-grow:1;flex-basis:0;margin:0 10px;display:flex;flex-direction:column;padding-right:0}.jp-related-posts-i2__row[data-post-count="3"] .jp-related-posts-i2__post{max-width:calc(33% - 20px)}.jp-related-posts-i2__row[data-post-count="1"] .jp-related-posts-i2__post,.jp-related-posts-i2__row[data-post-count="2"] .jp-related-posts-i2__post{max-width:calc(50% - 20px)}.jp-related-posts-i2__post-context,.jp-related-posts-i2__post-date,.jp-related-posts-i2__post-heading,.jp-related-posts-i2__post-img-link{flex-direction:row;display:block}.jp-related-posts-i2__post-heading{margin:.5rem 0;font-size:1rem;line-height:1.2em}.jp-related-posts-i2__post-link{display:block;width:100%;line-height:1.2em}.jp-related-posts-i2__post-img-link{order:-1;line-height:1em}.jp-relatedposts-i2[data-layout=list] .jp-related-posts-i2__post{max-width:none;margin:0}.jp-relatedposts-i2[data-layout=list].jp-related-posts-i2__post-img-link{margin-top:1rem}@media only screen and (max-width:640px){.jp-related-posts-i2__row{margin-top:0;display:block}.jp-related-posts-i2__row[data-post-count] .jp-related-posts-i2__post{max-width:none;margin:0;margin-top:1rem}.jp-related-posts-i2__post-img-link{margin-top:1rem}}.jp-relatedposts:after{content:'';display:block;clear:both}#jp-relatedposts h3.jp-relatedposts-headline{margin:0 0 1em 0;display:inline-block;float:right;font-size:9pt;font-weight:700;font-family:inherit}#jp-relatedposts h3.jp-relatedposts-headline em:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.2);margin-bottom:1em}#jp-relatedposts h3.jp-relatedposts-headline em{font-style:normal;font-weight:700}#jp-relatedposts .jp-relatedposts-items{clear:right}#jp-relatedposts .jp-relatedposts-items-visual{margin-left:-20px}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{float:right;width:33%;margin:0 0 1em;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post{padding-left:20px;-moz-opacity:.8;opacity:.8}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n+4),#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post:nth-child(3n+4){clear:both}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover .jp-relatedposts-post-title a{text-decoration:underline}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover{-moz-opacity:1;opacity:1}#jp-relatedposts .jp-relatedposts-items p,#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{font-size:14px;line-height:20px;margin:0}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs{position:relative}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs a.jp-relatedposts-post-aoverlay{position:absolute;top:0;bottom:0;right:0;left:0;display:block;border-bottom:0}#jp-relatedposts .jp-relatedposts-items p{margin-bottom:0}#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{text-transform:none;margin:0;font-family:inherit;display:block;max-width:100%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a{font-size:inherit;font-weight:400;text-decoration:none;-moz-opacity:1;opacity:1}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a:hover{text-decoration:underline}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post span{display:block;max-width:90%;overflow:hidden;text-overflow:ellipsis}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post span{max-width:100%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-context,#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{opacity:.6}.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{display:none}#jp-relatedposts .jp-relatedposts-items-visual div.jp-relatedposts-post-thumbs p.jp-relatedposts-post-excerpt{display:none}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs p.jp-relatedposts-post-excerpt{overflow:hidden}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs span{margin-bottom:1em}#jp-relatedposts .jp-relatedposts-list .jp-relatedposts-post{clear:both;width:100%}#jp-relatedposts .jp-relatedposts-list .jp-relatedposts-post img.jp-relatedposts-post-img{float:right;overflow:hidden;max-width:33%;margin-left:3%}#jp-relatedposts .jp-relatedposts-list h4.jp-relatedposts-post-title{display:inline-block;max-width:63%}@media only screen and (max-width:640px){#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{width:50%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n){clear:right}#jp-relatedposts .jp-relatedposts-items-visual{margin-left:20px}}@media only screen and (max-width:320px){#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{width:100%;clear:both;margin:0 0 1em}#jp-relatedposts .jp-relatedposts-list .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-list h4.jp-relatedposts-post-title{float:none;max-width:100%;margin-left:0}}
-#jp-post-flair{padding-top:.5em}#content div.sharedaddy,#main div.sharedaddy,div.sharedaddy{clear:both}div.sharedaddy h3.sd-title{margin:0 0 1em 0;display:inline-block;line-height:1.2;font-size:9pt;font-weight:700}div.sharedaddy h3.sd-title:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;margin-bottom:1em}body.highlander-light h3.sd-title:before{border-top:1px solid rgba(0,0,0,.2)}body.highlander-dark h3.sd-title:before{border-top:1px solid rgba(255,255,255,.4)}.sd-content ul{padding:0!important;margin:0 0 .7em 0!important;list-style:none!important}.sd-content ul li{display:inline-block}.sd-content ul li.share-deprecated{opacity:.5}.sd-content ul li.share-deprecated a span{text-decoration:line-through}.sd-block.sd-gplus{margin:0 0 .5em 0}.sd-gplus .sd-content{font-size:12px}#sharing_email .sharing_send,.sd-content ul li .option a.share-ustom,.sd-content ul li a.sd-button,.sd-content ul li.advanced a.share-more,.sd-content ul li.preview-item div.option.option-smart-off a,.sd-social-icon .sd-content ul li a.sd-button,.sd-social-icon-text .sd-content ul li a.sd-button,.sd-social-official .sd-content>ul>li .digg_button>a,.sd-social-official .sd-content>ul>li>a.sd-button,.sd-social-text .sd-content ul li a.sd-button{text-decoration:none!important;display:inline-block;font-size:12px;font-family:"Open Sans",sans-serif;font-weight:400;border-radius:3px;color:#777!important;background:#f8f8f8;border:1px solid #ccc;box-shadow:0 1px 0 rgba(0,0,0,.08);text-shadow:none;line-height:23px;padding:1px 5px 0 8px}.sd-content ul li .option a.share-ustom span,.sd-content ul li a.sd-button>span,.sd-content ul li.advanced a.share-more span,.sd-content ul li.preview-item div.option.option-smart-off a span,.sd-social-icon-text .sd-content ul li a.sd-button>span,.sd-social-official .sd-content>ul>li .digg_button>a span,.sd-social-official .sd-content>ul>li>a.sd-button span,.sd-social-text .sd-content ul li a.sd-button span{line-height:23px}.sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a,.sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button,.sd-social-official .sd-content>ul>li .digg_button>a,.sd-social-official .sd-content>ul>li>a.sd-button{line-height:17px;box-shadow:none;vertical-align:top}.sd-social-official .sd-content ul li a.sd-button>span{line-height:17px}.sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a:before,.sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button:before,.sd-social-official .sd-content>ul>li .digg_button>a:before,.sd-social-official .sd-content>ul>li>a.sd-button:before{margin-bottom:-1px}.sd-social-icon .sd-content ul li a.sd-button:active,.sd-social-icon .sd-content ul li a.sd-button:hover,.sd-social-icon-text .sd-content ul li a.sd-button:active,.sd-social-icon-text .sd-content ul li a.sd-button:hover,.sd-social-official .sd-content>ul>li .digg_button>a:active,.sd-social-official .sd-content>ul>li .digg_button>a:hover,.sd-social-official .sd-content>ul>li>a.sd-button:active,.sd-social-official .sd-content>ul>li>a.sd-button:hover,.sd-social-text .sd-content ul li a.sd-button:active,.sd-social-text .sd-content ul li a.sd-button:hover{color:#555;background:#fafafa;border:1px solid #999}.sd-social-icon .sd-content ul li a.sd-button:active,.sd-social-icon-text .sd-content ul li a.sd-button:active,.sd-social-official .sd-content>ul>li .digg_button>a:active,.sd-social-official .sd-content>ul>li>a.sd-button:active,.sd-social-text .sd-content ul li a.sd-button:active{box-shadow:inset 0 1px 0 rgba(0,0,0,.16)}.sd-content ul li a.sd-button:before{display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font:normal 18px/1 social-logos;vertical-align:top;text-align:center}.sd-social-icon-text ul li a.sd-button:before{position:relative;top:2px}@media screen and (-webkit-min-device-pixel-ratio:0){.sd-content ul li a.sd-button:before{position:relative;top:2px}}.sd-social-official ul li a.sd-button:before{position:relative;top:-2px}@media screen and (-webkit-min-device-pixel-ratio:0){.sd-social-official ul li a.sd-button:before{top:0}}.sd-content ul li{margin:0 0 5px 5px;padding:0}.jp-sharing-input-touch .sd-content ul li{padding-right:10px}.sd-content ul li.preview-item a.sd-button span,.sd-social-icon-text .sd-content ul li a span,.sd-social-official .sd-content ul li a.sd-button span{margin-right:3px}.sd-content ul li.preview-item.no-icon a.sd-button span{margin-right:0}.sd-content ul li.no-icon a:before,.sd-social-text .sd-content ul li a:before{display:none}body .sd-content ul li.share-custom.no-icon a span,body .sd-social-text .sd-content ul li.share-custom a span{background-image:none;background-position:-500px -500px!important;background-repeat:no-repeat!important;padding-right:0;height:0;line-height:inherit}.sd-social-icon .sd-content ul li a.share-more{position:relative;top:-4px}@media screen and (-webkit-min-device-pixel-ratio:0){.sd-social-icon .sd-content ul li a.share-more{top:2px}}@-moz-document url-prefix(){.sd-social-icon .sd-content ul li a.share-more{top:2px}}.sd-social-icon .sd-content ul li a.share-more span{margin-right:3px}.sd-content ul li.share-print div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-print a:before,.sd-social-icon-text .sd-content li.share-print a:before,.sd-social-official .sd-content li.share-print a:before,.sd-social-text .sd-content ul li.share-print a:before{content:'\f469'}.sd-content ul li.share-email div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-email a:before,.sd-social-icon-text .sd-content li.share-email a:before,.sd-social-official .sd-content li.share-email a:before,.sd-social-text .sd-content ul li.share-email a:before{content:'\f410'}.sd-content ul li.share-linkedin div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-linkedin a:before,.sd-social-icon-text .sd-content li.share-linkedin a:before,.sd-social-text .sd-content ul li.share-linkedin a:before{content:'\f207'}.sd-content ul li.share-twitter div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-twitter a:before,.sd-social-icon-text .sd-content li.share-twitter a:before,.sd-social-text .sd-content ul li.share-twitter a:before{content:'\f202'}.sd-content ul li.share-reddit div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-reddit a:before,.sd-social-icon-text .sd-content li.share-reddit a:before,.sd-social-text .sd-content ul li.share-reddit a:before{content:'\f222'}.sd-content ul li.share-tumblr div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-tumblr a:before,.sd-social-icon-text .sd-content li.share-tumblr a:before,.sd-social-text .sd-content ul li.share-tumblr a:before{content:'\f607'}.sd-content ul li.share-pocket div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-pocket a:before,.sd-social-icon-text .sd-content li.share-pocket a:before,.sd-social-text .sd-content ul li.share-pocket a:before{content:'\f224'}.sd-content ul li.share-pinterest div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-pinterest a:before,.sd-social-icon-text .sd-content li.share-pinterest a:before,.sd-social-text .sd-content ul li.share-pinterest a:before{content:'\f210'}.sd-content ul li.share-facebook div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-facebook a:before,.sd-social-icon-text .sd-content li.share-facebook a:before,.sd-social-text .sd-content ul li.share-facebook a:before{content:'\f203'}.sd-content ul li.share-press-this div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-press-this a:before,.sd-social-icon-text .sd-content li.share-press-this a:before,.sd-social-official .sd-content li.share-press-this a:before,.sd-social-text .sd-content ul li.share-press-this a:before{content:'\f205'}.sd-social-official .sd-content li.share-press-this a:before{color:#2ba1cb}.sd-content ul li.share-telegram div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-telegram a:before,.sd-social-icon-text .sd-content li.share-telegram a:before,.sd-social-official .sd-content li.share-telegram a:before,.sd-social-text .sd-content ul li.share-telegram a:before{content:'\f606'}.sd-social-official .sd-content li.share-telegram a:before{color:#08c}.sd-content ul li.share-skype div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-skype a:before,.sd-social-icon-text .sd-content li.share-skype a:before,.sd-social-text .sd-content ul li.share-skype a:before{content:'\f220'}.sd-content ul li.advanced a.share-more:before,.sd-social-icon .sd-content ul a.share-more:before,.sd-social-icon-text .sd-content a.share-more:before,.sd-social-official .sd-content a.share-more:before,.sd-social-text .sd-content ul a.share-more:before{content:'\f415'}.sd-social-official .sd-content a.share-more:before{color:#2ba1cb}.sd-content ul li.share-jetpack-whatsapp div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-jetpack-whatsapp a:before,.sd-social-icon-text .sd-content li.share-jetpack-whatsapp a:before,.sd-social-official .sd-content li.share-jetpack-whatsapp a:before,.sd-social-text .sd-content ul li.share-jetpack-whatsapp a:before{content:'\f608'}.sd-social-official .sd-content li.share-jetpack-whatsapp a:before{color:#43d854}.sd-social-icon .sd-content ul li[class*=share-].share-jetpack-whatsapp a.sd-button{background:#43d854;color:#fff!important}.sd-content ul li.share-deprecated div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-deprecated a:before,.sd-social-icon-text .sd-content li.share-deprecated a:before,.sd-social-official .sd-content li.share-deprecated a:before{width:1em;height:1em;content:"\1F6AB"}.sd-social .sd-button .share-count{background:#2ea2cc;color:#fff;border-radius:10px;display:inline-block;text-align:center;font-size:10px;padding:1px 3px;line-height:1}.sd-social-official .sd-content ul,.sd-social-official .sd-content ul li{line-height:25px!important}.sd-social-official .sd-content>ul>li>a.sd-button span{line-height:1}.sd-social-official .sd-content ul:after{content:".";display:block;height:0;clear:both;visibility:hidden}.sd-social-official .sd-content li.share-press-this a{margin:0 0 5px 0}.sd-social-official .sd-content ul>li{display:block;float:right;margin:0 0 5px 10px!important;height:25px}.sd-social-official .fb-share-button>span{vertical-align:top!important}.sd-social-official .sd-content .pocket_button iframe{width:98px}.reddit_button iframe{margin-top:1px}.linkedin_button>span,.pinterest_button,.pocket_button iframe,.twitter_button{margin:0!important}.sd-social-official .sd-content .share-skype{width:55px}body .sd-social-official li a.share-more,body .sd-social-official li.share-custom a,body .sd-social-official li.share-digg a,body .sd-social-official li.share-email a,body .sd-social-official li.share-press-this a,body .sd-social-official li.share-print{position:relative;top:0}body .sd-social-icon .sd-content li.share-custom>a{padding:2px 3px 0 3px;position:relative;top:4px}body .sd-content ul li.share-custom a.share-icon span,body .sd-social-icon .sd-content li.share-custom a span,body .sd-social-icon-text .sd-content li.share-custom a span,body .sd-social-official .sd-content li.share-custom a span,body .sd-social-text .sd-content li.share-custom a span{background-size:16px 16px;background-repeat:no-repeat;margin-right:0;padding:0 19px 0 0;display:inline-block;height:21px;line-height:16px}body .sd-social-icon .sd-content li.share-custom a span{width:0}body .sd-social-icon .sd-content li.share-custom a span{padding-right:16px!important}.sharing-hidden .inner{position:absolute;z-index:2;border:1px solid #ccc;padding:10px;background:#fff;box-shadow:0 5px 20px rgba(0,0,0,.2);border-radius:2px;margin-top:5px;max-width:400px}.sharing-hidden .inner ul{margin:0!important}.sd-social-official .sd-content .sharing-hidden ul>li.share-end{clear:both;margin:0!important;height:0!important}.sharing-hidden .inner:after,.sharing-hidden .inner:before{position:absolute;z-index:1;top:-8px;right:20px;width:0;height:0;border-right:6px solid transparent;border-left:6px solid transparent;border-bottom:8px solid #ccc;content:"";display:block}.sharing-hidden .inner:after{z-index:2;top:-7px;border-right:6px solid transparent;border-left:6px solid transparent;border-bottom:8px solid #fff}.sharing-hidden ul{margin:0}.sd-social-icon .sd-content ul li[class*=share-] a,.sd-social-icon .sd-content ul li[class*=share-] a:hover,.sd-social-icon .sd-content ul li[class*=share-] div.option a{border-radius:50%;-webkit-border-radius:50%;border:0;box-shadow:none;padding:7px;position:relative;top:-2px;line-height:1;width:auto;height:auto;margin-bottom:0}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button>span,.sd-social-icon .sd-content ul li[class*=share-] div.option a span{line-height:1}.sd-social-icon .sd-content ul li[class*=share-] a:hover,.sd-social-icon .sd-content ul li[class*=share-] div.option a:hover{border:none;opacity:.6}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button:before{top:1px}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button.share-custom{padding:8px 8px 6px 8px;top:5px}.sd-social-icon .sd-content ul li a.sd-button.share-more{margin-right:10px}.sd-social-icon .sd-content ul li:first-child a.sd-button.share-more{margin-right:0}.sd-social-icon .sd-button span.share-count{position:absolute;bottom:0;left:0;border-radius:0;background:#555;font-size:9px}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button{background:#e9e9e9;margin-top:2px;text-indent:0}.sd-social-icon .sd-content ul li[class*=share-].share-tumblr a.sd-button{background:#2c4762;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-facebook a.sd-button{background:#3b5998;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-twitter a.sd-button{background:#00acee;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-pinterest a.sd-button{background:#ca1f27;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-digg a.sd-button{color:#555!important}.sd-social-icon .sd-content ul li[class*=share-].share-press-this a.sd-button{background:#1e8cbe;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-telegram a.sd-button{background:#08c;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-linkedin a.sd-button{background:#0077b5;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-pocket a.sd-button{background:#ee4056;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-reddit a.sd-button{background:#cee3f8;color:#555!important}.sd-social-icon .sd-content ul li[class*=share-].share-skype a.sd-button{background:#00aff0;color:#fff!important}.sharing-screen-reader-text{clip:rect(1px,1px,1px,1px);position:absolute!important;height:1px;width:1px;overflow:hidden}.sharing-screen-reader-text:active,.sharing-screen-reader-text:focus,.sharing-screen-reader-text:hover{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:14px;font-weight:700;height:auto;right:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}#sharing_email{width:342px;position:absolute;z-index:1001;border:1px solid #ccc;padding:15px;background:#fff;box-shadow:0 5px 20px rgba(0,0,0,.2);text-align:right}div.sharedaddy.sharedaddy-dark #sharing_email{border-color:#fff}#sharing_email .errors{color:#fff;background-color:#771a09;font-size:12px;padding:5px 8px;line-height:1;margin:10px 0 0 0}#sharing_email label{font-size:12px;color:#333;font-weight:700;display:block;padding:0 0 4px 0;text-align:right;text-shadow:none}#sharing_email form{margin:0}#sharing_email input[type=email],#sharing_email input[type=text]{width:100%;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;border:1px solid #ccc;margin-bottom:1em;background:#fff;font-size:12px;color:#333;max-width:none;padding:1px 3px}#jetpack-source_f_name{display:none!important;position:absolute!important;right:-9000px}#sharing_email .sharing_cancel{padding:0 1em 0 0;font-size:12px;text-shadow:none}#sharing_email .recaptcha{width:312px;height:123px;margin:0 0 1em 0}
-.slideshow-window{background-color:#222;border:20px solid #222;border-radius:10px;height:0;margin-bottom:20px;overflow:hidden;padding-top:30px!important;padding-bottom:56.25%!important;position:relative;z-index:1}.slideshow-window.slideshow-white{background-color:#fff;border-color:#fff}.slideshow-window,.slideshow-window *{box-sizing:content-box}.slideshow-loading{height:100%;text-align:center;margin:auto}body div.slideshow-window * img{background-color:transparent!important;background-image:none!important;border-width:0!important;display:block;margin:0 auto;max-width:100%;max-height:100%;padding:0!important;position:relative;transform:translateY(-50%);top:50%}.slideshow-loading img{vertical-align:middle}.slideshow-slide{display:none;height:100%!important;right:0;margin:auto;position:absolute;text-align:center;top:0;width:100%!important}.slideshow-slide img{vertical-align:middle}.slideshow-line-height-hack{overflow:hidden;width:0;font-size:0}.slideshow-slide-caption{font-size:13px;font-family:"Helvetica Neue",sans-serif;color:#f7f7f7;text-shadow:#222 -1px 1px 2px;line-height:25px;height:25px;position:absolute;bottom:5px;right:0;z-index:100;width:100%;text-align:center}.slideshow-controls{z-index:1000;position:absolute;bottom:30px;margin:auto;text-align:center;width:100%;opacity:.5;direction:rtl;transition:.3s opacity ease-out}.slideshow-window:hover .slideshow-controls{opacity:1}body div div.slideshow-controls a,body div div.slideshow-controls a:hover{border:2px solid rgba(255,255,255,.1)!important;background-color:#000!important;background-color:rgba(0,0,0,.6)!important;background-image:url(../modules/shortcodes/img/slideshow-controls.png)!important;background-repeat:no-repeat;background-size:142px 16px!important;background-position:-34px 8px!important;color:#222!important;margin:0 5px!important;padding:0!important;display:inline-block!important;zoom:1;height:32px!important;width:32px!important;line-height:32px!important;text-align:center!important;border-radius:10em!important;transition:.3s border-color ease-out}@media only screen and (-webkit-min-device-pixel-ratio:1.5){body div div.slideshow-controls a,body div div.slideshow-controls a:hover{background-image:url(../modules/shortcodes/img/slideshow-controls-2x.png)!important}}body div div.slideshow-controls a:hover{border-color:rgba(255,255,255,1)!important}body div div.slideshow-controls a:first-child{background-position:-76px 8px!important}body div div.slideshow-controls a:last-child{background-position:-117px 8px!important}body div div.slideshow-controls a:nth-child(2){background-position:-34px 8px!important}body div div.slideshow-controls a.running{background-position:-34px 8px!important}body div div.slideshow-controls a.paused{background-position:9px 8px!important}.slideshow-controls a img{border:50px dotted #f0f}
-body.presentation-wrapper-fullscreen-parent,html.presentation-wrapper-fullscreen-parent{overflow:hidden!important}.presentation-wrapper-fullscreen-parent #wpadminbar{display:none}.presentation-wrapper-fullscreen,.presentation-wrapper-fullscreen-parent{min-width:100%!important;min-height:100%!important;position:absolute!important;top:0!important;left:0!important;bottom:0!important;right:0!important;margin:0!important;padding:0!important;z-index:10000!important}.presentation-wrapper-fullscreen{background-color:grey;border:none!important}.presentation-wrapper-fullscreen .nav-arrow-left,.presentation-wrapper-fullscreen .nav-arrow-right{z-index:20001}.presentation-wrapper-fullscreen .nav-fullscreen-button{z-index:20002}.presentation-wrapper{margin:20px auto;border:1px solid #e5e5e5;overflow:hidden;line-height:normal}.presentation{position:relative;margin:0;overflow:hidden;outline:0}.presentation,.presentation .step{background-repeat:no-repeat;background-position:center;background-size:100% 100%}.presentation .step.fade:not(.active){opacity:0}.presentation .slide-content{padding:30px}.presentation .nav-arrow-left,.presentation .nav-arrow-right,.presentation .nav-fullscreen-button{position:absolute;width:34px;background-repeat:no-repeat;z-index:2;opacity:0;transition:opacity .25s}.presentation .nav-arrow-left,.presentation .nav-arrow-right{height:100%;background-image:url(../modules/shortcodes/images/slide-nav.png);background-size:450% 61px}.presentation .nav-arrow-left{right:0;background-position:4px 50%}.presentation .nav-arrow-right{left:0;background-position:-120px 50%}.presentation .nav-fullscreen-button{width:32px;height:32px;margin:4px;bottom:0;left:0;z-index:3;background-image:url(../modules/shortcodes/images/expand.png);background-size:100% 100%}.presentation:hover .nav-arrow-left,.presentation:hover .nav-arrow-right{opacity:1}.presentation:hover .nav-fullscreen-button{opacity:.8}.presentation-wrapper-fullscreen .nav-fullscreen-button{background-image:url(../modules/shortcodes/images/collapse.png)}.presentation .autoplay-overlay{height:15%;width:80%;margin:30% 10%;position:relative;z-index:100;display:table;border-radius:50px;background-color:#e5e5e5;background-color:rgba(0,0,0,.75);transition:opacity .5s}.presentation .autoplay-overlay .overlay-msg{position:relative;display:table-cell;text-align:center;vertical-align:middle;color:#fff}.presentation .will-fade{opacity:0}.presentation .do-fade{opacity:1;transition:opacity .5s}
-div.jetpack-quiz{border:1px solid #deede3;background-color:#f3f3f3;padding:1em;line-height:1.3em;margin-bottom:2em;border-radius:.2em}div.jetpack-quiz div.jetpack-quiz-question{margin-bottom:.5em;font-weight:700}div.jetpack-quiz div.jetpack-quiz-answer{cursor:pointer;margin-bottom:.5em;padding:1em 1em 1em 0;border-bottom:1px dotted #999}div.jetpack-quiz div.jetpack-quiz-answer.last{padding-bottom:0;margin-bottom:0;border-bottom:0}div.jetpack-quiz div.jetpack-quiz-answer.correct{color:green}div.jetpack-quiz div.jetpack-quiz-answer.wrong{color:red}div.jetpack-quiz div.jetpack-quiz-answer div.jetpack-quiz-explanation{display:none}div.jetpack-quiz div.jetpack-quiz-answer.correct div.jetpack-quiz-explanation,div.jetpack-quiz div.jetpack-quiz-answer.wrong div.jetpack-quiz-explanation{display:block;color:#000;font-size:90%;margin-top:1em}div.jetpack-quiz div.jetpack-quiz-answer.correct div.jetpack-quiz-explanation tt,div.jetpack-quiz div.jetpack-quiz-answer.wrong div.jetpack-quiz-explanation tt{font-size:85%}div.jetpack-quiz pre{font:15px Monaco,Consolas,"Andale Mono","DejaVu Sans Mono",monospace;background:100% 0;margin:0;padding:0}
-#subscribe-email input{width:95%}.comment-subscription-form{margin-bottom:1em}.comment-subscription-form .subscribe-label{display:inline!important}.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;width:1px;word-wrap:normal!important}
-.jetpack-video-wrapper{margin-bottom:1.6em}.jetpack-video-wrapper>.wp-video,.jetpack-video-wrapper>embed,.jetpack-video-wrapper>iframe,.jetpack-video-wrapper>object{margin-bottom:0}
-.jetpack-social-navigation ul{display:block;margin:0 0 1.5em;padding:0}.jetpack-social-navigation li{display:inline-block;margin:0;line-height:1}.jetpack-social-navigation a{border:0;height:1em;text-decoration:none;width:1em}.jetpack-social-navigation-svg .icon{color:inherit;fill:currentColor;height:1em;vertical-align:middle;width:1em}.jetpack-social-navigation-genericons a:before{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:Genericons;font-size:1em;font-style:normal;font-weight:400;height:1em;line-height:1;speak:none;text-decoration:inherit;vertical-align:top;width:1em}.jetpack-social-navigation-genericons a:before{content:"\f415"}.jetpack-social-navigation-genericons a[href*="codepen.io"]:before{content:"\f216"}.jetpack-social-navigation-genericons a[href*="digg.com"]:before{content:"\f221"}.jetpack-social-navigation-genericons a[href*="dribbble.com"]:before{content:"\f201"}.jetpack-social-navigation-genericons a[href*="dropbox.com"]:before{content:"\f225"}.jetpack-social-navigation-genericons a[href*="mailto:"]:before{content:"\f410"}.jetpack-social-navigation-genericons a[href*="facebook.com"]:before{content:"\f203"}.jetpack-social-navigation-genericons a[href*="flickr.com"]:before{content:"\f211"}.jetpack-social-navigation-genericons a[href*="foursquare.com"]:before{content:"\f226"}.jetpack-social-navigation-genericons a[href*="github.com"]:before{content:"\f200"}.jetpack-social-navigation-genericons a[href*="plus.google.com"]:before{content:"\f206"}.jetpack-social-navigation-genericons a[href*="instagram.com"]:before{content:"\f215"}.jetpack-social-navigation-genericons a[href*="linkedin.com"]:before{content:"\f208"}.jetpack-social-navigation-genericons a[href*="path.com"]:before{content:"\f219"}.jetpack-social-navigation-genericons a[href*="pinterest."]:before{content:"\f210"}.jetpack-social-navigation-genericons a[href*="getpocket.com"]:before{content:"\f224"}.jetpack-social-navigation-genericons a[href*="polldaddy.com"]:before{content:"\f217"}.jetpack-social-navigation-genericons a[href*="reddit.com"]:before{content:"\f222"}.jetpack-social-navigation-genericons a[href$="/feed/"]:before{content:"\f413"}.jetpack-social-navigation-genericons a[href*="skype:"]:before{content:"\f220"}.jetpack-social-navigation-genericons a[href*="spotify.com"]:before{content:"\f515"}.jetpack-social-navigation-genericons a[href*="stumbleupon.com"]:before{content:"\f223"}.jetpack-social-navigation-genericons a[href*="tumblr.com"]:before{content:"\f214"}.jetpack-social-navigation-genericons a[href*="twitch.tv"]:before{content:"\f516"}.jetpack-social-navigation-genericons a[href*="twitter.com"]:before{content:"\f202"}.jetpack-social-navigation-genericons a[href*="vimeo.com"]:before{content:"\f212"}.jetpack-social-navigation-genericons a[href*="vine.co"]:before{content:"\f517"}.jetpack-social-navigation-genericons a[href*="wordpress.com"]:before,.jetpack-social-navigation-genericons a[href*="wordpress.org"]:before{content:"\f205"}.jetpack-social-navigation-genericons a[href*="youtube.com"]:before{content:"\f213"}
-.tiled-gallery{clear:both;margin:0 0 20px;overflow:hidden}.tiled-gallery img{margin:2px!important}.tiled-gallery .gallery-group{float:right;position:relative}.tiled-gallery .tiled-gallery-item{float:right;margin:0;position:relative;width:inherit}.tiled-gallery .gallery-row{overflow:hidden}.tiled-gallery .tiled-gallery-item a{background:100% 0;border:none;color:inherit;margin:0;padding:0;text-decoration:none;width:auto}.tiled-gallery .tiled-gallery-item img,.tiled-gallery .tiled-gallery-item img:hover{background:100% 0;border:none;box-shadow:none;max-width:100%;padding:0;vertical-align:middle}.tiled-gallery-caption{background:#eee;background:rgba(255,255,255,.8);color:#333;font-size:13px;font-weight:400;overflow:hidden;padding:10px 0;position:absolute;bottom:0;text-indent:10px;text-overflow:ellipsis;width:100%;white-space:nowrap}.tiled-gallery .tiled-gallery-item-small .tiled-gallery-caption{font-size:11px}.widget-gallery .tiled-gallery-unresized{visibility:hidden;height:0;overflow:hidden}.tiled-gallery .tiled-gallery-item img.grayscale{position:absolute;right:0;top:0}.tiled-gallery .tiled-gallery-item img.grayscale:hover{opacity:0}.tiled-gallery.type-circle .tiled-gallery-item img{border-radius:50%!important}.tiled-gallery.type-circle .tiled-gallery-caption{display:none;opacity:0}
-.jetpack-display-remote-posts{margin:5px 0 20px 0}.jetpack-display-remote-posts h4{font-size:90%;margin:5px 0;padding:0}.jetpack-display-remote-posts h4 a{text-decoration:none}.jetpack-display-remote-posts p{margin:0!important;padding:0;line-height:1.4em!important;font-size:90%}.jetpack-display-remote-posts img{max-width:100%}
-.widget-grofile h4{margin:1em 0 .5em}.widget-grofile ul.grofile-urls{margin-right:0;overflow:hidden}.widget-grofile ul.grofile-accounts li{list-style:none;display:inline}.widget-grofile ul.grofile-accounts li::before{content:""!important}.widget-grofile .grofile-accounts-logo{background-image:url(https://secure.gravatar.com/images/grav-share-sprite.png);background-repeat:no-repeat;width:16px;height:16px;float:right;margin-left:8px;margin-bottom:8px}.rtl .widget-grofile .grofile-accounts-logo{margin-right:8px;margin-left:0}.grofile-thumbnail{width:500px;max-width:100%}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.widget-grofile .grofile-accounts-logo{background-image:url(https://secure.gravatar.com/images/grav-share-sprite-2x.png);background-size:16px 784px}}
-div[class^=gr_custom_container]{border:1px solid gray;border-radius:10px;padding:10px 5px 10px 5px;background-color:#fff;color:#000}div[class^=gr_custom_container] a{color:#000}h2[class^=gr_custom_header]{display:none}div[class^=gr_custom_each_container]{width:100%;clear:both;margin-bottom:10px;overflow:auto;padding-bottom:4px;border-bottom:1px solid #aaa}div[class^=gr_custom_book_container]{float:left;overflow:hidden;height:60px;margin-right:4px;width:39px}div[class^=gr_custom_author]{font-size:10px}div[class^=gr_custom_tags]{font-size:10px;color:gray}div[class^=gr_custom_rating]{display:none}
-.widget_wpcom_social_media_icons_widget ul{list-style-type:none;margin-right:0}.widget_wpcom_social_media_icons_widget ul li{border:0 none;display:inline;margin-left:.5em}.widget_wpcom_social_media_icons_widget li a{border:0 none;text-decoration:none}.widget_wpcom_social_media_icons_widget .genericon{font-family:Genericons}.widget_wpcom_social_media_icons_widget .screen-reader-text{clip:rect(1px,1px,1px,1px);position:absolute!important;height:1px;width:1px;overflow:hidden}.widget_wpcom_social_media_icons_widget .screen-reader-text:active,.widget_wpcom_social_media_icons_widget .screen-reader-text:focus,.widget_wpcom_social_media_icons_widget .screen-reader-text:hover{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:14px;font-size:.875rem;font-weight:700;height:auto;right:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}
-.widgets-grid-layout{width:100%}.widgets-grid-layout:after,.widgets-grid-layout:before{content:" ";display:table}.widgets-grid-layout:after{clear:both}.widget-grid-view-image{float:right;max-width:50%}.widget-grid-view-image a{display:block;margin:0 0 4px 2px}.widget-grid-view-image:nth-child(even){float:left}.widget-grid-view-image:nth-child(even) a{margin:0 2px 4px 0}.widgets-grid-layout .widget-grid-view-image img{max-width:100%;height:auto}.widgets-multi-column-grid ul{overflow:hidden;padding:0;margin:0;list-style-type:none}.widgets-multi-column-grid ul li{background:100% 0;clear:none;float:right;margin:0 0 -3px -5px;padding:0 0 6px 8px;border:none;list-style-type:none!important}.widgets-multi-column-grid ul li a{background:100% 0;margin:0;padding:0;border:0}.widgets-multi-column-grid .avatar{vertical-align:middle}.widgets-list-layout{padding:0;margin:0;list-style-type:none}.widgets-list-layout li:after,.widgets-list-layout li:before{content:"";display:table}.widgets-list-layout li:after{clear:both}.widgets-list-layout li{zoom:1;margin-bottom:1em;list-style-type:none!important}.widgets-list-layout .widgets-list-layout-blavatar{float:right;width:21.276596%;max-width:40px;height:auto}.widgets-list-layout-links{float:left;width:73.404255%}.widgets-list-layout span{opacity:.5}.widgets-list-layout span:hover{opacity:.8}
-.jetpack-image-container:after{clear:both}.jetpack-image-container:after,.jetpack-image-container:before{display:table;content:""}
-.widgets-multi-column-grid ul{overflow:hidden;padding:0;margin:0;list-style-type:none}.widgets-multi-column-grid ul li{background:100% 0;clear:none;float:right;margin:0 0 -3px -5px;padding:0 0 6px 8px;border:none;list-style-type:none!important}.widgets-multi-column-grid ul li a{background:100% 0;margin:0;padding:0;border:0}.widgets-multi-column-grid .avatar{vertical-align:middle}.widget_jetpack_my_community .avatar-240,.widget_jetpack_my_community .avatar-48{max-width:48px;max-height:48px}
-.widget.widget_authors li>ul,.widget_authors>ul{margin-right:inherit;padding-right:0}.widget_authors ul li li{padding-right:0}.widget_authors>ul>li{margin-bottom:1em;list-style:none}.widget_authors>ul>li+li{border-top:0}.widget.widget_authors img{margin-left:5px;margin-bottom:5px;vertical-align:middle;box-shadow:none}
-.wpcnt{text-align:center;line-height:2}.wpa{position:relative;overflow:hidden;display:inline-block;max-width:100%}.wpa-about{position:absolute;top:5px;right:0;left:0;display:block;margin-top:0;color:#888;font:10px/1 "Open Sans",Arial,sans-serif!important;text-align:right!important;text-decoration:none!important;opacity:.85;border-bottom:none!important;box-shadow:none!important}.wpa .u>div{display:block;margin-top:5px;margin-bottom:1em}div.wpa>div{margin-top:20px}.wpa .u .adsbygoogle{display:block;margin-top:17px;margin-bottom:1em;background-color:transparent}
-.widget_eu_cookie_law_widget{border:none;bottom:1em;display:none;right:1em;margin:0;padding:0;position:fixed;left:1em;width:auto;z-index:50001}.widget_eu_cookie_law_widget.widget.top{bottom:auto;top:1em}.admin-bar .widget_eu_cookie_law_widget.widget.top{top:3em}#eu-cookie-law{background-color:#fff;border:1px solid #dedede;color:#2e4467;font-size:12px;line-height:1.5;overflow:hidden;padding:6px 15px 6px 6px;position:relative}#eu-cookie-law a,#eu-cookie-law a:active,#eu-cookie-law a:visited{color:inherit;cursor:inherit;text-decoration:underline}#eu-cookie-law a:hover{cursor:pointer;text-decoration:none}#eu-cookie-law.negative{background-color:#000;border:none;color:#fff}#eu-cookie-law form{margin-bottom:0;position:static}#eu-cookie-law input,#eu-cookie-law input:focus,#eu-cookie-law input:hover{background:#f3f3f3;border:1px solid #dedede;border-radius:4px;-moz-border-radius:3px;-webkit-border-radius:3px;color:#2e4453;cursor:pointer;display:inline;float:left;font-family:inherit;font-size:14px;font-weight:inherit;line-height:inherit;margin:0 5% 0 0;padding:8px 12px;position:static;text-transform:none}#eu-cookie-law.negative input,#eu-cookie-law.negative input:focus,#eu-cookie-law.negative input:hover{background:#282828;border-color:#535353;color:#fff}@media (max-width:600px){#eu-cookie-law{padding-bottom:55px}#eu-cookie-law input.accept{bottom:8px;position:absolute;left:8px}}
-.flickr-images{text-align:center}.flickr-size-thumbnail .flickr-images{align-content:space-between;align-items:center;display:flex;flex-flow:row wrap;justify-content:center}.flickr-images img{max-width:100%;margin:5px}
-.jetpack-search-filters-widget__sub-heading{font-size:inherit;font-weight:700;margin:0 0 .5em;padding:0}.jetpack-search-form+.jetpack-search-filters-widget__sub-heading{margin-top:1.5em;margin-bottom:.5em!important}.jetpack-search-filters-widget__clear{margin-top:.5em;margin-bottom:.5em}.jetpack-search-sort-wrapper{margin-top:1em;margin-bottom:1.5em}.jetpack-search-sort-wrapper label{display:inherit}.widget_search .jetpack-search-filters-widget__filter-list input[type=checkbox]{width:auto;height:auto}ul.jetpack-search-filters-widget__filter-list li{border:none;padding:0;list-style:none}ul.jetpack-search-filters-widget__filter-list li a{text-decoration:none}ul.jetpack-search-filters-widget__filter-list li a:hover{box-shadow:none}ul.jetpack-search-filters-widget__filter-list li label{font-weight:inherit;display:inherit}.jetpack-search-filters-widget__filter-list{list-style:none}ul.jetpack-search-filters-widget__filter-list{margin-bottom:1.5em}body.search .jetpack-search-form input[name="s"]:-ms-input-placeholder{color:transparent}body.search .jetpack-search-form input[name="s"]::-ms-input-placeholder{color:transparent}body.search .jetpack-search-form input[name="s"]::placeholder{color:transparent}body.search .jetpack-search-form input[name="s"].show-placeholder:-ms-input-placeholder{color:inherit}body.search .jetpack-search-form input[name="s"].show-placeholder::-ms-input-placeholder{color:inherit}body.search .jetpack-search-form input[name="s"].show-placeholder::placeholder{color:inherit}
-@media screen and (min-width:400px){.widget.jetpack-simple-payments .jetpack-simple-payments-product{flex-direction:column}.widget.jetpack-simple-payments .jetpack-simple-payments-details{padding-right:0}}
-.jetpack_widget_social_icons li,.jetpack_widget_social_icons ul{list-style:none}.jetpack_widget_social_icons ul{display:block;margin:0 0 1.5em;padding:0}.jetpack_widget_social_icons ul li{border:0;display:inline-block;line-height:1;margin:0;padding:0}.jetpack_widget_social_icons ul li:after,.jetpack_widget_social_icons ul li:before{display:none}.jetpack_widget_social_icons a{border:0;box-shadow:none;display:block;height:24px;text-decoration:none;width:24px}.jetpack_widget_social_icons svg{color:inherit;fill:currentColor;height:inherit;vertical-align:middle;width:inherit}.jetpack_widget_social_icons ul.size-small a{height:24px;width:24px}.jetpack_widget_social_icons ul.size-medium a{height:32px;width:32px}.jetpack_widget_social_icons ul.size-large a{height:48px;width:48px}.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;width:1px;word-wrap:normal!important} \ No newline at end of file
diff --git a/plugins/jetpack/css/jetpack.css b/plugins/jetpack/css/jetpack.css
deleted file mode 100644
index ee4a6acc..00000000
--- a/plugins/jetpack/css/jetpack.css
+++ /dev/null
@@ -1,30 +0,0 @@
-/*!
-* Do not modify this file directly. It is concatenated from individual module CSS files.
-*/
-.jp-carousel-wrap *{line-height:inherit}.jp-carousel-overlay{background:#000}div.jp-carousel-fadeaway{background:-moz-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));position:fixed;bottom:0;z-index:2147483647;width:100%;height:15px}.jp-carousel-next-button span,.jp-carousel-previous-button span{background:url(../modules/carousel/images/arrows.png) no-repeat center center;background-size:200px 126px}.jp-carousel-msg{font-family:"Open Sans",sans-serif;font-style:normal;display:inline-block;line-height:19px;padding:11px 15px;font-size:14px;text-align:center;margin:25px 20px 0 2px;background-color:#fff;border-left:4px solid #ffba00;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.jp-carousel-next-button span,.jp-carousel-previous-button span{background-image:url(../modules/carousel/images/arrows-2x.png)}}.jp-carousel-wrap{font-family:"Helvetica Neue",sans-serif!important}.jp-carousel-info{position:absolute;bottom:0;text-align:left!important;-webkit-font-smoothing:subpixel-antialiased!important}.jp-carousel-info ::selection{background:#68c9e8;color:#fff}.jp-carousel-info ::-moz-selection{background:#68c9e8;color:#fff}.jp-carousel-photo-info{position:relative;left:25%;width:50%}.jp-carousel-transitions .jp-carousel-photo-info{transition:.4s ease-out}.jp-carousel-info h2{background:0 0!important;border:none!important;color:#999;display:block!important;font:normal 13px/1.25em "Helvetica Neue",sans-serif!important;letter-spacing:0!important;margin:7px 0 0 0!important;padding:10px 0 0!important;overflow:hidden;text-align:left;text-shadow:none!important;text-transform:none!important;-webkit-font-smoothing:subpixel-antialiased}.jp-carousel-next-button,.jp-carousel-previous-button{text-indent:-9999px;overflow:hidden;cursor:pointer}.jp-carousel-next-button span,.jp-carousel-previous-button span{position:absolute;top:0;bottom:0;width:82px;zoom:1;opacity:.2}.jp-carousel-transitions .jp-carousel-next-button span,.jp-carousel-transitions .jp-carousel-previous-button span{transition:.5s opacity ease-out}.jp-carousel-next-button:hover span,.jp-carousel-previous-button:hover span{opacity:.6}.jp-carousel-next-button span{background-position:-110px center;right:0}.jp-carousel-previous-button span{background-position:-10px center;left:0}.jp-carousel-buttons{margin:-18px -20px 15px;padding:8px 10px;border-bottom:1px solid #222;background:#222;text-align:center}div.jp-carousel-buttons a{border:none!important;color:#999;font:normal 11px/1.2em "Helvetica Neue",sans-serif!important;letter-spacing:0!important;padding:5px 2px 5px 0;text-decoration:none!important;text-shadow:none!important;vertical-align:middle;-webkit-font-smoothing:subpixel-antialiased}div.jp-carousel-buttons a:hover{color:#68c9e8;border:none!important}.jp-carousel-transitions div.jp-carousel-buttons a:hover{transition:none!important}.jp-carousel-next-button,.jp-carousel-previous-button,.jp-carousel-slide,.jp-carousel-slide img{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.jp-carousel-slide{position:fixed;width:0;bottom:0;background-color:#000;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px}.jp-carousel-transitions .jp-carousel-slide{transition:.3s ease-out}.jp-carousel-slide.selected{position:absolute!important;opacity:1}.jp-carousel-slide{opacity:.25}.jp-carousel-slide img{display:block;width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important;background:0 0!important;border:none!important;padding:0!important;box-shadow:0 2px 8px rgba(0,0,0,.1);zoom:1}.jp-carousel-transitions .jp-carousel-slide{transition:opacity .4s linear}.jp-carousel-close-hint{color:#999;cursor:default;letter-spacing:0!important;padding:.35em 0 0;position:absolute;text-align:right;width:90%}.jp-carousel-transitions .jp-carousel-close-hint{transition:color .2s linear}.jp-carousel-close-hint span{cursor:pointer;background-color:#000;background-color:rgba(0,0,0,.8);display:inline-block;height:22px;font:400 24px/1 "Helvetica Neue",sans-serif!important;line-height:22px;margin:0 0 0 .4em;text-align:center;vertical-align:middle;width:22px;border-radius:4px}.jp-carousel-transitions .jp-carousel-close-hint span{transition:border-color .2s linear}.jp-carousel-close-hint:hover{cursor:default;color:#fff}.jp-carousel-close-hint:hover span{border-color:#fff}a.jp-carousel-image-download,div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{background:url(../modules/carousel/images/carousel-sprite.png?5) no-repeat;background-size:16px 200px}div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{margin:0 14px 0 0!important}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-color:#303030;padding-right:8px!important;border-radius:2px;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{margin:0 2px 0 -12px!important}div.jp-carousel-buttons a.jp-carousel-reblog,div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover{background-position:6px -36px;padding-right:auto!important;padding-left:26px!important;color:#999}div.jp-carousel-buttons a.jp-carousel-commentlink{background-position:0 -156px;padding-left:19px!important}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover{cursor:default}div.jp-carousel-buttons a.jp-carousel-reblog:hover{background-position:6px -56px;color:#68c9e8}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){a.jp-carousel-image-download,div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{background-image:url(../modules/carousel/images/carousel-sprite-2x.png?5)}}div#carousel-reblog-box{background:#222;background:-moz-linear-gradient(bottom,#222,#333);background:-webkit-gradient(linear,left bottom,left top,from(#222),to(#333));padding:3px 0 0;display:none;margin:5px auto 0;border-radius:2px;box-shadow:0 0 20px rgba(0,0,0,.9);height:74px;width:565px}#carousel-reblog-box textarea{background:#999;font:13px/1.4 "Helvetica Neue",sans-serif!important;color:#444;padding:3px 6px;width:370px;height:48px;float:left;margin:6px 9px 0 9px;border:1px solid #666;box-shadow:inset 2px 2px 2px rgba(0,0,0,.2);border-radius:2px}#carousel-reblog-box textarea:focus{background:#ccc;color:#222}#carousel-reblog-box label{color:#aaa;font-size:11px;padding-right:2px;padding-left:2px;display:inline;font-weight:400}#carousel-reblog-box select{width:110px;padding:0;font-size:12px;font-family:"Helvetica Neue",sans-serif!important;background:#333;color:#eee;border:1px solid #444;margin-top:5px}#carousel-reblog-box .submit,#wrapper #carousel-reblog-box p.response{float:left;width:154px;padding-top:0;padding-left:1px;overflow:hidden;height:34px;margin:3px 0 0 2px!important}#wrapper #carousel-reblog-box p.response{font-size:13px;clear:none;padding-left:2px;height:34px;color:#aaa}#carousel-reblog-box input#carousel-reblog-submit,#jp-carousel-comment-form-button-submit{font:13px/24px "Helvetica Neue",sans-serif!important;margin-top:8px;padding:0 10px!important;border-radius:1em;height:24px;color:#333;cursor:pointer;font-weight:400;background:#aaa;background:-moz-linear-gradient(bottom,#aaa,#ccc);background:-webkit-gradient(linear,left bottom,left top,from(#aaa),to(#ccc));border:1px solid #444}#carousel-reblog-box input#carousel-reblog-submit:hover,#jp-carousel-comment-form-button-submit:hover{background:#ccc;background:-moz-linear-gradient(bottom,#ccc,#eee);background:-webkit-gradient(linear,left bottom,left top,from(#ccc),to(#eee))}#carousel-reblog-box .canceltext{color:#aaa;font-size:11px;line-height:24px}#carousel-reblog-box .canceltext a{color:#fff}.jp-carousel-titleanddesc{border-top:1px solid #222;color:#999;font-size:15px;padding-top:24px;margin-bottom:20px;font-weight:400}.jp-carousel-titleanddesc-title{font:300 1.5em/1.1 "Helvetica Neue",sans-serif!important;text-transform:none!important;color:#fff;margin:0 0 15px;padding:0}.jp-carousel-titleanddesc-desc p{color:#999;line-height:1.4;margin-bottom:.75em}.jp-carousel-comments p a,.jp-carousel-info h2 a,.jp-carousel-titleanddesc p a{color:#fff!important;border:none!important;text-decoration:underline!important;font-weight:400!important;font-style:normal!important}.jp-carousel-titleanddesc p b,.jp-carousel-titleanddesc p strong{font-weight:700;color:#999}.jp-carousel-titleanddesc p em,.jp-carousel-titleanddesc p i{font-style:italic;color:#999}.jp-carousel-comments p a:hover,.jp-carousel-info h2 a:hover,.jp-carousel-titleanddesc p a:hover{color:#68c9e8!important}.jp-carousel-titleanddesc p:empty{display:none}.jp-carousel-left-column-wrapper h1:after,.jp-carousel-left-column-wrapper h1:before,.jp-carousel-photo-info h1:after,.jp-carousel-photo-info h1:before{content:none!important}.jp-carousel-image-meta{background:#111;border:1px solid #222;color:#fff;font-size:13px;font:12px/1.4 "Helvetica Neue",sans-serif!important;overflow:hidden;padding:18px 20px;width:209px!important}.jp-carousel-image-meta h5,.jp-carousel-image-meta li{font-family:"Helvetica Neue",sans-serif!important;position:inherit!important;top:auto!important;right:auto!important;left:auto!important;bottom:auto!important;background:0 0!important;border:none!important;font-weight:400!important;line-height:1.3em!important}.jp-carousel-image-meta ul{margin:0!important;padding:0!important;list-style:none!important}.jp-carousel-image-meta li{width:48%!important;display:inline-block!important;vertical-align:top!important;margin:0 2% 15px 0!important;color:#fff!important;font-size:13px!important}.jp-carousel-image-meta h5{color:#999!important;text-transform:uppercase!important;font-size:10px!important;margin:0 0 2px!important;letter-spacing:.1em!important}a.jp-carousel-image-download{padding-left:23px;display:inline-block;clear:both;color:#999;line-height:1;font-weight:400;font-size:13px;text-decoration:none;background-position:0 -82px}a.jp-carousel-image-download span.photo-size{font-size:11px;border-radius:1em;margin-left:2px;display:inline-block}a.jp-carousel-image-download span.photo-size-times{padding:0 1px 0 2px}a.jp-carousel-image-download:hover{background-position:0 -122px;color:#68c9e8;border:none!important}.jp-carousel-image-map{position:relative;margin:-20px -20px 20px;border-bottom:1px solid rgba(255,255,255,.17);height:154px}.jp-carousel-image-map img.gmap-main{border-top-left-radius:6px;border-right:1px solid rgba(255,255,255,.17)}.jp-carousel-image-map div.gmap-topright{width:94px;height:154px;position:absolute;top:0;right:0}.jp-carousel-image-map div.imgclip{overflow:hidden;border-top-right-radius:6px}.jp-carousel-image-map div.gmap-topright img{margin-left:-40px}.jp-carousel-image-map img.gmap-bottomright{position:absolute;top:96px;right:0}.jp-carousel-comments{font:15px/1.7 "Helvetica Neue",sans-serif!important;font-weight:400;background:none transparent}.jp-carousel-comments p a:active,.jp-carousel-comments p a:focus,.jp-carousel-comments p a:hover{color:#68c9e8!important}.jp-carousel-comment{background:none transparent;color:#999;margin-bottom:20px;clear:left;overflow:auto;width:100%}.jp-carousel-comment p{color:#999!important}.jp-carousel-comment .comment-author{font-size:13px;font-weight:400;padding:0;width:auto;display:inline;float:none;border:none;margin:0}.jp-carousel-comment .comment-author a{color:#fff}.jp-carousel-comment .comment-gravatar{float:left}.jp-carousel-comment .comment-content{border:none;margin-left:85px;padding:0}.jp-carousel-comment .avatar{margin:0 20px 0 0;border-radius:4px;border:none!important;padding:0!important;background-color:transparent!important}.jp-carousel-comment .comment-date{color:#999;margin-top:4px;font-size:11px;display:inline;float:right}#jp-carousel-comment-form{margin:0 0 10px!important;float:left;width:100%}textarea#jp-carousel-comment-form-comment-field{background:rgba(34,34,34,.9);border:1px solid #3a3a3a;color:#aaa;font:15px/1.4 "Helvetica Neue",sans-serif!important;width:100%;padding:10px 10px 5px;margin:0;float:none;height:147px;box-shadow:inset 2px 2px 2px rgba(0,0,0,.2);border-radius:3px;overflow:hidden;box-sizing:border-box}textarea#jp-carousel-comment-form-comment-field::-webkit-input-placeholder{color:#555}textarea#jp-carousel-comment-form-comment-field:focus{background:#ccc;color:#222}textarea#jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder{color:#aaa}#jp-carousel-comment-form-spinner{color:#fff;margin:22px 0 0 10px;display:block;width:20px;height:20px;float:left}#jp-carousel-comment-form-submit-and-info-wrapper{display:none;overflow:hidden;width:100%}#jp-carousel-comment-form-commenting-as input{background:rgba(34,34,34,.9);border:1px solid #3a3a3a;color:#aaa;font:13px/1.4 "Helvetica Neue",sans-serif!important;padding:3px 6px;float:left;box-shadow:inset 2px 2px 2px rgba(0,0,0,.2);border-radius:2px;width:285px}#jp-carousel-comment-form-commenting-as input:focus{background:#ccc;color:#222}#jp-carousel-comment-form-commenting-as p{font:400 13px/1.7 "Helvetica Neue",sans-serif!important;margin:22px 0 0;float:left}#jp-carousel-comment-form-commenting-as fieldset{float:left;border:none;margin:20px 0 0 0;padding:0}#jp-carousel-comment-form-commenting-as fieldset{clear:both}#jp-carousel-comment-form-commenting-as label{font:400 13px/1.7 "Helvetica Neue",sans-serif!important;margin:0 20px 3px 0;float:left;width:100px}#jp-carousel-comment-form-button-submit{margin-top:20px;float:right}#js-carousel-comment-form-container{margin-bottom:15px;overflow:auto;width:100%}#jp-carousel-comment-form-container{margin-bottom:15px;overflow:auto;width:100%}#jp-carousel-comment-post-results{display:none;overflow:auto;width:100%}#jp-carousel-comment-post-results span{display:block;text-align:center;margin-top:20px;width:100%;overflow:auto;padding:1em 0;box-sizing:border-box;background:rgba(0,0,0,.7);border-radius:2px;font:13px/1.4 "Helvetica Neue",sans-serif!important;border:1px solid rgba(255,255,255,.17);box-shadow:inset 0 0 5px 5px rgba(0,0,0,1)}.jp-carousel-comment-post-error{color:#df4926}#jp-carousel-comments-closed{display:none;color:#999}#jp-carousel-comments-loading{font:400 15px/1.7 "Helvetica Neue",sans-serif!important;display:none;color:#999;text-align:left;margin-bottom:20px}.jp-carousel-light .jp-carousel-overlay{background:#fff}.jp-carousel-light .jp-carousel-next-button:hover span,.jp-carousel-light .jp-carousel-previous-button:hover span{opacity:.8}.jp-carousel-light .jp-carousel-close-hint:hover,.jp-carousel-light .jp-carousel-titleanddesc div{color:#000!important}.jp-carousel-light .jp-carousel-comment .comment-author a,.jp-carousel-light .jp-carousel-comments p a,.jp-carousel-light .jp-carousel-info h2 a,.jp-carousel-light .jp-carousel-titleanddesc p a{color:#1e8cbe!important}.jp-carousel-light .jp-carousel-comment .comment-author a:hover,.jp-carousel-light .jp-carousel-comments p a:hover,.jp-carousel-light .jp-carousel-info h2 a:hover,.jp-carousel-light .jp-carousel-titleanddesc p a:hover{color:#f1831e!important}.jp-carousel-light .jp-carousel-comment,.jp-carousel-light .jp-carousel-comment p,.jp-carousel-light .jp-carousel-info h2,.jp-carousel-light .jp-carousel-titleanddesc,.jp-carousel-light .jp-carousel-titleanddesc p,.jp-carousel-light .jp-carousel-titleanddesc p b,.jp-carousel-light .jp-carousel-titleanddesc p em,.jp-carousel-light .jp-carousel-titleanddesc p i,.jp-carousel-light .jp-carousel-titleanddesc p strong,.jp-carousel-light div.jp-carousel-buttons a{color:#666}.jp-carousel-light .jp-carousel-buttons{border-bottom-color:#f0f0f0;background:#f5f5f5}.jp-carousel-light div.jp-carousel-buttons a:hover{text-decoration:none;color:#f1831e}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog,.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog:hover{background-position:4px -56px;padding-left:24px!important}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-color:#2ea2cc;color:#fff}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-commentlink{background-position:0 -176px}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-position:5px -36px}.jp-carousel-light div#carousel-reblog-box{background:#eee;background:-moz-linear-gradient(bottom,#ececec,#f7f7f7);background:-webkit-gradient(linear,left bottom,left top,from(#ececec),to(#f7f7f7));box-shadow:0 2px 10px rgba(0,0,0,.1);border:1px solid #ddd}.jp-carousel-light #carousel-reblog-box textarea{border:1px inset #ccc;color:#666;border:1px solid #cfcfcf;background:#fff}.jp-carousel-light #carousel-reblog-box .canceltext{color:#888}.jp-carousel-light #carousel-reblog-box .canceltext a{color:#666}.jp-carousel-light #carousel-reblog-box select{background:#eee;color:#333;border:1px solid #aaa}#jp-carousel-comment-form-button-submit,.jp-carousel-light #carousel-reblog-box input#carousel-reblog-submit{color:#333;background:#fff;background:-moz-linear-gradient(bottom,#ddd,#fff);background:-webkit-gradient(linear,left bottom,left top,from(#ddd),to(#fff));border:1px solid #aaa}.jp-carousel-light .jp-carousel-image-meta{background:#fafafa;border:1px solid #eee;border-top-color:#f5f5f5;border-left-color:#f5f5f5;color:#333}.jp-carousel-light .jp-carousel-image-meta li{color:#000!important}.jp-carousel-light .jp-carousel-close-hint{color:#ccc}.jp-carousel-light .jp-carousel-close-hint span{background-color:#fff;border-color:#ccc}.jp-carousel-light #jp-carousel-comment-form-comment-field::-webkit-input-placeholder{color:#aaa}.jp-carousel-light #jp-carousel-comment-form-comment-field:focus{color:#333}.jp-carousel-light #jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder{color:#ddd}.jp-carousel-light a.jp-carousel-image-download{background-position:0 -122px}.jp-carousel-light a.jp-carousel-image-download:hover{background-position:0 -122px;color:#f1831e}.jp-carousel-light textarea#jp-carousel-comment-form-comment-field{background:#fbfbfb;color:#333;border:1px solid #dfdfdf;box-shadow:inset 2px 2px 2px rgba(0,0,0,.1)}.jp-carousel-light #jp-carousel-comment-form-commenting-as input{background:#fbfbfb;border:1px solid #dfdfdf;color:#333;box-shadow:inset 2px 2px 2px rgba(0,0,0,.1)}.jp-carousel-light #jp-carousel-comment-form-commenting-as input:focus{background:#fbfbfb;color:#333}.jp-carousel-light #jp-carousel-comment-post-results span{background:#f7f7f7;border:1px solid #dfdfdf;box-shadow:inset 0 0 5px rgba(0,0,0,.05)}.jp-carousel-light .jp-carousel-slide{background-color:#fff}.jp-carousel-light .jp-carousel-titleanddesc{border-top:1px solid #eee}.jp-carousel-light .jp-carousel-fadeaway{background:-moz-linear-gradient(bottom,rgba(255,255,255,.75),rgba(255,255,255,0));background:-webkit-gradient(linear,left bottom,left top,from(rgba(255,255,255,.75)),to(rgba(255,255,255,0)))}@media only screen and (max-width:760px){.jp-carousel-info{margin:0 10px!important}.jp-carousel-next-button,.jp-carousel-previous-button{display:none!important}.jp-carousel-buttons{display:none!important}.jp-carousel-image-meta{float:none!important;width:100%!important;box-sizing:border-box}.jp-carousel-close-hint{font-weight:800!important;font-size:26px!important;position:fixed!important;top:-10px}.jp-carousel-slide img{opacity:1}.jp-carousel-wrap{background-color:#000}.jp-carousel-fadeaway{display:none}#jp-carousel-comment-form-container{display:none!important}.jp-carousel-titleanddesc{padding-top:0!important;border:none!important}.jp-carousel-titleanddesc-title{font-size:1em!important}.jp-carousel-left-column-wrapper{padding:0;width:100%!important}.jp-carousel-photo-info{left:0!important;width:100%!important}}
-.contact-form .clear-form{clear:both}.contact-form input:-ms-input-placeholder{transition:opacity .3s ease-out}.contact-form input::-ms-input-placeholder{transition:opacity .3s ease-out}.contact-form input::placeholder{transition:opacity .3s ease-out}.contact-form input:hover:-ms-input-placeholder{opacity:.5}.contact-form input:hover::-ms-input-placeholder{opacity:.5}.contact-form input:hover::placeholder{opacity:.5}.contact-form input:focus:-ms-input-placeholder{opacity:.3}.contact-form input:focus::-ms-input-placeholder{opacity:.3}.contact-form input:focus::placeholder{opacity:.3}.contact-form input[type=email],.contact-form input[type=text],.contact-form input[type=url]{width:300px;max-width:98%;margin-bottom:13px}.contact-form select{margin-bottom:13px}.contact-form textarea{height:200px;width:80%;float:none;margin-bottom:13px}.contact-form input[type=checkbox],.contact-form input[type=radio]{float:none;margin-bottom:13px}.contact-form label{margin-bottom:3px;float:none;font-weight:700;display:block}.contact-form label.checkbox,.contact-form label.radio{margin-bottom:3px;float:none;font-weight:700;display:inline-block}.contact-form label span{color:#aaa;margin-left:4px;font-weight:400}.contact-form-submission{margin-bottom:4em;padding:1.5em 1em}.contact-form-submission p{margin:0 auto;word-wrap:break-word}.form-errors .form-error-message{color:red}.textwidget .contact-form input[type=email],.textwidget .contact-form input[type=text],.textwidget .contact-form input[type=url],.textwidget .contact-form textarea{width:250px;max-width:100%;box-sizing:border-box}#jetpack-check-feedback-spam{margin:1px 8px 0 0}.jetpack-check-feedback-spam-spinner{display:inline-block;margin-top:7px}
-.infinite-loader{color:#000;display:block;height:28px;text-indent:-9999px}#infinite-handle span{background:#333;border-radius:1px;color:#eee;cursor:pointer;font-size:13px;padding:6px 16px}#infinite-handle span button,#infinite-handle span button:focus,#infinite-handle span button:hover{display:inline;position:static;padding:0;margin:0;border:none;line-height:inherit;background:0 0;color:inherit;cursor:inherit;font-size:inherit;font-weight:inherit;font-family:inherit}#infinite-handle span button::-moz-focus-inner{margin:0;padding:0;border:none}@media (max-width:800px){#infinite-handle span:before{display:none}#infinite-handle span{display:block}}#infinite-footer{position:fixed;bottom:-50px;left:0;width:100%}#infinite-footer a{text-decoration:none}#infinite-footer .blog-credits a:hover,#infinite-footer .blog-info a:hover{color:#444;text-decoration:underline}#infinite-footer .container{background:rgba(255,255,255,.8);border-color:#ccc;border-color:rgba(0,0,0,.1);border-style:solid;border-width:1px 0 0;box-sizing:border-box;margin:0 auto;overflow:hidden;padding:1px 20px;width:780px}#infinite-footer .blog-credits,#infinite-footer .blog-info{box-sizing:border-box;line-height:25px}#infinite-footer .blog-info{float:left;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:40%}#infinite-footer .blog-credits{font-weight:400;float:right;width:60%}#infinite-footer .blog-info a{color:#111;font-size:14px;font-weight:700}#infinite-footer .blog-credits{color:#888;font-size:12px;text-align:right}#infinite-footer .blog-credits a{color:#666}.infinity-end.neverending #infinite-footer{display:none}@media (max-width:640px){#infinite-footer .container{box-sizing:border-box;width:100%}#infinite-footer .blog-info{width:30%}#infinite-footer .blog-credits{width:70%}#infinite-footer .blog-credits,#infinite-footer .blog-info a{font-size:10px}}@media (max-width:640px){#infinite-footer{position:static}}
-@font-face{font-family:Noticons;src:url(https://wordpress.com/i/noticons/Noticons.woff)}#jp-post-flair{padding-top:.5em}#content div.sharedaddy,#main div.sharedaddy,div.sharedaddy{clear:both}div.sharedaddy h3.sd-title{margin:0 0 1em 0;display:inline-block;line-height:1.2;font-size:9pt;font-weight:700}div.sharedaddy h3.sd-title:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;margin-bottom:1em}#wpadminbar li#wp-admin-bar-admin-bar-likes-widget{width:61px;overflow:hidden}#wpadminbar iframe.admin-bar-likes-widget{width:61px;height:28px;min-height:28px;border-width:0;position:absolute;top:0}div.jetpack-likes-widget-wrapper{width:100%;min-height:50px;position:relative}div.jetpack-likes-widget-wrapper .sd-link-color{font-size:12px}div.jetpack-likes-widget-wrapper.slim-likes-widget{width:1px;min-height:0}div.jetpack-comment-likes-widget-wrapper{width:100%;position:relative;min-height:31px}div.jetpack-comment-likes-widget-wrapper iframe{margin-bottom:0}#likes-other-gravatars{display:none;position:absolute;padding:10px 10px 12px 10px;background-color:#2e4453;border-width:0;box-shadow:0 0 10px #2e4453;box-shadow:0 0 10px rgba(46,68,83,.6);min-width:130px;z-index:1000}#likes-other-gravatars *{line-height:normal}#likes-other-gravatars .likes-text{color:#fff;font-size:12px;padding-bottom:8px}#likes-other-gravatars li,#likes-other-gravatars ul{margin:0;padding:0;text-indent:0;list-style-type:none}#likes-other-gravatars li::before{content:""}#likes-other-gravatars ul.wpl-avatars{overflow:auto;display:block;max-height:190px}#likes-other-gravatars ul.wpl-avatars li{width:32px;height:32px;float:left;margin:0 5px 5px 0}#likes-other-gravatars ul.wpl-avatars li a{margin:0 2px 0 0;border-bottom:none!important;display:block}#likes-other-gravatars ul.wpl-avatars li a img{background:0 0;border:none;margin:0!important;padding:0!important;position:static}div.sd-box{border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.13)}.comment-likes-widget,.entry-content .post-likes-widget,.post-likes-widget{margin:0;border-width:0;display:block}.comment-likes-widget-placeholder,.post-likes-widget-placeholder{margin:0;border-width:0;position:relative}.comment-likes-widget-placeholder{height:18px;position:absolute;display:flex;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;margin-top:4px}.comment-likes-widget-placeholder::before{-webkit-font-smoothing:antialiased;font-family:Noticons;font-size:20px;line-height:.9;color:#5cb5d4;content:'\f408';width:16px;display:inline-block;vertical-align:middle}.post-likes-widget-placeholder .button{display:none}.comment-likes-widget-placeholder .loading,.post-likes-widget-placeholder .loading{color:#999;font-size:12px}.comment-likes-widget-placeholder .loading{padding-left:5px;margin-top:2px;align-self:center;color:#4e4e4e}.slim-likes-widget .post-likes-widget{width:auto;float:none}div.sharedaddy.sd-like-enabled .sd-like h3{display:none}div.sharedaddy.sd-like-enabled .sd-like .post-likes-widget{width:100%;float:none;position:absolute;top:0}.comment-likes-widget{width:100%}.cs-rating,.pd-rating{display:block!important}.sd-gplus .sd-title{display:none}
-.jp-related-posts-i2__row{display:flex;margin-top:1.5rem}.jp-related-posts-i2__row:first-child{margin-top:0}.jp-related-posts-i2__post{flex-grow:1;flex-basis:0;margin:0 10px;display:flex;flex-direction:column;padding-left:0}.jp-related-posts-i2__row[data-post-count="3"] .jp-related-posts-i2__post{max-width:calc(33% - 20px)}.jp-related-posts-i2__row[data-post-count="1"] .jp-related-posts-i2__post,.jp-related-posts-i2__row[data-post-count="2"] .jp-related-posts-i2__post{max-width:calc(50% - 20px)}.jp-related-posts-i2__post-context,.jp-related-posts-i2__post-date,.jp-related-posts-i2__post-heading,.jp-related-posts-i2__post-img-link{flex-direction:row;display:block}.jp-related-posts-i2__post-heading{margin:.5rem 0;font-size:1rem;line-height:1.2em}.jp-related-posts-i2__post-link{display:block;width:100%;line-height:1.2em}.jp-related-posts-i2__post-img-link{order:-1;line-height:1em}.jp-relatedposts-i2[data-layout=list] .jp-related-posts-i2__post{max-width:none;margin:0}.jp-relatedposts-i2[data-layout=list].jp-related-posts-i2__post-img-link{margin-top:1rem}@media only screen and (max-width:640px){.jp-related-posts-i2__row{margin-top:0;display:block}.jp-related-posts-i2__row[data-post-count] .jp-related-posts-i2__post{max-width:none;margin:0;margin-top:1rem}.jp-related-posts-i2__post-img-link{margin-top:1rem}}.jp-relatedposts:after{content:'';display:block;clear:both}#jp-relatedposts h3.jp-relatedposts-headline{margin:0 0 1em 0;display:inline-block;float:left;font-size:9pt;font-weight:700;font-family:inherit}#jp-relatedposts h3.jp-relatedposts-headline em:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.2);margin-bottom:1em}#jp-relatedposts h3.jp-relatedposts-headline em{font-style:normal;font-weight:700}#jp-relatedposts .jp-relatedposts-items{clear:left}#jp-relatedposts .jp-relatedposts-items-visual{margin-right:-20px}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{float:left;width:33%;margin:0 0 1em;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post{padding-right:20px;-moz-opacity:.8;opacity:.8}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n+4),#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post:nth-child(3n+4){clear:both}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover .jp-relatedposts-post-title a{text-decoration:underline}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover{-moz-opacity:1;opacity:1}#jp-relatedposts .jp-relatedposts-items p,#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{font-size:14px;line-height:20px;margin:0}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs{position:relative}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs a.jp-relatedposts-post-aoverlay{position:absolute;top:0;bottom:0;left:0;right:0;display:block;border-bottom:0}#jp-relatedposts .jp-relatedposts-items p{margin-bottom:0}#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{text-transform:none;margin:0;font-family:inherit;display:block;max-width:100%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a{font-size:inherit;font-weight:400;text-decoration:none;-moz-opacity:1;opacity:1}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a:hover{text-decoration:underline}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post span{display:block;max-width:90%;overflow:hidden;text-overflow:ellipsis}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post span{max-width:100%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-context,#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{opacity:.6}.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{display:none}#jp-relatedposts .jp-relatedposts-items-visual div.jp-relatedposts-post-thumbs p.jp-relatedposts-post-excerpt{display:none}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs p.jp-relatedposts-post-excerpt{overflow:hidden}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs span{margin-bottom:1em}#jp-relatedposts .jp-relatedposts-list .jp-relatedposts-post{clear:both;width:100%}#jp-relatedposts .jp-relatedposts-list .jp-relatedposts-post img.jp-relatedposts-post-img{float:left;overflow:hidden;max-width:33%;margin-right:3%}#jp-relatedposts .jp-relatedposts-list h4.jp-relatedposts-post-title{display:inline-block;max-width:63%}@media only screen and (max-width:640px){#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{width:50%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n){clear:left}#jp-relatedposts .jp-relatedposts-items-visual{margin-right:20px}}@media only screen and (max-width:320px){#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{width:100%;clear:both;margin:0 0 1em}#jp-relatedposts .jp-relatedposts-list .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-list h4.jp-relatedposts-post-title{float:none;max-width:100%;margin-right:0}}
-#jp-post-flair{padding-top:.5em}#content div.sharedaddy,#main div.sharedaddy,div.sharedaddy{clear:both}div.sharedaddy h3.sd-title{margin:0 0 1em 0;display:inline-block;line-height:1.2;font-size:9pt;font-weight:700}div.sharedaddy h3.sd-title:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;margin-bottom:1em}body.highlander-light h3.sd-title:before{border-top:1px solid rgba(0,0,0,.2)}body.highlander-dark h3.sd-title:before{border-top:1px solid rgba(255,255,255,.4)}.sd-content ul{padding:0!important;margin:0 0 .7em 0!important;list-style:none!important}.sd-content ul li{display:inline-block}.sd-content ul li.share-deprecated{opacity:.5}.sd-content ul li.share-deprecated a span{text-decoration:line-through}.sd-block.sd-gplus{margin:0 0 .5em 0}.sd-gplus .sd-content{font-size:12px}#sharing_email .sharing_send,.sd-content ul li .option a.share-ustom,.sd-content ul li a.sd-button,.sd-content ul li.advanced a.share-more,.sd-content ul li.preview-item div.option.option-smart-off a,.sd-social-icon .sd-content ul li a.sd-button,.sd-social-icon-text .sd-content ul li a.sd-button,.sd-social-official .sd-content>ul>li .digg_button>a,.sd-social-official .sd-content>ul>li>a.sd-button,.sd-social-text .sd-content ul li a.sd-button{text-decoration:none!important;display:inline-block;font-size:12px;font-family:"Open Sans",sans-serif;font-weight:400;border-radius:3px;color:#777!important;background:#f8f8f8;border:1px solid #ccc;box-shadow:0 1px 0 rgba(0,0,0,.08);text-shadow:none;line-height:23px;padding:1px 8px 0 5px}.sd-content ul li .option a.share-ustom span,.sd-content ul li a.sd-button>span,.sd-content ul li.advanced a.share-more span,.sd-content ul li.preview-item div.option.option-smart-off a span,.sd-social-icon-text .sd-content ul li a.sd-button>span,.sd-social-official .sd-content>ul>li .digg_button>a span,.sd-social-official .sd-content>ul>li>a.sd-button span,.sd-social-text .sd-content ul li a.sd-button span{line-height:23px}.sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a,.sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button,.sd-social-official .sd-content>ul>li .digg_button>a,.sd-social-official .sd-content>ul>li>a.sd-button{line-height:17px;box-shadow:none;vertical-align:top}.sd-social-official .sd-content ul li a.sd-button>span{line-height:17px}.sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a:before,.sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button:before,.sd-social-official .sd-content>ul>li .digg_button>a:before,.sd-social-official .sd-content>ul>li>a.sd-button:before{margin-bottom:-1px}.sd-social-icon .sd-content ul li a.sd-button:active,.sd-social-icon .sd-content ul li a.sd-button:hover,.sd-social-icon-text .sd-content ul li a.sd-button:active,.sd-social-icon-text .sd-content ul li a.sd-button:hover,.sd-social-official .sd-content>ul>li .digg_button>a:active,.sd-social-official .sd-content>ul>li .digg_button>a:hover,.sd-social-official .sd-content>ul>li>a.sd-button:active,.sd-social-official .sd-content>ul>li>a.sd-button:hover,.sd-social-text .sd-content ul li a.sd-button:active,.sd-social-text .sd-content ul li a.sd-button:hover{color:#555;background:#fafafa;border:1px solid #999}.sd-social-icon .sd-content ul li a.sd-button:active,.sd-social-icon-text .sd-content ul li a.sd-button:active,.sd-social-official .sd-content>ul>li .digg_button>a:active,.sd-social-official .sd-content>ul>li>a.sd-button:active,.sd-social-text .sd-content ul li a.sd-button:active{box-shadow:inset 0 1px 0 rgba(0,0,0,.16)}.sd-content ul li a.sd-button:before{display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font:normal 18px/1 social-logos;vertical-align:top;text-align:center}.sd-social-icon-text ul li a.sd-button:before{position:relative;top:2px}@media screen and (-webkit-min-device-pixel-ratio:0){.sd-content ul li a.sd-button:before{position:relative;top:2px}}.sd-social-official ul li a.sd-button:before{position:relative;top:-2px}@media screen and (-webkit-min-device-pixel-ratio:0){.sd-social-official ul li a.sd-button:before{top:0}}.sd-content ul li{margin:0 5px 5px 0;padding:0}.jp-sharing-input-touch .sd-content ul li{padding-left:10px}.sd-content ul li.preview-item a.sd-button span,.sd-social-icon-text .sd-content ul li a span,.sd-social-official .sd-content ul li a.sd-button span{margin-left:3px}.sd-content ul li.preview-item.no-icon a.sd-button span{margin-left:0}.sd-content ul li.no-icon a:before,.sd-social-text .sd-content ul li a:before{display:none}body .sd-content ul li.share-custom.no-icon a span,body .sd-social-text .sd-content ul li.share-custom a span{background-image:none;background-position:-500px -500px!important;background-repeat:no-repeat!important;padding-left:0;height:0;line-height:inherit}.sd-social-icon .sd-content ul li a.share-more{position:relative;top:-4px}@media screen and (-webkit-min-device-pixel-ratio:0){.sd-social-icon .sd-content ul li a.share-more{top:2px}}@-moz-document url-prefix(){.sd-social-icon .sd-content ul li a.share-more{top:2px}}.sd-social-icon .sd-content ul li a.share-more span{margin-left:3px}.sd-content ul li.share-print div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-print a:before,.sd-social-icon-text .sd-content li.share-print a:before,.sd-social-official .sd-content li.share-print a:before,.sd-social-text .sd-content ul li.share-print a:before{content:'\f469'}.sd-content ul li.share-email div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-email a:before,.sd-social-icon-text .sd-content li.share-email a:before,.sd-social-official .sd-content li.share-email a:before,.sd-social-text .sd-content ul li.share-email a:before{content:'\f410'}.sd-content ul li.share-linkedin div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-linkedin a:before,.sd-social-icon-text .sd-content li.share-linkedin a:before,.sd-social-text .sd-content ul li.share-linkedin a:before{content:'\f207'}.sd-content ul li.share-twitter div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-twitter a:before,.sd-social-icon-text .sd-content li.share-twitter a:before,.sd-social-text .sd-content ul li.share-twitter a:before{content:'\f202'}.sd-content ul li.share-reddit div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-reddit a:before,.sd-social-icon-text .sd-content li.share-reddit a:before,.sd-social-text .sd-content ul li.share-reddit a:before{content:'\f222'}.sd-content ul li.share-tumblr div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-tumblr a:before,.sd-social-icon-text .sd-content li.share-tumblr a:before,.sd-social-text .sd-content ul li.share-tumblr a:before{content:'\f607'}.sd-content ul li.share-pocket div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-pocket a:before,.sd-social-icon-text .sd-content li.share-pocket a:before,.sd-social-text .sd-content ul li.share-pocket a:before{content:'\f224'}.sd-content ul li.share-pinterest div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-pinterest a:before,.sd-social-icon-text .sd-content li.share-pinterest a:before,.sd-social-text .sd-content ul li.share-pinterest a:before{content:'\f210'}.sd-content ul li.share-facebook div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-facebook a:before,.sd-social-icon-text .sd-content li.share-facebook a:before,.sd-social-text .sd-content ul li.share-facebook a:before{content:'\f203'}.sd-content ul li.share-press-this div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-press-this a:before,.sd-social-icon-text .sd-content li.share-press-this a:before,.sd-social-official .sd-content li.share-press-this a:before,.sd-social-text .sd-content ul li.share-press-this a:before{content:'\f205'}.sd-social-official .sd-content li.share-press-this a:before{color:#2ba1cb}.sd-content ul li.share-telegram div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-telegram a:before,.sd-social-icon-text .sd-content li.share-telegram a:before,.sd-social-official .sd-content li.share-telegram a:before,.sd-social-text .sd-content ul li.share-telegram a:before{content:'\f606'}.sd-social-official .sd-content li.share-telegram a:before{color:#08c}.sd-content ul li.share-skype div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-skype a:before,.sd-social-icon-text .sd-content li.share-skype a:before,.sd-social-text .sd-content ul li.share-skype a:before{content:'\f220'}.sd-content ul li.advanced a.share-more:before,.sd-social-icon .sd-content ul a.share-more:before,.sd-social-icon-text .sd-content a.share-more:before,.sd-social-official .sd-content a.share-more:before,.sd-social-text .sd-content ul a.share-more:before{content:'\f415'}.sd-social-official .sd-content a.share-more:before{color:#2ba1cb}.sd-content ul li.share-jetpack-whatsapp div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-jetpack-whatsapp a:before,.sd-social-icon-text .sd-content li.share-jetpack-whatsapp a:before,.sd-social-official .sd-content li.share-jetpack-whatsapp a:before,.sd-social-text .sd-content ul li.share-jetpack-whatsapp a:before{content:'\f608'}.sd-social-official .sd-content li.share-jetpack-whatsapp a:before{color:#43d854}.sd-social-icon .sd-content ul li[class*=share-].share-jetpack-whatsapp a.sd-button{background:#43d854;color:#fff!important}.sd-content ul li.share-deprecated div.option.option-smart-off a:before,.sd-social-icon .sd-content ul li.share-deprecated a:before,.sd-social-icon-text .sd-content li.share-deprecated a:before,.sd-social-official .sd-content li.share-deprecated a:before{width:1em;height:1em;content:"\1F6AB"}.sd-social .sd-button .share-count{background:#2ea2cc;color:#fff;border-radius:10px;display:inline-block;text-align:center;font-size:10px;padding:1px 3px;line-height:1}.sd-social-official .sd-content ul,.sd-social-official .sd-content ul li{line-height:25px!important}.sd-social-official .sd-content>ul>li>a.sd-button span{line-height:1}.sd-social-official .sd-content ul:after{content:".";display:block;height:0;clear:both;visibility:hidden}.sd-social-official .sd-content li.share-press-this a{margin:0 0 5px 0}.sd-social-official .sd-content ul>li{display:block;float:left;margin:0 10px 5px 0!important;height:25px}.sd-social-official .fb-share-button>span{vertical-align:top!important}.sd-social-official .sd-content .pocket_button iframe{width:98px}.reddit_button iframe{margin-top:1px}.linkedin_button>span,.pinterest_button,.pocket_button iframe,.twitter_button{margin:0!important}.sd-social-official .sd-content .share-skype{width:55px}body .sd-social-official li a.share-more,body .sd-social-official li.share-custom a,body .sd-social-official li.share-digg a,body .sd-social-official li.share-email a,body .sd-social-official li.share-press-this a,body .sd-social-official li.share-print{position:relative;top:0}body .sd-social-icon .sd-content li.share-custom>a{padding:2px 3px 0 3px;position:relative;top:4px}body .sd-content ul li.share-custom a.share-icon span,body .sd-social-icon .sd-content li.share-custom a span,body .sd-social-icon-text .sd-content li.share-custom a span,body .sd-social-official .sd-content li.share-custom a span,body .sd-social-text .sd-content li.share-custom a span{background-size:16px 16px;background-repeat:no-repeat;margin-left:0;padding:0 0 0 19px;display:inline-block;height:21px;line-height:16px}body .sd-social-icon .sd-content li.share-custom a span{width:0}body .sd-social-icon .sd-content li.share-custom a span{padding-left:16px!important}.sharing-hidden .inner{position:absolute;z-index:2;border:1px solid #ccc;padding:10px;background:#fff;box-shadow:0 5px 20px rgba(0,0,0,.2);border-radius:2px;margin-top:5px;max-width:400px}.sharing-hidden .inner ul{margin:0!important}.sd-social-official .sd-content .sharing-hidden ul>li.share-end{clear:both;margin:0!important;height:0!important}.sharing-hidden .inner:after,.sharing-hidden .inner:before{position:absolute;z-index:1;top:-8px;left:20px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:8px solid #ccc;content:"";display:block}.sharing-hidden .inner:after{z-index:2;top:-7px;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:8px solid #fff}.sharing-hidden ul{margin:0}.sd-social-icon .sd-content ul li[class*=share-] a,.sd-social-icon .sd-content ul li[class*=share-] a:hover,.sd-social-icon .sd-content ul li[class*=share-] div.option a{border-radius:50%;-webkit-border-radius:50%;border:0;box-shadow:none;padding:7px;position:relative;top:-2px;line-height:1;width:auto;height:auto;margin-bottom:0}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button>span,.sd-social-icon .sd-content ul li[class*=share-] div.option a span{line-height:1}.sd-social-icon .sd-content ul li[class*=share-] a:hover,.sd-social-icon .sd-content ul li[class*=share-] div.option a:hover{border:none;opacity:.6}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button:before{top:1px}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button.share-custom{padding:8px 8px 6px 8px;top:5px}.sd-social-icon .sd-content ul li a.sd-button.share-more{margin-left:10px}.sd-social-icon .sd-content ul li:first-child a.sd-button.share-more{margin-left:0}.sd-social-icon .sd-button span.share-count{position:absolute;bottom:0;right:0;border-radius:0;background:#555;font-size:9px}.sd-social-icon .sd-content ul li[class*=share-] a.sd-button{background:#e9e9e9;margin-top:2px;text-indent:0}.sd-social-icon .sd-content ul li[class*=share-].share-tumblr a.sd-button{background:#2c4762;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-facebook a.sd-button{background:#3b5998;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-twitter a.sd-button{background:#00acee;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-pinterest a.sd-button{background:#ca1f27;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-digg a.sd-button{color:#555!important}.sd-social-icon .sd-content ul li[class*=share-].share-press-this a.sd-button{background:#1e8cbe;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-telegram a.sd-button{background:#08c;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-linkedin a.sd-button{background:#0077b5;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-pocket a.sd-button{background:#ee4056;color:#fff!important}.sd-social-icon .sd-content ul li[class*=share-].share-reddit a.sd-button{background:#cee3f8;color:#555!important}.sd-social-icon .sd-content ul li[class*=share-].share-skype a.sd-button{background:#00aff0;color:#fff!important}.sharing-screen-reader-text{clip:rect(1px,1px,1px,1px);position:absolute!important;height:1px;width:1px;overflow:hidden}.sharing-screen-reader-text:active,.sharing-screen-reader-text:focus,.sharing-screen-reader-text:hover{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:14px;font-weight:700;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}#sharing_email{width:342px;position:absolute;z-index:1001;border:1px solid #ccc;padding:15px;background:#fff;box-shadow:0 5px 20px rgba(0,0,0,.2);text-align:left}div.sharedaddy.sharedaddy-dark #sharing_email{border-color:#fff}#sharing_email .errors{color:#fff;background-color:#771a09;font-size:12px;padding:5px 8px;line-height:1;margin:10px 0 0 0}#sharing_email label{font-size:12px;color:#333;font-weight:700;display:block;padding:0 0 4px 0;text-align:left;text-shadow:none}#sharing_email form{margin:0}#sharing_email input[type=email],#sharing_email input[type=text]{width:100%;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;border:1px solid #ccc;margin-bottom:1em;background:#fff;font-size:12px;color:#333;max-width:none;padding:1px 3px}#jetpack-source_f_name{display:none!important;position:absolute!important;left:-9000px}#sharing_email .sharing_cancel{padding:0 0 0 1em;font-size:12px;text-shadow:none}#sharing_email .recaptcha{width:312px;height:123px;margin:0 0 1em 0}
-.slideshow-window{background-color:#222;border:20px solid #222;border-radius:10px;height:0;margin-bottom:20px;overflow:hidden;padding-top:30px!important;padding-bottom:56.25%!important;position:relative;z-index:1}.slideshow-window.slideshow-white{background-color:#fff;border-color:#fff}.slideshow-window,.slideshow-window *{box-sizing:content-box}.slideshow-loading{height:100%;text-align:center;margin:auto}body div.slideshow-window * img{background-color:transparent!important;background-image:none!important;border-width:0!important;display:block;margin:0 auto;max-width:100%;max-height:100%;padding:0!important;position:relative;transform:translateY(-50%);top:50%}.slideshow-loading img{vertical-align:middle}.slideshow-slide{display:none;height:100%!important;left:0;margin:auto;position:absolute;text-align:center;top:0;width:100%!important}.slideshow-slide img{vertical-align:middle}.slideshow-line-height-hack{overflow:hidden;width:0;font-size:0}.slideshow-slide-caption{font-size:13px;font-family:"Helvetica Neue",sans-serif;color:#f7f7f7;text-shadow:#222 1px 1px 2px;line-height:25px;height:25px;position:absolute;bottom:5px;left:0;z-index:100;width:100%;text-align:center}.slideshow-controls{z-index:1000;position:absolute;bottom:30px;margin:auto;text-align:center;width:100%;opacity:.5;direction:ltr;transition:.3s opacity ease-out}.slideshow-window:hover .slideshow-controls{opacity:1}body div div.slideshow-controls a,body div div.slideshow-controls a:hover{border:2px solid rgba(255,255,255,.1)!important;background-color:#000!important;background-color:rgba(0,0,0,.6)!important;background-image:url(../modules/shortcodes/img/slideshow-controls.png)!important;background-repeat:no-repeat;background-size:142px 16px!important;background-position:-34px 8px!important;color:#222!important;margin:0 5px!important;padding:0!important;display:inline-block!important;zoom:1;height:32px!important;width:32px!important;line-height:32px!important;text-align:center!important;border-radius:10em!important;transition:.3s border-color ease-out}@media only screen and (-webkit-min-device-pixel-ratio:1.5){body div div.slideshow-controls a,body div div.slideshow-controls a:hover{background-image:url(../modules/shortcodes/img/slideshow-controls-2x.png)!important}}body div div.slideshow-controls a:hover{border-color:rgba(255,255,255,1)!important}body div div.slideshow-controls a:first-child{background-position:-76px 8px!important}body div div.slideshow-controls a:last-child{background-position:-117px 8px!important}body div div.slideshow-controls a:nth-child(2){background-position:-34px 8px!important}body div div.slideshow-controls a.running{background-position:-34px 8px!important}body div div.slideshow-controls a.paused{background-position:9px 8px!important}.slideshow-controls a img{border:50px dotted #f0f}
-body.presentation-wrapper-fullscreen-parent,html.presentation-wrapper-fullscreen-parent{overflow:hidden!important}.presentation-wrapper-fullscreen-parent #wpadminbar{display:none}.presentation-wrapper-fullscreen,.presentation-wrapper-fullscreen-parent{min-width:100%!important;min-height:100%!important;position:absolute!important;top:0!important;right:0!important;bottom:0!important;left:0!important;margin:0!important;padding:0!important;z-index:10000!important}.presentation-wrapper-fullscreen{background-color:grey;border:none!important}.presentation-wrapper-fullscreen .nav-arrow-left,.presentation-wrapper-fullscreen .nav-arrow-right{z-index:20001}.presentation-wrapper-fullscreen .nav-fullscreen-button{z-index:20002}.presentation-wrapper{margin:20px auto;border:1px solid #e5e5e5;overflow:hidden;line-height:normal}.presentation{position:relative;margin:0;overflow:hidden;outline:0}.presentation,.presentation .step{background-repeat:no-repeat;background-position:center;background-size:100% 100%}.presentation .step.fade:not(.active){opacity:0}.presentation .slide-content{padding:30px}.presentation .nav-arrow-left,.presentation .nav-arrow-right,.presentation .nav-fullscreen-button{position:absolute;width:34px;background-repeat:no-repeat;z-index:2;opacity:0;transition:opacity .25s}.presentation .nav-arrow-left,.presentation .nav-arrow-right{height:100%;background-image:url(../modules/shortcodes/images/slide-nav.png);background-size:450% 61px}.presentation .nav-arrow-left{left:0;background-position:4px 50%}.presentation .nav-arrow-right{right:0;background-position:-120px 50%}.presentation .nav-fullscreen-button{width:32px;height:32px;margin:4px;bottom:0;right:0;z-index:3;background-image:url(../modules/shortcodes/images/expand.png);background-size:100% 100%}.presentation:hover .nav-arrow-left,.presentation:hover .nav-arrow-right{opacity:1}.presentation:hover .nav-fullscreen-button{opacity:.8}.presentation-wrapper-fullscreen .nav-fullscreen-button{background-image:url(../modules/shortcodes/images/collapse.png)}.presentation .autoplay-overlay{height:15%;width:80%;margin:30% 10%;position:relative;z-index:100;display:table;border-radius:50px;background-color:#e5e5e5;background-color:rgba(0,0,0,.75);transition:opacity .5s}.presentation .autoplay-overlay .overlay-msg{position:relative;display:table-cell;text-align:center;vertical-align:middle;color:#fff}.presentation .will-fade{opacity:0}.presentation .do-fade{opacity:1;transition:opacity .5s}
-div.jetpack-quiz{border:1px solid #deede3;background-color:#f3f3f3;padding:1em;line-height:1.3em;margin-bottom:2em;border-radius:.2em}div.jetpack-quiz div.jetpack-quiz-question{margin-bottom:.5em;font-weight:700}div.jetpack-quiz div.jetpack-quiz-answer{cursor:pointer;margin-bottom:.5em;padding:1em 0 1em 1em;border-bottom:1px dotted #999}div.jetpack-quiz div.jetpack-quiz-answer.last{padding-bottom:0;margin-bottom:0;border-bottom:0}div.jetpack-quiz div.jetpack-quiz-answer.correct{color:green}div.jetpack-quiz div.jetpack-quiz-answer.wrong{color:red}div.jetpack-quiz div.jetpack-quiz-answer div.jetpack-quiz-explanation{display:none}div.jetpack-quiz div.jetpack-quiz-answer.correct div.jetpack-quiz-explanation,div.jetpack-quiz div.jetpack-quiz-answer.wrong div.jetpack-quiz-explanation{display:block;color:#000;font-size:90%;margin-top:1em}div.jetpack-quiz div.jetpack-quiz-answer.correct div.jetpack-quiz-explanation tt,div.jetpack-quiz div.jetpack-quiz-answer.wrong div.jetpack-quiz-explanation tt{font-size:85%}div.jetpack-quiz pre{font:15px Monaco,Consolas,"Andale Mono","DejaVu Sans Mono",monospace;background:0 0;margin:0;padding:0}
-#subscribe-email input{width:95%}.comment-subscription-form{margin-bottom:1em}.comment-subscription-form .subscribe-label{display:inline!important}.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;width:1px;word-wrap:normal!important}
-.jetpack-video-wrapper{margin-bottom:1.6em}.jetpack-video-wrapper>.wp-video,.jetpack-video-wrapper>embed,.jetpack-video-wrapper>iframe,.jetpack-video-wrapper>object{margin-bottom:0}
-.jetpack-social-navigation ul{display:block;margin:0 0 1.5em;padding:0}.jetpack-social-navigation li{display:inline-block;margin:0;line-height:1}.jetpack-social-navigation a{border:0;height:1em;text-decoration:none;width:1em}.jetpack-social-navigation-svg .icon{color:inherit;fill:currentColor;height:1em;vertical-align:middle;width:1em}.jetpack-social-navigation-genericons a:before{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:Genericons;font-size:1em;font-style:normal;font-weight:400;height:1em;line-height:1;speak:none;text-decoration:inherit;vertical-align:top;width:1em}.jetpack-social-navigation-genericons a:before{content:"\f415"}.jetpack-social-navigation-genericons a[href*="codepen.io"]:before{content:"\f216"}.jetpack-social-navigation-genericons a[href*="digg.com"]:before{content:"\f221"}.jetpack-social-navigation-genericons a[href*="dribbble.com"]:before{content:"\f201"}.jetpack-social-navigation-genericons a[href*="dropbox.com"]:before{content:"\f225"}.jetpack-social-navigation-genericons a[href*="mailto:"]:before{content:"\f410"}.jetpack-social-navigation-genericons a[href*="facebook.com"]:before{content:"\f203"}.jetpack-social-navigation-genericons a[href*="flickr.com"]:before{content:"\f211"}.jetpack-social-navigation-genericons a[href*="foursquare.com"]:before{content:"\f226"}.jetpack-social-navigation-genericons a[href*="github.com"]:before{content:"\f200"}.jetpack-social-navigation-genericons a[href*="plus.google.com"]:before{content:"\f206"}.jetpack-social-navigation-genericons a[href*="instagram.com"]:before{content:"\f215"}.jetpack-social-navigation-genericons a[href*="linkedin.com"]:before{content:"\f208"}.jetpack-social-navigation-genericons a[href*="path.com"]:before{content:"\f219"}.jetpack-social-navigation-genericons a[href*="pinterest."]:before{content:"\f210"}.jetpack-social-navigation-genericons a[href*="getpocket.com"]:before{content:"\f224"}.jetpack-social-navigation-genericons a[href*="polldaddy.com"]:before{content:"\f217"}.jetpack-social-navigation-genericons a[href*="reddit.com"]:before{content:"\f222"}.jetpack-social-navigation-genericons a[href$="/feed/"]:before{content:"\f413"}.jetpack-social-navigation-genericons a[href*="skype:"]:before{content:"\f220"}.jetpack-social-navigation-genericons a[href*="spotify.com"]:before{content:"\f515"}.jetpack-social-navigation-genericons a[href*="stumbleupon.com"]:before{content:"\f223"}.jetpack-social-navigation-genericons a[href*="tumblr.com"]:before{content:"\f214"}.jetpack-social-navigation-genericons a[href*="twitch.tv"]:before{content:"\f516"}.jetpack-social-navigation-genericons a[href*="twitter.com"]:before{content:"\f202"}.jetpack-social-navigation-genericons a[href*="vimeo.com"]:before{content:"\f212"}.jetpack-social-navigation-genericons a[href*="vine.co"]:before{content:"\f517"}.jetpack-social-navigation-genericons a[href*="wordpress.com"]:before,.jetpack-social-navigation-genericons a[href*="wordpress.org"]:before{content:"\f205"}.jetpack-social-navigation-genericons a[href*="youtube.com"]:before{content:"\f213"}
-.tiled-gallery{clear:both;margin:0 0 20px;overflow:hidden}.tiled-gallery img{margin:2px!important}.tiled-gallery .gallery-group{float:left;position:relative}.tiled-gallery .tiled-gallery-item{float:left;margin:0;position:relative;width:inherit}.tiled-gallery .gallery-row{overflow:hidden}.tiled-gallery .tiled-gallery-item a{background:0 0;border:none;color:inherit;margin:0;padding:0;text-decoration:none;width:auto}.tiled-gallery .tiled-gallery-item img,.tiled-gallery .tiled-gallery-item img:hover{background:0 0;border:none;box-shadow:none;max-width:100%;padding:0;vertical-align:middle}.tiled-gallery-caption{background:#eee;background:rgba(255,255,255,.8);color:#333;font-size:13px;font-weight:400;overflow:hidden;padding:10px 0;position:absolute;bottom:0;text-indent:10px;text-overflow:ellipsis;width:100%;white-space:nowrap}.tiled-gallery .tiled-gallery-item-small .tiled-gallery-caption{font-size:11px}.widget-gallery .tiled-gallery-unresized{visibility:hidden;height:0;overflow:hidden}.tiled-gallery .tiled-gallery-item img.grayscale{position:absolute;left:0;top:0}.tiled-gallery .tiled-gallery-item img.grayscale:hover{opacity:0}.tiled-gallery.type-circle .tiled-gallery-item img{border-radius:50%!important}.tiled-gallery.type-circle .tiled-gallery-caption{display:none;opacity:0}
-.jetpack-display-remote-posts{margin:5px 0 20px 0}.jetpack-display-remote-posts h4{font-size:90%;margin:5px 0;padding:0}.jetpack-display-remote-posts h4 a{text-decoration:none}.jetpack-display-remote-posts p{margin:0!important;padding:0;line-height:1.4em!important;font-size:90%}.jetpack-display-remote-posts img{max-width:100%}
-.widget-grofile h4{margin:1em 0 .5em}.widget-grofile ul.grofile-urls{margin-left:0;overflow:hidden}.widget-grofile ul.grofile-accounts li{list-style:none;display:inline}.widget-grofile ul.grofile-accounts li::before{content:""!important}.widget-grofile .grofile-accounts-logo{background-image:url(https://secure.gravatar.com/images/grav-share-sprite.png);background-repeat:no-repeat;width:16px;height:16px;float:left;margin-right:8px;margin-bottom:8px}.rtl .widget-grofile .grofile-accounts-logo{margin-left:8px;margin-right:0}.grofile-thumbnail{width:500px;max-width:100%}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.widget-grofile .grofile-accounts-logo{background-image:url(https://secure.gravatar.com/images/grav-share-sprite-2x.png);background-size:16px 784px}}
-div[class^=gr_custom_container]{border:1px solid gray;border-radius:10px;padding:10px 5px 10px 5px;background-color:#fff;color:#000}div[class^=gr_custom_container] a{color:#000}h2[class^=gr_custom_header]{display:none}div[class^=gr_custom_each_container]{width:100%;clear:both;margin-bottom:10px;overflow:auto;padding-bottom:4px;border-bottom:1px solid #aaa}div[class^=gr_custom_book_container]{float:right;overflow:hidden;height:60px;margin-left:4px;width:39px}div[class^=gr_custom_author]{font-size:10px}div[class^=gr_custom_tags]{font-size:10px;color:gray}div[class^=gr_custom_rating]{display:none}
-.widget_wpcom_social_media_icons_widget ul{list-style-type:none;margin-left:0}.widget_wpcom_social_media_icons_widget ul li{border:0 none;display:inline;margin-right:.5em}.widget_wpcom_social_media_icons_widget li a{border:0 none;text-decoration:none}.widget_wpcom_social_media_icons_widget .genericon{font-family:Genericons}.widget_wpcom_social_media_icons_widget .screen-reader-text{clip:rect(1px,1px,1px,1px);position:absolute!important;height:1px;width:1px;overflow:hidden}.widget_wpcom_social_media_icons_widget .screen-reader-text:active,.widget_wpcom_social_media_icons_widget .screen-reader-text:focus,.widget_wpcom_social_media_icons_widget .screen-reader-text:hover{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:14px;font-size:.875rem;font-weight:700;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}
-.widgets-grid-layout{width:100%}.widgets-grid-layout:after,.widgets-grid-layout:before{content:" ";display:table}.widgets-grid-layout:after{clear:both}.widget-grid-view-image{float:left;max-width:50%}.widget-grid-view-image a{display:block;margin:0 2px 4px 0}.widget-grid-view-image:nth-child(even){float:right}.widget-grid-view-image:nth-child(even) a{margin:0 0 4px 2px}.widgets-grid-layout .widget-grid-view-image img{max-width:100%;height:auto}.widgets-multi-column-grid ul{overflow:hidden;padding:0;margin:0;list-style-type:none}.widgets-multi-column-grid ul li{background:0 0;clear:none;float:left;margin:0 -5px -3px 0;padding:0 8px 6px 0;border:none;list-style-type:none!important}.widgets-multi-column-grid ul li a{background:0 0;margin:0;padding:0;border:0}.widgets-multi-column-grid .avatar{vertical-align:middle}.widgets-list-layout{padding:0;margin:0;list-style-type:none}.widgets-list-layout li:after,.widgets-list-layout li:before{content:"";display:table}.widgets-list-layout li:after{clear:both}.widgets-list-layout li{zoom:1;margin-bottom:1em;list-style-type:none!important}.widgets-list-layout .widgets-list-layout-blavatar{float:left;width:21.276596%;max-width:40px;height:auto}.widgets-list-layout-links{float:right;width:73.404255%}.widgets-list-layout span{opacity:.5}.widgets-list-layout span:hover{opacity:.8}
-.jetpack-image-container:after{clear:both}.jetpack-image-container:after,.jetpack-image-container:before{display:table;content:""}
-.widgets-multi-column-grid ul{overflow:hidden;padding:0;margin:0;list-style-type:none}.widgets-multi-column-grid ul li{background:0 0;clear:none;float:left;margin:0 -5px -3px 0;padding:0 8px 6px 0;border:none;list-style-type:none!important}.widgets-multi-column-grid ul li a{background:0 0;margin:0;padding:0;border:0}.widgets-multi-column-grid .avatar{vertical-align:middle}.widget_jetpack_my_community .avatar-240,.widget_jetpack_my_community .avatar-48{max-width:48px;max-height:48px}
-.widget.widget_authors li>ul,.widget_authors>ul{margin-left:inherit;padding-left:0}.widget_authors ul li li{padding-left:0}.widget_authors>ul>li{margin-bottom:1em;list-style:none}.widget_authors>ul>li+li{border-top:0}.widget.widget_authors img{margin-right:5px;margin-bottom:5px;vertical-align:middle;box-shadow:none}
-.wpcnt{text-align:center;line-height:2}.wpa{position:relative;overflow:hidden;display:inline-block;max-width:100%}.wpa-about{position:absolute;top:5px;left:0;right:0;display:block;margin-top:0;color:#888;font:10px/1 "Open Sans",Arial,sans-serif!important;text-align:left!important;text-decoration:none!important;opacity:.85;border-bottom:none!important;box-shadow:none!important}.wpa .u>div{display:block;margin-top:5px;margin-bottom:1em}div.wpa>div{margin-top:20px}.wpa .u .adsbygoogle{display:block;margin-top:17px;margin-bottom:1em;background-color:transparent}
-.widget_eu_cookie_law_widget{border:none;bottom:1em;display:none;left:1em;margin:0;padding:0;position:fixed;right:1em;width:auto;z-index:50001}.widget_eu_cookie_law_widget.widget.top{bottom:auto;top:1em}.admin-bar .widget_eu_cookie_law_widget.widget.top{top:3em}#eu-cookie-law{background-color:#fff;border:1px solid #dedede;color:#2e4467;font-size:12px;line-height:1.5;overflow:hidden;padding:6px 6px 6px 15px;position:relative}#eu-cookie-law a,#eu-cookie-law a:active,#eu-cookie-law a:visited{color:inherit;cursor:inherit;text-decoration:underline}#eu-cookie-law a:hover{cursor:pointer;text-decoration:none}#eu-cookie-law.negative{background-color:#000;border:none;color:#fff}#eu-cookie-law form{margin-bottom:0;position:static}#eu-cookie-law input,#eu-cookie-law input:focus,#eu-cookie-law input:hover{background:#f3f3f3;border:1px solid #dedede;border-radius:4px;-moz-border-radius:3px;-webkit-border-radius:3px;color:#2e4453;cursor:pointer;display:inline;float:right;font-family:inherit;font-size:14px;font-weight:inherit;line-height:inherit;margin:0 0 0 5%;padding:8px 12px;position:static;text-transform:none}#eu-cookie-law.negative input,#eu-cookie-law.negative input:focus,#eu-cookie-law.negative input:hover{background:#282828;border-color:#535353;color:#fff}@media (max-width:600px){#eu-cookie-law{padding-bottom:55px}#eu-cookie-law input.accept{bottom:8px;position:absolute;right:8px}}
-.flickr-images{text-align:center}.flickr-size-thumbnail .flickr-images{align-content:space-between;align-items:center;display:flex;flex-flow:row wrap;justify-content:center}.flickr-images img{max-width:100%;margin:5px}
-.jetpack-search-filters-widget__sub-heading{font-size:inherit;font-weight:700;margin:0 0 .5em;padding:0}.jetpack-search-form+.jetpack-search-filters-widget__sub-heading{margin-top:1.5em;margin-bottom:.5em!important}.jetpack-search-filters-widget__clear{margin-top:.5em;margin-bottom:.5em}.jetpack-search-sort-wrapper{margin-top:1em;margin-bottom:1.5em}.jetpack-search-sort-wrapper label{display:inherit}.widget_search .jetpack-search-filters-widget__filter-list input[type=checkbox]{width:auto;height:auto}ul.jetpack-search-filters-widget__filter-list li{border:none;padding:0;list-style:none}ul.jetpack-search-filters-widget__filter-list li a{text-decoration:none}ul.jetpack-search-filters-widget__filter-list li a:hover{box-shadow:none}ul.jetpack-search-filters-widget__filter-list li label{font-weight:inherit;display:inherit}.jetpack-search-filters-widget__filter-list{list-style:none}ul.jetpack-search-filters-widget__filter-list{margin-bottom:1.5em}body.search .jetpack-search-form input[name="s"]:-ms-input-placeholder{color:transparent}body.search .jetpack-search-form input[name="s"]::-ms-input-placeholder{color:transparent}body.search .jetpack-search-form input[name="s"]::placeholder{color:transparent}body.search .jetpack-search-form input[name="s"].show-placeholder:-ms-input-placeholder{color:inherit}body.search .jetpack-search-form input[name="s"].show-placeholder::-ms-input-placeholder{color:inherit}body.search .jetpack-search-form input[name="s"].show-placeholder::placeholder{color:inherit}
-@media screen and (min-width:400px){.widget.jetpack-simple-payments .jetpack-simple-payments-product{flex-direction:column}.widget.jetpack-simple-payments .jetpack-simple-payments-details{padding-left:0}}
-.jetpack_widget_social_icons li,.jetpack_widget_social_icons ul{list-style:none}.jetpack_widget_social_icons ul{display:block;margin:0 0 1.5em;padding:0}.jetpack_widget_social_icons ul li{border:0;display:inline-block;line-height:1;margin:0;padding:0}.jetpack_widget_social_icons ul li:after,.jetpack_widget_social_icons ul li:before{display:none}.jetpack_widget_social_icons a{border:0;box-shadow:none;display:block;height:24px;text-decoration:none;width:24px}.jetpack_widget_social_icons svg{color:inherit;fill:currentColor;height:inherit;vertical-align:middle;width:inherit}.jetpack_widget_social_icons ul.size-small a{height:24px;width:24px}.jetpack_widget_social_icons ul.size-medium a{height:32px;width:32px}.jetpack_widget_social_icons ul.size-large a{height:48px;width:48px}.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;width:1px;word-wrap:normal!important} \ No newline at end of file
diff --git a/plugins/jetpack/extensions/README.md b/plugins/jetpack/extensions/README.md
deleted file mode 100644
index b284863d..00000000
--- a/plugins/jetpack/extensions/README.md
+++ /dev/null
@@ -1,40 +0,0 @@
-# Jetpack Block Editor Extensions
-
-This directory lists extensions for the Block Editor, also known as Gutenberg, [that was introduced in WordPress 5.0](https://wordpress.org/news/2018/12/bebo/).
-
-## Extension Type
-
-We define different types of block editor extensions:
-
-- Blocks are available in the editor itself, and live in the `blocks` directory.
-- Plugins are available in the Jetpack sidebar that appears on the right side of the block editor. Those live in the `plugins` directory.
-
-When adding a new extension, add a new directory for your extension the matching directory.
-
-## Extension Structure
-
-Your extension should follow this structure:
-
-```
-.
-└── blockname/
- └── blockname.php ← PHP file where the block and its assets are registered.
-```
-
-If your block depends on another block, place them all in extensions folder:
-
-```
-.
-├── blockname/
-└── sub-blockname/
-```
-
-**Note that this directory is still being populated. For now, you can find the blocks [here](https://github.com/Automattic/wp-calypso/tree/master/client/gutenberg/extensions).
-
-## Develop new blocks
-
-You can follow [the instructions here](../docs/guides/gutenberg-blocks.md) to add your own block to Jetpack.
-
-## Block naming conventions
-
-Blocks should use the `jetpack/` prefix, e.g. `jetpack/markdown`.
diff --git a/plugins/jetpack/extensions/blocks/business-hours/business-hours.php b/plugins/jetpack/extensions/blocks/business-hours/business-hours.php
deleted file mode 100644
index 2e1af067..00000000
--- a/plugins/jetpack/extensions/blocks/business-hours/business-hours.php
+++ /dev/null
@@ -1,132 +0,0 @@
-<?php
-/**
- * Business Hours Block.
- *
- * @since 7.1.0
- *
- * @package Jetpack
- */
-
-jetpack_register_block(
- 'jetpack/business-hours',
- array( 'render_callback' => 'jetpack_business_hours_render' )
-);
-
-/**
- * Get's default days / hours to render a business hour block with no data provided.
- *
- * @return array
- */
-function jetpack_business_hours_get_default_days() {
- return array(
- array(
- 'name' => 'Sun',
- 'hours' => array(),
- ),
- array(
- 'name' => 'Mon',
- 'hours' => array(
- array( 'opening' => '09:00', 'closing' => '17:00' )
- ),
- ),
- array(
- 'name' => 'Tue',
- 'hours' => array(
- array( 'opening' => '09:00', 'closing' => '17:00' )
- ),
- ),
- array(
- 'name' => 'Wed',
- 'hours' => array(
- array( 'opening' => '09:00', 'closing' => '17:00' )
- ),
- ),
- array(
- 'name' => 'Thu',
- 'hours' => array(
- array( 'opening' => '09:00', 'closing' => '17:00' )
- ),
- ),
- array(
- 'name' => 'Fri',
- 'hours' => array(
- array( 'opening' => '09:00', 'closing' => '17:00' )
- ),
- ),
- array(
- 'name' => 'Sat',
- 'hours' => array(),
- ),
- );
-}
-
-/**
- * Dynamic rendering of the block.
- *
- * @param array $attributes Array containing the business hours block attributes.
- *
- * @return string
- */
-function jetpack_business_hours_render( $attributes ) {
- global $wp_locale;
-
- if ( empty( $attributes['days'] ) || ! is_array( $attributes['days'] ) ) {
- $attributes['days'] = jetpack_business_hours_get_default_days();
- }
-
- $start_of_week = (int) get_option( 'start_of_week', 0 );
- $time_format = get_option( 'time_format' );
- $content = sprintf(
- '<dl class="jetpack-business-hours %s">',
- ! empty( $attributes['className'] ) ? esc_attr( $attributes['className'] ) : ''
- );
-
- $days = array( 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' );
-
- if ( $start_of_week ) {
- $chunk1 = array_slice( $attributes['days'], 0, $start_of_week );
- $chunk2 = array_slice( $attributes['days'], $start_of_week );
- $attributes['days'] = array_merge( $chunk2, $chunk1 );
- }
-
- foreach ( $attributes['days'] as $day ) {
- $content .= '<dt class="' . esc_attr( $day['name'] ) . '">' .
- ucfirst( $wp_locale->get_weekday( array_search( $day['name'], $days, true ) ) ) .
- '</dt>';
- $content .= '<dd class="' . esc_attr( $day['name'] ) . '">';
- $days_hours = '';
-
- foreach ( $day['hours'] as $hour ) {
- $opening = strtotime( $hour['opening'] );
- $closing = strtotime( $hour['closing'] );
- if ( ! $opening || ! $closing ) {
- continue;
- }
- $days_hours .= sprintf(
- /* Translators: Business opening hours info. */
- _x( 'From %1$s to %2$s', 'from business opening hour to closing hour', 'jetpack' ),
- date( $time_format, $opening ),
- date( $time_format, $closing )
- );
- $days_hours .= '<br />';
- }
-
- if ( empty( $days_hours ) ) {
- $days_hours = esc_html__( 'Closed', 'jetpack' );
- }
- $content .= $days_hours;
- $content .= '</dd>';
- }
-
- $content .= '</dl>';
-
- /**
- * Allows folks to filter the HTML content for the Business Hours block
- *
- * @since 7.1.0
- *
- * @param string $content The default HTML content set by `jetpack_business_hours_render`
- * @param array $attributes Attributes generated in the block editor for the Business Hours block
- */
- return apply_filters( 'jetpack_business_hours_content', $content, $attributes );
-}
diff --git a/plugins/jetpack/extensions/blocks/contact-info/class-jetpack-contact-info-block.php b/plugins/jetpack/extensions/blocks/contact-info/class-jetpack-contact-info-block.php
deleted file mode 100644
index 7a34cbbb..00000000
--- a/plugins/jetpack/extensions/blocks/contact-info/class-jetpack-contact-info-block.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-/**
- * Class Jetpack_Contact_Info_Block
- *
- * @package Jetpack
- */
-
-/**
- * Helper class that lets us add schema attributes dynamically because they are not something that is store with the content.
- * Due to the limitations of wp_kses.
- *
- * @since 7.1.0
- */
-class Jetpack_Contact_Info_Block {
-
- /**
- * Adds contact info schema attributes.
- *
- * @param array $attr Array containing the contact info block attributes.
- * @param string $content String containing the contact info block content.
- *
- * @return string
- */
- public static function render( $attr, $content ) {
- Jetpack_Gutenberg::load_styles_as_required( 'contact-info' );
- return str_replace(
- 'class="wp-block-jetpack-contact-info', // Closing " intentionally ommited to that the user can also add the className as expected.
- 'itemprop="location" itemscope itemtype="http://schema.org/Organization" class="wp-block-jetpack-contact-info',
- $content
- );
- }
-
- /**
- * Adds address schema attributes.
- *
- * @param array $attr Array containing the address block attributes.
- * @param string $content String containing the address block content.
- *
- * @return string
- */
- public static function render_address( $attr, $content ) {
- // Returns empty content if the only attribute set is linkToGoogleMaps.
- if ( ! self::has_attributes( $attr, array( 'linkToGoogleMaps', 'className' ) ) ) {
- return '';
- }
- $find = array(
- 'class="wp-block-jetpack-address"',
- 'class="jetpack-address__address',
- // Closing " left out on purpose - there are multiple address fields and they all need to be updated with the same itemprop.
- 'class="jetpack-address__region"',
- 'class="jetpack-address__city"',
- 'class="jetpack-address__postal"',
- 'class="jetpack-address__country"',
- );
- $replace = array(
- 'itemprop="address" itemscope itemtype="http://schema.org/PostalAddress" class="wp-block-jetpack-address" ',
- 'itemprop="streetAddress" class="jetpack-address__address', // Closing " left out on purpose.
- 'itemprop="addressRegion" class="jetpack-address__region"',
- 'itemprop="addressLocality" class="jetpack-address__city"',
- 'itemprop="postalCode" class="jetpack-address__postal"',
- 'itemprop="addressCountry" class="jetpack-address__country"',
- );
-
- return str_replace( $find, $replace, $content );
- }
-
- /**
- * Helper function that lets us determine if a block has any valid attributes.
- *
- * @param array $attr Array containing the block attributes.
- * @param array $omit Array containing the block attributes that we ignore.
- *
- * @return string
- */
- public static function has_attributes( $attr, $omit = array() ) {
- foreach ( $attr as $attribute => $value ) {
- if ( ! in_array( $attribute, $omit, true ) && ! empty( $value ) ) {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Adds email schema attributes.
- *
- * @param array $attr Array containing the email block attributes.
- * @param string $content String containing the email block content.
- *
- * @return string
- */
- public static function render_email( $attr, $content ) {
- $content = self::has_attributes( $attr, array( 'className' ) ) ?
- str_replace( 'href="mailto:', 'itemprop="email" href="mailto:', $content ) :
- '';
- return $content;
- }
-
- /**
- * Adds phone schema attributes.
- *
- * @param array $attr Array containing the phone block attributes.
- * @param string $content String containing the phone block content.
- *
- * @return string
- */
- public static function render_phone( $attr, $content ) {
- $content = self::has_attributes( $attr, array( 'className' ) ) ?
- str_replace( 'href="tel:', 'itemprop="telephone" href="tel:', $content ) :
- '';
- return $content;
- }
-}
diff --git a/plugins/jetpack/extensions/blocks/contact-info/contact-info.php b/plugins/jetpack/extensions/blocks/contact-info/contact-info.php
deleted file mode 100644
index c7414517..00000000
--- a/plugins/jetpack/extensions/blocks/contact-info/contact-info.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-/**
- * Contact Info block and its child blocks.
- *
- * @since 7.1.0
- *
- * @package Jetpack
- */
-
-jetpack_register_block(
- 'jetpack/contact-info',
- array(
- 'render_callback' => array( 'Jetpack_Contact_Info_Block', 'render' ),
- )
-);
-
-jetpack_register_block(
- 'jetpack/address',
- array(
- 'parent' => array( 'jetpack/contact-info' ),
- 'render_callback' => array( 'Jetpack_Contact_Info_Block', 'render_address' ),
- )
-);
-
-jetpack_register_block(
- 'jetpack/email',
- array(
- 'parent' => array( 'jetpack/contact-info' ),
- 'render_callback' => array( 'Jetpack_Contact_Info_Block', 'render_email' ),
- )
-);
-
-jetpack_register_block(
- 'jetpack/phone',
- array(
- 'parent' => array( 'jetpack/contact-info' ),
- 'render_callback' => array( 'Jetpack_Contact_Info_Block', 'render_phone' ),
- )
-);
-require_once dirname( __FILE__ ) . '/class-jetpack-contact-info-block.php';
diff --git a/plugins/jetpack/extensions/blocks/gif/gif.php b/plugins/jetpack/extensions/blocks/gif/gif.php
deleted file mode 100644
index cb35f3da..00000000
--- a/plugins/jetpack/extensions/blocks/gif/gif.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-/**
- * GIF Block.
- *
- * @since 7.0.0
- *
- * @package Jetpack
- */
-
-jetpack_register_block(
- 'jetpack/gif',
- array(
- 'render_callback' => 'jetpack_gif_block_render',
- )
-);
-
-/**
- * Gif block registration/dependency declaration.
- *
- * @param array $attr - Array containing the gif block attributes.
- *
- * @return string
- */
-function jetpack_gif_block_render( $attr ) {
- $padding_top = isset( $attr['paddingTop'] ) ? $attr['paddingTop'] : 0;
- $style = 'padding-top:' . $padding_top;
- $giphy_url = isset( $attr['giphyUrl'] ) ? $attr['giphyUrl'] : null;
- $search_text = isset( $attr['searchText'] ) ? $attr['searchText'] : '';
- $caption = isset( $attr['caption'] ) ? $attr['caption'] : null;
-
- if ( ! $giphy_url ) {
- return null;
- }
-
- /* TODO: replace with centralized block_class function */
- $align = isset( $attr['align'] ) ? $attr['align'] : 'center';
- $type = 'gif';
- $classes = array(
- 'wp-block-jetpack-' . $type,
- 'align' . $align,
- );
- if ( isset( $attr['className'] ) ) {
- array_push( $classes, $attr['className'] );
- }
- $classes = implode( $classes, ' ' );
-
- ob_start();
- ?>
- <div class="<?php echo esc_attr( $classes ); ?>">
- <figure>
- <div class="wp-block-jetpack-gif-wrapper" style="<?php echo esc_attr( $style ); ?>">
- <iframe src="<?php echo esc_url( $giphy_url ); ?>"
- title="<?php echo esc_attr( $search_text ); ?>"></iframe>
- </div>
- <?php if ( $caption ) : ?>
- <figcaption
- class="wp-block-jetpack-gif-caption gallery-caption"><?php echo wp_kses_post( $caption ); ?></figcaption>
- <?php endif; ?>
- </figure>
- </div>
- <?php
- $html = ob_get_clean();
-
- Jetpack_Gutenberg::load_assets_as_required( 'gif' );
-
- return $html;
-}
diff --git a/plugins/jetpack/extensions/blocks/mailchimp/mailchimp.php b/plugins/jetpack/extensions/blocks/mailchimp/mailchimp.php
deleted file mode 100644
index be93f2f3..00000000
--- a/plugins/jetpack/extensions/blocks/mailchimp/mailchimp.php
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-/**
- * Mailchimp Block.
- *
- * @since 7.1.0
- *
- * @package Jetpack
- */
-
-if ( ( defined( 'IS_WPCOM' ) && IS_WPCOM ) || Jetpack::is_active() ) {
- jetpack_register_block(
- 'jetpack/mailchimp',
- array(
- 'render_callback' => 'jetpack_mailchimp_block_load_assets',
- )
- );
-}
-
-/**
- * Mailchimp block registration/dependency declaration.
- *
- * @param array $attr - Array containing the map block attributes.
- *
- * @return string
- */
-function jetpack_mailchimp_block_load_assets( $attr ) {
-
- if ( ! jetpack_mailchimp_verify_connection() ) {
- return null;
- }
- $values = array();
- $blog_id = ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ?
- get_current_blog_id() : Jetpack_Options::get_option( 'id' );
- Jetpack_Gutenberg::load_assets_as_required( 'mailchimp', array( 'wp-polyfill' ) );
- $defaults = array(
- 'emailPlaceholder' => esc_html__( 'Enter your email', 'jetpack' ),
- 'submitButtonText' => esc_html__( 'Join my email list', 'jetpack' ),
- 'consentText' => esc_html__( 'By clicking submit, you agree to share your email address with the site owner and Mailchimp to receive marketing, updates, and other emails from the site owner. Use the unsubscribe link in those emails to opt out at any time.', 'jetpack' ),
- 'processingLabel' => esc_html__( 'Processing…', 'jetpack' ),
- 'successLabel' => esc_html__( 'Success! You\'re on the list.', 'jetpack' ),
- 'errorLabel' => esc_html__( 'Whoops! There was an error and we couldn\'t process your subscription. Please reload the page and try again.', 'jetpack' ),
- );
- foreach ( $defaults as $id => $default ) {
- $values[ $id ] = isset( $attr[ $id ] ) ? $attr[ $id ] : $default;
- }
-
- $values['submitButtonText'] = empty( $values['submitButtonText'] ) ? $defaults['submitButtonText'] : $values['submitButtonText'];
-
- /* TODO: replace with centralized block_class function */
- $align = isset( $attr['align'] ) ? $attr['align'] : 'center';
- $type = 'mailchimp';
- $classes = array(
- 'wp-block-jetpack-' . $type,
- 'align' . $align,
- );
- if ( isset( $attr['className'] ) ) {
- array_push( $classes, $attr['className'] );
- }
- $classes = implode( $classes, ' ' );
-
- $button_styles = array();
- if ( ! empty( $attr['customBackgroundButtonColor'] ) ) {
- array_push(
- $button_styles,
- sprintf(
- 'background-color: %s',
- sanitize_hex_color( $attr['customBackgroundButtonColor'] )
- )
- );
- }
- if ( ! empty( $attr['customTextButtonColor'] ) ) {
- array_push(
- $button_styles,
- sprintf(
- 'color: %s',
- sanitize_hex_color( $attr['customTextButtonColor'] )
- )
- );
- }
- $button_styles = implode( $button_styles, ';' );
-
- ob_start();
- ?>
- <div class="<?php echo esc_attr( $classes ); ?>" data-blog-id="<?php echo esc_attr( $blog_id ); ?>">
- <div class="components-placeholder">
- <form aria-describedby="wp-block-jetpack-mailchimp_consent-text">
- <p>
- <input
- aria-label="<?php echo esc_attr( $values['emailPlaceholder'] ); ?>"
- placeholder="<?php echo esc_attr( $values['emailPlaceholder'] ); ?>"
- required
- title="<?php echo esc_attr( $values['emailPlaceholder'] ); ?>"
- type="email"
- />
- </p>
- <p>
- <button type="submit" class="components-button is-button is-primary" style="<?php echo esc_attr( $button_styles ); ?>">
- <?php echo wp_kses_post( $values['submitButtonText'] ); ?>
- </button>
- </p>
- <p id="wp-block-jetpack-mailchimp_consent-text" name="wp-block-jetpack-mailchimp_consent-text">
- <?php echo wp_kses_post( $values['consentText'] ); ?>
- </p>
- </form>
- <div class="wp-block-jetpack-mailchimp_notification wp-block-jetpack-mailchimp_processing" role="status">
- <?php echo esc_html( $values['processingLabel'] ); ?>
- </div>
- <div class="wp-block-jetpack-mailchimp_notification wp-block-jetpack-mailchimp_success" role="status">
- <?php echo esc_html( $values['successLabel'] ); ?>
- </div>
- <div class="wp-block-jetpack-mailchimp_notification wp-block-jetpack-mailchimp_error" role="alert">
- <?php echo esc_html( $values['errorLabel'] ); ?>
- </div>
- </div>
- </div>
- <?php
- $html = ob_get_clean();
- return $html;
-}
-
-/**
- * Mailchimp connection/list selection verification.
- *
- * @return boolean
- */
-function jetpack_mailchimp_verify_connection() {
- $option = get_option( 'jetpack_mailchimp' );
- if ( ! $option ) {
- return false;
- }
- $data = json_decode( $option, true );
- if ( ! $data ) {
- return false;
- }
- return isset( $data['follower_list_id'], $data['keyring_id'] );
-}
diff --git a/plugins/jetpack/extensions/blocks/map/map.php b/plugins/jetpack/extensions/blocks/map/map.php
deleted file mode 100644
index 6e8c9d2a..00000000
--- a/plugins/jetpack/extensions/blocks/map/map.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-/**
- * Map block.
- *
- * @since 6.8.0
- *
- * @package Jetpack
- */
-
-jetpack_register_block(
- 'jetpack/map',
- array(
- 'render_callback' => 'jetpack_map_block_load_assets',
- )
-);
-
-/**
- * Map block registration/dependency declaration.
- *
- * @param array $attr Array containing the map block attributes.
- * @param string $content String containing the map block content.
- *
- * @return string
- */
-function jetpack_map_block_load_assets( $attr, $content ) {
- $dependencies = array(
- 'lodash',
- 'wp-element',
- 'wp-i18n',
- );
-
- $api_key = Jetpack_Options::get_option( 'mapbox_api_key' );
-
- Jetpack_Gutenberg::load_assets_as_required( 'map', $dependencies );
-
- return preg_replace( '/<div /', '<div data-api-key="' . esc_attr( $api_key ) . '" ', $content, 1 );
-}
diff --git a/plugins/jetpack/extensions/blocks/markdown/markdown.php b/plugins/jetpack/extensions/blocks/markdown/markdown.php
deleted file mode 100644
index 7490b9d2..00000000
--- a/plugins/jetpack/extensions/blocks/markdown/markdown.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-/**
- * Markdown Block.
- *
- * @since 6.8.0
- *
- * @package Jetpack
- */
-
-/**
- * The block depends on the Markdown module to be active for now.
- * Related discussion: https://github.com/Automattic/jetpack/issues/10294
- */
-if (
- ( defined( 'IS_WPCOM' ) && IS_WPCOM )
- || ( method_exists( 'Jetpack', 'is_module_active' ) && Jetpack::is_module_active( 'markdown' ) )
-) {
- jetpack_register_block( 'jetpack/markdown' );
-}
-
diff --git a/plugins/jetpack/extensions/blocks/repeat-visitor/repeat-visitor.php b/plugins/jetpack/extensions/blocks/repeat-visitor/repeat-visitor.php
deleted file mode 100644
index 11a1a10a..00000000
--- a/plugins/jetpack/extensions/blocks/repeat-visitor/repeat-visitor.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-/**
- * Repeat Visitor Block
- *
- * @since 7.2.0
- *
- * @package Jetpack
- */
-
-jetpack_register_block(
- 'jetpack/repeat-visitor',
- array(
- 'render_callback' => 'jetpack_repeat_visitor_block_render',
- )
-);
-
-/**
- * Repeat Visitor block dependency declaration.
- *
- * @param array $attributes Array containing the block attributes.
- * @param string $content String containing the block content.
- *
- * @return string
- */
-function jetpack_repeat_visitor_block_render( $attributes, $content ) {
- Jetpack_Gutenberg::load_assets_as_required( 'repeat-visitor', array( 'wp-polyfill' ) );
-
- $count = isset( $_COOKIE['jp-visit-counter'] ) ? intval( $_COOKIE['jp-visit-counter'] ) : 0;
- $criteria = isset( $attributes['criteria'] ) ? $attributes['criteria'] : 'after-visits';
- $threshold = isset( $attributes['threshold'] ) ? intval( $attributes['threshold'] ) : 3;
-
- if (
- ( 'after-visits' === $criteria && $count >= $threshold ) ||
- ( 'before-visits' === $criteria && $count < $threshold )
- ) {
- return $content;
- }
-
- // return an empty div so that view script increments the visit counter in the cookie.
- return '<div class="wp-block-jetpack-repeat-visitor"></div>';
-}
diff --git a/plugins/jetpack/extensions/blocks/slideshow/slideshow.php b/plugins/jetpack/extensions/blocks/slideshow/slideshow.php
deleted file mode 100644
index 4f53ef8f..00000000
--- a/plugins/jetpack/extensions/blocks/slideshow/slideshow.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * Slideshow Block.
- *
- * @since 7.1.0
- *
- * @package Jetpack
- */
-
-jetpack_register_block(
- 'jetpack/slideshow',
- array(
- 'render_callback' => 'jetpack_slideshow_block_load_assets',
- )
-);
-
-/**
- * Slideshow block registration/dependency declaration.
- *
- * @param array $attr Array containing the slideshow block attributes.
- * @param string $content String containing the slideshow block content.
- *
- * @return string
- */
-function jetpack_slideshow_block_load_assets( $attr, $content ) {
- $dependencies = array(
- 'lodash',
- 'wp-escape-html',
- 'wp-polyfill',
- );
-
- Jetpack_Gutenberg::load_assets_as_required( 'slideshow', $dependencies );
-
- return $content;
-}
diff --git a/plugins/jetpack/extensions/blocks/tiled-gallery/tiled-gallery.php b/plugins/jetpack/extensions/blocks/tiled-gallery/tiled-gallery.php
deleted file mode 100644
index f8e69ee8..00000000
--- a/plugins/jetpack/extensions/blocks/tiled-gallery/tiled-gallery.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-/**
- * Tiled Gallery block. Depends on the Photon module.
- *
- * @since 6.9.0
- *
- * @package Jetpack
- */
-
-if (
- ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ||
- class_exists( 'Jetpack_Photon' ) && Jetpack::is_module_active( 'photon' )
-) {
- jetpack_register_block(
- 'jetpack/tiled-gallery',
- array(
- 'render_callback' => 'jetpack_tiled_gallery_load_block_assets',
- )
- );
-
- /**
- * Tiled gallery block registration/dependency declaration.
- *
- * @param array $attr Array containing the block attributes.
- * @param string $content String containing the block content.
- *
- * @return string
- */
- function jetpack_tiled_gallery_load_block_assets( $attr, $content ) {
- Jetpack_Gutenberg::load_assets_as_required(
- 'tiled-gallery',
- array( 'wp-polyfill' )
- );
-
- /**
- * Filter the output of the Tiled Galleries content.
- *
- * @module tiled-gallery
- *
- * @since 6.9.0
- *
- * @param string $content Tiled Gallery block content.
- */
- return apply_filters( 'jetpack_tiled_galleries_block_content', $content );
- }
-}
diff --git a/plugins/jetpack/extensions/blocks/vr/vr.php b/plugins/jetpack/extensions/blocks/vr/vr.php
deleted file mode 100644
index f6ef70a6..00000000
--- a/plugins/jetpack/extensions/blocks/vr/vr.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-/**
- * VR Block.
- *
- * @since 7.1.0
- *
- * @package Jetpack
- */
-
-jetpack_register_block( 'jetpack/vr' );
diff --git a/plugins/jetpack/extensions/blocks/wordads/wordads.php b/plugins/jetpack/extensions/blocks/wordads/wordads.php
deleted file mode 100644
index 6fd39e1b..00000000
--- a/plugins/jetpack/extensions/blocks/wordads/wordads.php
+++ /dev/null
@@ -1,121 +0,0 @@
-<?php //phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
-/**
- * Ads Block.
- *
- * @since 7.1.0
- *
- * @package Jetpack
- */
-class Jetpack_WordAds_Gutenblock {
- const BLOCK_NAME = 'jetpack/wordads';
-
- /**
- * Check if site is on WP.com Simple.
- *
- * @return bool
- */
- private static function is_wpcom() {
- return defined( 'IS_WPCOM' ) && IS_WPCOM;
- }
- /**
- * Check if the WordAds module is active.
- *
- * @return bool
- */
- private static function is_jetpack_module_active() {
- return method_exists( 'Jetpack', 'is_module_active' ) && Jetpack::is_module_active( 'wordads' );
- }
-
- /**
- * Check if the site is approved for ads for WP.com Simple sites.
- *
- * @return bool
- */
- private static function is_available() {
- if ( self::is_wpcom() ) {
- return has_any_blog_stickers( array( 'wordads', 'wordads-approved', 'wordads-approved-misfits' ), get_current_blog_id() );
- }
-
- return self::is_jetpack_module_active();
- }
-
- /**
- * Register the WordAds block.
- */
- public static function register() {
- if ( self::is_available() ) {
- jetpack_register_block(
- self::BLOCK_NAME,
- array(
- 'render_callback' => array( 'Jetpack_WordAds_Gutenblock', 'gutenblock_render' ),
- )
- );
- }
- }
-
- /**
- * Set if the WordAds block is available.
- */
- public static function set_availability() {
- if ( ! self::is_available() ) {
- Jetpack_Gutenberg::set_extension_unavailable( self::BLOCK_NAME, 'WordAds unavailable' );
- return;
- }
- // Make the block available. Just in case it wasn't registed before.
- Jetpack_Gutenberg::set_extension_available( self::BLOCK_NAME );
- }
-
- /**
- * Renders the WordAds block.
- *
- * @param array $attr Block attributes.
- *
- * @return string Block HTML.
- */
- public static function gutenblock_render( $attr ) {
- global $wordads;
-
- /** This filter is already documented in modules/wordads/wordads.php `insert_ad()` */
- if ( empty( $wordads ) || is_feed() || apply_filters( 'wordads_inpost_disable', false ) ) {
- return '';
- }
-
- if ( ! empty( $attr['hideMobile'] ) && $wordads->params->is_mobile() ) {
- return '';
- }
-
- if ( ! self::is_wpcom() && $wordads->option( 'wordads_house' ) ) {
- return $wordads->get_ad( 'inline', 'house' );
- }
-
- // section_id is mostly depricated at this point, but it helps us (devs) keep track of which ads end up where
- // 6 is to keep track of gutenblock ads.
- $section_id = $wordads->params->blog_id . '6';
- $align = 'center';
- if ( isset( $attr['align'] ) && in_array( $attr['align'], array( 'left', 'center', 'right' ), true ) ) {
- $align = $attr['align'];
- }
- $align = 'align' . $align;
-
- $ad_tag_ids = $wordads->get_ad_tags();
- $format = 'mrec';
- if ( isset( $attr['format'] ) && in_array( $attr['format'], array_keys( $ad_tag_ids ), true ) ) {
- $format = $attr['format'];
- }
-
- $height = $ad_tag_ids[ $format ]['height'];
- $width = $ad_tag_ids[ $format ]['width'];
- $snippet = $wordads->get_ad_snippet( $section_id, $height, $width, 'inline', $wordads->get_solo_unit_css() );
- return $wordads->get_ad_div( 'inline', $snippet, array( $align ) );
- }
-}
-
-add_action(
- 'init',
- array( 'Jetpack_WordAds_Gutenblock', 'register' )
-);
-
-add_action(
- 'jetpack_register_gutenberg_extensions',
- array( 'Jetpack_WordAds_Gutenblock', 'set_availability' )
-);
diff --git a/plugins/jetpack/functions.compat.php b/plugins/jetpack/functions.compat.php
deleted file mode 100644
index bc7e6fbd..00000000
--- a/plugins/jetpack/functions.compat.php
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-
-/**
-* Required for class.media-extractor.php to match expected function naming convention.
-*
-* @param $url Can be just the $url or the whole $atts array
-* @return bool|mixed The Youtube video ID via jetpack_get_youtube_id
-*/
-
-function jetpack_shortcode_get_youtube_id( $url ) {
- return jetpack_get_youtube_id( $url );
-}
-
-/**
-* @param $url Can be just the $url or the whole $atts array
-* @return bool|mixed The Youtube video ID
-*/
-function jetpack_get_youtube_id( $url ) {
- // Do we have an $atts array? Get first att
- if ( is_array( $url ) ) {
- $url = reset( $url );
- }
-
- $url = youtube_sanitize_url( $url );
- $url = parse_url( $url );
- $id = false;
-
- if ( ! isset( $url['query'] ) )
- return false;
-
- parse_str( $url['query'], $qargs );
-
- if ( ! isset( $qargs['v'] ) && ! isset( $qargs['list'] ) )
- return false;
-
- if ( isset( $qargs['list'] ) )
- $id = preg_replace( '|[^_a-z0-9-]|i', '', $qargs['list'] );
-
- if ( empty( $id ) )
- $id = preg_replace( '|[^_a-z0-9-]|i', '', $qargs['v'] );
-
- return $id;
-}
-
-if ( !function_exists( 'youtube_sanitize_url' ) ) :
-/**
-* Normalizes a YouTube URL to include a v= parameter and a query string free of encoded ampersands.
-*
-* @param string $url
-* @return string The normalized URL
-*/
-function youtube_sanitize_url( $url ) {
- $url = trim( $url, ' "' );
- $url = trim( $url );
- $url = str_replace( array( 'youtu.be/', '/v/', '#!v=', '&amp;', '&#038;', 'playlist' ), array( 'youtu.be/?v=', '/?v=', '?v=', '&', '&', 'videoseries' ), $url );
-
- // Replace any extra question marks with ampersands - the result of a URL like "http://www.youtube.com/v/9FhMMmqzbD8?fs=1&hl=en_US" being passed in.
- $query_string_start = strpos( $url, "?" );
-
- if ( false !== $query_string_start ) {
- $url = substr( $url, 0, $query_string_start + 1 ) . str_replace( "?", "&", substr( $url, $query_string_start + 1 ) );
- }
-
- return $url;
-}
-endif;
-
-/**
- * Merge in three string helper functions from WPCOM.
- *
- * @see WPCOM/wp-content/mu-plugins/string-helpers.php
- */
-if ( ! function_exists( 'wp_startswith' ) ) :
- function wp_startswith( $haystack, $needle ) {
- return 0 === strpos( $haystack, $needle );
- }
-endif;
-
-
-if ( ! function_exists( 'wp_endswith' ) ) :
- function wp_endswith( $haystack, $needle ) {
- return $needle === substr( $haystack, -strlen( $needle ));
- }
-endif;
-
-if ( ! function_exists( 'wp_in' ) ) :
- function wp_in( $needle, $haystack ) {
- return false !== strpos( $haystack, $needle );
- }
-endif;
diff --git a/plugins/jetpack/functions.gallery.php b/plugins/jetpack/functions.gallery.php
deleted file mode 100644
index 7fc90611..00000000
--- a/plugins/jetpack/functions.gallery.php
+++ /dev/null
@@ -1,101 +0,0 @@
-<?php
-
-/**
- * Renders extra controls in the Gallery Settings section of the new media UI.
- */
-class Jetpack_Gallery_Settings {
- function __construct() {
- add_action( 'admin_init', array( $this, 'admin_init' ) );
- }
-
- function admin_init() {
- /**
- * Filter the available gallery types.
- *
- * @module shortcodes, tiled-gallery
- *
- * @since 2.5.1
- *
- * @param array $value Array of the default thumbnail grid gallery type. Default array contains one key, ‘default’.
- *
- */
- $this->gallery_types = apply_filters( 'jetpack_gallery_types', array( 'default' => __( 'Thumbnail Grid', 'jetpack' ) ) );
-
- // Enqueue the media UI only if needed.
- if ( count( $this->gallery_types ) > 1 ) {
- add_action( 'wp_enqueue_media', array( $this, 'wp_enqueue_media' ) );
- add_action( 'print_media_templates', array( $this, 'print_media_templates' ) );
- }
- // Add Slideshow and Galleries functionality to core's media gallery widget.
- add_filter( 'widget_media_gallery_instance_schema', array( $this, 'core_media_widget_compat' ) );
- }
-
- /**
- * Updates the schema of the core gallery widget so we can save the
- * fields that we add to Gallery Widgets, like `type` and `conditions`
- *
- * @param $schema The current schema for the core gallery widget
- *
- * @return array the updated schema
- */
- public function core_media_widget_compat( $schema ) {
- $schema['type'] = array(
- 'type' => 'string',
- 'enum' => array_keys( $this->gallery_types ),
- 'description' => __( 'Type of gallery.', 'jetpack' ),
- 'default' => 'default',
- );
- return $schema;
- }
-
- /**
- * Registers/enqueues the gallery settings admin js.
- */
- function wp_enqueue_media() {
- if ( ! wp_script_is( 'jetpack-gallery-settings', 'registered' ) ) {
- /**
- * This only happens if we're not in Jetpack, but on WPCOM instead.
- * This is the correct path for WPCOM.
- */
- wp_register_script(
- 'jetpack-gallery-settings',
- Jetpack::get_file_url_for_environment( '_inc/build/gallery-settings.min.js', '_inc/gallery-settings.js' ),
- array( 'media-views' ),
- '20121225'
- );
- }
-
- wp_enqueue_script( 'jetpack-gallery-settings' );
- }
-
- /**
- * Outputs a view template which can be used with wp.media.template
- */
- function print_media_templates() {
- /**
- * Filter the default gallery type.
- *
- * @module tiled-gallery
- *
- * @since 2.5.1
- *
- * @param string $value A string of the gallery type. Default is ‘default’.
- *
- */
- $default_gallery_type = apply_filters( 'jetpack_default_gallery_type', 'default' );
-
- ?>
- <script type="text/html" id="tmpl-jetpack-gallery-settings">
- <label class="setting">
- <span><?php _e( 'Type', 'jetpack' ); ?></span>
- <select class="type" name="type" data-setting="type">
- <?php foreach ( $this->gallery_types as $value => $caption ) : ?>
- <option value="<?php echo esc_attr( $value ); ?>" <?php selected( $value, $default_gallery_type ); ?>><?php echo esc_html( $caption ); ?></option>
- <?php endforeach; ?>
- </select>
- </label>
- </script>
- <?php
- }
-}
-new Jetpack_Gallery_Settings;
diff --git a/plugins/jetpack/functions.global.php b/plugins/jetpack/functions.global.php
deleted file mode 100644
index 4697fc00..00000000
--- a/plugins/jetpack/functions.global.php
+++ /dev/null
@@ -1,208 +0,0 @@
-<?php
-/**
- * This file is meant to be the home for any generic & reusable functions
- * that can be accessed anywhere within Jetpack.
- *
- * This file is loaded whether or not Jetpack is active.
- *
- * Please namespace with jetpack_
- * Please write docblocks
- */
-
-/**
- * Disable direct access.
- */
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-/**
- * Set the admin language, based on user language.
- *
- * @since 4.5.0
- * @deprecated 6.6.0 Use Core function instead.
- *
- * @return string
- */
-function jetpack_get_user_locale() {
- _deprecated_function( __FUNCTION__, 'jetpack-6.6.0', 'get_user_locale' );
- return get_user_locale();
-}
-
-/**
- * Determine if this site is an Atomic site or not looking first at the 'at_options' option.
- * As a fallback, check for presence of wpcomsh plugin to determine if a current site has undergone AT.
- *
- * @since 4.8.1
- *
- * @return bool
- */
-function jetpack_is_atomic_site() {
- $at_options = get_option( 'at_options', array() );
- return ! empty( $at_options ) || defined( 'WPCOMSH__PLUGIN_FILE' );
-}
-
-/**
- * Register post type for migration.
- *
- * @since 5.2
- */
-function jetpack_register_migration_post_type() {
- register_post_type( 'jetpack_migration', array(
- 'supports' => array(),
- 'taxonomies' => array(),
- 'hierarchical' => false,
- 'public' => false,
- 'has_archive' => false,
- 'can_export' => true,
- ) );
-}
-
-/**
- * Stores migration data in the database.
- *
- * @since 5.2
- *
- * @param string $option_name
- * @param bool $option_value
- *
- * @return int|WP_Error
- */
-function jetpack_store_migration_data( $option_name, $option_value ) {
- jetpack_register_migration_post_type();
-
- $insert = array(
- 'post_title' => $option_name,
- 'post_content_filtered' => $option_value,
- 'post_type' => 'jetpack_migration',
- 'post_date' => date( 'Y-m-d H:i:s', time() ),
- );
-
- $post = get_page_by_title( $option_name, 'OBJECT', 'jetpack_migration' );
-
- if ( null !== $post ) {
- $insert['ID'] = $post->ID;
- }
-
- return wp_insert_post( $insert, true );
-}
-
-/**
- * Retrieves legacy image widget data.
- *
- * @since 5.2
- *
- * @param string $option_name
- *
- * @return mixed|null
- */
-function jetpack_get_migration_data( $option_name ) {
- $post = get_page_by_title( $option_name, 'OBJECT', 'jetpack_migration' );
-
- return null !== $post ? maybe_unserialize( $post->post_content_filtered ) : null;
-}
-
-/**
- * Prints a TOS blurb used throughout the connection prompts.
- *
- * @since 5.3
- *
- * @return string
- */
-function jetpack_render_tos_blurb() {
- printf(
- __( 'By clicking the <strong>Set up Jetpack</strong> button, you agree to our <a href="%s" target="_blank">Terms of Service</a> and to <a href="%s" target="_blank">share details</a> with WordPress.com.', 'jetpack' ),
- 'https://wordpress.com/tos',
- 'https://jetpack.com/support/what-data-does-jetpack-sync'
- );
-}
-
-/**
- * Intervene upgrade process so Jetpack themes are downloaded with credentials.
- *
- * @since 5.3
- *
- * @param bool $preempt Whether to preempt an HTTP request's return value. Default false.
- * @param array $r HTTP request arguments.
- * @param string $url The request URL.
- *
- * @return array|bool|WP_Error
- */
-function jetpack_theme_update( $preempt, $r, $url ) {
- if ( false !== stripos( $url, JETPACK__WPCOM_JSON_API_HOST . '/rest/v1/themes/download' ) ) {
- $file = $r['filename'];
- if ( ! $file ) {
- return new WP_Error( 'problem_creating_theme_file', esc_html__( 'Problem creating file for theme download', 'jetpack' ) );
- }
- $theme = pathinfo( parse_url( $url, PHP_URL_PATH ), PATHINFO_FILENAME );
-
- // Remove filter to avoid endless loop since wpcom_json_api_request_as_blog uses this too.
- remove_filter( 'pre_http_request', 'jetpack_theme_update' );
- $result = Jetpack_Client::wpcom_json_api_request_as_blog(
- "themes/download/$theme.zip", '1.1', array( 'stream' => true, 'filename' => $file )
- );
-
- if ( 200 !== wp_remote_retrieve_response_code( $result ) ) {
- return new WP_Error( 'problem_fetching_theme', esc_html__( 'Problem downloading theme', 'jetpack' ) );
- }
- return $result;
- }
- return $preempt;
-}
-
-/**
- * Add the filter when a upgrade is going to be downloaded.
- *
- * @since 5.3
- *
- * @param bool $reply Whether to bail without returning the package. Default false.
- *
- * @return bool
- */
-function jetpack_upgrader_pre_download( $reply ) {
- add_filter( 'pre_http_request', 'jetpack_theme_update', 10, 3 );
- return $reply;
-}
-
-add_filter( 'upgrader_pre_download', 'jetpack_upgrader_pre_download' );
-
-
-/**
- * Wraps data in a way so that we can distinguish between objects and array and also prevent object recursion.
- *
- * @since 6.1.0
- *
- * @param $any
- * @param array $seen_nodes
- *
- * @return array
- */
-function jetpack_json_wrap( &$any, $seen_nodes = array() ) {
- if ( is_object( $any ) ) {
- $input = get_object_vars( $any );
- $input['__o'] = 1;
- } else {
- $input = &$any;
- }
-
- if ( is_array( $input ) ) {
- $seen_nodes[] = &$any;
-
- $return = array();
-
- foreach ( $input as $k => &$v ) {
- if ( ( is_array( $v ) || is_object( $v ) ) ) {
- if ( in_array( $v, $seen_nodes, true ) ) {
- continue;
- }
- $return[ $k ] = jetpack_json_wrap( $v, $seen_nodes );
- } else {
- $return[ $k ] = $v;
- }
- }
-
- return $return;
- }
-
- return $any;
-}
diff --git a/plugins/jetpack/functions.opengraph.php b/plugins/jetpack/functions.opengraph.php
deleted file mode 100644
index a6d70684..00000000
--- a/plugins/jetpack/functions.opengraph.php
+++ /dev/null
@@ -1,400 +0,0 @@
-<?php
-/**
- * Open Graph Tags
- *
- * Add Open Graph tags so that Facebook (and any other service that supports them)
- * can crawl the site better and we provide a better sharing experience.
- *
- * @link http://ogp.me/
- * @link http://developers.facebook.com/docs/opengraph/
- */
-add_action( 'wp_head', 'jetpack_og_tags' );
-
-function jetpack_og_tags() {
- /**
- * Allow Jetpack to output Open Graph Meta Tags.
- *
- * @module sharedaddy, publicize
- *
- * @since 2.0.0
- * @deprecated 2.0.3 Duplicative filter. Use `jetpack_enable_open_graph`.
- *
- * @param bool true Should Jetpack's Open Graph Meta Tags be enabled. Default to true.
- */
- if ( false === apply_filters( 'jetpack_enable_opengraph', true ) ) {
- _deprecated_function( 'jetpack_enable_opengraph', '2.0.3', 'jetpack_enable_open_graph' );
- return;
- }
-
- // Disable the widont filter on WP.com to avoid stray &nbsps
- $disable_widont = remove_filter( 'the_title', 'widont' );
-
- $og_output = "\n<!-- Jetpack Open Graph Tags -->\n";
- $tags = array();
-
- /**
- * Filter the minimum width of the images used in Jetpack Open Graph Meta Tags.
- *
- * @module sharedaddy, publicize
- *
- * @since 2.0.0
- *
- * @param int 200 Minimum image width used in Jetpack Open Graph Meta Tags.
- */
- $image_width = absint( apply_filters( 'jetpack_open_graph_image_width', 200 ) );
- /**
- * Filter the minimum height of the images used in Jetpack Open Graph Meta Tags.
- *
- * @module sharedaddy, publicize
- *
- * @since 2.0.0
- *
- * @param int 200 Minimum image height used in Jetpack Open Graph Meta Tags.
- */
- $image_height = absint( apply_filters( 'jetpack_open_graph_image_height', 200 ) );
- $description_length = 197;
-
- if ( is_home() || is_front_page() ) {
- $site_type = Jetpack_Options::get_option_and_ensure_autoload( 'open_graph_protocol_site_type', '' );
- $tags['og:type'] = ! empty( $site_type ) ? $site_type : 'website';
- $tags['og:title'] = get_bloginfo( 'name' );
- $tags['og:description'] = get_bloginfo( 'description' );
-
- $front_page_id = get_option( 'page_for_posts' );
- if ( 'page' == get_option( 'show_on_front' ) && $front_page_id && is_home() )
- $tags['og:url'] = get_permalink( $front_page_id );
- else
- $tags['og:url'] = home_url( '/' );
-
- // Associate a blog's root path with one or more Facebook accounts
- $facebook_admins = Jetpack_Options::get_option_and_ensure_autoload( 'facebook_admins', array() );
- if ( ! empty( $facebook_admins ) )
- $tags['fb:admins'] = $facebook_admins;
-
- } else if ( is_author() ) {
- $tags['og:type'] = 'profile';
-
- $author = get_queried_object();
-
- $tags['og:title'] = $author->display_name;
- if ( ! empty( $author->user_url ) ) {
- $tags['og:url'] = $author->user_url;
- } else {
- $tags['og:url'] = get_author_posts_url( $author->ID );
- }
- $tags['og:description'] = $author->description;
- $tags['profile:first_name'] = get_the_author_meta( 'first_name', $author->ID );
- $tags['profile:last_name'] = get_the_author_meta( 'last_name', $author->ID );
-
- } else if ( is_singular() ) {
- global $post;
- $data = $post; // so that we don't accidentally explode the global
-
- $tags['og:type'] = 'article';
- if ( empty( $data->post_title ) ) {
- $tags['og:title'] = ' ';
- } else {
- /** This filter is documented in core/src/wp-includes/post-template.php */
- $tags['og:title'] = wp_kses( apply_filters( 'the_title', $data->post_title, $data->ID ), array() );
- }
-
- $tags['og:url'] = get_permalink( $data->ID );
- if ( ! post_password_required() ) {
- if ( ! empty( $data->post_excerpt ) ) {
- $tags['og:description'] = preg_replace( '@https?://[\S]+@', '', strip_shortcodes( wp_kses( $data->post_excerpt, array() ) ) );
- } else {
- $exploded_content_on_more_tag = explode( '<!--more-->', $data->post_content );
- $tags['og:description'] = wp_trim_words( preg_replace( '@https?://[\S]+@', '', strip_shortcodes( wp_kses( $exploded_content_on_more_tag[0], array() ) ) ) );
- }
- }
- if ( empty( $tags['og:description'] ) ) {
- /**
- * Filter the fallback `og:description` used when no excerpt information is provided.
- *
- * @module sharedaddy, publicize
- *
- * @since 3.9.0
- *
- * @param string $var Fallback og:description. Default is translated `Visit the post for more'.
- * @param object $data Post object for the current post.
- */
- $tags['og:description'] = apply_filters( 'jetpack_open_graph_fallback_description', __( 'Visit the post for more.', 'jetpack' ), $data );
- } else {
- // Intentionally not using a filter to prevent pollution. @see https://github.com/Automattic/jetpack/pull/2899#issuecomment-151957382
- $tags['og:description'] = wp_kses( trim( convert_chars( wptexturize( $tags['og:description'] ) ) ), array() );
- }
-
- $tags['article:published_time'] = date( 'c', strtotime( $data->post_date_gmt ) );
- $tags['article:modified_time'] = date( 'c', strtotime( $data->post_modified_gmt ) );
- if ( post_type_supports( get_post_type( $data ), 'author' ) && isset( $data->post_author ) ) {
- $publicize_facebook_user = get_post_meta( $data->ID, '_publicize_facebook_user', true );
- if ( ! empty( $publicize_facebook_user ) ) {
- $tags['article:author'] = esc_url( $publicize_facebook_user );
- }
- }
- }
-
- /**
- * Allow plugins to inject additional template-specific Open Graph tags.
- *
- * @module sharedaddy, publicize
- *
- * @since 3.0.0
- *
- * @param array $tags Array of Open Graph Meta tags.
- * @param array $args Array of image size parameters.
- */
- $tags = apply_filters( 'jetpack_open_graph_base_tags', $tags, compact( 'image_width', 'image_height' ) );
-
- // Re-enable widont if we had disabled it
- if ( $disable_widont )
- add_filter( 'the_title', 'widont' );
-
- /**
- * Do not return any Open Graph Meta tags if we don't have any info about a post.
- *
- * @module sharedaddy, publicize
- *
- * @since 3.0.0
- *
- * @param bool true Do not return any Open Graph Meta tags if we don't have any info about a post.
- */
- if ( empty( $tags ) && apply_filters( 'jetpack_open_graph_return_if_empty', true ) )
- return;
-
- $tags['og:site_name'] = get_bloginfo( 'name' );
-
- // Get image info and build tags
- if ( ! post_password_required() ) {
- $image_info = jetpack_og_get_image( $image_width, $image_height );
- $tags['og:image'] = $image_info['src'];
-
- if ( ! empty( $image_info['width'] ) ) {
- $tags['og:image:width'] = (int) $image_info['width'];
- }
- if ( ! empty( $image_info['height'] ) ) {
- $tags['og:image:height'] = (int) $image_info['height'];
- }
- if ( ! empty( $image_info['alt_text'] ) ) {
- $tags['og:image:alt'] = esc_attr( $image_info['alt_text'] );
- }
- }
-
- // Facebook whines if you give it an empty title
- if ( empty( $tags['og:title'] ) )
- $tags['og:title'] = __( '(no title)', 'jetpack' );
-
- // Shorten the description if it's too long
- if ( isset( $tags['og:description'] ) ) {
- $tags['og:description'] = strlen( $tags['og:description'] ) > $description_length ? mb_substr( $tags['og:description'], 0, $description_length ) . '…' : $tags['og:description'];
- }
-
- // Try to add OG locale tag if the WP->FB data mapping exists
- if ( defined( 'JETPACK__GLOTPRESS_LOCALES_PATH' ) && file_exists( JETPACK__GLOTPRESS_LOCALES_PATH ) ) {
- require_once JETPACK__GLOTPRESS_LOCALES_PATH;
- $_locale = get_locale();
-
- // We have to account for w.org vs WP.com locale divergence
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $gp_locale = GP_Locales::by_field( 'slug', $_locale );
- } else {
- $gp_locale = GP_Locales::by_field( 'wp_locale', $_locale );
- }
- }
-
- if ( isset( $gp_locale->facebook_locale ) && ! empty( $gp_locale->facebook_locale ) ) {
- $tags['og:locale'] = $gp_locale->facebook_locale;
- }
-
- /**
- * Allow the addition of additional Open Graph Meta tags, or modify the existing tags.
- *
- * @module sharedaddy, publicize
- *
- * @since 2.0.0
- *
- * @param array $tags Array of Open Graph Meta tags.
- * @param array $args Array of image size parameters.
- */
- $tags = apply_filters( 'jetpack_open_graph_tags', $tags, compact( 'image_width', 'image_height' ) );
-
- // secure_urls need to go right after each og:image to work properly so we will abstract them here
- $secure = $tags['og:image:secure_url'] = ( empty( $tags['og:image:secure_url'] ) ) ? '' : $tags['og:image:secure_url'];
- unset( $tags['og:image:secure_url'] );
- $secure_image_num = 0;
-
- foreach ( (array) $tags as $tag_property => $tag_content ) {
- // to accommodate multiple images
- $tag_content = (array) $tag_content;
- $tag_content = array_unique( $tag_content );
-
- foreach ( $tag_content as $tag_content_single ) {
- if ( empty( $tag_content_single ) )
- continue; // Don't ever output empty tags
- $og_tag = sprintf( '<meta property="%s" content="%s" />', esc_attr( $tag_property ), esc_attr( $tag_content_single ) );
- /**
- * Filter the HTML Output of each Open Graph Meta tag.
- *
- * @module sharedaddy, publicize
- *
- * @since 2.0.0
- *
- * @param string $og_tag HTML HTML Output of each Open Graph Meta tag.
- */
- $og_output .= apply_filters( 'jetpack_open_graph_output', $og_tag );
- $og_output .= "\n";
-
- if ( 'og:image' == $tag_property ) {
- if ( is_array( $secure ) && !empty( $secure[$secure_image_num] ) ) {
- $og_tag = sprintf( '<meta property="og:image:secure_url" content="%s" />', esc_url( $secure[ $secure_image_num ] ) );
- /** This filter is documented in functions.opengraph.php */
- $og_output .= apply_filters( 'jetpack_open_graph_output', $og_tag );
- $og_output .= "\n";
- } else if ( !is_array( $secure ) && !empty( $secure ) ) {
- $og_tag = sprintf( '<meta property="og:image:secure_url" content="%s" />', esc_url( $secure ) );
- /** This filter is documented in functions.opengraph.php */
- $og_output .= apply_filters( 'jetpack_open_graph_output', $og_tag );
- $og_output .= "\n";
- }
- $secure_image_num++;
- }
- }
- }
- $og_output .= "\n<!-- End Jetpack Open Graph Tags -->\n";
- echo $og_output;
-}
-
-/**
- * Returns an image used in social shares.
- *
- * @since 2.0.0
- *
- * @param int $width Minimum width for the image. Default is 200 based on Facebook's requirement.
- * @param int $height Minimum height for the image. Default is 200 based on Facebook's requirement.
- * @param null $deprecated Deprecated.
- *
- * @return array The source ('src'), 'width', and 'height' of the image.
- */
-function jetpack_og_get_image( $width = 200, $height = 200, $deprecated = null ) {
- if ( ! empty( $deprecated ) ) {
- _deprecated_argument( __FUNCTION__, '6.6.0' );
- }
- $image = array();
-
- if ( is_singular() && ! is_home() ) {
- // Grab obvious image if post is an attachment page for an image
- if ( is_attachment( get_the_ID() ) && 'image' === substr( get_post_mime_type(), 0, 5 ) ) {
- $image['src'] = wp_get_attachment_url( get_the_ID() );
- }
-
- // Attempt to find something good for this post using our generalized PostImages code
- if ( empty( $image ) && class_exists( 'Jetpack_PostImages' ) ) {
- $post_images = Jetpack_PostImages::get_images( get_the_ID(), array( 'width' => $width, 'height' => $height ) );
- if ( $post_images && ! is_wp_error( $post_images ) ) {
- foreach ( (array) $post_images as $post_image ) {
- $image['src'] = $post_image['src'];
- if ( isset( $post_image['src_width'], $post_image['src_height'] ) ) {
- $image['width'] = $post_image['src_width'];
- $image['height'] = $post_image['src_height'];
- }
- if ( ! empty( $post_image['alt_text'] ) ) {
- $image['alt_text'] = $post_image['alt_text'];
- }
- }
- }
- }
- } elseif ( is_author() ) {
- $author = get_queried_object();
- $image['src'] = get_avatar_url( $author->user_email, array(
- 'size' => $width,
- ) );
- }
-
- // First fall back, blavatar.
- if ( empty( $image ) && function_exists( 'blavatar_domain' ) ) {
- $blavatar_domain = blavatar_domain( site_url() );
- if ( blavatar_exists( $blavatar_domain ) ) {
- $image['src'] = blavatar_url( $blavatar_domain, 'img', $width, false, true );
- $image['width'] = $width;
- $image['height'] = $height;
- }
- }
-
- // Second fall back, Site Logo.
- if ( empty( $image ) && ( function_exists( 'jetpack_has_site_logo' ) && jetpack_has_site_logo() ) ) {
- $image_id = jetpack_get_site_logo( 'id' );
- $logo = wp_get_attachment_image_src( $image_id, 'full' );
- if (
- isset( $logo[0], $logo[1], $logo[2] )
- && ( _jetpack_og_get_image_validate_size( $logo[1], $logo[2], $width, $height ) )
- ) {
- $image['src'] = $logo[0];
- $image['width'] = $logo[1];
- $image['height'] = $logo[2];
- }
- }
-
- // Third fall back, Core Site Icon, if valid in size.
- if ( empty( $image ) && has_site_icon() ) {
- $image_id = get_option( 'site_icon' );
- $icon = wp_get_attachment_image_src( $image_id, 'full' );
- if (
- isset( $icon[0], $icon[1], $icon[2] )
- && ( _jetpack_og_get_image_validate_size( $icon[1], $icon[2], $width, $height ) )
- ) {
- $image['src'] = $icon[0];
- $image['width'] = $icon[1];
- $image['height'] = $icon[2];
- }
- }
-
- // Final fall back, blank image.
- if ( empty( $image ) ) {
- /**
- * Filter the default Open Graph Image tag, used when no Image can be found in a post.
- *
- * @since 3.0.0
- *
- * @param string $str Default Image URL.
- */
- $image['src'] = apply_filters( 'jetpack_open_graph_image_default', 'https://s0.wp.com/i/blank.jpg' );
- }
-
- return $image;
-}
-
-
-/**
- * Validate the width and height against required width and height
- *
- * @param int $width Width of the image.
- * @param int $height Height of the image.
- * @param int $req_width Required width to pass validation.
- * @param int $req_height Required height to pass validation.
- *
- * @return bool - True if the image passed the required size validation
- */
-function _jetpack_og_get_image_validate_size( $width, $height, $req_width, $req_height ) {
- if ( ! $width || ! $height ) {
- return false;
- }
-
- $valid_width = ( $width >= $req_width );
- $valid_height = ( $height >= $req_height );
- $is_image_acceptable = $valid_width && $valid_height;
-
- return $is_image_acceptable;
-}
-
-/**
- * Gets a gravatar URL of the specified size.
- *
- * @param string $email E-mail address to get gravatar for.
- * @param int $width Size of returned gravatar.
- * @return array|bool|mixed|string
- */
-function jetpack_og_get_image_gravatar( $email, $width ) {
- return get_avatar_url( $email, array(
- 'size' => $width,
- ) );
-}
diff --git a/plugins/jetpack/functions.photon.php b/plugins/jetpack/functions.photon.php
deleted file mode 100644
index 015d713e..00000000
--- a/plugins/jetpack/functions.photon.php
+++ /dev/null
@@ -1,317 +0,0 @@
-<?php
-
-/**
- * Generates a Photon URL.
- *
- * @see http://developer.wordpress.com/docs/photon/
- *
- * @param string $image_url URL to the publicly accessible image you want to manipulate
- * @param array|string $args An array of arguments, i.e. array( 'w' => '300', 'resize' => array( 123, 456 ) ), or in string form (w=123&h=456)
- * @return string The raw final URL. You should run this through esc_url() before displaying it.
- */
-function jetpack_photon_url( $image_url, $args = array(), $scheme = null ) {
- $image_url = trim( $image_url );
-
- if ( ! defined( 'IS_WPCOM' ) || ! IS_WPCOM ) {
- /**
- * Disables Photon URL processing for local development
- *
- * @module photon
- *
- * @since 4.1.0
- *
- * @param bool false Result of Jetpack::is_development_mode.
- */
- if ( true === apply_filters( 'jetpack_photon_development_mode', Jetpack::is_development_mode() ) ) {
- return $image_url;
- }
- }
-
- /**
- * Allow specific image URls to avoid going through Photon.
- *
- * @module photon
- *
- * @since 3.2.0
- *
- * @param bool false Should the image be returned as is, without going through Photon. Default to false.
- * @param string $image_url Image URL.
- * @param array|string $args Array of Photon arguments.
- * @param string|null $scheme Image scheme. Default to null.
- */
- if ( false !== apply_filters( 'jetpack_photon_skip_for_url', false, $image_url, $args, $scheme ) ) {
- return $image_url;
- }
-
- /**
- * Filter the original image URL before it goes through Photon.
- *
- * @module photon
- *
- * @since 1.9.0
- *
- * @param string $image_url Image URL.
- * @param array|string $args Array of Photon arguments.
- * @param string|null $scheme Image scheme. Default to null.
- */
- $image_url = apply_filters( 'jetpack_photon_pre_image_url', $image_url, $args, $scheme );
- /**
- * Filter the original Photon image parameters before Photon is applied to an image.
- *
- * @module photon
- *
- * @since 1.9.0
- *
- * @param array|string $args Array of Photon arguments.
- * @param string $image_url Image URL.
- * @param string|null $scheme Image scheme. Default to null.
- */
- $args = apply_filters( 'jetpack_photon_pre_args', $args, $image_url, $scheme );
-
- if ( empty( $image_url ) ) {
- return $image_url;
- }
-
- $image_url_parts = @jetpack_photon_parse_url( $image_url );
-
- // Unable to parse
- if ( ! is_array( $image_url_parts ) || empty( $image_url_parts['host'] ) || empty( $image_url_parts['path'] ) ) {
- return $image_url;
- }
-
- if ( is_array( $args ) ){
- // Convert values that are arrays into strings
- foreach ( $args as $arg => $value ) {
- if ( is_array( $value ) ) {
- $args[$arg] = implode( ',', $value );
- }
- }
-
- // Encode values
- // See http://core.trac.wordpress.org/ticket/17923
- $args = rawurlencode_deep( $args );
- }
-
- // Don't photon-ize WPCOM hosted images -- we can serve them up from wpcom directly.
- $is_wpcom_image = false;
- if ( wp_endswith( strtolower( $image_url_parts['host'] ), '.files.wordpress.com' ) ) {
- $is_wpcom_image = true;
- if ( isset( $args['ssl'] ) ) {
- // Do not send the ssl argument to prevent caching issues
- unset( $args['ssl'] );
- }
- }
-
- /** This filter is documented below. */
- $custom_photon_url = apply_filters( 'jetpack_photon_domain', '', $image_url );
- $custom_photon_url = esc_url( $custom_photon_url );
-
- // You can't run a Photon URL through Photon again because query strings are stripped.
- // So if the image is already a Photon URL, append the new arguments to the existing URL.
- // Alternately, if it's a *.files.wordpress.com url, then keep the domain as is.
- if (
- in_array( $image_url_parts['host'], array( 'i0.wp.com', 'i1.wp.com', 'i2.wp.com' ) )
- || $image_url_parts['host'] === jetpack_photon_parse_url( $custom_photon_url, PHP_URL_HOST )
- || $is_wpcom_image
- ) {
- $photon_url = add_query_arg( $args, $image_url );
- return jetpack_photon_url_scheme( $photon_url, $scheme );
- }
-
- /**
- * Allow Photon to use query strings as well.
- * By default, Photon doesn't support query strings so we ignore them and look only at the path.
- * This setting is Photon Server dependent.
- *
- * @module photon
- *
- * @since 1.9.0
- *
- * @param bool false Should images using query strings go through Photon. Default is false.
- * @param string $image_url_parts['host'] Image URL's host.
- */
- if ( ! apply_filters( 'jetpack_photon_any_extension_for_domain', false, $image_url_parts['host'] ) ) {
- // Photon doesn't support query strings so we ignore them and look only at the path.
- // However some source images are served via PHP so check the no-query-string extension.
- // For future proofing, this is a blacklist of common issues rather than a whitelist.
- $extension = pathinfo( $image_url_parts['path'], PATHINFO_EXTENSION );
- if ( empty( $extension ) || in_array( $extension, array( 'php', 'ashx' ) ) ) {
- return $image_url;
- }
- }
-
- $image_host_path = $image_url_parts['host'] . $image_url_parts['path'];
-
- // Figure out which CDN subdomain to use
- srand( crc32( $image_host_path ) );
- $subdomain = rand( 0, 2 );
- srand();
-
- /**
- * Filters the domain used by the Photon module.
- *
- * @module photon
- *
- * @since 3.4.2
- *
- * @param string https://i{$subdomain}.wp.com Domain used by Photon. $subdomain is a random number between 0 and 2.
- * @param string $image_url URL of the image to be photonized.
- */
- $photon_domain = apply_filters( 'jetpack_photon_domain', "https://i{$subdomain}.wp.com", $image_url );
- $photon_domain = trailingslashit( esc_url( $photon_domain ) );
- $photon_url = $photon_domain . $image_host_path;
-
- /**
- * Add query strings to Photon URL.
- * By default, Photon doesn't support query strings so we ignore them.
- * This setting is Photon Server dependent.
- *
- * @module photon
- *
- * @since 1.9.0
- *
- * @param bool false Should query strings be added to the image URL. Default is false.
- * @param string $image_url_parts['host'] Image URL's host.
- */
- if ( isset( $image_url_parts['query'] ) && apply_filters( 'jetpack_photon_add_query_string_to_domain', false, $image_url_parts['host'] ) ) {
- $photon_url .= '?q=' . rawurlencode( $image_url_parts['query'] );
- }
-
- if ( $args ) {
- if ( is_array( $args ) ) {
- $photon_url = add_query_arg( $args, $photon_url );
- } else {
- // You can pass a query string for complicated requests but where you still want CDN subdomain help, etc.
- $photon_url .= '?' . $args;
- }
- }
-
- if ( isset( $image_url_parts['scheme'] ) && 'https' == $image_url_parts['scheme'] ) {
- $photon_url = add_query_arg( array( 'ssl' => 1 ), $photon_url );
- }
-
- return jetpack_photon_url_scheme( $photon_url, $scheme );
-}
-add_filter( 'jetpack_photon_url', 'jetpack_photon_url', 10, 3 );
-
-/**
- * WordPress.com
- *
- * If a cropped WP.com-hosted image is the source image, have Photon replicate the crop.
- */
-add_filter( 'jetpack_photon_pre_args', 'jetpack_photon_parse_wpcom_query_args', 10, 2 );
-
-function jetpack_photon_parse_wpcom_query_args( $args, $image_url ) {
- $parsed_url = @parse_url( $image_url );
-
- if ( ! $parsed_url )
- return $args;
-
- $image_url_parts = wp_parse_args( $parsed_url, array(
- 'host' => '',
- 'query' => ''
- ) );
-
- if ( '.files.wordpress.com' != substr( $image_url_parts['host'], -20 ) )
- return $args;
-
- if ( empty( $image_url_parts['query'] ) )
- return $args;
-
- $wpcom_args = wp_parse_args( $image_url_parts['query'] );
-
- if ( empty( $wpcom_args['w'] ) || empty( $wpcom_args['h'] ) )
- return $args;
-
- // Keep the crop by using "resize"
- if ( ! empty( $wpcom_args['crop'] ) ) {
- if ( is_array( $args ) ) {
- $args = array_merge( array( 'resize' => array( $wpcom_args['w'], $wpcom_args['h'] ) ), $args );
- } else {
- $args = 'resize=' . rawurlencode( absint( $wpcom_args['w'] ) . ',' . absint( $wpcom_args['h'] ) ) . '&' . $args;
- }
- } else {
- if ( is_array( $args ) ) {
- $args = array_merge( array( 'fit' => array( $wpcom_args['w'], $wpcom_args['h'] ) ), $args );
- } else {
- $args = 'fit=' . rawurlencode( absint( $wpcom_args['w'] ) . ',' . absint( $wpcom_args['h'] ) ) . '&' . $args;
- }
- }
-
- return $args;
-}
-
-function jetpack_photon_url_scheme( $url, $scheme ) {
- if ( ! in_array( $scheme, array( 'http', 'https', 'network_path' ) ) ) {
- if ( preg_match( '#^(https?:)?//#', $url ) ) {
- return $url;
- }
-
- $scheme = 'http';
- }
-
- if ( 'network_path' == $scheme ) {
- $scheme_slashes = '//';
- } else {
- $scheme_slashes = "$scheme://";
- }
-
- return preg_replace( '#^([a-z:]+)?//#i', $scheme_slashes, $url );
-}
-
-/**
- * A wrapper for PHP's parse_url, prepending assumed scheme for network path
- * URLs. PHP versions 5.4.6 and earlier do not correctly parse without scheme.
- *
- * @see http://php.net/manual/en/function.parse-url.php#refsect1-function.parse-url-changelog
- *
- * @param string $url The URL to parse
- * @param integer $component Retrieve specific URL component
- * @return mixed Result of parse_url
- */
-function jetpack_photon_parse_url( $url, $component = -1 ) {
- if ( 0 === strpos( $url, '//' ) ) {
- $url = ( is_ssl() ? 'https:' : 'http:' ) . $url;
- }
-
- return parse_url( $url, $component );
-}
-
-add_filter( 'jetpack_photon_skip_for_url', 'jetpack_photon_banned_domains', 9, 2 );
-function jetpack_photon_banned_domains( $skip, $image_url ) {
- $banned_host_patterns = array(
- '/^chart\.googleapis\.com$/',
- '/^chart\.apis\.google\.com$/',
- '/^graph\.facebook\.com$/',
- '/\.fbcdn\.net$/',
- '/\.paypalobjects\.com$/',
- '/\.dropbox\.com$/',
- '/\.cdninstagram\.com$/',
- );
-
- $host = jetpack_photon_parse_url( $image_url, PHP_URL_HOST );
-
- foreach ( $banned_host_patterns as $banned_host_pattern ) {
- if ( 1 === preg_match( $banned_host_pattern, $host ) ) {
- return true;
- }
- }
-
- return $skip;
-}
-
-
-/**
- * Jetpack Photon - Support Text Widgets.
- *
- * @access public
- * @param string $content Content from text widget.
- * @return string
- */
-function jetpack_photon_support_text_widgets( $content ) {
- if ( class_exists( 'Jetpack_Photon' ) && Jetpack::is_module_active( 'photon' ) ) {
- return Jetpack_Photon::filter_the_content( $content );
- }
- return $content;
-}
-add_filter( 'widget_text', 'jetpack_photon_support_text_widgets' );
diff --git a/plugins/jetpack/images/apps.svg b/plugins/jetpack/images/apps.svg
deleted file mode 100644
index f435f02b..00000000
--- a/plugins/jetpack/images/apps.svg
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 21.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- viewBox="0 0 128.7 100.1" style="enable-background:new 0 0 128.7 100.1;" xml:space="preserve">
-<style type="text/css">
- .st0{fill:#6F93AD;}
- .st1{fill:#BBC9D5;}
- .st2{fill:#FFFFFF;}
- .st3{fill:#CCCED0;}
- .st4{fill:#D8DEE4;}
- .st5{fill:#46799A;}
-</style>
-<g>
- <g>
- <rect x="57.1" y="80.1" class="st0" width="39.5" height="17.5"/>
- <path class="st1" d="M128.7,82H22.5V4.9c0-2.7,2.2-4.9,4.9-4.9h101.3V82z"/>
- <g>
- <rect x="31.3" y="10" class="st2" width="88.1" height="62.1"/>
- </g>
- <g>
- <path class="st0" d="M121.4,72.4c-7.7,0.8-15.4,0.7-23.2,0.7l-23.2,0L52,72.8c-7.7-0.1-15.4-0.1-23.2-1l0-0.5
- c7.7-0.8,15.4-0.7,23.2-0.7l23.2,0L98.3,71c7.7,0.1,15.4,0.1,23.2,0.9L121.4,72.4z"/>
- </g>
- <g>
- <path class="st0" d="M108.6,98.5c-5.2,0.8-10.5,0.7-15.7,0.7c-5.2,0-10.5,0-15.7,0c-5.2-0.1-10.5-0.1-15.7-0.3
- c-5.2-0.1-10.5-0.1-15.7-1l0-0.5c5.2-0.8,10.5-0.7,15.7-0.7c5.2,0,10.5,0,15.7,0c5.2,0.1,10.5,0.1,15.7,0.3
- c5.2,0.1,10.5,0.1,15.7,0.9L108.6,98.5z"/>
- </g>
- <g>
- <path class="st2" d="M120.4,76.9c-1.1,0.6-2.2,0.8-3.4,0.9c-1.1,0.1-2.3,0.2-3.4,0.3c-1.1,0-2.3,0-3.4,0c-1.1,0-2.3-0.1-3.4-0.4
- c-0.2-0.1-0.4-0.3-0.3-0.5c0-0.1,0.1-0.2,0.3-0.3c1.1-0.4,2.2-0.6,3.4-0.7c1.1-0.1,2.3-0.2,3.4-0.3c1.1-0.1,2.3-0.1,3.4,0
- c1.1,0,2.3,0.2,3.4,0.7c0.1,0,0.2,0.2,0.1,0.3C120.5,76.8,120.4,76.9,120.4,76.9z"/>
- </g>
- </g>
- <g>
- <circle class="st3" cx="8.3" cy="37.8" r="2"/>
- <circle class="st1" cx="8.3" cy="29.4" r="2"/>
- <circle class="st3" cx="8.3" cy="20.4" r="2"/>
- <circle class="st3" cx="16.3" cy="20.4" r="2"/>
- </g>
- <g>
- <g>
- <g>
- <path class="st4" d="M99.2,61.2H52.3V26.7h50V58C102.3,59.8,100.9,61.2,99.2,61.2z"/>
- </g>
- <path class="st5" d="M102.3,27.7h-50V24c0-2.9,2.3-5.2,5.2-5.2h39.6c2.9,0,5.2,2.3,5.2,5.2V27.7z"/>
- </g>
- <g>
- <path class="st2" d="M55.7,46c4-1.2,8.2-1.1,12.2-0.6c4,0.5,8,1.5,11.8,2.8c3.8,1.3,7.6,2.9,11.1,4.8c3.5,2,7,4.2,9.5,7.7
- c0.2,0.3,0.1,0.7-0.2,0.9c-0.3,0.2-0.7,0.2-0.9-0.1l-0.1-0.1c-1.2-1.4-2.7-2.7-4.3-3.8c-1.6-1.1-3.3-2.1-5-3
- c-3.5-1.8-7.1-3.3-10.9-4.6c-3.7-1.3-7.5-2.3-11.4-2.9c-1-0.1-1.9-0.2-2.9-0.3c-1-0.1-1.9-0.1-2.9-0.1c-1,0-1.9,0.1-2.9,0.1
- c-1,0.1-1.9,0.3-2.8,0.5l-0.1,0c-0.4,0.1-0.7-0.2-0.8-0.6C55.1,46.4,55.4,46.1,55.7,46z"/>
- </g>
- </g>
-</g>
-<g>
- <path class="st2" d="M5,99.3c-2.2,0-4-1.8-4-4V49.9c0-2.2,1.8-4,4-4h21c2.2,0,4,1.8,4,4v45.5c0,2.2-1.8,4-4,4H8.7"/>
- <g>
- <rect x="1.1" y="54.6" class="st4" width="28.9" height="35.9"/>
- </g>
- <g>
- <path class="st1" d="M94.4,39.9c-0.8,1-1.9,1.7-3.2,1.8c-1.2,0.2-2.6-0.1-3.6-0.9c-1-0.8-1.8-2-2-3.3c-0.2-1.3,0.2-2.7,1-3.7
- c0.8-1.1,2.1-1.8,3.4-1.9c1.3-0.1,2.7,0.3,3.7,1.1c1,0.8,1.6,2.1,1.7,3.3C95.6,37.6,95.2,38.9,94.4,39.9z M93.4,39
- c0.6-0.7,0.8-1.7,0.7-2.5c-0.1-0.9-0.7-1.7-1.4-2.2c-1.4-1-3.4-0.7-4.5,0.6c-1.1,1.3-0.9,3.4,0.4,4.5c0.7,0.6,1.6,0.9,2.4,0.8
- C91.9,40.2,92.8,39.7,93.4,39z"/>
- </g>
- <g>
- <path class="st1" d="M23.9,73.5c-0.8,1-1.9,1.7-3.2,1.8c-1.2,0.2-2.6-0.1-3.6-0.9c-1-0.8-1.8-2-2-3.3c-0.2-1.3,0.2-2.7,1-3.7
- c0.8-1.1,2.1-1.8,3.4-1.9c1.3-0.1,2.7,0.3,3.7,1.1c1,0.8,1.6,2.1,1.7,3.3C25.1,71.3,24.7,72.6,23.9,73.5z M22.8,72.7
- c0.6-0.7,0.8-1.7,0.7-2.5c-0.1-0.9-0.7-1.7-1.4-2.2c-1.4-1-3.4-0.7-4.5,0.6c-1.1,1.3-0.9,3.4,0.4,4.5c0.7,0.6,1.6,0.9,2.4,0.8
- C21.4,73.9,22.3,73.4,22.8,72.7z"/>
- </g>
- <g>
- <g>
- <rect x="1.4" y="54.6" class="st5" width="28.2" height="6.5"/>
- </g>
- </g>
- <g>
- <g>
- <path class="st2" d="M4.5,81.8c2.3-0.9,4.7-1.1,7.1-1.1c2.4,0.1,4.8,0.5,7,1.2c2.3,0.7,4.5,1.8,6.4,3.3c1.9,1.5,3.5,3.4,4.4,5.7
- c0.1,0.3,0,0.7-0.4,0.9c-0.3,0.1-0.7,0-0.8-0.3l0,0c-1.1-1.9-2.6-3.5-4.3-4.8c-1.8-1.3-3.8-2.2-5.9-2.9c-2.1-0.7-4.3-1.1-6.5-1.3
- C9.3,82.4,7,82.5,4.9,83l0,0c-0.4,0.1-0.7-0.1-0.8-0.5C4,82.2,4.2,81.9,4.5,81.8z"/>
- </g>
- </g>
- <g>
- <path class="st5" d="M5,99.8c-1.8,0.1-3.6-1.2-4.3-2.9c-0.2-0.4-0.3-0.9-0.3-1.3c0-0.5,0-0.8,0-1.2l0-2.4l-0.2-9.6L0.1,63L0,53.4
- L0,51l0-1.2c0-0.5,0.1-1,0.3-1.5c0.6-2,2.6-3.4,4.6-3.4l19.3-0.1l1.2,0l0.6,0c0.2,0,0.5,0,0.8,0.1c1,0.1,2,0.6,2.8,1.3
- c0.8,0.7,1.3,1.7,1.5,2.7c0.1,0.5,0.1,1.1,0.1,1.4l0,1.2l0,9.6c0,6.4,0,12.8-0.1,19.3L30.9,90l-0.1,4.8l0,0.6c0,0.2,0,0.5-0.1,0.7
- c-0.1,0.5-0.2,0.9-0.5,1.4c-0.4,0.9-1.2,1.6-2,2c-0.4,0.2-0.9,0.4-1.4,0.5c-0.5,0.1-1,0.1-1.3,0.1l-2.4,0l-4.8-0.1l-9.6-0.2
- c-0.3,0-0.5-0.2-0.5-0.5c0-0.3,0.2-0.5,0.5-0.5l9.6-0.2l4.8-0.1l2.4,0c0.4,0,0.7,0,1.1-0.1c0.3-0.1,0.6-0.2,0.9-0.3
- c0.6-0.3,1-0.8,1.3-1.4c0.1-0.3,0.2-0.6,0.3-0.9c0-0.2,0-0.3,0-0.5l0-0.6L29.1,90L29,80.4c-0.1-6.4-0.1-12.8-0.1-19.3l0-9.6
- c0-0.8,0-1.7-0.1-2.2c-0.1-0.6-0.4-1.1-0.8-1.5c-0.4-0.4-0.9-0.7-1.5-0.7c-0.1,0-0.3,0-0.4,0l-0.6,0l-1.2,0L4.9,47
- c-1.2,0-2.3,0.8-2.6,2c-0.1,0.3-0.2,0.6-0.2,0.9l0,1.2l0,2.4L2.1,63L1.9,82.3L1.7,92l0,2.4c0,0.4,0,0.8,0,1.2c0,0.3,0.1,0.7,0.2,1
- c0.4,1.3,1.8,2.3,3.2,2.3c0.3,0,0.5,0.2,0.5,0.5C5.5,99.6,5.3,99.8,5,99.8L5,99.8z"/>
- </g>
-</g>
-</svg>
diff --git a/plugins/jetpack/images/apps/triple-devices.svg b/plugins/jetpack/images/apps/triple-devices.svg
deleted file mode 100644
index 25b7d5ca..00000000
--- a/plugins/jetpack/images/apps/triple-devices.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="575" height="246" viewBox="0 0 575 246" version="1.1"><defs><path d="M48.6 191.39C45.41 191.39 42.83 188.81 42.83 185.62 42.83 182.43 45.41 179.85 48.6 179.85 51.78 179.85 54.37 182.43 54.37 185.62 54.37 188.81 51.78 191.39 48.6 191.39L48.6 191.39Z" id="path-1"/><mask id="mask-2" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="11.54" height="11.54" fill="white"><use xlink:href="#path-1"/></mask><circle id="path-3" cx="46.63" cy="6.25" r="3.37"/><mask id="mask-4" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="6.73" height="6.73" fill="white"><use xlink:href="#path-3"/></mask><path d="M25.13 9.62C25.07 9.62 25 9.6 24.95 9.57L19.89 6.56C19.78 6.5 19.71 6.38 19.71 6.25 19.71 6.12 19.78 6 19.89 5.94L24.95 2.93C25.06 2.87 25.19 2.87 25.3 2.93 25.41 3 25.48 3.12 25.48 3.24L25.48 9.25C25.48 9.38 25.41 9.5 25.3 9.57 25.25 9.6 25.19 9.62 25.13 9.62L25.13 9.62Z" id="path-5"/><mask id="mask-6" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="5.77" height="6.73" fill="white"><use xlink:href="#path-5"/></mask><rect id="path-7" x="67.31" y="2.88" width="6.73" height="6.73" rx="2"/><mask id="mask-8" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="6.73" height="6.73" fill="white"><use xlink:href="#path-7"/></mask><rect id="path-9" x="0" y="0" width="271.81" height="183.51"/><path d="M191.97 0L191.97 104.99C191.97 109.41 188.39 112.99 183.96 112.99L8 112.99C3.58 112.99 0 109.41 0 104.99L0 0 191.97 0Z" id="path-11"/></defs><g id="At-a-Glance-(Full)" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g id="At-a-Glance---apps-landing-v2---big-intro" transform="translate(-346.000000, -2119.000000)"><g id="top-section" transform="translate(-191.000000, -67.000000)"><g id="devices" transform="translate(537.000000, 2186.000000)"><g id="triple-devices"><g id="white-iphone" transform="translate(0.000000, 50.000000)"><g id="Contents" transform="translate(3.365385, 15.711538)"><g id="Responsive-Calypso"><polygon id="BG" fill="#FFFFFF" points="0.96 3.37 92.31 3.37 92.31 165.87 0.96 165.87"/><rect id="masterbar" fill="#46799A" x="0" y="0" width="93.27" height="20.67"/><g id="Text" transform="translate(12.500000, 30.288462)" fill="#969CA1"><rect id="Rectangle-6" x="0" y="0" width="28.85" height="4.81"/><rect id="Rectangle-6-Copy" x="33.65" y="0" width="9.62" height="4.81"/><rect id="Rectangle-6-Copy" x="48.08" y="0" width="14.42" height="4.81"/><rect id="Rectangle-6-Copy" x="0" y="9.62" width="14.42" height="4.81"/><rect id="Rectangle-6-Copy" x="19.23" y="9.62" width="38.46" height="4.81"/><rect id="Rectangle-6-Copy" x="0" y="19.23" width="19.23" height="4.81"/><rect id="Rectangle-6-Copy" x="24.04" y="19.23" width="24.04" height="4.81"/><rect id="Rectangle-6-Copy" x="52.88" y="19.23" width="9.62" height="4.81"/><rect id="Rectangle-6-Copy" x="0" y="28.85" width="9.62" height="4.81"/><rect id="Rectangle-6-Copy" x="14.42" y="28.85" width="24.04" height="4.81"/></g></g><g id="Keyboard" transform="translate(1.923077, 109.615385)"><rect id="keyboard" fill="#B0B5B8" x="0" y="0" width="89.42" height="54.33"/><rect id="space" fill="#FFFFFF" x="27.88" y="38.46" width="33.65" height="9.62" rx="4"/><g id="bottom-row" transform="translate(15.865385, 26.442308)" fill="#FFFFFF"><rect id="Rectangle-17-Copy" x="0" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy" x="12.02" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-2" x="24.04" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-3" x="36.06" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-4" x="48.08" y="0" width="9.62" height="9.62" rx="4"/></g><g id="middle-row" transform="translate(10.096154, 14.423077)" fill="#FFFFFF"><rect id="Rectangle-17-Copy" x="0" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy" x="12.02" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-2" x="24.04" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-3" x="36.06" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-4" x="48.08" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-5" x="60.1" y="0" width="9.62" height="9.62" rx="4"/></g><g id="top-row" transform="translate(3.846154, 2.403846)" fill="#FFFFFF"><rect id="Rectangle-17-Copy" x="0" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy" x="12.02" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-2" x="24.04" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-3" x="36.06" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-4" x="48.08" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-5" x="60.1" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-5" x="72.12" y="0" width="9.62" height="9.62" rx="4"/></g></g></g><g id="iPhone" transform="translate(0.961538, 0.807692)"><path d="M84.62 0L13.46 0C6.06 0 0 6.06 0 13.46L0 180.77C0 188.17 6.06 194.23 13.46 194.23L84.62 194.23C92.02 194.23 98.08 188.17 98.08 180.77L98.08 13.46C98.08 6.06 92.02 0 84.62 0ZM5.77 18.27L92.31 18.27 92.31 175 5.77 175 5.77 18.27Z" id="Combined-Shape" fill="#F6F6F6"/><use id="home-button" stroke="#4F748E" mask="url(#mask-2)" stroke-width="4" xlink:href="#path-1"/><path d="M41.35 6.73L56.73 6.73C57.26 6.73 57.69 7.16 57.69 7.69 57.69 8.22 57.26 8.65 56.73 8.65L41.35 8.65C40.82 8.65 40.38 8.22 40.38 7.69 40.38 7.16 40.82 6.73 41.35 6.73L41.35 6.73Z" id="mic" fill="#4F748E"/></g></g><g id="white-Nexus-5X" transform="translate(475.000000, 46.000000)"><g id="Contents" transform="translate(2.403846, 14.903846)"><g id="Responsive-Calypso" transform="translate(0.480769, 0.000000)"><polygon id="BG" fill="#FFFFFF" points="0.96 3.37 92.31 3.37 92.31 165.87 0.96 165.87"/><rect id="masterbar" fill="#46799A" x="0" y="0" width="93.27" height="20.67"/><g id="Text" transform="translate(12.500000, 30.288462)" fill="#969CA1"><rect id="Rectangle-6" x="0" y="0" width="28.85" height="4.81"/><rect id="Rectangle-6-Copy" x="33.65" y="0" width="9.62" height="4.81"/><rect id="Rectangle-6-Copy" x="48.08" y="0" width="14.42" height="4.81"/><rect id="Rectangle-6-Copy" x="0" y="9.62" width="14.42" height="4.81"/><rect id="Rectangle-6-Copy" x="19.23" y="9.62" width="38.46" height="4.81"/><rect id="Rectangle-6-Copy" x="0" y="19.23" width="19.23" height="4.81"/><rect id="Rectangle-6-Copy" x="24.04" y="19.23" width="24.04" height="4.81"/><rect id="Rectangle-6-Copy" x="52.88" y="19.23" width="9.62" height="4.81"/><rect id="Rectangle-6-Copy" x="0" y="28.85" width="9.62" height="4.81"/><rect id="Rectangle-6-Copy" x="14.42" y="28.85" width="24.04" height="4.81"/></g></g><g id="Keyboard" transform="translate(0.000000, 102.884615)"><rect id="keyboard" fill="#4F748E" x="0" y="0" width="93.75" height="53.37"/><rect id="space" fill="#FFFFFF" x="30.29" y="38.46" width="33.65" height="9.62" rx="4"/><g id="bottom-row" transform="translate(18.269231, 26.442308)" fill="#FFFFFF"><rect id="Rectangle-17-Copy" x="0" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy" x="12.02" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-2" x="24.04" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-3" x="36.06" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-4" x="48.08" y="0" width="9.62" height="9.62" rx="4"/></g><g id="middle-row" transform="translate(12.500000, 14.423077)" fill="#FFFFFF"><rect id="Rectangle-17-Copy" x="0" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy" x="12.02" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-2" x="24.04" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-3" x="36.06" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-4" x="48.08" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-5" x="60.1" y="0" width="9.62" height="9.62" rx="4"/></g><g id="top-row" transform="translate(6.250000, 2.403846)" fill="#FFFFFF"><rect id="Rectangle-17-Copy" x="0" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy" x="12.02" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-2" x="24.04" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-3" x="36.06" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-4" x="48.08" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-5" x="60.1" y="0" width="9.62" height="9.62" rx="4"/><rect id="Rectangle-17-Copy-5" x="72.12" y="0" width="9.62" height="9.62" rx="4"/></g></g><g id="Systembar" transform="translate(0.480769, 153.365385)"><rect fill="#3D4145" x="0" y="0" width="93.27" height="15.38"/><use id="home" stroke="#FFFFFF" mask="url(#mask-4)" stroke-width="4" xlink:href="#path-3"/><use id="back" stroke="#FFFFFF" mask="url(#mask-6)" stroke-width="4" xlink:href="#path-5"/><use id="multitask" stroke="#FFFFFF" mask="url(#mask-8)" stroke-width="4" xlink:href="#path-7"/></g></g><g id="Phone"><path d="M85.44 0L13.59 0C6.12 0 0 6.21 0 13.79L0 185.24C0 192.83 6.12 199.04 13.59 199.04L85.44 199.04C92.92 199.04 99.04 192.83 99.04 185.24L99.04 13.79C99.04 6.21 92.92 0 85.44 0ZM3.85 18.27L95.19 18.27 95.19 180.77 3.85 180.77 3.85 18.27ZM34.56 7.21L64.48 7.21C65.51 7.21 66.35 7.86 66.35 8.65 66.35 9.45 65.51 10.1 64.48 10.1L34.56 10.1C33.53 10.1 32.69 9.45 32.69 8.65 32.69 7.86 33.53 7.21 34.56 7.21L34.56 7.21ZM34.56 188.94L64.48 188.94C65.51 188.94 66.35 189.59 66.35 190.38 66.35 191.18 65.51 191.83 64.48 191.83L34.56 191.83C33.53 191.83 32.69 191.18 32.69 190.38 32.69 189.59 33.53 188.94 34.56 188.94L34.56 188.94Z" id="Combined-Shape" fill="#F6F6F6"/><circle id="camera" fill="#4F748E" cx="19.71" cy="8.65" r="1.44"/><g id="Buttons" transform="translate(99.038462, 51.442308)" fill="#4F748E"><rect id="Rectangle-92" x="0" y="0" width="0.96" height="12.5"/><rect id="Rectangle-92" x="0" y="24.04" width="0.96" height="25"/></g></g></g><g id="MacBook" transform="translate(109.000000, 0.000000)"><rect id="top" fill="#E3E2E3" x="16.99" y="0" width="322.78" height="232.36" rx="20"/><path d="M0 224.71L0 236.6C0 241.3 3.8 245.1 8.49 245.1L348.26 245.1C352.95 245.1 356.76 241.3 356.76 236.6L356.76 224.71 0 224.71 0 224.71Z" id="bottom" fill="#F6F6F6"/><rect id="groove" fill="#969CA1" x="139.31" y="224.71" width="78.15" height="4.25"/><rect id="screen" fill="#BBC9D5" x="30.61" y="15" width="297.38" height="203.98"/><g id="OSX" transform="translate(42.471042, 32.708512)"><g id="OSX-Dock"><mask id="mask-10" fill="white"><use xlink:href="#path-9"/></mask><use id="Mask" fill="#BBC9D5" xlink:href="#path-9"/><rect id="dock" fill-opacity="0.8" fill="#F6F6F6" mask="url(#mask-10)" x="63.71" y="149.52" width="144.4" height="36.11" rx="8"/><rect id="finder" fill="#969CA1" mask="url(#mask-10)" x="72.2" y="158.02" width="21.24" height="16.99" rx="4"/><polygon id="Triangle-1" fill="#969CA1" mask="url(#mask-10)" points="151.62 155.9 162.24 177.14 141 177.14"/><ellipse id="Oval-1" fill="#969CA1" mask="url(#mask-10)" cx="186.87" cy="166.52" rx="12.74" ry="12.74"/><g id="WordPress" mask="url(#mask-10)"><g transform="translate(104.478764, 149.524628)"><ellipse id="circle" fill="#6F93AD" cx="12.74" cy="16.99" rx="12.74" ry="12.74"/><path d="M17.92 25.9L21.07 16.8C21.66 15.33 21.86 14.15 21.86 13.1 21.86 12.72 21.83 12.37 21.79 12.04 22.59 13.51 23.05 15.2 23.05 16.99 23.05 20.8 20.99 24.12 17.92 25.9L17.92 25.9ZM14.16 12.16C14.78 12.12 15.34 12.06 15.34 12.06 15.9 11.99 15.83 11.18 15.28 11.21 15.28 11.21 13.61 11.34 12.53 11.34 11.52 11.34 9.81 11.21 9.81 11.21 9.26 11.18 9.19 12.03 9.75 12.06 9.75 12.06 10.27 12.12 10.83 12.16L12.43 16.56 10.18 23.33 6.42 12.16C7.05 12.12 7.6 12.06 7.6 12.06 8.16 11.99 8.09 11.18 7.54 11.21 7.54 11.21 5.87 11.34 4.79 11.34 4.6 11.34 4.37 11.33 4.13 11.33 5.97 8.53 9.14 6.68 12.74 6.68 15.43 6.68 17.87 7.71 19.7 9.39 19.66 9.38 19.62 9.38 19.57 9.38 18.56 9.38 17.84 10.26 17.84 11.21 17.84 12.06 18.33 12.78 18.85 13.63 19.24 14.31 19.7 15.2 19.7 16.47 19.7 17.35 19.44 18.46 18.92 19.8L17.89 23.24 14.16 12.16ZM12.74 27.3C11.73 27.3 10.75 27.15 9.83 26.88L12.92 17.89 16.09 26.58C16.11 26.63 16.14 26.67 16.16 26.72 15.09 27.1 13.94 27.3 12.74 27.3L12.74 27.3ZM2.43 16.99C2.43 15.5 2.75 14.08 3.32 12.79L8.24 26.27C4.8 24.6 2.43 21.07 2.43 16.99L2.43 16.99ZM12.74 5.52C6.42 5.52 1.27 10.67 1.27 16.99 1.27 23.32 6.42 28.46 12.74 28.46 19.06 28.46 24.21 23.32 24.21 16.99 24.21 10.67 19.06 5.52 12.74 5.52L12.74 5.52Z" id="logomark" fill="#FFFFFF"/></g></g></g><g id="App,-Linux/OSX" transform="translate(39.922780, 4.247859)"><rect id="Browser" fill="#F6F6F6" x="0" y="0" width="191.97" height="126.59" rx="8"/><g id="Contents" transform="translate(0.000000, 13.593148)"><mask id="mask-12" fill="white"><use xlink:href="#path-11"/></mask><use id="Mask" fill="#FFFFFF" xlink:href="#path-11"/></g><rect id="masterbar" fill="#46799A" x="0" y="13.59" width="191.97" height="15.29"/><path d="M7.64 9.35C6.24 9.35 5.1 8.2 5.1 6.8 5.1 5.39 6.24 4.25 7.64 4.25 9.05 4.25 10.19 5.39 10.19 6.8 10.19 8.2 9.05 9.35 7.64 9.35ZM24.63 9.35C23.23 9.35 22.08 8.2 22.08 6.8 22.08 5.39 23.23 4.25 24.63 4.25 26.04 4.25 27.18 5.39 27.18 6.8 27.18 8.2 26.04 9.35 24.63 9.35ZM16.14 9.35C14.73 9.35 13.59 8.2 13.59 6.8 13.59 5.39 14.73 4.25 16.14 4.25 17.55 4.25 18.69 5.39 18.69 6.8 18.69 8.2 17.55 9.35 16.14 9.35Z" id="OSX/Linux" fill="#4F748E"/></g></g><path d="M26.48 11L329.52 11 329.52 219.89 26.48 219.89 26.48 11ZM30.58 15.1L325.43 15.1 325.43 215.38 30.58 215.38 30.58 15.1Z" id="Edge-overlay" fill="#E3E2E3"/></g></g></g></g></g></g></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/block-picker.png b/plugins/jetpack/images/block-picker.png
deleted file mode 100644
index 1c86a7ec..00000000
--- a/plugins/jetpack/images/block-picker.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/cf-ss.png b/plugins/jetpack/images/cf-ss.png
deleted file mode 100644
index b29fb1c9..00000000
--- a/plugins/jetpack/images/cf-ss.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/characters.svg b/plugins/jetpack/images/characters.svg
deleted file mode 100644
index ce032585..00000000
--- a/plugins/jetpack/images/characters.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 230 54.35"><defs><style>.cls-1{fill:#204A69}.cls-2{fill:#BBC9D5}.cls-3{fill:#204A69}.cls-4{fill:#B0B5B8}.cls-5{fill:#CCCED0}.cls-6{fill:#46799A}.cls-7{fill:#969CA1}.cls-8{fill:none;stroke:#CCCED0;stroke-linecap:round;stroke-linejoin:round;stroke-width:.88px}.cls-9{fill:#6F93AD}.cls-10{fill:#fff}</style></defs><title>characters</title><path class="cls-1" d="M151 29.16c3.19-2 16.09-2.44 18.47 1.25 0 0-3.5-7.9-8.39-9.63-7.16-1.61-8.71 4.62-10.08 8.38z" transform="translate(-16.68 -13.89)"/><path class="cls-2" d="M150.4 47.25a7 7 0 0 1-1-3 22.87 22.87 0 0 1-.35-3.08 35.84 35.84 0 0 1 .19-6.13 39.61 39.61 0 0 1 1.16-6 15.55 15.55 0 0 1 2.51-5.6.22.22 0 0 1 .3 0 .21.21 0 0 1 .07.22c-.59 1.93-1.15 3.79-1.64 5.72a50.23 50.23 0 0 0-1 5.84 41.89 41.89 0 0 0-.25 5.92 21.87 21.87 0 0 0 .28 2.92c.12 1 .49 1.85.55 2.85a.43.43 0 0 1-.77.28z" transform="translate(-16.68 -13.89)"/><path class="cls-2" d="M157 67.87a10.22 10.22 0 0 1-6.49-4.21 17 17 0 0 1-1.9-3.41 33.87 33.87 0 0 1-1.31-3.61c-.74-2.44-1.32-4.84-2.17-7.2a47.2 47.2 0 0 1-2-7.38A25.37 25.37 0 0 1 145 26.92a27.67 27.67 0 0 1 4.24-6.43 19.86 19.86 0 0 1 5.94-5 13.42 13.42 0 0 1 7.63-1.49 14.85 14.85 0 0 1 7.24 2.92 16.89 16.89 0 0 1 5 5.95 10.72 10.72 0 0 1 1.11 3.83c.07 1.36 0 2.55 0 3.83 0 5 0 10-.1 15.1a21.15 21.15 0 0 1-1.67 7.49 23 23 0 0 1-4.12 6.41.21.21 0 0 1-.32-.26 25.54 25.54 0 0 0 3.66-6.46 22 22 0 0 0 1.39-7.26l-.07-15.07v-3.72a9.55 9.55 0 0 0-1-3.37 15.64 15.64 0 0 0-4.64-5.46 13.52 13.52 0 0 0-6.59-2.64 12.05 12.05 0 0 0-6.9 1.43 18.71 18.71 0 0 0-5.52 4.68 26.15 26.15 0 0 0-4.06 6.1 24 24 0 0 0-1.79 14.34 47.36 47.36 0 0 0 1.9 7.19c.85 2.37 1.45 4.87 2.17 7.24a22.45 22.45 0 0 0 3 6.66 10.67 10.67 0 0 0 5.67 4.14.41.41 0 0 1 .26.52.4.4 0 0 1-.43.28z" transform="translate(-16.68 -13.89)"/><path class="cls-2" d="M176 37.37a9 9 0 0 1 1.31 2.6c.34.91.66 1.83.91 2.77a22.32 22.32 0 0 1 .87 5.81 20.11 20.11 0 0 1-.79 5.83 15.13 15.13 0 0 1-2.49 5.25.2.2 0 0 1-.29 0 .21.21 0 0 1-.08-.22c.51-1.86 1.16-3.6 1.62-5.4a20.74 20.74 0 0 0 .64-5.48 23.8 23.8 0 0 0-.75-5.49c-.23-.9-.51-1.79-.83-2.67a13.43 13.43 0 0 1-.87-2.69.42.42 0 0 1 .38-.47.42.42 0 0 1 .37.16zM158.65 19.75a6.41 6.41 0 0 1 2.88.34l.71.2c.23.08.45.2.68.3a7.41 7.41 0 0 1 1.31.68 10.92 10.92 0 0 1 4 4.29A17.48 17.48 0 0 1 170 31a16.31 16.31 0 0 1 .09 5.66.21.21 0 0 1-.24.17.22.22 0 0 1-.17-.16c-.42-1.84-.59-3.65-.94-5.43a18.21 18.21 0 0 0-1.74-5.02 10.3 10.3 0 0 0-3.45-3.84 7 7 0 0 0-1.14-.62c-.2-.09-.39-.19-.59-.27l-.63-.19a26.31 26.31 0 0 1-2.58-.72h-.07a.42.42 0 0 1-.18-.56.41.41 0 0 1 .29-.27z" transform="translate(-16.68 -13.89)"/><path class="cls-2" d="M150.36 34.52c.84 1.66 1.31 3.42 2 5.12a29.08 29.08 0 0 0 2.27 4.85 7.52 7.52 0 0 0 3.73 3.29 8.88 8.88 0 0 0 2.49.5 10.79 10.79 0 0 0 1.26 0 3.34 3.34 0 0 0 1.11-.27 8 8 0 0 0 3.31-3.69 29.37 29.37 0 0 0 2-5c1.08-3.46 1.78-7.05 3-10.55a.21.21 0 0 1 .27-.13.21.21 0 0 1 .13.23 71 71 0 0 1-2.22 10.81 31 31 0 0 1-2 5.23 13.37 13.37 0 0 1-1.56 2.43 6.65 6.65 0 0 1-2.37 1.9 4.55 4.55 0 0 1-1.54.4 10.36 10.36 0 0 1-1.48 0 10 10 0 0 1-2.88-.61 8.88 8.88 0 0 1-4.36-3.87 30.44 30.44 0 0 1-2.34-5.11 31 31 0 0 1-1.57-5.3.41.41 0 0 1 .35-.48.43.43 0 0 1 .4.25z" transform="translate(-16.68 -13.89)"/><path class="cls-1" d="M161.25 35.21a10.78 10.78 0 0 1 .31 2.31v1.16a6.58 6.58 0 0 1-.15 1.16.45.45 0 0 1-.55.34.47.47 0 0 1-.35-.34 7.67 7.67 0 0 1-.15-1.16v-1.16a11.43 11.43 0 0 1 .3-2.31.32.32 0 0 1 .62 0z" transform="translate(-16.68 -13.89)"/><rect class="cls-3" x="139.04" y="20.66" width="1.67" height="2.97" rx=".83" ry=".83"/><rect class="cls-3" x="147.63" y="20.66" width="1.67" height="2.97" rx=".83" ry=".83"/><path class="cls-1" d="M159.72 42.12a3 3 0 0 0 1.4.38 2.41 2.41 0 0 0 .72-.09 1.56 1.56 0 0 0 .61-.32h.05a.42.42 0 0 1 .66.48 1.82 1.82 0 0 1-.86.91 2.64 2.64 0 0 1-1.18.29 2.77 2.77 0 0 1-1.17-.25 1.94 1.94 0 0 1-.9-.87.41.41 0 0 1 .21-.55.4.4 0 0 1 .37 0zM157.17 32h-.65c-.25 0-.51 0-.77.07s-.51.1-.76.15a4.51 4.51 0 0 0-.68.22h-.07a.42.42 0 0 1-.55-.22.4.4 0 0 1 .05-.41 2.19 2.19 0 0 1 .85-.68 3.76 3.76 0 0 1 1-.3 3.85 3.85 0 0 1 1 0 1.89 1.89 0 0 1 1.06.46.37.37 0 0 1 0 .53.39.39 0 0 1-.24.12zM163.48 31.35a1.89 1.89 0 0 1 1.06-.46 3.85 3.85 0 0 1 1 0 3.76 3.76 0 0 1 1 .3 2.19 2.19 0 0 1 .85.68.41.41 0 0 1-.09.58.43.43 0 0 1-.41.05h-.07a4.51 4.51 0 0 0-.68-.22c-.25-.05-.5-.12-.76-.15s-.52-.07-.77-.07h-.91a.38.38 0 0 1-.34-.41.36.36 0 0 1 .12-.3z" transform="translate(-16.68 -13.89)"/><circle class="cls-1" cx="147.89" cy="27.43" r=".43"/><path class="cls-4" d="M80.55 28.19h12.42v17.86H80.55z"/><path class="cls-4" d="M110.2 24c3.19 7 2.75 22.9-8.33 22.9S90 31 93.15 24" transform="translate(-16.68 -13.89)"/><path class="cls-5" d="M33.31 42.1c2.64-.28 15.25-.6 17.25 0 0 0-1.34 8.56-8.37 8.48s-8.88-8.48-8.88-8.48z" transform="translate(-16.68 -13.89)"/><path class="cls-6" d="M93.46 53l-2.64 1.45.45-20.17a13.07 13.07 0 0 0 6.08 10.08l-.15 2.71A7.2 7.2 0 0 1 93.46 53z" transform="translate(-16.68 -13.89)"/><rect class="cls-3" x="19.67" y="20.21" width="1.77" height="3.15" rx=".88" ry=".88"/><path class="cls-1" d="M42.61 35.55a9.84 9.84 0 0 1 .22 1.79 8.3 8.3 0 0 1-.12 1.79.32.32 0 0 1-.39.25.31.31 0 0 1-.25-.25 8.3 8.3 0 0 1-.07-1.79 9.84 9.84 0 0 1 .22-1.79.22.22 0 0 1 .27-.17.23.23 0 0 1 .12.17z" transform="translate(-16.68 -13.89)"/><rect class="cls-3" x="29.8" y="20.21" width="1.77" height="3.15" rx=".88" ry=".88"/><path class="cls-1" d="M40.16 43.22a7 7 0 0 0 2.23.37 8.93 8.93 0 0 0 1.16 0 3.18 3.18 0 0 0 1-.28.29.29 0 0 1 .4.11.29.29 0 0 1-.06.36 2.6 2.6 0 0 1-1.26.61 5.84 5.84 0 0 1-1.31.14 6.44 6.44 0 0 1-1.31-.17 3.15 3.15 0 0 1-1.24-.59.3.3 0 0 1 0-.42.32.32 0 0 1 .33-.08zM45.12 30.5a2 2 0 0 1 1-.53 4 4 0 0 1 1-.09 3 3 0 0 1 2 .7.29.29 0 0 1 0 .41.3.3 0 0 1-.33.07 4.59 4.59 0 0 0-1.64-.29 6.12 6.12 0 0 0-.86 0 3.1 3.1 0 0 0-.76.15h-.08a.3.3 0 0 1-.37-.18.28.28 0 0 1 .04-.24zM39 30.94a3.11 3.11 0 0 0-.75-.15 6.33 6.33 0 0 0-.87 0 4.59 4.59 0 0 0-1.64.29.29.29 0 0 1-.32-.48 3 3 0 0 1 2-.7 4 4 0 0 1 1 .09 2 2 0 0 1 1 .53.3.3 0 0 1 0 .41.33.33 0 0 1-.3.06z" transform="translate(-16.68 -13.89)"/><path class="cls-5" d="M52.73 33.1a27.8 27.8 0 0 1-2.19 9.9 9.59 9.59 0 0 1-3.33 3.93 9 9 0 0 1-5 1.36 11 11 0 0 1-5-1.37 10.46 10.46 0 0 1-3.74-3.59 13.45 13.45 0 0 1-1.79-4.83 26.54 26.54 0 0 1-.32-5.1 21.45 21.45 0 0 1 2.34-9.9 10.93 10.93 0 0 1 3.43-3.85 8.63 8.63 0 0 1 4.94-1.52 10.32 10.32 0 0 1 8.56 5.11 16.14 16.14 0 0 1 2.1 9.86zm-.58 0a15.5 15.5 0 0 0-2.07-9.47 9.7 9.7 0 0 0-8-4.75 8 8 0 0 0-4.52 1.43 10.23 10.23 0 0 0-3.17 3.61 20.46 20.46 0 0 0-2.14 9.53c0 3.29.26 6.69 2 9.47a9.79 9.79 0 0 0 8 4.65 8.38 8.38 0 0 0 4.59-1.21 8.79 8.79 0 0 0 3.11-3.63 27.19 27.19 0 0 0 2.2-9.67z" transform="translate(-16.68 -13.89)"/><path class="cls-7" d="M29.85 34.18c0 .52.08 1.09.1 1.65a9.47 9.47 0 0 1-.09 1.68.3.3 0 0 1-.59 0 6.53 6.53 0 0 1-.2-1.7 7 7 0 0 1 .2-1.74.29.29 0 0 1 .37-.2.29.29 0 0 1 .21.26z" transform="translate(-16.68 -13.89)"/><path class="cls-9" d="M41.12 33.68l.07 1.87a4.15 4.15 0 0 1-.29 2 3 3 0 0 1-1.45 1.54 2.52 2.52 0 0 1-1.08.25h-1.88a2.52 2.52 0 0 1-1.08-.25 3.14 3.14 0 0 1-1.47-1.54 4.44 4.44 0 0 1-.28-2l.08-1.87a.28.28 0 0 1 .3-.28.3.3 0 0 1 .29.28l.07 1.87a3.48 3.48 0 0 0 .3 1.65 2.21 2.21 0 0 0 1.07 1.1 1.7 1.7 0 0 0 .73.17h1.86a1.55 1.55 0 0 0 .73-.16 2.37 2.37 0 0 0 1.09-1.1 3.55 3.55 0 0 0 .29-1.66l.07-1.87a.29.29 0 1 1 .58 0zM51.32 33.92l.07 1.84a3.73 3.73 0 0 1-.39 2 2.88 2.88 0 0 1-1.53 1.42 2.81 2.81 0 0 1-1 .19H46.5a2.62 2.62 0 0 1-1-.29 3.15 3.15 0 0 1-1.39-1.56 4.24 4.24 0 0 1-.25-2l.07-1.84a.29.29 0 0 1 .31-.28.29.29 0 0 1 .28.28l.07 1.84a3.52 3.52 0 0 0 .28 1.63 2.3 2.3 0 0 0 1 1.12 1.75 1.75 0 0 0 .71.19h1.81a1.82 1.82 0 0 0 .75-.11 2.2 2.2 0 0 0 1.12-1 3 3 0 0 0 .37-1.59l.07-1.84a.29.29 0 0 1 .3-.28.3.3 0 0 1 .32.28z" transform="translate(-16.68 -13.89)"/><path class="cls-5" d="M15.69 19.78l19.64.25"/><path class="cls-6" d="M32.38 33.39c3.27-.06 6.54 0 9.82 0s6.54.09 9.81.25a.28.28 0 0 1 .26.29.26.26 0 0 1-.26.26c-3.28.08-6.55.06-9.82 0s-6.55-.11-9.82-.26a.26.26 0 0 1-.26-.28.28.28 0 0 1 .27-.26z" transform="translate(-16.68 -13.89)"/><path class="cls-1" d="M109.51 60c9.15-1.37 3-21.81 2.87-30.48-.2-10.36-8-11.82-15-10.75 0 8.08 10.87 10.44 14.16 15.69 0 0-1.12 5.61-4.31 9.16 0 4.08-1 10.21 3.51 10.52a9.53 9.53 0 0 1-1.23 5.86z" transform="translate(-16.68 -13.89)"/><rect class="cls-3" x="79.75" y="18.47" width="1.83" height="3.27" rx=".92" ry=".92"/><path class="cls-1" d="M102.94 32.5a18.28 18.28 0 0 1 .22 2.54 16.75 16.75 0 0 1-.12 2.55.33.33 0 0 1-.66 0 15.57 15.57 0 0 1-.13-2.55 18.3 18.3 0 0 1 .23-2.54.23.23 0 0 1 .27-.19.25.25 0 0 1 .19.19z" transform="translate(-16.68 -13.89)"/><rect class="cls-3" x="90.27" y="18.47" width="1.83" height="3.27" rx=".92" ry=".92"/><path class="cls-3" d="M100.09 40.62a10.69 10.69 0 0 0 1.07.3 6.54 6.54 0 0 0 1.07.14 6.22 6.22 0 0 0 1.06-.06 3.94 3.94 0 0 0 1-.32.16.16 0 0 1 .21.08.16.16 0 0 1 0 .15 2.32 2.32 0 0 1-1 .82 3.07 3.07 0 0 1-1.3.24 4.19 4.19 0 0 1-1.28-.21 3.77 3.77 0 0 1-1.14-.6.32.32 0 0 1 0-.44.3.3 0 0 1 .33-.1z" transform="translate(-16.68 -13.89)"/><path class="cls-1" d="M105.09 29.09a2.08 2.08 0 0 1 1-.55 4.26 4.26 0 0 1 1.07-.09 3.11 3.11 0 0 1 2 .72.31.31 0 0 1 0 .43.31.31 0 0 1-.35.07 4.63 4.63 0 0 0-1.7-.3 6.55 6.55 0 0 0-.89 0 3.08 3.08 0 0 0-.78.15h-.09a.29.29 0 0 1-.38-.18.28.28 0 0 1 .12-.25z" transform="translate(-16.68 -13.89)"/><path class="cls-3" d="M107.51 43.61c.16 1.25.2 2.51.25 3.77l.06 1.88v.94a3.78 3.78 0 0 0 .18.8 3.55 3.55 0 0 0 2.1 2.41 4 4 0 0 0 .81.23c.32.07.65.12 1 .22a12.09 12.09 0 0 1 1.85.69 15.72 15.72 0 0 1 5.8 5.05 18.56 18.56 0 0 1 3.22 6.9.18.18 0 0 1-.12.19.17.17 0 0 1-.17-.09 42 42 0 0 0-3.69-6.44 15.16 15.16 0 0 0-5.48-4.69 10.06 10.06 0 0 0-1.68-.65c-.28-.09-.58-.14-.87-.21a4.75 4.75 0 0 1-1-.3 4.51 4.51 0 0 1-2.64-3.08 4.56 4.56 0 0 1-.14-1V47.4c0-1.26 0-2.51.06-3.77a.3.3 0 0 1 .33-.28.31.31 0 0 1 .13.26zM98.79 29.27c-.23.15-.34 0-.5 0l-.45-.09a6.77 6.77 0 0 0-.89-.06 4.81 4.81 0 0 0-.85.09 2.3 2.3 0 0 1-.93.11.2.2 0 0 1-.18-.21 1.14 1.14 0 0 1 .84-.77 3.08 3.08 0 0 1 1.11-.21 3.9 3.9 0 0 1 1.08.13l.52.14c.16.07.35.05.45.31a.5.5 0 0 1-.18.56z" transform="translate(-16.68 -13.89)"/><path class="cls-1" d="M99.59 18.55c-9.79 0-11 11.31-10.12 17.08S86 50.54 86 55.29c0 3.53 3.89 4.72 6.87 4.71 6.8 0 4.36-12.92 4.51-15.63-5.36-1.5-5.87-11-5.87-11s9.64-8.37 8.08-14.82z" transform="translate(-16.68 -13.89)"/><path class="cls-3" d="M91.78 33.33a25 25 0 0 0 .8 4.15 13.86 13.86 0 0 0 1.87 3.75 13.33 13.33 0 0 0 6.54 5c1.17.4 2.47-.39 3.58-1.18a15 15 0 0 0 3-3 25.69 25.69 0 0 0 3.83-7.61.17.17 0 0 1 .2-.1.16.16 0 0 1 .1.17 17.38 17.38 0 0 1-3.38 8.11 16.64 16.64 0 0 1-3.13 3.2 8.84 8.84 0 0 1-2 1.17 4.47 4.47 0 0 1-1.18.33 3.45 3.45 0 0 1-1.26-.12 11.34 11.34 0 0 1-4-2.13 16.13 16.13 0 0 1-3.08-3.26 14.51 14.51 0 0 1-2-4 10.6 10.6 0 0 1-.52-4.43.31.31 0 0 1 .35-.26.29.29 0 0 1 .26.25z" transform="translate(-16.68 -13.89)"/><path class="cls-5" d="M46.59 50.92a1.09 1.09 0 0 1 .36.91v1.84a1.11 1.11 0 0 1-.36.92.18.18 0 0 1-.22 0 1.11 1.11 0 0 1-.36-.92v-.92-.92a1.09 1.09 0 0 1 .36-.91.16.16 0 0 1 .22 0z" transform="translate(-16.68 -13.89)"/><path class="cls-5" d="M34.08 53.31A17.12 17.12 0 0 1 38 54.72l3.81 1.68h-.46L45 54.55a16.78 16.78 0 0 1 3.76-1.61.13.13 0 0 1 .14.09.12.12 0 0 1 0 .11 16.49 16.49 0 0 1-3.43 2.22l-3.57 2a.5.5 0 0 1-.46 0l-3.76-1.78A17.61 17.61 0 0 1 34 53.51a.11.11 0 0 1 0-.16.1.1 0 0 1 .08-.04z" transform="translate(-16.68 -13.89)"/><circle class="cls-10" cx="74.3" cy="25.93" r=".63"/><circle class="cls-10" cx="94.96" cy="25.93" r=".63"/><path class="cls-5" d="M202.76 41.95l-1.85-2.53 3.45-.05-1.6 2.58z"/><path class="cls-3" d="M225.81 50.18v-2c-3.64.42-7.63 1.05-10.46.41s5.19 1.65 10.46 1.59z" transform="translate(-16.68 -13.89)"/><rect class="cls-3" x="198.59" y="20.99" width="1.77" height="3.15" rx=".88" ry=".88"/><path class="cls-3" d="M210.35 36.94c.22 1.65.19 3.3.45 4.91a8 8 0 0 0 1.74 4.3 6.9 6.9 0 0 0 4.22 1.78 36.31 36.31 0 0 0 4.9.24 9.53 9.53 0 0 0 4.59-1 6.54 6.54 0 0 0 2.9-3.54c1.08-3 1.06-6.42 1.33-9.72a.16.16 0 0 1 .16-.14.16.16 0 0 1 .14.14 41.94 41.94 0 0 1 .1 5 17 17 0 0 1-.89 5 7.47 7.47 0 0 1-3.28 4 10.53 10.53 0 0 1-5 1.2 33 33 0 0 1-5.06-.24 7.81 7.81 0 0 1-4.76-2.11 8.76 8.76 0 0 1-2-4.81 19.82 19.82 0 0 1-.14-5 .29.29 0 0 1 .33-.26.3.3 0 0 1 .27.25z" transform="translate(-16.68 -13.89)"/><path class="cls-1" d="M221.54 35a18.58 18.58 0 0 1 .22 2.46 16.82 16.82 0 0 1-.12 2.45.32.32 0 0 1-.37.27.32.32 0 0 1-.27-.27 15.53 15.53 0 0 1-.12-2.45 15.73 15.73 0 0 1 .22-2.46.23.23 0 0 1 .26-.18.24.24 0 0 1 .18.18z" transform="translate(-16.68 -13.89)"/><rect class="cls-3" x="208.73" y="20.99" width="1.77" height="3.15" rx=".88" ry=".88"/><path class="cls-3" d="M217.85 42.2c.27 0 .34.11.56.18a4.53 4.53 0 0 0 .59.21c.42.11.86.17 1.29.24a11.77 11.77 0 0 0 1.32.12 7.32 7.32 0 0 1 1.31.08.16.16 0 0 1 .13.18.2.2 0 0 1 0 .08 1.9 1.9 0 0 1-1.42.56 7.23 7.23 0 0 1-1.47 0 7.48 7.48 0 0 1-1.44-.33 5.9 5.9 0 0 1-.71-.29c-.21-.12-.53-.24-.59-.6a.32.32 0 0 1 .25-.37z" transform="translate(-16.68 -13.89)"/><path class="cls-1" d="M224.05 31.29a1.92 1.92 0 0 1 1-.53 4 4 0 0 1 1-.09 3.06 3.06 0 0 1 2 .69.3.3 0 0 1 0 .42.3.3 0 0 1-.33.07 4.59 4.59 0 0 0-1.64-.29 6.33 6.33 0 0 0-.87 0 3.11 3.11 0 0 0-.75.15h-.08a.29.29 0 0 1-.37-.18.28.28 0 0 1 .04-.24z" transform="translate(-16.68 -13.89)"/><path class="cls-3" d="M226.11 48.26a29.69 29.69 0 0 1 .16 3.87A3.46 3.46 0 0 0 228 55a3.58 3.58 0 0 0 .78.33 7.56 7.56 0 0 0 .91.19c.65.14 1.29.3 1.93.49a30.29 30.29 0 0 1 3.7 1.35 29.24 29.24 0 0 1 6.77 4 12.42 12.42 0 0 1 4.48 6.43.14.14 0 0 1-.1.18.15.15 0 0 1-.17-.08 16.9 16.9 0 0 0-4.78-5.83 28.52 28.52 0 0 0-6.58-3.85c-1.18-.49-2.38-.94-3.6-1.31-.61-.19-1.23-.35-1.84-.48-.3-.07-.62-.12-1-.22a4.35 4.35 0 0 1-3.09-4.05 26.67 26.67 0 0 1 .15-3.9.3.3 0 0 1 .59 0z" transform="translate(-16.68 -13.89)"/><path class="cls-6" d="M211.65 26.32c.39 1.53 1.52 3.81 4.91 5.52 1.54.78 3.78-.11 5.91.91 1.8.86 2.91 3 4.62 3.44a8.34 8.34 0 0 1 4.64 3.19.59.59 0 0 0 1-.14 14.21 14.21 0 0 0 1-6.2c-.26-2-1.48-17.13-15.7-14.67-7.03 1.23-6.88 6.02-6.38 7.95z" transform="translate(-16.68 -13.89)"/><path class="cls-2" d="M209.77 35.05a1.56 1.56 0 0 1-.25-.92c0-.31-.06-.62-.08-.93a14.9 14.9 0 0 1 0-1.89 8.71 8.71 0 0 1 .33-1.89 2.9 2.9 0 0 1 1-1.67.16.16 0 0 1 .22 0 .14.14 0 0 1 0 .11 16.42 16.42 0 0 1-.37 1.73 14 14 0 0 0-.23 1.74c0 .59-.06 1.19-.05 1.78v.9a1.68 1.68 0 0 1-.06.91.35.35 0 0 1-.47.14.25.25 0 0 1-.04-.01z" transform="translate(-16.68 -13.89)"/><path class="cls-3" d="M225.72 53.42a4.37 4.37 0 0 1-1.56.16h-7.81a13.77 13.77 0 0 1-3.12-.31.16.16 0 0 1-.11-.19.2.2 0 0 1 .11-.11 13.21 13.21 0 0 1 3.12-.3H224.16a4.61 4.61 0 0 1 1.56.16.31.31 0 0 1 .17.41.31.31 0 0 1-.17.18zM217.4 32c-.2.11-.23 0-.37 0a1.59 1.59 0 0 0-.39-.08 5.93 5.93 0 0 0-.85 0 8.09 8.09 0 0 0-.85.06 2.07 2.07 0 0 1-.88.05.18.18 0 0 1-.15-.2 1.12 1.12 0 0 1 .85-.7 4.11 4.11 0 0 1 1-.17 4.52 4.52 0 0 1 1 .09 3.56 3.56 0 0 1 .53.16c.16.07.42.12.47.42a.32.32 0 0 1-.16.31z" transform="translate(-16.68 -13.89)"/><circle class="cls-2" cx="191.51" cy="26.85" r=".69"/><path class="cls-2" d="M175.07 61.19a23 23 0 0 1-.39 4.48 15.09 15.09 0 0 1-.73 2.57h1.35a17.81 17.81 0 0 0 .59-2.34 20.93 20.93 0 0 0 .29-4.73 39 39 0 0 0-1.59-9.2.2.2 0 0 0-.23-.14.21.21 0 0 0-.18.23 55.24 55.24 0 0 1 .89 9.13zM144.69 68.24h1.43a19 19 0 0 1-.89-2.89 35.43 35.43 0 0 1-.65-9c.12-3.05.6-6.07.83-9.15a.41.41 0 0 0-.3-.43.42.42 0 0 0-.51.29 46.23 46.23 0 0 0-1.29 9.23 36.54 36.54 0 0 0 .63 9.38 20.36 20.36 0 0 0 .75 2.57z" transform="translate(-16.68 -13.89)"/><path class="cls-6" d="M67.14 68.24c-1-6-16.12-12.17-16.12-12.17s-4.2 4-9.28 4-10.66-4.34-10.66-4.34C23.26 59.93 17 64 16.68 68.24zM183.38 68.24c-2.15-5.61-4.77-9.84-7.13-10.18l-1.95 10.18zM145.19 68.24l-1.49-10.61c-1.93.84-3.91 5.09-5.66 10.61z" transform="translate(-16.68 -13.89)"/><path class="cls-9" d="M246.68 68.24c-.92-7.23-16.19-12-16.19-12l-23.37-.08c-6.84 3.62-12.37 7.82-12 12.07zM123 68.24c-2.18-10-12.33-14.1-12.33-14.1l-8.65 3.59-12.22-3.27c-7.1 3.76-10.06 9.62-10.62 13.78z" transform="translate(-16.68 -13.89)"/></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/cloud-based.svg b/plugins/jetpack/images/cloud-based.svg
deleted file mode 100644
index 5943bbf9..00000000
--- a/plugins/jetpack/images/cloud-based.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg id="cloud_based" data-name="cloud based" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1622.92 930.31"><title>cloudBased</title><path d="M1961.92,1799.76a5.39,5.39,0,0,0-4.81-5.92c-16.91-1.74-33.82-2.57-50.73-3.43s-33.82-1.85-50.73-2c-30.49-.83-61-.71-91.46-1.09-6.89-29.8-9.3-62-4.82-91.91,4.62-33.06,20.32-63.35,46.66-81.44,13-9.27,28.3-15.27,44.36-19.38,16.49-4,33.29-6.75,49.14-6.19,7.87.31,15.57,1.43,21.94,3.81l1.37.51a22.76,22.76,0,0,0,12.46,1.26,21.83,21.83,0,0,0,14.47-9.56,20.51,20.51,0,0,0,3.2-9.18l.29-3.23.73-6.15a151.91,151.91,0,0,1,14.19-47.07c14.22-29.47,40.59-51.21,72.39-60.63s67.36-9.95,100.22-3.12c66.22,13.89,123.94,64.49,153,125.2a12.45,12.45,0,0,0,3.58,4.43,12.28,12.28,0,0,0,17.23-2.21l.35-.45c11.22-14.53,27-28.91,44.42-37.42a109.94,109.94,0,0,1,27.64-9.46,211.23,211.23,0,0,1,30.27-2.65c20.51,0,41.19,2.59,60.67,9.75a176.57,176.57,0,0,1,54.28,31.11,3.58,3.58,0,0,0,4.89-5.21c-15.19-15.88-33.26-29.68-53.8-39a181.86,181.86,0,0,0-65.54-16.22c-11.4-.4-22.36-.69-34.33,1.06a132,132,0,0,0-33.87,10.17,142.59,142.59,0,0,0-29.91,18.44,151.13,151.13,0,0,0-12.73,11.35,289.14,289.14,0,0,0-22.67-30.67,324.72,324.72,0,0,0-38.95-39.91c-28.3-24.25-62.55-42.57-99.46-50.82-37-8-75.16-8.13-112.3,2.3a147.4,147.4,0,0,0-51.77,26.58A142.82,142.82,0,0,0,1945,1507a178.22,178.22,0,0,0-17.6,55l-.43,3.19a98.93,98.93,0,0,0-26.24-4.42c-20-.8-38.9,2.48-57.06,7.12-18.49,4.87-37.08,12.22-53.24,23.94s-30,26.9-39.25,44.42c-9.5,17.42-15,36.39-17.71,55.29-5.14,38.13-1.33,75.19,8.7,112a12.18,12.18,0,0,0,12,9h.14c33.81-.79,67.62-.76,101.42-1.91,16.9-.23,33.81-1.21,50.71-2.31s33.8-1.91,50.7-3.77A5.4,5.4,0,0,0,1961.92,1799.76Z" transform="translate(-1731.16 -1426.78)" style="fill:#CCCED0"/><path d="M3350.4,1926.28c-4.29-29.5-12.86-58.89-27.55-85.71-14.29-27-35.61-50.38-60.43-68.22-24.88-18-53.61-29.36-82.45-36.91-28.54-7.24-58.14-12.31-88.85-11.1-15.32.66-30.95,3-46.36,8.85l-2.67,1-.41-3.9-1.47-11.15c-4.48-29.6-13.19-58.7-27.06-85.61a220.74,220.74,0,0,0-56.65-70.62c-23.66-19.21-51.36-33.07-80.12-41.43-28.76-8.72-58.54-12.09-88-12.67a370.52,370.52,0,0,0-88,8.82c-57.89,12.86-111.68,41.51-156.28,79.62a487.57,487.57,0,0,0-61.29,63c-14.71,18-28.37,36.49-40.2,56.9-15.11-16.84-32.39-30.5-51.47-42.32-24.41-14.73-51.93-24.87-80.48-27.89-55.66-5.5-112.93,2.12-163.33,26.9-50.45,24.45-91.64,64.26-122.62,109.48a468,468,0,0,0-65.28,149.82,3.57,3.57,0,0,0,6.91,1.78l.06-.23a458.58,458.58,0,0,1,69-143.89c31.07-43.05,71.32-79.85,119.19-101.62,47.61-22.09,101.9-27.87,153.45-21.5,50.61,6.38,96.49,38.88,126.6,78.24l.24.32a12.4,12.4,0,0,0,20.92-2.08c48.72-98.42,141.21-180.58,249.68-203.67a346.76,346.76,0,0,1,82.42-7.53c27.7.78,55.32,4.19,81.32,12.34a203.23,203.23,0,0,1,71.09,37.42,194.77,194.77,0,0,1,49.43,62.78c12.18,24.09,19.91,50.6,23.75,77.58l1.25,10.14.49,5.23a24.71,24.71,0,0,0,3.87,11.07,26.82,26.82,0,0,0,17.78,11.68,28.25,28.25,0,0,0,15.42-1.58l2.31-.88c11.37-4.29,24.45-6.22,37.66-6.74,26.58-1,54.06,3.52,80.93,10.17,26.42,6.79,51.9,16.79,73.58,32.35,44.16,30.39,70.26,81.45,77.68,135.66,7.48,51,3,105.15-9.41,155.48l-258.8.7c-44.78,0-89.56.82-134.34,1.72s-89.56,1.52-134.34,3.18a5.37,5.37,0,0,0,0,10.72c44.77,1.94,89.55,3,134.32,4s89.54,2.24,134.32,2.56l268.65,2.4h.2a12.33,12.33,0,0,0,12-9c8.24-29.08,12.94-57.63,15.54-87.09C3355,1985.57,3354.71,1955.82,3350.4,1926.28Z" transform="translate(-1731.16 -1426.78)" style="fill:#CCCED0"/><path d="M1936,2098.27c4.29-1.46,110.47-2.12,262.38-2.31" transform="translate(-1731.16 -1426.78)" style="fill:#fff"/><path d="M1934.27,2093.19a32.82,32.82,0,0,1,3.3-.95l2.12-.49,4.21-.89c2.76-.61,5.53-1,8.26-1.42,5.5-.95,11-1.55,16.45-2.12,11-1.29,21.9-1.93,32.85-2.3l65.65-2.2c5.47-.13,10.94-.58,16.41-.38l16.41,1c10.94.59,21.88,1.41,32.82,1.66,2.74.06,5.47.24,8.2.2s5.47-1.14,8.2-1.46c5.47-.13,10.94,1.33,16.41,1.92a279,279,0,0,1,32.82,6.67,3.7,3.7,0,0,1,0,7.15,281,281,0,0,1-32.79,6.77c-5.46.61-10.93,2.09-16.39,2-2.73-.31-5.47-1.39-8.2-1.42s-5.47.17-8.2.25c-10.93.3-21.86,1.19-32.79,1.85l-16.39,1.08c-5.46.25-10.93-.17-16.39-.24q-32.79-1-65.56-1.35c-10.92-.19-21.84-.57-32.75-1.53-5.45-.37-10.91-.82-16.35-1.47l-8.13-.92-4-.51-2-.26a3.69,3.69,0,0,1-.77-.41l-4.23-2.51a4.23,4.23,0,0,1,.77-7.64Z" transform="translate(-1731.16 -1426.78)" style="fill:#CCCED0"/><ellipse cx="761.69" cy="705.11" rx="225.78" ry="225.2" style="fill:#d9a2dc"/><path d="M2554.15,2114.7c-14.14-.78-28.27-1.36-42.41-1.66-.3-14.1-.88-28.2-1.66-42.3-1.17-20.38-.08-40.76-13.18-61.14h-8.09c-13.1,20.38-12,40.76-13.19,61.14-.78,14.1-1.36,28.2-1.66,42.3-14.14.3-28.27.88-42.41,1.65-20.44,1.18-40.87.06-61.3,13.15v8.07c20.43,13.09,40.87,12,61.3,13.15,14.14.78,28.27,1.36,42.41,1.65.3,14.1.88,28.2,1.66,42.3,1.18,20.38.06,40.76,13.19,61.14h8.09c13.12-20.38,12-40.76,13.19-61.14.78-14.1,1.36-28.2,1.66-42.3,14.14-.3,28.27-.88,42.41-1.66,20.43-1.17,40.87-.08,61.3-13.15v-8.07C2595,2114.78,2574.59,2115.87,2554.15,2114.7Z" transform="translate(-1731.16 -1426.78)" style="fill:#204A69"/></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/connect-jetpack.svg b/plugins/jetpack/images/connect-jetpack.svg
deleted file mode 100644
index 3be9d32f..00000000
--- a/plugins/jetpack/images/connect-jetpack.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg id="connectJetpack" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1426.4 1421.5"><style>.st0{fill:#6F93AD}.st1{fill:#CCCED0}.st2{fill:#204A69}.st3{fill:#204A69}.st4{fill:#46799A}.st5{fill:#BBC9D5}.st6{fill:#fff}.st7{fill:#CCCED0}.st8{fill:none}.st9{fill:#F6F6F6}.st10{fill:#00be28}</style><title>jetPack-poweringUp</title><path class="st0" d="M872.7 1003.8l-9.8-67.9c0-401.7-282.3-404-282.3-404l-325.7-1.1C65 618.9 51.4 785.1 49.4 847.3c-1.7 52.9 43 190.6 43.7 232.2 102.4.3 566 131.8 746.2 4.7 25.6-18 37.8-49.5 33.4-80.4z"/><path class="st1" d="M426.7 526.2l-25.9-35.3 48.1-.8z"/><path class="st2" d="M515.5 447.3v-27.4c-50.9 5.9-106.4 14.7-145.9 5.8S442 448 515.5 447.3zM380.8 234c6.8 0 12.3 5.5 12.3 12.3v19.3c0 6.8-5.5 12.3-12.3 12.3-6.8 0-12.3-5.5-12.3-12.3v-19.3c0-6.8 5.5-12.3 12.3-12.3z"/><path class="st2" d="M300.6 262.6c3.5 23 2.9 46 6.5 68.3 3.4 22.1 9.7 44.3 24.1 59.4 14.2 15.3 36.1 21.6 58.2 24.5s45.4 3.5 68.2 3.4c22.4-.2 44.8-4 63.5-14.4 18.8-10.4 32.2-28.2 39.9-48.9s11.3-43.3 13.5-66.1c2.5-22.8 3.6-45.9 5.7-69.1.1-1.3 1.3-2.3 2.6-2.2 1.1.1 2 1 2.2 2.2 2.1 23.3 2.8 46.6 2 70-1.3 23.4-3.9 47.3-12.5 70.2-8.2 22.8-23.9 44.6-46 56.8-22 12.4-46.8 16.5-70.6 16.9-23.6.3-46.9.1-70.7-3.3-11.8-1.8-23.8-4.3-35.4-8.8s-22.9-11.4-31.5-20.9c-17.8-19.2-24-44.4-27.4-67.6-3-23.6-5-47.1-1.6-70.5.4-2.6 2.8-4.4 5.4-4 2 .4 3.6 2 3.9 4.1z"/><path class="st3" d="M456.3 235.8c2.5 11.4 2.9 22.8 3.5 34.2 0 11.4.1 22.8-1.9 34.2-.5 2.8-3.2 4.7-6.1 4.2-2.1-.4-3.8-2.1-4.2-4.2-2.1-11.4-1.9-22.8-1.9-34.2.6-11.4 1-22.8 3.5-34.2.4-2 2.3-3.2 4.3-2.8 1.4.3 2.5 1.4 2.8 2.8z"/><path class="st2" d="M522.1 234c6.8 0 12.3 5.5 12.3 12.3v19.3c0 6.8-5.5 12.3-12.3 12.3-6.8 0-12.3-5.5-12.3-12.3v-19.3c0-6.8 5.5-12.3 12.3-12.3zM405 335.5c4-1 4.7 1.2 7.7 2.1 2.6 1.1 5.4 2.1 8.1 2.8 5.7 1.6 11.8 2.4 17.9 3.4 6.1.8 12.2 1.4 18.2 1.7 6.2 0 11.5.1 18.2 1.9l.7.2c1.4.4 2.2 1.8 1.8 3.1-.1.3-.2.6-.4.9-5.3 7-13.2 8.1-19.9 8.5-6.9.5-13.8.3-20.6-.6-6.9-.9-13.7-2.5-20.2-4.7-3.4-1.1-6.8-2.5-10-4.2-3-1.7-7.7-3.3-8.4-8.8-.3-2.6 1.3-5 3.8-5.6l3.1-.7z"/><path class="st3" d="M490.5 183.4c4.4-4.9 9.5-6.4 14.2-7.8 4.8-1.1 9.7-1.5 14.5-1.3 9.5.6 19.7 2.4 27.8 10.1 1.9 1.8 2 4.8.1 6.7-1.3 1.4-3.4 1.8-5.1 1.1l-.7-.3c-3.5-1.3-7.1-2.2-10.7-2.7-3.9-.5-7.9-.8-11.8-.9-3.9-.1-7.9 0-11.8.4-3.4.2-6.9.8-10.2 1.7l-1.8.5c-2.4.6-5-.8-5.6-3.3-.4-1.5 0-3 1.1-4.2z"/><path class="st2" d="M520.2 420.5c3.4 18.5 2 38 2.7 55.7 1.3 16.5 11.1 31.1 25.9 38.5 3.6 1.8 7.4 3.1 11.4 3.9l13.7 2.4c9.3 1.7 18.6 3.5 27.9 5.5 18.6 3.9 37 9 55 15.3 36 12.6 71 29.9 100.5 55 29.8 24.5 52.3 59.2 59.5 96.9.3 1.3-.6 2.5-1.9 2.8-1.1.2-2.2-.4-2.7-1.4-14.8-34.2-36.3-63.9-64.3-87.2s-61.5-39.5-96.3-51.3c-17.5-5.8-35.2-10.6-53.3-14.8-9-2.1-18.1-3.9-27.2-5.6l-14-2.6c-5.2-1.1-10.3-2.9-15.1-5.3-19.4-9.9-32.1-29.3-33.6-51 0-19.8-.9-37.8 2.3-56.8.4-2.6 2.9-4.4 5.5-3.9 2 .3 3.6 1.9 4 3.9z"/><path class="st4" d="M317.9 114.6c5.5 21.4 21.2 53.1 68.5 77 21.5 10.8 52.7-1.5 82.4 12.7 25.1 12 40.6 42 64.5 48 33.6 8.5 54.3 30.3 64.7 44.5 2.7 3.6 7.8 4.4 11.4 1.7 1.3-.9 2.3-2.2 2.8-3.7 7.4-19.8 18.4-55.9 14.3-86.3C622.9 181 606-30.5 407.7 3.8c-98.9 17.1-96.6 84-89.8 110.8z"/><path class="st5" d="M291.1 236.5c-4-4-3.1-8.5-3.9-12.9-.5-4.4-.8-8.7-1-13.1-.4-8.8-.8-17.6.1-26.4.6-9 2.2-17.9 4.6-26.5 2.4-8.6 6.3-17.8 14.8-23.1 1.2-.8 2.8-.4 3.6.8.3.5.5 1.1.4 1.6v.2c-.7 9.1-2.6 16.2-4.5 24.1-1.7 7.8-2.3 16-3 24.1-.5 8.2-1 16.5-.8 24.8 0 4.1.2 8.3.4 12.5-.1 4.2 1.6 8.2-1.2 12.6l-.2.4c-1.7 2.7-5.3 3.5-8.1 1.8l-1.2-.9z"/><path class="st2" d="M514.1 493.1c-7.3 3.4-14.5 2.1-21.8 2.5l-21.8.3c-14.5.1-29 .6-43.5.4-14.5 0-29-.3-43.5-.6-14.5-.2-29-.7-43.5-5-1.3-.4-2.1-1.8-1.7-3.1.2-.8.9-1.4 1.7-1.7 14.5-4.2 29-4.8 43.5-5 14.5-.4 29-.7 43.5-.6 14.5-.2 29 .3 43.5.4l21.8.3c7.2.4 14.5-.9 21.8 2.5 2.6 1.2 3.8 4.3 2.5 6.9-.5 1.2-1.4 2.1-2.5 2.7zM397.8 193.9c-3 2-3.1.5-5 .2-1.7-.5-3.5-.8-5.3-1-3.8-.5-7.7-.3-11.6-.4-3.9.1-7.8.3-11.6.8-4.1 1-8.3 1-12.4 0l-.6-.1c-1.6-.4-2.6-2-2.2-3.6v-.1c1.6-6.5 7.1-9.1 11.8-10.4 4.7-1.5 9.6-2.3 14.6-2.5 4.9-.2 9.9.3 14.7 1.4 2.6.5 5.1 1.3 7.5 2.2 2.2 1.1 6.1 1.6 6.6 6.4.2 1.6-.6 3.2-1.9 4.1l-4.6 3z"/><circle class="st5" cx="269.8" cy="315.6" r="9.6"/><path class="st3" d="M214.6 1048.5c2.8-17.2 4.9-34.4 6.4-51.6l7.8-76.6 6.6-76.6 3.3-38.8c0-13.3 2.2-25.5 1.1-38.8-1.1-1.1-2.2-2.2-3.3-2.2-2.2-1.1-3.3 0-4.4 2.2-3.3 12.2-4.4 25.5-5.5 37.7l-3.3 38.8-6.7 76.6-6.7 76.6c-1.6 18.1-3.1 36.2-3.5 54.3 2.7-.8 5.4-1.3 8.2-1.6zM656.7 898.4l8.2 76.4 5.4 49.8c1.6-.3 3.3-.4 4.9-.5 2.2.1 4.5.3 6.7.7l-4.8-51.2-8.2-76.4-4.2-38.8c-2.6-13.1-2.8-25.5-6.4-38.3-1.3-.9-2.6-1.8-3.7-1.5-2.4-.7-3.3.6-3.9 3-.9 12.6.6 25.9 1.8 38.1l4.2 38.7z"/><path class="st6" d="M157.3 1239.2V907.6c0-20.4 16.6-36.9 37-36.9h562.3v353"/><path class="st7" d="M153.9 1239.2c-2.5-39.7-1.5-79.3-1.7-119V912c-.7-10 2.2-22.6 9.6-31 7.3-8.8 17.8-14.3 29.2-15.2 10.7-.3 20-.1 30.1-.2h59.5c158.6.3 317.3-.7 476 .7 2.4 0 4.4 2 4.4 4.4-.6 117.7-1.5 235.3-2.7 353-.1.9-.9 1.6-1.8 1.6-.8-.1-1.5-.7-1.6-1.6-1.3-117.7-2.2-235.3-2.7-353l4.4 4.4c-158.7 1.3-317.3.4-476 .7h-59.5c-9.7.1-20.2-.1-29.3.1-8.6.7-16.6 4.8-22.2 11.5-5.6 6.9-7.8 14.8-7.2 24.5v208.2c-.2 39.7.8 79.3-1.7 119-.1 1.9-1.7 3.3-3.6 3.2-1.8 0-3.1-1.4-3.2-3.1z"/><path class="st2" d="M138.1 1421.5c-18.5 0-39.1-9.9-51-24.7-22-27.4-39.8-70.3-29.9-104.6.8-2.8 3.8-4.5 6.7-3.7 2.8.8 4.5 3.8 3.7 6.7-8.9 30.5 7.6 69.6 27.9 94.8 8.8 10.9 26.9 21.3 44.5 20.7 10.9-.5 19.4-5.3 25.3-14.3 1.6-2.5 5-3.2 7.5-1.5 2.5 1.6 3.2 5 1.5 7.5-7.8 11.9-19.5 18.5-33.8 19.2-.8-.1-1.6-.1-2.4-.1z"/><path class="st2" d="M167.3 1403.2c-23 0-45.2-9.2-46.7-9.9-2.7-1.2-4-4.4-2.8-7.1 1.2-2.7 4.3-3.9 7-2.8.5.2 53.7 22.3 74.3-3.4 1.9-2.3 5.2-2.7 7.6-.8 2.3 1.9 2.7 5.2.8 7.6-10.1 12.6-25.4 16.4-40.2 16.4z"/><path class="st2" d="M193.8 1386.5c-23.3 0-55.6-16.8-59.9-19-2.6-1.4-3.6-4.6-2.2-7.3s4.6-3.6 7.3-2.2c18 9.5 51.1 22.4 63.6 16.2 2.7-1.3 4.2-3.6 4.8-7-.1 0-1.6-7.7-23.4-20.2-2.6-1.5-3.5-4.8-2-7.3s4.8-3.5 7.3-2c28.8 16.5 29.2 28.1 28.7 31.3-1.1 6.8-4.8 12-10.6 14.9-4.3 1.9-9 2.8-13.6 2.6zM734.3 1381.5c-25.7 0-45.1-22.8-46.1-24-1.6-2.1-1.2-5.2.9-6.8 2-1.5 4.9-1.3 6.6.6.2.3 25.2 29.5 52.6 17.5 2.5-1 5.3.2 6.3 2.7 1 2.4-.1 5.1-2.4 6.2-5.7 2.5-11.7 3.8-17.9 3.8z"/><path class="st2" d="M753.9 1386.2c-6.3 0-12.5-.8-18.7-2.2-2.6-.5-4.3-3.1-3.8-5.7s3.1-4.3 5.7-3.8c.1 0 .3.1.4.1 30.3 7.3 60.6-6.3 77.2-34.7 11.5-19.8 7.3-39.2 1-60.7-.8-2.6.7-5.3 3.3-6 2.6-.8 5.3.7 6 3.3 6.7 22.8 11.5 45.2-1.9 68.3-15.4 26.3-41.3 41.4-69.2 41.4z"/><path class="st6" d="M725.1 1329.7H808v13.9c0 14.1-11.5 25.6-25.6 25.6H118.8c-14.1 0-25.6-11.4-25.6-25.6v-13.9h599.6"/><path class="st7" d="M725.1 1328.4l82.9-1.7c1.6-.1 2.9 1.2 3 2.8v.1l.2 12.9c.7 15.4-10.8 28.7-26.2 30.3-18 .6-34.7.6-52.1.8l-103.5.6V1364h10.4v10.4l-287.5.6-143.8.3-71.9-.1h-18c-7.4-.1-14.6-2.8-20.2-7.6s-9.4-11.5-10.5-18.8c-.4-3.3-.5-6.6-.4-9.9v-9c0-3.2 2.6-5.7 5.7-5.7l299.8.5c99.9.2 199.9.7 299.8 3.9.7 0 1.3.6 1.3 1.3s-.6 1.3-1.3 1.3c-99.9 3.2-199.9 3.7-299.8 3.9l-299.8.5 5.7-5.7v9c-.1 2.7 0 5.4.3 8.1.7 4.6 3.1 8.8 6.7 11.8s8.1 4.7 12.8 4.7h17.9l71.9-.1 143.8.3 287.5.6v10.4h-10.4c-2.8 0-5.2-2.3-5.2-5.1s2.3-5.2 5.1-5.2h.1l103.5.6 51.4.5c7.5-.5 14.2-4.9 17.8-11.6 1.8-3.4 2.7-7.1 2.6-10.9l.2-12.9 3 3-82.9-1.7c-.7 0-1.3-.6-1.3-1.3s.6-1.3 1.3-1.3l.1-.4z"/><path class="st7" d="M501.3 1349.4h-89.5c-10.9 0-19.7-8.8-19.7-19.7h129c0 10.9-8.9 19.7-19.8 19.7z"/><path class="st6" d="M156.7 1239.2c24.2 14.2 35.8 62.5 31.4 88-3.3 19-13.2 22.6-25 6.9-9.7-12.9-12.3-29.2-17.5-44.9"/><path class="st2" d="M176.8 1349.2c-4.6 0-10.9-2.5-18-12-7.8-10.4-11.4-22.7-14.8-34.6-1.1-4-2.3-7.9-3.6-11.9-.9-2.8.6-5.9 3.4-6.8s5.9.6 6.8 3.4c1.4 4.1 2.5 8.2 3.7 12.3 3.3 11.4 6.4 22.2 13 31 5.1 6.7 8.4 7.9 9.8 7.7 1.4-.3 4.1-3.3 5.6-12.2 4-23.4-6.6-69.3-28.9-82.4-2.6-1.5-3.4-4.8-1.9-7.4 1.5-2.6 4.8-3.4 7.4-1.9 26.4 15.5 38.6 66.6 34 93.5-2.6 15.1-8.9 19.7-13.7 20.8-.8.4-1.8.5-2.8.5z"/><path class="st0" d="M152.8 1072.5s23.9 65 12.6 109.4c-1.3 10.4-1.1 20.9.6 31.3 2.4 15.3-6.9 30.1-21.8 34.5-21.3 6.4-49 20.1-69.9 49.4-8.5 11.9-26.2 11.8-33.9-.6C26.2 1273.3 9 1233 5.8 1170.7c0 0-41.4-317.5 99.8-514.8l47.2 416.6z"/><path class="st2" d="M53.7 1173c6.4-8.5 15.8-11.7 24.9-14.8 9.3-3.2 19.1-5 28.9-5.4 10.2-.2 20.3 1.7 29.7 5.6 9.3 4 18.1 10.8 21.2 20.8.3.8-.2 1.6-1 1.9-.3.1-.7.1-1 0l-.1-.1c-9.5-3.6-15.4-8.8-23.5-11.6-8-2.6-16.5-3.8-24.9-3.5-8.6 0-17.3 1.6-25.9 3.6s-16.8 5.6-26.8 5.8h-.1c-.8 0-1.5-.6-1.6-1.5-.2-.2-.1-.5.2-.8zM77.2 1073.5c4.3-5.5 10.4-7.8 16.4-9.7 6.2-2 12.6-3.2 19.1-3.6 6.7 0 13.3 1.3 19.5 3.8 6.2 2.5 11.9 7.1 14 13.7.2.5-.1 1.1-.7 1.2-.2.1-.4.1-.6 0h-.1c-6.2-2.4-10.2-5.7-15.5-7.7-5.3-1.8-10.9-2.5-16.5-2.2-5.8 0-11.5.8-17.1 2.3-5.7 1.6-11.1 3.6-17.7 3.9-.6 0-1-.4-1-1 0-.2.1-.5.2-.7z"/><path class="st8" d="M756.5 1326.8v-44.9"/><path class="st7" d="M753.2 1326.8c-2.4-1.9-1.5-3.7-1.8-5.6l-.2-5.6c-.1-3.7-.4-7.5-.3-11.2 0-3.7.2-7.5.4-11.2s.5-7.5 3.5-11.2c.7-.9 2.1-1.1 3-.3l.3.3c3 3.7 3.4 7.5 3.5 11.2s.5 7.5.4 11.2c.1 3.7-.2 7.5-.3 11.2l-.2 5.6c-.3 1.9.6 3.7-1.8 5.6-1.8 1.6-4.5 1.6-6.5 0z"/><path class="st2" d="M711.6 1345.7c-5.7 0-10.8-3-15.2-9-9.5-12.7 1.8-33 9.2-46.4 1.3-2.3 2.4-4.4 3.3-6.2 3.1-6.1 5.1-12.8 7-19.2 3.1-10.4 6.3-21.2 14.4-30.4 1.7-2.1 4.8-2.4 6.8-.7 2.1 1.7 2.4 4.8.7 6.8l-.2.2c-6.7 7.6-9.4 16.9-12.4 26.8-2 6.8-4.1 13.9-7.6 20.8-.9 1.9-2.2 4.1-3.5 6.5-5.9 10.5-15.7 28.2-9.9 35.9 4 5.3 6.9 5.1 7.9 5 6.2-.4 14.2-9.5 23.6-26.8 5.1-9.4 11.6-17.7 17.9-25.7s12-15.2 16.4-23.4c1.4-2.3 4.4-3.1 6.7-1.7 2.2 1.3 3 4 1.9 6.3-4.8 8.8-11.1 16.9-17.3 24.7s-12.3 15.6-17 24.3c-5 9.2-16.8 30.8-31.5 31.9-.4.3-.8.3-1.2.3z"/><path class="st0" d="M748.9 1112.6s-32.5 41.5-28.7 99.7c-.2 6.4-1.3 12.7-3.3 18.8-3.4 10.4 2.9 21.2 13.7 22.7 20.1 2.8 57.3 8.1 82.2 25.8 10.5 7.4 25 5.8 32.2-4.8 9.3-13.8 19.4-36 22.3-69.4 0 0 26.6-170.2-15.6-397.4l-102.8 304.6z"/><path class="st2" d="M723.8 1213.4c5-8.2 13.3-11.5 21.4-14.5 8.3-3.1 17.1-4.8 26-5 9.2 0 18.2 2.2 26.4 6.3 8.3 3.8 15.5 10.3 18 19.3.2.8-.2 1.6-1 1.8-.3.1-.6.1-.9 0l-.2-.1c-8.8-2.8-13.7-8.1-20.8-10.6-6.8-2.7-14.1-4.1-21.5-4-7.6.1-15.2 1.2-22.5 3.2-7.5 2.1-14.4 5.4-23.4 5.8h-.1c-.8 0-1.5-.6-1.6-1.4-.1-.3 0-.6.2-.8z"/><path class="st9" d="M204.8 932h503.6v350.8H204.8z"/><path class="st1" d="M363.2 1243.2c-40.2 1.2-82 1.5-123.2 1.4-1.5 0-2.7-1.2-2.7-2.7V977.2c0-1.5 1.2-2.7 2.7-2.7h122.6c1.5 0 2.7 1.2 2.7 2.7-.1 44.4.1 89-.3 133.3l-1.8 132v.7zm-1.3-2.6l-1.7-132.1c-.4-43.9-.3-87.5-.3-131.4l2.7 2.7H240l2.7-2.7v264.7l-2.7-2.7c40.3 0 79.9.2 121.3 1.4l.6.1zM678.8 1243.2c-46 1-93.3 1.1-140.2 1.2l-141.7.2c-1.5 0-2.7-1.2-2.7-2.7v-176.7c0-1.5 1.2-2.7 2.7-2.7h281.3c1.5 0 2.7 1.2 2.7 2.7v.1c-.5 59.4-.9 119.2-2.1 177.4v.5zm-1.3-2.6c-1.2-59.5-1.5-117.3-2.1-175.4l2.7 2.7H396.8l2.7-2.7v176.7l-2.7-2.7 139.6.2c46.6.1 92.9.2 140.4 1.2h.7zM396.8 975.3c46.9-1.6 93.8-.6 140.7-.9h140.7c1.5 0 2.7 1.2 2.7 2.7v54.5c0 1.5-1.2 2.7-2.7 2.7H537.5c-46.9.2-93.8-.6-140.7-1.1-.9 0-1.6-.7-1.6-1.5v-.1l.7-27.3c0-.5.4-.9.9-.9s.9.4.9.9l.7 27.3-1.6-1.6c46.9-.6 93.8-1.3 140.7-1.1h140.7l-2.7 2.7v-54.5l2.7 2.7H537.5c-46.9-.3-93.8.7-140.7-.9-1 0-1.8-.8-1.8-1.8s.8-1.8 1.8-1.8z"/><path class="st1" d="M395.2 1219.2c5.1-13 13.5-24.4 23.2-34.6 9.9-9.9 21.6-18.3 35.1-22.9 6.7-2.5 13.9-3.6 21.1-3.3 7 .1 14 1 20.9 2.7 13.8 3.2 26.2 9.8 38.6 15 12.2 5.3 25.8 8.6 38.3 6.8 12.5-2.7 22.8-12.2 32.7-21.4 9.9-9.3 20.1-19 32.3-26s26.2-11.1 40.2-10.2c.5 0 .9.4.9.9v.1c0 .5-.4.8-.9.9-13.4.8-26.4 5.1-37.6 12.5-11.3 7.1-21 16.6-31.1 25.9-10 9.2-20.6 19.4-35.3 22.8-14.7 2-28.7-1.7-41.5-7.2s-24.8-11.8-37.8-14.8c-13-2.8-26.6-4.2-38.9.5-12.5 4.3-23.6 12.2-33 21.6s-16.6 20.9-23.8 32.4c-.5.9-1.7 1.1-2.5.6-.9-.5-1.2-1.4-.9-2.3z"/><circle class="st1" cx="1039.6" cy="841.8" r="12.4"/><circle class="st1" cx="1039.6" cy="895.7" r="12.4"/><circle class="st1" cx="942.3" cy="949.6" r="12.4"/><circle class="st1" cx="1039.6" cy="949.6" r="12.4"/><circle class="st1" cx="989" cy="949.6" r="12.4"/><circle class="st1" cx="1039.6" cy="549.2" r="12.4"/><circle class="st1" cx="1039.6" cy="605.4" r="12.4"/><circle class="st1" cx="1039.6" cy="790.4" r="12.4"/><ellipse class="st5" cx="1288.4" cy="284.5" rx="132" ry="131.7"/><path class="st0" d="M1208.5 183c-24.7 21.7-41.1 51.5-45.6 83.1-4.2 31.6 2.8 64.6 21 90.8 18.1 26.4 45.7 44.9 77 51.7 30.9 6.7 64.2 1.5 91.3-14.8 27.1-16.1 48.1-42.4 56.9-72.8 9.1-30.7 6-63.7-8.5-92.2-14.6-28.6-39.5-50.5-69.7-61.4-14.9-5.6-30.7-8-46.9-8.2-8.2 0-16.3 0-23.9 1.2s-15.1 4.1-22.3 7.8l-.2.1c-1.7.8-3.7.2-4.5-1.5-.5-1.1-.5-2.3.2-3.3 7.4-11.4 14.8-22.9 22.5-34.1.4-.6 1.3-.8 1.9-.3.5.4.7 1.1.4 1.7-6.1 12.2-12.5 24.2-19 36.2l-4.6-4.7c7.3-4.2 15.3-8.1 23.9-10s17.2-2.4 25.6-2.5c16.9-.3 34.4 1.7 50.7 7.4 68.6 24.1 106.4 97.5 86.4 167.4-9.5 33.4-32.2 62.9-62.3 80.3-30 17.7-66.6 23.2-100.4 15.6-34.2-7.7-64.2-28.1-83.8-57.1-19.6-28.9-27.3-64.3-21.3-98.7 5.5-34 25.9-64.9 53.6-83.8.6-.4 1.5-.2 1.9.4.2.5.1 1.2-.3 1.7z"/><path class="st5" d="M1258.2 249.1l34.2 42.8-66.4 58.6"/><path class="st0" d="M1261 246.8c4.8 2 7 6.1 10.1 9.5l8.8 10.6c5.8 7.1 11.8 14 17.4 21.2 2 2.6 1.7 6.3-.7 8.4-11.1 9.8-22.2 19.4-33.6 28.9-11.2 9.6-22.5 19.2-35.8 26.4-.9.5-2 .2-2.5-.7-.3-.6-.3-1.4.1-2 8.8-12.3 19.7-22.3 30.7-32.1s21.8-19.9 32.9-29.6l-.7 8.4c-5.8-7.1-11.2-14.4-16.9-21.6l-8.4-10.9c-2.6-3.8-6.2-6.8-7.1-11.9-.4-2.3 1.1-4.4 3.4-4.8.8-.2 1.6-.1 2.3.2z"/><path class="st8" d="M1236.2 165.1l34.8 20.1"/><path class="st0" d="M1236.9 163.9c5.1-2.2 7.8-.2 10.9 1.1s6.1 2.9 9 4.5c2.8 1.8 5.7 3.5 8.4 5.6s5.8 3.4 6.5 8.9c.1 1-.4 2-1.4 2.4-5.1 2.2-7.8.2-10.9-1.1s-6.1-2.9-9-4.5c-2.8-1.8-5.7-3.5-8.4-5.6s-5.8-3.4-6.5-8.9c-.1-1 .4-2 1.4-2.4z"/><circle class="st0" cx="1288.4" cy="206.7" r="6.6"/><circle class="st0" cx="1288.4" cy="376.1" r="6.6"/><circle class="st0" cx="1375.8" cy="288.7" r="6.6"/><circle class="st0" cx="1200.9" cy="288.7" r="6.6"/><path class="st6" d="M756.7 360.2c-40.3.1-69.6.2-69.6.2s-18.9-61.9 31.3-74.9c15-3.9 23.8-2.4 28.2-.5 1.4.7 3.1.1 3.8-1.4.1-.2.2-.5.2-.8 1.1-12.4 8.2-46.4 53.5-46.4 49.9 0 71.8 46.9 71.8 46.9s11.1-16.2 30.8-17.8c21.5-1.7 37 5.9 48 16.3"/><path class="st1" d="M756.7 362.1c-11.6 1.1-23.2 1.8-34.8 2.1l-34.8.6h-.1c-1.9 0-3.6-1.2-4.1-3.1-3.6-12.5-4.6-25.5-3-38.4 1.6-12.9 8.1-26.3 19.5-34.2 5.5-3.8 11.7-6.6 18.3-8.2 6.4-1.8 13-2.6 19.6-2.5 3.6.1 7.1.8 10.5 2l.6.2-.3-.1h-.6c-.5.1-.9.4-1.2.9-.2.3-.3.6-.3 1l.1-1.1.3-2.5c.9-6.6 3-13 6-18.9 6.2-12.2 17.2-21.2 30.4-24.8 12.6-3.4 25.8-3.7 38.6-.8 25.7 5.9 45.7 24.8 58.4 47.2l-7.3-.6c4.9-6.5 11.4-11.7 18.9-15 7.3-3.5 15.8-4.4 23.4-3.8 15.5.8 30.7 7.7 41 18.9.5.5.5 1.3 0 1.7-.5.4-1.2.4-1.6 0-11-9.3-25.1-14.4-39.5-14.1-7.2.2-13.9 1-19.9 4.2-6 3.1-11.2 7.5-15.2 12.9l-.1.2c-1.4 1.8-4.1 2.2-5.9.8-.5-.4-.9-.9-1.2-1.5-10-20.8-29.8-38.1-52.5-42.9-11.4-2.4-23.1-2-34.3 1.1-10.8 3.1-19.9 10.6-24.8 20.7-2.5 5.1-4.2 10.5-4.9 16.1l-.2 2.1-.1 1.1c-.1 1.1-.5 2.2-1.1 3.1-1.1 1.7-3 2.9-5 3.2-1 .2-1.9.2-2.9 0-.5-.1-.9-.2-1.4-.4l-.4-.2c-2.4-.8-5-1.3-7.5-1.3-10.9 0-23.3 2.6-32.1 8.8-9 6.2-14.4 16.6-16 28s-.5 23.5 2.4 34.6l-4.2-3.1 34.8.4c11.6.2 23.2.8 34.8 1.9 1 .1 1.8 1 1.6 2-.3.9-1 1.6-1.9 1.7z"/><path class="st6" d="M1041.7 462.3c98.7.2 184.4.6 184.4.6s30.2-98.9-50.1-119.7c-24.1-6.2-38-3.9-45.2-.9-2.9 1.2-6.2-.5-6.4-3.4-1.7-19.8-13-74.2-85.6-74.2-79.8 0-114.8 74.9-114.8 74.9s-17.8-25.9-49.3-28.4c-93.2-7.5-116 95.3-116 95.3"/><path class="st1" d="M1041.7 460.4c30.7-.9 61.5-1.6 92.2-1.6l92.2-.3-4.2 3.1c4.8-18.1 6.7-37.9 4-56.4-2.5-18.6-11.5-36.1-26.7-46.5-7.4-5.3-16.2-8.8-25.2-11.1-9.2-2.3-18.7-3.8-27.8-3.5-4.4.1-8.8.9-12.9 2.3l-.8.3c-.6.2-1.1.4-1.7.5-1.2.2-2.4.2-3.6 0-2.5-.4-4.7-1.9-6.1-4-.7-1.1-1.2-2.4-1.3-3.8l-.2-1.8-.4-3.5c-1.2-9.3-4-18.2-8.2-26.6-8.3-16.8-23.3-29.3-41.4-34.3-18.3-5.1-37.6-5.7-56.2-1.7-37.3 7.9-68.8 36.2-85.7 69.9-1.1 2.1-3.6 3-5.7 1.9-.6-.3-1.1-.7-1.5-1.2l-.1-.1c-10.3-13.5-26.1-24.7-43.5-26.9-17.7-2.2-36.3-.2-52.7 7.4s-30.2 20.1-40.9 34.9c-10.7 15-18.7 31.7-23.7 49.4v.1c-.2.6-.9 1-1.6.7-.5-.2-.9-.8-.8-1.3 4.4-18.3 12-35.7 22.4-51.4 10.6-15.5 24.8-29.2 42.1-37.6s37-11.1 56-9.2c19.8 2.3 37.4 13.4 49.5 29.2l-7.3.6c9.5-18.3 22.7-33.5 37.9-46.8 15.3-13.1 33.8-22.9 53.6-27.3 19.9-4.5 40.7-4 60.4 1.4 9.8 3 19.4 7.5 27.5 14.2 8.1 6.7 14.7 14.9 19.4 24.2 4.7 9.2 7.8 19.1 9.3 29.4l.5 3.8.2 1.8c0-.1 0-.2-.1-.4s-.1-.1-.1-.1h.1l1-.4c5.1-1.9 10.5-2.9 15.9-3 10.5-.4 20.7 1.3 30.5 3.8s19.8 6.5 28.3 12.7c17.5 12.1 27.6 32.7 30.2 52.8 2.8 20.4.8 40.6-4.6 60.3-.5 1.8-2.2 3.1-4.1 3.1h-.1l-92.2-.9c-30.7-.3-61.5-1.1-92.2-2.2-1 0-1.8-.8-1.8-1.8.4-1.3 1.2-2.1 2.2-2.1z"/><path class="st6" d="M749.4 462.9c1.5-.5 37.9-.7 90-.8"/><path class="st1" d="M748.9 461.1c8.5-2.1 15.3-2.4 23.1-2.8l22.5-.8c7.5-.5 15 .7 22.5.7 7.5-1.2 15 .9 22.5 2.5.7.2 1.1.8.9 1.5-.1.5-.5.8-.9.9-7.5 1.7-15 3.8-22.5 2.6-7.5.1-15 1.3-22.5.9l-22.5-.5c-7.3-.1-14.7-.7-22-1.7l-1.1-.2c-.9-.2-1.5-1-1.4-2 .2-.4.7-.9 1.4-1.1z"/><ellipse class="st5" cx="940.5" cy="474.4" rx="77.5" ry="77.3"/><path class="st8" d="M940.5 432.4v84"/><path class="st0" d="M941.9 432.4c4.5 7 4.1 14 4.5 21s.6 14 .7 21-.3 14-.6 21 0 14-4.5 21h-2.8c-4.5-7-4.1-14-4.5-21s-.6-14-.6-21 .3-14 .6-21 0-14 4.5-21h2.7z"/><path class="st8" d="M982.6 474.4h-84.1"/><path class="st0" d="M982.6 475.8c-7 4.5-14 4.1-21 4.5s-14 .6-21 .6-14-.3-21-.6-14 0-21-4.5V473c7-4.5 14-4.1 21-4.5s14-.6 21-.6 14 .3 21 .6 14 0 21 4.5v2.8z"/><path class="st5" d="M991.7 7.4s-29 35.9-79.2 31.7c0 0-26.8 143.7 82.4 174.5 0 0 106.4-14.8 85.2-174.5 0-.1-60.2 4.6-88.4-31.7z"/><path class="st10" d="M992.3 213.6S1102 198.8 1080.7 39c0 0-60.8 1.4-88.9-34.9 0 0-31.8 39.2-81.9 34.9-.1 0-26.8 143.7 82.4 174.6"/><path class="st6" d="M961.4 116.3c3.4.5 5.4 2.8 7.9 4.6l7.1 5.5c4.7 3.7 9.6 7.2 14.2 11l-5.8.5 28.8-32.1c9.5-10.8 19.3-21.3 30.6-30.6.5-.5 1.3-.4 1.8.1.4.4.4 1.1.1 1.5-7.8 12.3-17.1 23.3-26.6 34.1l-28.3 32.5c-1.4 1.7-3.9 1.9-5.7.6l-.1-.1c-4.8-3.6-9.3-7.6-13.9-11.3l-6.9-5.7c-2.2-2-4.9-3.4-6.2-6.6-.6-1.5.1-3.2 1.6-3.8.3-.3.9-.4 1.4-.2z"/><path class="st10" d="M1040.3 651.1c-26.5 0-47.8 21.4-47.8 47.8 0 26.5 21.4 47.8 47.8 47.8 26.5 0 47.8-21.4 47.8-47.8.1-26.4-21.3-47.8-47.8-47.8zm-2.4 55.8H1014l23.9-46.3v46.3zm4.8 30.4V691h23.9l-23.9 46.3z"/></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/connect-plug.svg b/plugins/jetpack/images/connect-plug.svg
deleted file mode 100644
index 94f2e608..00000000
--- a/plugins/jetpack/images/connect-plug.svg
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="59.998px" height="59.997px" viewBox="0 0 59.998 59.997" enable-background="new 0 0 59.998 59.997" xml:space="preserve">
-<path fill="#FFFFFF" d="M29.999,0C13.431,0,0,13.431,0,29.999s13.431,30,29.999,30c16.568,0,29.999-13.431,29.999-30
- C59.998,13.431,46.567,0,29.999,0z M29.999,56C15.639,56,3.998,44.359,3.998,29.999S15.639,3.998,29.999,3.998
- C44.358,3.998,56,15.639,56,29.999S44.358,56,29.999,56z"/>
-<g>
- <path fill="#FFFFFF" d="M20.96,20.884l1.886-2.321l18.681,18.68l-2.47,1.742c-0.688,0.689-1.847,1.264-3.47,1.72
- c-1.624,0.456-3.105,0.685-4.449,0.685h-8.044l-1.571,1.568c-0.606,0.609-1.339,0.912-2.197,0.912c-0.856,0-1.59-0.303-2.196-0.912
- c-0.608-0.593-0.913-1.322-0.913-2.188c0-0.861,0.302-1.598,0.913-2.205l1.569-1.571V28.95c0-1.327,0.212-2.833,0.633-4.519
- C19.756,22.744,20.296,21.562,20.96,20.884z M37.546,17.215l-6.717,6.717l-3.878-3.876l6.716-6.718
- c0.362-0.357,0.86-0.474,1.496-0.341s1.214,0.466,1.74,1.005c0.539,0.526,0.871,1.104,0.996,1.732
- C38.021,16.361,37.904,16.857,37.546,17.215z M36.013,29.114l6.717-6.716c0.343-0.358,0.834-0.478,1.469-0.353
- c0.636,0.125,1.215,0.456,1.742,0.995c0.538,0.525,0.871,1.104,0.994,1.732c0.127,0.629,0.008,1.124-0.352,1.482l-6.717,6.737
- L36.013,29.114z"/>
-</g>
-</svg>
diff --git a/plugins/jetpack/images/customize-theme-2.svg b/plugins/jetpack/images/customize-theme-2.svg
deleted file mode 100644
index 205950b7..00000000
--- a/plugins/jetpack/images/customize-theme-2.svg
+++ /dev/null
@@ -1,248 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 21.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- viewBox="0 0 228.1 143.5" style="enable-background:new 0 0 228.1 143.5;" xml:space="preserve">
-<style type="text/css">
- .st0{fill:#FFFFFF;}
- .st1{fill:#CCCED0;}
- .st2{fill:#F6F6F6;}
- .st3{fill:#FFFFFF;stroke:#204A69;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
- .st4{fill:#4F758F;}
- .st5{fill:#204A69;stroke:#204A69;stroke-width:0.7347;stroke-miterlimit:10;}
- .st6{fill:#6F93AD;}
- .st7{fill:#BBC9D5;}
- .st8{fill:none;stroke:#204A69;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
- .st9{fill:none;stroke:#BBC9D5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
- .st10{fill:none;stroke:#FFFFFF;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
- .st11{fill:#204A69;}
- .st12{fill:none;stroke:#CCCED0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
- .st13{fill:none;stroke:#CCCED0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:5.0882,5.0882;}
- .st14{opacity:0.26;fill:#969CA1;}
- .st15{fill:none;stroke:#FFFFFF;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
- .st16{fill:none;stroke:#FFFFFF;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:4.6103,4.6103;}
- .st17{fill:none;stroke:#FFFFFF;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:5.267,5.267;}
- .st18{opacity:0.26;fill:#4F758F;}
- .st19{fill:none;stroke:#CCCED0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:5.2793,5.2793;}
- .st20{fill:none;stroke:#CCCED0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:5.7214,5.7214;}
- .st21{fill:none;stroke:#CCCED0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:5.2341,5.2341;}
- .st22{fill:none;stroke:#CCCED0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:5.2928,5.2928;}
-</style>
-<g>
- <g>
- <line class="st0" x1="33.5" y1="86.1" x2="32.6" y2="73.1"/>
- <path class="st1" d="M33.4,86.1c-0.3-1.1-0.5-2.1-0.6-3.2c-0.1-1.1-0.2-2.2-0.3-3.2c-0.1-1.1-0.1-2.2-0.2-3.3c0-1.1,0-2.2,0.1-3.3
- c0-0.1,0.1-0.2,0.2-0.2c0.1,0,0.2,0.1,0.2,0.2c0.2,1.1,0.4,2.1,0.5,3.2c0.1,1.1,0.2,2.2,0.3,3.2c0.1,1.1,0.1,2.2,0.2,3.3
- c0,1.1,0,2.2-0.2,3.3C33.6,86.2,33.6,86.2,33.4,86.1C33.5,86.2,33.5,86.2,33.4,86.1z"/>
- </g>
- <g>
- <line class="st0" x1="36.2" y1="89" x2="36" y2="76"/>
- <path class="st2" d="M36.1,89c-0.3-1.1-0.4-2.2-0.5-3.2c-0.1-1.1-0.1-2.2-0.1-3.2c0-1.1,0-2.2,0-3.3c0-1.1,0.1-2.2,0.2-3.3
- c0-0.1,0.1-0.2,0.2-0.2c0.1,0,0.2,0.1,0.2,0.2c0.2,1.1,0.3,2.2,0.3,3.2c0.1,1.1,0.1,2.2,0.1,3.2c0,1.1,0,2.2,0,3.3
- c0,1.1-0.1,2.2-0.3,3.3C36.3,89,36.2,89.1,36.1,89C36.1,89,36.1,89,36.1,89z"/>
- </g>
- <g>
- <line class="st0" x1="38.7" y1="90" x2="40.4" y2="77.1"/>
- <path class="st2" d="M38.6,90c-0.1-1.1-0.1-2.2,0-3.3c0.1-1.1,0.2-2.2,0.3-3.2c0.1-1.1,0.3-2.1,0.5-3.2c0.2-1.1,0.4-2.1,0.7-3.2
- c0-0.1,0.1-0.2,0.3-0.1c0.1,0,0.1,0.1,0.1,0.2c0,1.1,0,2.2-0.1,3.3c-0.1,1.1-0.2,2.2-0.3,3.2c-0.1,1.1-0.3,2.1-0.5,3.2
- c-0.2,1.1-0.4,2.1-0.8,3.2C38.8,90.1,38.8,90.1,38.6,90C38.7,90.1,38.6,90.1,38.6,90z"/>
- </g>
- <g>
- <polygon class="st0" points="41,99.2 30.3,99.2 29.2,83.2 42.1,83.2 "/>
- <g>
- <path class="st2" d="M41.2,99.2L41.2,99.2c-3.5,0.2-7.2,0.3-10.9,0.4c-0.2,0-0.4-0.2-0.5-0.4l0,0c-0.4-5.3-0.8-10.6-1.2-15.9
- c0-0.3,0.2-0.6,0.5-0.6l0,0l0,0c4.3-0.1,8.6,0,12.9,0l0,0c0.3,0,0.5,0.2,0.5,0.5l0,0C42.2,88.7,41.7,94,41.2,99.2z M40.9,99.1
- L40.9,99.1c0.2-5.5,0.5-10.7,0.7-15.9l0.5,0.5c-4.3,0-8.6,0.1-12.9,0l0.5-0.6c0.3,5.3,0.7,10.6,1,15.9l-0.5-0.4
- C33.7,98.8,37.2,98.9,40.9,99.1z"/>
- </g>
- </g>
- <path class="st1" d="M33.1,72.2L33.1,72.2c-0.3,0.3-0.8,0.4-1.1,0.1h0c-0.3-0.3-0.2-0.9-0.1-1.1c0.1-0.2,0.5-0.9,0.5-0.9
- s0.4,0.4,0.6,0.8C33.2,71.5,33.3,71.8,33.1,72.2z"/>
- <path class="st2" d="M36.5,75L36.5,75c-0.3,0.3-0.8,0.4-1.1,0.1l0,0c-0.3-0.3-0.2-0.9-0.1-1.1c0.1-0.2,0.5-0.9,0.5-0.9
- s0.4,0.4,0.6,0.8C36.7,74.3,36.8,74.6,36.5,75z"/>
- <path class="st2" d="M41.1,76.3L41.1,76.3c-0.3,0.3-0.8,0.2-1.1-0.1l0,0c-0.3-0.3,0-0.9,0.1-1.1c0.2-0.2,0.6-0.8,0.6-0.8
- s0.3,0.5,0.5,0.9C41.3,75.6,41.4,76,41.1,76.3z"/>
-</g>
-<g>
- <line class="st0" x1="227.7" y1="99.1" x2="208.2" y2="99.1"/>
- <path class="st1" d="M227.7,99.2c-1.6,0.3-3.3,0.4-4.9,0.4c-1.6,0-3.3,0.1-4.9,0.1c-3.3-0.1-6.5,0-9.8-0.4c-0.1,0-0.2-0.1-0.2-0.2
- c0-0.1,0.1-0.2,0.2-0.2c3.3-0.3,6.5-0.3,9.8-0.4c1.6,0,3.3,0,4.9,0.1c1.6,0,3.3,0.1,4.9,0.4C227.7,99,227.8,99,227.7,99.2
- C227.8,99.1,227.7,99.2,227.7,99.2z"/>
-</g>
-<g>
- <line class="st0" x1="220.8" y1="138.1" x2="220.8" y2="99.1"/>
- <path class="st2" d="M220.7,138.1c-0.3-3.2-0.3-6.5-0.4-9.7l-0.1-9.7c0.1-6.5,0-13,0.4-19.5c0-0.1,0.1-0.2,0.2-0.2
- c0.1,0,0.2,0.1,0.2,0.2c0.3,6.5,0.3,13,0.4,19.5l-0.1,9.7c-0.1,3.2-0.1,6.5-0.4,9.7C220.8,138.1,220.8,138.1,220.7,138.1
- C220.7,138.1,220.7,138.1,220.7,138.1z"/>
-</g>
-<g>
- <g>
- <rect x="20.9" y="60.9" class="st0" width="3.8" height="22.5"/>
- <path class="st0" d="M25.7,60.9H14.6v0c0-1.2,0.7-2.2,1.7-2.7c1.9-0.9,5.3-2.1,9.3-2.1V60.9z"/>
- <path class="st0" d="M29,60.9h-1.8v-4.8H29c0.6,0,1,0.5,1,1v2.8C30,60.5,29.6,60.9,29,60.9z"/>
- </g>
- <g>
- <path class="st2" d="M24.9,83.5L24.9,83.5c-1.3,0.1-2.6,0.2-4,0.3c-0.2,0-0.3-0.1-0.3-0.3l0,0c-0.2-3.7-0.2-7.5-0.3-11.2
- l-0.1-11.2c0-0.4,0.3-0.6,0.6-0.6h0l3.8,0l0,0c0.3,0,0.6,0.3,0.6,0.6l0,0c0,3.8,0,7.7-0.1,11.4L24.9,83.5z M24.5,83.3L24.5,83.3
- L24.2,72c-0.1-3.7-0.1-7.4-0.1-11l0.6,0.6l-3.8,0l0.6-0.6l-0.1,11.2c0,3.7-0.1,7.5-0.3,11.2l-0.3-0.3
- C22.1,83.1,23.3,83.2,24.5,83.3z"/>
- <path class="st2" d="M25.8,61L25.8,61c-1.9,0.2-3.9,0.3-6,0.4c-1,0-2.1,0.1-3.1,0.1l-1.6,0l-0.4,0l-0.1,0l0,0h0
- c-1.3-1.3-0.4-0.4-0.6-0.6l0,0l0,0l0-0.2c0-0.3,0.1-0.6,0.2-0.9c0.2-0.6,0.5-1.1,1-1.5c0.2-0.2,0.5-0.4,0.7-0.5
- c0.3-0.1,0.5-0.2,0.7-0.3c1-0.4,1.9-0.7,2.9-1c2-0.5,4-0.8,6.1-0.8l0,0c0.3,0,0.4,0.2,0.4,0.5C26.1,57.8,25.9,59.5,25.8,61z
- M25.5,60.8L25.5,60.8c-0.1-1.7-0.3-3.2-0.3-4.7l0.5,0.5c-2,0.1-3.9,0.4-5.8,1c-0.9,0.3-1.9,0.6-2.7,1c-0.5,0.2-0.8,0.4-1.1,0.6
- c-0.3,0.3-0.5,0.6-0.7,1c-0.1,0.2-0.1,0.4-0.1,0.6l0,0.1l0,0l0,0c-0.3-0.3,0.6,0.6-0.6-0.6l0,0l0,0l0.1,0l0.4,0l1.4,0
- c1,0,1.9,0,2.9,0.1C21.4,60.5,23.4,60.7,25.5,60.8z"/>
- <path class="st2" d="M29,61c-0.6,0.1-1.2,0.3-1.8,0.3c-0.2,0-0.4-0.1-0.4-0.3l0-0.1c-0.1-0.8-0.1-1.6-0.2-2.4c0-0.8,0-1.6-0.1-2.4
- c0-0.4,0.3-0.6,0.6-0.6h0l1,0l0.5,0c0.2,0,0.3,0,0.6,0c0.5,0.1,1,0.4,1.2,0.9c0.1,0.2,0.2,0.5,0.2,0.7l0,0.5
- c0,0.6-0.1,1.3-0.1,1.9c0,0.2,0,0.3-0.1,0.5c0,0.2-0.1,0.4-0.3,0.6c-0.3,0.3-0.7,0.5-1.1,0.5V61z M29,60.7c0.3,0,0.5-0.2,0.6-0.4
- c0.1-0.2,0.1-0.4,0-0.7c-0.1-0.6-0.1-1.3-0.1-1.9l0-0.5c0-0.1,0-0.1-0.1-0.2c-0.1-0.1-0.2-0.2-0.3-0.2l-1.9,0l0.6-0.6
- c0,0.8,0,1.6-0.1,2.4c0,0.8-0.1,1.6-0.2,2.4l-0.4-0.4c0.6,0.1,1.2,0.2,1.8,0.3V60.7z"/>
- </g>
-</g>
-<g>
- <line class="st0" x1="0.2" y1="99.1" x2="55.2" y2="99.1"/>
- <path class="st1" d="M0.2,99c4.6-0.3,9.2-0.3,13.8-0.4l13.8-0.1c9.2,0.1,18.3,0,27.5,0.4c0.1,0,0.2,0.1,0.2,0.2
- c0,0.1-0.1,0.2-0.2,0.2c-9.2,0.3-18.3,0.3-27.5,0.4L14,99.6c-4.6-0.1-9.2-0.1-13.8-0.4C0.1,99.2,0.1,99.1,0.2,99
- C0.1,99,0.1,99,0.2,99z"/>
-</g>
-<g>
- <polyline class="st0" points="51.2,108.1 51.2,118.6 16.7,118.6 16.7,108.1 "/>
- <path class="st2" d="M51.3,108.1c0.2,3.5,0.3,7,0.4,10.5c0,0.2-0.2,0.4-0.4,0.4l0,0c-2.9,0.1-5.8,0.1-8.6,0.1l-8.6,0
- c-5.8,0-11.5,0-17.3-0.1l0,0c-0.2,0-0.4-0.2-0.4-0.4c0-3.5,0.1-7,0.2-10.5c0-0.1,0.1-0.2,0.2-0.2c0.1,0,0.2,0.1,0.2,0.2
- c0.1,3.5,0.2,7,0.2,10.5l-0.4-0.4c5.8-0.1,11.5-0.1,17.3-0.1l8.6,0c2.9,0,5.8,0,8.6,0.1l-0.5,0.5c0-3.5,0.2-7,0.4-10.5
- C51.1,108,51.2,108,51.3,108.1C51.3,108,51.3,108,51.3,108.1z"/>
-</g>
-<path class="st3" d="M58,45.8c0.8,0,1.1-0.1,1.9-0.4c3.2-1.1,4.7-3.8,4.6-6.9c0-0.9,1.5-1.5,1.2-2.4c-0.4-1.2-2.5-1.1-3.5-3.3
- c-1.2-2.5-4.3-3.2-7.2-2.2c-4.1,1.4-6.3,5.8-4.9,9.9"/>
-<path class="st4" d="M57.1,36.1c1.1,2.8,0.9,7.6-2.1,8.7c-2.9,1.1-5-4.3-5-4.3L57.1,36.1z"/>
-<path class="st5" d="M48.9,77.3c-2.6,19.8-0.4,62-0.4,62h9.7l0.9-35.4"/>
-<path class="st5" d="M48.5,138.3c2.9,0.1,11.8,0.7,13.2,1.1s1.4,0.7-0.2,1c-1.6,0.4-13,0-13,0V138.3z"/>
-<g>
- <path class="st6" d="M64.7,76.9c0,0,1.1,15,1.6,30.4c0.4,12.9-1.1,26.5-1,32H54.8c0.1-31.5-6.1-44.6-5.8-62"/>
-</g>
-<g>
- <path class="st6" d="M48.1,55.5c-1.2,10.8,0.8,21.8,0.8,21.8l15.9-0.4l-0.2-9.8l-3.7-2l4.5-8.7l-3-3.1l-4.5-4.7
- C53.2,47.5,48.6,50.7,48.1,55.5z"/>
-</g>
-<polygon class="st7" points="59.4,64.4 60.2,116.1 66.8,116.1 65.8,67.5 "/>
-<path class="st3" d="M57.6,62.2c6.3,5.4,12.4,7,14.9,4.8c3.8-3.2-3-15.8-3.4-17.6c-1.6-6.4-5.1-6.4-6-5.7c-0.9,0.7,0.9,4.7,0.9,4.7
- l1.6,8.5"/>
-<line class="st8" x1="61.9" y1="53.6" x2="67.7" y2="59.1"/>
-<g>
- <path class="st6" d="M54.8,138.3c2.9,0.1,11.8,0.7,13.2,1.1c1.3,0.5,1.4,1.2-0.2,1.6c-1.6,0.4-13,0-13,0V138.3z"/>
-</g>
-<polygon class="st8" points="59.3,46 58.4,48.6 57.8,45.9 "/>
-<path class="st9" d="M62.1,76.6c-4.8,2.1-14.2,1-14.2,1"/>
-<path class="st10" d="M67.6,91c-1.6,0.3-3.5,0.2-5.4-0.1"/>
-<path class="st9" d="M54.3,48.9c2.5-0.9-2.9-3.8-3.3-1.8S52.2,49.6,54.3,48.9z"/>
-<path class="st9" d="M55.5,48.5c0,0,3.1,0.4,4.7,2"/>
-<line class="st9" x1="49.5" y1="41.2" x2="65.1" y2="30.6"/>
-<path class="st8" d="M62.6,41c0.7,0.1,1.3-0.2,1.3-0.2"/>
-<path class="st11" d="M61.9,37.7L61.9,37.7c-0.2,0-0.5-0.1-0.5-0.4l-0.1-0.7c0-0.2,0.1-0.5,0.4-0.5h0c0.2,0,0.5,0.1,0.5,0.4l0.1,0.7
- C62.3,37.4,62.1,37.7,61.9,37.7z"/>
-<g>
- <g>
- <line class="st0" x1="172.7" y1="63" x2="171.5" y2="63"/>
- <path class="st2" d="M172.7,63.1c-0.1,0.2-0.2,0.3-0.3,0.3c-0.1,0-0.2,0.1-0.3,0.1c-0.2-0.1-0.4,0-0.6-0.3c-0.1-0.1-0.1-0.2,0-0.3
- c0.2-0.3,0.4-0.3,0.6-0.3c0.1,0,0.2,0,0.3,0.1c0.1,0,0.2,0.1,0.3,0.3C172.7,63,172.7,63,172.7,63.1z"/>
- </g>
- <g>
- <line class="st0" x1="172.7" y1="69.1" x2="171.5" y2="69.1"/>
- <path class="st2" d="M172.7,69.2c-0.1,0.2-0.2,0.3-0.3,0.3c-0.1,0-0.2,0.1-0.3,0.1c-0.2-0.1-0.4,0-0.6-0.3c-0.1-0.1-0.1-0.2,0-0.3
- c0.2-0.3,0.4-0.3,0.6-0.3c0.1,0,0.2,0,0.3,0.1c0.1,0,0.2,0.1,0.3,0.3C172.7,69.1,172.7,69.1,172.7,69.2z"/>
- </g>
- <g>
- <line class="st0" x1="172.7" y1="71.3" x2="171.5" y2="71.3"/>
- <path class="st2" d="M172.7,71.4c-0.1,0.2-0.2,0.3-0.3,0.3c-0.1,0-0.2,0.1-0.3,0.1c-0.2-0.1-0.4,0-0.6-0.3c-0.1-0.1-0.1-0.2,0-0.3
- c0.2-0.3,0.4-0.3,0.6-0.3c0.1,0,0.2,0,0.3,0.1c0.1,0,0.2,0.1,0.3,0.3C172.7,71.3,172.7,71.3,172.7,71.4z"/>
- </g>
- <g>
- <line class="st0" x1="172.7" y1="77.6" x2="171.5" y2="77.6"/>
- <path class="st2" d="M172.7,77.7c-0.1,0.2-0.2,0.3-0.3,0.3c-0.1,0-0.2,0.1-0.3,0.1c-0.2-0.1-0.4,0-0.6-0.3c-0.1-0.1-0.1-0.2,0-0.3
- c0.2-0.3,0.4-0.3,0.6-0.3c0.1,0,0.2,0,0.3,0.1c0.1,0,0.2,0.1,0.3,0.3C172.7,77.6,172.7,77.7,172.7,77.7z"/>
- </g>
- <g>
- <line class="st0" x1="172.7" y1="83.7" x2="171.5" y2="83.7"/>
- <path class="st2" d="M172.7,83.8c-0.1,0.2-0.2,0.3-0.3,0.3c-0.1,0-0.2,0.1-0.3,0.1c-0.2-0.1-0.4,0-0.6-0.3c-0.1-0.1-0.1-0.2,0-0.3
- c0.2-0.3,0.4-0.3,0.6-0.3c0.1,0,0.2,0,0.3,0.1c0.1,0,0.2,0.1,0.3,0.3C172.7,83.7,172.7,83.7,172.7,83.8z"/>
- </g>
- <g>
- <line class="st0" x1="172.7" y1="89.4" x2="171.5" y2="89.4"/>
- <path class="st2" d="M172.7,89.5c-0.1,0.2-0.2,0.3-0.3,0.3c-0.1,0-0.2,0.1-0.3,0.1c-0.2-0.1-0.4,0-0.6-0.3c-0.1-0.1-0.1-0.2,0-0.3
- c0.2-0.3,0.4-0.3,0.6-0.3c0.1,0,0.2,0,0.3,0.1c0.1,0,0.2,0.1,0.3,0.3C172.7,89.4,172.7,89.4,172.7,89.5z"/>
- </g>
-</g>
-<g>
- <line class="st0" x1="30.9" y1="111.5" x2="37" y2="111.5"/>
- <path class="st2" d="M30.9,111.4c0.5-0.3,1-0.4,1.5-0.4c0.5,0,1-0.1,1.5-0.1c0.5,0,1,0,1.5,0.1c0.5,0,1,0.1,1.5,0.3
- c0.1,0,0.2,0.2,0.1,0.3c0,0.1-0.1,0.1-0.1,0.1c-0.5,0.2-1,0.2-1.5,0.3c-0.5,0-1,0.1-1.5,0.1c-0.5,0-1,0-1.5-0.1
- c-0.5,0-1-0.1-1.5-0.4C30.8,111.5,30.8,111.5,30.9,111.4C30.8,111.4,30.9,111.4,30.9,111.4z"/>
-</g>
-<g>
- <path class="st2" d="M0.2,142.1c19-0.6,37.9-0.7,56.9-0.8l56.9-0.1c37.9,0.1,75.8,0.1,113.7,0.7c0.2,0,0.4,0.2,0.4,0.4
- c0,0.2-0.2,0.4-0.4,0.4c-37.9,0.7-75.8,0.6-113.7,0.7l-56.9-0.1c-19-0.1-37.9-0.3-56.9-0.8c-0.1,0-0.2-0.1-0.2-0.2
- C0,142.2,0.1,142.1,0.2,142.1z"/>
-</g>
-<g>
- <g>
- <path class="st0" d="M69.8,22.2l-0.2-7.8V9.2c0-4.5,3.7-8.2,8.2-8.2H199c4.5,0,8.2,3.7,8.2,8.2v13"/>
- <g>
- <line class="st12" x1="69.8" y1="22.2" x2="69.7" y2="19.7"/>
- <path class="st13" d="M69.6,14.6l0-0.2V9.2c0-4.5,3.7-8.2,8.2-8.2H199c4.5,0,8.2,3.7,8.2,8.2v7.9"/>
- <line class="st12" x1="207.2" y1="19.7" x2="207.2" y2="22.2"/>
- </g>
- </g>
- <g>
- <line class="st0" x1="214" y1="23.2" x2="62.7" y2="23.2"/>
- <path class="st1" d="M214,23.4c-12.6,0.8-25.2,0.8-37.8,0.8l-37.8,0.1l-37.8-0.1c-12.6,0-25.2,0-37.8-0.8v-0.5
- c12.6-0.8,25.2-0.8,37.8-0.8l37.8-0.1l37.8,0.1c12.6,0,25.2,0,37.8,0.8V23.4z"/>
- </g>
- <rect x="86.8" y="65" class="st0" width="57.4" height="36.9"/>
- <g>
- <path class="st0" d="M144.2,54.4H86.8v-8.2c0-5.9,4.8-10.7,10.7-10.7h46.7V54.4z"/>
- </g>
- <path class="st0" d="M135.2,73.3c-7,0-9.4,3.2-10.9,5.9c-1.4,2.5-4.5,5.9-9.3,7.2c-4.8,1.3-6.8,4.1-6.8,6.8h27.2L135.2,73.3z"/>
- <polygon class="st14" points="72.8,127.8 72.8,31.7 210.4,31.7 210.4,127.8 107.4,127.8 "/>
- <g>
- <g>
- <polyline class="st15" points="144.6,105.6 144.6,108.1 142.1,108.1 "/>
- <line class="st16" x1="137.5" y1="108.1" x2="93.7" y2="108.1"/>
- <polyline class="st15" points="91.4,108.1 88.9,108.1 88.9,105.6 "/>
- <line class="st17" x1="88.9" y1="100.3" x2="88.9" y2="60.8"/>
- <polyline class="st15" points="88.9,58.2 88.9,55.7 91.4,55.7 "/>
- <line class="st16" x1="96" y1="55.7" x2="139.8" y2="55.7"/>
- <polyline class="st15" points="142.1,55.7 144.6,55.7 144.6,58.2 "/>
- <line class="st17" x1="144.6" y1="63.4" x2="144.6" y2="102.9"/>
- </g>
- </g>
- <path class="st0" d="M141.3,81.4H97.6v-9.9h51.9v1.7C149.5,77.7,145.8,81.4,141.3,81.4z"/>
- <path class="st18" d="M121.8,99.8H97.6v-9.9H130v1.7C130,96.1,126.3,99.8,121.8,99.8z"/>
- <g>
- <path class="st6" d="M198.4,118.7h-39.7V90.8c0-3.9,3.1-7,7-7h32.7V118.7z"/>
- <g>
- <g>
- <path class="st0" d="M217.7,74.7h-42V41.1h36.1c3.2,0,5.8,2.6,5.8,5.8V74.7z"/>
- <g>
- <polyline class="st12" points="217.7,72.2 217.7,74.7 215.2,74.7 "/>
- <line class="st19" x1="209.9" y1="74.7" x2="180.9" y2="74.7"/>
- <polyline class="st12" points="178.3,74.7 175.8,74.7 175.8,72.2 "/>
- <line class="st20" x1="175.8" y1="66.5" x2="175.8" y2="46.5"/>
- <polyline class="st12" points="175.8,43.6 175.8,41.1 178.3,41.1 "/>
- <path class="st21" d="M183.5,41.1h28.4c3.2,0,5.8,2.6,5.8,5.8v22.7"/>
- </g>
- </g>
- <g>
- <line class="st0" x1="175.6" y1="41.3" x2="216.6" y2="74.3"/>
- <g>
- <line class="st12" x1="175.6" y1="41.3" x2="177.5" y2="42.9"/>
- <line class="st22" x1="181.7" y1="46.2" x2="212.6" y2="71.1"/>
- <line class="st12" x1="214.6" y1="72.7" x2="216.6" y2="74.3"/>
- </g>
- </g>
- </g>
- </g>
- <circle class="st14" cx="84.8" cy="11.6" r="2"/>
- <circle class="st14" cx="95.5" cy="11.6" r="2"/>
- <circle class="st14" cx="106.3" cy="11.6" r="2"/>
-</g>
-</svg>
diff --git a/plugins/jetpack/images/customize-theme.svg b/plugins/jetpack/images/customize-theme.svg
deleted file mode 100644
index 979e34b1..00000000
--- a/plugins/jetpack/images/customize-theme.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg id="customizeTheme" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 596.8 370"><style>.st0{fill:none}.st1{fill:#F6F6F6}.st2{fill:#00be28}.st3{fill:#D8DEE4}.st4{fill:#E1E2E2}.st5{fill:#B0B5B8}.st6{fill:#6F93AD}.st7{fill:#204A69}.st8{fill:#204A69}.st9{fill:#BBC9D5}.st10{opacity:.26;fill:#969CA1;enable-background:new}.st11{fill:#CCCED0}.st12{fill:#F6F6F6}</style><title>customizeTheme</title><path class="st0" d="M391.8 161.5v116.2h71.4V154.1h-64c-4.1 0-7.4 3.3-7.4 7.4z"/><path class="st1" d="M358.1 82V56.6H280c.5.9 1.1 1.9 1.5 2.9 8.8 18.5 1 40.7-17.5 49.6l-.4.2-.6.3c-1.5.7-3.1 1.2-4.7 1.7l-.7.2c-.3.1-.6.1-.9.2-.4.1-.9.2-1.3.3-.8-1.4-1-4.8-1.1-6.8-.2-3.3-.3-5.1-1.7-5.6-2.1-.8-4.8 1.3-6.6 5.2-1.1 2.4-1.7 5.1-1.6 7.8-20.5-2-35.4-20.3-33.4-40.7.4-4.3 1.6-8.4 3.4-12.3.5-1 1-1.9 1.5-2.9h-81.2v131.9c11.7.2 34.8-4.1 35.1 6.8v-39.2h151v46.6c12-.1 24.1 2.8 36.1.8.5-.1 1 .2 1.1.7 1.2 7 5.8 70.6 6.3 76.9.4 5.7 1.4 11.3.2 17.1-.1.4-.5.7-1 .7-4.3.2-8.6.8-12.9.8-4 0-19.4-.4-20.5-.8-1.4-.5-8 1.1-11.4 1.3-3.2.2-16.1 1.1-19.2 1.1-4 .1-8.1 0-8.2-3.9-.1-2.1-2.1-17.6-1.8-19.8H170.9c0 .5-24.5-.1-36.3-.2v34.8h353V82H358.1zm105.1 195.6h-71.4V161.5c0-4.1 3.3-7.4 7.4-7.4h64v123.5z"/><path class="st2" d="M281.5 59.4c-.5-1-1-1.9-1.5-2.9-.4-.7-.9-1.5-1.4-2.2-11.6-17-34.8-21.3-51.8-9.7-3.8 2.6-7.1 5.9-9.7 9.7-.5.7-.9 1.4-1.4 2.2-.5.9-1.1 1.9-1.5 2.9-8.8 18.6-.9 40.8 17.7 49.6 3.9 1.8 8 3 12.3 3.4-.1-2.7.5-5.3 1.6-7.8 1.8-3.9 4.5-6.1 6.6-5.2 1.3.5 1.4 2.3 1.7 5.6.1 2 .4 5.5 1.1 6.8.4-.1.9-.2 1.3-.3.3-.1.6-.1.9-.2l.7-.2c1.6-.5 3.2-1 4.7-1.7l.6-.3.4-.2c18.7-8.8 26.5-30.9 17.7-49.5z"/><path class="st0" d="M463.1 154.4h-64c-4.1 0-7.4 3.3-7.4 7.4V278h71.4V154.4z"/><path class="st3" d="M358 27.2V82.3h149.3V27.2z"/><path class="st1" d="M144.9 242.9l19.9-.1 1.4 15.8-16.2-1.5c.1 0-6.4-1.3-5.1-14.2z"/><path class="st4" d="M140.8 59.4h-6.4c-1.4 0-2.6-1.1-2.6-2.6v-6.4c0-1.4 1.1-2.6 2.6-2.6 1.4 0 2.6 1.1 2.6 2.6v3.8h3.8c1.4 0 2.6 1.1 2.6 2.6-.1 1.5-1.2 2.6-2.6 2.6zM134.3 40c-1.4 0-2.6-1.1-2.6-2.6v-13c0-1.4 1.1-2.6 2.6-2.6 1.4 0 2.6 1.1 2.6 2.6v13.1c0 1.3-1.1 2.5-2.6 2.5zm3.5-25.4c-1.4 0-2.6-1.1-2.6-2.6 0-.5.1-1 .4-1.4 2.7-4.1 6.6-7.3 11.2-9 1.3-.5 2.8.2 3.3 1.5s-.2 2.8-1.5 3.3c-3.6 1.4-6.7 3.9-8.8 7.1-.3.6-1.1 1.1-2 1.1zm346.1-.1c-.9 0-1.7-.4-2.1-1.1-2.1-3.2-5.2-5.7-8.8-7-1.3-.5-2-2-1.5-3.3s2-2 3.3-1.5c4.6 1.7 8.5 4.9 11.3 9 .8 1.2.5 2.8-.7 3.6-.5.1-1 .3-1.5.3zM461 5.1h-13.1c-1.4 0-2.6-1.1-2.6-2.6 0-1.4 1.1-2.6 2.6-2.6H461c1.4 0 2.6 1.1 2.6 2.6-.1 1.5-1.2 2.6-2.6 2.6zm-26.1 0h-13.1c-1.4 0-2.6-1.1-2.6-2.6 0-1.4 1.1-2.6 2.6-2.6h13c1.4 0 2.6 1.1 2.6 2.6s-1.1 2.6-2.5 2.6zm-26.1 0h-13.1c-1.4 0-2.6-1.1-2.6-2.6 0-1.4 1.1-2.6 2.6-2.6h13.1c1.4 0 2.6 1.1 2.6 2.6-.1 1.5-1.2 2.6-2.6 2.6zm-26.1 0h-13.1c-1.4 0-2.6-1.1-2.6-2.6 0-1.4 1.1-2.6 2.6-2.6h13.1c1.4 0 2.6 1.1 2.6 2.6-.1 1.5-1.2 2.6-2.6 2.6zm-26.2 0h-13.1c-1.4 0-2.6-1.1-2.6-2.6 0-1.4 1.1-2.6 2.6-2.6h13c1.4 0 2.6 1.1 2.6 2.6.1 1.5-1.1 2.6-2.5 2.6zm-26.1 0h-13.1c-1.4 0-2.6-1.1-2.6-2.6 0-1.4 1.1-2.6 2.6-2.6h13.1c1.4 0 2.6 1.1 2.6 2.6s-1.1 2.6-2.6 2.6zm-26.1 0h-13.1c-1.4 0-2.6-1.1-2.6-2.6 0-1.4 1.1-2.6 2.6-2.6h13.1c1.4 0 2.6 1.1 2.6 2.6s-1.2 2.6-2.6 2.6zm-26.1 0h-13.1c-1.4 0-2.6-1.1-2.6-2.6 0-1.4 1.1-2.6 2.6-2.6h13.1c1.4 0 2.6 1.1 2.6 2.6s-1.2 2.6-2.6 2.6zm-26.1 0H239c-1.4 0-2.6-1.1-2.6-2.6 0-1.4 1.1-2.6 2.6-2.6h13.1c1.4 0 2.6 1.1 2.6 2.6s-1.2 2.6-2.6 2.6zm-26.1 0h-13c-1.4 0-2.6-1.1-2.6-2.6 0-1.4 1.1-2.6 2.6-2.6h13c1.4 0 2.6 1.1 2.6 2.6s-1.2 2.6-2.6 2.6zm-26.1 0h-13.1c-1.4 0-2.6-1.1-2.6-2.6 0-1.4 1.1-2.6 2.6-2.6h13.1c1.4 0 2.6 1.1 2.6 2.6s-1.2 2.6-2.6 2.6zm-26.1 0h-13.1c-1.4 0-2.6-1.1-2.6-2.6 0-1.4 1.1-2.6 2.6-2.6h13.1c1.4 0 2.6 1.1 2.6 2.6s-1.2 2.6-2.6 2.6z"/><path class="st5" d="M320.5 299.2s-1.8 39.6-7.8 63.8l-35 .5s-2.8-1.8.9-3.7c3.9-2 14.4-4.1 15.5-6.4 2.3-4.6 1.4-51.7 1.4-51.7M334.2 300.4s1.8 37 7.8 61.3l30.6.5s2.8-1.8-.9-3.7c-3.9-2-14.4-4.1-15.5-6.4-2.3-4.6 4.5-54.3 4.5-54.3"/><path class="st0" d="M256.6 113.3s.8.7 1.1-2c-1.2.3-2.4.6-3.6.8.6 1.1 1.3 1.6 2.5 1.2z"/><path class="st5" d="M256.6 113.3c-1.2.4-2-.1-2.5-1.2-2.1.4-4.2.5-6.3.5-.8 0-1.5 0-2.2-.1.3 4.2 2.4 8.5 8.1 11.5l4.2 2.3 7-4.3c.7-5.8-.5-10-1.8-12.6-1.7.8-3.5 1.4-5.3 1.9-.4 2.7-1.2 2-1.2 2z"/><path class="st5" d="M254.1 112.1c-1.6-3.2-.9-11.2-2.1-11.7-2.3-.9-6.9 5.4-6.4 12.2.7 0 1.5.1 2.2.1 2.2 0 4.3-.2 6.3-.6z"/><path class="st6" d="M348.8 244.7c-.7 0-1.3-.6-1.2-1.3 0-.6.5-1.2 1.1-1.2l14.2-1.5c.7-.1 1.4.4 1.5 1.1.1.7-.4 1.4-1.1 1.5h-.1l-14.2 1.5-.2-.1z"/><path class="st6" d="M358.6 252.3c-2.4.1-4.8-.9-6.6-2.5-1.6-1.5-2.4-3.5-2.3-5.7 0-.7.6-1.2 1.2-1.2h.1c.7 0 1.2.6 1.2 1.4-.1 1.4.5 2.7 1.5 3.7 1.5 1.4 3.5 2 5.5 1.8l2.5-.7c.7-.2 1.4.2 1.6.9s-.2 1.4-.9 1.6l-2.7.7h-1.1z"/><path class="st7" d="M288 167.6c-.7 0-1.3-.6-1.3-1.3 0-.5.3-1 .8-1.2l11.1-5c.6-.3 1.4-.1 1.7.5.3.6.1 1.4-.5 1.7 0 0-.1 0-.1.1l-11.1 5c-.3.1-.5.2-.6.2z"/><path class="st0" d="M301.7 91.5c.1 1.5.5 2.7 1 3 .4.2.9 0 1.3-.3-.1-.6-.1-1.3-.1-1.9l-2.2-.8zM303.2 87.2c-.5.4-.9 1-1.1 1.7l2 .7c.1-.8.2-1.7.3-2.5-.1-.1-.3-.2-.4-.3-.3.1-.6.2-.8.4z"/><path class="st5" d="M314.7 104.7c-2.4-1.4-3.8-3.9-3.9-6.6l.4-3.5-4.6-1.5c.1 1.2.2 2.4.5 3.5 1.3 6.1 2.8 10.8 9.4 11.8.6.1 1 .5 1.1 1.1l.8 7c.1.7-.4 1.3-1.1 1.4h-.2c-.3 0-.6-.1-.8-.3v3.2l16 .9v-14.3c-.7.4-1.4.6-2.2.8-6.6 1.7-11.9-1.5-15.4-3.5zM328.5 94.7l-4.1-11.1s-5.5-3.1-10.6-2.7c2.6 6.1 8 12.1 14.7 13.8zM307.2 85.8c-.4 1.5-.6 3-.6 4.6l4.9 1.6.6-5.5s-3 .4-4.9-.7z"/><path class="st8" d="M338.2 93.9c-3.1 1.3-6.5 1.6-9.7.8-6.7-1.7-12.1-7.7-14.7-13.8-1.5-3.4-2.1-6.9-1.6-9.8-2.6 2-4.7 5.2-6.3 10.2-.1.3-.2.7-.3 1-.3.7-.5 1.4-.7 2.2-.5-.2-1-.2-1.5-.1-1.7.4-3.7 2.2-4.1 5.2-.3 2.5.1 5.8 2.2 7.1.5.3 1.1.5 1.7.5.5 0 1-.1 1.4-.3 0 .1 0 .2.1.3 1.3 6.3 3.1 12 10.6 13.7l.7 6.1c.1.6.6 1.1 1.3 1.1h.2c.7-.1 1.2-.7 1.1-1.4l-.8-7c-.1-.6-.5-1-1.1-1.1-6.7-1.1-8.2-5.8-9.4-11.8-.2-1.2-.4-2.3-.5-3.5l4.6 1.5-.4 3.5c0 2.7 1.5 5.2 3.9 6.6 3.5 2 8.7 5.2 15.4 3.6.8-.2 1.5-.4 2.2-.8 4.5-2.3 7.1-8.2 7.9-14.6-.8.2-1.5.5-2.2.8zm-35.4.6c-.5-.3-1-1.5-1-3l2.2.7c0 .6.1 1.3.1 1.9-.4.4-1 .6-1.3.4zm1.2-4.9l-2-.7c.2-.7.6-1.2 1.1-1.7.2-.2.5-.3.8-.4.1.1.2.2.4.3-.1.8-.2 1.6-.3 2.5zm7.5 2.5l-4.9-1.6c.1-1.5.3-3.1.6-4.6 1.9 1.1 4.9.7 4.9.7l-.6 5.5z"/><path class="st9" d="M316.2 65.8c-2.2 1-3.5 2.9-3.9 5.3-1.8 10.2 10.8 29.1 26 22.8.7-.3 1.4-.6 2-1 15-8.9-5.8-35.1-24.1-27.1z"/><path class="st10" d="M105.2 237.9h57.4c1.8 0 3.3-1.5 3.3-3.3v-.1l-1.6-38.2c-.1-1.3-1.1-2.4-2.5-2.3h-57.3l.8 38.9"/><path class="st11" d="M166 258.5c-1.1-6.1-1.6-12.2-2.1-18.4l-.3-4.6-.2-2.3v-.6-.8c.1-.7.3-1.3.7-1.8.8-.9 1.9-1.4 3.1-1.5H181c1.2 0 2.3.5 3.1 1.4.4.5.7 1.1.7 1.8l.1 1.2.1 2.3.2 4.6c.2 6.2.4 12.3.3 18.5 0 .3-.3.5-.5.5s-.4-.2-.5-.4c-.8-6.1-1.3-12.3-1.8-18.4l-.3-4.6-.2-2.3-.1-1.1c0-.1-.1-.2-.1-.3-.3-.3-.6-.4-1-.4h-13.8c-.4 0-.7.1-1 .4-.1.1-.1.2-.1.3v1l.1 2.3.2 4.6c.2 6.2.4 12.3 0 18.5 0 .1-.1.2-.3.2 0 .2-.1.1-.1-.1z"/><path class="st1" d="M180.3 251.4l-1-17h-10l.9 17z"/><path class="st0" d="M150.1 268.2h13.8"/><path class="st12" d="M150.1 267.9c1.1-.6 2.2-1 3.5-1 1.2-.1 2.3-.2 3.5-.2 1.1 0 2.3.1 3.5.2s2.3.4 3.5.8c.3.1.4.4.3.7-.1.1-.2.3-.3.3-1.1.4-2.3.7-3.5.8-1.1.1-2.3.2-3.5.2s-2.3 0-3.5-.2c-1.2-.1-2.4-.4-3.5-1-.1-.1-.2-.3-.1-.4 0-.1 0-.2.1-.2zM162.2 256.6c-6.6-.5-13.2-.6-19.7-.7l-9.9-.1h-7.4c-.7 0-1.3-.1-2-.3-2.6-.9-4.4-3.4-4.4-6.1l-.1-6.7c-.9 0-1.8-.1-2.6-.1l-.1 6.8c-.1 4 2.4 7.6 6.2 8.9.9.3 1.9.4 2.9.4h7.4l9.9-.1c6.6-.1 13.2-.3 19.7-.7.3 0 .5-.3.5-.6 0-.5-.2-.7-.4-.7z"/><path class="st12" d="M152.7 256.6c-3.3-.4-5.8-2.9-6.3-5.8-.2-1.3 0-3.3 0-5l.1-3.7h-2.9l.1 3.7c.1 1.8-.1 3.4.3 5.5.5 2 1.7 3.7 3.3 4.9 1.6 1.1 3.5 1.7 5.5 1.4.2 0 .4-.2.5-.5-.2-.2-.4-.5-.6-.5z"/><path class="st11" d="M165.1 241.3c-.7.2-1.4.3-2.1.3h-2c-10.8 0-21.6.2-32.4.3-11.6.2-23.3.4-34.9.8-.1 0-.3.1-.3.3 0 .1.1.3.3.3 11.6.4 23.3.6 34.9.8 11.6.1 23.3.3 34.9.3H163.8c.4 0 .9-.1 1.3-.2v-2.9z"/><path class="st11" d="M172.1 227.1l-.9-23.4-.2-5.8c-.1-1 0-1.8-.2-3.1-.5-3.6-3.3-6.5-6.9-7.1-.8-.1-1.6-.1-2.3-.1h-.3l-60.8.2h-3.8c-1.6-.1-3.1.5-4.3 1.5-1.2 1-1.9 2.5-2.1 4.1 0 1.5 0 2.6.1 3.9l.4 15.2c.2 10.1.6 20.3.9 30.4 0 .3.2.5.5.5s.5-.2.5-.5c0-10.1.1-20.3-.1-30.4l-.1-15.2v-3.7c.1-1 .6-1.9 1.3-2.5.8-.6 1.8-.9 2.8-.9h1.5l.6 21c.2 7.4.5 14.8.8 22.2 0 .3.2.5.5.5s.5-.2.5-.5c0-7.4 0-14.8-.1-22.2l-.2-21h.1l59.4.2h.8c.9 0 1.8 0 2.7.1 1.5.3 2.9 1.2 3.7 2.5.4.7.7 1.4.8 2.2.1.7.1 1.9.1 2.8l.3 5.8.5 11.7.5 11.7.1 2.3c.9 0 1.8 0 2.7.1l.2-2.5z"/><path class="st11" d="M166 258.5c-1.1-6.1-1.6-12.2-2.1-18.4l-.3-4.6-.2-2.3v-.6-.8c.1-.7.3-1.3.7-1.8.8-.9 1.9-1.4 3.1-1.5H181c1.2 0 2.3.5 3.1 1.4.4.5.7 1.1.7 1.8l.1 1.2.1 2.3.2 4.6c.2 6.2.4 12.3.3 18.5 0 .3-.3.5-.5.5s-.4-.2-.5-.4c-.8-6.1-1.3-12.3-1.8-18.4l-.3-4.6-.2-2.3-.1-1.1c0-.1-.1-.2-.1-.3-.3-.3-.6-.4-1-.4h-13.8c-.4 0-.7.1-1 .4-.1.1-.1.2-.1.3v1l.1 2.3.2 4.6c.2 6.2.4 12.3 0 18.5 0 .1-.1.2-.3.2 0 .2-.1.1-.1-.1z"/><path class="st1" d="M180.3 251.4l-1-17h-10l.9 17z"/><path class="st0" d="M150.1 268.2h13.8"/><path class="st12" d="M150.1 267.9c1.1-.6 2.2-1 3.5-1 1.2-.1 2.3-.2 3.5-.2 1.1 0 2.3.1 3.5.2s2.3.4 3.5.8c.3.1.4.4.3.7-.1.1-.2.3-.3.3-1.1.4-2.3.7-3.5.8-1.1.1-2.3.2-3.5.2s-2.3 0-3.5-.2c-1.2-.1-2.4-.4-3.5-1-.1-.1-.2-.3-.1-.4 0-.1 0-.2.1-.2zM.5 366.6c49.6-1.4 99.2-1.7 148.8-2.1l148.8-.3c99.2.3 198.4.1 297.7 1.9.6 0 1 .5 1 1.1 0 .5-.4.9-1 1-99.2 1.7-198.4 1.6-297.7 1.9l-148.8-.3c-49.6-.4-99.2-.6-148.8-2.1-.3 0-.5-.2-.5-.5 0-.4.2-.6.5-.6z"/><path class="st7" d="M296.1 350.4c-.7 0-1.3-.6-1.3-1.3 0-.1 0-.2.1-.4 1.9-6.1 1.1-18.6.3-30.6-.4-5.9-.8-11.5-.8-16.4 0-.7.6-1.3 1.3-1.3.7 0 1.3.6 1.3 1.3.1 4.8.4 10.3.8 16.2.8 12.3 1.6 24.9-.4 31.5-.3.7-.8 1-1.3 1zM341.9 363c-.6 0-1.2-.5-1.3-1.1 0-.3-4.6-31-7.8-61.3-.1-.7.4-1.4 1.1-1.5s1.4.4 1.5 1.1v.2c3.1 30.3 7.7 60.9 7.8 61.2.1.7-.4 1.4-1.1 1.5 0-.1-.1-.1-.2-.1z"/><path class="st4" d="M484.9 26.9v-2.6c0-1.4 1.1-2.6 2.6-2.6 1.4 0 2.6 1.1 2.6 2.6v2.8"/><path class="st5" d="M397.9 82.3v-.7c-1 .8-2.2 1.4-3.4 1.7 0 0 2.9-10.4-.2-11.1-3-.7-14.7 19.9-14.7 19.9l4.2 10.1s4.5-4.1 19.1-11.5c3.3-3.1 5.2-6 6.2-8.4h-11.2z"/><path class="st7" d="M391.7 97.7c-.7 0-1.3-.6-1.2-1.4 0-.7.6-1.2 1.2-1.2 1.4-.1 11.5-5.3 16.4-14.6.3-.6 1.1-.9 1.7-.6s.9 1.1.6 1.7v.1c-5.2 9.7-16.1 16-18.7 16zM383.8 89.5c-.7 0-1.3-.6-1.3-1.3 0-.4.2-.7.4-1 1.1-.9 2.8-4.4 4.3-7.5 3.1-6.2 4.5-8.8 6.3-9 .6-.1 1.3.2 1.7.7 1.8 2.1 1.3 7.1.8 10.1 1.1-.5 2.3-1.2 3-2.1.4-.6 1.2-.8 1.8-.4.6.4.8 1.2.4 1.8 0 0 0 .1-.1.1-2 2.8-6.3 3.7-6.4 3.8-.7.2-1.4-.3-1.5-1v-.5c.6-2.9 1.1-7.6.4-9.5-1 1.2-2.8 4.8-4 7.3-1.8 3.6-3.5 7-4.9 8.3-.3 0-.6.2-.9.2z"/><path class="st0" d="M255.6 112.4c.1 0 .2.1.5 0 .2-.1.3-.4.4-.8-.4.1-.9.2-1.3.3.1.2.2.4.4.5zM252 100.4c1.2.5.5 8.5 2.1 11.7.4-.1.7-.1 1.1-.2-.8-1.4-1-4.8-1.1-6.8-.2-3.3-.3-5.1-1.7-5.6-2.1-.8-4.8 1.3-6.6 5.2-1.1 2.4-1.7 5.1-1.6 7.8.5 0 .9.1 1.4.1-.4-6.8 4.2-13.1 6.4-12.2z"/><path class="st0" d="M255.6 112.4c.1 0 .2.1.5 0 .2-.1.3-.4.4-.8-.4.1-.9.2-1.3.3.1.2.2.4.4.5z"/><path class="st0" d="M255.6 112.4c.1 0 .2.1.5 0 .2-.1.3-.4.4-.8-.4.1-.9.2-1.3.3.1.2.2.4.4.5zM256.5 111.6l.9-.2c-.3.1-.6.2-.9.2zM263.9 109l-.4.2.4-.2z"/><path class="st4" d="M166 54.3h-12.6c-1.4 0-2.6 1.1-2.6 2.6 0 1.4 1.1 2.6 2.6 2.6H166c1.4 0 2.6-1.1 2.6-2.6-.1-1.4-1.2-2.6-2.6-2.6zM191.2 54.3h-12.6c-1.4 0-2.6 1.1-2.6 2.6 0 1.4 1.1 2.6 2.6 2.6h12.6c1.4 0 2.6-1.1 2.6-2.6-.1-1.4-1.2-2.6-2.6-2.6zM317.2 54.3h-12.6c-1.4 0-2.6 1.1-2.6 2.6 0 1.4 1.1 2.6 2.6 2.6h12.6c1.4 0 2.6-1.1 2.6-2.6 0-1.4-1.2-2.6-2.6-2.6zM355 54.3c-1.4 0-2.6 1.1-2.6 2.6 0 1.4 1.1 2.6 2.6 2.6h3.1v-5.1l-3.1-.1zM342.4 52.1h-12.6c-1.4 0-2.6 1.1-2.6 2.6 0 1.4 1.1 2.6 2.6 2.6h12.6c1.4 0 2.6-1.1 2.6-2.6-.1-1.4-1.2-2.6-2.6-2.6zM216.4 54.3h-12.6c-1.4 0-2.6 1.1-2.6 2.6 0 1.4 1.1 2.6 2.6 2.6h10.5c.8-1.7 1.8-3.4 2.9-5-.3-.2-.6-.2-.8-.2zM292 54.3h-12.6c-.3 0-.5 0-.8.1 1.1 1.6 2.1 3.3 2.9 5H292c1.4 0 2.6-1.1 2.6-2.6-.1-1.3-1.2-2.5-2.6-2.5z"/><path class="st0" d="M255.6 112.4c.1 0 .2.1.5 0 .2-.1.3-.4.4-.8-.4.1-.9.2-1.3.3.1.2.2.4.4.5z"/><path class="st7" d="M257.4 111.4l-.9.2c-.1.4-.2.7-.4.8-.4.1-.5 0-.5 0-.2-.1-.3-.3-.4-.5-.8-1.4-1-4.8-1.1-6.8-.2-3.3-.3-5.1-1.7-5.6-2.1-.8-4.8 1.3-6.6 5.2-1.1 2.4-1.7 5.1-1.6 7.8.1 4.8 2.5 9.7 8.9 13 .2.1.4.1.6.1.7 0 1.3-.6 1.3-1.3 0-.5-.3-.9-.7-1.1-9.1-4.8-7.8-12.5-6.8-15.7 1.1-3.4 2.9-5.3 3.7-5.6.2 1.1.3 2.2.3 3.3.2 3.7.5 7.8 2.6 9.3.8.5 1.8.6 2.8.3 1.9-.6 2.2-2.1 2.2-3.9-.2.1-.6.2-1 .3l-.4.1-.3.1z"/><path class="st7" d="M257.7 111.3l.4-.1-.7.2.3-.1zM263.1 109.4l-.2.1c-.5.2-1 .4-1.3.5 1.2 2.9 1.8 6 1.8 9.2 0 .7.6 1.3 1.3 1.3.7 0 1.3-.6 1.3-1.3.1-3.5-.6-7-2-10.2l-.4.2-.5.2z"/><path class="st7" d="M263.5 109.2l-.6.3.2-.1.4-.2z"/><path class="st6" d="M301.9 303.2c-4.4 0-8.3-.5-10.4-2.2-1.1-.8-1.7-2-1.8-3.3-.1-1.1-.2-2.8-.4-4.9-1.1-13-3.8-43.6 1.7-78.3.1-.7.8-1.2 1.5-1 .7.1 1.1.7 1 1.4-5.5 34.4-2.8 64.7-1.7 77.7.2 2.2.3 3.9.4 5 0 .6.3 1.1.8 1.4 4.4 3.4 22.1.6 28.6-.7.7-.1 1.4.4 1.5 1.1s-.3 1.3-.9 1.5c-1.7.2-11.8 2.3-20.3 2.3zM338.6 301.3c-4.8 0-8.8-.4-10.6-1.6-4-2.6-3.2-38.8-2.7-54.2 0-.7.5-1.2 1.2-1.2h.1c.7 0 1.3.6 1.2 1.3-.8 23.8-.4 49.8 1.6 52 3.5 2.3 22.2.7 34-1l-2.2-39.1c0-.7.5-1.3 1.2-1.4s1.3.4 1.3 1.1v.1l2.3 40.3c0 .7-.4 1.2-1.1 1.3-2 .4-15.9 2.4-26.3 2.4zM360.8 237.7c-.7 0-1.2-.5-1.3-1.2l-2.7-33.8c-.1-.7.5-1.3 1.2-1.4.7-.1 1.3.5 1.4 1.2l2.7 33.8c.1.7-.5 1.3-1.2 1.4h-.1z"/><path class="st9" d="M395.1 99.7l-12.3-12.8c-6 12.1-23.9 30-37.5 33.4-.3-.1-.6-.2-1-.4-4.3-1.6-29.2-3.3-35.2-.8-3.8 1.6-6.5 2.9-8.2 4.5-11.7 9.2-19.1 17.2-19.1 17.2l-14.3-22.4-12.8 9.1s11 40.2 27.9 39.3c5.6-.3 11-1.8 16-4.3L300 203l56.7-1-1.4-57.9c21.1-10.7 39.8-44.4 39.8-44.4z"/><path class="st7" d="M297.4 204.4c-.7 0-1.3-.6-1.2-1.4 0-.7.6-1.2 1.2-1.2l60.7-.6c.7 0 1.3.5 1.3 1.2v.1c0 .7-.6 1.3-1.3 1.3l-60.7.6zM288 167.6c-.7 0-1.3-.6-1.3-1.3 0-.5.3-1 .8-1.2l11.1-5c.6-.3 1.4-.1 1.7.5.3.6.1 1.4-.5 1.7 0 0-.1 0-.1.1l-11.1 5c-.3.1-.5.2-.6.2z"/><path class="st11" d="M231.9 278.8h-.2l-36.9.6-37.2.4-74.8.2c-.8 0-1.4-.6-1.4-1.4v-20.9c0-.8.6-1.4 1.4-1.5l74.4.2 74.4.6c.4 0 .7.3.7.7l-.4 21.1zm-.8-.4v-.2l-.4-20.5.7.7-74.4.6-74.4.2 1.5-1.5v20.9l-1.4-1.4 73.9.3 37.1.4 37.4.5z"/><path class="st0" d="M82.7 270.9v91.3"/><path class="st11" d="M83 270.9c.7 7.6.9 15.2 1 22.8l.2 22.8c-.2 15.2-.1 30.4-.9 45.6 0 .3-.3.5-.6.5-.2 0-.4-.2-.5-.5-.9-15.2-.8-30.4-.9-45.6l.2-22.8c.2-7.6.3-15.2 1-22.8 0-.1.1-.3.3-.3.1.1.2.2.2.3z"/><path class="st0" d="M231.5 278.6v83.6"/><path class="st11" d="M231.7 278.6c.7 7 .9 13.9 1 20.9l.2 20.9c-.2 13.9-.1 27.9-.9 41.8 0 .3-.3.5-.6.5-.2 0-.4-.2-.5-.5-.9-13.9-.8-27.9-.9-41.8l.2-20.9c.2-7 .3-13.9 1-20.9 0-.1.1-.3.3-.3.1.1.2.2.2.3z"/></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/generating-cash-2.svg b/plugins/jetpack/images/generating-cash-2.svg
deleted file mode 100644
index 53601e03..00000000
--- a/plugins/jetpack/images/generating-cash-2.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg id="generatingCash-2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1495 856.6"><style>.st0{fill:#fff}.st1{fill:#BBC9D5}.st2{fill:#CCCED0}.st3{fill:#BBC9D5}.st4{fill:#6F93AD}.st5{fill:none}.st6{fill:#00be28}.st7{display:none;fill:#fff}.st8,.st9{fill:none;stroke:#CCCED0;stroke-width:7.5622;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10}.st9{fill:#fff}.st10{fill:#CCCED0}.st11{fill:#005083}.st12{fill:#969CA1}.st13{fill:#204A69}.st14{fill:#6F93AD}.st15{fill:#BBC9D5}.st16,.st17{fill:none;stroke:#CCCED0;stroke-width:3.7811;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10}.st17{stroke:#969CA1;stroke-width:4.2772}</style><path class="st0" d="M401 688.9h683.1v167.8H401zM720.4 522.6c-18.8 15-23.3 34.3-23.3 34.3l-5.6 120.4h110.6l-24-120.4-57.7-34.3zM887.7 197.1c-45-5-85.2 36.7-91.9 57.1-5.8 17.8-20.8 74.9-10.2 107.9s.8 65 43.9 74.5 109.7 8.5 109.1-19.4c-.6-27.8-16.5-179.6-19.5-196.1s-4.2-21-31.4-24z"/><path class="st0" d="M1136.1 856.6c6.8-25 10.8-56.2 10.8-90.1 0-81.9-23.6-148.4-52.7-148.4s-52.7 66.4-52.7 148.4c0 33.9 4 65.1 10.8 90.1h83.8z"/><title>jetpack-generatingCash-2</title><path class="st1" d="M29.3 436.6z"/><circle class="st2" cx="533.9" cy="417.2" r="6.1"/><circle class="st2" cx="533.9" cy="443.6" r="6.1"/><circle class="st2" cx="533.9" cy="470" r="6.1"/><circle class="st2" cx="533.9" cy="274" r="6.1"/><circle class="st2" cx="533.9" cy="301.5" r="6.1"/><path class="st2" d="M535 230.5c15-.4 30.1-.8 45.2-.8l45.2-.1-2.1 1.5c2.4-8.9 3.3-18.6 2-27.6-1.2-9.1-5.6-17.7-13.1-22.8-3.6-2.6-7.9-4.3-12.3-5.4-4.5-1.1-9.2-1.9-13.6-1.7-2.2 0-4.3.4-6.3 1.1l-.4.1c-.3.1-.5.2-.8.2-.6.1-1.2.1-1.8 0-1.2-.2-2.3-.9-3-2-.3-.5-.6-1.2-.6-1.9l-.1-.9-.2-1.7c-.6-4.6-2-8.9-4-13-4.1-8.2-11.4-14.3-20.3-16.8-9-2.5-18.4-2.8-27.5-.8-18.3 3.9-33.7 17.7-42 34.2-.5 1-1.8 1.5-2.8.9-.3-.1-.5-.3-.7-.6-5-6.6-12.8-12.1-21.3-13.2-8.7-1.1-17.8-.1-25.8 3.6s-14.8 9.8-20 17.1c-5.2 7.3-9.2 15.5-11.6 24.2-.1.3-.4.5-.8.3-.2-.1-.4-.4-.4-.6 2.2-9 5.9-17.5 11-25.2 5.2-7.6 12.1-14.3 20.6-18.4s18.1-5.4 27.4-4.5c9.7 1.1 18.3 6.6 24.2 14.3l-3.6.3c4.7-9 11.1-16.4 18.6-22.9 7.5-6.4 16.6-11.2 26.2-13.4 9.7-2.2 19.9-2 29.6.7 4.8 1.5 9.5 3.7 13.5 7s7.2 7.3 9.5 11.9c2.3 4.5 3.8 9.4 4.6 14.4l.2 1.9.1.9v-.2c0-.1 0 0 0 0l.5-.2c2.5-.9 5.1-1.4 7.8-1.5 5.1-.2 10.1.6 14.9 1.9 4.8 1.2 9.7 3.2 13.9 6.2 8.6 5.9 13.5 16 14.8 25.9 1.4 10 .4 19.9-2.3 29.5-.2.9-1.1 1.5-2 1.5l-45.2-.4c-15-.1-30.1-.5-45.2-1.1-.5 0-.9-.4-.9-.9 0-.6.4-1 .9-1z"/><ellipse class="st3" cx="655.8" cy="144.3" rx="64.6" ry="64.5"/><path class="st4" d="M616.6 94.6c-12.1 10.6-20.1 25.2-22.3 40.7-2.1 15.5 1.4 31.6 10.3 44.5 8.9 12.9 22.4 22 37.7 25.3 15.1 3.3 31.4.7 44.7-7.2 13.3-7.9 23.6-20.8 27.9-35.7 4.5-15 2.9-31.2-4.2-45.2-7.2-14-19.3-24.7-34.1-30.1-7.3-2.7-15-3.9-23-4-4 0-8 0-11.7.6s-7.4 2-10.9 3.8h-.1c-.8.4-1.8.1-2.2-.7-.2-.5-.2-1.1.1-1.6 3.6-5.6 7.2-11.2 11-16.7.2-.3.6-.4.9-.1.2.2.3.5.2.8-3 6-6.1 11.9-9.3 17.7l-2.3-2.3c3.6-2.1 7.5-4 11.7-4.9s8.4-1.2 12.5-1.2c8.3-.1 16.8.8 24.8 3.6 33.6 11.8 52.1 47.7 42.3 82-4.7 16.4-15.8 30.8-30.5 39.3-14.7 8.7-32.6 11.4-49.2 7.6-16.7-3.8-31.4-13.8-41-28-9.6-14.2-13.4-31.5-10.4-48.3 2.7-16.7 12.7-31.8 26.2-41 .3-.2.7-.1.9.2.3.3.2.7 0 .9z"/><path class="st3" d="M641 127l16.7 20.9-32.5 28.7"/><path class="st4" d="M642.4 125.9c2.4 1 3.4 3 4.9 4.7l4.3 5.2c2.8 3.5 5.8 6.9 8.5 10.4 1 1.3.8 3.1-.3 4.1-5.4 4.8-10.9 9.5-16.5 14.2-5.5 4.7-11 9.4-17.5 12.9-.4.2-1 .1-1.2-.3-.1-.3-.1-.7 0-1 4.3-6 9.6-10.9 15-15.7s10.7-9.7 16.1-14.5l-.3 4.1c-2.8-3.5-5.5-7.1-8.3-10.6l-4.1-5.3c-1.3-1.9-3-3.3-3.5-5.8-.2-1.1.5-2.2 1.7-2.4.4-.2.8-.2 1.2 0z"/><path class="st5" d="M630.2 85.8l17.1 9.9"/><path class="st4" d="M630.6 85.3c2.5-1.1 3.8-.1 5.3.5s3 1.4 4.4 2.2c1.4.9 2.8 1.7 4.1 2.7 1.3 1 2.8 1.7 3.2 4.4 0 .5-.2 1-.7 1.2-2.5 1.1-3.8.1-5.3-.5s-3-1.4-4.4-2.2c-1.4-.9-2.8-1.7-4.1-2.7-1.3-1-2.8-1.7-3.2-4.4-.1-.6.2-1 .7-1.2z"/><circle class="st4" cx="655.8" cy="106.2" r="3.2"/><circle class="st4" cx="655.8" cy="189.2" r="3.2"/><circle class="st4" cx="698.6" cy="146.4" r="3.2"/><circle class="st4" cx="612.9" cy="146.4" r="3.2"/><path class="st5" d="M395.4 181.4c-19.7 0-34.1.1-34.1.1s-9.3-30.3 15.3-36.7c7.3-1.9 11.7-1.2 13.8-.2.7.3 1.5 0 1.9-.7 0-.1.1-.2.1-.4.5-6.1 4-22.7 26.2-22.7 24.4 0 35.2 23 35.2 23s5.4-7.9 15.1-8.7c10.5-.8 18.1 2.9 23.5 8"/><path class="st2" d="M395.4 182.3c-5.7.5-11.4.9-17 1l-17 .3c-.9 0-1.8-.6-2-1.5-1.8-6.1-2.3-12.5-1.5-18.8.8-6.3 4-12.9 9.5-16.7 2.7-1.9 5.7-3.2 9-4 3.1-.9 6.4-1.3 9.6-1.2 1.8 0 3.5.4 5.1 1l.3.1h-.4c-.2 0-.4.2-.6.4-.1.1-.1.3-.1.5v-.5l.1-1.2c.4-3.2 1.5-6.4 2.9-9.3 3-6 8.4-10.4 14.9-12.1 6.2-1.7 12.6-1.8 18.9-.4 12.6 2.9 22.4 12.1 28.6 23.1l-3.6-.3c2.4-3.2 5.6-5.7 9.3-7.3 3.6-1.7 7.7-2.2 11.5-1.9 7.6.4 15 3.8 20.1 9.3.2.2.2.6 0 .8-.2.2-.6.2-.8 0-5.4-4.6-12.3-7.1-19.3-6.9-3.5.1-6.8.5-9.7 2.1-2.9 1.5-5.5 3.7-7.4 6.3v.1c-.7.9-2 1.1-2.9.4-.2-.2-.4-.4-.6-.7-4.9-10.2-14.6-18.7-25.7-21-5.6-1.2-11.3-1-16.8.5-5.3 1.5-9.7 5.2-12.1 10.1-1.2 2.5-2.1 5.1-2.4 7.9l-.1 1v.5c0 .5-.2 1.1-.5 1.5-.5.8-1.5 1.4-2.4 1.6-.5.1-.9.1-1.4 0-.2 0-.4-.1-.7-.2l-.2-.1c-1.2-.4-2.4-.6-3.7-.6-5.3 0-11.4 1.3-15.7 4.3-4.4 3-7.1 8.1-7.8 13.7-.8 5.6-.2 11.5 1.2 16.9l-2.1-1.5 17 .2c5.7.1 11.4.4 17 .9.5 0 .9.5.8 1-.5.3-.9.7-1.3.7z"/><path class="st5" d="M535 231.4c48.3.1 90.3.3 90.3.3s14.8-48.4-24.5-58.6c-11.8-3-18.6-1.9-22.1-.4-1.4.6-3-.2-3.1-1.7-.8-9.7-6.4-36.3-41.9-36.3-39.1 0-56.2 36.7-56.2 36.7s-8.7-12.7-24.1-13.9c-45.6-3.7-56.8 46.7-56.8 46.7"/><path class="st2" d="M391.6 230.8c4.2-1 7.5-1.2 11.3-1.4l11-.4c3.7-.2 7.3.3 11 .3 3.7-.6 7.3.4 11 1.2.3.1.5.4.4.7 0 .2-.2.4-.4.4-3.7.8-7.3 1.9-11 1.3-3.7 0-7.3.6-11 .4l-11-.2c-3.6 0-7.2-.3-10.8-.8l-.5-.1c-.4-.1-.7-.5-.7-1 .1-.1.3-.3.7-.4z"/><ellipse class="st3" cx="485.4" cy="237.3" rx="38" ry="37.9"/><path class="st5" d="M485.4 216.8v41.1"/><path class="st4" d="M486.1 216.8c2.2 3.4 2 6.9 2.2 10.3a177.08 177.08 0 0 1 0 20.6c-.1 3.4 0 6.9-2.2 10.3h-1.4c-2.2-3.4-2-6.9-2.2-10.3a177.08 177.08 0 0 1 0-20.6c.1-3.4 0-6.9 2.2-10.3h1.4z"/><path class="st5" d="M506 237.3h-41.2"/><path class="st4" d="M506 238c-3.4 2.2-6.9 2-10.3 2.2s-6.9.3-10.3.3-6.9-.1-10.3-.3-6.9 0-10.3-2.2v-1.4c3.4-2.2 6.9-2 10.3-2.2a177.08 177.08 0 0 1 20.6 0c3.4.2 6.9 0 10.3 2.2v1.4z"/><path class="st3" d="M510.5 8.6s-14.2 17.6-38.8 15.5c0 0-13.1 70.4 40.4 85.5 0 0 52.1-7.2 41.7-85.5 0 0-29.5 2.3-43.3-15.5z"/><path class="st6" d="M510.8 109.6s53.7-7.2 43.3-85.5c0 0-29.8.7-43.5-17.1 0 0-15.6 19.2-40.1 17.1-.1 0-13.2 70.4 40.3 85.5"/><path class="st6" d="M494.8 62.9l13.8 10.9 28-31.6"/><path class="st0" d="M495.6 61.9c1.7.2 2.6 1.4 3.9 2.3l3.5 2.7c2.3 1.8 4.7 3.5 7 5.4l-2.8.2 14.1-15.7c4.7-5.3 9.5-10.4 15-15 .2-.2.6-.2.9 0 .2.2.2.5 0 .7-3.8 6-8.4 11.4-13 16.7l-13.9 15.9c-.7.8-1.9.9-2.8.3-2.4-1.8-4.6-3.7-6.8-5.5l-3.4-2.8c-1.1-1-2.4-1.7-3-3.2-.3-.7 0-1.6.8-1.9 0-.1.3-.2.5-.1z"/><path class="st6" d="M533.9 323.3c-13 0-23.5 10.5-23.5 23.5s10.5 23.5 23.5 23.5 23.5-10.5 23.5-23.5-10.5-23.5-23.5-23.5zm-1.1 27.4H521l11.7-22.7v22.7zm2.3 14.9v-22.7h11.7l-11.7 22.7z"/><g id="Layer_1_2_"><path class="st7" d="M731.5 436.8c1.8 17.3 7.8 32.1-24.7 27.2v-18"/><path class="st8" d="M1049.4 680.8c9.9-38.8 26.3-64.1 44.8-64.1 30.2 0 54.8 68.4 54.8 152.4 0 31.1-3.4 60-9.1 84.2"/><path class="st9" d="M1046.5 483.9c-1.9 4.5.4 8.7 5.3 9.8l60.5 13.2c4.9 1.1 10.2-1.9 11.7-6 1.5-4.2-.4-8.7-5.3-9.8l-60.5-13.2c-4.5-1.2-9.8 1.9-11.7 6 0 0 1.9-4.1 0 0z"/><path class="st9" d="M1046.5 483.9c-1.9 4.5.4 8.7 5.3 9.8l60.5 13.2c4.9 1.1 10.2-1.9 11.7-6 1.5-4.2-.4-8.7-5.3-9.8l-60.5-13.2c-4.5-1.2-9.8 1.9-11.7 6 0 0 1.9-4.1 0 0z"/><path class="st9" d="M1050.3 657.9H834.4c-14.7 0-27.2-11.7-28-26.5l7.2-136.9c-.8-15.9 11.7-29.5 28-29.5h215.9c14.7 0 27.2 11.7 28 26.5l-7.2 136.9c.7 15.8-12.1 29.5-28 29.5z"/><path class="st10" d="M885.1 350.1V335c-19.3 3.4-36.3 4.9-51 0-15.2-5 23 15.5 51 15.1z"/><path class="st11" d="M834 281.3c-2.6 0-4.5-1.9-4.5-4.5v-7.2c0-2.6 1.9-4.5 4.5-4.5s4.5 1.9 4.5 4.5v7.2c.4 2.6-1.8 4.5-4.5 4.5z"/><path class="st12" d="M938 276.7c-2.3-24.2 6-35.5-6.4-70.3-7.9-21.9-45.8-47.3-84.7-37.8-42 5.7-59.7 43.9-59.7 86.6 0 57.1-34.8 55.6-34.8 95.7S780 397 780 397s13.6 2.3 27.6-1.5v-20c11-1.1 19.7-9.8 20.8-20.8l2.3-20c-23.4-4.2-29.9-74.5-29.9-74.5 45 3 54.8-30.2 65-49.9 3.8 7.2 12.9 18.1 24.6 26.5 25.7 19.3 23.4 54.4 12.9 74.5-10.2 18.9-21.6 21.2-21.6 21.2l.8 22.3c.4 9.8 7.9 18.1 17.8 19.7l4.9.8v20.8H926s20.4-10.2 30.2-38.9c11.3-29.4-16.7-65.7-18.2-80.5z"/><path class="st13" d="M803.8 259.3s0 3.4.4 9.5c.4 3 .4 6.4.8 10.6.4 1.9.4 4.2.8 6.4.4 2.3.8 4.5 1.1 7.2.4 2.6 1.1 4.9 1.9 7.6 1.1 2.6 1.5 5.3 3 7.9 2.3 5.3 5.7 10.2 10.2 14.4 4.5 4.2 10.2 7.2 16.3 8.7 6.4 1.5 12.9 2.6 19.7 2.6H862.8l5.3-.4c1.9 0 3.4-.4 4.9-.8s3-.4 4.5-.8c6.4-1.5 11.7-4.5 16.3-8.7 4.2-4.2 7.2-9.5 9.1-14.7 1.9-5.3 3-10.6 3.8-15.9.8-4.9 1.1-9.8 1.5-14 .4-4.2.4-7.9.4-11 0-6 .4-9.5.4-9.5 0-1.1.8-1.9 1.9-1.9s1.9.8 1.9 1.9v20.5c0 4.2-.4 9.1-1.1 14.4s-1.5 11-3.8 16.6c-1.9 6-5.3 12.1-10.2 17-4.9 4.9-11.7 8.7-18.5 10.2-1.5.8-3.4.8-5.3 1.1s-3.8.8-5.3.8l-5.3.4h-5.4c-7.2 0-14-1.1-21.2-3-6.8-1.9-13.2-5.3-18.5-9.8-4.9-4.5-8.7-10.6-11-16.3-1.5-2.6-1.9-5.7-3-8.3-.8-2.6-1.1-5.7-1.9-7.9-.4-2.6-.8-5.3-1.1-7.6-.4-2.3-.4-4.5-.8-6.8-.4-4.2-.4-7.9-.4-11v-9.5c0-1.1.8-1.9 1.9-1.9s1.9.9 1.9 2z"/><path class="st13" d="M862.8 265.4s.4 1.5.8 4.2c.4 2.3.8 5.7.8 8.7 0 3.4 0 6.4-.4 8.7-.4 2.3-.4 4.2-.4 4.2-.4 1.1-1.5 1.9-2.6 1.5-.8 0-1.5-.8-1.5-1.5 0 0-.4-1.5-.4-4.2-.4-2.3-.4-5.7-.4-8.7 0-3.4.4-6.4.8-8.7.4-2.3.8-4.2.8-4.2 0-.8 1.1-1.1 1.9-1.1-.2.3.2.7.6 1.1z"/><path class="st11" d="M887.3 281.3c-2.6 0-4.5-1.9-4.5-4.5v-7.2c0-2.6 1.9-4.5 4.5-4.5s4.5 1.9 4.5 4.5v7.2c.5 2.6-1.8 4.5-4.5 4.5z"/><path class="st13" d="M849.5 305.5s.4 0 1.1.4c.8 0 1.1.4 2.3.4 2.3.4 5.3.8 8.3.8s6 0 8.3-.4c1.1-.4 1.9-.4 2.3-.8.4-.4.8-.4.8-.4h.4c1.1-.4 1.9 0 2.3 1.1.4.8 0 1.5-.4 1.9l-1.1 1.1c-.8.4-1.9 1.1-3 1.5s-3 .8-4.5 1.1c-1.5.4-3.4.4-5.3.4-3.4 0-6.8-.8-9.5-1.9-.8-.4-1.1-.4-1.9-.8-.4-.4-1.1-.8-1.5-.8l-.8-.8c-.8-.8-.8-1.9-.4-2.6 1.1-.2 1.9-.6 2.6-.2zM875.6 245.3s0-.4.8-.8c.4-.4.8-.4 1.1-.8.4-.4.8-.4 1.5-.8 1.1-.4 2.3-.8 3.4-1.1 1.1-.4 2.6-.4 4.2-.4s2.6.4 4.2.4c1.1.4 2.3.8 3.4 1.1 1.9 1.1 3 2.3 3 2.3.8.8.8 1.9 0 2.6-.4.4-1.1.8-1.9.4h-.4s-.4 0-.8-.4c-.4 0-1.1-.4-1.9-.4-1.5-.4-3.8-.8-6-.8-2.3 0-4.5 0-6 .4h-1.5c-.4.4-.8.4-.8.4-1.1.4-2.3 0-2.6-1.1-.4.5-.1-.2.3-1zM843.1 248.4s-.4 0-.8-.4H840.9c-1.5 0-3.8-.4-6-.4s-4.5.4-6 .8c-.8 0-1.5.4-1.9.4-.4 0-.8.4-.8.4h-.4c-1.1.4-1.9-.4-2.3-1.5 0-.8 0-1.1.4-1.9 0 0 1.1-1.1 3-2.3 1.1-.4 2.3-.8 3.4-1.1s2.6-.4 4.2-.4c1.5 0 2.6 0 4.2.4 1.1.4 2.6.8 3.4 1.1.4 0 1.1.4 1.5.8.4.4.8.8 1.1.8l.8.8c.8.8.4 2.3-.4 2.6-.5.2-1.2.2-2-.1z"/><path class="st14" d="M1051.4 558.8s-14-159.9-142.5-183.4c0 0-20.8 29.9-52.9 29.9-32.1 0-48.4-29.9-48.4-29.9C679 415.9 685.8 561.1 685.8 561.1H766l-2.3 123.6h209.1l-5.7-124 84.3-1.9z"/><circle class="st15" cx="858.2" cy="430.6" r="4.9"/><path class="st0" d="M823.1 556.9h-12.9c-21.2 0-25.7-72.6-25.7-72.6h66.2s-8.3 72.6-27.6 72.6z"/><path class="st0" d="M985.3 693.4c-72.6 0-100.2-121.4-100.2-121.4s-12.9-2.3-25.7-10.6c-11.3-7.6-12.9-23.4-12.9-23.4s-17.4-1.5-32.1 2.3c-4.9 1.1-6.4-2.3-8.7-8.7s2.3-14.7 12.9-17c37.8-21.2 48-6.4 55.6 0 17 14.7 100.2 80.9 100.2 80.9"/><path class="st10" d="M835.2 307v-1.1c0-.7 0-1.5.4-2.3.4-.8.8-1.5 1.1-1.9l.8-.8 1.5.8v1.1c0 .7 0 1.5-.4 2.3s-.8 1.5-1.1 1.9l-.8.8-1.5-.8zM886.2 307.7l-.8-.8c-.4-.4-.8-1.1-1.1-1.9-.4-.8-.4-1.5-.4-2.3v-1.1l1.5-.8.8.8c.4.4.8 1.1 1.1 1.9.4.8.4 1.5.4 2.3v1.1l-1.5.8z"/><path class="st16" d="M893.4 595.1l34-31.8"/><path class="st15" d="M794.3 684.7H615.1V670h164.1c8.3 0 15.1 6.4 15.1 14.7z"/><path class="st15" d="M679.4 684.7H432.5l-21.9-158.1c-1.9-14.4 9.1-27.2 23.8-27.2h198.1c12.1 0 22.3 8.7 23.8 20.8l23.1 164.5z"/><path class="st10" d="M1015.1 683.2c11.7-1.9 23.1-2.3 34.8-2.3 11.7-.4 23.1-.4 34.8 0 2.3 0 4.2 1.9 3.8 4.2l-.4 25c0 4.2 0 8.3-.4 12.5-.4 4.2-.4 8.3-.8 12.5 0 1.5-1.5 2.3-2.6 2.3s-2.3-1.1-2.3-2.3c-.4-4.2-.8-8.3-.8-12.5-.4-4.2-.4-8.3-.4-12.5l-.4-25 4.2 4.2h-34.8c-11.7 0-23.1-.4-34.8-2.3-.8 0-1.5-1.1-1.1-1.9-.3-1.2.5-1.9 1.2-1.9z"/><path class="st0" d="M1003.4 690l27.6-25.7 7.2-17.4-23.1-14-35.1 6.4-5.7 52.6z"/><path class="st5" d="M402.6 734.6v-49.9h548.3"/><path class="st10" d="M401.1 734.6l-.8-25c-.4-8.3-.4-16.6-.4-25 0-1.5 1.1-3 2.6-3 22.7-.4 45.8-.8 68.4-.8l68.4-.4 136.9-.4 136.9.4 68.4.4 34.4.4 34.4.8c1.5 0 2.6 1.1 2.6 2.6s-1.1 2.3-2.6 2.6l-34.4.8-34.4.4-68.4.4-136.9.4-136.9-.4-68.4-.4c-22.7-.4-45.8-.4-68.4-.8l3-3c0 8.3-.4 16.6-.4 25l-.8 25c0 .8-.8 1.5-1.5 1.5-.9 0-1.7-.7-1.7-1.5z"/><path class="st13" d="M815.9 513s.8-.4 1.5-1.5c1.1-.8 2.6-2.3 4.9-3.4 1.1-.8 2.6-1.5 4.2-2.3 1.5-.8 3-1.5 4.9-2.3 3.4-1.5 7.9-2.3 12.9-2.6 4.9-.4 10.2 0 15.5 1.5 5.3 1.5 11 3.8 15.9 7.6 4.2 3.4 8.7 7.2 13.2 11s9.1 7.6 13.6 11.3c18.5 15.1 36.7 30.2 50.7 41.6 14 11.3 22.7 19.3 22.7 19.3 1.1 1.1 1.1 2.6 0 3.4-.8.8-2.3 1.1-3.4.4 0 0-9.8-6.8-23.8-17.8-7.2-5.3-15.1-12.1-24.2-18.9-8.7-6.8-18.1-14.4-27.2-21.9-4.5-3.8-9.1-7.6-13.6-11.3s-9.1-7.6-13.2-11c-3.8-3-8.3-5.3-12.9-6.4-4.5-1.1-9.1-1.9-13.2-1.9-4.2 0-7.9.4-11.3 1.1-3.4.8-6.4 1.5-8.7 2.6-2.3.8-4.2 1.9-5.7 2.3-1.1.4-1.9.8-1.9.8-.8.4-1.5 0-1.5-.8.2.4.2-.4.6-.8z"/><path class="st13" d="M811.3 537.6c1.1-.8 2.3-1.5 3.8-2.3 1.5-.8 3-1.1 4.5-1.9 3-1.1 6-1.5 9.1-1.9 3-.4 6.4 0 9.5.4 1.5.4 3 .4 4.5.8.8 0 1.5.4 2.3.4.8.4 1.5.4 2.3.8 1.5.4 2.3 1.5 2.3 3v.4c0 .8.4 1.9.4 3 .4 1.1.4 1.9.8 3 .8 1.9 1.5 3.8 2.3 5.7s1.9 3.4 3.4 4.9c.8.8 1.1 1.5 1.9 2.3.8.8 1.5 1.1 2.3 1.9 1.1.8 1.9 1.1 3 1.9.8.4 1.9 1.1 2.6 1.5 1.9 1.1 3.8 1.9 6 2.6 1.9.8 4.2 1.5 6 2.3 1.1.4 2.3.8 3 .8 1.1.4 2.3.4 3 .8 1.5.4 3 1.5 3.4 3 1.5 6.4 3.4 12.9 5.7 18.9 2.3 6.4 4.5 12.5 6.8 18.5 4.9 12.1 11 24.2 17.8 35.2 7.2 11 15.1 21.6 25 29.5 9.8 8.3 21.6 14 34 15.5 1.5 0 3 .4 4.5.4h4.9c3 0 6-.4 9.1-1.1 6-1.5 11.7-4.2 16.6-7.9 9.8-7.6 16.3-19.3 20-31.8 4.2-12.5 6.4-25.3 7.6-38.6.8-6.4 1.1-13.2 1.5-20 .4-6.8.4-13.2 0-20 0-.8.4-1.1 1.1-1.1.8 0 1.1.4 1.1 1.1 1.1 6.8 1.9 13.6 2.3 20.4.4 6.8.4 13.6 0 20.4-.8 13.6-2.6 27.2-6.8 40.5-2.3 6.4-4.9 13.2-8.7 19.3s-8.3 11.7-14 16.3c-5.7 4.5-12.5 7.6-19.7 9.5-3.4.8-7.2 1.1-10.6 1.5h-5.2c-1.9 0-3.4-.4-5.3-.4-7.2-.8-14-2.6-20.4-5.7-6.4-3-12.5-6.8-17.8-11.3-11-9.1-19.7-20-26.8-31.4-7.2-11.7-13.2-23.8-18.5-36.7-2.6-6.4-4.9-12.9-6.8-19.3-2.3-6.4-4.2-12.9-5.7-19.7l3.4 3c-1.5-.4-2.6-.4-3.8-.8-1.1-.4-2.3-.8-3.4-1.1-2.3-.8-4.5-1.5-6.8-2.6-2.3-.8-4.5-1.9-6.4-3-1.1-.4-2.3-1.1-3.4-1.9-1.1-.8-1.9-1.1-3-1.9-1.1-.8-2.3-1.5-3.4-2.6-1.1-.8-1.9-1.9-2.6-3-1.5-1.9-3-4.2-4.2-6.4s-2.3-4.5-2.6-7.2c-.4-1.1-.8-2.3-.8-3.8-.4-1.1-.4-2.3-.8-3.8l2.3 3.4c-.4 0-1.1-.4-1.9-.4l-1.9-.4c-1.1-.4-2.6-.4-4.2-.8-1.5 0-2.6-.4-4.2-.4h-4.2c-1.6 0-2.6 0-4.2.4s-2.6.4-4.2.8c-1.5.4-2.6.8-3.8.8-1.1.4-2.6.8-4.2 1.1-1.5.4-2.6-.4-3-1.9 1.7-1.4 2.5-2.5 3.2-2.9zM807.6 526.7s.8-.4 1.9-.8 3-1.1 5.3-1.9c2.3-.8 4.5-1.1 7.6-1.5 2.6-.4 5.7-.4 8.7-.4s6 .4 8.7.8 5.3 1.1 7.6 1.9c2.3.8 3.8 1.5 4.9 1.9 1.1.4 1.9.8 1.9.8 1.1.4 1.5 1.5 1.1 2.6-.4.8-1.1 1.1-2.3 1.1 0 0-.8 0-1.9-.4-1.1-.4-3-.8-4.9-1.1-4.2-.8-9.5-1.5-15.1-1.9-5.3-.4-11 .4-15.1 1.1-1.9.4-3.8.8-4.9 1.1s-1.9.4-1.9.4c-1.1.4-1.9-.4-2.3-1.5-.5-1.1-.1-1.9.7-2.2zM807.2 519.1s.8-.4 1.5-1.1c.4-.4 1.1-.8 2.3-1.1.8-.4 1.9-.8 3-1.1 2.3-.8 4.5-1.5 7.6-2.3 2.6-.4 5.7-.8 8.7-1.1 3 0 6 0 8.7.4 2.6.4 5.3.8 7.6 1.5s3.8 1.1 5.3 1.9c1.1.4 1.9.8 1.9.8 1.1.4 1.5 1.5 1.1 2.6-.4.8-1.1 1.1-2.3 1.1 0 0-.8 0-1.9-.4-1.1-.4-3-.4-4.9-.8s-4.5-.8-7.2-.8c-2.6-.4-5.3-.4-7.9-.4-5.7 0-11 1.1-14.7 1.9-.8.4-1.9.4-2.6.8-.8.4-1.5.4-1.9.8-1.1.4-1.9.8-1.9.8-1.1.4-1.9 0-2.6-1.1-.9-.9-.6-2 .2-2.4z"/><g><path class="st17" d="M834 288.1h-3.4c-8.7 0-16.3-6.4-16.6-14.7l-.4-4.2c-.4-6 4.9-11.3 11-11l13.2.4c7.6.4 13.6 6.4 13.2 13.6-.3 8.7-7.5 15.9-17 15.9zM886.6 290l3.4.4c8.7.8 16.6-5.3 17.8-13.6l.8-4.2c.8-6-3.8-11.3-10.2-11.7l-13.2-.4c-7.6-.4-14 5.3-14 12.5-.9 8.6 6.3 16.2 15.4 17zM850.7 265.8l20.4.3"/></g><g><path class="st13" d="M698.3 570.1s.8 1.1.8 2.6c.4 1.5 0 4.2 0 7.2 0 5.7 0 13.6-.4 21.2-.4 3.8-.4 7.6-.8 11.3-.4 3.8-.8 6.8-1.1 9.8-.4 3-1.1 5.3-1.5 6.8s-.8 2.6-.8 2.6c-.4.4-.8.8-1.5.4-.4 0-.4-.4-.4-.8 0 0-.4-1.1-.8-2.6-.4-1.9-.4-4.2-.4-7.2s.4-6.4.4-9.8c0-3.8.4-7.6.4-11.3.4-3.8.4-7.6.8-11.3 0-3.4.4-6.8.4-9.8s0-5.3.4-6.8.8-2.6.8-2.6c.8-1.1 1.9-1.5 3-.8.3.8.3.8.7 1.1z"/></g><g><path class="st13" d="M737.2 619.7s.8.4 1.5 1.5c.8.8 1.9 2.3 2.6 3.4.8 1.1 1.5 2.6 1.9 3.8.4 1.1.4 1.9.4 1.9 0 1.1-.8 2.3-1.9 2.3-.4 0-1.1 0-1.5-.4 0 0-.8-.4-1.5-1.5-.8-.8-1.9-2.3-2.6-3.4-.8-1.5-1.5-2.6-1.9-3.8-.4-1.1-.8-1.9-.8-1.9-.4-1.1.4-2.3 1.5-2.3 1.2 0 2 0 2.3.4z"/></g><g><path class="st13" d="M887.3 334.9s0 2.6.4 7.6c0 2.3 0 5.3.4 8.7V356.5c.4 1.5.8 3 1.1 4.5 1.5 3.4 3.8 6.4 7.2 8.3 1.9 1.1 3.8 1.5 5.7 1.9 2.3.4 4.9.8 7.6 1.5 10.2 2.3 21.2 5.3 31.8 9.8 10.6 4.2 20.4 9.5 29.1 15.5 8.7 5.7 16.3 12.5 22.3 18.1 6 6 10.6 11.3 13.2 15.5 1.5 1.9 2.6 3.4 3.4 4.5.8 1.1 1.1 1.5 1.1 1.5.8 1.1.4 2.6-.8 3.4-1.1.8-2.6.4-3.4-.4 0 0-1.5-2.3-4.9-5.7-3-3.8-7.6-8.7-13.6-14-6-5.7-13.2-11.3-21.9-17-8.3-5.7-18.1-10.6-28-14.7-9.8-4.2-20.4-7.6-30.2-9.5-2.6-.4-4.9-1.1-7.2-1.5-3-.4-5.7-1.5-7.9-3-4.9-3-7.9-7.2-9.8-11.7-.8-2.3-1.5-4.5-1.5-6.8V353.6 351c0-3.4 0-6.4.4-8.7 0-4.9.4-7.6.4-7.6 0-1.5 1.1-2.6 2.6-2.3 1.4.3 2.5 1.4 2.5 2.5z"/></g></g><circle class="st2" cx="533.7" cy="388.9" r="6.1"/></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/get-apps.svg b/plugins/jetpack/images/get-apps.svg
deleted file mode 100644
index b4a0e73f..00000000
--- a/plugins/jetpack/images/get-apps.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 784.59 368.76"><defs><style>.cls-1{fill:#BBC9D5}.cls-2{fill:#D8DEE4}.cls-3{fill:#6F93AD}.cls-4{fill:#fff}.cls-5{fill:#00be28}.cls-6{fill:#CCCED0}.cls-7{fill:#204A69}.cls-8{fill:#6F93AD}.cls-9{fill:#F6F6F6}.cls-10{fill:#ddf8ff}.cls-11{fill:#46799A}</style></defs><title>Asset 28</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M187.08 0h419.43v341.62H164.32V22.76A22.76 22.76 0 0 1 187.08 0z"/><path class="cls-2" d="M192 312.64V83.67h390.36v228.97H213.1"/><path class="cls-3" d="M192 82.52V28.9h390.36v53.62H213.1"/><path class="cls-4" d="M552.61 139.11v173.53H435.44V119.86h117.17M388.97 312.43H224.25v-88.32h181.4v88.32"/><path class="cls-5" d="M272 312.64h-20.36v-20.37a5.1 5.1 0 0 1 5.11-5.1H272zM306.86 312.64h-20.34V283a5.11 5.11 0 0 1 5.11-5.11h15.23zM341.74 312.64h-20.35v-43a5.11 5.11 0 0 1 5.11-5.11h15.24zM359.91 312.64h20.34v-49.39a5.46 5.46 0 0 0-5.46-5.46h-14.88z"/><path class="cls-4" d="M388.97 197.12H224.25v-78.36h181.4v78.36"/><path class="cls-1" d="M529.71 242.52c-19.56 0-22.15 8.45-26.34 17.85-3.33 7.48-15 12.76-27.76 15.3-13 2.59-17.29 12.67-17.29 20.39h72z"/><path class="cls-5" d="M463.54 196.13l29.6-44.36 33.85 43.63"/><path class="cls-6" d="M346.2 197.14c-.66-2.73-1.13-5.48-1.54-8.24s-.73-5.52-1-8.28l-.77-8.3-.64-8.31c-.36-5.54-.66-11.09-.94-16.64s-.41-11.1-.23-16.69a.67.67 0 0 1 1.33-.09c1 5.5 1.62 11 2.16 16.55s1 11.06 1.45 16.6l.56 8.31.43 8.33c.12 2.77.2 5.55.19 8.34s-.08 5.57-.34 8.38a.34.34 0 0 1-.37.3.33.33 0 0 1-.29-.26z"/><path class="cls-6" d="M346.23 197.27a66.21 66.21 0 0 1-3.94-5.73c-1.22-2-2.36-4-3.47-6l-3.26-6.07-3.13-6.14q-3-6.18-6-12.43c-1.94-4.17-3.79-8.38-5.34-12.75a.67.67 0 0 1 .41-.85.67.67 0 0 1 .78.25c2.59 3.84 4.87 7.84 7.07 11.88s4.33 8.11 6.43 12.2l3.07 6.17 2.95 6.23c1 2.09 1.9 4.19 2.74 6.34a66.27 66.27 0 0 1 2.27 6.58.34.34 0 0 1-.6.3z"/><path class="cls-6" d="M346.29 197.36c-2.39-1.71-4.66-3.56-6.88-5.45s-4.39-3.84-6.52-5.82l-6.35-6-6.25-6.09q-6.19-6.15-12.29-12.4c-4.05-4.18-8-8.43-11.78-12.92a.67.67 0 0 1 .94-1c4.56 3.65 8.88 7.56 13.13 11.53s8.46 8 12.64 12.05l6.21 6.14 6.1 6.24q3 3.13 5.95 6.41c1.93 2.18 3.82 4.42 5.57 6.78a.34.34 0 0 1-.07.47.35.35 0 0 1-.4.06z"/><path class="cls-6" d="M346.4 197.43a53.41 53.41 0 0 1-6.2-1.52c-2-.59-4-1.28-6-2l-5.91-2.22-5.87-2.35c-3.89-1.62-7.75-3.3-11.61-5a122.08 122.08 0 0 1-11.33-5.66.68.68 0 0 1-.25-.92.66.66 0 0 1 .75-.31 121.94 121.94 0 0 1 12.02 3.86c3.94 1.48 7.88 3 11.79 4.53l5.84 2.42 5.79 2.54c1.92.87 3.83 1.77 5.7 2.76a52.74 52.74 0 0 1 5.49 3.25.33.33 0 0 1 .09.47.34.34 0 0 1-.3.15z"/><path class="cls-6" d="M363.32 137.55c-.25 2.61-.67 5.17-1.16 7.71s-1.05 5.06-1.66 7.57l-1.89 7.5-2 7.47q-2.11 7.44-4.36 14.84c-1.51 4.93-3.11 9.84-5.05 14.66a.67.67 0 0 1-1.28-.36c.8-5.12 1.94-10.16 3.18-15.17s2.54-10 3.87-15l2.09-7.45 2.23-7.41c.76-2.46 1.56-4.92 2.45-7.35s1.84-4.84 3-7.2a.34.34 0 0 1 .64.17z"/><path class="cls-6" d="M384.35 147.67c-1.2 2.34-2.54 4.58-4 6.77s-2.86 4.34-4.37 6.45l-4.55 6.32-4.67 6.22q-4.74 6.18-9.59 12.26c-3.24 4.05-6.56 8.05-10.16 11.83a.68.68 0 0 1-.95 0 .67.67 0 0 1-.11-.83c2.66-4.49 5.6-8.78 8.61-13s6.09-8.41 9.19-12.57l4.72-6.18 4.84-6.1c1.62-2 3.28-4 5-6s3.51-3.85 5.44-5.64a.34.34 0 0 1 .48 0 .35.35 0 0 1 .12.47z"/><path class="cls-6" d="M394.43 167.42A67 67 0 0 1 389 172c-1.88 1.43-3.8 2.78-5.75 4.09l-5.88 3.9-5.94 3.78q-6 3.69-12.07 7.28c-4.05 2.38-8.16 4.67-12.45 6.67a.66.66 0 0 1-.89-.32.67.67 0 0 1 .18-.8c3.67-3 7.52-5.7 11.42-8.32s7.84-5.18 11.8-7.71l6-3.72 6.06-3.6c2-1.18 4.08-2.33 6.18-3.4a66.44 66.44 0 0 1 6.47-3 .35.35 0 0 1 .44.2.34.34 0 0 1-.14.37z"/><path class="cls-7" d="M595.59 83.35c-17.31 1.45-34.62 2.14-51.93 2.58s-34.63.49-51.94.71c-34.63.45-69.26.69-103.89 1s-69.27.26-103.9.19c-17.31 0-34.63 0-52-.13s-34.63-.75-51.95-2V84c17.3-1.45 34.62-2.14 51.93-2.58s34.63-.49 51.94-.71c34.63-.45 69.26-.69 103.89-1 34.63-.12 69.26-.26 103.9-.19 17.31 0 34.63 0 51.94.13s34.64.75 52 2z"/><rect class="cls-8" x="-48.44" y="191.94" width="225.27" height="128.39" rx="15.88" ry="15.88" transform="rotate(90 64.195 256.135)"/><path class="cls-4" d="M8.72 168.42h111v162.95h-111z"/><path class="cls-7" d="M8.67 167.9h111.06v22.66H8.67z"/><path class="cls-9" d="M8.67 312.07h111.06v19.71H8.67z"/><path class="cls-1" d="M25.61 278.48h19.23v27.21H25.61zM54.58 263.67h19.23v42.02H54.58zM83.55 242.29h19.23v63.4H83.55z"/><path class="cls-5" d="M25.61 294.02h19.23v11.68H25.61zM54.58 287.66h19.23v18.03H54.58zM83.55 278.48h19.23v27.21H83.55z"/><path class="cls-10" d="M22.46 231.75l29.97-.06"/><path class="cls-8" d="M22.45 231.13a8.38 8.38 0 0 1 3.75-1.7c1.25-.22 2.5-.23 3.74-.34 2.5-.16 5-.28 7.5-.29s5 .11 7.49.26c1.25.1 2.5.11 3.75.32a8.35 8.35 0 0 1 3.75 1.69v1.24a8.43 8.43 0 0 1-3.74 1.69c-1.25.22-2.5.22-3.75.33-2.49.16-5 .28-7.49.29s-5-.11-7.5-.25c-1.24-.11-2.49-.11-3.74-.33a8.35 8.35 0 0 1-3.75-1.69z"/><path class="cls-10" d="M22.46 213.11c44.25-.85 55.63-.16 74.63-.16"/><path class="cls-8" d="M22.44 212.5a40.79 40.79 0 0 1 9.31-1.87c3.11-.27 6.22-.31 9.33-.44 6.22-.25 12.45-.41 18.69-.42s12.47.15 18.69.39c3.11.14 6.22.17 9.32.42a42.51 42.51 0 0 1 9.31 1.75v1.24a39.74 39.74 0 0 1-9.35 1.64c-3.12.2-6.23.15-9.34.21q-9.33.15-18.63.19c-6.2 0-12.41-.07-18.63-.16-3.1-.07-6.21 0-9.32-.18a41.22 41.22 0 0 1-9.35-1.54z"/><rect class="cls-8" x="586.75" y="171.15" width="256.45" height="138.79" rx="15.88" ry="15.88" transform="rotate(90 714.98 240.54)"/><path class="cls-2" d="M645.59 154.19h138.79v172.14H645.59z"/><path class="cls-4" d="M645.59 179.69h139v146.72h-139z"/><path class="cls-2" d="M723.9 228.13c-3.06 13-15.27 21.21-28.81 16.72-12.66-4.19-19.76-13.75-18.44-27 1.49-14.9 15.18-21.74 28.28-19.22 13.68 2.62 22.07 16.52 18.97 29.5z"/><path class="cls-5" d="M676.61 241.59a12.53 12.53 0 0 0-1.23 2.7 3.92 3.92 0 0 0 0 2.55c.53 1.3 2.57 1.2 4.33.67A24.28 24.28 0 0 0 685 245a51.24 51.24 0 0 0 5-3.36 97.56 97.56 0 0 0 9.24-7.92c3-2.79 5.82-5.74 8.6-8.74s5.46-6.07 8-9.27a66.4 66.4 0 0 0 6.65-10.07 26.87 26.87 0 0 0 2.17-5.4 9 9 0 0 0 .33-2.66 3.15 3.15 0 0 0-.66-2c-.83-1-2.88-1-4.68-.41a22.45 22.45 0 0 0-5.39 2.5.63.63 0 0 1-.73-1 21 21 0 0 1 5.49-3.34 9.55 9.55 0 0 1 3.35-.75 5.13 5.13 0 0 1 3.69 1.27 5.57 5.57 0 0 1 1.6 3.57 11.46 11.46 0 0 1-.23 3.49 26.79 26.79 0 0 1-2.18 6.16 65.79 65.79 0 0 1-6.72 10.75c-2.51 3.37-5.23 6.55-8 9.64a118.7 118.7 0 0 1-18.62 16.81c-3.47 2.37-7.16 4.63-11.56 5.59a9.2 9.2 0 0 1-3.52.07 4.51 4.51 0 0 1-1.81-.81 3.54 3.54 0 0 1-1.15-1.73 5.32 5.32 0 0 1 .52-3.51 10.85 10.85 0 0 1 1.85-2.65.31.31 0 0 1 .44 0 .3.3 0 0 1 .06.39z"/><path class="cls-2" d="M741.21 207.54c-2.76.77-1.93 3.78.7 3s2.09-3.77-.7-3zM755.88 211.57c-2.86.12-1.93 3.77.7 3s.65-3.06-.7-3zM741.06 230.54c1.07-2.65 4.2-.54 2.62 1.68s-3.13-.43-2.62-1.68zM757.16 233.14c1.07-2.65 5.71-1.41 3.26 1.51a1.82 1.82 0 0 1-3.26-1.51zM729.94 247.41c-1.92 2.12 1.21 5.75 2.78 2.27 1.12-2.49-1.87-3.27-2.78-2.27z"/><path class="cls-10" d="M753.97 281.72l-88.18.12"/><path class="cls-5" d="M754 282.24a64.91 64.91 0 0 1-11 1.46c-3.67.19-7.35.19-11 .28-7.35.17-14.7.21-22 .27s-14.7-.06-22-.21c-3.67-.08-7.35-.07-11-.25a64.84 64.84 0 0 1-11-1.43v-1a65.17 65.17 0 0 1 11-1.46c3.68-.19 7.35-.19 11-.28 7.34-.17 14.69-.21 22-.27s14.7.06 22 .21c3.68.08 7.35.07 11 .25a65.1 65.1 0 0 1 11 1.43z"/><path class="cls-10" d="M710.17 303.55l-44.38.11"/><path class="cls-5" d="M710.17 304.07a17.79 17.79 0 0 1-5.54 1.46c-1.85.19-3.7.19-5.55.28-3.7.15-7.4.26-11.1.27s-7.39-.08-11.09-.22c-1.85-.08-3.7-.07-5.55-.25a17.78 17.78 0 0 1-5.55-1.43v-1a17.72 17.72 0 0 1 5.54-1.46c1.85-.19 3.7-.18 5.55-.28 3.7-.15 7.39-.25 11.09-.27s7.4.08 11.1.22c1.85.08 3.7.07 5.55.25a17.78 17.78 0 0 1 5.55 1.43z"/><path class="cls-11" d="M117 339.58h536.28v9.64a19.55 19.55 0 0 1-19.55 19.55h-501A15.75 15.75 0 0 1 117 353v-13.42z"/><path class="cls-7" d="M420.56 354.17h-70.83A12.16 12.16 0 0 1 337.56 342v-2.43h95.16V342a12.16 12.16 0 0 1-12.16 12.17z"/></g></g></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/jetpack-design.svg b/plugins/jetpack/images/jetpack-design.svg
deleted file mode 100644
index 1f9a6154..00000000
--- a/plugins/jetpack/images/jetpack-design.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="215" height="133" viewBox="0 0 215 133" xmlns="http://www.w3.org/2000/svg"><title>design &amp; customization image</title><g fill="none" fill-rule="evenodd"><path d="M141.14 58.004v41.725h25.726V55.355H143.81a2.657 2.657 0 0 0-2.67 2.649z"/><path d="M129 29.455v-9.128h-28.148c.192.33.385.673.55 1.03 3.18 6.657.344 14.618-6.317 17.816l-.152.068-.234.11c-.55.247-1.129.453-1.707.618l-.261.068c-.097.028-.207.055-.303.083-.151.04-.317.068-.468.11-.275-.495-.358-1.744-.413-2.457-.083-1.167-.124-1.812-.592-2.004-.743-.302-1.72.466-2.381 1.88a6.266 6.266 0 0 0-.592 2.786c-7.378-.727-12.76-7.288-12.03-14.631a13.002 13.002 0 0 1 1.239-4.42c.165-.357.358-.686.55-1.03H48.464V67.75c4.226.082 12.54-1.469 12.65 2.443V56.07h54.383v16.758c4.336-.027 8.7 1.002 13.021.289a.344.344 0 0 1 .413.26c.427 2.526 2.092 25.351 2.271 27.616.152 2.059.496 4.077.07 6.122a.368.368 0 0 1-.345.247c-1.555.082-3.11.288-4.666.274-1.46 0-7.006-.15-7.405-.288-.496-.178-2.877.398-4.102.48-1.17.07-5.795.385-6.937.412-1.432.028-2.932-.014-2.974-1.386-.013-.769-.743-6.314-.633-7.11H61.54c0 .179-8.836-.014-13.076-.055v12.504h127.17V29.455H129zm37.866 70.26H141.14V57.99a2.654 2.654 0 0 1 2.657-2.649h23.069v44.375z" fill="#F6F6F6" fill-rule="nonzero"/><path d="M100.838 20.314a9.124 9.124 0 0 0-.495-.769c-4.185-6.094-12.526-7.659-18.637-3.486a13.386 13.386 0 0 0-3.497 3.486c-.179.247-.33.508-.495.782-.193.33-.386.673-.55 1.03-3.18 6.67-.331 14.659 6.358 17.83 1.39.658 2.89 1.07 4.433 1.22a6.121 6.121 0 0 1 .591-2.785c.661-1.4 1.638-2.17 2.382-1.88.468.191.523.836.592 2.003.055.714.137 1.963.412 2.457.166-.027.317-.069.468-.11a9.08 9.08 0 0 0 .303-.082l.262-.069c.578-.165 1.156-.37 1.707-.617l.234-.11.151-.069c6.69-3.17 9.525-11.145 6.332-17.802-.166-.357-.358-.686-.551-1.03z" fill="#00BE28" fill-rule="nonzero"/><path d="M166.825 55.451h-23.056a2.654 2.654 0 0 0-2.656 2.649v41.725h25.712V55.451z"/><path fill="#D8DEE4" fill-rule="nonzero" d="M128.972 9.759V29.55h53.778V9.759z"/><path d="M52.208 87.253l7.158-.055.523 5.669-5.836-.522s-2.313-.467-1.845-5.092z" fill="#F6F6F6" fill-rule="nonzero"/><path d="M50.708 21.343h-2.312a.921.921 0 0 1-.923-.92v-2.305a.921.921 0 0 1 1.845 0v1.386h1.39a.921.921 0 0 1 0 1.84zm-2.312-6.986a.921.921 0 0 1-.923-.92V8.743a.921.921 0 0 1 1.845 0v4.694c0 .508-.413.92-.922.92zm1.252-9.128a.921.921 0 0 1-.77-1.427 8.532 8.532 0 0 1 4.046-3.24.932.932 0 0 1 1.198.536.928.928 0 0 1-.537 1.194 6.684 6.684 0 0 0-3.166 2.54.922.922 0 0 1-.77.397zm124.664-.027a.937.937 0 0 1-.77-.412 6.691 6.691 0 0 0-3.18-2.525.923.923 0 0 1-.537-1.194.927.927 0 0 1 1.198-.536 8.396 8.396 0 0 1 4.06 3.226.922.922 0 0 1-.248 1.276.878.878 0 0 1-.523.165zm-8.258-3.363h-4.708a.921.921 0 0 1-.922-.92c0-.507.413-.919.922-.919h4.708a.921.921 0 0 1 0 1.84zm-9.401 0h-4.708a.921.921 0 0 1-.922-.92c0-.507.413-.919.922-.919h4.694a.92.92 0 0 1 .014 1.84zm-9.401 0h-4.708a.921.921 0 0 1-.922-.92c0-.507.413-.919.922-.919h4.708a.921.921 0 0 1 0 1.84zm-9.415 0h-4.708a.921.921 0 0 1-.922-.92c0-.507.413-.919.922-.919h4.708a.921.921 0 0 1 0 1.84zm-9.401 0h-4.708a.921.921 0 0 1-.922-.92c0-.507.413-.919.922-.919h4.694a.92.92 0 0 1 .014 1.84zm-9.401 0h-4.708a.921.921 0 0 1-.922-.92c0-.507.413-.919.922-.919h4.708a.921.921 0 0 1 0 1.84zm-9.402 0h-4.707a.921.921 0 0 1-.922-.92c0-.507.413-.919.922-.919h4.707a.921.921 0 0 1 0 1.84zm-9.414 0h-4.694a.921.921 0 0 1-.922-.92c0-.507.413-.919.922-.919h4.707c.51 0 .923.412.923.92a.942.942 0 0 1-.936.92zm-9.401 0H86.11a.921.921 0 0 1-.922-.92c0-.507.413-.919.922-.919h4.708a.921.921 0 0 1 0 1.84zm-9.402 0H76.71a.921.921 0 0 1-.922-.92c0-.507.413-.919.922-.919h4.707a.921.921 0 0 1 0 1.84zm-9.4 0h-4.708a.921.921 0 0 1-.922-.92c0-.507.413-.919.922-.919h4.707a.921.921 0 0 1 0 1.84zm-9.415 0h-4.708a.921.921 0 0 1-.922-.92c0-.507.413-.919.922-.919h4.708a.921.921 0 0 1 0 1.84z" fill="#E1E2E2" fill-rule="nonzero"/><path d="M115.47 107.484s-.661 14.234-2.808 22.936l-12.609.164s-1.018-.645.33-1.317c1.405-.7 5.176-1.455 5.603-2.306.826-1.647.495-18.557.495-18.557m13.889-.48s.66 13.3 2.808 22.015l11.025.165s1.019-.645-.33-1.318c-1.404-.7-5.176-1.455-5.603-2.306-.825-1.647 1.61-19.49 1.61-19.49" fill="#B0B5B8" fill-rule="nonzero"/><path d="M92.442 40.71s.289.247.399-.714c-.427.124-.867.22-1.294.288.193.37.468.563.895.426z"/><path d="M92.442 40.71c-.427.137-.702-.055-.895-.426-.743.124-1.5.192-2.257.192-.276 0-.537-.013-.812-.027.096 1.496.88 3.047 2.931 4.118l1.5.81 2.506-1.538c.261-2.086-.18-3.582-.647-4.53a13.29 13.29 0 0 1-1.927.687c-.11.96-.4.714-.4.714z" fill="#B0B5B8" fill-rule="nonzero"/><path d="M91.547 40.284c-.592-1.153-.317-4.035-.757-4.213-.812-.33-2.478 1.935-2.312 4.378.261.014.536.027.812.027.757 0 1.514-.068 2.257-.192z" fill="#B0B5B8" fill-rule="nonzero"/><path d="M125.641 87.898a.46.46 0 0 1-.454-.467c0-.233.18-.411.4-.439l5.106-.549a.466.466 0 1 1 .151.92h-.055l-5.106.549-.042-.014z" fill="#6F93AD" fill-rule="nonzero"/><path d="M129.179 90.63a3.344 3.344 0 0 1-2.368-.906 2.573 2.573 0 0 1-.825-2.032c0-.247.206-.44.454-.44h.041a.47.47 0 0 1 .44.481 1.72 1.72 0 0 0 .551 1.318 2.483 2.483 0 0 0 1.968.645l.895-.247a.46.46 0 0 1 .564.33.459.459 0 0 1-.33.562l-.963.261c-.166.014-.29.027-.427.027z" fill="#6F93AD" fill-rule="nonzero"/><path d="M103.729 60.2a.463.463 0 0 1-.468-.467c0-.178.11-.343.275-.425l3.992-1.784a.457.457 0 0 1 .619.192.454.454 0 0 1-.193.617c-.014.014-.027.014-.041.028l-3.992 1.784a.345.345 0 0 1-.192.055z" fill="#204A69" fill-rule="nonzero"/><path d="M108.698 32.873c.027.549.178.96.371 1.07.124.082.33-.014.482-.11a5.97 5.97 0 0 1-.041-.7l-.812-.26zm.522-1.551a1.4 1.4 0 0 0-.412.603l.715.248c.028-.302.055-.59.11-.879a.494.494 0 0 1-.137-.096.71.71 0 0 0-.275.124z"/><path d="M113.377 37.622a2.781 2.781 0 0 1-1.404-2.361l.138-1.25-1.665-.548a9.6 9.6 0 0 0 .165 1.262c.454 2.17.99 3.871 3.4 4.255a.452.452 0 0 1 .385.398l.303 2.526a.461.461 0 0 1-.4.508h-.054a.445.445 0 0 1-.29-.11v1.167l5.782.302V38.61c-.248.123-.51.22-.785.288-2.436.577-4.322-.576-5.575-1.276zm4.969-3.597l-1.486-3.98s-1.969-1.098-3.827-.988c.95 2.21 2.905 4.365 5.313 4.968zm-7.68-3.198a8.335 8.335 0 0 0-.234 1.648l1.775.59.207-1.99c.014 0-1.06.137-1.748-.248z" fill="#B0B5B8" fill-rule="nonzero"/><path d="M121.843 33.737a5.558 5.558 0 0 1-3.497.275c-2.408-.604-4.35-2.76-5.299-4.969-.523-1.235-.743-2.498-.564-3.514-.923.714-1.707 1.88-2.285 3.651a3.9 3.9 0 0 0-.097.371c-.096.247-.178.508-.261.769a.948.948 0 0 0-.55-.042c-.62.138-1.35.77-1.487 1.88-.11.893.027 2.1.77 2.554.18.11.386.164.592.164.18 0 .345-.04.51-.096.014.042.014.083.027.11.468 2.251 1.129 4.324 3.813 4.914l.262 2.196a.46.46 0 0 0 .454.412h.055c.248-.028.44-.261.399-.508l-.303-2.526a.452.452 0 0 0-.385-.398c-2.395-.384-2.946-2.086-3.4-4.255a9.6 9.6 0 0 1-.165-1.262l1.665.549-.137 1.249a2.76 2.76 0 0 0 1.404 2.36c1.252.7 3.138 1.854 5.547 1.29.275-.068.537-.164.784-.287 1.638-.838 2.56-2.951 2.85-5.257a3.109 3.109 0 0 1-.702.37zm-12.774.206c-.179-.11-.344-.521-.371-1.07l.812.26c0 .234.013.467.04.7-.164.096-.357.192-.48.11zm.454-1.77l-.715-.248c.082-.233.22-.452.413-.603a.742.742 0 0 1 .275-.138.494.494 0 0 0 .137.096c-.055.302-.082.604-.11.893zm2.684.892l-1.775-.59a8.335 8.335 0 0 1 .234-1.648c.688.385 1.762.248 1.762.248l-.22 1.99z" fill="#204A69" fill-rule="nonzero"/><path d="M113.9 23.635c-.812.357-1.266 1.043-1.417 1.908-.661 3.651 3.895 10.445 9.36 8.194.247-.096.495-.22.715-.357 5.437-3.198-2.078-12.613-8.658-9.745z" fill="#BBC9D5" fill-rule="nonzero"/><path d="M37.907 85.455h20.674c.647 0 1.17-.522 1.17-1.167v-.055l-.592-13.711a.89.89 0 0 0-.88-.851H37.631l.275 13.986" fill="#969CA1" fill-rule="nonzero" opacity=".26"/><path d="M59.793 92.88c-.386-2.196-.565-4.392-.744-6.602l-.11-1.66-.055-.824-.014-.206v-.274c.014-.234.11-.467.262-.66a1.48 1.48 0 0 1 1.101-.52l.84-.014 1.665-.014 1.666.014.84.013a1.48 1.48 0 0 1 1.1.522c.152.178.248.412.262.645l.014.425.041.824.069 1.66c.082 2.21.151 4.42.11 6.63 0 .096-.096.179-.193.179a.19.19 0 0 1-.179-.151c-.289-2.196-.468-4.406-.647-6.602l-.123-1.647-.056-.824-.027-.398c0-.041-.028-.082-.055-.11a.533.533 0 0 0-.372-.15l-.812.013-1.665.014-1.666-.014h-.812a.533.533 0 0 0-.372.151c-.027.027-.04.069-.055.096v.137l.014.206.041.824.083 1.66c.055 2.21.138 4.42 0 6.644 0 .055-.055.082-.096.082-.014 0-.042-.027-.055-.069z" fill="#CCCED0" fill-rule="nonzero"/><path fill="#F6F6F6" fill-rule="nonzero" d="M64.94 90.3l-.344-6.08h-3.62l.344 6.066z"/><path d="M54.053 96.23a2.87 2.87 0 0 1 1.252-.371 12.56 12.56 0 0 1 1.253-.055c.413.014.826.041 1.252.069.427.04.84.123 1.253.274a.203.203 0 0 1 .11.26.15.15 0 0 1-.11.11c-.4.152-.826.234-1.253.275-.412.028-.825.055-1.252.069-.413 0-.826-.014-1.253-.055a2.883 2.883 0 0 1-1.252-.37c-.055-.028-.069-.097-.041-.152.013-.013.027-.04.04-.055zm4.363-4.077c-2.367-.165-4.735-.22-7.116-.26l-3.551-.042-1.776-.014-.895-.013a2.13 2.13 0 0 1-.715-.124 2.304 2.304 0 0 1-1.583-2.21l-.028-2.402c-.316-.013-.633-.027-.95-.027l-.027 2.43a3.315 3.315 0 0 0 2.244 3.197c.33.11.688.151 1.032.165l.895-.014 1.775-.014 3.551-.04c2.368-.042 4.735-.097 7.117-.261.096-.014.179-.097.165-.206.014-.083-.055-.151-.138-.165z" fill="#F6F6F6" fill-rule="nonzero"/><path d="M54.989 92.153c-1.184-.165-2.106-1.043-2.285-2.1-.069-.467-.014-1.18-.014-1.784l.028-1.345h-1.033l.028 1.345c.041.645-.041 1.207.11 1.976a3.065 3.065 0 0 0 1.184 1.757 2.88 2.88 0 0 0 1.968.522.205.205 0 0 0 .165-.165c.028-.096-.055-.192-.151-.206z" fill="#F6F6F6" fill-rule="nonzero"/><path d="M59.462 86.663c-.248.068-.51.096-.77.096h-.732c-3.88.014-7.776.055-11.658.096-4.198.069-8.382.15-12.58.288a.094.094 0 0 0-.097.096c0 .055.042.096.097.096 4.198.138 8.382.22 12.58.289 4.199.04 8.383.096 12.581.096h.014c.027 0 .055 0 .082-.014.152-.014.303-.028.468-.055l.014-.988z" fill="#CCCED0" fill-rule="nonzero"/><path d="M61.981 81.557l-.33-8.4-.083-2.1c-.014-.37-.014-.659-.055-1.098a2.989 2.989 0 0 0-2.505-2.54 4.306 4.306 0 0 0-.84-.04c-.027 0-.068-.014-.096-.014l-21.885.082-1.363.014a2.187 2.187 0 0 0-1.542.535 2.15 2.15 0 0 0-.743 1.469c-.014.535.014.933.028 1.4l.137 5.449c.083 3.637.207 7.274.344 10.898 0 .096.083.178.18.178a.182.182 0 0 0 .178-.178c.014-3.637.014-7.275-.027-10.912l-.042-5.449c0-.44-.013-.947 0-1.318a1.32 1.32 0 0 1 .482-.892c.275-.233.633-.343.991-.302h.537l.22 7.55c.069 2.662.193 5.311.303 7.974 0 .096.083.178.193.178.096 0 .179-.082.179-.192 0-2.663.013-5.325-.028-7.974l-.082-7.522h.04l21.377.069.014-.014h.289c.316-.014.647 0 .963.027a2 2 0 0 1 1.35.892c.15.234.233.495.275.77.027.246.027.672.055 1.001l.096 2.1.193 4.2.192 4.2.042.837a5.91 5.91 0 0 1 .977.028l-.014-.906z" fill="#CCCED0" fill-rule="nonzero"/><path d="M59.793 92.88c-.386-2.196-.565-4.392-.744-6.602l-.11-1.66-.055-.824-.014-.206v-.274c.014-.234.11-.467.262-.66a1.48 1.48 0 0 1 1.101-.52l.84-.014 1.665-.014 1.666.014.84.013a1.48 1.48 0 0 1 1.1.522c.152.178.248.412.262.645l.014.425.041.824.069 1.66c.082 2.21.151 4.42.11 6.63 0 .096-.096.179-.193.179a.19.19 0 0 1-.179-.151c-.289-2.196-.468-4.406-.647-6.602l-.123-1.647-.056-.824-.027-.398c0-.041-.028-.082-.055-.11a.533.533 0 0 0-.372-.15l-.812.013-1.665.014-1.666-.014h-.812a.533.533 0 0 0-.372.151c-.027.027-.04.069-.055.096v.137l.014.206.041.824.083 1.66c.055 2.21.138 4.42 0 6.644 0 .055-.055.082-.096.082-.014 0-.042-.027-.055-.069z" fill="#CCCED0" fill-rule="nonzero"/><path fill="#F6F6F6" fill-rule="nonzero" d="M64.94 90.3l-.344-6.08h-3.62l.344 6.066z"/><path d="M54.053 96.23a2.87 2.87 0 0 1 1.252-.371 12.56 12.56 0 0 1 1.253-.055c.413.014.826.041 1.252.069.427.04.84.123 1.253.274a.203.203 0 0 1 .11.26.15.15 0 0 1-.11.11c-.4.152-.826.234-1.253.275-.412.028-.825.055-1.252.069-.413 0-.826-.014-1.253-.055a2.883 2.883 0 0 1-1.252-.37c-.055-.028-.069-.097-.041-.152.013-.013.027-.04.04-.055zM.179 131.682c17.866-.507 35.746-.617 53.612-.74l53.613-.124c35.746.11 71.492.055 107.224.672a.366.366 0 0 1 .344.385.37.37 0 0 1-.344.343c-35.746.631-71.492.562-107.224.672l-53.613-.123c-17.866-.124-35.746-.234-53.612-.742a.182.182 0 0 1-.179-.178c0-.082.083-.165.179-.165z" fill="#F6F6F6" fill-rule="nonzero"/><path d="M106.647 125.876a.463.463 0 0 1-.468-.466c0-.041 0-.096.013-.137.675-2.197.386-6.671.097-10.98-.138-2.128-.276-4.132-.29-5.875a.46.46 0 0 1 .455-.467.48.48 0 0 1 .468.453c.014 1.716.151 3.72.289 5.833.289 4.406.578 8.95-.138 11.31a.43.43 0 0 1-.426.33zm16.531 4.516a.449.449 0 0 1-.455-.398c-.013-.11-1.665-11.145-2.808-22.03a.465.465 0 0 1 .386-.535.466.466 0 0 1 .537.385v.055c1.128 10.87 2.78 21.878 2.794 21.988a.462.462 0 0 1-.386.521c-.027.014-.055.014-.068.014z" fill="#204A69" fill-rule="nonzero"/><path d="M174.657 9.663v-.947a.921.921 0 1 1 1.844 0V9.73" fill="#E1E2E2" fill-rule="nonzero"/><path d="M143.329 29.565v-.234a3.557 3.557 0 0 1-1.225.618s1.032-3.747-.055-4.008c-1.088-.26-5.286 7.151-5.286 7.151l1.514 3.624s1.624-1.455 6.869-4.132c1.183-1.111 1.885-2.14 2.243-3.02h-4.06z" fill="#B0B5B8" fill-rule="nonzero"/><path d="M141.099 35.096a.46.46 0 0 1-.44-.48.473.473 0 0 1 .44-.44c.523-.013 4.13-1.894 5.891-5.243a.463.463 0 0 1 .62-.22.46.46 0 0 1 .22.618c0 .014-.014.028-.014.028-1.844 3.486-5.767 5.737-6.717 5.737zm-2.836-2.965a.444.444 0 0 1-.454-.466c0-.138.055-.261.152-.343.385-.33 1.004-1.593 1.541-2.69 1.115-2.238 1.624-3.157 2.271-3.24a.67.67 0 0 1 .606.247c.633.741.482 2.54.303 3.624.385-.165.826-.426 1.073-.755a.453.453 0 0 1 .634-.137.45.45 0 0 1 .137.631c-.014.014-.014.027-.027.041-.716 1.002-2.258 1.345-2.313 1.359a.468.468 0 0 1-.55-.55c.234-1.056.399-2.744.151-3.417-.372.44-1.018 1.716-1.459 2.608-.647 1.29-1.252 2.512-1.762 2.979a.482.482 0 0 1-.303.11z" fill="#204A69" fill-rule="nonzero"/><path d="M92.07 40.38c.014.014.055.042.193 0 .082-.027.124-.123.151-.274-.151.041-.316.069-.468.11.014.055.07.11.124.165zm-1.28-4.31c.427.179.165 3.061.757 4.214.124-.027.262-.04.385-.068-.275-.494-.357-1.743-.412-2.457-.083-1.167-.124-1.812-.592-2.004-.744-.302-1.72.467-2.382 1.88a6.266 6.266 0 0 0-.591 2.787l.509.04c-.152-2.456 1.514-4.72 2.326-4.391z"/><path d="M92.07 40.38c.014.014.055.042.193 0 .082-.027.124-.123.151-.274-.151.041-.316.069-.468.11.014.055.07.11.124.165z"/><path d="M92.07 40.38c.014.014.055.042.193 0 .082-.027.124-.123.151-.274-.151.041-.316.069-.468.11.014.055.07.11.124.165zm.344-.274l.303-.082c-.11.027-.206.055-.303.082zm2.67-.947l-.15.069.15-.07z"/><path d="M59.779 19.504h-4.542a.921.921 0 0 0-.923.92c0 .507.413.92.923.92h4.542a.921.921 0 0 0 0-1.84zm9.084 0h-4.542a.921.921 0 0 0-.922.92c0 .507.413.92.922.92h4.542a.921.921 0 0 0 0-1.84zm45.395 0h-4.542a.921.921 0 0 0-.922.92c0 .507.413.92.922.92h4.542a.921.921 0 0 0 0-1.84zm13.613 0a.921.921 0 0 0-.922.92c0 .507.413.92.922.92h1.101v-1.84h-1.1zm-4.541-.769h-4.543a.921.921 0 0 0-.922.92c0 .508.413.92.922.92h4.542a.921.921 0 0 0 0-1.84zm-45.396.769h-4.542a.921.921 0 0 0-.922.92c0 .507.413.92.922.92h3.771c.303-.632.647-1.236 1.046-1.799a.89.89 0 0 0-.275-.041zm27.24 0h-4.542a1.05 1.05 0 0 0-.29.041c.4.577.744 1.18 1.047 1.798h3.785a.921.921 0 0 0 0-1.84z" fill="#E1E2E2" fill-rule="nonzero"/><path d="M92.07 40.38c.014.014.055.042.193 0 .082-.027.124-.123.151-.274-.151.041-.316.069-.468.11.014.055.07.11.124.165z"/><path d="M92.717 40.024l-.303.082c-.027.137-.069.247-.151.274-.124.042-.165.014-.193 0a.404.404 0 0 1-.138-.164c-.275-.494-.357-1.743-.412-2.457-.083-1.167-.124-1.812-.592-2.004-.744-.302-1.72.467-2.382 1.88a6.266 6.266 0 0 0-.591 2.787c.055 1.715.908 3.486 3.207 4.68a.578.578 0 0 0 .22.055.444.444 0 0 0 .454-.467.442.442 0 0 0-.248-.398c-3.29-1.716-2.808-4.502-2.45-5.627.4-1.236 1.06-1.894 1.35-2.018.054.398.096.796.123 1.194.083 1.318.193 2.814.95 3.322a1.1 1.1 0 0 0 .99.11c.675-.22.813-.742.8-1.4-.083.027-.221.068-.359.11l-.137.04h-.138z" fill="#204A69" fill-rule="nonzero"/><path fill="#204A69" fill-rule="nonzero" d="M92.84 39.996l.138-.041-.261.069zm1.928-.7l-.083.041c-.165.083-.358.151-.454.192.44 1.044.66 2.169.633 3.295 0 .26.207.466.455.466a.48.48 0 0 0 .467-.453 9.13 9.13 0 0 0-.715-3.678l-.152.068-.151.07z"/><path fill="#204A69" fill-rule="nonzero" d="M94.92 39.227l-.235.11.083-.04z"/><path d="M108.753 108.912c-1.57 0-2.987-.192-3.744-.769a1.54 1.54 0 0 1-.647-1.18c-.028-.412-.083-1.016-.138-1.77-.413-4.681-1.376-15.648.606-28.124a.467.467 0 0 1 .537-.371c.234.041.399.26.371.508-1.954 12.353-.99 23.237-.578 27.89.069.782.124 1.386.151 1.798a.643.643 0 0 0 .29.494c1.596 1.222 7.97.22 10.295-.26a.466.466 0 0 1 .537.384.458.458 0 0 1-.344.521c-.62.138-4.28.879-7.336.879zm13.227-.687c-1.707 0-3.152-.15-3.799-.576-1.431-.947-1.156-13.931-.963-19.463 0-.247.179-.439.426-.453h.055c.262.014.455.22.44.48-.288 8.552-.15 17.871.579 18.695 1.266.837 8.01.247 12.237-.357l-.799-14.041a.46.46 0 0 1 .44-.48.435.435 0 0 1 .482.384v.04l.826 14.454a.462.462 0 0 1-.399.48c-.784.124-5.78.837-9.525.837zm7.984-22.839a.452.452 0 0 1-.455-.425l-.99-12.161a.461.461 0 0 1 .426-.494c.261-.014.482.165.495.425l.991 12.161a.461.461 0 0 1-.426.494h-.041z" fill="#6F93AD" fill-rule="nonzero"/><path d="M142.324 35.81l-4.446-4.598c-2.175 4.337-8.63 10.788-13.503 11.996a5.975 5.975 0 0 1-.344-.137c-1.57-.577-10.53-1.18-12.663-.275-1.377.577-2.326 1.03-2.96 1.62-4.225 3.308-6.882 6.162-6.882 6.162l-5.175-8.043-4.611 3.28s3.95 14.454 10.048 14.124a14.78 14.78 0 0 0 5.753-1.55l.51 14.52 20.426-.356-.496-20.808c7.598-3.83 14.343-15.935 14.343-15.935z" fill="#BBC9D5" fill-rule="nonzero"/><path d="M107.115 73.445a.46.46 0 0 1-.44-.48.473.473 0 0 1 .44-.44l21.857-.22a.446.446 0 0 1 .468.426v.042a.46.46 0 0 1-.454.466l-21.871.206zM103.729 60.2a.463.463 0 0 1-.468-.467c0-.178.11-.343.275-.425l3.992-1.784a.457.457 0 0 1 .619.192.454.454 0 0 1-.193.617c-.014.014-.027.014-.041.028l-3.992 1.784a.345.345 0 0 1-.192.055z" fill="#204A69" fill-rule="nonzero"/><path d="M83.522 100.141h-.068l-13.283.206-13.407.137-26.964.11a.5.5 0 0 1-.51-.508l-.013-7.508c0-.288.234-.521.523-.521l26.785.055 26.786.192a.27.27 0 0 1 .262.26l-.11 7.577zm-.261-.123v-.069l-.138-7.384.262.26-26.786.206-26.785.055.523-.521-.014 7.508-.51-.508 26.621.11 13.38.137 13.447.206z" fill="#CCCED0" fill-rule="nonzero"/><path d="M29.896 97.314c.248 2.731.303 5.462.372 8.194l.055 8.194c-.055 5.463-.028 10.925-.344 16.388-.014.096-.096.179-.207.165-.096-.014-.165-.082-.165-.165-.316-5.463-.289-10.925-.33-16.388l.055-8.194c.069-2.732.11-5.463.372-8.194 0-.055.04-.096.096-.096.055 0 .096.04.096.096zm53.585 2.772c.262 2.498.303 4.996.372 7.508l.055 7.508c-.055 4.996-.028 10.006-.33 15.002a.188.188 0 0 1-.207.165c-.096-.014-.165-.083-.165-.165-.317-4.996-.29-10.006-.344-15.002l.055-7.508c.069-2.498.124-4.996.371-7.508 0-.055.042-.096.097-.096s.096.041.096.096z" fill="#CCCED0" fill-rule="nonzero"/></g></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/jetpack-google-analytics.svg b/plugins/jetpack/images/jetpack-google-analytics.svg
deleted file mode 100644
index eb9ab508..00000000
--- a/plugins/jetpack/images/jetpack-google-analytics.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 1168"><defs><style>.cls-1{fill:#CCCED0}.cls-2{fill:#6F93AD}.cls-3{fill:#204A69}.cls-4{fill:#46799A}.cls-5{fill:#CCCED0}.cls-6{fill:#00be28}.cls-7{fill:none}</style></defs><title>jetpack-google-analytics</title><g id="jetpack-google-analytics"><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1-2"><path class="cls-1" d="M576 1107.42c-27 2.69-54 3.48-81 3.7a650.47 650.47 0 0 1-80.89-3.7 7.52 7.52 0 0 1 0-14.92 650.47 650.47 0 0 1 80.89-3.7c27 0 54 1 81 3.7a7.52 7.52 0 0 1 0 14.92zm411.26-968.81c44.87-1.24 89.74-2.36 134.62-2.81h17.27a82.54 82.54 0 0 1 18.85 2.36 93 93 0 0 1 33.66 16 94.7 94.7 0 0 1 37.58 64 316.4 316.4 0 0 1 .78 35.11v101c-.67 44.88-1.34 89.75-3 134.62a7.52 7.52 0 0 1-7.73 7.3 7.64 7.64 0 0 1-7.18-7.3c-1.68-44.87-2.35-89.74-3-134.62V220.84a72.67 72.67 0 0 0-28.49-49.36 76.71 76.71 0 0 0-42-15h-16.52c-44.87 0-89.74-1.45-134.62-2.69a7.63 7.63 0 0 1-7.29-7.74 7.51 7.51 0 0 1 7.07-7.44zm-573.15 0c31.19-1.35 62.27-2.47 93.45-2.47s62.38-.56 93.56-.9 62.27 0 93.45 0 62.38 1.35 93.45 3a7.52 7.52 0 1 1 0 15c-31.07 1.69-62.26 2.36-93.45 3s-62.37.79-93.45.56-62.37 0-93.56-.89-62.26-1.35-93.45-2.7a7.52 7.52 0 0 1 0-15z"/><path class="cls-1" d="M406.6 1100c-1.24-45.77-2.25-91.43-2.69-137.2s-1-91.43-1-137.09 0-91.43.56-137.09 1.34-91.43 3-137.2a7.52 7.52 0 0 1 14.92 0c1.79 45.77 2.46 91.43 3.14 137.2s.78 91.43.78 137.09 0 91.43-.89 137.09-1.57 91.43-2.81 137.2a7.52 7.52 0 0 1-14.92 0zm517.5-735.46c16.27-1.34 32.53-2.13 48.8-2.69s32.53-.56 48.8-.9 32.53 0 48.8.57 32.53 1.34 48.8 3a7.52 7.52 0 0 1 0 15c-16.27 1.68-32.54 2.35-48.8 3s-32.54.78-48.8.56-32.53 0-48.8-.9-32.53-1.35-48.8-2.69a7.52 7.52 0 0 1 0-15zm-51.16 117.35c16.27-1.46 32.54-2.13 48.8-2.69s32.54 0 48.8-.9 32.54 0 48.8 0 32.54 1.46 48.8 3.14a7.52 7.52 0 0 1 6.74 8.22v.08a7.39 7.39 0 0 1-6.73 6.62c-16.26 1.68-32.53 2.36-48.8 3.14s-32.53.79-48.8 0-32.53 0-48.8-1-32.53-1.23-48.8-2.69a7.4 7.4 0 0 1-6.85-7.91v-.17a7.51 7.51 0 0 1 6.84-5.84zM540.43 717.7c20.08-1.35 40.16-2.13 60.25-2.7s40.16-.56 60.24-.89 40.16 0 60.24 0 40.16 1.34 60.24 3a7.4 7.4 0 0 1 6.86 7.91v.16a7.42 7.42 0 0 1-6.85 6.85c-20.08 1.79-40.16 2.46-60.24 3.14s-40.16.78-60.24 0-40.16 0-60.24-1-40.17-1.24-60.25-2.69a7.52 7.52 0 0 1 0-14.92zM501.28 835c17.05-1.46 33.66-2.24 51.16-2.8s33.65 0 51.15-.9 33.66 0 51.16 0 33.65 1.34 51 3.14a7.51 7.51 0 0 1 6.85 8.13v.06a7.62 7.62 0 0 1-6.84 6.73c-16.94 1.68-33.65 2.36-51 3s-33.66.78-51.16 0-33.65 0-51.15-.9-33.66-1.34-51.16-2.69a7.52 7.52 0 0 1 0-14.92zm0 117.23a192 192 0 0 1 37.36-3.7 141.07 141.07 0 0 1 37.36 3.7 7.64 7.64 0 0 1 5.54 9.26v.17a7.63 7.63 0 0 1-5.49 5.49 140.65 140.65 0 0 1-37.36 3.7 190.47 190.47 0 0 1-37.36-3.7 7.63 7.63 0 0 1-5.84-9.07 7.63 7.63 0 0 1 5.79-5.81z"/><path class="cls-2" d="M665.85 960.91H827.4V1168H665.85zM909.29 691h161.54v477H909.29zm243.33-111h161.54v588h-161.54z"/><path class="cls-3" d="M665.85 1054.36H827.4V1168H665.85zm243.44-142.25h161.54V1168H909.29zm243.33-99.62h161.54V1168h-161.54z"/><path class="cls-4" d="M723.29 380.59c11.22-20.64 23.11-40.84 35.11-61s24.46-40.05 37.14-60 25.13-39.6 37.8-59.34 26.14-39 40-58a7.63 7.63 0 0 1 10.55-1.57 7.41 7.41 0 0 1 2.13 9.53c-11.22 20.87-22.44 41.06-34.78 61.25s-24.34 40.17-37 59.91-25 39.71-38.14 59.12-26.14 39-39.83 58.22a7.5 7.5 0 0 1-10.43 1.8 7.4 7.4 0 0 1-2.55-9.92zm-200.47-53.74a455.85 455.85 0 0 1 49.59 30.63 352.87 352.87 0 0 1 44.87 36.68 7.63 7.63 0 0 1-8.64 12.23A344.6 344.6 0 0 1 560 375.65 453 453 0 0 1 515.08 339a7.52 7.52 0 0 1 7.74-12.12zm-198.45 127a623.56 623.56 0 0 1 33-57.66 445.3 445.3 0 0 1 39.26-53.74 7.63 7.63 0 0 1 12.57 8.19 430.28 430.28 0 0 1-33.66 57.67A570.55 570.55 0 0 1 336.37 462a7.51 7.51 0 0 1-12-8.19z"/><circle class="cls-5" cx="914.34" cy="87.45" r="31.41"/><circle class="cls-6" cx="914.34" cy="81.28" r="46.11"/><circle class="cls-6" cx="683.13" cy="446.89" r="46.11"/><circle class="cls-6" cx="456.07" cy="279.06" r="46.11"/><circle class="cls-6" cx="291.95" cy="519.25" r="46.11"/></g></g></g><g id="clear_rectangle" data-name="clear rectangle"><path id="Layer_4" data-name="Layer 4" class="cls-7" d="M0 0h1600v1168H0z"/></g></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/jetpack-gutenberg.svg b/plugins/jetpack/images/jetpack-gutenberg.svg
deleted file mode 100644
index 3fca11cd..00000000
--- a/plugins/jetpack/images/jetpack-gutenberg.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 339 176" enable-background="new 0 0 339 176"><style>.st0{fill:#e8eef3}.st1{fill:#fff}.st2{fill:#CCCED0}.st3{fill:none;stroke:#BBC9D5;stroke-width:.999;stroke-linecap:round;stroke-linejoin:round}.st4{fill:#BBC9D5}.st5{fill:none;stroke:#204A69;stroke-width:.999;stroke-linecap:round;stroke-linejoin:round}.st6{fill:#204A69}.st7{fill:none;stroke:#6F93AD;stroke-width:.999;stroke-linecap:round;stroke-linejoin:round}.st8{fill:#6F93AD}.st9{filter:url(#Adobe_OpacityMaskFilter)}.st10{mask:url(#b_2_);fill:#BBC9D5}.st11{fill:#204A69}.st12,.st13{fill:none;stroke:#fff;stroke-width:.999;stroke-linecap:round;stroke-linejoin:round}.st13{stroke:#204A69;stroke-width:1.1039}.st14{fill:#F6F6F6}.st15,.st16{fill:none;stroke:#CCCED0;stroke-width:2.2898;stroke-linecap:round;stroke-linejoin:round}.st16{stroke-dasharray:5.8259,5.8259}.st17{fill:#CCCED0}.st18{fill:#e1e7ee}.st19,.st20,.st21{fill:none;stroke:#fff;stroke-width:2.2898;stroke-linecap:round;stroke-linejoin:round}.st20,.st21{stroke-dasharray:5.2783,5.2783}.st21{stroke-dasharray:6.0301,6.0301}.st22{fill:#00be28}.st23{opacity:.26;fill:#969CA1}</style><title>Page 1</title><path class="st0" d="M13.3 17.5c2.7-.1 5.4-.2 8.1-.2 2.7-.1 5.4-.1 8.1-.1l-.5.4c.8-2.5 1.9-4.9 3.4-7.1 1.5-2.2 3.4-4.3 6-5.4 5.5-2.3 12.2 1.2 13.5 6.8.1.7.2 1.4 0 2.2-.2.7-.6 1.5-1.3 2-.7.5-1.6.6-2.3.6-.7 0-1.7-.2-2.3-.9-.6-.8-.6-1.7-.3-2.4.2-.7.7-1.3 1.2-1.9 1-1.1 2.3-1.8 3.6-2.2 1.4-.4 2.8-.6 4.2-.4 1.4.1 2.9.6 4 1.5s1.8 2.3 2.1 3.6c.3 1.3.4 2.7.2 4l-.5-.6c5.8 0 11.7.1 17.5.3.1 0 .2.1.2.2s-.1.2-.2.2c-6-.1-11.8 0-17.7.1-.3 0-.5-.2-.6-.5v-.1c.2-2.4-.2-5.1-2-6.6-.9-.7-2.1-1.1-3.3-1.2-1.2-.1-2.5 0-3.7.4-1.2.4-2.3 1-3 1.9-.4.4-.7.9-.9 1.4-.2.5-.1 1 .1 1.2.4.6 2.1.6 2.8.1.8-.5 1-1.7.7-2.8-.5-2.3-2.2-4.3-4.4-5.4-1.1-.6-2.3-.9-3.6-1-1.2 0-2.5 0-3.6.6-2.3.8-4.1 2.7-5.5 4.8-1.4 2.1-2.6 4.4-3.4 6.8-.1.2-.3.3-.5.3-2.7 0-5.4-.1-8.1-.1-2.7 0-5.4-.2-8.1-.2-.1 0-.1-.1-.1-.1.1-.1.1-.2.2-.2"/><path class="st1" d="M153 163s71-46.3 181.8-50M153 145c10.6 4 17 7 17 7"/><path class="st2" d="M153.1 162.8c3.3-2.1 6.8-4.2 10.3-6.1 1.7-1 3.5-1.9 5.3-2.8 1.8-.9 3.5-1.8 5.3-2.7 3.6-1.7 7.2-3.5 10.8-5 3.6-1.6 7.3-3.2 11-4.7l5.6-2.2c1.8-.7 3.7-1.4 5.6-2 3.8-1.3 7.5-2.8 11.3-3.9l11.4-3.6 11.5-3.2 2.9-.8 2.9-.7 5.8-1.4c3.9-.9 7.7-1.9 11.7-2.6l11.7-2.3c3.9-.7 7.9-1.2 11.8-1.8 7.9-1.3 15.8-1.9 23.8-2.7 2-.2 4-.4 6-.5l6-.3 11.9-.5c.1 0 .3.1.3.2s-.1.2-.2.3l-11.9.8c-4 .3-7.9.4-11.9.9-7.9.9-15.8 1.6-23.7 3-3.9.6-7.9 1.1-11.8 1.8l-11.7 2.3c-3.9.7-7.8 1.7-11.6 2.6l-5.8 1.4-2.9.7-2.9.8L230 131c-3.8 1.1-7.6 2.4-11.4 3.6-3.8 1.1-7.5 2.6-11.3 3.9-1.9.7-3.8 1.3-5.6 2l-5.5 2.2c-1.8.7-3.7 1.4-5.5 2.2l-5.5 2.3c-3.7 1.5-7.3 3.2-10.9 4.8-1.8.8-3.6 1.7-5.4 2.6-1.8.9-3.6 1.8-5.3 2.7-3.5 1.8-7 3.7-10.4 5.7h-.2c0-.1 0-.2.1-.2"/><path class="st2" d="M153.2 145c1.6.3 3.1.8 4.7 1.3l4.5 1.8c2.9 1.3 5.9 2.6 8.6 4.4.1.1.2.2.1.4-.1.1-.2.1-.3.1-3.1-1-6-2.3-8.9-3.5-1.5-.6-2.9-1.3-4.4-1.9-1.5-.7-2.9-1.4-4.3-2.3-.1 0-.1-.1 0-.2-.1-.1-.1-.1 0-.1"/><path class="st1" d="M.2 131c23-8.9 49.7-9.4 74.9-6.1"/><path class="st2" d="M.2 130.8c5.8-2.7 12-4.5 18.3-5.9 6.3-1.3 12.7-2.2 19.1-2.6 12.8-.7 25.7-.1 38.3 2 .1 0 .2.1.2.3 0 .1-.1.2-.3.2-12.7-1.2-25.5-2-38.2-1.1-6.3.4-12.7 1.1-18.9 2.4-6.2 1.2-12.4 2.9-18.4 4.9-.1 0-.1 0-.2-.1.1 0 .1-.1.1-.1"/><path class="st1" d="M77.3 147l-.2-125.9M246.9 27.1V145H101.1"/><path class="st0" d="M1.4 174.2c28.1-.7 56.2-.9 84.2-1.1l84.2-.2c56.2.2 112.3.1 168.5 1 .3 0 .5.2.5.5s-.2.5-.5.5c-56.2.9-112.3.8-168.5 1l-84.2-.2c-28.1-.2-56.2-.3-84.2-1.1-.1 0-.2-.1-.2-.3 0 .1.1-.1.2-.1"/><path class="st2" d="M281.8 61.1l-1.2-4.2c-3.6.5-5.1-1.4-6.4-4.5-.4-.9-2.1-.7-2.3-1.7-.2-1.3 1.9-2.2 1.8-4.9 0-1.5.3-3.4 1.7-3.7 0 0 6.8 2.8 10.2 6.3 1.5 4.1 2.4 6 2.4 6l1.8 4.2-8 2.5z"/><path class="st1" d="M58.9 118.2c5.7 10.4 6.6 14.6 5.7 20.6-.9 6-6.9 13.7-6.9 13.7"/><path class="st3" d="M58.9 118.2c5.7 10.4 6.6 14.6 5.7 20.6-.9 6-6.9 13.7-6.9 13.7"/><path class="st4" d="M43.1 76.1c-1.6 8.8-1.9 25.3-1.9 25.3l17 .7s3.3-19 1.4-22.5"/><path class="st1" d="M61.1 65.8c1.4 12-3.9 16.1-5.6 13.8"/><path class="st3" d="M61.1 65.8c1.4 12-3.9 16.1-5.6 13.8"/><path class="st1" d="M62 49.2c1.3.8 2.2 2.1 2.4 3.7.4 2.8 2.7 3.5 2.7 4.9 0 1.1-1.9 1.2-2.1 2.2-1 3.4-3.6 5.9-7.5 5.9"/><path class="st5" d="M62 49.2c1.3.8 2.2 2.1 2.4 3.7.4 2.8 2.7 3.5 2.7 4.9 0 1.1-1.9 1.2-2.1 2.2-1 3.4-3.6 5.9-7.5 5.9m4.6-4.8c.5 1.4 2 2 2 2"/><path class="st6" d="M63.5 57.1c-.2 0-.4-.3-.4-.6v-.9c0-.3.2-.5.4-.5s.4.3.4.6v.9c0 .3-.2.5-.4.5m-17 14.1c4.7-2 14.3 16 14.3 16l9.8-16.1 5.5 2.2S71.1 96 61.5 97C52 98 44.3 83.5 44.3 83.5s-3.8-9.7 2.2-12.3"/><path class="st1" d="M42.1 101.2c-4.4 11 .7 73.8.7 73.8h12.8s6.4-60.3 1.9-73.1"/><path class="st3" d="M42.1 101.2c-4.4 11 .7 73.8.7 73.8h12.8s6.4-60.3 1.9-73.1m4.6-52.8c-3.2 2.6-3.5 9.1-4.1 11.9-.8 3.6-2 6.9 1.3 7.1"/><path class="st1" d="M44.9 65.8c-3.3-7.1.3-19 7.9-20.5 2.5-.5 5.6.7 7.1 1.2"/><path class="st3" d="M44.9 65.8c-3.3-7.1.3-19 7.9-20.5 2.5-.5 5.6.7 7.1 1.2M40.2 152l-8.1 11.1 10 10.9"/><path class="st1" d="M70.1 72.6c.3-3.7 1.8-14.4 3.5-13.7 1.7.7.3 5.9.8 7.7.5 1.7 1.2 4.2-.2 7.3"/><path class="st5" d="M70.1 72.6c.3-3.7 1.8-14.4 3.5-13.7 1.7.7.3 5.9.8 7.7.5 1.7 1.2 4.2-.2 7.3m1.9-7.2s.7-2 1-1.5c.3.5-.7 2.9-.7 2.9"/><path class="st1" d="M51.6 60.1c0 3.4 1.4 6.4 3 7.1"/><path class="st3" d="M51.6 60.1c0 3.4 1.4 6.4 3 7.1m-10.5 41.9l4 7"/><path class="st1" d="M47.1 59.3c-2.2 8.3-.8 19.8 7.9 18.5"/><path class="st3" d="M47.1 59.3c-2.2 8.3-.8 19.8 7.9 18.5"/><path class="st1" d="M256.9 96.3l1.1 11.6s6.4 16.4 1.1 10.2c7.1 8.3 15.6-2 15.7-11.6.2-10.6-3.5-17.8-7.7-19.9-2.3-1.1-5.7-.1-7.5 1.7-1.9 2.1-2.9 5-2.7 8"/><path class="st7" d="M256.9 96.3l1.1 11.6s6.4 16.4 1.1 10.2c7.1 8.3 15.6-2 15.7-11.6.2-10.6-3.5-17.8-7.7-19.9-2.3-1.1-5.7-.1-7.5 1.7-1.9 2.1-2.9 5-2.7 8z"/><path class="st3" d="M263.9 81.2c-5.3-.9-7 4.9-7 4.9m3 .1c-2.1-.3-6.4-.3-6.9 2.4-.2 1 .2 2.7 1.3 3.4m7.6-7.8c2.6-2 5.6-3 7.5-.9.8.9.6 3.4-1.3 4.8"/><path class="st5" d="M302.6 120.1c-1.6 10.6 16.3 40.8 16.3 40.8l-8.2 12.2s-15.7-23-18.8-32.5m-14.3-6.7l-7.7 40.6 12.8 1.5 12.2-48"/><path class="st8" d="M286.8 64.3c-9 4.7-8.3 19-9.4 25.4-1.1 6.4-2.5 43.3-2.5 43.3l34-1.3s.9-79.3-22.1-67.4"/><path class="st4" d="M256.2 136l-6 34c-.2 1-1 1.8-2 1.9-1.8.3-4.3 1-4.3 3.2 0 .5 4.4.8 7.8.8 2.2.1 4.3-1.4 4.9-3.6l10.2-33.3"/><g transform="translate(264 133)"><defs><filter id="Adobe_OpacityMaskFilter" filterUnits="userSpaceOnUse" x=".1" y="1.2" width="25.3" height="41.8"><feColorMatrix values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0"/></filter></defs><mask maskUnits="userSpaceOnUse" x=".1" y="1.2" width="25.3" height="41.8" id="b_2_"><g class="st9"><path id="a_2_" class="st1" d="M.1 1.2h25.3V43H.1V1.2z"/></g></mask><path class="st10" d="M.1 6.4L18.6 35c.6.9.5 2-.2 2.7-1.1 1.4-2.4 3.7-1 5.2.4.4 3.7-2.5 6.2-4.8 1.7-1.5 2.1-3.9 1.2-6L9.9 1.2"/></g><path class="st11" d="M253.9 66.7l2.8 8.2c.7 2.1 2.9 3.4 5.2 3.1l7-1.1c0 .1-3.8-13.9-15-10.2"/><path class="st5" d="M275.9 52.1c-.3 1.4-1 2-1 2"/><path class="st1" d="M258 107.5l-7.1 48.5 40-4.8-16.4-45.2-16.5 1.5z"/><path class="st7" d="M258 107.5l-7.1 48.5 40-4.8-16.4-45.2-16.5 1.5z"/><path class="st4" d="M263.1 89.3c-4 1.5-.5 20-.5 20l-3.6 16.3 1.3.3c2.9.7 5.7-1.1 6.6-3.9l3.1-11.2c-.1 0-.1-24.1-6.9-21.5"/><path class="st5" d="M295.4 74.1c1.9 13.9 2.8 17.7-2.7 26.4-2.7 4.3-7.8 9.6-7.8 9.6m1-31s-.1 5.5 0 8m-2 3.5l4-.5m-6 2l2 .9"/><path class="st12" d="M277.9 103.1l10 12"/><path class="st5" d="M281.9 95.1l-4 8m5-55l-12-3m.6-2l-.6 4m5-7c.2 4.2 7.3 5.5 9.5 8.4 2.2 3 1.4 5.5 1.4 5.5m-7.9-13.7c2.1-3.2 10.8-2.9 13.6 1.6 3.4 5.6-.6 14.2-.6 14.2"/><path class="st7" d="M292.9 58.1l-13 4.1 1.1 3.9"/><path class="st5" d="M275.5 42.1c-1.1.9-1.8 2.2-1.7 3.7 0 2.7-2 3.6-1.8 4.9.1 1 1.9.9 2.3 1.7 1.4 3 2.9 5 6.5 4.5l1.2 4.2"/><path class="st11" d="M265.9 69.1h-2v-2c0-1.1.9-2 2-2s2 .9 2 2-.9 2-2 2"/><path class="st1" d="M253.6 67.3c-1.6.7-2.2 1.8-2.4 3.2-.3 2.6-2.5 3.2-2.5 4.5 0 1 1.7 1.1 2 2 .9 3.2 3.3 5.5 6.9 5.5"/><path class="st5" d="M253.6 67.3c-1.6.7-2.2 1.8-2.4 3.2-.3 2.6-2.5 3.2-2.5 4.5 0 1 1.7 1.1 2 2 .9 3.2 3.3 5.5 6.9 5.5"/><path class="st13" d="M253.9 79.1c-1 .5-2 .5-2 .5"/><path class="st11" d="M253 67.1c-1 1.5-2.1 3.5-2.1 3.5l5 .5-.3-2.6-2.6-1.4"/><path class="st6" d="M253.4 76.1c.2 0 .4-.3.4-.6v-.9c0-.3-.2-.5-.4-.5s-.4.3-.4.6v.9c0 .3.1.5.4.5"/><g><path class="st1" d="M192.5 74.2h-1.4"/><path class="st14" d="M192.5 74.3c-.1.3-.2.3-.3.4-.1 0-.2.1-.3.1-.2 0-.5 0-.7-.3-.1-.1-.1-.3 0-.4.2-.3.5-.3.7-.3.1 0 .2 0 .3.1.1 0 .2.1.3.4.1-.2.1-.1 0 0z"/><path class="st1" d="M192.5 81.1h-1.4"/><path class="st14" d="M192.5 81.2c-.1.3-.2.3-.3.4-.1 0-.2.1-.3.1-.2 0-.5 0-.7-.3-.1-.1-.1-.3 0-.4.2-.3.5-.3.7-.3.1 0 .2 0 .3.1.1 0 .2.1.3.4.1-.1.1 0 0 0z"/><path class="st1" d="M192.5 83.7h-1.4"/><path class="st14" d="M192.5 83.8c-.1.3-.2.3-.3.4-.1 0-.2.1-.3.1-.2 0-.5 0-.7-.3-.1-.1-.1-.3 0-.4.2-.3.5-.3.7-.3.1 0 .2 0 .3.1.1 0 .2.1.3.4.1-.1.1-.1 0 0z"/><g><path class="st1" d="M192.5 90.9h-1.4"/><path class="st14" d="M192.5 91c-.1.3-.2.3-.3.4-.1 0-.2.1-.3.1-.2 0-.5 0-.7-.3-.1-.1-.1-.3 0-.4.2-.3.5-.3.7-.3.1 0 .2 0 .3.1.1 0 .2.1.3.4.1-.1.1 0 0 0z"/></g><g><path class="st1" d="M192.5 97.9h-1.4"/><path class="st14" d="M192.5 97.9c-.1.3-.2.3-.3.4-.1 0-.2.1-.3.1-.2 0-.5 0-.7-.3-.1-.1-.1-.3 0-.4.2-.3.5-.3.7-.3.1 0 .2 0 .3.1.1 0 .2.1.3.4.1-.1.1 0 0 0z"/></g><g><path class="st1" d="M192.5 104.4h-1.4"/><path class="st14" d="M192.5 104.5c-.1.3-.2.3-.3.4-.1 0-.2.1-.3.1-.2 0-.5 0-.7-.3-.1-.1-.1-.3 0-.4.2-.3.5-.3.7-.3.1 0 .2 0 .3.1.1 0 .2.1.3.4.1-.1.1-.1 0 0z"/></g><g><path class="st1" d="M74.7 27.4l-.3-8.9v-5.9c0-5.2 4.2-9.4 9.4-9.4h138.8c5.2 0 9.4 4.2 9.4 9.4v14.9"/><path class="st15" d="M74.7 27.4l-.1-2.8"/><path class="st16" d="M74.4 18.7V12.6c0-5.2 4.2-9.4 9.4-9.4h138.8c5.2 0 9.4 4.2 9.4 9.4v9.1"/><path class="st15" d="M232 24.6v2.8"/><path class="st1" d="M239.8 28.6H66.6"/><path class="st17" d="M239.8 28.9c-3.6.2-7.2.4-10.8.5l-5.4.2-5.4.1c-7.2.1-14.4.1-21.7.1l-43.3.2-43.3-.2c-7.2 0-14.4 0-21.7-.1l-5.4-.1-5.4-.2c-3.6-.1-7.2-.3-10.8-.5v-.6c3.6-.2 7.2-.4 10.8-.5l5.4-.2 5.4-.1c7.2-.1 14.4-.1 21.7-.1l43.3-.2 43.3.2c7.2 0 14.4 0 21.7.1l5.4.1 5.4.2c3.6.1 7.2.3 10.8.5v.6z"/><path class="st1" d="M94.1 76.5h65.7v42.3H94.1zM159.8 64.3H94.1V55c0-6.7 5.5-12.2 12.2-12.2h53.5v21.5z"/><path class="st1" d="M149.6 86c-8 0-10.7 3.7-12.4 6.7-1.6 2.9-5.1 6.8-10.6 8.2-5.5 1.4-7.8 4.7-7.8 7.8h31.1l-.3-22.7z"/><path class="st18" d="M78.2 148.3v-110h157.5v110H117.8z"/><path class="st19" d="M160.3 122.9v2.9h-2.9"/><path class="st20" d="M152.2 125.8H102"/><path class="st19" d="M99.4 125.8h-2.9v-2.9"/><path class="st21" d="M96.5 116.9V71.7"/><path class="st19" d="M96.5 68.6v-2.8h2.9"/><path class="st20" d="M104.7 65.8h50.1"/><path class="st19" d="M157.4 65.8h2.9v2.8"/><path class="st21" d="M160.3 74.7v45.2"/><path class="st1" d="M156.5 95.2h-50.1V83.8h59.4v2c.1 5.2-4.1 9.4-9.3 9.4z"/><path class="st22" d="M134.2 116.3h-27.8v-11.4h37.1v2c.1 5.2-4.1 9.4-9.3 9.4z"/><g><path class="st1" d="M225.3 138.8h-37.8V56.1c0-4.5 3.6-8.1 8.1-8.1h29.7v90.8z"/></g><circle class="st23" cx="91.9" cy="15.3" r="2.3"/><circle class="st23" cx="104.2" cy="15.3" r="2.3"/><circle class="st23" cx="116.4" cy="15.3" r="2.3"/></g></g><g><path class="st1" d="M88.1 170s-3.4-25.3-7-29c6.1 5.4 13 20.4 13 29"/><path class="st2" d="M88.7 170.8c-1-4.9-1.9-9.8-3-14.7-.5-2.4-1.1-4.9-1.7-7.3-.3-1.2-.7-2.4-1.1-3.5-.4-1.1-.9-2.3-1.6-3-.3-.3-.2-.7 0-1 .3-.2.7-.3.9 0 2.1 1.9 3.7 4.1 5.1 6.4 1.4 2.3 2.7 4.7 3.8 7.2 1.1 2.5 2 5.1 2.7 7.7.7 2.6 1.2 5.4 1.1 8.1 0 .1-.1.2-.2.2s-.2-.1-.2-.2c-.1-2.7-.8-5.3-1.6-7.9-.8-2.6-1.8-5.1-2.9-7.5-1.1-2.4-2.4-4.8-3.8-7s-3-4.4-4.9-6.1l.9-1c1 1.1 1.4 2.3 1.9 3.5.4 1.2.8 2.4 1.1 3.6.6 2.4 1.2 4.9 1.7 7.4.4 2.5.9 5 1.2 7.4.3 2.5.6 5 .8 7.5 0 .1 0 .1-.1.1 0 .2-.1.1-.1.1"/><path class="st1" d="M95 170.5s.9-20-2.9-23.5c6.5 5.1 10.7 16.6 9.9 24"/><path class="st2" d="M94.6 170.2c-.2-4-.3-8-.6-12-.1-2-.3-4-.7-5.9-.2-1-.4-1.9-.7-2.8-.3-.9-.7-1.8-1.3-2.3-.3-.3-.3-.7 0-1 .3-.3.7-.3 1 0 1.8 1.5 3.3 3.3 4.6 5.2 1.2 1.9 2.3 4 3.1 6.1.8 2.1 1.4 4.3 1.8 6.5.4 2.2.5 4.5.1 6.8 0 .1-.2.2-.3.2-.1 0-.2-.1-.2-.3.1-2.2-.1-4.4-.6-6.5-.5-2.1-1.1-4.2-2-6.3-1.7-4-4.1-7.9-7.4-10.7l1-1.1c.9.9 1.3 1.9 1.6 2.9.3 1 .5 2 .7 3 .3 2 .5 4 .6 6 .1 2 .1 4 0 6s-.2 4-.4 6c0 .1-.1.1-.1.1-.2.3-.2.2-.2.1"/></g></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/jetpack-icon.jpg b/plugins/jetpack/images/jetpack-icon.jpg
deleted file mode 100644
index fd5f3b53..00000000
--- a/plugins/jetpack/images/jetpack-icon.jpg
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/jetpack-logo-green.svg b/plugins/jetpack/images/jetpack-logo-green.svg
deleted file mode 100644
index 8f9b868b..00000000
--- a/plugins/jetpack/images/jetpack-logo-green.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 21.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg className="jetpack-logo__masthead" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" height="32" viewBox="0 0 118 32">
- <path fill="#00BE28" d="M16,0C7.2,0,0,7.2,0,16s7.2,16,16,16s16-7.2,16-16S24.8,0,16,0z M15,19H7l8-16V19z M17,29V13h8L17,29z" />
- <path d="M41.3,26.6c-0.5-0.7-0.9-1.4-1.3-2.1c2.3-1.4,3-2.5,3-4.6V8h-3V6h6v13.4C46,22.8,45,24.8,41.3,26.6z" />
- <path d="M65,18.4c0,1.1,0.8,1.3,1.4,1.3c0.5,0,2-0.2,2.6-0.4v2.1c-0.9,0.3-2.5,0.5-3.7,0.5c-1.5,0-3.2-0.5-3.2-3.1V12H60v-2h2.1V7.1 H65V10h4v2h-4V18.4z" />
- <path d="M71,10h3v1.3c1.1-0.8,1.9-1.3,3.3-1.3c2.5,0,4.5,1.8,4.5,5.6s-2.2,6.3-5.8,6.3c-0.9,0-1.3-0.1-2-0.3V28h-3V10z M76.5,12.3 c-0.8,0-1.6,0.4-2.5,1.2v5.9c0.6,0.1,0.9,0.2,1.8,0.2c2,0,3.2-1.3,3.2-3.9C79,13.4,78.1,12.3,76.5,12.3z" />
- <path d="M93,22h-3v-1.5c-0.9,0.7-1.9,1.5-3.5,1.5c-1.5,0-3.1-1.1-3.1-3.2c0-2.9,2.5-3.4,4.2-3.7l2.4-0.3v-0.3c0-1.5-0.5-2.3-2-2.3 c-0.7,0-2.3,0.5-3.7,1.1L84,11c1.2-0.4,3-1,4.4-1c2.7,0,4.6,1.4,4.6,4.7L93,22z M90,16.4l-2.2,0.4c-0.7,0.1-1.4,0.5-1.4,1.6 c0,0.9,0.5,1.4,1.3,1.4s1.5-0.5,2.3-1V16.4z" />
- <path d="M104.5,21.3c-1.1,0.4-2.2,0.6-3.5,0.6c-4.2,0-5.9-2.4-5.9-5.9c0-3.7,2.3-6,6.1-6c1.4,0,2.3,0.2,3.2,0.5V13 c-0.8-0.3-2-0.6-3.2-0.6c-1.7,0-3.2,0.9-3.2,3.6c0,2.9,1.5,3.8,3.3,3.8c0.9,0,1.9-0.2,3.2-0.7V21.3z" />
- <path d="M110,15.2c0.2-0.3,0.2-0.8,3.8-5.2h3.7l-4.6,5.7l5,6.3h-3.7l-4.2-5.8V22h-3V6h3V15.2z" />
- <path d="M58.5,21.3c-1.5,0.5-2.7,0.6-4.2,0.6c-3.6,0-5.8-1.8-5.8-6c0-3.1,1.9-5.9,5.5-5.9s4.9,2.5,4.9,4.9c0,0.8,0,1.5-0.1,2h-7.3 c0.1,2.5,1.5,2.8,3.6,2.8c1.1,0,2.2-0.3,3.4-0.7C58.5,19,58.5,21.3,58.5,21.3z M56,15c0-1.4-0.5-2.9-2-2.9c-1.4,0-2.3,1.3-2.4,2.9 C51.6,15,56,15,56,15z" />
-</svg>
diff --git a/plugins/jetpack/images/jetpack-logo.png b/plugins/jetpack/images/jetpack-logo.png
deleted file mode 100644
index 122ae761..00000000
--- a/plugins/jetpack/images/jetpack-logo.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/jetpack-logo.svg b/plugins/jetpack/images/jetpack-logo.svg
deleted file mode 100644
index e4948415..00000000
--- a/plugins/jetpack/images/jetpack-logo.svg
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- viewBox="0 0 183 32" enable-background="new 0 0 183 32" xml:space="preserve">
-<path display="none" opacity="0.32" d="M54-26.1c0-2.2-1.8-3.9-3.9-3.9h-6l5.5,4.9v6.1c0,1.1-0.2,1.9-0.6,2.4
- c-0.5,0.6-1.2,0.9-2.1,0.9c-1.1,0-1.9-0.3-2.9-1.1l0,0c-0.2-0.2-0.4-0.4-0.7-0.6l-2.1,3.5c0.1,0.1,0.2,0.2,0.3,0.3
- c0,0,0.4,0.3,0.4,0.3c1.5,1.1,3.3,1.6,5,1.6c2.2,0,4.1-0.6,5.3-1.9c1.1-1.1,1.6-2.7,1.6-5v-2.6l0,0V-26.1z"/>
-<g>
- <g>
- <path fill="#FFFFFF" d="M54,10.9v4.8v2.6c0,2.2-0.5,4.3-1.5,5.4c-1.3,1.4-3.3,1.9-5.5,1.9c-3.4,0-5.9-2.6-6-2.7l2-4
- c0.2,0.2,0.7,1.1,2,1.7c1.2,0.6,2.2,0.8,3,0.3c0.8-0.5,1-2,1-3v-6.1L44,7h6C52.2,7,54,8.7,54,10.9z M81,10.9h5V25h5V10.9h5V7H81
- V10.9z M115,8.9c1.1,1.1,2,2.8,2,4.6c0,2.1-1,3.8-2.2,4.9c-1.2,1.1-3,1.6-5.1,1.6h-2.6v5H102V7h7.8C112.1,7,113.8,7.7,115,8.9z
- M112.4,13.4c0-0.9-0.6-1.5-1-1.9c-0.6-0.5-1.4-0.6-2.1-0.6h-2.3V16h2.3c0.7,0,1.4-0.1,2-0.5C111.8,15.1,112.4,14.4,112.4,13.4z
- M135.8,8.9c1.4,1.4,2.1,3.5,2.1,5.4V25h-5v-5h-6v5h-5V14.3c0-1.9,0.7-4,2.1-5.4c1.3-1.3,3.4-2.4,5.9-2.4
- C132.5,6.5,134.6,7.7,135.8,8.9z M132.5,12c-0.7-0.7-1.6-1-2.5-1c-0.9,0-1.9,0.3-2.5,1c-0.5,0.6-0.5,1.5-0.5,2.6V16h6v-1.4
- C132.9,13.5,133,12.6,132.5,12z M61.1,25H75v-3.9h-9v-3.2h7V14h-7v-3.1h9V7H61.1V25z M157.6,20c-0.1,0-0.2,0.1-0.3,0.1
- c0,0,0,0,0,0c-1,0.5-2.1,0.8-3.4,0.8c-1.5,0-2.9-0.5-3.8-1.5c-1-0.9-1.5-2.2-1.5-3.8c0-1.3,0.5-2.5,1.2-3.4
- c0.9-1.1,2.3-1.8,4.1-1.8c1,0,1.8,0.2,2.7,0.5c0,0,0.1,0,0.2,0.1c0.1,0,0.2,0.1,0.3,0.1c0,0,0.1,0,0.1,0.1c0.1,0,0.1,0.1,0.2,0.1
- c0.2,0.1,0.4,0.2,0.6,0.3l1.7-3.6c-0.3-0.2-0.7-0.4-1.1-0.6c-1.3-0.6-2.8-1-4.9-1c-2.8,0-5.5,1.2-7.3,3.1
- c-1.5,1.6-2.4,3.7-2.4,6.1c0,2.9,1.1,5.2,2.8,6.8c1.7,1.6,4.1,2.5,6.9,2.5c2.3,0,4-0.5,5.4-1.3c0,0,0.1,0,0.1,0c0,0,0,0,0,0
- c0.2-0.1,0.5-0.3,0.7-0.4l-1.8-3.6C157.9,19.8,157.7,19.9,157.6,20z M182,7h-5.8l-5.2,5.7V7h-3v0h-2v18h2h2.4h0.6v-6.5l0.5-0.5
- l5.3,7h5.2l-7.5-10.1L182,7z M32,16c0,8.8-7.2,16-16,16S0,24.8,0,16C0,7.2,7.2,0,16,0S32,7.2,32,16z M15,4.7L8.7,15.5
- c-0.7,1.1,0,2.6,1.2,2.9l5,1.3V4.7z M22,13.5l-5-1.3v15l6.3-10.8C23.9,15.3,23.3,13.9,22,13.5z"/>
- </g>
-</g>
-</svg>
diff --git a/plugins/jetpack/images/jetpack-marketing.svg b/plugins/jetpack/images/jetpack-marketing.svg
deleted file mode 100644
index b1c70c64..00000000
--- a/plugins/jetpack/images/jetpack-marketing.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 1168"><defs><style>.cls-1{fill:#46799A}.cls-2{fill:#00be28}.cls-3{fill:#CCCED0}.cls-4{fill:#204A69}.cls-5{fill:#6F93AD}.cls-6{fill:none}</style></defs><title>jetpack-marketing</title><g id="jetpack-marketing"><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1-2"><path class="cls-1" d="M598.9 1043.22c9.5-2 15.42-2.78 24.92-4.17l6.5-.93 6.37-1.51a95.19 95.19 0 0 0 12.52-3.48 156 156 0 0 0 45.57-23.13 145.37 145.37 0 0 0 55.65-81.16 183 183 0 0 0 4.05-51.13V713.84L767 727.06H596.58l13.21-13.22c0 53.68-1.27 107.36-2.43 161.39s-3.48 108.28-8.46 167.99zm-4.18 4.06c-4.87-50.9-7.65-106.9-8.69-163.47s-2-113.51-2.44-170.32v-13.21h197.33v177.38a204.88 204.88 0 0 1-5.92 57.27 159.45 159.45 0 0 1-67.24 92.75 147.66 147.66 0 0 1-54.84 21.45 97.61 97.61 0 0 1-14.26 1.74 82.82 82.82 0 0 1-14.26 0 172.26 172.26 0 0 1-29.68-3.59z"/><path class="cls-2" d="M152.54 651.7v-79.53a56.47 56.47 0 0 1 46.37-55.54l8-.81a2366.3 2366.3 0 0 0 823.85-313l163-101a45.44 45.44 0 0 1 62.6 42.2V909.2a45.55 45.55 0 0 1-56.23 44.28l-142.48-61.09a2380.06 2380.06 0 0 0-823.14-189.56l-33.39-1.51a50.09 50.09 0 0 1-48.58-49.62z"/><path class="cls-3" d="M1193.77 101.81L1030.76 202a2371.52 2371.52 0 0 1-551.28 248v277.41a2378.26 2378.26 0 0 1 578.18 165l142.48 61a45.54 45.54 0 0 0 56.23-44.29V143.9a45.45 45.45 0 0 0-62.6-42.09z"/><path class="cls-4" d="M245.29 432.35a274.6 274.6 0 0 1 9.51 82.43c.92 27.48 1 55 1.27 82.43s0 54.95-1.27 82.43a274.6 274.6 0 0 1-9.51 82.43h-5.8a271 271 0 0 1-9.39-82.43c-.93-27.48-1.16-54.95-1.39-82.43s0-55 1.39-82.43a271 271 0 0 1 9.39-82.43z"/><path class="cls-1" d="M1443.73 268.41a38.28 38.28 0 0 1-15.31 25.59c-6.6 6.72-13.44 13.21-20.52 19.36s-14.72 11.59-22.37 17.39a37.71 37.71 0 0 1-27.25 11.13l-3.71-4.41a38.12 38.12 0 0 1 15.31-25.5c6.72-6.73 13.44-13.22 20.63-19.37s14.61-11.59 22.26-17.39a37.81 37.81 0 0 1 27.6-11.59zm51.13 213.33a43.29 43.29 0 0 1-30.5 9.16c-10.2.69-20.28 1-30.37 1s-20.29-.81-30.38-1.74a42.78 42.78 0 0 1-30.37-9.74v-5.79a43.11 43.11 0 0 1 30.49-9.16c10.09-.7 20.29-1.05 30.37-1.05s20.29.81 30.38 1.74a42.43 42.43 0 0 1 30.26 9.74zm-61 157.9a28.06 28.06 0 0 1-24.46-6.37 203.39 203.39 0 0 1-19.71-12.76 222.53 222.53 0 0 1-18.09-15.07 28.17 28.17 0 0 1-13.32-21.44l3.48-4.63a27.8 27.8 0 0 1 24.46 6.26 226.94 226.94 0 0 1 19.71 12.75c6.26 4.75 12.29 9.74 18.09 15.07a27.93 27.93 0 0 1 13.21 21.45z"/><path class="cls-5" d="M1152.73 114.8a1761.7 1761.7 0 0 1 9.5 211c.81 70.38 1 140.75 1.28 211.12s-.47 141.21-1.28 210.78a1759.62 1759.62 0 0 1-9.5 211h-5.8a1736.86 1736.86 0 0 1-8.93-211c-.93-70.38-1.16-140.75-1.39-211.12s0-140.75 1.39-211.13a1739 1739 0 0 1 9.39-211z"/></g></g></g><g id="clear_rectangle" data-name="clear rectangle"><path id="Layer_4" data-name="Layer 4" class="cls-6" d="M0 0h1600v1168H0z"/></g></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/jetpack-performance-icon.svg b/plugins/jetpack/images/jetpack-performance-icon.svg
deleted file mode 100644
index eb9ab508..00000000
--- a/plugins/jetpack/images/jetpack-performance-icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 1168"><defs><style>.cls-1{fill:#CCCED0}.cls-2{fill:#6F93AD}.cls-3{fill:#204A69}.cls-4{fill:#46799A}.cls-5{fill:#CCCED0}.cls-6{fill:#00be28}.cls-7{fill:none}</style></defs><title>jetpack-google-analytics</title><g id="jetpack-google-analytics"><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1-2"><path class="cls-1" d="M576 1107.42c-27 2.69-54 3.48-81 3.7a650.47 650.47 0 0 1-80.89-3.7 7.52 7.52 0 0 1 0-14.92 650.47 650.47 0 0 1 80.89-3.7c27 0 54 1 81 3.7a7.52 7.52 0 0 1 0 14.92zm411.26-968.81c44.87-1.24 89.74-2.36 134.62-2.81h17.27a82.54 82.54 0 0 1 18.85 2.36 93 93 0 0 1 33.66 16 94.7 94.7 0 0 1 37.58 64 316.4 316.4 0 0 1 .78 35.11v101c-.67 44.88-1.34 89.75-3 134.62a7.52 7.52 0 0 1-7.73 7.3 7.64 7.64 0 0 1-7.18-7.3c-1.68-44.87-2.35-89.74-3-134.62V220.84a72.67 72.67 0 0 0-28.49-49.36 76.71 76.71 0 0 0-42-15h-16.52c-44.87 0-89.74-1.45-134.62-2.69a7.63 7.63 0 0 1-7.29-7.74 7.51 7.51 0 0 1 7.07-7.44zm-573.15 0c31.19-1.35 62.27-2.47 93.45-2.47s62.38-.56 93.56-.9 62.27 0 93.45 0 62.38 1.35 93.45 3a7.52 7.52 0 1 1 0 15c-31.07 1.69-62.26 2.36-93.45 3s-62.37.79-93.45.56-62.37 0-93.56-.89-62.26-1.35-93.45-2.7a7.52 7.52 0 0 1 0-15z"/><path class="cls-1" d="M406.6 1100c-1.24-45.77-2.25-91.43-2.69-137.2s-1-91.43-1-137.09 0-91.43.56-137.09 1.34-91.43 3-137.2a7.52 7.52 0 0 1 14.92 0c1.79 45.77 2.46 91.43 3.14 137.2s.78 91.43.78 137.09 0 91.43-.89 137.09-1.57 91.43-2.81 137.2a7.52 7.52 0 0 1-14.92 0zm517.5-735.46c16.27-1.34 32.53-2.13 48.8-2.69s32.53-.56 48.8-.9 32.53 0 48.8.57 32.53 1.34 48.8 3a7.52 7.52 0 0 1 0 15c-16.27 1.68-32.54 2.35-48.8 3s-32.54.78-48.8.56-32.53 0-48.8-.9-32.53-1.35-48.8-2.69a7.52 7.52 0 0 1 0-15zm-51.16 117.35c16.27-1.46 32.54-2.13 48.8-2.69s32.54 0 48.8-.9 32.54 0 48.8 0 32.54 1.46 48.8 3.14a7.52 7.52 0 0 1 6.74 8.22v.08a7.39 7.39 0 0 1-6.73 6.62c-16.26 1.68-32.53 2.36-48.8 3.14s-32.53.79-48.8 0-32.53 0-48.8-1-32.53-1.23-48.8-2.69a7.4 7.4 0 0 1-6.85-7.91v-.17a7.51 7.51 0 0 1 6.84-5.84zM540.43 717.7c20.08-1.35 40.16-2.13 60.25-2.7s40.16-.56 60.24-.89 40.16 0 60.24 0 40.16 1.34 60.24 3a7.4 7.4 0 0 1 6.86 7.91v.16a7.42 7.42 0 0 1-6.85 6.85c-20.08 1.79-40.16 2.46-60.24 3.14s-40.16.78-60.24 0-40.16 0-60.24-1-40.17-1.24-60.25-2.69a7.52 7.52 0 0 1 0-14.92zM501.28 835c17.05-1.46 33.66-2.24 51.16-2.8s33.65 0 51.15-.9 33.66 0 51.16 0 33.65 1.34 51 3.14a7.51 7.51 0 0 1 6.85 8.13v.06a7.62 7.62 0 0 1-6.84 6.73c-16.94 1.68-33.65 2.36-51 3s-33.66.78-51.16 0-33.65 0-51.15-.9-33.66-1.34-51.16-2.69a7.52 7.52 0 0 1 0-14.92zm0 117.23a192 192 0 0 1 37.36-3.7 141.07 141.07 0 0 1 37.36 3.7 7.64 7.64 0 0 1 5.54 9.26v.17a7.63 7.63 0 0 1-5.49 5.49 140.65 140.65 0 0 1-37.36 3.7 190.47 190.47 0 0 1-37.36-3.7 7.63 7.63 0 0 1-5.84-9.07 7.63 7.63 0 0 1 5.79-5.81z"/><path class="cls-2" d="M665.85 960.91H827.4V1168H665.85zM909.29 691h161.54v477H909.29zm243.33-111h161.54v588h-161.54z"/><path class="cls-3" d="M665.85 1054.36H827.4V1168H665.85zm243.44-142.25h161.54V1168H909.29zm243.33-99.62h161.54V1168h-161.54z"/><path class="cls-4" d="M723.29 380.59c11.22-20.64 23.11-40.84 35.11-61s24.46-40.05 37.14-60 25.13-39.6 37.8-59.34 26.14-39 40-58a7.63 7.63 0 0 1 10.55-1.57 7.41 7.41 0 0 1 2.13 9.53c-11.22 20.87-22.44 41.06-34.78 61.25s-24.34 40.17-37 59.91-25 39.71-38.14 59.12-26.14 39-39.83 58.22a7.5 7.5 0 0 1-10.43 1.8 7.4 7.4 0 0 1-2.55-9.92zm-200.47-53.74a455.85 455.85 0 0 1 49.59 30.63 352.87 352.87 0 0 1 44.87 36.68 7.63 7.63 0 0 1-8.64 12.23A344.6 344.6 0 0 1 560 375.65 453 453 0 0 1 515.08 339a7.52 7.52 0 0 1 7.74-12.12zm-198.45 127a623.56 623.56 0 0 1 33-57.66 445.3 445.3 0 0 1 39.26-53.74 7.63 7.63 0 0 1 12.57 8.19 430.28 430.28 0 0 1-33.66 57.67A570.55 570.55 0 0 1 336.37 462a7.51 7.51 0 0 1-12-8.19z"/><circle class="cls-5" cx="914.34" cy="87.45" r="31.41"/><circle class="cls-6" cx="914.34" cy="81.28" r="46.11"/><circle class="cls-6" cx="683.13" cy="446.89" r="46.11"/><circle class="cls-6" cx="456.07" cy="279.06" r="46.11"/><circle class="cls-6" cx="291.95" cy="519.25" r="46.11"/></g></g></g><g id="clear_rectangle" data-name="clear rectangle"><path id="Layer_4" data-name="Layer 4" class="cls-7" d="M0 0h1600v1168H0z"/></g></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/jetpack-performance.svg b/plugins/jetpack/images/jetpack-performance.svg
deleted file mode 100644
index baabe990..00000000
--- a/plugins/jetpack/images/jetpack-performance.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg width="192" height="152" viewBox="0 0 192 152" xmlns="http://www.w3.org/2000/svg"><title>marketing &amp; performance image</title><g transform="translate(0 -2)" fill="none"><path d="M.183 142.316c14.936-.51 29.873-.628 44.822-.746l44.822-.118c29.872.118 59.758.053 89.63.68a.38.38 0 0 1 0 .76c-29.872.64-59.758.575-89.63.68l-44.822-.118c-14.936-.13-29.873-.235-44.822-.746-.105-.013-.183-.104-.17-.196 0-.118.079-.196.17-.196z" fill="#F6F6F6"/><ellipse fill="#FFF" cx="44.769" cy="32.959" rx="1.373" ry="1.374"/><path d="M181.968 64.936c-.719-.013-1.059-.117-1.778-.353-2.97-.994-4.408-3.559-4.29-6.45.026-.825-1.387-1.374-1.099-2.212.366-1.085 2.302-1.02 3.283-3.114 1.099-2.355 4.002-2.957 6.736-2.04a7.292 7.292 0 0 1 4.59 9.21" fill="#FFF"/><path d="M181.968 65.407c-.81-.013-1.19-.13-1.922-.379-3.021-1.007-4.735-3.598-4.604-6.908.013-.184-.222-.445-.445-.68-.366-.393-.863-.943-.628-1.662.21-.642.772-.956 1.36-1.283.68-.38 1.452-.81 1.95-1.87 1.124-2.408 4.132-3.35 7.298-2.29a7.754 7.754 0 0 1 4.891 9.813.472.472 0 1 1-.902-.275c0-.013 0-.013.013-.026 1.19-3.572-.733-7.432-4.303-8.623-2.21-.745-5.088-.497-6.16 1.793-.628 1.321-1.61 1.884-2.329 2.29-.51.287-.837.484-.928.772-.066.183.118.392.431.732.34.367.72.785.694 1.361-.118 2.878 1.373 5.116 3.976 5.992.706.236.98.315 1.635.328a.451.451 0 0 1 .431.497.49.49 0 0 1-.458.418z" fill="#204A69"/><path d="M182.753 55.83c-1.06 2.656-.798 7.078 1.949 8.138 2.747 1.06 4.695-3.99 4.695-3.99l-6.644-4.148z" fill="#4E748F"/><path d="M190.417 94.35c2.38 18.435.38 57.831.38 57.831h-9.012l-.798-33.024" fill="#204A69"/><path d="M191.124 152.521h-9.679l-.798-33.364.68-.013.785 32.697h8.358c.183-3.82 1.844-40.142-.393-57.452l.68-.092c2.368 18.266.406 57.505.38 57.897l-.013.327z" fill="#204A69"/><path d="M190.797 151.252c-2.747.092-11.052.615-12.281 1.06-1.23.445-1.321.615.183.968 1.504.354 12.11 0 12.11 0l-.012-2.028z" fill="#204A69"/><path d="M182.557 153.778c-1.844 0-3.414-.04-3.95-.17-.955-.223-1.36-.38-1.386-.772-.026-.393.418-.59 1.164-.864 1.334-.471 9.914-.994 12.386-1.086l.353-.013v2.721l-.327.013c-.275.027-4.748.17-8.24.17zm-4.355-.982c.13.04.314.092.575.144 1.125.262 7.952.118 11.693 0v-1.347c-3.205.117-10.738.64-11.824 1.033-.196.079-.34.118-.444.17z" fill="#204A69"/><path d="M175.69 93.944s-.98 13.974-1.451 28.392c-.393 12.05 1.046 24.769.928 29.845h9.81c-.131-29.452 5.715-41.646 5.454-57.831" fill="#6F93AD"/><path d="M191.15 73.978c1.072 10.1-.733 20.358-.733 20.358l-14.87-.392.222-9.107 3.453-1.858-4.199-8.138 2.786-2.918 4.225-4.37c4.342-1.007 8.632 1.99 9.116 6.425z" fill="#6F93AD"/><path fill="#BBC9D5" d="M180.595 82.273l-.667 48.28h-6.226l.93-45.362z"/><path d="M182.322 80.284c-5.834 5.037-11.536 6.503-13.917 4.514-3.557-2.97 2.76-14.733 3.179-16.447 1.451-5.966 4.773-5.966 5.571-5.299.798.668-.798 4.37-.798 4.37l-1.451 7.956" fill="#FFF"/><path d="M171.165 86.107c-1.242 0-2.289-.314-3.073-.969-3.1-2.59.34-10.559 2.184-14.824.405-.955.771-1.766.837-2.08 1.033-4.213 2.956-5.43 4.015-5.784 1.007-.327 1.883-.117 2.302.236.942.785-.118 3.637-.64 4.867l-1.453 7.903a.478.478 0 0 1-.536.38.484.484 0 0 1-.38-.55l1.453-7.955c0-.04.013-.066.026-.105.732-1.714 1.177-3.533.928-3.833-.17-.144-.706-.288-1.412-.053-.876.288-2.485 1.335-3.4 5.116-.092.393-.432 1.165-.89 2.237-1.622 3.769-5.01 11.606-2.446 13.739 2.001 1.661 7.35.654 13.315-4.501a.459.459 0 0 1 .654.052.459.459 0 0 1-.053.654c-4.041 3.507-8.318 5.47-11.43 5.47z" fill="#204A69"/><path d="M172.905 77.837a.469.469 0 0 1-.471-.47.47.47 0 0 1 .144-.34l5.44-5.182a.458.458 0 0 1 .654.04.467.467 0 0 1-.013.64l-5.44 5.182a.457.457 0 0 1-.314.13z" fill="#204A69"/><path d="M184.963 151.252c-2.746.092-11.051.615-12.28 1.06-1.23.445-1.322 1.152.182 1.505s12.112 0 12.112 0l-.014-2.565z" fill="#6F93AD"/><path d="M181.524 68.011a.481.481 0 0 1-.445-.314l-.798-2.433a.464.464 0 0 1 .301-.59.382.382 0 0 1 .118-.025l1.425-.092a.446.446 0 0 1 .393.17.46.46 0 0 1 .091.406l-.614 2.512a.46.46 0 0 1-.432.353l-.04.013zm-.17-2.473l.104.314.079-.327-.183.013z" fill="#204A69"/><path d="M186.128 95.357c-2.747 0-5.978-.262-8.24-1.256a.46.46 0 0 1-.196-.628.466.466 0 0 1 .575-.223c4.342 1.91 12.935.903 13.014.89a.46.46 0 0 1 .497.432.47.47 0 0 1-.393.497c-1.74.196-3.505.301-5.257.288z" fill="#BBC9D5"/><path d="M174.932 107.748c-.693 0-1.386-.053-2.067-.17a.467.467 0 1 1 .17-.916c1.282.235 2.93.209 4.918-.092a.467.467 0 0 1 .523.393.468.468 0 0 1-.392.523 21.34 21.34 0 0 1-3.152.262z" fill="#FFF"/><path d="M186.834 68.548a5.315 5.315 0 0 1-1.635-.301c-.955-.327-.968-.942-.916-1.204.17-1.007 1.988-2.002 3.218-2.002.745 0 1.255.38 1.36 1.008.183 1.138-.21 1.74-.562 2.04-.353.302-.864.459-1.465.459zm-1.635-1.361c.078.078.183.13.3.157.982.34 1.806.34 2.185.013.262-.222.34-.615.248-1.178-.013-.065-.052-.274-.601-.222-1.007.13-2.132.955-2.132 1.23z" fill="#BBC9D5"/><path d="M179.928 69.738a.469.469 0 0 1-.47-.47.52.52 0 0 1 .13-.328c1.556-1.557 4.512-1.976 4.643-1.989a.47.47 0 0 1 .51.42.46.46 0 0 1-.38.496c-.025 0-2.785.393-4.106 1.727a.425.425 0 0 1-.327.144zm9.94-8.622a.471.471 0 0 1-.261-.079l-14.584-9.944a.474.474 0 0 1-.078-.654.465.465 0 0 1 .602-.118l14.583 9.944a.476.476 0 0 1 .117.655.458.458 0 0 1-.379.196z" fill="#BBC9D5"/><path d="M177.456 60.907c-.392 0-.772-.066-1.138-.197a.45.45 0 0 1-.222-.615.46.46 0 0 1 .575-.248c.314.104.654.157.981.13a.478.478 0 0 1 .497.445.461.461 0 0 1-.405.485c-.118-.014-.196 0-.288 0zm.837-3.507a.425.425 0 0 1-.34-.484l.13-.694a.425.425 0 0 1 .485-.34c.222.04.38.262.34.484l-.13.694a.425.425 0 0 1-.485.34z" fill="#204A69"/><path d="M80.567 112.353a63.189 63.189 0 0 1-4.172.275c-1.4.052-2.773.092-4.173.105-2.772.013-5.558-.053-8.331-.38a.777.777 0 0 1-.68-.863.791.791 0 0 1 .68-.68c2.773-.328 5.559-.393 8.331-.38 1.387.013 2.773.026 4.173.105 1.399.078 2.772.13 4.172.274a.765.765 0 0 1 .68.85.779.779 0 0 1-.68.694zm42.31-99.74c4.63-.157 9.26-.235 13.89-.288.602 0 1.125-.039 1.779-.013a8.818 8.818 0 0 1 1.936.249 9.736 9.736 0 0 1 7.39 8.23c.143 1.373.065 2.433.078 3.61l-.013 3.468-.053 6.948c-.065 4.632-.143 9.263-.313 13.895a.754.754 0 0 1-.798.733.758.758 0 0 1-.733-.733c-.17-4.632-.248-9.263-.314-13.895l-.052-6.948-.013-3.467c-.026-1.125.04-2.395-.065-3.323a7.526 7.526 0 0 0-5.637-6.386 8.205 8.205 0 0 0-1.491-.222c-.497-.04-1.138-.026-1.7-.04-4.63-.052-9.26-.13-13.89-.287a.754.754 0 0 1-.733-.798.767.767 0 0 1 .732-.733zm-58.973 0c3.204-.144 6.409-.222 9.626-.275 3.205-.078 6.409-.065 9.626-.091 3.218-.026 6.41.026 9.627.052 3.204.079 6.408.144 9.626.314.431.013.758.38.732.798a.758.758 0 0 1-.732.733c-3.205.17-6.409.249-9.626.314-3.205.026-6.41.078-9.627.052-3.217-.026-6.408-.013-9.626-.091a341.346 341.346 0 0 1-9.626-.275.754.754 0 0 1-.732-.798.767.767 0 0 1 .732-.733z" fill="#CCCED0"/><path d="M63.132 111.581c-.143-4.71-.222-9.407-.274-14.117-.079-4.71-.066-9.408-.092-14.118-.026-4.71.026-9.408.053-14.118.078-4.71.143-9.407.313-14.118a.754.754 0 0 1 .798-.732c.406.013.72.34.733.732.17 4.71.248 9.408.314 14.118.026 4.71.078 9.408.052 14.118-.026 4.71-.013 9.407-.092 14.118a722.49 722.49 0 0 1-.274 14.117.754.754 0 0 1-.798.733.758.758 0 0 1-.733-.733zm53.258-75.704a92.23 92.23 0 0 1 5.023-.275 214.35 214.35 0 0 1 5.022-.105c3.348-.013 6.696.04 10.045.38a.765.765 0 0 1 .693.837.768.768 0 0 1-.693.693c-3.349.328-6.697.393-10.045.38-1.674-.013-3.348-.026-5.022-.105-1.675-.078-3.349-.13-5.023-.275a.765.765 0 0 1-.693-.837.756.756 0 0 1 .693-.693zm-5.27 12.063a92.23 92.23 0 0 1 5.022-.275 214.35 214.35 0 0 1 5.022-.104c3.348-.013 6.696.052 10.045.38a.764.764 0 0 1 .693.837.768.768 0 0 1-.693.693c-3.349.327-6.697.393-10.045.38-1.674-.014-3.348-.027-5.022-.105-1.674-.079-3.349-.131-5.023-.275a.765.765 0 0 1-.693-.837c.026-.354.327-.655.693-.694zM76.905 72.224c2.066-.144 4.133-.222 6.2-.274 2.066-.079 4.132-.066 6.199-.092 2.066-.026 4.133.013 6.199.052 2.066.079 4.133.144 6.2.314.431.04.732.419.693.838a.768.768 0 0 1-.694.693c-2.066.17-4.133.249-6.199.314-2.066.052-4.133.079-6.2.052-2.066-.026-4.132-.013-6.199-.091-2.066-.052-4.133-.13-6.2-.275a.775.775 0 0 1-.719-.824.783.783 0 0 1 .72-.707zM72.876 84.3c1.753-.143 3.505-.221 5.258-.274 1.753-.052 3.505-.091 5.258-.105 3.505-.013 7.01.04 10.528.38a.768.768 0 1 1 0 1.53c-3.505.328-7.01.393-10.528.38-1.753-.013-3.505-.026-5.258-.104-1.753-.079-3.505-.131-5.258-.275a.775.775 0 0 1-.72-.825.796.796 0 0 1 .72-.706zm0 12.078c1.269-.249 2.55-.38 3.846-.38 1.281-.013 2.563.052 3.845.38.431.104.68.55.575.968a.824.824 0 0 1-.575.575c-1.282.328-2.564.393-3.845.38-1.295 0-2.577-.13-3.846-.38a.774.774 0 0 1-.614-.928.78.78 0 0 1 .614-.615z" fill="#CCCED0"/><path fill="#00BE28" d="M89.814 97.267h16.623v21.314H89.814zm25.046-27.79h16.623v49.105H114.86zm25.046-11.423h16.623v60.527h-16.623z"/><path fill="#204A69" d="M89.814 106.884h16.623v11.697H89.814zm25.046-14.641h16.623v26.338H114.86zm25.046-10.258h16.623v36.596h-16.623z"/><path d="M95.712 37.525a186.18 186.18 0 0 1 3.623-6.28c1.216-2.094 2.511-4.122 3.767-6.189 1.255-2.067 2.576-4.082 3.897-6.11a134.092 134.092 0 0 1 4.12-5.967.776.776 0 0 1 1.073-.222.76.76 0 0 1 .235 1.047c-1.138 2.132-2.367 4.226-3.583 6.306a165.945 165.945 0 0 1-3.806 6.163c-1.308 2.028-2.577 4.082-3.937 6.084a201.953 201.953 0 0 1-4.094 5.993.768.768 0 0 1-1.06.248.792.792 0 0 1-.235-1.073zm-20.625-5.547a46.624 46.624 0 0 1 5.1 3.166c1.635 1.151 3.231 2.355 4.657 3.781.3.314.287.811-.04 1.112a.782.782 0 0 1-.863.144c-1.818-.89-3.479-1.988-5.1-3.166a46.256 46.256 0 0 1-4.657-3.781.77.77 0 0 1-.026-1.1.793.793 0 0 1 .929-.156zM54.67 45.062a60.585 60.585 0 0 1 3.4-5.94c1.23-1.924 2.512-3.795 4.03-5.535a.77.77 0 0 1 1.098-.066c.261.223.34.59.196.903-.955 2.094-2.145 4.03-3.4 5.94a62.273 62.273 0 0 1-4.029 5.535.783.783 0 0 1-1.099.092.76.76 0 0 1-.196-.93z" fill="#46799A"/><ellipse fill="#BBC9D5" cx="115.383" cy="7.353" rx="3.231" ry="3.232"/><ellipse fill="#00BE28" transform="rotate(-51.77 115.381 6.729)" cx="115.381" cy="6.729" rx="4.748" ry="4.749"/><ellipse fill="#00BE28" transform="rotate(-51.77 91.589 44.353)" cx="91.589" cy="44.353" rx="4.748" ry="4.749"/><ellipse fill="#00BE28" transform="rotate(-51.77 68.215 27.09)" cx="68.215" cy="27.089" rx="4.748" ry="4.749"/><ellipse fill="#00BE28" transform="rotate(-51.77 51.33 51.8)" cx="51.331" cy="51.8" rx="4.748" ry="4.749"/><path d="M28.028 139.346c1.164.405 4.905 1.125 6.03 1.491.928.301.706 1.662-.262 1.662H23.738a1.91 1.91 0 0 1-1.91-1.897c0-.092 0-.183.027-.288l.157-1.138 6.016.17z" fill="#6F93AD"/><path fill="#CCCED0" d="M25.766 69.607h5.663l.928-12.848h-6.591z"/><path d="M19.867 67.815c-2.825-.353-10.437 9.198-11.85 12.914-1.412 3.716 7.782 5.835 7.782 5.835" fill="#204A69"/><path d="M15.8 87.022c-.04 0-.066 0-.105-.013-.262-.065-6.5-1.53-7.965-4.278a2.489 2.489 0 0 1-.144-2.172c1.308-3.428 9.064-13.634 12.333-13.215.262.026.432.262.406.523a.488.488 0 0 1-.523.406c-2.394-.301-9.914 8.832-11.353 12.613a1.64 1.64 0 0 0 .092 1.4c1.059 1.976 5.663 3.428 7.35 3.807a.47.47 0 0 1 .327.576.457.457 0 0 1-.419.353z" fill="#204A69"/><path d="M9.953 113.923s-5.35 10.206-4.578 19.862l.89 2.565 16.898-23.303" fill="#CCCED0"/><path d="M6.252 136.82h-.066a.452.452 0 0 1-.366-.313l-.89-2.565a.382.382 0 0 1-.025-.118c-.772-9.682 4.407-19.704 4.63-20.123a.449.449 0 0 1 .614-.222.45.45 0 0 1 .223.614c-.013.014-.013.027-.026.04-.053.104-5.258 10.166-4.539 19.547l.576 1.662L22.77 112.76a.46.46 0 0 1 .654-.066.482.482 0 0 1 .104.615L6.63 136.639a.483.483 0 0 1-.38.183z" fill="#204A69"/><path d="M30.291 112.118s-1.19 24.14-2.524 28.248l-5.036-.13c-.261-8.492-3.178-19.365-3.453-30.238" fill="#CCCED0"/><path d="M27.78 140.837l-5.049-.13a.482.482 0 0 1-.457-.458c-.118-3.9-.811-8.322-1.544-13.02-.863-5.586-1.765-11.356-1.91-17.23 0-.263.197-.472.458-.472.249 0 .458.196.484.458.144 5.822 1.034 11.553 1.897 17.114.706 4.54 1.373 8.845 1.53 12.692l4.238.117c1.255-4.84 2.393-27.568 2.406-27.803a.466.466 0 0 1 .484-.445.466.466 0 0 1 .445.484c-.052.994-1.216 24.258-2.537 28.38a.463.463 0 0 1-.445.313zm4.525-77.877c-1.216.302-2.59-.104-2.59-.104-.078 0-.117.092-.052.13l2.132 2.264.562-2.433" fill="#204A69"/><path d="M32.017 66.088l-2.825-3.01.053-.314a.479.479 0 0 1 .484-.327l.091.013c.013 0 1.282.367 2.38.105l.053.236.484.117-.72 3.18zm-1.373-2.643l.929.981.222-.955c-.38.026-.772.013-1.15-.026z" fill="#204A69"/><path d="M30.853 48.333c2.865-.144 5.507 1.23 5.925 3.794.38 2.277 2.263 2.735 2.315 3.886.04.89-1.465 1.034-1.66 1.832-.668 2.813-2.747 4.893-5.873 5.05-.759.04-1.112.04-1.805-.144" fill="#CCCED0"/><path d="M30.919 63.366a4.36 4.36 0 0 1-1.295-.183.457.457 0 0 1-.327-.562.475.475 0 0 1 .562-.34h.013c.641.17.93.156 1.662.13 2.746-.13 4.773-1.884 5.44-4.684.131-.563.615-.85 1.034-1.112.379-.236.614-.393.614-.576-.013-.3-.274-.575-.693-.994-.588-.589-1.386-1.387-1.622-2.84-.405-2.498-3.112-3.519-5.44-3.401a.442.442 0 0 1-.484-.406v-.04a.458.458 0 0 1 .444-.483c3.335-.157 5.977 1.557 6.409 4.187.183 1.151.81 1.78 1.36 2.329.471.484.929.929.955 1.609.04.746-.589 1.138-1.046 1.426-.288.17-.576.353-.615.537-.759 3.18-3.178 5.246-6.304 5.403-.262-.013-.471 0-.667 0z" fill="#204A69"/><path d="M36.713 60.187a.362.362 0 0 1-.17-.04c-.053-.012-1.151-.47-1.609-1.53a.47.47 0 0 1 .249-.615.47.47 0 0 1 .614.248c.301.707 1.086 1.034 1.099 1.034a.469.469 0 0 1 .261.602.482.482 0 0 1-.444.3zm-.929-6.176c.236 0 .419.183.419.419v.706a.413.413 0 0 1-.419.42.413.413 0 0 1-.418-.42v-.706c0-.236.183-.419.418-.419z" fill="#204A69"/><path d="M32.017 66.088c-7.808-2.473-11.143-.68-14.125 3.847-4.84 7.366-2.08 9.198-3.845 15.923-1.766 6.725-5.899 9.617-5.101 28.785H31.35s2.12-22.086 1.452-28.523M8.841 133.667s-5.205 9.146-6.945 8.767c-1.046-.236.615-4.671 1.164-6.765.393-1.452.707-2.407 2.198-2.25l3.583.248z" fill="#6F93AD"/><path d="M36.569 74.174a11.111 11.111 0 0 0 2.72-3.219c1.792-3.153 6.318-8.557 7.442-7.13 1.125 1.425-.863 6.397-2.563 7.248-1.243 3.977-7.651 17.454-11.497 16.394-3.845-1.06-6.892-21.497-1.595-21.235 5.297.261 5.702 12.011 5.702 12.011" fill="#CCCED0"/><path d="M33.103 88.004a1.99 1.99 0 0 1-.55-.079c-3.295-.916-5.44-12.678-4.55-18.16.548-3.402 1.974-4.057 3.112-3.991 3.322.17 4.852 4.265 5.559 7.706a11.468 11.468 0 0 0 2.21-2.747c1.426-2.5 5.258-7.445 7.246-7.602.366-.026.732.118.968.405.588.746.47 1.99.261 2.918-.405 1.832-1.57 4.161-2.799 4.946-1.255 3.86-7.18 16.59-11.457 16.604zm-2.106-21.301c-1.281 0-1.83 1.74-2.08 3.205-.928 5.731 1.505 16.447 3.885 17.114 3.257.916 9.56-11.697 10.921-16.08a.446.446 0 0 1 .236-.275c.902-.458 2.066-2.512 2.485-4.41.222-.993.196-1.792-.079-2.132-.026-.026-.052-.065-.17-.052-1.295.105-4.813 4.16-6.5 7.13a11.788 11.788 0 0 1-2.825 3.35c.209 1.217.34 2.46.392 3.69a.45.45 0 0 1-.47.458.459.459 0 0 1-.458-.432c0-.118-.445-11.318-5.258-11.553l-.079-.013zm-12.386 3.232c2.499 1.544 6.174.091 8.24-3.245 1.125-1.819 1.517-3.808 1.256-5.509 2.498-.732 3.793-3.807 3.309-6.045 2.76-.183 3.91-3.493 3.557-6.437 0 0-2.472-1.505-5.127-.706-1.608.484-2.772.81-4.054 3.087-1.413.367-2.76 1.243-3.558 2.395-.562.824-.98 1.989-1.164 3.18a3.419 3.419 0 0 1-1.268 2.171 9.245 9.245 0 0 0-2.001 2.277c-2.028 3.35-1.675 7.3.81 8.832z" fill="#204A69"/></g></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/jetpack-powering-up.svg b/plugins/jetpack/images/jetpack-powering-up.svg
deleted file mode 100644
index a08c3660..00000000
--- a/plugins/jetpack/images/jetpack-powering-up.svg
+++ /dev/null
@@ -1,229 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 21.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="connectJetpack" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
- y="0px" viewBox="0 0 1426.4 1421.5" style="enable-background:new 0 0 1426.4 1421.5;" xml:space="preserve">
-<style type="text/css">
- .st0{fill:#6F93AD;}
- .st1{fill:#CCCED0;}
- .st2{fill:#204A69;}
- .st3{fill:#204A69;}
- .st4{fill:#46799A;}
- .st5{fill:#BBC9D5;}
- .st6{fill:#FFFFFF;}
- .st7{fill:#CCCED0;}
- .st8{fill:none;}
- .st9{fill:#F6F6F6;}
- .st10{fill:#00BE28;}
-</style>
-<title>jetPack-poweringUp</title>
-<path class="st0" d="M872.7,1003.8l-9.8-67.9c0-401.7-282.3-404-282.3-404l-325.7-1.1C65,618.9,51.4,785.1,49.4,847.3
- c-1.7,52.9,43,190.6,43.7,232.2c102.4,0.3,566,131.8,746.2,4.7C864.9,1066.2,877.1,1034.7,872.7,1003.8z"/>
-<polygon class="st1" points="426.7,526.2 400.8,490.9 448.9,490.1 "/>
-<path class="st2" d="M515.5,447.3v-27.4c-50.9,5.9-106.4,14.7-145.9,5.8S442,448,515.5,447.3z"/>
-<path class="st2" d="M380.8,234L380.8,234c6.8,0,12.3,5.5,12.3,12.3v19.3c0,6.8-5.5,12.3-12.3,12.3l0,0c-6.8,0-12.3-5.5-12.3-12.3
- v-19.3C368.5,239.5,374,234,380.8,234z"/>
-<path class="st2" d="M300.6,262.6c3.5,23,2.9,46,6.5,68.3c3.4,22.1,9.7,44.3,24.1,59.4c14.2,15.3,36.1,21.6,58.2,24.5
- s45.4,3.5,68.2,3.4c22.4-0.2,44.8-4,63.5-14.4c18.8-10.4,32.2-28.2,39.9-48.9s11.3-43.3,13.5-66.1c2.5-22.8,3.6-45.9,5.7-69.1
- c0.1-1.3,1.3-2.3,2.6-2.2c1.1,0.1,2,1,2.2,2.2c2.1,23.3,2.8,46.6,2,70c-1.3,23.4-3.9,47.3-12.5,70.2c-8.2,22.8-23.9,44.6-46,56.8
- c-22,12.4-46.8,16.5-70.6,16.9c-23.6,0.3-46.9,0.1-70.7-3.3c-11.8-1.8-23.8-4.3-35.4-8.8s-22.9-11.4-31.5-20.9
- c-17.8-19.2-24-44.4-27.4-67.6c-3-23.6-5-47.1-1.6-70.5c0.4-2.6,2.8-4.4,5.4-4C298.7,258.9,300.3,260.5,300.6,262.6z"/>
-<path class="st3" d="M456.3,235.8c2.5,11.4,2.9,22.8,3.5,34.2c0,11.4,0.1,22.8-1.9,34.2c-0.5,2.8-3.2,4.7-6.1,4.2
- c-2.1-0.4-3.8-2.1-4.2-4.2c-2.1-11.4-1.9-22.8-1.9-34.2c0.6-11.4,1-22.8,3.5-34.2c0.4-2,2.3-3.2,4.3-2.8
- C454.9,233.3,456,234.4,456.3,235.8L456.3,235.8z"/>
-<path class="st2" d="M522.1,234L522.1,234c6.8,0,12.3,5.5,12.3,12.3v19.3c0,6.8-5.5,12.3-12.3,12.3l0,0c-6.8,0-12.3-5.5-12.3-12.3
- v-19.3C509.8,239.5,515.3,234,522.1,234z"/>
-<path class="st2" d="M405,335.5c4-1,4.7,1.2,7.7,2.1c2.6,1.1,5.4,2.1,8.1,2.8c5.7,1.6,11.8,2.4,17.9,3.4c6.1,0.8,12.2,1.4,18.2,1.7
- c6.2,0,11.5,0.1,18.2,1.9l0.7,0.2c1.4,0.4,2.2,1.8,1.8,3.1c-0.1,0.3-0.2,0.6-0.4,0.9c-5.3,7-13.2,8.1-19.9,8.5
- c-6.9,0.5-13.8,0.3-20.6-0.6c-6.9-0.9-13.7-2.5-20.2-4.7c-3.4-1.1-6.8-2.5-10-4.2c-3-1.7-7.7-3.3-8.4-8.8c-0.3-2.6,1.3-5,3.8-5.6
- L405,335.5z"/>
-<path class="st3" d="M490.5,183.4c4.4-4.9,9.5-6.4,14.2-7.8c4.8-1.1,9.7-1.5,14.5-1.3c9.5,0.6,19.7,2.4,27.8,10.1
- c1.9,1.8,2,4.8,0.1,6.7c-1.3,1.4-3.4,1.8-5.1,1.1l-0.7-0.3c-3.5-1.3-7.1-2.2-10.7-2.7c-3.9-0.5-7.9-0.8-11.8-0.9
- c-3.9-0.1-7.9,0-11.8,0.4c-3.4,0.2-6.9,0.8-10.2,1.7l-1.8,0.5c-2.4,0.6-5-0.8-5.6-3.3C489,186.1,489.4,184.6,490.5,183.4z"/>
-<path class="st2" d="M520.2,420.5c3.4,18.5,2,38,2.7,55.7c1.3,16.5,11.1,31.1,25.9,38.5c3.6,1.8,7.4,3.1,11.4,3.9l13.7,2.4
- c9.3,1.7,18.6,3.5,27.9,5.5c18.6,3.9,37,9,55,15.3c36,12.6,71,29.9,100.5,55c29.8,24.5,52.3,59.2,59.5,96.9c0.3,1.3-0.6,2.5-1.9,2.8
- c-1.1,0.2-2.2-0.4-2.7-1.4c-14.8-34.2-36.3-63.9-64.3-87.2s-61.5-39.5-96.3-51.3c-17.5-5.8-35.2-10.6-53.3-14.8
- c-9-2.1-18.1-3.9-27.2-5.6l-14-2.6c-5.2-1.1-10.3-2.9-15.1-5.3c-19.4-9.9-32.1-29.3-33.6-51c0-19.8-0.9-37.8,2.3-56.8
- c0.4-2.6,2.9-4.4,5.5-3.9l0,0C518.2,416.9,519.8,418.5,520.2,420.5z"/>
-<path class="st4" d="M317.9,114.6c5.5,21.4,21.2,53.1,68.5,77c21.5,10.8,52.7-1.5,82.4,12.7c25.1,12,40.6,42,64.5,48
- c33.6,8.5,54.3,30.3,64.7,44.5c2.7,3.6,7.8,4.4,11.4,1.7c1.3-0.9,2.3-2.2,2.8-3.7c7.4-19.8,18.4-55.9,14.3-86.3
- C622.9,181,606-30.5,407.7,3.8C308.8,20.9,311.1,87.8,317.9,114.6z"/>
-<path class="st5" d="M291.1,236.5c-4-4-3.1-8.5-3.9-12.9c-0.5-4.4-0.8-8.7-1-13.1c-0.4-8.8-0.8-17.6,0.1-26.4
- c0.6-9,2.2-17.9,4.6-26.5s6.3-17.8,14.8-23.1c1.2-0.8,2.8-0.4,3.6,0.8c0.3,0.5,0.5,1.1,0.4,1.6v0.2c-0.7,9.1-2.6,16.2-4.5,24.1
- c-1.7,7.8-2.3,16-3,24.1c-0.5,8.2-1,16.5-0.8,24.8c0,4.1,0.2,8.3,0.4,12.5c-0.1,4.2,1.6,8.2-1.2,12.6l-0.2,0.4
- c-1.7,2.7-5.3,3.5-8.1,1.8C291.9,237.1,291.5,236.8,291.1,236.5z"/>
-<path class="st2" d="M514.1,493.1c-7.3,3.4-14.5,2.1-21.8,2.5l-21.8,0.3c-14.5,0.1-29,0.6-43.5,0.4c-14.5,0-29-0.3-43.5-0.6
- c-14.5-0.2-29-0.7-43.5-5c-1.3-0.4-2.1-1.8-1.7-3.1c0.2-0.8,0.9-1.4,1.7-1.7c14.5-4.2,29-4.8,43.5-5c14.5-0.4,29-0.7,43.5-0.6
- c14.5-0.2,29,0.3,43.5,0.4l21.8,0.3c7.2,0.4,14.5-0.9,21.8,2.5c2.6,1.2,3.8,4.3,2.5,6.9C516.1,491.6,515.2,492.5,514.1,493.1
- L514.1,493.1z"/>
-<path class="st2" d="M397.8,193.9c-3,2-3.1,0.5-5,0.2c-1.7-0.5-3.5-0.8-5.3-1c-3.8-0.5-7.7-0.3-11.6-0.4c-3.9,0.1-7.8,0.3-11.6,0.8
- c-4.1,1-8.3,1-12.4,0l-0.6-0.1c-1.6-0.4-2.6-2-2.2-3.6v-0.1c1.6-6.5,7.1-9.1,11.8-10.4c4.7-1.5,9.6-2.3,14.6-2.5
- c4.9-0.2,9.9,0.3,14.7,1.4c2.6,0.5,5.1,1.3,7.5,2.2c2.2,1.1,6.1,1.6,6.6,6.4c0.2,1.6-0.6,3.2-1.9,4.1L397.8,193.9z"/>
-<circle class="st5" cx="269.8" cy="315.6" r="9.6"/>
-<path class="st3" d="M214.6,1048.5c2.8-17.2,4.9-34.4,6.4-51.6l7.8-76.6l6.6-76.6l3.3-38.8c0-13.3,2.2-25.5,1.1-38.8
- c-1.1-1.1-2.2-2.2-3.3-2.2c-2.2-1.1-3.3,0-4.4,2.2c-3.3,12.2-4.4,25.5-5.5,37.7l-3.3,38.8l-6.7,76.6l-6.7,76.6
- c-1.6,18.1-3.1,36.2-3.5,54.3C209.1,1049.3,211.8,1048.8,214.6,1048.5z"/>
-<path class="st3" d="M656.7,898.4l8.2,76.4l5.4,49.8c1.6-0.3,3.3-0.4,4.9-0.5c2.2,0.1,4.5,0.3,6.7,0.7l-4.8-51.2l-8.2-76.4
- l-4.2-38.8c-2.6-13.1-2.8-25.5-6.4-38.3c-1.3-0.9-2.6-1.8-3.7-1.5c-2.4-0.7-3.3,0.6-3.9,3c-0.9,12.6,0.6,25.9,1.8,38.1L656.7,898.4z
- "/>
-<path class="st6" d="M157.3,1239.2V907.6c0-20.4,16.6-36.9,37-36.9h562.3v353"/>
-<path class="st7" d="M153.9,1239.2c-2.5-39.7-1.5-79.3-1.7-119V912c-0.7-10,2.2-22.6,9.6-31c7.3-8.8,17.8-14.3,29.2-15.2
- c10.7-0.3,20-0.1,30.1-0.2h59.5c158.6,0.3,317.3-0.7,476,0.7c2.4,0,4.4,2,4.4,4.4c-0.6,117.7-1.5,235.3-2.7,353
- c-0.1,0.9-0.9,1.6-1.8,1.6c-0.8-0.1-1.5-0.7-1.6-1.6c-1.3-117.7-2.2-235.3-2.7-353l4.4,4.4c-158.7,1.3-317.3,0.4-476,0.7h-59.5
- c-9.7,0.1-20.2-0.1-29.3,0.1c-8.6,0.7-16.6,4.8-22.2,11.5c-5.6,6.9-7.8,14.8-7.2,24.5v208.2c-0.2,39.7,0.8,79.3-1.7,119
- c-0.1,1.9-1.7,3.3-3.6,3.2C155.3,1242.3,154,1240.9,153.9,1239.2L153.9,1239.2z"/>
-<path class="st2" d="M138.1,1421.5c-18.5,0-39.1-9.9-51-24.7c-22-27.4-39.8-70.3-29.9-104.6c0.8-2.8,3.8-4.5,6.7-3.7
- c2.8,0.8,4.5,3.8,3.7,6.7l0,0c-8.9,30.5,7.6,69.6,27.9,94.8c8.8,10.9,26.9,21.3,44.5,20.7c10.9-0.5,19.4-5.3,25.3-14.3
- c1.6-2.5,5-3.2,7.5-1.5c2.5,1.6,3.2,5,1.5,7.5c-7.8,11.9-19.5,18.5-33.8,19.2C139.7,1421.5,138.9,1421.5,138.1,1421.5z"/>
-<path class="st2" d="M167.3,1403.2c-23,0-45.2-9.2-46.7-9.9c-2.7-1.2-4-4.4-2.8-7.1s4.3-3.9,7-2.8c0.5,0.2,53.7,22.3,74.3-3.4
- c1.9-2.3,5.2-2.7,7.6-0.8c2.3,1.9,2.7,5.2,0.8,7.6l0,0C197.4,1399.4,182.1,1403.2,167.3,1403.2z"/>
-<path class="st2" d="M193.8,1386.5c-23.3,0-55.6-16.8-59.9-19c-2.6-1.4-3.6-4.6-2.2-7.3s4.6-3.6,7.3-2.2c18,9.5,51.1,22.4,63.6,16.2
- c2.7-1.3,4.2-3.6,4.8-7l0,0c-0.1,0-1.6-7.7-23.4-20.2c-2.6-1.5-3.5-4.8-2-7.3s4.8-3.5,7.3-2c28.8,16.5,29.2,28.1,28.7,31.3
- c-1.1,6.8-4.8,12-10.6,14.9C203.1,1385.8,198.4,1386.7,193.8,1386.5z"/>
-<path class="st2" d="M734.3,1381.5c-25.7,0-45.1-22.8-46.1-24c-1.6-2.1-1.2-5.2,0.9-6.8c2-1.5,4.9-1.3,6.6,0.6
- c0.2,0.3,25.2,29.5,52.6,17.5c2.5-1,5.3,0.2,6.3,2.7c1,2.4-0.1,5.1-2.4,6.2C746.5,1380.2,740.5,1381.5,734.3,1381.5z"/>
-<path class="st2" d="M753.9,1386.2c-6.3,0-12.5-0.8-18.7-2.2c-2.6-0.5-4.3-3.1-3.8-5.7s3.1-4.3,5.7-3.8c0.1,0,0.3,0.1,0.4,0.1
- c30.3,7.3,60.6-6.3,77.2-34.7c11.5-19.8,7.3-39.2,1-60.7c-0.8-2.6,0.7-5.3,3.3-6c2.6-0.8,5.3,0.7,6,3.3c6.7,22.8,11.5,45.2-1.9,68.3
- C807.7,1371.1,781.8,1386.2,753.9,1386.2z"/>
-<path class="st6" d="M725.1,1329.7H808v13.9c0,14.1-11.5,25.6-25.6,25.6H118.8c-14.1,0-25.6-11.4-25.6-25.6v-13.9h599.6"/>
-<path class="st7" d="M725.1,1328.4l82.9-1.7c1.6-0.1,2.9,1.2,3,2.8l0,0l0,0v0.1l0.2,12.9c0.7,15.4-10.8,28.7-26.2,30.3
- c-18,0.6-34.7,0.6-52.1,0.8l-103.5,0.6V1364h10.4v10.4l-287.5,0.6l-143.8,0.3l-71.9-0.1h-18c-7.4-0.1-14.6-2.8-20.2-7.6
- c-5.6-4.8-9.4-11.5-10.5-18.8c-0.4-3.3-0.5-6.6-0.4-9.9v-9c0-3.2,2.6-5.7,5.7-5.7l299.8,0.5c99.9,0.2,199.9,0.7,299.8,3.9
- c0.7,0,1.3,0.6,1.3,1.3s-0.6,1.3-1.3,1.3c-99.9,3.2-199.9,3.7-299.8,3.9l-299.8,0.5l5.7-5.7v9c-0.1,2.7,0,5.4,0.3,8.1
- c0.7,4.6,3.1,8.8,6.7,11.8s8.1,4.7,12.8,4.7h17.9l71.9-0.1l143.8,0.3l287.5,0.6v10.4h-10.4c-2.8,0-5.2-2.3-5.2-5.1
- c0-2.8,2.3-5.2,5.1-5.2h0.1l103.5,0.6l51.4,0.5c7.5-0.5,14.2-4.9,17.8-11.6c1.8-3.4,2.7-7.1,2.6-10.9l0.2-12.9l3,3l-82.9-1.7
- c-0.7,0-1.3-0.6-1.3-1.3s0.6-1.3,1.3-1.3L725.1,1328.4z"/>
-<path class="st6" d="M750.2,1329.7"/>
-<path class="st6" d="M633,1329.7"/>
-<path class="st7" d="M501.3,1349.4h-89.5c-10.9,0-19.7-8.8-19.7-19.7h129C521.1,1340.6,512.2,1349.4,501.3,1349.4L501.3,1349.4z"/>
-<path class="st6" d="M156.7,1239.2c24.2,14.2,35.8,62.5,31.4,88c-3.3,19-13.2,22.6-25,6.9c-9.7-12.9-12.3-29.2-17.5-44.9"/>
-<path class="st2" d="M176.8,1349.2c-4.6,0-10.9-2.5-18-12c-7.8-10.4-11.4-22.7-14.8-34.6c-1.1-4-2.3-7.9-3.6-11.9
- c-0.9-2.8,0.6-5.9,3.4-6.8s5.9,0.6,6.8,3.4c1.4,4.1,2.5,8.2,3.7,12.3c3.3,11.4,6.4,22.2,13,31c5.1,6.7,8.4,7.9,9.8,7.7
- c1.4-0.3,4.1-3.3,5.6-12.2c4-23.4-6.6-69.3-28.9-82.4c-2.6-1.5-3.4-4.8-1.9-7.4s4.8-3.4,7.4-1.9c26.4,15.5,38.6,66.6,34,93.5
- c-2.6,15.1-8.9,19.7-13.7,20.8C178.8,1349.1,177.8,1349.2,176.8,1349.2z"/>
-<path class="st0" d="M152.8,1072.5c0,0,23.9,65,12.6,109.4c-1.3,10.4-1.1,20.9,0.6,31.3c2.4,15.3-6.9,30.1-21.8,34.5
- c-21.3,6.4-49,20.1-69.9,49.4c-8.5,11.9-26.2,11.8-33.9-0.6C26.2,1273.3,9,1233,5.8,1170.7c0,0-41.4-317.5,99.8-514.8L152.8,1072.5z
- "/>
-<path class="st2" d="M53.7,1173c6.4-8.5,15.8-11.7,24.9-14.8c9.3-3.2,19.1-5,28.9-5.4c10.2-0.2,20.3,1.7,29.7,5.6
- c9.3,4,18.1,10.8,21.2,20.8c0.3,0.8-0.2,1.6-1,1.9c-0.3,0.1-0.7,0.1-1,0l-0.1-0.1c-9.5-3.6-15.4-8.8-23.5-11.6
- c-8-2.6-16.5-3.8-24.9-3.5c-8.6,0-17.3,1.6-25.9,3.6s-16.8,5.6-26.8,5.8h-0.1c-0.8,0-1.5-0.6-1.6-1.5
- C53.3,1173.6,53.4,1173.3,53.7,1173L53.7,1173z"/>
-<path class="st2" d="M77.2,1073.5c4.3-5.5,10.4-7.8,16.4-9.7c6.2-2,12.6-3.2,19.1-3.6c6.7,0,13.3,1.3,19.5,3.8s11.9,7.1,14,13.7
- c0.2,0.5-0.1,1.1-0.7,1.2c-0.2,0.1-0.4,0.1-0.6,0h-0.1c-6.2-2.4-10.2-5.7-15.5-7.7c-5.3-1.8-10.9-2.5-16.5-2.2
- c-5.8,0-11.5,0.8-17.1,2.3c-5.7,1.6-11.1,3.6-17.7,3.9h0c-0.6,0-1-0.4-1-1C77,1074,77.1,1073.7,77.2,1073.5L77.2,1073.5z"/>
-<line class="st8" x1="756.5" y1="1326.8" x2="756.5" y2="1281.9"/>
-<path class="st7" d="M753.2,1326.8c-2.4-1.9-1.5-3.7-1.8-5.6l-0.2-5.6c-0.1-3.7-0.4-7.5-0.3-11.2c0-3.7,0.2-7.5,0.4-11.2
- s0.5-7.5,3.5-11.2c0.7-0.9,2.1-1.1,3-0.3c0.1,0.1,0.2,0.2,0.3,0.3c3,3.7,3.4,7.5,3.5,11.2s0.5,7.5,0.4,11.2
- c0.1,3.7-0.2,7.5-0.3,11.2l-0.2,5.6c-0.3,1.9,0.6,3.7-1.8,5.6C757.9,1328.4,755.2,1328.4,753.2,1326.8z"/>
-<path class="st2" d="M711.6,1345.7c-5.7,0-10.8-3-15.2-9c-9.5-12.7,1.8-33,9.2-46.4c1.3-2.3,2.4-4.4,3.3-6.2
- c3.1-6.1,5.1-12.8,7-19.2c3.1-10.4,6.3-21.2,14.4-30.4c1.7-2.1,4.8-2.4,6.8-0.7c2.1,1.7,2.4,4.8,0.7,6.8c-0.1,0.1-0.1,0.1-0.2,0.2
- c-6.7,7.6-9.4,16.9-12.4,26.8c-2,6.8-4.1,13.9-7.6,20.8c-0.9,1.9-2.2,4.1-3.5,6.5c-5.9,10.5-15.7,28.2-9.9,35.9c4,5.3,6.9,5.1,7.9,5
- c6.2-0.4,14.2-9.5,23.6-26.8c5.1-9.4,11.6-17.7,17.9-25.7s12-15.2,16.4-23.4c1.4-2.3,4.4-3.1,6.7-1.7c2.2,1.3,3,4,1.9,6.3
- c-4.8,8.8-11.1,16.9-17.3,24.7s-12.3,15.6-17,24.3c-5,9.2-16.8,30.8-31.5,31.9C712.4,1345.7,712,1345.7,711.6,1345.7z"/>
-<path class="st0" d="M748.9,1112.6c0,0-32.5,41.5-28.7,99.7c-0.2,6.4-1.3,12.7-3.3,18.8c-3.4,10.4,2.9,21.2,13.7,22.7
- c20.1,2.8,57.3,8.1,82.2,25.8c10.5,7.4,25,5.8,32.2-4.8c9.3-13.8,19.4-36,22.3-69.4c0,0,26.6-170.2-15.6-397.4L748.9,1112.6z"/>
-<path class="st2" d="M723.8,1213.4c5-8.2,13.3-11.5,21.4-14.5c8.3-3.1,17.1-4.8,26-5c9.2,0,18.2,2.2,26.4,6.3
- c8.3,3.8,15.5,10.3,18,19.3c0.2,0.8-0.2,1.6-1,1.8c-0.3,0.1-0.6,0.1-0.9,0l-0.2-0.1c-8.8-2.8-13.7-8.1-20.8-10.6
- c-6.8-2.7-14.1-4.1-21.5-4c-7.6,0.1-15.2,1.2-22.5,3.2c-7.5,2.1-14.4,5.4-23.4,5.8h-0.1c-0.8,0-1.5-0.6-1.6-1.4
- C723.5,1213.9,723.6,1213.6,723.8,1213.4L723.8,1213.4z"/>
-<rect x="204.8" y="932" class="st9" width="503.6" height="350.8"/>
-<path class="st1" d="M363.2,1243.2c-40.2,1.2-82,1.5-123.2,1.4c-1.5,0-2.7-1.2-2.7-2.7V977.2c0-1.5,1.2-2.7,2.7-2.7h122.6
- c1.5,0,2.7,1.2,2.7,2.7l0,0c-0.1,44.4,0.1,89-0.3,133.3l-1.8,132L363.2,1243.2z M361.9,1240.6l-1.7-132.1
- c-0.4-43.9-0.3-87.5-0.3-131.4l2.7,2.7H240l2.7-2.7v264.7l-2.7-2.7c40.3,0,79.9,0.2,121.3,1.4L361.9,1240.6z"/>
-<path class="st1" d="M678.8,1243.2c-46,1-93.3,1.1-140.2,1.2l-141.7,0.2c-1.5,0-2.7-1.2-2.7-2.7l0,0v-176.7c0-1.5,1.2-2.7,2.7-2.7
- h281.3c1.5,0,2.7,1.2,2.7,2.7v0.1c-0.5,59.4-0.9,119.2-2.1,177.4V1243.2z M677.5,1240.6c-1.2-59.5-1.5-117.3-2.1-175.4l2.7,2.7
- H396.8l2.7-2.7v176.7l-2.7-2.7l139.6,0.2c46.6,0.1,92.9,0.2,140.4,1.2L677.5,1240.6z"/>
-<path class="st1" d="M396.8,975.3c46.9-1.6,93.8-0.6,140.7-0.9h140.7c1.5,0,2.7,1.2,2.7,2.7v54.5c0,1.5-1.2,2.7-2.7,2.7H537.5
- c-46.9,0.2-93.8-0.6-140.7-1.1c-0.9,0-1.6-0.7-1.6-1.5l0,0v-0.1l0.7-27.3c0-0.5,0.4-0.9,0.9-0.9s0.9,0.4,0.9,0.9l0.7,27.3l-1.6-1.6
- c46.9-0.6,93.8-1.3,140.7-1.1h140.7l-2.7,2.7v-54.5l2.7,2.7H537.5c-46.9-0.3-93.8,0.7-140.7-0.9c-1,0-1.8-0.8-1.8-1.8
- S395.8,975.3,396.8,975.3z"/>
-<path class="st1" d="M395.2,1219.2c5.1-13,13.5-24.4,23.2-34.6c9.9-9.9,21.6-18.3,35.1-22.9c6.7-2.5,13.9-3.6,21.1-3.3
- c7,0.1,14,1,20.9,2.7c13.8,3.2,26.2,9.8,38.6,15c12.2,5.3,25.8,8.6,38.3,6.8c12.5-2.7,22.8-12.2,32.7-21.4c9.9-9.3,20.1-19,32.3-26
- s26.2-11.1,40.2-10.2c0.5,0,0.9,0.4,0.9,0.9c0,0,0,0,0,0.1c0,0.5-0.4,0.8-0.9,0.9c-13.4,0.8-26.4,5.1-37.6,12.5
- c-11.3,7.1-21,16.6-31.1,25.9c-10,9.2-20.6,19.4-35.3,22.8c-14.7,2-28.7-1.7-41.5-7.2s-24.8-11.8-37.8-14.8
- c-13-2.8-26.6-4.2-38.9,0.5c-12.5,4.3-23.6,12.2-33,21.6s-16.6,20.9-23.8,32.4c-0.5,0.9-1.7,1.1-2.5,0.6
- C395.2,1221,394.9,1220.1,395.2,1219.2L395.2,1219.2z"/>
-<circle class="st1" cx="1039.6" cy="841.8" r="12.4"/>
-<circle class="st1" cx="1039.6" cy="895.7" r="12.4"/>
-<circle class="st1" cx="942.3" cy="949.6" r="12.4"/>
-<circle class="st1" cx="1039.6" cy="949.6" r="12.4"/>
-<circle class="st1" cx="989" cy="949.6" r="12.4"/>
-<circle class="st1" cx="1039.6" cy="549.2" r="12.4"/>
-<circle class="st1" cx="1039.6" cy="605.4" r="12.4"/>
-<circle class="st1" cx="1039.6" cy="790.4" r="12.4"/>
-<ellipse class="st5" cx="1288.4" cy="284.5" rx="132" ry="131.7"/>
-<path class="st0" d="M1208.5,183c-24.7,21.7-41.1,51.5-45.6,83.1c-4.2,31.6,2.8,64.6,21,90.8c18.1,26.4,45.7,44.9,77,51.7
- c30.9,6.7,64.2,1.5,91.3-14.8c27.1-16.1,48.1-42.4,56.9-72.8c9.1-30.7,6-63.7-8.5-92.2c-14.6-28.6-39.5-50.5-69.7-61.4
- c-14.9-5.6-30.7-8-46.9-8.2c-8.2,0-16.3,0-23.9,1.2s-15.1,4.1-22.3,7.8l-0.2,0.1c-1.7,0.8-3.7,0.2-4.5-1.5c-0.5-1.1-0.5-2.3,0.2-3.3
- c7.4-11.4,14.8-22.9,22.5-34.1c0.4-0.6,1.3-0.8,1.9-0.3c0.5,0.4,0.7,1.1,0.4,1.7c-6.1,12.2-12.5,24.2-19,36.2l-4.6-4.7
- c7.3-4.2,15.3-8.1,23.9-10s17.2-2.4,25.6-2.5c16.9-0.3,34.4,1.7,50.7,7.4c68.6,24.1,106.4,97.5,86.4,167.4
- c-9.5,33.4-32.2,62.9-62.3,80.3c-30,17.7-66.6,23.2-100.4,15.6c-34.2-7.7-64.2-28.1-83.8-57.1c-19.6-28.9-27.3-64.3-21.3-98.7
- c5.5-34,25.9-64.9,53.6-83.8c0.6-0.4,1.5-0.2,1.9,0.4C1209,181.8,1208.9,182.5,1208.5,183L1208.5,183z"/>
-<polyline class="st5" points="1258.2,249.1 1292.4,291.9 1226,350.5 "/>
-<path class="st0" d="M1261,246.8c4.8,2,7,6.1,10.1,9.5l8.8,10.6c5.8,7.1,11.8,14,17.4,21.2c2,2.6,1.7,6.3-0.7,8.4
- c-11.1,9.8-22.2,19.4-33.6,28.9c-11.2,9.6-22.5,19.2-35.8,26.4c-0.9,0.5-2,0.2-2.5-0.7c-0.3-0.6-0.3-1.4,0.1-2
- c8.8-12.3,19.7-22.3,30.7-32.1s21.8-19.9,32.9-29.6l-0.7,8.4c-5.8-7.1-11.2-14.4-16.9-21.6l-8.4-10.9c-2.6-3.8-6.2-6.8-7.1-11.9
- c-0.4-2.3,1.1-4.4,3.4-4.8C1259.5,246.4,1260.3,246.5,1261,246.8L1261,246.8z"/>
-<line class="st8" x1="1236.2" y1="165.1" x2="1271" y2="185.2"/>
-<path class="st0" d="M1236.9,163.9c5.1-2.2,7.8-0.2,10.9,1.1s6.1,2.9,9,4.5c2.8,1.8,5.7,3.5,8.4,5.6s5.8,3.4,6.5,8.9
- c0.1,1-0.4,2-1.4,2.4c-5.1,2.2-7.8,0.2-10.9-1.1s-6.1-2.9-9-4.5c-2.8-1.8-5.7-3.5-8.4-5.6s-5.8-3.4-6.5-8.9
- C1235.4,165.3,1235.9,164.3,1236.9,163.9z"/>
-<circle class="st0" cx="1288.4" cy="206.7" r="6.6"/>
-<circle class="st0" cx="1288.4" cy="376.1" r="6.6"/>
-<circle class="st0" cx="1375.8" cy="288.7" r="6.6"/>
-<circle class="st0" cx="1200.9" cy="288.7" r="6.6"/>
-<path class="st6" d="M756.7,360.2c-40.3,0.1-69.6,0.2-69.6,0.2s-18.9-61.9,31.3-74.9c15-3.9,23.8-2.4,28.2-0.5
- c1.4,0.7,3.1,0.1,3.8-1.4c0.1-0.2,0.2-0.5,0.2-0.8c1.1-12.4,8.2-46.4,53.5-46.4c49.9,0,71.8,46.9,71.8,46.9s11.1-16.2,30.8-17.8
- c21.5-1.7,37,5.9,48,16.3"/>
-<path class="st1" d="M756.7,362.1c-11.6,1.1-23.2,1.8-34.8,2.1l-34.8,0.6H687c-1.9,0-3.6-1.2-4.1-3.1c-3.6-12.5-4.6-25.5-3-38.4
- s8.1-26.3,19.5-34.2c5.5-3.8,11.7-6.6,18.3-8.2c6.4-1.8,13-2.6,19.6-2.5c3.6,0.1,7.1,0.8,10.5,2l0.6,0.2l-0.3-0.1
- c-0.2,0-0.4,0-0.6,0c-0.5,0.1-0.9,0.4-1.2,0.9c-0.2,0.3-0.3,0.6-0.3,1l0.1-1.1l0.3-2.5c0.9-6.6,3-13,6-18.9
- c6.2-12.2,17.2-21.2,30.4-24.8c12.6-3.4,25.8-3.7,38.6-0.8c25.7,5.9,45.7,24.8,58.4,47.2l-7.3-0.6c4.9-6.5,11.4-11.7,18.9-15
- c7.3-3.5,15.8-4.4,23.4-3.8c15.5,0.8,30.7,7.7,41,18.9c0.5,0.5,0.5,1.3,0,1.7l0,0c-0.5,0.4-1.2,0.4-1.6,0
- c-11-9.3-25.1-14.4-39.5-14.1c-7.2,0.2-13.9,1-19.9,4.2c-6,3.1-11.2,7.5-15.2,12.9l-0.1,0.2c-1.4,1.8-4.1,2.2-5.9,0.8
- c-0.5-0.4-0.9-0.9-1.2-1.5c-10-20.8-29.8-38.1-52.5-42.9c-11.4-2.4-23.1-2-34.3,1.1c-10.8,3.1-19.9,10.6-24.8,20.7
- c-2.5,5.1-4.2,10.5-4.9,16.1l-0.2,2.1l-0.1,1.1c-0.1,1.1-0.5,2.2-1.1,3.1c-1.1,1.7-3,2.9-5,3.2c-1,0.2-1.9,0.2-2.9,0
- c-0.5-0.1-0.9-0.2-1.4-0.4l-0.4-0.2c-2.4-0.8-5-1.3-7.5-1.3c-10.9,0-23.3,2.6-32.1,8.8c-9,6.2-14.4,16.6-16,28s-0.5,23.5,2.4,34.6
- l-4.2-3.1l34.8,0.4c11.6,0.2,23.2,0.8,34.8,1.9c1,0.1,1.8,1,1.6,2C758.3,361.3,757.6,362,756.7,362.1L756.7,362.1z"/>
-<path class="st6" d="M1041.7,462.3c98.7,0.2,184.4,0.6,184.4,0.6s30.2-98.9-50.1-119.7c-24.1-6.2-38-3.9-45.2-0.9
- c-2.9,1.2-6.2-0.5-6.4-3.4c-1.7-19.8-13-74.2-85.6-74.2c-79.8,0-114.8,74.9-114.8,74.9s-17.8-25.9-49.3-28.4
- c-93.2-7.5-116,95.3-116,95.3"/>
-<path class="st1" d="M1041.7,460.4c30.7-0.9,61.5-1.6,92.2-1.6l92.2-0.3l-4.2,3.1c4.8-18.1,6.7-37.9,4-56.4
- c-2.5-18.6-11.5-36.1-26.7-46.5c-7.4-5.3-16.2-8.8-25.2-11.1c-9.2-2.3-18.7-3.8-27.8-3.5c-4.4,0.1-8.8,0.9-12.9,2.3l-0.8,0.3
- c-0.6,0.2-1.1,0.4-1.7,0.5c-1.2,0.2-2.4,0.2-3.6,0c-2.5-0.4-4.7-1.9-6.1-4c-0.7-1.1-1.2-2.4-1.3-3.8l-0.2-1.8l-0.4-3.5
- c-1.2-9.3-4-18.2-8.2-26.6c-8.3-16.8-23.3-29.3-41.4-34.3c-18.3-5.1-37.6-5.7-56.2-1.7c-37.3,7.9-68.8,36.2-85.7,69.9
- c-1.1,2.1-3.6,3-5.7,1.9c-0.6-0.3-1.1-0.7-1.5-1.2l-0.1-0.1c-10.3-13.5-26.1-24.7-43.5-26.9c-17.7-2.2-36.3-0.2-52.7,7.4
- s-30.2,20.1-40.9,34.9c-10.7,15-18.7,31.7-23.7,49.4v0.1c-0.2,0.6-0.9,1-1.6,0.7c-0.5-0.2-0.9-0.8-0.8-1.3
- c4.4-18.3,12-35.7,22.4-51.4c10.6-15.5,24.8-29.2,42.1-37.6s37-11.1,56-9.2c19.8,2.3,37.4,13.4,49.5,29.2l-7.3,0.6
- c9.5-18.3,22.7-33.5,37.9-46.8c15.3-13.1,33.8-22.9,53.6-27.3c19.9-4.5,40.7-4,60.4,1.4c9.8,3,19.4,7.5,27.5,14.2
- s14.7,14.9,19.4,24.2c4.7,9.2,7.8,19.1,9.3,29.4l0.5,3.8l0.2,1.8c0-0.1,0-0.2-0.1-0.4c-0.1-0.2-0.1-0.1-0.1-0.1h0.1l1-0.4
- c5.1-1.9,10.5-2.9,15.9-3c10.5-0.4,20.7,1.3,30.5,3.8s19.8,6.5,28.3,12.7c17.5,12.1,27.6,32.7,30.2,52.8c2.8,20.4,0.8,40.6-4.6,60.3
- c-0.5,1.8-2.2,3.1-4.1,3.1h-0.1l-92.2-0.9c-30.7-0.3-61.5-1.1-92.2-2.2c-1,0-1.8-0.8-1.8-1.8
- C1039.9,461.2,1040.7,460.4,1041.7,460.4L1041.7,460.4z"/>
-<path class="st6" d="M749.4,462.9c1.5-0.5,37.9-0.7,90-0.8"/>
-<path class="st1" d="M748.9,461.1c8.5-2.1,15.3-2.4,23.1-2.8l22.5-0.8c7.5-0.5,15,0.7,22.5,0.7c7.5-1.2,15,0.9,22.5,2.5
- c0.7,0.2,1.1,0.8,0.9,1.5c-0.1,0.5-0.5,0.8-0.9,0.9c-7.5,1.7-15,3.8-22.5,2.6c-7.5,0.1-15,1.3-22.5,0.9l-22.5-0.5
- c-7.3-0.1-14.7-0.7-22-1.7l-1.1-0.2c-0.9-0.2-1.5-1-1.4-2C747.7,461.8,748.2,461.3,748.9,461.1L748.9,461.1z"/>
-<ellipse class="st5" cx="940.5" cy="474.4" rx="77.5" ry="77.3"/>
-<line class="st8" x1="940.5" y1="432.4" x2="940.5" y2="516.4"/>
-<path class="st0" d="M941.9,432.4c4.5,7,4.1,14,4.5,21s0.6,14,0.7,21s-0.3,14-0.6,21s0,14-4.5,21h-2.8c-4.5-7-4.1-14-4.5-21
- s-0.6-14-0.6-21s0.3-14,0.6-21s0-14,4.5-21L941.9,432.4L941.9,432.4z"/>
-<line class="st8" x1="982.6" y1="474.4" x2="898.5" y2="474.4"/>
-<path class="st0" d="M982.6,475.8c-7,4.5-14,4.1-21,4.5s-14,0.6-21,0.6s-14-0.3-21-0.6s-14,0-21-4.5V473c7-4.5,14-4.1,21-4.5
- s14-0.6,21-0.6s14,0.3,21,0.6s14,0,21,4.5V475.8z"/>
-<path class="st5" d="M991.7,7.4c0,0-29,35.9-79.2,31.7c0,0-26.8,143.7,82.4,174.5c0,0,106.4-14.8,85.2-174.5
- C1080.1,39,1019.9,43.7,991.7,7.4z"/>
-<path class="st10" d="M992.3,213.6c0,0,109.7-14.8,88.4-174.6c0,0-60.8,1.4-88.9-34.9c0,0-31.8,39.2-81.9,34.9
- C909.8,39,883.1,182.7,992.3,213.6"/>
-<polyline class="st10" points="959.8,118.3 987.9,140.6 1045.1,76 "/>
-<path class="st6" d="M961.4,116.3c3.4,0.5,5.4,2.8,7.9,4.6l7.1,5.5c4.7,3.7,9.6,7.2,14.2,11l-5.8,0.5l28.8-32.1
- c9.5-10.8,19.3-21.3,30.6-30.6c0.5-0.5,1.3-0.4,1.8,0.1c0.4,0.4,0.4,1.1,0.1,1.5c-7.8,12.3-17.1,23.3-26.6,34.1l-28.3,32.5
- c-1.4,1.7-3.9,1.9-5.7,0.6l-0.1-0.1c-4.8-3.6-9.3-7.6-13.9-11.3l-6.9-5.7c-2.2-2-4.9-3.4-6.2-6.6c-0.6-1.5,0.1-3.2,1.6-3.8
- C960.3,116.2,960.9,116.1,961.4,116.3L961.4,116.3z"/>
-<path class="st6" d="M1039.5,665.7l-16.7,26.6c0,0-4.2,9.4,3.1,12l13.5,3.1L1039.5,665.7L1039.5,665.7z"/>
-<path class="st6" d="M1044.2,730.6l16.7-26.6c0,0,4.2-9.4-3.1-12l-13.5-3.1L1044.2,730.6L1044.2,730.6z"/>
-<g>
- <path class="st10" d="M1039.6,650c-26.5,0-47.9,21.4-47.9,47.9s21.4,47.9,47.9,47.9c26.5,0,47.9-21.4,47.9-47.9
- S1066.1,650,1039.6,650z M1037.2,705.9h-23.9l23.9-46.4V705.9z M1042,736.3v-46.4h23.9L1042,736.3z"/>
-</g>
-</svg>
diff --git a/plugins/jetpack/images/jetpack-search-icon.svg b/plugins/jetpack/images/jetpack-search-icon.svg
deleted file mode 100644
index 1ba0a75d..00000000
--- a/plugins/jetpack/images/jetpack-search-icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 1168"><defs><style>.cls-1{fill:#fff}.cls-2{fill:#CCCED0}.cls-3{fill:#204A69}.cls-4,.cls-5{fill:none}.cls-4{stroke:#204A69;stroke-linecap:round;stroke-linejoin:round;stroke-width:72.22px}</style></defs><title>jetpack-search</title><g id="jetpack-search"><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1-2"><path class="cls-1" d="M1282.92 676.57c-32.91-89.23-192.63-155.49-332.14-119"/><path class="cls-2" d="M1273.85 679.51a43.31 43.31 0 0 1-7.86-8.64 48.75 48.75 0 0 1-2.85-4.41c-1.12-1.38-2.24-2.76-3.28-4.23l-6-8.64c-2.07-2.85-4.75-5.35-7-8.12a135.34 135.34 0 0 0-15.55-15.11 191 191 0 0 0-17.23-13.36 298.79 298.79 0 0 0-80.77-38.19 387.12 387.12 0 0 0-88.89-16.32c-30.32-1.38-60.47 0-92.17-.61a5 5 0 0 1-4.84-5.09 5.2 5.2 0 0 1 2.6-4.24 185.37 185.37 0 0 1 95.62-19.78 345.84 345.84 0 0 1 97.44 15.23 297.6 297.6 0 0 1 89.23 43.71 214.59 214.59 0 0 1 19.61 16 162.39 162.39 0 0 1 17.28 18.48c2.76 3.37 5.7 6.48 8.64 10l7.08 11.06a61 61 0 0 1 3.2 5.61c.69 2.16 1.55 4.24 2.07 6.4a49.18 49.18 0 0 1 2.16 13.3 10.11 10.11 0 0 1-10 10.11 9.69 9.69 0 0 1-6.39-2.16z"/><path class="cls-1" d="M818.45 571.44c180.45-66.86 351.31 58.22 411.44 117.22"/><path class="cls-2" d="M815.08 562.37a127.67 127.67 0 0 1 55.28-19.78c4.84-.86 9.59-2 14.51-2.68l14.69-1.29a195.88 195.88 0 0 1 29.44-1.47 353.24 353.24 0 0 1 115.5 19.26 470.28 470.28 0 0 1 104.26 51.05 271.73 271.73 0 0 1 84.48 77.75 4.83 4.83 0 0 1-1.23 6.73l-.15.09a4.89 4.89 0 0 1-5.18 0c-32.65-19.35-62-40.6-93.47-59.52a526.16 526.16 0 0 0-98.72-45.51 357.57 357.57 0 0 0-105.65-18.92 172.4 172.4 0 0 0-26.69.69l-13.39.78c-4.41.52-8.64 1.47-13.22 2.16L862.33 574l-6.65 1.12-6.4 1.9a78.55 78.55 0 0 1-27.28 3.32h-1.64a10.11 10.11 0 0 1-9.25-10.71 10.27 10.27 0 0 1 3.97-7.26z"/><path class="cls-1" d="M998.55 878.19c16.45-88.29-50.79-146.85-107.28-163.35-116-34.56-253.88 32.74-270.64-48-14.69-70.49 282-210.95 568.4 75.06"/><path class="cls-2" d="M989.05 876.37A256.79 256.79 0 0 1 986.2 843a109.8 109.8 0 0 0-7.2-31.24 127 127 0 0 0-37.92-51.83 156.77 156.77 0 0 0-57.71-30.41 274.9 274.9 0 0 0-67.89-9.07c-23.33-.52-47.08.95-71.27 2.51a419.47 419.47 0 0 1-75.84 0 84.19 84.19 0 0 1-41.46-15.81 57 57 0 0 1-15.7-19.15 71.06 71.06 0 0 1-4.49-11.05 62.75 62.75 0 0 1-2.59-12.36 51.34 51.34 0 0 1 5.7-25.91 84.41 84.41 0 0 1 12.7-18.14 148.44 148.44 0 0 1 31.79-25.4A268 268 0 0 1 726.19 566a363.2 363.2 0 0 1 75-11.06 437.13 437.13 0 0 1 148.4 20A494.1 494.1 0 0 1 1083 640.46a576.35 576.35 0 0 1 109.7 98 4.75 4.75 0 0 1 0 6.72 4.83 4.83 0 0 1-6.39 0A835.35 835.35 0 0 0 1070.77 660a553 553 0 0 0-129.06-57.61 410.34 410.34 0 0 0-138.64-17.28 337.66 337.66 0 0 0-68.5 10.71 234.38 234.38 0 0 0-62.63 25.92A119.47 119.47 0 0 0 646.46 642a32.37 32.37 0 0 0-10.37 20.38 40.68 40.68 0 0 0 3.63 11.15 26.86 26.86 0 0 0 7.08 8.63 54.26 54.26 0 0 0 25.92 8.64 398.66 398.66 0 0 0 69.1-.6c24.19-1.56 48.9-3.2 74-2.68a309.9 309.9 0 0 1 75.93 10.19 175.74 175.74 0 0 1 69.11 37.84 157.55 157.55 0 0 1 45.52 65.3 140.69 140.69 0 0 1 8.73 39.83 68.27 68.27 0 0 1-7.09 39 10.18 10.18 0 0 1-13.71 4.42l-.37-.19a9.86 9.86 0 0 1-4.92-6.83z"/><path class="cls-3" d="M1013 878.19l-110.16 77.48L568 504.24l110.14-77.49z"/><circle class="cls-4" cx="546.69" cy="307.03" r="199.03"/><path class="cls-1" d="M1018.16 1159.1c-270.38-113.1-348.9-478.73-282.9-502.48C814.9 627.94 913 917.75 968.49 909.2c31.7-4.84 40.52-30.5 39.82-56.76"/><path class="cls-2" d="M1014.45 1168c-44.84-11.49-83.71-38.44-119-67.21a542.68 542.68 0 0 1-92.77-100.72A618 618 0 0 1 736 880.78a498.24 498.24 0 0 1-37-132.43 281.26 281.26 0 0 1-2-35.41 143.4 143.4 0 0 1 5-37.32 66.86 66.86 0 0 1 9.5-20 45.32 45.32 0 0 1 9.59-9.42 37.27 37.27 0 0 1 12.61-5.78 50.51 50.51 0 0 1 24.1-.52 68.06 68.06 0 0 1 20.05 8.1 136.57 136.57 0 0 1 28.93 24.18 310.46 310.46 0 0 1 22.38 27.13c13.73 18.48 25.91 37.57 37.57 56.75 23.41 38.1 44.84 77.75 69.11 112.3a133.06 133.06 0 0 0 19.61 22.89 28.32 28.32 0 0 0 9.15 5.75 3.26 3.26 0 0 0 1.39 0h2.16a39.45 39.45 0 0 0 6.47-1.12 32.57 32.57 0 0 0 20-14.78 74.4 74.4 0 0 0 8.63-28.76 4.84 4.84 0 0 1 5.37-4.24h.08a4.74 4.74 0 0 1 4.14 4.06 70.25 70.25 0 0 1-2.68 36.36A49.62 49.62 0 0 1 982 917.23a64.69 64.69 0 0 1-9.59 3l-2.51.6h-3.62a34.71 34.71 0 0 1-6.83-.52 48.37 48.37 0 0 1-20-9.76A150.44 150.44 0 0 1 914 884.67c-28.33-36.72-49.58-75.76-73.33-113-11.84-18.66-23.85-37-36.8-54a169.49 169.49 0 0 0-42.59-42.42 25.94 25.94 0 0 0-19.7-4.23c-1.81.61-1.81.52-2.5 1a11.18 11.18 0 0 0-2.16 2.24 33.71 33.71 0 0 0-4.58 10.11 114.15 114.15 0 0 0-3.54 28.68 255.85 255.85 0 0 0 1.9 31.18 497.53 497.53 0 0 0 34.55 124 587.53 587.53 0 0 0 62.29 113.86A508.21 508.21 0 0 0 913.9 1078a463 463 0 0 0 51.83 38.09c18.22 11.58 36.8 22.2 55.45 33.87a9.76 9.76 0 0 1-7.6 17.27z"/></g></g></g><g id="clear_rectangle" data-name="clear rectangle"><path id="Layer_4" data-name="Layer 4" class="cls-5" d="M0 0h1600v1168H0z"/></g></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/jetpack-search.svg b/plugins/jetpack/images/jetpack-search.svg
deleted file mode 100644
index c2a779e8..00000000
--- a/plugins/jetpack/images/jetpack-search.svg
+++ /dev/null
@@ -1,281 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- viewBox="0 0 320.2 174.2" style="enable-background:new 0 0 320.2 174.2;" xml:space="preserve">
-<style type="text/css">
- .st0{fill:#FFFFFF;}
- .st1{fill:#CCCED0;}
- .st2{fill:#00BE28;}
- .st3{fill:none;}
- .st4{fill:#E1E2E2;}
- .st5{fill:#84A5BC;}
- .st6{fill:#6F93AD;}
- .st7{fill:#4E748E;}
- .st8{fill:#E8EEF3;}
- .st9{fill:none;stroke:#CCCED0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:5,5;}
- .st10{fill:#204A69;}
- .st11{fill:#BBC9D5;}
- .st12{fill:none;stroke:#BBC9D5;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
- .st13{fill:#658DAA;}
- .st14{fill:#204A69;stroke:#204A69;stroke-width:0.7347;stroke-miterlimit:10;}
- .st15{fill:none;stroke:#204A69;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
- .st16{fill:#FFFFFF;stroke:#204A69;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
- .st17{fill:#204A69;stroke:#204A69;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
- .st18{fill:none;stroke:#204A69;stroke-width:1.3476;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;}
- .st19{fill:#204A69;}
-</style>
-<g>
- <g>
- <g>
- <g>
- <path class="st0" d="M178.5,129.5h-63.7V103h42.1c11.9,0,21.6,9.7,21.6,21.6V129.5z"/>
- <path class="st1" d="M178.6,129.6L178.6,129.6l-15.9,0.2l-15.9,0.1c-5.3,0-10.6,0.1-16,0.1l-16,0c-0.3,0-0.5-0.2-0.5-0.5v0V103
- c0-0.3,0.2-0.5,0.5-0.5h40.5c1.7,0,3.4,0,5.1,0.3c1.7,0.3,3.4,0.8,5,1.4c3.2,1.3,6,3.4,8.3,6.1c2.2,2.6,3.8,5.8,4.6,9.1
- c0.4,1.7,0.6,3.4,0.6,5.1C178.8,126.2,178.7,128,178.6,129.6z M178.3,129.5L178.3,129.5l-0.2-5c0-1.7-0.2-3.3-0.6-4.9
- c-0.8-3.2-2.4-6.2-4.5-8.7c-2.2-2.5-4.9-4.5-8-5.7c-1.5-0.6-3.1-1.1-4.8-1.3c-1.6-0.3-3.3-0.3-5-0.3h-40.5l0.5-0.5v26.6
- l-0.5-0.5l15.8,0c5.3,0,10.6,0.1,15.9,0.1l15.9,0.1L178.3,129.5z"/>
- </g>
- <path class="st2" d="M178.5,92.3h-63.7V53.6h42.1c11.9,0,21.6,9.7,21.6,21.6V92.3z"/>
- <polygon class="st0" points="141.7,66.3 151.6,73 141.7,79.6 "/>
- </g>
- <g>
- <path class="st3" d="M108.6,129.9"/>
- </g>
- <path class="st4" d="M77.1,121.3h27.5V53.6h-8.9c-10.3,0-18.6,8.3-18.6,18.6V121.3z"/>
- <g>
- <path class="st5" d="M66.7,83.2l-0.4-36.3l-0.1-18.2c0-1.6,0.5-3.3,1.4-4.7c0.9-1.4,2.2-2.5,3.8-3.2c0.8-0.3,1.6-0.5,2.4-0.6
- l0.6,0l0.6,0l1.1,0l4.5,0L117,20l36.3-0.1l18.2,0l9.1,0l4.5,0c1.6-0.1,3.5,0.3,4.9,1.3c1.5,0.9,2.7,2.3,3.4,3.8
- c0.3,0.8,0.6,1.6,0.7,2.5c0.1,0.4,0.1,0.9,0.1,1.3l0,1.1l0,9.1l0,18.2l-0.1,72.6c0,0.6-0.5,1.1-1.1,1.1h0l-22.1-0.1l-22.1-0.2
- l-22.1-0.2c-7.4,0-14.7-0.2-22.1-0.3c-0.2,0-0.4-0.2-0.4-0.4c0-0.2,0.2-0.4,0.4-0.4c7.4-0.1,14.7-0.3,22.1-0.3l22.1-0.2l22.1-0.2
- l22.1-0.1l-1.1,1.1l-0.1-72.6l0-18.2l0-9.1l0-1.1c0-0.4,0-0.7-0.1-1c-0.1-0.6-0.3-1.3-0.5-1.9c-0.5-1.2-1.4-2.2-2.5-2.9
- c-0.5-0.3-1.1-0.6-1.8-0.8c-0.3-0.1-0.6-0.1-1-0.2c-0.3,0-0.6,0-1,0l-4.5,0l-9.1,0l-18.2,0L117,22l-36.3-0.1l-4.5,0
- c-0.7,0-1.6,0-2.2,0c-0.7,0.1-1.3,0.2-2,0.5c-1.3,0.5-2.3,1.4-3.1,2.5c-0.8,1.1-1.2,2.5-1.2,3.9l-0.1,18.2l-0.4,36.3
- c0,0.1-0.1,0.2-0.2,0.2C66.8,83.4,66.7,83.3,66.7,83.2z"/>
- </g>
- <path class="st6" d="M65.7,41.1v-6.9v-5.7c0-5,3.4-9.1,7.7-9.1h113.2c4.2,0,7.7,4.1,7.7,9.1v12.7H65.7z"/>
- <g>
- <path class="st7" d="M197.7,41c-11.3,0.8-22.5,0.7-33.8,0.8L130.2,42l-33.8-0.1c-11.3,0-22.5,0-33.8-0.8v-0.5
- c11.3-0.8,22.5-0.7,33.8-0.8l33.8-0.1l33.8,0.1c11.3,0,22.5,0,33.8,0.8V41z"/>
- </g>
- <g>
- <path class="st1" d="M120,125.6c1.8-2,4-3.6,6.5-4.8c2.4-1.2,5.1-2,7.9-2c2.8,0,5.4,0.6,8,1.4c2.6,0.8,5.1,1.6,7.6,2.3
- c5.1,1.3,10.5,2,15.4-0.2c2.4-1,4.7-2.4,6.9-3.9c2.2-1.5,4.2-3.2,6.1-5.1l0,0c0.1-0.1,0.2-0.1,0.3,0c0.1,0.1,0.1,0.2,0,0.3
- c-1.8,2-3.8,3.8-6,5.4c-2.1,1.6-4.5,3-6.9,4.1c-2.5,1.1-5.2,1.8-8,1.6c-2.7-0.1-5.4-0.5-8-1.2c-2.6-0.7-5.1-1.5-7.7-2.3
- c-2.5-0.8-5.1-1.4-7.7-1.4c-2.6,0-5.2,0.6-7.6,1.7c-2.4,1.1-4.7,2.5-6.7,4.2l0,0c0,0-0.1,0-0.1,0
- C119.9,125.7,119.9,125.7,120,125.6z"/>
- </g>
- </g>
- <g>
- <g>
- <path class="st8" d="M0.2,172.8c26.6-0.6,53.3-0.7,79.9-0.8l79.9-0.1c53.3,0.1,106.6,0.1,159.8,0.7c0.2,0,0.4,0.2,0.4,0.4
- c0,0.2-0.2,0.4-0.4,0.4c-53.3,0.7-106.6,0.6-159.8,0.7L80.1,174c-26.6-0.1-53.3-0.3-79.9-0.8c-0.1,0-0.2-0.1-0.2-0.2
- C0,172.9,0.1,172.8,0.2,172.8z"/>
- </g>
- <g>
- <path class="st9" d="M60.3,40.8"/>
- <path class="st9" d="M193.9,40.8"/>
- </g>
- <path class="st10" d="M211.8,148.3c0,0,0.2,20.1-1.1,20.8c-0.6,0.3-1.2,0.6-1.8,1c-1,0.7-0.6,2.2,0.6,2.3c1,0.1,3.3,0.2,4.5,0.1
- c1.9-0.2,2.4-1.6,2.7-3.6l2.9-20.6"/>
- <path class="st10" d="M226,148.8c0,0,8.1,18.4,7.1,19.6c-0.4,0.5-0.9,1-1.3,1.6c-0.6,1,0.3,2.2,1.4,1.9c1-0.3,3.1-1.1,4.2-1.7
- c1.7-0.9,1.6-2.5,1.1-4.3l-5.4-20.1"/>
- <path class="st5" d="M224.2,92.8c3.4-1.2,9.6-0.1,13.4,9.9c3.3,8.7,2.9,19.4-4.1,21.3C229.4,125.1,224.2,92.8,224.2,92.8z"/>
- <path class="st11" d="M211.8,149.6h27.2c-3.1-20.6-8.1-41.3-8.1-41.3l-6.6-15.4c0,0-0.5-1.4-3.9,0.3
- C213.3,96.6,212.1,134.3,211.8,149.6z"/>
- <path class="st11" d="M284.3,93.8l-3.3,5L219.5,47l8-7.5l55.8,47C285.4,88.3,285.9,91.5,284.3,93.8z"/>
- <circle class="st12" cx="206.6" cy="25.7" r="21.7"/>
- <polygon class="st0" points="244.5,62.7 250.7,44.4 260.1,50.4 251.1,65.6 "/>
- <path class="st13" d="M271.9,116c17.8,16.3,19.1,22.9,23.8,37.1l-12.1,11.7l-12.1-18.2"/>
- <path class="st13" d="M253.8,88.3c-8.2,23.8-8.8,30.4-1.1,43.9L253.8,88.3z"/>
- <path class="st10" d="M250.7,44.4l11.6,8.2l-11.1,12.9l1.7,19.2h24.1c0,0,3.5-4.8,3.8-11c0.3-6.2-4.3-38.6-15.5-39.9
- C253.9,32.5,250.7,44.4,250.7,44.4z"/>
- <g>
- <path class="st0" d="M58.6,155.7l3.9,10.3l-7.2,4.3c0,0-6.5-8-16.9-30.5"/>
- <path class="st10" d="M59.1,155.5l4.3,10.2l0,0c0.2,0.4,0,0.8-0.4,1c-1.2,0.7-2.4,1.4-3.6,2.1c-1.2,0.7-2.4,1.4-3.6,2.2l0,0
- c-0.3,0.2-0.7,0.1-1-0.2c-1.8-2.4-3.3-4.9-4.8-7.4c-1.5-2.5-2.9-5.1-4.3-7.7c-1.4-2.6-2.7-5.2-4-7.8c-1.3-2.6-2.5-5.3-3.7-7.9
- c-0.1-0.3,0-0.5,0.2-0.7c0.2-0.1,0.5,0,0.7,0.2c1.2,2.6,2.5,5.2,3.8,7.8c1.3,2.6,2.7,5.2,4.1,7.7c1.4,2.6,2.8,5.1,4.4,7.5
- c1.5,2.5,3.1,4.9,4.8,7.2l-1-0.2c1.2-0.7,2.4-1.4,3.6-2.1c1.2-0.7,2.4-1.4,3.5-2.2l-0.3,1l-3.6-10.4c-0.1-0.3,0-0.5,0.3-0.6
- C58.7,155.1,59,155.3,59.1,155.5z"/>
- </g>
- <path class="st14" d="M54.1,168.8c3.4-1.9,13.9-7.4,15.7-7.7c1.8-0.4,2.1-0.2,0.5,1.3c-1.6,1.5-14.7,8.9-14.7,8.9L54.1,168.8z"/>
- <g>
- <path class="st0" d="M46.5,161.2l-1.7,11.1h-9c0,0-1.4-10.3,1.3-34.9"/>
- <path class="st10" d="M47,161.3l-1.4,11.1l0,0c-0.1,0.4-0.4,0.7-0.8,0.7c-1.5-0.1-3-0.1-4.5-0.1c-1.5,0-3,0-4.5,0l0,0
- c-0.4,0-0.7-0.3-0.7-0.7c-0.3-3-0.3-5.9-0.3-8.8c0-2.9,0.1-5.9,0.3-8.8c0.2-2.9,0.4-5.8,0.6-8.7c0.3-2.9,0.6-5.8,0.9-8.7
- c0-0.3,0.3-0.5,0.6-0.4c0.3,0,0.5,0.3,0.4,0.5c-0.3,2.9-0.6,5.8-0.8,8.7c-0.2,2.9-0.4,5.8-0.5,8.7c-0.1,2.9-0.2,5.8-0.2,8.7
- c0,2.9,0.1,5.8,0.4,8.6l-0.8-0.7c1.5,0,3,0,4.5,0c1.5,0,3,0,4.5-0.1l-0.8,0.7l2.1-11c0.1-0.3,0.3-0.5,0.6-0.4
- C46.9,160.8,47.1,161,47,161.3z"/>
- </g>
- <polyline class="st10" points="52.7,112.9 60.7,159.6 46.9,163.1 "/>
- <g>
- <path class="st6" d="M36.5,86.7c-5.2,22.3-2,35.5-2.6,40.6c-0.7,5.1-4.3,26.2-3.5,33.6l16.6,2.2l9-65.5"/>
- </g>
- <g>
- <path class="st0" d="M59.3,51.9c0.8,0.5,1.3,0.6,2.3,0.9c4,1,7.5-0.9,9.4-4.2c0.5-0.9,2.5-0.6,2.8-1.7c0.4-1.5-1.9-2.8-1.5-5.8
- c0.4-3.4-2.4-6.2-6.1-7.1c-5.2-1.3-10.4,1.9-11.7,7.1"/>
- <path class="st10" d="M59.6,51.5c0.4,0.2,0.8,0.4,1.3,0.5c0.5,0.1,1,0.2,1.4,0.3c0.9,0.1,1.9,0.1,2.8-0.1c1.8-0.4,3.3-1.5,4.4-3
- l0.4-0.6l0.2-0.3c0.1-0.1,0.1-0.1,0.3-0.4c0.3-0.4,0.7-0.6,1-0.7c0.3-0.1,0.6-0.2,0.8-0.3c0.2-0.1,0.4-0.1,0.6-0.2
- c0.1-0.1,0.2-0.1,0.1-0.1c0,0,0-0.1,0-0.2c0-0.1-0.1-0.2-0.1-0.4c-0.3-0.7-1-1.8-1.3-2.9c-0.1-0.6-0.2-1.2-0.1-1.8l0.1-0.7
- c0-0.2,0-0.4,0-0.6c-0.1-1.6-1.3-3.1-2.9-4.1c-1.6-0.9-3.4-1.4-5.3-1.3c-3.7,0.2-7.2,2.9-8.2,6.6c-0.1,0.3-0.4,0.4-0.6,0.3
- c-0.3-0.1-0.4-0.3-0.4-0.6c0.4-2.1,1.5-4.1,3.2-5.5c1.6-1.5,3.7-2.4,5.9-2.6c2.2-0.2,4.4,0.3,6.4,1.4c1,0.6,1.9,1.3,2.6,2.2
- c0.7,0.9,1.2,2.1,1.3,3.3c0,0.3,0.1,0.6,0,0.9l0,0.8c0,0.4,0,0.8,0.1,1.2c0.2,0.8,0.6,1.5,1.1,2.6c0.2,0.5,0.5,1.4,0,2.3
- c-0.3,0.5-0.7,0.7-1,0.9c-0.3,0.1-0.6,0.2-0.9,0.3c-0.5,0.1-0.9,0.3-0.8,0.3c0-0.1-0.1,0.1-0.2,0.2l-0.2,0.3
- c-0.2,0.2-0.3,0.4-0.5,0.7c-1.4,1.7-3.4,3-5.6,3.4c-1.1,0.2-2.2,0.1-3.3-0.1c-0.5-0.1-1-0.3-1.5-0.4c-0.5-0.2-1-0.5-1.5-0.8
- c-0.2-0.2-0.3-0.5-0.1-0.7C59.1,51.4,59.3,51.4,59.6,51.5z"/>
- </g>
- <g>
- <path class="st10" d="M255.3,31.5c-0.5,0.3-1,0.6-1.6,0.7c-0.6,0.2-1.1,0.3-1.6,0.4c-1.1,0.2-2.3,0.2-3.5,0
- c-2.3-0.5-4.4-1.9-5.7-3.8c-0.2-0.2-0.3-0.5-0.5-0.7l-0.2-0.4c-0.1-0.1-0.2-0.3-0.2-0.3c0,0-0.4-0.2-0.9-0.4
- c-0.3-0.1-0.6-0.2-0.9-0.3c-0.3-0.2-0.8-0.4-1-0.9c-0.5-1-0.1-1.9,0.1-2.4c0.6-1.1,1.1-1.8,1.3-2.7c0.1-0.4,0.2-0.9,0.2-1.3
- l0-0.8c0-0.3,0-0.6,0.1-0.9c0.2-1.3,0.8-2.4,1.5-3.4c0.8-0.9,1.8-1.7,2.8-2.2c2.1-1.1,4.5-1.5,6.8-1.2c2.3,0.3,4.5,1.4,6.1,3
- c1.7,1.6,2.7,3.7,3.1,6c0,0.3-0.1,0.5-0.4,0.6c-0.3,0-0.5-0.1-0.6-0.4c-0.9-4-4.5-7.1-8.4-7.4c-1.9-0.2-4,0.2-5.7,1.2
- c-1.7,0.9-3,2.4-3.3,4.2c0,0.2-0.1,0.4,0,0.7l0,0.8c0,0.6,0,1.3-0.2,1.9c-0.3,1.2-1.1,2.3-1.5,3c-0.1,0.2-0.2,0.4-0.2,0.5
- c0,0.1,0,0.2,0,0.2c0,0,0,0,0.2,0.1c0.1,0.1,0.4,0.2,0.6,0.2c0.3,0.1,0.5,0.2,0.9,0.3c0.3,0.1,0.7,0.4,1,0.8
- c0.2,0.3,0.2,0.3,0.3,0.4L244,27l0.4,0.6c1.1,1.6,2.7,2.9,4.6,3.4c0.9,0.2,1.9,0.3,2.9,0.2c0.5,0,1-0.1,1.5-0.2
- c0.5-0.1,0.9-0.3,1.4-0.5c0.2-0.1,0.5,0,0.7,0.2C255.6,31.1,255.5,31.3,255.3,31.5z"/>
- </g>
- <path class="st14" d="M35.4,170.2c3.9,0.1,15.7,0.9,17.5,1.5c1.8,0.6,1.9,0.9-0.3,1.4c-2.1,0.5-17.2,0-17.2,0V170.2z"/>
- <path class="st15" d="M67.4,49.4c0.7,0.6,1.5,0.8,1.5,0.8"/>
- <path class="st10" d="M67.7,45.4L67.7,45.4c-0.3-0.1-0.4-0.5-0.3-0.8l0.4-0.9c0.1-0.3,0.5-0.4,0.8-0.3l0,0
- c0.3,0.1,0.4,0.5,0.3,0.8l-0.4,0.9C68.4,45.4,68,45.6,67.7,45.4z"/>
- <path class="st13" d="M57.8,86.3l-1.9,11.3l-25.7-5.4c0,0,6.9-39,21.2-39.1c4.6,0,9.3,3.5,8.5,10.9"/>
- <g>
- <path class="st0" d="M58.4,67.7c2.5-6.1,5.5-12.5,10.3-13.8c4.8-1.3,0.7,5.4-1.8,7.6c-0.4,2.8,2.7,21-8.9,20.9
- C43.3,82.3,44.4,58,50.5,56.5c5.4-1.3,6.2,7.3,8.6,15.2"/>
- <path class="st10" d="M57.9,67.5c0.9-2.2,1.8-4.4,2.9-6.6c1.1-2.1,2.5-4.2,4.4-5.9c1-0.8,2.1-1.5,3.4-1.8c0.3-0.1,0.7-0.2,1-0.2
- c0.4,0,0.8,0,1.3,0.3c0.5,0.3,0.7,0.9,0.8,1.3c0,0.4,0,0.8-0.1,1.1c-0.3,1.3-1,2.4-1.6,3.5c-0.7,1-1.4,2-2.4,2.9l0,0l0.3-0.6
- c-0.1,0.6,0,1.5,0,2.3l0,2.5c0,1.7,0,3.3-0.2,5c-0.2,1.7-0.4,3.3-1,5c-0.5,1.6-1.3,3.2-2.6,4.5c-1.3,1.3-3.1,2.1-4.8,2.2
- c-1.8,0.2-3.5,0-5.2-0.6C52.5,82,51,81,49.8,79.7c-1.2-1.3-2.1-2.8-2.8-4.4c-1.3-3.2-1.7-6.6-1.5-10c0.1-1.7,0.4-3.4,0.9-5
- c0.3-0.8,0.6-1.6,1.1-2.4c0.5-0.7,1.1-1.5,2.1-1.9c0.2-0.1,0.5-0.2,0.7-0.2c0.2,0,0.5-0.1,0.7-0.1c0.5-0.1,1,0,1.5,0.1
- c1,0.2,1.8,0.9,2.4,1.6c1.1,1.4,1.7,3.1,2.2,4.6c1,3.2,1.6,6.4,2.5,9.5c0.1,0.3-0.1,0.5-0.3,0.6c-0.3,0.1-0.5-0.1-0.6-0.3
- c-1-3.1-1.7-6.3-2.7-9.4c-0.5-1.5-1.1-3-2-4.2c-0.5-0.6-1-1-1.6-1.1c-0.3-0.1-0.6-0.1-1,0c-0.2,0-0.3,0.1-0.5,0.1
- c-0.2,0-0.3,0.1-0.4,0.2c-1.1,0.6-1.9,2.1-2.4,3.5c-0.5,1.5-0.8,3-0.9,4.6c-0.2,3.2,0.2,6.4,1.4,9.3c1.2,2.9,3.3,5.4,6.2,6.3
- c2.8,0.9,6.4,0.8,8.4-1.3c1.1-1,1.7-2.4,2.2-3.9c0.5-1.5,0.7-3.1,0.8-4.7c0.1-1.6,0.1-3.2,0.1-4.8L66.1,64c0-0.8-0.1-1.6,0-2.6
- c0-0.2,0.1-0.4,0.2-0.5l0.1-0.1l0,0c0.8-0.7,1.6-1.6,2.2-2.5c0.6-0.9,1.3-1.9,1.5-2.9c0.1-0.2,0.1-0.5,0.1-0.6
- c0-0.2,0-0.2-0.1-0.2c-0.1-0.1-0.7-0.1-1.2,0c-1,0.3-2,0.8-2.9,1.5c-1.7,1.4-3.1,3.4-4.2,5.4c-1.1,2-2.1,4.2-3,6.4
- c-0.1,0.3-0.4,0.4-0.7,0.3C58,68.1,57.8,67.8,57.9,67.5z"/>
- </g>
- <path class="st10" d="M53.5,44.3c0,3.1,13.5,1.3,17.4-8.4c0,0-8.1-4.4-12.4-1.5S53.5,41.2,53.5,44.3z"/>
- <g>
- <polyline class="st10" points="60.9,52.6 59.1,55.4 59.1,51.9 "/>
- <path class="st10" d="M61.1,52.7c-0.4,1-1,2-1.5,2.9c-0.1,0.2-0.4,0.3-0.7,0.2c-0.1-0.1-0.2-0.3-0.2-0.4c0-0.6,0-1.2,0-1.7
- c0-0.6,0.1-1.2,0.2-1.7c0-0.1,0.2-0.2,0.3-0.2c0.1,0,0.2,0.1,0.2,0.2c0.1,0.6,0.2,1.2,0.2,1.7c0,0.6,0.1,1.2,0.1,1.7l-0.9-0.3
- c0.6-0.9,1.2-1.8,2-2.7c0.1-0.1,0.3-0.1,0.4,0C61.1,52.5,61.2,52.7,61.1,52.7z"/>
- </g>
- <path class="st10" d="M55.7,28.1c-5.7,3.1-1,9.8,4.4,7.2S61.5,25,55.7,28.1z"/>
- <path class="st10" d="M53,21.8c-4.6,2.5-1.1,8.8,3.2,6.7S57.7,19.3,53,21.8z"/>
- <g>
- <path class="st0" d="M43.8,95.3c0.1,1.5,0.1,4.5,0.5,7.5"/>
- <path class="st10" d="M44.3,95.3c0.2,1.3,0.3,2.5,0.4,3.7c0.1,1.2,0.2,2.5,0.1,3.7l0,0c0,0.3-0.2,0.5-0.5,0.5
- c-0.2,0-0.4-0.2-0.5-0.4c-0.4-1.2-0.5-2.5-0.6-3.8c-0.1-1.3,0-2.5,0.1-3.8l0,0c0-0.3,0.3-0.5,0.6-0.5
- C44.1,94.9,44.3,95,44.3,95.3z"/>
- </g>
- <path class="st16" d="M46.9,96.3"/>
- <g>
- <path class="st0" d="M262.3,52.7c0,0-9.1,21.7-14.4,22.6c-5.3,0.9-14.7-11.2-18.5-15c-7.1-0.6-8.6-9.9-7-11.1
- c2.4-1.7,6,5.5,7.5,4.4c1.5-1.1-2-4.2-0.7-5.3c1.2-1,4.8,2.5,5.7,6.2c0.2,0.8,0.7,1.4,1.4,1.7c5.3,2,10.1,4.6,10.1,4.6"/>
- <path class="st10" d="M262.7,52.9c-1.6,4-3.4,8-5.4,11.8c-1,1.9-2.1,3.8-3.3,5.7c-0.6,0.9-1.2,1.8-1.9,2.7
- c-0.7,0.9-1.5,1.7-2.5,2.4c-0.2,0.2-0.6,0.3-0.9,0.5c-0.3,0.1-0.7,0.3-1,0.3c-0.7,0.1-1.3,0-1.9-0.2c-1.2-0.3-2.2-0.9-3.2-1.5
- c-1.9-1.2-3.6-2.7-5.2-4.2c-1.6-1.5-3.1-3.1-4.5-4.7c-1.5-1.6-2.9-3.3-4.3-4.8l0.6,0.3c-1.2-0.1-2.5-0.5-3.5-1.1
- c-1.1-0.6-2-1.5-2.7-2.5c-0.7-1-1.3-2.1-1.6-3.2c-0.4-1.1-0.6-2.3-0.6-3.5c0-0.3,0-0.6,0.1-1c0.1-0.3,0.2-0.7,0.5-1.1
- c0.1-0.1,0.2-0.2,0.3-0.3c0.1-0.1,0.2-0.1,0.3-0.2c0.2-0.1,0.4-0.2,0.7-0.2c0.5-0.1,0.9,0,1.3,0.1c0.7,0.3,1.2,0.6,1.7,1
- c0.5,0.4,0.9,0.8,1.3,1.2c0.8,0.8,1.5,1.7,2.2,2.2c0.2,0.1,0.3,0.2,0.4,0.2c0,0-0.1,0-0.1,0c-0.1,0.1,0,0,0,0c0,0,0,0,0-0.2
- c0-0.1-0.1-0.4-0.2-0.6c-0.2-0.4-0.4-0.9-0.7-1.4c-0.1-0.3-0.3-0.5-0.4-0.9c-0.1-0.3-0.2-0.7-0.1-1.3c0.1-0.6,0.6-1,1.1-1.1
- c0.5-0.1,1,0,1.3,0.1c0.7,0.3,1.2,0.6,1.6,1c0.9,0.8,1.6,1.7,2.2,2.7c0.3,0.5,0.6,1,0.8,1.6c0.1,0.3,0.2,0.6,0.3,0.8l0.2,0.8
- c0.1,0.4,0.4,0.7,0.7,0.9c0.1,0,0.2,0.1,0.2,0.1l0.4,0.2l0.8,0.3c1,0.4,2,0.9,3,1.3c2,0.9,4,1.9,5.9,3c0.2,0.1,0.3,0.4,0.2,0.7
- c-0.1,0.2-0.4,0.3-0.7,0.2l0,0c-1.9-1-3.9-1.9-5.9-2.8c-1-0.4-2-0.8-3-1.2l-0.8-0.3l-0.4-0.1c-0.2-0.1-0.3-0.1-0.5-0.2
- c-0.6-0.4-1.1-1-1.3-1.6l-0.2-0.8c-0.1-0.2-0.2-0.5-0.3-0.7c-0.2-0.5-0.4-0.9-0.7-1.4c-0.5-0.9-1.2-1.7-1.9-2.3
- c-0.4-0.3-0.8-0.6-1.1-0.7c-0.2-0.1-0.3-0.1-0.3-0.1c0.1,0,0,0,0,0c0,0,0.1,0.6,0.3,1c0.2,0.5,0.5,0.9,0.8,1.5
- c0.1,0.3,0.2,0.6,0.3,1c0.1,0.4,0,1-0.3,1.4c-0.2,0.2-0.3,0.4-0.6,0.5c-0.3,0.2-0.7,0.2-0.9,0.1c-0.5-0.1-0.8-0.3-1.1-0.5
- c-1-0.8-1.7-1.6-2.5-2.4c-0.7-0.7-1.6-1.5-2.2-1.7c-0.2-0.1-0.3-0.1-0.3,0c0,0-0.1,0-0.1,0c0,0,0,0-0.1,0c0,0,0,0,0,0
- c0,0-0.1,0.2-0.1,0.4c0,0.2-0.1,0.4-0.1,0.7c0,1.9,0.7,4,1.9,5.6c1.2,1.6,2.9,2.6,4.8,2.8c0.2,0,0.5,0.1,0.6,0.3
- c3,3.2,5.7,6.5,8.8,9.4c1.5,1.5,3.1,2.9,4.8,4c1.7,1.1,3.7,2,5,1c0.8-0.5,1.5-1.2,2.2-2c0.7-0.8,1.3-1.6,1.9-2.5
- c1.2-1.7,2.3-3.6,3.3-5.5c2.1-3.7,4-7.6,5.8-11.5l0,0c0.1-0.3,0.4-0.4,0.7-0.2C262.7,52.3,262.8,52.6,262.7,52.9z"/>
- </g>
- <path class="st10" d="M239,12.1c-0.3,4.4,4.1,5.1,6.4,6.8c2.4,1.8,2.5,4,4.8,4.6c2.3,0.6,3.3-0.5,6.1,0.1c2.6,0.5,3.5,2.3,6.5,1.8
- c2.4-0.4,4.1-1.4,4.5-4.9c0.4-3.5-1.4-4-2.1-7.3s-0.8-5.1-4.1-6.2c-3-1-4.4,0-6.9-0.9c-2.5-0.9-3.4-2.1-6.2-1.9
- c-1.9,0.1-3,1-4.6,2.9C241.7,8.9,239.3,8.5,239,12.1z"/>
- <path class="st15" d="M245.2,27.2c-0.9,0.5-1.5,0.8-1.5,0.8"/>
- <path class="st10" d="M245.9,23.4L245.9,23.4c0.3-0.1,0.5-0.4,0.5-0.8l-0.3-1c-0.1-0.3-0.4-0.5-0.8-0.5l0,0
- c-0.3,0.1-0.5,0.4-0.5,0.8l0.3,1C245.2,23.2,245.6,23.4,245.9,23.4z"/>
- <g>
- <path class="st0" d="M253.9,84.8l-1.2,85.6l15.2-2.1c0,0,6.3-22.1,5.3-34.3c-1.9-22.6,4.7-34,3.8-49.2"/>
- <path class="st13" d="M254.4,84.8l-0.4,42.8l-0.2,21.4c0,7.1-0.3,14.3-0.4,21.4l-0.9-0.8l15.2-2.1l-0.6,0.5
- c1.8-6.7,3.4-13.6,4.4-20.5c0.5-3.4,0.9-6.9,1-10.4c0-1.7-0.1-3.4-0.2-5.2c-0.1-1.8-0.2-3.5-0.2-5.3c0-3.5,0.1-7.1,0.5-10.6
- c0.4-3.5,0.9-7,1.5-10.5c1.2-6.9,2.6-13.8,2.2-20.8c0-0.3,0.2-0.5,0.5-0.5c0.3,0,0.5,0.2,0.5,0.5c0.5,7.1-0.9,14.1-2,21
- c-0.6,3.5-1.1,6.9-1.5,10.4c-0.4,3.5-0.5,7-0.5,10.4c0,1.7,0.1,3.5,0.2,5.2c0.1,1.7,0.3,3.5,0.3,5.3c0,3.6-0.4,7.1-0.9,10.6
- c-1,7-2.6,13.9-4.4,20.7c-0.1,0.3-0.3,0.5-0.6,0.5l0,0l-15.2,2.1c-0.4,0.1-0.8-0.2-0.8-0.6c0,0,0-0.1,0-0.1
- c0.1-7.1,0.1-14.3,0.2-21.4l0.4-21.4l0.8-42.8c0-0.3,0.2-0.5,0.5-0.5C254.2,84.3,254.4,84.5,254.4,84.8z"/>
- </g>
- <path class="st13" d="M269.9,167.4c-5.4,0.2-21.7,1.2-24.2,2.1c-2.4,0.9-2.6,1.2,0.3,1.9c3,0.7,23.8,0,23.8,0V167.4z"/>
- <path class="st13" d="M295.8,153.1c-4.1,3.5-16.7,14.4-18.1,16.6c-1.4,2.2-1.3,2.6,1.5,1.3c2.3-1.1,14.1-10.9,17.7-13.9
- c0.6-0.5,0.7-1.3,0.3-2L295.8,153.1z"/>
- <path class="st17" d="M253.9,31.8l2.3,3.2c-0.5-0.7-1.1-4-1.1-4"/>
- <g>
- <path class="st5" d="M220.7,101.2c-0.4-1.1-0.6-2.3-0.6-3.5c0-1.2,0.1-2.5,0.7-3.7c0.1-0.3,0.3-0.6,0.5-0.9
- c0.2-0.3,0.5-0.6,0.7-0.8c0.6-0.5,1.3-0.8,2.1-0.8c1.6,0.1,2.7,1,3.3,2c0.2,0.2,0.1,0.5-0.1,0.7c-0.2,0.1-0.4,0.1-0.6,0l0,0
- c-0.8-0.7-1.8-1.1-2.5-1c-0.4,0.1-0.7,0.2-0.9,0.5c-0.3,0.3-0.5,0.7-0.7,1.1c-0.4,0.9-0.6,1.9-0.7,2.9c-0.1,1.1-0.2,2.1-0.3,3.3
- l0,0c0,0.3-0.3,0.5-0.6,0.5C220.9,101.5,220.7,101.4,220.7,101.2z"/>
- </g>
- <g>
- <path class="st5" d="M227.5,118.9c0.7,0.5,1.2,1.1,1.8,1.6c0.5,0.5,1.1,1,1.6,1.5c0.6,0.4,1.1,0.8,1.7,0.9c0.3,0.1,0.5,0.1,0.8,0
- c0.3,0,0.6-0.2,0.8-0.4l0.1-0.1c0.2-0.2,0.5-0.1,0.7,0.1c0.1,0.1,0.1,0.3,0,0.5c-0.2,0.5-0.6,0.9-1.1,1.2c-0.5,0.3-1,0.4-1.6,0.3
- c-1.1-0.1-1.9-0.6-2.7-1.1c-0.4-0.3-0.7-0.6-1-0.9c-0.3-0.3-0.6-0.6-0.8-1c-0.5-0.7-0.9-1.4-1.2-2.2c-0.1-0.3,0-0.6,0.3-0.7
- C227.1,118.8,227.3,118.8,227.5,118.9L227.5,118.9z"/>
- </g>
- <g>
- <path class="st0" d="M222.9,113.5c0,0-2.5-19.3,1.3-19.6c6.1-0.5,9.8,29,1.3,29.7c-7.9,0.6-12.4-23-4.1-26.2"/>
- <path class="st10" d="M222.4,113.6c-0.6-3.6-0.9-7.1-1.1-10.7c-0.1-1.8-0.1-3.6,0.2-5.5c0.1-0.9,0.3-1.9,0.7-2.9
- c0.3-0.5,0.6-1.1,1.4-1.4c0.2-0.1,0.4-0.1,0.6-0.1c0.2,0,0.3,0,0.5,0c0.3,0,0.6,0.2,0.9,0.3c1.1,0.5,1.7,1.4,2.2,2.2
- c0.5,0.8,0.9,1.7,1.3,2.6c0.7,1.7,1.1,3.5,1.5,5.3c0.7,3.6,1,7.2,0.8,10.9c-0.1,1.8-0.4,3.7-1,5.5c-0.3,0.9-0.7,1.8-1.3,2.6
- c-0.6,0.8-1.5,1.6-2.6,1.9c-1.1,0.3-2.3,0.2-3.2-0.3c-1-0.4-1.8-1.1-2.4-1.8c-1.3-1.5-2.1-3.2-2.8-4.9c-1.3-3.5-1.9-7.1-1.7-10.8
- c0.1-1.8,0.4-3.7,1.1-5.4c0.7-1.7,2-3.4,3.8-4.1c0.3-0.1,0.5,0,0.6,0.3c0.1,0.2,0,0.5-0.3,0.6l0,0c-1.5,0.6-2.5,2.1-3,3.6
- c-0.6,1.6-0.8,3.3-0.8,5c0,3.5,0.6,7,1.9,10.2c0.6,1.6,1.5,3.1,2.5,4.3c1.1,1.2,2.5,1.9,3.8,1.5c1.2-0.4,2.1-1.8,2.6-3.4
- c0.5-1.6,0.8-3.3,0.9-5c0.2-3.5-0.1-7-0.7-10.4c-0.3-1.7-0.8-3.4-1.4-5c-0.3-0.8-0.6-1.6-1.1-2.3c-0.4-0.7-0.9-1.3-1.4-1.6
- c-0.1,0-0.2-0.1-0.4-0.1c-0.1,0-0.1,0-0.2,0c-0.1,0,0,0-0.1,0c-0.1,0-0.3,0.2-0.4,0.5c-0.3,0.6-0.5,1.5-0.6,2.3
- c-0.3,1.7-0.3,3.5-0.3,5.2c0,3.5,0.2,7.1,0.6,10.6l0,0c0,0.3-0.2,0.5-0.5,0.5C222.7,114,222.5,113.8,222.4,113.6z"/>
- </g>
- <g>
- <g>
- <path class="st10" d="M227.1,86.3c-0.7,1-1.6,1.8-2.6,2.4c-1,0.6-2,1.2-3.2,1.5c-2.4,0.6-5.1-0.1-6.9-1.7
- c-0.5-0.4-0.9-0.9-1.3-1.3l-0.3-0.4l-0.1-0.2c0,0,0,0,0,0c0.1,0,0,0-0.2,0c-0.2,0-0.6,0-1.1-0.2c-0.5-0.2-0.9-0.7-1-1.2
- c-0.2-0.9,0-1.5,0-2.1c0-0.3,0.1-0.5,0.1-0.7c0-0.2,0-0.2-0.1-0.6c-0.2-0.6-0.3-1.2-0.3-1.8c-0.1-1.2-0.1-2.5,0.3-3.7
- c0.3-1.2,1-2.4,1.8-3.3c0.9-0.9,2-1.6,3.1-2.1c1.1-0.5,2.3-0.8,3.5-0.9c1.3-0.1,2.6,0.1,3.8,0.7c2.3,1.1,3.9,3,5,5.2
- c1,2.1,1.5,4.6,1,6.9c-0.1,0.3-0.3,0.4-0.6,0.4c-0.3-0.1-0.4-0.3-0.4-0.5l0,0c0.2-2.1-0.4-4.2-1.4-6c-1-1.8-2.5-3.4-4.3-4.2
- c-0.9-0.4-1.8-0.6-2.8-0.5c-1,0.1-2,0.4-2.9,0.8c-1.9,0.8-3.3,2.2-3.9,4.1c-0.3,0.9-0.3,1.9-0.2,2.9c0.1,0.5,0.1,1,0.3,1.5
- l0.1,0.2l0.1,0.3c0.1,0.2,0.1,0.4,0.1,0.6c0,0.4-0.1,0.7-0.1,1c-0.1,0.6-0.2,1.1-0.1,1.2c0,0.1,0,0.1,0,0.1c0,0,0.2,0,0.5,0.1
- c0.3,0,0.9,0,1.3,0.5c0.1,0.1,0.2,0.2,0.3,0.3l0.1,0.2l0.2,0.3c0.3,0.4,0.6,0.8,1,1.1c1.5,1.4,3.6,2,5.5,1.6
- c1-0.2,1.9-0.6,2.9-1.2c0.9-0.6,1.8-1.2,2.4-2l0,0c0.2-0.2,0.5-0.3,0.7-0.1C227.2,85.8,227.3,86.1,227.1,86.3z"/>
- </g>
- <g>
- <path class="st10" d="M212.5,74.4c1.7,2.7,4.4,4.4,7.3,5.7c2.9,1.3,6.1,2.1,9.3,3.1c0.3,0.1,0.4,0.4,0.3,0.6
- c-0.1,0.2-0.3,0.4-0.5,0.4c-1.7-0.1-3.3-0.4-5-0.7c-1.7-0.4-3.3-0.8-4.9-1.5c-1.6-0.7-3.1-1.5-4.5-2.7c-1.3-1.2-2.4-2.7-2.9-4.4
- c-0.1-0.3,0.1-0.5,0.3-0.6C212.2,74.2,212.4,74.2,212.5,74.4L212.5,74.4z"/>
- </g>
- <g>
- <path class="st10" d="M215.6,71.8c0.2-1.1-0.4-1.9-1.4-2.3c-0.9-0.4-2-0.2-2.7,0.4c-0.3,0.3-0.7,0.8-0.9,1.2
- c-0.2,0.4-0.3,0.9-0.2,1.5c0.1,1,0.6,2,1.6,2.4l0,0c0.3,0.1,0.4,0.4,0.3,0.6c-0.1,0.2-0.3,0.3-0.5,0.3c-0.8,0-1.6-0.4-2.2-1
- c-0.6-0.6-0.9-1.4-1.1-2.2c-0.1-0.8-0.1-1.6,0.2-2.4c0.3-0.8,0.8-1.4,1.4-2c0.6-0.5,1.5-0.9,2.3-1c0.9-0.1,1.7,0.1,2.4,0.5
- c0.7,0.4,1.3,1,1.7,1.8c0.3,0.8,0.2,1.8-0.2,2.4c-0.1,0.2-0.5,0.3-0.7,0.2C215.7,72.3,215.6,72,215.6,71.8L215.6,71.8z"/>
- </g>
- <g>
- <line class="st18" x1="214.7" y1="81.9" x2="214.8" y2="82.7"/>
- </g>
- <g>
- <path class="st19" d="M214.2,87.2c0.4,0.1,0.8,0,1.2-0.1c0.2-0.1,0.4-0.2,0.6-0.3c0.2-0.1,0.3-0.3,0.4-0.4l0,0
- c0.1-0.2,0.3-0.2,0.5-0.1c0.1,0.1,0.2,0.2,0.2,0.3c0,0.4-0.2,0.7-0.4,1c-0.2,0.3-0.5,0.4-0.8,0.6c-0.3,0.1-0.7,0.2-1,0.1
- c-0.3,0-0.7-0.1-1-0.4c-0.1-0.1-0.1-0.3,0-0.5C214,87.2,214.1,87.1,214.2,87.2L214.2,87.2z"/>
- </g>
- <g>
- <path class="st0" d="M225.1,74.1c0.4,3.3,7.8,4.7,7.8-1.4C232.9,66.5,224.2,66.4,225.1,74.1z"/>
- <path class="st10" d="M225.6,74c0.1,0.9,0.9,1.6,1.8,1.9c0.9,0.3,1.9,0.3,2.7,0c0.8-0.3,1.3-1,1.6-1.8c0.2-0.8,0.3-1.9,0.1-2.7
- c-0.2-0.9-0.7-1.6-1.4-2.1c-0.7-0.5-1.7-0.6-2.5-0.3c-0.8,0.3-1.6,1-1.9,1.9C225.6,71.9,225.5,73,225.6,74z M224.6,74.1
- c-0.1-1.1-0.1-2.4,0.3-3.5c0.4-1.1,1.2-2.3,2.4-2.8c1.2-0.5,2.7-0.5,3.9,0.1c1.2,0.6,2.1,1.8,2.5,3.1c0.2,0.6,0.2,1.3,0.2,1.9
- c0,0.6-0.1,1.3-0.3,1.9c-0.2,0.6-0.6,1.3-1.1,1.7c-0.5,0.5-1.2,0.8-1.8,1c-1.3,0.3-2.6,0.1-3.7-0.5c-0.6-0.3-1.1-0.6-1.5-1.1
- C225,75.4,224.7,74.8,224.6,74.1z"/>
- </g>
- </g>
- </g>
-</g>
-</svg>
diff --git a/plugins/jetpack/images/jetpack-security.svg b/plugins/jetpack/images/jetpack-security.svg
deleted file mode 100644
index c2f1307d..00000000
--- a/plugins/jetpack/images/jetpack-security.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 1168"><defs><style>.cls-1{fill:#46799A}.cls-2{fill:#CCCED0}.cls-3{fill:#E1E2E2}.cls-4{fill:#fff}.cls-5{fill:#ddf8ff}.cls-6{fill:#204A69}.cls-7{fill:#00be28}.cls-8{fill:none}</style></defs><title>jetpack-security</title><g id="jetpack-security"><path class="cls-1" d="M224.83 285V182.11a64.9 64.9 0 0 1 64.9-64.9h960.8a64.9 64.9 0 0 1 64.9 64.9V285z"/><path class="cls-2" d="M1315.43 1040.62V880.35a160.16 160.16 0 0 1-160 160.27h-930.6"/><path class="cls-3" d="M224.83 285h1090.71v392.74H224.83z"/><path class="cls-2" d="M352.43 781H684.5v259.59H352.43z"/><path class="cls-4" d="M1019.43 529.8h-667v-74.91h599.14a68.08 68.08 0 0 1 68.08 68z"/><path class="cls-2" d="M785 781h405.34v259.59H785z"/><path class="cls-1" d="M326.91 1043.37l-100.32.66h-3.41v-3.41c0-60.06-1.43-120.12-2.75-180.17l-3.85-180.07-2-180.17-.88-180.06V185.08a84.46 84.46 0 0 1 3-25.85 80.64 80.64 0 0 1 12.1-23.43 76.36 76.36 0 0 1 44-28.38 108.28 108.28 0 0 1 24.64-1.87h472.75l360.12-1.32h112.63a106.38 106.38 0 0 1 25.3 2.2 77 77 0 0 1 44 28.82 76 76 0 0 1 12.54 24 86.68 86.68 0 0 1 3.52 26v135l-1.1 720.47v11h-258c-82.38 0-165-.77-247.16-1.54l-247.16-4.4c-83.2-1.86-165.59-1.64-247.97-2.41zm0-5.5c82.38-.77 165-.66 247.15-2.53l247.16-4.4c82.39-.66 165-1.65 247.16-1.54h247l-11 11-1.1-720.47V185.08a60.33 60.33 0 0 0-2.31-18.37 54.86 54.86 0 0 0-8.47-16 51.4 51.4 0 0 0-29.7-19.25 79.51 79.51 0 0 0-19.36-1.32h-113.13l-360.12-.66H297.43a77.82 77.82 0 0 0-19.8 1.43 52.54 52.54 0 0 0-30 19 54.12 54.12 0 0 0-11 35.09v315.21L235 680.38l-3 180.07c-1 60-2 120.11-2 180.17l-3.41-3.52z"/><path class="cls-5" d="M1369.66 285H170.6"/><path class="cls-6" d="M1369.55 287.7c-99.88 8.91-199.86 8.25-299.74 8.8l-299.73 1.43-299.85-1.43c-99.88-.55-199.86 0-299.74-8.8v-5.5c99.88-8.91 199.86-8.25 299.74-8.8l299.85-1.4 299.73 1.43c99.88 0 199.86 0 299.74 8.8z"/><rect class="cls-7" x="1065.74" y="789.39" width="374.09" height="306.67" rx="38.5" ry="38.5"/><path class="cls-7" d="M1401.34 1103.86l-161.92.55H1118a166.53 166.53 0 0 1-22-.55 48.71 48.71 0 0 1-22.55-9.68 50.25 50.25 0 0 1-14.52-20.45 62.61 62.61 0 0 1-3.08-23.21v-40.59l-1-80.74V828.11a50.16 50.16 0 0 1 49.94-50.27h283.35a157 157 0 0 1 22 .88 48.47 48.47 0 0 1 36.4 32.56 58.17 58.17 0 0 1 2.75 23.32v40.47l-.88 81v101.2a48 48 0 0 1-6.27 23.31 46.72 46.72 0 0 1-40.8 23.28zm0-15.73a30.67 30.67 0 0 0 26.5-15.94 32 32 0 0 0 4-15.4V956l-.77-81v-40.4a40.17 40.17 0 0 0-2-16.5 28.53 28.53 0 0 0-8.69-12 27.5 27.5 0 0 0-13.41-5.94c-4.07-.66-12 0-18.48 0h-283.37a27.05 27.05 0 0 0-23.43 13.53 28.16 28.16 0 0 0-3.74 13.64v101.2l-.66 81v40.59a42.23 42.23 0 0 0 1.65 16.61 28 28 0 0 0 8.47 12.32 28.42 28.42 0 0 0 13.64 6.37 151.86 151.86 0 0 0 18.59.66h121.43z"/><path class="cls-4" d="M1302 1006.19l-24.75-52.25a13.42 13.42 0 0 1 2.42-15.18 37.51 37.51 0 1 0-53.9 0 13.63 13.63 0 0 1 2.53 15.29l-24.74 52.14a3 3 0 0 0 1.34 4 2.89 2.89 0 0 0 1.3.31h93.16a3 3 0 0 0 3-3 2.93 2.93 0 0 0-.36-1.31z"/><path class="cls-7" d="M1354.26 789.39H1305v-70.62a44.67 44.67 0 0 0-44.66-44h-15.07a44.66 44.66 0 0 0-44.65 44v70.62h-56.76v-75.9a100.86 100.86 0 0 1 100.84-100.86h16.17a100.87 100.87 0 0 1 100.87 100.86v75.9"/><path class="cls-7" d="M1354.26 797.2l-49.26.8a7.82 7.82 0 0 1-8-7.59v-.22l-1.32-73.37a35.31 35.31 0 0 0-14.08-25.74 34.49 34.49 0 0 0-13-6.16 33.49 33.49 0 0 0-7.26-1h-17.74a32 32 0 0 0-7.15 1 34.79 34.79 0 0 0-25.63 31v73.26a11 11 0 0 1-11 11h-56.76a11 11 0 0 1-11-11V713.6a120.1 120.1 0 0 1 1.44-16.6 105.27 105.27 0 0 1 9.9-32 111.4 111.4 0 0 1 76.22-60.16 145 145 0 0 1 33-2.64 138.86 138.86 0 0 1 32.34 3 112.59 112.59 0 0 1 30.8 12.32 111.26 111.26 0 0 1 44 48.17 100.22 100.22 0 0 1 9.24 31.57 119.81 119.81 0 0 1 1.1 16.39v15.18l-.55 60.61a7.37 7.37 0 0 1-14.63 0l-1.1-60.61V713.6a115.24 115.24 0 0 0-1.43-13.75 87.48 87.48 0 0 0-8.47-26.07 90.68 90.68 0 0 0-37.18-39.15 92.07 92.07 0 0 0-25.41-9.57 124.82 124.82 0 0 0-27.83-2 117.69 117.69 0 0 0-27.83 2.31 90.3 90.3 0 0 0-61.37 49.05 84.86 84.86 0 0 0-7.81 25.74 107.76 107.76 0 0 0-1.1 13.42v75.79l-11-11h56.76l-11 11v-74.89a55 55 0 0 1 41.46-48.48 56 56 0 0 1 11-1.54h19.25a48.12 48.12 0 0 1 11 1.65 55.09 55.09 0 0 1 20 9.9 53.93 53.93 0 0 1 20.35 38.39v74.8l-8-8 49.28.77a7.15 7.15 0 0 1 7.15 7.15v.22a7.27 7.27 0 0 1-6.57 7.89c-.28-.04-.54-.03-.81-.03z"/></g><g id="clear_rectangle" data-name="clear rectangle"><path id="Layer_4" data-name="Layer 4" class="cls-8" d="M0 0h1600v1168H0z"/></g></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/jetpack-site-activity.svg b/plugins/jetpack/images/jetpack-site-activity.svg
deleted file mode 100644
index 5e5b5667..00000000
--- a/plugins/jetpack/images/jetpack-site-activity.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 1168"><style>.st0{fill:#CCCED0}</style><path class="st0" d="M242.4 1066.2c-6.8-69.4-6.4-138.8-6.9-208.2L234 649.8l.7-208.2c.3-69.4-.4-138.8 6.1-208.2h4.1c6.8 69.4 6.4 138.8 6.9 208.2l1.5 208.2-.6 208.2c-.3 69.4.4 138.8-6.1 208.2h-4.2zm1131.8-8.4l-.8-391.7c-.6-65.3-.6-130.6-1.8-195.8-.9-65.3-2.1-130.6-4.2-195.8h-4.1c-2.1 65.3-3.3 130.6-4.2 195.8-1.2 65.3-1.1 130.6-1.8 195.8l-.8 382.8-232.5-.7-241.4.6-241.4.8c-80.5.8-160.9 1.5-241.4 6.2v4.1c80.5 4.7 160.9 5.4 241.4 6.2l241.4.8 241.4.6 241.4-.8h8.9l-.1-8.9z"/><path d="M234.7 274.5V167.9c0-37.2 30.1-67.3 67.3-67.3h996c37.2 0 67.3 30.1 67.3 67.3v106.6H234.7zM420 584.3c-38.3 0-69.4 31.1-69.4 69.4 0 38.3 31.1 69.4 69.4 69.4s69.4-31.1 69.4-69.4c0-38.3-31-69.4-69.4-69.4z" fill="#CCCED0"/><path d="M1421.5 276.5c-103.6 6.2-207.2 6.2-310.8 6.5L800 284.2 489.2 283c-103.6-.4-207.2-.3-310.8-6.5v-4.1c103.6-6.2 207.2-6.2 310.8-6.5l310.8-1.1 310.8 1.1c103.6.4 207.2.3 310.8 6.5v4.1z" fill="#204A69"/><path d="M1226.7 473.1H549.3v-92h704v65.4c0 14.7-11.9 26.6-26.6 26.6zm26.6 487.6v-134h-704v160.6h677.4c14.7 0 26.6-11.9 26.6-26.6zm0-238.1v-174h-704v200.6h677.4c14.7 0 26.6-11.9 26.6-26.6z" fill="#E1E2E2"/><path class="st0" d="M419.9 518.7c2.2 3.4 3.1 6.9 3.5 10.4.4 3.5.7 7 .7 10.6 0 3.5-.2 7-.4 10.6-.3 3.5-.8 7-2.2 10.5-.4.9-1.4 1.3-2.3 1-.5-.2-.8-.5-1-.9l-.1-.1c-1.5-3.5-2.2-7-2.6-10.5-.4-3.5-.7-6.9-.8-10.4-.1-3.5 0-6.9.3-10.4s1-7 3.1-10.6c.2-.5.8-.6 1.3-.4.3-.1.4.1.5.2zm-.5 225.4c-.5-.2-1 .1-1.1.5-2 5.9-2.6 11.6-2.9 17.4-.3 5.8-.4 11.6-.4 17.3.4 11.6.2 23.1 2.5 34.7.1.6.6 1.1 1.2 1.3.9.3 1.8-.3 2.1-1.2 1.7-5.8 2.4-11.6 2.8-17.4.4-5.8.6-11.6.7-17.5 0-5.8-.2-11.6-.7-17.4-.5-5.8-1.4-11.6-3.7-17.3-.1-.1-.3-.3-.5-.4z"/><circle cx="360.2" cy="185.4" r="16.8" fill="#fff"/><path d="M489.4 425.4c0 38.3-31.1 69.4-69.4 69.4s-69.4-31.1-69.4-69.4S381.7 356 420 356s69.4 31.1 69.4 69.4zM420 837.1c-38.3 0-69.4 31.1-69.4 69.4 0 38.3 31.1 69.4 69.4 69.4s69.4-31.1 69.4-69.4c0-38.3-31-69.4-69.4-69.4z" fill="#00be27"/><path d="M465.2 185.4c0 9.3-7.5 16.8-16.8 16.8s-16.8-7.5-16.8-16.8 7.5-16.8 16.8-16.8 16.8 7.5 16.8 16.8zm71.4-16.9c-9.3 0-16.8 7.5-16.8 16.8s7.5 16.8 16.8 16.8 16.8-7.5 16.8-16.8c.1-9.2-7.5-16.8-16.8-16.8z" fill="#E1E2E2"/></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/jetpack-spam.svg b/plugins/jetpack/images/jetpack-spam.svg
deleted file mode 100644
index dc7b86e1..00000000
--- a/plugins/jetpack/images/jetpack-spam.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 1168"><defs><style>.cls-1{fill:#CCCED0}.cls-2{fill:#fff}.cls-3{fill:#CCCED0}.cls-4{fill:#00be28}.cls-5{fill:#658eab}.cls-6{fill:none}</style></defs><title>jetpack-spam</title><g id="jetpack-spam"><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1-2"><path class="cls-1" d="M1234.21 618.37v419.12a75.35 75.35 0 0 1-75.35 75.36H440.65a75.36 75.36 0 0 1-75.36-75.36V618.37"/><path class="cls-2" d="M399 392.18V88.43h667.77v476.8"/><path class="cls-3" d="M396.59 392.18c-2.95-50.56-4.79-101.25-6.26-151.81s-2-101.25-3.07-151.94a11.41 11.41 0 0 1 10.52-12.24h.77l167.4-1h166.91l333.95.86a12.27 12.27 0 0 1 12.27 12.28l-2.21 238.46c-1.35 79.41-2.7 159.55-5.27 238.34a5 5 0 0 1-5.16 4.79 4.91 4.91 0 0 1-4.66-4.79c-2.7-79.41-4-158.93-5.4-238.34l-2.09-238.34 12.27 12.27-333.94 1.48H565.71L399 100.33l12.27-12.27c-1.59 51.06-1.59 101.62-3.56 152.31s-3.31 101.25-6.25 151.81a2.47 2.47 0 0 1-2.58 2.34 2.33 2.33 0 0 1-2.33-2.34z"/><path class="cls-2" d="M517.72 602.17v-390.4h667.77v400.34"/><path class="cls-3" d="M515.27 602.3c-1.85-32.53-2.95-65-4.3-98.19L507.9 407l-1.59-98.18-1.31-97.54A12.27 12.27 0 0 1 517.23 199q167.52-1.72 334.31-1.11l333.83 1.6a12.27 12.27 0 0 1 12.27 12.27l-2.46 200.17c-1.35 66.77-2.7 133.41-5.27 200.17a4.78 4.78 0 0 1-4.9 4.67h-.14a5 5 0 0 1-4.78-4.67c-2.58-66.76-3.93-133.4-5.28-200.17l-2.09-200.17 12.28 12.29-333.46 1.71q-166.9 0-333.94-1.47L529.87 212l-1.23 98.18-1.72 98.18-2.82 98.19c-1.35 32.52-2.45 65-4.29 98.18a2.34 2.34 0 0 1-2.32 2.35h-.26a2.58 2.58 0 1 1-2-4.78z"/><path class="cls-4" d="M904 287.86h214.9v226.93"/><path class="cls-1" d="M1275.69 441.52v182.87H323.81V441.52"/><path class="cls-2" d="M962 750.43v49.83a50.07 50.07 0 0 1-47.49 52.53H684.63A50.2 50.2 0 0 1 637 800.26v-49.83"/><path class="cls-5" d="M327.61 615.92c19.64-1.84 39.28-2.82 58.91-4.17l59-2.7c39.27-1.72 78.54-2.46 117.94-3.07l117.94-1.35h117.98l236.26 1.72c78.67 1.22 157.33 2.7 235.88 7.11a4.92 4.92 0 0 1 4.67 5.15 5.16 5.16 0 0 1-4.67 4.66c-78.55 4.3-157.21 5.77-235.88 7l-235.77 2H681.93L564 630.89c-39.4 0-78.67-1.35-117.94-3.07l-59-2.7c-19.63-1.35-39.27-2.33-58.91-4a2.44 2.44 0 0 1-2.21-2.67 2.34 2.34 0 0 1 1.67-2.53z"/></g></g></g><g id="clear_rectangle" data-name="clear rectangle"><path id="Layer_4" data-name="Layer 4" class="cls-6" d="M0 0h1600v1168H0z"/></g></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/jetpack-speed-icon.svg b/plugins/jetpack/images/jetpack-speed-icon.svg
deleted file mode 100644
index 48d1c0c4..00000000
--- a/plugins/jetpack/images/jetpack-speed-icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 1168"><style>.st0{fill:none}.st1{fill:#E1E2E2}.st2{fill:#6F93AD}.st3{fill:#204A69}.st4{fill:#fff}.st5{fill:#204A69}.st6{fill:#00be28}</style><title>jetpack-dashboard</title><g id="clear_rectangle"><path id="Layer_4" class="st0" d="M0 0h1600v1168H0V0z"/></g><path class="st1" d="M195.2 1110.5l11.3-892v-45.2c0-39.1 31.9-70.9 70.9-70.9h1048.3c39.1 0 70.9 31.9 70.9 70.9v936.2H314.4"/><path class="st2" d="M206.5 288.4V171.3c0-46.2 31.9-84.3 70.9-84.3h1048.3c39.1 0 70.9 38 70.9 84.3v117.2H206.5z"/><path class="st3" d="M1429.5 288.4c-104.8 8.2-209.7 7.2-314.5 8.2l-315.5 1-314.5-1c-104.8 0-209.7 0-314.5-8.2v-5.1c104.8-8.2 209.7-7.2 314.5-8.2l314.5-1 314.5 1c104.8 0 209.7 0 314.5 8.2v5.1h1z"/><ellipse transform="rotate(-35.101 814.181 680.8)" class="st4" cx="814.1" cy="680.8" rx="293.2" ry="293.8"/><path class="st2" d="M1108.4 641.9c6.3 37.9 4 77.1-3.2 114-3.4 18.4-7.8 37.1-15.3 55.2-4.2 10.3-20.5 3.1-17.1-6.8 5.5-16.2 8.6-34 11.8-52 5.8-35.6 6.5-71.2 0-106-12.3-70.4-50.8-133.4-108-176.3-57-42.7-128.1-62.1-198.9-53.9-70 7.7-135.7 43.7-181.4 96.9-46.1 53.2-70.3 124.2-67.4 194.6 2.9 71.2 32.9 138.8 83.9 188.6 50.5 49.9 120.2 77.9 191.1 80.8 71 2.2 142.6-22.3 199.7-68.2 1.2-.7 2.8-.6 3.8 0 1.2 1.1 1.3 3.2.1 4.3-52 53.5-127.6 86.4-204.3 85.5-77.7 0-152.4-30.4-208.3-84.5-56.1-54.1-89.4-127.7-93.2-205.6-3.7-77 22.3-155.2 72.6-214.2 49.7-59.4 123.1-97.8 199.9-105.9 161.1-17.1 307.6 93.9 334.2 253.5z"/><ellipse transform="rotate(-21.22 588.899 784.614)" class="st5" cx="588.9" cy="784.6" rx="18" ry="18"/><ellipse transform="rotate(-86.217 572.093 684.119) scale(.99998)" class="st5" cx="572.1" cy="684.1" rx="18" ry="18"/><ellipse transform="rotate(-61.215 599.336 585.967)" class="st5" cx="599.3" cy="585.9" rx="18" ry="18"/><ellipse transform="rotate(-36.216 665.479 508.49)" class="st5" cx="665.4" cy="508.5" rx="18" ry="18"/><ellipse transform="rotate(-11.216 758.218 466.235)" class="st5" cx="758.1" cy="466.2" rx="18" ry="18"/><ellipse transform="rotate(-76.22 859.96 467.05)" class="st5" cx="860" cy="467" rx="18" ry="18"/><ellipse transform="rotate(-51.215 952.003 510.868)" class="st5" cx="952" cy="510.9" rx="18" ry="18"/><ellipse transform="rotate(-26.221 1016.682 589.457)" class="st5" cx="1016.8" cy="589.5" rx="18" ry="18"/><ellipse transform="matrix(.9998 -.02124 .02124 .9998 -14.379 22.293)" class="st5" cx="1042.3" cy="688.1" rx="18" ry="18"/><ellipse transform="rotate(-66.216 1023.774 788.234)" class="st5" cx="1023.8" cy="788.3" rx="18" ry="18"/><path class="st6" d="M987.4 551c-1.4-1.1-3.5-1.4-5.3-.6-36.2 17.5-67.4 41.5-98.1 65.9-9.5 7.6-32.6 25.4-48.1 37.4-7.6-4.4-16.4-6.9-25.8-6.6-26.4.9-47.1 23.1-46.2 49.5.9 26.4 23.1 47.1 49.5 46.2 26.4-.9 47.1-23.1 46.2-49.5-.2-5.4-1.3-10.5-3.1-15.2 13.2-10.9 33.6-27.8 46.1-38.4 30.3-25 60.6-50.3 85.5-81.9 1.7-2.1 1.4-5.1-.7-6.8zM812.6 721.6c-14.7.5-27-11-27.5-25.7s11-27 25.7-27.5 27 11 27.5 25.7c.5 14.6-11 27-25.7 27.5z"/></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/jetpack-speed.svg b/plugins/jetpack/images/jetpack-speed.svg
deleted file mode 100644
index 902b1c21..00000000
--- a/plugins/jetpack/images/jetpack-speed.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg id="jetpack-performance" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 270.6 142.8"><style>.st1{fill:#fff}.st2{fill:#6F93AD}.st5,.st7{fill:#CCCED0}.st7{stroke:#204A69;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10}.st10{fill:#204A69}</style><path d="M55.2 107.6l1.2-93.8V9.1c0-4.1 3.3-7.5 7.5-7.5H174c4.1 0 7.5 3.3 7.5 7.5v98.4H67.7" fill="#D8DEE4"/><ellipse transform="rotate(-35.101 120.26 62.439)" class="st1" cx="120.3" cy="62.4" rx="30.8" ry="30.9"/><path class="st2" d="M56.4 21.2V8.9C56.4 4 59.7 0 63.8 0H174c4.1 0 7.5 4 7.5 8.9v12.3H56.4zm59.7 10.5c-8.1.8-15.8 4.9-21 11.1-5.3 6.2-8 14.4-7.6 22.5.4 8.2 3.9 15.9 9.8 21.6 5.9 5.7 13.7 8.9 21.9 8.9 8.1.1 16-3.4 21.5-9 .1-.1.1-.3 0-.5-.1-.1-.3-.1-.4 0-6 4.8-13.5 7.4-21 7.2-7.5-.3-14.8-3.2-20.1-8.5-5.4-5.2-8.5-12.3-8.8-19.8-.3-7.4 2.2-14.9 7.1-20.5 4.8-5.6 11.7-9.4 19.1-10.2 7.4-.9 14.9 1.2 20.9 5.7 6 4.5 10.1 11.1 11.4 18.5.7 3.7.6 7.4 0 11.1-.3 1.9-.7 3.8-1.2 5.5-.4 1 1.4 1.8 1.8.7.8-1.9 1.2-3.9 1.6-5.8.7-3.9 1-8 .3-12-3-16.6-18.4-28.3-35.3-26.5z"/><path d="M185 21.2c-11 .9-22 .8-33.1.9l-33.2.1-33.1-.2c-11 0-22 0-33.1-.9v-.5c11-.9 22-.8 33.1-.9l33.1-.1 33.1.1c11 0 22 0 33.1.9v.5h.1zM98.3 72.7c-.4-1-1.5-1.5-2.4-1.1-1 .4-1.5 1.5-1.1 2.4.4 1 1.5 1.5 2.4 1.1 1-.4 1.5-1.5 1.1-2.4zm-3.6-8c-1-.1-1.8-1-1.8-2s1-1.8 2-1.8c1 .1 1.8 1 1.8 2-.1 1.1-1 1.8-2 1.8zm2.1-10.6c-.9-.5-1.2-1.6-.7-2.6.5-.9 1.6-1.2 2.6-.7.9.5 1.2 1.6.7 2.6-.6.9-1.7 1.2-2.6.7zm6.3-8.7c-.6-.8-.4-2 .4-2.6.8-.6 2-.4 2.6.4.6.8.4 2-.4 2.6-.8.7-2 .5-2.6-.4zm9.4-5.2c-.2-1 .5-2 1.5-2.2 1-.2 2 .5 2.2 1.5.2 1-.5 2-1.5 2.2-1 .2-2-.4-2.2-1.5zm10.7-.7c.2-1 1.3-1.6 2.3-1.4s1.6 1.3 1.4 2.3c-.2 1-1.3 1.6-2.3 1.4a2 2 0 0 1-1.4-2.3zm10.1 3.9c.7-.8 1.8-.9 2.7-.3.8.7.9 1.8.3 2.7s-1.8.9-2.7.3c-.9-.7-1-1.9-.3-2.7zm7.4 7.7c.9-.5 2.1-.1 2.5.9.5.9.1 2.1-.9 2.5s-2.1.1-2.5-.9 0-2 .9-2.5zm3.5 10.2c1 0 1.9.8 1.9 1.8s-.8 1.9-1.8 1.9-1.9-.8-1.9-1.8.8-1.9 1.8-1.9zM143.1 72c1 .4 1.4 1.5 1 2.5s-1.5 1.4-2.5 1c-1-.4-1.4-1.5-1-2.5.4-1 1.5-1.4 2.5-1z" fill="#204A69"/><path d="M138.5 48.8c-.2-.1-.4-.1-.6-.1-3.8 1.8-7.1 4.4-10.3 6.9-1 .8-3.4 2.7-5.1 3.9-.8-.5-1.7-.7-2.7-.7-2.8.1-5 2.4-4.9 5.2.1 2.8 2.4 5 5.2 4.9s5-2.4 4.9-5.2c0-.6-.1-1.1-.3-1.6 1.4-1.1 3.5-2.9 4.8-4 3.2-2.6 6.4-5.3 9-8.6.2-.2.2-.5 0-.7zm-18.4 17.9c-1.5.1-2.8-1.2-2.9-2.7-.1-1.5 1.2-2.8 2.7-2.9 1.5-.1 2.8 1.2 2.9 2.7 0 1.6-1.2 2.9-2.7 2.9z" fill="#00be28"/><path class="st1" d="M239.9 113.2s-.5-5.9.1-10.2l1.1-8.3c.5-3.5 3.4-6.2 6.8-6.2H259c4.1 0 7.4 3.7 6.8 8l-1.1 8.3c-.2 1.7-1 3.2-2.1 4.3"/><path class="st1" d="M264.6 104.8c-9 1.2-16.4 5.8-17.2 10.1-.9 4.2-2.2 9.2-2.2 9.2h17.3l2.1-19.3z"/><path class="st5" d="M266 93.4c-.8-2.8-3.3-5.1-6.2-5.4-.8-.1-1.4-.1-2.1-.1h-10.1c-1.4 0-2.9.6-4 1.4-1.1.9-2 2.1-2.5 3.4-.3.7-.4 1.4-.5 2.1l-.3 2-.5 4c-.2 1.3-.4 2.8-.4 4.1-.1 2.7.1 5.5.4 8.1 0 .1.1.1.1-.1.1 0 .1 0 .1-.1 0-2.7 0-5.4.2-8 .1-1.3.3-2.7.5-4l.6-4 .3-2c0-.7.2-1.2.4-1.8.4-1.1 1.2-2.2 2.2-3 1-.8 2.2-1.2 3.4-1.2h12c2.6.2 4.7 2.2 5.5 4.6.2.7.3 1.2.3 1.9.1.3 0 .7 0 1l-.1 1.1-.5 4c-.2 1.1-.3 2.3-.4 3.4-.2 0-.5 0-.8.1l-1 .1c-.7.1-1.2.3-1.9.4-1.2.3-2.4.7-3.6 1.1-2.4.9-4.8 2-6.8 3.6-1.1.8-1.9 1.7-2.7 2.9-.3.6-.6 1.2-.8 1.9l-.4 1.8c-.6 2.5-1.1 5-1.8 7.4v.1c0 .1 0 .2.1.3-.3 1-.4 2.1-.6 3.2l-.6 4.5c-.3 3-.8 5.9-.8 9 0 .1.1.2.2.2s.2-.1.2-.2c.7-3 1.1-6 1.4-9 .2-1.5.4-3 .5-4.5.1-.9.2-1.9.2-2.9l17.2-.1c.2 0 .5-.2.5-.5.4-3.3.7-6.5 1-9.8l.8-8.4c0-.1.1-.2.1-.3.4-1.3.5-2.7.7-4l.6-4 .1-1.1c.1-.4.1-.7.1-1.1 0-.7-.1-1.5-.3-2.1zm-1.7 13.7l-1 7.6c-.5 3-.8 6-1.2 9l-16.2-.1c.6-2.2 1.1-4.5 1.7-6.8l.4-1.8c.1-.6.4-1.1.7-1.6.6-1.1 1.4-1.9 2.4-2.7 1.9-1.5 4.1-2.7 6.4-3.6 1.1-.5 2.3-.9 3.5-1.2.6-.2 1.2-.3 1.8-.5l1-.2c.2-.1.4-.1.5-.1v2z"/><path class="st1" d="M30.5 105c4.8-3.6 5-11.5.6-20.2S14.2 67.3 8.5 76s11.7 34 19 30.1M38 109.8c-3.1-5-1.1-13.3 5-18.7l1.7 5.9.9-6.8c2.3-.8 5.9-.8 7.9 1.3 8 8.5-6.4 21.9-13 19.1M63.8 114.1c-2.1-.2-3.1-2-3.1-2s1.3-1.5 3.4-1.3c1.1.1 1.8.7 2.3 1.2.4.5.3 1.2-.3 1.6-.6.4-1.3.7-2.3.5zm4.3-4.1c.7-.2 1-1 .7-1.5-.4-.7-1-1.4-2-1.7-1.9-.7-3.5.5-3.5.5s.5 2 2.5 2.7c.9.3 1.6.2 2.3 0zm-7.6 2s0-2.2-1.8-3.2c-.9-.5-1.8-.6-2.5-.5-.7.1-1.1.8-.9 1.3.2.7.7 1.4 1.6 2 2 1.2 3.6.4 3.6.4zm2.5-4.8s.3-2.1-1.2-3.4c-.7-.6-1.4-.8-2.1-.9-.9-.1-1.5.7-1.3 1.5.2.7.6 1.3 1.2 1.9 1.7 1.4 3.4.9 3.4.9z"/><path d="M261.1 123c-.1 0 0 0 0 0zM249 97.5c-.4 0-.8.3-.8.8s.3.8.8.8c.4 0 .8-.3.8-.8s-.3-.8-.8-.8zm8.3 0c-.4 0-.8.3-.8.8s.3.8.8.8.8-.3.8-.8-.4-.8-.8-.8zM14.4 80.2c-.1-.1-.1-.2-.1-.3.1-.1.2-.1.3-.1 3.1 1.7 5.7 3.9 8 6.5s4.1 5.6 5.5 8.9 2.2 6.6 2.8 10.1c.5 3.3.6 6.6.3 10h4.7c.1-1.6.6-3.2 1.3-4.7.8-1.6 1.7-3.2 2.8-4.6 2.3-2.8 5-5.2 7.9-7.2.1-.1.2 0 .3 0 .1.1 0 .2 0 .3-2.5 2.5-5.2 4.8-7.2 7.6-1.1 1.3-2 2.8-2.8 4.3-.7 1.4-1.3 2.8-1.8 4.3h6.2c.2 0 .4.2.5.4l2.8 9.5v.1c.4 3.7-.7 7.7-3 10.6-1.1 1.4-2.6 2.7-4.3 3.5-1.6.9-3.5 1.2-5.4 1.1-1.8.1-3.7-.3-5.4-1.1-1.7-.9-3.2-2-4.3-3.5-2.3-3-3.4-6.9-3-10.6v-.1l2.8-9.5c.1-.2.3-.4.5-.4h7.1c-.3-3.3-.5-6.5-1-9.8-.6-3.4-1.5-6.6-2.8-9.8-1.3-3.2-3.1-6.1-5.2-8.7-2.1-2.6-4.7-4.9-7.5-6.8zm9.7 36.1l-2.8 9.1v-.1c-.2 1.7-.1 3.5.4 5.3.5 1.7 1.2 3.4 2.3 4.8 2.1 2.9 5.5 4.9 9.1 5v-.2c1.8 0 3.5-.5 5.2-1.3 1.5-.9 3-2 4-3.4 2.1-2.9 3.1-6.5 2.6-10.1v.1l-2.8-9.1h-18zm238 11.2c-.2-1-.3-2-.6-3h-.6c0 1 .1 2 .1 3 .1 1.5.3 3 .5 4.5.4 3.1.8 6 1.4 9 0 .1.1.2.2.2s.2-.1.2-.2c-.1-3-.5-6-.8-9 0-1.5-.2-2.9-.4-4.5zm-6 13.5l-12.9-.2v.2c0 .1-.1.2-.2.2s-.2-.1-.2-.2v-.2h-1.6l-14.9-.1h-4.6c.6-2.9 1-5.8 1.4-8.7.2-1.5.4-3 .5-4.5.2-1.1.2-2.3.2-3.5.3.2.7.3 1 .4 1 .2 1.7.1 2.6.1h5c4.2-.1 8.3-.1 12.4-.2 0-.1-.1-.1-.1-.2v-.1c0-.1.1-.2.1-.3-4.1-.1-8.3-.1-12.4-.2h-5c-.9 0-1.7 0-2.4-.1-.8-.2-1.4-.6-1.9-1.1-1.1-1-1.3-2.7-.8-4 .6-1.3 2-2.3 3.4-2.3l20-.1h.9l.2-.9h-1.1l-20-.1c-1 0-2.1.4-2.9 1l.2-.8c.2-.6.3-1 .5-1.4.9-1.9 2.6-3.4 4.3-4.5 3.5-2.3 7.5-3.6 11.6-4.6v-.3c-2.1.2-4.2.6-6.2 1.2-2.1.7-4.1 1.5-6 2.8-1.9 1.2-3.7 2.7-4.8 4.9-.2.6-.4 1.2-.5 1.7l-.3 1.6c0 .3-.1.6-.1.8-.1.2-.2.3-.2.5-.8 1.7-.3 3.8 1.1 5.2.3.3.6.5.9.7-.3 1.3-.6 2.5-.7 3.8l-.6 4.5c-.3 2.9-.7 5.7-.8 8.7l-24.8-.2-59.8-.1-59.8.1c-19.9.1-39.9.2-59.8.7-.1 0-.2.1-.2.2s.1.2.2.2c19.9.5 39.9.6 59.8.7l59.8.1 59.8-.1 29.9-.2 14.9-.1 14.9-.2c.2-.1.4-.2.4-.4s-.2-.4-.4-.4z" fill="#F6F6F6"/><path class="st5" d="M21.8 105.8c-1.6-1-3.2-2.3-4.5-3.6-2.7-2.8-4.9-5.8-6.8-9.2-1.8-3.4-3.4-7-3.7-10.8-.2-1.9-.1-4 1-5.8 1.1-1.7 2.6-3.2 4.6-3.8 2-.6 4-.4 5.9.3 1.8.7 3.5 1.6 5.1 2.8 3.1 2.3 5.7 5.3 7.6 8.6 1.8 3.4 3.2 7.1 3.4 10.9.1 1.9 0 3.9-.7 5.7-.7 1.8-1.8 3.4-3.4 4.6h-.1c.2-.4.2-.4.3-.5 1.4-1.1 2.5-2.9 3-4.6.5-1.8.6-3.6.4-5.6-.4-3.7-1.7-7.3-3.5-10.5s-4.4-6-7.4-8.2c-1.5-1.1-3.2-2-4.9-2.6-1.7-.6-3.5-.8-5.3-.2-1.6.6-3.1 1.8-4 3.4-.9 1.5-1.1 3.4-.9 5.2.4 3.6 1.8 7.2 3.5 10.5s3.9 6.4 6.4 9.2c1.2 1.3 2.7 2.6 4.2 3.6.8.5 1.6.9 2.5 1.1.9.2 1.8.2 2.6-.2.1-.1.2 0 .3.1 0 .1 0 .2-.1.3-.9.5-1.9.6-2.9.4s-1.8-.6-2.6-1.1zm32.7-13.7c-.5-.7-1.1-1.2-1.8-1.7-.8-.4-1.5-.7-2.4-.9-1.6-.3-3.3-.1-4.9.4-.2 0-.4.2-.4.4l-.6 4.4-1.1-3.7c0-.1 0-.1-.1-.2-.2-.2-.5-.2-.7 0-2.6 2.4-4.6 5.5-5.6 8.8-.5 1.7-.8 3.5-.7 5.3.1 1.7.7 3.5 1.6 5 0 0 .1 0 .2-.2v-.1c-.9-1.4-1.2-3.2-1.2-4.9 0-1.6.3-3.4.9-5 1.1-3 2.8-5.7 5.1-7.8l1.4 5v.2h.1v.1c0 .2.2.4.4.4.3.1.6-.1.6-.4l.9-6.5c2.7-.7 6-.4 7.6 2 1 1.1 1.5 2.6 1.6 4 .1 1.4-.2 2.9-.8 4.3-1.1 2.9-3.3 5.3-5.6 7.1-1.2 1-2.6 1.7-4 2.2-1.4.5-3 .8-4.4.2-.1 0-.3 0-.3.1s0 .3.1.3c1.5.7 3.3.6 4.8.1s3-1.1 4.3-2.1c2.6-1.9 4.8-4.4 6-7.4.7-1.4 1-3.2.9-4.8-.3-1.6-.8-3.2-1.9-4.6zm-8.3 28c-4.2-.4-8.4-.3-12.6-.4l-6.3.1c-2.1.1-4.2.1-6.3.4-.1.2-.1.2 0 .2 2.1.3 4.2.3 6.3.4l6.3.1c4.2-.1 8.4-.1 12.6-.4.1 0 .2-.1.2-.2s-.1-.2-.2-.2zm-25.3.1zm0 0zM69 108.1c-.4-.8-.9-1.3-1.6-1.7-.7-.3-1.5-.5-2.3-.4-.2 0-.3 0-.5.1 0-.1 0-.1-.1-.2-.1-.2-.2-.2-.2-.1l-.3-.3c-.2.1-.3.3-.4.4 0-.1 0-.2-.1-.3-.1-.7-.5-1.3-1-1.8-.6-.5-1.1-.9-1.8-1.1-.1 0-.3-.1-.5-.1h-.6c-.5 0-1 .2-1.2.6-.3.4-.5.8-.5 1.2s.2.8.3 1.1c.3.7.7 1.2 1.2 1.6.5.4 1.1.7 1.8.8h.6c-.5.7-1 1.5-1.3 2.2-.2-.6-.7-1.2-1.2-1.5-.6-.5-1.2-.7-1.9-.8h-1.1c-.5 0-1 .3-1.2.7-.3.4-.3.9-.2 1.3.2.4.3.7.5 1 .4.6 1 1.1 1.5 1.4.6.3 1.2.5 1.9.5.2 0 .5 0 .8-.1-.2 1-.4 2.1-.5 3.2-.1-.2-.3-.4-.4-.6-.4-.6-1.1-1-1.7-1.1s-1.4-.2-2.1 0c-.3.1-.7.2-1 .4-.4.2-.8.6-.9 1.1-.1.5 0 1 .3 1.3.3.3.5.6.8.8.6.5 1.2.8 1.9.9.7.1 1.3 0 2-.2.3-.2.6-.3.9-.5l.1-.1v3.4c-2.2-.1-4.4-.2-6.6-.2h-.2c-.2.1-.3.4-.2.6l2 4c-.7 1.4-1.2 2.8-1.6 4.3-.4 1.6-.7 3.3-.5 4.9.2 1.7 1 3.4 2.3 4.5 1.2.9 2.7 1.4 4.2 1.5.1.1.2.1.4.1h.2c1.6 0 3.3-.4 4.6-1.5 1.3-1.1 2.1-2.9 2.3-4.5.2-1.7-.1-3.4-.5-4.9-.4-1.4-.9-2.9-1.6-4.3.6-1.3 1.3-2.6 1.9-4v-.2c0-.2-.2-.4-.4-.4-1.6.1-3.3.1-5 .2v-2.9c.1 0 .1.1.2.1.5.4 1.1.6 1.6.7 1.1.2 2.3-.2 3.2-1 .3-.2.6-.6.7-1.1 0-.2 0-.5-.1-.7-.1-.3-.3-.5-.4-.6-.6-.5-1.3-1-2.1-1.1-.8-.2-1.5 0-2.3.3l-.6.3c.1-.7.2-1.3.3-1.9l.5.5c.5.4 1.1.7 1.6.8 1.1.2 2.4-.1 3.3-.8.3-.2.7-.6.9-1 0-.2 0-.5-.1-.7-.1-.3-.3-.5-.4-.6-.5-.6-1.2-1.1-2-1.2-.9-.2-1.6-.2-2.4.1l-.6.3c.4-.8.8-1.6 1.5-2.5.1.2.3.4.4.6.3.5.8.9 1.3 1.1 1.1.6 2.3.5 3.4.1l-.1-.1c.4 0 .8-.3 1-.7.1-.2.1-.5.1-.7 0-.1-.1-.3-.2-.5zm-6.4 3.6c.6-.2 1.1-.3 1.7-.2.5.1 1.1.4 1.5.8l.3.3c0 .1.1.2.1.3 0 .3-.1.6-.3.8-1 .3-2 .4-2.7.1-.4-.2-.8-.4-1.1-.7-.3-.2-.5-.4-.6-.7.4-.4.7-.6 1.1-.7zm-.5-4.6c-.2 0-.5-.1-.8-.2-.5-.2-1-.4-1.3-.8-.4-.4-.7-.8-.9-1.2-.3-.6-.2-.8 0-1.1.1-.1.2-.2.4-.2H59.8c.1 0 .3.1.4.1.5.1 1 .4 1.3.7.4.3.8.8 1 1.2.1.2.2.5.3.8 0 .1 0 .1.1.2-.1.2-.3.3-.4.5h-.4zm-2.3 4.8c-.3 0-.6 0-.9-.1-.6-.1-1.1-.3-1.5-.6-.5-.3-.8-.7-1.1-1.1-.1-.2-.2-.5-.3-.7 0-.2 0-.3.1-.4.1-.1.1-.2.3-.2h.8c.5.1 1 .2 1.4.5.5.2.9.6 1.1 1.1l.3.6c0 .3-.1.6-.2.9zm-1 5.1l-.2.1c-.1.1-.3.1-.4.2-.2.1-.5.2-.8.2-.6.1-1.1 0-1.6-.1s-1-.3-1.3-.7c-.2-.2-.4-.4-.5-.6v-.4c.1-.1.1-.2.3-.3.3-.1.5-.2.8-.3.5-.2 1.1-.2 1.5-.1.5.1 1 .4 1.4.7.3.2.5.4.7.6l.3.3.1.1v.2l-.3.1zm6 17.6c-.2 1.4-.8 2.8-1.9 3.6-.9.8-2.3 1.1-3.6 1.2-.1 0-.2-.1-.3-.1-1.4 0-3-.4-4-1.2-1.1-.9-1.7-2.2-1.9-3.6-.2-1.4 0-3 .4-4.4.4-1.5.9-3 1.5-4.3.1-.1.1-.3 0-.4l-1.9-3.6c2.2-.1 4.4-.1 6.6-.2h.1c1.7.1 3.3.1 5 .2-.6 1.2-1.2 2.4-1.9 3.6-.1.2-.1.4 0 .5.7 1.3 1.1 2.9 1.5 4.3.4 1.5.5 3 .4 4.4zm-3.3-18.4c.6-.2 1.1-.3 1.7-.3.6.1 1.1.3 1.6.7.1.1.2.1.3.2.1.1.2.2.2.3.1.2 0 .5-.2.8-.9.4-1.9.5-2.9.3-.5-.1-.9-.3-1.2-.6-.2-.2-.4-.4-.6-.5v-.1c.4-.3.8-.5 1.1-.8zm6.6-6.3c-1.1 0-2-.2-2.8-.7-.4-.3-.7-.6-1-1-.2-.2-.3-.4-.4-.7.4-.2.9-.3 1.3-.4.6-.1 1.2 0 1.7.2.5.3 1 .7 1.3 1.1.1.1.2.2.2.3.1.1.1.3.1.4 0 .4-.1.6-.4.8z"/><path class="st7" d="M209.4 110.8s5.7 10.9 4.9 21.3l-.9 2.7-18.1-25"/><path class="st7" d="M187.6 108.8s1.3 25.9 2.7 30.3l5.4-.1c.3-9.1 3.4-20.7 3.7-32.4M198.7 61.4c3-.4 11.2 9.9 12.7 13.8 1.5 4-8.3 6.3-8.3 6.3"/><path d="M185.4 56.2c1.3.3 2.8-.1 2.8-.1.1 0 .1.1.1.1l-2.3 2.4-.6-2.6" fill="#204A69" stroke="#204A69" stroke-width=".876" stroke-miterlimit="10"/><path class="st5" d="M192.4 63.3h-6l-1-13.8h7z"/><path class="st7" d="M187 40.5c-3.1-.1-5.9 1.3-6.3 4.1-.4 2.4-2.4 2.9-2.5 4.2 0 .9 1.6 1.1 1.8 2 .7 3 2.9 5.2 6.3 5.4.8 0 1.2 0 1.9-.2"/><path d="M182.1 51.3c-.4 1-1.4 1.4-1.4 1.4" fill="none" stroke="#204A69" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"/><path class="st10" d="M181.7 48.2c.2 0 .4-.2.4-.4V47c0-.2-.2-.4-.4-.4s-.4.2-.4.4v.8c-.1.2.1.4.4.4z"/><path class="st2" d="M185.7 59.5c8.4-2.7 11.9-.7 15.1 4.1 5.2 7.9 2.2 9.9 4.1 17.1 1.9 7.2 6.3 10.3 5.5 30.8h-24s-2.3-23.7-1.6-30.6M210.6 131.9s5.6 9.8 7.4 9.4c1.1-.2-.7-5-1.3-7.2-.4-1.6-.8-2.6-2.4-2.4l-3.7.2z"/><path class="st7" d="M180.8 68.2s-1.6-1.2-2.9-3.4c-1.9-3.4-6.8-9.2-8-7.6-1.2 1.5.9 6.9 2.7 7.8 1.3 4.3 8.2 18.7 12.3 17.6s7.4-23 1.7-22.7c-5.7.3-6.1 12.9-6.1 12.9"/><path class="st10" d="M200.9 54.2c-.6-1-1.3-1.8-2.1-2.4-.7-.6-1.2-1.4-1.4-2.3-.2-1.3-.6-2.5-1.2-3.4-.8-1.2-2.3-2.2-3.8-2.6-1.4-2.4-2.6-2.8-4.3-3.3-2.8-.9-5.5.8-5.5.8-.4 3.2.9 6.7 3.8 6.9-.5 2.4.9 5.7 3.6 6.5-.3 1.8.1 4 1.3 5.9 2.2 3.6 6.2 5.1 8.8 3.5 2.7-1.8 3-6 .8-9.6z"/><path class="st2" d="M190 138c-1.3.4-5.3 1.2-6.5 1.6-1 .3-.8 1.8.3 1.8h10.8c1.2 0 2.2-1.1 2-2.3l-.2-1.2-6.4.1z"/></svg>
diff --git a/plugins/jetpack/images/jetpack-support.svg b/plugins/jetpack/images/jetpack-support.svg
deleted file mode 100644
index 341be3f9..00000000
--- a/plugins/jetpack/images/jetpack-support.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 1168"><defs><style>.cls-1{fill:#fff}.cls-2{fill:#46799A}.cls-3{fill:#00be28}.cls-4{fill:none}</style></defs><title>jetpack-support</title><g id="jetpack-support"><path class="cls-1" d="M1293.52 561.71c-.37 257.76-209.62 466.42-467.38 466.06a467 467 0 0 1-66.09-4.8c-65.64-9.47-143.76 63.41-401.19 44.58 119.24-124.48 84.36-242.39 84.36-242.39C297.37 613 351.11 322.78 563.27 176.93S1065.65 84.83 1211.5 297a466.23 466.23 0 0 1 82.02 264.71z"/><path class="cls-2" d="M1299.31 561.71a548.18 548.18 0 0 1-21.06 151.12 491.44 491.44 0 0 1-65.08 140.3 417.11 417.11 0 0 1-49.59 60.74 404.33 404.33 0 0 1-60 51.26 474.37 474.37 0 0 1-142.31 68 490.27 490.27 0 0 1-156.8 19.06c-13.26 0-26.41-1.56-39.56-3.12l-9.36-1.23a62.21 62.21 0 0 0-6.69 0 99.29 99.29 0 0 0-14.71 1.12c-21 3.34-45.35 11.14-69.87 18a771.51 771.51 0 0 1-153 27.19 1049.8 1049.8 0 0 1-154.91.22l-55.72-3.67 38.9-41a306.83 306.83 0 0 0 66.89-102.4 229.72 229.72 0 0 0 13.82-58.06 199.35 199.35 0 0 0 .89-29.42c0-4.9 0-9.7-1.22-14.38l-1.12-6.91a25.6 25.6 0 0 0-1.11-5.35l3.56 7.58c-154.12-223.42-97.94-529.48 125.48-683.6a491.33 491.33 0 0 1 134.85-65.29 497.08 497.08 0 0 1 227.34-13.82 478 478 0 0 1 208.29 90.27 451 451 0 0 1 137.63 177.31 538.2 538.2 0 0 1 44.46 216.08zm-11.14 0a407.43 407.43 0 0 0-55.72-204.38 498.46 498.46 0 0 0-232.36-203 441.21 441.21 0 0 0-478.2 91.61 434.91 434.91 0 0 0-64.63 79.57 424.38 424.38 0 0 0-44.58 92.27 445.81 445.81 0 0 0-20.06 202.49 437.25 437.25 0 0 0 72.66 190.12l2.57 3.68 1 3.9a109 109 0 0 1 2.45 11.14c.67 3.23 1.11 6.47 1.56 9.59.78 6.46 1.34 12.7 1.56 18.94a244.94 244.94 0 0 1-1.23 37.33A283 283 0 0 1 456 966.36a360.67 360.67 0 0 1-78 120.13l-17.27-44.57a993.15 993.15 0 0 0 146.77.78 725.12 725.12 0 0 0 143.54-25.08 737.11 737.11 0 0 1 76.11-18.83 137.47 137.47 0 0 1 22.29-1.56 112.26 112.26 0 0 1 12.15.89l9.36 1.34c11.7 1.56 23.62 2.67 35.44 3.23a444.81 444.81 0 0 0 141.75-15.83 488.5 488.5 0 0 0 237.26-154.68 442 442 0 0 0 75-125.37 389.33 389.33 0 0 0 20.28-71.1 456.85 456.85 0 0 0 6.91-74z"/><circle class="cls-3" cx="634.34" cy="592.92" r="41.79" transform="rotate(-80.78 634.37 592.917)"/><circle class="cls-3" cx="847.86" cy="592.92" r="41.79"/><circle class="cls-3" cx="1061.27" cy="592.92" r="41.79"/></g><g id="clear_rectangle" data-name="clear rectangle"><path id="Layer_4" data-name="Layer 4" class="cls-4" d="M0 0h1600v1168H0z"/></g></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/jetpack-themes.svg b/plugins/jetpack/images/jetpack-themes.svg
deleted file mode 100644
index 9c2c5b29..00000000
--- a/plugins/jetpack/images/jetpack-themes.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 1168"><defs><style>.cls-1{fill:#6F93AD}.cls-2{fill:#46799A}.cls-3{fill:#CCCED0}.cls-4{fill:#E1E2E2}.cls-5{fill:#fff}.cls-6,.cls-9{fill:none}.cls-6{stroke:#CCCED0;stroke-miterlimit:10;stroke-width:11.41px}.cls-7{fill:#00be28}.cls-8{fill:#204A69}</style></defs><title>jetpack-themes</title><g id="jetpack-themes"><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1-2"><path class="cls-1" d="M543.1 757.13V123a48 48 0 0 1 48-48h709.73a48 48 0 0 1 48 48v634.13z"/><path class="cls-2" d="M625.53 313.91H870.7v337.68H625.53zm338.49 0h287.56v356.15H964zM543.1 238.47V123a48 48 0 0 1 48-48h709.73a48 48 0 0 1 48 48v115.47z"/><path class="cls-3" d="M250 1119.17V491.65a47.69 47.69 0 0 1 47.91-47.47h709.81a47.69 47.69 0 0 1 47.84 47.47v627.52z"/><path class="cls-4" d="M856.27 602.5H336.21v-19.65a42.47 42.47 0 0 1 42.17-42.55h477.89zM558.55 727.62H336.21V665.5h280.34v4.12a58 58 0 0 1-58 58z"/><path class="cls-1" d="M250 830.51h426.32v288.66H250z"/><path class="cls-5" d="M652.84 830.51h398v288.66h-398z"/><path class="cls-6" d="M1050.87 830.51V1115h-398"/><path class="cls-7" d="M978.67 881.37v172.37H796.58"/><path class="cls-8" d="M1071.48 833.09c-35 4.56-70.07 6.62-105 7.8s-70.07 1-105 1.47c-70.07.89-139.84 1-210.13 1.33s-139.84-.44-210.06-1.33c-35-.44-70-.51-105-1.47s-70-2.87-105-7.8v-5.74c35-4.64 70-6.7 105-7.88s70.06-1 105-1.47c70.07-.88 139.85-1 210.06-1.32s139.84.44 210.13 1.32c35 .44 70 .52 105 1.47a1008.55 1008.55 0 0 1 105 7.88z"/></g></g></g><g id="clear_rectangle" data-name="clear rectangle"><path id="Layer_4" data-name="Layer 4" class="cls-9" d="M0 0h1600v1168H0z"/></g></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/jetpack-updates.svg b/plugins/jetpack/images/jetpack-updates.svg
deleted file mode 100644
index 00c960df..00000000
--- a/plugins/jetpack/images/jetpack-updates.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 1168"><defs><style>.cls-1{fill:#E1E2E2}.cls-2{fill:#CCCED0}.cls-3{fill:#05931f}.cls-4{fill:#00be28}.cls-5{fill:#fff}.cls-6{fill:#204A69}.cls-7{fill:none}</style></defs><title>jetpack-updates</title><g id="jetpack-updates"><path class="cls-1" d="M1139.66 1168H214.54V518.37a176.4 176.4 0 0 1 176.55-175.85h558.13c105 0 190.13 84.92 190.44 189.88z"/><path class="cls-2" d="M1135.17 266.6L736.18 390s-32.84-44.76 5.48-133.88S921.15 79.8 1064.72 55.24a1482.78 1482.78 0 0 1 190.86-14c87.58-2 154.38 82.24 139.08 174a340.06 340.06 0 0 1-51.22 129.25"/><circle class="cls-3" cx="683" cy="798.06" r="231.42"/><path class="cls-3" d="M451.71 662.92h462.71v135.14H451.71z"/><circle class="cls-4" cx="683" cy="666.7" r="231.42"/><path class="cls-5" d="M593.46 686.77c23.29 21.19 46 43 68.62 64.84l-14 .84c22.46-29.61 44.63-59.64 67.79-88.83S762 605.1 786 576.75a6.87 6.87 0 0 1 10.8 8.28c-20.91 30.59-43.22 60.76-65.82 90.52s-45.47 59.08-68.34 88.55a9.41 9.41 0 0 1-13.19 1.69l-1-1q-33-33.79-64.84-68.62a6.9 6.9 0 0 1 0-9.69 7 7 0 0 1 9.85.29z"/><path class="cls-2" d="M1061.63 205.27c-291.62 51.36-445.16 325.3-388 341.16s173.18-201.95 342.29-217.8c130.52-12.35 108.63 46.59 33.82 79.57C938.7 457 919.47 500.82 936.31 531.56s222.3-30.18 347.2-123.36a278.12 278.12 0 0 0 95.85-138.8"/><path class="cls-6" d="M1062.9 211.86a551.22 551.22 0 0 0-215.15 90.38A586.46 586.46 0 0 0 758.5 378a438.64 438.64 0 0 0-69.33 93.46 142.68 142.68 0 0 0-18.24 52.21 25.54 25.54 0 0 0 1.26 10.52 5.88 5.88 0 0 0 4.63 3.79 32.8 32.8 0 0 0 21.47-5.61 287.64 287.64 0 0 0 44.07-36.77l42.1-42.1A766.91 766.91 0 0 1 876 374.94 314.76 314.76 0 0 1 986.69 323a295.2 295.2 0 0 1 61.47-6.17 172.5 172.5 0 0 1 31.44 2.38 58.26 58.26 0 0 1 33.12 15 28.06 28.06 0 0 1 7.29 21.47 39.5 39.5 0 0 1-7 18.25 93 93 0 0 1-23.58 23.29 293.7 293.7 0 0 1-54.31 28.07 385 385 0 0 0-50.52 28.07A125.47 125.47 0 0 0 945.85 492a36.53 36.53 0 0 0-4.77 22.88 32.64 32.64 0 0 0 3.65 10.94 13.13 13.13 0 0 0 5.89 2.67 165.66 165.66 0 0 0 55.3-4.77 677.41 677.41 0 0 0 112.27-35.65 838.66 838.66 0 0 0 106-51.5 373.42 373.42 0 0 0 92.76-70.17 276 276 0 0 0 57.05-99.81 6.88 6.88 0 0 1 13 4.07A288.81 288.81 0 0 1 1327.72 378a280.29 280.29 0 0 1-45.19 41.26 603.68 603.68 0 0 1-50.38 33.26 869.26 869.26 0 0 1-107.92 53.33 717.52 717.52 0 0 1-114.8 37.19 302 302 0 0 1-30.18 5 111.3 111.3 0 0 1-32.7 0 35 35 0 0 1-9.4-3.09 21 21 0 0 1-9.26-9 51.24 51.24 0 0 1-5.75-17.68 55.28 55.28 0 0 1 6.73-34.53 142.27 142.27 0 0 1 44.49-45.47 390.2 390.2 0 0 1 53.05-30.31 290.52 290.52 0 0 0 50.94-26.95 76.84 76.84 0 0 0 18.65-18.14 20.37 20.37 0 0 0 3.65-9.12 7.17 7.17 0 0 0-2.11-5.9 42.16 42.16 0 0 0-21.19-8.7 179.49 179.49 0 0 0-28.07-2.24 284.71 284.71 0 0 0-57 5.61 292.47 292.47 0 0 0-103.15 48.42 751.11 751.11 0 0 0-89.53 76.2l-42.11 42.1a284.51 284.51 0 0 1-47.57 39 48.86 48.86 0 0 1-34.81 8.56 24.59 24.59 0 0 1-17.4-14 42 42 0 0 1-2.66-18.8 157.58 157.58 0 0 1 20.49-59.65 453.42 453.42 0 0 1 72.69-97.11 575.4 575.4 0 0 1 92.35-77.75 563.78 563.78 0 0 1 222.15-90.1 6.74 6.74 0 0 1 7.83 5.43v.19a6.73 6.73 0 0 1-6.59 6.87zm-22.74-64.13A542 542 0 0 0 953.71 175 564.57 564.57 0 0 0 873 215.65a503 503 0 0 0-72.28 53.75 323.65 323.65 0 0 0-58.52 67.65 6.73 6.73 0 0 1-9.27 2.18.57.57 0 0 1-.13-.08 6.87 6.87 0 0 1-2.39-8.84 288.6 288.6 0 0 1 57.4-75.08 446.3 446.3 0 0 1 74.8-57 488 488 0 0 1 84.21-40.7 442.33 442.33 0 0 1 90.8-23.3 6.73 6.73 0 0 1 7.69 5.62.59.59 0 0 1 0 .14 6.73 6.73 0 0 1-5.15 7.74zm-304.4 105A243.4 243.4 0 0 1 788.39 188a535.41 535.41 0 0 1 65.12-50.38 730.69 730.69 0 0 1 70.17-41.4A636.64 636.64 0 0 1 998.9 63.8a6.74 6.74 0 0 1 8.64 4l.06.18a7 7 0 0 1-3.51 8.42C980 88.08 956 100.15 932.66 113.2s-45.61 26.25-67.92 41.26a645.83 645.83 0 0 0-64.14 47.44 276.45 276.45 0 0 0-52.77 57.4 6.76 6.76 0 0 1-11.65-6.88z"/></g><g id="clear_rectangle" data-name="clear rectangle"><path id="Layer_4" data-name="Layer 4" class="cls-7" d="M0 0h1600v1168H0z"/></g></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/jetpack-video-hosting.svg b/plugins/jetpack/images/jetpack-video-hosting.svg
deleted file mode 100644
index e370540c..00000000
--- a/plugins/jetpack/images/jetpack-video-hosting.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 1168"><defs><style>.cls-1{fill:#6F93AD}.cls-2{fill:#CCCED0}.cls-3{fill:#E1E2E2}.cls-4{fill:#46799A}.cls-5{fill:#fff}.cls-6{fill:#CCCED0}.cls-7{fill:#204A69}.cls-8{fill:#00be28}.cls-9{fill:none}</style></defs><title>jetpack-video-hosting</title><g id="jetpack-video-hosting"><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1-2"><path class="cls-1" d="M149.62 516V273.62A51.61 51.61 0 0 1 201.23 222h293v294z"/><path class="cls-2" d="M835.71 395.72l-3.2-156.89-.82-79.17v-10.32a81.55 81.55 0 0 1 .72-11A60.23 60.23 0 0 1 840 117a61.9 61.9 0 0 1 34.37-27.35 78.57 78.57 0 0 1 11.14-2.37 98.87 98.87 0 0 1 10.33 0h289.42a10.32 10.32 0 0 1 10.32 10.32V392a10.32 10.32 0 0 1-10.32 10.32c-58.63 0-117.26-1-175.47-1.76zm9.71-9.8l171.23-3.31c56.46-.82 112.72-1.55 169-1.75l-10.32 10.32-.21-294.79 10.33 10.32H887.63a49.8 49.8 0 0 0-7.74 1.55 43.36 43.36 0 0 0-24.36 19.2 42.2 42.2 0 0 0-5.37 14.86 51.87 51.87 0 0 0-.62 8.16v9.39l-.82 75z"/><path class="cls-3" d="M1106.14 530.83V288.48a51.61 51.61 0 0 1 51.61-51.61h292.63v294z"/><path class="cls-4" d="M1090.76 1042.69V800.34a51.61 51.61 0 0 1 51.61-51.61H1435v294z"/><path class="cls-5" d="M223.12 930.8c12.28-4.13 1087.29 0 1087.29 0s68.95-226.25-114.26-273.8c-54.91-14.25-86.7-8.88-103.22-2a10.33 10.33 0 0 1-13.61-5.28 10.17 10.17 0 0 1-.73-2.47c-3.93-45.1-29.83-169.79-195.29-169.79-182.18 0-262 171.34-262 171.34s-40.67-59.14-112.51-64.92c-212.49-17.13-264.62 217.9-264.62 217.9"/><path class="cls-6" d="M221.88 927.09a36 36 0 0 1 5.36-.72h29.83l34-.73 68-1 135.84-2.48c90.62-.82 181.25-1.44 271.87-1.24h543.65l-9 6.61a326.27 326.27 0 0 0 9.19-129 153.18 153.18 0 0 0-60.9-106.94 170.39 170.39 0 0 0-57.6-25.08 236 236 0 0 0-63.58-8.05 95.57 95.57 0 0 0-29.31 5.68l-1.65.62a17.64 17.64 0 0 1-3.82 1.13 21.61 21.61 0 0 1-21.68-8.77 19 19 0 0 1-3-8.46v-4.24l-1-7.94a196.3 196.3 0 0 0-18.58-61 154 154 0 0 0-38.73-49.48 160 160 0 0 0-55.84-29.52A232.78 232.78 0 0 0 891 486.14a272.7 272.7 0 0 0-64.72 6c-85.15 18.16-157.51 82.57-196.11 160.09a9.31 9.31 0 0 1-12.39 4.13 10.56 10.56 0 0 1-3.72-2.58 154.77 154.77 0 0 0-99.5-61.93A222 222 0 0 0 394.25 609a240.39 240.39 0 0 0-92.9 79.89 361.48 361.48 0 0 0-53.88 113.51 2.68 2.68 0 0 1-3.3 1.86 2.59 2.59 0 0 1-1.86-3.1 366.3 366.3 0 0 1 51.1-117.36 250.61 250.61 0 0 1 95.89-85.87 236.35 236.35 0 0 1 127.78-20.65 154.56 154.56 0 0 1 32.62 7.43 170.21 170.21 0 0 1 30.24 14.45 176.62 176.62 0 0 1 48.92 44.28l-15.79 1.35a312 312 0 0 1 38.4-57.7 386.33 386.33 0 0 1 47.89-49.34 286.14 286.14 0 0 1 122.32-62.45 290.66 290.66 0 0 1 68.84-6.81 249.29 249.29 0 0 1 68.85 10.32 176.82 176.82 0 0 1 62.55 32.52 173.62 173.62 0 0 1 44.08 55.32 217 217 0 0 1 20.65 66.89l1.13 8.77v4.13a.77.77 0 0 0 0-.52h1.14l2.16-.82a113.55 113.55 0 0 1 36.23-6.92 243.61 243.61 0 0 1 69.47 8.77 190.78 190.78 0 0 1 64.41 29 157.59 157.59 0 0 1 47 53.36 201 201 0 0 1 21.47 67.09 311 311 0 0 1 1.65 69.26 370.69 370.69 0 0 1-12.18 68.23 9.08 9.08 0 0 1-8.87 6.61l-543.65-2.79L494.68 936l-135.94-1h-136a3.83 3.83 0 0 1-3.92-3.72 3.72 3.72 0 0 1 3.06-4.19z"/><path class="cls-5" d="M1200.28 320.68h192.29v46.55h-228v-10.94a35.71 35.71 0 0 1 35.71-35.61zm78.72 89.49h109.21v46.45h-144.48v-10.84a35.72 35.72 0 0 1 35.27-35.61z"/><path class="cls-2" d="M214.34 459.51a111.49 111.49 0 0 1 117.36-71.12 108 108 0 0 0 110.13-55.73 3.82 3.82 0 0 1 7.13 1.85v125z"/><path class="cls-3" d="M480.85 192.59h57.08v81.13h-87.32v-50.89a30.24 30.24 0 0 1 30.24-30.24zm460.46 59.56h41.28v69.25h-74V285a32.81 32.81 0 0 1 32.72-32.85z"/><path class="cls-7" d="M966.18 193a29.64 29.64 0 0 1 23.33-8.36c7.84-.72 15.58-1.24 23.43-1.24s15.58.52 23.33 1.24a29.64 29.64 0 0 1 23.32 8.36v5.16a30.13 30.13 0 0 1-23.32 8.47c-7.75.72-15.59 1.13-23.33 1.13s-15.59 0-23.43-1.13a30.15 30.15 0 0 1-23.33-8.47z"/><path class="cls-8" d="M437.91 1134.66V892.3a51.61 51.61 0 0 1 51.61-51.61h293v294.48z"/><path class="cls-5" d="M579.22 940.51L666.33 995l-87.11 58.83z"/></g></g></g><g id="clear_rectangle" data-name="clear rectangle"><path id="Layer_4" data-name="Layer 4" class="cls-9" d="M0 0h1600v1168H0z"/></g></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/jetpack-welcome.svg b/plugins/jetpack/images/jetpack-welcome.svg
deleted file mode 100644
index 4036cb14..00000000
--- a/plugins/jetpack/images/jetpack-welcome.svg
+++ /dev/null
@@ -1,205 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 21.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="jetpack-header" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
- y="0px" viewBox="0 0 1472.8 817.9" style="enable-background:new 0 0 1472.8 817.9;" xml:space="preserve">
-<style type="text/css">
- .st0{fill:#F6F6F6;}
- .st1{display:none;fill:#F6F6F6;}
- .st2{fill:#204A69;}
- .st3{fill:#E1E2E2;}
- .st4{display:none;}
- .st5{display:inline;fill:#E1E2E2;}
- .st6{fill:#46799A;}
- .st7{fill:#204A69;}
- .st8{fill:#204A69;}
- .st9{fill:#6F93AD;}
- .st10{fill:#BBC9D5;}
- .st11{fill:none;}
-</style>
-<title>jetpack-header</title>
-<path class="st0" d="M529.7,605.5c-192.1,86.3-352.1,157.7-402,180.1l2,0.4l140.1-51l-114.4,56.5l7.4,1.6L273,743.4l-90.6,53.9
- l8.1,1.7c72.6-35.9,202-99.7,350.3-172.2L529.7,605.5L529.7,605.5z"/>
-<path class="st1" d="M649.4,275.8l-0.7-0.1c-5-3.2-11.3-6.7-16.8-10.7l4.1-2.6c2.2,6.1,3.8,12.1,5.3,18.1l0.4,1.5l-1,1.2l-11.7,15
- l-3.7-5.7l18.6-4.5l1.5-0.4l1.2,1l15.1,11.7L656,304c-1.5-6-2.9-12.6-4.5-18.6l-0.4-1.5l1-1.2c3.9-4.8,8.4-9.5,12.2-14.3l2.7,4.1
- C661.7,274.3,655.2,275,649.4,275.8L649.4,275.8z"/>
-<path class="st1" d="M648.3,274.1c6.8-2.1,12.9-4.3,18.2-6l6.8-2.1l-4.2,6.2c-4,5.5-7.2,10.4-11.2,15.9l0.6-2.7
- c1.5,6,2.9,12.6,4.5,18.6l2.7,10.4l-8.6-6.1L642,296.8l3.4,0.7l-18.6,4.5l-11.1,2.5l6.8-8.4l11.7-15.1l-0.6,2.7
- c-1.5-6-2.2-12.5-3.6-19.1l-1.2-7.3l5.3,4.7C639.4,265.1,644.3,269.3,648.3,274.1L648.3,274.1z"/>
-<path class="st0" d="M671.8,561.4l13,18.3c251-123.8,543.3-266.1,711.5-346.3C1225.7,311.6,928,446.5,671.8,561.4L671.8,561.4z"/>
-<path class="st2" d="M1440.2,213.2c-4.3-9.4-64.4,7.3-64.4,7.3s14.7,3.9,19.2,12.6c1.6-1.1,4-2,5.6-3c-1.6,1.1-4,2-5.6,3
- c0.4,0.1,0.6,0.4,0.5,0.8l0,0c4.3,9.4-2.2,23.5-2.2,23.5S1444.5,222.6,1440.2,213.2z"/>
-<path class="st2" d="M1439.2,214.4c-1.2-1-4-0.9-6.4,0c-2.6,0.3-5.1,1-7.5,1.9c-5.2,1-10.4,2.7-15.6,3.7
- c-10.4,2.7-20.9,5.4-31.5,8.7l0.2-14.1c2.7,0.6,4.6,1.7,6.6,2.1c1.9,1.1,3.9,1.5,6.4,2.8c4.6,2.5,8.5,6.3,11.1,10.9l-9.8-3.5l5.6-3
- c3.9-1.9,8.6-0.2,10.5,3.7s0.2,8.6-3.7,10.5l-5.6,3l3.7-10.5c1.4,2.8,2.1,5.9,2.3,9c0.2,2.6,0.1,5.2-0.2,7.7l-1.6,7.4
- c-0.6,2.7-1.7,4.6-2.9,7.1l-10.8-8.7c9-5.8,17.5-12.5,26.5-18.3c4.2-3.3,8.5-6.6,12.6-9.3c1.8-1.7,4.2-3.3,5.3-5.2
- c0.9-0.6,1.5-1.4,1.9-2.4c0.5-0.3,0.8-0.7,1-1.2L1439.2,214.4L1439.2,214.4z M1442.5,212.3c1.4,3.1,0.3,5,0,6.4
- c-0.4,1.7-1.2,3.2-2.4,4.4c-1.4,2.6-3.2,5.1-5.1,7.4c-3.7,4.3-7.7,8.4-11.8,12.3c-7.9,7.8-16.6,14.9-25.7,21.3
- c-3.3,2.3-7.8,1.7-10.3-1.5c-1.6-1.8-1.9-4.4-0.7-6.5l0.2-0.7c0.3-1.4,1.4-3.2,1.7-4.6l1-4.7c0.1-3.5,0-6.4-1.2-7.3
- c-2.1-3.3-1.9-7.5,1.4-9.6l0.8-0.5l0.8-0.5l5.6-3l6.8,14.2l-5.6,3c-4,2-7.8,0.4-9.8-3.5c-1.6-2.2-3.6-4.1-5.9-5.5
- c-1.2-1-2.6-1.2-4.4-2.4c-1.4-0.9-2.9-1.5-4.6-1.7l-0.7-0.1c-3.9-1.5-5.9-5.5-4.3-9.4c0.6-2.5,2.7-4.3,5.2-4.5
- c11.1-2.5,21.6-5.2,33.1-6.3c5.6-0.9,11.4-1,17.1-0.6c3,0,6,0.4,8.9,1.2c1.6,0.3,3.2,0.9,4.6,1.7c1.9,0.5,3.5,1.9,4.1,3.7
- L1442.5,212.3L1442.5,212.3z"/>
-<path class="st2" d="M1395.5,233.9c2-0.8,3.8-1.8,5.6-3C1399.4,232.1,1397.5,233.1,1395.5,233.9z"/>
-<path class="st2" d="M1396.9,234.2l0.3-1.4l-2-0.4c-0.2-1.4-0.2-2.8,0.2-4.2l0.4-2c0.7-0.9,1.6-1.7,2.6-2.3l6.8,14.2
- c-0.3-0.5-0.7-0.8-1.2-1c-0.5-0.8-3.1-2.1-5.1-2.5L1396.9,234.2z M1393,232.7c-0.4-1.5-0.8-3,0.3-4.9c1.1-1.7,2.6-3,4.4-4
- c4-2,8.7-1,10.6,3c2.1,3.4,1.1,7.9-2.2,10.1l-1.6,1.1c-0.9,0.6-1.9,0.8-3,0.8l-2-0.4c-1.3-0.6-2.3-1.5-2.9-2.8l-2-0.4l0.3-1.4
- L1393,232.7L1393,232.7z"/>
-<g id="Rectangle-66">
- <path class="st3" d="M105,163.2c-2.4-5.9-8.8-12.9-15.3-15.3L35,128.5c-5.9-2.4-5.9-5.9,0-7.6l54.7-19.4
- c5.9-2.4,12.9-8.8,15.3-15.3l19.4-54.7c2.4-5.9,5.9-5.9,7.6,0l19.4,54.7c2.4,5.9,8.8,12.9,15.3,15.3l54.7,19.4
- c5.9,2.4,5.9,5.9,0,7.6L166.7,148c-5.9,2.4-12.9,8.8-15.3,15.3L132,217.9c-2.4,5.9-5.9,5.9-7.6,0L105,163.2z"/>
- <path class="st3" d="M104.4,163.2c-2.4-5.9-7.1-10-12.4-12.9c-5.3-2.4-11.8-4.1-17.6-5.9l-35.9-11.7l-4.7-1.8
- c-2.1-0.5-4-1.8-5.3-3.5c-0.8-1.4-1-3.1-0.6-4.7c0.6-1.1,1.4-2.1,2.3-2.9c1.5-0.9,3.1-1.7,4.7-2.4l17.6-6.5L87.9,98
- c4.7-1.8,9.4-6.5,12.4-11.2c1.3-2.6,2.3-5.4,2.9-8.2l2.9-8.8l12.4-35.3l1.8-4.7c0.5-2.1,1.8-4,3.5-5.3c1.4-1.4,3.6-1.6,5.3-0.6
- c1.4,0.5,2.5,1.6,2.9,2.9c1,1.6,1.8,3.4,2.4,5.3l6.5,17.6L153.3,85c2,5.1,5.8,9.2,10.6,11.8c2.6,1.3,5.4,2.3,8.3,2.9l8.8,2.9
- l35.3,12.4l4.7,1.8c2.1,0.5,4,1.8,5.3,3.5c1.4,1.4,1.6,3.6,0.6,5.3c-0.5,1.4-1.6,2.5-2.9,2.9c-1.6,1-3.4,1.8-5.3,2.4l-17.6,6.5
- l-35.3,12.4c-5.3,2.2-9.6,6.1-12.4,11.2c-1.2,2.4-2.4,5.3-3.5,8.2L147,178l-12.9,35.3l-1.8,4.7c-0.6,1.8-1.2,3.5-2.9,4.7
- c-1.2,0.6-2.9,1.2-4.1,0.6s-1.8-1.8-2.4-2.4c-0.9-1.5-1.7-3.1-2.4-4.7l-5.9-17.6L104.4,163.2z M106.1,162.7L119,198l6.5,17.6
- c0.5,1.4,1.1,2.8,1.8,4.1l0.6,0.6c1.2-1.2,2.4-4.7,2.9-7.6l12.4-35.9l2.9-8.8c1.2-2.9,1.8-5.9,3.5-9.4c3.5-5.9,8.2-11.2,15.3-13.5
- l35.3-12.4l17.6-6.5c1.3-0.3,2.5-0.9,3.5-1.8c0.3,0,0.6-0.2,0.6-0.6l0,0v0.6c-0.6-0.6-4.1-1.8-7.1-2.9l-35.3-12.4l-8.8-2.9
- c-2.9-1.2-5.9-1.8-9.4-3.5c-6.3-3.4-11.2-8.8-14.1-15.3l-12.4-35.3l-6.5-17.6c-0.3-1.3-0.9-2.5-1.8-3.5c0-0.3-0.2-0.6-0.6-0.6l0,0
- h1.2c-0.6,0.6-1.8,4.1-2.9,7.1L112,72.7l-2.9,8.8c-1.2,2.9-1.8,5.9-3.5,9.4c-3.5,5.9-8.8,11.2-15.3,13.5l-35.9,12.4l-17.7,5.9
- c-1.3,0.3-2.5,0.9-3.5,1.8c-0.3,0-0.6,0.2-0.6,0.6l0,0l0,0c0.6,1.2,4.1,2.4,7.1,3.5L75,141.5c5.9,2.4,11.8,4.1,17.6,7.1
- C98.5,151.7,103.2,156.7,106.1,162.7L106.1,162.7z"/>
-</g>
-<g id="Rectangle-66-2">
- <path class="st3" d="M1004.2,236.7c-1.4-3.4-4.8-7.6-9-9l-19.3-6.9c-3.4-1.4-3.4-3.4,0-4.8l19.3-6.9c3.4-1.4,7.6-4.8,9-9l6.9-19.3
- c1.4-3.4,3.4-3.4,4.8,0l6.9,19.3c1.4,3.4,4.8,7.6,9,9l19.3,6.9c3.4,1.4,3.4,3.4,0,4.8l-19.3,6.9c-3.4,1.4-7.6,4.8-9,9l-6.9,19.3
- c-1.4,3.4-3.4,3.4-4.8,0L1004.2,236.7z"/>
- <path class="st3" d="M1003.5,236.7c-1.2-2.1-2.9-4-4.8-5.5c-1.9-1.2-4-2.1-6.2-2.8l-14.5-4.1c-1.3-0.6-2.7-1-4.1-1.4
- c-0.7-0.7-2.1-0.7-2.8-2.1c-0.7-0.8-0.7-2,0-2.8c0-0.7,0.7-1.4,1.4-2.1c2.1-1.4,3.4-2.1,4.1-2.1l3.4-1.4l14.5-5.5
- c1.8-0.9,3.4-2.1,4.8-3.4c1.4-1.4,2.1-2.8,2.8-5.5l4.8-14.5c0.6-1.3,1-2.7,1.4-4.1c0.7-0.7,0.7-2.1,2.8-2.8
- c0.7-0.7,2.8-0.7,3.4-0.7c1.4,0.7,2.1,0.7,2.8,1.4c2.1,2.1,2.1,3.4,2.8,4.8l1.4,3.4l4.8,14.5c0.9,1.8,2.1,3.4,3.4,4.8
- c1.4,1.4,2.8,2.1,5.5,2.8l14.5,5.5c1.3,0.6,2.7,1,4.1,1.4c0.7,0.7,2.1,0.7,2.8,2.8c0.7,1,0.7,2.4,0,3.4c-0.7,1.4-0.7,2.1-1.4,2.1
- c-1.2,1.4-3,2.2-4.8,2.1l-3.4,1.4l-14.5,4.8c-1.8,0.9-3.4,2.1-4.8,3.4c-1.4,1.4-2.1,2.8-2.8,5.5l-5.5,14.5c-0.6,1.3-1,2.7-1.4,4.1
- c-0.7,0.7-0.7,1.4-2.1,2.8c-0.8,0.7-2,0.7-2.8,0c-0.7,0-1.4-0.7-2.1-1.4c-1.4-1.4-1.4-3.4-2.1-4.1l-1.4-3.4L1003.5,236.7
- L1003.5,236.7z M1005.6,236l5.5,14.5l1.4,3.4c0.7,1.4,0.7,2.1,1.4,2.8c-0.4-0.4-1-0.4-1.4,0V256c0.3-1.2,0.7-2.4,1.4-3.4l4.8-14.5
- c0.7-2.1,2.1-5.5,4.1-7.6c2.1-2.4,4.7-4.3,7.6-5.5l14.5-5.5l3.4-1.4c0.6-0.4,1.3-0.6,2.1-0.7l-0.7,0.7v2.1l0,0
- c-1.2-0.3-2.4-0.7-3.4-1.4l-14.5-4.8c-2.1-0.7-6.2-2.1-8.3-4.1c-2.4-2.1-4.3-4.7-5.5-7.6l-4.8-14.5l-1.4-3.4
- c-0.4-0.6-0.6-1.3-0.7-2.1l0.7,0.7h2.1c0.7-0.7,0.7-0.7,0.7,0c-0.3,1.2-0.7,2.4-1.4,3.4l-5.5,14.5c-0.7,2.1-2.1,5.5-4.1,7.6
- c-2.1,2.4-4.7,4.3-7.6,5.5l-14.5,4.8l-3.4,1.4c-0.8,0.5-1.8,0.7-2.8,0.7v-2.1l0,0c1.2,0.3,2.4,0.7,3.4,1.4l14.5,5.5
- C998.6,227.1,1003.2,230.9,1005.6,236L1005.6,236z"/>
-</g>
-<g id="Rectangle-66-3">
- <path class="st3" d="M1383.2,636.4l-17.2,8.3l8.3-17.2l-8.3-17.2l17.2,8.3l17.2-8.3l-8.3,17.2l8.3,17.2L1383.2,636.4z"/>
- <path class="st3" d="M1382.5,637c-5.5,3.4-10.3,6.9-15.9,9.6c-1.2,0.5-2.6,0.3-3.4-0.7c-0.6-0.4-0.7-1.2-0.3-1.8
- c0.1-0.1,0.2-0.2,0.3-0.3v-0.7c2.1-6.2,4.8-11.7,7.6-17.9v2.8l-8.3-17.2c-0.7-2.1,0-4.1,1.4-4.8c1-0.7,2.4-0.7,3.4,0l17.2,8.3h-3.4
- l17.2-8.3c2.1-0.7,4.1,0,4.8,2.1c0.7,1,0.7,2.4,0,3.4c-2.8,5.5-5.5,11.7-8.3,17.2V626c2.8,5.5,4.8,11.7,7.6,17.9
- c0.6,1.3,0.1,2.8-1.2,3.4c-0.1,0-0.1,0.1-0.2,0.1h-2.1C1393.5,643.9,1388.7,640.5,1382.5,637L1382.5,637z M1383.9,635
- c5.5,2.1,11.7,4.1,17.2,6.9l-3.4,3.4c-2.8-5.5-6.2-11-9-16.6c-0.7-0.8-0.7-2,0-2.8c2.8-5.5,5.5-11.7,8.3-17.2l4.8,4.8l-17.2,8.3
- c-1,0.7-2.4,0.7-3.4,0l-17.2-8.3l4.8-4.8l8.3,17.2c0.7,0.8,0.7,2,0,2.8c-2.8,5.5-6.2,11-9,16.6l-3.4-3.4c6.2-2.8,12.4-4.8,18.6-6.9
- H1383.9L1383.9,635z"/>
-</g>
-<g id="Rectangle-66-4">
- <path class="st3" d="M1283.3,473.4l-17.2,8.3l8.3-17.2l-8.3-17.2l17.2,8.3l17.2-8.3l-8.3,17.2l8.3,17.2L1283.3,473.4z"/>
- <path class="st3" d="M1282.6,474.8c-5.5,3.4-10.3,6.9-15.9,9.6c-1.2,0.5-2.6,0.3-3.4-0.7c-0.6-0.4-0.7-1.2-0.3-1.8
- c0.1-0.1,0.2-0.2,0.3-0.3V481c2.1-6.2,4.8-11.7,7.6-17.9v2.8l-8.3-17.2c-0.7-2.1,0-4.1,1.4-4.8c1-0.7,2.4-0.7,3.4,0l17.2,8.3h-3.4
- l17.2-8.3c2.1-0.7,4.1,0,4.8,2.1c0.7,1,0.7,2.4,0,3.4c-2.8,5.5-5.5,11.7-8.3,17.2v-2.8c2.8,5.5,4.8,11.7,7.6,17.9
- c0.6,1.3,0.1,2.8-1.2,3.4c-0.1,0-0.1,0.1-0.2,0.1h-2.1C1293.9,481.3,1288.4,477.8,1282.6,474.8L1282.6,474.8z M1284,472.7
- c5.5,2.1,11.7,4.1,17.2,6.9l-3.4,3.4c-2.8-5.5-6.2-11-9-16.6c-0.7-0.8-0.7-2,0-2.8c2.8-5.5,5.5-11.7,8.3-17.2l4.8,4.8l-17.2,8.3
- c-1,0.7-2.4,0.7-3.4,0l-17.2-8.3l4.8-4.8l8.3,17.2c0.7,0.8,0.7,2,0,2.8c-2.8,5.5-6.2,11-9,16.6l-3.4-3.4c6.2-2.8,12.4-4.8,18.6-6.9
- H1284L1284,472.7z"/>
-</g>
-<g id="Rectangle-66-5">
- <path class="st3" d="M289,375c-3.4-1.2-7.2-1.2-10.6,0l-21.8,10.6c-2.9,1.2-4.1,0-2.9-2.9l10.6-21.8c1.2-3.4,1.2-7.2,0-10.6
- l-10.6-21.8c-1.2-2.9,0-4.1,2.9-2.9l21.8,10.6c3.4,1.2,7.2,1.2,10.6,0l21.8-10.6c2.9-1.2,4.1,0,2.9,2.9l-10.6,21.8
- c-1.2,3.4-1.2,7.2,0,10.6l10.6,21.8c1.2,2.9,0,4.1-2.9,2.9L289,375z"/>
- <path class="st3" d="M288.4,375.6c-2.5-0.6-5.1-0.6-7.6,0c-2.4,0.6-4.7,2.4-7.1,3.5l-14.7,7.6c-1.5,0.8-3.1,1.4-4.7,1.8H252
- c-0.9-0.4-1.6-1.3-1.8-2.4c-0.6-1.8,0-2.4,0.6-3.5l3.5-7.6l7.1-14.7c0.8-2.1,1-4.3,0.6-6.5c0-1.8-1.8-4.1-2.9-6.5l-7.1-14.7
- c-0.8-1.5-1.4-3.1-1.8-4.7c0-1,0.2-2,0.6-2.9c0.6-1.2,1.8-2.4,2.9-2.4c1.4-0.5,2.9-0.3,4.1,0.6l7.6,3.5l14.7,7.1
- c1.8,0.6,4.1,1.2,5.9,0.6c1.8,0,4.1-1.8,6.5-2.9l14.7-7.1c1.5-0.8,3.1-1.4,4.7-1.8c1,0,2,0.2,2.9,0.6c1.2,0.6,2.4,1.8,2.4,2.9
- c0.5,1.2,0.3,2.6-0.6,3.5l-3.5,7.6l-7.1,14.7c-0.8,2.1-1,4.3-0.6,6.5c0,1.8,1.8,4.1,2.9,7.1l6.5,14.7c0.8,1.5,1.4,3.1,1.8,4.7v2.4
- c-0.6,1.2-1.2,1.8-2.4,1.8c-1.8,0-2.4,0-2.9-0.6l-7.6-3.5L288.4,375.6L288.4,375.6z M289,373.8l14.7,6.5l7.6,3.5h0.6
- c-0.3,0-0.6,0.2-0.6,0.6l0,0c-0.2-1-0.6-2-1.2-2.9l-7.6-14.7l-1.8-3.5c-0.7-1.5-1.3-3.1-1.8-4.7c-0.7-3.4-0.3-6.9,1.2-10l7.1-14.7
- l3.5-7.1l0,0c0,0.6,0.5,1.1,1.2,1.2h0.6c-1,0.3-2,0.7-2.9,1.2l-14.7,7.1l-3.5,1.8c-1.5,0.7-3.1,1.3-4.7,1.8
- c-3.5,0.6-6.5,0.6-10-1.2l-14.7-7.1l-7.1-3.5l0,0c0.6,0,1.1-0.5,1.2-1.2v-0.6c0.3,1,0.7,2,1.2,2.9l7.1,14.7l1.8,3.5
- c0.7,1.5,1.3,3.1,1.8,4.7c0.6,3.5,0.6,6.5-1.2,10l-7.7,14.7l-3.5,7.1v0.6c-0.3-0.3-0.5-0.7-0.6-1.2l0,0c1-0.2,2-0.6,2.9-1.2
- l15.3-6.5c2.6-1.4,5.3-2.4,8.2-2.9C283.9,372.7,286.5,373.1,289,373.8L289,373.8z"/>
-</g>
-<g id="Rectangle-66-6" class="st4">
- <path class="st5" d="M1741.7,363.3c-1.4-3.4-4.8-7.6-9-9l-19.3-6.9c-3.4-1.4-3.4-3.4,0-4.8l19.3-6.9c3.4-1.4,7.6-4.8,9-9l6.9-19.3
- c1.4-3.4,3.4-3.4,4.8,0l6.9,19.3c1.4,3.4,4.8,7.6,9,9l19.3,6.9c3.4,1.4,3.4,3.4,0,4.8l-19.3,6.9c-3.4,1.4-7.6,4.8-9,9l-6.9,19.3
- c-1.4,3.4-3.4,3.4-4.8,0L1741.7,363.3z"/>
- <path class="st5" d="M1741,363.3c-1.2-2.1-2.9-4-4.8-5.5c-1.9-1.2-4-2.1-6.2-2.8l-14.5-4.1c-1.3-0.6-2.7-1-4.1-1.4
- c-0.7-0.7-2.1-0.7-2.8-2.1c-0.7-0.8-0.7-2,0-2.8c0-0.7,0.7-1.4,1.4-2.1c2.1-1.4,3.4-2.1,4.1-2.1l3.4-1.4l14.5-5.5
- c1.8-0.9,3.4-2.1,4.8-3.4c1.4-1.4,2.1-2.8,2.8-5.5l4.8-14.5c0.6-1.3,1-2.7,1.4-4.1c0.7-0.7,0.7-2.1,2.8-2.8
- c0.7-0.7,2.8-0.7,3.4-0.7c1.4,0.7,2.1,0.7,2.8,1.4c2.1,2.1,2.1,3.4,2.8,4.8l1.4,3.4l4.8,14.5c0.9,1.8,2.1,3.4,3.4,4.8
- c1.4,1.4,2.8,2.1,5.5,2.8l14.5,5.5c1.3,0.6,2.7,1,4.1,1.4c0.7,0.7,2.1,0.7,2.8,2.8c0.7,1,0.7,2.4,0,3.4c-0.7,1.4-0.7,2.1-1.4,2.1
- c-1.2,1.4-3,2.2-4.8,2.1l-3.4,1.4l-14.5,4.8c-1.8,0.9-3.4,2.1-4.8,3.4c-1.4,1.4-2.1,2.8-2.8,5.5l-5.5,14.5c-0.6,1.3-1,2.7-1.4,4.1
- c-0.7,0.7-0.7,1.4-2.1,2.8c-0.8,0.7-2,0.7-2.8,0c-0.7,0-1.4-0.7-2.1-1.4c-1.4-1.4-1.4-3.4-2.1-4.1l-1.4-3.4L1741,363.3L1741,363.3z
- M1743.1,362.6l5.5,14.5l1.4,3.4c0.7,1.4,0.7,2.1,1.4,2.8c-0.4-0.4-1-0.4-1.4,0v-0.7c0.3-1.2,0.7-2.4,1.4-3.4l4.8-14.5
- c0.7-2.1,2.1-5.5,4.1-7.6c2.1-2.4,4.7-4.3,7.6-5.5l14.5-5.5l3.4-1.4c0.6-0.4,1.3-0.6,2.1-0.7l-0.7,0.7v2.1l0,0
- c-1.2-0.3-2.4-0.7-3.4-1.4l-14.5-4.8c-2.1-0.7-6.2-2.1-8.3-4.1c-2.4-2.1-4.3-4.7-5.5-7.6l-4.8-14.5l-1.4-3.4
- c-0.4-0.6-0.6-1.3-0.7-2.1l0.7,0.7h2.1c0.7-0.7,0.7-0.7,0.7,0c-0.3,1.2-0.7,2.4-1.4,3.4l-5.5,14.5c-0.7,2.1-2.1,5.5-4.1,7.6
- c-2.1,2.4-4.7,4.3-7.6,5.5l-14.5,4.8l-3.4,1.4c-0.8,0.5-1.8,0.7-2.8,0.7v-2.1l0,0c1.2,0.3,2.4,0.7,3.4,1.4l14.5,5.5
- C1736.1,353.7,1740.7,357.5,1743.1,362.6L1743.1,362.6z"/>
-</g>
-<g id="Rectangle-66-7">
- <path class="st3" d="M80.9,613.7c-1.2-2.9-4.1-6.5-7.6-7.6l-16.5-5.9c-2.9-1.2-2.9-2.9,0-4.1l16.5-5.9c2.9-1.2,6.5-4.1,7.6-7.6
- l5.9-16.5c1.2-2.9,2.9-2.9,4.1,0l5.9,16.5c1.2,2.9,4.1,6.5,7.6,7.6l16.5,5.9c2.9,1.2,2.9,2.9,0,4.1l-16.5,5.9
- c-2.9,1.2-6.5,4.1-7.6,7.6l-5.9,16.5c-1.2,2.9-2.9,2.9-4.1,0L80.9,613.7z"/>
- <path class="st3" d="M80.3,613.7c-1-1.8-2.4-3.4-4.1-4.7c-1.6-1-3.4-1.8-5.3-2.4l-12.3-3.5c-1.1-0.5-2.3-0.9-3.5-1.2
- c-0.6-0.6-1.8-0.6-2.3-1.8c-0.6-0.7-0.6-1.7,0-2.4c0-0.6,0.6-1.2,1.2-1.8c1.8-1.2,2.9-1.8,3.5-1.8l2.9-1.2l12.4-4.7
- c1.5-0.8,2.9-1.8,4.1-2.9c1.2-1.3,2.1-2.9,2.3-4.7l4.1-12.4c0.5-1.1,0.9-2.3,1.2-3.5c0.6-0.6,0.6-1.8,2.3-2.4
- c0.6-0.6,2.3-0.6,2.9-0.6c1.2,0.6,1.8,0.6,2.3,1.2c1.8,1.8,1.8,2.9,2.3,4.1l1.2,2.9l4.1,12.4c0.8,1.5,1.8,2.9,2.9,4.1
- c1.3,1.2,2.9,2.1,4.7,2.4l12.3,4.7c1.1,0.5,2.3,0.9,3.5,1.2c0.6,0.6,1.8,0.6,2.3,2.4c0.6,0.9,0.6,2,0,2.9c-0.6,1.2-0.6,1.8-1.2,1.8
- c-1,1.2-2.5,1.9-4.1,1.8l-2.9,1.2L105,609c-1.5,0.8-2.9,1.8-4.1,2.9c-1.2,1.3-2.1,2.9-2.3,4.7L93.8,629c-0.5,1.1-0.9,2.3-1.2,3.5
- c-0.6,0.6-0.6,1.2-1.8,2.4c-0.7,0.6-1.7,0.6-2.3,0c-0.6,0-1.2-0.6-1.8-1.2c-1.2-1.2-1.2-2.9-1.8-3.5l-1.2-2.9L80.3,613.7z
- M82,613.1l4.7,12.4l1.2,2.9c0.6,1.2,0.6,1.8,1.2,2.4c-0.3-0.3-0.8-0.3-1.1,0l0,0v-0.6c0.2-1,0.6-2,1.2-2.9l4.1-12.4
- c0.7-2.4,1.9-4.6,3.5-6.5c1.8-2,4-3.6,6.5-4.7l12.3-4.7l2.9-1.2c0.5-0.3,1.1-0.5,1.8-0.6l-0.6,0.6v1.8l0,0c-1-0.2-2-0.6-2.9-1.2
- l-12.3-4.1c-1.8-0.6-5.3-1.8-7.1-3.5c-2-1.8-3.6-4-4.7-6.5l-4.1-12.4l-1.2-2.9c-0.3-0.5-0.5-1.1-0.6-1.8l0.6,0.6h1.8
- c0.6-0.6,0.6-0.6,0.6,0c-0.2,1-0.6,2-1.2,2.9l-4.7,12.4c-0.7,2.4-1.9,4.6-3.5,6.5c-1.8,2-4,3.6-6.5,4.7l-12.3,4.1l-2.9,1.2
- c-0.7,0.4-1.5,0.6-2.3,0.6v-1.8l0,0c1,0.2,2,0.6,2.9,1.2l12.3,4.7C76.1,605.5,80,608.8,82,613.1L82,613.1z"/>
-</g>
-<path class="st6" d="M823.4,697.2c0-103.6-57.3-186.5-137.2-200.6c-11.6,38.4-73.8,39.6-87.2,1.8l-0.6-1.8
- c-89,18.3-151.2,101.8-160.3,198.1c-13.4,138.4-3,116.4-3,116.4h389.5"/>
-<path class="st7" d="M549.7,638c0.6,7.3-0.6,14-0.6,21.3l-1.8,21.3l-3.7,42l-4.3,42.1c-1.1,14.1-3.2,28.2-6.1,42.1
- c0,0.6-0.6,0.6-1.2,0.6s-0.6-0.6-0.6-1.2c-0.6-14,0.6-28,1.8-42.1l3.7-42.1l3.7-42.1l1.8-21.3c0.6-6.7,1.2-14,3-20.7
- c0.6-1.2,1.2-1.8,2.4-1.2C548.4,636.8,549,637.4,549.7,638L549.7,638z M683.8,464.9c1.2,3.7,1.2,7.9,1.2,11.6
- c-0.1,3.7,0.1,7.4,0.6,11c0.7,3,2.4,5.6,4.9,7.3c1.4,0.7,2.8,1.3,4.3,1.8c1.8,0.6,4.3,1.2,6.1,1.8c15.2,5.5,28,14,40.8,23.2
- c12.4,9.4,24.1,19.8,34.7,31.1c10.4,11.6,19.5,24.4,25.6,39c0,0.6,0,1.2-0.6,1.2s-1.2,0-1.2-0.6c-8.5-12.7-17.8-24.7-28-36
- c-10.4-11.1-21.8-21.1-34.2-29.8c-6.1-4.4-12.4-8.5-18.9-12.2c-6.7-3.7-13.4-7.3-20.1-9.8c-1.7-0.5-3.3-1.1-4.9-1.8
- c-2.2-0.4-4.2-1.3-6.1-2.4c-3.8-2.7-6.6-6.5-7.9-11c-0.5-2.2-0.7-4.5-0.6-6.7v-5.5c0-3.7-0.6-7.9,1.2-11.6
- C681.3,464.3,682.5,463.7,683.8,464.9C683.1,463.7,683.1,464.3,683.8,464.9L683.8,464.9z"/>
-<path class="st7" d="M700.2,301.5c7.3,14,11.6,29.9,15.2,45.1c3.8,15.6,6.1,31.5,6.7,47.6c0,15.9-2.4,32.9-11,46.9
- c-4.4,7.2-10.2,13.4-17.1,18.3c-7.3,4.9-15.2,7.3-23.2,9.1c-16.4,3-33.3,0.7-48.2-6.7c-14.6-6.7-28-17.1-39-28.6
- c-22.5-23.2-37.8-51.8-47.5-81.7c0-0.6,0-1.2,0.6-1.2s1.2,0,1.2,0.6c13.4,28.6,28.7,56.1,50.6,78.6c11,11,23.2,20.7,37.2,26.8
- s29.3,8.5,43.9,5.5c7.3-1.8,14.6-4.3,20.7-8.5c6.1-4.2,11.3-9.6,15.2-15.9c7.9-12.8,10.4-28.6,10.4-43.9s-2.4-31.1-6.1-46.3
- s-9.1-29.9-13.4-45.1c-0.6-1.2,0-2.4,1.2-2.4C699,300.3,699.6,300.3,700.2,301.5L700.2,301.5z"/>
-<path class="st7" d="M607.6,255.8c48.8-19.5,91.4-8.5,88.4,14.6c-2.4,20.1-100.6,26.8-112.2,54.9c-7.3,18.3,3.7,45.7,12.8,63.4
- c5.3,10.1,3.3,22.5-4.9,30.5l-8.5,10.4C529,375.9,480.2,306.4,607.6,255.8z M667.3,361.9c3,4.9,5.5,10.4,7.9,15.2
- c1.8,5.5,4.3,11,5.5,16.5c0,1.2-0.6,2.4-1.8,2.4s-1.8,0-2.4-1.2c-3-4.9-4.9-10.4-7.3-15.9c-1.9-5.4-3.5-10.9-4.9-16.5
- c0-0.6,0.6-1.8,1.2-1.8C666.1,361.3,666.7,361.3,667.3,361.9L667.3,361.9z"/>
-<path class="st8" d="M696.6,366.7c3.1-1.2,4.7-4.7,3.7-7.9l-3.7-9.1c-1.2-3.2-4.7-4.8-7.9-3.7c-3.2,1.2-4.8,4.7-3.7,7.9l0,0l3.7,9.1
- C689.9,366.2,693.4,367.8,696.6,366.7z M636.8,389.9c3.1-1.2,4.7-4.7,3.7-7.9l-3.7-9.1c-1.2-3.2-4.7-4.8-7.9-3.7
- c-3.2,1.2-4.8,4.7-3.7,7.9l3.7,9.1c0.9,3.1,4.2,4.9,7.3,3.9C636.4,390.1,636.6,390,636.8,389.9L636.8,389.9z"/>
-<path class="st7" d="M670.8,431.4c-3.2,0-6.4-0.9-9.1-2.7c-1.6-1.1-2-3.2-1-4.8c1.1-1.6,3.2-2,4.8-1c0,0,0.1,0,0.1,0.1
- c2.5,1.7,6.1,2,10,0.6c4.2-1.5,7.6-4.6,8.5-7.9c0.5-1.8,2.4-2.9,4.2-2.4h0.1c1.8,0.5,2.9,2.4,2.4,4.3l0,0
- c-1.5,5.4-6.5,10.2-12.8,12.5C675.7,431,673.2,431.4,670.8,431.4z"/>
-<path class="st7" d="M622.2,350.9c-1.2,0-3,1.2-4.9,1.8c-1.9,0.8-3.8,1.8-5.5,3c-1.8,1.2-3,2.4-4.9,3.7c-1.2,1.2-3,2.4-3.7,4.3
- c-0.6,1.2-1.8,1.2-3,0.6c-0.6-0.6-1.2-1.2-0.6-2.4c1.2-5.5,5.5-8.5,9.1-11.6c2.1-1.4,4.3-2.4,6.7-3c2.6-0.8,5.3-1,7.9-0.6
- c1.2,0,1.8,1.2,1.2,2.4C624,349.8,623.1,350.5,622.2,350.9z M670.4,327.7c1.8-2.4,4.3-3.7,6.1-4.9c2.1-1.1,4.4-1.7,6.7-1.8
- c4.9-0.6,9.8-0.6,14.6,2.4c1.2,0.6,1.2,1.8,0.6,3c-0.6,0.6-1.2,1.2-2.4,0.6c-1.8-0.5-3.6-0.7-5.5-0.6c-2.1-0.1-4.1,0.1-6.1,0.6
- c-1.8,0.6-4.3,0.6-6.1,1.2c-1.7,0.5-3.3,1.1-4.9,1.8l-0.6,0.6c-1.2,0.6-2.4,0-2.4-0.6L670.4,327.7L670.4,327.7z"/>
-<path class="st9" d="M700.9,269.8c-48.8-85.3-211.5-17.7-170.7,87.2"/>
-<path class="st10" d="M741.1,255.2c-17.1,10.4-35.4,19.5-53,28.6l-53.7,26.9l-54.2,26.8c-18.3,9.1-36,17.7-54.2,26.2
- c-1.2,0.6-2.4,0-2.4-1.2c-0.6-1.2,0-1.8,0.6-2.4c17.7-9.8,35.4-18.9,53.6-28l53.6-26.8l54.2-26.8c18.3-9.1,36-17.7,54.9-25
- c0.7-0.1,1.3,0.1,1.8,0.6C741.7,254.1,741.7,255.3,741.1,255.2L741.1,255.2z"/>
-<path class="st10" d="M608.8,316.8c34.8-32.9,91.4-86.6,131.1-62.8 M608.2,316.2c8.5-9.8,17.7-18.9,27.4-27.4
- c9.8-8.6,20.2-16.5,31.1-23.8c11-7.3,22.5-13.4,36-17.1l4.9-1.2c1.8,0,3.7-0.6,4.9-0.6c1.8,0,3.7-0.6,4.9-0.6l4.9,0.6
- c3.7,0,6.7,1.2,9.8,2.4s6.1,3,9.1,4.3c0.9,0.5,1.4,1.5,1.2,2.4c0,0.6-1.8,1.2-2.4,1.2c-11-5.5-23.8-5.5-35.4-2.4
- c-12.2,3-23.2,9.8-33.5,16.5c-10.7,7-20.9,14.7-30.5,23.2c-9.8,8.5-19.5,17.1-29.9,25c-0.4,0.5-1.1,0.6-1.6,0.2
- c-0.1-0.1-0.2-0.1-0.2-0.2C607.6,317.4,607.6,316.8,608.2,316.2L608.2,316.2z M683.8,809.3h275.5v-23.2h-256
- c-10.6-0.1-19.4,8.4-19.5,19c0,0.2,0,0.3,0,0.5V809.3z"/>
-<path class="st10" d="M834.4,809.3h322.5l28.6-206.6c2.4-18.9-12.2-36-31.1-36H895.3c-15.9-0.2-29.3,11.7-31.1,27.4L834.4,809.3
- L834.4,809.3z"/>
-<path class="st0" d="M1472.3,813c-45.3,2.4-90.5,3-135.8,4.3l-1029.8,0.6c-90.5-0.6-215.2,0-305.8-3.7c-0.4-0.1-0.8-0.9-0.8-1.8
- c-0.1-0.9,0.2-1.7,0.6-1.8c0.1,0,0.1,0,0.2,0c90.5-3.7,215.2-3,305.8-3.7l1029.8,0.6c45.3,0.6,90.5,1.2,135.8,4.3
- c0.3,0,0.5,0.6,0.5,1.2C1472.7,812.6,1472.4,812.6,1472.3,813C1472.3,812.9,1472.3,813,1472.3,813L1472.3,813z"/>
-<path class="st7" d="M599,466.7c1.2,5,2,10.1,2.4,15.2c0,4.9,0.6,9.8,0.6,15.2V496c1.2,2.4,2.4,5.5,3.7,8.5c1.3,2.7,2.9,5.1,4.9,7.3
- c1.9,2.3,4.2,4.4,6.7,6.1c2.4,2,5.1,3.6,7.9,4.9c0.5,0.5,0.7,1.2,0.6,1.8c0,0.6-0.6,0.6-1.2,0.6c-3.7-0.6-6.7-1.2-9.8-3
- s-6.1-3.7-8.5-6.7c-2.4-2.6-4.4-5.4-6.1-8.5c-1.8-3.1-3.2-6.3-4.3-9.8V496c-0.1-5.1,0.1-10.2,0.6-15.2c0.6-4.9,1.2-9.8,2.4-15.2
- C597.8,466.8,598.4,466.2,599,466.7L599,466.7z"/>
-<path class="st11" d="M274.2,743.8l-110.8,49.5l20.2,4.4L274.2,743.8z M269.8,735.1l-140.1,51l26.3,5.6L269.8,735.1z"/>
-</svg>
diff --git a/plugins/jetpack/images/jetpack-wordads.svg b/plugins/jetpack/images/jetpack-wordads.svg
deleted file mode 100644
index d250aab7..00000000
--- a/plugins/jetpack/images/jetpack-wordads.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 1168"><defs><style>.cls-1{fill:#CCCED0}.cls-2{fill:#E1E2E2}.cls-3{fill:#204A69}.cls-4{fill:#00be28}.cls-5{fill:none}</style></defs><title>jetpack-wordads</title><g id="jetpack-wordads"><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1-2"><path class="cls-1" d="M203.78 929.63c53.28-181.92 240.61-393.9 384.71-386.7 166.67 8.34 237.77 108.46 365.75 93.57 222.51-25.59 181.84-523.22 442.17-523.22v1012.88H203.78z"/><path class="cls-2" d="M637.6 728.18a109.35 109.35 0 0 1 10.34 36.31c1.42 12.13 1.32 24.27 2 36.31 1 24.27 1.7 48.44 1.7 72.71s-.66 48.35-1.7 72.62c-.67 12.13-.57 24.17-2 36.31a106.62 106.62 0 0 1-10.34 36.31h-7.49a109.19 109.19 0 0 1-10.43-36.31c-1.32-12.14-1.32-24.18-1.89-36.31-1-24.27-1.71-48.45-1.8-72.62s.76-48.44 1.8-72.71c.66-12 .57-24.18 1.89-36.31a109.59 109.59 0 0 1 10.43-36.31zm392.49 66.64a69.21 69.21 0 0 1 10.33 28.44c1.42 9.48 1.33 19 2 28.45 1 19 1.71 37.25 1.71 55.93s-.67 37.35-1.71 56c-.66 9.48-.57 19-1.89 28.44a70.38 70.38 0 0 1-10.43 28.44h-7.49a70.38 70.38 0 0 1-10.43-28.44c-1.33-9.48-1.23-19-1.9-28.44-1-19-1.7-37.35-1.7-56s.66-37.35 1.7-55.93c.67-9.49.57-19 1.9-28.45a70.73 70.73 0 0 1 10.43-28.44z"/><path class="cls-3" d="M1396.22 1123.88c-49.68 6.07-99.45 8.82-149.13 10.34s-99.45 1.33-149.12 1.89c-99.45 1.24-199.09 1.43-298.35 1.81s-199.09-.57-298.34-1.81c-49.68-.56-99.45-.56-149.13-1.89S252.7 1130 203 1123.88v-8c49.67-6.07 99.35-8.82 149.12-10.33s99.45-1.33 149.13-1.9c99.44-1.23 199.08-1.42 298.34-1.8s199.09.57 298.35 1.8c49.67.57 99.35.57 149.12 1.9s99.45 4.26 149.13 10.33zm-1196-195.29a561.64 561.64 0 0 1 87.13-193.87 610 610 0 0 1 149.08-154.34 315.47 315.47 0 0 1 99.45-48.16 183.26 183.26 0 0 1 56.88-5.69 421.55 421.55 0 0 1 54.42 6.16 507.14 507.14 0 0 1 104.28 31.67c33.18 13.55 64.66 29.1 96.32 40.29a229.17 229.17 0 0 0 95.94 15.17 128.44 128.44 0 0 0 83.71-36.82 303.1 303.1 0 0 0 56.88-80.67c15.84-30.15 29.3-62.19 42.38-94.81s25.79-65.22 39.72-97.83a662.39 662.39 0 0 1 49-95.56 258.59 258.59 0 0 1 75.84-79.45 167.13 167.13 0 0 1 105-25.5v7.49a172.06 172.06 0 0 0-92.81 35.55 204.83 204.83 0 0 0-35.17 35.08 295.61 295.61 0 0 0-28.38 41.7c-34.32 58.68-57.36 124.85-83 190.36-13.08 32.9-26.16 66.18-42.47 98.41a325 325 0 0 1-63.61 90.44 174.13 174.13 0 0 1-48 32.71A163.11 163.11 0 0 1 946 654.8 258.92 258.92 0 0 1 835.46 638c-34.42-12.42-65.89-28.44-97.65-41.43a478 478 0 0 0-96.42-30.53 384.65 384.65 0 0 0-50-6.44 150.13 150.13 0 0 0-47.4 4.17 284.18 284.18 0 0 0-89.5 42.28 525.46 525.46 0 0 0-77.92 66.36 778.31 778.31 0 0 0-66.94 78 753.18 753.18 0 0 0-101.86 180.17z"/><path class="cls-3" d="M1226 217.38a57 57 0 0 1 6.26-27.87 174.14 174.14 0 0 1 15.87-22.51 185.08 185.08 0 0 1 40.39-38.78 156.85 156.85 0 0 1 52-23.13 128.14 128.14 0 0 1 28.44-4.07 50.8 50.8 0 0 1 27.77 8.43V117a56.57 56.57 0 0 1-12.22 7.4 69.87 69.87 0 0 1-11.67 4.64c-3.88 1.23-7.67 2.47-11.47 3.32a117.27 117.27 0 0 0-11.18 3.6 185.18 185.18 0 0 0-41.15 21.62 263.65 263.65 0 0 0-36.5 30.62l-8.43 9a108.77 108.77 0 0 1-8.44 9 62.16 62.16 0 0 1-10 8.25 57.74 57.74 0 0 1-12.7 6.92z"/><ellipse class="cls-4" cx="619.97" cy="544.45" rx="45.88" ry="49.68"/><ellipse class="cls-4" cx="1019.94" cy="610.91" rx="45.88" ry="49.68"/><ellipse class="cls-4" cx="1396.22" cy="113.28" rx="45.88" ry="49.68"/><ellipse class="cls-4" cx="203.78" cy="929.63" rx="45.88" ry="49.68"/></g></g></g><g id="clear_rectangle" data-name="clear rectangle"><path id="Layer_4" data-name="Layer 4" class="cls-5" d="M0 0h1600v1168H0z"/></g></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/jupiter.svg b/plugins/jetpack/images/jupiter.svg
deleted file mode 100644
index 1a9e4039..00000000
--- a/plugins/jetpack/images/jupiter.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="100" width="50" version="1.1" viewBox="0 0 50 100"><defs><path d="M0.95 40.37C-4.37 67.46 13.27 93.73 40.37 99.05 67.46 104.37 93.73 86.73 99.05 59.63 104.37 32.54 86.73 6.27 59.63 0.95 32.54-4.37 6.27 13.27 0.95 40.37"/></defs><g fill="none" opacity="0.5" stroke="none" strokeWidth="1"><g transform="translate(-1215.000000, -93.000000)"><g transform="translate(160.000000, 32.000000)"><g transform="translate(1055.000000, 61.000000)"><path d="M0.94 40.19C-4.36 67.16 13.22 93.32 40.19 98.62 67.16 103.92 93.32 86.35 98.62 59.37 103.92 32.4 86.35 6.24 59.37 0.94 32.4-4.36 6.24 13.22 0.94 40.19" fill="#CCCED0"/><g><mask fill="white"><path d="M0.95 40.37C-4.37 67.46 13.27 93.73 40.37 99.05 67.46 104.37 93.73 86.73 99.05 59.63 104.37 32.54 86.73 6.27 59.63 0.95 32.54-4.37 6.27 13.27 0.95 40.37"/></mask><g/><path d="M49.59 38.06C51.29 29.39 59.7 23.73 68.38 25.44 77.05 27.14 82.7 35.55 81 44.23 79.3 52.9 70.88 58.55 62.21 56.85 53.53 55.15 47.88 46.73 49.59 38.06" fill="#F6F6F6"/><path d="M53.93 52.41C48.66 47.1 42.15 43.21 34.98 41.08L37.21 29.74C44.64 30.48 52.15 29.34 59.03 26.41L53.93 52.41" fill="#F6F6F6"/><path d="M30.93 34.4C31.55 31.25 34.6 29.2 37.75 29.82 40.89 30.43 42.94 33.49 42.32 36.63 41.71 39.78 38.65 41.83 35.51 41.21 32.36 40.59 30.31 37.54 30.93 34.4" fill="#F6F6F6"/><polyline fill="#F6F6F6" points="35.54 41.22 -14.22 31.44 -11.99 20.08 37.77 29.85 35.54 41.22"/><path d="M30.34 67.29C31.4 61.93 36.59 58.44 41.95 59.49 47.31 60.54 50.8 65.74 49.75 71.1 48.69 76.46 43.5 79.95 38.14 78.89 32.78 77.84 29.29 72.65 30.34 67.29" fill="#F6F6F6"/><path d="M33.02 76.15C29.77 72.87 25.75 70.47 21.32 69.15L22.7 62.15C27.29 62.61 31.93 61.9 36.18 60.09L33.02 76.15" fill="#F6F6F6"/><path d="M18.82 65.02C19.2 63.08 21.09 61.82 23.03 62.2 24.97 62.58 26.24 64.46 25.86 66.41 25.48 68.35 23.59 69.62 21.65 69.23 19.7 68.85 18.44 66.97 18.82 65.02" fill="#F6F6F6"/><path d="M43.91 78.29C48.16 76.49 52.8 75.78 57.39 76.24L58.77 69.23C54.34 67.92 50.32 65.51 47.07 62.23L43.91 78.29" fill="#F6F6F6"/><polyline fill="#F6F6F6" points="21.67 69.24 -67.61 51.7 -66.23 44.68 23.05 62.22 21.67 69.24"/></g><path d="M35.02 68.89C35.07 65.99 37.47 63.68 40.37 63.74 43.28 63.79 45.58 66.19 45.53 69.09 45.47 72 43.07 74.3 40.17 74.25 37.27 74.19 34.96 71.79 35.02 68.89" fill="#F6F6F6"/></g></g></g></g></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/man-and-laptop.svg b/plugins/jetpack/images/man-and-laptop.svg
deleted file mode 100644
index 79ea2ff3..00000000
--- a/plugins/jetpack/images/man-and-laptop.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="153px" width="199px" version="1.1" viewBox="0 0 199 153"><path d="M62.1,114.8 C37.5,132.9 17,147.9 10.6,152.6 L10.9,152.6 L29.2,141.1 L14.7,152.6 L15.8,152.6 L29.9,142.2 L18.7,152.6 L19.9,152.6 C29.1,145.3 45.5,132.3 64.3,117.5 L62.1,114.8 L62.1,114.8 Z" fill="#F6F6F6"/><path d="M77.7,102 L80.1,104.2 C111.9,79 149,49.9 170.4,33.4 C148.6,49.7 110.5,77.9 77.7,102 L77.7,102 Z" fill="#F6F6F6"/><path d="M176.2,29.4 C176.1,29.2 175.9,29.1 175.8,29.1 L175.7,29.1 L175.5,29.1 C175.2,29 175,29 174.8,29 C174.3,29 173.9,29 173.5,29.1 C172.7,29.2 171.9,29.4 171.1,29.7 C169.5,30.2 168.1,30.9 166.6,31.6 C166.3,31.7 166,32 166,32.4 C165.9,33 166.3,33.5 166.9,33.6 L167,33.6 C167.2,33.6 167.5,33.6 167.7,33.7 C168,33.8 168.2,33.8 168.4,33.9 C168.9,34.1 169.2,34.3 169.4,34.5 L169.4,34.5 C169.6,34.6 169.7,35 169.8,35.5 L169.8,36.2 C169.8,36.4 169.7,36.7 169.7,36.9 L169.7,37 C169.6,37.3 169.7,37.7 170,37.9 C170.5,38.3 171.1,38.2 171.5,37.8 C171.6,37.7 171.7,37.5 171.9,37.4 L171.9,37.4 C171.9,37.4 171.9,37.4 171.9,37.3 C172.8,36.3 173.7,35.2 174.5,34 C175,33.3 175.4,32.6 175.8,31.9 C176,31.5 176.2,31.1 176.3,30.7 C176.5,29.9 176.2,29.4 176.2,29.4 Z" fill="#204A69"/><path d="M100,133.8 C100,116.8 90.6,103.2 77.5,100.9 C75.6,107.2 65.4,107.4 63.2,101.2 L63.1,100.9 C48.5,103.9 38.3,117.6 36.8,133.4 C34.6,156.1 36.3,152.5 36.3,152.5 L100.2,152.5" fill="#46799A"/><path d="M55.1,124.1 C55.2,125.3 55,126.4 55,127.6 L54.7,131.1 L54.1,138 L53.4,144.9 C53.2,147.2 52.9,149.5 52.4,151.8 C52.4,151.9 52.3,151.9 52.2,151.9 C52.1,151.9 52.1,151.8 52.1,151.7 C52,149.4 52.2,147.1 52.4,144.8 L53,137.9 L53.6,131 L53.9,127.5 C54,126.4 54.1,125.2 54.4,124.1 C54.5,123.9 54.6,123.8 54.8,123.9 C54.9,123.9 55,124 55.1,124.1 L55.1,124.1 Z" fill="#204A69"/><path id="Path" d="M77.1,95.7 C77.3,96.3 77.3,97 77.3,97.6 C77.3,98.2 77.3,98.9 77.4,99.4 C77.5,99.9 77.8,100.3 78.2,100.6 C78.4,100.7 78.6,100.8 78.9,100.9 C79.2,101 79.6,101.1 79.9,101.2 C82.4,102.1 84.5,103.5 86.6,105 C88.6,106.5 90.5,108.2 92.3,110.1 C94,112 95.5,114.1 96.5,116.5 C96.5,116.6 96.5,116.7 96.4,116.7 C96.3,116.7 96.2,116.7 96.2,116.6 C94.8,114.5 93.3,112.6 91.6,110.7 C89.9,108.9 88,107.2 86,105.8 C85,105.1 84,104.4 82.9,103.8 C81.8,103.2 80.7,102.6 79.6,102.2 C79.3,102.1 79,102 78.8,101.9 C78.4,101.8 78.1,101.7 77.8,101.5 C77.2,101.1 76.7,100.4 76.5,99.7 C76.4,99.3 76.4,98.9 76.4,98.6 L76.4,97.7 C76.4,97.1 76.3,96.4 76.6,95.8 C76.7,95.6 76.9,95.5 77.1,95.7 C77,95.5 77,95.6 77.1,95.7 L77.1,95.7 Z" fill="#204A69"/><path d="M79.8,68.9 C81,71.2 81.7,73.8 82.3,76.3 C82.9,78.8 83.3,81.4 83.4,84.1 C83.4,86.7 83,89.5 81.6,91.8 C80.9,93 79.9,94 78.8,94.8 C77.6,95.6 76.3,96 75,96.3 C72.3,96.8 69.5,96.4 67.1,95.2 C64.7,94.1 62.5,92.4 60.7,90.5 C57,86.7 54.5,82 52.9,77.1 C52.9,77 52.9,76.9 53,76.9 C53.1,76.9 53.2,76.9 53.2,77 C55.4,81.7 57.9,86.2 61.5,89.9 C63.3,91.7 65.3,93.3 67.6,94.3 C69.9,95.3 72.4,95.7 74.8,95.2 C76,94.9 77.2,94.5 78.2,93.8 C79.2,93.1 80.1,92.2 80.7,91.2 C82,89.1 82.4,86.5 82.4,84 C82.4,81.5 82,78.9 81.4,76.4 C80.8,73.9 79.9,71.5 79.2,69 C79.1,68.8 79.2,68.6 79.4,68.6 C79.6,68.7 79.7,68.7 79.8,68.9 L79.8,68.9 Z" fill="#204A69"/><path d="M64.6,61.4 C72.6,58.2 79.6,60 79.1,63.8 C78.7,67.1 62.6,68.2 60.7,72.8 C59.5,75.8 61.3,80.3 62.8,83.2 C63.7,84.9 63.3,86.9 62,88.2 L60.6,89.9 C51.7,81.1 43.7,69.7 64.6,61.4 L64.6,61.4 Z" fill="#204A69"/><path id="Path" d="M74.4,78.8 C74.9,79.6 75.3,80.5 75.7,81.3 C76,82.2 76.4,83.1 76.6,84 C76.6,84.2 76.5,84.4 76.3,84.4 C76.1,84.4 76,84.4 75.9,84.2 C75.4,83.4 75.1,82.5 74.7,81.6 C74.4,80.7 74.1,79.8 73.9,78.9 C73.9,78.8 74,78.6 74.1,78.6 C74.2,78.7 74.3,78.7 74.4,78.8 L74.4,78.8 Z" fill="#204A69"/><path d="M79.2,79.6 C79.7,79.4 80,78.8 79.8,78.3 L79.2,76.8 C79,76.3 78.4,76 77.9,76.2 C77.4,76.4 77.1,77 77.3,77.5 L77.9,79 C78.1,79.5 78.7,79.8 79.2,79.6 Z" fill="#204A69"/><path id="Path" d="M69.4,83.4 C69.9,83.2 70.2,82.6 70,82.1 L69.4,80.6 C69.2,80.1 68.6,79.8 68.1,80 C67.6,80.2 67.3,80.8 67.5,81.3 L68.1,82.8 C68.3,83.4 68.9,83.6 69.4,83.4 Z" fill="#204A69"/><path d="M77.2,87.7 C77.1,88.1 76.8,88.4 76.4,88.7 C76,89 75.4,89.2 75,89.2 C74.7,89.2 74.4,89.1 74.1,88.9 C73.9,88.7 73.6,88.8 73.4,89 C73.2,89.2 73.3,89.5 73.5,89.7 C73.9,90 74.5,90.1 75,90.1 C75.7,90.1 76.4,89.9 77,89.5 C77.6,89.1 78,88.6 78.2,87.9 C78.3,87.6 78.1,87.4 77.9,87.3 C77.7,87.2 77.3,87.4 77.2,87.7 L77.2,87.7 Z" fill="#204A69"/><path d="M67,77 C66.8,77 66.5,77.2 66.2,77.3 C65.9,77.4 65.6,77.6 65.3,77.8 C65,78 64.8,78.2 64.5,78.4 C64.3,78.6 64,78.8 63.9,79.1 C63.8,79.3 63.6,79.3 63.4,79.2 C63.3,79.1 63.2,79 63.3,78.8 C63.5,77.9 64.2,77.4 64.8,76.9 C65.1,76.7 65.5,76.5 65.9,76.4 C66.3,76.3 66.7,76.2 67.2,76.3 C67.4,76.3 67.5,76.5 67.4,76.7 C67.3,76.8 67.2,76.9 67,77 Z" fill="#204A69"/><path id="Path" d="M74.9,73.2 C75.2,72.8 75.6,72.6 75.9,72.4 C76.3,72.2 76.7,72.1 77,72.1 C77.8,72 78.6,72 79.4,72.5 C79.6,72.6 79.6,72.8 79.5,73 C79.4,73.1 79.3,73.2 79.1,73.1 C78.8,73 78.5,73 78.2,73 C77.9,73 77.5,73 77.2,73.1 C76.9,73.2 76.5,73.2 76.2,73.3 C75.9,73.4 75.6,73.5 75.4,73.6 L75.3,73.7 C75.1,73.8 74.9,73.7 74.9,73.6 L74.9,73.2 L74.9,73.2 Z" fill="#204A69"/><path d="M79.9,63.7 C71.9,49.7 45.2,60.8 51.9,78" fill="#6F93AD"/><path d="M63.2,96 C63.4,96.8 63.5,97.6 63.6,98.5 C63.6,99.3 63.7,100.1 63.7,101 L63.7,100.8 C63.9,101.2 64.1,101.7 64.3,102.2 C64.5,102.6 64.8,103.1 65.1,103.4 C65.4,103.8 65.8,104.1 66.2,104.4 C66.6,104.7 67,105 67.5,105.2 C67.6,105.3 67.6,105.4 67.6,105.5 C67.6,105.6 67.5,105.6 67.4,105.6 C66.8,105.5 66.3,105.4 65.8,105.1 C65.3,104.8 64.8,104.5 64.4,104 C64,103.6 63.7,103.1 63.4,102.6 C63.1,102.1 62.9,101.6 62.7,101 L62.7,100.8 C62.7,100 62.7,99.2 62.8,98.3 C62.9,97.5 63,96.7 63.2,95.8 C63,96 63.1,95.9 63.2,96 L63.2,96 Z" fill="#204A69"/><path d="M66.8,17.5 C66.5,17.1 66.2,17 65.9,16.9 L65.1,16.6 L59.1,14.5 L57.6,14 C57.1,13.9 56.6,13.7 56.2,13.5 C55.4,13.1 54.7,12.3 54.4,11.5 L52.3,5.5 L51.2,2.5 C51.1,2.2 51,1.9 50.8,1.6 C50.7,1.4 50.6,1.2 50.3,1.1 C50,0.9 49.6,1 49.4,1.2 C49,1.5 48.9,1.8 48.8,2.1 L48.5,2.9 L46.4,8.9 L45.9,10.4 C45.8,10.9 45.6,11.4 45.4,11.8 C44.9,12.6 44.1,13.4 43.3,13.7 L37.3,15.9 L34.3,17 C34.1,17.1 33.8,17.2 33.5,17.4 C33.4,17.5 33.2,17.7 33.1,17.9 C33,18.2 33.1,18.5 33.2,18.7 C33.5,19.1 33.8,19.2 34.1,19.3 L34.9,19.6 L41,21.6 C42,21.9 43.1,22.2 44,22.6 C44.9,23.1 45.7,23.8 46.1,24.8 L47.8,30.8 L48.8,33.8 C48.9,34 49,34.3 49.2,34.6 C49.3,34.7 49.4,34.9 49.6,35 C49.8,35.1 50.1,35 50.3,34.9 C50.6,34.7 50.7,34.4 50.8,34.1 L51.1,33.3 L53.3,27.3 L53.8,25.8 C54,25.3 54.2,24.8 54.4,24.4 C54.9,23.5 55.7,22.8 56.5,22.5 L62.5,20.4 L65.5,19.3 C65.8,19.2 66.1,19.1 66.4,18.9 C66.6,18.8 66.8,18.7 66.9,18.4 C67.1,18.1 67,17.7 66.8,17.5 Z" fill="#E1E2E2"/><path d="M162.4,79.1 C162.3,78.8 162.1,78.8 162,78.7 C161.7,78.6 161.6,78.6 161.4,78.5 L159.3,77.7 C158.9,77.6 158.7,77.5 158.5,77.3 C158.3,77.1 158.1,76.8 158,76.6 L157.3,74.5 L157.1,74 C157,73.8 157,73.6 156.7,73.3 C156.6,73.2 156.5,73.2 156.3,73.1 C156.2,73.1 155.9,73.1 155.8,73.2 C155.5,73.3 155.5,73.5 155.4,73.6 C155.3,73.9 155.3,74 155.2,74.2 L154.5,76.3 C154.4,76.7 154.3,76.9 154.1,77.1 C153.9,77.3 153.6,77.5 153.4,77.6 L151.3,78.4 L150.8,78.6 C150.7,78.6 150.5,78.7 150.2,78.9 C150.1,79 150,79.1 150,79.2 C149.9,79.3 149.9,79.5 150,79.6 C150.1,79.8 150.3,79.8 150.4,79.9 C150.7,80 150.8,80 151,80.1 L153.1,80.7 C153.4,80.8 153.7,80.9 154,81.1 C154.3,81.3 154.5,81.6 154.7,81.9 L155.3,84.2 L155.5,84.7 C155.6,84.8 155.6,85.1 155.8,85.3 C155.9,85.4 156,85.5 156.1,85.5 C156.2,85.6 156.4,85.6 156.5,85.5 C156.7,85.3 156.7,85.2 156.8,85.1 C156.9,84.8 156.9,84.7 157,84.5 L157.8,82.4 C157.9,82 158,81.8 158.2,81.6 C158.4,81.4 158.7,81.2 158.9,81.1 L161,80.4 L161.5,80.2 C161.7,80.2 161.9,80.2 162.2,79.9 C162.3,79.9 162.3,79.8 162.4,79.6 C162.5,79.5 162.5,79.2 162.4,79.1 Z" fill="#E1E2E2"/><path d="M132.9,90.8 C132.8,90.5 132.5,90.4 132.2,90.5 L130,91.6 L127.8,90.5 C127.6,90.4 127.5,90.4 127.3,90.5 C127.1,90.6 127,90.9 127.1,91.2 L128.2,93.5 C127.8,94.3 127.5,95.1 127.2,95.9 L127.2,96 C127.1,96.1 127.1,96.2 127.2,96.3 C127.3,96.4 127.5,96.5 127.7,96.4 C128.5,96 129.2,95.5 130,95 L130,95 C130.9,95.5 131.6,96 132.4,96.5 L132.7,96.5 C132.9,96.4 133,96.2 132.9,96 C132.5,95.2 132.2,94.4 131.9,93.6 C132.3,92.8 132.6,92 133,91.3 C133,91.1 133,91 132.9,90.8 Z" fill="#E1E2E2"/><path d="M136.1,35.6 C136,35.3 135.7,35.2 135.4,35.3 L133.2,36.4 L131,35.3 C130.8,35.2 130.7,35.2 130.5,35.3 C130.3,35.4 130.2,35.7 130.3,36 L131.4,38.3 C131,39.1 130.7,39.9 130.4,40.7 L130.4,40.8 C130.3,40.9 130.3,41 130.4,41.1 C130.5,41.2 130.7,41.3 130.9,41.2 C131.7,40.8 132.4,40.3 133.2,39.8 C134.1,40.3 134.8,40.7 135.6,41.3 L135.9,41.3 C136.1,41.2 136.2,41 136.1,40.8 C135.7,40 135.4,39.2 135.1,38.4 C135.5,37.6 135.8,36.8 136.2,36.1 C136.2,35.9 136.2,35.8 136.1,35.6 Z" fill="#E1E2E2"/><path d="M78.2,27.2 L78.8,25.9 C78.9,25.8 79,25.6 78.9,25.3 C78.9,25.1 78.7,24.9 78.5,24.8 C78.3,24.7 78.1,24.7 78,24.7 C77.6,24.8 77.4,24.9 77.2,25 L74.7,26.2 C74.3,26.4 73.9,26.7 73.6,26.7 C73.3,26.8 72.9,26.7 72.6,26.6 L70.1,25.4 L68.8,24.8 C68.6,24.7 68.5,24.6 68.1,24.7 C67.9,24.7 67.7,24.9 67.6,25.1 C67.5,25.3 67.5,25.5 67.5,25.6 C67.6,26 67.7,26.2 67.8,26.4 L69,28.9 C69.2,29.3 69.5,29.7 69.5,30 C69.6,30.4 69.5,30.8 69.4,31.1 L68.2,33.6 L67.6,34.9 C67.5,35.1 67.4,35.2 67.5,35.5 C67.5,35.6 67.6,35.8 67.8,35.9 L68.2,35.9 C68.6,35.8 68.8,35.7 69,35.6 L71.5,34.3 C71.9,34.1 72.3,33.8 72.7,33.7 C73.1,33.6 73.6,33.6 74,33.7 L74,33.7 L76.6,35.3 L77.9,35.9 C78,36 78.1,36 78.4,36 C78.6,36 78.7,35.9 78.8,35.7 L78.8,35.3 C78.7,34.9 78.6,34.7 78.5,34.5 L77.4,32 C77.2,31.5 76.9,31.1 76.9,30.8 C76.8,30.4 76.9,30 77,29.7 L78.2,27.2 Z" fill="#E1E2E2"/><path d="M114.4,48.1 C114.3,47.8 114.1,47.8 114,47.7 C113.7,47.6 113.6,47.6 113.4,47.5 L111.3,46.7 C110.9,46.6 110.7,46.5 110.5,46.3 C110.3,46.1 110.1,45.8 110,45.6 L109.3,43.5 L109.1,43 C109,42.8 109,42.6 108.7,42.3 C108.6,42.2 108.5,42.2 108.3,42.1 C108.2,42.1 107.9,42.1 107.8,42.2 C107.5,42.3 107.5,42.5 107.4,42.6 C107.3,42.9 107.3,43 107.2,43.2 L106.5,45.3 C106.4,45.7 106.3,45.9 106.1,46.1 C105.9,46.3 105.6,46.5 105.4,46.6 L103.3,47.4 L102.8,47.6 C102.7,47.6 102.5,47.7 102.2,47.9 C102.1,48 102,48.1 102,48.2 C101.9,48.3 101.9,48.5 102,48.6 C102.1,48.8 102.3,48.8 102.4,48.9 C102.7,49 102.8,49 103,49.1 L105.1,49.7 C105.4,49.8 105.7,49.9 106,50.1 C106.3,50.3 106.5,50.6 106.7,50.9 L107.3,53.2 L107.5,53.7 C107.6,53.8 107.6,54.1 107.8,54.3 C107.9,54.4 108,54.5 108.1,54.5 C108.2,54.6 108.4,54.6 108.5,54.5 C108.7,54.3 108.7,54.2 108.8,54.1 C108.9,53.8 108.9,53.7 109,53.5 L109.8,51.4 C109.9,51 110,50.8 110.2,50.6 C110.4,50.4 110.7,50.2 110.9,50.1 L113,49.4 L113.5,49.2 C113.7,49.2 113.9,49.2 114.2,48.9 C114.3,48.9 114.3,48.8 114.4,48.6 C114.5,48.5 114.5,48.2 114.4,48.1 Z" fill="#E1E2E2"/><path d="M34.4,73.1 C34.3,72.8 34.1,72.8 34,72.7 C33.7,72.6 33.6,72.6 33.4,72.5 L31.3,71.7 C30.9,71.6 30.7,71.5 30.5,71.3 C30.3,71.1 30.1,70.8 30,70.6 L29.3,68.5 L29.1,68 C29,67.8 29,67.6 28.7,67.3 C28.6,67.2 28.5,67.2 28.3,67.1 C28.2,67.1 27.9,67.1 27.8,67.2 C27.5,67.3 27.5,67.5 27.4,67.6 C27.3,67.9 27.3,68 27.2,68.2 L26.5,70.3 C26.4,70.7 26.3,70.9 26.1,71.1 C25.9,71.3 25.6,71.5 25.4,71.6 L23.3,72.4 L22.8,72.6 C22.7,72.6 22.5,72.7 22.2,72.9 C22.1,73 22,73.1 22,73.2 C21.9,73.3 21.9,73.5 22,73.6 C22.1,73.8 22.3,73.8 22.4,73.9 C22.7,74 22.8,74 23,74.1 L25.1,74.7 C25.4,74.8 25.7,74.9 26,75.1 C26.3,75.3 26.5,75.6 26.7,75.9 L27.3,78.2 L27.5,78.7 C27.6,78.8 27.6,79.1 27.8,79.3 C27.9,79.4 28,79.5 28.1,79.5 C28.2,79.6 28.4,79.6 28.5,79.5 C28.7,79.3 28.7,79.2 28.8,79.1 C28.9,78.8 28.9,78.7 29,78.5 L29.8,76.4 C29.9,76 30,75.8 30.2,75.6 C30.4,75.4 30.7,75.2 30.9,75.1 L33,74.4 L33.5,74.2 C33.7,74.2 33.9,74.2 34.2,73.9 C34.3,73.9 34.3,73.8 34.4,73.6 C34.5,73.5 34.5,73.2 34.4,73.1 Z" fill="#E1E2E2"/><path d="M86.7,61.1 L86.7,61.1 C86.6,61 86.6,60.9 86.5,60.9 C86,60.7 85.5,60.4 85,60.2 C84.5,60 84,59.8 83.4,59.8 L82.6,59.7 C82.4,59.7 82.1,59.8 81.8,59.8 C81.6,59.8 81.3,59.9 81,59.9 L80.2,60.1 C78,60.7 76.1,61.7 74.3,62.9 C72.5,64.1 70.8,65.4 69.2,66.8 C67.6,68.2 66.1,69.7 64.7,71.3 L64.6,71.4 L59.7,73.9 C56.7,75.4 53.8,76.9 50.9,78.5 C50.8,78.6 50.7,78.7 50.8,78.9 C50.8,79.1 51,79.2 51.2,79.1 C54.2,77.7 57.1,76.3 60.1,74.8 L69,70.4 L77.8,66 C80.6,64.5 83.5,63.1 86.2,61.5 L86.3,61.5 C86.4,61.5 86.7,61.4 86.7,61.3 C86.7,61.3 86.7,61.2 86.7,61.1 L86.7,61.1 Z" fill="#BBC9D5"/><path d="M154.3,112.4 L111.8,112.4 C109.2,112.4 107,114.3 106.7,116.9 L102.3,148.4 L80.3,148.4 C78.5,148.4 77.1,149.8 77.1,151.6 L77.1,152.2 L101.8,152.2 L122.3,152.2 L154.7,152.2 L159.4,118.3 C159.8,115.2 157.4,112.4 154.3,112.4 Z" fill="#BBC9D5"/><path d="M198.3,152.8 C181.8,153.2 165.3,153.3 148.8,153.5 L99.3,153.6 C66.3,153.5 33.3,153.6 0.3,153 C0.1,153 1.42108547e-14,152.8 1.42108547e-14,152.7 C1.42108547e-14,152.5 0.1,152.4 0.3,152.4 C33.3,151.8 66.3,151.9 99.3,151.8 L148.8,151.9 C165.3,152 181.8,152.1 198.3,152.6 C198.4,152.6 198.5,152.7 198.5,152.8 C198.4,152.7 198.3,152.8 198.3,152.8 L198.3,152.8 Z" fill="#969CA1"/></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/people-around-page.svg b/plugins/jetpack/images/people-around-page.svg
deleted file mode 100644
index d2efb340..00000000
--- a/plugins/jetpack/images/people-around-page.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg id="Layer_3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1562 968.3" enable-background="new 0 0 1562 968.3"><style>.st0{fill:#fff}.st1{fill:#e8eef3}.st2{fill:#CCCED0}.st3{fill:#BBC9D5}.st4{fill:#def2fa}.st5{fill:#204A69}.st6{fill:#00be28}.st7{fill:#E1E2E2}.st8{filter:url(#Adobe_OpacityMaskFilter)}.st9{mask:url(#mask-2_1_)}.st10{fill:#204A69}.st11{fill:#6F93AD}.st12{fill:#204A69}</style><path class="st0" d="M1117.5 416.8l22.4-86.8-2.3-97.6L358 265l.5 559.1 214.6 3.2z" id="Fill-1"/><path class="st0" d="M1382.5 803.1c0-3.1 9.2-63.4 9.2-63.4l-47.3-26.7-9.2 81.7 13.8 6.7 33.5 1.7z" id="Fill-2"/><path class="st0" d="M1186.3 461.7s61.8 24.5 48.9 36.2c-17.3 15.7-1.8 32.3 7 37.2 9 5 7.1 20.1-5.5 37.5-19.3 26.7-34.4 29.6-44.3 23.1-9.9-6.5-25.1-23-23.6-34.5s15.9-7.2 23.3-22.1c6.1-12.4-.9-4.4-13.1-8-10.4-3-13.9-45-12-52.6 1.7-7.5 9.3-16.8 19.3-16.8" id="Fill-4"/><path class="st0" d="M210.8 817.6L146 906.1l53 54.9 38.1-61.7z" id="Fill-6"/><path class="st0" d="M251.8 367.2c-18.4-5.8-46.2 74.5-35.4 85.3 10.8 10.8 18.5 44.9 24.4 50.9 6 6 .8 25.7 7.6 25.7 6.9 0 22.1-26 23.7-36.6 1.5-10.7 9-26 7.9-36.6-1-10.7 9.5-31.6 9.5-47.1s4.2-26.9-8.9-36.9c-13-10-24-3.2-28.8-4.7" id="Fill-8"/><path class="st1" d="M58.7 232.1c12.4-.4 24.9-.9 37.3-1.1 12.4-.3 24.9-.6 37.3-.7L131 232c3.8-11.6 8.9-22.7 15.7-33.1 7-10.1 15.6-20 28-25.2 25.3-10.8 56.7 5.6 62.5 31.2.6 3.2.8 6.7 0 10.1-.8 3.4-2.8 7.1-6.2 9.2-3.3 2.2-7.3 2.8-10.7 2.8-3.4-.1-7.8-.8-10.8-4.3-2.9-3.5-2.7-8-1.5-11.3 1.1-3.4 3.1-6.2 5.4-8.7 4.6-4.9 10.5-8.3 16.8-10.4 6.3-2 13-2.7 19.6-2 6.6.4 13.4 2.7 18.6 7.1 5.3 4.4 8.3 10.6 9.8 16.7s1.8 12.5.9 18.7l-2.5-2.8c27.1.2 54.1.7 81.2 1.3.6 0 1.1.5 1.1 1.1 0 .6-.5 1.1-1.1 1.1-27.1.6-54.1 1.1-81.2 1.3-1.4 0-2.5-1-2.6-2.4v-.4c1.1-10.9-1-23.6-9.5-30.5-4.2-3.4-9.7-5.3-15.4-5.6-5.8-.6-11.6 0-17.1 1.8-5.4 1.8-10.4 4.8-14.1 8.8-1.8 2-3.3 4.3-4 6.6-.8 2.3-.6 4.5.5 5.7 2 2.5 9.7 2.6 12.9.2 3.7-2.4 4.6-8 3.4-13.1-2.2-10.5-10.4-20-20.5-25.1-5.1-2.7-10.8-4.1-16.5-4.7-5.7-.1-11.5.2-16.6 2.7-10.7 4.3-18.9 13.4-25.6 22.9-6.7 9.6-11.9 20.4-15.8 31.4v.1c-.4 1-1.3 1.6-2.3 1.6-12.4-.1-24.9-.4-37.3-.7-12.4-.2-24.9-.8-37.3-1.1-.3 0-.6-.3-.6-.6 0 0 .2-.3.5-.3" id="Fill-10"/><path class="st2" d="M704.2 904.7c15.5-9.9 31.3-19.3 47.5-28.1 8-4.5 16.2-8.8 24.4-12.9s16.3-8.5 24.7-12.5c16.7-7.8 33.1-16.1 50.1-23.3 16.9-7.5 33.7-15 50.9-21.6l25.7-10.2c8.5-3.5 17.3-6.3 26-9.5 17.4-6.1 34.6-12.8 52.3-18.1 17.6-5.5 35.1-11.3 52.8-16.7l53.3-14.8 13.3-3.7 13.5-3.2 26.9-6.4c18-4.2 35.9-8.7 54.1-11.9l54.4-10.5c18.2-3.2 36.5-5.7 54.7-8.4 36.5-6 73.3-8.6 110-12.4 9.2-1 18.4-1.9 27.6-2.2l27.7-1.4 55.3-2.5c.6 0 1.2.4 1.2 1.1 0 .6-.4 1.1-1.1 1.2h-.1l-55.2 3.8c-18.4 1.4-36.8 1.8-55.1 4.2-36.6 4.2-73.3 7.3-109.6 13.7-18.2 3-36.4 5.3-54.6 8.5l-54.2 10.5c-18.1 3.2-36 7.7-53.9 11.9l-26.9 6.4-13.4 3.2-13.3 3.7-53.2 14.8c-17.6 5.3-35.1 11.1-52.6 16.6-17.6 5.3-34.8 12-52.1 18-8.6 3.2-17.4 6-25.9 9.5l-25.6 10.1c-8.5 3.5-17.2 6.5-25.6 10.1l-25.4 10.7c-17 6.9-33.6 14.9-50.4 22.4-8.4 3.8-16.5 8-24.8 12s-16.5 8.1-24.6 12.4c-16.4 8.3-32.5 17.1-48.3 26.4-.3.2-.6.1-.8-.2-.1-.2 0-.6.3-.7" id="Fill-12"/><path class="st0" d="M705.9 822.5c49.1 18.6 78.7 32.4 78.7 32.4" id="Fill-14"/><path class="st2" d="M706.6 822.5c7.5 1.3 14.6 3.6 21.5 6.2 7 2.6 13.9 5.3 20.7 8.3 13.5 6.2 27.2 12.1 39.8 20.3.6.4.7 1.1.3 1.7-.3.4-.9.6-1.4.5-14.2-4.6-27.6-10.8-41.4-16.3-6.8-2.9-13.6-5.9-20.3-9-6.7-3.1-13.4-6.4-19.7-10.6-.3-.2-.4-.6-.2-.8.2-.3.4-.4.7-.3" id="Fill-16"/><path class="st2" d="M-1.7 756.6c27-12.3 55.6-20.9 84.6-27.3 29.1-6.1 58.6-10 88.3-11.9 59.3-3.4 119-.3 177.4 9.3.6.1 1.1.7 1 1.3-.1.6-.7 1.1-1.3 1-58.8-5.7-117.9-9.2-176.7-5.1-29.4 1.8-58.7 5.3-87.5 11.1-28.9 5.5-57.3 13.3-85.4 22.7-.3.1-.6-.1-.7-.4-.1-.2.1-.6.3-.7" id="Fill-18"/><path class="st0" d="M355.1 831.7l-.9-582.7" id="Fill-20"/><path class="st2" d="M355.7 831.7c-4.8-48.6-4.6-97.1-5-145.7l-1.1-145.7.5-145.7c.2-48.6-.3-97.1 4.4-145.7h2.9c4.8 48.6 4.6 97.1 5 145.7l1.1 145.7L363 686c-.2 48.6.3 97.1-4.4 145.7h-2.9z" id="Fill-22"/><path class="st0" d="M1140.8 276.7v545.8H465.3" id="Fill-24"/><path class="st2" d="M1140.6 276.7c1.5 45.7 2.3 91.4 3 137.1.8 45.7.8 91.4 1.2 137.1l.6 274.1v6.2h-6.2l-168.5.5-168.5-.4-168.5-.5c-56.2-.6-112.3-1-168.5-4.3v-2.9c56.2-3.3 112.3-3.8 168.5-4.3l168.5-.5 168.5-.4 168.5.5-6.2 6.2.6-274.1c.4-45.7.4-91.4 1.2-137.1.7-45.7 1.5-91.4 3-137.1h2.8z" id="Fill-26"/><path class="st3" d="M349.6 276.7V203c0-25.7 21.1-46.6 47.1-46.6h696.9c26 0 47.1 20.8 47.1 46.6v73.7H349.6z" id="Fill-28"/><path class="st4" d="M1177.8 276.7H308" id="Fill-30"/><path class="st5" d="M1177.8 280.5c-72.5 4.5-145 4.4-217.5 4.7l-217.4.8-217.5-.8c-72.5-.3-145-.2-217.5-4.7v-2.9c72.5-4.5 145-4.4 217.5-4.7l217.5-.8 217.5.8c72.5.3 145 .2 217.5 4.7v2.9z" id="Fill-32"/><path class="st6" d="M423.6 757.7h175.9v-407H423.6" id="Fill-34"/><path class="st2" d="M1043.4 415.5H747.5v-64.7h314.6v46c0 10.3-8.3 18.7-18.7 18.7" id="Fill-36"/><path class="st7" d="M710.5 415.5h-60.1v-41.7c0-10.2 8.2-18.4 18.4-18.4h41.7v60.1z" id="Fill-38"/><path class="st2" d="M1043.4 757.7H747.5v-111h314.6v92.6c0 10.2-8.4 18.4-18.7 18.4" id="Fill-40"/><path class="st7" d="M710.5 706.8h-60.1v-41.7c0-10.2 8.2-18.4 18.4-18.4h41.7v60.1z" id="Fill-42"/><path class="st2" d="M1043.4 595.9H747.5V457.1h314.6v120.4c0 10.1-8.4 18.4-18.7 18.4" id="Fill-44"/><path class="st6" d="M710.5 517.2h-60.1v-41.7c0-10.2 8.2-18.4 18.4-18.4h41.7v60.1z" id="Fill-46"/><path class="st0" d="M562.4 445.5c0 26.8-21.7 48.6-48.6 48.6s-48.6-21.7-48.6-48.6S487 397 513.9 397s48.5 21.7 48.5 48.5" id="Fill-48"/><g id="Group-52" transform="translate(.938 254.102)"><defs><filter id="Adobe_OpacityMaskFilter" filterUnits="userSpaceOnUse" x="1.7" y="697.9" width="1563.8" height="13.9"><feColorMatrix values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0"/></filter></defs><mask maskUnits="userSpaceOnUse" x="1.7" y="697.9" width="1563.8" height="13.9" id="mask-2_1_"><g class="st8"><path id="path-1_1_" class="st0" d="M1.7 697.9h1563.8v13.8H1.7z"/></g></mask><g id="Fill-50" class="st9"><path class="st1" d="M2.8 703.6c130-3.4 260.1-4.1 390.1-4.9l390.1-.8c260.1.7 520.1.3 780.2 4.5 1.3 0 2.3 1.1 2.3 2.5 0 1.3-1 2.4-2.3 2.4-260.1 4.2-520.1 3.7-780.2 4.5l-390.1-.8c-130-.8-260.1-1.6-390.1-4.9-.6 0-1.1-.6-1.1-1.2 0-.8.5-1.3 1.1-1.3"/></g></g><path class="st2" d="M1302.2 434l-5.6-19.5c-16.6 2.2-23.4-6.7-29.7-20.8-1.8-4-9.8-3.3-10.5-8-.8-6.1 8.7-10.2 8.4-22.5-.1-6.9 1.3-15.9 7.9-17.1 0 0 31.5 13.1 47.3 29.3 7.1 18.9 11.3 27.8 11.3 27.8l8.3 19.3-37.4 11.5z" id="Fill-53"/><path class="st2" d="M394.3 873.5c-2.4-11.3-4.9-22.6-8-33.6-1.5-5.5-3.2-10.9-5.2-16.3-1.9-5.2-4.3-10.7-7.4-14-1.3-1.5-1.3-3.5 0-4.7 1.2-1.1 3.1-1.2 4.3-.1 9.6 8.8 17 19.1 23.8 29.8 6.7 10.7 12.6 21.9 17.7 33.5 5 11.6 9.5 23.5 12.7 35.8 3.3 12.2 5.6 24.9 5.3 37.7 0 .6-.5 1.1-1.1 1.1-.6 0-1.1-.5-1.1-1.1-.7-12.4-3.7-24.6-7.3-36.4-3.7-11.8-8.2-23.4-13.5-34.7-5.2-11.2-11.1-22.2-17.7-32.6-6.6-10.3-12.1-22.1-9.9-16.6 2 5.6 3.7 11.2 5.2 16.9 3 11.3 5.5 22.7 7.7 34.1 2.1 11.5 4 22.9 5.6 34.5 1.6 11.5 2.9 23.1 3.8 34.7 0 .3-.2.6-.5.6s-.5-.2-.6-.5c-4.8-22.7-8.9-45.5-13.8-68.1z" id="Fill-55"/><path class="st2" d="M432.3 883.8c-.7-9.2-1.6-18.3-3.2-27.3-.8-4.5-1.8-8.9-3.2-13.1-1.4-4.2-3.3-8.3-5.8-10.7-1.4-1.3-1.4-3.3-.2-4.6 1.3-1.3 3.3-1.4 4.6-.3 8.6 6.9 15.4 15.3 21.3 24.2 5.8 8.9 10.6 18.3 14.4 28.2 3.7 9.8 6.6 20 8.3 30.3 1.6 10.3 2.1 20.9.5 31.3-.1.6-.7 1.1-1.3 1-.6-.1-1-.6-1-1.2.6-10.1-.7-20.3-2.8-30.2-2.1-9.9-5.2-19.7-9.1-29-7.7-18.7-24.1-45.3-22.6-40.7 1.5 4.6 2.4 9.3 3.2 14 1.6 9.3 2.4 18.6 2.9 28 .3 9.3.5 18.6.2 27.9-.3 9.3-.9 18.6-2 27.8 0 .3-.3.6-.7.5-.3 0-.5-.3-.5-.6-1-18.6-1.4-37.1-3-55.5z" id="Fill-57"/><g id="Group-62" transform="translate(84.24 173.787)"><path class="st0" d="M185.6 524.6c26.2 48.1 30.4 67.7 26.2 95.5-4.2 27.7-32.1 63.6-32.1 63.6" id="Fill-59"/><path class="st3" d="M179.7 685.3c-.3 0-.7-.1-1-.3-.7-.5-.8-1.5-.3-2.2.3-.4 27.7-35.9 31.8-62.9 3.9-25.7 1.2-44.5-26-94.5-.4-.8-.1-1.7.6-2.1.8-.4 1.7-.1 2.1.6 25.2 46.3 30.9 67 26.4 96.4-4.2 27.8-31.3 62.9-32.4 64.4-.3.4-.7.6-1.2.6z" id="Stroke-61"/></g><path class="st3" d="M196.6 503.4c-7.3 40.5-8.9 117-8.9 117l78.7 3.2s15.1-88 6.7-104" id="Fill-63"/><g id="Group-68" transform="translate(81.285 96.027)"><path class="st0" d="M198.8 359.7c6.3 55.5-17.9 74.7-26.1 63.7" id="Fill-65"/><path class="st3" d="M178.4 428c-2.7 0-5.2-1.2-7-3.6-.5-.7-.4-1.7.3-2.2.7-.5 1.7-.4 2.2.3 1.7 2.3 4.2 2.9 7.1 1.8 9-3.6 20.8-23.7 16.2-64.4-.1-.9.5-1.6 1.4-1.7.9-.1 1.6.5 1.7 1.4 2.7 23.3 0 60.5-18.1 67.6-1.2.5-2.5.8-3.8.8z" id="Stroke-67"/></g><path class="st0" d="M284.5 379.1c6 3.9 10.2 9.6 11.1 16.9 1.7 13 12.4 16 12.5 22.5.1 5.1-8.6 5.6-9.9 10.1-4.4 15.8-16.7 27.3-34.7 27.5" id="Fill-69"/><path class="st10" d="M263.5 457.6c-.9 0-1.6-.7-1.6-1.5 0-.9.7-1.6 1.5-1.6 10.8-.1 19.8-4.5 26.1-12.2-2.2-1.7-4.7-4.2-6.1-7.7-.3-.8.1-1.7.9-2 .8-.3 1.7.1 2 .9 1.1 2.9 3.3 5 5.1 6.3 2.3-3.4 4-7.3 5.2-11.6.8-2.7 3.4-4.2 5.7-5.5 2.6-1.5 4.2-2.5 4.2-4.1 0-2.2-1.8-4.1-4-6.5-3.3-3.5-7.4-7.9-8.4-15.8-.8-6.5-4.4-11.9-10.4-15.8-.7-.5-.9-1.4-.5-2.2.5-.7 1.4-.9 2.2-.5 6.8 4.4 10.9 10.6 11.8 18 .9 6.9 4.5 10.7 7.6 14.1 2.5 2.7 4.8 5.2 4.9 8.6.1 3.6-3 5.4-5.8 6.9-1.9 1.1-3.8 2.1-4.2 3.6-1.3 4.7-3.2 8.8-5.6 12.5.4.2.7.3.7.3.8.3 1.2 1.3.8 2.1-.3.8-1.3 1.2-2.1.8-.1 0-.6-.2-1.3-.7-6.8 8.6-16.8 13.5-28.7 13.6z" id="Stroke-71"/><path class="st10" d="M212.8 480.9c21.8-9 66.4 74.2 66.4 74.2l45.2-74.7 25.2 10.3s-23.2 105.1-67.4 109.5c-44.3 4.4-79.7-62.6-79.7-62.6s-17.8-45 10.3-56.7m78.6-65.4c-1.1 0-1.9-1.2-1.9-2.6l.1-4.2c0-1.4.9-2.5 2-2.4 1.1 0 1.9 1.2 1.9 2.6l-.1 4.2c-.1 1.4-1 2.4-2 2.4" id="Fill-73"/><path class="st0" d="M192.2 619.4c-20.5 50.8 3.3 341.5 3.3 341.5h59.2s29.6-279.2 9-338.2" id="Fill-75"/><path class="st3" d="M254.7 962.4h-59.2c-.8 0-1.5-.6-1.6-1.4-1-11.9-23.6-291.6-3.2-342.2.3-.8 1.2-1.2 2-.9.8.3 1.2 1.2.9 2-19.4 48 1.5 317.1 3.3 339.3h56.3c2.2-21.5 28.4-280.3 9-336.1-.3-.8.1-1.7 1-2 .8-.3 1.7.1 2 1 20.4 58.6-7.7 327.4-8.9 338.9-.1.8-.8 1.4-1.6 1.4zm17.2-494.5h-.1c-4.4-.3-7.5-1.7-9.4-4.3-3.9-5.3-1.8-14.3.6-24.7.4-1.9.9-3.8 1.3-5.7.6-2.6 1.1-5.8 1.6-9.5 2.4-15.3 5.6-36.3 18-46.4.7-.5 1.7-.5 2.2.2.6.7.5 1.7-.2 2.2-11.4 9.4-14.5 29.7-16.9 44.5-.6 3.8-1.1 7-1.7 9.7-.4 1.9-.9 3.9-1.3 5.8-2.2 9.2-4.2 18-1.1 22.1 1.3 1.8 3.7 2.8 7.1 3 .9.1 1.5.8 1.5 1.7-.1.8-.8 1.4-1.6 1.4z" id="Stroke-77"/><path class="st0" d="M205 455.5c-15.1-32.9 1.4-87.8 36.6-94.9 11.6-2.3 26 3.3 32.7 5.6" id="Fill-79"/><path class="st3" d="M192.3 958.2c-.4 0-.8-.2-1.2-.5l-46.3-50.5c-.5-.6-.6-1.4-.1-2l37.5-51.3c.5-.7 1.5-.9 2.2-.3.7.5.8 1.5.3 2.2L148.1 906l45.4 49.5c.6.6.5 1.6-.1 2.2-.3.3-.7.5-1.1.5zM205 457c-.6 0-1.2-.3-1.4-.9-8.8-19.2-7.4-46.6 3.6-68.1 8.1-15.9 20.2-26.2 34.1-29 11.1-2.2 24.6 2.5 31.8 5l1.7.6c.8.3 1.3 1.2 1 2-.3.8-1.2 1.2-2 1l-1.8-.6c-6.9-2.4-19.8-7-30.1-4.9-13 2.6-24.3 12.3-32 27.3-10.5 20.7-12 47-3.5 65.4.4.8 0 1.7-.8 2.1-.1.1-.4.1-.6.1z" id="Stroke-81"/><path class="st0" d="M322 487.2c1.2-17 8.4-66.7 16.1-63.5 7.7 3.2 1.5 27.5 3.8 35.6 2.3 8.1 5.8 19.4-.8 34" id="Fill-83"/><path class="st10" d="M341.2 494.8c-.2 0-.4 0-.6-.1-.8-.4-1.1-1.3-.8-2.1 6.1-13.7 3.1-24.5.8-32.4l-.2-.5c-.9-3.3-.6-8.7-.3-14.4.5-8.3 1.1-18.6-2.7-20.2-.1 0-.2-.1-.4.1-5.5 3.4-12.1 42.3-13.6 62.1-.1.9-.8 1.5-1.7 1.4-.9-.1-1.5-.8-1.4-1.7.6-7.6 6.3-59.2 15-64.5 1.1-.6 2.2-.7 3.2-.3 5.8 2.5 5.2 13 4.6 23.2-.3 5.5-.6 10.6.2 13.4l.2.5c2.4 8.3 5.6 19.7-1 34.5-.1.7-.7 1-1.3 1zm9.4-26.9c-.2 0-.4 0-.6-.1-.8-.3-1.2-1.2-.9-2 .8-1.9 1.6-4.1 2.2-6-.1.2-.2.5-.3.7-.3.8-1.2 1.2-2 1-.8-.3-1.2-1.2-1-2 2.9-8.3 4.6-8.4 5.3-8.5.8-.1 1.5.3 2 1.1 1.4 2.4-1.5 10.4-3.3 14.9-.2.6-.8.9-1.4.9z" id="Stroke-85"/><path class="st0" d="M236 429.1c0 16 6.6 29.5 14.1 32.7" id="Fill-87"/><path class="st3" d="M220.1 689.9c-.5 0-1.1-.3-1.4-.8l-18.5-32.4c-.4-.7-.2-1.7.6-2.1.7-.4 1.7-.2 2.1.6l18.5 32.4c.4.7.2 1.7-.6 2.1-.2.1-.5.2-.7.2zm30-226.5c-.2 0-.4 0-.6-.1-8.6-3.7-15-18.4-15-34.2 0-.9.7-1.6 1.6-1.6s1.6.7 1.6 1.6c0 16.1 6.7 28.5 13.1 31.3.8.3 1.2 1.3.8 2.1-.3.6-.9.9-1.5.9z" id="Stroke-89"/><g id="Group-94" transform="translate(67.984 86.624)"><path class="st0" d="M147.3 339.2c-10.3 38.3-3.5 91.8 36.5 85.5" id="Fill-91"/><path class="st3" d="M177.5 426.7c-9.2 0-16.9-3.4-22.9-10.1-15.8-17.6-15.6-52.7-8.8-77.9.2-.8 1.1-1.3 1.9-1.1.8.2 1.3 1.1 1.1 1.9-6.8 25.2-6.2 59 8.1 75 6.6 7.4 15.6 10.3 26.6 8.6.9-.1 1.7.4 1.8 1.3.1.9-.4 1.7-1.3 1.8-2.2.3-4.4.5-6.5.5z" id="Stroke-93"/></g><path class="st0" d="M1187.2 596.7l5.1 53.8s29.8 76 5 47c32.7 38.2 72-9.3 72.9-53.7 1-49-16.1-82.4-35.7-92-10.8-5.3-26.5-.5-34.5 7.8-9.4 9.8-13.8 23.5-12.8 37.1" id="Fill-95"/><path class="st11" d="M1223.1 713c-6.9 0-14.9-2.5-23.1-10.5-1.1-1-2.4-2.4-3.7-4v-.1c-.6-.7-.5-1.6.2-2.2.7-.6 1.6-.5 2.2.2 1.3 1.5 2.5 2.8 3.8 4.1 2.2 2 3 2 3 2 2.4-2.6-5.7-28.8-14.6-51.5-.1-.1-.1-.3-.1-.4l-5.2-53.8c-1-14.5 3.8-28.4 13.3-38.3 8.2-8.5 24.7-13.8 36.3-8.1 19 9.2 37.6 41.7 36.6 93.4-.6 29.7-18 60-38.7 67.4-2.9 1.1-6.3 1.8-10 1.8zm-15.6-8.3c7.8 5.4 16.1 6.6 24.6 3.6 19.6-7 36.1-36 36.6-64.5 1-50.3-16.8-81.8-34.9-90.6-10.4-5.1-25.3-.2-32.7 7.4-8.9 9.2-13.4 22.3-12.4 35.9l5.1 53.6c16.1 40.9 15.9 51.9 13.7 54.6z" id="Stroke-97"/><path class="st3" d="M1174.7 578.9c-.3 0-.6-.1-.9-.3-5.5-3.9-7.7-12.2-6.6-17.5 1.7-8.2 9.9-11.6 18.5-12.7 1.5-4.5 10.5-27 33.9-23 .9.1 1.4 1 1.3 1.8-.1.9-1 1.4-1.8 1.3-19.6-3.3-27.8 13.7-30 19.6 4.3-.2 8.5 0 12 .5.9.1 1.4.9 1.3 1.8-.1.9-.9 1.4-1.8 1.3-9.5-1.4-28.1-1-30.4 10-.9 4.3 1.1 11.3 5.3 14.4.7.5.9 1.5.4 2.2-.2.4-.7.6-1.2.6zm64.5-18.5c-.5 0-.9-.2-1.2-.6-.5-.7-.4-1.7.3-2.2 4.1-3.1 6.9-8 7.3-13 .3-3-.3-5.6-1.6-7.1-10-11-26.3-.6-32.8 4.4-.7.5-1.7.4-2.2-.3-.5-.7-.4-1.7.3-2.2 15.2-11.6 28.7-13.1 37-4 1.9 2.1 2.8 5.5 2.5 9.5-.5 5.9-3.7 11.6-8.5 15.2-.4.2-.8.3-1.1.3z" id="Stroke-99"/><g id="Group-104" transform="translate(398.496 175.803)"><path class="st0" d="M884.5 595.2L848.7 783l59.3 7 56.4-222m35.5-37c-7.3 48.9 75.5 188.8 75.5 188.8l-38 56.3s-72.6-106.4-86.9-150.5" id="Fill-101"/><path class="st10" d="M907.9 791.6h-.2l-59.3-7c-.4 0-.8-.3-1.1-.6-.3-.3-.4-.8-.3-1.2l36-187.9c.2-.8 1-1.4 1.8-1.2.8.2 1.4 1 1.2 1.8l-35.5 186.1 56.2 6.7 56.1-220.7c.2-.8 1-1.4 1.9-1.1.8.2 1.3 1.1 1.1 1.9l-14.3 56.1c.2.2.3.4.4.6 13.1 40.2 75.6 133.7 85.4 148.2l36.1-53.5c-7.6-12.9-82.2-141.6-75.2-189 .1-.9.9-1.4 1.8-1.3.9.1 1.4.9 1.3 1.8-7.1 47.8 74.5 186.4 75.3 187.8.3.5.3 1.2-.1 1.7l-38 56.3c-.3.4-.8.7-1.3.7s-1-.3-1.3-.7c-.7-1-69-101.4-85.8-147.2l-40.8 160.6c0 .6-.6 1.1-1.4 1.1z" id="Stroke-103"/></g><path class="st11" d="M1325.5 448.9c-41.8 21.6-38.5 87.8-43.4 117.6-4.9 29.8-11.8 200.5-11.8 200.5l157.3-6.2s4.4-367-102.1-311.9" id="Fill-105"/><path class="st3" d="M1183.6 780.8l-27.8 157.6c-.8 4.6-4.5 8.2-9.2 8.9-8.1 1.2-19.8 4.6-19.8 14.7 0 2.5 20.5 3.5 36.2 3.8 10.4.2 19.7-6.6 22.8-16.7l47.4-154.1" id="Fill-107"/><path class="st3" d="M1220.3 796.6l85.9 132.3c2.6 3.9 2.2 9.1-.7 12.7-5.1 6.4-11.2 16.9-4.5 24.1 1.7 1.8 17.2-11.6 28.9-22.2 7.7-7 9.9-18.3 5.3-27.7L1266 772.5" id="Fill-109"/><path class="st10" d="M1270.3 403.2c-.4 0-.9-.2-1.2-.5-.6-.7-.5-1.6.2-2.2 0 0 3-2.7 4.1-8.4.2-.8 1-1.4 1.8-1.2.8.2 1.4 1 1.2 1.8-1.3 6.8-5 10-5.1 10.1-.3.3-.6.4-1 .4z" id="Stroke-113"/><path class="st0" d="M1191.9 648.7l-32.6 224.6 185-22-75.9-209.2z" id="Fill-115"/><path class="st11" d="M1159.3 874.9c-.4 0-.8-.2-1.1-.5-.3-.3-.5-.8-.4-1.3l32.7-224.7c.1-.7.7-1.3 1.4-1.3l76.5-6.6c.7 0 1.4.4 1.6 1l75.9 209.2c.2.4.1 1-.1 1.4-.3.4-.7.7-1.1.7l-185.1 22c-.2.1-.3.1-.3.1zm34-224.8l-32.2 221.4 181.1-21.5-74.8-206.2-74.1 6.3z" id="Stroke-117"/><path class="st3" d="M1215.6 564.4c-18.3 7-2.4 92.5-2.4 92.5l-16.8 75.6 6 1.4c13.3 3.1 26.6-4.9 30.4-18.2l14.5-51.8c-.1 0-.1-111.6-31.7-99.5" id="Fill-119"/><path class="st10" d="M1316.6 662.2c-.4 0-.8-.1-1.1-.4-.6-.6-.6-1.6 0-2.2.2-.2 23.5-24.6 36-44.2 23.8-37.3 21.5-54.2 14-110l-1.5-11c-.1-.9.5-1.6 1.3-1.8.8-.1 1.6.5 1.8 1.3l1.5 11c7.5 55.3 10 73.9-14.4 112.1-12.6 19.8-36.1 44.4-36.3 44.6-.5.4-.9.6-1.3.6zm-4.6-78.9c-.2 0-.5 0-.7-.1l-9.3-4.4c-.8-.4-1.1-1.3-.7-2.1.4-.8 1.3-1.1 2.1-.7l9.3 4.4c.8.4 1.1 1.3.7 2.1-.3.4-.9.8-1.4.8zm0-11.2c-.8 0-1.4-.6-1.5-1.4-.1-.9.5-1.6 1.3-1.8l18.5-2.4c.8-.1 1.6.5 1.8 1.3.1.9-.5 1.6-1.3 1.8l-18.5 2.4c-.2.1-.3.1-.3.1zm9.4-16.3c-.8 0-1.5-.7-1.6-1.5-.4-11.3 0-36.8 0-37.1 0-.9.7-1.5 1.6-1.5.9 0 1.6.7 1.5 1.6 0 .3-.4 25.7 0 36.9.1.8-.6 1.6-1.5 1.6z" id="Stroke-121"/><path class="st0" d="M1330.5 685.3c-.4 0-.9-.2-1.2-.6l-46.3-55.5c-.6-.7-.5-1.7.2-2.2.7-.6 1.6-.5 2.2.2l46.3 55.5c.6.7.5 1.7-.2 2.2-.3.3-.7.4-1 .4z" id="Stroke-123"/><path class="st10" d="M1284.2 629.8c-.2 0-.5-.1-.7-.2-.8-.4-1.1-1.3-.7-2.1l18.5-37c.4-.8 1.3-1.1 2.1-.7.8.4 1.1 1.3.7 2.1l-18.5 37c-.3.6-.8.9-1.4.9zm64.6-217.4c-.2 0-.5 0-.7-.2-.8-.4-1.1-1.3-.7-2.1.2-.4 18.4-39.4 3.1-64.4-7.2-11.8-22.7-16.3-34.8-16.6-11.7-.2-21.6 3.2-25.5 9.1-.5.7-1.5.9-2.2.4-.7-.5-.9-1.5-.4-2.2 4.5-6.8 15.3-10.8 28.2-10.5 12.9.3 29.6 5.2 37.4 18.1 16.2 26.5-2.1 65.7-2.9 67.4-.3.7-.9 1-1.5 1zm-23.6-9.2c-.2 0-.3 0-.5-.1-.8-.3-1.3-1.1-1-2 .1-.5 3.4-11.4-6.1-24.3-3.8-5.2-11.1-9.3-18.8-13.6-12.2-6.8-24.8-13.8-25.4-26.4 0-.9.6-1.6 1.5-1.6 1-.1 1.6.6 1.6 1.5.5 10.8 12.3 17.4 23.8 23.8 8 4.5 15.6 8.7 19.8 14.5 10.4 14.2 6.7 26.5 6.5 27.1-.2.6-.8 1.1-1.4 1.1zm-17.9-27.8h-.4l-52.5-13.1-1.1 7.2c-.1.9-1 1.4-1.8 1.3-.9-.1-1.4-.9-1.3-1.8l1.2-7.5c-.8-.2-1.3-1.1-1.1-1.9.2-.8.9-1.3 1.6-1.2l1.3-7.9c.1-.9 1-1.4 1.8-1.3.9.1 1.4.9 1.3 1.8l-1.3 8.2 52.7 13.2c.8.2 1.3 1.1 1.1 1.9-.1.7-.8 1.1-1.5 1.1z" id="Stroke-125"/><path class="st11" d="M1298.6 458.7c-.7 0-1.3-.4-1.5-1.1l-5.1-18.1c-.2-.8.2-1.7 1-1.9l60.1-18.9c.8-.3 1.7.2 2 1 .3.8-.2 1.7-1 2l-58.7 18.5 4.7 16.6c.2.8-.2 1.7-1.1 1.9h-.4z" id="Stroke-127"/><path class="st10" d="M1302.7 435.5c-.7 0-1.3-.4-1.5-1.1l-5.3-18.2c-16.3 1.6-23.7-7.2-30.3-21.8-.6-1.3-2.4-2-4.3-2.7-2.6-1-5.9-2.3-6.4-5.7-.4-3.2 1.4-5.9 3.4-8.7 2.5-3.5 5.2-7.5 5.1-14-.1-7 2.8-13.4 8.6-18.3.7-.6 1.6-.5 2.2.2.6.7.5 1.6-.2 2.2-5 4.4-7.6 9.9-7.5 15.9.1 7.5-3.1 12.1-5.7 15.9-1.7 2.5-3.1 4.5-2.8 6.5.2 1.5 1.8 2.2 4.4 3.2 2.3.9 5 1.9 6.1 4.4 6.3 14.1 13 21.9 28.3 19.9.8-.1 1.5.4 1.7 1.1l5.7 19.5c.2.8-.2 1.7-1.1 1.9-.1-.2-.3-.2-.4-.2z" id="Stroke-129"/><path class="st12" d="M1228.7 471h-9.3v-9.2c0-5.1 4.1-9.2 9.3-9.2 5.1 0 9.3 4.1 9.3 9.2-.1 5-4.2 9.2-9.3 9.2" id="Fill-131"/><g id="Group-136" transform="translate(367.46 98.443)"><path class="st0" d="M804.2 364.2c-7.6 3.3-10.1 8.2-11 15-1.6 12.1-11.4 14.8-11.5 20.9-.1 4.7 8 5.2 9.1 9.3 4.1 14.7 15.5 25.3 32 25.5" id="Fill-133"/><path class="st10" d="M822.9 436.4c-16.4-.2-29-10.2-33.6-26.6-.4-1.3-2-2.3-3.8-3.3-2.4-1.4-5.4-3.1-5.4-6.5 0-3.2 2.2-5.6 4.5-8.1 2.9-3.1 6.2-6.6 7-13 .7-5.8 2.7-12.3 11.9-16.2.8-.3 1.7 0 2.1.8.3.8 0 1.7-.8 2.1-7.3 3.1-9.3 7.7-10 13.7-1 7.4-4.8 11.5-7.8 14.8-2.1 2.2-3.7 4-3.7 6 0 1.5 1.4 2.4 3.8 3.7 2.1 1.2 4.6 2.6 5.3 5.1 4.2 15.1 15.6 24.2 30.6 24.3.9 0 1.6.7 1.5 1.6-.1.9-.8 1.6-1.6 1.6z" id="Stroke-135"/></g><path class="st10" d="M1163.9 521.1c-1 0-1.7-.8-1.7-1.7 0-1 .8-1.7 1.7-1.7 0 0 4.5 0 8.5-2 .9-.4 1.9-.1 2.3.8.4.9.1 1.9-.8 2.3-4.7 2.3-9.8 2.3-10 2.3z" id="Stroke-137"/><path class="st12" d="M1173.2 460zM1173.2 460l-4 2.1c-4.6 6.7-9.9 15.8-9.9 15.8l20.7 2.1 6.1 18.1c3.3 9.9 13.5 15.9 24 14.3l32.4-5c.1 0-17.4-64.6-69.3-47.4z"/><path class="st10" d="M1170.6 503.4c1 0 1.8-1.2 1.8-2.6l-.1-4.2c0-1.4-.9-2.5-1.9-2.4-1 0-1.8 1.2-1.8 2.6l.1 4.2c0 1.3.8 2.4 1.9 2.4" id="Fill-141"/><path class="st0" d="M446.8 214.3c0 6.4-5.2 11.6-11.6 11.6-6.4 0-11.6-5.2-11.6-11.6s5.2-11.6 11.6-11.6c6.4 0 11.6 5.2 11.6 11.6" id="Fill-143"/><g id="Fill-145"><path class="st7" d="M571.7 214.3c0 6.4-5.2 11.6-11.6 11.6-6.4 0-11.6-5.2-11.6-11.6s5.2-11.6 11.6-11.6c6.4 0 11.6 5.2 11.6 11.6m-64.8 0c0 6.4-5.2 11.6-11.6 11.6-6.4 0-11.6-5.2-11.6-11.6s5.2-11.6 11.6-11.6c6.4 0 11.6 5.2 11.6 11.6"/></g></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/plans/plan-business.svg b/plugins/jetpack/images/plans/plan-business.svg
deleted file mode 100644
index 9d6b8098..00000000
--- a/plugins/jetpack/images/plans/plan-business.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg id="plan-business" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1495.1 1495.1"><style>.st1{fill:#c879cc}.st3{fill:#204a69}</style><path d="M747.5 0C334.7 0 0 334.7 0 747.5S334.7 1495 747.5 1495 1495 1160.3 1495 747.5 1160.4 0 747.5 0zM556.8 450.2V715H292c0-145.2 119.5-264.8 264.8-264.8zm632 215.8c-.4 0-.8-.1-1.2-.1l-39.7 58.9v41.8c.7 0 1.3.6 1.3 1.3.9 45.2 2.3 90.4 2.8 135.6 0 2.2-1.7 4-4 4h-.1c-61.5 1.1-122.9 1.7-184.4 2.1l-99.8.5c1.2-2.2 2.5-4.4 3.6-6.6l-3.6 6.6-84.5.3c-3.8 0-6.9-3.1-6.9-6.9 0 3.8 3.1 6.9 6.9 6.9l84.5-.3c-45.7 80.2-132.1 134.8-230.3 134.8-145.3 0-264.8-119.6-264.8-264.8h264.8l-6-264.8c2 0 4-.1 6-.1 49 0 97 13.7 138.5 39.6 2.4 1.5 4.8 3 7.2 4.6-2.4-1.6-4.7-3.1-7.1-4.6l.2-100.7c0-3.8 3.1-6.9 6.9-7l184.4.7 184.4 1.4h.1c2.7 0 4.8 2.2 4.8 4.8l-.8 94.4-1.4 94.4c-.1 1.3-1.1 2.4-2.5 2.5h-.2v55.9l28.6-42.3c-1.3-2.2-2-4.7-2-7.3 0-7.9 6.4-14.3 14.3-14.3s14.3 6.4 14.3 14.3-6.4 14.4-14.3 14.4z" fill="#f4e4f7"/><path class="st1" d="M556.8 450.2C411.5 450.2 292 569.8 292 715h264.8V450.2z"/><path d="M1087.2 815.9c0 6.7-4.6 12.5-11.1 13.9-7.7 1.8-15.4-3.1-17.2-10.8l-76.4-58.6c-4 3.4-9.6 4.3-14.5 2.3l-56.7 83.4c1.5 2.3 2.4 5.1 2.4 7.9 0 7.9-6.4 14.4-14.3 14.4S885 862 885 854.1s6.4-14.4 14.3-14.4h.4l59.5-87.5c-.1-.4-.2-.9-.2-1.4-.9-7.9 4.8-15 12.7-15.8s15 4.8 15.8 12.7l75.4 57.8c4.3-4.2 10.8-5.2 16.2-2.5l68.7-101.8v-55.9c-1.4 0-2.5-1.1-2.6-2.5l-1.4-94.4-.8-89.4-179.5 1.4-177.4.6.3 103.4c-2.4-1.7-4.8-3.4-7.3-5 2.4 1.6 4.8 3.3 7.2 5l.3 114.4-.6 217.8 84.6.3c-1.1 2.2-2.2 4.4-3.4 6.6 1.1-2.2 2.3-4.3 3.4-6.5l92.8.4c60.1.4 120.2.9 180.4 2 .5-43.8 1.8-87.6 2.7-131.5 0-.7.6-1.3 1.3-1.3v-41.8l-60.7 89.9c.1.3.1.8.1 1.2zm-3.1-142.2c-.1 1.2-1.1 2.2-2.4 2.4-39.5 4.5-79 4-118.4 4.8-19.7.1-39.5-.3-59.2-.8s-39.5-1.9-59.2-5.3c-.7-.1-1.2-.8-1.1-1.6.1-.6.5-1 1.1-1.1 19.7-3.5 39.5-4.7 59.2-5.3s39.5-.9 59.2-.8c39.5.8 79 .3 118.4 4.8 1.5.1 2.6 1.4 2.4 2.9zM843.9 535.9c.1-.5.5-.9 1-1 16.5-3.5 33.1-4.7 49.6-5.3s33.1-.9 49.6-.8c33.1.8 66.1.3 99.2 4.8 1.5.2 2.5 1.5 2.3 3-.2 1.2-1.1 2.1-2.3 2.3-33.1 4.5-66.1 4-99.2 4.8-16.5.1-33.1-.3-49.6-.8s-33.1-1.9-49.6-5.3c-.7-.3-1.2-1-1-1.7zm-5.3 67c.1-.6.5-1 1.1-1.1 20.2-3.5 40.3-4.7 60.5-5.3s40.3-.9 60.5-.8c40.3.8 80.7.3 121 4.8 1.5.2 2.5 1.5 2.4 2.9-.1 1.2-1.1 2.2-2.4 2.4-40.3 4.5-80.7 4-121 4.8-20.2.1-40.3-.3-60.5-.8s-40.3-1.9-60.5-5.3c-.7-.2-1.2-.9-1.1-1.6zm17.5 142.2c-5.5-.6-11-1.8-16.4-5.3-.7-.5-.9-1.4-.5-2.2.1-.2.3-.3.5-.5 5.5-3.5 11-4.7 16.4-5.3 5.5-.6 10.9-.9 16.4-.8 5.5.2 11 .5 16.4 1 5.6.5 11.2 1.8 16.4 3.8 1.5.6 2.1 2.3 1.5 3.7-.3.7-.8 1.2-1.5 1.5-5.3 2.1-10.8 3.4-16.4 3.8-5.5.5-11 .9-16.4 1-5.4.2-10.9-.1-16.4-.7z" fill="#fff"/><path class="st1" d="M771.5 678.8l.3-124a262.09 262.09 0 0 0-138.5-39.6c-2 0-4 0-6 .1l6 264.8H368.5c0 145.3 119.5 264.8 264.8 264.8 98.2 0 184.5-54.6 230.3-134.8l-84.5.3c-3.8 0-6.9-3-6.9-6.9v-.1l-.7-224.6z"/><path class="st3" d="M1149.1 767.8c0-.7-.6-1.3-1.3-1.3-.7 0-1.3.6-1.3 1.3-.9 43.8-2.2 87.7-2.7 131.5-60.1-1.1-120.2-1.6-180.4-2l-92.8-.4c-1.1 2.2-2.2 4.4-3.4 6.5l-3.6 6.6 99.8-.5c61.5-.5 122.9-1 184.4-2.1h.1c2.2 0 4-1.8 4-4-.5-45.2-1.9-90.4-2.8-135.6zM779 559.4c2.5 1.6 4.9 3.3 7.3 5L786 461l177.4-.6L1143 459l.8 89.4 1.4 94.4c.1 1.4 1.2 2.4 2.6 2.5h.2c1.3-.1 2.4-1.1 2.5-2.5l1.4-94.4.8-94.4c0-2.7-2.2-4.8-4.8-4.8h-.1l-184.4-1.4-184.4-.7c-3.8 0-6.9 3.1-6.9 7l-.2 100.7c2.4 1.5 4.8 3.1 7.1 4.6z"/><path class="st3" d="M870.6 896.9l-84.6-.3.5-217.8-.3-114.4c-2.4-1.7-4.8-3.3-7.2-5-2.4-1.6-4.8-3.1-7.2-4.6l-.3 124 .6 224.7v.1c0 3.8 3.1 6.9 6.9 6.9l84.5-.3 3.6-6.6c1.3-2.3 2.4-4.5 3.5-6.7zM843.9 535.9c-.2.7.3 1.4 1 1.6 16.5 3.5 33.1 4.8 49.6 5.3s33.1.9 49.6.8c33.1-.8 66.1-.3 99.2-4.8 1.2-.2 2.1-1.1 2.3-2.3.2-1.5-.8-2.8-2.3-3-33.1-4.5-66.2-4-99.2-4.8-16.5-.1-33.1.2-49.6.8s-33.1 1.9-49.6 5.3c-.5.1-.9.5-1 1.1zM838.6 602.9c-.1.7.4 1.4 1.1 1.6 20.2 3.5 40.3 4.8 60.5 5.3s40.4.9 60.5.8c40.3-.8 80.7-.3 121-4.8 1.2-.1 2.2-1.1 2.4-2.4.2-1.5-.9-2.8-2.4-2.9-40.3-4.5-80.6-4-121-4.8-20.2-.1-40.3.2-60.5.8s-40.4 1.9-60.5 5.3c-.6.1-1 .5-1.1 1.1zM963.3 680.8c39.4-.8 79-.3 118.4-4.8 1.2-.1 2.2-1.1 2.4-2.4.2-1.5-.9-2.8-2.4-2.9-39.4-4.5-79-4-118.4-4.8-19.7-.1-39.5.2-59.2.8s-39.5 1.9-59.2 5.3c-.6.1-1 .5-1.1 1.1-.1.7.4 1.4 1.1 1.6 19.7 3.5 39.5 4.8 59.2 5.3s39.5 1 59.2.8zM839.7 739.8c5.5 3.5 11 4.7 16.4 5.3 5.5.6 10.9.9 16.4.8 5.4-.1 11-.5 16.4-1 5.6-.5 11.2-1.8 16.4-3.8.7-.3 1.2-.8 1.5-1.5.6-1.5-.1-3.1-1.5-3.7-5.3-2.1-10.8-3.4-16.4-3.8-5.4-.5-11-.8-16.4-1-5.5 0-11 .2-16.4.8-5.4.6-10.9 1.8-16.4 5.3-.2.1-.4.3-.5.5-.4.7-.2 1.6.5 2.1zM1188.8 637.3c-7.9 0-14.3 6.4-14.4 14.3 0 2.6.7 5.1 2 7.3l-28.6 42.3-68.7 101.8c-5.4-2.6-11.8-1.6-16.2 2.5l-75.4-57.8c-.9-7.9-8-13.5-15.8-12.7s-13.5 8-12.7 15.8c.1.5.1.9.2 1.4l-59.5 87.5h-.4c-7.9 0-14.3 6.4-14.3 14.4 0 7.9 6.4 14.3 14.4 14.3 7.9 0 14.3-6.4 14.3-14.4 0-2.8-.8-5.5-2.4-7.9l56.7-83.4c4.9 2 10.5 1.1 14.5-2.3l76.4 58.6c1.8 7.7 9.5 12.6 17.2 10.8 6.5-1.5 11.1-7.3 11.1-13.9 0-.4 0-.8-.1-1.2l60.7-89.9 39.7-58.9c.4 0 .8.1 1.2.1 7.9 0 14.3-6.4 14.3-14.4.1-7.9-6.3-14.3-14.2-14.3z"/></svg>
diff --git a/plugins/jetpack/images/plans/plan-free.svg b/plugins/jetpack/images/plans/plan-free.svg
deleted file mode 100644
index 397613a8..00000000
--- a/plugins/jetpack/images/plans/plan-free.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg id="plan-free-circle" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1492.8 1492.8"><style>.st0{fill:#c2f4ff}.st2{fill:#fff}.st3{fill:#204a69}</style><path class="st0" d="M746.4 0C334.2 0 0 334.2 0 746.4s334.2 746.4 746.4 746.4 746.4-334.2 746.4-746.4S1158.7 0 746.4 0zm326.1 897.7c-.3.2-.7.2-1 .1l-9 36.5c1.1.3 2 1.3 2 2.5 0 1.5-1.1 2.7-2.6 2.7-35.7 1.5-71.4 2.9-107.1 4.1 3.4 20.8 8.4 41.6 19 59.9.4.6.2 1.4-.4 1.8-.3.2-.7.2-1 .1l-9 36.5c1.1.3 2 1.3 2 2.5 0 1.5-1.1 2.7-2.6 2.7-50.2 2.1-100.4 4-150.6 5.3l-150.6 4.5c-1.4 0-2.7-.4-3.8-1.2l-.1-.1c-23.7-18.1-37.8-44.8-46.7-71.6l-190-9.9 27.7-531.9 235.4 261.2c0-1.9 0-3.8.1-5.7.4-29.5 2.3-58.9 5.8-88.2.5-3.7 3.6-6.5 7.3-6.5h.1l325.5 1.1h.1c3.5 0 6.4 2.9 6.3 6.4-.5 48.6 1.9 97.2 7.2 145.5 2.6 24.1 6.6 48.1 11.9 71.8 5.3 23.6 12.4 47.1 24.4 68.1.5.6.3 1.4-.3 1.8z"/><path class="st0" d="M609.7 979.7c-8.7-28.6-12.6-58.1-14.2-87.6s-.8-58.9 1.4-88.1c2.2-29.3 6-58.5 11.3-87.4.7-3.5 3.7-6 7.2-6h.1l37.6.1-37.6-.1h-.1c-3.5 0-6.6 2.5-7.2 6-5.3 28.9-9.1 58.1-11.3 87.4-2.2 29.3-3.1 58.7-1.4 88.1 1.5 29.4 5.4 59 14.2 87.6.4 1.4.9 2.8 1.4 4.3l7.1.4-7.1-.4c-.5-1.4-1-2.8-1.4-4.3z"/><path d="M611.1 984c-.5-1.4-.9-2.8-1.4-4.3-8.8-28.6-12.7-58.2-14.3-87.6-1.7-29.5-.8-58.9 1.4-88.1 2.2-29.3 6-58.5 11.3-87.4.7-3.5 3.7-6 7.2-6h.1l37.6.1 31 .1c0-2.4 0-4.9.1-7.3L448.8 442.2l-27.7 531.9 190 9.9z" fill="#74dcfc"/><path class="st2" d="M948.5 943.8c-12.4.4-24.8.8-37.2 1.1l-150.7 4.6c-1.4 0-2.7-.4-3.8-1.2l-.1-.1c-24.9-19.1-39.8-47.1-50-75-9.9-28.3-15.5-57.6-18.7-87-2.2-20.2-3.4-40.5-3.8-60.8l-62.5.2c-4.8 26.2-8.2 53-10.4 79.6-2.3 28.7-3.2 57.6-1.9 86.3s5.1 57.2 13.2 84.4c.9 3 1.9 6 3 9l-7.4-.4 7.3.4c8.1 22.9 20.2 44.4 38.4 59.5l148.2-1.7c50.2-.8 100.4-.8 150.6-.8.2 0 .5 0 .7.1l9-36.5c-.3-.1-.6-.3-.8-.5-12.2-18.6-18.4-39.9-23.1-61.2z"/><path class="st2" d="M1070.7 897.3c-13.5-20.8-22.1-44.1-28.7-67.8s-11.1-47.9-14.8-72.2c-7-46.5-9.6-93.4-10.5-140.3l-312.5 1c-3.1 26.4-4.8 53.3-5.4 80-.1 4.3-.2 8.6-.2 12.9v8.7c0 1.9.1 3.8.1 5.8.3 19.8 1.4 39.6 3.4 59.3 3 28.6 8.3 57.1 17.5 84 9.2 26 22.7 50.9 43.4 68.2l148.2-1.7c11.8-.2 23.6-.3 35.4-.4h6.8c36.1-.3 72.2-.4 108.3-.4.2 0 .5 0 .7.1l9-36.5c-.2-.2-.5-.4-.7-.7zM935.4 794.6c-10.3 2.8-20.8 4.5-31.3 5.7-14 1.7-28.1 2.5-42.1 2.8-14.1.2-28.2-.4-42.2-1.8-14-1.6-28.3-3.7-41.3-11.1-.6-.4-.9-1.2-.5-1.8.2-.4.7-.7 1.2-.7h.1c13.8.5 27.5 0 41.2.4s27.5.2 41.3.2c24.5.2 48.8-1.1 73.4-1.7 1.9 0 3.9-.1 5.8-.1 1.2 0 2.4-.1 3.6-.1.9 0 1.6.4 2.1 1 .3.4.6 1 .6 1.6 0 .6-.2 1.2-.6 1.7-.3.4-.7.7-1.2.9l-4.5 1.5c-1.8.4-3.7 1-5.6 1.5zm34-79.5c-.3 1.2-1.3 2-2.5 2.1-6.5.3-13.1.5-19.6.6-28.1.4-56.1-.9-84.1-.6-17.2 0-34.4-.1-51.5.3-6.3.2-12.6.3-18.8.5-10.8.4-21.5.9-32.4 2.1h-.1c-.7.1-1.4-.4-1.5-1.2 0-.3.1-.6.2-.9.1-.2.3-.3.5-.4v.1c5-2.7 10.1-4.8 15.4-6.6 11.7-3.8 23.9-5.6 35.8-6.8 17.4-1.6 34.9-2.2 52.4-2 34.8 1.2 69.7 2.4 104 9.6 1.6.4 2.5 1.8 2.2 3.2z"/><g><path class="st3" d="M963.5 1041.9c-.2-.1-.4-.1-.7-.1-50.2 0-100.4.1-150.6.8l-148.2 1.7c-18.2-15.2-30.2-36.7-38.4-59.5l-7.3-.4-7.1-.4c9 26.8 23 53.5 46.7 71.6l.1.1c1.1.8 2.4 1.3 3.8 1.2l150.6-4.5c50.2-1.3 100.4-3.3 150.6-5.3 1.5 0 2.6-1.2 2.6-2.7-.2-1.2-1-2.2-2.1-2.5zM1072.9 895.9c-12-21-19.2-44.5-24.4-68.1-5.3-23.7-9.3-47.6-11.9-71.8-5.3-48.3-7.7-96.9-7.2-145.5 0-3.5-2.8-6.4-6.3-6.4h-.1L697.4 603h-.1c-3.7 0-6.9 2.8-7.3 6.5-3.5 29.3-5.4 58.7-5.8 88.2 0 1.9 0 3.8-.1 5.7 0 2.4 0 4.9-.1 7.3l-31-.1-37.6-.1h-.1c-3.5 0-6.6 2.5-7.2 6-5.3 28.9-9.1 58.1-11.3 87.4-2.2 29.3-3 58.7-1.4 88.1s5.5 59 14.2 87.6c.4 1.4.9 2.8 1.4 4.3l7.1.4 7.4.4c-1.1-3-2.1-6-3-9-8.1-27.1-11.8-55.7-13.2-84.4s-.4-57.5 1.9-86.3c2.2-26.7 5.7-53.4 10.4-79.6l62.5-.2c.4 20.3 1.7 40.6 3.8 60.8 3.3 29.4 8.8 58.7 18.7 87 10.2 27.9 25.1 55.9 50 75l.1.1c1.1.8 2.4 1.3 3.8 1.2l150.7-4.6c12.4-.3 24.8-.7 37.2-1.1 4.7 21.3 10.9 42.7 23.1 61.1.2.3.5.5.8.5.3.1.7 0 1-.1.6-.4.8-1.2.4-1.8-10.7-18.2-15.6-39-19-59.9 35.7-1.2 71.4-2.6 107.1-4.1 1.5 0 2.6-1.2 2.6-2.7 0-1.2-.9-2.2-2-2.5-.2-.1-.4-.1-.7-.1-36.1 0-72.2.1-108.3.4h-6.8c-11.8.1-23.6.2-35.4.4L763 936.5c-20.7-17.2-34.1-42.2-43.4-68.2-9.3-26.9-14.5-55.4-17.5-84-2-19.7-3.1-39.5-3.4-59.3 0-1.9-.1-3.8-.1-5.8v-.1-1.4-7.2c0-4.3.1-8.6.2-12.9.6-26.7 2.3-53.6 5.4-80l312.5-1c.9 46.9 3.5 93.8 10.5 140.3 3.7 24.3 8.2 48.5 14.8 72.2s15.2 47.1 28.7 67.8c.2.3.5.4.8.5.3.1.7.1 1-.1.6 0 .8-.8.4-1.4z"/><path class="st3" d="M969.4 715.1c.3-1.4-.6-2.8-2-3.1-34.3-7.2-69.2-8.4-104-9.6-17.5-.2-35 .4-52.4 2-11.9 1.2-24.2 3-35.8 6.8-5.3 1.7-10.4 3.9-15.4 6.6v-.1c-.2.1-.4.3-.5.4-.2.3-.3.6-.2.9.1.7.7 1.3 1.5 1.2h.1c10.9-1.1 21.6-1.7 32.4-2.1 6.3-.2 12.5-.4 18.8-.5 17.1-.4 34.3-.3 51.5-.3 28-.3 55.9 1 84.1.6 6.5-.1 13-.3 19.6-.6 1-.1 2.1-1 2.3-2.2zM944.7 786.3c-1.2 0-2.4.1-3.6.1-1.9 0-3.9.1-5.8.1-24.6.6-48.9 1.8-73.4 1.7-13.8 0-27.5.2-41.3-.2s-27.4.1-41.2-.4h-.1c-.5 0-1 .2-1.2.7-.4.6-.1 1.5.5 1.8 13 7.5 27.4 9.5 41.3 11.1 14 1.4 28.1 2 42.2 1.8 14.1-.3 28.2-1.1 42.1-2.8 10.5-1.2 21-3 31.3-5.7 1.9-.5 3.8-1.1 5.7-1.7l4.5-1.5c.5-.2.9-.5 1.2-.9.4-.5.6-1 .6-1.7 0-.6-.2-1.2-.6-1.6-.6-.4-1.3-.8-2.2-.8z"/></g></svg>
diff --git a/plugins/jetpack/images/plans/plan-personal.svg b/plugins/jetpack/images/plans/plan-personal.svg
deleted file mode 100644
index 90a8e8e5..00000000
--- a/plugins/jetpack/images/plans/plan-personal.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg id="plan-personal" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1498 1498"><style>.st2{fill:#fff}.st3{fill:#204a69}</style><path d="M749 0C335.3 0 0 335.3 0 749s335.3 749 749 749 749-335.3 749-749S1162.7 0 749 0zm406.7 1011.6c-59 4.4-118 6-177 7.3l-1.9 29.1c-1.1 11.6-5.5 22.6-12.7 31.7-14 18.3-38.3 27.2-59.8 25.9l-61.4.2-61.4.2c-21.3 1.4-46.2-7-60.4-25.5-7.4-9.1-12-20.2-13.1-31.9-.7-9.8-.8-18.5-1.2-27.5l-31.1-.1-96-1.4c-64-1.2-128-3.7-192-10.7-1.5-.2-2.5-1.5-2.4-2.9.1-.6.3-1.1.7-1.5h-43.7V518.4c0-10.3 8.3-18.6 18.6-18.6h342.8l-3.9-34.1c-.1-1.3.1-2.7.6-3.9l23.7-51.8c1.7-3.7 6.1-5.4 9.9-3.7 1 .5 1.9 1.1 2.6 2l37.8 45.1c.9 1.1 1.5 2.5 1.7 3.9l12.5 117.9c4 39.3 8.4 78.7 12 117.8l1.2 12.4 17.5.2c4.5 0 8.9.1 13.4.1l-.3-15.8-.6-96.3-.2-48.3c-.2-16.9 12.6-32.3 28.6-36.6l-11-12.1-.2.2c-.7.5-1.7.4-2.3-.1-7.4-6.1-10.3-16.5-10.2-25.6-.2-9.4 2.1-18.2 4.5-26.7 5.2-17 13.1-32.6 20-48.1.4-.9 1-1.7 1.7-2.4 3-2.7 7.6-2.6 10.3.4l.2.2c16.6 17.9 28.5 41.2 30.2 66.4.8 12.5-1.1 25.7-8.2 37-3.1 4.7-7.3 8.9-12.3 11.8 14.5 5.4 25.5 19.9 25.3 35.6l-.2 48.3-.5 96.3-.3 17.1 29.2.6c1.4 0 2.6 1.2 2.6 2.6h52.2c0-.7.7-1.3 1.4-1.2.7 0 1.3.7 1.2 1.4-2.7 81.9-6.7 163.7-11.5 245.5l-2.2 38c58.5 1.3 117 2.9 175.5 7.3 2.9.2 5.1 2.8 4.9 5.7-.1 2.4-2.1 4.5-4.8 4.7z" fill="#fff2d2"/><path d="M387.7 1003.6c64-6.9 128-9.3 192-10.6l96-1.4 30.1-.1-1.3-35.5c-2.9-81.9-6-163.7-8.1-245.6v-.1c-.1-3.1 2.4-5.7 5.5-5.8h.2l25 .2-.7-6-22.7-198.9H360.9c-10.3 0-18.6 8.3-18.6 18.6v486.1H386c.5-.5 1.1-.8 1.7-.9z" fill="#fcd56e"/><path class="st2" d="M751 479.8l-1.1-.7c-2.8-1.6-5.5-3.3-8.2-5-2.9 3.2-6 6.1-9.3 8.9l-1.7 1.4c-2.1 1.7-5.1 1.5-7-.4l-7.9-8.4 2.6 24.2 20.4 190.3.8 7.3.7 7.4 50.3.5-2-15.7c-5-38.6-9.2-76.9-13.7-115.4L763 471.3c-1.3 2.4-2.7 4.6-4.3 6.8-1.8 2.5-5.1 3.2-7.7 1.7zM725.3 470.5c1.5-1.9 3-3.8 4.6-5.7 1.6-1.9 3.3-3.8 5-5.7 2.6-2.8 6.9-3.3 10-1.1 1.8 1.3 3.6 2.7 5.4 4.1 1.2 1 2.4 1.9 3.6 2.9 2.3-1.7 4.7-3.1 7.3-4.3.1 0 .1-.1.2-.1l-20.6-24.3c-4.3 1.6-8.9 2.5-13.6 2.7L715 466l1.5.6 8.8 3.9zM894.2 689.8l-.5-96.3-.3-48c0-12.5-11.3-23.3-23.7-23.1-12.4-.4-23.8 10.5-23.8 23.1l-.3 48-.6 96.3-.3 16c16.5.2 33.1.6 49.6.9l-.1-16.9zM862.1 439.8c5.4 1 10.1 3.9 13.1 5.2 2.8 1.5 5.9 2.4 9 2.8.9.2 1.9.3 2.9.4-3.7-12.6-10.1-24.4-18-35.2-4.4 8.8-8.7 17.6-12.6 26.4 1.9-.1 3.7.1 5.6.4zM849.2 496.6l11 12.1.9 1c.2-.2.6-.4.9-.4 3.3 0 6.5-.7 9.4-1.8 6.6-2.6 11.9-7.8 14.6-14.7 4.2-9.3 4.9-20.2 3.8-30.7-.1-.8-.2-1.6-.3-2.3-1.6.7-3.3 1.1-5 1.3-5.5.8-11.2-.1-16.1-2.7-4.6-2.7-7.1-4.9-10.1-6.2l-6-2.6c-2.9 7.1-5 14.5-6.4 22.1-1.2 7.8-.8 15.6 3.6 22.4.6.8.4 1.8-.3 2.5zM939 710.2c0 1.5-1.2 2.7-2.6 2.7l-29.3.6c-2.1 0-4.2.1-6.3.1-2.1 0-4.2.1-6.2.1-16.6.3-33.3.7-49.9.9-2 0-4 .1-6 .1s-4 .1-6 .1c-4.5 0-9 .1-13.5.1l-16.6.2-5.4.1-5.4.1-50.5.5h-6.4l-6.4.1-20.3.2c4 79.8 7.2 159.7 10.5 239.6l1.5 36 .5 12.9.5 12.5c.1 1.4.1 2.7.2 4.1.4 8.8.6 18.1 1.2 26.1.9 8.8 4.4 17.2 10.1 24 5.7 7 13.1 12.4 21.5 15.7 8.6 3.6 17 4.5 27.3 4.3l61.4.2 61.4.2c19.3 1.1 37.5-6.1 49.1-20.4 5.6-7 9.1-15.5 10-24.5l2-27.6.2-2.9 1.7-22.8 2.9-38.4c6.1-81.7 12.9-163.3 21-244.8l-52.2-.1zm-182.2 64.9c.1-.7.8-1.2 1.6-1.1.5.1.9.4 1.1.9 4.5 14 6.7 28.2 8.3 42.5s2.9 28.5 3.8 42.8 1.5 28.6 2 42.9c.3 7.7.3 15.4.2 23.1 0 1.1-.1 2.3-.1 3.4s-.1 2.3-.1 3.4c-.2 4.4-.4 8.8-.8 13.2-.2 1.5-1.5 2.5-2.9 2.4-1.1-.1-2.1-.9-2.3-2-.9-4.1-1.8-8.3-2.5-12.4-.2-1.2-.4-2.4-.6-3.5-.2-1.2-.4-2.4-.6-3.5-1.3-7.7-2.3-15.3-3.1-23.1-1.5-14.2-2.8-28.5-4-42.8s-1.7-28.6-2.1-42.9-.4-28.7 2.1-43.3z"/><g><path class="st3" d="M1155.7 1001c-58.5-4.3-117-6-175.5-7.3l2.2-38c4.8-81.8 8.8-163.6 11.5-245.5 0-.7-.5-1.4-1.2-1.4s-1.4.5-1.4 1.2c-8.1 81.5-14.9 163.2-21 244.8l-2.9 38.4-1.7 22.8-.2 2.9-2 27.6c-.9 9-4.4 17.4-10 24.5-11.5 14.3-29.7 21.5-49.1 20.4l-61.4-.2-61.4-.2c-10.3.1-18.7-.7-27.3-4.3-8.4-3.4-15.8-8.8-21.5-15.7-5.6-6.8-9.1-15.2-10.1-24-.6-8-.9-17.3-1.2-26.1-.1-1.4-.1-2.8-.2-4.1l-.5-12.5-.5-12.9-1.5-36c-3.3-79.9-6.5-159.8-10.5-239.6l20.3-.2 6.4-.1h6.4l50.5-.5 5.4-.1 5.4-.1 16.6-.2c4.5 0 9-.1 13.5-.1 2 0 4 0 6-.1 2 0 4 0 6-.1 16.6-.2 33.3-.6 49.9-.9 2.1 0 4.2-.1 6.2-.1 2.1 0 4.2-.1 6.3-.1l29.3-.6c1.5 0 2.6-1.2 2.6-2.6 0-1.4-1.2-2.6-2.6-2.6l-29.2-.6.3-17.1.5-96.3.2-48.3c.2-15.7-10.8-30.2-25.3-35.6 5-2.8 9.1-7.1 12.3-11.8 7.1-11.3 9-24.5 8.2-37-1.7-25.2-13.6-48.5-30.2-66.4l-.2-.2c-2.7-3-7.3-3.1-10.3-.4-.7.7-1.3 1.5-1.7 2.4-6.9 15.5-14.8 31.1-20 48.1-2.5 8.5-4.7 17.3-4.5 26.7-.1 9.1 2.8 19.5 10.2 25.6.7.5 1.6.6 2.3.1.1-.1.2-.1.2-.2.7-.7.8-1.7.3-2.5-4.4-6.8-4.8-14.6-3.6-22.4 1.4-7.6 3.5-15 6.4-22.1l6 2.6c3 1.3 5.5 3.5 10.1 6.2 4.9 2.6 10.6 3.6 16.1 2.7 1.7-.2 3.4-.7 5-1.3.1.8.2 1.6.3 2.3 1.1 10.5.4 21.4-3.8 30.7-2.7 6.8-8 12.1-14.6 14.7-2.9 1.2-6.1 1.8-9.4 1.8-.4 0-.7.2-.9.4l-.9-1c-16.1 4.3-28.8 19.7-28.6 36.6l.2 48.3.6 96.3.3 15.8c-4.5 0-8.9-.1-13.4-.1l-17.5-.2-1.2-12.4c-3.6-39.1-8-78.5-12-117.8l-12.5-117.9c-.2-1.4-.7-2.8-1.7-3.9l-37.8-45.1c-.7-.9-1.6-1.5-2.6-2-3.7-1.7-8.2-.1-9.9 3.7l-23.7 51.8c-.6 1.2-.8 2.6-.6 3.9l3.9 34.1 22.7 198.9.7 6-25-.2h-.2c-3.1.1-5.6 2.7-5.5 5.8v.1c2.1 81.9 5.2 163.8 8.1 245.6l1.3 35.5-30.1.1-96 1.4c-64 1.2-128 3.7-192 10.7v-.1c-.7.1-1.3.4-1.7.9-.4.4-.6.9-.7 1.5-.2 1.5.9 2.8 2.4 2.9 64 7 128 9.4 192 10.7l96 1.4 31.1.1c.3 9.1.5 17.7 1.2 27.5 1.2 11.7 5.7 22.8 13.1 31.9 14.2 18.5 39 26.9 60.4 25.5l61.4-.2 61.4-.2c21.5 1.2 45.8-7.7 59.8-25.9 7.2-9.1 11.6-20.1 12.7-31.7l1.9-29.1c59-1.3 118-2.9 177-7.3 2.6-.2 4.7-2.3 4.9-4.9.1-2.7-2-5.3-5-5.5zM761.4 460.7c-.1 0-.1.1-.2.1-2.6 1.2-5 2.6-7.3 4.3-1.2-1-2.4-2-3.6-2.9-1.8-1.4-3.6-2.8-5.4-4.1-3.1-2.2-7.4-1.7-10 1.1-1.7 1.9-3.4 3.7-5 5.7-1.6 1.8-3.1 3.7-4.6 5.7l-8.8-3.9-1.5-.7 12.3-26.9c4.6-.2 9.2-1.1 13.6-2.7l20.5 24.3zm-45.6 14.9l7.9 8.4c1.9 2 4.9 2.1 7 .4l1.7-1.4c3.3-2.8 6.4-5.8 9.3-8.9 2.7 1.7 5.5 3.4 8.2 5l1.1.7c2.6 1.5 5.9.8 7.7-1.6 1.6-2.2 3-4.4 4.3-6.8l11.8 102.9c4.6 38.4 8.7 76.8 13.7 115.4l2 15.7-50.3-.5-.7-7.4-.8-7.3-20.4-190.3-2.5-24.3zm129.3 214.2l.6-96.3.3-48c0-12.5 11.4-23.5 23.8-23.1 12.3-.2 23.7 10.6 23.7 23.1l.3 48 .5 96.3.3 16.9c-16.5-.3-33.1-.7-49.6-.9l.1-16zm39.1-242c-3.1-.4-6.2-1.3-9-2.8-3-1.4-7.7-4.2-13.1-5.2-1.8-.3-3.7-.5-5.6-.4 3.9-8.8 8.2-17.6 12.6-26.4 7.9 10.8 14.3 22.6 18 35.2-1-.1-2-.2-2.9-.4z"/><path class="st3" d="M767.7 817.5c-1.6-14.2-3.8-28.5-8.3-42.5-.2-.5-.6-.9-1.1-.9-.7-.1-1.4.4-1.6 1.1-2.5 14.5-2.8 28.9-2.4 43.2s1 28.6 2.1 42.9 2.5 28.5 4 42.8c.8 7.7 1.8 15.4 3.1 23.1.2 1.2.4 2.4.6 3.5.2 1.2.4 2.4.6 3.5.8 4.2 1.6 8.3 2.5 12.4.3 1.1 1.2 1.9 2.3 2 1.5.2 2.8-.9 2.9-2.4.3-4.4.6-8.8.8-13.2 0-1.1.1-2.3.1-3.4s.1-2.3.1-3.4c.2-7.7.1-15.4-.2-23.1-.5-14.3-1.1-28.6-2-42.9s-1.9-28.5-3.5-42.7z"/></g></svg>
diff --git a/plugins/jetpack/images/plans/plan-premium.svg b/plugins/jetpack/images/plans/plan-premium.svg
deleted file mode 100644
index b34ea17b..00000000
--- a/plugins/jetpack/images/plans/plan-premium.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg id="plan-premium" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1498.3 1498.3"><style>.st0{fill:#d0f4e7}.st1{fill:#7bdebf}.st3{fill:#44d0a3}.st4{fill:#204a69}</style><path class="st0" d="M749.1 0C335.4 0 0 335.4 0 749.1s335.4 749.1 749.1 749.1 749.1-335.4 749.1-749.1S1162.9 0 749.1 0zm421.2 838.3l-.1 40.9c-.4 13.8.9 26.8-1.4 42.1-4.9 29.6-26.3 55.5-54.3 66-6.9 2.7-14.2 4.5-21.6 5.3-7.6.7-14.5.5-21.2.5l-31.2-.1c3.9 10.9 8.6 21.5 14.2 31.6 3.6 6.4 7.5 12.6 11.8 18.6 4.2 5.9 8.7 11.4 13.7 16.6l.2.2c1.9 1.9 2.5 4.6 1.6 7.1-1.3 3.6-5.2 5.4-8.7 4.2-67.5-23.9-134.3-49.6-199.6-79.1-85-.7-170-2-255-4.9v1.3c-28.3.4-56.4-14.9-71.1-39.4-7.6-12.2-11.8-26.1-12.3-40.4l-.1-12.5v-.1H335.4V445.7c0-6.8 5.5-12.3 12.3-12.3h620.8v239.8l72.5-.2 41-.1c15-.1 29.7 3.5 42.9 10.5 26.2 14.2 44.6 42.6 45.4 72.6.3 28 0 54.8 0 82.3z"/><path class="st1" d="M534.4 785.9c0-.1 0-.1 0 0v-5.7-.7c0-1.7 0-3.4-.1-5.2-.1-4.1-.1-8.1-.1-12.3v-.1h-72.7l120-177 69.6 89.7 62.1-.5 163.8-.8 91.2-.2h.1V433.4H347.7c-6.8 0-12.3 5.5-12.3 12.3v450.6h199.8l-.3-28.5-.5-81.9z"/><path class="st0" d="M590.3 680.1c-.2.1-.3.1-.5.2.5-.2 1-.4 1.5-.5-.3.1-.6.2-.8.3-.1-.1-.2-.1-.2 0zM593.2 679c-.2.1-.5.2-.7.2l1.8-.6c-.2 0-.3.1-.5.1-.2.2-.4.3-.6.3zM631.5 674.9l19.7-.2-16 .1zM534.4 779.4v0zM631.5 674.9c-6.8.1-13.6 0-21 .5 7.5-.5 14.2-.5 21-.5zM600 677.2c-1 .2-2 .5-3 .8-.1 0-.3.1-.4.1-.5.1-.9.3-1.4.4 2.2-.6 4.4-1.2 6.6-1.7-.3.1-.6.1-.8.2-.4 0-.7.1-1 .2zM534.3 761.9h4.7-4.7zM534.4 785.9c0-.1 0-.1 0 0 0-.1 0-.1 0 0zM587.4 681.1c-.1 0-.2.1-.3.1.1 0 .2 0 .3-.1zM534.4 774.3c-.1-4.1-.1-8.1-.1-12.3-.1 4.1 0 8.2.1 12.3zM603.1 676.5c-.1 0-.2 0-.3.1.6-.1 1.2-.2 1.7-.3-.1 0-.3 0-.4.1-.3 0-.7 0-1 .1zM606.5 675.9c-.2 0-.3.1-.5.1.5-.1 1-.2 1.5-.2h-.2c-.3 0-.6.1-.8.1z"/><path class="st1" d="M604.1 676.3c.1 0 .3 0 .4-.1.5-.1 1-.2 1.5-.2.2 0 .3-.1.5-.1-.8.1-1.6.3-2.4.4zM610.5 675.4c-1.1.1-2.1.3-3.2.4h.2c1-.2 2-.3 3-.4 7.5-.5 14.2-.5 21-.5h3.7-3.7c-6.9 0-13.6 0-21 .5zM596.9 677.9c1-.3 2-.5 3-.8-1 .3-2 .6-3 .8zM552.2 707.6c.1-.1.1-.2.2-.2l-.2.2zM589.3 680.4c-13.7 5.1-25.8 13.7-35.2 24.8-.4.5-.9 1.1-1.3 1.6 8.9-11.2 20.7-20.1 34.3-25.6.1 0 .2-.1.3-.1.7-.2 1.3-.5 1.9-.7.2-.1.3-.1.5-.2s.3-.1.5-.2c-.4.2-.7.3-1 .4zM590.4 680c.3-.1.5-.2.8-.3.4-.1.8-.3 1.2-.4.2-.1.5-.2.7-.2-.8.2-1.7.6-2.7.9zM600.9 677c.3-.1.6-.1.8-.2.4-.1.7-.2 1.1-.2.1 0 .2 0 .3-.1-.8.2-1.5.3-2.2.5zM593.8 678.9c.2-.1.3-.1.5-.1.3-.1.6-.2.8-.2.5-.1.9-.3 1.4-.4-.9.1-1.8.4-2.7.7z"/><path d="M1155.6 879.3l-.1-41-.3-81.6c-.6-24.9-15.8-48.4-37.5-60.3-11-5.9-23.3-8.9-35.8-8.8l-41-.1-72.6-.2h-.1l-91.2-.2-163.8-.8-53.4-.4-28.5-.2c-6.9-.1-13.8-.2-20 .2-6.4.6-12.6 2-18.6 4.2-12.1 4.4-22.8 11.8-31.2 21.6-8.4 9.8-14.1 21.6-16.6 34.2-.9 5.3-1.4 10.7-1.4 16.1H539h4.6c-.2 7.8.1 15.9-.1 23.9l-.5 81.9-.1 28.6v12.3c.2 13.1 3.8 25.9 10.5 37.2 13 22.8 38.8 37.5 65.2 37.7v1.3c85.5-2.9 170.9-4.2 256.4-4.9.8 0 1.6.2 2.4.5l.1.1c58.2 25.2 117.3 48.5 177 69.8l-.1-.1c-4.3-6-8.2-12.2-11.9-18.7-7.7-13.7-13.9-28.3-18.6-43.3-1-3.2.5-6.6 3.3-8.2.4-.2.8-.4 1.2-.5.7-.2 1.4-.3 2.1-.3l41-.1c6.9 0 13.7 0 19.7-.5 6.2-.7 12.2-2.2 18-4.5 2.9-1.1 5.8-2.4 8.5-3.9 19-10.4 33.1-29.7 36.5-51.2 2.2-11.9 1.1-26.3 1.4-39.8zm-187.2-62.6c3.4-1.6 7.1-2.5 11.1-2.5 14.1 0 25.5 11.4 25.5 25.5s-11.4 25.5-25.5 25.5c-4 0-7.7-.9-11.1-2.5-8.6-4.1-14.5-12.9-14.5-23s5.9-18.9 14.5-23zm-116.1-2.5c14.1 0 25.5 11.4 25.5 25.5s-11.4 25.5-25.5 25.5-25.5-11.4-25.5-25.5 11.4-25.5 25.5-25.5zm-127.2 0c14.1 0 25.5 11.4 25.5 25.5s-11.4 25.5-25.5 25.5-25.5-11.4-25.5-25.5 11.4-25.5 25.5-25.5z" fill="#fff"/><path class="st3" d="M593.2 679c.2-.1.4-.1.6-.2-.2.1-.4.2-.6.2zM635.2 674.8l16-.1zM590.3 680.1c.1 0 .1 0 .2-.1-.1 0-.2 0-.2.1zM596.5 678.1c.1 0 .3-.1.4-.1-.1 0-.2 0-.4.1zM600 677.2c.3-.1.6-.1.9-.2-.3 0-.6.1-.9.2zM534.3 761.7c0-.9 0-1.9.1-2.8-.1.9-.1 1.9-.1 2.8zM534.7 752.8c.2-2.9.6-5.7 1-8.6-.5 2.9-.8 5.8-1 8.6zM606.5 675.9c.3 0 .5-.1.8-.1-.3 0-.6.1-.8.1zM534.5 756.2c0-.9.1-1.8.2-2.7-.1.9-.2 1.8-.2 2.7zM603.1 676.5c.3-.1.7-.1 1-.2-.3.1-.7.1-1 .2z"/><path class="st3" d="M534.3 761.7c0-.9 0-1.9.1-2.8 0-.9.1-1.8.1-2.7 0-.9.1-1.8.2-2.7 0-.2 0-.5.1-.7.2-2.8.6-5.7 1-8.6v-.1c2.5-13.5 8.3-26 16.5-36.5.1-.1.1-.2.2-.2.1-.2.3-.3.4-.5.4-.5.9-1.1 1.3-1.6 9.4-11.2 21.5-19.7 35.2-24.8.3-.1.7-.2 1-.3.1 0 .1 0 .2-.1.9-.3 1.8-.6 2.8-.9.2-.1.4-.1.6-.2.9-.3 1.8-.5 2.7-.8.1 0 .3-.1.4-.1 1-.3 2-.5 3-.8.3-.1.6-.1.9-.2.7-.2 1.5-.3 2.2-.5.3-.1.7-.1 1-.2.8-.1 1.6-.3 2.3-.4.3 0 .5-.1.8-.1 1.1-.2 2.1-.3 3.2-.4 7.4-.5 14.2-.5 21-.5h3.7l16-.1-69.6-89.9-120 177h72.7v-.3z"/><path class="st4" d="M979.5 865.2c14.1 0 25.5-11.4 25.5-25.5s-11.4-25.5-25.5-25.5c-4 0-7.7.9-11.1 2.5-8.6 4.1-14.5 12.9-14.5 23s5.9 18.9 14.5 23c3.3 1.6 7.1 2.5 11.1 2.5z"/><circle class="st4" cx="852.3" cy="839.7" r="25.5"/><circle class="st4" cx="725.1" cy="839.7" r="25.5"/><path class="st4" d="M1170.3 838.3c-.1-27.5.3-54.3-.1-82.2-.8-30.1-19.2-58.4-45.4-72.6-13.2-7-27.9-10.6-42.9-10.5l-41 .1-72.5.2h-.1l-91.2.2-163.8.8-62.1.5-19.7.2c-6.8.1-13.5 0-21 .5-1 .1-2 .2-3 .4-.5.1-1 .1-1.5.2s-1 .2-1.5.2c-.6.1-1.2.2-1.7.3-.4.1-.7.1-1.1.2-2.2.5-4.4 1-6.6 1.7-.3.1-.6.2-.8.2l-1.8.6c-.4.1-.8.3-1.2.4-.5.2-1 .4-1.5.5-.1.1-.3.1-.4.2-.6.2-1.3.5-1.9.7-.1 0-.2.1-.3.1-13.6 5.5-25.4 14.4-34.3 25.6-.1.2-.3.3-.4.5-.1.1-.1.2-.2.2-8.2 10.5-14 23-16.5 36.5v.1c-.5 2.8-.8 5.7-1 8.6 0 .2 0 .5-.1.7-.1.9-.1 1.8-.2 2.7v.2c0 .8-.1 1.6-.1 2.4v.1c0 .9-.1 1.9-.1 2.8v.2h9.4c.1-5.4.5-10.8 1.4-16.1 2.5-12.6 8.2-24.4 16.6-34.2 8.4-9.8 19.1-17.2 31.2-21.6 6-2.2 12.2-3.6 18.6-4.2 6.2-.4 13.1-.3 20-.2l28.5.2 53.4.4 163.8.8 91.2.2h.1l72.6.2 41 .1c12.5-.1 24.8 2.9 35.8 8.8 21.7 11.9 36.9 35.4 37.5 60.3l.3 81.6.1 41c-.3 13.5.8 27.9-1.1 39.6-3.4 21.5-17.5 40.8-36.5 51.2-2.7 1.5-5.6 2.8-8.5 3.9-5.8 2.3-11.8 3.8-18 4.5-6 .6-12.7.5-19.7.5l-41 .1c-.7 0-1.4.1-2.1.3-.4.1-.9.3-1.2.5-2.9 1.6-4.3 5-3.3 8.2 4.6 15 10.9 29.6 18.6 43.3 3.6 6.4 7.6 12.7 11.9 18.7l.1.1c-59.7-21.3-118.8-44.6-177-69.8l-.1-.1c-.8-.3-1.6-.5-2.4-.5-85.5.7-170.9 2-256.4 4.9v-1.3c-26.5-.2-52.2-14.9-65.2-37.7-6.7-11.3-10.3-24.1-10.5-37.2V896l.1-28.6.5-81.9c.2-8-.1-16.1.1-23.9h-9.8v.1c-.1 4.1 0 8.2.1 12.3 0 1.7.1 3.4.1 5.2v6.5l.5 81.9.3 28.5v.1l.1 12.5c.5 14.3 4.7 28.2 12.3 40.4 14.7 24.6 42.8 39.8 71.1 39.4v-1.3c85 2.9 170 4.1 255 4.9 65.3 29.5 132 55.2 199.6 79.1 3.6 1.3 7.5-.6 8.7-4.2.9-2.5.3-5.2-1.6-7.1l-.2-.2c-5-5.2-9.6-10.7-13.7-16.6-4.3-6-8.2-12.2-11.8-18.6-5.6-10.1-10.4-20.7-14.2-31.6l31.2.1c6.7 0 13.6.2 21.2-.5 7.4-.8 14.7-2.6 21.6-5.3 28-10.5 49.4-36.4 54.3-66 2.3-15.3 1.1-28.4 1.4-42.1v-40.8z"/></svg>
diff --git a/plugins/jetpack/images/rss/blue-large.png b/plugins/jetpack/images/rss/blue-large.png
deleted file mode 100644
index aa01d8ff..00000000
--- a/plugins/jetpack/images/rss/blue-large.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/rss/blue-medium.png b/plugins/jetpack/images/rss/blue-medium.png
deleted file mode 100644
index 27be48d4..00000000
--- a/plugins/jetpack/images/rss/blue-medium.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/rss/blue-small.png b/plugins/jetpack/images/rss/blue-small.png
deleted file mode 100644
index 26013eea..00000000
--- a/plugins/jetpack/images/rss/blue-small.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/rss/green-large.png b/plugins/jetpack/images/rss/green-large.png
deleted file mode 100644
index 101dade9..00000000
--- a/plugins/jetpack/images/rss/green-large.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/rss/green-medium.png b/plugins/jetpack/images/rss/green-medium.png
deleted file mode 100644
index bcdbecac..00000000
--- a/plugins/jetpack/images/rss/green-medium.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/rss/green-small.png b/plugins/jetpack/images/rss/green-small.png
deleted file mode 100644
index a8a4ab56..00000000
--- a/plugins/jetpack/images/rss/green-small.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/rss/orange-large.png b/plugins/jetpack/images/rss/orange-large.png
deleted file mode 100644
index 97d75a7d..00000000
--- a/plugins/jetpack/images/rss/orange-large.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/rss/orange-medium.png b/plugins/jetpack/images/rss/orange-medium.png
deleted file mode 100644
index 35d74cbf..00000000
--- a/plugins/jetpack/images/rss/orange-medium.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/rss/orange-small.png b/plugins/jetpack/images/rss/orange-small.png
deleted file mode 100644
index 16c40703..00000000
--- a/plugins/jetpack/images/rss/orange-small.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/rss/pink-large.png b/plugins/jetpack/images/rss/pink-large.png
deleted file mode 100644
index c8aa9567..00000000
--- a/plugins/jetpack/images/rss/pink-large.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/rss/pink-medium.png b/plugins/jetpack/images/rss/pink-medium.png
deleted file mode 100644
index f2e68976..00000000
--- a/plugins/jetpack/images/rss/pink-medium.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/rss/pink-small.png b/plugins/jetpack/images/rss/pink-small.png
deleted file mode 100644
index 4666aee7..00000000
--- a/plugins/jetpack/images/rss/pink-small.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/rss/purple-large.png b/plugins/jetpack/images/rss/purple-large.png
deleted file mode 100644
index 19b2f60d..00000000
--- a/plugins/jetpack/images/rss/purple-large.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/rss/purple-medium.png b/plugins/jetpack/images/rss/purple-medium.png
deleted file mode 100644
index 26012bf4..00000000
--- a/plugins/jetpack/images/rss/purple-medium.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/rss/purple-small.png b/plugins/jetpack/images/rss/purple-small.png
deleted file mode 100644
index d2b24d52..00000000
--- a/plugins/jetpack/images/rss/purple-small.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/rss/red-large.png b/plugins/jetpack/images/rss/red-large.png
deleted file mode 100644
index fd4745f1..00000000
--- a/plugins/jetpack/images/rss/red-large.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/rss/red-medium.png b/plugins/jetpack/images/rss/red-medium.png
deleted file mode 100644
index 117edc5a..00000000
--- a/plugins/jetpack/images/rss/red-medium.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/rss/red-small.png b/plugins/jetpack/images/rss/red-small.png
deleted file mode 100644
index 12ff9d20..00000000
--- a/plugins/jetpack/images/rss/red-small.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/rss/silver-large.png b/plugins/jetpack/images/rss/silver-large.png
deleted file mode 100644
index 40f5066a..00000000
--- a/plugins/jetpack/images/rss/silver-large.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/rss/silver-medium.png b/plugins/jetpack/images/rss/silver-medium.png
deleted file mode 100644
index 0bef8bdb..00000000
--- a/plugins/jetpack/images/rss/silver-medium.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/rss/silver-small.png b/plugins/jetpack/images/rss/silver-small.png
deleted file mode 100644
index f050bd3d..00000000
--- a/plugins/jetpack/images/rss/silver-small.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/security.svg b/plugins/jetpack/images/security.svg
deleted file mode 100644
index b1f5a04d..00000000
--- a/plugins/jetpack/images/security.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 183 104"><style>.st0{fill:#e3eaf0}.st1{fill:#D8DEE4}.st2{fill:#BBC9D5}.st3{fill:#BBC9D5}.st4{fill:#fff}.st5{fill:#CCCED0}.st6{fill:#46799A}.st7{fill:#00be28}.st8{fill:#6F93AD}</style><title>security &amp; backups image</title><path class="st0" d="M.3 99.6c11-.6 22.1-.7 33.1-.8l16.6-.1h16.6l33.1.2c11 .1 22.1.2 33.1.6.2 0 .4.2.4.4s-.2.4-.4.4c-11 .4-22.1.5-33.1.6l-33.1.2H50l-16.6-.1c-11-.1-22.1-.3-33.1-.8-.1 0-.2-.1-.2-.2 0-.3.1-.4.2-.4zm152.5 0c2.5-.5 5-.7 7.5-.8l3.7-.1h3.7c2.5 0 5 .1 7.5.2s5 .2 7.5.6c.2 0 .4.2.4.5 0 .2-.2.3-.4.4-2.5.4-5 .5-7.5.6-2.5.1-5 .1-7.5.2H164l-3.7-.1c-2.5-.1-5-.3-7.5-.8-.1 0-.2-.1-.2-.2 0-.4.1-.5.2-.5z"/><path class="st1" d="M46.1 82.8V25h70.1v57.8H49.9"/><path class="st2" d="M46.1 24.7V11.1h98.2v13.5H51.5"/><path class="st3" d="M144.3 25.2l.9 57.3-28.9.1V25.2h28"/><path class="st4" d="M102.5 82.7H54.3V50.6h53.1v32.1m0-35.7H54.3V33.8h53.1V47"/><path class="st5" d="M96.1 41.6c-.7.2-1.4.5-2.1.8-.6.4-1.3.7-1.9 1.1-.4.3-.9.6-1.4.9.4-.5.9-1.1 1.3-1.6.5-.6 1-1.3 1.4-2 .5-.7.9-1.4 1.2-2.2 0-.1 0-.1-.1-.1h-.1c-.7.5-1.3 1.1-1.8 1.7-.5.6-1 1.3-1.5 1.9-.4.6-.9 1.2-1.3 1.9.2-.7.5-1.4.7-2.2l.6-2.4c.2-.8.3-1.6.3-2.5v-.1h-.1c-.4.7-.8 1.5-1 2.2-.3.8-.5 1.6-.7 2.3-.2.6-.3 1.2-.4 1.8 0-.7-.1-1.5-.1-2.2-.1-.9-.2-1.7-.3-2.6-.1-.9-.3-1.7-.5-2.6 0-.1-.1-.2-.2-.1-.1 0-.1.1-.1.2-.1.9-.1 1.8-.1 2.6 0 .9.1 1.7.1 2.6.1.9.1 1.7.2 2.6-.2-.5-.5-1.1-.8-1.6-.3-.6-.7-1.3-1-1.9l-1.2-1.8c-.1-.1-.2-.1-.3 0-.1 0-.1.1-.1.2.2.7.4 1.4.7 2.1.3.7.6 1.3.9 2 .2.3.3.6.5.9-.5-.5-1-1.1-1.5-1.6-.7-.6-1.3-1.3-2-1.9-.7-.6-1.4-1.2-2.2-1.7-.1-.1-.2 0-.3.1v.2c.5.8 1.1 1.5 1.7 2.1.6.7 1.3 1.3 1.9 2 .6.6 1.3 1.3 2 1.9l.1.1c-.4-.2-.8-.4-1.2-.5-.6-.2-1.2-.5-1.9-.7-.6-.2-1.3-.4-1.9-.5-.1 0-.2.1-.2.2s0 .1.1.2c.5.4 1.1.7 1.7 1 .6.3 1.2.6 1.8.8.6.3 1.2.5 1.9.7.6.2 1.2.3 1.9.4H89.1c.7-.3 1.4-.6 2-.9.6-.4 1.3-.7 1.9-1.1l1.8-1.2c.6-.4 1.2-.9 1.7-1.5v-.1c-.3.1-.4.1-.4.1z"/><path class="st6" d="M147.6 24.9c-8.7.9-17.4.9-26.1 1l-26.1.3H69.3c-8.7 0-17.4.1-26.1-.7V25c8.7-.9 17.4-.9 26.1-1l26.1-.3h26.1c8.7 0 17.4-.1 26.1.7v.5z"/><path class="st5" d="M77.3 70c-1.1.6-2.1 1.3-2.9 2.2l.3-1.1c.4-1.7 1-3.4 1.6-5.1l-.3-.2c-.6.7-1.1 1.5-1.4 2.4-.4.9-.7 1.7-.9 2.6-.2.9-.4 1.8-.5 2.8v.8c-.2.6-.3 1.4-.1 2h.2l.1-.1v.1h.2c.1-.5.3-.9.4-1.4.1-.1.1-.2.2-.3.3-.5.7-1 1-1.5.4-.5.8-.9 1.3-1.4.5-.5.9-.9 1.3-1.5-.2 0-.5-.3-.5-.3zm24.6-10.4c-.5-.9-1.3-2-2.8-2.5-.6-.2-1.3-.3-2-.3.3-.4.6-.7.9-1.1l-.3-.3c-.6.5-1.1 1-1.7 1.5-.5.1-1 .3-1.4.5-.2-1-.6-2.3-1.8-3.3-.8-.7-1.9-1.1-2.9-1.2-1.1-.1-2.1.7-2.3 1.8 0 .3 0 .5.1.8.3 1.1.9 2 1.8 2.7 1 .8 2.3 1.3 3.6 1.3.3 0 .6 0 .9-.1-1 1.5-1.8 3.1-2.5 4.8l-.1.1c-.2-1-.7-2.8-2.5-3.8-1.1-.6-2.3-.9-3.6-.7-1 .1-1.7 1-1.6 2.1 0 .1 0 .3.1.4.4 1.2 1.2 2.2 2.3 2.9 1.4.8 3 1 4.5.5 0 .1.1.2.2.3-.5 1.7-.8 3.4-1 5.1-.2-.6-1.4-2.8-3.9-3.3-1.2-.2-2.5 0-3.6.5-.9.5-1.3 1.6-.8 2.5.1.1.1.2.2.3.8 1 1.9 1.7 3.2 1.9.3.1.7.1 1.1.1 1.2 0 2.3-.4 3.3-1l-.1.2.2.3c.1.2.2.3.3.5-.1 1.5 0 3.1.2 4.6h.2c.2-1.3.3-2.5.4-3.8.9.8 2.1 1.2 3.4 1.2 1.2 0 2.3-.4 3.3-1 .5-.3.8-.8.8-1.4 0-.6-.2-1.1-.6-1.5-.7-.7-1.9-1.5-3.5-1.5-1.1 0-2.1.3-3 .9.2-1.2.4-2.4.8-3.6.9.8 2 1.3 3.1 1.4h.5c1 0 2-.3 2.9-.8.5-.3.8-.8.9-1.3.1-.6-.1-1.1-.5-1.5-.7-.7-1.8-1.6-3.3-1.7-.8-.1-1.7.1-2.5.4.4-1 .9-2 1.5-3 .1-.1.1-.2.2-.4.6.9 1.6 1.7 2.7 2 .6.2 1.2.3 1.8.3.6 0 1.1-.1 1.6-.2.5-.2 1-.6 1.2-1.1.5-.4.4-1 .1-1.5zm-15.2 4.9c-.9-.5-1.5-1.3-1.9-2.3-.1-.4.1-.9.5-1.1h.8c.8 0 1.6.2 2.3.6 1.5.9 1.9 2.6 2 3.3-1.2.3-2.6.1-3.7-.5zm-1.5 7.7c-1-.2-1.9-.7-2.6-1.6-.3-.4-.2-.9.1-1.2l.1-.1c.7-.3 1.4-.5 2.2-.5.3 0 .5 0 .8.1 1.7.3 2.7 1.8 3 2.5-.9.8-2.3 1.1-3.6.8zm8.8-1.3c1.3 0 2.2.6 2.8 1.2.3.3.4.9 0 1.2 0 0-.1.1-.2.1-.7.6-1.6.9-2.6.9-1.6 0-2.6-.8-3.2-1.5 0-.2.1-.4.1-.6.6-.5 1.7-1.3 3.1-1.3zm1.4-6.6c1.2.1 2.2.8 2.7 1.4.2.2.2.4.2.7 0 .3-.2.5-.4.6-.9.5-1.9.7-2.9.6-1.1-.1-2.2-.7-2.9-1.5V66c.1-.3.2-.7.3-1 .9-.5 1.9-.8 3-.7zm-1.7-5.6c-1.3.2-2.6-.2-3.6-1-.7-.6-1.2-1.3-1.4-2.2-.2-.6.2-1.2.7-1.3h.4c.9.1 1.7.4 2.4 1 1.4 1 1.5 2.7 1.5 3.5zm7.4 2.1c-.1.2-.3.4-.6.5-.9.3-1.9.3-2.9-.1-1-.3-1.9-1.1-2.4-2l.9-1.2c.9-.2 1.8-.2 2.6.1 1.2.4 1.9 1.3 2.3 2 .2.2.2.5.1.7z"/><path class="st7" d="M178.2 57.1c-.1-.5-.5-.9-1-.9-2.1 0-4.2-.2-6.3-.5-2.1-.3-4.2-.8-6.2-1.5s-3.9-1.6-5.7-2.7c-1.8-1.1-3.3-2.5-4.6-4.1l-.1-.1c-.4-.3-1-.3-1.3.1-1.2 1.4-2.8 2.8-4.3 4-1.6 1.2-3.3 2.2-5.1 3-1.8.8-3.7 1.4-5.6 1.8-1.9.4-3.9.5-5.9.3-.4 0-.7.3-.8.6-.7 4.8-.9 9.5-.6 14.3.3 4.7 1.2 9.5 2.9 13.9 1.7 4.5 4.3 8.6 7.8 11.9 3.5 3.3 7.8 5.5 12.4 6.7h.1c2.5-.1 4.9-.8 7.1-1.8 2.2-1 4.4-2.3 6.2-4 3.8-3.2 6.7-7.4 8.6-12 2-4.6 2.8-9.5 3.1-14.4.3-4.9 0-9.8-.7-14.6z"/><path class="st7" d="M145.3 78.3l7.4 5.9L167.8 67"/><path class="st4" d="M168.1 66.9c-.1-.1-.3-.2-.5-.1-1.5 1.2-2.9 2.6-4.2 3.9l-3.9 4.2c-2.3 2.6-4.6 5.1-6.9 7.7-1-.8-1.9-1.5-2.9-2.3l-1.9-1.5c-.7-.5-1.2-1.1-2.1-1.2h-.4c-.4.2-.6.6-.4 1 .3.9 1 1.2 1.6 1.8l1.8 1.5c1.2 1 2.4 2 3.7 3 .5.4 1.1.3 1.5-.1 2.5-2.9 5-5.7 7.5-8.6 1.2-1.5 2.5-2.9 3.7-4.4s2.3-3 3.3-4.7c.2.1.1-.1.1-.2z"/><path class="st5" d="M137.2 99.7c-5-.2-10-.4-15-.5-5-.1-10-.2-15-.2-10-.1-19.9-.1-29.9-.1l-29.9-.1H28.7c-.7 0-1.1 0-1.6-.1s-.9-.3-1.3-.6c-.8-.6-1.3-1.4-1.5-2.4 0-.2-.1-.5-.1-.7v-1.6l52.9-.1h4.8v2.4c0 .3.2.5.5.5h24.5c.3 0 .5-.2.5-.5V93c3.5 0 6.9-.1 10.4-.2 4.5-.1 9-.2 13.5-.4.1 0 .2-.1.2-.3 0-.1-.1-.2-.2-.2-4.5-.2-9-.3-13.5-.4-4.5-.1-9-.2-13.5-.2-9-.1-18-.1-27-.1L23.1 91c-.6 0-1.2.5-1.2 1.2V95c0 .4 0 .8.1 1.2.5 2.3 2.2 4.2 4.5 4.8.7.2 1.6.2 2.2.2h18.7l29.9-.1c10 0 19.9 0 29.9-.1 5 0 10-.1 15-.2s10-.2 15-.5c.1 0 .2-.1.2-.3 0-.2-.1-.3-.2-.3zM153.8.3L128 .2H42.9c-.6 0-1.2.1-1.8.3-1.2.3-2.3.9-3.3 1.7-1.9 1.6-3.1 4-3 6.5v82.5H37V8.8c0-2.9 1.9-5.4 4.6-6.1.4-.1.9-.2 1.4-.2h85.1l24.9-.1.2 19.7.1 10.3.2 10.3c0 .2.2.3.4.3.1 0 .3-.1.3-.3l.2-10.3.1-10.3.2-20.6c-.1-.7-.4-1.1-.9-1.2z"/><path class="st8" d="M54.3 78.8c13.6-5.6 42.9-1.9 52.5 4.1l-52.5-.2v-3.9z"/></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/stars-full.svg b/plugins/jetpack/images/stars-full.svg
deleted file mode 100644
index e5ce9684..00000000
--- a/plugins/jetpack/images/stars-full.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="54" width="56" version="1.1" viewBox="0 0 56 54"><g fill="none" opacity="0.95" stroke="none" strokeWidth="1"><g fill="#CCCED0" transform="translate(-268.000000, -101.000000)"><g transform="translate(160.000000, 32.000000)"><g transform="translate(104.000000, 69.000000)"><polyline points="53.6 10.3 59.3 8 53.6 5.7 51.3 0 49 5.7 43.3 8 49 10.3 51.3 16 53.6 10.3"/><polyline points="10.5 51.2 14.8 49.5 10.5 47.8 8.8 43.5 7 47.8 2.8 49.5 7 51.2 8.8 55.5 10.5 51.2" transform="translate(8.757724, 49.487494) rotate(315.000000) translate(-8.757724, -49.487494) "/></g></g></g></g></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/stars-left.svg b/plugins/jetpack/images/stars-left.svg
deleted file mode 100644
index 56c86f36..00000000
--- a/plugins/jetpack/images/stars-left.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0" y="0" viewBox="0 0 137 96" xml:space="preserve"><style type="text/css">
- .st0{fill:#F6F6F6;}
-</style><path class="st0" d="M33.5 6c0-2.8 2.2-5 5-5s5 2.2 5 5 -2.2 5-5 5S33.5 8.8 33.5 6"/><polyline class="st0" points="7 92.9 13 95.5 10.4 89.5 13 83.5 7 86.1 1 83.5 3.6 89.5 1 95.5 7 92.9 "/><polyline class="st0" points="128.2 36.7 137 33.2 128.2 29.7 124.6 20.8 121.1 29.7 112.3 33.2 121.1 36.7 124.6 45.6 128.2 36.7 "/></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/stars-right.svg b/plugins/jetpack/images/stars-right.svg
deleted file mode 100644
index 4e2ec80c..00000000
--- a/plugins/jetpack/images/stars-right.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0" y="0" viewBox="0 0 111 77" xml:space="preserve"><style type="text/css">
- .st0{fill:#F6F6F6;}
-</style><path class="st0" d="M0 71.2c0-2.8 2.2-5 5-5s5 2.2 5 5c0 2.8-2.2 5-5 5S0 74 0 71.2"/><polyline class="st0" points="101.4 15.9 110.2 12.4 101.4 8.9 97.9 0 94.3 8.9 85.5 12.4 94.3 15.9 97.9 24.8 101.4 15.9 "/></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/stats-example-lrg.png b/plugins/jetpack/images/stats-example-lrg.png
deleted file mode 100644
index 30f0ab29..00000000
--- a/plugins/jetpack/images/stats-example-lrg.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/stats-example-med.png b/plugins/jetpack/images/stats-example-med.png
deleted file mode 100644
index 8a8af769..00000000
--- a/plugins/jetpack/images/stats-example-med.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/stats-example-sm.png b/plugins/jetpack/images/stats-example-sm.png
deleted file mode 100644
index 2bf7a36c..00000000
--- a/plugins/jetpack/images/stats-example-sm.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/stats-people.svg b/plugins/jetpack/images/stats-people.svg
deleted file mode 100644
index 25725e66..00000000
--- a/plugins/jetpack/images/stats-people.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg id="statistics" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1467.42 1161.79"><title>stats-Jpop</title><path d="M1810.29,2447.23c114.22-3.93,228.44-4.76,342.67-5.74l342.66-.9c228.44.86,456.88.37,685.33,5.22a2.85,2.85,0,0,1,0,5.71c-228.44,4.85-456.88,4.36-685.33,5.22l-342.66-.9c-114.22-1-228.44-1.81-342.67-5.74a1.43,1.43,0,0,1,0-2.85Z" transform="translate(-1808.91 -1374.56)" style="fill:#F6F6F6"/><circle cx="342.28" cy="236.85" r="10.46" style="fill:#fff"/><path d="M3200.19,1855.86c-5.53-.1-8.08-.86-13.6-2.71-22.72-7.6-33.68-27.23-32.8-49.31.25-6.26-10.59-10.46-8.43-16.9,2.79-8.33,17.59-7.76,25.09-23.77,8.41-18,30.65-22.55,51.46-15.58A55.66,55.66,0,0,1,3257,1818" transform="translate(-1808.91 -1374.56)" style="fill:#fff"/><path d="M3200.19,1859.43h-.07c-6.1-.12-9.06-1-14.65-2.89-23.08-7.72-36.24-27.47-35.24-52.84.06-1.43-1.72-3.37-3.45-5.24-2.79-3-6.62-7.2-4.8-12.65,1.64-4.9,5.89-7.29,10.39-9.83,5.19-2.93,11.08-6.25,14.85-14.32,8.62-18.39,31.6-25.56,55.82-17.46a59.23,59.23,0,0,1,37.38,75,3.57,3.57,0,1,1-6.77-2.26,52.09,52.09,0,0,0-32.86-65.93c-16.94-5.69-38.91-3.78-47.1,13.71-4.75,10.14-12.3,14.39-17.82,17.51-3.94,2.22-6.4,3.69-7.12,5.87-.46,1.37.93,3,3.27,5.55,2.58,2.81,5.51,6,5.34,10.36-.88,22,10.47,39.13,30.36,45.78,5.39,1.8,7.51,2.43,12.53,2.53a3.57,3.57,0,0,1-.07,7.13Z" transform="translate(-1808.91 -1374.56)" style="fill:#204A69"/><path d="M3206.25,1786.27c-8.11,20.28-6.08,54.07,14.87,62.18S3257,1818,3257,1818Z" transform="translate(-1808.91 -1374.56)" style="fill:#4e748f"/><path d="M3264.82,2080.61c18.25,140.92,2.92,442,2.92,442h-68.93l-6.08-252.44" transform="translate(-1808.91 -1374.56)" style="fill:#204A69"/><path d="M3270.23,2525.26h-74l-6.15-255,5.24-.13,6,249.89h63.88c1.41-29.24,14.12-306.75-3-439.08l5.2-.67c18.07,139.55,3.09,439.49,2.94,442.5Z" transform="translate(-1808.91 -1374.56)" style="fill:#204A69"/><path d="M3267.75,2515.55c-21,.68-84.47,4.73-93.94,8.11s-10.14,4.72,1.35,7.43,92.58,0,92.58,0Z" transform="translate(-1808.91 -1374.56)" style="fill:#204A69"/><path d="M3204.73,2534.9c-14.12,0-26.12-.31-30.17-1.27-7.3-1.71-10.39-2.91-10.55-5.88s3.25-4.54,8.91-6.56c10.17-3.63,75.77-7.65,94.74-8.26l2.7-.08v20.78l-2.53.08C3265.66,2533.78,3231.43,2534.9,3204.73,2534.9Zm-33.35-7.52c1,.31,2.43.69,4.38,1.15,8.58,2,60.78.93,89.37,0v-10.28c-24.46.94-82.11,4.89-90.44,7.86C3173.28,2526.63,3172.2,2527,3171.38,2527.39Z" transform="translate(-1808.91 -1374.56)" style="fill:#204A69"/><path d="M3152.17,2077.57s-7.54,106.8-11.15,217c-3,92.11,8,189.33,7.1,228.11h75c-1-225.07,43.71-318.34,41.68-442" transform="translate(-1808.91 -1374.56)" style="fill:#6F93AD"/><path d="M3270.37,1925c8.24,77.18-5.55,155.59-5.55,155.59l-113.66-3,1.69-69.62,26.36-14.19-32.1-62.18,21.29-22.3,32.32-33.38C3233.95,1868.15,3266.75,1891.09,3270.37,1925Z" transform="translate(-1808.91 -1374.56)" style="fill:#6F93AD"/><polygon points="1380.78 613.8 1375.71 982.83 1328.06 982.83 1335.15 636.1 1380.78 613.8" style="fill:#BBC9D5"/><path d="M3202.87,1973.15c-44.61,38.53-88.2,49.68-106.45,34.46-27.25-22.73,21.12-112.57,24.33-125.71,11.15-45.62,36.5-45.61,42.58-40.54s-6.08,33.45-6.08,33.45l-11.15,60.84" transform="translate(-1808.91 -1374.56)" style="fill:#fff"/><path d="M3117.62,2017.71c-9.48,0-17.52-2.39-23.49-7.36-23.7-19.77,2.59-80.65,16.71-113.35,3.14-7.27,5.85-13.54,6.44-15.95,7.88-32.25,22.63-41.54,30.71-44.2,7.69-2.54,14.37-.94,17.62,1.77,7.23,6-.9,27.75-4.93,37.23l-11.08,60.44a3.65,3.65,0,0,1-4.15,2.87,3.57,3.57,0,0,1-2.87-4.15l11.15-60.84a3.6,3.6,0,0,1,.23-.77c5.6-13.06,9-27,7.05-29.33-1.32-1.09-5.43-2.22-10.79-.44-6.68,2.2-19,10.21-26,39.12-.72,3-3.28,8.89-6.81,17.08-12.44,28.78-38.31,88.69-18.69,105,15.3,12.74,56.18,5,101.83-34.43a3.57,3.57,0,1,1,4.67,5.41C3174.15,2002.65,3141.41,2017.71,3117.62,2017.71Z" transform="translate(-1808.91 -1374.56)" style="fill:#204A69"/><path d="M3130.88,1954.42a3.57,3.57,0,0,1-2.46-6.15l41.57-39.55a3.57,3.57,0,0,1,4.92,5.17l-41.57,39.55A3.56,3.56,0,0,1,3130.88,1954.42Z" transform="translate(-1808.91 -1374.56)" style="fill:#204A69"/><path d="M3223.14,2515.55c-21,.68-84.47,4.73-93.94,8.11s-10.14,8.78,1.35,11.49,92.58,0,92.58,0Z" transform="translate(-1808.91 -1374.56)" style="fill:#6F93AD"/><path d="M3196.79,1879.38a3.56,3.56,0,0,1-3.39-2.45l-6.13-18.6a3.56,3.56,0,0,1,3.17-4.68l10.85-.65a3.41,3.41,0,0,1,3,1.28,3.57,3.57,0,0,1,.72,3.14l-4.72,19.25a3.56,3.56,0,0,1-3.32,2.72Zm-1.3-18.88.79,2.4.61-2.48Z" transform="translate(-1808.91 -1374.56)" style="fill:#204A69"/><path d="M3232,2088.41c-21,0-45.73-2-63-9.6a3.57,3.57,0,0,1,2.88-6.52c33.17,14.63,98.86,6.9,99.51,6.82a3.57,3.57,0,0,1,.86,7.08A365.43,365.43,0,0,1,3232,2088.41Z" transform="translate(-1808.91 -1374.56)" style="fill:#BBC9D5"/><path d="M3146.4,2183.07a88.8,88.8,0,0,1-15.83-1.29,3.57,3.57,0,0,1,1.28-7c9.75,1.78,22.38,1.55,37.57-.71a3.56,3.56,0,0,1,1,7.05A164.31,164.31,0,0,1,3146.4,2183.07Z" transform="translate(-1808.91 -1374.56)" style="fill:#fff"/><path d="M3237.44,1883.42a39.43,39.43,0,0,1-12.49-2.33h0c-7.3-2.48-7.35-7.25-7-9.2,1.27-7.73,15.16-15.31,24.6-15.32h0c5.69,0,9.55,2.86,10.36,7.68,1.45,8.65-1.55,13.28-4.33,15.64S3242,1883.42,3237.44,1883.42Zm-12.49-10.31a5,5,0,0,0,2.29,1.23h0c7.54,2.57,13.79,2.61,16.71.13,2-1.69,2.64-4.73,1.92-9-.09-.52-.38-2.12-4.62-1.66-7.74.81-16.38,7.12-16.3,9.33Z" transform="translate(-1808.91 -1374.56)" style="fill:#BBC9D5"/><path d="M3184.62,1892.57a3.57,3.57,0,0,1-2.52-6.09c11.86-11.87,34.54-15.08,35.5-15.21a3.57,3.57,0,0,1,1,7.06c-.22,0-21.27,3-31.42,13.19A3.56,3.56,0,0,1,3184.62,1892.57Z" transform="translate(-1808.91 -1374.56)" style="fill:#BBC9D5"/><path d="M3260.65,1826.68a3.55,3.55,0,0,1-2-.62l-111.51-76a3.57,3.57,0,0,1,4-5.89l111.51,76a3.57,3.57,0,0,1-2,6.51Z" transform="translate(-1808.91 -1374.56)" style="fill:#BBC9D5"/><path d="M3165.72,1825.06a26,26,0,0,1-8.74-1.53,3.57,3.57,0,0,1,2.62-6.63,18.42,18.42,0,0,0,7.5,1,3.57,3.57,0,0,1,.61,7.11C3167,1825,3166.36,1825.06,3165.72,1825.06Z" transform="translate(-1808.91 -1374.56)" style="fill:#204A69"/><rect x="3170.08" y="1786.4" width="6.38" height="11.77" rx="3.19" ry="3.19" transform="translate(4161.02 2754.53) rotate(-169.58)" style="fill:#204A69"/><path d="M2424.88,2218.25c-10.61,1.1-21.23,1.69-31.85,2.12s-21.23.69-31.85.77c-21.23.09-42.46-.35-63.69-2.9a5.93,5.93,0,0,1,0-11.77c21.23-2.54,42.46-3,63.69-2.9,10.61.08,21.23.2,31.85.77s21.23,1,31.85,2.12a5.92,5.92,0,0,1,0,11.77Z" transform="translate(-1808.91 -1374.56)" style="fill:#CCCED0"/><path d="M2748.44,1456c35.39-1.17,70.77-1.75,106.16-2.2,4.56,0,8.55-.26,13.57-.06a65.86,65.86,0,0,1,14.79,1.91,74.5,74.5,0,0,1,56.52,62.93c1.12,10.5.54,18.55.63,27.59l-.14,26.54-.35,53.08c-.53,35.39-1.07,70.78-2.39,106.16a5.89,5.89,0,0,1-11.77,0c-1.31-35.39-1.85-70.78-2.39-106.16l-.35-53.08-.15-26.54c-.2-8.63.28-18.34-.48-25.44a57.39,57.39,0,0,0-43.09-48.75,57.89,57.89,0,0,0-11.44-1.69c-3.81-.3-8.68-.19-13-.31-35.39-.45-70.77-1-106.16-2.2a5.89,5.89,0,0,1,0-11.77Z" transform="translate(-1808.91 -1374.56)" style="fill:#CCCED0"/><path d="M2297.49,1456c24.52-1.1,49-1.69,73.56-2.12,24.52-.64,49-.46,73.57-.73s49,.24,73.56.43c24.52.55,49,1.08,73.56,2.42a5.89,5.89,0,0,1,0,11.77c-24.52,1.34-49,1.87-73.56,2.42-24.52.19-49,.61-73.56.43s-49-.09-73.57-.73c-24.52-.43-49-1-73.56-2.12a5.89,5.89,0,0,1,0-11.77Z" transform="translate(-1808.91 -1374.56)" style="fill:#CCCED0"/><path d="M2291.6,2212.37c-1.1-36-1.7-71.93-2.13-107.89-.64-36-.46-71.93-.73-107.89s.24-71.93.43-107.89c.55-36,1.08-71.93,2.42-107.89a5.89,5.89,0,0,1,11.77,0c1.34,36,1.87,71.93,2.42,107.89.19,36,.61,71.93.43,107.89s-.09,71.93-.73,107.89c-.43,36-1,71.93-2.13,107.89a5.89,5.89,0,0,1-11.77,0Z" transform="translate(-1808.91 -1374.56)" style="fill:#CCCED0"/><path d="M2698.77,1633.75c12.8-1.1,25.6-1.69,38.41-2.12s25.61-.69,38.41-.77c25.6-.09,51.21.35,76.82,2.9a5.91,5.91,0,0,1,0,11.77c-25.6,2.54-51.21,3-76.82,2.9-12.8-.09-25.61-.2-38.41-.77s-25.6-1-38.41-2.12a5.91,5.91,0,0,1,0-11.77Z" transform="translate(-1808.91 -1374.56)" style="fill:#CCCED0"/><path d="M2658.51,1726c12.81-1.1,25.61-1.7,38.41-2.12s25.6-.69,38.41-.77c25.6-.09,51.21.36,76.82,2.9a5.91,5.91,0,0,1,0,11.77c-25.61,2.54-51.21,3-76.82,2.9-12.81-.09-25.61-.2-38.41-.77s-25.6-1-38.41-2.12a5.91,5.91,0,0,1,0-11.77Z" transform="translate(-1808.91 -1374.56)" style="fill:#CCCED0"/><path d="M2396.91,1911.59c15.8-1.1,31.6-1.69,47.41-2.12,15.8-.64,31.6-.46,47.4-.73s31.6.05,47.41.43c15.8.55,31.6,1.08,47.41,2.42a5.91,5.91,0,0,1,0,11.77c-15.8,1.34-31.6,1.87-47.41,2.42-15.8.38-31.6.62-47.41.43s-31.6-.09-47.4-.73c-15.8-.43-31.6-1-47.41-2.12a5.9,5.9,0,0,1,0-11.77Z" transform="translate(-1808.91 -1374.56)" style="fill:#CCCED0"/><path d="M2366.13,2003.87c13.41-1.1,26.82-1.69,40.23-2.12s26.82-.69,40.23-.77c26.82-.09,53.64.35,80.46,2.9a5.91,5.91,0,0,1,0,11.77c-26.82,2.54-53.64,3-80.46,2.9-13.41-.09-26.82-.2-40.23-.77s-26.82-1-40.23-2.12a5.9,5.9,0,0,1,0-11.77Z" transform="translate(-1808.91 -1374.56)" style="fill:#CCCED0"/><path d="M2366.13,2096.15a149.52,149.52,0,0,1,29.38-2.9c9.79-.09,19.58.35,29.38,2.9a6.08,6.08,0,0,1,0,11.77c-9.79,2.54-19.58,3-29.38,2.9a149.52,149.52,0,0,1-29.38-2.9,6,6,0,0,1,0-11.77Z" transform="translate(-1808.91 -1374.56)" style="fill:#CCCED0"/><rect x="686.71" y="728.44" width="127.12" height="162.91" style="fill:#6F93AD"/><rect x="878.2" y="516.03" width="127.12" height="375.32" style="fill:#6F93AD"/><rect x="1069.69" y="428.71" width="127.12" height="462.64" style="fill:#6F93AD"/><rect x="686.71" y="801.91" width="127.12" height="89.43" style="fill:#204A69"/><rect x="878.2" y="690.02" width="127.12" height="201.32" style="fill:#204A69"/><rect x="1069.69" y="611.61" width="127.12" height="279.74" style="fill:#204A69"/><path d="M2540.74,1646.35c8.89-16.22,18.2-32.17,27.66-48,9.27-16,19.25-31.52,28.84-47.3s19.68-31.24,29.82-46.68,20.56-30.7,31.51-45.62a5.9,5.9,0,0,1,10,6.26c-8.69,16.35-18.06,32.27-27.41,48.2s-19.11,31.6-29.09,47.14-19.71,31.23-30.07,46.52c-10.18,15.41-20.51,30.73-31.26,45.78a5.89,5.89,0,0,1-10-6.26Z" transform="translate(-1808.91 -1374.56)" style="fill:#46799A"/><path d="M2383,1604a359.32,359.32,0,0,1,39,24.15c12.49,8.76,24.66,18,35.62,28.87a6,6,0,0,1-6.82,9.59c-13.9-6.77-26.59-15.23-39-24.15a359.23,359.23,0,0,1-35.62-28.87A5.94,5.94,0,0,1,2383,1604Z" transform="translate(-1808.91 -1374.56)" style="fill:#46799A"/><path d="M2226.9,1704a466.82,466.82,0,0,1,26-45.41c9.39-14.66,19.23-29,30.84-42.26a5.95,5.95,0,0,1,9.88,6.4c-7.34,16-16.43,30.85-26,45.41a467.5,467.5,0,0,1-30.84,42.26,5.93,5.93,0,0,1-9.88-6.4Z" transform="translate(-1808.91 -1374.56)" style="fill:#46799A"/><circle cx="882.15" cy="41.15" r="24.69" style="fill:#BBC9D5"/><circle cx="2691.06" cy="1410.87" r="36.31" transform="translate(-1891.39 1277.2) rotate(-51.77)" style="fill:#BBC9D5"/><circle cx="2509.16" cy="1698.49" r="36.31" transform="translate(-2186.67 1243.96) rotate(-51.77)" style="fill:#BBC9D5"/><circle cx="2330.53" cy="1566.48" r="36.31" transform="translate(-2151.06 1053.31) rotate(-51.77)" style="fill:#BBC9D5"/><circle cx="2201.41" cy="1755.4" r="36.31" transform="translate(-2348.69 1023.9) rotate(-51.77)" style="fill:#BBC9D5"/><path d="M2023.22,2424.52c8.94,3.09,37.52,8.59,46.15,11.42,7.06,2.32,5.38,12.72-2,12.72h-76.9A14.56,14.56,0,0,1,1976,2432l1.25-8.72Z" transform="translate(-1808.91 -1374.56)" style="fill:#6F93AD"/><polygon points="197 517.05 240.27 517.05 247.41 418.79 197 418.79 197 517.05" style="fill:#CCCED0"/><path d="M1960.79,1877.85c-21.63-2.7-79.75,70.29-90.57,98.68s59.48,44.61,59.48,44.61" transform="translate(-1808.91 -1374.56)" style="fill:#204A69"/><path d="M1929.7,2024.7a3.53,3.53,0,0,1-.8-.09c-2-.47-49.68-11.68-60.91-32.72a19.33,19.33,0,0,1-1.1-16.63c10-26.2,69.35-104.25,94.34-101a3.57,3.57,0,0,1,3.1,4,3.67,3.67,0,0,1-4,3.1c-18.28-2.3-75.79,67.51-86.81,96.41a12.35,12.35,0,0,0,.74,10.74c8.06,15.11,43.31,26.15,56.21,29.12a3.57,3.57,0,0,1-.8,7Z" transform="translate(-1808.91 -1374.56)" style="fill:#204A69"/><path d="M1885,2230.24s-40.94,78-35,151.84l6.76,19.61L1986,2223.56" transform="translate(-1808.91 -1374.56)" style="fill:#CCCED0"/><path d="M1856.7,2405.25a3.3,3.3,0,0,1-.52,0,3.57,3.57,0,0,1-2.85-2.36l-6.76-19.61a3.45,3.45,0,0,1-.18-.88c-5.92-74,33.74-150.56,35.44-153.78a3.57,3.57,0,1,1,6.31,3.32c-.4.77-40.22,77.68-34.68,149.45l4.38,12.69,125.28-172.57a3.57,3.57,0,0,1,5.77,4.19l-129.3,178.12A3.56,3.56,0,0,1,1856.7,2405.25Z" transform="translate(-1808.91 -1374.56)" style="fill:#204A69"/><path d="M2040.54,2216.49s-9.12,184.52-19.26,215.95l-38.53-1c-2-64.89-24.33-148-26.36-231.15" transform="translate(-1808.91 -1374.56)" style="fill:#CCCED0"/><path d="M2021.28,2436h-.1l-38.53-1a3.57,3.57,0,0,1-3.47-3.46c-.93-29.79-6.19-63.63-11.77-99.47-6.63-42.66-13.5-86.78-14.59-131.71a3.57,3.57,0,0,1,3.48-3.65,3.73,3.73,0,0,1,3.65,3.48c1.08,44.46,7.91,88.34,14.51,130.78,5.4,34.73,10.51,67.6,11.73,97l32.43.86c9.59-37,18.28-210.7,18.37-212.49a3.62,3.62,0,0,1,3.73-3.39,3.56,3.56,0,0,1,3.39,3.73c-.37,7.55-9.27,185.36-19.43,216.87A3.56,3.56,0,0,1,2021.28,2436Z" transform="translate(-1808.91 -1374.56)" style="fill:#204A69"/><path d="M2055.93,1840.79c-9.35,2.26-19.79-.81-19.79-.81-.61,0-.91.65-.44,1l16.32,17.34,4.31-18.57" transform="translate(-1808.91 -1374.56)" style="fill:#204A69"/><path d="M2053.74,1864.71l-21.63-23,.43-2.39a3.63,3.63,0,0,1,3.73-2.48l.74.12c.1,0,9.8,2.79,18.17.77l.45,1.83,3.73.86Zm-10.51-20.25,7.06,7.47,1.7-7.35A45.31,45.31,0,0,1,2043.23,1844.46Z" transform="translate(-1808.91 -1374.56)" style="fill:#204A69"/><path d="M2044.8,1728.93c21.92-1.05,42.08,9.4,45.3,29,2.87,17.44,17.27,20.91,17.7,29.68.33,6.78-11.24,7.88-12.7,14-5.14,21.5-21,37.41-44.95,38.56-5.81.28-8.48.32-13.82-1.09" transform="translate(-1808.91 -1374.56)" style="fill:#CCCED0"/><path d="M2045.28,1843.84a35.7,35.7,0,0,1-9.87-1.36,3.56,3.56,0,0,1-2.54-4.35,3.53,3.53,0,0,1,4.35-2.54c4.88,1.28,7.09,1.25,12.74,1,21-1,36.52-14.4,41.65-35.83,1-4.26,4.7-6.52,7.94-8.52,2.95-1.82,4.74-3,4.67-4.45-.11-2.3-2.08-4.38-5.27-7.59-4.46-4.49-10.57-10.63-12.39-21.68-3.14-19.08-23.79-26.87-41.61-26a3.41,3.41,0,0,1-3.73-3.39,3.56,3.56,0,0,1,3.39-3.73c25.51-1.2,45.7,11.91,49,32,1.45,8.79,6.21,13.58,10.41,17.81,3.64,3.66,7.09,7.13,7.33,12.28.28,5.74-4.53,8.7-8,10.87-2.17,1.34-4.41,2.72-4.74,4.1-5.82,24.32-24.3,40.14-48.24,41.29C2048.41,1843.77,2046.8,1843.84,2045.28,1843.84Z" transform="translate(-1808.91 -1374.56)" style="fill:#204A69"/><path d="M2089.61,1819.54a3.52,3.52,0,0,1-1.32-.26c-.36-.14-8.77-3.58-12.26-11.7a3.56,3.56,0,1,1,6.55-2.81c2.31,5.36,8.3,7.88,8.37,7.9a3.57,3.57,0,0,1-1.34,6.88Z" transform="translate(-1808.91 -1374.56)" style="fill:#204A69"/><rect x="270.41" y="397.77" width="6.38" height="11.77" rx="3.19" ry="3.19" style="fill:#204A69"/><path d="M2053.72,1864.67c-59.65-18.92-85.24-5.17-108,29.4-37,56.27-15.88,70.29-29.4,121.66s-45.12,73.53-39,220h171.34s16.22-168.83,11.15-218" transform="translate(-1808.91 -1374.56)" style="fill:#6F93AD"/><path d="M1876.49,2381.14s-39.78,69.88-53.14,67c-8-1.75,4.7-35.73,8.94-51.66,3-11.1,5.42-18.39,16.85-17.24Z" transform="translate(-1808.91 -1374.56)" style="fill:#6F93AD"/><path d="M2088.53,1926.51a85,85,0,0,0,20.82-24.57c13.7-24.11,48.3-65.4,56.91-54.51s-6.62,48.93-19.6,55.42c-9.46,30.41-58.46,133.43-87.86,125.27s-52.72-164.34-12.17-162.3,43.59,91.77,43.59,91.77" transform="translate(-1808.91 -1374.56)" style="fill:#CCCED0"/><path d="M2062,2032.12a15.34,15.34,0,0,1-4.17-.56c-25.25-7-41.64-96.91-34.85-138.8,4.21-26,15.1-31,23.82-30.5,25.43,1.28,37.15,32.56,42.51,58.94a85.86,85.86,0,0,0,16.92-21c10.85-19.1,40.24-56.92,55.37-58.08a8.68,8.68,0,0,1,7.43,3.11c4.49,5.66,3.57,15.25,2,22.3-3.11,14-12,31.83-21.42,37.75C2140,1934.77,2094.68,2032.11,2062,2032.12Zm-16.12-162.76c-9.8,0-14,13.27-15.86,24.53-7.1,43.83,11.51,125.73,29.72,130.79,24.95,7,73.07-89.37,83.5-122.89a3.57,3.57,0,0,1,1.81-2.13c6.91-3.46,15.8-19.21,19-33.7,1.69-7.59,1.46-13.69-.62-16.32-.18-.22-.39-.49-1.3-.43-9.91.76-36.84,31.84-49.71,54.49a88.71,88.71,0,0,1-21.64,25.56,238,238,0,0,1,3,28.21,3.57,3.57,0,0,1-7.13.24c0-.86-3.38-86.48-40.2-88.33Z" transform="translate(-1808.91 -1374.56)" style="fill:#204A69"/><path d="M1951.26,1894.1c19.06,11.76,47.25.67,63-24.79,8.56-13.87,11.61-29.12,9.57-42.05,19.12-5.59,29-29.08,25.35-46.23,21.07-1.42,29.92-26.68,27.22-49.17,0,0-18.92-11.49-39.2-5.41-12.32,3.7-21.17,6.25-31,23.64-10.79,2.77-21.14,9.52-27.15,18.26-4.34,6.31-7.53,15.15-8.91,24.27a26.45,26.45,0,0,1-9.66,16.63,69,69,0,0,0-15.26,17.45C1929.49,1852.16,1932.2,1882.34,1951.26,1894.1Z" transform="translate(-1808.91 -1374.56)" style="fill:#204A69"/></svg>
diff --git a/plugins/jetpack/images/stats-smiley.gif b/plugins/jetpack/images/stats-smiley.gif
deleted file mode 100644
index 69a16271..00000000
--- a/plugins/jetpack/images/stats-smiley.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/images/stats.svg b/plugins/jetpack/images/stats.svg
deleted file mode 100644
index 645cd97c..00000000
--- a/plugins/jetpack/images/stats.svg
+++ /dev/null
@@ -1,32 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400" viewBox="0 0 400 400" version="1.1">
- <title>
- Stats
- </title>
- <desc>
- Created with Sketch.
- </desc>
- <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
- <g id="Stats">
- <circle id="Oval" fill="#D2DCE4" cx="200.21" cy="200" r="199.72"/>
- <rect id="Rectangle-path" fill="#8FACBF" x="77.77" y="173.77" width="70.26" height="152.63"/>
- <rect id="Rectangle-path" fill="#8FACBF" x="164.31" y="93.91" width="70.26" height="232.49"/>
- <rect id="Rectangle-path" fill="#485566" opacity="0.08" x="199.44" y="93.63" width="35.13" height="232.77"/>
- <rect id="Rectangle-path" fill="#8FACBF" x="250.85" y="133.98" width="70.26" height="192.42"/>
- <rect id="Rectangle-path" fill="#485566" opacity="0.08" x="113.46" y="173.77" width="34.57" height="152.63"/>
- <rect id="Rectangle-path" fill="#485566" opacity="0.08" x="286.26" y="133.7" width="34.78" height="192.7"/>
- <path d="M202.09 250.09L182.96 263.72 171.06 253.5C170.5 254.26 169.95 255.1 169.46 255.93L164.31 252.66 164.31 266.71 166.75 268.31C167.72 279.37 176.9 288 188.17 288 200.07 288 209.74 278.33 209.74 266.43 209.74 262.89 208.9 259.62 207.37 256.7L234.5 215.51 234.5 193.95 200.14 245.98 202.09 250.09 202.09 250.09Z" id="Shape" fill="#647A88" opacity="0.4"/>
- <path d="M306.23 208L305.39 200C304.42 201.04 303.58 202.09 302.82 203.27L274.5 181.63C275.34 180.38 276.03 179.06 276.66 177.67L260.17 166.19 250.78 166.19 250.78 189.91C252.73 190.47 254.75 190.82 256.83 190.82 259.69 190.82 262.4 190.26 264.9 189.22L299.48 215.65C300.03 226.99 309.29 236.03 320.77 236.17L320.77 210.43 306.23 208 306.23 208Z" id="Shape" fill="#647A88" opacity="0.4"/>
- <path d="M128.35 221.01L89.39 222.4 87.03 221.15C87.65 223.23 88.56 225.11 89.67 226.85L77.77 238.75 77.77 255.51 98.71 234.64C101.43 235.9 104.42 236.59 107.62 236.59 110.75 236.59 113.74 235.9 116.45 234.64L147.97 254.75 147.97 240.7 125.77 226.57C126.89 224.83 127.72 222.96 128.35 221.01L128.35 221.01Z" id="Shape" fill="#647A88" opacity="0.4"/>
- <path d="M320.83 221.01L255.17 171.13 187.2 269.01 102.89 212.66 21.84 289.81C54.75 354.99 122.23 399.72 200.21 399.72 310.54 399.72 399.93 310.33 399.93 200 399.93 171.34 393.81 144.07 382.96 119.44L320.83 221.01 320.83 221.01Z" id="Shape" fill="#FFFFFF" opacity="0.17"/>
- <path d="M378.71 110.4L319.44 206.12 252.45 154.92 186.43 254.96 104 202.43 20.03 286.12C21.84 289.88 23.79 293.57 25.81 297.11L105.67 217.53 189.98 271.23 255.37 172.03 322.64 223.44 384.63 123.27C382.82 118.96 380.87 114.64 378.71 110.4L378.71 110.4Z" id="Shape" fill="#647A88"/>
- <ellipse id="Oval" fill="#FFFFFF" cx="188.17" cy="262.47" rx="17.53" ry="17.53"/>
- <ellipse id="Oval" fill="#FFFFFF" cx="107.62" cy="212.66" rx="17.53" ry="17.53"/>
- <path d="M107.62 195.2L107.62 230.19C117.29 230.19 125.15 222.33 125.15 212.66 125.15 202.99 117.29 195.2 107.62 195.2L107.62 195.2Z" id="Shape" fill="#F0F3F4"/>
- <path d="M188.17 244.94L188.17 279.93C197.84 279.93 205.7 272.07 205.7 262.4 205.7 252.8 197.84 244.94 188.17 244.94L188.17 244.94Z" id="Shape" fill="#F0F3F4"/>
- <ellipse id="Oval" fill="#FFFFFF" cx="256.9" cy="167.3" rx="17.53" ry="17.53"/>
- <path d="M256.9 149.84L256.9 184.83C266.57 184.83 274.43 176.97 274.43 167.3 274.43 157.63 266.57 149.84 256.9 149.84L256.9 149.84Z" id="Shape" fill="#F0F3F4"/>
- <ellipse id="Oval" fill="#FFFFFF" cx="321.04" cy="212.66" rx="17.53" ry="17.53"/>
- <path d="M320.83 195.2L320.83 230.19C330.5 230.19 338.37 222.33 338.37 212.66 338.37 202.99 330.5 195.2 320.83 195.2L320.83 195.2Z" id="Shape" fill="#F0F3F4"/>
- </g>
- </g>
-</svg>
diff --git a/plugins/jetpack/images/themes.svg b/plugins/jetpack/images/themes.svg
deleted file mode 100644
index 0ed5e767..00000000
--- a/plugins/jetpack/images/themes.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1562.02 968.34"> <path d="M1025.39 422.63v304h186.89V403.28h-167.54a19.34 19.34 0 0 0-19.35 19.35z" fill="none"/><path d="M937.22 214.55v-66.48H732.67c1.43 2.42 2.76 4.91 4 7.46a97.51 97.51 0 0 1-45.91 129.77l-1.12.53-1.7.78a103.66 103.66 0 0 1-12.4 4.49l-1.95.52c-.74.19-1.49.39-2.24.57q-1.71.41-3.44.76c-2-3.57-2.59-12.67-3-17.89-.57-8.53-.89-13.23-4.33-14.63-5.44-2.19-12.54 3.41-17.3 13.66a45.49 45.49 0 0 0-4.29 20.29 97.48 97.48 0 0 1-78.41-138.84c1.22-2.55 2.55-5 4-7.46H352.13v345.3c30.68.61 91.09-10.69 91.91 17.83v-102.7h395.1v122.07c31.53-.25 63.17 7.34 94.57 2.12a2.54 2.54 0 0 1 3 1.87c3.06 18.42 15.24 184.72 16.49 201.18 1.13 15 3.61 29.66.47 44.63a2.57 2.57 0 0 1-2.49 1.75c-11.26.59-22.59 2.08-33.86 2-10.57 0-50.89-1.13-53.77-2.15-3.56-1.26-20.91 2.91-29.77 3.48-8.49.54-42.08 2.8-50.36 3-10.37.2-21.3-.12-21.55-10.11-.14-5.61-5.37-46-4.63-51.76h-310c0 1.3-64.18-.14-95-.4v91.12H1276V214.55zm275.06 512h-186.89v-304a19.34 19.34 0 0 1 19.34-19.34h167.55z" fill="#F6F6F6"/><path d="M736.65 155.53c-1.22-2.55-2.55-5-4-7.46a99.35 99.35 0 0 0-3.57-5.64 97.45 97.45 0 0 0-160.89 0c-1.26 1.84-2.45 3.74-3.59 5.67-1.43 2.42-2.76 4.91-4 7.46a97.48 97.48 0 0 0 78.42 138.82 45.49 45.49 0 0 1 4.29-20.29c4.75-10.25 11.85-15.85 17.3-13.66 3.44 1.4 3.76 6.1 4.33 14.63.36 5.22 1 14.32 3 17.89q1.73-.35 3.44-.76c.75-.18 1.49-.37 2.24-.57l1.95-.52a103.66 103.66 0 0 0 12.4-4.49l1.7-.78 1.12-.53a97.51 97.51 0 0 0 45.91-129.77z" fill="#D8DEE4"/><path d="M1212.02 404.03h-167.53a19.34 19.34 0 0 0-19.34 19.34v304h186.87z" fill="none"/><path fill="#6F93AD" d="M936.97 71.05V215.3H1327.68V71.05H936.97z"/><path d="M379.27 635.72l52-.38 3.78 41.27-42.35-3.82s-16.82-3.37-13.43-37.07z" fill="#F6F6F6"/><path d="M368.35 155.53h-16.79a6.71 6.71 0 0 1-6.71-6.71v-16.79a6.715 6.715 0 1 1 13.43 0v10.07h10.07a6.715 6.715 0 0 1 0 13.43zM351.57 104.59a6.71 6.71 0 0 1-6.71-6.71V63.72a6.715 6.715 0 0 1 13.43 0v34.16a6.71 6.71 0 0 1-6.72 6.71zm9.13-66.52a6.71 6.71 0 0 1-5.59-10.43 61.47 61.47 0 0 1 29.41-23.59 6.714 6.714 0 1 1 4.8 12.54 48.88 48.88 0 0 0-23 18.48 6.7 6.7 0 0 1-5.62 3zm905.71-.17a6.7 6.7 0 0 1-5.59-3 48.78 48.78 0 0 0-23.09-18.39 6.714 6.714 0 0 1 4.75-12.56 61.51 61.51 0 0 1 29.51 23.47 6.71 6.71 0 0 1-5.57 10.45zm-60-24.48h-34.16a6.715 6.715 0 0 1 0-13.43h34.16a6.715 6.715 0 0 1 0 13.43zm-68.33 0h-34.16a6.715 6.715 0 0 1 0-13.43h34.1a6.715 6.715 0 0 1 0 13.43zm-68.32 0h-34.16a6.715 6.715 0 0 1 0-13.43h34.16a6.715 6.715 0 1 1 0 13.43zm-68.33 0h-34.16a6.715 6.715 0 1 1 0-13.43h34.16a6.715 6.715 0 0 1 0 13.43zm-68.32 0h-34.16a6.715 6.715 0 0 1 0-13.43h34.07a6.715 6.715 0 0 1 0 13.43zm-68.33 0h-34.16a6.715 6.715 0 0 1 0-13.43h34.16a6.715 6.715 0 0 1 0 13.43zm-68.32 0H762.3a6.715 6.715 0 0 1 0-13.43h34.16a6.715 6.715 0 0 1 0 13.43zm-68.33 0h-34.16a6.715 6.715 0 0 1 0-13.43h34.16a6.715 6.715 0 0 1 0 13.43zm-68.32 0h-34.16a6.715 6.715 0 1 1 0-13.43h34.16a6.715 6.715 0 0 1 0 13.43zm-68.33 0h-34.16a6.715 6.715 0 0 1 0-13.43h34.16a6.715 6.715 0 1 1 0 13.43zm-68.32 0h-34.17a6.715 6.715 0 1 1 0-13.43h34.17a6.715 6.715 0 0 1 0 13.43zm-68.33 0h-34.16a6.715 6.715 0 0 1 0-13.43h34.16a6.715 6.715 0 0 1 0 13.43z" fill="#E1E2E2"/><path d="M838.89 783.14s-4.79 103.66-20.35 167.09l-91.65 1.2s-7.35-4.68 2.39-9.57c10.22-5.13 37.63-10.63 40.69-16.76 6-12 3.59-135.24 3.59-135.24M874.53 786.28s4.79 96.94 20.35 160.37l80.14 1.23s7.35-4.68-2.39-9.57c-10.22-5.13-37.63-10.63-40.69-16.76-6-12 11.69-142 11.69-142" fill="#B0B5B8"/><path d="M671.58 296.59s2.15 1.76 2.95-5.22a96.8 96.8 0 0 1-9.45 2.1c1.38 2.74 3.42 4.15 6.5 3.12z" fill="none"/><path d="M671.58 296.59c-3.08 1-5.12-.39-6.51-3.12a98.07 98.07 0 0 1-16.43 1.39c-2 0-3.92-.07-5.86-.18.71 10.87 6.35 22.22 21.32 30l10.92 5.91 18.25-11.25c1.85-15.18-1.32-26.11-4.73-33a96.7 96.7 0 0 1-14 5c-.8 7.02-2.96 5.25-2.96 5.25z" fill="#B0B5B8"/><path d="M665.08 293.47c-4.26-8.42-2.32-29.41-5.46-30.69-5.95-2.42-18 14.09-16.83 31.89 1.94.11 3.89.18 5.86.18a98.07 98.07 0 0 0 16.43-1.38z" fill="#B0B5B8"/><path d="M912.8 640.41a3.36 3.36 0 0 1-.35-6.69l37.1-4a3.36 3.36 0 1 1 .72 6.67l-37.1 4z" fill="#6F93AD"/><path d="M938.49 660.28a24.39 24.39 0 0 1-17.25-6.64 18.91 18.91 0 0 1-6-14.79 3.21 3.21 0 0 1 3.55-3.15 3.35 3.35 0 0 1 3.15 3.55 12.26 12.26 0 0 0 4 9.57 18.38 18.38 0 0 0 14.33 4.73l6.47-1.8a3.355 3.355 0 0 1 1.74 6.48l-7 1.9c-1.05.1-2.02.15-2.99.15z" fill="#6F93AD"/><path d="M753.59 438.56a3.36 3.36 0 0 1-1.38-6.42l29-13a3.36 3.36 0 1 1 2.75 6.12l-29 13a3.32 3.32 0 0 1-1.37.3z" fill="#204A69"/><path d="M789.68 239.5c.17 4 1.34 7 2.68 7.81.92.57 2.35-.09 3.47-.81q-.24-2.52-.3-5.06zM793.47 228.25a9.56 9.56 0 0 0-3 4.43l5.24 1.75c.16-2.17.43-4.32.79-6.45a3.31 3.31 0 0 1-1-.72 4.74 4.74 0 0 0-2.03.99z" fill="none"/><path d="M823.72 274.13a20.24 20.24 0 0 1-10.18-17.25l1-9.1-12.14-4a64.44 64.44 0 0 0 1.22 9.25c3.32 15.85 7.25 28.2 24.71 31a3.37 3.37 0 0 1 2.81 2.92l2.16 18.43a3.37 3.37 0 0 1-2.94 3.73h-.4a3.34 3.34 0 0 1-2.14-.78v8.46l42 2.24v-37.55a24.54 24.54 0 0 1-5.72 2.1c-17.57 4.04-31.3-4.34-40.38-9.45zM859.77 247.88l-10.75-29s-14.32-8-27.77-7.19c6.9 16.1 21.03 31.8 38.52 36.19zM804.02 224.64a62.57 62.57 0 0 0-1.69 12l12.91 4.3 1.53-14.5s-7.75.95-12.75-1.8z" fill="#B0B5B8"/><path d="M885.2 245.81a40.09 40.09 0 0 1-25.43 2c-17.49-4.36-31.61-20.06-38.5-36.2-3.84-9-5.43-18.16-4.09-25.55-6.69 5.25-12.38 13.71-16.59 26.57a18.47 18.47 0 0 0-.66 2.65c-.72 1.84-1.33 3.72-1.87 5.64a7.23 7.23 0 0 0-4-.26c-4.5 1-9.8 5.64-10.81 13.69-.81 6.49.17 15.26 5.63 18.63a8.18 8.18 0 0 0 4.33 1.21 10.19 10.19 0 0 0 3.69-.74c.06.28.1.57.16.85 3.44 16.44 8.2 31.53 27.7 35.78l1.87 16a3.39 3.39 0 0 0 3.33 3h.4a3.37 3.37 0 0 0 2.94-3.73l-2.16-18.43a3.37 3.37 0 0 0-2.81-2.92c-17.45-2.8-21.38-15.15-24.71-31a64.44 64.44 0 0 1-1.22-9.25l12.14 4-1 9.1a20.24 20.24 0 0 0 10.18 17.25c9.08 5.11 22.81 13.49 40.3 9.45a24.54 24.54 0 0 0 5.72-2.1c11.87-6.1 18.57-21.52 20.71-38.28a40.64 40.64 0 0 1-5.25 2.64zm-92.84 1.5c-1.34-.83-2.51-3.81-2.68-7.81l5.85 1.95q.06 2.53.3 5.06c-1.12.71-2.55 1.37-3.47.81zm3.34-12.89l-5.24-1.75a9.56 9.56 0 0 1 3-4.43 4.74 4.74 0 0 1 2-1 3.31 3.31 0 0 0 1 .72c-.34 2.14-.6 4.3-.76 6.47zm19.52 6.5l-12.91-4.3a62.57 62.57 0 0 1 1.69-12c5 2.75 12.75 1.79 12.75 1.79z" fill="#204A69"/><path d="M827.5 172.15c-5.88 2.56-9.17 7.61-10.32 13.94-4.83 26.63 28.33 76.05 68 59.72a40.64 40.64 0 0 0 5.24-2.61c39.47-23.32-15.1-91.88-62.92-71.05z" fill="#BBC9D5"/><path d="M275.36 622.55h150.18a8.52 8.52 0 0 0 8.52-8.89l-4.28-99.89a6.41 6.41 0 0 0-6.42-6.15H273.42l2 101.93" fill="#969CA1" opacity=".26"/><path d="M434.41 676.65c-2.76-16-4.06-32-5.43-48.07l-.8-12.05-.4-6-.1-1.51a14.89 14.89 0 0 1 0-2 8.56 8.56 0 0 1 1.94-4.75 10.8 10.8 0 0 1 8-3.8l6.15-.07 12.08-.07 12.08.12 6.15.07a10.76 10.76 0 0 1 8 3.78 8.47 8.47 0 0 1 1.92 4.72l.15 3.1.28 6 .52 12.07c.57 16.1 1.08 32.19.8 48.34a1.35 1.35 0 0 1-2.68.15c-2.1-16-3.41-32.06-4.67-48.12l-.85-12-.4-6-.2-2.93a1.39 1.39 0 0 0-.37-.76 3.69 3.69 0 0 0-2.7-1.08l-5.92.05-12.08.12-12.08-.07h-5.92a3.64 3.64 0 0 0-2.66 1.06 1.39 1.39 0 0 0-.37.73v1l.07 1.51.28 6 .57 12.06c.45 16.1 1 32.2 0 48.38a.68.68 0 0 1-1.34.08z" fill="#CCCED0"/><path fill="#F6F6F6" d="M471.79 657.89l-2.51-44.33h-26.31l2.51 44.27 26.31.06z"/><path fill="#fff" d="M392.72 701.82h36.26"/><path d="M392.73 701.14a21.59 21.59 0 0 1 9.06-2.71 83.69 83.69 0 0 1 9.06-.42c3 .08 6 .26 9.06.51a34.08 34.08 0 0 1 9.06 2 1.44 1.44 0 0 1 0 2.68 34.08 34.08 0 0 1-9.06 2c-3 .25-6 .44-9.06.51a83.69 83.69 0 0 1-9.06-.42 21.59 21.59 0 0 1-9.06-2.71.78.78 0 0 1-.28-1.06.8.8 0 0 1 .28-.38zM424.36 671.45c-17.22-1.19-34.44-1.6-51.66-1.94l-25.83-.28-12.92-.12-6.46-.06a18 18 0 0 1-5.17-.89 16.73 16.73 0 0 1-11.49-16.09l-.16-17.54c-2.3-.12-4.6-.15-6.9-.15l-.16 17.7a24 24 0 0 0 16.34 23.3 25.54 25.54 0 0 0 7.53 1.15l6.46-.06 12.92-.12 25.83-.28c17.22-.34 34.44-.74 51.66-1.94a1.35 1.35 0 0 0 0-2.69z" fill="#F6F6F6"/><path d="M399.49 671.45c-8.58-1.15-15.3-7.64-16.55-15.28-.52-3.45-.09-8.55-.11-13l.17-9.79h-7.46l.17 9.79c.28 4.67-.32 8.81.82 14.38a22.45 22.45 0 0 0 8.62 12.8 20.63 20.63 0 0 0 14.34 3.78 1.38 1.38 0 0 0 1.18-1.18 1.35 1.35 0 0 0-1.18-1.5z" fill="#F6F6F6"/><path d="M432.02 631.39a19.45 19.45 0 0 1-5.57.7h-5.27c-28.24.05-56.47.45-84.71.69-30.47.46-60.93 1.09-91.4 2.05a.67.67 0 0 0 0 1.34c30.47 1 60.93 1.59 91.4 2.05 30.47.26 60.93.72 91.4.71h.15a3.45 3.45 0 0 0 .65-.09 27.44 27.44 0 0 0 3.36-.4z" fill="#CCCED0"/><path d="M450.29 594.24l-2.43-61.2-.61-15.3c-.15-2.7-.09-4.75-.44-8a21.85 21.85 0 0 0-18.16-18.52 36.58 36.58 0 0 0-6.11-.28 3.76 3.76 0 0 0-.72-.07l-159 .55-9.94.09a16.26 16.26 0 0 0-11.19 3.89 15.82 15.82 0 0 0-5.41 10.68c-.07 3.91.13 6.79.18 10.23l1 39.73c.59 26.49 1.48 53 2.47 79.45a1.34 1.34 0 0 0 2.68 0c.11-26.5.14-53-.15-79.49l-.29-39.74c0-3.18-.1-6.93 0-9.63a9.79 9.79 0 0 1 3.47-6.54 10 10 0 0 1 7.22-2.24h3.91l1.63 55c.48 19.37 1.43 38.74 2.16 58.1a1.34 1.34 0 0 0 2.68-.05c0-19.38.13-38.77-.16-58.14l-.56-54.84h.27l155.34.54.13-.07h2.09a54.42 54.42 0 0 1 7 .23 14.2 14.2 0 0 1 9.76 6.53 14 14 0 0 1 2 5.63c.2 1.84.24 4.9.38 7.29l.7 15.29 1.41 30.59 1.41 30.59.28 6.14a47.87 47.87 0 0 1 7.11.15z" fill="#CCCED0"/><path d="M434.41 676.65c-2.76-16-4.06-32-5.43-48.07l-.8-12.05-.4-6-.1-1.51a14.89 14.89 0 0 1 0-2 8.56 8.56 0 0 1 1.94-4.75 10.8 10.8 0 0 1 8-3.8l6.15-.07 12.08-.07 12.08.12 6.15.07a10.76 10.76 0 0 1 8 3.78 8.47 8.47 0 0 1 1.92 4.72l.15 3.1.28 6 .52 12.07c.57 16.1 1.08 32.19.8 48.34a1.35 1.35 0 0 1-2.68.15c-2.1-16-3.41-32.06-4.67-48.12l-.85-12-.4-6-.2-2.93a1.39 1.39 0 0 0-.37-.76 3.69 3.69 0 0 0-2.7-1.08l-5.92.05-12.08.12-12.08-.07h-5.92a3.64 3.64 0 0 0-2.66 1.06 1.39 1.39 0 0 0-.37.73v1l.07 1.51.28 6 .57 12.06c.45 16.1 1 32.2 0 48.38a.68.68 0 0 1-1.34.08z" fill="#CCCED0"/><path fill="#F6F6F6" d="M471.79 657.89l-2.51-44.33h-26.31l2.51 44.27 26.31.06z"/><path fill="#fff" d="M392.72 701.82h36.26"/><path d="M392.73 701.14a21.59 21.59 0 0 1 9.06-2.71 83.69 83.69 0 0 1 9.06-.42c3 .08 6 .26 9.06.51a34.08 34.08 0 0 1 9.06 2 1.44 1.44 0 0 1 0 2.68 34.08 34.08 0 0 1-9.06 2c-3 .25-6 .44-9.06.51a83.69 83.69 0 0 1-9.06-.42 21.59 21.59 0 0 1-9.06-2.71.78.78 0 0 1-.28-1.06.8.8 0 0 1 .28-.38zM1.31 959.39c129.84-3.7 259.68-4.48 389.52-5.4l389.52-.85c259.68.81 519.36.35 779 4.91a2.69 2.69 0 0 1 0 5.37c-259.68 4.56-519.36 4.1-779 4.91l-389.52-.85c-129.84-.92-259.68-1.7-389.52-5.4a1.34 1.34 0 0 1 0-2.68z" fill="#F6F6F6"/><path d="M774.83 917.1a3.36 3.36 0 0 1-3.21-4.33c4.87-16 2.75-48.59.71-80-1-15.5-2-30.14-2.1-42.83a3.36 3.36 0 0 1 3.32-3.4 3.36 3.36 0 0 1 3.36 3.32c.14 12.51 1.09 27.07 2.09 42.47 2.09 32.06 4.24 65.22-1 82.44a3.36 3.36 0 0 1-3.17 2.33zM894.87 950a3.35 3.35 0 0 1-3.31-2.86c-.12-.81-12.12-81.19-20.37-160.52a3.36 3.36 0 1 1 6.67-.7c8.24 79.19 20.21 159.42 20.33 160.22a3.36 3.36 0 0 1-2.82 3.82 3.27 3.27 0 0 1-.5.04z" fill="#204A69"/><path d="M1268.93 70.38V63.5a6.715 6.715 0 0 1 13.43 0v7.38" fill="#E1E2E2"/><path d="M1041.27 215.38v-1.72a26.28 26.28 0 0 1-8.95 4.54s7.5-27.34-.45-29.17-38.4 52.06-38.4 52.06l11 26.43s11.83-10.63 49.88-30.13c8.64-8.13 13.71-15.59 16.29-22z" fill="#B0B5B8"/><path d="M1025.14 255.67a3.36 3.36 0 0 1 0-6.71c3.78-.14 30-13.82 42.82-38.15a3.36 3.36 0 1 1 5.94 3.13c-13.37 25.33-41.88 41.73-48.76 41.73zM1004.49 234.13a3.36 3.36 0 0 1-2.22-5.87c2.76-2.45 7.26-11.57 11.23-19.61 8.05-16.3 11.8-23 16.48-23.58a4.9 4.9 0 0 1 4.44 1.78c4.62 5.4 3.46 18.48 2.22 26.39 2.84-1.22 6-3.06 7.75-5.51a3.36 3.36 0 1 1 5.47 3.89c-5.18 7.26-16.36 9.76-16.83 9.86a3.36 3.36 0 0 1-4-4c1.66-7.7 2.93-20 1.06-24.9-2.73 3.15-7.36 12.54-10.58 19-4.66 9.44-9.05 18.35-12.81 21.66a3.31 3.31 0 0 1-2.21.89z" fill="#204A69"/><path d="M668.92 294.18c.14.09.43.29 1.35 0 .59-.19.91-.94 1.08-2q-1.71.41-3.44.76a3.51 3.51 0 0 0 1.01 1.24zM659.61 262.78c3.14 1.27 1.2 22.27 5.46 30.69.95-.16 1.89-.34 2.83-.53-2-3.57-2.59-12.67-3-17.89-.57-8.53-.89-13.23-4.33-14.63-5.44-2.19-12.54 3.41-17.3 13.66a45.49 45.49 0 0 0-4.29 20.29c1.24.12 2.48.23 3.74.3-1.11-17.79 10.95-34.3 16.89-31.89z" fill="none"/><path d="M668.92 294.18c.14.09.43.29 1.35 0 .59-.19.91-.94 1.08-2q-1.71.41-3.44.76a3.51 3.51 0 0 0 1.01 1.24z" fill="none"/><path d="M668.92 294.18c.14.09.43.29 1.35 0 .59-.19.91-.94 1.08-2q-1.71.41-3.44.76a3.51 3.51 0 0 0 1.01 1.24zM671.35 292.18l2.24-.57c-.75.2-1.49.39-2.24.57zM690.75 285.3l-1.12.53z" fill="none"/><path d="M434.32 142.11h-33a6.715 6.715 0 1 0 0 13.43h33a6.715 6.715 0 1 0 0-13.43zM500.28 142.11h-33a6.715 6.715 0 1 0 0 13.43h33a6.715 6.715 0 1 0 0-13.43zM830.1 142.11h-33a6.715 6.715 0 1 0 0 13.43h33a6.715 6.715 0 1 0 0-13.43zM929.02 142.11a6.715 6.715 0 1 0 0 13.43h8v-13.43zM896.02 136.46h-33a6.715 6.715 0 0 0 0 13.43h33a6.715 6.715 0 0 0 0-13.43zM566.24 142.11h-33a6.715 6.715 0 0 0 0 13.43h27.37a97.31 97.31 0 0 1 7.57-13.14 6.72 6.72 0 0 0-1.94-.29zM764.13 142.11h-33a6.71 6.71 0 0 0-2.05.32 97.32 97.32 0 0 1 7.55 13.11h27.48a6.715 6.715 0 1 0 0-13.43z" fill="#E1E2E2"/><path d="M668.92 294.18c.14.09.43.29 1.35 0 .59-.19.91-.94 1.08-2q-1.71.41-3.44.76a3.51 3.51 0 0 0 1.01 1.24z" fill="none"/><path d="M673.59 291.61l-2.24.57c-.16 1-.49 1.78-1.08 2-.92.31-1.21.1-1.35 0a3.51 3.51 0 0 1-1-1.23c-2-3.57-2.59-12.67-3-17.89-.57-8.53-.89-13.23-4.33-14.63-5.44-2.19-12.54 3.41-17.3 13.66a45.49 45.49 0 0 0-4.29 20.29c.39 12.48 6.62 25.37 23.26 34.07a3.4 3.4 0 0 0 1.55.38 3.36 3.36 0 0 0 1.55-6.33c-23.86-12.47-20.37-32.83-17.76-41 2.86-9 7.67-13.76 9.75-14.69a83.07 83.07 0 0 1 .87 8.7c.65 9.63 1.39 20.54 6.92 24.25a7.94 7.94 0 0 0 7.21.78c4.91-1.64 5.87-5.42 5.78-10.24-.57.2-1.57.5-2.65.8l-1 .28z" fill="#204A69"/><path d="M674.53 291.37l1-.28-1.95.52zM688.54 286.34l-.61.27c-1.23.56-2.56 1.13-3.32 1.39a57.89 57.89 0 0 1 4.6 24 3.36 3.36 0 0 0 3.31 3.4 3.36 3.36 0 0 0 3.36-3.31 66.28 66.28 0 0 0-5.19-26.75l-1.12.53z" fill="#204A69"/><path d="M689.63 285.83l-1.7.78.61-.27z" fill="#204A69"/><path d="M790.14 793.46c-11.43 0-21.7-1.43-27.18-5.63a11.37 11.37 0 0 1-4.7-8.56c-.17-3-.55-7.36-1-12.93-3-34.13-10-114 4.45-204.92a3.36 3.36 0 0 1 6.64 1c-14.33 90.06-7.37 169.4-4.39 203.28.5 5.66.89 10.09 1.06 13.15a4.69 4.69 0 0 0 2.09 3.6c11.59 8.87 57.88 1.65 74.75-1.89a3.36 3.36 0 0 1 1.38 6.57c-4.37.95-30.92 6.33-53.1 6.33zM886.22 788.54c-12.44 0-22.94-1.1-27.65-4.25-10.39-6.93-8.37-101.49-7-141.83a3.18 3.18 0 0 1 3.47-3.25 3.37 3.37 0 0 1 3.25 3.47c-2.09 62.26-1.09 130.21 4.2 136.16 9.2 6.1 58.16 1.8 88.94-2.62l-5.81-102.27a3.36 3.36 0 0 1 3.16-3.54 3.19 3.19 0 0 1 3.54 3.16l6 105.34a3.36 3.36 0 0 1-2.85 3.51c-5.76.86-42.12 6.12-69.25 6.12zM944.16 622.06a3.35 3.35 0 0 1-3.34-3.09l-7.19-88.58a3.356 3.356 0 1 1 6.69-.54l7.19 88.58a3.36 3.36 0 0 1-3.08 3.61z" fill="#6F93AD"/><path d="M1033.97 260.88l-32.31-33.51c-15.78 31.57-62.67 78.58-98.1 87.42-.81-.32-1.63-.64-2.49-1-11.37-4.19-76.46-8.61-92-2-10 4.25-16.9 7.49-21.52 11.79-30.74 24.06-50 44.9-50 44.9l-37.53-58.6-33.51 23.94s28.72 105.32 73 102.93a107.17 107.17 0 0 0 41.78-11.27l3.7 105.84 148.35-2.55-3.6-151.61c55.28-28.02 104.23-116.28 104.23-116.28z" fill="#BBC9D5"/><path d="M778.22 535.05a3.36 3.36 0 0 1 0-6.71l158.76-1.57a3.23 3.23 0 0 1 3.39 3.32 3.36 3.36 0 0 1-3.32 3.39l-158.76 1.57zM753.59 438.56a3.36 3.36 0 0 1-1.38-6.42l29-13a3.36 3.36 0 1 1 2.75 6.12l-29 13a3.32 3.32 0 0 1-1.37.3z" fill="#204A69"/><path d="M606.77 729.64h-.48l-96.46 1.48-97.41 1-195.87.76a3.72 3.72 0 0 1-3.73-3.7l-.07-54.71a3.79 3.79 0 0 1 3.78-3.8l194.63.42 194.63 1.45a1.9 1.9 0 0 1 1.89 1.92zm-1.9-.95v-.47l-1-53.76 1.93 1.93-194.63 1.49-194.63.42 3.8-3.8-.07 54.71-3.73-3.73 193.41.76 97.22 1z" fill="#CCCED0"/><path fill="#fff" d="M216.54 709.01v238.84"/><path d="M217.21 709.01c1.85 19.9 2.24 39.81 2.7 59.71l.42 59.71c-.4 39.8-.17 79.61-2.46 119.42a1.35 1.35 0 0 1-2.69 0c-2.28-39.8-2.05-79.61-2.45-119.42l.42-59.71c.46-19.9.85-39.8 2.7-59.71a.67.67 0 0 1 1.34 0z" fill="#CCCED0"/><path fill="#fff" d="M605.81 729.17v218.68"/><path d="M606.48 729.17c1.85 18.22 2.24 36.45 2.7 54.67l.42 54.67c-.4 36.45-.17 72.89-2.45 109.34a1.35 1.35 0 0 1-2.69 0c-2.28-36.45-2.05-72.89-2.46-109.34l.43-54.67c.46-18.22.85-36.45 2.7-54.67a.67.67 0 0 1 1.34 0z" fill="#CCCED0"/></svg>
diff --git a/plugins/jetpack/images/white-clouds-reverse.svg b/plugins/jetpack/images/white-clouds-reverse.svg
deleted file mode 100644
index d33335de..00000000
--- a/plugins/jetpack/images/white-clouds-reverse.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- viewBox="0 0 1125.1 53" style="enable-background:new 0 0 1125.1 53;" xml:space="preserve">
-<style type="text/css">
- .st0{fill:#FFFFFF;}
-</style>
-<path class="st0" d="M0,25.6c7.2,0,16-0.9,22.6-2.4c5.8,12.5,21.6,21.4,40.2,21.4c7.5,0,14.5-1.5,20.6-4c11.7,7.7,27.1,12.4,44,12.4
- c23.8,0,44.7-9.3,56.7-23.3c2,0.1,4,0.2,6.1,0.2c22.9,0,43.1-8.7,55.2-21.9c12,13.2,32.3,21.9,55.2,21.9c2.8,0,5.6-0.1,8.3-0.4
- c12.2,9.3,29.1,15.1,47.9,15.1c7.4,0,14.5-0.9,21.2-2.6c7.8,6.7,19.4,11,32.2,11s24.3-4.3,32.2-10.8c6.7,1.7,13.8,2.6,21.2,2.6
- c27,0,50.3-12.1,60.9-29.4c6.8,1.7,14,2.6,21.5,2.6c10.5,0,20.4-1.9,29.3-5.1c11.8,8,27.4,12.8,44.6,12.8c11,0,21.4-2,30.5-5.5
- c11.7,14.7,33.1,24.5,57.5,24.5c19.8,0,37.5-6.5,49.8-16.7c5.9,1.2,12.1,1.9,18.5,1.9c23.4,0,44-9,56-22.7
- c6.4,2.8,13.8,4.4,21.7,4.4c9.4,0,18.1-2.3,25.2-6.2c7.8,7.6,20,12.5,33.8,12.5c4.8,0,9.4-0.6,13.7-1.7c6.8,11,21.5,18.6,38.7,18.6
- c8.1,0,15.7-1.7,22.2-4.7c12.1,9,28.7,14.5,47.1,14.5c24.9,0,46.7-10.3,58.2-25.4c9.4,4,20.8,6.2,32.3,6.3V0H0V25.6z"/>
-</svg>
diff --git a/plugins/jetpack/images/white-clouds.svg b/plugins/jetpack/images/white-clouds.svg
deleted file mode 100644
index 45835881..00000000
--- a/plugins/jetpack/images/white-clouds.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1125.1 53"><style type="text/css">
- .st0{fill:#FFFFFF;}
-</style><path class="st0" d="M0 53h1125.1V27.5c-11.5 0.1-22.9 2.3-32.3 6.3 -11.5-15.1-33.3-25.4-58.2-25.4 -18.4 0-35 5.5-47.1 14.5 -6.5-3-14.1-4.7-22.2-4.7 -17.2 0-31.9 7.6-38.7 18.6 -4.3-1.1-8.9-1.7-13.7-1.7 -13.8 0-26 4.9-33.8 12.5 -7.1-3.9-15.8-6.2-25.2-6.2 -7.9 0-15.3 1.6-21.7 4.4 -12-13.7-32.6-22.7-56-22.7 -6.4 0-12.6 0.7-18.5 1.9 -12.3-10.2-30-16.7-49.8-16.7 -24.4 0-45.8 9.8-57.5 24.5 -9.1-3.5-19.5-5.5-30.5-5.5 -17.2 0-32.8 4.8-44.6 12.8 -8.9-3.2-18.8-5.1-29.3-5.1 -7.5 0-14.7 0.9-21.5 2.6 -10.6-17.3-33.9-29.4-60.9-29.4 -7.4 0-14.5 0.9-21.2 2.6C434.5 4.3 423 0 410.2 0S385.8 4.3 378 11c-6.7-1.7-13.8-2.6-21.2-2.6 -18.8 0-35.7 5.8-47.9 15.1 -2.7-0.3-5.5-0.4-8.3-0.4 -22.9 0-43.2 8.7-55.2 21.9 -12.1-13.2-32.3-21.9-55.2-21.9 -2.1 0-4.1 0.1-6.1 0.2C172.1 9.3 151.2 0 127.4 0c-16.9 0-32.3 4.7-44 12.4 -6.1-2.5-13.1-4-20.6-4 -18.6 0-34.4 8.9-40.2 21.4C16 28.3 7.2 27.4 0 27.4V53z"/></svg> \ No newline at end of file
diff --git a/plugins/jetpack/images/wordads.svg b/plugins/jetpack/images/wordads.svg
deleted file mode 100644
index 9dd80f09..00000000
--- a/plugins/jetpack/images/wordads.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg id="wordAds" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 121"><style>.st0{fill:#D8DEE4}.st1{fill:#00b328}.st2{fill:#CCCED0}.st3{fill:#6F93AD}.st4{fill:#F6F6F6}.st5{fill:#BBC9D5}.st6{fill:#204A69}.st7{fill:#fff}</style><path class="st0" d="M51.1 23.9l-.8 63.8 1.8.3.8-64.1h-1.8zM189.2 23.6v32.6h1.8V23.5c-.6 0-1.2 0-1.8.1zM189.2 86.1v32.6h-3.8v1.8h4.7c.5 0 .9-.4.9-.9V87c-.6-.3-1.2-.7-1.8-.9zM84.8 90.9c0 9.6.2 19.1.1 28.7h51V90.9H84.8z"/><path class="st1" d="M177.2 119.6H148V93c0-1.2 1-2.1 2.1-2.1h27.1v28.7z"/><path class="st2" d="M153.9 83c9.3-.3 18.6-.4 27.9-.4.1 0 .2 0 .2.1 5.9 2.6 12 4.9 18.1 7l-.6 1c-.5-.5-1-1.1-1.4-1.7-.4-.6-.8-1.2-1.1-1.8-.7-1.2-1.3-2.5-1.7-3.9-.1-.3.1-.7.4-.8h4c.7 0 1.3 0 1.8-.1.6-.1 1.1-.3 1.7-.5 2.2-.9 3.7-3.1 3.9-5.4.1-2.4 0-5.1 0-7.6v-5.8c0-.7 0-1.2-.1-1.8-.5-2.3-2.3-4.2-4.5-4.9-.6-.2-1.1-.3-1.7-.3h-21.2l-15.4-.1h-7.7c-1.3 0-2.6-.1-3.8.1-1.2.2-2.3.7-3.2 1.5-.9.8-1.6 1.8-2 2.9-.5 1.1-.4 2.4-.4 3.7v11.5c-.1 1.2.2 2.5.8 3.6 1.1 2.2 3.5 3.6 6 3.6v.1zm0 .3c-2.7 0-5.3-1.5-6.6-3.8-.6-1.2-1-2.5-1-3.8V64.2c0-1.2-.1-2.6.4-3.9.4-1.3 1.2-2.4 2.3-3.3 1-.9 2.3-1.5 3.7-1.7 1.4-.2 2.6-.1 3.9-.1l7.7-.1 15.4-.1H200.8c.7 0 1.4.1 2.1.3 2.7.8 4.9 3.1 5.4 5.9.1.7.2 1.4.2 2.1V69c0 2.6 0 5.1-.1 7.7-.2 2.8-2.1 5.4-4.7 6.5-.6.3-1.3.5-2 .6-.7.1-1.4.1-2 .1h-3.8l.6-.8c.4 1.3.9 2.5 1.5 3.7.3.6.7 1.1 1.1 1.7s.8 1.1 1.2 1.5c.2.2.2.6 0 .9-.2.2-.4.2-.6.1-6.1-2.2-12.2-4.5-18.1-7.2l.2.1c-9.3-.3-18.6-.4-27.9-.6z"/><path class="st0" d="M146.3 75.7V64.2c0-1.2-.1-2.6.4-3.9.4-1.3 1.2-2.4 2.3-3.3 1-.9 2.3-1.5 3.7-1.7 1.4-.2 2.6-.1 3.9-.1l7.7-.1 13-.1V36.8H68.7c-1.2 0-2.1 1-2.1 2.1v39.6h80.3c-.4-.9-.6-1.9-.6-2.8z"/><circle class="st2" cx="188.8" cy="69.9" r="2.3"/><circle class="st2" cx="177.3" cy="69.9" r="2.3"/><circle class="st2" cx="165.9" cy="69.9" r="2.3"/><path class="st3" d="M83.9 66.4l10.8-15.9L107 66.4z"/><path class="st4" d="M239.5 118.8c-37.9-.8-95.5-.7-133.4-.9l-30.7.1c0 .8 0 1.7-.1 2.5l30.8.1c37.9-.1 95.5-.1 133.4-.9.3 0 .5-.2.5-.5 0-.2-.2-.4-.5-.4z"/><path class="st5" d="M50.7 24.8V10.6c0-5.4 3.7-9.8 8.2-9.8L182.8.7c4.6 0 8.3 4.3 8.3 9.8l.1 13.7-140.5.6z"/><path class="st6" d="M194 24.5c-12.3.9-24.5.9-36.7.9l-36.7.2-36.6-.2c-12.3-.1-24.5 0-36.7-.9v-.6C59.6 23 71.8 23 84 23l36.7-.2 36.7.2c12.3.1 24.5 0 36.7.9v.6z"/><path class="st4" d="M85.2 118.6c-9.8-.1-17.5-.1-27.4-.2l-27.2.1c-2.7.1-5.7.1-8.9.2 0 .1-16.8.4-21.6.8 0 0-.1.1-.1.2s0 .2.1.2c9.1.6 21.5.7 30.5.8l27.2.2c9.8-.1 17.6 0 27.4-.1v-2.2z"/><g><path class="st7" d="M84.9 120.4H34L33.9 88h50.9z"/><path class="st2" d="M85 120.6l-25.4.3-25.6.1c-.3 0-.6-.2-.6-.6L33.2 88c0-.3.2-.7.7-.7 17 .1 33.9 0 50.9.1.2 0 .4.2.4.4l-.2 32.8zm-.3-.3L84.2 88l.4.4c-17 .1-33.9.1-50.9.1l.7-.7v32.4l-.6-.6 25.3.1 25.6.6z"/><path class="st7" d="M35.9 91.1l23 13.9L83 90.2"/><path class="st2" d="M35.9 91c2 1 3.9 2.1 5.9 3.1 1.9 1.1 3.9 2.2 5.8 3.4l5.7 3.5c1.9 1.1 3.8 2.3 5.7 3.5h-.7l12.2-7.3c4-2.5 8.2-4.8 12.3-7.2.1-.1.2 0 .3.1.1.1 0 .2-.1.3-3.9 2.6-7.9 5.1-12 7.6l-12.1 7.5c-.2.1-.4.1-.7 0-1.9-1.1-3.8-2.2-5.7-3.5L47 98.6c-1.9-1.1-3.8-2.3-5.7-3.6-1.9-1.2-3.7-2.5-5.6-3.8 0 0-.1-.1 0-.1l.2-.1z"/></g></svg> \ No newline at end of file
diff --git a/plugins/jetpack/jetpack.php b/plugins/jetpack/jetpack.php
deleted file mode 100644
index ad69a19b..00000000
--- a/plugins/jetpack/jetpack.php
+++ /dev/null
@@ -1,163 +0,0 @@
-<?php
-
-/*
- * Plugin Name: Jetpack by WordPress.com
- * Plugin URI: https://jetpack.com
- * Description: Bring the power of the WordPress.com cloud to your self-hosted WordPress. Jetpack enables you to connect your blog to a WordPress.com account to use the powerful features normally only available to WordPress.com users.
- * Author: Automattic
- * Version: 7.2.1
- * Author URI: https://jetpack.com
- * License: GPL2+
- * Text Domain: jetpack
- * Domain Path: /languages/
- */
-
-define( 'JETPACK__MINIMUM_WP_VERSION', '5.0' );
-
-define( 'JETPACK__VERSION', '7.2.1' );
-define( 'JETPACK_MASTER_USER', true );
-define( 'JETPACK__API_VERSION', 1 );
-define( 'JETPACK__PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
-define( 'JETPACK__PLUGIN_FILE', __FILE__ );
-
-defined( 'JETPACK_CLIENT__AUTH_LOCATION' ) or define( 'JETPACK_CLIENT__AUTH_LOCATION', 'header' );
-defined( 'JETPACK_CLIENT__HTTPS' ) or define( 'JETPACK_CLIENT__HTTPS', 'AUTO' );
-defined( 'JETPACK__GLOTPRESS_LOCALES_PATH' ) or define( 'JETPACK__GLOTPRESS_LOCALES_PATH', JETPACK__PLUGIN_DIR . 'locales.php' );
-defined( 'JETPACK__API_BASE' ) or define( 'JETPACK__API_BASE', 'https://jetpack.wordpress.com/jetpack.' );
-defined( 'JETPACK_PROTECT__API_HOST' ) or define( 'JETPACK_PROTECT__API_HOST', 'https://api.bruteprotect.com/' );
-defined( 'JETPACK__WPCOM_JSON_API_HOST' ) or define( 'JETPACK__WPCOM_JSON_API_HOST', 'public-api.wordpress.com' );
-
-defined( 'JETPACK__SANDBOX_DOMAIN' ) or define( 'JETPACK__SANDBOX_DOMAIN', '' );
-
-defined( 'JETPACK__DEBUGGER_PUBLIC_KEY' ) or define(
- 'JETPACK__DEBUGGER_PUBLIC_KEY',
- "\r\n" . '-----BEGIN PUBLIC KEY-----' . "\r\n"
- . 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm+uLLVoxGCY71LS6KFc6' . "\r\n"
- . '1UnF6QGBAsi5XF8ty9kR3/voqfOkpW+gRerM2Kyjy6DPCOmzhZj7BFGtxSV2ZoMX' . "\r\n"
- . '9ZwWxzXhl/Q/6k8jg8BoY1QL6L2K76icXJu80b+RDIqvOfJruaAeBg1Q9NyeYqLY' . "\r\n"
- . 'lEVzN2vIwcFYl+MrP/g6Bc2co7Jcbli+tpNIxg4Z+Hnhbs7OJ3STQLmEryLpAxQO' . "\r\n"
- . 'q8cbhQkMx+FyQhxzSwtXYI/ClCUmTnzcKk7SgGvEjoKGAmngILiVuEJ4bm7Q1yok' . "\r\n"
- . 'xl9+wcfW6JAituNhml9dlHCWnn9D3+j8pxStHihKy2gVMwiFRjLEeD8K/7JVGkb/' . "\r\n"
- . 'EwIDAQAB' . "\r\n"
- . '-----END PUBLIC KEY-----' . "\r\n"
-);
-
-/**
- * Returns the location of Jetpack's lib directory. This filter is applied
- * in require_lib().
- *
- * @since 4.0.2
- *
- * @return string Location of Jetpack library directory.
- *
- * @filter require_lib_dir
- */
-function jetpack_require_lib_dir() {
- return JETPACK__PLUGIN_DIR . '_inc/lib';
-}
-
-
-/**
- * Checks if the code debug mode turned on, and returns false if it is. When Jetpack is in
- * code debug mode, it shouldn't use minified assets. Note that this filter is not being used
- * in every place where assets are enqueued. The filter is added at priority 9 to be overridden
- * by any default priority filter that runs after it.
- *
- * @since 6.2.0
- *
- * @return boolean
- *
- * @filter jetpack_should_use_minified_assets
- */
-function jetpack_should_use_minified_assets() {
- if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) {
- return false;
- }
- return true;
-}
-
-/**
- * Outputs for an admin notice about running Jetpack on outdated WordPress.
- *
- * @since 7.2.0
- */
-function jetpack_admin_unsupported_wp_notice() { ?>
- <div class="notice notice-error is-dismissible">
- <p><?php esc_html_e( 'Jetpack requires a more recent version of WordPress and has been paused. Please update WordPress to continue enjoying Jetpack.', 'jetpack' ); ?></p>
- </div>
- <?php
-}
-
-if ( version_compare( $GLOBALS['wp_version'], JETPACK__MINIMUM_WP_VERSION, '<' ) ) {
- add_action( 'admin_notices', 'jetpack_admin_unsupported_wp_notice' );
- return;
-}
-
-add_filter( 'jetpack_require_lib_dir', 'jetpack_require_lib_dir' );
-add_filter( 'jetpack_should_use_minified_assets', 'jetpack_should_use_minified_assets', 9 );
-
-// @todo: Abstract out the admin functions, and only include them if is_admin()
-require_once( JETPACK__PLUGIN_DIR . 'class.jetpack.php' );
-require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-network.php' );
-require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-client.php' );
-require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-data.php' );
-require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-client-server.php' );
-require_once( JETPACK__PLUGIN_DIR . 'sync/class.jetpack-sync-actions.php' );
-require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-options.php' );
-require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-user-agent.php' );
-require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-post-images.php' );
-require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-error.php' );
-require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-heartbeat.php' );
-require_once( JETPACK__PLUGIN_DIR . 'class.photon.php' );
-require_once( JETPACK__PLUGIN_DIR . 'functions.photon.php' );
-require_once( JETPACK__PLUGIN_DIR . 'functions.global.php' );
-require_once( JETPACK__PLUGIN_DIR . 'functions.compat.php' );
-require_once( JETPACK__PLUGIN_DIR . 'functions.gallery.php' );
-require_once( JETPACK__PLUGIN_DIR . 'require-lib.php' );
-require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-autoupdate.php' );
-require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-tracks.php' );
-require_once( JETPACK__PLUGIN_DIR . 'class.frame-nonce-preview.php' );
-require_once( JETPACK__PLUGIN_DIR . 'modules/module-headings.php');
-require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-constants.php');
-require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-idc.php' );
-require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-connection-banner.php' );
-require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-plan.php' );
-
-if ( is_admin() ) {
- require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-admin.php' );
- require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-jitm.php' );
- require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-affiliate.php' );
-}
-
-// Play nice with http://wp-cli.org/
-if ( defined( 'WP_CLI' ) && WP_CLI ) {
- require_once( JETPACK__PLUGIN_DIR . 'class.jetpack-cli.php' );
-}
-
-require_once( JETPACK__PLUGIN_DIR . '_inc/lib/class.core-rest-api-endpoints.php' );
-
-register_activation_hook( __FILE__, array( 'Jetpack', 'plugin_activation' ) );
-register_deactivation_hook( __FILE__, array( 'Jetpack', 'plugin_deactivation' ) );
-add_action( 'updating_jetpack_version', array( 'Jetpack', 'do_version_bump' ), 10, 2 );
-add_action( 'init', array( 'Jetpack', 'init' ) );
-add_action( 'plugins_loaded', array( 'Jetpack', 'plugin_textdomain' ), 99 );
-add_action( 'plugins_loaded', array( 'Jetpack', 'load_modules' ), 100 );
-add_filter( 'jetpack_static_url', array( 'Jetpack', 'staticize_subdomain' ) );
-add_filter( 'is_jetpack_site', '__return_true' );
-
-/**
- * Add an easy way to photon-ize a URL that is safe to call even if Jetpack isn't active.
- *
- * See: http://jetpack.com/2013/07/11/photon-and-themes/
- */
-if ( Jetpack::is_module_active( 'photon' ) ) {
- add_filter( 'jetpack_photon_url', 'jetpack_photon_url', 10, 3 );
-}
-
-if ( JETPACK__SANDBOX_DOMAIN ) {
- require_once( JETPACK__PLUGIN_DIR . '_inc/jetpack-server-sandbox.php' );
-}
-
-require_once( JETPACK__PLUGIN_DIR . '3rd-party/3rd-party.php' );
-
-Jetpack::init();
diff --git a/plugins/jetpack/json-api-config.php b/plugins/jetpack/json-api-config.php
deleted file mode 100644
index d268049d..00000000
--- a/plugins/jetpack/json-api-config.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-
-define( 'WPCOM_JSON_API__CURRENT_VERSION', '1.1' );
-global $wpcom_json_api_production_versions, $wpcom_json_api_dev_versions;
-
-$wpcom_json_api_production_versions = array(
- '1',
- '1.1',
-);
-
-$wpcom_json_api_dev_versions = array(
- '1.2',
- '1.3',
-);
diff --git a/plugins/jetpack/json-endpoints.php b/plugins/jetpack/json-endpoints.php
deleted file mode 100644
index 3d3b1d6f..00000000
--- a/plugins/jetpack/json-endpoints.php
+++ /dev/null
@@ -1,132 +0,0 @@
-<?php
-
-/*
- * Endpoint class definitions are located inside the files that require these endpoint classes.
- * file ordering matters
- */
-
-$json_endpoints_dir = dirname( __FILE__ ) . '/json-endpoints/';
-
-//abstract endpoints
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-post-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-post-v1-1-endpoint.php' ); // v1.1
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-comment-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-taxonomy-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-render-endpoint.php' );
-
-
-// **********
-// v1
-// **********
-
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-delete-media-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-comment-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-comments-tree-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-media-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-post-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-render-shortcode-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-shortcodes-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-render-embed-reversal-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-render-embed-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-embeds-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-site-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-taxonomies-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-taxonomy-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-term-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-comments-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-media-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-post-types-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-post-type-taxonomies-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-posts-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-roles-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-terms-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-users-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-site-user-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-bulk-update-comments-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-comment-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-media-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-post-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-taxonomy-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-term-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-user-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-upload-media-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-site-settings-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-sharing-buttons-endpoint.php' );
-
-// **********
-// v1.1
-// **********
-
-// Comments
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-comments-tree-v1-1-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-comment-counts-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-comment-history-endpoint.php' );
-
-// Media
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-delete-media-v1-1-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-media-v1-1-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-media-v1-1-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-media-v1-1-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-upload-media-v1-1-endpoint.php' );
-
-// Posts
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-post-v1-1-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-posts-v1-1-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-post-v1-1-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-autosave-v1-1-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-autosave-post-v1-1-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-post-counts-v1-1-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-bulk-delete-post-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-bulk-restore-post-endpoint.php' );
-
-// Custom Menus
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-menus-v1-1-endpoint.php' );
-
-// Custom CSS
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-customcss.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-customcss.php' );
-
-// Logo Settings
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-site-logo-endpoint.php' );
-
-// Homepage Settings
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-site-homepage-endpoint.php' );
-
-// Widgets
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-add-widget-endpoint.php' );
-
-// **********
-// v1.2
-// **********
-
-// Comments
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-comments-tree-v1-2-endpoint.php' );
-
-// Media
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-media-v1-2-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-media-v1-2-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-edit-media-v1-2-endpoint.php' );
-
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-update-post-v1-2-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-site-settings-v1-2-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-get-site-v1-2-endpoint.php' );
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-list-posts-v1-2-endpoint.php' );
-
-// Jetpack Only Endpoints
-$json_jetpack_endpoints_dir = dirname( __FILE__ ) . '/json-endpoints/jetpack/';
-
-// This files instantiates the endpoints
-require_once( $json_jetpack_endpoints_dir . 'json-api-jetpack-endpoints.php' );
-
-// **********
-// v1.3
-// **********
-
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-site-settings-v1-3-endpoint.php' );
-
-// **********
-// v1.4
-// **********
-
-require_once( $json_endpoints_dir . 'class.wpcom-json-api-site-settings-v1-4-endpoint.php' );
-
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-add-widget-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-add-widget-endpoint.php
deleted file mode 100644
index 2c1a7eeb..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-add-widget-endpoint.php
+++ /dev/null
@@ -1,103 +0,0 @@
-<?php
-/**
- * Activate a widget on a site.
- *
- * https://public-api.wordpress.com/rest/v1.1/sites/$site/widgets/new
- */
-
-new WPCOM_JSON_API_Add_Widgets_Endpoint( array (
- 'description' => 'Activate a widget on a site.',
- 'group' => 'sites',
- 'stat' => 'widgets:new',
- 'method' => 'POST',
- 'min_version' => '1.1',
- 'path' => '/sites/%s/widgets/new',
- 'path_labels' => array(
- '$site' => '(string) Site ID or domain.'
- ),
- 'request_format' => array(
- 'id_base' => '(string) The base ID of the widget.',
- 'sidebar' => '(string) Optional. The ID of the sidebar where this widget will be active. If empty, the widget will be added in the first sidebar available.',
- 'position' => '(int) Optional. The position of the widget in the sidebar.',
- 'settings' => '(object) Optional. The settings for the new widget.',
- ),
- 'response_format' => array(
- 'id' => '(string) The actual ID of the widget.',
- 'sidebar' => '(string) The ID of the sidebar where this widget will be active.',
- 'position' => '(int) The final position of the widget in the sidebar.',
- 'settings' => '(array) The settings for the new widget.',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/12345678/widgets/new',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'id_base' => 'text',
- 'sidebar' => 'sidebar-2',
- 'position' => '0',
- 'settings' => array( 'title' => 'hello world' ),
- )
- ),
- 'example_response' => '
- {
- "id": "text-3",
- "id_base": "text",
- "settings": {
- "title": "hello world"
- },
- "sidebar": "sidebar-2",
- "position": 0
- }'
-) );
-
-
-class WPCOM_JSON_API_Add_Widgets_Endpoint extends WPCOM_JSON_API_Endpoint {
- /**
- * API callback.
- *
- * @param string $path
- * @param int $blog_id
- * @uses jetpack_require_lib
- * @uses Jetpack_Widgets
- *
- * @return array|WP_Error
- */
- function callback( $path = '', $blog_id = 0 ) {
- // Switch to the given blog.
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( ! current_user_can( 'edit_theme_options' ) ) {
- return new WP_Error( 'unauthorized', 'User is not authorized to access widgets', 403 );
- }
-
- jetpack_require_lib( 'widgets' );
- $args = $this->input( false, false ); // Don't filter the input
- if ( empty( $args ) || ! is_array( $args ) ) {
- return new WP_Error( 'no_data', 'No data was provided.', 400 );
- }
- if ( isset( $args['widgets'] ) || ! empty( $args['widgets'] ) ) {
- $widgets = Jetpack_Widgets::activate_widgets( $args['widgets'] );
- if ( is_wp_error( $widgets ) ) {
- return $widgets;
- }
- return array( 'widgets' => $widgets );
- }
- if ( ! isset( $args['id_base'] ) ) {
- return new WP_Error( 'missing_data', 'The data you provided was not accurate.', 400 );
- }
-
- if ( empty( $args['sidebar'] ) ) {
- $active_sidebars = Jetpack_Widgets::get_active_sidebars();
- reset( $active_sidebars );
- $args['sidebar'] = key( $active_sidebars );
- }
-
- return Jetpack_Widgets::activate_widget( $args['id_base'], $args['sidebar'], $args['position'], $args['settings'] );
- }
-
-}
-
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-autosave-post-v1-1-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-autosave-post-v1-1-endpoint.php
deleted file mode 100644
index 452a7c25..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-autosave-post-v1-1-endpoint.php
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Autosave_Post_v1_1_Endpoint( array(
- 'description' => 'Create a post autosave.',
- 'group' => '__do_not_document',
- 'stat' => 'posts:autosave',
- 'min_version' => '1.1',
- 'method' => 'POST',
- 'path' => '/sites/%s/posts/%d/autosave',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$post_ID' => '(int) The post ID',
- ),
- 'request_format' => array(
- 'content' => '(HTML) The post content.',
- 'title' => '(HTML) The post title.',
- 'excerpt' => '(HTML) The post excerpt.',
- ),
- 'response_format' => array(
- 'ID' => '(int) autodraft post ID',
- 'post_ID' => '(int) post ID',
- 'preview_URL' => '(string) preview URL for the post',
- 'modified' => '(ISO 8601 datetime) modified time',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/posts/1/autosave',
-
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
-
- 'body' => array(
- 'title' => 'Howdy',
- 'content' => 'Hello. I am a test post. I was created by the API',
- )
- )
-) );
-
-class WPCOM_JSON_API_Autosave_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_Endpoint {
- function __construct( $args ) {
- parent::__construct( $args );
- }
-
- // /sites/%s/posts/%d/autosave -> $blog_id, $post_id
- function callback( $path = '', $blog_id = 0, $post_id = 0 ) {
-
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $args = $this->query_args();
-
- $input = $this->input( false );
-
- if ( ! is_array( $input ) || ! $input ) {
- return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
- }
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- // Make sure Custom Post Types, etc. get registered.
- $this->load_theme_functions();
- }
-
- $post = get_post( $post_id );
-
- if ( ! $post || is_wp_error( $post ) ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
- }
-
- if ( ! current_user_can( 'edit_post', $post->ID ) ) {
- return new WP_Error( 'unauthorized', 'User cannot edit post', 403 );
- }
-
- $post_data = array (
- 'post_ID' => $post_id,
- 'post_title' => $input['title'],
- 'post_content' => $input['content'],
- 'post_excerpt' => $input['excerpt'],
- );
-
- $preview_url = add_query_arg( 'preview', 'true', get_permalink( $post->ID ) );
-
- if ( ! wp_check_post_lock( $post->ID ) &&
- get_current_user_id() == $post->post_author &&
- ( 'auto-draft' == $post->post_status || 'draft' == $post->post_status )
- ) {
- // Drafts and auto-drafts are just overwritten by autosave for the same user if the post is not locked
- $auto_ID = edit_post( wp_slash( $post_data ) );
- } else {
- // Non drafts or other users drafts are not overwritten. The autosave is stored in a special post revision for each user.
- $auto_ID = wp_create_post_autosave( wp_slash( $post_data ) );
- $nonce = wp_create_nonce( 'post_preview_' . $post->ID );
- $preview_url = add_query_arg( array( 'preview_id' => $auto_ID, 'preview_nonce' => $nonce ), $preview_url );
- }
-
- $updated_post = get_post( $auto_ID );
-
- if ( $updated_post && $updated_post->ID && $updated_post->post_modified ) {
- return array(
- 'ID' => $auto_ID,
- 'post_ID' => $post->ID,
- 'modified' => $this->format_date( $updated_post->post_modified ),
- 'preview_URL' => $preview_url
- );
- } else {
- return new WP_Error( 'autosave_error', __( 'Autosave encountered an unexpected error', 'jetpack' ), 500 );
- }
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-bulk-delete-post-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-bulk-delete-post-endpoint.php
deleted file mode 100644
index 31ab8d95..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-bulk-delete-post-endpoint.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Bulk_Delete_Post_Endpoint( array(
- 'description' => 'Delete multiple posts. Note: If the trash is enabled, this request will send non-trashed posts to the trash. Trashed posts will be permanently deleted.',
- 'group' => 'posts',
- 'stat' => 'posts:1:bulk-delete',
- 'min_version' => '1.1',
- 'max_version' => '1.1',
- 'method' => 'POST',
- 'path' => '/sites/%s/posts/delete',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'request_format' => array(
- 'post_ids' => '(array|string) An array, or comma-separated list, of Post IDs to delete or trash.',
- ),
-
- 'response_format' => array(
- 'results' => '(object) An object containing results, '
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/posts/delete',
-
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
-
- 'body' => array(
- 'post_ids' => array( 881, 882 ),
- ),
-
- )
-) );
-
-class WPCOM_JSON_API_Bulk_Delete_Post_Endpoint extends WPCOM_JSON_API_Update_Post_v1_1_Endpoint {
- // /sites/%s/posts/delete
- function callback( $path = '', $blog_id = 0, $post_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $input = $this->input();
-
- if ( is_array( $input['post_ids'] ) ) {
- $post_ids = (array) $input['post_ids'];
- } else if ( ! empty( $input['post_ids'] ) ) {
- $post_ids = explode( ',', $input['post_ids'] );
- } else {
- $post_ids = array();
- }
-
- if ( count( $post_ids ) < 1 ) {
- return new WP_Error( 'empty_post_ids', 'The request must include post_ids' );
- }
-
- $result = array(
- 'results' => array(),
- );
-
- foreach( $post_ids as $post_id ) {
- $result['results'][ $post_id ] = $this->delete_post( $path, $blog_id, $post_id );
- }
-
- return $result;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-bulk-restore-post-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-bulk-restore-post-endpoint.php
deleted file mode 100644
index 2e59cc1e..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-bulk-restore-post-endpoint.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Bulk_Restore_Post_Endpoint( array(
- 'description' => 'Restore multiple posts.',
- 'group' => 'posts',
- 'stat' => 'posts:1:bulk-restore',
- 'min_version' => '1.1',
- 'max_version' => '1.1',
- 'method' => 'POST',
- 'path' => '/sites/%s/posts/restore',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'request_format' => array(
- 'post_ids' => '(array|string) An array, or comma-separated list, of Post IDs to restore.',
- ),
-
- 'response_format' => array(
- 'results' => '(object) An object containing results, '
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/posts/restore',
-
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
-
- 'body' => array(
- 'post_ids' => array( 881, 882 ),
- ),
-
- )
-) );
-
-class WPCOM_JSON_API_Bulk_Restore_Post_Endpoint extends WPCOM_JSON_API_Update_Post_v1_1_Endpoint {
- // /sites/%s/posts/restore
- // The unused $object parameter is for making the method signature compatible with its parent class method.
- function callback( $path = '', $blog_id = 0, $object = null ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $input = $this->input();
-
- if ( is_array( $input['post_ids'] ) ) {
- $post_ids = (array) $input['post_ids'];
- } else if ( ! empty( $input['post_ids'] ) ) {
- $post_ids = explode( ',', $input['post_ids'] );
- } else {
- $post_ids = array();
- }
-
- if ( count( $post_ids ) < 1 ) {
- return new WP_Error( 'empty_post_ids', 'The request must include post_ids' );
- }
-
- $result = array(
- 'results' => array(),
- );
-
- foreach( $post_ids as $post_id ) {
- $result['results'][ $post_id ] = $this->restore_post( $path, $blog_id, $post_id );
- }
-
- return $result;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-bulk-update-comments-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-bulk-update-comments-endpoint.php
deleted file mode 100644
index 3468b81e..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-bulk-update-comments-endpoint.php
+++ /dev/null
@@ -1,219 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Bulk_Update_Comments_Endpoint( array(
- 'description' => 'Update multiple comment\'s status.',
- 'group' => 'comments',
- 'stat' => 'comments:1:bulk-update-status',
- 'min_version' => '1',
- 'max_version' => '1',
- 'method' => 'POST',
- 'path' => '/sites/%s/comments/status',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'request_format' => array(
- 'comment_ids' => '(array|string) An array, or comma-separated list, of Comment IDs to update.',
- 'status' => '(string) The new status value. Allowed values: approved, unapproved, spam, trash',
- ),
- 'response_format' => array(
- 'results' => '(array) An array of updated Comment IDs.'
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/comments/status',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'comment_ids' => array( 881, 882 ),
- 'status' => 'approved',
- ),
- )
-) );
-
-new WPCOM_JSON_API_Bulk_Update_Comments_Endpoint( array(
- 'description' => 'Permanently delete multiple comments. Note: this request will send non-trashed comments to the trash. Trashed comments will be permanently deleted.',
- 'group' => 'comments',
- 'stat' => 'comments:1:bulk-delete',
- 'min_version' => '1',
- 'max_version' => '1',
- 'method' => 'POST',
- 'path' => '/sites/%s/comments/delete',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'request_format' => array(
- 'comment_ids' => '(array|string) An array, or comma-separated list, of Comment IDs to delete or trash. (optional)',
- 'empty_status' => '(string) Force to permanently delete all spam or trash comments. (optional). Allowed values: spam, trash',
- ),
- 'response_format' => array(
- 'results' => '(array) An array of deleted or trashed Comment IDs.'
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/comments/delete',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'comment_ids' => array( 881, 882 ),
- ),
- )
-) );
-
-class WPCOM_JSON_API_Bulk_Update_Comments_Endpoint extends WPCOM_JSON_API_Endpoint {
- // /sites/%s/comments/status
- // /sites/%s/comments/delete
- function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $input = $this->input();
-
- if ( isset( $input['comment_ids'] ) && is_array( $input['comment_ids'] ) ) {
- $comment_ids = $input['comment_ids'];
- } else if ( isset( $input['comment_ids'] ) && ! empty( $input['comment_ids'] ) ) {
- $comment_ids = explode( ',', $input['comment_ids'] );
- } else {
- $comment_ids = array();
- }
-
- $result = array(
- 'results' => array(),
- );
-
- wp_defer_comment_counting( true );
-
- if ( $this->api->ends_with( $path, '/delete' ) ) {
- if ( isset( $input['empty_status'] ) && $this->validate_empty_status_param( $input['empty_status'] ) ) {
- $result['results'] = $this->delete_all( $input['empty_status'] );
- } else {
- $result['results'] = $this->bulk_delete_comments( $comment_ids );
- }
- } else {
- $status = isset( $input['status'] ) ? $input['status'] : '';
- $result['results'] = $this->bulk_update_comments_status( $comment_ids, $status );
- }
-
- wp_defer_comment_counting( false );
-
- return $result;
- }
-
- /**
- * Determine if the passed comment status is valid or not.
- *
- * @param string $status
- *
- * @return boolean
- */
- function validate_status_param( $status ) {
- return in_array( $status, array( 'approved', 'unapproved', 'pending', 'spam', 'trash' ), true );
- }
-
- /**
- * Determine if the passed empty status is valid or not.
- *
- * @param string $empty_status
- *
- * @return boolean
- */
- function validate_empty_status_param( $empty_status ) {
- return in_array( $empty_status, array( 'spam', 'trash' ), true );
- }
-
- /**
- * Update the status of multiple comments.
- *
- * @param array $comment_ids Comments to update.
- * @param string $status New status value.
- *
- * @return array Updated comments IDs.
- */
- function bulk_update_comments_status( $comment_ids, $status ) {
- if ( count( $comment_ids ) < 1 ) {
- return new WP_Error( 'empty_comment_ids', 'The request must include comment_ids', 400 );
- }
- if ( ! $this->validate_status_param( $status ) ) {
- return new WP_Error( 'invalid_status', "Invalid comment status value provided: '$status'.", 400 );
- }
- $results = array();
- foreach( $comment_ids as $comment_id ) {
- if ( ! current_user_can( 'edit_comment', $comment_id ) ) {
- continue;
- }
- $result = false;
- switch( $status ) {
- case 'approved':
- $result = wp_set_comment_status( $comment_id, 'approve' );
- break;
- case 'unapproved':
- case 'pending':
- $result = wp_set_comment_status( $comment_id, 'hold' );
- break;
- case 'spam':
- $result = wp_spam_comment( $comment_id );
- break;
- case 'trash':
- $result = wp_trash_comment( $comment_id );
- break;
- }
- if ( $result ) {
- $results[] = $comment_id;
- }
- }
- return $results;
- }
-
- /**
- * Permanenty delete multiple comments.
- *
- * Comments are only permanently deleted if trash is disabled or their status is `trash` or `spam`.
- * Otherwise they are moved to trash.
- *
- * @param array $comment_ids Comments to trash or delete.
- *
- * @return array Deleted comments IDs.
- */
- function bulk_delete_comments( $comment_ids ) {
- if ( count( $comment_ids ) < 1 ) {
- return new WP_Error( 'empty_comment_ids', 'The request must include comment_ids', 400 );
- }
- $results = array();
- foreach( $comment_ids as $comment_id ) {
- if ( ! current_user_can( 'edit_comment', $comment_id ) ) {
- continue;
- }
- if ( wp_delete_comment( $comment_id ) ) {
- $results[] = $comment_id;
- }
- }
- return $results;
- }
-
- /**
- * Delete all spam or trash comments.
- *
- * Comments are only permanently deleted if trash is disabled or their status is `trash` or `spam`.
- * Otherwise they are moved to trash.
- *
- * @param string $status Can be `spam` or `trash`.
- *
- * @return array Deleted comments IDs.
- */
- function delete_all( $status ) {
- global $wpdb;
- // This could potentially take a long time, so we only want to delete comments created
- // before this operation.
- // Comments marked `spam` or `trash` after this moment won't be touched.
- // Core uses the `pagegen_timestamp` hidden field for this same reason.
- $delete_time = gmdate('Y-m-d H:i:s');
- $comment_ids = $wpdb->get_col( $wpdb->prepare( "SELECT comment_ID FROM $wpdb->comments WHERE comment_approved = %s AND %s > comment_date_gmt", $status, $delete_time ) );
-
- if ( count( $comment_ids ) < 1 ) {
- return array();
- }
-
- return $this->bulk_delete_comments( $comment_ids );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-comment-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-comment-endpoint.php
deleted file mode 100644
index 20aee2b8..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-comment-endpoint.php
+++ /dev/null
@@ -1,207 +0,0 @@
-<?php
-
-
-abstract class WPCOM_JSON_API_Comment_Endpoint extends WPCOM_JSON_API_Endpoint {
- public $comment_object_format = array(
- // explicitly document and cast all output
- 'ID' => '(int) The comment ID.',
- 'post' => "(object>post_reference) A reference to the comment's post.",
- 'author' => '(object>author) The author of the comment.',
- 'date' => "(ISO 8601 datetime) The comment's creation time.",
- 'URL' => '(URL) The full permalink URL to the comment.',
- 'short_URL' => '(URL) The wp.me short URL.',
- 'content' => '(HTML) <code>context</code> dependent.',
- 'raw_content' => '(string) Raw comment content.',
- 'status' => array(
- 'approved' => 'The comment has been approved.',
- 'unapproved' => 'The comment has been held for review in the moderation queue.',
- 'spam' => 'The comment has been marked as spam.',
- 'trash' => 'The comment is in the trash.',
- ),
- 'parent' => "(object>comment_reference|false) A reference to the comment's parent, if it has one.",
- 'type' => array(
- 'comment' => 'The comment is a regular comment.',
- 'trackback' => 'The comment is a trackback.',
- 'pingback' => 'The comment is a pingback.',
- 'review' => 'The comment is a product review.',
- ),
- 'like_count' => '(int) The number of likes for this comment.',
- 'i_like' => '(bool) Does the current user like this comment?',
- 'meta' => '(object) Meta data',
- 'can_moderate' => '(bool) Whether current user can moderate the comment.',
- );
-
- // public $response_format =& $this->comment_object_format;
-
- function __construct( $args ) {
- if ( !$this->response_format ) {
- $this->response_format =& $this->comment_object_format;
- }
- parent::__construct( $args );
- }
-
- function get_comment( $comment_id, $context ) {
- global $blog_id;
-
- $comment = get_comment( $comment_id );
- if ( !$comment || is_wp_error( $comment ) ) {
- return new WP_Error( 'unknown_comment', 'Unknown comment', 404 );
- }
-
- $types = array( '', 'comment', 'pingback', 'trackback', 'review' );
- if ( !in_array( $comment->comment_type, $types ) ) {
- return new WP_Error( 'unknown_comment', 'Unknown comment', 404 );
- }
-
- $post = get_post( $comment->comment_post_ID );
- if ( !$post || is_wp_error( $post ) ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
- }
-
- $status = wp_get_comment_status( $comment->comment_ID );
-
- // Permissions
- switch ( $context ) {
- case 'edit' :
- if ( !current_user_can( 'edit_comment', $comment->comment_ID ) ) {
- return new WP_Error( 'unauthorized', 'User cannot edit comment', 403 );
- }
-
- $GLOBALS['post'] = $post;
- $comment = get_comment_to_edit( $comment->comment_ID );
- foreach ( array( 'comment_author', 'comment_author_email', 'comment_author_url' ) as $field ) {
- $comment->$field = htmlspecialchars_decode( $comment->$field, ENT_QUOTES );
- }
- break;
- case 'display' :
- if ( 'approved' !== $status ) {
- $current_user_id = get_current_user_id();
- $user_can_read_comment = false;
- if ( $current_user_id && $comment->user_id && $current_user_id == $comment->user_id ) {
- $user_can_read_comment = true;
- } elseif (
- $comment->comment_author_email && $comment->comment_author
- &&
- isset( $this->api->token_details['user'] )
- &&
- isset( $this->api->token_details['user']['user_email'] )
- &&
- $this->api->token_details['user']['user_email'] === $comment->comment_author_email
- &&
- $this->api->token_details['user']['display_name'] === $comment->comment_author
- ) {
- $user_can_read_comment = true;
- } else {
- $user_can_read_comment = current_user_can( 'edit_posts' );
- }
-
- if ( !$user_can_read_comment ) {
- return new WP_Error( 'unauthorized', 'User cannot read unapproved comment', 403 );
- }
- }
-
- $GLOBALS['post'] = $post;
- setup_postdata( $post );
- break;
- default :
- return new WP_Error( 'invalid_context', 'Invalid API CONTEXT', 400 );
- }
-
- $can_view = $this->user_can_view_post( $post->ID );
- if ( !$can_view || is_wp_error( $can_view ) ) {
- return $can_view;
- }
-
- $GLOBALS['comment'] = $comment;
- $response = array();
-
- foreach ( array_keys( $this->comment_object_format ) as $key ) {
- switch ( $key ) {
- case 'ID' :
- // explicitly cast all output
- $response[$key] = (int) $comment->comment_ID;
- break;
- case 'post' :
- $response[$key] = (object) array(
- 'ID' => (int) $post->ID,
- 'title' => (string) get_the_title( $post->ID ),
- 'type' => (string) $post->post_type,
- 'link' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $post->ID ),
- );
- break;
- case 'author' :
- $response[$key] = (object) $this->get_author( $comment, current_user_can( 'edit_comment', $comment->comment_ID ) );
- break;
- case 'date' :
- $response[$key] = (string) $this->format_date( $comment->comment_date_gmt, $comment->comment_date );
- break;
- case 'URL' :
- $response[$key] = (string) esc_url_raw( get_comment_link( $comment->comment_ID ) );
- break;
- case 'short_URL' :
- // @todo - pagination
- $response[$key] = (string) esc_url_raw( wp_get_shortlink( $post->ID ) . "%23comment-{$comment->comment_ID}" );
- break;
- case 'content' :
- if ( 'display' === $context ) {
- ob_start();
- comment_text();
- $response[$key] = (string) ob_get_clean();
- } else {
- $response[$key] = (string) $comment->comment_content;
- }
- break;
- case 'raw_content':
- $response[$key] = (string) $comment->comment_content;
- break;
- case 'status' :
- $response[$key] = (string) $status;
- break;
- case 'parent' : // (object|false)
- if ( $comment->comment_parent ) {
- $parent = get_comment( $comment->comment_parent );
- $response[$key] = (object) array(
- 'ID' => (int) $parent->comment_ID,
- 'type' => (string) ( $parent->comment_type ? $parent->comment_type : 'comment' ),
- 'link' => (string) $this->links->get_comment_link( $blog_id, $parent->comment_ID ),
- );
- } else {
- $response[$key] = false;
- }
- break;
- case 'type' :
- $response[$key] = (string) ( $comment->comment_type ? $comment->comment_type : 'comment' );
- break;
- case 'like_count' :
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $response[ $key ] = (int) $this->api->comment_like_count( $blog_id, $post->ID, $comment->comment_ID );
- }
- break;
- case 'i_like' :
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $response[ $key ] = (bool) Likes::comment_like_current_user_likes( $blog_id, $comment->comment_ID );
- }
- break;
- case 'meta' :
- $response[$key] = (object) array(
- 'links' => (object) array(
- 'self' => (string) $this->links->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID ),
- 'help' => (string) $this->links->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID, 'help' ),
- 'site' => (string) $this->links->get_site_link( $this->api->get_blog_id_for_output() ),
- 'post' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $comment->comment_post_ID ),
- 'replies' => (string) $this->links->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID, 'replies/' ),
- 'likes' => (string) $this->links->get_comment_link( $this->api->get_blog_id_for_output(), $comment->comment_ID, 'likes/' ),
- ),
- );
- break;
- case 'can_moderate':
- $response[ $key ] = (bool) current_user_can( 'edit_comment', $comment_id );
- break;
- }
- }
-
- unset( $GLOBALS['comment'], $GLOBALS['post'] );
- return $response;
- }
-}
-
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-delete-media-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-delete-media-endpoint.php
deleted file mode 100644
index c32be52f..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-delete-media-endpoint.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Delete_Media_Endpoint( array(
- 'description' => 'Delete a piece of media.',
- 'group' => 'media',
- 'stat' => 'media:1:delete',
- 'method' => 'POST',
- 'path' => '/sites/%s/media/%d/delete',
- 'deprecated' => true,
- 'new_version' => '1.1',
- 'max_version' => '1',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$media_ID' => '(int) The media ID',
- ),
-
- 'response_format' => array(
- 'status' => '(string) Returns deleted if the media was successfully deleted',
- 'id' => '(int) The ID of the media item',
- 'date' => '(ISO 8601 datetime) The date the media was uploaded',
- 'parent' => '(int) ID of the post this media is attached to',
- 'link' => '(string) URL to the file',
- 'title' => '(string) File name',
- 'caption' => '(string) User provided caption of the file',
- 'description' => '(string) Description of the file',
- 'metadata' => '(array) Misc array of information about the file, such as exif data or sizes',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/media/$media_ID/delete',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- )
- )
-) );
-
-class WPCOM_JSON_API_Delete_Media_Endpoint extends WPCOM_JSON_API_Endpoint {
- function callback( $path = '', $blog_id = 0, $media_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( ! current_user_can( 'delete_post', $media_id ) ) {
- return new WP_Error( 'unauthorized', 'User cannot view media', 403 );
- }
-
- $item = $this->get_media_item( $media_id );
-
- if ( is_wp_error( $item ) ) {
- return new WP_Error( 'unknown_media', 'Unknown Media', 404 );
- }
-
- wp_delete_post( $media_id );
- $item->status = 'deleted';
- return $item;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-delete-media-v1-1-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-delete-media-v1-1-endpoint.php
deleted file mode 100644
index cf402f0d..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-delete-media-v1-1-endpoint.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Delete_Media_v1_1_Endpoint( array(
- 'description' => 'Delete a piece of media. Note: Media is deleted and not trashed.',
- 'group' => 'media',
- 'stat' => 'media:1:delete',
- 'min_version' => '1.1',
- 'max_version' => '1.1',
- 'method' => 'POST',
- 'path' => '/sites/%s/media/%d/delete',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$media_ID' => '(int) The media ID',
- ),
-
- 'response_format' => array(
- 'status' => '(string) Returns deleted if the media was successfully deleted',
- 'ID' => '(int) The ID of the media item',
- 'date' => '(ISO 8601 datetime) The date the media was uploaded',
- 'post_ID' => '(int) ID of the post this media is attached to',
- 'author_ID' => '(int) ID of the user who uploaded the media',
- 'URL' => '(string) URL to the file',
- 'guid' => '(string) Unique identifier',
- 'file' => '(string) File name',
- 'extension' => '(string) File extension',
- 'mime_type' => '(string) File mime type',
- 'title' => '(string) File name',
- 'caption' => '(string) User-provided caption of the file',
- 'description' => '(string) Description of the file',
- 'alt' => '(string) Alternative text for image files.',
- 'thumbnails' => '(object) Media item thumbnail URL options',
- 'height' => '(int) (Image & video only) Height of the media item',
- 'width' => '(int) (Image & video only) Width of the media item',
- 'length' => '(int) (Video & audio only) Duration of the media item, in seconds',
- 'exif' => '(array) (Image & audio only) Exif (meta) information about the media item',
- 'videopress_guid' => '(string) (Video only) VideoPress GUID of the video when uploaded on a blog with VideoPress',
- 'videopress_processing_done' => '(bool) (Video only) If the video is Uuploaded on a blog with VideoPress, this will return the status of processing on the Video'
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/media/$media_ID/delete',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- )
- )
-) );
-
-class WPCOM_JSON_API_Delete_Media_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint {
- function callback( $path = '', $blog_id = 0, $media_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( ! current_user_can( 'delete_post', $media_id ) ) {
- return new WP_Error( 'unauthorized', 'User is not authorized delete media', 403 );
- }
-
- $item = $this->get_media_item_v1_1( $media_id );
-
- if ( is_wp_error( $item ) ) {
- return new WP_Error( 'unknown_media', 'Unknown Media', 404 );
- }
-
- wp_delete_post( $media_id, true );
- $item->status = 'deleted';
- return $item;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-edit-media-v1-2-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-edit-media-v1-2-endpoint.php
deleted file mode 100644
index 89d1a67c..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-edit-media-v1-2-endpoint.php
+++ /dev/null
@@ -1,428 +0,0 @@
-<?php
-
-jetpack_require_lib( 'class.media' );
-
-define( 'REVISION_HISTORY_MAXIMUM_AMOUNT', 0 );
-define( 'WP_ATTACHMENT_IMAGE_ALT', '_wp_attachment_image_alt' );
-
-new WPCOM_JSON_API_Edit_Media_v1_2_Endpoint( array(
- 'description' => 'Edit a media item.',
- 'group' => 'media',
- 'stat' => 'media:1:POST',
- 'min_version' => '1',
- 'max_version' => '1.2',
- 'method' => 'POST',
- 'path' => '/sites/%s/media/%d/edit',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$media_ID' => '(int) The ID of the media item',
- ),
-
- 'request_format' => array(
- 'parent_id' => '(int) ID of the post this media is attached to',
- 'title' => '(string) The file name.',
- 'caption' => '(string) File caption.',
- 'description' => '(HTML) Description of the file.',
- 'alt' => "(string) Alternative text for image files.",
- 'artist' => "(string) Audio Only. Artist metadata for the audio track.",
- 'album' => "(string) Audio Only. Album metadata for the audio track.",
- 'media' => "(object) An object file to attach to the post. To upload media, " .
- "the entire request should be multipart/form-data encoded. " .
- "Multiple media items will be displayed in a gallery. Accepts " .
- "jpg, jpeg, png, gif, pdf, doc, ppt, odt, pptx, docx, pps, ppsx, xls, xlsx, key. " .
- "Audio and Video may also be available. See <code>allowed_file_types</code> " .
- "in the options response of the site endpoint. " .
- "<br /><br /><strong>Example</strong>:<br />" .
- "<code>curl \<br />--form 'title=Image' \<br />--form 'media=@/path/to/file.jpg' \<br />-H 'Authorization: BEARER your-token' \<br />'https://public-api.wordpress.com/rest/v1/sites/123/posts/new'</code>",
- 'attrs' => "(object) An Object of attributes (`title`, `description` and `caption`) " .
- "are supported to assign to the media uploaded via the `media` or `media_url`",
- 'media_url' => "(string) An URL of the image to attach to a post.",
- ),
-
- 'response_format' => array(
- 'ID' => '(int) The ID of the media item',
- 'date' => '(ISO 8601 datetime) The date the media was uploaded',
- 'post_ID' => '(int) ID of the post this media is attached to',
- 'author_ID' => '(int) ID of the user who uploaded the media',
- 'URL' => '(string) URL to the file',
- 'guid' => '(string) Unique identifier',
- 'file' => '(string) File name',
- 'extension' => '(string) File extension',
- 'mime_type' => '(string) File mime type',
- 'title' => '(string) File name',
- 'caption' => '(string) User provided caption of the file',
- 'description' => '(string) Description of the file',
- 'alt' => '(string) Alternative text for image files.',
- 'thumbnails' => '(object) Media item thumbnail URL options',
- 'height' => '(int) (Image & video only) Height of the media item',
- 'width' => '(int) (Image & video only) Width of the media item',
- 'length' => '(int) (Video & audio only) Duration of the media item, in seconds',
- 'exif' => '(array) (Image & audio only) Exif (meta) information about the media item',
- 'videopress_guid' => '(string) (Video only) VideoPress GUID of the video when uploaded on a blog with VideoPress',
- 'videopress_processing_done' => '(bool) (Video only) If the video is uploaded on a blog with VideoPress, this will return the status of processing on the video.',
- 'revision_history' => '(object) An object with `items` and `original` keys. ' .
- '`original` is an object with data about the original image. ' .
- '`items` is an array of snapshots of the previous images of this Media. ' .
- 'Each item has the `URL`, `file, `extension`, `date`, and `mime_type` fields.'
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.2/sites/82974409/media/446',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'title' => 'Updated Title'
- )
- )
-) );
-
-class WPCOM_JSON_API_Edit_Media_v1_2_Endpoint extends WPCOM_JSON_API_Update_Media_v1_1_Endpoint {
- /**
- * Return an array of mime_type items allowed when the media file is uploaded.
- *
- * @return {Array} mime_type array
- */
- static function get_allowed_mime_types( $default_mime_types ) {
- return array_unique( array_merge( $default_mime_types, array(
- 'application/msword', // .doc
- 'application/vnd.ms-powerpoint', // .ppt, .pps
- 'application/vnd.ms-excel', // .xls
- 'application/vnd.openxmlformats-officedocument.presentationml.presentation', // .pptx
- 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', // .ppsx
- 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', // .xlsx
- 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', // .docx
- 'application/vnd.oasis.opendocument.text', // .odt
- 'application/pdf', // .pdf
- ) ) );
- }
-
- /**
- * Update the media post grabbing the post values from
- * the `attrs` parameter
- *
- * @param {Number} $media_id - post media ID
- * @param {Object} $attrs - `attrs` parameter sent from the client in the request body
- * @return
- */
- private function update_by_attrs_parameter( $media_id, $attrs ) {
- $insert = array();
-
- // Attributes: Title, Caption, Description
- if ( isset( $attrs['title'] ) ) {
- $insert['post_title'] = $attrs['title'];
- }
-
- if ( isset( $attrs['caption'] ) ) {
- $insert['post_excerpt'] = $attrs['caption'];
- }
-
- if ( isset( $attrs['description'] ) ) {
- $insert['post_content'] = $attrs['description'];
- }
-
- if ( ! empty( $insert ) ) {
- $insert['ID'] = $media_id;
- $update_action = wp_update_post( (object) $insert );
- if ( is_wp_error( $update_action ) ) {
- return $update_action;
- }
- }
-
- // Attributes: Alt
- if ( isset( $attrs['alt'] ) ) {
- $alt = wp_strip_all_tags( $attrs['alt'], true );
- $post_update_action = update_post_meta( $media_id, WP_ATTACHMENT_IMAGE_ALT, $alt );
-
- if ( is_wp_error( $post_update_action ) ) {
- return $post_update_action;
- }
- }
-
- // Attributes: Artist, Album
- $id3_meta = array();
-
- foreach ( array( 'artist', 'album' ) as $key ) {
- if ( isset( $attrs[ $key ] ) ) {
- $id3_meta[ $key ] = wp_strip_all_tags( $attrs[ $key ], true );
- }
- }
-
- if ( ! empty( $id3_meta ) ) {
- // Before updating metadata, ensure that the item is audio
- $item = $this->get_media_item_v1_1( $media_id );
- if ( 0 === strpos( $item->mime_type, 'audio/' ) ) {
- $update_action = wp_update_attachment_metadata( $media_id, $id3_meta );
- if ( is_wp_error( $update_action ) ) {
- return $update_action;
- }
- }
- }
-
- return $post_update_action;
- }
-
- /**
- * Return an object to be used to store into the revision_history
- *
- * @param {Object} $media_item - media post object
- * @return {Object} the snapshot object
- */
- private function get_snapshot( $media_item ) {
- $current_file = get_attached_file( $media_item->ID );
- $file_paths = pathinfo( $current_file );
-
- $snapshot = array(
- 'date' => (string) $this->format_date( $media_item->post_modified_gmt, $media_item->post_modified ),
- 'URL' => (string) wp_get_attachment_url( $media_item->ID ),
- 'file' => (string) $file_paths['basename'],
- 'extension' => (string) $file_paths['extension'],
- 'mime_type' => (string) $media_item->post_mime_type,
- 'size' => (int) filesize( $current_file )
- );
-
- return (object) $snapshot;
- }
-
- /**
- * Try to remove the temporal file from the given file array.
- *
- * @param {Array} $file_array - Array with data about the temporal file
- * @return {Boolean} `true` if the file has been removed.
- * `false` either the file doesn't exist or it couldn't be removed.
- */
- private function remove_tmp_file( $file_array ) {
- if ( ! file_exists ( $file_array['tmp_name'] ) ) {
- return false;
- }
- return @unlink( $file_array['tmp_name'] );
- }
-
- /**
- * Save the given temporal file in a local folder.
- *
- * @param {Array} $file_array
- * @param {Number} $media_id
- * @return {Array|WP_Error} An array with information about the new file saved or a WP_Error is something went wrong.
- */
- private function save_temporary_file( $file_array, $media_id ) {
- $tmp_filename = $file_array['tmp_name'];
-
- if ( ! file_exists( $tmp_filename ) ) {
- return new WP_Error( 'invalid_input', 'No media provided in input.' );
- }
-
- // add additional mime_types through of the `jetpack_supported_media_sideload_types` filter
- $mime_type_static_filter = array(
- 'WPCOM_JSON_API_Edit_Media_v1_2_Endpoint',
- 'get_allowed_mime_types'
- );
-
- add_filter( 'jetpack_supported_media_sideload_types', $mime_type_static_filter );
- if (
- ! $this->is_file_supported_for_sideloading( $tmp_filename ) &&
- ! file_is_displayable_image( $tmp_filename )
- ) {
- @unlink( $tmp_filename );
- return new WP_Error( 'invalid_input', 'Invalid file type.', 403 );
- }
- remove_filter( 'jetpack_supported_media_sideload_types', $mime_type_static_filter );
-
- // generate a new file name
- $tmp_new_filename = Jetpack_Media::generate_new_filename( $media_id, $file_array[ 'name' ] );
-
- // start to create the parameters to move the temporal file
- $overrides = array( 'test_form' => false );
-
- $time = $this->get_time_string_from_guid( $media_id );
-
- $file_array['name'] = $tmp_new_filename;
- $file = wp_handle_sideload( $file_array, $overrides, $time );
-
- $this->remove_tmp_file( $file_array );
-
- if ( isset( $file['error'] ) ) {
- return new WP_Error( 'upload_error', $file['error'] );
- }
-
- return $file;
- }
-
- /**
- * File urls use the post date to generate a folder path.
- * Post dates can change, so we use the original date used in the guid
- * url so edits can remain in the same folder. In the following function
- * we capture a string in the format of `YYYY/MM` from the guid.
- *
- * For example with a guid of
- * "http://test.files.wordpress.com/2016/10/test.png" the resulting string
- * would be: "2016/10"
- *
- * @param $media_id
- *
- * @return string
- */
- private function get_time_string_from_guid( $media_id ) {
- $time = date( "Y/m", strtotime( current_time( 'mysql' ) ) );
- if ( $media = get_post( $media_id ) ) {
- $pattern = '/\/(\d{4}\/\d{2})\//';
- preg_match( $pattern, $media->guid, $matches );
- if ( count( $matches ) > 1 ) {
- $time = $matches[1];
- }
- }
- return $time;
- }
-
- /**
- * Get the image from a remote url and then save it locally.
- *
- * @param {Number} $media_id - media post ID
- * @param {String} $url - image URL to save locally
- * @return {Array|WP_Error} An array with information about the new file saved or a WP_Error is something went wrong.
- */
- private function build_file_array_from_url( $media_id, $url ) {
- if ( ! $url ) {
- return null;
- }
-
- // if we didn't get a URL, let's bail
- $parsed = @parse_url( $url );
- if ( empty( $parsed ) ) {
- return new WP_Error( 'invalid_url', 'No media provided in url.' );
- }
-
- // save the remote image into a tmp file
- $tmp = download_url( wpcom_get_private_file( $url ) );
- if ( is_wp_error( $tmp ) ) {
- return $tmp;
- }
-
- return array(
- 'name' => basename( $url ),
- 'tmp_name' => $tmp
- );
- }
-
- /**
- * Add a new item into revision_history array.
- *
- * @param {Object} $media_item - media post
- * @param {file} $file - file recentrly added
- * @param {Boolean} $has_original_media - condition is the original media has been already added
- * @return {Boolean} `true` if the item has been added. Otherwise `false`.
- */
- private function register_revision( $media_item, $file, $has_original_media ) {
- if (
- is_wp_error( $file ) ||
- ! $has_original_media
- ) {
- return false;
- }
-
- add_post_meta( $media_item->ID, Jetpack_Media::$WP_REVISION_HISTORY, $this->get_snapshot( $media_item ) );
- }
-
- function callback( $path = '', $blog_id = 0, $media_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $media_item = get_post( $media_id );
-
- if ( ! $media_item || is_wp_error( $media_item ) ) {
- return new WP_Error( 'unknown_media', 'Unknown Media', 404 );
- }
-
- if ( is_wp_error( $media_item ) ) {
- return $media_item;
- }
-
- if ( ! current_user_can( 'upload_files', $media_id ) ) {
- return new WP_Error( 'unauthorized', 'User cannot view media', 403 );
- }
-
- $input = $this->input( true );
-
- // images
- $media_file = $input['media'] ? (array) $input['media'] : null;
- $media_url = $input['media_url'];
- $media_attrs = $input['attrs'] ? (array) $input['attrs'] : null;
-
- if ( isset( $media_url ) || $media_file ) {
- $user_can_upload_files = current_user_can( 'upload_files' ) || $this->api->is_authorized_with_upload_token();
-
- if ( ! $user_can_upload_files ) {
- return new WP_Error( 'unauthorized', 'User cannot upload media.', 403 );
- }
-
- $has_original_media = Jetpack_Media::get_original_media( $media_id );
-
- if ( ! $has_original_media ) {
- // The first time that the media is updated
- // the original media is stored into the revision_history
- $snapshot = $this->get_snapshot( $media_item );
- add_post_meta( $media_id, Jetpack_Media::$WP_ORIGINAL_MEDIA, $snapshot, true );
- }
-
- // save the temporal file locally
- $temporal_file = $media_file ? $media_file : $this->build_file_array_from_url( $media_id, $media_url );
-
- if ( is_wp_error( $temporal_file ) ) {
- return $temporal_file;
- }
-
- $uploaded_file = $this->save_temporary_file( $temporal_file, $media_id );
-
- if ( is_wp_error( $uploaded_file ) ) {
- return $uploaded_file;
- }
-
- // revision_history control
- $this->register_revision( $media_item, $uploaded_file, $has_original_media );
-
- $uploaded_path = $uploaded_file['file'];
- $udpated_mime_type = $uploaded_file['type'];
- $was_updated = update_attached_file( $media_id, $uploaded_path );
-
- if ( $was_updated ) {
- $new_metadata = wp_generate_attachment_metadata( $media_id, $uploaded_path );
- wp_update_attachment_metadata( $media_id, $new_metadata );
-
- // check maximum amount of revision_history
- Jetpack_Media::limit_revision_history( $media_id, REVISION_HISTORY_MAXIMUM_AMOUNT );
-
- wp_update_post( (object) array(
- 'ID' => $media_id,
- 'post_mime_type' => $udpated_mime_type
- ) );
- }
-
- unset( $input['media'] );
- unset( $input['media_url'] );
- unset( $input['attrs'] );
- }
-
- // update media through of `attrs` value it it's defined
- if ( ( $media_file || isset( $media_url ) ) && $media_attrs ) {
- $was_updated = $this->update_by_attrs_parameter( $media_id, $media_attrs );
-
- if ( is_wp_error( $was_updated ) ) {
- return $was_updated;
- }
- }
-
- // call parent method
- $response = parent::callback( $path, $blog_id, $media_id );
-
- // expose `revision_history` object
- $response->revision_history = (object) array(
- 'items' => (array) Jetpack_Media::get_revision_history( $media_id ),
- 'original' => (object) Jetpack_Media::get_original_media( $media_id )
- );
-
- return $response;
- }
-}
-
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-autosave-v1-1-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-autosave-v1-1-endpoint.php
deleted file mode 100644
index 6b58a08d..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-autosave-v1-1-endpoint.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Get_Autosave_v1_1_Endpoint( array(
- 'description' => 'Get the most recent autosave for a post.',
- 'group' => '__do_not_document',
- 'stat' => 'posts:autosave',
- 'min_version' => '1.1',
- 'method' => 'GET',
- 'path' => '/sites/%s/posts/%d/autosave',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$post_ID' => '(int) The post ID',
- ),
- 'response_format' => array(
- 'ID' => '(int) autodraft post ID',
- 'post_ID' => '(int) post ID',
- 'author_ID' => '(int) author ID',
- 'title' => '(HTML) The post title.',
- 'content' => '(HTML) The post content.',
- 'excerpt' => '(HTML) The post excerpt.',
- 'preview_URL' => '(string) preview URL for the post',
- 'modified' => '(ISO 8601 datetime) modified time',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/posts/1/autosave',
-) );
-
-class WPCOM_JSON_API_Get_Autosave_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_Endpoint {
- function __construct( $args ) {
- parent::__construct( $args );
- }
-
- // /sites/%s/posts/%d/autosave -> $blog_id, $post_id
- function callback( $path = '', $blog_id = 0, $post_id = 0 ) {
-
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $post = get_post( $post_id );
-
- if ( ! $post || is_wp_error( $post ) ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
- }
-
- if ( ! current_user_can( 'edit_post', $post->ID ) ) {
- return new WP_Error( 'unauthorized', 'User cannot edit post', 403 );
- }
-
- $autosave = wp_get_post_autosave( $post->ID );
-
- if ( $autosave ) {
- $preview_url = add_query_arg( 'preview', 'true', get_permalink( $post->ID ) );
- $nonce = wp_create_nonce( 'post_preview_' . $post->ID );
- $preview_url = add_query_arg( array( 'preview_id' => $auto_ID, 'preview_nonce' => $nonce ), $preview_url );
-
- return array(
- 'ID' => $autosave->ID,
- 'author_ID' => $autosave->post_author,
- 'post_ID' => $autosave->post_parent,
- 'title' => $autosave->post_title,
- 'content' => $autosave->post_content,
- 'excerpt' => $autosave->post_excerpt,
- 'preview_URL' => $preview_url,
- 'modified' => $this->format_date( $autosave->post_modified )
- );
- } else {
- return new WP_Error( 'not_found', 'No autosaves exist for this post', 404 );
- }
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comment-counts-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comment-counts-endpoint.php
deleted file mode 100644
index 705f2e61..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comment-counts-endpoint.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_GET_Comment_Counts_Endpoint( array(
- 'description' => 'Get comment counts for each available status',
- 'group' => 'comments',
- 'stat' => 'comments:1:comment-counts',
- 'method' => 'GET',
- 'path' => '/sites/%s/comment-counts',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'query_parameters' => array(
- 'post_id' => '(int) post ID for filtering the comment counts by post',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/comment-counts',
-
- 'response_format' => array(
- 'all' => '(int) Combined number of approved and unapproved comments',
- 'approved' => '(int) Number of approved comments',
- 'pending' => '(int) Number of unapproved comments',
- 'trash' => '(int) Number of trash comments',
- 'spam' => '(int) Number of spam comments',
- 'post_trashed' => '(int) Number of comments whose parent post has been trashed',
- 'total_comments' => '(int) Combined number of comments in each category',
- )
-) );
-
-class WPCOM_JSON_API_GET_Comment_Counts_Endpoint extends WPCOM_JSON_API_Endpoint {
-
- // /sites/%s/comment-counts
- public function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
-
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( ! get_current_user_id() ) {
- return new WP_Error( 'authorization_required', 'An active access token must be used to retrieve comment counts.', 403 );
- }
-
- if ( ! current_user_can_for_blog( $blog_id, 'edit_posts' ) ) {
- return new WP_Error( 'authorization_required', 'You are not authorized to view comment counts for this blog.', 403 );
- }
-
- $args = $this->query_args();
-
- // If 0 is passed wp_count_comments will default to fetching counts for the whole site.
- $post_id = ! empty( $args['post_id'] ) ? intval( $args['post_id'] ) : 0;
-
- // Check if post with given id exists.
- if ( ! empty( $post_id ) && ! is_object( get_post( $post_id ) ) ) {
- return new WP_Error( 'invalid_input', 'Provided post_id does not exist', 400 );
- }
-
- $comment_counts = get_object_vars( $this->api->wp_count_comments( $post_id ) );
-
- // Keys coming from wp_count_comments don't match the ones that we use in
- // wp-admin and Calypso and are not consistent. Let's normalize the response.
- return array(
- 'all' => (int) $comment_counts['all'],
- 'approved' => (int) $comment_counts['approved'],
- 'pending' => (int) $comment_counts['moderated'],
- 'trash' => (int) $comment_counts['trash'],
- 'spam' => (int) $comment_counts['spam'],
- 'post_trashed' => (int) $comment_counts['post-trashed'],
- 'total_comments' => (int) $comment_counts['total_comments']
- );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comment-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comment-endpoint.php
deleted file mode 100644
index 3a928bfd..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comment-endpoint.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Get_Comment_Endpoint( array(
- 'description' => 'Get a single comment.',
- 'group' => 'comments',
- 'stat' => 'comments:1',
-
- 'method' => 'GET',
- 'path' => '/sites/%s/comments/%d',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$comment_ID' => '(int) The comment ID'
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/comments/147564'
-) );
-
-class WPCOM_JSON_API_Get_Comment_Endpoint extends WPCOM_JSON_API_Comment_Endpoint {
- // /sites/%s/comments/%d -> $blog_id, $comment_id
- function callback( $path = '', $blog_id = 0, $comment_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $args = $this->query_args();
-
- $return = $this->get_comment( $comment_id, $args['context'] );
- if ( !$return || is_wp_error( $return ) ) {
- return $return;
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'comments' );
-
- return $return;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comment-history-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comment-history-endpoint.php
deleted file mode 100644
index 37aa9206..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comment-history-endpoint.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_GET_Comment_History_Endpoint( array(
- 'description' => 'Get the audit history for given comment',
- 'group' => 'comments',
- 'stat' => 'comments:1:comment-history',
- 'method' => 'GET',
- 'path' => '/sites/%s/comment-history/%d',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$comment_ID' => '(int) The comment ID'
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/comment-history/11',
-
- 'response_format' => array(
- 'comment_history' => '(array) Array of arrays representing the comment history objects.'
- )
-) );
-
-class WPCOM_JSON_API_GET_Comment_History_Endpoint extends WPCOM_JSON_API_Endpoint {
-
- // /sites/%s/comment-history/%d
- public function callback( $path = '', $blog_id = 0, $comment_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
-
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( ! get_current_user_id() ) {
- return new WP_Error( 'authorization_required', 'An active access token must be used to retrieve comment history.', 403 );
- }
-
- if ( ! current_user_can_for_blog( $blog_id, 'edit_posts' ) ) {
- return new WP_Error( 'authorization_required', 'You are not authorized to view comment history on this blog.', 403 );
- }
-
- if ( ! method_exists( 'Akismet', 'get_comment_history' ) ) {
- return new WP_Error( 'akismet_required', 'Akismet plugin must be active for this feature to work', 503 );
- }
-
- $comment_history = Akismet::get_comment_history( $comment_id );
-
- foreach ( $comment_history as &$item ) {
- // Times are stored as floating point values in microseconds.
- // We don't need that precision on the client so let's get rid of the decimal part.
- $item['time'] = intval( $item['time'] );
- }
-
- return array( 'comment_history' => $comment_history );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comments-tree-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comments-tree-endpoint.php
deleted file mode 100644
index fdc3bee7..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comments-tree-endpoint.php
+++ /dev/null
@@ -1,187 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Get_Comments_Tree_Endpoint( array(
- 'description' => 'Get a comments tree for site.',
- 'max_version' => '1',
- 'new_version' => '1.1',
- 'group' => 'comments-tree',
- 'stat' => 'comments-tree:1',
-
- 'method' => 'GET',
- 'path' => '/sites/%s/comments-tree',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'query_parameters' => array(
- 'status' => '(string) Filter returned comments based on this value (allowed values: all, approved, unapproved, pending, trash, spam).'
- ),
- 'response_format' => array(
- 'comments_count' => '(int) Total number of comments on the site',
- 'comments_tree' => '(array) Array of arrays representing the comments tree for given site (max 50000)',
- 'trackbacks_count' => '(int) Total number of trackbacks on the site',
- 'trackbacks_tree' => '(array) Array of arrays representing the trackbacks tree for given site (max 50000)',
- 'pingbacks_count' => '(int) Total number of pingbacks on the site',
- 'pingbacks_tree' => '(array) Array of arrays representing the pingbacks tree for given site (max 50000)',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/comments-tree?status=approved'
-) );
-
-class WPCOM_JSON_API_Get_Comments_Tree_Endpoint extends WPCOM_JSON_API_Endpoint {
- /**
- * Retrieves a list of comment data for a given site.
- *
- * @param string $status Filter by status: all, approved, pending, spam or trash.
- * @param int $start_at first comment to search from going back in time
- *
- * @return array
- */
- function get_site_tree( $status, $start_at = PHP_INT_MAX ) {
- global $wpdb;
- $max_comment_count = 50000;
- $db_status = $this->get_comment_db_status( $status );
-
- $db_comment_rows = $wpdb->get_results(
- $wpdb->prepare(
- "SELECT comment_ID, comment_post_ID, comment_parent, comment_type " .
- "FROM $wpdb->comments AS comments " .
- "INNER JOIN $wpdb->posts AS posts ON comments.comment_post_ID = posts.ID " .
- "WHERE comment_ID <= %d AND ( %s = 'all' OR comment_approved = %s ) " .
- "ORDER BY comment_ID DESC " .
- "LIMIT %d",
- (int) $start_at, $db_status, $db_status, $max_comment_count
- ),
- ARRAY_N
- );
-
- $comments = array();
- $trackbacks = array();
- $pingbacks = array();
- foreach ( $db_comment_rows as $row ) {
- list( $comment_id, $comment_post_id, $comment_parent, $comment_type ) = $row;
- switch ( $comment_type ) {
- case 'trackback':
- $trackbacks[] = array( $comment_id, $comment_post_id, $comment_parent );
- break;
- case 'pingback':
- $pingbacks[] = array( $comment_id, $comment_post_id, $comment_parent );
- break;
- default:
- $comments[] = array( $comment_id, $comment_post_id, $comment_parent );
- }
- }
-
- return array(
- 'comments_count' => $this->get_site_tree_total_count( $status, 'comment' ),
- 'comments_tree' => array_map( array( $this, 'array_map_all_as_ints' ), $comments ),
- 'trackbacks_count' => $this->get_site_tree_total_count( $status, 'trackback' ),
- 'trackbacks_tree' => array_map( array( $this, 'array_map_all_as_ints' ), $trackbacks ),
- 'pingbacks_count' => $this->get_site_tree_total_count( $status, 'pingback' ),
- 'pingbacks_tree' => array_map( array( $this, 'array_map_all_as_ints' ), $pingbacks ),
- );
- }
-
- /**
- * Ensure all values are integers.
- *
- * @param array $comments Collection of comments.
- *
- * @return array Comments with values as integers.
- */
- function array_map_all_as_ints( $comments ) {
- return array_map( 'intval', $comments );
- }
-
- /**
- * Retrieves a total count of comments by type for the given site.
- *
- * @param string $status Filter by status: all, approved, pending, spam or trash.
- * @param string $type Comment type: 'trackback', 'pingback', or 'comment'.
- *
- * @return int Total count of comments for a site.
- */
- function get_site_tree_total_count( $status, $type ) {
- global $wpdb;
- $db_status = $this->get_comment_db_status( $status );
- $type = $this->get_sanitized_comment_type( $type );
- // An empty value in the comments_type column denotes a regular comment.
- $type = ( 'comment' === $type ) ? '' : $type;
-
- $result = $wpdb->get_var(
- $wpdb->prepare(
- "SELECT COUNT(1) " .
- "FROM $wpdb->comments AS comments " .
- "INNER JOIN $wpdb->posts AS posts ON comments.comment_post_ID = posts.ID " .
- "WHERE comment_type = %s AND ( %s = 'all' OR comment_approved = %s )",
- $type, $db_status, $db_status
- )
- );
- return intval( $result );
- }
-
- /**
- * Ensure a valid status is converted to a database-supported value if necessary.
- *
- * @param string $status Should be one of: all, approved, pending, spam or trash.
- *
- * @return string Corresponding value that exists in database.
- */
- function get_comment_db_status( $status ) {
- if ( 'approved' === $status ) {
- return '1';
- }
- if ( 'pending' === $status || 'unapproved' === $status ) {
- return '0';
- }
- return $status;
- }
-
- /**
- * Determine if the passed comment status is valid or not.
- *
- * @param string $status
- *
- * @return boolean
- */
- function validate_status_param( $status ) {
- return in_array( $status, array( 'all', 'approved', 'unapproved', 'pending', 'spam', 'trash' ) );
- }
-
- /**
- * Sanitize a given comment type.
- *
- * @param string Comment type: can be 'trackback', 'pingback', or 'comment'.
- *
- * @return string Sanitized comment type.
- */
- function get_sanitized_comment_type( $type = 'comment' ) {
- if ( in_array( $type, array( 'trackback', 'pingback', 'comment' ) ) ) {
- return $type;
- }
- return 'comment';
- }
-
- /**
- * Endpoint callback for /sites/%s/comments-tree
- *
- * @param string $path
- * @param int $blog_id
- *
- * @return array Site tree results by status.
- */
- function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $args = $this->query_args();
- $comment_status = empty( $args['status'] ) ? 'all' : $args['status'];
-
- if ( ! $this->validate_status_param( $comment_status ) ) {
- return new WP_Error( 'invalid_status', "Invalid comment status value provided: '$comment_status'.", 400 );
- }
-
- return $this->get_site_tree( $comment_status );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comments-tree-v1-1-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comments-tree-v1-1-endpoint.php
deleted file mode 100644
index 82124992..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comments-tree-v1-1-endpoint.php
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Get_Comments_Tree_v1_1_Endpoint ( array(
- 'description' => 'Get a comments tree for site.',
- 'min_version' => '1.1',
- 'max_version' => '1.1',
- 'group' => 'comments-tree',
- 'stat' => 'comments-tree:1',
-
- 'method' => 'GET',
- 'path' => '/sites/%s/comments-tree',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'query_parameters' => array(
- 'status' => '(string) Filter returned comments based on this value (allowed values: all, approved, pending, trash, spam).'
- ),
- 'response_format' => array(
- 'comments_count' => '(int) Total number of comments on the site',
- 'comments_tree' => '(array) Array of post IDs representing the comments tree for given site (max 50000)',
- 'trackbacks_count' => '(int) Total number of trackbacks on the site',
- 'trackbacks_tree' => '(array) Array of post IDs representing the trackbacks tree for given site (max 50000)',
- 'pingbacks_count' => '(int) Total number of pingbacks on the site',
- 'pingbacks_tree' => '(array) Array of post IDs representing the pingbacks tree for given site (max 50000)',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/en.blog.wordpress.com/comments-tree?status=approved'
-) );
-
-class WPCOM_JSON_API_Get_Comments_Tree_v1_1_Endpoint extends WPCOM_JSON_API_Get_Comments_Tree_Endpoint {
- /**
- * Retrieves a list of comment data for a given site.
- *
- * @param string $status Filter by status: all, approved, pending, spam or trash.
- * @param int $start_at first comment to search from going back in time
- *
- * @return array
- */
- function get_site_tree( $status, $start_at = PHP_INT_MAX ) {
- global $wpdb;
- $max_comment_count = 50000;
- $db_status = $this->get_comment_db_status( $status );
-
- $db_comment_rows = $wpdb->get_results(
- $wpdb->prepare(
- "SELECT comment_ID, comment_post_ID, comment_parent, comment_type " .
- "FROM $wpdb->comments AS comments " .
- "INNER JOIN $wpdb->posts AS posts ON comments.comment_post_ID = posts.ID " .
- "WHERE comment_ID <= %d AND ( %s = 'all' OR comment_approved = %s ) " .
- "ORDER BY comment_ID DESC " .
- "LIMIT %d",
- (int) $start_at, $db_status, $db_status, $max_comment_count
- ),
- ARRAY_N
- );
-
- $comments = array();
- $trackbacks = array();
- $pingbacks = array();
- foreach ( $db_comment_rows as $row ) {
- $comment_id = intval( $row[0] );
- $comment_post_id = intval( $row[1] );
- $comment_parent_id = intval( $row[2] );
- if ( ! isset( $comments[ $comment_post_id ] ) ) {
- $comments[ $comment_post_id ] = array( array(), array() );
- }
- switch ( $row[3] ) {
- case 'trackback':
- $trackbacks[ $comment_post_id ][] = $comment_id;
- break;
- case 'pingback':
- $pingbacks[ $comment_post_id ][] = $comment_id;
- break;
- default:
- if ( 0 === $comment_parent_id ) {
- $comments[ $comment_post_id ][0][] = $comment_id;
- } else {
- $comments[ $comment_post_id ][1][] = array( $comment_id, $comment_parent_id );
- }
- }
- }
-
- return array(
- 'comments_count' => $this->get_site_tree_total_count( $status, 'comment' ),
- 'comments_tree' => $comments,
- 'trackbacks_count' => $this->get_site_tree_total_count( $status, 'trackback' ),
- 'trackbacks_tree' => $trackbacks,
- 'pingbacks_count' => $this->get_site_tree_total_count( $status, 'pingback' ),
- 'pingbacks_tree' => $pingbacks,
- );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comments-tree-v1-2-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comments-tree-v1-2-endpoint.php
deleted file mode 100644
index 0537279d..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-comments-tree-v1-2-endpoint.php
+++ /dev/null
@@ -1,148 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Get_Comments_Tree_v1_2_Endpoint( array(
- 'description' => 'Get a comments tree for site.',
- 'min_version' => '1.2',
- 'max_version' => '1.2',
- 'group' => 'comments-tree',
- 'stat' => 'comments-tree:1',
-
- 'method' => 'GET',
- 'path' => '/sites/%s/comments-tree',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'query_parameters' => array(
- 'post_id' => '(int) Filter returned comments by a post.',
- 'status' => '(string) Filter returned comments based on this value (allowed values: all, approved, pending, trash, spam).',
- ),
- 'response_format' => array(
- 'comments_tree' => '(array) Array of post IDs representing the comments tree for given site or post (max 50000)',
- 'trackbacks_tree' => '(array) Array of post IDs representing the trackbacks tree for given site or post (max 50000)',
- 'pingbacks_tree' => '(array) Array of post IDs representing the pingbacks tree for given site or post (max 50000)',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.2/sites/en.blog.wordpress.com/comments-tree?&status=approved&post_id=123',
-) );
-
-class WPCOM_JSON_API_Get_Comments_Tree_v1_2_Endpoint extends WPCOM_JSON_API_Get_Comments_Tree_v1_1_Endpoint {
- /**
- * Retrieves a list of comment data.
- *
- * @param array $args {
- * Optional. Arguments to control behavior. Default empty array.
- *
- * @type int $max_comment_count Maximum number of comments returned.
- * @type int $post_id Filter by post.
- * @type int $start_at First comment to search from going back in time.
- * @type string $status Filter by status: all, approved, pending, spam or trash.
- * }
- *
- * @return array
- */
- function get_site_tree_v1_2( $args = array() ) {
- global $wpdb;
- $defaults = array(
- 'max_comment_count' => 50000,
- 'post_id' => NULL,
- 'start_at' => PHP_INT_MAX,
- 'status' => 'all',
- );
- $args = wp_parse_args( $args, $defaults );
- $db_status = $this->get_comment_db_status( $args['status'] );
-
- if ( ! empty( $args['post_id'] ) ) {
- $db_comment_rows = $wpdb->get_results(
- $wpdb->prepare(
- "SELECT comment_ID, comment_parent, comment_type " .
- "FROM $wpdb->comments AS comments " .
- "WHERE comment_ID <= %d AND comment_post_ID = %d AND ( %s = 'all' OR comment_approved = %s ) " .
- "ORDER BY comment_ID DESC " .
- "LIMIT %d",
- (int) $args['start_at'], (int) $args['post_id'], $db_status, $db_status, $args['max_comment_count']
- ),
- ARRAY_N
- );
- } else {
- $db_comment_rows = $wpdb->get_results(
- $wpdb->prepare(
- "SELECT comment_ID, comment_parent, comment_type, comment_post_ID " .
- "FROM $wpdb->comments AS comments " .
- "INNER JOIN $wpdb->posts AS posts ON comments.comment_post_ID = posts.ID " .
- "WHERE comment_ID <= %d AND ( %s = 'all' OR comment_approved = %s ) " .
- "ORDER BY comment_ID DESC " .
- "LIMIT %d",
- (int) $args['start_at'], $db_status, $db_status, $args['max_comment_count']
- ),
- ARRAY_N
- );
- }
-
- $comments = array();
- $trackbacks = array();
- $pingbacks = array();
- foreach ( $db_comment_rows as $row ) {
- $comment_id = intval( $row[0] );
- $comment_parent_id = intval( $row[1] );
- $comment_post_id = isset( $args['post_id'] ) ? intval( $args['post_id'] ) : intval( $row[3] );
-
- if ( ! isset( $comments[ $comment_post_id ] ) ) {
- $comments[ $comment_post_id ] = array( array(), array() );
- }
- switch ( $row[2] ) {
- case 'trackback':
- $trackbacks[ $comment_post_id ][] = $comment_id;
- break;
- case 'pingback':
- $pingbacks[ $comment_post_id ][] = $comment_id;
- break;
- default:
- if ( 0 === $comment_parent_id ) {
- $comments[ $comment_post_id ][0][] = $comment_id;
- } else {
- $comments[ $comment_post_id ][1][] = array( $comment_id, $comment_parent_id );
- }
- }
- }
-
- return array(
- 'comments_tree' => $comments,
- 'trackbacks_tree' => $trackbacks,
- 'pingbacks_tree' => $pingbacks,
- );
- }
-
- /**
- * Endpoint callback for /sites/%s/comments-tree
- *
- * @param string $path
- * @param int $blog_id
- *
- * @return array Site or post tree results by status.
- */
- function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $args = $this->query_args();
- $filters = array();
-
- if ( ! empty( $args['status'] ) ) {
- if ( ! $this->validate_status_param( $args['status'] ) ) {
- return new WP_Error( 'invalid_status', 'Invalid comment status value provided: ' . $args['status'] . '.', 400 );
- }
- $filters['status'] = $args['status'];
- }
-
- if ( ! empty( $args['post_id'] ) ) {
- if ( is_null( get_post( absint( $args['post_id'] ) ) ) ) {
- return new WP_Error( 'invalid_post', 'Invalid post', 400 );
- }
- $filters['post_id'] = absint( $args['post_id'] );
- }
-
- return $this->get_site_tree_v1_2( $filters );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-customcss.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-customcss.php
deleted file mode 100644
index ecc9f998..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-customcss.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-/**
- * Custom Css endpoint
- *
- * https://public-api.wordpress.com/rest/v1.1/sites/$site/customcss/
- */
-
-new WPCOM_JSON_API_Get_CustomCss_Endpoint( array (
- 'description' => 'Retrieve custom-css data for a site.',
- 'group' => '__do_not_document',
- 'stat' => 'customcss:1:get',
- 'method' => 'GET',
- 'min_version' => '1.1',
- 'path' => '/sites/%s/customcss',
- 'path_labels' => array(
- '$site' => '(string) Site ID or domain.',
- ),
- 'response_format' => array(
- 'css' => '(string) The raw CSS.',
- 'preprocessor' => '(string) The name of the preprocessor if any.',
- 'add_to_existing' => '(bool) False to skip the existing styles.',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/12345678/customcss',
- 'example_response' => '
- {
- "css": ".site-title { color: #fff; }",
- "preprocessor": "sass",
- "add_to_existing": "true"
- }'
-) );
-
-class WPCOM_JSON_API_Get_CustomCss_Endpoint extends WPCOM_JSON_API_Endpoint {
- /**
- * API callback.
- */
- function callback( $path = '', $blog_id = 0 ) {
- // Switch to the given blog.
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $args = array(
- 'css' => Jetpack_Custom_CSS::get_css(),
- 'preprocessor' => Jetpack_Custom_CSS::get_preprocessor_key(),
- 'add_to_existing' => ! Jetpack_Custom_CSS::skip_stylesheet(),
- );
-
- $defaults = array(
- 'css' => '',
- 'preprocessor' => '',
- 'add_to_existing' => true,
- );
- return wp_parse_args( $args, $defaults );
- }
-}
-
-
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-media-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-media-endpoint.php
deleted file mode 100644
index cee9dac5..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-media-endpoint.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Get_Media_Endpoint( array(
- 'description' => 'Get a single media item (by ID).',
- 'group' => 'media',
- 'stat' => 'media:1',
- 'method' => 'GET',
- 'path' => '/sites/%s/media/%d',
- 'deprecated' => true,
- 'new_version' => '1.1',
- 'max_version' => '1',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$media_ID' => '(int) The ID of the media item',
- ),
- 'response_format' => array(
- 'id' => '(int) The ID of the media item',
- 'date' => '(ISO 8601 datetime) The date the media was uploaded',
- 'parent' => '(int) ID of the post this media is attached to',
- 'link' => '(string) URL to the file',
- 'title' => '(string) Filename',
- 'caption' => '(string) User-provided caption of the file',
- 'description' => '(string) Description of the file',
- 'metadata' => '(array) Array of metadata about the file, such as Exif data or sizes',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/media/934',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- )
- )
-) );
-
-class WPCOM_JSON_API_Get_Media_Endpoint extends WPCOM_JSON_API_Endpoint {
- function callback( $path = '', $blog_id = 0, $media_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- //upload_files can probably be used for other endpoints but we want contributors to be able to use media too
- if ( !current_user_can( 'edit_posts', $media_id ) ) {
- return new WP_Error( 'unauthorized', 'User cannot view media', 403 );
- }
-
- return $this->get_media_item( $media_id );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-media-v1-1-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-media-v1-1-endpoint.php
deleted file mode 100644
index 62d8681e..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-media-v1-1-endpoint.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Get_Media_v1_1_Endpoint( array(
- 'description' => 'Get a single media item (by ID).',
- 'group' => 'media',
- 'stat' => 'media:1',
- 'min_version' => '1.1',
- 'max_version' => '1.1',
- 'method' => 'GET',
- 'path' => '/sites/%s/media/%d',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$media_ID' => '(int) The ID of the media item',
- ),
- 'response_format' => array(
- 'ID' => '(int) The ID of the media item',
- 'date' => '(ISO 8601 datetime) The date the media was uploaded',
- 'post_ID' => '(int) ID of the post this media is attached to',
- 'author_ID' => '(int) ID of the user who uploaded the media',
- 'URL' => '(string) URL to the file',
- 'guid' => '(string) Unique identifier',
- 'file' => '(string) Filename',
- 'extension' => '(string) File extension',
- 'mime_type' => '(string) File MIME type',
- 'title' => '(string) Filename',
- 'caption' => '(string) User-provided caption of the file',
- 'description' => '(string) Description of the file',
- 'alt' => '(string) Alternative text for image files.',
- 'thumbnails' => '(object) Media item thumbnail URL options',
- 'height' => '(int) (Image & video only) Height of the media item',
- 'width' => '(int) (Image & video only) Width of the media item',
- 'length' => '(int) (Video & audio only) Duration of the media item, in seconds',
- 'exif' => '(array) (Image & audio only) Exif (meta) information about the media item',
- 'videopress_guid' => '(string) (Video only) VideoPress GUID of the video when uploaded on a blog with VideoPress',
- 'videopress_processing_done' => '(bool) (Video only) If the video is uploaded on a blog with VideoPress, this will return the status of processing on the video.'
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/media/934',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- )
- )
-) );
-
-class WPCOM_JSON_API_Get_Media_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint {
- function callback( $path = '', $blog_id = 0, $media_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $this->load_theme_functions();
- }
-
- //upload_files can probably be used for other endpoints but we want contributors to be able to use media too
- if ( ! current_user_can( 'edit_posts', $media_id ) ) {
- return new WP_Error( 'unauthorized', 'User cannot view media', 403 );
- }
-
- return $this->get_media_item_v1_1( $media_id );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-media-v1-2-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-media-v1-2-endpoint.php
deleted file mode 100644
index 413e3b94..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-media-v1-2-endpoint.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-
-jetpack_require_lib( 'class.media' );
-
-new WPCOM_JSON_API_Get_Media_v1_2_Endpoint( array(
- 'description' => 'Get a single media item (by ID).',
- 'group' => 'media',
- 'stat' => 'media:1',
- 'min_version' => '1.2',
- 'max_version' => '1.2',
- 'method' => 'GET',
- 'path' => '/sites/%s/media/%d',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$media_ID' => '(int) The ID of the media item',
- ),
- 'response_format' => array(
- 'ID' => '(int) The ID of the media item',
- 'date' => '(ISO 8601 datetime) The date the media was uploaded',
- 'post_ID' => '(int) ID of the post this media is attached to',
- 'author_ID' => '(int) ID of the user who uploaded the media',
- 'URL' => '(string) URL to the file',
- 'guid' => '(string) Unique identifier',
- 'file' => '(string) Filename',
- 'extension' => '(string) File extension',
- 'mime_type' => '(string) File MIME type',
- 'title' => '(string) Filename',
- 'caption' => '(string) User-provided caption of the file',
- 'description' => '(string) Description of the file',
- 'alt' => '(string) Alternative text for image files.',
- 'thumbnails' => '(object) Media item thumbnail URL options',
- 'height' => '(int) (Image & video only) Height of the media item',
- 'width' => '(int) (Image & video only) Width of the media item',
- 'length' => '(int) (Video & audio only) Duration of the media item, in seconds',
- 'exif' => '(array) (Image & audio only) Exif (meta) information about the media item',
- 'videopress_guid' => '(string) (Video only) VideoPress GUID of the video when uploaded on a blog with VideoPress',
- 'videopress_processing_done' => '(bool) (Video only) If the video is uploaded on a blog with VideoPress, this will return the status of processing on the video.',
- 'revision_history' => '(object) An object with `items` and `original` keys. ' .
- '`original` is an object with data about the original image. ' .
- '`items` is an array of snapshots of the previous images of this Media. ' .
- 'Each item has the `URL`, `file, `extension`, `date`, and `mime_type` fields.'
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.2/sites/82974409/media/934',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- )
- )
-) );
-
-class WPCOM_JSON_API_Get_Media_v1_2_Endpoint extends WPCOM_JSON_API_Get_Media_v1_1_Endpoint {
- function callback( $path = '', $blog_id = 0, $media_id = 0 ) {
- $response = parent::callback( $path, $blog_id, $media_id );
-
- if ( is_wp_error( $response ) ) {
- return $response;
- }
-
- $media_item = get_post( $media_id );
- $response->modified = (string) $this->format_date( $media_item->post_modified_gmt, $media_item->post_modified );
-
- // expose `revision_history` object
- $response->revision_history = (object) array(
- 'items' => (array) Jetpack_Media::get_revision_history( $media_id ),
- 'original' => (object) Jetpack_Media::get_original_media( $media_id )
- );
-
- return $response;
- }
-}
-
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-counts-v1-1-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-counts-v1-1-endpoint.php
deleted file mode 100644
index 5e83b41d..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-counts-v1-1-endpoint.php
+++ /dev/null
@@ -1,137 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_GET_Post_Counts_V1_1_Endpoint( array(
- 'description' => 'Get number of posts in the post type groups by post status',
- 'group' => 'sites',
- 'stat' => 'sites:X:post-counts:X',
- 'force' => 'wpcom',
- 'method' => 'GET',
- 'min_version' => '1.1',
- 'max_version' => '1.2',
- 'path' => '/sites/%s/post-counts/%s',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$post_type' => '(string) Post Type',
- ),
-
- 'query_parameters' => array(
- 'context' => false,
- 'author' => '(int) author ID',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.2/sites/en.blog.wordpress.com/post-counts/page',
-
- 'response_format' => array(
- 'counts' => array(
- 'all' => '(array) Number of posts by any author in the post type grouped by post status',
- 'mine' => '(array) Number of posts by the current user in the post type grouped by post status'
- )
- )
-) );
-
-class WPCOM_JSON_API_GET_Post_Counts_V1_1_Endpoint extends WPCOM_JSON_API_Endpoint {
-
- private $whitelist = array( 'publish' );
-
- /**
- * Build SQL query
- *
- * @param {String} type - post type
- * @param {Number} [author]
- * @return {String} SQL query
- */
- private function buildCountsQuery( $post_type = 'post', $user_id = null ) {
- global $wpdb;
-
- $query = "SELECT post_status as status, count(*) as count ";
- $query .= "FROM {$wpdb->posts} ";
- $query .= "WHERE post_type = %s ";
- if ( isset( $user_id ) ) {
- $query .= "AND post_author = %d ";
- }
-
- $query .= "GROUP BY status";
-
- return $wpdb->prepare( $query, $post_type, $user_id );
- }
-
- /**
- * Retrive counts using wp_cache
- *
- * @param {String} $post_type
- * @param {Number} [$id]
- */
- private function retrieveCounts( $post_type, $id = null) {
- if ( ! isset( $id ) ) {
- $counts = array();
- foreach( (array) wp_count_posts( $post_type ) as $status => $count ) {
- if ( in_array( $status, $this->whitelist ) && $count > 0 ) {
- $counts[ $status ] = (int) $count;
- }
- };
-
- return $counts;
- }
-
- global $wpdb;
- $key = 'rest-api-' . $id . '-' . _count_posts_cache_key( $post_type );
- $counts = wp_cache_get( $key, 'counts' );
-
- if ( false === $counts ) {
- $results = $wpdb->get_results( $this->buildCountsQuery( $post_type, $id ) );
- $counts = $this->filterStatusesByWhiteslist( $results );
- wp_cache_set( $key, $counts, 'counts' );
- }
-
- return $counts;
- }
-
- private function filterStatusesByWhiteslist( $in ) {
- $return = array();
- foreach( $in as $result) {
- if ( in_array( $result->status, $this->whitelist ) ) {
- $return[ $result->status ] = (int) $result->count;
- }
- };
- return $return;
- }
-
- // /sites/%s/post-counts/%s
- public function callback( $path = '', $blog_id = 0, $post_type = 'post' ) {
- if ( ! get_current_user_id() ) {
- return new WP_Error( 'authorization_required', __( 'An active access token must be used to retrieve post counts.', 'jetpack' ), 403 );
- }
-
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ), false );
-
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( ! post_type_exists( $post_type ) ) {
- return new WP_Error( 'unknown_post_type', __( 'Unknown post type requested.', 'jetpack' ), 404 );
- }
-
- $args = $this->query_args();
- $mine_ID = get_current_user_id();
-
- if ( current_user_can( 'edit_posts' ) ) {
- array_push( $this->whitelist, 'draft', 'future', 'pending', 'private', 'trash' );
- }
-
- $return = array(
- 'counts' => (array) array(
- 'all' => (object) $this->retrieveCounts( $post_type ),
- 'mine' => (object) $this->retrieveCounts( $post_type, $mine_ID ),
- )
- );
-
- // AUTHOR
- if ( isset( $args['author'] ) ) {
- $author_ID = $args['author'];
- $return['counts']['author'] = (object) $this->retrieveCounts( $post_type, $author_ID );
- }
-
- return (object) $return;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-endpoint.php
deleted file mode 100644
index f82b2f43..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-endpoint.php
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Get_Post_Endpoint( array(
- 'description' => 'Get a single post (by ID).',
- 'group' => 'posts',
- 'stat' => 'posts:1',
- 'new_version' => '1.1',
- 'max_version' => '1',
- 'method' => 'GET',
- 'path' => '/sites/%s/posts/%d',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$post_ID' => '(int) The post ID',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/posts/7'
-) );
-
-new WPCOM_JSON_API_Get_Post_Endpoint( array(
- 'description' => 'Get a single post (by name)',
- 'group' => '__do_not_document',
- 'stat' => 'posts:name',
- 'method' => 'GET',
- 'path' => '/sites/%s/posts/name:%s',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$post_name' => '(string) The post name (a.k.a. slug)',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/posts/name:blogging-and-stuff',
-) );
-
-new WPCOM_JSON_API_Get_Post_Endpoint( array(
- 'description' => 'Get a single post (by slug).',
- 'group' => 'posts',
- 'stat' => 'posts:slug',
- 'new_version' => '1.1',
- 'max_version' => '1',
- 'method' => 'GET',
- 'path' => '/sites/%s/posts/slug:%s',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$post_slug' => '(string) The post slug (a.k.a. sanitized name)',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/posts/slug:blogging-and-stuff',
-) );
-
-class WPCOM_JSON_API_Get_Post_Endpoint extends WPCOM_JSON_API_Post_Endpoint {
- // /sites/%s/posts/%d -> $blog_id, $post_id
- // /sites/%s/posts/name:%s -> $blog_id, $post_id // not documented
- // /sites/%s/posts/slug:%s -> $blog_id, $post_id
- function callback( $path = '', $blog_id = 0, $post_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $args = $this->query_args();
-
- if ( false === strpos( $path, '/posts/slug:' ) && false === strpos( $path, '/posts/name:' ) ) {
- $get_by = 'ID';
- } else {
- $get_by = 'name';
- }
-
- $return = $this->get_post_by( $get_by, $post_id, $args['context'] );
- if ( !$return || is_wp_error( $return ) ) {
- return $return;
- }
-
- if ( ! $this->current_user_can_access_post_type( $return['type'], $args['context'] ) ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'posts' );
-
- return $return;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-v1-1-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-v1-1-endpoint.php
deleted file mode 100644
index 572567d7..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-post-v1-1-endpoint.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Get_Post_v1_1_Endpoint( array(
- 'description' => 'Get a single post (by ID).',
- 'min_version' => '1.1',
- 'max_version' => '1.1',
- 'group' => 'posts',
- 'stat' => 'posts:1',
- 'method' => 'GET',
- 'path' => '/sites/%s/posts/%d',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$post_ID' => '(int) The post ID',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/en.blog.wordpress.com/posts/7'
-) );
-
-new WPCOM_JSON_API_Get_Post_v1_1_Endpoint( array(
- 'description' => 'Get a single post (by slug).',
- 'min_version' => '1.1',
- 'max_version' => '1.1',
- 'group' => 'posts',
- 'stat' => 'posts:slug',
- 'method' => 'GET',
- 'path' => '/sites/%s/posts/slug:%s',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$post_slug' => '(string) The post slug (a.k.a. sanitized name)',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/en.blog.wordpress.com/posts/slug:blogging-and-stuff',
-) );
-
-class WPCOM_JSON_API_Get_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_Endpoint {
- // /sites/%s/posts/%d -> $blog_id, $post_id
- // /sites/%s/posts/slug:%s -> $blog_id, $post_id
- function callback( $path = '', $blog_id = 0, $post_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $args = $this->query_args();
-
- $site = $this->get_platform()->get_site( $blog_id );
-
- if ( false !== strpos( $path, '/posts/slug:' ) ) {
- $post_id = $site->get_post_id_by_name( $post_id );
- if ( is_wp_error( $post_id ) ) {
- return $post_id;
- }
- }
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM &&
- ! in_array( get_post_type( $post_id ), array( false, 'post', 'revision' ) ) ) {
- $this->load_theme_functions();
- }
-
- $return = $this->get_post_by( 'ID', $post_id, $args['context'] );
-
- if ( !$return || is_wp_error( $return ) ) {
- return $return;
- }
-
- if ( ! $site->current_user_can_access_post_type( $return['type'], $args['context'] ) ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'posts' );
-
- return $return;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-endpoint.php
deleted file mode 100644
index a7868dea..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-endpoint.php
+++ /dev/null
@@ -1,735 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_GET_Site_Endpoint( array(
- 'description' => 'Get information about a site.',
- 'group' => 'sites',
- 'stat' => 'sites:X',
- 'allowed_if_flagged' => true,
- 'method' => 'GET',
- 'max_version' => '1.1',
- 'new_version' => '1.2',
- 'path' => '/sites/%s',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'allow_jetpack_site_auth' => true,
- 'query_parameters' => array(
- 'context' => false,
- 'options' => '(string) Optional. Returns specified options only. Comma-separated list. Example: options=login_url,timezone',
- ),
-
- 'response_format' => WPCOM_JSON_API_GET_Site_Endpoint::$site_format,
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/',
-) );
-
-class WPCOM_JSON_API_GET_Site_Endpoint extends WPCOM_JSON_API_Endpoint {
-
- public static $site_format = array(
- 'ID' => '(int) Site ID',
- 'name' => '(string) Title of site',
- 'description' => '(string) Tagline or description of site',
- 'URL' => '(string) Full URL to the site',
- 'user_can_manage' => '(bool) The current user can manage this site', // deprecated
- 'capabilities' => '(array) Array of capabilities for the current user on this site.',
- 'jetpack' => '(bool) Whether the site is a Jetpack site or not',
- 'is_multisite' => '(bool) Whether the site is a Multisite site or not. Always true for WP.com sites.',
- 'post_count' => '(int) The number of posts the site has',
- 'subscribers_count' => '(int) The number of subscribers the site has',
- 'lang' => '(string) Primary language code of the site',
- 'icon' => '(array) An array of icon formats for the site',
- 'logo' => '(array) The site logo, set in the Customizer',
- 'visible' => '(bool) If this site is visible in the user\'s site list',
- 'is_private' => '(bool) If the site is a private site or not',
- 'single_user_site' => '(bool) Whether the site is single user. Only returned for WP.com sites and for Jetpack sites with version 3.4 or higher.',
- 'is_vip' => '(bool) If the site is a VIP site or not.',
- 'is_following' => '(bool) If the current user is subscribed to this site in the reader',
- 'options' => '(array) An array of options/settings for the blog. Only viewable by users with post editing rights to the site. Note: Post formats is deprecated, please see /sites/$id/post-formats/',
- 'plan' => '(array) Details of the current plan for this site.',
- 'updates' => '(array) An array of available updates for plugins, themes, wordpress, and languages.',
- 'jetpack_modules' => '(array) A list of active Jetpack modules.',
- 'meta' => '(object) Meta data',
- 'quota' => '(array) An array describing how much space a user has left for uploads',
- 'launch_status' => '(string) A string describing the launch status of a site',
- );
-
- protected static $no_member_fields = array(
- 'ID',
- 'name',
- 'description',
- 'URL',
- 'jetpack',
- 'post_count',
- 'subscribers_count',
- 'lang',
- 'locale',
- 'icon',
- 'logo',
- 'visible',
- 'is_private',
- 'is_following',
- 'meta',
- 'launch_status',
- );
-
- protected static $site_options_format = array(
- 'timezone',
- 'gmt_offset',
- 'blog_public',
- 'videopress_enabled',
- 'upgraded_filetypes_enabled',
- 'login_url',
- 'admin_url',
- 'is_mapped_domain',
- 'is_redirect',
- 'unmapped_url',
- 'featured_images_enabled',
- 'theme_slug',
- 'header_image',
- 'background_color',
- 'image_default_link_type',
- 'image_thumbnail_width',
- 'image_thumbnail_height',
- 'image_thumbnail_crop',
- 'image_medium_width',
- 'image_medium_height',
- 'image_large_width',
- 'image_large_height',
- 'permalink_structure',
- 'post_formats',
- 'default_post_format',
- 'default_category',
- 'allowed_file_types',
- 'show_on_front',
- /** This filter is documented in modules/likes.php */
- 'default_likes_enabled',
- 'default_sharing_status',
- 'default_comment_status',
- 'default_ping_status',
- 'software_version',
- 'created_at',
- 'wordads',
- 'publicize_permanently_disabled',
- 'frame_nonce',
- 'page_on_front',
- 'page_for_posts',
- 'headstart',
- 'headstart_is_fresh',
- 'ak_vp_bundle_enabled',
- Jetpack_SEO_Utils::FRONT_PAGE_META_OPTION,
- Jetpack_SEO_Titles::TITLE_FORMATS_OPTION,
- 'verification_services_codes',
- 'podcasting_archive',
- 'is_domain_only',
- 'is_automated_transfer',
- 'is_wpcom_store',
- 'signup_is_store',
- 'has_pending_automated_transfer',
- 'woocommerce_is_active',
- 'design_type',
- 'site_goals',
- );
-
- protected static $jetpack_response_field_additions = array(
- 'subscribers_count',
- );
-
- protected static $jetpack_response_field_member_additions = array(
- 'capabilities',
- 'plan',
- );
-
- protected static $jetpack_response_option_additions = array(
- 'publicize_permanently_disabled',
- 'ak_vp_bundle_enabled',
- 'is_automated_transfer',
- 'is_wpcom_store',
- 'woocommerce_is_active',
- 'frame_nonce',
- 'design_type',
- 'wordads'
- );
-
- private $site;
-
- // protected $compact = null;
- protected $fields_to_include = '_all';
- protected $options_to_include = '_all';
-
- // /sites/mine
- // /sites/%s -> $blog_id
- function callback( $path = '', $blog_id = 0 ) {
- if ( 'mine' === $blog_id ) {
- $api = WPCOM_JSON_API::init();
- if ( ! $api->token_details || empty( $api->token_details['blog_id'] ) ) {
- return new WP_Error( 'authorization_required', 'An active access token must be used to query information about the current blog.', 403 );
- }
- $blog_id = $api->token_details['blog_id'];
- }
-
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $this->filter_fields_and_options();
-
- $response = $this->build_current_site_response();
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'sites' );
-
- return $response;
- }
-
- public function filter_fields_and_options() {
- $query_args = $this->query_args();
-
- $this->fields_to_include = empty( $query_args['fields'] ) ? '_all' : array_map( 'trim', explode( ',', $query_args['fields'] ) );
- $this->options_to_include = empty( $query_args['options'] ) ? '_all' : array_map( 'trim', explode( ',', $query_args['options'] ) );
- }
-
- /**
- * Collects the necessary information to return for a site's response.
- *
- * @return array
- */
- public function build_current_site_response() {
-
- $blog_id = (int) $this->api->get_blog_id_for_output();
-
- $this->site = $this->get_platform()->get_site( $blog_id );
-
- /**
- * Filter the structure of information about the site to return.
- *
- * @module json-api
- *
- * @since 3.9.3
- *
- * @param array $site_format Data structure.
- */
- $default_fields = array_keys( apply_filters( 'sites_site_format', self::$site_format ) );
-
- $response_keys = is_array( $this->fields_to_include ) ?
- array_intersect( $default_fields, $this->fields_to_include ) :
- $default_fields;
-
- if ( ! $this->has_blog_access( $this->api->token_details, $blog_id ) ) {
- $response_keys = array_intersect( $response_keys, self::$no_member_fields );
- }
-
- return $this->render_response_keys( $response_keys );
- }
-
- /**
- * Checks that the current user has access to the current blog,
- * and failing that checks that we have a valid blog token.
- *
- * @param $token_details array Details obtained from the authorization token
- * @param $blog_id int The server-side blog id on wordpress.com
- *
- * @return bool
- */
- private function has_blog_access( $token_details, $blog_id ) {
- $current_blog_id = ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ?
- $blog_id :
- get_current_blog_id();
-
- if ( is_user_member_of_blog( get_current_user_id(), $current_blog_id ) ) {
- return true;
- }
-
- $token_details = (array) $token_details;
- if ( ! isset( $token_details['access'], $token_details['auth'], $token_details['blog_id'] ) ) {
- return false;
- }
-
- if (
- 'jetpack' === $token_details['auth'] &&
- 'blog' === $token_details['access'] &&
- $current_blog_id === $token_details['blog_id']
- ) {
- return true;
- }
- return false;
- }
-
- private function render_response_keys( &$response_keys ) {
- $response = array();
-
- $is_user_logged_in = is_user_logged_in();
-
- $this->site->before_render();
-
- foreach ( $response_keys as $key ) {
- $this->render_response_key( $key, $response, $is_user_logged_in );
- }
-
- $this->site->after_render( $response );
-
- return $response;
- }
-
- protected function render_response_key( $key, &$response, $is_user_logged_in ) {
- do_action( 'pre_render_site_response_key', $key );
-
- switch ( $key ) {
- case 'ID' :
- $response[ $key ] = $this->site->blog_id;
- break;
- case 'name' :
- $response[ $key ] = $this->site->get_name();
- break;
- case 'description' :
- $response[ $key ] = $this->site->get_description();
- break;
- case 'URL' :
- $response[ $key ] = $this->site->get_url();
- break;
- case 'user_can_manage' :
- $response[ $key ] = $this->site->user_can_manage();
- case 'is_private' :
- $response[ $key ] = $this->site->is_private();
- break;
- case 'visible' :
- $response[ $key ] = $this->site->is_visible();
- break;
- case 'subscribers_count' :
- $response[ $key ] = $this->site->get_subscribers_count();
- break;
- case 'post_count' :
- if ( $is_user_logged_in ) {
- $response[ $key ] = $this->site->get_post_count();
- }
- break;
- case 'icon' :
- $icon = $this->site->get_icon();
-
- if ( ! is_null( $icon ) ) {
- $response[ $key ] = $icon;
- }
- break;
- case 'logo' :
- $response[ $key ] = $this->site->get_logo();
- break;
- case 'is_following':
- $response[ $key ] = $this->site->is_following();
- break;
- case 'options':
- // small optimisation - don't recalculate
- $all_options = apply_filters( 'sites_site_options_format', self::$site_options_format );
-
- $options_response_keys = is_array( $this->options_to_include ) ?
- array_intersect( $all_options, $this->options_to_include ) :
- $all_options;
-
- $options = $this->render_option_keys( $options_response_keys );
-
- $this->site->after_render_options( $options );
-
- $response[ $key ] = (object) $options;
- break;
- case 'meta':
- $this->build_meta_response( $response );
- break;
- case 'lang' :
- $response[ $key ] = $is_user_logged_in ? $this->site->get_locale() : false;
- break;
- case 'locale' :
- $response[ $key ] = $is_user_logged_in ? $this->site->get_locale() : false;
- break;
- case 'jetpack' :
- $response[ $key ] = $this->site->is_jetpack();
- break;
- case 'single_user_site' :
- $response[ $key ] = $this->site->is_single_user_site();
- break;
- case 'is_vip' :
- $response[ $key ] = $this->site->is_vip();
- break;
- case 'is_multisite' :
- $response[ $key ] = $this->site->is_multisite();
- break;
- case 'capabilities' :
- $response[ $key ] = $this->site->get_capabilities();
- break;
- case 'jetpack_modules':
- if ( is_user_member_of_blog() ) {
- $response[ $key ] = $this->site->get_jetpack_modules();
- }
- break;
- case 'plan' :
- $response[ $key ] = $this->site->get_plan();
- break;
- case 'quota' :
- $response[ $key ] = $this->site->get_quota();
- break;
- case 'launch_status' :
- $response[ $key ] = $this->site->get_launch_status();
- break;
- }
-
- do_action( 'post_render_site_response_key', $key );
- }
-
- protected function render_option_keys( &$options_response_keys ) {
- if ( ! current_user_can( 'edit_posts' ) ) {
- return array();
- }
-
- $options = array();
- $site = $this->site;
-
- $custom_front_page = $site->is_custom_front_page();
-
- foreach ( $options_response_keys as $key ) {
- switch ( $key ) {
- case 'timezone' :
- $options[ $key ] = $site->get_timezone();
- break;
- case 'gmt_offset' :
- $options[ $key ] = $site->get_gmt_offset();
- break;
- case 'videopress_enabled' :
- $options[ $key ] = $site->has_videopress();
- break;
- case 'upgraded_filetypes_enabled' :
- $options[ $key ] = $site->upgraded_filetypes_enabled();
- break;
- case 'login_url' :
- $options[ $key ] = $site->get_login_url();
- break;
- case 'admin_url' :
- $options[ $key ] = $site->get_admin_url();
- break;
- case 'is_mapped_domain' :
- $options[ $key ] = $site->is_mapped_domain();
- break;
- case 'is_redirect' :
- $options[ $key ] = $site->is_redirect();
- break;
- case 'unmapped_url' :
- $options[ $key ] = $site->get_unmapped_url();
- break;
- case 'featured_images_enabled' :
- $options[ $key ] = $site->featured_images_enabled();
- break;
- case 'theme_slug' :
- $options[ $key ] = $site->get_theme_slug();
- break;
- case 'header_image' :
- $options[ $key ] = $site->get_header_image();
- break;
- case 'background_color' :
- $options[ $key ] = $site->get_background_color();
- break;
- case 'image_default_link_type' :
- $options[ $key ] = $site->get_image_default_link_type();
- break;
- case 'image_thumbnail_width' :
- $options[ $key ] = $site->get_image_thumbnail_width();
- break;
- case 'image_thumbnail_height' :
- $options[ $key ] = $site->get_image_thumbnail_height();
- break;
- case 'image_thumbnail_crop' :
- $options[ $key ] = $site->get_image_thumbnail_crop();
- break;
- case 'image_medium_width' :
- $options[ $key ] = $site->get_image_medium_width();
- break;
- case 'image_medium_height' :
- $options[ $key ] = $site->get_image_medium_height();
- break;
- case 'image_large_width' :
- $options[ $key ] = $site->get_image_large_width();
- break;
- case 'image_large_height' :
- $options[ $key ] = $site->get_image_large_height();
- break;
- case 'permalink_structure' :
- $options[ $key ] = $site->get_permalink_structure();
- break;
- case 'post_formats' :
- $options[ $key ] = $site->get_post_formats();
- break;
- case 'default_post_format' :
- $options[ $key ] = $site->get_default_post_format();
- break;
- case 'default_category' :
- $options[ $key ] = $site->get_default_category();
- break;
- case 'allowed_file_types' :
- $options[ $key ] = $site->allowed_file_types();
- break;
- case 'show_on_front' :
- $options[ $key ] = $site->get_show_on_front();
- break;
- /** This filter is documented in modules/likes.php */
- case 'default_likes_enabled' :
- $options[ $key ] = $site->get_default_likes_enabled();
- break;
- case 'default_sharing_status' :
- $options[ $key ] = $site->get_default_sharing_status();
- break;
- case 'default_comment_status' :
- $options[ $key ] = $site->get_default_comment_status();
- break;
- case 'default_ping_status' :
- $options[ $key ] = $site->default_ping_status();
- break;
- case 'software_version' :
- $options[ $key ] = $site->get_wordpress_version();
- break;
- case 'created_at' :
- $options[ $key ] = $site->get_registered_date();
- break;
- case 'wordads' :
- $options[ $key ] = $site->has_wordads();
- break;
- case 'publicize_permanently_disabled' :
- $options[ $key ] = $site->is_publicize_permanently_disabled();
- break;
- case 'frame_nonce' :
- $options[ $key ] = $site->get_frame_nonce();
- break;
- case 'page_on_front' :
- if ( $custom_front_page ) {
- $options[ $key ] = $site->get_page_on_front();
- }
- break;
- case 'page_for_posts' :
- if ( $custom_front_page ) {
- $options[ $key ] = $site->get_page_for_posts();
- }
- break;
- case 'headstart' :
- $options[ $key ] = $site->is_headstart();
- break;
- case 'headstart_is_fresh' :
- $options[ $key ] = $site->is_headstart_fresh();
- break;
- case 'ak_vp_bundle_enabled' :
- $options[ $key ] = $site->get_ak_vp_bundle_enabled();
- break;
- case Jetpack_SEO_Utils::FRONT_PAGE_META_OPTION :
- $options[ $key ] = $site->get_jetpack_seo_front_page_description();
- break;
- case Jetpack_SEO_Titles::TITLE_FORMATS_OPTION :
- $options[ $key ] = $site->get_jetpack_seo_title_formats();
- break;
- case 'verification_services_codes' :
- $options[ $key ] = $site->get_verification_services_codes();
- break;
- case 'podcasting_archive':
- $options[ $key ] = $site->get_podcasting_archive();
- break;
- case 'is_domain_only':
- $options[ $key ] = $site->is_domain_only();
- break;
- case 'is_automated_transfer':
- $options[ $key ] = $site->is_automated_transfer();
- break;
- case 'blog_public':
- $options[ $key ] = $site->get_blog_public();
- break;
- case 'is_wpcom_store':
- $options[ $key ] = $site->is_wpcom_store();
- break;
- case 'signup_is_store':
- $signup_is_store = $site->signup_is_store();
-
- if ( $signup_is_store ) {
- $options[ $key ] = $site->signup_is_store();
- }
-
- break;
- case 'has_pending_automated_transfer':
- $has_pending_automated_transfer = $site->has_pending_automated_transfer();
-
- if ( $has_pending_automated_transfer ) {
- $options[ $key ] = true;
- }
-
- break;
- case 'woocommerce_is_active':
- $options[ $key ] = $site->woocommerce_is_active();
- break;
- case 'design_type':
- $options[ $key ] = $site->get_design_type();
- break;
- case 'site_goals':
- $options[ $key ] = $site->get_site_goals();
- break;
- }
- }
-
- return $options;
- }
-
- protected function build_meta_response( &$response ) {
- $links = array(
- 'self' => (string) $this->links->get_site_link( $this->site->blog_id ),
- 'help' => (string) $this->links->get_site_link( $this->site->blog_id, 'help' ),
- 'posts' => (string) $this->links->get_site_link( $this->site->blog_id, 'posts/' ),
- 'comments' => (string) $this->links->get_site_link( $this->site->blog_id, 'comments/' ),
- 'xmlrpc' => (string) $this->site->get_xmlrpc_url(),
- );
-
- $icon = $this->site->get_icon();
- if ( ! empty( $icon ) && ! empty( $icon['media_id'] ) ) {
- $links['site_icon'] = (string) $this->links->get_site_link( $this->site->blog_id, 'media/' . $icon['media_id'] );
- }
-
- $response['meta'] = (object) array(
- 'links' => (object) $links
- );
- }
-
- // apply any WPCOM-only response components to a Jetpack site response
- public function decorate_jetpack_response( &$response ) {
- $this->site = $this->get_platform()->get_site( $response->ID );
- switch_to_blog( $this->site->get_id() );
-
- // ensure the response is marked as being from Jetpack
- $response->jetpack = true;
-
- $wpcom_response = $this->render_response_keys( self::$jetpack_response_field_additions );
-
- foreach( $wpcom_response as $key => $value ) {
- $response->{ $key } = $value;
- }
-
- if ( $this->has_blog_access( $this->api->token_details, $response->ID ) ) {
- $wpcom_member_response = $this->render_response_keys( self::$jetpack_response_field_member_additions );
-
- foreach( $wpcom_member_response as $key => $value ) {
- $response->{ $key } = $value;
- }
- } else {
- // ensure private data is not rendered for non members of the site
- unset( $response->options );
- unset( $response->is_vip );
- unset( $response->single_user_site );
- unset( $response->is_private );
- unset( $response->capabilities );
- unset( $response->lang );
- unset( $response->user_can_manage );
- unset( $response->is_multisite );
- unset( $response->plan );
- }
-
- // render additional options
- if ( $response->options ) {
- $wpcom_options_response = $this->render_option_keys( self::$jetpack_response_option_additions );
-
- foreach ( $wpcom_options_response as $key => $value ) {
- $response->options[ $key ] = $value;
- }
- }
-
- restore_current_blog();
- return $response; // possibly no need since it's modified in place
- }
-}
-
-new WPCOM_JSON_API_List_Post_Formats_Endpoint( array(
- 'description' => 'Get a list of post formats supported by a site.',
- 'group' => '__do_not_document',
- 'stat' => 'sites:X:post-formats',
-
- 'method' => 'GET',
- 'path' => '/sites/%s/post-formats',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'query_parameters' => array(
- 'context' => false,
- ),
-
- 'response_format' => array(
- 'formats' => '(object) An object of supported post formats, each key a supported format slug mapped to its display string.',
- )
-) );
-
-class WPCOM_JSON_API_List_Post_Formats_Endpoint extends WPCOM_JSON_API_Endpoint {
- // /sites/%s/post-formats -> $blog_id
- function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $this->load_theme_functions();
- }
-
- // Get a list of supported post formats.
- $all_formats = get_post_format_strings();
- $supported = get_theme_support( 'post-formats' );
-
- $supported_formats = $response['formats'] = array();
-
- if ( isset( $supported[0] ) ) {
- foreach ( $supported[0] as $format ) {
- $supported_formats[ $format ] = $all_formats[ $format ];
- }
- }
-
- $response['formats'] = (object) $supported_formats;
-
- return $response;
- }
-}
-
-new WPCOM_JSON_API_List_Page_Templates_Endpoint( array(
- 'description' => 'Get a list of page templates supported by a site.',
- 'group' => 'sites',
- 'stat' => 'sites:X:post-templates',
-
- 'method' => 'GET',
- 'path' => '/sites/%s/page-templates',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'query_parameters' => array(
- 'context' => false,
- ),
- 'response_format' => array(
- 'templates' => '(array) A list of supported page templates. Contains label and file.',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/33534099/page-templates'
-) );
-
-class WPCOM_JSON_API_List_Page_Templates_Endpoint extends WPCOM_JSON_API_Endpoint {
- // /sites/%s/page-templates -> $blog_id
- function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $this->load_theme_functions();
- }
-
- $response = array();
- $page_templates = array();
-
- $templates = get_page_templates();
- ksort( $templates );
-
- foreach ( array_keys( $templates ) as $label ) {
- $page_templates[] = array(
- 'label' => $label,
- 'file' => $templates[ $label ]
- );
- }
-
- $response['templates'] = $page_templates;
-
- return $response;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-v1-2-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-v1-2-endpoint.php
deleted file mode 100644
index 316b6282..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-site-v1-2-endpoint.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_GET_Site_V1_2_Endpoint( array(
- 'description' => 'Get information about a site.',
- 'group' => 'sites',
- 'stat' => 'sites:X',
- 'allowed_if_flagged' => true,
- 'method' => 'GET',
- 'min_version' => '1.2',
- 'path' => '/sites/%s',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'query_parameters' => array(
- 'context' => false,
- ),
-
- 'response_format' => WPCOM_JSON_API_GET_Site_V1_2_Endpoint::$site_format,
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.2/sites/en.blog.wordpress.com/',
-) );
-
-class WPCOM_JSON_API_GET_Site_V1_2_Endpoint extends WPCOM_JSON_API_GET_Site_Endpoint {
-
- public static $site_format = array(
- 'ID' => '(int) Site ID',
- 'name' => '(string) Title of site',
- 'description' => '(string) Tagline or description of site',
- 'URL' => '(string) Full URL to the site',
- 'capabilities' => '(array) Array of capabilities for the current user on this site.',
- 'jetpack' => '(bool) Whether the site is a Jetpack site or not',
- 'is_multisite' => '(bool) Whether the site is a Multisite site or not. Always true for WP.com sites.',
- 'post_count' => '(int) The number of posts the site has',
- 'subscribers_count' => '(int) The number of subscribers the site has',
- 'locale' => '(string) Primary locale code of the site',
- 'icon' => '(array) An array of icon formats for the site',
- 'logo' => '(array) The site logo, set in the Customizer',
- 'visible' => '(bool) If this site is visible in the user\'s site list',
- 'is_private' => '(bool) If the site is a private site or not',
- 'single_user_site' => '(bool) Whether the site is single user. Only returned for WP.com sites and for Jetpack sites with version 3.4 or higher.',
- 'is_vip' => '(bool) If the site is a VIP site or not.',
- 'is_following' => '(bool) If the current user is subscribed to this site in the reader',
- 'options' => '(array) An array of options/settings for the blog. Only viewable by users with post editing rights to the site. Note: Post formats is deprecated, please see /sites/$id/post-formats/',
- 'plan' => '(array) Details of the current plan for this site.',
- 'updates' => '(array) An array of available updates for plugins, themes, wordpress, and languages.',
- 'jetpack_modules' => '(array) A list of active Jetpack modules.',
- 'meta' => '(object) Meta data',
- 'quota' => '(array) An array describing how much space a user has left for uploads',
- );
-
-
- function callback( $path = '', $blog_id = 0 ) {
- add_filter( 'sites_site_format', array( $this, 'site_format' ) );
-
- return parent::callback( $path, $blog_id );
- }
-
- public function site_format( $format ) {
- return self::$site_format;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-taxonomies-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-taxonomies-endpoint.php
deleted file mode 100644
index 80b2469b..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-taxonomies-endpoint.php
+++ /dev/null
@@ -1,144 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Get_Taxonomies_Endpoint( array(
- 'description' => "Get a list of a site's categories.",
- 'group' => 'taxonomy',
- 'stat' => 'categories',
- 'method' => 'GET',
- 'path' => '/sites/%s/categories',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain'
- ),
- 'query_parameters' => array(
- 'number' => '(int=100) The number of categories to return. Limit: 1000.',
- 'offset' => '(int=0) 0-indexed offset.',
- 'page' => '(int) Return the Nth 1-indexed page of categories. Takes precedence over the <code>offset</code> parameter.',
- 'search' => '(string) Limit response to include only categories whose names or slugs match the provided search query.',
- 'order' => array(
- 'ASC' => 'Return categories in ascending order.',
- 'DESC' => 'Return categories in descending order.',
- ),
- 'order_by' => array(
- 'name' => 'Order by the name of each category.',
- 'count' => 'Order by the number of posts in each category.',
- ),
- ),
- 'response_format' => array(
- 'found' => '(int) The number of categories returned.',
- 'categories' => '(array) Array of category objects.',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/categories/?number=5'
-) );
-
-new WPCOM_JSON_API_Get_Taxonomies_Endpoint( array(
- 'description' => "Get a list of a site's tags.",
- 'group' => 'taxonomy',
- 'stat' => 'tags',
- 'method' => 'GET',
- 'path' => '/sites/%s/tags',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain'
- ),
- 'query_parameters' => array(
- 'number' => '(int=100) The number of tags to return. Limit: 1000.',
- 'offset' => '(int=0) 0-indexed offset.',
- 'page' => '(int) Return the Nth 1-indexed page of tags. Takes precedence over the <code>offset</code> parameter.',
- 'search' => '(string) Limit response to include only tags whose names or slugs match the provided search query.',
- 'order' => array(
- 'ASC' => 'Return tags in ascending order.',
- 'DESC' => 'Return tags in descending order.',
- ),
- 'order_by' => array(
- 'name' => 'Order by the name of each tag.',
- 'count' => 'Order by the number of posts in each tag.',
- ),
- ),
- 'response_format' => array(
- 'found' => '(int) The number of tags returned.',
- 'tags' => '(array) Array of tag objects.',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/tags/?number=5'
-) );
-
-class WPCOM_JSON_API_Get_Taxonomies_Endpoint extends WPCOM_JSON_API_Endpoint {
- // /sites/%s/tags -> $blog_id
- // /sites/%s/categories -> $blog_id
- function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $args = $this->query_args();
- $args = $this->process_args( $args );
-
- if ( preg_match( '#/tags#i', $path ) ) {
- return $this->tags( $args );
- } else {
- return $this->categories( $args );
- }
- }
-
- function process_args( $args ) {
- if ( $args['number'] < 1 ) {
- $args['number'] = 100;
- } elseif ( 1000 < $args['number'] ) {
- return new WP_Error( 'invalid_number', 'The NUMBER parameter must be less than or equal to 1000.', 400 );
- }
-
- if ( isset( $args['page'] ) ) {
- if ( $args['page'] < 1 ) {
- $args['page'] = 1;
- }
-
- $args['offset'] = ( $args['page'] - 1 ) * $args['number'];
- unset( $args['page'] );
- }
-
- if ( $args['offset'] < 0 ) {
- $args['offset'] = 0;
- }
-
- $args['orderby'] = $args['order_by'];
- unset( $args['order_by'] );
-
- unset( $args['context'], $args['pretty'], $args['http_envelope'], $args['fields'] );
- return $args;
- }
-
- function categories( $args ) {
- $args['get'] = 'all';
-
- $cats = get_categories( $args );
- unset( $args['offset'] );
- $found = wp_count_terms( 'category', $args );
-
- $cats_obj = array();
- foreach ( $cats as $cat ) {
- $cats_obj[] = $this->format_taxonomy( $cat, 'category', 'display' );
- }
-
- return array(
- 'found' => (int) $found,
- 'categories' => $cats_obj
- );
- }
-
- function tags( $args ) {
- $args['get'] = 'all';
-
- $tags = (array) get_tags( $args );
- unset( $args['offset'] );
- $found = wp_count_terms( 'post_tag', $args );
-
- $tags_obj = array();
- foreach ( $tags as $tag ) {
- $tags_obj[] = $this->format_taxonomy( $tag, 'post_tag', 'display' );
- }
-
- return array(
- 'found' => (int) $found,
- 'tags' => $tags_obj
- );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-taxonomy-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-taxonomy-endpoint.php
deleted file mode 100644
index 728fe463..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-taxonomy-endpoint.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Get_Taxonomy_Endpoint( array(
- 'description' => 'Get information about a single category.',
- 'group' => 'taxonomy',
- 'stat' => 'categories:1',
-
- 'method' => 'GET',
- 'path' => '/sites/%s/categories/slug:%s',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$category' => '(string) The category slug'
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/categories/slug:community'
-) );
-
-new WPCOM_JSON_API_Get_Taxonomy_Endpoint( array(
- 'description' => 'Get information about a single tag.',
- 'group' => 'taxonomy',
- 'stat' => 'tags:1',
-
- 'method' => 'GET',
- 'path' => '/sites/%s/tags/slug:%s',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$tag' => '(string) The tag slug'
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/tags/slug:wordpresscom'
-) );
-
-class WPCOM_JSON_API_Get_Taxonomy_Endpoint extends WPCOM_JSON_API_Taxonomy_Endpoint {
- // /sites/%s/tags/slug:%s -> $blog_id, $tag_id
- // /sites/%s/categories/slug:%s -> $blog_id, $tag_id
- function callback( $path = '', $blog_id = 0, $taxonomy_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $args = $this->query_args();
- if ( preg_match( '#/tags/#i', $path ) ) {
- $taxonomy_type = "post_tag";
- } else {
- $taxonomy_type = "category";
- }
-
- $return = $this->get_taxonomy( $taxonomy_id, $taxonomy_type, $args['context'] );
- if ( !$return || is_wp_error( $return ) ) {
- return $return;
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'taxonomies' );
-
- return $return;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-term-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-term-endpoint.php
deleted file mode 100644
index 6546af74..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-get-term-endpoint.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Get_Term_Endpoint( array(
- 'description' => 'Get information about a single term.',
- 'group' => 'taxonomy',
- 'stat' => 'terms:1',
- 'method' => 'GET',
- 'path' => '/sites/%s/taxonomies/%s/terms/slug:%s',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$taxonomy' => '(string) Taxonomy',
- '$slug' => '(string) Term slug',
- ),
- 'response_format' => array(
- 'ID' => '(int) The term ID.',
- 'name' => '(string) The name of the term.',
- 'slug' => '(string) The slug of the term.',
- 'description' => '(string) The description of the term.',
- 'post_count' => '(int) The number of posts using this term.',
- 'parent' => '(int) The parent ID for the term, if hierarchical.',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/taxonomies/post_tag/terms/slug:wordpresscom'
-) );
-
-class WPCOM_JSON_API_Get_Term_Endpoint extends WPCOM_JSON_API_Endpoint {
- // /sites/%s/taxonomies/%s/terms/slug:%s -> $blog_id, $taxonomy, $slug
- function callback( $path = '', $blog_id = 0, $taxonomy = 'category', $slug = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $this->load_theme_functions();
- }
-
- $taxonomy_meta = get_taxonomy( $taxonomy );
- if ( false === $taxonomy_meta || ( ! $taxonomy_meta->public &&
- ! current_user_can( $taxonomy_meta->cap->assign_terms ) ) ) {
- return new WP_Error( 'invalid_taxonomy', 'The taxonomy does not exist', 400 );
- }
-
- $args = $this->query_args();
- $term = $this->get_taxonomy( $slug, $taxonomy, $args['context'] );
- if ( ! $term || is_wp_error( $term ) ) {
- return $term;
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'terms' );
-
- return $term;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-comments-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-comments-endpoint.php
deleted file mode 100644
index 429e0161..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-comments-endpoint.php
+++ /dev/null
@@ -1,309 +0,0 @@
-<?php
-
-class WPCOM_JSON_API_List_Comments_Walker extends Walker {
- public $tree_type = 'comment';
-
- public $db_fields = array(
- 'parent' => 'comment_parent',
- 'id' => 'comment_ID'
- );
-
- public function start_el( &$output, $object, $depth = 0, $args = array(), $current_object_id = 0 ) {
- if ( ! is_array( $output ) ) {
- $output = array();
- }
-
- $output[] = $object->comment_ID;
- }
-
- /**
- * Taken from WordPress's Walker_Comment::display_element()
- *
- * This function is designed to enhance Walker::display_element() to
- * display children of higher nesting levels than selected inline on
- * the highest depth level displayed. This prevents them being orphaned
- * at the end of the comment list.
- *
- * Example: max_depth = 2, with 5 levels of nested content.
- * 1
- * 1.1
- * 1.1.1
- * 1.1.1.1
- * 1.1.1.1.1
- * 1.1.2
- * 1.1.2.1
- * 2
- * 2.2
- *
- * @see Walker_Comment::display_element()
- * @see Walker::display_element()
- * @see wp_list_comments()
- */
- public function display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) {
-
- if ( !$element )
- return;
-
- $id_field = $this->db_fields['id'];
- $id = $element->$id_field;
-
- parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
-
- // If we're at the max depth, and the current element still has children, loop over those and display them at this level
- // This is to prevent them being orphaned to the end of the list.
- if ( $max_depth <= $depth + 1 && isset( $children_elements[$id]) ) {
- foreach ( $children_elements[ $id ] as $child )
- $this->display_element( $child, $children_elements, $max_depth, $depth, $args, $output );
-
- unset( $children_elements[ $id ] );
- }
-
- }
-}
-
-new WPCOM_JSON_API_List_Comments_Endpoint( array(
- 'description' => 'Get a list of recent comments.',
- 'group' => 'comments',
- 'stat' => 'comments',
-
- 'method' => 'GET',
- 'path' => '/sites/%s/comments/',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/comments/?number=2'
-) );
-
-new WPCOM_JSON_API_List_Comments_Endpoint( array(
- 'description' => 'Get a list of recent comments on a post.',
- 'group' => 'comments',
- 'stat' => 'posts:1:replies',
-
- 'method' => 'GET',
- 'path' => '/sites/%s/posts/%d/replies/',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$post_ID' => '(int) The post ID',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/posts/7/replies/?number=2'
-) );
-
-// @todo permissions
-class WPCOM_JSON_API_List_Comments_Endpoint extends WPCOM_JSON_API_Comment_Endpoint {
- public $response_format = array(
- 'found' => '(int) The total number of comments found that match the request (ignoring limits, offsets, and pagination).',
- 'site_ID' => '(int) The site ID',
- 'comments' => '(array:comment) An array of comment objects.',
- );
-
- function __construct( $args ) {
- parent::__construct( $args );
- $this->query = array_merge( $this->query, array(
- 'number' => '(int=20) The number of comments to return. Limit: 100. When using hierarchical=1, number refers to the number of top-level comments returned.',
- 'offset' => '(int=0) 0-indexed offset. Not available if using hierarchical=1.',
- 'page' => '(int) Return the Nth 1-indexed page of comments. Takes precedence over the <code>offset</code> parameter. When using hierarchical=1, pagination is a bit different. See the note on the number parameter.',
- 'order' => array(
- 'DESC' => 'Return comments in descending order from newest to oldest.',
- 'ASC' => 'Return comments in ascending order from oldest to newest.',
- ),
- 'hierarchical' => array(
- 'false' => '',
- 'true' => '(BETA) Order the comment list hierarchically.',
- ),
- 'after' => '(ISO 8601 datetime) Return comments dated on or after the specified datetime. Not available if using hierarchical=1.',
- 'before' => '(ISO 8601 datetime) Return comments dated on or before the specified datetime. Not available if using hierarchical=1.',
- 'type' => array(
- 'any' => 'Return all comments regardless of type.',
- 'comment' => 'Return only regular comments.',
- 'trackback' => 'Return only trackbacks.',
- 'pingback' => 'Return only pingbacks.',
- 'pings' => 'Return both trackbacks and pingbacks.',
- ),
- 'status' => array(
- 'approved' => 'Return only approved comments.',
- 'unapproved' => 'Return only comments in the moderation queue.',
- 'spam' => 'Return only comments marked as spam.',
- 'trash' => 'Return only comments in the trash.',
- 'all' => 'Return comments of all statuses.',
- ),
- ) );
- }
-
- // /sites/%s/comments/ -> $blog_id
- // /sites/%s/posts/%d/replies/ -> $blog_id, $post_id
- // /sites/%s/comments/%d/replies/ -> $blog_id, $comment_id
- function callback( $path = '', $blog_id = 0, $object_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $args = $this->query_args();
-
- if ( $args['number'] < 1 ) {
- $args['number'] = 20;
- } elseif ( 100 < $args['number'] ) {
- return new WP_Error( 'invalid_number', 'The NUMBER parameter must be less than or equal to 100.', 400 );
- }
-
- if ( false !== strpos( $path, '/posts/' ) ) {
- // We're looking for comments of a particular post
- $post_id = $object_id;
- $comment_id = 0;
- } else {
- // We're looking for comments for the whole blog, or replies to a single comment
- $comment_id = $object_id;
- $post_id = 0;
- }
-
- // We can't efficiently get the number of replies to a single comment
- $count = false;
- $found = -1;
-
- if ( !$comment_id ) {
- // We can get comment counts for the whole site or for a single post, but only for certain queries
- if ( 'any' === $args['type'] && !isset( $args['after'] ) && !isset( $args['before'] ) ) {
- $count = $this->api->wp_count_comments( $post_id );
- }
- }
-
- switch ( $args['status'] ) {
- case 'approved' :
- $status = 'approve';
- if ( $count ) {
- $found = $count->approved;
- }
- break;
- default :
- if ( ! current_user_can( 'edit_posts' ) ) {
- return new WP_Error( 'unauthorized', 'User cannot read non-approved comments', 403 );
- }
- if ( 'unapproved' === $args['status'] ) {
- $status = 'hold';
- $count_status = 'moderated';
- } elseif ( 'all' === $args['status'] ) {
- $status = 'all';
- $count_status = 'total_comments';
- } else {
- $status = $count_status = $args['status'];
- }
- if ( $count ) {
- $found = $count->$count_status;
- }
- }
-
- /** This filter is documented in class.json-api.php */
- $exclude = apply_filters( 'jetpack_api_exclude_comment_types',
- array( 'order_note', 'webhook_delivery', 'review', 'action_log' )
- );
-
- $query = array(
- 'order' => $args['order'],
- 'type' => 'any' === $args['type'] ? false : $args['type'],
- 'status' => $status,
- 'type__not_in' => $exclude,
- );
-
- if ( isset( $args['page'] ) ) {
- if ( $args['page'] < 1 ) {
- $args['page'] = 1;
- }
- } else {
- if ( $args['offset'] < 0 ) {
- $args['offset'] = 0;
- }
- }
-
- if ( ! $args['hierarchical'] ) {
- $query['number'] = $args['number'];
-
- if ( isset( $args['page'] ) ) {
- $query['offset'] = ( $args['page'] - 1 ) * $args['number'];
- } else {
- $query['offset'] = $args['offset'];
- }
-
- $is_before = isset( $args['before_gmt'] );
- $is_after = isset( $args['after_gmt'] );
-
- if ( $is_before || $is_after ) {
- $query['date_query'] = array(
- 'column' => 'comment_date_gmt',
- 'inclusive' => true,
- );
-
- if ( $is_before ) {
- $query['date_query']['before'] = $args['before_gmt'];
- }
-
- if ( $is_after ) {
- $query['date_query']['after'] = $args['after_gmt'];
- }
- }
- }
-
- if ( $post_id ) {
- $post = get_post( $post_id );
- if ( !$post || is_wp_error( $post ) ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
- }
- $query['post_id'] = $post->ID;
- if ( $this->api->ends_with( $this->path, '/replies' ) ) {
- $query['parent'] = 0;
- }
- } elseif ( $comment_id ) {
- $comment = get_comment( $comment_id );
- if ( !$comment || is_wp_error( $comment ) ) {
- return new WP_Error( 'unknown_comment', 'Unknown comment', 404 );
- }
- $query['parent'] = $comment_id;
- }
-
- $comments = get_comments( $query );
-
- update_comment_cache( $comments );
-
- if ( $args['hierarchical'] ) {
- $walker = new WPCOM_JSON_API_List_Comments_Walker;
- $comment_ids = $walker->paged_walk( $comments, get_option( 'thread_comments_depth', -1 ), isset( $args['page'] ) ? $args['page'] : 1 , $args['number'] );
- if ( ! empty( $comment_ids ) ) {
- $comments = array_map( 'get_comment', $comment_ids );
- }
- }
-
- $return = array();
-
- foreach ( array_keys( $this->response_format ) as $key ) {
- switch ( $key ) {
- case 'found' :
- $return[ $key ] = (int) $found;
- break;
- case 'site_ID' :
- $return[ $key ] = (int) $blog_id;
- break;
- case 'comments' :
- $return_comments = array();
- if ( ! empty( $comments ) ) {
- foreach ( $comments as $comment ) {
- $the_comment = $this->get_comment( $comment->comment_ID, $args['context'] );
- if ( $the_comment && !is_wp_error( $the_comment ) ) {
- $return_comments[] = $the_comment;
- }
- }
- }
-
- if ( $return_comments ) {
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'comments', count( $return_comments ) );
- }
-
- $return[ $key ] = $return_comments;
- break;
- }
- }
-
- return $return;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-embeds-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-embeds-endpoint.php
deleted file mode 100644
index 6f2ce126..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-embeds-endpoint.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_List_Embeds_Endpoint( array(
- 'description' => "Get a list of embeds available on a site. Note: The current user must have publishing access.",
- 'group' => 'sites',
- 'stat' => 'embeds',
- 'method' => 'GET',
- 'path' => '/sites/%s/embeds',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'response_format' => array(
- 'embeds' => '(array) A list of supported embeds by their regex pattern.',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/embeds',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- )
-) );
-
-class WPCOM_JSON_API_List_Embeds_Endpoint extends WPCOM_JSON_API_Endpoint {
- // /sites/%s/embeds -> $blog_id
- function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- // permissions check
- if ( ! current_user_can( 'edit_posts' ) ) {
- return new WP_Error( 'unauthorized', 'Your token must have permission to post on this blog.', 403 );
- }
-
- // list em
- $output = array( 'embeds' => array() );
-
- if ( ! function_exists( '_wp_oembed_get_object' ) ) {
- require_once( ABSPATH . WPINC . '/class-oembed.php' );
- }
-
- global $wp_embed;
- $oembed = _wp_oembed_get_object();
-
- foreach( $wp_embed->handlers as $priority => $handlers ) {
- foreach( $handlers as $handler ) {
- if ( ! empty( $handler['regex'] ) )
- $output['embeds'][] = $handler['regex'];
- }
- }
-
- foreach ( $oembed->providers as $regex => $oembed_info ) {
- if ( ! empty( $regex ) )
- $output['embeds'][] = $regex;
- }
-
- return $output;
- }
-} \ No newline at end of file
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-media-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-media-endpoint.php
deleted file mode 100644
index 95d11c58..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-media-endpoint.php
+++ /dev/null
@@ -1,82 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_List_Media_Endpoint( array(
- 'description' => 'Get a list of items in the media library.',
- 'group' => 'media',
- 'stat' => 'media',
-
- 'method' => 'GET',
- 'path' => '/sites/%s/media/',
- 'deprecated' => true,
- 'new_version' => '1.1',
- 'max_version' => '1',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'query_parameters' => array(
- 'number' => '(int=20) The number of media items to return. Limit: 100.',
- 'offset' => '(int=0) 0-indexed offset.',
- 'parent_id' => '(int) Default is showing all items. The post where the media item is attached. 0 shows unattached media items.',
- 'mime_type' => "(string) Default is empty. Filter by mime type (e.g., 'image/jpeg', 'application/pdf'). Partial searches also work (e.g. passing 'image' will search for all image files).",
- ),
-
- 'response_format' => array(
- 'media' => '(array) Array of media',
- 'found' => '(int) The number of total results found'
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/media/?number=2',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- )
- )
-) );
-
-class WPCOM_JSON_API_List_Media_Endpoint extends WPCOM_JSON_API_Endpoint {
-
- function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- //upload_files can probably be used for other endpoints but we want contributors to be able to use media too
- if ( !current_user_can( 'edit_posts' ) ) {
- return new WP_Error( 'unauthorized', 'User cannot view media', 403 );
- }
-
- $args = $this->query_args();
-
- if ( $args['number'] < 1 ) {
- $args['number'] = 20;
- } elseif ( 100 < $args['number'] ) {
- return new WP_Error( 'invalid_number', 'The NUMBER parameter must be less than or equal to 100.', 400 );
- }
-
- $media = get_posts( array(
- 'post_type' => 'attachment',
- 'post_parent' => $args['parent_id'],
- 'offset' => $args['offset'],
- 'numberposts' => $args['number'],
- 'post_mime_type' => $args['mime_type']
- ) );
-
- $response = array();
- foreach ( $media as $item ) {
- $response[] = $this->get_media_item( $item->ID );
- }
-
- $_num = (array) wp_count_attachments();
- $_total_media = array_sum( $_num ) - $_num['trash'];
-
- $return = array(
- 'found' => $_total_media,
- 'media' => $response
- );
-
- return $return;
- }
-
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-media-v1-1-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-media-v1-1-endpoint.php
deleted file mode 100644
index 712909d9..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-media-v1-1-endpoint.php
+++ /dev/null
@@ -1,288 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_List_Media_v1_1_Endpoint( array(
- 'description' => 'Get a list of items in the media library.',
- 'group' => 'media',
- 'stat' => 'media',
- 'min_version' => '1.1',
- 'max_version' => '1.1',
- 'method' => 'GET',
- 'path' => '/sites/%s/media/',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'query_parameters' => array(
- 'number' => '(int=20) The number of media items to return. Limit: 100.',
- 'offset' => '(int=0) 0-indexed offset.',
- 'page' => '(int) Return the Nth 1-indexed page of posts. Takes precedence over the <code>offset</code> parameter.',
- 'page_handle' => '(string) A page handle, returned from a previous API call as a <code>meta.next_page</code> property. This is the most efficient way to fetch the next page of results.',
- 'order' => array(
- 'DESC' => 'Return files in descending order. For dates, that means newest to oldest.',
- 'ASC' => 'Return files in ascending order. For dates, that means oldest to newest.',
- ),
- 'order_by' => array(
- 'date' => 'Order by the uploaded time of each file.',
- 'title' => "Order lexicographically by file titles.",
- 'ID' => 'Order by media ID.',
- ),
- 'search' => '(string) Search query.',
- 'post_ID' => '(int) Default is showing all items. The post where the media item is attached. 0 shows unattached media items.',
- 'mime_type' => "(string) Default is empty. Filter by mime type (e.g., 'image/jpeg', 'application/pdf'). Partial searches also work (e.g. passing 'image' will search for all image files).",
- 'after' => '(ISO 8601 datetime) Return media items uploaded after the specified datetime.',
- 'before' => '(ISO 8601 datetime) Return media items uploaded before the specified datetime.',
- ),
-
- 'response_format' => array(
- 'media' => '(array) Array of media objects',
- 'found' => '(int) The number of total results found',
- 'meta' => '(object) Meta data',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/media',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- )
- )
-) );
-
-class WPCOM_JSON_API_List_Media_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint {
-
- public $date_range = array();
- public $page_handle = array();
-
- function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- //upload_files can probably be used for other endpoints but we want contributors to be able to use media too
- if ( ! current_user_can( 'edit_posts' ) ) {
- return new WP_Error( 'unauthorized', 'User cannot view media', 403 );
- }
-
- $args = $this->query_args();
- $is_eligible_for_page_handle = true;
-
- if ( $args['number'] < 1 ) {
- $args['number'] = 20;
- } elseif ( 100 < $args['number'] ) {
- return new WP_Error( 'invalid_number', 'The NUMBER parameter must be less than or equal to 100.', 400 );
- }
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $this->load_theme_functions();
- }
-
- if ( isset( $args['before'] ) ) {
- $this->date_range['before'] = $args['before'];
- }
- if ( isset( $args['after'] ) ) {
- $this->date_range['after'] = $args['after'];
- }
-
- $query = array(
- 'post_type' => 'attachment',
- 'post_status' => 'inherit',
- 'post_parent' => isset( $args['post_ID'] ) ? $args['post_ID'] : null,
- 'posts_per_page' => $args['number'],
- 'post_mime_type' => isset( $args['mime_type'] ) ? $args['mime_type'] : null,
- 'order' => isset( $args['order'] ) ? $args['order'] : 'DESC',
- 'orderby' => isset( $args['order_by'] ) ? $args['order_by'] : 'date',
- 's' => isset( $args['search'] ) ? $args['search'] : null,
- );
-
- if ( isset( $args['page'] ) ) {
- if ( $args['page'] < 1 ) {
- $args['page'] = 1;
- }
-
- $query['paged'] = $args['page'];
- if ( $query['paged'] !== 1 ) {
- $is_eligible_for_page_handle = false;
- }
- } else {
- if ( $args['offset'] < 0 ) {
- $args['offset'] = 0;
- }
-
- $query['offset'] = $args['offset'];
- if ( $query['offset'] !== 0 ) {
- $is_eligible_for_page_handle = false;
- }
- }
-
- if ( isset( $args['page_handle'] ) ) {
- $page_handle = wp_parse_args( $args['page_handle'] );
- if ( isset( $page_handle['value'] ) && isset( $page_handle['id'] ) ) {
- // we have a valid looking page handle
- $this->page_handle = $page_handle;
- add_filter( 'posts_where', array( $this, 'handle_where_for_page_handle' ) );
- }
- }
-
- if ( $this->date_range ) {
- add_filter( 'posts_where', array( $this, 'handle_date_range' ) );
- }
-
- $this->performed_query = $query;
- add_filter( 'posts_orderby', array( $this, 'handle_orderby_for_page_handle' ) );
-
- $media = new WP_Query( $query );
-
- remove_filter( 'posts_orderby', array( $this, 'handle_orderby_for_page_handle' ) );
-
- if ( $this->date_range ) {
- remove_filter( 'posts_where', array( $this, 'handle_date_range' ) );
- $this->date_range = array();
- }
-
- if ( $this->page_handle ) {
- remove_filter( 'posts_where', array( $this, 'handle_where_for_page_handle' ) );
- }
-
- $response = array();
-
- foreach ( $media->posts as $item ) {
- $response[] = $this->get_media_item_v1_1( $item->ID );
- }
-
- $return = array(
- 'found' => (int) $media->found_posts,
- 'media' => $response
- );
-
- if ( $is_eligible_for_page_handle && $return['media'] ) {
- $last_post = end( $return['media'] );
- reset( $return['media'] );
-
- if ( ( $return['found'] > count( $return['media'] ) ) && $last_post ) {
- $return['meta'] = array();
- $return['meta']['next_page'] = $this->build_page_handle( $last_post, $query );
- }
- }
-
- return $return;
- }
-
- function build_page_handle( $post, $query ) {
- $column = $query['orderby'];
- if ( ! $column ) {
- $column = 'date';
- }
- return build_query( array( 'value' => urlencode( $post->$column ), 'id' => $post->ID ) );
- }
-
- function handle_where_for_page_handle( $where ) {
- global $wpdb;
-
- $column = $this->performed_query['orderby'];
- if ( ! $column ) {
- $column = 'date';
- }
- $order = $this->performed_query['order'];
- if ( ! $order ) {
- $order = 'DESC';
- }
-
- if ( ! in_array( $column, array( 'ID', 'title', 'date', 'modified', 'comment_count' ) ) ) {
- return $where;
- }
-
- if ( ! in_array( $order, array( 'DESC', 'ASC' ) ) ) {
- return $where;
- }
-
- $db_column = '';
- $db_value = '';
- switch( $column ) {
- case 'ID':
- $db_column = 'ID';
- $db_value = '%d';
- break;
- case 'title':
- $db_column = 'post_title';
- $db_value = '%s';
- break;
- case 'date':
- $db_column = 'post_date';
- $db_value = 'CAST( %s as DATETIME )';
- break;
- case 'modified':
- $db_column = 'post_modified';
- $db_value = 'CAST( %s as DATETIME )';
- break;
- case 'comment_count':
- $db_column = 'comment_count';
- $db_value = '%d';
- break;
- }
-
- if ( 'DESC'=== $order ) {
- $db_order = '<';
- } else {
- $db_order = '>';
- }
-
- // Add a clause that limits the results to items beyond the passed item, or equivalent to the passed item
- // but with an ID beyond the passed item. When we're ordering by the ID already, we only ask for items
- // beyond the passed item.
- $where .= $wpdb->prepare( " AND ( ( `$wpdb->posts`.`$db_column` $db_order $db_value ) ", $this->page_handle['value'] );
- if ( $db_column !== 'ID' ) {
- $where .= $wpdb->prepare( "OR ( `$wpdb->posts`.`$db_column` = $db_value AND `$wpdb->posts`.ID $db_order %d )", $this->page_handle['value'], $this->page_handle['id'] );
- }
- $where .= ' )';
-
- return $where;
- }
-
- function handle_date_range( $where ) {
- global $wpdb;
-
- switch ( count( $this->date_range ) ) {
- case 2 :
- $where .= $wpdb->prepare(
- " AND `$wpdb->posts`.post_date BETWEEN CAST( %s AS DATETIME ) AND CAST( %s AS DATETIME ) ",
- $this->date_range['after'],
- $this->date_range['before']
- );
- break;
- case 1 :
- if ( isset( $this->date_range['before'] ) ) {
- $where .= $wpdb->prepare(
- " AND `$wpdb->posts`.post_date <= CAST( %s AS DATETIME ) ",
- $this->date_range['before']
- );
- } else {
- $where .= $wpdb->prepare(
- " AND `$wpdb->posts`.post_date >= CAST( %s AS DATETIME ) ",
- $this->date_range['after']
- );
- }
- break;
- }
-
- return $where;
- }
-
- function handle_orderby_for_page_handle( $orderby ) {
- global $wpdb;
- if ( $this->performed_query['orderby'] === 'ID' ) {
- // bail if we're already ordering by ID
- return $orderby;
- }
-
- if ( $orderby ) {
- $orderby .= ' ,';
- }
- $order = $this->performed_query['order'];
- if ( ! $order ) {
- $order = 'DESC';
- }
- $orderby .= " `$wpdb->posts`.ID $order";
- return $orderby;
- }
-
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-media-v1-2-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-media-v1-2-endpoint.php
deleted file mode 100644
index 0ffd971b..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-media-v1-2-endpoint.php
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-
-jetpack_require_lib( 'class.media' );
-
-new WPCOM_JSON_API_List_Media_v1_2_Endpoint( array(
- 'description' => 'Get a list of items in the media library.',
- 'group' => 'media',
- 'stat' => 'media',
- 'min_version' => '1.2',
- 'max_version' => '1.2',
- 'method' => 'GET',
- 'path' => '/sites/%s/media/',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'query_parameters' => array(
- 'number' => '(int=20) The number of media items to return. Limit: 100.',
- 'offset' => '(int=0) 0-indexed offset.',
- 'page' => '(int) Return the Nth 1-indexed page of posts. Takes precedence over the <code>offset</code> parameter.',
- 'page_handle' => '(string) A page handle, returned from a previous API call as a <code>meta.next_page</code> property. This is the most efficient way to fetch the next page of results.',
- 'order' => array(
- 'DESC' => 'Return files in descending order. For dates, that means newest to oldest.',
- 'ASC' => 'Return files in ascending order. For dates, that means oldest to newest.',
- ),
- 'order_by' => array(
- 'date' => 'Order by the uploaded time of each file.',
- 'title' => "Order lexicographically by file titles.",
- 'ID' => 'Order by media ID.',
- ),
- 'search' => '(string) Search query.',
- 'post_ID' => '(int) Default is showing all items. The post where the media item is attached. 0 shows unattached media items.',
- 'mime_type' => "(string) Default is empty. Filter by mime type (e.g., 'image/jpeg', 'application/pdf'). Partial searches also work (e.g. passing 'image' will search for all image files).",
- 'after' => '(ISO 8601 datetime) Return media items uploaded after the specified datetime.',
- 'before' => '(ISO 8601 datetime) Return media items uploaded before the specified datetime.',
- ),
-
- 'response_format' => array(
- 'media' => '(array) Array of media objects',
- 'found' => '(int) The number of total results found',
- 'meta' => '(object) Meta data',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.2/sites/82974409/media',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- )
- )
-) );
-
-class WPCOM_JSON_API_List_Media_v1_2_Endpoint extends WPCOM_JSON_API_List_Media_v1_1_Endpoint {
- function callback( $path = '', $blog_id = 0 ) {
- $response = parent::callback( $path, $blog_id );
-
- if ( is_wp_error( $response ) ) {
- return $response;
- }
-
- $media_list = $response['media'];
-
- if ( count( $media_list ) < 1 ) {
- return $response;
- }
-
- foreach ( $media_list as $index => $media_item ) {
- // expose `revision_history` object for each image
- $media_item->revision_history = (object) array(
- 'items' => (array) Jetpack_Media::get_revision_history( $media_item->ID ),
- 'original' => (object) Jetpack_Media::get_original_media( $media_item->ID )
- );
- }
-
- return $response;
- }
-}
-
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-type-taxonomies-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-type-taxonomies-endpoint.php
deleted file mode 100644
index 27b1cf0e..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-type-taxonomies-endpoint.php
+++ /dev/null
@@ -1,98 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_List_Post_Type_Taxonomies_Endpoint( array (
- 'description' => 'Get a list of taxonomies associated with a post type.',
- 'group' => 'taxonomy',
- 'stat' => 'sites:X:post-types:X:taxonomies',
- 'method' => 'GET',
- 'path' => '/sites/%s/post-types/%s/taxonomies',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$post_type' => '(string) Post type',
- ),
- 'response_format' => array(
- 'found' => '(int) The number of taxonomies found',
- 'taxonomies' => '(array:taxonomy) A list of available taxonomies',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/33534099/post-types/post/taxonomies'
-) );
-
-class WPCOM_JSON_API_List_Post_Type_Taxonomies_Endpoint extends WPCOM_JSON_API_Endpoint {
- static $taxonomy_keys_to_include = array(
- 'name' => 'name',
- 'label' => 'label',
- 'labels' => 'labels',
- 'description' => 'description',
- 'hierarchical' => 'hierarchical',
- 'public' => 'public',
- 'cap' => 'capabilities',
- );
-
- // /sites/%s/post-types/%s/taxonomies -> $blog_id, $post_type
- function callback( $path = '', $blog_id = 0, $post_type = 'post' ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $this->load_theme_functions();
- }
-
- $this->localize_initial_taxonomies( $post_type );
-
- $args = $this->query_args();
-
- $post_type_object = get_post_type_object( $post_type );
- if ( ! $post_type_object || ( ! $post_type_object->publicly_queryable && (
- ! current_user_can( $post_type_object->cap->edit_posts ) ) ) ) {
- return new WP_Error( 'unknown_post_type', 'Unknown post type', 404 );
- }
-
- // Get a list of available taxonomies
- $taxonomy_objects = get_object_taxonomies( $post_type, 'objects' );
-
- // Construct array of formatted objects
- $formatted_taxonomy_objects = array();
- foreach ( $taxonomy_objects as $taxonomy_object ) {
- // Omit private taxonomies unless user has assign capability
- if ( ! $taxonomy_object->public && ! current_user_can( $taxonomy_object->cap->assign_terms ) ) {
- continue;
- }
-
- // Include only the desired keys in the response
- $formatted_taxonomy_object = array();
- foreach ( self::$taxonomy_keys_to_include as $key => $value ) {
- $formatted_taxonomy_object[ $value ] = $taxonomy_object->{ $key };
- }
-
- $formatted_taxonomy_objects[] = $formatted_taxonomy_object;
- }
-
- return array(
- 'found' => count( $formatted_taxonomy_objects ),
- 'taxonomies' => $formatted_taxonomy_objects,
- );
- }
-
- protected function localize_initial_taxonomies( $post_type ) {
- /** This filter is documented in jetpack/json-endpoints/class.wpcom-json-api-list-post-types-endpoint.php */
- if ( ! apply_filters( 'rest_api_localize_response', false ) ) {
- return;
- }
-
- // Since recreating initial taxonomies will restore the default post
- // types to which they are associated, save post type's taxonomies in
- // case it was customized via `register_taxonomy_for_object_type`
- $post_type_taxonomies = get_object_taxonomies( $post_type );
-
- // API localization occurs after the initial taxonomies have been
- // registered, so re-register if localizing response
- create_initial_taxonomies();
-
- // Restore registered taxonomies for post type
- foreach ( $post_type_taxonomies as $taxonomy ) {
- register_taxonomy_for_object_type( $taxonomy, $post_type );
- }
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-types-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-types-endpoint.php
deleted file mode 100644
index 06ac5747..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-post-types-endpoint.php
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_List_Post_Types_Endpoint( array (
- 'description' => 'Get a list of post types available for a site.',
- 'group' => 'sites',
- 'stat' => 'sites:X:post-types',
-
- 'method' => 'GET',
- 'path' => '/sites/%s/post-types',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'query_parameters' => array(
- 'api_queryable' => '(bool) If true, only queryable post types are returned',
- ),
-
- 'response_format' => array(
- 'found' => '(int) The number of post types found',
- 'post_types' => '(array) A list of available post types',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/33534099/post-types'
-) );
-
-class WPCOM_JSON_API_List_Post_Types_Endpoint extends WPCOM_JSON_API_Endpoint {
- static $post_type_keys_to_include = array(
- 'name' => 'name',
- 'label' => 'label',
- 'labels' => 'labels',
- 'description' => 'description',
- 'map_meta_cap' => 'map_meta_cap',
- 'cap' => 'capabilities',
- 'hierarchical' => 'hierarchical',
- 'show_ui' => 'show_ui',
- 'publicly_queryable' => 'publicly_queryable',
- );
-
- // /sites/%s/post-types -> $blog_id
- function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $this->load_theme_functions();
- }
-
- $args = $this->query_args();
-
- /**
- * Whether API responses should be returned in a custom locale. False
- * for Jetpack; may be true for WP.com requests.
- *
- * @since 3.9.2
- */
- if ( apply_filters( 'rest_api_localize_response', false ) ) {
- // API localization occurs after the initial post types have been
- // registered, so re-register if localizing response
- create_initial_post_types();
- }
-
- // Get a list of available post types
- $post_types = get_post_types();
- $formatted_post_type_objects = array();
-
- // Retrieve post type object for each post type
- foreach ( $post_types as $post_type ) {
- // Skip non-queryable if filtering on queryable only
- $is_queryable = $this->is_post_type_allowed( $post_type );
- if ( ! $is_queryable ) {
- continue;
- }
-
- $post_type_object = get_post_type_object( $post_type );
- $formatted_post_type_object = array();
-
- // Include only the desired keys in the response
- foreach ( self::$post_type_keys_to_include as $key => $value ) {
- $formatted_post_type_object[ $value ] = $post_type_object->{ $key };
- }
- $formatted_post_type_object['api_queryable'] = $is_queryable;
- $formatted_post_type_object['supports'] = get_all_post_type_supports( $post_type );
- if ( $this->post_type_supports_tags( $post_type ) ) {
- $formatted_post_type_object['supports']['tags'] = true;
- }
-
- $formatted_post_type_objects[] = $formatted_post_type_object;
- }
-
- return array(
- 'found' => count( $formatted_post_type_objects ),
- 'post_types' => $formatted_post_type_objects
- );
- }
-
- function post_type_supports_tags( $post_type ) {
- if ( in_array( 'post_tag', get_object_taxonomies( $post_type ) ) ) {
- return true;
- }
-
- // the featured content module adds post_tag support
- // to the post types that are registered for it
- // however it does so in a way that isn't available
- // to get_object_taxonomies
- $featured_content = get_theme_support( 'featured-content' );
- if ( ! $featured_content || empty( $featured_content[0] ) || empty( $featured_content[0]['post_types'] ) ) {
- return false;
- }
-
- if ( is_array( $featured_content[0]['post_types'] ) ) {
- return in_array( $post_type, $featured_content[0]['post_types'] );
- }
- return $post_type === $featured_content[0]['post_types'];
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-endpoint.php
deleted file mode 100644
index 726aaea4..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-endpoint.php
+++ /dev/null
@@ -1,353 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_List_Posts_Endpoint( array(
- 'description' => 'Get a list of matching posts.',
- 'new_version' => '1.1',
- 'max_version' => '1',
- 'group' => 'posts',
- 'stat' => 'posts',
-
- 'method' => 'GET',
- 'path' => '/sites/%s/posts/',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'query_parameters' => array(
- 'number' => '(int=20) The number of posts to return. Limit: 100.',
- 'offset' => '(int=0) 0-indexed offset.',
- 'page' => '(int) Return the Nth 1-indexed page of posts. Takes precedence over the <code>offset</code> parameter.',
- 'order' => array(
- 'DESC' => 'Return posts in descending order. For dates, that means newest to oldest.',
- 'ASC' => 'Return posts in ascending order. For dates, that means oldest to newest.',
- ),
- 'order_by' => array(
- 'date' => 'Order by the created time of each post.',
- 'modified' => 'Order by the modified time of each post.',
- 'title' => "Order lexicographically by the posts' titles.",
- 'comment_count' => 'Order by the number of comments for each post.',
- 'ID' => 'Order by post ID.',
- ),
- 'after' => '(ISO 8601 datetime) Return posts dated on or after the specified datetime.',
- 'before' => '(ISO 8601 datetime) Return posts dated on or before the specified datetime.',
- 'tag' => '(string) Specify the tag name or slug.',
- 'category' => '(string) Specify the category name or slug.',
- 'term' => '(object:string) Specify comma-separated term slugs to search within, indexed by taxonomy slug.',
- 'type' => "(string) Specify the post type. Defaults to 'post', use 'any' to query for both posts and pages. Post types besides post and page need to be whitelisted using the <code>rest_api_allowed_post_types</code> filter.",
- 'parent_id' => '(int) Returns only posts which are children of the specified post. Applies only to hierarchical post types.',
- 'exclude' => '(array:int|int) Excludes the specified post ID(s) from the response',
- 'exclude_tree' => '(int) Excludes the specified post and all of its descendants from the response. Applies only to hierarchical post types.',
- 'status' => array(
- 'publish' => 'Return only published posts.',
- 'private' => 'Return only private posts.',
- 'draft' => 'Return only draft posts.',
- 'pending' => 'Return only posts pending editorial approval.',
- 'future' => 'Return only posts scheduled for future publishing.',
- 'trash' => 'Return only posts in the trash.',
- 'any' => 'Return all posts regardless of status.',
- ),
- 'sticky' => array(
- 'false' => 'Post is not marked as sticky.',
- 'true' => 'Stick the post to the front page.',
- ),
- 'author' => "(int) Author's user ID",
- 'search' => '(string) Search query',
- 'meta_key' => '(string) Metadata key that the post should contain',
- 'meta_value' => '(string) Metadata value that the post should contain. Will only be applied if a `meta_key` is also given',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/posts/?number=5'
-) );
-
-class WPCOM_JSON_API_List_Posts_Endpoint extends WPCOM_JSON_API_Post_Endpoint {
- public $date_range = array();
-
- public $response_format = array(
- 'found' => '(int) The total number of posts found that match the request (ignoring limits, offsets, and pagination).',
- 'posts' => '(array:post) An array of post objects.',
- );
-
- // /sites/%s/posts/ -> $blog_id
- function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $args = $this->query_args();
-
- if ( $args['number'] < 1 ) {
- $args['number'] = 20;
- } elseif ( 100 < $args['number'] ) {
- return new WP_Error( 'invalid_number', 'The NUMBER parameter must be less than or equal to 100.', 400 );
- }
-
- if ( isset( $args['type'] ) && ! $this->is_post_type_allowed( $args['type'] ) ) {
- return new WP_Error( 'unknown_post_type', 'Unknown post type', 404 );
- }
-
- // Normalize post_type
- if ( isset( $args['type'] ) && 'any' == $args['type'] ) {
- if ( version_compare( $this->api->version, '1.1', '<' ) ) {
- $args['type'] = array( 'post', 'page' );
- } else { // 1.1+
- $args['type'] = $this->_get_whitelisted_post_types();
- }
- }
-
- // determine statuses
- $status = $args['status'];
- $status = ( $status ) ? explode( ',', $status ) : array( 'publish' );
- if ( is_user_logged_in() ) {
- $statuses_whitelist = array(
- 'publish',
- 'pending',
- 'draft',
- 'future',
- 'private',
- 'trash',
- 'any',
- );
- $status = array_intersect( $status, $statuses_whitelist );
- } else {
- // logged-out users can see only published posts
- $statuses_whitelist = array( 'publish', 'any' );
- $status = array_intersect( $status, $statuses_whitelist );
-
- if ( empty( $status ) ) {
- // requested only protected statuses? nothing for you here
- return array( 'found' => 0, 'posts' => array() );
- }
- // clear it (AKA published only) because "any" includes protected
- $status = array();
- }
-
- // let's be explicit about defaulting to 'post'
- $args['type'] = isset( $args['type'] ) ? $args['type'] : 'post';
-
- // make sure the user can read or edit the requested post type(s)
- if ( is_array( $args['type'] ) ) {
- $allowed_types = array();
- foreach ( $args['type'] as $post_type ) {
- if ( $this->current_user_can_access_post_type( $post_type, $args['context'] ) ) {
- $allowed_types[] = $post_type;
- }
- }
-
- if ( empty( $allowed_types ) ) {
- return array( 'found' => 0, 'posts' => array() );
- }
- $args['type'] = $allowed_types;
- }
- else {
- if ( ! $this->current_user_can_access_post_type( $args['type'], $args['context'] ) ) {
- return array( 'found' => 0, 'posts' => array() );
- }
- }
-
- $query = array(
- 'posts_per_page' => $args['number'],
- 'order' => $args['order'],
- 'orderby' => $args['order_by'],
- 'post_type' => $args['type'],
- 'post_status' => $status,
- 'post_parent' => isset( $args['parent_id'] ) ? $args['parent_id'] : null,
- 'author' => isset( $args['author'] ) && 0 < $args['author'] ? $args['author'] : null,
- 's' => isset( $args['search'] ) ? $args['search'] : null,
- 'fields' => 'ids',
- );
-
- if ( ! is_user_logged_in () ) {
- $query['has_password'] = false;
- }
-
- if ( isset( $args['meta_key'] ) ) {
- $show = false;
- if ( WPCOM_JSON_API_Metadata::is_public( $args['meta_key'] ) )
- $show = true;
- if ( current_user_can( 'edit_post_meta', $query['post_type'], $args['meta_key'] ) )
- $show = true;
-
- if ( is_protected_meta( $args['meta_key'], 'post' ) && ! $show )
- return new WP_Error( 'invalid_meta_key', 'Invalid meta key', 404 );
-
- $meta = array( 'key' => $args['meta_key'] );
- if ( isset( $args['meta_value'] ) )
- $meta['value'] = $args['meta_value'];
-
- $query['meta_query'] = array( $meta );
- }
-
- if (
- isset( $args['sticky'] )
- &&
- ( $sticky = get_option( 'sticky_posts' ) )
- &&
- is_array( $sticky )
- ) {
- if ( $args['sticky'] ) {
- $query['post__in'] = $sticky;
- } else {
- $query['post__not_in'] = $sticky;
- $query['ignore_sticky_posts'] = 1;
- }
- } else {
- $query['post__not_in'] = $sticky;
- $query['ignore_sticky_posts'] = 1;
- }
-
- if ( isset( $args['exclude'] ) ) {
- $query['post__not_in'] = array_merge( $query['post__not_in'], (array) $args['exclude'] );
- }
-
- if ( isset( $args['exclude_tree'] ) && is_post_type_hierarchical( $args['type'] ) ) {
- // get_page_children is a misnomer; it supports all hierarchical post types
- $page_args = array(
- 'child_of' => $args['exclude_tree'],
- 'post_type' => $args['type'],
- // since we're looking for things to exclude, be aggressive
- 'post_status' => 'publish,draft,pending,private,future,trash',
- );
- $post_descendants = get_pages( $page_args );
-
- $exclude_tree = array( $args['exclude_tree'] );
- foreach ( $post_descendants as $child ) {
- $exclude_tree[] = $child->ID;
- }
-
- $query['post__not_in'] = isset( $query['post__not_in'] ) ? array_merge( $query['post__not_in'], $exclude_tree ) : $exclude_tree;
- }
-
- if ( isset( $args['category'] ) ) {
- $category = get_term_by( 'slug', $args['category'], 'category' );
- if ( $category === false) {
- $query['category_name'] = $args['category'];
- } else {
- $query['cat'] = $category->term_id;
- }
- }
-
- if ( isset( $args['tag'] ) ) {
- $query['tag'] = $args['tag'];
- }
-
- if ( ! empty( $args['term'] ) ) {
- $query['tax_query'] = array();
- foreach ( $args['term'] as $taxonomy => $slug ) {
- $taxonomy_object = get_taxonomy( $taxonomy );
- if ( false === $taxonomy_object || ( ! $taxonomy_object->public &&
- ! current_user_can( $taxonomy_object->cap->assign_terms ) ) ) {
- continue;
- }
-
- $query['tax_query'][] = array(
- 'taxonomy' => $taxonomy,
- 'field' => 'slug',
- 'terms' => explode( ',', $slug )
- );
- }
- }
-
- if ( isset( $args['page'] ) ) {
- if ( $args['page'] < 1 ) {
- $args['page'] = 1;
- }
-
- $query['paged'] = $args['page'];
- } else {
- if ( $args['offset'] < 0 ) {
- $args['offset'] = 0;
- }
-
- $query['offset'] = $args['offset'];
- }
-
- if ( isset( $args['before'] ) ) {
- $this->date_range['before'] = $args['before'];
- }
- if ( isset( $args['after'] ) ) {
- $this->date_range['after'] = $args['after'];
- }
-
- if ( $this->date_range ) {
- add_filter( 'posts_where', array( $this, 'handle_date_range' ) );
- }
-
- /**
- * 'column' necessary for the me/posts endpoint (which extends sites/$site/posts).
- * Would need to be added to the sites/$site/posts definition if we ever want to
- * use it there.
- */
- $column_whitelist = array( 'post_modified_gmt' );
- if ( isset( $args['column'] ) && in_array( $args['column'], $column_whitelist ) ) {
- $query['column'] = $args['column'];
- }
-
- $wp_query = new WP_Query( $query );
- if ( $this->date_range ) {
- remove_filter( 'posts_where', array( $this, 'handle_date_range' ) );
- $this->date_range = array();
- }
-
- $return = array();
- $excluded_count = 0;
- foreach ( array_keys( $this->response_format ) as $key ) {
- switch ( $key ) {
- case 'found' :
- $return[$key] = (int) $wp_query->found_posts;
- break;
- case 'posts' :
- $posts = array();
- foreach ( $wp_query->posts as $post_ID ) {
- $the_post = $this->get_post_by( 'ID', $post_ID, $args['context'] );
- if ( $the_post && ! is_wp_error( $the_post ) ) {
- $posts[] = $the_post;
- } else {
- $excluded_count++;
- }
- }
-
- if ( $posts ) {
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'posts', count( $posts ) );
- }
-
- $return[$key] = $posts;
- break;
- }
- }
-
- $return['found'] -= $excluded_count;
-
- return $return;
- }
-
- function handle_date_range( $where ) {
- global $wpdb;
-
- switch ( count( $this->date_range ) ) {
- case 2 :
- $where .= $wpdb->prepare(
- " AND `$wpdb->posts`.post_date BETWEEN CAST( %s AS DATETIME ) AND CAST( %s AS DATETIME ) ",
- $this->date_range['after'],
- $this->date_range['before']
- );
- break;
- case 1 :
- if ( isset( $this->date_range['before'] ) ) {
- $where .= $wpdb->prepare(
- " AND `$wpdb->posts`.post_date <= CAST( %s AS DATETIME ) ",
- $this->date_range['before']
- );
- } else {
- $where .= $wpdb->prepare(
- " AND `$wpdb->posts`.post_date >= CAST( %s AS DATETIME ) ",
- $this->date_range['after']
- );
- }
- break;
- }
-
- return $where;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-v1-1-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-v1-1-endpoint.php
deleted file mode 100644
index 7094ffaf..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-v1-1-endpoint.php
+++ /dev/null
@@ -1,529 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_List_Posts_v1_1_Endpoint( array(
- 'description' => 'Get a list of matching posts.',
- 'min_version' => '1.1',
- 'max_version' => '1.1',
-
- 'group' => 'posts',
- 'stat' => 'posts',
-
- 'method' => 'GET',
- 'path' => '/sites/%s/posts/',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'query_parameters' => array(
- 'number' => '(int=20) The number of posts to return. Limit: 100.',
- 'offset' => '(int=0) 0-indexed offset.',
- 'page' => '(int) Return the Nth 1-indexed page of posts. Takes precedence over the <code>offset</code> parameter.',
- 'page_handle' => '(string) A page handle, returned from a previous API call as a <code>meta.next_page</code> property. This is the most efficient way to fetch the next page of results.',
- 'order' => array(
- 'DESC' => 'Return posts in descending order. For dates, that means newest to oldest.',
- 'ASC' => 'Return posts in ascending order. For dates, that means oldest to newest.',
- ),
- 'order_by' => array(
- 'date' => 'Order by the created time of each post.',
- 'modified' => 'Order by the modified time of each post.',
- 'title' => "Order lexicographically by the posts' titles.",
- 'comment_count' => 'Order by the number of comments for each post.',
- 'ID' => 'Order by post ID.',
- ),
- 'after' => '(ISO 8601 datetime) Return posts dated after the specified datetime.',
- 'before' => '(ISO 8601 datetime) Return posts dated before the specified datetime.',
- 'modified_after' => '(ISO 8601 datetime) Return posts modified after the specified datetime.',
- 'modified_before' => '(ISO 8601 datetime) Return posts modified before the specified datetime.',
- 'tag' => '(string) Specify the tag name or slug.',
- 'category' => '(string) Specify the category name or slug.',
- 'term' => '(object:string) Specify comma-separated term slugs to search within, indexed by taxonomy slug.',
- 'type' => "(string) Specify the post type. Defaults to 'post', use 'any' to query for both posts and pages. Post types besides post and page need to be whitelisted using the <code>rest_api_allowed_post_types</code> filter.",
- 'parent_id' => '(int) Returns only posts which are children of the specified post. Applies only to hierarchical post types.',
- 'exclude' => '(array:int|int) Excludes the specified post ID(s) from the response',
- 'exclude_tree' => '(int) Excludes the specified post and all of its descendants from the response. Applies only to hierarchical post types.',
- 'status' => '(string) Comma-separated list of statuses for which to query, including any of: "publish", "private", "draft", "pending", "future", and "trash", or simply "any". Defaults to "publish"',
- 'sticky' => array(
- 'include' => 'Sticky posts are not excluded from the list.',
- 'exclude' => 'Sticky posts are excluded from the list.',
- 'require' => 'Only include sticky posts',
- ),
- 'author' => "(int) Author's user ID",
- 'search' => '(string) Search query',
- 'meta_key' => '(string) Metadata key that the post should contain',
- 'meta_value' => '(string) Metadata value that the post should contain. Will only be applied if a `meta_key` is also given',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/en.blog.wordpress.com/posts/?number=2'
-) );
-
-class WPCOM_JSON_API_List_Posts_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_Endpoint {
- public $date_range = array();
- public $modified_range = array();
- public $page_handle = array();
- public $performed_query = null;
-
- public $response_format = array(
- 'found' => '(int) The total number of posts found that match the request (ignoring limits, offsets, and pagination).',
- 'posts' => '(array:post) An array of post objects.',
- 'meta' => '(object) Meta data',
- );
-
- // /sites/%s/posts/ -> $blog_id
- function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $args = $this->query_args();
- $is_eligible_for_page_handle = true;
- $site = $this->get_platform()->get_site( $blog_id );
-
- if ( $args['number'] < 1 ) {
- $args['number'] = 20;
- } elseif ( 100 < $args['number'] ) {
- return new WP_Error( 'invalid_number', 'The NUMBER parameter must be less than or equal to 100.', 400 );
- }
-
- if ( isset( $args['type'] ) && ! $site->is_post_type_allowed( $args['type'] ) ) {
- return new WP_Error( 'unknown_post_type', 'Unknown post type', 404 );
- }
-
- // Normalize post_type
- if ( isset( $args['type'] ) && 'any' == $args['type'] ) {
- if ( version_compare( $this->api->version, '1.1', '<' ) ) {
- $args['type'] = array( 'post', 'page' );
- } else { // 1.1+
- $args['type'] = $site->get_whitelisted_post_types();
- }
- }
-
- // determine statuses
- $status = ( ! empty( $args['status'] ) ) ? explode( ',', $args['status'] ) : array( 'publish' );
- if ( is_user_logged_in() ) {
- $statuses_whitelist = array(
- 'publish',
- 'pending',
- 'draft',
- 'future',
- 'private',
- 'trash',
- 'any',
- );
- $status = array_intersect( $status, $statuses_whitelist );
- } else {
- // logged-out users can see only published posts
- $statuses_whitelist = array( 'publish', 'any' );
- $status = array_intersect( $status, $statuses_whitelist );
-
- if ( empty( $status ) ) {
- // requested only protected statuses? nothing for you here
- return array( 'found' => 0, 'posts' => array() );
- }
- // clear it (AKA published only) because "any" includes protected
- $status = array();
- }
-
- if ( isset( $args['type'] ) &&
- ! in_array( $args['type'], array( 'post', 'revision', 'page', 'any' ) ) &&
- defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $this->load_theme_functions();
- }
-
- // let's be explicit about defaulting to 'post'
- $args['type'] = isset( $args['type'] ) ? $args['type'] : 'post';
-
- // make sure the user can read or edit the requested post type(s)
- if ( is_array( $args['type'] ) ) {
- $allowed_types = array();
- foreach ( $args['type'] as $post_type ) {
- if ( $site->current_user_can_access_post_type( $post_type, $args['context'] ) ) {
- $allowed_types[] = $post_type;
- }
- }
-
- if ( empty( $allowed_types ) ) {
- return array( 'found' => 0, 'posts' => array() );
- }
- $args['type'] = $allowed_types;
- }
- else {
- if ( ! $site->current_user_can_access_post_type( $args['type'], $args['context'] ) ) {
- return array( 'found' => 0, 'posts' => array() );
- }
- }
-
-
- $query = array(
- 'posts_per_page' => $args['number'],
- 'order' => $args['order'],
- 'orderby' => $args['order_by'],
- 'post_type' => $args['type'],
- 'post_status' => $status,
- 'post_parent' => isset( $args['parent_id'] ) ? $args['parent_id'] : null,
- 'author' => isset( $args['author'] ) && 0 < $args['author'] ? $args['author'] : null,
- 's' => isset( $args['search'] ) ? $args['search'] : null,
- 'fields' => 'ids',
- );
-
- if ( ! is_user_logged_in () ) {
- $query['has_password'] = false;
- }
-
- if ( isset( $args['meta_key'] ) ) {
- $show = false;
- if ( WPCOM_JSON_API_Metadata::is_public( $args['meta_key'] ) )
- $show = true;
- if ( current_user_can( 'edit_post_meta', $query['post_type'], $args['meta_key'] ) )
- $show = true;
-
- if ( is_protected_meta( $args['meta_key'], 'post' ) && ! $show )
- return new WP_Error( 'invalid_meta_key', 'Invalid meta key', 404 );
-
- $meta = array( 'key' => $args['meta_key'] );
- if ( isset( $args['meta_value'] ) )
- $meta['value'] = $args['meta_value'];
-
- $query['meta_query'] = array( $meta );
- }
-
- if ( $args['sticky'] === 'include' ) {
- $query['ignore_sticky_posts'] = 1;
- } else if ( $args['sticky'] === 'exclude' ) {
- $sticky = get_option( 'sticky_posts' );
- if ( is_array( $sticky ) ) {
- $query['post__not_in'] = $sticky;
- }
- } else if ( $args['sticky'] === 'require' ) {
- $sticky = get_option( 'sticky_posts' );
- if ( is_array( $sticky ) && ! empty( $sticky ) ) {
- $query['post__in'] = $sticky;
- } else {
- // no sticky posts exist
- return array( 'found' => 0, 'posts' => array() );
- }
- }
-
- if ( isset( $args['exclude'] ) ) {
- $excluded_ids = (array) $args['exclude'];
- $query['post__not_in'] = isset( $query['post__not_in'] ) ? array_merge( $query['post__not_in'], $excluded_ids ) : $excluded_ids;
- }
-
- if ( isset( $args['exclude_tree'] ) && is_post_type_hierarchical( $args['type'] ) ) {
- // get_page_children is a misnomer; it supports all hierarchical post types
- $page_args = array(
- 'child_of' => $args['exclude_tree'],
- 'post_type' => $args['type'],
- // since we're looking for things to exclude, be aggressive
- 'post_status' => 'publish,draft,pending,private,future,trash',
- );
- $post_descendants = get_pages( $page_args );
-
- $exclude_tree = array( $args['exclude_tree'] );
- foreach ( $post_descendants as $child ) {
- $exclude_tree[] = $child->ID;
- }
-
- $query['post__not_in'] = isset( $query['post__not_in'] ) ? array_merge( $query['post__not_in'], $exclude_tree ) : $exclude_tree;
- }
-
- if ( isset( $args['category'] ) ) {
- $category = get_term_by( 'slug', $args['category'], 'category' );
- if ( $category === false) {
- $query['category_name'] = $args['category'];
- } else {
- $query['cat'] = $category->term_id;
- }
- }
-
- if ( isset( $args['tag'] ) ) {
- $query['tag'] = $args['tag'];
- }
-
- if ( ! empty( $args['term'] ) ) {
- $query['tax_query'] = array();
- foreach ( $args['term'] as $taxonomy => $slug ) {
- $taxonomy_object = get_taxonomy( $taxonomy );
- if ( false === $taxonomy_object || ( ! $taxonomy_object->public &&
- ! current_user_can( $taxonomy_object->cap->assign_terms ) ) ) {
- continue;
- }
-
- $query['tax_query'][] = array(
- 'taxonomy' => $taxonomy,
- 'field' => 'slug',
- 'terms' => explode( ',', $slug )
- );
- }
- }
-
- if ( isset( $args['page'] ) ) {
- if ( $args['page'] < 1 ) {
- $args['page'] = 1;
- }
-
- $query['paged'] = $args['page'];
- if ( $query['paged'] !== 1 ) {
- $is_eligible_for_page_handle = false;
- }
- } else {
- if ( $args['offset'] < 0 ) {
- $args['offset'] = 0;
- }
-
- $query['offset'] = $args['offset'];
- if ( $query['offset'] !== 0 ) {
- $is_eligible_for_page_handle = false;
- }
- }
-
- if ( isset( $args['before_gmt'] ) ) {
- $this->date_range['before'] = $args['before_gmt'];
- }
- if ( isset( $args['after_gmt'] ) ) {
- $this->date_range['after'] = $args['after_gmt'];
- }
-
- if ( isset( $args['modified_before_gmt'] ) ) {
- $this->modified_range['before'] = $args['modified_before_gmt'];
- }
- if ( isset( $args['modified_after_gmt'] ) ) {
- $this->modified_range['after'] = $args['modified_after_gmt'];
- }
-
- if ( $this->date_range ) {
- add_filter( 'posts_where', array( $this, 'handle_date_range' ) );
- }
-
- if ( $this->modified_range ) {
- add_filter( 'posts_where', array( $this, 'handle_modified_range' ) );
- }
-
- if ( isset( $args['page_handle'] ) ) {
- $page_handle = wp_parse_args( $args['page_handle'] );
- if ( isset( $page_handle['value'] ) && isset( $page_handle['id'] ) ) {
- // we have a valid looking page handle
- $this->page_handle = $page_handle;
- add_filter( 'posts_where', array( $this, 'handle_where_for_page_handle' ) );
- }
- }
-
- /**
- * 'column' necessary for the me/posts endpoint (which extends sites/$site/posts).
- * Would need to be added to the sites/$site/posts definition if we ever want to
- * use it there.
- */
- $column_whitelist = array( 'post_modified_gmt' );
- if ( isset( $args['column'] ) && in_array( $args['column'], $column_whitelist ) ) {
- $query['column'] = $args['column'];
- }
-
- $this->performed_query = $query;
- add_filter( 'posts_orderby', array( $this, 'handle_orderby_for_page_handle' ) );
-
- $wp_query = new WP_Query( $query );
-
- remove_filter( 'posts_orderby', array( $this, 'handle_orderby_for_page_handle' ) );
-
- if ( $this->date_range ) {
- remove_filter( 'posts_where', array( $this, 'handle_date_range' ) );
- $this->date_range = array();
- }
-
- if ( $this->modified_range ) {
- remove_filter( 'posts_where', array( $this, 'handle_modified_range' ) );
- $this->modified_range = array();
- }
-
- if ( $this->page_handle ) {
- remove_filter( 'posts_where', array( $this, 'handle_where_for_page_handle' ) );
-
- }
-
- $return = array();
- $excluded_count = 0;
- foreach ( array_keys( $this->response_format ) as $key ) {
- switch ( $key ) {
- case 'found' :
- $return[$key] = (int) $wp_query->found_posts;
- break;
- case 'posts' :
- $posts = array();
- foreach ( $wp_query->posts as $post_ID ) {
- $the_post = $this->get_post_by( 'ID', $post_ID, $args['context'] );
- if ( $the_post && ! is_wp_error( $the_post ) ) {
- $posts[] = $the_post;
- } else {
- $excluded_count++;
- }
- }
-
- if ( $posts ) {
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'posts', count( $posts ) );
- }
-
- $return[$key] = $posts;
- break;
-
- case 'meta' :
- if ( ! is_array( $args['type'] ) ) {
- $return[$key] = (object) array(
- 'links' => (object) array(
- 'counts' => (string) $this->links->get_site_link( $blog_id, 'post-counts/' . $args['type'] ),
- )
- );
- }
-
- if ( $is_eligible_for_page_handle && $return['posts'] ) {
- $last_post = end( $return['posts'] );
- reset( $return['posts'] );
- if ( ( $return['found'] > count( $return['posts'] ) ) && $last_post ) {
- if ( ! isset( $return[$key] ) ) {
- $return[$key] = (object) array();
- }
- $return[$key]->next_page = $this->build_page_handle( $last_post, $query );
- }
- }
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- if ( !isset( $return[$key] ) )
- $return[$key] = new stdClass;
- $return[$key]->wpcom = true;
- }
-
- break;
- }
- }
-
- $return['found'] -= $excluded_count;
-
- return $return;
- }
-
- function build_page_handle( $post, $query ) {
- $column = $query['orderby'];
- if ( ! $column ) {
- $column = 'date';
- }
- return build_query( array( 'value' => urlencode($post[$column]), 'id' => $post['ID'] ) );
- }
-
- function _build_date_range_query( $column, $range, $where ) {
- global $wpdb;
-
- switch ( count( $range ) ) {
- case 2 :
- $where .= $wpdb->prepare(
- " AND `$wpdb->posts`.$column >= CAST( %s AS DATETIME ) AND `$wpdb->posts`.$column < CAST( %s AS DATETIME ) ",
- $range['after'],
- $range['before']
- );
- break;
- case 1 :
- if ( isset( $range['before'] ) ) {
- $where .= $wpdb->prepare(
- " AND `$wpdb->posts`.$column < CAST( %s AS DATETIME ) ",
- $range['before']
- );
- } else {
- $where .= $wpdb->prepare(
- " AND `$wpdb->posts`.$column > CAST( %s AS DATETIME ) ",
- $range['after']
- );
- }
- break;
- }
-
- return $where;
- }
-
- function handle_date_range( $where ) {
- return $this->_build_date_range_query( 'post_date_gmt', $this->date_range, $where );
- }
-
- function handle_modified_range( $where ) {
- return $this->_build_date_range_query( 'post_modified_gmt', $this->modified_range, $where );
- }
-
- function handle_where_for_page_handle( $where ) {
- global $wpdb;
-
- $column = $this->performed_query['orderby'];
- if ( ! $column ) {
- $column = 'date';
- }
- $order = $this->performed_query['order'];
- if ( ! $order ) {
- $order = 'DESC';
- }
-
- if ( ! in_array( $column, array( 'ID', 'title', 'date', 'modified', 'comment_count' ) ) ) {
- return $where;
- }
-
- if ( ! in_array( $order, array( 'DESC', 'ASC' ) ) ) {
- return $where;
- }
-
- $db_column = '';
- $db_value = '';
- switch( $column ) {
- case 'ID':
- $db_column = 'ID';
- $db_value = '%d';
- break;
- case 'title':
- $db_column = 'post_title';
- $db_value = '%s';
- break;
- case 'date':
- $db_column = 'post_date';
- $db_value = 'CAST( %s as DATETIME )';
- break;
- case 'modified':
- $db_column = 'post_modified';
- $db_value = 'CAST( %s as DATETIME )';
- break;
- case 'comment_count':
- $db_column = 'comment_count';
- $db_value = '%d';
- break;
- }
-
- if ( 'DESC'=== $order ) {
- $db_order = '<';
- } else {
- $db_order = '>';
- }
-
- // Add a clause that limits the results to items beyond the passed item, or equivalent to the passed item
- // but with an ID beyond the passed item. When we're ordering by the ID already, we only ask for items
- // beyond the passed item.
- $where .= $wpdb->prepare( " AND ( ( `$wpdb->posts`.`$db_column` $db_order $db_value ) ", $this->page_handle['value'] );
- if ( $db_column !== 'ID' ) {
- $where .= $wpdb->prepare( "OR ( `$wpdb->posts`.`$db_column` = $db_value AND `$wpdb->posts`.ID $db_order %d )", $this->page_handle['value'], $this->page_handle['id'] );
- }
- $where .= ' )';
-
- return $where;
- }
-
- function handle_orderby_for_page_handle( $orderby ) {
- global $wpdb;
- if ( $this->performed_query['orderby'] === 'ID' ) {
- // bail if we're already ordering by ID
- return $orderby;
- }
-
- if ( $orderby ) {
- $orderby .= ' ,';
- }
- $order = $this->performed_query['order'];
- if ( ! $order ) {
- $order = 'DESC';
- }
- $orderby .= " `$wpdb->posts`.ID $order";
- return $orderby;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-v1-2-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-v1-2-endpoint.php
deleted file mode 100644
index 3aa61bb5..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-posts-v1-2-endpoint.php
+++ /dev/null
@@ -1,433 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_List_Posts_v1_2_Endpoint( array(
- 'description' => 'Get a list of matching posts.',
- 'min_version' => '1.2',
- 'max_version' => '1.2',
-
- 'group' => 'posts',
- 'stat' => 'posts',
-
- 'method' => 'GET',
- 'path' => '/sites/%s/posts/',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'query_parameters' => array(
- 'number' => '(int=20) The number of posts to return. Limit: 100.',
- 'offset' => '(int=0) 0-indexed offset.',
- 'page' => '(int) Return the Nth 1-indexed page of posts. Takes precedence over the <code>offset</code> parameter.',
- 'page_handle' => '(string) A page handle, returned from a previous API call as a <code>meta.next_page</code> property. This is the most efficient way to fetch the next page of results.',
- 'order' => array(
- 'DESC' => 'Return posts in descending order. For dates, that means newest to oldest.',
- 'ASC' => 'Return posts in ascending order. For dates, that means oldest to newest.',
- ),
- 'order_by' => array(
- 'date' => 'Order by the created time of each post.',
- 'modified' => 'Order by the modified time of each post.',
- 'title' => "Order lexicographically by the posts' titles.",
- 'comment_count' => 'Order by the number of comments for each post.',
- 'ID' => 'Order by post ID.',
- ),
- 'after' => '(ISO 8601 datetime) Return posts dated after the specified datetime.',
- 'before' => '(ISO 8601 datetime) Return posts dated before the specified datetime.',
- 'modified_after' => '(ISO 8601 datetime) Return posts modified after the specified datetime.',
- 'modified_before' => '(ISO 8601 datetime) Return posts modified before the specified datetime.',
- 'tag' => '(string) Specify the tag name or slug.',
- 'category' => '(string) Specify the category name or slug.',
- 'term' => '(object:string) Specify comma-separated term slugs to search within, indexed by taxonomy slug.',
- 'type' => "(string) Specify the post type. Defaults to 'post', use 'any' to query for both posts and pages. Post types besides post and page need to be whitelisted using the <code>rest_api_allowed_post_types</code> filter.",
- 'exclude_private_types' => '(bool=false) Use this flag together with `type=any` to get only publicly accessible posts.',
- 'parent_id' => '(int) Returns only posts which are children of the specified post. Applies only to hierarchical post types.',
- 'exclude' => '(array:int|int) Excludes the specified post ID(s) from the response',
- 'exclude_tree' => '(int) Excludes the specified post and all of its descendants from the response. Applies only to hierarchical post types.',
- 'status' => '(string) Comma-separated list of statuses for which to query, including any of: "publish", "private", "draft", "pending", "future", and "trash", or simply "any". Defaults to "publish"',
- 'sticky' => array(
- 'include' => 'Sticky posts are not excluded from the list.',
- 'exclude' => 'Sticky posts are excluded from the list.',
- 'require' => 'Only include sticky posts',
- ),
- 'author' => "(int) Author's user ID",
- 'search' => '(string) Search query',
- 'meta_key' => '(string) Metadata key that the post should contain',
- 'meta_value' => '(string) Metadata value that the post should contain. Will only be applied if a `meta_key` is also given',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.2/sites/en.blog.wordpress.com/posts/?number=2'
-) );
-
-class WPCOM_JSON_API_List_Posts_v1_2_Endpoint extends WPCOM_JSON_API_List_Posts_v1_1_Endpoint {
- // /sites/%s/posts/ -> $blog_id
- function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $args = $this->query_args();
- $is_eligible_for_page_handle = true;
- $site = $this->get_platform()->get_site( $blog_id );
-
- if ( $args['number'] < 1 ) {
- $args['number'] = 20;
- } elseif ( 100 < $args['number'] ) {
- return new WP_Error( 'invalid_number', 'The NUMBER parameter must be less than or equal to 100.', 400 );
- }
-
- if ( isset( $args['type'] ) ) {
- // load all types on WPCOM, unless only built-in ones are requested
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM && ! in_array( $args['type'], array( 'post', 'revision', 'page' ) ) ) {
- $this->load_theme_functions();
- }
-
- if ( ! $site->is_post_type_allowed( $args['type'] ) ) {
- return new WP_Error( 'unknown_post_type', 'Unknown post type', 404 );
- }
-
- // Normalize post_type
- if ( 'any' == $args['type'] ) {
- $whitelisted_post_types = $site->get_whitelisted_post_types();
-
- if ( isset( $args['exclude_private_types'] ) && $args['exclude_private_types'] == true ) {
- $public_post_types = get_post_types( array( 'public' => true ) );
- $args['type'] = array_intersect( $public_post_types, $whitelisted_post_types );
- } else {
- $args['type'] = $whitelisted_post_types;
- }
- }
- } else {
- // let's be explicit about defaulting to 'post'
- $args['type'] = 'post';
- }
-
- // make sure the user can read or edit the requested post type(s)
- if ( is_array( $args['type'] ) ) {
- $allowed_types = array();
- foreach ( $args['type'] as $post_type ) {
- if ( $site->current_user_can_access_post_type( $post_type, $args['context'] ) ) {
- $allowed_types[] = $post_type;
- }
- }
-
- if ( empty( $allowed_types ) ) {
- return array( 'found' => 0, 'posts' => array() );
- }
- $args['type'] = $allowed_types;
- }
- else {
- if ( ! $site->current_user_can_access_post_type( $args['type'], $args['context'] ) ) {
- return array( 'found' => 0, 'posts' => array() );
- }
- }
-
- // determine statuses
- $status = ( ! empty( $args['status'] ) ) ? explode( ',', $args['status'] ) : array( 'publish' );
- if ( is_user_logged_in() ) {
- $statuses_whitelist = array(
- 'publish',
- 'pending',
- 'draft',
- 'future',
- 'private',
- 'trash',
- 'any',
- );
- $status = array_intersect( $status, $statuses_whitelist );
- } else {
- // logged-out users can see only published posts
- $statuses_whitelist = array( 'publish', 'any' );
- $status = array_intersect( $status, $statuses_whitelist );
-
- if ( empty( $status ) ) {
- // requested only protected statuses? nothing for you here
- return array( 'found' => 0, 'posts' => array() );
- }
- // clear it (AKA published only) because "any" includes protected
- $status = array();
- }
-
- $query = array(
- 'posts_per_page' => $args['number'],
- 'order' => $args['order'],
- 'orderby' => $args['order_by'],
- 'post_type' => $args['type'],
- 'post_status' => $status,
- 'post_parent' => isset( $args['parent_id'] ) ? $args['parent_id'] : null,
- 'author' => isset( $args['author'] ) && 0 < $args['author'] ? $args['author'] : null,
- 's' => isset( $args['search'] ) ? $args['search'] : null,
- 'fields' => 'ids',
- );
-
- if ( ! is_user_logged_in () ) {
- $query['has_password'] = false;
- }
-
- if ( isset( $args['meta_key'] ) ) {
- $show = false;
- if ( WPCOM_JSON_API_Metadata::is_public( $args['meta_key'] ) )
- $show = true;
- if ( current_user_can( 'edit_post_meta', $query['post_type'], $args['meta_key'] ) )
- $show = true;
-
- if ( is_protected_meta( $args['meta_key'], 'post' ) && ! $show )
- return new WP_Error( 'invalid_meta_key', 'Invalid meta key', 404 );
-
- $meta = array( 'key' => $args['meta_key'] );
- if ( isset( $args['meta_value'] ) )
- $meta['value'] = $args['meta_value'];
-
- $query['meta_query'] = array( $meta );
- }
-
- if ( $args['sticky'] === 'include' ) {
- $query['ignore_sticky_posts'] = 1;
- } else if ( $args['sticky'] === 'exclude' ) {
- $sticky = get_option( 'sticky_posts' );
- if ( is_array( $sticky ) ) {
- $query['post__not_in'] = $sticky;
- }
- } else if ( $args['sticky'] === 'require' ) {
- $sticky = get_option( 'sticky_posts' );
- if ( is_array( $sticky ) && ! empty( $sticky ) ) {
- $query['post__in'] = $sticky;
- } else {
- // no sticky posts exist
- return array( 'found' => 0, 'posts' => array() );
- }
- }
-
- if ( isset( $args['exclude'] ) ) {
- $excluded_ids = (array) $args['exclude'];
- $query['post__not_in'] = isset( $query['post__not_in'] ) ? array_merge( $query['post__not_in'], $excluded_ids ) : $excluded_ids;
- }
-
- if ( isset( $args['exclude_tree'] ) && is_post_type_hierarchical( $args['type'] ) ) {
- // get_page_children is a misnomer; it supports all hierarchical post types
- $page_args = array(
- 'child_of' => $args['exclude_tree'],
- 'post_type' => $args['type'],
- // since we're looking for things to exclude, be aggressive
- 'post_status' => 'publish,draft,pending,private,future,trash',
- );
- $post_descendants = get_pages( $page_args );
-
- $exclude_tree = array( $args['exclude_tree'] );
- foreach ( $post_descendants as $child ) {
- $exclude_tree[] = $child->ID;
- }
-
- $query['post__not_in'] = isset( $query['post__not_in'] ) ? array_merge( $query['post__not_in'], $exclude_tree ) : $exclude_tree;
- }
-
- if ( isset( $args['category'] ) ) {
- $category = get_term_by( 'slug', $args['category'], 'category' );
- if ( $category === false) {
- $query['category_name'] = $args['category'];
- } else {
- $query['cat'] = $category->term_id;
- }
- }
-
- if ( isset( $args['tag'] ) ) {
- $query['tag'] = $args['tag'];
- }
-
- if ( ! empty( $args['term'] ) ) {
- $query['tax_query'] = array();
- foreach ( $args['term'] as $taxonomy => $slug ) {
- $taxonomy_object = get_taxonomy( $taxonomy );
- if ( false === $taxonomy_object || ( ! $taxonomy_object->public &&
- ! current_user_can( $taxonomy_object->cap->assign_terms ) ) ) {
- continue;
- }
-
- $query['tax_query'][] = array(
- 'taxonomy' => $taxonomy,
- 'field' => 'slug',
- 'terms' => explode( ',', $slug )
- );
- }
- }
-
- if ( isset( $args['page'] ) ) {
- if ( $args['page'] < 1 ) {
- $args['page'] = 1;
- }
-
- $query['paged'] = $args['page'];
- if ( $query['paged'] !== 1 ) {
- $is_eligible_for_page_handle = false;
- }
- } else {
- if ( $args['offset'] < 0 ) {
- $args['offset'] = 0;
- }
-
- $query['offset'] = $args['offset'];
- if ( $query['offset'] !== 0 ) {
- $is_eligible_for_page_handle = false;
- }
- }
-
- if ( isset( $args['before'] ) ) {
- $this->date_range['before'] = $args['before'];
- }
- if ( isset( $args['after'] ) ) {
- $this->date_range['after'] = $args['after'];
- }
-
- if ( isset( $args['modified_before_gmt'] ) ) {
- $this->modified_range['before'] = $args['modified_before_gmt'];
- }
- if ( isset( $args['modified_after_gmt'] ) ) {
- $this->modified_range['after'] = $args['modified_after_gmt'];
- }
-
- if ( $this->date_range ) {
- add_filter( 'posts_where', array( $this, 'handle_date_range' ) );
- }
-
- if ( $this->modified_range ) {
- add_filter( 'posts_where', array( $this, 'handle_modified_range' ) );
- }
-
- if ( isset( $args['page_handle'] ) ) {
- $page_handle = wp_parse_args( $args['page_handle'] );
- if ( isset( $page_handle['value'] ) && isset( $page_handle['id'] ) ) {
- // we have a valid looking page handle
- $this->page_handle = $page_handle;
- add_filter( 'posts_where', array( $this, 'handle_where_for_page_handle' ) );
- }
- }
-
- /**
- * 'column' necessary for the me/posts endpoint (which extends sites/$site/posts).
- * Would need to be added to the sites/$site/posts definition if we ever want to
- * use it there.
- */
- $column_whitelist = array( 'post_modified_gmt' );
- if ( isset( $args['column'] ) && in_array( $args['column'], $column_whitelist ) ) {
- $query['column'] = $args['column'];
- }
-
- $this->performed_query = $query;
- add_filter( 'posts_orderby', array( $this, 'handle_orderby_for_page_handle' ) );
-
- $wp_query = new WP_Query( $query );
-
- remove_filter( 'posts_orderby', array( $this, 'handle_orderby_for_page_handle' ) );
-
- if ( $this->date_range ) {
- remove_filter( 'posts_where', array( $this, 'handle_date_range' ) );
- $this->date_range = array();
- }
-
- if ( $this->modified_range ) {
- remove_filter( 'posts_where', array( $this, 'handle_modified_range' ) );
- $this->modified_range = array();
- }
-
- if ( $this->page_handle ) {
- remove_filter( 'posts_where', array( $this, 'handle_where_for_page_handle' ) );
-
- }
-
- $return = array();
- $excluded_count = 0;
- foreach ( array_keys( $this->response_format ) as $key ) {
- switch ( $key ) {
- case 'found' :
- $return[$key] = (int) $wp_query->found_posts;
- break;
- case 'posts' :
- $posts = array();
- foreach ( $wp_query->posts as $post_ID ) {
- $the_post = $this->get_post_by( 'ID', $post_ID, $args['context'] );
- if ( $the_post && ! is_wp_error( $the_post ) ) {
- $posts[] = $the_post;
- } else {
- $excluded_count++;
- }
- }
-
- if ( $posts ) {
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'posts', count( $posts ) );
- }
-
- $return[$key] = $posts;
- break;
-
- case 'meta' :
- if ( ! is_array( $args['type'] ) ) {
- $return[$key] = (object) array(
- 'links' => (object) array(
- 'counts' => (string) $this->links->get_site_link( $blog_id, 'post-counts/' . $args['type'] ),
- )
- );
- }
-
- if ( $is_eligible_for_page_handle && $return['posts'] ) {
- $last_post = end( $return['posts'] );
- reset( $return['posts'] );
- if ( ( $return['found'] > count( $return['posts'] ) ) && $last_post ) {
- if ( ! isset( $return[$key] ) ) {
- $return[$key] = (object) array();
- }
- $return[$key]->next_page = $this->build_page_handle( $last_post, $query );
- }
- }
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- if ( !isset( $return[$key] ) )
- $return[$key] = new stdClass;
- $return[$key]->wpcom = true;
- }
-
- break;
- }
- }
-
- $return['found'] -= $excluded_count;
-
- return $return;
- }
-
- function build_page_handle( $post, $query ) {
- $column = $query['orderby'];
- if ( ! $column ) {
- $column = 'date';
- }
- return build_query( array( 'value' => urlencode($post[$column]), 'id' => $post['ID'] ) );
- }
-
- function _build_date_range_query( $column, $range, $where ) {
- global $wpdb;
-
- switch ( count( $range ) ) {
- case 2 :
- $where .= $wpdb->prepare(
- " AND `$wpdb->posts`.$column >= CAST( %s AS DATETIME ) AND `$wpdb->posts`.$column < CAST( %s AS DATETIME ) ",
- $range['after'],
- $range['before']
- );
- break;
- case 1 :
- if ( isset( $range['before'] ) ) {
- $where .= $wpdb->prepare(
- " AND `$wpdb->posts`.$column < CAST( %s AS DATETIME ) ",
- $range['before']
- );
- } else {
- $where .= $wpdb->prepare(
- " AND `$wpdb->posts`.$column > CAST( %s AS DATETIME ) ",
- $range['after']
- );
- }
- break;
- }
-
- return $where;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-roles-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-roles-endpoint.php
deleted file mode 100644
index 733f26f7..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-roles-endpoint.php
+++ /dev/null
@@ -1,135 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_List_Roles_Endpoint( array(
- 'description' => 'List the user roles of a site.',
- 'group' => '__do_not_document',
- 'stat' => 'roles:list',
- 'max_version' => '1.1',
- 'method' => 'GET',
- 'path' => '/sites/%s/roles',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'query_parameters' => array(
- ),
-
- 'response_format' => array(
- 'roles' => '(array:role) Array of role objects.',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/roles',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- )
-) );
-
-new WPCOM_JSON_API_List_Roles_Endpoint( array(
- 'description' => 'List the user roles of a site.',
- 'group' => '__do_not_document',
- 'stat' => 'roles:list',
- 'min_version' => '1.2',
- 'force' => 'wpcom',
- 'method' => 'GET',
- 'path' => '/sites/%s/roles',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'query_parameters' => array(),
-
- 'response_format' => array(
- 'roles' => '(array:role) Array of role objects.',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/roles',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN',
- ),
- ),
-) );
-
-class WPCOM_JSON_API_List_Roles_Endpoint extends WPCOM_JSON_API_Endpoint {
-
- var $response_format = array(
- 'roles' => '(array:role) Array of role objects',
- );
-
- static function role_sort( $a, $b ) {
- $core_role_names = array( 'administrator', 'editor', 'author', 'contributor', 'subscriber' );
- $a_is_core_role = in_array( $a->name, $core_role_names );
- $b_is_core_role = in_array( $b->name, $core_role_names );
-
- // if $a is a core_role and $b is not, $a always comes first
- if ( $a_is_core_role && ! $b_is_core_role ) {
- return -1;
- }
-
- // if $b is a core_role and $a is not, $b always comes first
- if ( $b_is_core_role && ! $a_is_core_role ) {
- return 1;
- }
-
- // otherwise the one with the > number of capabilities comes first
- $a_cap_count = count( $a->capabilities );
- $b_cap_count = count( $b->capabilities );
-
- if ( $a_cap_count === $b_cap_count ) {
- return 0;
- }
-
- return ( $a_cap_count > $b_cap_count ) ? -1 : 1;
- }
-
- // /sites/%s/roles/ -> $blog_id
- function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $roles = array();
-
- $sal_site = $this->get_platform()->get_site( $blog_id );
- $wp_roles = $sal_site->get_roles();
-
- // Check if the site is connected and talks to us on a regular basis
- $is_connected = $sal_site->is_connected_site();
- if ( is_wp_error( $is_connected ) ) {
- return $is_connected;
- }
-
- if ( ! $sal_site->current_user_can( 'list_users' ) ) {
- return new WP_Error( 'unauthorized', 'User cannot view roles for specified site', 403 );
- }
-
- if ( method_exists( $wp_roles, 'get_names' ) ) {
- $role_names = $wp_roles->get_names();
-
- $role_keys = array_keys( $role_names );
-
- foreach ( (array) $role_keys as $role_key ) {
- $role_details = get_role( $role_key );
- $role_details->display_name = translate_user_role( $role_names[$role_key] );
- $roles[] = $role_details;
- }
- } else {
- // Jetpack Shadow Site side of things.
- foreach ( $wp_roles as $role_key => $role ) {
- $roles[] = (object) array(
- 'name' => $role_key,
- 'display_name' => $role['name'],
- 'capabilities' => (object) $role['capabilities']
- );
- }
- }
-
- // Sort the array so roles with the most number of capabilities comes first, then the next role, and so on
- usort( $roles, array( 'self', 'role_sort' ) );
-
- return array( 'roles' => $roles );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-shortcodes-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-shortcodes-endpoint.php
deleted file mode 100644
index ee21bd33..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-shortcodes-endpoint.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_List_Shortcodes_Endpoint( array(
- 'description' => "Get a list of shortcodes available on a site. Note: The current user must have publishing access.",
- 'group' => 'sites',
- 'stat' => 'shortcodes',
- 'method' => 'GET',
- 'path' => '/sites/%s/shortcodes',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'response_format' => array(
- 'shortcodes' => '(array) A list of supported shortcodes by their handle.',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/shortcodes',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- )
-) );
-
-class WPCOM_JSON_API_List_Shortcodes_Endpoint extends WPCOM_JSON_API_Endpoint {
- // /sites/%s/shortcodes -> $blog_id
- function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- // permissions check
- if ( ! current_user_can( 'edit_posts' ) ) {
- return new WP_Error( 'unauthorized', 'Your token must have permission to post on this blog.', 403 );
- }
-
- // list em
- global $shortcode_tags;
- $output = array( 'shortcodes' => array() );
-
- foreach ( $shortcode_tags as $tag => $class ) {
- if ( '__return_false' == $class )
- continue;
- $output['shortcodes'][] = $tag;
- }
-
- return $output;
- }
-} \ No newline at end of file
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-terms-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-terms-endpoint.php
deleted file mode 100644
index 83edcfc9..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-terms-endpoint.php
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_List_Terms_Endpoint( array(
- 'description' => 'Get a list of a site\'s terms by taxonomy.',
- 'group' => 'taxonomy',
- 'stat' => 'terms',
- 'method' => 'GET',
- 'path' => '/sites/%s/taxonomies/%s/terms',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$taxonomy' => '(string) Taxonomy',
- ),
- 'query_parameters' => array(
- 'number' => '(int=100) The number of terms to return. Limit: 1000.',
- 'offset' => '(int=0) 0-indexed offset.',
- 'page' => '(int) Return the Nth 1-indexed page of terms. Takes precedence over the <code>offset</code> parameter.',
- 'search' => '(string) Limit response to include only terms whose names or slugs match the provided search query.',
- 'order' => array(
- 'ASC' => 'Return terms in ascending order.',
- 'DESC' => 'Return terms in descending order.',
- ),
- 'order_by' => array(
- 'name' => 'Order by the name of each tag.',
- 'count' => 'Order by the number of posts in each tag.',
- ),
- ),
- 'response_format' => array(
- 'found' => '(int) The number of terms returned.',
- 'terms' => '(array) Array of tag objects.',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/taxonomies/post_tags/terms?number=5'
-) );
-
-class WPCOM_JSON_API_List_Terms_Endpoint extends WPCOM_JSON_API_Endpoint {
- // /sites/%s/taxonomies/%s/terms -> $blog_id, $taxonomy
- function callback( $path = '', $blog_id = 0, $taxonomy = 'category' ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $this->load_theme_functions();
- }
-
- $taxonomy_meta = get_taxonomy( $taxonomy );
- if ( false === $taxonomy_meta || ( ! $taxonomy_meta->public &&
- ! current_user_can( $taxonomy_meta->cap->assign_terms ) ) ) {
- return new WP_Error( 'invalid_taxonomy', 'The taxonomy does not exist', 400 );
- }
-
- $args = $this->query_args();
- $args = $this->process_args( $args );
-
- $formatted_terms = $this->get_formatted_terms( $taxonomy, $args );
-
- if ( ! empty( $formatted_terms ) ) {
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'terms', count( $formatted_terms ) );
- }
-
- return array(
- 'found' => (int) $this->get_found( $taxonomy, $args ),
- 'terms' => (array) $formatted_terms
- );
- }
-
- function process_args( $args ) {
- $args['get'] = 'all';
-
- if ( $args['number'] < 1 ) {
- $args['number'] = 100;
- } elseif ( 1000 < $args['number'] ) {
- return new WP_Error( 'invalid_number', 'The number parameter must be less than or equal to 1000.', 400 );
- }
-
- if ( isset( $args['page'] ) ) {
- if ( $args['page'] < 1 ) {
- $args['page'] = 1;
- }
-
- $args['offset'] = ( $args['page'] - 1 ) * $args['number'];
- unset( $args['page'] );
- }
-
- if ( $args['offset'] < 0 ) {
- $args['offset'] = 0;
- }
-
- $args['orderby'] = $args['order_by'];
- unset( $args['order_by'] );
-
- unset( $args['context'], $args['pretty'], $args['http_envelope'], $args['fields'] );
- return $args;
- }
-
- function get_found( $taxonomy, $args ) {
- unset( $args['offset'] );
- return wp_count_terms( $taxonomy, $args );
- }
-
- function get_formatted_terms( $taxonomy, $args ) {
- $terms = get_terms( $taxonomy, $args );
-
- $formatted_terms = array();
- foreach ( $terms as $term ) {
- $formatted_terms[] = $this->format_taxonomy( $term, $taxonomy, 'display' );
- }
-
- return $formatted_terms;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-users-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-users-endpoint.php
deleted file mode 100644
index 489223b7..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-list-users-endpoint.php
+++ /dev/null
@@ -1,177 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_List_Users_Endpoint( array(
- 'description' => 'List the users of a site.',
- 'group' => 'users',
- 'stat' => 'users:list',
-
- 'method' => 'GET',
- 'path' => '/sites/%s/users',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'query_parameters' => array(
- 'number' => '(int=20) Limit the total number of authors returned.',
- 'offset' => '(int=0) The first n authors to be skipped in the returned array.',
- 'order' => array(
- 'DESC' => 'Return authors in descending order.',
- 'ASC' => 'Return authors in ascending order.',
- ),
- 'order_by' => array(
- 'ID' => 'Order by ID (default).',
- 'login' => 'Order by username.',
- 'nicename' => "Order by nicename.",
- 'email' => 'Order by author email address.',
- 'url' => 'Order by author URL.',
- 'registered' => 'Order by registered date.',
- 'display_name' => 'Order by display name.',
- 'post_count' => 'Order by number of posts published.',
- ),
- 'authors_only' => '(bool) Set to true to fetch authors only',
- 'type' => "(string) Specify the post type to query authors for. Only works when combined with the `authors_only` flag. Defaults to 'post'. Post types besides post and page need to be whitelisted using the <code>rest_api_allowed_post_types</code> filter.",
- 'search' => '(string) Find matching users.',
- 'search_columns' => "(array) Specify which columns to check for matching users. Can be any of 'ID', 'user_login', 'user_email', 'user_url', 'user_nicename', and 'display_name'. Only works when combined with `search` parameter.",
- 'role' => '(string) Specify a specific user role to fetch.'
- ),
-
- 'response_format' => array(
- 'found' => '(int) The total number of authors found that match the request (ignoring limits and offsets).',
- 'authors' => '(array:author) Array of author objects.',
- ),
-
- 'example_response' => '{
- "found": 1,
- "users": [
- {
- "ID": 78972699,
- "login": "apiexamples",
- "email": "justin+apiexamples@a8c.com",
- "name": "apiexamples",
- "first_name": "",
- "last_name": "",
- "nice_name": "apiexamples",
- "URL": "http://apiexamples.wordpress.com",
- "avatar_URL": "https://1.gravatar.com/avatar/a2afb7b6c0e23e5d363d8612fb1bd5ad?s=96&d=identicon&r=G",
- "profile_URL": "https://en.gravatar.com/apiexamples",
- "site_ID": 82974409,
- "roles": [
- "administrator"
- ],
- "is_super_admin": false
- }
- ]
- }',
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/users',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- )
-) );
-
-class WPCOM_JSON_API_List_Users_Endpoint extends WPCOM_JSON_API_Endpoint {
-
- var $response_format = array(
- 'found' => '(int) The total number of authors found that match the request (ignoring limits and offsets).',
- 'users' => '(array:author) Array of user objects',
- );
-
- // /sites/%s/users/ -> $blog_id
- function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $args = $this->query_args();
-
- $authors_only = ( ! empty( $args['authors_only'] ) );
-
- if ( $args['number'] < 1 ) {
- $args['number'] = 20;
- } elseif ( 1000 < $args['number'] ) {
- return new WP_Error( 'invalid_number', 'The NUMBER parameter must be less than or equal to 1000.', 400 );
- }
-
- if ( $authors_only ) {
- if ( empty( $args['type'] ) ) {
- $args['type'] = 'post';
- }
-
- if ( ! $this->is_post_type_allowed( $args['type'] ) ) {
- return new WP_Error( 'unknown_post_type', 'Unknown post type', 404 );
- }
-
- $post_type_object = get_post_type_object( $args['type'] );
- if ( ! $post_type_object || ! current_user_can( $post_type_object->cap->edit_others_posts ) ) {
- return new WP_Error( 'unauthorized', 'User cannot view authors for specified post type', 403 );
- }
- } elseif ( ! current_user_can( 'list_users' ) ) {
- return new WP_Error( 'unauthorized', 'User cannot view users for specified site', 403 );
- }
-
- $query = array(
- 'number' => $args['number'],
- 'offset' => $args['offset'],
- 'order' => $args['order'],
- 'orderby' => $args['order_by'],
- 'fields' => 'ID',
- );
-
- if ( $authors_only ) {
- $query['who'] = 'authors';
- }
-
- if ( ! empty( $args['search'] ) ) {
- $query['search'] = $args['search'];
- }
-
- if ( ! empty( $args['search_columns'] ) ) {
- // this `user_search_columns` filter is necessary because WP_User_Query does not allow `display_name` as a search column
- $this->search_columns = array_intersect( $args['search_columns'], array( 'ID', 'user_login', 'user_email', 'user_url', 'user_nicename', 'display_name' ) );
- add_filter( 'user_search_columns', array( $this, 'api_user_override_search_columns' ), 10, 3 );
- }
-
- if ( ! empty( $args['role'] ) ) {
- $query['role'] = $args['role'];
- }
-
- $user_query = new WP_User_Query( $query );
-
- remove_filter( 'user_search_columns', array( $this, 'api_user_override_search_columns' ) );
-
- $return = array();
- foreach ( array_keys( $this->response_format ) as $key ) {
- switch ( $key ) {
- case 'found' :
- $return[ $key ] = (int) $user_query->get_total();
- break;
- case 'users' :
- $users = array();
- $is_multisite = is_multisite();
- foreach ( $user_query->get_results() as $u ) {
- $the_user = $this->get_author( $u, true );
- if ( $the_user && ! is_wp_error( $the_user ) ) {
- $userdata = get_userdata( $u );
- $the_user->roles = ! is_wp_error( $userdata ) ? array_values( $userdata->roles ) : array();
- if ( $is_multisite ) {
- $the_user->is_super_admin = user_can( $the_user->ID, 'manage_network' );
- }
- $users[] = $the_user;
- }
- }
-
- $return[ $key ] = $users;
- break;
- }
- }
-
- return $return;
- }
-
- function api_user_override_search_columns( $search_columns, $search ) {
- return $this->search_columns;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-menus-v1-1-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-menus-v1-1-endpoint.php
deleted file mode 100644
index be02c6c1..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-menus-v1-1-endpoint.php
+++ /dev/null
@@ -1,824 +0,0 @@
-<?php
-abstract class WPCOM_JSON_API_Menus_Abstract_Endpoint extends WPCOM_JSON_API_Endpoint {
-
- protected function switch_to_blog_and_validate_user( $site ) {
- $site_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $site ) );
- if ( is_wp_error( $site_id ) ) {
- return $site_id;
- }
-
- if ( ! current_user_can( 'edit_theme_options' ) ) {
- return new WP_Error( 'unauthorised', 'User cannot edit theme options on this site.', 403 );
- }
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $this->load_theme_functions();
- }
-
- return $site_id;
- }
-
-
- protected function get_locations() {
- $locations = array();
- $menus = get_registered_nav_menus();
- if ( !empty( $menus ) ) {
- foreach( $menus as $name => $description ) {
- $locations[] = array( 'name' => $name, 'description' => $description );
- }
- }
-
- $locations = array_merge( $locations, WPCOM_JSON_API_Menus_Widgets::get() );
-
- // Primary (first) location should have defaultState -> default,
- // all other locations (including widgets) should have defaultState -> empty.
- for ( $i = 0; $i < count( $locations ); $i++ ) {
- $locations[ $i ]['defaultState'] = $i ? 'empty' : 'default';
- }
- return $locations;
- }
-
- protected function simplify( $data ) {
- $simplifier = new WPCOM_JSON_API_Menus_Simplifier( $data );
- return $simplifier->translate();
- }
-
- protected function complexify( $data ) {
- $complexifier = new WPCOM_JSON_API_Menus_Complexify( $data );
- return $complexifier->translate();
- }
-}
-
-abstract class WPCOM_JSON_API_Menus_Translator {
- protected $filter = '';
-
- protected $filters = array();
-
- public function __construct( $menus ) {
- $this->is_single_menu = ! is_array( $menus );
- $this->menus = is_array( $menus ) ? $menus : array( $menus );
- }
-
- public function translate() {
- $result = $this->menus;
- foreach ( $this->filters as $f ) {
- $result = call_user_func( array( $this, $f ), $result );
- if ( is_wp_error($result ) ) {
- return $result;
- }
- }
- return $this->maybe_extract( $result );
- }
-
- protected function maybe_extract( $menus ) {
- return $this->is_single_menu ? $menus[0] : $menus;
- }
-
- public function whitelist_and_rename_with( $object, $dict ) {
- $keys = array_keys( $dict );
- $return = array();
- foreach ( (array) $object as $k => $v ) {
- if ( in_array( $k, $keys ) ) {
- if ( is_array( $dict[ $k ] ) ) {
- settype( $v, $dict[ $k ]['type'] );
- $return[ $dict[ $k ]['name'] ] = $v;
- } else {
- $new_k = $dict[ $k ];
- $return[ $new_k ] = $v;
- }
- }
- }
- return $return;
- }
-}
-
-class WPCOM_JSON_API_Menus_Simplifier extends WPCOM_JSON_API_Menus_Translator {
- protected $filter = 'wpcom_menu_api_translator_simplify';
-
- protected $filters = array(
- 'whitelist_and_rename_keys',
- 'add_locations',
- 'treeify',
- 'add_widget_locations',
- );
-
- protected $menu_whitelist = array(
- 'term_id' => array( 'name' => 'id', 'type' => 'int' ),
- 'name' => array( 'name' => 'name', 'type' => 'string' ),
- 'description' => array( 'name' => 'description', 'type' => 'string' ),
- 'items' => array( 'name' => 'items', 'type' => 'array' ),
- );
-
- protected $menu_item_whitelist = array(
- 'db_id' => array( 'name' => 'id', 'type' => 'int' ),
- 'object_id' => array( 'name' => 'content_id', 'type' => 'int' ),
- 'object' => array( 'name' => 'type', 'type' => 'string' ),
- 'type' => array( 'name' => 'type_family', 'type' => 'string' ),
- 'type_label' => array( 'name' => 'type_label', 'type' => 'string' ),
- 'title' => array( 'name' => 'name', 'type' => 'string' ),
- 'menu_order' => array( 'name' => 'order', 'type' => 'int' ),
- 'menu_item_parent' => array( 'name' => 'parent', 'type' => 'int' ),
- 'url' => array( 'name' => 'url', 'type' => 'string' ),
- 'target' => array( 'name' => 'link_target', 'type' => 'string' ),
- 'attr_title' => array( 'name' => 'link_title', 'type' => 'string' ),
- 'description' => array( 'name' => 'description', 'type' => 'string' ),
- 'classes' => array( 'name' => 'classes', 'type' => 'array' ),
- 'xfn' => array( 'name' => 'xfn', 'type' => 'string' ),
- );
-
- /**************************
- * Filters methods
- **************************/
-
- public function treeify( $menus ) {
- return array_map( array( $this, 'treeify_menu' ), $menus );
- }
-
- // turn the flat item list into a tree of items
- protected function treeify_menu( $menu ) {
- $indexed_nodes = array();
- $tree = array();
-
- foreach( $menu['items'] as &$item ) {
- $indexed_nodes[ $item['id'] ] = &$item;
- }
-
- foreach( $menu['items'] as &$item ) {
- if ( $item['parent'] && isset( $indexed_nodes[ $item['parent'] ] ) ) {
- $parent_node = &$indexed_nodes[ $item['parent'] ];
- if ( !isset( $parent_node['items'] ) ) {
- $parent_node['items'] = array();
- }
- $parent_node['items'][ $item['order'] ] = &$item;
- } else {
- $tree[ $item['order'] ] = &$item;
- }
- unset( $item['order'] );
- unset( $item['parent'] );
- }
-
- $menu['items'] = $tree;
- $this->remove_item_keys( $menu );
- return $menu;
- }
-
- // recursively ensure item lists are contiguous
- protected function remove_item_keys( &$item ) {
- if ( ! isset( $item['items'] ) || ! is_array( $item['items'] ) ) {
- return;
- }
-
-
- foreach( $item['items'] as &$it ) {
- $this->remove_item_keys( $it );
- }
-
- $item['items'] = array_values( $item['items'] );
- }
-
- protected function whitelist_and_rename_keys( $menus ) {
- $transformed_menus = array();
-
- foreach ( $menus as $menu ) {
- $menu = $this->whitelist_and_rename_with( $menu, $this->menu_whitelist );
-
- if ( isset( $menu['items'] ) ) {
- foreach ( $menu['items'] as &$item ) {
- $item = $this->whitelist_and_rename_with( $item, $this->menu_item_whitelist );
- }
- }
-
- $transformed_menus[] = $menu;
- }
-
- return $transformed_menus;
- }
-
- protected function add_locations( $menus ) {
- $menus_with_locations = array();
-
- foreach( $menus as $menu ) {
- $menu['locations'] = array_keys( get_nav_menu_locations(), $menu['id'] );
- $menus_with_locations[] = $menu;
- }
-
- return $menus_with_locations;
- }
-
- protected function add_widget_locations( $menus ) {
- $nav_menu_widgets = WPCOM_JSON_API_Menus_Widgets::get();
-
- if ( ! is_array( $nav_menu_widgets ) ) {
- return $menus;
- }
-
- foreach ( $menus as &$menu ) {
- $widget_locations = array();
-
- foreach ( $nav_menu_widgets as $key => $widget ) {
- if ( is_array( $widget ) && isset( $widget['nav_menu'] ) &&
- $widget['nav_menu'] === $menu['id'] ) {
- $widget_locations[] = 'nav_menu_widget-' . $key;
- }
- }
- $menu['locations'] = array_merge( $menu['locations'], $widget_locations );
- }
-
- return $menus;
- }
-}
-
-class WPCOM_JSON_API_Menus_Complexify extends WPCOM_JSON_API_Menus_Translator {
- protected $filter = 'wpcom_menu_api_translator_complexify';
-
- protected $filters = array(
- 'untreeify',
- 'set_locations',
- 'whitelist_and_rename_keys',
- );
-
- protected $menu_whitelist = array(
- 'id' => 'term_id',
- 'name' => 'menu-name',
- 'description' => 'description',
- 'items' => 'items',
- );
-
- protected $menu_item_whitelist = array(
- 'id' => 'menu-item-db-id',
- 'content_id' => 'menu-item-object-id',
- 'type' => 'menu-item-object',
- 'type_family' => 'menu-item-type',
- 'type_label' => 'menu-item-type-label',
- 'name' => 'menu-item-title',
- 'order' => 'menu-item-position',
- 'parent' => 'menu-item-parent-id',
- 'url' => 'menu-item-url',
- 'link_target' => 'menu-item-target',
- 'link_title' => 'menu-item-attr-title',
- 'status' => 'menu-item-status',
- 'tmp_id' => 'tmp_id',
- 'tmp_parent' => 'tmp_parent',
- 'description' => 'menu-item-description',
- 'classes' => 'menu-item-classes',
- 'xfn' => 'menu-item-xfn',
- );
-
- /**************************
- * Filters methods
- **************************/
-
- public function untreeify( $menus ) {
- return array_map( array( $this, 'untreeify_menu' ), $menus );
- }
-
- // convert the tree of menu items to a flat list suitable for
- // the nav_menu APIs
- protected function untreeify_menu( $menu ) {
- if ( empty( $menu['items'] ) ) {
- return $menu;
- }
-
- $items_list = array();
- $counter = 1;
- foreach ( $menu['items'] as &$item ) {
- $item[ 'parent' ] = 0;
- }
- $this->untreeify_items( $menu['items'], $items_list, $counter );
- $menu['items'] = $items_list;
-
- return $menu;
- }
-
- /**
- * Recurse the items tree adding each item to a flat list and restoring
- * `order` and `parent` fields.
- *
- * @param array $items item tree
- * @param array &$items_list output flat list of items
- * @param int &$counter for creating temporary IDs
- */
- protected function untreeify_items( $items, &$items_list, &$counter ) {
- foreach( $items as $index => $item ) {
- $item['order'] = $index + 1;
-
- if( ! isset( $item['id'] ) ) {
- $this->set_tmp_id( $item, $counter++ );
- }
-
- if ( isset( $item['items'] ) && is_array( $item['items'] ) ) {
- foreach ( $item['items'] as &$i ) {
- $i['parent'] = $item['id'];
- }
- $this->untreeify_items( $item[ 'items' ], $items_list, $counter );
- unset( $item['items'] );
- }
-
- $items_list[] = $item;
- }
- }
-
- /**
- * Populate `tmp_id` field for a new item, and `tmp_parent` field
- * for all its children, to maintain the hierarchy.
- * These fields will be used when creating
- * new items with wp_update_nav_menu_item().
- */
- private function set_tmp_id( &$item, $tmp_id ) {
- $item['tmp_id'] = $tmp_id;
- if ( ! isset( $item['items'] ) || ! is_array( $item['items'] ) ) {
- return;
- }
- foreach ( $item['items'] as &$child ) {
- $child['tmp_parent'] = $tmp_id;
- }
- }
-
- protected function whitelist_and_rename_keys( $menus ) {
- $transformed_menus = array();
- foreach ( $menus as $menu ) {
- $menu = $this->whitelist_and_rename_with( $menu, $this->menu_whitelist );
- if ( isset( $menu['items'] ) ) {
- $menu['items'] = array_map( array( $this, 'whitelist_and_rename_item_keys' ), $menu['items'] );
- }
- $transformed_menus[] = $menu;
- }
-
- return $transformed_menus;
- }
-
- protected function whitelist_and_rename_item_keys( $item ) {
- $item = $this->implode_array_fields( $item );
- $item = $this->whitelist_and_rename_with( $item, $this->menu_item_whitelist );
- return $item;
- }
-
- // all item fields are set as strings
- protected function implode_array_fields( $menu_item ) {
- return array_map( array( $this, 'implode_array_field' ), $menu_item );
- }
-
- protected function implode_array_field( $field ) {
- if ( is_array( $field ) ) {
- return implode( ' ', $field );
- }
- return $field;
- }
-
- protected function set_locations( $menus ) {
- foreach ( $menus as $menu ) {
- if ( isset( $menu['locations'] ) ) {
- if ( true !== $this->locations_are_valid( $menu['locations'] ) ) {
- return $this->locations_are_valid( $menu['locations'] );
- }
- }
- }
-
- return array_map( array( $this, 'set_location' ), $menus );
- }
-
- protected function set_location( $menu ) {
- $this->set_menu_at_locations( $menu['locations'], $menu['id'] );
- return $menu;
- }
-
- protected function set_menu_at_locations( $locations, $menu_id ) {
- $location_map = get_nav_menu_locations();
- $this->remove_menu_from_all_locations( $menu_id, $location_map );
-
- if ( is_array( $locations ) ) {
- foreach ( $locations as $location ) {
- $location_map[ $location ] = $menu_id;
- }
- }
-
- set_theme_mod( 'nav_menu_locations', $location_map );
-
- $this->set_widget_menu_at_locations( $locations, $menu_id );
- }
-
- protected function remove_menu_from_all_locations( $menu_id, &$location_map ) {
- foreach ( get_nav_menu_locations() as $existing_location => $existing_menu_id) {
- if ( $existing_menu_id == $menu_id ) {
- unset( $location_map[$existing_location] );
- }
- }
- }
-
- protected function set_widget_menu_at_locations( $locations, $menu_id ) {
- $nav_menu_widgets = get_option( 'widget_nav_menu' );
-
- if ( ! is_array( $nav_menu_widgets ) ) {
- return;
- }
-
- // Remove menus from all custom menu widget locations
- foreach ( $nav_menu_widgets as &$widget ) {
- if ( is_array( $widget ) && isset( $widget['nav_menu'] ) && $widget['nav_menu'] == $menu_id ) {
- $widget['nav_menu'] = 0;
- }
- }
-
- if ( is_array( $locations ) ) {
- foreach ( $locations as $location ) {
- if ( preg_match( '/^nav_menu_widget-(\d+)/', $location, $matches ) ) {
- if ( isset( $matches[1] ) ) {
- $nav_menu_widgets[$matches[1]]['nav_menu'] = $menu_id;
- }
- }
- }
- }
-
- update_option( 'widget_nav_menu', $nav_menu_widgets );
- }
-
- protected function locations_are_valid( $locations ) {
- if ( is_int( $locations ) ) {
- if ( $locations != 0) {
- return new WP_Error( 'locations-int', 'Locations int must be 0.', 400 );
- } else {
- return true;
- }
- } elseif ( is_array( $locations ) ) {
- foreach ( $locations as $location_name ) {
- if ( ! $this->location_name_exists( $location_name ) ) {
- return new WP_Error( 'locations-array',
- sprintf( "Location '%s' does not exist.", $location_name ), 404 );
- }
- }
- return true;
- }
- return new WP_Error( 'locations', 'Locations must be array or integer.', 400 );
- }
-
- protected function location_name_exists( $location_name ) {
- $widget_location_names = wp_list_pluck( WPCOM_JSON_API_Menus_Widgets::get(), 'name' );
-
- $existing_locations = get_nav_menu_locations();
-
- if ( ! is_array( get_registered_nav_menus() ) ) {
- return false;
- }
-
- return array_key_exists( $location_name, get_registered_nav_menus() ) ||
- array_key_exists( $location_name, $existing_locations ) ||
- in_array( $location_name, $widget_location_names );
- }
-
-}
-
-new WPCOM_JSON_API_Menus_New_Menu_Endpoint( array (
- 'method' => 'POST',
- 'description' => 'Create a new navigation menu.',
- 'group' => 'menus',
- 'stat' => 'menus:new-menu',
- 'path' => '/sites/%s/menus/new',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'request_format' => array(
- 'name' => '(string) Name of menu',
- ),
- 'response_format' => array(
- 'id' => '(int) Newly created menu ID',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/menus/new',
- 'example_request_data' => array(
- 'headers' => array( 'authorization' => 'Bearer YOUR_API_TOKEN' ),
- 'body' => array(
- 'name' => 'Menu 1'
- )
- ),
-) );
-
-class WPCOM_JSON_API_Menus_New_Menu_Endpoint extends WPCOM_JSON_API_Menus_Abstract_Endpoint {
- function callback( $path = '', $site = 0 ) {
- $site_id = $this->switch_to_blog_and_validate_user( $this->api->get_blog_id( $site ) );
-
- if ( is_wp_error( $site_id ) ) {
- return $site_id;
- }
-
- $data = $this->input();
-
- $id = wp_create_nav_menu( $data['name'] );
-
- if ( is_wp_error( $id ) ) {
- return $id;
- }
-
- return array( 'id' => $id );
- }
-}
-
-new WPCOM_JSON_API_Menus_Update_Menu_Endpoint( array (
- 'method' => 'POST',
- 'description' => 'Update a navigation menu.',
- 'group' => 'menus',
- 'stat' => 'menus:update-menu',
- 'path' => '/sites/%s/menus/%d',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$menu_id' => '(int) Menu ID',
- ),
- 'request_format' => array(
- 'name' => '(string) Name of menu',
- 'items' => '(array) A list of menu item objects.
- <br/><br/>
- Item objects contain fields relating to that item, e.g. id, type, content_id,
- but they can also contain other items objects - this nesting represents parents
- and child items in the item tree.'
- ),
- 'response_format' => array(
- 'menu' => '(object) Updated menu object',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/menus/510604099',
- 'example_request_data' => array(
- 'headers' => array( 'authorization' => 'Bearer YOUR_API_TOKEN' ),
- 'body' => array(
- 'name' => 'Test Menu'
- ),
- ),
-) );
-
-class WPCOM_JSON_API_Menus_Update_Menu_Endpoint extends WPCOM_JSON_API_Menus_Abstract_Endpoint {
- function callback( $path = '', $site = 0, $menu_id = 0 ) {
- $site_id = $this->switch_to_blog_and_validate_user( $this->api->get_blog_id( $site ) );
-
- if ( is_wp_error( $site_id ) ) {
- return $site_id;
- }
-
- if ( $menu_id <= 0 ) {
- return new WP_Error( 'menu-id', 'Menu ID must be greater than 0.', 400 );
- }
-
- $data = $this->input( true, false );
- $data['id'] = $menu_id;
- $data = $this->complexify( array( $data ) );
- if ( is_wp_error( $data ) ) {
- return $data;
- }
- $data = $data[0];
-
- // Avoid special-case handling of an unset 'items' field in empty menus
- $data['items'] = isset( $data['items'] ) ? $data['items'] : array();
-
- $data = $this->create_new_items( $data, $menu_id );
-
- $result = wp_update_nav_menu_object( $menu_id, array( 'menu-name' => $data['menu-name'] ) );
-
- if ( is_wp_error( $result ) ) {
- return $result;
- }
-
- $delete_status = $this->delete_items_not_present( $menu_id, $data['items'] );
- if( is_wp_error( $delete_status ) ) {
- return $delete_status;
- }
-
- foreach ( $data['items'] as $item ) {
- $item_id = isset( $item['menu-item-db-id'] ) ? $item['menu-item-db-id'] : 0;
- $result = wp_update_nav_menu_item( $menu_id, $item_id, $item );
- if ( is_wp_error( $result ) ) {
- return $result;
- }
- }
-
- $items = wp_get_nav_menu_items( $menu_id, array( 'update_post_term_cache' => false ) );
-
- if ( is_wp_error( $items ) ) {
- return $items;
- }
-
- $menu = wp_get_nav_menu_object( $menu_id );
- $menu->items = $items;
-
- return array( 'menu' => $this->simplify( $menu ) );
- }
-
- /**
- * New items can have a 'tmp_id', allowing them to
- * be used as parent items before they have been created.
- *
- * This function will create items that have a 'tmp_id' set, and
- * update any items with a 'tmp_parent' to use the
- * newly created item as a parent.
- */
- function create_new_items( $data, $menu_id ) {
- $tmp_to_actual_ids = array();
- foreach ( $data['items'] as &$item ) {
- if ( isset( $item['tmp_id'] ) ) {
- $actual_id = wp_update_nav_menu_item( $menu_id, 0, $item );
- $tmp_to_actual_ids[ $item['tmp_id'] ] = $actual_id;
- unset( $item['tmp_id'] );
- $item['menu-item-db-id'] = $actual_id;
- }
- }
-
- foreach ( $data['items'] as &$item ) {
- if ( isset( $item['tmp_parent'] ) ) {
- $item['menu-item-parent-id'] = $tmp_to_actual_ids[ $item['tmp_parent'] ];
- unset( $item['tmp_parent'] );
- }
- }
-
- return $data;
- }
-
- /**
- * remove any existing menu items not present in the supplied array.
- * returns wp_error if an item cannot be deleted.
- */
- function delete_items_not_present( $menu_id, $menu_items ) {
-
- $existing_items = wp_get_nav_menu_items( $menu_id, array( 'update_post_term_cache' => false ) );
- if ( ! is_array( $existing_items ) ) {
- return true;
- }
-
- $existing_ids = wp_list_pluck( $existing_items, 'db_id' );
- $ids_to_keep = wp_list_pluck( $menu_items, 'menu-item-db-id' );
- $ids_to_remove = array_diff( $existing_ids, $ids_to_keep );
-
- foreach ( $ids_to_remove as $id ) {
- if ( false === wp_delete_post( $id, true ) ) {
- return new WP_Error( 'menu-item',
- sprintf( 'Failed to delete menu item with id: %d.', $id ), 400 );
- }
- }
-
- return true;
- }
-}
-
-new WPCOM_JSON_API_Menus_List_Menus_Endpoint( array (
- 'method'=> 'GET',
- 'description' => 'Get a list of all navigation menus.',
- 'group' => 'menus',
- 'stat' => 'menus:list-menu',
- 'path' => '/sites/%s/menus',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'response_format' => array(
- 'menus' => '(array) A list of menu objects.<br/><br/>
- A menu object contains a name, items, locations, etc.
- Check the example response for the full structure.
- <br/><br/>
- Item objects contain fields relating to that item, e.g. id, type, content_id,
- but they can also contain other items objects - this nesting represents parents
- and child items in the item tree.',
- 'locations' => '(array) Locations where menus can be placed. List of objects, one per location.'
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/menus',
- 'example_request_data' => array(
- 'headers' => array( 'authorization' => 'Bearer YOUR_API_TOKEN' ),
- ),
-) );
-
-class WPCOM_JSON_API_Menus_List_Menus_Endpoint extends WPCOM_JSON_API_Menus_Abstract_Endpoint {
- function callback( $path = '', $site = 0 ) {
- $site_id = $this->switch_to_blog_and_validate_user( $this->api->get_blog_id( $site ) );
-
- if ( is_wp_error( $site_id ) ) {
- return $site_id;
- }
-
- $menus = wp_get_nav_menus( array( 'orderby' => 'term_id' ) );
-
- if ( is_wp_error( $menus ) ) {
- return $menus;
- }
-
- foreach ( $menus as $m ) {
- $items = wp_get_nav_menu_items( $m->term_id, array( 'update_post_term_cache' => false ) );
- if ( is_wp_error( $items ) ) {
- return $items;
- }
- $m->items = $items;
- }
-
- $menus = $this->simplify( $menus );
-
- if ( is_wp_error( $this->get_locations() ) ) {
- return $this->get_locations();
- }
-
- return array( 'menus' => $menus, 'locations' => $this->get_locations() );
- }
-}
-
-new WPCOM_JSON_API_Menus_Get_Menu_Endpoint( array (
- 'method'=> 'GET',
- 'description' => 'Get a single navigation menu.',
- 'group' => 'menus',
- 'stat' => 'menus:get-menu',
- 'path' => '/sites/%s/menus/%d',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$menu_id' => '(int) Menu ID',
- ),
- 'response_format' => array(
- 'menu' => '(object) A menu object.<br/><br/>
- A menu object contains a name, items, locations, etc.
- Check the example response for the full structure.
- <br/><br/>
- Item objects contain fields relating to that item, e.g. id, type, content_id,
- but they can also contain other items objects - this nesting represents parents
- and child items in the item tree.'
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/menus/510604099',
- 'example_request_data' => array(
- 'headers' => array( 'authorization' => 'Bearer YOUR_API_TOKEN' ),
- ),
-) );
-
-class WPCOM_JSON_API_Menus_Get_Menu_Endpoint extends WPCOM_JSON_API_Menus_Abstract_Endpoint {
- function callback( $path = '', $site = 0, $menu_id = 0 ) {
- $site_id = $this->switch_to_blog_and_validate_user( $this->api->get_blog_id( $site ) );
-
- if ( is_wp_error( $site_id ) ) {
- return $site_id;
- }
-
- if ( $menu_id <= 0 ) {
- return new WP_Error( 'menu-id', 'Menu ID must be greater than 0.', 400 );
- }
-
- $menu = get_term( $menu_id, 'nav_menu' );
-
- if ( is_wp_error( $menu ) ) {
- return $menu;
- }
-
- $items = wp_get_nav_menu_items( $menu_id, array( 'update_post_term_cache' => false ) );
-
- if ( is_wp_error( $items ) ) {
- return $items;
- }
-
- $menu->items = $items;
-
- return array( 'menu' => $this->simplify( $menu ) );
- }
-}
-
-new WPCOM_JSON_API_Menus_Delete_Menu_Endpoint( array (
- 'method' => 'POST',
- 'description' => 'Delete a navigation menu',
- 'group' => 'menus',
- 'stat' => 'menus:delete-menu',
- 'path' => '/sites/%s/menus/%d/delete',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$menu_id' => '(int) Menu ID',
- ),
- 'response_format' => array(
- 'deleted' => '(bool) Has the menu been deleted?',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/menus/$menu_id/delete',
- 'example_request_data' => array(
- 'headers' => array( 'authorization' => 'Bearer YOUR_API_TOKEN' ),
- ),
-) );
-
-class WPCOM_JSON_API_Menus_Delete_Menu_Endpoint extends WPCOM_JSON_API_Menus_Abstract_Endpoint {
- function callback( $path = '', $site = 0, $menu_id = 0 ) {
- $site_id = $this->switch_to_blog_and_validate_user( $this->api->get_blog_id( $site ) );
-
- if ( is_wp_error( $site_id ) ) {
- return $site_id;
- }
-
- if ( $menu_id <= 0 ) {
- return new WP_Error( 'menu-id', 'Menu ID must be greater than 0.', 400 );
- }
-
- $result = wp_delete_nav_menu( $menu_id );
- if ( ! is_wp_error( $result ) ) {
- $result = array( 'deleted' => $result );
- }
-
- return $result;
- }
-}
-
-class WPCOM_JSON_API_Menus_Widgets {
- static function get() {
- $locations = array();
- $nav_menu_widgets = get_option( 'widget_nav_menu' );
-
- if ( ! is_array( $nav_menu_widgets ) ) {
- return $locations;
- }
-
- foreach ( $nav_menu_widgets as $k => $v ) {
- if ( is_array( $v ) && isset( $v['title'] ) ) {
- $locations[$k] = array( 'name' => 'nav_menu_widget-' . $k, 'description' => $v['title'] );
- }
- }
-
- return $locations;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-post-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-post-endpoint.php
deleted file mode 100644
index 713fa68a..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-post-endpoint.php
+++ /dev/null
@@ -1,658 +0,0 @@
-<?php
-
-abstract class WPCOM_JSON_API_Post_Endpoint extends WPCOM_JSON_API_Endpoint {
- public $post_object_format = array(
- // explicitly document and cast all output
- 'ID' => '(int) The post ID.',
- 'site_ID' => '(int) The site ID.',
- 'author' => '(object>author) The author of the post.',
- 'date' => "(ISO 8601 datetime) The post's creation time.",
- 'modified' => "(ISO 8601 datetime) The post's most recent update time.",
- 'title' => '(HTML) <code>context</code> dependent.',
- 'URL' => '(URL) The full permalink URL to the post.',
- 'short_URL' => '(URL) The wp.me short URL.',
- 'content' => '(HTML) <code>context</code> dependent.',
- 'excerpt' => '(HTML) <code>context</code> dependent.',
- 'slug' => '(string) The name (slug) for the post, used in URLs.',
- 'guid' => '(string) The GUID for the post.',
- 'status' => array(
- 'publish' => 'The post is published.',
- 'draft' => 'The post is saved as a draft.',
- 'pending' => 'The post is pending editorial approval.',
- 'private' => 'The post is published privately',
- 'future' => 'The post is scheduled for future publishing.',
- 'trash' => 'The post is in the trash.',
- 'auto-draft' => 'The post is a placeholder for a new post.',
- ),
- 'sticky' => '(bool) Is the post sticky?',
- 'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
- 'parent' => "(object>post_reference|false) A reference to the post's parent, if it has one.",
- 'type' => "(string) The post's post_type. Post types besides post, page and revision need to be whitelisted using the <code>rest_api_allowed_post_types</code> filter.",
- 'comments_open' => '(bool) Is the post open for comments?',
- 'pings_open' => '(bool) Is the post open for pingbacks, trackbacks?',
- 'likes_enabled' => "(bool) Is the post open to likes?",
- 'sharing_enabled' => "(bool) Should sharing buttons show on this post?",
- 'comment_count' => '(int) The number of comments for this post.',
- 'like_count' => '(int) The number of likes for this post.',
- 'i_like' => '(bool) Does the current user like this post?',
- 'is_reblogged' => '(bool) Did the current user reblog this post?',
- 'is_following' => '(bool) Is the current user following this blog?',
- 'global_ID' => '(string) A unique WordPress.com-wide representation of a post.',
- 'featured_image' => '(URL) The URL to the featured image for this post if it has one.',
- 'post_thumbnail' => '(object>attachment) The attachment object for the featured image if it has one.',
- 'format' => array(), // see constructor
- 'geo' => '(object>geo|false)',
- 'menu_order' => '(int) (Pages Only) The order pages should appear in.',
- 'publicize_URLs' => '(array:URL) Array of Twitter and Facebook URLs published by this post.',
- 'tags' => '(object:tag) Hash of tags (keyed by tag name) applied to the post.',
- 'categories' => '(object:category) Hash of categories (keyed by category name) applied to the post.',
- 'attachments' => '(object:attachment) Hash of post attachments (keyed by attachment ID).',
- 'metadata' => '(array) Array of post metadata keys and values. All unprotected meta keys are available by default for read requests. Both unprotected and protected meta keys are available for authenticated requests with access. Protected meta keys can be made available with the <code>rest_api_allowed_public_metadata</code> filter.',
- 'meta' => '(object) API result meta data',
- 'current_user_can' => '(object) List of permissions. Note, deprecated in favor of `capabilities`',
- 'capabilities' => '(object) List of post-specific permissions for the user; publish_post, edit_post, delete_post',
- );
-
- // public $response_format =& $this->post_object_format;
-
- function __construct( $args ) {
- if ( is_array( $this->post_object_format ) && isset( $this->post_object_format['format'] ) ) {
- $this->post_object_format['format'] = get_post_format_strings();
- }
- if ( !$this->response_format ) {
- $this->response_format =& $this->post_object_format;
- }
- parent::__construct( $args );
- }
-
- function the_password_form() {
- return __( 'This post is password protected.', 'jetpack' );
- }
-
- /**
- * Get a post by a specified field and value
- *
- * @param string $field
- * @param string $field_value
- * @param string $context Post use context (e.g. 'display')
- * @return array Post
- **/
- function get_post_by( $field, $field_value, $context = 'display' ) {
- global $blog_id;
-
- /** This filter is documented in class.json-api-endpoints.php */
- $is_jetpack = true === apply_filters( 'is_jetpack_site', false, $blog_id );
-
- if ( defined( 'GEO_LOCATION__CLASS' ) && class_exists( GEO_LOCATION__CLASS ) ) {
- $geo = call_user_func( array( GEO_LOCATION__CLASS, 'init' ) );
- } else {
- $geo = false;
- }
-
- if ( 'display' === $context ) {
- $args = $this->query_args();
- if ( isset( $args['content_width'] ) && $args['content_width'] ) {
- $GLOBALS['content_width'] = (int) $args['content_width'];
- }
- }
-
- if ( strpos( $_SERVER['HTTP_USER_AGENT'], 'wp-windows8' ) ) {
- remove_shortcode( 'gallery', 'gallery_shortcode' );
- add_shortcode( 'gallery', array( &$this, 'win8_gallery_shortcode' ) );
- }
-
- switch ( $field ) {
- case 'name' :
- $post_id = $this->get_post_id_by_name( $field_value );
- if ( is_wp_error( $post_id ) ) {
- return $post_id;
- }
- break;
- default :
- $post_id = (int) $field_value;
- break;
- }
-
- $post = get_post( $post_id, OBJECT, $context );
-
- if ( !$post || is_wp_error( $post ) ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
- }
-
- if ( ! $this->is_post_type_allowed( $post->post_type ) && ( ! function_exists( 'is_post_freshly_pressed' ) || ! is_post_freshly_pressed( $post->ID ) ) ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
- }
-
- // Permissions
- $capabilities = $this->get_current_user_capabilities( $post );
-
- switch ( $context ) {
- case 'edit' :
- if ( ! $capabilities['edit_post'] ) {
- return new WP_Error( 'unauthorized', 'User cannot edit post', 403 );
- }
- break;
- case 'display' :
- break;
- default :
- return new WP_Error( 'invalid_context', 'Invalid API CONTEXT', 400 );
- }
-
- $can_view = $this->user_can_view_post( $post->ID );
- if ( !$can_view || is_wp_error( $can_view ) ) {
- return $can_view;
- }
-
- $GLOBALS['post'] = $post;
-
- if ( 'display' === $context ) {
- setup_postdata( $post );
- }
-
- $response = array();
-
- $fields = null;
- if ( 'display' === $context && ! empty( $this->api->query['fields'] ) ) {
- $fields = array_fill_keys( array_map( 'trim', explode( ',', $this->api->query['fields'] ) ), true );
- }
-
- foreach ( array_keys( $this->post_object_format ) as $key ) {
- if ( $fields !== null && ! isset( $fields[$key] ) ) {
- continue;
- }
- switch ( $key ) {
- case 'ID' :
- // explicitly cast all output
- $response[$key] = (int) $post->ID;
- break;
- case 'site_ID' :
- $response[$key] = (int) $this->api->get_blog_id_for_output();
- break;
- case 'author' :
- $response[$key] = (object) $this->get_author( $post, 'edit' === $context && $capabilities['edit_post'] );
- break;
- case 'date' :
- $response[$key] = (string) $this->format_date( $post->post_date_gmt, $post->post_date );
- break;
- case 'modified' :
- $response[$key] = (string) $this->format_date( $post->post_modified_gmt, $post->post_modified );
- break;
- case 'title' :
- if ( 'display' === $context ) {
- $response[$key] = (string) get_the_title( $post->ID );
- } else {
- $response[$key] = (string) htmlspecialchars_decode( $post->post_title, ENT_QUOTES );
- }
- break;
- case 'URL' :
- if ( 'revision' === $post->post_type ) {
- $response[$key] = (string) esc_url_raw( get_permalink( $post->post_parent ) );
- } else {
- $response[$key] = (string) esc_url_raw( get_permalink( $post->ID ) );
- }
- break;
- case 'short_URL' :
- $response[$key] = (string) esc_url_raw( wp_get_shortlink( $post->ID ) );
- break;
- case 'content' :
- if ( 'display' === $context ) {
- add_filter( 'the_password_form', array( $this, 'the_password_form' ) );
- $response[$key] = (string) $this->get_the_post_content_for_display();
- remove_filter( 'the_password_form', array( $this, 'the_password_form' ) );
- } else {
- $response[$key] = (string) $post->post_content;
- }
- break;
- case 'excerpt' :
- if ( 'display' === $context ) {
- add_filter( 'the_password_form', array( $this, 'the_password_form' ) );
- ob_start();
- the_excerpt();
- $response[$key] = (string) ob_get_clean();
- remove_filter( 'the_password_form', array( $this, 'the_password_form' ) );
- } else {
- $response[$key] = htmlspecialchars_decode( (string) $post->post_excerpt, ENT_QUOTES );
- }
- break;
- case 'status' :
- $response[$key] = (string) get_post_status( $post->ID );
- break;
- case 'sticky' :
- $response[$key] = (bool) is_sticky( $post->ID );
- break;
- case 'slug' :
- $response[$key] = (string) $post->post_name;
- break;
- case 'guid' :
- $response[$key] = (string) $post->guid;
- break;
- case 'password' :
- $response[$key] = (string) $post->post_password;
- if ( 'edit' === $context ) {
- $response[$key] = htmlspecialchars_decode( (string) $response[$key], ENT_QUOTES );
- }
- break;
- case 'parent' : // (object|false)
- if ( $post->post_parent ) {
- $parent = get_post( $post->post_parent );
- if ( 'display' === $context ) {
- $parent_title = (string) get_the_title( $parent->ID );
- } else {
- $parent_title = (string) htmlspecialchars_decode( $post->post_title, ENT_QUOTES );
- }
- $response[$key] = (object) array(
- 'ID' => (int) $parent->ID,
- 'type' => (string) $parent->post_type,
- 'link' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $parent->ID ),
- 'title' => $parent_title,
- );
- } else {
- $response[$key] = false;
- }
- break;
- case 'type' :
- $response[$key] = (string) $post->post_type;
- break;
- case 'comments_open' :
- $response[$key] = (bool) comments_open( $post->ID );
- break;
- case 'pings_open' :
- $response[$key] = (bool) pings_open( $post->ID );
- break;
- case 'likes_enabled' :
- /** This filter is documented in modules/likes.php */
- $sitewide_likes_enabled = (bool) apply_filters( 'wpl_is_enabled_sitewide', ! get_option( 'disabled_likes' ) );
- $post_likes_switched = get_post_meta( $post->ID, 'switch_like_status', true );
- $post_likes_enabled = $post_likes_switched || ( $sitewide_likes_enabled && $post_likes_switched !== '0' );
- $response[$key] = (bool) $post_likes_enabled;
- break;
- case 'sharing_enabled' :
- $show = true;
- /** This filter is documented in modules/sharedaddy/sharing-service.php */
- $show = apply_filters( 'sharing_show', $show, $post );
-
- $switched_status = get_post_meta( $post->ID, 'sharing_disabled', false );
-
- if ( !empty( $switched_status ) )
- $show = false;
- $response[$key] = (bool) $show;
- break;
- case 'comment_count' :
- $response[$key] = (int) $post->comment_count;
- break;
- case 'like_count' :
- $response[$key] = (int) $this->api->post_like_count( $blog_id, $post->ID );
- break;
- case 'i_like' :
- $response[$key] = (bool) $this->api->is_liked( $blog_id, $post->ID );
- break;
- case 'is_reblogged':
- $response[$key] = (bool) $this->api->is_reblogged( $blog_id, $post->ID );
- break;
- case 'is_following':
- $response[$key] = (bool) $this->api->is_following( $blog_id );
- break;
- case 'global_ID':
- $response[$key] = (string) $this->api->add_global_ID( $blog_id, $post->ID );
- break;
- case 'featured_image' :
- if ( $is_jetpack && ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ) {
- $response[ $key ] = get_post_meta( $post->ID, '_jetpack_featured_image', true );
- } else {
- $image_attributes = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'full' );
- if ( is_array( $image_attributes ) && isset( $image_attributes[0] ) ) {
- $response[ $key ] = (string) $image_attributes[0];
- } else {
- $response[ $key ] = '';
- }
- }
- break;
- case 'post_thumbnail' :
- $response[$key] = null;
-
- $thumb_id = get_post_thumbnail_id( $post->ID );
- if ( ! empty( $thumb_id ) ) {
- $attachment = get_post( $thumb_id );
- if ( ! empty( $attachment ) )
- $featured_image_object = $this->get_attachment( $attachment );
-
- if ( ! empty( $featured_image_object ) ) {
- $response[$key] = (object) $featured_image_object;
- }
- }
- break;
- case 'format' :
- $response[$key] = (string) get_post_format( $post->ID );
- if ( !$response[$key] ) {
- $response[$key] = 'standard';
- }
- break;
- case 'geo' : // (object|false)
- if ( !$geo ) {
- $response[$key] = false;
- } else {
- $geo_data = $geo->get_geo( 'post', $post->ID );
- $response[$key] = false;
- if ( $geo_data ) {
- $geo_data = array_intersect_key( $geo_data, array( 'latitude' => true, 'longitude' => true, 'address' => true, 'public' => true ) );
- if ( $geo_data ) {
- $response[$key] = (object) array(
- 'latitude' => isset( $geo_data['latitude'] ) ? (float) $geo_data['latitude'] : 0,
- 'longitude' => isset( $geo_data['longitude'] ) ? (float) $geo_data['longitude'] : 0,
- 'address' => isset( $geo_data['address'] ) ? (string) $geo_data['address'] : '',
- );
- } else {
- $response[$key] = false;
- }
- // Private
- if ( !isset( $geo_data['public'] ) || !$geo_data['public'] ) {
- if ( 'edit' !== $context || ! $capabilities['edit_post'] ) {
- // user can't access
- $response[$key] = false;
- }
- }
- }
- }
- break;
- case 'menu_order':
- $response[$key] = (int) $post->menu_order;
- break;
- case 'publicize_URLs' :
- $publicize_URLs = array();
- $publicize = get_post_meta( $post->ID, 'publicize_results', true );
- if ( $publicize ) {
- foreach ( $publicize as $service => $data ) {
- switch ( $service ) {
- case 'twitter' :
- foreach ( $data as $datum ) {
- $publicize_URLs[] = esc_url_raw( "https://twitter.com/{$datum['user_id']}/status/{$datum['post_id']}" );
- }
- break;
- case 'fb' :
- foreach ( $data as $datum ) {
- $publicize_URLs[] = esc_url_raw( "https://www.facebook.com/permalink.php?story_fbid={$datum['post_id']}&id={$datum['user_id']}" );
- }
- break;
- }
- }
- }
- $response[$key] = (array) $publicize_URLs;
- break;
- case 'tags' :
- $response[$key] = array();
- $terms = wp_get_post_tags( $post->ID );
- foreach ( $terms as $term ) {
- if ( !empty( $term->name ) ) {
- $response[$key][$term->name] = $this->format_taxonomy( $term, 'post_tag', 'display' );
- }
- }
- $response[$key] = (object) $response[$key];
- break;
- case 'categories':
- $response[$key] = array();
- $terms = wp_get_object_terms( $post->ID, 'category', array( 'fields' => 'all' ) );
- foreach ( $terms as $term ) {
- if ( !empty( $term->name ) ) {
- $response[$key][$term->name] = $this->format_taxonomy( $term, 'category', 'display' );
- }
- }
- $response[$key] = (object) $response[$key];
- break;
- case 'attachments':
- $response[$key] = array();
- $_attachments = get_posts( array( 'post_parent' => $post->ID, 'post_status' => 'inherit', 'post_type' => 'attachment', 'posts_per_page' => 100 ) );
- foreach ( $_attachments as $attachment ) {
- $response[$key][$attachment->ID] = $this->get_attachment( $attachment );
- }
- $response[$key] = (object) $response[$key];
- break;
- case 'metadata' : // (array|false)
- $metadata = array();
- foreach ( (array) has_meta( $post_id ) as $meta ) {
- // Don't expose protected fields.
- $show = false;
- if ( WPCOM_JSON_API_Metadata::is_public( $meta['meta_key'] ) )
- $show = true;
- if ( current_user_can( 'edit_post_meta', $post_id , $meta['meta_key'] ) )
- $show = true;
-
- // Only business plan subscribers can view custom meta description.
- if ( Jetpack_SEO_Posts::DESCRIPTION_META_KEY === $meta['meta_key'] && ! Jetpack_SEO_Utils::is_enabled_jetpack_seo() ) {
- $show = false;
- }
-
- if ( !$show )
- continue;
-
- $metadata[] = array(
- 'id' => $meta['meta_id'],
- 'key' => $meta['meta_key'],
- 'value' => maybe_unserialize( $meta['meta_value'] ),
- );
- }
-
- if ( ! empty( $metadata ) ) {
- $response[$key] = $metadata;
- } else {
- $response[$key] = false;
- }
- break;
- case 'meta' :
- $response[$key] = (object) array(
- 'links' => (object) array(
- 'self' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $post->ID ),
- 'help' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'help' ),
- 'site' => (string) $this->links->get_site_link( $this->api->get_blog_id_for_output() ),
- 'replies' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'replies/' ),
- 'likes' => (string) $this->links->get_post_link( $this->api->get_blog_id_for_output(), $post->ID, 'likes/' ),
- ),
- );
- break;
- case 'current_user_can' :
- $response[$key] = $capabilities;
- break;
- case 'capabilities' :
- $response[$key] = $capabilities;
- break;
-
- }
- }
-
- // WPCOM_JSON_API_Post_Endpoint::find_featured_worthy_media( $post );
- // $response['featured_media'] = self::find_featured_media( $response );
-
- unset( $GLOBALS['post'] );
- return $response;
- }
-
- // No Blog ID parameter. No Post ID parameter. Depends on globals.
- // Expects setup_postdata() to already have been run
- function get_the_post_content_for_display() {
- global $pages, $page;
-
- $old_pages = $pages;
- $old_page = $page;
-
- $content = join( "\n\n", $pages );
- $content = preg_replace( '/<!--more(.*?)?-->/', '', $content );
- $pages = array( $content );
- $page = 1;
-
- ob_start();
- the_content();
- $return = ob_get_clean();
-
- $pages = $old_pages;
- $page = $old_page;
-
- return $return;
- }
-
- function get_blog_post( $blog_id, $post_id, $context = 'display' ) {
- $blog_id = $this->api->get_blog_id( $blog_id );
- if ( !$blog_id || is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
- switch_to_blog( $blog_id );
- $post = $this->get_post_by( 'ID', $post_id, $context );
- restore_current_blog();
- return $post;
- }
-
- /**
- * Supporting featured media in post endpoints. Currently on for wpcom blogs
- * since it's calling WPCOM_JSON_API_Read_Endpoint methods which presently
- * rely on wpcom specific functionality.
- *
- * @param WP_Post $post
- * @return object list of featured media
- */
- public static function find_featured_media( &$post ) {
-
- if ( class_exists( 'WPCOM_JSON_API_Read_Endpoint' ) ) {
- return WPCOM_JSON_API_Read_Endpoint::find_featured_worthy_media( (array) $post );
- } else {
- return (object) array();
- }
-
- }
-
-
-
- function win8_gallery_shortcode( $attr ) {
- global $post;
-
- static $instance = 0;
- $instance++;
-
- $output = '';
-
- // We're trusting author input, so let's at least make sure it looks like a valid orderby statement
- if ( isset( $attr['orderby'] ) ) {
- $attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] );
- if ( !$attr['orderby'] )
- unset( $attr['orderby'] );
- }
-
- extract( shortcode_atts( array(
- 'order' => 'ASC',
- 'orderby' => 'menu_order ID',
- 'id' => $post->ID,
- 'include' => '',
- 'exclude' => '',
- 'slideshow' => false
- ), $attr, 'gallery' ) );
-
- // Custom image size and always use it
- add_image_size( 'win8app-column', 480 );
- $size = 'win8app-column';
-
- $id = intval( $id );
- if ( 'RAND' === $order )
- $orderby = 'none';
-
- if ( !empty( $include ) ) {
- $include = preg_replace( '/[^0-9,]+/', '', $include );
- $_attachments = get_posts( array( 'include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby ) );
- $attachments = array();
- foreach ( $_attachments as $key => $val ) {
- $attachments[$val->ID] = $_attachments[$key];
- }
- } elseif ( !empty( $exclude ) ) {
- $exclude = preg_replace( '/[^0-9,]+/', '', $exclude );
- $attachments = get_children( array( 'post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby ) );
- } else {
- $attachments = get_children( array( 'post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby ) );
- }
-
- if ( ! empty( $attachments ) ) {
- foreach ( $attachments as $id => $attachment ) {
- $link = isset( $attr['link'] ) && 'file' === $attr['link'] ? wp_get_attachment_link( $id, $size, false, false ) : wp_get_attachment_link( $id, $size, true, false );
-
- if ( $captiontag && trim($attachment->post_excerpt) ) {
- $output .= "<div class='wp-caption aligncenter'>$link
- <p class='wp-caption-text'>" . wptexturize($attachment->post_excerpt) . "</p>
- </div>";
- } else {
- $output .= $link . ' ';
- }
- }
- }
- }
-
- /**
- * Returns attachment object.
- *
- * @param $attachment attachment row
- *
- * @return object
- */
- function get_attachment( $attachment ) {
- $metadata = wp_get_attachment_metadata( $attachment->ID );
-
- $result = array(
- 'ID' => (int) $attachment->ID,
- 'URL' => (string) wp_get_attachment_url( $attachment->ID ),
- 'guid' => (string) $attachment->guid,
- 'mime_type' => (string) $attachment->post_mime_type,
- 'width' => (int) isset( $metadata['width'] ) ? $metadata['width'] : 0,
- 'height' => (int) isset( $metadata['height'] ) ? $metadata['height'] : 0,
- );
-
- if ( isset( $metadata['duration'] ) ) {
- $result['duration'] = (int) $metadata['duration'];
- }
-
- return (object) apply_filters( 'get_attachment', $result );
- }
-
- /**
- * Get post-specific user capabilities
- * @param WP_Post $post post object
- * @return array array of post-level permissions; 'publish_post', 'delete_post', 'edit_post'
- */
- function get_current_user_capabilities( $post ) {
- return array(
- 'publish_post' => current_user_can( 'publish_post', $post ),
- 'delete_post' => current_user_can( 'delete_post', $post ),
- 'edit_post' => current_user_can( 'edit_post', $post )
- );
- }
-
- /**
- * Get post ID by name
- *
- * Attempts to match name on post title and page path
- *
- * @param string $name
- *
- * @return int|object Post ID on success, WP_Error object on failure
- **/
- protected function get_post_id_by_name( $name ) {
- $name = sanitize_title( $name );
-
- if ( ! $name ) {
- return new WP_Error( 'invalid_post', 'Invalid post', 400 );
- }
-
- $posts = get_posts( array(
- 'name' => $name,
- 'numberposts' => 1,
- 'post_type' => $this->_get_whitelisted_post_types(),
- ) );
-
- if ( ! $posts || ! isset( $posts[0]->ID ) || ! $posts[0]->ID ) {
- $page = get_page_by_path( $name );
-
- if ( ! $page ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
- }
-
- $post_id = $page->ID;
- } else {
- $post_id = (int) $posts[0]->ID;
- }
-
- return $post_id;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-post-v1-1-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-post-v1-1-endpoint.php
deleted file mode 100644
index 418cfb16..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-post-v1-1-endpoint.php
+++ /dev/null
@@ -1,353 +0,0 @@
-<?php
-
-abstract class WPCOM_JSON_API_Post_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint {
- public $post_object_format = array(
- // explicitly document and cast all output
- 'ID' => '(int) The post ID.',
- 'site_ID' => '(int) The site ID.',
- 'author' => '(object>author) The author of the post.',
- 'date' => "(ISO 8601 datetime) The post's creation time.",
- 'modified' => "(ISO 8601 datetime) The post's most recent update time.",
- 'title' => '(HTML) <code>context</code> dependent.',
- 'URL' => '(URL) The full permalink URL to the post.',
- 'short_URL' => '(URL) The wp.me short URL.',
- 'content' => '(HTML) <code>context</code> dependent.',
- 'excerpt' => '(HTML) <code>context</code> dependent.',
- 'slug' => '(string) The name (slug) for the post, used in URLs.',
- 'guid' => '(string) The GUID for the post.',
- 'status' => array(
- 'publish' => 'The post is published.',
- 'draft' => 'The post is saved as a draft.',
- 'pending' => 'The post is pending editorial approval.',
- 'private' => 'The post is published privately',
- 'future' => 'The post is scheduled for future publishing.',
- 'trash' => 'The post is in the trash.',
- 'auto-draft' => 'The post is a placeholder for a new post.',
- ),
- 'sticky' => '(bool) Is the post sticky?',
- 'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
- 'parent' => "(object>post_reference|false) A reference to the post's parent, if it has one.",
- 'type' => "(string) The post's post_type. Post types besides post, page and revision need to be whitelisted using the <code>rest_api_allowed_post_types</code> filter.",
- 'discussion' => '(object) Hash of discussion options for the post',
- 'likes_enabled' => "(bool) Is the post open to likes?",
- 'sharing_enabled' => "(bool) Should sharing buttons show on this post?",
- 'like_count' => '(int) The number of likes for this post.',
- 'i_like' => '(bool) Does the current user like this post?',
- 'is_reblogged' => '(bool) Did the current user reblog this post?',
- 'is_following' => '(bool) Is the current user following this blog?',
- 'global_ID' => '(string) A unique WordPress.com-wide representation of a post.',
- 'featured_image' => '(URL) The URL to the featured image for this post if it has one.',
- 'post_thumbnail' => '(object>attachment) The attachment object for the featured image if it has one.',
- 'format' => array(), // see constructor
- 'geo' => '(object>geo|false)',
- 'menu_order' => '(int) (Pages Only) The order pages should appear in.',
- 'page_template' => '(string) (Pages Only) The page template this page is using.',
- 'publicize_URLs' => '(array:URL) Array of Twitter and Facebook URLs published by this post.',
- 'terms' => '(object) Hash of taxonomy names mapping to a hash of terms keyed by term name.',
- 'tags' => '(object:tag) Hash of tags (keyed by tag name) applied to the post.',
- 'categories' => '(object:category) Hash of categories (keyed by category name) applied to the post.',
- 'attachments' => '(object:attachment) Hash of post attachments (keyed by attachment ID). Returns the most recent 20 attachments. Use the `/sites/$site/media` endpoint to query the attachments beyond the default of 20 that are returned here.',
- 'attachment_count' => '(int) The total number of attachments for this post. Use the `/sites/$site/media` endpoint to query the attachments beyond the default of 20 that are returned here.',
- 'metadata' => '(array) Array of post metadata keys and values. All unprotected meta keys are available by default for read requests. Both unprotected and protected meta keys are available for authenticated requests with access. Protected meta keys can be made available with the <code>rest_api_allowed_public_metadata</code> filter.',
- 'meta' => '(object) API result meta data',
- 'capabilities' => '(object) List of post-specific permissions for the user; publish_post, edit_post, delete_post',
- 'revisions' => '(array) List of post revision IDs. Only available for posts retrieved with context=edit.',
- 'other_URLs' => '(object) List of URLs for this post. Permalink and slug suggestions.',
- );
-
- // public $response_format =& $this->post_object_format;
-
- function __construct( $args ) {
- if ( is_array( $this->post_object_format ) && isset( $this->post_object_format['format'] ) ) {
- $this->post_object_format['format'] = get_post_format_strings();
- }
- if ( !$this->response_format ) {
- $this->response_format =& $this->post_object_format;
- }
- parent::__construct( $args );
- }
-
- /**
- * Get a post by a specified field and value
- *
- * @param string $field
- * @param string $field_value
- * @param string $context Post use context (e.g. 'display')
- * @return array Post
- **/
- function get_post_by( $field, $field_value, $context = 'display' ) {
-
- // validate input
- if ( ! in_array( $field, array( 'ID', 'name' ) ) ) {
- return new WP_Error( 'invalid_field', 'Invalid API FIELD', 400 );
- }
-
- if ( ! in_array( $context, array( 'display', 'edit' ) ) ) {
- return new WP_Error( 'invalid_context', 'Invalid API CONTEXT', 400 );
- }
-
- if ( 'display' === $context ) {
- $args = $this->query_args();
- if ( isset( $args['content_width'] ) && $args['content_width'] ) {
- $GLOBALS['content_width'] = (int) $args['content_width'];
- }
- }
-
- if ( strpos( $_SERVER['HTTP_USER_AGENT'], 'wp-windows8' ) ) {
- remove_shortcode( 'gallery', 'gallery_shortcode' );
- add_shortcode( 'gallery', array( &$this, 'win8_gallery_shortcode' ) );
- }
-
- // fetch SAL post
- $post = $this->get_sal_post_by( $field, $field_value, $context );
-
- if ( is_wp_error( $post ) ) {
- return $post;
- }
-
- $GLOBALS['post'] = $post;
-
- // TODO: not sure where this one should go
- if ( 'display' === $context ) {
- setup_postdata( $post );
- }
-
- $keys_to_render = array_keys( $this->post_object_format );
- if ( isset( $this->api->query[ 'fields' ] ) ) {
- $limit_to_fields = array_map( 'trim', explode( ',', $this->api->query['fields'] ) );
- $keys_to_render = array_intersect( $keys_to_render, $limit_to_fields );
- }
-
- // always include some keys because processors require it to validate access
- $keys_to_render = array_unique( array_merge( $keys_to_render, array( 'type', 'status', 'password' ) ) );
-
- $response = $this->render_response_keys( $post, $context, $keys_to_render );
-
- unset( $GLOBALS['post'] );
-
- return $response;
- }
-
- protected function get_sal_post_by( $field, $field_value, $context ) {
- global $blog_id;
-
- $site = $this->get_platform()->get_site( $blog_id );
-
- $post = ( $field === 'name' ) ?
- $site->get_post_by_name( $field_value, $context ) :
- $site->get_post_by_id( $field_value, $context );
-
- return $post;
- }
-
- private function render_response_keys( $post, $context, $keys ) {
- foreach ( $keys as $key ) {
- switch ( $key ) {
- case 'ID' :
- // explicitly cast all output
- $response[$key] = (int) $post->ID;
- break;
- case 'site_ID' :
- $response[$key] = $post->site->get_id();
- break;
- case 'author' :
- $response[$key] = $post->get_author();
- break;
- case 'date' :
- $response[$key] = $post->get_date();
- break;
- case 'modified' :
- $response[$key] = $post->get_modified_date();
- break;
- case 'title' :
- $response[$key] = $post->get_title();
- break;
- case 'URL' :
- $response[$key] = $post->get_url();
- break;
- case 'short_URL' :
- $response[$key] = $post->get_shortlink();
- break;
- case 'content' :
- $response[$key] = $post->get_content();
- break;
- case 'excerpt' :
- $response[$key] = $post->get_excerpt();
- break;
- case 'status' :
- $response[$key] = $post->get_status();
- break;
- case 'sticky' :
- $response[$key] = $post->is_sticky();
- break;
- case 'slug' :
- $response[$key] = $post->get_slug();
- break;
- case 'guid' :
- $response[$key] = $post->get_guid();
- break;
- case 'password' :
- $response[$key] = $post->get_password();
- break;
- case 'parent' : // (object|false)
- $response[$key] = $post->get_parent();
- break;
- case 'type' :
- $response[$key] = $post->get_type();
- break;
- case 'discussion' :
- $response[$key] = $post->get_discussion();
- break;
- case 'likes_enabled' :
- $response[$key] = $post->is_likes_enabled();
- break;
- case 'sharing_enabled' :
- $response[$key] = $post->is_sharing_enabled();
- break;
- case 'like_count' :
- $response[$key] = $post->get_like_count();
- break;
- case 'i_like' :
- $response[$key] = $post->is_liked();
- break;
- case 'is_reblogged':
- $response[$key] = $post->is_reblogged();
- break;
- case 'is_following':
- $response[$key] = $post->is_following();
- break;
- case 'global_ID':
- $response[$key] = $post->get_global_id();
- break;
- case 'featured_image' :
- $response[$key] = $post->get_featured_image();
- break;
- case 'post_thumbnail' :
- $response[$key] = $post->get_post_thumbnail();
- break;
- case 'format' :
- $response[$key] = $post->get_format();
- break;
- case 'geo' : // (object|false)
- $response[$key] = $post->get_geo();
- break;
- case 'menu_order':
- $response[$key] = $post->get_menu_order();
- break;
- case 'page_template':
- $response[$key] = $post->get_page_template();
- break;
- case 'publicize_URLs' :
- $response[$key] = $post->get_publicize_urls();
- break;
- case 'terms':
- $response[$key] = $post->get_terms();
- break;
- case 'tags' :
- $response[$key] = $post->get_tags();
- break;
- case 'categories':
- $response[$key] = $post->get_categories();
- break;
- case 'attachments':
- list( $attachments, $attachment_count ) = $post->get_attachments_and_count();
- $response[$key] = $attachments;
- $response['attachment_count'] = $attachment_count;
- break;
- case 'metadata' : // (array|false)
- $response[$key] = $post->get_metadata();
- break;
- case 'meta' :
- $response[$key] = $post->get_meta();
- break;
- case 'capabilities' :
- $response[$key] = $post->get_current_user_capabilities();
- break;
- case 'revisions' :
- $revisions = $post->get_revisions();
- if ( $revisions ) {
- $response[$key] = $revisions;
- }
- break;
- case 'other_URLs' :
- $response[$key] = $post->get_other_urls();
- break;
- }
- }
-
- return $response;
- }
-
- // TODO: factor this out
- function get_blog_post( $blog_id, $post_id, $context = 'display' ) {
- $blog_id = $this->api->get_blog_id( $blog_id );
- if ( !$blog_id || is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
- switch_to_blog( $blog_id );
- $post = $this->get_post_by( 'ID', $post_id, $context );
- restore_current_blog();
- return $post;
- }
-
- function win8_gallery_shortcode( $attr ) {
- global $post;
-
- static $instance = 0;
- $instance++;
-
- $output = '';
-
- // We're trusting author input, so let's at least make sure it looks like a valid orderby statement
- if ( isset( $attr['orderby'] ) ) {
- $attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] );
- if ( !$attr['orderby'] )
- unset( $attr['orderby'] );
- }
-
- extract( shortcode_atts( array(
- 'order' => 'ASC',
- 'orderby' => 'menu_order ID',
- 'id' => $post->ID,
- 'include' => '',
- 'exclude' => '',
- 'slideshow' => false
- ), $attr, 'gallery' ) );
-
- // Custom image size and always use it
- add_image_size( 'win8app-column', 480 );
- $size = 'win8app-column';
-
- $id = intval( $id );
- if ( 'RAND' === $order )
- $orderby = 'none';
-
- if ( !empty( $include ) ) {
- $include = preg_replace( '/[^0-9,]+/', '', $include );
- $_attachments = get_posts( array( 'include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby ) );
- $attachments = array();
- foreach ( $_attachments as $key => $val ) {
- $attachments[$val->ID] = $_attachments[$key];
- }
- } elseif ( !empty( $exclude ) ) {
- $exclude = preg_replace( '/[^0-9,]+/', '', $exclude );
- $attachments = get_children( array( 'post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby ) );
- } else {
- $attachments = get_children( array( 'post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby ) );
- }
-
- if ( ! empty( $attachments ) ) {
- foreach ( $attachments as $id => $attachment ) {
- $link = isset( $attr['link'] ) && 'file' === $attr['link'] ? wp_get_attachment_link( $id, $size, false, false ) : wp_get_attachment_link( $id, $size, true, false );
-
- if ( $captiontag && trim($attachment->post_excerpt) ) {
- $output .= "<div class='wp-caption aligncenter'>$link
- <p class='wp-caption-text'>" . wptexturize($attachment->post_excerpt) . "</p>
- </div>";
- } else {
- $output .= $link . ' ';
- }
- }
- }
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-embed-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-embed-endpoint.php
deleted file mode 100644
index 1c08060b..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-embed-endpoint.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Render_Embed_Endpoint( array(
- 'description' => "Get a rendered embed for a site. Note: The current user must have publishing access.",
- 'group' => 'sites',
- 'stat' => 'embeds:render',
- 'method' => 'GET',
- 'path' => '/sites/%s/embeds/render',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'query_parameters' => array(
- 'embed_url' => '(string) The query-string encoded embed URL to render. Required. Only accepts one at a time.',
- ),
- 'response_format' => array(
- 'embed_url' => '(string) The embed_url that was passed in for rendering.',
- 'result' => '(html) The rendered HTML result of the embed.',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/apiexamples.wordpress.com/embeds/render?embed_url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DSQEQr7c0-dw',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- )
-) );
-
-class WPCOM_JSON_API_Render_Embed_Endpoint extends WPCOM_JSON_API_Render_Endpoint {
- // /sites/%s/embeds/render -> $blog_id
- function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( ! current_user_can( 'edit_posts' ) ) {
- return new WP_Error( 'unauthorized', __( 'Your token must have permission to post on this blog.', 'jetpack' ), 403 );
- }
-
- $args = $this->query_args();
- $embed_url = trim( $args['embed_url'] );
-
- // quick validation
- if ( ! preg_match_all( '|^\s*(https?://[^\s"]+)\s*$|im', $embed_url, $matches ) ) {
- return new WP_Error( 'invalid_embed_url', __( 'The embed_url parameter must be a valid URL.', 'jetpack' ), 400 );
- }
-
- if ( count( $matches[1] ) > 1 ) {
- return new WP_Error( 'invalid_embed', __( 'Only one embed can be rendered at a time.', 'jetpack' ), 400 );
- }
-
- $embed_url = array_shift( $matches[1] );
- $parts = parse_url( $embed_url );
- if ( ! $parts ) {
- return new WP_Error( 'invalid_embed_url', __( 'The embed_url parameter must be a valid URL.', 'jetpack' ), 400 );
- }
-
- global $wp_embed;
- $render = $this->process_render( array( $this, 'do_embed' ), $embed_url );
-
- // if nothing happened, then the shortcode does not exist.
- $is_an_embed = ( $embed_url != $render['result'] && $wp_embed->maybe_make_link( $embed_url ) != $render['result'] );
- if ( ! $is_an_embed ) {
- return new WP_Error( 'invalid_embed', __( 'The requested URL is not an embed.', 'jetpack' ), 400 );
- }
-
- // our output for this endpoint..
- $return['embed_url'] = $embed_url;
- $return['result'] = $render['result'];
-
- $return = $this->add_assets( $return, $render['loaded_scripts'], $render['loaded_styles'] );
-
- return $return;
- }
-
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-embed-reversal-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-embed-reversal-endpoint.php
deleted file mode 100644
index 32af88da..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-embed-reversal-endpoint.php
+++ /dev/null
@@ -1,108 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Render_Embed_Reversal_Endpoint( array(
- 'description' => "Determines if the given embed code can be reversed into a single line embed or a shortcode, and if so returns the embed or shortcode. Note: The current user must have publishing access.",
- //'group' => 'sites',
- 'group' => '__do_not_document',
- 'stat' => 'embeds:reversal',
- 'method' => 'POST',
- 'path' => '/sites/%s/embeds/reversal',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'request_format' => array(
- 'maybe_embed' => '(string) The embed code to reverse. Required. Only accepts one at a time.',
- ),
- 'response_format' => array(
- 'maybe_embed' => '(string) The original embed code that was passed in for rendering.',
- 'reversal_type' => '(string) The type of reversal. Either an embed or a shortcode.',
- 'render_result' => '(html) The rendered HTML result of the embed or shortcode.',
- 'result' => '(string) The reversed content. Either a single line embed or a shortcode.',
- 'scripts' => '(array) An array of JavaScript files needed to render the embed or shortcode. Returned in the format of <code>{ "script-slug" : { "src": "http://example.com/file.js", "extra" : "" } }</code> where extra contains any neccessary extra JS for initializing the source file and src contains the script to load. Omitted if no scripts are neccessary.',
- 'styles' => '(array) An array of CSS files needed to render the embed or shortcode. Returned in the format of <code>{ "style-slug" : { "src": "http://example.com/file.css", "media" : "all" } }</code>. Omitted if no styles are neccessary.',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/shortcode-reversals/render/',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
-
- 'body' => array(
- 'maybe_embed' => '<iframe width="480" height="302" src="http://www.ustream.tv/embed/recorded/26370522/highlight/299667?v=3&amp;wmode=direct" scrolling="no" frameborder="0"></iframe>',
- )
- ),
-) );
-
-class WPCOM_JSON_API_Render_Embed_Reversal_Endpoint extends WPCOM_JSON_API_Render_Endpoint {
- // /sites/%s/embeds/reversal -> $blog_id
- function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( ! current_user_can( 'edit_posts' ) ) {
- return new WP_Error( 'unauthorized', 'Your token must have permission to post on this blog.', 403 );
- }
-
- $is_shortcode = $is_embed = false;
-
- $input = $this->input( true );
- $maybe_embed = trim( $input['maybe_embed'] );
- if ( empty( $maybe_embed ) ) {
- return new WP_Error( 'empty_embed', 'Please provide an embed code to process.', 400 );
- }
-
- $ksesed_content = trim( wp_strip_all_tags( wp_kses_post( $maybe_embed ), true ) );
- if ( empty( $ksesed_content ) ) {
- return new WP_Error( 'invalid_embed', 'Invalid or empty embed provided.', 400 );
- }
-
- $shortcode_pattern = get_shortcode_regex();
- $url_pattern = '/^http(s)?:\/\/[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(\/.*)?$/i';
- preg_match_all( "/$shortcode_pattern/s", $ksesed_content, $shortcode_matches );
- preg_match_all( "$url_pattern", $ksesed_content, $url_matches );
-
- if ( empty( $shortcode_matches[0] ) && empty( $url_matches[0] ) )
- return new WP_Error( 'invalid_embed', 'The provided embed is not supported.', 400 );
-
- if ( ( count( $shortcode_matches[0] ) + count( $url_matches[0] ) ) > 1 ) {
- return new WP_Error( 'invalid_embed', 'Only one embed/shortcode reversal can be rendered at a time.', 400 );
- }
-
- if ( ! empty( $shortcode_matches[0] ) ) {
- $is_shortcode = true;
- } elseif ( ! empty( $url_matches[0] ) ) {
- $is_embed = true;
- }
-
- $render = $this->process_render( array( $this, 'render_shortcode_reversal' ), array( 'shortcode_reversal' => $ksesed_content, 'is_shortcode' => $is_shortcode, 'is_embed' => $is_embed ) );
-
-
- // if nothing happened, then the shortcode does not exist.
- global $wp_embed;
- if ( empty( $render ) || empty( $render['result'] ) || $ksesed_content == $render['result'] || $wp_embed->maybe_make_link( $maybe_embed ) == $render['result'] ) {
- return new WP_Error( 'invalid_embed', 'The provided embed is not supported.', 400 );
- }
-
- // our output for this endpoint..
- $return['maybe_embed'] = $maybe_embed;
- $return['result'] = $ksesed_content;
- $return['reversal_type'] = ( $is_embed ) ? 'embed' : 'shortcode';
- $return['render_result'] = $render['result'];
-
- $return = $this->add_assets( $return, $render['loaded_scripts'], $render['loaded_styles'] );
-
- return $return;
- }
-
- function render_shortcode_reversal( $args ) {
- if ( $args['is_shortcode'] ) {
- return call_user_func( array( $this, 'do_shortcode' ), $args['shortcode_reversal'] );
- } else if ( $args['is_embed'] ) {
- return call_user_func( array( $this, 'do_embed' ), $args['shortcode_reversal'] );
- }
- return false;
- }
-
-} \ No newline at end of file
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-endpoint.php
deleted file mode 100644
index f2de7fc3..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-endpoint.php
+++ /dev/null
@@ -1,145 +0,0 @@
-<?php
-
-// these are helpers for the shortcode and embed render endpoints
-abstract class WPCOM_JSON_API_Render_Endpoint extends WPCOM_JSON_API_Endpoint {
-
- /*
- * Figure out what scripts and styles to load.
- * props to o2's o2_Read_API::poll() function for inspiration.
- *
- * In short we figure out what scripts load for a "normal" page load by executing wp_head and wp_footer
- * then we render the embed/shortcode (to both get our result, and to have the shortcode files enqueue their resources)
- * then we load wp_head and wp_footer again to see what new resources were added
- * finally we find out the url to the source file and any extra info (like media or init js)
- */
- function process_render( $callback, $callback_arg ) {
- global $wp_scripts, $wp_styles;
-
- // initial scripts & styles (to subtract)
- ob_start();
- wp_head();
- wp_footer();
- ob_end_clean();
- $initial_scripts = $wp_scripts->done;
- $initial_styles = $wp_styles->done;
-
- // actually render the shortcode, get the result, and do the resource loading again so we can subtract..
- ob_start();
- wp_head();
- ob_end_clean();
- $result = call_user_func( $callback, $callback_arg );
- ob_start();
- wp_footer();
- ob_end_clean();
-
- // find the difference (the new resource files)
- $loaded_scripts = array_diff( $wp_scripts->done, $initial_scripts );
- $loaded_styles = array_diff( $wp_styles->done, $initial_styles );
- return array(
- 'result' => $result,
- 'loaded_scripts' => $loaded_scripts,
- 'loaded_styles' => $loaded_styles,
- );
- }
-
- /**
- * Takes the list of styles and scripts and adds them to the JSON response
- */
- function add_assets( $return, $loaded_scripts, $loaded_styles ) {
- global $wp_scripts, $wp_styles;
- // scripts first, just cuz
- if ( count( $loaded_scripts ) > 0 ) {
- $scripts = array();
- foreach ( $loaded_scripts as $handle ) {
- if ( !isset( $wp_scripts->registered[ $handle ] ) )
- continue;
-
- $src = $wp_scripts->registered[ $handle ]->src;
-
- // attach version and an extra query parameters
- $ver = $this->get_version( $wp_scripts->registered[ $handle ]->ver, $wp_scripts->default_version );
- if ( isset( $wp_scripts->args[ $handle ] ) ) {
- $ver = $ver ? $ver . '&amp;' . $wp_scripts->args[$handle] : $wp_scripts->args[$handle];
- }
- $src = add_query_arg( 'ver', $ver, $src );
-
- // add to an aray so we can return all this info
- $scripts[ $handle ] = array(
- 'src' => $src,
- );
- $extra = $wp_scripts->print_extra_script( $handle, false );
- if ( !empty( $extra ) ) {
- $scripts[$handle]['extra'] = $extra;
- }
- }
- $return['scripts'] = $scripts;
- }
- // now styles
- if ( count( $loaded_styles ) > 0 ) {
- $styles = array();
- foreach ( $loaded_styles as $handle ) {
- if ( !isset( $wp_styles->registered[ $handle ] ) )
- continue;
-
- $src = $wp_styles->registered[ $handle ]->src;
-
- // attach version and an extra query parameters
- $ver = $this->get_version( $wp_styles->registered[ $handle ]->ver, $wp_styles->default_version );
- if ( isset( $wp_styles->args[ $handle ] ) ) {
- $ver = $ver ? $ver . '&amp;' . $wp_styles->args[$handle] : $wp_styles->args[$handle];
- }
- $src = add_query_arg( 'ver', $ver, $src );
-
- // is there a special media (print, screen, etc) for this? if not, default to 'all'
- $media = 'all';
- if ( isset( $wp_styles->registered[ $handle ]->args ) ) {
- $media = esc_attr( $wp_styles->registered[ $handle ]->args );
- }
-
- // add to an array so we can return all this info
- $styles[ $handle ] = array (
- 'src' => $src,
- 'media' => $media,
- );
- }
-
- $return['styles'] = $styles;
- }
-
- return $return;
- }
-
- /**
- * Returns the 'version' string set by the shortcode so different versions of scripts/styles can be loaded
- */
- function get_version( $this_scripts_version, $default_version ) {
- if ( null === $this_scripts_version ) {
- $ver = '';
- } else {
- $ver = $this_scripts_version ? $this_scripts_version : $default_version;
- }
- return $ver;
- }
-
- /**
- * given a shortcode, process and return the result
- */
- function do_shortcode( $shortcode ) {
- return do_shortcode( $shortcode );
- }
-
- /**
- * given a one-line embed URL, process and return the result
- */
- function do_embed( $embed_url ) {
- // in order for oEmbed to fire in the `$wp_embed->shortcode` method, we need to set a post as the current post
- $_posts = get_posts( array( 'posts_per_page' => 1, 'suppress_filters' => false ) );
- if ( ! empty( $_posts ) ) {
- global $post;
- $post = array_shift( $_posts );
- }
-
- global $wp_embed;
- return $wp_embed->shortcode( array(), $embed_url );
- }
-} \ No newline at end of file
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-shortcode-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-shortcode-endpoint.php
deleted file mode 100644
index 395fc7ac..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-render-shortcode-endpoint.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Render_Shortcode_Endpoint( array(
- 'description' => "Get a rendered shortcode for a site. Note: The current user must have publishing access.",
- 'group' => 'sites',
- 'stat' => 'shortcodes:render',
- 'method' => 'GET',
- 'path' => '/sites/%s/shortcodes/render',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'query_parameters' => array(
- 'shortcode' => '(string) The query-string encoded shortcode string to render. Required. Only accepts one at a time.',
- ),
- 'response_format' => array(
- 'shortcode' => '(string) The shortcode that was passed in for rendering.',
- 'result' => '(html) The rendered HTML result of the shortcode.',
- 'scripts' => '(array) An array of JavaScript files needed to render the shortcode. Returned in the format of <code>{ "script-slug" : { "src": "http://example.com/file.js", "extra" : "" } }</code> where extra contains any neccessary extra JS for initializing the source file and src contains the script to load. Omitted if no scripts are neccessary.',
- 'styles' => '(array) An array of CSS files needed to render the shortcode. Returned in the format of <code>{ "style-slug" : { "src": "http://example.com/file.css", "media" : "all" } }</code>. Omitted if no styles are neccessary.',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/shortcodes/render?shortcode=%5Bgallery%20ids%3D%22729%2C732%2C731%2C720%22%5D',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- )
-) );
-
-class WPCOM_JSON_API_Render_Shortcode_Endpoint extends WPCOM_JSON_API_Render_Endpoint {
- // /sites/%s/shortcodes/render -> $blog_id
- function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( ! current_user_can( 'edit_posts' ) ) {
- return new WP_Error( 'unauthorized', 'Your token must have permission to post on this blog.', 403 );
- }
-
- $args = $this->query_args();
- $shortcode = trim( $args['shortcode'] );
-
- // Quick validation - shortcodes should always be enclosed in brackets []
- if ( ! wp_startswith( $shortcode, '[' ) || ! wp_endswith( $shortcode, ']' ) ) {
- return new WP_Error( 'invalid_shortcode', 'The shortcode parameter must begin and end with square brackets.', 400 );
- }
-
- // Make sure only one shortcode is being rendered at a time
- $pattern = get_shortcode_regex();
- preg_match_all( "/$pattern/s", $shortcode, $matches );
- if ( count( $matches[0] ) > 1 ) {
- return new WP_Error( 'invalid_shortcode', 'Only one shortcode can be rendered at a time.', 400 );
- }
-
- $render = $this->process_render( array( $this, 'do_shortcode' ), $shortcode );
-
- // if nothing happened, then the shortcode does not exist.
- if ( $shortcode == $render['result'] ) {
- return new WP_Error( 'invalid_shortcode', 'The requested shortcode does not exist.', 400 );
- }
-
- // our output for this endpoint..
- $return['shortcode'] = $shortcode;
- $return['result'] = $render['result'];
-
- $return = $this->add_assets( $return, $render['loaded_scripts'], $render['loaded_styles'] );
-
- return $return;
- }
-} \ No newline at end of file
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-sharing-buttons-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-sharing-buttons-endpoint.php
deleted file mode 100644
index 53150df6..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-sharing-buttons-endpoint.php
+++ /dev/null
@@ -1,644 +0,0 @@
-<?php
-
-abstract class WPCOM_JSON_API_Sharing_Button_Endpoint extends WPCOM_JSON_API_Endpoint {
-
- public static $all_visibilities = array( 'visible', 'hidden' );
-
- protected $sharing_service;
-
- protected function setup() {
- if ( class_exists( 'Sharing_Service' ) ) {
- $this->sharing_service = new Sharing_Service();
- }
-
- if ( ! current_user_can( 'manage_options' ) ) {
- return new WP_Error( 'forbidden', 'You do not have the capability to manage sharing buttons for this site', 403 );
- } else if ( ! class_exists( 'Sharing_Service' ) || ! class_exists( 'Sharing_Source' ) ||
- ( method_exists( 'Jetpack', 'is_module_active' ) && ! Jetpack::is_module_active( 'sharedaddy' ) ) ) {
- return new WP_Error( 'missing_jetpack_module', 'The Sharing module must be activated in order to use this endpoint', 400 );
- }
- }
-
- public function format_sharing_button( $button ) {
- $response = array(
- 'ID' => $button->get_id(),
- 'name' => $button->get_name(),
- 'shortname' => $button->shortname,
- 'custom' => is_a( $button, 'Share_Custom' ),
- 'enabled' => $this->is_button_enabled( $button ),
- );
-
- if ( $response['enabled'] ) {
- // Status is either "disabled" or the visibility value
- $response['visibility'] = $this->get_button_visibility( $button );
- }
-
- if ( ! empty( $button->icon ) ) {
- // Only pre-defined sharing buttons include genericon
- $response['genericon'] = $button->icon;
- }
-
- if ( method_exists( $button, 'get_options' ) ) {
- // merge get_options() values into response, primarily to account
- // for custom sharing button values
- foreach ( $button->get_options() as $key => $value ) {
- // Capitalize URL property
- if ( 'url' === strtolower( $key ) ) {
- $key = strtoupper( $key );
- }
-
- $response[ $key ] = $value;
- }
- }
-
- return $response;
- }
-
- public function get_button_visibility( $button ) {
- $services = $this->sharing_service->get_blog_services();
- $visibilities = self::$all_visibilities;
- $button_id = $button->get_id();
-
- foreach ( $visibilities as $visibility ) {
- if ( isset( $services[ $visibility ][ $button_id ] ) ) {
- return $visibility;
- }
- }
-
- return false;
- }
-
- public function is_button_enabled( $button ) {
- return false !== $this->get_button_visibility( $button );
- }
-
- protected function is_button_input_for_custom( $button ) {
- return ( isset( $button['custom'] ) && $button['custom'] ) ||
- ( isset( $button['ID'] ) && 1 === preg_match( '/^custom-/', $button['ID'] ) ) ||
- ! empty( $button['name'] ) || ! empty( $button['URL'] ) || ! empty( $button['icon'] );
- }
-
- protected function validate_button_input( $button, $is_new = false ) {
- if ( ! empty( $button['visibility'] ) && ! in_array( $button['visibility'], self::$all_visibilities ) ) {
- return new WP_Error( 'invalid_visibility', sprintf( 'The visibility field must be one of the following values: %s', implode( ', ', self::$all_visibilities ) ), 400 );
- } else if ( $is_new && empty( $button['URL'] ) ) {
- return new WP_Error( 'invalid_request', 'The URL field is required', 400 );
- } else if ( $is_new && empty( $button['icon'] ) ) {
- return new WP_Error( 'invalid_request', 'The icon field is required', 400 );
- }
- }
-
- public function create_custom_button( $button ) {
- // Default visibility to 'visible' if enabled
- if ( empty( $button['visibility'] ) && true === $button['enabled'] ) {
- $button['visibility'] = 'visible';
- }
-
- $updated_service = $this->sharing_service->new_service( $button['name'], $button['URL'], $button['icon'] );
- if ( false !== $updated_service && ( true === $button['enabled'] || ! empty( $button['visibility'] ) ) ) {
- $blog_services = $this->sharing_service->get_blog_services();
- $blog_services[ $button['visibility'] ][ (string) $updated_service->get_id() ] = $updated_service;
- $this->sharing_service->set_blog_services( array_keys( $blog_services['visible'] ), array_keys( $blog_services['hidden'] ) );
- }
-
- return $updated_service;
- }
-
- public function update_button( $button_id, $button ) {
- $blog_services = $this->sharing_service->get_blog_services();
-
- // Find existing button
- $all_buttons = $this->sharing_service->get_all_services_blog();
- if ( ! array_key_exists( $button_id, $all_buttons ) ) {
- // Button doesn't exist
- return new WP_Error( 'not_found', 'The specified sharing button was not found', 404 );
- }
-
- $updated_service = $all_buttons[ $button_id ];
- $service_id = $updated_service->get_id();
- if ( is_a( $all_buttons[ $button_id ], 'Share_Custom' ) ) {
- // Replace options for existing custom button
- $options = $updated_service->get_options();
- $name = isset( $button['name'] ) ? $button['name'] : $options['name'];
- $url = isset( $button['URL'] ) ? $button['URL'] : $options['url'];
- $icon = isset( $button['icon'] ) ? $button['icon'] : $options['icon'];
- $updated_service = new Share_Custom( $service_id, array( 'name' => $name, 'url' => $url, 'icon' => $icon ) );
- $this->sharing_service->set_service( $button_id, $updated_service );
- }
-
- // Default visibility to 'visible' if enabled
- if ( empty( $button['visibility'] ) && true === $button['enabled'] ) {
- $button['visibility'] = 'visible';
- } else if ( false === $button['enabled'] ) {
- unset( $button['visibility'] );
- }
-
- // Update button visibility and enabled status
- $visibility_changed = ( isset( $button['visibility'] ) || true === $button['enabled'] ) && ! array_key_exists( $service_id, $blog_services[ $button['visibility'] ] );
- $is_disabling = false === $button['enabled'];
- if ( $visibility_changed || $is_disabling ) {
- // Remove from all other visibilities
- foreach ( $blog_services as $service_visibility => $services ) {
- if ( $is_disabling || $service_visibility !== $button['visibility'] ) {
- unset( $blog_services[ $service_visibility ][ $service_id ] );
- }
- }
-
- if ( $visibility_changed ) {
- $blog_services[ $button['visibility'] ][ $service_id ] = $updated_service;
- }
-
- $this->sharing_service->set_blog_services( array_keys( $blog_services['visible'] ), array_keys( $blog_services['hidden'] ) );
- }
-
- return $updated_service;
- }
-
-}
-
-new WPCOM_JSON_API_Get_Sharing_Buttons_Endpoint( array(
- 'description' => 'Get a list of a site\'s sharing buttons.',
- 'group' => 'sharing',
- 'stat' => 'sharing-buttons',
- 'method' => 'GET',
- 'path' => '/sites/%s/sharing-buttons/',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'query_parameters' => array(
- 'enabled_only' => '(bool) If true, only enabled sharing buttons are included in the response',
- 'visibility' => '(string) The type of enabled sharing buttons to filter by, either "visible" or "hidden"',
- ),
- 'response_format' => array(
- 'found' => '(int) The total number of sharing buttons found that match the request.',
- 'sharing_buttons' => '(array:object) Array of sharing button objects',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/30434183/sharing-buttons/',
- 'example_request_data' => array(
- 'headers' => array( 'authorization' => 'Bearer YOUR_API_TOKEN' ),
- ),
- 'example_response' => '
-{
- "found": 2,
- "sharing_buttons": [
- {
- "ID": "twitter",
- "name": "Twitter",
- "shortname": "twitter",
- "custom": false,
- "enabled": true,
- "visibility": "visible",
- "genericon": "\\f202"
- },
- {
- "ID": "facebook",
- "name": "Facebook",
- "shortname": "facebook",
- "custom": false,
- "enabled": true,
- "visibility": "visible",
- "genericon": "\\f203"
- }
- ]
-}'
-) );
-
-class WPCOM_JSON_API_Get_Sharing_Buttons_Endpoint extends WPCOM_JSON_API_Sharing_Button_Endpoint {
-
- // GET /sites/%s/sharing-buttons -> $blog_id
- public function callback( $path = '', $blog_id = 0 ) {
- $args = $this->query_args();
-
- // Validate request
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $continue = $this->setup();
- if ( is_wp_error( $continue ) ) {
- return $continue;
- }
-
- if ( ! empty( $args['visibility'] ) && ! in_array( $args['visibility'], self::$all_visibilities ) ) {
- return new WP_Error( 'invalid_visibility', sprintf( 'The visibility field must be one of the following values: %s', implode( ', ', self::$all_visibilities ) ), 400 );
- }
-
- // Determine which visibilities to include based on request
- $visibilities = empty( $args['visibility'] ) ? self::$all_visibilities : array( $args['visibility'] );
-
- // Discover enabled services
- $buttons = array();
- $enabled_services = $this->sharing_service->get_blog_services();
- $all_services = $this->sharing_service->get_all_services_blog();
-
- // Include buttons of desired visibility
- foreach ( $visibilities as $visibility ) {
- $buttons = array_merge( $buttons, $enabled_services[ $visibility ] );
- }
-
- // Unless `enabled_only` or `visibility` is specified, append the
- // remaining buttons to the end of the array
- if ( ( ! isset( $args['enabled_only'] ) || ! $args['enabled_only'] ) && empty( $args['visibility'] ) ) {
- foreach ( $all_services as $id => $button ) {
- if ( ! array_key_exists( $id, $buttons ) ) {
- $buttons[ $id ] = $button;
- }
- }
- }
-
- // Format each button in the response
- $response = array();
- foreach ( $buttons as $button ) {
- $response[] = $this->format_sharing_button( $button );
- }
-
- return array(
- 'found' => count( $response ),
- 'sharing_buttons' => $response
- );
- }
-}
-
-new WPCOM_JSON_API_Get_Sharing_Button_Endpoint( array(
- 'description' => 'Get information about a single sharing button.',
- 'group' => '__do_not_document',
- 'stat' => 'sharing-buttons:1',
- 'method' => 'GET',
- 'path' => '/sites/%s/sharing-buttons/%s',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$button_id' => '(string) The button ID',
- ),
- 'response_format' => array(
- 'ID' => '(int) Sharing button ID',
- 'name' => '(string) Sharing button name, used as a label on the button itself',
- 'shortname' => '(string) A generated short name for the sharing button',
- 'URL' => '(string) The URL pattern defined for a custom sharing button',
- 'icon' => '(string) URL to the 16x16 icon defined for a custom sharing button',
- 'genericon' => '(string) Icon character in Genericons icon set',
- 'custom' => '(bool) Is the button a user-created custom sharing button?',
- 'enabled' => '(bool) Is the button currently enabled for the site?',
- 'visibility' => '(string) If enabled, the current visibility of the sharing button, either "visible" or "hidden"',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/30434183/sharing-buttons/facebook',
- 'example_request_data' => array(
- 'headers' => array( 'authorization' => 'Bearer YOUR_API_TOKEN' ),
- ),
- 'example_response' => '{
- "ID": "facebook",
- "name": "Facebook",
- "shortname": "facebook",
- "custom": false,
- "enabled": true,
- "visibility": "visible",
- "genericon": "\\f203"
-}'
-) );
-
-class WPCOM_JSON_API_Get_Sharing_Button_Endpoint extends WPCOM_JSON_API_Sharing_Button_Endpoint {
-
- // GET /sites/%s/sharing-buttons/%s -> $blog_id, $button_id
- public function callback( $path = '', $blog_id = 0, $button_id = 0 ) {
- // Validate request
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $continue = $this->setup();
- if ( is_wp_error( $continue ) ) {
- return $continue;
- }
-
- // Search existing services for button
- $all_buttons = $this->sharing_service->get_all_services_blog();
- if ( ! array_key_exists( $button_id, $all_buttons ) ) {
- return new WP_Error( 'not_found', 'The specified sharing button was not found', 404 );
- } else {
- return $this->format_sharing_button( $all_buttons[ $button_id ] );
- }
- }
-
-}
-
-new WPCOM_JSON_API_Update_Sharing_Buttons_Endpoint( array(
- 'description' => 'Edit all sharing buttons for a site.',
- 'group' => 'sharing',
- 'stat' => 'sharing-buttons:X:POST',
- 'method' => 'POST',
- 'path' => '/sites/%s/sharing-buttons',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'request_format' => array(
- 'sharing_buttons' => '(array:sharing_button) An array of sharing button objects',
- ),
- 'response_format' => array(
- 'success' => '(bool) Confirmation that all sharing buttons were updated as specified',
- 'updated' => '(array) An array of updated sharing buttons',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/30434183/sharing-buttons',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN',
- ),
- 'body' => array(
- 'sharing_buttons' => array(
- array(
- 'ID' => 'facebook',
- 'visibility' => 'hidden',
- )
- )
- )
- ),
- 'example_response' => '{
- "success": true,
- "updated": [
- {
- "ID": "facebook",
- "name": "Facebook",
- "shortname": "facebook",
- "custom": false,
- "enabled": true,
- "visibility": "hidden",
- "genericon": "\\f204"
- }
- ]
-}'
-) );
-
-class WPCOM_JSON_API_Update_Sharing_Buttons_Endpoint extends WPCOM_JSON_API_Sharing_Button_Endpoint {
-
- // POST /sites/%s/sharing-buttons -> $blog_id
- public function callback( $path = '', $blog_id = 0 ) {
- $input = $this->input();
-
- // Validate request
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $continue = $this->setup();
- if ( is_wp_error( $continue ) ) {
- return $continue;
- }
-
- $all_buttons = $this->sharing_service->get_all_services_blog();
-
- if ( ! isset( $input['sharing_buttons'] ) ) {
- $input['sharing_buttons'] = array();
- }
-
- // We do a first pass of all buttons to verify that no validation
- // issues exist before continuing to update
- foreach ( $input['sharing_buttons'] as $button ) {
- $button_exists = isset( $button['ID'] ) && array_key_exists( $button['ID'], $all_buttons );
- $is_custom = $this->is_button_input_for_custom( $button );
-
- // If neither custom nor existing, bail
- if ( ! $button_exists && ! $is_custom ) {
- return new WP_Error( 'not_found', 'The specified sharing button was not found', 404 );
- }
-
- // Validate input, only testing custom values if the button doesn't
- // already exist
- $validation_error = $this->validate_button_input( $button, ! $button_exists );
- if ( is_wp_error( $validation_error ) ) {
- return $validation_error;
- }
- }
-
- // Reset all existing buttons
- $this->sharing_service->set_blog_services( array(), array() );
-
- // Finally, we iterate over each button and update or create
- $success = true;
- $updated = array();
- foreach ( $input['sharing_buttons'] as $button ) {
- $button_exists = isset( $button['ID'] ) && array_key_exists( $button['ID'], $all_buttons );
- if ( $button_exists ) {
- $updated_service = $this->update_button( $button['ID'], $button );
- } else {
- $updated_service = $this->create_custom_button( $button );
- }
-
- // We'll allow the request to continue if a failure occurred, but
- // log it for the response
- if ( false === $updated_service ) {
- $success = false;
- } else {
- $updated[] = $this->format_sharing_button( $updated_service );
- }
- }
-
- return array(
- 'success' => $success,
- 'updated' => $updated
- );
- }
-
-}
-
-new WPCOM_JSON_API_Update_Sharing_Button_Endpoint( array(
- 'description' => 'Create a new custom sharing button.',
- 'group' => '__do_not_document',
- 'stat' => 'sharing-buttons:new',
- 'method' => 'POST',
- 'path' => '/sites/%s/sharing-buttons/new',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'request_format' => array(
- 'name' => '(string) The name for your custom sharing button, used as a label on the button itself',
- 'URL' => '(string) The URL to use for share links, including optional placeholders (%post_id%, %post_title%, %post_slug%, %post_url%, %post_full_url%, %post_excerpt%, %post_tags%, %home_url%)',
- 'icon' => '(string) The full URL to a 16x16 icon to display on the sharing button',
- 'enabled' => '(bool) Is the button currently enabled for the site?',
- 'visibility' => '(string) If enabled, the visibility of the sharing button, either "visible" (default) or "hidden"',
- ),
- 'response_format' => array(
- 'ID' => '(string) Sharing button ID',
- 'name' => '(string) Sharing button name, used as a label on the button itself',
- 'shortname' => '(string) A generated short name for the sharing button',
- 'URL' => '(string) The URL pattern defined for a custom sharing button',
- 'icon' => '(string) URL to the 16x16 icon defined for a custom sharing button',
- 'genericon' => '(string) Icon character in Genericons icon set',
- 'custom' => '(bool) Is the button a user-created custom sharing button?',
- 'enabled' => '(bool) Is the button currently enabled for the site?',
- 'visibility' => '(string) If enabled, the current visibility of the sharing button, either "visible" or "hidden"',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/30434183/sharing-buttons/new/',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'name' => 'Custom',
- 'URL' => 'https://www.wordpress.com/%post_name%',
- 'icon' => 'https://en.wordpress.com/i/stats-icon.gif',
- 'enabled' => true,
- 'visibility' => 'visible'
- )
- ),
- 'example_response' => '{
- "ID": "custom-123456789",
- "name": "Custom",
- "shortname": "custom",
- "url": "https://www.wordpress.com/%post_name%",
- "icon": "https://en.wordpress.com/i/stats-icon.gif",
- "custom": true,
- "enabled": true,
- "visibility": "visible"
-}'
-) );
-
-new WPCOM_JSON_API_Update_Sharing_Button_Endpoint( array(
- 'description' => 'Edit a sharing button.',
- 'group' => '__do_not_document',
- 'stat' => 'sharing-buttons:1:POST',
- 'method' => 'POST',
- 'path' => '/sites/%s/sharing-buttons/%s',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$button_id' => '(string) The button ID',
- ),
- 'request_format' => array(
- 'name' => '(string) Only if a custom sharing button, a new name used as a label on the button itself',
- 'URL' => '(string) Only if a custom sharing button, the URL to use for share links, including optional placeholders (%post_title%, %post_url%, %post_full_url%, %post_excerpt%, %post_tags%)',
- 'icon' => '(string) Only if a custom sharing button, the full URL to a 16x16 icon to display on the sharing button',
- 'enabled' => '(bool) Is the button currently enabled for the site?',
- 'visibility' => '(string) If enabled, the visibility of the sharing button, either "visible" (default) or "hidden"',
- ),
- 'response_format' => array(
- 'ID' => '(string) Sharing button ID',
- 'name' => '(string) Sharing button name, used as a label on the button itself',
- 'shortname' => '(string) A generated short name for the sharing button',
- 'URL' => '(string) The URL pattern defined for a custom sharing button',
- 'icon' => '(string) URL to the 16x16 icon defined for a custom sharing button',
- 'genericon' => '(string) Icon character in Genericons icon set',
- 'custom' => '(bool) Is the button a user-created custom sharing button?',
- 'enabled' => '(bool) Is the button currently enabled for the site?',
- 'visibility' => '(string) If enabled, the current visibility of the sharing button, either "visible" or "hidden"',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/30434183/sharing-buttons/custom-123456789/',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'enabled' => false,
- )
- ),
- 'example_response' => '{
- "ID": "custom-123456789",
- "name": "Custom",
- "shortname": "custom",
- "custom": true,
- "enabled": false,
- "icon": "https://en.wordpress.com/i/stats-icon.gif",
- "url": "https://www.wordpress.com/%post_name%"
-}'
-) );
-
-class WPCOM_JSON_API_Update_Sharing_Button_Endpoint extends WPCOM_JSON_API_Sharing_Button_Endpoint {
-
- // POST /sites/%s/sharing-buttons/new -> $blog_id
- // POST /sites/%s/sharing-buttons/%s -> $blog_id, $button_id
- public function callback( $path = '', $blog_id = 0, $button_id = 0 ) {
- $new = $this->api->ends_with( $path, '/new' );
- $input = $this->input();
-
- // Validate request
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $continue = $this->setup();
- if ( is_wp_error( $continue ) ) {
- return $continue;
- }
-
- $validation_error = $this->validate_button_input( $input, $new );
- if ( is_wp_error( $validation_error ) ) {
- return $validation_error;
- }
-
- // Update or create button
- if ( $new ) {
- $updated_service = $this->create_custom_button( $input );
- } else {
- $updated_service = $this->update_button( $button_id, $input );
- }
-
- if ( false === $updated_service ) {
- return new WP_Error( 'invalid_request', sprintf( 'The sharing button was not %s', $new ? 'created' : 'updated' ), 400 );
- } else if ( is_wp_error( $updated_service ) ) {
- return $updated_service;
- } else {
- return $this->format_sharing_button( $updated_service );
- }
- }
-
-}
-
-new WPCOM_JSON_API_Delete_Sharing_Button_Endpoint( array(
- 'description' => 'Delete a custom sharing button.',
- 'group' => '__do_not_document',
- 'stat' => 'sharing-buttons:1:delete',
- 'method' => 'POST',
- 'path' => '/sites/%s/sharing-buttons/%s/delete',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$button_id' => '(string) The button ID',
- ),
- 'response_format' => array(
- 'ID' => '(int) The ID of the deleted sharing button',
- 'success' => '(bool) Confirmation that the sharing button has been removed'
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/30434183/sharing-buttons/custom-123456789/delete',
- 'example_request_data' => array(
- 'headers' => array( 'authorization' => 'Bearer YOUR_API_TOKEN' ),
- ),
- 'example_response' => '{
- "ID": "custom-123456789",
- "success": "true"
-}'
-) );
-
-class WPCOM_JSON_API_Delete_Sharing_Button_Endpoint extends WPCOM_JSON_API_Sharing_Button_Endpoint {
-
- // POST /sites/%s/sharing-buttons/%s/delete -> $blog_id, $button_id
- public function callback( $path = '', $blog_id = 0, $button_id = 0 ) {
- // Validate request
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- $continue = $this->setup();
- if ( is_wp_error( $continue ) ) {
- return $continue;
- }
-
- // Find existing button
- $all_buttons = $this->sharing_service->get_all_services_blog();
- if ( ! array_key_exists( $button_id, $all_buttons ) ) {
- // Button doesn't exist
- return new WP_Error( 'not_found', 'The specified sharing button was not found', 404 );
- }
-
- // Verify button is custom
- if ( ! is_a( $all_buttons[ $button_id ], 'Share_Custom' ) ) {
- return new WP_error( 'invalid_request', 'Only custom sharing buttons can be deleted', 400 );
- }
-
- $success = $this->sharing_service->delete_service( $button_id );
- return array(
- 'ID' => $button_id,
- 'success' => $success
- );
- }
-
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-endpoint.php
deleted file mode 100644
index d55a7e9b..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-endpoint.php
+++ /dev/null
@@ -1,863 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Site_Settings_Endpoint( array(
- 'description' => 'Get detailed settings information about a site.',
- 'group' => '__do_not_document',
- 'stat' => 'sites:X',
- 'max_version' => '1.1',
- 'new_version' => '1.2',
- 'method' => 'GET',
- 'path' => '/sites/%s/settings',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'query_parameters' => array(
- 'context' => false,
- ),
-
- 'response_format' => WPCOM_JSON_API_Site_Settings_Endpoint::$site_format,
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/settings',
-) );
-
-new WPCOM_JSON_API_Site_Settings_Endpoint( array(
- 'description' => 'Update settings for a site.',
- 'group' => '__do_not_document',
- 'stat' => 'sites:X',
- 'max_version' => '1.1',
- 'new_version' => '1.2',
- 'method' => 'POST',
- 'path' => '/sites/%s/settings',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'request_format' => array(
- 'blogname' => '(string) Blog name',
- 'blogdescription' => '(string) Blog description',
- 'default_pingback_flag' => '(bool) Notify blogs linked from article?',
- 'default_ping_status' => '(bool) Allow link notifications from other blogs?',
- 'default_comment_status' => '(bool) Allow comments on new articles?',
- 'blog_public' => '(string) Site visibility; -1: private, 0: discourage search engines, 1: allow search engines',
- 'jetpack_sync_non_public_post_stati' => '(bool) allow sync of post and pages with non-public posts stati',
- 'jetpack_relatedposts_enabled' => '(bool) Enable related posts?',
- 'jetpack_relatedposts_show_headline' => '(bool) Show headline in related posts?',
- 'jetpack_relatedposts_show_thumbnails' => '(bool) Show thumbnails in related posts?',
- 'jetpack_protect_whitelist' => '(array) List of IP addresses to whitelist',
- 'jetpack_search_enabled' => '(bool) Enable Jetpack Search',
- 'jetpack_search_supported' => '(bool) Jetpack Search is supported',
- 'infinite_scroll' => '(bool) Support infinite scroll of posts?',
- 'default_category' => '(int) Default post category',
- 'default_post_format' => '(string) Default post format',
- 'require_name_email' => '(bool) Require comment authors to fill out name and email?',
- 'comment_registration' => '(bool) Require users to be registered and logged in to comment?',
- 'close_comments_for_old_posts' => '(bool) Automatically close comments on old posts?',
- 'close_comments_days_old' => '(int) Age at which to close comments',
- 'thread_comments' => '(bool) Enable threaded comments?',
- 'thread_comments_depth' => '(int) Depth to thread comments',
- 'page_comments' => '(bool) Break comments into pages?',
- 'comments_per_page' => '(int) Number of comments to display per page',
- 'default_comments_page' => '(string) newest|oldest Which page of comments to display first',
- 'comment_order' => '(string) asc|desc Order to display comments within page',
- 'comments_notify' => '(bool) Email me when someone comments?',
- 'moderation_notify' => '(bool) Email me when a comment is helf for moderation?',
- 'social_notifications_like' => '(bool) Email me when someone likes my post?',
- 'social_notifications_reblog' => '(bool) Email me when someone reblogs my post?',
- 'social_notifications_subscribe' => '(bool) Email me when someone follows my blog?',
- 'comment_moderation' => '(bool) Moderate comments for manual approval?',
- 'comment_whitelist' => '(bool) Moderate comments unless author has a previously-approved comment?',
- 'comment_max_links' => '(int) Moderate comments that contain X or more links',
- 'moderation_keys' => '(string) Words or phrases that trigger comment moderation, one per line',
- 'blacklist_keys' => '(string) Words or phrases that mark comment spam, one per line',
- 'lang_id' => '(int) ID for language blog is written in',
- 'wga' => '(array) Google Analytics Settings',
- 'disabled_likes' => '(bool) Are likes globally disabled (they can still be turned on per post)?',
- 'disabled_reblogs' => '(bool) Are reblogs disabled on posts?',
- 'jetpack_comment_likes_enabled' => '(bool) Are comment likes enabled for all comments?',
- 'sharing_button_style' => '(string) Style to use for sharing buttons (icon-text, icon, text, or official)',
- 'sharing_label' => '(string) Label to use for sharing buttons, e.g. "Share this:"',
- 'sharing_show' => '(string|array:string) Post type or array of types where sharing buttons are to be displayed',
- 'sharing_open_links' => '(string) Link target for sharing buttons (same or new)',
- 'twitter_via' => '(string) Twitter username to include in tweets when people share using the Twitter button',
- 'jetpack-twitter-cards-site-tag' => '(string) The Twitter username of the owner of the site\'s domain.',
- 'eventbrite_api_token' => '(int) The Keyring token ID for an Eventbrite token to associate with the site',
- 'timezone_string' => '(string) PHP-compatible timezone string like \'UTC-5\'',
- 'gmt_offset' => '(int) Site offset from UTC in hours',
- 'date_format' => '(string) PHP Date-compatible date format',
- 'time_format' => '(string) PHP Date-compatible time format',
- 'start_of_week' => '(int) Starting day of week (0 = Sunday, 6 = Saturday)',
- 'jetpack_testimonial' => '(bool) Whether testimonial custom post type is enabled for the site',
- 'jetpack_testimonial_posts_per_page' => '(int) Number of testimonials to show per page',
- 'jetpack_portfolio' => '(bool) Whether portfolio custom post type is enabled for the site',
- 'jetpack_portfolio_posts_per_page' => '(int) Number of portfolio projects to show per page',
- Jetpack_SEO_Utils::FRONT_PAGE_META_OPTION => '(string) The seo meta description for the site.',
- Jetpack_SEO_Titles::TITLE_FORMATS_OPTION => '(array) SEO meta title formats. Allowed keys: front_page, posts, pages, groups, archives',
- 'verification_services_codes' => '(array) Website verification codes. Allowed keys: google, pinterest, bing, yandex',
- 'markdown_supported' => '(bool) Whether markdown is supported for this site',
- 'wpcom_publish_posts_with_markdown' => '(bool) Whether markdown is enabled for posts',
- 'wpcom_publish_comments_with_markdown' => '(bool) Whether markdown is enabled for comments',
- 'amp_is_enabled' => '(bool) Whether AMP is enabled for this site',
- 'site_icon' => '(int) Media attachment ID to use as site icon. Set to zero or an otherwise empty value to clear',
- 'api_cache' => '(bool) Turn on/off the Jetpack JSON API cache',
- 'posts_per_page' => '(int) Number of posts to show on blog pages',
- 'posts_per_rss' => '(int) Number of posts to show in the RSS feed',
- 'rss_use_excerpt' => '(bool) Whether the RSS feed will use post excerpts',
- ),
-
- 'response_format' => array(
- 'updated' => '(array)'
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/settings',
-) );
-
-class WPCOM_JSON_API_Site_Settings_Endpoint extends WPCOM_JSON_API_Endpoint {
-
- public static $site_format = array(
- 'ID' => '(int) Site ID',
- 'name' => '(string) Title of site',
- 'description' => '(string) Tagline or description of site',
- 'URL' => '(string) Full URL to the site',
- 'lang' => '(string) Primary language code of the site',
- 'locale_variant' => '(string) Locale variant code for the site, if set',
- 'settings' => '(array) An array of options/settings for the blog. Only viewable by users with post editing rights to the site.',
- );
-
- // GET /sites/%s/settings
- // POST /sites/%s/settings
- function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- // Source & include the infinite scroll compatibility files prior to loading theme functions
- add_filter( 'restapi_theme_action_copy_dirs', array( 'WPCOM_JSON_API_Site_Settings_Endpoint', 'wpcom_restapi_copy_theme_plugin_actions' ) );
- $this->load_theme_functions();
- }
-
- if ( ! is_user_logged_in() ) {
- return new WP_Error( 'Unauthorized', 'You must be logged-in to manage settings.', 401 );
- } else if ( ! current_user_can( 'manage_options' ) ) {
- return new WP_Error( 'Forbidden', 'You do not have the capability to manage settings for this site.', 403 );
- }
-
- if ( 'GET' === $this->api->method ) {
- /**
- * Fires on each GET request to a specific endpoint.
- *
- * @module json-api
- *
- * @since 3.2.0
- *
- * @param string sites.
- */
- do_action( 'wpcom_json_api_objects', 'sites' );
- return $this->get_settings_response();
- } else if ( 'POST' === $this->api->method ) {
- return $this->update_settings();
- } else {
- return new WP_Error( 'bad_request', 'An unsupported request method was used.' );
- }
-
- }
-
- /**
- * Includes additional theme-specific files to be included in REST API theme
- * context loading action copying.
- *
- * @see WPCOM_JSON_API_Endpoint#load_theme_functions
- * @see the_neverending_home_page_theme_support
- */
- function wpcom_restapi_copy_theme_plugin_actions( $copy_dirs ) {
- $theme_name = get_stylesheet();
- $default_file_name = WP_CONTENT_DIR . "/mu-plugins/infinity/themes/{$theme_name}.php";
-
- /**
- * Filter the path to the Infinite Scroll compatibility file.
- *
- * @module infinite-scroll
- *
- * @since 2.0.0
- *
- * @param string $str IS compatibility file path.
- * @param string $theme_name Theme name.
- */
- $customization_file = apply_filters( 'infinite_scroll_customization_file', $default_file_name, $theme_name );
-
- if ( is_readable( $customization_file ) ) {
- require_once $customization_file;
- $copy_dirs[] = $customization_file;
- }
-
- return $copy_dirs;
- }
-
- /**
- * Determines whether jetpack_relatedposts is supported
- *
- * @return bool
- */
- public function jetpack_relatedposts_supported() {
- $wpcom_related_posts_theme_blacklist = array(
- 'Expound',
- 'Traveler',
- 'Opti',
- 'Currents',
- );
- return ( ! in_array( wp_get_theme()->get( 'Name' ), $wpcom_related_posts_theme_blacklist ) );
- }
-
- /**
- * Returns category details
- *
- * @return array
- */
- public function get_category_details( $category ) {
- return array(
- 'value' => $category->term_id,
- 'name' => $category->name
- );
- }
-
- /**
- * Returns an option value as the result of the callable being applied to
- * it if a value is set, otherwise null.
- *
- * @param string $option_name Option name
- * @param callable $cast_callable Callable to invoke on option value
- * @return int|null Numeric option value or null
- */
- protected function get_cast_option_value_or_null( $option_name, $cast_callable ) {
- $option_value = get_option( $option_name, null );
- if ( is_null( $option_value ) ) {
- return $option_value;
- }
-
- return call_user_func( $cast_callable, $option_value );
- }
-
- /**
- * Collects the necessary information to return for a get settings response.
- *
- * @return array
- */
- public function get_settings_response() {
-
- // Allow update in later versions
- /**
- * Filter the structure of site settings to return.
- *
- * @module json-api
- *
- * @since 3.9.3
- *
- * @param array $site_format Data structure.
- */
- $response_format = apply_filters( 'site_settings_site_format', self::$site_format );
-
- $blog_id = (int) $this->api->get_blog_id_for_output();
- /** This filter is documented in class.json-api-endpoints.php */
- $is_jetpack = true === apply_filters( 'is_jetpack_site', false, $blog_id );
-
- foreach ( array_keys( $response_format ) as $key ) {
-
- // refactoring to change lang parameter to locale in 1.2
- if ( $lang_or_locale = $this->get_locale( $key ) ) {
- $response[$key] = $lang_or_locale;
- continue;
- }
-
- switch ( $key ) {
- case 'ID' :
- $response[$key] = $blog_id;
- break;
- case 'name' :
- $response[$key] = (string) htmlspecialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES );
- break;
- case 'description' :
- $response[$key] = (string) htmlspecialchars_decode( get_bloginfo( 'description' ), ENT_QUOTES );
- break;
- case 'URL' :
- $response[$key] = (string) home_url();
- break;
- case 'locale_variant':
- if ( function_exists( 'wpcom_l10n_get_blog_locale_variant' ) ) {
- $blog_locale_variant = wpcom_l10n_get_blog_locale_variant();
- if ( $blog_locale_variant ) {
- $response[$key] = $blog_locale_variant;
- }
- }
- break;
- case 'settings':
-
- $jetpack_relatedposts_options = Jetpack_Options::get_option( 'relatedposts', array() );
- // If the option's enabled key is NOT SET, it is considered enabled by the plugin
- if ( ! isset( $jetpack_relatedposts_options['enabled'] ) ) {
- $jetpack_relatedposts_options['enabled'] = true;
- }
-
- if ( method_exists( 'Jetpack', 'is_module_active' ) ) {
- $jetpack_relatedposts_options[ 'enabled' ] = Jetpack::is_module_active( 'related-posts' );
- }
-
- $jetpack_search_supported = false;
- if ( function_exists( 'wpcom_is_jetpack_search_supported' ) ) {
- $jetpack_search_supported = wpcom_is_jetpack_search_supported( $blog_id );
- }
-
- $jetpack_search_active = false;
- if ( method_exists( 'Jetpack', 'is_module_active' ) ) {
- $jetpack_search_active = Jetpack::is_module_active( 'search' );
- }
- if ( function_exists( 'is_jetpack_module_active' ) ) {
- $jetpack_search_active = is_jetpack_module_active( 'search', $blog_id );
- }
-
- // array_values() is necessary to ensure the array starts at index 0.
- $post_categories = array_values(
- array_map(
- array( $this, 'get_category_details' ),
- get_categories( array( 'hide_empty' => false ) )
- )
- );
-
- $api_cache = $is_jetpack ? (bool) get_option( 'jetpack_api_cache_enabled' ) : true;
-
- $response[ $key ] = array(
-
- // also exists as "options"
- 'admin_url' => get_admin_url(),
- 'default_ping_status' => (bool) ( 'closed' != get_option( 'default_ping_status' ) ),
- 'default_comment_status' => (bool) ( 'closed' != get_option( 'default_comment_status' ) ),
-
- // new stuff starts here
- 'blog_public' => (int) get_option( 'blog_public' ),
- 'jetpack_sync_non_public_post_stati' => (bool) Jetpack_Options::get_option( 'sync_non_public_post_stati' ),
- 'jetpack_relatedposts_allowed' => (bool) $this->jetpack_relatedposts_supported(),
- 'jetpack_relatedposts_enabled' => (bool) $jetpack_relatedposts_options[ 'enabled' ],
- 'jetpack_relatedposts_show_headline' => (bool) isset( $jetpack_relatedposts_options[ 'show_headline' ] ) ? $jetpack_relatedposts_options[ 'show_headline' ] : false,
- 'jetpack_relatedposts_show_thumbnails' => (bool) isset( $jetpack_relatedposts_options[ 'show_thumbnails' ] ) ? $jetpack_relatedposts_options[ 'show_thumbnails' ] : false,
- 'jetpack_search_enabled' => (bool) $jetpack_search_active,
- 'jetpack_search_supported'=> (bool) $jetpack_search_supported,
- 'default_category' => (int) get_option('default_category'),
- 'post_categories' => (array) $post_categories,
- 'default_post_format' => get_option( 'default_post_format' ),
- 'default_pingback_flag' => (bool) get_option( 'default_pingback_flag' ),
- 'require_name_email' => (bool) get_option( 'require_name_email' ),
- 'comment_registration' => (bool) get_option( 'comment_registration' ),
- 'close_comments_for_old_posts' => (bool) get_option( 'close_comments_for_old_posts' ),
- 'close_comments_days_old' => (int) get_option( 'close_comments_days_old' ),
- 'thread_comments' => (bool) get_option( 'thread_comments' ),
- 'thread_comments_depth' => (int) get_option( 'thread_comments_depth' ),
- 'page_comments' => (bool) get_option( 'page_comments' ),
- 'comments_per_page' => (int) get_option( 'comments_per_page' ),
- 'default_comments_page' => get_option( 'default_comments_page' ),
- 'comment_order' => get_option( 'comment_order' ),
- 'comments_notify' => (bool) get_option( 'comments_notify' ),
- 'moderation_notify' => (bool) get_option( 'moderation_notify' ),
- 'social_notifications_like' => ( "on" == get_option( 'social_notifications_like' ) ),
- 'social_notifications_reblog' => ( "on" == get_option( 'social_notifications_reblog' ) ),
- 'social_notifications_subscribe' => ( "on" == get_option( 'social_notifications_subscribe' ) ),
- 'comment_moderation' => (bool) get_option( 'comment_moderation' ),
- 'comment_whitelist' => (bool) get_option( 'comment_whitelist' ),
- 'comment_max_links' => (int) get_option( 'comment_max_links' ),
- 'moderation_keys' => get_option( 'moderation_keys' ),
- 'blacklist_keys' => get_option( 'blacklist_keys' ),
- 'lang_id' => defined( 'IS_WPCOM' ) && IS_WPCOM
- ? get_lang_id_by_code( wpcom_l10n_get_blog_locale_variant( $blog_id, true ) )
- : get_option( 'lang_id' ),
- 'wga' => $this->get_google_analytics(),
- 'disabled_likes' => (bool) get_option( 'disabled_likes' ),
- 'disabled_reblogs' => (bool) get_option( 'disabled_reblogs' ),
- 'jetpack_comment_likes_enabled' => (bool) get_option( 'jetpack_comment_likes_enabled', false ),
- 'twitter_via' => (string) get_option( 'twitter_via' ),
- 'jetpack-twitter-cards-site-tag' => (string) get_option( 'jetpack-twitter-cards-site-tag' ),
- 'eventbrite_api_token' => $this->get_cast_option_value_or_null( 'eventbrite_api_token', 'intval' ),
- 'gmt_offset' => get_option( 'gmt_offset' ),
- 'timezone_string' => get_option( 'timezone_string' ),
- 'date_format' => get_option( 'date_format' ),
- 'time_format' => get_option( 'time_format' ),
- 'start_of_week' => get_option( 'start_of_week' ),
- 'jetpack_testimonial' => (bool) get_option( 'jetpack_testimonial', '0' ),
- 'jetpack_testimonial_posts_per_page' => (int) get_option( 'jetpack_testimonial_posts_per_page', '10' ),
- 'jetpack_portfolio' => (bool) get_option( 'jetpack_portfolio', '0' ),
- 'jetpack_portfolio_posts_per_page' => (int) get_option( 'jetpack_portfolio_posts_per_page', '10' ),
- 'markdown_supported' => true,
- 'site_icon' => $this->get_cast_option_value_or_null( 'site_icon', 'intval' ),
- Jetpack_SEO_Utils::FRONT_PAGE_META_OPTION => get_option( Jetpack_SEO_Utils::FRONT_PAGE_META_OPTION, '' ),
- Jetpack_SEO_Titles::TITLE_FORMATS_OPTION => get_option( Jetpack_SEO_Titles::TITLE_FORMATS_OPTION, array() ),
- 'amp_is_supported' => (bool) function_exists( 'wpcom_is_amp_supported' ) && wpcom_is_amp_supported( $blog_id ),
- 'amp_is_enabled' => (bool) function_exists( 'wpcom_is_amp_enabled' ) && wpcom_is_amp_enabled( $blog_id ),
- 'api_cache' => $api_cache,
- 'posts_per_page' => (int) get_option( 'posts_per_page' ),
- 'posts_per_rss' => (int) get_option( 'posts_per_rss' ),
- 'rss_use_excerpt' => (bool) get_option( 'rss_use_excerpt' ),
- );
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $response[ $key ]['wpcom_publish_posts_with_markdown'] = (bool) WPCom_Markdown::is_posting_enabled();
- $response[ $key ]['wpcom_publish_comments_with_markdown'] = (bool) WPCom_Markdown::is_commenting_enabled();
-
- // WPCOM-specific Infinite Scroll Settings
- if ( is_callable( array( 'The_Neverending_Home_Page', 'get_settings' ) ) ) {
- /**
- * Clear the cached copy of widget info so it's pulled fresh from blog options.
- * It was primed during the initial load under the __REST API site__'s context.
- * @see wp_get_sidebars_widgets https://core.trac.wordpress.org/browser/trunk/src/wp-includes/widgets.php?rev=42374#L931
- */
- $GLOBALS['_wp_sidebars_widgets'] = array();
-
- $infinite_scroll_settings = The_Neverending_Home_Page::get_settings();
- $response[ $key ]['infinite_scroll'] = get_option( 'infinite_scroll', true ) && $infinite_scroll_settings->type === 'scroll';
- if ( $infinite_scroll_settings->footer_widgets || 'click' == $infinite_scroll_settings->requested_type ) {
- // The blog has footer widgets -- infinite scroll is blocked
- $response[ $key ]['infinite_scroll_blocked'] = 'footer';
- } else {
- $response[ $key ]['infinite_scroll_blocked'] = false;
- }
- }
- }
-
- //allow future versions of this endpoint to support additional settings keys
- /**
- * Filter the current site setting in the returned response.
- *
- * @module json-api
- *
- * @since 3.9.3
- *
- * @param mixed $response_item A single site setting.
- */
- $response[ $key ] = apply_filters( 'site_settings_endpoint_get', $response[ $key ] );
-
- if ( class_exists( 'Sharing_Service' ) ) {
- $ss = new Sharing_Service();
- $sharing = $ss->get_global_options();
- $response[ $key ]['sharing_button_style'] = (string) $sharing['button_style'];
- $response[ $key ]['sharing_label'] = (string) $sharing['sharing_label'];
- $response[ $key ]['sharing_show'] = (array) $sharing['show'];
- $response[ $key ]['sharing_open_links'] = (string) $sharing['open_links'];
- }
-
- if ( function_exists( 'jetpack_protect_format_whitelist' ) ) {
- $response[ $key ]['jetpack_protect_whitelist'] = jetpack_protect_format_whitelist();
- }
-
- if ( ! current_user_can( 'edit_posts' ) )
- unset( $response[$key] );
- break;
- }
- }
-
- return $response;
-
- }
-
- protected function get_locale( $key ) {
- if ( 'lang' == $key ) {
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- return (string) get_blog_lang_code();
- } else {
- return get_locale();
- }
- }
-
- return false;
- }
-
- protected function get_google_analytics () {
- $option_name = defined( 'IS_WPCOM' ) && IS_WPCOM ? 'wga' : 'jetpack_wga';
- return get_option( $option_name );
- }
-
- /**
- * Updates site settings for authorized users
- *
- * @return array
- */
- public function update_settings() {
- // $this->input() retrieves posted arguments whitelisted and casted to the $request_format
- // specs that get passed in when this class is instantiated
- $input = $this->input();
- $unfiltered_input = $this->input( false, false );
- /**
- * Filters the settings to be updated on the site.
- *
- * @module json-api
- *
- * @since 3.6.0
- * @since 6.1.1 Added $unfiltered_input parameter.
- *
- * @param array $input Associative array of site settings to be updated.
- * Cast and filtered based on documentation.
- * @param array $unfiltered_input Associative array of site settings to be updated.
- * Neither cast nor filtered. Contains raw input.
- */
- $input = apply_filters( 'rest_api_update_site_settings', $input, $unfiltered_input );
-
- $blog_id = get_current_blog_id();
-
- $jetpack_relatedposts_options = array();
- $sharing_options = array();
- $updated = array();
-
- foreach ( $input as $key => $value ) {
-
- if ( ! is_array( $value ) ) {
- $value = trim( $value );
- }
- $value = wp_unslash( $value );
-
- switch ( $key ) {
-
- case 'default_ping_status':
- case 'default_comment_status':
- // settings are stored as closed|open
- $coerce_value = ( $value ) ? 'open' : 'closed';
- if ( update_option( $key, $coerce_value ) ) {
- $updated[ $key ] = $value;
- };
- break;
- case 'jetpack_protect_whitelist':
- if ( function_exists( 'jetpack_protect_save_whitelist' ) ) {
- $result = jetpack_protect_save_whitelist( $value );
- if ( is_wp_error( $result ) ) {
- return $result;
- }
- $updated[ $key ] = jetpack_protect_format_whitelist();
- }
- break;
- case 'jetpack_sync_non_public_post_stati':
- Jetpack_Options::update_option( 'sync_non_public_post_stati', $value );
- break;
- case 'jetpack_search_enabled':
- if ( ! method_exists( 'Jetpack', 'activate_module' ) ) {
- break;
- }
- $is_wpcom = defined( 'IS_WPCOM' ) && IS_WPCOM;
- if ( $value ) {
- $jetpack_search_update_success = $is_wpcom
- ? Jetpack::activate_module( $blog_id, 'search' )
- : Jetpack::activate_module( 'search', false, false );
- } else {
- $jetpack_search_update_success = $is_wpcom
- ? Jetpack::deactivate_module( $blog_id, 'search' )
- : Jetpack::deactivate_module( 'search' );
- }
- $updated[ $key ] = (bool) $value;
- break;
- case 'jetpack_relatedposts_enabled':
- case 'jetpack_relatedposts_show_thumbnails':
- case 'jetpack_relatedposts_show_headline':
- if ( ! $this->jetpack_relatedposts_supported() ) {
- break;
- }
- if ( 'jetpack_relatedposts_enabled' === $key && method_exists( 'Jetpack', 'is_module_active' ) && $this->jetpack_relatedposts_supported() ) {
- $before_action = Jetpack::is_module_active('related-posts');
- if ( $value ) {
- Jetpack::activate_module( 'related-posts', false, false );
- } else {
- Jetpack::deactivate_module( 'related-posts' );
- }
- $after_action = Jetpack::is_module_active('related-posts');
- if ( $after_action == $before_action ) {
- break;
- }
- }
- $just_the_key = substr( $key, 21 );
- $jetpack_relatedposts_options[ $just_the_key ] = $value;
- break;
-
- case 'social_notifications_like':
- case 'social_notifications_reblog':
- case 'social_notifications_subscribe':
- // settings are stored as on|off
- $coerce_value = ( $value ) ? 'on' : 'off';
- if ( update_option( $key, $coerce_value ) ) {
- $updated[ $key ] = $value;
- }
- break;
- case 'wga':
- case 'jetpack_wga':
- if ( ! isset( $value['code'] ) || ! preg_match( '/^$|^UA-[\d-]+$/i', $value['code'] ) ) {
- return new WP_Error( 'invalid_code', 'Invalid UA ID' );
- }
-
- $is_wpcom = defined( 'IS_WPCOM' ) && IS_WPCOM;
- $option_name = $is_wpcom ? 'wga' : 'jetpack_wga';
-
- $wga = get_option( $option_name, array() );
- $wga['code'] = $value['code']; // maintain compatibility with wp-google-analytics
-
- /**
- * Allow newer versions of this endpoint to filter in additional fields for Google Analytics
- *
- * @since 5.4.0
- *
- * @param array $wga Associative array of existing Google Analytics settings.
- * @param array $value Associative array of new Google Analytics settings passed to the endpoint.
- */
- $wga = apply_filters( 'site_settings_update_wga', $wga, $value );
-
- if ( update_option( $option_name, $wga ) ) {
- $updated[ $key ] = $value;
- }
-
- $enabled_or_disabled = $wga['code'] ? 'enabled' : 'disabled';
-
- /** This action is documented in modules/widgets/social-media-icons.php */
- do_action( 'jetpack_bump_stats_extras', 'google-analytics', $enabled_or_disabled );
-
- if ( $is_wpcom ) {
- $business_plugins = WPCOM_Business_Plugins::instance();
- $business_plugins->activate_plugin( 'wp-google-analytics' );
- }
- break;
-
- case 'jetpack_testimonial':
- case 'jetpack_portfolio':
- case 'jetpack_comment_likes_enabled':
- // settings are stored as 1|0
- $coerce_value = (int) $value;
- if ( update_option( $key, $coerce_value ) ) {
- $updated[ $key ] = (bool) $value;
- }
- break;
-
- case 'jetpack_testimonial_posts_per_page':
- case 'jetpack_portfolio_posts_per_page':
- // settings are stored as numeric
- $coerce_value = (int) $value;
- if ( update_option( $key, $coerce_value ) ) {
- $updated[ $key ] = $coerce_value;
- }
- break;
-
- // Sharing options
- case 'sharing_button_style':
- case 'sharing_show':
- case 'sharing_open_links':
- $sharing_options[ preg_replace( '/^sharing_/', '', $key ) ] = $value;
- break;
- case 'sharing_label':
- $sharing_options[ $key ] = $value;
- break;
-
- // Keyring token option
- case 'eventbrite_api_token':
- // These options can only be updated for sites hosted on WordPress.com
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- if ( empty( $value ) || WPCOM_JSON_API::is_falsy( $value ) ) {
- if ( delete_option( $key ) ) {
- $updated[ $key ] = null;
- }
- } else if ( update_option( $key, $value ) ) {
- $updated[ $key ] = (int) $value;
- }
- }
- break;
-
- case 'api_cache':
- if ( empty( $value ) || WPCOM_JSON_API::is_falsy( $value ) ) {
- if ( delete_option( 'jetpack_api_cache_enabled' ) ) {
- $updated[ $key ] = false;
- }
- } else if ( update_option( 'jetpack_api_cache_enabled', true ) ) {
- $updated[ $key ] = true;
- }
- break;
-
- case 'timezone_string':
- // Map UTC+- timezones to gmt_offsets and set timezone_string to empty
- // https://github.com/WordPress/WordPress/blob/4.4.2/wp-admin/options.php#L175
- if ( ! empty( $value ) && preg_match( '/^UTC[+-]/', $value ) ) {
- $gmt_offset = preg_replace( '/UTC\+?/', '', $value );
- if ( update_option( 'gmt_offset', $gmt_offset ) ) {
- $updated[ 'gmt_offset' ] = $gmt_offset;
- }
-
- $value = '';
- }
-
- // Always set timezone_string either with the given value or with an
- // empty string
- if ( update_option( $key, $value ) ) {
- $updated[ $key ] = $value;
- }
- break;
-
- case 'date_format':
- case 'time_format':
- // settings are stored as strings
- if ( update_option( $key, sanitize_text_field( $value ) ) ) {
- $updated[ $key ] = $value;
- }
- break;
-
- case 'start_of_week':
- // setting is stored as int in 0-6 range (days of week)
- $coerce_value = (int) $value;
- $limit_value = ( $coerce_value >= 0 && $coerce_value <= 6 ) ? $coerce_value : 0;
- if ( update_option( $key, $limit_value ) ) {
- $updated[ $key ] = $limit_value;
- }
- break;
-
- case 'site_icon':
- // settings are stored as deletable numeric (all empty
- // values as delete intent), validated as media image
- if ( empty( $value ) || WPCOM_JSON_API::is_falsy( $value ) ) {
- /**
- * Fallback mechanism to clear a third party site icon setting. Can be used
- * to unset the option when an API request instructs the site to remove the site icon.
- *
- * @module json-api
- *
- * @since 4.10
- */
- if ( delete_option( $key ) || apply_filters( 'rest_api_site_icon_cleared', false ) ) {
- $updated[ $key ] = null;
- }
- } else if ( is_numeric( $value ) ) {
- $coerce_value = (int) $value;
- if ( wp_attachment_is_image( $coerce_value ) && update_option( $key, $coerce_value ) ) {
- $updated[ $key ] = $coerce_value;
- }
- }
- break;
-
- case Jetpack_SEO_Utils::FRONT_PAGE_META_OPTION:
- if ( ! Jetpack_SEO_Utils::is_enabled_jetpack_seo() && ! Jetpack_SEO_Utils::has_grandfathered_front_page_meta() ) {
- return new WP_Error( 'unauthorized', __( 'SEO tools are not enabled for this site.', 'jetpack' ), 403 );
- }
-
- if ( ! is_string( $value ) ) {
- return new WP_Error( 'invalid_input', __( 'Invalid SEO meta description value.', 'jetpack' ), 400 );
- }
-
- $new_description = Jetpack_SEO_Utils::update_front_page_meta_description( $value );
-
- if ( ! empty( $new_description ) ) {
- $updated[ $key ] = $new_description;
- }
- break;
-
- case Jetpack_SEO_Titles::TITLE_FORMATS_OPTION:
- if ( ! Jetpack_SEO_Utils::is_enabled_jetpack_seo() ) {
- return new WP_Error( 'unauthorized', __( 'SEO tools are not enabled for this site.', 'jetpack' ), 403 );
- }
-
- if ( ! Jetpack_SEO_Titles::are_valid_title_formats( $value ) ) {
- return new WP_Error( 'invalid_input', __( 'Invalid SEO title format.', 'jetpack' ), 400 );
- }
-
- $new_title_formats = Jetpack_SEO_Titles::update_title_formats( $value );
-
- if ( ! empty( $new_title_formats ) ) {
- $updated[ $key ] = $new_title_formats;
- }
- break;
-
- case 'verification_services_codes':
- $verification_codes = jetpack_verification_validate( $value );
-
- if ( update_option( 'verification_services_codes', $verification_codes ) ) {
- $updated[ $key ] = $verification_codes;
- }
- break;
-
- case 'wpcom_publish_posts_with_markdown':
- case 'wpcom_publish_comments_with_markdown':
- $coerce_value = (bool) $value;
- if ( update_option( $key, $coerce_value ) ) {
- $updated[ $key ] = $coerce_value;
- }
- break;
-
- case 'amp_is_enabled':
- if ( function_exists( 'wpcom_update_amp_enabled' ) ) {
- $saved = wpcom_update_amp_enabled( $blog_id, $value );
- if ( $saved ) {
- $updated[ $key ] = (bool) $value;
- }
- }
- break;
-
- case 'rss_use_excerpt':
- update_option( 'rss_use_excerpt', (int)(bool) $value );
- break;
-
- default:
- //allow future versions of this endpoint to support additional settings keys
- if ( has_filter( 'site_settings_endpoint_update_' . $key ) ) {
- /**
- * Filter current site setting value to be updated.
- *
- * @module json-api
- *
- * @since 3.9.3
- *
- * @param mixed $response_item A single site setting value.
- */
- $value = apply_filters( 'site_settings_endpoint_update_' . $key, $value );
- $updated[ $key ] = $value;
- break;
- }
-
- // no worries, we've already whitelisted and casted arguments above
- if ( update_option( $key, $value ) ) {
- $updated[ $key ] = $value;
- }
- }
- }
-
- if ( count( $jetpack_relatedposts_options ) ) {
- // track new jetpack_relatedposts options against old
- $old_relatedposts_options = Jetpack_Options::get_option( 'relatedposts' );
- if ( Jetpack_Options::update_option( 'relatedposts', $jetpack_relatedposts_options ) ) {
- foreach ( $jetpack_relatedposts_options as $key => $value ) {
- if ( isset( $old_relatedposts_options[ $key ] ) && $value !== $old_relatedposts_options[ $key ] ) {
- $updated[ 'jetpack_relatedposts_' . $key ] = $value;
- }
- }
- }
- }
-
- if ( ! empty( $sharing_options ) && class_exists( 'Sharing_Service' ) ) {
- $ss = new Sharing_Service();
-
- // Merge current values with updated, since Sharing_Service expects
- // all values to be included when updating
- $current_sharing_options = $ss->get_global_options();
- foreach ( $current_sharing_options as $key => $val ) {
- if ( ! isset( $sharing_options[ $key ] ) ) {
- $sharing_options[ $key ] = $val;
- }
- }
-
- $updated_social_options = $ss->set_global_options( $sharing_options );
-
- if ( isset( $input['sharing_button_style'] ) ) {
- $updated['sharing_button_style'] = (string) $updated_social_options['button_style'];
- }
- if ( isset( $input['sharing_label'] ) ) {
- // Sharing_Service won't report label as updated if set to default
- $updated['sharing_label'] = (string) $sharing_options['sharing_label'];
- }
- if ( isset( $input['sharing_show'] ) ) {
- $updated['sharing_show'] = (array) $updated_social_options['show'];
- }
- if ( isset( $input['sharing_open_links'] ) ) {
- $updated['sharing_open_links'] = (string) $updated_social_options['open_links'];
- }
- }
-
- return array(
- 'updated' => $updated
- );
-
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-v1-2-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-v1-2-endpoint.php
deleted file mode 100644
index 989bba2e..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-v1-2-endpoint.php
+++ /dev/null
@@ -1,164 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Site_Settings_V1_2_Endpoint( array(
- 'description' => 'Get detailed settings information about a site.',
- 'group' => '__do_not_document',
- 'stat' => 'sites:X',
- 'min_version' => '1.2',
- 'method' => 'GET',
- 'path' => '/sites/%s/settings',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'query_parameters' => array(
- 'context' => false,
- ),
-
- 'response_format' => WPCOM_JSON_API_Site_Settings_Endpoint::$site_format,
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.2/sites/en.blog.wordpress.com/settings?pretty=1',
-) );
-
-new WPCOM_JSON_API_Site_Settings_V1_2_Endpoint( array(
- 'description' => 'Update settings for a site.',
- 'group' => '__do_not_document',
- 'stat' => 'sites:X',
- 'min_version' => '1.2',
- 'method' => 'POST',
- 'path' => '/sites/%s/settings',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'request_format' => array(
- 'blogname' => '(string) Blog name',
- 'blogdescription' => '(string) Blog description',
- 'default_pingback_flag' => '(bool) Notify blogs linked from article?',
- 'default_ping_status' => '(bool) Allow link notifications from other blogs?',
- 'default_comment_status' => '(bool) Allow comments on new articles?',
- 'blog_public' => '(string) Site visibility; -1: private, 0: discourage search engines, 1: allow search engines',
- 'jetpack_sync_non_public_post_stati' => '(bool) allow sync of post and pages with non-public posts stati',
- 'jetpack_relatedposts_enabled' => '(bool) Enable related posts?',
- 'jetpack_relatedposts_show_headline' => '(bool) Show headline in related posts?',
- 'jetpack_relatedposts_show_thumbnails' => '(bool) Show thumbnails in related posts?',
- 'jetpack_search_enabled' => '(bool) Enable Jetpack Search',
- 'jetpack_search_supported' => '(bool) Jetpack Search supported',
- 'jetpack_protect_whitelist' => '(array) List of IP addresses to whitelist',
- 'infinite_scroll' => '(bool) Support infinite scroll of posts?',
- 'default_category' => '(int) Default post category',
- 'default_post_format' => '(string) Default post format',
- 'require_name_email' => '(bool) Require comment authors to fill out name and email?',
- 'comment_registration' => '(bool) Require users to be registered and logged in to comment?',
- 'close_comments_for_old_posts' => '(bool) Automatically close comments on old posts?',
- 'close_comments_days_old' => '(int) Age at which to close comments',
- 'thread_comments' => '(bool) Enable threaded comments?',
- 'thread_comments_depth' => '(int) Depth to thread comments',
- 'page_comments' => '(bool) Break comments into pages?',
- 'comments_per_page' => '(int) Number of comments to display per page',
- 'default_comments_page' => '(string) newest|oldest Which page of comments to display first',
- 'comment_order' => '(string) asc|desc Order to display comments within page',
- 'comments_notify' => '(bool) Email me when someone comments?',
- 'moderation_notify' => '(bool) Email me when a comment is helf for moderation?',
- 'social_notifications_like' => '(bool) Email me when someone likes my post?',
- 'social_notifications_reblog' => '(bool) Email me when someone reblogs my post?',
- 'social_notifications_subscribe' => '(bool) Email me when someone follows my blog?',
- 'comment_moderation' => '(bool) Moderate comments for manual approval?',
- 'comment_whitelist' => '(bool) Moderate comments unless author has a previously-approved comment?',
- 'comment_max_links' => '(int) Moderate comments that contain X or more links',
- 'moderation_keys' => '(string) Words or phrases that trigger comment moderation, one per line',
- 'blacklist_keys' => '(string) Words or phrases that mark comment spam, one per line',
- 'lang_id' => '(int) ID for language blog is written in',
- 'locale' => '(string) locale code for language blog is written in',
- 'wga' => '(array) Google Analytics Settings',
- 'disabled_likes' => '(bool) Are likes globally disabled (they can still be turned on per post)?',
- 'disabled_reblogs' => '(bool) Are reblogs disabled on posts?',
- 'jetpack_comment_likes_enabled' => '(bool) Are comment likes enabled for all comments?',
- 'sharing_button_style' => '(string) Style to use for sharing buttons (icon-text, icon, text, or official)',
- 'sharing_label' => '(string) Label to use for sharing buttons, e.g. "Share this:"',
- 'sharing_show' => '(string|array:string) Post type or array of types where sharing buttons are to be displayed',
- 'sharing_open_links' => '(string) Link target for sharing buttons (same or new)',
- 'twitter_via' => '(string) Twitter username to include in tweets when people share using the Twitter button',
- 'jetpack-twitter-cards-site-tag' => '(string) The Twitter username of the owner of the site\'s domain.',
- 'eventbrite_api_token' => '(int) The Keyring token ID for an Eventbrite token to associate with the site',
- 'timezone_string' => '(string) PHP-compatible timezone string like \'UTC-5\'',
- 'gmt_offset' => '(int) Site offset from UTC in hours',
- 'date_format' => '(string) PHP Date-compatible date format',
- 'time_format' => '(string) PHP Date-compatible time format',
- 'start_of_week' => '(int) Starting day of week (0 = Sunday, 6 = Saturday)',
- 'jetpack_testimonial' => '(bool) Whether testimonial custom post type is enabled for the site',
- 'jetpack_testimonial_posts_per_page' => '(int) Number of testimonials to show per page',
- 'jetpack_portfolio' => '(bool) Whether portfolio custom post type is enabled for the site',
- 'jetpack_portfolio_posts_per_page' => '(int) Number of portfolio projects to show per page',
- Jetpack_SEO_Utils::FRONT_PAGE_META_OPTION => '(string) The SEO meta description for the site.',
- Jetpack_SEO_Titles::TITLE_FORMATS_OPTION => '(array) SEO meta title formats. Allowed keys: front_page, posts, pages, groups, archives',
- 'verification_services_codes' => '(array) Website verification codes. Allowed keys: google, pinterest, bing, yandex',
- 'amp_is_enabled' => '(bool) Whether AMP is enabled for this site',
- 'podcasting_archive' => '(string) The post category, if any, used for publishing podcasts',
- 'site_icon' => '(int) Media attachment ID to use as site icon. Set to zero or an otherwise empty value to clear',
- 'api_cache' => '(bool) Turn on/off the Jetpack JSON API cache',
- 'posts_per_page' => '(int) Number of posts to show on blog pages',
- 'posts_per_rss' => '(int) Number of posts to show in the RSS feed',
- 'rss_use_excerpt' => '(bool) Whether the RSS feed will use post excerpts',
- ),
-
- 'response_format' => array(
- 'updated' => '(array)'
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/settings?pretty=1',
-) );
-
-class WPCOM_JSON_API_Site_Settings_V1_2_Endpoint extends WPCOM_JSON_API_Site_Settings_Endpoint {
-
- public static $site_format = array(
- 'ID' => '(int) Site ID',
- 'name' => '(string) Title of site',
- 'description' => '(string) Tagline or description of site',
- 'URL' => '(string) Full URL to the site',
- 'locale' => '(string) Locale code of the site',
- 'locale_variant' => '(string) Locale variant code for the site, if set',
- 'settings' => '(array) An array of options/settings for the blog. Only viewable by users with post editing rights to the site.',
- );
-
-
- function callback( $path = '', $blog_id = 0 ) {
- add_filter( 'site_settings_endpoint_update_locale', array( $this, 'update_locale' ) );
- add_filter( 'site_settings_endpoint_get', array( $this, 'return_locale' ) );
- add_filter( 'site_settings_site_format', array( $this, 'site_format' ) );
- return parent::callback( $path, $blog_id );
- }
-
-
- protected function get_locale( $key ) {
- if ( 'locale' == $key ) {
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- return (string) get_blog_lang_code();
- } else {
- return get_locale();
- }
- }
-
- return false;
- }
-
- public function return_locale( $settings ) {
- return $settings + array( 'locale' => $this->get_locale( 'locale' ) );
- }
-
- public function update_locale( $value ) {
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $lang_id = get_lang_id_by_code( $value );
- if ( ! empty( $lang_id ) ) {
- if ( update_option( 'lang_id', $lang_id ) ) {
- return true;
- }
- }
- }
- return false;
- }
-
- public function site_format( $format ) {
- return self::$site_format;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-v1-3-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-v1-3-endpoint.php
deleted file mode 100644
index 52a3a148..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-v1-3-endpoint.php
+++ /dev/null
@@ -1,157 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Site_Settings_V1_3_Endpoint( array(
- 'description' => 'Get detailed settings information about a site.',
- 'group' => '__do_not_document',
- 'stat' => 'sites:X',
- 'min_version' => '1.3',
- 'method' => 'GET',
- 'path' => '/sites/%s/settings',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'query_parameters' => array(
- 'context' => false,
- ),
-
- 'response_format' => WPCOM_JSON_API_Site_Settings_Endpoint::$site_format,
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.3/sites/en.blog.wordpress.com/settings?pretty=1',
-) );
-
-new WPCOM_JSON_API_Site_Settings_V1_3_Endpoint( array(
- 'description' => 'Update settings for a site.',
- 'group' => '__do_not_document',
- 'stat' => 'sites:X',
- 'min_version' => '1.3',
- 'method' => 'POST',
- 'path' => '/sites/%s/settings',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'request_format' => array(
- 'blogname' => '(string) Blog name',
- 'blogdescription' => '(string) Blog description',
- 'default_pingback_flag' => '(bool) Notify blogs linked from article?',
- 'default_ping_status' => '(bool) Allow link notifications from other blogs?',
- 'default_comment_status' => '(bool) Allow comments on new articles?',
- 'blog_public' => '(string) Site visibility; -1: private, 0: discourage search engines, 1: allow search engines',
- 'jetpack_sync_non_public_post_stati' => '(bool) allow sync of post and pages with non-public posts stati',
- 'jetpack_relatedposts_enabled' => '(bool) Enable related posts?',
- 'jetpack_relatedposts_show_headline' => '(bool) Show headline in related posts?',
- 'jetpack_relatedposts_show_thumbnails' => '(bool) Show thumbnails in related posts?',
- 'jetpack_search_enabled' => '(bool) Enable Jetpack Search',
- 'jetpack_search_supported' => '(bool) Jetpack Search supported',
- 'jetpack_protect_whitelist' => '(array) List of IP addresses to whitelist',
- 'infinite_scroll' => '(bool) Support infinite scroll of posts?',
- 'default_category' => '(int) Default post category',
- 'default_post_format' => '(string) Default post format',
- 'require_name_email' => '(bool) Require comment authors to fill out name and email?',
- 'comment_registration' => '(bool) Require users to be registered and logged in to comment?',
- 'close_comments_for_old_posts' => '(bool) Automatically close comments on old posts?',
- 'close_comments_days_old' => '(int) Age at which to close comments',
- 'thread_comments' => '(bool) Enable threaded comments?',
- 'thread_comments_depth' => '(int) Depth to thread comments',
- 'page_comments' => '(bool) Break comments into pages?',
- 'comments_per_page' => '(int) Number of comments to display per page',
- 'default_comments_page' => '(string) newest|oldest Which page of comments to display first',
- 'comment_order' => '(string) asc|desc Order to display comments within page',
- 'comments_notify' => '(bool) Email me when someone comments?',
- 'moderation_notify' => '(bool) Email me when a comment is helf for moderation?',
- 'social_notifications_like' => '(bool) Email me when someone likes my post?',
- 'social_notifications_reblog' => '(bool) Email me when someone reblogs my post?',
- 'social_notifications_subscribe' => '(bool) Email me when someone follows my blog?',
- 'comment_moderation' => '(bool) Moderate comments for manual approval?',
- 'comment_whitelist' => '(bool) Moderate comments unless author has a previously-approved comment?',
- 'comment_max_links' => '(int) Moderate comments that contain X or more links',
- 'moderation_keys' => '(string) Words or phrases that trigger comment moderation, one per line',
- 'blacklist_keys' => '(string) Words or phrases that mark comment spam, one per line',
- 'lang_id' => '(int) ID for language blog is written in',
- 'locale' => '(string) locale code for language blog is written in',
- 'wga' => '(array) Google Analytics Settings',
- 'disabled_likes' => '(bool) Are likes globally disabled (they can still be turned on per post)?',
- 'disabled_reblogs' => '(bool) Are reblogs disabled on posts?',
- 'jetpack_comment_likes_enabled' => '(bool) Are comment likes enabled for all comments?',
- 'sharing_button_style' => '(string) Style to use for sharing buttons (icon-text, icon, text, or official)',
- 'sharing_label' => '(string) Label to use for sharing buttons, e.g. "Share this:"',
- 'sharing_show' => '(string|array:string) Post type or array of types where sharing buttons are to be displayed',
- 'sharing_open_links' => '(string) Link target for sharing buttons (same or new)',
- 'twitter_via' => '(string) Twitter username to include in tweets when people share using the Twitter button',
- 'jetpack-twitter-cards-site-tag' => '(string) The Twitter username of the owner of the site\'s domain.',
- 'eventbrite_api_token' => '(int) The Keyring token ID for an Eventbrite token to associate with the site',
- 'timezone_string' => '(string) PHP-compatible timezone string like \'UTC-5\'',
- 'gmt_offset' => '(int) Site offset from UTC in hours',
- 'date_format' => '(string) PHP Date-compatible date format',
- 'time_format' => '(string) PHP Date-compatible time format',
- 'start_of_week' => '(int) Starting day of week (0 = Sunday, 6 = Saturday)',
- 'jetpack_testimonial' => '(bool) Whether testimonial custom post type is enabled for the site',
- 'jetpack_testimonial_posts_per_page' => '(int) Number of testimonials to show per page',
- 'jetpack_portfolio' => '(bool) Whether portfolio custom post type is enabled for the site',
- 'jetpack_portfolio_posts_per_page' => '(int) Number of portfolio projects to show per page',
- Jetpack_SEO_Utils::FRONT_PAGE_META_OPTION => '(string) The SEO meta description for the site.',
- Jetpack_SEO_Titles::TITLE_FORMATS_OPTION => '(array) SEO meta title formats. Allowed keys: front_page, posts, pages, groups, archives',
- 'verification_services_codes' => '(array) Website verification codes. Allowed keys: google, pinterest, bing, yandex',
- 'amp_is_enabled' => '(bool) Whether AMP is enabled for this site',
- 'podcasting_archive' => '(string) The post category, if any, used for publishing podcasts',
- 'site_icon' => '(int) Media attachment ID to use as site icon. Set to zero or an otherwise empty value to clear',
- 'api_cache' => '(bool) Turn on/off the Jetpack JSON API cache',
- 'posts_per_page' => '(int) Number of posts to show on blog pages',
- 'posts_per_rss' => '(int) Number of posts to show in the RSS feed',
- 'rss_use_excerpt' => '(bool) Whether the RSS feed will use post excerpts',
- ),
-
- 'response_format' => array(
- 'updated' => '(array)'
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/settings?pretty=1',
-) );
-
-class WPCOM_JSON_API_Site_Settings_V1_3_Endpoint extends WPCOM_JSON_API_Site_Settings_V1_2_Endpoint {
- protected function get_defaults() {
- return array(
- 'code' => '',
- 'anonymize_ip' => false,
- 'ec_track_purchases' => false,
- 'ec_track_add_to_cart' => false
- );
- }
-
- function callback( $path = '', $blog_id = 0 ) {
- add_filter( 'site_settings_endpoint_get', array( $this, 'filter_site_settings_endpoint_get' ) );
- add_filter( 'site_settings_update_wga', array( $this, 'filter_update_google_analytics' ), 10, 2 );
- return parent::callback( $path, $blog_id );
- }
-
- /**
- * Filter the parent's response to include the fields
- * added to 1.3 (and their defaults)
- */
- public function filter_site_settings_endpoint_get( $settings ) {
- $option_name = defined( 'IS_WPCOM' ) && IS_WPCOM ? 'wga' : 'jetpack_wga';
- $option = get_option( $option_name, array() );
- $settings[ 'wga' ] = wp_parse_args( $option, $this->get_defaults() );
- return $settings;
- }
-
- /**
- * Filter the parent's response to consume our new fields
- */
- public function filter_update_google_analytics( $wga, $new_values ) {
- $wga_keys = array_keys( $this->get_defaults() );
- foreach ( $wga_keys as $wga_key ) {
- // Skip code since the parent class has handled it
- if ( 'code' === $wga_key ) {
- continue;
- }
- // All our new keys are booleans, so let's coerce each key's value
- // before updating the value in settings
- if ( array_key_exists( $wga_key, $new_values ) ) {
- $wga[ $wga_key ] = WPCOM_JSON_API::is_truthy( $new_values[ $wga_key ] );
- }
- }
- return $wga;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-v1-4-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-v1-4-endpoint.php
deleted file mode 100644
index ab59ebcc..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-settings-v1-4-endpoint.php
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Site_Settings_V1_4_Endpoint( array(
- 'description' => 'Get detailed settings information about a site.',
- 'group' => '__do_not_document',
- 'stat' => 'sites:X',
- 'min_version' => '1.4',
- 'method' => 'GET',
- 'path' => '/sites/%s/settings',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'query_parameters' => array(
- 'context' => false,
- ),
-
- 'response_format' => WPCOM_JSON_API_Site_Settings_Endpoint::$site_format,
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.4/sites/en.blog.wordpress.com/settings?pretty=1',
-) );
-
-new WPCOM_JSON_API_Site_Settings_V1_4_Endpoint( array(
- 'description' => 'Update settings for a site.',
- 'group' => '__do_not_document',
- 'stat' => 'sites:X',
- 'min_version' => '1.4',
- 'method' => 'POST',
- 'path' => '/sites/%s/settings',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'request_format' => array(
- 'blogname' => '(string) Blog name',
- 'blogdescription' => '(string) Blog description',
- 'default_pingback_flag' => '(bool) Notify blogs linked from article?',
- 'default_ping_status' => '(bool) Allow link notifications from other blogs?',
- 'default_comment_status' => '(bool) Allow comments on new articles?',
- 'blog_public' => '(string) Site visibility; -1: private, 0: discourage search engines, 1: allow search engines',
- 'jetpack_sync_non_public_post_stati' => '(bool) allow sync of post and pages with non-public posts stati',
- 'jetpack_relatedposts_enabled' => '(bool) Enable related posts?',
- 'jetpack_relatedposts_show_headline' => '(bool) Show headline in related posts?',
- 'jetpack_relatedposts_show_thumbnails' => '(bool) Show thumbnails in related posts?',
- 'jetpack_search_enabled' => '(bool) Enable Jetpack Search',
- 'jetpack_search_supported' => '(bool) Jetpack Search supported',
- 'jetpack_protect_whitelist' => '(array) List of IP addresses to whitelist',
- 'infinite_scroll' => '(bool) Support infinite scroll of posts?',
- 'default_category' => '(int) Default post category',
- 'default_post_format' => '(string) Default post format',
- 'require_name_email' => '(bool) Require comment authors to fill out name and email?',
- 'comment_registration' => '(bool) Require users to be registered and logged in to comment?',
- 'close_comments_for_old_posts' => '(bool) Automatically close comments on old posts?',
- 'close_comments_days_old' => '(int) Age at which to close comments',
- 'thread_comments' => '(bool) Enable threaded comments?',
- 'thread_comments_depth' => '(int) Depth to thread comments',
- 'page_comments' => '(bool) Break comments into pages?',
- 'comments_per_page' => '(int) Number of comments to display per page',
- 'default_comments_page' => '(string) newest|oldest Which page of comments to display first',
- 'comment_order' => '(string) asc|desc Order to display comments within page',
- 'comments_notify' => '(bool) Email me when someone comments?',
- 'moderation_notify' => '(bool) Email me when a comment is helf for moderation?',
- 'social_notifications_like' => '(bool) Email me when someone likes my post?',
- 'social_notifications_reblog' => '(bool) Email me when someone reblogs my post?',
- 'social_notifications_subscribe' => '(bool) Email me when someone follows my blog?',
- 'comment_moderation' => '(bool) Moderate comments for manual approval?',
- 'comment_whitelist' => '(bool) Moderate comments unless author has a previously-approved comment?',
- 'comment_max_links' => '(int) Moderate comments that contain X or more links',
- 'moderation_keys' => '(string) Words or phrases that trigger comment moderation, one per line',
- 'blacklist_keys' => '(string) Words or phrases that mark comment spam, one per line',
- 'lang_id' => '(int) ID for language blog is written in',
- 'locale' => '(string) locale code for language blog is written in',
- 'wga' => '(array) Google Analytics Settings',
- 'disabled_likes' => '(bool) Are likes globally disabled (they can still be turned on per post)?',
- 'disabled_reblogs' => '(bool) Are reblogs disabled on posts?',
- 'jetpack_comment_likes_enabled' => '(bool) Are comment likes enabled for all comments?',
- 'sharing_button_style' => '(string) Style to use for sharing buttons (icon-text, icon, text, or official)',
- 'sharing_label' => '(string) Label to use for sharing buttons, e.g. "Share this:"',
- 'sharing_show' => '(string|array:string) Post type or array of types where sharing buttons are to be displayed',
- 'sharing_open_links' => '(string) Link target for sharing buttons (same or new)',
- 'twitter_via' => '(string) Twitter username to include in tweets when people share using the Twitter button',
- 'jetpack-twitter-cards-site-tag' => '(string) The Twitter username of the owner of the site\'s domain.',
- 'eventbrite_api_token' => '(int) The Keyring token ID for an Eventbrite token to associate with the site',
- 'timezone_string' => '(string) PHP-compatible timezone string like \'UTC-5\'',
- 'gmt_offset' => '(int) Site offset from UTC in hours',
- 'date_format' => '(string) PHP Date-compatible date format',
- 'time_format' => '(string) PHP Date-compatible time format',
- 'start_of_week' => '(int) Starting day of week (0 = Sunday, 6 = Saturday)',
- 'jetpack_testimonial' => '(bool) Whether testimonial custom post type is enabled for the site',
- 'jetpack_testimonial_posts_per_page' => '(int) Number of testimonials to show per page',
- 'jetpack_portfolio' => '(bool) Whether portfolio custom post type is enabled for the site',
- 'jetpack_portfolio_posts_per_page' => '(int) Number of portfolio projects to show per page',
- Jetpack_SEO_Utils::FRONT_PAGE_META_OPTION => '(string) The SEO meta description for the site.',
- Jetpack_SEO_Titles::TITLE_FORMATS_OPTION => '(array) SEO meta title formats. Allowed keys: front_page, posts, pages, groups, archives',
- 'verification_services_codes' => '(array) Website verification codes. Allowed keys: google, pinterest, bing, yandex',
- 'amp_is_enabled' => '(bool) Whether AMP is enabled for this site',
- 'podcasting_archive' => '(string) The post category, if any, used for publishing podcasts',
- 'site_icon' => '(int) Media attachment ID to use as site icon. Set to zero or an otherwise empty value to clear',
- 'api_cache' => '(bool) Turn on/off the Jetpack JSON API cache',
- 'posts_per_page' => '(int) Number of posts to show on blog pages',
- 'posts_per_rss' => '(int) Number of posts to show in the RSS feed',
- 'rss_use_excerpt' => '(bool) Whether the RSS feed will use post excerpts',
- ),
-
- 'response_format' => array(
- 'updated' => '(array)'
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.4/sites/en.blog.wordpress.com/settings?pretty=1',
-) );
-
-class WPCOM_JSON_API_Site_Settings_V1_4_Endpoint extends WPCOM_JSON_API_Site_Settings_V1_3_Endpoint {
- protected function get_defaults() {
- return array(
- 'code' => '',
- 'anonymize_ip' => false,
- 'ec_track_purchases' => false,
- 'ec_track_add_to_cart' => false,
- 'enh_ec_tracking' => false,
- 'enh_ec_track_remove_from_cart' => false,
- 'enh_ec_track_prod_impression' => false,
- 'enh_ec_track_prod_click' => false,
- 'enh_ec_track_prod_detail_view' => false,
- 'enh_ec_track_checkout_started' => false,
- );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-user-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-user-endpoint.php
deleted file mode 100644
index b20fa6c2..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-site-user-endpoint.php
+++ /dev/null
@@ -1,221 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Site_User_Endpoint( array(
- 'description' => 'Get details of a user of a site by ID.',
- 'group' => '__do_not_document', //'users'
- 'stat' => 'sites:1:user',
- 'method' => 'GET',
- 'path' => '/sites/%s/users/%d',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$user_id' => '(int) User ID',
- ),
- 'response_format' => WPCOM_JSON_API_Site_User_Endpoint::$user_format,
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/30434183/user/23',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_response' => '{
- "ID": 18342963,
- "login": "binarysmash",
- "email": false,
- "name": "binarysmash",
- "URL": "http:\/\/binarysmash.wordpress.com",
- "avatar_URL": "http:\/\/0.gravatar.com\/avatar\/a178ebb1731d432338e6bb0158720fcc?s=96&d=identicon&r=G",
- "profile_URL": "http:\/\/en.gravatar.com\/binarysmash",
- "roles": [ "administrator" ]
- }'
-) );
-
-new WPCOM_JSON_API_Site_User_Endpoint( array(
- 'description' => 'Get details of a user of a site by login.',
- 'group' => 'users',
- 'stat' => 'sites:1:user',
- 'method' => 'GET',
- 'path' => '/sites/%s/users/login:%s',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID or domain.',
- '$user_id' => '(string) The user\'s login.',
- ),
- 'response_format' => WPCOM_JSON_API_Site_User_Endpoint::$user_format,
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/30434183/user/login:binarysmash',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_response' => '{
- "ID": 18342963,
- "login": "binarysmash",
- "email": false,
- "name": "binarysmash",
- "URL": "http:\/\/binarysmash.wordpress.com",
- "avatar_URL": "http:\/\/0.gravatar.com\/avatar\/a178ebb1731d432338e6bb0158720fcc?s=96&d=identicon&r=G",
- "profile_URL": "http:\/\/en.gravatar.com\/binarysmash",
- "roles": [ "administrator" ]
- }'
-) );
-
-new WPCOM_JSON_API_Site_User_Endpoint( array(
- 'description' => 'Update details of a user of a site.',
- 'group' => 'users',
- 'stat' => 'sites:1:user',
- 'method' => 'POST',
- 'path' => '/sites/%s/users/%d',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID or domain.',
- '$user_id' => '(int) The user\'s ID.',
- ),
- 'request_format' => WPCOM_JSON_API_Site_User_Endpoint::$user_format,
- 'response_format' => WPCOM_JSON_API_Site_User_Endpoint::$user_format,
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/30434183/user/23',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'roles' => array(
- array(
- 'administrator',
- )
- ),
- 'first_name' => 'Rocco',
- 'last_name' => 'Tripaldi',
- )
- ),
- 'example_response' => '{
- "ID": 18342963,
- "login": "binarysmash",
- "email": false,
- "name": "binarysmash",
- "URL": "http:\/\/binarysmash.wordpress.com",
- "avatar_URL": "http:\/\/0.gravatar.com\/avatar\/a178ebb1731d432338e6bb0158720fcc?s=96&d=identicon&r=G",
- "profile_URL": "http:\/\/en.gravatar.com\/binarysmash",
- "roles": [ "administrator" ]
- }'
-) );
-
-class WPCOM_JSON_API_Site_User_Endpoint extends WPCOM_JSON_API_Endpoint {
-
- public static $user_format = array(
- 'ID' => '(int) The ID of the user',
- 'login' => '(string) The login username of the user',
- 'email' => '(string) The email of the user',
- 'name' => '(string) The name to display for the user',
- 'first_name' => '(string) The first name of the user',
- 'last_name' => '(string) The last name of the user',
- 'nice_name' => '(string) The nice_name to display for the user',
- 'URL' => '(string) The primary blog of the user',
- 'avatar_URL' => '(url) Gravatar image URL',
- 'profile_URL' => '(url) Gravatar Profile URL',
- 'site_ID' => '(int) ID of the user\'s primary blog',
- 'roles' => '(array|string) The role or roles of the user',
- );
-
- // /sites/%s/users/%d -> $blog_id, $user_id
- function callback( $path = '', $blog_id = 0, $user_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
- if ( ! current_user_can_for_blog( $blog_id, 'list_users' ) ) {
- return new WP_Error( 'unauthorized', 'User cannot view users for specified site', 403 );
- }
-
- // Get the user by ID or login
- $get_by = false !== strpos( $path, '/users/login:' ) ? 'login' : 'id';
- $user = get_user_by( $get_by, $user_id );
-
- if ( ! $user ) {
- return new WP_Error( 'unknown_user', 'Unknown user', 404 );
- }
-
- if ( ! is_user_member_of_blog( $user->ID, $blog_id ) ) {
- return new WP_Error( 'unknown_user_for_site', 'Unknown user for site', 404 );
- }
-
- if ( 'GET' === $this->api->method ) {
- return $this->get_user( $user->ID );
- } else if ( 'POST' === $this->api->method ) {
- if ( ! current_user_can_for_blog( $blog_id, 'promote_users' ) ) {
- return new WP_Error( 'unauthorized_no_promote_cap', 'User cannot promote users for specified site', 403 );
- }
- return $this->update_user( $user_id, $blog_id );
- } else {
- return new WP_Error( 'bad_request', 'An unsupported request method was used.' );
- }
- }
-
- public function get_user( $user_id ) {
- $the_user = $this->get_author( $user_id, true );
- if ( $the_user && ! is_wp_error( $the_user ) ) {
- $userdata = get_userdata( $user_id );
- $the_user->roles = ! is_wp_error( $userdata ) ? array_values( $userdata->roles ) : array();
- }
-
- return $the_user;
- }
-
- /**
- * Updates user data
- *
- * @return array
- */
- public function update_user( $user_id, $blog_id ) {
- $input = $this->input();
- $user['ID'] = $user_id;
- $is_wpcom = defined( 'IS_WPCOM' ) && IS_WPCOM;
-
- if ( get_current_user_id() == $user_id && isset( $input['roles'] ) ) {
- return new WP_Error( 'unauthorized', 'You cannot change your own role', 403 );
- }
-
- if ( $is_wpcom && $user_id !== get_current_user_id() && $user_id == wpcom_get_blog_owner( $blog_id ) ) {
- return new WP_Error( 'unauthorized_edit_owner', 'Current user can not edit blog owner', 403 );
- }
-
- if ( ! $is_wpcom ) {
- foreach ( $input as $key => $value ) {
- if ( ! is_array( $value ) ) {
- $value = trim( $value );
- }
- $value = wp_unslash( $value );
- switch ( $key ) {
- case 'first_name':
- case 'last_name':
- $user[ $key ] = $value;
- break;
- case 'display_name':
- case 'name':
- $user[ 'display_name' ] = $value;
- break;
- }
- }
- }
-
- if ( isset( $input[ 'roles' ] ) ) {
- // For now, we only use the first role in the array.
- if ( is_array( $input['roles'] ) ) {
- $user['role'] = $input['roles'][0];
- } else if ( is_string( $input['roles'] ) ) {
- $user['role'] = $input['roles'];
- } else {
- return new WP_Error( 'invalid_input', __( 'The roles property must be a string or an array.', 'jetpack' ), 400 );
- }
-
- $editable_roles = array_keys( get_editable_roles() );
- if ( ! in_array( $user['role'], $editable_roles ) ) {
- return new WP_Error( 'invalid_input', sprintf( __( '%s is not a valid role.', 'jetpack' ), $editable_roles ), 400 );
- }
- }
-
- $result = wp_update_user( $user );
- if ( is_wp_error( $result ) ) {
- return $result;
- }
- return $this->get_user( $user_id );
- }
-
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-taxonomy-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-taxonomy-endpoint.php
deleted file mode 100644
index 312fa195..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-taxonomy-endpoint.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-abstract class WPCOM_JSON_API_Taxonomy_Endpoint extends WPCOM_JSON_API_Endpoint {
- public $category_object_format = array(
- 'ID' => '(int) The category ID.',
- 'name' => "(string) The name of the category.",
- 'slug' => "(string) The slug of the category.",
- 'description' => '(string) The description of the category.',
- 'post_count' => "(int) The number of posts using this category.",
- 'feed_url' => '(string) The URL of the feed for this category.',
- 'parent' => "(int) The parent ID for the category.",
- 'meta' => '(object) Meta data',
- );
-
- public $tag_object_format = array(
- 'ID' => '(int) The tag ID.',
- 'name' => "(string) The name of the tag.",
- 'slug' => "(string) The slug of the tag.",
- 'description' => '(string) The description of the tag.',
- 'post_count' => "(int) The number of posts using this t.",
- 'meta' => '(object) Meta data',
- );
-
- function __construct( $args ) {
- parent::__construct( $args );
- if ( preg_match( '#/tags/#i', $this->path ) )
- $this->response_format =& $this->tag_object_format;
- else
- $this->response_format =& $this->category_object_format;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-comment-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-comment-endpoint.php
deleted file mode 100644
index d60d541f..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-comment-endpoint.php
+++ /dev/null
@@ -1,393 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Update_Comment_Endpoint( array(
- 'description' => 'Create a comment on a post.',
- 'group' => 'comments',
- 'stat' => 'posts:1:replies:new',
-
- 'method' => 'POST',
- 'path' => '/sites/%s/posts/%d/replies/new',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$post_ID' => '(int) The post ID'
- ),
-
- 'request_format' => array(
- // explicitly document all input
- 'content' => '(HTML) The comment text.',
-// @todo Should we open this up to unauthenticated requests too?
-// 'author' => '(author object) The author of the comment.',
- ),
-
- 'pass_wpcom_user_details' => true,
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/posts/843/replies/new/',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'content' => 'Your reply is very interesting. This is a reply.'
- )
- )
-) );
-
-new WPCOM_JSON_API_Update_Comment_Endpoint( array(
- 'description' => 'Create a comment as a reply to another comment.',
- 'group' => 'comments',
- 'stat' => 'comments:1:replies:new',
-
- 'method' => 'POST',
- 'path' => '/sites/%s/comments/%d/replies/new',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$comment_ID' => '(int) The comment ID'
- ),
-
- 'request_format' => array(
- 'content' => '(HTML) The comment text.',
-// @todo Should we open this up to unauthenticated requests too?
-// 'author' => '(author object) The author of the comment.',
- ),
-
- 'pass_wpcom_user_details' => true,
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/comments/29/replies/new',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'content' => 'This reply is very interesting. This is editing a comment reply via the API.',
- )
- )
-) );
-
-new WPCOM_JSON_API_Update_Comment_Endpoint( array(
- 'description' => 'Edit a comment.',
- 'group' => 'comments',
- 'stat' => 'comments:1:POST',
-
- 'method' => 'POST',
- 'path' => '/sites/%s/comments/%d',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$comment_ID' => '(int) The comment ID'
- ),
-
- 'request_format' => array(
- 'author' => "(string) The comment author's name.",
- 'author_email' => "(string) The comment author's email.",
- 'author_url' => "(string) The comment author's URL.",
- 'content' => '(HTML) The comment text.',
- 'date' => "(ISO 8601 datetime) The comment's creation time.",
- 'status' => array(
- 'approved' => 'Approve the comment.',
- 'unapproved' => 'Remove the comment from public view and send it to the moderation queue.',
- 'spam' => 'Mark the comment as spam.',
- 'unspam' => 'Unmark the comment as spam. Will attempt to set it to the previous status.',
- 'trash' => 'Send a comment to the trash if trashing is enabled (see constant: EMPTY_TRASH_DAYS).',
- 'untrash' => 'Untrash a comment. Only works when the comment is in the trash.',
- ),
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/comments/29',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'content' => 'This reply is now edited via the API.',
- 'status' => 'approved',
- )
- )
-) );
-
-new WPCOM_JSON_API_Update_Comment_Endpoint( array(
- 'description' => 'Delete a comment.',
- 'group' => 'comments',
- 'stat' => 'comments:1:delete',
-
- 'method' => 'POST',
- 'path' => '/sites/%s/comments/%d/delete',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$comment_ID' => '(int) The comment ID'
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/comments/$comment_ID/delete',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- )
- )
-) );
-
-class WPCOM_JSON_API_Update_Comment_Endpoint extends WPCOM_JSON_API_Comment_Endpoint {
- function __construct( $args ) {
- parent::__construct( $args );
- if ( $this->api->ends_with( $this->path, '/delete' ) ) {
- $this->comment_object_format['status']['deleted'] = 'The comment has been deleted permanently.';
- }
- }
-
- // /sites/%s/posts/%d/replies/new -> $blog_id, $post_id
- // /sites/%s/comments/%d/replies/new -> $blog_id, $comment_id
- // /sites/%s/comments/%d -> $blog_id, $comment_id
- // /sites/%s/comments/%d/delete -> $blog_id, $comment_id
- function callback( $path = '', $blog_id = 0, $object_id = 0 ) {
- if ( $this->api->ends_with( $path, '/new' ) )
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ), false );
- else
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( $this->api->ends_with( $path, '/delete' ) ) {
- return $this->delete_comment( $path, $blog_id, $object_id );
- } elseif ( $this->api->ends_with( $path, '/new' ) ) {
- if ( false !== strpos( $path, '/posts/' ) ) {
- return $this->new_comment( $path, $blog_id, $object_id, 0 );
- } else {
- return $this->new_comment( $path, $blog_id, 0, $object_id );
- }
- }
-
- return $this->update_comment( $path, $blog_id, $object_id );
- }
-
- // /sites/%s/posts/%d/replies/new -> $blog_id, $post_id
- // /sites/%s/comments/%d/replies/new -> $blog_id, $comment_id
- function new_comment( $path, $blog_id, $post_id, $comment_parent_id ) {
- if ( !$post_id ) {
- $comment_parent = get_comment( $comment_parent_id );
- if ( !$comment_parent_id || !$comment_parent || is_wp_error( $comment_parent ) ) {
- return new WP_Error( 'unknown_comment', 'Unknown comment', 404 );
- }
-
- $post_id = $comment_parent->comment_post_ID;
- }
-
- $post = get_post( $post_id );
- if ( !$post || is_wp_error( $post ) ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
- }
-
- if (
- -1 == get_option( 'blog_public' ) &&
- /**
- * Filter allowing non-registered users on the site to comment.
- *
- * @module json-api
- *
- * @since 3.4.0
- *
- * @param bool is_user_member_of_blog() Is the user member of the site.
- */
- ! apply_filters( 'wpcom_json_api_user_is_member_of_blog', is_user_member_of_blog() ) &&
- ! is_super_admin()
- ) {
- return new WP_Error( 'unauthorized', 'User cannot create comments', 403 );
- }
-
- if ( ! comments_open( $post->ID ) && ! current_user_can( 'edit_post', $post->ID ) ) {
- return new WP_Error( 'unauthorized', 'Comments on this post are closed', 403 );
- }
-
- $can_view = $this->user_can_view_post( $post->ID );
- if ( !$can_view || is_wp_error( $can_view ) ) {
- return $can_view;
- }
-
- $post_status = get_post_status_object( get_post_status( $post ) );
- if ( !$post_status->public && !$post_status->private ) {
- return new WP_Error( 'unauthorized', 'Comments on drafts are not allowed', 403 );
- }
-
- $args = $this->query_args();
- $input = $this->input();
- if ( !is_array( $input ) || !$input || !strlen( $input['content'] ) ) {
- return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
- }
-
- $user = wp_get_current_user();
- if ( !$user || is_wp_error( $user ) || !$user->ID ) {
- $auth_required = false;
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $auth_required = true;
- } elseif ( isset( $this->api->token_details['user'] ) ) {
- $user = (object) $this->api->token_details['user'];
- foreach ( array( 'display_name', 'user_email', 'user_url' ) as $user_datum ) {
- if ( !isset( $user->$user_datum ) ) {
- $auth_required = true;
- }
- }
- if ( !isset( $user->ID ) ) {
- $user->ID = 0;
- }
-
- // If we have a user with an external ID saved, we can use it.
- if (
- ! $auth_required
- && $user->ID
- && (
- $author = get_user_by( 'id', intval( $user->ID ) )
- )
- ) {
- $user = $author;
- }
- } else {
- $auth_required = true;
- }
-
- if ( $auth_required ) {
- return new WP_Error( 'authorization_required', 'An active access token must be used to comment.', 403 );
- }
- }
-
- $insert = array(
- 'comment_post_ID' => $post->ID,
- 'user_ID' => $user->ID,
- 'comment_author' => $user->display_name,
- 'comment_author_email' => $user->user_email,
- 'comment_author_url' => $user->user_url,
- 'comment_content' => $input['content'],
- 'comment_parent' => $comment_parent_id,
- 'comment_type' => '',
- );
-
- if ( $comment_parent_id ) {
- if ( $comment_parent->comment_approved === '0' && current_user_can( 'edit_comment', $comment_parent->comment_ID ) ) {
- wp_set_comment_status( $comment_parent->comment_ID, 'approve' );
- }
- }
-
- $this->api->trap_wp_die( 'comment_failure' );
- $comment_id = wp_new_comment( add_magic_quotes( $insert ) );
- $this->api->trap_wp_die( null );
-
- $return = $this->get_comment( $comment_id, $args['context'] );
- if ( !$return ) {
- return new WP_Error( 400, __( 'Comment cache problem?', 'jetpack' ) );
- }
- if ( is_wp_error( $return ) ) {
- return $return;
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'comments' );
- return $return;
- }
-
- // /sites/%s/comments/%d -> $blog_id, $comment_id
- function update_comment( $path, $blog_id, $comment_id ) {
- $comment = get_comment( $comment_id );
- if ( !$comment || is_wp_error( $comment ) ) {
- return new WP_Error( 'unknown_comment', 'Unknown comment', 404 );
- }
-
- if ( !current_user_can( 'edit_comment', $comment->comment_ID ) ) {
- return new WP_Error( 'unauthorized', 'User cannot edit comment', 403 );
- }
-
- $args = $this->query_args();
- $input = $this->input( false );
- if ( !is_array( $input ) || !$input ) {
- return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
- }
-
- $update = array();
- foreach ( $input as $key => $value ) {
- $update["comment_$key"] = $value;
- }
-
- $comment_status = wp_get_comment_status( $comment->comment_ID );
- if ( isset( $update['comment_status'] ) ) {
- switch ( $update['comment_status'] ) {
- case 'approved' :
- if ( 'approve' !== $comment_status ) {
- wp_set_comment_status( $comment->comment_ID, 'approve' );
- }
- break;
- case 'unapproved' :
- if ( 'hold' !== $comment_status ) {
- wp_set_comment_status( $comment->comment_ID, 'hold' );
- }
- break;
- case 'spam' :
- if ( 'spam' !== $comment_status ) {
- wp_spam_comment( $comment->comment_ID );
- }
- break;
- case 'unspam' :
- if ( 'spam' === $comment_status ) {
- wp_unspam_comment( $comment->comment_ID );
- }
- break;
- case 'trash' :
- if ( ! EMPTY_TRASH_DAYS ) {
- return new WP_Error( 'trash_disabled', 'Cannot trash comment', 403 );
- }
-
- if ( 'trash' !== $comment_status ) {
- wp_trash_comment( $comment_id );
- }
- break;
- case 'untrash' :
- if ( 'trash' === $comment_status ) {
- wp_untrash_comment( $comment->comment_ID );
- }
- break;
- default:
- $update['comment_approved'] = 1;
- break;
- }
- unset( $update['comment_status'] );
- }
-
- if ( ! empty( $update ) ) {
- $update['comment_ID'] = $comment->comment_ID;
- wp_update_comment( add_magic_quotes( $update ) );
- }
-
- $return = $this->get_comment( $comment->comment_ID, $args['context'] );
- if ( !$return || is_wp_error( $return ) ) {
- return $return;
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'comments' );
- return $return;
- }
-
- // /sites/%s/comments/%d/delete -> $blog_id, $comment_id
- function delete_comment( $path, $blog_id, $comment_id ) {
- $comment = get_comment( $comment_id );
- if ( !$comment || is_wp_error( $comment ) ) {
- return new WP_Error( 'unknown_comment', 'Unknown comment', 404 );
- }
-
- if ( !current_user_can( 'edit_comment', $comment->comment_ID ) ) { // [sic] There is no delete_comment cap
- return new WP_Error( 'unauthorized', 'User cannot delete comment', 403 );
- }
-
- $args = $this->query_args();
- $return = $this->get_comment( $comment->comment_ID, $args['context'] );
- if ( !$return || is_wp_error( $return ) ) {
- return $return;
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'comments' );
-
- wp_delete_comment( $comment->comment_ID );
- $status = wp_get_comment_status( $comment->comment_ID );
- if ( false === $status ) {
- $return['status'] = 'deleted';
- return $return;
- }
-
- return $this->get_comment( $comment->comment_ID, $args['context'] );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-customcss.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-customcss.php
deleted file mode 100644
index c67ac3e4..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-customcss.php
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-/**
- * Custom Css update endpoint
- *
- * https://public-api.wordpress.com/rest/v1.1/sites/$site/customcss/
- */
-
-new WPCOM_JSON_API_Update_CustomCss_Endpoint( array (
- 'description' => 'Set custom-css data for a site.',
- 'group' => '__do_not_document',
- 'stat' => 'customcss:1:update',
- 'method' => 'POST',
- 'min_version' => '1.1',
- 'path' => '/sites/%s/customcss',
- 'path_labels' => array(
- '$site' => '(string) Site ID or domain.',
- ),
- 'request_format' => array(
- 'css' => '(string) Optional. The raw CSS.',
- 'preprocessor' => '(string) Optional. The name of the preprocessor if any.',
- 'add_to_existing' => '(bool) Optional. False to skip the existing styles.',
- ),
- 'response_format' => array(
- 'css' => '(string) The raw CSS.',
- 'preprocessor' => '(string) The name of the preprocessor if any.',
- 'add_to_existing' => '(bool) False to skip the existing styles.',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/12345678/customcss',
- 'example_request_data' => array(
- 'headers' => array( 'authorization' => 'Bearer YOUR_API_TOKEN' ),
- 'body' => array(
- 'css' => '.stie-title { color: #fff; }',
- 'preprocessor' => 'sass'
- ),
- ),
- 'example_response' => '
- {
- "css": ".site-title { color: #fff; }",
- "preprocessor": "sass",
- "add_to_existing": "true"
- }'
-) );
-
-class WPCOM_JSON_API_Update_CustomCss_Endpoint extends WPCOM_JSON_API_Endpoint {
- /**
- * API callback.
- */
- function callback( $path = '', $blog_id = 0 ) {
- // Switch to the given blog.
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( ! current_user_can( 'edit_theme_options' ) ) {
- return new WP_Error( 'unauthorized', 'User is not authorized to access custom css', 403 );
- }
-
- $args = $this->input();
- if ( empty( $args ) || ! is_array( $args ) ) {
- return new WP_Error( 'no_data', 'No data was provided.', 400 );
- }
- $save_args = array(
- 'css' => $args['css'],
- 'preprocessor' => $args['preprocessor'],
- 'add_to_existing' => $args['add_to_existing'],
- );
- Jetpack_Custom_CSS::save( $save_args );
-
- $current = array(
- 'css' => Jetpack_Custom_CSS::get_css(),
- 'preprocessor' => Jetpack_Custom_CSS::get_preprocessor_key(),
- 'add_to_existing' => ! Jetpack_Custom_CSS::skip_stylesheet(),
- );
-
- $defaults = array(
- 'css' => '',
- 'preprocessor' => '',
- 'add_to_existing' => true,
- );
- return wp_parse_args( $current, $defaults );
- }
-}
-
-
-
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-media-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-media-endpoint.php
deleted file mode 100644
index 9b6b2536..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-media-endpoint.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Update_Media_Endpoint( array(
- 'description' => 'Edit basic information about a media item.',
- 'group' => 'media',
- 'stat' => 'media:1:POST',
- 'method' => 'POST',
- 'path' => '/sites/%s/media/%d',
- 'deprecated' => true,
- 'max_version' => '1',
- 'new_version' => '1.1',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$media_ID' => '(int) The ID of the media item',
- ),
-
- 'request_format' => array(
- 'title' => '(string) The file name.',
- 'caption' => '(string) File caption.',
- 'description' => '(HTML) Description of the file.',
- ),
-
- 'response_format' => array(
- 'id' => '(int) The ID of the media item',
- 'date' => '(ISO 8601 datetime) The date the media was uploaded',
- 'parent' => '(int) ID of the post this media is attached to',
- 'link' => '(string) URL to the file',
- 'title' => '(string) File name',
- 'caption' => '(string) User provided caption of the file',
- 'description' => '(string) Description of the file',
- 'metadata' => '(array) Array of metadata about the file, such as Exif data or sizes',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/media/446',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'title' => 'Updated Title'
- )
- )
-) );
-
-class WPCOM_JSON_API_Update_Media_Endpoint extends WPCOM_JSON_API_Endpoint {
- function callback( $path = '', $blog_id = 0, $media_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( !current_user_can( 'upload_files', $media_id ) ) {
- return new WP_Error( 'unauthorized', 'User cannot view media', 403 );
- }
-
- $item = $this->get_media_item( $media_id );
-
- if ( is_wp_error( $item ) ) {
- return new WP_Error( 'unknown_media', 'Unknown Media', 404 );
- }
-
- $input = $this->input( true );
- $insert = array();
-
- if ( !empty( $input['title'] ) ) {
- $insert['post_title'] = $input['title'];
- }
-
- if ( !empty( $input['caption'] ) )
- $insert['post_excerpt'] = $input['caption'];
-
- if ( !empty( $input['description'] ) )
- $insert['post_content'] = $input['description'];
-
- $insert['ID'] = $media_id;
- wp_update_post( (object) $insert );
-
- $item = $this->get_media_item( $media_id );
- return $item;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-media-v1-1-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-media-v1-1-endpoint.php
deleted file mode 100644
index 1284cdcb..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-media-v1-1-endpoint.php
+++ /dev/null
@@ -1,134 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Update_Media_v1_1_Endpoint( array(
- 'description' => 'Edit basic information about a media item.',
- 'group' => 'media',
- 'stat' => 'media:1:POST',
- 'min_version' => '1.1',
- 'max_version' => '1.1',
- 'method' => 'POST',
- 'path' => '/sites/%s/media/%d',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$media_ID' => '(int) The ID of the media item',
- ),
-
- 'request_format' => array(
- 'parent_id' => '(int) ID of the post this media is attached to',
- 'title' => '(string) The file name.',
- 'caption' => '(string) File caption.',
- 'description' => '(HTML) Description of the file.',
- 'alt' => "(string) Alternative text for image files.",
- 'artist' => "(string) Audio Only. Artist metadata for the audio track.",
- 'album' => "(string) Audio Only. Album metadata for the audio track.",
- ),
-
- 'response_format' => array(
- 'ID' => '(int) The ID of the media item',
- 'date' => '(ISO 8601 datetime) The date the media was uploaded',
- 'post_ID' => '(int) ID of the post this media is attached to',
- 'author_ID' => '(int) ID of the user who uploaded the media',
- 'URL' => '(string) URL to the file',
- 'guid' => '(string) Unique identifier',
- 'file' => '(string) File name',
- 'extension' => '(string) File extension',
- 'mime_type' => '(string) File mime type',
- 'title' => '(string) File name',
- 'caption' => '(string) User provided caption of the file',
- 'description' => '(string) Description of the file',
- 'alt' => '(string) Alternative text for image files.',
- 'thumbnails' => '(object) Media item thumbnail URL options',
- 'height' => '(int) (Image & video only) Height of the media item',
- 'width' => '(int) (Image & video only) Width of the media item',
- 'length' => '(int) (Video & audio only) Duration of the media item, in seconds',
- 'exif' => '(array) (Image & audio only) Exif (meta) information about the media item',
- 'videopress_guid' => '(string) (Video only) VideoPress GUID of the video when uploaded on a blog with VideoPress',
- 'videopress_processing_done' => '(bool) (Video only) If the video is uploaded on a blog with VideoPress, this will return the status of processing on the video.'
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/media/446',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'title' => 'Updated Title'
- )
- )
-) );
-
-class WPCOM_JSON_API_Update_Media_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint {
- function callback( $path = '', $blog_id = 0, $media_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( ! current_user_can( 'upload_files', $media_id ) ) {
- return new WP_Error( 'unauthorized', 'User cannot view media', 403 );
- }
-
- $item = $this->get_media_item_v1_1( $media_id );
-
- if ( is_wp_error( $item ) ) {
- return new WP_Error( 'unknown_media', 'Unknown Media', 404 );
- }
-
- $input = $this->input( true );
- $insert = array();
-
- if ( isset( $input['title'] ) ) {
- $insert['post_title'] = $input['title'];
- }
-
- if ( isset( $input['caption'] ) ) {
- $insert['post_excerpt'] = $input['caption'];
- }
-
- if ( isset( $input['description'] ) ) {
- $insert['post_content'] = $input['description'];
- }
-
- if ( isset( $input['parent_id'] ) ) {
- $insert['post_parent'] = $input['parent_id'];
- }
-
- if ( isset( $input['alt'] ) ) {
- $alt = wp_strip_all_tags( $input['alt'], true );
- update_post_meta( $media_id, '_wp_attachment_image_alt', $alt );
- }
-
- // audio only artist/album info
- if ( 0 === strpos( $item->mime_type, 'audio/' ) ) {
- $changed = false;
- $id3data = wp_get_attachment_metadata( $media_id );
-
- if ( ! is_array( $id3data ) ) {
- $changed = true;
- $id3data = array();
- }
-
- $id3_keys = array(
- 'artist' => __( 'Artist', 'jetpack' ),
- 'album' => __( 'Album', 'jetpack' )
- );
-
- foreach ( $id3_keys as $key => $label ) {
- if ( isset( $input[ $key ] ) ) {
- $changed = true;
- $id3data[ $key ] = wp_strip_all_tags( $input[ $key ], true );
- }
- }
-
- if ( $changed ) {
- wp_update_attachment_metadata( $media_id, $id3data );
- }
- }
-
- $insert['ID'] = $media_id;
- wp_update_post( (object) $insert );
-
- $item = $this->get_media_item_v1_1( $media_id );
- return $item;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-endpoint.php
deleted file mode 100644
index 80dccac6..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-endpoint.php
+++ /dev/null
@@ -1,921 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Update_Post_Endpoint( array(
- 'description' => 'Create a post.',
- 'group' => 'posts',
- 'stat' => 'posts:new',
- 'new_version' => '1.2',
- 'max_version' => '1',
- 'method' => 'POST',
- 'path' => '/sites/%s/posts/new',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'request_format' => array(
- // explicitly document all input
- 'date' => "(ISO 8601 datetime) The post's creation time.",
- 'title' => '(HTML) The post title.',
- 'content' => '(HTML) The post content.',
- 'excerpt' => '(HTML) An optional post excerpt.',
- 'slug' => '(string) The name (slug) for the post, used in URLs.',
- 'author' => '(string) The username or ID for the user to assign the post to.',
- 'publicize' => '(array|bool) True or false if the post be publicized to external services. An array of services if we only want to publicize to a select few. Defaults to true.',
- 'publicize_message' => '(string) Custom message to be publicized to external services.',
- 'status' => array(
- 'publish' => 'Publish the post.',
- 'private' => 'Privately publish the post.',
- 'draft' => 'Save the post as a draft.',
- 'pending' => 'Mark the post as pending editorial approval.',
- 'auto-draft' => 'Save a placeholder for a newly created post, with no content.',
- ),
- 'sticky' => array(
- 'false' => 'Post is not marked as sticky.',
- 'true' => 'Stick the post to the front page.',
- ),
- 'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
- 'parent' => "(int) The post ID of the new post's parent.",
- 'type' => "(string) The post type. Defaults to 'post'. Post types besides post and page need to be whitelisted using the <code>rest_api_allowed_post_types</code> filter.",
- 'categories' => "(array|string) Comma-separated list or array of categories (name or id)",
- 'tags' => "(array|string) Comma-separated list or array of tags (name or id)",
- 'format' => array_merge( array( 'default' => 'Use default post format' ), get_post_format_strings() ),
- 'featured_image' => "(string) The post ID of an existing attachment to set as the featured image. Pass an empty string to delete the existing image.",
- 'media' => "(media) An array of files to attach to the post. To upload media, the entire request should be multipart/form-data encoded. Multiple media items will be displayed in a gallery. Accepts jpg, jpeg, png, gif, pdf, doc, ppt, odt, pptx, docx, pps, ppsx, xls, xlsx, key. Audio and Video may also be available. See <code>allowed_file_types</code> in the options response of the site endpoint. <br /><br /><strong>Example</strong>:<br />" .
- "<code>curl \<br />--form 'title=Image' \<br />--form 'media[]=@/path/to/file.jpg' \<br />-H 'Authorization: BEARER your-token' \<br />'https://public-api.wordpress.com/rest/v1/sites/123/posts/new'</code>",
- 'media_urls' => "(array) An array of URLs for images to attach to a post. Sideloads the media in for a post.",
- 'metadata' => "(array) Array of metadata objects containing the following properties: `key` (metadata key), `id` (meta ID), `previous_value` (if set, the action will only occur for the provided previous value), `value` (the new value to set the meta to), `operation` (the operation to perform: `update` or `add`; defaults to `update`). All unprotected meta keys are available by default for read requests. Both unprotected and protected meta keys are avaiable for authenticated requests with proper capabilities. Protected meta keys can be made available with the <code>rest_api_allowed_public_metadata</code> filter.",
- 'comments_open' => "(bool) Should the post be open to comments? Defaults to the blog's preference.",
- 'pings_open' => "(bool) Should the post be open to comments? Defaults to the blog's preference.",
- 'likes_enabled' => "(bool) Should the post be open to likes? Defaults to the blog's preference.",
- 'sharing_enabled' => "(bool) Should sharing buttons show on this post? Defaults to true.",
- 'menu_order' => "(int) (Pages Only) the order pages should appear in. Use 0 to maintain alphabetical order.",
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/posts/new/',
-
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
-
- 'body' => array(
- 'title' => 'Hello World',
- 'content' => 'Hello. I am a test post. I was created by the API',
- 'tags' => 'tests',
- 'categories' => 'API'
- )
- )
-) );
-
-new WPCOM_JSON_API_Update_Post_Endpoint( array(
- 'description' => 'Edit a post.',
- 'group' => 'posts',
- 'stat' => 'posts:1:POST',
- 'new_version' => '1.2',
- 'max_version' => '1',
- 'method' => 'POST',
- 'path' => '/sites/%s/posts/%d',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$post_ID' => '(int) The post ID',
- ),
-
- 'request_format' => array(
- 'date' => "(ISO 8601 datetime) The post's creation time.",
- 'title' => '(HTML) The post title.',
- 'content' => '(HTML) The post content.',
- 'excerpt' => '(HTML) An optional post excerpt.',
- 'slug' => '(string) The name (slug) for the post, used in URLs.',
- 'author' => '(string) The username or ID for the user to assign the post to.',
- 'publicize' => '(array|bool) True or false if the post be publicized to external services. An array of services if we only want to publicize to a select few. Defaults to true.',
- 'publicize_message' => '(string) Custom message to be publicized to external services.',
- 'status' => array(
- 'publish' => 'Publish the post.',
- 'private' => 'Privately publish the post.',
- 'draft' => 'Save the post as a draft.',
- 'pending' => 'Mark the post as pending editorial approval.',
- 'trash' => 'Set the post as trashed.',
- ),
- 'sticky' => array(
- 'false' => 'Post is not marked as sticky.',
- 'true' => 'Stick the post to the front page.',
- ),
- 'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
- 'parent' => "(int) The post ID of the new post's parent.",
- 'categories' => "(array|string) Comma-separated list or array of categories (name or id)",
- 'tags' => "(array|string) Comma-separated list or array of tags (name or id)",
- 'format' => array_merge( array( 'default' => 'Use default post format' ), get_post_format_strings() ),
- 'comments_open' => '(bool) Should the post be open to comments?',
- 'pings_open' => '(bool) Should the post be open to comments?',
- 'likes_enabled' => "(bool) Should the post be open to likes?",
- 'menu_order' => "(int) (Pages Only) the order pages should appear in. Use 0 to maintain alphabetical order.",
- 'sharing_enabled' => "(bool) Should sharing buttons show on this post?",
- 'featured_image' => "(string) The post ID of an existing attachment to set as the featured image. Pass an empty string to delete the existing image.",
- 'media' => "(media) An array of files to attach to the post. To upload media, the entire request should be multipart/form-data encoded. Multiple media items will be displayed in a gallery. Accepts jpg, jpeg, png, gif, pdf, doc, ppt, odt, pptx, docx, pps, ppsx, xls, xlsx, key. Audio and Video may also be available. See <code>allowed_file_types</code> in the options resposne of the site endpoint. <br /><br /><strong>Example</strong>:<br />" .
- "<code>curl \<br />--form 'title=Image' \<br />--form 'media[]=@/path/to/file.jpg' \<br />-H 'Authorization: BEARER your-token' \<br />'https://public-api.wordpress.com/rest/v1/sites/123/posts/new'</code>",
- 'media_urls' => "(array) An array of URLs for images to attach to a post. Sideloads the media in for a post.",
- 'metadata' => "(array) Array of metadata objects containing the following properties: `key` (metadata key), `id` (meta ID), `previous_value` (if set, the action will only occur for the provided previous value), `value` (the new value to set the meta to), `operation` (the operation to perform: `update` or `add`; defaults to `update`). All unprotected meta keys are available by default for read requests. Both unprotected and protected meta keys are available for authenticated requests with proper capabilities. Protected meta keys can be made available with the <code>rest_api_allowed_public_metadata</code> filter.",
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/posts/881',
-
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
-
- 'body' => array(
- 'title' => 'Hello World (Again)',
- 'content' => 'Hello. I am an edited post. I was edited by the API',
- 'tags' => 'tests',
- 'categories' => 'API'
- )
- )
-) );
-
-new WPCOM_JSON_API_Update_Post_Endpoint( array(
- 'description' => 'Delete a post. Note: If the trash is enabled, this request will send the post to the trash. A second request will permanently delete the post.',
- 'group' => 'posts',
- 'stat' => 'posts:1:delete',
- 'new_version' => '1.1',
- 'max_version' => '1',
- 'method' => 'POST',
- 'path' => '/sites/%s/posts/%d/delete',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$post_ID' => '(int) The post ID',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/posts/$post_ID/delete/',
-
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- )
- )
-) );
-
-new WPCOM_JSON_API_Update_Post_Endpoint( array(
- 'description' => 'Restore a post or page from the trash to its previous status.',
- 'group' => 'posts',
- 'stat' => 'posts:1:restore',
-
- 'method' => 'POST',
- 'new_version' => '1.1',
- 'max_version' => '1',
- 'path' => '/sites/%s/posts/%d/restore',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$post_ID' => '(int) The post ID',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/posts/$post_ID/restore/',
-
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- )
- )
-) );
-
-class WPCOM_JSON_API_Update_Post_Endpoint extends WPCOM_JSON_API_Post_Endpoint {
- function __construct( $args ) {
- parent::__construct( $args );
- if ( $this->api->ends_with( $this->path, '/delete' ) ) {
- $this->post_object_format['status']['deleted'] = 'The post has been deleted permanently.';
- }
- }
-
- // /sites/%s/posts/new -> $blog_id
- // /sites/%s/posts/%d -> $blog_id, $post_id
- // /sites/%s/posts/%d/delete -> $blog_id, $post_id
- // /sites/%s/posts/%d/restore -> $blog_id, $post_id
- function callback( $path = '', $blog_id = 0, $post_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( $this->api->ends_with( $path, '/delete' ) ) {
- return $this->delete_post( $path, $blog_id, $post_id );
- } elseif ( $this->api->ends_with( $path, '/restore' ) ) {
- return $this->restore_post( $path, $blog_id, $post_id );
- } else {
- return $this->write_post( $path, $blog_id, $post_id );
- }
- }
-
- // /sites/%s/posts/new -> $blog_id
- // /sites/%s/posts/%d -> $blog_id, $post_id
- function write_post( $path, $blog_id, $post_id ) {
- $new = $this->api->ends_with( $path, '/new' );
- $args = $this->query_args();
-
- // unhook publicize, it's hooked again later -- without this, skipping services is impossible
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- remove_action( 'save_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ), 100, 2 );
- add_action( 'rest_api_inserted_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ) );
- }
-
- if ( $new ) {
- $input = $this->input( true );
-
- if ( 'revision' === $input['type'] ) {
- if ( ! isset( $input['parent'] ) ) {
- return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
- }
- $input['status'] = 'inherit'; // force inherit for revision type
- $input['slug'] = $input['parent'] . '-autosave-v1';
- }
- elseif ( !isset( $input['title'] ) && !isset( $input['content'] ) && !isset( $input['excerpt'] ) ) {
- return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
- }
-
- // default to post
- if ( empty( $input['type'] ) )
- $input['type'] = 'post';
-
- $post_type = get_post_type_object( $input['type'] );
-
- if ( ! $this->is_post_type_allowed( $input['type'] ) ) {
- return new WP_Error( 'unknown_post_type', 'Unknown post type', 404 );
- }
-
- if ( ! empty( $input['author'] ) ) {
- $author_id = $this->parse_and_set_author( $input['author'], $input['type'] );
- unset( $input['author'] );
- if ( is_wp_error( $author_id ) )
- return $author_id;
- }
-
- if ( 'publish' === $input['status'] ) {
- if ( ! current_user_can( $post_type->cap->publish_posts ) ) {
- if ( current_user_can( $post_type->cap->edit_posts ) ) {
- $input['status'] = 'pending';
- } else {
- return new WP_Error( 'unauthorized', 'User cannot publish posts', 403 );
- }
- }
- } else {
- if ( !current_user_can( $post_type->cap->edit_posts ) ) {
- return new WP_Error( 'unauthorized', 'User cannot edit posts', 403 );
- }
- }
- } else {
- $input = $this->input( false );
-
- if ( !is_array( $input ) || !$input ) {
- return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
- }
-
- if ( isset( $input['status'] ) && 'trash' === $input['status'] && ! current_user_can( 'delete_post', $post_id ) ) {
- return new WP_Error( 'unauthorized', 'User cannot delete post', 403 );
- }
-
- $post = get_post( $post_id );
- $_post_type = ( ! empty( $input['type'] ) ) ? $input['type'] : $post->post_type;
- $post_type = get_post_type_object( $_post_type );
- if ( !$post || is_wp_error( $post ) ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
- }
-
- if ( !current_user_can( 'edit_post', $post->ID ) ) {
- return new WP_Error( 'unauthorized', 'User cannot edit post', 403 );
- }
-
- if ( ! empty( $input['author'] ) ) {
- $author_id = $this->parse_and_set_author( $input['author'], $_post_type );
- unset( $input['author'] );
- if ( is_wp_error( $author_id ) )
- return $author_id;
- }
-
- if ( ( isset( $input['status'] ) && 'publish' === $input['status'] ) && 'publish' !== $post->post_status && !current_user_can( 'publish_post', $post->ID ) ) {
- $input['status'] = 'pending';
- }
- $last_status = $post->post_status;
- $new_status = isset( $input['status'] ) ? $input['status'] : $last_status;
-
- // Make sure that drafts get the current date when transitioning to publish if not supplied in the post.
- $date_in_past = ( strtotime($post->post_date_gmt) < time() );
- if ( 'publish' === $new_status && 'draft' === $last_status && ! isset( $input['date_gmt'] ) && $date_in_past ) {
- $input['date_gmt'] = gmdate( 'Y-m-d H:i:s' );
- }
- }
-
- if ( function_exists( 'wpcom_switch_to_locale' ) ) {
- // fixes calypso-pre-oss #12476: respect blog locale when creating the post slug
- wpcom_switch_to_locale( get_blog_lang_code( $blog_id ) );
- }
-
- // If date was set, $this->input will set date_gmt, date still needs to be adjusted for the blog's offset
- if ( isset( $input['date_gmt'] ) ) {
- $gmt_offset = get_option( 'gmt_offset' );
- $time_with_offset = strtotime( $input['date_gmt'] ) + $gmt_offset * HOUR_IN_SECONDS;
- $input['date'] = date( 'Y-m-d H:i:s', $time_with_offset );
- }
-
- if ( ! empty( $author_id ) && get_current_user_id() != $author_id ) {
- if ( ! current_user_can( $post_type->cap->edit_others_posts ) ) {
- return new WP_Error( 'unauthorized', "User is not allowed to publish others' posts.", 403 );
- } elseif ( ! user_can( $author_id, $post_type->cap->edit_posts ) ) {
- return new WP_Error( 'unauthorized', 'Assigned author cannot publish post.', 403 );
- }
- }
-
- if ( !is_post_type_hierarchical( $post_type->name ) && 'revision' !== $post_type->name ) {
- unset( $input['parent'] );
- }
-
- $tax_input = array();
-
- foreach ( array( 'categories' => 'category', 'tags' => 'post_tag' ) as $key => $taxonomy ) {
- if ( ! isset( $input[ $key ] ) ) {
- continue;
- }
-
- $tax_input[ $taxonomy ] = array();
-
- $is_hierarchical = is_taxonomy_hierarchical( $taxonomy );
-
- if ( is_array( $input[$key] ) ) {
- $terms = $input[$key];
- } else {
- $terms = explode( ',', $input[$key] );
- }
-
- foreach ( $terms as $term ) {
- /**
- * `curl --data 'category[]=123'` should be interpreted as a category ID,
- * not a category whose name is '123'.
- *
- * Consequence: To add a category/tag whose name is '123', the client must
- * first look up its ID.
- */
- $term = (string) $term; // ctype_digit compat
- if ( ctype_digit( $term ) ) {
- $term = (int) $term;
- }
-
- $term_info = term_exists( $term, $taxonomy );
-
- if ( ! $term_info ) {
- // A term ID that doesn't already exist. Ignore it: we don't know what name to give it.
- if ( is_int( $term ) ){
- continue;
- }
- // only add a new tag/cat if the user has access to
- $tax = get_taxonomy( $taxonomy );
-
- // see https://core.trac.wordpress.org/ticket/26409
- if ( 'category' === $taxonomy && ! current_user_can( $tax->cap->edit_terms ) ) {
- continue;
- } else if ( ! current_user_can( $tax->cap->assign_terms ) ) {
- continue;
- }
-
- $term_info = wp_insert_term( $term, $taxonomy );
- }
-
- if ( ! is_wp_error( $term_info ) ) {
- if ( $is_hierarchical ) {
- // Categories must be added by ID
- $tax_input[$taxonomy][] = (int) $term_info['term_id'];
- } else {
- // Tags must be added by name
- if ( is_int( $term ) ) {
- $term = get_term( $term, $taxonomy );
- $tax_input[$taxonomy][] = $term->name;
- } else {
- $tax_input[$taxonomy][] = $term;
- }
- }
- }
- }
- }
-
- if ( isset( $input['categories'] ) && empty( $tax_input['category'] ) && 'revision' !== $post_type->name ) {
- $tax_input['category'][] = get_option( 'default_category' );
- }
-
- unset( $input['tags'], $input['categories'] );
-
- $insert = array();
-
- if ( !empty( $input['slug'] ) ) {
- $insert['post_name'] = $input['slug'];
- unset( $input['slug'] );
- }
-
- if ( isset( $input['comments_open'] ) ) {
- $insert['comment_status'] = ( true === $input['comments_open'] ) ? 'open' : 'closed';
- }
-
- if ( isset( $input['pings_open'] ) ) {
- $insert['ping_status'] = ( true === $input['pings_open'] ) ? 'open' : 'closed';
- }
-
- unset( $input['comments_open'], $input['pings_open'] );
-
- if ( isset( $input['menu_order'] ) ) {
- $insert['menu_order'] = $input['menu_order'];
- unset( $input['menu_order'] );
- }
-
- $publicize = isset( $input['publicize'] ) ? $input['publicize'] : null;
- unset( $input['publicize'] );
-
- $publicize_custom_message = isset( $input['publicize_message'] ) ? $input['publicize_message'] : null;
- unset( $input['publicize_message'] );
-
- if ( isset( $input['featured_image'] ) ) {
- $featured_image = trim( $input['featured_image'] );
- $delete_featured_image = empty( $featured_image );
- unset( $input['featured_image'] );
- }
-
- $metadata = isset( $input['metadata'] ) ? $input['metadata'] : null;
- unset( $input['metadata'] );
-
- $likes = isset( $input['likes_enabled'] ) ? $input['likes_enabled'] : null;
- unset( $input['likes_enabled'] );
-
- $sharing = isset( $input['sharing_enabled'] ) ? $input['sharing_enabled'] : null;
- unset( $input['sharing_enabled'] );
-
- $sticky = isset( $input['sticky'] ) ? $input['sticky'] : null;
- unset( $input['sticky'] );
-
- foreach ( $input as $key => $value ) {
- $insert["post_$key"] = $value;
- }
-
- if ( ! empty( $author_id ) ) {
- $insert['post_author'] = absint( $author_id );
- }
-
- if ( ! empty( $tax_input ) ) {
- $insert['tax_input'] = $tax_input;
- }
-
- $has_media = isset( $input['media'] ) && $input['media'] ? count( $input['media'] ) : false;
- $has_media_by_url = isset( $input['media_urls'] ) && $input['media_urls'] ? count( $input['media_urls'] ) : false;
-
- if ( $new ) {
-
- if ( isset( $input['content'] ) && ! has_shortcode( $input['content'], 'gallery' ) && ( $has_media || $has_media_by_url ) ) {
- switch ( ( $has_media + $has_media_by_url ) ) {
- case 0 :
- // No images - do nothing.
- break;
- case 1 :
- // 1 image - make it big
- $insert['post_content'] = $input['content'] = "[gallery size=full columns=1]\n\n" . $input['content'];
- break;
- default :
- // Several images - 3 column gallery
- $insert['post_content'] = $input['content'] = "[gallery]\n\n" . $input['content'];
- break;
- }
- }
-
- $post_id = wp_insert_post( add_magic_quotes( $insert ), true );
- } else {
- $insert['ID'] = $post->ID;
-
- // wp_update_post ignores date unless edit_date is set
- // See: http://codex.wordpress.org/Function_Reference/wp_update_post#Scheduling_posts
- // See: https://core.trac.wordpress.org/browser/tags/3.9.2/src/wp-includes/post.php#L3302
- if ( isset( $input['date_gmt'] ) || isset( $input['date'] ) ) {
- $insert['edit_date'] = true;
- }
-
- // this two-step process ensures any changes submitted along with status=trash get saved before trashing
- if ( isset( $input['status'] ) && 'trash' === $input['status'] ) {
- // if we insert it with status='trash', it will get double-trashed, so insert it as a draft first
- unset( $insert['status'] );
- $post_id = wp_update_post( (object) $insert );
- // now call wp_trash_post so post_meta gets set and any filters get called
- wp_trash_post( $post_id );
- } else {
- $post_id = wp_update_post( (object) $insert );
- }
-
- }
-
- if ( !$post_id || is_wp_error( $post_id ) ) {
- return $post_id;
- }
-
- // make sure this post actually exists and is not an error of some kind (ie, trying to load media in the posts endpoint)
- $post_check = $this->get_post_by( 'ID', $post_id, $args['context'] );
- if ( is_wp_error( $post_check ) ) {
- return $post_check;
- }
-
- if ( $has_media ) {
- $this->api->trap_wp_die( 'upload_error' );
- foreach ( $input['media'] as $media_item ) {
- $_FILES['.api.media.item.'] = $media_item;
- // check for WP_Error if we ever actually need $media_id
- $media_id = media_handle_upload( '.api.media.item.', $post_id );
- }
- $this->api->trap_wp_die( null );
-
- unset( $_FILES['.api.media.item.'] );
- }
-
- if ( $has_media_by_url ) {
- foreach ( $input['media_urls'] as $url ) {
- $this->handle_media_sideload( $url, $post_id );
- }
- }
-
- // Set like status for the post
- /** This filter is documented in modules/likes.php */
- $sitewide_likes_enabled = (bool) apply_filters( 'wpl_is_enabled_sitewide', ! get_option( 'disabled_likes' ) );
- if ( $new ) {
- if ( $sitewide_likes_enabled ) {
- if ( false === $likes ) {
- update_post_meta( $post_id, 'switch_like_status', 0 );
- } else {
- delete_post_meta( $post_id, 'switch_like_status' );
- }
- } else {
- if ( $likes ) {
- update_post_meta( $post_id, 'switch_like_status', 1 );
- } else {
- delete_post_meta( $post_id, 'switch_like_status' );
- }
- }
- } else {
- if ( isset( $likes ) ) {
- if ( $sitewide_likes_enabled ) {
- if ( false === $likes ) {
- update_post_meta( $post_id, 'switch_like_status', 0 );
- } else {
- delete_post_meta( $post_id, 'switch_like_status' );
- }
- } else {
- if ( true === $likes ) {
- update_post_meta( $post_id, 'switch_like_status', 1 );
- } else {
- delete_post_meta( $post_id, 'switch_like_status' );
- }
- }
- }
- }
-
- // Set sharing status of the post
- if ( $new ) {
- $sharing_enabled = isset( $sharing ) ? (bool) $sharing : true;
- if ( false === $sharing_enabled ) {
- update_post_meta( $post_id, 'sharing_disabled', 1 );
- }
- }
- else {
- if ( isset( $sharing ) && true === $sharing ) {
- delete_post_meta( $post_id, 'sharing_disabled' );
- } else if ( isset( $sharing ) && false == $sharing ) {
- update_post_meta( $post_id, 'sharing_disabled', 1 );
- }
- }
-
- if ( isset( $sticky ) ) {
- if ( true === $sticky ) {
- stick_post( $post_id );
- } else {
- unstick_post( $post_id );
- }
- }
-
- // WPCOM Specific (Jetpack's will get bumped elsewhere
- // Tracks how many posts are published and sets meta
- // so we can track some other cool stats (like likes & comments on posts published)
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- if (
- ( $new && 'publish' == $input['status'] )
- || (
- ! $new && isset( $last_status )
- && 'publish' != $last_status
- && isset( $new_status )
- && 'publish' == $new_status
- )
- ) {
- /** This action is documented in modules/widgets/social-media-icons.php */
- do_action( 'jetpack_bump_stats_extras', 'api-insights-posts', $this->api->token_details['client_id'] );
- update_post_meta( $post_id, '_rest_api_published', 1 );
- update_post_meta( $post_id, '_rest_api_client_id', $this->api->token_details['client_id'] );
- }
- }
-
-
- // We ask the user/dev to pass Publicize services he/she wants activated for the post, but Publicize expects us
- // to instead flag the ones we don't want to be skipped. proceed with said logic.
- // any posts coming from Path (client ID 25952) should also not publicize
- if ( $publicize === false || ( isset( $this->api->token_details['client_id'] ) && 25952 == $this->api->token_details['client_id'] ) ) {
- // No publicize at all, skip all by ID
- foreach ( $GLOBALS['publicize_ui']->publicize->get_services( 'all' ) as $name => $service ) {
- delete_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_SKIP . $name );
- $service_connections = $GLOBALS['publicize_ui']->publicize->get_connections( $name );
- if ( ! $service_connections ) {
- continue;
- }
- foreach ( $service_connections as $service_connection ) {
- update_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_SKIP . $service_connection->unique_id, 1 );
- }
- }
- } else if ( is_array( $publicize ) && ( count ( $publicize ) > 0 ) ) {
- foreach ( $GLOBALS['publicize_ui']->publicize->get_services( 'all' ) as $name => $service ) {
- /*
- * We support both indexed and associative arrays:
- * * indexed are to pass entire services
- * * associative are to pass specific connections per service
- *
- * We do support mixed arrays: mixed integer and string keys (see 3rd example below).
- *
- * EG: array( 'twitter', 'facebook') will only publicize to those, ignoring the other available services
- * Form data: publicize[]=twitter&publicize[]=facebook
- * EG: array( 'twitter' => '(int) $pub_conn_id_0, (int) $pub_conn_id_3', 'facebook' => (int) $pub_conn_id_7 ) will publicize to two Twitter accounts, and one Facebook connection, of potentially many.
- * Form data: publicize[twitter]=$pub_conn_id_0,$pub_conn_id_3&publicize[facebook]=$pub_conn_id_7
- * EG: array( 'twitter', 'facebook' => '(int) $pub_conn_id_0, (int) $pub_conn_id_3' ) will publicize to all available Twitter accounts, but only 2 of potentially many Facebook connections
- * Form data: publicize[]=twitter&publicize[facebook]=$pub_conn_id_0,$pub_conn_id_3
- */
-
- // Delete any stale SKIP value for the service by name. We'll add it back by ID.
- delete_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_SKIP . $name );
-
- // Get the user's connections
- $service_connections = $GLOBALS['publicize_ui']->publicize->get_connections( $name );
-
- // if the user doesn't have any connections for this service, move on
- if ( ! $service_connections ) {
- continue;
- }
-
- if ( !in_array( $name, $publicize ) && !array_key_exists( $name, $publicize ) ) {
- // Skip the whole service by adding each connection ID
- foreach ( $service_connections as $service_connection ) {
- update_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_SKIP . $service_connection->unique_id, 1 );
- }
- } else if ( !empty( $publicize[ $name ] ) ) {
- // Seems we're being asked to only push to [a] specific connection[s].
- // Explode the list on commas, which will also support a single passed ID
- $requested_connections = explode( ',', ( preg_replace( '/[\s]*/', '', $publicize[ $name ] ) ) );
- // Flag the connections we can't match with the requested list to be skipped.
- foreach ( $service_connections as $service_connection ) {
- if ( !in_array( $service_connection->meta['connection_data']->id, $requested_connections ) ) {
- update_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_SKIP . $service_connection->unique_id, 1 );
- } else {
- delete_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_SKIP . $service_connection->unique_id );
- }
- }
- } else {
- // delete all SKIP values; it's okay to publish to all connected IDs for this service
- foreach ( $service_connections as $service_connection ) {
- delete_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_SKIP . $service_connection->unique_id );
- }
- }
- }
- }
-
- if ( ! is_null( $publicize_custom_message ) ) {
- if ( empty( $publicize_custom_message ) ) {
- delete_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_MESS );
- } else {
- update_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_MESS, trim( $publicize_custom_message ) );
- }
- }
-
- if ( ! empty( $insert['post_format'] ) ) {
- if ( 'default' !== strtolower( $insert['post_format'] ) ) {
- set_post_format( $post_id, $insert['post_format'] );
- }
- else {
- set_post_format( $post_id, get_option( 'default_post_format' ) );
- }
- }
-
- if ( isset( $featured_image ) ) {
- $this->parse_and_set_featured_image( $post_id, $delete_featured_image, $featured_image );
- }
-
- if ( ! empty( $metadata ) ) {
- foreach ( (array) $metadata as $meta ) {
-
- $meta = (object) $meta;
-
- // Custom meta description can only be set on sites that have a business subscription.
- if ( Jetpack_SEO_Posts::DESCRIPTION_META_KEY == $meta->key && ! Jetpack_SEO_Utils::is_enabled_jetpack_seo() ) {
- return new WP_Error( 'unauthorized', __( 'SEO tools are not enabled for this site.', 'jetpack' ), 403 );
- }
-
- $existing_meta_item = new stdClass;
-
- if ( empty( $meta->operation ) )
- $meta->operation = 'update';
-
- if ( ! empty( $meta->value ) ) {
- if ( 'true' == $meta->value )
- $meta->value = true;
- if ( 'false' == $meta->value )
- $meta->value = false;
- }
-
- if ( ! empty( $meta->id ) ) {
- $meta->id = absint( $meta->id );
- $existing_meta_item = get_metadata_by_mid( 'post', $meta->id );
- if ( $post_id !== (int) $existing_meta_item->post_id ) {
- // Only allow updates for metadata on this post
- continue;
- }
- }
-
- $unslashed_meta_key = wp_unslash( $meta->key ); // should match what the final key will be
- $meta->key = wp_slash( $meta->key );
- $unslashed_existing_meta_key = wp_unslash( $existing_meta_item->meta_key );
- $existing_meta_item->meta_key = wp_slash( $existing_meta_item->meta_key );
-
- // make sure that the meta id passed matches the existing meta key
- if ( ! empty( $meta->id ) && ! empty( $meta->key ) ) {
- $meta_by_id = get_metadata_by_mid( 'post', $meta->id );
- if ( $meta_by_id->meta_key !== $meta->key ) {
- continue; // skip this meta
- }
- }
-
- switch ( $meta->operation ) {
- case 'delete':
-
- if ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_existing_meta_key ) ) {
- delete_metadata_by_mid( 'post', $meta->id );
- } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_meta_key ) ) {
- delete_post_meta( $post_id, $meta->key, $meta->previous_value );
- } elseif ( ! empty( $meta->key ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_meta_key ) ) {
- delete_post_meta( $post_id, $meta->key );
- }
-
- break;
- case 'add':
-
- if ( ! empty( $meta->id ) || ! empty( $meta->previous_value ) ) {
- break;
- } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) {
- add_post_meta( $post_id, $meta->key, $meta->value );
- }
-
- break;
- case 'update':
-
- if ( ! isset( $meta->value ) ) {
- break;
- } elseif ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_existing_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
- update_metadata_by_mid( 'post', $meta->id, $meta->value );
- } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
- update_post_meta( $post_id, $meta->key,$meta->value, $meta->previous_value );
- } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
- update_post_meta( $post_id, $meta->key, $meta->value );
- }
-
- break;
- }
-
- }
- }
-
- /**
- * Fires when a post is created via the REST API.
- *
- * @module json-api
- *
- * @since 2.3.0
- *
- * @param int $post_id Post ID.
- * @param array $insert Data used to build the post.
- * @param string $new New post URL suffix.
- */
- do_action( 'rest_api_inserted_post', $post_id, $insert, $new );
-
- $return = $this->get_post_by( 'ID', $post_id, $args['context'] );
- if ( !$return || is_wp_error( $return ) ) {
- return $return;
- }
-
- if ( isset( $input['type'] ) && 'revision' === $input['type'] ) {
- $return['preview_nonce'] = wp_create_nonce( 'post_preview_' . $input['parent'] );
- }
-
- if ( isset( $sticky ) ) {
- // workaround for sticky test occasionally failing, maybe a race condition with stick_post() above
- $return['sticky'] = ( true === $sticky );
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'posts' );
-
- return $return;
- }
-
- // /sites/%s/posts/%d/delete -> $blog_id, $post_id
- function delete_post( $path, $blog_id, $post_id ) {
- $post = get_post( $post_id );
- if ( !$post || is_wp_error( $post ) ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
- }
-
- if ( ! $this->is_post_type_allowed( $post->post_type ) ) {
- return new WP_Error( 'unknown_post_type', 'Unknown post type', 404 );
- }
-
- if ( !current_user_can( 'delete_post', $post->ID ) ) {
- return new WP_Error( 'unauthorized', 'User cannot delete posts', 403 );
- }
-
- $args = $this->query_args();
- $return = $this->get_post_by( 'ID', $post->ID, $args['context'] );
- if ( !$return || is_wp_error( $return ) ) {
- return $return;
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'posts' );
-
- // we need to call wp_trash_post so that untrash will work correctly for all post types
- if ( 'trash' === $post->post_status )
- wp_delete_post( $post->ID );
- else
- wp_trash_post( $post->ID );
-
- $status = get_post_status( $post->ID );
- if ( false === $status ) {
- $return['status'] = 'deleted';
- return $return;
- }
-
- return $this->get_post_by( 'ID', $post->ID, $args['context'] );
- }
-
- // /sites/%s/posts/%d/restore -> $blog_id, $post_id
- function restore_post( $path, $blog_id, $post_id ) {
- $args = $this->query_args();
- $post = get_post( $post_id );
-
- if ( !$post || is_wp_error( $post ) ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
- }
-
- if ( !current_user_can( 'delete_post', $post->ID ) ) {
- return new WP_Error( 'unauthorized', 'User cannot restore trashed posts', 403 );
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'posts' );
-
- wp_untrash_post( $post->ID );
-
- return $this->get_post_by( 'ID', $post->ID, $args['context'] );
- }
-
- private function parse_and_set_featured_image( $post_id, $delete_featured_image, $featured_image ) {
- if ( $delete_featured_image ) {
- delete_post_thumbnail( $post_id );
- return;
- }
-
- $featured_image = (string) $featured_image;
-
- // if we got a post ID, we can just set it as the thumbnail
- if ( ctype_digit( $featured_image ) && 'attachment' == get_post_type( $featured_image ) ) {
- set_post_thumbnail( $post_id, $featured_image );
- return $featured_image;
- }
-
- $featured_image_id = $this->handle_media_sideload( $featured_image, $post_id, 'image' );
-
- if ( empty( $featured_image_id ) || ! is_int( $featured_image_id ) )
- return false;
-
- set_post_thumbnail( $post_id, $featured_image_id );
- return $featured_image_id;
- }
-
- private function parse_and_set_author( $author = null, $post_type = 'post' ) {
- if ( empty( $author ) || ! post_type_supports( $post_type, 'author' ) )
- return get_current_user_id();
-
- $author = (string) $author;
- if ( ctype_digit( $author ) ) {
- $_user = get_user_by( 'id', $author );
- if ( ! $_user || is_wp_error( $_user ) )
- return new WP_Error( 'invalid_author', 'Invalid author provided' );
-
- return $_user->ID;
- }
-
- $_user = get_user_by( 'login', $author );
- if ( ! $_user || is_wp_error( $_user ) )
- return new WP_Error( 'invalid_author', 'Invalid author provided' );
-
- return $_user->ID;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-1-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-1-endpoint.php
deleted file mode 100644
index 3778f16d..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-1-endpoint.php
+++ /dev/null
@@ -1,1005 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Update_Post_v1_1_Endpoint( array(
- 'description' => 'Create a post.',
- 'group' => 'posts',
- 'stat' => 'posts:new',
- 'new_version' => '1.2',
- 'min_version' => '1.1',
- 'max_version' => '1.1',
- 'method' => 'POST',
- 'path' => '/sites/%s/posts/new',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'request_format' => array(
- // explicitly document all input
- 'date' => "(ISO 8601 datetime) The post's creation time.",
- 'title' => '(HTML) The post title.',
- 'content' => '(HTML) The post content.',
- 'excerpt' => '(HTML) An optional post excerpt.',
- 'slug' => '(string) The name (slug) for the post, used in URLs.',
- 'author' => '(string) The username or ID for the user to assign the post to.',
- 'publicize' => '(array|bool) True or false if the post be publicized to external services. An array of services if we only want to publicize to a select few. Defaults to true.',
- 'publicize_message' => '(string) Custom message to be publicized to external services.',
- 'status' => array(
- 'publish' => 'Publish the post.',
- 'private' => 'Privately publish the post.',
- 'draft' => 'Save the post as a draft.',
- 'pending' => 'Mark the post as pending editorial approval.',
- 'future' => 'Schedule the post (alias for publish; you must also set a future date).',
- 'auto-draft' => 'Save a placeholder for a newly created post, with no content.',
- ),
- 'sticky' => array(
- 'false' => 'Post is not marked as sticky.',
- 'true' => 'Stick the post to the front page.',
- ),
- 'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
- 'parent' => "(int) The post ID of the new post's parent.",
- 'type' => "(string) The post type. Defaults to 'post'. Post types besides post and page need to be whitelisted using the <code>rest_api_allowed_post_types</code> filter.",
- 'terms' => '(object) Mapping of taxonomy to comma-separated list or array of terms (name or id)',
- 'categories' => "(array|string) Comma-separated list or array of categories (name or id)",
- 'tags' => "(array|string) Comma-separated list or array of tags (name or id)",
- 'format' => array_merge( array( 'default' => 'Use default post format' ), get_post_format_strings() ),
- 'featured_image' => "(string) The post ID of an existing attachment to set as the featured image. Pass an empty string to delete the existing image.",
- 'media' => "(media) An array of files to attach to the post. To upload media, the entire request should be multipart/form-data encoded. Multiple media items will be displayed in a gallery. Accepts jpg, jpeg, png, gif, pdf, doc, ppt, odt, pptx, docx, pps, ppsx, xls, xlsx, key. Audio and Video may also be available. See <code>allowed_file_types</code> in the options response of the site endpoint. Errors produced by media uploads, if any, will be in `media_errors` in the response. <br /><br /><strong>Example</strong>:<br />" .
- "<code>curl \<br />--form 'title=Image Post' \<br />--form 'media[0]=@/path/to/file.jpg' \<br />--form 'media_attrs[0][caption]=My Great Photo' \<br />-H 'Authorization: BEARER your-token' \<br />'https://public-api.wordpress.com/rest/v1/sites/123/posts/new'</code>",
- 'media_urls' => "(array) An array of URLs for images to attach to a post. Sideloads the media in for a post. Errors produced by media sideloading, if any, will be in `media_errors` in the response.",
- 'media_attrs' => "(array) An array of attributes (`title`, `description` and `caption`) are supported to assign to the media uploaded via the `media` or `media_urls` properties. You must use a numeric index for the keys of `media_attrs` which follow the same sequence as `media` and `media_urls`. <br /><br /><strong>Example</strong>:<br />" .
- "<code>curl \<br />--form 'title=Gallery Post' \<br />--form 'media[]=@/path/to/file1.jpg' \<br />--form 'media_urls[]=http://exapmple.com/file2.jpg' \<br /> \<br />--form 'media_attrs[0][caption]=This will be the caption for file1.jpg' \<br />--form 'media_attrs[1][title]=This will be the title for file2.jpg' \<br />-H 'Authorization: BEARER your-token' \<br />'https://public-api.wordpress.com/rest/v1/sites/123/posts/new'</code>",
- 'metadata' => "(array) Array of metadata objects containing the following properties: `key` (metadata key), `id` (meta ID), `previous_value` (if set, the action will only occur for the provided previous value), `value` (the new value to set the meta to), `operation` (the operation to perform: `update` or `add`; defaults to `update`). All unprotected meta keys are available by default for read requests. Both unprotected and protected meta keys are avaiable for authenticated requests with proper capabilities. Protected meta keys can be made available with the <code>rest_api_allowed_public_metadata</code> filter.",
- 'discussion' => '(object) A hash containing one or more of the following boolean values, which default to the blog\'s discussion preferences: `comments_open`, `pings_open`',
- 'likes_enabled' => "(bool) Should the post be open to likes? Defaults to the blog's preference.",
- 'sharing_enabled' => "(bool) Should sharing buttons show on this post? Defaults to true.",
- 'menu_order' => "(int) (Pages Only) the order pages should appear in. Use 0 to maintain alphabetical order.",
- 'page_template' => '(string) (Pages Only) The page template this page should use.',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/posts/new/',
-
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
-
- 'body' => array(
- 'title' => 'Hello World',
- 'content' => 'Hello. I am a test post. I was created by the API',
- 'tags' => 'tests',
- 'categories' => 'API'
- )
- )
-) );
-
-new WPCOM_JSON_API_Update_Post_v1_1_Endpoint( array(
- 'description' => 'Edit a post.',
- 'group' => 'posts',
- 'stat' => 'posts:1:POST',
- 'new_version' => '1.2',
- 'min_version' => '1.1',
- 'max_version' => '1.1',
- 'method' => 'POST',
- 'path' => '/sites/%s/posts/%d',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$post_ID' => '(int) The post ID',
- ),
-
- 'request_format' => array(
- 'date' => "(ISO 8601 datetime) The post's creation time.",
- 'title' => '(HTML) The post title.',
- 'content' => '(HTML) The post content.',
- 'excerpt' => '(HTML) An optional post excerpt.',
- 'slug' => '(string) The name (slug) for the post, used in URLs.',
- 'author' => '(string) The username or ID for the user to assign the post to.',
- 'publicize' => '(array|bool) True or false if the post be publicized to external services. An array of services if we only want to publicize to a select few. Defaults to true.',
- 'publicize_message' => '(string) Custom message to be publicized to external services.',
- 'status' => array(
- 'publish' => 'Publish the post.',
- 'private' => 'Privately publish the post.',
- 'draft' => 'Save the post as a draft.',
- 'future' => 'Schedule the post (alias for publish; you must also set a future date).',
- 'pending' => 'Mark the post as pending editorial approval.',
- 'trash' => 'Set the post as trashed.',
- ),
- 'sticky' => array(
- 'false' => 'Post is not marked as sticky.',
- 'true' => 'Stick the post to the front page.',
- ),
- 'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
- 'parent' => "(int) The post ID of the new post's parent.",
- 'terms' => '(object) Mapping of taxonomy to comma-separated list or array of terms (name or id)',
- 'categories' => "(array|string) Comma-separated list or array of categories (name or id)",
- 'tags' => "(array|string) Comma-separated list or array of tags (name or id)",
- 'format' => array_merge( array( 'default' => 'Use default post format' ), get_post_format_strings() ),
- 'discussion' => '(object) A hash containing one or more of the following boolean values, which default to the blog\'s discussion preferences: `comments_open`, `pings_open`',
- 'likes_enabled' => "(bool) Should the post be open to likes?",
- 'menu_order' => "(int) (Pages only) the order pages should appear in. Use 0 to maintain alphabetical order.",
- 'page_template' => '(string) (Pages Only) The page template this page should use.',
- 'sharing_enabled' => "(bool) Should sharing buttons show on this post?",
- 'featured_image' => "(string) The post ID of an existing attachment to set as the featured image. Pass an empty string to delete the existing image.",
- 'media' => "(media) An array of files to attach to the post. To upload media, the entire request should be multipart/form-data encoded. Multiple media items will be displayed in a gallery. Accepts jpg, jpeg, png, gif, pdf, doc, ppt, odt, pptx, docx, pps, ppsx, xls, xlsx, key. Audio and Video may also be available. See <code>allowed_file_types</code> in the options resposne of the site endpoint. <br /><br /><strong>Example</strong>:<br />" .
- "<code>curl \<br />--form 'title=Image' \<br />--form 'media[]=@/path/to/file.jpg' \<br />-H 'Authorization: BEARER your-token' \<br />'https://public-api.wordpress.com/rest/v1/sites/123/posts/new'</code>",
- 'media_urls' => "(array) An array of URLs for images to attach to a post. Sideloads the media in for a post.",
- 'metadata' => "(array) Array of metadata objects containing the following properties: `key` (metadata key), `id` (meta ID), `previous_value` (if set, the action will only occur for the provided previous value), `value` (the new value to set the meta to), `operation` (the operation to perform: `update` or `add`; defaults to `update`). All unprotected meta keys are available by default for read requests. Both unprotected and protected meta keys are available for authenticated requests with proper capabilities. Protected meta keys can be made available with the <code>rest_api_allowed_public_metadata</code> filter.",
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/posts/881',
-
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
-
- 'body' => array(
- 'title' => 'Hello World (Again)',
- 'content' => 'Hello. I am an edited post. I was edited by the API',
- 'tags' => 'tests',
- 'categories' => 'API'
- )
- )
-) );
-
-new WPCOM_JSON_API_Update_Post_v1_1_Endpoint( array(
- 'description' => 'Delete a post. Note: If the trash is enabled, this request will send the post to the trash. A second request will permanently delete the post.',
- 'group' => 'posts',
- 'stat' => 'posts:1:delete',
- 'min_version' => '1.1',
- 'max_version' => '1.1',
- 'method' => 'POST',
- 'path' => '/sites/%s/posts/%d/delete',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$post_ID' => '(int) The post ID',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/posts/$post_ID/delete/',
-
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- )
- )
-) );
-
-new WPCOM_JSON_API_Update_Post_v1_1_Endpoint( array(
- 'description' => 'Restore a post or page from the trash to its previous status.',
- 'group' => 'posts',
- 'stat' => 'posts:1:restore',
- 'min_version' => '1.1',
- 'max_version' => '1.1',
- 'method' => 'POST',
- 'path' => '/sites/%s/posts/%d/restore',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$post_ID' => '(int) The post ID',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/posts/$post_ID/restore/',
-
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- )
- )
-) );
-
-class WPCOM_JSON_API_Update_Post_v1_1_Endpoint extends WPCOM_JSON_API_Post_v1_1_Endpoint {
- function __construct( $args ) {
- parent::__construct( $args );
- if ( $this->api->ends_with( $this->path, '/delete' ) ) {
- $this->post_object_format['status']['deleted'] = 'The post has been deleted permanently.';
- }
- }
-
- // /sites/%s/posts/new -> $blog_id
- // /sites/%s/posts/%d -> $blog_id, $post_id
- // /sites/%s/posts/%d/delete -> $blog_id, $post_id
- // /sites/%s/posts/%d/restore -> $blog_id, $post_id
- function callback( $path = '', $blog_id = 0, $post_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( $this->api->ends_with( $path, '/delete' ) ) {
- return $this->delete_post( $path, $blog_id, $post_id );
- } elseif ( $this->api->ends_with( $path, '/restore' ) ) {
- return $this->restore_post( $path, $blog_id, $post_id );
- } else {
- return $this->write_post( $path, $blog_id, $post_id );
- }
- }
-
- // /sites/%s/posts/new -> $blog_id
- // /sites/%s/posts/%d -> $blog_id, $post_id
- function write_post( $path, $blog_id, $post_id ) {
- global $wpdb;
-
- $new = $this->api->ends_with( $path, '/new' );
- $args = $this->query_args();
-
- // unhook publicize, it's hooked again later -- without this, skipping services is impossible
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- remove_action( 'save_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ), 100, 2 );
- add_action( 'rest_api_inserted_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ) );
-
- if ( $this->should_load_theme_functions( $post_id ) ) {
- $this->load_theme_functions();
- }
- }
-
-
- if ( $new ) {
- $input = $this->input( true );
-
- // 'future' is an alias for 'publish' for now
- if ( 'future' === $input['status'] ) {
- $input['status'] = 'publish';
- }
-
- if ( 'revision' === $input['type'] ) {
- if ( ! isset( $input['parent'] ) ) {
- return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
- }
- $input['status'] = 'inherit'; // force inherit for revision type
- $input['slug'] = $input['parent'] . '-autosave-v1';
- }
- elseif ( !isset( $input['title'] ) && !isset( $input['content'] ) && !isset( $input['excerpt'] ) ) {
- return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
- }
-
- // default to post
- if ( empty( $input['type'] ) )
- $input['type'] = 'post';
-
- $post_type = get_post_type_object( $input['type'] );
-
- if ( ! $this->is_post_type_allowed( $input['type'] ) ) {
- return new WP_Error( 'unknown_post_type', 'Unknown post type', 404 );
- }
-
- if ( ! empty( $input['author'] ) ) {
- $author_id = $this->parse_and_set_author( $input['author'], $input['type'] );
- unset( $input['author'] );
- if ( is_wp_error( $author_id ) )
- return $author_id;
- }
-
- if ( 'publish' === $input['status'] ) {
- if ( ! current_user_can( $post_type->cap->publish_posts ) ) {
- if ( current_user_can( $post_type->cap->edit_posts ) ) {
- $input['status'] = 'pending';
- } else {
- return new WP_Error( 'unauthorized', 'User cannot publish posts', 403 );
- }
- }
- } else {
- if ( !current_user_can( $post_type->cap->edit_posts ) ) {
- return new WP_Error( 'unauthorized', 'User cannot edit posts', 403 );
- }
- }
- } else {
- $input = $this->input( false );
-
- if ( !is_array( $input ) || !$input ) {
- return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
- }
-
- if ( isset( $input['status'] ) && 'trash' === $input['status'] && ! current_user_can( 'delete_post', $post_id ) ) {
- return new WP_Error( 'unauthorized', 'User cannot delete post', 403 );
- }
-
- // 'future' is an alias for 'publish' for now
- if ( isset( $input['status'] ) && 'future' === $input['status'] ) {
- $input['status'] = 'publish';
- }
-
- $post = get_post( $post_id );
- $_post_type = ( ! empty( $input['type'] ) ) ? $input['type'] : $post->post_type;
- $post_type = get_post_type_object( $_post_type );
- if ( !$post || is_wp_error( $post ) ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
- }
-
- if ( !current_user_can( 'edit_post', $post->ID ) ) {
- return new WP_Error( 'unauthorized', 'User cannot edit post', 403 );
- }
-
- if ( ! empty( $input['author'] ) ) {
- $author_id = $this->parse_and_set_author( $input['author'], $_post_type );
- unset( $input['author'] );
- if ( is_wp_error( $author_id ) )
- return $author_id;
- }
-
- if ( ( isset( $input['status'] ) && 'publish' === $input['status'] ) && 'publish' !== $post->post_status && !current_user_can( 'publish_post', $post->ID ) ) {
- $input['status'] = 'pending';
- }
- $last_status = $post->post_status;
- $new_status = isset( $input['status'] ) ? $input['status'] : $last_status;
-
- // Make sure that drafts get the current date when transitioning to publish if not supplied in the post.
- // Similarly, scheduled posts that are manually published before their scheduled date should have the date reset.
- $date_in_past = ( strtotime($post->post_date_gmt) < time() );
- $reset_draft_date = 'publish' === $new_status && 'draft' === $last_status && ! isset( $input['date_gmt'] ) && $date_in_past;
- $reset_scheduled_date = 'publish' === $new_status && 'future' === $last_status && ! isset( $input['date_gmt'] ) && ! $date_in_past;
-
- if ( $reset_draft_date || $reset_scheduled_date ) {
- $input['date_gmt'] = gmdate( 'Y-m-d H:i:s' );
- }
- }
-
- if ( function_exists( 'wpcom_switch_to_blog_locale' ) ) {
- // fixes calypso-pre-oss #12476: respect blog locale when creating the post slug
- wpcom_switch_to_blog_locale( $blog_id );
- }
-
- // If date was set, $this->input will set date_gmt, date still needs to be adjusted for the blog's offset
- if ( isset( $input['date_gmt'] ) ) {
- $gmt_offset = get_option( 'gmt_offset' );
- $time_with_offset = strtotime( $input['date_gmt'] ) + $gmt_offset * HOUR_IN_SECONDS;
- $input['date'] = date( 'Y-m-d H:i:s', $time_with_offset );
- }
-
- if ( ! empty( $author_id ) && get_current_user_id() != $author_id ) {
- if ( ! current_user_can( $post_type->cap->edit_others_posts ) ) {
- return new WP_Error( 'unauthorized', "User is not allowed to publish others' posts.", 403 );
- } elseif ( ! user_can( $author_id, $post_type->cap->edit_posts ) ) {
- return new WP_Error( 'unauthorized', 'Assigned author cannot publish post.', 403 );
- }
- }
-
- if ( !is_post_type_hierarchical( $post_type->name ) && 'revision' !== $post_type->name ) {
- unset( $input['parent'] );
- }
-
- $input['terms'] = isset( $input['terms'] ) ? (array) $input['terms'] : array();
-
- // Convert comma-separated terms to array before attempting to
- // merge with hardcoded taxonomies
- foreach ( $input['terms'] as $taxonomy => $terms ) {
- if ( is_string( $terms ) ) {
- $input['terms'][ $taxonomy ] = explode( ',', $terms );
- } else if ( ! is_array( $terms ) ) {
- $input['terms'][ $taxonomy ] = array();
- }
- }
-
- // For each hard-coded taxonomy, merge into terms object
- foreach ( array( 'categories' => 'category', 'tags' => 'post_tag' ) as $taxonomy_key => $taxonomy ) {
- if ( ! isset( $input[ $taxonomy_key ] ) ) {
- continue;
- }
-
- if ( ! isset( $input['terms'][ $taxonomy ] ) ) {
- $input['terms'][ $taxonomy ] = array();
- }
-
- $terms = $input[ $taxonomy_key ];
- if ( is_string( $terms ) ) {
- $terms = explode( ',', $terms );
- } else if ( ! is_array( $terms ) ) {
- continue;
- }
-
- $input['terms'][ $taxonomy ] = array_merge(
- $input['terms'][ $taxonomy ],
- $terms
- );
- }
-
- $tax_input = array();
-
- foreach ( $input['terms'] as $taxonomy => $terms ) {
- $tax_input[ $taxonomy ] = array();
- $is_hierarchical = is_taxonomy_hierarchical( $taxonomy );
-
- foreach ( $terms as $term ) {
- /**
- * `curl --data 'terms[category][]=123'` should be interpreted as a category ID,
- * not a category whose name is '123'.
- *
- * Consequence: To add a category/tag whose name is '123', the client must
- * first look up its ID.
- */
- $term = (string) $term; // ctype_digit compat
- if ( ctype_digit( $term ) ) {
- $term = (int) $term;
- }
-
- $term_info = term_exists( $term, $taxonomy );
-
- if ( ! $term_info ) {
- // A term ID that doesn't already exist. Ignore it: we don't know what name to give it.
- if ( is_int( $term ) ){
- continue;
- }
- // only add a new tag/cat if the user has access to
- $tax = get_taxonomy( $taxonomy );
-
- // see https://core.trac.wordpress.org/ticket/26409
- if ( $is_hierarchical && ! current_user_can( $tax->cap->edit_terms ) ) {
- continue;
- } else if ( ! current_user_can( $tax->cap->assign_terms ) ) {
- continue;
- }
-
- $term_info = wp_insert_term( $term, $taxonomy );
- }
-
- if ( ! is_wp_error( $term_info ) ) {
- if ( $is_hierarchical ) {
- // Hierarchical terms must be added by ID
- $tax_input[$taxonomy][] = (int) $term_info['term_id'];
- } else {
- // Non-hierarchical terms must be added by name
- if ( is_int( $term ) ) {
- $term = get_term( $term, $taxonomy );
- $tax_input[$taxonomy][] = $term->name;
- } else {
- $tax_input[$taxonomy][] = $term;
- }
- }
- }
- }
- }
-
- if ( isset( $input['terms']['category'] ) && empty( $tax_input['category'] ) && 'revision' !== $post_type->name ) {
- $tax_input['category'][] = get_option( 'default_category' );
- }
-
- unset( $input['terms'], $input['tags'], $input['categories'] );
-
- $insert = array();
-
- if ( !empty( $input['slug'] ) ) {
- $insert['post_name'] = $input['slug'];
- unset( $input['slug'] );
- }
-
- if ( isset( $input['discussion'] ) ) {
- $discussion = (array) $input['discussion'];
- foreach ( array( 'comment', 'ping' ) as $discussion_type ) {
- $discussion_open = sprintf( '%ss_open', $discussion_type );
- $discussion_status = sprintf( '%s_status', $discussion_type );
-
- if ( isset( $discussion[ $discussion_open ] ) ) {
- $is_open = WPCOM_JSON_API::is_truthy( $discussion[ $discussion_open ] );
- $discussion[ $discussion_status ] = $is_open ? 'open' : 'closed';
- }
-
- if ( in_array( $discussion[ $discussion_status ], array( 'open', 'closed' ) ) ) {
- $insert[ $discussion_status ] = $discussion[ $discussion_status ];
- }
- }
- }
-
- unset( $input['discussion'] );
-
- if ( isset( $input['menu_order'] ) ) {
- $insert['menu_order'] = $input['menu_order'];
- unset( $input['menu_order'] );
- }
-
- $publicize = isset( $input['publicize'] ) ? $input['publicize'] : null;
- unset( $input['publicize'] );
-
- $publicize_custom_message = isset( $input['publicize_message'] ) ? $input['publicize_message'] : null;
- unset( $input['publicize_message'] );
-
- if ( isset( $input['featured_image'] ) ) {
- $featured_image = trim( $input['featured_image'] );
- $delete_featured_image = empty( $featured_image );
- unset( $input['featured_image'] );
- }
-
- $metadata = isset( $input['metadata'] ) ? $input['metadata'] : null;
- unset( $input['metadata'] );
-
- $likes = isset( $input['likes_enabled'] ) ? $input['likes_enabled'] : null;
- unset( $input['likes_enabled'] );
-
- $sharing = isset( $input['sharing_enabled'] ) ? $input['sharing_enabled'] : null;
- unset( $input['sharing_enabled'] );
-
- $sticky = isset( $input['sticky'] ) ? $input['sticky'] : null;
- unset( $input['sticky'] );
-
- foreach ( $input as $key => $value ) {
- $insert["post_$key"] = $value;
- }
-
- if ( ! empty( $author_id ) ) {
- $insert['post_author'] = absint( $author_id );
- }
-
- if ( ! empty( $tax_input ) ) {
- $insert['tax_input'] = $tax_input;
- }
-
- $has_media = ! empty( $input['media'] ) ? count( $input['media'] ) : false;
- $has_media_by_url = ! empty( $input['media_urls'] ) ? count( $input['media_urls'] ) : false;
-
- $media_id_string = '';
- if ( $has_media || $has_media_by_url ) {
- $media_files = ! empty( $input['media'] ) ? $input['media'] : array();
- $media_urls = ! empty( $input['media_urls'] ) ? $input['media_urls'] : array();
- $media_attrs = ! empty( $input['media_attrs'] ) ? $input['media_attrs'] : array();
- $media_results = $this->handle_media_creation_v1_1( $media_files, $media_urls, $media_attrs );
- $media_id_string = join( ',', array_filter( array_map( 'absint', $media_results['media_ids'] ) ) );
- }
-
- if ( $new ) {
- if ( isset( $input['content'] ) && ! has_shortcode( $input['content'], 'gallery' ) && ( $has_media || $has_media_by_url ) ) {
- switch ( ( $has_media + $has_media_by_url ) ) {
- case 0 :
- // No images - do nothing.
- break;
- case 1 :
- // 1 image - make it big
- $insert['post_content'] = $input['content'] = sprintf(
- "[gallery size=full ids='%s' columns=1]\n\n",
- $media_id_string
- ) . $input['content'];
- break;
- default :
- // Several images - 3 column gallery
- $insert['post_content'] = $input['content'] = sprintf(
- "[gallery ids='%s']\n\n",
- $media_id_string
- ) . $input['content'];
- break;
- }
- }
-
- $post_id = wp_insert_post( add_magic_quotes( $insert ), true );
- } else {
- $insert['ID'] = $post->ID;
-
- // wp_update_post ignores date unless edit_date is set
- // See: http://codex.wordpress.org/Function_Reference/wp_update_post#Scheduling_posts
- // See: https://core.trac.wordpress.org/browser/tags/3.9.2/src/wp-includes/post.php#L3302
- if ( isset( $input['date_gmt'] ) || isset( $input['date'] ) ) {
- $insert['edit_date'] = true;
- }
-
- // this two-step process ensures any changes submitted along with status=trash get saved before trashing
- if ( isset( $input['status'] ) && 'trash' === $input['status'] ) {
- // if we insert it with status='trash', it will get double-trashed, so insert it as a draft first
- unset( $insert['status'] );
- $post_id = wp_update_post( (object) $insert );
- // now call wp_trash_post so post_meta gets set and any filters get called
- wp_trash_post( $post_id );
- } else {
- $post_id = wp_update_post( (object) $insert );
- }
- }
-
-
- if ( !$post_id || is_wp_error( $post_id ) ) {
- return $post_id;
- }
-
- // make sure this post actually exists and is not an error of some kind (ie, trying to load media in the posts endpoint)
- $post_check = $this->get_post_by( 'ID', $post_id, $args['context'] );
- if ( is_wp_error( $post_check ) ) {
- return $post_check;
- }
-
- if ( $media_id_string ) {
- // Yes - this is really how wp-admin does it.
- $wpdb->query( $wpdb->prepare(
- "UPDATE $wpdb->posts SET post_parent = %d WHERE post_type = 'attachment' AND ID IN ( $media_id_string )",
- $post_id
- ) );
- foreach ( $media_results['media_ids'] as $media_id ) {
- clean_attachment_cache( $media_id );
- }
- clean_post_cache( $post_id );
- }
-
- // set page template for this post..
- if ( isset( $input['page_template'] ) && 'page' == $post_type->name ) {
- $page_template = $input['page_template'];
- $page_templates = wp_get_theme()->get_page_templates( get_post( $post_id ) );
- if ( empty( $page_template ) || 'default' == $page_template || isset( $page_templates[ $page_template ] ) ) {
- update_post_meta( $post_id, '_wp_page_template', $page_template );
- }
- }
-
- // Set like status for the post
- /** This filter is documented in modules/likes.php */
- $sitewide_likes_enabled = (bool) apply_filters( 'wpl_is_enabled_sitewide', ! get_option( 'disabled_likes' ) );
- if ( $new ) {
- if ( $sitewide_likes_enabled ) {
- if ( false === $likes ) {
- update_post_meta( $post_id, 'switch_like_status', 0 );
- } else {
- delete_post_meta( $post_id, 'switch_like_status' );
- }
- } else {
- if ( $likes ) {
- update_post_meta( $post_id, 'switch_like_status', 1 );
- } else {
- delete_post_meta( $post_id, 'switch_like_status' );
- }
- }
- } else {
- if ( isset( $likes ) ) {
- if ( $sitewide_likes_enabled ) {
- if ( false === $likes ) {
- update_post_meta( $post_id, 'switch_like_status', 0 );
- } else {
- delete_post_meta( $post_id, 'switch_like_status' );
- }
- } else {
- if ( true === $likes ) {
- update_post_meta( $post_id, 'switch_like_status', 1 );
- } else {
- delete_post_meta( $post_id, 'switch_like_status' );
- }
- }
- }
- }
-
- // Set sharing status of the post
- if ( $new ) {
- $sharing_enabled = isset( $sharing ) ? (bool) $sharing : true;
- if ( false === $sharing_enabled ) {
- update_post_meta( $post_id, 'sharing_disabled', 1 );
- }
- }
- else {
- if ( isset( $sharing ) && true === $sharing ) {
- delete_post_meta( $post_id, 'sharing_disabled' );
- } else if ( isset( $sharing ) && false == $sharing ) {
- update_post_meta( $post_id, 'sharing_disabled', 1 );
- }
- }
-
- if ( isset( $sticky ) ) {
- if ( true === $sticky ) {
- stick_post( $post_id );
- } else {
- unstick_post( $post_id );
- }
- }
-
- // WPCOM Specific (Jetpack's will get bumped elsewhere
- // Tracks how many posts are published and sets meta
- // so we can track some other cool stats (like likes & comments on posts published)
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- if (
- ( $new && 'publish' == $input['status'] )
- || (
- ! $new && isset( $last_status )
- && 'publish' != $last_status
- && isset( $new_status )
- && 'publish' == $new_status
- )
- ) {
- /** This action is documented in modules/widgets/social-media-icons.php */
- do_action( 'jetpack_bump_stats_extras', 'api-insights-posts', $this->api->token_details['client_id'] );
- update_post_meta( $post_id, '_rest_api_published', 1 );
- update_post_meta( $post_id, '_rest_api_client_id', $this->api->token_details['client_id'] );
- }
- }
-
-
- // We ask the user/dev to pass Publicize services he/she wants activated for the post, but Publicize expects us
- // to instead flag the ones we don't want to be skipped. proceed with said logic.
- // any posts coming from Path (client ID 25952) should also not publicize
- if ( $publicize === false || ( isset( $this->api->token_details['client_id'] ) && 25952 == $this->api->token_details['client_id'] ) ) {
- // No publicize at all, skip all by ID
- foreach ( $GLOBALS['publicize_ui']->publicize->get_services( 'all' ) as $name => $service ) {
- delete_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_SKIP . $name );
- $service_connections = $GLOBALS['publicize_ui']->publicize->get_connections( $name );
- if ( ! $service_connections ) {
- continue;
- }
- foreach ( $service_connections as $service_connection ) {
- update_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_SKIP . $service_connection->unique_id, 1 );
- }
- }
- } else if ( is_array( $publicize ) && ( count ( $publicize ) > 0 ) ) {
- foreach ( $GLOBALS['publicize_ui']->publicize->get_services( 'all' ) as $name => $service ) {
- /*
- * We support both indexed and associative arrays:
- * * indexed are to pass entire services
- * * associative are to pass specific connections per service
- *
- * We do support mixed arrays: mixed integer and string keys (see 3rd example below).
- *
- * EG: array( 'twitter', 'facebook') will only publicize to those, ignoring the other available services
- * Form data: publicize[]=twitter&publicize[]=facebook
- * EG: array( 'twitter' => '(int) $pub_conn_id_0, (int) $pub_conn_id_3', 'facebook' => (int) $pub_conn_id_7 ) will publicize to two Twitter accounts, and one Facebook connection, of potentially many.
- * Form data: publicize[twitter]=$pub_conn_id_0,$pub_conn_id_3&publicize[facebook]=$pub_conn_id_7
- * EG: array( 'twitter', 'facebook' => '(int) $pub_conn_id_0, (int) $pub_conn_id_3' ) will publicize to all available Twitter accounts, but only 2 of potentially many Facebook connections
- * Form data: publicize[]=twitter&publicize[facebook]=$pub_conn_id_0,$pub_conn_id_3
- */
-
- // Delete any stale SKIP value for the service by name. We'll add it back by ID.
- delete_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_SKIP . $name );
-
- // Get the user's connections
- $service_connections = $GLOBALS['publicize_ui']->publicize->get_connections( $name );
-
- // if the user doesn't have any connections for this service, move on
- if ( ! $service_connections ) {
- continue;
- }
-
- if ( !in_array( $name, $publicize ) && !array_key_exists( $name, $publicize ) ) {
- // Skip the whole service by adding each connection ID
- foreach ( $service_connections as $service_connection ) {
- update_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_SKIP . $service_connection->unique_id, 1 );
- }
- } else if ( !empty( $publicize[ $name ] ) ) {
- // Seems we're being asked to only push to [a] specific connection[s].
- // Explode the list on commas, which will also support a single passed ID
- $requested_connections = explode( ',', ( preg_replace( '/[\s]*/', '', $publicize[ $name ] ) ) );
-
- // Flag the connections we can't match with the requested list to be skipped.
- foreach ( $service_connections as $service_connection ) {
- if ( !in_array( $service_connection->meta['connection_data']->id, $requested_connections ) ) {
- update_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_SKIP . $service_connection->unique_id, 1 );
- } else {
- delete_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_SKIP . $service_connection->unique_id );
- }
- }
- } else {
- // delete all SKIP values; it's okay to publish to all connected IDs for this service
- foreach ( $service_connections as $service_connection ) {
- delete_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_SKIP . $service_connection->unique_id );
- }
- }
- }
- }
-
- if ( ! is_null( $publicize_custom_message ) ) {
- if ( empty( $publicize_custom_message ) ) {
- delete_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_MESS );
- } else {
- update_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_MESS, trim( $publicize_custom_message ) );
- }
- }
-
- if ( ! empty( $insert['post_format'] ) ) {
- if ( 'default' !== strtolower( $insert['post_format'] ) ) {
- set_post_format( $post_id, $insert['post_format'] );
- }
- else {
- set_post_format( $post_id, get_option( 'default_post_format' ) );
- }
- }
-
- if ( isset( $featured_image ) ) {
- $this->parse_and_set_featured_image( $post_id, $delete_featured_image, $featured_image );
- }
-
- if ( ! empty( $metadata ) ) {
- foreach ( (array) $metadata as $meta ) {
-
- $meta = (object) $meta;
-
- // Custom meta description can only be set on sites that have a business subscription.
- if ( Jetpack_SEO_Posts::DESCRIPTION_META_KEY == $meta->key && ! Jetpack_SEO_Utils::is_enabled_jetpack_seo() ) {
- return new WP_Error( 'unauthorized', __( 'SEO tools are not enabled for this site.', 'jetpack' ), 403 );
- }
-
- $existing_meta_item = new stdClass;
-
- if ( empty( $meta->operation ) )
- $meta->operation = 'update';
-
- if ( ! empty( $meta->value ) ) {
- if ( 'true' == $meta->value )
- $meta->value = true;
- if ( 'false' == $meta->value )
- $meta->value = false;
- }
-
- if ( ! empty( $meta->id ) ) {
- $meta->id = absint( $meta->id );
- $existing_meta_item = get_metadata_by_mid( 'post', $meta->id );
- if ( $post_id !== (int) $existing_meta_item->post_id ) {
- // Only allow updates for metadata on this post
- continue;
- }
- }
-
- $unslashed_meta_key = wp_unslash( $meta->key ); // should match what the final key will be
- $meta->key = wp_slash( $meta->key );
- $unslashed_existing_meta_key = wp_unslash( $existing_meta_item->meta_key );
- $existing_meta_item->meta_key = wp_slash( $existing_meta_item->meta_key );
-
- // make sure that the meta id passed matches the existing meta key
- if ( ! empty( $meta->id ) && ! empty( $meta->key ) ) {
- $meta_by_id = get_metadata_by_mid( 'post', $meta->id );
- if ( $meta_by_id->meta_key !== $meta->key ) {
- continue; // skip this meta
- }
- }
-
- switch ( $meta->operation ) {
- case 'delete':
- if ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_existing_meta_key ) ) {
- delete_metadata_by_mid( 'post', $meta->id );
- } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_meta_key ) ) {
- delete_post_meta( $post_id, $meta->key, $meta->previous_value );
- } elseif ( ! empty( $meta->key ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_meta_key ) ) {
- delete_post_meta( $post_id, $meta->key );
- }
-
- break;
- case 'add':
- if ( ! empty( $meta->id ) || ! empty( $meta->previous_value ) ) {
- break;
- } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) {
- add_post_meta( $post_id, $meta->key, $meta->value );
- }
-
- break;
- case 'update':
- if ( ! isset( $meta->value ) ) {
- break;
- } elseif ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_existing_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
- update_metadata_by_mid( 'post', $meta->id, $meta->value );
- } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
- update_post_meta( $post_id, $meta->key,$meta->value, $meta->previous_value );
- } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
- update_post_meta( $post_id, $meta->key, $meta->value );
- }
-
- break;
- }
- }
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-update-post-endpoint.php */
- do_action( 'rest_api_inserted_post', $post_id, $insert, $new );
-
- $return = $this->get_post_by( 'ID', $post_id, $args['context'] );
- if ( !$return || is_wp_error( $return ) ) {
- return $return;
- }
-
- if ( isset( $input['type'] ) && 'revision' === $input['type'] ) {
- $return['preview_nonce'] = wp_create_nonce( 'post_preview_' . $input['parent'] );
- }
-
- if ( isset( $sticky ) ) {
- // workaround for sticky test occasionally failing, maybe a race condition with stick_post() above
- $return['sticky'] = ( true === $sticky );
- }
-
- if ( ! empty( $media_results['errors'] ) )
- $return['media_errors'] = $media_results['errors'];
-
- if ( 'publish' !== $post->post_status ) {
- $sal_site = $this->get_sal_post_by( 'ID', $post_id, $args['context'] );
- $return['other_URLs'] = (object) $sal_site->get_permalink_suggestions( $input['title'] );
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'posts' );
-
- return $return;
- }
-
- // /sites/%s/posts/%d/delete -> $blog_id, $post_id
- function delete_post( $path, $blog_id, $post_id ) {
- $post = get_post( $post_id );
- if ( !$post || is_wp_error( $post ) ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
- }
-
- if ( ! $this->is_post_type_allowed( $post->post_type ) ) {
- return new WP_Error( 'unknown_post_type', 'Unknown post type', 404 );
- }
-
- if ( !current_user_can( 'delete_post', $post->ID ) ) {
- return new WP_Error( 'unauthorized', 'User cannot delete posts', 403 );
- }
-
- $args = $this->query_args();
- $return = $this->get_post_by( 'ID', $post->ID, $args['context'] );
- if ( !$return || is_wp_error( $return ) ) {
- return $return;
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'posts' );
-
- // we need to call wp_trash_post so that untrash will work correctly for all post types
- if ( 'trash' === $post->post_status )
- wp_delete_post( $post->ID );
- else
- wp_trash_post( $post->ID );
-
- $status = get_post_status( $post->ID );
- if ( false === $status ) {
- $return['status'] = 'deleted';
- return $return;
- }
-
- return $this->get_post_by( 'ID', $post->ID, $args['context'] );
- }
-
- // /sites/%s/posts/%d/restore -> $blog_id, $post_id
- function restore_post( $path, $blog_id, $post_id ) {
- $args = $this->query_args();
- $post = get_post( $post_id );
-
- if ( !$post || is_wp_error( $post ) ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
- }
-
- if ( !current_user_can( 'delete_post', $post->ID ) ) {
- return new WP_Error( 'unauthorized', 'User cannot restore trashed posts', 403 );
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'posts' );
-
- wp_untrash_post( $post->ID );
-
- return $this->get_post_by( 'ID', $post->ID, $args['context'] );
- }
-
- protected function parse_and_set_featured_image( $post_id, $delete_featured_image, $featured_image ) {
- if ( $delete_featured_image ) {
- delete_post_thumbnail( $post_id );
- return;
- }
-
- $featured_image = (string) $featured_image;
-
- // if we got a post ID, we can just set it as the thumbnail
- if ( ctype_digit( $featured_image ) && 'attachment' == get_post_type( $featured_image ) ) {
- set_post_thumbnail( $post_id, $featured_image );
- return $featured_image;
- }
-
- $featured_image_id = $this->handle_media_sideload( $featured_image, $post_id, 'image' );
-
- if ( empty( $featured_image_id ) || ! is_int( $featured_image_id ) )
- return false;
-
- set_post_thumbnail( $post_id, $featured_image_id );
- return $featured_image_id;
- }
-
- protected function parse_and_set_author( $author = null, $post_type = 'post' ) {
- if ( empty( $author ) || ! post_type_supports( $post_type, 'author' ) )
- return get_current_user_id();
-
- $author = (string) $author;
- if ( ctype_digit( $author ) ) {
- $_user = get_user_by( 'id', $author );
- if ( ! $_user || is_wp_error( $_user ) )
- return new WP_Error( 'invalid_author', 'Invalid author provided' );
-
- return $_user->ID;
- }
-
- $_user = get_user_by( 'login', $author );
- if ( ! $_user || is_wp_error( $_user ) )
- return new WP_Error( 'invalid_author', 'Invalid author provided' );
-
- return $_user->ID;
- }
-
- protected function should_load_theme_functions( $post_id = null ) {
- if ( empty( $post_id ) ) {
- $input = $this->input( true );
- $type = $input['type'];
- } else {
- $type = get_post_type( $post_id );
- }
-
- return ! empty( $type ) && ! in_array( $type, array( 'post', 'revision' ) );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-2-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-2-endpoint.php
deleted file mode 100644
index 113766a1..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-post-v1-2-endpoint.php
+++ /dev/null
@@ -1,873 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Update_Post_v1_2_Endpoint( array(
- 'description' => 'Create a post.',
- 'group' => 'posts',
- 'stat' => 'posts:new',
- 'min_version' => '1.2',
- 'max_version' => '1.2',
- 'method' => 'POST',
- 'path' => '/sites/%s/posts/new',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'query_parameters' => array(
- 'autosave' => '(bool) True if the post was saved automatically.',
- ),
-
- 'request_format' => array(
- // explicitly document all input
- 'date' => "(ISO 8601 datetime) The post's creation time.",
- 'title' => '(HTML) The post title.',
- 'content' => '(HTML) The post content.',
- 'excerpt' => '(HTML) An optional post excerpt.',
- 'slug' => '(string) The name (slug) for the post, used in URLs.',
- 'author' => '(string) The username or ID for the user to assign the post to.',
- 'publicize' => '(array|bool) True or false if the post be publicized to external services. An array of services if we only want to publicize to a select few. Defaults to true.',
- 'publicize_message' => '(string) Custom message to be publicized to external services.',
- 'status' => array(
- 'publish' => 'Publish the post.',
- 'private' => 'Privately publish the post.',
- 'draft' => 'Save the post as a draft.',
- 'pending' => 'Mark the post as pending editorial approval.',
- 'future' => 'Schedule the post (alias for publish; you must also set a future date).',
- 'auto-draft' => 'Save a placeholder for a newly created post, with no content.',
- ),
- 'sticky' => array(
- 'false' => 'Post is not marked as sticky.',
- 'true' => 'Stick the post to the front page.',
- ),
- 'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
- 'parent' => "(int) The post ID of the new post's parent.",
- 'type' => "(string) The post type. Defaults to 'post'. Post types besides post and page need to be whitelisted using the <code>rest_api_allowed_post_types</code> filter.",
- 'terms' => '(object) Mapping of taxonomy to comma-separated list or array of term names',
- 'categories' => "(array|string) Comma-separated list or array of category names",
- 'tags' => "(array|string) Comma-separated list or array of tag names",
- 'terms_by_id' => '(object) Mapping of taxonomy to comma-separated list or array of term IDs',
- 'categories_by_id' => "(array|string) Comma-separated list or array of category IDs",
- 'tags_by_id' => "(array|string) Comma-separated list or array of tag IDs",
- 'format' => array_merge( array( 'default' => 'Use default post format' ), get_post_format_strings() ),
- 'featured_image' => "(string) The post ID of an existing attachment to set as the featured image. Pass an empty string to delete the existing image.",
- 'media' => "(media) An array of files to attach to the post. To upload media, the entire request should be multipart/form-data encoded. Multiple media items will be displayed in a gallery. Accepts jpg, jpeg, png, gif, pdf, doc, ppt, odt, pptx, docx, pps, ppsx, xls, xlsx, key. Audio and Video may also be available. See <code>allowed_file_types</code> in the options response of the site endpoint. Errors produced by media uploads, if any, will be in `media_errors` in the response. <br /><br /><strong>Example</strong>:<br />" .
- "<code>curl \<br />--form 'title=Image Post' \<br />--form 'media[0]=@/path/to/file.jpg' \<br />--form 'media_attrs[0][caption]=My Great Photo' \<br />-H 'Authorization: BEARER your-token' \<br />'https://public-api.wordpress.com/rest/v1/sites/123/posts/new'</code>",
- 'media_urls' => "(array) An array of URLs for images to attach to a post. Sideloads the media in for a post. Errors produced by media sideloading, if any, will be in `media_errors` in the response.",
- 'media_attrs' => "(array) An array of attributes (`title`, `description` and `caption`) are supported to assign to the media uploaded via the `media` or `media_urls` properties. You must use a numeric index for the keys of `media_attrs` which follow the same sequence as `media` and `media_urls`. <br /><br /><strong>Example</strong>:<br />" .
- "<code>curl \<br />--form 'title=Gallery Post' \<br />--form 'media[]=@/path/to/file1.jpg' \<br />--form 'media_urls[]=http://exapmple.com/file2.jpg' \<br /> \<br />--form 'media_attrs[0][caption]=This will be the caption for file1.jpg' \<br />--form 'media_attrs[1][title]=This will be the title for file2.jpg' \<br />-H 'Authorization: BEARER your-token' \<br />'https://public-api.wordpress.com/rest/v1/sites/123/posts/new'</code>",
- 'metadata' => "(array) Array of metadata objects containing the following properties: `key` (metadata key), `id` (meta ID), `previous_value` (if set, the action will only occur for the provided previous value), `value` (the new value to set the meta to), `operation` (the operation to perform: `update` or `add`; defaults to `update`). All unprotected meta keys are available by default for read requests. Both unprotected and protected meta keys are avaiable for authenticated requests with proper capabilities. Protected meta keys can be made available with the <code>rest_api_allowed_public_metadata</code> filter.",
- 'discussion' => '(object) A hash containing one or more of the following boolean values, which default to the blog\'s discussion preferences: `comments_open`, `pings_open`',
- 'likes_enabled' => "(bool) Should the post be open to likes? Defaults to the blog's preference.",
- 'sharing_enabled' => "(bool) Should sharing buttons show on this post? Defaults to true.",
- 'menu_order' => "(int) (Pages Only) the order pages should appear in. Use 0 to maintain alphabetical order.",
- 'page_template' => '(string) (Pages Only) The page template this page should use.',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.2/sites/82974409/posts/new/',
-
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
-
- 'body' => array(
- 'title' => 'Hello World',
- 'content' => 'Hello. I am a test post. I was created by the API',
- 'tags' => 'tests',
- 'categories' => 'API'
- )
- )
-) );
-
-new WPCOM_JSON_API_Update_Post_v1_2_Endpoint( array(
- 'description' => 'Edit a post.',
- 'group' => 'posts',
- 'stat' => 'posts:1:POST',
- 'min_version' => '1.2',
- 'max_version' => '1.2',
- 'method' => 'POST',
- 'path' => '/sites/%s/posts/%d',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$post_ID' => '(int) The post ID',
- ),
- 'query_parameters' => array(
- 'autosave' => '(bool) True if the post was saved automatically.',
- ),
-
- 'request_format' => array(
- 'date' => "(ISO 8601 datetime) The post's creation time.",
- 'title' => '(HTML) The post title.',
- 'content' => '(HTML) The post content.',
- 'excerpt' => '(HTML) An optional post excerpt.',
- 'slug' => '(string) The name (slug) for the post, used in URLs.',
- 'author' => '(string) The username or ID for the user to assign the post to.',
- 'publicize' => '(array|bool) True or false if the post be publicized to external services. An array of services if we only want to publicize to a select few. Defaults to true.',
- 'publicize_message' => '(string) Custom message to be publicized to external services.',
- 'status' => array(
- 'publish' => 'Publish the post.',
- 'private' => 'Privately publish the post.',
- 'draft' => 'Save the post as a draft.',
- 'future' => 'Schedule the post (alias for publish; you must also set a future date).',
- 'pending' => 'Mark the post as pending editorial approval.',
- 'trash' => 'Set the post as trashed.',
- ),
- 'sticky' => array(
- 'false' => 'Post is not marked as sticky.',
- 'true' => 'Stick the post to the front page.',
- ),
- 'password' => '(string) The plaintext password protecting the post, or, more likely, the empty string if the post is not password protected.',
- 'parent' => "(int) The post ID of the new post's parent.",
- 'terms' => '(object) Mapping of taxonomy to comma-separated list or array of term names',
- 'terms_by_id' => '(object) Mapping of taxonomy to comma-separated list or array of term IDs',
- 'categories' => "(array|string) Comma-separated list or array of category names",
- 'categories_by_id' => "(array|string) Comma-separated list or array of category IDs",
- 'tags' => "(array|string) Comma-separated list or array of tag names",
- 'tags_by_id' => "(array|string) Comma-separated list or array of tag IDs",
- 'format' => array_merge( array( 'default' => 'Use default post format' ), get_post_format_strings() ),
- 'discussion' => '(object) A hash containing one or more of the following boolean values, which default to the blog\'s discussion preferences: `comments_open`, `pings_open`',
- 'likes_enabled' => "(bool) Should the post be open to likes?",
- 'menu_order' => "(int) (Pages only) the order pages should appear in. Use 0 to maintain alphabetical order.",
- 'page_template' => '(string) (Pages Only) The page template this page should use.',
- 'sharing_enabled' => "(bool) Should sharing buttons show on this post?",
- 'featured_image' => "(string) The post ID of an existing attachment to set as the featured image. Pass an empty string to delete the existing image.",
- 'media' => "(media) An array of files to attach to the post. To upload media, the entire request should be multipart/form-data encoded. Multiple media items will be displayed in a gallery. Accepts jpg, jpeg, png, gif, pdf, doc, ppt, odt, pptx, docx, pps, ppsx, xls, xlsx, key. Audio and Video may also be available. See <code>allowed_file_types</code> in the options resposne of the site endpoint. <br /><br /><strong>Example</strong>:<br />" .
- "<code>curl \<br />--form 'title=Image' \<br />--form 'media[]=@/path/to/file.jpg' \<br />-H 'Authorization: BEARER your-token' \<br />'https://public-api.wordpress.com/rest/v1/sites/123/posts/new'</code>",
- 'media_urls' => "(array) An array of URLs for images to attach to a post. Sideloads the media in for a post.",
- 'metadata' => "(array) Array of metadata objects containing the following properties: `key` (metadata key), `id` (meta ID), `previous_value` (if set, the action will only occur for the provided previous value), `value` (the new value to set the meta to), `operation` (the operation to perform: `update` or `add`; defaults to `update`). All unprotected meta keys are available by default for read requests. Both unprotected and protected meta keys are available for authenticated requests with proper capabilities. Protected meta keys can be made available with the <code>rest_api_allowed_public_metadata</code> filter.",
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.2/sites/82974409/posts/881',
-
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
-
- 'body' => array(
- 'title' => 'Hello World (Again)',
- 'content' => 'Hello. I am an edited post. I was edited by the API',
- 'tags' => 'tests',
- 'categories' => 'API'
- )
- )
-) );
-
-class WPCOM_JSON_API_Update_Post_v1_2_Endpoint extends WPCOM_JSON_API_Update_Post_v1_1_Endpoint {
-
- // /sites/%s/posts/new -> $blog_id
- // /sites/%s/posts/%d -> $blog_id, $post_id
- function write_post( $path, $blog_id, $post_id ) {
- global $wpdb;
-
- $new = $this->api->ends_with( $path, '/new' );
- $args = $this->query_args();
-
- if ( ! empty( $args['autosave'] ) ) {
- define( 'DOING_AUTOSAVE', true );
- }
-
- // unhook publicize, it's hooked again later -- without this, skipping services is impossible
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- remove_action( 'save_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ), 100, 2 );
- add_action( 'rest_api_inserted_post', array( $GLOBALS['publicize_ui']->publicize, 'async_publicize_post' ) );
-
- if ( $this->should_load_theme_functions( $post_id ) ) {
- $this->load_theme_functions();
- }
- }
-
- if ( $new ) {
- $input = $this->input( true );
-
- // 'future' is an alias for 'publish' for now
- if ( isset( $input['status'] ) && 'future' === $input['status'] ) {
- $input['status'] = 'publish';
- }
-
- if ( 'revision' === $input['type'] ) {
- if ( ! isset( $input['parent'] ) ) {
- return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
- }
- $input['status'] = 'inherit'; // force inherit for revision type
- $input['slug'] = $input['parent'] . '-autosave-v1';
- }
- elseif ( !isset( $input['title'] ) && !isset( $input['content'] ) && !isset( $input['excerpt'] ) ) {
- return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
- }
-
- // default to post
- if ( empty( $input['type'] ) )
- $input['type'] = 'post';
-
- $post_type = get_post_type_object( $input['type'] );
-
- if ( ! $this->is_post_type_allowed( $input['type'] ) ) {
- return new WP_Error( 'unknown_post_type', 'Unknown post type', 404 );
- }
-
- if ( ! empty( $input['author'] ) ) {
- $author_id = parent::parse_and_set_author( $input['author'], $input['type'] );
- unset( $input['author'] );
- if ( is_wp_error( $author_id ) )
- return $author_id;
- }
-
- if ( 'publish' === $input['status'] ) {
- if ( ! current_user_can( $post_type->cap->publish_posts ) ) {
- if ( current_user_can( $post_type->cap->edit_posts ) ) {
- $input['status'] = 'pending';
- } else {
- return new WP_Error( 'unauthorized', 'User cannot publish posts', 403 );
- }
- }
- } else {
- if ( !current_user_can( $post_type->cap->edit_posts ) ) {
- return new WP_Error( 'unauthorized', 'User cannot edit posts', 403 );
- }
- }
- } else {
- $input = $this->input( false );
-
- if ( !is_array( $input ) || !$input ) {
- return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
- }
-
- if ( isset( $input['status'] ) && 'trash' === $input['status'] && ! current_user_can( 'delete_post', $post_id ) ) {
- return new WP_Error( 'unauthorized', 'User cannot delete post', 403 );
- }
-
- // 'future' is an alias for 'publish' for now
- if ( isset( $input['status'] ) && 'future' === $input['status'] ) {
- $input['status'] = 'publish';
- }
-
- $post = get_post( $post_id );
- $_post_type = ( ! empty( $input['type'] ) ) ? $input['type'] : $post->post_type;
- $post_type = get_post_type_object( $_post_type );
- if ( !$post || is_wp_error( $post ) ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
- }
-
- if ( !current_user_can( 'edit_post', $post->ID ) ) {
- return new WP_Error( 'unauthorized', 'User cannot edit post', 403 );
- }
-
- if ( ! empty( $input['author'] ) ) {
- $author_id = parent::parse_and_set_author( $input['author'], $_post_type );
- unset( $input['author'] );
- if ( is_wp_error( $author_id ) )
- return $author_id;
- }
-
- if ( ( isset( $input['status'] ) && 'publish' === $input['status'] ) && 'publish' !== $post->post_status && !current_user_can( 'publish_post', $post->ID ) ) {
- $input['status'] = 'pending';
- }
- $last_status = $post->post_status;
- $new_status = isset( $input['status'] ) ? $input['status'] : $last_status;
-
- // Make sure that drafts get the current date when transitioning to publish if not supplied in the post.
- // Similarly, scheduled posts that are manually published before their scheduled date should have the date reset.
- $date_in_past = ( strtotime($post->post_date_gmt) < time() );
- $reset_draft_date = 'publish' === $new_status && 'draft' === $last_status && ! isset( $input['date_gmt'] ) && $date_in_past;
- $reset_scheduled_date = 'publish' === $new_status && 'future' === $last_status && ! isset( $input['date_gmt'] ) && ! $date_in_past;
-
- if ( $reset_draft_date || $reset_scheduled_date ) {
- $input['date_gmt'] = gmdate( 'Y-m-d H:i:s' );
- }
- }
-
- if ( function_exists( 'wpcom_switch_to_blog_locale' ) ) {
- // fixes calypso-pre-oss #12476: respect blog locale when creating the post slug
- wpcom_switch_to_blog_locale( $blog_id );
- }
-
- // If date is set, $this->input will set date_gmt, date still needs to be adjusted f
- if ( isset( $input['date_gmt'] ) ) {
- $gmt_offset = get_option( 'gmt_offset' );
- $time_with_offset = strtotime( $input['date_gmt'] ) + $gmt_offset * HOUR_IN_SECONDS;
- $input['date'] = date( 'Y-m-d H:i:s', $time_with_offset );
- }
-
- if ( ! empty( $author_id ) && get_current_user_id() != $author_id ) {
- if ( ! current_user_can( $post_type->cap->edit_others_posts ) ) {
- return new WP_Error( 'unauthorized', "User is not allowed to publish others' posts.", 403 );
- } elseif ( ! user_can( $author_id, $post_type->cap->edit_posts ) ) {
- return new WP_Error( 'unauthorized', 'Assigned author cannot publish post.', 403 );
- }
- }
-
- if ( !is_post_type_hierarchical( $post_type->name ) && 'revision' !== $post_type->name ) {
- unset( $input['parent'] );
- }
-
- foreach ( array( '', '_by_id' ) as $term_key_suffix ) {
- $term_input_key = 'terms' . $term_key_suffix;
- if ( isset( $input[ $term_input_key ] ) ) {
- $input[ $term_input_key ] = (array) $input[ $term_input_key ];
- } else {
- $input[ $term_input_key ] = array();
- }
-
- // Convert comma-separated terms to array before attempting to
- // merge with hardcoded taxonomies
- foreach ( $input[ $term_input_key ] as $taxonomy => $terms ) {
- if ( is_string( $terms ) ) {
- $input[ $term_input_key ][ $taxonomy ] = explode( ',', $terms );
- } else if ( ! is_array( $terms ) ) {
- $input[ $term_input_key ][ $taxonomy ] = array();
- }
- }
-
- // For each hard-coded taxonomy, merge into terms object
- foreach ( array( 'categories' => 'category', 'tags' => 'post_tag' ) as $key_prefix => $taxonomy ) {
- $taxonomy_key = $key_prefix . $term_key_suffix;
- if ( ! isset( $input[ $taxonomy_key ] ) ) {
- continue;
- }
-
- if ( ! isset( $input[ $term_input_key ][ $taxonomy ] ) ) {
- $input[ $term_input_key ][ $taxonomy ] = array();
- }
-
- $terms = $input[ $taxonomy_key ];
- if ( is_string( $terms ) ) {
- $terms = explode( ',', $terms );
- } else if ( ! is_array( $terms ) ) {
- continue;
- }
-
- $input[ $term_input_key ][ $taxonomy ] = array_merge(
- $input[ $term_input_key ][ $taxonomy ],
- $terms
- );
- }
- }
-
- /* add terms by name */
- $tax_input = array();
- foreach ( $input['terms'] as $taxonomy => $terms ) {
- $tax_input[ $taxonomy ] = array();
- $is_hierarchical = is_taxonomy_hierarchical( $taxonomy );
-
- foreach ( $terms as $term ) {
- /**
- * We assume these are names, not IDs, even if they are numeric.
- * Note: A category named "0" will not work right.
- * https://core.trac.wordpress.org/ticket/9059
- */
- if ( ! is_string( $term ) ) {
- continue;
- }
-
- $term_info = get_term_by( 'name', $term, $taxonomy, ARRAY_A );
-
- if ( ! $term_info ) {
- // only add a new tag/cat if the user has access to
- $tax = get_taxonomy( $taxonomy );
-
- // see https://core.trac.wordpress.org/ticket/26409
- if ( $is_hierarchical && ! current_user_can( $tax->cap->edit_terms ) ) {
- continue;
- } else if ( ! current_user_can( $tax->cap->assign_terms ) ) {
- continue;
- }
-
- $term_info = wp_insert_term( $term, $taxonomy );
- }
-
- if ( ! is_wp_error( $term_info ) ) {
- if ( $is_hierarchical ) {
- // Hierarchical terms must be added by ID
- $tax_input[$taxonomy][] = (int) $term_info['term_id'];
- } else {
- // Non-hierarchical terms must be added by name
- $tax_input[$taxonomy][] = $term;
- }
- }
- }
- }
-
- /* add terms by ID */
- foreach ( $input['terms_by_id'] as $taxonomy => $terms ) {
- // combine with any previous selections
- if ( ! isset( $tax_input[ $taxonomy ] ) || ! is_array( $tax_input[ $taxonomy ] ) ) {
- $tax_input[ $taxonomy ] = array();
- }
-
- $is_hierarchical = is_taxonomy_hierarchical( $taxonomy );
-
- foreach ( $terms as $term ) {
- $term = (string) $term; // ctype_digit compat
- if ( ! ctype_digit( $term ) ) {
- // skip anything that doesn't look like an ID
- continue;
- }
- $term = (int) $term;
- $term_info = get_term_by( 'id', $term, $taxonomy, ARRAY_A );
-
- if ( $term_info && ! is_wp_error( $term_info ) ) {
- if ( $is_hierarchical ) {
- // Categories must be added by ID
- $tax_input[$taxonomy][] = $term;
- } else {
- // Tags must be added by name
- $tax_input[$taxonomy][] = $term_info['name'];
- }
- }
- }
- }
-
- if ( ( isset( $input['terms']['category'] ) || isset( $input['terms_by_id']['category'] ) )
- && empty( $tax_input['category'] ) && 'revision' !== $post_type->name ) {
- $tax_input['category'][] = get_option( 'default_category' );
- }
-
- unset( $input['terms'], $input['tags'], $input['categories'], $input['terms_by_id'], $input['tags_by_id'], $input['categories_by_id'] );
-
- $insert = array();
-
- if ( !empty( $input['slug'] ) ) {
- $insert['post_name'] = $input['slug'];
- unset( $input['slug'] );
- }
-
- if ( isset( $input['discussion'] ) ) {
- $discussion = (array) $input['discussion'];
- foreach ( array( 'comment', 'ping' ) as $discussion_type ) {
- $discussion_open = sprintf( '%ss_open', $discussion_type );
- $discussion_status = sprintf( '%s_status', $discussion_type );
-
- if ( isset( $discussion[ $discussion_open ] ) ) {
- $is_open = WPCOM_JSON_API::is_truthy( $discussion[ $discussion_open ] );
- $discussion[ $discussion_status ] = $is_open ? 'open' : 'closed';
- }
-
- if ( in_array( $discussion[ $discussion_status ], array( 'open', 'closed' ) ) ) {
- $insert[ $discussion_status ] = $discussion[ $discussion_status ];
- }
- }
- }
-
- unset( $input['discussion'] );
-
- if ( isset( $input['menu_order'] ) ) {
- $insert['menu_order'] = $input['menu_order'];
- unset( $input['menu_order'] );
- }
-
- $publicize = isset( $input['publicize'] ) ? $input['publicize'] : null;
- unset( $input['publicize'] );
-
- $publicize_custom_message = isset( $input['publicize_message'] ) ? $input['publicize_message'] : null;
- unset( $input['publicize_message'] );
-
- if ( isset( $input['featured_image'] ) ) {
- $featured_image = trim( $input['featured_image'] );
- $delete_featured_image = empty( $featured_image );
- unset( $input['featured_image'] );
- }
-
- $metadata = isset( $input['metadata'] ) ? $input['metadata'] : null;
- unset( $input['metadata'] );
-
- $likes = isset( $input['likes_enabled'] ) ? $input['likes_enabled'] : null;
- unset( $input['likes_enabled'] );
-
- $sharing = isset( $input['sharing_enabled'] ) ? $input['sharing_enabled'] : null;
- unset( $input['sharing_enabled'] );
-
- $sticky = isset( $input['sticky'] ) ? $input['sticky'] : null;
- unset( $input['sticky'] );
-
- foreach ( $input as $key => $value ) {
- $insert["post_$key"] = $value;
- }
-
- if ( ! empty( $author_id ) ) {
- $insert['post_author'] = absint( $author_id );
- }
-
- if ( ! empty( $tax_input ) ) {
- $insert['tax_input'] = $tax_input;
- }
-
- $has_media = ! empty( $input['media'] ) ? count( $input['media'] ) : false;
- $has_media_by_url = ! empty( $input['media_urls'] ) ? count( $input['media_urls'] ) : false;
-
- $media_id_string = '';
- if ( $has_media || $has_media_by_url ) {
- $media_files = ! empty( $input['media'] ) ? $input['media'] : array();
- $media_urls = ! empty( $input['media_urls'] ) ? $input['media_urls'] : array();
- $media_attrs = ! empty( $input['media_attrs'] ) ? $input['media_attrs'] : array();
- $media_results = $this->handle_media_creation_v1_1( $media_files, $media_urls, $media_attrs );
- $media_id_string = join( ',', array_filter( array_map( 'absint', $media_results['media_ids'] ) ) );
- }
-
- if ( $new ) {
- if ( isset( $input['content'] ) && ! has_shortcode( $input['content'], 'gallery' ) && ( $has_media || $has_media_by_url ) ) {
- switch ( ( $has_media + $has_media_by_url ) ) {
- case 0 :
- // No images - do nothing.
- break;
- case 1 :
- // 1 image - make it big
- $insert['post_content'] = $input['content'] = sprintf(
- "[gallery size=full ids='%s' columns=1]\n\n",
- $media_id_string
- ) . $input['content'];
- break;
- default :
- // Several images - 3 column gallery
- $insert['post_content'] = $input['content'] = sprintf(
- "[gallery ids='%s']\n\n",
- $media_id_string
- ) . $input['content'];
- break;
- }
- }
-
- $post_id = wp_insert_post( add_magic_quotes( $insert ), true );
- } else {
- $insert['ID'] = $post->ID;
-
- // wp_update_post ignores date unless edit_date is set
- // See: http://codex.wordpress.org/Function_Reference/wp_update_post#Scheduling_posts
- // See: https://core.trac.wordpress.org/browser/tags/3.9.2/src/wp-includes/post.php#L3302
- if ( isset( $input['date_gmt'] ) || isset( $input['date'] ) ) {
- $insert['edit_date'] = true;
- }
-
- // this two-step process ensures any changes submitted along with status=trash get saved before trashing
- if ( isset( $input['status'] ) && 'trash' === $input['status'] ) {
- // if we insert it with status='trash', it will get double-trashed, so insert it as a draft first
- unset( $insert['status'] );
- $post_id = wp_update_post( (object) $insert );
- // now call wp_trash_post so post_meta gets set and any filters get called
- wp_trash_post( $post_id );
- } else {
- $post_id = wp_update_post( (object) $insert );
- }
- }
-
-
- if ( !$post_id || is_wp_error( $post_id ) ) {
- return $post_id;
- }
-
- // make sure this post actually exists and is not an error of some kind (ie, trying to load media in the posts endpoint)
- $post_check = $this->get_post_by( 'ID', $post_id, $args['context'] );
- if ( is_wp_error( $post_check ) ) {
- return $post_check;
- }
-
- if ( $media_id_string ) {
- // Yes - this is really how wp-admin does it.
- $wpdb->query( $wpdb->prepare(
- "UPDATE $wpdb->posts SET post_parent = %d WHERE post_type = 'attachment' AND ID IN ( $media_id_string )",
- $post_id
- ) );
- foreach ( $media_results['media_ids'] as $media_id ) {
- clean_attachment_cache( $media_id );
- }
- clean_post_cache( $post_id );
- }
-
- // set page template for this post..
- if ( isset( $input['page_template'] ) && 'page' == $post_type->name ) {
- $page_template = $input['page_template'];
- $page_templates = wp_get_theme()->get_page_templates( get_post( $post_id ) );
- if ( empty( $page_template ) || 'default' == $page_template || isset( $page_templates[ $page_template ] ) ) {
- update_post_meta( $post_id, '_wp_page_template', $page_template );
- }
- }
-
- // Set like status for the post
- /** This filter is documented in modules/likes.php */
- $sitewide_likes_enabled = (bool) apply_filters( 'wpl_is_enabled_sitewide', ! get_option( 'disabled_likes' ) );
- if ( $new ) {
- if ( $sitewide_likes_enabled ) {
- if ( false === $likes ) {
- update_post_meta( $post_id, 'switch_like_status', 0 );
- } else {
- delete_post_meta( $post_id, 'switch_like_status' );
- }
- } else {
- if ( $likes ) {
- update_post_meta( $post_id, 'switch_like_status', 1 );
- } else {
- delete_post_meta( $post_id, 'switch_like_status' );
- }
- }
- } else {
- if ( isset( $likes ) ) {
- if ( $sitewide_likes_enabled ) {
- if ( false === $likes ) {
- update_post_meta( $post_id, 'switch_like_status', 0 );
- } else {
- delete_post_meta( $post_id, 'switch_like_status' );
- }
- } else {
- if ( true === $likes ) {
- update_post_meta( $post_id, 'switch_like_status', 1 );
- } else {
- delete_post_meta( $post_id, 'switch_like_status' );
- }
- }
- }
- }
-
- // Set sharing status of the post
- if ( $new ) {
- $sharing_enabled = isset( $sharing ) ? (bool) $sharing : true;
- if ( false === $sharing_enabled ) {
- update_post_meta( $post_id, 'sharing_disabled', 1 );
- }
- }
- else {
- if ( isset( $sharing ) && true === $sharing ) {
- delete_post_meta( $post_id, 'sharing_disabled' );
- } else if ( isset( $sharing ) && false == $sharing ) {
- update_post_meta( $post_id, 'sharing_disabled', 1 );
- }
- }
-
- if ( isset( $sticky ) ) {
- if ( true === $sticky ) {
- stick_post( $post_id );
- } else {
- unstick_post( $post_id );
- }
- }
-
- // WPCOM Specific (Jetpack's will get bumped elsewhere
- // Tracks how many posts are published and sets meta
- // so we can track some other cool stats (like likes & comments on posts published)
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- if (
- ( $new && 'publish' == $input['status'] )
- || (
- !$new && isset( $last_status )
- && 'publish' != $last_status
- && isset( $new_status )
- && 'publish' == $new_status
- )
- ) {
- /** This action is documented in modules/widgets/social-media-icons.php */
- do_action( 'jetpack_bump_stats_extras', 'api-insights-posts', $this->api->token_details['client_id'] );
- update_post_meta( $post_id, '_rest_api_published', 1 );
- update_post_meta( $post_id, '_rest_api_client_id', $this->api->token_details['client_id'] );
- }
- }
-
-
- // We ask the user/dev to pass Publicize services he/she wants activated for the post, but Publicize expects us
- // to instead flag the ones we don't want to be skipped. proceed with said logic.
- // any posts coming from Path (client ID 25952) should also not publicize
- if ( $publicize === false || ( isset( $this->api->token_details['client_id'] ) && 25952 == $this->api->token_details['client_id'] ) ) {
- // No publicize at all, skip all by ID
- foreach ( $GLOBALS['publicize_ui']->publicize->get_services( 'all' ) as $name => $service ) {
- delete_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_SKIP . $name );
- $service_connections = $GLOBALS['publicize_ui']->publicize->get_connections( $name );
- if ( ! $service_connections ) {
- continue;
- }
- foreach ( $service_connections as $service_connection ) {
- update_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_SKIP . $service_connection->unique_id, 1 );
- }
- }
- } else if ( is_array( $publicize ) && ( count ( $publicize ) > 0 ) ) {
- foreach ( $GLOBALS['publicize_ui']->publicize->get_services( 'all' ) as $name => $service ) {
- /*
- * We support both indexed and associative arrays:
- * * indexed are to pass entire services
- * * associative are to pass specific connections per service
- *
- * We do support mixed arrays: mixed integer and string keys (see 3rd example below).
- *
- * EG: array( 'twitter', 'facebook') will only publicize to those, ignoring the other available services
- * Form data: publicize[]=twitter&publicize[]=facebook
- * EG: array( 'twitter' => '(int) $pub_conn_id_0, (int) $pub_conn_id_3', 'facebook' => (int) $pub_conn_id_7 ) will publicize to two Twitter accounts, and one Facebook connection, of potentially many.
- * Form data: publicize[twitter]=$pub_conn_id_0,$pub_conn_id_3&publicize[facebook]=$pub_conn_id_7
- * EG: array( 'twitter', 'facebook' => '(int) $pub_conn_id_0, (int) $pub_conn_id_3' ) will publicize to all available Twitter accounts, but only 2 of potentially many Facebook connections
- * Form data: publicize[]=twitter&publicize[facebook]=$pub_conn_id_0,$pub_conn_id_3
- */
-
- // Delete any stale SKIP value for the service by name. We'll add it back by ID.
- delete_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_SKIP . $name );
-
- // Get the user's connections
- $service_connections = $GLOBALS['publicize_ui']->publicize->get_connections( $name );
-
- // if the user doesn't have any connections for this service, move on
- if ( ! $service_connections ) {
- continue;
- }
-
- if ( !in_array( $name, $publicize ) && !array_key_exists( $name, $publicize ) ) {
- // Skip the whole service by adding each connection ID
- foreach ( $service_connections as $service_connection ) {
- update_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_SKIP . $service_connection->unique_id, 1 );
- }
- } else if ( !empty( $publicize[ $name ] ) ) {
- // Seems we're being asked to only push to [a] specific connection[s].
- // Explode the list on commas, which will also support a single passed ID
- $requested_connections = explode( ',', ( preg_replace( '/[\s]*/', '', $publicize[ $name ] ) ) );
-
- // Flag the connections we can't match with the requested list to be skipped.
- foreach ( $service_connections as $service_connection ) {
- if ( !in_array( $service_connection->meta['connection_data']->id, $requested_connections ) ) {
- update_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_SKIP . $service_connection->unique_id, 1 );
- } else {
- delete_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_SKIP . $service_connection->unique_id );
- }
- }
- } else {
- // delete all SKIP values; it's okay to publish to all connected IDs for this service
- foreach ( $service_connections as $service_connection ) {
- delete_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_SKIP . $service_connection->unique_id );
- }
- }
- }
- }
-
- if ( ! is_null( $publicize_custom_message ) ) {
- if ( empty( $publicize_custom_message ) ) {
- delete_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_MESS );
- } else {
- update_post_meta( $post_id, $GLOBALS['publicize_ui']->publicize->POST_MESS, trim( $publicize_custom_message ) );
- }
- }
-
- if ( ! empty( $insert['post_format'] ) ) {
- if ( 'default' !== strtolower( $insert['post_format'] ) ) {
- set_post_format( $post_id, $insert['post_format'] );
- }
- else {
- set_post_format( $post_id, get_option( 'default_post_format' ) );
- }
- }
-
- if ( isset( $featured_image ) ) {
- parent::parse_and_set_featured_image( $post_id, $delete_featured_image, $featured_image );
- }
-
- if ( ! empty( $metadata ) ) {
- foreach ( (array) $metadata as $meta ) {
-
- $meta = (object) $meta;
-
- // Custom meta description can only be set on sites that have a business subscription.
- if ( Jetpack_SEO_Posts::DESCRIPTION_META_KEY == $meta->key && ! Jetpack_SEO_Utils::is_enabled_jetpack_seo() ) {
- return new WP_Error( 'unauthorized', __( 'SEO tools are not enabled for this site.', 'jetpack' ), 403 );
- }
-
- $existing_meta_item = new stdClass;
-
- if ( empty( $meta->operation ) )
- $meta->operation = 'update';
-
- if ( ! empty( $meta->value ) ) {
- if ( 'true' == $meta->value )
- $meta->value = true;
- if ( 'false' == $meta->value )
- $meta->value = false;
- }
-
- if ( ! empty( $meta->id ) ) {
- $meta->id = absint( $meta->id );
- $existing_meta_item = get_metadata_by_mid( 'post', $meta->id );
- if ( $post_id !== (int) $existing_meta_item->post_id ) {
- // Only allow updates for metadata on this post
- continue;
- }
- }
-
- $unslashed_meta_key = wp_unslash( $meta->key ); // should match what the final key will be
- $meta->key = wp_slash( $meta->key );
- $unslashed_existing_meta_key = isset( $existing_meta_item->meta_key ) ? wp_unslash( $existing_meta_item->meta_key ) : '';
- $existing_meta_item->meta_key = wp_slash( $existing_meta_item->meta_key );
-
- // make sure that the meta id passed matches the existing meta key
- if ( ! empty( $meta->id ) && ! empty( $meta->key ) ) {
- $meta_by_id = get_metadata_by_mid( 'post', $meta->id );
- if ( $meta_by_id->meta_key !== $meta->key ) {
- continue; // skip this meta
- }
- }
-
- switch ( $meta->operation ) {
- case 'delete':
- if ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_existing_meta_key ) ) {
- delete_metadata_by_mid( 'post', $meta->id );
- } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_meta_key ) ) {
- delete_post_meta( $post_id, $meta->key, $meta->previous_value );
- } elseif ( ! empty( $meta->key ) && current_user_can( 'delete_post_meta', $post_id, $unslashed_meta_key ) ) {
- delete_post_meta( $post_id, $meta->key );
- }
-
- break;
- case 'add':
- if ( ! empty( $meta->id ) || ! empty( $meta->previous_value ) ) {
- break;
- } elseif ( ! empty( $meta->key ) && ! empty( $meta->value ) && ( current_user_can( 'add_post_meta', $post_id, $unslashed_meta_key ) ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) {
- add_post_meta( $post_id, $meta->key, $meta->value );
- }
-
- break;
- case 'update':
- if ( ! isset( $meta->value ) ) {
- break;
- } elseif ( ! empty( $meta->id ) && ! empty( $existing_meta_item->meta_key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_existing_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
- update_metadata_by_mid( 'post', $meta->id, $meta->value );
- } elseif ( ! empty( $meta->key ) && ! empty( $meta->previous_value ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
- update_post_meta( $post_id, $meta->key,$meta->value, $meta->previous_value );
- } elseif ( ! empty( $meta->key ) && ( current_user_can( 'edit_post_meta', $post_id, $unslashed_meta_key ) || WPCOM_JSON_API_Metadata::is_public( $meta->key ) ) ) {
- update_post_meta( $post_id, $meta->key, $meta->value );
- }
-
- break;
- }
- }
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-update-post-endpoint.php */
- do_action( 'rest_api_inserted_post', $post_id, $insert, $new );
-
- $return = $this->get_post_by( 'ID', $post_id, $args['context'] );
- if ( !$return || is_wp_error( $return ) ) {
- return $return;
- }
-
- if ( isset( $input['type'] ) && 'revision' === $input['type'] ) {
- $return['preview_nonce'] = wp_create_nonce( 'post_preview_' . $input['parent'] );
- }
-
- if ( isset( $sticky ) ) {
- // workaround for sticky test occasionally failing, maybe a race condition with stick_post() above
- $return['sticky'] = ( true === $sticky );
- }
-
- if ( ! empty( $media_results['errors'] ) )
- $return['media_errors'] = $media_results['errors'];
-
- if ( 'publish' !== $return['status'] && isset( $input['title'] )) {
- $sal_site = $this->get_sal_post_by( 'ID', $post_id, $args['context'] );
- $return['other_URLs'] = (object) $sal_site->get_permalink_suggestions( $input['title'] );
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'posts' );
-
- return $return;
- }
-
- protected function should_load_theme_functions( $post_id = null ) {
- if ( empty( $post_id ) ) {
- $input = $this->input( true );
- $type = $input['type'];
- } else {
- $type = get_post_type( $post_id );
- }
-
- return ! empty( $type ) && ! in_array( $type, array( 'post', 'revision' ) );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-site-homepage-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-site-homepage-endpoint.php
deleted file mode 100644
index fa8c4cf8..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-site-homepage-endpoint.php
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Update_Site_Homepage_Endpoint( array (
- 'description' => 'Set site homepage settings',
- 'group' => '__do_not_document',
- 'stat' => 'sites:1:homepage',
- 'method' => 'POST',
- 'min_version' => '1.1',
- 'path' => '/sites/%s/homepage',
- 'path_labels' => array(
- '$site' => '(string) Site ID or domain.',
- ),
- 'request_format' => array(
- 'is_page_on_front' => '(bool) True if we will use a page as the homepage; false to use a blog page as the homepage.',
- 'page_on_front_id' => '(int) Optional. The ID of the page to use as the homepage if is_page_on_front is true.',
- 'page_for_posts_id' => '(int) Optional. The ID of the page to use as the blog page if is_page_on_front is true.',
- ),
- 'response_format' => array(
- 'is_page_on_front' => '(bool) True if we will use a page as the homepage; false to use a blog page as the homepage.',
- 'page_on_front_id' => '(int) The ID of the page to use as the homepage if is_page_on_front is true.',
- 'page_for_posts_id' => '(int) The ID of the page to use as the blog page if is_page_on_front is true.',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/homepage',
- 'example_request_data' => array(
- 'headers' => array( 'authorization' => 'Bearer YOUR_API_TOKEN' ),
- 'body' => array(
- 'is_page_on_front' => true,
- 'page_on_front_id' => 1,
- 'page_for_posts_id' => 0,
- ),
- ),
- 'example_response' => '{"is_page_on_front":true,"page_on_front_id":1,"page_for_posts_id":0}'
-) );
-
-class WPCOM_JSON_API_Update_Site_Homepage_Endpoint extends WPCOM_JSON_API_Endpoint {
-
- function callback( $path = '', $site_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $site_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( ! current_user_can( 'edit_theme_options' ) ) {
- return new WP_Error( 'unauthorized', 'User is not authorized to access homepage settings', 403 );
- }
-
- $args = $this->input();
- if ( empty( $args ) || ! is_array( $args ) ) {
- return $this->get_current_settings();
- }
-
- if ( isset( $args['is_page_on_front'] ) ) {
- $show_on_front = $args['is_page_on_front'] ? 'page' : 'posts';
- update_option( 'show_on_front', $show_on_front );
- }
- if ( isset( $args['page_on_front_id'] ) ) {
- update_option( 'page_on_front', $args['page_on_front_id'] );
- }
- if ( isset( $args['page_for_posts_id'] ) ) {
- update_option( 'page_for_posts', $args['page_for_posts_id'] );
- }
-
- return $this->get_current_settings();
- }
-
- function get_current_settings() {
- $is_page_on_front = ( get_option( 'show_on_front' ) === 'page' );
- $page_on_front_id = get_option( 'page_on_front' );
- $page_for_posts_id = get_option( 'page_for_posts' );
-
- return array(
- 'is_page_on_front' => $is_page_on_front,
- 'page_on_front_id' => $page_on_front_id,
- 'page_for_posts_id' => $page_for_posts_id,
- );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-site-logo-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-site-logo-endpoint.php
deleted file mode 100644
index 2ccca0a9..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-site-logo-endpoint.php
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Update_Site_Logo_Endpoint( array (
- 'description' => 'Set site logo settings',
- 'group' => '__do_not_document',
- 'stat' => 'sites:1:logo',
- 'method' => 'POST',
- 'min_version' => '1.1',
- 'path' => '/sites/%s/logo',
- 'path_labels' => array(
- '$site' => '(string) Site ID or domain.',
- ),
- 'request_format' => array(
- 'id' => '(int) The ID of the logo post',
- 'url' => '(string) The URL of the logo post',
- ),
- 'response_format' => array(
- 'id' => '(int) The ID of the logo post',
- 'url' => '(string) The URL of the logo post',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/logo',
- 'example_request_data' => array(
- 'headers' => array( 'authorization' => 'Bearer YOUR_API_TOKEN' ),
- 'body' => array(
- 'id' => 12345,
- 'url' => 'https://s.w.org/about/images/logos/codeispoetry-rgb.png',
- ),
- ),
- 'example_response' => '
- {
- "id": 12345,
- "url": "https:\/\/s.w.org\/about\/images\/logos\/codeispoetry-rgb.png"
- }'
-) );
-
-new WPCOM_JSON_API_Update_Site_Logo_Endpoint( array (
- 'description' => 'Delete site logo settings',
- 'group' => '__do_not_document',
- 'stat' => 'sites:1:logo:delete',
- 'method' => 'POST',
- 'min_version' => '1.1',
- 'path' => '/sites/%s/logo/delete',
- 'path_labels' => array(
- '$site' => '(string) Site ID or domain.',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/logo/delete',
- 'example_request_data' => array(
- 'headers' => array( 'authorization' => 'Bearer YOUR_API_TOKEN' ),
- ),
-) );
-
-class WPCOM_JSON_API_Update_Site_Logo_Endpoint extends WPCOM_JSON_API_Endpoint {
- function callback( $path = '', $site_id = 0 ) {
- // Switch to the given blog.
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $site_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( ! current_user_can( 'edit_theme_options' ) ) {
- return new WP_Error( 'unauthorized', 'User is not authorized to access logo settings', 403 );
- }
-
- if ( strpos( $path, '/delete' ) ) {
- delete_option( 'site_logo' );
- return array();
- }
-
- $args = $this->input();
- $logo_settings = $this->get_current_settings();
- if ( empty( $args ) || ! is_array( $args ) ) {
- return $logo_settings;
- }
-
- if ( isset( $args['id'] ) ) {
- $logo_settings['id'] = intval( $args['id'], 10 );
- }
- if ( isset( $args['url'] ) ) {
- $logo_settings['url'] = $args['url'];
- }
- if ( isset( $args['url'] ) || isset( $args['id'] ) ) {
- update_option( 'site_logo', $logo_settings );
- }
-
- return $this->get_current_settings();
- }
-
- function get_current_settings() {
- $logo_settings = get_option( 'site_logo' );
- if ( ! is_array( $logo_settings ) ) {
- $logo_settings = array();
- }
- return $logo_settings;
- }
-}
-
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-taxonomy-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-taxonomy-endpoint.php
deleted file mode 100644
index 5cab5b3f..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-taxonomy-endpoint.php
+++ /dev/null
@@ -1,314 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Update_Taxonomy_Endpoint( array(
- 'description' => 'Create a new category.',
- 'group' => 'taxonomy',
- 'stat' => 'categories:new',
-
- 'method' => 'POST',
- 'path' => '/sites/%s/categories/new',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'request_format' => array(
- 'name' => '(string) Name of the category',
- 'description' => '(string) A description of the category',
- 'parent' => '(int) ID of the parent category',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/categories/new/',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'name' => 'Puppies',
- )
- )
-) );
-
-new WPCOM_JSON_API_Update_Taxonomy_Endpoint( array(
- 'description' => 'Create a new tag.',
- 'group' => 'taxonomy',
- 'stat' => 'tags:new',
-
- 'method' => 'POST',
- 'path' => '/sites/%s/tags/new',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'request_format' => array(
- 'name' => '(string) Name of the tag',
- 'description' => '(string) A description of the tag',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/tags/new/',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'name' => 'Kitties'
- )
- )
-) );
-
-new WPCOM_JSON_API_Update_Taxonomy_Endpoint( array(
- 'description' => 'Edit a tag.',
- 'group' => 'taxonomy',
- 'stat' => 'tags:1:POST',
-
- 'method' => 'POST',
- 'path' => '/sites/%s/tags/slug:%s',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$tag' => '(string) The tag slug',
- ),
-
- 'request_format' => array(
- 'name' => '(string) Name of the tag',
- 'description' => '(string) A description of the tag',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/tags/slug:testing-tag',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'description' => 'Kitties are awesome!'
- )
- )
-) );
-
-new WPCOM_JSON_API_Update_Taxonomy_Endpoint( array(
- 'description' => 'Edit a category.',
- 'group' => 'taxonomy',
- 'stat' => 'categories:1:POST',
-
- 'method' => 'POST',
- 'path' => '/sites/%s/categories/slug:%s',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$category' => '(string) The category slug',
- ),
-
- 'request_format' => array(
- 'name' => '(string) Name of the category',
- 'description' => '(string) A description of the category',
- 'parent' => '(int) ID of the parent category',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/categories/slug:testing-category',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'description' => 'Puppies are great!'
- )
- )
-) );
-
-new WPCOM_JSON_API_Update_Taxonomy_Endpoint( array(
- 'description' => 'Delete a category.',
- 'group' => 'taxonomy',
- 'stat' => 'categories:1:delete',
-
- 'method' => 'POST',
- 'path' => '/sites/%s/categories/slug:%s/delete',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$category' => '(string) The category slug',
- ),
- 'response_format' => array(
- 'slug' => '(string) The slug of the deleted category',
- 'success' => '(bool) Was the operation successful?',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/categories/slug:$category/delete',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- )
-) );
-
-new WPCOM_JSON_API_Update_Taxonomy_Endpoint( array(
- 'description' => 'Delete a tag.',
- 'group' => 'taxonomy',
- 'stat' => 'tags:1:delete',
-
- 'method' => 'POST',
- 'path' => '/sites/%s/tags/slug:%s/delete',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$tag' => '(string) The tag slug',
- ),
- 'response_format' => array(
- 'slug' => '(string) The slug of the deleted tag',
- 'success' => '(bool) Was the operation successful?',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/tags/slug:$tag/delete',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- )
-) );
-
-class WPCOM_JSON_API_Update_Taxonomy_Endpoint extends WPCOM_JSON_API_Taxonomy_Endpoint {
- // /sites/%s/tags|categories/new -> $blog_id
- // /sites/%s/tags|categories/slug:%s -> $blog_id, $taxonomy_id
- // /sites/%s/tags|categories/slug:%s/delete -> $blog_id, $taxonomy_id
- function callback( $path = '', $blog_id = 0, $object_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( preg_match( '#/tags/#i', $path ) ) {
- $taxonomy_type = "post_tag";
- } else {
- $taxonomy_type = "category";
- }
-
- if ( $this->api->ends_with( $path, '/delete' ) ) {
- return $this->delete_taxonomy( $path, $blog_id, $object_id, $taxonomy_type );
- } elseif ( $this->api->ends_with( $path, '/new' ) ) {
- return $this->new_taxonomy( $path, $blog_id, $taxonomy_type );
- }
-
- return $this->update_taxonomy( $path, $blog_id, $object_id, $taxonomy_type );
- }
-
- // /sites/%s/tags|categories/new -> $blog_id
- function new_taxonomy( $path, $blog_id, $taxonomy_type ) {
- $args = $this->query_args();
- $input = $this->input();
- if ( !is_array( $input ) || !$input || !strlen( $input['name'] ) ) {
- return new WP_Error( 'invalid_input', 'Unknown data passed', 400 );
- }
-
- $user = wp_get_current_user();
- if ( !$user || is_wp_error( $user ) || !$user->ID ) {
- return new WP_Error( 'authorization_required', 'An active access token must be used to manage taxonomies.', 403 );
- }
-
- $tax = get_taxonomy( $taxonomy_type );
- if ( !current_user_can( $tax->cap->edit_terms ) ) {
- return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
- }
-
- if ( 'category' !== $taxonomy_type || ! isset( $input['parent'] ) )
- $input['parent'] = 0;
-
- if ( $term = get_term_by( 'name', $input['name'], $taxonomy_type ) ) {
- // the same name is allowed as long as the parents are different
- if ( $input['parent'] === $term->parent ) {
- return new WP_Error( 'duplicate', 'A taxonomy with that name already exists', 400 );
- }
- }
-
- $data = wp_insert_term( addslashes( $input['name'] ), $taxonomy_type,
- array(
- 'description' => isset( $input['description'] ) ? addslashes( $input['description'] ) : '',
- 'parent' => $input['parent']
- )
- );
-
- if ( is_wp_error( $data ) )
- return $data;
-
- $taxonomy = get_term_by( 'id', $data['term_id'], $taxonomy_type );
-
- $return = $this->get_taxonomy( $taxonomy->slug, $taxonomy_type, $args['context'] );
- if ( !$return || is_wp_error( $return ) ) {
- return $return;
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'taxonomies' );
- return $return;
- }
-
- // /sites/%s/tags|categories/slug:%s -> $blog_id, $taxonomy_id
- function update_taxonomy( $path, $blog_id, $object_id, $taxonomy_type ) {
- $taxonomy = get_term_by( 'slug', $object_id, $taxonomy_type );
- $tax = get_taxonomy( $taxonomy_type );
- if ( !current_user_can( $tax->cap->edit_terms ) )
- return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
-
- if ( !$taxonomy || is_wp_error( $taxonomy ) ) {
- return new WP_Error( 'unknown_taxonomy', 'Unknown taxonomy', 404 );
- }
-
- if ( false === term_exists( $object_id, $taxonomy_type ) ) {
- return new WP_Error( 'unknown_taxonomy', 'That taxonomy does not exist', 404 );
- }
-
- $args = $this->query_args();
- $input = $this->input( false );
- if ( !is_array( $input ) || !$input ) {
- return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
- }
-
- $update = array();
- if ( 'category' === $taxonomy_type && !empty( $input['parent'] ) )
- $update['parent'] = $input['parent'];
-
- if ( !empty( $input['description'] ) )
- $update['description'] = addslashes( $input['description'] );
-
- if ( !empty( $input['name'] ) )
- $update['name'] = addslashes( $input['name'] );
-
-
- $data = wp_update_term( $taxonomy->term_id, $taxonomy_type, $update );
- $taxonomy = get_term_by( 'id', $data['term_id'], $taxonomy_type );
-
- $return = $this->get_taxonomy( $taxonomy->slug, $taxonomy_type, $args['context'] );
- if ( !$return || is_wp_error( $return ) ) {
- return $return;
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'taxonomies' );
- return $return;
- }
-
- // /sites/%s/tags|categories/%s/delete -> $blog_id, $taxonomy_id
- function delete_taxonomy( $path, $blog_id, $object_id, $taxonomy_type ) {
- $taxonomy = get_term_by( 'slug', $object_id, $taxonomy_type );
- $tax = get_taxonomy( $taxonomy_type );
- if ( !current_user_can( $tax->cap->delete_terms ) )
- return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
-
- if ( !$taxonomy || is_wp_error( $taxonomy ) ) {
- return new WP_Error( 'unknown_taxonomy', 'Unknown taxonomy', 404 );
- }
-
- if ( false === term_exists( $object_id, $taxonomy_type ) ) {
- return new WP_Error( 'unknown_taxonomy', 'That taxonomy does not exist', 404 );
- }
-
- $args = $this->query_args();
- $return = $this->get_taxonomy( $taxonomy->slug, $taxonomy_type, $args['context'] );
- if ( !$return || is_wp_error( $return ) ) {
- return $return;
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'taxonomies' );
-
- wp_delete_term( $taxonomy->term_id, $taxonomy_type );
-
- return array(
- 'slug' => (string) $taxonomy->slug,
- 'success' => 'true',
- );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-term-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-term-endpoint.php
deleted file mode 100644
index f3bca5c3..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-term-endpoint.php
+++ /dev/null
@@ -1,238 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Update_Term_Endpoint( array(
- 'description' => 'Create a new term.',
- 'group' => 'taxonomy',
- 'stat' => 'terms:new',
- 'method' => 'POST',
- 'path' => '/sites/%s/taxonomies/%s/terms/new',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$taxonomy' => '(string) Taxonomy',
- ),
- 'request_format' => array(
- 'name' => '(string) Name of the term',
- 'description' => '(string) A description of the term',
- 'parent' => '(int) The parent ID for the term, if hierarchical',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/taxonomies/post_tag/terms/new',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'name' => 'Ribs & Chicken'
- )
- )
-) );
-
-new WPCOM_JSON_API_Update_Term_Endpoint( array(
- 'description' => 'Edit a term.',
- 'group' => 'taxonomy',
- 'stat' => 'terms:1:POST',
- 'method' => 'POST',
- 'path' => '/sites/%s/taxonomies/%s/terms/slug:%s',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$taxonomy' => '(string) Taxonomy',
- '$slug' => '(string) The term slug',
- ),
- 'request_format' => array(
- 'name' => '(string) Name of the term',
- 'description' => '(string) A description of the term',
- 'parent' => '(int) The parent ID for the term, if hierarchical',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/taxonomies/post_tag/terms/slug:testing-term',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'description' => 'The most delicious'
- )
- )
-) );
-
-new WPCOM_JSON_API_Update_Term_Endpoint( array(
- 'description' => 'Delete a term.',
- 'group' => 'taxonomy',
- 'stat' => 'terms:1:delete',
- 'method' => 'POST',
- 'path' => '/sites/%s/taxonomies/%s/terms/slug:%s/delete',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- '$taxonomy' => '(string) Taxonomy',
- '$slug' => '(string) The term slug',
- ),
- 'response_format' => array(
- 'slug' => '(string) The slug of the deleted term',
- 'success' => '(bool) Whether the operation was successful',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/taxonomies/post_tag/terms/slug:$term/delete',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- )
-) );
-
-class WPCOM_JSON_API_Update_Term_Endpoint extends WPCOM_JSON_API_Taxonomy_Endpoint {
- // /sites/%s/taxonomies/%s/terms/new -> $blog_id, $taxonomy
- // /sites/%s/taxonomies/%s/terms/slug:%s -> $blog_id, $taxonomy, $slug
- // /sites/%s/taxonomies/%s/terms/slug:%s/delete -> $blog_id, $taxonomy, $slug
- function callback( $path = '', $blog_id = 0, $taxonomy = 'category', $slug = 0 ) {
- $slug = urldecode( $slug );
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $this->load_theme_functions();
- }
-
- $user = wp_get_current_user();
- if ( ! $user || is_wp_error( $user ) || ! $user->ID ) {
- return new WP_Error( 'authorization_required', 'An active access token must be used to manage taxonomies.', 403 );
- }
-
- $taxonomy_meta = get_taxonomy( $taxonomy );
- if ( false === $taxonomy_meta || (
- ! $taxonomy_meta->public &&
- ! current_user_can( $taxonomy_meta->cap->manage_terms ) &&
- ! current_user_can( $taxonomy_meta->cap->edit_terms ) &&
- ! current_user_can( $taxonomy_meta->cap->delete_terms ) ) ) {
- return new WP_Error( 'invalid_taxonomy', 'The taxonomy does not exist', 400 );
- }
-
- if ( $this->api->ends_with( $path, '/delete' ) ) {
- return $this->delete_term( $path, $blog_id, $slug, $taxonomy );
- } else if ( $this->api->ends_with( $path, '/new' ) ) {
- return $this->new_term( $path, $blog_id, $taxonomy );
- }
-
- return $this->update_term( $path, $blog_id, $slug, $taxonomy );
- }
-
- // /sites/%s/taxonomies/%s/terms/new -> $blog_id, $taxonomy
- function new_term( $path, $blog_id, $taxonomy ) {
- $args = $this->query_args();
- $input = $this->input();
- if ( ! is_array( $input ) || ! $input || ! strlen( $input['name'] ) ) {
- return new WP_Error( 'invalid_input', 'Unknown data passed', 400 );
- }
-
- $tax = get_taxonomy( $taxonomy );
- if ( ! current_user_can( $tax->cap->manage_terms ) ) {
- return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
- }
-
- if ( ! isset( $input['parent'] ) || ! is_taxonomy_hierarchical( $taxonomy ) ) {
- $input['parent'] = 0;
- }
-
- if ( $term = get_term_by( 'name', $input['name'], $taxonomy ) ) {
- // the same name is allowed as long as the parents are different
- if ( $input['parent'] === $term->parent ) {
- return new WP_Error( 'duplicate', 'A taxonomy with that name already exists', 409 );
- }
- }
-
- $data = wp_insert_term( addslashes( $input['name'] ), $taxonomy, array(
- 'description' => isset( $input['description'] ) ? addslashes( $input['description'] ) : '',
- 'parent' => $input['parent']
- ) );
-
- if ( is_wp_error( $data ) ) {
- return $data;
- }
-
- $term = get_term_by( 'id', $data['term_id'], $taxonomy );
-
- $return = $this->get_taxonomy( $term->slug, $taxonomy, $args['context'] );
- if ( ! $return || is_wp_error( $return ) ) {
- return $return;
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'terms' );
- return $return;
- }
-
- // /sites/%s/taxonomies/%s/terms/slug:%s -> $blog_id, $taxonomy, $slug
- function update_term( $path, $blog_id, $slug, $taxonomy ) {
- $tax = get_taxonomy( $taxonomy );
- if ( ! current_user_can( $tax->cap->edit_terms ) ) {
- return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
- }
-
- $term = get_term_by( 'slug', $slug, $taxonomy );
- if ( ! $term || is_wp_error( $term ) ) {
- return new WP_Error( 'unknown_taxonomy', 'Unknown taxonomy', 404 );
- }
-
- $args = $this->query_args();
- $input = $this->input( false );
- if ( ! is_array( $input ) || ! $input ) {
- return new WP_Error( 'invalid_input', 'Invalid request input', 400 );
- }
-
- $update = array();
- if ( ! empty( $input['parent'] ) || is_taxonomy_hierarchical( $taxonomy ) ) {
- $update['parent'] = $input['parent'];
- }
-
- if ( ! empty( $input['description'] ) ) {
- $update['description'] = addslashes( $input['description'] );
- }
-
- if ( ! empty( $input['name'] ) ) {
- $update['name'] = addslashes( $input['name'] );
- }
-
- $data = wp_update_term( $term->term_id, $taxonomy, $update );
- if ( is_wp_error( $data ) ) {
- return $data;
- }
-
- $term = get_term_by( 'id', $data['term_id'], $taxonomy );
-
- $return = $this->get_taxonomy( $term->slug, $taxonomy, $args['context'] );
- if ( ! $return || is_wp_error( $return ) ) {
- return $return;
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'terms' );
- return $return;
- }
-
- // /sites/%s/taxonomies/%s/terms/slug:%s/delete -> $blog_id, $taxonomy, $slug
- function delete_term( $path, $blog_id, $slug, $taxonomy ) {
- $term = get_term_by( 'slug', $slug, $taxonomy );
- $tax = get_taxonomy( $taxonomy );
- if ( ! current_user_can( $tax->cap->delete_terms ) ) {
- return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
- }
-
- if ( ! $term || is_wp_error( $term ) ) {
- return new WP_Error( 'unknown_taxonomy', 'Unknown taxonomy', 404 );
- }
-
- $args = $this->query_args();
- $return = $this->get_taxonomy( $term->slug, $taxonomy, $args['context'] );
- if ( ! $return || is_wp_error( $return ) ) {
- return $return;
- }
-
- /** This action is documented in json-endpoints/class.wpcom-json-api-site-settings-endpoint.php */
- do_action( 'wpcom_json_api_objects', 'terms' );
-
- wp_delete_term( $term->term_id, $taxonomy );
-
- return array(
- 'slug' => (string) $term->slug,
- 'success' => true
- );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-user-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-user-endpoint.php
deleted file mode 100644
index 8ec4c59c..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-update-user-endpoint.php
+++ /dev/null
@@ -1,165 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Update_User_Endpoint( array(
- 'description' => 'Deletes or removes a user of a site.',
- 'group' => 'users',
- 'stat' => 'users:delete',
-
- 'method' => 'POST',
- 'path' => '/sites/%s/users/%d/delete',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID or domain.',
- '$user_ID' => '(int) The user\'s ID'
- ),
-
- 'request_format' => array(
- 'reassign' => '(int) An optional id of a user to reassign posts to.',
- ),
-
- 'response_format' => array(
- 'success' => '(bool) Was the deletion of user successful?',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/users/1/delete',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
-
- 'example_response' => '
- {
- "success": true
- }'
-) );
-
-class WPCOM_JSON_API_Update_User_Endpoint extends WPCOM_JSON_API_Endpoint {
-
- function callback( $path = '', $blog_id = 0, $user_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- if ( wpcom_get_blog_owner( $blog_id ) == $user_id ) {
- return new WP_Error( 'forbidden', 'A site owner can not be removed through this endpoint.', 403 );
- }
- }
-
- if ( $this->api->ends_with( $path, '/delete' ) ) {
- return $this->delete_or_remove_user( $user_id );
- }
-
- return false;
- }
-
- /**
- * Checks if a user exists by checking to see if a WP_User object exists for a user ID.
- * @param int $user_id
- * @return bool
- */
- function user_exists( $user_id ) {
- $user = get_user_by( 'id', $user_id );
-
- return false != $user && is_a( $user, 'WP_User' );
- }
-
- /**
- * Return the domain name of a subscription
- *
- * @param Store_Subscription $subscription
- * @return string
- */
- protected function get_subscription_domain_name( $subscription ) {
- return $subscription->meta;
- }
-
- /**
- * Get a list of the domains owned by the given user.
- *
- * @param int $user_id
- * @return array
- */
- protected function domain_subscriptions_for_site_owned_by_user( $user_id ) {
- $subscriptions = WPCOM_Store::get_subscriptions( get_current_blog_id(), $user_id, domains::get_domain_products() );
-
- $domains = array_unique( array_map( array( $this, 'get_subscription_domain_name' ), $subscriptions ) );
-
- return $domains;
- }
-
- /**
- * Validates user input and then decides whether to remove or delete a user.
- * @param int $user_id
- * @return array|WP_Error
- */
- function delete_or_remove_user( $user_id ) {
- if ( 0 == $user_id ) {
- return new WP_Error( 'invalid_input', 'A valid user ID must be specified.', 400 );
- }
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $domains = $this->domain_subscriptions_for_site_owned_by_user( $user_id );
- if ( ! empty( $domains ) ) {
- return new WP_Error( 'user_owns_domain_subscription', join( ', ', $domains ) );
- }
- }
-
- if ( get_current_user_id() == $user_id ) {
- return new WP_Error( 'invalid_input', 'User can not remove or delete self through this endpoint.', 400 );
- }
-
- if ( ! $this->user_exists( $user_id ) ) {
- return new WP_Error( 'invalid_input', 'A user does not exist with that ID.', 400 );
- }
-
- return is_multisite() ? $this->remove_user( $user_id ) : $this->delete_user( $user_id );
- }
-
- /**
- * Removes a user from the current site.
- * @param int $user_id
- * @return array|WP_Error
- */
- function remove_user( $user_id ) {
- if ( ! current_user_can( 'remove_users' ) ) {
- return new WP_Error( 'unauthorized', 'User cannot remove users for specified site.', 403 );
- }
-
- if ( ! is_user_member_of_blog( $user_id, get_current_blog_id() ) ) {
- return new WP_Error( 'invalid_input', 'User is not a member of the specified site.', 400 );
- }
-
- return array(
- 'success' => remove_user_from_blog( $user_id, get_current_blog_id() )
- );
- }
-
- /**
- * Deletes a user and optionally reassigns posts to another user.
- * @param int $user_id
- * @return array|WP_Error
- */
- function delete_user( $user_id ) {
- if ( ! current_user_can( 'delete_users' ) ) {
- return new WP_Error( 'unauthorized', 'User cannot delete users for specified site.', 403 );
- }
-
- $input = (array) $this->input();
-
- if ( isset( $input['reassign'] ) ) {
- if ( $user_id == $input['reassign'] ) {
- return new WP_Error( 'invalid_input', 'Can not reassign posts to user being deleted.', 400 );
- }
-
- if ( ! $this->user_exists( $input['reassign'] ) ) {
- return new WP_Error( 'invalid_input', 'User specified in reassign argument is not a member of the specified site.', 400 );
- }
- }
-
- return array(
- 'success' => wp_delete_user( $user_id, intval( $input['reassign'] ) ),
- );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-upload-media-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-upload-media-endpoint.php
deleted file mode 100644
index a47b5d0c..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-upload-media-endpoint.php
+++ /dev/null
@@ -1,94 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Upload_Media_Endpoint( array(
- 'description' => 'Upload a new media item.',
- 'group' => 'media',
- 'stat' => 'media:new',
- 'method' => 'POST',
- 'path' => '/sites/%s/media/new',
- 'deprecated' => true,
- 'new_version' => '1.1',
- 'max_version' => '1',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'request_format' => array(
- 'media' => "(media) An array of media to attach to the post. To upload media, the entire request should be multipart/form-data encoded. Accepts images (image/gif, image/jpeg, image/png) only at this time.<br /><br /><strong>Example</strong>:<br />" .
- "<code>curl \<br />--form 'media[]=@/path/to/file.jpg' \<br />-H 'Authorization: BEARER your-token' \<br />'https://public-api.wordpress.com/rest/v1/sites/123/media/new'</code>",
- 'media_urls' => "(array) An array of URLs to upload to the post."
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/media/new/',
-
- 'response_format' => array(
- 'media' => '(array) Array of uploaded media',
- 'errors' => '(array) Array of error messages of uploading media failures'
- ),
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'media_urls' => "https://s.w.org/about/images/logos/codeispoetry-rgb.png"
- )
- )
-) );
-
-class WPCOM_JSON_API_Upload_Media_Endpoint extends WPCOM_JSON_API_Endpoint {
- function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( ! current_user_can( 'upload_files' ) ) {
- return new WP_Error( 'unauthorized', 'User cannot upload media.', 403 );
- }
-
- $input = $this->input( true );
-
- $has_media = isset( $input['media'] ) && $input['media'] ? count( $input['media'] ) : false;
- $has_media_urls = isset( $input['media_urls'] ) && $input['media_urls'] ? count( $input['media_urls'] ) : false;
-
- $media_ids = $files = $errors = array();
-
- if ( $has_media ) {
- $this->api->trap_wp_die( 'upload_error' );
- foreach ( $input['media'] as $index => $media_item ) {
- $_FILES['.api.media.item.'] = $media_item;
- // check for WP_Error if we ever actually need $media_id
- $media_id = media_handle_upload( '.api.media.item.', 0 );
- if ( is_wp_error( $media_id ) ) {
- if ( 1 === count( $input['media'] ) && ! $has_media_urls ) {
- unset( $_FILES['.api.media.item.'] );
- return $media_id;
- }
- $errors[ $index ]['error'] = $media_id->get_error_code();
- $errors[ $index ]['message'] = $media_id->get_error_message();
- } else {
- $media_ids[ $index ] = $media_id;
- }
- $files[] = $media_item;
- }
- $this->api->trap_wp_die( null );
-
- unset( $_FILES['.api.media.item.'] );
- }
-
- if ( $has_media_urls ) {
- foreach ( $input['media_urls'] as $url ) {
- $id = $this->handle_media_sideload( $url );
- if ( ! empty( $id ) && is_int( $id ) )
- $media_ids[] = $id;
- }
- }
-
- $results = array();
- foreach ( $media_ids as $media_id ) {
- $results[] = $this->get_media_item( $media_id );
- }
-
- return array( 'media' => $results, 'errors' => $errors );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/class.wpcom-json-api-upload-media-v1-1-endpoint.php b/plugins/jetpack/json-endpoints/class.wpcom-json-api-upload-media-v1-1-endpoint.php
deleted file mode 100644
index a46d0afd..00000000
--- a/plugins/jetpack/json-endpoints/class.wpcom-json-api-upload-media-v1-1-endpoint.php
+++ /dev/null
@@ -1,176 +0,0 @@
-<?php
-
-new WPCOM_JSON_API_Upload_Media_v1_1_Endpoint( array(
- 'description' => 'Upload a new piece of media.',
- 'allow_cross_origin_request' => true,
- 'allow_upload_token_auth' => true,
- 'group' => 'media',
- 'stat' => 'media:new',
- 'min_version' => '1.1',
- 'max_version' => '1.1',
- 'method' => 'POST',
- 'path' => '/sites/%s/media/new',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
-
- 'request_format' => array(
- 'media' => "(media) An array of media to attach to the post. To upload media, the entire request should be multipart/form-data encoded. Accepts jpg, jpeg, png, gif, pdf, doc, ppt, odt, pptx, docx, pps, ppsx, xls, xlsx, key. Audio and Video may also be available. See <code>allowed_file_types</code> in the options response of the site endpoint.<br /><br /><strong>Example</strong>:<br />" .
- "<code>curl \<br />--form 'media[]=@/path/to/file.jpg' \<br />-H 'Authorization: BEARER your-token' \<br />'https://public-api.wordpress.com/rest/v1/sites/123/media/new'</code>",
- 'media_urls' => "(array) An array of URLs to upload to the post. Errors produced by media uploads, if any, will be in `media_errors` in the response.",
- 'attrs' => "(array) An array of attributes (`title`, `description`, `caption` `alt` for images, `artist` for audio, `album` for audio, and `parent_id`) are supported to assign to the media uploaded via the `media` or `media_urls` properties. You must use a numeric index for the keys of `attrs` which follows the same sequence as `media` and `media_urls`. <br /><br /><strong>Example</strong>:<br />" .
- "<code>curl \<br />--form 'media[]=@/path/to/file1.jpg' \<br />--form 'media_urls[]=http://example.com/file2.jpg' \<br /> \<br />--form 'attrs[0][caption]=This will be the caption for file1.jpg' \<br />--form 'attrs[1][title]=This will be the title for file2.jpg' \<br />-H 'Authorization: BEARER your-token' \<br />'https://public-api.wordpress.com/rest/v1/sites/123/posts/new'</code>",
- ),
-
- 'response_format' => array(
- 'media' => '(array) Array of uploaded media objects',
- 'errors' => '(array) Array of error messages of uploading media failures',
- ),
-
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/media/new',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN',
- ),
- 'body' => array(
- 'media_urls' => 'https://s.w.org/about/images/logos/codeispoetry-rgb.png',
- ),
- )
-) );
-
-class WPCOM_JSON_API_Upload_Media_v1_1_Endpoint extends WPCOM_JSON_API_Endpoint {
-
- /**
- * @param string $path
- * @param int $blog_id
- *
- * @return array|int|WP_Error|void
- */
- function callback( $path = '', $blog_id = 0 ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( ! current_user_can( 'upload_files' ) && ! $this->api->is_authorized_with_upload_token() ) {
- return new WP_Error( 'unauthorized', 'User cannot upload media.', 403 );
- }
-
- $input = $this->input( true );
-
- $media_files = ! empty( $input['media'] ) ? $input['media'] : array();
- $media_urls = ! empty( $input['media_urls'] ) ? $input['media_urls'] : array();
- $media_attrs = ! empty( $input['attrs'] ) ? $input['attrs'] : array();
-
- if ( empty( $media_files ) && empty( $media_urls ) ) {
- return new WP_Error( 'invalid_input', 'No media provided in input.' );
- }
-
- $is_jetpack_site = false;
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- // For jetpack sites, we send the media via a different method, because the sync is very different.
- $jetpack_sync = Jetpack_Media_Sync::summon( $blog_id );
- $is_jetpack_site = $jetpack_sync->is_jetpack_site();
- }
-
- $jetpack_media_files = array();
- $other_media_files = array();
- $media_items = array();
- $errors = array();
-
- // We're splitting out videos for Jetpack sites
- foreach ( $media_files as $media_item ) {
- if ( preg_match( '@^video/@', $media_item['type'] ) && $is_jetpack_site ) {
- $jetpack_media_files[] = $media_item;
-
- } else {
- $other_media_files[] = $media_item;
- }
- }
-
- // New Jetpack / VideoPress media upload processing
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- if ( count( $jetpack_media_files ) > 0 ) {
- add_filter( 'upload_mimes', array( $this, 'allow_video_uploads' ) );
-
- $media_items = $jetpack_sync->upload_media( $jetpack_media_files, $this->api );
-
- $errors = $jetpack_sync->get_errors();
-
- foreach ( $media_items as & $media_item ) {
- // More than likely a post has not been created yet, so we pass in the media item we
- // got back from the Jetpack site.
- $post = (object) $media_item['post'];
- $media_item = $this->get_media_item_v1_1( $post->ID, $post, $media_item['file'] );
- }
- }
- }
-
- // Normal WPCOM upload processing
- if ( count( $other_media_files ) > 0 || count( $media_urls ) > 0 ) {
- $create_media = $this->handle_media_creation_v1_1( $other_media_files, $media_urls, $media_attrs );
- $media_ids = $create_media['media_ids'];
- $errors = $create_media['errors'];
-
- $media_items = array();
- foreach ( $media_ids as $media_id ) {
- $media_items[] = $this->get_media_item_v1_1( $media_id );
- }
- }
-
- if ( count( $media_items ) <= 0 ) {
- return $this->api->output_early( 400, array( 'errors' => $errors ) );
- }
-
- $results = array();
- foreach ( $media_items as $media_item ) {
- if ( is_wp_error( $media_item ) ) {
- $errors[] = array( 'file' => $media_item['ID'], 'error' => $media_item->get_error_code(), 'message' => $media_item->get_error_message() );
-
- } else {
- $results[] = $media_item;
- }
- }
-
- $response = array( 'media' => $results );
-
- if ( count( $errors ) > 0 ) {
- $response['errors'] = $errors;
- }
-
- return $response;
- }
-
- /**
- * Force to use the WPCOM API instead of proxy back to the Jetpack API if the blog is a paid Jetpack
- * blog w/ the VideoPress module enabled AND the uploaded file is a video.
- *
- * @param int $blog_id
- * @return bool
- */
- function force_wpcom_request( $blog_id ) {
-
- // We don't need to do anything if VideoPress is not enabled for the blog.
- if ( ! is_videopress_enabled_on_jetpack_blog( $blog_id ) ) {
- return false;
- }
-
- // Check to see if the upload is not a video type, if not then return false.
- $input = $this->input( true );
- $media_files = ! empty( $input['media'] ) ? $input['media'] : array();
-
- if ( empty( $media_files ) ) {
- return false;
- }
-
- foreach ( $media_files as $media_item ) {
- if ( ! preg_match( '@^video/@', $media_item['type'] ) ) {
- return false;
- }
- }
-
- // The API request should be for a blog w/ Jetpack, A valid plan, has VideoPress enabled,
- // and is a video file. Let's let it through.
- return true;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-check-capabilities-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-check-capabilities-endpoint.php
deleted file mode 100644
index c86cddec..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-check-capabilities-endpoint.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_Check_Capabilities_Endpoint extends Jetpack_JSON_API_Modules_Endpoint {
- // GET /sites/%s/me/capability
- // The unused $object parameter is for making the method signature compatible with its parent class method.
- public function callback( $path = '', $_blog_id = 0, $object = null ) {
- // Check minimum capability and blog membership first
- if ( is_wp_error( $error = $this->validate_call( $_blog_id, 'read', false ) ) ) {
- return $error;
- }
-
- $args = $this->input();
-
- if ( ! isset( $args['capability'] ) || empty( $args['capability'] ) ) {
- return new WP_Error( 'missing_capability', __( 'You are required to specify a capability to check.', 'jetpack' ), 400 );
- }
-
- $capability = $args['capability'];
- if ( is_array( $capability ) ) {
- $results = array_map( 'current_user_can', $capability );
- return array_combine( $capability, $results );
- } else {
- return current_user_can( $capability );
- }
- }
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-core-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-core-endpoint.php
deleted file mode 100644
index f63a6cd7..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-core-endpoint.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_Core_Endpoint extends Jetpack_JSON_API_Endpoint {
- // POST /sites/%s/core
- // POST /sites/%s/core/update
- protected $needed_capabilities = 'manage_options';
- protected $new_version;
- protected $log;
-
- public function result() {
- global $wp_version;
-
- return array(
- 'version' => ( empty( $this->new_version ) ) ? $wp_version : $this->new_version,
- 'autoupdate' => Jetpack_Options::get_option( 'autoupdate_core', false ),
- 'log' => $this->log,
- );
- }
-
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-core-modify-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-core-modify-endpoint.php
deleted file mode 100644
index 8f707ad4..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-core-modify-endpoint.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_Core_Modify_Endpoint extends Jetpack_JSON_API_Core_Endpoint {
- // POST /sites/%s/core
- // POST /sites/%s/core/update
- protected $needed_capabilities = 'update_core';
- protected $action = 'default_action';
- protected $new_version;
- protected $log;
-
- public function default_action() {
- $args = $this->input();
-
- if ( isset( $args['autoupdate'] ) && is_bool( $args['autoupdate'] ) ) {
- Jetpack_Options::update_option( 'autoupdate_core', $args['autoupdate'] );
- }
-
- return true;
- }
-
- protected function update() {
- $args = $this->input();
- $version = isset( $args['version'] ) ? $args['version'] : false;
- $locale = isset( $args['locale'] ) ? $args['locale'] : get_locale();
-
- include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
-
- delete_site_transient( 'update_core' );
- wp_version_check( array(), true );
-
- if ( $version ) {
- $update = find_core_update( $version, $locale );
- } else {
- $update = $this->find_latest_update_offer();
- }
-
- /**
- * Pre-upgrade action
- *
- * @since 3.9.3
- *
- * @param object|array $update as returned by find_core_update() or find_core_auto_update()
- */
- do_action('jetpack_pre_core_upgrade', $update);
-
- $skin = new Automatic_Upgrader_Skin();
- $upgrader = new Core_Upgrader( $skin );
-
- $this->new_version = $upgrader->upgrade( $update );
-
- $this->log = $upgrader->skin->get_upgrade_messages();
-
- if ( is_wp_error( $this->new_version ) ) {
- return $this->new_version;
- }
-
- return $this->new_version;
- }
-
- protected function find_latest_update_offer() {
- // Select the latest update.
- // Remove filters to bypass automattic updates.
- add_filter( 'request_filesystem_credentials', '__return_true' );
- add_filter( 'automatic_updates_is_vcs_checkout', '__return_false' );
- add_filter( 'allow_major_auto_core_updates', '__return_true' );
- add_filter( 'send_core_update_notification_email', '__return_false' );
- $update = find_core_auto_update();
- remove_filter( 'request_filesystem_credentials', '__return_true' );
- remove_filter( 'automatic_updates_is_vcs_checkout', '__return_false' );
- remove_filter( 'allow_major_auto_core_updates', '__return_true' );
- remove_filter( 'send_core_update_notification_email', '__return_false' );
- return $update;
- }
-
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-cron-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-cron-endpoint.php
deleted file mode 100644
index 9638c3eb..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-cron-endpoint.php
+++ /dev/null
@@ -1,252 +0,0 @@
-<?php
-
-// GET /sites/%s/cron
-class Jetpack_JSON_API_Cron_Endpoint extends Jetpack_JSON_API_Endpoint {
- protected $needed_capabilities = 'manage_options';
-
- protected function validate_call( $_blog_id, $capability, $check_manage_active = true ) {
- return parent::validate_call( $_blog_id, $capability, false );
- }
-
- protected function result() {
- return array(
- 'cron_array' => _get_cron_array(),
- 'current_timestamp' => time()
- );
- }
-
- protected function sanitize_hook( $hook ) {
- return preg_replace( '/[^A-Za-z0-9-_]/', '', $hook );
- }
-
- protected function resolve_arguments() {
- $args = $this->input();
- return isset( $args['arguments'] ) ? json_decode( $args['arguments'] ) : array();
- }
-
- protected function is_cron_locked( $gmt_time ) {
- // The cron lock: a unix timestamp from when the cron was spawned.
- $doing_cron_transient = $this->get_cron_lock();
- if ( $doing_cron_transient && ( $doing_cron_transient + WP_CRON_LOCK_TIMEOUT > $gmt_time ) ) {
- return new WP_Error( 'cron-is-locked', 'Current there is a cron already happening.', 403 );
- }
- return $doing_cron_transient;
- }
-
- protected function maybe_unlock_cron( $doing_wp_cron ) {
- if ( $this->get_cron_lock() == $doing_wp_cron ) {
- delete_transient( 'doing_cron' );
- }
- }
-
- protected function lock_cron() {
- $lock = sprintf( '%.22F', microtime( true ) );
- set_transient( 'doing_cron', $lock );
- return $lock;
- }
-
- protected function get_schedules( $hook, $args ) {
- $crons = _get_cron_array();
- $key = md5(serialize($args));
- if ( empty( $crons ) )
- return array();
- $found = array();
- foreach ( $crons as $timestamp => $cron ) {
- if ( isset( $cron[$hook][$key] ) )
- $found[] = $timestamp;
- }
-
- return $found;
- }
-
- /**
- * This function is based on the one found in wp-cron.php with a similar name
- * @return int
- */
- protected function get_cron_lock() {
- global $wpdb;
-
- $value = 0;
- if ( wp_using_ext_object_cache() ) {
- /*
- * Skip local cache and force re-fetch of doing_cron transient
- * in case another process updated the cache.
- */
- $value = wp_cache_get( 'doing_cron', 'transient', true );
- } else {
- $row = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", '_transient_doing_cron' ) );
- if ( is_object( $row ) ) {
- $value = $row->option_value;
- }
- }
- return $value;
- }
-}
-
-// POST /sites/%s/cron
-class Jetpack_JSON_API_Cron_Post_Endpoint extends Jetpack_JSON_API_Cron_Endpoint {
-
- protected function result() {
- define( 'DOING_CRON', true );
- set_time_limit( 0 );
- $args = $this->input();
-
- if ( false === $crons = _get_cron_array() ) {
- return new WP_Error( 'no-cron-event', 'Currently there are no cron events', 400 );
- }
-
- $timestamps_to_run = array_keys( $crons );
- $gmt_time = microtime( true );
-
- if ( isset( $timestamps_to_run[0] ) && $timestamps_to_run[0] > $gmt_time ) {
- return new WP_Error( 'no-cron-event', 'Currently there are no cron events ready to be run', 400 );
- }
-
- $locked = $this->is_cron_locked( $gmt_time );
- if ( is_wp_error( $locked ) ) {
- return $locked;
- }
-
- $lock = $this->lock_cron();
- $processed_events = array();
-
- foreach ( $crons as $timestamp => $cronhooks ) {
- if ( $timestamp > $gmt_time && ! isset( $args[ 'hook' ] ) ) {
- break;
- }
-
- foreach ( $cronhooks as $hook => $hook_data ) {
- if ( isset( $args[ 'hook' ] ) && ! in_array( $hook, $args['hook'] ) ) {
- continue;
- }
-
- foreach ( $hook_data as $hash => $hook_item ) {
-
- $schedule = $hook_item['schedule'];
- $arguments = $hook_item['args'];
-
- if ( $schedule != false ) {
- wp_reschedule_event( $timestamp, $schedule, $hook, $arguments );
- }
-
- wp_unschedule_event( $timestamp, $hook, $arguments );
-
- do_action_ref_array( $hook, $arguments );
- $processed_events[] = array( $hook => $arguments );
-
- // If the hook ran too long and another cron process stole the lock,
- // or if we things are taking longer then 20 seconds then quit.
- if ( ( $this->get_cron_lock() != $lock ) || ( $gmt_time + 20 > microtime( true ) ) ) {
- $this->maybe_unlock_cron( $lock );
- return array( 'success' => $processed_events );
- }
-
- }
- }
- }
-
- $this->maybe_unlock_cron( $lock );
- return array( 'success' => $processed_events );
- }
-}
-
-// POST /sites/%s/cron/schedule
-class Jetpack_JSON_API_Cron_Schedule_Endpoint extends Jetpack_JSON_API_Cron_Endpoint {
-
- protected function result() {
- $args = $this->input();
- if ( ! isset( $args['timestamp'] ) ) {
- return new WP_Error( 'missing_argument', 'Please provide the timestamp argument', 400 );
- }
-
- if ( ! is_int( $args['timestamp'] ) || $args['timestamp'] < time() ) {
- return new WP_Error( 'timestamp-invalid', 'Please provide timestamp that is an integer and set in the future', 400 );
- }
-
- if ( ! isset( $args['hook'] ) ) {
- return new WP_Error( 'missing_argument', 'Please provide the hook argument', 400 );
- }
-
- $hook = $this->sanitize_hook( $args['hook'] );
-
- $locked = $this->is_cron_locked( microtime( true ) );
- if ( is_wp_error( $locked ) ) {
- return $locked;
- }
-
- $arguments = $this->resolve_arguments();
- $next_scheduled = $this->get_schedules( $hook, $arguments );
-
- if ( isset( $args['recurrence'] ) ) {
- $schedules = wp_get_schedules();
- if ( ! isset( $schedules[ $args['recurrence'] ] ) ) {
- return new WP_Error( 'invalid-recurrence', 'Please provide a valid recurrence argument', 400 );
- }
-
- if ( count( $next_scheduled ) > 0 ) {
- return new WP_Error( 'event-already-scheduled', 'This event is ready scheduled', 400 );
- }
- $lock = $this->lock_cron();
- wp_schedule_event( $args['timestamp'], $args['recurrence'], $hook, $arguments );
- $this->maybe_unlock_cron( $lock );
- return array( 'success' => true );
- }
-
- foreach( $next_scheduled as $scheduled_time ) {
- if ( abs( $scheduled_time - $args['timestamp'] ) <= 10 * MINUTE_IN_SECONDS ) {
- return new WP_Error( 'event-already-scheduled', 'This event is ready scheduled', 400 );
- }
- }
- $lock = $this->lock_cron();
- $next = wp_schedule_single_event( $args['timestamp'], $hook, $arguments );
- $this->maybe_unlock_cron( $lock );
- /**
- * Note: Before WP 5.1, the return value was either `false` or `null`.
- * With 5.1 and later, the return value is now `false` or `true`.
- * We need to account for both.
- */
- return array( 'success' => false !== $next );
- }
-}
-
-// POST /sites/%s/cron/unschedule
-class Jetpack_JSON_API_Cron_Unschedule_Endpoint extends Jetpack_JSON_API_Cron_Endpoint {
-
- protected function result() {
- $args = $this->input();
-
- if ( !isset( $args['hook'] ) ) {
- return new WP_Error( 'missing_argument', 'Please provide the hook argument', 400 );
- }
-
- $hook = $this->sanitize_hook( $args['hook'] );
-
- $locked = $this->is_cron_locked( microtime( true ) );
- if ( is_wp_error( $locked ) ) {
- return $locked;
- }
-
- $crons = _get_cron_array();
- if ( empty( $crons ) ) {
- return new WP_Error( 'cron-not-present', 'Unable to unschedule an event, no events in the cron', 400 );
- }
-
- $arguments = $this->resolve_arguments();
-
- if ( isset( $args['timestamp'] ) ) {
- $next_schedulded = $this->get_schedules( $hook, $arguments );
- if ( in_array( $args['timestamp'], $next_schedulded ) ) {
- return new WP_Error( 'event-not-present', 'Unable to unschedule the event, the event doesn\'t exist', 400 );
- }
-
- $lock = $this->lock_cron();
- wp_unschedule_event( $args['timestamp'], $hook, $arguments );
- $this->maybe_unlock_cron( $lock );
- return array( 'success' => true );
- }
- $lock = $this->lock_cron();
- wp_clear_scheduled_hook( $hook, $arguments );
- $this->maybe_unlock_cron( $lock );
- return array( 'success' => true );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-endpoint.php
deleted file mode 100644
index 782d106e..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-endpoint.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-
-include JETPACK__PLUGIN_DIR . '/modules/module-info.php';
-
-/**
- * Base class for Jetpack Endpoints, has the validate_call helper function.
- */
-abstract class Jetpack_JSON_API_Endpoint extends WPCOM_JSON_API_Endpoint {
-
- protected $needed_capabilities;
- protected $expected_actions = array();
- protected $action;
-
-
- public function callback( $path = '', $blog_id = 0, $object = null ) {
- if ( is_wp_error( $error = $this->validate_call( $blog_id, $this->needed_capabilities ) ) ) {
- return $error;
- }
-
- if ( is_wp_error( $error = $this->validate_input( $object ) ) ) {
- return $error;
- }
-
- if ( ! empty( $this->action ) ) {
- if( is_wp_error( $error = call_user_func( array( $this, $this->action ) ) ) ) {
- return $error;
- }
- }
-
- return $this->result();
- }
-
- abstract protected function result();
-
- protected function validate_input( $object ) {
- $args = $this->input();
-
- if( isset( $args['action'] ) && $args['action'] == 'update' ) {
- $this->action = 'update';
- }
-
- if ( preg_match( "/\/update\/?$/", $this->path ) ) {
- $this->action = 'update';
-
- } elseif( preg_match( "/\/install\/?$/", $this->path ) ) {
- $this->action = 'install';
-
- } elseif( ! empty( $args['action'] ) ) {
- if( ! in_array( $args['action'], $this->expected_actions ) ) {
- return new WP_Error( 'invalid_action', __( 'You must specify a valid action', 'jetpack' ) );
- }
- $this->action = $args['action'];
- }
- return true;
- }
-
- /**
- * Switches to the blog and checks current user capabilities.
- * @return bool|WP_Error a WP_Error object or true if things are good.
- */
- protected function validate_call( $_blog_id, $capability, $check_manage_active = true ) {
- $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $_blog_id ) );
- if ( is_wp_error( $blog_id ) ) {
- return $blog_id;
- }
-
- if ( is_wp_error( $error = $this->check_capability( $capability ) ) ) {
- return $error;
- }
-
- if ( $check_manage_active && 'GET' !== $this->method && ! Jetpack::is_module_active( 'manage' ) ) {
- return new WP_Error( 'unauthorized_full_access', __( 'Full management mode is off for this site.', 'jetpack' ), 403 );
- }
-
- return true;
- }
-
- /**
- * @param $capability
- *
- * @return bool|WP_Error
- */
- protected function check_capability( $capability ) {
- if ( is_array( $capability ) ) {
- // the idea is that the we can pass in an array of capabilitie that the user needs to have before we allowing them to do something
- $capabilities = ( isset( $capability['capabilities'] ) ? $capability['capabilities'] : $capability );
-
- // We can pass in the number of conditions we must pass by default it is all.
- $must_pass = ( isset( $capability['must_pass'] ) && is_int( $capability['must_pass'] ) ? $capability['must_pass'] : count( $capabilities ) );
-
- $failed = array(); // store the failed capabilities
- $passed = 0; //
-
- foreach ( $capabilities as $cap ) {
- if ( current_user_can( $cap ) ) {
- $passed ++;
- } else {
- $failed[] = $cap;
- }
- }
- // Check that must have conditions is less then
- if ( $passed < $must_pass ) {
- return new WP_Error( 'unauthorized', sprintf( __( 'This user is not authorized to %s on this blog.', 'jetpack' ), implode( ', ', $failed ), 403 ) );
- }
-
- } else {
- if ( !current_user_can( $capability ) ) {
- return new WP_Error( 'unauthorized', sprintf( __( 'This user is not authorized to %s on this blog.', 'jetpack' ), $capability ), 403 );
- }
- }
-
- return true;
- }
-
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-comment-backup-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-comment-backup-endpoint.php
deleted file mode 100644
index 0e4bc256..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-comment-backup-endpoint.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_Get_Comment_Backup_Endpoint extends Jetpack_JSON_API_Endpoint {
- // /sites/%s/comments/%d/backup -> $blog_id, $comment_id
-
- protected $needed_capabilities = array(); // This endpoint is only accessible using a site token
- protected $comment_id;
-
- function validate_input( $comment_id ) {
- if ( empty( $comment_id ) || ! is_numeric( $comment_id ) ) {
- return new WP_Error( 'comment_id_not_specified', __( 'You must specify a Comment ID', 'jetpack' ), 400 );
- }
-
- $this->comment_id = intval( $comment_id );
-
- return true;
- }
-
- protected function result() {
- $comment = get_comment( $this->comment_id );
- if ( empty( $comment ) ) {
- return new WP_Error( 'comment_not_found', __( 'Comment not found', 'jetpack' ), 404 );
- }
-
- $allowed_keys = array(
- 'comment_ID',
- 'comment_post_ID',
- 'comment_author',
- 'comment_author_email',
- 'comment_author_url',
- 'comment_author_IP',
- 'comment_date',
- 'comment_date_gmt',
- 'comment_content',
- 'comment_karma',
- 'comment_approved',
- 'comment_agent',
- 'comment_type',
- 'comment_parent',
- 'user_id',
- );
-
- $comment = array_intersect_key( $comment->to_array(), array_flip( $allowed_keys ) );
- $comment_meta = get_comment_meta( $comment['comment_ID'] );
-
- return array(
- 'comment' => $comment,
- 'meta' => is_array( $comment_meta ) ? $comment_meta : array(),
- );
- }
-
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-database-object-backup-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-database-object-backup-endpoint.php
deleted file mode 100644
index b7134730..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-database-object-backup-endpoint.php
+++ /dev/null
@@ -1,97 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_Get_Database_Object_Backup_Endpoint extends Jetpack_JSON_API_Endpoint {
- // /sites/%s/database-object/backup -> $blog_id
-
- protected $needed_capabilities = array(); // This endpoint is only accessible using a site token
- protected $object_type;
- protected $object_id;
-
- // Full list of database objects that can be retrieved via this endpoint.
- protected $object_types = array(
- 'woocommerce_attribute' => array(
- 'table' => 'woocommerce_attribute_taxonomies',
- 'id_field' => 'attribute_id',
- ),
-
- 'woocommerce_downloadable_product_permission' => array(
- 'table' => 'woocommerce_downloadable_product_permissions',
- 'id_field' => 'permission_id',
- ),
-
- 'woocommerce_order_item' => array(
- 'table' => 'woocommerce_order_items',
- 'id_field' => 'order_item_id',
- 'meta_type' => 'order_item',
- ),
-
- 'woocommerce_payment_token' => array(
- 'table' => 'woocommerce_payment_tokens',
- 'id_field' => 'token_id',
- 'meta_type' => 'payment_token',
- ),
-
- 'woocommerce_tax_rate' => array(
- 'table' => 'woocommerce_tax_rates',
- 'id_field' => 'tax_rate_id',
- 'child_table' => 'woocommerce_tax_rate_locations',
- 'child_id_field' => 'tax_rate_id',
- ),
-
- 'woocommerce_webhook' => array(
- 'table' => 'wc_webhooks',
- 'id_field' => 'webhook_id',
- ),
- );
-
- function validate_input( $object ) {
- $query_args = $this->query_args();
-
- if ( empty( $query_args['object_type'] ) || empty( $query_args['object_id'] ) ) {
- return new WP_Error( 'invalid_args', __( 'You must specify both an object type and id to fetch', 'jetpack' ), 400 );
- }
-
- if ( empty( $this->object_types[ $query_args['object_type'] ] ) ) {
- return new WP_Error( 'invalid_args', __( 'Specified object_type not recognized', 'jetpack' ), 400 );
- }
-
- $this->object_type = $this->object_types[ $query_args['object_type'] ];
- $this->object_id = $query_args['object_id'];
-
- return true;
- }
-
- protected function result() {
- global $wpdb;
-
- $table = $wpdb->prefix . $this->object_type['table'];
- $id_field = $this->object_type['id_field'];
-
- // Fetch the requested object
- $query = $wpdb->prepare( 'select * from `' . $table . '` where `' . $id_field . '` = %d', $this->object_id );
- $object = $wpdb->get_row( $query );
-
- if ( empty( $object ) ) {
- return new WP_Error( 'object_not_found', __( 'Object not found', 'jetpack' ), 404 );
- }
-
- $result = array( 'object' => $object );
-
- // Fetch associated metadata (if this object type has any)
- if ( ! empty( $this->object_type['meta_type'] ) ) {
- $result['meta'] = get_metadata( $this->object_type['meta_type'], $this->object_id );
- }
-
- // If there is a child linked table (eg: woocommerce_tax_rate_locations), fetch linked records
- if ( ! empty( $this->object_type['child_table'] ) ) {
- $child_table = $wpdb->prefix . $this->object_type['child_table'];
- $child_id_field = $this->object_type['child_id_field'];
-
- $query = $wpdb->prepare( 'select * from `' . $child_table . '` where `' . $child_id_field . '` = %d', $this->object_id );
- $result[ 'children' ] = $wpdb->get_results( $query );
- }
-
- return $result;
- }
-
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-option-backup-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-option-backup-endpoint.php
deleted file mode 100644
index a5d8d3a7..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-option-backup-endpoint.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_Get_Option_Backup_Endpoint extends Jetpack_JSON_API_Endpoint {
- // /sites/%s/options/backup -> $blog_id
-
- protected $needed_capabilities = array(); // This endpoint is only accessible using a site token
- protected $option_names;
-
- function validate_input( $object ) {
- $query_args = $this->query_args();
-
- if ( empty( $query_args['name'] ) ) {
- return new WP_Error( 'option_name_not_specified', __( 'You must specify an option name', 'jetpack' ), 400 );
- }
-
- if ( is_array( $query_args['name'] ) ) {
- $this->option_names = $query_args['name'];
- } else {
- $this->option_names = array( $query_args['name'] );
- }
-
- return true;
- }
-
- protected function result() {
- $options = array_map( array( $this, 'get_option_row' ), $this->option_names );
- return array( 'options' => $options );
- }
-
- private function get_option_row( $name ) {
- global $wpdb;
- return $wpdb->get_row( $wpdb->prepare( "select * from `{$wpdb->options}` where option_name = %s", $name ) );
- }
-
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-post-backup-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-post-backup-endpoint.php
deleted file mode 100644
index 903a16ac..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-post-backup-endpoint.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_Get_Post_Backup_Endpoint extends Jetpack_JSON_API_Endpoint {
- // /sites/%s/posts/%d/backup -> $blog_id, $post_id
-
- protected $needed_capabilities = array(); // This endpoint is only accessible using a site token
- protected $post_id;
-
- function validate_input( $post_id ) {
- if ( empty( $post_id ) || ! is_numeric( $post_id ) ) {
- return new WP_Error( 'post_id_not_specified', __( 'You must specify a Post ID', 'jetpack' ), 400 );
- }
-
- $this->post_id = intval( $post_id );
-
- return true;
- }
-
- protected function result() {
- $post = get_post( $this->post_id );
- if ( empty( $post ) ) {
- return new WP_Error( 'post_not_found', __( 'Post not found', 'jetpack' ), 404 );
- }
-
- return array(
- 'post' => (array)$post,
- 'meta' => get_post_meta( $post->ID ),
- );
- }
-
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-term-backup-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-term-backup-endpoint.php
deleted file mode 100644
index 40d0ab97..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-term-backup-endpoint.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_Get_Term_Backup_Endpoint extends Jetpack_JSON_API_Endpoint {
- // /sites/%s/terms/%d/backup -> $blog_id, $term_id
-
- protected $needed_capabilities = array(); // This endpoint is only accessible using a site token
- protected $term_id;
-
- function validate_input( $term_id ) {
- if ( empty( $term_id ) || ! is_numeric( $term_id ) ) {
- return new WP_Error( 'term_id_not_specified', __( 'You must specify a Term ID', 'jetpack' ), 400 );
- }
-
- $this->term_id = intval( $term_id );
-
- return true;
- }
-
- protected function result() {
- $term = get_term( $this->term_id );
- if ( empty( $term ) ) {
- return new WP_Error( 'term_not_found', __( 'Term not found', 'jetpack' ), 404 );
- }
-
- return array(
- 'term' => (array) $term,
- 'meta' => get_term_meta( $this->term_id ),
- );
- }
-
-}
-
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-user-backup-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-user-backup-endpoint.php
deleted file mode 100644
index 22ca195d..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-get-user-backup-endpoint.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_Get_User_Backup_Endpoint extends Jetpack_JSON_API_Endpoint {
- // /sites/%s/users/%d/backup -> $blog_id, $user_id
-
- protected $needed_capabilities = array(); // This endpoint is only accessible using a site token
- protected $user_id;
-
- function validate_input( $user_id ) {
- if ( empty( $user_id ) || ! is_numeric( $user_id ) ) {
- return new WP_Error( 'user_id_not_specified', __( 'You must specify a User ID', 'jetpack' ), 400 );
- }
-
- $this->user_id = intval( $user_id );
-
- return true;
- }
-
- protected function result() {
- $user = get_user_by( 'id', $this->user_id );
- if ( empty( $user ) ) {
- return new WP_Error( 'user_not_found', __( 'User not found', 'jetpack' ), 404 );
- }
-
- return array(
- 'user' => $user->to_array(),
- 'meta' => get_user_meta( $user->ID ),
- );
- }
-
-}
-
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-jps-woocommerce-connect-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-jps-woocommerce-connect-endpoint.php
deleted file mode 100644
index 75a3b04d..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-jps-woocommerce-connect-endpoint.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_JPS_WooCommerce_Connect_Endpoint extends Jetpack_JSON_API_Endpoint {
-
- protected $needed_capabilities = 'manage_options';
-
- function result() {
- $input = $this->input();
- $helper_data = get_option( 'woocommerce_helper_data', array() );
-
- if ( ! empty( $helper_data['auth'] ) ) {
- return new WP_Error(
- 'already_configured',
- __( 'WooCommerce auth data is already set.', 'jetpack' )
- );
- }
-
- // Only update the auth field for `woocommerce_helper_data` instead of blowing out the entire option.
- $helper_data['auth'] = array(
- 'user_id' => $input['user_id'],
- 'site_id' => $input['site_id'],
- 'updated' => time(),
- 'access_token' => $input['access_token'],
- 'access_token_secret' => $input['access_token_secret'],
- );
-
- $updated = update_option(
- 'woocommerce_helper_data',
- $helper_data
- );
-
- return array(
- 'success' => $updated,
- );
- }
-
- function validate_input( $object ) {
- $input = $this->input();
-
- if ( empty( $input['access_token'] ) ) {
- return new WP_Error( 'input_error', __( 'access_token is required', 'jetpack' ) );
- }
-
- if ( empty( $input['access_token_secret'] ) ) {
- return new WP_Error( 'input_error', __( 'access_token_secret is required', 'jetpack' ) );
- }
-
- if ( empty( $input['user_id'] ) ) {
- return new WP_Error( 'input_error', __( 'user_id is required', 'jetpack' ) );
- }
-
- if ( empty( $input['site_id'] ) ) {
- return new WP_Error( 'input_error', __( 'site_id is required', 'jetpack' ) );
- }
-
- return parent::validate_input( $object );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-log-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-log-endpoint.php
deleted file mode 100644
index f1d0f4da..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-log-endpoint.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_Jetpack_Log_Endpoint extends Jetpack_JSON_API_Endpoint {
- // GET /sites/%s/jetpack-log
- protected $needed_capabilities = 'manage_options';
-
- protected function result() {
- $args = $this->input();
- $event = ( isset( $args['event'] ) && is_string( $args['event'] ) ) ? $code : false;
- $num = ( isset( $args['num'] ) ) ? intval( $num ) : false;
-
- return array(
- 'log' => Jetpack::get_log( $event, $num )
- );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-maybe-auto-update-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-maybe-auto-update-endpoint.php
deleted file mode 100644
index 5b368760..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-maybe-auto-update-endpoint.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_Maybe_Auto_Update_Endpoint extends Jetpack_JSON_API_Endpoint {
- // POST /sites/%s/maybe_auto_update
- protected $needed_capabilities = array( 'update_core', 'update_plugins', 'update_themes' );
-
- protected $update_results = array();
-
- protected function result() {
- add_action( 'automatic_updates_complete', array( $this, 'get_update_results' ), 100, 1 );
-
- wp_maybe_auto_update();
-
- $result['log'] = $this->update_results;
-
- if ( empty( $result['log'] ) ) {
- $possible_reasons_for_failure = Jetpack_Autoupdate::get_possible_failures();
-
- if ( $possible_reasons_for_failure ) {
- $result['log']['error'] = $possible_reasons_for_failure;
- }
-
- }
-
- return $result;
- }
-
- public function get_update_results( $results ) {
- $this->update_results = $results;
- }
-
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-modules-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-modules-endpoint.php
deleted file mode 100644
index 2f56f1ee..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-modules-endpoint.php
+++ /dev/null
@@ -1,125 +0,0 @@
-<?php
-
-/**
- * Base class for working with Jetpack Modules.
- */
-abstract class Jetpack_JSON_API_Modules_Endpoint extends Jetpack_JSON_API_Endpoint {
-
- protected $modules = array();
-
- protected $bulk = true;
-
- static $_response_format = array(
- 'id' => '(string) The module\'s ID',
- 'active' => '(boolean) The module\'s status.',
- 'name' => '(string) The module\'s name.',
- 'description' => '(safehtml) The module\'s description.',
- 'sort' => '(int) The module\'s display order.',
- 'introduced' => '(string) The Jetpack version when the module was introduced.',
- 'changed' => '(string) The Jetpack version when the module was changed.',
- 'free' => '(boolean) The module\'s Free or Paid status.',
- 'module_tags' => '(array) The module\'s tags.',
- 'override' => '(string) The module\'s override. Empty if no override, otherwise \'active\' or \'inactive\'',
- );
-
- protected function result() {
-
- $modules = $this->get_modules();
-
- if ( ! $this->bulk && ! empty( $modules ) ) {
- return array_pop( $modules );
- }
-
- return array( 'modules' => $modules );
-
- }
-
- /**
- * Walks through either the submitted modules or list of themes and creates the global array
- * @param $theme
- *
- * @return bool
- */
- protected function validate_input( $module) {
- $args = $this->input();
- // lets set what modules were requested, and validate them
- if ( ! isset( $module ) || empty( $module ) ) {
-
- if ( ! $args['modules'] || empty( $args['modules'] ) ) {
- return new WP_Error( 'missing_module', __( 'You are required to specify a module.', 'jetpack' ), 400 );
- }
- if ( is_array( $args['modules'] ) ) {
- $this->modules = $args['modules'];
- } else {
- $this->modules[] = $args['modules'];
- }
- } else {
- $this->modules[] = urldecode( $module );
- $this->bulk = false;
- }
-
- if ( is_wp_error( $error = $this->validate_modules() ) ) {
- return $error;
- }
-
- return parent::validate_input( $module );
- }
-
- /**
- * Walks through submitted themes to make sure they are valid
- * @return bool|WP_Error
- */
- protected function validate_modules() {
- foreach ( $this->modules as $module ) {
- if ( ! Jetpack::is_module( $module ) ) {
- return new WP_Error( 'unknown_jetpack_module', sprintf( __( 'Module not found: `%s`.', 'jetpack' ), $module ), 404 );
- }
- }
- return true;
- }
-
- protected static function format_module( $module_slug ) {
- $module_data = Jetpack::get_module( $module_slug );
-
- $module = array();
- $module['id'] = $module_slug;
- $module['active'] = Jetpack::is_module_active( $module_slug );
- $module['name'] = $module_data['name'];
- $module['short_description'] = $module_data['description'];
- $module['sort'] = $module_data['sort'];
- $module['introduced'] = $module_data['introduced'];
- $module['changed'] = $module_data['changed'];
- $module['free'] = $module_data['free'];
- $module['module_tags'] = $module_data['module_tags'];
-
- $overrides_instance = Jetpack_Modules_Overrides::instance();
- $module['override'] = $overrides_instance->get_module_override( $module_slug );
-
- // Fetch the HTML formatted long description
- ob_start();
- /** This action is documented in class.jetpack-modules-list-table.php */
- do_action( 'jetpack_module_more_info_' . $module_slug );
- $module['description'] = ob_get_clean();
-
- return $module;
- }
-
- /**
- * Format a list of modules for public display, using the supplied offset and limit args
- * @uses WPCOM_JSON_API_Endpoint::query_args()
- * @return array Public API modules objects
- */
- protected function get_modules() {
- $modules = array_values( $this->modules );
- // do offset & limit - we've already returned a 400 error if they're bad numbers
- $args = $this->query_args();
-
- if ( isset( $args['offset'] ) )
- $modules = array_slice( $modules, (int) $args['offset'] );
- if ( isset( $args['limit'] ) )
- $modules = array_slice( $modules, 0, (int) $args['limit'] );
-
- return array_map( array( $this, 'format_module' ), $modules );
- }
-
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-modules-get-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-modules-get-endpoint.php
deleted file mode 100644
index 28a70dba..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-modules-get-endpoint.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_Modules_Get_Endpoint extends Jetpack_JSON_API_Modules_Endpoint {
- // GET /sites/%s/jetpack/modules/%s
- protected $needed_capabilities = 'jetpack_manage_modules';
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-modules-list-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-modules-list-endpoint.php
deleted file mode 100644
index 2ed4dbdd..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-modules-list-endpoint.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_Modules_List_Endpoint extends Jetpack_JSON_API_Modules_Endpoint {
- // GET /sites/%s/jetpack/modules
-
- protected $needed_capabilities = 'jetpack_manage_modules';
-
- public function validate_input( $module ) {
- $this->modules = Jetpack::get_available_modules();
- return true;
- }
-
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-modules-modify-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-modules-modify-endpoint.php
deleted file mode 100644
index e1562f50..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-modules-modify-endpoint.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_Modules_Modify_Endpoint extends Jetpack_JSON_API_Modules_Endpoint {
- // POST /sites/%s/jetpack/modules/%s/activate
- // POST /sites/%s/jetpack/modules/%s
- // POST /sites/%s/jetpack/modules
-
- protected $needed_capabilities = 'activate_plugins';
- protected $action = 'default_action';
-
- public function default_action() {
- $args = $this->input();
- if ( isset( $args['active'] ) && is_bool( $args['active'] ) ) {
- if ( $args['active'] ) {
- return $this->activate_module();
- } else {
- return $this->deactivate_module();
- }
- }
-
- return true;
- }
-
- protected function activate_module() {
- foreach ( $this->modules as $module ) {
- if ( Jetpack::is_module_active( $module ) ) {
- $error = $this->log[ $module ][] = __( 'The Jetpack Module is already activated.', 'jetpack' );
- continue;
- }
- $result = Jetpack::activate_module( $module, false, false );
- if ( false === $result || ! Jetpack::is_module_active( $module ) ) {
- $error = $this->log[ $module ][] = __( 'There was an error while activating the module.', 'jetpack' );
- }
- }
-
- if ( ! $this->bulk && isset( $error ) ) {
- return new WP_Error( 'activation_error', $error, 400 );
- }
-
- return true;
- }
-
- protected function deactivate_module() {
- foreach ( $this->modules as $module ) {
- if ( ! Jetpack::is_module_active( $module ) ) {
- $error = $this->log[ $module ][] = __( 'The Jetpack Module is already deactivated.', 'jetpack' );
- continue;
- }
- $result = Jetpack::deactivate_module( $module );
- if ( false === $result || Jetpack::is_module_active( $module ) ) {
- $error = $this->log[ $module ][] = __( 'There was an error while deactivating the module.', 'jetpack' );
- }
- }
-
- if ( ! $this->bulk && isset( $error ) ) {
- return new WP_Error( 'deactivation_error', $error, 400 );
- }
-
- return true;
- }
-
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-delete-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-delete-endpoint.php
deleted file mode 100644
index 3748d621..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-delete-endpoint.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-// POST /sites/%s/plugins/%s/delete
-new Jetpack_JSON_API_Plugins_Delete_Endpoint(
- array(
- 'description' => 'Delete/Uninstall a plugin from your jetpack blog',
- 'group' => '__do_not_document',
- 'stat' => 'plugins:1:delete',
- 'min_version' => '1',
- 'max_version' => '1.1',
- 'method' => 'POST',
- 'path' => '/sites/%s/plugins/%s/delete',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- '$plugin' => '(int|string) The plugin slug to delete',
- ),
- 'response_format' => Jetpack_JSON_API_Plugins_Endpoint::$_response_format,
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/plugins/akismet%2Fakismet/delete'
- )
-);
-// v1.2
-new Jetpack_JSON_API_Plugins_Delete_Endpoint(
- array(
- 'description' => 'Delete/Uninstall a plugin from your jetpack blog',
- 'group' => '__do_not_document',
- 'stat' => 'plugins:1:delete',
- 'min_version' => '1.2',
- 'method' => 'POST',
- 'path' => '/sites/%s/plugins/%s/delete',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- '$plugin' => '(int|string) The plugin slug to delete',
- ),
- 'response_format' => Jetpack_JSON_API_Plugins_Endpoint::$_response_format_v1_2,
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.2/sites/example.wordpress.org/plugins/akismet%2Fakismet/delete'
- )
-);
-
-class Jetpack_JSON_API_Plugins_Delete_Endpoint extends Jetpack_JSON_API_Plugins_Endpoint {
-
- // POST /sites/%s/plugins/%s/delete
- protected $needed_capabilities = 'delete_plugins';
- protected $action = 'delete';
-
- protected function delete() {
-
- foreach ( $this->plugins as $plugin ) {
-
- if ( Jetpack::is_plugin_active( $plugin ) ) {
- $error = $this->log[ $plugin ][] = __( 'You cannot delete a plugin while it is active on the main site.', 'jetpack' );
- continue;
- }
-
- $result = delete_plugins( array( $plugin ) );
- if ( is_wp_error( $result ) ) {
- $error = $this->log[ $plugin ][] = $result->get_error_message();
- } else {
- $this->log[ $plugin ][] = 'Plugin deleted';
- }
- }
-
- if ( ! $this->bulk && isset( $error ) ) {
- return new WP_Error( 'delete_plugin_error', $error, 400 );
- }
-
- return true;
- }
-
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-endpoint.php
deleted file mode 100644
index 1df4fe66..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-endpoint.php
+++ /dev/null
@@ -1,321 +0,0 @@
-<?php
-
-/**
- * Base class for working with plugins.
- */
-abstract class Jetpack_JSON_API_Plugins_Endpoint extends Jetpack_JSON_API_Endpoint {
-
- protected $plugins = array();
-
- protected $network_wide = false;
-
- protected $bulk = true;
- protected $log;
-
- static $_response_format = array(
- 'id' => '(safehtml) The plugin\'s ID',
- 'slug' => '(safehtml) The plugin\'s .org slug',
- 'active' => '(boolean) The plugin status.',
- 'update' => '(object) The plugin update info.',
- 'name' => '(safehtml) The name of the plugin.',
- 'plugin_url' => '(url) Link to the plugin\'s web site.',
- 'version' => '(safehtml) The plugin version number.',
- 'description' => '(safehtml) Description of what the plugin does and/or notes from the author',
- 'author' => '(safehtml) The author\'s name',
- 'author_url' => '(url) The authors web site address',
- 'network' => '(boolean) Whether the plugin can only be activated network wide.',
- 'autoupdate' => '(boolean) Whether the plugin is automatically updated',
- 'autoupdate_translation' => '(boolean) Whether the plugin is automatically updating translations',
- 'next_autoupdate' => '(string) Y-m-d H:i:s for next scheduled update event',
- 'log' => '(array:safehtml) An array of update log strings.',
- 'uninstallable' => '(boolean) Whether the plugin is unistallable.',
- 'action_links' => '(array) An array of action links that the plugin uses.',
- );
-
- static $_response_format_v1_2 = array(
- 'slug' => '(safehtml) The plugin\'s .org slug',
- 'active' => '(boolean) The plugin status.',
- 'update' => '(object) The plugin update info.',
- 'name' => '(safehtml) The plugin\'s ID',
- 'display_name' => '(safehtml) The name of the plugin.',
- 'version' => '(safehtml) The plugin version number.',
- 'description' => '(safehtml) Description of what the plugin does and/or notes from the author',
- 'author' => '(safehtml) The author\'s name',
- 'author_url' => '(url) The authors web site address',
- 'plugin_url' => '(url) Link to the plugin\'s web site.',
- 'network' => '(boolean) Whether the plugin can only be activated network wide.',
- 'autoupdate' => '(boolean) Whether the plugin is automatically updated',
- 'autoupdate_translation' => '(boolean) Whether the plugin is automatically updating translations',
- 'uninstallable' => '(boolean) Whether the plugin is unistallable.',
- 'action_links' => '(array) An array of action links that the plugin uses.',
- 'log' => '(array:safehtml) An array of update log strings.',
- );
-
- protected function result() {
-
- $plugins = $this->get_plugins();
-
- if ( ! $this->bulk && ! empty( $plugins ) ) {
- return array_pop( $plugins );
- }
-
- return array( 'plugins' => $plugins );
-
- }
-
- protected function validate_input( $plugin ) {
-
- if ( is_wp_error( $error = parent::validate_input( $plugin ) ) ) {
- return $error;
- }
-
- if ( is_wp_error( $error = $this->validate_network_wide() ) ) {
- return $error;
- }
-
- $args = $this->input();
- // find out what plugin, or plugins we are dealing with
- // validate the requested plugins
- if ( ! isset( $plugin ) || empty( $plugin ) ) {
- if ( ! $args['plugins'] || empty( $args['plugins'] ) ) {
- return new WP_Error( 'missing_plugin', __( 'You are required to specify a plugin.', 'jetpack' ), 400 );
- }
- if ( is_array( $args['plugins'] ) ) {
- $this->plugins = $args['plugins'];
- } else {
- $this->plugins[] = $args['plugins'];
- }
- } else {
- $this->bulk = false;
- $this->plugins[] = urldecode( $plugin );
- }
-
- if ( is_wp_error( $error = $this->validate_plugins() ) ) {
- return $error;
- };
-
- return true;
- }
-
- /**
- * Walks through submitted plugins to make sure they are valid
- * @return bool|WP_Error
- */
- protected function validate_plugins() {
- if ( empty( $this->plugins ) || ! is_array( $this->plugins ) ) {
- return new WP_Error( 'missing_plugins', __( 'No plugins found.', 'jetpack' ));
- }
- foreach( $this->plugins as $index => $plugin ) {
- if ( ! preg_match( "/\.php$/", $plugin ) ) {
- $plugin = $plugin . '.php';
- $this->plugins[ $index ] = $plugin;
- }
- $valid = $this->validate_plugin( urldecode( $plugin ) ) ;
- if ( is_wp_error( $valid ) ) {
- return $valid;
- }
- }
-
- return true;
- }
-
- protected function format_plugin( $plugin_file, $plugin_data ) {
- if ( version_compare( $this->min_version, '1.2', '>=' ) ) {
- return $this->format_plugin_v1_2( $plugin_file, $plugin_data );
- }
- $plugin = array();
- $plugin['id'] = preg_replace("/(.+)\.php$/", "$1", $plugin_file );
- $plugin['slug'] = Jetpack_Autoupdate::get_plugin_slug( $plugin_file );
- $plugin['active'] = Jetpack::is_plugin_active( $plugin_file );
- $plugin['name'] = $plugin_data['Name'];
- $plugin['plugin_url'] = $plugin_data['PluginURI'];
- $plugin['version'] = $plugin_data['Version'];
- $plugin['description'] = $plugin_data['Description'];
- $plugin['author'] = $plugin_data['Author'];
- $plugin['author_url'] = $plugin_data['AuthorURI'];
- $plugin['network'] = $plugin_data['Network'];
- $plugin['update'] = $this->get_plugin_updates( $plugin_file );
- $plugin['next_autoupdate'] = date( 'Y-m-d H:i:s', wp_next_scheduled( 'wp_maybe_auto_update' ) );
- $action_link = $this->get_plugin_action_links( $plugin_file );
- if ( ! empty( $action_link ) ) {
- $plugin['action_links'] = $action_link;
- }
-
- $autoupdate = in_array( $plugin_file, Jetpack_Options::get_option( 'autoupdate_plugins', array() ) );
- $plugin['autoupdate'] = $autoupdate;
-
- $autoupdate_translation = in_array( $plugin_file, Jetpack_Options::get_option( 'autoupdate_plugins_translations', array() ) );
- $plugin['autoupdate_translation'] = $autoupdate || $autoupdate_translation || Jetpack_Options::get_option( 'autoupdate_translations', false );
-
- $plugin['uninstallable'] = is_uninstallable_plugin( $plugin_file );
-
- if ( ! empty ( $this->log[ $plugin_file ] ) ) {
- $plugin['log'] = $this->log[ $plugin_file ];
- }
- return $plugin;
- }
-
- protected function format_plugin_v1_2( $plugin_file, $plugin_data ) {
- $plugin = array();
- $plugin['slug'] = Jetpack_Autoupdate::get_plugin_slug( $plugin_file );
- $plugin['active'] = Jetpack::is_plugin_active( $plugin_file );
- $plugin['name'] = preg_replace("/(.+)\.php$/", "$1", $plugin_file );
- $plugin['display_name'] = $plugin_data['Name'];
- $plugin['plugin_url'] = $plugin_data['PluginURI'];
- $plugin['version'] = $plugin_data['Version'];
- $plugin['description'] = $plugin_data['Description'];
- $plugin['author'] = $plugin_data['Author'];
- $plugin['author_url'] = $plugin_data['AuthorURI'];
- $plugin['network'] = $plugin_data['Network'];
- $plugin['update'] = $this->get_plugin_updates( $plugin_file );
- $action_link = $this->get_plugin_action_links( $plugin_file );
- if ( ! empty( $action_link ) ) {
- $plugin['action_links'] = $action_link;
- }
-
- $autoupdate = $this->plugin_has_autoupdates_enabled( $plugin_file );
- $plugin['autoupdate'] = $autoupdate;
-
- $autoupdate_translation = $this->plugin_has_translations_autoupdates_enabled( $plugin_file );
- $plugin['autoupdate_translation'] = $autoupdate || $autoupdate_translation || Jetpack_Options::get_option( 'autoupdate_translations', false );
- $plugin['uninstallable'] = is_uninstallable_plugin( $plugin_file );
-
- if ( ! empty ( $this->log[ $plugin_file ] ) ) {
- $plugin['log'] = $this->log[ $plugin_file ];
- }
-
- return $plugin;
- }
-
- protected function plugin_has_autoupdates_enabled( $plugin_file ) {
- return (bool) in_array( $plugin_file, Jetpack_Options::get_option( 'autoupdate_plugins', array() ) );
- }
-
- protected function plugin_has_translations_autoupdates_enabled( $plugin_file ) {
- return (bool) in_array( $plugin_file, Jetpack_Options::get_option( 'autoupdate_plugins_translations', array() ) );
- }
-
-
- protected function get_file_mod_capabilities() {
- $reasons_can_not_autoupdate = array();
- $reasons_can_not_modify_files = array();
-
- $has_file_system_write_access = Jetpack_Sync_Functions::file_system_write_access();
- if ( ! $has_file_system_write_access ) {
- $reasons_can_not_modify_files['has_no_file_system_write_access'] = __( 'The file permissions on this host prevent editing files.', 'jetpack' );
- }
-
- $disallow_file_mods = Jetpack_Constants::get_constant('DISALLOW_FILE_MODS' );
- if ( $disallow_file_mods ) {
- $reasons_can_not_modify_files['disallow_file_mods'] = __( 'File modifications are explicitly disabled by a site administrator.', 'jetpack' );
- }
-
- $automatic_updater_disabled = Jetpack_Constants::get_constant( 'AUTOMATIC_UPDATER_DISABLED' );
- if ( $automatic_updater_disabled ) {
- $reasons_can_not_autoupdate['automatic_updater_disabled'] = __( 'Any autoupdates are explicitly disabled by a site administrator.', 'jetpack' );
- }
-
- if ( is_multisite() ) {
- // is it the main network ? is really is multi network
- if ( Jetpack::is_multi_network() ) {
- $reasons_can_not_modify_files['is_multi_network'] = __( 'Multi network install are not supported.', 'jetpack' );
- }
- // Is the site the main site here.
- if ( ! is_main_site() ) {
- $reasons_can_not_modify_files['is_sub_site'] = __( 'The site is not the main network site', 'jetpack' );
- }
- }
-
- $file_mod_capabilities = array(
- 'modify_files' => (bool) empty( $reasons_can_not_modify_files ), // install, remove, update
- 'autoupdate_files' => (bool) empty( $reasons_can_not_modify_files ) && empty( $reasons_can_not_autoupdate ), // enable autoupdates
- );
-
- if ( ! empty( $reasons_can_not_modify_files ) ) {
- $file_mod_capabilities['reasons_modify_files_unavailable'] = $reasons_can_not_modify_files;
- }
-
- if ( ! $file_mod_capabilities['autoupdate_files'] ) {
- $file_mod_capabilities['reasons_autoupdate_unavailable'] = array_merge( $reasons_can_not_autoupdate, $reasons_can_not_modify_files );
- }
- return $file_mod_capabilities;
- }
-
- protected function get_plugins() {
- $plugins = array();
- /** This filter is documented in wp-admin/includes/class-wp-plugins-list-table.php */
- $installed_plugins = apply_filters( 'all_plugins', get_plugins() );
- foreach( $this->plugins as $plugin ) {
- if ( ! isset( $installed_plugins[ $plugin ] ) )
- continue;
- $plugins[] = $this->format_plugin( $plugin, $installed_plugins[ $plugin ] );
- }
- $args = $this->query_args();
-
- if ( isset( $args['offset'] ) ) {
- $plugins = array_slice( $plugins, (int) $args['offset'] );
- }
- if ( isset( $args['limit'] ) ) {
- $plugins = array_slice( $plugins, 0, (int) $args['limit'] );
- }
-
- return $plugins;
- }
-
- protected function validate_network_wide() {
- $args = $this->input();
-
- if ( isset( $args['network_wide'] ) && $args['network_wide'] ) {
- $this->network_wide = true;
- }
-
- if ( $this->network_wide && ! current_user_can( 'manage_network_plugins' ) ) {
- return new WP_Error( 'unauthorized', __( 'This user is not authorized to manage plugins network wide.', 'jetpack' ), 403 );
- }
-
- return true;
- }
-
-
- protected function validate_plugin( $plugin ) {
- if ( ! isset( $plugin) || empty( $plugin ) ) {
- return new WP_Error( 'missing_plugin', __( 'You are required to specify a plugin to activate.', 'jetpack' ), 400 );
- }
-
- if ( is_wp_error( $error = validate_plugin( $plugin ) ) ) {
- return new WP_Error( 'unknown_plugin', $error->get_error_messages() , 404 );
- }
-
- return true;
- }
-
- protected function get_plugin_updates( $plugin_file ) {
- $plugin_updates = get_plugin_updates();
- if ( isset( $plugin_updates[ $plugin_file ] ) ) {
- $update = $plugin_updates[ $plugin_file ]->update;
- $cleaned_update = array();
- foreach( (array) $update as $update_key => $update_value ) {
- switch ( $update_key ) {
- case 'id':
- case 'slug':
- case 'plugin':
- case 'new_version':
- case 'tested':
- $cleaned_update[ $update_key ] = wp_kses( $update_value, array() );
- break;
- case 'url':
- case 'package':
- $cleaned_update[ $update_key ] = esc_url( $update_value );
- break;
- }
- }
- return (object) $cleaned_update;
- }
- return null;
- }
-
- protected function get_plugin_action_links( $plugin_file ) {
- require_once JETPACK__PLUGIN_DIR . 'sync/class.jetpack-sync-functions.php';
- return Jetpack_Sync_Functions::get_plugins_action_links( $plugin_file );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-get-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-get-endpoint.php
deleted file mode 100644
index 276fca49..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-get-endpoint.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-new Jetpack_JSON_API_Plugins_Get_Endpoint(
- array(
- 'description' => 'Get the Plugin data.',
- 'method' => 'GET',
- 'path' => '/sites/%s/plugins/%s/',
- 'min_version' => '1',
- 'max_version' => '1.1',
- 'stat' => 'plugins:1',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- '$plugin' => '(string) The plugin ID',
- ),
- 'response_format' => Jetpack_JSON_API_Plugins_Endpoint::$_response_format,
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/plugins/hello-dolly%20hello'
- )
-);
-// no v1.2 version since it is .com only
-class Jetpack_JSON_API_Plugins_Get_Endpoint extends Jetpack_JSON_API_Plugins_Endpoint {
- // GET /sites/%s/plugins/%s
- protected $needed_capabilities = 'activate_plugins';
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-install-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-install-endpoint.php
deleted file mode 100644
index bbd6de19..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-install-endpoint.php
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-
-include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
-include_once ABSPATH . 'wp-admin/includes/file.php';
-// POST /sites/%s/plugins/%s/install
-new Jetpack_JSON_API_Plugins_Install_Endpoint(
- array(
- 'description' => 'Install a plugin to your jetpack blog',
- 'group' => '__do_not_document',
- 'stat' => 'plugins:1:install',
- 'min_version' => '1',
- 'max_version' => '1.1',
- 'method' => 'POST',
- 'path' => '/sites/%s/plugins/%s/install',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- '$plugin' => '(int|string) The plugin slug to install',
- ),
- 'response_format' => Jetpack_JSON_API_Plugins_Endpoint::$_response_format,
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/plugins/akismet/install'
- )
-);
-
-new Jetpack_JSON_API_Plugins_Install_Endpoint(
- array(
- 'description' => 'Install a plugin to your jetpack blog',
- 'group' => '__do_not_document',
- 'stat' => 'plugins:1:install',
- 'min_version' => '1.2',
- 'method' => 'POST',
- 'path' => '/sites/%s/plugins/%s/install',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- '$plugin' => '(int|string) The plugin slug to install',
- ),
- 'response_format' => Jetpack_JSON_API_Plugins_Endpoint::$_response_format_v1_2,
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.2/sites/example.wordpress.org/plugins/akismet/install'
- )
-);
-
-class Jetpack_JSON_API_Plugins_Install_Endpoint extends Jetpack_JSON_API_Plugins_Endpoint {
-
- // POST /sites/%s/plugins/%s/install
- protected $needed_capabilities = 'install_plugins';
- protected $action = 'install';
-
- protected function install() {
- jetpack_require_lib( 'plugins' );
- $result = '';
- foreach ( $this->plugins as $index => $slug ) {
- $result = Jetpack_Plugins::install_plugin( $slug );
- if ( is_wp_error( $result ) ) {
- $this->log[ $slug ][] = $result->get_error_message();
- if ( ! $this->bulk ) {
- return $result;
- }
- }
- }
-
- if ( is_wp_error( $result ) ) {
- return $result;
- }
-
- // No errors, install worked. Now replace the slug with the actual plugin id
- $this->plugins[$index] = Jetpack_Plugins::get_plugin_id_by_slug( $slug );
-
- return true;
- }
-
- protected function validate_plugins() {
- if ( empty( $this->plugins ) || ! is_array( $this->plugins ) ) {
- return new WP_Error( 'missing_plugins', __( 'No plugins found.', 'jetpack' ) );
- }
-
- jetpack_require_lib( 'plugins' );
- foreach ( $this->plugins as $index => $slug ) {
- // make sure it is not already installed
- if ( Jetpack_Plugins::get_plugin_id_by_slug( $slug ) ) {
- return new WP_Error( 'plugin_already_installed', __( 'The plugin is already installed', 'jetpack' ) );
- }
-
- }
-
- return true;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-list-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-list-endpoint.php
deleted file mode 100644
index ff8004d0..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-list-endpoint.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-new Jetpack_JSON_API_Plugins_List_Endpoint(
- array(
- 'description' => 'Get installed Plugins on your blog',
- 'method' => 'GET',
- 'path' => '/sites/%s/plugins',
- 'stat' => 'plugins',
- 'min_version' => '1',
- 'max_version' => '1.1',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'response_format' => array(
- 'plugins' => '(plugin) An array of plugin objects.',
- ),
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/plugins'
- )
-);
-// No v1.2 versions since they are .com only
-class Jetpack_JSON_API_Plugins_List_Endpoint extends Jetpack_JSON_API_Plugins_Endpoint {
- // GET /sites/%s/plugins
- protected $needed_capabilities = 'activate_plugins';
- public function validate_input( $plugin ) {
- wp_update_plugins();
- $this->plugins = array_keys( get_plugins() );
- return true;
- }
-}
-
-
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-modify-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-modify-endpoint.php
deleted file mode 100644
index 49cf43dc..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-modify-endpoint.php
+++ /dev/null
@@ -1,420 +0,0 @@
-<?php
-new Jetpack_JSON_API_Plugins_Modify_Endpoint(
- array(
- 'description' => 'Activate/Deactivate a Plugin on your Jetpack Site, or set automatic updates',
- 'min_version' => '1',
- 'max_version' => '1.1',
- 'method' => 'POST',
- 'path' => '/sites/%s/plugins/%s',
- 'stat' => 'plugins:1:modify',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- '$plugin' => '(string) The plugin ID',
- ),
- 'request_format' => array(
- 'action' => '(string) Possible values are \'update\'',
- 'autoupdate' => '(bool) Whether or not to automatically update the plugin',
- 'active' => '(bool) Activate or deactivate the plugin',
- 'network_wide' => '(bool) Do action network wide (default value: false)',
- ),
- 'query_parameters' => array(
- 'autoupdate' => '(bool=false) If the update is happening as a result of autoupdate event',
- ),
- 'response_format' => Jetpack_JSON_API_Plugins_Endpoint::$_response_format,
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'action' => 'update',
- )
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/plugins/hello-dolly%20hello'
- )
-);
-
-new Jetpack_JSON_API_Plugins_Modify_Endpoint(
- array(
- 'description' => 'Activate/Deactivate a list of plugins on your Jetpack Site, or set automatic updates',
- 'min_version' => '1',
- 'max_version' => '1.1',
- 'method' => 'POST',
- 'path' => '/sites/%s/plugins',
- 'stat' => 'plugins:modify',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- ),
- 'request_format' => array(
- 'action' => '(string) Possible values are \'update\'',
- 'autoupdate' => '(bool) Whether or not to automatically update the plugin',
- 'active' => '(bool) Activate or deactivate the plugin',
- 'network_wide' => '(bool) Do action network wide (default value: false)',
- 'plugins' => '(array) A list of plugin ids to modify',
- ),
- 'query_parameters' => array(
- 'autoupdate' => '(bool=false) If the update is happening as a result of autoupdate event',
- ),
- 'response_format' => array(
- 'plugins' => '(array:plugin) An array of plugin objects.',
- 'updated' => '(array) A list of plugin ids that were updated. Only present if action is update.',
- 'not_updated' => '(array) A list of plugin ids that were not updated. Only present if action is update.',
- 'log' => '(array) Update log. Only present if action is update.',
- ),
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'active' => true,
- 'plugins' => array(
- 'jetpack/jetpack',
- 'akismet/akismet',
- ),
- )
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/plugins'
- )
-);
-
-new Jetpack_JSON_API_Plugins_Modify_Endpoint(
- array(
- 'description' => 'Update a Plugin on your Jetpack Site',
- 'min_version' => '1',
- 'max_version' => '1.1',
- 'method' => 'POST',
- 'path' => '/sites/%s/plugins/%s/update/',
- 'stat' => 'plugins:1:update',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- '$plugin' => '(string) The plugin ID',
- ),
- 'query_parameters' => array(
- 'autoupdate' => '(bool=false) If the update is happening as a result of autoupdate event',
- ),
- 'response_format' => Jetpack_JSON_API_Plugins_Endpoint::$_response_format,
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/plugins/hello-dolly%20hello/update'
- )
-);
-
-class Jetpack_JSON_API_Plugins_Modify_Endpoint extends Jetpack_JSON_API_Plugins_Endpoint {
- // POST /sites/%s/plugins/%s
- // POST /sites/%s/plugins
- protected $slug = null;
- protected $needed_capabilities = 'activate_plugins';
- protected $action = 'default_action';
- protected $expected_actions = array( 'update', 'install', 'delete', 'update_translations' );
-
- public function callback( $path = '', $blog_id = 0, $object = null ) {
- Jetpack_JSON_API_Endpoint::validate_input( $object );
- switch ( $this->action ) {
- case 'delete':
- $this->needed_capabilities = 'delete_plugins';
- case 'update_translations':
- case 'update' :
- $this->needed_capabilities = 'update_plugins';
- break;
- case 'install' :
- $this->needed_capabilities = 'install_plugins';
- break;
- }
-
- if ( isset( $args['autoupdate'] ) || isset( $args['autoupdate_translations'] ) ) {
- $this->needed_capabilities = 'update_plugins';
- }
-
- return parent::callback( $path, $blog_id, $object );
- }
-
- public function default_action() {
- $args = $this->input();
-
- if ( isset( $args['autoupdate'] ) && is_bool( $args['autoupdate'] ) ) {
- if ( $args['autoupdate'] ) {
- $this->autoupdate_on();
- } else {
- $this->autoupdate_off();
- }
- }
-
- if ( isset( $args['active'] ) && is_bool( $args['active'] ) ) {
- if ( $args['active'] ) {
- // We don't have to check for activate_plugins permissions since we assume that the user has those
- // Since we set them via $needed_capabilities.
- return $this->activate();
- } else {
- if ( $this->current_user_can( 'deactivate_plugins' ) ) {
- return $this->deactivate();
- } else {
- return new WP_Error( 'unauthorized_error', __( 'Plugin deactivation is not allowed', 'jetpack' ), '403' );
- }
- }
- }
-
- if ( isset( $args['autoupdate_translations'] ) && is_bool( $args['autoupdate_translations'] ) ) {
- if ( $args['autoupdate_translations'] ) {
- $this->autoupdate_translations_on();
- } else {
- $this->autoupdate_translations_off();
- }
- }
-
- return true;
- }
-
- protected function autoupdate_on() {
- $autoupdate_plugins = Jetpack_Options::get_option( 'autoupdate_plugins', array() );
- $autoupdate_plugins = array_unique( array_merge( $autoupdate_plugins, $this->plugins ) );
- Jetpack_Options::update_option( 'autoupdate_plugins', $autoupdate_plugins );
- }
-
- protected function autoupdate_off() {
- $autoupdate_plugins = Jetpack_Options::get_option( 'autoupdate_plugins', array() );
- $autoupdate_plugins = array_diff( $autoupdate_plugins, $this->plugins );
- Jetpack_Options::update_option( 'autoupdate_plugins', $autoupdate_plugins );
- }
-
- protected function autoupdate_translations_on() {
- $autoupdate_plugins = Jetpack_Options::get_option( 'autoupdate_plugins_translations', array() );
- $autoupdate_plugins = array_unique( array_merge( $autoupdate_plugins, $this->plugins ) );
- Jetpack_Options::update_option( 'autoupdate_plugins_translations', $autoupdate_plugins );
- }
-
- protected function autoupdate_translations_off() {
- $autoupdate_plugins = Jetpack_Options::get_option( 'autoupdate_plugins_translations', array() );
- $autoupdate_plugins = array_diff( $autoupdate_plugins, $this->plugins );
- Jetpack_Options::update_option( 'autoupdate_plugins_translations', $autoupdate_plugins );
- }
-
- protected function activate() {
- $permission_error = false;
- foreach ( $this->plugins as $plugin ) {
-
- if ( ! $this->current_user_can( 'activate_plugin', $plugin ) ) {
- $this->log[$plugin]['error'] = __( 'Sorry, you are not allowed to activate this plugin.' );
- $has_errors = true;
- $permission_error = true;
- continue;
- }
-
- if ( ( ! $this->network_wide && Jetpack::is_plugin_active( $plugin ) ) || is_plugin_active_for_network( $plugin ) ) {
- $this->log[$plugin]['error'] = __( 'The Plugin is already active.', 'jetpack' );
- $has_errors = true;
- continue;
- }
-
- if ( ! $this->network_wide && is_network_only_plugin( $plugin ) && is_multisite() ) {
- $this->log[$plugin]['error'] = __( 'Plugin can only be Network Activated', 'jetpack' );
- $has_errors = true;
- continue;
- }
-
- $result = activate_plugin( $plugin, '', $this->network_wide );
-
- if ( is_wp_error( $result ) ) {
- $this->log[$plugin]['error'] = $result->get_error_messages();
- $has_errors = true;
- continue;
- }
-
- $success = Jetpack::is_plugin_active( $plugin );
- if ( $success && $this->network_wide ) {
- $success &= is_plugin_active_for_network( $plugin );
- }
-
- if ( ! $success ) {
- $this->log[$plugin]['error'] = $result->get_error_messages;
- $has_errors = true;
- continue;
- }
- $this->log[$plugin][] = __( 'Plugin activated.', 'jetpack' );
- }
-
- if ( ! $this->bulk && isset( $has_errors ) ) {
- $plugin = $this->plugins[0];
- if ( $permission_error ) {
- return new WP_Error( 'unauthorized_error', $this->log[$plugin]['error'], 403 );
- }
-
- return new WP_Error( 'activation_error', $this->log[$plugin]['error'] );
- }
- }
-
- protected function current_user_can( $capability, $plugin = null ) {
- if ( $plugin ) {
- return current_user_can( $capability, $plugin );
- }
-
- return current_user_can( $capability );
- }
-
- protected function deactivate() {
- $permission_error = false;
- foreach ( $this->plugins as $plugin ) {
- if ( ! $this->current_user_can( 'deactivate_plugin', $plugin ) ) {
- $error = $this->log[$plugin]['error'] = __( 'Sorry, you are not allowed to deactivate this plugin.', 'jetpack' );
- $permission_error = true;
- continue;
- }
-
- if ( ! Jetpack::is_plugin_active( $plugin ) ) {
- $error = $this->log[$plugin]['error'] = __( 'The Plugin is already deactivated.', 'jetpack' );
- continue;
- }
-
- deactivate_plugins( $plugin, false, $this->network_wide );
-
- $success = ! Jetpack::is_plugin_active( $plugin );
- if ( $success && $this->network_wide ) {
- $success &= ! is_plugin_active_for_network( $plugin );
- }
-
- if ( ! $success ) {
- $error = $this->log[$plugin]['error'] = __( 'There was an error deactivating your plugin', 'jetpack' );
- continue;
- }
- $this->log[$plugin][] = __( 'Plugin deactivated.', 'jetpack' );
- }
- if ( ! $this->bulk && isset( $error ) ) {
- if ( $permission_error ) {
- return new WP_Error( 'unauthorized_error', $error, 403 );
- }
-
- return new WP_Error( 'deactivation_error', $error );
- }
- }
-
- protected function update() {
- $query_args = $this->query_args();
- if ( isset( $query_args['autoupdate'] ) && $query_args['autoupdate'] ) {
- Jetpack_Constants::set_constant( 'JETPACK_PLUGIN_AUTOUPDATE', true );
- }
- wp_clean_plugins_cache();
- ob_start();
- wp_update_plugins(); // Check for Plugin updates
- ob_end_clean();
-
- $update_plugins = get_site_transient( 'update_plugins' );
-
- if ( isset( $update_plugins->response ) ) {
- $plugin_updates_needed = array_keys( $update_plugins->response );
- } else {
- $plugin_updates_needed = array();
- }
-
- $update_attempted = false;
-
- include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
-
- // unhook this functions that output things before we send our response header.
- remove_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 );
- remove_action( 'upgrader_process_complete', 'wp_version_check' );
- remove_action( 'upgrader_process_complete', 'wp_update_themes' );
-
- $result = false;
-
- foreach ( $this->plugins as $plugin ) {
-
- if ( ! in_array( $plugin, $plugin_updates_needed ) ) {
- $this->log[$plugin][] = __( 'No update needed', 'jetpack' );
- continue;
- }
-
- /**
- * Pre-upgrade action
- *
- * @since 3.9.3
- *
- * @param array $plugin Plugin data
- * @param array $plugin Array of plugin objects
- * @param bool $updated_attempted false for the first update, true subsequently
- */
- do_action( 'jetpack_pre_plugin_upgrade', $plugin, $this->plugins, $update_attempted );
-
- $update_attempted = true;
-
- // Object created inside the for loop to clean the messages for each plugin
- $skin = new WP_Ajax_Upgrader_Skin();
- // The Automatic_Upgrader_Skin skin shouldn't output anything.
- $upgrader = new Plugin_Upgrader( $skin );
- $upgrader->init();
- // This avoids the plugin to be deactivated.
- // Using bulk upgrade puts the site into maintenance mode during the upgrades
- $result = $upgrader->bulk_upgrade( array( $plugin ) );
- $errors = $upgrader->skin->get_errors();
- $this->log[$plugin] = $upgrader->skin->get_upgrade_messages();
-
- if ( is_wp_error( $errors ) && $errors->get_error_code() ) {
- return $errors;
- }
- }
-
- if ( ! $this->bulk && ! $result && $update_attempted ) {
- return new WP_Error( 'update_fail', __( 'There was an error updating your plugin', 'jetpack' ), 400 );
- }
-
- return $this->default_action();
- }
-
- function update_translations() {
- include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
-
- // Clear the cache.
- wp_clean_plugins_cache();
- ob_start();
- wp_update_plugins(); // Check for Plugin updates
- ob_end_clean();
-
- $available_updates = get_site_transient( 'update_plugins' );
- if ( ! isset( $available_updates->translations ) || empty( $available_updates->translations ) ) {
- return new WP_Error( 'nothing_to_translate' );
- }
-
- $update_attempted = false;
- $result = false;
- foreach ( $this->plugins as $plugin ) {
- $this->slug = Jetpack_Autoupdate::get_plugin_slug( $plugin );
- $translation = array_filter( $available_updates->translations, array( $this, 'get_translation' ) );
-
- if ( empty( $translation ) ) {
- $this->log[$plugin][] = __( 'No update needed', 'jetpack' );
- continue;
- }
-
- /**
- * Pre-upgrade action
- *
- * @since 4.4.0
- *
- * @param array $plugin Plugin data
- * @param array $plugin Array of plugin objects
- * @param bool $update_attempted false for the first update, true subsequently
- */
- do_action( 'jetpack_pre_plugin_upgrade_translations', $plugin, $this->plugins, $update_attempted );
-
- $update_attempted = true;
-
- $skin = new Automatic_Upgrader_Skin();
- $upgrader = new Language_Pack_Upgrader( $skin );
- $upgrader->init();
-
- $result = $upgrader->upgrade( (object) $translation[0] );
-
- $this->log[$plugin] = $upgrader->skin->get_upgrade_messages();
- }
-
- if ( ! $this->bulk && ! $result ) {
- return new WP_Error( 'update_fail', __( 'There was an error updating your plugin', 'jetpack' ), 400 );
- }
-
- return true;
- }
-
- protected function get_translation( $translation ) {
- return ( $translation['slug'] === $this->slug );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-modify-v1-2-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-modify-v1-2-endpoint.php
deleted file mode 100644
index 23940da0..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-modify-v1-2-endpoint.php
+++ /dev/null
@@ -1,191 +0,0 @@
-<?php
-new Jetpack_JSON_API_Plugins_Modify_v1_2_Endpoint(
- array(
- 'description' => 'Activate/Deactivate a Plugin on your Jetpack Site, or set automatic updates',
- 'min_version' => '1.2',
- 'method' => 'POST',
- 'path' => '/sites/%s/plugins/%s',
- 'stat' => 'plugins:1:modify',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- '$plugin' => '(string) The plugin ID',
- ),
- 'request_format' => array(
- 'action' => '(string) Possible values are \'update\'',
- 'autoupdate' => '(bool) Whether or not to automatically update the plugin',
- 'active' => '(bool) Activate or deactivate the plugin',
- 'network_wide' => '(bool) Do action network wide (default value: false)',
- ),
- 'query_parameters' => array(
- 'autoupdate' => '(bool=false) If the update is happening as a result of autoupdate event',
- ),
- 'response_format' => Jetpack_JSON_API_Plugins_Endpoint::$_response_format_v1_2,
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'action' => 'update',
- )
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.2/sites/example.wordpress.org/plugins/hello-dolly%20hello'
- )
-);
-
-new Jetpack_JSON_API_Plugins_Modify_v1_2_Endpoint(
- array(
- 'description' => 'Activate/Deactivate a list of plugins on your Jetpack Site, or set automatic updates',
- 'min_version' => '1.2',
- 'method' => 'POST',
- 'path' => '/sites/%s/plugins',
- 'stat' => 'plugins:modify',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- ),
- 'request_format' => array(
- 'action' => '(string) Possible values are \'update\'',
- 'autoupdate' => '(bool) Whether or not to automatically update the plugin',
- 'active' => '(bool) Activate or deactivate the plugin',
- 'network_wide' => '(bool) Do action network wide (default value: false)',
- 'plugins' => '(array) A list of plugin ids to modify',
- ),
- 'query_parameters' => array(
- 'autoupdate' => '(bool=false) If the update is happening as a result of autoupdate event',
- ),
- 'response_format' => array(
- 'plugins' => '(array:plugin_v1_2) An array of plugin objects.',
- 'updated' => '(array) A list of plugin ids that were updated. Only present if action is update.',
- 'not_updated' => '(array) A list of plugin ids that were not updated. Only present if action is update.',
- 'log' => '(array) Update log. Only present if action is update.',
- ),
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'active' => true,
- 'plugins' => array(
- 'jetpack/jetpack',
- 'akismet/akismet',
- ),
- )
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.2/sites/example.wordpress.org/plugins'
- )
-);
-
-new Jetpack_JSON_API_Plugins_Modify_v1_2_Endpoint(
- array(
- 'description' => 'Update a Plugin on your Jetpack Site',
- 'min_version' => '1.2',
- 'method' => 'POST',
- 'path' => '/sites/%s/plugins/%s/update/',
- 'stat' => 'plugins:1:update',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- '$plugin' => '(string) The plugin ID',
- ),
- 'query_parameters' => array(
- 'autoupdate' => '(bool=false) If the update is happening as a result of autoupdate event',
- ),
- 'response_format' => Jetpack_JSON_API_Plugins_Endpoint::$_response_format_v1_2,
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.2/sites/example.wordpress.org/plugins/hello-dolly%20hello/update'
- )
-);
-
-class Jetpack_JSON_API_Plugins_Modify_v1_2_Endpoint extends Jetpack_JSON_API_Plugins_Modify_Endpoint {
-
- protected function activate() {
- $permission_error = false;
- $has_errors = false;
- foreach ( $this->plugins as $plugin ) {
-
- if ( ! $this->current_user_can( 'activate_plugin', $plugin ) ) {
- $this->log[$plugin]['error'] = __( 'Sorry, you are not allowed to activate this plugin.' );
- $has_errors = true;
- $permission_error = true;
- continue;
- }
-
- if ( ( ! $this->network_wide && Jetpack::is_plugin_active( $plugin ) ) || is_plugin_active_for_network( $plugin ) ) {
- continue;
- }
-
- if ( ! $this->network_wide && is_network_only_plugin( $plugin ) && is_multisite() ) {
- $this->log[$plugin]['error'] = __( 'Plugin can only be Network Activated', 'jetpack' );
- $has_errors = true;
- continue;
- }
-
- $result = activate_plugin( $plugin, '', $this->network_wide );
-
- if ( is_wp_error( $result ) ) {
- $this->log[$plugin]['error'] = $result->get_error_messages();
- $has_errors = true;
- continue;
- }
-
- $success = Jetpack::is_plugin_active( $plugin );
- if ( $success && $this->network_wide ) {
- $success &= is_plugin_active_for_network( $plugin );
- }
-
- if ( ! $success ) {
- $this->log[$plugin]['error'] = $result->get_error_messages;
- $has_errors = true;
- continue;
- }
- $this->log[$plugin][] = __( 'Plugin activated.', 'jetpack' );
- }
-
- if ( ! $this->bulk && $has_errors ) {
- $plugin = $this->plugins[0];
- if ( $permission_error ) {
- return new WP_Error( 'unauthorized_error', $this->log[$plugin]['error'], 403 );
- }
-
- return new WP_Error( 'activation_error', $this->log[$plugin]['error'] );
- }
- }
-
-
- protected function deactivate() {
- $permission_error = false;
- foreach ( $this->plugins as $plugin ) {
- if ( ! $this->current_user_can( 'deactivate_plugin', $plugin ) ) {
- $error = $this->log[$plugin]['error'] = __( 'Sorry, you are not allowed to deactivate this plugin.', 'jetpack' );
- $permission_error = true;
- continue;
- }
-
- if ( ! Jetpack::is_plugin_active( $plugin ) ) {
- continue;
- }
-
- deactivate_plugins( $plugin, false, $this->network_wide );
-
- $success = ! Jetpack::is_plugin_active( $plugin );
- if ( $success && $this->network_wide ) {
- $success &= ! is_plugin_active_for_network( $plugin );
- }
-
- if ( ! $success ) {
- $error = $this->log[$plugin]['error'] = __( 'There was an error deactivating your plugin', 'jetpack' );
- continue;
- }
- $this->log[$plugin][] = __( 'Plugin deactivated.', 'jetpack' );
- }
- if ( ! $this->bulk && isset( $error ) ) {
- if ( $permission_error ) {
- return new WP_Error( 'unauthorized_error', $error, 403 );
- }
-
- return new WP_Error( 'deactivation_error', $error );
- }
- }
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-new-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-new-endpoint.php
deleted file mode 100644
index 286a625b..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-plugins-new-endpoint.php
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-
-include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
-include_once ABSPATH . 'wp-admin/includes/file.php';
-
-
-// POST /sites/%s/plugins/new
-new Jetpack_JSON_API_Plugins_New_Endpoint(
- array(
- 'description' => 'Install a plugin to a Jetpack site by uploading a zip file',
- 'group' => '__do_not_document',
- 'stat' => 'plugins:new',
- 'min_version' => '1',
- 'max_version' => '1.1',
- 'method' => 'POST',
- 'path' => '/sites/%s/plugins/new',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'request_format' => array(
- 'zip' => '(zip) Plugin package zip file. multipart/form-data encoded. ',
- ),
- 'response_format' => Jetpack_JSON_API_Plugins_Endpoint::$_response_format,
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/plugins/new'
- )
-);
-
-
-new Jetpack_JSON_API_Plugins_New_Endpoint(
- array(
- 'description' => 'Install a plugin to a Jetpack site by uploading a zip file',
- 'group' => '__do_not_document',
- 'stat' => 'plugins:new',
- 'min_version' => '1.2',
- 'method' => 'POST',
- 'path' => '/sites/%s/plugins/new',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'request_format' => array(
- 'zip' => '(zip) Plugin package zip file. multipart/form-data encoded. ',
- ),
- 'response_format' => Jetpack_JSON_API_Plugins_Endpoint::$_response_format_v1_2,
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.2/sites/example.wordpress.org/plugins/new'
- )
-);
-
-class Jetpack_JSON_API_Plugins_New_Endpoint extends Jetpack_JSON_API_Plugins_Endpoint {
-
- // POST /sites/%s/plugins/new
- protected $needed_capabilities = 'install_plugins';
- protected $action = 'install';
-
- protected function validate_call( $_blog_id, $capability, $check_manage_active = true ) {
- $validate = parent::validate_call( $_blog_id, $capability, $check_manage_active );
- if ( is_wp_error( $validate ) ) {
-
- // Lets delete the attachment... if the user doesn't have the right permissions to do things.
- $args = $this->input();
- if ( isset( $args['zip'][0]['id'] ) ) {
- wp_delete_attachment( $args['zip'][0]['id'], true );
- }
- }
-
- return $validate;
- }
-
- // no need to try to validate the plugin since we didn't pass one in.
- protected function validate_input( $plugin ) {
- $this->bulk = false;
- $this->plugins = array();
- }
-
- function install() {
- $args = $this->input();
-
- if ( isset( $args['zip'][0]['id'] ) ) {
- $plugin_attachment_id = $args['zip'][0]['id'];
- $local_file = get_attached_file( $plugin_attachment_id );
- if ( ! $local_file ) {
- return new WP_Error( 'local-file-does-not-exist' );
- }
- jetpack_require_lib( 'class.jetpack-automatic-install-skin' );
- $skin = new Jetpack_Automatic_Install_Skin();
- $upgrader = new Plugin_Upgrader( $skin );
-
- $pre_install_plugin_list = get_plugins();
- $result = $upgrader->install( $local_file );
-
- // clean up.
- wp_delete_attachment( $plugin_attachment_id, true );
-
- if ( is_wp_error( $result ) ) {
- return $result;
- }
-
- $after_install_plugin_list = get_plugins();
- $plugin = array_values( array_diff( array_keys( $after_install_plugin_list ), array_keys( $pre_install_plugin_list ) ) );
-
- if ( ! $result ) {
- $error_code = $upgrader->skin->get_main_error_code();
- $message = $upgrader->skin->get_main_error_message();
- if ( empty( $message ) ) {
- $message = __( 'An unknown error occurred during installation', 'jetpack' );
- }
-
- if ( 'download_failed' === $error_code ) {
- $error_code = 'no_package';
- }
-
- return new WP_Error( $error_code, $message, 400 );
- }
-
- if ( empty( $plugin ) ) {
- return new WP_Error( 'plugin_already_installed' );
- }
-
- $this->plugins = $plugin;
- $this->log[ $plugin[0] ] = $upgrader->skin->get_upgrade_messages();
-
- return true;
- }
-
- return new WP_Error( 'no_plugin_installed' );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-sync-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-sync-endpoint.php
deleted file mode 100644
index cba22c24..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-sync-endpoint.php
+++ /dev/null
@@ -1,319 +0,0 @@
-<?php
-
-// POST /sites/%s/sync
-class Jetpack_JSON_API_Sync_Endpoint extends Jetpack_JSON_API_Endpoint {
- protected $needed_capabilities = 'manage_options';
-
- protected function validate_call( $_blog_id, $capability, $check_manage_active = true ) {
- return parent::validate_call( $_blog_id, $capability, false );
- }
-
- protected function result() {
- $args = $this->input();
-
- $modules = null;
-
- // convert list of modules in comma-delimited format into an array
- // of "$modulename => true"
- if ( isset( $args['modules'] ) && ! empty( $args['modules'] ) ) {
- $modules = array_map( '__return_true', array_flip( array_map( 'trim', explode( ',', $args['modules'] ) ) ) );
- }
-
- foreach ( array( 'posts', 'comments', 'users' ) as $module_name ) {
- if ( 'users' === $module_name && isset( $args[ $module_name ] ) && 'initial' === $args[ $module_name ] ) {
- $modules[ 'users' ] = 'initial';
- } elseif ( isset( $args[ $module_name ] ) ) {
- $ids = explode( ',', $args[ $module_name ] );
- if ( count( $ids ) > 0 ) {
- $modules[ $module_name ] = $ids;
- }
- }
- }
-
- if ( empty( $modules ) ) {
- $modules = null;
- }
-
- return array( 'scheduled' => Jetpack_Sync_Actions::do_full_sync( $modules ) );
- }
-
- protected function validate_queue( $query ) {
- if ( ! isset( $query ) ) {
- return new WP_Error( 'invalid_queue', 'Queue name is required', 400 );
- }
-
- if ( ! in_array( $query, array( 'sync', 'full_sync' ) ) ) {
- return new WP_Error( 'invalid_queue', 'Queue name should be sync or full_sync', 400 );
- }
- return $query;
- }
-}
-
-// GET /sites/%s/sync/status
-class Jetpack_JSON_API_Sync_Status_Endpoint extends Jetpack_JSON_API_Sync_Endpoint {
- protected function result() {
- return Jetpack_Sync_Actions::get_sync_status();
- }
-}
-
-// GET /sites/%s/data-check
-class Jetpack_JSON_API_Sync_Check_Endpoint extends Jetpack_JSON_API_Sync_Endpoint {
- protected function result() {
- require_once JETPACK__PLUGIN_DIR . 'sync/class.jetpack-sync-wp-replicastore.php';
- $store = new Jetpack_Sync_WP_Replicastore();
- return $store->checksum_all();
- }
-}
-
-// GET /sites/%s/data-histogram
-class Jetpack_JSON_API_Sync_Histogram_Endpoint extends Jetpack_JSON_API_Sync_Endpoint {
- protected function result() {
- $args = $this->query_args();
-
- if ( isset( $args['columns'] ) ) {
- $columns = array_map( 'trim', explode( ',', $args['columns'] ) );
- } else {
- $columns = null; // go with defaults
- }
-
- require_once JETPACK__PLUGIN_DIR . 'sync/class.jetpack-sync-wp-replicastore.php';
- $store = new Jetpack_Sync_WP_Replicastore();
-
- return $store->checksum_histogram( $args['object_type'], $args['buckets'], $args['start_id'], $args['end_id'], $columns, $args['strip_non_ascii'] );
- }
-}
-
-// POST /sites/%s/sync/settings
-class Jetpack_JSON_API_Sync_Modify_Settings_Endpoint extends Jetpack_JSON_API_Sync_Endpoint {
- protected function result() {
- $args = $this->input();
-
- require_once JETPACK__PLUGIN_DIR . 'sync/class.jetpack-sync-settings.php';
-
- $sync_settings = Jetpack_Sync_Settings::get_settings();
-
- foreach ( $args as $key => $value ) {
- if ( $value !== false ) {
- if ( is_numeric( $value ) ) {
- $value = (int) $value;
- }
-
- // special case for sending empty arrays - a string with value 'empty'
- if ( $value === 'empty' ) {
- $value = array();
- }
-
- $sync_settings[ $key ] = $value;
- }
- }
-
- Jetpack_Sync_Settings::update_settings( $sync_settings );
-
- // re-fetch so we see what's really being stored
- return Jetpack_Sync_Settings::get_settings();
- }
-}
-
-// GET /sites/%s/sync/settings
-class Jetpack_JSON_API_Sync_Get_Settings_Endpoint extends Jetpack_JSON_API_Sync_Endpoint {
- protected function result() {
- require_once JETPACK__PLUGIN_DIR . 'sync/class.jetpack-sync-settings.php';
-
- return Jetpack_Sync_Settings::get_settings();
- }
-}
-
-// GET /sites/%s/sync/object
-class Jetpack_JSON_API_Sync_Object extends Jetpack_JSON_API_Sync_Endpoint {
- protected function result() {
- $args = $this->query_args();
-
- $module_name = $args['module_name'];
-
- require_once JETPACK__PLUGIN_DIR . 'sync/class.jetpack-sync-modules.php';
-
- if ( ! $sync_module = Jetpack_Sync_Modules::get_module( $module_name ) ) {
- return new WP_Error( 'invalid_module', 'You specified an invalid sync module' );
- }
-
- $object_type = $args['object_type'];
- $object_ids = $args['object_ids'];
-
- require_once JETPACK__PLUGIN_DIR . 'sync/class.jetpack-sync-sender.php';
- $codec = Jetpack_Sync_Sender::get_instance()->get_codec();
-
- Jetpack_Sync_Settings::set_is_syncing( true );
- $objects = $codec->encode( $sync_module->get_objects_by_id( $object_type, $object_ids ) );
- Jetpack_Sync_Settings::set_is_syncing( false );
-
- return array(
- 'objects' => $objects,
- 'codec' => $codec->name(),
- );
- }
-}
-
-class Jetpack_JSON_API_Sync_Now_Endpoint extends Jetpack_JSON_API_Sync_Endpoint {
- protected function result() {
- $args = $this->input();
- $queue_name = $this->validate_queue( $args['queue'] );
-
- if ( is_wp_error( $queue_name ) ){
- return $queue_name;
- }
-
- require_once JETPACK__PLUGIN_DIR . 'sync/class.jetpack-sync-sender.php';
-
- $sender = Jetpack_Sync_Sender::get_instance();
- $response = $sender->do_sync_for_queue( new Jetpack_Sync_Queue( $args['queue'] ) );
-
- return array(
- 'response' => $response
- );
- }
-}
-
-class Jetpack_JSON_API_Sync_Checkout_Endpoint extends Jetpack_JSON_API_Sync_Endpoint {
- protected function result() {
- $args = $this->input();
- $queue_name = $this->validate_queue( $args['queue'] );
-
- if ( is_wp_error( $queue_name ) ){
- return $queue_name;
- }
-
- if ( $args[ 'number_of_items' ] < 1 || $args[ 'number_of_items' ] > 100 ) {
- return new WP_Error( 'invalid_number_of_items', 'Number of items needs to be an integer that is larger than 0 and less then 100', 400 );
- }
-
- require_once JETPACK__PLUGIN_DIR . 'sync/class.jetpack-sync-queue.php';
- $queue = new Jetpack_Sync_Queue( $queue_name );
-
- if ( 0 === $queue->size() ) {
- return new WP_Error( 'queue_size', 'The queue is empty and there is nothing to send', 400 );
- }
-
- require_once JETPACK__PLUGIN_DIR . 'sync/class.jetpack-sync-sender.php';
- $sender = Jetpack_Sync_Sender::get_instance();
-
- // try to give ourselves as much time as possible
- set_time_limit( 0 );
-
- // let's delete the checkin state
- if ( $args['force'] ) {
- $queue->unlock();
- }
-
- $buffer = $this->get_buffer( $queue, $args[ 'number_of_items' ] );
-
- // Check that the $buffer is not checkout out already
- if ( is_wp_error( $buffer ) ) {
- return new WP_Error( 'buffer_open', "We couldn't get the buffer it is currently checked out", 400 );
- }
-
- if ( ! is_object( $buffer ) ) {
- return new WP_Error( 'buffer_non-object', 'Buffer is not an object', 400 );
- }
-
- Jetpack_Sync_Settings::set_is_syncing( true );
- list( $items_to_send, $skipped_items_ids, $items ) = $sender->get_items_to_send( $buffer, $args['encode'] );
- Jetpack_Sync_Settings::set_is_syncing( false );
-
- return array(
- 'buffer_id' => $buffer->id,
- 'items' => $items_to_send,
- 'skipped_items' => $skipped_items_ids,
- 'codec' => $args['encode'] ? $sender->get_codec()->name() : null,
- 'sent_timestamp' => time(),
- );
- }
-
- protected function get_buffer( $queue, $number_of_items ) {
- $start = time();
- $max_duration = 5; // this will try to get the buffer
-
- $buffer = $queue->checkout( $number_of_items );
- $duration = time() - $start;
-
- while( is_wp_error( $buffer ) && $duration < $max_duration ) {
- sleep( 2 );
- $duration = time() - $start;
- $buffer = $queue->checkout( $number_of_items );
- }
-
- if ( $buffer === false ) {
- return new WP_Error( 'queue_size', 'The queue is empty and there is nothing to send', 400 );
- }
-
- return $buffer;
- }
-}
-
-class Jetpack_JSON_API_Sync_Close_Endpoint extends Jetpack_JSON_API_Sync_Endpoint {
- protected function result() {
- $request_body = $this->input();
- $queue_name = $this->validate_queue( $request_body['queue'] );
-
- if ( is_wp_error( $queue_name ) ) {
- return $queue_name;
- }
- require_once JETPACK__PLUGIN_DIR . 'sync/class.jetpack-sync-queue.php';
-
- if ( ! isset( $request_body['buffer_id'] ) ) {
- return new WP_Error( 'missing_buffer_id', 'Please provide a buffer id', 400 );
- }
-
- if ( ! isset( $request_body['item_ids'] ) || ! is_array( $request_body['item_ids'] ) ) {
- return new WP_Error( 'missing_item_ids', 'Please provide a list of item ids in the item_ids argument', 400 );
- }
-
- //Limit to A-Z,a-z,0-9,_,-
- $request_body ['buffer_id'] = preg_replace( '/[^A-Za-z0-9]/', '', $request_body['buffer_id'] );
- $request_body['item_ids'] = array_filter( array_map( array( 'Jetpack_JSON_API_Sync_Close_Endpoint', 'sanitize_item_ids' ), $request_body['item_ids'] ) );
-
- $buffer = new Jetpack_Sync_Queue_Buffer( $request_body['buffer_id'], $request_body['item_ids'] );
- $queue = new Jetpack_Sync_Queue( $queue_name );
-
- $response = $queue->close( $buffer, $request_body['item_ids'] );
-
- if ( is_wp_error( $response ) ) {
- return $response;
- }
-
- return array(
- 'success' => $response
- );
- }
-
- protected static function sanitize_item_ids( $item ) {
- // lets not delete any options that don't start with jpsq_sync-
- if ( substr( $item, 0, 5 ) !== 'jpsq_' ) {
- return null;
- }
- //Limit to A-Z,a-z,0-9,_,-,.
- return preg_replace( '/[^A-Za-z0-9-_.]/', '', $item );
- }
-}
-
-class Jetpack_JSON_API_Sync_Unlock_Endpoint extends Jetpack_JSON_API_Sync_Endpoint {
- protected function result() {
- $args = $this->input();
-
- if ( ! isset( $args['queue'] ) ) {
- return new WP_Error( 'invalid_queue', 'Queue name is required', 400 );
- }
-
- if ( ! in_array( $args['queue'], array( 'sync', 'full_sync' ) ) ) {
- return new WP_Error( 'invalid_queue', 'Queue name should be sync or full_sync', 400 );
- }
-
- require_once JETPACK__PLUGIN_DIR . 'sync/class.jetpack-sync-queue.php';
- $queue = new Jetpack_Sync_Queue( $args['queue'] );
-
- // False means that there was no lock to delete.
- $response = $queue->unlock();
- return array(
- 'success' => $response
- );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-active-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-active-endpoint.php
deleted file mode 100644
index db23c52f..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-active-endpoint.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_Themes_Active_Endpoint extends Jetpack_JSON_API_Themes_Endpoint {
- // GET /sites/%s/themes/mine => current theme
- // POST /sites/%s/themes/mine => switch theme
- // The unused $object parameter is for making the method signature compatible with its parent class method.
- public function callback( $path = '', $blog_id = 0, $object = null ) {
-
- if ( is_wp_error( $error = $this->validate_call( $blog_id, 'switch_themes', true ) ) ) {
- return $error;
- }
-
- if ( 'POST' === $this->api->method )
- return $this->switch_theme();
- else
- return $this->get_current_theme();
- }
-
- protected function switch_theme() {
- $args = $this->input();
-
- if ( ! isset( $args['theme'] ) || empty( $args['theme'] ) ) {
- return new WP_Error( 'missing_theme', __( 'You are required to specify a theme to switch to.', 'jetpack' ), 400 );
- }
-
- $theme_slug = $args['theme'];
-
- if ( ! $theme_slug ) {
- return new WP_Error( 'theme_not_found', __( 'Theme is empty.', 'jetpack' ), 404 );
- }
-
- $theme = wp_get_theme( $theme_slug );
-
- if ( ! $theme->exists() ) {
- return new WP_Error( 'theme_not_found', __( 'The specified theme was not found.', 'jetpack' ), 404 );
- }
-
- if ( ! $theme->is_allowed() ) {
- return new WP_Error( 'theme_not_found', __( 'You are not allowed to switch to this theme', 'jetpack' ), 403 );
- }
-
- switch_theme( $theme_slug );
-
- return $this->get_current_theme();
- }
-
- protected function get_current_theme() {
- return $this->format_theme( wp_get_theme() );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-delete-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-delete-endpoint.php
deleted file mode 100644
index 97bcc58d..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-delete-endpoint.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_Themes_Delete_Endpoint extends Jetpack_JSON_API_Themes_Endpoint {
-
- // POST /sites/%s/plugins/%s/delete
- protected $needed_capabilities = 'delete_themes';
- protected $action = 'delete';
-
- protected function delete() {
-
- foreach( $this->themes as $theme ) {
-
- // Don't delete an active child theme
- if ( is_child_theme() && $theme == get_stylesheet() ) {
- $error = $this->log[ $theme ]['error'] = 'You cannot delete a theme while it is active on the main site.';
- continue;
- }
-
- if( $theme == get_template() ) {
- $error = $this->log[ $theme ]['error'] = 'You cannot delete a theme while it is active on the main site.';
- continue;
- }
-
- /**
- * Filters whether to use an alternative process for deleting a WordPress.com theme.
- * The alternative process can be executed during the filter.
- *
- * The filter can also return an instance of WP_Error; in which case the endpoint response will
- * contain this error.
- *
- * @module json-api
- *
- * @since 4.4.2
- *
- * @param bool $use_alternative_delete_method Whether to use the alternative method of deleting
- * a WPCom theme.
- * @param string $theme_slug Theme name (slug). If it is a WPCom theme,
- * it should be suffixed with `-wpcom`.
- */
- $result = apply_filters( 'jetpack_wpcom_theme_delete', false, $theme );
-
- if ( ! $result ) {
- $result = delete_theme( $theme );
- }
-
- if ( is_wp_error( $result ) ) {
- $error = $this->log[ $theme ]['error'] = $result->get_error_messages();
- } else {
- $this->log[ $theme ][] = 'Theme deleted';
- }
- }
-
- if( ! $this->bulk && isset( $error ) ) {
- return new WP_Error( 'delete_theme_error', $error, 400 );
- }
-
- return true;
- }
-
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-endpoint.php
deleted file mode 100644
index 2e32dccd..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-endpoint.php
+++ /dev/null
@@ -1,178 +0,0 @@
-<?php
-
-
-// THEMES
-
-/**
- * Base class for working with themes, has useful helper functions.
- */
-abstract class Jetpack_JSON_API_Themes_Endpoint extends Jetpack_JSON_API_Endpoint {
-
- protected $themes = array();
-
- protected $bulk = true;
- protected $log;
- protected $current_theme_id;
-
- static $_response_format = array(
- 'id' => '(string) The theme\'s ID.',
- 'screenshot' => '(string) A theme screenshot URL',
- 'name' => '(string) The name of the theme.',
- 'theme_uri' => '(string) The URI of the theme\'s webpage.',
- 'description' => '(string) A description of the theme.',
- 'author' => '(string) The author of the theme.',
- 'author_uri' => '(string) The website of the theme author.',
- 'tags' => '(array) Tags indicating styles and features of the theme.',
- 'log' => '(array) An array of log strings',
- 'autoupdate' => '(bool) Whether the theme is automatically updated',
- 'autoupdate_translation' => '(bool) Whether the theme is automatically updating translations',
- );
-
- protected function result() {
-
- $themes = $this->get_themes();
-
- if ( ! $this->bulk && ! empty( $themes ) ) {
- return array_pop( $themes );
- }
-
- return array( 'themes' => $themes );
-
- }
-
- /**
- * Walks through either the submitted theme or list of themes and creates the global array
- * @param $theme
- *
- * @return bool
- */
- protected function validate_input( $theme ) {
- $args = $this->input();
- // lets set what themes were requested, and validate them
- if ( ! isset( $theme ) || empty( $theme ) ) {
-
- if ( ! $args['themes'] || empty( $args['themes'] ) ) {
- return new WP_Error( 'missing_theme', __( 'You are required to specify a theme to update.', 'jetpack' ), 400 );
- }
- if ( is_array( $args['themes'] ) ) {
- $this->themes = $args['themes'];
- } else {
- $this->themes[] = $args['themes'];
- }
- } else {
- $this->themes[] = urldecode( $theme );
- $this->bulk = false;
- }
-
- if ( is_wp_error( $error = $this->validate_themes() ) ) {
- return $error;
- }
-
- return parent::validate_input( $theme );
- }
-
- /**
- * Walks through submitted themes to make sure they are valid
- * @return bool|WP_Error
- */
- protected function validate_themes() {
- foreach ( $this->themes as $theme ) {
- if ( is_wp_error( $error = wp_get_theme( $theme )->errors() ) ) {
- return new WP_Error( 'unknown_theme', $error->get_error_messages() , 404 );
- }
- }
- return true;
- }
-
- /**
- * Format a theme for the public API
- * @param object $theme WP_Theme object
- * @return array Named array of theme info used by the API
- */
- protected function format_theme( $theme ) {
-
- if ( ! ( $theme instanceof WP_Theme ) ) {
- $theme = wp_get_theme( $theme );
- }
-
- $fields = array(
- 'name' => 'Name',
- 'theme_uri' => 'ThemeURI',
- 'description' => 'Description',
- 'author' => 'Author',
- 'author_uri' => 'AuthorURI',
- 'tags' => 'Tags',
- 'version' => 'Version'
- );
-
- $id = $theme->get_stylesheet();
- $formatted_theme = array(
- 'id' => $id,
- 'screenshot' => jetpack_photon_url( $theme->get_screenshot(), array(), 'network_path' ),
- 'active' => $id === $this->current_theme_id,
- );
-
- foreach( $fields as $key => $field ) {
- $formatted_theme[ $key ] = $theme->get( $field );
- }
-
- $update_themes = get_site_transient( 'update_themes' );
- $formatted_theme['update'] = ( isset( $update_themes->response[ $id ] ) ) ? $update_themes->response[ $id ] : null;
-
- $autoupdate = in_array( $id, Jetpack_Options::get_option( 'autoupdate_themes', array() ) );
- $formatted_theme['autoupdate'] = $autoupdate;
-
- $autoupdate_translation = in_array( $id, Jetpack_Options::get_option( 'autoupdate_themes_translations', array() ) );
- $formatted_theme['autoupdate_translation'] = $autoupdate || $autoupdate_translation || Jetpack_Options::get_option( 'autoupdate_translations', false );
-
- if ( isset( $this->log[ $id ] ) ) {
- $formatted_theme['log'] = $this->log[ $id ];
- }
-
- /**
- * Filter the array of theme information that will be returned per theme by the Jetpack theme APIs.
- *
- * @module json-api
- *
- * @since 4.7.0
- *
- * @param array $formatted_theme The theme info array.
- */
- return apply_filters( 'jetpack_format_theme_details', $formatted_theme );
- }
-
- /**
- * Checks the query_args our collection endpoint was passed to ensure that it's in the proper bounds.
- * @return bool|WP_Error a WP_Error object if the args are out of bounds, true if things are good.
- */
- protected function check_query_args() {
- $args = $this->query_args();
- if ( $args['offset'] < 0 )
- return new WP_Error( 'invalid_offset', __( 'Offset must be greater than or equal to 0.', 'jetpack' ), 400 );
- if ( $args['limit'] < 0 )
- return new WP_Error( 'invalid_limit', __( 'Limit must be greater than or equal to 0.', 'jetpack' ), 400 );
- return true;
- }
-
- /**
- * Format a list of themes for public display, using the supplied offset and limit args
- * @uses WPCOM_JSON_API_Endpoint::query_args()
- * @return array Public API theme objects
- */
- protected function get_themes() {
- // ditch keys
- $themes = array_values( $this->themes );
- // do offset & limit - we've already returned a 400 error if they're bad numbers
- $args = $this->query_args();
-
- if ( isset( $args['offset'] ) )
- $themes = array_slice( $themes, (int) $args['offset'] );
- if ( isset( $args['limit'] ) )
- $themes = array_slice( $themes, 0, (int) $args['limit'] );
-
- $this->current_theme_id = wp_get_theme()->get_stylesheet();
-
- return array_map( array( $this, 'format_theme' ), $themes );
- }
-
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-get-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-get-endpoint.php
deleted file mode 100644
index cfc352af..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-get-endpoint.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_Themes_Get_Endpoint extends Jetpack_JSON_API_Themes_Endpoint {
- // GET /sites/%s/themes/%s
- protected $needed_capabilities = 'switch_themes';
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-install-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-install-endpoint.php
deleted file mode 100644
index c3cec3d3..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-install-endpoint.php
+++ /dev/null
@@ -1,173 +0,0 @@
-<?php
-
-include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
-include_once ABSPATH . 'wp-admin/includes/file.php';
-
-class Jetpack_JSON_API_Themes_Install_Endpoint extends Jetpack_JSON_API_Themes_Endpoint {
-
- // POST /sites/%s/themes/%s/install
- protected $needed_capabilities = 'install_themes';
- protected $action = 'install';
- protected $download_links = array();
-
- protected function install() {
-
- foreach ( $this->themes as $theme ) {
-
- /**
- * Filters whether to use an alternative process for installing a WordPress.com theme.
- * The alternative process can be executed during the filter.
- *
- * The filter can also return an instance of WP_Error; in which case the endpoint response will
- * contain this error.
- *
- * @module json-api
- *
- * @since 4.4.2
- *
- * @param bool $use_alternative_install_method Whether to use the alternative method of installing
- * a WPCom theme.
- * @param string $theme_slug Theme name (slug). If it is a WPCom theme,
- * it should be suffixed with `-wpcom`.
- */
- $result = apply_filters( 'jetpack_wpcom_theme_install', false, $theme );
-
- $skin = null;
- $upgrader = null;
- $link = null;
-
- // If the alternative install method was not used, use the standard method.
- if ( ! $result ) {
- jetpack_require_lib( 'class.jetpack-automatic-install-skin' );
- $skin = new Jetpack_Automatic_Install_Skin();
- $upgrader = new Theme_Upgrader( $skin );
-
- $link = $this->download_links[ $theme ];
- $result = $upgrader->install( $link );
- }
-
- if ( file_exists( $link ) ) {
- // Delete if link was tmp local file
- unlink( $link );
- }
-
- if ( ! $this->bulk && is_wp_error( $result ) ) {
- return $result;
- }
-
- if ( ! $result ) {
- $error = $this->log[ $theme ]['error'] = __( 'An unknown error occurred during installation', 'jetpack' );
- }
-
- elseif ( ! self::is_installed_theme( $theme ) ) {
- $error = $this->log[ $theme ]['error'] = __( 'There was an error installing your theme', 'jetpack' );
- }
-
- elseif ( $upgrader ) {
- $this->log[ $theme ][] = $upgrader->skin->get_upgrade_messages();
- }
- }
-
- if ( ! $this->bulk && isset( $error ) ) {
- return new WP_Error( 'install_error', $error, 400 );
- }
-
- return true;
- }
-
- protected function validate_themes() {
- if ( empty( $this->themes ) || ! is_array( $this->themes ) ) {
- return new WP_Error( 'missing_themes', __( 'No themes found.', 'jetpack' ) );
- }
- foreach( $this->themes as $index => $theme ) {
-
- if ( self::is_installed_theme( $theme ) ) {
- return new WP_Error( 'theme_already_installed', __( 'The theme is already installed', 'jetpack' ) );
- }
-
- /**
- * Filters whether to skip the standard method of downloading and validating a WordPress.com
- * theme. An alternative method of WPCom theme download and validation can be
- * executed during the filter.
- *
- * The filter can also return an instance of WP_Error; in which case the endpoint response will
- * contain this error.
- *
- * @module json-api
- *
- * @since 4.4.2
- *
- * @param bool $skip_download_filter_result Whether to skip the standard method of downloading
- * and validating a WPCom theme.
- * @param string $theme_slug Theme name (slug). If it is a WPCom theme,
- * it should be suffixed with `-wpcom`.
- */
- $skip_download_filter_result = apply_filters( 'jetpack_wpcom_theme_skip_download', false, $theme );
-
- if ( is_wp_error( $skip_download_filter_result ) ) {
- return $skip_download_filter_result;
- } elseif ( $skip_download_filter_result ) {
- continue;
- }
-
- if ( wp_endswith( $theme, '-wpcom' ) ) {
- $file = self::download_wpcom_theme_to_file( $theme );
-
- if ( is_wp_error( $file ) ) {
- return $file;
- }
-
- $this->download_links[ $theme ] = $file;
- continue;
- }
-
- $params = (object) array( 'slug' => $theme );
- $url = 'https://api.wordpress.org/themes/info/1.0/';
- $args = array(
- 'body' => array(
- 'action' => 'theme_information',
- 'request' => serialize( $params ),
- )
- );
- $response = wp_remote_post( $url, $args );
- $theme_data = unserialize( $response['body'] );
- if ( is_wp_error( $theme_data ) ) {
- return $theme_data;
- }
-
- if ( ! is_object( $theme_data ) && !isset( $theme_data->download_link ) ) {
- return new WP_Error( 'theme_not_found', __( 'This theme does not exist', 'jetpack' ) , 404 );
- }
-
- $this->download_links[ $theme ] = $theme_data->download_link;
-
- }
- return true;
- }
-
- protected static function is_installed_theme( $theme ) {
- $wp_theme = wp_get_theme( $theme );
- return $wp_theme->exists();
- }
-
- protected static function download_wpcom_theme_to_file( $theme ) {
- $wpcom_theme_slug = preg_replace( '/-wpcom$/', '', $theme );
-
- $file = wp_tempnam( 'theme' );
- if ( ! $file ) {
- return new WP_Error( 'problem_creating_theme_file', __( 'Problem creating file for theme download', 'jetpack' ) );
- }
-
- $url = "themes/download/$theme.zip";
- $args = array( 'stream' => true, 'filename' => $file );
- $result = Jetpack_Client::wpcom_json_api_request_as_blog( $url, '1.1', $args );
-
- $response = $result[ 'response' ];
- if ( $response[ 'code' ] !== 200 ) {
- unlink( $file );
- return new WP_Error( 'problem_fetching_theme', __( 'Problem downloading theme', 'jetpack' ) );
- }
-
- return $file;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-list-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-list-endpoint.php
deleted file mode 100644
index 526cf4d7..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-list-endpoint.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_Themes_List_Endpoint extends Jetpack_JSON_API_Themes_Endpoint {
- // GET /sites/%s/themes
-
- protected $needed_capabilities = 'switch_themes';
-
- public function validate_input( $theme ) {
- $this->themes = wp_get_themes( array( 'allowed' => true ) );
- return true;
- }
-
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-modify-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-modify-endpoint.php
deleted file mode 100644
index 072bfc5c..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-modify-endpoint.php
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_Themes_Modify_Endpoint extends Jetpack_JSON_API_Themes_Endpoint {
- // POST /sites/%s/themes/%s
- // POST /sites/%s/themes
-
- protected $needed_capabilities = 'update_themes';
- protected $action = 'default_action';
- protected $expected_actions = array( 'update', 'update_translations' );
-
- public function default_action() {
- $args = $this->input();
- if ( isset( $args['autoupdate'] ) && is_bool( $args['autoupdate'] ) ) {
- if ( $args['autoupdate'] ) {
- $this->autoupdate_on();
- } else {
- $this->autoupdate_off();
- }
- }
- if ( isset( $args['autoupdate_translations'] ) && is_bool( $args['autoupdate_translations'] ) ) {
- if ( $args['autoupdate_translations'] ) {
- $this->autoupdate_translations_on();
- } else {
- $this->autoupdate_translations_off();
- }
- }
-
- return true;
- }
-
- function autoupdate_on() {
- $autoupdate_themes = Jetpack_Options::get_option( 'autoupdate_themes', array() );
- $autoupdate_themes = array_unique( array_merge( $autoupdate_themes, $this->themes ) );
- Jetpack_Options::update_option( 'autoupdate_themes', $autoupdate_themes );
- }
-
- function autoupdate_off() {
- $autoupdate_themes = Jetpack_Options::get_option( 'autoupdate_themes', array() );
- $autoupdate_themes = array_diff( $autoupdate_themes, $this->themes );
- Jetpack_Options::update_option( 'autoupdate_themes', $autoupdate_themes );
- }
-
- function autoupdate_translations_on() {
- $autoupdate_themes_translations = Jetpack_Options::get_option( 'autoupdate_themes_translations', array() );
- $autoupdate_themes_translations = array_unique( array_merge( $autoupdate_themes_translations, $this->themes ) );
- Jetpack_Options::update_option( 'autoupdate_themes_translations', $autoupdate_themes_translations );
- }
-
- function autoupdate_translations_off() {
- $autoupdate_themes_translations = Jetpack_Options::get_option( 'autoupdate_themes_translations', array() );
- $autoupdate_themes_translations = array_diff( $autoupdate_themes_translations, $this->themes );
- Jetpack_Options::update_option( 'autoupdate_themes_translations', $autoupdate_themes_translations );
- }
-
- function update() {
- include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
-
- // Clear the cache.
- wp_update_themes();
-
- foreach ( $this->themes as $theme ) {
- /**
- * Pre-upgrade action
- *
- * @since 3.9.3
- *
- * @param object $theme WP_Theme object
- * @param array $themes Array of theme objects
- */
- do_action('jetpack_pre_theme_upgrade', $theme, $this->themes);
- // Objects created inside the for loop to clean the messages for each theme
- $skin = new Automatic_Upgrader_Skin();
- $upgrader = new Theme_Upgrader( $skin );
- $upgrader->init();
- $result = $upgrader->upgrade( $theme );
- $this->log[ $theme ][] = $upgrader->skin->get_upgrade_messages();
- }
-
- if ( ! $this->bulk && ! $result ) {
- return new WP_Error( 'update_fail', __( 'There was an error updating your theme', 'jetpack' ), 400 );
- }
-
- return true;
- }
-
- function update_translations() {
- include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
-
- // Clear the cache.
- wp_update_themes();
-
- $available_themes_updates = get_site_transient( 'update_themes' );
-
- if ( ! isset( $available_themes_updates->translations ) || empty( $available_themes_updates->translations ) ) {
- return new WP_Error( 'nothing_to_translate' );
- }
-
- foreach( $available_themes_updates->translations as $translation ) {
- $theme = $translation['slug'] ;
- if ( ! in_array( $translation['slug'], $this->themes ) ) {
- $this->log[ $theme ][] = __( 'No update needed', 'jetpack' );
- continue;
- }
-
- /**
- * Pre-upgrade action
- *
- * @since 4.4.0
- *
- * @param object $theme WP_Theme object
- * @param array $themes Array of theme objects
- */
- do_action( 'jetpack_pre_theme_upgrade_translations', $theme, $this->themes );
- // Objects created inside the for loop to clean the messages for each theme
- $skin = new Automatic_Upgrader_Skin();
- $upgrader = new Language_Pack_Upgrader( $skin );
- $upgrader->init();
-
- $result = $upgrader->upgrade( (object) $translation );
- $this->log[ $theme ] = $upgrader->skin->get_upgrade_messages();
- }
-
- if ( ! $this->bulk && ! $result ) {
- return new WP_Error( 'update_fail', __( 'There was an error updating your theme', 'jetpack' ), 400 );
- }
-
- return true;
- }
-
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-new-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-new-endpoint.php
deleted file mode 100644
index 75768183..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-themes-new-endpoint.php
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-
-include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
-include_once ABSPATH . 'wp-admin/includes/file.php';
-
-class Jetpack_JSON_API_Themes_New_Endpoint extends Jetpack_JSON_API_Themes_Endpoint {
-
- // POST /sites/%s/themes/%s/install
- protected $needed_capabilities = 'install_themes';
- protected $action = 'install';
- protected $download_links = array();
-
- protected function validate_call( $_blog_id, $capability, $check_manage_active = true ) {
- $validate = parent::validate_call( $_blog_id, $capability, $check_manage_active );
- if ( is_wp_error( $validate ) ) {
- // Lets delete the attachment... if the user doesn't have the right permissions to do things.
- $args = $this->input();
- if ( isset( $args['zip'][0]['id'] ) ) {
- wp_delete_attachment( $args['zip'][0]['id'], true );
- }
- }
-
- return $validate;
- }
-
- protected function validate_input( $theme ) {
- $this->bulk = false;
- $this->themes = array();
- }
-
- function install() {
- $args = $this->input();
-
- if ( isset( $args['zip'][0]['id'] ) ) {
- $attachment_id = $args['zip'][0]['id'];
- $local_file = get_attached_file( $attachment_id );
- if ( ! $local_file ) {
- return new WP_Error( 'local-file-does-not-exist' );
- }
- jetpack_require_lib( 'class.jetpack-automatic-install-skin' );
- $skin = new Jetpack_Automatic_Install_Skin();
- $upgrader = new Theme_Upgrader( $skin );
-
- $pre_install_list = wp_get_themes();
- $result = $upgrader->install( $local_file );
-
- // clean up.
- wp_delete_attachment( $attachment_id, true );
-
- if ( is_wp_error( $result ) ) {
- return $result;
- }
-
- $after_install_list = wp_get_themes();
- $plugin = array_values( array_diff( array_keys( $after_install_list ), array_keys( $pre_install_list ) ) );
-
- if ( ! $result ) {
- $error_code = $upgrader->skin->get_main_error_code();
- $message = $upgrader->skin->get_main_error_message();
- if ( empty( $message ) ) {
- $message = __( 'An unknown error occurred during installation', 'jetpack' );
- }
-
- if ( 'download_failed' === $error_code ) {
- $error_code = 'no_package';
- }
-
- return new WP_Error( $error_code, $message, 400 );
- }
-
- if ( empty( $plugin ) ) {
- return new WP_Error( 'theme_already_installed' );
- }
-
- $this->themes = $plugin;
- $this->log[ $plugin[0] ] = $upgrader->skin->get_upgrade_messages();
-
- return true;
- }
-
- return new WP_Error( 'no_theme_installed' );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-translations-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-translations-endpoint.php
deleted file mode 100644
index 65b6e725..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-translations-endpoint.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-// Translations
-class Jetpack_JSON_API_Translations_Endpoint extends Jetpack_JSON_API_Endpoint {
- // GET /sites/%s/translations
- // POST /sites/%s/translations
- // POST /sites/%s/translations/update
- protected $needed_capabilities = array( 'update_core', 'update_plugins', 'update_themes' );
- protected $log;
- protected $success;
-
- public function result() {
- return array(
- 'translations' => wp_get_translation_updates(),
- 'autoupdate' => Jetpack_Options::get_option( 'autoupdate_translations', false ),
- 'log' => $this->log,
- 'success' => $this->success,
- );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-translations-modify-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-translations-modify-endpoint.php
deleted file mode 100644
index fd5f6a56..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-translations-modify-endpoint.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_Translations_Modify_Endpoint extends Jetpack_JSON_API_Translations_Endpoint {
- // POST /sites/%s/translations
- // POST /sites/%s/translations/update
- protected $action = 'default_action';
- protected $new_version;
- protected $log;
-
- public function default_action() {
- $args = $this->input();
-
- if ( isset( $args['autoupdate'] ) && is_bool( $args['autoupdate'] ) ) {
- Jetpack_Options::update_option( 'autoupdate_translations', $args['autoupdate'] );
- }
-
- return true;
- }
-
- protected function update() {
- include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
-
- $upgrader = new Language_Pack_Upgrader( new Automatic_Upgrader_Skin() );
- $result = $upgrader->bulk_upgrade();
-
- $this->log = $upgrader->skin->get_upgrade_messages();
- $this->success = ( ! is_wp_error( $result ) ) ? (bool) $result : false;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-updates-status-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-updates-status-endpoint.php
deleted file mode 100644
index 48f9ae9d..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-updates-status-endpoint.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_Updates_Status extends Jetpack_JSON_API_Endpoint {
- // GET /sites/%s/updates
- protected $needed_capabilities = 'manage_options';
-
- protected function result() {
-
- wp_update_themes();
- wp_update_plugins();
-
- $update_data = wp_get_update_data();
- if ( ! isset( $update_data['counts'] ) ) {
- return new WP_Error( 'get_update_data_error', __( 'There was an error while getting the update data for this site.', 'jetpack' ), 500 );
- }
-
- $result = $update_data['counts'];
-
- include( ABSPATH . WPINC . '/version.php' ); // $wp_version;
- $result['wp_version'] = isset( $wp_version ) ? $wp_version : null;
-
- if ( ! empty( $result['wordpress'] ) ) {
- $cur = get_preferred_from_update_core();
- if ( isset( $cur->response ) && $cur->response === 'upgrade' ) {
- $result['wp_update_version'] = $cur->current;
- }
- }
-
- $result['jp_version'] = JETPACK__VERSION;
-
- return $result;
-
- }
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-user-connect-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-user-connect-endpoint.php
deleted file mode 100644
index b30597de..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-user-connect-endpoint.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_User_Connect_Endpoint extends Jetpack_JSON_API_Endpoint {
-
- protected $needed_capabilities = 'create_users';
-
- private $user_id;
- private $user_token;
-
- function result() {
- Jetpack::update_user_token( $this->user_id, sprintf( '%s.%d', $this->user_token, $this->user_id ), false );
- return array( 'success' => Jetpack::is_user_connected( $this->user_id ) );
- }
-
- function validate_input( $user_id ) {
- $input = $this->input();
- if ( ! isset( $user_id ) ) {
- return new WP_Error( 'input_error', __( 'user_id is required', 'jetpack' ) );
- }
- $this->user_id = $user_id;
- if ( Jetpack::is_user_connected( $this->user_id ) ) {
- return new WP_Error( 'user_already_connected', __( 'The user is already connected', 'jetpack' ) );
- }
- if ( ! isset( $input['user_token'] ) ) {
- return new WP_Error( 'input_error', __( 'user_token is required', 'jetpack' ) );
- }
- $this->user_token = sanitize_text_field( $input[ 'user_token'] );
- return parent::validate_input( $user_id );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-user-create-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-user-create-endpoint.php
deleted file mode 100644
index bd71249b..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.jetpack-json-api-user-create-endpoint.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-
-class Jetpack_JSON_API_User_Create_Endpoint extends Jetpack_JSON_API_Endpoint {
-
- protected $needed_capabilities = 'create_users';
-
- private $user_data;
-
- function result() {
- return $this->create_or_get_user();
- }
-
- function validate_input( $object ) {
- $this->user_data = $this->input();
-
- if ( empty( $this->user_data ) ) {
- return new WP_Error( 'input_error', __( 'user_data is required', 'jetpack' ) );
- }
- if ( ! isset( $this->user_data[ 'email' ] ) ) {
- return new WP_Error( 'input_error', __( 'user email is required', 'jetpack' ) );
- }
- if ( ! isset( $this->user_data[ 'login' ] ) ) {
- return new WP_Error( 'input_error', __( 'user login is required', 'jetpack' ) );
- }
- return parent::validate_input( $object );
- }
-
- function create_or_get_user() {
- require_once JETPACK__PLUGIN_DIR . 'modules/sso/class.jetpack-sso-helpers.php';
- // Check for an existing user
- $user = get_user_by( 'email', $this->user_data['email'] );
- $roles = (array) $this->user_data['roles'];
- $role = array_pop( $roles );
-
- $query_args = $this->query_args();
- if ( isset( $query_args['invite_accepted'] ) && $query_args['invite_accepted'] ) {
- Jetpack_Constants::set_constant( 'JETPACK_INVITE_ACCEPTED', true );
- }
-
- if ( ! $user ) {
- // We modify the input here to mimick the same call structure of the update user endpoint.
- $this->user_data = (object) $this->user_data;
- $this->user_data->role = $role;
- $this->user_data->url = isset( $this->user_data->URL ) ? $this->user_data->URL : '';
- $this->user_data->display_name = $this->user_data->name;
- $this->user_data->description = '';
- $user = Jetpack_SSO_Helpers::generate_user( $this->user_data );
- }
-
- if ( is_multisite() ) {
- add_user_to_blog( get_current_blog_id(), $user->ID, $role );
- }
-
- if ( ! $user ) {
-
- return false;
- }
-
- return $this->get_user( $user->ID );
- }
-
- public function get_user( $user_id ) {
- $the_user = $this->get_author( $user_id, true );
- if ( $the_user && ! is_wp_error( $the_user ) ) {
- $userdata = get_userdata( $user_id );
- $the_user->roles = ! is_wp_error( $userdata ) ? $userdata->roles : array();
- }
-
- return $the_user;
- }
-
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.wpcom-json-api-get-option-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.wpcom-json-api-get-option-endpoint.php
deleted file mode 100644
index 3a76256f..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.wpcom-json-api-get-option-endpoint.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-class WPCOM_JSON_API_Get_Option_Endpoint extends Jetpack_JSON_API_Endpoint {
-
- protected $needed_capabilities = 'manage_options';
-
- public $option_name;
- public $site_option;
-
- function result() {
- if ( $this->site_option ) {
- return array( 'option_value' => get_site_option( $this->option_name ) );
- }
- return array( 'option_value' => get_option( $this->option_name ) );
- }
-
- function validate_input( $object ) {
- $query_args = $this->query_args();
- $this->option_name = isset( $query_args['option_name'] ) ? $query_args['option_name'] : false;
- if ( ! $this->option_name ) {
- return new WP_Error( 'option_name_not_set', __( 'You must specify an option_name', 'jetpack' ) );
- }
- $this->site_option = isset( $query_args['site_option'] ) ? $query_args['site_option'] : false;
-
- require_once JETPACK__PLUGIN_DIR . '/sync/class.jetpack-sync-defaults.php';
- /**
- * Filter the list of options that are manageable via the JSON API.
- *
- * @module json-api
- *
- * @since 3.8.2
- *
- * @param array The default list of site options.
- * @param bool Is the option a site option.
- */
- if ( ! in_array( $this->option_name, apply_filters( 'jetpack_options_whitelist', Jetpack_Sync_Defaults::$default_options_whitelist, $this->site_option ) ) ) {
- return new WP_Error( 'option_name_not_in_whitelist', __( 'You must specify a whitelisted option_name', 'jetpack' ) );
- }
- return true;
- }
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/class.wpcom-json-api-update-option-endpoint.php b/plugins/jetpack/json-endpoints/jetpack/class.wpcom-json-api-update-option-endpoint.php
deleted file mode 100644
index 20f8895c..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/class.wpcom-json-api-update-option-endpoint.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-class WPCOM_JSON_API_Update_Option_Endpoint extends WPCOM_JSON_API_Get_Option_Endpoint {
- public $option_value;
-
- function result() {
- if ( $this->site_option ) {
- update_site_option( $this->option_name, $this->option_value );
- } else {
- update_option( $this->option_name, $this->option_value );
- }
- return parent::result();
- }
-
- function validate_input( $object ) {
- $input = $this->input();
- $query_args = $this->query_args();
- if ( ! isset( $input['option_value'] ) || is_array( $input['option_value'] ) ) {
- return new WP_Error( 'option_value_not_set', __( 'You must specify an option_value', 'jetpack' ) );
- }
- if ( $query_args['is_array'] ) {
- // When converted back from JSON, the value is an object.
- // Cast it to an array for options that expect arrays.
- $this->option_value = (array) $input['option_value'];
- } else {
- $this->option_value = $input['option_value'];
- }
-
- return parent::validate_input( $object );
- }
-}
diff --git a/plugins/jetpack/json-endpoints/jetpack/json-api-jetpack-endpoints.php b/plugins/jetpack/json-endpoints/jetpack/json-api-jetpack-endpoints.php
deleted file mode 100644
index 9c3f680a..00000000
--- a/plugins/jetpack/json-endpoints/jetpack/json-api-jetpack-endpoints.php
+++ /dev/null
@@ -1,1232 +0,0 @@
-<?php
-
-$json_jetpack_endpoints_dir = dirname( __FILE__ ) . '/';
-
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-endpoint.php' );
-
-// THEMES
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-themes-endpoint.php' );
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-themes-active-endpoint.php' );
-
-new Jetpack_JSON_API_Themes_Active_Endpoint( array(
- 'description' => 'Get the active theme of your blog',
- 'stat' => 'themes:mine',
- 'method' => 'GET',
- 'path' => '/sites/%s/themes/mine',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'response_format' => Jetpack_JSON_API_Themes_Endpoint::$_response_format,
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/themes/mine'
-) );
-
-new Jetpack_JSON_API_Themes_Active_Endpoint( array(
- 'description' => 'Change the active theme of your blog',
- 'method' => 'POST',
- 'path' => '/sites/%s/themes/mine',
- 'stat' => 'themes:mine',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'query_parameters' => array(
- 'context' => false
- ),
- 'request_format' => array(
- 'theme' => '(string) The ID of the theme that should be activated'
- ),
- 'response_format' => Jetpack_JSON_API_Themes_Endpoint::$_response_format,
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'theme' => 'twentytwelve'
- )
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/themes/mine'
-) );
-
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-themes-list-endpoint.php' );
-
-new Jetpack_JSON_API_Themes_List_Endpoint( array(
- 'description' => 'Get WordPress.com Themes allowed on your blog',
- 'group' => '__do_not_document',
- 'stat' => 'themes',
- 'method' => 'GET',
- 'path' => '/sites/%s/themes',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'response_format' => array(
- 'found' => '(int) The total number of themes found.',
- 'themes' => '(array) An array of theme objects.',
- ),
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/themes'
-) );
-
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-themes-get-endpoint.php' );
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-themes-new-endpoint.php' );
-
-// POST /sites/%s/themes/%new
-new Jetpack_JSON_API_Themes_New_Endpoint( array(
- 'description' => 'Install a theme to your jetpack blog',
- 'group' => '__do_not_document',
- 'stat' => 'themes:new',
- 'method' => 'POST',
- 'path' => '/sites/%s/themes/new',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- ),
- 'request_format' => array(
- 'zip' => '(zip) Theme package zip file. multipart/form-data encoded. ',
- ),
- 'response_format' => Jetpack_JSON_API_Themes_Endpoint::$_response_format,
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/themes/new'
-) );
-
-
-
-new Jetpack_JSON_API_Themes_Get_Endpoint( array(
- 'description' => 'Get a single theme on a jetpack blog',
- 'group' => '__do_not_document',
- 'stat' => 'themes:get:1',
- 'method' => 'GET',
- 'path' => '/sites/%s/themes/%s',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- '$theme' => '(string) The theme slug',
- ),
- 'response_format' => Jetpack_JSON_API_Themes_Endpoint::$_response_format,
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/themes/twentyfourteen'
-) );
-
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-themes-modify-endpoint.php' );
-new Jetpack_JSON_API_Themes_Modify_Endpoint( array(
- 'description' => 'Modify a single theme on a jetpack blog',
- 'group' => '__do_not_document',
- 'stat' => 'themes:modify:1',
- 'method' => 'POST',
- 'path' => '/sites/%s/themes/%s',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- '$theme' => '(string) The theme slug',
- ),
- 'request_format' => array(
- 'action' => '(string) Only possible value is \'update\'. More to follow.',
- 'autoupdate' => '(bool) Whether or not to automatically update the theme.',
- ),
- 'response_format' => Jetpack_JSON_API_Themes_Endpoint::$_response_format,
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'action' => 'update',
- )
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/themes/twentyfourteen'
-) );
-
-new Jetpack_JSON_API_Themes_Modify_Endpoint( array(
- 'description' => 'Modify a list of themes on a jetpack blog',
- 'group' => '__do_not_document',
- 'stat' => 'themes:modify',
- 'method' => 'POST',
- 'path' => '/sites/%s/themes',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- ),
- 'request_format' => array(
- 'action' => '(string) Only possible value is \'update\'. More to follow.',
- 'autoupdate' => '(bool) Whether or not to automatically update the theme.',
- 'themes' => '(array) A list of theme slugs',
- ),
- 'response_format' => array(
- 'themes' => '(array:theme) A list of theme objects',
- ),
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'action' => 'autoupdate_on',
- 'themes' => array(
- 'twentytwelve',
- 'twentyfourteen',
- ),
- )
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/themes'
-) );
-
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-themes-install-endpoint.php' );
-// POST /sites/%s/themes/%s/install
-new Jetpack_JSON_API_Themes_Install_Endpoint( array(
- 'description' => 'Install a theme to your jetpack blog',
- 'group' => '__do_not_document',
- 'stat' => 'themes:1:install',
- 'method' => 'POST',
- 'path' => '/sites/%s/themes/%s/install',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- '$theme' => '(int|string) The theme slug to install',
- ),
- 'response_format' => Jetpack_JSON_API_Themes_Endpoint::$_response_format,
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/themes/twentyfourteen/install'
-) );
-
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-themes-delete-endpoint.php' );
-// POST /sites/%s/themes/%s/delete
-new Jetpack_JSON_API_Themes_Delete_Endpoint( array(
- 'description' => 'Delete/Uninstall a theme from your jetpack blog',
- 'group' => '__do_not_document',
- 'stat' => 'themes:1:delete',
- 'method' => 'POST',
- 'path' => '/sites/%s/themes/%s/delete',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- '$theme' => '(string) The slug of the theme to delete',
- ),
- 'response_format' => Jetpack_JSON_API_Themes_Endpoint::$_response_format,
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/themes/twentyfourteen/delete'
-) );
-
-
-// PLUGINS
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-plugins-endpoint.php' );
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-plugins-get-endpoint.php' );
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-plugins-list-endpoint.php' );
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-plugins-new-endpoint.php' );
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-plugins-install-endpoint.php' );
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-plugins-delete-endpoint.php' );
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-plugins-modify-endpoint.php' );
-
-// PLUGINS V1.2
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-plugins-modify-v1-2-endpoint.php' );
-
-// Jetpack Modules
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-modules-endpoint.php' );
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-modules-get-endpoint.php' );
-
-new Jetpack_JSON_API_Modules_Get_Endpoint( array(
- 'description' => 'Get the info about a Jetpack Module on your Jetpack Site',
- 'method' => 'GET',
- 'path' => '/sites/%s/jetpack/modules/%s/',
- 'stat' => 'jetpack:modules:1',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- '$module' => '(string) The module name',
- ),
- 'response_format' => Jetpack_JSON_API_Modules_Endpoint::$_response_format,
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/jetpack/modules/stats'
-) );
-
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-modules-modify-endpoint.php' );
-
-new Jetpack_JSON_API_Modules_Modify_Endpoint( array(
- 'description' => 'Modify the status of a Jetpack Module on your Jetpack Site',
- 'method' => 'POST',
- 'path' => '/sites/%s/jetpack/modules/%s/',
- 'stat' => 'jetpack:modules:1',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- '$module' => '(string) The module name',
- ),
- 'request_format' => array(
- 'active' => '(bool) The module activation status',
- ),
- 'response_format' => Jetpack_JSON_API_Modules_Endpoint::$_response_format,
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'active' => true,
- )
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/jetpack/modules/stats'
-) );
-
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-modules-list-endpoint.php' );
-
-new Jetpack_JSON_API_Modules_List_Endpoint( array(
- 'description' => 'Get the list of available Jetpack modules on your site',
- 'method' => 'GET',
- 'path' => '/sites/%s/jetpack/modules',
- 'stat' => 'jetpack:modules',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'response_format' => array(
- 'found' => '(int) The total number of modules found.',
- 'modules' => '(array) An array of module objects.',
- ),
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/jetpack/modules'
-) );
-
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-updates-status-endpoint.php' );
-
-new Jetpack_JSON_API_Updates_Status( array(
- 'description' => 'Get counts for available updates',
- 'method' => 'GET',
- 'path' => '/sites/%s/updates',
- 'stat' => 'updates',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'response_format' => array(
- 'plugins' => '(int) The total number of plugins updates.',
- 'themes' => '(int) The total number of themes updates.',
- 'wordpress' => '(int) The total number of core updates.',
- 'translations' => '(int) The total number of translation updates.',
- 'total' => '(int) The total number of updates.',
- 'wp_version' => '(safehtml) The wp_version string.',
- 'wp_update_version' => '(safehtml) The wp_version to update string.',
- 'jp_version' => '(safehtml) The site Jetpack version.',
- ),
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/updates'
-) );
-
-
-// Jetpack Extras
-
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-check-capabilities-endpoint.php' );
-
-new Jetpack_JSON_API_Check_Capabilities_Endpoint( array(
- 'description' => 'Check if the current user has a certain capability over a Jetpack site',
- 'method' => 'GET',
- 'path' => '/sites/%s/me/capability',
- 'stat' => 'me:capabulity',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'response_format' => '(bool) True if the user has the queried capability.',
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'capability' => 'A single capability or an array of capabilities'
- )
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/me/capability'
-) );
-
-
-// CORE
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-core-endpoint.php' );
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-core-modify-endpoint.php' );
-
-new Jetpack_JSON_API_Core_Endpoint( array(
- 'description' => 'Gets info about a Jetpack blog\'s core installation',
- 'method' => 'GET',
- 'path' => '/sites/%s/core',
- 'stat' => 'core',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'response_format' => array(
- 'version' => '(string) The current version',
- 'autoupdate' => '(bool) Whether or not we automatically update core'
- ),
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/core'
-) );
-
-new Jetpack_JSON_API_Core_Modify_Endpoint( array(
- 'description' => 'Update WordPress installation on a Jetpack blog',
- 'method' => 'POST',
- 'path' => '/sites/%s/core/update',
- 'stat' => 'core:update',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'request_format' => array(
- 'version' => '(string) The core version to update',
- ),
- 'response_format' => array(
- 'version' => '(string) The core version after the upgrade has run.',
- 'log' => '(array:safehtml) An array of log strings.',
- ),
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/core/update'
-) );
-
-new Jetpack_JSON_API_Core_Endpoint( array(
- 'description' => 'Toggle automatic core updates for a Jetpack blog',
- 'method' => 'POST',
- 'path' => '/sites/%s/core',
- 'stat' => 'core',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'request_format' => array(
- 'autoupdate' => '(bool) Whether or not we automatically update core',
- ),
- 'response_format' => array(
- 'version' => '(string) The current version',
- 'autoupdate' => '(bool) Whether or not we automatically update core'
- ),
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'autoupdate' => true,
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/core'
-) );
-
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-sync-endpoint.php' );
-
-// POST /sites/%s/sync
-new Jetpack_JSON_API_Sync_Endpoint( array(
- 'description' => 'Force sync of all options and constants',
- 'method' => 'POST',
- 'path' => '/sites/%s/sync',
- 'stat' => 'sync',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'request_format' => array(
- 'modules' => '(string) Comma-delimited set of sync modules to use (default: all of them)',
- 'posts' => '(string) Comma-delimited list of post IDs to sync',
- 'comments' => '(string) Comma-delimited list of comment IDs to sync',
- 'users' => '(string) Comma-delimited list of user IDs to sync',
- ),
- 'response_format' => array(
- 'scheduled' => '(bool) Whether or not the synchronisation was started'
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/example.wordpress.org/sync'
-) );
-
-// GET /sites/%s/sync/status
-new Jetpack_JSON_API_Sync_Status_Endpoint( array(
- 'description' => 'Status of the current full sync or the previous full sync',
- 'method' => 'GET',
- 'path' => '/sites/%s/sync/status',
- 'stat' => 'sync-status',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'response_format' => array(
- 'started' => '(int|null) The unix timestamp when the last sync started',
- 'queue_finished' => '(int|null) The unix timestamp when the enqueuing was done for the last sync',
- 'send_started' => '(int|null) The unix timestamp when the last sent process started',
- 'finished' => '(int|null) The unix timestamp when the last sync finished',
- 'total' => '(array) Count of actions that could be sent',
- 'queue' => '(array) Count of actions that have been added to the queue',
- 'sent' => '(array) Count of actions that have been sent',
- 'config' => '(array) Configuration of the last full sync',
- 'queue_size' => '(int) Number of items in the sync queue',
- 'queue_lag' => '(float) Time delay of the oldest item in the sync queue',
- 'queue_next_sync' => '(float) Time in seconds before trying to sync again',
- 'full_queue_size' => '(int) Number of items in the full sync queue',
- 'full_queue_lag' => '(float) Time delay of the oldest item in the full sync queue',
- 'full_queue_next_sync' => '(float) Time in seconds before trying to sync the full sync queue again',
- 'cron_size' => '(int) Size of the current cron array',
- 'next_cron' => '(int) The number of seconds till the next item in cron.',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/example.wordpress.org/sync/status'
-) );
-
-
-// GET /sites/%s/data-checksums
-new Jetpack_JSON_API_Sync_Check_Endpoint( array(
- 'description' => 'Check that cacheable data on the site is in sync with wordpress.com',
- 'group' => '__do_not_document',
- 'method' => 'GET',
- 'path' => '/sites/%s/data-checksums',
- 'stat' => 'data-checksums',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'response_format' => array(
- 'posts' => '(string) Posts checksum',
- 'comments' => '(string) Comments checksum',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/example.wordpress.org/data-checksums'
-) );
-
-// GET /sites/%s/data-histogram
-new Jetpack_JSON_API_Sync_Histogram_Endpoint( array(
- 'description' => 'Get a histogram of checksums for certain synced data',
- 'group' => '__do_not_document',
- 'method' => 'GET',
- 'path' => '/sites/%s/data-histogram',
- 'stat' => 'data-histogram',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'query_parameters' => array(
- 'object_type' => '(string=posts) The type of object to checksum - posts, comments or options',
- 'buckets' => '(int=10) The number of buckets for the checksums',
- 'start_id' => '(int=0) Starting ID for the range',
- 'end_id' => '(int=null) Ending ID for the range',
- 'columns' => '(string) Columns to checksum',
- 'strip_non_ascii', '(bool=true) Strip non-ascii characters from all columns',
- ),
- 'response_format' => array(
- 'histogram' => '(array) Associative array of histograms by ID range, e.g. "500-999" => "abcd1234"'
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/example.wordpress.org/data-histogram'
-) );
-
-$sync_settings_response = array(
- 'dequeue_max_bytes' => '(int|bool=false) Maximum bytes to read from queue in a single request',
- 'sync_wait_time' => '(int|bool=false) Wait time between requests in seconds if sync threshold exceeded',
- 'sync_wait_threshold' => '(int|bool=false) If a request to WPCOM exceeds this duration, wait sync_wait_time seconds before sending again',
- 'upload_max_bytes' => '(int|bool=false) Maximum bytes to send in a single request',
- 'upload_max_rows' => '(int|bool=false) Maximum rows to send in a single request',
- 'max_queue_size' => '(int|bool=false) Maximum queue size that that the queue is allowed to expand to in DB rows to prevent the DB from filling up. Needs to also meet the max_queue_lag limit.',
- 'max_queue_lag' => '(int|bool=false) Maximum queue lag in seconds used to prevent the DB from filling up. Needs to also meet the max_queue_size limit.',
- 'queue_max_writes_sec' => '(int|bool=false) Maximum writes per second to allow to the queue during full sync.',
- 'post_types_blacklist' => '(array|string|bool=false) List of post types to exclude from sync. Send "empty" to unset.',
- 'post_meta_whitelist' => '(array|string|bool=false) List of post meta to be included in sync. Send "empty" to unset.',
- 'comment_meta_whitelist' => '(array|string|bool=false) List of comment meta to be included in sync. Send "empty" to unset.',
- 'disable' => '(int|bool=false) Set to 1 or true to disable sync entirely.',
- 'render_filtered_content' => '(int|bool=true) Set to 1 or true to render filtered content.',
- 'max_enqueue_full_sync' => '(int|bool=false) Maximum number of rows to enqueue during each full sync process',
- 'max_queue_size_full_sync' => '(int|bool=false) Maximum queue size that full sync is allowed to use',
- 'sync_via_cron' => '(int|bool=false) Set to 1 or true to avoid using cron for sync.',
- 'cron_sync_time_limit' => '(int|bool=false) Limit cron jobs to number of seconds',
- 'enqueue_wait_time' => '(int|bool=false) Wait time in seconds between attempting to continue a full sync, via requests',
-);
-
-// GET /sites/%s/sync/settings
-new Jetpack_JSON_API_Sync_Get_Settings_Endpoint( array(
- 'description' => 'Update sync settings',
- 'method' => 'GET',
- 'group' => '__do_not_document',
- 'path' => '/sites/%s/sync/settings',
- 'stat' => 'write-sync-settings',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'response_format' => $sync_settings_response,
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/example.wordpress.org/sync/settings'
-) );
-
-// POST /sites/%s/sync/settings
-new Jetpack_JSON_API_Sync_Modify_Settings_Endpoint( array(
- 'description' => 'Update sync settings',
- 'method' => 'POST',
- 'group' => '__do_not_document',
- 'path' => '/sites/%s/sync/settings',
- 'stat' => 'write-sync-settings',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'request_format' => $sync_settings_response,
- 'response_format' => $sync_settings_response,
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/example.wordpress.org/sync/settings'
-) );
-
-// GET /sites/%s/sync/object
-new Jetpack_JSON_API_Sync_Object( array(
- 'description' => 'Get an object by ID from one of the sync modules, in the format it would be synced in',
- 'group' => '__do_not_document',
- 'method' => 'GET',
- 'path' => '/sites/%s/sync/object',
- 'stat' => 'sync-object',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'query_parameters' => array(
- 'module_name' => '(string) The sync module ID, e.g. "posts"',
- 'object_type' => '(string) An identified for the object type, e.g. "post"',
- 'object_ids' => '(array) The IDs of the objects',
- ),
- 'response_format' => array(
- 'objects' => '(string) The encoded objects',
- 'codec' => '(string) The codec used to encode the objects, deflate-json-array or simple'
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/example.wordpress.org/sync/object?module_name=posts&object_type=post&object_ids[]=1&object_ids[]=2&object_ids[]=3'
-) );
-
-// POST /sites/%s/sync/now
-new Jetpack_JSON_API_Sync_Now_Endpoint( array(
- 'description' => 'Force immediate sync of top items on a queue',
- 'method' => 'POST',
- 'path' => '/sites/%s/sync/now',
- 'stat' => 'sync-now',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'request_format' => array(
- 'queue' => '(string) sync or full_sync',
- ),
- 'response_format' => array(
- 'response' => '(array) The response from the server'
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/example.wordpress.org/sync/now?queue=full_sync'
-) );
-
-
-// POST /sites/%s/sync/unlock
-new Jetpack_JSON_API_Sync_Unlock_Endpoint( array(
- 'description' => 'Unlock the queue in case it gets locked by a process.',
- 'method' => 'POST',
- 'path' => '/sites/%s/sync/unlock',
- 'group' => '__do_not_document',
- 'stat' => 'sync-unlock',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'request_format' => array(
- 'queue' => '(string) sync or full_sync',
- ),
- 'response_format' => array(
- 'success' => '(bool) Unlocking the queue successful?'
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/example.wordpress.org/sync/unlock'
-) );
-
-// POST /sites/%s/sync/checkout
-new Jetpack_JSON_API_Sync_Checkout_Endpoint( array(
- 'description' => 'Locks the queue and returns items and the buffer ID.',
- 'method' => 'POST',
- 'path' => '/sites/%s/sync/checkout',
- 'group' => '__do_not_document',
- 'stat' => 'sync-checkout',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'request_format' => array(
- 'queue' => '(string) sync or full_sync',
- 'number_of_items' => '(int=10) Maximum number of items from the queue to be returned',
- 'encode' => '(bool=true) Use the default encode method',
- 'force' => '(bool=false) Force unlock the queue',
- ),
- 'response_format' => array(
- 'buffer_id' => '(string) Buffer ID that we are using',
- 'items' => '(array) Items from the queue that are ready to be processed by the sync server',
- 'skipped_items' => '(array) Skipped item ids',
- 'codec' => '(string) The name of the codec used to encode the data',
- 'sent_timestamp' => '(int) Current timestamp of the server',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/example.wordpress.org/sync/checkout'
-) );
-
-// POST /sites/%s/sync/close
-new Jetpack_JSON_API_Sync_Close_Endpoint( array(
- 'description' => 'Closes the buffer and delete the processed items from the queue.',
- 'method' => 'POST',
- 'path' => '/sites/%s/sync/close',
- 'group' => '__do_not_document',
- 'stat' => 'sync-close',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'request_format' => array(
- 'item_ids' => '(array) Item IDs to delete from the queue.',
- 'queue' => '(string) sync or full_sync',
- 'buffer_id' => '(string) buffer ID that was opened during the checkout step.',
- ),
- 'response_format' => array(
- 'success' => '(bool) Closed the buffer successfully?'
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/example.wordpress.org/sync/close'
-) );
-
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-log-endpoint.php' );
-
-new Jetpack_JSON_API_Jetpack_Log_Endpoint( array(
- 'description' => 'Get the Jetpack log',
- 'method' => 'GET',
- 'path' => '/sites/%s/jetpack-log',
- 'stat' => 'log',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'request_format' => array(
- 'event' => '(string) The event to filter by, by default all entries are returned',
- 'num' => '(int) The number of entries to get, by default all entries are returned'
- ),
- 'response_format' => array(
- 'log' => '(array) An array of jetpack log entries'
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/example.wordpress.org/jetpack-log'
-) );
-
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-maybe-auto-update-endpoint.php' );
-
-new Jetpack_JSON_API_Maybe_Auto_Update_Endpoint( array(
- 'description' => 'Maybe Auto Update Core, Plugins, Themes and Languages',
- 'method' => 'POST',
- 'path' => '/sites/%s/maybe-auto-update',
- 'stat' => 'maybe-auto-update',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'response_format' => array(
- 'log' => '(array) Results of running the update job'
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/example.wordpress.org/maybe-auto-update'
-
-) );
-
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-translations-endpoint.php' );
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-translations-modify-endpoint.php' );
-
-new Jetpack_JSON_API_Translations_Endpoint( array(
- 'description' => 'Gets info about a Jetpack blog\'s core installation',
- 'method' => 'GET',
- 'path' => '/sites/%s/translations',
- 'stat' => 'translations',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'response_format' => array(
- 'translations' => '(array) A list of translations that are available',
- 'autoupdate' => '(bool) Whether or not we automatically update translations',
- 'log' => '(array:safehtml) An array of log strings.',
- ),
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/translations'
-) );
-
-new Jetpack_JSON_API_Translations_Modify_Endpoint( array(
- 'description' => 'Toggle automatic core updates for a Jetpack blog',
- 'method' => 'POST',
- 'path' => '/sites/%s/translations',
- 'stat' => 'translations',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'request_format' => array(
- 'autoupdate' => '(bool) Whether or not we automatically update translations',
- ),
- 'response_format' => array(
- 'translations' => '(array) A list of translations that are available',
- 'autoupdate' => '(bool) Whether or not we automatically update translations',
- ),
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'autoupdate' => true,
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/translations'
-) );
-
-new Jetpack_JSON_API_Translations_Modify_Endpoint( array(
- 'description' => 'Update All Translations installation on a Jetpack blog',
- 'method' => 'POST',
- 'path' => '/sites/%s/translations/update',
- 'stat' => 'translations:update',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'response_format' => array(
- 'log' => '(array:safehtml) An array of log strings.',
- 'success' => '(bool) Was the operation successful'
- ),
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/translations/update'
-) );
-
-// Options
-require_once( $json_jetpack_endpoints_dir . 'class.wpcom-json-api-get-option-endpoint.php' );
-
-new WPCOM_JSON_API_Get_Option_Endpoint( array (
- 'method' => 'GET',
- 'description' => 'Fetches an option.',
- 'group' => '__do_not_document',
- 'stat' => 'option',
- 'path' => '/sites/%s/option',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'query_parameters' => array(
- 'option_name' => '(string) The name of the option to fetch.',
- 'site_option' => '(bool=false) True if the option is a site option.',
- ),
- 'response_format' => array(
- 'option_value' => '(string|object) The value of the option.',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/option?option_name=blogname',
- 'example_request_data' => array(
- 'headers' => array( 'authorization' => 'Bearer YOUR_API_TOKEN' ),
- ),
-) );
-
-require_once( $json_jetpack_endpoints_dir . 'class.wpcom-json-api-update-option-endpoint.php' );
-
-new WPCOM_JSON_API_Update_Option_Endpoint( array (
- 'method' => 'POST',
- 'description' => 'Updates an option.',
- 'group' => '__do_not_document',
- 'stat' => 'option:update',
- 'path' => '/sites/%s/option',
- 'path_labels' => array(
- '$site' => '(int|string) Site ID or domain',
- ),
- 'query_parameters' => array(
- 'option_name' => '(string) The name of the option to fetch.',
- 'site_option' => '(bool=false) True if the option is a site option.',
- 'is_array' => '(bool=false) True if the value should be converted to an array before saving.',
- ),
- 'request_format' => array(
- 'option_value' => '(string|object) The new value of the option.',
- ),
- 'response_format' => array(
- 'option_value' => '(string|object) The value of the updated option.',
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/82974409/option',
- 'example_request_data' => array(
- 'headers' => array( 'authorization' => 'Bearer YOUR_API_TOKEN' ),
- 'body' => array(
- 'option_value' => 'My new blog name'
- ),
- ),
-) );
-
-
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-cron-endpoint.php' );
-
-// GET /sites/%s/cron
-new Jetpack_JSON_API_Cron_Endpoint( array(
- 'description' => 'Fetches the cron array',
- 'group' => '__do_not_document',
- 'method' => 'GET',
- 'path' => '/sites/%s/cron',
- 'stat' => 'cron-get',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'response_format' => array(
- 'cron_array' => '(array) The cron array',
- 'current_timestamp' => '(int) Current server timestamp'
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/example.wordpress.org/cron',
- 'example_request_data' => array(
- 'headers' => array( 'authorization' => 'Bearer YOUR_API_TOKEN' ),
- ),
-) );
-
-// POST /sites/%s/cron
-new Jetpack_JSON_API_Cron_Post_Endpoint( array(
- 'description' => 'Process items in the cron',
- 'group' => '__do_not_document',
- 'method' => 'POST',
- 'path' => '/sites/%s/cron',
- 'stat' => 'cron-run',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'request_format' => array(
- 'hooks' => '(array) List of hooks to run if they have been scheduled (optional)',
- ),
- 'response_format' => array(
- 'success' => '(array) Of processed hooks with their arguments'
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/example.wordpress.org/cron',
- 'example_request_data' => array(
- 'headers' => array( 'authorization' => 'Bearer YOUR_API_TOKEN' ),
- 'body' => array(
- 'hooks' => array( 'jetpack_sync_cron' )
- ),
- ),
-) );
-
-// POST /sites/%s/cron/schedule
-new Jetpack_JSON_API_Cron_Schedule_Endpoint( array(
- 'description' => 'Schedule one or a recurring hook to fire at a particular time',
- 'group' => '__do_not_document',
- 'method' => 'POST',
- 'path' => '/sites/%s/cron/schedule',
- 'stat' => 'cron-schedule',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'request_format' => array(
- 'hook' => '(string) Hook name that should run when the event is scheduled',
- 'timestamp' => '(int) Timestamp when the event should take place, has to be in the future',
- 'arguments' => '(string) JSON Object of arguments that the hook will use (optional)',
- 'recurrence' => '(string) How often the event should take place. If empty only one event will be scheduled. Possible values 1min, hourly, twicedaily, daily (optional) '
- ),
- 'response_format' => array(
- 'success' => '(bool) Was the event scheduled?'
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/example.wordpress.org/cron/schedule',
- 'example_request_data' => array(
- 'headers' => array( 'authorization' => 'Bearer YOUR_API_TOKEN' ),
- 'body' => array(
- 'hook' => 'jetpack_sync_cron',
- 'arguments' => '[]',
- 'recurrence'=> '1min',
- 'timestamp' => 1476385523
- ),
- ),
-) );
-
-// POST /sites/%s/cron/unschedule
-new Jetpack_JSON_API_Cron_Unschedule_Endpoint( array(
- 'description' => 'Unschedule one or all events with a particular hook and arguments',
- 'group' => '__do_not_document',
- 'method' => 'POST',
- 'path' => '/sites/%s/cron/unschedule',
- 'stat' => 'cron-unschedule',
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain'
- ),
- 'request_format' => array(
- 'hook' => '(string) Name of the hook that should be unscheduled',
- 'timestamp' => '(int) Timestamp of the hook that you want to unschedule. This will unschedule only 1 event. (optional)',
- 'arguments' => '(string) JSON Object of arguments that the hook has been scheduled with (optional)',
- ),
- 'response_format' => array(
- 'success' => '(bool) Was the event unscheduled?'
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1.1/sites/example.wordpress.org/cron/unschedule',
- 'example_request_data' => array(
- 'headers' => array( 'authorization' => 'Bearer YOUR_API_TOKEN' ),
- 'body' => array(
- 'hook' => 'jetpack_sync_cron',
- 'arguments' => '[]',
- 'timestamp' => 1476385523
- ),
- ),
-) );
-
-// BACKUPS
-
-// GET /sites/%s/database-object/backup
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-get-database-object-backup-endpoint.php' );
-new Jetpack_JSON_API_Get_Database_Object_Backup_Endpoint( array(
- 'description' => 'Fetch a backup of a database object, along with all of its metadata',
- 'group' => '__do_not_document',
- 'method' => 'GET',
- 'path' => '/sites/%s/database-object/backup',
- 'stat' => 'database-objects:1:backup',
- 'allow_jetpack_site_auth' => true,
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- ),
- 'query_parameters' => array(
- 'object_type' => '(string) Type of object to fetch from the database',
- 'object_id' => '(int) ID of the database object to fetch',
- ),
- 'response_format' => array(
- 'object' => '(array) Database object row',
- 'meta' => '(array) Associative array of key/value metadata associated with the row',
- 'children' => '(array) Where appropriate, child records associated with the object. eg: Woocommerce tax rate locations',
- ),
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/database-object/backup'
-) );
-
-// GET /sites/%s/comments/%d/backup
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-get-comment-backup-endpoint.php' );
-new Jetpack_JSON_API_Get_Comment_Backup_Endpoint( array(
- 'description' => 'Fetch a backup of a comment, along with all of its metadata',
- 'group' => '__do_not_document',
- 'method' => 'GET',
- 'path' => '/sites/%s/comments/%d/backup',
- 'stat' => 'comments:1:backup',
- 'allow_jetpack_site_auth' => true,
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- '$post' => '(int) The comment ID',
- ),
- 'response_format' => array(
- 'comment' => '(array) Comment table row',
- 'meta' => '(array) Associative array of key/value commentmeta data',
- ),
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/comments/1/backup'
-) );
-
-// GET /sites/%s/options/backup
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-get-option-backup-endpoint.php' );
-new Jetpack_JSON_API_Get_Option_Backup_Endpoint( array(
- 'description' => 'Fetch a backup of an option',
- 'group' => '__do_not_document',
- 'method' => 'GET',
- 'path' => '/sites/%s/options/backup',
- 'stat' => 'options:backup',
- 'allow_jetpack_site_auth' => true,
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- ),
- 'query_parameters' => array(
- 'name' => '(string|array) One or more option names to include in the backup',
- ),
- 'response_format' => array(
- 'options' => '(array) Associative array of option_name => option_value entries',
- ),
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- )
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/options/backup'
-) );
-
-// GET /sites/%s/posts/%d/backup
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-get-post-backup-endpoint.php' );
-new Jetpack_JSON_API_Get_Post_Backup_Endpoint( array(
- 'description' => 'Fetch a backup of a post, along with all of its metadata',
- 'group' => '__do_not_document',
- 'method' => 'GET',
- 'path' => '/sites/%s/posts/%d/backup',
- 'stat' => 'posts:1:backup',
- 'allow_jetpack_site_auth' => true,
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- '$post' => '(int) The post ID',
- ),
- 'response_format' => array(
- 'post' => '(array) Post table row',
- 'meta' => '(array) Associative array of key/value postmeta data',
- ),
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/posts/1/backup'
-) );
-
-// GET /sites/%s/terms/%d/backup
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-get-term-backup-endpoint.php' );
-new Jetpack_JSON_API_Get_Term_Backup_Endpoint( array(
- 'description' => 'Fetch a backup of a term, along with all of its metadata',
- 'group' => '__do_not_document',
- 'method' => 'GET',
- 'path' => '/sites/%s/terms/%d/backup',
- 'stat' => 'terms:1:backup',
- 'allow_jetpack_site_auth' => true,
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- '$term' => '(int) The term ID',
- ),
- 'response_format' => array(
- 'term' => '(array) Term table row',
- 'meta' => '(array) Metadata associated with the term',
- ),
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/terms/1/backup'
-) );
-
-// GET /sites/%s/users/%d/backup
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-get-user-backup-endpoint.php' );
-new Jetpack_JSON_API_Get_User_Backup_Endpoint( array(
- 'description' => 'Fetch a backup of a user, along with all of its metadata',
- 'group' => '__do_not_document',
- 'method' => 'GET',
- 'path' => '/sites/%s/users/%d/backup',
- 'stat' => 'users:1:backup',
- 'allow_jetpack_site_auth' => true,
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- '$user' => '(int) The user ID',
- ),
- 'response_format' => array(
- 'user' => '(array) User table row',
- 'meta' => '(array) Associative array of key/value usermeta data',
- ),
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- ),
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/users/1/backup'
-) );
-
-// USERS
-
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-user-connect-endpoint.php' );
-
-// POST /sites/%s/users/%d/connect
-new Jetpack_JSON_API_User_Connect_Endpoint( array(
- 'description' => 'Creates or returns a new user given profile data',
- 'group' => '__do_not_document',
- 'method' => 'POST',
- 'path' => '/sites/%s/users/%d/connect',
- 'stat' => 'users:connect',
- 'allow_jetpack_site_auth' => true,
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- '$user_id' => '(int) The site user ID to connect',
- ),
- 'request_format' => array(
- 'user_token' => '(string) The user token',
- ),
- 'response_format' => array(
- 'success' => '(bool) Was the user connected',
- ),
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN',
- ),
- 'body' => array(
- 'user_token' => 'XDH55jndskjf3klh3',
- )
- ),
- 'example_response' => '{
- "success" => true
- }',
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/users/6/connect'
-) );
-
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-user-create-endpoint.php' );
-
-// POST /sites/%s/users/create
-new Jetpack_JSON_API_User_Create_Endpoint( array(
- 'description' => 'Creates or returns a new user given profile data',
- 'group' => '__do_not_document',
- 'method' => 'POST',
- 'path' => '/sites/%s/users/create',
- 'stat' => 'users:create',
- 'allow_jetpack_site_auth' => true,
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- ),
- 'query_parameters' => array(
- 'invite_accepted' => '(bool=false) If the user is being created in the invite context',
- ),
- 'request_format' => WPCOM_JSON_API_Site_User_Endpoint::$user_format,
- 'response_format' => WPCOM_JSON_API_Site_User_Endpoint::$user_format,
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN'
- ),
- 'body' => array(
- 'roles' => array(
- array(
- 'administrator',
- )
- ),
- 'first_name' => 'John',
- 'last_name' => 'Doe',
- 'email' => 'john.doe@example.wordpress.org',
- )
- ),
- 'example_response' => '{
- "ID": 18342963,
- "login": "binarysmash"
- "email": false,
- "name": "binarysmash",
- "URL": "http:\/\/binarysmash.wordpress.com",
- "avatar_URL": "http:\/\/0.gravatar.com\/avatar\/a178ebb1731d432338e6bb0158720fcc?s=96&d=identicon&r=G",
- "profile_URL": "http:\/\/en.gravatar.com\/binarysmash",
- "roles": [ "administrator" ]
- }',
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/users/create'
-
-) );
-
-require_once( $json_jetpack_endpoints_dir . 'class.jetpack-json-api-jps-woocommerce-connect-endpoint.php' );
-
-// POST /sites/%s/jps/woo-connect
-new Jetpack_JSON_API_JPS_WooCommerce_Connect_Endpoint( array(
- 'description' => 'Attempts to connect the WooCommerce plugin for this site to WooCommerce.com.',
- 'group' => '__do_not_document',
- 'method' => 'POST',
- 'path' => '/sites/%s/jps/woo-connect',
- 'stat' => 'jps:woo-connect',
- 'allow_jetpack_site_auth' => true,
- 'path_labels' => array(
- '$site' => '(int|string) The site ID, The site domain',
- ),
- 'request_format' => array(
- 'access_token' => '(string) The access token for WooCommerce to connect to WooCommerce.com',
- 'access_token_secret' => '(string) The access token secret for WooCommerce to connect to WooCommerce.com',
- 'user_id' => '(int) The user\'s ID after registering for a host plan',
- 'site_id' => '(int) The site\'s ID after registering for a host plan',
- ),
- 'response_format' => array(
- 'success' => '(bool) Setting access token and access token secret successful?',
- ),
- 'example_request_data' => array(
- 'headers' => array(
- 'authorization' => 'Bearer YOUR_API_TOKEN',
- ),
- 'body' => array(
- 'access_token' => '123456789',
- 'access_token_secret' => 'abcdefghiklmnop',
- 'user_id' => 1,
- 'site_id' => 2,
- ),
- ),
- 'example_response' => '{ "success": true }',
- 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/example.wordpress.org/jps/woo-connect'
-) );
diff --git a/plugins/jetpack/languages/jetpack-af.mo b/plugins/jetpack/languages/jetpack-af.mo
deleted file mode 100644
index efca4f05..00000000
--- a/plugins/jetpack/languages/jetpack-af.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-ary.mo b/plugins/jetpack/languages/jetpack-ary.mo
deleted file mode 100644
index c992db09..00000000
--- a/plugins/jetpack/languages/jetpack-ary.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-az.mo b/plugins/jetpack/languages/jetpack-az.mo
deleted file mode 100644
index ed9a462b..00000000
--- a/plugins/jetpack/languages/jetpack-az.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-bg_BG.mo b/plugins/jetpack/languages/jetpack-bg_BG.mo
deleted file mode 100644
index ad8579c5..00000000
--- a/plugins/jetpack/languages/jetpack-bg_BG.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-bs_BA.mo b/plugins/jetpack/languages/jetpack-bs_BA.mo
deleted file mode 100644
index 9aa28ebf..00000000
--- a/plugins/jetpack/languages/jetpack-bs_BA.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-ca.mo b/plugins/jetpack/languages/jetpack-ca.mo
deleted file mode 100644
index a24e4e48..00000000
--- a/plugins/jetpack/languages/jetpack-ca.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-ckb.mo b/plugins/jetpack/languages/jetpack-ckb.mo
deleted file mode 100644
index 5a3f3516..00000000
--- a/plugins/jetpack/languages/jetpack-ckb.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-cs_CZ.mo b/plugins/jetpack/languages/jetpack-cs_CZ.mo
deleted file mode 100644
index 820d5bad..00000000
--- a/plugins/jetpack/languages/jetpack-cs_CZ.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-cy.mo b/plugins/jetpack/languages/jetpack-cy.mo
deleted file mode 100644
index 965dda98..00000000
--- a/plugins/jetpack/languages/jetpack-cy.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-da_DK.mo b/plugins/jetpack/languages/jetpack-da_DK.mo
deleted file mode 100644
index 3229882a..00000000
--- a/plugins/jetpack/languages/jetpack-da_DK.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-es_MX.mo b/plugins/jetpack/languages/jetpack-es_MX.mo
deleted file mode 100644
index 73a6b904..00000000
--- a/plugins/jetpack/languages/jetpack-es_MX.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-gd.mo b/plugins/jetpack/languages/jetpack-gd.mo
deleted file mode 100644
index 32c18bb7..00000000
--- a/plugins/jetpack/languages/jetpack-gd.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-gl_ES.mo b/plugins/jetpack/languages/jetpack-gl_ES.mo
deleted file mode 100644
index 2670f30a..00000000
--- a/plugins/jetpack/languages/jetpack-gl_ES.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-hu_HU.mo b/plugins/jetpack/languages/jetpack-hu_HU.mo
deleted file mode 100644
index 9c0c1dd3..00000000
--- a/plugins/jetpack/languages/jetpack-hu_HU.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-is_IS.mo b/plugins/jetpack/languages/jetpack-is_IS.mo
deleted file mode 100644
index 1fd11ae3..00000000
--- a/plugins/jetpack/languages/jetpack-is_IS.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-ka_GE.mo b/plugins/jetpack/languages/jetpack-ka_GE.mo
deleted file mode 100644
index ee16aa0f..00000000
--- a/plugins/jetpack/languages/jetpack-ka_GE.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-lt_LT.mo b/plugins/jetpack/languages/jetpack-lt_LT.mo
deleted file mode 100644
index 36ed9f81..00000000
--- a/plugins/jetpack/languages/jetpack-lt_LT.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-lv.mo b/plugins/jetpack/languages/jetpack-lv.mo
deleted file mode 100644
index 1a7461aa..00000000
--- a/plugins/jetpack/languages/jetpack-lv.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-mk_MK.mo b/plugins/jetpack/languages/jetpack-mk_MK.mo
deleted file mode 100644
index b9ae8aa4..00000000
--- a/plugins/jetpack/languages/jetpack-mk_MK.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-ms_MY.mo b/plugins/jetpack/languages/jetpack-ms_MY.mo
deleted file mode 100644
index ed95f5ac..00000000
--- a/plugins/jetpack/languages/jetpack-ms_MY.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-my_MM.mo b/plugins/jetpack/languages/jetpack-my_MM.mo
deleted file mode 100644
index 2e6674f2..00000000
--- a/plugins/jetpack/languages/jetpack-my_MM.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-nn_NO.mo b/plugins/jetpack/languages/jetpack-nn_NO.mo
deleted file mode 100644
index adaa9f35..00000000
--- a/plugins/jetpack/languages/jetpack-nn_NO.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-pl_PL.mo b/plugins/jetpack/languages/jetpack-pl_PL.mo
deleted file mode 100644
index aee6ca6a..00000000
--- a/plugins/jetpack/languages/jetpack-pl_PL.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-pt_PT.mo b/plugins/jetpack/languages/jetpack-pt_PT.mo
deleted file mode 100644
index c38cc579..00000000
--- a/plugins/jetpack/languages/jetpack-pt_PT.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-sa_IN.mo b/plugins/jetpack/languages/jetpack-sa_IN.mo
deleted file mode 100644
index f8283df4..00000000
--- a/plugins/jetpack/languages/jetpack-sa_IN.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-si_LK.mo b/plugins/jetpack/languages/jetpack-si_LK.mo
deleted file mode 100644
index 7dbb889b..00000000
--- a/plugins/jetpack/languages/jetpack-si_LK.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-sl_SI.mo b/plugins/jetpack/languages/jetpack-sl_SI.mo
deleted file mode 100644
index 46e1d159..00000000
--- a/plugins/jetpack/languages/jetpack-sl_SI.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-sr_RS.mo b/plugins/jetpack/languages/jetpack-sr_RS.mo
deleted file mode 100644
index aca19772..00000000
--- a/plugins/jetpack/languages/jetpack-sr_RS.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-te.mo b/plugins/jetpack/languages/jetpack-te.mo
deleted file mode 100644
index 1ef45f9a..00000000
--- a/plugins/jetpack/languages/jetpack-te.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-th.mo b/plugins/jetpack/languages/jetpack-th.mo
deleted file mode 100644
index 153fe828..00000000
--- a/plugins/jetpack/languages/jetpack-th.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-uk.mo b/plugins/jetpack/languages/jetpack-uk.mo
deleted file mode 100644
index f5edc40d..00000000
--- a/plugins/jetpack/languages/jetpack-uk.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-ur.mo b/plugins/jetpack/languages/jetpack-ur.mo
deleted file mode 100644
index 9b4e32ac..00000000
--- a/plugins/jetpack/languages/jetpack-ur.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/jetpack-vi.mo b/plugins/jetpack/languages/jetpack-vi.mo
deleted file mode 100644
index 6ed9e77b..00000000
--- a/plugins/jetpack/languages/jetpack-vi.mo
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/languages/json/jetpack-af-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-af-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 6fa265a4..00000000
--- a/plugins/jetpack/languages/json/jetpack-af-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"af_ZA"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":[""],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":[""],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":[""],"Save Settings":[""],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":[""],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found."],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["","%(number)s Views"],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":[""],"Learn more":[""],"Posts":["Bydraes"],"Front page":[""],"Pinterest":[""],"Google":[""],"Show related content after posts":[""],"Related":[""],"Save":["Stoor"],"Email Address":["E-posadres"],"Media":[""],"Themes":["Temas"],"Site Stats":[""],"Sharing":[""],"Testimonials":[""],"Cancel":["Kanselleer"],"Comments":["Kommentare"],"Ignored Phrases":[""],"Use automatically detected language to proofread posts and pages":[""],"Redundant Phrases":[""],"Phrases to Avoid":[""],"Passive Voice":[""],"Jargon":[""],"Hidden Verbs":[""],"Double Negatives":[""],"Diacritical Marks":[""],"Complex Phrases":[""],"Bias Language":[""],"English Options":[""],"Proofreading":[""],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[""],"You have successfully disconnected Jetpack":[""],"Edit":["Wysig"],"Connected":[""],"Activate":["Aktiveer"],"Active":["Aktief"],"Search":["Soek"],"Settings":["Instellings"],"Learn More":[""],"Disconnect Jetpack":[""],"Test your site’s compatibility with Jetpack.":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-ar-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-ar-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index e90c6802..00000000
--- a/plugins/jetpack/languages/json/jetpack-ar-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;","lang":"ar"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":["بعد ذلك، قم بتنشيط مجموعة الميزات الموصى بها في Jetpack لزيادة الأمان والأداء في موقعك. {{a}}تعرّف على المزيد حول ما تم تضمينه{{/a}}."],"We’re now collecting stats and securing your site. Welcome aboard.":["نقوم الآن بجمع الإحصاءات وتأمين موقعك. مرحبًا بك."],"{{a}}Skip, and explore features individually{{/a}}.":["{{a}}تجاوز الميزات واستكشفها على حدة{{/a}}."],"Jetpack Business Plan":["خطة الأعمال في Jetpack"],"Jetpack Premium Plan":["الخطة المتميزة في Jetpack"],"Jetpack Personal Plan":["الخطة الشخصية في Jetpack"],"Get started with hassle-free design, stats, and performance tools.":["ابدأ بأدوات التصميم من دون صعوبات والإحصاءات والأداء."],"Welcome to Jetpack Free":["مرحبًا بك في Jetpack المجاني"],"Jetpack Free Plan":["الخطة المجانية في Jetpack"],"Explore Jetpack plans":["استكشاف خطط Jetpack"],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":["اطمئن مع عمليات النسخ الاحتياطي التلقائية والدعم ذي الأولوية، وقم بالوصول إلى مجموعة كبيرة من الجمهور باستخدام أدوات تحسين محركات البحث المتقدِّمة، وحقّق أرباحًا من موقعك عبر تشغيل الإعلانات، وخصص موقعك بأي قالب من القوالب المتميزة التي تزيد عن 200 قالب."],"Jetpack offers so much more":["يوفِّر Jetpack أكثر من ذلك بكثير"],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":["هل تحتاج إلى مساعدة؟ ابحث عن موقع الدعم الخاص بنا للتعرّف على موقعك وحسابك وكيفية تحقيق أقصى استفادة من وردبرس."],"Support documentation":["وثائق الدعم"],"Chat bubbles representing getting in touch with support":["فقاعات الدردشة التي تُمثِّل التواصل مع الدعم"],"Site Activity":["نشاط الموقع"],"Start publicizing now":["بدء النشر الآن"],"Reach a wider audience by automatically sharing your posts on social media.":["يمكنك الوصول إلى مجموعة كبيرة من الجمهور عن طريق مشاركة مقالاتك على وسائل التواصل الاجتماعي تلقائيًّا."],"Increase traffic to your site":["زيادة المرور في موقعك"],"Explore free themes":["استكشاف قوالب مجانية"],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":["احصل على وصول غير محدود إلى مئات من القوالب الاحترافية، وخصص موقعك بدقة بالشكل الذي تريده."],"A wide variety of themes and tools to customize a site":["مجموعة كبيرة من القوالب والأدوات اللازمة لتخصيص الموقع"],"Set up your site security":["إعداد أمان موقعك"],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":["امنع هجمات تسجيل الدخول واحصل على تنبيهات فورية عند وجود مشكلة في موقعك."],"Site stats showing an evolution in traffic and engagement":["إحصاءات الموقع التي تُظهر تطورًا في المرور والمشاركة"],"A hand holding a loupe":["يد تحمل عدسة"],"A chart showing an healthy increase in earnings":["مخطط يُظهر زيادة فعّالة في الأرباح"],"Interface showing a chronological list of changes and updates in a site":["واجهة مستخدم تُظهر قائمة مرتّبة زمنيًّا من التغييرات والتحديثات في الموقع"],"A cloud with multiple types of content floating around it":["سحابة تتضمن أنواعًا عديدة من المحتوى الموجود بها"],"A folder holding real comments":["مجلد يتضمن تعليقات حقيقية"],"Make your site faster":["جعل الموقع أسرع"],"Load pages faster by serving your images from our global network of servers.":["يمكنك تحميل صفحاتك بشكل أسرع عن طريق عرض صورك من خلال شبكة الخوادم العالمية لدينا."],"A fast and performant website":["موقع ويب سريع وفعّال"],"A secure site, locked and protected by Jetpack":["موقع آمن يقوم Jetpack بتأمينه وحمايته"],"These settings won't apply to related posts added using the block editor.":["لن تنطبق هذه الإعدادات على المقالات ذات الصلة المُضافة باستخدام محرر المكوِّن."],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["انسخ المقالات والصفحات والشهادات وقوائم المشروعات الموجودة. سيُنسخ كل المحتوى بما في ذلك النصوص والصور المميّزة وإعدادات المشاركة والمزيد."],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":["يتعذر اتصال هذا الموقع بـ ووردبريس.كوم حيث إنَّه ينتهك {{a}}شروط الخدمة{{/a}} التي نُقرّها."],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":["اربط موقعك على الويب بشبكات وسائل التواصل الاجتماعي التي تستخدمها وشارك المحتوى الخاص بك عبر جميع حساباتك على وسائل التواصل الاجتماعي بنقرة واحدة. عندما تنشر مقالة، ستظهر على جميع الحسابات المتصلة."],"Add Like buttons to your posts and pages":["إضافة أزرار الإعجاب إلى مقالاتك وصفحاتك"],"When visitors enjoy your content, let them show it with a Like.":["عندما يستمتع الزائرون بمحتواك، دعهم يظهرون ذلك بواسطة الإعجاب."],"Explore your Jetpack Professional plan!":["استكشف خطة Jetpack Professional الخاصة بك!"],"Explore your Jetpack Premium plan!":["استكشف خطة Jetpack Premium الخاصة بك!"],"Explore your Jetpack Personal plan!":["استكشف خطة Jetpack Personal الخاصة بك!"],"Create account":["إنشاء حساب"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["يدعم Jetpack موقعك، ولكن للوصول إلى جميع ميزاته التي ستحتاج إليها لإنشاء حساب."],"Real-time, automated backups (unlimited storage)":["نُسخ احتياطية فورية وتلقائية (تخزين غير محدود)"],"Compose content the way you want to and streamline your publishing experience.":["أنشئ المحتوى بالطريقة التي تريدها لتبسيط تجربتك في النشر."],"Add a portfolio item":["إضافة عنصر قائمة المشروعات"],"Add a testimonial":["إضافة شهادة"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["قم بتطوير ظهور موقعك في محركات البحث واعرض إحصاءات المرور بشكل فوري."],"Create a Jetpack account to use this feature":["إنشاء حساب Jetpack لاستخدام هذه الميزة"],"Share your content on social media and increase audience engagement.":["شارك محتواك على وسائل التواصل الاجتماعي وقم بزيادة مشاركة الجمهور."],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["سيراقب Jetpack موقعك باستمرار، وسيقوم بتنبيهك عند الكشف عن عطل."],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["عند إطلاق تحديث المكوّن الإضافي، تتمثَّل أفضل ممارسة في تحديث ذلك المكوّن الإضافي على الفور. اختر المكوِّنات الإضافية التي ترغب في تحديثها تلقائيًّا لكي يبقى موقعك آمنًا."],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["أبقِ موقعك آمنًا مع أحدث ميزات الأمان واستلم تنبيهات بالمشكلات الفنية."],"Error enabling Site accelerator. %(error)s":["حدث خطأ أثناء تمكين مُسرِّع الموقع. %(error)s"],"Site accelerator is now speeding up your site!":["يقوم مُسرِّع الموقع بتسريع موقعك الآن!"],"Enabling Site accelerator…":["جارٍ تمكين مُسرِّع الموقع..."],"Error disabling site accelerator. %(error)s":["حدث خطأ أثناء تعطيل مُسرِّع الموقع. %(error)s"],"Site accelerator is no longer speeding up your site!":["لن يقوم مُسرِّع الموقع بتسريع موقعك بعد الآن!"],"Disabling site accelerator…":["جارٍ تعطيل مُسرِّع الموقع..."],"Load pages faster, optimize images, and speed up your visitors’ experience.":["يمكنك تحميل الصور بشكل أسرع، وتحسين الصور، وتسريع تجربة الزائرين لديك."],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["يمكنك استكمال إحصاءات ووردبريس.كوم باستخدام مظهر Google المتعمق في أنماط الزائرين والمرور."],"High-speed, high-definition video hosting with no third-party ads.":["يمكنك استضافة فيديو فائق السرعة وعالي الجودة من دون إعلانات الأطراف الثالثة."],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["يمكنك جدولة التغريدات غير المحدودة ومقالات Facebook وغيرها من المقالات الاجتماعية مسبقًا."],"Marketing Automation":["أتمتة التسويق"],"Activate Jetpack Search":["تنشيط ميزة البحث في Jetpack"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["استبدل أفضل النتائج والترشيح المدعوم من Elasticsearch ببحث ووردبريس الافتراضي."],"Start earning":["البدء في الربح"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["يسمح لك WordAds بجني المال عن طريق عرض محتوى ترويجي. ابدأ في جني المال اليوم."],"Spam is automatically blocked from your comments.":["يُحظر البريد العشوائي تلقائيًّا من تعليقاتك."],"Spam Filtering":["ترشيح البريد العشوائي"],"Browse premium themes":["تصفح القوالب المتميزة"],"Access hundreds of beautifully designed premium themes at no extra cost.":["قم بالوصول إلى مئات من القوالب المتميزة المصممة بشكل جميل من دون أي تكلفة إضافية."],"Try a premium theme":["تجربة قالب متميز"],"View settings":["عرض الإعدادات"],"Create a Jetpack account to view your email followers":["إنشاء حساب Jetpack لعرض متابعيك عبر البريد الإلكتروني"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["افتح موقعك أمام التعليقات وادع المشتركين للحصول على تنبيهات حول أحدث أعمالك."],"Manage security settings":["إدارة إعدادات الأمان"],"Built-in Performance":["الأداء المدمج"],"Jetpack is ready for the new WordPress editor":["أصبح Jetpack جاهزًا لمحرر ووردبريس الجديد"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["نُقدِّم اليوم الموجة الأولى من الكتل الخاصة بـ Jetpack والمصممة خصوصًا لتجربة المحرر الجديد: زر الدفع البسيط والنموذج والخريطة والتمييز."],"Build your Jetpack site with blocks":["إنشاء موقع Jetpack الخاص بك باستخدام الكتل"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["هل ثمَّة محرر جديد؟ نعم! {{a}}تعرّف على المزيد{{/a}}."],"The features you rely on, adapted for the new WordPress editor.":["كانت الميزات التي تعتمد عليها ملائمة لمحرر ووردبريس الجديد."],"Take me to the new editor":["خذني إلى المحرر الجديد"],"Testing Jetpack Connection":["اختبار اتصال Jetpack"],"There was an error testing Jetpack. Error: %(error)s":["حدث خطأ أثناء اختبار Jetpack. خطأ: %(error)s"],"New in Jetpack!":["جديد في Jetpack!"],"Speed up static file load times":["زيادة سرعة تحميل الملفات الثابتة"],"Speed up image load times":["زيادة سرعة تحميل الصور"],"Enable site accelerator":["تمكين مسرع الموقع"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["تحميل الصفحات بصورة أسرع عن طريق السماح لبرنامج Jetpack بتحسين الصور وتقديم الصور والملفات الثابتة (مثل CSS وJavaScript) من شبكة الخوادم العالمية لدينا."],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["أضف طبقة أمان إضافية إلى موقع الويب عن طريق تمكين تسجيل الدخول إلى ووردبريس.كوم والمصادقة الآمنة. إذا كانت لديك عدة مواقع تم تمكين هذا الخيار فيها، فستتمكن من تسجيل الدخول إلى كل موقع منها باستخدام بيانات الاعتماد نفسها."],"View your site activity":["عرض نشاط موقعك"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["عرض قائمة مرتبة ترتيبًا زمنيًا لجميع التغييرات والتحديثات التي تطرأ على موقعك بطريقة منظمة وسهلة القراءة."],"Manually Verify ":["التحقق يدويًّا "],"Verify with Google":["التحقق باستخدام غوغل"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["سيُرسل إليك غوغل رسالة عبر البريد الإلكتروني حول بعض الأحداث التي تقع في حياتك، بما في ذلك المؤشرات التي تُفيد بأنّ موقعك على الويب تعرّض {{a1}}للاختراق{{/a1}}، أو المشكلات المتعلقة {{a2}}بتتبع{{/a2}} موقعك أو فهرسته."],"or":["أو"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["راقب حركة المرور والأداء في موقعك من {{a}}وحدة التحكم في البحث في غوغل{{/a}}."],"Your site is verified with Google":["يتم التحقق من موقعك باستخدام غوغل"],"Site failed to verify: %(error)s":["فشل الموقع في التحقق: %(error)s"],"Verifying...":["جارٍ التحقق..."],"Add faster, more advanced searching to your site with Jetpack Professional.":["أضف ميزة بحث أسرع وأكثر تقدّمًا إلى موقعك باستخدام Jetpack Professional."],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["استبدال بالبحث المدمج في ووردبريس ميزة البحث من Jetpack، التي تُعد تجربة بحث متقدمة"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["تستبدل ميزة البحث في Jetpack بالبحث المدمج بحثًا سريعًا قابلاً للتوسيع يمكن تخصيصه ووثيق الصلة تتم استضافته في سحابة ووردبريس.كوم. النتيجة: يعثر مستخدموك على المحتوى الذي يريدونه بشكل أسرع."],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["يُعد البحث المدمج في ووردبريس رائعًا للمواقع التي لا تحتوي على الكثير من المحتوى. ولكن مع نمو موقعك، تتباطأ عمليات البحث وتعرض نتائجًا أقل صلة."],"Jetpack Search supports many customizations.":["تدعم ميزة البحث في Jetpack العديد من التخصيصات."],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["استبدل بالبحث المدمج بحثًا سريعًا قابلاً للتوسيع يمكن تخصيصه ووثيق الصلة {{a}}تتم استضافته في سحابة ووردبريس.كوم{{/a}}."],"Site is verified":["يتم التحقق من الموقع"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}لإنشاء موقع جميل يبدو بالشكل ويعمل بالطريقة التي تريدها تمامًا، يمنحك Jetpack Professional وصولاً غير محدود إلى أكثر من 200 قالب ووردبريس متميز.{{/p}}{{p}} Jetpack Professional هو أكثر من مجرد أداة تبحث عن التصميم المثالي. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}"],"Spam filtering and priority support.":["تصفية البريد المزعج ودعم الأولوية."],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["عندما يتم تمكين الإعلانات، يقوم Jetpack تلقائيًا بإنشاء ملف ads.txt مُعد خصيصًا لموقعك."],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["يقوم Jetpack تلقائيًا بإنشاء ملف {{link}}ads.txt{{/link}} مُعد خصيصًا لموقعك. إذا كنت تحتاج إلى إضافة إدخالات إضافية للشبكات الأخرى، فيرجى إضافتها في المساحة أدناه، إدخال واحد في كل سطر."],"Custom ads.txt entries":["إدخالات ads.txt مخصصة"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}لإنشاء موقع جميل يبدو بالشكل ويعمل بالطريقة التي تريدها تمامًا، يمنحك Jetpack Professional وصولاً غير محدود إلى أكثر من 200 قالب ووردبريس متميز.{{/p}}{{p}} Jetpack Professional هو أكثر من مجرد أداة تبحث عن التصميم المثالي. يدور أيضًا حول راحة بالك: تضمن عمليات النسخ الاحتياطي الفورية وفحص البرامج الضارة التلقائي والدعم ذو الأولوية المُقدّم من فريق خبرائنا العالمي أن يظل موقعك آمنًا وسليمًا دومًا.{{/p}}"],"Introducing Premium Themes":["تقديم القوالب المتميزة"]," Premium Themes":[" القوالب المتميزة"],"Privacy information":["معلومات الخصوصية"],"Enable Lazy Loading for images":["تمكين التحميل البطيء للصور"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["ستقوم الصور بطيئة التحميل بتحسين سرعة موقعك وخلق تجربة مشاهدة أكثر سلاسة. سيتم تحميل الصور عندما يقوم الزائرون بالتمرير إلى أسفل الشاشة، بدلاً من الكل في وقت واحد."],"Performance & speed":["الأداء والسرعة"],"Enable high-speed, ad-free video player":["تمكين مشغّل فيديوهات عالية السرعة ومن دون إعلانات"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["اجعل المحتوى الذي تنشره أكثر تفاعلاً مع الفيديو عالي الدقة. باستخدام أداة الفيديوهات في Jetpack، يمكنك تخصيص مشغّل الوسائط الخاص بك وتقديم مقاطع فيديو عالية السرعة ومن دون إعلانات ولا تحمل علامات تجارية إلى زائريك. تُستضاف مقاطع الفيديو على خوادم ووردبريس.كوم ولا تقلل من باقة الاستضافة الخاصة بك."],"Video":["الفيديو"],"Carousel color scheme":["نظام ألوان Carousel"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["تعرض بيانات Exif للمشاهدين تفاصيل فنية إضافية عن صورة ما، مثل بعدها البؤري والفتحة وISO."],"Show photo Exif metadata in carousel (when available)":["اعرض بيانات تعريف EXIF الخاصة بالصورة في carousel (عند توفرها)"],"Display images in a full-screen carousel gallery":["اعرض الصور بملء الصورة في معرض carousel"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["أنشئ عروض شرائح بملء الشاشة في carousel للصور الموجودة في مقالاتك وصفحاتك. تكون معارض Carousel مألوفة وتُشجّع زائرو الموقع للتفاعل مع صورك."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["يحل الشريط الجانبي لـ ووردبريس.كوم محل شريط أدوات مسؤول ووردبريس الافتراضي ويبسط تجربتك على ووردبريس. إنه يوفّر وصولاً بنقرة واحدة لإدارة جميع المواقع الخاصة بك وتحديث ملف تعريفك على ووردبريس.كوم وعرض الإخطارات واللحاق بالمواقع التي تتابعها في القارئ."],"Portfolios shortcode: [portfolio]":["الكود المختصر لمعارض الأعمال: [portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["استخدم {{portfolioLink}}معارض الأعمال{{/portfolioLink}} الموجودة على موقعك لعرض أفضل أعمالك. إذا لم يدعم القالب الخاص بك معارض الأعمال في Jetpack، فسيظل بإمكانك استخدام الكود المختصر لعرضها على موقعك."],"Testimonials shortcode: [testimonials]":["الكود المختصر للشهادات: [testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["أضف {{testimonialLink}}الشهادات{{/testimonialLink}} إلى موقعك على الويب لجذب عملاء جدد. إذا لم يدعم القالب الخاص بك الشهادات في Jetpack، فسيظل بإمكانك استخدام الكود المختصر لعرضها على موقعك."],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["يتعذر على محركات البحث الوصول إلى موقعك في الوقت الحالي. إذا كنت ترغب في جعل موقعك قابلاً للوصول، فتحقق من {{a}}إعدادات القراءة{{/a}} وشغّل ميزة \"رؤية محرك البحث\"."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["أخبار جيدة: يُرسل Jetpack خريطة موقعك تلقائيًّا إلى جميع محركات البحث الرئيسية للفهرسة."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["خرائط الموقع هي ملفات تستخدمها محركات البحث مثل Google أو Bing في فهرسة موقعك على الويب. يمكنهم المساعدة على تحسين تصنيفك في نتائج البحث. عتد تمكين هذه الميزة، سيُنشئ Jetpack خرائط الموقع من أجلك ويُحدّثها تلقائيًّا عندما يتغيّر المحتوى الموجود على موقعك."],"Configure related posts in the Customizer":["تكوين المقالات ذات الصلة في أداة التخصيص"],"Highlight related content with a heading":["إبراز المحتوى ذي الصلة مع أحد العناوين"],"View security scan details":["عرض تفاصيل فحص الأمان"],"View backup history":["عرض محفوظات النسخ الاحتياطي"],"Show a thumbnail image where available":["عرض صورة مصغّرة حيثما تتوفر"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["للحصول على مزيد من المعلومات حول كيفية استخدام ميزات Jetpack المحددة لنشاط تتبع البيانات، يرجى الرجوع إلى {{privacyCenterLink}}مركز الخصوصية{{/privacyCenterLink}}."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["نستخدم أدوات تتبع أخرى، بما في ذلك بعض الأدوات التي تنتمي إلى أطراف ثالثة. {{cookiePolicyLink}}اقرأ حول هذه الأدوات{{/cookiePolicyLink}} وكيفية التحكم بها."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["تساعدنا هذه المعلومات على تحسين منتجاتنا، وجعل التسويق أكثر ملاءمة لك، وتخصيص تجربة ووردبريس.كوم، والمزيد كما يرد بالتفصيل في {{pp}}سياسة الخصوصية{{/pp}} لدينا."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["شارك المعلومات مع أداة التحليلات لدينا حول استخدامك الخدمات أثناء تسجيل الدخول إلى حساب ووردبريس.كوم الخاص بك. {{cookiePolicyLink}}تعرّف على المزيد{{/cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["يتحكم مسؤول الموقع في هذه الميزة. {{link}}تعرّف المزيد{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["قام مسؤول الموقع بتعطيل هذه الميزة. {{link}}تعرّف المزيد{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["قام مسؤول الموقع بتمكين هذه الميزة. {{link}}تعرّف المزيد{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["قام مسؤول الموقع بتعطيل %(moduleName)s. {{link}}تعرّف المزيد{{/link}}."],"This feature has been disabled by a site administrator.":["قام مسؤول الموقع بتعطيل هذه الميزة."],"%(moduleName)s has been disabled by a site administrator.":["قام مسؤول الموقع بتعطيل %(moduleName)s."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["يمكنك وضع إعلانات إضافية باستخدام مربع جانبي للإعلانات. {{link}}جرّب ذلك!{{/link}}"],"Configure your notification settings":["تكوين إعدادات التنبيهات لديك"],"Monitor your site's downtime":["رصد تعطّل موقعك"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["تُعد ميزة البحث في Jetpack بديلاً فعّالاً لميزة إمكانية البحث المدمجة في ووردبريس."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["تُفحص الملفات على موقعك بانتظام بحثًا عن التعديلات غير المصرح بها أو المشكوك فيها التي يمكن أن تُعرض أمانك وبياناتك للخطر."],"Plugin needs updating.":["لا بد من تحديث المكوّن الإضافي.","لا بد من تحديث المكوّنات الإضافية.","لا بد من تحديث المكوّنات الإضافية.","لا بد من تحديث المكوّنات الإضافية.","لا بد من تحديث المكوّنات الإضافية.","لا بد من تحديث المكوّنات الإضافية."],"%(number)s":["%(number)s","%(number)s","%(number)s","%(number)s","%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["تسمح لك تحديثات مكوّن Jetpack الإضافي باختيار المكوّنات الإضافية التي يتم تحديثها تلقائيًّا."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["سيُحسّن Jetpack صورك ويوفِّرها من موقع الخادم الأقرب إلى زائريك. سيؤدي استخدام شبكة توصيل المحتوى العالمية إلى تعزيز سرعة التحميل في موقعك."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":["ستراقب ميزة رصد التعطّل في Jetpack موقعك بإستمرار، وستنبهك في اللحظة التي يُكشف فيها عن التعطّل."],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["تسمح لك عمليات النسخ الاحتياطي في Jetpack باستعادة إحدى النُسخ الاحتياطية أو تنزيلها بسهولة من لحظة معيّنة."],"Akismet checks your comments and contact form submissions against our global database of spam.":["يتحقق Akismet من تعليقاتك وعروض نماذج جهات الاتصال وفق قاعدة بياناتنا العامة لرسائل البريد غير المرغوب فيها."],"Privacy Information":["معلومات الخصوصية"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["يتيح لك VideoPress رفع مقاطع الفيديو من جهاز الكمبيوتر الخاص بك ليتم استضافتها على ووردبريس.كوم لا على خوادم المضيف لديك. يمكنك بعد ذلك إدراج مقاطع الفيديو هذه على موقع Jetpack المستضاف ذاتيًا. "],"Add the Search (Jetpack) widget to your sidebar":["إضافة مربع البحث الجانبي (Jetpack) إلى الشريط الجانبي لديك"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["امنح زوارك تجربة بحث رائعة عن طريق السماح لهم بتصفية نتائج النتائج ذات الصلة وفرزها بسرعة."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["تمكين قالب خفيف الوزن ومألوف للهواتف المحمولة سيُعرض لزوارك على الأجهزة المحمولة."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["تحميل المقالات التالية تلقائيًا عندما يقترب القارئ من أسفل الصفحة."],"Allows you to publish new posts by sending an email to a special address.":["السماح لك بنشر مقالات جديدة عن طريق إرسال بريد إلكتروني إلى عنوان خاص."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["السماح لك بكتابة محتوى به روابط وقوائم وأنماط أخرى بصياغة مبسطة."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["التحقق من المحتوى الخاص بك للتأكد من صحة قواعد النحو والإملاء، والكلمات المُساء استخدامها والأسلوب أثناء الكتابة."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["تقديم الوسوم المخفية الضرورية واللازمة للتحقق من موقع ووردبريس الخاص بك مع خدمات متنوعة."],"Displays information on your site activity, including visitors and popular posts or pages.":["عرض معلومات عن نشاط موقعك، بما في ذلك الزوار والمقالات أو الصفحات الشائعة."],"Allows you to optimize your site and its content for better results in search engines.":["السماح لك بتحسين موقعك ومحتواه للحصول على نتائج أفضل في محركات البحث."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["دمج موقعك ووردبريس لديك مع Google Analytics، الذي يُعد منصة تقدم رؤى حول حركة المرور والزوار والتحويلات لديك."],"Displays high-quality ads on your site that allow you to earn income.":["عرض إعلانات عالية الجودة على موقعك تتيح لك كسب دخل."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["إضافة أزرار المشاركة إلى المحتوى الخاص بك بحيث يمكن الزوار من مشاركته على مواقع التواصل الاجتماعي."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["السماح لك بمشاركة أحدث محتوى تلقائيًا على مواقع التواصل الاجتماعي، بما في ذلك فيسبوك وتويتر."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["إضافة أزرار إعجاب إلى المحتوى الخاص بك بحيث يمكن للزوار إظهار تقديرهم أو استمتاعهم."],"Allows registered users to log in to your site with their WordPress.com accounts.":["السماح للمستخدمين المسجلين بتسجيل الدخول إلى موقعك باستخدام حسابات ووردبريس.كوم الخاصة بهم."],"Protects your site from traditional and distributed brute force login attacks.":["حماية موقعك من هجمات تسجيل الدخول الغاشمة التقليدية والموزعة."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["إجراء نسخ احتياطي لموقعك على خوادم ووردبريس.كوم العالمية، مما يسمح لك باستعادة المحتوى الخاص بك في حالة الطوارئ أو الخطأ."],"Removes spam from comments and contact forms.":["إزالة الرسائل غير المرغوب فيها من التعليقات ونماذج الاتصال."],"We are committed to your privacy and security. ":["نحن ملتزمون بخصوصيتك وأمانك. "],"View all Jetpack plans":["عرض كل خطط Jetpack"],"Manage your plan":["إدارة خطتك"],"Your Plan":["خطتك"],"You’re currently on Jetpack %(plan)s.":["أنت حاليًا على %(plan)s Jetpack."],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["السماح للقراء بالاشتراك في مقالاتك أو تعليقاتك، وتلقي تنبيهات بالمحتوى الجديد عبر البريد الإلكتروني."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["استبدال نموذج تعليقات ووردبريس القياسي بنظام تعليقات جديد يتضمن خيارات تسجيل الدخول إلى مواقع التواصل الاجتماعي."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}التنشيط{{/a}} لاستبدال ميزة البحث في Jetpack — وهي تجربة بحث متقدمة — بميزة البحث المدمجة في ووردبريس."],"Add Search (Jetpack) Widget":["إضافة مربع البحث الجانبي (Jetpack)"],"Jetpack Search is powering search on your site.":["إن البحث في Jetpack يمكِّن البحث على موقعك."],"Manage your plugins":["إدارة مكوناتك الإضافية"],"Moderate comments":["إدارة التعليقات"],"Error updating privacy settings. %(error)s":["حدث خطأ أثناء تحديث إعدادات الخصوصية. %(error)s"],"Updated privacy settings.":["تم تحديث إعدادات الخصوصية."],"Updating privacy settings…":["جارٍ تحديث إعدادات الخصوصية…"],"Add Jetpack Search Widget":["إضافة المربع الجانبي \"بحث Jetpack\""],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["أضف مربعًا جانبيًّا لميزة البحث في Jetpack إلى شريطك الجانبي لتكوين الفرز والمرشحات."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["مجموعات الأمان الكاملة، وأدوات التشغيل التلقائي للتسويق والإيرادات، واستضافة مقاطع فيديو غير محدودة، وقوالب غير محدودة، والبحث المحسّن، والدعم ذو الأولوية."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["مجموعات الأمان الكاملة، وأدوات التشغيل التلقائي للتسويق والإيرادات، واستضافة مقاطع فيديو غير محدودة، والدعم ذو الأولوية."],"Daily backups, spam filtering, and priority support.":["النسخ الاحتياطية اليومية، وتصفية البريد المزعج، والدعم ذو الأولوية."],"Always-on Security":["الأمان المتاح دائمًا"],"Activate video hosting":["تنشيط استضافة مقاطع الفيديو"],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["نسخة احتياطية فورية لجميع بيانات موقعك بمساحة غير محدودة، واسترداد بنقرة واحدة، وفحص الأمان التقائي، والدعم ذو الأولوية"],"Design the perfect website":["تصميم موقع الويب المثالي"],"Set up Jetpack":["إعداد Jetpack"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["نسخ احتياطي في وقت التشغيل لجميع بيانات موقعك بمساحة غير محدودة واستعادة بنقرة واحدة وفحص أمان تلقائي."],"Jetpack Search":["البحث في Jetpack"],"Jetpack version %(version)s":["إصدار Jetpack %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["جارٍ إجراء نسخة احتياطية لموقعك في وقت التشغيل وفحصه بانتظام للاحتراز من تهديدات الأمان."],"Daily backup of all your site data with unlimited space and one-click restores":["نسخ احتياطي يومي لجميع بيانات موقعك بمساحة غير محدودة واسترداد بنقرة واحدة"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["نسخ احتياطي فوري لجميع بيانات موقعك بمساحة غير محدودة واسترداد بنقرة واحدة وفحص أمان تلقائي وحل للتهديد بنقرة واحدة."],"View your security activity":["عرض نشاط الأمان"]," (powered by VaultPress).":[" (عن طريق VaultPress)."],"Customize Search Widget":["تخصيص المربع الجانبي للبحث"],"Please correct the issue below and try again.":["يُرجى تصحيح المشكلة أدناه والمحاولة مرة أخرى.","يُرجى تصحيح المشاكل المُدرجة أدناه والمحاولة مرة أخرى.","يُرجى تصحيح المشاكل المُدرجة أدناه والمحاولة مرة أخرى.","يُرجى تصحيح المشاكل المُدرجة أدناه والمحاولة مرة أخرى.","يُرجى تصحيح المشاكل المُدرجة أدناه والمحاولة مرة أخرى.","يُرجى تصحيح المشاكل المُدرجة أدناه والمحاولة مرة أخرى."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["نحن نتأكد من عدم وجود تهديدات أمنية في موقعك. سنخطرك إذا عثرنا على أي تهديدات."],"Your site is being backed up in real-time.":["جارٍ نسخ موقعك احتياطيًّا في وقت التشغيل."],"Jetpack version":["إصدار Jetpack"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}اعرض نشاط موقعك{{/a}} في موجز فردي."],"Activity":["النشاط"],"Confirm each new phrase you add by pressing enter.":["كوّن كل عبارة من العبارات الجديدة التي تضيفها عن طريق الضغط على enter."],"{{a}}View details{{/a}}":["{{a}}عرض التفاصيل{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["شكرًا لاختيار Jetpack Professional. يقوم Jetpack الآن بنسخ محتواك احتياطيًّا بشكل فوري وفهرسة محتواك للبحث وفحص التهديدات الأمنية ومنح حق الوصول إلى القوالب المتميزة."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["مع Jetpack الاحترافي، يمكنك إنشاء موقع مثالي باستخدام قالب واحد من أكثر من 300 قالب مصمم تصميمًا احترافيًا في ووردبريس، بينها أكثر من 100 قالب مميز. خصص المحتوى الخاص بك باستخدام مجموعة متنوعة من عناصر واجهة المستخدم، أو أضف فيديوهات غير محدودة إلى مقالاتك وصفحاتك -- تُعرض بدون إعلانات أو علامات مائية."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["تَسْهُل زيادة عدد متابعيك مع خطتك الاحترافية، وبفضل مشاركة المحتوى وجدولته، وأدوات تحسين محركات البحث، وخيارات الاشتراك المدمجة. يمكنك تحقيق أرباح من موقعك مع زر المدفوعات البسيطة وعبر الاستفادة من الإعلانات الداخلية، ومراقبة نجاح جهودك عن طريق التكامل مع Google Analytics."],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["تمنحك خطة Jetpack كل ما تحتاج إليه للحفاظ على عملك الشاق في مأمن، بما في ذلك عمليات النسخ الاحتياطي عند الطلب وعمليات فحص البرامج الضارة، بنقرة واحدة لإجراء عمليات الاستعادة وحل المشكلات. ستتم حماية موقعك بالكامل ضد البريد المزعج، والتعليمات البرمجية الضارة، ومحاولات تسجيل الدخول بالقوة الغاشمة."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["ابدأ في استكشاف Jetpack الاحترافي الآن للاطلاع على جميع ميزات باقتك الجديدة."],"Install premium themes":["تثبيت القوالب المميزة"],"Review SEO features":["مراجعة ميزات تحسين محرك البحث"],"Welcome Professional":["مرحبًا بالاحترافي"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["شكرًا لاختيار باقة Jetpack المميز. ينسخ Jetpack الآن موقعك احتياطيًا، ويفحص أي تهديدات أمنية، ويُمكّن ميزات تحقيق الأرباح."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["مع Jetpack المميز، يمكنك إنشاء الموقع المثالي، بصرف النظر عن الغرض المنشود منه. خصص مظهر موقعك مع قالب واحد من أكثر من 200 قالب مجاني، أو عزز المحتوى الخاص بك مع مساحة 13 جيجابايت من الفيديوهات عالية الدقة -- وجميعها مستضاف وخالٍ من الإعلانات أو العلامات المائية."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["باستخدام أدوات المشاركة الفعالة في Jetpack، يمكنك مشاركة أحدث المقالات تلقائيًا على وسائل التواصل الاجتماعي، أو جدولة المحتوى الخاص بك لمشاركته مجددًا في أي تاريخ أو وقت تختار. بالإضافة إلى زيادة عدد متابعيك، يمكنك زيادة أعمالك باستخدام أدوات مثل أزرار الدفع والإعلانات."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["ابدأ في استكشاف Jetpack المميز الآن للاطلاع على جميع ميزات باقتك الجديدة."],"Monetize your site with ads":["تحقيق الأرباح من موقعك باستخدام الإعلانات"],"Welcome Premium":["مرحبًا بالمميز"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["شكرًا لاختيار باقة Jetpack الشخصي. ينسخ Jetpack الآن موقعك احتياطيًا ويفحص أي تهديدات أمنية."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["مع Jetpack الشخصي، يحق لك الوصول إلى أكثر من 100 قالب مصمم تصميمًا احترافيًا على ووردبريس. اختر القالب المناسب أكثر لموقعك وخصص ألوانًا وصورًا، أو أضف مجموعة متنوعة من عناصر واجهة المستخدم الجديدة."],"Got it":["فهمت!"],"Welcome personal":["مرحبًا بالشخصي"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["عن طريق النقر على الزر أدناه، أنت توافق على {{tosLink}}شروط الخدمة{{/tosLink}} لدينا وعلى {{shareDetailsLink}}مشاركة التفاصيل{{/shareDetailsLink}} مع ووردبريس.كوم."],"Jetpack Stats People":["صورة أشخاص ينتظرون إلى إحصاءات Jetpack"],"Hello there! Your stats have been activated.":["مرحبًا! تم تنشيط إحصاءاتك."],"Just give us a little time to collect data so we can display it for you here.":["أعطنا بعض الوقت لجمع البيانات لكي نتمكن من عرضها لك هنا."],"Okay, got it!":["حسنًا، فهمت!"],"Display ads below posts on":["عرض الإعلانات أسفل المقالات على"],"Additional ad placements":["مواضع الإعلانات الإضافية"],"Top of each page":["الجزء العلوي من كل صفحة"],"Second ad below post":["إعلان ثانٍ أسفل المقالة"],"Archives":["الأرشيف"],"Explore Professional":["استكشف الخيار الاحترافي"],"Compare All Plans":["مقارنة جميع الباقات"],"Person with laptop":["شخص لديه كمبيوتر محمول"],"Your Jetpack site is ready to go!":["موقع Jetpack الخاص بك جاهز للاستخدام!"],"Stars":["النجوم"],"Jupiter":["كوكب المشتري"],"Welcome to Jetpack Personal":["مرحبًا بك في Jetpack Personal"],"Welcome to Jetpack Premium":["مرحبًا بك في Jetpack Premium"],"Welcome to Jetpack Professional":["مرحبًا بك في Jetpack Professional"],"Schedule posts":["جدولة المقالات"],"Activate Publicize":["تنشيط النشر"],"Your site is backed up.":["تم نسخ موقعك احتياطيًا."],"Image Performance":["أداء الصور"],"Get WordPress Apps for every device":["الحصول على تطبيقات ووردبريس الخاصة بكل جهاز"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["إدارة كل مواقعك من لوحة تحكم واحدة: نشر المحتوى وتتبع الإحصاءات والتعليقات المتوسطة والمزيد من أي مكان في العالم."],"I already use this app.":["أستخدم بالفعل هذه التطبيق."],"Create address":["إنشاء عنوان"],"Priority support":["دعم ذو أولوية"],"Add sharing buttons to your posts":["إضافة أزرار المشاركة إلى مقالاتك"],"Automatically share your posts to social networks":["مشاركة مقالاتك تلقائيًا على شبكات التواصل الاجتماعي"],"Updating settings…":["جارٍ تحديث الإعدادات..."],"Updating Post by Email address…":["جارٍ تحديث المقالة باستخدام عنوان البريد الإلكتروني..."],"Your paid plan gives you access to prioritized Jetpack support.":["تتيح لك باقتك المدفوعة الوصول إلى دعم Jetpack ذي الأولوية."],"You have paid for backups but they're not yet active.":["لقد دفعتَ للنسخ الاحتياطية ولكن لم يتم تفعيلها حتى الآن."],"You have paid for backups and security scanning but they’re not yet active.":["لقد دفعتَ للنسخ الاحتياطية وفحص الأمان ولكن لم يتم تفعيلهما حتى الآن."],"Click \"Set Up\" to finish installation.":["انقر على \"إعداد\" لإنهاء التثبيت."],"Checking site status…":["جارٍ التحقق من حالة الموقع..."],"Pages":["صفحات"],"We're here to help":["نحن هنا للمساعدة"],"Jetpack comes with free, basic support for all users.":["يأتي Jetpack بدعم مجاني وأساسي لجميع المستخدمين."],"Ask a question":["طرح الأسئلة"],"Search our support site":["البحث في موقع الدعم"],"Get a faster resolution to your support questions.":["احصل على أسرع جواب عن أسئلة الدعم لديك."],"Host fast, high-quality, ad-free video.":["استضافة مقاطع الفيديو بسرعة وبجودة عالية وبدون إعلانات."],"Generate income with high-quality ads.":["تحقيق دخل من الإعلانات ذات الجودة العالية."],"Real-time site backups and automatic threat resolution.":["نسخ احتياطية فورية للموقع وحل تلقائي للتهديدات."],"Protect against data loss, malware, and malicious attacks.":["الحماية من فقدان البيانات والبرامج والهجمات الضارة."],"Integrate easily with Google Analytics.":["الاندماج بسهولة مع تحليلات غوغل."],"Help your content get found and shared with SEO tools.":["ساعد على العثور على محتواك ومشاركته باستخدام أدوات SEO."],"Protect your site from spam.":["حماية موقعك من البريد المزعج."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["هذا الموقع غير متصل بـ WordPress.com. يُرجى طلب الاتصال من مسؤول الموقع."],"Spam filtering":["تصفية البريد المزعج"],"Daily, automated malware scanning":["فحص البرامج الضارة بصورة آلية يوميًا"],"Daily, automated backups (unlimited storage)":["نسخ احتياطية بصورة آلية يوميًا (تخزين غير محدود)"],"Daily, automated malware scanning with automated resolution":["فحص البرامج الضارة بصورة آلية يوميًا بحل تلقائي"],"Unlimited, high-speed video hosting":["استضافة مقاطع الفيديو بسرعة عالية غير محدودة"],"SEO preview tools":["أدوات معاينة SEO"],"Site stats, related content, and sharing tools":["إحصاءات الموقع والمحتوى ذي الصلة وأدوات المشاركة"],"Brute force attack protection and downtime monitoring":["الحماية من هجمات القوة الغاشمة ومراقبة وقت التعطّل"],"Unlimited, high-speed image hosting":["استضافة الصور بسرعة عالية غير محدودة"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["عند قطع الاتصال%(siteName)s بموقع WordPress.com، لن تتمكن بعد الآن من الوصول إلى ما يلي:"],"Read more about Jetpack benefits":["اقرأ المزيد عن ميزات Jetpack"],"An Automattic Airline":["شركة أوتوماتيك لخدمات التدوين"],"Manage site connection":["إدارة الاتصال بالموقع"],"Connect your account to WordPress.com to view more stats":["وصّل حسابك بـ WordPress.com لعرض المزيد من الإحصاءات"],"Theme enhancements":["تحسينات القوالب"],"Load more posts using the default theme behavior":["تحميل المزيد من المقالات باستخدام سلوك القالب الافتراضي"],"Load more posts in page with a button":["تحميل المزيد من المقالات في الصفحة باستخدام زر معين"],"Load more posts as the reader scrolls down":["تحميل المزيد من المقالات عندما يمرر القارئ إلى أسفل"],"Theme support required.":["يلزم دعم القالب."],"Learn more about adding support for Infinite Scroll to your theme.":["اعرف المزيد عن إضافة الدعم للتمرير اللانهائي وصولاً إلى القالب الخاص بك."],"Use excerpts instead of full posts on front page and archive pages":["استخدام مقتطفات على الصفحة الرئيسية وعلى صفحات الأرشيف بدلاً من المقالات الكاملة"],"Show featured images":["إظهار الصور المميزة"],"Enable the WordPress.com toolbar":["تمكين شريط أدوات WordPress.com"],"Writing tools available to you will be shown here when an administrator enables them.":["سيتم عرض أدوات الكتابة المتاحة لك هنا عندما يقوم مسؤول بتمكينها."],"Portfolios":["معارض الأعمال"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["لاحظ أن {{b}}التحقق من موقعك باستخدام هذه الخدمات ليس ضروريًا {{/b}}لضمان فهرسة موقعك حسب محركات البحث. لاستخدام أدوات محركات البحث المتقدمة هذه والتحقق من موقعك باستخدام خدمة ما، ألصق كود وسم HTML أدناه. اقرأ {{support}}التعليمات الكاملة {{/support}}إذا كنت تواجه مشكلة. خدمات التحقق المدعومة: {{google}}وحدة تحكم بحث جوجل{{/google}} و{{bing}}أدوات مشرفي موقع محرك البحث بينغ{{/bing}} و{{pinterest}}التحقق من موقعك باستخدام بينتيريست {{/pinterest}}و{{yandex}}مشرفو موقع محرك البحث يندكس{{/yandex}}."],"Bing":["بينغ"],"Yandex":["يندكس"],"Generate XML sitemaps":["إنشاء خرائط الموقع XML"],"Collecting valuable traffic stats and insights":["جمع إحصاءات المرور والرؤى القيمة."],"The image helps collect stats, but should work when hidden.":["تساعد الصورة على جمع الإحصاءات ولكن ينبغي أن تعمل عند إخفائها."],"Count logged in page views from":["قم بعدّ مشاهدات الذين سجلوا الدخول إلى الصفحة من"],"Allow stats reports to be viewed by":["السماح بعرض تقارير الإحصاءات حسب"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["يمكنك إدخال تعديلات على هذه الإعدادات إذا كنت ترغب في تحكم أكثر تقدمًا. اقرأ المزيد حول ما الذي يمكنك فعله {{a}}لتحسين نظام SEO الخاص بموقعك{{/a}}."],"Configure your SEO settings":["تكوين إعدادات SEO لديك"],"In \"Upgrade\"":["قيد \"الترقية\""],"Configure your Google Analytics settings":["تكوين إعدادات تحليلات غوغل لديك"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["إظهار إعلانات في أول مقالة على صفحتك الرئيسية أو في نهاية كل صفحة ومقالة. وضع إعلانات إضافية في الجزء العلوي من موقعك وفي منطقة المربع الجانبي لزيادة الأرباح."],"Enable ads and display an ad below each post":["تمكين الإعلانات وعرض إعلان أسفل كل مقالة"],"Configure your sharing buttons":["تكوين أزرار المشاركة"],"Connect your social media accounts":["توصيل حسابات وسائل التواصل الاجتماعي الخاصة بك"],"Match accounts using email addresses":["مطابقة الحسابات باستخدام عناوين البريد الإلكتروني"],"Require accounts to use WordPress.com Two-Step Authentication":["يلزم حسابات لاستخدام مصادقة ووردبريس.كوم على خطوتين"],"Add to whitelist":["إضافة إلى قائمة السماح"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["يمكنك إدراج عنوان IP أو سلسلة عناوين في قائمة السماح، الأمر الذي يعمل على منعهم من الحظر بواسطة Jetpack. IPv4 وIPv6 مقبولان. لتحديد نطاق، أدخل القيمة المنخفضة والقيمة المرتفعة مفصولاً بينهما بشرطة. على سبيل المثال: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["أصبح موقعك منسوخًا احتياطيًا وبدون تهديدات."],"Checking your spam protection…":["جارٍ التحقق من الحماية من البريد المزعج…"],"Fetching key…":["جارٍ إحضار المفتاح…"],"Your site needs an Antispam key.":["يحتاج موقعك إلى مفتاح Antispam."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["توجد مشكلة في مفتاح API الخاص بـ Antispam. {{a}}تعرف على المزيد{{/a}}."],"Your site is not protected from spam.":["لم تتم حماية موقعك من البريد المزعج."],"Your Antispam key is valid.":["مفتاح Antispam صالح."],"Your site is protected from spam.":["موقعك محمي من البريد المزعج."],"Checking key…":["جارٍ التحقق من المفتاح…"],"Your API key":["مفتاح واجهة برمجة التطبيقات (API)"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["إذا لم يكن لديك مفتاح API بالفعل، فمن ثم {{a}}احصل على مفتاح API من هنا{{/a}}، وسيتم توجيهك خلال عملية الحصول على مفتاح."],"No search results found for %(term)s":["لم يتم العثور على نتائج بحث لـ %(term)s"],"Enter a search term to find settings or close search.":["أدخل مصطلح بحث لإيجاد الإعدادات أو أغلق البحث."],"Connections":["اتصالات"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["موقعك في وضع التطوير، لذا لا يمكن اتصاله بـ ووردبريس.كوم."],"Your site is connected to WordPress.com.":["موقعك متصل بـ ووردبريس.كوم."],"You are the Jetpack owner.":["أنت مالك Jetpack."],"Connected as {{span}}%(username)s{{/span}}":["متصل بصفة{{span}}%(username)s{{/span}}"],"View your Email Followers":["عرض متابعي البريد الإلكتروني"],"Color scheme":["نظام الألوان"],"Enable Markdown use for comments.":["تمكين استخدام التمييز للتعليقات."],"Updated settings.":["تم تحديث الإعدادات."],"Error updating settings. %(error)s":["حدث خطأ أثناء تحديث الإعدادات. %(error)s"],"Regenerated Post by Email address.":["تمت إعادة إنشاء مقالة باستخدام عنوان البريد الإلكتروني."],"Error regenerating Post by Email address. %(error)s":["حدث خطأ أثناء إعادة إنشاء مقالة باستخدام عنوان البريد الإلكتروني. %(error)s"],"Updated settings. Refreshing page…":["تم تحديث الإعدادات. جارٍ تحديث الصفحة…"],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["حاليًا في {{a}}وضع التطوير{{/a}} (بعض الميزات معطّلة) لأن:"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["عامل تصفية jetpack_development_mode نشط"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["ثابت JETPACK_DEV_DEBUG محدد"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["ينقص عنوان URL الخاص بموقعك نقطة (على سبيل المثال http://localhost)"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics هي خدمة مجانية تُكمل {{a}}الإحصاءات المدمجة{{/a}} الخاصة بنا برؤى مختلفة داخل حركة المرور الخاصة بك. تستخدم إحصاءات WordPress.com وGoogle Analytics وسائل مختلفة لتحديد النشاط وتتبعه على موقعك، لذا ستعرض كل منهما بطبيعة الحال إجماليات مختلفة قليلاً للزيارات والمشاهدات الخاصة بك وغير ذلك."],"Google Analytics":["تحليلات غوغل"],"Configure Google Analytics":["تكوين Google Analytics"],"Activate Google Analytics":["تفعيل تحليلات غوغل"],"Download the free apps":["تنزيل التطبيقات المجانية"],"Upgrade Focus: VideoPress For Weddings":["تركيز الترقية: فيديوبرس لحفلات الزفاف"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}يمكنك أيضًا تكوين المقالات المرتبطة في أداة التخصيص الآن. {{ExternalLink}}جرِّبه!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["تُعرض الإعلانات بصورة افتراضية في نهاية كل صفحة أو مقالة أو المقالة الأولى على الصفحة الرئيسية. كما يمكنك أيضًا إضافتها إلى الجزء العلوي من موقعك وإلى منطقة المربع الجانبي لزيادة الأرباح!"],"Display an ad unit at the top of your site.":["عرض وحدة إعلان في أعلى موقعك."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["عن طريق تنشيط الإعلانات، توافق على {{link}}شروط خدمة{{/link}} إعلانات Automattic."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["تم تكوين الخادم الخاص بك بصورة غير صحيحة، وهذا يعني أنه يتعذر على Jetpack Protect حماية موقعك بفاعلية."],"In \"Mobile\"":["في \"المحمول\""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}تكوين إعدادات تنبيهات Monitor على وردبرس.كوم{{/link}}"],"View your earnings":["عرض أرباحك"],"Configure site SEO":["تكوين SEO للموقع"],"Activate SEO tools":["تنشيط أدوات SEO"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["لبدء الاستخدام، انقر فوق \"إضافة وسائط\" في محرر المقالات وحمّل مقطع فيديو؛ سنهتم بالباقي!"],"Video Hosting":["استضافة مقاطع فيديو"],"SEO Tools":["أدوات SEO"],"Advanced SEO tools to help your site get found when people search for relevant content.":["أدوات SEO متقدمة لتساعد موقعك على الظهور عند البحث عن محتوى ذي صلة."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["أسهل طريقة لتحميل مقاطع فيديو خالية من الإعلانات ولا تحمل علامات تجارية معينة على موقعك. يمكن أن تحصل على إحصاءات بشأن تشغيل الفيديو والمشاركات، كما أن المشغل خفيف الوزن وعالي الاستجابة."],"You are running Jetpack on a staging server.":["أنت بصدد تشغيل Jetpack على خادم مرحلي."],"More Info":["المزيد من المعلومات"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}مشاهدة إدارة الإعجابات من إعدادات الوحدة النمطية للمشاركة{{/a}}"],"Your current IP: %(ip)s":["IP الحالي الخاص بك: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["توجد إعدادات غير محفوظة في علامة التبويب هذه ستُفقد إذا تركتها. هل تريد المتابعة؟"],"This will reset all Jetpack options, are you sure?":["سيؤدي ذلك إلى إعادة تعيين جميع خيارات Jetpack، هل أنت متأكد؟"],"Search for a Jetpack feature.":["البحث عن إحدى مزايا Jetpack."],"Configure your Security Scans":["تكوين فحوصات الأمان"],"Subscriber":["مشترك"],"Big iPhone/iPad Update Now Available":["تحديث Big iPhone/iPad متوفر الآن"],"The WordPress for Android App Gets a Big Facelift":["تجري حاليًا صيانة تطبيق وردبرس للأندرويد"],"WordPress.com Likes are:":["إعجابات وردبرس.كوم هي:"],"Comments headline":["عنوان التعليقات"],"A few catchy words to motivate your readers to comment.":["بضع كلمات جذابة لتحفيز القراء على التعليق."],"Show a \"follow blog\" option in the comment form":["إظهار خيارات \"متابعة الموقع\" في نموذج التعليقات"],"Show a \"follow comments\" option in the comment form":["إظهار خيار \"متابعة التعليقات\" في نموذج التعليقات."],"Put a chart showing 48 hours of views in the admin bar":["وضع مخطط يعرض المشاهدات خلال آخر 48 ساعة في شريط تنبيهات المدير"],"Hide the stats smiley face image":["إخفاء الإحصائيات لصورة وجه الابتسامة"],"Whitelisted IP addresses":["عناوين IP المدرجة في قائمة السماح"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["إظهار دعاية عن تطبيق وردبرس للجوال في تذييل قالب الجوال"],"Copied!":["تم النسخ!"],"Highlight and copy the following text to your clipboard:":["ميز النص التالي وانسخه إلى الحافظة لديك:"],"Regenerate address":["إعادة إنشاء العنوان"],"Automatically proofread content when: ":["تدقيق المحتوى تلقائياً في الحالات التالية: "],"A post or page is first published":["تُنشر مقالة أو صفحة أولاً"],"A post or page is updated":["يتم تحديث مقالة أو صفحة"],"Automatic Language Detection":["اكتشاف اللغة تلقائيًا"],"The proofreader supports English, French, German, Portuguese and Spanish.":["يدعم المدقق اللغوي الإنجليزية والفرنسية والألمانية والبرتغالية والإسبانية."],"Enable proofreading for the following grammar and style rules: ":["تمكين التدقيق اللغوي لتطبيق قواعد النحو والأسلوب التالية: "],"Add a phrase":["إضافة عبارة"],"Cheatin' uh?":["عفواً، لا تملك الصلاحية الكافية."],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}هل لديك أي مانع من إخبارنا بسبب عدم إكمال اتصال Jetpack في هذا {{a}}الاستبيان المؤلف من سؤالين{{/a}}؟{{/p}}{{p}}يلزم اتصال Jetpack لكي تعمل ميزتا الأمان والمرور اللتان نقدمهما.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["مرحبًا بك في {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["Jetpack متصل بالفعل."],"You're fueled up and ready to go, Jetpack is now active.":["أنت الآن على أهبة الاستعداد للبدء، Jetpack نشط الآن."],"You're fueled up and ready to go.":["أنت الآن على أهبة الاستعداد للبدء."],"You are currently running a development version of Jetpack.":["أنت حاليًا بصدد تشغيل نسخة مطوَّرة من Jetpack."],"Submit Beta feedback":["ملاحظات إرسال بيتا"],"What would you like to see on your Jetpack Dashboard?":["ماذا تود أن تشاهد في لوحة تحكم Jetpack؟"],"Let us know!":["دعنا نعرف!"],"Saving…":["جارٍ الحفظ..."],"Save Settings":["حفظ الإعدادات"],"Jetpack Stats Icon":["أيقونة إحصاءات Jetpack"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}تفعيل إحصاءات الموقع{{/a}} لمشاهدة الإحصاءات والإعجابات والمتابعين والمشتركين وغيرها المزيد من البيانات التفصيلية! {{a1}}اعرف المزيد{{/a1}}"],"Activate Site Stats":["تفعيل إحصاءات الموقع"],"Security Scanning":["فحص الأمان"],"Site Backups":["نُسخ احتياطية لموقعك"],"Upgrade":["ترقية"],"ACTIVE":["مفعّل"],"Your site is on Development Mode":["موقعك في وضع التطوير"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["بمجرد الاتصال، يمكنك الترقية إلى باقة مدفوعة لإلغاء قفل الأمان العالمي واستخدام أدوات الحماية من البريد المزعج والحصول على الدعم ذي الأولوية."],"View your spam stats":["عرض إحصاءات البريد المزعج"],"View your security dashboard":["عرض لوحة تحكم الأمان"],"The site is in Development Mode, so you can not connect to WordPress.com.":["الموقع في وضع التطوير، ولذا لا يمكنك الاتصال بوردبرس.كوم."],"Link your account to WordPress.com to get the most out of Jetpack.":["اربط حسابك بوردبرس.كوم لتحقيق أقصى استفادة من Jetpack."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["لفحص تهديدات الأمان بصورة آلية وشاملة، يُرجى {{a}}تثبيت VaultPress{{/a}} وتفعيله."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["لفحص تهديدات الأمان بصورة آلية وشاملة، يُرجى {{a}}ترقية حسابك{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["يقوم Jetpack بحظر محاولات تسجيل الدخول الضارة بفعالية. ستظهر البيانات هنا قريبًا!"],"Total malicious attacks blocked on your site.":["إجمالي الهجمات الضارة المحظورة على موقعك."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}قم بتفعيل الحماية{{/a}} لحماية موقعك من محاولات تسجيل الدخول الضارة."],"All plugins are up-to-date. Awesome work!":["كل الإضافات محدثة. عمل رائع!"],"Jetpack is improving and optimizing your image speed.":["يقوم Jetpack بتحسين سرعة الصور وتطويرها."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["يقوم Jetpack بمراقبة موقعك. إذا كنا نعتقد أن موقعك معطل، فستتلقى بريدًا إلكترونيًا."],"Security":["الأمان"],"Performance":["الأداء"],"Backups":["عمليات النسخ الاحتياطي"],"{{a}}View backup details{{/a}}.":["{{a}}عرض تفاصيل النسخة الاحتياطية{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["لنسخ موقعك بأكمله احتياطيًا بصورة تلقائية، يُرجى {{a}}تثبيت VaultPress{{/a}} وتنشيطه."],"Unavailable in Dev Mode.":["غير متوفر في وضع التطوير."],"Spam Protection":["الحماية من البريد المزعج"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["بالنسبة إلى الدفاع ضد أحدث أنواع البريد المزعج، يُرجى {{a}}تثبيت أكيسميت{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["بالنسبة إلى الدفاع ضد أحدث أنواع البريد المزعج، يُرجى {{a}}تفعيل أكيسميت{{/a}}."],"Invalid key":["مفتاح غير صالح"],"Unavailable in Dev Mode":["غير متوفر في وضع التطوير"],"Activating recommended features…":["تفعيل الميزات الموصى بها…"],"Recommended features active.":["الميزات الموصى بها مفعلة."],"Recommended features failed to activate. %(error)s":["فشل تفعيل الميزات الموصى بها. %(error)s"],"Activating %(slug)s…":["جارٍ تفعيل %(slug)s…"],"%(slug)s has been activated.":["تم تفعيل %(slug)s."],"%(slug)s failed to activate. %(error)s":["فشل تفعيل %(slug)s. %(error)s"],"Deactivating %(slug)s…":["جارٍ إلغاء تفعيل %(slug)s…"],"%(slug)s has been deactivated.":[" تم إلغاء تفعيل %(slug)s."],"%(slug)s failed to deactivate. %(error)s":[" فشل إلغاء تفعيل %(slug)s. %(error)s"],"Updating %(slug)s settings…":["جارٍ تحديث إعدادات %(slug)s…"],"Updated %(slug)s settings.":["تم تحديث إعدادات %(slug)s."],"Error updating %(slug)s settings. %(error)s":["حدث خطأ أثناء تحديث إعدادات %(slug)s. %(error)s"],"Updating %(slug)s address…":["جارٍ تحديث عنوان %(slug)s…"],"Regenerated %(slug)s address .":["تمت إعادة إنشاء عنوان %(slug)s."],"Error regenerating %(slug)s address. %(error)s":["حدث خطأ أثناء إعادة إنشاء عنوان %(slug)s. %(error)s"],"Resetting Jetpack options…":["جارٍ إعادة تعيين خيارات Jetpack..."],"Options reset.":["تمت إعادة تعيين الخيارات."],"Options failed to reset.":["فشلت إعادة تعيين الخيارات."],"There was an error disconnecting Jetpack. Error: %(error)s":["حدث خطأ أثناء قطع اتصال Jetpack. خطأ: %(error)s"],"Unlinking from WordPress.com":["إلغاء الربط بوردبرس.كوم"],"Unlinked from WordPress.com.":["تم إلغاء الربط بوردبرس.كوم."],"Error unlinking from WordPress.com. %(error)s":["حدث خطأ أثناء إلغاء الربط بوردبرس.كوم. %(error)s"],"At A Glance":["نبذة سريعة"],"Clichés":["العبارات المبتذلة"],"Dashboard":["لوحة التحكم"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["هل تريد أن تُخبرنا السبب؟ ستساعدنا {{a}}الإجابة عن سؤالين بسيطين فقط{{/a}} على تحسين Jetpack."],"Automattic's Privacy Policy":["سياسة خصوصية Automattic"],"WordPress.com Terms of Service":["شروط خدمة وردبرس.كوم"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}قم بتفعيل الفوتون{{/a}} لتحسين أداء صورك وسرعتها."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}تشغيل التحديثات التلقائية للمكوّنات الإضافية{{/a}}"],"Plugin Updates":["تحديثات الإضافات"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["لنسخ موقعك بأكمله احتياطيًّا بصورة تلقائية، يُرجى {{a}}ترقية حسابك{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["يا للهول! مفتاح Akismet الخاص بك مفقود أو غير صالح. {{akismetSettings}}انتقل إلى إعدادات أكيسميت لإصلاح{{/akismetSettings}}."],"No threats found, you're good to go!":["لم يتم العثور على تهديدات، يمكنك الانتقال!"],"{{a}}Contact Support{{/a}}":["{{a}}اتصل بالدعم{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}اعرض التفاصيل على VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["عفوًا تم العثور على تهديد %(number)s.","عفوًا تم العثور على تهديدات %(number)s.","عفوًا تم العثور على تهديدات %(number)s.","عفوًا تم العثور على تهديدات %(number)s.","عفوًا تم العثور على تهديدات %(number)s.","عفوًا تم العثور على تهديدات %(number)s."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}يمكنك تنشيط المراقبة{{/a}} لاستلام إشعارات عبر البريد الإلكتروني إذا تعطّل موقعك."],"Loading…":["جارٍ التحميل..."],"Downtime monitoring":["مراقبة فترة التوقف"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}عرض المزيد من الإحصاءات على وردبرس.كوم {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}عرض الإحصاءات القديمة{{/button}}"],"All-time comments":["تعليقات طوال الوقت"],"All-time views":["مشاهدات طوال الوقت"],"%(number)s View":["%(number)s مشاهدة","%(number)s مشاهدات","%(number)s مشاهدات","%(number)s مشاهدات","%(number)s مشاهدات","%(number)s مشاهدات"],"Best overall day":["اليوم الأفضل إجمالاً"],"Views today":["المشاهدات في الوقت الحاضر"],"Months":["شهور"],"Weeks":["أسابيع"],"Days":["أيام"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["حدث شيء ما أثناء تحميل الإحصاءات. يُرجى المحاولة مرة أخرى لاحقًا أو {{a}}عرض إحصاءاتك الآن على وردبرس.كوم{{/a}}"],"Click to view detailed stats.":["انقر لعرض الإحصاءات التفصيلية."],"Views: %(numberOfViews)s":["مشاهدات: %(numberOfViews)s"],"Week of %(date)s":["أسبوع %(date)s"],"Site Security":["أمان الموقع"],"Activate recommended features":["قم بتفعيل الميزات الموصى بها"],"Link to WordPress.com":["الربط بوردبرس.كوم"],"Unlink me from WordPress.com":["ألغ إعجابك بي من وردبرس.كوم"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["حدثت مشكلة أثناء اتصال Jetpack الخاص بك. يُرجى النقر على \"الاتصال بوردبرس.كوم\" مرة أخرى."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["لقد حدثت مشكلة أثناء اتصال Jetpack، قم بتعطيل إضافة Jetpack ثم قم بتفعيلها واتصل مرة أخرى."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["يتعين عليك الاستمرار في تسجيل الدخول إلى مدونة وردبرس أثناء مصادقة Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}توجد مشكلة في Jetpack الخاص بك.{{/s}} نأسف للإزعاج. يُرجى المحاولة مرة أخرى لاحقًا، وفي حال استمرار المشكلة يُرجى الاتصال بالدعم من خلال هذه الرسالة: %(error_key)s"],"Disconnecting Jetpack":["قطع اتصال Jetpack"],"Learn more":["تعرف على المزيد"],"Posts":["تدوينات"],"Front page":["الصفحة الرئيسية"],"Upload videos":["رفع وسائط الفيديو"],"Pinterest":["Pinterest"],"Google":["قوقل"],"Show related content after posts":["إظهار المحتوى المتعلق بعد التدوينات"],"Related":["مرتبط"],"Save":["حفظ"],"Email Address":["عنوان البريد الإلكتروني"],"Media":["وسائط"],"Themes":["القوالب"],"Site Stats":["إحصائيات الموقع"],"Sharing":["المشاركة"],"Testimonials":["الشهادات"],"Cancel":["إلغاء"],"Comments":["تعليقات"],"Ignored Phrases":["تجاهل العبارات"],"Use automatically detected language to proofread posts and pages":["استخدم الكشف التلقائي للغة لتستخدم التدقيق اللغوي في المواضيع والصفحات"],"Redundant Phrases":["عبارات مكررة"],"Phrases to Avoid":["العبارات التي يجب تجنبها"],"Passive Voice":["المبني للمجهول"],"Jargon":["اللهجة الغريبة"],"Hidden Verbs":["أفعال مخفية"],"Double Negatives":["السلبيات المزدوجة"],"Diacritical Marks":["علامات التشكيل أو أحرف العلة"],"Complex Phrases":["الجمل المعقدة"],"Bias Language":["التحيز باللغة"],"English Options":["خيارات اللغة الإنكليزية"],"Proofreading":["التدقيق اللغوي"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["يتعذر على Jetpack الاتصال بوردبرس.كوم: %(error_key)s. يعني هذا عادة أن هناك شيئًا ما تم تكوينه تكوينًا غير صحيح على مضيف الويب الخاص بك."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["يوجد مشاكل حالياً مع WordPress.com وغير قادر على الربط مع Jetpack. يرجى المحاولة مرة أخرى في وقت لاحق."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}توجد مشكلة في Jetpack الخاص بك.{{/s}} ربط موقعك بوردبرس.كوم غير ممكن. يعني هذا عادة أن موقعك لا يمكن وصول العامة إليه (مضيف محلي)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["يجب أن يكون موقعك على الويب قابلاً للوصول من قبل العامة لاستخدام Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["قطعتَ اتصال Jetpack بنجاح."],"Edit":["تحرير"],"Connected":["متصل"],"Activate":["تفعيل"],"Active":["مفعل"],"Search":["بحث"],"Settings":["الإعدادات"],"Learn More":["تعلم المزيد"],"Disconnect Jetpack":["قطع الاتصال بـ Jetpack"],"Test your site’s compatibility with Jetpack.":["اختبر مدى توافق موقعك مع Jetpack."],"Settings header\u0004Plugin Autoupdates":["تحديثات تلقائية للمكوِّن الإضافي"],"Settings header\u0004Downtime monitoring":["رصد التعطل"],"Settings header\u0004Privacy Settings":["إعدادات الخصوصية"],"Settings header\u0004WordPress.com toolbar":["شريط أدوات WordPress.com"],"Settings header\u0004Composing":["إنشاء"],"Settings header\u0004Site stats":["إحصاءات الموقع"],"Settings header\u0004Search engine optimization":["تحسين محرك البحث"],"Settings header\u0004Google Analytics":["تحليلات غوغل"],"Settings header\u0004Sharing buttons":["أزرار المشاركة"],"Settings header\u0004Publicize connections":["اتصالات Publicize"],"Settings header\u0004Like buttons":["أزرار الإعجاب"],"Settings header\u0004WordPress.com log in":["تسجيل الدخول إلى WordPress.com"],"Settings header\u0004Brute force attack protection":["الحماية من هجمات القوة الغاشمة"],"Settings header\u0004Backups and security scanning":["النسخ الاحتياطية وفحص الأمان"],"Settings header\u0004Spam filtering":["تصفية البريد المزعج"],"Navigation item.\u0004Performance":["الأداء"],"Navigation item.\u0004My Plan":["خطتي"],"Navigation item.\u0004Dev Tools":["أدوات التطوير"],"Navigation item.\u0004Settings":["الإعدادات"],"Navigation item.\u0004Discussion":["مناقشة"],"Navigation item.\u0004Traffic":["المرور"],"Navigation item.\u0004Sharing":["مشاركة"],"Navigation item.\u0004At A Glance":["نبذة سريعة"],"Navigation item.\u0004Plans":["الخطط"],"Navigation item.\u0004Writing":["كتابة"],"Navigation item.\u0004Reset Options (dev only)":["أعد تعيين الخيارات (إصدارات التطوير فقط)"],"Navigation item.\u0004Security":["الأمان"],"Navigation item.\u0004At a Glance":["نبذة سريعة"],"Search term.\u0004terms of service":["شروط الخدمة"],"Search term.\u0004tos":["شروط الخدمة"],"Search term.\u0004gdpr":["gdpr"],"Search term.\u0004data":["البيانات"],"Search term.\u0004tracks":["المسارات"],"Search term.\u0004privacy":["الخصوصية"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["ترقية"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["ترقية"],"Button caption\u0004Saving…":["جارٍ الحفظ..."],"Button caption\u0004Save settings":["حفظ الإعدادات"],"A heading for a block of related posts.\u0004Related":["ذات صلة"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["معاينة"],"A caption for a button to cancel disconnection.\u0004Stay connected":["البقاء متصل"],"A caption for a button to disconnect.\u0004Disconnect":["قطع الاتصال"],"Short warning message\u0004Updates needed":["يلزم وجود تحديثات"],"Short label appearing near a paid feature configuration block.\u0004Paid":["مدفوع"],"A header for a preview area in the configuration screen.\u0004Preview":["معاينة"],"Ads header\u0004Ads":["الإعلانات"],"Dashboard widget header\u0004Site connection":["الاتصال بالموقع"],"Dashboard widget header\u0004Account connection":["توصيل الحساب"],"A caption for a small button to fix security issues.\u0004Threats":["التهديدات"],"A caption for a small button to fix security issues.\u0004FIX":["إصلاح"],"Short warning message about new threats found.\u0004Threats found!":["تم العثور على تهديدات!"],"Short warning message about site having no security scan.\u0004No scanning":["لا يوجد فحص"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["ترقية"],"Short message informing user that the site is secure.\u0004Secure":["تأمين"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["مفتاح غير صالح"],"Caption for a button to set up a feature.\u0004Set up":["إعداد"],"verb\u0004Copy":["نسخ"],"Shorthand for Privacy Policy.\u0004Privacy":["الخصوصية"],"Shorthand for Terms of Service.\u0004Terms":["الشروط"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["تصحيح الأخطاء"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["تم حظر التعليقات المزعجة."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-ary-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-ary-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index a22b50ae..00000000
--- a/plugins/jetpack/languages/json/jetpack-ary-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;","lang":"ar_MA"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":[""],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":[""],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":[""],"Save Settings":[""],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":[""],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found.","Uh oh, %(number)s threats found.","Uh oh, %(number)s threats found.","Uh oh, %(number)s threats found.","Uh oh, %(number)s threats found."],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["","%(number)s Views","%(number)s Views","%(number)s Views","%(number)s Views","%(number)s Views"],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":["قطع اتصال Jetpack"],"Learn more":["تعرف على المزيد"],"Posts":["تدوينات"],"Front page":["الصفحة الرئيسية"],"Pinterest":["Pinterest"],"Google":["قوقل"],"Show related content after posts":["إظهار المحتوى المتعلق بعد التدوينات"],"Related":["مرتبط"],"Save":["حفظ"],"Email Address":["عنوان البريد الإلكتروني"],"Media":["وسائط"],"Themes":["القوالب"],"Site Stats":["إحصائيات الموقع"],"Sharing":["المشاركة"],"Testimonials":["الشهادات"],"Cancel":["إلغاء"],"Comments":["تعليقات"],"Ignored Phrases":["تجاهل العبارات"],"Use automatically detected language to proofread posts and pages":["استخدم الكشف التلقائي للغة لتستخدم التدقيق اللغوي في المواضيع والصفحات"],"Redundant Phrases":["عبارات مكررة"],"Phrases to Avoid":["العبارات التي يجب تجنبها"],"Passive Voice":["المبني للمجهول"],"Jargon":["اللهجة الغريبة"],"Hidden Verbs":["أفعال مخفية"],"Double Negatives":["السلبيات المزدوجة"],"Diacritical Marks":["علامات التشكيل أو أحرف العلة"],"Complex Phrases":["الجمل المعقدة"],"Bias Language":["التحيز باللغة"],"English Options":["خيارات اللغة الإنكليزية"],"Proofreading":["التدقيق اللغوي"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["يوجد مشاكل حالياً مع WordPress.com وغير قادر على الربط مع Jetpack. يرجى المحاولة مرة أخرى في وقت لاحق."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["يجب أن يكون موقعك متاح للعموم لاستخدام جيت باك: %(error_key)s"],"You have successfully disconnected Jetpack":[""],"Edit":["تحرير"],"Connected":["متصل"],"Activate":["تفعيل"],"Active":["مفعل"],"Search":["بحث"],"Settings":["الإعدادات"],"Learn More":["تعلم المزيد"],"Disconnect Jetpack":["قطع الاتصال بـ Jetpack"],"Test your site’s compatibility with Jetpack.":["اختبار مدى توافق موقعك مع جيت باك."],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-az-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-az-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 0febffe9..00000000
--- a/plugins/jetpack/languages/json/jetpack-az-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"az"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":[""],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":[""],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":[""],"Save Settings":[""],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":[""],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found."],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["","%(number)s Views"],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":[""],"Learn more":["Daha ətraflı"],"Posts":["Yazılar"],"Front page":["Ön səhifə"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Yazılardan sonra oxşar içəriyi göstər"],"Related":["Oxşar"],"Save":["Qeyd et"],"Email Address":["E-poçt ünvanı"],"Media":["Media"],"Themes":["Mövzular"],"Site Stats":["Sayt Statistikası"],"Sharing":["Paylaşma"],"Testimonials":["Xarakteristikalar"],"Cancel":["İmtina"],"Comments":["Şərhlər"],"Ignored Phrases":["Hesaba Alınmayan İfadələr"],"Use automatically detected language to proofread posts and pages":["Yazzılarda və səhifələrdə korrektor oxuması etmək üçün avtomatik olaraq təyin edilən dildən istifadə et"],"Redundant Phrases":["Yardımçı İfadələr"],"Phrases to Avoid":["Uzaq durulacaq İfadələr"],"Passive Voice":["Passiv Səs"],"Jargon":["Jarqon"],"Hidden Verbs":["Gizli Fellər"],"Double Negatives":["Qoşa Neqativlər"],"Diacritical Marks":["Səs dəyişdirtən İşarətlər"],"Complex Phrases":["Qarışıq İfadələr"],"Bias Language":["Bias Dili"],"English Options":["İngilis dili parametrləri"],"Proofreading":["Korrektə"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com-da hazırda bir problem var və Jetpack-ı dəstəkləyə bilmir. Lütfən daha sonra təkrar yoxlayın."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[""],"You have successfully disconnected Jetpack":[""],"Edit":["Redaktə et"],"Connected":["Bağlanıldı"],"Activate":["Aktivasiya"],"Active":["Aktiv"],"Search":["Axtar"],"Settings":["Parametrlər"],"Learn More":["Daha çox məlumat"],"Disconnect Jetpack":["Jetpack Bağlantısını Kəs"],"Test your site’s compatibility with Jetpack.":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-bg_BG-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-bg_BG-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index b4877d0b..00000000
--- a/plugins/jetpack/languages/json/jetpack-bg_BG-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"bg"},"Explore your Jetpack Professional plan!":[""],"Explore your Jetpack Premium plan!":[""],"Explore your Jetpack Personal plan!":[""],"Create account":[""],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":[""],"Real-time, automated backups (unlimited storage)":[""],"Compose content the way you want to and streamline your publishing experience.":[""],"Add a portfolio item":[""],"Add a testimonial":[""],"Maximize your site’s visibility in search engines and view traffic stats in real time.":[""],"Create a Jetpack account to use this feature":[""],"Share your content on social media and increase audience engagement.":[""],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":[""],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":[""],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":[""],"Error enabling Site accelerator. %(error)s":[""],"Site accelerator is now speeding up your site!":[""],"Enabling Site accelerator…":[""],"Error disabling site accelerator. %(error)s":[""],"Site accelerator is no longer speeding up your site!":[""],"Disabling site accelerator…":[""],"Load pages faster, optimize images, and speed up your visitors’ experience.":[""],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":[""],"High-speed, high-definition video hosting with no third-party ads.":[""],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":[""],"Marketing Automation":[""],"Activate Jetpack Search":[""],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":[""],"Start earning":[""],"WordAds lets you earn money by displaying promotional content. Start earning today.":[""],"Spam is automatically blocked from your comments.":[""],"Spam Filtering":[""],"Browse premium themes":[""],"Access hundreds of beautifully designed premium themes at no extra cost.":[""],"Try a premium theme":[""],"View settings":[""],"Create a Jetpack account to view your email followers":[""],"Open your site to comments and invite subscribers to get alerts about your latest work.":[""],"Manage security settings":[""],"Built-in Performance":[""],"Jetpack is ready for the new WordPress editor":[""],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":[""],"Build your Jetpack site with blocks":[""],"A new editor? Yes! {{a}}Learn more{{/a}}.":[""],"The features you rely on, adapted for the new WordPress editor.":[""],"Take me to the new editor":[""],"Testing Jetpack Connection":[""],"There was an error testing Jetpack. Error: %(error)s":[""],"New in Jetpack!":[""],"Speed up static file load times":[""],"Speed up image load times":[""],"Enable site accelerator":[""],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":[""],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":[""],"View your site activity":[""],"View a chronological list of all the changes and updates to your site in an organized, readable way.":[""],"Manually Verify ":[""],"Verify with Google":[""],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":[""],"or":["или"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":[""],"Your site is verified with Google":[""],"Site failed to verify: %(error)s":[""],"Verifying...":[""],"Add faster, more advanced searching to your site with Jetpack Professional.":[""],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":[""],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":[""],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":[""],"Jetpack Search supports many customizations.":[""],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":[""],"Site is verified":[""],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":[""],"Spam filtering and priority support.":[""],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":[""],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":[""],"Custom ads.txt entries":[""],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":[""],"Introducing Premium Themes":[""]," Premium Themes":[""],"Privacy information":[""],"Enable Lazy Loading for images":[""],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":[""],"Performance & speed":[""],"Enable high-speed, ad-free video player":[""],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":[""],"Video":["Видео"],"Carousel color scheme":[""],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":[""],"Show photo Exif metadata in carousel (when available)":[""],"Display images in a full-screen carousel gallery":[""],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":[""],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":[""],"Portfolios shortcode: [portfolio]":[""],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":[""],"Testimonials shortcode: [testimonials]":[""],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":[""],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":[""],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":[""],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":[""],"Configure related posts in the Customizer":[""],"Highlight related content with a heading":[""],"View security scan details":[""],"View backup history":[""],"Show a thumbnail image where available":[""],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":[""],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":[""],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":[""],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":[""],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":[""],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been disabled by a site administrator.":[""],"%(moduleName)s has been disabled by a site administrator.":[""],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":[""],"Configure your notification settings":[""],"Monitor your site's downtime":[""],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":[""],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":[""],"Plugin needs updating.":["","Plugins need updating."],"%(number)s":["","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":[""],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":[""],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":[""],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":[""],"Akismet checks your comments and contact form submissions against our global database of spam.":[""],"Privacy Information":[""],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":[""],"Add the Search (Jetpack) widget to your sidebar":[""],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":[""],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":[""],"Loads the next posts automatically when the reader approaches the bottom of the page.":[""],"Allows you to publish new posts by sending an email to a special address.":[""],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":[""],"Checks your content for correct grammar and spelling, misused words, and style while you write.":[""],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":[""],"Displays information on your site activity, including visitors and popular posts or pages.":[""],"Allows you to optimize your site and its content for better results in search engines.":[""],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":[""],"Displays high-quality ads on your site that allow you to earn income.":[""],"Adds sharing buttons to your content so that visitors can share it on social media sites.":[""],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":[""],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":[""],"Allows registered users to log in to your site with their WordPress.com accounts.":[""],"Protects your site from traditional and distributed brute force login attacks.":[""],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":[""],"Removes spam from comments and contact forms.":[""],"We are committed to your privacy and security. ":[""],"View all Jetpack plans":[""],"Manage your plan":[""],"Your Plan":[""],"You’re currently on Jetpack %(plan)s.":[""],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":[""],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":[""],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":[""],"Add Search (Jetpack) Widget":[""],"Jetpack Search is powering search on your site.":[""],"Manage your plugins":[""],"Moderate comments":[""],"Error updating privacy settings. %(error)s":[""],"Updated privacy settings.":[""],"Updating privacy settings…":[""],"Add Jetpack Search Widget":[""],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":[""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":[""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":[""],"Daily backups, spam filtering, and priority support.":[""],"Always-on Security":[""],"Activate video hosting":[""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":[""],"Design the perfect website":[""],"Set up Jetpack":[""],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":[""],"Jetpack Search":[""],"Jetpack version %(version)s":[""],"Your site is being backed up in real time and regularly scanned for security threats.":[""],"Daily backup of all your site data with unlimited space and one-click restores":[""],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":[""],"View your security activity":[""]," (powered by VaultPress).":[""],"Customize Search Widget":[""],"Please correct the issue below and try again.":["","Please correct the issues listed below and try again."],"We are making sure your site stays free of security threats. You will be notified if we find one.":[""],"Your site is being backed up in real-time.":[""],"Jetpack version":[""],"{{a}}View your site's activity{{/a}} in a single feed.":[""],"Activity":["Активност"],"Confirm each new phrase you add by pressing enter.":[""],"{{a}}View details{{/a}}":[""],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":[""],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":[""],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":[""],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":[""],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":[""],"Install premium themes":[""],"Review SEO features":[""],"Welcome Professional":[""],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":[""],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":[""],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":[""],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":[""],"Monetize your site with ads":[""],"Welcome Premium":[""],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":[""],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":[""],"Got it":[""],"Welcome personal":[""],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":[""],"Jetpack Stats People":[""],"Hello there! Your stats have been activated.":[""],"Just give us a little time to collect data so we can display it for you here.":[""],"Okay, got it!":[""],"Display ads below posts on":[""],"Additional ad placements":[""],"Top of each page":[""],"Second ad below post":[""],"Archives":["Архив"],"Explore Professional":[""],"Compare All Plans":[""],"Person with laptop":[""],"Your Jetpack site is ready to go!":[""],"Stars":[""],"Jupiter":[""],"Welcome to Jetpack Personal":[""],"Welcome to Jetpack Premium":[""],"Welcome to Jetpack Professional":[""],"Schedule posts":[""],"Activate Publicize":[""],"Your site is backed up.":[""],"Image Performance":[""],"Get WordPress Apps for every device":[""],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":[""],"I already use this app.":[""],"Create address":[""],"Priority support":[""],"Add sharing buttons to your posts":[""],"Automatically share your posts to social networks":[""],"Updating settings…":[""],"Updating Post by Email address…":[""],"Your paid plan gives you access to prioritized Jetpack support.":[""],"You have paid for backups but they're not yet active.":[""],"You have paid for backups and security scanning but they’re not yet active.":[""],"Click \"Set Up\" to finish installation.":[""],"Checking site status…":[""],"Pages":["Страници"],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"Unlimited, high-speed video hosting":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Brute force attack protection and downtime monitoring":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":["Връзки"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Анализ е безплатна услуга, която допълва нашата {{a}}вградена статистика{{/a}} с различни данни за вашият трафик. WordPress.com статистиката и Google Анализ използват различни методи за да определят и проследят активността на вашият сайт и е нормално да показват леко по-различни данни за вашите посетители, брой прегледи и т.н.т"],"Google Analytics":["Google Анализ"],"Configure Google Analytics":["Конфигуриране на Google Анализ"],"Activate Google Analytics":["Активиране на Google Анализ"],"Download the free apps":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":["Преглед на приходите"],"Configure site SEO":[""],"Activate SEO tools":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":["Вашите текущи IP: %(ip)s "],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":["Настройка на сканирането за сигурност "],"Subscriber":["Абонат"],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":["Показване на „следване на блога“ опцията във формата за коментари. "],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":["Копирано!"],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":["Публикацията или страницата са обновени"],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":["Готови сте, Jetpack вече е активиран. "],"You're fueled up and ready to go.":["Готови сте!"],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":["Записване... "],"Save Settings":["Запис на настройките "],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Активирайте Статистика за Сайта{{/a}} за да видите по-подробна статистика, харесвания, последователи, абонати и още! {{a1}}Вижте повече{{/a1}} "],"Activate Site Stats":["Активиране статистиката на сайта "],"Security Scanning":["Сканиране на сигурността "],"Upgrade":["Обновяване"],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["След като се свържете можете да си вземете платен план, за да отключите първокласна сигурност, инструменти за защита от спам и приоритетна поддръжка. "],"View your spam stats":["Преглед на статистика за спама "],"View your security dashboard":["Преглед на таблото за сигурност "],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":["Всички разширения са обновени. Добра работа!"],"Jetpack is improving and optimizing your image speed.":["Jetpack повишава и оптимизира зареждането на вашите изображения. "],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":["Сигурност"],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["За да архивирате автоматично сайта си, моля {{a}}инсталирайте и активирайте{{/a}} VaultPress. "],"Unavailable in Dev Mode.":[""],"Spam Protection":["Защита от спам "],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":["Невалиден ключ"],"Unavailable in Dev Mode":[""],"Activating recommended features…":["Активиране на препоръчителните функции... "],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"Activating %(slug)s…":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"Deactivating %(slug)s…":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":["Грешка при отписването от WordPress.com %(error)s "],"At A Glance":[""],"Clichés":["Клишета"],"Dashboard":["Табло"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":[""],"{{a}}Turn on plugin autoupdates{{/a}}":[""],"Plugin Updates":[""],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":["Няма открити заплахи, може да продължите. "],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":[""],"Loading…":["Зареждане... "],"Downtime monitoring":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["%(number)s Преглед","%(number)s Прегледа"],"Best overall day":[""],"Views today":["Преглеждания днес "],"Months":["Месеци "],"Weeks":["Седмици"],"Days":["Дни"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":["Натиснете за подробна статистика. "],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":["Сигурност на сайта"],"Activate recommended features":[""],"Link to WordPress.com":["Свързване с WordPress.com "],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["Възникна проблем при връзката с Jetpack. Моля опитайте отново да се свържете с WordPress.com."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["Възникна проблем при връка с Jetpack; изключете и включете разширението и опитайте отново."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Трябва да сте влезли във вашия WordPress блог докато оторизирате Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Jetpack има проблем.{{/s}} Извиняваме се за неудобството. Моля опитайте отново по-късно. Ако проблемът се повтори, свържете се с техническата поддръжка и предайте това съобщение: %(error_key)s"],"Disconnecting Jetpack":["Разкачете Jetpack"],"Learn more":["Научете повече"],"Posts":["Публикации"],"Front page":["Начална страница"],"Upload videos":[""],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Показване на свързано съдържание след статии"],"Related":["Свързани"],"Save":["Съхраняване"],"Email Address":["Имейл адрес"],"Media":["Файлове"],"Themes":["Теми"],"Site Stats":["Статистики за сайта"],"Sharing":["Споделяне"],"Testimonials":["Препоръки"],"Cancel":["Отказ"],"Comments":["Коментари"],"Ignored Phrases":["Пренебрегвани фрази"],"Use automatically detected language to proofread posts and pages":["Автоматично определяне на езика за коректура на публикации и страници"],"Redundant Phrases":["Излишни фрази"],"Phrases to Avoid":["Фрази, които да избягвате"],"Passive Voice":["Страдателен залог"],"Jargon":["Жаргон"],"Hidden Verbs":["Скрити глаголи"],"Double Negatives":["Двойни отрицателни"],"Diacritical Marks":["Акценти/ударения на букви"],"Complex Phrases":["Сложни фрази"],"Bias Language":["Терминологичен език"],"English Options":["Настройки за английски"],"Proofreading":["Коректура"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack не може да се свърже с WordPress.com: %(error_key)s. По принцип това означава, че нещо не е наред по конфигурацията на сървъра ви."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com е възпрепятстван и не може да захрани вашия Jetpack. Опитайте отново по-късно."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Вашият Jetpack има проблем.{{/s}} Не е възможно връзка с WordPress.com. По принцип това означава, че сайтът ви не е публично достъпен (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Сайтът ви трябва да е публично достъпен за да използва Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["Jetpack беше успешно изключен"],"Edit":["Редактиране"],"Connected":["Свързан"],"Activate":["Активиране"],"Active":["Активна"],"Search":["Търсене"],"Settings":["Настройки"],"Learn More":["Научете повече"],"Disconnect Jetpack":["Разкачане на Jetpack"],"Test your site’s compatibility with Jetpack.":["Пробвайте съвместимостта на сайта си с Jetpack."],"Settings header\u0004Plugin Autoupdates":[""],"Settings header\u0004Downtime monitoring":[""],"Settings header\u0004Privacy Settings":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"Navigation item.\u0004Performance":[""],"Navigation item.\u0004My Plan":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Search term.\u0004terms of service":[""],"Search term.\u0004tos":[""],"Search term.\u0004gdpr":[""],"Search term.\u0004data":[""],"Search term.\u0004tracks":[""],"Search term.\u0004privacy":[""],"Caption for a button to purchase a pro plan.\u0004Upgrade":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"A heading for a block of related posts.\u0004Related":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":["Копиране"],"Shorthand for Privacy Policy.\u0004Privacy":["Поверителност"],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Дебъг "],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-bs_BA-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-bs_BA-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 8a408305..00000000
--- a/plugins/jetpack/languages/json/jetpack-bs_BA-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);","lang":"bs_BA"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":[""],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":[""],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":[""],"Save Settings":[""],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":[""],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found.","Uh oh, %(number)s threats found."],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["","%(number)s Views","%(number)s Views"],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":[""],"Learn more":["Saznaj više"],"Posts":["Članci"],"Front page":["Naslovna stranica"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":[""],"Related":[""],"Save":["Sačuvaj"],"Email Address":["Email adresa"],"Media":["Datoteke"],"Themes":[""],"Site Stats":["Statistika stranice"],"Sharing":["Dijeljenje"],"Testimonials":[""],"Cancel":["Poništi"],"Comments":["Komentari"],"Ignored Phrases":["Zanemarene fraze"],"Use automatically detected language to proofread posts and pages":["Koristi automatski detektovani jezik za lektorisanje članaka i stranica"],"Redundant Phrases":["Suvišne fraze"],"Phrases to Avoid":["Fraze koje bi se trebale izbjegavati"],"Passive Voice":["Pasiv"],"Jargon":["Žargon"],"Hidden Verbs":["Sakriveni glagoli"],"Double Negatives":["Dvostruka negacija"],"Diacritical Marks":["Dijakritičke oznake"],"Complex Phrases":["Kompleksne fraze"],"Bias Language":["Vulgaran jezik"],"English Options":["Engleske opcije"],"Proofreading":["Lektorisanje"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com trenutno ima neke probleme i nije u mogućnosti da aktivira vaš Jetpack. Molimo vas da pokušate kasnije."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[""],"You have successfully disconnected Jetpack":[""],"Edit":["Uredi"],"Connected":["Konektovano"],"Activate":["Aktiviraj"],"Active":["Aktivna"],"Search":["Traži"],"Settings":["Postavke"],"Learn More":["Saznaj više"],"Disconnect Jetpack":[""],"Test your site’s compatibility with Jetpack.":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-ca-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-ca-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 783157a7..00000000
--- a/plugins/jetpack/languages/json/jetpack-ca-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"ca"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":[""],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":["S'ha copiat"],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":[""],"Save Settings":[""],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":["Actualitza"],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":["Seguretat"],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":["Tauler"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found."],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["","%(number)s Views"],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":[""],"Learn more":["Saber-ne més"],"Posts":["Entrades"],"Front page":["Pàgina inicial"],"Pinterest":["Pinterest"],"Google":[""],"Show related content after posts":[""],"Related":["Relacionats"],"Save":["Desa"],"Email Address":["Adreça de correu electrònic"],"Media":["Mèdia"],"Themes":[""],"Site Stats":["Estadístiques del lloc web"],"Sharing":["Compartint"],"Testimonials":[""],"Cancel":["Cancel·la"],"Comments":["Comentaris"],"Ignored Phrases":["Frases ignorades"],"Use automatically detected language to proofread posts and pages":["Fes servir la detecció automàtica de l'idioma per a corregir les entrades i pàgines."],"Redundant Phrases":["Frases redundants"],"Phrases to Avoid":["Frases a evitar"],"Passive Voice":["Veu passiva"],"Jargon":["Jargon"],"Hidden Verbs":["Verbs ocults"],"Double Negatives":["Doble negacions"],"Diacritical Marks":["Signes diacrítics"],"Complex Phrases":["Frases complexes"],"Bias Language":["Llengua "],"English Options":["Opcions de l'anglès"],"Proofreading":["S'està corregint"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["El JetPack no ha pogut contactar amb WordPress.com: %(error_key)s. Això normalment significa que alguna cosa està mal configurada al vostre servidor web."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com està tenint problemes ara mateix i no pot donar-li canya al teu JetPack. Torneu-ho a provar més tard."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}El JetPack té un problema tècnic.{{/s}} La connexió d'aquest lloc amb WordPress.com no és possible. Això significa normalment que el vostre lloc no és accessible públicament (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["La pàgina web necessita ser accessible públicament per fer servir el JetPack: %(error_key)s"],"You have successfully disconnected Jetpack":[""],"Edit":["Edita"],"Connected":["Connectat"],"Activate":["Activa"],"Active":["Activa"],"Search":["Cerca"],"Settings":["Opcions"],"Learn More":["Saber-ne més"],"Disconnect Jetpack":[""],"Test your site’s compatibility with Jetpack.":["Posa a prova la compatibilitat del seu lloc amb Jetpack."],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-ckb-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-ckb-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 16aed405..00000000
--- a/plugins/jetpack/languages/json/jetpack-ckb-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"ku_IQ"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":[""],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":[""],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":[""],"Save Settings":[""],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":[""],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found."],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["","%(number)s Views"],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":[""],"Learn more":["زیاتر بزانە"],"Posts":["بابه‌ته‌كان"],"Front page":["پەڕەی سەرەکی"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":[""],"Related":["هاوشێوە"],"Save":["پاشه‌كه‌وتكردن"],"Email Address":["ناونیشانی ئیمەیڵ"],"Media":["ڕەنگاڵە"],"Themes":[""],"Site Stats":["زانیاری ماڵپەر"],"Sharing":["بڵاوکردنەوە"],"Testimonials":[""],"Cancel":["پاشگەزبوونەوە"],"Comments":["لێدوانه‌کان"],"Ignored Phrases":["دەقە پشتگوێخراوەکان"],"Use automatically detected language to proofread posts and pages":[""],"Redundant Phrases":[""],"Phrases to Avoid":[""],"Passive Voice":[""],"Jargon":[""],"Hidden Verbs":[""],"Double Negatives":[""],"Diacritical Marks":[""],"Complex Phrases":[""],"Bias Language":[""],"English Options":["هەڵبژاردنەکانی ئینگلیزی"],"Proofreading":[""],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["مالپەری وۆردپرێس لەم کاتەدا کێشەی هەیە و ناتوانێ تانکی بەنزینەکەی جێتپاک پڕ بکاتەوە. تکایە دواتر هەوڵبدەرەوە."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[""],"You have successfully disconnected Jetpack":[""],"Edit":["ده‌ستكاری"],"Connected":["بەسترا"],"Activate":["چالاکكردن"],"Active":["چالاک"],"Search":["گه‌ڕان"],"Settings":["ڕێكخستنه‌كان"],"Learn More":["زیاتر بزانە"],"Disconnect Jetpack":[""],"Test your site’s compatibility with Jetpack.":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-cs_CZ-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-cs_CZ-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index c1931310..00000000
--- a/plugins/jetpack/languages/json/jetpack-cs_CZ-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;","lang":"cs_CZ"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":[""],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":[""],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":[""],"Save Settings":[""],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":[""],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found.","Uh oh, %(number)s threats found."],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["","%(number)s Views","%(number)s Views"],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":["Odpojování Jetpacku"],"Learn more":["Zjistit více"],"Posts":["Příspěvky"],"Front page":["Úvodní stránka"],"Pinterest":[""],"Google":["Google"],"Show related content after posts":["Zobrazovat související obsah pod příspěvky"],"Related":["Související"],"Save":["Uložit"],"Email Address":["Emailová adresa"],"Media":["Média"],"Themes":["Šablony"],"Site Stats":["Statistiky stránek"],"Sharing":["Sdílení"],"Testimonials":["Reference"],"Cancel":["Zrušit"],"Comments":["Komentáře"],"Ignored Phrases":[""],"Use automatically detected language to proofread posts and pages":["Použít automaticky rozpoznaný jazyk pro kontrolu pravopisu příspěvků a stránek"],"Redundant Phrases":["Nadbytečné fráze"],"Phrases to Avoid":["Fráze, kterým se vyhnout"],"Passive Voice":["Trpný rod"],"Jargon":["Žargon"],"Hidden Verbs":["Skrytá slovesa"],"Double Negatives":["Dvojité zápory"],"Diacritical Marks":["Diakritická znaménka"],"Complex Phrases":["Složité fráze"],"Bias Language":["Předpojatý jazyk"],"English Options":["Možnosti pro angličtinu"],"Proofreading":["Kontrola pravopisu"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Vaše webové stránky musí být veřejně přístupné pro používání Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":[""],"Edit":["Upravit"],"Connected":["Připojen"],"Activate":["Aktivovat"],"Active":["Aktivní"],"Search":["Hledat"],"Settings":["Nastavení"],"Learn More":["Zjistit více"],"Disconnect Jetpack":["Odpojit Jetpack"],"Test your site’s compatibility with Jetpack.":["Otestujte kompatibilitu vaší stránky s Jetpack."],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-cy-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-cy-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index adf06a25..00000000
--- a/plugins/jetpack/languages/json/jetpack-cy-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;","lang":"cy_GB"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":[""],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":[""],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":[""],"Save Settings":[""],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":[""],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found.","Uh oh, %(number)s threats found.","Uh oh, %(number)s threats found."],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["","%(number)s Views","%(number)s Views","%(number)s Views"],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":[""],"Learn more":["Dysgu rhagor"],"Posts":["Cofnodion"],"Front page":["Tudalen flaen"],"Pinterest":[""],"Google":["Google"],"Show related content after posts":[""],"Related":["Yn perthyn"],"Save":["Cadw"],"Email Address":["Cyfeiriad E-bost"],"Media":["Cyfrwng"],"Themes":[""],"Site Stats":["Ystadegau'r Wefan"],"Sharing":["Rhannu"],"Testimonials":["Tystebau"],"Cancel":["Diddymu"],"Comments":["Sylwadau"],"Ignored Phrases":["Ymadroddion i'w Hanwybyddu"],"Use automatically detected language to proofread posts and pages":["Canfod iaith yn awtomatig er mwyn prawfddarllen cofnodion a thudalennau"],"Redundant Phrases":["Ymadroddion Diangen"],"Phrases to Avoid":["Ymadroddion i'w Hosgoi"],"Passive Voice":["Geirfa Oddefol"],"Jargon":["Jargon"],"Hidden Verbs":["Berfau Cudd"],"Double Negatives":["Negyddu Dwbl"],"Diacritical Marks":["Marciau Diacritig"],"Complex Phrases":["Ymadroddion Cymhleth"],"Bias Language":["Iaith Ragfarnllyd"],"English Options":["Dewisiadau Saesneg"],"Proofreading":["Prawf ddarllen"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["Mae WordPress.com yn cael trafferthion ar hyn o bryd ac nid yw'n gallu rhoi cychwyn ar eich Jetpack. Rhowch gynnig arni eto yn nes ymlaen."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Mae angen i'ch gwefan fod ar gael yn gyhoeddus er mwyn defnyddio Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":[""],"Edit":["Golygu"],"Connected":["Wedi cysylltu"],"Activate":["Gweithredu"],"Active":[""],"Search":["Chwilio"],"Settings":["Gosodiadau"],"Learn More":["Dysgu Rhagor"],"Disconnect Jetpack":[""],"Test your site’s compatibility with Jetpack.":["Profwch pa mor dda mae eich gwefan yn cydweddu â Jetpack."],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-da_DK-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-da_DK-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 0ac7735c..00000000
--- a/plugins/jetpack/languages/json/jetpack-da_DK-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"da_DK"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Manage Likes synlighed fra Sharing Module indstillinger{{/a}}"],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["Der er ikke-gemte indstillinger i dette faneblad, der vil forsvinde hvis du forlader siden. Vil du fortsætte?"],"This will reset all Jetpack options, are you sure?":["Dette vil nulstille af alle Jetpacks indstillinger, er du sikker?"],"Search for a Jetpack feature.":["Søg efter en Jetpack funktion."],"Configure your Security Scans":["Opsæt dine Security Scans"],"Subscriber":["Abonnent"],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":[""],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":[""],"Save Settings":[""],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":[""],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found."],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["","%(number)s Views"],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":[""],"Learn more":["Få mere at vide"],"Posts":["Indl&#230;g"],"Front page":["Forside"],"Pinterest":[""],"Google":["Google"],"Show related content after posts":["Vis relateret indhold efter indlæg"],"Related":["Relateret"],"Save":["Gem"],"Email Address":["E-mail-adresse"],"Media":["Medier"],"Themes":[""],"Site Stats":["Statistik for webstedet"],"Sharing":["Deling"],"Testimonials":[""],"Cancel":["Annuller"],"Comments":["Kommentarer"],"Ignored Phrases":["Ignorerede fraser"],"Use automatically detected language to proofread posts and pages":["Brug automatisk fundet sprog til at læse korrektur på indlæg og sider"],"Redundant Phrases":["Overflødige sætninger"],"Phrases to Avoid":["Fraser der bør undgås"],"Passive Voice":["Passiver"],"Jargon":["Jargon"],"Hidden Verbs":["Skjulte udsagnsord"],"Double Negatives":["Dobbelt negation"],"Diacritical Marks":["Diakritiske tegn"],"Complex Phrases":["Komplekse sætninger"],"Bias Language":["Vanesprog"],"English Options":["Engelske indstillinger"],"Proofreading":["Korrekturlæsning"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com har i øjeblikket problemer, og er ude af stand til at fylde brændstof på din Jetpack. Prøv venligst igen senere."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[""],"You have successfully disconnected Jetpack":[""],"Edit":["Rediger"],"Connected":[""],"Activate":["Aktiver"],"Active":["Aktiv"],"Search":["Søg"],"Settings":["Indstillinger"],"Learn More":["Få mere at vide"],"Disconnect Jetpack":[""],"Test your site’s compatibility with Jetpack.":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-de_DE-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-de_DE-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 4b9d5aed..00000000
--- a/plugins/jetpack/languages/json/jetpack-de_DE-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"de"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":["Aktiviere als Nächstes das empfohlene Funktionspaket von Jetpack, um die Sicherheit und Performance deiner Website zu maximieren. {{a}}Weitere Informationen dazu, was alles enthalten ist{{/a}}"],"We’re now collecting stats and securing your site. Welcome aboard.":["Wir sammeln jetzt Statistiken und sichern deine Website. Willkommen an Bord."],"{{a}}Skip, and explore features individually{{/a}}.":["{{a}}Überspringen und Funktionen eigenständig entdecken{{/a}}"],"Jetpack Business Plan":["Jetpack Business-Tarif"],"Jetpack Premium Plan":["Jetpack Premium-Tarif"],"Jetpack Personal Plan":["Jetpack Persönlich-Tarif"],"Get started with hassle-free design, stats, and performance tools.":["Starte durch mit unkompliziertem Design, Statistiken und Performance-Tools."],"Welcome to Jetpack Free":["Willkommen bei Jetpack Free"],"Jetpack Free Plan":["Jetpack Free-Tarif"],"Explore Jetpack plans":["Jetpack-Tarife entdecken"],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":["Profitiere von automatisierten Backups und vorrangigem Support, erreiche mit erweiterten SEO-Tools ein breiteres Publikum, verdiene mithilfe von Werbung Geld mit deiner Website und passe deine Website mit einem unserer über 200 Premium-Themes an."],"Jetpack offers so much more":["Jetpack bietet so viel mehr"],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":["Brauchst du Hilfe? Suche auf unserer Support-Website nach Informationen zu deiner Website, deinem Konto oder dazu, wie du WordPress optimal nutzen kannst."],"Support documentation":["Support-Dokumentation"],"Chat bubbles representing getting in touch with support":["Chat-Sprechblasen, welche die Kontaktaufnahme mit dem Support darstellen"],"Site Activity":["Website-Aktivitäten"],"Start publicizing now":["Beginne jetzt mit dem Veröffentlichen"],"Reach a wider audience by automatically sharing your posts on social media.":["Erreiche ein breiteres Publikum, indem du deine Beiträge automatisch in Social Media teilst."],"Increase traffic to your site":["Steigere den Traffic zu deiner Website"],"Explore free themes":["Erkunde kostenlose Themes"],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":["Erhalte unbegrenzten Zugriff auf Hunderte professioneller Themes und passe deine Website nach deinen Wünschen an."],"A wide variety of themes and tools to customize a site":["Eine breite Auswahl an Themes und Tools zur Anpassung einer Website"],"Set up your site security":["Richte deine Websitesicherheit ein"],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":["Verhindere Anmeldeangriffe und erhalte bei einem Problem mit deiner Website sofort Benachrichtigungen."],"Site stats showing an evolution in traffic and engagement":["Website-Statistiken, die eine Steigerung des Traffic und der Interaktionen anzeigen"],"A hand holding a loupe":["Eine Hand mit einer Lupe"],"A chart showing an healthy increase in earnings":["Ein Diagramm, das eine deutliche Steigerung der Einnahmen anzeigt"],"Interface showing a chronological list of changes and updates in a site":["Benutzeroberfläche, die eine chronologische Liste der Änderungen und Aktualisierungen auf einer Website anzeigt"],"A cloud with multiple types of content floating around it":["Eine Wolke, um die mehrere Arten von Inhalten schweben"],"A folder holding real comments":["Ein Ordner mit echten Kommentaren"],"Make your site faster":["Mache deine Website schneller"],"Load pages faster by serving your images from our global network of servers.":["Lade Seiten schneller, indem deine Bilder über unser globales Servernetzwerk bereitgestellt werden."],"A fast and performant website":["Eine schnelle und leistungsfähige Website"],"A secure site, locked and protected by Jetpack":["Eine sichere Website, die von Jetpack gesperrt und geschützt wird"],"These settings won't apply to related posts added using the block editor.":["Diese Einstellungen gelten nicht für ähnliche Beiträge, die mithilfe des Block-Editors hinzugefügt wurden."],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["Bestehende Beiträge, Seite, Referenzen und Portfolios duplizieren. Dabei werden alle Inhalte kopiert, einschließlich Text, Beitragsbilder, Teilen-Einstellungen usw.."],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":["Diese Website kann nicht mit WordPress.com verknüpft werden, weil sie unsere {{a}}Geschäftsbedingungen{{/a}} verletzt."],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":["Verbinde deine Website mit den von dir verwendeten Social Media-Netzwerken und teile deine Inhalte mit einem einzigen Klick in allen deinen Social Media-Konten. Wenn du einen Beitrag veröffentlichst, wird er in allen verbundenen Konten angezeigt."],"Add Like buttons to your posts and pages":["Füge zu deinen Beiträgen und Seiten Like-Buttons hinzu"],"When visitors enjoy your content, let them show it with a Like.":["Erlaube es deinen Besuchern zu zeigen, wenn ihnen deine Inhalte gefallen."],"Explore your Jetpack Professional plan!":["Entdecke deinen Jetpack Professional-Tarif!"],"Explore your Jetpack Premium plan!":["Entdecke deinen Jetpack Premium-Tarif!"],"Explore your Jetpack Personal plan!":["Entdecke deinen Jetpack Persönlich-Tarif!"],"Create account":["Konto erstellen"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["Jetpack unterstützt deine Website. Um jedoch auf alle Funktionen zugreifen zu können, musst du ein Konto erstellen."],"Real-time, automated backups (unlimited storage)":["Automatisierte Backups in Echtzeit (unbegrenzter Speicherplatz)"],"Compose content the way you want to and streamline your publishing experience.":["Verfasse Inhalte auf deine Art und optimiere das Veröffentlichen."],"Add a portfolio item":["Ergänze das Portfolio"],"Add a testimonial":["Füge eine Referenz hinzu"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["Maximiere die Sichtbarkeit deiner Website in Suchmaschinen und sieh dir Traffic-Statistiken in Echtzeit an."],"Create a Jetpack account to use this feature":["Erstelle ein Jetpack-Konto, um diese Funktion zu nutzen"],"Share your content on social media and increase audience engagement.":["Teilen deinen Inhalt in Social-Media-Kanälen, um ein größeres Publikum zu erreichen."],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["Jetpack überwacht deine Website kontinuierlich und warnt dich, sobald Ausfallzeiten erkannt werden."],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["Es ist empfehlenswert, neue Plugin-Versionen sofort zu aktualisieren. Lege fest, welche Plugins automatisch aktualisiert werden sollen, damit deine Website immer geschützt ist."],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["Mit modernsten Sicherheitsfunktionen und Benachrichtigungen bei technischen Problemen ist deine Website jederzeit geschützt."],"Error enabling Site accelerator. %(error)s":["Fehler beim Aktivieren des Website-Beschleunigers. %(error)s"],"Site accelerator is now speeding up your site!":["Mit dem Website-Beschleuniger wird deine Website jetzt noch schneller!"],"Enabling Site accelerator…":["Website-Beschleuniger wird aktiviert …"],"Error disabling site accelerator. %(error)s":["Fehler beim Deaktivieren des Website-Beschleunigers. %(error)s"],"Site accelerator is no longer speeding up your site!":["Ohne den Website-Beschleuniger wird deine Website jetzt leider nicht mehr schneller."],"Disabling site accelerator…":["Website-Beschleuniger wird deaktiviert …"],"Load pages faster, optimize images, and speed up your visitors’ experience.":["Lasse Seiten schneller laden, optimiere Bilder und biete deinen Besuchern eine schnellere Nutzererfahrung."],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["Ergänze die WordPress.com-Statistiken mit Googles umfassendem Einblick in das Verhalten deiner Besucher und das Traffic-Aufkommen."],"High-speed, high-definition video hosting with no third-party ads.":["Schnelles Videohosting in HD ohne Werbeanzeigen von Dritten."],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["Plane beliebig viele Tweets, Facebook-Beiträge und andere Beiträge in sozialen Netzwerken im Voraus."],"Marketing Automation":["Marketingautomatisierung"],"Activate Jetpack Search":["Jetpack Suche aktivieren"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["Ersetze die standardmäßige WordPress-Suche und erhalte bessere Ergebnisse mit individuellen Filteroptionen, bereitgestellt von Elasticsearch."],"Start earning":["Geld verdienen"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["Mit WordAds kannst du durch Anzeigen von Werbeinhalten Geld verdienen. Beginne noch heute damit, Geld zu verdienen."],"Spam is automatically blocked from your comments.":["Spam wird automatisch in Kommentaren blockiert."],"Spam Filtering":["Spam-Filterung"],"Browse premium themes":["Premium-Themes durchsuchen"],"Access hundreds of beautifully designed premium themes at no extra cost.":["Greife auf Hunderte von wunderschönen Premium-Themes zu, die dich keinen Cent extra kosten."],"Try a premium theme":["Premium-Theme testen"],"View settings":["Einstellungen anzeigen"],"Create a Jetpack account to view your email followers":["Erstelle ein Jetpack-Konto, um deine E-Mail-Follower zu sehen"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["Erlaube Kommentare auf deiner Website und benachrichtige Abonnenten über deine neuesten Inhalte."],"Manage security settings":["Sicherheitseinstellungen verwalten"],"Built-in Performance":["Integrierte Performance"],"Jetpack is ready for the new WordPress editor":["Jetpack ist bereit für den neuen WordPress-Editor"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["Heute stellen wir die ersten Blöcke für Jetpack vor, die speziell für den neuen Editor entwickelt wurden: Button für Einfaches Bezahlen, Formular, Karte und Markdown."],"Build your Jetpack site with blocks":["Erstelle deine Jetpack-Website mit Blöcken"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["Ein neuer Editor? Ja! {{a}}Weitere Informationen{{/a}}."],"The features you rely on, adapted for the new WordPress editor.":["Die bekannten Funktionen, angepasst an den neuen WordPress-Editor."],"Take me to the new editor":["Zum neuen Editor"],"Testing Jetpack Connection":[""],"There was an error testing Jetpack. Error: %(error)s":["Fehler beim Testen von Jetpack. Fehler: %(error)s"],"New in Jetpack!":["Neu in Jetpack!"],"Speed up static file load times":["Ladezeiten von statischen Dateien verkürzen"],"Speed up image load times":["Ladezeiten von Bildern verkürzen"],"Enable site accelerator":["Website-Beschleuniger aktivieren"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["Lade Seiten schneller, indem du Jetpack erlaubst, deine Bilder zu optimieren und deine Bilder und statischen Dateien (wie CSS und JavaScript) über unser globales Servernetzwerk bereitzustellen."],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["Erhöhe die Sicherheit deiner Website, indem du die Anmeldung mit WordPress.com und sichere Authentifizierung aktivierst. Wenn du über mehrere Websites verfügst und diese Option aktiviert ist, kannst du dich mit den gleichen Anmeldedaten bei allen diesen Seiten anmelden."],"View your site activity":["Website-Aktivitäten anzeigen"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["Sieh dir eine chronologische Liste aller Änderungen und Updates an deiner Website an."],"Manually Verify ":["Manuell verifizieren "],"Verify with Google":["Mit Google verifizieren"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["Google wird dich per E-Mail über bestimmte Vorkommnisse auf deiner Website informieren. Dazu gehören auch Anzeichen, dass deine Website {{a1}}gehackt{{/a1}} wurde, sowie Probleme beim {{a2}}Crawlen oder Indexieren{{/a2}} deiner Website."],"or":["oder"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["Überwache den Traffic und die Performance deiner Website in der {{a}}Google Search Console{{/a}}."],"Your site is verified with Google":["Deine Website wird mit Google verifiziert"],"Site failed to verify: %(error)s":["Website konnte nicht verifiziert werden: %(error)s"],"Verifying...":["Verifizierung läuft…"],"Add faster, more advanced searching to your site with Jetpack Professional.":["Erhalte mit Jetpack Professional schnellere, erweiterte Suchfunktionen."],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["Ersetze die integrierte WordPress-Suche durch die Jetpack-Suche, eine erweiterte Suchfunktion"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["Die Jetpack Suche ersetzt die integrierte Suche durch eine schnelle, skalierbare, anpassbare und relevante Suchfunktion, die in der WordPress.com-Cloud gehostet wird. Das Ergebnis: Deine Benutzer finden die gewünschten Inhalte noch schneller."],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["Die integrierte WordPress-Suche ist besonders für Websites ohne viele Inhalte geeignet. Wenn deine Website jedoch größer wird, wird die Suche langsamer und gibt weniger relevante Ergebnisse zurück."],"Jetpack Search supports many customizations.":["Die Jetpack-Suche unterstützt eine Vielzahl von Anpassungen."],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["Sie ersetzt die integrierte Suche durch eine schnelle, skalierbare, anpassbare und relevante Suchfunktion, {{a}}die in der WordPress.com-Cloud gehostet wird{{/a}}."],"Site is verified":["Website wurde verifiziert"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}Mit Jetpack Professional erhältst du unbegrenzten Zugriff auf über 200 Premium-WordPress-Themes. So kannst du eine wunderschöne Website erstellen, die exakt deinen Wünschen entspricht.{{/p}}{{p}}Bei Jetpack Professional geht es um mehr als das perfekte Design. Es geht auch um absolute Sorgenfreiheit, weil du bei Problemen vorrangigen Support von unserem internationalen Expertenteam erhältst.{{/p}}"],"Spam filtering and priority support.":["Spamfilter und vorrangiger Support."],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["Wenn Werbung aktiviert ist, generiert Jetpack automatisch eine individuelle ads.txt-Datei für deine Website."],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["Jetpack generiert automatisch eine individuelle {{link}}ads.txt{{/link}}-Datei speziell für deine Website. Wenn du zusätzliche Einträge für andere Netzwerke hinzufügen musst, dann gib diese bitte unten in jeweils einer eigenen Zeile an."],"Custom ads.txt entries":["Individuelle ads.txt-Einträge"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}Mit Jetpack Professional erhältst du unbegrenzten Zugriff auf über 200 Premium-WordPress-Themes. So kannst du eine wunderschöne Website erstellen, die exakt deinen Wünschen entspricht.{{/p}}{{p}}Bei Jetpack Professional geht es um mehr als das perfekte Design. Es geht auch um absolute Sorgenfreiheit: Echtzeit-Backups, automatische Malware-Scans und vorrangiger Support von unserem globalen Expertenteam garantieren, dass deine Website stets sicher ist.{{/p}}"],"Introducing Premium Themes":["Neu: Premium-Themes"]," Premium Themes":["Premium-Themes"],"Privacy information":["Datenschutz"],"Enable Lazy Loading for images":["Aktiviere verzögertes Laden von Bildern"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["Durch das verzögerte Laden von Bildern kannst du die Geschwindigkeit deiner Website und die Anzeigequalität verbessern. Bilder werden nicht alle auf einmal geladen, sondern erst, wenn Besucher auf der Seite herunterscrollen."],"Performance & speed":["Performance und Geschwindigkeit"],"Enable high-speed, ad-free video player":["Aktiviere den schnellen und werbefreien Videoplayer"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["Gestalte deine veröffentlichten Inhalte mit einem hochauflösenden Video noch ansprechender. Mit Jetpack Video kannst du deinen Media Player anpassen und deinen Besuchern schnelle und werbefreie Videos ohne Branding bereitstellen. Videos werden auf unseren WordPress.com-Servern gehostet und benötigen keinen Speicherplatz von deinem Hosting-Tarif!"],"Video":["Video"],"Carousel color scheme":["Karussell-Farbschema"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Exif-Daten zeigen Besuchern zusätzliche technische Details eines Fotos, wie z. B. Brennweite, Öffnung und ISO."],"Show photo Exif metadata in carousel (when available)":["Zeige Exif-Metadaten eines Fotos in Karussell an (falls verfügbar)"],"Display images in a full-screen carousel gallery":["Präsentiere Bilder in einer Vollbild-Karussell-Galerie"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["Erstelle Vollbild-Karussell-Diashows für die Bilder in deinen Beiträgen und auf deinen Seiten. Karussell-Galerien sind mobilfreundlich und animieren Website-Besucher, sich deine Fotos anzusehen."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["Die WordPress.com-Werkzeugleiste ersetzt die standardmäßige WordPress-Admin-Werkzeugleiste und optimiert dein WordPress-Erlebnis. Per Ein-Klick-Zugriff kannst du hiermit all deine Websites verwalten, dein WordPress.com-Profil aktualisieren, Benachrichtigungen anzeigen und mithilfe des Readers die Websites im Blick behalten, denen du folgst."],"Portfolios shortcode: [portfolio]":["Shortcode der Portfolios: [portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["Nutze {{portfolioLink}}Portfolios{{/portfolioLink}} auf deiner Website, um deine beste Arbeit zu präsentieren. Sollte dein Theme keine Jetpack-Portfolios unterstützen, kannst du immer noch einen einfachen Shortcode verwenden, um sie auf deiner Website anzuzeigen."],"Testimonials shortcode: [testimonials]":["Shortcode der Referenzen: [testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["Füge {{testimonialLink}}Referenzen{{/testimonialLink}} zu deiner Website hinzu, um neue Kunden zu gewinnen. Sollte dein Theme keine Jetpack-Referenzen unterstützen, kannst du immer noch einen einfachen Shortcode verwenden, um sie auf deiner Website anzuzeigen."],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["Suchmaschinen können derzeit nicht auf deine Website zugreifen. Wenn du dies ändern möchtest, überprüfe deine {{a}}Leseeinstellungen{{/a}} und aktiviere „Sichtbarkeit in Suchmaschine“."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["Gute Nachrichten: Jetpack sendet deine Sitemap automatisch an alle großen Suchmaschinen zur Indizierung."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["Sitemaps sind Dateien, die Suchmaschinen wie Google oder Bing verwenden, um deine Website zu indizieren. Sie können helfen, dein Ranking in den Suchergebnissen zu verbessern. Wenn du diese Funktion aktivierst, erstellt Jetpack Sitemaps für dich und aktualisiert sie automatisch, wenn sich die Inhalte deiner Website ändern."],"Configure related posts in the Customizer":["Ähnliche Beiträge im Customizer konfigurieren"],"Highlight related content with a heading":["Ähnliche Inhalte mit einer Überschrift hervorheben"],"View security scan details":["Details des Sicherheits-Scans anzeigen"],"View backup history":["Backup-Verlauf anzeigen"],"Show a thumbnail image where available":["Zeige ein Vorschaubild, sofern verfügbar"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["Weitere Informationen dazu, wie bestimmte Jetpack-Funktionen Daten nutzen und Aktivitäten verfolgen, findest du in unserem {{privacyCenterLink}}Datenschutzzentrum{{/privacyCenterLink}}."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["Wir verwenden andere Werkzeuge zum Tracking, darunter auch welche von Drittanbietern. {{cookiePolicyLink}}Hier erhältst du weitere Informationen{{/cookiePolicyLink}} und Tipps, wie du sie kontrollierst."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["Diese Informationen helfen uns dabei, unsere Produkte zu verbessern, Marketing besser auf dich zuzuschneiden, deine Erfahrung mit WordPress.com zu personalisieren und mehr. Alles das kannst du auch in unserer {{pp}}Datenschutzerklärung{{/pp}} nachlesen."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["Teile Informationen über deine Nutzung von Diensten mit unserem Analysewerkzeug, während du in deinem WordPress.com-Konto angemeldet bist. {{cookiePolicyLink}}Weitere Informationen{{/cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["Diese Funktion wird von einem Website-Administrator verwaltet. {{link}}Weitere Informationen{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["Diese Funktion wurde von einem Website-Administrator deaktiviert. {{link}}Weitere Informationen{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["Diese Funktion wurde von einem Website-Administrator aktiviert. {{link}}Weitere Informationen{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["%(moduleName)s wurde(n) von einem Website-Administrator deaktiviert. {{link}}Weitere Informationen{{/link}}."],"This feature has been disabled by a site administrator.":["Diese Funktion wurde von einem Website-Administrator deaktiviert."],"%(moduleName)s has been disabled by a site administrator.":["%(moduleName)s wurde(n) von einem Website-Administrator deaktiviert."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["Du kannst weitere Anzeigen mit dem Ad-Widget hinzufügen. {{link}}Probiere es aus!{{/link}}"],"Configure your notification settings":["Deine Benachrichtigungs-Einstellungen konfigurieren"],"Monitor your site's downtime":["Ausfallzeiten deiner Website überwachen"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["Die Jetpack-Suche ist ein leistungsstarker Ersatz für die in WordPress integrierte Suchfunktion."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["Die Dateien deiner Website werden regelmäßig nach nicht autorisierten oder verdächtigen Änderungen gescannt, die ein Risiko für deine Sicherheit und Daten darstellen könnten."],"Plugin needs updating.":["Plugin muss aktualisiert werden.","Plugins müssen aktualisiert werden."],"%(number)s":["%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Mit der Plugin-Update-Funktion von Jetpack kannst du auswählen, welche Plugins automatisch aktualisiert werden sollen."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack optimiert deine Bilder und stellt sie über den Server-Standort bereit, der am nächsten an deinen Website-Besuchern liegt. Unser globales Netzwerk für Content-Auslieferung verkürzt die Ladezeiten deiner Website."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":[""],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Mit den Backups von Jetpack kannst du das Backup von einem bestimmten Zeitpunkt bequem wiederherstellen oder herunterladen."],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet überprüft deine Kommentare und übermittelten Kontaktformulare anhand unserer globalen Spam-Datenbank."],"Privacy Information":["Informationen zum Datenschutz"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["Mit VideoPress kannst du Videos von deinem Computer hochladen, um sie auf WordPress.com anstatt auf den Servern deines Hosts zu hosten. Du kannst diese dann auf deiner selbst gehosteten Jetpack-Website einfügen. "],"Add the Search (Jetpack) widget to your sidebar":["Füge das Such-Widget (Jetpack) zu deiner Seitenleiste hinzu"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["Biete deinen Besuchern ein tolles Sucherlebnis, indem du es ihnen erlaubst, relevante Suchergebnisse zu filtern und schnell zu sortieren."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["Ermöglicht ein schlankes, für Mobilgeräte geeignetes Theme, das Besuchern auf Mobilgeräten angezeigt wird."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["Lädt die nächsten Beiträge automatisch, wenn der Leser das Ende der Seite erreicht."],"Allows you to publish new posts by sending an email to a special address.":["Erlaubt dir, neue Beiträge zu veröffentlichen, indem du eine E-Mail an eine spezielle Adresse sendest."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["Erlaubt dir, mithilfe der Markdown-Syntax Inhalte mit Links, Listen und anderen Stilen zu erstellen."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["Prüft deine Inhalte auf korrekte Grammatik und Rechtschreibung, falsch verwendete Wörter und Stil, während du schreibst."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["Stellt die erforderlichen ausgeblendeten Schlagwörter bereit, um deine WordPress-Website bei verschiedenen Diensten zu verifizieren."],"Displays information on your site activity, including visitors and popular posts or pages.":["Zeigt Informationen zu deinen Websiteaktivitäten an, etwa Besucher und beliebte Beiträge oder Seiten."],"Allows you to optimize your site and its content for better results in search engines.":["Erlaubt dir, deine Website und deren Inhalte zu optimieren, um in Suchmaschinen bessere Ergebnisse zu erzielen."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["Integriert deine WordPress-Website in Google Analytics, eine Plattform, die Einsichten zu deinem Traffic, deinen Besuchern und deinen Conversions bietet."],"Displays high-quality ads on your site that allow you to earn income.":["Zeigt hochwertige Anzeigen auf deiner Website an, mit denen du Geld verdienen kannst."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["Fügt deinen Inhalten einen Teilen-Button hinzu, sodass Besucher sie auf Social Media-Websites teilen können."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["Erlaubt dir, deine neuesten Inhalte automatisch auf Social Media-Websites wie Facebook und Twitter zu teilen."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["Fügt deinen Inhalten Gefällt mir-Buttons hinzu, sodass Besucher zeigen können, wenn ihnen die Inhalte gefallen."],"Allows registered users to log in to your site with their WordPress.com accounts.":["Erlaubt registrierten Nutzern, sich bei deiner Website mit ihren WordPress.com-Konten anzumelden."],"Protects your site from traditional and distributed brute force login attacks.":["Schützt deine Website vor herkömmlichen und verteilten Brute-Force-Anmeldeangriffen."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["Sichert deine Website auf den globalen WordPress.com-Servern, sodass du deine Inhalte wiederherstellen kannst, falls ein Notfall oder Fehler auftritt."],"Removes spam from comments and contact forms.":["Entfernt Spam aus Kommentaren und Kontaktformularen."],"We are committed to your privacy and security. ":["Der Schutz und die Sicherheit deiner Daten sind uns ein wichtiges Anliegen. "],"View all Jetpack plans":["Alle Jetpack-Tarife anzeigen"],"Manage your plan":["Deinen Tarif verwalten"],"Your Plan":["Dein Tarif"],"You’re currently on Jetpack %(plan)s.":["Du verwendest derzeit Jetpack %(plan)s."],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["Erlaubt Lesern, deine Beiträge und Kommentare zu abonnieren und Benachrichtigungen über neue Inhalte per E-Mail zu erhalten."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["Ersetzt das WordPress-Standardkommentarformular durch ein neues Kommentarsystem, das Social Media-Anmeldeoptionen enthält."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}Aktivieren{{/a}}, um die integrierte WordPress-Suche durch die Jetpack-Suche, eine verbesserte Suchfunktion, zu ersetzen."],"Add Search (Jetpack) Widget":["Such-Widget (Jetpack) hinzufügen"],"Jetpack Search is powering search on your site.":["Jetpack Suche unterstützt die Suche auf deiner Website."],"Manage your plugins":["Plugins verwalten"],"Moderate comments":["Kommentare moderieren"],"Error updating privacy settings. %(error)s":["Fehler beim Aktualisieren der Datenschutzeinstellungen. %(error)s"],"Updated privacy settings.":["Datenschutzeinstellungen wurden aktualisiert."],"Updating privacy settings…":["Datenschutzeinstellungen werden aktualisiert …"],"Add Jetpack Search Widget":["Jetpack Suche-Widget hinzufügen"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["Füge das Jetpack Suche-Widget zu deiner Seitenleiste hinzu, um Sortier- und Filterfunktionen zu konfigurieren."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["Vollständige Sicherheitssuite, Automatisierungswerkzeuge für Marketing und Einnahmen, unbegrenztes Video-Hosting, unbegrenzte Themes, verbesserte Suche und vorrangiger Support."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["Vollständige Sicherheitssuite, Automatisierungswerkzeuge für Marketing und Einnahmen, unbegrenztes Video-Hosting und vorrangiger Support."],"Daily backups, spam filtering, and priority support.":["Tägliche Backups, Spamfilter und vorrangiger Support."],"Always-on Security":["Dauerhafte Sicherheit"],"Activate video hosting":[""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Echtzeit-Backup aller Website-Daten mit unbegrenztem Speicherplatz, Ein-Klick-Wiederherstellungen, automatisierten Sicherheitsscans und vorrangigem Support"],"Design the perfect website":["Gestalte deine perfekte Website"],"Set up Jetpack":["Jetpack einrichten"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["Backup aller Website-Daten in Echtzeit mit unbegrenztem Speicherplatz, Ein-Klick-Wiederherstellungen und automatisierten Sicherheitsscans."],"Jetpack Search":["Jetpack Suche"],"Jetpack version %(version)s":["Jetpack-Version %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["Deine Website wird in Echtzeit gesichert und regelmäßig auf Sicherheitsbedrohungen überprüft."],"Daily backup of all your site data with unlimited space and one-click restores":["Tägliches Backup aller Website-Daten mit unbegrenztem Speicherplatz und Ein-Klick-Wiederherstellung"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Backup aller Website-Daten in Echtzeit mit unbegrenztem Speicherplatz, Ein-Klick-Wiederherstellung, automatisierten Sicherheitsscans und Ein-Klick-Bedrohungsbehebung."],"View your security activity":["Sicherheitsaktivitäten anzeigen"]," (powered by VaultPress).":[" (Bereitgestellt von VaultPress)."],"Customize Search Widget":["Such-Widget anpassen"],"Please correct the issue below and try again.":["Korrigiere bitte das unten genannte Problem und versuche es noch einmal.","Korrigiere bitte die unten genannten Probleme und versuche es noch einmal."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["Wir stellen sicher, dass deine Website frei von Sicherheitsbedrohungen bleibt. Wenn wir eine finden, werden wir dich benachrichtigen."],"Your site is being backed up in real-time.":["Das Backup deiner Website erfolgt in Echtzeit."],"Jetpack version":["Jetpack-Version"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}Zeige die Aktivität deiner Website an{{/a}} – in einem einzigen Feed."],"Activity":["Aktivität"],"Confirm each new phrase you add by pressing enter.":["Bestätige jeden neu eingegeben Satz mit der Eingabetaste."],"{{a}}View details{{/a}}":["{{a}}Details anzeigen{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["Vielen Dank, dass du dich für einen Jetpack-Professional-Tarif entschieden hast. Jetpack sichert jetzt deine Inhalte, führt eine Prüfung auf Sicherheitsbedrohungen durch und gewährt dir Zugriff auf Premium-Themes."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["Mit Jetpack Professional kannst du mit einem von 300 professionell gestalteten WordPress-Themes, darunter über 100 Premium-Themes, die perfekte Website erstellen. Passe deine Inhalte mit einer Vielzahl von Widgets an oder füge unbegrenzte Videos zu deinen Beiträgen und Seiten hinzu. Diese werden ohne Anzeigen oder Wasserzeichen wiedergegeben."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["Mit deinem Professional-Tarif ist es dank Inhaltsfreigabe und -planung, SEO-Tools und integrierten Abonnementoptionen einfach, mehr Leser zu gewinnen. Mit dem Button für Einfaches Bezahlen und integrierten Werbeanzeigen kannst du mit deiner Website Geld verdienen. Und wenn du Google Analytics integrierst, kannst du den Erfolg deiner Bemühungen überwachen."],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Dein Jetpack Tarif bietet dir alle Funktionen, darunter anlassbezogene Backups und Malwareprüfungen mit Ein-Klick-Wiederherstellung und Problembehebung. Deine Website wird vollständig vor Spam, bösartigem Code und Brute-Force-Anmeldeversuchen geschützt."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Schaue dir Jetpack Professional jetzt genauer an, um all die Vorteile deines neuen Tarifs kennenzulernen."],"Install premium themes":["Premium-Themes installieren"],"Review SEO features":["SEO-Funktionen prüfen"],"Welcome Professional":["Willkommen bei Professional"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["Vielen Dank, dass du dich für einen Jetpack Premium-Tarif entschieden hast. Jetpack sichert jetzt deine Website, führt eine Prüfung auf Sicherheitsbedrohungen durch und aktiviert Funktionen zum Geldverdienen."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["Mit Jetpack Premium kannst du die perfekte Website für die unterschiedlichsten Zwecke erstellen. Passe das Aussehen deiner Website mit einem von über 200 kostenlosen Themes an oder optimiere deine Inhalte mit bis zu 13 GB HD-Videos, die allesamt ohne Werbeanzeigen oder Wasserzeichen gehostet werden."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Mithilfe Jetpacks leistungsstarker Werkzeuge zum Teilen kannst du deine neuesten Beiträge automatisch in den Sozialen Medien teilen oder die erneute Freigabe deiner Inhalte zu einem beliebigen Datum oder einer beliebigen Uhrzeit planen. Und mit Werkzeugen wie Zahlungs-Buttons und Werbeanzeigen kannst du neben deiner Leserschaft auch dein Geschäft aufbauen."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Schaue dir Jetpack Premium jetzt genauer an, um all die Vorteile deines neuen Tarifs kennenzulernen."],"Monetize your site with ads":["Verdiene auf deiner Website Geld mit Werbung"],"Welcome Premium":["Willkommen bei Premium"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["Vielen Dank, dass du dich für einen Jetpack Persönlich-Tarif entschieden hast. Jetpack sichert jetzt deine Website und führt eine Prüfung auf Sicherheitsbedrohungen durch."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["Mit Jetpack Persönlich hast du Zugriff auf über 100 kostenlose, professionell gestaltete WordPress-Themes. Wähle das Theme, das am besten zu deiner Website passt, und passe Farben bzw. Bilder an oder füge unterschiedlichste neue Widgets hinzu."],"Got it":[""],"Welcome personal":["Willkommen bei Persönlich"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["Wenn du auf den Button unten klickst, stimmst du unseren {{tosLink}}Geschäftsbedingungen{{/tosLink}} und der {{shareDetailsLink}}Datenübermittlung{{/shareDetailsLink}} an WordPress.com zu."],"Jetpack Stats People":["Jetpack Statistiken Personen"],"Hello there! Your stats have been activated.":["Hallo! Deine Statistik wurde aktiviert."],"Just give us a little time to collect data so we can display it for you here.":["Gib uns nur ein wenig Zeit, um Daten zu sammeln, damit wir diese hier für dich anzeigen können."],"Okay, got it!":["Alles klar, fertig!"],"Display ads below posts on":["Werbeanzeigen einblenden unter Inhalten auf"],"Additional ad placements":["Zusätzliche Werbeanzeigenplatzierungen"],"Top of each page":["Oben auf jeder Seite"],"Second ad below post":["Zweite Werbeanzeige unter Beitrag"],"Archives":["Archive"],"Explore Professional":["Professional erkunden"],"Compare All Plans":["Alle Tarife vergleichen"],"Person with laptop":["Mensch mit Laptop"],"Your Jetpack site is ready to go!":["Dein Jetpack ist einsatzbereit!"],"Stars":["Sterne"],"Jupiter":["Jupiter"],"Welcome to Jetpack Personal":["Willkommen bei Jetpack Persönlich"],"Welcome to Jetpack Premium":["Willkommen bei Jetpack Premium"],"Welcome to Jetpack Professional":["Willkommen bei Jetpack Professional"],"Schedule posts":[""],"Activate Publicize":["Publicize aktivieren"],"Your site is backed up.":["Deine Website ist gesichert."],"Image Performance":["Bilder-Perfomance"],"Get WordPress Apps for every device":["Sichere dir WordPress-Apps für alle Geräte"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Verwalte all deine Websites von einem einzigen Dashboard aus: Veröffentliche Inhalte, verfolge Statistiken, moderiere Kommentare und vieles mehr – wo auch immer du gerade bist."],"I already use this app.":["Ich verwende diese App bereits."],"Create address":["Adresse erstellen"],"Priority support":["Vorrangiger Support"],"Add sharing buttons to your posts":["Füge Teilen-Buttons zu deinen Beiträgen hinzu."],"Automatically share your posts to social networks":["Teile deine Beiträge automatisch in sozialen Netzwerken."],"Updating settings…":["Einstellungen werden aktualisiert …"],"Updating Post by Email address…":["„Per E-Mail bloggen“-Adresse wird aktualisiert …"],"Your paid plan gives you access to prioritized Jetpack support.":["Mit deinem kostenpflichtigen Tarif erhältst du Zugriff auf bevorzugten Jetpack-Support."],"You have paid for backups but they're not yet active.":["Du hast für Backups bezahlt, diese sind jedoch noch nicht aktiv."],"You have paid for backups and security scanning but they’re not yet active.":["Du hast für Backups und Sicherheitsscans bezahlt, diese sind jedoch noch nicht aktiv."],"Click \"Set Up\" to finish installation.":["Klicke „Einrichtung“, um die Installation fertigzustellen."],"Checking site status…":["Website-Status wird überprüft …"],"Pages":["Seiten"],"We're here to help":["Wir helfen gerne"],"Jetpack comes with free, basic support for all users.":["Für Jetpack gibt es kostenlosen Basis-Support für alle Benutzer."],"Ask a question":["Eine Frage stellen"],"Search our support site":["Auf unserer Support-Website suchen"],"Get a faster resolution to your support questions.":["Deine Support-Fragen werden schneller beantwortet."],"Host fast, high-quality, ad-free video.":["Schnelle, qualitativ hochwertige, werbefreie Videos hosten."],"Generate income with high-quality ads.":["Mit qualitativ hochwertigen Werbeanzeigen Geld verdienen."],"Real-time site backups and automatic threat resolution.":["Website-Backups in Echtzeit und automatische Behebung von Bedrohungen."],"Protect against data loss, malware, and malicious attacks.":["Schutz vor Datenverlust, Malware und bösartigen Angriffen."],"Integrate easily with Google Analytics.":["Einfache Integration von Google Analytics."],"Help your content get found and shared with SEO tools.":["Sorge mit SEO-Werkzeuge dafür, dass deine Inhalte gefunden und geteilt werden."],"Protect your site from spam.":["Schütze deine Website vor Spam."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["Diese Website ist nicht mit WordPress.com verbunden. Bitte den Websiteadministrator, die Verbindung herzustellen."],"Spam filtering":["Spam-Filterung"],"Daily, automated malware scanning":["Tägliche, automatisierte Malwareüberprüfung"],"Daily, automated backups (unlimited storage)":["Tägliche, automatisierte Backups (unbegrenzter Speicherplatz)"],"Daily, automated malware scanning with automated resolution":["Tägliche, automatisierte Malware-Überprüfung mit automatischer Behebung"],"Unlimited, high-speed video hosting":[""],"SEO preview tools":["SEO-Vorschauwerkzeuge"],"Site stats, related content, and sharing tools":["Website-Statistiken, ähnliche Inhalte und Werkzeuge zum Teilen"],"Brute force attack protection and downtime monitoring":["Schutz vor Brute-Force-Angriffen und Überwachung der Ausfallzeiten"],"Unlimited, high-speed image hosting":["Unbegrenztes schnelles Bildhosting"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["Wenn du %(siteName)s von WordPress.com trennst, hast du keinen Zugriff mehr auf:"],"Read more about Jetpack benefits":["Weitere Informationen zu den Vorteilen von Jetpack"],"An Automattic Airline":["Ein Produkt des US-Unternehmens Automattic, Inc."],"Manage site connection":["Websiteverbindung verwalten"],"Connect your account to WordPress.com to view more stats":["Konto mit WordPress.com verbinden, um mehr Statistiken anzuzeigen"],"Theme enhancements":["Theme-Erweiterungen"],"Load more posts using the default theme behavior":["Mehr Beiträge mit dem Standard-Theme-Verhalten laden"],"Load more posts in page with a button":["Mehr Beiträge in Seite mit einem Button laden"],"Load more posts as the reader scrolls down":["Mehr Beiträge laden, wenn der Leser nach unten blättert"],"Theme support required.":["Theme-Unterstützung erforderlich."],"Learn more about adding support for Infinite Scroll to your theme.":["Erfahre mehr darüber, wie du deinem Theme Support für unendliches Scrollen hinzufügen kannst."],"Use excerpts instead of full posts on front page and archive pages":["Auf der Titel- und den Archivseiten nur Auszüge statt vollständige Beiträge verwenden"],"Show featured images":["Hervorgehobene Bilder anzeigen"],"Enable the WordPress.com toolbar":["WordPress.com-Werkzeugleiste aktivieren"],"Writing tools available to you will be shown here when an administrator enables them.":["Schreibwerkzeuge, die dir zu Verfügung stehen, werden hier angezeigt, wenn sie ein Administrator aktiviert."],"Portfolios":["Portfolios"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["{{b}}Die Verifizierung deiner Website durch diese Dienste ist nicht erforderlich{{/b}}, damit deine Website von Suchmaschinen indiziert wird. Füge unten den HTML-Tag-Code ein, um diese erweiterten Suchmaschinenwerkzeuge zu nutzen und deine Website durch einen Dienst verifizieren zu lassen. Lies bei Problemen die {{support}}vollständige Anleitung{{/support}}. Unterstützte Verifizierungsdienste: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Tools{{/bing}}, {{pinterest}}Pinterest Website-Bestätigung{{/pinterest}} und {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["XML-Sitemaps generieren"],"Collecting valuable traffic stats and insights":["Sammeln wertvoller Traffic-Statistiken und Einsichten"],"The image helps collect stats, but should work when hidden.":["Das Bild unterstützt das Sammeln von Statistiken, sollte aber funktionieren, wenn es ausgeblendet wird."],"Count logged in page views from":["Erfasse Aufrufe von angemeldetem"],"Allow stats reports to be viewed by":["Anzeige von Statistikberichten erlauben für"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["Wenn du eine weitergehende Kontrolle wünschst, kannst du diese Einstellungen ändern. Lies mehr darüber, wie du die {{a}}SEO deiner Website optimieren{{/a}} kannst."],"Configure your SEO settings":["Deine SEO-Einstellungen konfigurieren"],"In \"Upgrade\"":["In „Upgrade“"],"Configure your Google Analytics settings":["Deine Einstellungen von Google Analytics konfigurieren"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Zeige Werbeanzeigen im ersten Artikel auf deiner Startseite oder am Ende jeder Seite und jedes Beitrags an. Platziere zusätzliche Werbeanzeigen oben auf deiner Website und in jedem Widget-Bereich, um deine Einnahmen zu steigern."],"Enable ads and display an ad below each post":["Werbeanzeigen aktivieren und eine Werbeanzeige unter jedem Beitrag einblenden"],"Configure your sharing buttons":["Deine Teilen-Buttons konfigurieren"],"Connect your social media accounts":["Deine Social Media-Konten verknüpfen"],"Match accounts using email addresses":["Konten mithilfe von E-Mail-Adressen abgleichen"],"Require accounts to use WordPress.com Two-Step Authentication":["Konten müssen Zwei-Schritt-Authentifizierung von WordPress.com verwenden"],"Add to whitelist":["Zur Positivliste hinzufügen"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["Du kannst eine IP-Adresse oder eine Serie von Adressen auf die Positivliste setzen und so dafür sorgen, dass diese niemals von Jetpack blockiert werden. IPv4 und IPv6 sind zulässig. Gib für einen Bereich den unteren und oberen Wert ein (getrennt durch einen Bindestrich). Beispiel: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["Deine Website ist gesichert und weist keine Bedrohungen auf."],"Checking your spam protection…":["Spam-Schutz wird überprüft …"],"Fetching key…":["Schlüssel wird abgerufen …"],"Your site needs an Antispam key.":["Deine Website benötigt einen Antispam-Schlüssel."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["Es ist ein Problem mit deinem Antispam-API-Schlüssel aufgetreten. {{a}}Weitere Informationen{{/a}}."],"Your site is not protected from spam.":["Deine Website ist nicht gegen Spam geschützt."],"Your Antispam key is valid.":["Dein Antispam-Schlüssel ist gültig."],"Your site is protected from spam.":["Deine Website ist gegen Spam geschützt."],"Checking key…":["Schlüssel wird überprüft …"],"Your API key":["Dein API-Schlüssel"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["Wenn du noch keinen API-Schlüssel hast, dann {{a}}rufe hier deinen API-Schlüssel ab{{/a}}. Du wirst dann durch den entsprechenden Vorgang geführt."],"No search results found for %(term)s":["Keine Suchergebnisse gefunden für %(term)s"],"Enter a search term to find settings or close search.":["Gib einen Suchbegriff ein, um Einstellungen zu finden, oder schließe die Suche."],"Connections":["Verbindungen"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Deine Website ist im Entwicklungsmodus. Deswegen kann sie nicht mit WordPress.com verbunden werden."],"Your site is connected to WordPress.com.":["Deine Website ist mit WordPress.com verbunden."],"You are the Jetpack owner.":["Du bist der Jetpack-Besitzer."],"Connected as {{span}}%(username)s{{/span}}":["Verbunden als {{span}}%(username)s{{/span}}"],"View your Email Followers":["E-Mail-Follower anzeigen"],"Color scheme":["Farbschema"],"Enable Markdown use for comments.":["Verwendung von Markdown für Kommentare aktivieren."],"Updated settings.":["Einstellungen aktualisiert."],"Error updating settings. %(error)s":["Fehler beim Aktualisieren der Einstellungen. %(error)s"],"Regenerated Post by Email address.":["„Per E-Mail bloggen“-Adresse erneut erstellen."],"Error regenerating Post by Email address. %(error)s":["Fehler beim Neuerstellen der „Per E-Mail bloggen“-Adresse. %(error)s"],"Updated settings. Refreshing page…":["Einstellungen aktualisiert. Seite wird aktualisiert …"],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["Aktuell im {{a}}Entwicklungsmodus{{/a}} (einige Funktionen sind deaktiviert), da:"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}Der Filter jetpack_development_mode ist aktiv{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}Die Konstante JETPACK_DEV_DEBUG ist definiert{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}in der URL deiner Website ein Punkt fehlt (z. B. http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics ist ein kostenloser Dienst, der unsere {{a}}integrierten Statistiken{{/a}} um weitere Einsichten in deinen Traffic ergänzt. Die WordPress.com-Statistiken und Google Analytics nutzen unterschiedliche Methoden zum Identifizieren und Verfolgen der Aktivitäten auf deiner Website. Daher zeigen diese normalerweise leicht unterschiedliche Gesamtzahlen für deine Besuche, Aufrufe usw."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Google Analytics konfigurieren"],"Activate Google Analytics":["Google Analytics aktivieren"],"Download the free apps":["Lade die kostenlosen-Apps herunter"],"Upgrade Focus: VideoPress For Weddings":["Schwerpunkt des Upgrades: VideoPress für Hochzeiten"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}Du kannst jetzt auch ähnliche Beiträge im Customizer konfigurieren. {{ExternalLink}}Probiere es aus!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["Standardmäßig werden Werbeanzeigen am Ende jeder Seite oder jedes Beitrags sowie des ersten Artikels deiner Startseite angezeigt. Du kannst sie auch oben in deine Website und in beliebige Widget-Bereiche einfügen, um deine Einkünfte zu erhöhen!"],"Display an ad unit at the top of your site.":["Zeige eine Werbeeinheit oben auf deiner Website an."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["Durch die Aktivierung von Werbeanzeigen stimmst du den Automattic-{{link}}Geschäftsbedingungen{{/link}} für Werbeanzeigen zu."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Dein Server ist falsch konfiguriert. Darum kann Jetpack Protect deine Website nicht effektiv schützen."],"In \"Mobile\"":["Unter „Mobil“"],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Konfiguriere deine Monitor-Benachrichtigungseinstellungen auf WordPress.com{{/link}}"],"View your earnings":["Deine Einkünfte anzeigen"],"Configure site SEO":[""],"Activate SEO tools":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["Klicke zunächst in deinem Beitragseditor auf „Dateien hinzufügen“ und lade ein Video hoch. Alles andere erledigen wir!"],"Video Hosting":["Video-Hosting"],"SEO Tools":["SEO-Werkzeuge"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Erweiterte SEO-Werkzeuge, damit die Suche nach relevanten Inhalten zu besseren Suchergebnissen für deine Website führt."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["Die einfachste Möglichkeit, Videos ohne Werbung und Branding auf deine Website hochzuladen. Du erhältst Statistiken zum Abspielen und Teilen von Videos. Der Videoplayer ist schlank und responsiv."],"You are running Jetpack on a staging server.":["Du führst Jetpack auf einem Staging-Server aus."],"More Info":["Weitere Informationen"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Sichtbarkeit von „Likes“ in den Einstellungen des Teilen-Moduls verwalten{{/a}}"],"Your current IP: %(ip)s":["Deine aktuelle IP: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["In diesem Tab gibt es nicht gespeicherte Einstellungen, die du beim Verlassen verlierst. Möchtest du fortfahren?"],"This will reset all Jetpack options, are you sure?":["Das wird alle Jetpack-Einstellungen zurücksetzen, bist du sicher?"],"Search for a Jetpack feature.":["Suche nach einer Jetpack-Funktion"],"Configure your Security Scans":["Sicherheitsscans konfigurieren"],"Subscriber":["Abonnent"],"Big iPhone/iPad Update Now Available":["Umfangreiches iPhone/iPad-Update jetzt verfügbar"],"The WordPress for Android App Gets a Big Facelift":["Die WordPress-App für Android wurde umfassend überarbeitet."],"WordPress.com Likes are:":[" \"Gefällt mir\"-Angaben auf WordPress.com sind:"],"Comments headline":["Kommentar-Überschrift"],"A few catchy words to motivate your readers to comment.":["Einige zündende Worte, die Leser zu Kommentaren anregen."],"Show a \"follow blog\" option in the comment form":["Option \"Blog folgen\" im Kommentarformular anzeigen"],"Show a \"follow comments\" option in the comment form":["Option \"Kommentaren folgen\" im Kommentarformular anzeigen"],"Put a chart showing 48 hours of views in the admin bar":[" Diagramm mit Aufrufen von 48 Stunden in der Adminleiste anzeigen"],"Hide the stats smiley face image":[" Das Statistik-Smiley-Bild verbergen"],"Whitelisted IP addresses":["IP-Adressen auf der Positivliste"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Promo für WordPress Mobil-Apps in der Fußzeile des Mobil-Themes zeigen"],"Copied!":["Kopiert!"],"Highlight and copy the following text to your clipboard:":["Markiere den folgenden Text und kopiere ihn in deine Zwischenablage:"],"Regenerate address":["Adresse erneut generieren"],"Automatically proofread content when: ":["Inhalte automatisch korrekturlesen, wenn: "],"A post or page is first published":["Ein Beitrag oder eine Seite wurden erstmals veröffentlicht"],"A post or page is updated":["Ein Beitrag oder eine Seite wurde aktualisiert"],"Automatic Language Detection":["Automatische Spracherkennung"],"The proofreader supports English, French, German, Portuguese and Spanish.":["Der Korrekturleser unterstützt Englisch, Französisch, Deutsch, Portugiesisch und Spanisch."],"Enable proofreading for the following grammar and style rules: ":["Korrekturlesen für folgende Regeln von Grammatik und Stil aktivieren: "],"Add a phrase":["Ausdruck hinzufügen"],"Cheatin' uh?":["Wird geschummelt?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}} Würdest du uns mitteilen, warum du Jetpack nicht verbunden hast, indem du {{a}} 2 Fragen beantwortest{{/a}}?{{/p}}{{p}}Eine Jetpack Verbindung wird für unsere kostenlosen Sicherheits und Traffic-Funktionen benötigt.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Willkommen bei {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["Dein Jetpack ist bereits verbunden."],"You're fueled up and ready to go, Jetpack is now active.":["Alles fertig, es kann losgehen. Jetpack wurde aktiviert."],"You're fueled up and ready to go.":["Alles fertig, es kann losgehen."],"You are currently running a development version of Jetpack.":["Du führst zurzeit eine Entwicklungsversion von Jetpack aus."],"Submit Beta feedback":["Beta Feedback senden"],"What would you like to see on your Jetpack Dashboard?":["Was würdest du gern im Jetpack-Dashboard sehen?"],"Let us know!":["Sag uns Bescheid!"],"Saving…":["Speichern …"],"Save Settings":["Einstellungen speichern"],"Jetpack Stats Icon":["Symbol von Jetpack Stats"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Website-Statistiken aktivieren{{/a}}, um ausführliche Statistiken anzusehen, wie \"Gefällt mir\", Follower, Abonnenten usw. {{a1}}Weitere Informationen{{/a1}}"],"Activate Site Stats":["Website-Statistiken aktivieren"],"Security Scanning":["Sicherheitsscans"],"Site Backups":["Website-Backups"],"Upgrade":["Aufrüsten"],"ACTIVE":["AKTIV"],"Your site is on Development Mode":["Deine Website befindet sich im Entwicklungsmodus"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Wenn du verbunden bist, kannst du ein Upgrade auf einen kostenpflichtigen Tarif durchführen, um erstklassige Sicherheit, Spam-Schutz und Support mit Priorität zu erhalten."],"View your spam stats":["Spam-Statistiken ansehen"],"View your security dashboard":["Sicherheits-Dashboard ansehen"],"The site is in Development Mode, so you can not connect to WordPress.com.":["Die Website ist im Entwicklungsmodus, deswegen kannst du dich nicht mit WordPress.com verbinden."],"Link your account to WordPress.com to get the most out of Jetpack.":["Verknüpfe dein Konto mit WordPress.com, um Jetpack optimal zu nutzen."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["Für automatische und umfassende Scans gegen Bedrohungen {{a}}bitte VaultPress installieren und aktivieren{{/a}}."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["Für automatische und umfassende Scans gegen Bedrohungen {{a}}wähle bitte einen anderen Tarif{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack blockiert böswillige Anmeldeversuche. Die Daten werden in Kürze hier angezeigt."],"Total malicious attacks blocked on your site.":["Gesamtzahl blockierter Angriffe auf deine Website."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Protect aktivieren{{/a}}, um deine Website vor böswilligen Anmeldeversuchen zu schützen."],"All plugins are up-to-date. Awesome work!":["Alle Plugins sind auf dem neuesten Stand. Gute Arbeit!"],"Jetpack is improving and optimizing your image speed.":["Jetpack verbessert und optimiert die Ladezeit deiner Bilder."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack überwacht deine Website. Scheint die Website defekt zu sein, erhältst du eine E-Mail."],"Security":["Sicherheit"],"Performance":["Performance"],"Backups":["Backups"],"{{a}}View backup details{{/a}}.":["{{a}}Backup-Details ansehen{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["Automatisches Backup der gesamten Website? {{a}}Bitte VaultPress installieren und aktivieren{{/a}}."],"Unavailable in Dev Mode.":["Nicht im Entwicklermodus verfügbar."],"Spam Protection":["Spamschutz"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["Modernster Spamschutz gefällig? {{a}}Akismet installieren{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["Modernster Spamschutz gefällig? {{a}}Akismet aktivieren{{/a}}."],"Invalid key":["Ungültiger Schlüssel"],"Unavailable in Dev Mode":["Im Entwicklermodus nicht verfügbar"],"Activating recommended features…":["Die empfohlenen Funktionen werden aktiviert …"],"Recommended features active.":["Die empfohlenen Funktionen sind aktiviert."],"Recommended features failed to activate. %(error)s":["Fehler beim Aktivieren empfohlener Funktionen. %(error)s"],"Activating %(slug)s…":["%(slug)s wird aktiviert …"],"%(slug)s has been activated.":["%(slug)s wurde aktiviert."],"%(slug)s failed to activate. %(error)s":["Fehler beim Aktivieren von %(slug)s %(error)s"],"Deactivating %(slug)s…":["%(slug)s wird deaktiviert …"],"%(slug)s has been deactivated.":["%(slug)s wurde deaktiviert."],"%(slug)s failed to deactivate. %(error)s":["Fehler beim Deaktivieren von %(slug)s. %(error)s"],"Updating %(slug)s settings…":["%(slug)s-Einstellungen werden aktualisiert …"],"Updated %(slug)s settings.":["%(slug)s-Einstellungen wurden aktualisiert."],"Error updating %(slug)s settings. %(error)s":["Fehler beim Aktualisieren der %(slug)s-Einstellungen %(error)s"],"Updating %(slug)s address…":["Adresse von %(slug)s wird aktualisiert …"],"Regenerated %(slug)s address .":["Adresse von %(slug)s erneut generiert."],"Error regenerating %(slug)s address. %(error)s":["Fehler beim erneuten Generieren der Adresse %(slug)s. %(error)s"],"Resetting Jetpack options…":["Die Jetpack-Optionen werden zurückgesetzt …"],"Options reset.":["Die Optionen wurden zurückgesetzt."],"Options failed to reset.":["Fehler beim Zurücksetzen der Optionen."],"There was an error disconnecting Jetpack. Error: %(error)s":["Fehler beim Trennen von Jetpack. Fehler: %(error)s"],"Unlinking from WordPress.com":["Verbindung mit WordPress.com wird aufgehoben …"],"Unlinked from WordPress.com.":["Verbindung mit WordPress.com aufgehoben."],"Error unlinking from WordPress.com. %(error)s":["Fehler beim Aufheben der Verbindung mit WordPress.com. %(error)s"],"At A Glance":["Auf einen Blick"],"Clichés":["Klischees"],"Dashboard":["Dashboard"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Würdest du uns mitteilen, warum? {{a}}Die Antworten auf zwei einfache Fragen{{/a}} helfen uns bei der Verbesserung von Jetpack."],"Automattic's Privacy Policy":["Datenschutzerklärung von Automattic"],"WordPress.com Terms of Service":["Geschäftsbedingungen von WordPress.com"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}Aktivieren{{/a}}, um die Performance und Geschwindigkeit deiner Bilder zu verbessern."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Automatische Aktualisierungen der Plugins aktivieren{{/a}}"],"Plugin Updates":["Plugin-Updates"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["Um deine gesamte Website automatisch zu sichern, {{a}}führe bitte ein Upgrade deines Kontos durch{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[" Dein Akismet-Schlüssel fehlt oder ist ungültig. {{akismetSettings}}Zur Behebung bitte Akismet-Einstellungen aufsuchen{{/akismetSettings}}."],"No threats found, you're good to go!":["Keine Bedrohungen gefunden. Es kann weitergehen."],"{{a}}Contact Support{{/a}}":["{{a}}Support kontaktieren{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}Details unter VaultPress.com ansehen{{/a}}"],"Uh oh, %(number)s threat found.":["%(number)s Bedrohung gefunden.","%(number)s Bedrohungen gefunden."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}Monitor aktivieren{{/a}}, um E-Mail-Benachrichtigungen zu erhalten, wenn deine Website ausfällt."],"Loading…":["Wird geladen …"],"Downtime monitoring":[""],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}Weitere Statistiken auf WordPress.com ansehen {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}Ausführliche Statistiken ansehen{{/button}}"],"All-time comments":["Kommentare insgesamt"],"All-time views":["Aufrufe insgesamt"],"%(number)s View":["%(number)s Aufruf","%(number)s Aufrufe"],"Best overall day":["Bester Tag (insgesamt)"],"Views today":["Aufrufe heute"],"Months":["Monate"],"Weeks":["Wochen"],"Days":["Tage"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["Fehler beim Laden der Statistiken. Bitte später erneut versuchen oder {{a}}Statistiken auf WordPress.com ansehen{{/a}}."],"Click to view detailed stats.":["Klicken, um detaillierte Statistiken anzusehen."],"Views: %(numberOfViews)s":["Aufrufe: %(numberOfViews)s"],"Week of %(date)s":["Woche von %(date)s"],"Site Security":["Website-Sicherheit"],"Activate recommended features":["Empfohlene Funktionen aktivieren"],"Link to WordPress.com":["Mit WordPress.com verknüpfen."],"Unlink me from WordPress.com":["Meine Verknüpfung mit WordPress.com aufheben."],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["Bei der Verbindung zu Jetpack ist ein Fehler aufgetreten. Bitte klicke erneut auf „Mit WordPress.com verbinden“."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["Bei der Verbindung von Jetpack ist ein Fehler aufgetreten. Deaktiviere das Jetpack-Plugin, aktiviere es erneut und stelle dann wieder eine Verbindung her."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Du musst in deinem WordPress.com-Blog angemeldet bleiben, während du Jetpack autorisierst."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Dein Jetpack hat ein Problem.{{/s}} Wir entschuldigen uns für diese Unannehmlichkeit. Bitte versuche es später nochmal. Falls das Problem weiterhin besteht, kontaktiere bitte den Support mit dieser Nachricht: %(error_key)s"],"Disconnecting Jetpack":["Jetpack wird getrennt"],"Learn more":["Mehr erfahren"],"Posts":["Beiträge"],"Front page":["Startseite"],"Upload videos":[""],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Ähnliche Inhalte am Ende des Beitrags anzeigen"],"Related":["Ähnliche Beiträge"],"Save":["Speichern"],"Email Address":["E-Mail-Adresse"],"Media":["Mediathek"],"Themes":["Themes"],"Site Stats":["Website Statistiken"],"Sharing":["Teilen"],"Testimonials":["Referenzen"],"Cancel":["Abbrechen"],"Comments":["Kommentare"],"Ignored Phrases":["Zu ignorierende Ausdr&uuml;cke"],"Use automatically detected language to proofread posts and pages":["Automatisch erkannte Sprache zum Korrekturlesen von Beiträgen und Seiten benutzen"],"Redundant Phrases":["&Uuml;berfl&uuml;ssige S&auml;tze"],"Phrases to Avoid":["Zu vermeidende Formulierungen"],"Passive Voice":["Passive Sprache"],"Jargon":["Umgangssprache"],"Hidden Verbs":["Verborgene Verben"],"Double Negatives":["Doppelte Verneinung"],"Diacritical Marks":["Diakritische Zeichen"],"Complex Phrases":["Komplexe S&auml;tze"],"Bias Language":["Wertende Sprache"],"English Options":["Optionen nur für die englische Sprache"],"Proofreading":["Korrekturlesen"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack konnte WordPress.com nicht kontaktieren: %(error_key)s. Das bedeutet in der Regel, dass etwas auf deinem Web-Host falsch konfiguriert ist."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com hat gerade Probleme und kann sich nicht mit deinem Jetpack Plugin verbinden. Bitte versuche es später noch einmal."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Dein Jetpack hat ein Problem.{{/s}} Verbindung zu WordPress.com nicht möglich. Das bedeutet in der Regel, dass auf deine Website nicht öffentlich zugegriffen werden kann (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Auf deine Website muss öffentlich zugegriffen werden können, um Jetpack zu nutzen: %(error_key)s"],"You have successfully disconnected Jetpack":["Du hast die Verbindung mit Jetpack getrennt."],"Edit":["Bearbeiten"],"Connected":["Verbunden"],"Activate":["Aktivieren"],"Active":["Aktiv"],"Search":["Suchen"],"Settings":["Einstellungen"],"Learn More":["Mehr erfahren"],"Disconnect Jetpack":["Jetpack trennen"],"Test your site’s compatibility with Jetpack.":["Teste, ob deine Website mit Jetpack kompatibel ist."],"Settings header\u0004Plugin Autoupdates":["Automatische Plugin-Updates"],"Settings header\u0004Downtime monitoring":["Überwachung von Ausfallzeiten"],"Settings header\u0004Privacy Settings":["Privatsphäre-Einstellungen"],"Settings header\u0004WordPress.com toolbar":["WordPress.com-Werkzeugleiste"],"Settings header\u0004Composing":["Erstellen"],"Settings header\u0004Site stats":["Website-Statistiken"],"Settings header\u0004Search engine optimization":["Suchmaschinenoptimierung"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Teilen-Buttons"],"Settings header\u0004Publicize connections":["Publicize-Verbindungen"],"Settings header\u0004Like buttons":["Gefällt mir-Buttons"],"Settings header\u0004WordPress.com log in":["WordPress.com-Anmeldung"],"Settings header\u0004Brute force attack protection":["Schutz vor Brute-Force-Angriffen"],"Settings header\u0004Backups and security scanning":["Backups und Sicherheits-Scans"],"Settings header\u0004Spam filtering":["Spam-Filterung"],"Navigation item.\u0004Performance":["Performance"],"Navigation item.\u0004My Plan":["Mein Tarif"],"Navigation item.\u0004Dev Tools":["Entwickler-Werkzeuge"],"Navigation item.\u0004Settings":["Einstellungen"],"Navigation item.\u0004Discussion":["Diskussionen"],"Navigation item.\u0004Traffic":["Traffic"],"Navigation item.\u0004Sharing":["Teilen"],"Navigation item.\u0004At A Glance":["Auf einen Blick"],"Navigation item.\u0004Plans":["Tarife"],"Navigation item.\u0004Writing":["Schreiben"],"Navigation item.\u0004Reset Options (dev only)":["Optionen zurücksetzen (nur für Entwickler)"],"Navigation item.\u0004Security":["Sicherheit"],"Navigation item.\u0004At a Glance":["Auf einen Blick"],"Search term.\u0004terms of service":["Geschäftsbedingungen"],"Search term.\u0004tos":["BG"],"Search term.\u0004gdpr":["DSGVO"],"Search term.\u0004data":["Daten"],"Search term.\u0004tracks":["Verfolgt nach"],"Search term.\u0004privacy":["Datenschutz"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["Upgrade"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Aufrüsten"],"Button caption\u0004Saving…":["Speichern …"],"Button caption\u0004Save settings":["Einstellungen speichern"],"A heading for a block of related posts.\u0004Related":["Ähnlich"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Vorschau"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Verbunden bleiben"],"A caption for a button to disconnect.\u0004Disconnect":["Trennen"],"Short warning message\u0004Updates needed":["Updates sind erforderlich"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Bezahlt"],"A header for a preview area in the configuration screen.\u0004Preview":["Vorschau"],"Ads header\u0004Ads":["Werbeanzeigen"],"Dashboard widget header\u0004Site connection":["Websiteverbindung"],"Dashboard widget header\u0004Account connection":["Kontoverbindung"],"A caption for a small button to fix security issues.\u0004Threats":["Bedrohungen"],"A caption for a small button to fix security issues.\u0004FIX":["BEHEBEN"],"Short warning message about new threats found.\u0004Threats found!":["Bedrohungen wurden festgestellt."],"Short warning message about site having no security scan.\u0004No scanning":["Keine Überprüfung"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Aufrüsten"],"Short message informing user that the site is secure.\u0004Secure":["Sicher"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Ungültiger Schlüssel"],"Caption for a button to set up a feature.\u0004Set up":["Einrichtung"],"verb\u0004Copy":["Kopieren"],"Shorthand for Privacy Policy.\u0004Privacy":["Datenschutz"],"Shorthand for Terms of Service.\u0004Terms":["Geschäftsbedingungen"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Fehlersuche"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["Spamkommentare blockiert."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-de_DE_formal-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-de_DE_formal-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index c57fd651..00000000
--- a/plugins/jetpack/languages/json/jetpack-de_DE_formal-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"":{"po-revision-date":"2018-03-04 23:15:31+0000","mime-version":"1.0","content-type":"text/plain; charset=UTF-8","content-transfer-encoding":"8bit","plural-forms":"nplurals=2; plural=n != 1;","x-generator":"GlotPress/2.4.0-alpha","language":"de","project-id-version":"Plugins - Jetpack by WordPress.com - Development (trunk)"},"Show a thumbnail image where available":[null,""],"Keep tabs on your site and receive alerts the moment downtime is detected.":[null,""],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":[null,""],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":[null,""],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":[null,""],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":[null,""],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":[null,""],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":[null,""],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":[null,""],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":[null,""],"This feature has been disabled by a site administrator.":[null,""],"%(moduleName)s has been disabled by a site administrator.":[null,""],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":[null,""],"Configure your notification settings":[null,""],"Monitor your site's downtime":[null,""],"Jetpack’s Search module is a powerful replacement for the search capability built into WordPress.":[null,""],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":[null,""],"Plugin needs updating.":["Plugins need updating.","",""],"%(number)s":["%(number)s","",""],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":[null,""],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":[null,""],"Jetpack’s downtime monitor will keep tabs on your site, and alert you the moment that downtime is detected.":[null,""],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":[null,""],"Akismet checks your comments and contact form submissions against our global database of spam.":[null,""],"Privacy Information":[null,""],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":[null,""],"Add the Search (Jetpack) widget to your sidebar":[null,""],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":[null,""],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":[null,""],"Loads the next posts automatically when the reader approaches the bottom of the page.":[null,""],"Delays the loading of images until they are visible in the visitor's browser.":[null,""],"Hosts your image files on the global WordPress.com servers.":[null,""],"Allows you to publish new posts by sending an email to a special address.":[null,""],"Hosts your video files on the global WordPress.com servers.":[null,""],"Replaces the standard WordPress galleries with a full-screen photo browsing experience, including comments and EXIF metadata.":[null,""],"Adds a toolbar with links to all your sites, notifications, your WordPress.com profile, and the Reader.":[null,""],"Adds the Portfolio custom post type, allowing you to manage and showcase projects on your site.":[null,""],"Adds the Testimonial custom post type, allowing you to collect, organize, and display testimonials on your site.":[null,""],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":[null,""],"Checks your content for correct grammar and spelling, misused words, and style while you write.":[null,""],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":[null,""],"Automatically generates the files required for search engines to index your site.":[null,""],"Displays information on your site activity, including visitors and popular posts or pages.":[null,""],"Allows you to optimize your site and its content for better results in search engines.":[null,""],"Replaces the default WordPress search with a faster, filterable search experience.":[null,""],"Automatically displays similar content at the end of each post.":[null,""],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":[null,""],"Displays high-quality ads on your site that allow you to earn income.":[null,""],"Adds sharing buttons to your content so that visitors can share it on social media sites.":[null,""],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":[null,""],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":[null,""],"Allows registered users to log in to your site with their WordPress.com accounts.":[null,""],"Protects your site from traditional and distributed brute force login attacks.":[null,""],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":[null,""],"Removes spam from comments and contact forms.":[null,""],"We are committed to your privacy and security. ":[null,""],"View all Jetpack plans":[null,""],"Manage your plan":[null,""],"Your Plan":[null,""],"You’re currently on Jetpack %(plan)s.":[null,""],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":[null,""],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":[null,""],"{{a}}Activate{{/a}} to replace the WordPress built-in search with an improved search experience.":[null,""],"Add Search (Jetpack) Widget":[null,""],"Jetpack Search is powering search on your site.":[null,""],"Give your visitors {{a}}a great search experience{{/a}}.":[null,""],"Manage your plugins":[null,""],"Moderate comments":[null,""],"Error updating privacy settings. %(error)s":[null,""],"Updated privacy settings.":[null,""],"Updating privacy settings…":[null,""],"Add Jetpack Search Widget":[null,""],"Add the Jetpack search widget to your sidebar to configure advanced search filters.":[null,""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":[null,""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":[null,""],"Daily backups, spam filtering, and priority support.":[null,""],"Always-on security, a better search experience, unlimited CDN use, advanced marketing tools, and monetization services.":[null,""],"Powerful services for your site":[null,""],"Upgrade to a weekly coffee and fully protect your site from malware, infiltrations, and security loopholes with automated malware scanning.":[null,""],"Automated backups, one-click restores, spam filtering, and malware scanning.":[null,""],"Jetpack Premium now includes our full security suite":[null,""],"Automatic defense against hacks, malware, spam, data loss, and downtime with automated backups, unlimited storage, and malware scanning.":[null,""],"Always-on Security":[null,""],"Reach more people and earn money with automated social media scheduling, better search results, SEO preview tools, PayPal payments, and an ad program.":[null,""],"Get unlimited access to hundreds of professional themes, a superior search experience for your users, and unlimited high-speed, and ad-free video hosting.":[null,""],"A superior search experience powered by Elasticsearch providing your users with faster and more relevant search results. Previously only available to WordPress.com VIP customers and trusted by industry-leading brands.":[null,""],"Unlimited access to hundreds of premium WordPress themes with dedicated support directly from the theme authors.":[null,""],"Two great reasons to go Pro":[null,""],"Grow your traffic and revenue with social media scheduling, enhanced site search, SEO tools, PayPal payments, and an ad program.":[null,""],"Always-on security including real-time backups, malware scanning, and automatic threat resolution.":[null,""],"Design the perfect site with unlimited access to hundreds of themes and unlimited, high-speed, and ad-free video hosting.":[null,""],"Three great reasons to go Pro":[null,""],"Activate Video Hosting":[null,""],"Fast, optimized, ad-free, and unlimited video hosting for your site.":[null,""],"Browse Themes":[null,""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":[null,""],"Sites with large numbers of images can now activate the Lazy Loading Images feature, which significantly speeds up loading times for visitors. Instead of waiting for the entire page to load, Jetpack will instead show pages instantly, and only download additional images when they are about to come into view.":[null,""],"If this sounds like a great improvement (and it is) you can enable it now by clicking the toggle below.":[null,""],"Our faster site search is now available to all Professional plan customers. This replaces the default WordPress search with an Elasticsearch-powered infrastructure that returns faster, more relevant results to users.":[null,""],"This release of Jetpack brings major new features and big improvements to your WordPress site.":[null,""],"Speed up your site and its content":[null,""],"We have also upgraded all our Premium plan customers to unlimited high-speed video storage (up from 13GB), and significantly reduced the CSS and JavaScript assets that Jetpack downloads when using features like infinite scroll and embedding rich content.":[null,""],"Faster, more relevant search results":[null,""],"Read the full announcement!":[null,""],"Compare paid plans":[null,""],"Major new features from Jetpack":[null,""],"Faster, more relevant and more powerful sitewide search.":[null,""],"Hassle-free design, marketing, and security for your WordPress site. Connect Jetpack to a WordPress.com account to start building your own success story.":[null,""],"WordPress themes and customization tools for designing your site.":[null,""],"Design the perfect website":[null,""],"Bring your ideas to life with elegant and professional designs and code-free customization tools.":[null,""],"Jetpack's photon serves up lightning fast, optimized images":[null,""],"Jetpack's WordPress themes":[null,""],"Professional themes":[null,""],"Find the perfect design for your site from hundreds of available themes.":[null,""],"Jetpack's customization tools":[null,""],"Code-free customization":[null,""],"Customize your site with endless widget options, image galleries, and embedded media.":[null,""],"Jetpack's performance features":[null,""],"Deliver blazing fast images and video and improve site load times.":[null,""],"Drive more traffic to your site with Jetpack":[null,""],"Increase traffic and revenue":[null,""],"Reach more people and earn money with automated marketing tools.":[null,""],"Jetpack's site stats feature":[null,""],"Keep an eye on your success with simple, concise, and mobile-friendly stats.":[null,""],"Jetpack's publicize features":[null,""],"Automated marketing":[null,""],"Schedule social media posts in advance, show related content, and give better search results.":[null,""],"Jetpack's ads and PayPal features":[null,""],"Generate revenue":[null,""],"Monetize your site with high-quality ads and take PayPal payments.":[null,""],"Keep your site safe, 24/7":[null,""],"Automatic defense against hacks, malware, spam, data loss, and downtime.":[null,""],"Jetpack's monitor feature":[null,""],"Be alerted about any unexpected downtime the moment it happens.":[null,""],"Jetpack's Protect features":[null,""],"Guard your site against brute force login attacks, spam, and harmfulmalware injections.":[null,""],"Backup and restore":[null,""],"Automatic, real-time backups mean your entire site is always ready to be restored.":[null,""],"Set up Jetpack":[null,""],"Speed up your site":[null,""],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":[null,""],"Jetpack Search":[null,""],"Jetpack version %(version)s":[null,""],"Replace WordPress built-in search with an improved search experience":[null,""],"Your site is being backed up in real time and regularly scanned for security threats.":[null,""],"Daily backup of all your site data with unlimited space and one-click restores":[null,""],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":[null,""],"View your security activity":[null,""]," (powered by VaultPress).":[null,""],"Replace the default WordPress search with better results that will help your users find what they are looking for.":[null,""],"Customize Search Widget":[null,""],"Activate Search":[null,""],"Please correct the issue below and try again.":["Please correct the issues listed below and try again.","",""],"We are making sure your site stays free of security threats. You will be notified if we find one.":[null,""],"Your site is being backed up in real-time.":[null,""],"Jetpack version":[null,"Jetpack-Version"],"{{a}}View your site's activity{{/a}} in a single feed.":[null,""],"Your Jetpack Professional plan is taking care of business!":[null,"Ihr Jetpack Professional-Tarif kümmert sich um Ihr Geschäft!"],"Your Jetpack Premium plan is powering up!":[null,"Ihr Jetpack Premium-Tarif wird aktiviert!"],"Your Jetpack Personal plan is powering up!":[null,"Ihr Jetpack Personal-Tarif wird aktiviert!"],"Activity":[null,"Aktivität"],"Confirm each new phrase you add by pressing enter.":[null,"Jeden neu eingegeben Satz mit der Eingabetaste bestätigen."],"{{a}}View details{{/a}}":[null,""],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":[null,""],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":[null,""],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a simple payment button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":[null,""],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":[null,""],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":[null,""],"Install premium themes":[null,""],"Review SEO features":[null,""],"Welcome Professional":[null,""],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":[null,""],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":[null,""],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":[null,""],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":[null,""],"Monetize your site with ads":[null,""],"Welcome Premium":[null,""],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":[null,""],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":[null,""],"Got it!":[null,""],"Welcome personal":[null,""],"Connect your account to get the most out of Jetpack":[null,""],"By clicking the button below, you agree to our fascinating {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com":[null,""],"Jetpack Stats People":[null,""],"Hello there! Your stats have been activated.":[null,""],"Just give us a little time to collect data so we can display it for you here.":[null,""],"Okay, got it!":[null,""],"Display ads below posts on":[null,""],"Additional ad placements":[null,""],"Top of each page":[null,""],"Second ad below post":[null,""],"Archives":[null,""],"{{subhead}}Only with Jetpack Professional{{/subhead}}{{p}}Protect your site and work with Jetpack Personal: daily automated backups, unlimited storage, and expert priority support. Security essentials for every WordPress site starting from $3.50.{{/p}}{{p}}Or go Pro with more than 200 Premium Themes, business class security, unlimited video hosting, monetization, marketing automation, and SEO tools.{{/p}}":[null,""],"Explore Professional":[null,""],"Compare All Plans":[null,""],"Person with laptop":[null,""],"Your Jetpack site is ready to go!":[null,""],"We're now collecting stats, securing your site, and speeding up your images. Pretty soon you'll be able to see everything going on with your site right through Jetpack! Welcome aboard.":[null,""],"Stars":[null,""],"Jupiter":[null,""],"Welcome to Jetpack Personal":[null,""],"Welcome to Jetpack Premium":[null,""],"Welcome to Jetpack Professional":[null,""],"Social Media Scheduling":[null,""],"Schedule multiple Facebook, Twitter, and other social media postings in advance and view share history stats.":[null,""],"Schedule Posts":[null,""],"Activate Publicize":[null,""],"Explore Jetpack Professional":[null,""],"Introducing Unlimited Themes":[null,""],"Unlimited Premium Themes":[null,""],"Exclusive hand-crafted designs you will love with dedicated support directly from the theme authors.":[null,""],"Your site is backed up.":[null,""],"Image Performance":[null,""],"Get WordPress Apps for every device":[null,""],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":[null,""],"I already use this app.":[null,""],"Create address":[null,""],"Priority support":[null,""],"Add sharing buttons to your posts":[null,""],"Automatically share your posts to social networks":[null,""],"Updating settings…":[null,""],"Updating Post by Email address…":[null,""],"Your paid plan gives you access to prioritized Jetpack support.":[null,""],"You have paid for backups but they're not yet active.":[null,""],"You have paid for backups and security scanning but they’re not yet active.":[null,""],"Click \"Set Up\" to finish installation.":[null,""],"Checking site status…":[null,""],"Pages":[null,""],"We're here to help":[null,""],"Jetpack comes with free, basic support for all users.":[null,""],"Ask a question":[null,"Stellen Sie eine Frage"],"Search our support site":[null,""],"Get a faster resolution to your support questions.":[null,""],"Host fast, high-quality, ad-free video.":[null,""],"Generate income with high-quality ads.":[null,""],"Real-time site backups and automatic threat resolution.":[null,""],"Protect against data loss, malware, and malicious attacks.":[null,""],"Integrate easily with Google Analytics.":[null,""],"Help your content get found and shared with SEO tools.":[null,""],"Protect your site from spam.":[null,""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[null,""],"Spam filtering":[null,""],"Daily, automated malware scanning":[null,""],"13Gb of high-speed video hosting":[null,""],"Daily, automated backups (unlimited storage)":[null,""],"Daily, automated malware scanning with automated resolution":[null,""],"Unlimited high-speed video hosting":[null,""],"SEO preview tools":[null,""],"Site stats, related content, and sharing tools":[null,""],"Brute force attack protection and downtime monitoring":[null,""],"Unlimited, high-speed image hosting":[null,""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[null,""],"Read more about Jetpack benefits":[null,""],"An Automattic Airline":[null,""],"Manage site connection":[null,""],"Connect your account to WordPress.com to view more stats":[null,""],"Theme enhancements":[null,""],"Load more posts using the default theme behavior":[null,""],"Load more posts in page with a button":[null,""],"Load more posts as the reader scrolls down":[null,""],"Theme support required.":[null,""],"Learn more about adding support for Infinite Scroll to your theme.":[null,""],"Use excerpts instead of full posts on front page and archive pages":[null,""],"Show featured images":[null,""],"Enable the WordPress.com toolbar":[null,""],"The WordPress.com toolbar replaces the default admin bar and offers quick links to the Reader, all your sites, your WordPress.com profile, and notifications. Centralize your WordPress experience with a single global toolbar.":[null,""],"Writing tools available to you will be shown here when an administrator enables them.":[null,""],"Add, organize, and display {{testimonialLink}}testimonials{{/testimonialLink}}. If your theme doesn’t support testimonials yet, you can display them using the shortcode\t( [testimonials] ).":[null,""],"Portfolios":[null,""],"Add, organize, and display {{portfolioLink}}portfolios{{/portfolioLink}}. If your theme doesn’t support portfolios yet, you can display them using the shortcode ( [portfolio] ).":[null,""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[null,""],"Bing":[null,""],"Yandex":[null,""],"Generate XML sitemaps":[null,""],"Your sitemap is automatically sent to all major search engines for indexing.":[null,""],"Your site is not currently accessible to search engines. You might have \"Search Engine Visibility\" disabled in your {{a}}Reading Settings{{/a}}.":[null,""],"Collecting valuable traffic stats and insights":[null,""],"The image helps collect stats, but should work when hidden.":[null,""],"Count logged in page views from":[null,""],"Allow stats reports to be viewed by":[null,""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[null,""],"Configure your SEO settings":[null,""],"In \"Upgrade\"":[null,""],"Configure your Google Analytics settings":[null,""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[null,""],"Enable ads and display an ad below each post":[null,""],"Configure your sharing buttons":[null,""],"Connect your social media accounts":[null,""],"Connect your user account to WordPress.com to use this feature":[null,""],"Allow readers to show their appreciation of your posts by adding a like button to your content":[null,""],"Match accounts using email addresses":[null,""],"Require accounts to use WordPress.com Two-Step Authentication":[null,""],"Add to whitelist":[null,""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[null,""],"Your site is backed up and threat-free.":[null,""],"Checking your spam protection…":[null,""],"Fetching key…":[null,""],"Your site needs an Antispam key.":[null,""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[null,""],"Your site is not protected from spam.":[null,""],"Your Antispam key is valid.":[null,""],"Your site is protected from spam.":[null,""],"Checking key…":[null,""],"Your API key":[null,""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[null,""],"No search results found for %(term)s":[null,""],"Enter a search term to find settings or close search.":[null,""],"Connections":[null,""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[null,""],"Your site is connected to WordPress.com.":[null,""],"You are the Jetpack owner.":[null,""],"Connected as {{span}}%(username)s{{/span}}":[null,""],"View your Email Followers":[null,""],"Connect your user account to WordPress.com to view your email followers":[null,""],"Color scheme":[null,""],"Enable Markdown use for comments.":[null,""],"Updated settings.":[null,""],"Error updating settings. %(error)s":[null,""],"Regenerated Post by Email address.":[null,""],"Error regenerating Post by Email address. %(error)s":[null,""],"Updated settings. Refreshing page…":[null,""],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":[null,""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[null,""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[null,""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[null,""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[null,""],"Configure Google Analytics settings.":[null,""],"Image of WordPress login screen protected by Jetpack":[null,""],"Google Analytics":[null,""],"Track website statistics with Google Analytics for a deeper understanding of your website visitors and customers.":[null,""],"Configure Google Analytics":[null,""],"Activate Google Analytics":[null,""],"Download the free apps":[null,""],"Upgrade Focus: VideoPress For Weddings":[null,""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[null,""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[null,""],"Display an ad unit at the top of your site.":[null,""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[null,""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[null,""],"Ads":[null,""],"Earn income by allowing Jetpack to display high quality ads (powered by WordAds).":[null,""],"Activate Ads":[null,""],"We support all Jetpack users, regardless of plan. But customers on a paid subscription enjoy priority support so that security issues are identified and fixed for you as soon as possible.":[null,""],"In \"Mobile\"":[null,""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[null,""],"View your earnings":[null,""],"Upload Videos Now":[null,""],"Make sure your site is easily found on search engines with SEO tools for your content and social posts.":[null,""],"Activate this module to use the advanced SEO tools.":[null,""],"How much is your website worth?":[null,""],"For less than the price of a coffee a month you can rest easy knowing your hard work (or livelihood) is backed up.":[null,""],"Configure Site SEO":[null,""],"Activate SEO Tools":[null,""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[null,""],"Video Hosting":[null,""],"SEO Tools":[null,""],"Advanced SEO tools to help your site get found when people search for relevant content.":[null,""],"Configure your SEO settings.":[null,""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[null,""],"You are running Jetpack on a staging server.":[null,""],"More Info":[null,""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[null,""],"Your current IP: %(ip)s":[null,""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[null,""],"This will reset all Jetpack options, are you sure?":[null,""],"Search for a Jetpack feature.":[null,""],"Upgrade Jetpack and our state-of-the-art security scanner will hunt out malicious files and report them immediately so that you're never unaware of what is happening on your website.":[null,""],"You can see the information about security scanning in the \"At a Glance\" section.":[null,""],"Configure your Security Scans":[null,""],"This module has no configuration options":[null,""],"Let search engines and visitors know that you are serious about your websites integrity by upgrading Jetpack. Our anti-spam tools will eliminate comment spam, protect your SEO, and make it easier for visitors to stay in touch.":[null,""],"Real-time offsite backups with automated restores deliver peace-of-mind, so you can focus on writing great content and increasing traffic while we protect every aspect of your investment. Upgrade today.":[null,""],"{{link}}Configure your %(module_slug)s Settings {{/link}}":[null,""],"Subscriber":[null,""],"Big iPhone/iPad Update Now Available":[null,""],"The WordPress for Android App Gets a Big Facelift":[null,""],"WordPress.com Likes are:":[null,""],"Comments headline":[null,""],"A few catchy words to motivate your readers to comment.":[null,""],"Show a \"follow blog\" option in the comment form":[null,""],"Show a \"follow comments\" option in the comment form":[null,""],"Put a chart showing 48 hours of views in the admin bar":[null,""],"Hide the stats smiley face image":[null,""],"Whitelisted IP addresses":[null,""],"Show photo metadata (Exif) in carousel, when available":[null,""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[null,""],"Copied!":[null,""],"Highlight and copy the following text to your clipboard:":[null,""],"Regenerate address":[null,""],"Automatically proofread content when: ":[null,""],"A post or page is first published":[null,""],"A post or page is updated":[null,""],"Automatic Language Detection":[null,""],"The proofreader supports English, French, German, Portuguese and Spanish.":[null,""],"Enable proofreading for the following grammar and style rules: ":[null,""],"Add a phrase":[null,""],"Cheatin' uh?":[null,""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[null,""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[null,""],"Your Jetpack is already connected.":[null,""],"You're fueled up and ready to go, Jetpack is now active.":[null,""],"You're fueled up and ready to go.":[null,""],"You are currently running a development version of Jetpack.":[null,""],"Submit Beta feedback":[null,""],"What would you like to see on your Jetpack Dashboard?":[null,""],"Let us know!":[null,""],"Welcome to Jetpack":[null,""],"Saving…":[null,""],"Save Settings":[null,""],"Jetpack Stats Icon":[null,""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[null,""],"Activate Site Stats":[null,""],"Security Scanning":[null,""],"Upgrade":[null,""],"ACTIVE":[null,""],"Your site is on Development Mode":[null,""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[null,""],"State-of-the-art spam defense powered by Akismet.":[null,""],"View your spam stats":[null,""],"Configure Akismet":[null,""],"View your security dashboard":[null,""],"Configure VaultPress":[null,""],"Compare Plans":[null,""],"Enjoy priority support":[null,""],"The site is in Development Mode, so you can not connect to WordPress.com.":[null,""],"Link your account to WordPress.com to get the most out of Jetpack.":[null,""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[null,""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[null,""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[null,""],"Total malicious attacks blocked on your site.":[null,""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[null,""],"All plugins are up-to-date. Awesome work!":[null,""],"Jetpack is improving and optimizing your image speed.":[null,""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[null,""],"Security":[null,""],"Performance":[null,""],"Backups":[null,""],"{{a}}View backup details{{/a}}.":[null,""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[null,""],"Unavailable in Dev Mode.":[null,""],"Spam Protection":[null,""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[null,""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[null,""],"Invalid key":[null,""],"Unavailable in Dev Mode":[null,""],"Activating recommended features…":[null,""],"Recommended features active.":[null,""],"Recommended features failed to activate. %(error)s":[null,""],"Activating %(slug)s…":[null,""],"%(slug)s has been activated.":[null,""],"%(slug)s failed to activate. %(error)s":[null,""],"Deactivating %(slug)s…":[null,""],"%(slug)s has been deactivated.":[null,""],"%(slug)s failed to deactivate. %(error)s":[null,""],"Updating %(slug)s settings…":[null,""],"Updated %(slug)s settings.":[null,""],"Error updating %(slug)s settings. %(error)s":[null,""],"Updating %(slug)s address…":[null,""],"Regenerated %(slug)s address .":[null,""],"Error regenerating %(slug)s address. %(error)s":[null,""],"Resetting Jetpack options…":[null,""],"Options reset.":[null,""],"Options failed to reset.":[null,""],"There was an error disconnecting Jetpack. Error: %(error)s":[null,""],"Unlinking from WordPress.com":[null,""],"Unlinked from WordPress.com.":[null,""],"Error unlinking from WordPress.com. %(error)s":[null,""],"At A Glance":[null,""],"Clichés":[null,""],"Dashboard":[null,""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[null,""],"Automattic's Privacy Policy":[null,""],"WordPress.com Terms of Service":[null,""],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":[null,""],"{{a}}Turn on plugin autoupdates{{/a}}":[null,""],"Plugin Updates":[null,""],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":[null,""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[null,""],"No threats found, you're good to go!":[null,""],"{{a}}Contact Support{{/a}}":[null,""],"{{a}}View details at VaultPress.com{{/a}}":[null,""],"Uh oh, %(number)s threat found.":["Uh oh, %(number)s threats found.","",""],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":[null,""],"Loading…":[null,""],"Downtime monitoring":[null,""],"{{button}}View more stats on WordPress.com {{/button}}":[null,""],"{{button}}View detailed stats{{/button}}":[null,""],"All-time comments":[null,""],"All-time views":[null,""],"%(number)s View":["%(number)s Views","",""],"Best overall day":[null,""],"Views today":[null,""],"Months":[null,"Monate"],"Weeks":[null,"Wochen"],"Days":[null,"Tage"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[null,""],"Click to view detailed stats.":[null,""],"Views: %(numberOfViews)s":[null,""],"Week of %(date)s":[null,""],"Manage security on WordPress.com":[null,""],"Features can be activated or deactivated at any time.":[null,""],"Jetpack's recommended features include:":[null,""],"Activate recommended features":[null,""],"Link to WordPress.com":[null,""],"Unlink me from WordPress.com":[null,""],"Join the millions of users who rely on Jetpack to enhance and secure their sites. We're passionate about WordPress and here to make your life easier.":[null,""],"Track your growth":[null,"Ihre Entwicklung nachverfolgen"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[null,""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[null,"Bei der Verbindung von Jetpack ist ein Fehler aufgetreten. Deaktivieren Sie das Jetpack-Plugin, aktivieren Sie es erneut und stellen Sie dann wieder eine Verbindung her."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[null,"Sie müssen in Ihrem WordPress.com-Blog angemeldet bleiben, während Sie Jetpack autorisieren."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[null,""],"Disconnecting Jetpack":[null,"Jetpack wird getrennt"],"Learn more":[null,"Mehr erfahren"],"Posts":[null,"Beiträge"],"Front page":[null,"Startseite"],"Pinterest":[null,"Pinterest"],"Google":[null,"Google"],"Show related content after posts":[null,"Ähnliche Inhalte am Ende des Beitrags anzeigen"],"Show a \"Related\" header to more clearly separate the related section from posts":[null,"Eine &#8222;Ähnliche Beiträge&#8220;-Überschrift anzeigen, um den Bereich von den Beiträgen abzugrenzen"],"Related":[null,"Ähnliche Beiträge"],"Email Address":[null,"E-Mail-Adresse"],"Media":[null,"Mediathek"],"Themes":[null,"Themes"],"Site Stats":[null,"Website Statistiken"],"Sharing":[null,"Teilen"],"Testimonials":[null,"Referenzen"],"Comments":[null,"Kommentare"],"Ignored Phrases":[null,"Zu ignorierende Ausdr&uuml;cke"],"Use automatically detected language to proofread posts and pages":[null,"Automatisch erkannte Sprache zum Korrekturlesen von Beiträgen und Seiten benutzen"],"Redundant Phrases":[null,"&Uuml;berfl&uuml;ssige S&auml;tze"],"Phrases to Avoid":[null,"Zu vermeidende Formulierungen"],"Passive Voice":[null,"Passive Sprache"],"Jargon":[null,"Umgangssprache"],"Hidden Verbs":[null,"Verborgene Verben"],"Double Negatives":[null,"Doppelte Verneinung"],"Diacritical Marks":[null,"Diakritische Zeichen"],"Complex Phrases":[null,"Komplexe S&auml;tze"],"Bias Language":[null,"Wertende Sprache"],"English Options":[null,"Optionen nur für die englische Sprache"],"Proofreading":[null,"Korrekturlesen"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[null,""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[null,"WordPress.com hat gerade Probleme und kann sich nicht mit Ihrem Jetpack Plugin verbinden. Bitte versuchen Sie es später noch einmal."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[null,""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[null,""],"You have successfully disconnected Jetpack":[null,""],"Connect to WordPress.com":[null,"Mit WordPress.com verbinden"],"Connected":[null,"Verbunden"],"Activate":[null,"Aktivieren"],"Active":[null,"Aktiv"],"Search":[null,"Suchen"],"Settings":[null,"Einstellungen"],"Jetpack":[null,"Jetpack"],"Learn More":[null,"Mehr erfahren"],"Disconnect Jetpack":[null,"Jetpack trennen"],"Test your site’s compatibility with Jetpack.":[null,""],"Elasticsearch":[null,""],"Settings header\u0004Downtime monitoring":[null,""],"Settings header\u0004Privacy Settings":[null,""],"Settings header\u0004WordPress.com toolbar":[null,""],"Settings header\u0004Composing":[null,""],"Settings header\u0004Site stats":[null,""],"Settings header\u0004Search engine optimization":[null,""],"Settings header\u0004Google Analytics":[null,""],"Settings header\u0004Sharing buttons":[null,""],"Settings header\u0004Publicize connections":[null,""],"Settings header\u0004Like buttons":[null,""],"Settings header\u0004WordPress.com log in":[null,""],"Settings header\u0004Brute force attack protection":[null,""],"Settings header\u0004Backups and security scanning":[null,""],"Settings header\u0004Spam filtering":[null,""],"Search term.\u0004terms of service":[null,""],"Search term.\u0004tos":[null,""],"Search term.\u0004gdpr":[null,""],"Search term.\u0004data":[null,""],"Search term.\u0004tracks":[null,""],"Search term.\u0004privacy":[null,""],"Caption for a button to purchase a pro plan.\u0004Upgrade":[null,""],"Image alternate text.\u0004Decoration: Jetpack clouds":[null,""],"Image alternate text.\u0004Decoration: Jetpack bar graph":[null,""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[null,""],"Button caption\u0004Saving…":[null,""],"Button caption\u0004Save settings":[null,""],"A header for a block of related posts.\u0004Related":[null,""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[null,""],"A caption for a button to cancel disconnection.\u0004Stay connected":[null,""],"A caption for a button to disconnect.\u0004Disconnect":[null,""],"Navigation item.\u0004Dev Tools":[null,""],"Navigation item.\u0004Settings":[null,""],"Navigation item.\u0004Discussion":[null,""],"Navigation item.\u0004Traffic":[null,""],"Navigation item.\u0004Sharing":[null,""],"Navigation item.\u0004At A Glance":[null,""],"Navigation item.\u0004Plans":[null,""],"Navigation item.\u0004Writing":[null,""],"Navigation item.\u0004Reset Options (dev only)":[null,""],"Navigation item.\u0004Security":[null,""],"Navigation item.\u0004At a Glance":[null,""],"Short warning message\u0004Updates needed":[null,""],"Short label appearing near a paid feature configuration block.\u0004Paid":[null,""],"A header for a preview area in the configuration screen.\u0004Preview":[null,""],"Ads header\u0004Ads":[null,""],"Dashboard widget header\u0004Site connection":[null,""],"Dashboard widget header\u0004Account connection":[null,""],"A caption for a small button to fix security issues.\u0004Threats":[null,""],"A caption for a small button to fix security issues.\u0004FIX":[null,""],"Short warning message about new threats found.\u0004Threats found!":[null,""],"Short warning message about site having no security scan.\u0004No scanning":[null,""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[null,""],"Short message informing user that the site is secure.\u0004Secure":[null,""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[null,""],"Caption for a button to set up a feature.\u0004Set up":[null,""],"verb\u0004Copy":[null,""],"Shorthand for Privacy Policy.\u0004Privacy":[null,""],"Shorthand for Terms of Service.\u0004Terms":[null,""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[null,""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[null,""],"Noun. Displayed to screen readers.\u0004Settings":[null,""],"Header. Noun: Monitor is a module of Jetpack.\u0004Monitor":[null,""],"Header. Noun: Protect is a module of Jetpack.\u0004Protect":[null,""]} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-el-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-el-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 436f5115..00000000
--- a/plugins/jetpack/languages/json/jetpack-el-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"":{"po-revision-date":"2018-04-02 10:37:34+0000","mime-version":"1.0","content-type":"text/plain; charset=UTF-8","content-transfer-encoding":"8bit","plural-forms":"nplurals=2; plural=n != 1;","x-generator":"GlotPress/2.4.0-alpha","language":"el_GR","project-id-version":"Plugins - Jetpack by WordPress.com - Development (trunk)"},"Show a thumbnail image where available":[null,""],"Keep tabs on your site and receive alerts the moment downtime is detected.":[null,""],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":[null,""],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":[null,""],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":[null,""],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":[null,""],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":[null,""],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":[null,""],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":[null,""],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":[null,""],"This feature has been disabled by a site administrator.":[null,""],"%(moduleName)s has been disabled by a site administrator.":[null,""],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":[null,""],"Configure your notification settings":[null,""],"Monitor your site's downtime":[null,""],"Jetpack’s Search module is a powerful replacement for the search capability built into WordPress.":[null,""],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":[null,""],"Plugin needs updating.":["Plugins need updating.","",""],"%(number)s":["%(number)s","",""],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":[null,""],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":[null,""],"Jetpack’s downtime monitor will keep tabs on your site, and alert you the moment that downtime is detected.":[null,""],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":[null,""],"Akismet checks your comments and contact form submissions against our global database of spam.":[null,""],"Privacy Information":[null,""],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":[null,""],"Add the Search (Jetpack) widget to your sidebar":[null,""],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":[null,""],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":[null,""],"Loads the next posts automatically when the reader approaches the bottom of the page.":[null,""],"Delays the loading of images until they are visible in the visitor's browser.":[null,""],"Hosts your image files on the global WordPress.com servers.":[null,""],"Allows you to publish new posts by sending an email to a special address.":[null,""],"Hosts your video files on the global WordPress.com servers.":[null,""],"Replaces the standard WordPress galleries with a full-screen photo browsing experience, including comments and EXIF metadata.":[null,""],"Adds a toolbar with links to all your sites, notifications, your WordPress.com profile, and the Reader.":[null,""],"Adds the Portfolio custom post type, allowing you to manage and showcase projects on your site.":[null,""],"Adds the Testimonial custom post type, allowing you to collect, organize, and display testimonials on your site.":[null,""],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":[null,""],"Checks your content for correct grammar and spelling, misused words, and style while you write.":[null,""],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":[null,""],"Automatically generates the files required for search engines to index your site.":[null,""],"Displays information on your site activity, including visitors and popular posts or pages.":[null,""],"Allows you to optimize your site and its content for better results in search engines.":[null,""],"Replaces the default WordPress search with a faster, filterable search experience.":[null,""],"Automatically displays similar content at the end of each post.":[null,""],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":[null,""],"Displays high-quality ads on your site that allow you to earn income.":[null,""],"Adds sharing buttons to your content so that visitors can share it on social media sites.":[null,""],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":[null,""],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":[null,""],"Allows registered users to log in to your site with their WordPress.com accounts.":[null,""],"Protects your site from traditional and distributed brute force login attacks.":[null,""],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":[null,""],"Removes spam from comments and contact forms.":[null,""],"We are committed to your privacy and security. ":[null,""],"View all Jetpack plans":[null,""],"Manage your plan":[null,""],"Your Plan":[null,""],"You’re currently on Jetpack %(plan)s.":[null,""],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":[null,""],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":[null,""],"{{a}}Activate{{/a}} to replace the WordPress built-in search with an improved search experience.":[null,""],"Add Search (Jetpack) Widget":[null,""],"Jetpack Search is powering search on your site.":[null,""],"Give your visitors {{a}}a great search experience{{/a}}.":[null,""],"Manage your plugins":[null,""],"Moderate comments":[null,""],"Error updating privacy settings. %(error)s":[null,""],"Updated privacy settings.":[null,""],"Updating privacy settings…":[null,""],"Add Jetpack Search Widget":[null,""],"Add the Jetpack search widget to your sidebar to configure advanced search filters.":[null,""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":[null,""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":[null,""],"Daily backups, spam filtering, and priority support.":[null,""],"Always-on security, a better search experience, unlimited CDN use, advanced marketing tools, and monetization services.":[null,""],"Powerful services for your site":[null,""],"Upgrade to a weekly coffee and fully protect your site from malware, infiltrations, and security loopholes with automated malware scanning.":[null,""],"Automated backups, one-click restores, spam filtering, and malware scanning.":[null,""],"Jetpack Premium now includes our full security suite":[null,""],"Automatic defense against hacks, malware, spam, data loss, and downtime with automated backups, unlimited storage, and malware scanning.":[null,""],"Always-on Security":[null,""],"Reach more people and earn money with automated social media scheduling, better search results, SEO preview tools, PayPal payments, and an ad program.":[null,""],"Get unlimited access to hundreds of professional themes, a superior search experience for your users, and unlimited high-speed, and ad-free video hosting.":[null,""],"A superior search experience powered by Elasticsearch providing your users with faster and more relevant search results. Previously only available to WordPress.com VIP customers and trusted by industry-leading brands.":[null,""],"Unlimited access to hundreds of premium WordPress themes with dedicated support directly from the theme authors.":[null,""],"Two great reasons to go Pro":[null,""],"Grow your traffic and revenue with social media scheduling, enhanced site search, SEO tools, PayPal payments, and an ad program.":[null,""],"Always-on security including real-time backups, malware scanning, and automatic threat resolution.":[null,""],"Design the perfect site with unlimited access to hundreds of themes and unlimited, high-speed, and ad-free video hosting.":[null,""],"Three great reasons to go Pro":[null,""],"Activate Video Hosting":[null,""],"Fast, optimized, ad-free, and unlimited video hosting for your site.":[null,""],"Browse Themes":[null,""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":[null,""],"Sites with large numbers of images can now activate the Lazy Loading Images feature, which significantly speeds up loading times for visitors. Instead of waiting for the entire page to load, Jetpack will instead show pages instantly, and only download additional images when they are about to come into view.":[null,""],"If this sounds like a great improvement (and it is) you can enable it now by clicking the toggle below.":[null,""],"Our faster site search is now available to all Professional plan customers. This replaces the default WordPress search with an Elasticsearch-powered infrastructure that returns faster, more relevant results to users.":[null,""],"This release of Jetpack brings major new features and big improvements to your WordPress site.":[null,""],"Speed up your site and its content":[null,""],"We have also upgraded all our Premium plan customers to unlimited high-speed video storage (up from 13GB), and significantly reduced the CSS and JavaScript assets that Jetpack downloads when using features like infinite scroll and embedding rich content.":[null,""],"Faster, more relevant search results":[null,""],"Read the full announcement!":[null,""],"Compare paid plans":[null,""],"Major new features from Jetpack":[null,""],"Faster, more relevant and more powerful sitewide search.":[null,""],"Hassle-free design, marketing, and security for your WordPress site. Connect Jetpack to a WordPress.com account to start building your own success story.":[null,""],"WordPress themes and customization tools for designing your site.":[null,""],"Design the perfect website":[null,""],"Bring your ideas to life with elegant and professional designs and code-free customization tools.":[null,""],"Jetpack's photon serves up lightning fast, optimized images":[null,""],"Jetpack's WordPress themes":[null,""],"Professional themes":[null,""],"Find the perfect design for your site from hundreds of available themes.":[null,""],"Jetpack's customization tools":[null,""],"Code-free customization":[null,""],"Customize your site with endless widget options, image galleries, and embedded media.":[null,""],"Jetpack's performance features":[null,""],"Deliver blazing fast images and video and improve site load times.":[null,""],"Drive more traffic to your site with Jetpack":[null,""],"Increase traffic and revenue":[null,""],"Reach more people and earn money with automated marketing tools.":[null,""],"Jetpack's site stats feature":[null,""],"Keep an eye on your success with simple, concise, and mobile-friendly stats.":[null,""],"Jetpack's publicize features":[null,""],"Automated marketing":[null,""],"Schedule social media posts in advance, show related content, and give better search results.":[null,""],"Jetpack's ads and PayPal features":[null,""],"Generate revenue":[null,""],"Monetize your site with high-quality ads and take PayPal payments.":[null,""],"Keep your site safe, 24/7":[null,""],"Automatic defense against hacks, malware, spam, data loss, and downtime.":[null,""],"Jetpack's monitor feature":[null,""],"Be alerted about any unexpected downtime the moment it happens.":[null,""],"Jetpack's Protect features":[null,""],"Guard your site against brute force login attacks, spam, and harmfulmalware injections.":[null,""],"Backup and restore":[null,""],"Automatic, real-time backups mean your entire site is always ready to be restored.":[null,""],"Set up Jetpack":[null,""],"Speed up your site":[null,""],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":[null,""],"Jetpack Search":[null,""],"Jetpack version %(version)s":[null,""],"Replace WordPress built-in search with an improved search experience":[null,""],"Your site is being backed up in real time and regularly scanned for security threats.":[null,""],"Daily backup of all your site data with unlimited space and one-click restores":[null,""],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":[null,""],"View your security activity":[null,""]," (powered by VaultPress).":[null,""],"Replace the default WordPress search with better results that will help your users find what they are looking for.":[null,""],"Customize Search Widget":[null,""],"Activate Search":[null,""],"Please correct the issue below and try again.":["Please correct the issues listed below and try again.","",""],"We are making sure your site stays free of security threats. You will be notified if we find one.":[null,""],"Your site is being backed up in real-time.":[null,""],"Jetpack version":[null,""],"{{a}}View your site's activity{{/a}} in a single feed.":[null,""],"Your Jetpack Professional plan is taking care of business!":[null,""],"Your Jetpack Premium plan is powering up!":[null,""],"Your Jetpack Personal plan is powering up!":[null,""],"Activity":[null,""],"Confirm each new phrase you add by pressing enter.":[null,""],"{{a}}View details{{/a}}":[null,""],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":[null,""],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":[null,""],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a simple payment button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":[null,""],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":[null,""],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":[null,""],"Install premium themes":[null,""],"Review SEO features":[null,""],"Welcome Professional":[null,""],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":[null,""],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":[null,""],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":[null,""],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":[null,""],"Monetize your site with ads":[null,""],"Welcome Premium":[null,""],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":[null,""],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":[null,""],"Got it!":[null,""],"Welcome personal":[null,""],"Connect your account to get the most out of Jetpack":[null,""],"By clicking the button below, you agree to our fascinating {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com":[null,""],"Jetpack Stats People":[null,""],"Hello there! Your stats have been activated.":[null,""],"Just give us a little time to collect data so we can display it for you here.":[null,""],"Okay, got it!":[null,""],"Display ads below posts on":[null,""],"Additional ad placements":[null,""],"Top of each page":[null,""],"Second ad below post":[null,""],"Archives":[null,""],"{{subhead}}Only with Jetpack Professional{{/subhead}}{{p}}Protect your site and work with Jetpack Personal: daily automated backups, unlimited storage, and expert priority support. Security essentials for every WordPress site starting from $3.50.{{/p}}{{p}}Or go Pro with more than 200 Premium Themes, business class security, unlimited video hosting, monetization, marketing automation, and SEO tools.{{/p}}":[null,""],"Explore Professional":[null,""],"Compare All Plans":[null,""],"Person with laptop":[null,""],"Your Jetpack site is ready to go!":[null,""],"We're now collecting stats, securing your site, and speeding up your images. Pretty soon you'll be able to see everything going on with your site right through Jetpack! Welcome aboard.":[null,""],"Stars":[null,""],"Jupiter":[null,""],"Welcome to Jetpack Personal":[null,""],"Welcome to Jetpack Premium":[null,""],"Welcome to Jetpack Professional":[null,""],"Social Media Scheduling":[null,""],"Schedule multiple Facebook, Twitter, and other social media postings in advance and view share history stats.":[null,""],"Schedule Posts":[null,""],"Activate Publicize":[null,""],"Explore Jetpack Professional":[null,""],"Introducing Unlimited Themes":[null,""],"Unlimited Premium Themes":[null,""],"Exclusive hand-crafted designs you will love with dedicated support directly from the theme authors.":[null,""],"Your site is backed up.":[null,""],"Image Performance":[null,""],"Get WordPress Apps for every device":[null,""],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":[null,""],"I already use this app.":[null,""],"Create address":[null,""],"Priority support":[null,""],"Add sharing buttons to your posts":[null,""],"Automatically share your posts to social networks":[null,""],"Updating settings…":[null,""],"Updating Post by Email address…":[null,""],"Your paid plan gives you access to prioritized Jetpack support.":[null,""],"You have paid for backups but they're not yet active.":[null,""],"You have paid for backups and security scanning but they’re not yet active.":[null,""],"Click \"Set Up\" to finish installation.":[null,""],"Checking site status…":[null,""],"Pages":[null,""],"We're here to help":[null,""],"Jetpack comes with free, basic support for all users.":[null,""],"Ask a question":[null,""],"Search our support site":[null,""],"Get a faster resolution to your support questions.":[null,""],"Host fast, high-quality, ad-free video.":[null,""],"Generate income with high-quality ads.":[null,""],"Real-time site backups and automatic threat resolution.":[null,""],"Protect against data loss, malware, and malicious attacks.":[null,""],"Integrate easily with Google Analytics.":[null,""],"Help your content get found and shared with SEO tools.":[null,""],"Protect your site from spam.":[null,""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[null,""],"Spam filtering":[null,""],"Daily, automated malware scanning":[null,""],"13Gb of high-speed video hosting":[null,""],"Daily, automated backups (unlimited storage)":[null,""],"Daily, automated malware scanning with automated resolution":[null,""],"Unlimited high-speed video hosting":[null,""],"SEO preview tools":[null,""],"Site stats, related content, and sharing tools":[null,""],"Brute force attack protection and downtime monitoring":[null,""],"Unlimited, high-speed image hosting":[null,""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[null,""],"Read more about Jetpack benefits":[null,""],"An Automattic Airline":[null,""],"Manage site connection":[null,""],"Connect your account to WordPress.com to view more stats":[null,""],"Theme enhancements":[null,""],"Load more posts using the default theme behavior":[null,""],"Load more posts in page with a button":[null,""],"Load more posts as the reader scrolls down":[null,""],"Theme support required.":[null,""],"Learn more about adding support for Infinite Scroll to your theme.":[null,""],"Use excerpts instead of full posts on front page and archive pages":[null,""],"Show featured images":[null,""],"Enable the WordPress.com toolbar":[null,""],"The WordPress.com toolbar replaces the default admin bar and offers quick links to the Reader, all your sites, your WordPress.com profile, and notifications. Centralize your WordPress experience with a single global toolbar.":[null,""],"Writing tools available to you will be shown here when an administrator enables them.":[null,""],"Add, organize, and display {{testimonialLink}}testimonials{{/testimonialLink}}. If your theme doesn’t support testimonials yet, you can display them using the shortcode\t( [testimonials] ).":[null,""],"Portfolios":[null,""],"Add, organize, and display {{portfolioLink}}portfolios{{/portfolioLink}}. If your theme doesn’t support portfolios yet, you can display them using the shortcode ( [portfolio] ).":[null,""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[null,""],"Bing":[null,""],"Yandex":[null,""],"Generate XML sitemaps":[null,""],"Your sitemap is automatically sent to all major search engines for indexing.":[null,""],"Your site is not currently accessible to search engines. You might have \"Search Engine Visibility\" disabled in your {{a}}Reading Settings{{/a}}.":[null,""],"Collecting valuable traffic stats and insights":[null,""],"The image helps collect stats, but should work when hidden.":[null,""],"Count logged in page views from":[null,""],"Allow stats reports to be viewed by":[null,""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[null,""],"Configure your SEO settings":[null,""],"In \"Upgrade\"":[null,""],"Configure your Google Analytics settings":[null,""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[null,""],"Enable ads and display an ad below each post":[null,""],"Configure your sharing buttons":[null,""],"Connect your social media accounts":[null,""],"Connect your user account to WordPress.com to use this feature":[null,""],"Allow readers to show their appreciation of your posts by adding a like button to your content":[null,""],"Match accounts using email addresses":[null,""],"Require accounts to use WordPress.com Two-Step Authentication":[null,""],"Add to whitelist":[null,""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[null,""],"Your site is backed up and threat-free.":[null,""],"Checking your spam protection…":[null,""],"Fetching key…":[null,""],"Your site needs an Antispam key.":[null,""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[null,""],"Your site is not protected from spam.":[null,""],"Your Antispam key is valid.":[null,""],"Your site is protected from spam.":[null,""],"Checking key…":[null,""],"Your API key":[null,""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[null,""],"No search results found for %(term)s":[null,""],"Enter a search term to find settings or close search.":[null,""],"Connections":[null,""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[null,""],"Your site is connected to WordPress.com.":[null,""],"You are the Jetpack owner.":[null,""],"Connected as {{span}}%(username)s{{/span}}":[null,""],"View your Email Followers":[null,""],"Connect your user account to WordPress.com to view your email followers":[null,""],"Color scheme":[null,""],"Enable Markdown use for comments.":[null,""],"Updated settings.":[null,""],"Error updating settings. %(error)s":[null,""],"Regenerated Post by Email address.":[null,""],"Error regenerating Post by Email address. %(error)s":[null,""],"Updated settings. Refreshing page…":[null,""],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":[null,""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[null,""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[null,""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[null,""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[null,""],"Configure Google Analytics settings.":[null,""],"Image of WordPress login screen protected by Jetpack":[null,""],"Google Analytics":[null,""],"Track website statistics with Google Analytics for a deeper understanding of your website visitors and customers.":[null,""],"Configure Google Analytics":[null,""],"Activate Google Analytics":[null,""],"Download the free apps":[null,""],"Upgrade Focus: VideoPress For Weddings":[null,""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[null,""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[null,""],"Display an ad unit at the top of your site.":[null,""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[null,""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[null,""],"Ads":[null,""],"Earn income by allowing Jetpack to display high quality ads (powered by WordAds).":[null,""],"Activate Ads":[null,""],"We support all Jetpack users, regardless of plan. But customers on a paid subscription enjoy priority support so that security issues are identified and fixed for you as soon as possible.":[null,""],"In \"Mobile\"":[null,""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[null,""],"View your earnings":[null,""],"Upload Videos Now":[null,""],"Make sure your site is easily found on search engines with SEO tools for your content and social posts.":[null,""],"Activate this module to use the advanced SEO tools.":[null,""],"How much is your website worth?":[null,""],"For less than the price of a coffee a month you can rest easy knowing your hard work (or livelihood) is backed up.":[null,""],"Configure Site SEO":[null,""],"Activate SEO Tools":[null,"Ενεργοποίηση Εργαλείων SEO"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[null,""],"Video Hosting":[null,""],"SEO Tools":[null,"Εργαλεία SEO"],"Advanced SEO tools to help your site get found when people search for relevant content.":[null,""],"Configure your SEO settings.":[null,""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[null,""],"You are running Jetpack on a staging server.":[null,""],"More Info":[null,"Περισσότερες Πληροφορίες"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[null,""],"Your current IP: %(ip)s":[null,""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[null,""],"This will reset all Jetpack options, are you sure?":[null,""],"Search for a Jetpack feature.":[null,""],"Upgrade Jetpack and our state-of-the-art security scanner will hunt out malicious files and report them immediately so that you're never unaware of what is happening on your website.":[null,""],"You can see the information about security scanning in the \"At a Glance\" section.":[null,""],"Configure your Security Scans":[null,""],"This module has no configuration options":[null,""],"Let search engines and visitors know that you are serious about your websites integrity by upgrading Jetpack. Our anti-spam tools will eliminate comment spam, protect your SEO, and make it easier for visitors to stay in touch.":[null,""],"Real-time offsite backups with automated restores deliver peace-of-mind, so you can focus on writing great content and increasing traffic while we protect every aspect of your investment. Upgrade today.":[null,""],"{{link}}Configure your %(module_slug)s Settings {{/link}}":[null,""],"Subscriber":[null,"Συνδρομητής"],"Big iPhone/iPad Update Now Available":[null,""],"The WordPress for Android App Gets a Big Facelift":[null,""],"WordPress.com Likes are:":[null,""],"Comments headline":[null,""],"A few catchy words to motivate your readers to comment.":[null,""],"Show a \"follow blog\" option in the comment form":[null,""],"Show a \"follow comments\" option in the comment form":[null,""],"Put a chart showing 48 hours of views in the admin bar":[null,""],"Hide the stats smiley face image":[null,""],"Whitelisted IP addresses":[null,""],"Show photo metadata (Exif) in carousel, when available":[null,""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[null,""],"Copied!":[null,""],"Highlight and copy the following text to your clipboard:":[null,""],"Regenerate address":[null,""],"Automatically proofread content when: ":[null,""],"A post or page is first published":[null,""],"A post or page is updated":[null,""],"Automatic Language Detection":[null,""],"The proofreader supports English, French, German, Portuguese and Spanish.":[null,""],"Enable proofreading for the following grammar and style rules: ":[null,""],"Add a phrase":[null,""],"Cheatin' uh?":[null,""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[null,""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[null,""],"Your Jetpack is already connected.":[null,""],"You're fueled up and ready to go, Jetpack is now active.":[null,""],"You're fueled up and ready to go.":[null,""],"You are currently running a development version of Jetpack.":[null,""],"Submit Beta feedback":[null,""],"What would you like to see on your Jetpack Dashboard?":[null,""],"Let us know!":[null,""],"Welcome to Jetpack":[null,"Καλώς ήρθατε στο Jetpack"],"Saving…":[null,"Αποθήκευση..."],"Save Settings":[null,"Αποθήκευση Ρυθμίσεων"],"Jetpack Stats Icon":[null,""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[null,""],"Activate Site Stats":[null,""],"Security Scanning":[null,""],"Upgrade":[null,"Αναβάθμιση"],"ACTIVE":[null,"ΕΝΕΡΓΌ"],"Your site is on Development Mode":[null,""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[null,""],"State-of-the-art spam defense powered by Akismet.":[null,""],"View your spam stats":[null,""],"Configure Akismet":[null,""],"View your security dashboard":[null,""],"Configure VaultPress":[null,""],"Compare Plans":[null,"Σύγκριση Σχεδίων"],"Enjoy priority support":[null,""],"The site is in Development Mode, so you can not connect to WordPress.com.":[null,""],"Link your account to WordPress.com to get the most out of Jetpack.":[null,""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[null,""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[null,""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[null,""],"Total malicious attacks blocked on your site.":[null,""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[null,""],"All plugins are up-to-date. Awesome work!":[null,""],"Jetpack is improving and optimizing your image speed.":[null,""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[null,""],"Security":[null,"Ασφάλεια"],"Performance":[null,""],"Backups":[null,"Αντίγραφα ασφαλείας"],"{{a}}View backup details{{/a}}.":[null,""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[null,""],"Unavailable in Dev Mode.":[null,""],"Spam Protection":[null,"Προστασία από Spam"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[null,""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[null,""],"Invalid key":[null,""],"Unavailable in Dev Mode":[null,""],"Activating recommended features…":[null,""],"Recommended features active.":[null,""],"Recommended features failed to activate. %(error)s":[null,""],"Activating %(slug)s…":[null,""],"%(slug)s has been activated.":[null,""],"%(slug)s failed to activate. %(error)s":[null,""],"Deactivating %(slug)s…":[null,""],"%(slug)s has been deactivated.":[null,""],"%(slug)s failed to deactivate. %(error)s":[null,""],"Updating %(slug)s settings…":[null,""],"Updated %(slug)s settings.":[null,""],"Error updating %(slug)s settings. %(error)s":[null,""],"Updating %(slug)s address…":[null,""],"Regenerated %(slug)s address .":[null,""],"Error regenerating %(slug)s address. %(error)s":[null,""],"Resetting Jetpack options…":[null,""],"Options reset.":[null,""],"Options failed to reset.":[null,""],"There was an error disconnecting Jetpack. Error: %(error)s":[null,""],"Unlinking from WordPress.com":[null,""],"Unlinked from WordPress.com.":[null,""],"Error unlinking from WordPress.com. %(error)s":[null,""],"At A Glance":[null,"Με Μια Ματιά"],"Clichés":[null,""],"Dashboard":[null,"Πίνακας ελέγχου"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[null,""],"Automattic's Privacy Policy":[null,""],"WordPress.com Terms of Service":[null,"WordPress.com Όροι Χρήσης"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":[null,""],"{{a}}Turn on plugin autoupdates{{/a}}":[null,""],"Plugin Updates":[null,"Αναβαθμίσεις Πρόσθετων"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":[null,""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[null,""],"No threats found, you're good to go!":[null,""],"{{a}}Contact Support{{/a}}":[null,""],"{{a}}View details at VaultPress.com{{/a}}":[null,""],"Uh oh, %(number)s threat found.":["Uh oh, %(number)s threats found.","",""],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":[null,""],"Loading…":[null,"Φόρτωση..."],"Downtime monitoring":[null,""],"{{button}}View more stats on WordPress.com {{/button}}":[null,""],"{{button}}View detailed stats{{/button}}":[null,""],"All-time comments":[null,""],"All-time views":[null,""],"%(number)s View":["%(number)s Views","",""],"Best overall day":[null,""],"Views today":[null,"Προβολές σήμερα"],"Months":[null,"Μήνες"],"Weeks":[null,"Εβδομάδες"],"Days":[null,"Ημέρες"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[null,""],"Click to view detailed stats.":[null,""],"Views: %(numberOfViews)s":[null,""],"Week of %(date)s":[null,""],"Manage security on WordPress.com":[null,"Διαχειριστείτε την ασφάλεια στο WordPress.com"],"Features can be activated or deactivated at any time.":[null,""],"Jetpack's recommended features include:":[null,""],"Activate recommended features":[null,""],"Link to WordPress.com":[null,"Σύνδεση στο WordPress.com"],"Unlink me from WordPress.com":[null,"Αποσύνδεσέ με από το WordPress.com"],"Join the millions of users who rely on Jetpack to enhance and secure their sites. We're passionate about WordPress and here to make your life easier.":[null,""],"Track your growth":[null,""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[null,""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[null,""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[null,""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[null,""],"Disconnecting Jetpack":[null,"Γίνεται αποσύνδεση Jetpack"],"Learn more":[null,"Μάθετε περισσότερα"],"Posts":[null,"Άρθρα"],"Front page":[null,"Πρώτη σελίδα"],"Pinterest":[null,"Pinterest"],"Google":[null,"Google"],"Show related content after posts":[null,"Προβολή σχετικών θεμάτων στις δημοσιεύσεις"],"Show a \"Related\" header to more clearly separate the related section from posts":[null,"Χρησιμοποιήστε την κεφαλίδα \"Σχετικά θέματα\" για να διαχωρίσετε τα σχετικά θέματα από τις δημοσιεύσεις σας"],"Related":[null,"Σχετικά"],"Email Address":[null,"Διεύθυνση email"],"Media":[null,"Εικόνες και Βίντεο"],"Themes":[null,"Θέματα"],"Site Stats":[null,"Στατιστικά"],"Sharing":[null,"Κοινοποίηση"],"Testimonials":[null,"Σχόλια"],"Comments":[null,"Σχόλια"],"Ignored Phrases":[null,"Φράσεις που παραλείφθηκαν"],"Use automatically detected language to proofread posts and pages":[null,"Αυτόματη επιλογή γλώσσας για ορθογραφικό έλεγχο και διόρθωση."],"Redundant Phrases":[null,"Περιττές φράσεις"],"Phrases to Avoid":[null,"Εκφράσεις προς αποφυγή"],"Passive Voice":[null,"Παθητική φωνή"],"Jargon":[null,"Αργκό"],"Hidden Verbs":[null,"Κρυφά ρήματα"],"Double Negatives":[null,"Διπλή άρνηση"],"Diacritical Marks":[null,"Τόνοι και πνεύματα"],"Complex Phrases":[null,"Πολύπλοκες εκφράσεις"],"Bias Language":[null,"Λέξεις με προκατάληψη"],"English Options":[null,"Επιλογές Αγγλικών"],"Proofreading":[null,"Έλεγχος ορθρογραφίας και διόρθωση"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[null,"Το Jetpack δεν μπόρεσει να συνδεθεί στο WordPress.com: %s. Αυτό συνήθως σημαίνει λάθος ρυθμίσεις στο πακέτο φιλοξενίας του ιστότοπου σας. "],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[null,"Αυτή την στιγμή το WordPress.com αντιμετωπίζει προβλήματα και δεν μπορεί να επικοινωνήσει με το Jetpack. Παρακαλώ προσπαθείστε ξανά."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[null,"<strong>Σφάλμα στην λειτουργία του Jetpack.</strong> Η σύνδεση αυτού του ιστότοπου με το WordPress.com δεν είναι εφικτή. Αυτό συνήθως σημαίνει ότι ο ιστότοπος δεν είναι δημόσια προσβάσιμος. "],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[null,""],"You have successfully disconnected Jetpack":[null,"Έχετε αποσυνδεθεί επιτυχώς από το Jetpack."],"Connect to WordPress.com":[null,"Σύνδεση με WordPress.com "],"Connected":[null,"Συνδεδεμένο"],"Activate":[null,"Ενεργοποίηση"],"Active":[null,"Ενεργό"],"Search":[null,"Αναζήτηση"],"Settings":[null,"Ρυθμίσεις"],"Jetpack":[null,"Jetpack"],"Learn More":[null,"Μάθετε περισσότερα"],"Disconnect Jetpack":[null,"Αποσύνδεση Jetpack"],"Test your site’s compatibility with Jetpack.":[null,"Δοκιμάστε τη συμβατότητα του ιστοτόπου σας με το Jetpack."],"Elasticsearch":[null,""],"Settings header\u0004Downtime monitoring":[null,""],"Settings header\u0004Privacy Settings":[null,""],"Settings header\u0004WordPress.com toolbar":[null,""],"Settings header\u0004Composing":[null,""],"Settings header\u0004Site stats":[null,""],"Settings header\u0004Search engine optimization":[null,""],"Settings header\u0004Google Analytics":[null,""],"Settings header\u0004Sharing buttons":[null,""],"Settings header\u0004Publicize connections":[null,""],"Settings header\u0004Like buttons":[null,""],"Settings header\u0004WordPress.com log in":[null,""],"Settings header\u0004Brute force attack protection":[null,""],"Settings header\u0004Backups and security scanning":[null,""],"Settings header\u0004Spam filtering":[null,""],"Search term.\u0004terms of service":[null,""],"Search term.\u0004tos":[null,""],"Search term.\u0004gdpr":[null,""],"Search term.\u0004data":[null,""],"Search term.\u0004tracks":[null,""],"Search term.\u0004privacy":[null,""],"Caption for a button to purchase a pro plan.\u0004Upgrade":[null,""],"Image alternate text.\u0004Decoration: Jetpack clouds":[null,""],"Image alternate text.\u0004Decoration: Jetpack bar graph":[null,""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[null,""],"Button caption\u0004Saving…":[null,""],"Button caption\u0004Save settings":[null,""],"A header for a block of related posts.\u0004Related":[null,""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[null,""],"A caption for a button to cancel disconnection.\u0004Stay connected":[null,""],"A caption for a button to disconnect.\u0004Disconnect":[null,""],"Navigation item.\u0004Dev Tools":[null,""],"Navigation item.\u0004Settings":[null,""],"Navigation item.\u0004Discussion":[null,""],"Navigation item.\u0004Traffic":[null,""],"Navigation item.\u0004Sharing":[null,""],"Navigation item.\u0004At A Glance":[null,"Με Μια Ματιά"],"Navigation item.\u0004Plans":[null,"Σχέδια"],"Navigation item.\u0004Writing":[null,""],"Navigation item.\u0004Reset Options (dev only)":[null,""],"Navigation item.\u0004Security":[null,""],"Navigation item.\u0004At a Glance":[null,"Με Μια Ματιά"],"Short warning message\u0004Updates needed":[null,""],"Short label appearing near a paid feature configuration block.\u0004Paid":[null,""],"A header for a preview area in the configuration screen.\u0004Preview":[null,""],"Ads header\u0004Ads":[null,""],"Dashboard widget header\u0004Site connection":[null,""],"Dashboard widget header\u0004Account connection":[null,""],"A caption for a small button to fix security issues.\u0004Threats":[null,""],"A caption for a small button to fix security issues.\u0004FIX":[null,""],"Short warning message about new threats found.\u0004Threats found!":[null,""],"Short warning message about site having no security scan.\u0004No scanning":[null,""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[null,""],"Short message informing user that the site is secure.\u0004Secure":[null,""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[null,""],"Caption for a button to set up a feature.\u0004Set up":[null,""],"verb\u0004Copy":[null,"Αντιγραφή"],"Shorthand for Privacy Policy.\u0004Privacy":[null,"Ιδιωτικότητα"],"Shorthand for Terms of Service.\u0004Terms":[null,"Όροι"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[null,""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[null,""],"Noun. Displayed to screen readers.\u0004Settings":[null,"Ρυθμίσεις"],"Header. Noun: Monitor is a module of Jetpack.\u0004Monitor":[null,""],"Header. Noun: Protect is a module of Jetpack.\u0004Protect":[null,""]} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-en_AU-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-en_AU-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index ecb124de..00000000
--- a/plugins/jetpack/languages/json/jetpack-en_AU-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"en_AU"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":[""],"We’re now collecting stats and securing your site. Welcome aboard.":[""],"{{a}}Skip, and explore features individually{{/a}}.":[""],"Jetpack Business Plan":[""],"Jetpack Premium Plan":[""],"Jetpack Personal Plan":[""],"Get started with hassle-free design, stats, and performance tools.":[""],"Welcome to Jetpack Free":[""],"Jetpack Free Plan":[""],"Explore Jetpack plans":[""],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":[""],"Jetpack offers so much more":[""],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":[""],"Support documentation":[""],"Chat bubbles representing getting in touch with support":[""],"Site Activity":[""],"Start publicizing now":[""],"Reach a wider audience by automatically sharing your posts on social media.":[""],"Increase traffic to your site":[""],"Explore free themes":[""],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":[""],"A wide variety of themes and tools to customize a site":[""],"Set up your site security":[""],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":[""],"Site stats showing an evolution in traffic and engagement":[""],"A hand holding a loupe":[""],"A chart showing an healthy increase in earnings":[""],"Interface showing a chronological list of changes and updates in a site":[""],"A cloud with multiple types of content floating around it":[""],"A folder holding real comments":[""],"Make your site faster":[""],"Load pages faster by serving your images from our global network of servers.":[""],"A fast and performant website":[""],"A secure site, locked and protected by Jetpack":[""],"These settings won't apply to related posts added using the block editor.":["These settings won't apply to related posts added using the block editor."],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more."],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":["This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}."],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":["Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts."],"Add Like buttons to your posts and pages":["Add Like buttons to your posts and pages"],"When visitors enjoy your content, let them show it with a Like.":["When visitors enjoy your content, let them show it with a Like."],"Explore your Jetpack Professional plan!":["Explore your Jetpack Professional plan!"],"Explore your Jetpack Premium plan!":["Explore your Jetpack Premium plan!"],"Explore your Jetpack Personal plan!":["Explore your Jetpack Personal plan!"],"Create account":["Create account"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["Jetpack is powering your site, but to access all of its features you’ll need to create an account."],"Real-time, automated backups (unlimited storage)":["Real-time, automated backups (unlimited storage)"],"Compose content the way you want to and streamline your publishing experience.":["Compose content the way you want to and streamline your publishing experience."],"Add a portfolio item":["Add a portfolio item"],"Add a testimonial":["Add a testimonial"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["Maximise your site’s visibility in search engines and view traffic stats in real time."],"Create a Jetpack account to use this feature":["Create a Jetpack account to use this feature"],"Share your content on social media and increase audience engagement.":["Share your content on social media and increase audience engagement."],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["Jetpack will continuously monitor your site, and alert you the moment downtime is detected."],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure."],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["Keep your site safe with state-of-the-art security and receive notifications of technical problems."],"Error enabling Site accelerator. %(error)s":["Error enabling Site accelerator. %(error)s"],"Site accelerator is now speeding up your site!":["Site accelerator is now speeding up your site!"],"Enabling Site accelerator…":["Enabling Site accelerator…"],"Error disabling site accelerator. %(error)s":["Error disabling site accelerator. %(error)s"],"Site accelerator is no longer speeding up your site!":["Site accelerator is no longer speeding up your site!"],"Disabling site accelerator…":["Disabling site accelerator…"],"Load pages faster, optimize images, and speed up your visitors’ experience.":["Load pages faster, optimise images, and speed up your visitors’ experience."],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns."],"High-speed, high-definition video hosting with no third-party ads.":["High-speed, high-definition video hosting with no third-party ads."],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["Schedule unlimited tweets, Facebook posts, and other social posts in advance."],"Marketing Automation":["Marketing Automation"],"Activate Jetpack Search":["Activate Jetpack Search"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["Replace the default WordPress search with better results and filtering powered by Elasticsearch."],"Start earning":["Start earning"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["WordAds lets you earn money by displaying promotional content. Start earning today."],"Spam is automatically blocked from your comments.":["Spam is automatically blocked from your comments."],"Spam Filtering":["Spam Filtering"],"Browse premium themes":["Browse premium themes"],"Access hundreds of beautifully designed premium themes at no extra cost.":["Access hundreds of beautifully designed premium themes at no extra cost."],"Try a premium theme":["Try a premium theme"],"View settings":["View settings"],"Create a Jetpack account to view your email followers":["Create a Jetpack account to view your email followers"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["Open your site to comments and invite subscribers to get alerts about your latest work."],"Manage security settings":["Manage security settings"],"Built-in Performance":["Built-in Performance"],"Jetpack is ready for the new WordPress editor":["Jetpack is ready for the new WordPress editor"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown."],"Build your Jetpack site with blocks":["Build your Jetpack site with blocks"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["A new editor? Yes! {{a}}Learn more{{/a}}."],"The features you rely on, adapted for the new WordPress editor.":["The features you rely on, adapted for the new WordPress editor."],"Take me to the new editor":["Take me to the new editor"],"Testing Jetpack Connection":["Testing Jetpack Connection"],"There was an error testing Jetpack. Error: %(error)s":["There was an error testing Jetpack. Error: %(error)s"],"New in Jetpack!":["New in Jetpack!"],"Speed up static file load times":["Speed up static file load times"],"Speed up image load times":["Speed up image load times"],"Enable site accelerator":["Enable site accelerator"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["Load pages faster by allowing Jetpack to optimise your images and serve your images and static files (like CSS and JavaScript) from our global network of servers."],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials."],"View your site activity":["View your site activity"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["View a chronological list of all the changes and updates to your site in an organised, readable way."],"Manually Verify ":["Manually Verify "],"Verify with Google":["Verify with Google"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site."],"or":["or"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}."],"Your site is verified with Google":["Your site is verified with Google"],"Site failed to verify: %(error)s":["Site failed to verify: %(error)s"],"Verifying...":["Verifying..."],"Add faster, more advanced searching to your site with Jetpack Professional.":["Add faster, more advanced searching to your site with Jetpack Professional."],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["Replace WordPress built-in search with Jetpack Search, an advanced search experience"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["Jetpack Search replaces the built-in search with a fast, scalable, customisable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster."],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results."],"Jetpack Search supports many customizations.":["Jetpack Search supports many customisations."],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["Replace the built-in search with a fast, scalable, customisable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}."],"Site is verified":["Site is verified"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}"],"Spam filtering and priority support.":["Spam filtering and priority support."],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site."],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line."],"Custom ads.txt entries":["Custom ads.txt entries"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}"],"Introducing Premium Themes":["Introducing Premium Themes"]," Premium Themes":[" Premium Themes"],"Privacy information":["Privacy information"],"Enable Lazy Loading for images":["Enable Lazy Loading for images"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once."],"Performance & speed":["Performance & speed"],"Enable high-speed, ad-free video player":["Enable high-speed, ad-free video player"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customise your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!"],"Video":["Video"],"Carousel color scheme":["Carousel colour scheme"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO."],"Show photo Exif metadata in carousel (when available)":["Show photo Exif metadata in carousel (when available)"],"Display images in a full-screen carousel gallery":["Display images in a full-screen carousel gallery"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader."],"Portfolios shortcode: [portfolio]":["Portfolios shortcode: [portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site."],"Testimonials shortcode: [testimonials]":["Testimonials shortcode: [testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site."],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes."],"Configure related posts in the Customizer":["Configure related posts in the Customiser"],"Highlight related content with a heading":["Highlight related content with a heading"],"View security scan details":["View security scan details"],"View backup history":["View backup history"],"Show a thumbnail image where available":["Show a thumbnail image where available"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Centre{{/privacyCenterLink}}."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["This information helps us improve our products, make marketing to you more relevant, personalise your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["This feature is being managed by a site administrator. {{link}}Learn more{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}."],"This feature has been disabled by a site administrator.":["This feature has been disabled by a site administrator."],"%(moduleName)s has been disabled by a site administrator.":["%(moduleName)s has been disabled by a site administrator."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}"],"Configure your notification settings":["Configure your notification settings"],"Monitor your site's downtime":["Monitor your site's downtime"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["Jetpack Search is a powerful replacement for the search capability built into WordPress."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["Your site’s files are regularly scanned for unauthorised or suspicious modifications that could compromise your security and data."],"Plugin needs updating.":["Plugin needs updating.","Plugins need updating."],"%(number)s":["%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Jetpack’s Plugin Updates allows you to choose which plugins update automatically."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack will optimise your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":["Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected."],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Jetpack Backups allow you to easily restore or download a backup from a specific moment."],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet checks your comments and contact form submissions against our global database of spam."],"Privacy Information":["Privacy Information"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. "],"Add the Search (Jetpack) widget to your sidebar":["Add the Search (Jetpack) widget to your sidebar"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["Give your visitor's a great search experience by letting them filter and sort fast, relevant search results."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["Loads the next posts automatically when the reader approaches the bottom of the page."],"Allows you to publish new posts by sending an email to a special address.":["Allows you to publish new posts by sending an email to a special address."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["Allows you to compose content with links, lists, and other styles using the Markdown syntax."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["Checks your content for correct grammar and spelling, misused words, and style while you write."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["Provides the necessary hidden tags needed to verify your WordPress site with various services."],"Displays information on your site activity, including visitors and popular posts or pages.":["Displays information on your site activity, including visitors and popular posts or pages."],"Allows you to optimize your site and its content for better results in search engines.":["Allows you to optimise your site and its content for better results in search engines."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions."],"Displays high-quality ads on your site that allow you to earn income.":["Displays high-quality ads on your site that allow you to earn income."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["Adds sharing buttons to your content so that visitors can share it on social media sites."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["Allows you to automatically share your newest content on social media sites, including Facebook and Twitter."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["Adds like buttons to your content so that visitors can show their appreciation or enjoyment."],"Allows registered users to log in to your site with their WordPress.com accounts.":["Allows registered users to log in to your site with their WordPress.com accounts."],"Protects your site from traditional and distributed brute force login attacks.":["Protects your site from traditional and distributed brute force login attacks."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error."],"Removes spam from comments and contact forms.":["Removes spam from comments and contact forms."],"We are committed to your privacy and security. ":["We are committed to your privacy and security. "],"View all Jetpack plans":["View all Jetpack plans"],"Manage your plan":["Manage your plan"],"Your Plan":["Your Plan"],"You’re currently on Jetpack %(plan)s.":["You’re currently on Jetpack %(plan)s."],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["Allows readers to subscribe to your posts or comments, and receive notifications of new content by email."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["Replaces the standard WordPress comment form with a new comment system that includes social media login options."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience."],"Add Search (Jetpack) Widget":["Add Search (Jetpack) Widget"],"Jetpack Search is powering search on your site.":["Jetpack Search is powering search on your site."],"Manage your plugins":["Manage your plugins"],"Moderate comments":["Moderate comments"],"Error updating privacy settings. %(error)s":["Error updating privacy settings. %(error)s"],"Updated privacy settings.":["Updated privacy settings."],"Updating privacy settings…":["Updating privacy settings…"],"Add Jetpack Search Widget":["Add Jetpack Search Widget"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["Add the Jetpack Search widget to your sidebar to configure sorting and filters."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support."],"Daily backups, spam filtering, and priority support.":["Daily backups, spam filtering, and priority support."],"Always-on Security":["Always-on Security"],"Activate video hosting":["Activate video hosting"],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support"],"Design the perfect website":["Design the perfect website"],"Set up Jetpack":["Set up Jetpack"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning."],"Jetpack Search":["Jetpack Search"],"Jetpack version %(version)s":["Jetpack version %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["Your site is being backed up in real time and regularly scanned for security threats."],"Daily backup of all your site data with unlimited space and one-click restores":["Daily backup of all your site data with unlimited space and one-click restores"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support"],"View your security activity":["View your security activity"]," (powered by VaultPress).":[" (powered by VaultPress)."],"Customize Search Widget":["Customise Search Widget"],"Please correct the issue below and try again.":["Please correct the issue below and try again.","Please correct the issues listed below and try again."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["We are making sure your site stays free of security threats. You will be notified if we find one."],"Your site is being backed up in real-time.":["Your site is being backed up in real-time."],"Jetpack version":["Jetpack version"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}View your site's activity{{/a}} in a single feed."],"Activity":["Activity"],"Confirm each new phrase you add by pressing enter.":["Confirm each new phrase you add by pressing enter."],"{{a}}View details{{/a}}":["{{a}}View details{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customise your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetise your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics."],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Start exploring Jetpack Professional now to see all the benefits of your new plan."],"Install premium themes":["Install premium themes"],"Review SEO features":["Review SEO features"],"Welcome Professional":["Welcome Professional"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetisation features."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["With Jetpack Premium, you can create the perfect site, no matter its purpose. Customise your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Start exploring Jetpack Premium now to see all the benefits of your new plan."],"Monetize your site with ads":["Monetise your site with ads"],"Welcome Premium":["Welcome Premium"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customise colours, images, or add a variety of new widgets."],"Got it":["Got it"],"Welcome personal":["Welcome personal"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com."],"Jetpack Stats People":["Jetpack Stats People"],"Hello there! Your stats have been activated.":["Hello there! Your stats have been activated."],"Just give us a little time to collect data so we can display it for you here.":["Just give us a little time to collect data so we can display it for you here."],"Okay, got it!":["Okay, got it!"],"Display ads below posts on":["Display ads below posts on"],"Additional ad placements":["Additional ad placements"],"Top of each page":["Top of each page"],"Second ad below post":["Second ad below post"],"Archives":["Archives"],"Explore Professional":["Explore Professional"],"Compare All Plans":["Compare All Plans"],"Person with laptop":["Person with laptop"],"Your Jetpack site is ready to go!":["Your Jetpack site is ready to go!"],"Stars":["Stars"],"Jupiter":["Jupiter"],"Welcome to Jetpack Personal":["Welcome to Jetpack Personal"],"Welcome to Jetpack Premium":["Welcome to Jetpack Premium"],"Welcome to Jetpack Professional":["Welcome to Jetpack Professional"],"Schedule posts":["Schedule posts"],"Activate Publicize":["Activate Publicise"],"Your site is backed up.":["Your site is backed up."],"Image Performance":["Image Performance"],"Get WordPress Apps for every device":["Get WordPress Apps for every device"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world."],"I already use this app.":["I already use this app."],"Create address":["Create address"],"Priority support":["Priority support"],"Add sharing buttons to your posts":["Add sharing buttons to your posts"],"Automatically share your posts to social networks":["Automatically share your posts to social networks"],"Updating settings…":["Updating settings…"],"Updating Post by Email address…":["Updating Post by Email address…"],"Your paid plan gives you access to prioritized Jetpack support.":["Your paid plan gives you access to prioritised Jetpack support."],"You have paid for backups but they're not yet active.":["You have paid for backups but they're not yet active."],"You have paid for backups and security scanning but they’re not yet active.":["You have paid for backups and security scanning but they’re not yet active."],"Click \"Set Up\" to finish installation.":["Click \"Set Up\" to finish installation."],"Checking site status…":["Checking site status…"],"Pages":["Pages"],"We're here to help":["We're here to help"],"Jetpack comes with free, basic support for all users.":["Jetpack comes with free, basic support for all users."],"Ask a question":["Ask a question"],"Search our support site":["Search our support site"],"Get a faster resolution to your support questions.":["Get a faster resolution to your support questions."],"Host fast, high-quality, ad-free video.":["Host fast, high-quality, ad-free video."],"Generate income with high-quality ads.":["Generate income with high-quality ads."],"Real-time site backups and automatic threat resolution.":["Real-time site backups and automatic threat resolution."],"Protect against data loss, malware, and malicious attacks.":["Protect against data loss, malware, and malicious attacks."],"Integrate easily with Google Analytics.":["Integrate easily with Google Analytics."],"Help your content get found and shared with SEO tools.":["Help your content get found and shared with SEO tools."],"Protect your site from spam.":["Protect your site from spam."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["This site is not connected to WordPress.com. Please ask the site administrator to connect."],"Spam filtering":["Spam filtering"],"Daily, automated malware scanning":["Daily, automated malware scanning"],"Daily, automated backups (unlimited storage)":["Daily, automated backups (unlimited storage)"],"Daily, automated malware scanning with automated resolution":["Daily, automated malware scanning with automated resolution"],"Unlimited, high-speed video hosting":["Unlimited, high-speed video hosting"],"SEO preview tools":["SEO preview tools"],"Site stats, related content, and sharing tools":["Site stats, related content, and sharing tools"],"Brute force attack protection and downtime monitoring":["Brute force attack protection and downtime monitoring"],"Unlimited, high-speed image hosting":["Unlimited, high-speed image hosting"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:"],"Read more about Jetpack benefits":["Read more about Jetpack benefits"],"An Automattic Airline":["An Automattic Airline"],"Manage site connection":["Manage site connection"],"Connect your account to WordPress.com to view more stats":["Connect your account to WordPress.com to view more stats"],"Theme enhancements":["Theme enhancements"],"Load more posts using the default theme behavior":["Load more posts using the default theme behaviour"],"Load more posts in page with a button":["Load more posts in page with a button"],"Load more posts as the reader scrolls down":["Load more posts as the reader scrolls down"],"Theme support required.":["Theme support required."],"Learn more about adding support for Infinite Scroll to your theme.":["Learn more about adding support for Infinite Scroll to your theme."],"Use excerpts instead of full posts on front page and archive pages":["Use excerpts instead of full posts on front page and archive pages"],"Show featured images":["Show featured images"],"Enable the WordPress.com toolbar":["Enable the WordPress.com toolbar"],"Writing tools available to you will be shown here when an administrator enables them.":["Writing tools available to you will be shown here when an administrator enables them."],"Portfolios":["Portfolios"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Centre{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["Generate XML sitemaps"],"Collecting valuable traffic stats and insights":["Collecting valuable traffic stats and insights"],"The image helps collect stats, but should work when hidden.":["The image helps collect stats, but should work when hidden."],"Count logged in page views from":["Count logged in page views from"],"Allow stats reports to be viewed by":["Allow stats reports to be viewed by"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimise your site's SEO{{/a}}."],"Configure your SEO settings":["Configure your SEO settings"],"In \"Upgrade\"":["In \"Upgrade\""],"Configure your Google Analytics settings":["Configure your Google Analytics settings"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings."],"Enable ads and display an ad below each post":["Enable ads and display an ad below each post"],"Configure your sharing buttons":["Configure your sharing buttons"],"Connect your social media accounts":["Connect your social media accounts"],"Match accounts using email addresses":["Match accounts using email addresses"],"Require accounts to use WordPress.com Two-Step Authentication":["Require accounts to use WordPress.com Two-Step Authentication"],"Add to whitelist":["Add to whitelist"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["Your site is backed up and threat-free."],"Checking your spam protection…":["Checking your spam protection…"],"Fetching key…":["Fetching key…"],"Your site needs an Antispam key.":["Your site needs an Antispam key."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["There's a problem with your Antispam API key. {{a}}Learn more{{/a}}."],"Your site is not protected from spam.":["Your site is not protected from spam."],"Your Antispam key is valid.":["Your Antispam key is valid."],"Your site is protected from spam.":["Your site is protected from spam."],"Checking key…":["Checking key…"],"Your API key":["Your API key"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one."],"No search results found for %(term)s":["No search results found for %(term)s"],"Enter a search term to find settings or close search.":["Enter a search term to find settings or close search."],"Connections":["Connections"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Your site is in Development Mode, so it can not be connected to WordPress.com."],"Your site is connected to WordPress.com.":["Your site is connected to WordPress.com."],"You are the Jetpack owner.":["You are the Jetpack owner."],"Connected as {{span}}%(username)s{{/span}}":["Connected as {{span}}%(username)s{{/span}}"],"View your Email Followers":["View your Email Followers"],"Color scheme":["Colour scheme"],"Enable Markdown use for comments.":["Enable Markdown use for comments."],"Updated settings.":["Updated settings."],"Error updating settings. %(error)s":["Error updating settings. %(error)s"],"Regenerated Post by Email address.":["Regenerated Post by Email address."],"Error regenerating Post by Email address. %(error)s":["Error regenerating Post by Email address. %(error)s"],"Updated settings. Refreshing page…":["Updated settings. Refreshing page…"],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}The jetpack_development_mode filter is active{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Configure Google Analytics"],"Activate Google Analytics":["Activate Google Analytics"],"Download the free apps":["Download the free apps"],"Upgrade Focus: VideoPress For Weddings":["Upgrade Focus: VideoPress For Weddings"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}You can now also configure related posts in the Customiser. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!"],"Display an ad unit at the top of your site.":["Display an ad unit at the top of your site."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site."],"In \"Mobile\"":["In \"Mobile\""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}"],"View your earnings":["View your earnings"],"Configure site SEO":["Configure site SEO"],"Activate SEO tools":["Activate SEO tools"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!"],"Video Hosting":["Video Hosting"],"SEO Tools":["SEO Tools"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Advanced SEO tools to help your site get found when people search for relevant content."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive."],"You are running Jetpack on a staging server.":["You are running Jetpack on a staging server."],"More Info":["More Info"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}"],"Your current IP: %(ip)s":["Your current IP: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["There are unsaved settings in this tab that will be lost if you leave it. Proceed?"],"This will reset all Jetpack options, are you sure?":["This will reset all Jetpack options, are you sure?"],"Search for a Jetpack feature.":["Search for a Jetpack feature."],"Configure your Security Scans":["Configure your Security Scans"],"Subscriber":["Subscriber"],"Big iPhone/iPad Update Now Available":["Big iPhone/iPad Update Now Available"],"The WordPress for Android App Gets a Big Facelift":["The WordPress for Android App Gets a Big Facelift"],"WordPress.com Likes are:":["WordPress.com Likes are:"],"Comments headline":["Comments headline"],"A few catchy words to motivate your readers to comment.":["A few catchy words to motivate your readers to comment."],"Show a \"follow blog\" option in the comment form":["Show a \"follow blog\" option in the comment form"],"Show a \"follow comments\" option in the comment form":["Show a \"follow comments\" option in the comment form"],"Put a chart showing 48 hours of views in the admin bar":["Put a chart showing 48 hours of views in the admin bar"],"Hide the stats smiley face image":["Hide the stats smiley face image"],"Whitelisted IP addresses":["Whitelisted IP addresses"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Show an ad for the WordPress mobile apps in the footer of the mobile theme"],"Copied!":["Copied!"],"Highlight and copy the following text to your clipboard:":["Highlight and copy the following text to your clipboard:"],"Regenerate address":["Regenerate address"],"Automatically proofread content when: ":["Automatically proofread content when: "],"A post or page is first published":["A post or page is first published"],"A post or page is updated":["A post or page is updated"],"Automatic Language Detection":["Automatic Language Detection"],"The proofreader supports English, French, German, Portuguese and Spanish.":["The proofreader supports English, French, German, Portuguese and Spanish."],"Enable proofreading for the following grammar and style rules: ":["Enable proofreading for the following grammar and style rules: "],"Add a phrase":["Add a phrase"],"Cheatin' uh?":["Cheatin' uh?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["Your Jetpack is already connected."],"You're fueled up and ready to go, Jetpack is now active.":["You're fueled up and ready to go, Jetpack is now active."],"You're fueled up and ready to go.":["You're fueled up and ready to go."],"You are currently running a development version of Jetpack.":["You are currently running a development version of Jetpack."],"Submit Beta feedback":["Submit Beta feedback"],"What would you like to see on your Jetpack Dashboard?":["What would you like to see on your Jetpack Dashboard?"],"Let us know!":["Let us know!"],"Saving…":["Saving…"],"Save Settings":["Save Settings"],"Jetpack Stats Icon":["Jetpack Stats Icon"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}"],"Activate Site Stats":["Activate Site Stats"],"Security Scanning":["Security Scanning"],"Site Backups":["Site Backups"],"Upgrade":["Upgrade"],"ACTIVE":["ACTIVE"],"Your site is on Development Mode":["Your site is on Development Mode"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support."],"View your spam stats":["View your spam stats"],"View your security dashboard":["View your security dashboard"],"The site is in Development Mode, so you can not connect to WordPress.com.":["The site is in Development Mode, so you can not connect to WordPress.com."],"Link your account to WordPress.com to get the most out of Jetpack.":["Link your account to WordPress.com to get the most out of Jetpack."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack is actively blocking malicious login attempts. Data will display here soon!"],"Total malicious attacks blocked on your site.":["Total malicious attacks blocked on your site."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts."],"All plugins are up-to-date. Awesome work!":["All plugins are up-to-date. Awesome work!"],"Jetpack is improving and optimizing your image speed.":["Jetpack is improving and optimising your image speed."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack is monitoring your site. If we think your site is down, you will receive an email."],"Security":["Security"],"Performance":["Performance"],"Backups":["Backups"],"{{a}}View backup details{{/a}}.":["{{a}}View backup details{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress."],"Unavailable in Dev Mode.":["Unavailable in Dev Mode."],"Spam Protection":["Spam Protection"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["For state-of-the-art spam defence, please {{a}}install Akismet{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["For state-of-the-art spam defence, please {{a}}activate Akismet{{/a}}."],"Invalid key":["Invalid key"],"Unavailable in Dev Mode":["Unavailable in Dev Mode"],"Activating recommended features…":["Activating recommended features…"],"Recommended features active.":["Recommended features active."],"Recommended features failed to activate. %(error)s":["Recommended features failed to activate. %(error)s"],"Activating %(slug)s…":["Activating %(slug)s…"],"%(slug)s has been activated.":["%(slug)s has been activated."],"%(slug)s failed to activate. %(error)s":["%(slug)s failed to activate. %(error)s"],"Deactivating %(slug)s…":["Deactivating %(slug)s…"],"%(slug)s has been deactivated.":["%(slug)s has been deactivated."],"%(slug)s failed to deactivate. %(error)s":["%(slug)s failed to deactivate. %(error)s"],"Updating %(slug)s settings…":["Updating %(slug)s settings…"],"Updated %(slug)s settings.":["Updated %(slug)s settings."],"Error updating %(slug)s settings. %(error)s":["Error updating %(slug)s settings. %(error)s"],"Updating %(slug)s address…":["Updating %(slug)s address…"],"Regenerated %(slug)s address .":["Regenerated %(slug)s address ."],"Error regenerating %(slug)s address. %(error)s":["Error regenerating %(slug)s address. %(error)s"],"Resetting Jetpack options…":["Resetting Jetpack options…"],"Options reset.":["Options reset."],"Options failed to reset.":["Options failed to reset."],"There was an error disconnecting Jetpack. Error: %(error)s":["There was an error disconnecting Jetpack. Error: %(error)s"],"Unlinking from WordPress.com":["Unlinking from WordPress.com"],"Unlinked from WordPress.com.":["Unlinked from WordPress.com."],"Error unlinking from WordPress.com. %(error)s":["Error unlinking from WordPress.com. %(error)s"],"At A Glance":["At A Glance"],"Clichés":["Clichés"],"Dashboard":["Dashboard"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack."],"Automattic's Privacy Policy":["Automattic's Privacy Policy"],"WordPress.com Terms of Service":["WordPress.com Terms of Service"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}Activate{{/a}} to enhance the performance and speed of your images."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Turn on plugin autoupdates{{/a}}"],"Plugin Updates":["Plugin Updates"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["To automatically back up your entire site, please {{a}}upgrade your account{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}."],"No threats found, you're good to go!":["No threats found, you're good to go!"],"{{a}}Contact Support{{/a}}":["{{a}}Contact Support{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}View details at VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["Uh oh, %(number)s threat found.","Uh oh, %(number)s threats found."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down."],"Loading…":["Loading…"],"Downtime monitoring":["Downtime monitoring"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}View more stats on WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}View detailed stats{{/button}}"],"All-time comments":["All-time comments"],"All-time views":["All-time views"],"%(number)s View":["%(number)s View","%(number)s Views"],"Best overall day":["Best overall day"],"Views today":["Views today"],"Months":["Months"],"Weeks":["Weeks"],"Days":["Days"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}"],"Click to view detailed stats.":["Click to view detailed stats."],"Views: %(numberOfViews)s":["Views: %(numberOfViews)s"],"Week of %(date)s":["Week of %(date)s"],"Site Security":["Site Security"],"Activate recommended features":["Activate recommended features"],"Link to WordPress.com":["Link to WordPress.com"],"Unlink me from WordPress.com":["Unlink me from WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["You need to stay logged in to your WordPress blog while you authorise Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s"],"Disconnecting Jetpack":["Disconnecting Jetpack"],"Learn more":["Learn more"],"Posts":["Posts"],"Front page":["Front page"],"Upload videos":["Upload videos"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Show related content after posts"],"Related":["Related"],"Save":["Save"],"Email Address":["Email Address"],"Media":["Media"],"Themes":["Themes"],"Site Stats":["Site Stats"],"Sharing":["Sharing"],"Testimonials":["Testimonials"],"Cancel":["Cancel"],"Comments":["Comments"],"Ignored Phrases":["Ignored Phrases"],"Use automatically detected language to proofread posts and pages":["Use automatically detected language to proofread posts and pages"],"Redundant Phrases":["Redundant Phrases"],"Phrases to Avoid":["Phrases to Avoid"],"Passive Voice":["Passive Voice"],"Jargon":["Jargon"],"Hidden Verbs":["Hidden Verbs"],"Double Negatives":["Double Negatives"],"Diacritical Marks":["Diacritical Marks"],"Complex Phrases":["Complex Phrases"],"Bias Language":["Bias Language"],"English Options":["English Options"],"Proofreading":["Proofreading"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Your website needs to be publicly accessible to use Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["You have successfully disconnected Jetpack"],"Edit":["Edit"],"Connected":["Connected"],"Activate":["Activate"],"Active":["Active"],"Search":["Search"],"Settings":["Settings"],"Learn More":["Learn More"],"Disconnect Jetpack":["Disconnect Jetpack"],"Test your site’s compatibility with Jetpack.":["Test your site’s compatibility with Jetpack."],"Settings header\u0004Plugin Autoupdates":["Plugin Autoupdates"],"Settings header\u0004Downtime monitoring":["Downtime monitoring"],"Settings header\u0004Privacy Settings":["Privacy Settings"],"Settings header\u0004WordPress.com toolbar":["WordPress.com toolbar"],"Settings header\u0004Composing":["Composing"],"Settings header\u0004Site stats":["Site stats"],"Settings header\u0004Search engine optimization":["Search engine optimisation"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Sharing buttons"],"Settings header\u0004Publicize connections":["Publicise connections"],"Settings header\u0004Like buttons":["Like buttons"],"Settings header\u0004WordPress.com log in":["WordPress.com log in"],"Settings header\u0004Brute force attack protection":["Brute force attack protection"],"Settings header\u0004Backups and security scanning":["Backups and security scanning"],"Settings header\u0004Spam filtering":["Spam filtering"],"Navigation item.\u0004Performance":["Performance"],"Navigation item.\u0004My Plan":["My Plan"],"Navigation item.\u0004Dev Tools":["Dev Tools"],"Navigation item.\u0004Settings":["Settings"],"Navigation item.\u0004Discussion":["Discussion"],"Navigation item.\u0004Traffic":["Traffic"],"Navigation item.\u0004Sharing":["Sharing"],"Navigation item.\u0004At A Glance":["At A Glance"],"Navigation item.\u0004Plans":["Plans"],"Navigation item.\u0004Writing":["Writing"],"Navigation item.\u0004Reset Options (dev only)":["Reset Options (dev only)"],"Navigation item.\u0004Security":["Security"],"Navigation item.\u0004At a Glance":["At a Glance"],"Search term.\u0004terms of service":["terms of service"],"Search term.\u0004tos":["tos"],"Search term.\u0004gdpr":["gdpr"],"Search term.\u0004data":["data"],"Search term.\u0004tracks":["tracks"],"Search term.\u0004privacy":["privacy"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["Upgrade"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Upgrade"],"Button caption\u0004Saving…":["Saving…"],"Button caption\u0004Save settings":["Save settings"],"A heading for a block of related posts.\u0004Related":["Related"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Preview"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Stay connected"],"A caption for a button to disconnect.\u0004Disconnect":["Disconnect"],"Short warning message\u0004Updates needed":["Updates needed"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Paid"],"A header for a preview area in the configuration screen.\u0004Preview":["Preview"],"Ads header\u0004Ads":["Ads"],"Dashboard widget header\u0004Site connection":["Site connection"],"Dashboard widget header\u0004Account connection":["Account connection"],"A caption for a small button to fix security issues.\u0004Threats":["Threats"],"A caption for a small button to fix security issues.\u0004FIX":["FIX"],"Short warning message about new threats found.\u0004Threats found!":["Threats found!"],"Short warning message about site having no security scan.\u0004No scanning":["No scanning"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Upgrade"],"Short message informing user that the site is secure.\u0004Secure":["Secure"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Invalid key"],"Caption for a button to set up a feature.\u0004Set up":["Set up"],"verb\u0004Copy":["Copy"],"Shorthand for Privacy Policy.\u0004Privacy":["Privacy"],"Shorthand for Terms of Service.\u0004Terms":["Terms"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Debug"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["Spam comments blocked."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-en_CA-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-en_CA-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index c0715588..00000000
--- a/plugins/jetpack/languages/json/jetpack-en_CA-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"en_CA"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":["Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}."],"We’re now collecting stats and securing your site. Welcome aboard.":["We’re now collecting stats and securing your site. Welcome aboard."],"{{a}}Skip, and explore features individually{{/a}}.":["{{a}}Skip, and explore features individually{{/a}}."],"Jetpack Business Plan":["Jetpack Business Plan"],"Jetpack Premium Plan":["Jetpack Premium Plan"],"Jetpack Personal Plan":["Jetpack Personal Plan"],"Get started with hassle-free design, stats, and performance tools.":["Get started with hassle-free design, stats, and performance tools."],"Welcome to Jetpack Free":["Welcome to Jetpack Free"],"Jetpack Free Plan":["Jetpack Free Plan"],"Explore Jetpack plans":["Explore Jetpack plans"],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":["Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes."],"Jetpack offers so much more":["Jetpack offers so much more"],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":["Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress."],"Support documentation":["Support documentation"],"Chat bubbles representing getting in touch with support":["Chat bubbles representing getting in touch with support"],"Site Activity":["Site Activity"],"Start publicizing now":["Start publicizing now"],"Reach a wider audience by automatically sharing your posts on social media.":["Reach a wider audience by automatically sharing your posts on social media."],"Increase traffic to your site":["Increase traffic to your site"],"Explore free themes":["Explore free themes"],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":["Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it."],"A wide variety of themes and tools to customize a site":["A wide variety of themes and tools to customize a site"],"Set up your site security":["Set up your site security"],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":["Prevent login attacks, and get instant notifications when there’s an issue with your site."],"Site stats showing an evolution in traffic and engagement":["Site stats showing an evolution in traffic and engagement"],"A hand holding a loupe":["A hand holding a loupe"],"A chart showing an healthy increase in earnings":["A chart showing an healthy increase in earnings"],"Interface showing a chronological list of changes and updates in a site":["Interface showing a chronological list of changes and updates in a site"],"A cloud with multiple types of content floating around it":["A cloud with multiple types of content floating around it"],"A folder holding real comments":["A folder holding real comments"],"Make your site faster":["Make your site faster"],"Load pages faster by serving your images from our global network of servers.":["Load pages faster by serving your images from our global network of servers."],"A fast and performant website":["A fast and performant website"],"A secure site, locked and protected by Jetpack":["A secure site, locked and protected by Jetpack"],"These settings won't apply to related posts added using the block editor.":["These settings won't apply to related posts added using the block editor."],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more."],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":["This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}."],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":["Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts."],"Add Like buttons to your posts and pages":["Add Like buttons to your posts and pages"],"When visitors enjoy your content, let them show it with a Like.":["When visitors enjoy your content, let them show it with a Like."],"Explore your Jetpack Professional plan!":["Explore your Jetpack Professional plan!"],"Explore your Jetpack Premium plan!":["Explore your Jetpack Premium plan!"],"Explore your Jetpack Personal plan!":["Explore your Jetpack Personal plan!"],"Create account":["Create account"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["Jetpack is powering your site, but to access all of its features you’ll need to create an account."],"Real-time, automated backups (unlimited storage)":["Real-time, automated backups (unlimited storage)"],"Compose content the way you want to and streamline your publishing experience.":["Compose content the way you want to and streamline your publishing experience."],"Add a portfolio item":["Add a portfolio item"],"Add a testimonial":["Add a testimonial"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["Maximize your site’s visibility in search engines and view traffic stats in real time."],"Create a Jetpack account to use this feature":["Create a Jetpack account to use this feature"],"Share your content on social media and increase audience engagement.":["Share your content on social media and increase audience engagement."],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["Jetpack will continuously monitor your site, and alert you the moment downtime is detected."],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure."],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["Keep your site safe with state-of-the-art security and receive notifications of technical problems."],"Error enabling Site accelerator. %(error)s":["Error enabling Site accelerator. %(error)s"],"Site accelerator is now speeding up your site!":["Site accelerator is now speeding up your site!"],"Enabling Site accelerator…":["Enabling Site accelerator…"],"Error disabling site accelerator. %(error)s":["Error disabling site accelerator. %(error)s"],"Site accelerator is no longer speeding up your site!":["Site accelerator is no longer speeding up your site!"],"Disabling site accelerator…":["Disabling site accelerator…"],"Load pages faster, optimize images, and speed up your visitors’ experience.":["Load pages faster, optimize images, and speed up your visitors’ experience."],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns."],"High-speed, high-definition video hosting with no third-party ads.":["High-speed, high-definition video hosting with no third-party ads."],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["Schedule unlimited tweets, Facebook posts, and other social posts in advance."],"Marketing Automation":["Marketing Automation"],"Activate Jetpack Search":["Activate Jetpack Search"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["Replace the default WordPress search with better results and filtering powered by Elasticsearch."],"Start earning":["Start earning"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["WordAds lets you earn money by displaying promotional content. Start earning today."],"Spam is automatically blocked from your comments.":["Spam is automatically blocked from your comments."],"Spam Filtering":["Spam Filtering"],"Browse premium themes":["Browse premium themes"],"Access hundreds of beautifully designed premium themes at no extra cost.":["Access hundreds of beautifully designed premium themes at no extra cost."],"Try a premium theme":["Try a premium theme"],"View settings":["View settings"],"Create a Jetpack account to view your email followers":["Create a Jetpack account to view your email followers"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["Open your site to comments and invite subscribers to get alerts about your latest work."],"Manage security settings":["Manage security settings"],"Built-in Performance":["Built-in Performance"],"Jetpack is ready for the new WordPress editor":["Jetpack is ready for the new WordPress editor"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown."],"Build your Jetpack site with blocks":["Build your Jetpack site with blocks"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["A new editor? Yes! {{a}}Learn more{{/a}}."],"The features you rely on, adapted for the new WordPress editor.":["The features you rely on, adapted for the new WordPress editor."],"Take me to the new editor":["Take me to the new editor"],"Testing Jetpack Connection":["Testing Jetpack Connection"],"There was an error testing Jetpack. Error: %(error)s":["There was an error testing Jetpack. Error: %(error)s"],"New in Jetpack!":["New in Jetpack!"],"Speed up static file load times":["Speed up static file load times"],"Speed up image load times":["Speed up image load times"],"Enable site accelerator":["Enable site accelerator"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers."],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials."],"View your site activity":["View your site activity"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["View a chronological list of all the changes and updates to your site in an organized, readable way."],"Manually Verify ":["Manually Verify "],"Verify with Google":["Verify with Google"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site."],"or":["or"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}."],"Your site is verified with Google":["Your site is verified with Google"],"Site failed to verify: %(error)s":["Site failed to verify: %(error)s"],"Verifying...":["Verifying..."],"Add faster, more advanced searching to your site with Jetpack Professional.":["Add faster, more advanced searching to your site with Jetpack Professional."],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["Replace WordPress built-in search with Jetpack Search, an advanced search experience"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster."],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results."],"Jetpack Search supports many customizations.":["Jetpack Search supports many customizations."],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}."],"Site is verified":["Site is verified"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}"],"Spam filtering and priority support.":["Spam filtering and priority support."],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site."],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line."],"Custom ads.txt entries":["Custom ads.txt entries"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}"],"Introducing Premium Themes":["Introducing Premium Themes"]," Premium Themes":[" Premium Themes"],"Privacy information":["Privacy information"],"Enable Lazy Loading for images":["Enable Lazy Loading for images"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once."],"Performance & speed":["Performance & speed"],"Enable high-speed, ad-free video player":["Enable high-speed, ad-free video player"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!"],"Video":["Video"],"Carousel color scheme":["Carousel colour scheme"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO."],"Show photo Exif metadata in carousel (when available)":["Show photo Exif metadata in carousel (when available)"],"Display images in a full-screen carousel gallery":["Display images in a full-screen carousel gallery"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader."],"Portfolios shortcode: [portfolio]":["Portfolios shortcode: [portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site."],"Testimonials shortcode: [testimonials]":["Testimonials shortcode: [testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site."],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes."],"Configure related posts in the Customizer":["Configure related posts in the Customizer"],"Highlight related content with a heading":["Highlight related content with a heading"],"View security scan details":["View security scan details"],"View backup history":["View backup history"],"Show a thumbnail image where available":["Show a thumbnail image where available"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Centre{{/privacyCenterLink}}."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["This feature is being managed by a site administrator. {{link}}Learn more{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}."],"This feature has been disabled by a site administrator.":["This feature has been disabled by a site administrator."],"%(moduleName)s has been disabled by a site administrator.":["%(moduleName)s has been disabled by a site administrator."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}"],"Configure your notification settings":["Configure your notification settings"],"Monitor your site's downtime":["Monitor your site's downtime"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["Jetpack Search is a powerful replacement for the search capability built into WordPress."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data."],"Plugin needs updating.":["Plugin needs updating.","Plugins need updating."],"%(number)s":["%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Jetpack’s Plugin Updates allows you to choose which plugins update automatically."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":["Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected."],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Jetpack Backups allow you to easily restore or download a backup from a specific moment."],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet checks your comments and contact form submissions against our global database of spam."],"Privacy Information":["Privacy Information"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. "],"Add the Search (Jetpack) widget to your sidebar":["Add the Search (Jetpack) widget to your sidebar"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["Give your visitor's a great search experience by letting them filter and sort fast, relevant search results."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["Loads the next posts automatically when the reader approaches the bottom of the page."],"Allows you to publish new posts by sending an email to a special address.":["Allows you to publish new posts by sending an email to a special address."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["Allows you to compose content with links, lists, and other styles using the Markdown syntax."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["Checks your content for correct grammar and spelling, misused words, and style while you write."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["Provides the necessary hidden tags needed to verify your WordPress site with various services."],"Displays information on your site activity, including visitors and popular posts or pages.":["Displays information on your site activity, including visitors and popular posts or pages."],"Allows you to optimize your site and its content for better results in search engines.":["Allows you to optimize your site and its content for better results in search engines."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions."],"Displays high-quality ads on your site that allow you to earn income.":["Displays high-quality ads on your site that allow you to earn income."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["Adds sharing buttons to your content so that visitors can share it on social media sites."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["Allows you to automatically share your newest content on social media sites, including Facebook and Twitter."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["Adds like buttons to your content so that visitors can show their appreciation or enjoyment."],"Allows registered users to log in to your site with their WordPress.com accounts.":["Allows registered users to log in to your site with their WordPress.com accounts."],"Protects your site from traditional and distributed brute force login attacks.":["Protects your site from traditional and distributed brute force login attacks."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error."],"Removes spam from comments and contact forms.":["Removes spam from comments and contact forms."],"We are committed to your privacy and security. ":["We are committed to your privacy and security. "],"View all Jetpack plans":["View all Jetpack plans"],"Manage your plan":["Manage your plan"],"Your Plan":["Your Plan"],"You’re currently on Jetpack %(plan)s.":["You’re currently on Jetpack %(plan)s."],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["Allows readers to subscribe to your posts or comments, and receive notifications of new content by email."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["Replaces the standard WordPress comment form with a new comment system that includes social media login options."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience."],"Add Search (Jetpack) Widget":["Add Search (Jetpack) Widget"],"Jetpack Search is powering search on your site.":["Jetpack Search is powering search on your site."],"Manage your plugins":["Manage your plugins"],"Moderate comments":["Moderate comments"],"Error updating privacy settings. %(error)s":["Error updating privacy settings. %(error)s"],"Updated privacy settings.":["Updated privacy settings."],"Updating privacy settings…":["Updating privacy settings…"],"Add Jetpack Search Widget":["Add Jetpack Search Widget"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["Add the Jetpack Search widget to your sidebar to configure sorting and filters."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support."],"Daily backups, spam filtering, and priority support.":["Daily backups, spam filtering, and priority support."],"Always-on Security":["Always-on Security"],"Activate video hosting":["Activate video hosting"],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support"],"Design the perfect website":["Design the perfect website"],"Set up Jetpack":["Set up Jetpack"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning."],"Jetpack Search":["Jetpack Search"],"Jetpack version %(version)s":["Jetpack version %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["Your site is being backed up in real time and regularly scanned for security threats."],"Daily backup of all your site data with unlimited space and one-click restores":["Daily backup of all your site data with unlimited space and one-click restores"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support"],"View your security activity":["View your security activity"]," (powered by VaultPress).":[" (powered by VaultPress)."],"Customize Search Widget":["Customize Search Widget"],"Please correct the issue below and try again.":["Please correct the issue below and try again.","Please correct the issues listed below and try again."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["We are making sure your site stays free of security threats. You will be notified if we find one."],"Your site is being backed up in real-time.":["Your site is being backed up in real-time."],"Jetpack version":["Jetpack version"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}View your site's activity{{/a}} in a single feed."],"Activity":["Activity"],"Confirm each new phrase you add by pressing enter.":["Confirm each new phrase you add by pressing enter."],"{{a}}View details{{/a}}":["{{a}}View details{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics."],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Start exploring Jetpack Professional now to see all the benefits of your new plan."],"Install premium themes":["Install premium themes"],"Review SEO features":["Review SEO features"],"Welcome Professional":["Welcome Professional"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Start exploring Jetpack Premium now to see all the benefits of your new plan."],"Monetize your site with ads":["Monetize your site with ads"],"Welcome Premium":["Welcome Premium"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colours, images, or add a variety of new widgets."],"Got it":["Got it"],"Welcome personal":["Welcome personal"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com."],"Jetpack Stats People":["Jetpack Stats People"],"Hello there! Your stats have been activated.":["Hello there! Your stats have been activated."],"Just give us a little time to collect data so we can display it for you here.":["Just give us a little time to collect data so we can display it for you here."],"Okay, got it!":["Okay, got it!"],"Display ads below posts on":["Display ads below posts on"],"Additional ad placements":["Additional ad placements"],"Top of each page":["Top of each page"],"Second ad below post":["Second ad below post"],"Archives":["Archives"],"Explore Professional":["Explore Professional"],"Compare All Plans":["Compare All Plans"],"Person with laptop":["Person with laptop"],"Your Jetpack site is ready to go!":["Your Jetpack site is ready to go!"],"Stars":["Stars"],"Jupiter":["Jupiter"],"Welcome to Jetpack Personal":["Welcome to Jetpack Personal"],"Welcome to Jetpack Premium":["Welcome to Jetpack Premium"],"Welcome to Jetpack Professional":["Welcome to Jetpack Professional"],"Schedule posts":["Schedule posts"],"Activate Publicize":["Activate Publicize"],"Your site is backed up.":["Your site is backed up."],"Image Performance":["Image Performance"],"Get WordPress Apps for every device":["Get WordPress Apps for every device"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world."],"I already use this app.":["I already use this app."],"Create address":["Create address"],"Priority support":["Priority support"],"Add sharing buttons to your posts":["Add sharing buttons to your posts"],"Automatically share your posts to social networks":["Automatically share your posts to social networks"],"Updating settings…":["Updating settings…"],"Updating Post by Email address…":["Updating Post by Email address…"],"Your paid plan gives you access to prioritized Jetpack support.":["Your paid plan gives you access to prioritized Jetpack support."],"You have paid for backups but they're not yet active.":["You have paid for backups but they're not yet active."],"You have paid for backups and security scanning but they’re not yet active.":["You have paid for backups and security scanning but they’re not yet active."],"Click \"Set Up\" to finish installation.":["Click \"Set Up\" to finish installation."],"Checking site status…":["Checking site status…"],"Pages":["Pages"],"We're here to help":["We're here to help"],"Jetpack comes with free, basic support for all users.":["Jetpack comes with free, basic support for all users."],"Ask a question":["Ask a question"],"Search our support site":["Search our support site"],"Get a faster resolution to your support questions.":["Get a faster resolution to your support questions."],"Host fast, high-quality, ad-free video.":["Host fast, high-quality, ad-free video."],"Generate income with high-quality ads.":["Generate income with high-quality ads."],"Real-time site backups and automatic threat resolution.":["Real-time site backups and automatic threat resolution."],"Protect against data loss, malware, and malicious attacks.":["Protect against data loss, malware, and malicious attacks."],"Integrate easily with Google Analytics.":["Integrate easily with Google Analytics."],"Help your content get found and shared with SEO tools.":["Help your content get found and shared with SEO tools."],"Protect your site from spam.":["Protect your site from spam."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["This site is not connected to WordPress.com. Please ask the site administrator to connect."],"Spam filtering":["Spam filtering"],"Daily, automated malware scanning":["Daily, automated malware scanning"],"Daily, automated backups (unlimited storage)":["Daily, automated backups (unlimited storage)"],"Daily, automated malware scanning with automated resolution":["Daily, automated malware scanning with automated resolution"],"Unlimited, high-speed video hosting":["Unlimited, high-speed video hosting"],"SEO preview tools":["SEO preview tools"],"Site stats, related content, and sharing tools":["Site stats, related content, and sharing tools"],"Brute force attack protection and downtime monitoring":["Brute force attack protection and downtime monitoring"],"Unlimited, high-speed image hosting":["Unlimited, high-speed image hosting"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:"],"Read more about Jetpack benefits":["Read more about Jetpack benefits"],"An Automattic Airline":["An Automattic Airline"],"Manage site connection":["Manage site connection"],"Connect your account to WordPress.com to view more stats":["Connect your account to WordPress.com to view more stats"],"Theme enhancements":["Theme enhancements"],"Load more posts using the default theme behavior":["Load more posts using the default theme behavior"],"Load more posts in page with a button":["Load more posts in page with a button"],"Load more posts as the reader scrolls down":["Load more posts as the reader scrolls down"],"Theme support required.":["Theme support required."],"Learn more about adding support for Infinite Scroll to your theme.":["Learn more about adding support for Infinite Scroll to your theme."],"Use excerpts instead of full posts on front page and archive pages":["Use excerpts instead of full posts on front page and archive pages"],"Show featured images":["Show featured images"],"Enable the WordPress.com toolbar":["Enable the WordPress.com toolbar"],"Writing tools available to you will be shown here when an administrator enables them.":["Writing tools available to you will be shown here when an administrator enables them."],"Portfolios":["Portfolios"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Centre{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["Generate XML sitemaps"],"Collecting valuable traffic stats and insights":["Collecting valuable traffic stats and insights"],"The image helps collect stats, but should work when hidden.":["The image helps collect stats, but should work when hidden."],"Count logged in page views from":["Count logged in page views from"],"Allow stats reports to be viewed by":["Allow stats reports to be viewed by"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}."],"Configure your SEO settings":["Configure your SEO settings"],"In \"Upgrade\"":["In \"Upgrade\""],"Configure your Google Analytics settings":["Configure your Google Analytics settings"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings."],"Enable ads and display an ad below each post":["Enable ads and display an ad below each post"],"Configure your sharing buttons":["Configure your sharing buttons"],"Connect your social media accounts":["Connect your social media accounts"],"Match accounts using email addresses":["Match accounts using email addresses"],"Require accounts to use WordPress.com Two-Step Authentication":["Require accounts to use WordPress.com Two-Step Authentication"],"Add to whitelist":["Add to whitelist"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["Your site is backed up and threat-free."],"Checking your spam protection…":["Checking your spam protection…"],"Fetching key…":["Fetching key…"],"Your site needs an Antispam key.":["Your site needs an Antispam key."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["There's a problem with your Antispam API key. {{a}}Learn more{{/a}}."],"Your site is not protected from spam.":["Your site is not protected from spam."],"Your Antispam key is valid.":["Your Antispam key is valid."],"Your site is protected from spam.":["Your site is protected from spam."],"Checking key…":["Checking key…"],"Your API key":["Your API key"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one."],"No search results found for %(term)s":["No search results found for %(term)s"],"Enter a search term to find settings or close search.":["Enter a search term to find settings or close search."],"Connections":["Connections"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Your site is in Development Mode, so it can not be connected to WordPress.com."],"Your site is connected to WordPress.com.":["Your site is connected to WordPress.com."],"You are the Jetpack owner.":["You are the Jetpack owner."],"Connected as {{span}}%(username)s{{/span}}":["Connected as {{span}}%(username)s{{/span}}"],"View your Email Followers":["View your Email Followers"],"Color scheme":["Colour scheme"],"Enable Markdown use for comments.":["Enable Markdown use for comments."],"Updated settings.":["Updated settings."],"Error updating settings. %(error)s":["Error updating settings. %(error)s"],"Regenerated Post by Email address.":["Regenerated Post by Email address."],"Error regenerating Post by Email address. %(error)s":["Error regenerating Post by Email address. %(error)s"],"Updated settings. Refreshing page…":["Updated settings. Refreshing page…"],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}The jetpack_development_mode filter is active{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Configure Google Analytics"],"Activate Google Analytics":["Activate Google Analytics"],"Download the free apps":["Download the free apps"],"Upgrade Focus: VideoPress For Weddings":["Upgrade Focus: VideoPress For Weddings"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!"],"Display an ad unit at the top of your site.":["Display an ad unit at the top of your site."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site."],"In \"Mobile\"":["In \"Mobile\""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}"],"View your earnings":["View your earnings"],"Configure site SEO":["Configure site SEO"],"Activate SEO tools":["Activate SEO tools"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!"],"Video Hosting":["Video Hosting"],"SEO Tools":["SEO Tools"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Advanced SEO tools to help your site get found when people search for relevant content."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive."],"You are running Jetpack on a staging server.":["You are running Jetpack on a staging server."],"More Info":["More Info"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}"],"Your current IP: %(ip)s":["Your current IP: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["There are unsaved settings in this tab that will be lost if you leave it. Proceed?"],"This will reset all Jetpack options, are you sure?":["This will reset all Jetpack options, are you sure?"],"Search for a Jetpack feature.":["Search for a Jetpack feature."],"Configure your Security Scans":["Configure your Security Scans"],"Subscriber":["Subscriber"],"Big iPhone/iPad Update Now Available":["Big iPhone/iPad Update Now Available"],"The WordPress for Android App Gets a Big Facelift":["The WordPress for Android App Gets a Big Facelift"],"WordPress.com Likes are:":["WordPress.com Likes are:"],"Comments headline":["Comments headline"],"A few catchy words to motivate your readers to comment.":["A few catchy words to motivate your readers to comment."],"Show a \"follow blog\" option in the comment form":["Show a \"follow blog\" option in the comment form"],"Show a \"follow comments\" option in the comment form":["Show a \"follow comments\" option in the comment form"],"Put a chart showing 48 hours of views in the admin bar":["Put a chart showing 48 hours of views in the admin bar"],"Hide the stats smiley face image":["Hide the stats smiley face image"],"Whitelisted IP addresses":["Whitelisted IP addresses"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Show an ad for the WordPress mobile apps in the footer of the mobile theme"],"Copied!":["Copied!"],"Highlight and copy the following text to your clipboard:":["Highlight and copy the following text to your clipboard:"],"Regenerate address":["Regenerate address"],"Automatically proofread content when: ":["Automatically proofread content when: "],"A post or page is first published":["A post or page is first published"],"A post or page is updated":["A post or page is updated"],"Automatic Language Detection":["Automatic Language Detection"],"The proofreader supports English, French, German, Portuguese and Spanish.":["The proofreader supports English, French, German, Portuguese and Spanish."],"Enable proofreading for the following grammar and style rules: ":["Enable proofreading for the following grammar and style rules: "],"Add a phrase":["Add a phrase"],"Cheatin' uh?":["Cheatin' eh?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["Your Jetpack is already connected."],"You're fueled up and ready to go, Jetpack is now active.":["You're fuelled up and ready to go, Jetpack is now active."],"You're fueled up and ready to go.":["You're fuelled up and ready to go."],"You are currently running a development version of Jetpack.":["You are currently running a development version of Jetpack."],"Submit Beta feedback":["Submit Beta feedback"],"What would you like to see on your Jetpack Dashboard?":["What would you like to see on your Jetpack Dashboard?"],"Let us know!":["Let us know!"],"Saving…":["Saving…"],"Save Settings":["Save Settings"],"Jetpack Stats Icon":["Jetpack Stats Icon"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}"],"Activate Site Stats":["Activate Site Stats"],"Security Scanning":["Security Scanning"],"Site Backups":["Site Backups"],"Upgrade":["Upgrade"],"ACTIVE":["ACTIVE"],"Your site is on Development Mode":["Your site is on Development Mode"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support."],"View your spam stats":["View your spam stats"],"View your security dashboard":["View your security dashboard"],"The site is in Development Mode, so you can not connect to WordPress.com.":["The site is in Development Mode, so you can not connect to WordPress.com."],"Link your account to WordPress.com to get the most out of Jetpack.":["Link your account to WordPress.com to get the most out of Jetpack."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack is actively blocking malicious login attempts. Data will display here soon!"],"Total malicious attacks blocked on your site.":["Total malicious attacks blocked on your site."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts."],"All plugins are up-to-date. Awesome work!":["All plugins are up-to-date. Awesome work!"],"Jetpack is improving and optimizing your image speed.":["Jetpack is improving and optimizing your image speed."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack is monitoring your site. If we think your site is down, you will receive an email."],"Security":["Security"],"Performance":["Performance"],"Backups":["Backups"],"{{a}}View backup details{{/a}}.":["{{a}}View backup details{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress."],"Unavailable in Dev Mode.":["Unavailable in Dev Mode."],"Spam Protection":["Spam Protection"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["For state-of-the-art spam defence, please {{a}}install Akismet{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["For state-of-the-art spam defence, please {{a}}activate Akismet{{/a}}."],"Invalid key":["Invalid key"],"Unavailable in Dev Mode":["Unavailable in Dev Mode"],"Activating recommended features…":["Activating recommended features…"],"Recommended features active.":["Recommended features active."],"Recommended features failed to activate. %(error)s":["Recommended features failed to activate. %(error)s"],"Activating %(slug)s…":["Activating %(slug)s…"],"%(slug)s has been activated.":["%(slug)s has been activated."],"%(slug)s failed to activate. %(error)s":["%(slug)s failed to activate. %(error)s"],"Deactivating %(slug)s…":["Deactivating %(slug)s…"],"%(slug)s has been deactivated.":["%(slug)s has been deactivated."],"%(slug)s failed to deactivate. %(error)s":["%(slug)s failed to deactivate. %(error)s"],"Updating %(slug)s settings…":["Updating %(slug)s settings…"],"Updated %(slug)s settings.":["Updated %(slug)s settings."],"Error updating %(slug)s settings. %(error)s":["Error updating %(slug)s settings. %(error)s"],"Updating %(slug)s address…":["Updating %(slug)s address…"],"Regenerated %(slug)s address .":["Regenerated %(slug)s address ."],"Error regenerating %(slug)s address. %(error)s":["Error regenerating %(slug)s address. %(error)s"],"Resetting Jetpack options…":["Resetting Jetpack options…"],"Options reset.":["Options reset."],"Options failed to reset.":["Options failed to reset."],"There was an error disconnecting Jetpack. Error: %(error)s":["There was an error disconnecting Jetpack. Error: %(error)s"],"Unlinking from WordPress.com":["Unlinking from WordPress.com"],"Unlinked from WordPress.com.":["Unlinked from WordPress.com."],"Error unlinking from WordPress.com. %(error)s":["Error unlinking from WordPress.com. %(error)s"],"At A Glance":["At A Glance"],"Clichés":["Clichés"],"Dashboard":["Dashboard"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack."],"Automattic's Privacy Policy":["Automattic's Privacy Policy"],"WordPress.com Terms of Service":["WordPress.com Terms of Service"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}Activate{{/a}} to enhance the performance and speed of your images."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Turn on plugin autoupdates{{/a}}"],"Plugin Updates":["Plugin Updates"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["To automatically back up your entire site, please {{a}}upgrade your account{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}."],"No threats found, you're good to go!":["No threats found, you're good to go!"],"{{a}}Contact Support{{/a}}":["{{a}}Contact Support{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}View details at VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["Uh oh, %(number)s threat found.","Uh oh, %(number)s threats found."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down."],"Loading…":["Loading…"],"Downtime monitoring":["Downtime monitoring"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}View more stats on WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}View detailed stats{{/button}}"],"All-time comments":["All-time comments"],"All-time views":["All-time views"],"%(number)s View":["%(number)s View","%(number)s Views"],"Best overall day":["Best overall day"],"Views today":["Views today"],"Months":["Months"],"Weeks":["Weeks"],"Days":["Days"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}"],"Click to view detailed stats.":["Click to view detailed stats."],"Views: %(numberOfViews)s":["Views: %(numberOfViews)s"],"Week of %(date)s":["Week of %(date)s"],"Site Security":["Site Security"],"Activate recommended features":["Activate recommended features"],"Link to WordPress.com":["Link to WordPress.com"],"Unlink me from WordPress.com":["Unlink me from WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["You need to stay logged in to your WordPress blog while you authorize Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s"],"Disconnecting Jetpack":["Disconnecting Jetpack"],"Learn more":["Learn more"],"Posts":["Posts"],"Front page":["Front page"],"Upload videos":["Upload videos"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Show related content after posts"],"Related":["Related"],"Save":["Save"],"Email Address":["Email Address"],"Media":["Media"],"Themes":["Themes"],"Site Stats":["Site Stats"],"Sharing":["Sharing"],"Testimonials":["Testimonials"],"Cancel":["Cancel"],"Comments":["Comments"],"Ignored Phrases":["Ignored Phrases"],"Use automatically detected language to proofread posts and pages":["Use automatically detected language to proofread posts and pages"],"Redundant Phrases":["Redundant Phrases"],"Phrases to Avoid":["Phrases to Avoid"],"Passive Voice":["Passive Voice"],"Jargon":["Jargon"],"Hidden Verbs":["Hidden Verbs"],"Double Negatives":["Double Negatives"],"Diacritical Marks":["Diacritical Marks"],"Complex Phrases":["Complex Phrases"],"Bias Language":["Bias Language"],"English Options":["English Options"],"Proofreading":["Proofreading"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Your website needs to be publicly accessible to use Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["You have successfully disconnected Jetpack"],"Edit":["Edit"],"Connected":["Connected"],"Activate":["Activate"],"Active":["Active"],"Search":["Search"],"Settings":["Settings"],"Learn More":["Learn More"],"Disconnect Jetpack":["Disconnect Jetpack"],"Test your site’s compatibility with Jetpack.":["Test your site’s compatibility with Jetpack."],"Settings header\u0004Plugin Autoupdates":["Plugin Autoupdates"],"Settings header\u0004Downtime monitoring":["Downtime monitoring"],"Settings header\u0004Privacy Settings":["Privacy Settings"],"Settings header\u0004WordPress.com toolbar":["WordPress.com toolbar"],"Settings header\u0004Composing":["Composing"],"Settings header\u0004Site stats":["Site stats"],"Settings header\u0004Search engine optimization":["Search engine optimization"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Sharing buttons"],"Settings header\u0004Publicize connections":["Publicize connections"],"Settings header\u0004Like buttons":["Like buttons"],"Settings header\u0004WordPress.com log in":["WordPress.com log in"],"Settings header\u0004Brute force attack protection":["Brute force attack protection"],"Settings header\u0004Backups and security scanning":["Backups and security scanning"],"Settings header\u0004Spam filtering":["Spam filtering"],"Navigation item.\u0004Performance":["Performance"],"Navigation item.\u0004My Plan":["My Plan"],"Navigation item.\u0004Dev Tools":["Dev Tools"],"Navigation item.\u0004Settings":["Settings"],"Navigation item.\u0004Discussion":["Discussion"],"Navigation item.\u0004Traffic":["Traffic"],"Navigation item.\u0004Sharing":["Sharing"],"Navigation item.\u0004At A Glance":["At A Glance"],"Navigation item.\u0004Plans":["Plans"],"Navigation item.\u0004Writing":["Writing"],"Navigation item.\u0004Reset Options (dev only)":["Reset Options (dev only)"],"Navigation item.\u0004Security":["Security"],"Navigation item.\u0004At a Glance":["At a Glance"],"Search term.\u0004terms of service":["terms of service"],"Search term.\u0004tos":["tos"],"Search term.\u0004gdpr":["gdpr"],"Search term.\u0004data":["data"],"Search term.\u0004tracks":["tracks"],"Search term.\u0004privacy":["privacy"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["Upgrade"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Upgrade"],"Button caption\u0004Saving…":["Saving…"],"Button caption\u0004Save settings":["Save settings"],"A heading for a block of related posts.\u0004Related":["Related"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Preview"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Stay connected"],"A caption for a button to disconnect.\u0004Disconnect":["Disconnect"],"Short warning message\u0004Updates needed":["Updates needed"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Paid"],"A header for a preview area in the configuration screen.\u0004Preview":["Preview"],"Ads header\u0004Ads":["Ads"],"Dashboard widget header\u0004Site connection":["Site connection"],"Dashboard widget header\u0004Account connection":["Account connection"],"A caption for a small button to fix security issues.\u0004Threats":["Threats"],"A caption for a small button to fix security issues.\u0004FIX":["FIX"],"Short warning message about new threats found.\u0004Threats found!":["Threats found!"],"Short warning message about site having no security scan.\u0004No scanning":["No scanning"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Upgrade"],"Short message informing user that the site is secure.\u0004Secure":["Secure"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Invalid key"],"Caption for a button to set up a feature.\u0004Set up":["Set up"],"verb\u0004Copy":["Copy"],"Shorthand for Privacy Policy.\u0004Privacy":["Privacy"],"Shorthand for Terms of Service.\u0004Terms":["Terms"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Debug"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["Spam comments blocked."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-en_GB-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-en_GB-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 51236fc3..00000000
--- a/plugins/jetpack/languages/json/jetpack-en_GB-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"en_GB"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":[""],"We’re now collecting stats and securing your site. Welcome aboard.":[""],"{{a}}Skip, and explore features individually{{/a}}.":[""],"Jetpack Business Plan":[""],"Jetpack Premium Plan":[""],"Jetpack Personal Plan":[""],"Get started with hassle-free design, stats, and performance tools.":[""],"Welcome to Jetpack Free":[""],"Jetpack Free Plan":[""],"Explore Jetpack plans":[""],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":[""],"Jetpack offers so much more":[""],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":[""],"Support documentation":[""],"Chat bubbles representing getting in touch with support":[""],"Site Activity":[""],"Start publicizing now":[""],"Reach a wider audience by automatically sharing your posts on social media.":[""],"Increase traffic to your site":[""],"Explore free themes":[""],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":[""],"A wide variety of themes and tools to customize a site":[""],"Set up your site security":[""],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":[""],"Site stats showing an evolution in traffic and engagement":[""],"A hand holding a loupe":[""],"A chart showing an healthy increase in earnings":[""],"Interface showing a chronological list of changes and updates in a site":[""],"A cloud with multiple types of content floating around it":[""],"A folder holding real comments":[""],"Make your site faster":[""],"Load pages faster by serving your images from our global network of servers.":[""],"A fast and performant website":[""],"A secure site, locked and protected by Jetpack":[""],"These settings won't apply to related posts added using the block editor.":["These settings won't apply to related posts added using the block editor."],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more."],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":["This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}."],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":["Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts."],"Add Like buttons to your posts and pages":["Add Like buttons to your posts and pages"],"When visitors enjoy your content, let them show it with a Like.":["When visitors enjoy your content, let them show it with a Like."],"Explore your Jetpack Professional plan!":["Explore your Jetpack Professional plan!"],"Explore your Jetpack Premium plan!":["Explore your Jetpack Premium plan!"],"Explore your Jetpack Personal plan!":["Explore your Jetpack Personal plan!"],"Create account":["Create account"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["Jetpack is powering your site, but to access all of its features you’ll need to create an account."],"Real-time, automated backups (unlimited storage)":["Real-time, automated backups (unlimited storage)"],"Compose content the way you want to and streamline your publishing experience.":["Compose content the way you want and streamline your publishing experience."],"Add a portfolio item":["Add a portfolio item"],"Add a testimonial":["Add a testimonial"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["Maximise your site’s visibility in search engines and view traffic stats in real time."],"Create a Jetpack account to use this feature":["Create a Jetpack account to use this feature"],"Share your content on social media and increase audience engagement.":["Share your content on social media and increase audience engagement."],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["Jetpack will continuously monitor your site, and alert you the moment downtime is detected."],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to auto-update, so that your site stays secure."],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["Keep your site safe with state-of-the-art security and receive notifications of technical problems."],"Error enabling Site accelerator. %(error)s":["Error enabling Site Accelerator. %(error)s"],"Site accelerator is now speeding up your site!":["Site Accelerator is now speeding up your site!"],"Enabling Site accelerator…":["Enabling Site Accelerator…"],"Error disabling site accelerator. %(error)s":["Error disabling Site Accelerator. %(error)s"],"Site accelerator is no longer speeding up your site!":["Site Accelerator is no longer speeding up your site!"],"Disabling site accelerator…":["Disabling Site Accelerator…"],"Load pages faster, optimize images, and speed up your visitors’ experience.":["Load pages faster, optimise images, and speed up your visitors’ experience."],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns."],"High-speed, high-definition video hosting with no third-party ads.":["High-speed, high-definition video hosting with no third-party ads."],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["Schedule unlimited tweets, Facebook posts, and other social posts in advance."],"Marketing Automation":["Marketing Automation"],"Activate Jetpack Search":["Activate Jetpack Search"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["Replace the default WordPress search with better results and filtering powered by Elasticsearch."],"Start earning":["Start earning"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["WordAds lets you earn money by displaying promotional content. Start earning today."],"Spam is automatically blocked from your comments.":["Spam is automatically blocked from your comments."],"Spam Filtering":["Spam Filtering"],"Browse premium themes":["Browse premium themes"],"Access hundreds of beautifully designed premium themes at no extra cost.":["Access hundreds of beautifully designed premium themes at no extra cost."],"Try a premium theme":["Try a premium theme"],"View settings":["View settings"],"Create a Jetpack account to view your email followers":["Create a Jetpack account to view your e-mail followers"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["Open your site to comments and invite subscribers to get alerts about your latest work."],"Manage security settings":["Manage security settings"],"Built-in Performance":["Built-in Performance"],"Jetpack is ready for the new WordPress editor":["Jetpack is ready for the new WordPress editor"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown."],"Build your Jetpack site with blocks":["Build your Jetpack site with blocks"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["A new editor? Yes! {{a}}Learn more{{/a}}."],"The features you rely on, adapted for the new WordPress editor.":["The features you rely on, adapted for the new WordPress editor."],"Take me to the new editor":["Take me to the new editor"],"Testing Jetpack Connection":["Testing Jetpack Connection"],"There was an error testing Jetpack. Error: %(error)s":["There was an error testing Jetpack. Error: %(error)s"],"New in Jetpack!":["New in Jetpack!"],"Speed up static file load times":["Speed up static file load times"],"Speed up image load times":["Speed up image load times"],"Enable site accelerator":["Enable site accelerator"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["Load pages faster by allowing Jetpack to optimise your images and serve your images and static files (like CSS and JavaScript) from our global network of servers."],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials."],"View your site activity":["View your site activity"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["View a chronological list of all the changes and updates to your site in an organised, readable way."],"Manually Verify ":["Manually Verify "],"Verify with Google":["Verify with Google"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site."],"or":["or"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}."],"Your site is verified with Google":["Your site is verified with Google"],"Site failed to verify: %(error)s":["Site failed to verify: %(error)s"],"Verifying...":["Verifying..."],"Add faster, more advanced searching to your site with Jetpack Professional.":["Add faster, more advanced searching to your site with Jetpack Professional."],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["Replace WordPress built-in search with Jetpack Search, an advanced search experience"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["Jetpack Search replaces the built-in search with a fast, scalable, customisable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster."],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results."],"Jetpack Search supports many customizations.":["Jetpack Search supports many customisations."],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["Replace the built-in search with a fast, scalable, customisable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}."],"Site is verified":["Site is verified"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}"],"Spam filtering and priority support.":["Spam filtering and priority support."],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site."],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line."],"Custom ads.txt entries":["Custom ads.txt entries"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}"],"Introducing Premium Themes":["Introducing Premium Themes"]," Premium Themes":[" Premium Themes"],"Privacy information":["Privacy information"],"Enable Lazy Loading for images":["Enable Lazy Loading for images"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once."],"Performance & speed":["Performance & speed"],"Enable high-speed, ad-free video player":["Enable high-speed, ad-free video player"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customise your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!"],"Video":["Video"],"Carousel color scheme":["Carousel colour scheme"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO."],"Show photo Exif metadata in carousel (when available)":["Show photo Exif metadata in carousel (when available)"],"Display images in a full-screen carousel gallery":["Display images in a full-screen carousel gallery"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader."],"Portfolios shortcode: [portfolio]":["Portfolios shortcode: [portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site."],"Testimonials shortcode: [testimonials]":["Testimonials shortcode: [testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site."],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes."],"Configure related posts in the Customizer":["Configure related posts in the Customiser"],"Highlight related content with a heading":["Highlight related content with a heading"],"View security scan details":["View security scan details"],"View backup history":["View backup history"],"Show a thumbnail image where available":["Show a thumbnail image where available"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["This information helps us improve our products, make marketing to you more relevant, personalise your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["This feature is being managed by a site administrator. {{link}}Learn more{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}."],"This feature has been disabled by a site administrator.":["This feature has been disabled by a site administrator."],"%(moduleName)s has been disabled by a site administrator.":["%(moduleName)s has been disabled by a site administrator."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}"],"Configure your notification settings":["Configure your notification settings"],"Monitor your site's downtime":["Monitor your site's downtime"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["Jetpack Search is a powerful replacement for the search capability built into WordPress."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["Your site’s files are regularly scanned for unauthorised or suspicious modifications that could compromise your security and data."],"Plugin needs updating.":["Plugin needs updating.","Plugins need updating."],"%(number)s":["%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Jetpack’s Plugin Updates allows you to choose which plugins update automatically."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack will optimise your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":["Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected."],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Jetpack Backups allow you to easily restore or download a backup from a specific moment."],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet checks your comments and contact form submissions against our global database of spam."],"Privacy Information":["Privacy Information"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. "],"Add the Search (Jetpack) widget to your sidebar":["Add the Search (Jetpack) widget to your sidebar"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["Give your visitor's a great search experience by letting them filter and sort fast, relevant search results."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["Loads the next posts automatically when the reader approaches the bottom of the page."],"Allows you to publish new posts by sending an email to a special address.":["Allows you to publish new posts by sending an email to a special address."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["Allows you to compose content with links, lists, and other styles using the Markdown syntax."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["Checks your content for correct grammar and spelling, misused words, and style while you write."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["Provides the necessary hidden tags needed to verify your WordPress site with various services."],"Displays information on your site activity, including visitors and popular posts or pages.":["Displays information on your site activity, including visitors and popular posts or pages."],"Allows you to optimize your site and its content for better results in search engines.":["Allows you to optimise your site and its content for better results in search engines."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions."],"Displays high-quality ads on your site that allow you to earn income.":["Displays high-quality ads on your site that allow you to earn income."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["Adds sharing buttons to your content so that visitors can share it on social media sites."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["Allows you to automatically share your newest content on social media sites, including Facebook and Twitter."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["Adds like buttons to your content so that visitors can show their appreciation or enjoyment."],"Allows registered users to log in to your site with their WordPress.com accounts.":["Allows registered users to log in to your site with their WordPress.com accounts."],"Protects your site from traditional and distributed brute force login attacks.":["Protects your site from traditional and distributed brute force login attacks."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error."],"Removes spam from comments and contact forms.":["Removes spam from comments and contact forms."],"We are committed to your privacy and security. ":["We are committed to your privacy and security. "],"View all Jetpack plans":["View all Jetpack plans"],"Manage your plan":["Manage your plan"],"Your Plan":["Your Plan"],"You’re currently on Jetpack %(plan)s.":["You’re currently on Jetpack %(plan)s."],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["Allows readers to subscribe to your posts or comments, and receive notifications of new content by email."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["Replaces the standard WordPress comment form with a new comment system that includes social media login options."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience."],"Add Search (Jetpack) Widget":["Add Search (Jetpack) Widget"],"Jetpack Search is powering search on your site.":["Jetpack Search is powering search on your site."],"Manage your plugins":["Manage your plugins"],"Moderate comments":["Moderate comments"],"Error updating privacy settings. %(error)s":["Error updating privacy settings. %(error)s"],"Updated privacy settings.":["Updated privacy settings."],"Updating privacy settings…":["Updating privacy settings…"],"Add Jetpack Search Widget":["Add Jetpack Search Widget"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["Add the Jetpack Search widget to your sidebar to configure sorting and filters."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support."],"Daily backups, spam filtering, and priority support.":["Daily backups, spam filtering, and priority support."],"Always-on Security":["Always-on Security"],"Activate video hosting":["Activate video hosting"],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support"],"Design the perfect website":["Design the perfect website"],"Set up Jetpack":["Set up Jetpack"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning."],"Jetpack Search":["Jetpack Search"],"Jetpack version %(version)s":["Jetpack version %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["Your site is being backed up in real time and regularly scanned for security threats."],"Daily backup of all your site data with unlimited space and one-click restores":["Daily backup of all your site data with unlimited space and one-click restores"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support"],"View your security activity":["View your security activity"]," (powered by VaultPress).":[" (powered by VaultPress)."],"Customize Search Widget":["Customise Search Widget"],"Please correct the issue below and try again.":["Please correct the issue below and try again.","Please correct the issues listed below and try again."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["We are making sure your site stays free of security threats. You will be notified if we find one."],"Your site is being backed up in real-time.":["Your site is being backed up in real-time."],"Jetpack version":["Jetpack version"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}View your site's activity{{/a}} in a single feed."],"Activity":["Activity"],"Confirm each new phrase you add by pressing enter.":["Confirm each new phrase you add by pressing enter."],"{{a}}View details{{/a}}":["{{a}}View details{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customise your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics."],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Start exploring Jetpack Professional now to see all the benefits of your new plan."],"Install premium themes":["Install premium themes"],"Review SEO features":["Review SEO features"],"Welcome Professional":["Welcome Professional"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetisation features."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["With Jetpack Premium, you can create the perfect site, no matter its purpose. Customise your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Start exploring Jetpack Premium now to see all the benefits of your new plan."],"Monetize your site with ads":["Monetise your site with ads"],"Welcome Premium":["Welcome Premium"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customise colours, images, or add a variety of new widgets."],"Got it":["Got it"],"Welcome personal":["Welcome personal"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com."],"Jetpack Stats People":["Jetpack Stats People"],"Hello there! Your stats have been activated.":["Hello there! Your stats have been activated."],"Just give us a little time to collect data so we can display it for you here.":["Just give us a little time to collect data so we can display it for you here."],"Okay, got it!":["Okay, got it!"],"Display ads below posts on":["Display ads below posts on"],"Additional ad placements":["Additional ad placements"],"Top of each page":["Top of each page"],"Second ad below post":["Second ad below post"],"Archives":["Archives"],"Explore Professional":["Explore Professional"],"Compare All Plans":["Compare All Plans"],"Person with laptop":["Person with laptop"],"Your Jetpack site is ready to go!":["Your Jetpack site is ready to go!"],"Stars":["Stars"],"Jupiter":["Jupiter"],"Welcome to Jetpack Personal":["Welcome to Jetpack Personal"],"Welcome to Jetpack Premium":["Welcome to Jetpack Premium"],"Welcome to Jetpack Professional":["Welcome to Jetpack Professional"],"Schedule posts":["Schedule posts"],"Activate Publicize":["Activate Publicise"],"Your site is backed up.":["Your site is backed up."],"Image Performance":["Image Performance"],"Get WordPress Apps for every device":["Get WordPress Apps for every device"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world."],"I already use this app.":["I already use this app."],"Create address":["Create address"],"Priority support":["Priority support"],"Add sharing buttons to your posts":["Add sharing buttons to your posts"],"Automatically share your posts to social networks":["Automatically share your posts to social networks"],"Updating settings…":["Updating settings…"],"Updating Post by Email address…":["Updating Post by Email address…"],"Your paid plan gives you access to prioritized Jetpack support.":["Your paid plan gives you access to prioritised Jetpack support."],"You have paid for backups but they're not yet active.":["You have paid for backups but they're not yet active."],"You have paid for backups and security scanning but they’re not yet active.":["You have paid for backups and security scanning but they’re not yet active."],"Click \"Set Up\" to finish installation.":["Click \"Set Up\" to finish installation."],"Checking site status…":["Checking site status…"],"Pages":["Pages"],"We're here to help":["We're here to help"],"Jetpack comes with free, basic support for all users.":["Jetpack comes with free, basic support for all users."],"Ask a question":["Ask a question"],"Search our support site":["Search our support site"],"Get a faster resolution to your support questions.":["Get a faster resolution to your support questions."],"Host fast, high-quality, ad-free video.":["Host fast, high-quality, ad-free video."],"Generate income with high-quality ads.":["Generate income with high-quality ads."],"Real-time site backups and automatic threat resolution.":["Real-time site backups and automatic threat resolution."],"Protect against data loss, malware, and malicious attacks.":["Protect against data loss, malware, and malicious attacks."],"Integrate easily with Google Analytics.":["Integrate easily with Google Analytics."],"Help your content get found and shared with SEO tools.":["Help your content get found and shared with SEO tools."],"Protect your site from spam.":["Protect your site from spam."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["This site is not connected to WordPress.com. Please ask the site administrator to connect."],"Spam filtering":["Spam filtering"],"Daily, automated malware scanning":["Daily, automated malware scanning"],"Daily, automated backups (unlimited storage)":["Daily, automated backups (unlimited storage)"],"Daily, automated malware scanning with automated resolution":["Daily, automated malware scanning with automated resolution"],"Unlimited, high-speed video hosting":["Unlimited, high-speed video hosting"],"SEO preview tools":["SEO preview tools"],"Site stats, related content, and sharing tools":["Site stats, related content, and sharing tools"],"Brute force attack protection and downtime monitoring":["Brute force attack protection and downtime monitoring"],"Unlimited, high-speed image hosting":["Unlimited, high-speed image hosting"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:"],"Read more about Jetpack benefits":["Read more about Jetpack benefits"],"An Automattic Airline":["An Automattic Airline"],"Manage site connection":["Manage site connection"],"Connect your account to WordPress.com to view more stats":["Connect your account to WordPress.com to view more stats"],"Theme enhancements":["Theme enhancements"],"Load more posts using the default theme behavior":["Load more posts using the default theme behaviour"],"Load more posts in page with a button":["Load more posts in-page with a button"],"Load more posts as the reader scrolls down":["Load more posts as the reader scrolls down"],"Theme support required.":["Theme support required."],"Learn more about adding support for Infinite Scroll to your theme.":["Learn more about adding support for Infinite Scroll to your theme."],"Use excerpts instead of full posts on front page and archive pages":["Use excerpts instead of full posts on front page and archive pages"],"Show featured images":["Show featured images"],"Enable the WordPress.com toolbar":["Enable the WordPress.com toolbar"],"Writing tools available to you will be shown here when an administrator enables them.":["Writing tools available to you will be shown here when an administrator enables them."],"Portfolios":["Portfolios"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["Generate XML sitemaps"],"Collecting valuable traffic stats and insights":["Collecting valuable traffic stats and insights"],"The image helps collect stats, but should work when hidden.":["The image helps collect stats, but should work when hidden."],"Count logged in page views from":["Count logged in page views from"],"Allow stats reports to be viewed by":["Allow stats reports to be viewed by"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimise your site's SEO{{/a}}."],"Configure your SEO settings":["Configure your SEO settings"],"In \"Upgrade\"":["In \"Upgrade\""],"Configure your Google Analytics settings":["Configure your Google Analytics settings"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings."],"Enable ads and display an ad below each post":["Enable ads and display an ad below each post"],"Configure your sharing buttons":["Configure your sharing buttons"],"Connect your social media accounts":["Connect your social media accounts"],"Match accounts using email addresses":["Match accounts using email addresses"],"Require accounts to use WordPress.com Two-Step Authentication":["Require accounts to use WordPress.com's Two-Step Authentication"],"Add to whitelist":["Add to whitelist"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["You may whitelist an IP address or series of addresses, preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["Your site is backed up and threat-free."],"Checking your spam protection…":["Checking your spam protection…"],"Fetching key…":["Fetching key…"],"Your site needs an Antispam key.":["Your site needs an Antispam key."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["There's a problem with your Antispam API key. {{a}}Learn more{{/a}}."],"Your site is not protected from spam.":["Your site is not protected from spam."],"Your Antispam key is valid.":["Your Antispam key is valid."],"Your site is protected from spam.":["Your site is protected from spam."],"Checking key…":["Checking key…"],"Your API key":["Your API key"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one."],"No search results found for %(term)s":["No search results found for %(term)s"],"Enter a search term to find settings or close search.":["Enter a search term to find settings or close search."],"Connections":["Connections"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Your site is in Development Mode, so it cannot be connected to WordPress.com."],"Your site is connected to WordPress.com.":["Your site is connected to WordPress.com."],"You are the Jetpack owner.":["You are the Jetpack owner."],"Connected as {{span}}%(username)s{{/span}}":["Connected as {{span}}%(username)s{{/span}}"],"View your Email Followers":["View your Email Followers"],"Color scheme":["Colour scheme"],"Enable Markdown use for comments.":["Enable Markdown use for comments."],"Updated settings.":["Updated settings."],"Error updating settings. %(error)s":["Error updating settings. %(error)s"],"Regenerated Post by Email address.":["Regenerated Post by Email address."],"Error regenerating Post by Email address. %(error)s":["Error regenerating Post by Email address. %(error)s"],"Updated settings. Refreshing page…":["Updated settings. Refreshing page…"],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}The jetpack_development_mode filter is active{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Configure Google Analytics"],"Activate Google Analytics":["Activate Google Analytics"],"Download the free apps":["Download the free apps"],"Upgrade Focus: VideoPress For Weddings":["Upgrade Focus: VideoPress For Weddings"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!"],"Display an ad unit at the top of your site.":["Display an ad unit at the top of your site."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site."],"In \"Mobile\"":["In \"Mobile\""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}"],"View your earnings":["View your earnings"],"Configure site SEO":["Configure site SEO"],"Activate SEO tools":["Activate SEO tools"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!"],"Video Hosting":["Video Hosting"],"SEO Tools":["SEO Tools"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Advanced SEO tools to help your site get found when people search for relevant content."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive."],"You are running Jetpack on a staging server.":["You are running Jetpack on a staging server."],"More Info":["More Info"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}"],"Your current IP: %(ip)s":["Your current IP: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["There are unsaved settings in this tab that will be lost if you leave it. Proceed?"],"This will reset all Jetpack options, are you sure?":["This will reset all Jetpack options, are you sure?"],"Search for a Jetpack feature.":["Search for a Jetpack feature."],"Configure your Security Scans":["Configure your Security Scans"],"Subscriber":["Subscriber"],"Big iPhone/iPad Update Now Available":["Big iPhone/iPad Update Now Available"],"The WordPress for Android App Gets a Big Facelift":["The WordPress for Android App Gets a Big Facelift"],"WordPress.com Likes are:":["WordPress.com Likes are:"],"Comments headline":["Comments headline"],"A few catchy words to motivate your readers to comment.":["A few catchy words to motivate your readers to comment."],"Show a \"follow blog\" option in the comment form":["Show a \"follow blog\" option in the comment form"],"Show a \"follow comments\" option in the comment form":["Show a \"follow comments\" option in the comment form"],"Put a chart showing 48 hours of views in the admin bar":["Put a chart showing 48 hours of views in the admin bar"],"Hide the stats smiley face image":["Hide the stats smiley face image"],"Whitelisted IP addresses":["Whitelisted IP addresses"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Show an ad for the WordPress mobile apps in the footer of the mobile theme"],"Copied!":["Copied!"],"Highlight and copy the following text to your clipboard:":["Highlight and copy the following text to your clipboard:"],"Regenerate address":["Regenerate address"],"Automatically proofread content when: ":["Automatically proofread content when: "],"A post or page is first published":["A post or page is first published"],"A post or page is updated":["A post or page is updated"],"Automatic Language Detection":["Automatic Language Detection"],"The proofreader supports English, French, German, Portuguese and Spanish.":["The proofreader supports English, French, German, Portuguese, and Spanish."],"Enable proofreading for the following grammar and style rules: ":["Enable proofreading for the following grammar and style rules: "],"Add a phrase":["Add a phrase"],"Cheatin' uh?":["Cheatin' huh?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["Your Jetpack is already connected."],"You're fueled up and ready to go, Jetpack is now active.":["You're fuelled up and ready to go, Jetpack is now active."],"You're fueled up and ready to go.":["You're fuelled up and ready to go."],"You are currently running a development version of Jetpack.":["You are currently running a development version of Jetpack."],"Submit Beta feedback":["Submit Beta feedback"],"What would you like to see on your Jetpack Dashboard?":["What would you like to see on your Jetpack Dashboard?"],"Let us know!":["Let us know!"],"Saving…":["Saving…"],"Save Settings":["Save Settings"],"Jetpack Stats Icon":["Jetpack Stats Icon"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}"],"Activate Site Stats":["Activate Site Stats"],"Security Scanning":["Security Scanning"],"Site Backups":["Site Backups"],"Upgrade":["Upgrade"],"ACTIVE":["ACTIVE"],"Your site is on Development Mode":["Your site is on Development Mode"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support."],"View your spam stats":["View your spam stats"],"View your security dashboard":["View your security dashboard"],"The site is in Development Mode, so you can not connect to WordPress.com.":["The site is in Development Mode, so you can not connect to WordPress.com."],"Link your account to WordPress.com to get the most out of Jetpack.":["Link your account to WordPress.com to get the most out of Jetpack."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack is actively blocking malicious login attempts. Data will display here soon!"],"Total malicious attacks blocked on your site.":["Total malicious attacks blocked on your site."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign-in attempts."],"All plugins are up-to-date. Awesome work!":["All plugins are up-to-date. Awesome work!"],"Jetpack is improving and optimizing your image speed.":["Jetpack is improving and optimising your image speed."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack is monitoring your site. If we think your site is down, you will receive an email."],"Security":["Security"],"Performance":["Performance"],"Backups":["Backups"],"{{a}}View backup details{{/a}}.":["{{a}}View backup details{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress."],"Unavailable in Dev Mode.":["Unavailable in Dev Mode."],"Spam Protection":["Spam Protection"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["For state-of-the-art spam defence, please {{a}}install Akismet{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["For state-of-the-art spam defence, please {{a}}activate Akismet{{/a}}."],"Invalid key":["Invalid key"],"Unavailable in Dev Mode":["Unavailable in Dev Mode"],"Activating recommended features…":["Activating recommended features…"],"Recommended features active.":["Recommended features active."],"Recommended features failed to activate. %(error)s":["Recommended features failed to activate. %(error)s"],"Activating %(slug)s…":["Activating %(slug)s…"],"%(slug)s has been activated.":["%(slug)s has been activated."],"%(slug)s failed to activate. %(error)s":["%(slug)s failed to activate. %(error)s"],"Deactivating %(slug)s…":["Deactivating %(slug)s…"],"%(slug)s has been deactivated.":["%(slug)s has been deactivated."],"%(slug)s failed to deactivate. %(error)s":["%(slug)s failed to deactivate. %(error)s"],"Updating %(slug)s settings…":["Updating %(slug)s settings…"],"Updated %(slug)s settings.":["Updated %(slug)s settings."],"Error updating %(slug)s settings. %(error)s":["Error updating %(slug)s settings. %(error)s"],"Updating %(slug)s address…":["Updating %(slug)s address…"],"Regenerated %(slug)s address .":["Regenerated %(slug)s address ."],"Error regenerating %(slug)s address. %(error)s":["Error regenerating %(slug)s address. %(error)s"],"Resetting Jetpack options…":["Resetting Jetpack options…"],"Options reset.":["Options reset."],"Options failed to reset.":["Options failed to reset."],"There was an error disconnecting Jetpack. Error: %(error)s":["There was an error disconnecting Jetpack. Error: %(error)s"],"Unlinking from WordPress.com":["Unlinking from WordPress.com"],"Unlinked from WordPress.com.":["Unlinked from WordPress.com."],"Error unlinking from WordPress.com. %(error)s":["Error unlinking from WordPress.com. %(error)s"],"At A Glance":["At A Glance"],"Clichés":["Clichés"],"Dashboard":["Dashboard"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack."],"Automattic's Privacy Policy":["Automattic's Privacy Policy"],"WordPress.com Terms of Service":["WordPress.com Terms of Service"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}Activate{{/a}} to enhance the performance and speed of your images."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Turn on plugin autoupdates{{/a}}"],"Plugin Updates":["Plugin Updates"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["To automatically back up your entire site, please {{a}}upgrade your account{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}."],"No threats found, you're good to go!":["No threats found, you're good to go!"],"{{a}}Contact Support{{/a}}":["{{a}}Contact Support{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}View details at VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["Uh oh, %(number)s threat found.","Uh oh, %(number)s threats found."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down."],"Loading…":["Loading…"],"Downtime monitoring":["Downtime monitoring"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}View more stats on WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}View detailed stats{{/button}}"],"All-time comments":["All-time comments"],"All-time views":["All-time views"],"%(number)s View":["%(number)s View","%(number)s Views"],"Best overall day":["Best overall day"],"Views today":["Views today"],"Months":["Months"],"Weeks":["Weeks"],"Days":["Days"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}"],"Click to view detailed stats.":["Click to view detailed stats."],"Views: %(numberOfViews)s":["Views: %(numberOfViews)s"],"Week of %(date)s":["Week of %(date)s"],"Site Security":["Site Security"],"Activate recommended features":["Activate recommended features"],"Link to WordPress.com":["Link to WordPress.com"],"Unlink me from WordPress.com":["Unlink me from WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["You need to stay logged in to your WordPress blog while you authorise Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s"],"Disconnecting Jetpack":["Disconnecting Jetpack"],"Learn more":["Learn more"],"Posts":["Posts"],"Front page":["Front page"],"Upload videos":["Upload videos"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Show related content after posts"],"Related":["Related"],"Save":["Save"],"Email Address":["Email Address"],"Media":["Media"],"Themes":["Themes"],"Site Stats":["Site Stats"],"Sharing":["Sharing"],"Testimonials":["Testimonials"],"Cancel":["Cancel"],"Comments":["Comments"],"Ignored Phrases":["Ignored Phrases"],"Use automatically detected language to proofread posts and pages":["Use automatically detected language to proofread posts and pages"],"Redundant Phrases":["Redundant Phrases"],"Phrases to Avoid":["Phrases to Avoid"],"Passive Voice":["Passive Voice"],"Jargon":["Jargon"],"Hidden Verbs":["Hidden Verbs"],"Double Negatives":["Double Negatives"],"Diacritical Marks":["Diacritical Marks"],"Complex Phrases":["Complex Phrases"],"Bias Language":["Bias Language"],"English Options":["English Options"],"Proofreading":["Proofreading"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Your website needs to be publicly accessible to use Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["You have successfully disconnected Jetpack"],"Edit":["Edit"],"Connected":["Connected"],"Activate":["Activate"],"Active":["Active"],"Search":["Search"],"Settings":["Settings"],"Learn More":["Learn More"],"Disconnect Jetpack":["Disconnect Jetpack"],"Test your site’s compatibility with Jetpack.":["Test your site’s compatibility with Jetpack."],"Settings header\u0004Plugin Autoupdates":["Plugin Auto-updates "],"Settings header\u0004Downtime monitoring":["Downtime monitoring"],"Settings header\u0004Privacy Settings":["Privacy Settings"],"Settings header\u0004WordPress.com toolbar":["WordPress.com toolbar"],"Settings header\u0004Composing":["Composing"],"Settings header\u0004Site stats":["Site stats"],"Settings header\u0004Search engine optimization":["Search engine optimisation"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Sharing buttons"],"Settings header\u0004Publicize connections":["Publicize connections"],"Settings header\u0004Like buttons":["Like buttons"],"Settings header\u0004WordPress.com log in":["WordPress.com log in"],"Settings header\u0004Brute force attack protection":["Brute force attack protection"],"Settings header\u0004Backups and security scanning":["Backups and security scanning"],"Settings header\u0004Spam filtering":["Spam filtering"],"Navigation item.\u0004Performance":["Performance"],"Navigation item.\u0004My Plan":["My Plan"],"Navigation item.\u0004Dev Tools":["Dev Tools"],"Navigation item.\u0004Settings":["Settings"],"Navigation item.\u0004Discussion":["Discussion"],"Navigation item.\u0004Traffic":["Traffic"],"Navigation item.\u0004Sharing":["Sharing"],"Navigation item.\u0004At A Glance":["At A Glance"],"Navigation item.\u0004Plans":["Plans"],"Navigation item.\u0004Writing":["Writing"],"Navigation item.\u0004Reset Options (dev only)":["Reset Options (dev only)"],"Navigation item.\u0004Security":["Security"],"Navigation item.\u0004At a Glance":["At a Glance"],"Search term.\u0004terms of service":["terms of service"],"Search term.\u0004tos":["tos"],"Search term.\u0004gdpr":["gdpr"],"Search term.\u0004data":["data"],"Search term.\u0004tracks":["tracks"],"Search term.\u0004privacy":["privacy"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["Upgrade"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Upgrade"],"Button caption\u0004Saving…":["Saving…"],"Button caption\u0004Save settings":["Save settings"],"A heading for a block of related posts.\u0004Related":["Related"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Preview"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Stay connected"],"A caption for a button to disconnect.\u0004Disconnect":["Disconnect"],"Short warning message\u0004Updates needed":["Updates needed"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Paid"],"A header for a preview area in the configuration screen.\u0004Preview":["Preview"],"Ads header\u0004Ads":["Ads"],"Dashboard widget header\u0004Site connection":["Site connection"],"Dashboard widget header\u0004Account connection":["Account connection"],"A caption for a small button to fix security issues.\u0004Threats":["Threats"],"A caption for a small button to fix security issues.\u0004FIX":["FIX"],"Short warning message about new threats found.\u0004Threats found!":["Threats found!"],"Short warning message about site having no security scan.\u0004No scanning":["No scanning"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Upgrade"],"Short message informing user that the site is secure.\u0004Secure":["Secure"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Invalid key"],"Caption for a button to set up a feature.\u0004Set up":["Set up"],"verb\u0004Copy":["Copy"],"Shorthand for Privacy Policy.\u0004Privacy":["Privacy"],"Shorthand for Terms of Service.\u0004Terms":["Terms"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Debug"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["Spam comments blocked."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-en_NZ-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-en_NZ-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index c50d2c8e..00000000
--- a/plugins/jetpack/languages/json/jetpack-en_NZ-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"en_NZ"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":[""],"We’re now collecting stats and securing your site. Welcome aboard.":[""],"{{a}}Skip, and explore features individually{{/a}}.":[""],"Jetpack Business Plan":[""],"Jetpack Premium Plan":[""],"Jetpack Personal Plan":[""],"Get started with hassle-free design, stats, and performance tools.":[""],"Welcome to Jetpack Free":[""],"Jetpack Free Plan":[""],"Explore Jetpack plans":[""],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":[""],"Jetpack offers so much more":[""],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":[""],"Support documentation":[""],"Chat bubbles representing getting in touch with support":[""],"Site Activity":[""],"Start publicizing now":[""],"Reach a wider audience by automatically sharing your posts on social media.":[""],"Increase traffic to your site":[""],"Explore free themes":[""],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":[""],"A wide variety of themes and tools to customize a site":[""],"Set up your site security":[""],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":[""],"Site stats showing an evolution in traffic and engagement":[""],"A hand holding a loupe":[""],"A chart showing an healthy increase in earnings":[""],"Interface showing a chronological list of changes and updates in a site":[""],"A cloud with multiple types of content floating around it":[""],"A folder holding real comments":[""],"Make your site faster":[""],"Load pages faster by serving your images from our global network of servers.":[""],"A fast and performant website":[""],"A secure site, locked and protected by Jetpack":[""],"These settings won't apply to related posts added using the block editor.":["These settings won't apply to related posts added using the block editor."],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more."],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":["This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}."],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":["Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts."],"Add Like buttons to your posts and pages":["Add Like buttons to your posts and pages"],"When visitors enjoy your content, let them show it with a Like.":["When visitors enjoy your content, let them show it with a Like."],"Explore your Jetpack Professional plan!":["Explore your Jetpack Professional plan!"],"Explore your Jetpack Premium plan!":["Explore your Jetpack Premium plan!"],"Explore your Jetpack Personal plan!":["Explore your Jetpack Personal plan!"],"Create account":["Create account"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["Jetpack is powering your site, but to access all of its features you’ll need to create an account."],"Real-time, automated backups (unlimited storage)":["Real-time, automated backups (unlimited storage)"],"Compose content the way you want to and streamline your publishing experience.":["Compose content the way you want to and streamline your publishing experience."],"Add a portfolio item":["Add a portfolio item"],"Add a testimonial":["Add a testimonial"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["Maximise your site’s visibility in search engines and view traffic stats in real time."],"Create a Jetpack account to use this feature":["Create a Jetpack account to use this feature"],"Share your content on social media and increase audience engagement.":["Share your content on social media and increase audience engagement."],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["Jetpack will continuously monitor your site, and alert you the moment downtime is detected."],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure."],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["Keep your site safe with state-of-the-art security and receive notifications of technical problems."],"Error enabling Site accelerator. %(error)s":["Error enabling Site accelerator. %(error)s"],"Site accelerator is now speeding up your site!":["Site accelerator is now speeding up your site!"],"Enabling Site accelerator…":["Enabling Site accelerator…"],"Error disabling site accelerator. %(error)s":["Error disabling site accelerator. %(error)s"],"Site accelerator is no longer speeding up your site!":["Site accelerator is no longer speeding up your site!"],"Disabling site accelerator…":["Disabling site accelerator…"],"Load pages faster, optimize images, and speed up your visitors’ experience.":["Load pages faster, optimise images, and speed up your visitors’ experience."],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns."],"High-speed, high-definition video hosting with no third-party ads.":["High-speed, high-definition video hosting with no third-party ads."],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["Schedule unlimited tweets, Facebook posts, and other social posts in advance."],"Marketing Automation":["Marketing Automation"],"Activate Jetpack Search":["Activate Jetpack Search"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["Replace the default WordPress search with better results and filtering powered by Elasticsearch."],"Start earning":["Start earning"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["WordAds lets you earn money by displaying promotional content. Start earning today."],"Spam is automatically blocked from your comments.":["Spam is automatically blocked from your comments."],"Spam Filtering":["Spam Filtering"],"Browse premium themes":["Browse premium themes"],"Access hundreds of beautifully designed premium themes at no extra cost.":["Access hundreds of beautifully designed premium themes at no extra cost."],"Try a premium theme":["Try a premium theme"],"View settings":["View settings"],"Create a Jetpack account to view your email followers":["Create a Jetpack account to view your email followers"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["Open your site to comments and invite subscribers to get alerts about your latest work."],"Manage security settings":["Manage security settings"],"Built-in Performance":["Built-in Performance"],"Jetpack is ready for the new WordPress editor":["Jetpack is ready for the new WordPress editor"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown."],"Build your Jetpack site with blocks":["Build your Jetpack site with blocks"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["A new editor? Yes! {{a}}Learn more{{/a}}."],"The features you rely on, adapted for the new WordPress editor.":["The features you rely on, adapted for the new WordPress editor."],"Take me to the new editor":["Take me to the new editor"],"Testing Jetpack Connection":["Testing Jetpack Connection"],"There was an error testing Jetpack. Error: %(error)s":["There was an error testing Jetpack. Error: %(error)s"],"New in Jetpack!":["New in Jetpack!"],"Speed up static file load times":["Speed up static file load times"],"Speed up image load times":["Speed up image load times"],"Enable site accelerator":["Enable site accelerator"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["Load pages faster by allowing Jetpack to optimise your images and serve your images and static files (like CSS and JavaScript) from our global network of servers."],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials."],"View your site activity":["View your site activity"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["View a chronological list of all the changes and updates to your site in an organised, readable way."],"Manually Verify ":["Manually Verify "],"Verify with Google":["Verify with Google"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site."],"or":["or"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}."],"Your site is verified with Google":["Your site is verified with Google"],"Site failed to verify: %(error)s":["Site failed to verify: %(error)s"],"Verifying...":["Verifying..."],"Add faster, more advanced searching to your site with Jetpack Professional.":["Add faster, more advanced searching to your site with Jetpack Professional."],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["Replace WordPress built-in search with Jetpack Search, an advanced search experience"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["Jetpack Search replaces the built-in search with a fast, scalable, customisable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster."],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results."],"Jetpack Search supports many customizations.":["Jetpack Search supports many customisations."],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["Replace the built-in search with a fast, scalable, customisable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}."],"Site is verified":["Site is verified"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}"],"Spam filtering and priority support.":["Spam filtering and priority support."],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site."],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line."],"Custom ads.txt entries":["Custom ads.txt entries"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}"],"Introducing Premium Themes":["Introducing Premium Themes"]," Premium Themes":[" Premium Themes"],"Privacy information":["Privacy information"],"Enable Lazy Loading for images":["Enable Lazy Loading for images"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once."],"Performance & speed":["Performance & speed"],"Enable high-speed, ad-free video player":["Enable high-speed, ad-free video player"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customise your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!"],"Video":["Video"],"Carousel color scheme":["Carousel colour scheme"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO."],"Show photo Exif metadata in carousel (when available)":["Show photo Exif metadata in carousel (when available)"],"Display images in a full-screen carousel gallery":["Display images in a full-screen carousel gallery"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader."],"Portfolios shortcode: [portfolio]":["Portfolios shortcode: [portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site."],"Testimonials shortcode: [testimonials]":["Testimonials shortcode: [testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site."],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes."],"Configure related posts in the Customizer":["Configure related posts in the Customiser"],"Highlight related content with a heading":["Highlight related content with a heading"],"View security scan details":["View security scan details"],"View backup history":["View backup history"],"Show a thumbnail image where available":["Show a thumbnail image where available"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Centre{{/privacyCenterLink}}."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["This information helps us improve our products, make marketing to you more relevant, personalise your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["This feature is being managed by a site administrator. {{link}}Learn more{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}."],"This feature has been disabled by a site administrator.":["This feature has been disabled by a site administrator."],"%(moduleName)s has been disabled by a site administrator.":["%(moduleName)s has been disabled by a site administrator."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}"],"Configure your notification settings":["Configure your notification settings"],"Monitor your site's downtime":["Monitor your site's downtime"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["Jetpack Search is a powerful replacement for the search capability built into WordPress."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["Your site’s files are regularly scanned for unauthorised or suspicious modifications that could compromise your security and data."],"Plugin needs updating.":["Plugin needs updating.","Plugins need updating."],"%(number)s":["%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Jetpack’s Plugin Updates allows you to choose which plugins update automatically."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack will optimise your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":["Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected."],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Jetpack Backups allow you to easily restore or download a backup from a specific moment."],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet checks your comments and contact form submissions against our global database of spam."],"Privacy Information":["Privacy Information"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. "],"Add the Search (Jetpack) widget to your sidebar":["Add the Search (Jetpack) widget to your sidebar"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["Give your visitor's a great search experience by letting them filter and sort fast, relevant search results."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["Loads the next posts automatically when the reader approaches the bottom of the page."],"Allows you to publish new posts by sending an email to a special address.":["Allows you to publish new posts by sending an email to a special address."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["Allows you to compose content with links, lists, and other styles using the Markdown syntax."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["Checks your content for correct grammar and spelling, misused words, and style while you write."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["Provides the necessary hidden tags needed to verify your WordPress site with various services."],"Displays information on your site activity, including visitors and popular posts or pages.":["Displays information on your site activity, including visitors and popular posts or pages."],"Allows you to optimize your site and its content for better results in search engines.":["Allows you to optimise your site and its content for better results in search engines."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions."],"Displays high-quality ads on your site that allow you to earn income.":["Displays high-quality ads on your site that allow you to earn income."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["Adds sharing buttons to your content so that visitors can share it on social media sites."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["Allows you to automatically share your newest content on social media sites, including Facebook and Twitter."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["Adds like buttons to your content so that visitors can show their appreciation or enjoyment."],"Allows registered users to log in to your site with their WordPress.com accounts.":["Allows registered users to log in to your site with their WordPress.com accounts."],"Protects your site from traditional and distributed brute force login attacks.":["Protects your site from traditional and distributed brute force login attacks."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error."],"Removes spam from comments and contact forms.":["Removes spam from comments and contact forms."],"We are committed to your privacy and security. ":["We are committed to your privacy and security. "],"View all Jetpack plans":["View all Jetpack plans"],"Manage your plan":["Manage your plan"],"Your Plan":["Your Plan"],"You’re currently on Jetpack %(plan)s.":["You’re currently on Jetpack %(plan)s."],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["Allows readers to subscribe to your posts or comments, and receive notifications of new content by email."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["Replaces the standard WordPress comment form with a new comment system that includes social media login options."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience."],"Add Search (Jetpack) Widget":["Add Search (Jetpack) Widget"],"Jetpack Search is powering search on your site.":["Jetpack Search is powering search on your site."],"Manage your plugins":["Manage your plugins"],"Moderate comments":["Moderate comments"],"Error updating privacy settings. %(error)s":["Error updating privacy settings. %(error)s"],"Updated privacy settings.":["Updated privacy settings."],"Updating privacy settings…":["Updating privacy settings…"],"Add Jetpack Search Widget":["Add Jetpack Search Widget"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["Add the Jetpack Search widget to your sidebar to configure sorting and filters."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support."],"Daily backups, spam filtering, and priority support.":["Daily backups, spam filtering, and priority support."],"Always-on Security":["Always-on Security"],"Activate video hosting":["Activate video hosting"],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support"],"Design the perfect website":["Design the perfect website"],"Set up Jetpack":["Set up Jetpack"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning."],"Jetpack Search":["Jetpack Search"],"Jetpack version %(version)s":["Jetpack version %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["Your site is being backed up in real time and regularly scanned for security threats."],"Daily backup of all your site data with unlimited space and one-click restores":["Daily backup of all your site data with unlimited space and one-click restores"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support"],"View your security activity":["View your security activity"]," (powered by VaultPress).":[" (powered by VaultPress)."],"Customize Search Widget":["Customise Search Widget"],"Please correct the issue below and try again.":["Please correct the issue below and try again.","Please correct the issues listed below and try again."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["We are making sure your site stays free of security threats. You will be notified if we find one."],"Your site is being backed up in real-time.":["Your site is being backed up in real-time."],"Jetpack version":["Jetpack version"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}View your site's activity{{/a}} in a single feed."],"Activity":["Activity"],"Confirm each new phrase you add by pressing enter.":["Confirm each new phrase you add by pressing enter."],"{{a}}View details{{/a}}":["{{a}}View details{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customise your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetise your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics."],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Start exploring Jetpack Professional now to see all the benefits of your new plan."],"Install premium themes":["Install premium themes"],"Review SEO features":["Review SEO features"],"Welcome Professional":["Welcome Professional"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetisation features."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["With Jetpack Premium, you can create the perfect site, no matter its purpose. Customise your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Start exploring Jetpack Premium now to see all the benefits of your new plan."],"Monetize your site with ads":["Monetise your site with ads"],"Welcome Premium":["Welcome Premium"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customise colours, images, or add a variety of new widgets."],"Got it":["Got it"],"Welcome personal":["Welcome personal"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com."],"Jetpack Stats People":["Jetpack Stats People"],"Hello there! Your stats have been activated.":["Hello there! Your stats have been activated."],"Just give us a little time to collect data so we can display it for you here.":["Just give us a little time to collect data so we can display it for you here."],"Okay, got it!":["Okay, got it!"],"Display ads below posts on":["Display ads below posts on"],"Additional ad placements":["Additional ad placements"],"Top of each page":["Top of each page"],"Second ad below post":["Second ad below post"],"Archives":["Archives"],"Explore Professional":["Explore Professional"],"Compare All Plans":["Compare All Plans"],"Person with laptop":["Person with laptop"],"Your Jetpack site is ready to go!":["Your Jetpack site is ready to go!"],"Stars":["Stars"],"Jupiter":["Jupiter"],"Welcome to Jetpack Personal":["Welcome to Jetpack Personal"],"Welcome to Jetpack Premium":["Welcome to Jetpack Premium"],"Welcome to Jetpack Professional":["Welcome to Jetpack Professional"],"Schedule posts":["Schedule posts"],"Activate Publicize":["Activate Publicise"],"Your site is backed up.":["Your site is backed up."],"Image Performance":["Image Performance"],"Get WordPress Apps for every device":["Get WordPress Apps for every device"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world."],"I already use this app.":["I already use this app."],"Create address":["Create address"],"Priority support":["Priority support"],"Add sharing buttons to your posts":["Add sharing buttons to your posts"],"Automatically share your posts to social networks":["Automatically share your posts to social networks"],"Updating settings…":["Updating settings…"],"Updating Post by Email address…":["Updating Post by Email address…"],"Your paid plan gives you access to prioritized Jetpack support.":["Your paid plan gives you access to prioritised Jetpack support."],"You have paid for backups but they're not yet active.":["You have paid for backups but they're not yet active."],"You have paid for backups and security scanning but they’re not yet active.":["You have paid for backups and security scanning but they’re not yet active."],"Click \"Set Up\" to finish installation.":["Click \"Set Up\" to finish installation."],"Checking site status…":["Checking site status…"],"Pages":["Pages"],"We're here to help":["We're here to help"],"Jetpack comes with free, basic support for all users.":["Jetpack comes with free, basic support for all users."],"Ask a question":["Ask a question"],"Search our support site":["Search our support site"],"Get a faster resolution to your support questions.":["Get a faster resolution to your support questions."],"Host fast, high-quality, ad-free video.":["Host fast, high-quality, ad-free video."],"Generate income with high-quality ads.":["Generate income with high-quality ads."],"Real-time site backups and automatic threat resolution.":["Real-time site backups and automatic threat resolution."],"Protect against data loss, malware, and malicious attacks.":["Protect against data loss, malware, and malicious attacks."],"Integrate easily with Google Analytics.":["Integrate easily with Google Analytics."],"Help your content get found and shared with SEO tools.":["Help your content get found and shared with SEO tools."],"Protect your site from spam.":["Protect your site from spam."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["This site is not connected to WordPress.com. Please ask the site administrator to connect."],"Spam filtering":["Spam filtering"],"Daily, automated malware scanning":["Daily, automated malware scanning"],"Daily, automated backups (unlimited storage)":["Daily, automated backups (unlimited storage)"],"Daily, automated malware scanning with automated resolution":["Daily, automated malware scanning with automated resolution"],"Unlimited, high-speed video hosting":["Unlimited, high-speed video hosting"],"SEO preview tools":["SEO preview tools"],"Site stats, related content, and sharing tools":["Site stats, related content, and sharing tools"],"Brute force attack protection and downtime monitoring":["Brute force attack protection and downtime monitoring"],"Unlimited, high-speed image hosting":["Unlimited, high-speed image hosting"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:"],"Read more about Jetpack benefits":["Read more about Jetpack benefits"],"An Automattic Airline":["An Automattic Airline"],"Manage site connection":["Manage site connection"],"Connect your account to WordPress.com to view more stats":["Connect your account to WordPress.com to view more stats"],"Theme enhancements":["Theme enhancements"],"Load more posts using the default theme behavior":["Load more posts using the default theme behaviour"],"Load more posts in page with a button":["Load more posts in page with a button"],"Load more posts as the reader scrolls down":["Load more posts as the reader scrolls down"],"Theme support required.":["Theme support required."],"Learn more about adding support for Infinite Scroll to your theme.":["Learn more about adding support for Infinite Scroll to your theme."],"Use excerpts instead of full posts on front page and archive pages":["Use excerpts instead of full posts on front page and archive pages"],"Show featured images":["Show featured images"],"Enable the WordPress.com toolbar":["Enable the WordPress.com toolbar"],"Writing tools available to you will be shown here when an administrator enables them.":["Writing tools available to you will be shown here when an administrator enables them."],"Portfolios":["Portfolios"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Centre{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["Generate XML sitemaps"],"Collecting valuable traffic stats and insights":["Collecting valuable traffic stats and insights"],"The image helps collect stats, but should work when hidden.":["The image helps collect stats, but should work when hidden."],"Count logged in page views from":["Count logged in page views from"],"Allow stats reports to be viewed by":["Allow stats reports to be viewed by"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimise your site's SEO{{/a}}."],"Configure your SEO settings":["Configure your SEO settings"],"In \"Upgrade\"":["In \"Upgrade\""],"Configure your Google Analytics settings":["Configure your Google Analytics settings"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings."],"Enable ads and display an ad below each post":["Enable ads and display an ad below each post"],"Configure your sharing buttons":["Configure your sharing buttons"],"Connect your social media accounts":["Connect your social media accounts"],"Match accounts using email addresses":["Match accounts using email addresses"],"Require accounts to use WordPress.com Two-Step Authentication":["Require accounts to use WordPress.com Two-Step Authentication"],"Add to whitelist":["Add to whitelist"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["Your site is backed up and threat-free."],"Checking your spam protection…":["Checking your spam protection…"],"Fetching key…":["Fetching key…"],"Your site needs an Antispam key.":["Your site needs an Antispam key."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["There's a problem with your Antispam API key. {{a}}Learn more{{/a}}."],"Your site is not protected from spam.":["Your site is not protected from spam."],"Your Antispam key is valid.":["Your Antispam key is valid."],"Your site is protected from spam.":["Your site is protected from spam."],"Checking key…":["Checking key…"],"Your API key":["Your API key"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one."],"No search results found for %(term)s":["No search results found for %(term)s"],"Enter a search term to find settings or close search.":["Enter a search term to find settings or close search."],"Connections":["Connections"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Your site is in Development Mode, so it can not be connected to WordPress.com."],"Your site is connected to WordPress.com.":["Your site is connected to WordPress.com."],"You are the Jetpack owner.":["You are the Jetpack owner."],"Connected as {{span}}%(username)s{{/span}}":["Connected as {{span}}%(username)s{{/span}}"],"View your Email Followers":["View your Email Followers"],"Color scheme":["Colour scheme"],"Enable Markdown use for comments.":["Enable Markdown use for comments."],"Updated settings.":["Updated settings."],"Error updating settings. %(error)s":["Error updating settings. %(error)s"],"Regenerated Post by Email address.":["Regenerated Post by Email address."],"Error regenerating Post by Email address. %(error)s":["Error regenerating Post by Email address. %(error)s"],"Updated settings. Refreshing page…":["Updated settings. Refreshing page…"],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}The jetpack_development_mode filter is active{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Configure Google Analytics"],"Activate Google Analytics":["Activate Google Analytics"],"Download the free apps":["Download the free apps"],"Upgrade Focus: VideoPress For Weddings":["Upgrade Focus: VideoPress For Weddings"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}You can now also configure related posts in the Customiser. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!"],"Display an ad unit at the top of your site.":["Display an ad unit at the top of your site."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site."],"In \"Mobile\"":["In \"Mobile\""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}"],"View your earnings":["View your earnings"],"Configure site SEO":["Configure site SEO"],"Activate SEO tools":["Activate SEO tools"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!"],"Video Hosting":["Video Hosting"],"SEO Tools":["SEO Tools"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Advanced SEO tools to help your site get found when people search for relevant content."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive."],"You are running Jetpack on a staging server.":["You are running Jetpack on a staging server."],"More Info":["More Info"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}"],"Your current IP: %(ip)s":["Your current IP: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["There are unsaved settings in this tab that will be lost if you leave it. Proceed?"],"This will reset all Jetpack options, are you sure?":["This will reset all Jetpack options, are you sure?"],"Search for a Jetpack feature.":["Search for a Jetpack feature."],"Configure your Security Scans":["Configure your Security Scans"],"Subscriber":["Subscriber"],"Big iPhone/iPad Update Now Available":["Big iPhone/iPad Update Now Available"],"The WordPress for Android App Gets a Big Facelift":["The WordPress for Android App Gets a Big Facelift"],"WordPress.com Likes are:":["WordPress.com Likes are:"],"Comments headline":["Comments headline"],"A few catchy words to motivate your readers to comment.":["A few catchy words to motivate your readers to comment."],"Show a \"follow blog\" option in the comment form":["Show a \"follow blog\" option in the comment form"],"Show a \"follow comments\" option in the comment form":["Show a \"follow comments\" option in the comment form"],"Put a chart showing 48 hours of views in the admin bar":["Put a chart showing 48 hours of views in the admin bar"],"Hide the stats smiley face image":["Hide the stats smiley face image"],"Whitelisted IP addresses":["Whitelisted IP addresses"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Show an ad for the WordPress mobile apps in the footer of the mobile theme"],"Copied!":["Copied!"],"Highlight and copy the following text to your clipboard:":["Highlight and copy the following text to your clipboard:"],"Regenerate address":["Regenerate address"],"Automatically proofread content when: ":["Automatically proofread content when: "],"A post or page is first published":["A post or page is first published"],"A post or page is updated":["A post or page is updated"],"Automatic Language Detection":["Automatic Language Detection"],"The proofreader supports English, French, German, Portuguese and Spanish.":["The proofreader supports English, French, German, Portuguese and Spanish."],"Enable proofreading for the following grammar and style rules: ":["Enable proofreading for the following grammar and style rules: "],"Add a phrase":["Add a phrase"],"Cheatin' uh?":["Cheatin' uh?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["Your Jetpack is already connected."],"You're fueled up and ready to go, Jetpack is now active.":["You're fueled up and ready to go, Jetpack is now active."],"You're fueled up and ready to go.":["You're fueled up and ready to go."],"You are currently running a development version of Jetpack.":["You are currently running a development version of Jetpack."],"Submit Beta feedback":["Submit Beta feedback"],"What would you like to see on your Jetpack Dashboard?":["What would you like to see on your Jetpack Dashboard?"],"Let us know!":["Let us know!"],"Saving…":["Saving…"],"Save Settings":["Save Settings"],"Jetpack Stats Icon":["Jetpack Stats Icon"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}"],"Activate Site Stats":["Activate Site Stats"],"Security Scanning":["Security Scanning"],"Site Backups":["Site Backups"],"Upgrade":["Upgrade"],"ACTIVE":["ACTIVE"],"Your site is on Development Mode":["Your site is on Development Mode"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support."],"View your spam stats":["View your spam stats"],"View your security dashboard":["View your security dashboard"],"The site is in Development Mode, so you can not connect to WordPress.com.":["The site is in Development Mode, so you can not connect to WordPress.com."],"Link your account to WordPress.com to get the most out of Jetpack.":["Link your account to WordPress.com to get the most out of Jetpack."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack is actively blocking malicious login attempts. Data will display here soon!"],"Total malicious attacks blocked on your site.":["Total malicious attacks blocked on your site."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts."],"All plugins are up-to-date. Awesome work!":["All plugins are up-to-date. Awesome work!"],"Jetpack is improving and optimizing your image speed.":["Jetpack is improving and optimising your image speed."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack is monitoring your site. If we think your site is down, you will receive an email."],"Security":["Security"],"Performance":["Performance"],"Backups":["Backups"],"{{a}}View backup details{{/a}}.":["{{a}}View backup details{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress."],"Unavailable in Dev Mode.":["Unavailable in Dev Mode."],"Spam Protection":["Spam Protection"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["For state-of-the-art spam defence, please {{a}}install Akismet{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["For state-of-the-art spam defence, please {{a}}activate Akismet{{/a}}."],"Invalid key":["Invalid key"],"Unavailable in Dev Mode":["Unavailable in Dev Mode"],"Activating recommended features…":["Activating recommended features…"],"Recommended features active.":["Recommended features active."],"Recommended features failed to activate. %(error)s":["Recommended features failed to activate. %(error)s"],"Activating %(slug)s…":["Activating %(slug)s…"],"%(slug)s has been activated.":["%(slug)s has been activated."],"%(slug)s failed to activate. %(error)s":["%(slug)s failed to activate. %(error)s"],"Deactivating %(slug)s…":["Deactivating %(slug)s…"],"%(slug)s has been deactivated.":["%(slug)s has been deactivated."],"%(slug)s failed to deactivate. %(error)s":["%(slug)s failed to deactivate. %(error)s"],"Updating %(slug)s settings…":["Updating %(slug)s settings…"],"Updated %(slug)s settings.":["Updated %(slug)s settings."],"Error updating %(slug)s settings. %(error)s":["Error updating %(slug)s settings. %(error)s"],"Updating %(slug)s address…":["Updating %(slug)s address…"],"Regenerated %(slug)s address .":["Regenerated %(slug)s address ."],"Error regenerating %(slug)s address. %(error)s":["Error regenerating %(slug)s address. %(error)s"],"Resetting Jetpack options…":["Resetting Jetpack options…"],"Options reset.":["Options reset."],"Options failed to reset.":["Options failed to reset."],"There was an error disconnecting Jetpack. Error: %(error)s":["There was an error disconnecting Jetpack. Error: %(error)s"],"Unlinking from WordPress.com":["Unlinking from WordPress.com"],"Unlinked from WordPress.com.":["Unlinked from WordPress.com."],"Error unlinking from WordPress.com. %(error)s":["Error unlinking from WordPress.com. %(error)s"],"At A Glance":["At A Glance"],"Clichés":["Clichés"],"Dashboard":["Dashboard"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack."],"Automattic's Privacy Policy":["Automattic's Privacy Policy"],"WordPress.com Terms of Service":["WordPress.com Terms of Service"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}Activate{{/a}} to enhance the performance and speed of your images."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Turn on plugin autoupdates{{/a}}"],"Plugin Updates":["Plugin Updates"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["To automatically back up your entire site, please {{a}}upgrade your account{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}."],"No threats found, you're good to go!":["No threats found, you're good to go!"],"{{a}}Contact Support{{/a}}":["{{a}}Contact Support{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}View details at VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["Uh oh, %(number)s threat found.","Uh oh, %(number)s threats found."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down."],"Loading…":["Loading…"],"Downtime monitoring":["Downtime monitoring"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}View more stats on WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}View detailed stats{{/button}}"],"All-time comments":["All-time comments"],"All-time views":["All-time views"],"%(number)s View":["%(number)s View","%(number)s Views"],"Best overall day":["Best overall day"],"Views today":["Views today"],"Months":["Months"],"Weeks":["Weeks"],"Days":["Days"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}"],"Click to view detailed stats.":["Click to view detailed stats."],"Views: %(numberOfViews)s":["Views: %(numberOfViews)s"],"Week of %(date)s":["Week of %(date)s"],"Site Security":["Site Security"],"Activate recommended features":["Activate recommended features"],"Link to WordPress.com":["Link to WordPress.com"],"Unlink me from WordPress.com":["Unlink me from WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["You need to stay logged in to your WordPress blog while you authorise Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s"],"Disconnecting Jetpack":["Disconnecting Jetpack"],"Learn more":["Learn more"],"Posts":["Posts"],"Front page":["Front page"],"Upload videos":["Upload videos"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Show related content after posts"],"Related":["Related"],"Save":["Save"],"Email Address":["Email Address"],"Media":["Media"],"Themes":["Themes"],"Site Stats":["Site Stats"],"Sharing":["Sharing"],"Testimonials":["Testimonials"],"Cancel":["Cancel"],"Comments":["Comments"],"Ignored Phrases":["Ignored Phrases"],"Use automatically detected language to proofread posts and pages":["Use automatically detected language to proofread posts and pages"],"Redundant Phrases":["Redundant Phrases"],"Phrases to Avoid":["Phrases to Avoid"],"Passive Voice":["Passive Voice"],"Jargon":["Jargon"],"Hidden Verbs":["Hidden Verbs"],"Double Negatives":["Double Negatives"],"Diacritical Marks":["Diacritical Marks"],"Complex Phrases":["Complex Phrases"],"Bias Language":["Bias Language"],"English Options":["English Options"],"Proofreading":["Proofreading"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Your website needs to be publicly accessible to use Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["You have successfully disconnected Jetpack"],"Edit":["Edit"],"Connected":["Connected"],"Activate":["Activate"],"Active":["Active"],"Search":["Search"],"Settings":["Settings"],"Learn More":["Learn More"],"Disconnect Jetpack":["Disconnect Jetpack"],"Test your site’s compatibility with Jetpack.":["Test your site’s compatibility with Jetpack."],"Settings header\u0004Plugin Autoupdates":["Plugin Autoupdates"],"Settings header\u0004Downtime monitoring":["Downtime monitoring"],"Settings header\u0004Privacy Settings":["Privacy Settings"],"Settings header\u0004WordPress.com toolbar":["WordPress.com toolbar"],"Settings header\u0004Composing":["Composing"],"Settings header\u0004Site stats":["Site stats"],"Settings header\u0004Search engine optimization":["Search engine optimisation"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Sharing buttons"],"Settings header\u0004Publicize connections":["Publicise connections"],"Settings header\u0004Like buttons":["Like buttons"],"Settings header\u0004WordPress.com log in":["WordPress.com log in"],"Settings header\u0004Brute force attack protection":["Brute force attack protection"],"Settings header\u0004Backups and security scanning":["Backups and security scanning"],"Settings header\u0004Spam filtering":["Spam filtering"],"Navigation item.\u0004Performance":["Performance"],"Navigation item.\u0004My Plan":["My Plan"],"Navigation item.\u0004Dev Tools":["Dev Tools"],"Navigation item.\u0004Settings":["Settings"],"Navigation item.\u0004Discussion":["Discussion"],"Navigation item.\u0004Traffic":["Traffic"],"Navigation item.\u0004Sharing":["Sharing"],"Navigation item.\u0004At A Glance":["At A Glance"],"Navigation item.\u0004Plans":["Plans"],"Navigation item.\u0004Writing":["Writing"],"Navigation item.\u0004Reset Options (dev only)":["Reset Options (dev only)"],"Navigation item.\u0004Security":["Security"],"Navigation item.\u0004At a Glance":["At a Glance"],"Search term.\u0004terms of service":["terms of service"],"Search term.\u0004tos":["tos"],"Search term.\u0004gdpr":["gdpr"],"Search term.\u0004data":["data"],"Search term.\u0004tracks":["tracks"],"Search term.\u0004privacy":["privacy"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["Upgrade"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Upgrade"],"Button caption\u0004Saving…":["Saving…"],"Button caption\u0004Save settings":["Save settings"],"A heading for a block of related posts.\u0004Related":["Related"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Preview"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Stay connected"],"A caption for a button to disconnect.\u0004Disconnect":["Disconnect"],"Short warning message\u0004Updates needed":["Updates needed"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Paid"],"A header for a preview area in the configuration screen.\u0004Preview":["Preview"],"Ads header\u0004Ads":["Ads"],"Dashboard widget header\u0004Site connection":["Site connection"],"Dashboard widget header\u0004Account connection":["Account connection"],"A caption for a small button to fix security issues.\u0004Threats":["Threats"],"A caption for a small button to fix security issues.\u0004FIX":["FIX"],"Short warning message about new threats found.\u0004Threats found!":["Threats found!"],"Short warning message about site having no security scan.\u0004No scanning":["No scanning"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Upgrade"],"Short message informing user that the site is secure.\u0004Secure":["Secure"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Invalid key"],"Caption for a button to set up a feature.\u0004Set up":["Set up"],"verb\u0004Copy":["Copy"],"Shorthand for Privacy Policy.\u0004Privacy":["Privacy"],"Shorthand for Terms of Service.\u0004Terms":["Terms"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Debug"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["Spam comments blocked."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-en_ZA-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-en_ZA-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index b0900120..00000000
--- a/plugins/jetpack/languages/json/jetpack-en_ZA-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"en_ZA"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":[""],"We’re now collecting stats and securing your site. Welcome aboard.":[""],"{{a}}Skip, and explore features individually{{/a}}.":[""],"Jetpack Business Plan":[""],"Jetpack Premium Plan":[""],"Jetpack Personal Plan":[""],"Get started with hassle-free design, stats, and performance tools.":[""],"Welcome to Jetpack Free":[""],"Jetpack Free Plan":[""],"Explore Jetpack plans":[""],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":[""],"Jetpack offers so much more":[""],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":[""],"Support documentation":[""],"Chat bubbles representing getting in touch with support":[""],"Site Activity":[""],"Start publicizing now":[""],"Reach a wider audience by automatically sharing your posts on social media.":[""],"Increase traffic to your site":[""],"Explore free themes":[""],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":[""],"A wide variety of themes and tools to customize a site":[""],"Set up your site security":[""],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":[""],"Site stats showing an evolution in traffic and engagement":[""],"A hand holding a loupe":[""],"A chart showing an healthy increase in earnings":[""],"Interface showing a chronological list of changes and updates in a site":[""],"A cloud with multiple types of content floating around it":[""],"A folder holding real comments":[""],"Make your site faster":[""],"Load pages faster by serving your images from our global network of servers.":[""],"A fast and performant website":[""],"A secure site, locked and protected by Jetpack":[""],"These settings won't apply to related posts added using the block editor.":["These settings won't apply to related posts added using the block editor."],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more."],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":["This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}."],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":["Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts."],"Add Like buttons to your posts and pages":["Add Like buttons to your posts and pages"],"When visitors enjoy your content, let them show it with a Like.":["When visitors enjoy your content, let them show it with a Like."],"Explore your Jetpack Professional plan!":["Explore your Jetpack Professional plan!"],"Explore your Jetpack Premium plan!":["Explore your Jetpack Premium plan!"],"Explore your Jetpack Personal plan!":["Explore your Jetpack Personal plan!"],"Create account":["Create account"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["Jetpack is powering your site, but to access all of its features you’ll need to create an account."],"Real-time, automated backups (unlimited storage)":["Real-time, automated backups (unlimited storage)"],"Compose content the way you want to and streamline your publishing experience.":["Compose content the way you want to and streamline your publishing experience."],"Add a portfolio item":["Add a portfolio item"],"Add a testimonial":["Add a testimonial"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":[""],"Create a Jetpack account to use this feature":["Create a Jetpack account to use this feature"],"Share your content on social media and increase audience engagement.":["Share your content on social media and increase audience engagement."],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["Jetpack will continuously monitor your site, and alert you the moment downtime is detected."],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure."],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["Keep your site safe with state-of-the-art security and receive notifications of technical problems."],"Error enabling Site accelerator. %(error)s":["Error enabling Site accelerator. %(error)s"],"Site accelerator is now speeding up your site!":["Site accelerator is now speeding up your site!"],"Enabling Site accelerator…":["Enabling Site accelerator…"],"Error disabling site accelerator. %(error)s":["Error disabling site accelerator. %(error)s"],"Site accelerator is no longer speeding up your site!":["Site accelerator is no longer speeding up your site!"],"Disabling site accelerator…":["Disabling site accelerator…"],"Load pages faster, optimize images, and speed up your visitors’ experience.":[""],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns."],"High-speed, high-definition video hosting with no third-party ads.":["High-speed, high-definition video hosting with no third-party ads."],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["Schedule unlimited tweets, Facebook posts, and other social posts in advance."],"Marketing Automation":["Marketing Automation"],"Activate Jetpack Search":["Activate Jetpack Search"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["Replace the default WordPress search with better results and filtering powered by Elasticsearch."],"Start earning":["Start earning"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["WordAds lets you earn money by displaying promotional content. Start earning today."],"Spam is automatically blocked from your comments.":["Spam is automatically blocked from your comments."],"Spam Filtering":["Spam Filtering"],"Browse premium themes":["Browse premium themes"],"Access hundreds of beautifully designed premium themes at no extra cost.":["Access hundreds of beautifully designed premium themes at no extra cost."],"Try a premium theme":["Try a premium theme"],"View settings":["View settings"],"Create a Jetpack account to view your email followers":["Create a Jetpack account to view your email followers"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["Open your site to comments and invite subscribers to get alerts about your latest work."],"Manage security settings":["Manage security settings"],"Built-in Performance":["Built-in Performance"],"Jetpack is ready for the new WordPress editor":["Jetpack is ready for the new WordPress editor"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown."],"Build your Jetpack site with blocks":["Build your Jetpack site with blocks"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["A new editor? Yes! {{a}}Learn more{{/a}}."],"The features you rely on, adapted for the new WordPress editor.":["The features you rely on, adapted for the new WordPress editor."],"Take me to the new editor":["Take me to the new editor"],"Testing Jetpack Connection":["Testing Jetpack Connection"],"There was an error testing Jetpack. Error: %(error)s":["There was an error testing Jetpack. Error: %(error)s"],"New in Jetpack!":["New in Jetpack!"],"Speed up static file load times":["Speed up static file load times"],"Speed up image load times":["Speed up image load times"],"Enable site accelerator":["Enable site accelerator"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":[""],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials."],"View your site activity":["View your site activity"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":[""],"Manually Verify ":["Manually Verify "],"Verify with Google":["Verify with Google"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site."],"or":["or"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}."],"Your site is verified with Google":["Your site is verified with Google"],"Site failed to verify: %(error)s":["Site failed to verify: %(error)s"],"Verifying...":["Verifying..."],"Add faster, more advanced searching to your site with Jetpack Professional.":["Add faster, more advanced searching to your site with Jetpack Professional."],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["Replace WordPress built-in search with Jetpack Search, an advanced search experience"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["Jetpack Search replaces the built-in search with a fast, scalable, customisable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster."],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results."],"Jetpack Search supports many customizations.":["Jetpack Search supports many customisations."],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["Replace the built-in search with a fast, scalable, customisable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}."],"Site is verified":["Site is verified"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}"],"Spam filtering and priority support.":["Spam filtering and priority support."],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site."],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line."],"Custom ads.txt entries":["Custom ads.txt entries"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}"],"Introducing Premium Themes":["Introducing Premium Themes"]," Premium Themes":[" Premium Themes"],"Privacy information":["Privacy information"],"Enable Lazy Loading for images":["Enable Lazy Loading for images"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once."],"Performance & speed":["Performance & speed"],"Enable high-speed, ad-free video player":["Enable high-speed, ad-free video player"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customise your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!"],"Video":["Video"],"Carousel color scheme":["Carousel colour scheme"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO."],"Show photo Exif metadata in carousel (when available)":["Show photo Exif metadata in carousel (when available)"],"Display images in a full-screen carousel gallery":["Display images in a full-screen carousel gallery"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader."],"Portfolios shortcode: [portfolio]":["Portfolios shortcode: [portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site."],"Testimonials shortcode: [testimonials]":["Testimonials shortcode: [testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site."],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes."],"Configure related posts in the Customizer":["Configure related posts in the Customiser"],"Highlight related content with a heading":["Highlight related content with a heading"],"View security scan details":["View security scan details"],"View backup history":["View backup history"],"Show a thumbnail image where available":["Show a thumbnail image where available"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["This information helps us improve our products, make marketing to you more relevant, personalise your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["This feature is being managed by a site administrator. {{link}}Learn more{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}."],"This feature has been disabled by a site administrator.":["This feature has been disabled by a site administrator."],"%(moduleName)s has been disabled by a site administrator.":["%(moduleName)s has been disabled by a site administrator."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}"],"Configure your notification settings":["Configure your notification settings"],"Monitor your site's downtime":["Monitor your site's downtime"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["Jetpack Search is a powerful replacement for the search capability built into WordPress."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["Your site’s files are regularly scanned for unauthorised or suspicious modifications that could compromise your security and data."],"Plugin needs updating.":["Plugin needs updating.","Plugins need updating."],"%(number)s":["%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Jetpack’s Plugin Updates allows you to choose which plugins update automatically."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack will optimise your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":["Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected."],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Jetpack Backups allow you to easily restore or download a backup from a specific moment."],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet checks your comments and contact form submissions against our global database of spam."],"Privacy Information":["Privacy Information"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. "],"Add the Search (Jetpack) widget to your sidebar":["Add the Search (Jetpack) widget to your sidebar"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["Give your visitor's a great search experience by letting them filter and sort fast, relevant search results."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["Loads the next posts automatically when the reader approaches the bottom of the page."],"Allows you to publish new posts by sending an email to a special address.":["Allows you to publish new posts by sending an email to a special address."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["Allows you to compose content with links, lists, and other styles using the Markdown syntax."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["Checks your content for correct grammar and spelling, misused words, and style while you write."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["Provides the necessary hidden tags needed to verify your WordPress site with various services."],"Displays information on your site activity, including visitors and popular posts or pages.":["Displays information on your site activity, including visitors and popular posts or pages."],"Allows you to optimize your site and its content for better results in search engines.":["Allows you to optimise your site and its content for better results in search engines."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions."],"Displays high-quality ads on your site that allow you to earn income.":["Displays high-quality ads on your site that allow you to earn income."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["Adds sharing buttons to your content so that visitors can share it on social media sites."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["Allows you to automatically share your newest content on social media sites, including Facebook and Twitter."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["Adds like buttons to your content so that visitors can show their appreciation or enjoyment."],"Allows registered users to log in to your site with their WordPress.com accounts.":["Allows registered users to log in to your site with their WordPress.com accounts."],"Protects your site from traditional and distributed brute force login attacks.":["Protects your site from traditional and distributed brute force login attacks."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error."],"Removes spam from comments and contact forms.":["Removes spam from comments and contact forms."],"We are committed to your privacy and security. ":["We are committed to your privacy and security. "],"View all Jetpack plans":["View all Jetpack plans"],"Manage your plan":["Manage your plan"],"Your Plan":["Your Plan"],"You’re currently on Jetpack %(plan)s.":["You’re currently on Jetpack %(plan)s."],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["Allows readers to subscribe to your posts or comments, and receive notifications of new content by email."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["Replaces the standard WordPress comment form with a new comment system that includes social media login options."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience."],"Add Search (Jetpack) Widget":["Add Search (Jetpack) Widget"],"Jetpack Search is powering search on your site.":["Jetpack Search is powering search on your site."],"Manage your plugins":["Manage your plugins"],"Moderate comments":["Moderate comments"],"Error updating privacy settings. %(error)s":["Error updating privacy settings. %(error)s"],"Updated privacy settings.":["Updated privacy settings."],"Updating privacy settings…":["Updating privacy settings…"],"Add Jetpack Search Widget":["Add Jetpack Search Widget"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["Add the Jetpack Search widget to your sidebar to configure sorting and filters."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support."],"Daily backups, spam filtering, and priority support.":["Daily backups, spam filtering, and priority support."],"Always-on Security":["Always-on Security"],"Activate video hosting":["Activate video hosting"],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support"],"Design the perfect website":["Design the perfect website"],"Set up Jetpack":["Set up Jetpack"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning."],"Jetpack Search":["Jetpack Search"],"Jetpack version %(version)s":["Jetpack version %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["Your site is being backed up in real time and regularly scanned for security threats."],"Daily backup of all your site data with unlimited space and one-click restores":["Daily backup of all your site data with unlimited space and one-click restores"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support"],"View your security activity":["View your security activity"]," (powered by VaultPress).":[" (powered by VaultPress)."],"Customize Search Widget":["Customise Search Widget"],"Please correct the issue below and try again.":["Please correct the issue below and try again.","Please correct the issues listed below and try again."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["We are making sure your site stays free of security threats. You will be notified if we find one."],"Your site is being backed up in real-time.":["Your site is being backed up in real-time."],"Jetpack version":["Jetpack version"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}View your site's activity{{/a}} in a single feed."],"Activity":["Activity"],"Confirm each new phrase you add by pressing enter.":["Confirm each new phrase you add by pressing enter."],"{{a}}View details{{/a}}":["{{a}}View details{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customise your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics."],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Start exploring Jetpack Professional now to see all the benefits of your new plan."],"Install premium themes":["Install premium themes"],"Review SEO features":["Review SEO features"],"Welcome Professional":["Welcome Professional"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetisation features."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["With Jetpack Premium, you can create the perfect site, no matter its purpose. Customise your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Start exploring Jetpack Premium now to see all the benefits of your new plan."],"Monetize your site with ads":["Monetise your site with ads"],"Welcome Premium":["Welcome Premium"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customise colours, images, or add a variety of new widgets."],"Got it":["Got it"],"Welcome personal":["Welcome personal"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com."],"Jetpack Stats People":["Jetpack Stats People"],"Hello there! Your stats have been activated.":["Hello there! Your stats have been activated."],"Just give us a little time to collect data so we can display it for you here.":["Just give us a little time to collect data so we can display it for you here."],"Okay, got it!":["Okay, got it!"],"Display ads below posts on":["Display ads below posts on"],"Additional ad placements":["Additional ad placements"],"Top of each page":["Top of each page"],"Second ad below post":["Second ad below post"],"Archives":["Archives"],"Explore Professional":["Explore Professional"],"Compare All Plans":["Compare All Plans"],"Person with laptop":["Person with laptop"],"Your Jetpack site is ready to go!":["Your Jetpack site is ready to go!"],"Stars":["Stars"],"Jupiter":["Jupiter"],"Welcome to Jetpack Personal":["Welcome to Jetpack Personal"],"Welcome to Jetpack Premium":["Welcome to Jetpack Premium"],"Welcome to Jetpack Professional":["Welcome to Jetpack Professional"],"Schedule posts":["Schedule posts"],"Activate Publicize":["Activate Publicise"],"Your site is backed up.":["Your site is backed up."],"Image Performance":["Image Performance"],"Get WordPress Apps for every device":["Get WordPress Apps for every device"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world."],"I already use this app.":["I already use this app."],"Create address":["Create address"],"Priority support":["Priority support"],"Add sharing buttons to your posts":["Add sharing buttons to your posts"],"Automatically share your posts to social networks":["Automatically share your posts to social networks"],"Updating settings…":["Updating settings…"],"Updating Post by Email address…":["Updating Post by Email address…"],"Your paid plan gives you access to prioritized Jetpack support.":["Your paid plan gives you access to prioritised Jetpack support."],"You have paid for backups but they're not yet active.":["You have paid for backups but they're not yet active."],"You have paid for backups and security scanning but they’re not yet active.":["You have paid for backups and security scanning but they’re not yet active."],"Click \"Set Up\" to finish installation.":["Click \"Set Up\" to finish installation."],"Checking site status…":["Checking site status…"],"Pages":["Pages"],"We're here to help":["We're here to help"],"Jetpack comes with free, basic support for all users.":["Jetpack comes with free, basic support for all users."],"Ask a question":["Ask a question"],"Search our support site":["Search our support site"],"Get a faster resolution to your support questions.":["Get a faster resolution to your support questions."],"Host fast, high-quality, ad-free video.":["Host fast, high-quality, ad-free video."],"Generate income with high-quality ads.":["Generate income with high-quality ads."],"Real-time site backups and automatic threat resolution.":["Real-time site backups and automatic threat resolution."],"Protect against data loss, malware, and malicious attacks.":["Protect against data loss, malware, and malicious attacks."],"Integrate easily with Google Analytics.":["Integrate easily with Google Analytics."],"Help your content get found and shared with SEO tools.":["Help your content get found and shared with SEO tools."],"Protect your site from spam.":["Protect your site from spam."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["This site is not connected to WordPress.com. Please ask the site administrator to connect."],"Spam filtering":["Spam filtering"],"Daily, automated malware scanning":["Daily, automated malware scanning"],"Daily, automated backups (unlimited storage)":["Daily, automated backups (unlimited storage)"],"Daily, automated malware scanning with automated resolution":["Daily, automated malware scanning with automated resolution"],"Unlimited, high-speed video hosting":["Unlimited, high-speed video hosting"],"SEO preview tools":["SEO preview tools"],"Site stats, related content, and sharing tools":["Site stats, related content, and sharing tools"],"Brute force attack protection and downtime monitoring":["Brute force attack protection and downtime monitoring"],"Unlimited, high-speed image hosting":["Unlimited, high-speed image hosting"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:"],"Read more about Jetpack benefits":["Read more about Jetpack benefits"],"An Automattic Airline":["An Automattic Airline"],"Manage site connection":["Manage site connection"],"Connect your account to WordPress.com to view more stats":["Connect your account to WordPress.com to view more stats"],"Theme enhancements":["Theme enhancements"],"Load more posts using the default theme behavior":["Load more posts using the default theme behaviour"],"Load more posts in page with a button":["Load more posts in-page with a button"],"Load more posts as the reader scrolls down":["Load more posts as the reader scrolls down"],"Theme support required.":["Theme support required."],"Learn more about adding support for Infinite Scroll to your theme.":["Learn more about adding support for Infinite Scroll to your theme."],"Use excerpts instead of full posts on front page and archive pages":["Use excerpts instead of full posts on front page and archive pages"],"Show featured images":["Show featured images"],"Enable the WordPress.com toolbar":["Enable the WordPress.com toolbar"],"Writing tools available to you will be shown here when an administrator enables them.":["Writing tools available to you will be shown here when an administrator enables them."],"Portfolios":["Portfolios"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["Generate XML sitemaps"],"Collecting valuable traffic stats and insights":["Collecting valuable traffic stats and insights"],"The image helps collect stats, but should work when hidden.":["The image helps collect stats, but should work when hidden."],"Count logged in page views from":["Count logged in page views from"],"Allow stats reports to be viewed by":["Allow stats reports to be viewed by"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimise your site's SEO{{/a}}."],"Configure your SEO settings":["Configure your SEO settings"],"In \"Upgrade\"":["In \"Upgrade\""],"Configure your Google Analytics settings":["Configure your Google Analytics settings"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings."],"Enable ads and display an ad below each post":["Enable ads and display an ad below each post"],"Configure your sharing buttons":["Configure your sharing buttons"],"Connect your social media accounts":["Connect your social media accounts"],"Match accounts using email addresses":["Match accounts using email addresses"],"Require accounts to use WordPress.com Two-Step Authentication":["Require accounts to use WordPress.com's Two-Step Authentication"],"Add to whitelist":["Add to whitelist"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["You may whitelist an IP address or series of addresses, preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["Your site is backed up and threat-free."],"Checking your spam protection…":["Checking your spam protection…"],"Fetching key…":["Fetching key…"],"Your site needs an Antispam key.":["Your site needs an Antispam key."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["There's a problem with your Antispam API key. {{a}}Learn more{{/a}}."],"Your site is not protected from spam.":["Your site is not protected from spam."],"Your Antispam key is valid.":["Your Antispam key is valid."],"Your site is protected from spam.":["Your site is protected from spam."],"Checking key…":["Checking key…"],"Your API key":["Your API key"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one."],"No search results found for %(term)s":["No search results found for %(term)s"],"Enter a search term to find settings or close search.":["Enter a search term to find settings or close search."],"Connections":["Connections"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Your site is in Development Mode, so it cannot be connected to WordPress.com."],"Your site is connected to WordPress.com.":["Your site is connected to WordPress.com."],"You are the Jetpack owner.":["You are the Jetpack owner."],"Connected as {{span}}%(username)s{{/span}}":["Connected as {{span}}%(username)s{{/span}}"],"View your Email Followers":["View your Email Followers"],"Color scheme":["Colour scheme"],"Enable Markdown use for comments.":["Enable Markdown use for comments."],"Updated settings.":["Updated settings."],"Error updating settings. %(error)s":["Error updating settings. %(error)s"],"Regenerated Post by Email address.":["Regenerated Post by Email address."],"Error regenerating Post by Email address. %(error)s":["Error regenerating Post by Email address. %(error)s"],"Updated settings. Refreshing page…":["Updated settings. Refreshing page…"],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}The jetpack_development_mode filter is active{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Configure Google Analytics"],"Activate Google Analytics":["Activate Google Analytics"],"Download the free apps":["Download the free apps"],"Upgrade Focus: VideoPress For Weddings":["Upgrade Focus: VideoPress For Weddings"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!"],"Display an ad unit at the top of your site.":["Display an ad unit at the top of your site."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site."],"In \"Mobile\"":["In \"Mobile\""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}"],"View your earnings":["View your earnings"],"Configure site SEO":["Configure site SEO"],"Activate SEO tools":["Activate SEO tools"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!"],"Video Hosting":["Video Hosting"],"SEO Tools":["SEO Tools"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Advanced SEO tools to help your site get found when people search for relevant content."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive."],"You are running Jetpack on a staging server.":["You are running Jetpack on a staging server."],"More Info":["More Info"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}"],"Your current IP: %(ip)s":["Your current IP: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["There are unsaved settings in this tab that will be lost if you leave it. Proceed?"],"This will reset all Jetpack options, are you sure?":["This will reset all Jetpack options, are you sure?"],"Search for a Jetpack feature.":["Search for a Jetpack feature."],"Configure your Security Scans":["Configure your Security Scans"],"Subscriber":["Subscriber"],"Big iPhone/iPad Update Now Available":["Big iPhone/iPad Update Now Available"],"The WordPress for Android App Gets a Big Facelift":["The WordPress for Android App Gets a Big Facelift"],"WordPress.com Likes are:":["WordPress.com Likes are:"],"Comments headline":["Comments headline"],"A few catchy words to motivate your readers to comment.":["A few catchy words to motivate your readers to comment."],"Show a \"follow blog\" option in the comment form":["Show a \"follow blog\" option in the comment form"],"Show a \"follow comments\" option in the comment form":["Show a \"follow comments\" option in the comment form"],"Put a chart showing 48 hours of views in the admin bar":["Put a chart showing 48 hours of views in the admin bar"],"Hide the stats smiley face image":["Hide the stats smiley face image"],"Whitelisted IP addresses":["Whitelisted IP addresses"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Show an ad for the WordPress mobile apps in the footer of the mobile theme"],"Copied!":["Copied!"],"Highlight and copy the following text to your clipboard:":["Highlight and copy the following text to your clipboard:"],"Regenerate address":["Regenerate address"],"Automatically proofread content when: ":["Automatically proofread content when: "],"A post or page is first published":["A post or page is first published"],"A post or page is updated":["A post or page is updated"],"Automatic Language Detection":["Automatic Language Detection"],"The proofreader supports English, French, German, Portuguese and Spanish.":["The proofreader supports English, French, German, Portuguese, and Spanish."],"Enable proofreading for the following grammar and style rules: ":["Enable proofreading for the following grammar and style rules: "],"Add a phrase":["Add a phrase"],"Cheatin' uh?":["Cheatin' huh?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["Your Jetpack is already connected."],"You're fueled up and ready to go, Jetpack is now active.":["You're fuelled up and ready to go, Jetpack is now active."],"You're fueled up and ready to go.":["You're fuelled up and ready to go."],"You are currently running a development version of Jetpack.":["You are currently running a development version of Jetpack."],"Submit Beta feedback":["Submit Beta feedback"],"What would you like to see on your Jetpack Dashboard?":["What would you like to see on your Jetpack Dashboard?"],"Let us know!":["Let us know!"],"Saving…":["Saving…"],"Save Settings":["Save Settings"],"Jetpack Stats Icon":["Jetpack Stats Icon"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}"],"Activate Site Stats":["Activate Site Stats"],"Security Scanning":["Security Scanning"],"Site Backups":[""],"Upgrade":["Upgrade"],"ACTIVE":["ACTIVE"],"Your site is on Development Mode":["Your site is on Development Mode"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support."],"View your spam stats":["View your spam stats"],"View your security dashboard":["View your security dashboard"],"The site is in Development Mode, so you can not connect to WordPress.com.":["The site is in Development Mode, so you can not connect to WordPress.com."],"Link your account to WordPress.com to get the most out of Jetpack.":["Link your account to WordPress.com to get the most out of Jetpack."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack is actively blocking malicious login attempts. Data will display here soon!"],"Total malicious attacks blocked on your site.":["Total malicious attacks blocked on your site."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign-in attempts."],"All plugins are up-to-date. Awesome work!":["All plugins are up-to-date. Awesome work!"],"Jetpack is improving and optimizing your image speed.":["Jetpack is improving and optimising your image speed."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack is monitoring your site. If we think your site is down, you will receive an email."],"Security":["Security"],"Performance":["Performance"],"Backups":["Backups"],"{{a}}View backup details{{/a}}.":["{{a}}View backup details{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress."],"Unavailable in Dev Mode.":["Unavailable in Dev Mode."],"Spam Protection":["Spam Protection"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["For state-of-the-art spam defence, please {{a}}install Akismet{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["For state-of-the-art spam defence, please {{a}}activate Akismet{{/a}}."],"Invalid key":["Invalid key"],"Unavailable in Dev Mode":["Unavailable in Dev Mode"],"Activating recommended features…":["Activating recommended features…"],"Recommended features active.":["Recommended features active."],"Recommended features failed to activate. %(error)s":["Recommended features failed to activate. %(error)s"],"Activating %(slug)s…":["Activating %(slug)s…"],"%(slug)s has been activated.":["%(slug)s has been activated."],"%(slug)s failed to activate. %(error)s":["%(slug)s failed to activate. %(error)s"],"Deactivating %(slug)s…":["Deactivating %(slug)s…"],"%(slug)s has been deactivated.":["%(slug)s has been deactivated."],"%(slug)s failed to deactivate. %(error)s":["%(slug)s failed to deactivate. %(error)s"],"Updating %(slug)s settings…":["Updating %(slug)s settings…"],"Updated %(slug)s settings.":["Updated %(slug)s settings."],"Error updating %(slug)s settings. %(error)s":["Error updating %(slug)s settings. %(error)s"],"Updating %(slug)s address…":["Updating %(slug)s address…"],"Regenerated %(slug)s address .":["Regenerated %(slug)s address ."],"Error regenerating %(slug)s address. %(error)s":["Error regenerating %(slug)s address. %(error)s"],"Resetting Jetpack options…":["Resetting Jetpack options…"],"Options reset.":["Options reset."],"Options failed to reset.":["Options failed to reset."],"There was an error disconnecting Jetpack. Error: %(error)s":["There was an error disconnecting Jetpack. Error: %(error)s"],"Unlinking from WordPress.com":["Unlinking from WordPress.com"],"Unlinked from WordPress.com.":["Unlinked from WordPress.com."],"Error unlinking from WordPress.com. %(error)s":["Error unlinking from WordPress.com. %(error)s"],"At A Glance":["At A Glance"],"Clichés":["Clichés"],"Dashboard":["Dashboard"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack."],"Automattic's Privacy Policy":["Automattic's Privacy Policy"],"WordPress.com Terms of Service":["WordPress.com Terms of Service"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}Activate{{/a}} to enhance the performance and speed of your images."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Turn on plugin autoupdates{{/a}}"],"Plugin Updates":["Plugin Updates"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["To automatically back up your entire site, please {{a}}upgrade your account{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}."],"No threats found, you're good to go!":["No threats found, you're good to go!"],"{{a}}Contact Support{{/a}}":["{{a}}Contact Support{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}View details at VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["Uh oh, %(number)s threat found.","Uh oh, %(number)s threats found."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down."],"Loading…":["Loading…"],"Downtime monitoring":["Downtime monitoring"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}View more stats on WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}View detailed stats{{/button}}"],"All-time comments":["All-time comments"],"All-time views":["All-time views"],"%(number)s View":["%(number)s View","%(number)s Views"],"Best overall day":["Best overall day"],"Views today":["Views today"],"Months":["Months"],"Weeks":["Weeks"],"Days":["Days"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}"],"Click to view detailed stats.":["Click to view detailed stats."],"Views: %(numberOfViews)s":["Views: %(numberOfViews)s"],"Week of %(date)s":["Week of %(date)s"],"Site Security":["Site Security"],"Activate recommended features":["Activate recommended features"],"Link to WordPress.com":["Link to WordPress.com"],"Unlink me from WordPress.com":["Unlink me from WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["You need to stay logged in to your WordPress blog while you authorise Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s"],"Disconnecting Jetpack":["Disconnecting Jetpack"],"Learn more":["Learn more"],"Posts":["Posts"],"Front page":["Front page"],"Upload videos":["Upload videos"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Show related content after posts"],"Related":["Related"],"Save":["Save"],"Email Address":["Email Address"],"Media":["Media"],"Themes":["Themes"],"Site Stats":["Site Stats"],"Sharing":["Sharing"],"Testimonials":["Testimonials"],"Cancel":["Cancel"],"Comments":["Comments"],"Ignored Phrases":["Ignored Phrases"],"Use automatically detected language to proofread posts and pages":["Use automatically detected language to proofread posts and pages"],"Redundant Phrases":["Redundant Phrases"],"Phrases to Avoid":["Phrases to Avoid"],"Passive Voice":["Passive Voice"],"Jargon":["Jargon"],"Hidden Verbs":["Hidden Verbs"],"Double Negatives":["Double Negatives"],"Diacritical Marks":["Diacritical Marks"],"Complex Phrases":["Complex Phrases"],"Bias Language":["Bias Language"],"English Options":["English Options"],"Proofreading":["Proofreading"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Your website needs to be publicly accessible to use Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["You have successfully disconnected Jetpack"],"Edit":["Edit"],"Connected":["Connected"],"Activate":["Activate"],"Active":["Active"],"Search":["Search"],"Settings":["Settings"],"Learn More":["Learn More"],"Disconnect Jetpack":["Disconnect Jetpack"],"Test your site’s compatibility with Jetpack.":["Test your site’s compatibility with Jetpack."],"Settings header\u0004Plugin Autoupdates":["Plugin Autoupdates"],"Settings header\u0004Downtime monitoring":["Downtime monitoring"],"Settings header\u0004Privacy Settings":["Privacy Settings"],"Settings header\u0004WordPress.com toolbar":["WordPress.com toolbar"],"Settings header\u0004Composing":["Composing"],"Settings header\u0004Site stats":["Site stats"],"Settings header\u0004Search engine optimization":["Search engine optimisation"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Sharing buttons"],"Settings header\u0004Publicize connections":["Publicize connections"],"Settings header\u0004Like buttons":["Like buttons"],"Settings header\u0004WordPress.com log in":["WordPress.com log in"],"Settings header\u0004Brute force attack protection":["Brute force attack protection"],"Settings header\u0004Backups and security scanning":["Backups and security scanning"],"Settings header\u0004Spam filtering":["Spam filtering"],"Navigation item.\u0004Performance":["Performance"],"Navigation item.\u0004My Plan":["My Plan"],"Navigation item.\u0004Dev Tools":["Dev Tools"],"Navigation item.\u0004Settings":["Settings"],"Navigation item.\u0004Discussion":["Discussion"],"Navigation item.\u0004Traffic":["Traffic"],"Navigation item.\u0004Sharing":["Sharing"],"Navigation item.\u0004At A Glance":["At A Glance"],"Navigation item.\u0004Plans":["Plans"],"Navigation item.\u0004Writing":["Writing"],"Navigation item.\u0004Reset Options (dev only)":["Reset Options (dev only)"],"Navigation item.\u0004Security":["Security"],"Navigation item.\u0004At a Glance":["At a Glance"],"Search term.\u0004terms of service":["terms of service"],"Search term.\u0004tos":["tos"],"Search term.\u0004gdpr":["gdpr"],"Search term.\u0004data":["data"],"Search term.\u0004tracks":["tracks"],"Search term.\u0004privacy":["privacy"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["Upgrade"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Upgrade"],"Button caption\u0004Saving…":["Saving…"],"Button caption\u0004Save settings":["Save settings"],"A heading for a block of related posts.\u0004Related":["Related"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Preview"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Stay connected"],"A caption for a button to disconnect.\u0004Disconnect":["Disconnect"],"Short warning message\u0004Updates needed":["Updates needed"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Paid"],"A header for a preview area in the configuration screen.\u0004Preview":["Preview"],"Ads header\u0004Ads":["Ads"],"Dashboard widget header\u0004Site connection":["Site connection"],"Dashboard widget header\u0004Account connection":["Account connection"],"A caption for a small button to fix security issues.\u0004Threats":["Threats"],"A caption for a small button to fix security issues.\u0004FIX":["FIX"],"Short warning message about new threats found.\u0004Threats found!":["Threats found!"],"Short warning message about site having no security scan.\u0004No scanning":["No scanning"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Upgrade"],"Short message informing user that the site is secure.\u0004Secure":["Secure"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Invalid key"],"Caption for a button to set up a feature.\u0004Set up":["Set up"],"verb\u0004Copy":["Copy"],"Shorthand for Privacy Policy.\u0004Privacy":["Privacy"],"Shorthand for Terms of Service.\u0004Terms":["Terms"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Debug"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["Spam comments blocked."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-eo-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-eo-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 8a46ea0f..00000000
--- a/plugins/jetpack/languages/json/jetpack-eo-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"eo"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":[""],"We’re now collecting stats and securing your site. Welcome aboard.":[""],"{{a}}Skip, and explore features individually{{/a}}.":[""],"Jetpack Business Plan":[""],"Jetpack Premium Plan":[""],"Jetpack Personal Plan":[""],"Get started with hassle-free design, stats, and performance tools.":[""],"Welcome to Jetpack Free":[""],"Jetpack Free Plan":[""],"Explore Jetpack plans":[""],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":[""],"Jetpack offers so much more":[""],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":[""],"Support documentation":[""],"Chat bubbles representing getting in touch with support":[""],"Site Activity":[""],"Start publicizing now":[""],"Reach a wider audience by automatically sharing your posts on social media.":[""],"Increase traffic to your site":[""],"Explore free themes":[""],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":[""],"A wide variety of themes and tools to customize a site":[""],"Set up your site security":[""],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":[""],"Site stats showing an evolution in traffic and engagement":[""],"A hand holding a loupe":[""],"A chart showing an healthy increase in earnings":[""],"Interface showing a chronological list of changes and updates in a site":[""],"A cloud with multiple types of content floating around it":[""],"A folder holding real comments":[""],"Make your site faster":[""],"Load pages faster by serving your images from our global network of servers.":[""],"A fast and performant website":[""],"A secure site, locked and protected by Jetpack":[""],"These settings won't apply to related posts added using the block editor.":[""],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":[""],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":[""],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":[""],"Add Like buttons to your posts and pages":[""],"When visitors enjoy your content, let them show it with a Like.":[""],"Explore your Jetpack Professional plan!":[""],"Explore your Jetpack Premium plan!":[""],"Explore your Jetpack Personal plan!":[""],"Create account":[""],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":[""],"Real-time, automated backups (unlimited storage)":[""],"Compose content the way you want to and streamline your publishing experience.":[""],"Add a portfolio item":[""],"Add a testimonial":[""],"Maximize your site’s visibility in search engines and view traffic stats in real time.":[""],"Create a Jetpack account to use this feature":[""],"Share your content on social media and increase audience engagement.":[""],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":[""],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":[""],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":[""],"Error enabling Site accelerator. %(error)s":[""],"Site accelerator is now speeding up your site!":[""],"Enabling Site accelerator…":[""],"Error disabling site accelerator. %(error)s":[""],"Site accelerator is no longer speeding up your site!":[""],"Disabling site accelerator…":[""],"Load pages faster, optimize images, and speed up your visitors’ experience.":[""],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":[""],"High-speed, high-definition video hosting with no third-party ads.":[""],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":[""],"Marketing Automation":[""],"Activate Jetpack Search":[""],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":[""],"Start earning":[""],"WordAds lets you earn money by displaying promotional content. Start earning today.":[""],"Spam is automatically blocked from your comments.":[""],"Spam Filtering":[""],"Browse premium themes":[""],"Access hundreds of beautifully designed premium themes at no extra cost.":[""],"Try a premium theme":[""],"View settings":[""],"Create a Jetpack account to view your email followers":[""],"Open your site to comments and invite subscribers to get alerts about your latest work.":[""],"Manage security settings":[""],"Built-in Performance":[""],"Jetpack is ready for the new WordPress editor":[""],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":[""],"Build your Jetpack site with blocks":[""],"A new editor? Yes! {{a}}Learn more{{/a}}.":[""],"The features you rely on, adapted for the new WordPress editor.":[""],"Take me to the new editor":[""],"Testing Jetpack Connection":[""],"There was an error testing Jetpack. Error: %(error)s":[""],"New in Jetpack!":[""],"Speed up static file load times":[""],"Speed up image load times":[""],"Enable site accelerator":[""],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":[""],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":[""],"View your site activity":[""],"View a chronological list of all the changes and updates to your site in an organized, readable way.":[""],"Manually Verify ":[""],"Verify with Google":[""],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":[""],"or":[""],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":[""],"Your site is verified with Google":[""],"Site failed to verify: %(error)s":[""],"Verifying...":[""],"Add faster, more advanced searching to your site with Jetpack Professional.":[""],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":[""],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":[""],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":[""],"Jetpack Search supports many customizations.":[""],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":[""],"Site is verified":[""],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":[""],"Spam filtering and priority support.":[""],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":[""],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":[""],"Custom ads.txt entries":[""],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}Por krei belan retejon, funkciantan precize kiel vi volas, Profesia Jetpack donas al vi senliman alirorajton al pli ol 200 superaj etosoj de WordPress{{/p}}{{p}}Profesia Jetpack estas pri pli ol nur la trovo de la perfekta dizajno. Ĝi temas ankaŭ pri trankvilo: realtempaj sekurkopioj, aŭtomata skanado kontraŭ fiprogramoj kaj prioritata helpo de nia tutmonda teamo de spertuloj, por garantio, ke via retejo ĉiam estos sekura.{{/p}}"],"Introducing Premium Themes":["Prezentantaj Superajn Etosojn"]," Premium Themes":["Superaj Etosoj"],"Privacy information":["Privatecaj informoj"],"Enable Lazy Loading for images":["Ebligi Lazy Loading por bildoj"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":[""],"Performance & speed":["Rendimento k. rapido"],"Enable high-speed, ad-free video player":["Ebligi rapidan, senreklaman film-ludilon"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["Igu la enhavon kreitan de vi pli atentokapta per altdistingivaj filmoj. Per Filmo de Jetpack vi povas tajlori vian ludilon kaj liveri rapidajn, senreklamajn kaj senmarkajn filmojn al viaj vizitantoj. Filmoj estas gastigataj sur niaj serviloj de WordPress.com kaj ne uzas spacon de via gastiga abono!"],"Video":["Filmo"],"Carousel color scheme":["Kolorskemo de karuselo"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Exif-datumoj montras al rigardantoj aldonajn teknikajn informojn pri foto, kiel fokusan longon, aperturon kaj ISO."],"Show photo Exif metadata in carousel (when available)":["Montri Exif-datumojn de foto en karuselo (kiam haveblas)"],"Display images in a full-screen carousel gallery":["Montri bildojn en plenekrana karusela galerio"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["Vi povas krei plenekranajn karuselajn prezentaĵojn por la bildoj en viaj afiŝoj kaj paĝoj. Karuselaj galerioj estas afablaj al poŝaparatoj kaj ili kuraĝigas interagon kun viaj fotoj fare de vizitantoj al via retejo."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["La ilobreto de WordPress.com anstataŭas la defaŭltan administran ilobreton de WordPress kaj ĝi koherigas vian sperton pri WordPress. Ĝi donas unuklakan aliron al administro de ĉiuj viaj retejoj, ĝisdatigon de via profilo de WordPress, vidon de sciigoj kaj aktualajn sciigojn pri la retejoj sekvataj de vi en la Legilo."],"Portfolios shortcode: [portfolio]":["Koncizkodo por teko: [portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["Uzu {{portfolioLink}}tekojn{{/portfolioLink}} ĉe via retejo por elmontri viajn plej bonajn laboraĵojn. Se via etoso ne subtenas Tekojn de Jetpack, vi tamen povas uzi simplan koncizkodon por montri ilin ĉe via retejo."],"Testimonials shortcode: [testimonials]":["Koncizkodo por atestoj: [testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["Por allogi novajn klientojn, vi povas aldoni {{testimonialLink}}atestojn{{/testimonialLink}} al via retejo. Se via etoso ne subtenas Atestojn de Jetpack, vi, tamen, povas uzi simplan koncizkodon por montri ilin ĉe via retejo."],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["Je la momento, serĉiloj ne havas alirorajton al via retejo. Se vi volas, ke via retejo estu alirebla, kontrolu viajn {{a}}Legajn agordojn{{/a}} kaj ŝaltu \"Videblecon al serĉiloj\"."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["Bona novaĵo: Jetpack aŭtomate sendas vian retejo-mapon al ĉiuj ĉefaj serĉiloj por indeksado."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["Retejo-mapoj estas dosieroj uzataj de serĉiloj kiel Google aŭ Bing por indeksi vian retejon. Mapoj povas helpi plibonigi vian lokon en serĉrezultoj. Je ebligo de tiu eco, Jetpack kreos retejo-mapojn por vi kaj ĝisdatigos ilin aŭtomate kiam la enhavo de via retejo ŝanĝiĝos."],"Configure related posts in the Customizer":["Agordi rilatajn afiŝojn en la Tajlorilo"],"Highlight related content with a heading":["Emfazi rilatan enhavon per titolo"],"View security scan details":["Vidi detalojn de la sekureca skano"],"View backup history":["Vidi historion pri sekurkopioj"],"Show a thumbnail image where available":["Montri bildeton kie disponebla"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["Por pliaj informoj pri kiel apartaj ecoj de Jetpack uzas datumojn kaj spuras aktivecon, bonvole iru al nia {{privacyCenterLink}}Centro pri Privateco{{/privacyCenterLink}}."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["Ni uzas aliajn spurilojn, inkluzive kelkajn de eksteraj liverantoj. {{cookiePolicyLink}}Legu pri tiuj{{/cookiePolicyLink}} kaj kiel regi ilin."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["Tiuj informoj helpas nin plibonigi niajn varojn, merkati al vi pli efike, proprigi vian sperton ĉe WordPress.com kaj pli, kiel priskribitaj en nia {{pp}}privateca politiko{{/pp}}."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["Dividi informojn per nia analizilo pri via uzo de servoj dum ensalutinta al via konto ĉe WordPress.com. {{cookiePolicyLink}}Lernu pli{{/cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["Tiu eco estas administrata de reteja administranto. {{link}}Lerni pli{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["Tiu eco estas malebligita de reteja administranto. {{link}}Lerni pli{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["Tiu eco estas ebligita de reteja administranto. {{link}}Lerni pli{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["%(moduleName)s estis malebligita de reteja administranto. {{link}}Lerni pli{{/link}}."],"This feature has been disabled by a site administrator.":["Tiu eco estas malebligita de reteja administranto."],"%(moduleName)s has been disabled by a site administrator.":["%(moduleName)s estas malebligita de reteja administranto."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["Vi povas meti aldonajn reklamojn per la kromprogrameto Ad. {{link}}Provu ĝin!{{/link}}"],"Configure your notification settings":["Faru viajn agordojn de sciigoj"],"Monitor your site's downtime":["Observo de malfunkciado de via retejo"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":[""],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["La dosieroj de via retejo estas regule skanitaj por senrajtaj aŭ suspektaj ŝanĝoj kiuj povus endanĝerigi viajn sekurecon kaj datumojn."],"Plugin needs updating.":["Kromprogramo bezonas ĝisdatigon.","Kromprogramoj bezonas ĝisdatigojn."],"%(number)s":["%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Ĝisdatigoj de kromprogramoj de Jetpack permesas vin elekti kiujn kromprogramojn por ĝisdatigi aŭtomate."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack optimumigos viajn bildojn kaj servos ilin de la servilo lokita plej proksime al viaj vizitantoj. Uzo de nia tutmonda enhav-livera reto plirapidigos la ŝargotempon de via retejo."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":[""],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Sekurkopioj de Jetpack permesas vin facile restarigi aŭ elŝuti sekurkopion de specifa momento."],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet kontrolas viajn komentojn kaj sendaĵojn de kontakto-formularoj kun nia tutmonda datumbazo de trudaĵoj."],"Privacy Information":["Privatecaj informoj"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["VideoPress permesas alŝuton de filmoj de via komputilo por esti gastigataj ĉe WordPress.com, prefere ol ĉe la serviloj de via interreta gastiganto. Vi povas enmeti ilin en vian memstaran retejon de Jetpack."],"Add the Search (Jetpack) widget to your sidebar":["Aldoni la serĉan kromprogrameton de Jetpack al via flankpanelo"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["Donu al viaj vizitantoj bonegan serĉan sperton per permeso filtri kaj ordigi rapidajn, rilatajn serĉrezultojn."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["Ebligas plumpezan etoson afablan al poŝaj aparatoj, kiuj aperos al uzantoj de poŝaj aparatoj."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["Aŭtomate ŝargas la sekvajn afiŝojn kiam la leganto alproksimiĝas al la subo de paĝo."],"Allows you to publish new posts by sending an email to a special address.":["Permesas publikigon de novaj afiŝoj per sendo de retmesaĝo al speciala adreso."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["Permesas vin verki enhavon kun ligiloj, listoj kaj aliaj stiloj per la sintakso Markdown."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["Kontrolas vian enhavon por malĝusta gramatiko kaj literumado, malĝusta uzo de vortoj kaj stilo dum vi verkas."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["Donas la necesajn kaŝitajn etikedojn por aŭtentigi vian WordPress-ejon ĉe diversaj servoj."],"Displays information on your site activity, including visitors and popular posts or pages.":["Montras informojn pri la aktiveco ĉe via retejo, inkluzivante vizitantojn kaj popularajn afiŝojn aŭ paĝojn."],"Allows you to optimize your site and its content for better results in search engines.":["Permesas vin optimumigi vian retejon kaj la enhavon, por pli bonaj rezultoj ĉe serĉiloj."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["Kunigas vian WordPress-ejon kun la Analizilo de Google, platformo kiu oferas klarigojn pri viaj trafiko, vizitantoj kaj konvertiĝoj."],"Displays high-quality ads on your site that allow you to earn income.":["Montras altkvalitajn reklamojn ĉe via retejo permesanta monan enspezon."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["Aldonas kunhavigajn butonojn al via enhavo por ke vizitantoj povu montri ĝin ĉe sociaj retejoj."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["Permesas vin aŭtomate kunhavigi vian plej lastan enhavon ĉe sociaj retejoj, inkluzive de Facebook kaj Twitter."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["Aldonas Ŝat-butonojn al via enhavo, por ke vizitantoj povu montri aprezon aŭ ĝuon."],"Allows registered users to log in to your site with their WordPress.com accounts.":["Permesas al registritaj uzantoj ensaluti al via retejo per konto de WordPress.com."],"Protects your site from traditional and distributed brute force login attacks.":["Protektas vian retejon de tradicia kaj dissenditaj atakoj penante brutforte ensaluti."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["Kreas sekurkopiojn de via retejo kaj tenas ilin ĉe la serviloj de WordPress.com, por permesi restarigon de via enhavo se krizo aŭ eraro okazos."],"Removes spam from comments and contact forms.":["Forviŝas trudaĵojn de komentoj kaj kontakt-formularoj."],"We are committed to your privacy and security. ":["Ni prizorgas viajn privatecon kaj sekurecon."],"View all Jetpack plans":["Vidi ĉiujn abontipojn de Jetpack"],"Manage your plan":["Administri vian abontipon"],"Your Plan":["Via abono"],"You’re currently on Jetpack %(plan)s.":["Vi nun abonas %(plan)s de Jetpack."],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["Permesas legantojn aboni viajn afiŝojn aŭ komentojn kaj ricevi avizojn pri nova enhavo retpoŝte."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["Anstataŭigas la normalan koment-formularon de WordPress per nova komenta sistemo inkluzivante opcion ensaluti pere de sociaj retejoj."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":[""],"Add Search (Jetpack) Widget":["Aldoni serĉan kromprogrameton de Jetpack"],"Jetpack Search is powering search on your site.":["Serĉo de Jetpack povigas serĉojn ĉe via retejo."],"Manage your plugins":["Administri viajn kromprogramojn"],"Moderate comments":["Kontroli komentojn"],"Error updating privacy settings. %(error)s":["Eraro dum ĝisdatigo de privatecaj agordoj. %(error)s"],"Updated privacy settings.":["Ĝisdatigis privatecajn agordojn."],"Updating privacy settings…":["Ĝisdatigas privatecajn agordojn..."],"Add Jetpack Search Widget":["Aldoni kromprogrameton de Jetpack-serĉo"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":[""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["Plena sekureca aro, iloj por merkatado kaj aŭtomatigo de enspezo, senlima gastigado de filmoj, senlimaj etosoj, pli bona serĉo kaj prioritata helpo."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["Plena sekureca aro, iloj por merkatado kaj aŭtomatigo de enspezo, senlima gastigado de filmoj kaj prioritata helpo."],"Daily backups, spam filtering, and priority support.":["Tagaj sekurkopioj, filtrado de trudaĵoj kaj prioritata helpo."],"Always-on Security":["Konstanta sekureco"],"Activate video hosting":[""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Realtempa sekurkopiado de ĉiuj datumoj de via retejo kun senlima spaco, unuklakaj restarigoj, aŭtomata sekureca skanado kaj prioritata helpo."],"Design the perfect website":["Dizajnu la perfektan retejon"],"Set up Jetpack":["Agordi Jetpack"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["Realtempaj sekurkopioj de ĉiuj datumoj de via retejo kun senlima spaco, unuklakoj restarigoj kaj aŭtomata sekureca skanado."],"Jetpack Search":["Serĉo de Jetpack"],"Jetpack version %(version)s":["Versio de Jetpack %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["Nun via retejo ricevas sekurkopiojn realtempe kaj estas skanita regule por sekurecaj minacoj."],"Daily backup of all your site data with unlimited space and one-click restores":["Ĉiutagaj sekurkopioj de la datumoj de via retejo, kun senlima tenado kaj unuklakaj restarigoj"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Realtempaj sekurkopioj de la datumoj de via retejo, kun senlima tenado, unuklakaj restarigoj, aŭtomata sekureca skanado kaj prioritata helpo."],"View your security activity":["Vidi vian sekurecan aktivecon"]," (powered by VaultPress).":["(povigita de VaultPress)."],"Customize Search Widget":["Proprigi la serĉan kromprogrameton"],"Please correct the issue below and try again.":["Bonvole ĝustigu la suban problemon kaj provu denove.","Bonvole ĝustigu la subajn problemojn kaj provu denove."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["Ni preventas sekurecajn minacojn al via retejo. Vi ricevos avizon se ni trovos minacon."],"Your site is being backed up in real-time.":["Via retejo ricevas sekurkopiojn realtempe."],"Jetpack version":["Versio de Jetpack"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}Vidi aktivecon ĉe via retejo{{/a}} per unuopa fluo."],"Activity":["Aktiveco"],"Confirm each new phrase you add by pressing enter.":["Konfirmu ĉiun novan aldonitan frazon per premo de la enigklavo."],"{{a}}View details{{/a}}":["{{a}}Vidi detalojn{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["Dankon pro la elekto de Profesia plano de Jetpack. Jetpack nun kreas sekurkopiojn de via enhavo realtempe, kreas indekson de via enhavo por serĉoj, skanas kontraŭ minacoj kaj donas aliron al superaj etosoj."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["Per Profesia Jetpack, vi povas krei la perfektan retejon per elekto de unu el pli ol 300 profesie dizajnitaj etosoj por WordPress, inkluzive pli ol 200 superajn etosojn. Vi povas tajlori vian enhavon per diversaj kromprogrametoj aŭ aldoni senlimajn filmojn al viaj afiŝoj kaj paĝoj -- montrataj senreklame kaj sen akvomarko (filigrano)."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":[""],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Profesia Jetpack donas al vi ĉion bezonatan por protekti vian laboron, inkluzive de laŭpetaj sekurkopioj kaj skanoj kontraŭ fiprogramoj, kun unu-klakaj restarigoj kaj solvo de problemoj. Via retejo estos plene protektita kontraŭ trudaĵoj, malica kodo kaj penoj brutforte ensaluti."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Ekesploru Profesian Jetpack nun por vidi ĉiujn avantaĝojn de via nova abonplano."],"Install premium themes":["Instali superajn etosojn"],"Review SEO features":["Rigardi optimumigajn ilojn por serĉiloj"],"Welcome Professional":["Bonvenon al Profesia"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["Dankon pro la elekto de Supera plano de Jetpack. Jetpack nun kreas sekurkopiojn de via retejo, skanas kontraŭ minacoj kaj ebligas profitajn ecojn."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["Per Supera Jetpack, vi povas krei la perfektan retejon, por ĉia retejo. Vi povas tajlori vian retejon per unu el pli ol 100 senpagaj etosoj aŭ plibonigi vian enhavon per tre distingivaj filmoj -- ĉiuj gastigitaj sen reklamoj aŭ akvomarkoj."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Per la povaj havigaj iloj de Jetpack vi povas aŭtomate kunhavigi viajn lastajn afiŝojn al sociaj retejoj, aŭ plani ke via enhavo estu dissendita en elektitaj dato kaj horo. Aldone al kreskigo de via sekvantaro, vi povas kreskigi vian firmaon per iloj kiel pag-butonoj kaj reklamoj."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Ekesploru Superan Jetpack por vidi la avantaĝojn de via nova abonplano."],"Monetize your site with ads":["Profitigu vian retejon per reklamoj"],"Welcome Premium":["Bonvenon al Supera"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["Dankon pro la elekto de Persona plano de Jetpack. Jetpack nun kreas sekurkopion de via retejo kaj skanas la retejon kontraŭ minacoj al sekureco."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["Pere de Persona Jetpack, vi havas aliron al pli ol 100 senpagaj, profesie dizajnitaj etosoj por WordPress. Elektu la etoson plej taŭgan por via retejo kaj tajloru kolorojn, bildojn aŭ aldonu diversajn novajn kromprogrametojn."],"Got it":[""],"Welcome personal":["Bonvenon al Persona"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["Per alklako al la suba butono, vi konsentas al niaj {{tosLink}}Uzkondiĉoj{{/tosLink}} kaj al {{shareDetailsLink}}kunhavigo de detaloj{{/shareDetailsLink}} kun WordPress.com"],"Jetpack Stats People":["Homoj de Jetpack-statistikaĵoj"],"Hello there! Your stats have been activated.":["Saluton, vi! Viaj statistikaĵoj estas aktivaj."],"Just give us a little time to collect data so we can display it for you here.":["Donu al ni etan tempon por kolekti datumojn por ke ni povu montri ĝin tie ĉi por vi."],"Okay, got it!":["Bone, komprenite!"],"Display ads below posts on":["Montri reklamojn sub afiŝoj sur"],"Additional ad placements":["Aldonaj reklamaj metoj"],"Top of each page":["Supren de ĉiu paĝo"],"Second ad below post":["Dua reklamo sub afiŝo"],"Archives":["Arkivoj"],"Explore Professional":["Esplori la profesian"],"Compare All Plans":["Kompari ĉiujn abonplanojn"],"Person with laptop":["Persono kun portebla komputilo"],"Your Jetpack site is ready to go!":["Via Jetpack-retejo estas preta!"],"Stars":["Steloj"],"Jupiter":["Jupitero"],"Welcome to Jetpack Personal":["Bonvenon al Jetpack Persona"],"Welcome to Jetpack Premium":["Bonvenon al Jetpack Supera"],"Welcome to Jetpack Professional":["Bonvenon al Jetpack Profesia"],"Schedule posts":[""],"Activate Publicize":["Aktivigi Publici"],"Your site is backed up.":["Via retejo havas sekurkopion."],"Image Performance":["Bilda rendimento"],"Get WordPress Apps for every device":["Vi povas akiri aplikaĵoj WordPress por ĉia aparato"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Vi povas administri ĉiujn viajn retejojn de unuopa panelo: publikigi enhavon, vidi statistikaĵojn, (mal)aprobi komentojn kaj pli, de ie ajn en la mondo."],"I already use this app.":["Mi jam uzas tiun aplikaĵon."],"Create address":["Krei adreson"],"Priority support":["Prioritata helpo"],"Add sharing buttons to your posts":["Aldono de kunhavigaj butonoj al viaj afiŝoj"],"Automatically share your posts to social networks":["Aŭtomate puŝas viajn afiŝojn al sociaj retoj"],"Updating settings…":["Ĝisdatigas agordojn..."],"Updating Post by Email address…":["Ĝisdatigas la retpoŝtadreson por afiŝi retpoŝte..."],"Your paid plan gives you access to prioritized Jetpack support.":["Via pagita abono donas al vi prioritatan subtenon de Jetpack."],"You have paid for backups but they're not yet active.":["Vi pagas por sekurkopioj sed ili ne estas aktivaj."],"You have paid for backups and security scanning but they’re not yet active.":["Vi pagas por sekurkopioj kaj sekureca skanado sed ili ne estas aktivaj. "],"Click \"Set Up\" to finish installation.":["Alklaku al \"Agordi\" por fini instalon."],"Checking site status…":["Kontrolas staton de retejo..."],"Pages":["Paĝoj"],"We're here to help":["Ni ĉeestas por helpi"],"Jetpack comes with free, basic support for all users.":["Jetpack venas kun senpaga, baza subteno al ĉiuj uzantoj."],"Ask a question":["Demandi"],"Search our support site":["Priserĉi nian help-retejon"],"Get a faster resolution to your support questions.":["Ricevis pli rapidan solvon al viaj demandoj."],"Host fast, high-quality, ad-free video.":["Gastigi rapidajn, altkvalitajn, senreklamajn filmojn."],"Generate income with high-quality ads.":["Ricevi enspezon per altkvalitaj reklamoj."],"Real-time site backups and automatic threat resolution.":["Realtempaj sekurkopioj de la retejo kaj aŭtomataj solvoj de minacoj."],"Protect against data loss, malware, and malicious attacks.":["Protekto kontraŭ perdo de datumoj, fiprogramoj kaj malicaj atakoj."],"Integrate easily with Google Analytics.":["Kunigas facile kun Analizilo de Google."],"Help your content get found and shared with SEO tools.":["Helpas al la malkovro kaj kunhavigo de via enhavo per iloj por serĉiloj."],"Protect your site from spam.":["Protekto de via retejo de trudaĵoj."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["Tiu ĉi retejo ne estas konektita al WordPress.com. Bonvole petu la retejan administranton konektiĝi."],"Spam filtering":["Filtrado de trudaĵoj"],"Daily, automated malware scanning":["Ĉiutaga, aŭtomata skanado kontraŭ fiprogramoj"],"Daily, automated backups (unlimited storage)":["Ĉiutagaj, aŭtomataj sekurkopioj (senlima tenado)"],"Daily, automated malware scanning with automated resolution":["Ĉiutaga, aŭtomata skanado kontraŭ fiprogramoj kun aŭtomata solvado"],"Unlimited, high-speed video hosting":[""],"SEO preview tools":["Iloj por antaúrigardo de serĉila optimumigo"],"Site stats, related content, and sharing tools":["Iloj por retejaj statistikaĵoj, rilata enhavo kaj kunhavigo"],"Brute force attack protection and downtime monitoring":["Protekto kontraŭ brutfortaj atakoj kaj observo de malfunkci-daŭro"],"Unlimited, high-speed image hosting":["Senlima, rapida gastigado de bildoj"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["Je malkonekto de %(siteName)s disde WordPress.com, vi jam ne havos aliron al la sekvaj:"],"Read more about Jetpack benefits":["Legi pli pri la avantaĝoj de Jetpack"],"An Automattic Airline":["Flugkompanio Automattic"],"Manage site connection":["Administri retejan konekton"],"Connect your account to WordPress.com to view more stats":["Konektu vian konton al WordPress.com por vidi pliajn statistikaĵojn"],"Theme enhancements":["Etosaj plibonigoj"],"Load more posts using the default theme behavior":["Ŝargas pliajn afiŝojn uzante la defaŭltan konduton de etoso"],"Load more posts in page with a button":["Ŝargas pliajn afiŝojn en paĝon per butono"],"Load more posts as the reader scrolls down":["Ŝargas pliajn afiŝojn kiam la leganto rulumas pli suben"],"Theme support required.":["Subteno de la etoso postulata."],"Learn more about adding support for Infinite Scroll to your theme.":["Por lerni pli pri la aldono de subteno por Senfina rulumado al via etoso."],"Use excerpts instead of full posts on front page and archive pages":["Uzo de eltiraĵoj anstataŭ plenaj afiŝoj sur la ĉefpaĝo kaj arkivaj paĝoj"],"Show featured images":["Montro de elstarigitaj bildoj"],"Enable the WordPress.com toolbar":["Ebligi la ilobreton de WordPress.com"],"Writing tools available to you will be shown here when an administrator enables them.":["Verkadaj iloj por vi aperos tie ĉi kiam administranto ebligas ilin."],"Portfolios":["Tekoj"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Notu, ke {{b}}aŭtentigo de via retejo pere de tiuj servoj ne necesas{{/b}} por ke via retejo estu indeksita de serĉiloj. Por uzi tiujn altnivelajn ilojn por serĉiloj, algluu la suban kodon HTML-etikedan. Se vi spertos problemojn, legu la {{support}}plenajn instrukciojn{{/support}}. Subtenataj aŭtentigaj servoj: {google}}Google-panelo pri serĉoj{{/google}}, {{bing}}Administrejo por retejestroj ĉe Bing{{/bing}}, {{pinterest}} Aŭtentigo de retejoj ĉe Pinterest{{/pinterest}}, kaj {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["Generi XML-retejomapojn"],"Collecting valuable traffic stats and insights":["Kolektas altvalorajn trafikajn statistikaĵojn kaj komprenojn"],"The image helps collect stats, but should work when hidden.":["La bildo helpas kolekti statistikaĵojn, sed devus funkcii kiam kaŝita."],"Count logged in page views from":["Kalkuli ensalutintajn paĝrigardojn de"],"Allow stats reports to be viewed by":["Permesi rigardon de statistikaj raportoj de"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["Vi rajtas alĝustigi tiujn agordojn se vi volas pli altnivelan regadon. Legu pli pri viaj ebloj por {{a}}optimumigo por serĉiloj{{/a}}."],"Configure your SEO settings":["Alĝustigi la agordojn por serĉila optimumigo"],"In \"Upgrade\"":["En \"Promociiĝo\""],"Configure your Google Analytics settings":["Alĝustigi la agordojn de via Analizilo de Google"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Montras reklamojn ĉe la unua artikolo sur via ĉefpaĝo aŭ ĉe la finoj de ĉiu paĝo kaj afiŝo. Por pliigi enspezon, metu aldonajn reklamojn supre de via retejo kaj al lokoj por kromprogrametoj."],"Enable ads and display an ad below each post":["Ebligi reklamojn kaj montri reklamon sub ĉiu afiŝo"],"Configure your sharing buttons":["Agordi viajn kunhavigajn butonojn"],"Connect your social media accounts":["Konekto de viaj soci-retaj kontoj"],"Match accounts using email addresses":["Kongruigi kontojn per retpoŝtadresoj"],"Require accounts to use WordPress.com Two-Step Authentication":["Postuli kontojn uzi du-paŝan aŭtentigon de WordPress.com"],"Add to whitelist":["Aldoni al akceptita listo"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["Vi rajtas aldoni IP-adreson aŭ serion de adresoj al la listo de akceptitaj adresoj por preventi blokadon de ili de Jetpack. IPv4 kaj IPv6 estas akcepteblaj. Por specifi gamon, entajpu la malaltan kaj altan valorojn apartigitajn de streketo. Ekzemple: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["Via retejo estas kopiita kaj sen-minaca."],"Checking your spam protection…":["Kontrolas vian trud-protekton..."],"Fetching key…":["Prenas ŝlosilon..."],"Your site needs an Antispam key.":["Via retejo bezonas kontraŭ-trudan ŝlosilon."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["Estas problemo pri via kontraŭ-truda API-ŝlosilo. {{a}}Lerni pli{{/a}}."],"Your site is not protected from spam.":["Via retejo ne estas protektita de trudaĵoj."],"Your Antispam key is valid.":["Via kontraŭ-truda ŝlosilo estas valida."],"Your site is protected from spam.":["Via retejo estas protektita de trudaĵoj."],"Checking key…":["Kontrolas ŝlosilon..."],"Your API key":["Via API-ŝlosilo"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["Se vi ankoraŭ ne havas API-ŝlosilo, do {{a}}tie ĉi, akiru vian API-ŝlosilon{{/a}} kaj vi ricevos gvidon tra la akiro."],"No search results found for %(term)s":["Neniu serĉrezulto por %(term)s"],"Enter a search term to find settings or close search.":["Entajpu serĉterminon por trovi agordojn aŭ fermu serĉilon."],"Connections":["Konektoj"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Via retejo estas en programista reĝimo, do ĝi ne povas esti konektita al WordPress.com."],"Your site is connected to WordPress.com.":["Via retejo estas konektita al WordPress.com."],"You are the Jetpack owner.":["Vi estas la posedanto de Jetpack."],"Connected as {{span}}%(username)s{{/span}}":["Konektita kiel {{span}}%(username)s{{/span}}"],"View your Email Followers":["Vidi viajn retpoŝtajn sekvantojn"],"Color scheme":["Koloraranĝo"],"Enable Markdown use for comments.":["Ebligi Markdown por komentoj."],"Updated settings.":["Ĝisdatigis agordojn."],"Error updating settings. %(error)s":["Eraro dum ĝisdatigo de agordoj. %(error)s"],"Regenerated Post by Email address.":["Regeneris adreson por afiŝi retpoŝte."],"Error regenerating Post by Email address. %(error)s":["Eraro dum regenero de adreso por afiŝi retpoŝte. %(error)s"],"Updated settings. Refreshing page…":["Ĝisdatigis agordojn. Reŝargas paĝon..."],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["Nun en {{a}}programista reĝimo{{/a}} (kelkaj ecoj estas malebligitaj) ĉar: {{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}La filtrilo jetpack_development_mode estas aktiva{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}La konstanto JETPACK_DEV_DEBUG estas difinita{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}Mankas punkto en la URL de via retejo (ekz. http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["La analizilo de Google estas senpaga servo por aldoni al niaj {{a}}enkonstruitaj statistikaĵoj{{/a}}, kun malsamaj informoj pri via trafiko. La statistikilo de WordPress.com kaj la analizilo de Google uzas malsamajn metodojn por identigi kaj spuri aktivecon ĉe via retejo, do kutime ili montras iomete malsamajn sumojn de vizitoj, rigardoj, ktp."],"Google Analytics":["Google-Analytics"],"Configure Google Analytics":["Agordi Google-Analytics"],"Activate Google Analytics":["Aktivigi Google-Analytics"],"Download the free apps":["Elŝuto de senpagaj aplikaĵoj"],"Upgrade Focus: VideoPress For Weddings":["Enfokusiĝo de promocio: VideoPress por nuptoj"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}Nun vi povas ankaŭ agordi rilatajn afiŝojn en la Tajlorilo. {{ExternalLink}}Provu!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["Defaŭlte, reklamoj montriĝas je la supro de ĉiu paĝo, afiŝo aŭ la unua artikolo sur via hejmpaĝo. Ankaŭ, vi povas aldoni ilin al la supro de via retejo kaj al kromprogrameta loko por gajni pli!"],"Display an ad unit at the top of your site.":["Montras unuopan reklamon supre de via retejo."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["Per aktivigo de reklamoj, vi konsentas al la {{link}}Uzkondiĉoj{{/link}} de Automattic-reklamoj."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Via servilo estas malĝuste agordita, signifante ke Protekti de Jetpack ne bone povas protekti vian retejon."],"In \"Mobile\"":["En \"Portebla\""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Agordu avizojn de via Observilo ĉe WordPress.com{{/link}}"],"View your earnings":["Rigardo al via enspezo"],"Configure site SEO":[""],"Activate SEO tools":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["Por eki, alklaku Aldoni aŭdvidaĵon en la afiŝa redaktilo kaj alŝutu filmon; ni zorgos pri ĉio cetera."],"Video Hosting":["Gastigo de fimoj"],"SEO Tools":["Serĉ-optimumigo"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Altnivelaj serĉoptimumigaj iloj por helpi trovi vian retejon kiam homoj serĉas rilatan enhavon."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["La plej facila maniero alŝuti senreklamajn kaj senmarkajn filmojn al via retejo. Vi ricevos statistikaĵojn pri ludado de filmoj kaj la ludilo estas malpeza kaj respondema."],"You are running Jetpack on a staging server.":["Vi uzas Jetpack en klontesta servilo."],"More Info":["Pliaj informoj"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Administri videblecon de ŝatoj, de la agordoj de la kunhaviga modulo{{/a}}"],"Your current IP: %(ip)s":["Via nuna IP: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["Estas nekonservitaj agordoj en la langeto kiuj malaperos se vi forlasos ĝin. Ĉu daŭrigi?"],"This will reset all Jetpack options, are you sure?":["Tio restarigos ĉiujn opciojn de Jetpack, ĉu vi ĉertas?"],"Search for a Jetpack feature.":["Serĉi econ de Jetpack."],"Configure your Security Scans":["Agordi la sekurecajn observadojn"],"Subscriber":["Abonanto"],"Big iPhone/iPad Update Now Available":["Nun haveblas granda ĝisdatigo de iPhone/iPad"],"The WordPress for Android App Gets a Big Facelift":["La aplikaĵo WordPress por Android ricevas renovigon"],"WordPress.com Likes are:":["Ŝatoj de WordPress.com estas:"],"Comments headline":["Titolo de komentoj"],"A few catchy words to motivate your readers to comment.":["Kelkaj atentokaptaj vortoj por kuraĝigi viajn legantojn komenti."],"Show a \"follow blog\" option in the comment form":["Montri opcion \"sekvi blogon\" en la komento-formularo"],"Show a \"follow comments\" option in the comment form":["Montri opcion \"sekvi komentojn\" en la komento-formularo"],"Put a chart showing 48 hours of views in the admin bar":["Meti tabelon de 48 horoj da rigardoj en la administran panelon"],"Hide the stats smiley face image":["Kaŝi la ridmienon de statistikaĵoj"],"Whitelisted IP addresses":["Aprobitaj IP-adresoj"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Montri reklamon por la WordPressaj aplikaĵoj por porteblaĵoj, en la piedo de la porpoŝa etoso"],"Copied!":["Kopiita!"],"Highlight and copy the following text to your clipboard:":["Emfazi kaj kopii la sekvan tekston al via tondejo:"],"Regenerate address":["Ree generi adreson"],"Automatically proofread content when: ":["Aŭtomate provlegi enhavon kiam:"],"A post or page is first published":["Afiŝo aŭ paĝo estas unuafoje publikigita"],"A post or page is updated":["Afiŝo aŭ paĝo estas ĝisdatigita"],"Automatic Language Detection":["Aŭtomata rekono de lingvo"],"The proofreader supports English, French, German, Portuguese and Spanish.":["La provlegilo subtenas la anglan, francan, germanan, portugalan kaj hispanan."],"Enable proofreading for the following grammar and style rules: ":["Ebligi provlegadon por la sekvaj reguloj de gramatiko kaj stilo:"],"Add a phrase":["Aldoni frazon"],"Cheatin' uh?":["Vi ruzemas, ĉu ne?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}Ĉu vi farus la komplezon rakonti al ni la kialojn de la nekompleta konektiĝo al Jetpack, per tiu ĉi {{a}}2-demanda enketo{{/a}}?{{/p}}{{p}}Jetpack-konektiĝo estas deviga por la funkciado de niaj senpagaj sekurecaj kaj trafikaj ebloj.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Bonvenon al {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["Via Jetpack jam estas konektita."],"You're fueled up and ready to go, Jetpack is now active.":["Vi estas fuelita kaj preta flugi, Jetpack nun estas aktiva."],"You're fueled up and ready to go.":["Vi estas fuelita kaj preta flugi."],"You are currently running a development version of Jetpack.":["Vi nune uzas programistan version de Jetpack."],"Submit Beta feedback":["Sendi pritakson pri beta fazo"],"What would you like to see on your Jetpack Dashboard?":["Kion vi volas vidi en via administra panelo de Jetpack?"],"Let us know!":["Lasu nin scii!"],"Saving…":["Konservas..."],"Save Settings":["Konservi agordojn"],"Jetpack Stats Icon":["Piktogramo por statistikaĵoj de Jetpack"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Aktivigu statistikaĵojn de la retejo{{/a}} por vidi detalitajn statistikaĵojn, ŝatojn, sekvantojn, abonantojn kaj pli! {{a1}}Lerni pli{{/a1}}"],"Activate Site Stats":["Aktivigi statistikaĵojn de la retejo"],"Security Scanning":["Sekureca skanado"],"Site Backups":["Retejaj sekurkopioj"],"Upgrade":["Ĝisdatigi"],"ACTIVE":["AKTIVA"],"Your site is on Development Mode":["Via retejo estas en programista reĝimo"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Post via konektiĝo, vi povos promociiĝi al paga abono, por rajtigi vin al monduma sekureco, protektiloj kontraŭ trudaĵoj kaj ĝui esti prioritato por helpo."],"View your spam stats":["Rigardi viajn statistikaĵojn pri trudaĵoj"],"View your security dashboard":["Rigardi vian sekurecan panelon"],"The site is in Development Mode, so you can not connect to WordPress.com.":["La retejo estas en programista reĝimo, do vi ne povas konekti ĝin al WordPress.com."],"Link your account to WordPress.com to get the most out of Jetpack.":["Ligu vian konton al WordPress.com por plene profiti de Jetpack."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["Por aŭtomata, multampleksa skanado kontraŭ sekurecaj minacoj, bonvole {{a}}instalu kaj aktivigu{{/a}} VaultPress."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["Por aŭtomata, ampleksa observado de sekurecaj minacoj, bonvole {{a}}promociu vian konton{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack aktive blokas malicajn ensalut-provojn. Detaloj montriĝos post nelonge!"],"Total malicious attacks blocked on your site.":["La sumo de malicaj atakoj blokitaj de via retejo."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Aktivigu Protekti{{/a}} por teni vian retejon protektita de malicaj ensalut-provoj"],"All plugins are up-to-date. Awesome work!":["Ĉiuj kromprogramoj estas ĝisdataj. Bonega laboro!"],"Jetpack is improving and optimizing your image speed.":["Jetpack plibonigas kaj optimumigas la rapidon de viaj bildoj."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack observas vian retejon. Se ni opinias, ke via retejo paneis, vi ricevos retleteron."],"Security":["Sekureco"],"Performance":["Rendimento"],"Backups":["Sekurkopioj"],"{{a}}View backup details{{/a}}.":["{{a}}Rigardi detalojn pri la sekurkopio{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["Por aŭtomate krei sekurkopion de via tuta retejo, bonvole {{a}}instalu kaj aktivigu{{/a}} VaultPress."],"Unavailable in Dev Mode.":["Ne haveblas en programista reĝimo."],"Spam Protection":["Protekto kontraŭ trudaĵoj"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["Por la plej moderna defendo kontraŭ trudaĵoj, bonvole {{a}}instalu Akismet{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["Por la plej moderna defendo kontraŭ trudaĵoj, bonvole {{a}}aktivigu Akismet{{/a}}."],"Invalid key":["Nevalida ŝlosilo"],"Unavailable in Dev Mode":["Nehaveblas en programista reĝimo"],"Activating recommended features…":["Aktivigas rekomenditajn ecojn..."],"Recommended features active.":["Rekomenditaj ecoj estas aktivaj."],"Recommended features failed to activate. %(error)s":["Rekomenditaj ecoj malsukcesis aktiviĝi. %(error)s"],"Activating %(slug)s…":["Aktivigas %(slug)s…"],"%(slug)s has been activated.":["%(slug)s estis aktivigita."],"%(slug)s failed to activate. %(error)s":["%(slug)s malsukcesis aktiviĝi. %(error)s"],"Deactivating %(slug)s…":["Malaktivigas %(slug)s…"],"%(slug)s has been deactivated.":["%(slug)s estis malaktivigita."],"%(slug)s failed to deactivate. %(error)s":["%(slug)s fiaskis en malaktiviĝo. %(error)s"],"Updating %(slug)s settings…":["Ĝisdatigas agordojn de %(slug)s..."],"Updated %(slug)s settings.":["Ĝisdatigis agordojn de %(slug)s."],"Error updating %(slug)s settings. %(error)s":["Eraro dum ĝisdatigo de agordoj de %(slug)s. %(error)s"],"Updating %(slug)s address…":["Ĝisdatigas adreson de %(slug)s…"],"Regenerated %(slug)s address .":["Regeneris adreson %(slug)s."],"Error regenerating %(slug)s address. %(error)s":["Eraro dum regenero de adreso %(slug). %(error)s"],"Resetting Jetpack options…":["Restarigas opciojn de Jetpack..."],"Options reset.":["Opcioj estas restarigitaj."],"Options failed to reset.":["Opcioj mise ne restariĝis."],"There was an error disconnecting Jetpack. Error: %(error)s":["Eraro okazis dum malkonekto de Jetpack. Eraro: %(error)s"],"Unlinking from WordPress.com":["Malligiĝas de WordPress.com"],"Unlinked from WordPress.com.":["Malligita de WordPress.com."],"Error unlinking from WordPress.com. %(error)s":["Eraro okazis dum malligiĝo de WordPress.com. %(error)s"],"At A Glance":["Je ekrigardo"],"Clichés":["Kliŝaĵoj"],"Dashboard":["Panelo"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Ĉu vi volas eldiri la kialon? Nur {{a}}respondo al du simplaj demandoj{{/a}} helpus nin plibonigi Jetpack."],"Automattic's Privacy Policy":["Privateca politiko de Automattic"],"WordPress.com Terms of Service":["Kondiĉoj por uzado de WordPress.com"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}Aktivigu{{/a}} por plibonigi la rendimenton kaj rapidon de viaj bildoj."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Ŝalti aŭtomatajn ĝisdatigojn de kromprogramoj{{/a}}"],"Plugin Updates":["Ĝisdatigoj de kromprogramoj"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["Por aŭtomate krei sekurkopion de via tuta retejo, bonvole {{a}}promociiĝu{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["Aj! Via Akismet-ŝlosilo mankas aŭ estas nevalida. {{akismetSettings}}Iru al agordoj de Akismet por ripari{{/akismetSettings}}."],"No threats found, you're good to go!":["Neniuj minacoj trovitaj, vi pretas flugi!"],"{{a}}Contact Support{{/a}}":["{{a}}Kontakti helpon{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}Vidi detalojn ĉe VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["Ho ne, %(number)s minaco trovita.","Ho ne, %(number)s minacoj trovitaj."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}Aktivigu Observilon{{/a}} por ricevi avertojn retpoŝte se via retejo paneos."],"Loading…":["Ŝargas..."],"Downtime monitoring":["Observado de daŭro de nefunkciado"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}Vidi pliajn statistikaĵojn ĉe WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}Vidi detalitajn statistikaĵojn{{/button}}"],"All-time comments":["Komentoj dekomence"],"All-time views":["Rigardoj dekomence"],"%(number)s View":["Rigardo de %(number)s","Rigardoj de %(number)s"],"Best overall day":["La plej bona tago ĝenerale"],"Views today":["Rigardoj hodiaŭ"],"Months":["Monatoj"],"Weeks":["Semajnoj"],"Days":["Tagoj"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["Io misis dum ŝargo de statistikaĵoj. Bonvole provu denove pli poste aŭ {{a}}rigardu viajn statistikaĵojn nun ĉe WordPress.com{{/a}}"],"Click to view detailed stats.":["Alklaku por vidi detalitajn statistikaĵojn."],"Views: %(numberOfViews)s":["Rigardoj: %(numberOfViews)s"],"Week of %(date)s":["Semajno de %(date)s"],"Site Security":["Reteja sekureco"],"Activate recommended features":["Aktivigi rekomenditajn ecojn"],"Link to WordPress.com":["Ligi al WordPress.com"],"Unlink me from WordPress.com":["Malligi min de WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[" Eraro dum konektiĝo kun Jetpack. Bonvole alklaku al \"Konektiĝi kun WordPress.com\" denove."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["Eraro dum konektiĝo kun Jetpack; malaktivigu poste reaktivigu la kromprogramon Jetpack, post tio ree konektiĝu."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Vi bezonas resti ensalutinta al via WordPressa blogo dum vi rajtigas Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Via Jetpack misfunkcias{{/s}} Ni pardonpetas pro la problemo. Bonvole provu denove pli poste, se la problemo daŭros bonvole kontaktu helpon uzante tiun ĉi mesaĝon: %(error_key)s"],"Disconnecting Jetpack":["Malkonekto de Jetpack"],"Learn more":["Lerni pli"],"Posts":["Afiŝoj"],"Front page":["Ĉefpaĝo"],"Upload videos":[""],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Montri rilatan enhavon post afiŝoj"],"Related":["Rilataj"],"Save":["Konservi"],"Email Address":["Retpoŝta adreso"],"Media":["Aŭdvidaĵoj"],"Themes":["Etosoj"],"Site Stats":["Statistikaĵoj de la retejo"],"Sharing":["Kunhavigado"],"Testimonials":["Atestoj"],"Cancel":["Rezigni"],"Comments":["Komentoj"],"Ignored Phrases":["Ignoritaj frazoj"],"Use automatically detected language to proofread posts and pages":["Uzi aŭtomate trovitan lingvon por provlegi afiŝojn kaj paĝojn"],"Redundant Phrases":["Ripetaj frazoj"],"Phrases to Avoid":["Evitindaj frazoj"],"Passive Voice":["Pasivo"],"Jargon":["Ĵargono"],"Hidden Verbs":["Kaŝitaj verboj"],"Double Negatives":["Duobla neado"],"Diacritical Marks":["Diakritaĵoj"],"Complex Phrases":["Kompleksaj frazoj"],"Bias Language":["Antaŭjuĝa lingvaĵo"],"English Options":["Anglaj opcioj"],"Proofreading":["Provlegado"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack ne povis kontakti WordPress.com: %(error_key)s. Tio kutime signifas, ke io estas malĝuste agordita ĉe via interreta gastiganto."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com nun spertas problemojn kaj ne povas fueli vian Jetpack. Bonvole provu denove poste."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Via Jetpack misfunkcias.{{/s}} Konekto de tiu ĉi retejo kun WordPress.com ne eblas. Tio kutime signifas, ke via retejo ne estas publike alirebla (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Via retejo bezonas esti publike alirebla por uzi Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["Vi sukcese malkonektis Jetpack"],"Edit":["Redakti"],"Connected":["Konektita"],"Activate":["Aktivigi"],"Active":["Aktivaj"],"Search":["Priserĉi"],"Settings":["Agordoj"],"Learn More":["Lerni pli"],"Disconnect Jetpack":["Malkonekti Jetpack"],"Test your site’s compatibility with Jetpack.":["Elprovi la kongruecon de via retejo kun Jetpack."],"Settings header\u0004Plugin Autoupdates":[""],"Settings header\u0004Downtime monitoring":["Observado de malfunkcio"],"Settings header\u0004Privacy Settings":["Privatecaj agordoj"],"Settings header\u0004WordPress.com toolbar":["Ilobreto de WordPress.com"],"Settings header\u0004Composing":["Verkado"],"Settings header\u0004Site stats":["Retejaj statistikaĵoj"],"Settings header\u0004Search engine optimization":["Optimumigo por serĉiloj"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Kunhavigaj butonoj"],"Settings header\u0004Publicize connections":["Konektoj de Publici"],"Settings header\u0004Like buttons":["Ŝat-butonoj"],"Settings header\u0004WordPress.com log in":["Ensaluto al WordPress.com"],"Settings header\u0004Brute force attack protection":["Protekto de brutfortaj atakoj"],"Settings header\u0004Backups and security scanning":["Sekurkopioj kaj sekureca skanado"],"Settings header\u0004Spam filtering":["Filtrado de trudaĵoj"],"Navigation item.\u0004Performance":[""],"Navigation item.\u0004My Plan":[""],"Navigation item.\u0004Dev Tools":["Iloj por programistoj"],"Navigation item.\u0004Settings":["Agordoj"],"Navigation item.\u0004Discussion":["Diskuto"],"Navigation item.\u0004Traffic":["Trafiko"],"Navigation item.\u0004Sharing":["Kunhavigo"],"Navigation item.\u0004At A Glance":["Je ekrigardo"],"Navigation item.\u0004Plans":["Pakaĵoj"],"Navigation item.\u0004Writing":["Verkado"],"Navigation item.\u0004Reset Options (dev only)":["Restarigi opciojn (nur programistaj versioj)"],"Navigation item.\u0004Security":["Sekureco"],"Navigation item.\u0004At a Glance":["Je ekrigardo"],"Search term.\u0004terms of service":["uzkondiĉoj"],"Search term.\u0004tos":["tos"],"Search term.\u0004gdpr":["gdpr"],"Search term.\u0004data":["datumoj"],"Search term.\u0004tracks":["spuroj"],"Search term.\u0004privacy":["privateco"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["Promociiĝu"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Promociiĝi"],"Button caption\u0004Saving…":["Konservas..."],"Button caption\u0004Save settings":["Konservi agordojn"],"A heading for a block of related posts.\u0004Related":["Rilataj"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Antaŭrigardo"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Resti konektita"],"A caption for a button to disconnect.\u0004Disconnect":["Malkonektiĝi"],"Short warning message\u0004Updates needed":["Ĝisdatigoj bezonataj"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Pagita"],"A header for a preview area in the configuration screen.\u0004Preview":["Antaŭrigardo"],"Ads header\u0004Ads":["Reklamoj"],"Dashboard widget header\u0004Site connection":["Reteja konekto"],"Dashboard widget header\u0004Account connection":["Konekto de konto"],"A caption for a small button to fix security issues.\u0004Threats":["Minacoj"],"A caption for a small button to fix security issues.\u0004FIX":["RIPARI"],"Short warning message about new threats found.\u0004Threats found!":["Minacoj trovitaj!"],"Short warning message about site having no security scan.\u0004No scanning":["Neniu skanado"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Promociiĝi"],"Short message informing user that the site is secure.\u0004Secure":["Sekura"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Nevalida ŝlosilo"],"Caption for a button to set up a feature.\u0004Set up":["Agordi"],"verb\u0004Copy":["Kopii"],"Shorthand for Privacy Policy.\u0004Privacy":["Privateco"],"Shorthand for Terms of Service.\u0004Terms":["Kondiĉoj"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Senerarigilo"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["Trudaj komentoj blokitaj."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-es_AR-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-es_AR-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index feaf1a7c..00000000
--- a/plugins/jetpack/languages/json/jetpack-es_AR-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"":{"po-revision-date":"2016-08-30 18:31:41+0000","mime-version":"1.0","content-type":"text/plain; charset=UTF-8","content-transfer-encoding":"8bit","plural-forms":"nplurals=2; plural=n != 1;","x-generator":"GlotPress/2.4.0-alpha","language":"es_AR","project-id-version":"Plugins - Jetpack by WordPress.com - Development (trunk)"},"We're here to help":[null,""],"Jetpack comes with free, basic support for all users.":[null,""],"Ask a question":[null,""],"Search our support site":[null,""],"Get a faster resolution to your support questions.":[null,""],"Host fast, high-quality, ad-free video.":[null,""],"Generate income with high-quality ads.":[null,""],"Real-time site backups and automatic threat resolution.":[null,""],"Protect against data loss, malware, and malicious attacks.":[null,""],"Integrate easily with Google Analytics.":[null,""],"Help your content get found and shared with SEO tools.":[null,""],"Protect your site from spam.":[null,""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[null,""],"Spam filtering":[null,""],"Daily, automated malware scanning":[null,""],"13Gb of high-speed video hosting":[null,""],"Daily, automated backups (unlimited storage)":[null,""],"Daily, automated malware scanning with automated resolution":[null,""],"Priority WordPress and security support":[null,""],"Unlimited high-speed video hosting":[null,""],"SEO preview tools":[null,""],"Site stats, related content, and sharing tools":[null,""],"Brute force attack protection and uptime monitoring":[null,""],"Unlimited, high-speed image hosting":[null,""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[null,""],"Read more about Jetpack benefits":[null,""],"An Automattic Airline":[null,""],"Manage site connection":[null,""],"Connect your account to WordPress.com to view more stats":[null,""],"Theme enhancements":[null,""],"Load more posts using the default theme behavior":[null,""],"Load more posts in page with a button":[null,""],"Load more posts as the reader scrolls down":[null,""],"Theme support required.":[null,""],"Learn more about adding support for Infinite Scroll to your theme.":[null,""],"Use excerpts instead of full posts on front page and archive pages":[null,""],"Show featured images":[null,""],"Must be enabled to use tiled galleries.":[null,""],"Enable the WordPress.com toolbar":[null,""],"The WordPress.com toolbar replaces the default admin bar and offers quick links to the Reader, all your sites, your WordPress.com profile, and notifications. Centralize your WordPress experience with a single global toolbar.":[null,""],"Writing tools available to you will be shown here when an administrator enables them.":[null,""],"Portfolios":[null,""],"Add, organize, and display {{portfolioLink}}portfolios{{/portfolioLink}}. If your theme doesn’t support portfolios yet, you can display them using the shortcode ( [portfolios] )":[null,""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[null,""],"Bing":[null,""],"Yandex":[null,""],"Generate XML sitemaps":[null,""],"Your sitemap is automatically sent to all major search engines for indexing.":[null,""],"Your site is not currently accessible to search engines. You might have \"Search Engine Visibility\" disabled in your {{a}}Reading Settings{{/a}}.":[null,""],"Collecting valuable traffic stats and insights":[null,""],"The image helps collect stats, but should work when hidden.":[null,""],"Count logged in page views from":[null,""],"Allow stats reports to be viewed by":[null,""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[null,""],"Configure your SEO settings":[null,""],"In \"Upgrade\"":[null,""],"Configure your Google Analytics settings":[null,""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[null,""],"Enable ads and display an ad below each post":[null,""],"Display an additional ad at the top of each page":[null,""],"Configure your sharing buttons":[null,""],"Sharing buttons can be added to your posts so that your users can share your content to their social networks and show their support.":[null,""],"Connect your social media accounts":[null,""],"Connect your user account to WordPress.com to use this feature":[null,""],"Publicize lets you connect your site to various social networking services. Once connected to a service, you can share your posts with that service automatically.":[null,""],"Allow readers to show their appreciation of your posts by adding a like button to your content":[null,""],"Match accounts using email addresses":[null,""],"Require accounts to use WordPress.com Two-Step Authentication":[null,""],"Add to whitelist":[null,""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[null,""],"Your site is backed up and threat-free.":[null,""],"Checking your spam protection…":[null,""],"Fetching key…":[null,""],"Your site needs an Antispam key.":[null,""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[null,""],"Your site is not protected from spam.":[null,""],"Your Antispam key is valid.":[null,""],"Your site is protected from spam.":[null,""],"Checking key…":[null,""],"Your API key":[null,""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[null,""],"No search results found for %(term)s":[null,""],"Enter a search term to find settings or close search.":[null,""],"Connections":[null,""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[null,""],"Your site is connected to WordPress.com.":[null,""],"You are the Jetpack owner.":[null,""],"Connected as {{span}}%(username)s{{/span}}":[null,""],"View your Email Followers":[null,""],"Connect your user account to WordPress.com to view your email followers":[null,""],"Color scheme":[null,""],"Enable Markdown use for comments.":[null,""],"router There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[null,""],"Updated settings.":[null,""],"Error updating settings. %(error)s":[null,""],"Regenerated Post by Email address.":[null,""],"Error regenerating Post by Email address. %(error)s":[null,""],"Updated settings. Refreshing page…":[null,""],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because:":[null,""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[null,""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[null,""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[null,""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[null,""],"Configure Google Analytics settings.":[null,""],"Image of WordPress login screen protected by Jetpack":[null,""],"Google Analytics":[null,""],"Track website statistics with Google Analytics for a deeper understanding of your website visitors and customers.":[null,""],"Configure Google Analytics":[null,""],"Activate Google Analytics":[null,""],"Download the Free Apps":[null,""],"Upgrade Focus: VideoPress For Weddings":[null,""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[null,""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[null,""],"Display an ad unit at the top of your site.":[null,""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[null,""],"Image of managing your sites themes on your WordPress.com dashboard":[null,""],"Image of managing your sites plugins on your WordPress.com dashboard":[null,""],"Image of the new post editor on your WordPress.com dashboard":[null,""],"Image of your sites stats on your WordPress.com dashboard":[null,""],"Image of your WordPress.com reader":[null,""],"Example of three devices to use the WordPress apps. An iPhone, Android phone, and a apple laptop computer.":[null,""],"Download the free WordPress app for your iPhone":[null,""],"Download the free WordPress app for your Android based phone":[null,""],"Download the free WordPress app for your apple computer":[null,""],"Download the free WordPress app for your PC ":[null,""],"Download the free WordPress app for your Linux machine":[null,""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[null,""],"Upgrade to a paid plan to unlock world-class security, spam protection tools, priority support, SEO and monetization tools.":[null,""],"Ads":[null,""],"Earn income by allowing Jetpack to display high quality ads (powered by WordAds).":[null,""],"Activate Ads":[null,""],"Income generation from ads":[null,""],"Premium traffic and monetization tools":[null,""],"The Jetpack Premium plan now offers you the ability to generate income from your site by showing high-quality paid ads to your visitors. Professional plan customers also benefit from SEO tools to help optimize search engine traffic.":[null,""],"We support all Jetpack users, regardless of plan. But customers on a paid subscription enjoy priority support so that security issues are identified and fixed for you as soon as possible. ":[null,""],"In \"Mobile\"":[null,""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[null,""],"View your earnings":[null,""],"Activate VideoPress":[null,""],"Upload Videos Now":[null,""],"Make sure your site is easily found on search engines with SEO tools for your content and social posts.":[null,""],"Activate this module to use the advanced SEO tools.":[null,""],"How much is your website worth?":[null,""],"For less than the price of a coffee a month you can rest easy knowing your hard work (or livelihood) is backed up.":[null,""],"Configure Site SEO":[null,""],"Activate SEO Tools":[null,""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[null,""],"Introducing our most affordable backups and security plan yet":[null,""],"The Personal Plan keeps your data, site, and hard work safe.":[null,""],"Your site is on the Jetpack Personal plan":[null,""],"With this plan you are provided with spam-protection, daily backups (up to 30 days), and unlimited storage.":[null,""],"With this plan you are provided with spam-protection, daily backups (up to 30 days), unlimited backup storage, security scanning, 13Gb of ad-free video hosting, income generation from ads, and priority support.":[null,""],"You get spam-protection, real-time backups (unlimited archive), unlimited backup storage, security scanning, unlimited ad-free video hosting, income generation from ads, SEO tools, and priority support.":[null,""],"Daily backup of all your site data with unlimited space and one-click restores (powered by VaultPress).":[null,""],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support (powered by VaultPress).":[null,""],"Backups & Security Scanning":[null,""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, one-click threat resolution, and priority support (powered by VaultPress).":[null,""],"13Gb of fast, optimized, and ad-free video hosting for your site (powered by VideoPress).":[null,""],"Video Hosting":[null,""],"Fast, optimized, ad-free, and unlimited video hosting for your site (powered by VideoPress).":[null,""],"SEO Tools":[null,""],"Advanced SEO tools to help your site get found when people search for relevant content.":[null,""],"Daily and on-demand security scanning":[null,""],"Real-time backups and one-click threat resolution":[null,""],"Unlimited and ad-free video hosting":[null,""],"Need more? Running a business site?":[null,""],"If your site is important to you, consider protecting and improving it with some of our advanced features: ":[null,""],"On-demand security scanning":[null,""],"Advanced SEO tools":[null,""],"Configure your SEO settings.":[null,""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[null,""],"You are running Jetpack on a staging server.":[null,""],"More Info":[null,""],"Search your content.":[null,""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[null,""],"Your current IP: %(ip)s":[null,""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[null,""],"This will reset all Jetpack options, are you sure?":[null,""],"Search for a Jetpack feature.":[null,""],"Upgrade Jetpack and our state-of-the-art security scanner will hunt out malicious files and report them immediately so that you're never unaware of what is happening on your website.":[null,""],"You can see the information about security scanning in the \"At a Glance\" section.":[null,""],"Configure your Security Scans":[null,""],"This module has no configuration options":[null,"Este módulo no tiene opciones de configuración."],"Let search engines and visitors know that you are serious about your websites integrity by upgrading Jetpack. Our anti-spam tools will eliminate comment spam, protect your SEO, and make it easier for visitors to stay in touch.":[null,"Que los motores de búsqueda y tus visitantes sepan que te tomás en serio la integridad de tus sitios mejorando Jetpack. Nuestras herramientas anti-spam eliminarán el spam de comentarios, protegerán tu posicionamiento en buscadores y harán fácil a tus visitantes seguir en contacto."],"Real-time offsite backups with automated restores deliver peace-of-mind, so you can focus on writing great content and increasing traffic while we protect every aspect of your investment. Upgrade today.":[null,""],"{{link}}Configure your %(module_slug)s Settings {{/link}}":[null,""],"Subscriber":[null,""],"Big iPhone/iPad Update Now Available":[null,""],"The WordPress for Android App Gets a Big Facelift":[null,""],"WordPress.com Likes are:":[null,""],"Comments headline":[null,""],"A few catchy words to motivate your readers to comment.":[null,""],"Show a \"follow blog\" option in the comment form":[null,""],"Show a \"follow comments\" option in the comment form":[null,""],"Put a chart showing 48 hours of views in the admin bar":[null,""],"Hide the stats smiley face image":[null,""],"Whitelisted IP addresses":[null,""],"Show photo metadata (Exif) in carousel, when available":[null,""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[null,""],"Copied!":[null,""],"Highlight and copy the following text to your clipboard:":[null,""],"Regenerate address":[null,""],"Automatically proofread content when: ":[null,""],"A post or page is first published":[null,""],"A post or page is updated":[null,""],"Automatic Language Detection":[null,""],"The proofreader supports English, French, German, Portuguese and Spanish.":[null,""],"Enable proofreading for the following grammar and style rules: ":[null,""],"Add a phrase":[null,""],"Cheatin' uh?":[null,""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[null,""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[null,""],"Your Jetpack is already connected.":[null,""],"You're fueled up and ready to go, Jetpack is now active.":[null,""],"You're fueled up and ready to go.":[null,""],"You are currently running a development version of Jetpack.":[null,""],"Submit Beta feedback":[null,""],"You, %(userName)s, are not connected to WordPress.com.":[null,""],"What would you like to see on your Jetpack Dashboard?":[null,""],"Let us know!":[null,""],"Welcome to Jetpack":[null,""],"Please connect to or create a WordPress.com account to start using Jetpack. This will enable powerful security, traffic, and customization services.":[null,""],"No account? Create one for free…":[null,""],"Saving…":[null,""],"Save Settings":[null,""],"Jetpack Stats Icon":[null,""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[null,""],"Activate Site Stats":[null,""],"Security Scanning":[null,""],"Upgrade":[null,""],"ACTIVE":[null,""],"Hackers, botnets and spammers attack websites indiscriminately. Their goal is to attack everywhere and often. Our goal is to help you prepare by blocking these threats, and in worst-case-scenarios we'll be here to help you restore your site to its former glory.":[null,""],"Your site is on the Free Jetpack Plan":[null,""],"Your site is on the Jetpack Premium plan":[null,""],"Your site is on the Jetpack Professional plan":[null,""],"Your site is on Development Mode":[null,""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[null,""],"State-of-the-art spam defense powered by Akismet.":[null,""],"View your spam stats":[null,""],"Configure Akismet":[null,""],"View your security dashboard":[null,""],"Configure VaultPress":[null,""],"Real-time backups":[null,""],"One-click threat resolution":[null,""],"Compare Plans":[null,""],"Maximum grade security":[null,""],"Real-time backup with unlimited space, one-click restores, bulletproof spam monitoring, malware defense, and brute-force login protection - all in one place and optimized for WordPress.":[null,""],"Bulletproof spam filtering protects your brand, your readers, and improves SEO. Malware scanning helps maintain peace of mind and keeps your backend safe from intruders.":[null,""],"Enjoy priority support":[null,""],"The site is in Development Mode, so you can not connect to WordPress.com.":[null,""],"Link your account to WordPress.com to get the most out of Jetpack.":[null,""],"Powerful WordPress.com features on every device.":[null,""],"Manage all your sites from a single dashboard.":[null,""],"Feel the performance":[null,""],"All the WordPress apps are built for speed. You'll notice the difference in performance immediately, with near-instant page-loads and less waiting around.":[null,""],"Bulk and automatic updates":[null,""],"Most security flaws are found in outdated plugins. Use our Web and Desktop apps to turn on auto-updates or update plugins manually for all your websites in one convenient place.":[null,""],"Focus on your Writing":[null,""],"Our new editor is lightning fast, optimized for writers and eliminates distractions, giving you the ability to focus on your work.":[null,""],"Try the New Editor":[null,""],"Connect with your Visitors":[null,""],"Monitor your visitors with advanced stats. Watch for trends, learn what content performs the best and understand your visitors from anywhere in the world.":[null,""],"View Your Stats":[null,""],"Connect with the Community":[null,""],"The WordPress apps all have impressively fast and full featured readers so you can catch up with your favorite sites and join the conversation anywhere, any time.":[null,""],"Launch Reader":[null,""],"Inspiration strikes any time, anywhere.":[null,""],"Get WordPress apps for any screen.":[null,""],"In Your Pocket":[null,""],"Publish content, track stats, moderate comments and so much more from anywhere in the world. Our mobile apps are open source, free and available to you on Apple or Android devices.":[null,""],"WordPress.com in the App Store":[null,""],"WordPress.com in Google Play":[null,""],"On Your Desktop":[null,""],"A desktop app that gives WordPress a permanent home on your computer. Not to mention the distraction free environment you get writing outside of a web browser.":[null,""],"WordPress.com for Mac OS X":[null,""],"WordPress.com for Windows":[null,""],"WordPress.com for Linux":[null,""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[null,""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[null,""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[null,""],"Total malicious attacks blocked on your site.":[null,""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[null,""],"All plugins are up-to-date. Awesome work!":[null,""],"{{a}}Activate Manage{{/a}} to turn on auto updates and manage your plugins from WordPress.com.":[null,""],"Jetpack is improving and optimizing your image speed.":[null,""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[null,""],"Security":[null,""],"Performance":[null,""],"Backups":[null,""],"{{a}}View backup details{{/a}}.":[null,""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[null,""],"Unavailable in Dev Mode.":[null,""],"Spam Protection":[null,""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[null,""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[null,""],"Invalid key":[null,""],"Unavailable in Dev Mode":[null,""],"Activating recommended features…":[null,""],"Recommended features active.":[null,""],"Recommended features failed to activate. %(error)s":[null,""],"%(slug)s has been activated.":[null,""],"%(slug)s failed to activate. %(error)s":[null,""],"%(slug)s has been deactivated.":[null,""],"%(slug)s failed to deactivate. %(error)s":[null,""],"Updating %(slug)s settings…":[null,""],"Updated %(slug)s settings.":[null,""],"Error updating %(slug)s settings. %(error)s":[null,""],"Updating %(slug)s address…":[null,""],"Regenerated %(slug)s address .":[null,""],"Error regenerating %(slug)s address. %(error)s":[null,""],"Resetting Jetpack options…":[null,""],"Options reset.":[null,""],"Options failed to reset.":[null,""],"There was an error disconnecting Jetpack. Error: %(error)s":[null,""],"Unlinking from WordPress.com":[null,""],"Unlinked from WordPress.com.":[null,""],"Error unlinking from WordPress.com. %(error)s":[null,""],"At A Glance":[null,""],"Clichés":[null,""],"Dashboard":[null,""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[null,""],"Automattic's Privacy Policy":[null,""],"WordPress.com Terms of Service":[null,""],"{{a}}Activate Site Verification{{/a}} to verify your site and increase ranking with Google, Bing, and Pinterest.":[null,""],"Site Verification Tools are active. Ensure your site is verified with Google, Bing, and Pinterest for more accurate indexing and ranking. {{a}}Verify now{{/a}}":[null,""],"Site Verification Tools":[null,""],"{{a}}Activate Photon{{/a}} to enhance the performance and speed of your images.":[null,""],"Image Performance %(photon)s":[null,""],"{{a}}Activate Manage and turn on auto updates{{/a}}":[null,""],"{{a}}Turn on plugin auto updates{{/a}}":[null,""],"Plugin Updates":[null,""],"To automatically back up your entire site, please {{a}}upgrade your account.{{/a}}.":[null,""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[null,""],"No threats found, you're good to go!":[null,""],"{{a}}Contact Support{{/a}}":[null,""],"{{a}}View details at VaultPress.com{{/a}}":[null,""],"{{a}}Activate Monitor{{/a}} to receive notifications if your site goes down.":[null,""],"Loading…":[null,""],"Downtime Monitoring":[null,""],"{{button}}View more stats on WordPress.com {{/button}}":[null,""],"{{button}}View detailed stats{{/button}}":[null,""],"All-time comments":[null,""],"All-time views":[null,""],"Best overall day":[null,""],"Views today":[null,""],"Months":[null,""],"Weeks":[null,""],"Days":[null,""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[null,""],"Click to view detailed stats.":[null,""],"Views: %(numberOfViews)s":[null,""],"Week of %(date)s":[null,""],"Manage security on WordPress.com":[null,""],"Skip this step":[null,""],"Skip the Jetpack Jumpstart process":[null,""],"Features can be activated or deactivated at any time.":[null,""],"Jetpack's recommended features include:":[null,""],"Activate Recommended Features":[null,""],"Quickly enhance your site by activating Jetpack's recommended features.":[null,""],"Jump Start your Site":[null,""],"Link to WordPress.com":[null,""],"Unlink me from WordPress.com":[null,""],"Join the millions of users who rely on Jetpack to enhance and secure their sites. We're passionate about WordPress and here to make your life easier.":[null,""],"Jetpack is supported by some of the most technical and passionate people in the community. They're located around the globe and ready to help you.":[null,""],"Did we mention free, professional support?":[null,""],"Jetpack utilizes the state-of-the-art WordPress.com content delivery network to load your gorgeous imagery super fast. Optimized for any device, and its completely free.":[null,""],"Lightning fast, optimized images":[null,""],"Never fall behind on a security release or waste time updating multiple sites.":[null,""],"Automatic site updates.":[null,""],"Live site monitoring.":[null,""],"Gain peace of mind with Protect, the tool that has blocked billions of login attacks across millions of sites.":[null,""],"Block site attacks.":[null,""],"Jetpack blocks malicious log in attempts, lets you know if your site goes down, and can automatically update your plugins, so you don’t have to worry.":[null,""],"Site security and peace of mind":[null,""],"Jetpack harnesses the power of WordPress.com to show you detailed insights about your visitors, what they’re reading, and where they’re coming from.":[null,""],"Keep visitors engaged by giving them more to share and read with Related Posts.":[null,""],"Increase page views.":[null,""],"Give visitors the tools to share and subscribe to your content.":[null,""],"Build a community.":[null,""],"Sharing & Like Buttons":[null,""],"Automated social marketing.":[null,""],"Jetpack has many traffic and engagement tools to help you get more viewers to your site and keep them there.":[null,""],"Manage Plugins":[null,""],"Stress less. Monitor will send you real-time alerts if your site ever goes down.":[null,"Relajáte. Monitor te enviará alertas en tiempo real si tu sitio se cae."],"Track your growth":[null,"Seguí tu crecimiento"],"Use Publicize to automatically share your posts with friends, followers, and the world.":[null,"Usá Publicitar para compartir automáticamente tus entradas con amigos, seguidores y el mundo."],"Drive more traffic to your site":[null,"Traé más tráfico a tu sitio"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[null,""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[null,"Tuvimos un inconveniente conectando Jetpack. Desactivá y reactivá el plugin Jetpack, luego conectáte de nuevo."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[null,"Tenés que mantener la sesión iniciada en tu blog WordPress mientras autorizas Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[null,""],"Disconnecting Jetpack":[null,"Desconectando Jetpack"],"Learn more":[null,"Más Información"],"Pinterest":[null,"Pinterest"],"Google":[null,"Google"],"Show related content after posts":[null,"Mostrar contenido relacionado después de las entradas"],"Use a large and visually striking layout":[null,"Usar un diseño grande y visualmente atractivo."],"Show a \"Related\" header to more clearly separate the related section from posts":[null,"Mostrar el texto \"Relacionado\" para separar más claramente la sección de las entradas"],"Related":[null,"Relacionado"],"Email Address":[null,"Dirección de email"],"Media":[null,"Medios"],"Site Stats":[null,"Estadísticas del sitio"],"Testimonials":[null,"Testimonios"],"Comments":[null,"Comentarios"],"Ignored Phrases":[null,"Frases ignoradas"],"Use automatically detected language to proofread posts and pages":[null,"Utilizar idioma detectado automáticamente para corregir entradas y páginas"],"Redundant Phrases":[null,"Frases Redundantes"],"Phrases to Avoid":[null,"Frases para Evitar"],"Passive Voice":[null,"Voz Pasiva"],"Jargon":[null,"Jerga"],"Hidden Verbs":[null,"Verbos ocultos"],"Double Negatives":[null,"Doble negaciones"],"Diacritical Marks":[null,"Signos Diacríticos"],"Complex Phrases":[null,"Frases Complejas"],"Bias Language":[null,"Sesgos de Idioma"],"English Options":[null,"Opciones de Inglés"],"Proofreading":[null,"Revisión"],"Connect Jetpack":[null,"Conectá Jetpack"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[null,""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[null,"WordPress.com tiene problemas ahora y no puede reabastecer tu Jetpack. Por favor, probá de nuevo luego."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[null,""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[null,""],"You have successfully disconnected Jetpack":[null,""],"Active":[null,"Activo"],"Settings":[null,"Configuración"],"Learn More":[null,"Más Información"],"Disconnect Jetpack":[null,"Desconectar Jetpack"],"Test your site’s compatibility with Jetpack.":[null,""]} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-es_CL-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-es_CL-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index ce86a92d..00000000
--- a/plugins/jetpack/languages/json/jetpack-es_CL-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"":{"po-revision-date":"2016-03-07 20:53:58+0000","mime-version":"1.0","content-type":"text/plain; charset=UTF-8","content-transfer-encoding":"8bit","plural-forms":"nplurals=2; plural=n != 1;","x-generator":"GlotPress/2.4.0-alpha","language":"es_CL","project-id-version":"Plugins - Jetpack by WordPress.com - Development (trunk)"},"We're here to help":[null,""],"Jetpack comes with free, basic support for all users.":[null,""],"Ask a question":[null,""],"Search our support site":[null,""],"Get a faster resolution to your support questions.":[null,""],"Host fast, high-quality, ad-free video.":[null,""],"Generate income with high-quality ads.":[null,""],"Real-time site backups and automatic threat resolution.":[null,""],"Protect against data loss, malware, and malicious attacks.":[null,""],"Integrate easily with Google Analytics.":[null,""],"Help your content get found and shared with SEO tools.":[null,""],"Protect your site from spam.":[null,""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[null,""],"Spam filtering":[null,""],"Daily, automated malware scanning":[null,""],"13Gb of high-speed video hosting":[null,""],"Daily, automated backups (unlimited storage)":[null,""],"Daily, automated malware scanning with automated resolution":[null,""],"Priority WordPress and security support":[null,""],"Unlimited high-speed video hosting":[null,""],"SEO preview tools":[null,""],"Site stats, related content, and sharing tools":[null,""],"Brute force attack protection and uptime monitoring":[null,""],"Unlimited, high-speed image hosting":[null,""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[null,""],"Read more about Jetpack benefits":[null,""],"An Automattic Airline":[null,""],"Manage site connection":[null,""],"Connect your account to WordPress.com to view more stats":[null,""],"Theme enhancements":[null,""],"Load more posts using the default theme behavior":[null,""],"Load more posts in page with a button":[null,""],"Load more posts as the reader scrolls down":[null,""],"Theme support required.":[null,""],"Learn more about adding support for Infinite Scroll to your theme.":[null,""],"Use excerpts instead of full posts on front page and archive pages":[null,""],"Show featured images":[null,""],"Must be enabled to use tiled galleries.":[null,""],"Enable the WordPress.com toolbar":[null,""],"The WordPress.com toolbar replaces the default admin bar and offers quick links to the Reader, all your sites, your WordPress.com profile, and notifications. Centralize your WordPress experience with a single global toolbar.":[null,""],"Writing tools available to you will be shown here when an administrator enables them.":[null,""],"Portfolios":[null,""],"Add, organize, and display {{portfolioLink}}portfolios{{/portfolioLink}}. If your theme doesn’t support portfolios yet, you can display them using the shortcode ( [portfolios] )":[null,""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[null,""],"Bing":[null,""],"Yandex":[null,""],"Generate XML sitemaps":[null,""],"Your sitemap is automatically sent to all major search engines for indexing.":[null,""],"Your site is not currently accessible to search engines. You might have \"Search Engine Visibility\" disabled in your {{a}}Reading Settings{{/a}}.":[null,""],"Collecting valuable traffic stats and insights":[null,""],"The image helps collect stats, but should work when hidden.":[null,""],"Count logged in page views from":[null,""],"Allow stats reports to be viewed by":[null,""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[null,""],"Configure your SEO settings":[null,""],"In \"Upgrade\"":[null,""],"Configure your Google Analytics settings":[null,""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[null,""],"Enable ads and display an ad below each post":[null,""],"Display an additional ad at the top of each page":[null,""],"Configure your sharing buttons":[null,""],"Sharing buttons can be added to your posts so that your users can share your content to their social networks and show their support.":[null,""],"Connect your social media accounts":[null,""],"Connect your user account to WordPress.com to use this feature":[null,""],"Publicize lets you connect your site to various social networking services. Once connected to a service, you can share your posts with that service automatically.":[null,""],"Allow readers to show their appreciation of your posts by adding a like button to your content":[null,""],"Match accounts using email addresses":[null,""],"Require accounts to use WordPress.com Two-Step Authentication":[null,""],"Add to whitelist":[null,""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[null,""],"Your site is backed up and threat-free.":[null,""],"Checking your spam protection…":[null,""],"Fetching key…":[null,""],"Your site needs an Antispam key.":[null,""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[null,""],"Your site is not protected from spam.":[null,""],"Your Antispam key is valid.":[null,""],"Your site is protected from spam.":[null,""],"Checking key…":[null,""],"Your API key":[null,""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[null,""],"No search results found for %(term)s":[null,""],"Enter a search term to find settings or close search.":[null,""],"Connections":[null,""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[null,""],"Your site is connected to WordPress.com.":[null,""],"You are the Jetpack owner.":[null,""],"Connected as {{span}}%(username)s{{/span}}":[null,""],"View your Email Followers":[null,""],"Connect your user account to WordPress.com to view your email followers":[null,""],"Color scheme":[null,""],"Enable Markdown use for comments.":[null,""],"router There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[null,""],"Updated settings.":[null,""],"Error updating settings. %(error)s":[null,""],"Regenerated Post by Email address.":[null,""],"Error regenerating Post by Email address. %(error)s":[null,""],"Updated settings. Refreshing page…":[null,""],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because:":[null,""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[null,""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[null,""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[null,""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[null,""],"Configure Google Analytics settings.":[null,""],"Image of WordPress login screen protected by Jetpack":[null,""],"Google Analytics":[null,""],"Track website statistics with Google Analytics for a deeper understanding of your website visitors and customers.":[null,""],"Configure Google Analytics":[null,""],"Activate Google Analytics":[null,""],"Download the Free Apps":[null,""],"Upgrade Focus: VideoPress For Weddings":[null,""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[null,""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[null,""],"Display an ad unit at the top of your site.":[null,""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[null,""],"Image of managing your sites themes on your WordPress.com dashboard":[null,""],"Image of managing your sites plugins on your WordPress.com dashboard":[null,""],"Image of the new post editor on your WordPress.com dashboard":[null,""],"Image of your sites stats on your WordPress.com dashboard":[null,""],"Image of your WordPress.com reader":[null,""],"Example of three devices to use the WordPress apps. An iPhone, Android phone, and a apple laptop computer.":[null,""],"Download the free WordPress app for your iPhone":[null,""],"Download the free WordPress app for your Android based phone":[null,""],"Download the free WordPress app for your apple computer":[null,""],"Download the free WordPress app for your PC ":[null,""],"Download the free WordPress app for your Linux machine":[null,""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[null,""],"Upgrade to a paid plan to unlock world-class security, spam protection tools, priority support, SEO and monetization tools.":[null,""],"Ads":[null,""],"Earn income by allowing Jetpack to display high quality ads (powered by WordAds).":[null,""],"Activate Ads":[null,""],"Income generation from ads":[null,""],"Premium traffic and monetization tools":[null,""],"The Jetpack Premium plan now offers you the ability to generate income from your site by showing high-quality paid ads to your visitors. Professional plan customers also benefit from SEO tools to help optimize search engine traffic.":[null,""],"We support all Jetpack users, regardless of plan. But customers on a paid subscription enjoy priority support so that security issues are identified and fixed for you as soon as possible. ":[null,""],"In \"Mobile\"":[null,""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[null,""],"View your earnings":[null,""],"Activate VideoPress":[null,""],"Upload Videos Now":[null,""],"Make sure your site is easily found on search engines with SEO tools for your content and social posts.":[null,""],"Activate this module to use the advanced SEO tools.":[null,""],"How much is your website worth?":[null,""],"For less than the price of a coffee a month you can rest easy knowing your hard work (or livelihood) is backed up.":[null,""],"Configure Site SEO":[null,""],"Activate SEO Tools":[null,""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[null,""],"Introducing our most affordable backups and security plan yet":[null,""],"The Personal Plan keeps your data, site, and hard work safe.":[null,""],"Your site is on the Jetpack Personal plan":[null,""],"With this plan you are provided with spam-protection, daily backups (up to 30 days), and unlimited storage.":[null,""],"With this plan you are provided with spam-protection, daily backups (up to 30 days), unlimited backup storage, security scanning, 13Gb of ad-free video hosting, income generation from ads, and priority support.":[null,""],"You get spam-protection, real-time backups (unlimited archive), unlimited backup storage, security scanning, unlimited ad-free video hosting, income generation from ads, SEO tools, and priority support.":[null,""],"Daily backup of all your site data with unlimited space and one-click restores (powered by VaultPress).":[null,""],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support (powered by VaultPress).":[null,""],"Backups & Security Scanning":[null,""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, one-click threat resolution, and priority support (powered by VaultPress).":[null,""],"13Gb of fast, optimized, and ad-free video hosting for your site (powered by VideoPress).":[null,""],"Video Hosting":[null,""],"Fast, optimized, ad-free, and unlimited video hosting for your site (powered by VideoPress).":[null,""],"SEO Tools":[null,""],"Advanced SEO tools to help your site get found when people search for relevant content.":[null,""],"Daily and on-demand security scanning":[null,""],"Real-time backups and one-click threat resolution":[null,""],"Unlimited and ad-free video hosting":[null,""],"Need more? Running a business site?":[null,""],"If your site is important to you, consider protecting and improving it with some of our advanced features: ":[null,""],"On-demand security scanning":[null,""],"Advanced SEO tools":[null,""],"Configure your SEO settings.":[null,""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[null,""],"You are running Jetpack on a staging server.":[null,""],"More Info":[null,""],"Search your content.":[null,""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[null,""],"Your current IP: %(ip)s":[null,""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[null,""],"This will reset all Jetpack options, are you sure?":[null,""],"Search for a Jetpack feature.":[null,""],"Upgrade Jetpack and our state-of-the-art security scanner will hunt out malicious files and report them immediately so that you're never unaware of what is happening on your website.":[null,""],"You can see the information about security scanning in the \"At a Glance\" section.":[null,""],"Configure your Security Scans":[null,""],"This module has no configuration options":[null,""],"Let search engines and visitors know that you are serious about your websites integrity by upgrading Jetpack. Our anti-spam tools will eliminate comment spam, protect your SEO, and make it easier for visitors to stay in touch.":[null,""],"Real-time offsite backups with automated restores deliver peace-of-mind, so you can focus on writing great content and increasing traffic while we protect every aspect of your investment. Upgrade today.":[null,""],"{{link}}Configure your %(module_slug)s Settings {{/link}}":[null,""],"Subscriber":[null,""],"Big iPhone/iPad Update Now Available":[null,""],"The WordPress for Android App Gets a Big Facelift":[null,""],"WordPress.com Likes are:":[null,""],"Comments headline":[null,""],"A few catchy words to motivate your readers to comment.":[null,""],"Show a \"follow blog\" option in the comment form":[null,""],"Show a \"follow comments\" option in the comment form":[null,""],"Put a chart showing 48 hours of views in the admin bar":[null,""],"Hide the stats smiley face image":[null,""],"Whitelisted IP addresses":[null,""],"Show photo metadata (Exif) in carousel, when available":[null,""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[null,""],"Copied!":[null,""],"Highlight and copy the following text to your clipboard:":[null,""],"Regenerate address":[null,""],"Automatically proofread content when: ":[null,""],"A post or page is first published":[null,""],"A post or page is updated":[null,""],"Automatic Language Detection":[null,""],"The proofreader supports English, French, German, Portuguese and Spanish.":[null,""],"Enable proofreading for the following grammar and style rules: ":[null,""],"Add a phrase":[null,""],"Cheatin' uh?":[null,""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[null,""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[null,""],"Your Jetpack is already connected.":[null,""],"You're fueled up and ready to go, Jetpack is now active.":[null,""],"You're fueled up and ready to go.":[null,""],"You are currently running a development version of Jetpack.":[null,""],"Submit Beta feedback":[null,""],"You, %(userName)s, are not connected to WordPress.com.":[null,""],"What would you like to see on your Jetpack Dashboard?":[null,""],"Let us know!":[null,""],"Welcome to Jetpack":[null,""],"Please connect to or create a WordPress.com account to start using Jetpack. This will enable powerful security, traffic, and customization services.":[null,""],"No account? Create one for free…":[null,""],"Saving…":[null,""],"Save Settings":[null,""],"Jetpack Stats Icon":[null,""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[null,""],"Activate Site Stats":[null,""],"Security Scanning":[null,""],"Upgrade":[null,""],"ACTIVE":[null,""],"Hackers, botnets and spammers attack websites indiscriminately. Their goal is to attack everywhere and often. Our goal is to help you prepare by blocking these threats, and in worst-case-scenarios we'll be here to help you restore your site to its former glory.":[null,""],"Your site is on the Free Jetpack Plan":[null,""],"Your site is on the Jetpack Premium plan":[null,""],"Your site is on the Jetpack Professional plan":[null,""],"Your site is on Development Mode":[null,""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[null,""],"State-of-the-art spam defense powered by Akismet.":[null,""],"View your spam stats":[null,""],"Configure Akismet":[null,""],"View your security dashboard":[null,""],"Configure VaultPress":[null,""],"Real-time backups":[null,""],"One-click threat resolution":[null,""],"Compare Plans":[null,""],"Maximum grade security":[null,""],"Real-time backup with unlimited space, one-click restores, bulletproof spam monitoring, malware defense, and brute-force login protection - all in one place and optimized for WordPress.":[null,""],"Bulletproof spam filtering protects your brand, your readers, and improves SEO. Malware scanning helps maintain peace of mind and keeps your backend safe from intruders.":[null,""],"Enjoy priority support":[null,""],"The site is in Development Mode, so you can not connect to WordPress.com.":[null,""],"Link your account to WordPress.com to get the most out of Jetpack.":[null,""],"Powerful WordPress.com features on every device.":[null,""],"Manage all your sites from a single dashboard.":[null,""],"Feel the performance":[null,""],"All the WordPress apps are built for speed. You'll notice the difference in performance immediately, with near-instant page-loads and less waiting around.":[null,""],"Bulk and automatic updates":[null,""],"Most security flaws are found in outdated plugins. Use our Web and Desktop apps to turn on auto-updates or update plugins manually for all your websites in one convenient place.":[null,""],"Focus on your Writing":[null,""],"Our new editor is lightning fast, optimized for writers and eliminates distractions, giving you the ability to focus on your work.":[null,""],"Try the New Editor":[null,""],"Connect with your Visitors":[null,""],"Monitor your visitors with advanced stats. Watch for trends, learn what content performs the best and understand your visitors from anywhere in the world.":[null,""],"View Your Stats":[null,""],"Connect with the Community":[null,""],"The WordPress apps all have impressively fast and full featured readers so you can catch up with your favorite sites and join the conversation anywhere, any time.":[null,""],"Launch Reader":[null,""],"Inspiration strikes any time, anywhere.":[null,""],"Get WordPress apps for any screen.":[null,""],"In Your Pocket":[null,""],"Publish content, track stats, moderate comments and so much more from anywhere in the world. Our mobile apps are open source, free and available to you on Apple or Android devices.":[null,""],"WordPress.com in the App Store":[null,""],"WordPress.com in Google Play":[null,""],"On Your Desktop":[null,""],"A desktop app that gives WordPress a permanent home on your computer. Not to mention the distraction free environment you get writing outside of a web browser.":[null,""],"WordPress.com for Mac OS X":[null,""],"WordPress.com for Windows":[null,""],"WordPress.com for Linux":[null,""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[null,""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[null,""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[null,""],"Total malicious attacks blocked on your site.":[null,""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[null,""],"All plugins are up-to-date. Awesome work!":[null,""],"{{a}}Activate Manage{{/a}} to turn on auto updates and manage your plugins from WordPress.com.":[null,""],"Jetpack is improving and optimizing your image speed.":[null,""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[null,""],"Security":[null,""],"Performance":[null,""],"Backups":[null,""],"{{a}}View backup details{{/a}}.":[null,""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[null,""],"Unavailable in Dev Mode.":[null,""],"Spam Protection":[null,""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[null,""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[null,""],"Invalid key":[null,""],"Unavailable in Dev Mode":[null,""],"Activating recommended features…":[null,""],"Recommended features active.":[null,""],"Recommended features failed to activate. %(error)s":[null,""],"%(slug)s has been activated.":[null,""],"%(slug)s failed to activate. %(error)s":[null,""],"%(slug)s has been deactivated.":[null,""],"%(slug)s failed to deactivate. %(error)s":[null,""],"Updating %(slug)s settings…":[null,""],"Updated %(slug)s settings.":[null,""],"Error updating %(slug)s settings. %(error)s":[null,""],"Updating %(slug)s address…":[null,""],"Regenerated %(slug)s address .":[null,""],"Error regenerating %(slug)s address. %(error)s":[null,""],"Resetting Jetpack options…":[null,""],"Options reset.":[null,""],"Options failed to reset.":[null,""],"There was an error disconnecting Jetpack. Error: %(error)s":[null,""],"Unlinking from WordPress.com":[null,""],"Unlinked from WordPress.com.":[null,""],"Error unlinking from WordPress.com. %(error)s":[null,""],"At A Glance":[null,""],"Clichés":[null,""],"Dashboard":[null,""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[null,""],"Automattic's Privacy Policy":[null,""],"WordPress.com Terms of Service":[null,""],"{{a}}Activate Site Verification{{/a}} to verify your site and increase ranking with Google, Bing, and Pinterest.":[null,""],"Site Verification Tools are active. Ensure your site is verified with Google, Bing, and Pinterest for more accurate indexing and ranking. {{a}}Verify now{{/a}}":[null,""],"Site Verification Tools":[null,""],"{{a}}Activate Photon{{/a}} to enhance the performance and speed of your images.":[null,""],"Image Performance %(photon)s":[null,""],"{{a}}Activate Manage and turn on auto updates{{/a}}":[null,""],"{{a}}Turn on plugin auto updates{{/a}}":[null,""],"Plugin Updates":[null,""],"To automatically back up your entire site, please {{a}}upgrade your account.{{/a}}.":[null,""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[null,""],"No threats found, you're good to go!":[null,""],"{{a}}Contact Support{{/a}}":[null,""],"{{a}}View details at VaultPress.com{{/a}}":[null,""],"{{a}}Activate Monitor{{/a}} to receive notifications if your site goes down.":[null,""],"Loading…":[null,""],"Downtime Monitoring":[null,""],"{{button}}View more stats on WordPress.com {{/button}}":[null,""],"{{button}}View detailed stats{{/button}}":[null,""],"All-time comments":[null,""],"All-time views":[null,""],"Best overall day":[null,""],"Views today":[null,""],"Months":[null,""],"Weeks":[null,""],"Days":[null,""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[null,""],"Click to view detailed stats.":[null,""],"Views: %(numberOfViews)s":[null,""],"Week of %(date)s":[null,""],"Manage security on WordPress.com":[null,""],"Skip this step":[null,""],"Skip the Jetpack Jumpstart process":[null,""],"Features can be activated or deactivated at any time.":[null,""],"Jetpack's recommended features include:":[null,""],"Activate Recommended Features":[null,""],"Quickly enhance your site by activating Jetpack's recommended features.":[null,""],"Jump Start your Site":[null,""],"Link to WordPress.com":[null,""],"Unlink me from WordPress.com":[null,""],"Join the millions of users who rely on Jetpack to enhance and secure their sites. We're passionate about WordPress and here to make your life easier.":[null,""],"Jetpack is supported by some of the most technical and passionate people in the community. They're located around the globe and ready to help you.":[null,""],"Did we mention free, professional support?":[null,""],"Jetpack utilizes the state-of-the-art WordPress.com content delivery network to load your gorgeous imagery super fast. Optimized for any device, and its completely free.":[null,""],"Lightning fast, optimized images":[null,""],"Never fall behind on a security release or waste time updating multiple sites.":[null,""],"Automatic site updates.":[null,""],"Live site monitoring.":[null,""],"Gain peace of mind with Protect, the tool that has blocked billions of login attacks across millions of sites.":[null,""],"Block site attacks.":[null,""],"Jetpack blocks malicious log in attempts, lets you know if your site goes down, and can automatically update your plugins, so you don’t have to worry.":[null,""],"Site security and peace of mind":[null,""],"Jetpack harnesses the power of WordPress.com to show you detailed insights about your visitors, what they’re reading, and where they’re coming from.":[null,""],"Keep visitors engaged by giving them more to share and read with Related Posts.":[null,""],"Increase page views.":[null,""],"Give visitors the tools to share and subscribe to your content.":[null,""],"Build a community.":[null,""],"Sharing & Like Buttons":[null,""],"Automated social marketing.":[null,""],"Jetpack has many traffic and engagement tools to help you get more viewers to your site and keep them there.":[null,""],"Manage Plugins":[null,""],"Stress less. Monitor will send you real-time alerts if your site ever goes down.":[null,""],"Track your growth":[null,""],"Use Publicize to automatically share your posts with friends, followers, and the world.":[null,""],"Drive more traffic to your site":[null,""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[null,""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[null,""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[null,""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[null,""],"Disconnecting Jetpack":[null,"Desconectando Jetpack"],"Learn more":[null,"Aprender más"],"Pinterest":[null,"Pinterest"],"Google":[null,"Google"],"Show related content after posts":[null,"Mostrar contenido relacionado después de las entradas"],"Use a large and visually striking layout":[null,"Usa un diseño grande y visualmente atractivo. "],"Show a \"Related\" header to more clearly separate the related section from posts":[null,"Mostrar el texto \"Relacionado\" para separar más claramente la sección de las entradas"],"Related":[null,"Relacionado"],"Email Address":[null,"Dirección de email"],"Media":[null,"Medios"],"Site Stats":[null,"Estadísticas del sitio"],"Testimonials":[null,"Testimonios"],"Comments":[null,"Comentarios"],"Ignored Phrases":[null,"Frases ignoradas"],"Use automatically detected language to proofread posts and pages":[null,"Utilizar idioma detectado automáticamente para corregir entradas y páginas"],"Redundant Phrases":[null,"Frases Redundantes"],"Phrases to Avoid":[null,"Frases para Evitar"],"Passive Voice":[null,"Voz Pasiva"],"Jargon":[null,"Jerga"],"Hidden Verbs":[null,"Verbos ocultos"],"Double Negatives":[null,"Doble negaciones"],"Diacritical Marks":[null,"Signos Diacríticos"],"Complex Phrases":[null,"Frases Complejas"],"Bias Language":[null,"Sesgos de Idioma"],"English Options":[null,"Opciones de Inglés"],"Proofreading":[null,"Revisión"],"Connect Jetpack":[null,"Conectar Jetpack"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[null,""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[null,"WordPress.com tiene problemas ahora mismo y no puede repostar tu Jetpack. Por favor, int&#233;ntalo m&#225;s tarde."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[null,""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[null,""],"You have successfully disconnected Jetpack":[null,""],"Active":[null,"Activo"],"Settings":[null,"Configuración"],"Learn More":[null,"Más Información"],"Disconnect Jetpack":[null,"Desconectar Jetpack"],"Test your site’s compatibility with Jetpack.":[null,""]} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-es_CR-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-es_CR-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 04853397..00000000
--- a/plugins/jetpack/languages/json/jetpack-es_CR-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"es_CR"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":[""],"We’re now collecting stats and securing your site. Welcome aboard.":[""],"{{a}}Skip, and explore features individually{{/a}}.":[""],"Jetpack Business Plan":[""],"Jetpack Premium Plan":[""],"Jetpack Personal Plan":[""],"Get started with hassle-free design, stats, and performance tools.":[""],"Welcome to Jetpack Free":[""],"Jetpack Free Plan":[""],"Explore Jetpack plans":[""],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":[""],"Jetpack offers so much more":[""],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":[""],"Support documentation":[""],"Chat bubbles representing getting in touch with support":[""],"Site Activity":[""],"Start publicizing now":[""],"Reach a wider audience by automatically sharing your posts on social media.":[""],"Increase traffic to your site":[""],"Explore free themes":[""],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":[""],"A wide variety of themes and tools to customize a site":[""],"Set up your site security":[""],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":[""],"Site stats showing an evolution in traffic and engagement":[""],"A hand holding a loupe":[""],"A chart showing an healthy increase in earnings":[""],"Interface showing a chronological list of changes and updates in a site":[""],"A cloud with multiple types of content floating around it":[""],"A folder holding real comments":[""],"Make your site faster":[""],"Load pages faster by serving your images from our global network of servers.":[""],"A fast and performant website":[""],"A secure site, locked and protected by Jetpack":[""],"These settings won't apply to related posts added using the block editor.":[""],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":[""],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":[""],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":[""],"Add Like buttons to your posts and pages":[""],"When visitors enjoy your content, let them show it with a Like.":[""],"Explore your Jetpack Professional plan!":[""],"Explore your Jetpack Premium plan!":[""],"Explore your Jetpack Personal plan!":[""],"Create account":[""],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":[""],"Real-time, automated backups (unlimited storage)":[""],"Compose content the way you want to and streamline your publishing experience.":[""],"Add a portfolio item":[""],"Add a testimonial":[""],"Maximize your site’s visibility in search engines and view traffic stats in real time.":[""],"Create a Jetpack account to use this feature":[""],"Share your content on social media and increase audience engagement.":[""],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":[""],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":[""],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":[""],"Error enabling Site accelerator. %(error)s":[""],"Site accelerator is now speeding up your site!":[""],"Enabling Site accelerator…":[""],"Error disabling site accelerator. %(error)s":[""],"Site accelerator is no longer speeding up your site!":[""],"Disabling site accelerator…":[""],"Load pages faster, optimize images, and speed up your visitors’ experience.":[""],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":[""],"High-speed, high-definition video hosting with no third-party ads.":[""],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":[""],"Marketing Automation":[""],"Activate Jetpack Search":[""],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":[""],"Start earning":[""],"WordAds lets you earn money by displaying promotional content. Start earning today.":[""],"Spam is automatically blocked from your comments.":[""],"Spam Filtering":[""],"Browse premium themes":[""],"Access hundreds of beautifully designed premium themes at no extra cost.":[""],"Try a premium theme":[""],"View settings":[""],"Create a Jetpack account to view your email followers":[""],"Open your site to comments and invite subscribers to get alerts about your latest work.":[""],"Manage security settings":[""],"Built-in Performance":[""],"Jetpack is ready for the new WordPress editor":[""],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":[""],"Build your Jetpack site with blocks":[""],"A new editor? Yes! {{a}}Learn more{{/a}}.":[""],"The features you rely on, adapted for the new WordPress editor.":[""],"Take me to the new editor":[""],"Testing Jetpack Connection":[""],"There was an error testing Jetpack. Error: %(error)s":[""],"New in Jetpack!":[""],"Speed up static file load times":[""],"Speed up image load times":[""],"Enable site accelerator":[""],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":[""],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":[""],"View your site activity":[""],"View a chronological list of all the changes and updates to your site in an organized, readable way.":[""],"Manually Verify ":[""],"Verify with Google":[""],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":[""],"or":[""],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":[""],"Your site is verified with Google":[""],"Site failed to verify: %(error)s":[""],"Verifying...":[""],"Add faster, more advanced searching to your site with Jetpack Professional.":[""],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":[""],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":[""],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":[""],"Jetpack Search supports many customizations.":[""],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":[""],"Site is verified":[""],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":[""],"Spam filtering and priority support.":[""],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":[""],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":[""],"Custom ads.txt entries":[""],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":[""],"Introducing Premium Themes":[""]," Premium Themes":[""],"Privacy information":[""],"Enable Lazy Loading for images":[""],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":[""],"Performance & speed":[""],"Enable high-speed, ad-free video player":[""],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":[""],"Video":[""],"Carousel color scheme":[""],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":[""],"Show photo Exif metadata in carousel (when available)":[""],"Display images in a full-screen carousel gallery":[""],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":[""],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":[""],"Portfolios shortcode: [portfolio]":[""],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":[""],"Testimonials shortcode: [testimonials]":[""],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":[""],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":[""],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":[""],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":[""],"Configure related posts in the Customizer":[""],"Highlight related content with a heading":[""],"View security scan details":[""],"View backup history":[""],"Show a thumbnail image where available":[""],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":[""],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":[""],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":[""],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":[""],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":[""],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been disabled by a site administrator.":[""],"%(moduleName)s has been disabled by a site administrator.":[""],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":[""],"Configure your notification settings":[""],"Monitor your site's downtime":[""],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":[""],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":[""],"Plugin needs updating.":["","Plugins need updating."],"%(number)s":["","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":[""],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":[""],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":[""],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":[""],"Akismet checks your comments and contact form submissions against our global database of spam.":[""],"Privacy Information":[""],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":[""],"Add the Search (Jetpack) widget to your sidebar":[""],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":[""],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":[""],"Loads the next posts automatically when the reader approaches the bottom of the page.":[""],"Allows you to publish new posts by sending an email to a special address.":[""],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":[""],"Checks your content for correct grammar and spelling, misused words, and style while you write.":[""],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":[""],"Displays information on your site activity, including visitors and popular posts or pages.":[""],"Allows you to optimize your site and its content for better results in search engines.":[""],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":[""],"Displays high-quality ads on your site that allow you to earn income.":[""],"Adds sharing buttons to your content so that visitors can share it on social media sites.":[""],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":[""],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":[""],"Allows registered users to log in to your site with their WordPress.com accounts.":[""],"Protects your site from traditional and distributed brute force login attacks.":[""],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":[""],"Removes spam from comments and contact forms.":[""],"We are committed to your privacy and security. ":[""],"View all Jetpack plans":[""],"Manage your plan":[""],"Your Plan":[""],"You’re currently on Jetpack %(plan)s.":[""],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":[""],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":[""],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":[""],"Add Search (Jetpack) Widget":[""],"Jetpack Search is powering search on your site.":[""],"Manage your plugins":[""],"Moderate comments":[""],"Error updating privacy settings. %(error)s":[""],"Updated privacy settings.":[""],"Updating privacy settings…":[""],"Add Jetpack Search Widget":[""],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":[""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":[""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":[""],"Daily backups, spam filtering, and priority support.":[""],"Always-on Security":[""],"Activate video hosting":[""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":[""],"Design the perfect website":[""],"Set up Jetpack":[""],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":[""],"Jetpack Search":[""],"Jetpack version %(version)s":[""],"Your site is being backed up in real time and regularly scanned for security threats.":[""],"Daily backup of all your site data with unlimited space and one-click restores":[""],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":[""],"View your security activity":[""]," (powered by VaultPress).":[""],"Customize Search Widget":[""],"Please correct the issue below and try again.":["","Please correct the issues listed below and try again."],"We are making sure your site stays free of security threats. You will be notified if we find one.":[""],"Your site is being backed up in real-time.":[""],"Jetpack version":[""],"{{a}}View your site's activity{{/a}} in a single feed.":[""],"Activity":[""],"Confirm each new phrase you add by pressing enter.":[""],"{{a}}View details{{/a}}":[""],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":[""],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":[""],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":[""],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":[""],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Comienza a explorar Jetpack Professional ahora para ver todos los beneficios de tu nuevo plan."],"Install premium themes":["Instalar temas premium"],"Review SEO features":["Revisar las características de SEO"],"Welcome Professional":["Bienvenido a Profesional"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":[""],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":[""],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Utilizando las poderosas herramientas de uso compartido de Jetpack, puedes compartir automáticamente tus publicaciones más recientes en las redes sociales o programar tu contenido para que se vuelva a compartir en cualquier fecha o hora que te venga bien. Y además de aumentar tus seguidores, puedes hacer que crezca crecer tu negocio con herramientas como botones de pago y publicidad."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Comienza a explorar Jetpack Premium ahora para ver todos los beneficios de tu nuevo plan."],"Monetize your site with ads":["Monetiza tu sitio con anuncios"],"Welcome Premium":["Bienvenido a Premium"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":[""],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["Con Jetpack Personal, tienes acceso a más de 100 temas de WordPress gratuitos, diseñados profesionalmente. Elije el tema que mejor se adapte a tu sitio y personalizar los colores, las imágenes o agrega una variedad de nuevos widgets."],"Got it":[""],"Welcome personal":["Bienvenido a personal"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":[""],"Jetpack Stats People":["Estadísticas de gente Jetpack"],"Hello there! Your stats have been activated.":["¡Hola! Tus estadísticas están activas."],"Just give us a little time to collect data so we can display it for you here.":["Danos un poco de tiempo para recopilar datos para que podamos mostrártelos aquí. "],"Okay, got it!":["¡Vale, lo entiendo!"],"Display ads below posts on":["Muestra anuncios bajo las entradas"],"Additional ad placements":["Ubicaciones adicionales de anuncios"],"Top of each page":["En la parte superior de cada página"],"Second ad below post":["Segundo anuncio bajo la entrada"],"Archives":["Archivos"],"Explore Professional":["Explorar el plan profesional"],"Compare All Plans":["Compara todos los planes"],"Person with laptop":["Una persona con un portátil"],"Your Jetpack site is ready to go!":["¡Tu sitio Jetpacks está listo!"],"Stars":["Estrellas"],"Jupiter":["Júpiter"],"Welcome to Jetpack Personal":["Bienvenido a Jetpack personal"],"Welcome to Jetpack Premium":["Bienvenido a Jetpack Premium"],"Welcome to Jetpack Professional":["Bienvenido a Jetpack Profesional"],"Schedule posts":[""],"Activate Publicize":["Activa Divulgar"],"Your site is backed up.":["Tu sitio está copiado."],"Image Performance":["Rendimiento de imágenes"],"Get WordPress Apps for every device":["Consigue aplicaciones WordPress para cualquier dispositivo"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Gestiona todos tus sitios desde un solo escritorio: publica contenido, sigue las estadísticas, modera comentarios, y mucho más desde cualquier lugar del mundo."],"I already use this app.":["Ya he usado esta aplicación."],"Create address":["Crear dirección"],"Priority support":["Soporte prioritario"],"Add sharing buttons to your posts":["Añade botones de compartir a tus entradas"],"Automatically share your posts to social networks":["Comparte automáticamente tus entradas en las redes sociales"],"Updating settings…":["Actualizando ajustes…"],"Updating Post by Email address…":["Actualizando la entrada por dirección de correo electrónico…"],"Your paid plan gives you access to prioritized Jetpack support.":["Tu plan de pago te da acceso al soporte prioritario de Jetpack"],"You have paid for backups but they're not yet active.":["Has pagado por las copias de seguridad pero aún no están activas."],"You have paid for backups and security scanning but they’re not yet active.":["Has pagado por copias y escaneo de seguridad pero aún no están activas."],"Click \"Set Up\" to finish installation.":["Haz clic en \"Configurar\" para finalizar la instalación."],"Checking site status…":["Comprobando estado del sitio…"],"Pages":["Páginas"],"We're here to help":["Dónde ir para obtener ayuda"],"Jetpack comes with free, basic support for all users.":["Jetpack incorpora soporte básico gratuito para todos los usuarios."],"Ask a question":["Haz una pregunta"],"Search our support site":["Busca en nuestro sitio de soporte"],"Get a faster resolution to your support questions.":["Consigue una respuesta más rápida a tus preguntas de soporte."],"Host fast, high-quality, ad-free video.":["Video de alta calidad, sin publicidad y con alojamiento rápido."],"Generate income with high-quality ads.":["Genera beneficios con anuncios de alta calidad."],"Real-time site backups and automatic threat resolution.":["Copias de seguridad en tiempo real y resolución automática de amenazas."],"Protect against data loss, malware, and malicious attacks.":["Protege contra pérdidas de datos, malware y ataques maliciosos."],"Integrate easily with Google Analytics.":["Se integra fácilmente con Google Analytics."],"Help your content get found and shared with SEO tools.":["Ayuda a que tus contenidos sean encontrados y compartidos con herramientas SEO."],"Protect your site from spam.":["Protege tu sitio del spam."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["Este sitio no está conectado con WordPress.com. Por favor, contacta con el administrado para conectarlo."],"Spam filtering":["Filtro de spam"],"Daily, automated malware scanning":["Escaneo automático diario de malware."],"Daily, automated backups (unlimited storage)":["Copias de seguridad diarias automáticas (con almacenamiento ilimitado)"],"Daily, automated malware scanning with automated resolution":["Escaneo diario y resolución automática de malware"],"Unlimited, high-speed video hosting":[""],"SEO preview tools":["Herramientas de vista previa SEO"],"Site stats, related content, and sharing tools":["Estadísticas del sitio, contenido relacionado y herramientas para compartir"],"Brute force attack protection and downtime monitoring":[""],"Unlimited, high-speed image hosting":["Alojamiento de alta velocidad ilimitado para imágenes"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["Al desconectar tu %(siteName)s de WordPress.com, ya no tendrás acceso a lo siguiente:"],"Read more about Jetpack benefits":["Lee más sobre los beneficios de Jetpack"],"An Automattic Airline":["Una aerolínea de Automattic"],"Manage site connection":["Gestionar conexión del sitio"],"Connect your account to WordPress.com to view more stats":["Conecta tu cuenta a WordPress.com para ver más estadísticas"],"Theme enhancements":["Mejoras del tema"],"Load more posts using the default theme behavior":["Carga más entradas usando el comportamiento por defecto del tema"],"Load more posts in page with a button":["Carga mas entradas en la página con un botón"],"Load more posts as the reader scrolls down":["Carga más entradas a medida que el lector navega"],"Theme support required.":["Se requiere que el tema sea compatible."],"Learn more about adding support for Infinite Scroll to your theme.":["Aprende más sobre como añadir soporte para scroll infinito en tu tema."],"Use excerpts instead of full posts on front page and archive pages":["Usar extractos en vez de entradas completas en portada y páginas de archivo"],"Show featured images":["Muestra imágenes destacadas"],"Enable the WordPress.com toolbar":["Activar la barra de herramientas de WordPress.com"],"Writing tools available to you will be shown here when an administrator enables them.":["Las herramientas de escritura se te mostrarán aquí cuando un administrador las active."],"Portfolios":["Portafolios"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Date cuenta que {{b}}no es necesario verificar tu sitio con estos servicios{{/b}} para que tu sitio lo indexen los motores de búsqueda. Para usar estas herramientas avanzadas de motores de búsqueda y verificar tu sitio con un servicio pega el código de la etiqueta HTML a continuación. Lee las {{support}}instrucciones completas{{/support}} si tienes algún problema. Servicios compatibles con la verificación: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}} y {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["Crea mapas del sitio XML"],"Collecting valuable traffic stats and insights":["Recogiendo valiosas estadísticas e informes de tráfico"],"The image helps collect stats, but should work when hidden.":["La imagen ayuda a recoger estadísticas pero debería funcionar cuando esté oculta."],"Count logged in page views from":["Contar las visualizaciones de página conectados de"],"Allow stats reports to be viewed by":["Permitir que los informes de estadísticas los vean"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["Puedes modificar estos ajustes si quieres un control más avanzado. Lee más sobre como {a}}optimizar el SEO de tu sitio{{/a}}."],"Configure your SEO settings":["Configura tus ajustes SEO"],"In \"Upgrade\"":["En \"Actualizar\""],"Configure your Google Analytics settings":["Configura tus ajustes de Google Analytics"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Muestra anuncios en el primer artículo de tu portada o al final de cada página y entrada. Pon más anuncios en la parte superior de tu sitio y en cualquier área de widgets para incrementar tus ganancias."],"Enable ads and display an ad below each post":["Activa anuncios y muestra un anuncio debajo de cada entrada"],"Configure your sharing buttons":["Configura tus botones de compartir"],"Connect your social media accounts":["Conecta con tus cuentas de redes socials"],"Match accounts using email addresses":["Empareja cuentas utilizando la dirección de correo electrónico"],"Require accounts to use WordPress.com Two-Step Authentication":["Requerir cuentas para usar la identificación en dos pasos de WordPress.com"],"Add to whitelist":["Añadir a la lista blanca"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["Deberías autorizar algunas direcciones IP para que no sean bloqueadas por Jetpack. Se admiten direcciones IPv4 e IPv6. Para especificar un rango, introduce el valor menor y el mayor separados por un guión, p. ej: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["Tu sitio está asegurado y libre de amenazas."],"Checking your spam protection…":["Comprobando protección contra el spam..."],"Fetching key…":["Obteniendo clave..."],"Your site needs an Antispam key.":["Tu sitio necesita una clave Akismet."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["Hay un problema con tu clave de API antispam. {{a}}Saber más{{/a}}."],"Your site is not protected from spam.":["Tu sitio no está protegido frente al spam."],"Your Antispam key is valid.":["Tu clave antispam no es válida."],"Your site is protected from spam.":["Tu sitio está protegido contra el spam."],"Checking key…":["Comprobando clave..."],"Your API key":["Tu clave de API"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["Si aún no tienes una clave de API, {{a}}haz clic aquí {{/a}} y sigue el proceso guiado para conseguirla."],"No search results found for %(term)s":["No se han encontrado resultados para %(term)s"],"Enter a search term to find settings or close search.":["Escribe un término de búsqueda para encontrar opciones o cierra la búsqueda."],"Connections":["Conexiones"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Tu sitio está en modo de desarrollo, por lo que no se puede conectar con WordPress.com"],"Your site is connected to WordPress.com.":["Tu sitio está conectado con WordPress.com"],"You are the Jetpack owner.":["Eres el propietario de Jetpack"],"Connected as {{span}}%(username)s{{/span}}":["Conectado como {{span}}%(username)s{{/span}}"],"View your Email Followers":["Ver tus seguidores por correo electrónico"],"Color scheme":["Esquema de color"],"Enable Markdown use for comments.":["Permite Markdown en los comentarios."],"Updated settings.":["Opciones guardadas."],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":["Entrada regenerada desde la dirección de correo electrónico."],"Error regenerating Post by Email address. %(error)s":["Error al regenerar la entrada desde la dirección de correo electrónico. %(error)es"],"Updated settings. Refreshing page…":["Opciones actualizadas. Recargando página..."],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}El filtro jetpack_development_mode está activo{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}Se ha definido la constante JETPACK_DEV_DEBUG{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}La URL de tu sitio no tiene punto (p.ej. http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics es un servicio gratuito que complementa nuestras {{a}}estadísticas integradas{{/a}} con diferentes informes de tu tráfico. Las estadísticas de WordPress.com y las de Google Analytics usan distintos métodos para identificar y seguir la actividad de tu sitio, así que normalmente mostrarán totales de tus visitas, páginas vistas, etc. ligeramente diferentes."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Configura Google Analytics"],"Activate Google Analytics":["Activa Google Analytics"],"Download the free apps":[""],"Upgrade Focus: VideoPress For Weddings":["Actualiza Focus: VideoPress para bodas"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}Ahora también puedes configurar las entradas relacionados en el personalizador. {{ExternalLink}}¡Pruébalo!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["Por defecto los anuncios se muestran al final de cada página, entrada, o el primer artículo en su portada. ¡También puedes añadirlos a la parte superior de su sitio y en cualquier área de widget para aumentar tus ganancias!"],"Display an ad unit at the top of your site.":["Mostrar un bloque de anuncios en la parte superior de su sitio."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["Mediante la activación de los anuncios, usted acepta las {{link}}Condiciones de servicio{{/link}} de los anuncios e Automattic."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Tu servidor está mal configurado, lo que significa que Jetpack Protect no puede proteger tu sitio con efectividad."],"In \"Mobile\"":["En \"Móvil\""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Configura tus ajustes de aviso de Monitor en WordPress.com{{/link}}"],"View your earnings":["Ver tus ganancias"],"Configure site SEO":[""],"Activate SEO tools":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["Para empezar haz clic en añadir objeto en tu editor de entradas y sube un vídeo. ¡Nos encargaremos del resto!"],"Video Hosting":["Alojamiento de vídeo"],"SEO Tools":["Herramientas SEO"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Las herramientas SEO avanzadas ayudan a que tu sitio sea fácil de encontrar cuando la gente busque contenido relevante."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["La forma más sencilla de se subir vídeos sin anuncios ni marcas. Obtienes estadísticas las reproducciones de video y de las veces que se ha compartido y el reproductor es ligero y adaptable."],"You are running Jetpack on a staging server.":["Estás ejecutando Jetpack en un servidor de desarrollo."],"More Info":["Más Información"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Administra la visibilidad de los Me gusta desde los ajustes del módulo de Compartir{{/a}}"],"Your current IP: %(ip)s":["Tu IP actual: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["Hay ajustes sin guardar en esta pestaña que se perderán si la dejas. ¿Quieres proceder?"],"This will reset all Jetpack options, are you sure?":["Esto restablecerá todas las opciones de Jetpack, ¿estás seguro?"],"Search for a Jetpack feature.":["Buscar una característica de Jetpack."],"Configure your Security Scans":["Configura tus escaneos de seguridad"],"Subscriber":["Suscriptor"],"Big iPhone/iPad Update Now Available":["Gran actualización de iPhone/Ipad disponible"],"The WordPress for Android App Gets a Big Facelift":["La aplicación Android para WordPress recibe un enorme estiramiento facial"],"WordPress.com Likes are:":["Los Me gusta de WordPress.com son:"],"Comments headline":["Encabezado de los comentarios"],"A few catchy words to motivate your readers to comment.":["Expresiones pegadizas para motivar a tus lectores a comentar."],"Show a \"follow blog\" option in the comment form":["Muestra las opciones \"sigue al blog\" en el formulario de comentarios"],"Show a \"follow comments\" option in the comment form":["Muestra la opción \"sigue los comentarios\" en el formulario de comentarios."],"Put a chart showing 48 hours of views in the admin bar":["Poner un gráfico mostrando las visitas de las últimas 48 horas en la barra de administración"],"Hide the stats smiley face image":["Oculta la imágen de la carita feliz de las estadísticas"],"Whitelisted IP addresses":["Lista blanca de direcciones IP"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Muestra una promo de las aplicaciones de WordPress para móviles en el pie de la versión móvil del tema."],"Copied!":["¡Copiado!"],"Highlight and copy the following text to your clipboard:":["Realza y copia el texto siguiente a tu portapapeles: "],"Regenerate address":["Regenera la dirección"],"Automatically proofread content when: ":["Prueba de lectura automática del contenido cuando:"],"A post or page is first published":["Una entrada o página es publicada por primera vez"],"A post or page is updated":["Una entrada o página está actualizada."],"Automatic Language Detection":["Detección automática de idioma"],"The proofreader supports English, French, German, Portuguese and Spanish.":["El corrector funciona con inglés, francés, alemán, portugués y español."],"Enable proofreading for the following grammar and style rules: ":["Activar la prueba de lectura la la siguiente gramática y reglas de estilo:"],"Add a phrase":["Añade una frase"],"Cheatin' uh?":["¿Haciendo trampas?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}¿Te importaría decirnos por qué no has completado la conexión con Jetpack en esta {{a}}encuesta de 2 preguntas?{{/a}}{{/p}}{{p}}La conexión con Jetpack es obligatoria para que funcionen nuestras características gratuitas de tráfico y seguridad.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Bienvenido a {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["Tu Jetpack ya está conectado."],"You're fueled up and ready to go, Jetpack is now active.":["Estás completo de combustible y listo para ir, ahora Jetpack está activo"],"You're fueled up and ready to go.":["Estás completo de combustible y listo para ir."],"You are currently running a development version of Jetpack.":["En este momento estás ejecutando una versión de desarrollo de Jetpack."],"Submit Beta feedback":["Envía tus sugerencias"],"What would you like to see on your Jetpack Dashboard?":["¿Qué te gustaría ver en el Escritorio de tu Jetpack?"],"Let us know!":["¡Háznolo saber!"],"Saving…":["Guardando..."],"Save Settings":["Guardar ajustes"],"Jetpack Stats Icon":["Icono de estadísticas de Jeptpack"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["¡{{a}}Activa las Estadísticas del sitio{{/a}} para ver estadísticas detalladas, me gusta, seguidores, suscriptores y más! {{a1}}Aprende más{{/a1}}"],"Activate Site Stats":["Activar estadísticas del sitio"],"Security Scanning":["Escaneo de seguridad"],"Site Backups":[""],"Upgrade":["Actualiza"],"ACTIVE":["ACTIVO"],"Your site is on Development Mode":["Tu sitio web está en modo de desarrollo"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Una vez que estés conectado puedes pasar a un plan de pago para conseguir seguridad de primer nivel, herramientas de protección contra el spam y soporte prioritario."],"View your spam stats":["Ver tus estadísticas de spam"],"View your security dashboard":["Ver tu escritorio de seguridad"],"The site is in Development Mode, so you can not connect to WordPress.com.":["El sitio está en el modo de desarrollo, así que no puedes conectarte a WordPress.com."],"Link your account to WordPress.com to get the most out of Jetpack.":["Conecta tu cuenta a WordPress.com para conseguir el máximo de Jetpack."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["Para la exploración automática y completa de las amenazas de seguridad, por favor {{a}}instala y activa{{/a}} VaultPress."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["Para la exploración automática y completa de las amenazas de seguridad, por favor {{a}}actualiza tu cuenta{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetapck está bloqueando activamente intentos de acceso maliciosos. ¡Muy pronto se mostraran datos aquí mismo!"],"Total malicious attacks blocked on your site.":["Total de ataques maliciosos bloqueados en tu sitio."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Activa Proteger{{/a}} para mantener tu sitio protegido de intentos de acceso malintencionados."],"All plugins are up-to-date. Awesome work!":["Todos los plugins están actualizados. ¡Buen trabajo!"],"Jetpack is improving and optimizing your image speed.":["Jeptack está mejorando y optimizando la velocidad de tus imágenes."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack está monitorizando tu sitio. Si creemos que tu sitio está caído, recibirás un correo electrónico."],"Security":["Seguridad"],"Performance":["Rendimiento"],"Backups":["Copias de seguridad"],"{{a}}View backup details{{/a}}.":["{{a}}Ver detalles de la copia de seguridad{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["Para hacer automáticamente una copia de seguridad de tu sitio completo, por favor {{a}}instala y activa{{/a}} VaultPress."],"Unavailable in Dev Mode.":["No disponible en el modo desarrollador."],"Spam Protection":["Protección de spam"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["Para una defensa contra el spam de calidad profesional por favor {{a}}instala Akismet{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["Si quieres un protector contra el spas que esté a la última, {{a}}activa Akismet{{a}}."],"Invalid key":["Clave no válida"],"Unavailable in Dev Mode":["No disponible en modo desarrollador"],"Activating recommended features…":["Activando funcionalidades recomendadas..."],"Recommended features active.":["Funcionalidades de recomendación activas."],"Recommended features failed to activate. %(error)s":["No se pudieron activar las funcionalidades recomendadas. %(error)s"],"Activating %(slug)s…":["Activando %(slug)s…"],"%(slug)s has been activated.":["%(slug)s se ha activado."],"%(slug)s failed to activate. %(error)s":["%(slug)s falló al activarse. %(error)s"],"Deactivating %(slug)s…":["Desactivando %(slug)s…"],"%(slug)s has been deactivated.":["%(slug)s ha sido desactivado."],"%(slug)s failed to deactivate. %(error)s":["%(slug)s no se desactivaron. %(error)s"],"Updating %(slug)s settings…":["Actualizando %(slug)s ajustes…"],"Updated %(slug)s settings.":["Ajustes de %(slug)s actualizados."],"Error updating %(slug)s settings. %(error)s":["Error actualizando los ajustes %(slug)s. %(error)s"],"Updating %(slug)s address…":["Actualizando la dirección %(slug)s…"],"Regenerated %(slug)s address .":["Regenerar %(slug)s direcciones."],"Error regenerating %(slug)s address. %(error)s":["Error regenerando la dirección %(slug). %(error)s"],"Resetting Jetpack options…":["Resetear opciones de jetpack"],"Options reset.":["Ajustes restablecidos."],"Options failed to reset.":["Fallo al restablecer las opciones."],"There was an error disconnecting Jetpack. Error: %(error)s":["Ha ocurrido un error desconectando Jetpack. Error: %(error)s"],"Unlinking from WordPress.com":["Desconectando de WordPress.com"],"Unlinked from WordPress.com.":["Desconectado de WordPress.com."],"Error unlinking from WordPress.com. %(error)s":["Error al desconectar de WordPress.com. %(error)s"],"At A Glance":["De un vistazo"],"Clichés":["Clichés"],"Dashboard":["Escritorio"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["¿Te importaría decirnos por qué? Simplemente {{a}}contestando dos sencillas preguntas{{/a}} nos ayudarás a mejorar Jetpack."],"Automattic's Privacy Policy":["Política de privacidad de Automattic"],"WordPress.com Terms of Service":["Términos del servicio de WordPress.com"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":[""],"{{a}}Turn on plugin autoupdates{{/a}}":[""],"Plugin Updates":["Actualizaciones de plugins"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["¡Vaya! Tus claves de Akismet se han perdido o no son válidas. {{akismetSettings}}Ve a la las opciones de Akismet para arreglarlo {{/akismetSettings}}"],"No threats found, you're good to go!":["No se encontraron amenazas.¡Adelante!"],"{{a}}Contact Support{{/a}}":["{{a}}Contacta con soporte{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}Ver detalles en VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["¡Vaya! Se encontró %(number)s amenza.","¡Vaya! Se encontraron %(number)s amenzas."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":[""],"Loading…":["Cargando..."],"Downtime monitoring":[""],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}Ver más estadísticas en WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}Ver más estadísticas{{/button}}"],"All-time comments":["Todos los comentarios"],"All-time views":["Visitas de todo el periodo"],"%(number)s View":["%(number)s visita","%(number)s visitas"],"Best overall day":["El mejor día"],"Views today":["Visualizaciones hoy"],"Months":["Meses"],"Weeks":["Semanas"],"Days":["Días"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["Algo pasó al cargar las estadísticas. Por favor, inténtalo de nuevo más tarde o {{a}}ve tus estadísticas ahora en WordPress.com{{/a}}"],"Click to view detailed stats.":["Haz clic para ver estadíticas detalladas."],"Views: %(numberOfViews)s":["VIsitas: %(numberOfViews)s"],"Week of %(date)s":["Semana del %(date)s"],"Site Security":["Seguridad del sitio"],"Activate recommended features":[""],"Link to WordPress.com":["Conecta con WordPress.com"],"Unlink me from WordPress.com":["Desconectame de WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["Hubo un problema conectando con tu Jetpack. Por favor haz click en \"Conecta con WordPress.com\" de nuevo."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["Hemos tenido una incidencia conectando Jetpack; desactiva y vuelve a activar el plugin de Jetpack, y conecta otra vez."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Debes permanecer conectado a tu blog de WordPress mientras autorizas Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Tu Jetpack tiene un problema.{{/s}} Lamentamos las molestias. Por favor, inténtalo más tarde. Si el problema continúa, por favor contacta con el soporte con este mensaje: %(error_key)s"],"Disconnecting Jetpack":["Desconectando Jetpack"],"Learn more":["Más Información"],"Posts":["Entradas"],"Front page":["Portada"],"Upload videos":[""],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Muestra contenido relacionado después de las entradas"],"Related":["Relacionado"],"Save":["Guardar"],"Email Address":["Dirección de correo electrónico"],"Media":["Medios"],"Themes":["Temas"],"Site Stats":["Estadísticas del sitio"],"Sharing":["Compartir"],"Testimonials":["Testimonios"],"Cancel":["Cancelar"],"Comments":["Comentarios"],"Ignored Phrases":["Frases ignoradas"],"Use automatically detected language to proofread posts and pages":["Utilizar idioma detectado automáticamente para corregir entradas y páginas"],"Redundant Phrases":["Frases Redundantes"],"Phrases to Avoid":["Frases para Evitar"],"Passive Voice":["Voz Pasiva"],"Jargon":["Jerga"],"Hidden Verbs":["Verbos ocultos"],"Double Negatives":["Doble negaciones"],"Diacritical Marks":["Signos Diacríticos"],"Complex Phrases":["Frases Complejas"],"Bias Language":["Sesgos de Idioma"],"English Options":["Opciones de Inglés"],"Proofreading":["Revisión"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack no puede ponerse en contacto con WordPress.com: %(error_key)s. Esto generalmente significa que algo no está configurado correctamente en el servidor de tu sitio."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com tiene problemas ahora mismo y no puede repostar tu Jetpack. Por favor, inténtalo más tarde."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Tu Jetpack tiene un fallo.{{/s}} No es posible conectar este sitio con WordPress.com. Esto significa normalmente que tu sitio no es público (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Tu web tiene que ser accesible al público para usar Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["Has desconectado Jetpack con éxito"],"Edit":["Editar"],"Connected":["Conectado"],"Activate":["Activar"],"Active":["Activo"],"Search":["Buscar"],"Settings":["Ajustes"],"Learn More":["Más Información"],"Disconnect Jetpack":["Desconectar Jetpack"],"Test your site’s compatibility with Jetpack.":["Comprueba la compatibilidad de tu sitio con Jetpack."],"Settings header\u0004Plugin Autoupdates":[""],"Settings header\u0004Downtime monitoring":[""],"Settings header\u0004Privacy Settings":[""],"Settings header\u0004WordPress.com toolbar":["Barra de herramientas de WordPress.com"],"Settings header\u0004Composing":["Creando"],"Settings header\u0004Site stats":["Estadísticas del sitio"],"Settings header\u0004Search engine optimization":["Optimización en los motores de búsqueda"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Botones de compartir"],"Settings header\u0004Publicize connections":["Conexiones de Divulgar"],"Settings header\u0004Like buttons":["Botones me gusta"],"Settings header\u0004WordPress.com log in":["Acceso de WordPress.com"],"Settings header\u0004Brute force attack protection":["Protección ante ataques de fuerza bruta"],"Settings header\u0004Backups and security scanning":["Copias y escaneo de seguridad "],"Settings header\u0004Spam filtering":["Filtro de spam"],"Navigation item.\u0004Performance":[""],"Navigation item.\u0004My Plan":[""],"Navigation item.\u0004Dev Tools":["Herramientas de desarrollo"],"Navigation item.\u0004Settings":["Ajustes"],"Navigation item.\u0004Discussion":["Debate"],"Navigation item.\u0004Traffic":["Tráfico"],"Navigation item.\u0004Sharing":["Compartir"],"Navigation item.\u0004At A Glance":["De un vistazo"],"Navigation item.\u0004Plans":["Planes"],"Navigation item.\u0004Writing":["Escritura"],"Navigation item.\u0004Reset Options (dev only)":["Restablecer ajustes (solo en versiones de desarrollo)"],"Navigation item.\u0004Security":["Seguridad"],"Navigation item.\u0004At a Glance":["De un vistazo"],"Search term.\u0004terms of service":[""],"Search term.\u0004tos":[""],"Search term.\u0004gdpr":[""],"Search term.\u0004data":[""],"Search term.\u0004tracks":[""],"Search term.\u0004privacy":[""],"Caption for a button to purchase a pro plan.\u0004Upgrade":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Actualizar"],"Button caption\u0004Saving…":["Guardando…"],"Button caption\u0004Save settings":["Guardar ajustes"],"A heading for a block of related posts.\u0004Related":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Vista previa"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Sigue conectado"],"A caption for a button to disconnect.\u0004Disconnect":["Desconectar"],"Short warning message\u0004Updates needed":["Actualizaciones necesarias"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Pagado"],"A header for a preview area in the configuration screen.\u0004Preview":["Vista previa"],"Ads header\u0004Ads":["Anuncios"],"Dashboard widget header\u0004Site connection":["Conexión al sitio"],"Dashboard widget header\u0004Account connection":["Conexión a tu cuenta"],"A caption for a small button to fix security issues.\u0004Threats":["Amenazas"],"A caption for a small button to fix security issues.\u0004FIX":["SOLUCIONAR"],"Short warning message about new threats found.\u0004Threats found!":["¡Encontradas amenazas!"],"Short warning message about site having no security scan.\u0004No scanning":["No se ha escaneado"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Actualizar"],"Short message informing user that the site is secure.\u0004Secure":["Seguro"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Clave no válida"],"Caption for a button to set up a feature.\u0004Set up":["Configurar"],"verb\u0004Copy":["Copiar"],"Shorthand for Privacy Policy.\u0004Privacy":["Privacidad"],"Shorthand for Terms of Service.\u0004Terms":["Términos"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Depuración"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["Comentarios de spam bloqueados."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-es_ES-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-es_ES-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index e7671a96..00000000
--- a/plugins/jetpack/languages/json/jetpack-es_ES-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"es"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":["A continuación, activa el conjunto de características recomendadas por Jetpack para maximizar la seguridad y el rendimiento de tu sitio. {{a}}Aprende más sobre lo que está incluido{{/a}}."],"We’re now collecting stats and securing your site. Welcome aboard.":["Ahora recopilamos estadísticas y aseguramos tu sitio. Bienvenido a bordo."],"{{a}}Skip, and explore features individually{{/a}}.":["{{a}}Saltar, y explorar individualmente las características{{/a}}."],"Jetpack Business Plan":["Plan Business de Jetpack"],"Jetpack Premium Plan":["Plan Premium de Jetpack"],"Jetpack Personal Plan":["Plan Personal de Jetpack"],"Get started with hassle-free design, stats, and performance tools.":["Empieza con el diseño, las estadísticas y las herramientas de rendimiento sin problemas."],"Welcome to Jetpack Free":["Bienvenido a Jetpack Gratis"],"Jetpack Free Plan":["Plan Gratis de Jetpack"],"Explore Jetpack plans":["Explora los planes de Jetpack"],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":["Consigue la tranquilidad de contar con copias de seguridad automatizadas y soporte prioritario, llega a un público más amplio mediante el uso de herramientas avanzadas de SEO, monetiza tu sitio mediante la publicación de anuncios y personaliza tu sitio con cualquiera de nuestros más de 200 temas premium."],"Jetpack offers so much more":["Jetpack ofrece muchísimo más"],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":["¿Necesitas ayuda? Busca nuestro sitio de soporte para obtener información sobre tu sitio, tu cuenta y cómo sacar el máximo provecho de WordPress."],"Support documentation":["Documentación de soporte"],"Chat bubbles representing getting in touch with support":["Burbujas de chat que simbolizan el contacto con el soporte"],"Site Activity":["Actividad del sitio"],"Start publicizing now":["Empieza a divulgar ahora"],"Reach a wider audience by automatically sharing your posts on social media.":["Logra una audiencia mayor compartiendo automáticamente tus entradas en los medios sociales."],"Increase traffic to your site":["Aumenta el tráfico hacia tu sitio"],"Explore free themes":["Explora los temas gratuitos"],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":["Consigue acceso ilimitado a cientos de temas profesionales, y personaliza tu sitio exactamente como quieras."],"A wide variety of themes and tools to customize a site":["Una amplia variedad de temas y herramientas para personalizar un sitio"],"Set up your site security":["Configura la seguridad de tu sitio"],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":["Evita ataques de acceso, y obtén avisos instantáneos cuando haya un problema con tu sitio."],"Site stats showing an evolution in traffic and engagement":["Estadísticas del sitio mostrando una evolución en tráfico y participación"],"A hand holding a loupe":["Una mano sosteniendo una lupa"],"A chart showing an healthy increase in earnings":["Un gráfico que muestra un saludable aumento de ganancias"],"Interface showing a chronological list of changes and updates in a site":["Interfaz mostrando una lista cronológica de los cambios y actualizaciones de un sitio"],"A cloud with multiple types of content floating around it":["Una nube con varios tipos de contenido flotando alrededor"],"A folder holding real comments":["Una carpeta con comentarios reales"],"Make your site faster":["Haz más rápido tu sitio"],"Load pages faster by serving your images from our global network of servers.":["Carga páginas más rápido sirviendo tus imágenes desde nuestra red global de servidores."],"A fast and performant website":["Una web rápida y eficaz"],"A secure site, locked and protected by Jetpack":["Un sitio seguro, aislado y protegido por Jetpack"],"These settings won't apply to related posts added using the block editor.":["Estos ajustes no se aplicarán a las entradas relacionadas añadidas usando el editor de bloques."],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["Duplica entradas, páginas, recomendaciones y porfolios existentes. Se copiará todo el contenido, incluyendo texto, imágenes destacadas, ajustes para compartir y mucho más."],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":["El sitio no se puede conectar a WordPress.com debido a que viola nuestros {{a}}términos del servicio {{/a}}."],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":["Conecta tu web a las redes sociales que uses y comparte tu contenido en todas tus cuentas sociales con un solo clic. Cuando publicas una entrada aparecerá en todas las cuentas conectadas."],"Add Like buttons to your posts and pages":["Añade botones de «Me gusta» a tus entradas y páginas"],"When visitors enjoy your content, let them show it with a Like.":["Cuando los visitantes disfrutan de tu contenido, déjales mostrarlo con un «Me gusta»."],"Explore your Jetpack Professional plan!":["¡Explora tu plan Jetpack Professional!"],"Explore your Jetpack Premium plan!":["¡Explora tu plan Jetpack Premium!"],"Explore your Jetpack Personal plan!":["¡Explora tu plan Jetpack Personal!"],"Create account":["Crear cuenta"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["Jetpack está impulsando tu sitio, pero para acceder a todas sus características necesitarás crear una cuenta."],"Real-time, automated backups (unlimited storage)":["Copias de seguridad automatizadas en tiempo real (almacenamiento ilimitado)"],"Compose content the way you want to and streamline your publishing experience.":["Redacta el contenido de la forma que quieras y agiliza tu experiencia de publicación."],"Add a portfolio item":["Añade un elemento del porfolio"],"Add a testimonial":["Añade una recomendación"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["Maximiza la visibilidad de tu sitio en los motores de búsqueda y visualiza las estadísticas de tráfico en tiempo real."],"Create a Jetpack account to use this feature":["Crea una cuenta Jetpack para usar esta característica"],"Share your content on social media and increase audience engagement.":["Comparte tu contenido en los medios sociales y aumenta el grado de participación de la audiencia."],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["Jetpack supervisará continuamente tu sitio, y te alertará en el momento en que se detecte tiempo de inactividad."],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["Cuando se lanza una actualización de plugin, la mejor práctica es actualizar ese plugin de inmediato. Elige los plugins que quieras actualizar automáticamente para que tu sitio permanezca seguro."],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["Mantén tu sitio seguro con la seguridad más avanzada y recibe avisos de problemas técnicos."],"Error enabling Site accelerator. %(error)s":["Error al activar el acelerador del sitio. %(error)es"],"Site accelerator is now speeding up your site!":["¡El acelerador del sitio está ahora acelerando tu sitio!"],"Enabling Site accelerator…":["Activando el acelerador del sitio …"],"Error disabling site accelerator. %(error)s":["Error al desactivar el acelerador del sitio. %(error)es"],"Site accelerator is no longer speeding up your site!":["¡El acelerador del sitio ya no está acelerando tu sitio!"],"Disabling site accelerator…":["Desactivando el acelerador del sitio …"],"Load pages faster, optimize images, and speed up your visitors’ experience.":["Carga páginas más rápido, optimiza imágenes y acelera la experiencia de tus visitantes."],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["Complementa las estadísticas de WordPress.com con la exploración en profundidad de Google de tus visitantes y patrones de tráfico."],"High-speed, high-definition video hosting with no third-party ads.":["Alojamiento de vídeo de alta velocidad y alta definición sin anuncios de terceros."],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["Programa con antelación un número ilimitado de tuits, publicaciones de Facebook y otras publicaciones sociales."],"Marketing Automation":["Automatización de márketing"],"Activate Jetpack Search":["Activa la búsqueda de Jetpack"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["Reemplaza la búsqueda predeterminada de WordPress con mejores resultados y filtrado con la tecnología de búsqueda Elasticsearch."],"Start earning":["Empieza a ganar"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["WordAds te permite ganar dinero mostrando contenido promocional. Empieza a ganar hoy mismo."],"Spam is automatically blocked from your comments.":["El spam se bloquea automáticamente de tus comentarios."],"Spam Filtering":["Filtrado de spam"],"Browse premium themes":["Ver temas premium"],"Access hundreds of beautifully designed premium themes at no extra cost.":["Accede a cientos de temas premium con un diseño atractivo sin coste adicional."],"Try a premium theme":["Prueba un tema premium"],"View settings":["Ver ajustes"],"Create a Jetpack account to view your email followers":["Crea una cuenta Jetpack para ver tus seguidores por correo electrónico"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["Abre tu sitio a los comentarios e invita a los suscriptores a recibir alertas sobre tus últimos trabajos."],"Manage security settings":["Gestionar ajustes de seguridad"],"Built-in Performance":["Rendimiento incluido"],"Jetpack is ready for the new WordPress editor":["Jetpack está preparado para el nuevo editor de WordPress"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["Hoy estamos introduciendo la primera ola de bloques específicos de Jetpack creados específicamente para la nueva experiencia del editor: botón de Simple Payment, Formulario, Mapa y Markdown."],"Build your Jetpack site with blocks":["Crea tu sitio Jetpack con bloques"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["¿Un nuevo editor? ¡Sío! {{a}}Aprender más{{/a}}."],"The features you rely on, adapted for the new WordPress editor.":["Las características en las que confías, adaptadas al nuevo editor de WordPress."],"Take me to the new editor":["Llévame al nuevo editor"],"Testing Jetpack Connection":["Probando conexión de Jetpack"],"There was an error testing Jetpack. Error: %(error)s":["Hubo un error al probar Jetpack. Error: %(error)s"],"New in Jetpack!":["¡Nuevo en Jetpack!"],"Speed up static file load times":["Acelera los tiempos de carga de archivos estáticos"],"Speed up image load times":["Acelera los tiempos de carga de imágenes"],"Enable site accelerator":["Activa el acelerador de sitios"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["Carga páginas más rápido permitiendo a Jetpack optimizar tus imágenes y servir tus imágenes y archivos estáticos (como CSS y JavaScript) desde nuestra red global de servidores."],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["Añade una capa extra de seguridad a tu web activando el acceso e identificación segura de WordPress.com. Si tienes varios sitios con esta opción activa, podrás acceder en todos ellos con las mismas credenciales."],"View your site activity":["Ver la actividad de tu sitio"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["Ve una lista cronológica de todos los cambios y actualizaciones de tu sitio de un modo organizado y legible."],"Manually Verify ":["Verificar manualmente"],"Verify with Google":["Verificar con Google"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["Google enviará correos electrónicos sobre ciertos eventos que ocurran en tu sitio, incluidas indicaciones de que tu web ha sido {{a1}}hackeada{{/a1}} o problemas al {{a2}}rastrear o indexar{{/a2}} tu sitio."],"or":["o"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["Supervisa el tráfico y rendimiento de tu sitio desde la {{a}}consola de búsqueda de Google{{/a}}."],"Your site is verified with Google":["Tu sitio está verificado con Google"],"Site failed to verify: %(error)s":["Fallo al verificar el sitio: %(error)s"],"Verifying...":["Verificando…"],"Add faster, more advanced searching to your site with Jetpack Professional.":["Añade búsquedas más rápida y avanzadas a tu sitio con Jetpack Professional."],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["Reemplaza el buscador incluido en WordPress con el buscador de Jetpack, una experiencia avanzada de búsqueda"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["El buscador de Jetpack reemplaza el buscador incluido con un buscador rápido, escalable, personalizable y de alta relevancia, alojado en la nube de WordPress.com. El resultado: tus usuarios encontrarán el contenido que quieren más rápido."],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["El buscador incluido en WordPress es fantástico para sitios sin mucho contenido. Pero a medida que crezca tu sitio las búsquedas se ralentizan y devuelven resultados menos relevantes."],"Jetpack Search supports many customizations.":["El buscador de Jetpack ofrece muchas personalizaciones."],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["Remplaza el buscador incluido con un buscador rápido, escalable, personalizable y de alta relevancia {{a}}alojado en la nube de WordPress.com{{/a}}."],"Site is verified":["El sitio está verificado"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}Para crear un bonito sitio que se vea y funcione exactamente como quieres, Jetpack Professional te ofrece acceso ilimitado a más de 200 temas premium de WordPress.{/p}}{{p}}Jetpack Professional es más que simplemente encontrar el diseño perfecto. También es una paz mental total al saber que tienes soporte prioritario de nuestro equipo global de expertos si surge la necesidad.{{/p}}"],"Spam filtering and priority support.":["Filtrado de spam y soporte prioritario."],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["Cuando se activan los anuncios, Jetpack genera automáticamente un ads.txt personalizado para tu sitio."],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["Jetpack genera automáticamente un {{link}}ads.txt{{/link}} personalizado para tu sitio. Si necesitas añadir entradas adicionales para otras redes, por favor, añádelas en el espacio siguiente, una por línea."],"Custom ads.txt entries":["Entradas en ads.txt personalizado"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}} Para crear un bonito sitio que se vea y funcione exactamente como lo deseas, Jetpack Profesional te brinda acceso ilimitado a más de 200 temas premium de WordPress. {{/ p}} {{p}} Jetpack Profesional es mucho encontrar que un sitio donde encontrar el diseño perfecto. También se trata de tener total tranquilidad: copias de seguridad en tiempo real, escaneo automático de malware y soporte prioritario de nuestro equipo global de expertos que te garantizan que su sitio siempre estará a salvo y seguro. {{/ P}}"],"Introducing Premium Themes":["Presentamos los temas premium"]," Premium Themes":["Temas premium"],"Privacy information":["Información de privacidad"],"Enable Lazy Loading for images":["Activar carga en diferido de imágenes"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["La carga diferida de imágenes mejora la velocidad de tu sitio y crea una experiencia de visualización más fluida. La carga de las imágenes se realiza conforme los usuarios van desplazándose por la página en lugar de cargar todo de una vez."],"Performance & speed":["Rendimiento y velocidad"],"Enable high-speed, ad-free video player":["Activa el reproductor de vídeo de alta velocidad, sin anuncios"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["Haz que el contenido que publicas sea más atractivo con vídeo de alta resolución. Win Jetpack Vídeo puedes personalizar tu reproductor de medios y mostrar vídeos de alta velocidad, sin anuncios ni marcas a tus visitantes. Los vídeos se alojan en nuestros servidores de WordPress.com y ¡no consumen espacio de tu plan de alojamiento!"],"Video":["Video"],"Carousel color scheme":["Esquema de color del carrusel"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Los datos Exif muestran a los observadores detalles técnicos de una foto, como su longitud focal, apertura e ISO."],"Show photo Exif metadata in carousel (when available)":["Muestra metadatos Exif de la foto en el carrusel (cuando está disponible)"],"Display images in a full-screen carousel gallery":["Mostrar imágenes en una galería de carrusel a pantalla completa"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["Crea presentaciones en carrusel a pantalla completa de las imágenes de tus entradas y páginas. Las galerías en carrusel son perfectas para móviles y animan a los visitantes del sitio a interactuar con tus fotos."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["La barra de herramientas de WordPress.com reemplaza la barra de herramientas de administración por defecto de WordPress y optimiza tu experiencia de WordPress. Ofrece acceso con un solo clic para gestionar todos tus sitios, actualizar su perfil de WordPress.com, ver avisos y ponerse al día en los sitios que sigues en Reader."],"Portfolios shortcode: [portfolio]":["Shortcode de portfolios: [portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["Utiliza {{portfolioLink}}porfolios{{/portfolioLink}} en tu sitio para mostrar tus mejores trabajos. Si tu tema no es compatible con los porfolios de Jetpack puedes usar un sencillo shortcode para mostrarlos en tu sitio."],"Testimonials shortcode: [testimonials]":["Shortcode de recomendaciones: [testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["Añade {{testimonialLink}}testimonios{{/ testimonialLink}} a tu web para atraer nuevos clientes. Si tu tema no es compatible con los testimonios de Jetpack, puede utilizar un sencillo shortcode para mostrarlos en tu sitio."],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["Los motores de búsqueda no pueden acceder a tu sitio en este momento. Si quieres que tu sitio sea accesible revisa tus {{a}}Ajustes de lectura{{/a}} y cambia para activar la \"Visibilidad en los motores de búsqueda\"."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["Buenas noticias: Jetpack está enviando tu mapa del sitio automáticamente a todos los principales motores de búsqueda para su indexación."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["Los mapas del sitio son archivos que los motores de búsqueda como Google y Bing utilizan para indexar tu web. Pueden ayudar a mejorar tus posiciones en los resultados de búsqueda. Cuando activas esta característica, Jetpack creará mapas del sitio para ti y los actualiza automáticamente cuando cambie el contenido de tu sitio."],"Configure related posts in the Customizer":["Configurar entradas relacionadas en el personalizador"],"Highlight related content with a heading":["Destacar contenido relacionado con un encabezado"],"View security scan details":["Ver detalles de la exploración de seguridad"],"View backup history":["Ver histórico de la copia de seguridad"],"Show a thumbnail image where available":["Mostrar una imagen en miniatura donde esté disponible"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["Para obtener más información sobre cómo las características específicas de Jetpack usan datos y realizar un seguimiento de la actividad, consulta nuestro {{privacyCenterLink}}centro de privacidad{{/ privacyCenterLink}}."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["Usamos otras herramientas de seguimiento, incluidas algunas de terceros. {{cookiePolicyLink}}Lee acerca de estos{{/cookiePolicyLink}} y sobre cómo controlarlos."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["Esta información nos ayuda a mejorar nuestros productos, hacer que el marketing sea más relevante, personalizar tu experiencia en WordPress.com y más, tal como se detalla en nuestra {{pp}}política de privacidad{{/ pp}}."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["Comparta información con nuestra herramienta de análisis acerca del uso que hace de los servicios mientras estás conectado a tu cuenta de WordPress.com. {{cookiePolicyLink}}Aprende más{{/ cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["Esta característica está siendo gestionada por un administrador del sitio. {{link}}Aprende más{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["Esta característica ha sido desactivada por un administrador del sitio. {{link}}Aprende más{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["Esta característica ha sido activada por un administrador del sitio. {{link}}Aprende más{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["%(moduleName)s ha sido desactivado por un administrador del sitio. {{link}}Aprende más{{/link}}."],"This feature has been disabled by a site administrator.":["Esta característica ha sido desactivada por el administrador del sitio."],"%(moduleName)s has been disabled by a site administrator.":["%(moduleName)s ha sido desactivado por un administrador del sitio."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["Puedes colocar anuncios adicionales usando el Widget de anuncios. {{link}}¡Pruébalo!{{/link}}"],"Configure your notification settings":["Configura tus ajustes de notificaciones"],"Monitor your site's downtime":["Supervisa el tiempo de inactividad de tu sitio"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["El módulo de búsqueda de Jetpack es un potente sustituto de la capacidad de búsqueda integrada en WordPress."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["Los archivos de tu sitio se escanean periódicamente en busca de modificaciones no autorizadas o sospechosas que podrían comprometer tu seguridad y datos."],"Plugin needs updating.":["El plugin necesita actualizarse.","Los plugin necesitan actualizarse."],"%(number)s":["%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Actualizaciones de Plugins Jetpack te permite seleccionar que plugins se actualizan automáticamente."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack optimizará tus imágenes y las servirá desde la ubicación del servidor más cercana a tus visitantes. El uso de nuestra red global de entrega de contenido aumentará la velocidad de carga de tu sitio."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":["El supervisor de tiempo de inactividad de Jetpack mantendrá controlado tu sitio y te alertará en el momento en que se detecte un tiempo de inactividad."],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Copia de seguridad de Jetpack te permite restaurar o descargar fácilmente una copia de seguridad de un momento específico."],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet verifica tus comentarios y envíos de formularios de contacto contra nuestra base de datos global de spam."],"Privacy Information":["Información sobre la privacidad"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["VideoPress te permite subir vídeos desde tu ordenador para alojarlos en WordPress.com en vez de en los servidores de tu alojamiento. Puedes entonces insertarlos en tu sitio Jetpack alojado por tu cuenta."],"Add the Search (Jetpack) widget to your sidebar":["Añade el widget buscar (Jetpack) a tu barra lateral"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["Dale a tus visitantes un fantástica experiencia de búsqueda permitiéndoles filtrar y ordenar rápidamente resultados de búsqueda relevantes."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["Activa un tema ligero adaptado a móviles que se mostrará a los visitantes en sus dispositivos móviles."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["Carga automáticamente las siguientes entradas cuando el lector se acerca al fondo de la página."],"Allows you to publish new posts by sending an email to a special address.":["Permite publicar nuevas entradas enviando un correo electrónico a una dirección especial."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["Te permite crear contenido con enlaces, listas y otros estilos usando la sintaxis Markdown."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["Comprueba mientras escribes la correcta ortografía y gramática, palabras mal utilizadas y estilos de tu contenido."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["Ofrece las etiquetas ocultas necesarias para verificar tu sitio WordPress en diversos servicios."],"Displays information on your site activity, including visitors and popular posts or pages.":["Muestra información de la actividad de tu sitio, incluidos los visitantes y las entradas o páginas populares."],"Allows you to optimize your site and its content for better results in search engines.":["Te permite optimizar tu sitio y su contenido para unos mejores resultados en los motores de búsqueda."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["Integra tu sitio WordPress con Google Analytics, una plataforma que ofrece estadísticas de tu tráfico, visitantes y conversiones."],"Displays high-quality ads on your site that allow you to earn income.":["Muestra anuncios de gran calidad en tu sitio que te permiten ganar ingresos."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["Añade botones de compartir a tu contenido, para que tus visitantes puedan compartirlos en los sitios de medios sociales."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["Te permite compartir automáticamente tu contenido más reciente en los sitios de medios sociales, incluidos Facebook y Twitter."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["Añade botones de me gusta a tu contenido para que tus visitantes puedan mostrar su aprecio o disfrute."],"Allows registered users to log in to your site with their WordPress.com accounts.":["Permite a los usuarios registrados acceder a tu sitio con sus cuentas de WordPress.com."],"Protects your site from traditional and distributed brute force login attacks.":["Protege tu sitio de ataques típicos y distribuidos de fuerza bruta contra la pantalla de acceso."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["Hace copias de seguridad de tu sitio en los servidores globales de WordPress.com, permitiéndote restaurar tu contenido en caso de emergencia o error."],"Removes spam from comments and contact forms.":["Elimina el spam de comentarios y formularios de contacto."],"We are committed to your privacy and security. ":["Estamos comprometidos con tu privacidad y seguridad."],"View all Jetpack plans":["Ver todos los planes Jetpack"],"Manage your plan":["Gestiona tu plan"],"Your Plan":["Tu plan"],"You’re currently on Jetpack %(plan)s.":["Actualmente estás en el %(plan)s de Jetpack. "],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["Permite a los lectores suscribirse a tus entradas o comentarios, y recibe avisos cuando haya nuevo contenidos por correo electrónico."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["Reemplaza el formulario estándar de comentarios de WordPress con un nuevo sistema de comentarios que incluye opciones de acceso a medios sociales."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}Actívalo{{/a}} para reemplazar la búsqueda incluida en WordPress por una experiencia de búsqueda mejorada."],"Add Search (Jetpack) Widget":["Añade el widget de búsqueda (Jetpack)"],"Jetpack Search is powering search on your site.":["La búsqueda de Jetpack está mejorando la búsqueda en tu sitio."],"Manage your plugins":["Gestiona tus plugins"],"Moderate comments":["Modera comentarios"],"Error updating privacy settings. %(error)s":["Error al actualizar los ajustes de privacidad. %(error)s"],"Updated privacy settings.":["Ajustes de privacidad actualizados."],"Updating privacy settings…":["Actualizando ajustes de privacidad…"],"Add Jetpack Search Widget":["Añadir widget de búsqueda de Jetpack"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["Añade un widget de búsqueda de Jetpack a tu barra lateral para configurar los filtros de búsqueda avanzada."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["Suite completa de seguridad, marketing y herramientas de automatización de ingresos, alojamiento ilimitado de vídeo, temas ilimitados, búsquedas mejoradas y soporte prioritario."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["Suite completa de seguridad, marketing y herramientas de automatización de ingresos, alojamiento ilimitado de vídeo y soporte prioritario."],"Daily backups, spam filtering, and priority support.":["Copias de seguridad diarias, filtrado de spam y soporte prioritario."],"Always-on Security":["Seguridad siempre activa"],"Activate video hosting":["Activar alojamiento de vídeo"],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Copias de seguridad en tiempo real de todos los datos de tu sitio con espacio ilimitado, restauraciones en un clic, vigilancia automática de seguridad y soporte prioritario"],"Design the perfect website":["Diseña la web perfecta"],"Set up Jetpack":["Configurar Jetpack"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["Copias de seguridad en tiempo real de todos los datos de tu sitio con espacio ilimitado, restauraciones a un clic y escaneo de seguridad automático."],"Jetpack Search":["Búsqueda de Jetpack"],"Jetpack version %(version)s":["Jetpack versión %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["Tu sitio está haciendo copia de seguridad en tiempo real y escaneado regularmente en busca de amenazas de seguridad."],"Daily backup of all your site data with unlimited space and one-click restores":["Copias de seguridad diarias de todos los datos de tu sitio con espacio ilimitado y restauraciones con un solo clic"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Copia de seguridad en tiempo real de todos los datos de tu sitio con espacio ilimitado, restauraciones con un solo clic, escaneo automático de seguridad y soporte prioritario"],"View your security activity":["Ver tu actividad de seguridad"]," (powered by VaultPress).":["(impulsado por VaultPress)."],"Customize Search Widget":["Personalizar el widget de búsqueda"],"Please correct the issue below and try again.":["Por favor, corrige el problema de abajo e inténtalo de nuevo.","Por favor, corrige los problemas de abajo e inténtalo de nuevo."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["Nos aseguramos de que su sitio se mantenga libre de amenazas a la seguridad. Se te notificará si encontramos uno."],"Your site is being backed up in real-time.":["Su sitio está siendo respaldado en tiempo real."],"Jetpack version":["Versión de Jetpack"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}Ve la actividad de tu sitio{{/a}} en un solo feed."],"Activity":["Actividad"],"Confirm each new phrase you add by pressing enter.":["Confirma cada nueva frase que añadas pulsando intro."],"{{a}}View details{{/a}}":["{{a}}Ver detalles{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["Gracias por elegir un plan de Jetpack Profesional. Jetpack está ahora realizando copias de seguridad de tu contenido, escaneando las amenazas de seguridad y te da acceso a temas premium."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["Con Jetpack Professional, puedes crear el sitio perfecto con uno de los más de 300 temas de WordPress diseñados profesionalmente, incluidos más de 200 temas premium. Personaliza tu contenido con una gran variedad de widgets o añade videos ilimitados a tus entradas y páginas, que se muestran sin anuncios ni marcas de agua."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["Hacer crecer tus seguidores es fácil con el plan profesional, gracias a programar y compartir contenido, las herramientas SEO y las opciones de suscripción incluidas. Puedes ganar dinero con tu sitio con un sencillo botón de pago y anuncios incrustados, y supervisar el éxito de tus esfuerzos integrándolo con Google Analytics."],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Jetpack Professional te ofrece todo lo que necesita para mantener tu trabajo seguro, incluyendo copias de seguridad a demanda y escaneos de malware, restaurar el sitio con un solo clic y resolución de problemas. Tu sitio estará totalmente protegido contra el spam, el código malicioso y los intentos de inicio de sesión por fuerza bruta."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Comienza a explorar Jetpack Professional ahora para ver todos los beneficios de tu nuevo plan."],"Install premium themes":["Instalar temas premium"],"Review SEO features":["Revisar las características de SEO"],"Welcome Professional":["Bienvenido a Profesional"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["Gracias por elegir un plan Premium de Jetpack. Jetpack está ahora realizando copias de seguridad de tu sitio, escaneando las amenazas de seguridad y habilitando funciones de monetización."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["Con Jetpack Premium, puedes crear el sitio perfecto, no importa su propósito. Personaliza la apariencia de tu sitio con uno de los más de 100 temas gratuitos o mejora tu contenido con video HD ilimitado — todo alojado sin anuncios ni marcas de agua."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Utilizando las poderosas herramientas de uso compartido de Jetpack, puedes compartir automáticamente tus publicaciones más recientes en las redes sociales o programar tu contenido para que se vuelva a compartir en cualquier fecha o hora que te venga bien. Y además de aumentar tus seguidores, puedes hacer que crezca crecer tu negocio con herramientas como botones de pago y publicidad."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Comienza a explorar Jetpack Premium ahora para ver todos los beneficios de tu nuevo plan."],"Monetize your site with ads":["Monetiza tu sitio con anuncios"],"Welcome Premium":["Bienvenido al plan premium"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["Gracias por elegir un plan personal de Jetpack. Jetpack está ahora realizando copias de seguridad de tu sitio y buscando amenazas de seguridad."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["Con Jetpack Personal, tienes acceso a más de 100 temas de WordPress gratuitos, diseñados profesionalmente. Elije el tema que mejor se adapte a tu sitio y personalizar los colores, las imágenes o agrega una variedad de nuevos widgets."],"Got it":["¡Entendido!"],"Welcome personal":["Bienvenido al plan personal"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["Al hacer clic en el botón inferior aceptas nuestros {{tosLink}}términos del servicio{{/tosLink}} y {{shareDetailsLink}}compartir detalles{{/shareDetailsLink}} con WordPress.com"],"Jetpack Stats People":["Estadísticas de gente Jetpack"],"Hello there! Your stats have been activated.":["¡Hola! Tus estadísticas están activas."],"Just give us a little time to collect data so we can display it for you here.":["Danos un poco de tiempo para recopilar datos para que podamos mostrártelos aquí. "],"Okay, got it!":["¡Vale, lo entiendo!"],"Display ads below posts on":["Muestra anuncios bajo las entradas"],"Additional ad placements":["Ubicaciones adicionales de anuncios"],"Top of each page":["En la parte superior de cada página"],"Second ad below post":["Segundo anuncio bajo la entrada"],"Archives":["Archivos"],"Explore Professional":["Explorar el plan profesional"],"Compare All Plans":["Compara todos los planes"],"Person with laptop":["Una persona con un portátil"],"Your Jetpack site is ready to go!":["¡Tu sitio Jetpack está listo!"],"Stars":["Estrellas"],"Jupiter":["Júpiter"],"Welcome to Jetpack Personal":["Bienvenido a Jetpack personal"],"Welcome to Jetpack Premium":["Bienvenido a Jetpack Premium"],"Welcome to Jetpack Professional":["Bienvenido a Jetpack Profesional"],"Schedule posts":["Programación de entradas"],"Activate Publicize":["Activa Divulgar"],"Your site is backed up.":["Tu sitio está copiado."],"Image Performance":["Rendimiento de imágenes"],"Get WordPress Apps for every device":["Consigue aplicaciones WordPress para cualquier dispositivo"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Gestiona todos tus sitios desde un solo escritorio: publica contenido, sigue las estadísticas, modera comentarios, y mucho más desde cualquier lugar del mundo."],"I already use this app.":["Ya he usado esta aplicación."],"Create address":["Crear dirección"],"Priority support":["Soporte prioritario"],"Add sharing buttons to your posts":["Añade botones de compartir a tus entradas"],"Automatically share your posts to social networks":["Comparte automáticamente tus entradas en las redes sociales"],"Updating settings…":["Actualizando ajustes…"],"Updating Post by Email address…":["Actualizando la entrada por dirección de correo electrónico…"],"Your paid plan gives you access to prioritized Jetpack support.":["Tu plan de pago te da acceso al soporte prioritario de Jetpack"],"You have paid for backups but they're not yet active.":["Has pagado por las copias de seguridad pero aún no están activas."],"You have paid for backups and security scanning but they’re not yet active.":["Has pagado por copias y escaneo de seguridad pero aún no están activas."],"Click \"Set Up\" to finish installation.":["Haz clic en \"Configurar\" para finalizar la instalación."],"Checking site status…":["Comprobando estado del sitio…"],"Pages":["Páginas"],"We're here to help":["Dónde ir para obtener ayuda"],"Jetpack comes with free, basic support for all users.":["Jetpack incorpora soporte básico gratuito para todos los usuarios."],"Ask a question":["Haz una pregunta"],"Search our support site":["Busca en nuestro sitio de soporte"],"Get a faster resolution to your support questions.":["Consigue una respuesta más rápida a tus preguntas de soporte."],"Host fast, high-quality, ad-free video.":["Video de alta calidad, sin publicidad y con alojamiento rápido."],"Generate income with high-quality ads.":["Genera beneficios con anuncios de alta calidad."],"Real-time site backups and automatic threat resolution.":["Copias de seguridad en tiempo real y resolución automática de amenazas."],"Protect against data loss, malware, and malicious attacks.":["Protégete contra pérdidas de datos, malware y ataques maliciosos."],"Integrate easily with Google Analytics.":["Se integra fácilmente con Google Analytics."],"Help your content get found and shared with SEO tools.":["Ayuda a que tus contenidos sean encontrados y compartidos con herramientas SEO."],"Protect your site from spam.":["Protege tu sitio del spam."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["Este sitio no está conectado con WordPress.com. Por favor, contacta con el administrado para conectarlo."],"Spam filtering":["Filtro de spam"],"Daily, automated malware scanning":["Escaneo automático diario de malware."],"Daily, automated backups (unlimited storage)":["Copias de seguridad diarias automáticas (con almacenamiento ilimitado)"],"Daily, automated malware scanning with automated resolution":["Escaneo diario y resolución automática de malware"],"Unlimited, high-speed video hosting":["Alojamiento de alta velocidad ilimitado para vídeo"],"SEO preview tools":["Herramientas de vista previa SEO"],"Site stats, related content, and sharing tools":["Estadísticas del sitio, contenido relacionado y herramientas para compartir"],"Brute force attack protection and downtime monitoring":["Protección contra ataques de fuerza bruta y supervisión del tiempo de inactividad"],"Unlimited, high-speed image hosting":["Alojamiento de alta velocidad ilimitado para imágenes"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["Al desconectar tu %(siteName)s de WordPress.com, ya no tendrás acceso a lo siguiente:"],"Read more about Jetpack benefits":["Lee más sobre los beneficios de Jetpack"],"An Automattic Airline":["Una aerolínea de Automattic"],"Manage site connection":["Gestionar conexión del sitio"],"Connect your account to WordPress.com to view more stats":["Conecta tu cuenta a WordPress.com para ver más estadísticas"],"Theme enhancements":["Mejoras del tema"],"Load more posts using the default theme behavior":["Carga más entradas usando el comportamiento por defecto del tema"],"Load more posts in page with a button":["Carga mas entradas en la página con un botón"],"Load more posts as the reader scrolls down":["Carga más entradas a medida que el lector navega"],"Theme support required.":["Se requiere que el tema sea compatible."],"Learn more about adding support for Infinite Scroll to your theme.":["Aprende más sobre cómo añadir soporte para scroll infinito en tu tema."],"Use excerpts instead of full posts on front page and archive pages":["Usar extractos en vez de entradas completas en portada y páginas de archivo"],"Show featured images":["Muestra imágenes destacadas"],"Enable the WordPress.com toolbar":["Activar la barra de herramientas de WordPress.com"],"Writing tools available to you will be shown here when an administrator enables them.":["Las herramientas de escritura se te mostrarán aquí cuando un administrador las active."],"Portfolios":["Porfolios"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Date cuenta que {{b}}no es necesario verificar tu sitio con estos servicios{{/b}} para que tu sitio lo indexen los motores de búsqueda. Para usar estas herramientas avanzadas de motores de búsqueda y verificar tu sitio con un servicio pega el código de la etiqueta HTML a continuación. Lee las {{support}}instrucciones completas{{/support}} si tienes algún problema. Servicios compatibles con la verificación: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}} y {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["Crea mapas del sitio en XML"],"Collecting valuable traffic stats and insights":["Recopilación de valiosas estadísticas e informes de tráfico"],"The image helps collect stats, but should work when hidden.":["La imagen ayuda a recoger estadísticas pero debería funcionar cuando esté oculta."],"Count logged in page views from":["Contar las visualizaciones de página conectados de"],"Allow stats reports to be viewed by":["Permitir que los informes de estadísticas los vean"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["Puedes modificar estos ajustes si quieres un control más avanzado. Lee más sobre cómo {{a}}optimizar el SEO de tu sitio{{/a}}."],"Configure your SEO settings":["Configura tus ajustes SEO"],"In \"Upgrade\"":["En \"Actualizar\""],"Configure your Google Analytics settings":["Configura tus ajustes de Google Analytics"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Muestra anuncios en el primer artículo de tu portada o al final de cada página y entrada. Pon más anuncios en la parte superior de tu sitio y en cualquier área de widgets para incrementar tus ganancias."],"Enable ads and display an ad below each post":["Activa anuncios y muestra un anuncio debajo de cada entrada"],"Configure your sharing buttons":["Configura tus botones de compartir"],"Connect your social media accounts":["Conecta con tus cuentas de redes socials"],"Match accounts using email addresses":["Empareja cuentas utilizando la dirección de correo electrónico"],"Require accounts to use WordPress.com Two-Step Authentication":["Requerir cuentas para usar la identificación en dos pasos de WordPress.com"],"Add to whitelist":["Añadir a la lista blanca"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["Deberías autorizar algunas direcciones IP para que no sean bloqueadas por Jetpack. Se admiten direcciones IPv4 e IPv6. Para especificar un rango, introduce el valor menor y el mayor separados por un guión, p. ej: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["Tu sitio está asegurado y libre de amenazas."],"Checking your spam protection…":["Comprobando protección contra el spam..."],"Fetching key…":["Obteniendo clave..."],"Your site needs an Antispam key.":["Tu sitio necesita una clave Akismet."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["Hay un problema con tu clave de API antispam. {{a}}Aprende más{{/a}}."],"Your site is not protected from spam.":["Tu sitio no está protegido frente al spam."],"Your Antispam key is valid.":["Tu clave antispam no es válida."],"Your site is protected from spam.":["Tu sitio está protegido contra el spam."],"Checking key…":["Comprobando clave..."],"Your API key":["Tu clave de API"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["Si aún no tienes una clave de API, {{a}}haz clic aquí {{/a}} y sigue el proceso guiado para conseguirla."],"No search results found for %(term)s":["No se han encontrado resultados para %(term)s"],"Enter a search term to find settings or close search.":["Escribe un término de búsqueda para encontrar opciones o cierra la búsqueda."],"Connections":["Conexiones"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Tu sitio está en modo de desarrollo, por lo que no se puede conectar con WordPress.com"],"Your site is connected to WordPress.com.":["Tu sitio está conectado con WordPress.com"],"You are the Jetpack owner.":["Eres el propietario de Jetpack"],"Connected as {{span}}%(username)s{{/span}}":["Conectado como {{span}}%(username)s{{/span}}"],"View your Email Followers":["Ver tus seguidores por correo electrónico"],"Color scheme":["Esquema de color"],"Enable Markdown use for comments.":["Permite Markdown en los comentarios."],"Updated settings.":["Opciones guardadas."],"Error updating settings. %(error)s":["Error actualizando los ajustes. %(error)es"],"Regenerated Post by Email address.":["Entrada regenerada desde la dirección de correo electrónico."],"Error regenerating Post by Email address. %(error)s":["Error al regenerar la entrada desde la dirección de correo electrónico. %(error)es"],"Updated settings. Refreshing page…":["Opciones actualizadas. Recargando página..."],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["Actualmente en {{a}}Modo de desarrollo{{/a}} (algunas características están desactivadas) porque: {{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}El filtro jetpack_development_mode está activo{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}Se ha definido la constante JETPACK_DEV_DEBUG{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}La URL de tu sitio no tiene punto (p.ej. http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics es un servicio gratuito que complementa nuestras {{a}}estadísticas integradas{{/a}} con diferentes informes de tu tráfico. Las estadísticas de WordPress.com y las de Google Analytics usan distintos métodos para identificar y seguir la actividad de tu sitio, así que normalmente mostrarán totales de tus visitas, páginas vistas, etc. ligeramente diferentes."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Configura Google Analytics"],"Activate Google Analytics":["Activa Google Analytics"],"Download the free apps":["Descarga las aplicaciones gratuitas"],"Upgrade Focus: VideoPress For Weddings":["Mejora Focus: VideoPress para bodas"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}Ahora también puedes configurar las entradas relacionados en el personalizador. {{ExternalLink}}¡Pruébalo!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["Por defecto los anuncios se muestran al final de cada página, entrada, o el primer artículo en su portada. ¡También puedes añadirlos a la parte superior de su sitio y en cualquier área de widget para aumentar tus ganancias!"],"Display an ad unit at the top of your site.":["Mostrar un bloque de anuncios en la parte superior de su sitio."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["Mediante la activación de los anuncios, usted acepta las {{link}}Condiciones de servicio{{/link}} de los anuncios e Automattic."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Tu servidor está mal configurado, lo que significa que la protección de Jetpack no puede proteger tu sitio con efectividad."],"In \"Mobile\"":["En \"Móvil\""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Configura tus ajustes de aviso del supervisor en WordPress.com{{/link}}"],"View your earnings":["Ver tus ganancias"],"Configure site SEO":["Configurar el SEO del sitio"],"Activate SEO tools":["Activa las herramientas de SEO"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["Para empezar haz clic en añadir objeto en tu editor de entradas y sube un vídeo. ¡Nos encargaremos del resto!"],"Video Hosting":["Alojamiento de vídeo"],"SEO Tools":["Herramientas SEO"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Las herramientas SEO avanzadas ayudan a que tu sitio sea fácil de encontrar cuando la gente busque contenido relevante."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["La forma más sencilla de se subir vídeos sin anuncios ni marcas. Obtienes estadísticas las reproducciones de video y de las veces que se ha compartido y el reproductor es ligero y adaptable."],"You are running Jetpack on a staging server.":["Estás ejecutando Jetpack en un servidor de desarrollo."],"More Info":["Más Información"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Administra la visibilidad de los Me gusta desde los ajustes del módulo de Compartir{{/a}}"],"Your current IP: %(ip)s":["Tu IP actual: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["Hay ajustes sin guardar en esta pestaña que se perderán si la dejas. ¿Quieres proceder?"],"This will reset all Jetpack options, are you sure?":["Esto restablecerá todas las opciones de Jetpack, ¿estás seguro?"],"Search for a Jetpack feature.":["Buscar una característica de Jetpack."],"Configure your Security Scans":["Configura tus escaneos de seguridad"],"Subscriber":["Suscriptor"],"Big iPhone/iPad Update Now Available":["Gran actualización de iPhone/Ipad disponible"],"The WordPress for Android App Gets a Big Facelift":["La aplicación Android para WordPress recibe un enorme estiramiento facial"],"WordPress.com Likes are:":["Los Me gusta de WordPress.com son:"],"Comments headline":["Encabezado de los comentarios"],"A few catchy words to motivate your readers to comment.":["Expresiones pegadizas para motivar a tus lectores a comentar."],"Show a \"follow blog\" option in the comment form":["Muestra las opciones \"sigue al blog\" en el formulario de comentarios"],"Show a \"follow comments\" option in the comment form":["Muestra la opción \"sigue los comentarios\" en el formulario de comentarios."],"Put a chart showing 48 hours of views in the admin bar":["Poner un gráfico mostrando las visitas de las últimas 48 horas en la barra de administración"],"Hide the stats smiley face image":["Oculta la imágen de la carita feliz de las estadísticas"],"Whitelisted IP addresses":["Lista blanca de direcciones IP"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Muestra una promo de las aplicaciones de WordPress para móviles en el pie de la versión móvil del tema."],"Copied!":["¡Copiado!"],"Highlight and copy the following text to your clipboard:":["Realza y copia el texto siguiente a tu portapapeles: "],"Regenerate address":["Regenera la dirección"],"Automatically proofread content when: ":["Prueba de lectura automática del contenido cuando:"],"A post or page is first published":["Una entrada o página es publicada por primera vez"],"A post or page is updated":["Una entrada o página está actualizada."],"Automatic Language Detection":["Detección automática de idioma"],"The proofreader supports English, French, German, Portuguese and Spanish.":["El corrector funciona con inglés, francés, alemán, portugués y español."],"Enable proofreading for the following grammar and style rules: ":["Activar la prueba de lectura la la siguiente gramática y reglas de estilo:"],"Add a phrase":["Añade una frase"],"Cheatin' uh?":["¿Haciendo trampas?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}¿Te importaría decirnos por qué no has completado la conexión con Jetpack en esta {{a}}encuesta de 2 preguntas?{{/a}}{{/p}}{{p}}La conexión con Jetpack es obligatoria para que funcionen nuestras características gratuitas de tráfico y seguridad.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Bienvenido a {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["Tu Jetpack ya está conectado."],"You're fueled up and ready to go, Jetpack is now active.":["Estás completo de combustible y listo para ir, ahora Jetpack está activo"],"You're fueled up and ready to go.":["Estás completo de combustible y listo para ir."],"You are currently running a development version of Jetpack.":["En este momento estás ejecutando una versión de desarrollo de Jetpack."],"Submit Beta feedback":["Envía tus sugerencias"],"What would you like to see on your Jetpack Dashboard?":["¿Qué te gustaría ver en el Escritorio de tu Jetpack?"],"Let us know!":["¡Háznolo saber!"],"Saving…":["Guardando..."],"Save Settings":["Guardar ajustes"],"Jetpack Stats Icon":["Icono de estadísticas de Jeptpack"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["¡{{a}}Activa las Estadísticas del sitio{{/a}} para ver estadísticas detalladas, me gusta, seguidores, suscriptores y más! {{a1}}Aprende más{{/a1}}"],"Activate Site Stats":["Activar estadísticas del sitio"],"Security Scanning":["Escaneo de seguridad"],"Site Backups":["Copias de seguridad del sitio"],"Upgrade":["Actualiza"],"ACTIVE":["ACTIVO"],"Your site is on Development Mode":["Tu sitio web está en modo de desarrollo"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Una vez que estés conectado puedes pasar a un plan de pago para conseguir seguridad de primer nivel, herramientas de protección contra el spam y soporte prioritario."],"View your spam stats":["Ver tus estadísticas de spam"],"View your security dashboard":["Ver tu escritorio de seguridad"],"The site is in Development Mode, so you can not connect to WordPress.com.":["El sitio está en el modo de desarrollo, así que no puedes conectarte a WordPress.com."],"Link your account to WordPress.com to get the most out of Jetpack.":["Conecta tu cuenta a WordPress.com para conseguir el máximo de Jetpack."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["Para la exploración automática y completa de las amenazas de seguridad, por favor, {{a}}instala y activa{{/a}} VaultPress."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["Para la exploración automática y completa de las amenazas de seguridad, por favor, {{a}}actualiza tu cuenta{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetapck está bloqueando activamente intentos de acceso maliciosos. ¡Muy pronto se mostraran datos aquí mismo!"],"Total malicious attacks blocked on your site.":["Total de ataques maliciosos bloqueados en tu sitio."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Activa Protección{{/a}} para mantener tu sitio protegido de intentos de acceso malintencionados."],"All plugins are up-to-date. Awesome work!":["Todos los plugins están actualizados. ¡Buen trabajo!"],"Jetpack is improving and optimizing your image speed.":["Jeptack está mejorando y optimizando la velocidad de tus imágenes."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack está supervisando tu sitio. Si creemos que tu sitio está caído, recibirás un correo electrónico."],"Security":["Seguridad"],"Performance":["Rendimiento"],"Backups":["Copias de seguridad"],"{{a}}View backup details{{/a}}.":["{{a}}Ver detalles de la copia de seguridad{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["Para hacer automáticamente una copia de seguridad de tu sitio completo, por favor {{a}}instala y activa{{/a}} VaultPress."],"Unavailable in Dev Mode.":["No disponible en el modo desarrollador."],"Spam Protection":["Protección de spam"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["Para una defensa contra el spam de calidad profesional por favor {{a}}instala Akismet{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["Si quieres un protector contra el spam de calidad empresarial, {{a}}activa Akismet{{/a}}."],"Invalid key":["Clave no válida"],"Unavailable in Dev Mode":["No disponible en modo desarrollador"],"Activating recommended features…":["Activando funcionalidades recomendadas..."],"Recommended features active.":["Funcionalidades de recomendación activas."],"Recommended features failed to activate. %(error)s":["No se pudieron activar las funcionalidades recomendadas. %(error)s"],"Activating %(slug)s…":["Activando %(slug)s…"],"%(slug)s has been activated.":["%(slug)s se ha activado."],"%(slug)s failed to activate. %(error)s":["%(slug)s falló al activarse. %(error)s"],"Deactivating %(slug)s…":["Desactivando %(slug)s…"],"%(slug)s has been deactivated.":["%(slug)s ha sido desactivado."],"%(slug)s failed to deactivate. %(error)s":["%(slug)s no se desactivaron. %(error)s"],"Updating %(slug)s settings…":["Actualizando %(slug)s ajustes…"],"Updated %(slug)s settings.":["Ajustes de %(slug)s actualizados."],"Error updating %(slug)s settings. %(error)s":["Error actualizando los ajustes %(slug)s. %(error)s"],"Updating %(slug)s address…":["Actualizando la dirección %(slug)s…"],"Regenerated %(slug)s address .":["Regenerar %(slug)s direcciones."],"Error regenerating %(slug)s address. %(error)s":["Error regenerando la dirección %(slug). %(error)s"],"Resetting Jetpack options…":["Resetear opciones de jetpack"],"Options reset.":["Ajustes restablecidos."],"Options failed to reset.":["Fallo al restablecer las opciones."],"There was an error disconnecting Jetpack. Error: %(error)s":["Ha ocurrido un error desconectando Jetpack. Error: %(error)s"],"Unlinking from WordPress.com":["Desconectando de WordPress.com"],"Unlinked from WordPress.com.":["Desconectado de WordPress.com."],"Error unlinking from WordPress.com. %(error)s":["Error al desconectar de WordPress.com. %(error)s"],"At A Glance":["De un vistazo"],"Clichés":["Clichés"],"Dashboard":["Escritorio"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["¿Te importaría decirnos por qué? Simplemente {{a}}contestando dos sencillas preguntas{{/a}} nos ayudarás a mejorar Jetpack."],"Automattic's Privacy Policy":["Política de privacidad de Automattic"],"WordPress.com Terms of Service":["Términos del servicio de WordPress.com"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}Actívalo{{/a}} para mejorar el rendimiento y velocidad de carga de tus imágenes."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Activar las actualizaciones automáticas de plugins{{/a}}"],"Plugin Updates":["Actualizaciones de plugins"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["Para realizar copias de seguridad automáticas de tu sitio completo, por favor {{a}}amplía tu cuenta{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["¡Vaya! Tus claves de Akismet se han perdido o no son válidas. {{akismetSettings}}Ve a la las opciones de Akismet para arreglarlo {{/akismetSettings}}"],"No threats found, you're good to go!":["No se encontraron amenazas.¡Adelante!"],"{{a}}Contact Support{{/a}}":["{{a}}Contacta con soporte{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}Ver detalles en VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["¡Vaya! Se encontró %(number)s amenza.","¡Vaya! Se encontraron %(number)s amenzas."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}Activa Supervisor{{/a}} para recibir avisos si tu sitio se cae."],"Loading…":["Cargando..."],"Downtime monitoring":["Supervisión de inactividad"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}Ver más estadísticas en WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}Ver más estadísticas{{/button}}"],"All-time comments":["Todos los comentarios"],"All-time views":["Visitas de todo el periodo"],"%(number)s View":["%(number)s visita","%(number)s visitas"],"Best overall day":["El mejor día"],"Views today":["Visualizaciones hoy"],"Months":["Meses"],"Weeks":["Semanas"],"Days":["Días"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["Algo pasó al cargar las estadísticas. Por favor, inténtalo de nuevo más tarde o {{a}}ve tus estadísticas ahora en WordPress.com{{/a}}"],"Click to view detailed stats.":["Haz clic para ver estadíticas detalladas."],"Views: %(numberOfViews)s":["VIsitas: %(numberOfViews)s"],"Week of %(date)s":["Semana del %(date)s"],"Site Security":["Seguridad del sitio"],"Activate recommended features":["Activa las características recomendadas"],"Link to WordPress.com":["Conecta con WordPress.com"],"Unlink me from WordPress.com":["Desconectame de WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["Hubo un problema conectando con tu Jetpack. Por favor haz click en \"Conecta con WordPress.com\" de nuevo."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["Hemos tenido una incidencia conectando Jetpack; desactiva y vuelve a activar el plugin de Jetpack, y conecta otra vez."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Debes permanecer conectado a tu blog de WordPress mientras autorizas Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Tu Jetpack tiene un problema.{{/s}} Lamentamos las molestias. Por favor, inténtalo más tarde. Si el problema continúa, por favor contacta con el soporte con este mensaje: %(error_key)s"],"Disconnecting Jetpack":["Desconectando Jetpack"],"Learn more":["Aprende más"],"Posts":["Entradas"],"Front page":["Portada"],"Upload videos":["Subir vídeos"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Muestra contenido relacionado después de las entradas"],"Related":["Relacionado"],"Save":["Guardar"],"Email Address":["Dirección de correo electrónico"],"Media":["Medios"],"Themes":["Temas"],"Site Stats":["Estadísticas del sitio"],"Sharing":["Compartir"],"Testimonials":["Testimonios"],"Cancel":["Cancelar"],"Comments":["Comentarios"],"Ignored Phrases":["Frases ignoradas"],"Use automatically detected language to proofread posts and pages":["Utilizar idioma detectado automáticamente para corregir entradas y páginas"],"Redundant Phrases":["Frases Redundantes"],"Phrases to Avoid":["Frases para Evitar"],"Passive Voice":["Voz Pasiva"],"Jargon":["Jerga"],"Hidden Verbs":["Verbos ocultos"],"Double Negatives":["Doble negaciones"],"Diacritical Marks":["Signos Diacríticos"],"Complex Phrases":["Frases Complejas"],"Bias Language":["Sesgos de Idioma"],"English Options":["Opciones de Inglés"],"Proofreading":["Revisión"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack no puede ponerse en contacto con WordPress.com: %(error_key)s. Esto generalmente significa que algo no está configurado correctamente en el servidor de tu sitio."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com tiene problemas ahora mismo y no puede repostar tu Jetpack. Por favor, inténtalo más tarde."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Tu Jetpack tiene un fallo.{{/s}} No es posible conectar este sitio con WordPress.com. Esto significa normalmente que tu sitio no es público (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Tu web tiene que ser accesible al público para usar Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["Has desconectado Jetpack con éxito"],"Edit":["Editar"],"Connected":["Conectado"],"Activate":["Activar"],"Active":["Activo"],"Search":["Buscar"],"Settings":["Ajustes"],"Learn More":["Aprende más"],"Disconnect Jetpack":["Desconectar Jetpack"],"Test your site’s compatibility with Jetpack.":["Comprueba la compatibilidad de tu sitio con Jetpack."],"Settings header\u0004Plugin Autoupdates":["Actualizaciones automáticas de plugins"],"Settings header\u0004Downtime monitoring":["Supervisión del tiempo de inactividad"],"Settings header\u0004Privacy Settings":["Ajustes de privacidad"],"Settings header\u0004WordPress.com toolbar":["Barra de herramientas de WordPress.com"],"Settings header\u0004Composing":["Creando"],"Settings header\u0004Site stats":["Estadísticas del sitio"],"Settings header\u0004Search engine optimization":["Optimización en los motores de búsqueda"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Botones de compartir"],"Settings header\u0004Publicize connections":["Conexiones de Divulgar"],"Settings header\u0004Like buttons":["Botones me gusta"],"Settings header\u0004WordPress.com log in":["Acceso WordPress.com"],"Settings header\u0004Brute force attack protection":["Protección ante ataques de fuerza bruta"],"Settings header\u0004Backups and security scanning":["Copias y escaneo de seguridad "],"Settings header\u0004Spam filtering":["Filtro de spam"],"Navigation item.\u0004Performance":["Rendimiento"],"Navigation item.\u0004My Plan":["Mi plan"],"Navigation item.\u0004Dev Tools":["Herramientas de desarrollo"],"Navigation item.\u0004Settings":["Ajustes"],"Navigation item.\u0004Discussion":["Debate"],"Navigation item.\u0004Traffic":["Tráfico"],"Navigation item.\u0004Sharing":["Compartir"],"Navigation item.\u0004At A Glance":["De un vistazo"],"Navigation item.\u0004Plans":["Planes"],"Navigation item.\u0004Writing":["Escritura"],"Navigation item.\u0004Reset Options (dev only)":["Restablecer ajustes (solo en versiones de desarrollo)"],"Navigation item.\u0004Security":["Seguridad"],"Navigation item.\u0004At a Glance":["De un vistazo"],"Search term.\u0004terms of service":["términos del servicio"],"Search term.\u0004tos":["tds"],"Search term.\u0004gdpr":["rgpd"],"Search term.\u0004data":["datos"],"Search term.\u0004tracks":["pistas"],"Search term.\u0004privacy":["privacidad"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["Actualizar"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Actualizar"],"Button caption\u0004Saving…":["Guardando…"],"Button caption\u0004Save settings":["Guardar ajustes"],"A heading for a block of related posts.\u0004Related":["Relacionado"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Vista previa"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Sigue conectado"],"A caption for a button to disconnect.\u0004Disconnect":["Desconectar"],"Short warning message\u0004Updates needed":["Actualizaciones necesarias"],"Short label appearing near a paid feature configuration block.\u0004Paid":["De pago"],"A header for a preview area in the configuration screen.\u0004Preview":["Vista previa"],"Ads header\u0004Ads":["Anuncios"],"Dashboard widget header\u0004Site connection":["Conexión al sitio"],"Dashboard widget header\u0004Account connection":["Conexión a tu cuenta"],"A caption for a small button to fix security issues.\u0004Threats":["Amenazas"],"A caption for a small button to fix security issues.\u0004FIX":["SOLUCIONAR"],"Short warning message about new threats found.\u0004Threats found!":["¡Encontradas amenazas!"],"Short warning message about site having no security scan.\u0004No scanning":["No se ha escaneado"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Actualizar"],"Short message informing user that the site is secure.\u0004Secure":["Seguro"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Clave no válida"],"Caption for a button to set up a feature.\u0004Set up":["Configurar"],"verb\u0004Copy":["Copiar"],"Shorthand for Privacy Policy.\u0004Privacy":["Privacidad"],"Shorthand for Terms of Service.\u0004Terms":["Términos"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Depuración"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["Comentarios de spam bloqueados."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-es_MX-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-es_MX-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index b0a582bb..00000000
--- a/plugins/jetpack/languages/json/jetpack-es_MX-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"es_MX"},"Manually Verify ":[""],"Verify with Google":[""],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":[""],"or":[""],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":[""],"Your site is verified with Google":[""],"Site failed to verify: %(error)s":[""],"Verifying...":[""],"Add faster, more advanced searching to your site with Jetpack Professional.":[""],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":[""],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":[""],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":[""],"Jetpack Search supports many customizations.":[""],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":[""],"Site is verified":[""],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":[""],"Spam filtering and priority support.":[""],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":[""],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":[""],"Custom ads.txt entries":[""],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":[""],"Introducing Premium Themes":[""]," Premium Themes":[""],"Privacy information":[""],"Enable Lazy Loading for images":[""],"Performance & speed":[""],"Enable high-speed, ad-free video player":[""],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":[""],"Video":[""],"Carousel color scheme":[""],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":[""],"Show photo Exif metadata in carousel (when available)":[""],"Display images in a full-screen carousel gallery":[""],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":[""],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":[""],"Portfolios shortcode: [portfolio]":[""],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":[""],"Testimonials shortcode: [testimonials]":[""],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":[""],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":[""],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":[""],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":[""],"Configure related posts in the Customizer":[""],"Highlight related content with a heading":[""],"View security scan details":[""],"View backup history":[""],"Show a thumbnail image where available":[""],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":[""],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":[""],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":[""],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":[""],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":[""],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been disabled by a site administrator.":[""],"%(moduleName)s has been disabled by a site administrator.":[""],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":[""],"Configure your notification settings":[""],"Monitor your site's downtime":[""],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":[""],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":[""],"Plugin needs updating.":["","Plugins need updating."],"%(number)s":["","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":[""],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":[""],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":[""],"Akismet checks your comments and contact form submissions against our global database of spam.":[""],"Privacy Information":[""],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":[""],"Add the Search (Jetpack) widget to your sidebar":[""],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":[""],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":[""],"Loads the next posts automatically when the reader approaches the bottom of the page.":[""],"Allows you to publish new posts by sending an email to a special address.":[""],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":[""],"Checks your content for correct grammar and spelling, misused words, and style while you write.":[""],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":[""],"Displays information on your site activity, including visitors and popular posts or pages.":[""],"Allows you to optimize your site and its content for better results in search engines.":[""],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":[""],"Displays high-quality ads on your site that allow you to earn income.":[""],"Adds sharing buttons to your content so that visitors can share it on social media sites.":[""],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":[""],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":[""],"Allows registered users to log in to your site with their WordPress.com accounts.":[""],"Protects your site from traditional and distributed brute force login attacks.":[""],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":[""],"Removes spam from comments and contact forms.":[""],"We are committed to your privacy and security. ":[""],"View all Jetpack plans":[""],"Manage your plan":[""],"Your Plan":[""],"You’re currently on Jetpack %(plan)s.":[""],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":[""],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":[""],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":[""],"Add Search (Jetpack) Widget":[""],"Jetpack Search is powering search on your site.":[""],"Manage your plugins":[""],"Moderate comments":[""],"Error updating privacy settings. %(error)s":[""],"Updated privacy settings.":[""],"Updating privacy settings…":[""],"Add Jetpack Search Widget":[""],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":[""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":[""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":[""],"Daily backups, spam filtering, and priority support.":[""],"Always-on Security":[""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":[""],"Design the perfect website":[""],"Set up Jetpack":[""],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":[""],"Jetpack Search":[""],"Jetpack version %(version)s":[""],"Your site is being backed up in real time and regularly scanned for security threats.":[""],"Daily backup of all your site data with unlimited space and one-click restores":[""],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":[""],"View your security activity":[""]," (powered by VaultPress).":[""],"Customize Search Widget":[""],"Please correct the issue below and try again.":["","Please correct the issues listed below and try again."],"We are making sure your site stays free of security threats. You will be notified if we find one.":[""],"Your site is being backed up in real-time.":[""],"Jetpack version":[""],"{{a}}View your site's activity{{/a}} in a single feed.":[""],"Activity":[""],"Confirm each new phrase you add by pressing enter.":["Confirme cada nueva frase que agregue presionando enter."],"{{a}}View details{{/a}}":[""],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":[""],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":[""],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":[""],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":[""],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":[""],"Install premium themes":[""],"Review SEO features":[""],"Welcome Professional":[""],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":[""],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":[""],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":[""],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":[""],"Monetize your site with ads":[""],"Welcome Premium":[""],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":[""],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":[""],"Welcome personal":[""],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":[""],"Jetpack Stats People":[""],"Hello there! Your stats have been activated.":[""],"Just give us a little time to collect data so we can display it for you here.":[""],"Okay, got it!":[""],"Display ads below posts on":[""],"Additional ad placements":[""],"Top of each page":[""],"Second ad below post":[""],"Archives":[""],"Explore Professional":[""],"Compare All Plans":[""],"Person with laptop":[""],"Your Jetpack site is ready to go!":[""],"Stars":[""],"Jupiter":[""],"Welcome to Jetpack Personal":[""],"Welcome to Jetpack Premium":[""],"Welcome to Jetpack Professional":[""],"Activate Publicize":[""],"Your site is backed up.":[""],"Image Performance":[""],"Get WordPress Apps for every device":["Consigue aplicaciones WordPress para cualquier dispositivo"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Gestiona todos tus sitios desde un solo escritorio: publica contenido, sigue las estadísticas, modera comentarios, y mucho más desde cualquier lugar del mundo."],"I already use this app.":["Ya he usado esta aplicación."],"Create address":["Crear dirección"],"Priority support":["Soporte prioritario"],"Add sharing buttons to your posts":["Añade botones de compartir a tus entradas"],"Automatically share your posts to social networks":["Comparte automáticamente tus entradas en las redes sociales"],"Updating settings…":["Actualizando ajustes…"],"Updating Post by Email address…":["Actualizando la entrada por dirección de correo electrónico…"],"Your paid plan gives you access to prioritized Jetpack support.":["Tu plan de pago te da acceso al soporte prioritario de Jetpack"],"You have paid for backups but they're not yet active.":["Has pagado por las copias de seguridad pero aún no están activas."],"You have paid for backups and security scanning but they’re not yet active.":["Has pagado por copias y escaneo de seguridad pero aún no están activas."],"Click \"Set Up\" to finish installation.":["Haz clic en \"Configurar\" para finalizar la instalación."],"Checking site status…":["Comprobando estado del sitio…"],"Pages":["Páginas"],"We're here to help":["Dónde ir para obtener ayuda"],"Jetpack comes with free, basic support for all users.":["Jetpack incorpora soporte básico gratuito para todos los usuarios."],"Ask a question":["Haz una pregunta"],"Search our support site":["Busca en nuestro sitio de soporte"],"Get a faster resolution to your support questions.":["Consigue una respuesta más rápida a tus preguntas de soporte."],"Host fast, high-quality, ad-free video.":["Video de alta calidad, sin publicidad y con alojamiento rápido."],"Generate income with high-quality ads.":["Genera beneficios con anuncios de alta calidad."],"Real-time site backups and automatic threat resolution.":["Copias de seguridad en tiempo real y resolución automática de amenazas."],"Protect against data loss, malware, and malicious attacks.":["Protege contra pérdidas de datos, malware y ataques maliciosos."],"Integrate easily with Google Analytics.":["Se integra fácilmente con Google Analytics."],"Help your content get found and shared with SEO tools.":["Ayuda a que tus contenidos sean encontrados y compartidos con herramientas SEO."],"Protect your site from spam.":["Protege tu sitio del spam."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["Este sitio no está conectado con WordPress.com. Por favor, contacta con el administrado para conectarlo."],"Spam filtering":["Filtro de spam"],"Daily, automated malware scanning":["Escaneo automático diario de malware"],"Daily, automated backups (unlimited storage)":["Copias de seguridad diarias automáticas (con almacenamiento ilimitado)"],"Daily, automated malware scanning with automated resolution":["Escaneo diario y resolución automática de malware"],"SEO preview tools":["Herramientas de vista previa SEO"],"Site stats, related content, and sharing tools":["Estadísticas del sitio, contenido relacionado y herramientas para compartir"],"Brute force attack protection and downtime monitoring":["Protección contra ataques de fuerza bruta y monitorización de tiempo de actividad"],"Unlimited, high-speed image hosting":["Alojamiento de alta velocidad ilimitado para imágenes"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["Al desconectar tu %(siteName)s de WordPress.com, ya no tendrás acceso a lo siguiente:"],"Read more about Jetpack benefits":["Lee más sobre los beneficios de Jetpack"],"An Automattic Airline":["Una aerolínea de Automattic"],"Manage site connection":["Gestionar conexión del sitio"],"Connect your account to WordPress.com to view more stats":["Conecta tu cuenta a WordPress.com para ver más estadísticas"],"Theme enhancements":["Mejoras del tema"],"Load more posts using the default theme behavior":["Carga más entradas usando el comportamiento por defecto del tema"],"Load more posts in page with a button":["Carga mas entradas en la página con un botón"],"Load more posts as the reader scrolls down":["Carga más entradas a medida que el lector navega"],"Theme support required.":["Se requiere que el tema sea compatible."],"Learn more about adding support for Infinite Scroll to your theme.":["Aprende más sobre como añadir soporte para scroll infinito en tu tema."],"Use excerpts instead of full posts on front page and archive pages":["Usar extractos en vez de entradas completas en portada y páginas de archivo"],"Show featured images":["Muestra imágenes destacadas"],"Enable the WordPress.com toolbar":["Activar la barra de herramientas de WordPress.com"],"Writing tools available to you will be shown here when an administrator enables them.":["Las herramientas de escritura se te mostrarán aquí cuando un administrador las active."],"Portfolios":["Portafolios"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Date cuenta que {{b}}no es necesario verificar tu sitio con estos servicios{{/b}} para que tu sitio lo indexen los motores de búsqueda. Para usar estas herramientas avanzadas de motores de búsqueda y verificar tu sitio con un servicio pega el código de la etiqueta HTML a continuación. Lee las {{support}}instrucciones completas{{/support}} si tienes algún problema. Servicios compatibles con la verificación: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}} y {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["Crea mapas del sitio XML"],"Collecting valuable traffic stats and insights":["Recogiendo valiosas estadísticas e informes de tráfico"],"The image helps collect stats, but should work when hidden.":["La imagen ayuda a recoger estadísticas pero debería funcionar cuando esté oculta."],"Count logged in page views from":["Contar las visualizaciones de página conectados de"],"Allow stats reports to be viewed by":["Permitir que los informes de estadísticas los vean"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["Puedes modificar estos ajustes si quieres un control más avanzado. Lee más sobre como {a}}optimizar el SEO de tu sitio{{/a}}."],"Configure your SEO settings":["Configura tus ajustes SEO"],"In \"Upgrade\"":["En \"Actualizar\""],"Configure your Google Analytics settings":["Configura tus ajustes de Google Analytics"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Muestra anuncios en el primer artículo de tu portada o al final de cada página y entrada. Pon más anuncios en la parte superior de tu sitio y en cualquier área de widgets para incrementar tus ganancias."],"Enable ads and display an ad below each post":["Activa anuncios y muestra un anuncio debajo de cada entrada"],"Configure your sharing buttons":["Configura tus botones de compartir"],"Connect your social media accounts":["Conecta con tus cuentas de redes socials"],"Match accounts using email addresses":["Empareja cuentas utilizando la dirección de email"],"Require accounts to use WordPress.com Two-Step Authentication":["Requerir cuentas para usar la identificación en dos pasos de WordPress.com"],"Add to whitelist":["Añadir a la lista blanca"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["Deberías autorizar algunas direcciones IP para que no sean bloqueadas por Jetpack. Se admiten direcciones IPv4 e IPv6. Para especificar un rango, introduce el valor menor y el mayor separados por un guión, p. ej: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["Tu sitio está asegurado y libre de amenazas."],"Checking your spam protection…":["Comprobando protección contra el spam..."],"Fetching key…":["Obteniendo clave..."],"Your site needs an Antispam key.":["Tu sitio necesita una clave Akismet."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["Hay un problema con tu clave de API antispam. {{a}}Saber más{{/a}}."],"Your site is not protected from spam.":["Tu sitio no está protegido frente al spam."],"Your Antispam key is valid.":["Tu clave antispam no es válida."],"Your site is protected from spam.":["Tu sitio está protegido contra el spam."],"Checking key…":["Comprobando clave..."],"Your API key":["Tu clave de API"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["Si aún no tienes una clave de API, {{a}}haz clic aquí {{/a}} y sigue el proceso guiado para conseguirla."],"No search results found for %(term)s":["No se han encontrado resultados para %(term)s"],"Enter a search term to find settings or close search.":["Escribe un término de búsqueda para encontrar opciones o cierra la búsqueda."],"Connections":["Conexiones"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Tu sitio está en modo de desarrollo, por lo que no se puede conectar con WordPress.com"],"Your site is connected to WordPress.com.":["Tu sitio está conectado con WordPress.com"],"You are the Jetpack owner.":["Eres el propietario de Jetpack."],"Connected as {{span}}%(username)s{{/span}}":["Conectado como {{span}}%(username)s{{/span}}"],"View your Email Followers":["Ver tus seguidores por correo electrónico"],"Color scheme":["Esquema de color"],"Enable Markdown use for comments.":["Permite Markdown en los comentarios."],"Updated settings.":["Opciones guardadas."],"Error updating settings. %(error)s":["Error actualizando opciones. %(error)s"],"Regenerated Post by Email address.":["Entrada regenerada desde la dirección de correo electrónico."],"Error regenerating Post by Email address. %(error)s":["Error al regenerar la entrada desde la dirección de correo electrónico. %(error)es"],"Updated settings. Refreshing page…":["Opciones actualizadas. Recargando página..."],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["Actualmente en {{a}}modo de desarrollo{{/a}} (algunas características están desactivadas) porque:{{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}El filtro jetpack_development_mode está activo{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}Se ha definido la constante JETPACK_DEV_DEBUG{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}La URL de tu sitio no tiene punto (p.ej. http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics es un servicio gratuito que complementa nuestras {{a}}estadísticas integradas{{/a}} con diferentes informes de tu tráfico. Las estadísticas de WordPress.com y las de Google Analytics usan distintos métodos para identificar y seguir la actividad de tu sitio, así que normalmente mostrarán totales de tus visitas, páginas vistas, etc. ligeramente diferentes."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Configura Google Analytics"],"Activate Google Analytics":["Activa Google Analytics"],"Download the free apps":["Descarga las aplicaciones gratuitas"],"Upgrade Focus: VideoPress For Weddings":["Actualiza Focus: VideoPress para bodas"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}Ahora también puedes configurar las entradas relacionados en el personalizador. {{ExternalLink}}¡Pruébalo!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["Por defecto los anuncios se muestran al final de cada página, entrada, o el primer artículo en su portada. ¡También puedes añadirlos a la parte superior de su sitio y en cualquier área de widget para aumentar tus ganancias!"],"Display an ad unit at the top of your site.":["Mostrar un bloque de anuncios en la parte superior de su sitio."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["Mediante la activación de los anuncios, usted acepta las {{link}}Condiciones de servicio{{/link}} de los anuncios e Automattic."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Tu servidor está mal configurado, lo que significa que Jetpack Protect no puede proteger tu sitio con efectividad."],"In \"Mobile\"":["En \"Móvil\""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Configura tus ajustes de aviso de Monitor en WordPress.com{{/link}}"],"View your earnings":["Ver tus ganancias"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["Para empezar haz clic en añadir objeto en tu editor de entradas y sube un video. ¡Nos encargaremos del resto!"],"Video Hosting":["Alojamiento de video"],"SEO Tools":["Herramientas SEO"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Las herramientas SEO avanzadas ayudan a que tu sitio sea fácil de encontrar cuando la gente busque contenido relevante."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["La forma más sencilla de se subir vídeos sin anuncios ni marcas. Obtienes estadísticas las reproducciones de video y de las veces que se ha compartido y el reproductor es ligero y adaptable."],"You are running Jetpack on a staging server.":["Estás ejecutando Jetpack en un servidor de desarrollo."],"More Info":["Más Información"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Administra la visibilidad de los Me gusta desde los ajustes del módulo de Compartir{{/a}}"],"Your current IP: %(ip)s":["Tu IP actual: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["Hay ajustes sin guardar en esta pestaña que se perderán si la dejas. ¿Quieres proceder?"],"This will reset all Jetpack options, are you sure?":["Esto restablecerá todas las opciones de Jetpack, ¿estás seguro?"],"Search for a Jetpack feature.":["Buscar una característica de Jetpack."],"Configure your Security Scans":["Configura tus escaneos de seguridad"],"Subscriber":["Suscriptor"],"Big iPhone/iPad Update Now Available":["Gran actualización de iPhone/Ipad disponible"],"The WordPress for Android App Gets a Big Facelift":["La aplicación Android para WordPress recibe un enorme estiramiento facial"],"WordPress.com Likes are:":["Los Me gusta de WordPress.com son:"],"Comments headline":["Encabezado de los comentarios"],"A few catchy words to motivate your readers to comment.":["Expresiones pegadizas para motivar a tus lectores a comentar."],"Show a \"follow blog\" option in the comment form":["Muestra las opciones \"sigue al blog\" en el formulario de comentarios"],"Show a \"follow comments\" option in the comment form":["Muestra la opción \"sigue los comentarios\" en el formulario de comentarios"],"Put a chart showing 48 hours of views in the admin bar":["Poner un gráfico mostrando las visitas de las últimas 48 horas en la barra de administración"],"Hide the stats smiley face image":["Oculta la imágen de la carita feliz de las estadísticas"],"Whitelisted IP addresses":["Lista blanca de direcciones IP"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Muestra una promo de las aplicaciones de WordPress para móviles en el pie de la versión móvil del tema"],"Copied!":["¡Copiado!"],"Highlight and copy the following text to your clipboard:":["Realza y copia el texto siguiente a tu portapapeles: "],"Regenerate address":["Regenera la dirección"],"Automatically proofread content when: ":["Prueba de lectura automática del contenido cuando:"],"A post or page is first published":["Una entrada o página es publicada por primera vez"],"A post or page is updated":["Una entrada o página está actualizada."],"Automatic Language Detection":["Detección automática de idioma"],"The proofreader supports English, French, German, Portuguese and Spanish.":["El corrector funciona con inglés, francés, alemán, portugués y español."],"Enable proofreading for the following grammar and style rules: ":["Activar la prueba de lectura la la siguiente gramática y reglas de estilo:"],"Add a phrase":["Añade una frase"],"Cheatin' uh?":["¿Haciendo trampas?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}¿Te importaría decirnos por qué no has completado la conexión con Jetpack en esta {{a}}encuesta de 2 preguntas?{{/a}}{{/p}}{{p}}La conexión con Jetpack es obligatoria para que funcionen nuestras características gratuitas de tráfico y seguridad.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Bienvenido a {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["Tu Jetpack ya está conectado."],"You're fueled up and ready to go, Jetpack is now active.":["Estás completo de combustible y listo para ir, ahora Jetpack está activo."],"You're fueled up and ready to go.":["Estás completo de combustible y listo para ir."],"You are currently running a development version of Jetpack.":["En este momento estás ejecutando una versión de desarrollo de Jetpack."],"Submit Beta feedback":["Envía tus sugerencias"],"What would you like to see on your Jetpack Dashboard?":["¿Qué te gustaría ver en el Escritorio de tu Jetpack?"],"Let us know!":["¡Háznolo saber!"],"Saving…":["Guardando…"],"Save Settings":["Guardar ajustes"],"Jetpack Stats Icon":["Icono de estadísticas de Jeptpack"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["¡{{a}}Activa las Estadísticas del sitio{{/a}} para ver estadísticas detalladas, me gusta, seguidores, suscriptores y más! {{a1}}Aprende más{{/a1}}"],"Activate Site Stats":["Activar estadísticas del sitio"],"Security Scanning":["Escaneo de seguridad"],"Upgrade":["Actualiza"],"ACTIVE":["ACTIVO"],"Your site is on Development Mode":["Tu sitio web está en modo de desarrollo"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Una vez que estés conectado puedes pasar a un plan de pago para conseguir seguridad de primer nivel, herramientas de protección contra el spam y soporte prioritario."],"View your spam stats":["Ver tus estadísticas de spam"],"View your security dashboard":["Ver tu escritorio de seguridad"],"The site is in Development Mode, so you can not connect to WordPress.com.":["El sitio está en el modo de desarrollo, así que no puedes conectarte a WordPress.com."],"Link your account to WordPress.com to get the most out of Jetpack.":["Conecta tu cuenta a WordPress.com para conseguir el máximo de Jetpack."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["Para la exploración automática y completa de las amenazas de seguridad, por favor {{a}}instala y activa{{/a}} VaultPress."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["Para la exploración automática y completa de las amenazas de seguridad, por favor {{a}}actualiza tu cuenta{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetapck está bloqueando activamente intentos de acceso maliciosos. ¡Muy pronto se mostraran datos aquí mismo!"],"Total malicious attacks blocked on your site.":["Total de ataques maliciosos bloqueados en tu sitio."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Activa Proteger{{/a}} para mantener tu sitio protegido de intentos de acceso malintencionados."],"All plugins are up-to-date. Awesome work!":["Todos los plugins están actualizados. ¡Buen trabajo!"],"Jetpack is improving and optimizing your image speed.":["Jeptack está mejorando y optimizando la velocidad de tus imágenes."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack está monitorizando tu sitio. Si creemos que tu sitio está caído, recibirás un correo electrónico."],"Security":["Seguridad"],"Performance":["Rendimiento"],"Backups":["Copias de seguridad"],"{{a}}View backup details{{/a}}.":["{{a}}Ver detalles de la copia de seguridad{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["Para hacer automáticamente una copia de seguridad de tu sitio completo, por favor {{a}}instala y activa{{/a}} VaultPress."],"Unavailable in Dev Mode.":["No disponible en el modo desarrollador."],"Spam Protection":["Protección de spam"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["Para una defensa contra el spam de calidad profesional por favor {{a}}instala Akismet{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["Si quieres un protector contra el spas que esté a la última, {{a}}activa Akismet{{a}}."],"Invalid key":["Clave no válida"],"Unavailable in Dev Mode":["No disponible en modo desarrollador"],"Activating recommended features…":["Activando funcionalidades recomendadas..."],"Recommended features active.":["Funcionalidades de recomendación activas."],"Recommended features failed to activate. %(error)s":["No se pudieron activar las funcionalidades recomendadas. %(error)s"],"Activating %(slug)s…":["Activando %(slug)s…"],"%(slug)s has been activated.":["%(slug)s se ha activado."],"%(slug)s failed to activate. %(error)s":["%(slug)s falló al activarse. %(error)s"],"Deactivating %(slug)s…":["Desactivando %(slug)s…"],"%(slug)s has been deactivated.":["%(slug)s ha sido desactivado."],"%(slug)s failed to deactivate. %(error)s":["%(slug)s no se desactivaron. %(error)s"],"Updating %(slug)s settings…":["Actualizando %(slug)s ajustes…"],"Updated %(slug)s settings.":["Ajustes de %(slug)s actualizados."],"Error updating %(slug)s settings. %(error)s":["Error actualizando los ajustes %(slug)s. %(error)s"],"Updating %(slug)s address…":["Actualizando la dirección %(slug)s…"],"Regenerated %(slug)s address .":["Regenerar %(slug)s direcciones."],"Error regenerating %(slug)s address. %(error)s":["Error regenerando la dirección %(slug). %(error)s"],"Resetting Jetpack options…":["Resetear opciones de jetpack"],"Options reset.":["Ajustes restablecidos."],"Options failed to reset.":["Fallo al restablecer las opciones."],"There was an error disconnecting Jetpack. Error: %(error)s":["Ha ocurrido un error desconectando Jetpack. Error: %(error)s"],"Unlinking from WordPress.com":["Desconectando de WordPress.com"],"Unlinked from WordPress.com.":["Desconectado de WordPress.com."],"Error unlinking from WordPress.com. %(error)s":["Error al desconectar de WordPress.com. %(error)s"],"At A Glance":["De un vistazo"],"Clichés":["Clichés"],"Dashboard":["Escritorio"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["¿Te importaría decirnos por qué? Simplemente {{a}}contestando dos sencillas preguntas{{/a}} nos ayudarás a mejorar Jetpack."],"Automattic's Privacy Policy":["Política de privacidad de Automattic"],"WordPress.com Terms of Service":["Términos del servicio de WordPress.com"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}Activar Photon{{/a}} para mejorar el rendimiento y velocidad de carga de tus imágenes."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Activar las actualizaciones automáticas de plugins{{/a}}"],"Plugin Updates":["Actualizaciones de plugins"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["Para realizar copias de seguridad automáticas de ti sitio completo, por favor {{a}}amplía tu cuenta{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["¡Vaya! Tus claves de Akismet se han perdido o no son válidas. {{akismetSettings}}Ve a la las opciones de Akismet para arreglarlo {{/akismetSettings}}"],"No threats found, you're good to go!":["No se encontraron amenazas.¡Adelante!"],"{{a}}Contact Support{{/a}}":["{{a}}Contacta con soporte{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}Ver detalles en VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["¡Vaya! Se encontró %(number)s amenza.","¡Vaya! Se encontraron %(number)s amenzas."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}Activa Monitor{{/a}} para recibir avisos si tu sitio se cae."],"Loading…":["Cargando..."],"Downtime monitoring":["Monitorización de caídas"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}Ver más estadísticas en WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}Ver más estadísticas{{/button}}"],"All-time comments":["Todos los comentarios"],"All-time views":["Visitas de todo el periodo"],"%(number)s View":["%(number)s visita","%(number)s visitas"],"Best overall day":["El mejor día"],"Views today":["Visualizaciones hoy"],"Months":["Meses"],"Weeks":["Semanas"],"Days":["Días"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["Algo pasó al cargar las estadísticas. Por favor, inténtalo de nuevo más tarde o {{a}}ve tus estadísticas ahora en WordPress.com{{/a}}"],"Click to view detailed stats.":["Haz clic para ver estadíticas detalladas."],"Views: %(numberOfViews)s":["VIsitas: %(numberOfViews)s"],"Week of %(date)s":["Semana del %(date)s"],"Site Security":["Seguridad del sitio"],"Activate recommended features":["Activar funcionalidades recomendadas"],"Link to WordPress.com":["Conecta con WordPress.com"],"Unlink me from WordPress.com":["Desconectame de WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["Hubo un problema conectando con tu Jetpack. Por favor haz click en \"Conecta con WordPress.com\" de nuevo."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["Hemos tenido una incidencia conectando Jetpack; desactiva y vuelve a activar el plugin de Jetpack, y conecta otra vez."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Debes permanecer conectado a tu blog de WordPress mientras autorizas Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Tu Jetpack tiene un problema.{{/s}} Lamentamos las molestias. Por favor, inténtalo más tarde. Si el problema continúa, por favor contacta con el soporte con este mensaje: %(error_key)s"],"Disconnecting Jetpack":["Desconectando Jetpack"],"Learn more":["Más Información"],"Posts":["Entradas"],"Front page":["Portada"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Muestra contenido relacionado después de las entradas"],"Related":["Relacionado"],"Save":["Guardar"],"Email Address":["Dirección de email"],"Media":["Medios"],"Themes":["Temas"],"Site Stats":["Estadísticas del sitio"],"Sharing":["Compartir"],"Testimonials":["Testimonios"],"Cancel":["Cancelar"],"Comments":["Comentarios"],"Ignored Phrases":["Frases ignoradas"],"Use automatically detected language to proofread posts and pages":["Utilizar idioma detectado automáticamente para corregir entradas y páginas"],"Redundant Phrases":["Frases Redundantes"],"Phrases to Avoid":["Frases para Evitar"],"Passive Voice":["Voz Pasiva"],"Jargon":["Jerga"],"Hidden Verbs":["Verbos ocultos"],"Double Negatives":["Doble negaciones"],"Diacritical Marks":["Signos Diacríticos"],"Complex Phrases":["Frases Complejas"],"Bias Language":["Sesgos de Idioma"],"English Options":["Opciones de Inglés"],"Proofreading":["Revisión"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack no puede ponerse en contacto con WordPress.com: %(error_key)s. Esto generalmente significa que algo no está configurado correctamente en el servidor de tu sitio."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com tiene problemas ahora mismo y no puede repostar tu Jetpack. Por favor, inténtalo más tarde."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Tu Jetpack tiene un fallo.{{/s}} No es posible conectar este sitio con WordPress.com. Esto significa normalmente que tu sitio no es público (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Tu web tiene que ser accesible al público para usar Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["Has desconectado Jetpack con éxito"],"Edit":["Editar"],"Connected":["Conectado"],"Activate":["Activar"],"Active":["Activo"],"Search":["Buscar"],"Settings":["Ajustes"],"Learn More":["Más Información"],"Disconnect Jetpack":["Desconectar Jetpack"],"Test your site’s compatibility with Jetpack.":["Comprueba la compatibilidad de tu sitio con Jetpack."],"Settings header\u0004Downtime monitoring":[""],"Settings header\u0004Privacy Settings":[""],"Settings header\u0004WordPress.com toolbar":["Barra de herramientas de WordPress.com"],"Settings header\u0004Composing":["Creando"],"Settings header\u0004Site stats":["Estadísticas del sitio"],"Settings header\u0004Search engine optimization":["Optimización en los motores de búsqueda"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Botones de compartir"],"Settings header\u0004Publicize connections":["Conexiones de Divulgar"],"Settings header\u0004Like buttons":["Botones me gusta"],"Settings header\u0004WordPress.com log in":["Inicio de sesión de WordPress.com"],"Settings header\u0004Brute force attack protection":["Protección ante ataques de fuerza bruta"],"Settings header\u0004Backups and security scanning":["Copias y escaneo de seguridad"],"Settings header\u0004Spam filtering":["Filtro de spam"],"Search term.\u0004terms of service":[""],"Search term.\u0004tos":[""],"Search term.\u0004gdpr":[""],"Search term.\u0004data":[""],"Search term.\u0004tracks":[""],"Search term.\u0004privacy":[""],"Caption for a button to purchase a pro plan.\u0004Upgrade":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Actualizar"],"Button caption\u0004Saving…":["Guardando…"],"Button caption\u0004Save settings":["Guardar ajustes"],"A heading for a block of related posts.\u0004Related":["Relacionado"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Vista previa"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Sigue conectado"],"A caption for a button to disconnect.\u0004Disconnect":["Desconectar"],"Navigation item.\u0004Dev Tools":["Herramientas de desarrollo"],"Navigation item.\u0004Settings":["Ajustes"],"Navigation item.\u0004Discussion":["Debate"],"Navigation item.\u0004Traffic":["Tráfico"],"Navigation item.\u0004Sharing":["Compartir"],"Navigation item.\u0004At A Glance":["De un vistazo"],"Navigation item.\u0004Plans":["Planes"],"Navigation item.\u0004Writing":["Escritura"],"Navigation item.\u0004Reset Options (dev only)":["Restablecer ajustes (solo en versiones de desarrollo)"],"Navigation item.\u0004Security":["Seguridad"],"Navigation item.\u0004At a Glance":["De un vistazo"],"Short warning message\u0004Updates needed":["Actualizaciones necesarias"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Pagado"],"A header for a preview area in the configuration screen.\u0004Preview":["Vista previa"],"Ads header\u0004Ads":["Anuncios"],"Dashboard widget header\u0004Site connection":["Conexión al sitio"],"Dashboard widget header\u0004Account connection":["Conexión a tu cuenta"],"A caption for a small button to fix security issues.\u0004Threats":["Amenazas"],"A caption for a small button to fix security issues.\u0004FIX":["SOLUCIONAR"],"Short warning message about new threats found.\u0004Threats found!":["¡Encontradas amenazas!"],"Short warning message about site having no security scan.\u0004No scanning":["No se ha escaneado"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Actualizar"],"Short message informing user that the site is secure.\u0004Secure":["Seguro"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Clave no válida"],"Caption for a button to set up a feature.\u0004Set up":["Configurar"],"verb\u0004Copy":["Copiar"],"Shorthand for Privacy Policy.\u0004Privacy":["Privacidad"],"Shorthand for Terms of Service.\u0004Terms":["Términos"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Depuración"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["Comentarios de spam bloqueados."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-es_VE-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-es_VE-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 86a079c4..00000000
--- a/plugins/jetpack/languages/json/jetpack-es_VE-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"":{"po-revision-date":"2016-11-28 18:54:28+0000","mime-version":"1.0","content-type":"text/plain; charset=UTF-8","content-transfer-encoding":"8bit","plural-forms":"nplurals=2; plural=n != 1;","x-generator":"GlotPress/2.4.0-alpha","language":"es_VE","project-id-version":"Plugins - Jetpack by WordPress.com - Development (trunk)"},"We're here to help":[null,""],"Jetpack comes with free, basic support for all users.":[null,""],"Ask a question":[null,""],"Search our support site":[null,""],"Get a faster resolution to your support questions.":[null,""],"Host fast, high-quality, ad-free video.":[null,""],"Generate income with high-quality ads.":[null,""],"Real-time site backups and automatic threat resolution.":[null,""],"Protect against data loss, malware, and malicious attacks.":[null,""],"Integrate easily with Google Analytics.":[null,""],"Help your content get found and shared with SEO tools.":[null,""],"Protect your site from spam.":[null,""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[null,""],"Spam filtering":[null,""],"Daily, automated malware scanning":[null,""],"13Gb of high-speed video hosting":[null,""],"Daily, automated backups (unlimited storage)":[null,""],"Daily, automated malware scanning with automated resolution":[null,""],"Priority WordPress and security support":[null,""],"Unlimited high-speed video hosting":[null,""],"SEO preview tools":[null,""],"Site stats, related content, and sharing tools":[null,""],"Brute force attack protection and uptime monitoring":[null,""],"Unlimited, high-speed image hosting":[null,""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[null,""],"Read more about Jetpack benefits":[null,""],"An Automattic Airline":[null,""],"Manage site connection":[null,""],"Connect your account to WordPress.com to view more stats":[null,""],"Theme enhancements":[null,""],"Load more posts using the default theme behavior":[null,""],"Load more posts in page with a button":[null,""],"Load more posts as the reader scrolls down":[null,""],"Theme support required.":[null,""],"Learn more about adding support for Infinite Scroll to your theme.":[null,""],"Use excerpts instead of full posts on front page and archive pages":[null,""],"Show featured images":[null,""],"Must be enabled to use tiled galleries.":[null,""],"Enable the WordPress.com toolbar":[null,""],"The WordPress.com toolbar replaces the default admin bar and offers quick links to the Reader, all your sites, your WordPress.com profile, and notifications. Centralize your WordPress experience with a single global toolbar.":[null,""],"Writing tools available to you will be shown here when an administrator enables them.":[null,""],"Portfolios":[null,""],"Add, organize, and display {{portfolioLink}}portfolios{{/portfolioLink}}. If your theme doesn’t support portfolios yet, you can display them using the shortcode ( [portfolios] )":[null,""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[null,""],"Bing":[null,""],"Yandex":[null,""],"Generate XML sitemaps":[null,""],"Your sitemap is automatically sent to all major search engines for indexing.":[null,""],"Your site is not currently accessible to search engines. You might have \"Search Engine Visibility\" disabled in your {{a}}Reading Settings{{/a}}.":[null,""],"Collecting valuable traffic stats and insights":[null,""],"The image helps collect stats, but should work when hidden.":[null,""],"Count logged in page views from":[null,""],"Allow stats reports to be viewed by":[null,""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[null,""],"Configure your SEO settings":[null,""],"In \"Upgrade\"":[null,""],"Configure your Google Analytics settings":[null,""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[null,""],"Enable ads and display an ad below each post":[null,""],"Display an additional ad at the top of each page":[null,""],"Configure your sharing buttons":[null,""],"Sharing buttons can be added to your posts so that your users can share your content to their social networks and show their support.":[null,""],"Connect your social media accounts":[null,""],"Connect your user account to WordPress.com to use this feature":[null,""],"Publicize lets you connect your site to various social networking services. Once connected to a service, you can share your posts with that service automatically.":[null,""],"Allow readers to show their appreciation of your posts by adding a like button to your content":[null,""],"Match accounts using email addresses":[null,""],"Require accounts to use WordPress.com Two-Step Authentication":[null,""],"Add to whitelist":[null,""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[null,""],"Your site is backed up and threat-free.":[null,""],"Checking your spam protection…":[null,""],"Fetching key…":[null,""],"Your site needs an Antispam key.":[null,""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[null,""],"Your site is not protected from spam.":[null,""],"Your Antispam key is valid.":[null,""],"Your site is protected from spam.":[null,""],"Checking key…":[null,""],"Your API key":[null,""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[null,""],"No search results found for %(term)s":[null,""],"Enter a search term to find settings or close search.":[null,""],"Connections":[null,""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[null,""],"Your site is connected to WordPress.com.":[null,""],"You are the Jetpack owner.":[null,""],"Connected as {{span}}%(username)s{{/span}}":[null,""],"View your Email Followers":[null,""],"Connect your user account to WordPress.com to view your email followers":[null,""],"Color scheme":[null,""],"Enable Markdown use for comments.":[null,""],"router There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[null,""],"Updated settings.":[null,""],"Error updating settings. %(error)s":[null,""],"Regenerated Post by Email address.":[null,""],"Error regenerating Post by Email address. %(error)s":[null,""],"Updated settings. Refreshing page…":[null,""],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because:":[null,""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[null,""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[null,""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[null,""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[null,""],"Configure Google Analytics settings.":[null,""],"Image of WordPress login screen protected by Jetpack":[null,""],"Google Analytics":[null,""],"Track website statistics with Google Analytics for a deeper understanding of your website visitors and customers.":[null,""],"Configure Google Analytics":[null,""],"Activate Google Analytics":[null,""],"Download the Free Apps":[null,""],"Upgrade Focus: VideoPress For Weddings":[null,""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[null,""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[null,""],"Display an ad unit at the top of your site.":[null,""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[null,""],"Image of managing your sites themes on your WordPress.com dashboard":[null,""],"Image of managing your sites plugins on your WordPress.com dashboard":[null,""],"Image of the new post editor on your WordPress.com dashboard":[null,""],"Image of your sites stats on your WordPress.com dashboard":[null,""],"Image of your WordPress.com reader":[null,""],"Example of three devices to use the WordPress apps. An iPhone, Android phone, and a apple laptop computer.":[null,""],"Download the free WordPress app for your iPhone":[null,""],"Download the free WordPress app for your Android based phone":[null,""],"Download the free WordPress app for your apple computer":[null,""],"Download the free WordPress app for your PC ":[null,""],"Download the free WordPress app for your Linux machine":[null,""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[null,""],"Upgrade to a paid plan to unlock world-class security, spam protection tools, priority support, SEO and monetization tools.":[null,""],"Ads":[null,""],"Earn income by allowing Jetpack to display high quality ads (powered by WordAds).":[null,""],"Activate Ads":[null,""],"Income generation from ads":[null,""],"Premium traffic and monetization tools":[null,""],"The Jetpack Premium plan now offers you the ability to generate income from your site by showing high-quality paid ads to your visitors. Professional plan customers also benefit from SEO tools to help optimize search engine traffic.":[null,""],"We support all Jetpack users, regardless of plan. But customers on a paid subscription enjoy priority support so that security issues are identified and fixed for you as soon as possible. ":[null,""],"In \"Mobile\"":[null,""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[null,""],"View your earnings":[null,""],"Activate VideoPress":[null,""],"Upload Videos Now":[null,""],"Make sure your site is easily found on search engines with SEO tools for your content and social posts.":[null,""],"Activate this module to use the advanced SEO tools.":[null,""],"How much is your website worth?":[null,""],"For less than the price of a coffee a month you can rest easy knowing your hard work (or livelihood) is backed up.":[null,""],"Configure Site SEO":[null,""],"Activate SEO Tools":[null,""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[null,""],"Introducing our most affordable backups and security plan yet":[null,""],"The Personal Plan keeps your data, site, and hard work safe.":[null,""],"Your site is on the Jetpack Personal plan":[null,""],"With this plan you are provided with spam-protection, daily backups (up to 30 days), and unlimited storage.":[null,""],"With this plan you are provided with spam-protection, daily backups (up to 30 days), unlimited backup storage, security scanning, 13Gb of ad-free video hosting, income generation from ads, and priority support.":[null,""],"You get spam-protection, real-time backups (unlimited archive), unlimited backup storage, security scanning, unlimited ad-free video hosting, income generation from ads, SEO tools, and priority support.":[null,""],"Daily backup of all your site data with unlimited space and one-click restores (powered by VaultPress).":[null,""],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support (powered by VaultPress).":[null,""],"Backups & Security Scanning":[null,""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, one-click threat resolution, and priority support (powered by VaultPress).":[null,""],"13Gb of fast, optimized, and ad-free video hosting for your site (powered by VideoPress).":[null,""],"Video Hosting":[null,""],"Fast, optimized, ad-free, and unlimited video hosting for your site (powered by VideoPress).":[null,""],"SEO Tools":[null,""],"Advanced SEO tools to help your site get found when people search for relevant content.":[null,""],"Daily and on-demand security scanning":[null,""],"Real-time backups and one-click threat resolution":[null,""],"Unlimited and ad-free video hosting":[null,""],"Need more? Running a business site?":[null,""],"If your site is important to you, consider protecting and improving it with some of our advanced features: ":[null,""],"On-demand security scanning":[null,""],"Advanced SEO tools":[null,""],"Configure your SEO settings.":[null,""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[null,""],"You are running Jetpack on a staging server.":[null,""],"More Info":[null,""],"Search your content.":[null,""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[null,""],"Your current IP: %(ip)s":[null,""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[null,""],"This will reset all Jetpack options, are you sure?":[null,""],"Search for a Jetpack feature.":[null,""],"Upgrade Jetpack and our state-of-the-art security scanner will hunt out malicious files and report them immediately so that you're never unaware of what is happening on your website.":[null,""],"You can see the information about security scanning in the \"At a Glance\" section.":[null,""],"Configure your Security Scans":[null,""],"This module has no configuration options":[null,""],"Let search engines and visitors know that you are serious about your websites integrity by upgrading Jetpack. Our anti-spam tools will eliminate comment spam, protect your SEO, and make it easier for visitors to stay in touch.":[null,""],"Real-time offsite backups with automated restores deliver peace-of-mind, so you can focus on writing great content and increasing traffic while we protect every aspect of your investment. Upgrade today.":[null,""],"{{link}}Configure your %(module_slug)s Settings {{/link}}":[null,""],"Subscriber":[null,""],"Big iPhone/iPad Update Now Available":[null,""],"The WordPress for Android App Gets a Big Facelift":[null,""],"WordPress.com Likes are:":[null,""],"Comments headline":[null,""],"A few catchy words to motivate your readers to comment.":[null,""],"Show a \"follow blog\" option in the comment form":[null,""],"Show a \"follow comments\" option in the comment form":[null,""],"Put a chart showing 48 hours of views in the admin bar":[null,""],"Hide the stats smiley face image":[null,""],"Whitelisted IP addresses":[null,""],"Show photo metadata (Exif) in carousel, when available":[null,""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[null,""],"Copied!":[null,""],"Highlight and copy the following text to your clipboard:":[null,""],"Regenerate address":[null,""],"Automatically proofread content when: ":[null,""],"A post or page is first published":[null,""],"A post or page is updated":[null,""],"Automatic Language Detection":[null,""],"The proofreader supports English, French, German, Portuguese and Spanish.":[null,""],"Enable proofreading for the following grammar and style rules: ":[null,""],"Add a phrase":[null,""],"Cheatin' uh?":[null,""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[null,""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[null,""],"Your Jetpack is already connected.":[null,""],"You're fueled up and ready to go, Jetpack is now active.":[null,""],"You're fueled up and ready to go.":[null,""],"You are currently running a development version of Jetpack.":[null,""],"Submit Beta feedback":[null,""],"You, %(userName)s, are not connected to WordPress.com.":[null,""],"What would you like to see on your Jetpack Dashboard?":[null,""],"Let us know!":[null,""],"Welcome to Jetpack":[null,""],"Please connect to or create a WordPress.com account to start using Jetpack. This will enable powerful security, traffic, and customization services.":[null,""],"No account? Create one for free…":[null,""],"Saving…":[null,""],"Save Settings":[null,""],"Jetpack Stats Icon":[null,""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[null,""],"Activate Site Stats":[null,""],"Security Scanning":[null,""],"Upgrade":[null,""],"ACTIVE":[null,""],"Hackers, botnets and spammers attack websites indiscriminately. Their goal is to attack everywhere and often. Our goal is to help you prepare by blocking these threats, and in worst-case-scenarios we'll be here to help you restore your site to its former glory.":[null,""],"Your site is on the Free Jetpack Plan":[null,""],"Your site is on the Jetpack Premium plan":[null,""],"Your site is on the Jetpack Professional plan":[null,""],"Your site is on Development Mode":[null,""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[null,""],"State-of-the-art spam defense powered by Akismet.":[null,""],"View your spam stats":[null,""],"Configure Akismet":[null,""],"View your security dashboard":[null,""],"Configure VaultPress":[null,""],"Real-time backups":[null,""],"One-click threat resolution":[null,""],"Compare Plans":[null,""],"Maximum grade security":[null,""],"Real-time backup with unlimited space, one-click restores, bulletproof spam monitoring, malware defense, and brute-force login protection - all in one place and optimized for WordPress.":[null,""],"Bulletproof spam filtering protects your brand, your readers, and improves SEO. Malware scanning helps maintain peace of mind and keeps your backend safe from intruders.":[null,""],"Enjoy priority support":[null,""],"The site is in Development Mode, so you can not connect to WordPress.com.":[null,""],"Link your account to WordPress.com to get the most out of Jetpack.":[null,""],"Powerful WordPress.com features on every device.":[null,""],"Manage all your sites from a single dashboard.":[null,""],"Feel the performance":[null,""],"All the WordPress apps are built for speed. You'll notice the difference in performance immediately, with near-instant page-loads and less waiting around.":[null,""],"Bulk and automatic updates":[null,""],"Most security flaws are found in outdated plugins. Use our Web and Desktop apps to turn on auto-updates or update plugins manually for all your websites in one convenient place.":[null,""],"Focus on your Writing":[null,""],"Our new editor is lightning fast, optimized for writers and eliminates distractions, giving you the ability to focus on your work.":[null,""],"Try the New Editor":[null,""],"Connect with your Visitors":[null,""],"Monitor your visitors with advanced stats. Watch for trends, learn what content performs the best and understand your visitors from anywhere in the world.":[null,""],"View Your Stats":[null,""],"Connect with the Community":[null,""],"The WordPress apps all have impressively fast and full featured readers so you can catch up with your favorite sites and join the conversation anywhere, any time.":[null,""],"Launch Reader":[null,""],"Inspiration strikes any time, anywhere.":[null,""],"Get WordPress apps for any screen.":[null,""],"In Your Pocket":[null,""],"Publish content, track stats, moderate comments and so much more from anywhere in the world. Our mobile apps are open source, free and available to you on Apple or Android devices.":[null,""],"WordPress.com in the App Store":[null,""],"WordPress.com in Google Play":[null,""],"On Your Desktop":[null,""],"A desktop app that gives WordPress a permanent home on your computer. Not to mention the distraction free environment you get writing outside of a web browser.":[null,""],"WordPress.com for Mac OS X":[null,""],"WordPress.com for Windows":[null,""],"WordPress.com for Linux":[null,""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[null,""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[null,""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[null,""],"Total malicious attacks blocked on your site.":[null,""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[null,""],"All plugins are up-to-date. Awesome work!":[null,""],"{{a}}Activate Manage{{/a}} to turn on auto updates and manage your plugins from WordPress.com.":[null,""],"Jetpack is improving and optimizing your image speed.":[null,""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[null,""],"Security":[null,""],"Performance":[null,""],"Backups":[null,""],"{{a}}View backup details{{/a}}.":[null,""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[null,""],"Unavailable in Dev Mode.":[null,""],"Spam Protection":[null,""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[null,""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[null,""],"Invalid key":[null,""],"Unavailable in Dev Mode":[null,""],"Activating recommended features…":[null,""],"Recommended features active.":[null,""],"Recommended features failed to activate. %(error)s":[null,""],"%(slug)s has been activated.":[null,""],"%(slug)s failed to activate. %(error)s":[null,""],"%(slug)s has been deactivated.":[null,""],"%(slug)s failed to deactivate. %(error)s":[null,""],"Updating %(slug)s settings…":[null,""],"Updated %(slug)s settings.":[null,""],"Error updating %(slug)s settings. %(error)s":[null,""],"Updating %(slug)s address…":[null,""],"Regenerated %(slug)s address .":[null,""],"Error regenerating %(slug)s address. %(error)s":[null,""],"Resetting Jetpack options…":[null,""],"Options reset.":[null,""],"Options failed to reset.":[null,""],"There was an error disconnecting Jetpack. Error: %(error)s":[null,""],"Unlinking from WordPress.com":[null,""],"Unlinked from WordPress.com.":[null,""],"Error unlinking from WordPress.com. %(error)s":[null,""],"At A Glance":[null,""],"Clichés":[null,""],"Dashboard":[null,""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[null,""],"Automattic's Privacy Policy":[null,""],"WordPress.com Terms of Service":[null,""],"{{a}}Activate Site Verification{{/a}} to verify your site and increase ranking with Google, Bing, and Pinterest.":[null,""],"Site Verification Tools are active. Ensure your site is verified with Google, Bing, and Pinterest for more accurate indexing and ranking. {{a}}Verify now{{/a}}":[null,""],"Site Verification Tools":[null,""],"{{a}}Activate Photon{{/a}} to enhance the performance and speed of your images.":[null,""],"Image Performance %(photon)s":[null,""],"{{a}}Activate Manage and turn on auto updates{{/a}}":[null,""],"{{a}}Turn on plugin auto updates{{/a}}":[null,""],"Plugin Updates":[null,""],"To automatically back up your entire site, please {{a}}upgrade your account.{{/a}}.":[null,""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[null,""],"No threats found, you're good to go!":[null,""],"{{a}}Contact Support{{/a}}":[null,""],"{{a}}View details at VaultPress.com{{/a}}":[null,""],"{{a}}Activate Monitor{{/a}} to receive notifications if your site goes down.":[null,""],"Loading…":[null,""],"Downtime Monitoring":[null,""],"{{button}}View more stats on WordPress.com {{/button}}":[null,""],"{{button}}View detailed stats{{/button}}":[null,""],"All-time comments":[null,""],"All-time views":[null,""],"Best overall day":[null,""],"Views today":[null,""],"Months":[null,""],"Weeks":[null,""],"Days":[null,""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[null,""],"Click to view detailed stats.":[null,""],"Views: %(numberOfViews)s":[null,""],"Week of %(date)s":[null,""],"Manage security on WordPress.com":[null,""],"Skip this step":[null,""],"Skip the Jetpack Jumpstart process":[null,""],"Features can be activated or deactivated at any time.":[null,""],"Jetpack's recommended features include:":[null,""],"Activate Recommended Features":[null,""],"Quickly enhance your site by activating Jetpack's recommended features.":[null,""],"Jump Start your Site":[null,"Da un impulso a tu sitio"],"Link to WordPress.com":[null,""],"Unlink me from WordPress.com":[null,""],"Join the millions of users who rely on Jetpack to enhance and secure their sites. We're passionate about WordPress and here to make your life easier.":[null,""],"Jetpack is supported by some of the most technical and passionate people in the community. They're located around the globe and ready to help you.":[null,"Jetpack es mantenido por algunas de las personas más preparadas y apasionadas de la comunidad. Situadas por todo el mundo y listas para echarte una mano."],"Did we mention free, professional support?":[null,""],"Jetpack utilizes the state-of-the-art WordPress.com content delivery network to load your gorgeous imagery super fast. Optimized for any device, and its completely free.":[null,"Jetpack utiliza la más moderna red de distribución de contenidos (CDN) de WordPress.com para cargar tus magníficas imágenes súper rápido y de forma optimizada para cualquier dispositivo, y es completamente gratis."],"Lightning fast, optimized images":[null,""],"Never fall behind on a security release or waste time updating multiple sites.":[null,""],"Automatic site updates.":[null,""],"Live site monitoring.":[null,"Monitorización en vivo del sitio "],"Gain peace of mind with Protect, the tool that has blocked billions of login attacks across millions of sites.":[null,"Gana tranquilidad con Protect, la herramienta que bloquea billones de ataques de acceso en millones de sitios."],"Block site attacks.":[null,"Bloquea los ataques a tu sitio"],"Jetpack blocks malicious log in attempts, lets you know if your site goes down, and can automatically update your plugins, so you don’t have to worry.":[null,""],"Site security and peace of mind":[null,"Seguridad del sitio y tranquilidad"],"Jetpack harnesses the power of WordPress.com to show you detailed insights about your visitors, what they’re reading, and where they’re coming from.":[null,""],"Keep visitors engaged by giving them more to share and read with Related Posts.":[null,"Mantén a los visitantes enganchados, ofreciéndoles más para compartir y leer con las Entradas Relacionadas."],"Increase page views.":[null,"Incrementa el número de páginas vistas"],"Give visitors the tools to share and subscribe to your content.":[null,"Da a los visitantes las herramientas para Compartir y Suscribirse a tu contenido."],"Build a community.":[null,"Construye una comunidad"],"Sharing & Like Buttons":[null,""],"Automated social marketing.":[null,"Marketing social automatizado"],"Jetpack has many traffic and engagement tools to help you get more viewers to your site and keep them there.":[null,""],"Manage Plugins":[null,""],"Stress less. Monitor will send you real-time alerts if your site ever goes down.":[null,"Estrésate menos. Supervisar te enviará alertas en tiempo real si tu sitio esta inactivo."],"Track your growth":[null,"Monitoriza tu crecimiento"],"Use Publicize to automatically share your posts with friends, followers, and the world.":[null,"Utiliza Publicize para compartir automáticamente tus entradas con amigos, seguidores, y con el mundo."],"Drive more traffic to your site":[null,"Dirige más tráfico a tu sitio"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[null,"Hubo un error conectando con tu Jetpack. Por favor haz clic para &#8220;conectar con WordPress.com&#8221; de nuevo."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[null,"Hemos tenido una incidencia conectando Jetpack; desactiva y vuelve a activar el plugin de Jetpack, y conecta otra vez."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[null,"Debes permanecer conectado a tu blog de WordPress mientras autorizas Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[null,"<strong>Tu Jetpack tiene un problema.</strong> Lamentamos la molestia. Por favor inténtalo más tarde. Si el problema continúa, por favor contacta con el soporte con este mensaje: %s"],"Disconnecting Jetpack":[null,"Desconectando Jetpack"],"Learn more":[null,"Más Información"],"Pinterest":[null,"Pinterest"],"Google":[null,"Google"],"Show related content after posts":[null,"Mostrar contenido relacionado después de las entradas"],"Use a large and visually striking layout":[null,"Usa un diseño grande y visualmente atractivo. "],"Show a \"Related\" header to more clearly separate the related section from posts":[null,"Mostrar el texto \"Relacionado\" para separar más claramente la sección de las entradas"],"Related":[null,"Relacionado"],"Email Address":[null,"Dirección de email"],"Media":[null,"Medios"],"Site Stats":[null,"Estadísticas del sitio"],"Testimonials":[null,"Testimonios"],"Comments":[null,"Comentarios"],"Ignored Phrases":[null,"Frases ignoradas"],"Use automatically detected language to proofread posts and pages":[null,"Utilizar idioma detectado automáticamente para corregir entradas y páginas"],"Redundant Phrases":[null,"Frases Redundantes"],"Phrases to Avoid":[null,"Frases para Evitar"],"Passive Voice":[null,"Voz Pasiva"],"Jargon":[null,"Jerga"],"Hidden Verbs":[null,"Verbos ocultos"],"Double Negatives":[null,"Doble negaciones"],"Diacritical Marks":[null,"Signos Diacríticos"],"Complex Phrases":[null,"Frases Complejas"],"Bias Language":[null,"Sesgos de Idioma"],"English Options":[null,"Opciones de Inglés"],"Proofreading":[null,"Revisión"],"Connect Jetpack":[null,"Conectar Jetpack"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[null,"Jetpack no pudo ponerse en contacto con WordPress.com: %s. Esto generalmente significa que algo no está configurado correctamente en su alojamiento web."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[null,"WordPress.com tiene problemas ahora mismo y no puede repostar tu Jetpack. Por favor, int&#233;ntalo m&#225;s tarde."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[null,"<strong>Tu Jetpack tiene un fallo.</strong> No es posible conectar este sitio con WordPress.com. Esto significa normalmente que tu sitio no es p&#250;blico (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[null,"Tu sitio necesita ser p&#250;blico para utilizar Jetpack: %s"],"You have successfully disconnected Jetpack":[null,"Te has desconectado correctamente Jetpack."],"Active":[null,"Activo"],"Settings":[null,"Configuración"],"Learn More":[null,"Más Información"],"Disconnect Jetpack":[null,"Desconectar Jetpack"],"Test your site’s compatibility with Jetpack.":[null,"Pon a prueba la compatibilidad&#8217;s de tu sitio con Jetpack."]} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-fa_IR-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-fa_IR-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index a1cb4b53..00000000
--- a/plugins/jetpack/languages/json/jetpack-fa_IR-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=1; plural=0;","lang":"fa"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":[""],"We’re now collecting stats and securing your site. Welcome aboard.":[""],"{{a}}Skip, and explore features individually{{/a}}.":[""],"Jetpack Business Plan":[""],"Jetpack Premium Plan":[""],"Jetpack Personal Plan":[""],"Get started with hassle-free design, stats, and performance tools.":[""],"Welcome to Jetpack Free":[""],"Jetpack Free Plan":[""],"Explore Jetpack plans":[""],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":[""],"Jetpack offers so much more":[""],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":[""],"Support documentation":[""],"Chat bubbles representing getting in touch with support":[""],"Site Activity":[""],"Start publicizing now":[""],"Reach a wider audience by automatically sharing your posts on social media.":[""],"Increase traffic to your site":[""],"Explore free themes":[""],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":[""],"A wide variety of themes and tools to customize a site":[""],"Set up your site security":[""],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":[""],"Site stats showing an evolution in traffic and engagement":[""],"A hand holding a loupe":[""],"A chart showing an healthy increase in earnings":[""],"Interface showing a chronological list of changes and updates in a site":[""],"A cloud with multiple types of content floating around it":[""],"A folder holding real comments":[""],"Make your site faster":[""],"Load pages faster by serving your images from our global network of servers.":[""],"A fast and performant website":[""],"A secure site, locked and protected by Jetpack":[""],"These settings won't apply to related posts added using the block editor.":[""],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":[""],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":[""],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":[""],"Add Like buttons to your posts and pages":[""],"When visitors enjoy your content, let them show it with a Like.":[""],"Explore your Jetpack Professional plan!":[""],"Explore your Jetpack Premium plan!":[""],"Explore your Jetpack Personal plan!":[""],"Create account":[""],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":[""],"Real-time, automated backups (unlimited storage)":[""],"Compose content the way you want to and streamline your publishing experience.":[""],"Add a portfolio item":[""],"Add a testimonial":[""],"Maximize your site’s visibility in search engines and view traffic stats in real time.":[""],"Create a Jetpack account to use this feature":[""],"Share your content on social media and increase audience engagement.":[""],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":[""],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":[""],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":[""],"Error enabling Site accelerator. %(error)s":[""],"Site accelerator is now speeding up your site!":[""],"Enabling Site accelerator…":[""],"Error disabling site accelerator. %(error)s":[""],"Site accelerator is no longer speeding up your site!":[""],"Disabling site accelerator…":[""],"Load pages faster, optimize images, and speed up your visitors’ experience.":[""],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":[""],"High-speed, high-definition video hosting with no third-party ads.":[""],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":[""],"Marketing Automation":[""],"Activate Jetpack Search":[""],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":[""],"Start earning":[""],"WordAds lets you earn money by displaying promotional content. Start earning today.":[""],"Spam is automatically blocked from your comments.":[""],"Spam Filtering":[""],"Browse premium themes":[""],"Access hundreds of beautifully designed premium themes at no extra cost.":[""],"Try a premium theme":[""],"View settings":[""],"Create a Jetpack account to view your email followers":[""],"Open your site to comments and invite subscribers to get alerts about your latest work.":[""],"Manage security settings":[""],"Built-in Performance":[""],"Jetpack is ready for the new WordPress editor":[""],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":[""],"Build your Jetpack site with blocks":[""],"A new editor? Yes! {{a}}Learn more{{/a}}.":[""],"The features you rely on, adapted for the new WordPress editor.":[""],"Take me to the new editor":[""],"Testing Jetpack Connection":["آزمون اتصال جت‌پک"],"There was an error testing Jetpack. Error: %(error)s":[""],"New in Jetpack!":[""],"Speed up static file load times":[""],"Speed up image load times":[""],"Enable site accelerator":[""],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":[""],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":[""],"View your site activity":[""],"View a chronological list of all the changes and updates to your site in an organized, readable way.":[""],"Manually Verify ":["تأیید دستی"],"Verify with Google":["تأیید با گوگل"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["گوگل دربارهٔ رویدادهای خاص وب‌گاه شما رایانامه می‌فرستد، از جمله دربارهٔ نشانه‌های {{a1}}هک‌شدن{{/a1}} وب‌گاه، یا مشکلات {{a2}}خزیدن و نمایه‌شدن{{/a2}} وب‌گاه."],"or":[""],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":[""],"Your site is verified with Google":[""],"Site failed to verify: %(error)s":[""],"Verifying...":[""],"Add faster, more advanced searching to your site with Jetpack Professional.":[""],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":[""],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":[""],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":[""],"Jetpack Search supports many customizations.":[""],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":[""],"Site is verified":[""],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":[""],"Spam filtering and priority support.":[""],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":[""],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":[""],"Custom ads.txt entries":[""],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":[""],"Introducing Premium Themes":[""]," Premium Themes":[""],"Privacy information":["اطلاعات حریم"],"Enable Lazy Loading for images":["فعال کردن بارگذاری کند (Lazy) برای تصاویر"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":[""],"Performance & speed":[""],"Enable high-speed, ad-free video player":[""],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":[""],"Video":["ویدئو"],"Carousel color scheme":[""],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":[""],"Show photo Exif metadata in carousel (when available)":[""],"Display images in a full-screen carousel gallery":[""],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":[""],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":[""],"Portfolios shortcode: [portfolio]":[""],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":[""],"Testimonials shortcode: [testimonials]":[""],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":[""],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":[""],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":[""],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":[""],"Configure related posts in the Customizer":[""],"Highlight related content with a heading":[""],"View security scan details":["دیدن جزئیات پویش امنیتی"],"View backup history":["دیدن تاریخچهٔ پشتیبان‌گیری"],"Show a thumbnail image where available":[""],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":[""],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":[""],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":[""],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":[""],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":[""],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been disabled by a site administrator.":[""],"%(moduleName)s has been disabled by a site administrator.":[""],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":[""],"Configure your notification settings":[""],"Monitor your site's downtime":[""],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":[""],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":[""],"Plugin needs updating.":[""],"%(number)s":[""],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":[""],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":[""],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":[""],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":[""],"Akismet checks your comments and contact form submissions against our global database of spam.":[""],"Privacy Information":[""],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":[""],"Add the Search (Jetpack) widget to your sidebar":[""],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":[""],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":[""],"Loads the next posts automatically when the reader approaches the bottom of the page.":[""],"Allows you to publish new posts by sending an email to a special address.":[""],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":[""],"Checks your content for correct grammar and spelling, misused words, and style while you write.":[""],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":[""],"Displays information on your site activity, including visitors and popular posts or pages.":[""],"Allows you to optimize your site and its content for better results in search engines.":[""],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":[""],"Displays high-quality ads on your site that allow you to earn income.":[""],"Adds sharing buttons to your content so that visitors can share it on social media sites.":[""],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":[""],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":[""],"Allows registered users to log in to your site with their WordPress.com accounts.":[""],"Protects your site from traditional and distributed brute force login attacks.":[""],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":[""],"Removes spam from comments and contact forms.":[""],"We are committed to your privacy and security. ":["ما به حریم و امنیت شما متعهد هستیم."],"View all Jetpack plans":[""],"Manage your plan":[""],"Your Plan":[""],"You’re currently on Jetpack %(plan)s.":[""],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":[""],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":[""],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":[""],"Add Search (Jetpack) Widget":[""],"Jetpack Search is powering search on your site.":[""],"Manage your plugins":["افزونه‌های خود را مدیریت کنید"],"Moderate comments":[""],"Error updating privacy settings. %(error)s":[""],"Updated privacy settings.":[""],"Updating privacy settings…":[""],"Add Jetpack Search Widget":["افزودن ابزارک جستجوی جت‌پک"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":[""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":[""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":[""],"Daily backups, spam filtering, and priority support.":[""],"Always-on Security":[""],"Activate video hosting":[""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":[""],"Design the perfect website":[""],"Set up Jetpack":[""],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":[""],"Jetpack Search":[""],"Jetpack version %(version)s":["جت‌پک نسخهٔ %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":[""],"Daily backup of all your site data with unlimited space and one-click restores":[""],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":[""],"View your security activity":[""]," (powered by VaultPress).":[""],"Customize Search Widget":[""],"Please correct the issue below and try again.":[""],"We are making sure your site stays free of security threats. You will be notified if we find one.":[""],"Your site is being backed up in real-time.":[""],"Jetpack version":["نسخهٔ جت‌پک"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}فعالیت وب‌گاه خود را در تنها یک خوراک ببینید{{/a}}."],"Activity":[""],"Confirm each new phrase you add by pressing enter.":["هر عبارت تازه‌ای که می‌افزایید را با فشردن کلید ورود تأیید کنید."],"{{a}}View details{{/a}}":["{{a}}مشاهده جزئیات{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":[""],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":[""],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":[""],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":[""],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":[""],"Install premium themes":[""],"Review SEO features":[""],"Welcome Professional":[""],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":[""],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":[""],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":[""],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":[""],"Monetize your site with ads":[""],"Welcome Premium":[""],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":[""],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":[""],"Got it":[""],"Welcome personal":[""],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":[""],"Jetpack Stats People":[""],"Hello there! Your stats have been activated.":[""],"Just give us a little time to collect data so we can display it for you here.":[""],"Okay, got it!":[""],"Display ads below posts on":[""],"Additional ad placements":[""],"Top of each page":[""],"Second ad below post":["آگهی دوم زیر نوشته"],"Archives":["بایگانی‌ها"],"Explore Professional":[""],"Compare All Plans":[""],"Person with laptop":[""],"Your Jetpack site is ready to go!":[""],"Stars":["ستاره‌ها"],"Jupiter":[""],"Welcome to Jetpack Personal":[""],"Welcome to Jetpack Premium":[""],"Welcome to Jetpack Professional":[""],"Schedule posts":[""],"Activate Publicize":[""],"Your site is backed up.":["وب‌گاه شما پشتیبان دارد."],"Image Performance":[""],"Get WordPress Apps for every device":[""],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":[""],"I already use this app.":["من هم‌اکنون از این نرم‌افزار استفاده می‌کنم."],"Create address":["ساخت نشانی"],"Priority support":["پشتیبانی اولویت‌دار"],"Add sharing buttons to your posts":["به نوشته‌های خود دکمه‌های اشتراک‌گذاری بیفزایید"],"Automatically share your posts to social networks":["به طور خودکار نوشته‌هایتان را به شبکه‌های اجتماعی بیفزایید"],"Updating settings…":["در حال به‌روز کردن تنظیمات..."],"Updating Post by Email address…":["در حال به‌روز کردن نشانی «نوشتن با رایانامه»..."],"Your paid plan gives you access to prioritized Jetpack support.":[""],"You have paid for backups but they're not yet active.":[""],"You have paid for backups and security scanning but they’re not yet active.":[""],"Click \"Set Up\" to finish installation.":[""],"Checking site status…":["بررسی وضعیت سایت..."],"Pages":["صفحه‌ها"],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":["پرسشتان را مطرح کنید"],"Search our support site":["وب‌گاه پشتیبانیمان را بجویید"],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":["پالایش هرزنامه‌ها"],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"Unlimited, high-speed video hosting":[""],"SEO preview tools":["ابزارهای پیش‌نمایش سئو"],"Site stats, related content, and sharing tools":[""],"Brute force attack protection and downtime monitoring":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":["مدیریت اتصال وب‌گاه"],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":["نمایش تصویرهای ویژه"],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":["Yandex"],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":["افزودن به فهرست پیگیری"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":["سایت شما پشتیبان گیری شده و بدون تهدید است."],"Checking your spam protection…":["بررسی سیستم حفاظت از هرزنامه شما ..."],"Fetching key…":["در حال دریافت کلید..."],"Your site needs an Antispam key.":["وب‌گاه شما نیازمند یک کلید پادهرزنامه است."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["یک مشکل امنیتی در کلید API ضدهرزنامه شما وجود دارد.{{a}}بیشتر بدانید{{/a}}."],"Your site is not protected from spam.":["سایت شما از هرزنامه محافظت نمی شود."],"Your Antispam key is valid.":["کلید ضد هرزنامهٔ شما معتبر است."],"Your site is protected from spam.":["سایت شما از هرزنامه محافظت می شود."],"Checking key…":["در حال بررسی کلید..."],"Your API key":["کلید API شما"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["اگر قبلا یک کلید API ندارید، پس {{a}}کلید API خود را از اینجا دریافت کنید{{/a}}، از طریق فرایند گرفتن یکی از آنها هدایت خواهید شد."],"No search results found for %(term)s":["جستجو برای %(term)s هیچ نتیجه‌ای دربر نداشت."],"Enter a search term to find settings or close search.":["یک عبارت را برای پیدا کردن تنظیمات یا جستجوی دقیق را وارد کنید."],"Connections":["اتصال‌ها"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["سایت شما در حالت توسعه است، بنابراین نمی توان آن را به WordPress.com متصل کرد."],"Your site is connected to WordPress.com.":["سایت شما به WordPress.com متصل است."],"You are the Jetpack owner.":["شما صاحب جت‌پک هستید."],"Connected as {{span}}%(username)s{{/span}}":["به عنوان {{span}}%(username)s{{/span}} متصل شده است"],"View your Email Followers":["دنبال کنندگان ایمیل خود را مشاهده کنید"],"Color scheme":["رنگ‌بندی"],"Enable Markdown use for comments.":["فعال‌کردن Markdown برای دیدگاه‌ها"],"Updated settings.":["تنظیمات بروز شد."],"Error updating settings. %(error)s":["خطا در به‌روزرسانی تنظیمات. %(error)s"],"Regenerated Post by Email address.":["نوشته توسط آدرس ایمیل بازسازی شد."],"Error regenerating Post by Email address. %(error)s":["خطا در بازسازی نوشته توسط آدرس ایمیل. %(error)s"],"Updated settings. Refreshing page…":["تنظیمات بروز شد. بازخوانی صفحه ..."],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}پالایهٔ jetpack_development_mode فعال است{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}ثابت JETPACK_DEV_DEBUG تعریف شده‌است{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}نشانی وب وب‌گاه شما فاقد نقطه است (برای مثال http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc."],"Google Analytics":["گوگل آنالیز"],"Configure Google Analytics":["پیکربندی گوگل آنالیز"],"Activate Google Analytics":["فعال شدن گوگل آنالیز"],"Download the free apps":[""],"Upgrade Focus: VideoPress For Weddings":["ارتقاء فوکوس:VideoPress برای عروسی ها"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}} می توانید اکنون نوشته های مرتبط را پیکربندی کنید در بخش سفارشی سازی.{{ExternalLink}}امتحان کنید{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["بطور پیشفرض تبلیغات نمایش داده می شود در انتهای هر صفحه،نوشته با بالای صفحه اصلی. شما می توانید آن ها را به بالای سایت خود و هر ناحیه ابزارکی اضافه کنید."],"Display an ad unit at the top of your site.":["نمایش واحد تبلیغی در بالای سایت شما."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["کارساز شما درست پیکربندی نشده‌است. این یعنی «پاسداری جت‌پک» قادر نخواهد بود به شکل مؤثری از وب‌گاه شما پاسداری کند."],"In \"Mobile\"":["در\"موبایل\""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}} پیکربندی تنظیمات نظارتی آگاه‌سازی‌ها در WordPress.com{{/link}}"],"View your earnings":["مشاهده دریافتی شما"],"Configure site SEO":["پیکربندی سئوی وب‌گاه"],"Activate SEO tools":["فعال‌سازی ابزارهای سئو"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["برای شروع، روی افزودن پرونده چندرسانه در ویرایشگر نوشته کلیک کرده و ویدئوی بارگذاری کنید، بطور کامل مراقبیم!"],"Video Hosting":["هاست ویدئو"],"SEO Tools":["ابزار سئو"],"Advanced SEO tools to help your site get found when people search for relevant content.":["ابزار پیشرفته سئو برای کمک به سایت شما وقتی کاربران در حال جستجوی مطالب مرتبط با سایت شما هستند."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["راهی آسان برای بارگذاری ad-free و ویدئوی بدون لوگو برای سایت شما.می توانید آمار بازدید از ویدئو و اشتراک گذاری آن و پلیر سبک و واکنش گرا است."],"You are running Jetpack on a staging server.":["در حال اجرای Jetpack در مرحله سرور هستید."],"More Info":["اطلاعات بیشتر"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}رویت‌پذیری دوست‌داشتن‌ها را از «تنظیمات پودمان اشتراک‌گذاری» مدیریت کنید{{/a}}"],"Your current IP: %(ip)s":["آی‌پی کنونی شما: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["تغییرات ذخیره‌نشده‌ای در این سربرگ وجود دارند که در صورت ترک‌کردن آن از بین خواهند رفت. ادامه داده شود؟"],"This will reset all Jetpack options, are you sure?":["این کار باعث بازنشانی همهٔ گزینه‌های جت‌پک می‌شود، مطمئنید؟"],"Search for a Jetpack feature.":["جستجو برای ویژگی جت‌پک."],"Configure your Security Scans":["پویش‌های امنیتی خود را پیکربندی کنید"],"Subscriber":["مشترک"],"Big iPhone/iPad Update Now Available":["به‌روزرسانی بزرگ آی‌فون/آی‌پد هم‌اکنون در دسترس است"],"The WordPress for Android App Gets a Big Facelift":["نرم‌افزار کاربردی WordPress برای اندروید یک بازآرایی چهرهٔ اساسی دارد"],"WordPress.com Likes are:":["ویژگی‌های دوست‌داشتن‌ها در WordPress.com:"],"Comments headline":["سرخط دیدگاه‌ها"],"A few catchy words to motivate your readers to comment.":["چند واژهٔ چسبناک تا خوانندگانتان را به گذاشتن دیدگاه ترغیب کند."],"Show a \"follow blog\" option in the comment form":["نمایش گزینهٔ «دنبال کردن وب‌نوشت» در فرم دیدگاه"],"Show a \"follow comments\" option in the comment form":["نمایش گزینهٔ «دنبال کردن دیدگاه‌ها» در فرم دیدگاه"],"Put a chart showing 48 hours of views in the admin bar":["قرار دادن یک نمودار نشان دادن 48 ساعت از بازدید در نوار مدیریت"],"Hide the stats smiley face image":["پنهان کردن تصویر صورتک چهره خندان"],"Whitelisted IP addresses":["نشانی‌های IP فهرست سفید"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["آگهی‌ای در مورد ابزارهای کاربردی همراه WordPress در پسایند پوستهٔ همراه نمایش داده شود"],"Copied!":["کپی شد!"],"Highlight and copy the following text to your clipboard:":["برجسته و کپی کردن متن زیر در کلیپبورد:"],"Regenerate address":["تولید مجدد آدرس"],"Automatically proofread content when: ":["ویرایش خودکار محتوا زمانی که:"],"A post or page is first published":["نوشته یا برگه ای که اولین بار منتشر شده"],"A post or page is updated":["نوشته یا برگه ای که بروزرسانی شده"],"Automatic Language Detection":["شناسایی خودکار زبان"],"The proofreader supports English, French, German, Portuguese and Spanish.":["ویرایشگر از انگلیسی،فرانسوی،آلمانی،پرتغالی و اسپانیایی پشتیبانی می کند."],"Enable proofreading for the following grammar and style rules: ":["فعالسازی ویرایشگر برای قوانین گرامیری و استایل زیر:"],"Add a phrase":["اضافه کردن یک عبارت"],"Cheatin' uh?":["اذیت می کنی؟"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["خوش آمدید به {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["افزونه Jetpack شما متصل شده است."],"You're fueled up and ready to go, Jetpack is now active.":["افزونه فعال است شما آماده و با انگیزه پیش بروید."],"You're fueled up and ready to go.":["شما با انگیزه و آماده رفتن هستید."],"You are currently running a development version of Jetpack.":["شما درحال اجرای نسخه درحال توسعه Jetpack هستید."],"Submit Beta feedback":["ارسال بازخورد نسخه آزمایشی"],"What would you like to see on your Jetpack Dashboard?":["دوس دارید در پیشخوان Jetpack چه ببینید؟"],"Let us know!":["به ما اطلاع دهید!"],"Saving…":["ذخیره...."],"Save Settings":["ذخیره تنظیمات"],"Jetpack Stats Icon":["آیکون آمار Jetpack "],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}"],"Activate Site Stats":["فعال شدن آمار سایت"],"Security Scanning":["اسکن امنیتی"],"Site Backups":["پشتیبان‌گیری سایت"],"Upgrade":["ارتقاء"],"ACTIVE":["فعال"],"Your site is on Development Mode":["سایت شما در حالت توسعه قرار دارد"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support."],"View your spam stats":["مشاهده آمار اسپم"],"View your security dashboard":["مشاههده پیشخوان امنیتی"],"The site is in Development Mode, so you can not connect to WordPress.com.":["The site is in Development Mode, so you can not connect to WordPress.com."],"Link your account to WordPress.com to get the most out of Jetpack.":["Link your account to WordPress.com to get the most out of Jetpack."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack is actively blocking malicious login attempts. Data will display here soon!"],"Total malicious attacks blocked on your site.":["جمع حملات دفع شده به سایت شما."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["برای پاسداری از وب‌گاهتان در برابر تلاش‌های بدخواهان {{a}}پروژه را فعال کنید{{/a}}."],"All plugins are up-to-date. Awesome work!":["همه افزونه ها بروز می باشد.کارتان عالی است."],"Jetpack is improving and optimizing your image speed.":["Jetpack سرعت تصویر را بهبود و بهینه می کند."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack is monitoring your site. If we think your site is down, you will receive an email."],"Security":["امنیت"],"Performance":["عملکرد"],"Backups":["پشتیبان گیری"],"{{a}}View backup details{{/a}}.":["{{a}}مشاهده جزئیات پشتیبان گیری{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress."],"Unavailable in Dev Mode.":["درحالت توسعه دردسترس نیست."],"Spam Protection":["جلوگیری از اسپم"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}."],"Invalid key":["کلید نامعتبر"],"Unavailable in Dev Mode":["در حالت توسعه دردسترس نیست"],"Activating recommended features…":["فعالسازی ویژگی های توصیه شده...."],"Recommended features active.":["ویژگی‌های توصیه شده فعال شد."],"Recommended features failed to activate. %(error)s":["ویژگی های توصیه شده فعال نشد. %(error)s"],"Activating %(slug)s…":["فعال‌سازی %(slug)s…"],"%(slug)s has been activated.":["%(slug)s فعال شد."],"%(slug)s failed to activate. %(error)s":["%(slug)s فعالسازی شکست خورد. %(error)s"],"Deactivating %(slug)s…":["غیرفعال کردن %(slug)s…"],"%(slug)s has been deactivated.":["%(slug)s غیرفعال شد."],"%(slug)s failed to deactivate. %(error)s":["%(slug)s غیرفعال کردن شکست خورد. %(error)s"],"Updating %(slug)s settings…":["بروزرسانی %(slug)s تنظیمات..."],"Updated %(slug)s settings.":["تنظیمات %(slug)s بروزرسانی شد."],"Error updating %(slug)s settings. %(error)s":["خطای بروزرسانی تنظیمات %(slug)s رخ داد. %(error)s"],"Updating %(slug)s address…":["بروزرسانی آدرس %(slug)s"],"Regenerated %(slug)s address .":["تولید مجدد آدرس %(slug)s"],"Error regenerating %(slug)s address. %(error)s":["تولید مجدد خطا %(slug)s آدرس. %(error)s"],"Resetting Jetpack options…":["تنظیم مجدد تنظیمات Jetpack "],"Options reset.":["تنظیم مجدد تنظیمات"],"Options failed to reset.":["تنظیمات بازنشانی نشد."],"There was an error disconnecting Jetpack. Error: %(error)s":["There was an error disconnecting Jetpack. Error: %(error)s"],"Unlinking from WordPress.com":["قطع ارتباط از WordPress.com"],"Unlinked from WordPress.com.":["قطع ارتباط شده از WordPress.com"],"Error unlinking from WordPress.com. %(error)s":["خطای قطع ارتباط از WordPress.com. %(error)s"],"At A Glance":["در یک نگاه"],"Clichés":["کلیشه"],"Dashboard":["پیشخوان"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack."],"Automattic's Privacy Policy":["سیاست حفظ حریم خصوصی خودکار"],"WordPress.com Terms of Service":["WordPress.com شرایط سرویس"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":[""],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}روشن کردن بروزرسانی خودکار افزونه{{/a}}"],"Plugin Updates":["بروزرسانی افزونه"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}."],"No threats found, you're good to go!":["تهدیدی یافت نشد، با اطمینان خاطر ادامه دهید."],"{{a}}Contact Support{{/a}}":["{{a}}تماس پشتیبانی{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}مشاهده جزئیات در VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["اوه اوه %(number)s تهدید یافت شد."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}فعالی‌سازی نظارت{{/a}} برای دریافت رایانامه در صورتی که وب‌گاهتان از دسترس خارج شد."],"Loading…":["بارگذاری..."],"Downtime monitoring":["نظارت بر زمان اَکار"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}} دیدن آمار بیشتر در WordPress.com{{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}دیدن آمار همراه با جزئیات{{/button}}"],"All-time comments":["همه دیدگاه‌ها"],"All-time views":["همه بازدیدها"],"%(number)s View":["%(number)s مشاهده"],"Best overall day":["بهترین روز کلی"],"Views today":["بازدید های امروز"],"Months":["ماه‌ها"],"Weeks":["هفته‌ها"],"Days":["روزها"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}"],"Click to view detailed stats.":["برای مشاهده جزئیات آمار سایت کلیک کنید."],"Views: %(numberOfViews)s":["مشاهده: %(numberOfViews)s"],"Week of %(date)s":["هفته از %(date)s"],"Site Security":["امنیت سایت"],"Activate recommended features":[""],"Link to WordPress.com":["اتصال به WordPress.com"],"Unlink me from WordPress.com":["قطع ارتباط من از WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["مشکلی در اتصال جت‌پک شما رخ داد. لطفاً دوباره روی «متصل‌شدن به WordPress.com» کلیک کنید."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["مشکلی در اتصال جت‌پک داشتیم: افزونهٔ جت‌پک را غیرفعال و سپس فعال کنید و آنگاه دوباره متصل شوید."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["هنگام مجازکردن Jetpack لازم است در وب‌نوشت WordPress خود ثبت ورود کرده باشید."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}جت‌پک شما مشکل کوچکی دارد.{{/s}} از بابت مشکل پیش‌آمده عذرخواهیم. لطفاً در زمانی دیگر دوباره آزمایش کنید، اگر مشکل ادامه داشت لطفاً ضمن ارسال این پیام با پشتیبانی تماس بگیرید: %(error_key)s"],"Disconnecting Jetpack":["در حال قطع اتصال جت‌پک"],"Learn more":["بیشتر بدانید"],"Posts":["نوشته‌ها"],"Front page":["صفحهٔ نخست"],"Upload videos":["بارگذاری ویدئو"],"Pinterest":["پین‌ترست"],"Google":["گوگل"],"Show related content after posts":["نمایش مطالب مرتبط بعد از نوشته‌ها"],"Related":["مرتبط"],"Save":["ذخیره"],"Email Address":["رایانشانی"],"Media":["رسانه"],"Themes":["پوسته‌ها"],"Site Stats":["آمار وب‌گاه"],"Sharing":["اشتراک‌گذاری"],"Testimonials":["گواهی‌نامه‌ها"],"Cancel":["لغو"],"Comments":["دیدگاه‌ها"],"Ignored Phrases":["عبارات نادیده گرفته شده"],"Use automatically detected language to proofread posts and pages":["استفاده از زبانی که خودکار شناسایی می‌شود برای نمونه‌خوانی نوشته‌ها و صفحه‌ها"],"Redundant Phrases":["عبارات حشو"],"Phrases to Avoid":["عباراتی که باید از آنها پرهیز کرد"],"Passive Voice":["حالت مجهول"],"Jargon":["تخصصی"],"Hidden Verbs":["افعال پنهان"],"Double Negatives":["دوبار منفی کردن‌ها"],"Diacritical Marks":["اعراب‌گذاری‌ها"],"Complex Phrases":["عبارات پیچیده"],"Bias Language":["زبان تبعیض‌گرا"],"English Options":["گزینه‌های انگلیسی"],"Proofreading":["نمونه‌خوانی"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Your website needs to be publicly accessible to use Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["شما با موفقیت اتصال جت‌پک را قطع کرده‌اید."],"Edit":["ویرایش"],"Connected":["متصل شده"],"Activate":["فعال کردن"],"Active":["فعال"],"Search":["جست‌وجو"],"Settings":["تنظیمات"],"Learn More":["بیشتر بدانید"],"Disconnect Jetpack":["جداکردن جت‌پک"],"Test your site’s compatibility with Jetpack.":["بررسی هماهنگ بودن سایت شما با Jetpack."],"Settings header\u0004Plugin Autoupdates":[""],"Settings header\u0004Downtime monitoring":[""],"Settings header\u0004Privacy Settings":["تنظیمات حریم"],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":["بهینه‌سازی موتور جستجو"],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":["دکمه‌های اشتراک‌گذاری"],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":["دکمه‌های دوست‌داشتن"],"Settings header\u0004WordPress.com log in":["وارد WordPress.com شوید"],"Settings header\u0004Brute force attack protection":["محافظت در برابر حمله‌های غیرهوشمندانه"],"Settings header\u0004Backups and security scanning":["پشتیبان گیری و اسکن امنیتی"],"Settings header\u0004Spam filtering":["پالایش هرزنامه‌ها"],"Navigation item.\u0004Performance":[""],"Navigation item.\u0004My Plan":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":["تنظیمات"],"Navigation item.\u0004Discussion":["بحث"],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":["اشتراک گذاری"],"Navigation item.\u0004At A Glance":["در یک نگاه"],"Navigation item.\u0004Plans":["طرح‌ها"],"Navigation item.\u0004Writing":["نوشتن"],"Navigation item.\u0004Reset Options (dev only)":["بازنشاندن تنظیمات (تنها نسخهٔ توسعه‌ای)"],"Navigation item.\u0004Security":["امنیت"],"Navigation item.\u0004At a Glance":["در یک نگاه"],"Search term.\u0004terms of service":["شرایط استفاده"],"Search term.\u0004tos":["شرایط استفاده"],"Search term.\u0004gdpr":["قوانین GDPR"],"Search term.\u0004data":["داده‌ها"],"Search term.\u0004tracks":[""],"Search term.\u0004privacy":["حریم"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["ارتقاء"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"A heading for a block of related posts.\u0004Related":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"A header for a preview area in the configuration screen.\u0004Preview":["پیش‌نمایش"],"Ads header\u0004Ads":["آگهی‌ها"],"Dashboard widget header\u0004Site connection":["اتصال وب‌گاه"],"Dashboard widget header\u0004Account connection":["اتصال حساب"],"A caption for a small button to fix security issues.\u0004Threats":["تهدیدها"],"A caption for a small button to fix security issues.\u0004FIX":["رفع"],"Short warning message about new threats found.\u0004Threats found!":["خطرهایی پیدا شد!"],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":["ارتقا"],"Short message informing user that the site is secure.\u0004Secure":["ایمن"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["کلید نامعتبر"],"Caption for a button to set up a feature.\u0004Set up":["نصب"],"verb\u0004Copy":["کپی"],"Shorthand for Privacy Policy.\u0004Privacy":["حریم خصوصی"],"Shorthand for Terms of Service.\u0004Terms":["شرایط"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["اشکال زدایی"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["نظرات اسپم مسدود شده."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-fi-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-fi-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 44a25e37..00000000
--- a/plugins/jetpack/languages/json/jetpack-fi-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"fi"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":[""],"We’re now collecting stats and securing your site. Welcome aboard.":[""],"{{a}}Skip, and explore features individually{{/a}}.":[""],"Jetpack Business Plan":[""],"Jetpack Premium Plan":[""],"Jetpack Personal Plan":[""],"Get started with hassle-free design, stats, and performance tools.":[""],"Welcome to Jetpack Free":[""],"Jetpack Free Plan":[""],"Explore Jetpack plans":[""],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":[""],"Jetpack offers so much more":[""],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":[""],"Support documentation":[""],"Chat bubbles representing getting in touch with support":[""],"Site Activity":[""],"Start publicizing now":[""],"Reach a wider audience by automatically sharing your posts on social media.":[""],"Increase traffic to your site":[""],"Explore free themes":[""],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":[""],"A wide variety of themes and tools to customize a site":[""],"Set up your site security":[""],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":[""],"Site stats showing an evolution in traffic and engagement":[""],"A hand holding a loupe":[""],"A chart showing an healthy increase in earnings":[""],"Interface showing a chronological list of changes and updates in a site":[""],"A cloud with multiple types of content floating around it":[""],"A folder holding real comments":[""],"Make your site faster":[""],"Load pages faster by serving your images from our global network of servers.":[""],"A fast and performant website":[""],"A secure site, locked and protected by Jetpack":[""],"These settings won't apply to related posts added using the block editor.":[""],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":[""],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":[""],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":[""],"Add Like buttons to your posts and pages":[""],"When visitors enjoy your content, let them show it with a Like.":[""],"Explore your Jetpack Professional plan!":[""],"Explore your Jetpack Premium plan!":[""],"Explore your Jetpack Personal plan!":[""],"Create account":[""],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":[""],"Real-time, automated backups (unlimited storage)":[""],"Compose content the way you want to and streamline your publishing experience.":[""],"Add a portfolio item":[""],"Add a testimonial":[""],"Maximize your site’s visibility in search engines and view traffic stats in real time.":[""],"Create a Jetpack account to use this feature":[""],"Share your content on social media and increase audience engagement.":[""],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":[""],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":[""],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":[""],"Error enabling Site accelerator. %(error)s":[""],"Site accelerator is now speeding up your site!":[""],"Enabling Site accelerator…":[""],"Error disabling site accelerator. %(error)s":[""],"Site accelerator is no longer speeding up your site!":[""],"Disabling site accelerator…":[""],"Load pages faster, optimize images, and speed up your visitors’ experience.":[""],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":[""],"High-speed, high-definition video hosting with no third-party ads.":[""],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":[""],"Marketing Automation":[""],"Activate Jetpack Search":[""],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":[""],"Start earning":[""],"WordAds lets you earn money by displaying promotional content. Start earning today.":[""],"Spam is automatically blocked from your comments.":[""],"Spam Filtering":[""],"Browse premium themes":[""],"Access hundreds of beautifully designed premium themes at no extra cost.":[""],"Try a premium theme":[""],"View settings":[""],"Create a Jetpack account to view your email followers":[""],"Open your site to comments and invite subscribers to get alerts about your latest work.":[""],"Manage security settings":[""],"Built-in Performance":[""],"Jetpack is ready for the new WordPress editor":[""],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":[""],"Build your Jetpack site with blocks":[""],"A new editor? Yes! {{a}}Learn more{{/a}}.":[""],"The features you rely on, adapted for the new WordPress editor.":[""],"Take me to the new editor":[""],"Testing Jetpack Connection":[""],"There was an error testing Jetpack. Error: %(error)s":[""],"New in Jetpack!":[""],"Speed up static file load times":[""],"Speed up image load times":[""],"Enable site accelerator":[""],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":[""],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":[""],"View your site activity":[""],"View a chronological list of all the changes and updates to your site in an organized, readable way.":[""],"Manually Verify ":[""],"Verify with Google":[""],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":[""],"or":[""],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":[""],"Your site is verified with Google":[""],"Site failed to verify: %(error)s":[""],"Verifying...":[""],"Add faster, more advanced searching to your site with Jetpack Professional.":[""],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":[""],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":[""],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":[""],"Jetpack Search supports many customizations.":[""],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":[""],"Site is verified":[""],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":[""],"Spam filtering and priority support.":[""],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":[""],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":[""],"Custom ads.txt entries":[""],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":[""],"Introducing Premium Themes":[""]," Premium Themes":[""],"Privacy information":[""],"Enable Lazy Loading for images":[""],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":[""],"Performance & speed":[""],"Enable high-speed, ad-free video player":[""],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":[""],"Video":[""],"Carousel color scheme":[""],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":[""],"Show photo Exif metadata in carousel (when available)":[""],"Display images in a full-screen carousel gallery":[""],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":[""],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":[""],"Portfolios shortcode: [portfolio]":[""],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":[""],"Testimonials shortcode: [testimonials]":[""],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":[""],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":[""],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":[""],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":[""],"Configure related posts in the Customizer":[""],"Highlight related content with a heading":[""],"View security scan details":[""],"View backup history":[""],"Show a thumbnail image where available":[""],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":[""],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":[""],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":[""],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":[""],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":[""],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been disabled by a site administrator.":[""],"%(moduleName)s has been disabled by a site administrator.":[""],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":[""],"Configure your notification settings":[""],"Monitor your site's downtime":[""],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":[""],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":[""],"Plugin needs updating.":["","Plugins need updating."],"%(number)s":["","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":[""],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":[""],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":[""],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":[""],"Akismet checks your comments and contact form submissions against our global database of spam.":[""],"Privacy Information":[""],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":[""],"Add the Search (Jetpack) widget to your sidebar":[""],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":[""],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":[""],"Loads the next posts automatically when the reader approaches the bottom of the page.":[""],"Allows you to publish new posts by sending an email to a special address.":[""],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":[""],"Checks your content for correct grammar and spelling, misused words, and style while you write.":[""],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":[""],"Displays information on your site activity, including visitors and popular posts or pages.":[""],"Allows you to optimize your site and its content for better results in search engines.":[""],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":[""],"Displays high-quality ads on your site that allow you to earn income.":[""],"Adds sharing buttons to your content so that visitors can share it on social media sites.":[""],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":[""],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":[""],"Allows registered users to log in to your site with their WordPress.com accounts.":[""],"Protects your site from traditional and distributed brute force login attacks.":[""],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":[""],"Removes spam from comments and contact forms.":[""],"We are committed to your privacy and security. ":[""],"View all Jetpack plans":[""],"Manage your plan":[""],"Your Plan":[""],"You’re currently on Jetpack %(plan)s.":[""],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":[""],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":[""],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":[""],"Add Search (Jetpack) Widget":[""],"Jetpack Search is powering search on your site.":[""],"Manage your plugins":[""],"Moderate comments":[""],"Error updating privacy settings. %(error)s":[""],"Updated privacy settings.":[""],"Updating privacy settings…":[""],"Add Jetpack Search Widget":[""],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":[""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":[""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":[""],"Daily backups, spam filtering, and priority support.":[""],"Always-on Security":[""],"Activate video hosting":[""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":[""],"Design the perfect website":[""],"Set up Jetpack":[""],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":[""],"Jetpack Search":[""],"Jetpack version %(version)s":[""],"Your site is being backed up in real time and regularly scanned for security threats.":[""],"Daily backup of all your site data with unlimited space and one-click restores":[""],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Rajaton tila koko sivustosi tietojen päivittäiseen varmuuskopiointiin, tietojen palautus yhdellä napsautuksella, automaattinen tietoturvatarkistus sekä laajennettu tuki"],"View your security activity":[""]," (powered by VaultPress).":[""],"Customize Search Widget":[""],"Please correct the issue below and try again.":["","Please correct the issues listed below and try again."],"We are making sure your site stays free of security threats. You will be notified if we find one.":[""],"Your site is being backed up in real-time.":[""],"Jetpack version":[""],"{{a}}View your site's activity{{/a}} in a single feed.":[""],"Activity":[""],"Confirm each new phrase you add by pressing enter.":[""],"{{a}}View details{{/a}}":[""],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":[""],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":[""],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":[""],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":[""],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":[""],"Install premium themes":[""],"Review SEO features":[""],"Welcome Professional":[""],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":[""],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":[""],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":[""],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":[""],"Monetize your site with ads":[""],"Welcome Premium":[""],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":[""],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":[""],"Got it":[""],"Welcome personal":[""],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":[""],"Jetpack Stats People":[""],"Hello there! Your stats have been activated.":[""],"Just give us a little time to collect data so we can display it for you here.":[""],"Okay, got it!":[""],"Display ads below posts on":[""],"Additional ad placements":[""],"Top of each page":[""],"Second ad below post":[""],"Archives":[""],"Explore Professional":[""],"Compare All Plans":[""],"Person with laptop":[""],"Your Jetpack site is ready to go!":[""],"Stars":[""],"Jupiter":[""],"Welcome to Jetpack Personal":[""],"Welcome to Jetpack Premium":[""],"Welcome to Jetpack Professional":[""],"Schedule posts":[""],"Activate Publicize":[""],"Your site is backed up.":[""],"Image Performance":[""],"Get WordPress Apps for every device":[""],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":[""],"I already use this app.":[""],"Create address":[""],"Priority support":[""],"Add sharing buttons to your posts":[""],"Automatically share your posts to social networks":[""],"Updating settings…":[""],"Updating Post by Email address…":[""],"Your paid plan gives you access to prioritized Jetpack support.":[""],"You have paid for backups but they're not yet active.":[""],"You have paid for backups and security scanning but they’re not yet active.":[""],"Click \"Set Up\" to finish installation.":[""],"Checking site status…":[""],"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"Unlimited, high-speed video hosting":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Brute force attack protection and downtime monitoring":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Download the free apps":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"Configure site SEO":[""],"Activate SEO tools":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":["Hakukoneoptimointityökalut"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Edistykselliset hakukoneoptimointityökalut auttavat löytämään sivuston kun käyttäjät etsivät relevanttia sisältöä."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["Helpoin tapa ladata mainoksista vapaat ja brandittömät videot sivustolle. Saat tilastot videoiden katselusta ja jakamisesta ja videosoitin kuormittaa vähän ja on sulava käyttää."],"You are running Jetpack on a staging server.":["Käytät Jetpack lisäosaa näytöspalvelimella."],"More Info":["Lisää tietoa"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Hallinnoi Tykkäysten näkyvyyttä Jakomoduulin Asetukset -kohdasta{{/a}}"],"Your current IP: %(ip)s":["Nykyinen IP-osoite: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["Välilehdellä on tallentamattomia asetuksia, jotka menetetään mikäli siirryt pois. Jatkatko?"],"This will reset all Jetpack options, are you sure?":["Tämä palauttaa Jetpackin alkuperäiset asetukset, oletko varma?"],"Search for a Jetpack feature.":["Etsi Jetpack-ominaisuutta."],"Configure your Security Scans":["Määritä turvallisuusskannaukset."],"Subscriber":[""],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":["Kopioitu!"],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":["Tallennetaan..."],"Save Settings":["Tallenna asetukset"],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Site Backups":[""],"Upgrade":["Päivitä parempaan"],"ACTIVE":["KÄYTÖSSÄ"],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["Saat käyttöön automaattisen ja kokonaisvaltaisen tietoturvauhkien skannauksen kun {{a}}asennat ja otat käyttöön{{/a}} VaultPress laajennuksen."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["Saat käyttöön automaattisen ja kokonaisvaltaisen tietoturvauhkien skannauksen kun {{a}}päivität tilisi paremmaksi{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack suojaa koko ajan haitallisilta sisäänkirjautumisyrityksiltä. Tiedot tapahtumista ovat pian nähtävillä!"],"Total malicious attacks blocked on your site.":["Sivustolla torjuttujen haitallisten hyökkäysten lukumäärä."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Ota suojaus käyttöön{{/a}} hun haluat suojata sivuston haitallisilta sisäänkirjautumisyrityksiltä."],"All plugins are up-to-date. Awesome work!":["Kaikki lisäosat ovat ajantasalla. Hienoa työtä!"],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":["Tietoturva"],"Performance":["Suorituskyky"],"Backups":["Varmuuskopiot"],"{{a}}View backup details{{/a}}.":["{{a}}Katso varmuuskopion tiedot{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["{{a}}Asenna sekä ota käyttöön{{/a}} VaultPress laajennus kun haluat automaattisesti varmuuskopioida koko sivuston."],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":["Avain ei kelpaa"],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"Activating %(slug)s…":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"Deactivating %(slug)s…":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":["Hallintapaneeli"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":[""],"{{a}}Turn on plugin autoupdates{{/a}}":[""],"Plugin Updates":["Lisäosien Päivitykset"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":[" {{a}}Päivitä tilisi paremmaksi{{/a}} kun haluat automaattisesti varmuuskopioida koko sivuston."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":["Uhkia ei löytynyt, kaikki on kunnossa!"],"{{a}}Contact Support{{/a}}":["{{a}}Ota yhteys tukeen{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}Katso tiedot VaultPress.com -sivustolla{{/a}}"],"Uh oh, %(number)s threat found.":["Voi ei, %(number)s uhka löytyi.","Voi ei, %(number)s uhkaa löytyi."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":[""],"Loading…":[""],"Downtime monitoring":[""],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}Tutustu lisää tilastoihin WordPress.com'issa {{/button}}"],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["","%(number)s Views"],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":["Sivuston Tietoturva"],"Activate recommended features":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["Yhteyden luonti Jetpackiin ei onnistunut. Napsauta \"Yhdistä WordPress.com\" uudelleen."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["Yhteyden luonti Jetpackiin ei onnistunut. Poista Jetpack-lisäosa käytöstä ja sen jälkeen ota se käyttöön - yhdistä sen jälkeen uudelleen."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Kun valtuutat Jetpack-lisäosaa, on oltava kirjautuneena sivustolle."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Jetpackissa on pikkuvika.{{/s}} Pahoittelemme aiheutunutta haittaa. Yritä myöhemmin uudelleen, ole hyvä. Jos vika jatkuu ota yhteyttä tukeen ja liitä siihen tämä viesti: % (error_key)s"],"Disconnecting Jetpack":["Yhteys Jetpackiin poistetaan"],"Learn more":["Lue lisää"],"Posts":["Artikkelit"],"Front page":["Etusivu"],"Upload videos":[""],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Näytä aiheeseen liittyvä sisältö artikkelien lopussa"],"Related":["Aiheeseen liittyy"],"Save":["Tallenna"],"Email Address":["Sähköpostiosoite"],"Media":["Media"],"Themes":["Teemat"],"Site Stats":["Sivuston tilastot"],"Sharing":["Jakaminen"],"Testimonials":["Käyttäjäkokemus"],"Cancel":["Peruuta"],"Comments":["Kommentit"],"Ignored Phrases":["Sivuutettavat ilmaukset"],"Use automatically detected language to proofread posts and pages":["Käytä automaattisesti havaittua kieltä artikkelien ja sivujen oikoluvussa."],"Redundant Phrases":["Turhat ilmaukset"],"Phrases to Avoid":["Vältettävät ilmaisut"],"Passive Voice":["Passiivinen ilmaisu"],"Jargon":["Ammattikieli/-slangi"],"Hidden Verbs":["Piilotetut verbit"],"Double Negatives":["Kaksoiskiellot"],"Diacritical Marks":["Tarkemerkit (\"aksentit\")"],"Complex Phrases":["Vaikeaselkoiset lauseet"],"Bias Language":["Ei neutraali-/asenteellinen kieli"],"English Options":["Englannin kielen valinnat"],"Proofreading":["Oikoluku"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack ei saanut yhteyttä WordPress.com: %(error_key)s. Yleensä tämä tarkoittaa, että palvelimellasi on jotain määritetty väärin."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com palvelussa on nyt ongelmia ja se ei voi tankata Jetpack lisäosaasi. Yritä myöhemmin uudelleen, ole hyvä."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Jetpackissa on pikkuvika.{{/s}} Tämän sivuston liittäminen WordPress.com palveluun ei ole mahdollista. Yleensä tämä tarkoittaa, että sivusto ei ole julkisesti saavutettavissa (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Sivuston on oltava julkisesti saavutettavissa jotta voit käyttää Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["Yhteys Jetpackiin katkaistiin."],"Edit":["Muokkaa"],"Connected":["Yhdistetty"],"Activate":["Ota käyttöön"],"Active":["Käytössä"],"Search":["Etsi"],"Settings":["Asetukset"],"Learn More":["Lue lisää"],"Disconnect Jetpack":["Katkaise Jetpack liitos"],"Test your site’s compatibility with Jetpack.":["Testaa sivustosi Jetpack yhteensopivuus."],"Settings header\u0004Plugin Autoupdates":[""],"Settings header\u0004Downtime monitoring":[""],"Settings header\u0004Privacy Settings":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"Navigation item.\u0004Performance":[""],"Navigation item.\u0004My Plan":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Search term.\u0004terms of service":[""],"Search term.\u0004tos":[""],"Search term.\u0004gdpr":[""],"Search term.\u0004data":[""],"Search term.\u0004tracks":[""],"Search term.\u0004privacy":[""],"Caption for a button to purchase a pro plan.\u0004Upgrade":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"A heading for a block of related posts.\u0004Related":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":["Kopioi"],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-fr_BE-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-fr_BE-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index b0b3b9dd..00000000
--- a/plugins/jetpack/languages/json/jetpack-fr_BE-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"":{"po-revision-date":"2016-11-06 15:22:13+0000","mime-version":"1.0","content-type":"text/plain; charset=UTF-8","content-transfer-encoding":"8bit","plural-forms":"nplurals=2; plural=n != 1;","x-generator":"GlotPress/2.4.0-alpha","language":"fr_BE","project-id-version":"Plugins - Jetpack by WordPress.com - Development (trunk)"},"We're here to help":[null,""],"Jetpack comes with free, basic support for all users.":[null,""],"Ask a question":[null,""],"Search our support site":[null,""],"Get a faster resolution to your support questions.":[null,""],"Host fast, high-quality, ad-free video.":[null,""],"Generate income with high-quality ads.":[null,""],"Real-time site backups and automatic threat resolution.":[null,""],"Protect against data loss, malware, and malicious attacks.":[null,""],"Integrate easily with Google Analytics.":[null,""],"Help your content get found and shared with SEO tools.":[null,""],"Protect your site from spam.":[null,""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[null,""],"Spam filtering":[null,""],"Daily, automated malware scanning":[null,""],"13Gb of high-speed video hosting":[null,""],"Daily, automated backups (unlimited storage)":[null,""],"Daily, automated malware scanning with automated resolution":[null,""],"Priority WordPress and security support":[null,""],"Unlimited high-speed video hosting":[null,""],"SEO preview tools":[null,""],"Site stats, related content, and sharing tools":[null,""],"Brute force attack protection and uptime monitoring":[null,""],"Unlimited, high-speed image hosting":[null,""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[null,""],"Read more about Jetpack benefits":[null,""],"An Automattic Airline":[null,""],"Manage site connection":[null,""],"Connect your account to WordPress.com to view more stats":[null,""],"Theme enhancements":[null,""],"Load more posts using the default theme behavior":[null,""],"Load more posts in page with a button":[null,""],"Load more posts as the reader scrolls down":[null,""],"Theme support required.":[null,""],"Learn more about adding support for Infinite Scroll to your theme.":[null,""],"Use excerpts instead of full posts on front page and archive pages":[null,""],"Show featured images":[null,""],"Must be enabled to use tiled galleries.":[null,""],"Enable the WordPress.com toolbar":[null,""],"The WordPress.com toolbar replaces the default admin bar and offers quick links to the Reader, all your sites, your WordPress.com profile, and notifications. Centralize your WordPress experience with a single global toolbar.":[null,""],"Writing tools available to you will be shown here when an administrator enables them.":[null,""],"Portfolios":[null,""],"Add, organize, and display {{portfolioLink}}portfolios{{/portfolioLink}}. If your theme doesn’t support portfolios yet, you can display them using the shortcode ( [portfolios] )":[null,""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[null,""],"Bing":[null,""],"Yandex":[null,""],"Generate XML sitemaps":[null,""],"Your sitemap is automatically sent to all major search engines for indexing.":[null,""],"Your site is not currently accessible to search engines. You might have \"Search Engine Visibility\" disabled in your {{a}}Reading Settings{{/a}}.":[null,""],"Collecting valuable traffic stats and insights":[null,""],"The image helps collect stats, but should work when hidden.":[null,""],"Count logged in page views from":[null,""],"Allow stats reports to be viewed by":[null,""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[null,""],"Configure your SEO settings":[null,""],"In \"Upgrade\"":[null,""],"Configure your Google Analytics settings":[null,""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[null,""],"Enable ads and display an ad below each post":[null,""],"Display an additional ad at the top of each page":[null,""],"Configure your sharing buttons":[null,""],"Sharing buttons can be added to your posts so that your users can share your content to their social networks and show their support.":[null,""],"Connect your social media accounts":[null,""],"Connect your user account to WordPress.com to use this feature":[null,""],"Publicize lets you connect your site to various social networking services. Once connected to a service, you can share your posts with that service automatically.":[null,""],"Allow readers to show their appreciation of your posts by adding a like button to your content":[null,""],"Match accounts using email addresses":[null,""],"Require accounts to use WordPress.com Two-Step Authentication":[null,""],"Add to whitelist":[null,""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[null,""],"Your site is backed up and threat-free.":[null,""],"Checking your spam protection…":[null,""],"Fetching key…":[null,""],"Your site needs an Antispam key.":[null,""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[null,""],"Your site is not protected from spam.":[null,""],"Your Antispam key is valid.":[null,""],"Your site is protected from spam.":[null,""],"Checking key…":[null,""],"Your API key":[null,""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[null,""],"No search results found for %(term)s":[null,""],"Enter a search term to find settings or close search.":[null,""],"Connections":[null,""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[null,""],"Your site is connected to WordPress.com.":[null,""],"You are the Jetpack owner.":[null,""],"Connected as {{span}}%(username)s{{/span}}":[null,""],"View your Email Followers":[null,""],"Connect your user account to WordPress.com to view your email followers":[null,""],"Color scheme":[null,""],"Enable Markdown use for comments.":[null,""],"router There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[null,""],"Updated settings.":[null,""],"Error updating settings. %(error)s":[null,""],"Regenerated Post by Email address.":[null,""],"Error regenerating Post by Email address. %(error)s":[null,""],"Updated settings. Refreshing page…":[null,""],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because:":[null,""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[null,""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[null,""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[null,""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[null,""],"Configure Google Analytics settings.":[null,""],"Image of WordPress login screen protected by Jetpack":[null,""],"Google Analytics":[null,""],"Track website statistics with Google Analytics for a deeper understanding of your website visitors and customers.":[null,""],"Configure Google Analytics":[null,""],"Activate Google Analytics":[null,""],"Download the Free Apps":[null,""],"Upgrade Focus: VideoPress For Weddings":[null,""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[null,""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[null,""],"Display an ad unit at the top of your site.":[null,""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[null,""],"Image of managing your sites themes on your WordPress.com dashboard":[null,""],"Image of managing your sites plugins on your WordPress.com dashboard":[null,""],"Image of the new post editor on your WordPress.com dashboard":[null,""],"Image of your sites stats on your WordPress.com dashboard":[null,""],"Image of your WordPress.com reader":[null,""],"Example of three devices to use the WordPress apps. An iPhone, Android phone, and a apple laptop computer.":[null,""],"Download the free WordPress app for your iPhone":[null,""],"Download the free WordPress app for your Android based phone":[null,""],"Download the free WordPress app for your apple computer":[null,""],"Download the free WordPress app for your PC ":[null,""],"Download the free WordPress app for your Linux machine":[null,""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[null,""],"Upgrade to a paid plan to unlock world-class security, spam protection tools, priority support, SEO and monetization tools.":[null,""],"Ads":[null,""],"Earn income by allowing Jetpack to display high quality ads (powered by WordAds).":[null,""],"Activate Ads":[null,""],"Income generation from ads":[null,""],"Premium traffic and monetization tools":[null,""],"The Jetpack Premium plan now offers you the ability to generate income from your site by showing high-quality paid ads to your visitors. Professional plan customers also benefit from SEO tools to help optimize search engine traffic.":[null,""],"We support all Jetpack users, regardless of plan. But customers on a paid subscription enjoy priority support so that security issues are identified and fixed for you as soon as possible. ":[null,""],"In \"Mobile\"":[null,""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[null,""],"View your earnings":[null,""],"Activate VideoPress":[null,""],"Upload Videos Now":[null,""],"Make sure your site is easily found on search engines with SEO tools for your content and social posts.":[null,""],"Activate this module to use the advanced SEO tools.":[null,""],"How much is your website worth?":[null,""],"For less than the price of a coffee a month you can rest easy knowing your hard work (or livelihood) is backed up.":[null,""],"Configure Site SEO":[null,""],"Activate SEO Tools":[null,""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[null,""],"Introducing our most affordable backups and security plan yet":[null,""],"The Personal Plan keeps your data, site, and hard work safe.":[null,""],"Your site is on the Jetpack Personal plan":[null,""],"With this plan you are provided with spam-protection, daily backups (up to 30 days), and unlimited storage.":[null,""],"With this plan you are provided with spam-protection, daily backups (up to 30 days), unlimited backup storage, security scanning, 13Gb of ad-free video hosting, income generation from ads, and priority support.":[null,""],"You get spam-protection, real-time backups (unlimited archive), unlimited backup storage, security scanning, unlimited ad-free video hosting, income generation from ads, SEO tools, and priority support.":[null,""],"Daily backup of all your site data with unlimited space and one-click restores (powered by VaultPress).":[null,""],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support (powered by VaultPress).":[null,""],"Backups & Security Scanning":[null,""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, one-click threat resolution, and priority support (powered by VaultPress).":[null,""],"13Gb of fast, optimized, and ad-free video hosting for your site (powered by VideoPress).":[null,""],"Video Hosting":[null,""],"Fast, optimized, ad-free, and unlimited video hosting for your site (powered by VideoPress).":[null,""],"SEO Tools":[null,""],"Advanced SEO tools to help your site get found when people search for relevant content.":[null,""],"Daily and on-demand security scanning":[null,""],"Real-time backups and one-click threat resolution":[null,""],"Unlimited and ad-free video hosting":[null,""],"Need more? Running a business site?":[null,""],"If your site is important to you, consider protecting and improving it with some of our advanced features: ":[null,""],"On-demand security scanning":[null,""],"Advanced SEO tools":[null,""],"Configure your SEO settings.":[null,""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[null,""],"You are running Jetpack on a staging server.":[null,""],"More Info":[null,""],"Search your content.":[null,""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[null,""],"Your current IP: %(ip)s":[null,""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[null,""],"This will reset all Jetpack options, are you sure?":[null,""],"Search for a Jetpack feature.":[null,""],"Upgrade Jetpack and our state-of-the-art security scanner will hunt out malicious files and report them immediately so that you're never unaware of what is happening on your website.":[null,""],"You can see the information about security scanning in the \"At a Glance\" section.":[null,""],"Configure your Security Scans":[null,""],"This module has no configuration options":[null,""],"Let search engines and visitors know that you are serious about your websites integrity by upgrading Jetpack. Our anti-spam tools will eliminate comment spam, protect your SEO, and make it easier for visitors to stay in touch.":[null,""],"Real-time offsite backups with automated restores deliver peace-of-mind, so you can focus on writing great content and increasing traffic while we protect every aspect of your investment. Upgrade today.":[null,""],"{{link}}Configure your %(module_slug)s Settings {{/link}}":[null,""],"Subscriber":[null,""],"Big iPhone/iPad Update Now Available":[null,""],"The WordPress for Android App Gets a Big Facelift":[null,""],"WordPress.com Likes are:":[null,""],"Comments headline":[null,""],"A few catchy words to motivate your readers to comment.":[null,""],"Show a \"follow blog\" option in the comment form":[null,""],"Show a \"follow comments\" option in the comment form":[null,""],"Put a chart showing 48 hours of views in the admin bar":[null,""],"Hide the stats smiley face image":[null,""],"Whitelisted IP addresses":[null,""],"Show photo metadata (Exif) in carousel, when available":[null,""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[null,""],"Copied!":[null,""],"Highlight and copy the following text to your clipboard:":[null,""],"Regenerate address":[null,""],"Automatically proofread content when: ":[null,""],"A post or page is first published":[null,""],"A post or page is updated":[null,""],"Automatic Language Detection":[null,""],"The proofreader supports English, French, German, Portuguese and Spanish.":[null,""],"Enable proofreading for the following grammar and style rules: ":[null,""],"Add a phrase":[null,""],"Cheatin' uh?":[null,""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[null,""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[null,""],"Your Jetpack is already connected.":[null,""],"You're fueled up and ready to go, Jetpack is now active.":[null,""],"You're fueled up and ready to go.":[null,""],"You are currently running a development version of Jetpack.":[null,""],"Submit Beta feedback":[null,""],"You, %(userName)s, are not connected to WordPress.com.":[null,""],"What would you like to see on your Jetpack Dashboard?":[null,""],"Let us know!":[null,""],"Welcome to Jetpack":[null,""],"Please connect to or create a WordPress.com account to start using Jetpack. This will enable powerful security, traffic, and customization services.":[null,""],"No account? Create one for free…":[null,""],"Saving…":[null,""],"Save Settings":[null,""],"Jetpack Stats Icon":[null,""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[null,""],"Activate Site Stats":[null,""],"Security Scanning":[null,""],"Upgrade":[null,""],"ACTIVE":[null,""],"Hackers, botnets and spammers attack websites indiscriminately. Their goal is to attack everywhere and often. Our goal is to help you prepare by blocking these threats, and in worst-case-scenarios we'll be here to help you restore your site to its former glory.":[null,""],"Your site is on the Free Jetpack Plan":[null,""],"Your site is on the Jetpack Premium plan":[null,""],"Your site is on the Jetpack Professional plan":[null,""],"Your site is on Development Mode":[null,""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[null,""],"State-of-the-art spam defense powered by Akismet.":[null,""],"View your spam stats":[null,""],"Configure Akismet":[null,""],"View your security dashboard":[null,""],"Configure VaultPress":[null,""],"Real-time backups":[null,""],"One-click threat resolution":[null,""],"Compare Plans":[null,""],"Maximum grade security":[null,""],"Real-time backup with unlimited space, one-click restores, bulletproof spam monitoring, malware defense, and brute-force login protection - all in one place and optimized for WordPress.":[null,""],"Bulletproof spam filtering protects your brand, your readers, and improves SEO. Malware scanning helps maintain peace of mind and keeps your backend safe from intruders.":[null,""],"Enjoy priority support":[null,""],"The site is in Development Mode, so you can not connect to WordPress.com.":[null,""],"Link your account to WordPress.com to get the most out of Jetpack.":[null,""],"Powerful WordPress.com features on every device.":[null,""],"Manage all your sites from a single dashboard.":[null,""],"Feel the performance":[null,""],"All the WordPress apps are built for speed. You'll notice the difference in performance immediately, with near-instant page-loads and less waiting around.":[null,""],"Bulk and automatic updates":[null,""],"Most security flaws are found in outdated plugins. Use our Web and Desktop apps to turn on auto-updates or update plugins manually for all your websites in one convenient place.":[null,""],"Focus on your Writing":[null,""],"Our new editor is lightning fast, optimized for writers and eliminates distractions, giving you the ability to focus on your work.":[null,""],"Try the New Editor":[null,""],"Connect with your Visitors":[null,""],"Monitor your visitors with advanced stats. Watch for trends, learn what content performs the best and understand your visitors from anywhere in the world.":[null,""],"View Your Stats":[null,""],"Connect with the Community":[null,""],"The WordPress apps all have impressively fast and full featured readers so you can catch up with your favorite sites and join the conversation anywhere, any time.":[null,""],"Launch Reader":[null,""],"Inspiration strikes any time, anywhere.":[null,""],"Get WordPress apps for any screen.":[null,""],"In Your Pocket":[null,""],"Publish content, track stats, moderate comments and so much more from anywhere in the world. Our mobile apps are open source, free and available to you on Apple or Android devices.":[null,""],"WordPress.com in the App Store":[null,""],"WordPress.com in Google Play":[null,""],"On Your Desktop":[null,""],"A desktop app that gives WordPress a permanent home on your computer. Not to mention the distraction free environment you get writing outside of a web browser.":[null,""],"WordPress.com for Mac OS X":[null,""],"WordPress.com for Windows":[null,""],"WordPress.com for Linux":[null,""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[null,""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[null,""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[null,""],"Total malicious attacks blocked on your site.":[null,""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[null,""],"All plugins are up-to-date. Awesome work!":[null,""],"{{a}}Activate Manage{{/a}} to turn on auto updates and manage your plugins from WordPress.com.":[null,""],"Jetpack is improving and optimizing your image speed.":[null,""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[null,""],"Security":[null,""],"Performance":[null,""],"Backups":[null,""],"{{a}}View backup details{{/a}}.":[null,""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[null,""],"Unavailable in Dev Mode.":[null,""],"Spam Protection":[null,""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[null,""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[null,""],"Invalid key":[null,""],"Unavailable in Dev Mode":[null,""],"Activating recommended features…":[null,""],"Recommended features active.":[null,""],"Recommended features failed to activate. %(error)s":[null,""],"%(slug)s has been activated.":[null,""],"%(slug)s failed to activate. %(error)s":[null,""],"%(slug)s has been deactivated.":[null,""],"%(slug)s failed to deactivate. %(error)s":[null,""],"Updating %(slug)s settings…":[null,""],"Updated %(slug)s settings.":[null,""],"Error updating %(slug)s settings. %(error)s":[null,""],"Updating %(slug)s address…":[null,""],"Regenerated %(slug)s address .":[null,""],"Error regenerating %(slug)s address. %(error)s":[null,""],"Resetting Jetpack options…":[null,""],"Options reset.":[null,""],"Options failed to reset.":[null,""],"There was an error disconnecting Jetpack. Error: %(error)s":[null,""],"Unlinking from WordPress.com":[null,""],"Unlinked from WordPress.com.":[null,""],"Error unlinking from WordPress.com. %(error)s":[null,""],"At A Glance":[null,""],"Clichés":[null,""],"Dashboard":[null,""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[null,""],"Automattic's Privacy Policy":[null,""],"WordPress.com Terms of Service":[null,""],"{{a}}Activate Site Verification{{/a}} to verify your site and increase ranking with Google, Bing, and Pinterest.":[null,""],"Site Verification Tools are active. Ensure your site is verified with Google, Bing, and Pinterest for more accurate indexing and ranking. {{a}}Verify now{{/a}}":[null,""],"Site Verification Tools":[null,""],"{{a}}Activate Photon{{/a}} to enhance the performance and speed of your images.":[null,""],"Image Performance %(photon)s":[null,""],"{{a}}Activate Manage and turn on auto updates{{/a}}":[null,""],"{{a}}Turn on plugin auto updates{{/a}}":[null,""],"Plugin Updates":[null,""],"To automatically back up your entire site, please {{a}}upgrade your account.{{/a}}.":[null,""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[null,""],"No threats found, you're good to go!":[null,""],"{{a}}Contact Support{{/a}}":[null,""],"{{a}}View details at VaultPress.com{{/a}}":[null,""],"{{a}}Activate Monitor{{/a}} to receive notifications if your site goes down.":[null,""],"Loading…":[null,""],"Downtime Monitoring":[null,""],"{{button}}View more stats on WordPress.com {{/button}}":[null,""],"{{button}}View detailed stats{{/button}}":[null,""],"All-time comments":[null,""],"All-time views":[null,""],"Best overall day":[null,""],"Views today":[null,""],"Months":[null,""],"Weeks":[null,""],"Days":[null,""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[null,""],"Click to view detailed stats.":[null,""],"Views: %(numberOfViews)s":[null,""],"Week of %(date)s":[null,""],"Manage security on WordPress.com":[null,""],"Skip this step":[null,""],"Skip the Jetpack Jumpstart process":[null,""],"Features can be activated or deactivated at any time.":[null,""],"Jetpack's recommended features include:":[null,""],"Activate Recommended Features":[null,""],"Quickly enhance your site by activating Jetpack's recommended features.":[null,""],"Jump Start your Site":[null,"Faites décoller votre site"],"Link to WordPress.com":[null,""],"Unlink me from WordPress.com":[null,""],"Join the millions of users who rely on Jetpack to enhance and secure their sites. We're passionate about WordPress and here to make your life easier.":[null,""],"Jetpack is supported by some of the most technical and passionate people in the community. They're located around the globe and ready to help you.":[null,""],"Did we mention free, professional support?":[null,""],"Jetpack utilizes the state-of-the-art WordPress.com content delivery network to load your gorgeous imagery super fast. Optimized for any device, and its completely free.":[null,""],"Lightning fast, optimized images":[null,""],"Never fall behind on a security release or waste time updating multiple sites.":[null,""],"Automatic site updates.":[null,""],"Live site monitoring.":[null,""],"Gain peace of mind with Protect, the tool that has blocked billions of login attacks across millions of sites.":[null,""],"Block site attacks.":[null,""],"Jetpack blocks malicious log in attempts, lets you know if your site goes down, and can automatically update your plugins, so you don’t have to worry.":[null,""],"Site security and peace of mind":[null,""],"Jetpack harnesses the power of WordPress.com to show you detailed insights about your visitors, what they’re reading, and where they’re coming from.":[null,""],"Keep visitors engaged by giving them more to share and read with Related Posts.":[null,""],"Increase page views.":[null,""],"Give visitors the tools to share and subscribe to your content.":[null,""],"Build a community.":[null,""],"Sharing & Like Buttons":[null,""],"Automated social marketing.":[null,""],"Jetpack has many traffic and engagement tools to help you get more viewers to your site and keep them there.":[null,""],"Manage Plugins":[null,""],"Stress less. Monitor will send you real-time alerts if your site ever goes down.":[null,""],"Track your growth":[null,""],"Use Publicize to automatically share your posts with friends, followers, and the world.":[null,""],"Drive more traffic to your site":[null,""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[null,""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[null,""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[null,""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[null,""],"Disconnecting Jetpack":[null,"Déconnexion de Jetpack"],"Learn more":[null,"Plus d&rsquo;info."],"Pinterest":[null,"Pinterest"],"Google":[null,"Google"],"Show related content after posts":[null,"Afficher une liste d&rsquo;articles similaires au bas de chaque article"],"Use a large and visually striking layout":[null,"Utilisez une mise en forme large et visuellement attrayante"],"Show a \"Related\" header to more clearly separate the related section from posts":[null,"Afficher un en-tête \"Sur le même thème\" pour séparer plus clairement cette section du reste des articles"],"Related":[null,"Sur le même thème"],"Email Address":[null,"Adresse e-mail"],"Media":[null,"Média"],"Site Stats":[null,"Stats du Site"],"Testimonials":[null,"T&eacute;moignages"],"Comments":[null,"Commentaires"],"Ignored Phrases":[null,"Phrases ignorées"],"Use automatically detected language to proofread posts and pages":[null,"Utiliser la détection automatique de la langue pour corriger le contenu."],"Redundant Phrases":[null,"Phrases redondantes"],"Phrases to Avoid":[null,"Phrases à éviter"],"Passive Voice":[null,"Voix passive"],"Jargon":[null,"Jargon"],"Hidden Verbs":[null,"Verbes cachés"],"Double Negatives":[null,"Doubles négations"],"Diacritical Marks":[null,"Signes diacritiques"],"Complex Phrases":[null,"Phrases complexes"],"Bias Language":[null,"Langage Figuré"],"English Options":[null,"Options pour l'anglais"],"Proofreading":[null,"Autocorrection"],"Connect Jetpack":[null,"Connecter Jetpack"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[null,""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[null,"WordPress.com a actuellement des soucis et ne peut pas alimenter votre Jetpack. Veuillez essayer utlérieurement."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[null,""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[null,""],"You have successfully disconnected Jetpack":[null,""],"Active":[null,"Actif"],"Settings":[null,"Réglages"],"Learn More":[null,"Plus d&rsquo;info."],"Disconnect Jetpack":[null,"Déconnecter Jetpack"],"Test your site’s compatibility with Jetpack.":[null,""]} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-fr_FR-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-fr_FR-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 4b99627d..00000000
--- a/plugins/jetpack/languages/json/jetpack-fr_FR-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n > 1;","lang":"fr"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":[""],"We’re now collecting stats and securing your site. Welcome aboard.":[""],"{{a}}Skip, and explore features individually{{/a}}.":[""],"Jetpack Business Plan":[""],"Jetpack Premium Plan":[""],"Jetpack Personal Plan":[""],"Get started with hassle-free design, stats, and performance tools.":[""],"Welcome to Jetpack Free":[""],"Jetpack Free Plan":[""],"Explore Jetpack plans":[""],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":[""],"Jetpack offers so much more":[""],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":[""],"Support documentation":[""],"Chat bubbles representing getting in touch with support":[""],"Site Activity":[""],"Start publicizing now":[""],"Reach a wider audience by automatically sharing your posts on social media.":[""],"Increase traffic to your site":[""],"Explore free themes":[""],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":[""],"A wide variety of themes and tools to customize a site":[""],"Set up your site security":[""],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":[""],"Site stats showing an evolution in traffic and engagement":[""],"A hand holding a loupe":[""],"A chart showing an healthy increase in earnings":[""],"Interface showing a chronological list of changes and updates in a site":[""],"A cloud with multiple types of content floating around it":[""],"A folder holding real comments":[""],"Make your site faster":[""],"Load pages faster by serving your images from our global network of servers.":[""],"A fast and performant website":[""],"A secure site, locked and protected by Jetpack":[""],"These settings won't apply to related posts added using the block editor.":["Ces paramètres ne s'appliqueront pas aux articles similaires ajoutés à l'aide de l'éditeur de blocs."],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["Dupliquez les articles, pages, témoignages et portfolios existants. L'intégralité du contenu sera copiée, y compris le texte, les images à la une, les options de partage et plus encore."],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":["Ce site ne peut pas se connecter à WordPress.com, car il enfreint nos {{a}}conditions d'utilisation{{/a}}."],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":["Connectez votre site Web aux réseaux sociaux que vous utilisez et partagez votre contenu avec tous les comptes de réseaux sociaux en un seul clic. Lorsque vous publiez un article, il apparaît sur tous les comptes connectés."],"Add Like buttons to your posts and pages":["Ajoutez des boutons J'aime à vos articles et pages"],"When visitors enjoy your content, let them show it with a Like.":["Permettez aux visiteurs qui apprécient votre contenu de le faire savoir avec l'option J'aime."],"Explore your Jetpack Professional plan!":["Explorez votre plan Jetpack Professionnel !"],"Explore your Jetpack Premium plan!":["Explorez votre plan Jetpack Premium !"],"Explore your Jetpack Personal plan!":["Explorez votre plan Jetpack Personnel !"],"Create account":["Créer un compte"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["Votre site utilise Jetpack mais pour profiter de toutes ses fonctionnalités, vous devrez créer un compte."],"Real-time, automated backups (unlimited storage)":["Sauvegarde automatique en temps réel (stockage illimité)"],"Compose content the way you want to and streamline your publishing experience.":["Créez du contenu comme il vous convient et rationalisez votre expérience de publication."],"Add a portfolio item":["Ajouter un élément de portfolio"],"Add a testimonial":["Ajouter un témoignage"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["Optimisez la visibilité de votre site sur les moteurs de recherche et consultez les statistiques de trafic en temps réel."],"Create a Jetpack account to use this feature":["Créez un compte Jetpack pour utiliser cette fonctionnalité"],"Share your content on social media and increase audience engagement.":["Partagez votre contenu sur les réseaux sociaux et impliquez davantage vos lecteurs."],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["Jetpack continuera de surveiller votre site et vous préviendra s'il détecte des temps d'arrêt."],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["Lors de la publication de la mise à jour d'une extension, la meilleure pratique consiste à la mettre à jour immédiatement. Choisissez les extensions à mettre à jour automatiquement pour préserver la sécurité de votre site."],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["Offrez à votre site une sécurité de pointe et soyez notifié des problèmes techniques."],"Error enabling Site accelerator. %(error)s":["Erreur lors de l'activation de l'accélérateur de site. %(error)s"],"Site accelerator is now speeding up your site!":["L'accélérateur de site accélère désormais votre site !"],"Enabling Site accelerator…":["Activation de l'accélérateur de site..."],"Error disabling site accelerator. %(error)s":["Erreur lors de la désactivation de l'accélérateur de site. %(error)s"],"Site accelerator is no longer speeding up your site!":["L'accélérateur de site n'accélère plus votre site !"],"Disabling site accelerator…":["Désactivation de l'accélérateur de site..."],"Load pages faster, optimize images, and speed up your visitors’ experience.":["Chargez les pages plus rapidement, optimisez les images et offrez une expérience plus rapide à vos visiteurs."],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["Complétez les statistiques de WordPress.com grâce aux informations détaillées dont Google dispose à propos des visiteurs de votre site ainsi que de leurs habitudes de navigation."],"High-speed, high-definition video hosting with no third-party ads.":["Hébergement vidéo haute définition et haut débit sans publicités tierces."],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["Planifiez la publication de tweets illimités, d'articles sur Facebook et d'autres réseaux sociaux."],"Marketing Automation":["Marketing automatisé"],"Activate Jetpack Search":["Activez Jetpack Search"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["Remplacez la fonction de recherche par défaut de WordPress par une fonction optimisant les résultats et le filtrage grâce à Elasticsearch."],"Start earning":["Commencer à gagner de l'argent"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["WordAds vous permet de gagner de l'argent en affichant du contenu promotionnel. Commencez à gagner de l'argent dès aujourd'hui."],"Spam is automatically blocked from your comments.":["Le contenu indésirable est automatiquement bloqué à partir de vos commentaires."],"Spam Filtering":["Filtrage du contenu indésirable"],"Browse premium themes":["Parcourir les thèmes Premium"],"Access hundreds of beautifully designed premium themes at no extra cost.":["Accédez à des centaines de thèmes premium magnifiques sans frais supplémentaires."],"Try a premium theme":["Essayer un thème premium"],"View settings":["Voir les paramètres"],"Create a Jetpack account to view your email followers":["Créez un compte Jetpack pour voir vos abonnés par e-mail"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["Ouvrez votre site aux commentaires et proposez aux abonnés de recevoir une alerte concernant votre dernier travail."],"Manage security settings":["Gérer les paramètres de sécurité"],"Built-in Performance":["Performance incluse"],"Jetpack is ready for the new WordPress editor":["Jetpack est prêt pour le nouvel éditeur WordPress"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["Aujourd'hui, nous présentons la première vague de blocs propres à Jetpack conçus spécifiquement pour le nouvel éditeur : bouton Paiement simplifié, Formulaire, Association et Markdown."],"Build your Jetpack site with blocks":["Créer votre site Jetpack avec des blocs"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["Un nouvel éditeur ? Oui ! {{a}}En savoir plus{{/a}}."],"The features you rely on, adapted for the new WordPress editor.":["Les fonctionnalités dont vous ne pouvez pas vous passer, adaptées au nouvel éditeur WordPress."],"Take me to the new editor":["Accéder au nouvel éditeur"],"Testing Jetpack Connection":[""],"There was an error testing Jetpack. Error: %(error)s":["Une erreur est survenue lors du test de Jetpack. Erreur : %(error)s"],"New in Jetpack!":["Nouveau dans Jetpack !"],"Speed up static file load times":["Accélérer le temps de chargement des fichiers statiques"],"Speed up image load times":["Accélérer le temps de chargement des images"],"Enable site accelerator":["Activer l'accélérateur de site"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["Chargez les pages plus rapidement en permettant à Jetpack d'optimiser vos images et de diffuser vos images et fichiers statiques (comme CSS et JavaScript) à partir de notre réseau mondial de serveurs."],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["Ajoutez une couche de sécurité supplémentaire à votre site Web en activant la connexion et l'authentification sécurisée à WordPress.com. Si cette option est activée sur plusieurs de vos sites, vous pourrez vous connecter à ces derniers avec les mêmes identifiants de connexion."],"View your site activity":["Voir l'activité de votre site"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["Voir une liste chronologique de toutes les modifications et mises à jour de votre site de manière lisible et organisée."],"Manually Verify ":["Vérification manuelle"],"Verify with Google":["Vérification avec Google"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["Google vous contactera pour certains évènements qui se passent sur votre site, dont une notification si votre site s'est fait {{a1}}pirater{{/a1}}, ou s’il rencontre des soucis d’{{a2}}accès ou d’indexation{{/a2}}."],"or":["ou"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["Gérer le traffic de votre site et ses performances depuis {{a}}Google Search Console{{/a}}."],"Your site is verified with Google":["Votre site est vérifié avec Goole"],"Site failed to verify: %(error)s":["La vérification du site a échouée : %(error)s"],"Verifying...":["Vérification..."],"Add faster, more advanced searching to your site with Jetpack Professional.":["Ajouter un outil de recherche avancé et plus rapide à votre site grâce à Jetpack Professionnel."],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["Replacer l'outil de recherche par défaut de WordPress avec le module de recherche Jetpack pour une expérience de recherche avancée"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["Le module de recherche de Jetpack remplace l’outil de recherche par défaut et permet une recherche rapide, extensible, personnalisée, et précise grâce à l’hébergement dans le cloud de WordPress.com. Le résultat : vos utilisateurs trouveront le contenu recherché plus rapidement."],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["La recherche intégrée par défaut à WordPress est super lorsqu’il s’agit de sites avec peu de contenu. Mais plus votre site grandit, plus les recherches sont lentes et les résultats sont moins pertinents."],"Jetpack Search supports many customizations.":["Le module de recherche de Jetpack peut être personnalisé."],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["Remplacer l’outil de recherche par défaut avec une recherche rapide, extensible, personnalisée, et précise grâce à {{a}}l’hébergement dans le cloud de WordPress.com{{/a}}."],"Site is verified":["Site vérifié"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}Pour créer un site magnifique dont le fonctionnement et l'apparence répondent à vos attentes, Jetpack Professionnel vous donne un accès illimité à plus de 200 thèmes WordPress premium.{{/p}}{{p}}Jetpack Professionnel propose plus qu'un design parfait. Il vous offre une tranquillité d'esprit totale puisque vous profitez d'une assistance prioritaire de notre équipe mondiale d'experts au besoin.{{/p}}"],"Spam filtering and priority support.":["Filtrage du contenu indésirable et assistance prioritaire."],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["Lorsque la publicité est activée, Jetpack génère automatiquement un fichier ads.txt personnalisé pour votre site."],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["Jetpack génère automatiquement un fichier {{link}}ads.txt{{/link}} personnalisé pour votre site. Si vous devez ajouter des entrées supplémentaires pour d'autres réseaux, veuillez les renseigner dans l'espace ci-après, en en indiquant une par ligne."],"Custom ads.txt entries":["Entrées ads.txt personnalisées"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}Pour créer un site magnifique dont le fonctionnement et l'apparence répondent à vos attentes, Jetpack Professional vous donne un accès illimité à plus de 200 thèmes WordPress premium.{{/p}}{{p}}Jetpack Professional propose plus qu'un design parfait. Il vous offre une tranquillité d'esprit totale : sauvegarde en temps réel, recherche de programmes malveillants automatisée et assistance prioritaire de notre équipe mondiale d'experts. Vous avez ainsi la garantie que votre site sera toujours sûr et sécurisé.{{/p}}"],"Introducing Premium Themes":["Présentation des thèmes Premium"]," Premium Themes":[" Thèmes Premium"],"Privacy information":["Informations sur la confidentialité"],"Enable Lazy Loading for images":["Activer le chargement optimisé des images"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["Les images au chargement optimisé amélioreront la vitesse de votre site et offriront une expérience de navigation plus fluide. Les images se chargeront lorsque les visiteurs feront défiler l'écran, plutôt que toutes en même temps."],"Performance & speed":["Performances et vitesse"],"Enable high-speed, ad-free video player":["Activer le lecteur vidéo haut débit sans publicité"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["Rendez le contenu que vous publiez encore plus captivant avec la vidéo haute résolution. Avec Jetpack Video, vous pouvez personnaliser votre lecteur multimédia et proposer à vos visiteurs des vidéos haut débit, sans publicité et sans marque. Les vidéos sont hébergées sur nos serveurs WordPress.com et ne prennent pas de place sur votre plan d'hébergement !"],"Video":["Vidéo"],"Carousel color scheme":["Jeu de couleurs du Carrousel"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Les données Exif présentent d'autres détails techniques d'une photo, comme sa focale, son ouverture et sa valeur ISO."],"Show photo Exif metadata in carousel (when available)":["Afficher les métadonnées Exif de la photo dans le Carrousel (si disponibles)."],"Display images in a full-screen carousel gallery":["Afficher les images dans une galerie du Carrousel en plein écran"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["Créez un diaporama en plein écran dans le Carrousel avec les images de vos articles et pages. Les galeries du Carrousel sont adaptées aux appareils mobiles et encouragent les visiteurs de votre site à interagir avec vos photos."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["La barre d'outils de WordPress.com remplace la barre d'outils administrateur par défaut de WordPress et améliore votre expérience. Elle permet d'accéder en un clic à la gestion de tous vos sites, de mettre à jour votre profil WordPress.com, de voir les notifications et de découvrir les sites auxquels vous êtes abonné dans le Lecteur."],"Portfolios shortcode: [portfolio]":["Code abrégé des portfolios : [portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["Utilisez des {{portfolioLink}}portfolios{{/portfolioLink}} sur votre site pour présenter vos meilleurs produits et services. Si votre thème ne prend pas en charge les portfolios Jetpack, vous pouvez toujours utiliser un code abrégé simple pour les afficher sur votre site."],"Testimonials shortcode: [testimonials]":["Code abrégé des témoignages : [témoignages]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["Ajoutez des {{testimonialLink}}témoignages{{/testimonialLink}} à votre site Web pour attirer de nouveaux clients. Si votre thème ne prend pas en charge les témoignages Jetpack, vous pouvez toujours utiliser un code abrégé simple pour les afficher sur votre site."],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["Les moteurs de recherche ne peuvent pas accéder à votre site pour le moment. Pour rendre votre site accessible, vérifiez vos {{a}}Paramètres de lecture{{/a}} et activez la fonction « Moteur de recherche visible »."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["Bonne nouvelle : Jetpack envoie votre sitemap automatiquement à tous les principaux moteurs de recherche pour l'indexation."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["Les sitemaps sont des fichiers que les moteurs de recherche comme Google ou Bing utilisent pour indexer votre site Web. Ils permettent d'améliorer votre classement dans les résultats de recherche. Lorsque vous activez cette fonctionnalité, Jetpack crée des sitemaps pour vous et les met à jour automatiquement lorsque le contenu de votre site change."],"Configure related posts in the Customizer":["Configurer les articles similaires dans l'outil de personnalisation"],"Highlight related content with a heading":["Mettre en valeur le contenu similaire avec un en-tête"],"View security scan details":["Voir les détails de l'analyse de sécurité"],"View backup history":["Voir l'historique des sauvegardes"],"Show a thumbnail image where available":["Affichez une image miniature lorsque cela est possible"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["Pour obtenir plus d'informations sur la façon dont les fonctionnalités spécifiques de Jetpack utilisent les données et l'activité de suivi, veuillez vous reporter à notre {{privacyCenterLink}}Centre de confidentialité{{/privacyCenterLink}}."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["Nous utilisons d'autres outils de suivi, notamment des outils provenant de tiers. {{cookiePolicyLink}}Découvrez-les{{/cookiePolicyLink}} et apprenez à les contrôler."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["Ces informations nous permettent d'améliorer nos produits, de mieux cibler nos campagnes marketing, de personnaliser votre expérience WordPress.com et plus encore, comme indiqué dans notre {{pp}}politique de confidentialité{{/pp}}."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["Partagez les informations concernant votre utilisation des services avec notre outil d'analyse tout en étant connecté à votre compte WordPress.com. {{cookiePolicyLink}}En savoir plus{{/cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["Cette fonctionnalité est gérée par un administrateur du site. {{link}}En savoir plus{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["Cette fonctionnalité a été désactivée par un administrateur du site. {{link}}En savoir plus{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["Cette fonctionnalité a été activée par un administrateur du site. {{link}}En savoir plus{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["%(moduleName)s a été désactivé par un administrateur du site. {{link}}En savoir plus{{/link}}."],"This feature has been disabled by a site administrator.":["Cette fonctionnalité a été désactivée par un administrateur du site."],"%(moduleName)s has been disabled by a site administrator.":["%(moduleName)s a été désactivé par un administrateur du site."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["Vous pouvez insérer des publicités supplémentaires à l'aide du widget Publicité. {{link}}Faites un essai !{{/link}}"],"Configure your notification settings":["Configurer vos paramètres de notification"],"Monitor your site's downtime":["Surveiller la disponibilité de votre site"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["Le module de recherche de Jetpack remplace efficacement la fonction de recherche intégrée à WordPress."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["Les fichiers de votre site sont régulièrement analysés afin de détecter les modifications non autorisées ou suspectes qui pourraient compromettre votre sécurité et vos données."],"Plugin needs updating.":["L'extension doit être mise à jour.","Les extensions doivent être mises à jour."],"%(number)s":["%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Les mises à jour des extensions de Jetpack vous permettent de choisir les extensions à mettre à jour automatiquement."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack optimisera vos images et les diffusera auprès des visiteurs de votre site à partir de l'emplacement serveur le plus proche de ces derniers. L'utilisation de notre réseau mondial de distribution de contenu améliorera considérablement la vitesse de chargement de votre site."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":[""],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Les sauvegardes Jetpack vous permettent de restaurer ou de télécharger facilement une sauvegarde à partir d'un point temporel donné."],"Akismet checks your comments and contact form submissions against our global database of spam.":["Vos commentaires et envois de formulaire de contact sont vérifiés par Akismet qui les compare à notre base de données mondiale de commentaires indésirables."],"Privacy Information":["Informations sur la confidentialité"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["Avec VideoPress, vous pouvez charger des vidéos de votre ordinateur vers WordPress.com, afin de les y héberger plutôt que sur les serveurs de votre hôte. Vous pouvez ensuite les insérer sur votre site Jetpack auto-hébergé. "],"Add the Search (Jetpack) widget to your sidebar":["Ajouter le widget de recherche (Jetpack) à votre colonne latérale"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["Optimisez l'expérience de recherche de vos visiteurs en leur permettant de filtrer et trier rapidement les résultats de recherche pertinents."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["Active un thème léger et adapté aux appareils mobiles qui s'affichera sur l'appareil mobile des visiteurs."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["Charge les articles suivants automatiquement dès que le lecteur arrive en bas de page."],"Allows you to publish new posts by sending an email to a special address.":["Vous permet de publier de nouveaux articles en envoyant un e-mail à une adresse spéciale."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["Vous autorise à rédiger du contenu avec des liens, des listes et d'autres styles utilisant la syntaxe Markdown."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["Vérifie votre contenu (grammaire, orthographe, vocabulaire approprié et style) pendant que vous rédigez."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["Fournit les étiquettes masquées nécessaires pour vérifier votre site WordPress avec différents services."],"Displays information on your site activity, including visitors and popular posts or pages.":["Affiche les informations relatives à l'activité de votre site, y compris les visiteurs et les articles/pages populaires."],"Allows you to optimize your site and its content for better results in search engines.":["Vous autorise à optimiser votre site et son contenu pour améliorer les résultats dans les moteurs de recherche."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["Intègre votre site WordPress à Google Analytics, une plate-forme qui offre un aperçu détaillé de votre trafic, de vos visiteurs et de vos conversions."],"Displays high-quality ads on your site that allow you to earn income.":["Affiche des publicités de qualité sur votre site pour vous permettre de gagner de l'argent."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["Ajoute des boutons de partage à votre contenu pour permettre à vos visiteurs de le partager sur les réseaux sociaux."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["Vous permet de partager automatiquement votre contenu le plus récent sur les réseaux sociaux, y compris Facebook et Twitter."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["Ajoute des boutons J'aime à votre contenu pour permettre à vos visiteurs d'exprimer leur appréciation et leur satisfaction."],"Allows registered users to log in to your site with their WordPress.com accounts.":["Permet aux utilisateurs enregistrés de se connecter à votre site avec leur compte WordPress.com."],"Protects your site from traditional and distributed brute force login attacks.":["Protège votre site des attaques de connexion par force brute distribuées et traditionnelles."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["Sauvegarde votre site sur les serveurs mondiaux de WordPress.com, ce qui vous permet de restaurer votre contenu en cas d'urgence ou d'erreur."],"Removes spam from comments and contact forms.":["Supprime le contenu indésirable des commentaires et des formulaires de contact."],"We are committed to your privacy and security. ":["Nous sommes attachés à votre confidentialité et à votre sécurité. "],"View all Jetpack plans":["Afficher tous les plans Jetpack"],"Manage your plan":["Gérer votre plan"],"Your Plan":["Votre plan"],"You’re currently on Jetpack %(plan)s.":["Vous possédez actuellement le plan Jetpack %(plan)s."],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["Permet à vos lecteurs de s'abonner à vos articles ou commentaires, et de recevoir des notifications par e-mail lorsque du nouveau contenu est publié."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["Remplace le formulaire de commentaire standard de WordPress par un nouveau système de commentaire qui inclut des options de connexion aux réseaux sociaux."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}Activez{{/a}} pour remplacer la recherche intégrée à WordPress par le module de recherche Jetpack, une expérience de recherche améliorée."],"Add Search (Jetpack) Widget":["Ajouter le widget de recherche (Jetpack)"],"Jetpack Search is powering search on your site.":["La fonctionnalité de recherche de votre site est basée sur la recherche Jetpack."],"Manage your plugins":["Gérer vos extensions"],"Moderate comments":["Modérer les commentaires"],"Error updating privacy settings. %(error)s":["Erreur lors de la mise à jour des paramètres de confidentialité. %(error)s"],"Updated privacy settings.":["Paramètres de confidentialité mis à jour."],"Updating privacy settings…":["Mise à jour des paramètres de confidentialité…"],"Add Jetpack Search Widget":["Ajouter le widget de recherche de Jetpack"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["Ajoutez le widget de recherche de Jetpack à votre colonne latérale pour configurer des filtres de recherche avancée."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["Suite de sécurité complète, outils d'automatisation des revenus et du marketing, hébergement vidéo illimité, thèmes illimités, recherche améliorée et assistance prioritaire."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["Suite de sécurité complète, outils d'automatisation des revenus et du marketing, hébergement vidéo illimité et assistance prioritaire."],"Daily backups, spam filtering, and priority support.":["Sauvegardes quotidiennes, filtres anti-spam et assistance prioritaire."],"Always-on Security":["Sécurité permanente"],"Activate video hosting":[""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Sauvegarde en temps réel de toutes les données de votre site avec espace illimité, restaurations en un clic, analyses de sécurité automatiques et assistance prioritaire."],"Design the perfect website":["Créez le site web parfait"],"Set up Jetpack":["Configurer Jetpack"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["Sauvegarde en temps réel de toutes les données de votre site avec espace illimité, restaurations en un clic et analyses de sécurité automatisées."],"Jetpack Search":["Recherche Jetpack"],"Jetpack version %(version)s":["Version de Jetpack %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["Votre site est sauvegardé en temps réel et régulièrement analysé pour rechercher des menaces de sécurité."],"Daily backup of all your site data with unlimited space and one-click restores":["Sauvegarde quotidienne de toutes les données de votre site avec espace illimité et options de restauration en un clic."],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Sauvegarde en temps réel de toutes les données de votre site avec espace illimité, restaurations en un clic, analyses de sécurité automatisées, et support prioritaire."],"View your security activity":["Voir votre activité de sécurité"]," (powered by VaultPress).":[" (optimisé par VaultPress)."],"Customize Search Widget":["Personnaliser le widget de recherche"],"Please correct the issue below and try again.":["Veuillez corriger le problème ci-dessous et réessayer.","Veuillez corriger les problèmes indiqués ci-dessous et réessayer."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["Nous veillons à protéger votre site contre les menaces de sécurité. Vous serez notifié si nous en détectons une."],"Your site is being backed up in real-time.":["Votre site est sauvegardé en temps réel."],"Jetpack version":["Version de Jetpack"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}Consultez toute l’activité de votre site{{/a}} sur une seule page."],"Activity":["Activité"],"Confirm each new phrase you add by pressing enter.":["Validez chaque nouvelle phrase ajoutée en appuyant sur Entrée."],"{{a}}View details{{/a}}":["{{a}}Voir les détails{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["Merci d'avoir choisi un plan Jetpack Professionnel. Jetpack effectue des sauvegardes de votre contenu, recherche des menaces de sécurité, et vous donne accès à des thèmes premium."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["Jetpack Professionnel vous permet de créer le site parfait en faisant votre choix parmi plus de 300 thèmes WordPress au design professionnel, dont plus de 200 thèmes premium. Personnalisez votre contenu avec de nombreux widgets ou ajoutez une quantité illimitée de vidéos à vos articles et pages sans publicité ni filigrane."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["Le plan Professionnel permet de facilement faire augmenter votre nombre d'abonnés grâce au partage et à la planification du contenu, aux outils d'optimisation des moteurs de recherche et aux options d'abonnement intégrées. Vous pouvez monétiser votre site avec un bouton de paiement simplifié et des publicités intégrés à du texte ou à une page, et analyser le fruit de vos efforts en intégrant Google Analytics."],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Votre plan Jetpack contient tout ce dont vous avez besoin pour protéger votre travail, y compris des sauvegardes à la demande, des analyses contre les programmes malveillants, des restaurations en un seul clic et la résolution des problèmes. Votre site bénéficiera d'une protection complète contre les contenus indésirables, les codes dangereux et les tentatives de connexion par force brute."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Découvrez Jetpack Professionnel dès aujourd'hui, ainsi que tous les avantages que ce plan comporte."],"Install premium themes":["Installer des thèmes premium"],"Review SEO features":["Découvrir les fonctionnalités d’optimisation pour les moteurs de recherche (SEO)"],"Welcome Professional":["Bienvenue sur Jetpack Professionnel"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["Merci d'avoir choisi un plan Jetpack Premium. Jetpack effectue dès maintenant des sauvegardes de votre site, recherche des menaces de sécurité, et vous donne accès à des fonctionnalités de monétisation de votre site."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["Jetpack Premium vous permet de créer le site parfait, et ce, quel que soit votre objectif. Personnalisez l'apparence de votre site grâce à plus de 200 thèmes gratuits ou enrichissez votre contenu avec plus de 13 Go d'espace de stockage pour les vidéos HD hébergées sans publicité ni filigrane."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Les puissants outils de partage de Jetpack vous permettent de partager automatiquement vos derniers articles sur les réseaux sociaux, ou de planifier un nouveau partage de votre contenu à la date ou à l'heure de votre choix. Au fur et à mesure que votre nombre d'abonnés augmente, vous pouvez développer votre activité à l'aide d'outils, tels que les boutons de paiement et les publicités."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Découvrez Jetpack Premium dès aujourd'hui, ainsi que tous les avantages que ce plan comporte."],"Monetize your site with ads":["Monétiser votre site grâce à des publicités"],"Welcome Premium":["Bienvenue sur Jetpack Premium"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["Merci d'avoir choisi un plan Jetpack Personnel. Jetpack effectue des sauvegardes de votre site et recherche des menaces de sécurité."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["Avec Jetpack Personnel, vous avez accès à plus de 100 thèmes WordPress gratuits au design professionnel. Choisissez le thème le mieux adapté à votre site, et personnalisez-en les couleurs et les images, ou ajoutez plusieurs nouveaux widgets."],"Got it":[""],"Welcome personal":["Bienvenue sur Jetpack Personnel"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["En cliquant sur le bouton ci-dessous, vous acceptez nos {{tosLink}}conditions d’utilisation{{/tosLink}} et le {{shareDetailsLink}}partage d’informations{{/shareDetailsLink}} avec WordPress.com."],"Jetpack Stats People":["Personnes regardant un graphique de stats Jetpack"],"Hello there! Your stats have been activated.":["Bonjour&nbsp;! Vos statistiques ont été activées."],"Just give us a little time to collect data so we can display it for you here.":["Accordez-nous juste un peu de temps pour que nous puissions collecter les données et les afficher ici."],"Okay, got it!":["D’accord, je comprends&nbsp;!"],"Display ads below posts on":["Afficher des publicités sous les articles sur"],"Additional ad placements":["Emplacements de publicités supplémentaires"],"Top of each page":["Haut de chaque page"],"Second ad below post":["Seconde publicité sous l'article"],"Archives":["Archives"],"Explore Professional":["Découvrir Jetpack Professionnel"],"Compare All Plans":["Comparer tous les plans"],"Person with laptop":["Individu disposant d’un ordinateur portable"],"Your Jetpack site is ready to go!":["Votre site Jetpack est prêt&nbsp;!"],"Stars":["Étoiles"],"Jupiter":["Jupiter"],"Welcome to Jetpack Personal":["Bienvenue sur Jetpack Personnel"],"Welcome to Jetpack Premium":["Bienvenue sur Jetpack Premium"],"Welcome to Jetpack Professional":["Bienvenue sur Jetpack Professionnel"],"Schedule posts":[""],"Activate Publicize":["Activer Publicize"],"Your site is backed up.":["Votre site est sauvegardé."],"Image Performance":["Performance de vos images"],"Get WordPress Apps for every device":["Obtenir des applications WordPress pour tous vos appareils"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Gérez tous vos sites à partir d'un seul tableau de bord&nbsp;: publiez du contenu, suivez les statistiques, modérez les commentaires et bien plus encore, de n'importe où dans le monde."],"I already use this app.":["J’utilise déjà cette application."],"Create address":["Créer une adresse"],"Priority support":["Assistance prioritaire"],"Add sharing buttons to your posts":["Ajouter des boutons de partage à vos articles"],"Automatically share your posts to social networks":["Partager automatiquement vos articles sur les réseaux sociaux"],"Updating settings…":["Mise à jour des paramètres..."],"Updating Post by Email address…":["Mise à jour de l’adresse de publication par e-mail..."],"Your paid plan gives you access to prioritized Jetpack support.":["Votre offre payante vous donne accès à l’assistance prioritaire de Jetpack."],"You have paid for backups but they're not yet active.":["Votre offre payante comprend des sauvegardes qui ne sont pas encore actives."],"You have paid for backups and security scanning but they’re not yet active.":["Votre offre payante comprend des sauvegardes et l’analyse de sécurité, mais ces fonctionnalités ne sont pas encore actives."],"Click \"Set Up\" to finish installation.":["Cliquez sur « Installer » pour terminer l’installation."],"Checking site status…":["Vérification de l’état du site..."],"Pages":["Pages"],"We're here to help":["Nous sommes à votre disposition pour vous aider"],"Jetpack comes with free, basic support for all users.":["Jetpack comprend une assistance de base gratuite pour tous les utilisateurs."],"Ask a question":["Poser une question"],"Search our support site":["Rechercher dans notre site d'assistance"],"Get a faster resolution to your support questions.":["Obtenez une réponse plus rapide à vos questions."],"Host fast, high-quality, ad-free video.":["Hébergez et affichez vos vidéos rapidement avec un lecteur de haute qualité et sans publicité."],"Generate income with high-quality ads.":["Générez du revenu avec des publicités de haute qualité."],"Real-time site backups and automatic threat resolution.":["Sauvegardes de site en temps réel et résolution automatique des menaces."],"Protect against data loss, malware, and malicious attacks.":["Protégez-vous contre la perte de données, les programmes malveillants et les attaques malveillantes."],"Integrate easily with Google Analytics.":["Intégrez-le facilement à Google Analytics."],"Help your content get found and shared with SEO tools.":["Facilitez la recherche et le partage de votre contenu avec les outils de référencement."],"Protect your site from spam.":["Protégez votre site contre les commentaires indésirables."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["Ce site n'est pas connecté à WordPress.com. Veuillez demander à l'administrateur du site de se connecter."],"Spam filtering":["Filtrage des commentaires indésirables"],"Daily, automated malware scanning":["Recherche quotidienne et automatique de programmes malveillants"],"Daily, automated backups (unlimited storage)":["Sauvegarde quotidienne et automatique (stockage illimité)"],"Daily, automated malware scanning with automated resolution":["Recherche quotidienne et automatique de programmes malveillants, avec résolution automatique si besoin"],"Unlimited, high-speed video hosting":[""],"SEO preview tools":["Outils d'aperçu SEO"],"Site stats, related content, and sharing tools":["Outils de statistiques du site, affichage de contenu similaire, et outils de partage"],"Brute force attack protection and downtime monitoring":["Protection contre les attaques par force brute et surveillance des interruptions"],"Unlimited, high-speed image hosting":["Hébergement des images haut débit illimité"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["En déconnectant %(siteName)s de WordPress.com vous n'aurez plus accès aux éléments suivants&nbsp;:"],"Read more about Jetpack benefits":["En savoir plus sur les avantages de Jetpack"],"An Automattic Airline":["Une compagnie aérienne Automattic"],"Manage site connection":["Gérer la connexion du site"],"Connect your account to WordPress.com to view more stats":["Connectez votre compte à WordPress.com pour voir plus de statistiques"],"Theme enhancements":["Améliorations des thèmes"],"Load more posts using the default theme behavior":["Charger plus d'articles en suivant les réglages par défaut du thème"],"Load more posts in page with a button":["Charger les articles suivants grâce à un bouton"],"Load more posts as the reader scrolls down":["Charger les articles suivants automatiquement lors du défilement vers le bas de page"],"Theme support required.":["Votre thème doit tout d’abord prendre en charge cette fonctionnalité."],"Learn more about adding support for Infinite Scroll to your theme.":["En savoir plus sur l'ajout de la prise en charge du défilement infini dans votre thème."],"Use excerpts instead of full posts on front page and archive pages":["Utilisez des extraits plutôt que des articles complets sur la page d'accueil et les pages d'archive"],"Show featured images":["Afficher les images à la Une"],"Enable the WordPress.com toolbar":["Activer la barre d'outils de WordPress.com"],"Writing tools available to you will be shown here when an administrator enables them.":["Les outils d'écriture mis à votre disposition seront disponibles ici après avoir été activés par un administrateur."],"Portfolios":["Portfolios"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Notez que la {{b}}vérification de votre site à l'aide de ces services n'est pas nécessaire{{/b}} pour l'indexation de votre site par les moteurs de recherche. Pour utiliser ces outils de moteurs de recherche avancés et vérifier votre site à l'aide d'un service, collez le code de la balise HTML ci-après. Lisez l'{{support}}intégralité des instructions{{/support}} si vous rencontrez des difficultés. Services de vérification pris en charge&nbsp;: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest{{/pinterest}} et {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["Générer des sitemaps XML"],"Collecting valuable traffic stats and insights":["Collecte de statistiques et de tendances de trafic sur votre site"],"The image helps collect stats, but should work when hidden.":["L'image facilite la collecte des statistiques mais tout devrait toujours fonctionner si vous la cachez."],"Count logged in page views from":["Inclure les vues des utilisateurs suivant lorsqu’ils sont connectés"],"Allow stats reports to be viewed by":["Autoriser la consultation des rapports de stats par les utilisateurs suivants"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["Vous pouvez modifier ces paramètres pour profiter de plus de contrôle. Découvrez-en plus sur ce que vous pouvez faire pour {{a}}optimiser le SEO de votre site{{/a}}."],"Configure your SEO settings":["Configurer vos options SEO"],"In \"Upgrade\"":["Dans « Extensions »"],"Configure your Google Analytics settings":["Configurer les paramètres de Google Analytics"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Affichez des publicités sur le premier article de votre page d'accueil ou à la fin de chaque page et de chaque article. Insérez d'autres publicités en haut de votre site et dans une zone de widgets pour augmenter vos revenus."],"Enable ads and display an ad below each post":["Activer les publicités et afficher une publicité sous chaque article"],"Configure your sharing buttons":["Configurer vos boutons de partage"],"Connect your social media accounts":["Connecter vos comptes de réseaux sociaux"],"Match accounts using email addresses":["Associer les comptes à l'aide des adresses de messagerie"],"Require accounts to use WordPress.com Two-Step Authentication":["Exiger que les comptes utilisent l'authentification en deux étapes de WordPress.com"],"Add to whitelist":["Ajouter à la liste blanche"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["Vous pouvez ajouter une adresse ou une série d’adresses IP à votre liste blanche, afin d’empêcher leur blocage par Jetpack. IPv4 et IPv6 sont pris en charge. Pour spécifier une plage d’adresses IP, entrez une valeur minimum et une valeur maximum en utilisant un tiret comme séparateur. Exemple&nbsp;: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["Votre site est sauvegardé et aucune faille de sécurité n’a été détectée."],"Checking your spam protection…":["Vérification de votre protection anti-spam…"],"Fetching key…":["Récupération de la clé…"],"Your site needs an Antispam key.":["Votre site requiert une clé anti-spam."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["Il y a un problème avec votre clé d'API anti-spam. {{a}}En savoir plus{{/a}}."],"Your site is not protected from spam.":["Votre site n'est pas protégé contre les commentaires indésirables."],"Your Antispam key is valid.":["Votre clé anti-spam est valide."],"Your site is protected from spam.":["Votre site est protégé contre les commentaires indésirables."],"Checking key…":["Vérification de la clé…"],"Your API key":["Votre clé API"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["Si vous n'avez pas encore de clé API, {{a}}demandez-la ici{{/a}} et suivez le guide pour l'obtenir."],"No search results found for %(term)s":["Aucun résultat pour %(term)s"],"Enter a search term to find settings or close search.":["Saisissez un terme à rechercher pour trouver un réglage, ou fermer la recherche."],"Connections":["Connexions"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Votre site est en mode de développement, il ne peut donc pas se connecter à WordPress.com."],"Your site is connected to WordPress.com.":["Votre site est connecté à WordPress.com."],"You are the Jetpack owner.":["Votre êtes le propriétaire Jetpack."],"Connected as {{span}}%(username)s{{/span}}":["Connecté en tant que {{span}}%(username)s{{/span}}"],"View your Email Followers":["Voir vos abonnés par e-mail"],"Color scheme":["Jeu de couleurs"],"Enable Markdown use for comments.":["Activer la gestion de Markdown dans les commentaires."],"Updated settings.":["Paramètres mis à jour."],"Error updating settings. %(error)s":["Erreur lors de la mise à jour des réglages. (%(error)s)"],"Regenerated Post by Email address.":["Nouvelle adresse de publication par e-mail générée."],"Error regenerating Post by Email address. %(error)s":["Erreur lors de la génération d'une nouvelle adresse de publication par e-mail. %(error)s"],"Updated settings. Refreshing page…":["Paramètres mis à jour. Actualisation de la page…"],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["En {{a}}mode de développement{/a}} (certaines fonctionnalités sont désactivées) car :"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}Le filtre jetpack_development_mode est actif{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}La constante JETPACK_DEV_DEBUG est utilisée{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}L’URL de votre site n’inclue pas de point (par exemple http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics est un service gratuit qui complémente nos {{a}stats intégrées à Jetpack{{/a}} en vous offrant des informations différentes sur votre trafic. Les stats de WordPress.com et Google Analytics utilisent différentes méthodes pour identifier et suivre vos visiteurs sur votre site, et peuvent donc afficher des stats quelque peu différentes."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Configurer Google Analytics"],"Activate Google Analytics":["Activer Google Analytics"],"Download the free apps":["Télécharger les applications gratuites"],"Upgrade Focus: VideoPress For Weddings":["Mise en avant de l&rsquo;offre&nbsp;: VideoPress dédié aux mariages"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}Vous pouvez également configurer des articles similaires dans l&rsquo;outil de personnalisation. {{ExternalLink}}Faites un essai&nbsp;!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["Par défaut, les publicités sont affichées en bas de chaque page et article, ou sur le premier article de votre page d’accueil. Vous pouvez également les insérer en haut de votre site et dans une zone de widgets pour augmenter vos revenus&nbsp;!"],"Display an ad unit at the top of your site.":["Affichez une publicité en haut de votre site."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["En activant la publicité, vous acceptez les {{link}}conditions d&rsquo;utilisation{{/link}} de la publicité d&rsquo;Automattic."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Votre serveur n'étant pas correctement configuré, Jetpack Protect ne peut pas protéger efficacement votre site."],"In \"Mobile\"":["Dans « Mobile »"],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Configurer les paramètres de notification Monitor sur WordPress.com{{/link}}"],"View your earnings":["Voir vos revenus"],"Configure site SEO":[""],"Activate SEO tools":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["Pour commencer, cliquez sur &laquo;Ajouter un média&raquo; dans votre éditeur de publication et chargez une vidéo; nous nous occupons du reste&nbsp;!"],"Video Hosting":["Hébergement vidéo"],"SEO Tools":["Outils de référencement"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Outils de référencement pour augmenter les chances de votre site de s’afficher dans les résultats de recherche des internautes."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["La méthode la plus simple pour mettre en ligne sur votre site des vidéos sans publicité ni marque. Vous obtenez des statistiques sur la lecture et le partage de vidéos, et le lecteur est léger et réactif."],"You are running Jetpack on a staging server.":["Vous utilisez Jetpack sur un serveur de test."],"More Info":["Plus d&rsquo;infos"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Gérer la visibilité des Likes depuis réglages du module de partage{{/a}}"],"Your current IP: %(ip)s":["Votre IP actuelle&nbsp;: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["Il y a des réglages non sauvegardés dans cet onglet; ils seront seront perdus si vous le fermez. Continuer&nbsp;?"],"This will reset all Jetpack options, are you sure?":["Cela réinitialisera toutes les options de Jetpack, souhaitez-vous continuer&nbsp;?"],"Search for a Jetpack feature.":["Recherchez une fonctionnalité Jetpack."],"Configure your Security Scans":["Configurez vos analyses de sécurité"],"Subscriber":["Abonné"],"Big iPhone/iPad Update Now Available":["Une mise à jour importante pour iPhone/iPad est désormais disponible"],"The WordPress for Android App Gets a Big Facelift":["Remaniement en profondeur de l'application WordPress pour Android"],"WordPress.com Likes are:":["Les mentions J'aime de WordPress.com sont :"],"Comments headline":["Titre du commentaire"],"A few catchy words to motivate your readers to comment.":["Quelques mots pour inciter vos lecteurs à laisser un commentaire."],"Show a \"follow blog\" option in the comment form":["Ajouter l’option \"Suivre le Blog\" au formulaire de commentaires"],"Show a \"follow comments\" option in the comment form":["Ajouter l’option \"s’abonner aux commentaires\" au formulaire de commentaires"],"Put a chart showing 48 hours of views in the admin bar":["Insérer un graphique dans la barre d'administration, affichant le nombre de pages vues pendant les dernières 48 heures"],"Hide the stats smiley face image":["Cacher l'image de Smiley ajoutée par les statistiques"],"Whitelisted IP addresses":["Adresses IP ajoutées à la liste blanche"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Afficher un message de promotion des applications WordPress pour mobile au bas de votre thème pour mobile"],"Copied!":["Copie terminée"],"Highlight and copy the following text to your clipboard:":["Sélectionnez le texte suivant et copiez-le dans le Presse-papiers :"],"Regenerate address":["Générer une nouvelle adresse"],"Automatically proofread content when: ":["Activer automatiquement le correcteur orthographique : "],"A post or page is first published":["Un article ou une page est publié pour la première fois"],"A post or page is updated":["Un article ou une page est mis à jour"],"Automatic Language Detection":["Détection automatique de la langue"],"The proofreader supports English, French, German, Portuguese and Spanish.":["Le correcteur prend en charge l'anglais, le français, l'allemand, le portugais et l'espagnol."],"Enable proofreading for the following grammar and style rules: ":["Activer le correcteur des règles de grammaire et de style pour : "],"Add a phrase":["Ajouter une phrase"],"Cheatin' uh?":["On triche, hein ?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}Pouvez-vous nous expliquer pourquoi vous n'avez pas finalisé votre connexion Jetpack en répondant aux {{a}}2 questions de ce sondage{{/a}} ?{{/p}}{{p}}Une connexion à Jetpack est requise pour utiliser nos fonctions gratuites de sécurité et de trafic.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Bienvenue sur {{s}}Jetpack %(jetpack_version)s{{/s}} !"],"Your Jetpack is already connected.":["Votre Jetpack est déjà connecté."],"You're fueled up and ready to go, Jetpack is now active.":["Vous êtes prêt à démarrer, Jetpack est désormais actif."],"You're fueled up and ready to go.":["Vous êtes prêt à démarrer."],"You are currently running a development version of Jetpack.":["Vous utilisez actuellement une version de développement de Jetpack."],"Submit Beta feedback":["Envoyer vos retours à propos de la Beta"],"What would you like to see on your Jetpack Dashboard?":["Que souhaitez-vous voir sur votre tableau de bord Jetpack ?"],"Let us know!":["Informez-nous !"],"Saving…":["Enregistrement en cours…"],"Save Settings":["Enregistrer les paramètres"],"Jetpack Stats Icon":["Icône des statistiques de Jetpack"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Activez les statistiques du site{{/a}} pour afficher des statistiques détaillées, les mentions J'aime, les followers, les abonnés et bien plus encore ! {{a1}}En savoir plus{{/a1}}"],"Activate Site Stats":["Activer les statistiques du site"],"Security Scanning":["Scan de Sécurité"],"Site Backups":["Sauvegardes du site"],"Upgrade":["Mettre à niveau"],"ACTIVE":["ACTIF"],"Your site is on Development Mode":["Votre site est en mode de développement"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Une fois connecté, vous pouvez opter pour la mise à niveau vers une version payante afin de bénéficier de nos outils de sécurité et de protection anti-spam, et du support prioritaire."],"View your spam stats":["Afficher vos statistiques de spam"],"View your security dashboard":["Afficher votre tableau de bord de sécurité"],"The site is in Development Mode, so you can not connect to WordPress.com.":["Le site est en mode de développement, vous ne pouvez donc pas vous connecter à WordPress.com."],"Link your account to WordPress.com to get the most out of Jetpack.":["Liez votre compte à WordPress.com pour tirer le meilleur parti de Jetpack."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["Pour un scan complet et automatique des menaces de sécurité, {{a}}installez et activez{{/a}} VaultPress."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["Pour un scan complet et automatique des menaces de sécurité, {{a}}mettez à niveau votre compte{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack bloque activement les tentatives de connexion malveillantes. Les données s'afficheront bientôt ici !"],"Total malicious attacks blocked on your site.":["Attaques malveillantes bloquées sur votre site."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Activez Protect{{/a}} pour protéger votre site contre les tentatives de connexion malveillantes."],"All plugins are up-to-date. Awesome work!":["Toutes les extensions sont à jour. Excellent travail !"],"Jetpack is improving and optimizing your image speed.":["Jetpack améliore et optimise la vitesse de chargement de vos images."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack surveille votre site. Si nous pensons que votre site est indisponible, nous vous enverrons un e-mail."],"Security":["Sécurité"],"Performance":["Performance"],"Backups":["Sauvegardes"],"{{a}}View backup details{{/a}}.":["{{a}}Afficher les détails de sauvegarde{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["Pour sauvegarder automatiquement l'ensemble de votre site, {{a}}installez et activez{{/a}} VaultPress."],"Unavailable in Dev Mode.":["Indisponible en mode de développement."],"Spam Protection":["Protection contre le contenu indésirable"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["Pour une protection de pointe contre le contenu indésirable, {{a}}installez Akismet{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["Pour une protection de pointe contre le contenu indésirable, {{a}}activez Akismet{{/a}}."],"Invalid key":["Clé non valide"],"Unavailable in Dev Mode":["Indisponible en mode de développement"],"Activating recommended features…":["Activation des fonctionnalités recommandées en cours..."],"Recommended features active.":["Fonctionnalités recommandées activées"],"Recommended features failed to activate. %(error)s":["Échec de l’activation des fonctionnalités recommandées. %(error)s"],"Activating %(slug)s…":["Activation de %(slug)s en cours…"],"%(slug)s has been activated.":["%(slug)s a été activé."],"%(slug)s failed to activate. %(error)s":["Échec de l'activation de %(slug)s. %(error)s"],"Deactivating %(slug)s…":["Désactivation de %(slug)s en cours…"],"%(slug)s has been deactivated.":["%(slug)s a été désactivé."],"%(slug)s failed to deactivate. %(error)s":["Échec de la désactivation de %(slug)s. %(error)s"],"Updating %(slug)s settings…":["Mise à jour des paramètres %(slug)s en cours..."],"Updated %(slug)s settings.":["Paramètres %(slug)s mis à jour."],"Error updating %(slug)s settings. %(error)s":["Erreur lors de la mise à jour des paramètres %(slug)s. %(error)s"],"Updating %(slug)s address…":["Mise à jour de l'adresse %(slug)s en cours..."],"Regenerated %(slug)s address .":["Nouvelle adresse %(slug)s générée."],"Error regenerating %(slug)s address. %(error)s":["Erreur lors de la génération d'une nouvelle adresse %(slug). %(error)s"],"Resetting Jetpack options…":["Réinitialisation des options de Jetpack..."],"Options reset.":["Options réinitialisées."],"Options failed to reset.":["Échec de la réinitialisation des options."],"There was an error disconnecting Jetpack. Error: %(error)s":["Une erreur est survenue lors de la déconnexion de Jetpack. Erreur : %(error)s"],"Unlinking from WordPress.com":["Suppression du lien de WordPress.com"],"Unlinked from WordPress.com.":["Lien supprimé de WordPress.com."],"Error unlinking from WordPress.com. %(error)s":["Erreur lors de la suppression du lien de WordPress.com. %(error)s"],"At A Glance":["D'un coup d'œil"],"Clichés":["Lieux communs"],"Dashboard":["Tableau de bord"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Nous diriez-vous pourquoi ? Répondez {{a}}simplement à deux questions élémentaires{{/a}}pour nous aider à améliorer Jetpack."],"Automattic's Privacy Policy":["Politique de confidentialité d'Automattic"],"WordPress.com Terms of Service":["Conditions d'utilisation de WordPress.com"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}Activez cette option{{/a}} pour améliorer les performances et la vitesse de vos images."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Activer les mises à jour automatiques d'extensions{{/a}}"],"Plugin Updates":["Mises à jour d'extensions"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["Pour sauvegarder automatiquement l'ensemble de votre site, {{a}}mettez votre compte à niveau{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["Oups ! Votre clé Akismet est manquante ou n'est pas valide. {{akismetSettings}}Accédez aux paramètres d'Akismet pour corriger ce problème{{/akismetSettings}}."],"No threats found, you're good to go!":["Aucune menace trouvée, la voie est libre !"],"{{a}}Contact Support{{/a}}":["{{a}}Contacter l'assistance{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}Afficher les détails sur VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["Oups, %(number)s menace trouvée.","Oups, %(number)s menaces trouvées."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}Activez la surveillance{{/a}} pour recevoir des notifications si votre site est indisponible."],"Loading…":["Chargement en cours..."],"Downtime monitoring":["Surveillance des interruptions"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}Voir plus de stats sur WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}Accéder aux stats détaillées{{/button}}"],"All-time comments":["Commentaires depuis la création"],"All-time views":["Vues depuis la création"],"%(number)s View":["%(number)s vue","%(number)s vues"],"Best overall day":["Meilleure journée globale"],"Views today":["Vues aujourd'hui"],"Months":["Mois"],"Weeks":["Semaines"],"Days":["Jours"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["Une erreur s'est produite lors du chargement des statistiques. Réessayez ultérieurement ou {{a}}consultez vos statistiques maintenant sur WordPress.com{{/a}}"],"Click to view detailed stats.":["Cliquez pour afficher les statistiques détaillées."],"Views: %(numberOfViews)s":["Vues : %(numberOfViews)s"],"Week of %(date)s":["Semaine de %(date)s"],"Site Security":["Sécurité du site"],"Activate recommended features":["Activer les fonctionnalités recommandées"],"Link to WordPress.com":["M'associer à WordPress.com"],"Unlink me from WordPress.com":["Me désassocier de WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["Un problème est survenu lors de la connexion de votre Jetpack Cliquez de nouveau sur \"Se connecter à WordPress.com\"."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["Nous avons rencontré un problème lors de l&rsquo;autorisation de Jetpack; déactivez et réactivez l&rsquo;extension, et essayez une nouvelle fois."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Vous devez rester connecté à votre blog pendant l'autorisation de Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Votre Jetpack a un petit souci.{{/s}} Veuillez nous excuser pour ce désagrément. Veuillez réessayer ultérieurement. Si le problème persiste, contactez l'assistance avec ce message : %(error_key)s"],"Disconnecting Jetpack":["Déconnexion de Jetpack"],"Learn more":["Plus d&rsquo;info."],"Posts":["Articles"],"Front page":["Page d&rsquo;accueil"],"Upload videos":[""],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Afficher une liste d&rsquo;articles similaires au bas de chaque article"],"Related":["Articles similaires"],"Save":["Enregistrer"],"Email Address":["Adresse e-mail"],"Media":["Média"],"Themes":["Thèmes"],"Site Stats":["Stats du Site"],"Sharing":["Partage"],"Testimonials":["T&eacute;moignages"],"Cancel":["Annuler"],"Comments":["Commentaires"],"Ignored Phrases":["Phrases ignorées"],"Use automatically detected language to proofread posts and pages":["Utiliser la détection automatique de la langue pour corriger le contenu."],"Redundant Phrases":["Phrases redondantes"],"Phrases to Avoid":["Phrases à éviter"],"Passive Voice":["Voix passive"],"Jargon":["Jargon"],"Hidden Verbs":["Verbes cachés"],"Double Negatives":["Doubles négations"],"Diacritical Marks":["Signes diacritiques"],"Complex Phrases":["Phrases complexes"],"Bias Language":["Langage Figuré"],"English Options":["Options pour l'anglais"],"Proofreading":["Autocorrection"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack ne pouvait pas contacter WordPress.com : %(error_key)s. Dans la plupart des cas, cela signifie que quelque chose n'est pas configuré correctement sur votre hébergement."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com a actuellement des soucis et ne peut pas alimenter votre Jetpack. Veuillez essayer utlérieurement."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Votre Jetpack a un petit souci.{{/s}} La connexion de ce site à WordPress.com n'est pas possible. Ceci est généralement provoqué par un site non accessible au public (par exemple, un site sur localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Votre site doit être accessible au public pour utiliser Jetpack : %(error_key)s"],"You have successfully disconnected Jetpack":["Vous avez correctement déconnecté Jetpack"],"Edit":["Modifier"],"Connected":["Connecté"],"Activate":["Activer"],"Active":["Actif"],"Search":["Recherche"],"Settings":["Réglages"],"Learn More":["Plus d&rsquo;info."],"Disconnect Jetpack":["Déconnecter Jetpack"],"Test your site’s compatibility with Jetpack.":["Testez la compatibilité de votre site avec Jetpack."],"Settings header\u0004Plugin Autoupdates":["Mises à jour automatiques des extensions"],"Settings header\u0004Downtime monitoring":["Surveillance des temps d'arrêt"],"Settings header\u0004Privacy Settings":["Paramètres de confidentialité"],"Settings header\u0004WordPress.com toolbar":["Barre d'outils de WordPress.com"],"Settings header\u0004Composing":["Écriture"],"Settings header\u0004Site stats":["Stats du site"],"Settings header\u0004Search engine optimization":["Optimisation pour les moteurs de recherche"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Boutons de partage"],"Settings header\u0004Publicize connections":["Connexions Publicize"],"Settings header\u0004Like buttons":["Boutons J'aime"],"Settings header\u0004WordPress.com log in":["Connexion via WordPress.com"],"Settings header\u0004Brute force attack protection":["Protection contre les attaques par force brute"],"Settings header\u0004Backups and security scanning":["Sauvegardes et analyses de sécurité"],"Settings header\u0004Spam filtering":["Filtrage des commentaires indésirables"],"Navigation item.\u0004Performance":["Performance"],"Navigation item.\u0004My Plan":["Mon plan"],"Navigation item.\u0004Dev Tools":["Outils de développement"],"Navigation item.\u0004Settings":["Paramètres"],"Navigation item.\u0004Discussion":["Discussion"],"Navigation item.\u0004Traffic":["Trafic"],"Navigation item.\u0004Sharing":["Partage"],"Navigation item.\u0004At A Glance":["D'un coup d'œil"],"Navigation item.\u0004Plans":["Offres"],"Navigation item.\u0004Writing":["Rédaction"],"Navigation item.\u0004Reset Options (dev only)":["Réinitialiser les options (versions de développement uniquement)"],"Navigation item.\u0004Security":["Sécurité"],"Navigation item.\u0004At a Glance":["D'un coup d'œil"],"Search term.\u0004terms of service":["conditions d'utilisation"],"Search term.\u0004tos":["cdu"],"Search term.\u0004gdpr":["rgpd"],"Search term.\u0004data":["données"],"Search term.\u0004tracks":["suivis"],"Search term.\u0004privacy":["confidentialité"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["Mettre à niveau"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Mettre à niveau"],"Button caption\u0004Saving…":["Enregistrement en cours…"],"Button caption\u0004Save settings":["Enregistrer les paramètres"],"A heading for a block of related posts.\u0004Related":["Articles similaires"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Prévisualiser"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Rester connecté"],"A caption for a button to disconnect.\u0004Disconnect":["Déconnecter"],"Short warning message\u0004Updates needed":["Mises à jour nécessaires"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Payant"],"A header for a preview area in the configuration screen.\u0004Preview":["Aperçu"],"Ads header\u0004Ads":["Publicités"],"Dashboard widget header\u0004Site connection":["Connexion du site"],"Dashboard widget header\u0004Account connection":["Connexion du compte"],"A caption for a small button to fix security issues.\u0004Threats":["Menaces"],"A caption for a small button to fix security issues.\u0004FIX":["RÉPARER"],"Short warning message about new threats found.\u0004Threats found!":["Menace détectée&nbsp;!"],"Short warning message about site having no security scan.\u0004No scanning":["Aucune analyse"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Mettre à niveau"],"Short message informing user that the site is secure.\u0004Secure":["Sécurisé"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Clé non valide"],"Caption for a button to set up a feature.\u0004Set up":["Configurer"],"verb\u0004Copy":["Copier"],"Shorthand for Privacy Policy.\u0004Privacy":["Confidentialité"],"Shorthand for Terms of Service.\u0004Terms":["Conditions"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Débogage"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["Commentaires indésirables bloqués."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-gd-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-gd-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 6b5885cc..00000000
--- a/plugins/jetpack/languages/json/jetpack-gd-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3;","lang":"gd_GB"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":[""],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":[""],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":[""],"Save Settings":[""],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":[""],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found.","Uh oh, %(number)s threats found.","Uh oh, %(number)s threats found."],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["","%(number)s Views","%(number)s Views","%(number)s Views"],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":[""],"Learn more":["Barrachd fiosrachaidh"],"Posts":["Puist"],"Front page":["An duilleag mhòr"],"Pinterest":[""],"Google":["Google"],"Show related content after posts":["Seall susbaint cho-cheangailte an dèidh phost"],"Related":["Co-cheangailte"],"Save":["Sàbhail"],"Email Address":["Seòladh puist-dhealain"],"Media":["Meadhan"],"Themes":[""],"Site Stats":["Stats na làraich agad"],"Sharing":["Co-roinneadh"],"Testimonials":["Teisteanasan"],"Cancel":["Sguir dheth"],"Comments":["Beachdan"],"Ignored Phrases":[""],"Use automatically detected language to proofread posts and pages":[""],"Redundant Phrases":[""],"Phrases to Avoid":[""],"Passive Voice":[""],"Jargon":[""],"Hidden Verbs":[""],"Double Negatives":[""],"Diacritical Marks":[""],"Complex Phrases":[""],"Bias Language":[""],"English Options":["Roghainnean Beurla"],"Proofreading":[""],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[""],"You have successfully disconnected Jetpack":[""],"Edit":["Deasaich"],"Connected":[""],"Activate":["Cuir an gnìomh"],"Active":["Gnìomhach"],"Search":["Lorg"],"Settings":["Roghainnean"],"Learn More":["Barrachd fiosrachaidh"],"Disconnect Jetpack":["Dì-cheangail Jetpack"],"Test your site’s compatibility with Jetpack.":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-gl_ES-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-gl_ES-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 088fa5bb..00000000
--- a/plugins/jetpack/languages/json/jetpack-gl_ES-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"gl_ES"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":["A continuación, activa o conxunto de características recomendadas por Jetpack para maximizar a seguridade e o rendemento do teu sitio. {{a}}Aprende máis sobre o que está incluído{{/a}}."],"We’re now collecting stats and securing your site. Welcome aboard.":["Agora estamos recopilando estatísticas e aseguramos o teu sitio. Benvido a bordo."],"{{a}}Skip, and explore features individually{{/a}}.":["{{a}}Saltar, e explorar individualmente as características{{/a}}."],"Jetpack Business Plan":["Plan Business de Jetpack"],"Jetpack Premium Plan":["Plan Premium de Jetpack"],"Jetpack Personal Plan":["Plan Persoal de Jetpack"],"Get started with hassle-free design, stats, and performance tools.":["Empeza sen complicacións co deseño, as estatísticas e as ferramentas de rendemento."],"Welcome to Jetpack Free":["Benvido a Jetpack Gratis"],"Jetpack Free Plan":["Plan Gratis de Jetpack"],"Explore Jetpack plans":["Explora os plans de Jetpack"],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":["Consigue a tranquilidade de contar con copias de seguridade automatizadas e soporte prioritario, chegar a un público máis amplo mediante o uso de ferramentas avanzadas de SEO, monetizar o teu sitio mediante a publicación de anuncios e persoalizar o teu sitio con calquera dos nosos máis de 200 temas premium."],"Jetpack offers so much more":["Jetpack ofrece moitísimo máis"],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":["Necesitas axuda? Busca o noso sitio de soporte para obter información sobre o teu sitio, a túa conta e como sacar o máximo proveito de WordPress."],"Support documentation":["Documentación de soporte"],"Chat bubbles representing getting in touch with support":["Burbullas de chat que representan o contacto co soporte"],"Site Activity":["Actividade do sitio"],"Start publicizing now":["Empeza agora a publicitar"],"Reach a wider audience by automatically sharing your posts on social media.":["Acada unha audiencia maior compartindo automaticamente as túas entradas nos medios sociais."],"Increase traffic to your site":["Aumenta o tráfico cara ao teu sitio"],"Explore free themes":["Explora os temas gratuítos"],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":["Consigue acceso ilimitado a centos de temas profesionais, e persoaliza o teu sitio exactamente como queres."],"A wide variety of themes and tools to customize a site":["Unha ampla variedade de temas e ferramentas para persoalizar un sitio"],"Set up your site security":["Configura a seguridade do teu sitio"],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":["Evita ataques de acceso, e obtén avisos instantáneos cando haxa un problema co teu sitio."],"Site stats showing an evolution in traffic and engagement":["Estatísticas do sitio mostrando unha evolución en tráfico e participación"],"A hand holding a loupe":["Unha man sostendo unha lupa"],"A chart showing an healthy increase in earnings":["Un gráfico que mostra un saudable aumento nas gañancias"],"Interface showing a chronological list of changes and updates in a site":["Interface mostrando unha lista cronolóxica dos cambios e actualizacións dun sitio"],"A cloud with multiple types of content floating around it":["Unha nube con múltiples tipos de contido flotando ao redor"],"A folder holding real comments":["Unha carpeta con comentarios reais"],"Make your site faster":["Fai máis rápido o teu sitio"],"Load pages faster by serving your images from our global network of servers.":["Carga páxinas máis rápido servindo as túas imaxes desde a nosa rede global de servidores."],"A fast and performant website":["Unha web rápida e eficaz"],"A secure site, locked and protected by Jetpack":["Un sitio seguro, pechado e protexido por Jetpack"],"These settings won't apply to related posts added using the block editor.":[""],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":[""],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":[""],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":[""],"Add Like buttons to your posts and pages":[""],"When visitors enjoy your content, let them show it with a Like.":[""],"Explore your Jetpack Professional plan!":[""],"Explore your Jetpack Premium plan!":[""],"Explore your Jetpack Personal plan!":[""],"Create account":["Crear conta"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":[""],"Real-time, automated backups (unlimited storage)":[""],"Compose content the way you want to and streamline your publishing experience.":[""],"Add a portfolio item":[""],"Add a testimonial":["Engade unha recomendación"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":[""],"Create a Jetpack account to use this feature":[""],"Share your content on social media and increase audience engagement.":[""],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":[""],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":[""],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":[""],"Error enabling Site accelerator. %(error)s":[""],"Site accelerator is now speeding up your site!":[""],"Enabling Site accelerator…":["Activando o acelerador do sitio …"],"Error disabling site accelerator. %(error)s":[""],"Site accelerator is no longer speeding up your site!":[""],"Disabling site accelerator…":["Desactivando o acelerador do sitio …"],"Load pages faster, optimize images, and speed up your visitors’ experience.":[""],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":[""],"High-speed, high-definition video hosting with no third-party ads.":[""],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":[""],"Marketing Automation":["Automatización de márketing"],"Activate Jetpack Search":["Activa a busca de Jetpack"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":[""],"Start earning":["Empeza a gañar"],"WordAds lets you earn money by displaying promotional content. Start earning today.":[""],"Spam is automatically blocked from your comments.":[""],"Spam Filtering":["Filtrado de spam"],"Browse premium themes":["Ver temas premium"],"Access hundreds of beautifully designed premium themes at no extra cost.":[""],"Try a premium theme":[""],"View settings":["Ver axustes"],"Create a Jetpack account to view your email followers":[""],"Open your site to comments and invite subscribers to get alerts about your latest work.":[""],"Manage security settings":["Xestionar axustes de seguridade"],"Built-in Performance":["Rendemento incluído"],"Jetpack is ready for the new WordPress editor":[""],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":[""],"Build your Jetpack site with blocks":[""],"A new editor? Yes! {{a}}Learn more{{/a}}.":[""],"The features you rely on, adapted for the new WordPress editor.":[""],"Take me to the new editor":[""],"Testing Jetpack Connection":["Probando a conexión con Jetpack"],"There was an error testing Jetpack. Error: %(error)s":[""],"New in Jetpack!":["Novo en Jetpack!"],"Speed up static file load times":[""],"Speed up image load times":[""],"Enable site accelerator":["Activa o acelerador do sitio"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":[""],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":[""],"View your site activity":[""],"View a chronological list of all the changes and updates to your site in an organized, readable way.":[""],"Manually Verify ":["Verificar manualmente"],"Verify with Google":["Verificar con Google"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":[""],"or":["ou"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":[""],"Your site is verified with Google":[""],"Site failed to verify: %(error)s":[""],"Verifying...":["Verificando…"],"Add faster, more advanced searching to your site with Jetpack Professional.":[""],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":[""],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":[""],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":[""],"Jetpack Search supports many customizations.":[""],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":[""],"Site is verified":["O sitio está verificado"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":[""],"Spam filtering and priority support.":[""],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":[""],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":[""],"Custom ads.txt entries":[""],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":[""],"Introducing Premium Themes":["Introducindo os temas premium"]," Premium Themes":["Temas premium"],"Privacy information":["Información de privacidade"],"Enable Lazy Loading for images":[""],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":[""],"Performance & speed":["Rendemento e velocidade"],"Enable high-speed, ad-free video player":[""],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":[""],"Video":["Vídeo"],"Carousel color scheme":["Esquema de cor do carrusel"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":[""],"Show photo Exif metadata in carousel (when available)":[""],"Display images in a full-screen carousel gallery":[""],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":[""],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":[""],"Portfolios shortcode: [portfolio]":["Shortcode de portfolios: [portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":[""],"Testimonials shortcode: [testimonials]":["Shortcode de recomendacións: [testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":[""],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":[""],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":[""],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":[""],"Configure related posts in the Customizer":[""],"Highlight related content with a heading":[""],"View security scan details":[""],"View backup history":["Ver histórico da copia de seguridade"],"Show a thumbnail image where available":[""],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":[""],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":[""],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":[""],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":[""],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":[""],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been disabled by a site administrator.":[""],"%(moduleName)s has been disabled by a site administrator.":[""],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":[""],"Configure your notification settings":[""],"Monitor your site's downtime":[""],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":[""],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":[""],"Plugin needs updating.":["","Plugins need updating."],"%(number)s":["%(número)s","%(número)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":[""],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":[""],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":[""],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":[""],"Akismet checks your comments and contact form submissions against our global database of spam.":[""],"Privacy Information":["Información sobre a privacidade"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":[""],"Add the Search (Jetpack) widget to your sidebar":[""],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":[""],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":[""],"Loads the next posts automatically when the reader approaches the bottom of the page.":[""],"Allows you to publish new posts by sending an email to a special address.":[""],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":[""],"Checks your content for correct grammar and spelling, misused words, and style while you write.":[""],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":[""],"Displays information on your site activity, including visitors and popular posts or pages.":[""],"Allows you to optimize your site and its content for better results in search engines.":[""],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":[""],"Displays high-quality ads on your site that allow you to earn income.":[""],"Adds sharing buttons to your content so that visitors can share it on social media sites.":[""],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":[""],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":[""],"Allows registered users to log in to your site with their WordPress.com accounts.":[""],"Protects your site from traditional and distributed brute force login attacks.":[""],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":[""],"Removes spam from comments and contact forms.":[""],"We are committed to your privacy and security. ":[""],"View all Jetpack plans":[""],"Manage your plan":[""],"Your Plan":["O teu plan"],"You’re currently on Jetpack %(plan)s.":[""],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":[""],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":[""],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":[""],"Add Search (Jetpack) Widget":[""],"Jetpack Search is powering search on your site.":[""],"Manage your plugins":[""],"Moderate comments":["Modera comentarios"],"Error updating privacy settings. %(error)s":[""],"Updated privacy settings.":[""],"Updating privacy settings…":[""],"Add Jetpack Search Widget":[""],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":[""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":[""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":[""],"Daily backups, spam filtering, and priority support.":[""],"Always-on Security":["Seguridade sempre activa"],"Activate video hosting":[""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":[""],"Design the perfect website":[""],"Set up Jetpack":[""],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":[""],"Jetpack Search":["Busca de Jetpack"],"Jetpack version %(version)s":[""],"Your site is being backed up in real time and regularly scanned for security threats.":[""],"Daily backup of all your site data with unlimited space and one-click restores":[""],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Copias de seguridade diarias de todos os datos do teu sitio con espazo ilimitado, restauracións cun só clic, análise de seguridade automático e servizo de axuda prioritario "],"View your security activity":[""]," (powered by VaultPress).":[""],"Customize Search Widget":[""],"Please correct the issue below and try again.":["","Please correct the issues listed below and try again."],"We are making sure your site stays free of security threats. You will be notified if we find one.":[""],"Your site is being backed up in real-time.":[""],"Jetpack version":["Versión de Jetpack"],"{{a}}View your site's activity{{/a}} in a single feed.":[""],"Activity":["Actividade"],"Confirm each new phrase you add by pressing enter.":[""],"{{a}}View details{{/a}}":[""],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":[""],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":[""],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":[""],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":[""],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":[""],"Install premium themes":[""],"Review SEO features":[""],"Welcome Professional":["Benvido ao plan Profesional"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":[""],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":[""],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":[""],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":[""],"Monetize your site with ads":[""],"Welcome Premium":["Benvido ao plan Premium"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":[""],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":[""],"Got it":["Entendido!"],"Welcome personal":["Benvido ao plan persoal"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":[""],"Jetpack Stats People":[""],"Hello there! Your stats have been activated.":[""],"Just give us a little time to collect data so we can display it for you here.":[""],"Okay, got it!":[""],"Display ads below posts on":[""],"Additional ad placements":[""],"Top of each page":[""],"Second ad below post":[""],"Archives":["Arquivos"],"Explore Professional":["Explorar o plan Profesional"],"Compare All Plans":[""],"Person with laptop":[""],"Your Jetpack site is ready to go!":[""],"Stars":["Estrelas"],"Jupiter":["Xúpiter"],"Welcome to Jetpack Personal":[""],"Welcome to Jetpack Premium":[""],"Welcome to Jetpack Professional":[""],"Schedule posts":["Programación de entradas"],"Activate Publicize":["Activa Divulgar"],"Your site is backed up.":[""],"Image Performance":["Rendemento das imaxes"],"Get WordPress Apps for every device":["Consegue aplicacións WordPress para calquera dispositivo"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Xestiona todos os teus sitios desde un só escritorio: publica contido, segue as estatísticas, modera comentarios, e moito máis desde calquera lugar do mundo."],"I already use this app.":["Xa usei esta aplicación."],"Create address":["Crear dirección"],"Priority support":["Soporte prioritario"],"Add sharing buttons to your posts":["Engade botóns de compartir aos teus artigos"],"Automatically share your posts to social networks":["Comparte automaticamente as túas entradas nas redes sociais"],"Updating settings…":["Actualizando axustes..."],"Updating Post by Email address…":["Actualizando o artigo a través da dirección de correo electrónico..."],"Your paid plan gives you access to prioritized Jetpack support.":["O teu plan de pago dáche acceso ao soporte prioritario de Jetpack."],"You have paid for backups but they're not yet active.":["Pagaches polas copias de seguridade pero aínda non están activas."],"You have paid for backups and security scanning but they’re not yet active.":["Pagaches por copias e analisis de seguridade pero aínda non están activas."],"Click \"Set Up\" to finish installation.":["Feixe clic en \"Configurar\" para finalizar a instalación."],"Checking site status…":["Comprobando estado do sitio..."],"Pages":["Páxinas"],"We're here to help":["Onde ir para obter axuda"],"Jetpack comes with free, basic support for all users.":["Jetpack incorpora soporte básico gratuíto para todos os usuarios."],"Ask a question":["Feixe unha pregunta"],"Search our support site":["Busca no noso sitio de soporte"],"Get a faster resolution to your support questions.":["Consegue unha resposta máis rápida ás túas preguntas de soporte."],"Host fast, high-quality, ad-free video.":["Vídeo de alta calidade, sen publicidade e con aloxamento rápido."],"Generate income with high-quality ads.":["Xera beneficios con anuncios de alta calidade."],"Real-time site backups and automatic threat resolution.":["Copias de seguridade en tempo real e resolución automática de ameazas."],"Protect against data loss, malware, and malicious attacks.":["Protexe contra perdas de datos, malware e ataques maliciosos."],"Integrate easily with Google Analytics.":["Intégrase facilmente con Google Analytics."],"Help your content get found and shared with SEO tools.":["Axuda a que os teus contidos sexan atopados e compartidos con ferramentas SEO."],"Protect your site from spam.":["Protexe o teu sitio do spam."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["Este sitio non está conectado con WordPress.com. Por favor, contacta co administrado para conectalo."],"Spam filtering":["Filtro de spam"],"Daily, automated malware scanning":["Análise automática diario de malware"],"Daily, automated backups (unlimited storage)":["Copias de seguridade diarias automáticas (con almacenamento ilimitado)"],"Daily, automated malware scanning with automated resolution":["Escaneo diario e resolución automática de malware"],"Unlimited, high-speed video hosting":["Aloxamento de alta velocidade ilimitado para vídeo"],"SEO preview tools":["Ferramentas de vista previa SEO"],"Site stats, related content, and sharing tools":["Estatísticas do sitio, contido relacionado e ferramentas para compartir"],"Brute force attack protection and downtime monitoring":["Protección contra ataques de forza bruta e monitoraxe de tempo de actividade"],"Unlimited, high-speed image hosting":["Aloxamento de alta velocidade ilimitado para imaxes"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["Ao desconectar o teu %(siteName)s de WordPress.com, xa non terás acceso ao seguinte:"],"Read more about Jetpack benefits":["Le máis sobre os beneficios de Jetpack"],"An Automattic Airline":["Unha aerolínea de Automattic"],"Manage site connection":["Xestionar conexión do sitio"],"Connect your account to WordPress.com to view more stats":["Conecta a túa conta a WordPress.com para ver máis estatísticas"],"Theme enhancements":["Melloras do tema"],"Load more posts using the default theme behavior":["Carga máis entradas usando o comportamento por defecto do tema"],"Load more posts in page with a button":["Carga mais entradas na páxina cun botón"],"Load more posts as the reader scrolls down":["Carga máis entradas a medida que o lector navega"],"Theme support required.":["Requírese que o tema sexa compatible."],"Learn more about adding support for Infinite Scroll to your theme.":["Aprende máis sobre como engadir soporte para scroll infinito no teu tema."],"Use excerpts instead of full posts on front page and archive pages":["Usar extractos no canto de entradas completas en portada e páxinas de arquivo"],"Show featured images":["Mostra imaxes destacadas"],"Enable the WordPress.com toolbar":["Activar a barra de ferramentas de WordPress.com"],"Writing tools available to you will be shown here when an administrator enables them.":["As ferramentas de escritura mostraránseche aquí cando un administrador actíveas."],"Portfolios":["Portafolios"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Dáche conta que {{b}}non é necesario verificar o teu sitio con estes servizos{{/b}} para que o teu sitio o indexen os motores de procura. Para usar estas ferramentas avanzadas de motores de procura e verificar o teu sitio cun servizo pega o código da etiqueta HTML a continuación. Le as {{support}}instrucións completas{{/support}} se tes algún problema. Servizos compatibles coa verificación: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}} e {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["Crea mapas do sitio XML"],"Collecting valuable traffic stats and insights":["Recollendo valiosas estatísticas e informes de tráfico"],"The image helps collect stats, but should work when hidden.":["A imaxe axuda a recoller estatísticas pero debería funcionar cando estea oculta."],"Count logged in page views from":["Contar as visualizacións de páxina conectados desde"],"Allow stats reports to be viewed by":["Permitir que sexan vistos os informes de estatísticas"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["Podes modificar estes axustes se queres un control máis avanzado. Le máis sobre como {a}}optimizar o SEO do teu sitio{{/a}}."],"Configure your SEO settings":["Configura os teus axustes SEO"],"In \"Upgrade\"":["En \"Actualización\""],"Configure your Google Analytics settings":["Configura os teus axustes de Google Analytics"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Mostra anuncios no primeiro artigo da túa portada ou ao final de cada páxina e entrada. Pon máis anuncios na parte superior do teu sitio e en calquera área de widgets para incrementar as túas ganancias."],"Enable ads and display an ad below each post":["Activa anuncios e mostra un anuncio debaixo de cada artigo"],"Configure your sharing buttons":["Configura os teus botóns de compartir"],"Connect your social media accounts":["Conecta coas túas contas de redes socials"],"Match accounts using email addresses":["Emparella contas utilizando a dirección de email"],"Require accounts to use WordPress.com Two-Step Authentication":["Requirir contas para usar a identificación en dous pasos de WordPress.com"],"Add to whitelist":["Engadir á lista branca"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["Deberías autorizar algunhas direccións IP para que non sexan bloqueadas por Jetpack. Admítense direccións IPv4 e IPv6. Para especificar un rango, introduce o valor menor e o maior separados por un guión, p. ej: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["O teu sitio está asegurado e libre de ameazas."],"Checking your spam protection…":["Comprobando protección contra o spam..."],"Fetching key…":["Obtendo clave..."],"Your site needs an Antispam key.":["O teu sitio necesita unha clave Akismet."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["Hai un problema coa túa clave de API antispam. {{a}}Saber máis{{/a}}."],"Your site is not protected from spam.":["O teu sitio non está protexido fronte ao spam."],"Your Antispam key is valid.":["A túa clave antispam non é válida."],"Your site is protected from spam.":["O teu sitio está protexido contra o spam."],"Checking key…":["Comprobando clave..."],"Your API key":["A túa clave de API"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["Se aínda non tes unha clave de API, {{a}}feixe clic aquí {{/a}} e segue o proceso guiado para conseguila."],"No search results found for %(term)s":["Non se atoparon resultados para %(term)"],"Enter a search term to find settings or close search.":["Escribe un termo de procura para atopar opcións ou pecha a procura."],"Connections":["Conexións"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["O teu sitio está en modo de desenvolvemento, polo que non se pode conectar con WordPress.com."],"Your site is connected to WordPress.com.":["O teu sitio está conectado con WordPress.com."],"You are the Jetpack owner.":["Es o propietario de Jetpack."],"Connected as {{span}}%(username)s{{/span}}":["Conectado como {{span}}%(username)s{{/span}}"],"View your Email Followers":["Ver os teus seguidores por correo electrónico"],"Color scheme":["Esquema de cor"],"Enable Markdown use for comments.":["Permite Markdown nos comentarios."],"Updated settings.":["Opcións gardadas."],"Error updating settings. %(error)s":["Erro actualizando opcións. %(erro)s"],"Regenerated Post by Email address.":["Artigo rexenerado desde a dirección de correo electrónico."],"Error regenerating Post by Email address. %(error)s":["Erro ao rexenerar o artigo desde a dirección de correo electrónico. %(erro) é"],"Updated settings. Refreshing page…":["Opcións actualizadas. Recargando páxina..."],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["Actualmente en {{a}}modo de desenvolvemento{{/a}} (algunhas características están desactivadas) porque: {{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}O filtro jetpack_development_mode está activo{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}Definiuse a constante JETPACK_DEV_DEBUG{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}A URL do teu sitio non ten punto (p.ex. http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics é un servizo gratuíto que complementa nosas {{a}}estatísticas integradas{{/a}} con diferentes informes do teu tráfico. As estatísticas de WordPress.com e as de Google Analytics usan distintos métodos para identificar e seguir a actividade do teu sitio, así que normalmente mostrarán totais das túas visitas, páxinas vistas, etc. lixeiramente diferentes."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Configura Google Analytics"],"Activate Google Analytics":["Activa Google Analytics"],"Download the free apps":["Descarga as aplicacións gratuítas"],"Upgrade Focus: VideoPress For Weddings":["Upgrade Focus: VideoPress para Weddings"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}Agora tamén podes configurar os artigos relacionados no personalizador. {{ExternalLink}}Próbao!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["Por defecto os anuncios móstranse ao final de cada páxina, entrada, ou o primeiro artigo na súa portada. Tamén podes engadilos á parte superior do seu sitio e en calquera área de widget para aumentar as túas ganancias!"],"Display an ad unit at the top of your site.":["Mostrar un bloque de anuncios na parte superior do seu sitio."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["Mediante a activación dous anuncios, vostede acepta as {{link}}Condicións de servizo{{/link}} dous anuncios e Automattic."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["O teu servidor está mal configurado, o que significa que Jetpack Protect non pode protexer o teu sitio con efectividade."],"In \"Mobile\"":["En \"Móvil\""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Configura os teus axustes de aviso de Monitor en WordPress.com{{/link}}"],"View your earnings":["Ver as túas ganancias"],"Configure site SEO":["Configurar el SEO do sitio"],"Activate SEO tools":["Activar as ferramentas de SEO"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["Para empezar feixe clic en engadir obxecto no teu editor de entradas e sobe un vídeo. Encargarémonos do resto!"],"Video Hosting":["Aloxamento de vídeo"],"SEO Tools":["Ferramentas de SEO"],"Advanced SEO tools to help your site get found when people search for relevant content.":["As ferramentas SEO avanzadas axudan a que o teu sitio sexa fácil de atopar cando a xente busque contido relevante."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["A forma máis sinxela de subirse vídeos sen anuncios nin marcas. Obtés estatísticas das reproducións de vídeo e das veces que se compartiu e o reprodutor é lixeiro e adaptable."],"You are running Jetpack on a staging server.":["Estás a executar Jetpack nun servidor de desenvolvemento."],"More Info":["Máis Información"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Manage Likes visibilidade desde o Sharing Module Settings{{/a}}"],"Your current IP: %(ip)s":["Túa IP actual: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["Hai configuracións sen gardar neste tab que serán perdidas se as deixas así. Proceder?"],"This will reset all Jetpack options, are you sure?":["Isto resetea todas as opcións Jetpack, estás seguro?"],"Search for a Jetpack feature.":["Buscar unha característica Jetpack."],"Configure your Security Scans":["Configurar os teus Escáneres de Seguranza"],"Subscriber":["Subscritor"],"Big iPhone/iPad Update Now Available":["Big iPhone/iPad Update Agora Dispoñíbel"],"The WordPress for Android App Gets a Big Facelift":["O WordPress para Android App Consegue unha Gran Mellora do Aspecto"],"WordPress.com Likes are:":["WordPress.com Likes son:"],"Comments headline":["Titular de comentarios"],"A few catchy words to motivate your readers to comment.":["Expresións pegadizas para motivar aos teus lectores para comentar."],"Show a \"follow blog\" option in the comment form":["Mostra as opcións \"segue ao blogue\" no formulario de comentarios"],"Show a \"follow comments\" option in the comment form":["Mostra a opción \"segue os comentarios\" no formulario de comentarios"],"Put a chart showing 48 hours of views in the admin bar":["Poñer un gráfico mostrando as visitas das últimas 48 horas na barra de administración"],"Hide the stats smiley face image":["Oculta a imaxe da carita feliz das estatísticas"],"Whitelisted IP addresses":["Lista branca de direccións IP"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Mostra unha promo das aplicacións de WordPress para móbiles no pé da versión móbil do tema"],"Copied!":["Copiado!"],"Highlight and copy the following text to your clipboard:":["Resalte e copie o seguinte texto no portapapeles:"],"Regenerate address":["Rexenera a dirección"],"Automatically proofread content when: ":["Proba de lectura automática do contido cando: "],"A post or page is first published":["Un artigo ou páxina é publicada por primeira vez"],"A post or page is updated":["Un artigo ou páxina está actualizada"],"Automatic Language Detection":["Detección automática de idioma"],"The proofreader supports English, French, German, Portuguese and Spanish.":["O corrector funciona con inglés, francés, alemán, portugués e español."],"Enable proofreading for the following grammar and style rules: ":["Activar a proba de lectura a a seguinte gramática e regras de estilo: "],"Add a phrase":["Engade unha frase"],"Cheatin' uh?":["Facendo trampas?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}Importaríache dicirnos por que non completaches a conexión con Jetpack nesta {{a}}enquisa de 2 preguntas?{{/a}}{{/p}}{{p}}A conexión con Jetpack é obrigatoria para que funcionen as nosas características gratuítas de tráfico e seguridade.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":["O teu Jetpack xa está conectado."],"You're fueled up and ready to go, Jetpack is now active.":["Vostede está alimentado e listo para funcionar, Jetpack está agora activo."],"You're fueled up and ready to go.":["Vostede está alimentado e listo para funcionar."],"You are currently running a development version of Jetpack.":["Neste momento estás a executar unha versión de desenvolvemento de Jetpack."],"Submit Beta feedback":["Envía as túas suxestións"],"What would you like to see on your Jetpack Dashboard?":["Que che gustaría ver no Escritorio do teu Jetpack?"],"Let us know!":["Háznolo saber!"],"Saving…":["Gardando..."],"Save Settings":["Gardar os axustes"],"Jetpack Stats Icon":["Icona de estatísticas de Jeptpack"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Activa as Estatísticas do sitio{{/a}} para ver estatísticas detalladas, gústame, seguidores, subscritores e máis! {{a1}}Aprende máis{{/a1}}"],"Activate Site Stats":["Activar estatísticas do sitio"],"Security Scanning":["Escaneo de seguridade"],"Site Backups":["Copias de seguridade do sitio"],"Upgrade":["Actualizar"],"ACTIVE":["ACTIVO"],"Your site is on Development Mode":["O teu sitio web está en modo de desenvolvemento"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Unha vez que esteas conectado podes pasar a un plan de pago para conseguir seguridade de primeiro nivel, ferramentas de protección contra o spam e soporte prioritario."],"View your spam stats":["Ver as túas estatísticas de spam"],"View your security dashboard":["Ver o teu escritorio de seguridade"],"The site is in Development Mode, so you can not connect to WordPress.com.":["O sitio está no modo de desenvolvemento, así que non podes conectarche a WordPress.com."],"Link your account to WordPress.com to get the most out of Jetpack.":["Conecta a túa conta a WordPress.com para conseguir o máximo de Jetpack."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["Para a exploración automática e completa das ameazas de seguridade, por favor {{a}}instala e activa{{/a}} VaultPress."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["Para a exploración automática e completa das ameazas de seguridade, por favor {{a}}actualiza a túa conta{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetapck está a bloquear activamente intentos de acceso maliciosos. Moi pronto se mostrasen datos aquí mesmo!"],"Total malicious attacks blocked on your site.":["Total de ataques maliciosos bloqueados no teu sitio."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Activa Protexer{{/a}} para manter o teu sitio protexido de intentos de acceso malintencionados."],"All plugins are up-to-date. Awesome work!":["Todos os plugins están actualizados. Bo traballo!"],"Jetpack is improving and optimizing your image speed.":["Jeptack está a mellorar e optimizando a velocidade das túas imaxes."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack está a monitorar o teu sitio. Se cremos que o teu sitio está caído, recibirás un correo electrónico."],"Security":["Seguridade"],"Performance":["Rendemento"],"Backups":["Copia de seguridade"],"{{a}}View backup details{{/a}}.":["{{a}}Ver detalles da copia de seguridade{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["Para facer automaticamente unha copia de seguridade do teu sitio completo, por favor {{a}}instala e activa{{/a}} VaultPress."],"Unavailable in Dev Mode.":["Non dispoñible no modo desarrollador."],"Spam Protection":["Protección de spam"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["Para unha defensa contra o spam de calidade profesional por favor {{a}}instala Akismet{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["Se queres un protector contra o spas que estea á última, {{a}}activa Akismet{{a}}."],"Invalid key":["Clave non válida"],"Unavailable in Dev Mode":["Non dispoñible en modo desarrollador"],"Activating recommended features…":["Activando funcionalidades recomendadas..."],"Recommended features active.":["Funcionalidades de recomendación activas."],"Recommended features failed to activate. %(error)s":["Non se puideron activar as funcionalidades recomendadas. %(erro)s"],"Activating %(slug)s…":["Activando %(slug)s…"],"%(slug)s has been activated.":["%(slug)s activouse."],"%(slug)s failed to activate. %(error)s":["%(slug)s fallou ao activarse. %(erro)s"],"Deactivating %(slug)s…":["Desactivando %(slug)s…"],"%(slug)s has been deactivated.":["%(slug)s foi desactivado."],"%(slug)s failed to deactivate. %(error)s":["%(slug)s non se desactivaron. %(erro)s"],"Updating %(slug)s settings…":["Actualizando %(slug)s axustes..."],"Updated %(slug)s settings.":["Axustes de %(slug)s actualizados."],"Error updating %(slug)s settings. %(error)s":["Erro actualizando os axustes %(slug)s. %(erro)s"],"Updating %(slug)s address…":["Actualizando a dirección %(slug)s..."],"Regenerated %(slug)s address .":["Rexenerar %(slug)s direccións."],"Error regenerating %(slug)s address. %(error)s":["Erro rexenerando a dirección %(slug). %(erro)s"],"Resetting Jetpack options…":["Resetear opcións de jetpack..."],"Options reset.":["Axustes restablecidos."],"Options failed to reset.":["Fallo ao restablecer as opcións."],"There was an error disconnecting Jetpack. Error: %(error)s":["Ocorreu un erro desconectando Jetpack. Erro: %(erro)s"],"Unlinking from WordPress.com":["Desconectando de WordPress.com"],"Unlinked from WordPress.com.":["Desconectado de WordPress.com."],"Error unlinking from WordPress.com. %(error)s":["Erro ao desconectar de WordPress.com. %(erro)s"],"At A Glance":["Dunha ollada"],"Clichés":["Clichés"],"Dashboard":["Escritorio"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Importaríache dicirnos por que? Simplemente {{a}}contestando dúas sinxelas preguntas{{/a}} axudarasnos a mellorar Jetpack."],"Automattic's Privacy Policy":["Política de privacidade de Automattic"],"WordPress.com Terms of Service":["Termos do servizo de WordPress.com"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":[""],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Activar as actualizacións automáticas de plugins{{/a}}"],"Plugin Updates":["Actualizacións de plugins"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["Para realizar copias de seguridade automáticas de ti sitio completo, por favor {{a}}amplía a túa conta{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["Vaia! As túas claves de Akismet perdéronse ou non son válidas. {{akismetSettings}}Ve á as opcións de Akismet para arranxalo {{/akismetSettings}}"],"No threats found, you're good to go!":["Non se atoparon ameazas.Adiante!"],"{{a}}Contact Support{{/a}}":["{{a}}Contacta con soporte{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}Ver detalles en VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["Uh oh,%(número)s ameaza atopada.","Uh oh,%(número)s ameazas atopadas."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}Activa Monitor{{/a}} para recibir avisos se o teu sitio cae."],"Loading…":["Cargando..."],"Downtime monitoring":["Monitoraxe de caídas"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}Ver máis estatísticas en WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}Ver máis estatísticas{{/button}}"],"All-time comments":["Todos os comentarios"],"All-time views":["Visitas de todo o período"],"%(number)s View":["%(Número)s Ver","%(Número)s Vistas"],"Best overall day":["O mellor día"],"Views today":["Visualizacións hoxe"],"Months":["Meses"],"Weeks":["Semanas"],"Days":["Días"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["Algo pasou ao cargar as estatísticas. Por favor, téntao de novo máis tarde ou {{a}}vai as túas estatísticas agora en WordPress.com{{/a}}"],"Click to view detailed stats.":["Feixe clic para ver estadíticas detalladas."],"Views: %(numberOfViews)s":["Visitas: %(numberOfViews)s"],"Week of %(date)s":["Semana do %(date)s"],"Site Security":["Seguridade do sitio"],"Activate recommended features":[""],"Link to WordPress.com":["Conecta con WordPress.com"],"Unlink me from WordPress.com":["Desconectame de WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["Houbo un problema conectando co teu Jetpack. Por favor feixe click en \"Conecta con WordPress.com\" de novo."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["Tivemos unha incidencia conectando Jetpack; desactiva e volve activar o plugin de Jetpack, e conecta outra vez."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Debes permanecer conectado ao teu blogue de WordPress mentres autorizas Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}O teu Jetpack ten un problema.{{/s}} Lamentamos as molestias. Por favor, téntao máis tarde. Se o problema continúa, por favor contacta co soporte con esta mensaxe: %(erro_key)"],"Disconnecting Jetpack":["Desconectando Jetpack"],"Learn more":["Aprender máis"],"Posts":["Artigos"],"Front page":["Páxina de inicio"],"Upload videos":["Subir vídeos"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Mostra contido relacionado despois das entradas"],"Related":["Relacionado"],"Save":["Gardar"],"Email Address":["Enderezo de correo electrónico"],"Media":["Multimedia"],"Themes":["Temas"],"Site Stats":["Estatísticas do sitio"],"Sharing":["Compartir"],"Testimonials":["Testemuños"],"Cancel":["Cancelar"],"Comments":["Comentarios"],"Ignored Phrases":["Frases ignoradas"],"Use automatically detected language to proofread posts and pages":["Use a deteción automática do idioma para revisar artigos e páxinas"],"Redundant Phrases":["Frases redundantes"],"Phrases to Avoid":["Frases para evitar"],"Passive Voice":["Voz pasiva"],"Jargon":["Xerga"],"Hidden Verbs":["Verbos ocultos"],"Double Negatives":["Dobles negacións"],"Diacritical Marks":["Sinais diacríticos"],"Complex Phrases":["Frases complexas"],"Bias Language":["Linguaxe Bias"],"English Options":["Opcións de Inglés"],"Proofreading":["Revisando"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack non puido contactar con WordPress.com: %(error_key)s. Isto xeralmente significa que algo está configurado incorrectamente no seu servidor."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com está a ter problemas e é incapaz de alimentar o seu Jetpack. Por favor, ténteo de novo máis tarde."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}O seu Jetpack ten un fallo.{{/s}} A conexión desta web con WordPress.com non é posible. Isto xeralmente significa que o sitio non está accesible publicamente (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["O seu sitio web ten que ser accesible ao público para usar Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["Desconectaches Jetpack con éxito"],"Edit":["Editar"],"Connected":["Conectado"],"Activate":["Activar"],"Active":["Activo"],"Search":["Procura"],"Settings":["Preferencias"],"Learn More":["Aprender máis"],"Disconnect Jetpack":["Desconectar Jetpack"],"Test your site’s compatibility with Jetpack.":["Comproba a compatibilidade do teu sitio con Jetpack."],"Settings header\u0004Plugin Autoupdates":[""],"Settings header\u0004Downtime monitoring":[""],"Settings header\u0004Privacy Settings":[""],"Settings header\u0004WordPress.com toolbar":["Barra de ferramentas de WordPress.com"],"Settings header\u0004Composing":["Creando"],"Settings header\u0004Site stats":["Estatísticas do sitio"],"Settings header\u0004Search engine optimization":["Optimización nos motores de procura"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Botóns de compartir"],"Settings header\u0004Publicize connections":["Conexións de Divulgar"],"Settings header\u0004Like buttons":["Botóns gústame"],"Settings header\u0004WordPress.com log in":["Acceso a WordPress.com"],"Settings header\u0004Brute force attack protection":["Protección ante ataques de forza bruta"],"Settings header\u0004Backups and security scanning":["Copias e analisis de seguridade"],"Settings header\u0004Spam filtering":["Filtro de spam"],"Navigation item.\u0004Performance":[""],"Navigation item.\u0004My Plan":[""],"Navigation item.\u0004Dev Tools":["Ferramentas de desenvolvemento"],"Navigation item.\u0004Settings":["Axustes"],"Navigation item.\u0004Discussion":["Debate"],"Navigation item.\u0004Traffic":["Tráfico"],"Navigation item.\u0004Sharing":["Compartir"],"Navigation item.\u0004At A Glance":["Dunha ollada"],"Navigation item.\u0004Plans":["Planes"],"Navigation item.\u0004Writing":["Escritura"],"Navigation item.\u0004Reset Options (dev only)":["Restablecer axustes (só en versións de desenvolvemento)"],"Navigation item.\u0004Security":["Seguridade"],"Navigation item.\u0004At a Glance":["De un vistazo"],"Search term.\u0004terms of service":[""],"Search term.\u0004tos":[""],"Search term.\u0004gdpr":[""],"Search term.\u0004data":[""],"Search term.\u0004tracks":[""],"Search term.\u0004privacy":[""],"Caption for a button to purchase a pro plan.\u0004Upgrade":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Actualizar"],"Button caption\u0004Saving…":["Gardando..."],"Button caption\u0004Save settings":["Guardar ajustes"],"A heading for a block of related posts.\u0004Related":["Relacionado"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Vista previa"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Segue conectado"],"A caption for a button to disconnect.\u0004Disconnect":["Desconectar"],"Short warning message\u0004Updates needed":["Actualizacións necesarias"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Pagado"],"A header for a preview area in the configuration screen.\u0004Preview":["Vista previa"],"Ads header\u0004Ads":["Publicidade"],"Dashboard widget header\u0004Site connection":["Conexión ao sitio"],"Dashboard widget header\u0004Account connection":["Conexión á túa conta"],"A caption for a small button to fix security issues.\u0004Threats":["Ameazas"],"A caption for a small button to fix security issues.\u0004FIX":["SOLUCIONAR"],"Short warning message about new threats found.\u0004Threats found!":["Ameazas atopadas!"],"Short warning message about site having no security scan.\u0004No scanning":["Non se analizou"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Actualizar"],"Short message informing user that the site is secure.\u0004Secure":["Seguro"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Clave non válida"],"Caption for a button to set up a feature.\u0004Set up":["Configurar"],"verb\u0004Copy":["Copiar"],"Shorthand for Privacy Policy.\u0004Privacy":["Privacidade"],"Shorthand for Terms of Service.\u0004Terms":["Términos"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Depurar"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["Comentarios de spam bloqueados."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-he_IL-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-he_IL-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index d540feaa..00000000
--- a/plugins/jetpack/languages/json/jetpack-he_IL-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"he_IL"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":["כעת, יש להפעיל את התכונות המומלצות של JetpacK כדי להפיק את המרב מהאבטחה והביצועים של האתר שלך. {{a}}למידע נוסף על התכונות שכלולות{{/a}}."],"We’re now collecting stats and securing your site. Welcome aboard.":["אנחנו כעת אוספים נתונים סטטיסטיים ומאבטחים את האתר שלך. ברוכים הבאים."],"{{a}}Skip, and explore features individually{{/a}}.":["{{a}}לדלג ולראות כל תכונה בנפרד{{/a}}."],"Jetpack Business Plan":["התוכנית לעסקים של Jetpack"],"Jetpack Premium Plan":["תוכנית הפרימיום של Jetpack"],"Jetpack Personal Plan":["התוכנית האישית של Jetpack"],"Get started with hassle-free design, stats, and performance tools.":["להתחיל עם עיצוב, נתונים סטטיסטיים וכלים לביצועים שפשוט לתפעל."],"Welcome to Jetpack Free":["ברוכים הבאים לתוכנית החינמית של Jetpack"],"Jetpack Free Plan":["התוכנית החינמית של Jetpack"],"Explore Jetpack plans":["עיון בתכוניות של Jetpack"],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":["אפשר לעבוד בראש שקט בזכות גיבויים אוטומטיים ועדיפות בקבלת תמיכה, להגיע לקהל רחב יותר עם כלי SEO מתקדמים, ליצור רווחים מהאתר על ידי פרסומות ולהתאים את האתר שלך אישית עם מעל 200 ערכות פרימיום."],"Jetpack offers so much more":["השירות של Jetpack מציע הרבה מעבר"],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":["נדרשת לך עזרה? ניתן לחפש באתר התמיכה שלנו ולקבל מידע על האתר שלך, החשבון שלך וללמוד כיצד ניתן להפיק את המרב מ-WordPress."],"Support documentation":["עמודי עזרה"],"Chat bubbles representing getting in touch with support":["בועות צ'אט ליצירת קשר עם התמיכה"],"Site Activity":["פעילות האתר"],"Start publicizing now":["להתחיל לפרסם עכשיו"],"Reach a wider audience by automatically sharing your posts on social media.":["להגיע לקהל רחב יותר בזכות שיתוף אוטומטי של הפוסטים שלך ברשתות החברתיות."],"Increase traffic to your site":["להגדיל את התעבורה לאתר שלך"],"Explore free themes":["עיון בערכות עיצוב בחינם"],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":["קבלת גישה ללא הגבלה למאות ערכות עיצוב מקצועיות ולהתאים אישית את האתר שלך למראה שיימצא חן בעיניך."],"A wide variety of themes and tools to customize a site":["מגוון רחב של ערכות עיצוב וכלים להתאמה אישית של האתר"],"Set up your site security":["הגדרת האבטחה של האתר שלך"],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":["למנוע התקפות באמצעות התחברויות ולקבל התראות מיידיות כאשר מתגלה בעיה באתר."],"Site stats showing an evolution in traffic and engagement":["נתונים סטטיסטיים של האתר מציגים את השינויים בתעבורה ובשיתוף הפעולה"],"A hand holding a loupe":["יד שמחזיקה זכוכית מגדלת"],"A chart showing an healthy increase in earnings":["טבלה שמציגה הגדלה חיובית ברווחים"],"Interface showing a chronological list of changes and updates in a site":["ממשק שמציג רשימה כרונולוגית של השינויים והעדכונים באתר"],"A cloud with multiple types of content floating around it":["ענן עם סוגים שונים של תוכן שצפים מסביבו"],"A folder holding real comments":["תיקייה שמאחסנת תגובות אמיתיות"],"Make your site faster":["שיפור המהירות של האתר שלך"],"Load pages faster by serving your images from our global network of servers.":["טעינת עמודים מהירה יותר על ידי שליחת תמונות וקבצים סטטיים מרשת השרתים הגלובלית שלנו."],"A fast and performant website":["אתר מהיר עם ביצועים טובים יותר"],"A secure site, locked and protected by Jetpack":["אתר מאובטח עם נעילה והגנה של Jetpack"],"These settings won't apply to related posts added using the block editor.":["ההגדרות האלו לא יחולו על פוסטים קשורים שנוספו באמצעות עורך הבלוקים."],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["שכפול פוסטים, עמודים, המלצות ותיקי עבודות קיימים. כל התוכן יועתק, כולל מלל, תמונות מרכזיות, הגדרות שיתוף ועוד."],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":["אין אפשרות לחבר את האתר הזה ל-WordPress.com כיוון שהוא מפר את {{a}}תנאי השימוש{{/a}}."],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":["ניתן לחבר את האתר שלך לרשתות החברתיות ולשתף את התוכן שלך בכל החשבונות שלך ברשתות בלחיצה אחת. כאשר מפרסמים פוסט, הוא יופיע בכל החשבונות המוחברים."],"Add Like buttons to your posts and pages":["הוספת לחצני 'לייק' לפוסטים ולעמודים"],"When visitors enjoy your content, let them show it with a Like.":["אם הבקרים יאהבו את התוכן שלך, הם יוכלו להביע את הערכתם עם 'לייק'."],"Explore your Jetpack Professional plan!":["מומלץ לראות מה כוללת התוכנית המקצועית של Jetpack!"],"Explore your Jetpack Premium plan!":["מומלץ לראות מה כוללת תוכנית הפרימיום של Jetpack!"],"Explore your Jetpack Personal plan!":["מומלץ לראות מה כוללת התוכנית האישית של Jetpack!"],"Create account":["יצירת חשבון"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["האתר שלך מופעל על ידי Jetpack אבל כדי לקבל גישה לכל התכונות עליך ליצור חשבון."],"Real-time, automated backups (unlimited storage)":["גיבויים אוטומטיים בזמן אמת (שטח אחסון בלתי מוגבל)"],"Compose content the way you want to and streamline your publishing experience.":["ליצור תוכן כרצונך ולעבוד בתהליך עבודה יעיל לפרסום."],"Add a portfolio item":["להוסיף פריט של תיק עבודות"],"Add a testimonial":["להוסיף המלצה"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["לשפר את הנראות של האתר שלך במנועי החיפוש ולהציג נתונים סטטיסטיים של תעבורה בזמן אמת."],"Create a Jetpack account to use this feature":["יש ליצור חשבון ב-Jetpack כדי להשתמש בתכונה זו"],"Share your content on social media and increase audience engagement.":["לשתף את התוכן שלך ברשתות החברתיות כדי להרחיב את שיתוף הפעולה שלך עם הקהל."],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["השירות של Jetpack יבצע מעקב מתמיד אחר האתר שלך ויודיע לך ברגע שהאתר שלך יושבת."],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["כאשר מתפרסם עדכון לתוסף, מומלץ לעדכן את התוסף באופן מיידי. באפשרותך לבחור אילו תוספים ברצונך לעדכן כדי להבטיח את אבטחת האתר שלך."],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["מומלץ לאבטח את האתר שלך עם האבטחה המתקדמת ביותר ולקבל הודעות לגבי בעיות טכניות."],"Error enabling Site accelerator. %(error)s":["שגיאה בהפעלה של מאיץ האתרים. %(error)s"],"Site accelerator is now speeding up your site!":["מאיץ האתרים כעת מזרז את הביצועים של האתר שלך!"],"Enabling Site accelerator…":["מפעיל את מאיץ האתרים..."],"Error disabling site accelerator. %(error)s":["שגיאה בהשבתת מאיץ האתרים. %(error)s"],"Site accelerator is no longer speeding up your site!":["מאיץ האתרים לא מזרז עוד את הביצועים של האתר שלך!"],"Disabling site accelerator…":["משבית את מאיץ האתרים..."],"Load pages faster, optimize images, and speed up your visitors’ experience.":["טעינת דפים מהירה יותר, תמונות משופרות והאצה של חוויות המשתמש."],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["שילוב של הנתונים הסטטיסטיים מ-WordPress.com עם סקירת הנתונים המעמיקה של Google על המבקרים באתר שלך ועל דפוסי תעבורה."],"High-speed, high-definition video hosting with no third-party ads.":["אחסון וידאו מהיר וברזולוציה גבוהה שמוצג ללא מודעות של צד שלישי."],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["קביעת לוח זמנים מראש לפרסום ציוצים בטוויטר, פוסטים בפייסבוק ופוסטים ברשתות חברתיות אחרות ללא הגבלה."],"Marketing Automation":["אוטומציה של שיווק"],"Activate Jetpack Search":["הפעלת החיפוש של Jetpack"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["החלפה של החיפוש שבברירת מחדל ב-WordPress לחיפוש שמופעל על ידי Elasticsearch, שמאפשר תוצאות וסינונים טובים יותר."],"Start earning":["זה הזמן להתחיל להרוויח"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["השירות של WordAds מאפשר לך להרוויח כסף על ידי הצגת תוכן שיווקי. זה הזמן להתחיל להרוויח."],"Spam is automatically blocked from your comments.":["תגובות זבל נחסמות באופן אוטומטי בתגובות שלך."],"Spam Filtering":["סינון תגובות זבל"],"Browse premium themes":["עיון בערכות פרימיום"],"Access hundreds of beautifully designed premium themes at no extra cost.":["קבלת גישה למאות ערכות פרימיום יפות ללא עלות נוספת."],"Try a premium theme":["ערכת פרימיום לניסיון"],"View settings":["הצגת הגדרות"],"Create a Jetpack account to view your email followers":["עליך ליצור חשבון Jetpack כדי לראות את העוקבים באימייל"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["כדאי לפתוח את האתר שלך לפרסום תגובות ולהזמין את המנויים לקבל התראות על תוכן חדש שמועלה לאתר."],"Manage security settings":["ניהול הגדרות האבטחה"],"Built-in Performance":["ביצועים מובנים"],"Jetpack is ready for the new WordPress editor":["השירות של Jetpack מוכן לעורך החדש של WordPress"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["היום, אנחנו שמחים להציג את האוסף הראשון של בלוקים שמותאמים לשימוש ב-Jetpack ושנוצרו במיוחד לחוויית השימוש עם העורך החדש: כפתור תשלומים פשוטים, טופס, מפה ו-Markdown."],"Build your Jetpack site with blocks":["בניית האתר שלך ב-Jetpack עם בלוקים"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["עורך חדש? כן! {{a}}מידע נוסף{{/a}}."],"The features you rely on, adapted for the new WordPress editor.":["התכונות שעוזרות לך מותאמות כעת לעורך החדש של WordPress."],"Take me to the new editor":["אני רוצה לעבור לעורך החדש"],"Testing Jetpack Connection":[""],"There was an error testing Jetpack. Error: %(error)s":["אירעה שגיאה בעת הבדיקה של Jetpack. שגיאה: %(error)s"],"New in Jetpack!":["חדש ב-Jetpack!"],"Speed up static file load times":["שיפור במהירות הטעינה של קבצים סטטיים"],"Speed up image load times":["שיפור במהירות הטעינה של תמונות"],"Enable site accelerator":["הפעלה של מאיץ האתרים"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["כעת ניתן לטעון תמונות מהר יותר עם מאיץ האתרים של JetpacK כדי לשפר את תצוגת התמונות ולשלוח את התמונות והקבצים הסטטיים (כגון CSS ו-JavaScript) מהרשת הגלובלית של השרתים שלנו."],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["ניתן להוסיף שכבה של אבטחה לאתר שלך באמצעות ההתחברות ל-WordPress.com והפעלה של האימות המאובטח. אם הפעלת את האפשרות הזו במספר אתרים שברשותך, אפשר להתחבר לכל אחד מהאתרים עם אותם פרטי הכניסה."],"View your site activity":["צפייה בפעילות באתר שלך"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["צפייה ברשימה כרונולוגית של כל השינויים והעדכונים באתר שלך בצורה מאורגנת שקלה לקריאה."],"Manually Verify ":["אימות ידני "],"Verify with Google":["אימות באמצעות Google"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["השירות של Google ישלח אליך אימייל לגבי אירועים שונים שקורים באתר שלך, כולל סימנים שהאתר שלך{{a1}}נפרץ{{/a1}} או בעיות {{a2}}בסריקה או בהוספה לאינדקס{{/a2}} של האתר שלך."],"or":["או"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["מעקב אחרי התעבורה והביצועים של האתר שלך מ-{{a}}Google Search Console{{/a}}."],"Your site is verified with Google":["האתר מאומת באמצעות Google"],"Site failed to verify: %(error)s":["אימות האתר נכשל: %(error)s"],"Verifying...":["מאמת..."],"Add faster, more advanced searching to your site with Jetpack Professional.":["באפשרותך להוסיף אפשרויות מתקדמות לחיפוש באתר שלך עם התוכנית לעסקים של התוכנית המקצועית של Jetpack."],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["החלפה בין החיפוש המובנה של WordPress לחיפוש של Jetpack, לחוויית החיפוש המשופרת"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["החיפוש של Jetpack מחליף את החיפוש המובנה בחיפוש מהיר, יעיל, שניתן להתאמה ושמציג תוצאות רלוונטיות יותר. האחסון החדש נמצא באחסון הענן של WordPress.com. התוצאה: המשתמשים שלך יכולים למצוא את התוכן שהם רוצים מהר יותר."],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["השירות המובנה של WordPress מתאים לאתרים שלא כוללים כמות רבה של תוכן. ככל שהאתר גודל, החיפוש נעשה איטי ומציג תוצאות רלוונטיות פחות."],"Jetpack Search supports many customizations.":["החיפוש של Jetpack תומך באפשרויות התאמה רבות."],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["ניתן להחליף את החיפוש המובנה בחיפוש מהיר, יעיל, שניתן להתאמה ושמציג תוצאות רלוונטיות יותר. {{a}}האחסון החדש נמצא באחסון הענן של WordPress.com{{/a}}."],"Site is verified":["האתר מאומת"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}כדי ליצור אתר יפה שנראה ועובד בדיוק כפי שרצית, התוכנית המקצועית של Jetpack מספקת לך גישה בלתי מוגבלת למעל 200 ערכות עיצוב פרימיום של WordPress.{{/p}}{{p}}לתוכנית המקצועית של Jetpack יש יתרונות רבים נוספים מעבר למציאת העיצוב המושלם. העורך גם מאפשר לך לעבוד בשלווה, בידיעה שצוות המומחים הגלובלי שלנו עומד לרשותך וישמח להעניק תמיכה מועדפת אם יהיה צורך.{{/p}}"],"Spam filtering and priority support.":["סינון תגובות זבל ותמיכה מועדפת."],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["כאשר המודעות מופעלות, השירות של Jetpack יוצר באופן אוטומטי קובצי ads.txt שמותאמים לאתר שלך."],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["השירות של Jetpack יוצר באופן אוטומטי קובצי {{link}}ads.txt{{/link}} שמותאמים לאתר שלך. אם יש צורך להוסיף הזנות עבור רשתות אחרות, יש להוסיף אותן למטה, הזנה אחת בשורה."],"Custom ads.txt entries":["הזנות מותאמות של ads.txt"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}כדי ליצור אתר יפה שנראה ועובד בדיוק כפי שרצית, התוכנית המקצועית של Jetpack מספקת לך גישה בלתי מוגבלת למעל 200 ערכות עיצוב פרימיום של WordPress.{{/p}}{{p}}לתוכנית המקצועית של Jetpack יש יתרונות רבים נוספים מעבר למציאת העיצוב המושלם. ויש יתרונות נוספים מעבר לעבודה בראש שקט: בזכות גיבויים בזמן אמת, סריקות אוטומטית לאיתור תוכנות זדוניות ותמיכה מועדפת מצוות המומחים הגלובלי שלנו, האתר שלך תמיד בטוח ומאובטח.{{/p}}"],"Introducing Premium Themes":["שמחים להציג את ערכות הפרימיום"]," Premium Themes":[" ערכות פרימיום"],"Privacy information":["מידע על פרטיות"],"Enable Lazy Loading for images":["הפעלה של טעינת תמונות עצלה"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["טעינת תמונות עצלה תשפר את המהירות של האתר שלך ותיצור חוויית צפייה חלקה יותר. התמונות נטענות רק כאשר המבקרים גוללים את המסך למטה, במקום טעינת כל התמונות במקביל."],"Performance & speed":["ביצועים ומהירות"],"Enable high-speed, ad-free video player":["הפעלה של נגן ווידאו מהיר ונטול פרסומות"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["התוכן שמפורסם באתר יכול להיות מושך יותר בעזרת סרטוני וידאו ברזולוציה גבוהה. בעזרת הווידאו של Jetpack, אפשר להתאים אישית את נגן המדיה ולהציג למבקרים שלך סרטוני וידאו מהירים ונטולי פרסומות או מיתוג. סרטוני וידאו מאוחסנים בשרתי WordPress.com ולא מנצלות את שטח האחסון של התוכנית שלך!"],"Video":["וידאו"],"Carousel color scheme":["הגלגל של ערכת הצבעים"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["נתוני Exif מציגים לצופים פרטים טכניים נוספים אודות תמונות, כגון מרחק מהמוקד, פתח ו-ISO."],"Show photo Exif metadata in carousel (when available)":["הצגה בגלגל של מטא-נתונים מסוג Exif לתמונה (כאשר זמין)"],"Display images in a full-screen carousel gallery":["הצגת תמונות בגלריית גלגל במסך מלא"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["יצירת מצגת תמונות בגלגל במסך מלא להצגת התמונות שבפוסטים ובעמודים שלך. גלריות הגלגל ידידותיות להצגה במכשירים ניידים ומעודדות את המבקרים להסתכל על התמונות שלך."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["סרגל הכלים של WordPress.com מחליף את סרגל הכלים של מנהל המערכת שמוגדר כברירת מחדל ומשפר את החוויה שלך עם WordPress. הסרגל מאפשר גישה בלחיצה אחת לניהול כל האתרים שלך, עדכון של הפרופיל של ב-WordPress.com, צפייה בהודעות וקריאת עדכונים לאתרים שמסומנים במעקב ב-Reader."],"Portfolios shortcode: [portfolio]":["פקודת מקרו לתיקי עבודות: [תיק עבודות]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["שימוש {{portfolioLink}}בתיקי עבודות{{/portfolioLink}} באתר שלך כדי להציג לראווה את העבודה הטובה ביותר שלך. אם ערכת העיצוב שלך לא תומכת בתיקי העבודות של Jetpack, אפשר עדיין להשתמש בפקודת מקרו פשוטה כדי להציג אותם באתר."],"Testimonials shortcode: [testimonials]":["פקודות מקרו להמלצות: [המלצות]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["הוספת {{testimonialLink}}המלצות{{/testimonialLink}} לאתר האינטרנט שלך כדי למשוך לקוחות חדשים. אם ערכת העיצוב שלך לא תומכת בהמלצות של Jetpack, אפשר עדיין להשתמש בפקודת מקרו פשוטה כדי להציג אותם באתר."],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["למנועי החיפוש אין גישה לאתר שלך כעת. אם ברצונך לאפשר גישה לאתר שלך, יש לבדוק את {{a}}הגדרות הקריאה{{/a}} ולהפעיל את האפשרות 'תצוגה במנועי החיפוש'."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["חדשות טובות: השירות של Jetpack שולח באופן אוטומטי את מפת האתר שלך לכל מנועי החיפוש הגדולים לצורך יצירה של אינדקס."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["מפות אתרים הם קבצים שבהם מנועי החיפוש, כגון Google או Bing, משתמשים כדי ליצור אינדקס של האתר שלך. בעזרתן ניתן גם לשפר את הדירוג של האתר שלך בתוצאות החיפוש. בהפעלת התכונה הזו, השירות של Jetpack יצור את מפות האתרים עבורך ויעדכן אותן אוטומטית כאשר התוכן באתר משתנה."],"Configure related posts in the Customizer":["הגדרת הפוסטים הקשורים בכלי ההתאמה האישית"],"Highlight related content with a heading":["הדגשה של תוכן קשור באמצעות כותרת"],"View security scan details":["הצגת פרטים לגבי סריקות אבטחה"],"View backup history":["הצגה של היסטוריית הגיבויים"],"Show a thumbnail image where available":["הצגה של תמונה ממוזערת כשאפשר"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["למידע נוסף על אופן השימוש של תכונות Jetpack מסוימות בנתונים ובמעקב, יש לעיין {{privacyCenterLink}}במרכז הפרטיות{{/privacyCenterLink}} שלנו."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["אנחנו משתמשים בכלים למעקב, כולל כלים של צד שלישי. {{cookiePolicyLink}}אפשר לקרוא פרטים על אלו{{/cookiePolicyLink}} על אלו ועל אופן השליטה בהם."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["המידע הזה עוזר לנו לשפר את המוצרים שלנו, להציג שיווק רלוונטי יותר, לספק לך חוויית שימוש אישית ב-WordPress.com ועוד, כפי שמפורט {{pp}}במדיניות הפרטיות{{/pp}} שלנו."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["שיתוף של פרטי השימוש שלך בשירותים השונים עם כלי הניתוח שלנו לאחר ההתחברות לחשבון שלך ב-WordPress.com. {{cookiePolicyLink}}מידע נוסף{{/cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["תכונה זו מנוהלת על ידי מנהל מערכת של האתר. {{link}}מידע נוסף{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["תכונה זו הושבתה על ידי מנהל מערכת של האתר. {{link}}מידע נוסף{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["תכונה זו הופעלה על ידי מנהל מערכת של האתר. {{link}}מידע נוסף{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["המודול %(moduleName)s הושבת על ידי מנהל המערכת של האתר. {{link}}מידע נוסף{{/link}}."],"This feature has been disabled by a site administrator.":["תכונה זו הושבתה על ידי מנהל מערכת של האתר."],"%(moduleName)s has been disabled by a site administrator.":["המודול %(moduleName)s הושבת על ידי מנהל המערכת של האתר."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["אפשר להוסיף מודעות באמצעות וידג'ט פרסומות. {{link}}מומלץ לנסות כעת!{{/link}}"],"Configure your notification settings":["שינוי הגדרות של הודעות כעת"],"Monitor your site's downtime":["מעקב אחרי זמן הפעולה התקינה של האתר שלך"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["החיפוש של Jetpack הוא חלופה עוצמתית ליכולות החיפוש המוטמעות ב-WordPress."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["הקבצים באתר שלך נסרקים בקביעות כדי לגלות שינויים לא מורשים או חשודים, שעלולים לסכן את האבטחה והנתונים שלך."],"Plugin needs updating.":["יש לעדכן את התוסף.","יש לעדכן את התוספים."],"%(number)s":["%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["העדכונים לתוספים של Jetpack מאפשרים לך לבחור אילו תוספים יש לעדכן באופן אוטומטי."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack ימטב את התמונות שלך ויציג אותן ממיקום השרת הקרוב ביותר למבקרים שלך. שימוש ברשת שליחת התוכן העולמית שלנו ישפר את מהירות הטעינה של האתר שלך."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":[""],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["הגיבויים של Jetpack מאפשרים לך לשחזר בקלות את האתר מנקודת מסוימת בציר בזמן או להוריד גיבוי מנקודה זו."],"Akismet checks your comments and contact form submissions against our global database of spam.":["השירות של Akismet בודק את התגובות ואת הטפסים ליצירת קשר שנשלחו מול בסיס-הנתונים הגלובלי שלנו לאיתור תגובות זבל."],"Privacy Information":["מידע על פרטיות"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["באמצעות VideoPress אפשר להעלות סרטוני וידאו מהמחשב שלך ולאחסן אותם ב-WordPress.com במקום בשרתים של חברת האחסון. אפשר להזין את אלו לאתר Jetpack שבאחסון עצמי שלך. "],"Add the Search (Jetpack) widget to your sidebar":["הוספה של וידג'ט החיפוש (של Jetpack) לסרגל הצדי שלך"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["המבקרים באתר שלך יכולים ליהנות מחוויית חיפוש מעולה באמצעות סינון ומיון של תוצאות חיפוש מהירות."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["פעולה זו מפעילה ערכת עיצוב קלה ומותאמת למכשירים ניידים שתופיע במכשירים של המבקרים באתר שלך."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["פעולה זו מאפשרת טעינה אוטומטית של קבוצת הפוסטים הבאה כאשר הקוראים מגיעים לתחתית העמוד."],"Allows you to publish new posts by sending an email to a special address.":["פעולה זו מאפשרת לך לפרסם את הפוסטים החדשים שלך באמצעות שליחה באימייל לכתובת מסוימת."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["פעולה זו מאפשרת לך לכתוב תוכן עם קישורים, רשימות וסגנונות נוספים באמצעות תחביר של Markdown."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["פעולה זו מאפשרת לך לבדוק טעויות כתיב או דקדוק, מילים שגויות וסגנון במהלך כתיבת התוכן."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["פעולה זו מאפשרת לך להוסיף את התגיות הנסתרות שנדרשות לאימות האתר שלך ב-WordPress מול שירותים שונים."],"Displays information on your site activity, including visitors and popular posts or pages.":["פעולה זו מציגה מידע אודות הפעילות באתר שלך, כולל נתונים על מבקרים ופוסטים או עמודים פופולריים."],"Allows you to optimize your site and its content for better results in search engines.":["פעולה זו מאפשרת לך למטב את האתר והתוכן שלך לקבלת תוצאות טובות יותר במנועי החיפוש."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["פעולה זו משלב את האתר שלך ב-WordPress עם Google Analytics, פלטפורמה שמציעה לך תובנות לגבי התעבורה, המבקרים והשיחות שלך."],"Displays high-quality ads on your site that allow you to earn income.":["פעולה זו מציגה מודעות איכותיות באתר שלך, באמצעותן אפשר להפיק רווחים מהאתר."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["פעולה זו מוסיפה כפתורי שיתוף לתוכן שלך, באמצעותם מבקרים יכולים לשתף את התוכן שלך ברשתות החברתיות."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["פעולה זו מאפשרת לך לשתף באופן אוטומטי את התוכן החדש ביותר שלך ברשתות החברתיות, כולל פייסבוק וטוויטר."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["פעולה זו מוסיפה כפתור 'לייק' לתוכן שלך, באמצעותו מבקרים יכולים להביע הערכה והוקרה."],"Allows registered users to log in to your site with their WordPress.com accounts.":["פעולה זו מאפשרת למשתמשים להיכנס לאתר שלך באמצעות החשבון שלהם ב-WordPress.com."],"Protects your site from traditional and distributed brute force login attacks.":["פעולה זו מגנה על האתר שלך מפני ניסיונות מבוזרים או מסורתיים של התחברות על ידי ניחוש סיסמה."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["פעולה זו מאפשרת לך לגבות את האתר שלך בשרתי WordPress.com הגלובליים. באמצעות גיבוי זה, אפשר לשחזר את התוכן שלך אם אירעה שגיאה או במקרה חירום."],"Removes spam from comments and contact forms.":["פעולה זו מסירה תגובות זבל מהתגובות ומהטפסים ליצירת קשר."],"We are committed to your privacy and security. ":["אנחנו מחויבים לפרטיות ולאבטחה שלך. "],"View all Jetpack plans":["הצגת כל התוכניות של Jetpack"],"Manage your plan":["ניהול התוכנית שלך"],"Your Plan":["התוכנית שלך"],"You’re currently on Jetpack %(plan)s.":["התוכנית הנוכחית שלך היא %(plan)s של Jetpack."],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["הפעולה מאפשרת לקוראים להירשם לעדכונים לפוסטים ולתגובות שלך ולקבל הודעות באימייל על תוכן חדש."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["הפעולה מחליפה את טופס התגובות הרגיל של WordPress עם מערכת התגובות החדשה שכוללת אפשרויות להתחברות לחשבון ברשת חברתית."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}הפעלה{{/a}} כדי להחליף בין החיפוש המובנה של WordPress לחיפוש של Jetpack, לחוויית החיפוש המשופרת."],"Add Search (Jetpack) Widget":["פעולה זו מוסיפה את וידג'ט החיפוש (של Jetpack)"],"Jetpack Search is powering search on your site.":["החיפוש באתר שלך מופעל על ידי החיפוש של Jetpack."],"Manage your plugins":["ניהול התוספים שלך"],"Moderate comments":["אישור תגובות"],"Error updating privacy settings. %(error)s":["שגיאה בעדכון הגדרות הפרטיות. %(error)s"],"Updated privacy settings.":["הגדרות הפרטיות עודכנו."],"Updating privacy settings…":["מעדכן את הגדרות הפרטיות..."],"Add Jetpack Search Widget":["הוספת וידג'ט החיפוש של Jetpack"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["הוספה של וידג'ט החיפוש של Jetpack לסרגל הצדי שלך כדי לאפשר הגדרה של החיפוש והמסננים."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["חבילה עם אבטחה מלאה, כלים לאוטומציה של השיווק והפקת הרווחים, אחסון וידאו ללא הגבלה, ערכות עיצוב ללא הגבלה, חיפוש מתקדם ותמיכה מועדפת."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["חבילה עם אבטחה מלאה, כלים לאוטומציה של השיווק והפקת הרווחים, אחסון וידאו ללא הגבלה ותמיכה מועדפת."],"Daily backups, spam filtering, and priority support.":["גיבויים יומיים, סינון תגובות זבל ותמיכה מועדפת."],"Always-on Security":["אבטחה מתמדת"],"Activate video hosting":[""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["גיבוי בזמן אמת של כל הנתונים באתר עם שטח בלתי מוגבל, שחזור בלחיצה אחת, סריקות אבטחה אוטומטיות ועדיפות בקבלת תמיכה"],"Design the perfect website":["תכננו את האתר המושלם"],"Set up Jetpack":["הגדרת Jetpack"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["גיבוי בזמן אמת של כול הנתונים באתר עם שטח אחסון בלתי מוגבל, שחזורים בלחיצה אחת וסריקות אבטחה אוטומטיות."],"Jetpack Search":["חיפוש Jetpack"],"Jetpack version %(version)s":["גרסת Jetpack %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["האתר שלך מגובה בזמן אמת ומבוצעות בו סריקות לאיתור איומי אבטחה באופן קבוע."],"Daily backup of all your site data with unlimited space and one-click restores":["גיבוי יומי של כל הנתונים באתר עם שטח בלתי מוגבל ושחזור בלחיצה אחת"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["גיבוי בזמן אמת של כל הנתונים באתר עם שטח בלתי מוגבל, שחזור בלחיצה אחת, סריקות אבטחה אוטומטיות, טיפול באיומים בלחיצה אחת."],"View your security activity":["הצגה של פעילות האבטחה שלך"]," (powered by VaultPress).":[" (מופעל על ידי VaultPress)."],"Customize Search Widget":["התאמה אישית של וידג'ט החיפוש"],"Please correct the issue below and try again.":["כדאי לתקן את הבעיה שצוינה להלן ולנסות שוב.","כדאי לתקן את הבעיות שצוינו להלן ולנסות שוב."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["אנחנו מוודאים שהאתר שלך תמיד יהיה נקי מאיומי אבטחה. נודיע לך אם יימצא איום אבטחה באתר."],"Your site is being backed up in real-time.":["האתר שלכם גובה בזמן אמת."],"Jetpack version":["גרסת ג'טפק"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}הצגת הפעילות של האתר שלך{{/a}} בפיד יחיד."],"Activity":["פעילות"],"Confirm each new phrase you add by pressing enter.":["יש לאשר כל ביטוי חדש שהוספת באמצעות לחיצה על Enter."],"{{a}}View details{{/a}}":["{{a}}הצגת פרטים{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["תודה שבחרת בתוכנית המקצועית של Jetpack. כעת, השירות של Jetpack מגבה את התוכן שלך בזמן אמת, מוסיף את התוכן לאינדקס לצורך חיפוש, סורק את האתר לאיתור איומי אבטחה ומאפשר לך גישה לערכות פרימיום."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["בזכות התכנית המקצועית של Jetpack, אפשר ליצור את האתר המושלם עם מעל ל-300 ערכות עיצוב של WordPress שעוצבו על ידי אנשי מקצוע, כולל יותר ממאה ערכות פרימיום. באפשרותך להתאים אישית את התוכן שלך עם מגוון וידג'טים או להוסיף סרטוני וידאו ללא הגבלה לפוסטים ולעמודים שלך -- התוכן יוצר ללא פרסומות או סמני מים."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["קל להגדיל את הקהל שעוקב אחריך בעזרת התוכנית המקצועית - בזכות אפשרויות לשיתוף תוכן, לתזמון, לכלי SEO ולמינויים מובנים. באפשרותך להרוויח כסף מאתר שלך בעזרת כפתור התשלומים הפשוטים ופרסומות שמשתלבות בפריסת העמוד ולעקוב אחרי ההצלחה שלך בעזרת שילוב עם הפילוח של Google Analytics."],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["התכנית של Jetpack מעניק לך את כל שנדרש לאבטחת העבודה הקשה שלך, כולל גיבויים לפי דרישה וסריקות לאיתור תוכנות זדוניות, כמו גם שחזור בלחיצה אחת ומציאת פתרונות. האתר שלך מאובטח לגמרי מתגובות זבל, קודים זדוניים וניסיונות כניסה באמצעות ניחוש סיסמה."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["ניתן לפתוח את התכנית המקצועית של Jetpack כדי להתרשם מכל ההטבות שהתוכנית החדשה שלך מציעה."],"Install premium themes":["התקנת ערכות עיצוב פרימיום"],"Review SEO features":["עברו על אפשרויות ה- SEO"],"Welcome Professional":["ברוכים הבאים לתוכנית המקצועית"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["תודה שבחרת בתוכנית הפרימיום של Jetpack. כעת, השירות של Jetpack מגבה את האתר שלך, סורק אותו לאיתור איומי אבטחה ומאפשר לך לייצר רווחים."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["בעזרת תוכנית הפרימיום של Jetpack, אפשר ליצור את האתר המושלם לכל מטרה. באפשרותך להתאים אישית את התצוגה של האתר שלך עם ערכת עיצוב מתוך מבחר של מעל ל-200 ערכות עיצוב בחינם או לשפר את התוכן שלך עם סרטוני וידאו בנפח של עד 13‎ GB, שמאוחסנים ללא פרסומות או סמני מים."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["באמצעות כלי השיתוף העוצמתיים של Jetpack, אפשר לשתף את הפוסטים החדשים ביותר שלך באופן אוטומטי ברשתות החברתיות או לתזמן מתי התוכן ישותף שוב, בכל תאריך שהוא. בנוסף להרחבת קהל העוקבים שלך, גם העסק שלך יכול לצמוח בזכות כלים כמו כפתורי תשלומים ופרסומות."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["ניתן לפתוח את תוכנית הפרימיום של Jetpack כדי להתרשם מכל ההטבות שהתוכנית החדשה שלך מציעה."],"Monetize your site with ads":["הפקת רווחים מהאתר שלך באמצעות פרסומות"],"Welcome Premium":["ברוכים הבאים לתוכנית הפרימיום"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["תודה שבחרת בתכנית האישית של Jetpack. כעת, השירות של Jetpack מגבה את האתר שלך וסורק אותו לאיתור איומי אבטחה."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["בתכנית האישית של Jetpack, יש לך גישה ליותר ממאה ערכות עיצוב חינמיות של WordPress, שעוצבו על ידי אנשי מקצוע. מומלץ לבחור את ערכת העיצוב המתאימה ביותר עבור האתר שלך ולהתאים אישית את הצבעים והתמונות או להוסיף מגוון של וידג'טים."],"Got it":[""],"Welcome personal":["ברוכים הבאים לתוכנית האישית"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["לחיצה על הכפתור למטה מהווה את הסכמתך {{tosLink}}לתנאי השימוש{{/tosLink}} שלנו {{shareDetailsLink}}ולשיתוף המידע{{/shareDetailsLink}} עם WordPress.com."],"Jetpack Stats People":["אנשים מסתכלים על נתונים סטטיסטיים של Jetpack"],"Hello there! Your stats have been activated.":["שלום! הנתונים הסטטיסטיים שלך הופעלו."],"Just give us a little time to collect data so we can display it for you here.":["איסוף הנתונים יימשך זמן מה ולאחר מכן, נוכל להציג לך את המידע כאן."],"Okay, got it!":["בסדר, הבנתי!"],"Display ads below posts on":["להציג פרסומות מתחת לפוסטים ב-"],"Additional ad placements":["מיקום פרסומות נוספות"],"Top of each page":["בחלקו העליון של כל עמוד"],"Second ad below post":["פרסומת שנייה מתחת לפוסט"],"Archives":["ארכיונים"],"Explore Professional":["עיון בתוכנית Professional"],"Compare All Plans":["השוואה בין כל התוכניות"],"Person with laptop":["אדם עם מחשב נייד"],"Your Jetpack site is ready to go!":["האתר שלך ב-Jetpack מוכן לעבודה!"],"Stars":["כוכבים"],"Jupiter":["צדק"],"Welcome to Jetpack Personal":["ברוכים הבאים ל-Jetpack Personal"],"Welcome to Jetpack Premium":["ברוכים הבאים ל-Jetpack Premium"],"Welcome to Jetpack Professional":["ברוכים הבאים ל-Jetpack Professional"],"Schedule posts":[""],"Activate Publicize":["הפעלת השיתוף האוטומטי"],"Your site is backed up.":["האתר שלך מגובה."],"Image Performance":["ביצועי תמונה"],"Get WordPress Apps for every device":["קבלת אפליקציות WordPress עבור כל מכשיר"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["לנהל את כל האתרים שלך מלוח בקרה יחיד: פרסום תוכן, מעקב אחר נתונים סטטיסטיים, אישור תגובות ועוד הרבה יותר מכל מקום בעולם."],"I already use this app.":["אני כבר עושה שימוש באפליקציה."],"Create address":["יצירת כתובת"],"Priority support":["עדיפות בקבלת תמיכה"],"Add sharing buttons to your posts":["הוספה של לחצי שיתוף לפוסטים שלך"],"Automatically share your posts to social networks":["שיתוף אוטומטי של הפוסטים שלך ברשתות החברתיות"],"Updating settings…":["מעדכן הגדרות…"],"Updating Post by Email address…":["עדכון של פוסט לפי כתובת אימייל..."],"Your paid plan gives you access to prioritized Jetpack support.":["התוכנית שלך בתשלום מאפשרת לך גישה לתמיכה מועדפת של Jetpack."],"You have paid for backups but they're not yet active.":["שילמת על גיבויים אבל הם עדיין לא פעילים."],"You have paid for backups and security scanning but they’re not yet active.":["שילמת על גיבויים וסריקות אבטחה אבל הם עדיין לא פעילים."],"Click \"Set Up\" to finish installation.":["יש ללחוץ על 'הגדרות' כדי להשלים את ההתקנה."],"Checking site status…":["בדיקת סטטוס אתר..."],"Pages":["עמודים"],"We're here to help":["נשמח לעזור"],"Jetpack comes with free, basic support for all users.":["שירות Jetpack כולל תמיכה בסיסית לכל המשתמשים ללא תשלום."],"Ask a question":["יש לי שאלה"],"Search our support site":["חיפוש באתר התמיכה"],"Get a faster resolution to your support questions.":["קבלת טיפול מהיר יותר בשאלות שלך לתמיכה."],"Host fast, high-quality, ad-free video.":["אירוח מהיר, באיכות גבוהה ונטול פרסומות של קובצי וידאו."],"Generate income with high-quality ads.":["יצירת הכנסה באמצעות פרסומות באיכות גבוהה."],"Real-time site backups and automatic threat resolution.":["גיבויים של האתר בזמן אמת וטיפול אוטומטי באיומים."],"Protect against data loss, malware, and malicious attacks.":["הגנה מפני אובדן נתונים, תוכנות זדוניות או מתקפות זדוניות."],"Integrate easily with Google Analytics.":["שילוב קל עם Google Analytics."],"Help your content get found and shared with SEO tools.":["בעזרת כלי SEO, ניתן למצוא את התוכן שלך בקלות ולשתף אותו."],"Protect your site from spam.":["הגנה על האתר שלך מפני תגובות זבל."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["אתר זה לא מחובר ל-WordPress.com. יש ליצור קשר עם מנהל מערכת האתר כדי להתחבר."],"Spam filtering":["סינון תגובת זבל"],"Daily, automated malware scanning":["סריקה אוטומטית לאיתור תוכנות זדוניות בכל יום"],"Daily, automated backups (unlimited storage)":["גיבויים יומיים אוטומטיים (שטח אחסון בלתי מוגבל)"],"Daily, automated malware scanning with automated resolution":["סריקה אוטומטית לאיתור תוכנות זדוניות בכל יום עם טיפול אוטומטי באיומים"],"Unlimited, high-speed video hosting":[""],"SEO preview tools":["כלים לתצוגה מקדימה של SEO"],"Site stats, related content, and sharing tools":["נתונים סטטיסטיים של האתר, תוכן קשור וכלים לשיתוף"],"Brute force attack protection and downtime monitoring":["הגנה מפני התקפות של ניחוש סיסמה ומעקב אחר זמינות השרת"],"Unlimited, high-speed image hosting":["אחסון תמונות מהיר וללא הגבלת שטח"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["בביצוע התנתקות %(siteName)s מ-WordPress.com, תאבד לך הגישה לאפשרויות הבאות:"],"Read more about Jetpack benefits":["מידע נוסף על ההטבות של Jetpack"],"An Automattic Airline":["שירות מבית Automattic"],"Manage site connection":["ניהול חיבור האתר"],"Connect your account to WordPress.com to view more stats":["כדי להציג עוד נתונים סטטיסטיים, יש לחבר את החשבון אל WordPress.com"],"Theme enhancements":["שיפור ערכת העיצוב"],"Load more posts using the default theme behavior":["טעינת פוסטים נוספים באמצעות קביעת ברירת מחדל לערכת עיצוב"],"Load more posts in page with a button":["טעינת פוסטים נוספים בעמוד באמצעות לחצן"],"Load more posts as the reader scrolls down":["טעינת פוסטים נוספים בזמן גלילה של הקורא"],"Theme support required.":["נדרשת תמיכה בערכת העיצוב."],"Learn more about adding support for Infinite Scroll to your theme.":["קבלת מידע נוסף לגבי הוספת תמיכה בגלילה אינסופית בערכת העיצוב שלך."],"Use excerpts instead of full posts on front page and archive pages":["שימוש בתקצירים במקום בפוסטים מלאים בעמוד הראשי ובעמודי הארכיון"],"Show featured images":["הצג תמונות מרכזיות"],"Enable the WordPress.com toolbar":["הפעלת סרגל הכלים של WordPress.com"],"Writing tools available to you will be shown here when an administrator enables them.":["כלי הכתיבה שזמינים לך יוצגו כאן כאשר מנהל המערכת יפעיל אותם."],"Portfolios":["תיקי עבודות"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["לתשומת לבך, אין חובה {{b}}לאמת את האתר באמצעות שירותים אלה{{/b}} כדי לאפשר למנועי חיפוש להוסיף את האתר שלך לאינדקס. כדי להשתמש בכלים מתקדמים של מנוע החיפוש ולצורך אימות האתר באמצעות שירות מסוים, יש להדביק את קוד תגית ה-HTML להלן. יש לקרוא את {{support}}ההוראות המלאות{{/support}} במקרה של בעיה. שירותי אימות נתמכים: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, ו-{{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["יצירת מפת אתר בפורמט XML"],"Collecting valuable traffic stats and insights":["איסוף נתונים סטטיסטיים יקרי ערך על תנועה ותובנות חשובות"],"The image helps collect stats, but should work when hidden.":["התמונה עוזרת לאסוף נתונים סטטיסטיים, אולם האיסוף אמור לפעול כשהוא מוסתר."],"Count logged in page views from":["ספירה של צפיות בעמוד בזמן מצב מחובר מאת"],"Allow stats reports to be viewed by":["מאפשר הצגת דוחות של נתונים סטטיסטיים על ידי"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["אפשר להתאים את ההגדרות אם דרושה לך שליטה מתקדמת. לרשותך מידע נוסף לגבי כל מה שאפשר לעשות כדי {{a}}למטב את ה-SEO של האתר{{/a}}."],"Configure your SEO settings":["יש לקבוע את הגדרות ה-SEO"],"In \"Upgrade\"":["בתוך 'שדרוג'"],"Configure your Google Analytics settings":["קביעת התצורה של ההגדרות האישיות של Google Analytics"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["הצגה של פרסומות במאמר הראשון בעמוד הבית שלך או בסופו של כל עמוד או כל פוסט. מיקום פרסומות נוספות בחלק העליון של האתר שלך ובכל אזור וידג'ט כדי להגדיל רווחים."],"Enable ads and display an ad below each post":["הפעלת פרסומות ותצוגה של פרסומת בתחתית כל פוסט"],"Configure your sharing buttons":["קביעת תצורה של לחצי השיתוף שלך"],"Connect your social media accounts":["חיבור חשבונות אישיים של רשתות חברתיות"],"Match accounts using email addresses":["התאמת חשבונות באמצעות כתובות אימייל"],"Require accounts to use WordPress.com Two-Step Authentication":["דרישה מחשבונות להשתמש בקוד אימות דו-שלבי של WordPress.com"],"Add to whitelist":["הוספה לרשימת ההיתרים"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["באפשרותך להכניס כתובת IP או סדרת כתובות לרשימת ההיתרים ובכך למנוע לחלוטין את חסימתם על ידי Jetpack. יש תמיכה בגרסאות IPv4 ו-IPv6. כדי לציין טווח, יש להזין את הערך הנמוך והערך הגבוה כשהם מופרדים באמצעות מקף. לדוגמה: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["האתר שלך מגובה ונקי מאיומים."],"Checking your spam protection…":["בדיקת ההגנה שלך מפני תגובות זבל..."],"Fetching key…":["הבאת מפתח..."],"Your site needs an Antispam key.":["האתר שלך דורש מפתח להגנה מפני תגובות זבל."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["יש בעיה עם מפתח API של ההגנה מפני תגובות זבל. {{a}}מידע נוסף{{/a}}."],"Your site is not protected from spam.":["האתר שלך לא מוגן מפני תגובות זבל."],"Your Antispam key is valid.":["המפתח שלך להגנה מפני תגובות זבל תקף."],"Your site is protected from spam.":["האתר שלך מוגן מפני תגובות זבל."],"Checking key…":["בדיקת מפתח..."],"Your API key":["מפתח ה-API שלך"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["אם עדיין אין ברשותך מפתח API, עליך {{a}}לקבל את מפתח ה-API שלך כאן {{/a}} ולעקוב אחר ההוראות להשלמת התהליך."],"No search results found for %(term)s":["לא נמצאו תוצאות עבור %(term)s"],"Enter a search term to find settings or close search.":["יש להזין מונח לחיפוש כדי למצוא הגדרות או לסגור את החיפוש."],"Connections":["חיבורים"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["האתר שלך נמצא במצב פיתוח, לכן אין לך אפשרות להתחבר אל WordPress.com."],"Your site is connected to WordPress.com.":["האתר שלך מחובר ל-WordPress.com."],"You are the Jetpack owner.":["שירות ה-Jetpack נמצא בבעלותך."],"Connected as {{span}}%(username)s{{/span}}":["מחובר בתור {{span}}%(username)s{{/span}}"],"View your Email Followers":["הצגת העוקבים שלך באימייל"],"Color scheme":["בחירת צבעים"],"Enable Markdown use for comments.":["יש להפעיל שימוש ב-Markdown עבור תגובות."],"Updated settings.":["עודכנו הגדרות."],"Error updating settings. %(error)s":["שגיאה בעדכון הגדרות. %(error)s"],"Regenerated Post by Email address.":["יצירה מחדש של פוסט לפי כתובת אימייל."],"Error regenerating Post by Email address. %(error)s":["שגיאה במהלך יצירה מחדש של פוסט לפי כתובת אימייל. %(error)s"],"Updated settings. Refreshing page…":["עודכנו הגדרות. ריענון העמוד..."],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["הפריט נמצא כרגע ב{{a}}מצב פיתוח{{/a}} (חלק מהתוכנות מושבתות) בגלל: {{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["המסנן{{li}}jetpack_development_mode פעיל{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}הקבוע JETPACK_DEV_DEBUG מוגדר{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}חסרה נקודה בכתובת URL של האתר שלך (לדוגמה http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics הוא שירות בחינם, שמשלים את {{a}}הנתונים הסטטיסטיים המובנים שלנו{{/a}} עם תובנות שונות על התעבורה שלך. נתונים סטטיסטיים של WordPress.com ו-Google Analytics משתמשים בשיטות שונות לזיהוי ומעקב אחר פעילות באתר שלך, ולכן הם בדרך כלל יראו מספרים שונים במעט של הביקורים שלך, הצפיות וכו'."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["הגדרת Google Analytics"],"Activate Google Analytics":["הפעלת Google Analytics"],"Download the free apps":["הורדה של האפליקציות בחינם"],"Upgrade Focus: VideoPress For Weddings":["המלצת שדרוג: VideoPress לחתונות"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}באפשרותך כעת גם לקבוע את התצורה של פוסטים קשורים בכלי התאמה אישית. {{ExternalLink}}אנחנו מזמינים אותך לנסות!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["כברירת מחדל, הפרסומות מוצגות בתחתית כל עמוד או פוסט או בסופו של המאמר הראשון בעמוד הראשי שלך. אפשר גם להוסיף אותן לחלק העליון של האתר שלך ולכל אזור וידג'ט כדי להגדיל רווחים!"],"Display an ad unit at the top of your site.":["הצגה של יחידת פרסומת בחלק העליון של האתר שלך."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["הפעלת הפרסומות משמעותה הבעת הסכמה ל{{link}}תנאי השימוש של ‏Automattic‏{{/link}}."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["השרת שלך לא הוגדר כראוי, לכן אי אפשר להגן על האתר שלך באופן יעיל באמצעות Jetpack Protect."],"In \"Mobile\"":["תחת 'נייד'"],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}קביעת הגדרות להודעות מעקב ב-WordPress.com{{/link}}"],"View your earnings":["הצגת הרווחים שלך"],"Configure site SEO":[""],"Activate SEO tools":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["כדי להתחיל, יש ללחוץ על 'הוספת מדיה' בעורך הפוסטים ולהעלות סרטון וידאו; אנחנו נטפל בכל השאר!"],"Video Hosting":["אחסון סרטוני וידאו"],"SEO Tools":["כלי SEO"],"Advanced SEO tools to help your site get found when people search for relevant content.":["כלי SEO המתקדמים יסייעו לאנשים למצוא את האתר שלך כאשר הם מחפשים תכנים רלוונטיים."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["הדרך הקלה ביותר להעלות אל האתר שלך סרטונים נטולי פרסומות ומיתוג. אפשר לקבל נתונים סטטיסטיים על צפיות בסרטונים ושיתופים, והנגן הוא קל וריספונסיבי."],"You are running Jetpack on a staging server.":["מופעל אצלך Jetpack בשרת אחסון זמני."],"More Info":["פרטים נוספים"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}ניהול נראות 'לייקים' דרך הגדרות מודול השיתוף{{/a}}"],"Your current IP: %(ip)s":["כתובת ה-IP הנוכחית שלך: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["כרטיסייה זו מכילה הגדרות שלא נשמרו; ביציאה מהכרטיסייה הן ילכו לאיבוד. האם להמשיך?"],"This will reset all Jetpack options, are you sure?":["דבר זה יגרום לאיפוס כל אפשרויות Jetpack; האם ההחלטה שלך סופית?"],"Search for a Jetpack feature.":["חיפוש אחר תכונה של Jetpack."],"Configure your Security Scans":["הגדרת תצורה של סריקות אבטחה"],"Subscriber":["מנוי רשום לעדכונים"],"Big iPhone/iPad Update Now Available":["עדכון גדול ל-iPhone/iPad זמין עכשיו"],"The WordPress for Android App Gets a Big Facelift":["אפליקציית WordPress ל-Android עברה 'מתיחת פנים' רצינית"],"WordPress.com Likes are:":["הלייקים של WordPress.com הם:"],"Comments headline":["שורת כותרת של תגובות"],"A few catchy words to motivate your readers to comment.":["להכניס כמה מילים שיגרמו לקוראים שלכם להגיב."],"Show a \"follow blog\" option in the comment form":["הצגת אפשרות 'עקוב אחר הבלוג' בטופס התגובה"],"Show a \"follow comments\" option in the comment form":["הצגת אפשרות 'מעקב אחר תגובות'' בטופס התגובות"],"Put a chart showing 48 hours of views in the admin bar":["הצגה בסרגל הניהול של תרשים המציג 48 שעות של צפיות"],"Hide the stats smiley face image":["הסתרת תמונת הסמיילי של הסטטיסטיקה"],"Whitelisted IP addresses":["כתובות IP ברשימת ההיתרים"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["הצגת קישור לאפליקציות לנייד של WordPress בכותרת התחתונה של ערכת העיצוב לנייד"],"Copied!":["הועתק!"],"Highlight and copy the following text to your clipboard:":["יש לסמן ולהעתיק את הטקסט הבא ללוח שלך:"],"Regenerate address":["יצירת כתובת מחדש"],"Automatically proofread content when: ":["תבוצע הגהה אוטומטית במקרים הבאים: "],"A post or page is first published":["פוסט או עמוד מתפרסמים לראשונה"],"A post or page is updated":["פוסט או עמוד מתעדכנים"],"Automatic Language Detection":["זיהוי שפה אוטומטי"],"The proofreader supports English, French, German, Portuguese and Spanish.":["בודק האיות תומך באנגלית, צרפתית, גרמנית, פורטוגזית וספרדית."],"Enable proofreading for the following grammar and style rules: ":["אפשור הגהה לכללי הדקדוק והסגנון הבאים: "],"Add a phrase":["הוספת צירוף מילים"],"Cheatin' uh?":["מרמה, אה?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}אכפת לך לספר לנו מדוע לא השלמת את ההתחברות ל-Jetpack {{a}}בסקר זה שבו 2 שאלות{{/a}}?{{/p}}{{p}}חיבור ל-Jetpack הוא חובה כדי שתכונות האבטחה והתעבורה החינמיות שלנו יעבדו.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["ברוכים הבאים ל-{{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["ה-Jetpack שלך כבר מחובר."],"You're fueled up and ready to go, Jetpack is now active.":["הכול מוכן ומזומן, Jetpack פעיל כעת."],"You're fueled up and ready to go.":["הכול מוכן ומזומן, אפשר לצאת לדרך."],"You are currently running a development version of Jetpack.":["נראה שנעשה כאן שימוש בגרסת פיתוח של Jetpack."],"Submit Beta feedback":["שליחת משוב לגרסאת בטא"],"What would you like to see on your Jetpack Dashboard?":["מה היית רוצה לראות בלוח הבקרה של Jetpack?"],"Let us know!":["ספרו לנו!"],"Saving…":["שומר..."],"Save Settings":["שמירת הגדרות"],"Jetpack Stats Icon":["סמל נתונים סטטיסטיים של Jetpack"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}יש להפעיל את הנתונים הסטטיסטיים של האתר{{/a}} כדי לראות נתונים סטטיסטיים מפורטים, לייקים, עוקבים, מנויים ועוד! {{a1}}מידע נוסף{{/a1}}"],"Activate Site Stats":["הפעלת נתונים סטטיסטיים של האתר"],"Security Scanning":["סריקות אבטחה"],"Site Backups":["גיבויים של אתרים"],"Upgrade":["שדרוג"],"ACTIVE":["פעיל"],"Your site is on Development Mode":["האתר שלך נמצא במצב פיתוח"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["לאחר ההתחברות, אפשר לשדרג לתוכנית בתשלום כדי להשתמש בכלים ברמה עולמית לאבטחה ולהגנה מפני תגובות זבל, ולזכות בעדיפות בקבלת תמיכה."],"View your spam stats":["הצגת נתונים סטטיסטיים של תגובות זבל"],"View your security dashboard":["הצגת לוח הבקרה של האבטחה"],"The site is in Development Mode, so you can not connect to WordPress.com.":["אתר זה נמצא במצב פיתוח, לכן אין לך אפשרות להתחבר אל WordPress.com."],"Link your account to WordPress.com to get the most out of Jetpack.":["כדי להפיק את המירב מ-Jetpack, מומלץ לקשר את החשבון אל WordPress.com."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["לסריקה אוטומטית ומקיפה של איומי אבטחה, יש{{a}}להתקין ולהפעיל את {{/a}} VaultPress."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["לסריקה אוטומטית ומקיפה של איומי אבטחה, יש{{a}}לשדרג את החשבון{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack חוסם באופן פעיל נסיונות כניסה זדוניים. בקרוב יוצגו כאן נתונים!"],"Total malicious attacks blocked on your site.":["סה\"כ התקפות זדוניות שנחסמו באתר שלך."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}יש להפעיל את Protect{{/a}} כדי לשמור את האתר שלך מוגן מפני נסיונות כניסה זדוניים."],"All plugins are up-to-date. Awesome work!":["כל התוספים מעודכנים. עבודה נהדרת!"],"Jetpack is improving and optimizing your image speed.":["Jetpack משפר וממטב את מהירות התמונות שלך."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack מנטר את האתר שלך. אם אנחנו חושדים שהאתר שלך קרס, נשלח לך אימייל."],"Security":["אבטחה"],"Performance":["ביצועים"],"Backups":["גיבויים"],"{{a}}View backup details{{/a}}.":["{{a}}הצגת פרטי גיבוי{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["כדי לגבות את האתר שלך כולו באופן אוטומטי, יש {{a}}להתקין ולהפעיל את{{/a}} VaultPress."],"Unavailable in Dev Mode.":["לא זמינה במצב פיתוח."],"Spam Protection":["הגנה מפני תגובות זבל"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["להגנה חדשנית מפני תגובות זבל, יש {{a}}להתקין את Akismet{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["להגנה חדשנית מפני תגובות זבל, {{a}}יש להפעיל את Akismet{{/a}}."],"Invalid key":["מפתח לא תקף"],"Unavailable in Dev Mode":["לא זמין במצב פיתוח"],"Activating recommended features…":["מפעיל תכונות מומלצות..."],"Recommended features active.":["התכונות המומלצות פעילות."],"Recommended features failed to activate. %(error)s":["הפעלת התכונות המומלצות נכשלה. %(error)s"],"Activating %(slug)s…":["מפעיל את%(slug)s…"],"%(slug)s has been activated.":["%(slug)s הופעל."],"%(slug)s failed to activate. %(error)s":["נכשלה ההפעלה של %(slug)s. %(error)s"],"Deactivating %(slug)s…":["משבית את%(slug)s…"],"%(slug)s has been deactivated.":["%(slug)s הושבת."],"%(slug)s failed to deactivate. %(error)s":["הכיבוי של %(slug)s נכשל. %(error)s"],"Updating %(slug)s settings…":["מעדכן%(slug)s הגדרות…"],"Updated %(slug)s settings.":["עודכנו%(slug)s הגדרות."],"Error updating %(slug)s settings. %(error)s":["שגיאה בעדכון%(slug)s הגדרות. %(error)s"],"Updating %(slug)s address…":["מעדכן%(slug)s כתובת…"],"Regenerated %(slug)s address .":["נוצרה%(slug)s כתובת."],"Error regenerating %(slug)s address. %(error)s":["שגיאה ביצירת %(slug)s כתובת. %(error)s"],"Resetting Jetpack options…":["מאפס אפשרויות Jetpack..."],"Options reset.":["איפוס אפשרויות."],"Options failed to reset.":["איפוס האפשרויות נכשל."],"There was an error disconnecting Jetpack. Error: %(error)s":["אירעה שגיאה במהלך התנתקות מ-Jetpack. שגיאה: %(error)s"],"Unlinking from WordPress.com":["ביטול הקישור אל WordPress.com"],"Unlinked from WordPress.com.":["ביטול הקישור אל WordPress.com."],"Error unlinking from WordPress.com. %(error)s":["שגיאה בביטול הקישור אל WordPress.com. %(error)s"],"At A Glance":["מבט כללי"],"Clichés":["קלישאות"],"Dashboard":["לוח בקרה"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["נשמח לדעת מדוע. נשמח לקבל {{a}}תשובות לשתי שאלות קצרות{{/a}} כדי שנדע כיצד לשפר את Jetpack."],"Automattic's Privacy Policy":["מדיניות הפרטיות של Automattic"],"WordPress.com Terms of Service":["תנאי שימוש ב-WordPress.com"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}הפעלה{{/a}} לשיפור הביצועים והמהירות של התמונות שלך."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}להפעיל עדכונים אוטומטיים של תוספים{{/a}}"],"Plugin Updates":["עדכוני תוספים"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["כדי לגבות באופן אוטומטי את כל האתר שלך, יש {{a}}לשדרג את החשבון{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["אוווופס! מפתח Akismet שלך חסר או לא תקף. {{akismetSettings}}יש לעבור אל הגדרות Akismet כדי לתקן אותו.{{/akismetSettings}}."],"No threats found, you're good to go!":["לא נמצאו איומים, אפשר להתחיל לעבוד!"],"{{a}}Contact Support{{/a}}":["{{a}}יצירת קשר עם התמיכה{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}הצגת פרטים ב-VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["אוי ואבוי, %(number)s נמצא איום.","אוי ואבוי, %(number)s נמצאו איומים."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}יש להפעיל מוניטור{{/a}} כדי לקבל הודעות אימייל אם האתר שלך קורס."],"Loading…":["טוען…"],"Downtime monitoring":["ניטור זמינות השרת"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}הצגת נתונים סטטיסטיים נוספים ב-WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}הצגת סטטיסטיקות מפורטות{{/button}}"],"All-time comments":["תגובות מכל הזמנים"],"All-time views":["צפיות מכל הזמנים"],"%(number)s View":["%(number)s צפייה","%(number)s צפיות"],"Best overall day":["הטובות ביותר לאורך כל היום"],"Views today":["צפיות היום"],"Months":["חודשים"],"Weeks":["שבועות"],"Days":["ימים"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["משהו קרה בעת טעינת הנתונים הסטטיסטיים. יש לנסות שוב מאוחר יותר או{{a}}להציג את הנתונים הסטטיסטיים שלך עכשיו ב-WordPress.com{{/a}}"],"Click to view detailed stats.":["יש ללחוץ כדי להציג נתונים סטטיסטיים מפורטים."],"Views: %(numberOfViews)s":[" צפיות: %(numberOfViews)s"],"Week of %(date)s":["שבוע מתוך %(date)s"],"Site Security":["אבטחת אתרים"],"Activate recommended features":["הפעלת התכונות המומלצות"],"Link to WordPress.com":["קישור ל-WordPress.com"],"Unlink me from WordPress.com":["ביטול הקישור שלי אל WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["אירעה בעיה בחיבור Jetpack עבורך. יש ללחוץ שוב על 'התחברות ל-WordPress.com'."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["הייתה לנו בעיה בחיבור Jetpack; יש לכבות ולהפעיל מחדש את תוסף Jetpack ואז להתחבר שוב."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["בלוג WordPress צריך להישאר מחובר בזמן אישור Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}יש תקלה ב-Jetpack שלך.{{/s}} אנו מתנצלים על אי-הנוחות. כדאי לנסות שוב מאוחר יותר ואם הבעיה נמשכת, לפנות לתמיכה בצירוף ההודעה הבאה: %(error_key)s"],"Disconnecting Jetpack":["מנתק את Jetpack"],"Learn more":["למד עוד"],"Posts":["רשומות"],"Front page":["עמוד ראשי"],"Upload videos":[""],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["להציג תוכן קשור אחרי הפוסטים"],"Related":["קשור"],"Save":["שמירה"],"Email Address":["כתובת דואר אלקטרוני"],"Media":["מדיה"],"Themes":["ערכות עיצוב"],"Site Stats":["סטטיסטיקת אתר"],"Sharing":["שיתוף"],"Testimonials":["המלצות"],"Cancel":["בטל"],"Comments":["תגובות"],"Ignored Phrases":["ביטויים להתעלמות"],"Use automatically detected language to proofread posts and pages":["השתמש בזיהוי שפה אוטומטי להגהת רשומות ועמודים."],"Redundant Phrases":["ביטויים מיותרים"],"Phrases to Avoid":["להימנע מביטויים"],"Passive Voice":["אפן סביל"],"Jargon":["לשון עילגת (ז'ארגון)"],"Hidden Verbs":["פעלים חבויים"],"Double Negatives":["שלילה כפולה (דאבל נגטיב)"],"Diacritical Marks":["סימני ניקוד"],"Complex Phrases":["ביטויים מורכבים"],"Bias Language":["הטיות שפה"],"English Options":["אפשרויות אנגלית"],"Proofreading":["הגהה"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack לא הצליח ליצור קשר עם WordPress.com: %(error_key)s. בדרך כלל זה קורה כאשר משהו מוגדר לא נכון בשרת שלך."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["לוורדפרס.קום יש בעיות כרגע ואינה יכולה לתדלק את ה Jetpack שלך. בבקשה נסה שוב מאוחר יותר."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}יש תקלה ב-Jetpack שלך.{{/s}} לא ניתן לחבר אתר זה אל WordPress.com. משמעות הדבר בדרך כלל היא שהאתר שלך אינו נגיש לציבור (מרח מקומי)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["האתר שלך צריך להיות נגיש לציבור כדי להשתמש ב-Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["ניתקת בהצלחה את החשבון שלך מ-Jetpack"],"Edit":["עריכה"],"Connected":["מחובר"],"Activate":["הפעלה"],"Active":["פעיל"],"Search":["חיפוש"],"Settings":["הגדרות"],"Learn More":["למד עוד"],"Disconnect Jetpack":["נתק את Jetpack"],"Test your site’s compatibility with Jetpack.":["בדיקת תאימות האתר עם Jetpack."],"Settings header\u0004Plugin Autoupdates":["עדכונים אוטומטיים של תוספים"],"Settings header\u0004Downtime monitoring":["ניטור זמן השבתה"],"Settings header\u0004Privacy Settings":["הגדרות פרטיות"],"Settings header\u0004WordPress.com toolbar":["סרגל כלים של WordPress.com"],"Settings header\u0004Composing":["כתיבה"],"Settings header\u0004Site stats":["נתונים סטטיסטיים של האתר"],"Settings header\u0004Search engine optimization":["מיטוב למנועי חיפוש"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["לחצני שיתוף"],"Settings header\u0004Publicize connections":["חיבורים של שיתוף אוטומטי"],"Settings header\u0004Like buttons":["לחצני לייק"],"Settings header\u0004WordPress.com log in":["התחברות ל-WordPress.com"],"Settings header\u0004Brute force attack protection":["הגנה מפני התקפות של ניחוש סיסמה"],"Settings header\u0004Backups and security scanning":["גיבויים וסריקות אבטחה"],"Settings header\u0004Spam filtering":["סינון תגובת זבל"],"Navigation item.\u0004Performance":["ביצועים"],"Navigation item.\u0004My Plan":["התוכנית שלי"],"Navigation item.\u0004Dev Tools":["כלי פיתוח"],"Navigation item.\u0004Settings":["הגדרות"],"Navigation item.\u0004Discussion":["דיון"],"Navigation item.\u0004Traffic":["תעבורה"],"Navigation item.\u0004Sharing":["שיתוף"],"Navigation item.\u0004At A Glance":["מבט כללי"],"Navigation item.\u0004Plans":["תוכניות"],"Navigation item.\u0004Writing":["כותב"],"Navigation item.\u0004Reset Options (dev only)":["אפשרויות איפוס (גרסאות מפתחים בלבד)"],"Navigation item.\u0004Security":["אבטחה"],"Navigation item.\u0004At a Glance":["מבט כללי"],"Search term.\u0004terms of service":["תנאי שימוש"],"Search term.\u0004tos":["tos"],"Search term.\u0004gdpr":["gdpr"],"Search term.\u0004data":["נתונים"],"Search term.\u0004tracks":["רצועות"],"Search term.\u0004privacy":["פרטיות"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["שדרוג"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["שדרוג"],"Button caption\u0004Saving…":["שומר..."],"Button caption\u0004Save settings":["שמירת הגדרות"],"A heading for a block of related posts.\u0004Related":["קשור"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["תצוגה מקדימה"],"A caption for a button to cancel disconnection.\u0004Stay connected":["להישאר עם חיבור פעיל"],"A caption for a button to disconnect.\u0004Disconnect":["התנתקות"],"Short warning message\u0004Updates needed":["נדרשים עדכונים"],"Short label appearing near a paid feature configuration block.\u0004Paid":["בתשלום"],"A header for a preview area in the configuration screen.\u0004Preview":["תצוגה מקדימה"],"Ads header\u0004Ads":["פרסומות"],"Dashboard widget header\u0004Site connection":["חיבור האתר"],"Dashboard widget header\u0004Account connection":["חיבור החשבון"],"A caption for a small button to fix security issues.\u0004Threats":["איומים"],"A caption for a small button to fix security issues.\u0004FIX":["תיקון"],"Short warning message about new threats found.\u0004Threats found!":["נמצאו איומים!"],"Short warning message about site having no security scan.\u0004No scanning":["לא בוצעה סריקה"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["שדרוג"],"Short message informing user that the site is secure.\u0004Secure":["מאובטח"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["מפתח לא תקף"],"Caption for a button to set up a feature.\u0004Set up":["הגדרה"],"verb\u0004Copy":["העתק"],"Shorthand for Privacy Policy.\u0004Privacy":["פרטיות"],"Shorthand for Terms of Service.\u0004Terms":["תנאים"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["איתור באגים"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["תגובות זבל נחסמו."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-hr-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-hr-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index c3fe2e07..00000000
--- a/plugins/jetpack/languages/json/jetpack-hr-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);","lang":"hr"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":[""],"We’re now collecting stats and securing your site. Welcome aboard.":[""],"{{a}}Skip, and explore features individually{{/a}}.":[""],"Jetpack Business Plan":[""],"Jetpack Premium Plan":[""],"Jetpack Personal Plan":[""],"Get started with hassle-free design, stats, and performance tools.":[""],"Welcome to Jetpack Free":[""],"Jetpack Free Plan":[""],"Explore Jetpack plans":[""],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":[""],"Jetpack offers so much more":[""],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":[""],"Support documentation":[""],"Chat bubbles representing getting in touch with support":[""],"Site Activity":[""],"Start publicizing now":[""],"Reach a wider audience by automatically sharing your posts on social media.":[""],"Increase traffic to your site":[""],"Explore free themes":[""],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":[""],"A wide variety of themes and tools to customize a site":[""],"Set up your site security":[""],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":[""],"Site stats showing an evolution in traffic and engagement":[""],"A hand holding a loupe":[""],"A chart showing an healthy increase in earnings":[""],"Interface showing a chronological list of changes and updates in a site":[""],"A cloud with multiple types of content floating around it":[""],"A folder holding real comments":[""],"Make your site faster":[""],"Load pages faster by serving your images from our global network of servers.":[""],"A fast and performant website":[""],"A secure site, locked and protected by Jetpack":[""],"These settings won't apply to related posts added using the block editor.":[""],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":[""],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":[""],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":[""],"Add Like buttons to your posts and pages":[""],"When visitors enjoy your content, let them show it with a Like.":[""],"Explore your Jetpack Professional plan!":[""],"Explore your Jetpack Premium plan!":[""],"Explore your Jetpack Personal plan!":[""],"Create account":[""],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":[""],"Real-time, automated backups (unlimited storage)":[""],"Compose content the way you want to and streamline your publishing experience.":[""],"Add a portfolio item":[""],"Add a testimonial":[""],"Maximize your site’s visibility in search engines and view traffic stats in real time.":[""],"Create a Jetpack account to use this feature":[""],"Share your content on social media and increase audience engagement.":[""],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":[""],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":[""],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":[""],"Error enabling Site accelerator. %(error)s":[""],"Site accelerator is now speeding up your site!":[""],"Enabling Site accelerator…":[""],"Error disabling site accelerator. %(error)s":[""],"Site accelerator is no longer speeding up your site!":[""],"Disabling site accelerator…":[""],"Load pages faster, optimize images, and speed up your visitors’ experience.":[""],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":[""],"High-speed, high-definition video hosting with no third-party ads.":[""],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":[""],"Marketing Automation":[""],"Activate Jetpack Search":[""],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":[""],"Start earning":[""],"WordAds lets you earn money by displaying promotional content. Start earning today.":[""],"Spam is automatically blocked from your comments.":[""],"Spam Filtering":[""],"Browse premium themes":[""],"Access hundreds of beautifully designed premium themes at no extra cost.":[""],"Try a premium theme":[""],"View settings":[""],"Create a Jetpack account to view your email followers":[""],"Open your site to comments and invite subscribers to get alerts about your latest work.":[""],"Manage security settings":[""],"Built-in Performance":[""],"Jetpack is ready for the new WordPress editor":[""],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":[""],"Build your Jetpack site with blocks":[""],"A new editor? Yes! {{a}}Learn more{{/a}}.":[""],"The features you rely on, adapted for the new WordPress editor.":[""],"Take me to the new editor":[""],"Testing Jetpack Connection":[""],"There was an error testing Jetpack. Error: %(error)s":[""],"New in Jetpack!":[""],"Speed up static file load times":[""],"Speed up image load times":[""],"Enable site accelerator":[""],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":[""],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":[""],"View your site activity":[""],"View a chronological list of all the changes and updates to your site in an organized, readable way.":[""],"Manually Verify ":["Manualno verificiraj"],"Verify with Google":["Verificiraj s Google"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":[""],"or":["ili"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":[""],"Your site is verified with Google":[""],"Site failed to verify: %(error)s":[""],"Verifying...":[""],"Add faster, more advanced searching to your site with Jetpack Professional.":[""],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":[""],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":[""],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":[""],"Jetpack Search supports many customizations.":[""],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":[""],"Site is verified":[""],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}Kako bi kreirali prekrasne web-stranice koje izgledaju i funkcioniraju kako vi želite, Jetpack Professional vam pruža neograničeni pristup preko 200 premium WordPress tema.{{/p}}{{p}}Jetpack Professional je više od pronalaska savršenog dizajna. On je također tu kako bi vam uklonio sve brige znajući da ćete imati prioritetnu podršku od našeg globalnog tima stručnjaka ako to ikada zatrebate.{{/p}}"],"Spam filtering and priority support.":["Spam filtriranje i prioritetna podrška."],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["Kada su oglasi uključeni, Jetpack automatski generira korisnički ads.txt skrojen za vašu web-stranicu."],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["Jetpack automatski generira korisnički {{link}}ads.txt{{/link}} skrojen za vašu web-stranicu. Ako trebate dodati dodatne unose za druge mreže dodajte ih u polju ispod, jedan po redu."],"Custom ads.txt entries":["Unosi korisničkog ads.txt"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}Kako bi kreirali prekrasnu web-stranicu koja izgleda i funkcionira kako vi želite, Jetpack Professional vam pruža pristup preko 200 premium WordPress tema.{{/p}}{{p}}Jetpack Professional nije samo za pronalazak perfektnog dizajna. Nego vam smanjuje i brige: trenutne sigurnosne kopije, automatsko malware skeniranje i prioritetna podrška od našeg globalnog tima stručnjaka garantiraju da će vaša web-stranica uvijek biti sigurna.{{/p}}"],"Introducing Premium Themes":["Predstavljamo Premium teme"]," Premium Themes":["Premium teme"],"Privacy information":["Informacije o privatnosti"],"Enable Lazy Loading for images":["Uključi Učitavanje s odgodom za slike"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["Učitavanje slika s odgodom poboljšava brzinu vaše web-stranice i kreira uglađeno iskustvo gledanja. Slike će se učitavati kako posjetitelji pomiču stranicu na zaslonu, umjesto da se sve učitaju odjednom."],"Performance & speed":["Performanse i brzina"],"Enable high-speed, ad-free video player":["Uključi brzi video reproduktor bez oglasa"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["Sadržaj koji objavite učinite privlačnijim s visoko kvalitetnim videom. S Jetpack Video možete prilagoditi video reproduktor i isporučiti video koji je brzi, bez oglasa i brendiranja vašim posjetiteljima. Video je pohranjen na našim WordPress.com poslužiteljima i zauzimaju mjesto na vašem hostingu!"],"Video":["Video"],"Carousel color scheme":["Paleta boja vrtuljka"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Exif podaci prikazuju posjetiteljima dodatne tehničke detalje fotografije, poput žarišne duljine, otvor objektiva i ISO."],"Show photo Exif metadata in carousel (when available)":["Prikaži Exif meta podatke fotografije u vrtuljku (kad su dostupni)"],"Display images in a full-screen carousel gallery":["Prikaži slike u galerijskom vrtuljku pune veličine zaslona"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["Kreirajte galerijski vrtuljak pune veličine zaslona za slike u vašim objavama i stranicama. Galerijski vrtuljci su optimizirani za mobilne uređaje i potiču posjetitelje na interakciju s slikama."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["WordPress.com alatna traka zamjenjuje izvornu WordPress administratorsku alatnu traku i poboljšava vaše WordPress iskustvo. Jednim klikom pruža pristup upravljanju svim vašim web-stranicama, ažuriranju WordPress.com profila, pregled obavijesti i pregled web-stranica koje pratite u Čitaču."],"Portfolios shortcode: [portfolio]":["Portfolio kratki kod: [portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["Upotrijebite {{portfolioLink}}portfolio{{/portfolioLink}} na web-stranici kako bi prikazali vaše najbolje radove. Ako vaša tema ne podržava Jetpack Portfolio, i dalje možete upotrijebiti jednostavan kratki kod kako bi ih prikazali na web-stranici."],"Testimonials shortcode: [testimonials]":["Preporuka kratki kod: [testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["Dodajte {{testimonialLink}}preporuke{{/testimonialLink}} na web-stranicu kako bi privukli nove klijente. Ako vaša tema ne podržava Jetpack Preporuke, i dalje možete upotrijebiti jednostavan kratki kod kako bi ih prikazali na web-stranici."],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["Trenutno tražilice ne mogu pristupiti web-stranici. Ako želite učinit web-stranicu pristupačnom, provjerite {{a}}postavke Čitanja{{/a}} i uključite \"Vidljivost tražilicama\"."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["Dobre vijesti: Jetpack automatski šalje vašu mapu stranica na indeksiranje svim značajnim tražilicama."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["Mape stranice su zapisi koje koriste tražilice poput Google i Bing kako bi indeksirali web-stranicu. Mogu pomoći poboljšati ranking u rezultatima pretrage. Kada ovo uključite, Jetpack će kreirati mape stranica i automatski ih ažurirati kada se sadržaj promijeni na web-stranici."],"Configure related posts in the Customizer":["Konfigurirajte povezane objave u Prilagođivaču"],"Highlight related content with a heading":["Istakni povezani sadržaj s zaglavljem"],"View security scan details":["Pogledaj detalje sigurnosnog skeniranja"],"View backup history":["Pogledaj povijest sigurnosnih kopija"],"Show a thumbnail image where available":["Prikaži sličicu gdje je to dostupno."],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["Za više informacija o tome kako određene Jetpack značajke koriste podatke i prate aktivnosti, pogledajte naš {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["Koristimo druge alate za praćenje, uključujući i alate trećih strana. {{cookiePolicyLink}}Pročitajte o njima{{/cookiePolicyLink}} i kako ih kontrolirati."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["Ove informacije pomažu nam poboljšati naše proizvode, učiniti naš marketing više relevantnijim, personalizirati vaše WordPress.com iskustvo, i još puno toga opisanoga u našim {{pp}}pravilima privatnosti{{/pp}}."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["Podijelite informacije o vašem korištenju servisa s našim alatom za analitiku dok ste prijavljeni u WordPress.com račun. {{cookiePolicyLink}}Saznajte više{{/cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["Ovom značajkom upravlja administrator web-stranice. {{link}}Saznajte više{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["Ovu značajku je onemogućio administrator web-stranice. {{link}}Saznajte više{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["Ovu značajku je omogućio administrator web-stranice. {{link}}Saznajte više{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["%(moduleName)s je onemogućio administrator web-stranice. {{link}}Saznajte više{{/link}}."],"This feature has been disabled by a site administrator.":["Ovu značajku je onemogućio administrator web-stranice."],"%(moduleName)s has been disabled by a site administrator.":["%(moduleName)s je onemogućio administrator web-stranice."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["Možete prikazati dodatne oglase koristeći Ad widget. {{link}}Isprobajte!{{/link}}"],"Configure your notification settings":["Konfigurirajte postavke obavijesti"],"Monitor your site's downtime":["Pratite nedostupnost web-stranice"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["Jetpack Pretraživanje je moćna zamjena za funkcionalnost pretraživanja koja je ugrađena u WordPress."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["Datoteke vaše web-stranice redovno se skeniraju u potrazi za sumnjivim modifikacijama koje bi mogle kompromitirati vašu sigurnost i podatke."],"Plugin needs updating.":["Dodatak treba ažurirati.","Dodatka treba ažurirati.","Dodataka treba ažurirati."],"%(number)s":["%(number)s","%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Jetpack Ažuriranje dodataka omogućuju vam odabir dodataka koje želite automatski ažurirati."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack će optimizirati vaše slike i poslužiti ih s poslužitelja koji je najbliži posjetitelju. Korištenje naše globalne mreže za dostavu sadržaja poboljšati će brzinu učitavanja web-stranice."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":["Jetpack praćenje nedostupnosti nadzirati će vašu web-stranicu i obavijestiti će vas čim nedostupnost bude detektirana."],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Jetpack Sigurnosne kopije omogućuju vam jednostavno vraćanje na prethodno stanje ili preuzimanje sigurnosne kopije u željenom trenutku."],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet provjerava komentare i poruke kontakt forme uspoređujući ih s našom globalno spam bazom podataka."],"Privacy Information":["Informacije o privatnosti"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["VideoPress vam omogućuje da preneseni video s vašeg računala bude smješten na WordPress.com umjesto na serveru vašeg hostinga. Video zatim možete koristiti na vašem samostalno hostanoj web-stranici s Jetpackom."],"Add the Search (Jetpack) widget to your sidebar":["Dodaj Pretraga (Jetpack) widget u bočnu traku."],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["Pružite posjetiteljima odlično iskustvo pretraživanja omogućujući im brzo filtriranje i sortiranje relevantnih rezultata pretraživanja."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["Aktivira laganu temu, kompatibilnu s mobilnim uređajima koja će biti prikazan posjetiteljima na mobilnim uređajima."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["Automatski učitava sljedeću objavu kada se čitatelj približi dnu stranice."],"Allows you to publish new posts by sending an email to a special address.":["Omogućuje vam objavljivanje novih objava slanjem e-pošte na specijalnu adresu."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["Omogućuje vam sastavljanje sadržaja s poveznicama, listama i drugim stilovima koristeći Markdown sintaksu."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["Provjerava vaš sadržaj u potrazi za gramatičkim greškama, pogreško korištenim riječima i stilom dok pišete."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["Pruža neophodne skrivene oznake potrebne za verifikaciju vaše WordPress web-stranice s različitim servisima."],"Displays information on your site activity, including visitors and popular posts or pages.":["Prikazuje informacije o aktivnosti vaše web-stranice, uključujući posjetitelje i popularne objave ili stranice."],"Allows you to optimize your site and its content for better results in search engines.":["Omogućuje vam optimiziranje vaše web-stranice i sadržaja za bolje rezultate u tražilicama."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["Integrira vašu web-stranicu s Google Analytics, platformom koja pruža uvid u promet, posjetitelje i konverzije web-stranice."],"Displays high-quality ads on your site that allow you to earn income.":["Prikazuje visoko kvalitetne oglase na vašoj web-stranici, koji vam omogućuju zaradu."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["Dodajte dugmad za dijeljenje sadržaja vašem sadržaju tako da ga posjetitelji mogu dijeliti na društvenim mrežama."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["Omogućuje vam da automatski dijelite svoj najnoviji sadržaj na društvenim mrežama, uključujući Facebook i Twitter."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["Dodajte lajk dugmad vašem sadržaju kako bi posjetitelji izrazili njihovu zahvalu ili užitak konzumiranja sadržaja."],"Allows registered users to log in to your site with their WordPress.com accounts.":["Omogućuje registriranim korisnicima prijavu na vašu web-stranicu koristeći WordPress.com račun."],"Protects your site from traditional and distributed brute force login attacks.":["Štiti vašu web-stranicu od tradicionalnih i distribuiranih napada sirovom snagom na formu za prijavu."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["Kreira sigurnosnu kopiju vaše web-stranice na globalnim WordPress.com poslužiteljima, omogućujući vam vraćanje na prethodno stanje u slučaju greške."],"Removes spam from comments and contact forms.":["Uklanja spam iz komentara i kontakt formi."],"We are committed to your privacy and security. ":["Predani smo očuvanju vaše privatnosti i sigurnosti."],"View all Jetpack plans":["Pogledaj sve Jetpack planove"],"Manage your plan":["Upravljanje planom"],"Your Plan":["Vaš plan"],"You’re currently on Jetpack %(plan)s.":["Trenutno koristite Jetpack %(plan)s."],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["Omogućuje čitateljima da se pretplate na vaše objave ili komentare, i primaju obavijesti o novom sadržaju putem e-pošte."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["Zamjenjuje standardnu WordPress formu za komentare s novim sistemom za komentiranje koji uključuje prijavu putem društvenih mreža."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}Aktiviraj{{/a}} kako bi zamijenili ugrađenu WordPress pretragu s Jetpack Pretragom, poboljšanim iskustvom pretraživanja."],"Add Search (Jetpack) Widget":["Dodaj Pretraga (Jetpack) widget"],"Jetpack Search is powering search on your site.":["Jetpack Pretraga pogoni pretraživanje na vašoj web-stranici."],"Manage your plugins":["Upravljajte dodacima"],"Moderate comments":["Moderirajte komentare"],"Error updating privacy settings. %(error)s":["Greška pri ažuriranju postavki privatnosti. %(error)s"],"Updated privacy settings.":["Postavke privatnosti su ažurirane."],"Updating privacy settings…":["Ažuriranje postavki privatnosti…"],"Add Jetpack Search Widget":["Dodaj Jetpack Widget pretrage"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["Dodajte Jetpack widget pretrage u bočnu traku kako bi konfigurirali filtere pretraživanja."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["Potpuno sigurnosno okružje, alati za marketing i zaradu, neograničena video pohrana, neograničene teme, poboljšana pretraga i prioritetna podrška."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["Potpuno sigurnosno okružje, alati za marketing i zaradu, neograničena video pohrana i prioritetna podrška."],"Daily backups, spam filtering, and priority support.":["Dnevne sigurnosne kopije, filtriranje spama i prioritetna podrška."],"Always-on Security":["Konstantna sigurnost"],"Activate video hosting":["Aktiviraj video hosting"],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Sigurnosne kopije u realnom vremenu svih podataka web-stranice s neograničenim prostorom za pohranu, vraćanjem na prethodno stanje jednim klikom, automatsko sigurnosno skeniranje i prioritetna podrška."],"Design the perfect website":["Dizajnirajte savršenu web-stranicu"],"Set up Jetpack":["Postavite Jetpack"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["Trenutne sigurnosne kopije svih podataka web-stranice s neograničenim prostorom za pohranu, vraćanje jednim klikom i automatsko sigurnosno skeniranje."],"Jetpack Search":["Jetpack pretraga"],"Jetpack version %(version)s":["Jetpack inačica %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["Za vašu web-stranicu se kreira sigurnosna kopija u realnom vremenu i regularno se skenira za sigurnosne prijetnje."],"Daily backup of all your site data with unlimited space and one-click restores":["Dnevne sigurnosne kopije svih podataka vaše web-stranice s neograničenim prostorom za pohranu i vraćanjem jednim klikom."],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Dnevne sigurnosne kopije svih podataka vaše web-stranice s neograničenim prostorom za pohranu, vraćanjem jednim klikom, automatskim sigurnosnim skeniranjem i prioritetna podrška"],"View your security activity":["Pregledajte sigurnosne aktivnosti"]," (powered by VaultPress).":[" (pokreće VaultPress)."],"Customize Search Widget":["Prilagodite widget Pretrage"],"Please correct the issue below and try again.":["Popravite problem naveden ispod i pokušajte ponovno.","Popravite probleme navedene ispod i pokušajte ponovno.","Popravite probleme navedene ispod i pokušajte ponovno."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["Brinemo se da vaša web-stranica bude slobodna od sigurnosnih prijetnji. Obavijestiti ćemo vas ako pronađemo koju."],"Your site is being backed up in real-time.":["Za vašu web-stranicu se izrađuje sigurnosna kopija u realnom vremenu."],"Jetpack version":["Jetpack inačica"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}Pregledajte aktivnost web-stranice{{/a}} na jednom mjestu."],"Activity":["Aktivnost"],"Confirm each new phrase you add by pressing enter.":["Tipkom enter potvrdite svaku novu frazu koju dodate."],"{{a}}View details{{/a}}":["{{a}}Prikaži detalje{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["Hvala na odabiru Jetpack Professional plana. Jetpack sada kreira sigurnosne kopije vašeg sadržaja, indeksira vaš sadržaj za ptretragu, skenira sigurnosne prijetnje i omogućava vam pristup premium temama."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["S Jetpack Professional, možete kreirati savršenu web-stranicu s nekom od preko 300 profesionalno dizajniranih WordPress tema, uključujući više od 200 premium tema. Prilagodite svoj sadržaj s različitim widgetima, ili dodajte neograničeni broj videa svojim objavama i stranicama -- prikazanih bez oglasa ili vodenih žigova."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["Povećanje broj pratitelja je lako s Professional planom, zahvaljujući opcijama dijeljenja i tempiranja sadržaja, SEO alatima i ugrađenim opcijama za pretplate. Možete monetizirati svoju web-stranicu s dugmetom za Jednostavno plaćanje i oglasima, te nadzirati uspjeh integrirajući Google Analytics."],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Vaš Jetpack plan vam omogućuje sve što trebate kako bi zaštitili sav vaš naporan rad, uključujući sigurnosne kopije na zahtjev i malware skeniranje sa povratom sigurnosnih kopija jednim klikom i rješavanje problema. Vaša web-stranica biti će potpuno zaštićena od spama, zlonamjernog koda i pokušaja prijave sirovom silom."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Počnite istraživati Jetpack Professional kako bi ste vidjeli sve benificije ovog plana."],"Install premium themes":["Instalirajte premium teme"],"Review SEO features":["Pregledajte SEO mogućnosti"],"Welcome Professional":["Dobro došli Professional"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["Hvala na odabiru Jetpack Premium plana. Jetpack sada kreira sigurnosne kopije vaše web-stranice, skenira sigurnosne prijetnje i omogućava vam pristup opcijama monetizacije."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["S Jetpack Premium, možete kreirati savršenu web-stranicu bez obzira na namjenu. Prilagodite izgled web-stranice s nekom od preko 100 besplatnih tema, ili poboljšajte sadržaj s neograničenim prostorom za pohranu HD videa -- prikazanih bez oglasa ili vodenih žigova."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Korištenje moćnih Jetpack alata za djeljenje, možete automatski podijeliti svoje nove objave na društvenim medijima, ili tempirati sadržaj da bude ponovno podijeljen na datum i u vrijeme po vašem odabiru. Uz povećanje broj vaših pratitelja možete povećati svoj biznis sa alatima poput dugmadi za plaćanje i oglasa."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Počnite istraživati Jetpack Premium kako bi ste vidjeli sve benificije ovog plana."],"Monetize your site with ads":["Monetizirajte svoju web-stranicu s oglasima"],"Welcome Premium":["Dobro došli Premium"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["Hvala na odabiru Jetpack Personal plana. Jetpack sada kreira sigurnosne kopije vaše web-stranice i skenira sigurnosne prijetnje."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["S Jetpack Personal, imate pristup više od 100 besplatnih, profesionalno dizajniranih WordPress tema. Odaberite temu koja najbolje pristaje vašoj web-stranici i prilagodite boje, slike, ili dodajte raznolike widgete."],"Got it":["Razumijem"],"Welcome personal":["Dobro došli privatni"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["Klikom na dugme ispod, slažete se s našim {{tosLink}}Uvjetima Usluge{{/tosLink}} i da ćete {{shareDetailsLink}}dijeliti pojedinosti{{/shareDetailsLink}} s WordPress.com."],"Jetpack Stats People":["Jetpack statistika ljudi"],"Hello there! Your stats have been activated.":["Pozdrav! Aktivirana vam je statistika."],"Just give us a little time to collect data so we can display it for you here.":["Dopustite malo vremena kako bi se prikupili podaci koje možemo ovdje prikazati."],"Okay, got it!":["Shvaćam!"],"Display ads below posts on":["Prikaži oglase ispod objava na"],"Additional ad placements":["Dodatna mjesta za oglase"],"Top of each page":["Na vrhu svake stranice"],"Second ad below post":["Drugi oglas ispod objave"],"Archives":["Arhiva"],"Explore Professional":["Istražite Professional"],"Compare All Plans":["Usporedi sve planove"],"Person with laptop":["Osoba s laptopom"],"Your Jetpack site is ready to go!":["Vaša Jetpack web-stranica je spremna!"],"Stars":["Zvjezdice"],"Jupiter":["Jupiter"],"Welcome to Jetpack Personal":["Dobro došli u Jetpack Personal"],"Welcome to Jetpack Premium":["Dobro došli u Jetpack Premium"],"Welcome to Jetpack Professional":["Dobro došli u Jetpack Professional"],"Schedule posts":["Tempiranje objava"],"Activate Publicize":["Aktiviraj Publiciranje"],"Your site is backed up.":["Napravljena je sigurnosna kopija za vašu web-stranicu."],"Image Performance":["Performanse slika"],"Get WordPress Apps for every device":["Nabavite WordPress aplikaciju za svaki uređaj"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Upravljajte svojim web-stranicama s jedne nadzorne ploče: objavljuje sadržaj, pratite statistiku, moderirajte komentare i još puno toga od bilo kuda u svijetu."],"I already use this app.":["Već koristim ovu aplikaciju"],"Create address":["Kreiraj adresu"],"Priority support":["Prioritetna podrška"],"Add sharing buttons to your posts":["Dodajte dugmad za dijeljenje svojim objavama"],"Automatically share your posts to social networks":["Automatski podijelite svoje objave na društvenim mrežama"],"Updating settings…":["Ažuriranje postavki..."],"Updating Post by Email address…":["Ažuriranje Objava putem adrese e-pošte..."],"Your paid plan gives you access to prioritized Jetpack support.":["Vaš plaćeni plan vam omogućuje pristup prioritetnoj Jetpack korisničkoj podršci."],"You have paid for backups but they're not yet active.":["Platili ste za sigurnosne kopije ali još nisu aktivne."],"You have paid for backups and security scanning but they’re not yet active.":["Platili ste za sigurnosne kopije i sigurnosno skeniranje ali još nisu aktivni."],"Click \"Set Up\" to finish installation.":["Kliknite \"Postavljanje\" za završetka instalacije."],"Checking site status…":["Provjera statusa web-stranice..."],"Pages":["Stranice"],"We're here to help":["Ovdje smo da vam pomognemo"],"Jetpack comes with free, basic support for all users.":["Jetpack dolazi s besplatnom, osnovnom podrškom za sve korisnike."],"Ask a question":["Postavite pitanje"],"Search our support site":["Pretražite našu web-stranicu za podršku"],"Get a faster resolution to your support questions.":["Dobijte brze odgovore na vaša pitanja za podršku."],"Host fast, high-quality, ad-free video.":["Hostajte brzi, visoko kvalitetni video bez oglasa."],"Generate income with high-quality ads.":["Generirajte prihod s visoko kvalitetnim oglasima."],"Real-time site backups and automatic threat resolution.":["Trenutne sigurnosne kopije i automatska zaštita od prijetnja."],"Protect against data loss, malware, and malicious attacks.":["Zaštiti te se od gubitka podataka, malwarea, i zloćudnih napada."],"Integrate easily with Google Analytics.":["Lagano integrirajte s Google Analytics."],"Help your content get found and shared with SEO tools.":["Pomozite da se vaš sadržaj pronađe s alatima za dijeljene i SEO."],"Protect your site from spam.":["Zaštitite web-stranicu od spama."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["Ova web-stranica nije povezana s WordPress.com. Pitajte administratora web-stranice da poveže."],"Spam filtering":["Filtriranje spama"],"Daily, automated malware scanning":["Dnevno, automatizirano skeniranje malwarea."],"Daily, automated backups (unlimited storage)":["Dnevne, automatizirane sigurnosne kopije (neograničena pohrana)"],"Daily, automated malware scanning with automated resolution":["Dnevno, automatizirano skeniranje malwarea s automatskim rješavanjem"],"Unlimited, high-speed video hosting":["Neograničeni brzi video hosting"],"SEO preview tools":["Pretpregled SEO alata"],"Site stats, related content, and sharing tools":["Statistika web-stranice, srodni sadržaj, i alati za dijeljenje sadržaja"],"Brute force attack protection and downtime monitoring":["Zaštita od napada sirovom snagom u nadzor dostupnosti"],"Unlimited, high-speed image hosting":["Neograničeni brzi hosting za slike"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["Odspajanjem %(siteName) s WordPress.com više nećete imati pristup sljedećem:"],"Read more about Jetpack benefits":["Pročitajte više o Jetpack koristima"],"An Automattic Airline":["An Automattic Airline"],"Manage site connection":["Upravljanje konekcijom web-stranice"],"Connect your account to WordPress.com to view more stats":["Spojite svoj račun s WordPress.com kako bi dobili više statistike"],"Theme enhancements":["Poboljšanja teme"],"Load more posts using the default theme behavior":["Učitajte više objava koristeći ponašanje izvorne teme"],"Load more posts in page with a button":["Učitajte više objava na stranici s dugmetom"],"Load more posts as the reader scrolls down":["Učitajte više objava dok se stranice pomiče"],"Theme support required.":["Potrebna je podrška teme."],"Learn more about adding support for Infinite Scroll to your theme.":["Saznajte više o dodavanju podrške vašoj temi za beskonačno pomicanje."],"Use excerpts instead of full posts on front page and archive pages":["Upotrijebite sažetke umjesto prikaza cijele objave na početnoj stranici i stranicama arhiva"],"Show featured images":["Prikaži istaknute slike"],"Enable the WordPress.com toolbar":["Omogući WordPress.com alatnu traku"],"Writing tools available to you will be shown here when an administrator enables them.":["Dostupni alati za pisanje biti će prikazani ovdje kada ih administrator omogući."],"Portfolios":["Portfolio"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Imajte na umu da {{b}}verificiranje vaše web-stranice s ovim servisima nije potrebno{{/b}} kako bi tražilice indeksirale vašu web-stranicu. Kako bi upotrijebili ove napredne alate tražilica i verificirali vašu web-stranicu s servisom, zalijepite HTML kod oznake ispod. Pročitajte {{support}}cijele upute{{/support}} ako imate problema. Podržani servisi verifikacije: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, i {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["Generiraj XML mape stranica"],"Collecting valuable traffic stats and insights":["Skupljanje vrijedne statistike prometa i uvida"],"The image helps collect stats, but should work when hidden.":["Slika pomaže u skupljanju statistike, ali trebala bi funkcionirati kada se skrivena."],"Count logged in page views from":["Broji preglede stranica prijavljenog korisnika"],"Allow stats reports to be viewed by":["Dopustite prikaz izvještaja statistike korisniku"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["Možete ugađati ove postavke ako želite napredniju kontrolu. Pročitajte više o svemu što možete učiniti {{a}}kako bi optimizirali SEO vaše web-stranice{{/a}}."],"Configure your SEO settings":["Konfiguracija vaših SEO postavki"],"In \"Upgrade\"":["u \"Nadogradi\""],"Configure your Google Analytics settings":["Konfigurirajte postavke Google Analytics"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Prikaži oglase na prvom članku početne stranice ili na kraju svake stranice i objave. Postavite dodatne oglase na vrhu vaše web-stranice i svakom widgetu području kako bi povećali svoju zaradu."],"Enable ads and display an ad below each post":["Uključi oglase i prikaži oglas ispod svake objave"],"Configure your sharing buttons":["Konfigurirajte dugmad za dijeljenje sadržaja"],"Connect your social media accounts":["Spojite račune društvenih mreža"],"Match accounts using email addresses":["Upari račune koristeći adresu e-pošte"],"Require accounts to use WordPress.com Two-Step Authentication":["Zahtijevaj da računi koriste WordPress.com autentifikaciju s dvije provjere"],"Add to whitelist":["Dodaj u bijelu listu"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["Možete dodati IP adresu ili seriju adresa u bijelu listu kako bi spriječili da ih Jetpack ikad blokira. Dozvoljene su IPv4 i IPv6. Kako bi naveli raspon adresa, unesite najniži i najvišu vrijednost odvojene crticom. Primjer: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["Vaša web-stranica je zaštićena i ima sigurnosnu kopiju."],"Checking your spam protection…":["Provjera vaše spam zaštite..."],"Fetching key…":["Dohvaćanje ključa..."],"Your site needs an Antispam key.":["Vaša web-stranice treba Antispam ključ."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["Pojavio se problem s vašim Antispam API ključem. {{a}}Saznajte više{{/a}}."],"Your site is not protected from spam.":["Vaša web-stranica nije zaštićena od spama."],"Your Antispam key is valid.":["Vaš Antispam ključ je ispravan."],"Your site is protected from spam.":["Vaša web-stranica je zaštićena od spama."],"Checking key…":["Provjera ključa..."],"Your API key":["Vaš API ključ"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["Ako već nemate API ključ, onda {{a}}ovdje nabavite svoj API ključ{{/a}}, i biti ćete provedeni kroz proces dobivanja ključa."],"No search results found for %(term)s":["Nema rezultata pretrage za %(term)s"],"Enter a search term to find settings or close search.":["Upišite pojam za pretragu kako bi pronašli postavke ili zatvorite pretraživanje."],"Connections":["Konekcije"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Vaša web-stranica je trenutno u Razvojnom načinu rada, stoga se ne možete spojiti s WordPress.com."],"Your site is connected to WordPress.com.":["Vaša web-stranica je spojena s WordPress.com."],"You are the Jetpack owner.":["Vi ste Jetpack vlasnik."],"Connected as {{span}}%(username)s{{/span}}":["Spojeni kao {{span}}%(username)s{{/span}}"],"View your Email Followers":["Pregledajte svoje e-pošta pratitelje"],"Color scheme":["Paleta boja"],"Enable Markdown use for comments.":["Uključi Markdown upotrebu u komentarima."],"Updated settings.":["Postavke ažurirane."],"Error updating settings. %(error)s":["Greška pri ažuriranju postavki. %(error)s"],"Regenerated Post by Email address.":["Regenerirana Objava putem adrese e-pošte."],"Error regenerating Post by Email address. %(error)s":["Greška pri regeneriranju Objava putem adrese e-pošte. %(error)s"],"Updated settings. Refreshing page…":["Ažuriranje postavki. Osvježavanje stranice..."],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["Trenutno u {{a}}Razvojnom okružju{{/a}} (neke mogućnosti su onemogućene) zbog: {{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}jetpack_development_mode filter je aktivan{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}JETPACK_DEV_DEBUG konstanta je definirana{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}URL-u vaše web-stranice nedostaje točka (npr. http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics je besplatna usluga koja nadopunjuje našu {{a}}ugrađenu statistiku{{/a}} s drugačijim uvidima u promet web-stranice. WordPress.com statika i Google Analytics drugačije metode identificiranja i praćenja aktivnosti na vašoj web-stranici, stoga je normalno da prikazuju malo drugačije ukupne rezultate posjetitelja, pregleda, itd."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Google Analytics konfiguracija"],"Activate Google Analytics":["Aktiviraj Google Analytics"],"Download the free apps":["Preuzmite besplatne aplikacije"],"Upgrade Focus: VideoPress For Weddings":["Fokus nadogradnje: VideoPress za vjenčanja"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}Sada možete konfigurirati srodne objave u Prilagodniku. {{ExternalLink}}Isprobajte!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["Po izvornim postavkama oglasi su prikazani na kraju svake stranice, objave, ili prvog članka na vašoj početnoj stranici, Također, možete ih dodati na vrh vaše web-stranice i u bilo koje widget područje kako bi povećali zaradu!"],"Display an ad unit at the top of your site.":["Prikaži oglasnu jedinicu na vrhu web-stranice."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["Aktiviranjem oglasa, slažete se s Automattic Ads {{link}}Uvjetima usluge{{/link}}."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Vaš poslužitelj nije dobro konfiguriran, što znači da Jetpack zaštita ne može efektivno zaštiti vašu web-stranicu."],"In \"Mobile\"":["U \"Mobile\""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Konfigurirajte postavke obavijesti Monitora na WordPress.com{{/link}}"],"View your earnings":["Pogledajte svoju zaradu"],"Configure site SEO":["Konfiguriraj SEO web-stranice"],"Activate SEO tools":["Aktiviraj SEO alate"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["ZA početak, kliknite na 'Dodaj medijski zapis' u vašem uređivaču objava i prenesite video; mi ćemo se pobrinuti za ostalo!"],"Video Hosting":["Video Hosting"],"SEO Tools":["SEO Alati"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Napredni SEO alati koji će pomoći da se lakše pronađe vaša web-stranica kada ljudi traže relevantni sadržaj."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["Najlakši načini za prijenos videa bez oglasa i logotipa (unbranded) na vašu web-stranicu. Možete dobiti uvid u statistiku video reprodukcije i dijeljenja, dok je sam reproduktor (player) lagan i prilagodljiv."],"You are running Jetpack on a staging server.":["Koristite Jetpack na pripremnom poslužitelju."],"More Info":["Više informacija"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Upravljajte vidljivošću Lajkova iz postavki modula Dijeljenje{{/a}}"],"Your current IP: %(ip)s":["Vaša trenutni IP: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["Na ovoj kartici postoje nespremljene postavke koje će se izgubiti ako ju zatvorite. Nastaviti?"],"This will reset all Jetpack options, are you sure?":["Ovo će resetirati sve Jetpack opcije, jeste li sigurni?"],"Search for a Jetpack feature.":["Pretraga Jetpak mogućnosti."],"Configure your Security Scans":["Konfigurirajte Sigurnosna skeniranja"],"Subscriber":["Pretplatnik"],"Big iPhone/iPad Update Now Available":["Veliko iPhone/iPad ažuriranje je sada dostupno"],"The WordPress for Android App Gets a Big Facelift":["Aplikacija WordPress za Android dobila je veliko poboljšanje"],"WordPress.com Likes are:":["WordPress.com lajkovi su:"],"Comments headline":["Zaglavlje komentara"],"A few catchy words to motivate your readers to comment.":["Par privlačnih riječi kojima ćete motivirati vaše čitatelje na komentiranje."],"Show a \"follow blog\" option in the comment form":["Prikaži opcije \"prati blog\" u formi za komentare."],"Show a \"follow comments\" option in the comment form":["Prikaži opciju \"prati komentare\" u formi za komentare."],"Put a chart showing 48 hours of views in the admin bar":["Postavi grafikon koji prikazuje pregled stranica u zadnjih 48 sati u administratorskoj traci"],"Hide the stats smiley face image":["Sakrij ikonu smješka statistike"],"Whitelisted IP addresses":["IP adrese u bijeloj listi"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Prikaži promo za WordPress mobilne aplikacije u podnožju mobilne teme."],"Copied!":["Kopirano!"],"Highlight and copy the following text to your clipboard:":["Označite i kopirajte sljedeći tekst:"],"Regenerate address":["Regeneriranje adrese"],"Automatically proofread content when: ":["Automatski lekturiraj sadržaj kada:"],"A post or page is first published":["Objava ili stranica je prva objavljena"],"A post or page is updated":["Objava ili stranica je ažurirana"],"Automatic Language Detection":["Automatska detekcija jezika"],"The proofreader supports English, French, German, Portuguese and Spanish.":["Lektoriranje podržava Engleski, Francuski, Njemački, Portugalski i Španjolski jezik."],"Enable proofreading for the following grammar and style rules: ":["Omogući lekturiranje za sljedeća gramatička i stilska pravila:"],"Add a phrase":["Dodajte frazu"],"Cheatin' uh?":["Varamo, jeli?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}Možete li nam reći zašto niste dovršili spajanje s Jetpackom u ovom {{a}}upitniku s dva pitanja{{/a}}?{{/p}}{{p}}Spajanje s Jetpackom je potrebno kako bi radile naše besplatne funkcije sigurnosti i prometa.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Dobro došli u {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["Vaš Jetpack je već spojen."],"You're fueled up and ready to go, Jetpack is now active.":["Sve je spremno za korištenje, Jetpack je aktiviran."],"You're fueled up and ready to go.":["Sve je spremno za korištenje."],"You are currently running a development version of Jetpack.":["Trenutno koristite razvojnu inačicu Jetpacka."],"Submit Beta feedback":["Pošaljite Beta povratnu informaciju"],"What would you like to see on your Jetpack Dashboard?":["Što bi željeli vidjeti na svojoj Jetpack Nadzornoj ploči?"],"Let us know!":["Dojavite nam!"],"Saving…":["Snimanje..."],"Save Settings":["Spremi postavke"],"Jetpack Stats Icon":["Jetpack Ikona statistike"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Aktiviraj Statistiku web-stranice{{/a}} kako bi vidjeli detaljnu statistiku, lajkove, pratitelje, pretplatnike i još puno toga! {{a1}}Saznajte više{{/a1}}"],"Activate Site Stats":["Aktiviraj Statistiku web-stranice"],"Security Scanning":["Sigurnosno skeniranje"],"Site Backups":["Sigurnosne kopije web-stranice"],"Upgrade":["Ažuriranje"],"ACTIVE":["AKTIVNO"],"Your site is on Development Mode":["Vaša web-stranica je trenutno u Razvojnom načinu rada"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Kada se spojite, možete nadograditi na plaćenu opciju kako bi otključali svjetski poznate opcije sigurnosti, zaštite od spama i prioritetnu podršku."],"View your spam stats":["Pregled spam statistike"],"View your security dashboard":["Pregled nadzorne ploče sigurnosti"],"The site is in Development Mode, so you can not connect to WordPress.com.":["Vaša web-stranica je trenutno u Razvojnom načinu rada, stoga se ne možete spojiti s WordPress.com."],"Link your account to WordPress.com to get the most out of Jetpack.":["Povežite svoj račun s WordPress.com kako bi maksimalno iskoristili Jetpack."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["Za automatsko, opsežno sigurnosno skeniranje sigurnosnih prijetnji, {{a}}instalirajte i aktivirajte{{/a}} VaultPress."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["Za automatsko, opsežno sigurnosno skeniranje sigurnosnih prijetnji, {{a}}nadogradite svoj račun{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack aktivno blokira zloćudne pokušaje prijave. Podaci će se uskoro ovdje prikazati."],"Total malicious attacks blocked on your site.":["Ukupan broj blokiranih zloćudnih napada na vašu web-stranicu."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Aktivna zaštita{{/a}} za zaštitu vaše web-stranice od zloćudnih pokušaja prijave."],"All plugins are up-to-date. Awesome work!":["Svi dodaci su ažurirani. Odličan posao!"],"Jetpack is improving and optimizing your image speed.":["Jetpack poboljšava i optimizira brzinu vaših slika."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack nadzire vašu web-stranicu. Ako nam se učini da web-stranice nije online, poslati ćemo vam poruku e-poštom."],"Security":["Sigurnost"],"Performance":["Performanse"],"Backups":["Sigurnosne kopije"],"{{a}}View backup details{{/a}}.":["{{a}}Pregledaj detalje sigurnosne kopije{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["Za automatsku sigurnosnu kopiju cijele web-stranice napravite {{a}}instalirajte i aktivirajte{{/a}} VaultPress."],"Unavailable in Dev Mode.":["Nedostupno u Razvojnom načinu rada."],"Spam Protection":["Spam zaštita"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["Za najmoderniju spam zaštitu {{a}}instalirajte Akismet{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["Za najmoderniju spam zaštitu {{a}}aktivirajte Akismet{{/a}}."],"Invalid key":["Neispravan ključ"],"Unavailable in Dev Mode":["Nedostupno u razvojnom modu"],"Activating recommended features…":["Aktiviranje preporučenih značajki..."],"Recommended features active.":["Preporučene značajke su aktivne."],"Recommended features failed to activate. %(error)s":["Preporučene značajke nisu se uspjele aktivirati. %(error)s"],"Activating %(slug)s…":["Aktiviranje %(slug)s…"],"%(slug)s has been activated.":["%(slug)s je aktivirano."],"%(slug)s failed to activate. %(error)s":["%(slug)s nije se uspjelo aktivirati. %(error)s"],"Deactivating %(slug)s…":["Deaktiviranje %(slug)s…"],"%(slug)s has been deactivated.":["%(slug)s je deaktivirano."],"%(slug)s failed to deactivate. %(error)s":["Neuspjela deaktivacija %(slug)s. %(error)s"],"Updating %(slug)s settings…":["Ažuriranje postavki %(slug)s..."],"Updated %(slug)s settings.":["%(slug)s postavke ažurirane."],"Error updating %(slug)s settings. %(error)s":["Greška pri ažuriranju %(slug)s postavki. %(error)s"],"Updating %(slug)s address…":["Ažuriranje %(slug)s adrese."],"Regenerated %(slug)s address .":["Regenerirana %(slug)s adresa."],"Error regenerating %(slug)s address. %(error)s":["Greška u regeneriranju %(slug)s adrese. %(error)s"],"Resetting Jetpack options…":["Resetiranje Jetpack opcija..."],"Options reset.":["Reset opcija."],"Options failed to reset.":["Opcije nisu uspješno resetirane."],"There was an error disconnecting Jetpack. Error: %(error)s":["Dogodila se greška pri odspjajanju Jetpacka. Error: %(error)s"],"Unlinking from WordPress.com":["Odspajanje od WordPress.com."],"Unlinked from WordPress.com.":["Odspojen od WordPress.com."],"Error unlinking from WordPress.com. %(error)s":["Greška pri odspajanju od WordPress.com. %(error)s"],"At A Glance":["Kratki pregled"],"Clichés":["Klišeji"],"Dashboard":["Nadzorna ploča"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Želite nam reći zašto? Samo {{a}}odgovaranjem na dva jednostavna pitanja{{/a}} pomogli bi nam poboljšati Jetpack."],"Automattic's Privacy Policy":["Automattic Polica Privatnosti"],"WordPress.com Terms of Service":["WordPress.com Uvjeti Usluge"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}Aktivirajte{{/a}} za poboljšanje performansi i brzine vaših slika."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Uključite automatsko ažuriranje dodataka{{/a}}"],"Plugin Updates":["Ažuriranja dodataka"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["Za automatsku sigurnosnu kopiju cijele web-stranice napravite {{a}}nadogradnju računa{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["Ups! Vaš Akismet ključ.nedostaje ili je neispravan. {{akismetSettings}}Otvorite Akismet postavke kako bi ovo popravili{{/akismetSettings}}."],"No threats found, you're good to go!":["Nisu pronađene prijetnje, nastavite bez briga!"],"{{a}}Contact Support{{/a}}":["{{a}}Kontaktiraj podrišku{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}Pogledaj detalje na VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["Uh oh, %(number)s prijetnja pronađena.","Uh oh, %(number)s prijetnje pronađene.","Uh oh, %(number)s prijetnja pronađeno."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}Aktiviraj Monitor{{/a}} za primanje obavijesti e-poštom ako vaša web-stranica postane nedostupna."],"Loading…":["Učitavanje..."],"Downtime monitoring":["Nadzor dostupnosti"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}Pogledajte više statistike na WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}Prikaži detaljnu statistiku{{/button}}"],"All-time comments":["Svi komentari"],"All-time views":["Svi pregledi"],"%(number)s View":["%(number)s pregled","%(number)s pregleda","%(number)s pregleda"],"Best overall day":["Najposjećeniji dan"],"Views today":["Pregleda danas"],"Months":["Mjeseci"],"Weeks":["Tjedana"],"Days":["Dana"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["Nešto se dogodilo prilikom učitavanja statistike. Pokušajte ponovno kasnije ili {{a}}odmah pregledajte statistiku na WordPress.com{{/a}}"],"Click to view detailed stats.":["Kliknite za pregled detaljne statistike."],"Views: %(numberOfViews)s":["Pregleda: %(numberOfViews)s"],"Week of %(date)s":["Tjedan %(date)s"],"Site Security":["Sigurnost web-stranice"],"Activate recommended features":["Aktiviraj preporučene mogućnosti"],"Link to WordPress.com":["Povezivanje s WordPress.com"],"Unlink me from WordPress.com":["Odspajanje s WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["Dogodio se problem s spajanjem Jetpacka. Kliknite ponovno na \"Poveži se s WordPress.com\""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["Dogodio se problem s spajanjem Jetpacka; deaktivirajte a zatim reaktivirajte Jetpack dodatak, i ponovno se spojite."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Trebate ostati prijavljeni na vašem WordPress blogu dok autorizirate Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Vaš Jetpack ima problema.{{/s}} Ispričavamo se zbog neugodnosti. Pokušajte ponovno kasnije, ako se problem nastavi, kontaktirajte podršku s ovom porukom: %(error_key)s"],"Disconnecting Jetpack":["Odspoji Jetpack"],"Learn more":["Saznaj Više"],"Posts":["Objave"],"Front page":["Početna stranica"],"Upload videos":["Prenesi video"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Prikaži srodni sadržaj ispod objava"],"Related":["Srodno"],"Save":["Spremi"],"Email Address":["Adresa e-pošte"],"Media":["Media"],"Themes":["Teme"],"Site Stats":["Statistike stranice"],"Sharing":["Dijeljenje "],"Testimonials":["Preporuke"],"Cancel":["Odustani"],"Comments":["Komentari"],"Ignored Phrases":["Ignorirane fraze"],"Use automatically detected language to proofread posts and pages":["Upotrijebi automatski detektiran jezik za lekturiranje objava i stranica"],"Redundant Phrases":["Suvišne fraze"],"Phrases to Avoid":["Fraze za Izbjegavanje"],"Passive Voice":["Pasivni glas"],"Jargon":["Žargon"],"Hidden Verbs":["Skriveni glagoli"],"Double Negatives":["Dvostruki negativi"],"Diacritical Marks":["Diakritičke oznake"],"Complex Phrases":["Kompleksne fraze"],"Bias Language":["Pristrani Jezik"],"English Options":["Opcije Engleskog"],"Proofreading":["Lektura"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack ne može kontaktirati WordPress.com: %(error_key)s. Ovo obično znači da je nešto krivo konfigurirano na vašem web hostu."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com trenutno ima neke probleme i ne može aktivirati vaš Jetpack. Molimo vas da pokušate kasnije. "],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Vaš Jetpack ima problem.{{/s}} Povezivanje ove web-stranice s WordPress.com nije moguće. Ovo obično znači da vaša stranica nije javno dostupna (localhost). "],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Vaša web-stranica mora biti javno dostupan da bi mogao koristiti Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["Uspješno ste odspojili Jetpack."],"Edit":["Uredi"],"Connected":["Spojeno"],"Activate":["Aktiviraj"],"Active":["Aktivno"],"Search":["Pretraži"],"Settings":["Postavke"],"Learn More":["Saznaj više"],"Disconnect Jetpack":["Odspoji Jetpack"],"Test your site’s compatibility with Jetpack.":["Testirajte kompatibilnost web-stranice s Jetpackom."],"Settings header\u0004Plugin Autoupdates":[""],"Settings header\u0004Downtime monitoring":["Praćenje nedostupnosti"],"Settings header\u0004Privacy Settings":["Postavke privatnosti"],"Settings header\u0004WordPress.com toolbar":["WordPress.com alatna traka"],"Settings header\u0004Composing":["Sastavljanje"],"Settings header\u0004Site stats":["Statistika web-stranice"],"Settings header\u0004Search engine optimization":["Optimizacija za tražilice (SEO)"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Dugmad za dijeljenje"],"Settings header\u0004Publicize connections":["Konekcije Publiciranja"],"Settings header\u0004Like buttons":["Dugmad 'Sviđanje'"],"Settings header\u0004WordPress.com log in":["WordPress.com prijava"],"Settings header\u0004Brute force attack protection":["Zaštita od napada sirovom snagom"],"Settings header\u0004Backups and security scanning":["Sigurnosne kopije i sigurnosno skeniranje"],"Settings header\u0004Spam filtering":["Spam filtriranje"],"Navigation item.\u0004Performance":[""],"Navigation item.\u0004My Plan":[""],"Navigation item.\u0004Dev Tools":["Razvojni alati"],"Navigation item.\u0004Settings":["Postavke"],"Navigation item.\u0004Discussion":["Rasprava"],"Navigation item.\u0004Traffic":["Promet"],"Navigation item.\u0004Sharing":["Dijeljenje"],"Navigation item.\u0004At A Glance":["Kratki pregled"],"Navigation item.\u0004Plans":["Planovi"],"Navigation item.\u0004Writing":["Pisanje"],"Navigation item.\u0004Reset Options (dev only)":["Reset opcije (samo dev inačice)"],"Navigation item.\u0004Security":["Sigurnost"],"Navigation item.\u0004At a Glance":["Kratki pregled"],"Search term.\u0004terms of service":["uvjeti korištenja"],"Search term.\u0004tos":["tos"],"Search term.\u0004gdpr":["gdpr"],"Search term.\u0004data":["data"],"Search term.\u0004tracks":["tracks"],"Search term.\u0004privacy":["privacy"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["Nadogradnja"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Nadogradnja"],"Button caption\u0004Saving…":["Spremanje..."],"Button caption\u0004Save settings":["Spremi postavke"],"A heading for a block of related posts.\u0004Related":["Povezano"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Pretpregled"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Ostanite spojeni"],"A caption for a button to disconnect.\u0004Disconnect":["Odspoji"],"Short warning message\u0004Updates needed":["Potrebne nadogradnje"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Plaćeno"],"A header for a preview area in the configuration screen.\u0004Preview":["Pretpregled"],"Ads header\u0004Ads":["Oglasi"],"Dashboard widget header\u0004Site connection":["Konekcija web-stranice"],"Dashboard widget header\u0004Account connection":["Konekcija računa"],"A caption for a small button to fix security issues.\u0004Threats":["Prijetnje"],"A caption for a small button to fix security issues.\u0004FIX":["POPRAVAK"],"Short warning message about new threats found.\u0004Threats found!":["Pronađene prijetnje!"],"Short warning message about site having no security scan.\u0004No scanning":["Nema skeniranja"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Nadogradnja"],"Short message informing user that the site is secure.\u0004Secure":["Osigurano"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Neispravni ključ"],"Caption for a button to set up a feature.\u0004Set up":["Postavi"],"verb\u0004Copy":["Kopija"],"Shorthand for Privacy Policy.\u0004Privacy":["Privatnost"],"Shorthand for Terms of Service.\u0004Terms":["Uvjeti"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Ispravljanje grešaka"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["Blokirani spam komentari."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-hu_HU-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-hu_HU-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 3d9febe5..00000000
--- a/plugins/jetpack/languages/json/jetpack-hu_HU-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"hu"},"Manually Verify ":[""],"Verify with Google":[""],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":[""],"or":[""],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":[""],"Your site is verified with Google":[""],"Site failed to verify: %(error)s":[""],"Verifying...":[""],"Add faster, more advanced searching to your site with Jetpack Professional.":[""],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":[""],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":[""],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":[""],"Jetpack Search supports many customizations.":[""],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":[""],"Site is verified":[""],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":[""],"Spam filtering and priority support.":[""],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":[""],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":[""],"Custom ads.txt entries":[""],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":[""],"Introducing Premium Themes":[""]," Premium Themes":[""],"Privacy information":[""],"Enable Lazy Loading for images":[""],"Performance & speed":[""],"Enable high-speed, ad-free video player":[""],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":[""],"Video":[""],"Carousel color scheme":[""],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":[""],"Show photo Exif metadata in carousel (when available)":[""],"Display images in a full-screen carousel gallery":[""],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":[""],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":[""],"Portfolios shortcode: [portfolio]":[""],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":[""],"Testimonials shortcode: [testimonials]":[""],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":[""],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":[""],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":[""],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":[""],"Configure related posts in the Customizer":[""],"Highlight related content with a heading":[""],"View security scan details":[""],"View backup history":[""],"Show a thumbnail image where available":[""],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":[""],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":[""],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":[""],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":[""],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":[""],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been disabled by a site administrator.":[""],"%(moduleName)s has been disabled by a site administrator.":[""],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":[""],"Configure your notification settings":[""],"Monitor your site's downtime":[""],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":[""],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":[""],"Plugin needs updating.":["","Plugins need updating."],"%(number)s":["","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":[""],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":[""],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":[""],"Akismet checks your comments and contact form submissions against our global database of spam.":[""],"Privacy Information":[""],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":[""],"Add the Search (Jetpack) widget to your sidebar":[""],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":[""],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":[""],"Loads the next posts automatically when the reader approaches the bottom of the page.":[""],"Allows you to publish new posts by sending an email to a special address.":[""],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":[""],"Checks your content for correct grammar and spelling, misused words, and style while you write.":[""],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":[""],"Displays information on your site activity, including visitors and popular posts or pages.":[""],"Allows you to optimize your site and its content for better results in search engines.":[""],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":[""],"Displays high-quality ads on your site that allow you to earn income.":[""],"Adds sharing buttons to your content so that visitors can share it on social media sites.":[""],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":[""],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":[""],"Allows registered users to log in to your site with their WordPress.com accounts.":[""],"Protects your site from traditional and distributed brute force login attacks.":[""],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":[""],"Removes spam from comments and contact forms.":[""],"We are committed to your privacy and security. ":[""],"View all Jetpack plans":[""],"Manage your plan":[""],"Your Plan":[""],"You’re currently on Jetpack %(plan)s.":[""],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":[""],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":[""],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":[""],"Add Search (Jetpack) Widget":[""],"Jetpack Search is powering search on your site.":[""],"Manage your plugins":[""],"Moderate comments":[""],"Error updating privacy settings. %(error)s":[""],"Updated privacy settings.":[""],"Updating privacy settings…":[""],"Add Jetpack Search Widget":[""],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":[""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":[""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":[""],"Daily backups, spam filtering, and priority support.":[""],"Always-on Security":[""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":[""],"Design the perfect website":[""],"Set up Jetpack":[""],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":[""],"Jetpack Search":[""],"Jetpack version %(version)s":[""],"Your site is being backed up in real time and regularly scanned for security threats.":[""],"Daily backup of all your site data with unlimited space and one-click restores":[""],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":[""],"View your security activity":[""]," (powered by VaultPress).":[""],"Customize Search Widget":[""],"Please correct the issue below and try again.":["","Please correct the issues listed below and try again."],"We are making sure your site stays free of security threats. You will be notified if we find one.":[""],"Your site is being backed up in real-time.":[""],"Jetpack version":["Jetpack verzió"],"{{a}}View your site's activity{{/a}} in a single feed.":[""],"Activity":["Aktivitás"],"Confirm each new phrase you add by pressing enter.":[""],"{{a}}View details{{/a}}":[""],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":[""],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":[""],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":[""],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":[""],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":[""],"Install premium themes":[""],"Review SEO features":[""],"Welcome Professional":[""],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":[""],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":[""],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":[""],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":[""],"Monetize your site with ads":[""],"Welcome Premium":[""],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":[""],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":[""],"Welcome personal":[""],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":[""],"Jetpack Stats People":[""],"Hello there! Your stats have been activated.":[""],"Just give us a little time to collect data so we can display it for you here.":[""],"Okay, got it!":[""],"Display ads below posts on":[""],"Additional ad placements":[""],"Top of each page":[""],"Second ad below post":[""],"Archives":[""],"Explore Professional":[""],"Compare All Plans":[""],"Person with laptop":[""],"Your Jetpack site is ready to go!":[""],"Stars":[""],"Jupiter":[""],"Welcome to Jetpack Personal":[""],"Welcome to Jetpack Premium":[""],"Welcome to Jetpack Professional":[""],"Activate Publicize":[""],"Your site is backed up.":[""],"Image Performance":[""],"Get WordPress Apps for every device":["Töltsük le a WordPress alkalmazásokat minden eszközre"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Kezeljük az összes oldalunkat egyetlen vezérlőpultról, legyen az: tartalmak publikálása, statisztikák megtekintése, hozzászólások moderálása, és még sok minden a világ bármely tájáról."],"I already use this app.":["Már telepítve van az alkalmazás."],"Create address":["Cím létrehozása"],"Priority support":["Elsőbbségi segítségnyújtás"],"Add sharing buttons to your posts":["Megosztási gombok megjelenítése a bejegyzéseknél"],"Automatically share your posts to social networks":["Automatikus megosztás a közösségi oldalakon"],"Updating settings…":["Beállítások frissítése..."],"Updating Post by Email address…":["Bejegyzés frissítése Emailen keresztül..."],"Your paid plan gives you access to prioritized Jetpack support.":[""],"You have paid for backups but they're not yet active.":[""],"You have paid for backups and security scanning but they’re not yet active.":[""],"Click \"Set Up\" to finish installation.":[""],"Checking site status…":[""],"Pages":["Oldalak"],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":["Webhely statisztikák, hasonló tartalmak és megosztási eszközök"],"Brute force attack protection and downtime monitoring":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":["Megosztási gombok testreszabása"],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":["Google Analítikák"],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Download the free apps":[""],"Upgrade Focus: VideoPress For Weddings":["Fókusz frissítése: A VideoPress esküvők részére"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":["SEO eszközök"],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":["További információ"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}A kedvelési lehetőségek láthatóságát a Megosztás modul beállításainál kezelhetjük{{/a}}"],"Your current IP: %(ip)s":["Jelenlegi IP címünk: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["El nem mentett változások vannak ezen a lapon, amik elvesznek, ha elnavigálunk. Biztosan ezt szeretnénk?"],"This will reset all Jetpack options, are you sure?":["Ezzel minden Jetpack beállítás elveszik. Biztosan folytatni szeretnénk?"],"Search for a Jetpack feature.":["Keresés a Jetpack funkciók között."],"Configure your Security Scans":[""],"Subscriber":["Feliratkozó"],"Big iPhone/iPad Update Now Available":["A nagy iPhone/iPad frissítés már elérhető"],"The WordPress for Android App Gets a Big Facelift":["A WordPress for Android App kapott egy arculat átalakítást"],"WordPress.com Likes are:":["WordPress.com kedvelői:"],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":["Engedélyezett lista IP-címei"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":["Sikeres másolás."],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":["Automatikus lektorált tartalom, ha:"],"A post or page is first published":["Bejegyzés vagy oldal első közzétételekor"],"A post or page is updated":["Bejegyzés vagy oldal frissítve"],"Automatic Language Detection":["Automatikus nyelvfelismerés"],"The proofreader supports English, French, German, Portuguese and Spanish.":["A lektorálást támogatja az Angol, Francia, Német, Portugál, Spanyol nyelveket."],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":["Egy kifejezés hozzáadása"],"Cheatin' uh?":["Csalunk, csalunk?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Üdvözöljük a {{s}}Jetpack %(jetpack_version)s{{/s}} verziójában!"],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":["Mit szeretnénk látni a Jetpack vezérlőpultján?"],"Let us know!":["Tudassa velünk!"],"Saving…":["Mentése..."],"Save Settings":["Beállítások mentése"],"Jetpack Stats Icon":["Jetpack statisztikák ikon"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Honlap statisztikák bekapcsolása{{/a}} által láthatjuk honlapunk részletes statisztikáját, kedvelőit, követőit, feliratkozóit, és így tovább egyéb statisztikai adatokat! {{a1}}További információk erről{{/a1}}"],"Activate Site Stats":["Honlap statisztikák bekapcsolása"],"Security Scanning":["Biztonsági ellenőrzés"],"Upgrade":["Előfizetés"],"ACTIVE":["BEKAPCSOLT"],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":["Spam statisztikák megtekintése"],"View your security dashboard":["Biztonsági vezérlőpult megtekintése"],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":["Minden bővítmény naprakész. Szép munka!"],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":["Biztonság"],"Performance":["Teljesítmény"],"Backups":["Biztonsági mentések"],"{{a}}View backup details{{/a}}.":["{{a}}Biztonsági mentés további részleteinek megtekintése{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":["Spam védelem"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":["Érvénytelen kulcs"],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"Activating %(slug)s…":["%(slug)s bekapcsolása…"],"%(slug)s has been activated.":["%(slug)s be lett kapcsolva."],"%(slug)s failed to activate. %(error)s":["%(slug)s modult nem sikerült aktiválni. %(error)s"],"Deactivating %(slug)s…":["%(slug)s kikapcsolása…"],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":["%(slug)s beállítások frissítése..."],"Updated %(slug)s settings.":["%(slug)s beállítások frissítve."],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":["Beállítások visszaállítása folyamatban..."],"Options reset.":["Beállítások visszaállítása"],"Options failed to reset.":["Beállításokat nem sikerült visszaállítani."],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":["Elválasztása a WordPress.com fiókunktól."],"Unlinked from WordPress.com.":["Elválasztva a WordPress.com fiókunktól."],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":["Áttekintés"],"Clichés":[""],"Dashboard":["Vezérlőpult"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Megmondanánk, hogy miért? Csak {{a}}két egyszerű kérdésre kellene válaszolni.{{/a}} Ezzel segítene tökéletesíteni a Jetpackot."],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":["WordPress.com szolgáltatás feltételei"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":[""],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Bővítmény automatikus frissítésének bekapcsolása{{/a}}"],"Plugin Updates":["Bővítmény frissítések"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":["{{a}}Kapcsolat a támogatáshoz{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}Részletek megtekintése a VaultPress.com honlapján{{/a}}"],"Uh oh, %(number)s threat found.":["Uh! Sajnos, %(number)s fenyegetés található.","Uh! Sajnos, %(number)s fenyegetés található."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":[""],"Loading…":["Betöltés..."],"Downtime monitoring":["Leállás megfigyelés"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}Még több statisztika a WordPress.com oldalán {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}Régi típusú statisztikai oldal megtekintése{{/button}}"],"All-time comments":["Eddigi hozzászólások"],"All-time views":["Eddigi megtekintés"],"%(number)s View":["%(number)s megtekintés","%(number)s megtekintés"],"Best overall day":["Összesített legjobb nap"],"Views today":["Mai megtekintések"],"Months":["Havi"],"Weeks":["Heti"],"Days":["Napi"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":["Részletes statisztika megtekintéséhez kattintsunk ide."],"Views: %(numberOfViews)s":["Megtekintés: %(numberOfViews)s"],"Week of %(date)s":[""],"Site Security":[""],"Activate recommended features":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":["Kapcsolat megszakítása köztem és a WordPress.com között"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":["Jetpack leválasztása"],"Learn more":["Bővebben"],"Posts":["Bejegyzés"],"Front page":["Kezdőoldal"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Kapcsolódó tartalom mutatása a bejegyzések után"],"Related":["Kapcsolódó bejegyzések"],"Save":["Mentés"],"Email Address":["Email cím"],"Media":["Médiatár"],"Themes":["Sablonok"],"Site Stats":["Statisztika"],"Sharing":["Megosztás"],"Testimonials":["Vélemények"],"Cancel":["Megszakítás"],"Comments":["Hozzászólások"],"Ignored Phrases":["Mellőzött kifejezések"],"Use automatically detected language to proofread posts and pages":["Használja az automatikusan észlelt nyelvi lektorálást a bejegyzéseknél és oldalakon"],"Redundant Phrases":["Redudáns eszközök"],"Phrases to Avoid":["Kerülendő mondatok"],"Passive Voice":["Szenvedő alak"],"Jargon":["Szakszó"],"Hidden Verbs":["Rejtett igék"],"Double Negatives":["Dupla negatívumok"],"Diacritical Marks":["Diakritikus jelek"],"Complex Phrases":["Komplex kifejezések"],"Bias Language":["Félreértelmezhető szavak"],"English Options":["Angol beállítások"],"Proofreading":["Lektorálás"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack nem tud kapcsolódni a WordPress.com-hoz: %(error_key)s. Ez gyakran azt jelenti, hogy a kiszolgálódon valami rosszul van beállítva."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com most nem tudja kiszolgálni a Jetpacket. Próbáld újra később."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Hiba lépett fel a Jetpack használata közben.{{/s}} Nem lehet a WordPress.com honlaphoz kapcsolódni. Ez annyit jelent, hogy valószínűleg a weboldalunk nem érhető el nyilvánosan (pl. saját gépünkről fut)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["A webhelyünknek nyilvánosan elérhetőnek kell lennie, a Jetpack használatához: %(error_key)s"],"You have successfully disconnected Jetpack":["Sikeres lecsatlakozás a Jetpackről."],"Edit":["Szerkesztés"],"Connected":["Kapcsolódva"],"Activate":["Bekapcsol"],"Active":["Aktív"],"Search":["Keresés"],"Settings":["Beállítások"],"Learn More":["Bővebben"],"Disconnect Jetpack":["Jetpack leválasztása"],"Test your site’s compatibility with Jetpack.":["Honlap Jetpack kompatibilitás ellenőrzése."],"Settings header\u0004Downtime monitoring":[""],"Settings header\u0004Privacy Settings":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":["Megosztási gombok"],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"Search term.\u0004terms of service":[""],"Search term.\u0004tos":[""],"Search term.\u0004gdpr":[""],"Search term.\u0004data":[""],"Search term.\u0004tracks":[""],"Search term.\u0004privacy":[""],"Caption for a button to purchase a pro plan.\u0004Upgrade":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"A heading for a block of related posts.\u0004Related":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":["Megosztás"],"Navigation item.\u0004At A Glance":["Áttekintés"],"Navigation item.\u0004Plans":["Csomagok"],"Navigation item.\u0004Writing":["Írás"],"Navigation item.\u0004Reset Options (dev only)":["Beállítások visszaállítása (csak fejlesztői verzió)"],"Navigation item.\u0004Security":["Biztonság"],"Navigation item.\u0004At a Glance":["Áttekintés"],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":["Másolás"],"Shorthand for Privacy Policy.\u0004Privacy":["Adatvédelem"],"Shorthand for Terms of Service.\u0004Terms":["Szolgáltatás feltételei"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Hibakeresés"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["Spam hozzászólás blokkolva."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-id_ID-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-id_ID-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 70957222..00000000
--- a/plugins/jetpack/languages/json/jetpack-id_ID-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n > 1;","lang":"id"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":["Selanjutnya, aktifkan fitur yang direkomendasikan oleh Jetpack untuk memaksimalkan keamanan dan performa situs Anda. {{a}}Pelajari apa saja yang termasuk{{/a}}."],"We’re now collecting stats and securing your site. Welcome aboard.":["Kami kini mengumpulkan statistik dan mengamankan situs Anda. Selamat bergabung."],"{{a}}Skip, and explore features individually{{/a}}.":["{{a}}Lewati, dan jelajahi semua fitur satu per satu{{/a}}."],"Jetpack Business Plan":["Paket Bisnis Jetpack"],"Jetpack Premium Plan":["Paket Premium Jetpack"],"Jetpack Personal Plan":["Paket Personal Jetpack"],"Get started with hassle-free design, stats, and performance tools.":["Memulai dengan alat performa, statistik, dan desain bebas ribet."],"Welcome to Jetpack Free":["Selamat datang di Jetpack Gratis"],"Jetpack Free Plan":["Paket Gratis Jetpack"],"Explore Jetpack plans":["Jelajahi paket Jetpack"],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":["Dapatkan ketenangan dari dukungan prioritas dan pencadangan yang diotomatisasi, jangkau audiens yang lebih luas dengan menggunakan alat SEO tingkat lanjut, monetisasi situs dengan menjalankan iklan, dan sesuaikan situs dengan lebih dari 200 tema premium kami."],"Jetpack offers so much more":["Jetpack juga menawarkan berbagai hal menarik lainnya"],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":["Perlu bantuan? Telusuri situs dukungan kami untuk menemukan informasi tentang situs Anda, akun Anda, dan cara memanfaatkan WordPress semaksimal mungkin."],"Support documentation":["Dokumen pendukung"],"Chat bubbles representing getting in touch with support":["Gelembung obrolan mewakili komunikasi dengan pihak dukungan"],"Site Activity":["Aktivitas Situs"],"Start publicizing now":["Mulai terbitkan sekarang"],"Reach a wider audience by automatically sharing your posts on social media.":["Jangkau audiens yang lebih luas dengan membagikan postingan di media sosial secara otomatis."],"Increase traffic to your site":["Tingkatkan lalu lintas ke situs Anda"],"Explore free themes":["Jelajahi tema gratis"],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":["Dapatkan akses tidak terbatas ke ratusan tema profesional, dan sesuaikan situs Anda seperti yang Anda suka."],"A wide variety of themes and tools to customize a site":["Berbagai macam tema dan alat untuk menyesuaikan situs"],"Set up your site security":["Siapkan keamanan situs Anda"],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":["Cegah serangan login, dan dapatkan pemberitahuan instan ketika ada masalah terkait situs Anda."],"Site stats showing an evolution in traffic and engagement":["Statistik situs menunjukkan evolusi pada lalu lintas dan keterlibatan"],"A hand holding a loupe":["Tangan memegang kaca pembesar"],"A chart showing an healthy increase in earnings":["Bagan menunjukkan kenaikan pendapatan yang sehat"],"Interface showing a chronological list of changes and updates in a site":["Antarmuka menunjukkan daftar perubahan dan pembaruan kronologis pada sebuah situs"],"A cloud with multiple types of content floating around it":["Awan dengan beberapa jenis konten yang melayang di sekitarnya"],"A folder holding real comments":["Folder yang menyimpan komentar nyata"],"Make your site faster":["Jadikan situs Anda lebih cepat"],"Load pages faster by serving your images from our global network of servers.":["Muat halaman lebih cepat dengan menayangkan gambar dari jaringan server kami di seluruh dunia."],"A fast and performant website":["Situs web yang berfungsi dengan cepat"],"A secure site, locked and protected by Jetpack":["Situs yang aman, dikunci, dan dilindungi oleh Jetpack"],"These settings won't apply to related posts added using the block editor.":["Pengaturan ini tidak berlaku untuk pos terkait yang ditambahkan menggunakan penyunting blok."],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["Menyalin pos, halaman, Testimonial, dan Portofolio yang ada. Semua konten akan disalin termasuk teks, gambar andalan, pengaturan berbagi, dan lainnya."],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":["Situs ini tidak dapat disambungkan ke WordPress.com karena melanggar {{a}}Ketentuan Layanan{{/a}} kami."],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":["Sambungkan situs web Anda ke jaringan media sosial yang Anda gunakan dan bagikan konten Anda di semua akun sosial dengan sekali klik. Pos yang Anda publikasikan akan muncul di semua akun yang terhubung."],"Add Like buttons to your posts and pages":["Tambahkan tombol Suka ke pos dan halaman Anda"],"When visitors enjoy your content, let them show it with a Like.":["Saat pengunjung menyukai konten Anda, biarkan mereka menunjukkannya dengan tanda Suka."],"Explore your Jetpack Professional plan!":["Kenali paket Jetpack Professional Anda!"],"Explore your Jetpack Premium plan!":["Kenali paket Jetpack Premium Anda!"],"Explore your Jetpack Personal plan!":["Kenali paket Jetpack Personal Anda!"],"Create account":["Buat akun"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["Jetpack mendukung situs Anda, namun untuk mengakses semua fiturnya, Anda perlu membuat akun."],"Real-time, automated backups (unlimited storage)":["Pencadangan otomatis real-time (penyimpanan tanpa batas)"],"Compose content the way you want to and streamline your publishing experience.":["Susun konten sesuai keinginan Anda dan sederhanakan proses publikasi."],"Add a portfolio item":["Tambahkan item portofolio"],"Add a testimonial":["Tambahkan testimonial"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["Maksimalkan visibilitas situs Anda di mesin pencarian dan lihat statistik kunjungan secara real-time."],"Create a Jetpack account to use this feature":["Buat akun Jetpack agar dapat menggunakan fitur ini"],"Share your content on social media and increase audience engagement.":["Bagikan konten Anda di media sosial dan tingkatkan keterlibatan audiens."],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["Jetpack akan terus memantau situs Anda, dan mengirimkan pemberitahuan saat waktu tidak aktif terdeteksi."],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["Saat pembaruan plugin dirilis, praktik terbaiknya adalah memperbarui plugin tersebut saat itu juga. Pilih plugin yang ingin Anda perbarui otomatis agar situs selalu aman."],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["Pastikan situs selalu aman dengan keamanan canggih dan dapatkan pemberitahuan terkait masalah teknis."],"Error enabling Site accelerator. %(error)s":["Terjadi error saat mengaktifkan Akselerator situs. %(error)s"],"Site accelerator is now speeding up your site!":["Akselerator situs mempercepat situs Anda!"],"Enabling Site accelerator…":["Mengaktifkan Akselerator situs…"],"Error disabling site accelerator. %(error)s":["Terjadi error saat menonaktifkan Akselerator situs. %(error)s"],"Site accelerator is no longer speeding up your site!":["Akselerator situs sudah tidak mempercepat situs Anda!"],"Disabling site accelerator…":["Menonaktifkan akselerator situs…"],"Load pages faster, optimize images, and speed up your visitors’ experience.":["Muat halaman lebih cepat, optimalkan gambar, dan hadirkan pengalaman yang lebih cepat bagi pengunjung."],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["Lengkapi statistik WordPress.com Anda dengan pengamatan mendalam dari Google terkait pengunjung dan pola kunjungan."],"High-speed, high-definition video hosting with no third-party ads.":["Hosting video definisi dan kecepatan tinggi tanpa iklan pihak ketiga."],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["Jadwalkan tweet, pos Facebook, dan pos media sosial lainnya tanpa batas di awal."],"Marketing Automation":["Otomatisasi Pemasaran"],"Activate Jetpack Search":["Aktifkan Pencarian Jetpack"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["Menggantikan pencarian asal WordPress dengan hasil dan penyaringan yang lebih baik, didukung oleh Elasticsearch."],"Start earning":["Mulai meraih hasil"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["WordAds memungkinkan Anda menghasilkan uang dengan menampilkan konten promosi. Mulai meraih hasil sekarang juga."],"Spam is automatically blocked from your comments.":["Spam diblokir secara otomatis dari kolom komentar Anda."],"Spam Filtering":["Penyaringan Spam"],"Browse premium themes":["Jelajahi tema premium"],"Access hundreds of beautifully designed premium themes at no extra cost.":["Akses ratusan tema premium dengan desain menawan tanpa biaya tambahan."],"Try a premium theme":["Coba tema premium"],"View settings":["Lihat pengaturan"],"Create a Jetpack account to view your email followers":["Buat akun Jetpack untuk melihat pengikut email Anda"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["Hadirkan fitur komentar di situs Anda dan undang pengikut untuk mendapatkan pemberitahuan terkait karya terbaru Anda."],"Manage security settings":["Kelola pengaturan keamanan"],"Built-in Performance":["Performa Bawaan"],"Jetpack is ready for the new WordPress editor":["Jetpack siap digunakan dalam penyunting WordPress baru"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["Hari ini, kami memperkenalkan gelombang awal dari blok spesifik dari Jetpack yang dibuat khusus untuk pengalaman penyunting baru: Tombol Pembayaran Simpel, Formulir, Peta, dan Markdown."],"Build your Jetpack site with blocks":["Buat situs Jetpack dengan blok"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["Penyunting baru? Ya! {{a}}Pelajari selengkapnya{{/a}}."],"The features you rely on, adapted for the new WordPress editor.":["Fitur yang dapat diandalkan, diadaptasi untuk penyunting WordPress baru."],"Take me to the new editor":["Bawa saya ke penyunting baru"],"Testing Jetpack Connection":[""],"There was an error testing Jetpack. Error: %(error)s":["Terjadi error saat menguji Jetpack. Error: %(error)s"],"New in Jetpack!":["Baru di Jetpack!"],"Speed up static file load times":["Mempercepat waktu pemuatan file statis"],"Speed up image load times":["Mempercepat waktu pemuatan gambar"],"Enable site accelerator":["Aktifkan akselerator situs"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["Muat halaman lebih cepat dengan mengizinkan Jetpack mengoptimalkan gambar dan menyajikan gambar serta file statis Anda (seperti CSS dan JavaScript) Anda dari jaringan server global kami."],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["Tambahkan lapisan keamanan ekstra untuk situs web Anda dengan mengaktifkan autentikasi aman dan login WordPress.com. Jika Anda memiliki beberapa situs yang mengaktifkan pilihan ini, Anda akan dapat login ke setiap situs dengan kredensial yang sama."],"View your site activity":["Lihat aktivitas situs Anda"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["Lihat daftar kronologis semua perubahan dan pembaruan terhadap situs Anda dengan cara yang tertata dan mudah dibaca."],"Manually Verify ":["Verifikasi Manual "],"Verify with Google":["Verifikasi dengan Google"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["Google akan mengirimkan email berisi aktivitas tertentu yang terjadi pada situs Anda, termasuk indikasi bahwa situs Anda telah {{a1}}diretas{{/a1}}, atau masalah saat {{a2}}menelusuri atau mengindeks{{/a2}} situs Anda."],"or":["atau"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["Memantau lalu lintas kunjungan dan performa situs Anda dari {{a}}Konsol Pencarian Google{{/a}}."],"Your site is verified with Google":["Situs Anda diverifikasi dengan Google"],"Site failed to verify: %(error)s":["Situs gagal memverifikasi: %(error)s"],"Verifying...":["Memverifikasi…"],"Add faster, more advanced searching to your site with Jetpack Professional.":["Tambahkan pencarian yang lebih cepat dan canggih ke situs Anda dengan Jetpack Professional."],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["Ganti pencarian bawaan WordPress dengan Pencarian Jetpack untuk merasakan pengalaman pencarian yang canggih"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["Pencarian Jetpack menggantikan pencarian bawaan dengan pencarian yang cepat, dapat diukur, dapat disesuaikan, dan sangat relevan yang dihosting di cloud WordPress.com. Hasilnya: Pengguna Anda akan menemukan konten yang mereka inginkan, lebih cepat."],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["Pencarian bawaan WordPress cocok untuk situs yang tidak memiliki banyak konten. Namun seiring berkembangnya situs, pencarian menjadi lambat dan memberikan hasil yang kurang relevan."],"Jetpack Search supports many customizations.":["Pencarian Jetpack mendukung banyak kustomisasi."],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["Menggantikan pencarian bawaan dengan pencarian yang cepat, dapat diukur, dapat disesuaikan, dan sangat relevan yang {{a}}dihosting di cloud WordPress.com{{/a}}."],"Site is verified":["Situs diverifikasi"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}Untuk membuat situs memukau yang terlihat dan berfungsi tepat seperti yang Anda inginkan, Jetpack Professional menawarkan akses tanpa batas ke lebih dari 200 tema premium WordPress.{{/p}}{{p}}Jetpack Professional lebih dari sekadar tentang menemukan desain sempurna. ini juga tentang ketenangan pikiran yang menyeluruh saat mengetahui bahwa Anda memiliki dukungan prioritas dari tim pakar kami di seluruh dunia saat Anda membutuhkannya.{{/p}}"],"Spam filtering and priority support.":["Penyaringan spam dan dukungan prioritas."],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["Apabila iklan diaktifkan, Jetpack akan otomatis membuat ads.txt kustom yang disesuaikan untuk situs Anda."],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["Jetpack akan otomatis membuat {{link}}ads.txt{{/link}} kustom yang disesuaikan untuk situs Anda. Jika Anda perlu memasukkan entri tambahan untuk jaringan lain, masukkan di kolom di bawah ini, satu entri per baris."],"Custom ads.txt entries":["Entri ads.txt kustom"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}Untuk membuat situs memukau yang terlihat dan berfungsi tepat seperti yang Anda inginkan, Jetpack Professional menawarkan akses tanpa batas ke lebih dari 200 tema premium WordPress.{{/p}}{{p}}Jetpack Professional lebih dari sekadar tentang menemukan desain sempurna. Ini juga tentang ketenangan pikiran yang menyeluruh: pencadangan real-time, pemindaian malware otomatis, dan dukungan prioritas dari tim global kami yang terdiri dari para ahli memastikan situs Anda selalu aman.{{/p}}"],"Introducing Premium Themes":["Memperkenalkan Tema Premium"]," Premium Themes":[" Tema Premium"],"Privacy information":["Informasi privasi"],"Enable Lazy Loading for images":["Aktifkan Lazy Loading untuk gambar"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["Lazy-loading untuk gambar akan meningkatkan kecepatan situs Anda dan menghasilkan pengalaman penayangan yang lebih lancar. Gambar akan dimuat saat pengunjung menggulir layar, bukannya sekaligus di awal."],"Performance & speed":["Performa & kecepatan"],"Enable high-speed, ad-free video player":["Aktifkan pemutar video berkecepatan tinggi dan bebas iklan"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["Jadikan konten yang Anda publikasikan lebih memikat dengan video resolusi tinggi. Dengan Jetpack Video, Anda dapat menyesuaikan pemutar media dan menyajikan video berkecepatan tinggi, bebas iklan, dan tanpa cap kepada pengunjung situs. Video dihosting di server WordPress.com dan tidak mengurangi ruang dari paket hosting Anda!"],"Video":["Video"],"Carousel color scheme":["Skema warna karusel"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Data Exif menampilkan detail teknis tambahan dari suatu foto kepada pemirsa, seperti panjang fokus, apertur, dan ISO."],"Show photo Exif metadata in carousel (when available)":["Tampilkan metadata Exif foto dalam karusel (jika tersedia)"],"Display images in a full-screen carousel gallery":["Tampilkan gambar dalam galeri karusel layar penuh"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["Buat slideshow karusel layar penuh untuk gambar di pos dan halaman Anda. Galeri karusel cocok untuk tampilan seluler dan mendorong pengunjung situs untuk berinteraksi dengan foto."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["Bilah peralatan WordPress.com menggantikan bilah peralatan admin WordPress asal dan menyederhanakan pengalaman penggunaan WordPress. Fitur ini menawarkan akses sekali klik untuk mengelola semua situs Anda, memperbarui profil WordPress.com Anda, melihat pemberitahuan, dan mengetahui kabar terbaru dari situs yang Anda ikuti di Pembaca."],"Portfolios shortcode: [portfolio]":["Shortcode portofolio: [portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["Gunakan {{portfolioLink}}portofolio{{/portfolioLink}} di situs untuk memajang karya terbaik Anda. Jika tema Anda tidak mendukung Jetpack Portfolios, Anda masih bisa menggunakan Shortcode yang simpel untuk menampilkannya di situs."],"Testimonials shortcode: [testimonials]":["Shortcode testimoni: [testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["Tambahkan {{testimonialLink}}testimoni{{/testimonialLink}} ke situs web Anda untuk menarik pelanggan baru. Jika tema Anda tidak mendukung Jetpack Testimonials, Anda masih bisa menggunakan shortcode yang simpel untuk menampilkannya di situs."],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["Mesin pencari tidak dapat mengakses situs Anda saat ini. Jika ingin menjadikan situs Anda dapat diakses, periksa {{a}}Pengaturan pembacaan{{/a}} dan aktifkan \"Visibilitas Mesin Pencari\"."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["Kabar baik: Jetpack mengirimkan peta situs Anda secara otomatis ke semua mesin pencari besar untuk pengindeksan."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["Peta situs adalah file yang digunakan mesin pencari seperti Google atau Bing untuk mengindeks situs web. Hal ini dapat membantu meningkatkan peringkat Anda di hasil pencarian. Jika fitur ini diaktifkan, Jetpack akan membuat peta situs dan memperbaruinya secara otomatis saat konten di situs Anda berubah."],"Configure related posts in the Customizer":["Konfigurasikan pos terkait di Customizer"],"Highlight related content with a heading":["Soroti konten terkait dengan judul"],"View security scan details":["Lihat detail pemindaian keamanan"],"View backup history":["Lihat riwayat pencadangan"],"Show a thumbnail image where available":["Tampilkan gambar mini jika tersedia"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["Untuk informasi selengkapnya tentang seberapa spesifik fitur Jetpack menggunakan data dan melacak aktivitas, lihat {{privacyCenterLink}}Pusat Kebijakan{{/privacyCenterLink}} kami."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["Kami menggunakan alat pelacakan lainnya, termasuk beberapa dari pihak ketiga. {{cookiePolicyLink}}Baca tentang hal ini{{/cookiePolicyLink}} dan cara mengontrolnya."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["Informasi ini membantu kami menyempurnakan produk, membuat pemasaran kepada Anda jadi lebih relevan, menyesuaikan pengalaman WordPress.com Anda, dan lainnya seperti yang dijelaskan dalam {{pp}}kebijakan privasi{{/pp}} kami."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["Berbagi informasi dengan alat analitik kami tentang penggunaan layanan Anda saat sudah login ke akun WordPress.com Anda. {{cookiePolicyLink}}Pelajari selengkapnya{{/cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["Fitur ini dikelola oleh administrator situs. {{link}}Pelajari selengkapnya{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["Fitur ini telah dinonaktifkan oleh administrator situs. {{link}}Pelajari selengkapnya{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["Fitur ini telah diaktifkan oleh administrator situs. {{link}}Pelajari selengkapnya{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["%(moduleName)s telah dinonaktifkan oleh administrator situs. {{link}}Pelajari selengkapnya{{/link}}."],"This feature has been disabled by a site administrator.":["Fitur ini telah dinonaktifkan oleh administrator situs."],"%(moduleName)s has been disabled by a site administrator.":["%(moduleName)s telah dinonaktifkan oleh administrator situs."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["Anda dapat meletakkan iklan tambahan menggunakan widget Iklan. {{link}}Cobalah!{{/link}}"],"Configure your notification settings":["Konfigurasikan pengaturan pemberitahuan Anda"],"Monitor your site's downtime":["Pantau waktu tidak aktif situs Anda"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["Pencarian Jetpack adalah alat yang andal untuk kemampuan pencarian yang disertakan dalam WordPress."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["File situs Anda dipindai secara teratur untuk modifikasi tidak sah atau mencurigakan yang dapat menggangu keamanan data Anda."],"Plugin needs updating.":["Plugin perlu diperbarui.","Plugin perlu diperbarui."],"%(number)s":["%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Pembaruan Plugin Jetpack memungkinkan Anda memilih plugin mana yang akan diperbarui secara otomatis."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack akan mengoptimalkan gambar Anda dan menyajikannya dari lokasi server yang terdekat dengan pengunjung situs. Dengan menggunakan jaringan pengiriman konten global, kami akan meningkatkan kecepatan pemuatan situs Anda."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":[""],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Pencadangan Jetpack memungkinkan Anda memulihkan dan mengunduh cadangan dengan mudah dari waktu tertentu."],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet memeriksa komentar dan pengiriman formulir kontak Anda ke database global atau spam kami."],"Privacy Information":["Informasi Privasi"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["VideoPress memungkinkan Anda mengunggah video dari komputer Anda untuk dihosting di WordPress.com, daripada di server host Anda. Anda kemudian dapat memasukkannya ke situs Jetpack yang Anda hosting sendiri. "],"Add the Search (Jetpack) widget to your sidebar":["Tambahkan widget Pencarian (Jetpack) ke bilah sisi Anda"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["Memberikan pengunjung Anda pengalaman pencarian yang bagus dengan membiarkan mereka menyaring dan menyortir dengan cepat, hasil pencarian yang relevan."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["Mengaktifkan tema yang ringan dan ramah perangkat seluler yang akan ditampilkan ke pengunjung pada perangkat seluler."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["Memuat pos berikutnya secara otomatis saat pembaca hampir sampai di bagian bawah halaman."],"Allows you to publish new posts by sending an email to a special address.":["Memungkinkan Anda untuk memublikasikan pos dengan mengirim email ke alamat khusus."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["Memungkinkan Anda membuat konten dengan tautan, daftar, dan gaya lainnya menggunakan sintaks Markdown."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["Memeriksa tata bahasa dan ejaan konten Anda, penggunaan kata yang salah, dan gaya bahasa selagi Anda menulis."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["Menyediakan tag tersembunyi yang diperlukan untuk memverifikasi situs WordPress Anda dengan berbagai layanan."],"Displays information on your site activity, including visitors and popular posts or pages.":["Menampilkan informasi pada aktivitas situs Anda, termasuk pengunjung, dan pos atau halaman populer."],"Allows you to optimize your site and its content for better results in search engines.":["Memungkinkan Anda mengoptimalkan situs dan kontennya untuk hasil yang lebih baik di mesin pencari."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["Mengintegrasikan situs WordPress Anda dengan Google Analytics, platform yang menawarkan wawasan lalu lintas, pengunjung, dan konversi Anda."],"Displays high-quality ads on your site that allow you to earn income.":["Menampilkan iklan berkualitas tinggi di situs Anda yang memungkinkan Anda meraih pendapatan."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["Menambahkan tombol berbagi ke konten Anda agar pengunjung dapat membagikannya di situs media sosial."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["Memungkinkan Anda membagikan konten terbaru secara otomatis di situs media sosial, termasuk Facebook dan Twitter."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["Menambahkan tombol suka ke konten Anda sehingga pengunjung dapat menunjukkan apresiasi atau kesenangan mereka."],"Allows registered users to log in to your site with their WordPress.com accounts.":["Memungkinkan pengguna yang terdaftar untuk login ke situs Anda dengan akun WordPress.com mereka."],"Protects your site from traditional and distributed brute force login attacks.":["Melindungi situs Anda dari serangan login paksa tradisional dan didistribusikan."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["Mencadangkan situs Anda ke server WordPress.com global, memungkinkan Anda memulihkan konten saat dalam keadaan darurat atau error."],"Removes spam from comments and contact forms.":["Menghapus spam dari komentar dan formulir kontak."],"We are committed to your privacy and security. ":["Kami berkomitmen untuk privasi dan keamanan Anda. "],"View all Jetpack plans":["Tampilkan semua paket Jetpack"],"Manage your plan":["Kelola paket Anda"],"Your Plan":["Paket Anda"],"You’re currently on Jetpack %(plan)s.":["Anda saat ini sedang menggunakan %(plan)s Jetpack."],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["Memungkinkan pengguna berlangganan pos dan komentar Anda serta menerima pemberitahuan konten baru melalui email."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["Menggantikan formulir komentar standar WordPress dengan sistem komentar baru yang mencakup pilihan login media sosial."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}Aktifkan{{/a}} untuk mengganti pencarian bawaan WordPress dengan Pencarian Jetpack untuk merasakan pengalaman pencarian yang canggih."],"Add Search (Jetpack) Widget":["Tambahkan Widget Pencarian (Jetpack)"],"Jetpack Search is powering search on your site.":["Pencarian Jetpack mendukung pencarian pada situs Anda."],"Manage your plugins":["Kelola plugin Anda"],"Moderate comments":["Moderasi komentar"],"Error updating privacy settings. %(error)s":["Terjadi error saat memperbarui pengaturan privasi %(error)s"],"Updated privacy settings.":["Pengaturan privasi yang diperbarui."],"Updating privacy settings…":["Memperbarui pengaturan privasi…"],"Add Jetpack Search Widget":["Tambahkan Widget Pencarian Jetpack"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["Tambahkan widget Pencarian Jetpack ke bilah sisi Anda untuk mengonfigurasi pengurutan dan penyaring."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["Suite keamanan penuh, alat otomatisasi pemasaran dan pendapatan, hosting video dan tema tanpa batas, pencarian yang ditingkatkan, dan dukungan prioritas."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["Suite keamanan penuh, alat otomatisasi pemasaran dan pendapatan, hosting video tanpa batas, dan dukungan prioritas."],"Daily backups, spam filtering, and priority support.":["Pencadangan harian, penyaringan spam, dan dukungan prioritas."],"Always-on Security":["Keamanan yang selalu aktif"],"Activate video hosting":[""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Pencadangan real-time untuk semua data situs Anda dengan ruang penyimpanan tanpa batas, pemulihan sekali klik, pemindaian keamanan otomatis, dan dukungan prioritas."],"Design the perfect website":["Desain situs web yang sempurna"],"Set up Jetpack":["Siapkan Jetpack"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["Pencadangan real-time untuk semua data situs dengan ruang penyimpanan tanpa batas, pemulihan sekali klik, dan pemindaian keamanan otomatis."],"Jetpack Search":["Pencarian Jetpack"],"Jetpack version %(version)s":["Jetpack versi %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["Situs Anda telah dicadangkan secara real time dan dipindai secara berkala untuk mendeteksi ancaman keamanan."],"Daily backup of all your site data with unlimited space and one-click restores":["Pencadangan harian untuk semua data situs Anda dengan ruang penyimpanan tanpa batas dan pemulihan sekali klik"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Pencadangan real-time untuk semua data situs Anda dengan ruang penyimpanan tanpa batas, pemulihan sekali klik, pemindaian keamanan otomatis, dan resolusi ancaman sekali klik."],"View your security activity":["Lihat aktivitas keamanan Anda"]," (powered by VaultPress).":[" (didukung oleh VaultPress)."],"Customize Search Widget":["Penyesuaian Widget Pencarian"],"Please correct the issue below and try again.":["Perbaiki masalah di bawah ini dan coba lagi.","Perbaiki masalah yang dicantumkan di bawah ini dan coba lagi."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["Kami akan memastikan situs Anda bebas dari ancaman keamanan. Kami akan memberi tahu Anda jika menemukan ancaman keamanan."],"Your site is being backed up in real-time.":["Situs Anda telah dicadangkan secara real-time."],"Jetpack version":["Versi Jetpack"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}Lihat aktivitas situs Anda{{/a}} dalam satu feed."],"Activity":["Aktivitas"],"Confirm each new phrase you add by pressing enter.":["Konfirmasikan setiap frasa baru yang Anda tambahkan dengan menekan tombol enter."],"{{a}}View details{{/a}}":["{{a}}Lihat detail{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["Terima kasih telah memilih Jetpack Professional. Jetpack sedang mencadangkan konten Anda secara real-time, mengindeks konten Anda untuk pencarian, memindai ancaman keamanan, dan memberikan akses ke tema premium."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["Dengan Jetpack Professional, Anda bisa membuat situs yang sempurna dengan salah satu dari 300 lebih tema WordPress dengan desain profesional, yang mencakup lebih dari 100 tema premium. Sesuaikan konten Anda dengan berbagai widget, atau tambahkan video tanpa batas ke pos dan halaman Anda, yang ditampilkan tanpa iklan atau watermark."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["Menumbuhkan pengikut adalah hal yang mudah dengan paket Professional, berkat berbagi dan penjadwalan konten, alat SEO, dan pilihan langganan bawaan. Anda bisa memonetisasi situs dengan tombol Pembayaran Simpel dan iklan dalam baris, serta memantau keberhasilan upaya Anda dengan integrasi ke Google Analytics."],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Paket Jetpack menyediakan semua yang Anda butuhkan untuk mengamankan hasil kerja keras Anda, yang meliputi pencadangan dan pemindaian malware sesuai permintaan dengan pemulihan satu klik dan resolusi masalah. Situs Anda akan sepenuhnya terlindungi dari spam, kode berbahaya, dan upaya login paksa."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Mulai jelajahi Jetpack Professional sekarang untuk melihat semua manfaat paket baru Anda."],"Install premium themes":["Instal tema premium"],"Review SEO features":["Lihat fitur SEO"],"Welcome Professional":["Sambutlah Professional"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["Terima kasih telah memilih paket Jetpack Premium. Jetpack sedang mencadangkan situs Anda, memindai ancaman keamanan, dan mengaktifkan fitur monetisasi."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["Dengan Jetpack Premium, Anda bisa menciptakan situs yang sempurna, apa pun tujuannya. Sesuaikan tampilan situs dengan satu dari 200 lebih tema gratis, atau sempurnakan konten Anda dengan video HD hingga 13 GB, semuanya di-host tanpa iklan maupun watermark."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Dengan alat berbagi yang andal di Jetpack, Anda bisa otomatis membagikan pos terbaru ke media sosial, atau menjadwalkan konten Anda agar dibagikan ulang kapan pun Anda pilih. Dan sembari menumbuhkan pengikut, Anda bisa menumbuhkan bisnis dengan bebagai alat seperti tombol pembayaran dan iklan."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Mulai jelajahi Jetpack Premium sekarang untuk melihat semua manfaat paket baru Anda."],"Monetize your site with ads":["Monetisasi situs Anda dengan iklan"],"Welcome Premium":["Sambutlah Premium"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["Terima kasih telah memilih paket Jetpack Personal. Jetpack sedang mencadangkan situs Anda dan memindai ancaman keamanan."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["Dengan Jetpack Personal, Anda memiliki akses ke lebih dari 100 tema WordPress gratis yang didesain secara profesional. Pilih tema yang paling cocok dengan situs Anda dan sesuaikan warna, gambar, atau tambahkan berbagai widget baru."],"Got it":[""],"Welcome personal":["Sambutlah Personal"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["Dengan mengeklik tombol di bawah, Anda menyetujui {{tosLink}}Ketentuan Layanan{{/tosLink}} kami dan bersedia {{shareDetailsLink}}membagikan detail{{/shareDetailsLink}} kepada WordPress.com."],"Jetpack Stats People":["Pengamat Statistik Jetpack"],"Hello there! Your stats have been activated.":["Halo! Statistik Anda telah diaktifkan."],"Just give us a little time to collect data so we can display it for you here.":["Beri kami waktu untuk mengumpulkan data sehingga kami bisa menampilkannya untuk Anda di sini."],"Okay, got it!":["Oke, mengerti!"],"Display ads below posts on":["Tampilkan iklan di bawah pos pada"],"Additional ad placements":["Penempatan iklan tambahan"],"Top of each page":["Di bagian atas setiap halaman"],"Second ad below post":["Iklan kedua di bawah pos"],"Archives":["Arsip"],"Explore Professional":["Jelajahi Professional"],"Compare All Plans":["Bandingkan Semua Paket"],"Person with laptop":["Orang menggunakan laptop"],"Your Jetpack site is ready to go!":["Situs Jetpack Anda siap meluncur!"],"Stars":["Bintang"],"Jupiter":["Jupiter"],"Welcome to Jetpack Personal":["Selamat datang di Jetpack Personal"],"Welcome to Jetpack Premium":["Selamat datang di Jetpack Premium"],"Welcome to Jetpack Professional":["Selamat datang di Jetpack Professional"],"Schedule posts":[""],"Activate Publicize":["Aktifkan Fitur Publikasikan"],"Your site is backed up.":["Situs Anda telah dicadangkan."],"Image Performance":["Kinerja Gambar"],"Get WordPress Apps for every device":["Dapatkan Aplikasi WordPress untuk perangkat apa pun"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Kelola semua situs Anda dari satu dasbor: publikasikan konten, lacak statistik, moderasi komentar, dan banyak lagi lainnya dari mana pun Anda berada."],"I already use this app.":["Saya sudah menggunakan aplikasi ini."],"Create address":["Buat alamat"],"Priority support":["Dukungan prioritas"],"Add sharing buttons to your posts":["Menambahkan tombol berbagi ke pos Anda"],"Automatically share your posts to social networks":["Membagikan pos secara otomatis ke jaringan sosial"],"Updating settings…":["Memperbarui pengaturan…"],"Updating Post by Email address…":["Memperbarui Pos menurut Alamat email…"],"Your paid plan gives you access to prioritized Jetpack support.":["Paket berbayar Anda memberikan akses ke dukungan Jetpack prioritas."],"You have paid for backups but they're not yet active.":["Anda telah membayar untuk pencadangan, tetapi belum aktif."],"You have paid for backups and security scanning but they’re not yet active.":["Anda telah membayar untuk pencadangan dan pemindaian keamanan, tetapi belum aktif."],"Click \"Set Up\" to finish installation.":["Klik \"Siapkan\" untuk menyelesaikan penginstalan."],"Checking site status…":["Memeriksa status situs…"],"Pages":["Halaman"],"We're here to help":["Kami siap membantu"],"Jetpack comes with free, basic support for all users.":["Jetpack hadir dengan dukungan dasar gratis untuk semua pengguna."],"Ask a question":["Ajukan pertanyaan"],"Search our support site":["Cari di situs dukungan kami"],"Get a faster resolution to your support questions.":["Dapatkan resolusi cepat untuk pertanyaan Anda terkait dukungan."],"Host fast, high-quality, ad-free video.":["Host video dengan cepat, berkualitas tinggi, dan bebas iklan."],"Generate income with high-quality ads.":["Hasilkan pendapatan dengan iklan berkualitas tinggi."],"Real-time site backups and automatic threat resolution.":["Pencadangan situs real-time dan resolusi ancaman otomatis."],"Protect against data loss, malware, and malicious attacks.":["Melindungi terhadap kehilangan data, malware, dan serangan berbahaya."],"Integrate easily with Google Analytics.":["Integrasi mudah dengan Google Analytics."],"Help your content get found and shared with SEO tools.":["Membantu konten Anda agar mudah ditemukan dan dibagikan dengan alat SEO."],"Protect your site from spam.":["Melindungi situs Anda dari spam."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["Situs ini tidak tersambung ke WordPress.com. Silakan minta administrator situs untuk menyambungkan."],"Spam filtering":["Filter spam"],"Daily, automated malware scanning":["Pemindaian malware otomatis setiap hari"],"Daily, automated backups (unlimited storage)":["Pencadangan otomatis setiap hari (penyimpanan tanpa batas)"],"Daily, automated malware scanning with automated resolution":["Pemindaian malware otomatis setiap hari dengan resolusi otomatis"],"Unlimited, high-speed video hosting":[""],"SEO preview tools":["Alat pratinjau SEO"],"Site stats, related content, and sharing tools":["Statistik situs, konten terkait, dan alat berbagi"],"Brute force attack protection and downtime monitoring":["Perlindungan terhadap peretasan kata sandi dan pemantauan masa tidak aktif"],"Unlimited, high-speed image hosting":["Hosting gambar berkecepatan tinggi tanpa batas"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["Dengan memutus sambungan %(siteName)s dari WordPress.com, Anda tak lagi dapat mengakses:"],"Read more about Jetpack benefits":["Baca selengkapnya mengenai manfaat Jetpack"],"An Automattic Airline":["Persembahan dari Automattic"],"Manage site connection":["Kelola sambungan situs"],"Connect your account to WordPress.com to view more stats":["Sambungkan akun Anda ke WordPress.com untuk melihat lebih banyak statistik"],"Theme enhancements":["Peningkatan tema"],"Load more posts using the default theme behavior":["Muat lebih banyak pos dengan perilaku tema asal"],"Load more posts in page with a button":["Muat lebih banyak pos dalam halaman dengan tombol"],"Load more posts as the reader scrolls down":["Muat lebih banyak pos selagi pembaca menggulir halaman ke bawah"],"Theme support required.":["Dukungan tema diperlukan."],"Learn more about adding support for Infinite Scroll to your theme.":["Pelajari lebih lanjut mengenai cara menambahkan dukungan Guliran Tak Terbatas ke tema Anda."],"Use excerpts instead of full posts on front page and archive pages":["Gunakan kutipan sebagai ganti pos lengkap pada halaman depan dan halaman arsip"],"Show featured images":["Tampilkan gambar unggulan"],"Enable the WordPress.com toolbar":["Aktifkan bilah peralatan WordPress.com"],"Writing tools available to you will be shown here when an administrator enables them.":["Peralatan menulis yang tersedia untuk Anda akan ditampilkan di sini ketika administrator mengaktifkannya."],"Portfolios":["Portofolio"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Penting dicatat bahwa {{b}}verifikasi situs web Anda dengan layanan ini tidak diperlukan{{/b}} agar situs Anda diindeks dengan mesin pencarian. Untuk menggunakan alat mesin pencarian canggih ini dan memverifikasi situs Anda dengan sebuah layanan, tempelkan kode Tag HTML di bawah. Baca {{support}}petunjuk lengkapnya{{/support}} jika Anda mengalami masalah. Layanan verifikasi yang didukung: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, dan {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["Membuat peta situs XML"],"Collecting valuable traffic stats and insights":["Mengumpulkan statistik dan wawasan lalu-lintas yang berharga"],"The image helps collect stats, but should work when hidden.":["Gambar ini membantu mengumpulkan statistik, tetapi masih dapat berfungsi bila disembunyikan."],"Count logged in page views from":["Hitung penayangan halaman login dari"],"Allow stats reports to be viewed by":["Memungkinkan laporan statistik untuk dilihat oleh"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["Anda dapat mengubah pengaturan ini jika Anda menginginkan kontrol lebih lanjut. Baca selengkapnya tentang apa yang dapat Anda lakukan untuk {{a}}mengoptimalkan SEO situs Anda{{/a}}."],"Configure your SEO settings":["Konfigurasikan pengaturan SEO Anda"],"In \"Upgrade\"":["Di \"Upgrade\""],"Configure your Google Analytics settings":["Konfigurasikan pengaturan Google Analytics Anda"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Tampilkan iklan pada artikel pertama di halaman beranda atau pada akhir setiap halaman dan pos. Letakkan iklan tambahan di bagian atas situs Anda dan di area widget untuk meningkatkan pendapatan."],"Enable ads and display an ad below each post":["Aktifkan iklan dan tampilkan iklan di bawah setiap pos"],"Configure your sharing buttons":["Konfigurasikan tombol berbagi Anda"],"Connect your social media accounts":["Sambungkan akun media sosial Anda"],"Match accounts using email addresses":["Cocokkan akun menggunakan alamat email"],"Require accounts to use WordPress.com Two-Step Authentication":["Minta akun untuk menggunakan Autentikasi Dua Langkah WordPress.com"],"Add to whitelist":["Tambahkan ke daftar putih"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["Anda dapat membuat daftar putih untuk alamat IP atau serangkaian alamat agar tidak diblokir oleh Jetpack. IPv4 dan IPv6 diterima. Untuk menentukan rentang, masukkan nilai rendah dan nilai tinggi yang dipisahkan oleh tanda hubung. Misalnya: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["Situs Anda telah dicadangkan dan bebas dari ancaman."],"Checking your spam protection…":["Memeriksa perlindungan spam Anda…"],"Fetching key…":["Mengambil kunci…"],"Your site needs an Antispam key.":["Situs Anda memerlukan kunci Antispam."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["Ada masalah dengan kunci API Antispam Anda. {{a}}Pelajari selengkapnya{{/a}}."],"Your site is not protected from spam.":["Situs Anda tidak terlindungi dari spam."],"Your Antispam key is valid.":["Kunci Antispam Anda valid."],"Your site is protected from spam.":["Situs Anda terlindungi dari spam."],"Checking key…":["Memeriksa kunci…"],"Your API key":["Kunci API Anda"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["Jika Anda belum memiliki kunci API, {{a}}dapatkan kunci API Anda di sini{{/a}}, dan Anda akan dipandu untuk melalui proses mendapatkan kunci API."],"No search results found for %(term)s":["Tidak menemukan hasil pencarian untuk %(term)s"],"Enter a search term to find settings or close search.":["Masukkan istilah pencarian untuk menemukan pengaturan atau tutup pencarian."],"Connections":["Sambungan"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Situs Anda berada dalam Mode Pengembangan sehingga tidak dapat disambungkan ke WordPress.com."],"Your site is connected to WordPress.com.":["Situs Anda tersambung ke WordPress.com."],"You are the Jetpack owner.":["Anda adalah pemilik Jetpack."],"Connected as {{span}}%(username)s{{/span}}":["Tersambung sebagai {{span}}%(username)s{{/span}}"],"View your Email Followers":["Lihat Pengikut Email Anda"],"Color scheme":["Skema warna"],"Enable Markdown use for comments.":["Aktifkan penggunaan Markdown untuk komentar."],"Updated settings.":["Pengaturan diperbarui."],"Error updating settings. %(error)s":["Error saat memperbarui pengaturan. %(error)s"],"Regenerated Post by Email address.":["Membuat Ulang Pos dengan Alamat email."],"Error regenerating Post by Email address. %(error)s":["Error saat membuat ulang Pos dengan Alamat email. %(error)s"],"Updated settings. Refreshing page…":["Pengaturan diperbarui. Menyegarkan halaman…"],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["Saat ini dalam {{a}}Mode Pengembangan{{/a}} (beberapa fitur dinonaktifkan) karena:"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}Penyaring jetpack_development_mode aktif{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}Konstanta JETPACK_DEV_DEBUG didefinisikan{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}Ada titik yang hilang pada URL situs Anda (contohnya, http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Konfigurasikan Google Analytics"],"Activate Google Analytics":["Aktifkan Google Analytics"],"Download the free apps":["Unduh Aplikasi Gratisnya"],"Upgrade Focus: VideoPress For Weddings":["Fokus Upgrade: VideoPress Untuk Pernikahan"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}Kini Anda juga dapat mengonfigurasi pos terkait di Customizer. {{ExternalLink}}Cobalah!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["Sebagai pengaturan asal, iklan ditampilkan di akhir setiap halaman, pos, atau artikel pertama di halaman depan Anda. Anda juga bisa menambahkannya di atas situs dan ke segala area widget untuk meningkatkan pendapatan!"],"Display an ad unit at the top of your site.":["Tampilkan unit iklan di bagian atas situs."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["Dengan mengaktifkan iklan, berarti Anda menyetujui {{link}}Ketentuan Layanan{{/link}} Iklan Automattic."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Ada kesalahan konfigurasi pada server Anda, sehingga Jetpack Protect tidak bisa melindungi situs secara efektif."],"In \"Mobile\"":["Di \"Mobile\""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Konfigurasikan pengaturan Pemberitahuan monitor di WordPress.com{{/link}}"],"View your earnings":["Lihat pendapatan Anda"],"Configure site SEO":[""],"Activate SEO tools":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["Untuk memulai, klik Tambah Media di penyunting pos Anda dan unggah video; kami akan menangani selebihnya!"],"Video Hosting":["Hosting Video"],"SEO Tools":["Alat SEO"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Alat SEO tingkat lanjut untuk membantu agar situs Anda muncul saat orang mencari konten yang relevan."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["Cara termudah untuk mengunggah video bebas iklan dan tanpa merek ke situs Anda. Anda mendapatkan statistik pemutaran dan pembagian video, selain itu pemutarnya ringan dan responsif."],"You are running Jetpack on a staging server.":["Anda sedang menjalankan Jetpack di server staging."],"More Info":["Informasi Selengkapnya"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Kelola keterlihatan Suka dari Pengaturan Modul Berbagi{{/a}}"],"Your current IP: %(ip)s":["IP Anda Saat Ini: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["Ada pengaturan yang belum disimpan di tab ini yang akan hilang jika Anda menutupnya. Lanjutkan?"],"This will reset all Jetpack options, are you sure?":["Tindakan ini akan mengatur ulang semua pilihan Jetpack. Anda yakin?"],"Search for a Jetpack feature.":["Cari fitur Jetpack."],"Configure your Security Scans":["Konfigurasikan Pemindaian Keamanan Anda"],"Subscriber":["Pelanggan"],"Big iPhone/iPad Update Now Available":["Tersedia Pembaruan Besar untuk iPhone/iPad"],"The WordPress for Android App Gets a Big Facelift":["Desain WordPress untuk Aplikasi Android Mengalami Perubahan Besar"],"WordPress.com Likes are:":["Tombol Suka WordPress.com:"],"Comments headline":["Sorotan komentar"],"A few catchy words to motivate your readers to comment.":["Tambahkan sepatah dua patah kata yang menarik untuk memancing komentar pembaca."],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":["Menampilkan pilihan \"ikuti komentar\" dalam formulir komentar"],"Put a chart showing 48 hours of views in the admin bar":["Meletakkan bagan yang menunjukkan tampilan selama 48 jam pada bilah admin"],"Hide the stats smiley face image":["Menyembunyikan gambar smiley statistik"],"Whitelisted IP addresses":["Alamat IP dalam daftar putih"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Menampilkan iklan untuk aplikasi seluler WordPress di footer tema seluler"],"Copied!":["Telah disalin!"],"Highlight and copy the following text to your clipboard:":["Sorot dan salin teks berikut ke clipboard:"],"Regenerate address":["Buat ulang alamat"],"Automatically proofread content when: ":["Memeriksa ejaan konten secara otomatis ketika: "],"A post or page is first published":["Sebuah pos atau halaman telah diterbitkan pertama kali"],"A post or page is updated":["Sebuah pos atau halaman telah diperbarui"],"Automatic Language Detection":["Deteksi Bahasa Otomatis"],"The proofreader supports English, French, German, Portuguese and Spanish.":["Fitur pemeriksaan ulang mendukung bahasa Inggris, Prancis, Jerman, Portugis, dan Spanyol."],"Enable proofreading for the following grammar and style rules: ":["Aktifkan pemeriksaan ulang untuk peraturan tata bahasa dan gaya bahasa berikut: "],"Add a phrase":["Tambahkan frasa"],"Cheatin' uh?":["Curang ya?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}Apakah Anda bersedia memberi tahu kami alasan Anda tidak mengisi koneksi Jetpack dalam {{a}}survei 2 pertanyaan{{/a}} ini?{{/p}}{{p}}Koneksi Jetpack diperlukan agar fitur-fitur keamanan dan lalu lintas gratis kami dapat berfungsi.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Selamat datang di {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["Jetpack Anda telah tersambung."],"You're fueled up and ready to go, Jetpack is now active.":["Bahan bakar telah terisi dan siap meluncur, Jetpack telah aktif."],"You're fueled up and ready to go.":["Bahan bakar telah terisi dan siap meluncur."],"You are currently running a development version of Jetpack.":["Saat ini Anda menjalankan Jetpack versi pengembangan."],"Submit Beta feedback":["Kirim umpan balik Beta"],"What would you like to see on your Jetpack Dashboard?":["Apa yang ingin Anda lihat di Dasbor Jetpack?"],"Let us know!":["Beri tahu kami!"],"Saving…":["Menyimpan…"],"Save Settings":["Simpan Pengaturan"],"Jetpack Stats Icon":["Ikon Statistik Jetpack"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Aktifkan Statistik Situs{{/a}} untuk melihat detail statistik, jumlah suka, pengikut, pelanggan, dan lainnya! {{a1}}Pelajari Selengkapnya{{/a1}}"],"Activate Site Stats":["Aktifkan Statistik Situs"],"Security Scanning":["Pemindaian Keamanan"],"Site Backups":["Cadangan Situs"],"Upgrade":["Upgrade"],"ACTIVE":["AKTIF"],"Your site is on Development Mode":["Situs Anda dalam Mode Pengembangan"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Setelah tersambung, Anda dapat meng-upgrade ke paket berbayar untuk menikmati fitur keamanan kelas dunia, alat perlindungan terhadap spam, dan dukungan prioritas."],"View your spam stats":["Lihat statistik spam Anda"],"View your security dashboard":["Lihat dasbor keamanan Anda"],"The site is in Development Mode, so you can not connect to WordPress.com.":["Situs berada dalam Mode Pengembangan sehingga tidak dapat terhubung ke WordPress.com."],"Link your account to WordPress.com to get the most out of Jetpack.":["Tautkan akun Anda ke WordPress.com untuk memanfaatkan Jetpack semaksimal mungkin."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["Untuk pemindaian ancaman keamanan yang otomatis dan komprehensif, {{a}}instal dan aktifkan{{/a}} VaultPress."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["Untuk pemindaian ancaman keamanan yang otomatis dan komprehensif, {{a}}upgrade akun Anda{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack secara aktif memblokir upaya login berbahaya. Data akan ditampilkan di sini sebentar lagi!"],"Total malicious attacks blocked on your site.":["Total serangan berbahaya yang diblokir pada situs Anda."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Aktifkan Perlindungan{{/a}} untuk memastikan situs Anda terlindung dari upaya masuk berbahaya."],"All plugins are up-to-date. Awesome work!":["Semua plugin sudah terbaru. Kerja bagus!"],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":["Keamanan"],"Performance":["Performa"],"Backups":["Pencadangan"],"{{a}}View backup details{{/a}}.":["{{a}}Lihat detail cadangan{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["Untuk mencadangkan seluruh situs secara otomatis, silakan {{a}}instal dan aktifkan{{/a}} VaultPress."],"Unavailable in Dev Mode.":["Tidak tersedia dalam Mode Pengembangan."],"Spam Protection":["Perlindungan Spam"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["Untuk pertahanan terhadap spam paling canggih, {{a}}instal Akismet{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["Untuk pertahanan terhadap spam paling canggih, {{a}}aktifkan Akismet{{/a}}."],"Invalid key":["Kunci tidak valid"],"Unavailable in Dev Mode":["Tidak tersedia dalam Mode Pengembangan"],"Activating recommended features…":["Mengaktifkan fitur yang disarankan…"],"Recommended features active.":["Fitur yang disarankan telah aktif."],"Recommended features failed to activate. %(error)s":["Fitur yang disarankan gagal diaktifkan. %(error)s"],"Activating %(slug)s…":["Mengaktifkan %(slug)s…"],"%(slug)s has been activated.":["%(slug)s telah diaktifkan."],"%(slug)s failed to activate. %(error)s":["%(slug)s gagal diaktifkan. %(error)s"],"Deactivating %(slug)s…":["Menonaktifkan %(slug)s…"],"%(slug)s has been deactivated.":["%(slug)s telah dinonaktifkan."],"%(slug)s failed to deactivate. %(error)s":["%(slug)s gagal dinonaktifkan. %(error)s"],"Updating %(slug)s settings…":["Memperbarui pengaturan %(slug)s…"],"Updated %(slug)s settings.":["Pengaturan %(slug)s diperbarui."],"Error updating %(slug)s settings. %(error)s":["Error saat memperbarui pengaturan %(slug)s. %(error)s"],"Updating %(slug)s address…":["Memperbarui alamat %(slug)s…"],"Regenerated %(slug)s address .":["Membuat ulang alamat %(slug)s."],"Error regenerating %(slug)s address. %(error)s":["Error saat membuat ulang alamat %(slug)s. %(error)s"],"Resetting Jetpack options…":["Mengatur ulang pilihan Jetpack…"],"Options reset.":["Pilihan diatur ulang."],"Options failed to reset.":["Pilihan gagal diatur ulang."],"There was an error disconnecting Jetpack. Error: %(error)s":["Terjadi error saat memutus sambungan Jetpack. Error: %(error)s"],"Unlinking from WordPress.com":["Menghapus tautan dari WordPress.com"],"Unlinked from WordPress.com.":["Tautan dihapus dari WordPress.com."],"Error unlinking from WordPress.com. %(error)s":["Error saat menghapus tautan dari WordPress.com. %(error)s"],"At A Glance":["Selayang Pandang"],"Clichés":["Klise"],"Dashboard":["Dasbor"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Maukah Anda menceritakan alasannya? Hanya dengan {{a}}menjawab dua pertanyaan sederhana,{{/a}} Anda membantu kami meningkatkan Jetpack."],"Automattic's Privacy Policy":["Kebijakan Privasi Automattic"],"WordPress.com Terms of Service":["Ketentuan Layanan WordPress.com"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}Aktifkan{{/a}} untuk meningkatkan kinerja dan kecepatan gambar Anda."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Aktifkan pembaruan plugin otomatis{{/a}}"],"Plugin Updates":["Pembaruan Plugin"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["Untuk mencadangkan seluruh situs secara otomatis, silakan {{a}}upgrade akun Anda{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["Waduh! Kunci Akismet Anda tidak ada atau tidak valid. {{akismetSettings}}Buka pengaturan Akismet untuk memperbaikinya{{/akismetSettings}}."],"No threats found, you're good to go!":["Tidak ada ancaman, Anda aman dan siap melanjutkan!"],"{{a}}Contact Support{{/a}}":["{{a}}Hubungi dukungan{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}Lihat rinciannya di VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["Ups, ada %(number)s ancaman.","Ups, ada %(number)s ancaman."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}Aktifkan Monitor{{/a}} untuk menerima email pemberitahuan jika situs Anda tidak aktif."],"Loading…":["Memuat…"],"Downtime monitoring":["Pemantauan waktu tidak aktif"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}Lihat Statistik Selengkapnya di WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}Lihat Statistik Lama{{/button}}"],"All-time comments":["Komentar sepanjang waktu"],"All-time views":["Tampilan sepanjang waktu"],"%(number)s View":["%(number)s Tampilan","%(number)s Tampilan"],"Best overall day":["Terbaik sepanjang hari"],"Views today":["Tampilan hari ini"],"Months":["Bulan"],"Weeks":["Minggu"],"Days":["Hari"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["Terjadi sesuatu saat memuat statistik. Coba lagi nanti atau {{a}}lihat statistik Anda sekarang di WordPress.com{{/a}}"],"Click to view detailed stats.":["Klik untuk melihat statistik terperinci."],"Views: %(numberOfViews)s":["Tampilan: %(numberOfViews)s"],"Week of %(date)s":["Minggu dari %(date)s"],"Site Security":[""],"Activate recommended features":["Aktifkan fitur yang disarankan"],"Link to WordPress.com":["Tautkan ke WordPress.com"],"Unlink me from WordPress.com":["Hapus tautan saya dari WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["Ada masalah dalam menyambungkan Jetpack Anda. Harap klik lagi “Sambungkan ke WordPress.com”."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["Kami mengalami masalah dalam menyambungkan Jetpack; nonaktifkan dulu lalu aktifkan kembali plugin Jetpack, lalu sambungkan kembali."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Anda harus tetap masuk di blog WordPress saat Anda mengotorisasi Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Jetpack Anda mengalami masalah.{{/s}} Kami mohon maaf atas ketidaknyamanan ini. Harap coba lagi nanti. Jika masalah berlanjut, hubungi dukungan dengan pesan ini: %(error_key)s"],"Disconnecting Jetpack":["Putuskan Jetpack"],"Learn more":["Pelajari Lebih Lanjut"],"Posts":["Tulisan"],"Front page":["Halaman depan"],"Upload videos":[""],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Tampilkan konten terkait di bawah pos"],"Related":["Terkait"],"Save":["Simpan"],"Email Address":["Alamat Surat Elektronik"],"Media":["Media"],"Themes":["Tema"],"Site Stats":["Statistik Situs"],"Sharing":["Berbagi"],"Testimonials":["Testimoni-testimoni"],"Cancel":["Batal"],"Comments":["Komentar"],"Ignored Phrases":["Frase yang Diabaikan"],"Use automatically detected language to proofread posts and pages":["Gunakan bahasa yang terdeteksi secara otomatis untuk memeriksa ejaan dalam tulisan dan halaman"],"Redundant Phrases":["Frase Berlebihan"],"Phrases to Avoid":["Frase untuk Dihindari"],"Passive Voice":["Suara Pasif"],"Jargon":["Prokem"],"Hidden Verbs":["Kata Tersembunyi"],"Double Negatives":["Negatif Ganda"],"Diacritical Marks":["Tanda-tanda Diakritik"],"Complex Phrases":["Frase Kompleks"],"Bias Language":["Bahasa Bias"],"English Options":["Pilihan Bahasa Inggris"],"Proofreading":["Pemeriksaan Ejaan"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack tidak dapat menghubungi WordPress.com: %(error_key)s. Hal ini biasanya berarti ada sesuatu yang tidak dikonfigurasi dengan benar pada host web Anda."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com sedang mengalami masalah dan tidak dapat menyalakan Jetpack Anda. Silahkan coba kembali lain waktu."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Jetpack Anda mengalami masalah.{{/s}} Situs ini tidak dapat disambungkan dengan WordPress.com. Ini berarti bahwa situs Anda tidak dapat diakses secara publik (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Situs web Anda perlu dapat diakses secara publik untuk menggunakan Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["Anda telah berhasil memutuskan Jetpack"],"Edit":["Sunting"],"Connected":["Terhubung"],"Activate":["Aktifkan"],"Active":["Aktif"],"Search":["Cari"],"Settings":["Pengaturan"],"Learn More":["Pelajari Lebih Lanjut"],"Disconnect Jetpack":["Putus dengan Jetpack"],"Test your site’s compatibility with Jetpack.":["Uji kompatibilitas situs Anda dengan Jetpack."],"Settings header\u0004Plugin Autoupdates":["Pembaruan Otomatis Plugin"],"Settings header\u0004Downtime monitoring":["Pemantauan waktu tidak aktif"],"Settings header\u0004Privacy Settings":["Pengaturan Privasi"],"Settings header\u0004WordPress.com toolbar":["Bilah peralatan WordPress.com"],"Settings header\u0004Composing":["Menulis"],"Settings header\u0004Site stats":["Statistik situs"],"Settings header\u0004Search engine optimization":["Optimasi mesin pencari"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Tombol berbagi"],"Settings header\u0004Publicize connections":["Sambungan Publikasikan"],"Settings header\u0004Like buttons":["Tombol suka"],"Settings header\u0004WordPress.com log in":["Proses login WordPress.com"],"Settings header\u0004Brute force attack protection":["Perlindungan terhadap serangan paksa"],"Settings header\u0004Backups and security scanning":["Pencadangan dan pemindaian keamanan"],"Settings header\u0004Spam filtering":["Filter spam"],"Navigation item.\u0004Performance":["Performa"],"Navigation item.\u0004My Plan":["Paket Saya"],"Navigation item.\u0004Dev Tools":["Alat Pengembang"],"Navigation item.\u0004Settings":["Pengaturan"],"Navigation item.\u0004Discussion":["Diskusi"],"Navigation item.\u0004Traffic":["Lalu Lintas"],"Navigation item.\u0004Sharing":["Berbagi"],"Navigation item.\u0004At A Glance":["Selayang Pandang"],"Navigation item.\u0004Plans":["Paket"],"Navigation item.\u0004Writing":["Tulisan"],"Navigation item.\u0004Reset Options (dev only)":["Reset Pilihan (khusus pengembang)"],"Navigation item.\u0004Security":["Keamanan"],"Navigation item.\u0004At a Glance":["Selayang Pandang"],"Search term.\u0004terms of service":["Ketentuan layanan"],"Search term.\u0004tos":["tos"],"Search term.\u0004gdpr":["gdpr"],"Search term.\u0004data":["data"],"Search term.\u0004tracks":["pelacakan"],"Search term.\u0004privacy":["privasi"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["Upgrade"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Upgrade"],"Button caption\u0004Saving…":["Menyimpan…"],"Button caption\u0004Save settings":["Simpan pengaturan"],"A heading for a block of related posts.\u0004Related":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Pratinjau"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Tetap tersambung"],"A caption for a button to disconnect.\u0004Disconnect":["Putuskan sambungan"],"Short warning message\u0004Updates needed":["Memerlukan pembaruan"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Berbayar"],"A header for a preview area in the configuration screen.\u0004Preview":["Pratinjau"],"Ads header\u0004Ads":["Iklan"],"Dashboard widget header\u0004Site connection":["Sambungan situs"],"Dashboard widget header\u0004Account connection":["Sambungan akun"],"A caption for a small button to fix security issues.\u0004Threats":["Ancaman"],"A caption for a small button to fix security issues.\u0004FIX":["PERBAIKI"],"Short warning message about new threats found.\u0004Threats found!":["Ancaman ditemukan!"],"Short warning message about site having no security scan.\u0004No scanning":["Tidak ada pemindaian"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Upgrade"],"Short message informing user that the site is secure.\u0004Secure":["Aman"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Kunci tidak valid"],"Caption for a button to set up a feature.\u0004Set up":["Siapkan"],"verb\u0004Copy":["Salin"],"Shorthand for Privacy Policy.\u0004Privacy":["Privasi"],"Shorthand for Terms of Service.\u0004Terms":["Ketentuan"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Debug"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["Komentar spam diblokir."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-is_IS-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-is_IS-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 34f8bec0..00000000
--- a/plugins/jetpack/languages/json/jetpack-is_IS-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=(n % 100 != 1 && n % 100 != 21 && n % 100 != 31 && n % 100 != 41 && n % 100 != 51 && n % 100 != 61 && n % 100 != 71 && n % 100 != 81 && n % 100 != 91);","lang":"is"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Stilla Google Analytics"],"Activate Google Analytics":["Virkja Google Analytics"],"Upgrade Focus: VideoPress For Weddings":["Uppfræsla: VideoPress fyrir brúðkaup"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":["Í \"Farsíma\""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":["Skoðaðu tekjurnar þínar"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":["Tól til leitarvélabestunar"],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":["Frekari upplýsingar"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":["Áskrifandi"],"Big iPhone/iPad Update Now Available":["Stór iPhone/iPad uppfærsla nú í boði"],"The WordPress for Android App Gets a Big Facelift":["WordPress forritið fyrir Android fær stóra andlitslyftingu"],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":["Afritað!"],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":["Endurgera netfang"],"Automatically proofread content when: ":[""],"A post or page is first published":["Færsla eða síða er fyrst birt"],"A post or page is updated":["Færsla eða síða er uppfærð"],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":["Bæta við setningu"],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":["Vista..."],"Save Settings":["Vista stillingar"],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":["Virkja tölfræði"],"Security Scanning":[""],"Upgrade":["Uppfærsla"],"ACTIVE":["VIRKT"],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":["Öryggi"],"Performance":["Afköst"],"Backups":[""],"{{a}}View backup details{{/a}}.":["{{a}}Skoða ítarupplýsingar öryggisafrits{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":["Fljótt á litið"],"Clichés":[""],"Dashboard":["Stjórnborð"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}Skoða nánar á VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found."],"Loading…":["Hleð..."],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["%(number)s fletting","%(number)s flettingar"],"Best overall day":[""],"Views today":[""],"Months":["Mánuðir"],"Weeks":["Vikur"],"Days":["Dagar"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":["Aftengi Jetpack"],"Learn more":["Lesa meira"],"Posts":["Færslur"],"Front page":["Forsíða"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":[""],"Related":["Tengt efni"],"Save":["Vista"],"Email Address":["Netfang"],"Media":["Skrár"],"Themes":["Þemu"],"Site Stats":["Tölfræðir"],"Sharing":["Deiling"],"Testimonials":["Reynslusögur"],"Cancel":["Hætta við"],"Comments":["Skilaboð"],"Ignored Phrases":[""],"Use automatically detected language to proofread posts and pages":[""],"Redundant Phrases":[""],"Phrases to Avoid":[""],"Passive Voice":[""],"Jargon":["Fagmál"],"Hidden Verbs":[""],"Double Negatives":[""],"Diacritical Marks":[""],"Complex Phrases":[""],"Bias Language":[""],"English Options":[""],"Proofreading":[""],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[""],"You have successfully disconnected Jetpack":[""],"Edit":["Breyta "],"Connected":["Tengd"],"Activate":["Virkja"],"Active":["Virkir"],"Search":["Leita"],"Settings":["Stillingar"],"Learn More":["Lesa meira"],"Disconnect Jetpack":["Aftengja Jetpack"],"Test your site’s compatibility with Jetpack.":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":["Fljótt á litið"],"Navigation item.\u0004Plans":["Áskriftarleiðir"],"Navigation item.\u0004Writing":["Ritun"],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":["Öryggi"],"Navigation item.\u0004At a Glance":["Fljótt á litið"],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":["Afrita"],"Shorthand for Privacy Policy.\u0004Privacy":["Friðhelgi"],"Shorthand for Terms of Service.\u0004Terms":["Skilmálar"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Aflúsa"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-it_IT-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-it_IT-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 1cad8c7f..00000000
--- a/plugins/jetpack/languages/json/jetpack-it_IT-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"it"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":["Quindi, attiva la funzione consigliata di Jetpack per aumentare le prestazioni e la sicurezza del tuo sito. {{a}}Scopri di più su cosa è incluso{{/a}}."],"We’re now collecting stats and securing your site. Welcome aboard.":["Ora stiamo raccogliendo le statistiche e proteggendo il tuo sito. Benvenuto."],"{{a}}Skip, and explore features individually{{/a}}.":["{{a}}Salta ed esplora le funzionalità individualmente{{/a}}."],"Jetpack Business Plan":["Piano Business di Jetpack"],"Jetpack Premium Plan":["Piano Premium di Jetpack"],"Jetpack Personal Plan":["Piano Personal di Jetpack"],"Get started with hassle-free design, stats, and performance tools.":["Inizia con gli strumenti per prestazioni, statistiche e design privi di problemi."],"Welcome to Jetpack Free":["Benvenuto in Jetpack Free"],"Jetpack Free Plan":["Piano gratuito Jetpack"],"Explore Jetpack plans":["Esplora i piani Jetpack"],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":["Raggiungi la tranquillità grazie a backup automatici e supporto prioritario, raggiungi un pubblico più vasto utilizzando strumenti SEO avanzati, guadagna dal tuo sito grazie agli annunci e personalizza il sito con oltre 200 temi Premium."],"Jetpack offers so much more":["Jetpack offre molto di più"],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":["Serve aiuto? Cerca nel nostro sito del supporto per trovare notizie sul tuo sito, sul tuo account e su come sfruttare al meglio WordPress."],"Support documentation":["Documentazione di supporto"],"Chat bubbles representing getting in touch with support":["Fumetti di chat per entrare in contatto con il supporto"],"Site Activity":["Attività del sito"],"Start publicizing now":["Avvia ora la pubblicizzazione"],"Reach a wider audience by automatically sharing your posts on social media.":["Raggiungere un pubblico più vasto grazie alla condivisione degli articoli sui social media."],"Increase traffic to your site":["Aumenta il traffico verso il tuo sito"],"Explore free themes":["Esplora i temi gratuiti"],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":["Ottieni un accesso illimitato a centinaia di temi professionali e personalizza il tuo sito come desideri."],"A wide variety of themes and tools to customize a site":["Una vasta gamma di temi e strumenti per personalizzare un sito"],"Set up your site security":["Configura la sicurezza del sito"],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":["Previeni attacchi di login e ricevi notifiche istantanee quando si verifica un problema con il tuo sito."],"Site stats showing an evolution in traffic and engagement":["Statistiche del sito che indicano l’evoluzione di traffico e coinvolgimento"],"A hand holding a loupe":["Una mano con una lente di ingrandimento"],"A chart showing an healthy increase in earnings":["Un grafico che mostra un sano incremento dei guadagni"],"Interface showing a chronological list of changes and updates in a site":["Interfaccia che mostra un elenco cronologico di modifiche e aggiornamenti al sito"],"A cloud with multiple types of content floating around it":["Una nuvola circondata da diversi tipi di contenuti"],"A folder holding real comments":["Una cartella con commenti reali"],"Make your site faster":["Rendi il tuo sito più veloce"],"Load pages faster by serving your images from our global network of servers.":["Carica le pagine più velocemente prendendo le immagini dalla nostra rete globale di server."],"A fast and performant website":["Un sito web veloce e performante"],"A secure site, locked and protected by Jetpack":["Un sito sicuro, bloccato e protetto da Jetpack"],"These settings won't apply to related posts added using the block editor.":["Queste impostazioni non saranno applicate agli articoli correlati che usano l'editor a blocchi."],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["Duplica portfolio, testimonianze, pagine e articoli esistenti. Tutto il contenuto sarà copiato, tra cui testo, immagini in primo piano, impostazioni di condivisione e altro ancora."],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":["Questo sito non può essere connesso a WordPress.com poiché viola i nostri {{a}}Termini di Servizio{{/a}}."],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":["Connetti il tuo sito web alle reti dei social media che utilizzi e condividi i tuoi contenuti tramite tutti i tuoi account in un solo clic. Quando pubblichi un articolo, questo apparirà su tutti gli account connessi."],"Add Like buttons to your posts and pages":["Aggiungi i pulsanti Mi piace agli articoli e alle pagine"],"When visitors enjoy your content, let them show it with a Like.":["Fa in modo che i visitatori dimostrino con un Mi piace che apprezzano i tuoi contenuti."],"Explore your Jetpack Professional plan!":["Esplora il tuo piano Jetpack professionale!"],"Explore your Jetpack Premium plan!":["Esplora il tuo piano Jetpack premium!"],"Explore your Jetpack Personal plan!":["Esplora il tuo piano Jetpack personale!"],"Create account":["Crea account"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["Jetpack sta potenziando il tuo sito, ma per accedere a tutte le funzionalità avrai bisogno di creare un account."],"Real-time, automated backups (unlimited storage)":["Backup in tempo reale e automatici (storage illimitato)"],"Compose content the way you want to and streamline your publishing experience.":["Componi i contenuti nel modo che preferisci e semplifica la tua esperienza di pubblicazione."],"Add a portfolio item":["Aggiungi un elemento al portfolio"],"Add a testimonial":["Aggiungi una testimonianza"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["Massimizza la visibilità del tuo sito nei motori di ricerca e visualizza le statistiche del traffico in tempo reale."],"Create a Jetpack account to use this feature":["Crea un account Jetpack per utilizzare questa funzionalità"],"Share your content on social media and increase audience engagement.":["Condividi i tuoi contenuti sui social media e aumenta il coinvolgimento del pubblico."],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["Jetpack monitorerà continuamente il tuo sito e ti avviserà quando viene rilevato un periodo di inattività."],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["Quando viene rilasciato un aggiornamento del plugin, la best practice è quella di eseguire subito l'aggiornamento. Scegli per quali plugin desideri eseguire l'aggiornamento automatico in modo che il tuo sito rimanga sicuro."],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["Proteggi il tuo sito con la sicurezza all'avanguardia e ricevi le notifiche relative ai problemi tecnici."],"Error enabling Site accelerator. %(error)s":["Errore durante l'attivazione dell'acceleratore del sito. %(error)s"],"Site accelerator is now speeding up your site!":["L'acceleratore del sito sta ora velocizzando il tuo sito."],"Enabling Site accelerator…":["Attivazione dell'acceleratore del sito…"],"Error disabling site accelerator. %(error)s":["Errore durante la disattivazione dell'acceleratore del sito. %(error)s"],"Site accelerator is no longer speeding up your site!":["L'acceleratore del sito non velocizzerà più il tuo sito."],"Disabling site accelerator…":["Disattivazione dell'acceleratore del sito…"],"Load pages faster, optimize images, and speed up your visitors’ experience.":["Carica le pagine più velocemente, ottimizza le immagini e velocizza l'esperienza dei visitatori."],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["Integra le statistiche di WordPress.com e gli approfondimenti di Google con gli schemi dei visitatori e del traffico."],"High-speed, high-definition video hosting with no third-party ads.":["Hosting video ad alta definizione ed elevata velocità senza pubblicità di terze parti."],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["Programma in anticipo i tweet illimitati e gli articoli su Facebook e su altri social network."],"Marketing Automation":["Automazione del marketing"],"Activate Jetpack Search":["Attiva Ricerca Jetpack"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["Sostituisci la ricerca predefinita di WordPress con risultati e filtraggio personalizzato di Elasticsearch."],"Start earning":["Inizia a guadagnare"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["WordAds consente di guadagnare denaro grazie alla visualizzazione di contenuti promozionali. Inizia a guadagnare oggi."],"Spam is automatically blocked from your comments.":["Lo spam viene automaticamente bloccato dai tuoi commenti."],"Spam Filtering":["Filtro antispam"],"Browse premium themes":["Esplora i temi premium"],"Access hundreds of beautifully designed premium themes at no extra cost.":["Accedi a centinaia di temi Premium perfettamente progettati senza costi extra."],"Try a premium theme":["Prova un tema premium"],"View settings":["Visualizza le impostazioni"],"Create a Jetpack account to view your email followers":["Crea un account Jetpack per visualizzare i tuoi follower tramite e-mail"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["Apri il tuo sito ai commenti e invita gli abbonati a ricevere avvisi sul tuo ultimo lavoro."],"Manage security settings":["Gestisci le impostazioni di sicurezza"],"Built-in Performance":["Prestazione integrata"],"Jetpack is ready for the new WordPress editor":["Jetpack è pronto per il nuovo editor di WordPress"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["Oggi abbiamo introdotto la prima serie di blocchi specifici Jetpack, progettati appositamente per l'esperienza con il nuovo editor: Semplici pulsanti di pagamento, moduli, mappe e Markdown."],"Build your Jetpack site with blocks":["Crea il tuo sito Jetpack con i blocchi"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["Un nuovo editor? Sì! {{a}}Scopri di più{{/a}}."],"The features you rely on, adapted for the new WordPress editor.":["Le funzioni che già conosci, adattate al tuo nuovo editor WordPress."],"Take me to the new editor":["Portami al nuovo editor"],"Testing Jetpack Connection":["Sto testando la connessione a Jetpack"],"There was an error testing Jetpack. Error: %(error)s":["Si &egrave; verificato un errore durante il test di Jetpack. Errore: %(error)s"],"New in Jetpack!":["Novità in Jetpack!"],"Speed up static file load times":["Velocizza i tempi di caricamento dei file statici"],"Speed up image load times":["Velocizza i tempi di caricamento delle immagini"],"Enable site accelerator":["Attiva l'acceleratore del sito"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["Carica più velocemente le pagine consentendo a Jetpack di ottimizzare le immagini e di servirsi di immagini e file statici (come CSS e JavaScript) dalla nostra rete di server."],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["Aggiungi un ulteriore livello di protezione al tuo sito web abilitando WordPress.com per accedere e rendere sicura l'autenticazione. Se possiedi più siti con questa opzione attiva, potrai accedere ad ognuno di essi con le stesse credenziali."],"View your site activity":["Visualizza l’attività del sito"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["Visualizza un elenco cronologico di tutte le modifiche e di tutti gli aggiornamenti al sito in un maniera organizzata e leggibile."],"Manually Verify ":["Verifica manualmente "],"Verify with Google":["Verifica con Google"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["Google ti invierà una e-mail su alcuni eventi che si verificano con il tuo sito, incluse indicazioni nel caso in cui il tuo sito web {{a1}}sia vittima di hacker{{/a1}} o per problemi di {{a2}}indicizzazione{{/a2}} del sito."],"or":["o"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["Monitora le prestazioni e il traffico del tuo sito da {{a}}Google Search Console{{/a}}."],"Your site is verified with Google":["Il tuo sito è stato verificato con Google."],"Site failed to verify: %(error)s":["Impossibile verificare il sito: %(error)s"],"Verifying...":["Verifica..."],"Add faster, more advanced searching to your site with Jetpack Professional.":["Aggiungi al tuo sito una ricerca più veloce e avanzata, grazie a Jetpack Professional."],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["Sostituisci la ricerca integrata WordPress con la ricerca Jetpack, un’esperienza di ricerca avanzata"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["Ricerca Jetpack sostituisce la ricerca integrata con una veloce, scalabile, personalizzabile e altamente pertinente ospitata nel cloud WordPress.com. Il risultato: i tuoi utenti trovano il contenuto che desiderano, più velocemente."],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["La ricerca integrata di WordPress è perfetta per siti senza molto contenuto. Man mano però che il sito cresce, le ricerche rallentano e restituiscono risultati meno pertinenti."],"Jetpack Search supports many customizations.":["La ricerca Jetpack supporta diverse personalizzazioni."],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["Sostituisci la ricerca integrata con una ricerca veloce, scalabile, personalizzabile e altamente pertinente, {{a}}ospitata sul cloud WordPress.com{{/a}}."],"Site is verified":["Il sito è verificato"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}Per creare un bel sito che appare e funziona esattamente come desideri, Jetpack Professional ti offre accesso illimitato a oltre 200 temi premium per WordPress.{{/p}}{{p}}Jetpack Professional rappresenta molto di più della semplice ricerca del design perfetto. Il bisogno dovrebbe nascere anche dalla sensazione di tranquillità assoluta che si prova sapendo di avere diritto a un supporto prioritario da parte del nostro team globale di esperti.{{/p}}"],"Spam filtering and priority support.":["Filtro antispam e supporto prioritario."],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["Quando sono attivi gli annunci pubblicitari, Jetpack genera automaticamente un file ads.txt personalizzato su misura per il tuo sito."],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["Jetpack genera automaticamente un file {{link}}ads.txt{{/link}} personalizzato su misura per il tuo sito. Se ha bisogno di ulteriori voci per altre reti, aggiungile nello spazio di seguito, una per riga."],"Custom ads.txt entries":["Personalizza le voci di ads.txt"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}Per creare un bel sito che appare e funziona esattamente come desideri, Jetpack Professional ti offre accesso illimitato a oltre 200 temi premium per WordPress.{{/p}}{{p}}Jetpack Professional rappresenta molto di più della semplice ricerca del design perfetto. È anche totale serenità: backup in tempo reale, scansione antimalware automatica e supporto prioritario da parte del nostro team globale di esperti garantiscono la perenne sicurezza del tuo sito.{{/p}}"],"Introducing Premium Themes":["Introduzione dei temi premium"]," Premium Themes":[" Temi Premium"],"Privacy information":["Informazioni sulla privacy"],"Enable Lazy Loading for images":["Abilitazione del caricamento lento delle immagini"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["Le immagini a caricamento lento migliorano la velocità del tuo sito e creano un'esperienza visiva più fluida. Le immagini vengono caricate nel momento in cui i visitatori scorrono la schermata verso il basso, invece che tutte in una volta."],"Performance & speed":["Prestazioni e velocità"],"Enable high-speed, ad-free video player":["Abilitazione del lettore per video ad alta velocità e senza pubblicità"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["Rendi più coinvolgente il contenuto che pubblichi con video ad alta risoluzione. Con Jetpack Video puoi personalizzare il tuo lettore multimediale e offrire video ad alta velocità, senza pubblicità e senza marchio ai tuoi visitatori. I video sono ospitati sui nostri server WordPress.com e non viene sottratto spazio dal tuo piano di hosting!"],"Video":["Video"],"Carousel color scheme":["Schema colori carosello"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["I dati Exif mostrano ai visitatori dettagli tecnici aggiuntivi di una foto, come la lunghezza focale, l'apertura e l'ISO."],"Show photo Exif metadata in carousel (when available)":["Mostra i metadati Exif delle foto nel carosello, quando disponibile."],"Display images in a full-screen carousel gallery":["Mostra le immagini in una galleria a schermo intero del carosello."],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["Crea le presentazioni del carosello a schermo intero per le immagini nei tuoi articoli e nelle tue pagine. Le gallerie del carosello sono fruibili anche da dispositivo mobile e incoraggiano i visitatori del sito a interagire con le tue foto."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["La barra degli strumenti di WordPress.com sostituisce quella di amministrazione predefinita e ottimizza l'esperienza di WordPress. Ti offre la possibilità di accedere con un clic per gestire tutti i tuoi siti, aggiornare il tuo profilo WordPress.com, visualizzare notifiche e recuperare i siti che segui nel Reader."],"Portfolios shortcode: [portfolio]":["Shortcode del portfolio: [portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["Utilizza i {{portfolioLink}}portfolio{{/portfolioLink}} sul tuo sito per presentare i tuoi lavori migliori. Se il tema non supporta Jetpack Portfolios, puoi sempre usare un semplice shortcode per mostrarli sul tuo sito."],"Testimonials shortcode: [testimonials]":["Shortcode delle testimonianze: [testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["Aggiungi {{testimonialLink}}le testimonianze{{/testimonialLink}} al tuo sito web per attirare nuovi clienti. Se il tema non supporta Jetpack Testimonials, puoi sempre usare un semplice shortcode per mostrarli sul tuo sito."],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["Al momento, i motori di ricerca non possono accedere al tuo sito. Se desideri rendere il tuo sito accessibile, controlla le{{a}}Impostazioni lettura{{/a}} e attiva la \"Visibilità ai motori di ricerca\"."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["Buone notizie! Jetpack sta inviando automaticamente la tua sitemap a tutti i principali motori di ricerca per l'indicizzazione."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["Le sitemap sono file che i motori di ricerca come Google o Bing utilizzano per indicizzare il tuo sito web. Possono aiutare a migliorare il tuo posizionamento nei risultati di ricerca. Quando abiliti questa funzione, Jetpack crea sitemap per te e le aggiorna automaticamente quando il contenuto del tuo sito cambia."],"Configure related posts in the Customizer":["Configura gli articoli correlati nell'utilità di personalizzazione"],"Highlight related content with a heading":["Evidenzia il contenuto correlato con un'intestazione"],"View security scan details":["Visualizza i dettagli della scansione di sicurezza"],"View backup history":["Visualizzare la cronologia del backup"],"Show a thumbnail image where available":["Visualizza un'immagine in miniatura se disponibile"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["Per informazioni su come le specifiche funzioni Jetpack utilizzano i dati e tracciano l’attività, fai riferimento al nostro {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["Utilizziamo altri strumenti di tracciamento, compresi alcuni di terzi. {{cookiePolicyLink}}Leggi le informazioni sugli strumenti{{/cookiePolicyLink}} e come controllarli."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["Queste informazioni ci aiutano a migliorare i prodotti, offrire proposte di marketing più pertinenti, personalizzare l’esperienza WordPress.com e molto altro, come indicato nel dettaglio nella nostra {{pp}}informativa sulla privacy{{/pp}}."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["Condividi informazioni con il nostro strumento di analisi relativamente al tuo uso dei servizi mentre sei connesso con il tuo account WordPress.com. {{cookiePolicyLink}}Scopri di più{{/cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["Questa caratteristica viene gestita da un amministratore del sito. {{link}}Scopri di più{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["Questa caratteristica è stata disabilitata da un amministratore del sito. {{link}}Scopri di più{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["Questa caratteristica è stata abilitata da un amministratore del sito. {{link}}Scopri di più{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["Il modulo %(moduleName)s è stato disabilitato da un amministratore del sito. {{link}}Scopri di più{{/link}}."],"This feature has been disabled by a site administrator.":["Questa caratteristica è stata disabilitata da un amministratore del sito."],"%(moduleName)s has been disabled by a site administrator.":["Il modulo %(moduleName)s è stato disabilitato da un amministratore del sito."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["Puoi inserire ulteriori annunci attraverso il widget Pubblicità. {{link}}Provalo!{{/link}}"],"Configure your notification settings":["Configura le impostazioni di notifica"],"Monitor your site's downtime":["Monitora i tempi di inattività del tuo sito"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["Ricerca di Jetpack è una potente sostituzione della funzionalità di ricerca incorporata in WordPress."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["I file del sito vengono regolarmente controllati per rilevare eventuali modifiche non autorizzate o sospette che potrebbero compromettere la sicurezza e i dati."],"Plugin needs updating.":["Il plugin deve essere aggiornato.","I plugin devono essere aggiornati."],"%(number)s":["%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Aggiornamenti plugin di Jetpack consente di scegliere quali plugin aggiornare automaticamente."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack ottimizzerà le tue immagini e le servirà dalla posizione server più vicina ai visitatori. L'utilizzo della nostra rete globale di distribuzione dei contenuti migliorerà la velocità di caricamento del tuo sito."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":["La funzione di monitoraggio dell'inattività di Jetpack controllerà costantemente il tuo sito e ti avviserà quando viene rilevato un periodo di inattività."],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["I backup Jetpack consentono di ripristinare facilmente o eseguire il download di un backup di un momento specifico."],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet controlla i tuoi commenti e gli invii dei moduli di contatto a fronte del nostro database globale di spam."],"Privacy Information":["Informazioni sulla privacy"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["VideoPress consente di caricare video dal tuo computer per essere ospitato su WordPress.com, piuttosto che sui server del tuo host. Quindi, puoi inserirli sul sito Jetpack in self-hosting. "],"Add the Search (Jetpack) widget to your sidebar":["Aggiungi il widget Cerca (Jetpack) alla barra laterale"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["Offri ai tuoi visitatori una straordinaria esperienza di ricerca, permettendo loro di filtrare e ordinare velocemente i risultati della ricerca pertinenti."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["Permette di ottenere un tema leggero e pensato per la fruizione mobile che verrà visualizzato dagli utenti che si servono di dispositivi mobili."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["Carica automaticamente i post successivi quando il lettore si avvicina a fine pagina."],"Allows you to publish new posts by sending an email to a special address.":["Consente di pubblicare nuovi post inviando un'e-mail a un indirizzo particolare."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["Consente di comporre i contenuti con link, elenchi e altri stili utilizzando la sintassi Markdown."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["Mentre scrivi, controlla i contenuti per correggere grammatica e ortografia, parole inappropriate e stile."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["Fornisce i tag nascosti necessari per verificare il sito WordPress con diverse servizi."],"Displays information on your site activity, including visitors and popular posts or pages.":["Visualizza le informazioni sull’attività del sito, inclusi i visitatori e pagine o post popolari."],"Allows you to optimize your site and its content for better results in search engines.":["Consente di ottimizzare il sito e i relativi contenuti per risultati migliori nei motori di ricerca."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["Integra il tuo sito WordPress con Google Analytics, una piattaforma che offre approfondimenti su traffico, visitatori e conversioni."],"Displays high-quality ads on your site that allow you to earn income.":["Visualizza sul sito annunci di alta qualità che permettono di ottenere guadagni."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["Aggiunge i pulsanti di condivisione al contenuto in modo che i visitatori possano condividerlo sui siti di social media."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["Consente di condividere automaticamente i contenuti più recenti sui siti di social media, tra cui Facebook e Twitter."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["Aggiunge al contenuto i pulsanti Like, in modo che i visitatori possano mostrare apprezzamento."],"Allows registered users to log in to your site with their WordPress.com accounts.":["Permette agli utenti registrati di accedere al sito con i loro account WordPress.com."],"Protects your site from traditional and distributed brute force login attacks.":["Protegge il sito da attacchi di accesso forzato tradizionali o distribuiti."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["Esegue il backup del sito sui server WordPress.com globali, consentendo di ripristinare i contenuti in caso di emergenza o di errore."],"Removes spam from comments and contact forms.":["Rimuove lo spam da commenti e form di contatto."],"We are committed to your privacy and security. ":["Ci impegniamo per la tua sicurezza e la tua privacy. "],"View all Jetpack plans":["Visualizza tutti i piani Jetpack"],"Manage your plan":["Gestisci il tuo piano"],"Your Plan":["Il tuo piano"],"You’re currently on Jetpack %(plan)s.":["Attualmente utilizzi Jetpack %(plan)s."],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["Consente ai lettori di iscriversi ai tuoi articoli o commenti e ricevi notifiche dei nuovi contenuti tramite e-mail."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["Sostituisce il form di commento WordPress standard con un nuovo sistema di commento che include le opzioni di accesso con i social media."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}Attivala{{/a}} per sostituire la ricerca integrata di WordPress con la funzionalità di ricerca di Jetpack, un'esperienza di ricerca migliorata."],"Add Search (Jetpack) Widget":["Aggiungi il widget di ricerca (Jetpack)"],"Jetpack Search is powering search on your site.":["La ricerca Jetpack migliora la ricerca sul tuo sito."],"Manage your plugins":["Gestisci i plugin"],"Moderate comments":["Modera commenti"],"Error updating privacy settings. %(error)s":["Errore durante l'aggiornamento delle impostazioni della privacy %(error)s"],"Updated privacy settings.":["Impostazioni della privacy aggiornate."],"Updating privacy settings…":["Aggiornamento delle impostazioni della privacy..."],"Add Jetpack Search Widget":["Aggiungi il widget di ricerca di Jetpack"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["Aggiungi il widget di ricerca di Jetpack alla tua barra laterale per configurare filtri e ordinamento."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["Suite di sicurezza completa, strumenti di automazione del marketing e delle entrate, hosting video illimitato, temi infiniti, ricerca avanzata e supporto prioritario."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["Suite di sicurezza completa, strumenti di automazione del marketing e delle entrate, hosting video illimitato e supporto prioritario."],"Daily backups, spam filtering, and priority support.":["Backup quotidiani, filtro antispam e supporto prioritario."],"Always-on Security":["Sicurezza sempre attiva"],"Activate video hosting":["Attiva l'hosting video"],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Backup in tempo reale di tutti i dati del tuo sito con spazio illimitato, ripristini con un clic, scansione di sicurezza automatica e supporto prioritario."],"Design the perfect website":["Progetta il sito web perfetto"],"Set up Jetpack":["Configura Jetpack"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["Backup in tempo reale di tutti i dati del tuo sito con spazio illimitato, ripristini con un clic e scansione di sicurezza automatica."],"Jetpack Search":["Ricerca Jetpack"],"Jetpack version %(version)s":["Versione di Jetpack %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["Per il tuo sito vengono effettuati il backup in tempo reale e la scansione regolare di minacce alla sicurezza."],"Daily backup of all your site data with unlimited space and one-click restores":["Backup giornaliero di tutti i dati del tuo sito con spazio illimitato e ripristini con un clic"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Backup in tempo reale di tutti i dati del tuo sito con spazio illimitato, ripristini con un clic, scansione di sicurezza automatica e risoluzione delle minacce con un clic."],"View your security activity":["Visualizza la tua attività di sicurezza"]," (powered by VaultPress).":[" (funziona con VaultPress)."],"Customize Search Widget":["Personalizza widget di ricerca"],"Please correct the issue below and try again.":["Risolvi il problema riportato di seguito e riprova.","Risolvi i problemi riportati di seguito e riprova."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["Ci stiamo assicurando che il tuo sito rimanga privo di minacce alla sicurezza. Qualora ne trovassimo una, riceverai una notifica."],"Your site is being backed up in real-time.":["Il tuo sito è sottoposto a backup in tempo reale."],"Jetpack version":["Versione di Jetpack"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}Visualizza l’attività del sito{{/a}} in un unico feed."],"Activity":["Attività"],"Confirm each new phrase you add by pressing enter.":["Conferma ogni nuova frase aggiunta cliccando Invio."],"{{a}}View details{{/a}}":["{{a}}Vedi dettagli{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["Grazie per aver scelto il piano Professional. Jetpack sta facendo il backup del tuoi contenuti, facendo la scansione alla ricerca di potenziali minacce alla sicurezza del sito, e assicurando l'accesso ai temi premium. "],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["Con il piano Professional di Jetpack puoi creare il sito perfetto per le tue necessità, scegliendo uno tra gli oltre 300 temi per WordPress, inclusi più di 200 temi premium. Personalizza i tuoi contenuti con i widget, o aggiungi un numero illimitato di video alle tue pagine e ai tuoi articoli - è tutto mostrato e disponibile senza ads o watermark. "],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["Aumentare il tuo seguito è facile con il piano Professional, grazie alla condivisione dei contenuti e alla pianificazione, agli strumenti SEO e alle opzioni di abbonamento integrate. Con un pulsante Pagamenti facili e annunci in linea puoi guadagnare dal tuo sito e con l'integrazione con Google Analytics puoi monitorare il successo dei tuoi sforzi."],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Il piano Professional di Jetpack ti offre tutto ciò che ti serve per mantenere il tuo lavoro al sicuro. Nel piano è inclusa anche l'opzione di backup on-demand e scansione malware, oltre all'opzione per ristabilire il sito con un backup. Il tuo sito sarà inoltre protetto contro lo spam, codice malevolo o potenzialmente pericoloso, e tentativi di login brute force."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Inizia ad esplorare Jetpack Professional ora per vedere tutti i benefici di questo piano nuovo."],"Install premium themes":["Installa temi premium"],"Review SEO features":["Rivedi le opzioni SEO"],"Welcome Professional":["Benvenuto su Professional"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["Grazie per aver scelto il piano Premium. Jetpack sta facendo il backup del tuoi contenuti, facendo la scansione alla ricerca di potenziali minacce alla sicurezza del sito, e assicurando l'accesso ai temi premium."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["Con Jetpack Premium puoi creare il tuo sito perfetto, non importa quale sia il suo scopo finale. Personalizza l'aspetto del tuo sito scegliendo uno tra più di 100 temi gratuiti, o esalta i tuoi contenuti con spazio illimitato di storaggio per video in HD - tutto è offerto gratuitamente senza ads o watermark."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Usando i potenti strumenti di condivisione di Jetpack, puoi automaticamente condividere i tuoi articoli più recenti sui social media, oppure programmarli per essere ricondivisi il giorno che vuoi, all'ora che vuoi. E mentre fai crescere il seguito dei tuoi follower, puoi anche far crescere la tua attività con un pulsante per il pagamento e gli ads."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Inizia ad esplorare Jetpack premium ora per vedere tutti i benefici di questo piano nuovo."],"Monetize your site with ads":["Monetizza il tuo sito con gli ads"],"Welcome Premium":["benvenuto su Premium"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["Grazie per aver scelto li piano Personal. Jetpack sta ora facendo il backup del tuo sito e facendo la scansione alla ricerca di potenziali minacce alla sicurezza del sito."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["Con Jetpack Personal hai accesso a oltre 100 temi gratuiti per WordPress. Scegli il tema che si adatta meglio alle necessità del tuo sito, e personalizza i colori, le immagini e aggiungi tutti i widget che vuoi. "],"Got it":["Fatto!"],"Welcome personal":["Benvenuto su Personal"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["Cliccando qui sotto, accetti i nostri {{tosLink}}Termini di servizio{{/tosLink}} e la {{shareDetailsLink}}condivisione delle informazioni{{/shareDetailsLink}} con WordPress.com"],"Jetpack Stats People":["Persone che osservano le statistiche Jetpack"],"Hello there! Your stats have been activated.":["Ciao, Le tue statistiche sono state attivate."],"Just give us a little time to collect data so we can display it for you here.":["Concedici del tempo per raccogliere tutti i dati in modo tale da visualizzarli qui."],"Okay, got it!":["Ok, fatto!"],"Display ads below posts on":["Visualizza pubblicità sotto gli articoli su"],"Additional ad placements":["Posizionamenti aggiuntivi della pubblicità"],"Top of each page":["Parte superiore di ogni pagina"],"Second ad below post":["Seconda pubblicità sotto l'articolo"],"Archives":["Archivi"],"Explore Professional":["Esplora Professional"],"Compare All Plans":["Confronta tutti i piani"],"Person with laptop":["Persona con computer"],"Your Jetpack site is ready to go!":["Il tuo sito Jetpack è pronto a partire."],"Stars":["Stelle"],"Jupiter":["Giove"],"Welcome to Jetpack Personal":["Benvenuto in Jetpack Personal"],"Welcome to Jetpack Premium":["Benvenuto in Jetpack Premium"],"Welcome to Jetpack Professional":["Benvenuto in Jetpack Professional"],"Schedule posts":["Programma articoli"],"Activate Publicize":["Attiva Pubblicizza"],"Your site is backed up.":["Il tuo sito è stato sottoposto a backup."],"Image Performance":["Prestazioni delle immagini"],"Get WordPress Apps for every device":["Usa WordPress Apps per tutti i dispositivi"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Gestisci i tuoi siti da una singola dashboard: pubblica contenuti, traccia le statistiche, modera i commenti, e tante altre cose da qualsiasi parte del mondo tu ti trovi."],"I already use this app.":["Uso già questa applicazione."],"Create address":["Crea indirizzo"],"Priority support":["Supporto prioritario"],"Add sharing buttons to your posts":["Aggiungi i pulsanti per la condivisione ai tuoi articoli"],"Automatically share your posts to social networks":["Condividi automaticamente i tuoi articoli sui social network"],"Updating settings…":["Aggiornamento impostazioni in corso…"],"Updating Post by Email address…":["Aggiornamento indirizzo Post by Email in corso…"],"Your paid plan gives you access to prioritized Jetpack support.":["Il tuo piano a pagamento ti consente l'accesso al supporto Jetpack prioritario."],"You have paid for backups but they're not yet active.":["Hai pagato per i backup, ma non sono ancora attivi."],"You have paid for backups and security scanning but they’re not yet active.":["Hai pagato per i backup e la scansione di sicurezza, ma non sono ancora attivi.."],"Click \"Set Up\" to finish installation.":["Fai clic su \"Imposta\" per completare l'installazione."],"Checking site status…":["Controllo dello stato del sito in corso…"],"Pages":["Pagine"],"We're here to help":["Siamo qui per aiutarti"],"Jetpack comes with free, basic support for all users.":["Jetpack viene fornito con supporto di base gratuito per tutti gli utenti."],"Ask a question":["Fai una domanda"],"Search our support site":["Cerca il nostro sito di supporto"],"Get a faster resolution to your support questions.":["Ottieni una risoluzione più veloce alle tue domande al supporto."],"Host fast, high-quality, ad-free video.":["Host video rapido, di alta qualità e senza pubblicità."],"Generate income with high-quality ads.":["Genera dei guadagni con pubblicità di alta qualità."],"Real-time site backups and automatic threat resolution.":["Backup del sito in tempo reale e risoluzione automatica delle minacce."],"Protect against data loss, malware, and malicious attacks.":["Protezione contro la perdita dei dati, attacchi dannosi e di malware."],"Integrate easily with Google Analytics.":["Si integra facilmente con Google Analytics."],"Help your content get found and shared with SEO tools.":["Fa in modo che i tuoi contenuti vengano trovati e condivisi tramite gli strumenti SEO."],"Protect your site from spam.":["Proteggi il tuo sito dallo spam."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["Questo sito non è collegato a WordPress.Com. Chiedi all'amministratore del sito di collegarlo."],"Spam filtering":["Filtro per lo spam"],"Daily, automated malware scanning":["Scansione giornaliera automatica dei malware"],"Daily, automated backups (unlimited storage)":["Backup automatici giornalieri (spazio illimitato)"],"Daily, automated malware scanning with automated resolution":["Scansione antimalware giornaliera e automatica con risoluzione automatizzata"],"Unlimited, high-speed video hosting":["Hosting video illimitato ad alta velocità"],"SEO preview tools":["Visualizzazione in anteprima degli strumenti SEO"],"Site stats, related content, and sharing tools":["Statistiche del sito, contenuto correlato, e strumenti di condivisione"],"Brute force attack protection and downtime monitoring":["Protezione da attacchi di forza bruta e monitoraggio del downtime"],"Unlimited, high-speed image hosting":["Hosting veloce e illimitato per le immagini"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["Disconnettendo %(siteName) da WordPress.com non potrai più avere accesso ai seguenti: "],"Read more about Jetpack benefits":["Leggi di più sui vantaggi di Jetpack"],"An Automattic Airline":["An Automattic Airline"],"Manage site connection":["Gestisci connessione sito"],"Connect your account to WordPress.com to view more stats":["Collega il tuo account a WordPress.com per visualizzare più statistiche"],"Theme enhancements":["Miglioramento dei temi"],"Load more posts using the default theme behavior":["Carica altri articoli utilizzando la modalità di funzionamento del tema predefinito"],"Load more posts in page with a button":["Carica più articoli nella pagina tramite un bottone"],"Load more posts as the reader scrolls down":["Carica più articoli mentre il lettore scorre verso il basso"],"Theme support required.":["Supporto del tema richiesto."],"Learn more about adding support for Infinite Scroll to your theme.":["Scopri di più riguardo l'aggiunta del supporto per lo scroll infinito nel tuo tema."],"Use excerpts instead of full posts on front page and archive pages":["Usa i riassunti invece degli articoli completi nella pagina iniziale e nelle pagine di archivio"],"Show featured images":["Mostra le immagini in primo piano"],"Enable the WordPress.com toolbar":["Attiva la barra degli strumenti di WordPress.com"],"Writing tools available to you will be shown here when an administrator enables them.":["Gli strumenti di scrittura disponibili verranno mostrati qui una volta attivati dall'amministratore."],"Portfolios":["Portfolio"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Nota che {{b}}la verifica del sito con questi servizi non è necessaria{{/b}} per l'indicizzazione del sito stesso da parte dei motori di ricerca. Per utilizzare questi strumenti avanzati per i motori di ricerca e verificare il sito con un servizio, incolla di seguito il codice del tag HTML. In caso di problemi, leggi le {{support}}istruzioni complete{{/support}}. Servizi di verifica supportati: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}} e {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["Genera sitemap XML"],"Collecting valuable traffic stats and insights":["Raccolta delle informazioni importanti e delle statistiche sul traffico"],"The image helps collect stats, but should work when hidden.":["L'immagine aiuta a raccogliere dati statistici, ma dovrebbe funzionare anche quando è nascosta"],"Count logged in page views from":["Count logged in page views from"],"Allow stats reports to be viewed by":["Permetti che i report delle statistiche siano viste da"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["Puoi aggiustare queste impostazioni se preferisce avere più controllo. Leggi di più su quello che puoi fare per {{a}}ottimizzare il tuo sito con la SEO{{/a}}."],"Configure your SEO settings":["Configura le tue impostazioni SEO"],"In \"Upgrade\"":["In \"Aggiornamento\""],"Configure your Google Analytics settings":["Configura le tue impostazioni di Google Analytics"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Mostra le pubblicità nel primo articolo della tua home page o alla fine di ogni pagina e post. Puoi sistemare altri ads in aggiunta nella parte superiore del tuo sito e in ogni area widget, così da aumentare i guadagni."],"Enable ads and display an ad below each post":["Attiva gli ads e mostra una pubblicità sotto ogni post"],"Configure your sharing buttons":["Configura i pulsanti di condivisione"],"Connect your social media accounts":["Collega i tuoi account di social media"],"Match accounts using email addresses":["Accoppia gli account usando gli indirizzi email"],"Require accounts to use WordPress.com Two-Step Authentication":["Richiede gli account per usare l'autenticazione a due fattori di WordPress.com"],"Add to whitelist":["Aggiungi alla whitelist"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["Facendo il whitelist di un indirizzo IP o di una serie di indirizzi fai in modo che questi non vengano mai bloccati da Jetpack. IPv4 e IPv6 sono accettati. Per specificare un range di IP, inserisci o specifica un determinato range, inserisci il valore più basso e quello più alto separato da un dash (\"-\"). Per esempio: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["Il back up del sito è stato fatto. Il tuo sito non presenta nessuna minaccia."],"Checking your spam protection…":["Controllo della protezione spam..."],"Fetching key…":["Recupero chiave..."],"Your site needs an Antispam key.":["Il tuo sito ha bisogno di una chiave Antispam."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["Si è verificato un problema con la tua chiave API Antispam. {{a}}Scopri di più{{/a}}."],"Your site is not protected from spam.":["Il tuo sito non è protetto dallo spam."],"Your Antispam key is valid.":["La tua chiave Antispam è valida."],"Your site is protected from spam.":["Il tuo sito è protetto dallo spam."],"Checking key…":["Controllo chiave..."],"Your API key":["La tua chiave API"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["Se non hai ancora una chiave API, {{a}}puoi ottenerla cliccando qui{{/a}}, dove inizierai la procedura per richiederne una. "],"No search results found for %(term)s":["Nessun risultato trovato per %(term)s"],"Enter a search term to find settings or close search.":["Cerca un termine per trovare impostazioni o una ricerca simile"],"Connections":["Connessioni"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Il tuo sito è in Modalità Sviluppo, pertanto non può essere connesso a WordPress.com."],"Your site is connected to WordPress.com.":["Il tuo sito è collegato a WordPress.com."],"You are the Jetpack owner.":["Sei il proprietario di questo piano Jetpack."],"Connected as {{span}}%(username)s{{/span}}":["Connesso come {{span}}%(username)s{{/span}}"],"View your Email Followers":["Controlla i tuoi Email Follower "],"Color scheme":["Schema di colori"],"Enable Markdown use for comments.":["Abilita l'uso di Markdown per i commenti."],"Updated settings.":["Impostazioni aggiornate. "],"Error updating settings. %(error)s":["Errore nell'aggiornamento delle impostazioni. %(error)s"],"Regenerated Post by Email address.":["Post rigenerati dall'indirizzo email."],"Error regenerating Post by Email address. %(error)s":["Errore nel rigenerare il post dall'indirizzo email. %(error)s"],"Updated settings. Refreshing page…":["Impostazioni salvate. Ricaricando la pagina... "],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["Attualmente in {{a}}Modalità di sviluppo{{/a}} (alcune funzioni sono disabilitate) perché: {{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{li}}Il filtro jetpack_development_mode è attivo{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}La costante JETPACK_DEV_DEBUG è definita{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}All'URL del tuo sito manca un punto (es. http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics è un servizio gratuito che completa la nostra {{a}}built-in stats{{/a}} con diversi approfondimenti sul tuo traffico. Le statistiche di WordPress.com e Google Analytics usano metodi diversi per identificare e tracciare l'attività sul tuo sito, i quali di norma mostrano numeri totali delle visite leggermente diversi, come anche delle visualizzazioni, ecc."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Configura Google Analytics"],"Activate Google Analytics":["Attiva Google Analytics"],"Download the free apps":["Scarica le app gratuite"],"Upgrade Focus: VideoPress For Weddings":["Punti principali dell'aggiornamento: VideoPress per matrimoni"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}Ora puoi configurare gli articoli correlati nel Personalizza. {{ExternalLink}}Provalo!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["In modo predefinito, gli annunci sono mostrati alla fine di ogni pagina, articolo, o del primo articolo nella tua pagina iniziale. Puoi anche aggiungerli in testa al tuo sito o a qualsiasi area widget per incrementare i tuoi guadagni!"],"Display an ad unit at the top of your site.":["Mostra una pubblicità in cima al tuo sito, all'inizio della schermata."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["Attivando gli ads, accetti i {{link}}Termini del Servizio{{/link}} di Automattic Ads."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Il tuo server non è configurato bene, il che significa che Jetpack Protect non riesce efficacemente a proteggere il tuo sito. "],"In \"Mobile\"":["In \"Mobile\""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Configura le impostazioni di notifica di Monitor su WordPress.com{{/link}}"],"View your earnings":["Guarda i tuoi guadagni"],"Configure site SEO":["Configura il sito con la SEO"],"Activate SEO tools":["Attiva strumenti SEO"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["Per iniziare, clicca su Aggiungi Media nel editor di scrittura del post e carica un video; il resto lo facciamo noi!"],"Video Hosting":["Video Hosting"],"SEO Tools":["Strumenti SEO"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Strumenti SEO avanzati per aiutarti a far trovare il tuo sito quando la gente cerca contenuti rilevanti. "],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["Il modo più facile per caricare video ad-free e senza \"marche\" sul tuo sito. Ottieni statistiche su quante volte i video sono stati visti e condivisi. Il player usato è responsivo e leggero."],"You are running Jetpack on a staging server.":["Jetpack sta girando su un server di staging."],"More Info":["Maggiori Informazioni"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Gestisci la visibilità dei Like dalle impostazioni del modulo Condivisione{{/a}}"],"Your current IP: %(ip)s":["Il tuo IP attuale: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["Ci sono delle impostazioni non salvate che verrano perse se abbandoni qui. Vuoi procedere?"],"This will reset all Jetpack options, are you sure?":["Questa azione resetterà le opzioni di Jetpack, confermi?"],"Search for a Jetpack feature.":["Cerca una funzionalità di Jetpack."],"Configure your Security Scans":["Configura le tue Scansioni di Sicurezza"],"Subscriber":["Subscriber"],"Big iPhone/iPad Update Now Available":["Ora disponibile un importante aggiornamento per iPhone/iPad"],"The WordPress for Android App Gets a Big Facelift":["The WordPress for Android App Gets a Big Facelift"],"WordPress.com Likes are:":["I Mi Piace di WordPress.com sono:"],"Comments headline":["Titolo dei commenti"],"A few catchy words to motivate your readers to comment.":["Poche e accattivanti parole per motivare i tuoi lettori a commentare."],"Show a \"follow blog\" option in the comment form":["Mostra nel modulo del commento l'opzione \"segui blog\""],"Show a \"follow comments\" option in the comment form":["Mostra nel modulo del commento l'opzione \"segui commenti\"."],"Put a chart showing 48 hours of views in the admin bar":["Inserisci nella barra amministrativa un grafico che mostra le ultime 48 ore di visualizzazioni"],"Hide the stats smiley face image":["Nascondi l'immagine dello smiley nelle statistiche"],"Whitelisted IP addresses":["Indirizzi IP nella whitelist"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Mostra un messaggio promozionale dell'app mobile di WordPress, visualizzato nel footer del tema mobile."],"Copied!":["Copiato!"],"Highlight and copy the following text to your clipboard:":["Evidenzia e copia il seguente testo nei tuoi appunti:"],"Regenerate address":["Rigenera indirizzi"],"Automatically proofread content when: ":["Esegui la revisione automatica del contenuto quando:"],"A post or page is first published":["Un articolo o una pagina sono stati pubblicati per la prima volta"],"A post or page is updated":["Un articolo o una pagina sono stati aggiornati"],"Automatic Language Detection":["Riconoscimento automatico della lingua"],"The proofreader supports English, French, German, Portuguese and Spanish.":["Il correttore di bozze supporta Inglese, Francese, Tedesco, Portoghese e Spagnolo."],"Enable proofreading for the following grammar and style rules: ":["Abilita il correttore di bozze per le seguenti regole di grammatica e stile:"],"Add a phrase":["Aggiungi una frase"],"Cheatin' uh?":["Cheatin' uh?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}Ci puoi dire perché non ti è stato possibile completare la connessione con Jetpack in questo {{a}}2 questionario{{/a}}?{{/p}}{{p}}Una connessione con Jetpack è richiesta affinché la nostra funzionalità gratuita per la sicurezza e il traffico funzioni.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Benvenuto alla {{s}}Jetpack %(jetpack_version)s{{/s}}! "],"Your Jetpack is already connected.":["Jetpack è già connesso."],"You're fueled up and ready to go, Jetpack is now active.":["Tutto è stato sistemato e sei pronto a partire, adesso Jetpack è attivo."],"You're fueled up and ready to go.":["Sei carico e pronto a proseguire."],"You are currently running a development version of Jetpack.":["Stai eseguendo una versione di sviluppo di Jetpack."],"Submit Beta feedback":["Invia il tuo feedback"],"What would you like to see on your Jetpack Dashboard?":["Che cosa ti piacerebbe vedere nella tua bacheca Jetpack?"],"Let us know!":["Faccelo sapere!"],"Saving…":["Salvataggio in corso..."],"Save Settings":["Salva impostazioni"],"Jetpack Stats Icon":["Icona delle statistiche di Jetpack"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Attiva le Statistiche del Sito{{/a}} per vedere statistiche dettagliate, likes, follower, subscriber e molto altro! {{a1}}Leggi di più{{/a1}}"],"Activate Site Stats":["Attiva Statistiche Sito"],"Security Scanning":["Scansione di sicurezza"],"Site Backups":["Backup del sito"],"Upgrade":["Aggiorna"],"ACTIVE":["ATTIVO"],"Your site is on Development Mode":["Il tuo sito è in modalità sviluppatore"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Una volta connesso, puoi aggiornare il tuo piano a un piano gratuito per sbloccare le nostre eccezionali funzionalità di sicurezza, protezione anti-spam e assistenza tecnica prioritaria."],"View your spam stats":["Guarda le statistiche dello spam"],"View your security dashboard":["Guarda la tua bacheca riguardo la sicurezza"],"The site is in Development Mode, so you can not connect to WordPress.com.":["Questo sito è in modalità sviluppatore, quindi non può connettersi a WordPress.com."],"Link your account to WordPress.com to get the most out of Jetpack.":["Collega il tuo account a WordPress.com per ottenere il massimo da Jetpack."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["Per una scansione automatica e completa delle minacce alla sicurezza, {a}}installa e attiva{{/ a}} VaultPress."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["Per una scansione automatica e completa delle minacce alla sicurezza, {{a}}aggiorna il tuo account{{/ a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack sta attivamente bloccando tentativi di login dannosi. I dati a riguardo ti appariranno qui molto presto!"],"Total malicious attacks blocked on your site.":["Totale degli attacchi malevoli bloccati sul tuo sito."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Attiva Protect{{/a}} per mantenere il tuo sito protetto da tentativi di sign in dannosi."],"All plugins are up-to-date. Awesome work!":["Tutti i plugin sono aggiornati. Ottimo lavoro!"],"Jetpack is improving and optimizing your image speed.":["Jetpack sta migliorando e ottimizzando la velocità della tua immagine."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack sta monitorando il tuo sito. Se pensiamo che il tuo sito non sia raggiungibile, riceverai una mail."],"Security":["Sicurezza"],"Performance":["Prestazioni"],"Backups":["Backup"],"{{a}}View backup details{{/a}}.":["{{a}}Visualizza i dettagli del backup{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["Per fare il backup automatico di tutto il tuo sito {{a}}installa e attiva{{/a}} VaultPress."],"Unavailable in Dev Mode.":["Non disponibile in Dev Mode."],"Spam Protection":["Protezione dallo spam"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["Per una difesa anti spam a regola d'arte, {{a}}installa Akismet{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["Per una difesa anti spam a regola d'arte, {{a}}attiva Akismet{{/a}}."],"Invalid key":["Chiave non valida"],"Unavailable in Dev Mode":["Non disponibile in Dev Mode"],"Activating recommended features…":["Attivando le funzionalità consigliate... "],"Recommended features active.":["Funzionalità consigliate attive."],"Recommended features failed to activate. %(error)s":["Errore nell'attivazione delle funzionalità consigliate. %(error)s"],"Activating %(slug)s…":["Attivando %(slug)s…"],"%(slug)s has been activated.":["%(slug)s è stato attivato."],"%(slug)s failed to activate. %(error)s":["Errore nell'attivazione di %(slug)s. %(error)s"],"Deactivating %(slug)s…":["Disattivazione di %(slug)s in corso..."],"%(slug)s has been deactivated.":["%(slug)s è stato disattivato."],"%(slug)s failed to deactivate. %(error)s":["Errore nella disattivazione di %(slug)s. %(error)s"],"Updating %(slug)s settings…":["Attivando le impostazioni per %(slug)s ..."],"Updated %(slug)s settings.":["Impostazioni per %(slug)s attive."],"Error updating %(slug)s settings. %(error)s":["Errore aggiornando %(slug)s impostazioni. %(error)s"],"Updating %(slug)s address…":["Aggiornando %(slug)s indirizzi…"],"Regenerated %(slug)s address .":["%(slug)s indirizzi rigenerati."],"Error regenerating %(slug)s address. %(error)s":["Errore rigenerando %(slug)s indirizzi. %(error)s"],"Resetting Jetpack options…":["Resettando le opzioni di Jetpack..."],"Options reset.":["Opzioni di reset."],"Options failed to reset.":["Le opzioni hanno fallito il reset."],"There was an error disconnecting Jetpack. Error: %(error)s":["Si è verificato un errore nel disconnettere Jetpack. Errore: %(error)s"],"Unlinking from WordPress.com":["Scollegando WordPress.com"],"Unlinked from WordPress.com.":["WordPress.com è scollegato."],"Error unlinking from WordPress.com. %(error)s":["Errore scollegando WordPress.com. %(error)s"],"At A Glance":["A colpo d'occhio"],"Clichés":["Cliché"],"Dashboard":["Bacheca"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Ci diresti perché? Rispondendo a {{a}}due semplici domande{{/a}} ci aiuterà a migliorare Jetpack."],"Automattic's Privacy Policy":["Privacy Policy di Automattic"],"WordPress.com Terms of Service":["Termini del Servizio di WordPress.com"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}Attiva{{/a}} per migliorare la performance e la velocità delle tue immagini."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Attiva gli aggiornamenti automatici del plugin{{/a}}"],"Plugin Updates":["Aggiornamenti plugin"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["Per effettuare il backup automatico dell’intero sito, {{a}}aggiorna il tuo account{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["Ops! La tua chiave Akismet è mancante o non valida. {{akismetSettings}}Vai nelle impostazioni di Akismet per correggere l'errore{{/akismetSettings}}."],"No threats found, you're good to go!":["Nessuna minaccia trovata, tutto apposto!"],"{{a}}Contact Support{{/a}}":["{{a}}Contatta il supporto{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}Visualizza dettagli su VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["Ops, %(number)s minaccia trovata.","Ops, %(number)s minacce trovate."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}Attiva Monitor{{/a}} per ricevere notifiche se il tuo sito va offline."],"Loading…":["Caricando..."],"Downtime monitoring":["Controllo di downtime"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}} Visualizza più statistiche su WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}Mostra statistiche dettagliate{{/button}}"],"All-time comments":["Tutti i commenti"],"All-time views":["Visualizzazione All-time"],"%(number)s View":["%(number)s View","%(number)s Views"],"Best overall day":["Miglior giorno complessivo"],"Views today":["Visualizzazioni odierne"],"Months":["Mesi"],"Weeks":["Settimane"],"Days":["Giorni"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["È successo qualcosa caricando le statistiche. Prova di nuovo tra un po' {{a}}guarda le tue statistiche ora su WordPress.com{{/a}}"],"Click to view detailed stats.":["Fai clic per visualizzare le statistiche dettagliate."],"Views: %(numberOfViews)s":["Visualizzazioni: %(numberOfViews)s"],"Week of %(date)s":["Week of %(date)s"],"Site Security":["Sicurezza del sito"],"Activate recommended features":["Attiva le funzionalità consigliate"],"Link to WordPress.com":["Collega a WordPress.com"],"Unlink me from WordPress.com":["Scollegami da WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["C'è stato un problema nella connessione Jetpack. Fai clic di nuovo su \"Collega Jetpack\"."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["C'è stato un problema con la connessione Jetpack; disattiva e poi riattiva il plugin Jetpack, poi riprova a connetterti."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Devi essere connesso al tuo blog WordPress durante l'autorizzazione di Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Jetpack ha riscontrato un errore tecnico.{{/s}} Ci scusiamo per l'inconveniente. Riprova più tardi e, se il problema persiste, contatta il supporto con questo messaggio: %(error_key)s"],"Disconnecting Jetpack":["Disconnessione di Jetpack in corso"],"Learn more":["Per saperne di più"],"Posts":["Articoli"],"Front page":["Pagina iniziale"],"Upload videos":["Carica video"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Mostra i contenuti correlati dopo i post"],"Related":["Correlati"],"Save":["Salva"],"Email Address":["Indirizzo e-mail"],"Media":["Media"],"Themes":["Temi"],"Site Stats":["Statistiche Sito"],"Sharing":["Condivisione"],"Testimonials":["Testimonianze"],"Cancel":["Annulla"],"Comments":["Commenti"],"Ignored Phrases":["Frasi ignorate"],"Use automatically detected language to proofread posts and pages":["Usa il rilevamento automatico del linguaggio per la revisione di articoli e pagine"],"Redundant Phrases":["Frasi Ridondanti"],"Phrases to Avoid":["Frasi da evitare"],"Passive Voice":["Forma passiva"],"Jargon":["Gergo"],"Hidden Verbs":["Verbi nascosti"],"Double Negatives":["Doppie negazioni"],"Diacritical Marks":["Segni diacritici"],"Complex Phrases":["Frasi complesse"],"Bias Language":["Linguaggio fazioso"],"English Options":["Opzioni inglese"],"Proofreading":["Correttore di bozze"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack non riesce a contattare WordPress.com: %(error_key)s. Di solito questo significa che c'è un errore nella configurazione del tuo web host."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["Al momento WordPress.com ha dei problemi e non può alimentare il tuo Jetpack. Riprova più tardi."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Jetpack ha riscontrato un errore tecnico.{{/s}} Non è possibile collegare questo sito con WordPress.com. Di solito questo significa che il tuo sito non è accessibile pubblicamente (il tuo localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Per poter utilizzare Jetpack il tuo sito deve avere permessi di accesso pubblico: %(error_key)s"],"You have successfully disconnected Jetpack":["Hai disconnesso Jetpack."],"Edit":["Modifica"],"Connected":["Collegato"],"Activate":["Attiva"],"Active":["Attivo"],"Search":["Cerca"],"Settings":["Impostazioni"],"Learn More":["Per saperne di più"],"Disconnect Jetpack":["Disconnetti Jetpack"],"Test your site’s compatibility with Jetpack.":["Testa la compatibilità del tuo sito con Jetpack."],"Settings header\u0004Plugin Autoupdates":["Aggiornamenti automatici dei plugin"],"Settings header\u0004Downtime monitoring":["Monitoraggio dei tempi di inattività"],"Settings header\u0004Privacy Settings":["Impostazioni della privacy"],"Settings header\u0004WordPress.com toolbar":["Barra degli strumenti di WordPress.com"],"Settings header\u0004Composing":["Creazione "],"Settings header\u0004Site stats":["Statistiche del sito"],"Settings header\u0004Search engine optimization":["Ottimizzazione motori di ricerca"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Bottoni di condivisione"],"Settings header\u0004Publicize connections":["Connessioni di Publicize"],"Settings header\u0004Like buttons":["Pulsanti Like"],"Settings header\u0004WordPress.com log in":["WordPress.com log in"],"Settings header\u0004Brute force attack protection":["Protezione da attacchi di forza bruta"],"Settings header\u0004Backups and security scanning":["Backup e scan di sicurezza"],"Settings header\u0004Spam filtering":["Filtro spam"],"Navigation item.\u0004Performance":["Performance"],"Navigation item.\u0004My Plan":["Il mio piano"],"Navigation item.\u0004Dev Tools":["Strumenti per gli sviluppatori"],"Navigation item.\u0004Settings":["Impostazioni"],"Navigation item.\u0004Discussion":["Discussione"],"Navigation item.\u0004Traffic":["Traffico"],"Navigation item.\u0004Sharing":["Condivisione"],"Navigation item.\u0004At A Glance":["A prima vista"],"Navigation item.\u0004Plans":["Abbonamenti"],"Navigation item.\u0004Writing":["Scrittura"],"Navigation item.\u0004Reset Options (dev only)":["Opzioni Reset (solo per sviluppatori)"],"Navigation item.\u0004Security":["Sicurezza"],"Navigation item.\u0004At a Glance":["In sintesi"],"Search term.\u0004terms of service":["termini di servizio"],"Search term.\u0004tos":["ToS (Termini di Servizio)"],"Search term.\u0004gdpr":["gdpr"],"Search term.\u0004data":["dati"],"Search term.\u0004tracks":["tracce"],"Search term.\u0004privacy":["privacy"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["Aggiorna"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Aggiorna"],"Button caption\u0004Saving…":["Salvataggio in corso…"],"Button caption\u0004Save settings":["Salva le impostazioni"],"A heading for a block of related posts.\u0004Related":["Correlati"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Anteprima"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Rimani connesso"],"A caption for a button to disconnect.\u0004Disconnect":["Disconnetti"],"Short warning message\u0004Updates needed":["Update necessari"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Paid"],"A header for a preview area in the configuration screen.\u0004Preview":["Anteprima"],"Ads header\u0004Ads":["Ads"],"Dashboard widget header\u0004Site connection":["Sito connesso"],"Dashboard widget header\u0004Account connection":["Connessione dell'account"],"A caption for a small button to fix security issues.\u0004Threats":["Minacce"],"A caption for a small button to fix security issues.\u0004FIX":["FIX"],"Short warning message about new threats found.\u0004Threats found!":["Minacce rilevate!"],"Short warning message about site having no security scan.\u0004No scanning":["Nessuno scan"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Aggiorna"],"Short message informing user that the site is secure.\u0004Secure":["Sicuro"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Chiave non valida"],"Caption for a button to set up a feature.\u0004Set up":["Configura"],"verb\u0004Copy":["Copia"],"Shorthand for Privacy Policy.\u0004Privacy":["Privacy"],"Shorthand for Terms of Service.\u0004Terms":["Termini"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Debug"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["Commenti spam bloccati."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-ja-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-ja-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 9fa0224d..00000000
--- a/plugins/jetpack/languages/json/jetpack-ja-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=1; plural=0;","lang":"ja_JP"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":["次に、サイトのセキュリティとパフォーマンスを最大限に高めるために、Jetpack の推奨機能セットを有効にします。{{a}}内容の詳細はこちらを参照してください{{/a}}。"],"We’re now collecting stats and securing your site. Welcome aboard.":["現在、統計情報を収集してサイトを保護しています。ようこそ。"],"{{a}}Skip, and explore features individually{{/a}}.":["{{a}}スキップして個別に機能を見る{{/a}}。"],"Jetpack Business Plan":["Jetpack ビジネスプラン"],"Jetpack Premium Plan":["Jetpack プレミアムプラン"],"Jetpack Personal Plan":["Jetpack パーソナルプラン"],"Get started with hassle-free design, stats, and performance tools.":["手間のかからないデザイン、統計、パフォーマンスのツールを使ってみましょう。"],"Welcome to Jetpack Free":["Jetpack 無料プランへようこそ"],"Jetpack Free Plan":["Jetpack 無料プラン"],"Explore Jetpack plans":["Jetpack プランを見る"],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":["自動バックアップと優先サポートの安心感を得て、高度な SEO ツールを使用して幅広いユーザーを獲得し、広告を掲載してサイトを収益化し、200以上のプレミアムテーマを使用してサイトをカスタマイズします。"],"Jetpack offers so much more":["Jetpackはさらに多くの機能を提供します"],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":["サポートが必要ですか ?サポートサイトで、あなたのサイトとアカウントについての詳細情報、WordPress サイトを最大限に活用する方法を確認してください。"],"Support documentation":["サポートドキュメンテーション"],"Chat bubbles representing getting in touch with support":["サポートとの連絡を表すチャットのふきだし"],"Site Activity":["サイトアクティビティ"],"Start publicizing now":["今すぐ宣伝を開始"],"Reach a wider audience by automatically sharing your posts on social media.":["ソーシャルメディアで投稿を自動的に共有することで、より幅広いユーザーを獲得します。"],"Increase traffic to your site":["サイトのトラフィックを増やす"],"Explore free themes":["無料テーマを見る"],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":["何百ものプロフェッショナルなテーマに無制限にアクセスして、好きなようにサイトをカスタマイズしましょう。"],"A wide variety of themes and tools to customize a site":["サイトをカスタマイズするためのさまざまなテーマとツール"],"Set up your site security":["サイトのセキュリティを設定"],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":["ログイン攻撃を防ぎ、サイトで問題が発生するとすぐに通知を受け取ります。"],"Site stats showing an evolution in traffic and engagement":["トラフィックとエンゲージメントの進化を示すサイト統計情報"],"A hand holding a loupe":["ルーペを持っている手"],"A chart showing an healthy increase in earnings":["収益が順調に増加していることを示すグラフ"],"Interface showing a chronological list of changes and updates in a site":["サイトの変更と更新を時系列のリストで示すインターフェース"],"A cloud with multiple types of content floating around it":["周囲に複数の種類のコンテンツが浮かんでいるクラウド"],"A folder holding real comments":["実際のコメントが入っているフォルダー"],"Make your site faster":["サイトをさらに高速にする"],"Load pages faster by serving your images from our global network of servers.":["WordPress.com のグローバルサーバーネットワークから画像を配信することで、ページの読み込みを高速にします。"],"A fast and performant website":["高速で高性能なサイト"],"A secure site, locked and protected by Jetpack":["Jetpack でロックおよび保護された安全なサイト"],"These settings won't apply to related posts added using the block editor.":["これらの設定はブロックエディターを使って追加された関連記事には適用されません。"],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["既存の投稿、ページ、推薦文、ポートフォリオを複製します。テキスト、アイキャッチ画像、共有設定など、すべてのコンテンツがコピーされます。"],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":["このサイトは{{a}}利用規約{{/a}}に違反しているため、WordPress.com にリンクできません。"],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":["サイトをソーシャルメディアネットワークに接続すると、クリックひとつですべてのソーシャルアカウントにコンテンツをシェアできます。投稿すると、すべての接続済みアカウントに表示されます。"],"Add Like buttons to your posts and pages":["投稿とページに「いいね」ボタンを追加"],"When visitors enjoy your content, let them show it with a Like.":["「いいね」ボタン付きでコンテンツを訪問者に表示しましょう。"],"Explore your Jetpack Professional plan!":["Jetpack プロフェッショナルプランについて詳しく読む"],"Explore your Jetpack Premium plan!":["Jetpack プレミアムプランについて詳しく読む"],"Explore your Jetpack Personal plan!":["Jetpack パーソナルプランについて詳しく読む"],"Create account":["アカウントを作成"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["Jetpack はサイトの強化に役立つ優れものですが、そのすべての機能にアクセスするには、アカウントの作成が必要です。"],"Real-time, automated backups (unlimited storage)":["リアルタイムな自動バックアップ (容量無制限)"],"Compose content the way you want to and streamline your publishing experience.":["思いどおりにコンテンツをカスタマイズし、サイト公開までの手順を合理化できます。"],"Add a portfolio item":["ポートフォリオ項目の追加"],"Add a testimonial":["推薦文を追加"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["検索エンジンにおけるサイトの上位表示を最大化し、リアルタイムのトラフィック統計を表示できます。"],"Create a Jetpack account to use this feature":["Jetpackアカウントを作成して機能を利用する"],"Share your content on social media and increase audience engagement.":["コンテンツをソーシャルメディアでシェアして、オーディエンスエンゲージメントを高めることができます。"],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["Jetpack はサイトを継続的にモニタリングし、ダウンタイムが検出されたら即座にアラートを送信します。"],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["プラグインのアップデートがリリースされたら、直ちにそのプラグインを更新することが推奨されます。自動更新するプラグインを選択することで、サイトを常に安全な状態に保つことができます。"],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["最新鋭のセキュリティでサイトの安全を確保でき、技術的問題が生じたら通知を受信できます。"],"Error enabling Site accelerator. %(error)s":["サイトアクセラレータの有効化中にエラーが発生しました。%(error)s"],"Site accelerator is now speeding up your site!":["サイトアクセラレータでサイトが高速化されています。"],"Enabling Site accelerator…":["サイトアクセラレータを有効化しています…"],"Error disabling site accelerator. %(error)s":["サイトアクセラレータの無効化中にエラーが発生しました。%(error)s"],"Site accelerator is no longer speeding up your site!":["サイトアクセラレータによるサイトの高速化が無効となっています。"],"Disabling site accelerator…":["サイトアクセラレータを無効化しています…"],"Load pages faster, optimize images, and speed up your visitors’ experience.":["より迅速にページをロードし、画像を最適化することで、閲覧者がスムーズにサイトを利用できるようにします。"],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["Google による読者とトラフィックパターンの詳細な観察により、WordPress.com の統計機能が補完されます。"],"High-speed, high-definition video hosting with no third-party ads.":["第三者の広告なしの、高速、高精細度動画。"],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["無制限のツイート、Facebook 投稿、その他のソーシャル投稿を事前に予約します。"],"Marketing Automation":["マーケティングの自動化"],"Activate Jetpack Search":["Jetpack 検索の有効化"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["デフォルトの WordPress 検索に代わって Elasticsearch によるこの検索機能を使用すると、結果とフィルター機能が向上します。"],"Start earning":["収益の獲得を開始"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["WordAds を利用すると、プロモーションコンテンツを表示して収益を得ることができます。収益の獲得を今すぐ開始してください。"],"Spam is automatically blocked from your comments.":["コメントへのスパムを自動的にブロックします。"],"Spam Filtering":["スパムフィルター"],"Browse premium themes":["プレミアムテーマの参照"],"Access hundreds of beautifully designed premium themes at no extra cost.":["美しいデザインのプレミアムテーマが何百も備わっており、追加料金なしで利用できます。"],"Try a premium theme":["プレミアムテーマをお試しください"],"View settings":["設定の表示"],"Create a Jetpack account to view your email followers":["Jetpackアカウントを作成して、メールフォロワーを表示する"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["サイトを開いて、最新のコメントや投稿を知らせるアラートの受信登録をするよう購読者に促すことができます。"],"Manage security settings":["セキュリティ設定の管理"],"Built-in Performance":["組み込み型のパフォーマンス"],"Jetpack is ready for the new WordPress editor":["新しい WordPress エディターで Jetpack が利用できるようになりました"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["本日は、Jatpack 固有のブロックの第一弾をご紹介します。これはシンプルな支払いボタン、フォーム、マップ、値引きといった、新しいエディターエクスペリエンス専用に構築されています。"],"Build your Jetpack site with blocks":["ブロックを使用して Jetpack サイトを構築"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["新しいエディターとは何でしょうか?はい。{{a}}さらに詳しく{{/a}}。"],"The features you rely on, adapted for the new WordPress editor.":["新しい WordPress エディターに適応した、頼りになる機能です。"],"Take me to the new editor":["新しいエディターにご案内"],"Testing Jetpack Connection":["Jetpack 連携をテスト中"],"There was an error testing Jetpack. Error: %(error)s":["Jetpack のテストに失敗しました。エラー: %(error)s"],"New in Jetpack!":["Jetpack の新機能 !"],"Speed up static file load times":["静的ファイルの読み込みをスピードアップ"],"Speed up image load times":["画像の読み込みをスピードアップ"],"Enable site accelerator":["サイトアクセラレーターを有効化"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["Jetpack で画像を最適化し、WordPress.com のサーバーによるグローバルネットワークから画像と静的ファイル (CSS や JavaScript など) を配信するようにすることで、ページの読み込みを高速化できます。"],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["サイトにもう1つのセキュリティ層を追加するには、WordPress.com ログインとセキュア認証を有効化します。複数のサイトでこのオプションが有効化されている場合、それらのサイトのすべてで同じログイン情報を使用してログインできます。"],"View your site activity":["サイトのアクティビティを表示"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["サイトの変更と更新を新しいものから順にわかりやすくリストします。"],"Manually Verify ":["手動で検証"],"Verify with Google":["Google で検証"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["サイトが{{a1}}ハッキング{{/a1}}されているという通知や、サイトの{{a2}}クローリングやインデックス{{/a2}}に関する問題など、サイトで発生した特定の問題に関して Google からメールが送られます。"],"or":["または"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["{{a}}Google Search Console{{/a}} からサイトのトラフィックおよびパフォーマンスをモニターします。"],"Your site is verified with Google":["サイトは Google によって検証されました"],"Site failed to verify: %(error)s":["サイトの検証に失敗しました:%(error)s"],"Verifying...":["検証中..."],"Add faster, more advanced searching to your site with Jetpack Professional.":["Jetpack プロ版をご利用いただくと、より高速で高度な検索をサイトで実現できます。"],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["WordPress のビルトイン検索機能を、高度な検索エクスペリエンスである Jetpack 検索に置き換える"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["Jetpack 検索はビルトイン検索に代わるもので、WordPress.com クラウドによってホストされる、高速かつスケーラブルで、カスタマイズ可能であり、より関連性の高い検索を実現します。結果:ユーザーが必要なコンテンツを短時間で見つけられます。"],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["ビルトイン WordPress 検索は、コンテンツがそれほど多くはないサイトに向いています。しかし、サイトの規模が大きくなるにつれて、検索速度が低下し、結果の関連性も低下します。"],"Jetpack Search supports many customizations.":["Jetpack 検索は多くのカスタマイズをサポートしています。"],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["ビルトイン検索を、{{a}}WordPress.com クラウドによってホストされる{{/a}}、高速かつスケーラブルで、カスタマイズ可能であり、より関連性の高い検索に置き換えます。"],"Site is verified":["サイトが検証されました"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}望み通りの見た目と機能を持つ美しいサイトを作成するため、Jetpack プロ版では、200を超える WordPress プレミアムテーマに無制限にアクセスできます。{{/p}}{{p}}Jetpack プロ版は、ぴったりのデザインを見つけるためだけのものではありません。また、専門家からなるグローバルチームから優先サポートも受けられるので安心できます。{{/p}}"],"Spam filtering and priority support.":["スパムフィルターと優先サポート。"],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["広告を有効にすると、Jetpack はご利用のサイト用に作成されたカスタムの ads.txt を自動生成します。"],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["Jetpack はご利用のサイト用に作成されたカスタムの {{link}}ads.txt{{/link}} を自動生成します。他のネットワークの追加エントリーが必要な場合、下記のスペースに1行に1つずつ追加してください。"],"Custom ads.txt entries":["カスタム ads.txt エントリー"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}望み通りの見た目と機能を持つ美しいサイトを作成するため、Jetpack プロ版では、200を超える WordPress プレミアムテーマに無制限にアクセスできます。{{/p}}{{p}}Jetpack プロ版は、ぴったりのデザインを検索するためだけのものではありません。安心感を与えるものでもあるのです。リアルタイムバックアップ、自動マルウェアスキャン、および専門家のグローバルチームからの優先サポートは、サイトが常に安全に保護されることを保証します。{{/p}}"],"Introducing Premium Themes":["プレミアムテーマの導入"]," Premium Themes":["プレミアムテーマ"],"Privacy information":["プライバシーに関する情報"],"Enable Lazy Loading for images":["画像の遅延読み込みを有効にする"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["画像の遅延読み込みによって、サイトの速度が向上し、よりスムーズな閲覧エクスペリエンスが実現します。画像は、まとめてではなく、訪問者が画面をスクロールダウンすると読み込まれます。"],"Performance & speed":["パフォーマンスおよびスピード"],"Enable high-speed, ad-free video player":["広告非表示の高速動画プレーヤーを有効にする"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["公開するコンテンツを高解像度の動画でより魅力的にします。Jetpack 動画を使用すると、メディアプレーヤーをカスタマイズし、広告非表示の、高速でブランド名の付けられていない動画を訪問者に配信できます。動画は WordPress.com サーバーでホストされるため、ホスティングプランからスペースが消費されることはありません。"],"Video":["動画"],"Carousel color scheme":["カルーセルの配色"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Exif データは、写真の焦点距離、絞り、ISO などの他の技術的な情報を閲覧者に表示します。"],"Show photo Exif metadata in carousel (when available)":["写真の Exif メタデータが存在する場合カルーセルに表示する"],"Display images in a full-screen carousel gallery":["画像を全画面のカルーセルギャラリーで表示する"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["投稿やページにある画像の全画面カルーセルスライドショーを作成します。カルーセルギャラリーはモバイルに対応しており、サイト訪問者が写真を操作するよう促します。"],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["WordPress.com ツールバーはデフォルトの WordPress 管理ツールバーに置き換えられ、WordPress が使いやすくなります。すべてのサイトを管理し、WordPress.com プロファイルを更新し、通知を表示し、Reader でフォローしているサイトをチェックするためのワンクリックアクセスを提供します。"],"Portfolios shortcode: [portfolio]":["ポートフォリオショートコード: [portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["サイトの{{portfolioLink}}ポートフォリオ{{/portfolioLink}}を使用して、最高傑作を表示します。テーマが Jetpack ポートフォリオをサポートしていない場合は、引き続きシンプルなショートコードを使用してサイトに表示することができます。"],"Testimonials shortcode: [testimonials]":["推薦文のショートコード: [testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["サイトに{{testimonialLink}}推薦文{{/testimonialLink}}を追加して、新規顧客を引き付けます。テーマが Jetpack 推薦文をサポートしていない場合は、引き続きシンプルなショートコードを使用してサイトに表示することができます。"],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["検索エンジンでは現在サイトにアクセスできません。サイトにアクセスできるようにするには、{{a}}表示設定{{/a}}を確認して、「検索エンジンでの表示」を有効にします。"],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["嬉しいお知らせ:Jetpack は、インデックス用にすべての主要な検索エンジンに対して自動的にサイトマップを送信しています。"],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["サイトマップは、Google または Bing などの検索エンジンがサイトをインデックスするのに使用するファイルです。検索結果のランキングを上げるのに役立ちます。この機能を有効にすると、Jetpack はサイトマップを作成し、サイトのコンテンツが変更されると自動的に更新します。"],"Configure related posts in the Customizer":["カスタマイザーにある関連記事を設定する"],"Highlight related content with a heading":["見出し付きの関連記事をハイライト表示する"],"View security scan details":["セキュリティスキャンの詳細を表示"],"View backup history":["バックアップ履歴を表示"],"Show a thumbnail image where available":["使用可能な場合はサムネイル画像を表示します"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["特定の Jetpack 機能によるデータの使用方法とアクティビティの追跡方法の詳細については、{{privacyCenterLink}}プライバシーセンター{{/privacyCenterLink}}を参照してください。"],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["サードパーティのものを含め、他の追跡ツールを使用します。それらについての{{cookiePolicyLink}}詳細{{/cookiePolicyLink}}と設定方法についてお読みください。"],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["この情報は、製品を改善し、マーケティングをより関連性の高いものとし、WordPress.com の利用をパーソナライズするのに役立ちます。さらに詳しくは、{{pp}}個人情報保護方針{{/pp}}をご覧ください。"],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["WordPress.com アカウントへのログイン中のサービス利用の情報を分析ツールと共有してください。{{cookiePolicyLink}}さらに詳しく{{/cookiePolicyLink}}。"],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["この機能はサイト管理者によって管理されています。{{link}}さらに詳しく{{/link}}。"],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["この機能はサイト管理者によって無効化されています。{{link}}さらに詳しく{{/link}}。"],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["この機能はサイト管理者によって有効化されています。{{link}}さらに詳しく{{/link}}。"],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["%(moduleName)s はサイト管理者によって無効化されています。{{link}}さらに詳しく{{/link}}。"],"This feature has been disabled by a site administrator.":["この機能はサイト管理者によって無効化されています。"],"%(moduleName)s has been disabled by a site administrator.":["%(moduleName)s はサイト管理者によって無効化されています。"],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["広告ウィジェットを使用して、さらに広告を追加できます。{{link}}お試しください !{{/link}}"],"Configure your notification settings":["通知の設定を構成"],"Monitor your site's downtime":["サイトの稼働率をモニター"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["WordPress に組み込まれた検索機能の代わりに、強力な Jetpack 検索を使用できます。"],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["サイトのファイルが定期的にスキャンされて、セキュリティやデータを侵害する可能性がある不正な変更や疑わしい変更の有無が調べられます。"],"Plugin needs updating.":["プラグインの更新が必要です。"],"%(number)s":["%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Jetpack のプラグイン更新を使用して、自動的に更新するプラグインを選択できます。"],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack が画像を最適化し、訪問者に最も近いところにあるから画像を提供します。WordPress.com のグローバルコンテンツ配信ネットワークを使用すると、サイトの読み込み速度が向上します。"],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":["Jetpack のダウンタイムモニターはサイトを継続的に監視し、ダウンした場合すぐにアラートを送ります。"],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Jetpack のバックアップを使用すると、特定の時点のバックアップを簡単に復元またはダウンロードできます。"],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet はコメントとお問い合わせフォームの送信を、スパムのグローバルデータベースに照らし合わせてチェックします。"],"Privacy Information":["プライバシーに関する情報"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["VideoPress を利用すると、自分のホストのサーバーではなく、WordPress.com でホスティングされるコンピューターから動画をアップロードできます。その後、インストール型の Jetpack サイトに挿入できます。"],"Add the Search (Jetpack) widget to your sidebar":["検索 (Jetpack) ウィジェットをサイドバーに追加"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["すばやく関連性の高い検索結果を得られるように、フィルターとソートができる優れた検索体験を訪問者に提供しましょう。"],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["モバイル端末の訪問者に表示される、軽量なモバイル対応テーマを有効にします。"],"Loads the next posts automatically when the reader approaches the bottom of the page.":["ページの末尾に近づいたら、次の投稿を自動的に読み込みます。"],"Allows you to publish new posts by sending an email to a special address.":["特殊なアドレスにメールを送信することにより、新しい投稿を公開できるようにします。"],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["Markdown 構文を使用して、コンテンツにリンク、リスト、その他のスタイルを構成可能にします。"],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["書き込み中にコンテンツの文法、スペル、語句の誤用、スタイルをチェックします。"],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["WordPress サイトと様々なサービスを検証するために必要な隠しタグを提供します。"],"Displays information on your site activity, including visitors and popular posts or pages.":["訪問者や、人気の投稿とページなど、サイトアクティビティの情報を表示します。"],"Allows you to optimize your site and its content for better results in search engines.":["サイトとコンテンツが検索エンジンで最善の結果を得られるようにするため最適化できるようにします。"],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["WordPress サイトを、トラフィック、訪問者、変換に対する統計概要を提供するプラットフォームである Google Analytics と統合します。"],"Displays high-quality ads on your site that allow you to earn income.":["サイトに高品質の広告を表示し、収益を得られるようにします。"],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["コンテンツに共有ボタンを追加し、訪問者がソーシャルメディアサイトで共有できるようにします。"],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["最新のコンテンツを Facebook や Twitter などのソーシャルメディアサイトで自動共有できるようにします。"],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["コンテンツに「いいね」ボタンを追加し、訪問者が評価を表示できるようにします。"],"Allows registered users to log in to your site with their WordPress.com accounts.":["登録ユーザーが WordPress.com アカウントを使ってサイトにログインできるようにします。"],"Protects your site from traditional and distributed brute force login attacks.":["総当たりログイン攻撃 (典型的、分散型の両方) からサイトを保護します。"],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["サイトをグローバル WordPress.com サーバーにバックアップし、緊急時やエラー発生時にコンテンツを復元できるようにします。"],"Removes spam from comments and contact forms.":["コメントやお問合せフォームからスパムを削除します。"],"We are committed to your privacy and security. ":["あなたのプライバシーとセキュリティの保護をお約束します。"],"View all Jetpack plans":["Jetpack プランをすべて表示"],"Manage your plan":["プランの管理"],"Your Plan":["自分のプラン"],"You’re currently on Jetpack %(plan)s.":["現在 Jetpack %(plan)s をご利用になっています。"],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["読者が投稿やコメントを購読し、新しいコンテンツの通知メールを受け取れるようにします。"],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["標準 WordPress コメントフォームを、ソーシャルメディアログインオプションを組み込んだ新しいコメントシステムに切り替えます。"],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["Jetpack 検索を{{a}}有効化{{/a}}することで、WordPress の組み込み検索機能を高度な検索エクスペリエンスで置き換えられます。"],"Add Search (Jetpack) Widget":["検索 (Jetpack) ウィジェットを追加"],"Jetpack Search is powering search on your site.":["Jetpack 検索はサイトの検索を強化します。"],"Manage your plugins":["プラグインの管理"],"Moderate comments":["コメントを承認"],"Error updating privacy settings. %(error)s":["プライバシー設定の更新中にエラーが発生しました。%(error)s"],"Updated privacy settings.":["プライバシー設定を更新しました。"],"Updating privacy settings…":["プライバシー設定の更新中..."],"Add Jetpack Search Widget":["Jetpack 検索ウィジェットを追加"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["Jetpack 検索ウィジェットをサイドバーに追加して、並べ替えとフィルターを設定します。"],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["フルセキュリティスイート、マーケティングと収益の自動化ツール、無制限動画ホスティング、テーマ無制限利用、高度な検索、優先サポート。"],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["フルセキュリティスイート、マーケティングと収益の自動化ツール、無制限動画ホスティング、優先サポート。"],"Daily backups, spam filtering, and priority support.":["日次バックアップ、スパムフィルター、優先サポート。"],"Always-on Security":["常時有効なセキュリティ"],"Activate video hosting":["動画ホスティングを有効化"],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["サイトのすべてのデータの容量無制限でのリアルタイムバックアップ、ワンクリック復元、自動的なセキュリティスキャン、優先サポート。"],"Design the perfect website":["パーフェクトなサイトをデザイン"],"Set up Jetpack":["Jetpack を設定"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["サイトのすべてのデータの容量無制限でのリアルタイムバックアップ、ワンクリック復元、自動的なセキュリティスキャン。"],"Jetpack Search":["Jetpack 検索"],"Jetpack version %(version)s":["Jetpack バージョン %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["サイトのバックアップがリアルタイムで実行され、セキュリティの脅威がないかどうかを確認するサイトのスキャンが定期的に実行されます。"],"Daily backup of all your site data with unlimited space and one-click restores":["容量無制限でサイトのすべてのデータを毎日バックアップでき、ワンクリックで復元できます。"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["容量無制限でサイトのすべてのデータをリアルタイムにバックアップでき、ワンクリックで復元できます。また、自動セキュリティスキャンやワンクリックの脅威解決も含まれます。"],"View your security activity":["セキュリティアクティビティを表示"]," (powered by VaultPress).":["(Powered by VaultPress)。"],"Customize Search Widget":["検索ウィジェットのカスタマイズ"],"Please correct the issue below and try again.":["下記の問題を解決してから、もう一度お試しください。"],"We are making sure your site stays free of security threats. You will be notified if we find one.":["このサイトにセキュリティ面での脅威がないよう監視しています。問題を検出した場合は通知します。"],"Your site is being backed up in real-time.":["サイトをリアルタイムでバックアップしています。"],"Jetpack version":["Jetpack バージョン"],"{{a}}View your site's activity{{/a}} in a single feed.":["ひとつのフィードで{{a}}サイトのアクティビティをまとめて表示{{/a}}できます。"],"Activity":["アクティビティ"],"Confirm each new phrase you add by pressing enter.":["Enter キーを押して、新しい各フレーズの追加を確定します。"],"{{a}}View details{{/a}}":["{{a}}詳細を表示{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["Jetpack プロフェッショナルプランをお選びいただき、ありがとうございます。コンテンツのリアルタイムバックアップ、セキュリティ脅威のスキャン、プレミアムテーマのご利用が可能になりました。"],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["Jetpack プロフェッショナルでは、200以上のプレミアムデータをはじめとする、300以上のプロフェッショナルなデザインの WordPress テーマを利用して、素晴らしいサイトを作成できます。さまざまなウィジェットでコンテンツをカスタマイズしたり、広告やウォーターマークのない無制限の動画を投稿やページに追加したりすることができます。"],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["プロフェッショナルプランなら、コンテンツ共有と予約機能、SEO ツール、ビルトインのサブスクリプションオプションでフォロワーを簡単に増やすことができます。シンプルペイメントボタンとインライン広告でサイトを収益化し、Google Analytics を組み込んでサイトの効果を監視しませんか。"],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Jetpack プロフェッショナルプランには、オンデマンドバックアップ、マルウェアスキャン、ワンクリック復元、問題解決など、サイトを安全に保護するために必要なすべての機能が揃っています。スパム、悪意のあるコード、ログインを試みる総当たり攻撃から、サイトを安全に保護します。"],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Jetpack プロフェッショナルを今すぐご利用になり、新しいプランのメリットを体験してください。"],"Install premium themes":["プレミアムテーマをインストール"],"Review SEO features":["SEO 機能をレビュー"],"Welcome Professional":["プロフェッショナルプランへようこそ"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["Jetpack プレミアムプランをお選びいただき、ありがとうございます。Jetpack はサイトをバックアップし、セキュリティの脅威をスキャンし、収益化を実現します。"],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["Jetpack プレミアムでは、どのような目的のサイトの構築にも対応できます。100以上の無料テーマを使ってサイトの外観をカスタマイズし、最大13 GB までの HD 動画でコンテンツを拡張できます。すべての HD 動画には、広告や透かし模様が入りません。"],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Jetpack のパワフルな共有ツールを使って、ソーシャルメディアで最新の投稿を自動的に共有し、コンテンツを再共有する日時を自由に設定することができます。フォロワーの増加に伴い、支払いボタンや広告などのツールを利用してビジネスを拡大できます。"],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Jetpack プレミアムを今すぐご利用になり、新しいプランのメリットを体験してください。"],"Monetize your site with ads":["広告でサイトを収益化する"],"Welcome Premium":["プレミアムプランへようこそ"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["Jetpack パーソナルプランをお選びいただき、ありがとうございます。Jetpack はサイトの内容をバックアップし、セキュリティの脅威をスキャンします。"],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["Jetpack パーソナルでは、100以上のプロフェッショナルなデザインの WordPress テーマをご利用いただけます。サイトに合うテーマを選び、色や画像をカスタマイズしたり、新しいウィジェットを追加したりできます。"],"Got it":["OK"],"Welcome personal":["パーソナルプランへようこそ"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["下のボタンをクリックすると、{{tosLink}}利用規約{{/tosLink}}および WordPress.com と{{shareDetailsLink}}詳細情報を共有する{{/shareDetailsLink}}ことに同意したものとみなされます。"],"Jetpack Stats People":["人に関する Jetpack の統計情報"],"Hello there! Your stats have been activated.":["こんにちは !お客様のサイトが有効化されました。"],"Just give us a little time to collect data so we can display it for you here.":["ここに表示するデータを収集するまでの間、少々お待ちください。"],"Okay, got it!":["完了しました !"],"Display ads below posts on":["投稿の下に広告を表示"],"Additional ad placements":["追加広告の表示場所"],"Top of each page":["各ページの上部に表示"],"Second ad below post":["2番目の広告を投稿の下に表示"],"Archives":["アーカイブ"],"Explore Professional":["プロ版について詳しく読む"],"Compare All Plans":["すべてのプランを比較"],"Person with laptop":["ラップトップユーザー"],"Your Jetpack site is ready to go!":["Jetpack サイトの準備ができました !"],"Stars":["星"],"Jupiter":["木星"],"Welcome to Jetpack Personal":["Jetpack パーソナルプランへようこそ"],"Welcome to Jetpack Premium":["Jetpack プレミアムプランへようこそ"],"Welcome to Jetpack Professional":["Jetpack プロ版へようこそ"],"Schedule posts":["投稿を予約"],"Activate Publicize":["パブリサイズを有効にする"],"Your site is backed up.":["サイトはバックアップ済みです。"],"Image Performance":["画像のパフォーマンス"],"Get WordPress Apps for every device":["すべての端末に WordPress アプリを"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["ひとつのダッシュボードからすべてのサイトを管理できます。コンテンツの公開、統計情報の追跡、コメントの承認など、さまざまな操作を世界中のどこからでも実行できます。"],"I already use this app.":["すでにこのアプリを利用中です。"],"Create address":["アドレスを作成"],"Priority support":["優先サポート"],"Add sharing buttons to your posts":["投稿に共有ボタンを追加"],"Automatically share your posts to social networks":["投稿をソーシャルネットワークに自動共有"],"Updating settings…":["設定を更新中..."],"Updating Post by Email address…":["メール投稿のアドレスを更新中..."],"Your paid plan gives you access to prioritized Jetpack support.":["現在ご利用の有料プランでは、Jetpack 優先サポートにアクセスできます。"],"You have paid for backups but they're not yet active.":["バックアップに対するお支払いが完了していますが、まだ有効化されていません。"],"You have paid for backups and security scanning but they’re not yet active.":["バックアップとセキュリティスキャンに対するお支払いが完了していますが、まだ有効化されていません。"],"Click \"Set Up\" to finish installation.":["「セットアップ」をクリックしてインストールを完了してください。"],"Checking site status…":["サイトのステータスを確認中…"],"Pages":["固定ページ"],"We're here to help":["サポートスタッフがお答えします"],"Jetpack comes with free, basic support for all users.":["Jetpack にはすべてのユーザーが利用できる無料の基本サポートが付いています。"],"Ask a question":["質問する"],"Search our support site":["サポートサイトを検索"],"Get a faster resolution to your support questions.":["問題に対して優先サポートを受ける。"],"Host fast, high-quality, ad-free video.":["広告非表示の高速高品質動画をホスト。"],"Generate income with high-quality ads.":["高品質な広告で収益を得ましょう。"],"Real-time site backups and automatic threat resolution.":["リアルタイムのサイトバックアップと、セキュリティの脅威に対する自動解決。"],"Protect against data loss, malware, and malicious attacks.":["データロス、マルウェア、悪意のある攻撃から保護。"],"Integrate easily with Google Analytics.":["Google アナリティクスと簡単に統合。"],"Help your content get found and shared with SEO tools.":["SEO ツールを使って、コンテンツが発見・共有されやすくなる手助けをしましょう。"],"Protect your site from spam.":["サイトをスパムから保護。"],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["このサイトは WordPress.com に接続していません。サイト管理者に接続を依頼してください。"],"Spam filtering":["スパムのフィルタリング処理"],"Daily, automated malware scanning":["毎日、マルウェアを自動スキャン"],"Daily, automated backups (unlimited storage)":["毎日の自動バックアップ (容量無制限)"],"Daily, automated malware scanning with automated resolution":["毎日、マルウェアを自動スキャンして自動修復"],"Unlimited, high-speed video hosting":["高速で容量無制限の動画ホスティング"],"SEO preview tools":["SEO プレビューツール"],"Site stats, related content, and sharing tools":["サイト統計情報、関連コンテンツ、共有ツール"],"Brute force attack protection and downtime monitoring":["総当たり攻撃に対する防御とダウンタイム監視"],"Unlimited, high-speed image hosting":["高速画像を容量無制限でホスティング"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["%(siteName)s を WordPress.com から切断すると、以下が利用ができなくなります。"],"Read more about Jetpack benefits":["Jetpack のメリットについて詳しく読む"],"An Automattic Airline":["Automattic Airline"],"Manage site connection":["サイト接続の管理"],"Connect your account to WordPress.com to view more stats":["アカウントを WordPress.com に接続してさらに統計情報を表示"],"Theme enhancements":["テーマの拡張"],"Load more posts using the default theme behavior":["デフォルトのテーマ動作を使用して投稿をさらに読み込む"],"Load more posts in page with a button":["ボタンを使ってページの投稿をさらに読み込む"],"Load more posts as the reader scrolls down":["読者のスクロールに合わせて投稿をさらに読み込む"],"Theme support required.":["テーマのサポートが必要です。"],"Learn more about adding support for Infinite Scroll to your theme.":["テーマに Infinite Scroll のサポートを追加することについて詳しく読む。"],"Use excerpts instead of full posts on front page and archive pages":["ホームページとアーカイブページに投稿の全文ではなく抜粋を使用"],"Show featured images":["アイキャッチ画像を表示"],"Enable the WordPress.com toolbar":["WordPress.com ツールバーを有効化"],"Writing tools available to you will be shown here when an administrator enables them.":["管理者が有効化すると、使用できる作成ツールがここに表示されます。"],"Portfolios":["ポートフォリオ"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["検索エンジンでサイトがインデックスされるようにするには、{{b}}各サービスでサイトを認証する必要はありません{{/b}}。高度な検索エンジンツールを使用し、サービスでサイトを認証するには、下に HTML タグコードを貼り付けてください。問題がある場合は、{{support}}詳細な手順{{/support}}をお読みください。対応認証サービス:{{google}}Google Search Console{{/google}}、{{bing}}Bing Webmaster Center{{/bing}}、{{pinterest}}Pinterest Site Verification{{/pinterest}}、{{yandex}}Yandex.Webmaster{{/yandex}}。"],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["XML サイトマップを生成"],"Collecting valuable traffic stats and insights":["トラフィックの統計情報と概要の収集"],"The image helps collect stats, but should work when hidden.":["画像は統計収集に役立ちますが、非表示時でも機能するはずです。"],"Count logged in page views from":["次の場所からログインして閲覧したページビューの数"],"Allow stats reports to be viewed by":["統計レポートの閲覧を許可するユーザー"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["より高度な管理を行う場合は、これらの設定を調整できます。{{a}}サイトの SEO の最適化{{/a}}を行う方法について詳しくお読みください。"],"Configure your SEO settings":["SEO 設定を構成します"],"In \"Upgrade\"":["「アップグレード」内"],"Configure your Google Analytics settings":["Google アナリティクスの設定を構成します"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["広告をホームページの最初の記事または各ページや投稿の最後に表示します。収益をアップさせるには、さらに広告をサイトの先頭とウィジェット領域にも配置します。"],"Enable ads and display an ad below each post":["広告を有効にし、各投稿の下に広告を表示する"],"Configure your sharing buttons":["共有ボタンを設定する"],"Connect your social media accounts":["ソーシャルメディアアカウントを接続する"],"Match accounts using email addresses":["メールアドレスと一致するアカウントを検索する"],"Require accounts to use WordPress.com Two-Step Authentication":["アカウントに WordPress.com 二段階認証を必須とする"],"Add to whitelist":["ホワイトリストに追加"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["ホワイトリストに IP アドレスを登録することで、それらが Jetpack にブロックされないようにできます。IPv4 と IPv6 を使用できます。範囲を指定するには、ダッシュで区切られた下限値と上限値を入力してください。例: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["サイトはバックアップされ、脅威はありません。"],"Checking your spam protection…":["スパム保護を確認しています…"],"Fetching key…":["キーを取得しています…"],"Your site needs an Antispam key.":["サイトにはスパム対策キーが必要です。"],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["お使いのスパム対策 API キーに問題があります。{{a}}さらに詳しく{{/a}}。"],"Your site is not protected from spam.":["サイトはスパムから保護されていません。"],"Your Antispam key is valid.":["お使いのスパム対策キーは有効です。"],"Your site is protected from spam.":["サイトはスパムから保護されています。"],"Checking key…":["キーを確認しています…"],"Your API key":["お使いの API キー"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["まだ API キーをお持ちでない場合は、{{a}}ここで API キーを入手{{/a}}してください。画面の指示に従ってキーを入手してください。"],"No search results found for %(term)s":["%(term)s の検索結果は0件でした"],"Enter a search term to find settings or close search.":["検索語を入力して設定を検索するか、検索を終了してください。"],"Connections":["接続"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["サイトは開発モードになっているため、WordPress.com に接続できません。"],"Your site is connected to WordPress.com.":["サイトは WordPress.com に接続しています。"],"You are the Jetpack owner.":["Jetpack の所有者です。"],"Connected as {{span}}%(username)s{{/span}}":["{{span}}%(username)s{{/span}} として接続"],"View your Email Followers":["メールフォロワーを表示"],"Color scheme":["配色"],"Enable Markdown use for comments.":["コメントの Markdown 記法を有効化する。"],"Updated settings.":["設定が更新されました。"],"Error updating settings. %(error)s":["設定の更新中にエラーが発生しました (%(error)s)。"],"Regenerated Post by Email address.":["メール投稿アドレスが再生成されました。"],"Error regenerating Post by Email address. %(error)s":["メール投稿アドレスの再生成中にエラーが発生しました。%(error)s"],"Updated settings. Refreshing page…":["設定が更新されました。ページを再読み込み中…"],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["現在、以下の理由により{{a}}開発モード{{/a}}になっています (一部の機能は無効): {{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}jetpack_development_mode フィルターが有効{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}JETPACK_DEV_DEBUG 定数が定義済み{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}サイト URL にドットが含まれない (例: http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google アナリティクスは、{{a}}ビルトインの統計情報機能{{/a}}を補完する無料のサービスです。WordPress.com 統計情報と Google アナリティクスでは、異なる方法を使ってサイトのアクティビティを特定し、追跡しています。そのため、訪問数や表示数などの合計が少しずつ異なって表示されるのが普通です。"],"Google Analytics":["Google アナリティクス"],"Configure Google Analytics":["Google アナリティクスを設定"],"Activate Google Analytics":["Google アナリティクスを有効化"],"Download the free apps":["無料アプリをダウンロード"],"Upgrade Focus: VideoPress For Weddings":["アップグレードフォーカス: ウェディング向け VideoPress"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}カスタマイザーでも関連記事の設定ができるようになりました。{{ExternalLink}}お試しください。{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["デフォルトでは、広告はすべての投稿・固定ページの最後、またはフロントページの最初の記事に表示されます。収益を高めるため、サイトの上部やお好みのウィジェットエリアに広告を追加することもできます。"],"Display an ad unit at the top of your site.":["サイトの上部に広告ユニットを表示。"],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["広告を有効化すると、Automattic の{{link}}利用規約{{/link}}に同意したものとみなされます。"],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["サーバーの構成に誤りがあるため、Jetpack プロテクトがサイトを効果的に保護できません。"],"In \"Mobile\"":["「モバイル」で"],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}WordPress.com 上でモニター通知を設定{{/link}}"],"View your earnings":["収益を表示"],"Configure site SEO":["サイトの SEO を設定"],"Activate SEO tools":["SEO ツールを有効化"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["開始するにあたり、投稿エディターで「メディアを追加」をクリックして動画をアップロードしてください。あとは WordPress.com にお任せください。"],"Video Hosting":["動画ホスティング"],"SEO Tools":["SEO ツール"],"Advanced SEO tools to help your site get found when people search for relevant content.":["高度な SEO ツールがあれば、関連するコンテンツを探している読者にサイトを見つけてもらいやすくなります。"],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["広告やブランディングのない動画をサイトにアップロードする最も簡単な方法です。動画の再生と共有に関する統計情報を取得でき、プレーヤーは軽量・レスポンシブ対応です。"],"You are running Jetpack on a staging server.":["ステージングサーバーで Jetpack を実行中です。"],"More Info":["詳しい情報"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}「共有」モジュール設定で「いいね」の表示状態を管理{{/a}}"],"Your current IP: %(ip)s":["現在の IP: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["タブを離れると失われてしまう未保存の変更があります。続行しますか ?"],"This will reset all Jetpack options, are you sure?":["Jetpack のすべての設定がリセットされます。本当に実行しますか ?"],"Search for a Jetpack feature.":["Jetpack の機能を検索しましょう。"],"Configure your Security Scans":["セキュリティスキャンを設定"],"Subscriber":["購読者"],"Big iPhone/iPad Update Now Available":["iPhone/iPad の大幅なアップデートが利用できるようになりました"],"The WordPress for Android App Gets a Big Facelift":["WordPress for Android アプリが大幅リニューアル"],"WordPress.com Likes are:":["WordPress.com「いいね」ボタン:"],"Comments headline":["コメントのヘッドライン"],"A few catchy words to motivate your readers to comment.":["読者にコメントを促すメッセージです。"],"Show a \"follow blog\" option in the comment form":["コメントフォームに「ブログをフォロー」オプションを表示"],"Show a \"follow comments\" option in the comment form":["コメントフォームに「コメントをフォロー」オプションを表示"],"Put a chart showing 48 hours of views in the admin bar":["管理バーに過去48時間のビュー数の表を表示"],"Hide the stats smiley face image":["統計のスマイル画像を非表示"],"Whitelisted IP addresses":["ホワイトリストに登録された IP アドレス"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["WordPress モバイルアプリの広告をモバイルテーマのフッターに表示"],"Copied!":["コピー完了 !"],"Highlight and copy the following text to your clipboard:":["以下のテキストをハイライトして、クリップボードにコピーします:"],"Regenerate address":["アドレスを再生成"],"Automatically proofread content when: ":["以下の場合にコンテンツを自動校正する:"],"A post or page is first published":["投稿または固定ページを最初に公開する時"],"A post or page is updated":["投稿または固定ページを更新した時"],"Automatic Language Detection":["自動言語検出"],"The proofreader supports English, French, German, Portuguese and Spanish.":["校正機能は、英語、フランス語、ドイツ語、ポルトガル語、およびスペイン語に対応しています。"],"Enable proofreading for the following grammar and style rules: ":["以下の文法や文章スタイルのルールに対する校正を行う:"],"Add a phrase":["フレーズを追加する"],"Cheatin' uh?":["間違った操作を行われたようです。"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}この{{a}}2問のアンケート{{/a}}で Jetpack 連携を完了しなかった理由を教えていただけますか ?{{/p}}{{p}}無料のセキュリティおよびトラフィック機能をご利用いただくには、Jetpack 連携が必要です。{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["{{s}}Jetpack %(jetpack_version)s{{/s}} へようこそ !"],"Your Jetpack is already connected.":["Jetpack はすでに正常に連携されています。"],"You're fueled up and ready to go, Jetpack is now active.":["準備ができました ! Jetpack は有効になっています。"],"You're fueled up and ready to go.":["準備ができました !"],"You are currently running a development version of Jetpack.":["現在、Jetpack の開発バージョンを実行しています。"],"Submit Beta feedback":["ベータ版へのフィードバックを送信"],"What would you like to see on your Jetpack Dashboard?":["Jetpack ダッシュボードに何が表示されるとよいでしょうか ?"],"Let us know!":["ご意見をお聞かせください !"],"Saving…":["保存中..."],"Save Settings":["設定を保存"],"Jetpack Stats Icon":["Jetpack 統計アイコン"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}サイトの統計情報を有効化{{/a}}して、詳しい統計情報、「いいね」、フォロワー、購読者などの情報を確認しましょう。{{a1}}さらに詳しく{{/a1}}"],"Activate Site Stats":["サイトの統計情報を有効化"],"Security Scanning":["セキュリティスキャン"],"Site Backups":["サイトのバックアップ"],"Upgrade":["アップグレード"],"ACTIVE":["有効"],"Your site is on Development Mode":["サイトは開発モードになっています"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["連携が完了したら、プレミアムまたはプロ版にアップグレードできます。最高レベルのセキュリティ、スパム保護ツール、優先サポートをご利用いただけるようになります。"],"View your spam stats":["スパム統計情報を表示"],"View your security dashboard":["セキュリティダッシュボードを表示する"],"The site is in Development Mode, so you can not connect to WordPress.com.":["サイトは開発モードになっているため、WordPress.com と連携できません。"],"Link your account to WordPress.com to get the most out of Jetpack.":["Jetpack を最大限ご活用いただくため、アカウントを WordPress.com とリンクさせましょう。"],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["セキュリティ脅威の包括的な自動スキャンをご利用いただくには、VaultPress を{{a}}インストールおよび有効化{{/a}}してください。"],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["セキュリティ脅威の包括的な自動スキャンをご利用いただくには、{{a}}アカウントをアップグレード{{/a}}してください。"],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack は悪意のあるログイン試行をブロックしています。間もなくこちらに日付が表示されます !"],"Total malicious attacks blocked on your site.":["サイトでブロックされた悪意のある攻撃の合計数。"],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}プロテクト機能を有効化{{/a}}して、悪意のあるログイン試行からサイトを常に保護しましょう。"],"All plugins are up-to-date. Awesome work!":["すべてのプラグインは最新です。素晴らしいです !"],"Jetpack is improving and optimizing your image speed.":["Jetpack は画像の表示速度を向上・最適化しています。"],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack がサイトを監視中です。サイトがダウンしていると判断した場合には、メールをお送りします。"],"Security":["セキュリティ"],"Performance":["パフォーマンス"],"Backups":["バックアップ"],"{{a}}View backup details{{/a}}.":["{{a}}バックアップの詳細を表示{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["サイト全体を自動でバックアップするには、VaultPress を{{a}}インストールおよび有効化{{/a}}してください。"],"Unavailable in Dev Mode.":["開発モードではご利用いただけません。"],"Spam Protection":["スパム対策"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["スパムへの最新式の防御を活用するには、{{a}}Akismet をインストール{{/a}}してください。"],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["スパムへの最新式の防御を活用するには、{{a}}Akismet を有効化{{/a}}してください。"],"Invalid key":["無効なキー"],"Unavailable in Dev Mode":["開発モードではご利用いただけません"],"Activating recommended features…":["おすすめ機能を有効化中…"],"Recommended features active.":["おすすめ機能は有効化済みです。"],"Recommended features failed to activate. %(error)s":["おすすめ機能の有効化に失敗しました。%(error)s"],"Activating %(slug)s…":["%(slug)s を有効化中…"],"%(slug)s has been activated.":["%(slug)s が有効化されました。"],"%(slug)s failed to activate. %(error)s":["%(slug)s の有効化に失敗しました。%(error)s"],"Deactivating %(slug)s…":["%(slug)s を無効化中…"],"%(slug)s has been deactivated.":["%(slug)s が無効化されました。"],"%(slug)s failed to deactivate. %(error)s":["%(slug)s の無効化に失敗しました。%(error)s"],"Updating %(slug)s settings…":["%(slug)s の設定を更新中…"],"Updated %(slug)s settings.":["%(slug)s の設定を更新しました。"],"Error updating %(slug)s settings. %(error)s":["%(slug)s の設定の更新中にエラーが発生しました。%(error)s"],"Updating %(slug)s address…":["%(slug)s のアドレスを更新中…"],"Regenerated %(slug)s address .":["%(slug)s のアドレスが再生成されました。"],"Error regenerating %(slug)s address. %(error)s":["%(slug)s のアドレスの再生成中にエラーが発生しました。%(error)s"],"Resetting Jetpack options…":["Jetpack オプションをリセット中…"],"Options reset.":["オプションのリセットが完了しました。"],"Options failed to reset.":["オプションのリセットに失敗しました。"],"There was an error disconnecting Jetpack. Error: %(error)s":["Jetpack との連携を解除中にエラーが発生しました。エラー: %(error)s"],"Unlinking from WordPress.com":["WordPress.com とのリンクを解除中"],"Unlinked from WordPress.com.":["WordPress.com とのリンクが解除されました。"],"Error unlinking from WordPress.com. %(error)s":["WordPress.com とのリンクを解除中にエラーが発生しました。%(error)s"],"At A Glance":["概要"],"Clichés":["決まり文句/死語"],"Dashboard":["ダッシュボード"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["理由を教えていただけますか ?{{a}}2つの簡単な質問に回答{{/a}}していただき、Jetpack の改善にご協力ください。"],"Automattic's Privacy Policy":["Automattic 社のプライバシーポリシー"],"WordPress.com Terms of Service":["WordPress.com 利用規約"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["画像のパフォーマンスと速度を向上するには{{a}}有効化{{/a}}してください。"],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}プラグインの自動更新を有効化{{/a}}"],"Plugin Updates":["プラグイン更新"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["サイト全体を自動でバックアップするには{{a}}アカウントをアップグレード{{/a}}してください。"],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["エラー:Akismet キーが欠落しているか、無効です。{{akismetSettings}}Akismet の設定で修正してください{{/akismetSettings}}。"],"No threats found, you're good to go!":["脅威は見つかりませんでした。問題ありません。"],"{{a}}Contact Support{{/a}}":["{{a}}サポート{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}VaultPress.com で詳細を確認する{{/a}}"],"Uh oh, %(number)s threat found.":["%(number)s個の脅威が見つかりました。"],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}モニターを有効化{{/a}}すると、サイトがダウンした場合にメールを受け取れます。"],"Loading…":["読み込み中…"],"Downtime monitoring":["ダウンタイム監視"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}WordPress.com で詳しい統計情報を表示{{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}詳しい統計情報を表示{{/button}}"],"All-time comments":["全期間中のコメント数"],"All-time views":["全期間中の閲覧数"],"%(number)s View":["%(number)s回"],"Best overall day":["最高"],"Views today":["今日の閲覧数"],"Months":["月"],"Weeks":["週"],"Days":["日"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["統計情報のロード中に異常が発生しました。あとで再試行するか、{{a}}WordPress.com ですぐに統計情報を表示します{{/a}}"],"Click to view detailed stats.":["クリックして詳細な統計情報を表示"],"Views: %(numberOfViews)s":["閲覧数: %(numberOfViews)s"],"Week of %(date)s":["%(date)sの週"],"Site Security":["サイトセキュリティ"],"Activate recommended features":["おすすめ機能の有効化"],"Link to WordPress.com":["WordPress.com へのリンク"],"Unlink me from WordPress.com":["WordPress.com へのリンク解除"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["Jetpack との連携時に問題が発生しました。「WordPress.com と連携」をもう一度クリックしてください。"],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["Jetpack との連携時に問題が発生しました。Jetpack を無効にしてから再び有効にした後、再度連携してください。"],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Jetpack 認証では WordPress ブログにログインしたままであることが必要です。"],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Jetpack にエラーが発生しています。{{/s}}ご不便をおかけして申し訳ございません。しばらく経ってからもう一度お試しください。エラーが続く場合は、次のメッセージを含めてサポートにご連絡ください。%(error_key)s"],"Disconnecting Jetpack":["Jetpack 連携を解除中"],"Learn more":["さらに詳しく"],"Posts":["投稿"],"Front page":["フロントページ"],"Upload videos":["動画をアップロード"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["投稿の後に関連コンテンツを表示"],"Related":["関連"],"Save":["保存"],"Email Address":["メールアドレス"],"Media":["メディア"],"Themes":["テーマ"],"Site Stats":["サイト統計情報"],"Sharing":["共有"],"Testimonials":["推薦文"],"Cancel":["キャンセル"],"Comments":["コメント"],"Ignored Phrases":["無視する語句"],"Use automatically detected language to proofread posts and pages":["投稿や固定ページの校正に自動的に検出した言語を使う"],"Redundant Phrases":["冗長な言い回し"],"Phrases to Avoid":["無視するフレーズ"],"Passive Voice":["受動態"],"Jargon":["特殊用語"],"Hidden Verbs":["隠れ動詞"],"Double Negatives":["二重否定"],"Diacritical Marks":["発音区別符"],"Complex Phrases":["難解な言い回し"],"Bias Language":["バイアス言語"],"English Options":["英語設定"],"Proofreading":["校正"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack は WordPress.com と連携できませんでした: %(error_key)s。これは通常、Web ホスト上の何らかの設定が間違っていることを意味しています。"],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com 側の問題により現在 Jetpack をご利用いただけません。後ほどもう一度お試しください。"],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Jetpack にエラーが発生しています。{{/s}}このサイトを WordPress.com に連携できません。これは通常、お使いのサイトが公開されていないことを意味しています (localhost)。"],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Jetpack を利用するには、サイトが公開されていて、アクセス制限がかかっていない必要があります: %(error_key)s"],"You have successfully disconnected Jetpack":["Jetpack の連携を解除しました"],"Edit":["編集"],"Connected":["連携済み"],"Activate":["有効化"],"Active":["有効"],"Search":["検索"],"Settings":["設定"],"Learn More":["さらに詳しく"],"Disconnect Jetpack":["Jetpack 連携を解除"],"Test your site’s compatibility with Jetpack.":["サイトの Jetpack 対応をテストできます。"],"Settings header\u0004Plugin Autoupdates":["プラグインの自動更新"],"Settings header\u0004Downtime monitoring":["ダウンタイムのモニター"],"Settings header\u0004Privacy Settings":["プライバシー設定"],"Settings header\u0004WordPress.com toolbar":["WordPress.com ツールバー"],"Settings header\u0004Composing":["作成"],"Settings header\u0004Site stats":["サイト統計情報"],"Settings header\u0004Search engine optimization":["検索エンジンの最適化"],"Settings header\u0004Google Analytics":["Google アナリティクス"],"Settings header\u0004Sharing buttons":["共有ボタン"],"Settings header\u0004Publicize connections":["パブリサイズの接続"],"Settings header\u0004Like buttons":["「いいね」ボタン"],"Settings header\u0004WordPress.com log in":["WordPress.com のログイン"],"Settings header\u0004Brute force attack protection":["総当たり攻撃からの保護"],"Settings header\u0004Backups and security scanning":["バックアップとセキュリティスキャン"],"Settings header\u0004Spam filtering":["スパムのフィルタリング処理"],"Navigation item.\u0004Performance":["パフォーマンス"],"Navigation item.\u0004My Plan":["自分のプラン"],"Navigation item.\u0004Dev Tools":["開発ツール"],"Navigation item.\u0004Settings":["設定"],"Navigation item.\u0004Discussion":["ディスカッション"],"Navigation item.\u0004Traffic":["トラフィック"],"Navigation item.\u0004Sharing":["共有"],"Navigation item.\u0004At A Glance":["概要"],"Navigation item.\u0004Plans":["プラン"],"Navigation item.\u0004Writing":["執筆"],"Navigation item.\u0004Reset Options (dev only)":["オプションをリセット (開発版のみ)"],"Navigation item.\u0004Security":["セキュリティ"],"Navigation item.\u0004At a Glance":["概要"],"Search term.\u0004terms of service":["利用規約"],"Search term.\u0004tos":["TOS"],"Search term.\u0004gdpr":["GDPR"],"Search term.\u0004data":["データ"],"Search term.\u0004tracks":["トラック"],"Search term.\u0004privacy":["プライバシー"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["アップグレード"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["アップグレード"],"Button caption\u0004Saving…":["保存中..."],"Button caption\u0004Save settings":["設定を保存"],"A heading for a block of related posts.\u0004Related":["関連"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["プレビュー"],"A caption for a button to cancel disconnection.\u0004Stay connected":["接続を維持する"],"A caption for a button to disconnect.\u0004Disconnect":["切断する"],"Short warning message\u0004Updates needed":["更新が必要"],"Short label appearing near a paid feature configuration block.\u0004Paid":["有料"],"A header for a preview area in the configuration screen.\u0004Preview":["プレビュー"],"Ads header\u0004Ads":["広告"],"Dashboard widget header\u0004Site connection":["サイト接続"],"Dashboard widget header\u0004Account connection":["アカウント接続"],"A caption for a small button to fix security issues.\u0004Threats":["脅威"],"A caption for a small button to fix security issues.\u0004FIX":["修正"],"Short warning message about new threats found.\u0004Threats found!":["脅威が見つかりました !"],"Short warning message about site having no security scan.\u0004No scanning":["スキャンなし"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["アップグレード"],"Short message informing user that the site is secure.\u0004Secure":["安全です"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["無効なキー"],"Caption for a button to set up a feature.\u0004Set up":["セットアップ"],"verb\u0004Copy":["コピー"],"Shorthand for Privacy Policy.\u0004Privacy":["プライバシー"],"Shorthand for Terms of Service.\u0004Terms":["利用規約"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["デバッグ"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["スパムコメントがブロックされました。"]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-ka_GE-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-ka_GE-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index b1273f3c..00000000
--- a/plugins/jetpack/languages/json/jetpack-ka_GE-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=1; plural=0;","lang":"ka_GE"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":[""],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":[""],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":[""],"Save Settings":[""],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":[""],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":[""],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":[""],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":[""],"Learn more":[""],"Posts":[""],"Front page":[""],"Pinterest":[""],"Google":[""],"Show related content after posts":[""],"Related":[""],"Save":[""],"Email Address":[""],"Media":[""],"Themes":[""],"Site Stats":[""],"Sharing":[""],"Testimonials":[""],"Cancel":[""],"Comments":[""],"Ignored Phrases":[""],"Use automatically detected language to proofread posts and pages":[""],"Redundant Phrases":[""],"Phrases to Avoid":[""],"Passive Voice":[""],"Jargon":[""],"Hidden Verbs":[""],"Double Negatives":[""],"Diacritical Marks":[""],"Complex Phrases":[""],"Bias Language":[""],"English Options":[""],"Proofreading":[""],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[""],"You have successfully disconnected Jetpack":[""],"Edit":["რედაქტირება"],"Connected":[""],"Activate":[""],"Active":[""],"Search":[""],"Settings":[""],"Learn More":[""],"Disconnect Jetpack":[""],"Test your site’s compatibility with Jetpack.":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-ko_KR-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-ko_KR-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index e3429f6d..00000000
--- a/plugins/jetpack/languages/json/jetpack-ko_KR-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=1; plural=0;","lang":"ko_KR"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":["다음으로 사이트의 보안과 성능을 최대화하도록 설정된 젯팩의 권장 기능을 활성화합니다. {{a}}포함된 기능에 대해 자세히 알아봅니다{{/a}}."],"We’re now collecting stats and securing your site. Welcome aboard.":["이제 통계를 수집하고 사이트를 보호하고 있습니다. 어서 참여하세요."],"{{a}}Skip, and explore features individually{{/a}}.":["{{a}}기능을 건너뛰고 개별적으로 둘러봅니다{{/a}}."],"Jetpack Business Plan":["젯팩 비즈니스 요금제"],"Jetpack Premium Plan":["젯팩 프리미엄 요금제"],"Jetpack Personal Plan":["젯팩 개인 요금제"],"Get started with hassle-free design, stats, and performance tools.":["번거롭지 않은 디자인, 통계 및 성능 도구를 시작하세요."],"Welcome to Jetpack Free":["무료 젯팩에 오신 것을 환영합니다."],"Jetpack Free Plan":["젯팩 무료 요금제"],"Explore Jetpack plans":["젯팩 요금제 알아보기"],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":["자동화된 백업 및 우선 지원에 안심하고 고급 SEO 도구를 사용하여 폭넓은 대상에 다가가고, 광고를 표시하여 사이트로 수익을 창출하고, 200개 이상의 프리미엄 테마로 사이트를 사용자 정의하세요."],"Jetpack offers so much more":["젯팩은 훨씬 많은 것을 제공합니다."],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":["도움이 필요하세요? 지원 사이트를 검색하여 회원님의 사이트, 계정 및 워드프레스를 최대한 활용하는 방법에 대해 알아보세요."],"Support documentation":["지원 설명서"],"Chat bubbles representing getting in touch with support":["지원팀에 문의를 나타내는 채팅 버블"],"Site Activity":["사이트 활동"],"Start publicizing now":["지금 홍보 시작"],"Reach a wider audience by automatically sharing your posts on social media.":["소셜 미디어에 글을 자동으로 공유하여 폭넓은 대상에 다가가세요."],"Increase traffic to your site":["사이트 트래픽 늘리기"],"Explore free themes":["무료 테마 둘러보기"],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":["수백 가지 전문 테마에 무제한으로 액세스하고 원하는 방식으로 사이트를 사용자 정의하세요."],"A wide variety of themes and tools to customize a site":["사이트를 사용자 정의할 다양한 테마 및 도구"],"Set up your site security":["사이트 보안 설정"],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":["로그인 공격을 방지하고, 사이트에 문제가 있는 경우 즉시 알림을 받습니다."],"Site stats showing an evolution in traffic and engagement":["트래픽 및 참여의 발전을 보여주는 사이트 통계"],"A hand holding a loupe":["루페를 잡고 있는 손"],"A chart showing an healthy increase in earnings":["수입 증가를 보여주는 차트"],"Interface showing a chronological list of changes and updates in a site":["사이트의 변경 사항 및 업데이트 목록을 시간 순서대로 보여주는 인터페이스"],"A cloud with multiple types of content floating around it":["주위에 여러 유형의 콘텐츠가 있는 클라우드"],"A folder holding real comments":["실제 댓글이 있는 폴더"],"Make your site faster":["사이트 속도 빠르게 하기"],"Load pages faster by serving your images from our global network of servers.":["당사의 글로벌 서버 네트워크를 통해 이미지를 제공하여 페이지를 빠르게 로드하세요."],"A fast and performant website":["빠르고 효과적인 웹사이트"],"A secure site, locked and protected by Jetpack":["젯팩에서 차단하고 보호하는 안전한 사이트"],"These settings won't apply to related posts added using the block editor.":["이 설정은 블록 편집기를 사용하여 추가된 관련 글에는 적용되지 않습니다."],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["기존 글, 페이지, 추천 글, 포트폴리오를 복제하세요. 텍스트, 추천 이미지, 공유 설정 등을 포함한 모든 콘텐츠가 복사됩니다."],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":["이 사이트는 {{a}}서비스 약관{{/a}}을 위반하므로 워드프레스닷컴에 연결할 수 없습니다."],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":["한 번의 클릭만으로 회원님이 사용하는 소셜 미디어 네트워크에 웹사이트를 연결하고 모든 소셜 계정에서 콘텐츠를 공유합니다. 글을 발행하면 연결된 모든 계정에 표시됩니다."],"Add Like buttons to your posts and pages":["글 및 페이지에 좋아요 버튼 추가"],"When visitors enjoy your content, let them show it with a Like.":["방문자가 회원님의 콘텐츠가 마음에 들면 좋아요 버튼을 누를 수 있습니다."],"Explore your Jetpack Professional plan!":["젯팩 프로 요금제 찾아보기"],"Explore your Jetpack Premium plan!":["젯팩 프리미엄 요금제 찾아보기"],"Explore your Jetpack Personal plan!":["젯팩 개인 요금제 찾아보기"],"Create account":["계정 만들기"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["젯팩은 사이트를 제어하지만, 계정을 만드는 데 필요한 모든 기능에 액세스하려면 젯팩을 사용해야 합니다."],"Real-time, automated backups (unlimited storage)":["실시간 자동 백업(무제한 저장 공간)"],"Compose content the way you want to and streamline your publishing experience.":["원하는 방식으로 콘텐츠를 작성하고 게시 환경을 간소화하세요."],"Add a portfolio item":["포트폴리오 항목 추가"],"Add a testimonial":["추천 글 추가"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["검색 엔진에서 사이트의 가시성을 극대화하고 트래픽 통계를 실시간으로 확인하세요."],"Create a Jetpack account to use this feature":["이 기능을 사용하려면 젯팩 계정을 만드세요."],"Share your content on social media and increase audience engagement.":["소셜 미디어에서 콘텐츠를 공유하고 고객 참여를 늘리세요."],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["젯팩은 지속적으로 사이트를 모니터링하여 다운시간이 감지되면 알려줍니다."],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["플러그인 업데이트가 릴리스되면 해당 플러그인을 즉시 업데이트하는 것이 좋습니다. 사이트가 안전하게 유지되도록 자동 업데이트할 플러그인을 선택하세요."],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["최첨단 보안 기능으로 사이트를 안전하게 유지하고 기술적인 문제에 대한 알림을 받으세요."],"Error enabling Site accelerator. %(error)s":["사이트 가속기를 활성화하는 중에 오류가 발생했습니다. %(error)s"],"Site accelerator is now speeding up your site!":["사이트 가속기가 이제 사이트 속도를 높입니다."],"Enabling Site accelerator…":["사이트 가속기 활성화…"],"Error disabling site accelerator. %(error)s":["사이트 가속기를 비활성화하는 중에 오류가 발생했습니다. %(error)s"],"Site accelerator is no longer speeding up your site!":["사이트 가속기가 더 이상 사이트 속도를 높이지 않습니다."],"Disabling site accelerator…":["사이트 가속기 비활성화…"],"Load pages faster, optimize images, and speed up your visitors’ experience.":["페이지를 빠르게 로드하고, 이미지를 최적화하고, 방문자의 환경 속도를 높일 수 있습니다."],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["방문자 및 트래픽 패턴에 대한 Google의 상세 분석으로 워드프레스닷컴의 통계를 보완하세요."],"High-speed, high-definition video hosting with no third-party ads.":["타사 광고가 없는 고속, 고화질 비디오를 호스팅하세요."],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["무제한 트윗, 페이스북 글 및 기타 소셜 글을 미리 예약하세요."],"Marketing Automation":["마케팅 자동화"],"Activate Jetpack Search":["젯팩 검색 활성화"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["기본 워드프레스 검색을 Elasticsearch로 운영되는 향상된 검색 및 필터링으로 교체하세요."],"Start earning":["수익 발생 시작"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["WordAds를 사용해 광고 콘텐츠를 게시하여 수익을 얻을 수 있습니다. 오늘부터 수익을 얻으세요."],"Spam is automatically blocked from your comments.":["스팸은 댓글에서 자동으로 차단됩니다."],"Spam Filtering":["스팸 필터링"],"Browse premium themes":["프리미엄 테마 찾아보기"],"Access hundreds of beautifully designed premium themes at no extra cost.":["아름답게 디자인된 수백 개의 프리미엄 테마를 추가 비용 없이 이용하세요."],"Try a premium theme":["프리미엄 테마 체험"],"View settings":["보기 설정"],"Create a Jetpack account to view your email followers":["이메일 팔로워를 보려면 젯팩 계정을 만드세요."],"Open your site to comments and invite subscribers to get alerts about your latest work.":["사이트를 열어 댓글을 달고 구독자를 초대하여 최근 작업에 대한 알림을 받게 하세요."],"Manage security settings":["보안 설정 관리"],"Built-in Performance":["내장 성능"],"Jetpack is ready for the new WordPress editor":["젯팩이 새로운 워드프레스 편집기를 사용할 준비가 되었습니다."],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["바로 오늘 새로운 편집기 환경을 위해 특별히 구축된 첫 번째 젯팩 고유의 블록을 소개합니다. 간편한 결제 버튼, 양식, 지도 및 마크다운."],"Build your Jetpack site with blocks":["블록으로 젯팩 사이트 구축"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["새로운 편집기인가요? 그렇습니다! {{a}}자세히 알아보세요{{/a}}."],"The features you rely on, adapted for the new WordPress editor.":["새로운 워드프레스 편집기에 맞추어 사용할 수 있는 기능입니다."],"Take me to the new editor":["새 편집기로 이동"],"Testing Jetpack Connection":[""],"There was an error testing Jetpack. Error: %(error)s":["젯팩을 테스트하는 동안 오류가 발생했습니다. 오류: %(error)s"],"New in Jetpack!":["젯팩의 새 기능!"],"Speed up static file load times":["정적 파일 로드 시간이 빨라짐"],"Speed up image load times":["이미지 로드 시간이 빨라짐"],"Enable site accelerator":["사이트 가속기 활성화"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["젯팩에서 이미지를 최적화하고 글로벌 서버 네트워크에서 이미지와 정적 파일(예: CSS 및 자바스크립트)을 제공할 수 있도록 하여 페이지를 빠르게 로드합니다."],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["워드프레스닷컴 로그인 및 보안 인증을 활성화하여 웹사이트에 추가 보안 계층을 추가합니다. 이 옵션을 활성화한 사이트가 여러 개 있는 경우 동일한 자격 증명을 사용하여 이러한 사이트에 모두 로그인할 수 있습니다."],"View your site activity":["사이트 활동 보기"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["사이트의 모든 변경 사항과 업데이트를 읽기 편하게 구성한 연대순 목록으로 볼 수 있습니다."],"Manually Verify ":["수동으로 확인 "],"Verify with Google":["Google에서 확인"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["Google에서 웹사이트 {{a1}}해킹{{/a1}} 또는 사이트의 {{a2}}크롤링 또는 인덱싱{{/a2}} 문제 안내를 비롯한 사이트에서 발생하는 특정 이벤트에 대한 이메일을 보냅니다."],"or":["또는"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["{{a}}Google 검색 콘솔 {{/a}}에서 사이트의 트래픽 및 성능을 모니터링합니다."],"Your site is verified with Google":["사이트가 Google에서 확인되었습니다."],"Site failed to verify: %(error)s":["사이트 확인 실패: %(error)s"],"Verifying...":["확인 중..."],"Add faster, more advanced searching to your site with Jetpack Professional.":["젯팩 전문가로 더욱 빠르고 진보된 검색 기능을 사이트에 추가하세요."],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["워드프레스의 기본 검색을 향상된 검색 환경인 젯팩 검색으로 바꾸기"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["젯팩 검색은 기본 검색 기능을 워드프레스닷컴 클라우드에 호스팅된 빠르고 확장 및 사용자 정의 가능하며 관련성 높은 검색 기능으로 바꿉니다. 결과적으로 사용자는 원하는 콘텐츠를 더 빠르게 찾을 수 있습니다."],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["기본 워드프레스 검색 기능은 콘텐츠가 많지 않은 사이트에 효과적입니다. 그러나 사이트 규모가 커지면 검색이 느려지고 관련성이 낮은 결과가 반환됩니다."],"Jetpack Search supports many customizations.":["젯팩 검색은 다양한 사용자 정의를 지원합니다."],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["기본 검색 기능을 {{a}}워드프레스닷컴 클라우드에 호스팅된{{/a}} 빠르고 확장 및 사용자 정의 가능하며 관련성 높은 검색 기능으로 바꿉니다."],"Site is verified":["사이트가 확인되었습니다."],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}정확히 원하는 방식으로 표시되고 작동하는 아름다운 사이트를 만들 수 있도록 젯팩 프로페셔널은 200개 이상의 프리미엄 워드프레스 테마를 무제한으로 제공합니다.{{/p}}{{p}}젯팩 프로페셔널은 단순히 완벽한 디자인을 찾는 것 이상을 제공합니다. 또한 필요할 때 당사 글로벌 전문가팀으로부터 우선 지원을 받는다는 사실에 크게 안심할 수 있기도 합니다.{{/p}}"],"Spam filtering and priority support.":["스팸 필터링 및 우선 지원."],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["광고가 활성화되면 젯팩은 사이트에 맞게 사용자 정의된 ads.txt를 자동으로 생성합니다."],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["젯팩은 사이트에 맞게 사용자 정의된 {{link}} ads.txt {{/link}}를 자동으로 생성합니다. 다른 네트워크에 대한 항목을 추가해야 하는 경우 아래 공간에서 한 줄에 하나씩 추가하세요."],"Custom ads.txt entries":["사용자 정의 ads.txt 항목"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}정확히 원하는 방식으로 표시되고 작동하는 아름다운 사이트를 만들 수 있도록 젯팩 프로페셔널은 200개 이상의 프리미엄 워드프레스 테마를 무제한으로 제공합니다.{{/p}}{{p}}젯팩 프로페셔널은 단순히 완벽한 디자인을 찾는 것 이상을 제공합니다. 또한 완전한 마음의 평화 즉, 실시간 백업, 자동 악성 코드 검사 및 사이트가 항상 안전하고 보안이 적용된 상태로 유지됨을 보장하는 글로벌 전문가팀의 우선 지원을 총체적으로 제공합니다.{{/p}}"],"Introducing Premium Themes":["프리미엄 테마 소개"]," Premium Themes":[" 프리미엄 테마"],"Privacy information":["개인 정보"],"Enable Lazy Loading for images":["이미지에 Lazy 로드 사용"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["Lazy 로드 이미지는 사이트의 속도를 개선하고 더 원활한 보기 환경을 제공합니다. 이미지는 한꺼번에 로드되는 것이 아니라 방문자가 화면을 아래로 스크롤하면 로드됩니다."],"Performance & speed":["성능 및 속도"],"Enable high-speed, ad-free video player":["광고 없는 고속 비디오 플레이어 사용"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["고해상도 비디오로 게시하는 콘텐츠를 더 매력적으로 만듭니다. 젯팩 비디오를 통해 미디어 플레이어를 사용자 정의하고 광고 없는 고속 무브랜드 비디오를 방문자에게 제공할 수 있습니다. 비디오는 당사 워드프레스닷컴 서버에서 호스팅되며 회원님의 호스팅 요금제에서 공간을 차감하지 않습니다!"],"Video":["비디오"],"Carousel color scheme":["캐러젤 색 구성표"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Exif 데이터는 방문자에게 초점 거리, 조리개 및 ISO와 같은 사진의 추가 기술 세부정보를 표시합니다."],"Show photo Exif metadata in carousel (when available)":["캐러젤에 사진 Exif 메타데이터 보이기(가능한 경우)"],"Display images in a full-screen carousel gallery":["전체 화면 캐러젤 갤러리에 이미지 표시"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["글과 페이지의 이미지에 대한 전체 화면 캐러젤 슬라이드쇼를 만듭니다. 캐러젤 갤러리는 모바일 친화적이며 사이트 방문자가 회원님의 사진과 상호 작용하도록 권장합니다."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["워드프레스닷컴 도구 모음은 기본 워드프레스 관리자 도구 모음을 대체하며 워드프레스 환경을 간소화합니다. 워드프레스닷컴 도구 모음을 통해 모든 사이트 관리, 워드프레스닷컴 프로필 업데이트, 알림 보기 및 리더에서 팔로우하는 사이트의 최신 소식 확인 기능에 원클릭으로 액세스할 수 있습니다."],"Portfolios shortcode: [portfolio]":["포트폴리오 쇼트코드: [포트폴리오]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["사이트에서 {{portfolioLink}}포트폴리오{{/portfolioLink}}를 사용하여 최고의 제품을 보여줍니다. 테마가 젯팩 포트폴리오를 지원하지 않는 경우에도 계속해서 간단한 쇼트코드를 사용하여 사이트에 표시할 수 있습니다."],"Testimonials shortcode: [testimonials]":["추천 글 쇼트코드: [추천 글]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["웹사이트에 {{testimonialLink}}추천 글{{/testimonialLink}}을 추가하여 새로운 고객의 관심을 끕니다. 테마가 젯팩 추천 글을 지원하지 않는 경우에도 계속해서 간단한 쇼트코드를 사용하여 사이트에 표시할 수 있습니다."],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["현재 검색 엔진이 회원님의 사이트에 액세스할 수 없습니다. 사이트를 액세스할 수 있도록 하려면 {{a}}읽기 설정{{/a}}을 확인하고 \"검색 엔진 접근 여부\"를 켭니다."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["좋은 소식: 젯팩이 인덱싱을 위해 회원님의 사이트맵을 모든 주요 검색 엔진으로 자동으로 보내고 있습니다."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["사이트맵은 Google 또는 Bing과 같은 검색 엔진에서 웹사이트를 인덱싱하는 데 사용하는 파일입니다. 사이트맵은 검색 결과에서 순위를 높이는 데 도움이 될 수 있습니다. 이 기능을 사용하면 젯팩이 사이트맵을 만들고 사이트 콘텐츠가 변경되면 자동으로 사이트맵을 업데이트합니다."],"Configure related posts in the Customizer":["사용자 정의 기능에서 관련 글 구성"],"Highlight related content with a heading":["헤딩으로 관련 콘텐츠 강조 표시"],"View security scan details":["보안 검사 세부정보 보기"],"View backup history":["백업 내역 보기"],"Show a thumbnail image where available":["가능한 경우 썸네일 이미지를 표시합니다."],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["특정 젯팩 기능에서 데이터를 사용하고 활동을 추적하는 방법에 대한 자세한 내용은 {{privacyCenterLink}}개인정보취급방침 페이지{{/privacyCenterLink}}를 참조하세요."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["워드프레스는 타사 제품을 포함한 다른 추적 도구를 사용합니다. {{cookiePolicyLink}}이 도구에 대해 읽고{{/cookiePolicyLink}} 제어하는 방법에 대해 알아보세요."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["이 정보는 {{pp}}개인정보 취급방침{{/pp}}에 명시된 것처럼 제품을 개선하고, 보다 관련된 마케팅을 제공하며, 워드프레스닷컴 환경을 개인 설정하는 데 도움을 줍니다."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["워드프레스닷컴 계정에 로그인되어 있는 동안 이용하는 서비스에 대한 정보를 워드프레스의 분석 도구와 공유합니다. {{cookiePolicyLink}}자세히 알아보세요{{/cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["사이트 관리자가 이 기능을 관리하고 있습니다. {{link}}자세히 알아보세요{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["사이트 관리자가 이 기능을 비활성화했습니다. {{link}}자세히 알아보세요{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["사이트 관리자가 이 기능을 활성화했습니다. {{link}}자세히 알아보세요{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["사이트 관리자가 %(moduleName)s(을)를 비활성화했습니다. {{link}}자세히 알아보세요{{/link}}."],"This feature has been disabled by a site administrator.":["사이트 관리자가 이 기능을 비활성화했습니다."],"%(moduleName)s has been disabled by a site administrator.":["사이트 관리자가 %(moduleName)s(을)를 비활성화했습니다."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["Ad 위젯을 사용하여 광고를 추가할 수 있습니다. {{link}}시도해 보세요!{{/link}}"],"Configure your notification settings":["알림 설정 구성"],"Monitor your site's downtime":["사이트 가동 시간 모니터링"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["젯팩의 검색 모듈은 워드프레스에 내장된 검색 기능을 대체하는 강력한 기능입니다."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["고객님 사이트의 파일을 정기적으로 점검하여 보안성 및 데이터를 훼손할 수 있는 무단 수정 또는 의심스러운 수정이 있는지를 확인합니다."],"Plugin needs updating.":["플러그인을 업데이트해야 합니다."],"%(number)s":["%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["젯팩의 플러그인 업데이트를 통해 자동으로 업데이트할 플러그인을 선택할 수 있습니다."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["젯팩은 회원님의 이미지를 최적화하며 방문자에게 가장 가까운 서버 위치에서 이미지를 제공합니다. 글로벌 콘텐츠 제공 네트워크를 사용하면 사이트의 로드 속도가 향상됩니다."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":[""],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["젯팩 백업을 통해 특정 순간부터 백업을 쉽게 복원 또는 다운로드할 수 있습니다."],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet은 전체 스팸 데이터베이스에 대비해 고객님의 메모와 문의 양식 제출을 점검합니다."],"Privacy Information":["개인 정보"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["비디오프레스를 통해 컴퓨터의 비디오를 업로드하여 호스트 서버가 아니라 워드프레스닷컴에 호스팅 되도록 할 수 있습니다. 그런 다음 독립 호스트 젯팩 사이트에 이를 삽입할 수 있습니다. "],"Add the Search (Jetpack) widget to your sidebar":["사이드바에 검색(젯팩) 위젯 추가"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["빠르게 관련 검색 결과를 필터링 및 정렬할 수 있게 하여 방문자에게 우수한 검색 환경을 제공합니다."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["모바일 장치에서 방문자에게 표시할 경량 모바일 친화적 테마를 사용합니다."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["리더가 페이지 맨 아래에 접근하면 자동으로 다음 글을 로드합니다."],"Allows you to publish new posts by sending an email to a special address.":["특정한 주소로 이메일을 보내 새 글을 공개합니다."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["마크다운 문법을 사용하여 링크, 목록 및 기타 스타일이 있는 콘텐츠를 작성할 수 있습니다."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["작성하는 동안 콘텐츠를 검사하여 문법 및 맞춤법이 올바른지, 잘못 사용된 단어는 없는지와 스타일을 확인합니다."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["다양한 서비스로 워드프레스 사이트를 확인하는 데 필요한 숨겨진 태그를 제공합니다."],"Displays information on your site activity, including visitors and popular posts or pages.":["방문자 및 인기 있는 글 또는 페이지를 비롯한 회원님의 사이트 활동에 대한 정보를 표시합니다."],"Allows you to optimize your site and its content for better results in search engines.":["검색 엔진에서 더 나은 결과를 위해 회원님의 사이트 및 해당 콘텐츠를 최적화할 수 있게 해줍니다."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["워드프레스 사이트를 회원님의 트래픽, 방문자 및 전환에 인사이트를 제공하는 플랫폼인 Google 웹로그 분석과 통합합니다."],"Displays high-quality ads on your site that allow you to earn income.":["수입을 올릴 수 있도록 회원님의 사이트에 고품질 광고를 표시합니다."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["방문자가 소셜 미디어 사이트에서 공유할 수 있도록 콘텐츠에 공유 버튼을 추가합니다."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["페이스북, Twitter 등의 소셜 미디어 사이트에서 회원님의 최신 콘텐츠를 자동으로 공유할 수 있게 해줍니다."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["방문자가 호감이나 즐거움을 표시할 수 있도록 회원님의 콘텐츠에 좋아요 버튼을 추가합니다."],"Allows registered users to log in to your site with their WordPress.com accounts.":["등록된 사용자가 자신의 워드프레스닷컴 계정으로 회원님의 사이트에 로그인할 수 있게 해줍니다."],"Protects your site from traditional and distributed brute force login attacks.":["기존의 분산 무차별 로그인 공격 대입으로부터 회원님의 사이트를 보호합니다."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["회원님의 사이트를 글로벌 워드프레스닷컴 서버에 백업하여 비상 상황 또는 오류 발생 시 회원님의 콘텐츠를 복원할 수 있습니다."],"Removes spam from comments and contact forms.":["댓글 및 문의 양식에서 스팸을 제거합니다."],"We are committed to your privacy and security. ":["당사는 회원님의 개인정보 보호 및 보안을 위해 최선을 노력을 다하고 있습니다. "],"View all Jetpack plans":["모든 젯팩 요금제 보기"],"Manage your plan":["요금제 관리"],"Your Plan":["회원님의 요금제"],"You’re currently on Jetpack %(plan)s.":["회원님은 현재 젯팩 %(plan)s을(를) 사용하고 있습니다."],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["독자가 글이나 댓글을 구독하여 이메일을 통해 새 콘텐츠에 대한 알림을 받을 수 있게 해줍니다."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["표준 워드프레스 댓글 양식을 소셜 미디어 로그인 옵션을 포함하는 새로운 댓글 시스템으로 바꿉니다."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["워드프레스에 내장된 검색을 향상된 검색 환경인 젯팩의 검색으로 바꾸려면 {{a}}활성화{{/a}}합니다."],"Add Search (Jetpack) Widget":["검색(젯팩) 위젯 추가"],"Jetpack Search is powering search on your site.":["젯팩 검색은 사이트에서 검색을 강화합니다."],"Manage your plugins":["플러그인 관리"],"Moderate comments":["댓글 검토"],"Error updating privacy settings. %(error)s":["개인정보 설정을 업데이트하는 동안 오류가 발생했습니다. %(error)s"],"Updated privacy settings.":["개인정보 설정을 업데이트했습니다."],"Updating privacy settings…":["개인정보 설정을 업데이트하는 중..."],"Add Jetpack Search Widget":["젯팩 검색 위젯 추가"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["정렬 및 필터를 구성하려면 젯팩 검색 위젯을 사이드바에 추가하세요."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["전체 보안 제품군, 마케팅 및 수익 자동화 도구, 무제한 비디오 호스팅, 무제한 테마, 향상된 검색 및 우선 지원."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["전체 보안 제품군, 마케팅 및 수익 자동화 도구, 무제한 비디오 호스팅 및 우선 지원."],"Daily backups, spam filtering, and priority support.":["일일 백업, 스팸 필터링 및 우선 지원."],"Always-on Security":["상설 보안"],"Activate video hosting":[""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["무제한 공간, 원클릭 복원, 자동화된 보안 검사 및 우선 지원으로 모든 사이트 데이터를 실시간으로 백업하세요."],"Design the perfect website":["완벽한 웹 사이트 디자인"],"Set up Jetpack":["젯팩 설정"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["무제한 공간, 원클릭 복원, 자동화된 보안 검사로 모든 사이트 데이터를 실시간 백업합니다."],"Jetpack Search":["젯팩 검색"],"Jetpack version %(version)s":["젯팩 버전 %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["보안 위협을 위해 고객님의 사이트를 실시간으로 백업하고 정기적으로 스캔합니다."],"Daily backup of all your site data with unlimited space and one-click restores":["무제한 공간 및 원클릭 복원으로 모든 사이트 데이터의 일일 백업 제공"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["무제한 공간, 원클릭 복원, 자동 보안 검사, 원클릭 위협 해결로 모든 사이트 데이터를 실시간 백업합니다."],"View your security activity":["보안 활동 보기"]," (powered by VaultPress).":[" (VaultPress에서 제공)"],"Customize Search Widget":["검색 위젯 사용자 정의"],"Please correct the issue below and try again.":["아래 나열된 문제를 수정하고 다시 시도해 주세요."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["사이트에 보안 위협이 없는지 확인 중입니다. 찾으면 알려드리겠습니다."],"Your site is being backed up in real-time.":["사이트를 실시간으로 백업 중입니다."],"Jetpack version":["젯팩 버전"],"{{a}}View your site's activity{{/a}} in a single feed.":["단일 피드에서 {{a}}회원님 사이트의 활동을 확인{{/a}}하세요."],"Activity":["활동"],"Confirm each new phrase you add by pressing enter.":["Enter 키를 눌러 추가한 새 구문을 각각 확인하세요."],"{{a}}View details{{/a}}":["{{a}}상세 보기{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["젯팩 프로를 선택해 주셔서 감사합니다. 젯팩은 이제 고객님의 콘텐츠를 실시간으로 백업하고, 검색할 콘텐츠를 인덱싱하고, 보안 위협을 검사하고, 프리미엄 테마에 액세스할 수 있는 권한을 제공합니다."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["젯팩 프로를 사용하면 100개 이상의 프리미엄 테마를 포함하여 300개 이상의 전문적으로 디자인된 WordPress 테마 중 하나로 완벽한 사이트를 만들 수 있습니다. 다양한 위젯으로 콘텐츠를 사용자 정의하거나, 광고 또는 워터마크 없이 표시되는 무제한 동영상을 글과 페이지에 추가합니다."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["콘텐츠 공유 및 예약, SEO 도구 및 내장된 구독 옵션으로 인해 프로 요금제를 사용하면 팔로잉을 쉽게 늘릴 수 있습니다. 간단한 결제 버튼과 인라인 광고로 사이트를 수익화하고, Google 웹로그 분석과 통합하여 성공 여부를 모니터링할 수 있습니다."],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["젯팩 요금제는 원클릭 복원 및 문제 해결을 통해 주문형 백업 및 악성 코드 검사 등의 힘든 작업을 안전하게 유지하는 데 필요한 모든 것을 제공합니다. 고객님의 사이트는 스팸, 악성 코드 및 무차별 대입 로그인 시도로부터 완벽하게 보호됩니다."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["이제 젯팩 프로 탐색을 시작하여 새 요금제의 모든 혜택을 확인하세요."],"Install premium themes":["프리미엄 테마 설치"],"Review SEO features":["SEO 기능 검토"],"Welcome Professional":["프로 시작"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["젯팩 프리미엄 요금제를 선택해 주셔서 감사합니다. 젯팩은 이제 사이트를 백업하고, 보안 위협을 검사하고, 수익 기능을 활성화합니다."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["젯팩 프리미엄을 사용하면 목적에 관계없이 완벽한 사이트를 만들 수 있습니다. 200개 이상의 무료 테마 중 하나로 사이트 모양을 사용자 정의하거나, 최대 13GB의 HD 비디오로 콘텐츠를 개선합니다. 모든 콘텐츠가 광고나 워터마크 없이 호스팅됩니다."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["젯팩의 강력한 공유 도구를 사용하여 소셜 미디어에 최신 글을 자동으로 공유하거나, 선택한 날짜나 시간에 콘텐츠를 다시 공유하도록 예약할 수 있습니다. 또한 팔로잉의 증가와 함께 결제 버튼 및 광고와 같은 도구로 비즈니스 성장을 도모할 수 있습니다."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["이제 젯팩 프리미엄 탐색을 시작하여 새 요금제의 모든 혜택을 확인하세요."],"Monetize your site with ads":["광고로 사이트 수익 창출"],"Welcome Premium":["프리미엄 시작"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["젯팩 개인 요금제를 선택해 주셔서 감사합니다. 젯팩은 이제 사이트를 백업하고, 보안 위협을 검사합니다."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["젯팩 개인을 사용하면 100개 이상의 전문적으로 디자인된 무료 WordPress 테마에 액세스할 수 있습니다. 사이트에 적합한 테마를 선택하고, 색상, 이미지를 사용자 정의하거나 여러 가지 새로운 위젯을 추가합니다."],"Got it":[""],"Welcome personal":["개인 시작"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["아래 버튼을 클릭하면 {{tosLink}}서비스 약관{{/tosLink}} 및 워드프레스닷컴과의 {{shareDetailsLink}}세부 정보 공유{{/shareDetailsLink}}에 동의하는 것입니다"],"Jetpack Stats People":["젯팩 사용자 통계"],"Hello there! Your stats have been activated.":["안녕하세요? 통계가 활성화되었습니다."],"Just give us a little time to collect data so we can display it for you here.":["여기에 표시할 데이터를 수집하는 동안 잠시 기다려 주세요."],"Okay, got it!":["이제 되었습니다."],"Display ads below posts on":["글 아래에 광고 표시"],"Additional ad placements":["추가 광고 배치 공간"],"Top of each page":["각 페이지 상단"],"Second ad below post":["글 아래에 다른 광고"],"Archives":["아카이브"],"Explore Professional":["전문가 둘러보기"],"Compare All Plans":["모든 요금제 비교"],"Person with laptop":["랩톱 사용자"],"Your Jetpack site is ready to go!":["회원님의 젯팩 사이트가 준비되었습니다!"],"Stars":["별"],"Jupiter":["목성"],"Welcome to Jetpack Personal":["젯팩 개인에 오신 것을 환영합니다"],"Welcome to Jetpack Premium":["젯팩 프리미엄에 오신 것을 환영합니다"],"Welcome to Jetpack Professional":["젯팩 전문가에 오신 것을 환영합니다"],"Schedule posts":[""],"Activate Publicize":["배포 기능 활성화"],"Your site is backed up.":["사이트가 백업되었습니다."],"Image Performance":["이미지 성능"],"Get WordPress Apps for every device":["어느 기기에서나 워드프레스 앱 이용"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["단일 알림판에서 사이트를 모두 관리합니다. 전 세계 어디서나 콘텐츠를 공개하고, 통계를 추적하고, 댓글을 검토합니다."],"I already use this app.":["이 앱을 이미 사용하고 있습니다."],"Create address":["주소 만들기"],"Priority support":["우선 지원"],"Add sharing buttons to your posts":["글에 공유 버튼 추가"],"Automatically share your posts to social networks":["글을 소셜 네트워크에 자동으로 공유"],"Updating settings…":["설정 업데이트 중…"],"Updating Post by Email address…":["이메일 주소로 글 업데이트 중…"],"Your paid plan gives you access to prioritized Jetpack support.":["유료 요금제를 통해 우선순위가 높은 젯팩 지원을 받으실 수 있습니다."],"You have paid for backups but they're not yet active.":["백업을 구매하셨지만, 아직 활성화되지 않았습니다."],"You have paid for backups and security scanning but they’re not yet active.":["백업 및 보안 검사를 구매하셨지만, 아직 활성화되지 않았습니다."],"Click \"Set Up\" to finish installation.":["설치를 마치려면 \"설정\"을 클릭하세요."],"Checking site status…":["사이트 상태 확인 중…"],"Pages":["페이지"],"We're here to help":["저희가 도와드리겠습니다."],"Jetpack comes with free, basic support for all users.":["젯팩은 모든 사용자에게 무료 지원을 제공합니다."],"Ask a question":["질문하기"],"Search our support site":["지원 사이트 검색"],"Get a faster resolution to your support questions.":["지원 관련 질문에 대해 신속하게 해결 방법을 얻으세요."],"Host fast, high-quality, ad-free video.":["광고가 없는 빠른 고화질 비디오를 호스팅합니다."],"Generate income with high-quality ads.":["고품질의 광고로 수익을 생성하세요."],"Real-time site backups and automatic threat resolution.":["실시간 사이트 백업 및 자동 위협 해결 기능을 제공합니다."],"Protect against data loss, malware, and malicious attacks.":["데이터 손실, 악성 코드 및 악의적인 공격으로부터 보호합니다."],"Integrate easily with Google Analytics.":["Google 웹로그 분석과 쉽게 통합됩니다."],"Help your content get found and shared with SEO tools.":["콘텐츠를 찾고 SEO 도구와 공유할 수 있습니다."],"Protect your site from spam.":["스팸으로부터 사이트를 보호합니다."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["이 사이트는 워드프레스닷컴과 연결되어 있지 않습니다. 연결하려면 사이트 관리자에게 요청하세요."],"Spam filtering":["스팸 필터링"],"Daily, automated malware scanning":["일일 자동 악성 코드 검사"],"Daily, automated backups (unlimited storage)":["일일 자동 백업(무제한 저장 공간)"],"Daily, automated malware scanning with automated resolution":["자동 문제 해결로 일일 자동 악성 코드 검사"],"Unlimited, high-speed video hosting":[""],"SEO preview tools":["SEO 미리보기 도구"],"Site stats, related content, and sharing tools":["사이트 통계, 관련 콘텐츠 및 공유 도구"],"Brute force attack protection and downtime monitoring":["무차별 공격 대입 보호 및 다운시간 모니터링"],"Unlimited, high-speed image hosting":["무제한 고속 이미지 호스팅"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["워드프레스닷컴에서 %(siteName)s와(과)의 연결을 해제하면 더 이상 다음에 액세스할 수 없습니다."],"Read more about Jetpack benefits":["젯팩 혜택 더 보기"],"An Automattic Airline":["Automattic 항공사"],"Manage site connection":["사이트 연결 관리"],"Connect your account to WordPress.com to view more stats":["계정을 워드프레스닷컴에 연결하여 통계 더 보기"],"Theme enhancements":["테마 기능 향상"],"Load more posts using the default theme behavior":["기본 테마 동작을 사용하여 더 많은 글 로드"],"Load more posts in page with a button":["버튼을 사용하여 페이지에 더 많은 글 로드"],"Load more posts as the reader scrolls down":["리더가 아래로 스크롤될 때 더 많은 글 로드"],"Theme support required.":["테마 지원이 필요합니다."],"Learn more about adding support for Infinite Scroll to your theme.":["테마에 무한 스크롤 기능을 추가하는 것에 대해 더 알아보세요."],"Use excerpts instead of full posts on front page and archive pages":["프론트 페이지와 아카이브 페이지에 전체 글 대신 요약문 사용"],"Show featured images":["추천 이미지 표시"],"Enable the WordPress.com toolbar":["워드프레스닷컴 도구 모음 사용"],"Writing tools available to you will be shown here when an administrator enables them.":["관리자가 쓰기 도구를 활성화한 경우 사용 가능한 쓰기 도구가 여기에 표시됩니다."],"Portfolios":["포트폴리오"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["검색 엔진에서 {{b}}사이트를 검색할 수 있게 하기 위해서 이 서비스를 이용하여 {{/b}}사이트를 확인할 필요는 없습니다. 이 고급 검색 엔진 도구를 사용하여 서비스로 사이트를 확인하려면 아래의 HTML 태그 코드를 붙여넣으세요. 문제가 있으면 {{support}}전체 지침{{/support}}을 읽어 보세요. 지원되는 확인 서비스: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, {{yandex}}Yandex.Webmaster{{/yandex}}"],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["XML 사이트맵 생성"],"Collecting valuable traffic stats and insights":["중요한 트래픽 통계와 인사이트 수집"],"The image helps collect stats, but should work when hidden.":["이미지는 통계를 수집하는 데 유용하지만 숨긴 상태에서도 작동합니다."],"Count logged in page views from":["로그인된 페이지 조회수"],"Allow stats reports to be viewed by":["통계 보고서를 볼 수 있는 사람"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["더욱 세부적으로 제어하고 싶다면 이 설정을 약간 변경하면 됩니다. {{a}}사이트의 SEO를 최적화{{/a}}하는 방법에는 어떤 것이 있는지 확인해 보세요."],"Configure your SEO settings":["SEO 설정 구성"],"In \"Upgrade\"":["\"업그레이드\"에서"],"Configure your Google Analytics settings":["Google 웹로그 분석 설정 구성"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["홈 페이지의 첫 번째 글 또는 모든 페이지와 글 끝에 광고를 표시하세요. 수입을 늘리기 위해 광고를 사이트 상단 및 위젯 영역에 추가할 수도 있습니다."],"Enable ads and display an ad below each post":["광고 활성화 및 각 글 아래에 광고 표시"],"Configure your sharing buttons":["공유 버튼 구성"],"Connect your social media accounts":["소셜 미디어 계정 연결"],"Match accounts using email addresses":["이메일 주소를 사용하여 계정 일치"],"Require accounts to use WordPress.com Two-Step Authentication":["워드프레스닷컴 2단계 인증을 사용하려면 계정이 필요합니다."],"Add to whitelist":["화이트리스트에 추가"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["젯팩에서 차단하지 않도록 하나 이상의 IP 주소를 화이트리스트에 추가할 수 있습니다. IPv4 및 IPv6를 사용할 수 있습니다. 범위를 지정하려면 낮은 값과 높은 값을 대시로 구분하여 입력하세요. 예: 12.12.12.1~12.12.12.100"],"Your site is backed up and threat-free.":["사이트가 백업되었고 위협으로부터 안전합니다."],"Checking your spam protection…":["스팸 방지 검사 중…"],"Fetching key…":["키 가져오는 중…"],"Your site needs an Antispam key.":["사이트에 안티스팸 키가 필요합니다."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["안티스팸 API 키에 문제가 있습니다. {{a}}자세히 알아보세요{{/a}}."],"Your site is not protected from spam.":["사이트가 스팸으로부터 보호되어 있지 않습니다."],"Your Antispam key is valid.":["안티스팸 키가 유효합니다."],"Your site is protected from spam.":["사이트가 스팸으로부터 보호되어 있습니다."],"Checking key…":["키 확인 중…"],"Your API key":["API 키"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["API 키가 없는 경우 {{a}}여기에서 API 키를 받은 후{{/a}} 키를 얻는 방법에 대한 설명을 받을 수 있습니다."],"No search results found for %(term)s":["%(term)s에 대한 검색 결과가 없습니다."],"Enter a search term to find settings or close search.":["검색어를 입력하여 설정을 찾거나 검색을 종료합니다."],"Connections":["연결"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["사이트가 개발 모드에 있으므로 워드프레스닷컴에 연결할 수 없습니다."],"Your site is connected to WordPress.com.":["사이트가 워드프레스닷컴에 연결되어 있습니다."],"You are the Jetpack owner.":["젯팩 소유자입니다."],"Connected as {{span}}%(username)s{{/span}}":["{{span}}%(username)s{{/span}}(으)로 연결됨"],"View your Email Followers":["이메일 팔로워 보기"],"Color scheme":["색상표"],"Enable Markdown use for comments.":["댓글에 마크다운을 사용하려면 활성화하세요."],"Updated settings.":["설정을 업데이트했습니다."],"Error updating settings. %(error)s":["설정을 업데이트하는 중에 오류가 발생했습니다. %(error)s"],"Regenerated Post by Email address.":["이메일 주소로 재생성된 글"],"Error regenerating Post by Email address. %(error)s":["이메일 주소로 글을 재생성하는 중에 오류가 발생했습니다. %(error)s"],"Updated settings. Refreshing page…":["설정을 업데이트했습니다. 페이지를 새로 고치는 중…"],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["현재 {{a}}개발 모드{{/a}}(일부 기능을 사용할 수 없음)인 이유:"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}jetpack_development_mode 필터가 활성화됨{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}JETPACK_DEV_DEBUG 상수가 정의되어 있음{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}사이트 URL에 점이 없음(예: http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["구글 애널리틱스는 트래픽을 또 다른 관점에서 파악하여 워드프레스의 {{a}}내장된 통계{{/a}}를 보완하는 무료 서비스입니다. 워드프레스닷컴 통계와 구글 애널리틱스는 각자 다른 방법을 사용해 사이트의 활동을 식별하고 추적하므로 방문, 조회 등에 대한 합계가 조금 다르게 표시됩니다."],"Google Analytics":["Google 웹로그 분석"],"Configure Google Analytics":["Google 웹로그 분석 구성"],"Activate Google Analytics":["Google 웹로그 분석 활성화"],"Download the free apps":["무료 앱 다운로드"],"Upgrade Focus: VideoPress For Weddings":["업그레이드 핵심: 웨딩용 비디오프레스"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}사용자 정의 기능에서 관련된 글을 구성할 수도 있습니다. {{ExternalLink}}시도해 보세요!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["기본적으로 광고는 모든 페이지, 글 또는 첫 페이지의 첫 번째 문서에 표시됩니다. 수입을 늘리기 위해 광고를 사이트 상단 및 위젯 영역에 추가할 수도 있습니다."],"Display an ad unit at the top of your site.":["사이트 상단에 광고 유닛을 표시합니다."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["광고를 활성화하면 자동 광고 {{link}}서비스 약관{{/link}}에 동의하는 것입니다."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["서버가 잘못 구성되었습니다. 즉, Jetpack Protect에서 사이트를 효율적으로 보호할 수 없습니다."],"In \"Mobile\"":["\"모바일\"에서"],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}워드프레스닷컴에서 모니터 알림 설정 구성{{/link}}"],"View your earnings":["수입 보기"],"Configure site SEO":[""],"Activate SEO tools":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["시작하려면 글 에디터에서 미디어 추가를 클릭하고 비디오를 업로드하세요. 나머지는 당사에서 처리합니다!"],"Video Hosting":["비디오 호스팅"],"SEO Tools":["SEO 도구"],"Advanced SEO tools to help your site get found when people search for relevant content.":["사람들이 관련 콘텐츠를 검색할 때 사이트가 검색되도록 하는 고급 SEO 도구입니다."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["광고 없는 비디오 및 브랜드 없는 비디오를 사이트에 업로드하는 가장 쉬운 방법입니다. 비디오 재생에 대한 통계를 얻을 수 있으며, 플레이어는 간단한 반응형입니다."],"You are running Jetpack on a staging server.":["스테이징 서버에서 젯팩을 실행하고 있습니다."],"More Info":["자세한 정보"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}공유 모듈 설정에서 좋아요 표시 여부 관리{{/a}}"],"Your current IP: %(ip)s":["현재 IP: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["지금 닫을 경우 이 탭에서 저장하지 않은 설정이 손실됩니다. 계속하시겠습니까?"],"This will reset all Jetpack options, are you sure?":["모든 젯팩 옵션이 초기화됩니다. 계속하시겠습니까?"],"Search for a Jetpack feature.":["젯팩 기능을 검색합니다."],"Configure your Security Scans":["보안 검사 구성"],"Subscriber":["구독자"],"Big iPhone/iPad Update Now Available":["iPhone/iPad 업데이트 지금 이용 가능"],"The WordPress for Android App Gets a Big Facelift":["대대적으로 업데이트된 Android 앱용 워드프레스"],"WordPress.com Likes are:":["워드프레스닷컴 좋아요:"],"Comments headline":["댓글 헤드라인"],"A few catchy words to motivate your readers to comment.":["독자가 댓글을 달도록 유도하는 관심을 끄는 몇 가지 단어입니다."],"Show a \"follow blog\" option in the comment form":["댓글 양식에 \"블로그 팔로우\" 옵션 표시"],"Show a \"follow comments\" option in the comment form":["댓글 양식에 \"댓글 팔로우\" 옵션을 표시합니다."],"Put a chart showing 48 hours of views in the admin bar":["관리 바에 48시간 보기를 표시하는 차트 넣기"],"Hide the stats smiley face image":["통계 웃는 얼굴 이미지 숨기기"],"Whitelisted IP addresses":["화이트리스트에 포함된 IP 주소"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["모바일 테마 푸터에 워드프레스 모바일 앱에 대한 프로모션 표시"],"Copied!":["복사되었습니다!"],"Highlight and copy the following text to your clipboard:":["다음 텍스트를 강조 표시 후 클립보드로 복사:"],"Regenerate address":["주소 재생성"],"Automatically proofread content when: ":["다음의 경우 자동으로 콘텐츠 교정: "],"A post or page is first published":["글 또는 페이지가 먼저 발행되었습니다."],"A post or page is updated":["글 또는 페이지가 업데이트되었습니다."],"Automatic Language Detection":["자동 언어 감지"],"The proofreader supports English, French, German, Portuguese and Spanish.":["교정자는 영어, 프랑스어, 독일어, 포르투갈어 및 스페인어를 지원합니다."],"Enable proofreading for the following grammar and style rules: ":["다음 문법 및 스타일 규칙에 대한 교정 기능 켜기: "],"Add a phrase":["구문 추가"],"Cheatin' uh?":["속임수를 쓰고 계시나요?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}이 {{a}}2문항짜리 설문 조사{{/a}}에서 젯팩 연결을 완료하지 않은 이유를 설명해 주시겠습니까?{{/p}}{{p}}무료 보안 및 트래픽 기능이 작동하려면 젯팩 연결이 필수입니다.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["{{s}}젯팩%(jetpack_version)s{{/s}}에 오신 것을 환영합니다!"],"Your Jetpack is already connected.":["젯팩이 이미 연결되었습니다."],"You're fueled up and ready to go, Jetpack is now active.":["연료가 채워졌으니 이제 출발하세요. 젯팩이 이제 활성화되었습니다."],"You're fueled up and ready to go.":["연료가 채워졌으니 이제 출발하세요."],"You are currently running a development version of Jetpack.":["현재 젯팩 개발 버전이 실행 중입니다."],"Submit Beta feedback":["베타 피드백 제출"],"What would you like to see on your Jetpack Dashboard?":["젯팩 알림판에서 무엇을 보고 싶으신가요?"],"Let us know!":["알려주세요!"],"Saving…":["저장 중..."],"Save Settings":["설정 저장"],"Jetpack Stats Icon":["젯팩 통계 아이콘"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["세부 통계, 좋아요, 팔로워, 구독자 등을 보려면 {{a}}사이트 통계를 활성화{{/a}}하세요! {{a1}}더 알아보기{{/a1}}"],"Activate Site Stats":["사이트 통계 활성화"],"Security Scanning":["보안 검사"],"Site Backups":[""],"Upgrade":["업그레이드"],"ACTIVE":["활성"],"Your site is on Development Mode":["사이트가 개발 모드에 있습니다."],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["연결하면 최상급 보안, 스팸 보호 도구 및 우선 지원 잠금을 해제하기 위해 유료 요금제로 업그레이드할 수 있습니다."],"View your spam stats":["스팸 통계 보기"],"View your security dashboard":["보안 알림판 보기"],"The site is in Development Mode, so you can not connect to WordPress.com.":["사이트가 개발 모드에 있으므로 워드프레스닷컴에 연결할 수 없습니다."],"Link your account to WordPress.com to get the most out of Jetpack.":["젯팩을 최대한 활용하려면 계정을 워드프레스닷컴에 연결하세요."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["자동화된 포괄적인 보안 위협 검사를 위해 VaultPress를 {{a}}설치 및 활성화{{/a}}하세요."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["자동화된 포괄적인 보안 위협 검사를 위해 {{a}}계정을 업그레이드{{/a}}하세요."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["젯팩이 악의적인 로그인 시도를 차단 중입니다. 데이터가 곧 여기에 표시됩니다!"],"Total malicious attacks blocked on your site.":["사이트에서 차단된 총 악의적인 공격 수입니다."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["악의적인 로그인 시도로부터 사이트를 보호하려면 {{a}}보호를 활성화{{/a}}하세요."],"All plugins are up-to-date. Awesome work!":["모든 플러그인이 최신 상태입니다. 멋진 작업입니다!"],"Jetpack is improving and optimizing your image speed.":["젯팩이 이미지 속도를 개선 및 최적화 중입니다."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["젯팩이 사이트를 모니터링합니다. 사이트가 다운된 상태라고 생각되면 이메일을 받게 됩니다."],"Security":["보안"],"Performance":["성능"],"Backups":["백업"],"{{a}}View backup details{{/a}}.":["{{a}}백업 세부 사항을 확인{{/a}}합니다."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["전체 사이트를 자동으로 백업하려면 VaultPress를 {{a}}설치하고 활성화{{/a}}하세요."],"Unavailable in Dev Mode.":["개발 모드에서 사용할 수 없습니다."],"Spam Protection":["스팸 방지"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["최첨단 스팸 방지 기능을 위해 {{a}}Akismet를 설치{{/a}}하세요."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["최첨단 스팸 방지 기능을 위해 {{a}}Akismet를 활성화{{/a}}하세요."],"Invalid key":["유효하지 않은 키"],"Unavailable in Dev Mode":["개발 모드에서 사용할 수 없음"],"Activating recommended features…":["권장 기능 활성화 중…"],"Recommended features active.":["권장 기능이 활성화되었습니다."],"Recommended features failed to activate. %(error)s":["권장 기능을 활성화하지 못했습니다. %(error)s"],"Activating %(slug)s…":["%(slug)s 활성화 중..."],"%(slug)s has been activated.":["%(slug)s이(가) 활성화되었습니다."],"%(slug)s failed to activate. %(error)s":["%(slug)s을(를) 활성화하지 못했습니다. %(error)s"],"Deactivating %(slug)s…":["%(slug)s 비활성화 중…"],"%(slug)s has been deactivated.":["%(slug)s이(가) 비활성화되었습니다."],"%(slug)s failed to deactivate. %(error)s":["%(slug)s을(를) 비활성화하지 못했습니다. %(error)s"],"Updating %(slug)s settings…":["%(slug)s 설정 업데이트 중…"],"Updated %(slug)s settings.":["%(slug)s 설정을 업데이트했습니다."],"Error updating %(slug)s settings. %(error)s":["%(slug)s 설정을 업데이트하는 동안 오류가 발생했습니다. %(error)s"],"Updating %(slug)s address…":["%(slug)s 주소 업데이트 중…"],"Regenerated %(slug)s address .":["%(slug)s 주소를 재생성했습니다."],"Error regenerating %(slug)s address. %(error)s":["%(slug)s 주소를 재생성하는 중 오류가 발생했습니다. %(error)s"],"Resetting Jetpack options…":["젯팩 옵션 재설정 중…"],"Options reset.":["옵션이 재설정되었습니다."],"Options failed to reset.":["옵션을 재설정하지 못했습니다."],"There was an error disconnecting Jetpack. Error: %(error)s":["젯팩 연결을 해제하는 동안 오류가 발생했습니다. 오류: %(error)s"],"Unlinking from WordPress.com":["워드프레스닷컴에서 링크 해제"],"Unlinked from WordPress.com.":["워드프레스닷컴에서 링크 해제되었습니다."],"Error unlinking from WordPress.com. %(error)s":["워드프레스닷컴에서 링크 해제하는 동안 오류가 발생했습니다. %(error)s"],"At A Glance":["둘러보기"],"Clichés":["클리셰"],"Dashboard":["알림판"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["이유를 말씀해 주시겠어요? {{a}}간단한 질문 두 가지에 대해 답변{{/a}}해 주시면 젯팩을 개선하는 데 도움이 됩니다."],"Automattic's Privacy Policy":["Automattic's 개인정보 보호정책"],"WordPress.com Terms of Service":["워드프레스닷컴 서비스 약관"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["이미지 성능 및 속도를 향상하려면 {{a}}Photon을 활성화{{/a}}하세요."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}플러그인 자동 업데이트 켜기{{/a}}"],"Plugin Updates":["플러그인 업데이트"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["전체 사이트를 자동으로 백업하려면 {{a}}계정을 업그레이드{{/a}}하세요."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["이런! Akismet 키가 누락되었거나 유효하지 않습니다. {{akismetSettings}}수정할 Akismet 설정으로 이동{{/akismetSettings}}합니다."],"No threats found, you're good to go!":["위협이 발견되지 않았으므로, 이동할 수 있습니다!"],"{{a}}Contact Support{{/a}}":["{{a}}지원팀에 문의{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}VaultPress.com에서 세부 사항 보기{{/a}}"],"Uh oh, %(number)s threat found.":["%(number)s 위협을 발견했습니다."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["사이트가 다운된 경우 이메일 알림을 받으려면 {{a}}Monitor를 활성화{{/a}}하세요."],"Loading…":["로드 중..."],"Downtime monitoring":["다운시간 모니터링"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}워드프레스닷컴에서 추가 통계 보기 {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}이전 통계 보기{{/button}}"],"All-time comments":["최고 댓글"],"All-time views":["모든 시간 보기"],"%(number)s View":["%(number)s 보기"],"Best overall day":["전반적으로 최상의 날"],"Views today":["오늘 보기"],"Months":["월"],"Weeks":["주"],"Days":["일"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["통계를 로드하는 동안 문제가 발생했습니다. 나중에 다시 시도하거나 {{a}}워드프레스닷컴에서 통계를 보세요{{/a}}"],"Click to view detailed stats.":["세부 통계를 보려면 클릭하세요."],"Views: %(numberOfViews)s":["보기: %(numberOfViews)s"],"Week of %(date)s":["%(date)s번째 주"],"Site Security":["사이트 보안"],"Activate recommended features":["권장 기능 활성화"],"Link to WordPress.com":["워드프레스닷컴에 연결"],"Unlink me from WordPress.com":["워드프레스닷컴에서 링크 해제"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["젯팩을 연결하는 데 문제가 발생했습니다. \"워드프레스닷컴 연결하기\"를 다시 클릭하세요."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["젯팩을 연결하는 데 문제가 발생했습니다. 젯팩 플러그인을 비활성화했다가 재활성화한 후 다시 연결하세요."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["젯팩에 권한을 주려면 워드프레스 블로그에 로그인되어 있어야 합니다."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}젯팩에 문제가 있습니다.{{/s}} 불편을 드려 죄송합니다. 나중에 다시 시도하세요. 문제가 계속되면 다음 메시지로 지원팀에 문의하세요. %(error_key)s"],"Disconnecting Jetpack":["젯팩 연결 해제 중"],"Learn more":["더 알아보기"],"Posts":["글"],"Front page":["전면 페이지"],"Upload videos":[""],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["글 다음에 관련 콘텐츠 보이기"],"Related":["관련"],"Save":["저장하기"],"Email Address":["전자 우편 주소"],"Media":["미디어"],"Themes":["테마"],"Site Stats":["사이트 통계"],"Sharing":["공유"],"Testimonials":["추천 글"],"Cancel":["취소"],"Comments":["댓글"],"Ignored Phrases":["무시된 구문"],"Use automatically detected language to proofread posts and pages":["자동 감지된 언어를 사용하여 글과 페이지 교정"],"Redundant Phrases":["중복 구문"],"Phrases to Avoid":["금칙어"],"Passive Voice":["수동태"],"Jargon":["전문용어"],"Hidden Verbs":["숨은 동사"],"Double Negatives":["이중 부정"],"Diacritical Marks":["구별 부호"],"Complex Phrases":["복잡한 구문"],"Bias Language":["차별적 언어"],"English Options":["영어 옵션"],"Proofreading":["교정"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["젯팩이 워드프레스닷컴에 연결할 수 없습니다. %(error_key)s. 이는 웹 호스트에서 설정이 잘못되었다는 것을 의미합니다."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["워드프레스닷컴이 지금 문제가 있어서 젯팩을 도울 수 없습니다. 나중에 다시 해보세요."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}젯팩에 문제가 있습니다.{{/s}} 이 사이트를 워드프레스닷컴과 연결할 수 없습니다. 즉, 고객님의 사이트에 공개적으로 액세스할 수 없습니다(localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["젯팩을 사용하려면 고객님의 웹사이트에 공개적으로 액세스할 수 있어야 합니다. %(error_key)s"],"You have successfully disconnected Jetpack":["젯팩을 분리했습니다."],"Edit":["편집"],"Connected":["연결됨"],"Activate":["활성화"],"Active":["활성"],"Search":["검색"],"Settings":["설정"],"Learn More":["더 알아보기"],"Disconnect Jetpack":["Jetpack 분리"],"Test your site’s compatibility with Jetpack.":["사이트가 젯팩과 호환되는지 테스트하세요."],"Settings header\u0004Plugin Autoupdates":["플러그인 자동 업데이트"],"Settings header\u0004Downtime monitoring":["다운시간 모니터링"],"Settings header\u0004Privacy Settings":["프라이버시 설정"],"Settings header\u0004WordPress.com toolbar":["워드프레스닷컴 도구 모음"],"Settings header\u0004Composing":["작성"],"Settings header\u0004Site stats":["사이트 통계"],"Settings header\u0004Search engine optimization":["검색 엔진 최적화"],"Settings header\u0004Google Analytics":["Google 웹로그 분석"],"Settings header\u0004Sharing buttons":["공유 버튼"],"Settings header\u0004Publicize connections":["배포 기능 연결"],"Settings header\u0004Like buttons":["좋아요 버튼"],"Settings header\u0004WordPress.com log in":["워드프레스닷컴 로그인"],"Settings header\u0004Brute force attack protection":["무차별 공격 대입 보호"],"Settings header\u0004Backups and security scanning":["백업 및 보안 검사"],"Settings header\u0004Spam filtering":["스팸 필터링"],"Navigation item.\u0004Performance":["성능"],"Navigation item.\u0004My Plan":["내 요금제"],"Navigation item.\u0004Dev Tools":["개발자 도구"],"Navigation item.\u0004Settings":["설정"],"Navigation item.\u0004Discussion":["토론"],"Navigation item.\u0004Traffic":["트래픽"],"Navigation item.\u0004Sharing":["공유"],"Navigation item.\u0004At A Glance":["둘러보기"],"Navigation item.\u0004Plans":["요금제"],"Navigation item.\u0004Writing":["쓰기"],"Navigation item.\u0004Reset Options (dev only)":["옵션 재설정(개발자 버전 전용)"],"Navigation item.\u0004Security":["보안"],"Navigation item.\u0004At a Glance":["둘러보기"],"Search term.\u0004terms of service":["서비스 약관"],"Search term.\u0004tos":["tos"],"Search term.\u0004gdpr":["gdpr"],"Search term.\u0004data":["데이터"],"Search term.\u0004tracks":["트랙"],"Search term.\u0004privacy":["개인정보"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["업그레이드"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["업그레이드"],"Button caption\u0004Saving…":["저장 중…"],"Button caption\u0004Save settings":["설정 저장"],"A heading for a block of related posts.\u0004Related":["관련"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["미리보기"],"A caption for a button to cancel disconnection.\u0004Stay connected":["연결 상태 유지"],"A caption for a button to disconnect.\u0004Disconnect":["연결 해제"],"Short warning message\u0004Updates needed":["업데이트 필요"],"Short label appearing near a paid feature configuration block.\u0004Paid":["유료"],"A header for a preview area in the configuration screen.\u0004Preview":["미리보기"],"Ads header\u0004Ads":["광고"],"Dashboard widget header\u0004Site connection":["사이트 연결"],"Dashboard widget header\u0004Account connection":["계정 연결"],"A caption for a small button to fix security issues.\u0004Threats":["위협"],"A caption for a small button to fix security issues.\u0004FIX":["해결"],"Short warning message about new threats found.\u0004Threats found!":["위협이 발견되었습니다!"],"Short warning message about site having no security scan.\u0004No scanning":["검사 안 함"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["업그레이드"],"Short message informing user that the site is secure.\u0004Secure":["보안"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["잘못된 키"],"Caption for a button to set up a feature.\u0004Set up":["설정"],"verb\u0004Copy":["복사"],"Shorthand for Privacy Policy.\u0004Privacy":["개인 정보"],"Shorthand for Terms of Service.\u0004Terms":["용어"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["디버그"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["스팸 댓글이 차단되었습니다."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-lt_LT-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-lt_LT-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index ed0e62fd..00000000
--- a/plugins/jetpack/languages/json/jetpack-lt_LT-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);","lang":"lt"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":[""],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":[""],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":[""],"Save Settings":[""],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":[""],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found.","Uh oh, %(number)s threats found."],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["","%(number)s Views","%(number)s Views"],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":[""],"Learn more":["Sužinokite daugiau"],"Posts":["Įrašai"],"Front page":[""],"Pinterest":[""],"Google":[""],"Show related content after posts":["Rodyti susijusio turinio po pranešimų"],"Related":["Susiję straipsniai"],"Save":["Išsaugoti"],"Email Address":["El. pašto adresas"],"Media":["Failai"],"Themes":["Temos"],"Site Stats":["Puslapio statistika"],"Sharing":["Dalinimasis"],"Testimonials":[""],"Cancel":["Atšaukti"],"Comments":["Komentarai"],"Ignored Phrases":["Nepaisomos frazės"],"Use automatically detected language to proofread posts and pages":["Klaidų įrašuose ir puslapiuose tikrinimui naudoti automatiškai aptiktą kalbą."],"Redundant Phrases":["Nereikalingos frazės"],"Phrases to Avoid":["Vengtinos frazės"],"Passive Voice":["Pasyvus balsas"],"Jargon":["Žargonas"],"Hidden Verbs":["Paslėpti veiksmažodžiai"],"Double Negatives":["Dvigubi neiginiai"],"Diacritical Marks":["Diakritikai"],"Complex Phrases":["Sudėtingoms frazėms"],"Bias Language":["Šališka kalba"],"English Options":["Anglų kalbos parinktys"],"Proofreading":["Klaidų tikrinimas"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[""],"You have successfully disconnected Jetpack":[""],"Edit":["Redaguoti"],"Connected":["Prisijungta"],"Activate":["Įjungti"],"Active":[""],"Search":["Paieška"],"Settings":["Nuostatos"],"Learn More":["Sužinokite daugiau"],"Disconnect Jetpack":["Atjunkite Jetpack"],"Test your site’s compatibility with Jetpack.":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-lv-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-lv-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 58539e0d..00000000
--- a/plugins/jetpack/languages/json/jetpack-lv-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);","lang":"lv"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":["Abonoments"],"Big iPhone/iPad Update Now Available":["Liels iPhone/iPad atjauninājums ir pieejams"],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":[""],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":["Krāpjamies, ja ?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":["Jūsu Jetpack jau ir savienots."],"You're fueled up and ready to go, Jetpack is now active.":["Jūs esat uzpildīts un gatavs doties, Jetpack tagad ir aktīvs."],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":["Ļaujiet mums zināt!"],"Saving…":["Saglabā..."],"Save Settings":["Saglabāt Iestatījumus"],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":["Aktīvo vietņu statistika"],"Security Scanning":["Drošības Skenēšana "],"Upgrade":[""],"ACTIVE":["AKTĪVS"],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found.","Uh oh, %(number)s threats found."],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["","%(number)s Views","%(number)s Views"],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":[""],"Learn more":[""],"Posts":[""],"Front page":[""],"Pinterest":[""],"Google":[""],"Show related content after posts":[""],"Related":[""],"Save":["Saglabāt"],"Email Address":["Epasta adrese"],"Media":[""],"Themes":["Tēmas"],"Site Stats":["Portāla statistika"],"Sharing":[""],"Testimonials":["Atsauksmes"],"Cancel":["Atcelt"],"Comments":[""],"Ignored Phrases":[""],"Use automatically detected language to proofread posts and pages":[""],"Redundant Phrases":[""],"Phrases to Avoid":[""],"Passive Voice":[""],"Jargon":[""],"Hidden Verbs":[""],"Double Negatives":[""],"Diacritical Marks":[""],"Complex Phrases":[""],"Bias Language":[""],"English Options":[""],"Proofreading":[""],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[""],"You have successfully disconnected Jetpack":[""],"Edit":["Labot"],"Connected":[""],"Activate":["Aktivizēt"],"Active":["Aktīvs"],"Search":["Meklēt"],"Settings":["Uzstādījumi"],"Learn More":["Uzzināt vairāk"],"Disconnect Jetpack":["Atslēgt Jetpack"],"Test your site’s compatibility with Jetpack.":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-mk_MK-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-mk_MK-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index b160959b..00000000
--- a/plugins/jetpack/languages/json/jetpack-mk_MK-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n==1 || n%10==1 ? 0 : 1;","lang":"mk"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":[""],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":[""],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":[""],"Save Settings":[""],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":[""],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found."],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["","%(number)s Views"],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":[""],"Learn more":["Повеќе..."],"Posts":["Написи"],"Front page":[""],"Pinterest":[""],"Google":[""],"Show related content after posts":[""],"Related":[""],"Save":["Зачувај"],"Email Address":["Адреса за е-пошта"],"Media":["Мултимедија"],"Themes":[""],"Site Stats":["Статистика"],"Sharing":["Споделување"],"Testimonials":[""],"Cancel":["Откажи"],"Comments":["Коментари"],"Ignored Phrases":["Игнорирани фрази"],"Use automatically detected language to proofread posts and pages":[""],"Redundant Phrases":[""],"Phrases to Avoid":[""],"Passive Voice":[""],"Jargon":[""],"Hidden Verbs":["Скриени глаголи"],"Double Negatives":["Двоен негатив"],"Diacritical Marks":[""],"Complex Phrases":["Комплексни фрази"],"Bias Language":[""],"English Options":[""],"Proofreading":[""],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["Моментално WordPress.com има проблеми и Jetpack е оневозможен. Ве молам обидете се подоцна."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[""],"You have successfully disconnected Jetpack":[""],"Edit":["Уреди"],"Connected":[""],"Activate":["Активирај"],"Active":[""],"Search":["Барај"],"Settings":["Поставувања"],"Learn More":["Повеќе..."],"Disconnect Jetpack":[""],"Test your site’s compatibility with Jetpack.":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-ms_MY-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-ms_MY-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 66c13874..00000000
--- a/plugins/jetpack/languages/json/jetpack-ms_MY-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=1; plural=0;","lang":"ms"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":[""],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":[""],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":[""],"Save Settings":[""],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":[""],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":[""],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":[""],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":[""],"Learn more":[""],"Posts":["Kiriman"],"Front page":[""],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":[""],"Related":["Berkaitan"],"Save":["Simpan"],"Email Address":["Alamat Emel"],"Media":["Media"],"Themes":["Tema"],"Site Stats":["Statistik Laman"],"Sharing":[""],"Testimonials":["Testimoni"],"Cancel":["Batal"],"Comments":["Komentar"],"Ignored Phrases":["Frasa-frasa yang diabaikan"],"Use automatically detected language to proofread posts and pages":["Guna pengesanan automatik bagi bahasa untuk penyemakan pruf kiriman dan halaman."],"Redundant Phrases":["Frasa Lewah"],"Phrases to Avoid":["Frasa-frasa yang perlu dielakkan"],"Passive Voice":["Suara Pasif"],"Jargon":["Jargon"],"Hidden Verbs":["Kata Kerja Tersembunyi"],"Double Negatives":["Negatif Berganda"],"Diacritical Marks":["Tanda Diakritis"],"Complex Phrases":["Frasa-frasa Rumit"],"Bias Language":["Bahasa Prasangka"],"English Options":["Pilihan Inggeris"],"Proofreading":["Penyemakan pruf"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[""],"You have successfully disconnected Jetpack":[""],"Edit":["Ubah"],"Connected":[""],"Activate":["Aktifkan"],"Active":["Aktif"],"Search":["Cari"],"Settings":["Tetapan"],"Learn More":[""],"Disconnect Jetpack":[""],"Test your site’s compatibility with Jetpack.":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-my_MM-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-my_MM-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 0e924826..00000000
--- a/plugins/jetpack/languages/json/jetpack-my_MM-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;"},"Themes":["အခင်းအကျင်းများ"],"Disconnect Jetpack":[""],"Disconnecting Jetpack":[""],"Learn more":[""],"Front page":["ရှေ့စာမျက်နှာ"],"Posts":["စာမူများ"],"Site Stats":[""],"Save":["သိမ်းပါ"],"Related":[""],"Show related content after posts":[""],"Google":[""],"Pinterest":[""],"Comments":["မှတ်ချက်များ"],"Media":["မီဒီယာ"],"Email Address":[""],"Sharing":[""],"Cancel":["ပယ်ဖျက်"],"Testimonials":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[""],"Proofreading":[""],"English Options":[""],"Bias Language":[""],"Complex Phrases":[""],"Diacritical Marks":[""],"Double Negatives":[""],"Hidden Verbs":[""],"Jargon":[""],"Passive Voice":[""],"Phrases to Avoid":[""],"Redundant Phrases":[""],"Use automatically detected language to proofread posts and pages":[""],"Ignored Phrases":[""],"Learn More":[""],"Settings":["သတ်မှတ်ချက်များ"],"Search":["ရှာပါ"],"Active":["အသက်ဝင်ပြီး"],"Activate":["စတင် အလုပ်လုပ်ပါ"],"Connected":[""],"Edit":["ပြုပြင်ပါ"]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-nb_NO-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-nb_NO-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index f7240599..00000000
--- a/plugins/jetpack/languages/json/jetpack-nb_NO-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"nb_NO"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":["Deretter, aktiver Jetpacks anbfalte sett av funksjoner for å maksimere sikkerhet og ytelse på nettstedet ditt. {{a}}Lær mer om hva som er inkludert{{/a}}."],"We’re now collecting stats and securing your site. Welcome aboard.":["Vi samler nå inn statistikk og sikrer ditt nettsted. Velkommen ombord."],"{{a}}Skip, and explore features individually{{/a}}.":["{{a}}Hopp over og utforsk funksjonene individuelt{{/a}}."],"Jetpack Business Plan":["Jetpack Business-pakke"],"Jetpack Premium Plan":["Jetpack Premium-pakke"],"Jetpack Personal Plan":["Jetpack Personlig-pakke"],"Get started with hassle-free design, stats, and performance tools.":["Kom i gang med problemfri utforming, statistikk og ytelsesverktøy."],"Welcome to Jetpack Free":["Velkommen til Jetpack Gratis-pakken"],"Jetpack Free Plan":["Jetpack Gratis-pakke"],"Explore Jetpack plans":["Utforsk Jetpacks abonnementspakker"],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":["Finn roen med automatiske sikkerhetskopier og prioritert brukerstøtte, nå ut til et bredere publikum ved å bruke avanserte SEO-verktøy, tjen penger på nettstedet ditt ved å kjør annonser og tilpass ditt nettsted med ett av våre over 200 Premium-tema."],"Jetpack offers so much more":["Jetpack tilbyr så mye mer"],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":["Trenger du hjelp? Søk vårt brukerstøtenettsted for å finne ut mer om ditt nettsted, din brukerkonto og hvordan få mest ut av WordPress."],"Support documentation":["Brukerstøtte-dokumentasjon"],"Chat bubbles representing getting in touch with support":["Pratebobler for å komme i kontakt med brukerstøtte"],"Site Activity":["Nettstedsaktivitet"],"Start publicizing now":["Start å viderepublisere nå"],"Reach a wider audience by automatically sharing your posts on social media.":["Nå ut til et bredere publikum ved automatisk å dele dine innlegg på sosiale medier."],"Increase traffic to your site":["Øk trafikken på ditt nettsted"],"Explore free themes":["Utforsk gratis temaer"],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":["Få ubegrenset tilgang til hundrevis av profesjonelle temaer og tilpass ditt nettsted akkurat som du liker det."],"A wide variety of themes and tools to customize a site":["Et bredt utvalg av temaer og verktøy for å tilpasse et nettsted"],"Set up your site security":["Sett opp sikkerhet på nettstedet"],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":["Forhindre innloggingsangrep og få øyeblikkelige varsler om det er et problem på ditt nettsted."],"Site stats showing an evolution in traffic and engagement":["Netstedsstatistikk som viser utvikling av trafikk og engasjement"],"A hand holding a loupe":["En hånd som holder en lupe"],"A chart showing an healthy increase in earnings":["Et diagram som som viser sunn økning i inntjeningen"],"Interface showing a chronological list of changes and updates in a site":["Brukergrensesnitt som viser en kronologisk liste over endringer og oppdateringer på et nettsted"],"A cloud with multiple types of content floating around it":["En sky med flere typer innhold som flyter rundt den"],"A folder holding real comments":["En mappe som innholder ekte kommentarer"],"Make your site faster":["Gjør ditt nettsted raskere"],"Load pages faster by serving your images from our global network of servers.":["Last sider raskere ved å få dine bilder levert fra vårt globale nettverk av servere."],"A fast and performant website":["Et raskt nettsted med god ytelse"],"A secure site, locked and protected by Jetpack":["Et sikkert nettsted og beskyttet av Jetpack"],"These settings won't apply to related posts added using the block editor.":["Disse innstillingene vil ikke gjelde for relaterte innlegg i blokkredigeringsverktøyet."],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["Kopier eksisterende innlegg, sider, anbefalinger og portefølje. Alt innholdet vil bli kopiert, inkludert tekst, fremhevet bilde, delingsinstillinger og mer."],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":["Dette nettstedet kan ikke kobles til WordPress.com fordi det bryter med våre {{a}}tjenestevilkår{{/a}}."],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":["Koble ditt nettsted til de sosiale medianettverk du bruker og del ditt innhold til alle dine sosiale konti med et enkelt klikk. Når du publiserer et innlegg vil det dukke opp på alle tilkoblede konti."],"Add Like buttons to your posts and pages":["Legg til Liker-knapper på innlegg og sider"],"When visitors enjoy your content, let them show it with a Like.":["La besøkende har glede av ditt innhold, la dem vise det med en Liker."],"Explore your Jetpack Professional plan!":["Utforsk din profesjonelle pakke!"],"Explore your Jetpack Premium plan!":["Utforsk din premium-pakke!"],"Explore your Jetpack Personal plan!":["Utforsk din personlige pakke!"],"Create account":["Opprett en konto"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["Jetpack gir kraft til ditt nettsted, men for å få tilgang til alle funksjonene trenger du å opprette en konto."],"Real-time, automated backups (unlimited storage)":["Sanntids, automatiske sikkerhetskopier (ubegrenset lagringsplass)"],"Compose content the way you want to and streamline your publishing experience.":["Sett sammen innhold på den måten du ønsker og strømlinjeform dine publiseringsopplevelse."],"Add a portfolio item":["Legg til et portefølje-element"],"Add a testimonial":["Legg til en omtale"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["Gjør dit nettsted maksimalt synlig i søkemotorer og vis trafikkdata i sanntid."],"Create a Jetpack account to use this feature":["Opprett en Jetpack-konto for å bruke denne funksjonen"],"Share your content on social media and increase audience engagement.":["Del ditt innhold i sosiale medier for å øke publikums engasjement."],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["Jetpack vil kontinuerlig overvåke ditt nettsted og varsle deg straks nedetid blir oppdaget."],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["Når en oppdatering til en utvidelse er utgitt er den beste praksis å oppdatere den straks. Velg hvilke utvidelser du ønsker automatisk å oppdatere slik at ditt nettsted forblir trygt."],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["Hold ditt nettsted trygt med ledende sikkerhet og motta varsler om tekniske problemer."],"Error enabling Site accelerator. %(error)s":["Feil ved aktivering av nettstedsakselerator. %(error)s"],"Site accelerator is now speeding up your site!":["Nettstedsakselerator får nå fart på nettstedet ditt!"],"Enabling Site accelerator…":["Aktiverer nettstedakselerator..."],"Error disabling site accelerator. %(error)s":["Feil ved deaktivering av nettstedsakselerator. %(error)s"],"Site accelerator is no longer speeding up your site!":["Nettstedakselerator gir ikke lenger fart til nettstedet ditt!"],"Disabling site accelerator…":["Deaktiverer nettstedsakselerator..."],"Load pages faster, optimize images, and speed up your visitors’ experience.":["Last sider raskere, optimaliser bilder og øk farten på dine besøkendes opplevelse."],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["Komplementer statistikken fra WordPress.com med Googles detaljerte innsyn i dine besøkende og trafikkmønstre."],"High-speed, high-definition video hosting with no third-party ads.":["Høyhastighets-, høydefinisjons video-hosting uten tredjeparts annonser."],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["Planlegg ubegrenset Twitter-oppdateringer, Facebook-innlegg og andre sosiale innlegg på forhånd."],"Marketing Automation":["Automatisering av markedsføring"],"Activate Jetpack Search":["Aktiver Jetpack Søk"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["Bytt ut standard WordPress-søk med bedre resultater og filtrering drevet av Elasticsearch."],"Start earning":["Start tjene penger"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["WordAds lar deg tjene penger ved å vise salgsfremmende innhold. Start å tjene i dag."],"Spam is automatically blocked from your comments.":["Spam blir automatisk blokkert fra ditt dine kommentarer."],"Spam Filtering":["Spam-filtrering"],"Browse premium themes":["Bla gjennom premium-temaer"],"Access hundreds of beautifully designed premium themes at no extra cost.":["Få tilgang til hundrevis av nydelig utformede premium-temaer uten ekstra kostnad."],"Try a premium theme":["Prøv et premium-tema"],"View settings":["Se på innstillinger"],"Create a Jetpack account to view your email followers":["Opprett en Jetpack-konto for å se dine e-postfølgere"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["Åpne ditt nettsted for kommentarer og inviter abonnenter til å få varsler om ditt siste arbeid."],"Manage security settings":["Behandle dine sikkerhetsinnstillinger"],"Built-in Performance":["Innebygget ytelse"],"Jetpack is ready for the new WordPress editor":["Jetpack er klar for det nye redigeringsverktøyet i WordPress"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["I dag introduserer vi den første bølgen av Jetpack-spesifikke blokker bygget spesifikt for den nye redigeringsopplevelsen. Knapp for Simple Payment, skjema, kart og markdown."],"Build your Jetpack site with blocks":["Bygg ditt Jetpack-nettsted med blokker"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["Et nytt redigeringsverktøy? Ja! {{a}}Lær mer{{/a}}."],"The features you rely on, adapted for the new WordPress editor.":["De funksjonene du regner med, overført til det nye redigeringsverktøyet for WordPress."],"Take me to the new editor":["Ta meg til det nye redigeringsverktøyet"],"Testing Jetpack Connection":["Tester Jetpack-tilkoblingen"],"There was an error testing Jetpack. Error: %(error)s":["Det oppsto en feil ved testing av Jetpack. Feil: %(error)s"],"New in Jetpack!":["Nytt i Jetpack!"],"Speed up static file load times":["Få fart på lasting av statiske filer"],"Speed up image load times":["Få fart på lasting av bilder"],"Enable site accelerator":["Aktiver nettstedsakselleratoren"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["Last sider raskere ved å tillate Jetpack å optimalisere dine bilder og levere dine bilder og statiske filer (som CSS og Javascript) fra vårt globale nettverk av servere."],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["Legg til et ekstra lag med sikerhet til ditt nettsted ved å aktivere innlogging og sikker autensering via WordPress.com. Hvis du har flere nettsteder med dette alternativet aktivert vil du kunne logge inn på alle disse med samme legitimasjon."],"View your site activity":["Vis aktiviteten på ditt nettsted"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["Vis en kronologisk oversikt over alle endringer og oppdateringer på ditt nettsted på en organisert og lesbar måte."],"Manually Verify ":["Verifiser manualt"],"Verify with Google":["Verifiser med Google"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["Google vil sende deg e-post om visse hendelser på ditt nettsted, inkludert indikasjoner på at ditt nettsted har blitt {{a1}}hacket{{/a1}}, eller problemer med {{a2}}gjennomsøking eller indeksering{{/a2}} av ditt nettsted."],"or":["eller"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["Følg med på trafikken og ytelsen på ditt nettsted fra {{a}}Google Search Console{{/a}}."],"Your site is verified with Google":["Ditt nettsted er verifisert hos Google"],"Site failed to verify: %(error)s":["Nettstedet kunne ikke verifiseres: %(error)s"],"Verifying...":["Verifiserer..."],"Add faster, more advanced searching to your site with Jetpack Professional.":["Legg til raskere og mer avansert søking til ditt nettsted, med Jetpack Profesjonell."],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["Bytt ut det innebygde søket i WordPress med Jetpack-søk, en avansert søkeopplevelse."],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["Jetpack-søk erstatter det innebygde søket med et raskt, skalerbart, tilpassbart og høyst relevant søk drevet av nettskyen til WordPress.com. Resultatet: Dine brukere finner det innholdet de ønsker, raskere."],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["Det innebygde WordPress-søket er flott for nettsteder med ikke så mye innhold. Men etterhvert som ditt nettsted vokser blir søk tregere og gir mindre relevante resultater."],"Jetpack Search supports many customizations.":["Jetpack støtter mange tilpasninger."],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["Erstatt det innebygde søket med et raskt, skalerbart, tilpasingsvennlig og høyst relevant søk {{a}}drevet av nettskyen til WordPress.com{/a}}."],"Site is verified":["Nettstedet er verifisert"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}For å skape en nydelig nettsted somser ut og virker akkurat som du ønsker det, gir Jetpack Profesjonell deg ubegrenset tilgang til over 200 premium WordPress-tema.{{/p}}{{p}}Jetpack Profesjonell handler mer enn om bare å finne den perfekte utforming. Det er også sjelefred å vite at du vil nyte prioritert brukerstøtte fra vårt globale team av eksperter, om behovet skulle melde seg.{{/p}}"],"Spam filtering and priority support.":["Spam-filtrering og prioritert brukerstøtte."],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["Når annonser er aktivert vil Jetpack automatiske generere en tilpasset ads.txt-fil skreddersydd for ditt nettsted."],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["Jetpack genererer automatisk ern tilpasset {{link}}ads.txt{{/link}} Skreddersydd for ditt nettsted. Hvis du trenger ytterligere oppføringer for andre annonsenettverk, vennligts legg dem til i feltet nedenfor, én pr. linje."],"Custom ads.txt entries":["Tilpassede oppføringer for ads.txt"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}For å lage et nydelig nettsted som ser ut akkurat som du ønsker det, gir Jetpack Profesjonell deg ubgrenset tilgang til over 200 premium WordPress-tema.{{/p}}{{p}}Jetpack Profesjonell handler om mer enn bare å finne den perfekte utforming. Det handler også om sjelefred: sanntids sikkerhetskopiering, automatisk søking etter skadevare og prioritert brukerstøtte fra vårt globale team av eksperter garanterer at ditt nettsted alltid vil være trygt og sikkert.{{/p}}"],"Introducing Premium Themes":["Introduserer Premium Tema"]," Premium Themes":[" Premium Tema"],"Privacy information":["Informasjon om personvern"],"Enable Lazy Loading for images":["Aktiver lat lasting av bilder"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["Lat lasting av bilder forbedrer hastigheten på ditt nettsted og skaper en jevnere visningsopplevelse. Bilder vil lastes etter hvert som besøkende ruller ned på siden i stedet for alle på én gang."],"Performance & speed":["Ytelse og hastighet"],"Enable high-speed, ad-free video player":["Aktiver en hurtig, reklamefri videoavspiller"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["Gjør innholdet du publiserer mer engasjerende med høyoppløselig video. Med Jetpack Video kan du tilpasse din medieavspiller og levere høyhastighets-, reklamefrie og umerkede videoer til dine besøkende. Videoene ligger på våre servere på WordPress.com og tar ikke opp plass hos din nettvert eller på ditt webhotell."],"Video":["Video"],"Carousel color scheme":["Fargeskjema for karusell"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Exif-data viser seerne ekstra tekniske detaljer om et foto, som brennvidde, blenderåpning og filmhastighet (ISO)."],"Show photo Exif metadata in carousel (when available)":["Vis exif-data for foto i karusell (når tilgjengelig)"],"Display images in a full-screen carousel gallery":["Vis bilder i et fullskjerms karusell-galleri"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["Lag fullskjerms karusell-lysbildevisning for bildene i dine innlegg og sider. Karusell-gallerier er mobilvennlige og oppmuntrer besøkende til å samhandle med bildene dine."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["Verktøylinje fra WordPress.com erstatter standard WordPress admin verktøylinje og strømlinjeformer din WordPress-opplevelse. Den tilbyr ett-klikks tilgang til å administrer alle dine nettsteder, oppdatere din profil på WordPress.com, vise varslinger og holde deg ajour med nettsteder du følger i leseren der."],"Portfolios shortcode: [portfolio]":["Kortkode for portefølje: [portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["Bruk {{portfolioLink}}porteføljer{{/portfolioLink}} på ditt nettsted for å vise frem dine beste arbeider. Hvis ditt tema ikke støtter Jetpacks porteføljer kan du likevel bruke en enkel kortkode for å vise dem på ditt nettsted."],"Testimonials shortcode: [testimonials]":["Kortkode for anbefalinger: [testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["Legg til {{testimonialLink}}anbefalinger{{/testimonialLink}} på ditt nettsted for å tiltrekke nye kunder. Hvis ditt tema ikke støtter Jetpacks anbefalinger kan du likevel bruke en enkel kortkode for å vise dem på ditt nettsted. "],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["Søkemotorer kan for øyeblikket ikke få tilgang til ditt nettsted. Hvis du ønsker å gjøre ditt nettsted tilgjengelig sjekk {{a}}Innstillinger for lesing{{/a}} og skru på \"Synlighet for søkemotorer\"."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["Gode nyheter: Jetpack sender automatisk ditt nettkart til alle større søkemotorer for indeksering."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["Nettkart er dokumenter som søkemotorer som Google og Bing bruker for å indeksere din nettside. De kan hjelpe til med å forbedre din rangering i søkeresultater. Når du aktiverer denne funksjonen vil Jetpack opprette nettkart for deg og oppdatere dem automatisk når innholdet på nettstedet ditt endres."],"Configure related posts in the Customizer":["Konfigurer relaterte innlegg i Tilpasseren"],"Highlight related content with a heading":["Fremhev relatert innhold med en topptekst"],"View security scan details":["Vis detaljer fra sikkerhets-skanning"],"View backup history":["Vis historie for sikkerhetskopiering"],"Show a thumbnail image where available":["Vis et miniatyrbilde når tilgjengelig"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["For mer informasjon om hvordan hver Jetpack-funksjon bruker data og sporer aktiviter, vennligst se vårt {{privacyCenterLink}}personvernsenter{{/privacyCenterLink}}."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["Vi bruker andre sporingsverktøy, inkludert noen fra tredjepart. {{cookiePolicyLink}}Les om disse{{/cookiePolicyLink}} og hvordan kontrollere dem."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["Denne informasjonen hjelper oss med å forbedre våre produkter, gjøre markedsføring overfor deg mer relevant, tilpasse din opplevelse av WordPress.com og mer til, som beskrevet i detalj i vår {{pp}}personvernerklæring{{/pp}}."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["Del informasjon med vårt analyseverktøyom din bruk av tjenester når du er logget inn på din konto hos WordPress.com. {{cookiePolicyLink}}Lær mer om dette{{/cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["Denne funksjonen blir behandlet av en administrator. {{link}}Lær mer{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["Denne funksjonen hare blitt deaktivert av en administrator. {{link}}Lær mer{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["Denne funksjonen har blitt aktivert av en administrator. {{link}}Lær mer{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["%(moduleName)s har blitt deaktivert av en administrator. {{link}}Lær mer{{/link}}."],"This feature has been disabled by a site administrator.":["Denne funksjonen har blitt deaktivert av en administrator."],"%(moduleName)s has been disabled by a site administrator.":["%(moduleName)s har blitt deaktivert av en administrator."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["Du kan legge ut flere annonser med annonse-widgeten. {{link}}Prøv den!{{/link}}"],"Configure your notification settings":["Konfigurer dine innstillinger for varslinger"],"Monitor your site's downtime":["Overvåk nettstedets nedetid"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["Jetpacks søkemodul er en kraftfull erstatning for søkemulighetene som er innebygget i WordPress."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["Filene på ditt nettsted blir regelmessig undersøkt for uautoriserte eller mistenkelige endringer som kunne kompromittere din sikkerhet eller data."],"Plugin needs updating.":["Utvidelse trenger oppdatering.","Utvidelser trenger oppdatering."],"%(number)s":["%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Jetpacks utvidelsesoppdateringer lar deg velge hvilke utvidelser som oppdateres automatisk."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack vil optimalisere dine bilder og levere dem fra en serverplassering nær dine besøkende. Bruk av vårt globale nettverk vil øke hastigheten ved lasting av dine sider."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":["Jetpacks nedetidsovervåking vil holde øye med ditt nettsted og varsle deg straks nedetid oppdages."],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Jetpacks sikkerhetskopier lar deg enkelt legge tilbake eller laste ned en sikkerhetskopi fra et bestemt tidspunkt."],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet sjekekr dine kommentarer og innsendinger fra kontaktskjema opp mot våre globale database med spam."],"Privacy Information":["Informasjon om personvern"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["Jetpack Video lar deg laste opp videoer fra din datamaskin for å bli lagret på WordPress.com, heller enn på serveren til din nettvert/webotell. Du kan så sette inn disse på ditt eget WordPress-nettsted."],"Add the Search (Jetpack) widget to your sidebar":["Legg søkewidgeten til på din sidekolonne"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["Gi dine besøkende en flott søkeopplevelse ved å la dem filtrere og sortere raske, relevante søkeresultater."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["Aktiverer et lettvekts, mobilvennlig tema som vil vises til besøkende på mobile enheter."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["Laster neste innlegg automatisk når leseren nærmer seg bunnen av siden."],"Allows you to publish new posts by sending an email to a special address.":["Tillater deg å publisere innlegg ved å sende e-post til en spesiell adresse."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["Lar deg komponere innhold med lenker, oversikter andre stiler ved hjelp av Markdown-syntaks."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["Sjekker ditt innhold for korrekt grammatikk og staving, misbrukte ord og stil, mens du skriver."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["Gir de nødvendige, skjulte merkene som trengs for å verifisere ditt nettsted opp mot forskjellige tjenester."],"Displays information on your site activity, including visitors and popular posts or pages.":["Viser informasjon om aktiviteten på ditt nettsted, inkludert besøkende og populære innlegg og sider."],"Allows you to optimize your site and its content for better results in search engines.":["Lar deg optimalisere ditt nettsted og innholdet for bedre resultater i søkemotorer."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["Integrerer ditt WordPress-nettsted med Google Analytics, en plattform som tilbyr innsikter i din trafikk, besøkende og konverteringer."],"Displays high-quality ads on your site that allow you to earn income.":["Vis annonser av høy kvalitet på dine sider og som tillater deg å få inntekt fra den."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["Legger delingsknapper under ditt innhold slik at besøkende kan dele det på sosiale medier."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["Tillater deg automatisk å dele ditt nyeste innhold på sosiale medier, inkludert Facbook og Twitter."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["Legger til Liker-knapp under ditt innhold slik at besøkende kan vise sin anerkjennelse og fornøyelse."],"Allows registered users to log in to your site with their WordPress.com accounts.":["Tillater registrerte brukere å logge inn på ditt nettsted med sine WordPress.com-konti."],"Protects your site from traditional and distributed brute force login attacks.":["Beskytter ditt nettsted mot tradisjonelle og distribuerte rå makt-angrep."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["Sikkerhetskopierer ditt nettsted til de globale WordPress.com-serverne, tillater deg å legge tilbake innholdet i et nødstilfelle eller ved feil."],"Removes spam from comments and contact forms.":["Fjerner spam fra kommentarer og kontaktskjema."],"We are committed to your privacy and security. ":["Vi er forpliktet på ditt personvern og sikkerhet."],"View all Jetpack plans":["Vis alle Jetpacks abonnementspakker"],"Manage your plan":["Behandle din abonnementspakke"],"Your Plan":["Din abonnementspakke"],"You’re currently on Jetpack %(plan)s.":["Du har for tiden på pakken Jetpack %(plan)s."],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["Tillater lesere å abonnere på dine innlegg og/eller kommentarer og motta varsling om nytt innhold via e-post."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["Erstatter standard WordPress kommentarskjema med et nytt kommentarsystem som inkluderer alternativer for å logge på med sine sosiale media-konti."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}Aktiver{{/a}} for å erstatte det innebygde søket i WordPress med en en forbedret søkeopplevelse."],"Add Search (Jetpack) Widget":["Legg til søkewidget fra Jetpack"],"Jetpack Search is powering search on your site.":["Jetpack-søk driver søkesystemet på ditt nettsted."],"Manage your plugins":["Behandle dine utvidelser"],"Moderate comments":["Moderer kommentarer"],"Error updating privacy settings. %(error)s":["Feil ved oppdatering av personverninnstillingene. %(error)s"],"Updated privacy settings.":["Personvern-innstillinger oppdatert."],"Updating privacy settings…":["Oppdaterer personverninnstillingene&hellip;"],"Add Jetpack Search Widget":["Legg til ajax-drevet søkewidget"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["Legger til en søkewidget i din sidekolonne for å konfigurere avanserte søkefiltre."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["Full sikkerhetspakke, markedsføring og verktøy for automatisering av inntjening, ubegrenset video-hosting, ubegrenset med temaer, forbedret søk og prioritert brukerstøtte."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["Full sikkerhetspakke, markedsføring og verktøy for automatisering av inntjening, ubegrenset video-hosting og prioritert brukerstøtte."],"Daily backups, spam filtering, and priority support.":["Daglige sikkerhetskopier, spam-filtrering og prioritert brukerstøtte."],"Always-on Security":["Alltid på-sikkerhet"],"Activate video hosting":["Aktiver video-hosting"],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Sanntids sikkerhetskopiering av alle dine nettsteds-data med ubegrenset plass, ett-klikks tilbakelegging, automatisert sikkerhetskontroll og prioritert brukerstøtte"],"Design the perfect website":["Utform det perfekte nettsted"],"Set up Jetpack":["Sett opp Jetpack"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["Sanntid sikkerhetskopiering av alle data på nettstedet med ubegrenset plass, ett-klikks tilbakelegging og automatisert sikkerhetskontroll."],"Jetpack Search":["Jetpack Søk"],"Jetpack version %(version)s":["Jetpack versjon %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["Ditt nettsted blir sikkerhetskopiert i sanntid og regelmessig skannet for sikkerhetstrusler."],"Daily backup of all your site data with unlimited space and one-click restores":["Daglig sikkerhetskopi av alle dine data med ubegrenset plass og ett-klikks tilbakelegging."],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Daglig sikkerhetskopi av alle dine data med ubegrenset plass, ett-klikks tilbakelegging, automatisert sikkerhets-skanning og prioritert brukerstøtte."],"View your security activity":["Vis din sikkerhetsaktivitet"]," (powered by VaultPress).":["(drevet at VaultPress)."],"Customize Search Widget":["Tilpass søke-widget"],"Please correct the issue below and try again.":["Vennligst korriger problemet nedenfor og prøv igjen.","Vennligst korriger problemene vist nedenfor og prøv igjen."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["Vi passer på at ditt nettsted forblir fritt for sikkerhetstrusler. Vi vil varsle deg hvis vi finner noe."],"Your site is being backed up in real-time.":["Ditt nettsted blir sikkerhetskopiert i sanntid."],"Jetpack version":["Jetpack-versjon"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}Vis aktivteten på ditt nettsted{{/a}} i en enkelt strøm."],"Activity":["Aktivitet"],"Confirm each new phrase you add by pressing enter.":["Bekreft hver ny frase du legger til med enter."],"{{a}}View details{{/a}}":["{{a}}Vis detaljer{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["Takk for at du valgte Jetpack Profesjonell. Jetpack sikkerhetskopierer nå ditt innhold i sanntid, indekserer ditt innhold for søk, skanner etter sikkerhetstrusler og gir deg tilgang til premium tema."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["Med Jetpack Profesjonell kan du skape det perfekte nettsted med over 300 profesjonelt utformede WordPress-tema, inkludert mer enn 200 premium tema. Tilpass ditt innhold med en rekke widgeter eller legg ved ubegrenset med videoer til dine innlegg og sider - vist fritt for reklame eller vannmerker."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["Å skape vekst blant dine følgere er enkelt med abonnementspakken Profesjonell, takket være deling av innhold og verktøy for planlegging , SEO-verktøy og innebygde abonnement-muligheter. Du kan tjene penger på ditt nettsted med en Enkle betalinger-knapp og annonser, og så overvåke suksessen til ditt arbeid med Google Analytics."],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Din abonnementsplan på Jetpack gir deg alt du trenger for å holde ditt nitidige arbeid trygt, inkludert sikkerhetskopiering på forespørsel og skanning etter skadevare, med ett-klikks retting. Ditt nettsted vil være fullt ut beskyttet mot spam, ondsinnet kode og rå makt-angrep på innlogging."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Start utforsking av Jetpack Profesjonell nå for å se alle fordelene med din nye abonnementspakke."],"Install premium themes":["Installer prmium-tema"],"Review SEO features":["Gå gjennom SEO-funksjoner"],"Welcome Professional":["Velkommen profesjonell"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["Takk for at du valgte Jetpack Premium. Jetpack sikkerhetskopierer nå ditt nettsted, sjekker for sikkerhetstrusler og klargjør funksjoner for inntjening."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["Med Jetpack Premium kan du skape det perfekte nettsted, uansett formål. Tilpass ditt nettsteds utseende med ett av flere enn 100 gratis tema eller forbedre ditt innhold med ubegrenset video -- alt hostet fritt for reklame og vannmerker."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Ved bruk av jetpacks kraftige delingsverktøy kan du automatisk dele dine nyeste innlegg på sosiale medier, eller planlegge ditt innhold til å bli delt på nytt på hvilken som helst dato eller tidspunkt du ønsker det. Og sammen med å øke dine følgere kan du øke din forretning med verktøy som betalingsknapper og annonser."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Start utforskingen av Jetpack Premium nå for å se alle fordelene med din nye abonnementspakke."],"Monetize your site with ads":["Tjen penger på ditt nettsted med annonser"],"Welcome Premium":["Velkommen premium"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["Takk for at du valgte Jetpack Personlig abonnement. Jetpack sikkerhetskopiereer nå ditt nettsted of skanner for sikkerhetstrusler."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["Med Jetpack Personlig abonnement har du adgang til mer enn 100 gratis, profesjonelt utformede tema. Velg det tema som passer best til ditt nettsted og tilpass farger, bilder eller legg til en rekke widgeter."],"Got it":["Forstår det"],"Welcome personal":["Velkommen personlig"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["Ved å klikke på knappen under godtar du våre {{tosLink}}tjenstevilkår{{/tosLink}} og å {{shareDetailsLink}}dele detaljer{{/shareDetailsLink}} med WordPress.com."],"Jetpack Stats People":["Jetpacks statstikk-folk"],"Hello there! Your stats have been activated.":["Hei! Din statistikk er aktivert."],"Just give us a little time to collect data so we can display it for you here.":["Bare gi oss litt tid til å samle data slik at vi kan vise deg dem her."],"Okay, got it!":["Okay, skjønner!"],"Display ads below posts on":["Vis annonser under innlegg på"],"Additional ad placements":["Flere plasseringer for annonser"],"Top of each page":["Toppen av hver side"],"Second ad below post":["Annonse nr 2 under innlegg"],"Archives":["Arkiver"],"Explore Professional":["Utforsk Profesjonell"],"Compare All Plans":["Sammenlign alle abonnementspakker"],"Person with laptop":["Person med laptop"],"Your Jetpack site is ready to go!":["Ditt Jetpack-nettsted er klar til å kjøre!"],"Stars":["Stjerner"],"Jupiter":["Jupiter"],"Welcome to Jetpack Personal":["Velkommen til Jetpack personlig abonnement"],"Welcome to Jetpack Premium":["Velkommen til Jetpack premium abonnement"],"Welcome to Jetpack Professional":["Velkommen til Jetpack profesjonell abonnement"],"Schedule posts":["Planlegg innlegg"],"Activate Publicize":["Aktiver Publiser"],"Your site is backed up.":["Ditt nettsted er sikkerhetskopiert."],"Image Performance":["Bilde-ytelse"],"Get WordPress Apps for every device":["Skaff deg WordPress-apper for enhver enhet"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Behandle alle dine nettsteder fra ett enkelt kontrollpanel: Publiser innhold, følg statistkk, moderer kommentarer og mye annet, fra hvor som helst i verden."],"I already use this app.":["Jeg bruker allerede denne appen."],"Create address":["Opprett adresse"],"Priority support":["Prioritert brukerstøtte"],"Add sharing buttons to your posts":["Legg til delingsknapper for dine innlegg"],"Automatically share your posts to social networks":["Del dine innlegg automatisk til sosiale medier"],"Updating settings…":["Oppdaterer innstillinger&hellip;"],"Updating Post by Email address…":["Oppdaterer adressen for Publiser med e-post..."],"Your paid plan gives you access to prioritized Jetpack support.":["Din betalte abonnementspakke gir deg tilgang til prioritert brukerstøtte fra Jetpack."],"You have paid for backups but they're not yet active.":["Du har betalt for sikkerhetskopier, men de er ennå ikke aktive."],"You have paid for backups and security scanning but they’re not yet active.":["Du har betalt for sikkerhetskopier og sikkerhetsgjennomsøking, men de er ikke ennå aktive."],"Click \"Set Up\" to finish installation.":["Klikk \"Sett opp\" for å avslutte installasjonen."],"Checking site status…":["Sjekker nettstedets status&hellip;"],"Pages":["Sider"],"We're here to help":["Vi er her for å hjelpe"],"Jetpack comes with free, basic support for all users.":["Jetpack kommer med gratis, grunnleggende støtte for alle brukere."],"Ask a question":["Still et spørsmål"],"Search our support site":["Søk på vår støtteside"],"Get a faster resolution to your support questions.":["Få raskere svar på dine spørsmål."],"Host fast, high-quality, ad-free video.":["Lagre hurtig, høykvalitets reklamefri video."],"Generate income with high-quality ads.":["Tjen penger på annonser av høy kvalitet."],"Real-time site backups and automatic threat resolution.":["Sanntids sikkerhetskopiering av nettstedet og automatisk beskyttelse mot trusler."],"Protect against data loss, malware, and malicious attacks.":["Beskytt mot datatap, skadelig programvare og ondsinnede angrep."],"Integrate easily with Google Analytics.":["Enkel integrering med Google Analytics."],"Help your content get found and shared with SEO tools.":["Hjelp ditt innhold til å bli funnet og delt med SEO-verktøy."],"Protect your site from spam.":["Beskytt ditt nettsted mot spam."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["Nettstedet er ikke koblet til WordPress.com. Vennligst spør administratoren om å koble til."],"Spam filtering":["Filtrering av søppelpost"],"Daily, automated malware scanning":["Daglig, automatisk skadevare-skanning"],"Daily, automated backups (unlimited storage)":["Daglige, automatiske sikkerhetskopier (ubegrenset lagring)"],"Daily, automated malware scanning with automated resolution":["Daglige, automatisert skadevare-skanning med automatisk retting"],"Unlimited, high-speed video hosting":["Ubegrenset høyhastighets video-hosting"],"SEO preview tools":["SEO-verktøy for forhåndsvisning"],"Site stats, related content, and sharing tools":["Nettstedsstatistikk, relatert innhold og delingsverktøy"],"Brute force attack protection and downtime monitoring":["Beskyttelse mot rå makt-angrep og overvåking av nedetid"],"Unlimited, high-speed image hosting":["Ubegrenset, høyhastighet-hosting"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["Ved å koble %(siteName)s fra WordPress.com vil du ikke lenger ha tilgang til følgende:"],"Read more about Jetpack benefits":["Les mer om Jetpacks fordeler"],"An Automattic Airline":["Et Automattic flyselskap"],"Manage site connection":["Behandle nettstedets tilkobling"],"Connect your account to WordPress.com to view more stats":["Koble din konto til WordPress.com for å se mer statistikk"],"Theme enhancements":["Forbedringer av tema"],"Load more posts using the default theme behavior":["Lat inn flere innlegg med temaets standard oppførsel"],"Load more posts in page with a button":["Last inn flere innlegg med en knapp"],"Load more posts as the reader scrolls down":["Last inn flere innlegg når leseren ruller nedover"],"Theme support required.":["Støtte i temaet er nødvendig."],"Learn more about adding support for Infinite Scroll to your theme.":["Les mer om støtte for ubegrenset rulling i ditt tema."],"Use excerpts instead of full posts on front page and archive pages":["Bruk utdrag i stedet for hele innlegg på forsiden og i akriver"],"Show featured images":["Vis fremhevede bilder"],"Enable the WordPress.com toolbar":["Aktiver verktøylinjen fra WordPress.com"],"Writing tools available to you will be shown here when an administrator enables them.":["Skrive-verktøy tilgjengelig for deg når administrator aktiverer dem"],"Portfolios":["Porteføljer"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Merk at {{b}}verifisering mot disse tjenestene ikke er nødvendig{{/b}} for at ditt nettsted skal indekseres av søkemotorene. For å bruke disse avanserte søkemotor-verktøyene og verifisere et nettsted en tjenesten,lim inn HTML merke-koden nedenfor. Les {{support}}fulle instruksjoner{{/support}} hvis du får problemer. Støttede verifiseringstjenester: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Tools{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}} og {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["Generer XML nettkart"],"Collecting valuable traffic stats and insights":["Samler inn verdifull trafikk-statistikk og innsikter"],"The image helps collect stats, but should work when hidden.":["Bildet hjelper til med å samle statistikk, men skulle virke også når skjult."],"Count logged in page views from":["Tell sidevisninger av innloggede fra"],"Allow stats reports to be viewed by":["Till at at statistikken kan sees av"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["Du kan justere disse innstillingene om du vil ha mer avansert kontroll. Les mer om hva du kan gjøre for å {{a}}optimalisere SEO på ditt nettsted{{/a}}."],"Configure your SEO settings":["Konfigurer dine innstillinger for SEO"],"In \"Upgrade\"":["I \"Oppgradering\""],"Configure your Google Analytics settings":["Konfigurer dine innstillinger for Google Analytics"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Vis annonse på den første artikkelen på din hjemmeside eller på slutten av hver side og innlegg. Plasser ytterligere annonser i toppen av ditt nettsted, og på ethvert widget-område, for å øke din inntjening."],"Enable ads and display an ad below each post":["Aktiver annonser og vis en annonse under hvert innlegg"],"Configure your sharing buttons":["Konfigurer dine delingsknapper"],"Connect your social media accounts":["Koble til dine konti på sosiale media"],"Match accounts using email addresses":["Koble kontoer ved å bruke e-postadresser"],"Require accounts to use WordPress.com Two-Step Authentication":["Krev at kontoene bruker WordPress.com tofaktor autensering"],"Add to whitelist":["Legg til på hvitlisten"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["Du kan hvitliste en IP-adresse eller en serie adresser fra å noen gang å bli blokkert av Jetpack. IPv4 of IPv6 er godtatt. For å angi et intervall, legg inn den start- og sluttverdien adskilt med bindestrek. Eksempel: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["Ditt nettsted er sikkerhetskopiert og fritt for trusler."],"Checking your spam protection…":["Sjekker din spam-beskyttelse&hellip;"],"Fetching key…":["Henter nøkkel&hellip;"],"Your site needs an Antispam key.":["Ditt nettsted trenger en nøkkel for anti-spam."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["Det er et problem med din API-nøkkel for anti-spam. {{a}}Lær mer{{/a}}."],"Your site is not protected from spam.":["Ditt nettsted er ikke beskyttet mot spam."],"Your Antispam key is valid.":["Din nøkkel for anti-spam er ikke gyldig."],"Your site is protected from spam.":["Ditt nettsted er beskyttet mot spam."],"Checking key…":["Sjekker nøkkel&hellip;"],"Your API key":["Din API-nøkkel"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["Hvis du allerede har en API-nøkkel kan du {{a}}be om din API key her{{/a}}, og du vil ledet gjennom prosessen for å få en."],"No search results found for %(term)s":["Ingen søkeresultater funnet for %(term)s"],"Enter a search term to find settings or close search.":["Oppgi en søkeuttrykk for å finne innstillinger eller lukk søk."],"Connections":["Oppkoblinger"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Ditt nettsted er i utviklingsmodus, så det kan ike obles til WordPress.com."],"Your site is connected to WordPress.com.":["Ditt nettsted er koblet til WordPress.com"],"You are the Jetpack owner.":["Du er Jetpack-eieren."],"Connected as {{span}}%(username)s{{/span}}":["Tilkoblet som {{span}}%(username)s{{/span}}"],"View your Email Followers":["Vis dine e-postfølgere"],"Color scheme":["Fargeskjema"],"Enable Markdown use for comments.":["Aktiver Markdown for kommentarer."],"Updated settings.":["Innstillinger oppdatert."],"Error updating settings. %(error)s":["Feil ved oppdatering av innstillinger. %(error)s"],"Regenerated Post by Email address.":["Gjenopprettet adresse for Publiser med e-post."],"Error regenerating Post by Email address. %(error)s":["Feil ved gjenoppretting av adresse for Publiser med e-post %(error)s"],"Updated settings. Refreshing page…":["Innstillinger oppdatert. Oppfrisker siden&hellip;"],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["For tiden i {{a}}utviklingsmodus{{/a}} (noen funksjoner er deaktivert) fordi: {{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}Filteret jetpack_development_mode er aktivt{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}Konstanten JETPACK_DEV_DEBUG er definert{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}Din nettsteds-URL mangler punktum (f.eks. http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics er en gratis tjeneste som komplementerer vår {{a}}innebygde statistikk{{/a}} med forskjellinge innsikter i din trafikk. Statistikk fra WordPress.com stats og Google Analytics bruker ulike metoder for å identifisere og spore aktivitet på ditt nettsted, slik at de vil normal vise litt forskjellige totaler for besøk, visninger osv."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Konfigurer Google Analytics"],"Activate Google Analytics":["Aktiver Google Analytics"],"Download the free apps":["Last ned gratis-appene"],"Upgrade Focus: VideoPress For Weddings":["Fokus for oppgradering: VideoPress for bryllup"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}Du kan nå også konfigurere relaterte innlegg i tilpasseren. {{ExternalLink}}Prøv det!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["Som standard blir annonser vist på slutten av hvert side, innlegg eller første innlegg på forsiden. Du kan også legge dem på toppen av alle nettsidene og til ethvert widget-område du har, for ytterligere å øke inntjeningen din."],"Display an ad unit at the top of your site.":["Vis en annonseblokk på toppen av sidene."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["Ved å aktivere annonser aksepterer du {{link}}tjenestevilkårene{{/link}} for Automattic annonseprogram."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Din server/webhotell er feilkonfigurert, noe som betyr at Jetpacks beskyttelsesmodul ikke effektivt kan beskytte ditt nettsted."],"In \"Mobile\"":["I \"Mobil\""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Tilpass dine innstillinger for varsler fra overvåkingen på WordPress.com{{/link}}"],"View your earnings":["Vis din inntjening"],"Configure site SEO":["Konfigurer SEO for nettstedet"],"Activate SEO tools":["Aktiver SEO-verktøy"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["For å komme i gang klikker du Legg til media i din editor og laster opp en video. Vi tar oss av resten!"],"Video Hosting":["Video-hosting"],"SEO Tools":["SEO-verktøy"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Avanserte SEO-verktøy for å hjelpe ditt nettsted med å bli funnet når folk søker etter relevant innhold."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":["Du kjører Jetpack i et utviklingsmiljø."],"More Info":["Mer informasjon"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Bestem synligheten for likinger fra innstillinger for deling{{/a}}"],"Your current IP: %(ip)s":["Din nåværende IP: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["Det er innstillinger i denne fanen som vil gå tapt om du forlater den. Fortsette?"],"This will reset all Jetpack options, are you sure?":["Dette vil tilbakestille alle Jetpack-innstillingene. Er du sikker?"],"Search for a Jetpack feature.":["Søk etter en Jetpack-modul."],"Configure your Security Scans":["Konfigurer dine sikkerhets-skanninger"],"Subscriber":["Abonnent"],"Big iPhone/iPad Update Now Available":["En stor oppdatering for iPhone/iPad er nå tilgjengelig"],"The WordPress for Android App Gets a Big Facelift":["Appen WordPress for Android får en stor ansiktsløfting/oppgradering"],"WordPress.com Likes are:":["Likinger fra WordPress.com er:"],"Comments headline":["Overskrift kommentarer"],"A few catchy words to motivate your readers to comment.":["Noen få fangende ord for å motivere dine lesere til å kommentere."],"Show a \"follow blog\" option in the comment form":["Vis et \"Følg nettstedet\"-alternativ i kommentarskjemaet"],"Show a \"follow comments\" option in the comment form":["Vis en \"Følg kommentarer\"-avkrysning under kommentar-skjemaet."],"Put a chart showing 48 hours of views in the admin bar":["Legg et diagram som tegner de siste 48 timers sidevisninger på verktøylinjen"],"Hide the stats smiley face image":["Skjul statistikkens lille smilefjes"],"Whitelisted IP addresses":["Hvitlistede IP-adresser"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Vis en annonse for WordPress mobil-apper i sidebunnen til nettstedet, når mobil-temaet er i bruk"],"Copied!":["Kopiert!"],"Highlight and copy the following text to your clipboard:":["Merk og kopier følgende tekst til utklippstavlen:"],"Regenerate address":["Regenerer adresse"],"Automatically proofread content when: ":["Korrekturles automatisk når:"],"A post or page is first published":["Et innlegg eller en side er publisert første gang"],"A post or page is updated":["Et innlegg eller en side er oppdatert"],"Automatic Language Detection":["Automatisk detektering av språk"],"The proofreader supports English, French, German, Portuguese and Spanish.":["Korrekturleseren støtter engelsk, fransk, tysk, portugisisk og spansk."],"Enable proofreading for the following grammar and style rules: ":["Aktiver korrektur for de følgende grammatikk- og stilreglene:"],"Add a phrase":["Legg til en frase"],"Cheatin' uh?":["Jukser vi?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}Kune du være grei og fortelle oss hvorfor du ikke fullførte oppkoblingen av Jetpack, i denne {{a}}spørreundersøkelsen med 2 spørsmål{{/a}}?{{/p}}{{p}}Oppkobling av Jetpack er nødvendig for vår gratis sikkerhets- og trafikk-funksjoner.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Velkommen til {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["Din Jetpack er allrede oppkoblet."],"You're fueled up and ready to go, Jetpack is now active.":["Du er tanket opp og klar til å kjøre. Jetpack er nå aktiv,"],"You're fueled up and ready to go.":["Du er tanket opp og klar til å kjøre,"],"You are currently running a development version of Jetpack.":["Du kjører for tiden en utviklingsversjon av Jetpack."],"Submit Beta feedback":["Send inn tilbakemelding om beta-utgivelse"],"What would you like to see on your Jetpack Dashboard?":["Hva ville du likt å se på ditt Jetpack-kontrollpanel?"],"Let us know!":["La oss få høre!"],"Saving…":["Lagrer…"],"Save Settings":["Lagre innstillinger"],"Jetpack Stats Icon":["Ikon for Jetpack nettstedstatistikk"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Aktiver Nettstedstatistikk{{/a}} for å se detaljert besøkstatistikk, likinger, følgere, abonnenter og mer! {{a1}}Lær mer{{/a1}}"],"Activate Site Stats":["Aktiver nettstedstatistikk"],"Security Scanning":["Sikkerhetsgjennomsøking"],"Site Backups":["Sikkerhetskopier av nettstedet"],"Upgrade":["Oppgrader"],"ACTIVE":["AKTIV"],"Your site is on Development Mode":["Ditt nettsted er i utviklermodus"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Straks du har koblet kan du velge å oppgradere til en betalt abonnementspakke for å låse opp sikkerhet i verdensklasse, verktøy for beskyttelse mot søppelkommentarer og prioritert brukerstøtte."],"View your spam stats":["Vis din useriøs-statistikk"],"View your security dashboard":["Vis ditt sikkerhets-kontrollpanel"],"The site is in Development Mode, so you can not connect to WordPress.com.":["Ditt nettsted er i utviklermodus så du kan ikke koble til WordPress.com"],"Link your account to WordPress.com to get the most out of Jetpack.":["Koble din brukerkonto til WordPress.com for å få mest ut av Jetpack."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["For automatisk, omfattende skanning etter sikkerhetstrusler, vennligst {{a}}installer og aktiver{{/a}} VaultPress."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["For automatisk, omfattende skanning for sikkerhetstrusler, vennligst {{a}}oppgrader din konto{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack blokkerer nå aktivt uønskede innloggingsforsøk. Dat vil vises her snart!"],"Total malicious attacks blocked on your site.":["Totalt antall angrep blokkert på ditt nettsted."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Aktiver beskyttelse{{/a}} for å holde ditt nettsted beskyttet mot ondsinnede innloggingsforsøk.."],"All plugins are up-to-date. Awesome work!":["Alle utvidelser oppdatert. Godt gjort!"],"Jetpack is improving and optimizing your image speed.":["Jetpack forbedrer og optimaliserer hastigheten på dine bilder."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack overvåker nettstedet ditt. Hvis vi tror ditt nettsted er nede vil du motta en e-post."],"Security":["Sikkerhet"],"Performance":["Ytelse"],"Backups":["Sikkerhetskopier"],"{{a}}View backup details{{/a}}.":["{{a}}Vis detaljer om sikkerhetskopi{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["For automatisk å sikkerhetskopiere hele nettstedet, venligst {{a}}installer og aktiver{{/a}} VaultPress."],"Unavailable in Dev Mode.":["Utilgjengelig i utviklermodus"],"Spam Protection":["Beskyttelse mot spam"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["For moderne og beste spam-beskyttelse, vennligst {{a}}installer Akismet{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["For fremragende beskyttelse mot spam, vennligst {{a}}aktiver Akismet{{/a}}."],"Invalid key":["Ugyldig nøkkel"],"Unavailable in Dev Mode":["Ikke tilgjengelig i utviklingsmodus"],"Activating recommended features…":["Aktiverer anbefalte funksjoner..."],"Recommended features active.":["Anbefalte moduler er aktive."],"Recommended features failed to activate. %(error)s":["Aktivering av anbefalte funksjoner mislyktes: %(error)s"],"Activating %(slug)s…":["Aktiverer %(slug)s…"],"%(slug)s has been activated.":["%(slug)s har blitt aktivert."],"%(slug)s failed to activate. %(error)s":["%(slug)s fikk feil ved aktivering. %(error)s"],"Deactivating %(slug)s…":["Deaktiverer %(slug)s…"],"%(slug)s has been deactivated.":["%(slug)s har blitt deaktivert."],"%(slug)s failed to deactivate. %(error)s":["%(slug)s hadde feil ved deaktivering. %(error)s"],"Updating %(slug)s settings…":["Oppdaterer innstillinger for %(slug)s&hellip;"],"Updated %(slug)s settings.":["Oppdaterte innstillinger for %(slug)s."],"Error updating %(slug)s settings. %(error)s":["Feil ved oppdatering av innstillinger for %(slug)s. %(error)s"],"Updating %(slug)s address…":["Oppdaterer adresse for %(slug)s&hellip;"],"Regenerated %(slug)s address .":["Regenererte adressen for %(slug)s."],"Error regenerating %(slug)s address. %(error)s":["Feil ved regenerering av adressen for %(slug)s. %(error)s"],"Resetting Jetpack options…":["Tilbakestilling av innstillinger for Jetpack..."],"Options reset.":["Innstillinger tilbakestilt."],"Options failed to reset.":["Innstillingene kunne ikke tilbakestilles."],"There was an error disconnecting Jetpack. Error: %(error)s":["Det oppsto en feil ved frakobling av Jetpack. Feil: %(error)s"],"Unlinking from WordPress.com":["Kobler fra WordPress.com"],"Unlinked from WordPress.com.":["Frakoblet WordPress.com."],"Error unlinking from WordPress.com. %(error)s":["Feil ved sletting fra WordPress.com. %(error)s"],"At A Glance":["På et øyeblikk"],"Clichés":["Clichés"],"Dashboard":["Kontrollpanel"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Vil du fortelle oss hvorfor? Bare {{a}}å svare på to enkle spørsmål{{/a}} vil hjelpe oss til å forbedre Jetpack."],"Automattic's Privacy Policy":["Automattics personvernerklæring"],"WordPress.com Terms of Service":["Tjenestevilkår for WordPress.com"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}Activer{{/a}} for å forbedre og gjøre bildene dine raskere."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Skru på automatiske oppdateringer for utvidelser{{/a}}"],"Plugin Updates":["Oppdateringer av utvidelser"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["For automatisk sikkerhetskopiering av ditt nettsted, vennligst {{a}}oppgrader din konto{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["Oops! Din Akismet-nøkkel mangler eller er ugyldig. {{akismetSettings}}Gå til innstillinger for Akismet for å rette{{/akismetSettings}}."],"No threats found, you're good to go!":["Ingen trusler funnet. Du er klar til å gå!"],"{{a}}Contact Support{{/a}}":["{{a}}Kontakt brukerstøtten{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}Vis detaljer på VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["Uh oh, %(number)s trussel funnet.","Uh oh, %(number)s trusler funnet."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}Aktiver overvåking{{/a}} for å motta varsler i tilfelle ditt nettsted går ned."],"Loading…":["Laster..."],"Downtime monitoring":["Overvåling av nedetid"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}Vis mer staistikk på WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}Vis detaljert statistikk{{/button}}"],"All-time comments":["Kommentarer til all tid"],"All-time views":["Visninger til all tid"],"%(number)s View":["%(number)s visning","%(number)s visninger"],"Best overall day":["Beste dag"],"Views today":["Visninger i dag"],"Months":["Måneder"],"Weeks":["Uker"],"Days":["Dager"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["Noe uventet hende ved lastingen av staistikken. Vennligst prøv igjen senere eller {{a}}vis din statistikk på WordPress.com nå{{/a}}"],"Click to view detailed stats.":["Klikk for å se detaljert statistikk."],"Views: %(numberOfViews)s":["Visninger: %(numberOfViews)s"],"Week of %(date)s":["Uken med %(date)"],"Site Security":["Nettstedsikkerhet"],"Activate recommended features":["Aktiver anbefalte funksjoner"],"Link to WordPress.com":["Koble til WordPress.com"],"Unlink me from WordPress.com":["Koble meg fra WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["Det oppsto et problem med å koble opp Jetpack. Vennligst klikk \"Koble til WordPress.com\" igjen."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["Vi har hatt et et problem med Jetpack. Deaktiver, deretter reaktiver utvidelsen Jetpack av WordPress.com. Koble så til igjen."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Du må forbli innlogget på ditt WordPress-nettsted mens du godkjenner Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Din Jetpack har en svikt.{{/s}} Vi beklager uleiligheten. Vennligst prøv igjen senere, og hvis problemet fortsetter, kontakt brukerstøtte med denne meldingen: %(error_key)s"],"Disconnecting Jetpack":["Frakobler Jetpack"],"Learn more":["Lær mer"],"Posts":["Innlegg"],"Front page":["Forsiden"],"Upload videos":["Last opp videoer"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Vis relatert innhold etter innlegg"],"Related":["Relatert"],"Save":["Lagre"],"Email Address":["E-postadresse"],"Media":["Medier"],"Themes":["Temaer"],"Site Stats":["Nettstedsstatistikk"],"Sharing":["Deling"],"Testimonials":["Anbefalinger"],"Cancel":["Avbryt"],"Comments":["Kommentarer"],"Ignored Phrases":["Ignorerte setninger"],"Use automatically detected language to proofread posts and pages":["Bruk automatisk oppdaget språk for å korrekturlese innlegg og sider"],"Redundant Phrases":["Overflødige setninger"],"Phrases to Avoid":["Uttrykk for å unngå"],"Passive Voice":["Passiv stemme"],"Jargon":["Sjargong"],"Hidden Verbs":["Skjulte verb"],"Double Negatives":["Dobbel negasjon"],"Diacritical Marks":["Diakritiske merker"],"Complex Phrases":["Komplekse setninger"],"Bias Language":["Forutinntatt språk"],"English Options":["Valg for engelsk"],"Proofreading":["Korrekturlesing"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack kunne i koble til WordPress.com: %(error_key)s. Dette skyldes vanligvis at noe er satt opp feil hos ditt nettvert eller på din server."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com har for øyeblikket problemer og er ute av stand til å gi drivstoff til din Jetpack. Vennligst prøv igjen senere."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}Din Jetpack har en feil.{{/s}} Det er ikke mulig å koble dette nettstedet til WordPress.com. Dette betyr vanligvis at nettstedet ditt ikke er offentlig tilgjengelig (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Ditt nettsted må være offentlig tilgjengelig for å bruk Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["Du har frakoblet Jetpack"],"Edit":["Rediger"],"Connected":["Tilkoblet"],"Activate":["Aktiver"],"Active":["Aktiv"],"Search":["Søk"],"Settings":["Innstillinger"],"Learn More":["Lær mer"],"Disconnect Jetpack":["Frakoble Jetpack"],"Test your site’s compatibility with Jetpack.":["Sjekk ditt nettsteds kompatibilitet med Jetpack."],"Settings header\u0004Plugin Autoupdates":["Automatisk oppdatering av utvidelser"],"Settings header\u0004Downtime monitoring":["Overvåking av nedetid"],"Settings header\u0004Privacy Settings":["Innstillinger for personvern"],"Settings header\u0004WordPress.com toolbar":["Verktøylinje fra WordPress.com"],"Settings header\u0004Composing":["Komposisjon"],"Settings header\u0004Site stats":["Nettsted-statistikk"],"Settings header\u0004Search engine optimization":["Søkemotoroptimalisering"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Delingsknapper"],"Settings header\u0004Publicize connections":["Tilkoblinger for Publiser"],"Settings header\u0004Like buttons":["Liker-knapper"],"Settings header\u0004WordPress.com log in":["Innlogging via WordPress.com"],"Settings header\u0004Brute force attack protection":["Beskyttelse mot rå makt-angrep"],"Settings header\u0004Backups and security scanning":["Sikkerhetskopier og sikkerhetsovervåking"],"Settings header\u0004Spam filtering":["Spam-filtrering"],"Navigation item.\u0004Performance":["Ytelse"],"Navigation item.\u0004My Plan":["Min pakke"],"Navigation item.\u0004Dev Tools":["Utviklerverktøy"],"Navigation item.\u0004Settings":["Innstillinger"],"Navigation item.\u0004Discussion":["Diskusjon"],"Navigation item.\u0004Traffic":["Trafikk"],"Navigation item.\u0004Sharing":["Deling"],"Navigation item.\u0004At A Glance":["På et øyeblikk"],"Navigation item.\u0004Plans":["Pakker"],"Navigation item.\u0004Writing":["Skriving"],"Navigation item.\u0004Reset Options (dev only)":["Tilbakestill alternativer (kun dev)"],"Navigation item.\u0004Security":["Sikkerhet"],"Navigation item.\u0004At a Glance":["På et øyeblikk"],"Search term.\u0004terms of service":["tjenestevilkår"],"Search term.\u0004tos":["tos"],"Search term.\u0004gdpr":["gdpr"],"Search term.\u0004data":["data"],"Search term.\u0004tracks":["sporing"],"Search term.\u0004privacy":["personvern"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["Oppgrader"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Oppgrader"],"Button caption\u0004Saving…":["Lagrer&hellip;"],"Button caption\u0004Save settings":["Lagre innstillinger"],"A heading for a block of related posts.\u0004Related":["Relatert"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Forhåndsvisning"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Forbli tlkoblet"],"A caption for a button to disconnect.\u0004Disconnect":["Koble fra"],"Short warning message\u0004Updates needed":["Oppdateringer nødvendig"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Betalt"],"A header for a preview area in the configuration screen.\u0004Preview":["Forhåndsvis"],"Ads header\u0004Ads":["Annonser"],"Dashboard widget header\u0004Site connection":["Tilkobling av nettstedet"],"Dashboard widget header\u0004Account connection":["Tilkobling av konto"],"A caption for a small button to fix security issues.\u0004Threats":["Trusler"],"A caption for a small button to fix security issues.\u0004FIX":["FIKS"],"Short warning message about new threats found.\u0004Threats found!":["Trusler funnet!"],"Short warning message about site having no security scan.\u0004No scanning":["Ingen skanning"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Oppgrader"],"Short message informing user that the site is secure.\u0004Secure":["Sikker"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Ugyldig nøkkel"],"Caption for a button to set up a feature.\u0004Set up":["Sett opp"],"verb\u0004Copy":["Kopier"],"Shorthand for Privacy Policy.\u0004Privacy":["Personvern"],"Shorthand for Terms of Service.\u0004Terms":["Brukerbetingelser"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Feilsøk"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["Useriøse kommentarer blokkert."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-nl_NL-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-nl_NL-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index c907d299..00000000
--- a/plugins/jetpack/languages/json/jetpack-nl_NL-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"nl"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":["Activeer vervolgens de aanbevolen functie van Jetpack om de beveiliging en prestaties van je site te optimaliseren. {{a}}Meer informatie over wat er inbegrepen is{{/a}}."],"We’re now collecting stats and securing your site. Welcome aboard.":["We verzamelen nu statistieken en beveiligen je site. Bedankt voor je deelname."],"{{a}}Skip, and explore features individually{{/a}}.":["{{a}}Overslaan en functies afzonderlijk verkennen{{/a}}."],"Jetpack Business Plan":["Jetpack Business abonnement"],"Jetpack Premium Plan":["Jetpack Premium abonnement"],"Jetpack Personal Plan":["Jetpack Persoonlijk abonnement"],"Get started with hassle-free design, stats, and performance tools.":["Ga aan de slag met moeiteloos ontwerpen, statistieken en prestatietools."],"Welcome to Jetpack Free":["Welkom bij Jetpack Gratis"],"Jetpack Free Plan":["Jetpack Gratis abonnement"],"Explore Jetpack plans":["Ontdek de Jetpack abonnementen"],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":["Krijg gemoedsrust van geautomatiseerde back-ups en ondersteuning met prioriteit, bereik een groter publiek door gebruik te maken van geavanceerde SEO-hulpmiddelen, verdien aan je site door advertenties te tonen en personaliseer je site door een keuze te maken uit onze meer dan 200 premium-thema's."],"Jetpack offers so much more":["Jetpack biedt zo veel meer"],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":["Heb je hulp nodig? Bekijk onze ondersteuningssite voor meer informatie over je site, je account en het optimaal benutten van WordPress."],"Support documentation":["Ondersteuningsdocumentatie"],"Chat bubbles representing getting in touch with support":["Tekstballonnen die staan voor het contact opnemen met ondersteuning"],"Site Activity":["Site-activiteit"],"Start publicizing now":["Begin nu met publiceren"],"Reach a wider audience by automatically sharing your posts on social media.":["Bereik een groter publiek door je berichten automatisch te delen op social media."],"Increase traffic to your site":["Verhoog de bezoekersaantallen van je site"],"Explore free themes":["Ontdek gratis thema's"],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":["Krijg onbeperkt toegang tot honderden professionele thema's en personaliseer je site precies zoals jij dat wilt."],"A wide variety of themes and tools to customize a site":["Veel verschillende thema's en tools om een site te personaliseren"],"Set up your site security":["Beveilig je site"],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":["Voorkom inlogaanvallen en ontvang direct een melding als er een probleem is met je site."],"Site stats showing an evolution in traffic and engagement":["Sitestatistieken die de ontwikkeling van de bezoekersaantallen en betrokkenheid tonen"],"A hand holding a loupe":["Een hand die een vergrootglas vasthoudt"],"A chart showing an healthy increase in earnings":["Een grafiek die een verhoging van de inkomsten aangeeft"],"Interface showing a chronological list of changes and updates in a site":["Interface van een chronologische lijst met wijzigingen en updates van een site"],"A cloud with multiple types of content floating around it":["Een cloud waar meerdere contenttypes omheen zweven"],"A folder holding real comments":["Een map met daarin echte reacties"],"Make your site faster":["Maak je site sneller"],"Load pages faster by serving your images from our global network of servers.":["Laat pagina's sneller laden door je afbeeldingen beschikbaar te stellen via ons globale servernetwerk."],"A fast and performant website":["Een snelle en succesvolle website"],"A secure site, locked and protected by Jetpack":["Een veilige site, beveiligd en beschermd door Jetpack"],"These settings won't apply to related posts added using the block editor.":["Deze instellingen zijn niet van toepassing op gerelateerde berichten die toegevoegd zijn met de blokeditor."],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["Kopieer bestaande berichten, pagina's, testimonials en portfolio's. Alle content wordt gekopieerd, inclusief tekst, aanbevolen afbeeldingen, instellingen voor delen en meer."],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":["Deze site kan niet worden gekoppeld aan WordPress.com omdat de site onze {{a}}Servicevoorwaarden{{/a}} schendt."],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":["Koppel je website aan de socialmedianetwerken waarvan je gebruikmaakt en deel je content met al je socialmedia-accounts met één druk op de knop. Wanneer je een bericht publiceert, wordt dit op alle gekoppelde accounts weergegeven."],"Add Like buttons to your posts and pages":["Voeg like-knoppen toe aan je berichten en pagina's."],"When visitors enjoy your content, let them show it with a Like.":["Wanneer bezoekers je content leuk vinden, kunnen ze dit aangeven met een like."],"Explore your Jetpack Professional plan!":["Verken je Jetpack Professional abonnement!"],"Explore your Jetpack Premium plan!":["Verken je Jetpack Premium abonnement!"],"Explore your Jetpack Personal plan!":["Verken je Jetpack Personal abonnement!"],"Create account":["Account maken"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["Je site is gebaseerd op Jetpack, maar om van alle functies gebruik te kunnen maken heb je een account nodig."],"Real-time, automated backups (unlimited storage)":["Real-time, geautomatiseerde back-ups (onbeperkte opslag)"],"Compose content the way you want to and streamline your publishing experience.":["Stel op jouw manier content op en stroomlijn je publiceer-ervaring."],"Add a portfolio item":["Een portfolio-item toevoegen"],"Add a testimonial":["Een testimonial toevoegen"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["Maak je site maximaal vindbaar in zoekmachines en bekijk real-time verkeersstatistieken."],"Create a Jetpack account to use this feature":["Creëer een Jetpack-account om deze functie te gebruiken"],"Share your content on social media and increase audience engagement.":["Deel je content op social media en verhoog de betrokkenheid van je bezoekers."],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["Jetpack houdt je site doorlopend in de gaten en stuurt je een waarschuwing wanneer je site offline lijkt te zijn."],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["Als een plugin-update wordt uitgebracht, raden we je aan om die plugin meteen bij te werken. Kies welke plugins je automatisch wilt laten bijwerken zodat je site beveiligd blijft."],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["Bescherm je site optimaal met geavanceerde beveiliging en ontvang meldingen bij technische problemen."],"Error enabling Site accelerator. %(error)s":["Fout bij inschakelen siteversneller. %(error)s"],"Site accelerator is now speeding up your site!":["Siteversneller verhoogt nu de snelheid van je site!"],"Enabling Site accelerator…":["Siteversneller inschakelen..."],"Error disabling site accelerator. %(error)s":["Fout bij uitschakelen siteversneller. %(error)s"],"Site accelerator is no longer speeding up your site!":["Siteversneller verhoogt nu niet langer de snelheid van je site!"],"Disabling site accelerator…":["Siteversneller uitschakelen..."],"Load pages faster, optimize images, and speed up your visitors’ experience.":["Pagina's sneller laden, afbeeldingen optimaliseren en je bezoekerservaring verbeteren."],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["Vul de statistieken van WordPress.com aan met een gedetailleerd overzicht van Google, waarin je bezoekers en verkeer worden weergegeven."],"High-speed, high-definition video hosting with no third-party ads.":["Videohosting op hoge snelheid en met hoge resolutie, zonder advertenties van derden."],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["Onbeperkt tweets, Facebook-berichten en andere social media-berichten van tevoren inplannen."],"Marketing Automation":["Geautomatiseerde marketing"],"Activate Jetpack Search":["Jetpack Search activeren"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["Vervang de standaard WordPress-zoekfunctie door betere resultaten en filters, mogelijk gemaakt door Elasticsearch."],"Start earning":["Begin met verdienen"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["Met WordAds kun je geld verdienen door promotionele content te tonen. Begin vandaag met verdienen"],"Spam is automatically blocked from your comments.":["Spam wordt automatisch geblokkeerd voor je reacties."],"Spam Filtering":["Spamfilters"],"Browse premium themes":["Zoek door premium thema's"],"Access hundreds of beautifully designed premium themes at no extra cost.":["Krijg toegang tot honderden prachtige premium-thema's zonder extra kosten."],"Try a premium theme":["Probeer een premium-thema"],"View settings":["Geef instellingen weer"],"Create a Jetpack account to view your email followers":["Creëer een Jetpack-account om je e-mailvolgers te bekijken"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["Stel je site open voor reacties en nodig abonnees uit om meldingen te ontvangen over je nieuwste werk."],"Manage security settings":["Je beveiligingsinstellingen beheren"],"Built-in Performance":["Geïntegreerde prestaties"],"Jetpack is ready for the new WordPress editor":["Jetpack is klaar voor de nieuwe WordPress-editor"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["We introduceren vandaag de eerste lading Jetpack-specifieke blokken, die speciaal voor de nieuwe editor-ervaring zijn ontwikkeld: de knop Eenvoudige betalingen, Formulier, Kaart en Markering."],"Build your Jetpack site with blocks":["Breid je Jetpack-site uit met blokken"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["Een nieuwe editor? Ja! {{a}}Meer informatie{{/a}}."],"The features you rely on, adapted for the new WordPress editor.":["De functies waarop je vertrouwt, aangepast aan de nieuwe WordPress-editor."],"Take me to the new editor":["Breng me naar de nieuwe editor"],"Testing Jetpack Connection":[""],"There was an error testing Jetpack. Error: %(error)s":["Er is een fout opgetreden bij het testen van Jetpack. Fout: %(error)s"],"New in Jetpack!":["Nieuw in Jetpack!"],"Speed up static file load times":["Laadtijden van statische bestanden versnellen"],"Speed up image load times":["Laadtijden van afbeeldingen versnellen"],"Enable site accelerator":["Siteversneller inschakelen"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["Laat pagina's sneller laden door Jetpack in staat te stellen om je afbeeldingen te optimaliseren en je afbeeldingen en statische bestanden (zoals CSS en JavaScript) beschikbaar te stellen via ons wereldwijde servernetwerk."],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["Voeg een extra beveiligingslaag aan je website toe door inloggen via WordPress.com en beveiligde authenticatie in te schakelen. Als je meerdere sites hebt en deze opties is ingeschakeld, dan kun je op al je sites inloggen met dezelfde inloggegevens."],"View your site activity":["Bekijk de activiteit op je site"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["Bekijk een chronologische lijst waarop alle wijzigingen en updates van je site op een georganiseerde, overzichtelijke manier staan vermeld."],"Manually Verify ":["Handmatig verifiëren "],"Verify with Google":["Verifiëren met Google"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["Google stuurt een e-mail over bepaalde gebeurtenissen die plaatsvinden op je site, zoals indicaties dat je website {{a1}}gehackt is{{/a1}}, of problemen met {{a2}}het afspeuren of indexeren{{/a2}} van je site."],"or":["of"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["Controleer de bezoekersaantallen en prestaties van je site via de {{a}}Google Search Console{{/a}}."],"Your site is verified with Google":["Je site is niet geverifieerd met Google"],"Site failed to verify: %(error)s":["Site kon niet geverifieerd worden: %(error)s"],"Verifying...":["Bezig met verifiëren …"],"Add faster, more advanced searching to your site with Jetpack Professional.":["Voeg een snellere, geavanceerdere zoekfunctie toe aan je site met Jetpack Professional."],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["Vervang de standaard WordPress-zoekmachine door Jetpack Search, voor een geavanceerde zoekervaring"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["Jetpack Search vervangt de ingebouwde zoekfunctie door een snelle, schaalbare, personaliseerbare en zeer relevante zoekfunctie in de WordPress.com-cloud. Het resultaat: Je gebruikers vinden de content die ze zoeken sneller."],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["De ingebouwde WordPress-zoekfunctie is een goede optie voor sites zonder veel content. Maar naarmate je site groter wordt, worden zoekopdrachten langzamer en geven ze minder relevante resultaten."],"Jetpack Search supports many customizations.":["Jetpack Search ondersteunt een groot aantal aanpassingen."],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["Vervang de ingebouwde zoekfunctie door een snelle, schaalbare, personaliseerbare en zeer relevante zoekfunctie {{a}}in de WordPress.com-cloud{{/a}}."],"Site is verified":["Site is geverifieerd"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}Om een prachtige site te creëren die er precies zo uitziet en werkt zoals jij het wilt, geeft Jetpack Professional je ongelimiteerde toegang tot meer dan 200 premium WordPress thema's.{{/p}}{{p}}Jetpack Professional gaat om meer dan alleen het vinden van het perfecte ontwerp. Het zorgt ook voor gemoedsrust, omdat je weet dat je met voorrang ondersteuning krijgt van ons wereldwijde team van experts.{{/p}}"],"Spam filtering and priority support.":["Spamfilters en ondersteuning met prioriteit."],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["Wanneer advertenties zijn uitgeschakeld, genereert Jetpack automatisch een aangepaste ads.txt voor je site."],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["Jetpack genereert automatisch een aangepaste {{link}}ads.txt{{/link}} voor je site. Als je extra items wil toevoegen voor andere netwerken, voeg deze dan hieronder toe (één per regel)."],"Custom ads.txt entries":["Aangepaste ads.txt-items"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}Om een prachtige site te creëren die er precies zo uitziet en werkt als jij wilt, geeft Jetpack Professional je onbeperkte toegang tot meer dan 200 premium WordPress-thema's.{{/p}}{{p}}Jetpack Professional is meer dan alleen het perfecte design vinden. Het draait ook om totale gemoedsrust: dankzij de realtime back-ups, automatische malwarescans en ondersteuning met prioriteit van onze globale team experts, is je site altijd veilig en beschermd.{{/p}}"],"Introducing Premium Themes":["Introductie premium thema's"]," Premium Themes":[" Premium thema's"],"Privacy information":["Privacy informatie"],"Enable Lazy Loading for images":["Lazy-loading voor afbeeldingen inschakelen"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["Met lazy-loading van afbeeldingen neemt de snelheid van je site toe en wordt je site vloeiender weergegeven. In plaats van dat alle afbeeldingen tegelijkertijd worden geladen, worden ze geladen wanneer bezoekers naar de onderkant van het scherm scrollen."],"Performance & speed":["Performance & snelheid"],"Enable high-speed, ad-free video player":["Razendsnelle videospeler zonder advertenties"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["Maak de content die je publiceert nog interessanter met video's op hoge resolutie. Met Jetpack Video kun je je mediaspeler personaliseren en razendsnelle video's, zonder advertenties en merken, aan je bezoekers tonen. Video's worden op onze WordPress.com-servers gehost en nemen geen ruimte van je hostingabonnement in beslag!"],"Video":["Video"],"Carousel color scheme":["Carousel-kleurenschema"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Exif-data geeft bezoekers meer informatie over de technische gegevens van een foto, zoals de brandpuntsafstand, belichtingstijd en ISO."],"Show photo Exif metadata in carousel (when available)":["Toon Exif-metadata van foto's in Carousel (indien beschikbaar)"],"Display images in a full-screen carousel gallery":["Geef afbeeldingen in een Carousel-galerij op volledige schermgrootte weer"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["Maak Carousel-diavoorstellingen op volledige schermgrootte voor de afbeeldingen in je berichten en pagina's. Carousel-galerijen zijn geschikt voor mobiel en moedigen bezoekers van je site aan om je foto's te bekijken."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["De WordPress.com-werkbalk vervangt de standaard WordPress-beheerdertaakbalk en stroomlijnt je WordPress-ervaring. Met deze balk kun je al je sites met één druk op de knop weergeven, je WordPress.com-profiel bijwerken, meldingen bekijken en de sites die je in de Reader volgt bezoeken."],"Portfolios shortcode: [portfolio]":["Shortcode voor portfolio's: [portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["Gebruik {{portfolioLink}}portfolio's{{/portfolioLink}} op je site om je meesterwerken tentoon te stellen. Als je thema geen Jetpack-portfolio's ondersteunt, kun je nog altijd een eenvoudige shortcode gebruiken om ze op je site weer te geven."],"Testimonials shortcode: [testimonials]":["Shortcode voor testimonials: [testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["Voeg {{testimonialLink}}testimonials{{/testimonialLink}} toe aan je website om nieuwe klanten te trekken. Als je thema geen Jetpack-testimonials ondersteunt, kun je nog altijd een eenvoudige shortcode gebruiken om ze op je site weer te geven."],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["Zoekmachines hebben op dit moment geen toegang tot je site. Controleer je {{a}}Reading-instellingen{{/a}} en zet de \"Zichtbaarheid voor zoekmachines\" aan om je site toegankelijk te maken."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["Goed nieuws: Jetpack stuurt je sitemap automatisch naar alle belangrijke zoekmachines voor indexering."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["Sitemaps zijn bestanden die zoekmachines zoals Google of Bing gebruiken om je website te indexeren. Ze kunnen je helpen je vermelding in zoekmachines te verbeteren. Wanneer je deze functie inschakelt, zorgt Jetpack dat je sitemaps worden aangemaakt en automatisch worden bijgewerkt wanneer de content op je site wordt gewijzigd."],"Configure related posts in the Customizer":["Gerelateerde berichten in het aanpassingsmenu configureren"],"Highlight related content with a heading":["Gerelateerde content met een koptekst markeren"],"View security scan details":["Details van beveiligingsscan weergeven"],"View backup history":["Back-upgeschiedenis weergeven"],"Show a thumbnail image where available":["Geef een miniatuurafbeelding weer, indien beschikbaar"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["Voor meer informatie over hoe specifieke Jetpack-functies gegevens gebruiken en activiteit bijhouden, kun je ons {{privacyCenterLink}}Privacy-centrum{{/privacyCenterLink}} raadplegen."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["We gebruiken ook andere tracking-tools, waaronder een aantal van derden. {{cookiePolicyLink}}Lees hier meer over de tools{{/cookiePolicyLink}} en hoe je ze kunt beheren."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["Deze informatie helpt ons onze producten te verbeteren, marketing relevanter te maken en de WordPress.com-ervaring op je af te stemmen. Je vindt hierover meer informatie in ons {{pp}}privacybeleid{{/pp}}."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["Deel informatie met onze analysetool over hoe je services gebruikt terwijl je bent ingelogd op je WordPress.com-account. {{cookiePolicyLink}}Meer informatie{{/cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["Deze functie wordt beheerd door een sitebeheerder. {{link}}Meer informatie{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["Deze functie is uitgeschakeld door een sitebeheerder. {{link}}Meer informatie{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["Deze functie is ingeschakeld door een sitebeheerder. {{link}}Meer informatie{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["%(moduleName)s is uitgeschakeld door een sitebeheerder. {{link}}Meer informatie{{/link}}."],"This feature has been disabled by a site administrator.":["Deze functie is uitgeschakeld door een sitebeheerder."],"%(moduleName)s has been disabled by a site administrator.":["%(moduleName)s is uitgeschakeld door een sitebeheerder."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["Met de Ad-widget kun je meer advertenties plaatsen. {{link}}Probeer het eens!{{/link}}"],"Configure your notification settings":["Configureer je meldingsinstellingen"],"Monitor your site's downtime":["Monitor de downtime van je site"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["Jetpack Search is een krachtige vervanging voor de standaard zoekfunctie van WordPress."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["De bestanden op je site worden regelmatig gescand op ongeautoriseerde of verdachte aanpassingen die je beveiliging en gegevens kunnen aantasten."],"Plugin needs updating.":["Plugin moeten worden bijgewerkt.","Plugins moeten worden bijgewerkt."],"%(number)s":["%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Met Plugin Updates van Jetpack kun je zelf bepalen welke plugins automatisch worden bijgewerkt."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack optimaliseert je afbeeldingen en stelt ze beschikbaar vanaf de serverlocatie die zich het dichtst bij je bezoekers bevindt. Als je ons wereldwijde Content Delivery Network gebruikt, wordt je site sneller geladen."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":[""],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Met Jetpack Backups kun je je site eenvoudig herstellen of een back-up van een specifiek moment downloaden."],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet controleert je reacties en aanmeldingen via contactformulieren aan de hand van onze globale spam-database."],"Privacy Information":["Privacy-informatie"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["VideoPress biedt je de mogelijkheid om video's naar je computer te uploaden, zodat deze kunnen worden gehost op WordPress.com in plaats van op de servers van je host. Je kunt ze vervolgens invoegen op je zelf-gehoste Jetpack-site. "],"Add the Search (Jetpack) widget to your sidebar":["Voeg de Search-widget (Jetpack) toe aan je sidebar"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["Bied je bezoekers een geweldige zoekervaring door ze te laten filteren en snelle, relevante zoekresultaten te sorteren."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["Hiermee wordt een eenvoudig thema voor mobiele apparaten ingeschakeld dat wordt weergegeven voor bezoekers die mobiele apparaten gebruiken."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["Laadt automatisch de volgende berichten wanneer de lezer de onderkant van de pagina bereikt."],"Allows you to publish new posts by sending an email to a special address.":["Stelt je in staat om nieuwe berichten te plaatsen door een e-mail naar een speciaal adres te sturen."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["Stelt je in staat om content met links, lijsten en andere stijlen op te stellen met de Markdown-syntax."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["Controleert je content tijdens het schrijven op de juiste grammatica en spelling, verkeerd woordgebruik en schrijfstijl."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["Geeft je de vereiste verborgen tags die nodig zijn om je WordPress-site door verschillende services te laten verifiëren."],"Displays information on your site activity, including visitors and popular posts or pages.":["Geeft informatie over activiteit op je site weer, waaronder de bezoekersaantallen en populaire berichten of pagina's."],"Allows you to optimize your site and its content for better results in search engines.":["Geeft je de mogelijkheid om je site en de content op je site te optimaliseren voor betere zoekmachineresultaten."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["Integreert je WordPress-site met Google Analytics, een platform dat je inzicht biedt in je bezoekersaantallen, bezoekers en klanten."],"Displays high-quality ads on your site that allow you to earn income.":["Geeft hoogwaardige advertenties weer op je site, zodat je geld kunt verdienen."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["Voegt knoppen voor delen toe aan je content, zodat bezoekers je content via social media kunnen delen."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["Stelt je in staat om automatisch je nieuwste content via socialmedianetwerken, zoals Facebook en Twitter, te delen."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["Voegt Like-knoppen toe aan je content, zodat bezoekers hun waardering of plezier kunnen tonen."],"Allows registered users to log in to your site with their WordPress.com accounts.":["Biedt geregistreerde gebruikers de mogelijkheid om in te loggen op je site met hun WordPress.com-accounts."],"Protects your site from traditional and distributed brute force login attacks.":["Beschermt de site tegen traditionele en verspreide brute force-aanvallen."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["Maakt back-ups van je site op de algemene servers van WordPress.com, zodat je je content kunt herstellen in geval van nood of bij fouten."],"Removes spam from comments and contact forms.":["Verwijdert spam uit reacties en contactformulieren."],"We are committed to your privacy and security. ":["Je privacy en veiligheid zijn voor ons van groot belang. "],"View all Jetpack plans":["Bekijk alle Jetpack-abonnementen"],"Manage your plan":["Beheer je abonnement"],"Your Plan":["Jouw abonnement"],"You’re currently on Jetpack %(plan)s.":["Je maakt momenteel gebruik van Jetpack %(plan)s."],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["Laat lezers zich abonneren op je berichten of reacties en ontvang meldingen over nieuwe content via e-mail."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["Vervangt het standaard WordPress-reactieformulier door een nieuw reactiesysteem dat het mogelijk maakt om in te loggen via social media."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}Activeer deze{{/a}} om de standaardzoekfunctie van WordPress te vervangen door een verbeterde zoekfunctie."],"Add Search (Jetpack) Widget":["Search-widget (Jetpack) toevoegen"],"Jetpack Search is powering search on your site.":["Jetpack Search verbetert de zoekfunctie op je site."],"Manage your plugins":["Je plugins beheren"],"Moderate comments":["Reacties beheren"],"Error updating privacy settings. %(error)s":["Fout bij het bijwerken van privacy-instellingen. %(error)s"],"Updated privacy settings.":["Privacy-instellingen bijwerken."],"Updating privacy settings…":["Privacy-instellingen worden bijgewerkt ..."],"Add Jetpack Search Widget":["Voeg Jetpack zoekwidget toe"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["Voeg de Jetpack Search widget toe aan je zijbalk om geavanceerde zoekfilters en sortering in te stellen."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["Volledige beveiligingspakket, marketing- en hulpmiddelen voor automatische inkomsten, onbeperkte video-hosting, onbeperkte thema's, uitgebreid zoeken en prioriteitsondersteuning."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["Volledig beveiligingspakket, marketing- en hulpmiddelen voor automatische inkomsten, onbeperkte video-hosting en prioriteitsondersteuning."],"Daily backups, spam filtering, and priority support.":["Dagelijkse backups, spamfilter en prioriteitsondersteuning."],"Always-on Security":["Permanente beveiliging"],"Activate video hosting":[""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Realtime back-up van alle data op je site met onbeperkte ruimte, herstel in één klik, automatische beveiligingsscans en ondersteuning met prioriteit."],"Design the perfect website":["Ontwerp de perfecte website"],"Set up Jetpack":["Jetpack instellen"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["Realtime back-up van alle data op je site met onbeperkte ruimte, herstel met één druk op de knop en automatische beveiligingsscans."],"Jetpack Search":["Jetpack Search"],"Jetpack version %(version)s":["Jetpack versie %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["Jouw website wordt live geback-upt en regelmatig gescand op beveiligingsbedreigingen."],"Daily backup of all your site data with unlimited space and one-click restores":["Dagelijkse back-ups van al jouw site data met onbeperkte ruimte en herstellen met een enkele klik"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Realtime backup van al jouw site data met onbeperkte ruimte, één-klik herstel, automatische beveiligingsscan en ondersteuning met voorrang"],"View your security activity":["Toon jouw beveiligingsactiviteit"]," (powered by VaultPress).":[" (aangedreven door VaultPress)."],"Customize Search Widget":["Pas zoek widget aan"],"Please correct the issue below and try again.":["Los het probleem hieronder op en probeer het nogmaals.","Los de problemen hieronder op en probeer het nogmaals."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["We zorgen ervoor dat je website vrij blijft van beveiligingsbedreigingen. We informeren je als we er één vinden."],"Your site is being backed up in real-time.":["Jouw website wordt realtime geback-upt."],"Jetpack version":["Jetpack versie"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}Toon jouw site activiteit{{/a}} in een enkele feed."],"Activity":["Activiteit"],"Confirm each new phrase you add by pressing enter.":["Bevestig elke nieuwe zin die je toevoegt door op Enter te drukken."],"{{a}}View details{{/a}}":["{{a}}Bekijk details{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["Bedankt dat je voor een Jetpack Professioneel gekozen hebt. Jetpack maakt nu realtime backups van je inhoud, indexeert je inhoud voor zoeken, scant je site op beveiligingsbedreigingen en geeft toegang tot premium-thema's."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["Met Jetpack Professioneel kun je je site optimaliseren met 300 professionele WordPress-thema's, waarvan meer dan 100 premium-thema's. Pas je content aan met een grote verscheidenheid aan widgets of voeg onbeperkt video's toe aan je berichten en pagina's, die zonder advertenties of watermerken worden weergegeven."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["Met een Professioneel abonnement is het zeer eenvoudig om het aantal volgers te laten stijgen, doordat je inhoud kunt delen en inplannen, SEO-gereedschap kunt gebruiken en mensen zich eenvoudig kunnen abonneren. Je kunt geld verdienen met je site door middel van een Simple Payments-knop en hoogwaardige advertenties. Bovendien kun je het resultaat van je inspanningen bekijken door je site te integreren met Google Analytics."],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Je Jetpack abonnement biedt je alles wat je nodig hebt om je harde werken te beschermen, waaronder backups wanneer het jou uitkomt en malware-scans met herstel in één klik en probleemoplossing. Je site wordt volledig beschermd tegen spam, schadelijke code en brute force-inlogpogingen."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Ontdek Jetpack Professioneel nu om alle voordelen van je nieuwe abonnement te bekijken."],"Install premium themes":["Installeer premium-thema's"],"Review SEO features":["Gebruik SEO-functies"],"Welcome Professional":["Welkom bij Professioneel"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["Bedankt dat je voor een Jetpack Premium abonnement kiest. Met Jetpack kun je nu een back-up van je site maken, deze scannen op beveiligingsbedreigingen en geld verdienen aan je site."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["Maak een perfecte site met Jetpack Premium: het maakt niet uit wat het doel van je site is. Pas de weergave van je site aan met meer dan 200 gratis thema's of vul je content aan met maximaal 13 GB HD-video, die allemaal zonder advertenties of watermerken worden weergegeven."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Jetpack biedt je krachtige tools voor het delen van je content. Bovendien kun je je nieuwste berichten automatisch delen op social media of ervoor kiezen een planning te maken voor het opnieuw delen van je berichten op het moment dat het jou uitkomt. En dat is nog niet het enige: met betalingsknoppen en advertenties kun je de omzet van je bedrijf nog meer laten stijgen."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Ontdek Jetpack Premium nu om alle voordelen van je nieuwe abonnement te bekijken."],"Monetize your site with ads":["Geld verdienen met je site door middel van advertenties"],"Welcome Premium":["Welkom bij Premium"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["Bedankt dat je voor een een Jetpack Persoonlijk abonnement kiest. Met Jetpack kun je nu een back-up van je site maken en deze scannen op beveiligingsbedreigingen."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["Jetpack Persoonlijk geeft je de keuze uit meer dan 100 gratis, professioneel ontworpen WordPress-thema's. Kies het thema dat het beste aansluit bij je site en pas de kleuren en afbeeldingen aan je eigen voorkeuren aan of voeg verschillende nieuwe widgets toe."],"Got it":[""],"Welcome personal":["Welkom bij Persoonlijk"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["Door op onderstaande knop te klikken, ga je akkoord met onze {{tosLink}}servicevoorwaarden{{/tosLink}} en met het {{shareDetailsLink}}delen van informatie{{/shareDetailsLink}} met WordPress.com."],"Jetpack Stats People":["Mensen bekijken Jetpack-statistieken"],"Hello there! Your stats have been activated.":["Hallo! Je statistieken zijn geactiveerd."],"Just give us a little time to collect data so we can display it for you here.":["Geeft ons even de tijd om data te verzamelen. We geven ze vervolgens hier voor je weer."],"Okay, got it!":["OK, ik snap het!"],"Display ads below posts on":["Geef advertenties weer onder berichten op"],"Additional ad placements":["Aanvullende advertentielocaties"],"Top of each page":["Bovenzijde van elke pagina"],"Second ad below post":["Tweede advertentie onder bericht"],"Archives":["Archieven"],"Explore Professional":["Ontdek Professional"],"Compare All Plans":["Alle abonnementen vergelijken"],"Person with laptop":["Persoon met laptop"],"Your Jetpack site is ready to go!":["Je Jetpack-site is klaar voor de start."],"Stars":["Sterren"],"Jupiter":["Jupiter"],"Welcome to Jetpack Personal":["Welkom bij Jetpack Personal"],"Welcome to Jetpack Premium":["Welkom bij Jetpack Premium"],"Welcome to Jetpack Professional":["Welkom bij Jetpack Professional"],"Schedule posts":[""],"Activate Publicize":["Publicize activeren"],"Your site is backed up.":["Er is een back-up gemaakt van je site."],"Image Performance":["Afbeeldingsprestatie"],"Get WordPress Apps for every device":["Download WordPress-apps voor elk apparaat"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Beheer al je sites vanuit één dashboard: publiceer inhoud, volg statistieken, beheer reacties en nog veel meer, waar je ook bent."],"I already use this app.":["Ik gebruik deze app al."],"Create address":["Adres aanmaken"],"Priority support":["Ondersteuning met prioriteit"],"Add sharing buttons to your posts":["Voeg deelknoppen toe aan je berichten"],"Automatically share your posts to social networks":["Deel je berichten automatisch via social media"],"Updating settings…":["Instellingen worden bijgewerkt..."],"Updating Post by Email address…":["Bericht wordt bijgewerkt via e-mailadres..."],"Your paid plan gives you access to prioritized Jetpack support.":["Met je betaalde abonnement ontvang je Jetpack-ondersteuning met prioriteit."],"You have paid for backups but they're not yet active.":["Je hebt betaald voor back-ups, maar deze zijn nog niet actief."],"You have paid for backups and security scanning but they’re not yet active.":["Je hebt betaald voor back-ups en beveiligingsscans, maar deze zijn nog niet actief."],"Click \"Set Up\" to finish installation.":["Klik op 'Instellen' om de installatie af te ronden."],"Checking site status…":["De status van je site wordt gecontroleerd…"],"Pages":["Pagina's"],"We're here to help":["Wij zijn er om te helpen"],"Jetpack comes with free, basic support for all users.":["Jetpack beschikt over gratis basisondersteuning voor alle gebruikers."],"Ask a question":["Stel een vraag"],"Search our support site":["Doorzoek onze ondersteuningssite"],"Get a faster resolution to your support questions.":["Regel een snellere oplossing op je vragen aan de klantenservice."],"Host fast, high-quality, ad-free video.":["Host snelle, hoogwaardige video's zonder advertenties."],"Generate income with high-quality ads.":["Verdien geld aan hoogwaardige advertenties."],"Real-time site backups and automatic threat resolution.":["Back-ups van je site in realtime en automatische oplossing van bedreigingen."],"Protect against data loss, malware, and malicious attacks.":["Bescherming tegen dataverlies, malware en schadelijke aanvallen."],"Integrate easily with Google Analytics.":["Eenvoudig integreren met Google Analytics."],"Help your content get found and shared with SEO tools.":["Zorg dat je inhoud wordt gevonden en gedeeld met SEO-hulpmiddelen."],"Protect your site from spam.":["Bescherm je site tegen spam."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["Deze site is niet gekoppeld aan WordPress.com. Vraag de sitebeheerder om deze te koppelen."],"Spam filtering":["Spamfilters"],"Daily, automated malware scanning":["Dagelijkse, geautomatiseerde malwarescans"],"Daily, automated backups (unlimited storage)":["Dagelijkse, geautomatiseerde back-ups (onbeperkte opslag)"],"Daily, automated malware scanning with automated resolution":["Dagelijks geautomatiseerd scannen op malware met geautomatiseerde oplossing"],"Unlimited, high-speed video hosting":[""],"SEO preview tools":["Hulpmiddelen voor SEO-voorbeelden"],"Site stats, related content, and sharing tools":["Hulpmiddelen voor sitestatistieken, gerelateerde content en delen"],"Brute force attack protection and downtime monitoring":["Bescherming tegen brute force-aanvallen en downtime monitoring"],"Unlimited, high-speed image hosting":["Onbeperkte afbeeldingenhosting op hoge snelheid"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["Door %(siteName)s los te koppelen van WordPress.com, heb je niet langer toegang tot de volgende opties:"],"Read more about Jetpack benefits":["Meer lezen over de voordelen van Jetpack"],"An Automattic Airline":["Een Automattic-luchtvaartmaatschappij"],"Manage site connection":["Siteverbinding beheren"],"Connect your account to WordPress.com to view more stats":["Koppel je account aan WordPress.com om meer statistieken te bekijken"],"Theme enhancements":["Themaverbeteringen"],"Load more posts using the default theme behavior":["Laad meer berichten met het standaardgedrag voor thema's"],"Load more posts in page with a button":["Laad meer berichten op pagina's met een knop"],"Load more posts as the reader scrolls down":["Laad meer berichten zodra de lezer naar beneden scrolt"],"Theme support required.":["Ondersteuning van thema's vereist."],"Learn more about adding support for Infinite Scroll to your theme.":["Meer informatie over support voor oneindig scrollen toevoegen aan je thema."],"Use excerpts instead of full posts on front page and archive pages":["Gebruik samenvattingen op je voorpagina en archiefpagina's in plaats van volledige berichten"],"Show featured images":["Aanbevolen afbeeldingen weergeven"],"Enable the WordPress.com toolbar":["De WordPress.com-werkbalk inschakelen"],"Writing tools available to you will be shown here when an administrator enables them.":["De schrijftools die je kunt gebruiken, worden hier weergegeven wanneer een beheerder ze inschakelt."],"Portfolios":["Portfolio's"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Let op: {{b}}het verifiëren van je site is niet noodzakelijk{{/b}} om je site te laten indexeren door zoekmachines. Plak hieronder de HTML Tag-code om deze geavanceerde zoekmachine-tools te gebruiken en je site te laten verifiëren door een service. Lees de {{support}}volledige instructies{{/support}} als het niet lukt. Ondersteunde verificatieservices: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}} en {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["XML-sitemaps genereren"],"Collecting valuable traffic stats and insights":["Waardevolle verkeersstatistieken en inzichten verzamelen"],"The image helps collect stats, but should work when hidden.":["Met de afbeelding kun je statistieken verzamelen, maar hij werkt nog steeds wanneer hij verborgen is."],"Count logged in page views from":["Aantal ingelogde paginaweergaven van"],"Allow stats reports to be viewed by":["Toestaan dat statistiekrapporten worden weergegeven door"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["Je kunt deze instellingen bijstellen als je geavanceerdere controle wilt. Bekijk meer informatie over wat je kunt doen {{a}}om de SEO van je site te optimaliseren{{/a}}."],"Configure your SEO settings":["Configureer je SEO-instellingen"],"In \"Upgrade\"":["In 'Upgrade'"],"Configure your Google Analytics settings":["Instellingen van je Google Analytics configureren."],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Geef advertenties weer bij het eerste artikel op je homepage of aan het einde van elke pagina en elk bericht. Je kunt ook extra advertenties toevoegen bovenaan je site en aan elk widget-gebied om je inkomsten te verhogen."],"Enable ads and display an ad below each post":["Advertenties inschakelen en een advertentie onder elk bericht weergeven"],"Configure your sharing buttons":["Je deelknoppen configureren"],"Connect your social media accounts":["Koppel je social media-accounts"],"Match accounts using email addresses":["Accounts overeenstemmen met e-mailadressen"],"Require accounts to use WordPress.com Two-Step Authentication":["Vereis van accounts dat ze gebruikmaken van de tweevoudige authenticatie van WordPress.com"],"Add to whitelist":["Toevoegen aan whitelist"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["Door een IP-adres of een reeks IP-adressen op een whitelist te plaatsen, kunnen ze nooit door Jetpack worden geblokkeerd. IPv4 en IPv6 zijn acceptabel. Stel een bereik in door de hoge en lage waarde in te voeren met een streepje ertussen. Voorbeeld: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["Er is een back-up gemaakt van je site en hij is gecontroleerd op bedreigingen."],"Checking your spam protection…":["Je spambescherming wordt gecontroleerd…"],"Fetching key…":["Sleutel wordt opgehaald…"],"Your site needs an Antispam key.":["Je site heeft een Antispam-sleutel nodig."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["Er is een probleem met je Antispam API-sleutel. {{a}}Meer informatie{{/a}}."],"Your site is not protected from spam.":["Je site wordt niet beschermd tegen spam."],"Your Antispam key is valid.":["Je Antispam-sleutel is geldig."],"Your site is protected from spam.":["Je site wordt beschermd tegen spam."],"Checking key…":["Sleutel wordt gecontroleerd…"],"Your API key":["Je API-sleutel"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["Als je nog geen API-sleutel heb, {{a}}haal je API-sleutel dan hier op{{/a}}. Je wordt vervolgens door de stappen geleid om er een te halen."],"No search results found for %(term)s":["Geen resultaten gevonden voor %(term)s"],"Enter a search term to find settings or close search.":["Voer een zoekterm in om instellingen te vinden of sluit de zoekopdracht af."],"Connections":["Verbindingen"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Je site is in ontwikkelingsmodus, waardoor deze niet kan worden gekoppeld aan WordPress.com."],"Your site is connected to WordPress.com.":["Je site is gekoppeld aan WordPress.com."],"You are the Jetpack owner.":["Jij bent de eigenaar van Jetpack."],"Connected as {{span}}%(username)s{{/span}}":["Verbonden als {{span}}%(username)s{{/span}}"],"View your Email Followers":["Bekijk je e-mailvolgers"],"Color scheme":["Kleurenschema"],"Enable Markdown use for comments.":["Het gebruik van Snelle stijl voor reacties inschakelen."],"Updated settings.":["Bijgewerkte instellingen."],"Error updating settings. %(error)s":["Fout tijdens bijwerken instellingen. %(fout)en)"],"Regenerated Post by Email address.":["Opnieuw gegenereerd bericht per e-mailadres"],"Error regenerating Post by Email address. %(error)s":["Fout bij opnieuw genereren bericht per e-mailadres %(error)s"],"Updated settings. Refreshing page…":["Bijgewerkte instellingen. Pagina wordt vernieuwd…"],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["Op dit moment in {{a}}ontwikkel modus{{/a}} (sommige functies zijn uitgeschakeld) omdat: {{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}Het jetpack_development_mode filter is actief{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}De JETPACK_DEV_DEBUG constante is gedefinieerd{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}Je site-URL mist een punt (bijv. http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics is een gratis service die een aanvulling kan zijn op onze {{a}}ingebouwde statistieken{{/a}} met verschillende inzichten in je verkeer. WordPress.com statistieken en Google Analytics gebruiken verschillende methoden om activiteit op je site te identificeren en te volgen, dus ze tonen normaal gesproken kleine verschillen in het totale aantal bezoeken, weergaven etc."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Configureer Google Analytics"],"Activate Google Analytics":["Activeer Google Analytics"],"Download the free apps":["Download de gratis apps"],"Upgrade Focus: VideoPress For Weddings":["Upgradefocus: VideoPress voor bruiloften"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}Je kunt nu ook gerelateerde berichten configureren in het Aanpassingsmenu. {{ExternalLink}}Probeer het uit!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["Advertenties worden standaard weergegeven aan het einde van elke pagina, elk bericht of bij het eerste artikel op je voorpagina. Je kunt ze ook toevoegen bovenaan je site en aan elk widget-gebied om je inkomsten te verhogen!"],"Display an ad unit at the top of your site.":["Geef een advertentie weer aan de bovenkant van je site."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["Door advertenties te activeren, ga je akkoord met de {{link}}Servicevoorwaarden{{/link}} van Automattic Ads."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Je server is niet goed geconfigureerd. Hierdoor kan Jetpack Protect je site niet effectief beschermen."],"In \"Mobile\"":["In 'Mobiel'"],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Configureer je meldingsinstellingen van Monitor op WordPress.com{{/link}}"],"View your earnings":["Bekijk je inkomsten"],"Configure site SEO":[""],"Activate SEO tools":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["Klik op Media toevoegen in je bericht-editor en upload een video; wij doen de rest."],"Video Hosting":["Videohosting"],"SEO Tools":["SEO-hulpmiddelen"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Geavanceerde SEO-hulpmiddelen om je te helpen je site te laten vinden wanneer mensen naar relevante inhoud zoeken."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["De eenvoudigste manier om video's zonder advertenties en merken naar je site te uploaden. Je ontvangt statistieken over hoe vaak je video is afgespeeld en gedeeld. Bovendien is het programma niet veeleisend en zeer responsief."],"You are running Jetpack on a staging server.":["Je voert Jetpack uit op een staging server."],"More Info":["Meer info"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Beheer de zichtbaarheid van Likes via de instellingen van de Sharing-module{{/a}}"],"Your current IP: %(ip)s":["Je huidige IP: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["Er zijn niet-opgeslagen instellingen in dit tabblad die verloren gaan als je dit verlaat. Doorgaan?"],"This will reset all Jetpack options, are you sure?":["Hierdoor worden alle Jetpack-opties hersteld. Zeker weten?"],"Search for a Jetpack feature.":["Zoeken naar Jetpack-functie."],"Configure your Security Scans":["Configureer je beveiligingsscans"],"Subscriber":["Abonnee"],"Big iPhone/iPad Update Now Available":["Grote update voor iPhone/iPad nu beschikbaar"],"The WordPress for Android App Gets a Big Facelift":["De WordPress voor Android-app krijgt een grote update"],"WordPress.com Likes are:":["De Likes van WordPress.com zijn:"],"Comments headline":["Titel Reacties"],"A few catchy words to motivate your readers to comment.":["Een aantal treffende woorden om je lezers te motiveren om te reageren."],"Show a \"follow blog\" option in the comment form":["Toon een optie 'blog volgen' in het reactieformulier"],"Show a \"follow comments\" option in the comment form":["Toon een optie 'reacties volgen' in het reactieformulier"],"Put a chart showing 48 hours of views in the admin bar":["Plaats een grafiek met 48 uur aan weergaven in de Toolbar"],"Hide the stats smiley face image":["Verberg de smiley-afbeelding van statistieken"],"Whitelisted IP addresses":["IP-adressen op whitelist"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Toon een promotie voor de mobiele apps van WordPress in de voettekst van het mobiele thema"],"Copied!":["Gekopieerd"],"Highlight and copy the following text to your clipboard:":["Selecteer en kopieer de volgende tekst naar je klembord:"],"Regenerate address":["Adres opnieuw genereren"],"Automatically proofread content when: ":["Inhoud automatisch proeflezen wanneer: "],"A post or page is first published":["Een bericht of pagina is voor het eerst gepubliceerd"],"A post or page is updated":["Een bericht of pagina is bijgewerkt"],"Automatic Language Detection":["Automatische taaldetectie"],"The proofreader supports English, French, German, Portuguese and Spanish.":["De proeflezer ondersteunt Engels, Frans, Duits, Portugees en Spaans."],"Enable proofreading for the following grammar and style rules: ":["Schakel proeflezen in voor de volgende grammatica- en stijlregels: "],"Add a phrase":["Een zin toevoegen"],"Cheatin' uh?":["Wil je valsspelen?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}Kun je ons via dit {{a}}onderzoek met 2 vragen{{/a}} vertellen waarom je de Jetpack-verbinding niet hebt voltooid?{{/p}}{{p}}Er is een Jetpack-verbinding vereist om onze beveiligings- en bezoekersfuncties te laten werken.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Welkom bij {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["Je hebt Jetpack al gekoppeld."],"You're fueled up and ready to go, Jetpack is now active.":["Klaar voor lancering: Jetpack is nu actief."],"You're fueled up and ready to go.":["Klaar voor lancering."],"You are currently running a development version of Jetpack.":["Je voert op dit moment een ontwikkelingsversie van Jetpack uit."],"Submit Beta feedback":["Verzend beta-feedback"],"What would you like to see on your Jetpack Dashboard?":["Wat zou je nog willen zien op je dashboard van Jetpack?"],"Let us know!":["Laat het ons weten!"],"Saving…":["Opslaan…"],"Save Settings":["Instellingen opslaan"],"Jetpack Stats Icon":["Pictogram Jetpack-statistieken"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Activeer sitestatistieken{{/a}} om gedetailleerde statistieken, likes, volgers, abonnees en nog veel meer te bekijken! {{a1}}Meer informatie{{/a1}}"],"Activate Site Stats":["Activeer sitestatistieken"],"Security Scanning":["Beveiligingsscans"],"Site Backups":["Back-ups van site"],"Upgrade":["Upgraden"],"ACTIVE":["ACTIEF"],"Your site is on Development Mode":["Je site staat in de ontwikkelingsmodus"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Zodra je bent verbonden, kun je upgraden naar een betaald abonnement om beveiliging van wereldklasse, spambeschermingstools en ondersteuning met prioriteit te ontgrendelen."],"View your spam stats":["Bekijk je spamstatistieken"],"View your security dashboard":["Bekijk je beveiligingsdashboard"],"The site is in Development Mode, so you can not connect to WordPress.com.":["De site is in ontwikkelingsmodus, dus je kunt geen verbinding maken met WordPress.com."],"Link your account to WordPress.com to get the most out of Jetpack.":["Koppel je account aan WordPress.com om het meeste uit Jetpack te halen."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["{{a}}Installeer en activeer {{/a}} VaultPress voor geautomatiseerde, uitgebreide beveiligingsscans tegen bedreigingen."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["{{a}}Upgrade je account{{/a}} voor geautomatiseerde, uitgebreide beveiligingsscans tegen bedreigingen."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack blokkeert schadelijke inlogpogingen nu automatisch. Binnenkort worden hier gegevens weergegeven!"],"Total malicious attacks blocked on your site.":["Totaal aantal schadelijke aanvallen geblokkeerd op je site."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Activeer Protect{{/a}} om je site te beschermen tegen schadelijke inlogpogingen."],"All plugins are up-to-date. Awesome work!":["Alle plugins zijn bijgewerkt. Geweldig."],"Jetpack is improving and optimizing your image speed.":["Jetpack verbetert en optimaliseert de snelheid van je afbeeldingen."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack controleert je site. Als we vermoeden dat je site offline is, ontvang je een e-mail."],"Security":["Beveiliging"],"Performance":["Prestaties"],"Backups":["Back-ups"],"{{a}}View backup details{{/a}}.":["{{a}}Informatie over back-ups weergeven{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["{{a}}Installeer en activeer {{/a}} VaultPress om automatisch back-ups te maken van je hele site."],"Unavailable in Dev Mode.":["Niet beschikbaar in ontwikkelingsmodus."],"Spam Protection":["Spambescherming"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["{{a}}Installeer Akismet{{/a}} voor geavanceerde spam-bescherming."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["{{a}}Activeer Akismet{{/a}} voor geavanceerde spam-bescherming."],"Invalid key":["Ongeldige sleutel"],"Unavailable in Dev Mode":["Niet beschikbaar in ontwikkelingsmodus"],"Activating recommended features…":["Aanbevolen functies worden geactiveerd…"],"Recommended features active.":["Aanbevolen functies actief."],"Recommended features failed to activate. %(error)s":["Aanbevolen functies konden niet worden geactiveerd. %(error)s"],"Activating %(slug)s…":["%(slug)s wordt geactiveerd…"],"%(slug)s has been activated.":["%(slug)s is geactiveerd."],"%(slug)s failed to activate. %(error)s":["%(slug)s kon niet worden geactiveerd. %(error)s"],"Deactivating %(slug)s…":["%(slug)s wordt gedeactiveerd…"],"%(slug)s has been deactivated.":["%(slug)s is gedeactiveerd."],"%(slug)s failed to deactivate. %(error)s":["%(slug)s kon niet worden gedeactiveerd. %(error)s"],"Updating %(slug)s settings…":["Instellingen van %(slug)s worden bijgewerkt…"],"Updated %(slug)s settings.":["Instellingen van %(slug)s bijgewerkt…"],"Error updating %(slug)s settings. %(error)s":["Fout bij het bijwerken van de instellingen voor %(slug)s. %(error)s"],"Updating %(slug)s address…":["Adres van %(slug)s wordt bijgewerkt…"],"Regenerated %(slug)s address .":["Adres van %(slug)s opnieuw gegenereerd."],"Error regenerating %(slug)s address. %(error)s":["Fout bij het opnieuw genereren van %(slug)s-adres. %(error)s"],"Resetting Jetpack options…":["Jetpack-opties worden hersteld..."],"Options reset.":["Opties hersteld."],"Options failed to reset.":["Opties konden niet worden hersteld."],"There was an error disconnecting Jetpack. Error: %(error)s":["Er is een fout opgetreden bij het verbreken van de verbinding met Jetpack-servers. Fout: %(error)s"],"Unlinking from WordPress.com":["Ontkoppelen van WordPress.com."],"Unlinked from WordPress.com.":["Ontkoppeld van WordPress.com."],"Error unlinking from WordPress.com. %(error)s":["Fout bij het ontkoppelen van WordPress.com. %(error)s"],"At A Glance":["In één oogopslag"],"Clichés":["Clichés"],"Dashboard":["Dashboard"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Kan je uitleggen waarom? Door {{a}}twee eenvoudige vragen te beantwoorden{{/a}} draag je bij aan de verbetering van Jetpack."],"Automattic's Privacy Policy":["Privacybeleid van Automattic"],"WordPress.com Terms of Service":["Algemene voorwaarden van WordPress.com"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}Activeren{{/a}} om de prestaties en snelheid van je afbeeldingen te verbeteren."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Schakel automatische updates voor plugins in{{/a}}"],"Plugin Updates":["Plugin-updates"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["{{a}}Upgrade je account{{/a}} om automatisch backups te maken van je hele site."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["Oeps! Je Akismet-sleutel ontbreekt of is ongeldig. {{akismetSettings}}Ga naar de Akismet-instellingen om dit op te lossen{{/akismetSettings}}."],"No threats found, you're good to go!":["Geen bedreigingen gevonden, alles gaat naar wens!"],"{{a}}Contact Support{{/a}}":["{{a}}Neem contact op met ondersteuning{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}Bekijk details op VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["Oh oh, %(number)s bedreiging aangetroffen.","Oh oh, %(number)s bedreigingen aangetroffen."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}Activeer monitor{{/a}} om meldingen via e-mail te ontvangen als je site offline is."],"Loading…":["Laden..."],"Downtime monitoring":["Downtime-bewaking"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}Meer statistieken weergeven op WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}Gedetailleerde statistieken weergeven{{/button}}"],"All-time comments":["Totaal aantal reacties"],"All-time views":["Totaal aantal weergaven"],"%(number)s View":["%(number)s weergave","%(number)s weergaven"],"Best overall day":["Beste dag in totaal"],"Views today":["Aantal weergaven vandaag"],"Months":["Maanden"],"Weeks":["Weken"],"Days":["Dagen"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["Er is een fout opgetreden tijdens het laden van de statistieken. Probeer het later opnieuw of {{a}}bekijk je statistieken nu op WordPress.com{{/a}}"],"Click to view detailed stats.":["Klik om gedetailleerde statistieken weer te geven."],"Views: %(numberOfViews)s":["Weergaven: %(numberOfViews)s"],"Week of %(date)s":["Week van %(date)s"],"Site Security":["Sitebeveiliging"],"Activate recommended features":["Activeer aanbevolen functies"],"Link to WordPress.com":["Koppelen aan WordPress.com"],"Unlink me from WordPress.com":["Ontkoppel mij van WordPress.com."],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["Er ging iets mis bij het maken van een verbinding voor Jetpack. Klik nogmaals op &#8220;Verbinden met WordPress.com&#8221;."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["We hebben een probleem ervaren bij het verbinden van Jetpack. Deactiveer dan de Jetpack plugin, heractiveer deze daarna en maak daarna opnieuw een verbinding. "],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Je moet ingelogd blijven in je WordPress blog terwijl je Jetpack autoriseert."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Er ging iets fout in Jetpack.{{/s}} Sorry voor het ongemak. Probeer het later opnieuw. Als het probleem aanhoudt, kun je contact opnemen met support met vermelding van dit bericht: %(error_key)s"],"Disconnecting Jetpack":["Jetpack wordt losgekoppeld"],"Learn more":["Meer weten"],"Posts":["Berichten"],"Front page":["Startpagina"],"Upload videos":[""],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Toon gerelateerde content na berichten"],"Related":["Gerelateerd"],"Save":["Opslaan"],"Email Address":["E-mailadres"],"Media":["Media"],"Themes":["Thema&#39;s"],"Site Stats":["Site Stats"],"Sharing":["Delen"],"Testimonials":["Aanbevelingen"],"Cancel":["Annuleren"],"Comments":["Reacties"],"Ignored Phrases":["Genegeerde zinnen"],"Use automatically detected language to proofread posts and pages":["Gebruik de automatisch gedetecteerde taal om berichten en pagina's te proeflezen."],"Redundant Phrases":["Overbodige zinnen"],"Phrases to Avoid":["Te vermijden zinnen"],"Passive Voice":["Passieve stem"],"Jargon":["Jargon"],"Hidden Verbs":["Verborgen werkwoorden"],"Double Negatives":["Dubbele ontkenningen"],"Diacritical Marks":["Diacritische tekens"],"Complex Phrases":["Complexe zinnen"],"Bias Language":["Voorkeurstaal"],"English Options":["Engelse opties"],"Proofreading":["Proeflezen"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack kon geen verbinding maken met WordPress.com: %(error_key)s. Dit betekent meestal dat er iets niet goed geconfigureerd is bij je webhost."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com ondervindt momenteel problemen en kan Jetpack niet opstarten. Probeer het later nogmaals."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Jetpack heeft een probleem.{{/s}} Verbinden van deze website met WordPress.com is niet mogelijk. Dit betekent gewoonlijk dat de site niet publiekelijk toegankelijk is (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["De website moet toegankelijk zijn voor publiek om gebruik te kunnen maken van Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["Het loskoppelen van Jetpack is gelukt."],"Edit":["Bewerken"],"Connected":["Verbonden"],"Activate":["Activeren"],"Active":["Actief"],"Search":["Zoeken"],"Settings":["Instellingen"],"Learn More":["Kom meer te weten"],"Disconnect Jetpack":["Jetpack loskoppelen"],"Test your site’s compatibility with Jetpack.":["Test de compatibiliteit van de site met Jetpack."],"Settings header\u0004Plugin Autoupdates":["Automatische plugin-updates"],"Settings header\u0004Downtime monitoring":["Downtime-bewaking"],"Settings header\u0004Privacy Settings":["Privacyinstellingen"],"Settings header\u0004WordPress.com toolbar":["WordPress.com-werkbalk"],"Settings header\u0004Composing":["Opstellen"],"Settings header\u0004Site stats":["Sitestatistieken"],"Settings header\u0004Search engine optimization":["Zoekmachineoptimalisatie"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Deelknoppen"],"Settings header\u0004Publicize connections":["Publicize-koppelingen"],"Settings header\u0004Like buttons":["Like-knoppen"],"Settings header\u0004WordPress.com log in":["Inloggen via WordPress.com"],"Settings header\u0004Brute force attack protection":["Bescherming tegen brute force-aanvallen"],"Settings header\u0004Backups and security scanning":["Back-ups en beveiligingsscans"],"Settings header\u0004Spam filtering":["Spamfilters"],"Navigation item.\u0004Performance":["Prestatie"],"Navigation item.\u0004My Plan":["Mijn abonnement"],"Navigation item.\u0004Dev Tools":["Ontwikkelaarstools"],"Navigation item.\u0004Settings":["Instellingen"],"Navigation item.\u0004Discussion":["Reacties"],"Navigation item.\u0004Traffic":["Verkeer"],"Navigation item.\u0004Sharing":["Delen"],"Navigation item.\u0004At A Glance":["In één oogopslag"],"Navigation item.\u0004Plans":["Abonnementen"],"Navigation item.\u0004Writing":["Schrijven"],"Navigation item.\u0004Reset Options (dev only)":["Opties opnieuw instellen (alleen ontwikkelingsversies)"],"Navigation item.\u0004Security":["Beveiliging"],"Navigation item.\u0004At a Glance":["In één oogopslag"],"Search term.\u0004terms of service":["servicevoorwaarden"],"Search term.\u0004tos":["voorwaarden service"],"Search term.\u0004gdpr":["avg"],"Search term.\u0004data":["gegevens"],"Search term.\u0004tracks":["bijhouden"],"Search term.\u0004privacy":["privacy"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["Upgraden"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Upgraden"],"Button caption\u0004Saving…":["Opslaan…"],"Button caption\u0004Save settings":["Instellingen opslaan"],"A heading for a block of related posts.\u0004Related":["Gerelateerd"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Voorbeeld bekijken"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Verbonden blijven"],"A caption for a button to disconnect.\u0004Disconnect":["Verbinding verbreken"],"Short warning message\u0004Updates needed":["Updates vereist"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Betaald"],"A header for a preview area in the configuration screen.\u0004Preview":["Voorbeeld bekijken"],"Ads header\u0004Ads":["Advertenties"],"Dashboard widget header\u0004Site connection":["Verbinding site"],"Dashboard widget header\u0004Account connection":["Verbinding account"],"A caption for a small button to fix security issues.\u0004Threats":["Bedreigingen"],"A caption for a small button to fix security issues.\u0004FIX":["Oplossen"],"Short warning message about new threats found.\u0004Threats found!":["Bedreigingen gevonden."],"Short warning message about site having no security scan.\u0004No scanning":["Geen scans"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Upgraden"],"Short message informing user that the site is secure.\u0004Secure":["Veilig"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Ongeldige sleutel"],"Caption for a button to set up a feature.\u0004Set up":["Instellen"],"verb\u0004Copy":["Kopiëren"],"Shorthand for Privacy Policy.\u0004Privacy":["Privacy"],"Shorthand for Terms of Service.\u0004Terms":["Voorwaarden"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Foutopsporing"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["Spamreacties geblokkeerd."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-nl_NL_formal-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-nl_NL_formal-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 6139f348..00000000
--- a/plugins/jetpack/languages/json/jetpack-nl_NL_formal-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"":{"po-revision-date":"2016-03-22 15:35:08+0000","mime-version":"1.0","content-type":"text/plain; charset=UTF-8","content-transfer-encoding":"8bit","plural-forms":"nplurals=2; plural=n != 1;","x-generator":"GlotPress/2.4.0-alpha","language":"nl","project-id-version":"Plugins - Jetpack by WordPress.com - Development (trunk)"},"We're here to help":[null,""],"Jetpack comes with free, basic support for all users.":[null,""],"Ask a question":[null,""],"Search our support site":[null,""],"Get a faster resolution to your support questions.":[null,""],"Host fast, high-quality, ad-free video.":[null,""],"Generate income with high-quality ads.":[null,""],"Real-time site backups and automatic threat resolution.":[null,""],"Protect against data loss, malware, and malicious attacks.":[null,""],"Integrate easily with Google Analytics.":[null,""],"Help your content get found and shared with SEO tools.":[null,""],"Protect your site from spam.":[null,""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[null,""],"Spam filtering":[null,""],"Daily, automated malware scanning":[null,""],"13Gb of high-speed video hosting":[null,""],"Daily, automated backups (unlimited storage)":[null,""],"Daily, automated malware scanning with automated resolution":[null,""],"Priority WordPress and security support":[null,""],"Unlimited high-speed video hosting":[null,""],"SEO preview tools":[null,""],"Site stats, related content, and sharing tools":[null,""],"Brute force attack protection and uptime monitoring":[null,""],"Unlimited, high-speed image hosting":[null,""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[null,""],"Read more about Jetpack benefits":[null,""],"An Automattic Airline":[null,""],"Manage site connection":[null,""],"Connect your account to WordPress.com to view more stats":[null,""],"Theme enhancements":[null,""],"Load more posts using the default theme behavior":[null,""],"Load more posts in page with a button":[null,""],"Load more posts as the reader scrolls down":[null,""],"Theme support required.":[null,""],"Learn more about adding support for Infinite Scroll to your theme.":[null,""],"Use excerpts instead of full posts on front page and archive pages":[null,""],"Show featured images":[null,""],"Must be enabled to use tiled galleries.":[null,""],"Enable the WordPress.com toolbar":[null,""],"The WordPress.com toolbar replaces the default admin bar and offers quick links to the Reader, all your sites, your WordPress.com profile, and notifications. Centralize your WordPress experience with a single global toolbar.":[null,""],"Writing tools available to you will be shown here when an administrator enables them.":[null,""],"Portfolios":[null,""],"Add, organize, and display {{portfolioLink}}portfolios{{/portfolioLink}}. If your theme doesn’t support portfolios yet, you can display them using the shortcode ( [portfolios] )":[null,""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[null,""],"Bing":[null,""],"Yandex":[null,""],"Generate XML sitemaps":[null,""],"Your sitemap is automatically sent to all major search engines for indexing.":[null,""],"Your site is not currently accessible to search engines. You might have \"Search Engine Visibility\" disabled in your {{a}}Reading Settings{{/a}}.":[null,""],"Collecting valuable traffic stats and insights":[null,""],"The image helps collect stats, but should work when hidden.":[null,""],"Count logged in page views from":[null,""],"Allow stats reports to be viewed by":[null,""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[null,""],"Configure your SEO settings":[null,""],"In \"Upgrade\"":[null,""],"Configure your Google Analytics settings":[null,""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[null,""],"Enable ads and display an ad below each post":[null,""],"Display an additional ad at the top of each page":[null,""],"Configure your sharing buttons":[null,""],"Sharing buttons can be added to your posts so that your users can share your content to their social networks and show their support.":[null,""],"Connect your social media accounts":[null,""],"Connect your user account to WordPress.com to use this feature":[null,""],"Publicize lets you connect your site to various social networking services. Once connected to a service, you can share your posts with that service automatically.":[null,""],"Allow readers to show their appreciation of your posts by adding a like button to your content":[null,""],"Match accounts using email addresses":[null,""],"Require accounts to use WordPress.com Two-Step Authentication":[null,""],"Add to whitelist":[null,""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[null,""],"Your site is backed up and threat-free.":[null,""],"Checking your spam protection…":[null,""],"Fetching key…":[null,""],"Your site needs an Antispam key.":[null,""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[null,""],"Your site is not protected from spam.":[null,""],"Your Antispam key is valid.":[null,""],"Your site is protected from spam.":[null,""],"Checking key…":[null,""],"Your API key":[null,""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[null,""],"No search results found for %(term)s":[null,""],"Enter a search term to find settings or close search.":[null,""],"Connections":[null,""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[null,""],"Your site is connected to WordPress.com.":[null,""],"You are the Jetpack owner.":[null,""],"Connected as {{span}}%(username)s{{/span}}":[null,""],"View your Email Followers":[null,""],"Connect your user account to WordPress.com to view your email followers":[null,""],"Color scheme":[null,""],"Enable Markdown use for comments.":[null,""],"router There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[null,""],"Updated settings.":[null,""],"Error updating settings. %(error)s":[null,""],"Regenerated Post by Email address.":[null,""],"Error regenerating Post by Email address. %(error)s":[null,""],"Updated settings. Refreshing page…":[null,""],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because:":[null,""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[null,""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[null,""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[null,""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[null,""],"Configure Google Analytics settings.":[null,""],"Image of WordPress login screen protected by Jetpack":[null,""],"Google Analytics":[null,""],"Track website statistics with Google Analytics for a deeper understanding of your website visitors and customers.":[null,""],"Configure Google Analytics":[null,""],"Activate Google Analytics":[null,""],"Download the Free Apps":[null,""],"Upgrade Focus: VideoPress For Weddings":[null,""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[null,""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[null,""],"Display an ad unit at the top of your site.":[null,""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[null,""],"Image of managing your sites themes on your WordPress.com dashboard":[null,""],"Image of managing your sites plugins on your WordPress.com dashboard":[null,""],"Image of the new post editor on your WordPress.com dashboard":[null,""],"Image of your sites stats on your WordPress.com dashboard":[null,""],"Image of your WordPress.com reader":[null,""],"Example of three devices to use the WordPress apps. An iPhone, Android phone, and a apple laptop computer.":[null,""],"Download the free WordPress app for your iPhone":[null,""],"Download the free WordPress app for your Android based phone":[null,""],"Download the free WordPress app for your apple computer":[null,""],"Download the free WordPress app for your PC ":[null,""],"Download the free WordPress app for your Linux machine":[null,""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[null,""],"Upgrade to a paid plan to unlock world-class security, spam protection tools, priority support, SEO and monetization tools.":[null,""],"Ads":[null,""],"Earn income by allowing Jetpack to display high quality ads (powered by WordAds).":[null,""],"Activate Ads":[null,""],"Income generation from ads":[null,""],"Premium traffic and monetization tools":[null,""],"The Jetpack Premium plan now offers you the ability to generate income from your site by showing high-quality paid ads to your visitors. Professional plan customers also benefit from SEO tools to help optimize search engine traffic.":[null,""],"We support all Jetpack users, regardless of plan. But customers on a paid subscription enjoy priority support so that security issues are identified and fixed for you as soon as possible. ":[null,""],"In \"Mobile\"":[null,""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[null,""],"View your earnings":[null,""],"Activate VideoPress":[null,""],"Upload Videos Now":[null,""],"Make sure your site is easily found on search engines with SEO tools for your content and social posts.":[null,""],"Activate this module to use the advanced SEO tools.":[null,""],"How much is your website worth?":[null,""],"For less than the price of a coffee a month you can rest easy knowing your hard work (or livelihood) is backed up.":[null,""],"Configure Site SEO":[null,""],"Activate SEO Tools":[null,""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[null,""],"Introducing our most affordable backups and security plan yet":[null,""],"The Personal Plan keeps your data, site, and hard work safe.":[null,""],"Your site is on the Jetpack Personal plan":[null,""],"With this plan you are provided with spam-protection, daily backups (up to 30 days), and unlimited storage.":[null,""],"With this plan you are provided with spam-protection, daily backups (up to 30 days), unlimited backup storage, security scanning, 13Gb of ad-free video hosting, income generation from ads, and priority support.":[null,""],"You get spam-protection, real-time backups (unlimited archive), unlimited backup storage, security scanning, unlimited ad-free video hosting, income generation from ads, SEO tools, and priority support.":[null,""],"Daily backup of all your site data with unlimited space and one-click restores (powered by VaultPress).":[null,""],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support (powered by VaultPress).":[null,""],"Backups & Security Scanning":[null,""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, one-click threat resolution, and priority support (powered by VaultPress).":[null,""],"13Gb of fast, optimized, and ad-free video hosting for your site (powered by VideoPress).":[null,""],"Video Hosting":[null,""],"Fast, optimized, ad-free, and unlimited video hosting for your site (powered by VideoPress).":[null,""],"SEO Tools":[null,""],"Advanced SEO tools to help your site get found when people search for relevant content.":[null,""],"Daily and on-demand security scanning":[null,""],"Real-time backups and one-click threat resolution":[null,""],"Unlimited and ad-free video hosting":[null,""],"Need more? Running a business site?":[null,""],"If your site is important to you, consider protecting and improving it with some of our advanced features: ":[null,""],"On-demand security scanning":[null,""],"Advanced SEO tools":[null,""],"Configure your SEO settings.":[null,""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[null,""],"You are running Jetpack on a staging server.":[null,""],"More Info":[null,""],"Search your content.":[null,""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[null,""],"Your current IP: %(ip)s":[null,""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[null,""],"This will reset all Jetpack options, are you sure?":[null,""],"Search for a Jetpack feature.":[null,""],"Upgrade Jetpack and our state-of-the-art security scanner will hunt out malicious files and report them immediately so that you're never unaware of what is happening on your website.":[null,""],"You can see the information about security scanning in the \"At a Glance\" section.":[null,""],"Configure your Security Scans":[null,""],"This module has no configuration options":[null,""],"Let search engines and visitors know that you are serious about your websites integrity by upgrading Jetpack. Our anti-spam tools will eliminate comment spam, protect your SEO, and make it easier for visitors to stay in touch.":[null,""],"Real-time offsite backups with automated restores deliver peace-of-mind, so you can focus on writing great content and increasing traffic while we protect every aspect of your investment. Upgrade today.":[null,""],"{{link}}Configure your %(module_slug)s Settings {{/link}}":[null,""],"Subscriber":[null,""],"Big iPhone/iPad Update Now Available":[null,""],"The WordPress for Android App Gets a Big Facelift":[null,""],"WordPress.com Likes are:":[null,""],"Comments headline":[null,""],"A few catchy words to motivate your readers to comment.":[null,""],"Show a \"follow blog\" option in the comment form":[null,""],"Show a \"follow comments\" option in the comment form":[null,""],"Put a chart showing 48 hours of views in the admin bar":[null,""],"Hide the stats smiley face image":[null,""],"Whitelisted IP addresses":[null,""],"Show photo metadata (Exif) in carousel, when available":[null,""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[null,""],"Copied!":[null,""],"Highlight and copy the following text to your clipboard:":[null,""],"Regenerate address":[null,""],"Automatically proofread content when: ":[null,""],"A post or page is first published":[null,""],"A post or page is updated":[null,""],"Automatic Language Detection":[null,""],"The proofreader supports English, French, German, Portuguese and Spanish.":[null,""],"Enable proofreading for the following grammar and style rules: ":[null,""],"Add a phrase":[null,""],"Cheatin' uh?":[null,""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[null,""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[null,""],"Your Jetpack is already connected.":[null,""],"You're fueled up and ready to go, Jetpack is now active.":[null,""],"You're fueled up and ready to go.":[null,""],"You are currently running a development version of Jetpack.":[null,""],"Submit Beta feedback":[null,""],"You, %(userName)s, are not connected to WordPress.com.":[null,""],"What would you like to see on your Jetpack Dashboard?":[null,""],"Let us know!":[null,""],"Welcome to Jetpack":[null,""],"Please connect to or create a WordPress.com account to start using Jetpack. This will enable powerful security, traffic, and customization services.":[null,""],"No account? Create one for free…":[null,""],"Saving…":[null,""],"Save Settings":[null,""],"Jetpack Stats Icon":[null,""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[null,""],"Activate Site Stats":[null,""],"Security Scanning":[null,""],"Upgrade":[null,""],"ACTIVE":[null,""],"Hackers, botnets and spammers attack websites indiscriminately. Their goal is to attack everywhere and often. Our goal is to help you prepare by blocking these threats, and in worst-case-scenarios we'll be here to help you restore your site to its former glory.":[null,""],"Your site is on the Free Jetpack Plan":[null,""],"Your site is on the Jetpack Premium plan":[null,""],"Your site is on the Jetpack Professional plan":[null,""],"Your site is on Development Mode":[null,""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[null,""],"State-of-the-art spam defense powered by Akismet.":[null,""],"View your spam stats":[null,""],"Configure Akismet":[null,""],"View your security dashboard":[null,""],"Configure VaultPress":[null,""],"Real-time backups":[null,""],"One-click threat resolution":[null,""],"Compare Plans":[null,""],"Maximum grade security":[null,""],"Real-time backup with unlimited space, one-click restores, bulletproof spam monitoring, malware defense, and brute-force login protection - all in one place and optimized for WordPress.":[null,""],"Bulletproof spam filtering protects your brand, your readers, and improves SEO. Malware scanning helps maintain peace of mind and keeps your backend safe from intruders.":[null,""],"Enjoy priority support":[null,""],"The site is in Development Mode, so you can not connect to WordPress.com.":[null,""],"Link your account to WordPress.com to get the most out of Jetpack.":[null,""],"Powerful WordPress.com features on every device.":[null,""],"Manage all your sites from a single dashboard.":[null,""],"Feel the performance":[null,""],"All the WordPress apps are built for speed. You'll notice the difference in performance immediately, with near-instant page-loads and less waiting around.":[null,""],"Bulk and automatic updates":[null,""],"Most security flaws are found in outdated plugins. Use our Web and Desktop apps to turn on auto-updates or update plugins manually for all your websites in one convenient place.":[null,""],"Focus on your Writing":[null,""],"Our new editor is lightning fast, optimized for writers and eliminates distractions, giving you the ability to focus on your work.":[null,""],"Try the New Editor":[null,""],"Connect with your Visitors":[null,""],"Monitor your visitors with advanced stats. Watch for trends, learn what content performs the best and understand your visitors from anywhere in the world.":[null,""],"View Your Stats":[null,""],"Connect with the Community":[null,""],"The WordPress apps all have impressively fast and full featured readers so you can catch up with your favorite sites and join the conversation anywhere, any time.":[null,""],"Launch Reader":[null,""],"Inspiration strikes any time, anywhere.":[null,""],"Get WordPress apps for any screen.":[null,""],"In Your Pocket":[null,""],"Publish content, track stats, moderate comments and so much more from anywhere in the world. Our mobile apps are open source, free and available to you on Apple or Android devices.":[null,""],"WordPress.com in the App Store":[null,""],"WordPress.com in Google Play":[null,""],"On Your Desktop":[null,""],"A desktop app that gives WordPress a permanent home on your computer. Not to mention the distraction free environment you get writing outside of a web browser.":[null,""],"WordPress.com for Mac OS X":[null,""],"WordPress.com for Windows":[null,""],"WordPress.com for Linux":[null,""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[null,""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[null,""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[null,""],"Total malicious attacks blocked on your site.":[null,""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[null,""],"All plugins are up-to-date. Awesome work!":[null,""],"{{a}}Activate Manage{{/a}} to turn on auto updates and manage your plugins from WordPress.com.":[null,""],"Jetpack is improving and optimizing your image speed.":[null,""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[null,""],"Security":[null,""],"Performance":[null,""],"Backups":[null,""],"{{a}}View backup details{{/a}}.":[null,""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[null,""],"Unavailable in Dev Mode.":[null,""],"Spam Protection":[null,""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[null,""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[null,""],"Invalid key":[null,""],"Unavailable in Dev Mode":[null,""],"Activating recommended features…":[null,""],"Recommended features active.":[null,""],"Recommended features failed to activate. %(error)s":[null,""],"%(slug)s has been activated.":[null,""],"%(slug)s failed to activate. %(error)s":[null,""],"%(slug)s has been deactivated.":[null,""],"%(slug)s failed to deactivate. %(error)s":[null,""],"Updating %(slug)s settings…":[null,""],"Updated %(slug)s settings.":[null,""],"Error updating %(slug)s settings. %(error)s":[null,""],"Updating %(slug)s address…":[null,""],"Regenerated %(slug)s address .":[null,""],"Error regenerating %(slug)s address. %(error)s":[null,""],"Resetting Jetpack options…":[null,""],"Options reset.":[null,""],"Options failed to reset.":[null,""],"There was an error disconnecting Jetpack. Error: %(error)s":[null,""],"Unlinking from WordPress.com":[null,""],"Unlinked from WordPress.com.":[null,""],"Error unlinking from WordPress.com. %(error)s":[null,""],"At A Glance":[null,""],"Clichés":[null,""],"Dashboard":[null,""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[null,""],"Automattic's Privacy Policy":[null,""],"WordPress.com Terms of Service":[null,""],"{{a}}Activate Site Verification{{/a}} to verify your site and increase ranking with Google, Bing, and Pinterest.":[null,""],"Site Verification Tools are active. Ensure your site is verified with Google, Bing, and Pinterest for more accurate indexing and ranking. {{a}}Verify now{{/a}}":[null,""],"Site Verification Tools":[null,""],"{{a}}Activate Photon{{/a}} to enhance the performance and speed of your images.":[null,""],"Image Performance %(photon)s":[null,""],"{{a}}Activate Manage and turn on auto updates{{/a}}":[null,""],"{{a}}Turn on plugin auto updates{{/a}}":[null,""],"Plugin Updates":[null,""],"To automatically back up your entire site, please {{a}}upgrade your account.{{/a}}.":[null,""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[null,""],"No threats found, you're good to go!":[null,""],"{{a}}Contact Support{{/a}}":[null,""],"{{a}}View details at VaultPress.com{{/a}}":[null,""],"{{a}}Activate Monitor{{/a}} to receive notifications if your site goes down.":[null,""],"Loading…":[null,""],"Downtime Monitoring":[null,""],"{{button}}View more stats on WordPress.com {{/button}}":[null,""],"{{button}}View detailed stats{{/button}}":[null,""],"All-time comments":[null,""],"All-time views":[null,""],"Best overall day":[null,""],"Views today":[null,""],"Months":[null,""],"Weeks":[null,""],"Days":[null,""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[null,""],"Click to view detailed stats.":[null,""],"Views: %(numberOfViews)s":[null,""],"Week of %(date)s":[null,""],"Manage security on WordPress.com":[null,""],"Skip this step":[null,""],"Skip the Jetpack Jumpstart process":[null,""],"Features can be activated or deactivated at any time.":[null,""],"Jetpack's recommended features include:":[null,""],"Activate Recommended Features":[null,""],"Quickly enhance your site by activating Jetpack's recommended features.":[null,""],"Jump Start your Site":[null,""],"Link to WordPress.com":[null,""],"Unlink me from WordPress.com":[null,""],"Join the millions of users who rely on Jetpack to enhance and secure their sites. We're passionate about WordPress and here to make your life easier.":[null,""],"Jetpack is supported by some of the most technical and passionate people in the community. They're located around the globe and ready to help you.":[null,""],"Did we mention free, professional support?":[null,""],"Jetpack utilizes the state-of-the-art WordPress.com content delivery network to load your gorgeous imagery super fast. Optimized for any device, and its completely free.":[null,""],"Lightning fast, optimized images":[null,""],"Never fall behind on a security release or waste time updating multiple sites.":[null,""],"Automatic site updates.":[null,""],"Live site monitoring.":[null,""],"Gain peace of mind with Protect, the tool that has blocked billions of login attacks across millions of sites.":[null,""],"Block site attacks.":[null,""],"Jetpack blocks malicious log in attempts, lets you know if your site goes down, and can automatically update your plugins, so you don’t have to worry.":[null,""],"Site security and peace of mind":[null,""],"Jetpack harnesses the power of WordPress.com to show you detailed insights about your visitors, what they’re reading, and where they’re coming from.":[null,""],"Keep visitors engaged by giving them more to share and read with Related Posts.":[null,""],"Increase page views.":[null,""],"Give visitors the tools to share and subscribe to your content.":[null,""],"Build a community.":[null,""],"Sharing & Like Buttons":[null,""],"Automated social marketing.":[null,""],"Jetpack has many traffic and engagement tools to help you get more viewers to your site and keep them there.":[null,""],"Manage Plugins":[null,""],"Stress less. Monitor will send you real-time alerts if your site ever goes down.":[null,""],"Track your growth":[null,""],"Use Publicize to automatically share your posts with friends, followers, and the world.":[null,""],"Drive more traffic to your site":[null,""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[null,""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[null,""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[null,""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[null,""],"Disconnecting Jetpack":[null,"Jetpack wordt losgekoppeld"],"Learn more":[null,"Meer weten"],"Pinterest":[null,"Pinterest"],"Google":[null,"Google"],"Show related content after posts":[null,"Toon gerelateerde content na berichten"],"Use a large and visually striking layout":[null,"Gebruik een grote en visueel opvallende layout"],"Show a \"Related\" header to more clearly separate the related section from posts":[null,"Toon een 'Gerelateerde' header om duidelijker de gerelateerde sectie te scheiden van berichten"],"Related":[null,"Gerelateerd"],"Email Address":[null,"E-mailadres"],"Media":[null,"Media"],"Site Stats":[null,"Site Stats"],"Testimonials":[null,"Beoordelingen"],"Comments":[null,"Reacties"],"Ignored Phrases":[null,"Genegeerde zinnen"],"Use automatically detected language to proofread posts and pages":[null,"Gebruik de automatisch gedetecteerde taal om berichten en pagina's te proeflezen."],"Redundant Phrases":[null,"Overbodige zinnen"],"Phrases to Avoid":[null,"Te vermijden zinnen"],"Passive Voice":[null,"Passieve stem"],"Jargon":[null,"Jargon"],"Hidden Verbs":[null,"Verborgen werkwoorden"],"Double Negatives":[null,"Dubbele ontkenningen"],"Diacritical Marks":[null,"Diacritische tekens"],"Complex Phrases":[null,"Complexe zinnen"],"Bias Language":[null,"Voorkeurstaal"],"English Options":[null,"Engelse opties"],"Proofreading":[null,"Proeflezen"],"Connect Jetpack":[null,"Jetpack verbinden"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[null,""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[null,"WordPress.com ondervindt momenteel problemen en kan Jetpack niet opstarten. Probeer het later nogmaals."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[null,""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[null,""],"You have successfully disconnected Jetpack":[null,""],"Active":[null,"Actief"],"Settings":[null,"Instellingen"],"Learn More":[null,"Kom meer te weten"],"Disconnect Jetpack":[null,"Jetpack loskoppelen"],"Test your site’s compatibility with Jetpack.":[null,""]} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-nn_NO-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-nn_NO-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index ac46c8da..00000000
--- a/plugins/jetpack/languages/json/jetpack-nn_NO-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"nn_NO"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":[""],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":[""],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":[""],"Save Settings":[""],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":[""],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found."],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["","%(number)s Views"],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":[""],"Learn more":["Les meir"],"Posts":["Innlegg"],"Front page":["Framside"],"Pinterest":[""],"Google":["Google"],"Show related content after posts":["Vis liknande innhald etter innlegg"],"Related":["LIknande innhald"],"Save":["Lagre"],"Email Address":["E-postadresse"],"Media":["Media"],"Themes":["Tema"],"Site Stats":["Sidestatistikk"],"Sharing":["Dele"],"Testimonials":[""],"Cancel":["Avbryt"],"Comments":["kommentarar"],"Ignored Phrases":[""],"Use automatically detected language to proofread posts and pages":[""],"Redundant Phrases":[""],"Phrases to Avoid":[""],"Passive Voice":[""],"Jargon":[""],"Hidden Verbs":[""],"Double Negatives":["Doble negativar"],"Diacritical Marks":[""],"Complex Phrases":[""],"Bias Language":[""],"English Options":[""],"Proofreading":["Korrekturlesing"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[""],"You have successfully disconnected Jetpack":[""],"Edit":["Rediger"],"Connected":["Tilkopla"],"Activate":["Slå på"],"Active":["Aktiv"],"Search":["Søk"],"Settings":["Innstillingar"],"Learn More":["Les meir"],"Disconnect Jetpack":[""],"Test your site’s compatibility with Jetpack.":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-pl_PL-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-pl_PL-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 47121e4e..00000000
--- a/plugins/jetpack/languages/json/jetpack-pl_PL-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);","lang":"pl"},"Manually Verify ":["Sprawdź ręcznie "],"Verify with Google":["Sprawdź z Google "],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":[""],"or":["lub"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["Monitoruj ruch i skuteczność swojej witryny z {{a}}Google Search Console{{/a}}."],"Your site is verified with Google":["Twoja witryna jest zweryfikowana z Google"],"Site failed to verify: %(error)s":["Nieudana weryfikacja witryny: %(błąd)s"],"Verifying...":["Weryfikowanie&hellip;"],"Add faster, more advanced searching to your site with Jetpack Professional.":["Dodaj szybsze i bardziej zaawansowane wyszukiwanie do swojej witryny za pomocą Jetpack Professional."],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["Zmień wbudowaną w WordPressa wyszukiwarkę na posiadającą więcej możliwości wyszukiwarkę Jetpacka"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":[""],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":[""],"Jetpack Search supports many customizations.":[""],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":[""],"Site is verified":["Witryna jest zweryfikowana"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":[""],"Spam filtering and priority support.":[""],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":[""],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":[""],"Custom ads.txt entries":[""],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":[""],"Introducing Premium Themes":[""]," Premium Themes":[""],"Privacy information":[""],"Enable Lazy Loading for images":[""],"Performance & speed":[""],"Enable high-speed, ad-free video player":[""],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":[""],"Video":[""],"Carousel color scheme":[""],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":[""],"Show photo Exif metadata in carousel (when available)":[""],"Display images in a full-screen carousel gallery":[""],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":[""],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":[""],"Portfolios shortcode: [portfolio]":[""],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":[""],"Testimonials shortcode: [testimonials]":[""],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":[""],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":[""],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":[""],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":[""],"Configure related posts in the Customizer":[""],"Highlight related content with a heading":[""],"View security scan details":[""],"View backup history":[""],"Show a thumbnail image where available":[""],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":[""],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":[""],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":[""],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":[""],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["Ta opcja została wyłączona przez administratora. {{link}}Dowiedz się więcej{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["Ta opcja została włączona przez administratora. {{link}}Dowiedz się więcej{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":[""],"This feature has been disabled by a site administrator.":[""],"%(moduleName)s has been disabled by a site administrator.":[""],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["Możesz dodać dodatkowe reklamy używając widżetu Reklama. {{link}}Wypróbuj to już teraz!{{/link}}"],"Configure your notification settings":["Skonfiguruj ustawienia powiadomień"],"Monitor your site's downtime":["Monitoruj czas niedostępności Twojej strony"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["Wyszukiwarka Jetpacka posiada dużo więcej możliwości niż ta wbudowana w WordPressa."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":[""],"Plugin needs updating.":["Wtyczka wymaga aktualizacji.","Wtyczki wymagają aktualizacji.","Wtyczek wymaga aktualizacji."],"%(number)s":["","%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Aktualizator Wtyczek Jetpack pozwala wybrać wtyczki, które zostaną automatycznie zaktualizowane."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":[""],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":[""],"Akismet checks your comments and contact form submissions against our global database of spam.":[""],"Privacy Information":[""],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":[""],"Add the Search (Jetpack) widget to your sidebar":["Dodaj widżet Szukaj (Jetpack) do swojego paska bocznego"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":[""],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["Włącz lżejszy, przyjazny telefonom szablon, który wyświetli się użytkownikom korzystającym z bloga na telefonach."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["Załaduj kolejne wpisy automatycznie, gdy czytający dojdzie do końca strony."],"Allows you to publish new posts by sending an email to a special address.":["Pozwala Ci publikować nowe wpisy przez wysłanie e-maila na specjalny adres."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":[""],"Checks your content for correct grammar and spelling, misused words, and style while you write.":[""],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":[""],"Displays information on your site activity, including visitors and popular posts or pages.":[""],"Allows you to optimize your site and its content for better results in search engines.":[""],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":[""],"Displays high-quality ads on your site that allow you to earn income.":[""],"Adds sharing buttons to your content so that visitors can share it on social media sites.":[""],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":[""],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":[""],"Allows registered users to log in to your site with their WordPress.com accounts.":[""],"Protects your site from traditional and distributed brute force login attacks.":["Ochroń swoją stronę przed atakami typu brute force."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":[""],"Removes spam from comments and contact forms.":["Usuń spam z komentarzy i formularzy kontaktowych."],"We are committed to your privacy and security. ":[""],"View all Jetpack plans":["Zobacz wszystkie plany Jetpacka"],"Manage your plan":["Zarządzaj swoim planem"],"Your Plan":["Twój plan"],"You’re currently on Jetpack %(plan)s.":[""],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["Zezwól czytelnikom na subskrypcję wpisów lub komentarzy, aby mogli otrzymywać na e-mail powiadomienia o nowych treściach."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["Zamień domyślny formularz komentowania WordPress nowym systemem komentowania, który posiada opcje logowania przy pomocy mediów społecznościowych."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}Włącz{{/a}}, aby zamienić wbudowaną w WordPressa wyszukiwarkę na posiadającą więcej możliwości wyszukiwarkę Jetpacka."],"Add Search (Jetpack) Widget":["Dodaj Widżet Szukaj (Jetpack)"],"Jetpack Search is powering search on your site.":["Wyszukiwarka Jetpack jest bardziej rozbudowaną wyszukiwarką."],"Manage your plugins":["Zarządzaj swoimi wtyczkami"],"Moderate comments":["Moderuj komentarze"],"Error updating privacy settings. %(error)s":["Błąd przy aktualizacji ustawień prywatności. %(error)s"],"Updated privacy settings.":["Zaktualizowano ustawienia prywatności."],"Updating privacy settings…":["Aktualizacja ustawień prywatności..."],"Add Jetpack Search Widget":["Dodaj Widżet Szukaj (Jetpack)"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":[""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":[""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":[""],"Daily backups, spam filtering, and priority support.":[""],"Always-on Security":[""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":[""],"Design the perfect website":["Zaprojektuj swoją idealną stronę"],"Set up Jetpack":["Skonfiguruj Jetpacka"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":[""],"Jetpack Search":["Wyszukiwarka Jetpack"],"Jetpack version %(version)s":[""],"Your site is being backed up in real time and regularly scanned for security threats.":[""],"Daily backup of all your site data with unlimited space and one-click restores":[""],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":[""],"View your security activity":[""]," (powered by VaultPress).":[" (powered by VaultPress)."],"Customize Search Widget":["Dostosuj widget wyszukiwania"],"Please correct the issue below and try again.":["Popraw poniższy problem i spróbuj ponownie.","Popraw problemy wymienione poniżej i spróbuj ponownie.","Liczba pojedyncza: \nLiczba mnoga: "],"We are making sure your site stays free of security threats. You will be notified if we find one.":["Dbamy o to, aby Twoja witryna była wolna od zagrożeń bezpieczeństwa. Otrzymasz powiadomienie, jeśli jakieś znajdziemy."],"Your site is being backed up in real-time.":["Kopa zapasowa twojej witryny jest tworzona w czasie rzeczywistym."],"Jetpack version":["Wersja Jetpacka"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}Zobacz aktywność swojej witryny{{/a}} w jednym pliku danych."],"Activity":["Aktywność"],"Confirm each new phrase you add by pressing enter.":["Potwierdź każdą nowo dodaną frazę naciskając enter."],"{{a}}View details{{/a}}":["{{a}}Zobacz szczegóły{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":[""],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":[""],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":[""],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":[""],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":[""],"Install premium themes":["Zainstaluj motywy premium"],"Review SEO features":["Przejrzyj opcje SEO"],"Welcome Professional":[""],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":[""],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":[""],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":[""],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":[""],"Monetize your site with ads":["Zarabiaj na swojej witrynie dzięki reklamom"],"Welcome Premium":[""],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":[""],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":[""],"Welcome personal":[""],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":[""],"Jetpack Stats People":[""],"Hello there! Your stats have been activated.":[""],"Just give us a little time to collect data so we can display it for you here.":[""],"Okay, got it!":[""],"Display ads below posts on":["Wyświetl reklamy poniżej wpisów na"],"Additional ad placements":["Umiejscowienie dodatkowej reklamy"],"Top of each page":["Na górze każdej strony"],"Second ad below post":["Druga reklama poniżej wpisu"],"Archives":["Archiwa"],"Explore Professional":[""],"Compare All Plans":["Porównaj wszystkie plany"],"Person with laptop":[""],"Your Jetpack site is ready to go!":["Jetpack jest gotowy do użytku!"],"Stars":[""],"Jupiter":[""],"Welcome to Jetpack Personal":[""],"Welcome to Jetpack Premium":[""],"Welcome to Jetpack Professional":[""],"Activate Publicize":[""],"Your site is backed up.":[""],"Image Performance":[""],"Get WordPress Apps for every device":["Otrzymaj aplikację WordPress na każde urządzenie"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Zarządzaj wszystkimi swoimi stronami z pojedynczego kokpitu: publikuj zawartość, śledź statystykę, nadzoruj komentarze, i dużo więcej z każdego zakątka świata."],"I already use this app.":["Już używam tej aplikacji."],"Create address":["Utwórz adres"],"Priority support":["Wsparcie priorytetowe"],"Add sharing buttons to your posts":["Dodaj przyciski udostępniania do Twoich wpisów"],"Automatically share your posts to social networks":["Automatycznie przekazuj wpisy na portale społecznościowe"],"Updating settings…":["Uaktualnianie ustawień..."],"Updating Post by Email address…":["Uaktualnianie wpisów przez e-mail..."],"Your paid plan gives you access to prioritized Jetpack support.":["Twój płatny plan Jetpacka daje ci dostęp do priorytetowego wsparcia technicznego."],"You have paid for backups but they're not yet active.":[""],"You have paid for backups and security scanning but they’re not yet active.":[""],"Click \"Set Up\" to finish installation.":["Kliknij \"Skonfiguruj Jetpacka\", aby zakończyć instalację."],"Checking site status…":["Sprawdzanie statusu witryny..."],"Pages":["Strony"],"We're here to help":["Chętnie ci pomożemy"],"Jetpack comes with free, basic support for all users.":["Jetpack oferuje darmową pomoc techniczną dla wszystkich użytkowników."],"Ask a question":["Zadaj pytanie"],"Search our support site":["Przeszukaj naszą witrynę pomocy technicznej"],"Get a faster resolution to your support questions.":["Otrzymaj szybsze rozwiązanie swoich pytań."],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":["Zarabiaj na wysokiej jakości reklamach."],"Real-time site backups and automatic threat resolution.":["Kopie zapasowe w czasie rzeczywistym i automatyczna ochrona przed zagrożeniami."],"Protect against data loss, malware, and malicious attacks.":["Chroń przed utratą danych, złośliwym oprogramowaniem i atakami."],"Integrate easily with Google Analytics.":["Łatwa integracja z Google Analytics."],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":["Chroń swoją witrynę przed spamem."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["Ta witryna nie jest podłączona z WordPress.com. Poproś administratora witryny, aby ją podłączył."],"Spam filtering":["Ochrona przed spamem"],"Daily, automated malware scanning":["Codzienne, automatyczne skanowanie w poszukiwaniu złośliwego oprogramowania"],"Daily, automated backups (unlimited storage)":["Codzienne, automatyczne kopie zapasowe (bez limitu pojemności)"],"Daily, automated malware scanning with automated resolution":["Codzienne, automatyczne skanowanie w poszukiwaniu złośliwego oprogramowania, z automatycznym rozwiązaniem problemów"],"SEO preview tools":["Narzędzia podglądu SEO"],"Site stats, related content, and sharing tools":[""],"Brute force attack protection and downtime monitoring":["Ochrona przed atakami \"brute force\" i monitoring przerw w działaniu"],"Unlimited, high-speed image hosting":["Nielimitowany i bardzo szybki hosting obrazków"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":["Przeczytaj więcej o korzyściach z używania Jetpacka"],"An Automattic Airline":["Automatic"],"Manage site connection":["Zarządzaj połączeniami witryny"],"Connect your account to WordPress.com to view more stats":["Podłącz swoje konto WordPress.com i zobacz więcej statystyk "],"Theme enhancements":["Ulepszenia motywu"],"Load more posts using the default theme behavior":["Załaduj więcej wpisów używając domyślnych ustawień motywu"],"Load more posts in page with a button":["Załaduj więcej wpisów na stronie przy pomocy przycisku"],"Load more posts as the reader scrolls down":["Załaduj więcej wpisów w trakcie przewijania strony"],"Theme support required.":["Wymagane wsparcie ze strony motywu."],"Learn more about adding support for Infinite Scroll to your theme.":["Dowiedz się więcej, jak dodać w swoim motywie wsparcie dla Niekończącego się Przewijania."],"Use excerpts instead of full posts on front page and archive pages":["Pokazuj zajawkę zamiast pełnych wpisów na stronie głównej i w archiwach"],"Show featured images":["Pokazuj obrazki wyróżniające"],"Enable the WordPress.com toolbar":["Włącz pasek narzędzi WordPress.com"],"Writing tools available to you will be shown here when an administrator enables them.":["W tym miejscu pojawią się dodatkowe narzędzia pisania po włączeniu ich przez administratora."],"Portfolios":["Portfolio"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["{{b}}Weryfikacja twojej witryny na tych serwisach{{/b}} nie jest wymagana do tego, żeby została ona zindeksowana przez wyszukiwarki. Żeby używać tych zaawansowanych narzędzi wyszukiwarek i zweryfikować swoją witrynę, wklej kod HTML poniżej. Przeczytaj {{support}}pełne instrukcje{{/support}} jeżeli nie wiesz jak to zrobić. Wspierane serwisy: {{google}}Google Search Console{{/google}}, {{bing}}Bing -\n Narzędzia dla Webmasterów{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}} i {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["Wygeneruj mapy strony XML"],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":["Obrazek pomaga zbierać dane do statystyk ale powinien być ukryty."],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":["Konfiguruj ustawienia SEO"],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":["Konfiguruj ustawienia Google Analytics"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":["Włącz reklamy i wyświetlaj je poniżej każdego wpisu"],"Configure your sharing buttons":["Konfiguruj przyciski udostępniania"],"Connect your social media accounts":["Połącz swoje konta mediów społecznościowych"],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":["Dodaj do białej listy"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":["Sprawdzanie ochrony antyspamowej..."],"Fetching key…":["Pobieranie klucza..."],"Your site needs an Antispam key.":["Twoja strona potrzebuje klucza Antispam."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["Wystąpił problem z twoim kluczem Antispam. {{a}}Dowiedz się więcej{{/a}}."],"Your site is not protected from spam.":["Twoja witryna nie jest zabezpieczona przed spamem."],"Your Antispam key is valid.":["Twój klucz antyspamowy jest poprawny."],"Your site is protected from spam.":["Twoja witryna jest chroniona przed spamem."],"Checking key…":["Sprawdzam klucz..."],"Your API key":["Twój klucz API"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":["Nie znaleziono frazy %(term)s"],"Enter a search term to find settings or close search.":[""],"Connections":["Połączenia"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Twoja witryna znajduje się w trybie rozwojowym, dlatego nie można jej połączyć z WordPress.com."],"Your site is connected to WordPress.com.":["Twoja witryna jest połączona z WordPress.com."],"You are the Jetpack owner.":["Jetpack należy do ciebie."],"Connected as {{span}}%(username)s{{/span}}":["Połączony jako {{span}}%(username)s{{/span}}"],"View your Email Followers":[""],"Color scheme":["Schemat kolorów"],"Enable Markdown use for comments.":["Zezwalaj na używanie składni Markdown w komentarzach."],"Updated settings.":["Zapisano ustawienia."],"Error updating settings. %(error)s":["Wystąpiły błędy przy uaktualnianiu ustawień. %(error)s"],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":["Zaktualizowano ustawienia. Odświeżanie strony..."],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["Aktualnie w {{a}}Trybie Programisty{{/a}} (niektóre opcje są wyłączone), ponieważ: {{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}Filtr jetpack_development_mode jest aktywny{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}W adresie twojej witryny brakuje kropki (np. http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Konfiguruj Google Analytics"],"Activate Google Analytics":["Włącz Google Analytics"],"Download the free apps":["Pobierz darmowe aplikacje"],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":["Wyświetl reklamę na górze witryny."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Twój serwer jest źle skonfigurowany, przez co Ochrona Jetpacka nie może efektywnie chronić twojej witryny."],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":["Zobacz swoje zarobki"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":["Hosting Wideo"],"SEO Tools":["Narzędzia SEO"],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":["Więcej informacji"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Zarządzaj widocznością polubień z Modułu Udostępniania{{/a}}"],"Your current IP: %(ip)s":["Twoje obecne IP: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["Są pewne niezapisane ustawienia na tej karcie, które zostaną utracone jeśli opuścisz ją. Kontynuować?"],"This will reset all Jetpack options, are you sure?":["To zresetuje wszystkie ustawienia Jetpacka, czy na pewno to zrobić?"],"Search for a Jetpack feature.":["Szukaj funkcji Jetpacka."],"Configure your Security Scans":["Konfiguruj swoje skanowanie bezpieczeństwa"],"Subscriber":["Subskrybent"],"Big iPhone/iPad Update Now Available":["Duża aktualizacja iPhona/iPada jest teraz dostępna"],"The WordPress for Android App Gets a Big Facelift":["W WordPressie dla Androida była duża aktualizacja wyglądu"],"WordPress.com Likes are:":["WordPress.com Likes są:"],"Comments headline":["Nagłówek komentarzy"],"A few catchy words to motivate your readers to comment.":["Kilka chwytliwych słów, które zmotywują twoich czytelników do komentowania."],"Show a \"follow blog\" option in the comment form":["Pokaż opcję \"śledź blog\" w formularzu komentowania "],"Show a \"follow comments\" option in the comment form":["Pokaż opcję \"śledź komentarze\" w formularzu komentowania "],"Put a chart showing 48 hours of views in the admin bar":["Umieść wykres przedstawiający statystyki odwiedzin ostatnich 48 godzin na pasku administratora"],"Hide the stats smiley face image":["Ukryj statystyki uśmieszków (smiley face image)"],"Whitelisted IP addresses":["Biała lista adresów IP"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":["Skopiowane!"],"Highlight and copy the following text to your clipboard:":["Podświetl i skopiuj niniejszy tekst do schowka:"],"Regenerate address":["Wygeneruj ponownie adresy"],"Automatically proofread content when: ":["Automatycznie koryguj zawartość gdy:"],"A post or page is first published":[""],"A post or page is updated":["Wpis lub strona zaktualizowane"],"Automatic Language Detection":["Automatyczne wykrywanie języka"],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":["Dodaj frazę"],"Cheatin' uh?":["Oszukujesz?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Witamy w {{s}}Jetpacku %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["Twój Jetpack jest teraz podłączony."],"You're fueled up and ready to go, Jetpack is now active.":["Masz już wartościowe narzędzia i jesteś gotowy aby działać. Jetpack jest teraz włączony."],"You're fueled up and ready to go.":["Masz już wartościowe narzędzia i jesteś gotowy aby działać. "],"You are currently running a development version of Jetpack.":["Korzystasz obecnie z niestabilnej (rozwojowej) wersji Jetpacka."],"Submit Beta feedback":["Wpisz i wyślij informację zwrotną"],"What would you like to see on your Jetpack Dashboard?":["Co chciałbyś zobaczyć w kokpicie Jetpacka?"],"Let us know!":["Daj nam znać!"],"Saving…":["Zapisywanie..."],"Save Settings":["Zapisz ustawienia"],"Jetpack Stats Icon":["Ikona Statystyk Jetpacka"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Aktywuj statystyki strony{{/a}} aby zobaczyć szczegółowe statystyki, polubień, śledzących, subskrybentów i innych!, {{a1}}Zobacz więcej{{/a1}}"],"Activate Site Stats":["Aktywuj statystyki strony"],"Security Scanning":["Skanowanie bezpieczeńśtwa"],"Upgrade":["Ulepsz"],"ACTIVE":["WŁĄCZ"],"Your site is on Development Mode":["Twoja witryna jest w fazie rozwojowej"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Gdy już połączysz Jetpacka z blogiem, możesz przejść na płatny plan, aby odblokować światowej klasy zabezpieczenia, narzędzia do ochrony przed spamem oraz pomoc techniczną o wyższym priorytecie."],"View your spam stats":["Pokaż statystyki spamu"],"View your security dashboard":["Zobacz swój kokpit bezpieczeństwa"],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":["Połącz swoje konto z WordPress.com, aby jak najlepiej wykorzystać Jetpacka."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":["Wszystkie zablokowane ataki na witrynę"],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":["Wszystkie wtyczki są aktualne. Świetna robota!"],"Jetpack is improving and optimizing your image speed.":["Jetpack poprawia i optymalizuje szybkość wczytywania obrazków."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack monitoruje twoją witrynę. Jeśli będziemy przekonani, że twoja witryna nie działa otrzymasz od nas e-mail."],"Security":["Zabezpieczenia"],"Performance":["Wydajność"],"Backups":["Kopie zapasowe"],"{{a}}View backup details{{/a}}.":["{{a}}Zobacz szczegóły kopii zapasowych{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":["Ochrona przed spamem"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":["NIepoprawny klucz"],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"Activating %(slug)s…":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"Deactivating %(slug)s…":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":["Opcje zresetowane."],"Options failed to reset.":["Błąd resetowania opcji."],"There was an error disconnecting Jetpack. Error: %(error)s":["Wystąpił błąd podczas odłączania Jetpacka. Błąd: %(error)s"],"Unlinking from WordPress.com":["Odłącz od WordPress.com"],"Unlinked from WordPress.com.":["Odłączony od WordPress.com"],"Error unlinking from WordPress.com. %(error)s":["Błąd odłączania od WordPress.com. %(error)s"],"At A Glance":["W skrócie"],"Clichés":[""],"Dashboard":["Kokpit"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Czy powiesz nam dlaczego? {{a}}Odpowiedź na dwa proste pytania{{/a}} pomoże nam ulepszyć Jetpack."],"Automattic's Privacy Policy":["Polityka prywatności Automatic"],"WordPress.com Terms of Service":["Warunki świadczenia usług WordPress.com"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":[""],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Włącz automatyczne aktualizowanie wtyczek{{/a}}"],"Plugin Updates":["Aktualizacje wtyczek"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":["{{a}}Kontakt z pomocą techniczną{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found.","Uh oh, %(number)s threats found."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":[""],"Loading…":["Wczytywanie..."],"Downtime monitoring":["Monitoring przerw w działaniu"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}Zobacz bardziej szczegółowe statystyki na WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}Zobacz szczegółowe statystyki{{/button}}"],"All-time comments":["Łącznie komentarzy"],"All-time views":["Łącznie wyświetleń"],"%(number)s View":["%(number) wyświetlenie","%(number) wyświetlenia","%(number) wyświetleń"],"Best overall day":["Najlepszy dzień dotychczas"],"Views today":["Wyświetleń dzisiaj"],"Months":["Miesiące"],"Weeks":["Tygodnie"],"Days":["Dni"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["Coś się stało podczas ładowania statystyk. Spróbuj ponownie później albo {{a}}zobacz statystyki na WordPress.com{{/a}}"],"Click to view detailed stats.":["Kliknij aby zobaczyć szczegółowe statystyki."],"Views: %(numberOfViews)s":["Wyświetleń: %(numberOfViews)"],"Week of %(date)s":["Tydzień z %(date)s"],"Site Security":["Zabezpieczenia witryny"],"Activate recommended features":["Włącz rekomendowane funkcje"],"Link to WordPress.com":["Połącz z WordPress.com"],"Unlink me from WordPress.com":["Odłącz od WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Musisz pozostać zalogowany do twojego bloga WordPress w czasie gdy autoryzujesz Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":["Odłączenie Jetpacka"],"Learn more":["Dowiedz się więcej"],"Posts":["Wpisy"],"Front page":["Strona główna"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Pokaż pokrewne treści za wpisami"],"Related":["Podobne"],"Save":["Zapisz"],"Email Address":["Adres e-mail"],"Media":["Media"],"Themes":["Motywy"],"Site Stats":["Statystyki witryny"],"Sharing":["Dzielenie się"],"Testimonials":["Referencje"],"Cancel":["Anuluj"],"Comments":["Komentarze"],"Ignored Phrases":["Ignorowane frazy"],"Use automatically detected language to proofread posts and pages":["Do sprawdzania pisowni wpisów i stron używaj automatycznie wykrytego języka"],"Redundant Phrases":[""],"Phrases to Avoid":[""],"Passive Voice":[""],"Jargon":["Żargon"],"Hidden Verbs":[""],"Double Negatives":[""],"Diacritical Marks":[""],"Complex Phrases":[""],"Bias Language":[""],"English Options":["Opcje dot. j. angielskiego"],"Proofreading":["Sprawdzanie pisowni"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[""],"You have successfully disconnected Jetpack":["Pomyślnie odłączono Jetpack"],"Edit":["Edytuj"],"Connected":["Połączony"],"Activate":["Włącz"],"Active":["Aktywne"],"Search":["Szukaj"],"Settings":["Ustawienia"],"Learn More":["Dowiedz się więcej"],"Disconnect Jetpack":["Odłącz Jetpacka"],"Test your site’s compatibility with Jetpack.":["Testuj kompatybilność swojej witryny z Jetpackiem."],"Settings header\u0004Downtime monitoring":["Monitoring czasu niedostępności strony"],"Settings header\u0004Privacy Settings":["Ustawienia prywatności"],"Settings header\u0004WordPress.com toolbar":["Pasek narzędzi WordPress.com"],"Settings header\u0004Composing":["Kompozycja"],"Settings header\u0004Site stats":["Statystyki witryny"],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Przyciski udostępniania"],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":["Przyciski polubień"],"Settings header\u0004WordPress.com log in":["Logowanie do WordPress.com"],"Settings header\u0004Brute force attack protection":["Ochrona przed atakami brute force"],"Settings header\u0004Backups and security scanning":["Kopie bezpieczeństwa i skanowanie bezpieczeństwa"],"Settings header\u0004Spam filtering":["Filtrowanie antyspamowe"],"Search term.\u0004terms of service":[""],"Search term.\u0004tos":[""],"Search term.\u0004gdpr":[""],"Search term.\u0004data":[""],"Search term.\u0004tracks":[""],"Search term.\u0004privacy":[""],"Caption for a button to purchase a pro plan.\u0004Upgrade":["Ulepsz"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Przejdź na wyższy plan"],"Button caption\u0004Saving…":["Zapisuję..."],"Button caption\u0004Save settings":["Zapisz ustawienia"],"A heading for a block of related posts.\u0004Related":["Powiązane"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Podgląd"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Pozostań połączony"],"A caption for a button to disconnect.\u0004Disconnect":["Odłącz"],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":["Ustawienia"],"Navigation item.\u0004Discussion":["Dyskusja"],"Navigation item.\u0004Traffic":["Statystyki"],"Navigation item.\u0004Sharing":["Udostępnianie"],"Navigation item.\u0004At A Glance":["W skrócie"],"Navigation item.\u0004Plans":["Plany"],"Navigation item.\u0004Writing":["Pisanie"],"Navigation item.\u0004Reset Options (dev only)":["Zresetuj ustawienia (tylko wersja deweloperska)"],"Navigation item.\u0004Security":["Bezpieczeństwo"],"Navigation item.\u0004At a Glance":["W skrócie"],"Short warning message\u0004Updates needed":["Wymagana aktualizacja"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Płatne"],"A header for a preview area in the configuration screen.\u0004Preview":["Podgląd"],"Ads header\u0004Ads":["Reklamy"],"Dashboard widget header\u0004Site connection":["Połączenia witryny"],"Dashboard widget header\u0004Account connection":["Połączone konto"],"A caption for a small button to fix security issues.\u0004Threats":["Zagrożenia"],"A caption for a small button to fix security issues.\u0004FIX":["NAPRAW"],"Short warning message about new threats found.\u0004Threats found!":["Wykryto zagrożenie!"],"Short warning message about site having no security scan.\u0004No scanning":["Brak skanowania"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Ulepsz"],"Short message informing user that the site is secure.\u0004Secure":["Bezpieczna"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Nieprawidłowy klucz"],"Caption for a button to set up a feature.\u0004Set up":["Skonfiguruj"],"verb\u0004Copy":["Kopiuj"],"Shorthand for Privacy Policy.\u0004Privacy":["Prywatność"],"Shorthand for Terms of Service.\u0004Terms":["Zasady"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-pt_BR-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-pt_BR-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index d6c7f124..00000000
--- a/plugins/jetpack/languages/json/jetpack-pt_BR-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=(n > 1);","lang":"pt_BR"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":["Em seguida, ative a funcionalidade recomendada pelo Jetpack, configurada para maximizar a segurança e o desempenho do seu site. {{a}}Saiba mais sobre o que foi incluído{{/a}}."],"We’re now collecting stats and securing your site. Welcome aboard.":["Agora, passamos a coletar estatísticas e a deixar seu site mais seguro. Bem-vindo(a)!"],"{{a}}Skip, and explore features individually{{/a}}.":["{{a}}Pular e explorar as funcionalidades individualmente{{/a}}."],"Jetpack Business Plan":["Plano Negócios do Jetpack"],"Jetpack Premium Plan":["Plano Premium do Jetpack"],"Jetpack Personal Plan":["Plano Pessoal do Jetpack"],"Get started with hassle-free design, stats, and performance tools.":["Comece pelas ferramentas descomplicadas de design, estatísticas e de desempenho."],"Welcome to Jetpack Free":["Bem-vindo(a) ao Jetpack gratuito"],"Jetpack Free Plan":["Plano gratuito do Jetpack"],"Explore Jetpack plans":["Explore os planos do Jetpack"],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":["Fique tranquilo com os backups automatizados e o suporte prioritário. Alcance um público maior ao usar as ferramentas avançadas de SEO. Monetize seu site ao veicular anúncios e personalize-o com um dos nossos mais de 200 temas premium."],"Jetpack offers so much more":["O Jetpack oferece muito mais"],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":["Precisa de ajuda? Pesquise em nosso site de suporte para saber mais sobre o seu site, sua conta e como aproveitar o WordPress ao máximo."],"Support documentation":["Documentação de suporte"],"Chat bubbles representing getting in touch with support":["Os balões de chat representam o contato com o suporte"],"Site Activity":["Atividades do site"],"Start publicizing now":["Comece já a publicar"],"Reach a wider audience by automatically sharing your posts on social media.":["Alcance um público maior compartilhando automaticamente os seus posts nas redes sociais."],"Increase traffic to your site":["Aumente as visitas em seu site"],"Explore free themes":["Explore os temas gratuitos"],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":["Receba acesso ilimitado a centenas de temas profissionais e personalize o seu site exatamente como quiser."],"A wide variety of themes and tools to customize a site":["Uma grande variedade de temas e ferramentas para personalizar um site"],"Set up your site security":["Configure a segurança do seu site"],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":["Evite os ataques aos logins e receba notificações instantâneas quando houver um problema no seu site."],"Site stats showing an evolution in traffic and engagement":["As estatísticas do site mostram uma evolução no tráfego e no engajamento"],"A hand holding a loupe":["Uma mão segurando uma lupa"],"A chart showing an healthy increase in earnings":["Um gráfico mostrando um bom aumento nos lucros"],"Interface showing a chronological list of changes and updates in a site":["Interface mostrando uma lista cronológica de alterações e atualizações de um site"],"A cloud with multiple types of content floating around it":["Uma nuvem repleta de vários tipos de conteúdos flutuando ao redor"],"A folder holding real comments":["Uma pasta contendo comentários reais"],"Make your site faster":["Torne seu site mais rápido"],"Load pages faster by serving your images from our global network of servers.":["Carregue páginas com maior rapidez, exibindo suas imagens a partir da nossa rede global de servidores."],"A fast and performant website":["Um site rápido e com excelente desempenho"],"A secure site, locked and protected by Jetpack":["Um site seguro, protegido e resguardado pelo Jetpack"],"These settings won't apply to related posts added using the block editor.":["Essas configurações não serão aplicadas aos posts relacionados, que foram adicionados usando o editor de blocos."],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["Duplique posts, páginas, testemunhos e portfólios existentes. Todo o conteúdo será copiado incluindo texto, imagem destacada, configurações de compartilhamento etc."],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":["Esse site não pode ser conectado ao WordPress.com por que viola nossos {{a}}Termos de serviço{{/a}}."],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":["Conecte seu site às redes sociais que você usa e compartilhe seu conteúdo em todas suas contas com um único clique. Quando você publica um post, ele será compartilhado em todas suas contas conectadas."],"Add Like buttons to your posts and pages":["Adicionar botões de curtida em seus posts e páginas"],"When visitors enjoy your content, let them show it with a Like.":["Quando os visitantes gostarem de seu conteúdo, deixe que eles mostrem isso com uma curtida."],"Explore your Jetpack Professional plan!":["Explore seu plano Jetpack Profissional!"],"Explore your Jetpack Premium plan!":["Explore seu plano Jetpack Premium!"],"Explore your Jetpack Personal plan!":["Explore seu plano Jetpack Pessoal!"],"Create account":["Criar conta"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["O Jetpack equipa o seu site mas, para acessar todos os seus recursos, é preciso criar uma conta."],"Real-time, automated backups (unlimited storage)":["Backups em tempo real e automatizados (armazenamento ilimitado)"],"Compose content the way you want to and streamline your publishing experience.":["Crie conteúdos como quiser e otimize a experiência de publicá-los."],"Add a portfolio item":["Adicione um item ao portfólio"],"Add a testimonial":["Adicione um depoimento"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["Maximize a visibilidade do seu site em mecanismos de busca e visualize estatísticas de tráfego em tempo real."],"Create a Jetpack account to use this feature":["Crie uma conta no Jetpack para usar esse recurso"],"Share your content on social media and increase audience engagement.":["Compartilhe seu conteúdo nas redes sociais e aumente o engajamento do público."],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["O Jetpack fará o monitoramento contínuo do seu site e o alertará quando um momento de inoperância for detectado."],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["Quando uma atualização de plugin é lançada, a prática recomendada é atualizar esse plugin imediatamente. Selecione quais plugins deseja atualizar automaticamente, para que o seu site permaneça em segurança."],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["Mantenha a segurança do seu site com a nossa tecnologia de ponta e receba notificações sobre problemas técnicos."],"Error enabling Site accelerator. %(error)s":["Erro ao habilitar o Acelerador de sites. %(error)s"],"Site accelerator is now speeding up your site!":["O Acelerador de sites deixou seu site muito mais rápido!"],"Enabling Site accelerator…":["Habilitando o Acelerador de sites..."],"Error disabling site accelerator. %(error)s":["Erro ao desabilitar o Acelerador de sites. %(error)s"],"Site accelerator is no longer speeding up your site!":["O Acelerador de sites deixou de acelerar seu site!"],"Disabling site accelerator…":["Desabilitando o Acelerador de sites..."],"Load pages faster, optimize images, and speed up your visitors’ experience.":["Carregue páginas, otimize imagens com mais rapidez e acelere a experiência dos seus visitantes."],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["Complemente as estatísticas do WordPress.com com uma análise mais detalhada do Google de seus visitantes e seus padrões de tráfego."],"High-speed, high-definition video hosting with no third-party ads.":["Hospedagem de vídeos em alta velocidade e alta definição, sem publicidade de terceiros."],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["Agende tweets, publicações no Facebook e posts em outras redes sociais sem limitações."],"Marketing Automation":["Automação de Marketing"],"Activate Jetpack Search":["Ative a busca do Jetpack"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["Substitua a busca padrão do WordPress por resultados e filtros melhores com a tecnologia Elasticsearch."],"Start earning":["Comece já a lucrar"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["O WordAds permite que você ganhe dinheiro com a exibição de conteúdo promocional. Comece a lucrar hoje mesmo."],"Spam is automatically blocked from your comments.":["Todo spam é bloqueado automaticamente nos seus comentários."],"Spam Filtering":["Filtro de spam"],"Browse premium themes":["Navegue pelos temas premium"],"Access hundreds of beautifully designed premium themes at no extra cost.":["Acesse centenas de temas premium com belos designs sem custo adicional."],"Try a premium theme":["Experimente um tema premium"],"View settings":["Exibir configurações"],"Create a Jetpack account to view your email followers":["Crie uma conta do Jetpack para visualizar os seguidores dos seus e-mails"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["Abra o site para receber comentários e convide os assinantes para que recebam alertas sobre a sua obra mais recente."],"Manage security settings":["Gerencie as configurações de segurança"],"Built-in Performance":["Desempenho integrado"],"Jetpack is ready for the new WordPress editor":["O Jetpack está pronto para o novo editor do WordPress"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["Hoje, estamos lançando os primeiros blocos específicos do Jetpack criados para a experiência com o novo editor: Botão Pagamento simples, Formulário, Mapa e Markdown."],"Build your Jetpack site with blocks":["Desenvolva seu site do Jetpack com blocos"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["Um novo editor? Sim! {{a}}Saiba mais{{/a}}."],"The features you rely on, adapted for the new WordPress editor.":["Os recursos nos quais você confia, adaptados para o editor do WordPress."],"Take me to the new editor":["Ir para o novo editor"],"Testing Jetpack Connection":["Testando a conexão do Jetpack"],"There was an error testing Jetpack. Error: %(error)s":["Ocorreu um erro ao testar o Jetpack. Erro: %(error)s"],"New in Jetpack!":["Novidades no Jetpack!"],"Speed up static file load times":["Acelerar o carregamento de arquivos estáticos"],"Speed up image load times":["Acelerar o carregamento de imagens"],"Enable site accelerator":["Ativar acelerador de site"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["Carregue páginas com mais rapidez, ao permitir que o Jetpack otimize e transmita suas imagens e arquivos estáticos (como o CSS e o JavaScript) da nossa rede global de servidores."],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["Adicione uma camada extra de segurança ao seu site, ativando o login e a autenticação segura do WordPress.com. Caso tenha diversos sites com esta opção ativada, será possível fazer login em todos eles com as mesmas credenciais."],"View your site activity":["Ver as atividades do site"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["Visualize uma lista cronológica de todas as alterações e atualizações do seu site de forma organizada e legível."],"Manually Verify ":["Verificar manualmente "],"Verify with Google":["Verificar com o Google"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["O Google enviará um e-mail sobre determinados eventos que ocorrem com seu site, incluindo indícios de que o site foi {{a1}}invadido{{/a1}}, ou sobre problemas {{a2}}de pesquisa ou indexação{{/a2}} do seu site."],"or":["ou"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["Monitore o tráfego e o desempenho do seu site pelo {{a}}Google Search Console{{/a}}."],"Your site is verified with Google":["Seu site foi verificado com o Google"],"Site failed to verify: %(error)s":["Não foi possível verificar o site: %(error)s"],"Verifying...":["Verificando..."],"Add faster, more advanced searching to your site with Jetpack Professional.":["Adicione uma busca mais rápida e avançada ao seu site com o Jetpack Professional."],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["Substitua a pesquisa integrada do WordPress pela Busca do Jetpack, uma experiência de busca avançada"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["A Busca do Jetpack substitui a pesquisa integrada por um recurso de busca rápido, escalável, personalizável e altamente relevante que fica hospedado na nuvem do WordPress.com. O resultado: seus usuários encontram o conteúdo desejado mais rapidamente."],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["A busca integrada do WordPress é ótima para sites sem muito conteúdo. No entanto, conforme seu site cresce, as buscas ficam lentas e retornam menos resultados relevantes."],"Jetpack Search supports many customizations.":["A Busca do Jetpack oferece suporte para várias personalizações."],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["Substitua a pesquisa integrada por uma busca rápida, escalável, personalizável e altamente relevante que fica {{a}}hospedada na nuvem do WordPress.com{{/a}}."],"Site is verified":["O site foi verificado"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}Crie um site que seja e funcione exatamente como você queria. O Jetpack Profissional fornece acesso ilimitado a mais de 200 temas premium do WordPress.{{/p}}{{p}}Com o Jetpack Profissional, você faz muito mais que apenas encontrar o design ideal. Você pode relaxar sabendo que terá suporte prioritário da nossa equipe global de especialistas caso necessário.{{/p}}"],"Spam filtering and priority support.":["Filtro de spam e suporte prioritário."],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["Quando os anúncios são ativados, o Jetpack gera automaticamente um ads.txt personalizado para seu site."],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["O Jetpack gera automaticamente um {{link}}ads.txt{{/link}} personalizado para seu site. Caso precise adicionar mais entradas para outras redes, inclua uma por linha no espaço abaixo."],"Custom ads.txt entries":["Entradas de ads.txt personalizados"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}Crie um site que seja e funcione exatamente como você queria. Para isso, o Jetpack Profissional fornece acesso ilimitado a mais de 200 temas premium do WordPress.{{/p}}{{p}}Com o Jetpack Profissional, você faz muito mais que apenas encontrar o design ideal. Você pode relaxar: backups em tempo real, verificação automática de malware e suporte prioritário da nossa equipe global de especialistas garantem que seu site esteja sempre seguro.{{/p}}"],"Introducing Premium Themes":["Apresentando os temas premium"]," Premium Themes":[" Temas Premium"],"Privacy information":["Informações de privacidade"],"Enable Lazy Loading for images":["Ativar o carregamento lento de imagens"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["O carregamento lento de imagens aumentará a velocidade do seu site e criará uma exibição mais suave. As fotos carregarão conforme o usuário rolar a página para baixo, em vez de todas carregarem de uma vez."],"Performance & speed":["Desempenho e velocidade"],"Enable high-speed, ad-free video player":["Ative um reprodutor de vídeo de alta velocidade e sem publicidade"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["Faça com que o conteúdo que você publica seja mais interessante com um vídeo de alta resolução. Com o Jetpack Vídeo você personaliza seu reprodutor de mídia e fornece vídeos de alta velocidade e sem publicidade aos visitantes. Os vídeos são hospedados nos servidores do WordPress.com e não reduzem o espaço do seu plano de hospedagem!"],"Video":["Vídeo"],"Carousel color scheme":["Esquema de cores do carrossel"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Os dados Exif mostram aos visualizadores mais detalhes técnicos de uma foto, como a distância focal, abertura e ISO."],"Show photo Exif metadata in carousel (when available)":["Mostre metadados Exif de fotos no carrossel, quando disponível."],"Display images in a full-screen carousel gallery":["Exiba imagens em tela cheia em uma galeria do carrossel"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["Crie apresentações em carrosséis em tela cheia para imagens em seus posts e suas páginas. As galerias do carrossel são compatíveis com dispositivos móveis e incentivam visitantes a interagirem com suas fotos."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["A barra de ferramentas do WordPress.com substitui a barra de administração padrão e simplifica sua experiência. Ela permite gerenciar todos os seus sites com apenas um clique, atualiza seu perfil do WordPress.com, visualiza notificações e acompanha os sites que você segue no Leitor."],"Portfolios shortcode: [portfolio]":["Código abreviado dos portfólios: [portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["Use os {{portfolioLink}}portfólios{{/portfolioLink}} do nosso site para exibir o que tem de melhor. Caso seus temas não sejam compatíveis com o Jetpack Portfólios, você ainda pode usar um código abreviado simples para exibi-los no seu site."],"Testimonials shortcode: [testimonials]":["Código abreviado dos depoimentos: [testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["Inclua {{testimonialLink}}depoimentos{{/testimonialLink}} no seu site para atrair novos clientes. Caso seus temas não sejam compatíveis com o Jetpack Depoimentos, você ainda pode usar um código abreviado simples para exibi-los no seu site."],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["Os mecanismos de busca não podem acessar seu site no momento. Caso queira tornar seu site acessível, confira as {{a}}configurações de leitura{{/a}} e ative a opção \"Visibilidade do mecanismo de busca\"."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["Boas notícias: o Jetpack está enviando automaticamente seu sitemap a todos os principais mecanismos de busca para indexação."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["Os sitemaps são arquivos que os mecanismos de busca, como o Google ou o Bing, usam. Eles podem ajudar a melhorar sua posição nos resultados de busca. Ao ativar este recurso, o Jetpack cria sitemaps para você e atualiza-os automaticamente assim que o conteúdo no seu site for alterado."],"Configure related posts in the Customizer":["Configure posts relacionados no Personalizador"],"Highlight related content with a heading":["Destaque o conteúdo relacionado com um cabeçalho"],"View security scan details":["Visualize detalhes da verificação de segurança"],"View backup history":["Visualize histórico de backups"],"Show a thumbnail image where available":["Exibir uma miniatura de imagem quando disponível"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["Para obter mais informações sobre como funcionalidades específicas do Jetpack usam dados e monitoram atividades, consulte nosso {{privacyCenterLink}}Centro de privacidade{{/privacyCenterLink}}."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["Utilizamos outras ferramentas de controle, incluindo algumas de terceiros. {{cookiePolicyLink}}Leia mais sobre isso{{/cookiePolicyLink}} e sobre como controlá-los."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["Essas informações nos ajudam a aprimorar nossos produtos, tornar o marketing mais relevante para você, personalizar sua experiência no WordPress.com e muito mais, conforme detalhado em nossa {{pp}}política de privacidade{{/pp}}."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["Compartilhe informações sobre seu uso dos serviços com nossa ferramenta de análise enquanto permanece conectado em sua conta do WordPress.com. {{cookiePolicyLink}}Saiba mais{{/cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["Este recurso está sendo gerenciado por um administrador do site. {{link}}Saiba mais{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["Este recurso foi desabilitado por um administrador do site. {{link}}Saiba mais{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["Este recurso foi habilitado por um administrador do site. {{link}}Saiba mais{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["%(moduleName)s foi desabilitado por um administrador do site. {{link}}Saiba mais{{/link}}."],"This feature has been disabled by a site administrator.":["Este recurso foi desabilitado por um administrador do site."],"%(moduleName)s has been disabled by a site administrator.":["%(moduleName)s foi desabilitado por um administrador do site."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["É possível posicionar anúncios usando o widget de anúncios. {{link}}Faça um teste!{{/link}}"],"Configure your notification settings":["Defina suas configurações de notificação"],"Monitor your site's downtime":["Monitore o período de inatividade do seu site"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["A Busca do Jetpack é uma ótima substituição da capacidade de pesquisa criada no WordPress."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["Os arquivos do seu site são verificados com frequência à procura de modificações não autorizadas ou suspeitas que possam comprometer seus dados e sua segurança."],"Plugin needs updating.":["O plugin precisa ser atualizado.","Os plugins precisam ser atualizados."],"%(number)s":["%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["As Atualizações de plugin do Jetpack permitem que você escolha quais plugins atualizar automaticamente."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["O Jetpack otimizará e fornecerá suas imagens a partir do local de servidor mais próximo dos seus visitantes. Usar a nossa rede de distribuição de conteúdo global aumentará a velocidade de carregamento do seu site."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":["O monitoramento do período de inatividade do Jetpack monitorará seu site e o alertará sempre que um período de inatividade for detectado."],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Os Backups do Jetpack permitem que você restaure ou faça download de um backup com facilidade a partir de um momento específico."],"Akismet checks your comments and contact form submissions against our global database of spam.":["O Akismet verifica seus comentários e envios de formulário de contato no nosso banco de dados de spam."],"Privacy Information":["Informações de privacidade"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["O VideoPress permite que você faça upload de vídeos no seu computador para serem hospedados no WordPress.com e não host do seu servidor. Além disso, você pode inseri-los no seu site do Jetpack auto-hospedado. "],"Add the Search (Jetpack) widget to your sidebar":["Adicione o widget de busca (do Jetpack) à barra lateral"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["Proporcione uma excelente experiência de pesquisa aos seus visitantes ao deixá-los filtrar e classificar resultados de busca relevantes e rápidos."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["Permite um tema leve que será exibido para os visitantes em dispositivos móveis."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["Carrega os próximos posts automaticamente, conforme o leitor se aproxima do final da página."],"Allows you to publish new posts by sending an email to a special address.":["Permite que você faça novas publicações ao enviar um e-mail para um endereço específico."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["Permite que você crie conteúdo com links, listas e outros estilos usando a sintaxe do Markdown."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["Verifica a gramática, a grafia, o emprego incorreto de palavras e o estilo do seu conteúdo enquanto você escreve."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["Fornece as tags ocultas necessárias para a verificação do seu site WordPress com vários serviços."],"Displays information on your site activity, including visitors and popular posts or pages.":["Exibe informações sobre a atividade no seu site, como visitantes e posts/páginas populares."],"Allows you to optimize your site and its content for better results in search engines.":["Permite a otimização do seu site e conteúdo para melhores resultados nos mecanismos de busca."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["Integra seu site do WordPress ao Google Analytics, uma plataforma que oferece informações sobre tráfego, visitantes e conversões."],"Displays high-quality ads on your site that allow you to earn income.":["Exibe anúncios em alta qualidade no seu site, permitindo que você lucre."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["Adiciona botões de compartilhamento ao seu conteúdo para que os visitantes possam divulgá-lo nas redes sociais."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["Permite o compartilhamento automático do seu conteúdo mais recente em redes sociais, como o Facebook e o Twitter."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["Adiciona botões de curtida ao seu conteúdo para que os visitantes possam mostrar que gostaram dele."],"Allows registered users to log in to your site with their WordPress.com accounts.":["Permite que os usuários registrados possam fazer login no seu site com as contas deles do WordPress.com."],"Protects your site from traditional and distributed brute force login attacks.":["Protege seu site de ataques tradicionais e distribuídos de login de força bruta."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["Faz backup do seu site em servidores globais do WordPress.com, permitindo que você restaure o conteúdo em caso de emergência ou erro."],"Removes spam from comments and contact forms.":["Remove mensagens de spam dos comentários e formulários de contato."],"We are committed to your privacy and security. ":["Temos um compromisso com sua privacidade e segurança. "],"View all Jetpack plans":["Ver todos os planos do Jetpack"],"Manage your plan":["Gerenciar seu plano"],"Your Plan":["Seu plano"],"You’re currently on Jetpack %(plan)s.":["Você atualmente está no Jetpack %(plan)s."],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["Permite que os leitores assinem para ver seus posts e comentários, bem como receber notificações de novo conteúdo por e-mail."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["Substitui o formato padrão de comentário do WordPress por um novo sistema, que inclui opções de login nas redes sociais."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}Ative{{/a}} para substituir a busca integrada do WordPress pela avançada Busca do Jetpack."],"Add Search (Jetpack) Widget":["Adicionar widget de busca (Jetpack)"],"Jetpack Search is powering search on your site.":["A busca no seu site usa a busca do Jetpack."],"Manage your plugins":["Gerencie seus plugins"],"Moderate comments":["Modere comentários"],"Error updating privacy settings. %(error)s":["Erro ao atualizar as configurações de privacidade. %(error)s"],"Updated privacy settings.":["Configurações de privacidade atualizadas."],"Updating privacy settings…":["Configurações de privacidade atualizadas..."],"Add Jetpack Search Widget":["Adicione o widget de busca do Jetpack"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["Adicione o widget de Busca do Jetpack à barra lateral para configurar filtros e classificação."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["Pacote de segurança completo, ferramentas de automação de receita e marketing, hospedagem ilimitada de vídeo, inúmeros temas, pesquisa avançada e suporte prioritário."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["Pacote de segurança completo, ferramentas de automação de receita e marketing, hospedagem ilimitada de vídeo."],"Daily backups, spam filtering, and priority support.":["Backups diários, filtragem de spam e suporte prioritário."],"Always-on Security":["Segurança em tempo integral"],"Activate video hosting":["Ativar hospedagem de vídeo"],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Backup em tempo real de todos os dados do seu site com espaço ilimitado, restaurações com apenas um clique, verificação de segurança automatizada e suporte prioritário"],"Design the perfect website":["Crie o site perfeito"],"Set up Jetpack":["Configurar o Jetpack"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["Graças às restaurações com espaço ilimitado em apenas um clique e à verificação de segurança automatizada, você obtém backup em tempo real de todos os dados do seu site."],"Jetpack Search":["Pesquisa do Jetpack"],"Jetpack version %(version)s":["Versão do Jetpack %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["O backup do seu site está sendo feito em tempo real e escaneado regularmente contra ameaças de segurança."],"Daily backup of all your site data with unlimited space and one-click restores":["Backup diário de todas as informações do seu site com espaço ilimitado e restaurações com apenas um clique"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Backup diário de todos os dados de seu site com espaço ilimitado, restauração com um clique, verificação de segurança automática e prioridade no suporte"],"View your security activity":["Visualizar suas atividades de segurança"]," (powered by VaultPress).":["(mantido por VaultPress)."],"Customize Search Widget":["Widget de busca personalizado"],"Please correct the issue below and try again.":["Corrija o problema abaixo e tente de novo. ","Corrija os problemas abaixo e tente de novo. "],"We are making sure your site stays free of security threats. You will be notified if we find one.":["Nós estamos verificando se seus sites estão livres de ameaças de segurança. Você será notificado se encontrarmos alguma."],"Your site is being backed up in real-time.":["O backup do seu site está sendo feito em tempo real."],"Jetpack version":["Versão do Jetpack"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}Visualize as atividades de seu site{{/a}} em um único feed."],"Activity":["Atividade"],"Confirm each new phrase you add by pressing enter.":["Pressione enter para confirmar cada frase nova adicionada."],"{{a}}View details{{/a}}":["{{a}}Ver detalhes{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["Obrigado por escolher o Jetpack Profissional. O Jetpack agora está fazendo backups de seu conteúdo em tempo real, indexando seu conteúdo para pesquisas, verificando ameaças à segurança e permitindo acesso a temas premium."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["Com o plano Profissional do Jetpack, você pode criar o site perfeito com um dos mais de 300 temas WordPress desenvolvidos por profissionais, incluindo mais de 200 temas premium. Personalize seu conteúdo com diversos widgets, ou adicione vídeos ilimitados a posts e páginas, e tudo isso é exibido sem anúncios ou marcas d'água."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["É fácil aumentar o seu número de seguidores com o plano Profissional, graças ao agendamento e compartilhamento de conteúdo, às ferramentas de SEO e às opções integradas de assinatura. Você pode monetizar o seu site com o botão de pagamentos simples e com anúncios no conteúdo dos posts, além de monitorar o sucesso de seus esforços pela integração com o Google Analytics."],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["O Jetpack Profissional oferece tudo que você precisa para manter seu trabalho seguro, incluindo backups sob demanda e verificações de malware, e ainda restaura e resolve problemas com um clique. O seu site ficará totalmente protegido contra spam, códigos mal-intencionados e tentativas de login de força bruta."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Comece a explorar o Jetpack Profissional agora para ver todos os benefícios de seu novo plano."],"Install premium themes":["Instale temas premium"],"Review SEO features":["Revise as funcionalidades de SEO"],"Welcome Professional":["Bem-vindo ao Jetpack Profissional"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["Agradecemos por escolher o Jetpack Premium. Neste momento, o Jetpack está fazendo o backup de seu site, verificando ameaças à segurança e habilitando funcionalidades de monetização."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["Com o Jetpack Premium, você cria o site perfeito, não importa qual seja o objetivo. Personalize a aparência do seu site com um dos mais de 100 temas gratuitos, ou aprimore o conteúdo com vídeos HD ilimitados que oferecem hospedagem sem anúncios ou marcas d’água."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Usando as poderosas ferramentas de compartilhamento do Jetpack, você pode compartilhar automaticamente seus posts mais recentes nas mídias sociais, ou programar o conteúdo para ser compartilhado em qualquer data ou horário de sua escolha. Além de aumentar o seu número de seguidores, você pode expandir seus negócios com ferramentas como botões de pagamento e anúncios."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Comece a explorar o Jetpack Premium agora mesmo para conhecer todos os benefícios do seu novo plano."],"Monetize your site with ads":["Monetize seu site com anúncios"],"Welcome Premium":["Bem-vindo ao Jetpack Premium"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["Agradecemos por escolher o Jetpack Pessoal. Neste momento, o Jetpack está fazendo o backup de seu site, verificando ameaças à segurança."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["Com o Jetpack Pessoal, você tem acesso a mais de 100 temas WordPress gratuitos e desenvolvidos por profissionais. Escolha o tema que combina mais com o seu site e personalize as cores e imagens, ou adicione diversos widgets novos."],"Got it":["Entendi"],"Welcome personal":["Bem-vindo ao Jetpack Pessoal"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["Ao clicar no botão abaixo, você concorda com nossos {{tosLink}}Termos de Serviço{{/tosLink}} e em {{shareDetailsLink}}compartilhar informações{{/shareDetailsLink}} com o WordPress.com."],"Jetpack Stats People":["Pessoas que observam as estatísticas do Jetpack"],"Hello there! Your stats have been activated.":["Olá! Suas estatísticas foram ativadas."],"Just give us a little time to collect data so we can display it for you here.":["Aguarde alguns momentos, para que possamos coletar alguns dados e exibi-los aqui para você."],"Okay, got it!":["Ok, entendido!"],"Display ads below posts on":["Exibir publicidade abaixo dos posts em"],"Additional ad placements":["Posicionamentos adicionais de anúncios"],"Top of each page":["Topo de cada página"],"Second ad below post":["Segundo anúncio abaixo do post"],"Archives":["Arquivos"],"Explore Professional":["Explore o Professional"],"Compare All Plans":["Compare todos os planos"],"Person with laptop":["Pessoa com laptop"],"Your Jetpack site is ready to go!":["O seu novo site Jetpack está pronto!"],"Stars":["Estrelas"],"Jupiter":["Jupiter"],"Welcome to Jetpack Personal":["Bem-vindo ao Jetpack Pessoal."],"Welcome to Jetpack Premium":["Bem-vindo ao Jetpack Premium"],"Welcome to Jetpack Professional":["Bem-vindo ao Jetpack Profissional"],"Schedule posts":["Agendar posts"],"Activate Publicize":["Ativar Publicize"],"Your site is backed up.":["O backup de seu site foi concluído."],"Image Performance":["Performance de imagem"],"Get WordPress Apps for every device":["Use os aplicativos WordPress em qualquer dispositivo"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Gerencie todos os seus sites em um único painel: publique conteúdo, monitore estatísticas, modere comentários e muito mais de qualquer lugar do mundo."],"I already use this app.":["Já utilizo esse aplicativo."],"Create address":["Criar endereço"],"Priority support":["Prioridade no suporte"],"Add sharing buttons to your posts":["Adicione botões de compartilhamento aos seus posts"],"Automatically share your posts to social networks":["Compartilhe seus posts automaticamente em redes sociais"],"Updating settings…":["Atualizando configurações..."],"Updating Post by Email address…":["Atualizando endereço para publicar por e-mail..."],"Your paid plan gives you access to prioritized Jetpack support.":["Seu plano pago dá acesso a suporte com prioridade do Jetpack."],"You have paid for backups but they're not yet active.":["Você pagou por backups, mas eles ainda não estão ativos."],"You have paid for backups and security scanning but they’re not yet active.":["Você pagou por backups e escaneamento de segurança, mas eles ainda não estão ativos."],"Click \"Set Up\" to finish installation.":["Clique em configurar para finalizar a instalação."],"Checking site status…":["Verificando status do site..."],"Pages":["Páginas"],"We're here to help":["Estamos aqui para ajudar"],"Jetpack comes with free, basic support for all users.":["Jetpack oferece suporte básico e gratuito a todos os usuários."],"Ask a question":["Faça uma pergunta"],"Search our support site":["Pesquise nosso site de suporte"],"Get a faster resolution to your support questions.":["Receba uma solução mais rápida para suas questões de suporte."],"Host fast, high-quality, ad-free video.":["Hospede vídeos com rapidez, alta qualidade e sem anúncios."],"Generate income with high-quality ads.":["Gere renda com anúncios de alta qualidade."],"Real-time site backups and automatic threat resolution.":["Backups de site em tempo real e resolução automática de ameaças."],"Protect against data loss, malware, and malicious attacks.":["Evite perda de dados, malware e ataques maliciosos."],"Integrate easily with Google Analytics.":["Integre facilmente com o Google Analytics."],"Help your content get found and shared with SEO tools.":["Ajude seu conteúdo a ser encontrado e compartilhado com as ferramentas de SEO."],"Protect your site from spam.":["Proteja seu site contra spam."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["Este site não está conectado ao WordPress.com Solicite ao administrador do site para se conectar."],"Spam filtering":["Filtro de spam"],"Daily, automated malware scanning":["Verificação diária e automática de malware"],"Daily, automated backups (unlimited storage)":["Backups automáticos diários (armazenamento ilimitado)"],"Daily, automated malware scanning with automated resolution":["Verificação de malware diária e automatizada com resolução automática"],"Unlimited, high-speed video hosting":["Hospedagem ilimitada de vídeos de alta velocidade"],"SEO preview tools":["Ferramentas de visualizações de SEO"],"Site stats, related content, and sharing tools":["Estatísticas do site, conteúdo relacionado e ferramentas de compartilhamento"],"Brute force attack protection and downtime monitoring":["Proteção contra ataques de força bruta e monitoramento do tempo de inatividade"],"Unlimited, high-speed image hosting":["Hospedagem de imagem com alta velocidade e ilimitada"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["Ao desconectar %(siteName)s do WordPress.com, você não terá mais acesso a:"],"Read more about Jetpack benefits":["Saiba mais sobre os benefícios do Jetpack"],"An Automattic Airline":["Uma companhia aérea da Automattic"],"Manage site connection":["Gerenciar conexão do site"],"Connect your account to WordPress.com to view more stats":["Conecte sua conta ao WordPress.com para ver mais estatísticas"],"Theme enhancements":["Melhorias de tema"],"Load more posts using the default theme behavior":["Carregar mais posts usando o comportamento padrão do tema"],"Load more posts in page with a button":["Carregar mais posts na página com um botão"],"Load more posts as the reader scrolls down":["Carregar mais posts à medida que o leitor rolar a página"],"Theme support required.":["Necessário ter suporte no tema."],"Learn more about adding support for Infinite Scroll to your theme.":["Saiba mais sobre como adicionar suporte para abBarra de rolagem infinita ao seu tema."],"Use excerpts instead of full posts on front page and archive pages":["Use resumos em vez de posts inteiros na página inicial e nas páginas de arquivo"],"Show featured images":["Exiba imagens destacadas"],"Enable the WordPress.com toolbar":["Habilitar a barra de ferramentas do WordPress.com"],"Writing tools available to you will be shown here when an administrator enables them.":["Ferramentas de escrita disponíveis aparecerão aqui quando o administrador as habilitar."],"Portfolios":["Portfólios"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Observe que {{b}}não é necessário verificar o seu site com estes serviços{{/b}} para que ele seja indexado pelos mecanismos de busca. Para usar estas ferramentas avançadas de mecanismos de buscas e verificar o seu site com um serviço, cole o código da Tag HTML abaixo. Leia as {{support}}instruções completas{{/support}} se estiver com dificuldades. Serviços de verificação compatíveis: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}} e {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["Gerar mapas do site em XML"],"Collecting valuable traffic stats and insights":["Coletando estatísticas e informações sobre tráfego"],"The image helps collect stats, but should work when hidden.":["A imagem ajuda a recolher estatísticas, mas deve funcionar mesmo estando oculta."],"Count logged in page views from":["Contar as visualizações dos seguintes usuários logados:"],"Allow stats reports to be viewed by":["Permitir que os relatórios de estatísticas sejam visualizados por"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["Você pode ajustar as configurações para ter um controle mais avançado. Saiba mais sobre o que você pode fazer para {{a}}melhorar o SEO do seu site{{/a}}."],"Configure your SEO settings":["Defina suas configurações de SEO"],"In \"Upgrade\"":["Em \"Atualizações\""],"Configure your Google Analytics settings":["Informe suas configurações do Google Analytics"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Exiba anúncios no primeiro artigo de sua página inicial ou no fim de cada página e post. Insira anúncios adicionais na parte superior do site e nas áreas de widget para aumentar os ganhos."],"Enable ads and display an ad below each post":["Habilite os anúncios e exiba um anúncio sob cada post"],"Configure your sharing buttons":["Configure os botões de compartilhamento"],"Connect your social media accounts":["Conecte suas contas de redes sociais"],"Match accounts using email addresses":["Vincular contas usando endereços de e-mail"],"Require accounts to use WordPress.com Two-Step Authentication":["Exigir que as contas usem a autenticação em duas etapas do WordPress.com"],"Add to whitelist":["Adicionar à lista de permissões"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["A inserção de um endereço de IP ou de vários endereços na lista de permissões evita que eles sejam bloqueados pelo Jetpack. IPv4 e IPv6 são aceitos. Para especificar um intervalo de IPs, insira o menor e o maior valor separados por um traço. Exemplo: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["Seu site tem uma cópia de segurança e está livre de ameaças."],"Checking your spam protection…":["Verificando sua proteção contra spam…"],"Fetching key…":["Obtendo chave…"],"Your site needs an Antispam key.":["Seu site precisa de uma chave contra spam."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["Há um problema com sua chave de API contra spam. {{a}}Saiba mais{{/a}}."],"Your site is not protected from spam.":["Seu site não tem proteção contra spam."],"Your Antispam key is valid.":["Sua chave contra spam é válida."],"Your site is protected from spam.":["Seu site tem proteção contra spam."],"Checking key…":["Verificando a chave…"],"Your API key":["Sua chave API"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["Caso você ainda não tenha uma chave de API, {{a}}obtenha sua chave de API aqui{{/a}} e você será guiado pelo processo para cadastrar uma chave."],"No search results found for %(term)s":["Nenhum resultado de busca encontrado para %(term)s"],"Enter a search term to find settings or close search.":["Insira um termo de busca para encontrar as configurações ou fechar a busca."],"Connections":["Conexões"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Seu site está no modo de desenvolvimento, portanto, você não pode se conectar ao WordPress.com."],"Your site is connected to WordPress.com.":["Seu site está conectado ao WordPress.com."],"You are the Jetpack owner.":["Você é o proprietário do Jetpack."],"Connected as {{span}}%(username)s{{/span}}":["Conectado como {{span}}%(username)s{{/span}}"],"View your Email Followers":["Veja seus seguidores de e-mail"],"Color scheme":["Combinação de cores"],"Enable Markdown use for comments.":["Habilite o Markdown para comentários."],"Updated settings.":["Configurações atualizadas."],"Error updating settings. %(error)s":["Erro ao atualizar as configurações. %(error)s"],"Regenerated Post by Email address.":["Endereço para publicar por e-mail recuperado."],"Error regenerating Post by Email address. %(error)s":["Erro ao recuperar endereço para publicar por e-mail. %(error)s"],"Updated settings. Refreshing page…":["Configurações atualizadas. Atualizando a página…"],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["Está no {{a}}Modo de desenvolvimento{{/a}} e algumas funções estão desativadas porque: {{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}O filtro jetpack_development_mode filter está ativo{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}A constante JETPACK_DEV_DEBUG está definida{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}A URL do seu site está em um ponto (ex.: http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["O Google Analytics é um serviço gratuito que complementa as {{a}}estatísticas incorporadas do Wordpress.com{{/a}} com diferentes visões sobre os acessos que você recebe. As estatísticas do WordPress.com e do Google Analytics usam métodos diferentes para identificar e monitorar as atividades no seu site, então elas geralmente mostram totais ligeiramente diferenciados referentes aos seus acessos, visualizações, etc."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Configure Google Analytics"],"Activate Google Analytics":["Ative o Google Analytics"],"Download the free apps":["Fazer download dos aplicativos gratuitos"],"Upgrade Focus: VideoPress For Weddings":["Foco da atualização: VideoPress para casamentos"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}Agora você também pode configurar os posts relacionados no Personalizador. {{ExternalLink}}Experimente!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["Por padrão, a publicidade é mostrada ao final de cada página, post ou no primeiro artigo da sua página inicial. Você também pode adicioná-los na parte superior do seu site e nas áreas de widget para aumentar seus lucros!"],"Display an ad unit at the top of your site.":["Mostre uma unidade de publicidade na parte superior do seu site."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["Ao ativar a publicidade, você concorda com os {{link}}Termos de Serviço{{/link}} de publicidade da Automattic."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Seu servidor está configurado de forma incorreta, o que significa que o Jetpack Protect não pode proteger o seu site de forma eficaz."],"In \"Mobile\"":["Em “Móvel”"],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Definir as configurações de notificação do Monitor no WordPress.com{{/link}}"],"View your earnings":["Visualizar seus ganhos"],"Configure site SEO":["Configure o SEO do site"],"Activate SEO tools":["Ativar ferramentas de SEO"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["Para iniciar, clique em Adicionar mídia no seu editor de post e carregue um vídeo. Nós cuidaremos do resto!"],"Video Hosting":["Hospedagem de vídeo"],"SEO Tools":["Ferramentas de SEO"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Ferramentas de SEO avançadas para ajudar o seu site a ser encontrado quando as pessoas buscarem conteúdo relevante."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["A maneira mais fácil de enviar vídeos sem anúncios e sem marcas para o seu site. Você obtém estatísticas de reprodução e compartilhamento dos vídeos e o player é leve e responsivo."],"You are running Jetpack on a staging server.":["Você está rodando o Jetpack em um servidor de teste."],"More Info":["Mais informações"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Gerencie a visibilidade das curtidas em \"Configurações do módulo de compartilhamento\"{{/a}}"],"Your current IP: %(ip)s":["Seu IP atual: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["Existem configurações não salvas nesta aba que serão perdidas se você sair. Continuar?"],"This will reset all Jetpack options, are you sure?":["Isso redefinirá todas as opções do Jetpack. Você tem certeza?"],"Search for a Jetpack feature.":["Pesquisar por um recurso do Jetpack."],"Configure your Security Scans":["Configurar suas verificações de segurança"],"Subscriber":["Assinante"],"Big iPhone/iPad Update Now Available":["Um agrande atualização para iPhone/iPad está disponível"],"The WordPress for Android App Gets a Big Facelift":["O aplicativo WordPress para Android foi melhorado"],"WordPress.com Likes are:":["Curtidas do WordPress.com estão:"],"Comments headline":["Cabeçalho dos comentários"],"A few catchy words to motivate your readers to comment.":["Algumas palavras sugestivas para motivar seus leitores a comentar"],"Show a \"follow blog\" option in the comment form":["Exibir uma opção \"seguir blog\" no formulário de comentário"],"Show a \"follow comments\" option in the comment form":["Exibir uma opção \"seguir comentários\" no formulário de comentário."],"Put a chart showing 48 hours of views in the admin bar":["Coloca um gráfico mostrando visualizações de 48 horas na barra de administração"],"Hide the stats smiley face image":["Ocultar emoticons das estatísticas"],"Whitelisted IP addresses":["Endereços IP na lista de permissões"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Mostrar um anúncio dos aplicativos do WordPress no rodapé do tema para dispositivos móveis"],"Copied!":["Copiado!"],"Highlight and copy the following text to your clipboard:":["Destaque e copie o seguinte texto para a área de transferência:"],"Regenerate address":["Regenerar endereço"],"Automatically proofread content when: ":["Revisar conteúdo automaticamente quando: "],"A post or page is first published":["Um post ou página é publicado"],"A post or page is updated":["Um post ou página é atualizado"],"Automatic Language Detection":["Detecção automática de idioma"],"The proofreader supports English, French, German, Portuguese and Spanish.":["O revisor é compatível com inglês, francês, alemão, português e espanhol."],"Enable proofreading for the following grammar and style rules: ":["Habilite a revisão para a seguintes regras de gramática e estilo: "],"Add a phrase":["Adicione uma frase"],"Cheatin' uh?":["Trapaceando, é?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}Você se importaria de nos dizer por que não concluiu a conexão com o Jetpack nesta {{a}}pesquisa de 2 perguntas{{/a}}?{{/p}}{{p}}Uma conexão com o Jetpack é necessária para que nossos recursos gratuitos de segurança e tráfego funcionem.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Bem-vindo ao {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["Seu Jetpack já está conectado."],"You're fueled up and ready to go, Jetpack is now active.":["Você está abastecido e pronto para decolar. Jetpack está ativo agora."],"You're fueled up and ready to go.":["Você está abastecido e pronto para decolar."],"You are currently running a development version of Jetpack.":["Você está usando uma versão de desenvolvimento do Jetpack."],"Submit Beta feedback":["Enviar opinião sobre o beta"],"What would you like to see on your Jetpack Dashboard?":["O que você gostaria de ver no seu painel do Jetpack?"],"Let us know!":["Nos avise!"],"Saving…":["Salvando..."],"Save Settings":["Salvar configurações"],"Jetpack Stats Icon":["Ícone de estatísticas do Jetpack"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Ative as estatísticas do site{{/a}} para ver estatísticas detalhadas, curtidas, seguidores, assinantes e muito mais! {{a1}}Saiba mais{{/a1}}"],"Activate Site Stats":["Ativar estatísticas do site"],"Security Scanning":["Verificação de segurança"],"Site Backups":["Backups do site"],"Upgrade":["Atualização"],"ACTIVE":["ATIVO"],"Your site is on Development Mode":["Seu site está no modo de desenvolvimento"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Uma vez conectado, você poderá atualizar para um plano pago para desbloquear a segurança de alto nível, ferramentas de proteção antispam e suporte preferencial."],"View your spam stats":["Ver suas estatísticas de spam"],"View your security dashboard":["Ver seu painel de segurança"],"The site is in Development Mode, so you can not connect to WordPress.com.":["O site está no Modo de desenvolvimento, portanto, você não pode se conectar ao WordPress.com."],"Link your account to WordPress.com to get the most out of Jetpack.":["Conecte sua conta ao WordPress.com para ter o melhor o Jetpack."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["Para fazer a varredura abrangente e automatizada de ameaças de segurança, {{a}}instale e ative{{/a}} o VaultPress."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["Para fazer a varredura abrangente e automatizada de ameaças de segurança, {{a}}faça o upgrade da sua conta{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["O Jetpack está bloqueando ativamente tentativas de login mal-intencionadas. Os dados serão exibidos aqui em breve!"],"Total malicious attacks blocked on your site.":["Total de ataques mal-intencionados bloqueados no seu site."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Ative a proteção{{/a}} para manter seu site protegido contra tentativas de login mal intencionadas."],"All plugins are up-to-date. Awesome work!":["Todos os plugins estão atualizados. Ótimo trabalho!"],"Jetpack is improving and optimizing your image speed.":["O Jetpack está melhorando e otimizando a velocidade da sua imagem."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["O Jetpack está monitorando seu site. Se acharmos que seu site está fora do ar, você receberá um e-mail."],"Security":["Segurança"],"Performance":["Performance"],"Backups":["Backups"],"{{a}}View backup details{{/a}}.":["{{a}}Ver detalhes do backup{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["Para fazer o backup de todo o seu site automaticamente, {{a}}instale e ative{{/a}} o VaultPress."],"Unavailable in Dev Mode.":["Indisponível no Modo de desenvolvedor."],"Spam Protection":["Proteção de Spam"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["Para obter a defesa antispam de última geração, {{a}}instale o Akismet{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["Para obter a defesa antispam de última geração, {{a}}ative o Akismet{{/a}}."],"Invalid key":["Chave inválida"],"Unavailable in Dev Mode":["Indisponível no modo de desenvolvimento"],"Activating recommended features…":["Ativando recursos recomendados…"],"Recommended features active.":["Recursos recomendados ativados."],"Recommended features failed to activate. %(error)s":["Os recursos recomendados não foram ativados. %(error)s"],"Activating %(slug)s…":["Ativando %(slug)s…"],"%(slug)s has been activated.":["%(slug)s foi atualizado."],"%(slug)s failed to activate. %(error)s":["%(slug)s não foi ativado. %(error)s"],"Deactivating %(slug)s…":["Desativando %(slug)s..."],"%(slug)s has been deactivated.":["%(slug)s foi desativado."],"%(slug)s failed to deactivate. %(error)s":["%(slug)s não foi desativado. %(error)s"],"Updating %(slug)s settings…":["Atualizando configurações de %(slug)s..."],"Updated %(slug)s settings.":["Configurações de %(slug)s atualizadas."],"Error updating %(slug)s settings. %(error)s":["Erro atualizando configurações de %(slug)s. %(error)s"],"Updating %(slug)s address…":["Atualizando endereço %(slug)s…"],"Regenerated %(slug)s address .":["Endereço %(slug)s regenerado."],"Error regenerating %(slug)s address. %(error)s":["Error ao gerar o endereço de %(slug)s. %(error)s"],"Resetting Jetpack options…":["Redefinindo opções do Jetpack..."],"Options reset.":["Opções redefinidas."],"Options failed to reset.":["As opções não foram redefinidas."],"There was an error disconnecting Jetpack. Error: %(error)s":["Houve um erro ao desconectar o Jetpack. Erro: %(error)s"],"Unlinking from WordPress.com":["Desvinculando do WordPress.com"],"Unlinked from WordPress.com.":["Desvinculado do WordPress.com."],"Error unlinking from WordPress.com. %(error)s":["Erro ao desvincular do WordPress.com. %(error)s"],"At A Glance":["Resumo"],"Clichés":["Clichês"],"Dashboard":["Painel"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Gostaria de dizer o motivo? Respondendo a apenas {{a}}duas perguntas simples,{{/a}} você pode nos ajudar a melhorar o Jetpack."],"Automattic's Privacy Policy":["Política de Privacidade da Automattic"],"WordPress.com Terms of Service":["Termos de Serviço do WordPress.com"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}Ative{{/a}} para aumentar o desempenho e a velocidade das imagens."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Ative as atualizações automáticas de plugin{{/a}}"],"Plugin Updates":["Atualizações de plugin"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["Para fazer backup automático de todo o site, {{a}}faça upgrade da sua conta{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["Opa! Sua chave do Akismet está ausente ou é inválida. {{akismetSettings}}Acesse as configurações do Akismet para corrigir{{/akismetSettings}}."],"No threats found, you're good to go!":["Nenhum ameaça encontrada, vá em frente!"],"{{a}}Contact Support{{/a}}":["{{a}}Contatar o Suporte{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}Veja os detalhes no VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["Ops, %(number)s ameaça encontrada.","Ops, %(number)s ameaças encontradas."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}Ative o monitoramento{{/a}} para receber notificações por e-mail se o site ficar fora do ar."],"Loading…":["Carregando..."],"Downtime monitoring":["Monitoramento do período de inatividade"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}Ver mais estatísticas em WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}Visualizar estatísticas detalhadas{{/button}}"],"All-time comments":["Comentários até o momento"],"All-time views":["Visualizações até o momento"],"%(number)s View":["%(number)s visualização","%(number)s visualizações"],"Best overall day":["Melhor dia em geral"],"Views today":["Visualizações hoje"],"Months":["Meses"],"Weeks":["Semanas"],"Days":["Dias"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["Algo aconteceu durante o carregamento das estatísticas. Tente novamente mais tarde ou {{a}}visualize suas estatísticas agora no WordPress.com{{/a}}"],"Click to view detailed stats.":["Clique para ver as estatísticas detalhadas."],"Views: %(numberOfViews)s":["Visualizações: %(numberOfViews)s"],"Week of %(date)s":["Semana de %(date)s"],"Site Security":["Segurança do site"],"Activate recommended features":["Ativar funcionalidades recomendadas"],"Link to WordPress.com":["Linkar para WordPress.com"],"Unlink me from WordPress.com":["Me desconectar do WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["Ocorreu um problema ao conectar o Jetpack. Clique em \"Conectar-se ao WordPress.com\" novamente."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["Houve um problema de conexão com o Jetpack, desative e reative o plugin Jetpack e então conecte novamente."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Você deve permanecer logado no seu blog WordPress enquanto autoriza o Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Seu Jetpack tem alguma falha.{{/s}} Pedimos desculpa pela inconveniência. Tente novamente mais tarde, se o problema persistir, entre em contato com o suporte com esta mensagem: %(error_key)s"],"Disconnecting Jetpack":["Desconectando o Jetpack"],"Learn more":["Saiba mais"],"Posts":["Posts"],"Front page":["Página inicial"],"Upload videos":["Enviar vídeos"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Mostrar conteúdo relacionado após posts"],"Related":["Relacionado"],"Save":["Salvar"],"Email Address":["Endereço de e-mail"],"Media":["Mídia"],"Themes":["Temas"],"Site Stats":["Estatísticas do site"],"Sharing":["Compartilhar"],"Testimonials":["Depoimentos"],"Cancel":["Cancelar"],"Comments":["Comentários"],"Ignored Phrases":["Frases ignoradas"],"Use automatically detected language to proofread posts and pages":["Use o idioma detectado automaticamente para revisar posts e páginas"],"Redundant Phrases":["Frases Redundantes"],"Phrases to Avoid":["Frases a Evitar"],"Passive Voice":["Voz passiva"],"Jargon":["Jargão"],"Hidden Verbs":["Esconder Verbos"],"Double Negatives":["Dupla Negativa"],"Diacritical Marks":["Sinais diacríticos"],"Complex Phrases":["Frases complexas"],"Bias Language":["Linguagem Preconceituosa"],"English Options":["Opções em Inglês"],"Proofreading":["Revisão"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["O Jetpack não conseguiu contatar o WordPress.com: %(error_key)s. Isso em geral significa que algo está configurado incorretamente no host da Web."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["O WordPress.com está com problemas e está incapaz de acionar seu Jetpack. Tente novamente mais tarde."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Seu Jetpack tem uma falha.{{/s}} Não é possível conectar este site ao WordPress.com. Isso em geral significa que seu site não está publicamente acessível (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Seu site precisa ser acessível ao público para usar o Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["Você desconectou o Jetpack com sucesso."],"Edit":["Editar"],"Connected":["Conectado"],"Activate":["Ativar"],"Active":["Ativo"],"Search":["Pesquisa"],"Settings":["Configurações"],"Learn More":["Saiba mais"],"Disconnect Jetpack":["Desconectar Jetpack"],"Test your site’s compatibility with Jetpack.":["Teste a compatibilidade do seu site com o Jetpack."],"Settings header\u0004Plugin Autoupdates":["Atualizações automáticas do plugin"],"Settings header\u0004Downtime monitoring":["Monitoramento do período de inatividade"],"Settings header\u0004Privacy Settings":["Configurações de privacidade"],"Settings header\u0004WordPress.com toolbar":["Barra de ferramentas do WordPress.com"],"Settings header\u0004Composing":["Escrita"],"Settings header\u0004Site stats":["Estatísticas do site"],"Settings header\u0004Search engine optimization":["Otimização para mecanismo de busca"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Botões de compartilhamento"],"Settings header\u0004Publicize connections":["Conexões do Publicize"],"Settings header\u0004Like buttons":["Botões de curtida"],"Settings header\u0004WordPress.com log in":["Login do WordPress.com"],"Settings header\u0004Brute force attack protection":["Proteção contra ataques de força bruta"],"Settings header\u0004Backups and security scanning":["Backups e verificação de segurança"],"Settings header\u0004Spam filtering":["Filtro de spam"],"Navigation item.\u0004Performance":["Desempenho"],"Navigation item.\u0004My Plan":["Meu plano"],"Navigation item.\u0004Dev Tools":["Ferramentas de desenvolvimento"],"Navigation item.\u0004Settings":["Configurações"],"Navigation item.\u0004Discussion":["Discussão"],"Navigation item.\u0004Traffic":["Tráfego"],"Navigation item.\u0004Sharing":["Compartilhamento"],"Navigation item.\u0004At A Glance":["Resumo"],"Navigation item.\u0004Plans":["Planos"],"Navigation item.\u0004Writing":["Escrita"],"Navigation item.\u0004Reset Options (dev only)":["Redefinir opções (somente as versões de desenvolvedor)"],"Navigation item.\u0004Security":["Segurança"],"Navigation item.\u0004At a Glance":["Resumo"],"Search term.\u0004terms of service":["termos de serviço"],"Search term.\u0004tos":["tds"],"Search term.\u0004gdpr":["rgpd"],"Search term.\u0004data":["dados"],"Search term.\u0004tracks":["rastros"],"Search term.\u0004privacy":["privacidade"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["Atualização"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Atualizar"],"Button caption\u0004Saving…":["Salvando..."],"Button caption\u0004Save settings":["Salvar configurações"],"A heading for a block of related posts.\u0004Related":["Relacionados"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Visualizar"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Permanecer conectado"],"A caption for a button to disconnect.\u0004Disconnect":["Desconectar"],"Short warning message\u0004Updates needed":["Atualizações necessárias"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Pago"],"A header for a preview area in the configuration screen.\u0004Preview":["Visualizar"],"Ads header\u0004Ads":["Anúncios"],"Dashboard widget header\u0004Site connection":["Conexão do site"],"Dashboard widget header\u0004Account connection":["Conexão da conta"],"A caption for a small button to fix security issues.\u0004Threats":["Ameaças"],"A caption for a small button to fix security issues.\u0004FIX":["Corrigir"],"Short warning message about new threats found.\u0004Threats found!":["Ameaças encontradas!"],"Short warning message about site having no security scan.\u0004No scanning":["Nenhuma verificação"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Atualize"],"Short message informing user that the site is secure.\u0004Secure":["Protegido"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Chave inválida"],"Caption for a button to set up a feature.\u0004Set up":["Configurar"],"verb\u0004Copy":["Copiar"],"Shorthand for Privacy Policy.\u0004Privacy":["Privacidade"],"Shorthand for Terms of Service.\u0004Terms":["Termos"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Depurar"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["Comentários de spam bloqueados."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-pt_PT-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-pt_PT-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index a5672de7..00000000
--- a/plugins/jetpack/languages/json/jetpack-pt_PT-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"pt"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":["Procurar por uma funcionalidade do Jetpack."],"Configure your Security Scans":[""],"Subscriber":["Subscritor"],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":["Cabeçalho dos comentários"],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":["Copiado!"],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":["Rever automaticamente o conteúdo quando:"],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":["Adicione uma frase"],"Cheatin' uh?":["A fazer batota?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":[""],"Save Settings":[""],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":[""],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found."],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["","%(number)s Views"],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":[""],"Learn more":["Saber Mais"],"Posts":["Artigos"],"Front page":["Página inicial"],"Pinterest":[""],"Google":[""],"Show related content after posts":["Mostrar conteúdo relacionado depois dos artigos"],"Related":["Relacionado"],"Save":["Guardar"],"Email Address":["Endereço de email"],"Media":["Media"],"Themes":[""],"Site Stats":["Estatísticas do site"],"Sharing":["Partilha"],"Testimonials":["Testemunhos"],"Cancel":["Cancelar"],"Comments":["Comentários"],"Ignored Phrases":["Frases Ignoradas"],"Use automatically detected language to proofread posts and pages":["Use o idioma automaticamente detectado para corrigir artigos e páginas"],"Redundant Phrases":["Frases Redundantes"],"Phrases to Avoid":["Frases a Evitar"],"Passive Voice":["Voz Passiva"],"Jargon":["Jargão"],"Hidden Verbs":["Verbos Escondidos"],"Double Negatives":["Negativas Duplas"],"Diacritical Marks":["Marcas Diacríticas"],"Complex Phrases":["Frases Complexas"],"Bias Language":["Linguagem Tendenciosa"],"English Options":["Opções de Inglês"],"Proofreading":["Revisão"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["O WordPress.com está de momento com problemas e é incapaz de dar combustível ao Jetpack. Por favor, tente novamente mais tarde."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[""],"You have successfully disconnected Jetpack":[""],"Edit":["Editar"],"Connected":[""],"Activate":["Activar"],"Active":["Activos"],"Search":["Termo"],"Settings":["Opções"],"Learn More":["Saber mais"],"Disconnect Jetpack":[""],"Test your site’s compatibility with Jetpack.":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":["Copiar"],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-ro_RO-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-ro_RO-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index d81552bf..00000000
--- a/plugins/jetpack/languages/json/jetpack-ro_RO-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);","lang":"ro"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":["Apoi, activează setul de funcționalități recomandate de Jetpack pentru a maximiza securitatea și performanța sitului. {{a}}Află mai multe despre cele incluse{{/a}}."],"We’re now collecting stats and securing your site. Welcome aboard.":["Acum colectăm statistici și îți securizăm situl. Bun venit la bord."],"{{a}}Skip, and explore features individually{{/a}}.":["{{a}}Sari și explorează fiecare funcționalitate în parte{{/a}}."],"Jetpack Business Plan":["Plan Business Jetpack"],"Jetpack Premium Plan":["Plan Premium Jetpack"],"Jetpack Personal Plan":["Plan Personal Jetpack"],"Get started with hassle-free design, stats, and performance tools.":["Începe cu proiectare fără probleme, statistici și instrumente de performanță."],"Welcome to Jetpack Free":["Bine ai venit la Jetpack gratuit"],"Jetpack Free Plan":["Plan Jetpack gratuit"],"Explore Jetpack plans":["Explorează planurile Jetpack"],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":["Stai liniștit și relaxat cu copiile de siguranță automate și suportul prioritar, ajungi la un public mai numeros folosind instrumentele SEO avansate, câștigi bani din sit prin difuzarea reclamelor și îți personalizezi situl cu oricare dintre cele 200 de teme premium."],"Jetpack offers so much more":["Jetpack oferă mult mai mult"],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":["Ai nevoie de ajutor? Caută pe situl nostru de suport pentru a afla despre situl tău, contul tău și cum poți profita la maxim de WordPress."],"Support documentation":["Documentație pentru suport"],"Chat bubbles representing getting in touch with support":["Baloane de discuții reprezentând contactarea suportului"],"Site Activity":["Activități sit"],"Start publicizing now":["Începi să faci publicitate acum"],"Reach a wider audience by automatically sharing your posts on social media.":["Ai o audiență mai mare prin partajarea automată a articolelor pe media socială."],"Increase traffic to your site":["Îți crești traficul pe sit"],"Explore free themes":["Explorează temele gratuite"],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":["Ai acces nelimitat la sute de teme profesionale și îți personalizezi situl exact așa cum vrei."],"A wide variety of themes and tools to customize a site":["O mare varietate de teme și instrumente pentru a personaliza un sit"],"Set up your site security":["Inițializează securitatea sitului"],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":["Împiedică atacurile de autentificare și primești imediat notificări când există o problemă cu situl tău."],"Site stats showing an evolution in traffic and engagement":["Statistici sit care arată o evoluție a traficului și angrenarea vizitatorilor"],"A hand holding a loupe":["O mână care ține o lupă"],"A chart showing an healthy increase in earnings":["Un grafic care arată o creștere sănătoasă a veniturilor"],"Interface showing a chronological list of changes and updates in a site":["Interfață care arată o listă cronologică a modificărilor și actualizărilor într-un sit"],"A cloud with multiple types of content floating around it":["Un nor cu mai multe tipuri de conținut care plutesc în jur"],"A folder holding real comments":["Un dosar care conține comentarii reale"],"Make your site faster":["Fă-ți situl mai rapid"],"Load pages faster by serving your images from our global network of servers.":["Încarcă paginile mai repede prin servirea imaginilor din rețeaua noastră globală de servere."],"A fast and performant website":["Un sit web rapid și performant"],"A secure site, locked and protected by Jetpack":["Un sit securizat, în siguranță și protejat de Jetpack"],"These settings won't apply to related posts added using the block editor.":["Aceste setări nu se vor aplica articolelor similare adăugate prin folosirea editorului de blocuri."],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["Face un duplicat al articolelor, paginilor, testimonialelor și portofoliilor existente. Tot conținutul va fi copiat, inclusiv textele, imaginile recomandate, setările de partajare și celelalte."],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":["Acest sit nu poate fi conectat la WordPress.com deoarece încalcă {{a}}Termenii de utilizare ai serviciului{{/a}} nostru."],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":["Conectează-ți situl web la rețelele din media socială pe care le folosești și îți partajezi conținutul în toate conturile sociale cu un singur clic. Când publici un articol, el va apărea pe toate conturile conectate."],"Add Like buttons to your posts and pages":["Adaugă butoane de apreciere în articolele și paginile tale"],"When visitors enjoy your content, let them show it with a Like.":["Când vizitatorii îți savurează conținutul, permite-le să se manifeste cu o Apreciere."],"Explore your Jetpack Professional plan!":["Studiază planul Jetpack Professional!"],"Explore your Jetpack Premium plan!":["Studiază planul Jetpack Premium!"],"Explore your Jetpack Personal plan!":["Studiază planul Jetpack Personal!"],"Create account":["Creează un cont"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["Jetpack îți propulsează situl, dar pentru a accesa toate funcționalitățile sale va trebui să-ți creezi un cont."],"Real-time, automated backups (unlimited storage)":["Copii de siguranță automate, în timp real (spațiu de stocare nelimitat)"],"Compose content the way you want to and streamline your publishing experience.":["Îți scrii conținutul așa cum vrei și simplifici experiența de publicare."],"Add a portfolio item":["Adaugă un portofoliu"],"Add a testimonial":["Adaugă un testimonial"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["Poți maximiza vizibilitatea sitului în motoarele de căutare și să vizualizezi statisticile de trafic în timp real."],"Create a Jetpack account to use this feature":["Creează un cont Jetpack pentru a utiliza această funcționalitate"],"Share your content on social media and increase audience engagement.":["Îți partajezi conținutul pe media socială și crești angrenarea publicului."],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["Jetpack îți va monitoriza continuu situl și te avertizează când este detectată o perioadă de nefuncționare."],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["Când este lansată o actualizare a unui modul, cea mai bună practică este să actualizezi imediat acel modul. Alege care module vrei să le actualizezi automat pentru ca situl tău să fie mereu în siguranță."],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["Își păstrezi situl în siguranță cu o securitate modernă și primești notificări când apar probleme tehnice."],"Error enabling Site accelerator. %(error)s":["Eroare la activarea acceleratorului de situri. %(error)s"],"Site accelerator is now speeding up your site!":["Acum acceleratorul de situri îți accelerează situl!"],"Enabling Site accelerator…":["Activez acceleratorului de situri..."],"Error disabling site accelerator. %(error)s":["Eroare la dezactivarea acceleratorului de situri. %(error)s"],"Site accelerator is no longer speeding up your site!":["Acceleratorul de situri nu îți mai accelerează situl!"],"Disabling site accelerator…":["Dezactivez acceleratorului de situri..."],"Load pages faster, optimize images, and speed up your visitors’ experience.":["Încarcă paginile mai repede, optimizează imaginile și accelerează experiența vizitatorilor."],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["Completează statisticile WordPress.com cu vizualizarea aprofundată a lui Google asupra vizitatorilor și șabloanelor de trafic."],"High-speed, high-definition video hosting with no third-party ads.":["Găzduire video de mare viteză, de înaltă definiție, fără reclame de la terți."],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["Programezi nelimitat, în avans, twituri, articole pe Facebook și pe alte rețele sociale."],"Marketing Automation":["Automatizare marketing"],"Activate Jetpack Search":["Activează căutarea Jetpack"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["Înlocuiește căutarea implicită WordPress cu o căutare propulsată de Elasticsearch, cu rezultate mai bune și o filtrare superioară."],"Start earning":["Începe să câștigi"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["WordAds îți permite să câștigi bani prin afișare de conținut promoțional. Începe să câștigi de azi."],"Spam is automatically blocked from your comments.":["Spamul este blocat automat în comentariile tale."],"Spam Filtering":["Filtrare spam"],"Browse premium themes":["Răsfoiește teme premium"],"Access hundreds of beautifully designed premium themes at no extra cost.":["Ai acces la sute de teme premium, proiectate frumos, fără niciun cost suplimentar."],"Try a premium theme":["Încearcă o temă premium"],"View settings":["Vezi setările"],"Create a Jetpack account to view your email followers":["Creează un cont Jetpack pentru a-ți vedea urmăritorii prin email"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["Deschide-ți situl pentru comentarii și invită-ți abonații să primească alerte când publici articole noi."],"Manage security settings":["Administrează setările de securitate"],"Built-in Performance":["Performanță nativă"],"Jetpack is ready for the new WordPress editor":["Jetpack este pregătit pentru noul editor WordPress"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["Astăzi, prezentăm primul val de blocuri de la Jetpack construite special pentru noua experiență de editare: buton Plăți simple, Formular, Hartă și Markdown."],"Build your Jetpack site with blocks":["Construiește-ți situl Jetpack cu blocuri"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["Un editor nou? Da! {{a}}Află mai mult{{/a}}."],"The features you rely on, adapted for the new WordPress editor.":["Funcționalitățile pe care te bazezi, adaptate pentru noul editor WordPress."],"Take me to the new editor":["Du-mă la noul editor"],"Testing Jetpack Connection":["Testez conexiunea Jetpack"],"There was an error testing Jetpack. Error: %(error)s":["A fost o eroare la testarea Jetpack. Eroare: %(error)s"],"New in Jetpack!":["Noutăți la Jetpack!"],"Speed up static file load times":["Accelerează timpii de încărcare a fișierelor statice"],"Speed up image load times":["Accelerează timpii de încărcare a imaginilor"],"Enable site accelerator":["Activează acceleratorul de situri"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["Paginile se încarcă mai repede dacă îi permiți lui Jetpack să-ți optimizeze imaginile și să servească imaginile și fișierele statice (cum ar fi CSS și JavaScript) din rețeaua noastră globală de servere."],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["Adaugă un nivel suplimentar de securitate pe situl tău web prin activarea autentificării WordPress.com și a autentificării securizate. Dacă ai mai multe situri cu această opțiune activată, vei putea să te autentifici pe fiecare cu aceleași date de conectare."],"View your site activity":["Vezi activitățile de pe situl tău"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["Vezi o listă cronologică a tuturor modificărilor și actualizărilor făcute pe situl tău într-un mod organizat, lizibil."],"Manually Verify ":["Confirmare manuală"],"Verify with Google":["Confirmare cu Google"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["Google îți va trimite emailuri dacă apar anumite evenimente pe situl tău, inclusiv pentru indicii că situl web a fost {{a1}}atacat{{/a1}} sau probleme la {{a2}}accesarea cu crawlere sau indexarea{{/a2}} sitului."],"or":["sau"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["Monitorizează traficul și performanța sitului tău din {{a}}Consola de căutare Google{{/a}}."],"Your site is verified with Google":["Situl tău este confirmat cu Google"],"Site failed to verify: %(error)s":["Situl a eșuat la confirmare: %(error)s"],"Verifying...":["Verific..."],"Add faster, more advanced searching to your site with Jetpack Professional.":["Adaugă căutări mai rapide și mai avansate pe sit cu Jetpack Professional."],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["Înlocuiește căutarea nativă din WordPress cu Căutarea Jetpack, o experiență de căutare avansată"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["Căutarea Jetpack înlocuiește căutarea nativă cu o căutare rapidă, extensibilă, personalizabilă și extrem de relevantă, găzduită în cloudul WordPress.com. Rezultatul: utilizatorii tăi găsesc mai repede conținutul dorit."],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["Căutarea nativă din WordPress este bună pentru siturile care nu au mult conținut. Pe măsură ce siturile se dezvoltă, căutările devin lente și afișează rezultate mai puțin relevante."],"Jetpack Search supports many customizations.":["Căutarea Jetpack are multe personalizări."],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["înlocuiește căutarea nativă cu o căutare rapidă, extensibilă, personalizabilă și extrem de relevantă, {{a}}găzduită în cloudul WordPress.com{{/a}}."],"Site is verified":["Situl este verificat"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}Pentru a crea un sit frumos care arată și funcționează exact așa cum vrei, Jetpack Professional îți oferă acces nelimitat la peste 200 de teme WordPress premium.{{/p}}{{p}}Jetpack Professional înseamnă mai mult decât găsirea unui design perfect. Totodată, înseamnă confort psihic, știind că vei avea suport prioritar din partea echipei noastre globale de experți, dacă ai nevoie.{{/p}}"],"Spam filtering and priority support.":["Filtrare spam și suport prioritar."],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["Când reclamele sunt activate, Jetpack generează automat un ads.txt personalizat adaptat pentru situl tău."],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["Jetpack generează automat un {{link}}ads.txt{{/link}} personalizat adaptat pentru situl tău. Dacă trebuie să adaugi intrări suplimentare pentru alte rețele, te rog adaugă-le în spațiul de mai jos, una pe linie."],"Custom ads.txt entries":["Intrări ads.txt personalizate"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}Pentru a crea un sit frumos, care arată și funcționează exact așa cum vrei, Jetpack Professional îți oferă acces nelimitat la peste 200 de teme WordPress premium.{{/p}}{{p}}Jetpack Professional înseamnă mai mult decât găsirea unui design perfect. De asemenea, poți fii deplin liniștit: copii de siguranță în timp real, scanare malware automată și suport prioritar din partea echipei noastre globale de experți, care garantează că situl tău va fi mereu în siguranță și securizat.{{/p}}"],"Introducing Premium Themes":["Prezentare teme premium"]," Premium Themes":["Teme premium"],"Privacy information":["Informații despre confidențialitate"],"Enable Lazy Loading for images":["Activează încărcarea lentă pentru imagini"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["Imaginile încărcate lent îmbunătățesc viteza sitului și creează o experiență de vizionare mai fluentă. Imaginile vor fi încărcate pe măsură ce vizitatorii derulează în jos pe ecran, în loc să fie încărcate toate odată."],"Performance & speed":["Performanță și viteză"],"Enable high-speed, ad-free video player":["Activează playerul video de mare viteză, fără reclame"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["Îți face conținutul pe care îl publici mai atractiv cu videouri de înaltă rezoluție. Cu Video Jetpack poți să-ți personalizezi playerul media și să oferi vizitatorilor videouri de mare viteză, fără reclame și mărci comerciale. Videourile sunt găzduite pe serverele noastre WordPress.com și nu reduc spațiul din planul de găzduire!"],"Video":["Video"],"Carousel color scheme":["Schemă de culori carusel"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Datele Exif arată vizitatorilor detaliile tehnice suplimentare ale unei fotografii, cum ar fi distanța focală, unghiulația și ISO."],"Show photo Exif metadata in carousel (when available)":["Arată metadatele Exif ale fotografiilor în carusel (când sunt disponibile)"],"Display images in a full-screen carousel gallery":["Afișează imagini în galerii de carusele pe ecran complet"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["Creează prezentări în carusele pe ecran complet pentru imaginile din articolele și paginile tale. Galeriile de carusele sunt prietenoase pentru mobil și încurajează vizitatorii sitului să interacționeze cu fotografiile tale."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["Bara de unelte WordPress.com înlocuiește bara de unelte implicită din administrarea WordPress și simplifică experiența ta pe WordPress. Ea oferă acces cu un singur clic pentru a-ți administra toate siturile, pentru a-ți actualiza profilul WordPress.com, pentru a vedea notificările și vizualiza siturile pe care le urmărești în Cititor."],"Portfolios shortcode: [portfolio]":["Scurtcod portofolii: [portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["Folosește {{portfolioLink}}portofolii{{/portfolioLink}} pe situl tău pentru a prezenta ceea ce ai realizat. Dacă tema ta nu suportă portofoliile Jetpack, poți folosi un scurtcod simplu pentru a le afișa pe sit."],"Testimonials shortcode: [testimonials]":["Scurtcod testimoniale: [testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["Adaugă {{testimonialLink}}testimoniale{{/testimonialLink}} pe situl tău web pentru a atrage clienți noi. Dacă tema ta nu suportă testimonialele Jetpack, poți folosi un scurtcod simplu pentru a le afișa pe sit."],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["În acest moment motoarele de căutare nu-ți pot accesa situl. Dacă vrei să-ți faci situl accesibil, du-te la {{a}}setări Afișare{{/a}} și activează „Vizibilitate pentru motoare de căutare”."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["Vești bune: Jetpack trimite automat harta sit la toate motoarele de căutare importante pentru indexare."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["Hărțile sit sunt fișiere pe care motoarele de căutare, precum Google sau Bing, le folosesc pentru a-ți indexa situl. Ele pot ajuta să-ți îmbunătățești clasarea în rezultatele de căutare. Când activezi această funcționalitate, Jetpack va crea hărți sit pentru tine și le va actualiza automat când se modifică conținutul sitului tău."],"Configure related posts in the Customizer":["Configurează articolele similare în Personalizator"],"Highlight related content with a heading":["Evidențiază conținutul similar cu un subtitlu"],"View security scan details":["Vezi detalii scanare de securitate"],"View backup history":["Vezi istoric copii de siguranță"],"Show a thumbnail image where available":["Arată o imagine miniatură, unde este disponibilă"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["Pentru mai multe informații despre cum funcționalitățile Jetpack folosesc datele și urmăresc activitatea, te rog consultă {{privacyCenterLink}}Centru nostru pentru confidențialitate{{/privacyCenterLink}}."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["Folosim și alte instrumente de urmărire, inclusiv unele de la terți. {{cookiePolicyLink}}Citește despre ele{{/cookiePolicyLink}} și despre cum le controlăm."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["Aceste informații ne ajută să ne îmbunătățim produsele, să facem un marketing mai relevant pentru tine, să-ți personalizăm experiența WordPress.com și altele, așa cum am detaliat în {{pp}}politica noastră de confidențialitate{{/pp}}."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["Partajează informații cu instrumentul nostru de analitice despre utilizarea serviciilor în timp ce ești autentificat în contul tău WordPress.com. {{cookiePolicyLink}}Află mai mult{{/cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["Această funcționalitate este administrată de un administrator al sitului. {{link}}Află mai mult{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["Această funcționalitate a fost dezactivată de un administrator al sitului. {{link}}Află mai mult{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["Această funcționalitate a fost activată de un administrator al sitului. {{link}}Află mai mult{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["%(moduleName)s a fost dezactivată de un administrator al sitului. {{link}}Află mai mult{{/link}}."],"This feature has been disabled by a site administrator.":["Această funcționalitate a fost dezactivată de un administrator al sitului."],"%(moduleName)s has been disabled by a site administrator.":["%(moduleName)s a fost dezactivată de un administrator al sitului."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["Poți plasa reclame suplimentare folosind piesa Reclame. {{link}}Încearcă!{{/link}}"],"Configure your notification settings":["Configurează-ți setările pentru notificări"],"Monitor your site's downtime":["Monitorizează perioadele de nefuncționare ale sitului tău"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["Căutarea Jetpack este un înlocuitor puternic pentru capabilitatea nativă de căutare din WordPress."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["Fișierele sitului tău sunt scanate regulat pentru modificări neautorizate sau suspecte care ți-ar putea compromite securitatea și datele."],"Plugin needs updating.":["Modulul necesită actualizare.","Modulele necesită actualizare.","Modulele necesită actualizare."],"%(number)s":["%(number)s","%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Actualizări module de la Jetpack îți permite să alegi care module se actualizează automat."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack îți va optimiza imaginile și le va servi de la serverul care este cel mai aproape de vizitatorii tăi. Folosirea rețelei noastre globale de livrare a conținutului îți va crește viteza de încărcare a sitului."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":["Monitorul Jetpack pentru perioadele de nefuncționare îți va monitoriza continuu situl și te avertizează în momentul când este detectată o perioadă de nefuncționare."],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Copiile de siguranță Jetpack îți permit să restaurezi sau să descarci cu ușurință o copie de siguranță făcută la un anumit moment."],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet îți verifică de spam comentariile și trimiterile formularelor de contact folosind baza de date globală de spam."],"Privacy Information":["Informații despre confidențialitate"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["VideoPress îți permite să încarci videouri de pe computer pentru a fi găzduite pe WordPress.com, nu pe serverele gazdei. Apoi le poți insera în situl tău Jetpack auto-găzduit."],"Add the Search (Jetpack) widget to your sidebar":["Adaugă piesa Căutare (Jetpack) în bara ta laterală"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["Le oferă vizitatorilor o experiență excelentă de căutare lăsându-i să filtreze și să sorteze rapid rezultatele de căutare relevante."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["Activează o temă ușoară, prietenoasă pentru mobil, care va fi afișată vizitatorilor pe dispozitive mobile."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["Încarcă automat articolele următoare când cititorul se apropie de partea de jos a paginii."],"Allows you to publish new posts by sending an email to a special address.":["Permite să publici articole noi prin trimiterea unui email la o adresă specială."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["Permite să scrii conținut cu legături, liste și alte stiluri folosind sintaxa Markdown."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["Verifică în conținut gramatica și ortografia corectă, cuvintele folosite greșit și stilul în timp ce scrii."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["Oferă tagurile ascunse necesare pentru a-ți verifica situl WordPress cu diverse servicii."],"Displays information on your site activity, including visitors and popular posts or pages.":["Afișează informații despre activitatea sitului tău, inclusiv numărul de vizitatori și articolele sau paginile populare."],"Allows you to optimize your site and its content for better results in search engines.":["Permite să-ți optimizezi situl și conținutul lui pentru rezultate mai bune în motoarele de căutare."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["Integrează situl tău WordPress cu Google Analytics, o platformă care oferă perspective despre trafic, vizitatori și conversii."],"Displays high-quality ads on your site that allow you to earn income.":["Afișează reclame de înaltă calitate pe situl tău care îți permit să câștigi bani."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["Adaugă butoane de partajare la conținutul tău, astfel vizitatorii pot să-l partajeze pe siturile de media socială."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["Permite să-ți partajezi automat cel mai nou conținut pe siturile de media socială, inclusiv pe Facebook și Twitter."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["Adaugă butoane de apreciere la conținutul tău, astfel vizitatorii pot să-și arate aprecierea sau bucuria."],"Allows registered users to log in to your site with their WordPress.com accounts.":["Permite utilizatorilor înregistrați să se autentifice pe situl tău cu conturile lor WordPress.com."],"Protects your site from traditional and distributed brute force login attacks.":["Îți protejează situl împotriva atacurilor de autentificare cu forță-brută, atât de obișnuite și de răspândite."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["Îți face copii de siguranță ale sitului pe serverele WordPress.com globale, permițând să-ți restaurezi conținutul în caz de urgență sau în urma unei erori."],"Removes spam from comments and contact forms.":["Înlătură spamul din comentarii și formularele de contact."],"We are committed to your privacy and security. ":["Contribuim la confidențialitatea și securitatea ta."],"View all Jetpack plans":["Vezi toate planurile Jetpack"],"Manage your plan":["Administrează-ți planul"],"Your Plan":["Planul tău"],"You’re currently on Jetpack %(plan)s.":["Acum folosești %(plan)s Jetpack."],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["Permite cititorilor să se aboneze la articolele sau comentariile tale și să primească notificări prin email când apare conținut nou."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["Înlocuiește formularul WordPress standard de comentarii cu un nou sistem de comentarii care include opțiuni de autentificare în media socială."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}Activează{{/a}} pentru a înlocui căutarea nativă din WordPress cu Căutarea Jetpack, o experiență de căutare avansată."],"Add Search (Jetpack) Widget":["Adaugă piesa Căutare (Jetpack)"],"Jetpack Search is powering search on your site.":["Căutare Jetpack propulsează căutarea pe situl tău."],"Manage your plugins":["Administrează-ți modulele"],"Moderate comments":["Moderează comentariile"],"Error updating privacy settings. %(error)s":["Eroare la actualizarea setărilor de confidențialitate. %(error)s"],"Updated privacy settings.":["Setări de confidențialitate actualizate."],"Updating privacy settings…":["Actualizez setările de confidențialitate..."],"Add Jetpack Search Widget":["Adaugă piesa Căutare Jetpack"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["Adaugă piesa Căutare Jetpack în bara ta laterală pentru a configura sortarea și filtrele."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["Suită completă de securitate, instrumente de automatizare pentru marketing și venituri, găzduire video nelimitată, teme nelimitate, căutare îmbunătățită și suport prioritar."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["Suită completă de securitate, instrumente de automatizare pentru marketing și venituri, găzduire video nelimitată și suport prioritar."],"Daily backups, spam filtering, and priority support.":["Copii de siguranță zilnice, filtrare spam și suport prioritar."],"Always-on Security":["Întotdeauna în siguranță"],"Activate video hosting":["Activează găzduire video"],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Copii de siguranță în timp real pentru toate datele sitului tău cu spațiu de stocare nelimitat, restaurări printr-un singur clic, scanare de securitate automată și suport prioritar."],"Design the perfect website":["Proiectează situl web perfect"],"Set up Jetpack":["Inițializează Jetpack"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["Copii de siguranță în timp real a tuturor datelor sitului cu spațiu nelimitat, restaurări printr-un singur clic și scanare de securitate automată."],"Jetpack Search":["Căutare Jetpack"],"Jetpack version %(version)s":["Jetpack versiunea %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["Se fac copii de siguranță ale sitului tău în timp real și este scanat periodic pentru amenințări de securitate."],"Daily backup of all your site data with unlimited space and one-click restores":["Copii de siguranță zilnice ale tuturor datelor sitului tău cu spațiu de stocare nelimitat și restaurări printr-un singur clic"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Copii de siguranță zilnice ale tuturor datelor sitului cu spațiu de stocare nelimitat, restaurări printr-un singur clic, scanare automată de securitate și suport prioritar"],"View your security activity":["Vezi activitatea de securitate"]," (powered by VaultPress).":[" (propulsate de VaultPress)."],"Customize Search Widget":["Personalizează piesa Căutare"],"Please correct the issue below and try again.":["Te rog corectează problema de mai jos și încearcă din nou.","Te rog corectează problemele enumerate de mai jos și încearcă din nou.","Te rog corectează problemele enumerate de mai jos și încearcă din nou."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["Ne asigurăm că situl tău nu are nicio amenințare de securitate. Vei fi notificat dacă găsim vreuna."],"Your site is being backed up in real-time.":["Se fac copii de siguranță ale sitului tău în timp real."],"Jetpack version":["Versiune Jetpack"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}Vizualizează-ți activitatea sitului{{/a}} într-un singur flux."],"Activity":["Activitate"],"Confirm each new phrase you add by pressing enter.":["Confirmă fiecare expresie nouă pe care o adaugi apăsând pe Enter."],"{{a}}View details{{/a}}":["{{a}}Vezi detalii{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["Îți mulțumim că ai ales planul Jetpack Professional. Acum Jetpack face copii de siguranță ale conținutul tău în timp real, indexează conținutul pentru căutare, scanează pentru amenințări de securitate și acordă acces la teme premium."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["Cu Jetpack Professional, poți crea situl perfect cu una din cele peste 300 de teme WordPress proiectate în mod profesionist, inclusiv peste 200 de teme premium. Personalizează-ți conținutul cu o varietate de piese sau adaugă videouri nelimitate în articolele și paginile tale - afișate fără reclame sau filigrane."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["Creșterea numărului de urmăritori este simplă cu planul Professional, datorită partajării și programării conținutului, instrumentelor SEO și opțiunilor de abonare native. Poți genera bani cu situl tău cu un buton Plați simple și cu reclame în-linie și să monitorizezi succesul eforturilor tale prin integrarea cu Google Analytics."],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Jetpack Professional îți oferă tot ceea ce ai nevoie pentru a-ți păstra în siguranță munca depusă, inclusiv copii de siguranță la cerere și scanări malware, cu restaurări printr-un singur clic și rezolvarea problemelor. Situl tău va fi protejat în totalitate împotriva spamului, codului care provoacă vulnerabilități și încercărilor de autentificare cu forță-brută."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Începe să explorezi Jetpack Professional acum pentru a vedea toate avantajele noului tău plan."],"Install premium themes":["Instalează teme premium"],"Review SEO features":["Examinează funcționalitățile SEO"],"Welcome Professional":["Bine ai venit la Professional"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["Îți mulțumim că ai ales planul Jetpack Premium. Acum Jetpack face copii de siguranță ale situl tău, îl scanează pentru amenințări de securitate și activează funcționalități pentru generare de bani."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["Cu Jetpack Premium, poți crea situl perfect, indiferent de scopul lui. Îți personalizezi aspectul sitului cu una din cele peste 100 de teme gratuite sau îți îmbunătățești conținutul cu videouri HD nelimitate - toate găzduite fără reclame sau filigrane."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Folosind instrumentele de partajare puternice de la Jetpack, poți să-ți partajezi automat cele mai noi articole pe media socială sau să-ți programezi conținutul să fie re-partajat la orice dată sau oră pe care o alegi. Și împreună cu creșterea numărului de urmăritori, poți să-ți dezvolți afacerea cu instrumente precum butoane de plată și reclame."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Începe să explorezi Jetpack Premium acum pentru a vedea toate avantajele noului tău plan."],"Monetize your site with ads":["Generezi bani cu situl tău prin reclame"],"Welcome Premium":["Bine ai venit la Premium"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["Îți mulțumim că ai ales planul Jetpack Personal. Acum Jetpack face copii de siguranță ale situl tău și îl scanează pentru amenințări de securitate."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["Cu Jetpack Personal, ai acces la peste 100 de teme WordPress gratuite, proiectate în mod profesionist. Alege tema care se potrivește cel mai bine cu situl tău și personalizează culorile, imaginile sau adaugă o varietate de piese noi."],"Got it":["Am înțeles"],"Welcome personal":["Bine ai venit la Personal"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["Dând clic pe butonul de mai jos, ești de acord cu {{a}}termenii noștri de utilizare ai serviciului{{/a}} și să {{shareDetailsLink}}partajezi detalii{{/shareDetailsLink}} cu WordPress.com."],"Jetpack Stats People":["Statistici Jetpack despre persoane"],"Hello there! Your stats have been activated.":["Bună! Statisticile tale au fost activate."],"Just give us a little time to collect data so we can display it for you here.":["Doar acordă-ne ceva timp pentru a colecta date pentru a putea să le afișăm aici."],"Okay, got it!":["OK, am înțeles!"],"Display ads below posts on":["Afișează reclame sub articole"],"Additional ad placements":["Locuri suplimentare de plasare a anunțurilor"],"Top of each page":["În partea de sus a fiecărei pagini"],"Second ad below post":["Al doilea anunț sub articole"],"Archives":["Arhive"],"Explore Professional":["Explorează Professional"],"Compare All Plans":["Compară toate planurile"],"Person with laptop":["Persoană cu laptop"],"Your Jetpack site is ready to go!":["Situl tău Jetpack este gata să pornească!"],"Stars":["Stele"],"Jupiter":["Jupiter"],"Welcome to Jetpack Personal":["Bine ai venit la Jetpack Personal"],"Welcome to Jetpack Premium":["Bine ai venit la Jetpack Premium"],"Welcome to Jetpack Professional":["Bine ai venit la Jetpack Professional"],"Schedule posts":["Programează articole"],"Activate Publicize":["Activează Publicitate"],"Your site is backed up.":["Situl tău are copie de siguranță."],"Image Performance":["Performanță imagine"],"Get WordPress Apps for every device":["Primești aplicații WordPress pentru fiecare dispozitiv"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Administrează-ți toate siturile dintr-un singur panou de control: publici conținut, urmărești statistici, moderezi comentarii și multe altele de oriunde în lume."],"I already use this app.":["Deja folosesc această aplicație."],"Create address":["Creează adresă"],"Priority support":["Suport prioritar"],"Add sharing buttons to your posts":["Adaugă butoane de partajare în articolele tale"],"Automatically share your posts to social networks":["Partajează automat articolele tale pe rețele sociale"],"Updating settings…":["Actualizez setările..."],"Updating Post by Email address…":["Actualizez adresa Publicare via email..."],"Your paid plan gives you access to prioritized Jetpack support.":["Planul tău plătit îți oferă acces la suportul prioritar Jetpack."],"You have paid for backups but they're not yet active.":["Ai plătit pentru copii de siguranță dar ele nu sunt încă active."],"You have paid for backups and security scanning but they’re not yet active.":["Ai plătit pentru copii de siguranță și scanare de securitate dar ele nu sunt încă active."],"Click \"Set Up\" to finish installation.":["Dă clic pe „Inițializează” pentru a termina instalarea."],"Checking site status…":["Verific starea sitului..."],"Pages":["Pagini"],"We're here to help":["Suntem aici pentru a ajuta"],"Jetpack comes with free, basic support for all users.":["Jetpack vine cu suport gratuit, de bază, pentru toți utilizatorii."],"Ask a question":["Pune o întrebare"],"Search our support site":["Caută situl nostru pentru suport"],"Get a faster resolution to your support questions.":["Obții o rezolvare mai rapidă la întrebările de suport."],"Host fast, high-quality, ad-free video.":["Găzduiește video rapid, de înaltă calitate, fără anunțuri."],"Generate income with high-quality ads.":["Generează venituri cu reclame de înaltă calitate."],"Real-time site backups and automatic threat resolution.":["Copii de siguranță sit în timp real și rezolvarea automată a amenințărilor."],"Protect against data loss, malware, and malicious attacks.":["Protejează împotriva pierderii de date, malware și atacurilor rău intenționate."],"Integrate easily with Google Analytics.":["Se integrează cu ușurință cu Google Analytics."],"Help your content get found and shared with SEO tools.":["Ajută să-ți fie găsit și partajat conținutul cu instrumente SEO."],"Protect your site from spam.":["Îți protejează situl de spam."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["Acest sit nu este conectat la WordPress.com. Te rog cere-i administratorului sitului să-l conecteze."],"Spam filtering":["Filtrare spam"],"Daily, automated malware scanning":["Scanare malware zilnică, automată"],"Daily, automated backups (unlimited storage)":["Copii de siguranță zilnice, automate (stocare nelimitată)"],"Daily, automated malware scanning with automated resolution":["Scanare malware zilnică, automată, cu rezoluție automată"],"Unlimited, high-speed video hosting":["Găzduire video nelimitată, de mare viteză"],"SEO preview tools":["Instrumente de previzualizare SEO"],"Site stats, related content, and sharing tools":["Statistici sit, conținut similar și instrumente de partajare"],"Brute force attack protection and downtime monitoring":["Protecție împotriva atacurilor cu forță-brută și monitorizare perioade de nefuncționare"],"Unlimited, high-speed image hosting":["Găzduire de imagini nelimitată, de mare viteză"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["Prin deconectarea %(siteName)s de la WordPress.com nu vei mai avea acces la următoarele:"],"Read more about Jetpack benefits":["Citește mai mult despre beneficiile Jetpack"],"An Automattic Airline":["O linie aeriană Automattic"],"Manage site connection":["Administrează conexiune sit"],"Connect your account to WordPress.com to view more stats":["Conectează-ți contul la WordPress.com pentru a vizualiza mai multe statistici"],"Theme enhancements":["Îmbunătățiri temă"],"Load more posts using the default theme behavior":["Încarcă mai multe articole folosind comportamentul implicit al temei"],"Load more posts in page with a button":["Încarcă mai multe articole în pagină cu un buton"],"Load more posts as the reader scrolls down":["Încarcă mai multe articole pe măsură ce cititorul derulează în jos"],"Theme support required.":["Suport temă necesar."],"Learn more about adding support for Infinite Scroll to your theme.":["Află mai mult despre adăugarea suportului pentru Derulare infinită în teme ta."],"Use excerpts instead of full posts on front page and archive pages":["Folosește rezumate în loc de articole complete în pagina din față și pagini de arhivă"],"Show featured images":["Arată imagini reprezentative"],"Enable the WordPress.com toolbar":["Activează bara de instrumente WordPress.com"],"Writing tools available to you will be shown here when an administrator enables them.":["Instrumentele de scris disponibile vor fi arătate aici când un administrator le activează."],"Portfolios":["Portofolii"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Reține că {{b}}verificarea sitului cu aceste servicii nu este necesară{{/b}} pentru ca situl tău să fie indexat de motoarele de căutare. Pentru a folosi aceste instrumente avansate pentru motoarele de căutare și a-ți confirma situl cu un serviciu, plasează codul tagului HTML mai jos. Dacă ai probleme, citește {{support}}instrucțiunile complete{{/support}}. Servicii de verificare acceptate: {{google}}Consolă de căutare Google{{/google}}, {{bing}}Centru webmasteri Bing{{/bing}}, {{pinterest}}Verificare sit Pinterest{{/pinterest}} și {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["Generează hărți sit XML"],"Collecting valuable traffic stats and insights":["Colectez statistici de trafic valoroase și perspective"],"The image helps collect stats, but should work when hidden.":["Imaginea ajută la colectarea statisticilor, dar ar trebui să funcționeze când este ascunsă."],"Count logged in page views from":["Număr vizualizări pagină de autentificare de la"],"Allow stats reports to be viewed by":["Permite ca rapoartele statistici să fie vizualizate de"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["Poți ajusta aceste setări dacă vrei un control mai avansat. Citește mai mult despre ceea ce poți face pentru a-ți {{a}}optimiza SEO pentru sit{{/a}}."],"Configure your SEO settings":["Configurează-ți setările SEO"],"In \"Upgrade\"":["În „Actualizare”"],"Configure your Google Analytics settings":["Configurează-ți setările Google Analytics"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Arată reclame în primul articol din prima ta pagină sau la sfârșitul fiecărei pagini și fiecărui articol. Plasează reclame suplimentare în partea de sus a sitului și în orice zonă asamblabilă pentru a-ți crește câștigurile."],"Enable ads and display an ad below each post":["Activează reclamele și afișează o reclamă sub fiecare articol"],"Configure your sharing buttons":["Configurează-ți butoanele de partajare"],"Connect your social media accounts":["Conectează-ți conturile media socială"],"Match accounts using email addresses":["Leagă conturile folosind adrese de email"],"Require accounts to use WordPress.com Two-Step Authentication":["Necesită conturi pentru a folosi autentificarea în-doi-pași WordPress.com"],"Add to whitelist":["Adaugă în lista albă"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["Poți trece în lista albă o adresă IP sau o serie de adrese împiedicându-le de a fi blocate vreodată de către Jetpack. IPv4 și IPv6 sunt acceptate. Pentru a specifica un interval, introdu valoarea mică și valoarea mare separate printr-o liniuță. Exemplu: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["Situl tău are copie de siguranță și nu-i amenințat."],"Checking your spam protection…":["Îți verific protecția spam..."],"Fetching key…":["Aduc cheia..."],"Your site needs an Antispam key.":["Situl tău are nevoie de o cheie anti-spam."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["Există o problemă cu cheia ta anti-spam. {{a}}Află mai mult{{/a}}."],"Your site is not protected from spam.":["Situl tău nu este protejat împotriva spamului."],"Your Antispam key is valid.":["Cheia ta anti-spam este validă."],"Your site is protected from spam.":["Situl tău este protejat împotriva spamului."],"Checking key…":["Verific cheia..."],"Your API key":["Cheia ta API"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["Dacă nu ai deja o cheie API, atunci {{a}}obține-ți cheia API aici{{/a}} și vei fi ghidat prin procesul de a obține una."],"No search results found for %(term)s":["Niciun rezultat de căutare găsit pentru %(term)s"],"Enter a search term to find settings or close search.":["Introdu un termen de căutare pentru a găsi setările sau închide căutarea."],"Connections":["Conexiuni"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Situl tău este în Modul dezvoltare, deci nu poate fi conectat la WordPress.com."],"Your site is connected to WordPress.com.":["Situl tău este conectat la WordPress.com."],"You are the Jetpack owner.":["Ești proprietarul Jetpack."],"Connected as {{span}}%(username)s{{/span}}":["Conectat ca {{span}}%(username)s{{/span}}"],"View your Email Followers":["Vezi urmăritorii tăi prin email"],"Color scheme":["Schemă de culori"],"Enable Markdown use for comments.":["Activează folosirea Markdown pentru comentarii."],"Updated settings.":["Setări actualizate."],"Error updating settings. %(error)s":["Eroare la actualizarea setărilor. %(error)s"],"Regenerated Post by Email address.":["Adresă Publicare via email regenerată."],"Error regenerating Post by Email address. %(error)s":["Eroare la regenerarea adresei Publicare via email. %(error)s"],"Updated settings. Refreshing page…":["Setări actualizate. Reîmprospătez pagina..."],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["Acum în {{a}}mod dezvoltare{{/a}} (unele funcționalități sunt dezactivate) deoarece: {{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}Filtrul jetpack_development_mode este activ{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}Constanta JETPACK_DEV_DEBUG este definită{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}URL-ul sitului tău nu are un punct (de exemplu: http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics este un serviciu gratuit care completează {{a}}statisticile noastre native{{/a}} cu diferite perspective pentru trafic. Statisticile WordPress.com și Google Analytics folosesc metode diferite pentru a identifica și urmări activitatea pe situl tău, prin urmare ele vor apărea în mod normal ușor diferit ca sumă totală pentru vizite, vizualizări, etc."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Configurează Google Analytics"],"Activate Google Analytics":["Activează Google Analytics"],"Download the free apps":["Descarcă aplicațiile gratuite"],"Upgrade Focus: VideoPress For Weddings":["Actualizare în atenție: VideoPress pentru nunți"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}Acum poți configura, de asemenea, articolele similare în personalizator. {{ExternalLink}}Încearcă!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["Reclamele sunt afișate implicit la sfârșitul fiecărei pagini, fiecărui articol sau după primul articol din pagina din față. Poți să le adaugi, de asemenea, în partea de sus a sitului și în orice zonă asamblabilă pentru a-ți crește câștigurile!"],"Display an ad unit at the top of your site.":["Afișează o unitate de anunțuri în partea de sus a sitului."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["Prin activarea reclamelor, ești de acord cu {{link}}termenii de utilizare ai serviciului{{/link}} Reclame de la Automattic."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Serverul tău este configurat incorect, asta înseamnă că Protecție Jetpack nu poate să-ți protejeze în mod eficient situl."],"In \"Mobile\"":["În \"Mobil\""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Configurează-ți setările de notificare pentru Monitor pe WordPress.com{{/link}}"],"View your earnings":["Vizualizează-ți câștigurile"],"Configure site SEO":["Configurează SEO pentru sit"],"Activate SEO tools":["Activează instrumentele SEO"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["Pentru a începe, dă clic pe Adaugă media în editorul tău de articol și încarcă un video; vom avea grijă de restul!"],"Video Hosting":["Găzduire video"],"SEO Tools":["Instrumente SEO"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Instrumente SEO avansate pentru a-ți ajuta situl să fie găsit când oamenii caută un conținut relevant."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["Cel mai simplu mod de a încărca videouri fără anunțuri și nume de brand pe situl tău. Obții statistici despre redarea și partajarea videoului și playerul este ușor și responsiv."],"You are running Jetpack on a staging server.":["Rulezi Jetpack pe un server de așteptare."],"More Info":["Mai multe informații"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Administrează vizibilitate aprecieri din setările extensiei Partajare{{/a}}"],"Your current IP: %(ip)s":["IP-ul tău actual: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["Există setări nesalvate în această filă care se vor pierde dacă o părăsești. Continui?"],"This will reset all Jetpack options, are you sure?":["Acest lucru va reseta toate opțiunile Jetpack, ești sigur?"],"Search for a Jetpack feature.":["Caută o funcționalitate Jetpack."],"Configure your Security Scans":["Configurează-ți scanările de securitate"],"Subscriber":["Abonat"],"Big iPhone/iPad Update Now Available":["Este disponibilă o importantă actualizare pentru iPhone/iPad"],"The WordPress for Android App Gets a Big Facelift":["Aplicația WordPress pentru Android primește o mare îmbunătățire vizuală"],"WordPress.com Likes are:":["Aprecierile WordPress.com sunt:"],"Comments headline":["Titlu comentarii"],"A few catchy words to motivate your readers to comment.":["Câteva cuvinte atrăgătoare pentru a-ți motiva cititorii să comenteze."],"Show a \"follow blog\" option in the comment form":["Arată o opțiune „urmărește blogul” în formularul de comentarii"],"Show a \"follow comments\" option in the comment form":["Arată o opțiune „urmărește comentariile” în formularul de comentarii"],"Put a chart showing 48 hours of views in the admin bar":["Pune o diagramă în bara de administrare care arată vizualizările în 48 de ore"],"Hide the stats smiley face image":["Ascunde imaginea față zâmbitoare din statistici"],"Whitelisted IP addresses":["Adrese IP din lista albă"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Arată o reclamă în aplicațiile pentru mobil WordPress în subsolul temei pentru mobil"],"Copied!":["Copiat!"],"Highlight and copy the following text to your clipboard:":["Evidențiază și copiază următorul text în clipboard-ul tău:"],"Regenerate address":["Regenerează adresă"],"Automatically proofread content when: ":["Corectează automat conținutul când: "],"A post or page is first published":["Un articol sau o pagină este publicat(ă) prima dată"],"A post or page is updated":["Un articol sau o pagină este actualizat(ă)"],"Automatic Language Detection":["Detectare automată a limbii"],"The proofreader supports English, French, German, Portuguese and Spanish.":["Corectura se face pentru limba engleză, franceză, germană, portugheză și spaniolă."],"Enable proofreading for the following grammar and style rules: ":["Activează corectura pentru următoarele reguli gramaticale și de stil:"],"Add a phrase":["Adaugă o expresie"],"Cheatin' uh?":["Trișezi cumva?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}Te superi dacă ne spui de ce nu ai finalizat conexiunea Jetpack în aceste {{a}}2 sondaje cu întrebări{{/a}}?{{/p}}{{p}}Este necesară o conexiune Jetpack pentru ca funcționalitățile noastre gratuite de securitate și de trafic să funcționeze.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Bine ai venit la {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["Jetpack-ul tău este deja conectat."],"You're fueled up and ready to go, Jetpack is now active.":["Ești plin de energie și gata să pornești, Jetpack este activ acum."],"You're fueled up and ready to go.":["Ești plin de energie și gata să pornești."],"You are currently running a development version of Jetpack.":["Acum rulezi o versiune de dezvoltare a Jetpack."],"Submit Beta feedback":["Trimite impresii beta"],"What would you like to see on your Jetpack Dashboard?":["Ce ai vrea să vezi în panoul tău de control Jetpack?"],"Let us know!":["Anunță-ne!"],"Saving…":["Se salvează..."],"Save Settings":["Salvează setările"],"Jetpack Stats Icon":["Icon statistici Jetpack"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Activează statistici sit{{/a}} pentru a vedea statistici detaliate, aprecieri, urmăritori, abonați, și altele! {{a1}}Află mai multe{{/a1}}"],"Activate Site Stats":["Activează statistici sit"],"Security Scanning":["Scanare de securitate"],"Site Backups":["Copii de siguranță sit"],"Upgrade":["Actualizează"],"ACTIVE":["ACTIVEAZĂ"],"Your site is on Development Mode":["Situl tău este în Mod dezvoltare"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["După ce te-ai conectat, poți face actualizarea la un plan plătit pentru a debloca securitatea de clasă mondială, instrumentele de protecție spam și suportul prioritar."],"View your spam stats":["Vizualizează-ți statisticile spam"],"View your security dashboard":["Vizualizează-ți panoul control de securitate"],"The site is in Development Mode, so you can not connect to WordPress.com.":["Situl este în Mod dezvoltare, deci nu te poți conecta la WordPress.com."],"Link your account to WordPress.com to get the most out of Jetpack.":["Leagă-ți contul la WordPress.com pentru a obține maximum de la Jetpack."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["Pentru scanarea automatizată, comprehensivă a amenințărilor de securitate, te rog {{a}}instalează și activează{{/a}} VaultPress."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["Pentru scanarea automatizată, comprehensivă a amenințărilor de securitate, te rog {{a}}actualizează-ți contul{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack blochează în mod activ încercările de autentificare ostile. Datele vor afișa aici în curând!"],"Total malicious attacks blocked on your site.":["Total încercări de autentificare ostile blocate pe situl tău."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Activează Protecție{{/a}} pentru a-ți păstra situl protejat împotriva încercărilor de autentificare ostile."],"All plugins are up-to-date. Awesome work!":["Toate modulele sunt actualizate. Foarte bine!"],"Jetpack is improving and optimizing your image speed.":["Jetpack îți îmbunătățește și îți optimizează viteza imaginii."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack îți monitorizează situl. Dacă ni se pare că situl tău a căzut, vei primi un email."],"Security":["Securitate"],"Performance":["Performanță"],"Backups":["Copii de siguranță"],"{{a}}View backup details{{/a}}.":["{{a}}Vezi detalii copie de siguranță{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["Pentru a-ți face automat o copie de rezervă a întregului sit, te rog {{a}}instalează și activează{{/a}} VaultPress."],"Unavailable in Dev Mode.":["Indisponibil în Mod dezvoltare"],"Spam Protection":["Protecție spam"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["Pentru apărare contra spam modernă, te rog {{a}}instalează Akismet{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["Pentru apărare contra spam modernă, te rog {{a}}activează Akismet{{/a}}."],"Invalid key":["Cheie invalidă"],"Unavailable in Dev Mode":["Indisponibil în Mod dezvoltare"],"Activating recommended features…":["Activez funcționalitățile recomandate..."],"Recommended features active.":["Funcționalități recomandate active."],"Recommended features failed to activate. %(error)s":["Funcționalitățile recomandate au eșuat la activare. %(error)s"],"Activating %(slug)s…":["Se activează %(slug)s…"],"%(slug)s has been activated.":["%(slug)s a fost activat."],"%(slug)s failed to activate. %(error)s":["%(slug)s a eșuat la activare. %(error)s"],"Deactivating %(slug)s…":["Se dezactivează %(slug)s…"],"%(slug)s has been deactivated.":["%(slug)s a fost dezactivat."],"%(slug)s failed to deactivate. %(error)s":["%(slug)s a eșuat la dezactivare. %(error)s"],"Updating %(slug)s settings…":["Se actualizează setările %(slug)s..."],"Updated %(slug)s settings.":["Setări %(slug)s actualizate."],"Error updating %(slug)s settings. %(error)s":["Eroare la actualizarea setărilor %(slug)s. %(error)s"],"Updating %(slug)s address…":["Se actualizează adresa %(slug)s..."],"Regenerated %(slug)s address .":["Adresa %(slug)s regenerată."],"Error regenerating %(slug)s address. %(error)s":["Eroare la regenerarea adresei %(slug)s. %(error)s"],"Resetting Jetpack options…":["Se resetează opțiunile Jetpack..."],"Options reset.":["Opțiuni resetate."],"Options failed to reset.":["Opțiunile au eșuat la resetare."],"There was an error disconnecting Jetpack. Error: %(error)s":["A fost o eroare la deconectarea Jetpack. Eroare: %(error)s"],"Unlinking from WordPress.com":["Anulare legătură de la WordPress.com"],"Unlinked from WordPress.com.":["Legătură anulată de la WordPress.com."],"Error unlinking from WordPress.com. %(error)s":["Eroare la anularea legăturii de la WordPress.com. %(error)s"],"At A Glance":["Dintr-o privire"],"Clichés":["Clișee"],"Dashboard":["Panou control"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Vrei să ne spui de ce? Doar {{a}}răspunzând la două întrebări simple{{/a}} ne-ar ajuta să îmbunătățim Jetpack."],"Automattic's Privacy Policy":["Politica de confidențialitate Automattic"],"WordPress.com Terms of Service":["Termenii de utilizare a serviciului WordPress.com"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}Activează{{/a}} pentru a îmbunătăți performanța și viteza imaginilor tale."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Activează actualizările automate pentru module{{/a}}"],"Plugin Updates":["Actualizări module"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["Pentru a face automat o copie de siguranță a întregului tău sit, te rog {{a}}actualizează-ți contul.{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["Hopa! Cheia ta Askimet lipsește sau este invalidă. {{akismetSettings}}Mergi la setări Akismet pentru a corecta{{/akismetSettings}}."],"No threats found, you're good to go!":["Nicio amenințare găsită, foarte bine!"],"{{a}}Contact Support{{/a}}":["{{a}}Contactează suportul{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}Vezi detalii la VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["Aoleu, %(number)s amenințare găsită.","Aoleu, %(number)s amenințări găsite.","Aoleu, %(number)s de amenințări găsite."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}Activează Monitorul{{/a}} pentru a primi notificări prin email când situl tău cade."],"Loading…":["Se încarcă..."],"Downtime monitoring":["Monitorizare perioade de nefuncționare"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}Vezi mai multe statistici pe WordPress.com{{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}Vezi statistici detaliate{{/button}}"],"All-time comments":["Total comentarii"],"All-time views":["Total vizualizări"],"%(number)s View":["%(number)s vizualizare","%(number)s vizualizări","%(number)s de vizualizări"],"Best overall day":["Cea mai bună zi în ansamblu"],"Views today":["Vizualizări astăzi"],"Months":["Luni"],"Weeks":["Săptămâni"],"Days":["Zile"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["S-a întâmplat ceva în timpul încărcării statisticilor. Te rog încearcă din nou mai târziu sau {{a}}vizualizează-ți statisticile acum pe WordPress.com{{/a}}"],"Click to view detailed stats.":["Dă clic pentru a vedea statistici detaliate."],"Views: %(numberOfViews)s":["Vizualizări: %(numberOfViews)s"],"Week of %(date)s":["Săptămână de %(date)s"],"Site Security":["Securitate sit"],"Activate recommended features":["Activează funcționalitățile recomandate"],"Link to WordPress.com":["Legătură la WordPress.com"],"Unlink me from WordPress.com":["Anulează-mi legătura de la WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["Am avut o problemă de conectare a Jetpack; Te rog dă clic din nou pe &#8222;Conectare la WordPress.com&#8221;."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["Am avut o problemă de conectare a Jetpack; dezactivează și reactivează modulul Jetpack, apoi conectează-te din nou."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Trebuie să stai autentificat(ă) în blogul tău WordPress în timp ce îți autorizezi Jetpack-ul."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Jetpack-ul tău are o scăpare.{{/s}} Ne pare rău pentru neplăcerile create. Te rog reîncearcă mai târziu, iar dacă problema persistă te rog contactează suportul cu acest mesaj: %(error_key)s"],"Disconnecting Jetpack":["Deconectare Jetpack"],"Learn more":["Află mai multe"],"Posts":["Articole"],"Front page":["Pagina din față"],"Upload videos":["Încarcă videouri"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Arată conținutul similar după articole"],"Related":["Similare"],"Save":["Salvează"],"Email Address":["Adresă email"],"Media":["Media"],"Themes":["Teme"],"Site Stats":["Statistici sit"],"Sharing":["Partajare"],"Testimonials":["Testimoniale"],"Cancel":["Anulare"],"Comments":["Comentarii"],"Ignored Phrases":["Expresii ignorate"],"Use automatically detected language to proofread posts and pages":["Folosește detectarea automată a limbii pentru corectarea articolelor și paginilor "],"Redundant Phrases":["Expresii redundante"],"Phrases to Avoid":["Expresii de evitat"],"Passive Voice":["Diateză pasivă"],"Jargon":["Jargon"],"Hidden Verbs":["Verbe ascunse"],"Double Negatives":["Dublă negare"],"Diacritical Marks":["Semne diacritice"],"Complex Phrases":["Expresii complexe"],"Bias Language":["Limbaj deplasat"],"English Options":["Opțiuni engleză"],"Proofreading":["Corectură"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack nu a putut contacta WordPress.com: %(error_key)s. De obicei, înseamnă că ceva nu este configurat corect pe gazda ta web."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["Momentan WordPress.com are o problemă și nu se poate conecta cu Jetpack. Te rugăm să încerci din nou mai târziu."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Jetpack-ul tău are o scăpare.{{/s}} Conectarea acestui sit cu WordPress.com nu este posibilă. De obicei, asta înseamnă că situl tău nu este accesibil publicului (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Situl tău web trebuie să fie accesibil publicului pentru a folosi Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["Te-ai deconectat cu succes de la Jetpack"],"Edit":["Editare"],"Connected":["Conectat"],"Activate":["Activează"],"Active":["Activă"],"Search":["Căutare"],"Settings":["Setări"],"Learn More":["Află mai mult"],"Disconnect Jetpack":["Deconectează Jetpack-ul"],"Test your site’s compatibility with Jetpack.":["Testează compatibilitatea sitului tău cu Jetpack."],"Settings header\u0004Plugin Autoupdates":["Actualizări automate module"],"Settings header\u0004Downtime monitoring":["Monitorizare perioade de nefuncționare"],"Settings header\u0004Privacy Settings":["Setări de confidențialitate"],"Settings header\u0004WordPress.com toolbar":["Bară de instrumente WordPress.com"],"Settings header\u0004Composing":["Redactare"],"Settings header\u0004Site stats":["Statistici sit"],"Settings header\u0004Search engine optimization":["Optimizare pentru motoare de căutare"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Butoane de partajare"],"Settings header\u0004Publicize connections":["Conexiuni Publicitate"],"Settings header\u0004Like buttons":["Butoane de apreciere"],"Settings header\u0004WordPress.com log in":["Autentificare WordPress.com"],"Settings header\u0004Brute force attack protection":["Protecție împotriva atacurilor cu forță-brută"],"Settings header\u0004Backups and security scanning":["Copii de siguranță și scanare de securitate"],"Settings header\u0004Spam filtering":["Filtrare spam"],"Navigation item.\u0004Performance":["Performanță"],"Navigation item.\u0004My Plan":["Planul meu"],"Navigation item.\u0004Dev Tools":["Instrumente de dezvoltare"],"Navigation item.\u0004Settings":["Setări"],"Navigation item.\u0004Discussion":["Discuții"],"Navigation item.\u0004Traffic":["Trafic"],"Navigation item.\u0004Sharing":["Partajare"],"Navigation item.\u0004At A Glance":["Dintr-o privire"],"Navigation item.\u0004Plans":["Planuri"],"Navigation item.\u0004Writing":["Scriere"],"Navigation item.\u0004Reset Options (dev only)":["Opțiuni resetare (numai pentru versiuni de dezvoltare)"],"Navigation item.\u0004Security":["Securitate"],"Navigation item.\u0004At a Glance":["Dintr-o privire"],"Search term.\u0004terms of service":["termenii de utilizare ai serviciului"],"Search term.\u0004tos":["TUS"],"Search term.\u0004gdpr":["GDPR (Regulamentul general privind protecția datelor)"],"Search term.\u0004data":["date"],"Search term.\u0004tracks":["căi"],"Search term.\u0004privacy":["confidențialitate"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["Actualizează"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Actualizează"],"Button caption\u0004Saving…":["Salvez..."],"Button caption\u0004Save settings":["Salvează setările"],"A heading for a block of related posts.\u0004Related":["Similare"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Previzualizare"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Rămâi conectat"],"A caption for a button to disconnect.\u0004Disconnect":["Deconectează"],"Short warning message\u0004Updates needed":["Actualizări necesare"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Plătită"],"A header for a preview area in the configuration screen.\u0004Preview":["Previzualizează"],"Ads header\u0004Ads":["Reclame"],"Dashboard widget header\u0004Site connection":["Conexiune sit"],"Dashboard widget header\u0004Account connection":["Conexiune cont"],"A caption for a small button to fix security issues.\u0004Threats":["Amenințări"],"A caption for a small button to fix security issues.\u0004FIX":["CORECTEAZĂ"],"Short warning message about new threats found.\u0004Threats found!":["Amenințări găsite"],"Short warning message about site having no security scan.\u0004No scanning":["Fără scanare"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Actualizează"],"Short message informing user that the site is secure.\u0004Secure":["Sigur"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Cheie invalidă"],"Caption for a button to set up a feature.\u0004Set up":["Inițializează"],"verb\u0004Copy":["Copiază"],"Shorthand for Privacy Policy.\u0004Privacy":["Confidențialitate"],"Shorthand for Terms of Service.\u0004Terms":["Termeni"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Depanare"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["Comentarii spam blocate."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-ru_RU-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-ru_RU-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 47375969..00000000
--- a/plugins/jetpack/languages/json/jetpack-ru_RU-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);","lang":"ru"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":["Затем активируйте набор рекомендуемых функций Jetpack, чтобы повысить безопасность и производительность вашего сайта. {{a}}Узнайте больше о доступных возможностях{{/a}}."],"We’re now collecting stats and securing your site. Welcome aboard.":["Теперь мы собираем статистику и обеспечиваем безопасность вашего сайта. Добро пожаловать!"],"{{a}}Skip, and explore features individually{{/a}}.":["{{a}}Пропустить и узнать о функциях по отдельности{{/a}}."],"Jetpack Business Plan":["Тарифный план Jetpack Business"],"Jetpack Premium Plan":["Тарифный план Jetpack Premium"],"Jetpack Personal Plan":["Тарифный план Jetpack Personal"],"Get started with hassle-free design, stats, and performance tools.":["Простые инструменты дизайна, статистики и производительности."],"Welcome to Jetpack Free":["Представляем бесплатный тарифный план Jetpack"],"Jetpack Free Plan":["Бесплатный тарифный план Jetpack"],"Explore Jetpack plans":["Просмотр тарифных планов Jetpack"],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":["Вам больше не придется ни о чем беспокоиться с автоматическим резервным копированием и приоритетной поддержкой. Вы сможете расширить аудиторию с помощью передовых инструментов SEO, монетизировать сайт благодаря рекламе и настроить его, выбирая из двухсот премиум-тем."],"Jetpack offers so much more":["Jetpack предлагает еще больше возможностей"],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":["Нужна помощь? Изучите наш сайт поддержки, чтобы узнать больше о своем сайте, учетной записи и о том, как извлечь максимальную пользу из WordPress."],"Support documentation":["Справочная документация"],"Chat bubbles representing getting in touch with support":["Пузыри чата, символизирующие диалог со службой поддержки"],"Site Activity":["Действия на сайте"],"Start publicizing now":["Начните публиковать уже сейчас"],"Reach a wider audience by automatically sharing your posts on social media.":["Расширьте аудиторию, настроив автоматическую публикацию своих записей в социальных сетях."],"Increase traffic to your site":["Повысьте посещаемость своего сайта"],"Explore free themes":["Пользуйтесь бесплатными темами"],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":["Получите неограниченный доступ к сотням профессиональных тем и настройте сайт так, как задумали."],"A wide variety of themes and tools to customize a site":["Широкий выбор тем и инструментов для настройки сайта"],"Set up your site security":["Настройте безопасность своего сайта"],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":["Предотвращайте атаки методом перебора, мгновенно получайте уведомления о неполадках на сайте."],"Site stats showing an evolution in traffic and engagement":["Статистика сайта, отображающая рост посещаемости и пользовательской активности"],"A hand holding a loupe":["Рука, держащая лупу"],"A chart showing an healthy increase in earnings":["Таблица роста доходов"],"Interface showing a chronological list of changes and updates in a site":["Интерфейс с хронологическим списком изменений и обновлений сайта"],"A cloud with multiple types of content floating around it":["Облако с различными типами контента вокруг него"],"A folder holding real comments":["Папка с реальными комментариями"],"Make your site faster":["Ускорьте работу сайта"],"Load pages faster by serving your images from our global network of servers.":["Ускорьте загрузку страниц, размещая свои изображения в нашей сети серверов по всему миру."],"A fast and performant website":["Быстрый и производительный сайт"],"A secure site, locked and protected by Jetpack":["Безопасный сайт под защитой Jetpack"],"These settings won't apply to related posts added using the block editor.":["Эти настройки не распространяются на связанные записи, добавленные с помощью редактора блоков."],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["Клонируйте имеющиеся записи, страницы, отзывы и портфолио. Все содержимое будет скопировано, включая тексты, изображения записи, настройки возможности поделиться и другое."],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":["Ваш сайт нарушает наши {{a}}условия обслуживания{{/a}} и поэтому не может быть подключен к WordPress.com."],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":["Подключите ваш сайт к используемым вами социальным сетям и делитесь содержимым используя ваши учетные записи в соцсетях одним нажатием. При публикации записи она появится во всех подключенных учетных записях."],"Add Like buttons to your posts and pages":["Добавьте кнопки \"Нравится\" к вашим страницам и записям"],"When visitors enjoy your content, let them show it with a Like.":["Дайте возможность посетителям оценить понравившееся содержимое."],"Explore your Jetpack Professional plan!":["Оцените возможности своего тарифного плана Jetpack Professional!"],"Explore your Jetpack Premium plan!":["Оцените возможности своего тарифного плана Jetpack Premium!"],"Explore your Jetpack Personal plan!":["Оцените возможности своего тарифного плана Jetpack Personal!"],"Create account":["Создать учётную запись"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["Jetpack поддерживает работу вашего сайта, но чтобы получить доступ ко всем его возможностям, необходимо создать учетную запись."],"Real-time, automated backups (unlimited storage)":["Автоматическое резервное копирование в реальном времени с неограниченным объемом дискового пространства"],"Compose content the way you want to and streamline your publishing experience.":["Организуйте содержимое согласно своим пожеланиям и упростите процесс публикации."],"Add a portfolio item":["Добавить элемент портфолио"],"Add a testimonial":["Добавить отзыв"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["Улучшите позиции своего сайта в поисковых системах и просматривайте статистику посещений в реальном времени."],"Create a Jetpack account to use this feature":["Для использования этой функции создайте учетную запись Jetpack"],"Share your content on social media and increase audience engagement.":["Делитесь публикациями в социальных сетях и повышайте заинтересованность посетителей."],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["Jetpack постоянно отслеживает работу вашего сайта и отправляет уведомления о простоях в момент их возникновения."],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["Рекомендуем обновлять плагин сразу после выхода новой версии. Включите автоматическое обновление важных плагинов, чтобы ваш сайт всегда был под надежной защитой."],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["Новейшая система безопасности гарантирует защиту вашего сайта, а благодаря уведомлениям вы всегда в курсе технических проблем."],"Error enabling Site accelerator. %(error)s":["Ошибка при включении ускорителя сайта. %(error)s"],"Site accelerator is now speeding up your site!":["Ускоритель начал работу на вашем сайте!"],"Enabling Site accelerator…":["Включение ускорителя сайта..."],"Error disabling site accelerator. %(error)s":["Ошибка при выключении ускорителя сайта. %(error)s"],"Site accelerator is no longer speeding up your site!":["Ускоритель на вашем сайте выключен!"],"Disabling site accelerator…":["Выключение ускорителя сайта..."],"Load pages faster, optimize images, and speed up your visitors’ experience.":["Быстрая загрузка страниц, оптимизация изображений и комфорт посетителей."],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["Дополните статистику WordPress.com с помощью всестороннего анализа Google, раскрывающего тенденции посещаемости вашего сайта."],"High-speed, high-definition video hosting with no third-party ads.":["Высокоскоростное размещение видео высокого качества без сторонней рекламы."],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["Заблаговременное планирование публикации неограниченного числа твитов, записей в Facebook и других социальных сетях."],"Marketing Automation":["Автоматизация маркетинга"],"Activate Jetpack Search":["Активировать поиск Jetpack"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["Замените стандартный поиск WordPress на службу поиска на основе Elasticsearch, которая обеспечивает улучшенные результаты и фильтрацию."],"Start earning":["Начните зарабатывать"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["Участвуя в программе WordAds, вы получаете деньги за показ рекламного содержимого на ваших сайтах. Начните зарабатывать прямо сегодня."],"Spam is automatically blocked from your comments.":["В комментариях выполняется автоматическая блокировка спама."],"Spam Filtering":["Фильтрация спама"],"Browse premium themes":["Просмотр премиум-тем"],"Access hundreds of beautifully designed premium themes at no extra cost.":["Доступ к сотням великолепных бесплатных премиум-тем."],"Try a premium theme":["Попробуйте премиум-тему"],"View settings":["Показать настройки"],"Create a Jetpack account to view your email followers":["Создайте учётную запись Jetpack, чтобы просмотреть список всех подписчиков по эл. почте"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["Включите комментирование и позвольте подписчикам получать уведомления о новых публикациях на вашем сайте."],"Manage security settings":["Управление настройками безопасности"],"Built-in Performance":["Высокая производительность"],"Jetpack is ready for the new WordPress editor":["Jetpack готов к использованию с новым редактором WordPress"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["Сегодня мы представляем несколько первых блоков для Jetpack, разработанных специально для работы в новом редакторе: простую кнопку оплаты, форму, карту и язык разметки Markdown."],"Build your Jetpack site with blocks":["Создайте сайт с Jetpack из блоков"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["Новый редактор? Да! Подробнее{{/a}}."],"The features you rely on, adapted for the new WordPress editor.":["Надёжные функции, оптимизированные для нового редактора WordPress."],"Take me to the new editor":["Перейти в новый редактор"],"Testing Jetpack Connection":["Проверка подключения Jetpack"],"There was an error testing Jetpack. Error: %(error)s":["При проверке Jetpack произошла ошибка. Ошибка: %(error)s"],"New in Jetpack!":["Новое в Jetpack!"],"Speed up static file load times":["Ускорьте время загрузки статических файлов"],"Speed up image load times":["Ускорьте время загрузки изображений"],"Enable site accelerator":["Включить ускоритель сайта"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["Ускорьте загрузку страниц, разрешив Jetpack оптимизировать изображения и использовать глобальную сеть серверов WordPress для предоставления изображений и статических файлов (например, CSS и JavaScript)."],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["Повысьте безопасность своего сайта, включив систему контроля входа и надёжной аутентификации WordPress.com. Если включить эту функцию на нескольких сайтах, вы сможете использовать на всех этих сайтах одни и те же учётные данные."],"View your site activity":["Посмотреть активность вашего сайта"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["Посмотреть хронологический список всех изменений и обновлений сайта в понятном, удобном для чтения виде."],"Manually Verify ":["Подтвердить вручную"],"Verify with Google":["Подтвердить через Google"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["Google будет уведомлять по эл.почте о некоторых событиях на вашем сайте, включая проблемы если ваш сайт был {{a1}}взломан{{/a1}}, или проблемы с {{a2}}обходом или индексацией{{/a2}} вашего сайта."],"or":["или"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["Следите за трафиком и производительностью сайта из {{a}}Google Search Console{{/a}}."],"Your site is verified with Google":["Ваш сайт был подтвержден Google"],"Site failed to verify: %(error)s":["Ошибка подтверждения сайта: %(error)s"],"Verifying...":["Подтверждение..."],"Add faster, more advanced searching to your site with Jetpack Professional.":["Добавьте быстрый, улучшенный поиск на ваш сайт с Jetpack Professional."],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["Замените встроенный поиск WordPress улучшенным поиском Jetpack"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["Поиск Jetpack заменяет встроенный поиск быстрым, масштабируемым, настраиваемым и очень релевантным поиском работающим в облаке WordPress.com. Как результат - ваши пользователи будут находить то что им нужно, быстрее."],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["Встроенный поиск WordPress отлично работает на сайтах с небольшим количеством содержимого, но по мере роста поиск становится медленнее и возвращает менее релевантные результаты."],"Jetpack Search supports many customizations.":["Поиск Jetpack поддерживает множество настроек."],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["Замените встроенный поиск быстрым, масштабируемым, настраиваемым и очень релевантным поиском работающим в {{a}}облаке WordPress.com{{/a}}."],"Site is verified":["Сайт подтвержден"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}Для создания красивого сайта, который смотрится и работает так, как вы этого хотите Jetpack Professional дает вам неограниченный доступ к более чем 200 премиум темам WordPress{{/p}}{{p}}Jetpack Professional это не только возможность найти идеальное оформление, но и уверенность в том, что если вам потребуется помощь, то вы получите приоритетную поддержку от нашей глобальной команды экспертов.{{/p}}"],"Spam filtering and priority support.":["Фильтрация спама и приоритетная поддержка."],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["При включении рекламы Jetpack автоматически создает пользовательский ads.txt специально для вашего сайта."],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["Jetpack автоматически создает пользовательский {{link}}ads.txt{{/link}} специально для вашего сайта. Если вам требуется добавить записи для других сетей, добавьте их ниже, одна запись на строку."],"Custom ads.txt entries":["Пользовательские записи ads.txt"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}Чтобы создать отличный сайт, который будет выглядеть и работать так, как вы задумали, используйте неограниченный доступ к более чем 200 премиум-темам Jetpack Professional. {{/p}}{{p}}Jetpack Professional — это больше, чем поиск идеального шаблона. Это спокойствие и уверенность: ваш сайт всегда будет в безопасности благодаря резервному копированию в реальном времени, автоматическому поиску вредоносного ПО и приоритетной поддержке нашей команды специалистов.{{/p}}"],"Introducing Premium Themes":["Представляем премиум темы"]," Premium Themes":["Премиум темы"],"Privacy information":["Информация о конфиденциальности"],"Enable Lazy Loading for images":["Включить ленивую загрузку изображений"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["Ленивая загрузка изображений улучшает скорость вашего сайта и ощущения от его просмотра. Изображения будут загружаться при прокрутке страницы, вместо того, чтобы загрузиться всем сразу."],"Performance & speed":["Производительность и скорость"],"Enable high-speed, ad-free video player":["Включить быстрый видео-плеер без рекламы"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["Сделайте публикуемое вами содержимое более захватывающим с видео высокого разрешения. С Jetpack Video вы можете настраивать ваш видео проигрыватель и отдавать видео без рекламы, водяных знаков на высокой скорости вашим посетителям. Видеофайлы хранятся на серверах WordPress.com и не занимают место на вашем хостинге!"],"Video":["Видео"],"Carousel color scheme":["Цветовая схема карусели"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["EXIF данные показывают дополнительные технические детали о фото, например фокусное расстояние, апертуру и ISO."],"Show photo Exif metadata in carousel (when available)":["Показывать EXIF метаданные фотографий в карусели (если доступно)"],"Display images in a full-screen carousel gallery":["Показывать изображения в полноэкраной галерее-карусели"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["Создавайте полноэкранные слайд-шоу на страницах сайта и в записях. Галереи изображений в виде карусели совместимы с мобильными устройствами и побуждают посетителей сайта просматривать ваши фотографии."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["Панель инструментов WordPress.com заменяет панель инструментов администратора WordPress и делает работу с веб-сайтами WordPress намного удобнее. Она позволяет легко управлять всеми сайтами, обновлять профиль WordPress.com, просматривать уведомления и узнавать новости сайтов, на которые вы подписаны в Чтиве."],"Portfolios shortcode: [portfolio]":["Шорткод для портфолио: [portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["Используйте функцию {{portfolioLink}}портфолио{{/portfolioLink}}, чтобы демонстрировать свои работы. Если ваша тема не поддерживает портфолио Jetpack, вы можете воспользоваться простым кодом для размещения их на своём сайте."],"Testimonials shortcode: [testimonials]":["Шорткод для благодарностей: [testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["Добавляйте на сайт {{testimonialLink}}отзывы{{/testimonialLink}}, чтобы привлекать новых клиентов. Если ваша тема не поддерживает отзывы Jetpack, вы можете воспользоваться простым кодом для размещения их на своём сайте."],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["В настоящий момент у поисковых систем нет доступа к вашему сайту. Если вы хотите предоставить им доступ, зайдите в {{a}}Настройки чтения{{/a}} и включите опцию «Видимость для поисковых систем»."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["Хорошие новости: Jetpack автоматически посылает вашу карту сайта на все значимые поисковые системы для индексации."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["Карты сайта - файлы, используемые поисковыми системами типа Google или Яндекс для индексирования вашего сайта. Они могут улучшить ранжировку вашего сайта в результатах поиска. При включении этой возможности, Jetpack будет создавать карты сайта и обновлять их автоматически при изменении содержимого сайта."],"Configure related posts in the Customizer":["Настройте связанные записи в интерфейсе настройки"],"Highlight related content with a heading":["Выделите связанное содержимое заголовком"],"View security scan details":["Посмотреть подробности сканирования безопасности"],"View backup history":["Посмотреть историю резервного копирования"],"Show a thumbnail image where available":["Показывать изображение миниатюры, если доступно"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["Чтобы получить дополнительную информацию о том, как конкретные инструменты Jetpack используют данные и отслеживают активность пользователей, перейдите в {{privacyCenterLink}}Центр конфиденциальности{{/privacyCenterLink}}."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["Мы используем и другие средства сбора информации, в том числе средства сторонних разработчиков. {{cookiePolicyLink}}Здесь можно больше узнать о них{{/cookiePolicyLink}} и об управлении ими."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["Эти сведения помогают нам улучшать продукты, предлагать более полезную рекламу, настраивать WordPress.com согласно вашим предпочтениям и не только. Дополнительную информацию см. в нашей {{pp}}политике конфиденциальности{{/pp}}."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["Позвольте нашей аналитической программе собрать информацию о том, как вы используете наши услуги после входа в учётную запись WordPress.com. {{cookiePolicyLink}}Подробнее{{/cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["Управление этой функцией выполняется администратором сайта. {{link}} Подробнее{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["Эта функция отключена администратором сайта. {{link}}Подробнее{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["Эта функция включена администратором сайта. {{link}}Подробнее{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":[" отключен администратором сайта. {{link}}Подробнее{{/link}}."],"This feature has been disabled by a site administrator.":["Эта функция отключена администратором сайта."],"%(moduleName)s has been disabled by a site administrator.":["%(moduleName)s отключен администратором сайта."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["Используйте виджет «Реклама» для размещения дополнительных объявлений. {{link}}Попробуйте!{{/link}}"],"Configure your notification settings":["Настройте параметры уведомлений"],"Monitor your site's downtime":["Контроль бесперебойной работы сайта"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["Модуль поиска Jetpack — это эффективная замена встроенной функции поиска WordPress."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["Файлы на вашем сайте проходят регулярную проверку на предмет несанкционированных и подозрительных изменений, которые могут нести угрозу вашей безопасности и данным."],"Plugin needs updating.":["Необходимо обновить плагин.","Необходимо обновить плагины.","Необходимо обновить плагины."],"%(number)s":["%(number)s","%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Средство обновления плагинов Jetpack позволяет выбрать плагины, которые будут обновляться автоматически."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack оптимизирует ваши изображения и будет предоставлять их посетителям вашего сайта с ближайшего к ним сервера. Наша международная сеть предоставления содержимого значительно повысит скорость загрузки вашего сайта."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":["Средство мониторинга простоев Jetpack отслеживает работу вашего сайта и отправляет уведомления о простоях."],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Средство резервного копирования Jetpack позволяет с легкостью восстановить сайт или загрузить резервную копию на определенный момент времени."],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet проверяет комментарии и данные, отправленные с помощью контактной формы, по нашей глобальной базе спама."],"Privacy Information":["Сведения о конфиденциальности"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["VideoPress позволяет загружать видеофайлы с компьютера для размещения на WordPress.com, а не на серверах вашего хостинг-провайдера. Затем вы сможете добавлять их на свой автономный сайт Jetpack. "],"Add the Search (Jetpack) widget to your sidebar":["Добавьте на боковую панель виджет поиска (Jetpack)."],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["Предоставьте своим посетителям удобную функцию поиска с возможностью быстрого получения актуальных результатов, их фильтрации и сортировки."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["Включает специальную тему для мобильных устройств, не требовательную к ресурсам, которая будет отображаться на соответствующих устройствах ваших пользователей."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["Автоматически загружает следующие записи, когда пользователь приближается к нижней части страницы."],"Allows you to publish new posts by sending an email to a special address.":["Даёт возможность публиковать новые записи путём отправки электронного письма на особый адрес."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["Позволяет создавать содержимое со ссылками, списками и другими элементами с использованием языка разметки Markdown."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["Проверяет содержимое на наличие грамматических и стилистических ошибок, опечаток и случаев неправильного употребления слов прямо в процессе написания."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["Предоставляет необходимые скрытые теги, которые нужны для проверки подлинности вашего сайта WordPress с помощью различных служб."],"Displays information on your site activity, including visitors and popular posts or pages.":["Отображает информацию об активности вашего сайта, включая сведения о посещениях, популярных записях или страницах."],"Allows you to optimize your site and its content for better results in search engines.":["Позволяет оптимизировать сайт и его содержимое, чтобы улучшить его позиции в результатах поиска."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["Интегрирует ваш сайт WordPress с платформой Google Analytics, которая позволяет анализировать посещаемость, аудиторию и показатели конверсии сайта."],"Displays high-quality ads on your site that allow you to earn income.":["Показывает на вашем сайте рекламные объявления высокого качества, которые дают вам возможность зарабатывать."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["Добавляет к содержимому вашего сайта кнопки \"Поделиться\", чтобы пользователи могли делиться им в социальных сетях."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["Позволяет автоматически делиться новым содержимым вашего сайта в социальных сетях, в том числе в Facebook и Twitter."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["Добавляет к содержимому вашего сайта кнопки \"Нравится\", чтобы пользователи могли выразить одобрение или удовольствие."],"Allows registered users to log in to your site with their WordPress.com accounts.":["Предоставляет зарегистрированным пользователям возможность входить на ваш сайт с использованием их учётных записей WordPress.com."],"Protects your site from traditional and distributed brute force login attacks.":["Защищает ваш сайт от традиционных и распределённых атак методом перебора пароля."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["Создаёт резервные копии вашего сайта на серверах глобальной сети WordPress.com. Вы сможете восстановить содержимое в случае сбоя или ошибки."],"Removes spam from comments and contact forms.":["Удаляет спам из комментариев и контактных форм."],"We are committed to your privacy and security. ":["Мы заботимся о вашей приватности и безопасности."],"View all Jetpack plans":["Посмотреть все тарифы Jetpack"],"Manage your plan":["Управление вашим тарифом"],"Your Plan":["Ваш тариф"],"You’re currently on Jetpack %(plan)s.":["Вы сейчас используете Jetpack %(plan)."],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["Разрешите читателям подписываться на записи и комментарии, получать уведомления о новом содержимом по эл.почте."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["Замена стандартной формы комментариев WordPress новой, включающей возможности входа через соцсети."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}Активируйте{{/a}} для замены встроенного поиска WordPress улучшенным."],"Add Search (Jetpack) Widget":["Добавить виджет поиска (Jetpack)"],"Jetpack Search is powering search on your site.":["Поиск на вашем сайте обеспечивается Jetpack."],"Manage your plugins":["Управление плагинами"],"Moderate comments":["Модерирование комментариев"],"Error updating privacy settings. %(error)s":["Ошибка обновления настроек приватности. %(error)"],"Updated privacy settings.":["Настройки приватности обновлены."],"Updating privacy settings…":["Обновление настроек приватности..."],"Add Jetpack Search Widget":["Добавить виджет поиска Jetpack"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["Чтобы добавить расширенные фильтры поиска, добавьте виджет поиска Jetpack на боковую панель."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["Полный набор средств безопасности, средства автоматизации маркетинга и автоматизации сайта, неограниченный объём хранилища для размещения видео, неограниченное число тем, улучшенный поиск и поддержка в приоритетном режиме."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["Полный набор средств безопасности, средства автоматизации маркетинга и автоматизации сайта, неограниченный объём хранилища для размещения видео и поддержка в приоритетном режиме."],"Daily backups, spam filtering, and priority support.":["Ежедневное резервирование, фильтрация спама и поддержка в приоритетном режиме."],"Always-on Security":["Непрерывная защита"],"Activate video hosting":["Активировать видеохостинг"],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Резервное копирование данных вашего сайта в реальном времени с неограниченным объёмом хранилища, возможностью восстановления в одно нажатие, автоматической проверкой безопасности и поддержкой в приоритетном режиме"],"Design the perfect website":["Создайте дизайн совершенного сайта"],"Set up Jetpack":["Настроить Jetpack"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["Резервное копирование в реальном времени с неограниченным местом для хранения, восстановлением в одно нажатие и автоматической проверкой безопасности."],"Jetpack Search":["Поиск Jetpack"],"Jetpack version %(version)s":["Jetpack версии %s"],"Your site is being backed up in real time and regularly scanned for security threats.":["Резервное копирование вашего сайта производится в режиме реального времени, он также регулярно проверяется на угрозы безопасности."],"Daily backup of all your site data with unlimited space and one-click restores":["Ежедневное резервное копирование данных вашего сайта, с неограниченным местом для хранения и восстановлением в одно нажатие"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Ежедневное резервное копирование данных вашего сайта, с неограниченным местом для хранения и восстановлением в одно нажатие, автоматической проверкой безопасности и приоритетной поддержкой"],"View your security activity":["Посмотреть активность по безопасности"]," (powered by VaultPress).":[" (работает с VaultPress)."],"Customize Search Widget":["Настроить виджет поиска"],"Please correct the issue below and try again.":["Пожалуйста исправьте проблему ниже и попробуйте еще.","Пожалуйста исправьте проблемы ниже и попробуйте еще.","Пожалуйста исправьте проблемы ниже и попробуйте еще."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["Мы делаем так, что ваш сайт будет чист от проблем с безопасностью. Мы уведомим вас если найдем что-либо."],"Your site is being backed up in real-time.":["Резервное копирование вашего сайта производится в режиме реального времени."],"Jetpack version":["Версия Jetpack"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}Активность вашего сайта{{/a}} в единой ленте."],"Activity":["Активность"],"Confirm each new phrase you add by pressing enter.":["Подтвердите каждую добавляемую фразу нажатием Enter."],"{{a}}View details{{/a}}":["{{a}}Посмотреть подробности{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["Спасибо за выбор Jetpack Professional! Jetpack теперь будет создавать резервные копии ваших данных, сканировать на угрозы безопасности, а также предоставлять доступ к премиум темам."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["С Jetpack Professional вы можете создавать совершенные сайты с использованием одной из более 300 профессионально разработаных тем, включая более 200 премиум тем. Персонализируйте ваше содержимое с набором виджетов или добавляйте видео без ограничений к страницам и записям, без рекламы и водяных знаков."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["Обеспечить рост вашей аудитории проще с тарифом Professional, благодаря планированию и возможностям делиться содержимым, SEO инструментам и встроенным возможностям подписки. Можно легко монетизировать сайт простой кнопкой оплаты и рекламой, отслеживать успех ваших усилий с помощью инетграции с Google Analytics."],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Ваш тарифный план Jetpack дает вам все что нужно чтобы сохранить плоды ваших трудов в безопасности, включая резервные копии по требованию, проверку на вредоносное ПО с восстановлением в одно нажатие и решение проблем. Ваш сайт будет полностью защищен от спама, вредоносного кода и попыток подбора пароля для входа."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Исследуйте возможности Jetpack Professional сейчас, чтобы увидеть преимущества нового тарифа!"],"Install premium themes":["Установка премиум тем"],"Review SEO features":["Обзор SEO возможностей"],"Welcome Professional":["Добро пожаловать Professional"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["Спасибо за выбор Jetpack Premium! Jetpack теперь будет cоздавать резервные копии ваших данных, сканировать на угрозы безопасности, а также включает возможности монетизации."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["С Jetpack Premium вы можете создавать совершенные сайты вне зависимости от назначения. Настраивайте вид вашего сайта с более чем 100 бесплатными темами или улучшайте содержимое видеороликами (неограниченно, без рекламы и водяных знаков)."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Используя мощные инструменты Jetpack для того, чтобы поделиться содежимым, вы можете автоматически делиться новыми записями в соцсетях или запланировать публикацию в них на любое время. Вместе с ростом аудитории вы также можете улучшить ваш бизнес с инструментами типа кнопок оплаты или рекламы."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Начните исследовать Jetpack Premium сейчас, чтобы увидеть преимущества нового тарифа."],"Monetize your site with ads":["Монетизировать ваш сайт с помощью рекламы"],"Welcome Premium":["Добро пожаловать в Premium"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["Спасибо за выбор тарифа Jetpack Personal, Jetpack теперь делает резервные копии сайта и проверяет угрозы безопасности."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["С Jetpack Personal вы получаете доступ к более чем 100 бесплатных, профессионально разработаных тем. Выберите тему лучше всего подходящую для вашего сайта, настройте цвета, изображения или добавьте пару новых виджетов."],"Got it":["Ясно!"],"Welcome personal":["Добро пожаловать в персональный"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["Подключая ваш сайт, вы соглашаетесь с нашими замечательными {{tosLink}}Правилами пользования{{/tosLink}} и с {{shareDetailsLink}}обменом данными{{/shareDetailsLink}} с WordPress.com"],"Jetpack Stats People":["Jetpack статистика по людям"],"Hello there! Your stats have been activated.":["Привет! Ваша статистика активирована"],"Just give us a little time to collect data so we can display it for you here.":["Просто дайте нам немного времени на сбор данных, чтобы мы могли показать их здесь."],"Okay, got it!":["Ясно, понятно!"],"Display ads below posts on":["Показывать рекламу ниже записи для"],"Additional ad placements":["Размещение дополнительной рекламы"],"Top of each page":["Наверху каждой страницы"],"Second ad below post":["Вторая реклама ниже записи"],"Archives":["Архивы"],"Explore Professional":["Исследуйте Jetpack профессиональный"],"Compare All Plans":["Сравнить все тарифы"],"Person with laptop":["Человек с лаптопом"],"Your Jetpack site is ready to go!":["Ваш сайт с Jetpack готов!"],"Stars":["Звезды"],"Jupiter":["Юпитер"],"Welcome to Jetpack Personal":["Добро пожаловать в Jetpack Персональный"],"Welcome to Jetpack Premium":["Добро пожаловать в Jetpack Премиум"],"Welcome to Jetpack Professional":["Добро пожаловать в Jetpack Профессиональный"],"Schedule posts":["Запланировать записи"],"Activate Publicize":["Активировать Publicize"],"Your site is backed up.":["Резервная копия вашего сайта создана."],"Image Performance":["Производительность с изображениями"],"Get WordPress Apps for every device":["Получите приложение WordPress для любого устройства"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Управлять всеми вашими сайтами с единой консоли: публиковать содержимое, отслеживать статистику, модерировать комментарии и много больше, с любой точки Земли."],"I already use this app.":["Я уже использую это приложение"],"Create address":["Создать адрес"],"Priority support":["Приоритетная поддержка"],"Add sharing buttons to your posts":["Добавить кнопки \"поделиться\" к записям"],"Automatically share your posts to social networks":["Автоматически делиться вашими записями в соцсетях"],"Updating settings…":["Обновляем настройки..."],"Updating Post by Email address…":["Обновление записи по адресу эл.почты..."],"Your paid plan gives you access to prioritized Jetpack support.":["Ваш платный тариф дает вам возможность приоритетной поддержки Jetpack."],"You have paid for backups but they're not yet active.":["Вы заплатили за резервные копии но они еще не активны."],"You have paid for backups and security scanning but they’re not yet active.":["Вы заплатили за резервные копии и проверку безопасности но они еще не активны."],"Click \"Set Up\" to finish installation.":["Нажмите \"Установить\" для завершения установки."],"Checking site status…":["Проверка статуса сайта..."],"Pages":["Страницы"],"We're here to help":["Мы здесь для того чтобы помочь"],"Jetpack comes with free, basic support for all users.":["Jetpack поставляется с бесплатной основной поддержкой для всех пользователей."],"Ask a question":["Задать вопрос"],"Search our support site":["Поискать на сайте поддержки"],"Get a faster resolution to your support questions.":["Получите быстрое решение ваших вопросов в поддержку."],"Host fast, high-quality, ad-free video.":["Размещайте высококачественные видео без рекламы на быстром хостинге"],"Generate income with high-quality ads.":["Получайте доход от качественной рекламы."],"Real-time site backups and automatic threat resolution.":["Резервные копии в реальном времени и автоматическое решение угроз безопасности."],"Protect against data loss, malware, and malicious attacks.":["Защита от потери данных, вредоносного ПО и атак."],"Integrate easily with Google Analytics.":["Легкая интеграция с Google Analytics."],"Help your content get found and shared with SEO tools.":["Способствуйте тому чтобы ваше содержимое находили и делились им с помощью SEO инструментов."],"Protect your site from spam.":["Защитите свой сайт от спама."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["Этот сайт не подключен к WordPress.com. Пожалуйста попросите администратора сайта сделать это."],"Spam filtering":["Фильтрация спама"],"Daily, automated malware scanning":["Ежедневная автоматическая проверка на вредоносное ПО"],"Daily, automated backups (unlimited storage)":["Ежедневные неограниченные резервные копии"],"Daily, automated malware scanning with automated resolution":["Ежедневная автоматическая проверка на вредоносное ПО с решением проблем"],"Unlimited, high-speed video hosting":["Неограниченный быстрый видео-хостинг"],"SEO preview tools":["Инструменты предпросмотра SEO"],"Site stats, related content, and sharing tools":["Статистика сайта, похожие записи и инструменты \"поделиться\""],"Brute force attack protection and downtime monitoring":["Защита от атак подбора и мониторинг доступности сайта"],"Unlimited, high-speed image hosting":["Неограниченный быстрый хостинг изображений"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["После отключения %(siteName)s от WordPress.com следующие возможности станут недоступны:"],"Read more about Jetpack benefits":["Узнайте больше о преимуществах Jetpack"],"An Automattic Airline":["Авиалиния Automattic"],"Manage site connection":["Управление подключением сайта"],"Connect your account to WordPress.com to view more stats":["Подключите ваш аккаунт к WordPress.com для подробной статистики"],"Theme enhancements":["Улучшения темы"],"Load more posts using the default theme behavior":["Загружать больше записей используя поведение темы по умолчанию"],"Load more posts in page with a button":["Загружать больше записей на странице кнопкой"],"Load more posts as the reader scrolls down":["Загружать больше записей при прокрутке вниз"],"Theme support required.":["Требуется поддержка темы."],"Learn more about adding support for Infinite Scroll to your theme.":["Узнайте больше о добавлении бесконечной прокрутки к вашей теме."],"Use excerpts instead of full posts on front page and archive pages":["Использовать отрывок вместо полной записи на заглавной и страницах архивов."],"Show featured images":["Показывать изображения записи"],"Enable the WordPress.com toolbar":["Включить панель инструментов WordPress.com"],"Writing tools available to you will be shown here when an administrator enables them.":["Инструменты для редактирования доступные вам будут показаны здесь когда администратор включит их."],"Portfolios":["Портфолио"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Обратите внимание, что для индексации поисковыми системами {{b}}подтверждение подлинности вашего сайта с помощью этих служб не требуется{{/b}}. Чтобы использовать эти расширенные возможности поисковых систем и подтвердить подлинность своего сайта с помощью той или иной службы, вставьте HTML-код тега в поле ниже. Если у вас возникли проблемы, прочтите {{support}}инструкции полностью{{/support}}. Поддерживаемые службы проверки: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, и {{yandex}}Яндекс.Вебмастер{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["Генерировать XML карту сайта"],"Collecting valuable traffic stats and insights":["Сбор полезной статистики сайта и ключевых моментов"],"The image helps collect stats, but should work when hidden.":["Изображение помогает собирать статистику, но может работать и будучи скрытым."],"Count logged in page views from":["Учитывать просмотры страниц от"],"Allow stats reports to be viewed by":["Разрешить просмотр статистики"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["Если вам нужны расширенные возможности управления, эти настройки можно изменить. Прочтите подробную информацию о том, как {{a}} оптимизировать ваш сайт для поисковых систем{{/a}}."],"Configure your SEO settings":["Настроить возможности оптимизации для поисковых систем"],"In \"Upgrade\"":["В разделе «Платные услуги»"],"Configure your Google Analytics settings":["Настройки Google Analytics"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Показывать рекламу в первой статье на главной странице или в конце каждой страницы и записи. Чтобы увеличить свой доход, поместите дополнительную рекламу в верхней части сайта или в любой области для виджетов."],"Enable ads and display an ad below each post":["Включить рекламу и показывать ее внизу каждой записи"],"Configure your sharing buttons":["Конфигурация кнопок \"Поделиться\""],"Connect your social media accounts":["Подключить ваши аккаунты в соцсетях"],"Match accounts using email addresses":["Сопоставить учетные записи, используя адреса электронной почты"],"Require accounts to use WordPress.com Two-Step Authentication":["Требовать использования 2-факторной авторизации WordPress.com"],"Add to whitelist":["Добавить в белый список"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["Вы можете добавить один или несколько IP-адресов в список разрешённых, чтобы плагин Jetpack их никогда не блокировал. Можно указывать адреса IPv4 и IPv6. Чтобы указать диапазон, введите минимальное и максимальное значения, разделённые тире. Пример: 12.12.12.1–12.12.12.100"],"Your site is backed up and threat-free.":["Ваш сайт безопасен и резервная копия сделана."],"Checking your spam protection…":["Проверка защиты от спама..."],"Fetching key…":["Получение ключа..."],"Your site needs an Antispam key.":["Сайту требуется антиспам ключ."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["Возникла проблема с антиспам API ключем. {{a}}Подробнее{{/a}}."],"Your site is not protected from spam.":["Ваш сайт не защищен от спама."],"Your Antispam key is valid.":["Ваш антиспам ключ действителен."],"Your site is protected from spam.":["Ваш сайт защищен от спама."],"Checking key…":["Проверка ключа..."],"Your API key":["Ваш API ключ"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["Если у вас еще нет API ключа, {{a}}получите его здесь{{/a}} с руководством в процессе получения."],"No search results found for %(term)s":["Нет результатов поиска для %(term)"],"Enter a search term to find settings or close search.":["Введите поисковый запрос, чтобы найти настройки, или закройте поиск."],"Connections":["Подключения"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Ваш сайт в режиме разработки, он не может быть подключен к WordPress.com."],"Your site is connected to WordPress.com.":["Ваш сайт подключен к WordPress.com."],"You are the Jetpack owner.":["Вы владелец Jetpack."],"Connected as {{span}}%(username)s{{/span}}":["Подключение от {{span}}%(username)s{{/span}}"],"View your Email Followers":["Посмотреть подписчиков по эл.почте"],"Color scheme":["Цветовая схема"],"Enable Markdown use for comments.":["Разрешить использовать разметку для комментариев."],"Updated settings.":["Настройки обновлены"],"Error updating settings. %(error)s":["Ошибка обновления настроек. %(error)s"],"Regenerated Post by Email address.":["Пересоздание записи по адресу эл.почты."],"Error regenerating Post by Email address. %(error)s":["Во время повторного создания адреса для публикации записи по электронной почте произошла ошибка. %(error)s"],"Updated settings. Refreshing page…":["Настройки сохранены. Обновляем страницу..."],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["Используется {{a}}Режим разработки{{/a}} (некоторые возможности отключены) потому что: {{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}jetpack_development_mode фильтр активен{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}Назначена константа JETPACK_DEV_DEBUG{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}в адресе сайта нет точки (напр. http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics это бесплатный сервис дополняющий нашу {{a}}встроенную статистику{{/a}} несколько другим взглядом на ваш трафик. Статистика WordPress.com и Google Analytics используют разные методы для идентификации и отслеживания активности на сайте, так что это нормально если они будут показывать несколько разные значения визитов, просмотров и.т.д."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Настроить Google Analytics"],"Activate Google Analytics":["Активировать Google Analytics"],"Download the free apps":["Загрузить бесплатные приложения"],"Upgrade Focus: VideoPress For Weddings":["Акцент обновления: VideoPress для свадеб"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}Можно также настроить связанные записи в разделе «Конфигуратор». {{ExternalLink}}Попробуйте!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["По умолчанию рекламные сообщения размещаются в конце каждой страницы, записи или первой статьи на главной странице. Вы можете добавить их в верхнюю часть страницы или в любую область для виджетов, чтобы увеличить свой доход!"],"Display an ad unit at the top of your site.":["Разместить рекламу в верхней части сайта."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["Активируя рекламу вы соглашестесь с {{link}}Условиями Использования{{/link}} рекламы Automattic."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Для вашего сервера заданы неправильные настройки, поэтому Jetpack Protect не может эффективно защищать ваш сайт."],"In \"Mobile\"":["В разделе «Для мобильных устройств»"],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Измените настройки уведомлений об отслеживаемых событиях на WordPress.com{{/link}}"],"View your earnings":["Посмотреть ваши доходы"],"Configure site SEO":["Настроить SEO сайта"],"Activate SEO tools":["Активировать SEO инструменты"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["Чтобы начать нажмите на \"Добавить медиафайл\" в редакторе записей и загрузите видео, мы позаботимся об остальном!"],"Video Hosting":["Видео хостинг"],"SEO Tools":["SEO инструменты"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Расширенные инструменты поисковой оптимизации для ускоренного нахождения вашего сайта по соответствующим запросам."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["Простейший способ добавить свободное от рекламы и фирменной символики видео на сайт. Вы сможете отслеживать статистику просмотров видео и ссылок на него. Проигрыватель отличается высокой скоростью и удобством управления."],"You are running Jetpack on a staging server.":["Jetpack работает на тестовом сервере."],"More Info":["Больше информации"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Управление видимости лайков в настройках модуля шаринга{{/a}}"],"Your current IP: %(ip)s":["Ваш текущий IP: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["Остались несохранённые настройки, которые будут потеряны, если вы покинете эту вкладку. Всё равно покинуть?"],"This will reset all Jetpack options, are you sure?":["Это обнулит все настройки Jetpack! Вы уверены?"],"Search for a Jetpack feature.":["Найдите компонент Jetpack."],"Configure your Security Scans":["Настройка проверок безопасности"],"Subscriber":["Подписчик"],"Big iPhone/iPad Update Now Available":["Доступно большое обновление для iPhone и iPad"],"The WordPress for Android App Gets a Big Facelift":["Грандиозное обновление приложения WordPress для Android"],"WordPress.com Likes are:":["Отметки «Нравится» в WordPress.com:"],"Comments headline":["Заголовок комментариев"],"A few catchy words to motivate your readers to comment.":["Несколько привлекающих внимание слов, чтобы побудить читателей оставлять комментарии."],"Show a \"follow blog\" option in the comment form":["Показывать параметр «Подписаться на блог» в форме для комментирования"],"Show a \"follow comments\" option in the comment form":["Показывать параметр «Подписаться на комментарии» в форме для комментирования"],"Put a chart showing 48 hours of views in the admin bar":["Показывать график последних 48 часов просмотров на панели инструментов"],"Hide the stats smiley face image":["Скрыть смайлик статистики"],"Whitelisted IP addresses":["Разрешенные IP-адреса"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Показывать рекламу для мобильных приложений WordPress в нижней части темы мобильных приложений"],"Copied!":["Скопировано!"],"Highlight and copy the following text to your clipboard:":["Выделите и скопируйте в буфер обмена следующий текст:"],"Regenerate address":["Создать адрес заново"],"Automatically proofread content when: ":["Автоматически исправлять содержимое, если: "],"A post or page is first published":["Запись или страница опубликована впервые"],"A post or page is updated":["Запись или страница обновлена"],"Automatic Language Detection":["Автоматическое определение языка"],"The proofreader supports English, French, German, Portuguese and Spanish.":["Средство проверки поддерживает английский, испанский, немецкий, португальский и французский языки."],"Enable proofreading for the following grammar and style rules: ":["Включить проверку текста для следующих грамматических и стилистических правил: "],"Add a phrase":["Добавить фразу"],"Cheatin' uh?":["Жульничаем?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}Расскажите, почему вы не завершили подключение Jetpack, ответив на эти {{a}}2 вопроса{{/a}}?{{/p}}{{p}}Подключение Jetpack необходимо для работы наших бесплатных функций безопасности и управления трафиком.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Добро пожаловать в {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["Jetpack уже подключен."],"You're fueled up and ready to go, Jetpack is now active.":["Jetpack активирован. Теперь можно приступать к работе."],"You're fueled up and ready to go.":["Теперь можно приступать к работе."],"You are currently running a development version of Jetpack.":["Сейчас вы работаете в тестовой версии Jetpack."],"Submit Beta feedback":["Отправить отзыв"],"What would you like to see on your Jetpack Dashboard?":["Что бы вы хотели видеть в консоли Jetpack?"],"Let us know!":["Свяжитесь с нами!"],"Saving…":["Сохранение…"],"Save Settings":["Сохранить настройки"],"Jetpack Stats Icon":["Значок статистики Jetpack"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Активируйте статистику сайта{{/a}}, чтобы видеть отметки «Нравится», читателей, подписчиков и другие сведения. {{a1}}Подробнее{{/a1}}"],"Activate Site Stats":["Активация статистики сайта"],"Security Scanning":["Проверка безопасности"],"Site Backups":["Резервные копии сайта"],"Upgrade":["Обновление"],"ACTIVE":["АКТИВНА"],"Your site is on Development Mode":["Ваш сайт находится в режиме разработки"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["После подключения можно выполнить обновление до платной подписки, чтобы разблокировать систему безопасности мирового уровня, средства защиты от спама и приоритетную поддержку."],"View your spam stats":["Просмотр статистики спама"],"View your security dashboard":["Просмотр консоли безопасности"],"The site is in Development Mode, so you can not connect to WordPress.com.":["Сайт находится в режиме разработки, поэтому его нельзя подключить к WordPress.com."],"Link your account to WordPress.com to get the most out of Jetpack.":["Привяжите учетную запись к WordPress.com для максимально эффективного использования Jetpack."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["Для автоматизированной комплексной проверки наличия угроз безопасности {{a}}установите и активируйте{{/a}} VaultPress."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["Для автоматизированной комплексной проверки наличия угроз безопасности {{a}}улучшите учетную запись{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack активно блокирует несанкционированные попытки входа. Данные здесь скоро появятся!"],"Total malicious attacks blocked on your site.":["Общее число вредоносных атак, заблокированных на сайте."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Активируйте защиту{{/a}}, чтобы обезопасить сайт от несанкционированных попыток входа."],"All plugins are up-to-date. Awesome work!":["Все плагины уже обновлены. Превосходная работа!"],"Jetpack is improving and optimizing your image speed.":["Jetpack ускоряет загрузку и оптимизирует изображения."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack выполняет мониторинг сайта. Если нам покажется, что ваш сайт не работает, вы получите сообщение по электронной почте."],"Security":["Безопасность"],"Performance":["Производительность"],"Backups":["Резервные копии"],"{{a}}View backup details{{/a}}.":["{{a}}Просмотр сведений о резервной копии{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["Для автоматического резервного копирования всего сайта {{a}}установите и активируйте{{/a}} VaultPress."],"Unavailable in Dev Mode.":["Недоступно в режиме разработки."],"Spam Protection":["Защита от спама"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["Чтобы воспользоваться передовой защитой от спама, {{a}}установите Akismet{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["Чтобы воспользоваться передовой защитой от спама, {{a}}активируйте Akismet{{/a}}."],"Invalid key":["Неверный ключ"],"Unavailable in Dev Mode":["Недоступно в режиме разработки"],"Activating recommended features…":["Активация рекомендованных функций…"],"Recommended features active.":["Рекомендованные функции активированы."],"Recommended features failed to activate. %(error)s":["Не удалось активировать рекомендованные функции. %(error)s"],"Activating %(slug)s…":["Активация %(slug)s…"],"%(slug)s has been activated.":["Функция %(slug)s активирована."],"%(slug)s failed to activate. %(error)s":["Не удалось активировать %(slug)s. %(error)s"],"Deactivating %(slug)s…":["Деактивация %(slug)s…"],"%(slug)s has been deactivated.":["Функция %(slug)s деактивирована."],"%(slug)s failed to deactivate. %(error)s":["Не удалось деактивировать %(slug)s. %(error)s"],"Updating %(slug)s settings…":["Обновление настроек %(slug)s…"],"Updated %(slug)s settings.":["Обновлены настройки %(slug)s."],"Error updating %(slug)s settings. %(error)s":["Ошибка при обновлении настроек %(slug)s. %(error)s"],"Updating %(slug)s address…":["Обновление адреса %(slug)s…"],"Regenerated %(slug)s address .":["Повторно создан адрес %(slug)s."],"Error regenerating %(slug)s address. %(error)s":["Ошибка регенерации адреса %(slug)s. %(error)s"],"Resetting Jetpack options…":["Сброс параметров Jetpack…"],"Options reset.":["Параметры сброшены."],"Options failed to reset.":["Не удалось сбросить параметры."],"There was an error disconnecting Jetpack. Error: %(error)s":["При отключении Jetpack произошла ошибка. Ошибка: %(error)s"],"Unlinking from WordPress.com":["Отмена привязки к WordPress.com."],"Unlinked from WordPress.com.":["Привязка к WordPress.com отменена."],"Error unlinking from WordPress.com. %(error)s":["При отмене привязки к WordPress.com произошла ошибка. %(error)s"],"At A Glance":["Краткий обзор"],"Clichés":["Клише"],"Dashboard":["Консоль"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Расскажите нам о причинах. Ваши {{a}}ответы на два простых вопроса{{/a}} помогут нам сделать Jetpack лучше."],"Automattic's Privacy Policy":["Политика конфиденциальности Automattic"],"WordPress.com Terms of Service":["Условия предоставления услуг WordPress.com"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}Активируйте{{/a}}, чтобы повысить производительность и скорость обработки изображений."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Включить автоматическое обновление плагинов{{/a}}"],"Plugin Updates":["Обновления плагинов"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["Для автоматического резервного копирования всего сайта требуется {{a}}улучшить аккаунт{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["Ой! Ключ Akismet отсутствует или недействителен. {{akismetSettings}}Для исправления перейдите к настройкам Akismet{{/akismetSettings}}."],"No threats found, you're good to go!":["Угрозы не обнаружены, продолжайте работу!"],"{{a}}Contact Support{{/a}}":["{{a}}Обратиться в службу поддержки{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}Просмотр подробных сведений на VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["Внимание, обнаружена %(number)s угроза.","Внимание, обнаружены %(number)s угрозы.","Внимание, обнаружены %(number)s угрозы."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}Активируйте мониторинг{{/a}}, чтобы получать уведомления, когда сайт не работает."],"Loading…":["Загрузка..."],"Downtime monitoring":["Мониторинг доступности сайта"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}Просмотреть более подробную статистику на WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}Подробная статистика{{/button}}"],"All-time comments":["Комментарии за всё время"],"All-time views":["Просмотры за всё время"],"%(number)s View":["%(number)s просмотр","%(number)s просмотра","%(number)s просмотров"],"Best overall day":["Наибольшее число просмотров за день"],"Views today":["Просмотров сегодня"],"Months":["Мес."],"Weeks":["Нед."],"Days":["Дн."],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["При загрузке статистики произошла ошибка. Повторите попытку позже или {{a}}просмотрите статистику сейчас на WordPress.com{{/a}}"],"Click to view detailed stats.":["Нажмите для просмотра подробной статистики."],"Views: %(numberOfViews)s":["Просмотры: %(numberOfViews)s"],"Week of %(date)s":["Неделя %(date)s"],"Site Security":["Безопасность сайта"],"Activate recommended features":["Активировать рекомендованные функции"],"Link to WordPress.com":["Привязать к WordPress.com"],"Unlink me from WordPress.com":["Отменить мою привязку к WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["При подключении Jetpack произошла ошибка. Нажмите «Подключение к WordPress.com» еще раз."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["При подключении Jetpack возникла проблема. Деактивируйте этот плагин, затем активируйте и подключите снова."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Не выходите из учётной записи в своем блоге WordPress, пока идёт авторизация Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Сбой в работе Jetpack.{{/s}} Приносим извинения за неудобства. Повторите попытку позже. Если устранить неполадку не удастся, отправьте в службу поддержки следующее сообщение. %(error_key)s"],"Disconnecting Jetpack":["Отключение Jetpack"],"Learn more":["Узнать"],"Posts":["Записи"],"Front page":["Главная страница"],"Upload videos":["Загрузить видео"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Показывать похожее содержимое под записями"],"Related":["Похожее"],"Save":["Сохранить"],"Email Address":["Email адрес"],"Media":["Медиафайлы"],"Themes":["Темы"],"Site Stats":["Статистика сайта"],"Sharing":["Поделиться"],"Testimonials":["Отзывы"],"Cancel":["Отмена"],"Comments":["Комментарии"],"Ignored Phrases":["Игнорируемые фразы"],"Use automatically detected language to proofread posts and pages":["Использовать автоматически обнаруженный язык для проверки грамотности записей и страниц"],"Redundant Phrases":["Ненужные фразы"],"Phrases to Avoid":["Фразы, которые следует избегать"],"Passive Voice":["Страдательный залог"],"Jargon":["Жаргон"],"Hidden Verbs":["Скрытые глаголы"],"Double Negatives":["Двойное отрицание"],"Diacritical Marks":["Диакритические знаки"],"Complex Phrases":["Сложные фразы"],"Bias Language":["Ненормативная лексика"],"English Options":["\"Английские\" настройки"],"Proofreading":["Корректура"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack не смог подключиться к WordPress.com: . Обычно это происходит из-за неправильных настроек на веб-узле."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["На WordPress.com сейчас проблемы и \"заправить\" ваш Jetpack невозможно. Пожалуйста, попробуйте снова через некоторое время."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Сбой в работе Jetpack.{{/s}} Невозможно подключить этот сайт к WordPress.com. Обычно это означает, что ваш сайт не является общедоступным (размещен на локальном узле)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Ваш сайт должен быть общедоступным, чтобы иметь возможность использовать Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["Jetpack успешно отключен по вашему запросу"],"Edit":["Изменить"],"Connected":["Подключен"],"Activate":["Активировать"],"Active":["Активно"],"Search":["Поиск"],"Settings":["Настройки"],"Learn More":["Узнать"],"Disconnect Jetpack":["Отключить Jetpack"],"Test your site’s compatibility with Jetpack.":["Проверьте совместимость сайта с Jetpack."],"Settings header\u0004Plugin Autoupdates":["Автоматическое обновление плагинов"],"Settings header\u0004Downtime monitoring":["Мониторинг простоев"],"Settings header\u0004Privacy Settings":["Настройки приватности"],"Settings header\u0004WordPress.com toolbar":["Панель инструментов WordPress.com"],"Settings header\u0004Composing":["Создание записи"],"Settings header\u0004Site stats":["Статистика сайта"],"Settings header\u0004Search engine optimization":["Оптимизация для поисковых систем"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Кнопки \"Поделиться\""],"Settings header\u0004Publicize connections":["Подключения для публикации записей в социальных сетях"],"Settings header\u0004Like buttons":["Кнопки \"Нравится\""],"Settings header\u0004WordPress.com log in":["Вход WordPress.com "],"Settings header\u0004Brute force attack protection":["Защита от атак подбора"],"Settings header\u0004Backups and security scanning":["Резервирование и безопасность"],"Settings header\u0004Spam filtering":["Фильтрация спама"],"Navigation item.\u0004Performance":["Производительность"],"Navigation item.\u0004My Plan":["Мой тарифный план"],"Navigation item.\u0004Dev Tools":["Разработка"],"Navigation item.\u0004Settings":["Настройки"],"Navigation item.\u0004Discussion":["Обсуждение"],"Navigation item.\u0004Traffic":["Трафик"],"Navigation item.\u0004Sharing":["Поделиться"],"Navigation item.\u0004At A Glance":["Краткий обзор"],"Navigation item.\u0004Plans":["Тарифные планы"],"Navigation item.\u0004Writing":["Написание"],"Navigation item.\u0004Reset Options (dev only)":["Сброс параметров (только для версий разработки)"],"Navigation item.\u0004Security":["Безопасность"],"Navigation item.\u0004At a Glance":["Краткий обзор"],"Search term.\u0004terms of service":["условия использования "],"Search term.\u0004tos":["tos"],"Search term.\u0004gdpr":["gdpr"],"Search term.\u0004data":["данные"],"Search term.\u0004tracks":["отслеживание"],"Search term.\u0004privacy":["приватность"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["Улучшить"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Улучшить"],"Button caption\u0004Saving…":["Сохранение..."],"Button caption\u0004Save settings":["Сохранить настройки"],"A heading for a block of related posts.\u0004Related":["Похожие записи"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Предпросмотр"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Сохранить подключение"],"A caption for a button to disconnect.\u0004Disconnect":["Отключить"],"Short warning message\u0004Updates needed":["Требуется обновление"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Платно"],"A header for a preview area in the configuration screen.\u0004Preview":["Предпросмотр"],"Ads header\u0004Ads":["Реклама"],"Dashboard widget header\u0004Site connection":["Подключение сайта"],"Dashboard widget header\u0004Account connection":["Подключение аккаунта"],"A caption for a small button to fix security issues.\u0004Threats":["Угрозы"],"A caption for a small button to fix security issues.\u0004FIX":["Исправить"],"Short warning message about new threats found.\u0004Threats found!":["Найдены угрозы!"],"Short warning message about site having no security scan.\u0004No scanning":["Не проверено"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Улучшить"],"Short message informing user that the site is secure.\u0004Secure":["Безопасно"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Неверный ключ"],"Caption for a button to set up a feature.\u0004Set up":["Настроить"],"verb\u0004Copy":["Копировать"],"Shorthand for Privacy Policy.\u0004Privacy":["Политика конфиденциальности"],"Shorthand for Terms of Service.\u0004Terms":["Условия"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Отладка"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["Спам в комментариях заблокирован."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-sa_IN-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-sa_IN-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index f9c335f4..00000000
--- a/plugins/jetpack/languages/json/jetpack-sa_IN-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;"},"Themes":[""],"Disconnect Jetpack":[""],"Disconnecting Jetpack":[""],"Learn more":[""],"Front page":[""],"Posts":[""],"Site Stats":[""],"Save":[""],"Related":[""],"Show related content after posts":[""],"Google":[""],"Pinterest":[""],"Comments":[""],"Media":[""],"Email Address":[""],"Sharing":[""],"Cancel":[""],"Testimonials":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[""],"Proofreading":[""],"English Options":[""],"Bias Language":[""],"Complex Phrases":[""],"Diacritical Marks":[""],"Double Negatives":[""],"Hidden Verbs":[""],"Jargon":[""],"Passive Voice":[""],"Phrases to Avoid":[""],"Redundant Phrases":[""],"Use automatically detected language to proofread posts and pages":[""],"Ignored Phrases":[""],"Learn More":[""],"Settings":[""],"Search":[""],"Active":[""],"Activate":[""],"Connected":[""],"Edit":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-si_LK-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-si_LK-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index e0fdfc75..00000000
--- a/plugins/jetpack/languages/json/jetpack-si_LK-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"si_LK"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":[""],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":[""],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":[""],"Save Settings":[""],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":[""],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found."],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["","%(number)s Views"],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":[""],"Learn more":["තවත් ඉගෙනගන්න"],"Posts":["ලිපි"],"Front page":["මුල් පිටුව"],"Pinterest":[""],"Google":[""],"Show related content after posts":["ලිපි වලට පසුව ඒවාට අදාළ අන්තර්ගතයන් පෙන්වන්න."],"Related":[""],"Save":["සුරකින්න"],"Email Address":[""],"Media":["මාධ්‍යය"],"Themes":[""],"Site Stats":[""],"Sharing":[""],"Testimonials":[""],"Cancel":["අවලංගු කරන්න"],"Comments":["ප්‍රතිචාර"],"Ignored Phrases":[""],"Use automatically detected language to proofread posts and pages":[""],"Redundant Phrases":[""],"Phrases to Avoid":[""],"Passive Voice":[""],"Jargon":[""],"Hidden Verbs":[""],"Double Negatives":[""],"Diacritical Marks":[""],"Complex Phrases":[""],"Bias Language":[""],"English Options":[""],"Proofreading":[""],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[""],"You have successfully disconnected Jetpack":[""],"Edit":["සංස්කරණය"],"Connected":["සම්බන්ධිතයි"],"Activate":["සක්‍රිය කරන්න"],"Active":["සක්‍රිය"],"Search":["සෙවීම"],"Settings":["සැකසුම්"],"Learn More":["තවත් ඉගෙනගන්න"],"Disconnect Jetpack":[""],"Test your site’s compatibility with Jetpack.":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-sk_SK-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-sk_SK-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 5a6f19fa..00000000
--- a/plugins/jetpack/languages/json/jetpack-sk_SK-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;","lang":"sk"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":[""],"We’re now collecting stats and securing your site. Welcome aboard.":[""],"{{a}}Skip, and explore features individually{{/a}}.":[""],"Jetpack Business Plan":[""],"Jetpack Premium Plan":[""],"Jetpack Personal Plan":[""],"Get started with hassle-free design, stats, and performance tools.":[""],"Welcome to Jetpack Free":[""],"Jetpack Free Plan":[""],"Explore Jetpack plans":[""],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":[""],"Jetpack offers so much more":[""],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":[""],"Support documentation":[""],"Chat bubbles representing getting in touch with support":[""],"Site Activity":[""],"Start publicizing now":[""],"Reach a wider audience by automatically sharing your posts on social media.":[""],"Increase traffic to your site":[""],"Explore free themes":[""],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":[""],"A wide variety of themes and tools to customize a site":[""],"Set up your site security":[""],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":[""],"Site stats showing an evolution in traffic and engagement":[""],"A hand holding a loupe":[""],"A chart showing an healthy increase in earnings":[""],"Interface showing a chronological list of changes and updates in a site":[""],"A cloud with multiple types of content floating around it":[""],"A folder holding real comments":[""],"Make your site faster":[""],"Load pages faster by serving your images from our global network of servers.":[""],"A fast and performant website":[""],"A secure site, locked and protected by Jetpack":[""],"These settings won't apply to related posts added using the block editor.":[""],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":[""],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":[""],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":[""],"Add Like buttons to your posts and pages":[""],"When visitors enjoy your content, let them show it with a Like.":[""],"Explore your Jetpack Professional plan!":[""],"Explore your Jetpack Premium plan!":[""],"Explore your Jetpack Personal plan!":[""],"Create account":[""],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":[""],"Real-time, automated backups (unlimited storage)":[""],"Compose content the way you want to and streamline your publishing experience.":[""],"Add a portfolio item":[""],"Add a testimonial":[""],"Maximize your site’s visibility in search engines and view traffic stats in real time.":[""],"Create a Jetpack account to use this feature":[""],"Share your content on social media and increase audience engagement.":[""],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":[""],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":[""],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":[""],"Error enabling Site accelerator. %(error)s":[""],"Site accelerator is now speeding up your site!":[""],"Enabling Site accelerator…":[""],"Error disabling site accelerator. %(error)s":[""],"Site accelerator is no longer speeding up your site!":[""],"Disabling site accelerator…":[""],"Load pages faster, optimize images, and speed up your visitors’ experience.":[""],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":[""],"High-speed, high-definition video hosting with no third-party ads.":[""],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":[""],"Marketing Automation":[""],"Activate Jetpack Search":[""],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":[""],"Start earning":[""],"WordAds lets you earn money by displaying promotional content. Start earning today.":[""],"Spam is automatically blocked from your comments.":[""],"Spam Filtering":[""],"Browse premium themes":[""],"Access hundreds of beautifully designed premium themes at no extra cost.":[""],"Try a premium theme":[""],"View settings":[""],"Create a Jetpack account to view your email followers":[""],"Open your site to comments and invite subscribers to get alerts about your latest work.":[""],"Manage security settings":[""],"Built-in Performance":[""],"Jetpack is ready for the new WordPress editor":[""],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":[""],"Build your Jetpack site with blocks":[""],"A new editor? Yes! {{a}}Learn more{{/a}}.":[""],"The features you rely on, adapted for the new WordPress editor.":[""],"Take me to the new editor":[""],"Testing Jetpack Connection":[""],"There was an error testing Jetpack. Error: %(error)s":[""],"New in Jetpack!":[""],"Speed up static file load times":[""],"Speed up image load times":[""],"Enable site accelerator":[""],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":[""],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":[""],"View your site activity":[""],"View a chronological list of all the changes and updates to your site in an organized, readable way.":[""],"Manually Verify ":[""],"Verify with Google":[""],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":[""],"or":[""],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":[""],"Your site is verified with Google":[""],"Site failed to verify: %(error)s":[""],"Verifying...":[""],"Add faster, more advanced searching to your site with Jetpack Professional.":[""],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":[""],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":[""],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":[""],"Jetpack Search supports many customizations.":[""],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":[""],"Site is verified":[""],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":[""],"Spam filtering and priority support.":[""],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":[""],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":[""],"Custom ads.txt entries":[""],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":[""],"Introducing Premium Themes":[""]," Premium Themes":[""],"Privacy information":[""],"Enable Lazy Loading for images":[""],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":[""],"Performance & speed":[""],"Enable high-speed, ad-free video player":[""],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":[""],"Video":[""],"Carousel color scheme":[""],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":[""],"Show photo Exif metadata in carousel (when available)":[""],"Display images in a full-screen carousel gallery":[""],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":[""],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":[""],"Portfolios shortcode: [portfolio]":[""],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":[""],"Testimonials shortcode: [testimonials]":[""],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":[""],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":[""],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":[""],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":[""],"Configure related posts in the Customizer":[""],"Highlight related content with a heading":[""],"View security scan details":[""],"View backup history":[""],"Show a thumbnail image where available":[""],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":[""],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":[""],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":[""],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":[""],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["Táto funkcia je spravovaná administrátorom webovej stránky. {{link}}Dozvedieť sa viac{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["Táto funkcia bola zakázaná administrátorom webovej stránky. {{link}}Dozvedieť sa viac{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["Táto funkcia bola povolená administrátorom webovej stránky. {{link}}Dozvedieť sa viac{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["Modul %(moduleName)s bol zakázaný administrátorom webovej stránky. {{link}}Dozvedieť sa viac{{/link}}."],"This feature has been disabled by a site administrator.":["Táto funkcia bola zakázaná administrátorom webovej stránky."],"%(moduleName)s has been disabled by a site administrator.":["Modul %(moduleName)s bol zakázany administrátorom webovej stránky."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["Použitím widgetu Ad môžete umiestniť ďalšie reklamy. {{link}}Vyskúšajte!{{/link}}"],"Configure your notification settings":["Nakonfigurujte nastavenia svojich notifikácií"],"Monitor your site's downtime":["Monitorujte výpadky vašej webovej stránky"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":[""],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["Súbory vašej webovej stránky sú pravidelne kontrolované proti neoprávneným a podozrivým zmenám, ktoré by mohli kompromitovať vašu bezpečnosť a dáta."],"Plugin needs updating.":["Plugin vyžaduje aktualizáciu.","Pluginy vyžadujú aktualizáciu.","Pluginov vyžaduje aktualizáciu."],"%(number)s":["%(number)s","%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":[""],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":[""],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":["Jetpack monitor výpadkov bude neustále kontrolovať vašu webovú stránku a kontaktuje vás hneď, ako zistí výpadok."],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":[""],"Akismet checks your comments and contact form submissions against our global database of spam.":[""],"Privacy Information":["Ochrana osobných údajov"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":[""],"Add the Search (Jetpack) widget to your sidebar":[""],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":[""],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":[""],"Loads the next posts automatically when the reader approaches the bottom of the page.":[""],"Allows you to publish new posts by sending an email to a special address.":[""],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":[""],"Checks your content for correct grammar and spelling, misused words, and style while you write.":[""],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":[""],"Displays information on your site activity, including visitors and popular posts or pages.":[""],"Allows you to optimize your site and its content for better results in search engines.":[""],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":[""],"Displays high-quality ads on your site that allow you to earn income.":[""],"Adds sharing buttons to your content so that visitors can share it on social media sites.":[""],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":[""],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":[""],"Allows registered users to log in to your site with their WordPress.com accounts.":[""],"Protects your site from traditional and distributed brute force login attacks.":[""],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":[""],"Removes spam from comments and contact forms.":[""],"We are committed to your privacy and security. ":[""],"View all Jetpack plans":[""],"Manage your plan":[""],"Your Plan":[""],"You’re currently on Jetpack %(plan)s.":[""],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":[""],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":[""],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":[""],"Add Search (Jetpack) Widget":[""],"Jetpack Search is powering search on your site.":[""],"Manage your plugins":[""],"Moderate comments":[""],"Error updating privacy settings. %(error)s":[""],"Updated privacy settings.":[""],"Updating privacy settings…":[""],"Add Jetpack Search Widget":["Pridať widget Jetpack vyhľadávanie"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":[""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":[""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":[""],"Daily backups, spam filtering, and priority support.":["Denné zálohovanie, filtrovanie spamu a prioritná podpora."],"Always-on Security":["Nepretržite prístupné zabezpečenie"],"Activate video hosting":["Aktivovať video hosting"],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Okamžité zálohovanie všetkých webových stránok s neobmedzeným priestorom, obnoveniami na jedno kliknutie, zautomatizované skenovanie zabezpečenia a prioritná podpora."],"Design the perfect website":["Navrhnite úžasnú webovú stránku"],"Set up Jetpack":["Nainštalovať Jetpack"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["Okamžité zálohovanie všetkých webových stránok s neobmedzeným priestorom, obnovením na jedno kliknutie a zautomatizovaným skenovaním zabezpečenia."],"Jetpack Search":["Vyhľadávač Jetpack"],"Jetpack version %(version)s":["Jetpack verzia %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["Vaša webová stránka je zálohovaná v reálnom čase a pravidelne kontrolovaná proti bezpečnostným hrozbám."],"Daily backup of all your site data with unlimited space and one-click restores":["Denná záloha všetkých dát na vašej webovej stránke s neobmedzeným úložiskom a obnovou na jedno kliknutie"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Denná záloha všetkých dát na vašej webovej stránke s neobmedzeným úložiskom, obnovy na jedno kliknutie, automatická kontrola zabezpečenia a prioritná podpora"],"View your security activity":["Zobrazte svoju bezpečnostnú aktivitu"]," (powered by VaultPress).":["(poháňané modulom VaultPress)."],"Customize Search Widget":["Prispôsobiť widget vyhľadávania"],"Please correct the issue below and try again.":["Opravte problém nižšie a skúste to znova.","Opravte problémy nižšie a skúste to znova.","Opravte problémy nižšie a skúste to znova."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["Snažíme sa, aby vaša webová stránka zostala bez bezpečnostných hrozieb. Budete informovaní, ak nejakú nájdeme."],"Your site is being backed up in real-time.":["Vaša webová stránka je zálohovaná v reálnom čase."],"Jetpack version":["Jetpack verzia"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}Zobraziť aktivitu vašej webovej stránky{{/a}} v jednom informačnom kanáli."],"Activity":["Aktivita"],"Confirm each new phrase you add by pressing enter.":["Potvrďte každú novú frázu, ktorú pridáte, stlačením klávesu enter."],"{{a}}View details{{/a}}":["{{a}}Zobraziť podrobnosti{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["Ďakujeme, že ste si vybrali Jetpack Profesionálny plán. Jetpack práve zálohuje váš obsah, skenuje ohrozenie zabezpečenia a udeľuje prístup prémiovým témam."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["Môžete vytvoriť úžasnú webovú stránku s viac ako 300 profesionálne navrhnutými témami WordPress, vrátane viac než 100 prémiových tém, s Jetpack Profesionál. Prispôsobte si obsah s rôznymi widgetami alebo pridajte neobmedzené množstvo videí k vašim článkom a stránkam - zobrazené bez reklám a vodotlače."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["Profesionálny plán vám zaručí sledovanie webovej stránky vďaka zdieľaniu a plánovaniu obsahu, SEO nástrojov a zabudovaných odoberateľských možností. Môžete speňažiť svoju webovú stránku tlačidlom jednoduchej platby a radovými reklamami. Sledujte úspech vašej snahy začlenením Google Analytics. "],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Jetpack Profesionál vám dáva všetko, čo potrebujete k zabezpečeniu vašej práce, vrátane záloh na požiadanie a skenov malvérov s jedno-klikovým obnovením a vyriešením problémov. Webová stránka bude celkovo chránená pred spamom, škodlivým kódom a pokusmi prihlásenia hrubou silou."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Začnite objavovať Jetpack Profesionál a osvedčte si všetky výhody vášho nového plánu."],"Install premium themes":["Inštalovať prémiové témy"],"Review SEO features":["Preskúmajte SEO funkcie"],"Welcome Professional":["Vitaj Profesionál"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["Ďakujeme, že ste si vybrali Jetpack Premium plán. Jetpack práve zálohuje webovú stránku, skenuje hrozby zabezbepčenia a povoľuje prvky speňaženia."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["Môžete si vytvoriť úžasnú webovú stránku, nezáleží na účeli. Prispôsobte si vzhľad webovej stránky s viac ako 200 témami zadarmo alebo zlepšite obsah s HD videom veľkého až 13 GB - všetko hostované bez reklám alebo vodotlačí. To všetko s Jetpack Premium."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Používaním rýchlych zdieľacích nástrojov Jetpack môžete automaticky zdieľať najnovšie články na sociálnych sietiach alebo naplánovať znovu zdieľanie článku v hocaký deň alebo hodinu. Okrem získavania nových odberateľov, môžete podporiť obchod s nástrojmi ako tlačidlá platby a reklám."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Začnite objavovať Jetpack Premium vyskúšajte všetky výhody vášho nového plánu."],"Monetize your site with ads":["Speňažte svoju webovú stránku pomocou reklám"],"Welcome Premium":["Vitaj Premium"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["Ďakujeme, že ste si vybrali Jetpack Perosnal plán. Jetpack práve zálohuje webovú stránku a skenuje hrozby zabezpečenia."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["Máte prístup k viac ako 100 zadarmo, profesionálne navrhnutých tém WordPress s Jetpack Personal. Vyberte si tému, ktorá najlepšie pasuje na vašu webovú stránku a prispôsobte si farby, obrázky alebo pridajte rôzne nové widgety."],"Got it":["Mám to!"],"Welcome personal":["Vitaj osobný"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["Pripojením svojich webových stránok, súhlasíte s našimi fascinujúcimi {{tosLink}}Zmluvnými podmienkami{{/ tosLink}} a s {{shareDetailsLink}}podrobnosťami o zdieľaní{{/ shareDetailsLink}} s WordPress.com"],"Jetpack Stats People":["Jetpack Štatistiky Ľudí"],"Hello there! Your stats have been activated.":["Ahoj! Vaše štatistiky boli aktivované."],"Just give us a little time to collect data so we can display it for you here.":["Dajte nám trochu času na zhromažďovanie údajov, aby sme si ich tu mohli zobraziť."],"Okay, got it!":["OK, mám to!"],"Display ads below posts on":["Zobrazovať reklamy pod článkami na "],"Additional ad placements":["Dodatočné umiestnenie reklamy"],"Top of each page":["Horná časť každej stránky"],"Second ad below post":["Druhá reklama pod článkom"],"Archives":["Archívy"],"Explore Professional":["Preskúmať Professional"],"Compare All Plans":["Porovnať všetky plány"],"Person with laptop":["Osoba s notebookom"],"Your Jetpack site is ready to go!":["Vaša webová stránka je pripravená!"],"Stars":["Hviezdy"],"Jupiter":["Jupiter"],"Welcome to Jetpack Personal":["Vitajte v Jetpack Personal"],"Welcome to Jetpack Premium":["Vitajte v Jetpack Premium"],"Welcome to Jetpack Professional":["Vitajte na Jetpack Professional"],"Schedule posts":["Plánovanie článkov"],"Activate Publicize":["Aktivovať modul Publicize"],"Your site is backed up.":["Vaša stránka je zálohovaná."],"Image Performance":["Obrázok výkonu"],"Get WordPress Apps for every device":["Stiahnite si WordPress aplikácie pre všetky zariadenia "],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Spravujte všetky vaše webové stránky z jednej nástenky: zverejňujte obsah, sledujte štatistiky, spravujte komentáre a využívajte mnoho ďalších funkcií odkiaľkoľvek na svete"],"I already use this app.":["Už túto aplikáciu používam."],"Create address":["Vytvoriť adresu "],"Priority support":["Prioritná podpora"],"Add sharing buttons to your posts":["Pridá do vašich článkov tlačidlá pre zdieľanie"],"Automatically share your posts to social networks":["Automaticky zdieľajte vaše články na sociálnych sieťach"],"Updating settings…":["Aktualizácia nastavení…"],"Updating Post by Email address…":["Aktualizácia článku e-mailovou adresou…"],"Your paid plan gives you access to prioritized Jetpack support.":["Váš platený paušál vám poskytuje prístup k prioritnej podpore."],"You have paid for backups but they're not yet active.":["Zakúpili ste si funkcionalitu zálohovania, ale zatiaľ nie je aktívna."],"You have paid for backups and security scanning but they’re not yet active.":["Zakúpili ste si funkcionalitu zálohovania a automatickej kontroly zabezpečenia, ale zatiaľ nie sú aktívne."],"Click \"Set Up\" to finish installation.":["Kliknite na \"Nastaviť\" k dokončeniu inštalácie."],"Checking site status…":["Kontroluje sa stav webovej stránky…"],"Pages":["Stránky"],"We're here to help":["Sme tu, aby sme vám pomohli "],"Jetpack comes with free, basic support for all users.":["Jetpack je dodávaný s bezplatnou základnou podporou pre všetkých používateľov."],"Ask a question":["Položiť otázku"],"Search our support site":["Prehľadávať našu webovú stránku podpory"],"Get a faster resolution to your support questions.":["Získajte rýchlejšie riešenia na vaše otázky týkajúce sa podpory."],"Host fast, high-quality, ad-free video.":["Hosťujte rýchle, vysokokvalitné vidá bez reklám."],"Generate income with high-quality ads.":["Zarábajte vkladaním vysoko kvalitných reklám."],"Real-time site backups and automatic threat resolution.":["Zálohovanie webovej stránky v reálnom čase a automatické riešenie hrozieb."],"Protect against data loss, malware, and malicious attacks.":["Chráni pred stratou dát, malvérom a škodlivými útokmi."],"Integrate easily with Google Analytics.":["Integrujte so službou Google Analytics."],"Help your content get found and shared with SEO tools.":["Pomôžte svoj obsah nájsť a zdieľať s nástrojmi SEO."],"Protect your site from spam.":["Chráňte svoju webovú stránku pred spamom."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["Táto webová stránka nie je pripojená k WordPress.com. Požiadajte administrátora webovej stránky vytvorenie pripojenia."],"Spam filtering":["Filtrovanie spamu"],"Daily, automated malware scanning":["Denné automatizované skenovania proti malvéru"],"Daily, automated backups (unlimited storage)":["Denné automatizované zálohovanie (s neobmedzeným úložiskom)"],"Daily, automated malware scanning with automated resolution":["Denné automatizované skenovanie proti malvéru s automatickým riešením problémov"],"Unlimited, high-speed video hosting":[""],"SEO preview tools":["Ukážkový nástroj SEO"],"Site stats, related content, and sharing tools":["Štatistiky stránky, súvisiaci obsah a nástroje na zdieľanie"],"Brute force attack protection and downtime monitoring":["Ochrana pred útokmi hrubou silou a monitorovanie doby prevádzky "],"Unlimited, high-speed image hosting":["Neobmedzený vysokorýchlostný hosting pre obrázky"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["Odpojením %(siteName)s od WordPress.com už nebudete mať prístup k týmto službám:"],"Read more about Jetpack benefits":["Prečítajte si viac o výhodách pluginu Jetpack"],"An Automattic Airline":[""],"Manage site connection":["Spravovať pripojenie webovej stránky"],"Connect your account to WordPress.com to view more stats":["Pre zobrazenie ďalších štatistík pripojte váš účet k WordPress.com"],"Theme enhancements":["Vylepšenia témy"],"Load more posts using the default theme behavior":["Načítať viac článkov pomocou predvoleného správania témy"],"Load more posts in page with a button":["Načítať viac článkov na stránke pomocou tlačidla"],"Load more posts as the reader scrolls down":["Načítať viac článkov, keď sa čitateľ posúva nadol"],"Theme support required.":["Je potrebná podpora témy."],"Learn more about adding support for Infinite Scroll to your theme.":["Dozvedieť sa viac o pridávaní podpory pre Nekonečné skrolovanie na vašu tému."],"Use excerpts instead of full posts on front page and archive pages":["Použávajte úryvky namiesto celých článkov na úvodnej stránke a archívnych stránok. "],"Show featured images":["Zobraziť ilustračné obrázky"],"Enable the WordPress.com toolbar":["Povoliť panel nástrojov WordPress.com"],"Writing tools available to you will be shown here when an administrator enables them.":["Nástroje na písanie, ktoré máte k dispozícii, sa zobrazia tu, keď ich administrátor povolí."],"Portfolios":["Portfóliá"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Všimnite si, že {{b}}overovanie webovej stránky týmito službami nie je potrebné{{/b}}, aby webová stránka bola indexovaná vyhľadávacím nástrojom. Prilepte nižšie uvedený HTML kód značky, pokiaľ chcete využiť pokročilé vyhľadávacie nástroje a overiť webovú stránku so službou. Keď problémy pretrvávajú, prečítajte si {{support}}celkové inštrukcie {{/support}}. Podporované služby overovania: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, a {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["Generovať XML mapy stránok"],"Collecting valuable traffic stats and insights":["Zhromažďovanie cenných štatistických údajov o premávke a postrehy"],"The image helps collect stats, but should work when hidden.":["Obrázok pomáha zhromažďovať štatistiky, ale mal by fungovať, ak je skrytý."],"Count logged in page views from":["Spočítať náhľady prihlásenia na stránku z"],"Allow stats reports to be viewed by":["Povoliť záznamy štatisky komu"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["Môžete doladiť nastavenia, ak si želáte vyspelejšiu kontrolu. Prečítajte si viac o tom, čo môžete spraviť na {{a}}optimalizovanie SEO{{/a}} webovej stránky. "],"Configure your SEO settings":["Nakonfigurujte svoje SEO nastavenia"],"In \"Upgrade\"":["V kategórii \"Aktualizácie\" "],"Configure your Google Analytics settings":["Nakonfigurujte svoje Google Analytics nastavenia"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Zobraziť reklamy v prvom článku úvodnej stránky alebo na konci každej stránky a článku. Umiestnite dodatočné reklamy na vrch webovej stránky a do hocijakej oblasti widget, čím zarobíte viac."],"Enable ads and display an ad below each post":["Povoľte reklamy a zobrazte reklamu pod každým článkom"],"Configure your sharing buttons":["Nakonfigurujte svoje tlačidlá zdieľania"],"Connect your social media accounts":["Pripojte svoje účty sociálnych médií"],"Match accounts using email addresses":["Spárovať účty použitím e-mailových adries"],"Require accounts to use WordPress.com Two-Step Authentication":["Vyžadovať účty pre použitie dvojcestného overenia WordPress.com"],"Add to whitelist":["Pridať na zoznam povelených"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["Môžete zadať zoznam IP adries alebo sériu adries, ktoré im bránia zablokovať Jetpack. IPv4 a IPv6 sú prijateľné. Ak chcete určiť rozsah, zadajte nízku hodnotu a vysokú hodnotu oddelenú pomlčkou. Príklad: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["Vaša webová stránka je zálohovaná a bez ohrozenia."],"Checking your spam protection…":["Kontroluje sa vaša ochrana proti spamu…"],"Fetching key…":["Načítava sa kľúč…"],"Your site needs an Antispam key.":["Vaša webová stránka potrebuje kľúč služby Antispam."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["Vyskytol sa problém s API kľúčom služby Antispam. {{a}}Dozvedieť sa viac{{/a}}."],"Your site is not protected from spam.":["Vaša webová stránka nie je chránená pred spamom."],"Your Antispam key is valid.":["Váš kľúč služby Antispam je platný."],"Your site is protected from spam.":["Vaša webová stránka je chránená pred spamom."],"Checking key…":["Kontroluje sa kľúč…"],"Your API key":["Váš API kľúč"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["Pokiaľ ešte nemáte svoj API kľúč, potom {{a}} získajte svoj API kľúč tu {{a}}. Naviguje vás to preocesom získania kľúča."],"No search results found for %(term)s":["Neboli nájdené žiadne výsledky vyhľadávania pre %(term)s"],"Enter a search term to find settings or close search.":["Pre nájdenie nastavení zadajte hľadaný výraz alebo zavrite vyhľadávanie."],"Connections":["Pripojenia"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Vaša webová stránka je vo vývojárskom režime, a preto nemôže byť pripojená k WordPress.com."],"Your site is connected to WordPress.com.":["Vaša webová stránka je pripojená na WordPress.com."],"You are the Jetpack owner.":["Ste Jetpack vlastník."],"Connected as {{span}}%(username)s{{/span}}":["Pripojený ako {{span}}%(username)s{{/span}}"],"View your Email Followers":["Zobraziť vašich e-mailových odberateľov"],"Color scheme":["Farebná schéma"],"Enable Markdown use for comments.":["Povoliť používanie jazyka Markdown pri komentároch."],"Updated settings.":["Nastavenia boli aktualizované."],"Error updating settings. %(error)s":["Pri aktualizácii nastavení sa vyskytla chyba. %(error)s"],"Regenerated Post by Email address.":["Novo vygenerovaná adresa služby Zverejniť cez e-mail."],"Error regenerating Post by Email address. %(error)s":["Pri generovaní novej adresy služby Zverejniť cez e-mail sa vyskytla chyba. %(error)s"],"Updated settings. Refreshing page…":["Nastavenia boli aktualizované. Obnovuje sa stránka..."],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["Momentálne používate {{a}}Vývojový mód{{/a}} (niektoré funkcie sú zakázané), pretože: {{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}Máte aktivovaný filter jetpack_development_mode{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}Máte zadefinovanú konštantu JETPACK_DEV_DEBUG{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}V URL adrese vašej webovej stránky chýba bodka (napr. http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics je bezplatná služba, ktorá dopĺňa naše {{a}}vstavané štatistiky{{/a}} s rôznymi pohľadmi na vašu návštevnosť. Štatistiky WordPress.com a Google Analytics používajú rozdielne metódy na identifikáciu a sledovanie aktivity na vašich webových stránkach, takže bežne budú ukazovať odlišné súčty vašich návštev, zobrazení, atď."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Nakonfigurujte Google Analytics"],"Activate Google Analytics":["Aktivovať Google Analytics"],"Download the free apps":["Stiahnite si bezplatné aplikácie"],"Upgrade Focus: VideoPress For Weddings":["Zameranie aktualizácie: VideoPress pre svadby"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}Odteraz tiež môžete nakonfigurovať súvisiace články cez Možnosti prispôsobenia. {{ExternalLink}}Vyskúšajte!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["V predvolenom nastavení sa reklamy zobrazujú na konci každej stránky, článku alebo prvého článku na vašej titulnej stránke. Pre zvýšenie vašich zárobkov ich tiež môžete pridať na vrch vašej webovej stránky a do akejkoľvek oblasti pre widgety!"],"Display an ad unit at the top of your site.":["Zobraziť reklamu na vrchu vašej webovej stránky."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["Aktivováciou reklamy súhlasíťe s {{link}}podmienkami služby{{/link}} Automattic Ads. "],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Modul Ochrana nedokáže efektívne chrániť vašu webovú stránku kvôli nesprávnej konfigurácii vášho servera."],"In \"Mobile\"":["V \"mobilnom telefóne\""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Nakonfigujte vaše nastavenia notifikácií z monitoringu na WordPress.com{{/link}}"],"View your earnings":["Zobraziť vaše zárobky"],"Configure site SEO":["Konfigurovať SEO "],"Activate SEO tools":["Aktivovať SEO nástroje"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["Pre začatie kliknite na tlačidlo Pridať súbor v editore článkov a nahrajte video; o ostatné sa už postaráme my!"],"Video Hosting":["Video hosting"],"SEO Tools":["SEO nástroje"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Pokročilé SEO nástroje, ktoré pomáhajú ľuďom nájsť vašu webovú stránku, keď hľadajú relevantný obsah."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["Najjednoduchší spôsob nahrania neznačkových videí bez reklám na vašu webovú stránku. Budete dostávať štatistiky o prehrávaní a zdieľaní a prehrávač je jednoduchý a responzívny."],"You are running Jetpack on a staging server.":["Používate Jetpack na staging serveri."],"More Info":["Viac informácií"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Spravujte viditelnosť lajkov prostredníctvom nastavení modulu zdieľania.{{/a}}"],"Your current IP: %(ip)s":["Vaša aktuálna IP adresa: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["Na tejto záložke sú neuložené nastavenia, ktoré budú stratené, ak odídete. Pokračovať?"],"This will reset all Jetpack options, are you sure?":["Všetky Jetpack nastavenia budú resetnuté, ste si istý?"],"Search for a Jetpack feature.":["Prehľadávať Jetpack funkcie."],"Configure your Security Scans":["Konfigurovať vašu kontrolu zabezpečenia"],"Subscriber":["Odberateľ"],"Big iPhone/iPad Update Now Available":["Veľká aktualizácia pre iPhone/iPad je už dostupná"],"The WordPress for Android App Gets a Big Facelift":["Aplikácia WordPress pre Android dostala úplne nový vzhľad"],"WordPress.com Likes are:":["Lajky WordPress.com sú"],"Comments headline":["Nadpis komentárov"],"A few catchy words to motivate your readers to comment.":["Zopár chytľavých slov, ktoré motivujú vašich čitateľov, aby nechali komentár."],"Show a \"follow blog\" option in the comment form":["Zobraziť možnosť \"sledovať blog\" vo formulári komentárov"],"Show a \"follow comments\" option in the comment form":["Zobraziť možnosť \"sledovať komentáre\" vo formulári komentárov"],"Put a chart showing 48 hours of views in the admin bar":["Umiestniť graf posledných zobrazení za 48 hodín do panela nástrojov"],"Hide the stats smiley face image":["Skryť obrázok smajlíka v štatistikách"],"Whitelisted IP addresses":["IP adresy na whitelist zozname"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Zobraziť reklamu na WordPress mobilné aplikácie v pätičke mobilnej témy"],"Copied!":["Skopírované!"],"Highlight and copy the following text to your clipboard:":["Zvýrazniť a skopírovať nasledovný text do vašej schránky:"],"Regenerate address":["Vygenerovať novú adresu"],"Automatically proofread content when: ":["Automaticky korigovať obsah, keď:"],"A post or page is first published":["Článok alebo stránka je prvýkrát zverejnená"],"A post or page is updated":["Článok alebo stránka je aktualizovaná"],"Automatic Language Detection":["Automatické rozpoznanie jazyka"],"The proofreader supports English, French, German, Portuguese and Spanish.":["Korektor podporuje angličtinu, francúzštinu, nemčinu, portugalčinu a španielčinu."],"Enable proofreading for the following grammar and style rules: ":["Povoliť korektúru pre nasledujúce gramatické a štýlové pravidlá:"],"Add a phrase":["Pridať frázu"],"Cheatin' uh?":["Klamete?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}Boli by ste nám ochotný v nasledovnom {{a}}krátkom prieskume{{/a}}prezradiť, prečo ste nedokončili Jetpack pripojenie?{{/p}}{{p}}Jetpack pripojenie je nevyhnutné pre fungovanie našich bezplatných funkcií zabezpečenia a návštevnosti.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Víta vás {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["Váš Jetpack je už pripojený."],"You're fueled up and ready to go, Jetpack is now active.":["Všetko je nastavené, pripravené a Jetpack aktívny."],"You're fueled up and ready to go.":["Všetko je nastavené a pripravené."],"You are currently running a development version of Jetpack.":["Momentálne používate vývojovú verziu pluginu Jetpack."],"Submit Beta feedback":["Odoslať spätnú väzbu na beta verziu"],"What would you like to see on your Jetpack Dashboard?":["Čo by ste radi videli na Jetpack nástenke?"],"Let us know!":["Dajte nám vedieť!"],"Saving…":["Ukladá sa..."],"Save Settings":["Uložiť nastavenie"],"Jetpack Stats Icon":["Ikona Jetpack štatistík"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Aktivujte modul Štatistiky{{/a}}, aby ste videli detailné štatistiky o lajkoch, odberateľoch a ďalších parametroch! {{a1}}Dozvedieť sa viac{{/a1}}"],"Activate Site Stats":["Aktivovať modul Štatistiky"],"Security Scanning":["Kontrola zabezpečenia"],"Site Backups":["Zálohy webovej stránky"],"Upgrade":["Vylepšiť"],"ACTIVE":["AKTÍVNY"],"Your site is on Development Mode":["Vaša webová stránka má aktivovaný Vývojový mód"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Akonáhle sa pripojíte, môžete zakúpiť platený paušál a odomknúť tak jedno z najlepších zabezpečení na svete, nástroje na ochranu proti spamu a prioritnú podporu."],"View your spam stats":["Zobraziť vaše spamové štatistiky"],"View your security dashboard":["Zobraziť vašu nástenku zabezpečenia"],"The site is in Development Mode, so you can not connect to WordPress.com.":["Webová stránka je vo vývojovom móde, a preto sa nemôžete pripojiť na WordPress.com."],"Link your account to WordPress.com to get the most out of Jetpack.":["Ak chcete využívať Jepack naplno, pripojte váš účet na WordPress.com."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["Pre automatizované a komplexné skenovanie bezpečnostných hrozieb {{a}}nainštalujte a aktivujte{{/a}} VaultPress."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["Pre automatizované a komplexné skenovanie bezpečnostných hrozieb {{a}}zakúpte vyšší paušál{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack aktívne blokuje zlomyseľné pokusy o prihlásenie. Čoskoro tu uvidíte konkrétne údaje!"],"Total malicious attacks blocked on your site.":["Celkový počet zlomyseľných útokov zablokovaných na vašej webovej stránke."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Aktivujte modul Ochrana{{/a}}, aby ste chránili vašu webovú stránku pred zlomyseľnými pokusmi o prihlásenie."],"All plugins are up-to-date. Awesome work!":["Všetky pluginy sú aktuálne. Skvelá práca!"],"Jetpack is improving and optimizing your image speed.":["Jetpack vylepšuje a optimalizuje rýchlosť vašich obrázkov."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack monitoruje vašu webovú stránku. Ak máme podozrenie, že je vaša webová stránka nedostupná, dostanete o tom e-mail."],"Security":["Zabezpečenie"],"Performance":["Výkon"],"Backups":["Zálohy"],"{{a}}View backup details{{/a}}.":["{{a}}Zobraziť detaily zálohy{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["Pre automatické zálohovanie celej vašej webovej stránky {{a}}nainštalujte a aktivujte{{/a}} VaultPress."],"Unavailable in Dev Mode.":["Nedostupné vo vývojovom móde."],"Spam Protection":["Ochrana proti spamu"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["Pre špičkovú ochranu proti spamu {{a}}nainštalujte Akismet{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["Pre špičkovú ochranu proti spamu {{a}}aktivujte Akismet{{/a}}."],"Invalid key":["Neplatný kľúč"],"Unavailable in Dev Mode":["Nedostupné vo vývojovom móde"],"Activating recommended features…":["Aktivujú sa odporúčané funkcie..."],"Recommended features active.":["Odporúčané funkcie sú aktívne."],"Recommended features failed to activate. %(error)s":["Odporúčané funkcie sa nepodarilo aktivovať. %(error)s"],"Activating %(slug)s…":["Aktivujú sa %(slug)s…"],"%(slug)s has been activated.":["%(slug)s boli aktivované."],"%(slug)s failed to activate. %(error)s":["%(slug)s sa nepodarilo aktivovať. %(error)s"],"Deactivating %(slug)s…":["Deaktivujú sa %(slug)s…"],"%(slug)s has been deactivated.":["%(slug)s boli deaktivované."],"%(slug)s failed to deactivate. %(error)s":["%(slug)s sa nepodarilo deaktivovať. %(error)s"],"Updating %(slug)s settings…":["Aktualizujú sa nastavenia pre %(slug)s..."],"Updated %(slug)s settings.":["Nastavenia pre %(slug)s boli aktualizované."],"Error updating %(slug)s settings. %(error)s":["Vyskytla sa chyba pri aktualizovaní nastavení pre %(slug)s. %(error)s"],"Updating %(slug)s address…":["Aktualizuje sa adresa pre %(slug)s..."],"Regenerated %(slug)s address .":["Bola vygenerovaná nová adresa pre %(slug)s."],"Error regenerating %(slug)s address. %(error)s":["Vyskytla sa chyba pri generovaní novej adresy pre %(slug)s. %(error)s"],"Resetting Jetpack options…":["Resetujú sa Jetpack nastavenia..."],"Options reset.":["Nastavenia boli resetnuté."],"Options failed to reset.":["Nepodarilo sa resetnúť nastavenia."],"There was an error disconnecting Jetpack. Error: %(error)s":["Nastala chyba pri odpájaní pluginu Jetpack. Chyba: %(error)s"],"Unlinking from WordPress.com":["Prebieha odpájanie z WordPress.com"],"Unlinked from WordPress.com.":["Odpojenie z WordPress.com bolo úspešné."],"Error unlinking from WordPress.com. %(error)s":["Vyskytla sa chyba pri odpájaní z WordPress.com. %(error)s"],"At A Glance":["Na prvý pohľad"],"Clichés":["Klišé"],"Dashboard":["Nástenka"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Poviete nám prečo? {{a}}Odpovedaním na 2 jednoduché otázky{{/a}} nám pomôžete vylepšiť Jetpack."],"Automattic's Privacy Policy":["Ochrana osobných údajov v Automattic"],"WordPress.com Terms of Service":["Podmienky poskytovania služby WordPress.com"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}Aktivujte{{/a}} pre zvýšenie výkonu a rýchlosti načítavania vašich obrázkov."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Zapnúť automatické aktualizácie pluginov{{/a}}"],"Plugin Updates":["Aktualizácie pluginov"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["Pre automatické zálohovanie celej vašej webovej stránky {{a}}zakúpte vyšší paušál{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["Hups! Váš Akismet kľúč chýba alebo je neplatný. {{akismetSettings}}Choďte do nastavení pluginu Akismet a odstráňte chybu{{/akismetSettings}}."],"No threats found, you're good to go!":["Neboli nájdené žiadne hrozby, môžete pokračovať!"],"{{a}}Contact Support{{/a}}":["{{a}}Kontaktovať podporu{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}Zobraziť detaily na VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["Och, bola nájdená %(number)s hrozba.","Och, boli nájdené %(number)s hrozby.","Och, bolo nájdených %(number)s hrozieb."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["Pre dostávanie e-mailových notifikácií v prípade výpadku vašej webovej stránky {{a}}aktivujte monitoring{{/a}}."],"Loading…":["Načítava sa..."],"Downtime monitoring":["Monitoring výpadkov"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}Zobraziť viac štatistík na WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}Zobraziť detailné štatistiky{{/button}}"],"All-time comments":["Celkový počet komentárov"],"All-time views":["Celkový počet zobrazení"],"%(number)s View":["%(number)s zobrazenie","%(number)s zobrazenia","%(number)s zobrazení"],"Best overall day":["Najlepší deň doteraz"],"Views today":["Dnešné zobrazenia"],"Months":["Mesiace"],"Weeks":["Týždne"],"Days":["Dni"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["Počas načítavania štatistík sa niečo pokazilo. Skúste to znova neskôr alebo {{a}}si pozrite vaše štatistiky teraz na WordPress.com{{/a}}"],"Click to view detailed stats.":["Pre zobrazenie detailných štatistík kliknite sem."],"Views: %(numberOfViews)s":["Počet zobrazení: %(numberOfViews)s"],"Week of %(date)s":["Týždeň s dátumami %(date)s"],"Site Security":["Zabezpečenie webovej stránky"],"Activate recommended features":["Aktivovať odporúčané funkcie"],"Link to WordPress.com":["Pripoj ma na WordPress.com"],"Unlink me from WordPress.com":["Odpoj ma z WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["Počas pripájania pluginu Jetpack sa vyskytol problém. Kliknite znova na &#8220;Pripojiť k WordPress.com&#8221;."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["Počas pripájania pluginu Jetpack sa vyskytol problém. Deaktivujte a znovu aktivujte Jetpack a skúste sa pripojiť znova."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Počas overovania pluginu Jetpack musíte zostať prihlásený vo vašom WordPress blogu."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Váš Jetpack má poruchu.{{/s}} Ospravedlňujeme sa za vzniknuté nepríjemnosti. Skúste to znova neskôr a ak váš problém pretrváva, kontaktujte podporu a poskytnite im nasledovnú chybovú hlášku: %(error_key)s"],"Disconnecting Jetpack":["Odpájanie pluginu Jetpack"],"Learn more":["Dozvedieť sa viac"],"Posts":["Články"],"Front page":["Titulná stránka"],"Upload videos":["Nahrať video"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Zobraziť súvisiaci obsah pod článkami"],"Related":["Súvisiace"],"Save":["Uložiť"],"Email Address":["E-mailová adresa"],"Media":["Multimédiá"],"Themes":["Témy"],"Site Stats":["Štatistiky"],"Sharing":["Zdieľanie"],"Testimonials":["Odporúčania"],"Cancel":["Zrušiť"],"Comments":["Komentáre"],"Ignored Phrases":["Ignorované frázy"],"Use automatically detected language to proofread posts and pages":["Použiť automatické rozpoznávanie jazyka pre korekciu článkov a stránok"],"Redundant Phrases":["Redundantné frázy"],"Phrases to Avoid":["Frázy, ktorých sa treba vyvarovať"],"Passive Voice":["Trpný rod"],"Jargon":["Žargón"],"Hidden Verbs":["Skryté slovesá"],"Double Negatives":["Dvojité zápory"],"Diacritical Marks":["Diakritika"],"Complex Phrases":["Zložité frázy"],"Bias Language":["Nevhodný jazyk"],"English Options":["Možnosti angličtiny"],"Proofreading":["Korektúra"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack sa nedokáže spojiť s WordPress.com servermi: %(error_key)s. Táto chyba zvyčajne znamená chybu v konfigurácii na vašom hostingu."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com má momentálne problémy a nie je schopný komunikovať s pluginom Jetpack. Skúste to znova neskôr."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Váš Jetpack má poruchu.{{/s}} Pripojenie tejto webovej stránky na WordPress.com nie je možné. Zvyčajne to znamená, že vaša webová stránka nie je verejne prístupná (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Vaša webová stránka musí byť dostupná verejne, aby mohla využívať Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["Jetpack bol úspešne odpojený."],"Edit":["Upraviť"],"Connected":["Pripojený"],"Activate":["Aktivovať"],"Active":["Aktívny"],"Search":["Hľadať"],"Settings":["Nastavenia"],"Learn More":["Dozvedieť sa viac"],"Disconnect Jetpack":["Odpojiť Jetpack"],"Test your site’s compatibility with Jetpack.":["Testovať kompatibilitu vašej webovej stránky s modulom Jetpack."],"Settings header\u0004Plugin Autoupdates":[""],"Settings header\u0004Downtime monitoring":["Monitoring výpadkov"],"Settings header\u0004Privacy Settings":[""],"Settings header\u0004WordPress.com toolbar":["Panel nástrojov WordPress.com"],"Settings header\u0004Composing":["Tvorenie"],"Settings header\u0004Site stats":["Štatistiky webovej stránky"],"Settings header\u0004Search engine optimization":["Optimalizácia pre vyhľadávače"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Tlačidlá zdieľania"],"Settings header\u0004Publicize connections":["Pripojenia modulu Publicize"],"Settings header\u0004Like buttons":["Tlačidlá lajkov"],"Settings header\u0004WordPress.com log in":["Prihlásenie WordPress.com"],"Settings header\u0004Brute force attack protection":["Ochrana proti útokom hrubou silou"],"Settings header\u0004Backups and security scanning":["Zálohovanie a bezpečnostné skenovanie"],"Settings header\u0004Spam filtering":["Filtrovanie spamu"],"Navigation item.\u0004Performance":[""],"Navigation item.\u0004My Plan":[""],"Navigation item.\u0004Dev Tools":["Vývojárske nástroje"],"Navigation item.\u0004Settings":["Nastavenia"],"Navigation item.\u0004Discussion":["Diskusia"],"Navigation item.\u0004Traffic":["Návštevnosť"],"Navigation item.\u0004Sharing":["Zdieľanie"],"Navigation item.\u0004At A Glance":["Na prvý pohľad"],"Navigation item.\u0004Plans":["Paušály"],"Navigation item.\u0004Writing":["Písanie"],"Navigation item.\u0004Reset Options (dev only)":["Resetnúť nastavenia (len pre vývojárske verzie)"],"Navigation item.\u0004Security":["Zabezpečenie"],"Navigation item.\u0004At a Glance":["Na prvý pohľad"],"Search term.\u0004terms of service":["Podmienky poskytovania služby"],"Search term.\u0004tos":["tos"],"Search term.\u0004gdpr":["gdpr"],"Search term.\u0004data":["data"],"Search term.\u0004tracks":["tracks"],"Search term.\u0004privacy":["privacy"],"Caption for a button to purchase a pro plan.\u0004Upgrade":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Zakúpiť"],"Button caption\u0004Saving…":["Ukladá sa..."],"Button caption\u0004Save settings":["Uložiť nastavenia"],"A heading for a block of related posts.\u0004Related":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Náhľad"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Zostať pripojený"],"A caption for a button to disconnect.\u0004Disconnect":["Odpojiť"],"Short warning message\u0004Updates needed":["Je potrebné nainštalovať aktualizácie"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Platené"],"A header for a preview area in the configuration screen.\u0004Preview":["Náhľad"],"Ads header\u0004Ads":["Reklamy"],"Dashboard widget header\u0004Site connection":["Pripojenie webovej stránky"],"Dashboard widget header\u0004Account connection":["Pripojenie účtu"],"A caption for a small button to fix security issues.\u0004Threats":["Hrozby"],"A caption for a small button to fix security issues.\u0004FIX":["OPRAVIŤ"],"Short warning message about new threats found.\u0004Threats found!":["Boli nájdené hrozby!"],"Short warning message about site having no security scan.\u0004No scanning":["Žiadne skenovanie "],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Zakúpiť"],"Short message informing user that the site is secure.\u0004Secure":["Zabezpečená"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Neplatný kľúč"],"Caption for a button to set up a feature.\u0004Set up":["Nastaviť"],"verb\u0004Copy":["Kopírovať"],"Shorthand for Privacy Policy.\u0004Privacy":["Ochrana osobných údajov"],"Shorthand for Terms of Service.\u0004Terms":["Podmienky"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Ladenie"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["spamových správ bolo zablokovaných."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-sl_SI-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-sl_SI-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 668178c5..00000000
--- a/plugins/jetpack/languages/json/jetpack-sl_SI-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"},"Disconnect Jetpack":[""],"Disconnecting Jetpack":[""],"Learn more":[""],"Site Stats":[""],"Front page":[""],"Posts":[""],"Comments":[""],"Media":[""],"Email Address":[""],"Save":["Shrani"],"Related":[""],"Show related content after posts":[""],"Google":[""],"Pinterest":[""],"Testimonials":[""],"Sharing":[""],"Cancel":["Prekliči"],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[""],"Proofreading":[""],"English Options":[""],"Bias Language":[""],"Complex Phrases":[""],"Diacritical Marks":[""],"Double Negatives":[""],"Hidden Verbs":[""],"Jargon":[""],"Passive Voice":[""],"Phrases to Avoid":[""],"Redundant Phrases":[""],"Use automatically detected language to proofread posts and pages":[""],"Ignored Phrases":[""],"Activate":["Aktiviraj"],"Connected":["Povezan"],"Edit":["Uredi"],"Learn More":[""],"Settings":[""],"Search":["Iskanje"],"Active":["Aktiven"]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-sq-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-sq-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 6be3a796..00000000
--- a/plugins/jetpack/languages/json/jetpack-sq-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"sq_AL"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":["Më tej, aktivizoni grupin e rekomanduar të veçorive Jetpack për të maksimizuar sigurinë dhe funksionimin e sajtit tuaj. {{a}}Mësoni më tepër rreth ç’përfshihet{{/a}}."],"We’re now collecting stats and securing your site. Welcome aboard.":["Tanimë grumbullojmë statistika dhe sigurojmë sajtin tuaj. Mirë se erdhët."],"{{a}}Skip, and explore features individually{{/a}}.":["{{a}}Anashkalojeni dhe eksplorojini veçoritë tek e tek{{/a}}."],"Jetpack Business Plan":["Plan Jetpack Biznesi"],"Jetpack Premium Plan":["Plan Jetpack Me Pagesë"],"Jetpack Personal Plan":["Plan Jetpack Personal"],"Get started with hassle-free design, stats, and performance tools.":["Fillojani me mjete të qëruara dizajni, statistikash dhe funksionimi."],"Welcome to Jetpack Free":["Mirë se vini te Jetpack-u Falas"],"Jetpack Free Plan":["Plan Jetpack Falas"],"Explore Jetpack plans":["Eksploroni plane Jetpack"],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":["Jini me mendje të qetë prej kopjeruajtjesh të automatizuara dhe asistencë me përparësi, mbërrini te një publik më i gjerë duke përdorur mjete SEO të përparuara, monetarizoni sajtin tuaj duke xhiruar reklama, dhe përshtateni sajtin tuaj me cilëndo prej 200+ temave tona me pagesë."],"Jetpack offers so much more":["Jetpack-u ofron shumë më tepër"],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":["Ju duhet ndihmë? Kërkoni te sajti ynë i asistencës që të mësoni mbi sajtin tuaj, llogarinë tuaj, dhe se si të përfitoni maksimumin nga WordPress-i."],"Support documentation":["Dokumentim asistence"],"Chat bubbles representing getting in touch with support":["Flluska fjalosjesh që ilustrojnë lidhjen me asistencën"],"Site Activity":["Veprimtari Sajti"],"Start publicizing now":["Filloni të publicizoni që tani"],"Reach a wider audience by automatically sharing your posts on social media.":["Mbërrini te më shumë publik, përmes ndarjes së vetvetishme me të tjerët të postimeve tuaja në media shoqërore."],"Increase traffic to your site":["Shtoni trafikun në sajtin tuaj"],"Explore free themes":["Eksploroni tema falas"],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":["Merrni hyrje të pakufizuar në qindra tema personale, dhe përshtateni sajtin tuaj saktësisht si e doni."],"A wide variety of themes and tools to customize a site":["Një larmi e madhe temash dhe mjetesh për përshtatjen e një sajti"],"Set up your site security":["Ujdisni sigurinë e sajtit tuaj"],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":["Parandaloni sulme për hyrje dhe merrni njoftime të menjëhershme, kur ka një problem me sajtin tuaj."],"Site stats showing an evolution in traffic and engagement":["Statistika sajti ku shfaqet ecuri trafiku dhe angazhimi"],"A hand holding a loupe":["Një dorë që mban një lupë"],"A chart showing an healthy increase in earnings":["Grafik që shfaq një shtim të shëndetshëm në fitime"],"Interface showing a chronological list of changes and updates in a site":["Ndërfaqe ku shfaqet një listë kronologjike ndryshimesh dhe përditësimesh në një sajt"],"A cloud with multiple types of content floating around it":["Një re me lloje të shumta lënde pezull përreth"],"A folder holding real comments":["Dosje që përmban komente të njëmendta"],"Make your site faster":["Bëjeni sajtin tuaj më të shpejtë"],"Load pages faster by serving your images from our global network of servers.":["Ngarkojini faqet më shpejt, duke i shërbyer figurat tuaja që prej shërbyesve të rrjetit tonë global."],"A fast and performant website":["Sajt i shpejtë dhe që punon"],"A secure site, locked and protected by Jetpack":["Sajt i siguruar, i kyçur dhe i mbrojtur nga Jetpack-u"],"These settings won't apply to related posts added using the block editor.":["Këto rregullime nuk do të kenë vend për postime të afërta të shtuara duke përdorur përpunuesin me blloqe."],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["Përsëdytni postime, faqe, Dëshmi dhe portofolë ekzistues. Do të kopjohet krejt lënda e tyre, përfshi tekst, figura të zgjedhura, rregullime ndarjeje me të tjerët, etj."],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":["Ky sajt s’mund të lidhet te WordPress.com, ngaqë cenon {{a}}Kushtet tona të Shërbimit{{/a}}."],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":["Lidheni sajtin tuaj te rrjete mediash shoqërore që përdorni dhe ndajeni lëndën tuaj me të tjerët në krejt llogaritë tuaja shoqërore me një klikim të vetëm. Kur botoni një postim, do të duket në krejt llogaritë tuaja të lidhura."],"Add Like buttons to your posts and pages":["Shtoni te postimet dhe faqet tuaja butona Pëlqimi"],"When visitors enjoy your content, let them show it with a Like.":["Kur vizitorëve u pëlqen lënda juaj, lërini ta shfaqin me një Pëlqim."],"Explore your Jetpack Professional plan!":["Eksploroni planin tuaj Jetpack Profesional!"],"Explore your Jetpack Premium plan!":["Eksploroni planin tuaj Jetpack Me Pagesë!"],"Explore your Jetpack Personal plan!":["Eksploroni planin tuaj Jetpack Personal!"],"Create account":["Krijo llogari"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["Jetpack-u po e fuqizon sajtin tuaj, por për të përdorur krejt veçoritë e tij, ju duhet të krijoni një llogari."],"Real-time, automated backups (unlimited storage)":["Kopjeruajtje të drejtpërdrejta, të automatizuara (depozitim i pakufizuar)"],"Compose content the way you want to and streamline your publishing experience.":["Hartoni lëndë sipas mënyrë që doni dhe thjeshtoni punën tuaj me botimet."],"Add a portfolio item":["Shtoni objekt portofoli"],"Add a testimonial":["Shtoni një përshtypje"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["Maksimizoni dukshmërinë e sajtit tuaj për motorët e kërkimeve dhe shihni aty për aty statistika trafiku."],"Create a Jetpack account to use this feature":["Që të përdorni këtë veçori, krijoni një llogari Jetpack"],"Share your content on social media and increase audience engagement.":["Ndajeni lëndën tuaj me të tjerët në media shoqërore dhe shtoni tërheqjen e publikut."],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["Jetpack-u do të mbikëqyrë vazhdimisht sajtin tuaj, dhe do t’ju njoftojë kur të pikasë mosfunksionim."],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["Kur hidhet në qarkullim një përditësim shtojce, praktika më e mirë është të përditësohet shtojca menjëherë. Zgjidhni cilat shtojca do të donit të vetëpërditësohen, që sajti juaj të mbetet i sigurt."],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["Mbajeni të parrezikuar sajtin tuaj me teknika sigurie të fjalës së fundit dhe merrni njoftime për probleme teknike."],"Error enabling Site accelerator. %(error)s":["Gabim gjatë aktivizimi të përshpejtuesit të Sajtit. %(error)s"],"Site accelerator is now speeding up your site!":["Përshpejtuesi i sajtit tani po e përshpejton sajtin tuaj!"],"Enabling Site accelerator…":["Po aktivizohet përshpejtues Sajti…"],"Error disabling site accelerator. %(error)s":["Gabim gjatë çaktivizimit të përshpejtuesit të sajtit. %(error)s"],"Site accelerator is no longer speeding up your site!":["Përshpejtuesi i sajtit s’e përshpejton më sajtin tuaj!"],"Disabling site accelerator…":["Po çaktivizohet përshpejtues sajti…"],"Load pages faster, optimize images, and speed up your visitors’ experience.":["Ngarkoni faqet më shpejt, optimizoni figurat, dhe përshpejtoni funksionimin për vizitorët tuaj."],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["Plotësojini statistika e WordPress.com-it me vështrimin e thelluar të Google-it mbi vizitorët tuaj dhe rregullsitë e trafikut."],"High-speed, high-definition video hosting with no third-party ads.":["Video HD, me shpejtësi transmetimi të lartë, pa reklama nga palë të treta."],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["Planifikoni që më parë botimin për një numër të pakufizuar postimesh në Twitter, Facebook apo shërbime të tjera."],"Marketing Automation":["Automatizim Marketingu"],"Activate Jetpack Search":["Aktivizoni Kërkimin Me Jetpack"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["Zëvendësoni mekanizmin parazgjedhje WordPress të kërkimeve me përfundime dhe filtrim më të mirë të bazuar në Elasticsearch."],"Start earning":["Filloni të fitoni"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["WordAds ju lë të fitoni para përmes shfaqjes së lëndës promocionale. Filloni të fitoni që sot."],"Spam is automatically blocked from your comments.":["Mesazhet e padëshiruar bllokohen automatikisht në komentet tuaja."],"Spam Filtering":["Filtrim Mesazhesh të Padëshiruar"],"Browse premium themes":["Shfletoni temat me pagesë"],"Access hundreds of beautifully designed premium themes at no extra cost.":["Përdorni, pa kosto shtesë, këdo nga qindra temat me pagesë të hartuara hijshëm."],"Try a premium theme":["Provoni një nga temat me pagesë"],"View settings":["Shihni rregullimet"],"Create a Jetpack account to view your email followers":["Që të shihni ndjekësit tuaj me email, krijoni një llogari Jetpack"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["Hapeni sajtin tuaj për komente dhe ftoni pajtimtarët të marrin njoftime rreth punimeve tuaja më të reja."],"Manage security settings":["Administroni rregullime sigurie"],"Built-in Performance":["Funksionim Organik"],"Jetpack is ready for the new WordPress editor":["Jetpack-u është gati për përpunuesin e ri në WordPress"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["Sot sjellim valën e parë të blloqeve të posaçëm për Jetpack-un, krijuar enkas për mënyrën e re të përpunimeve: butona Simple Payment, Form, Map, dhe Markdown."],"Build your Jetpack site with blocks":["Krijoni sajtin tuaj Jetpack përmes blloqesh"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["Përpunues i ri? Po! {{a}}Mësoni më tepër{{/a}}."],"The features you rely on, adapted for the new WordPress editor.":["Veçoritë që përdorni, përshtatur për përpunuesin e ri në WordPress."],"Take me to the new editor":["Shpjemë te përpunuesi i ri"],"Testing Jetpack Connection":["Po kontrollohet Lidhja me Jetpack-un"],"There was an error testing Jetpack. Error: %(error)s":["Pati një gabim gjatë testimit të jetpack-ut. Gabim: %(error)s"],"New in Jetpack!":["E re në Jetpack!"],"Speed up static file load times":["Përshpejtoni kohët e ngarkimit të kartelave statike"],"Speed up image load times":["Përshpejtoni kohët e ngarkimit të figurave"],"Enable site accelerator":["Aktivizoni përshpejtues sajti"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["Ngarkojini faqet më shpejtë, përmes lejimit të Jetpack-ut të optimizojë figurat tuaja dhe t’i shërbejë ato dhe kartelat statike (të tilla si ato CSS dhe JavaScript) nga rrjeti ynë global i shërbyesve."],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["Shtojini sajtit tuaj një shkallë sigurie ekstra duke aktivizuar hyrje dhe mirëfilltësim të sigurt që nga WordPress.com-i. Nëse keni sajte të shumtë me këtë mundësi të aktivizuar, do të jeni në gjendje të hyni në cilindo prej tyre me të njëjtat kredenciale."],"View your site activity":["Shihni veprimtari në sajtin tuaj"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["Shihni një listë kronologjike të krejt ndryshimeve dhe përditësimeve të sajtit tuaj, në një mënyrë të sistemuar dhe të kuptueshme."],"Manually Verify ":["Verifikojeni Dorazi "],"Verify with Google":["Verifikojeni me Google-in"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["Google-i do t’ju dërgojë email lidhur me disa akte që ndodhin në sajtin tuaj, përfshi tregues se sajti juaj është {{a1}}hack-uar{{/a1}}, ose probleme me {{a2}}kapjen ose indeksimin{{/a2}} e sajtit tuaj."],"or":["ose"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["Vëzhgoni trafikun dhe funksionimin e sajtit tuaj që nga {{a}}Konsol Kërkimesh Google{{/a}}."],"Your site is verified with Google":["Sajti juaj është verifikuar me Google"],"Site failed to verify: %(error)s":["Dështoi verifikimi i sajtit: %(error)s"],"Verifying...":["Po verifikohet…"],"Add faster, more advanced searching to your site with Jetpack Professional.":["Shtoni te sajti juaj kërkim më të shpejtë, më të thelluar, përmes paketës Jetpack Professional."],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["Zëvendësoni mekanizmin e brendshëm WordPress të kërkimeve me Kërkim Me Jetpack, një mekanizëm i thelluar kërkimesh"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["Jetpack Search zëvendëson kërkimin e brendshëm me një kërkim të shpejtë, të përshkallëzueshëm, të personalizueshëm dhe me përfundime me kuptim, të strehuar në renë WordPress.com. Përfundimi: Përdoruesit tuaj gjejnë lëndën që duan, më shpejt."],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["Mekanizmi i i brendshëm i WordPress-it për kërkime është i dobishëm për sajte pa shumë lëndë. Por dora-dorës që sajti juaj zmadhohet, kërkimet ngadalësohen dhe japin përfundime më pak të sakta."],"Jetpack Search supports many customizations.":["Jetpack Search mbulon mjaft personalizime."],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["Zëvendësojeni kërkimin e brendshëm me një kërkim të shpejtë, të përshkallëzueshëm, të personalizueshëm, që sjell përfundime më të sakta, {{a}}të strehuar në renë WordPress.com{{/a}}."],"Site is verified":["Sajti është verifikuar"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}Që të krijoni një sajt të hijshëm, që duket dhe funksionon pikërisht si e doni, Jetpack Professional ju lejon përdorimin e më shumë se 200 temash WordPress me pagesë.{{/p}}{{p}}Jetpack Professional është më tepër se sa gjetja e skemës grafike të përsosur. Është mendja tërësisht e fjetur, se e dini që do të keni asistencë me përparësi nga ekipi ynë mbarëbotëror i ekspertëve, në e dashtë puna.{{/p}}"],"Spam filtering and priority support.":["Filtrim mesazhesh të padëshiruar dhe asistencë me përparësi."],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["Kur reklamat janë të aktivizuara, Jetpack-u prodhon vetvetiu një ads.txt të përshtatur enkas për sajtin tuaj."],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["Jetpack-u prodhon vetvetiu një {{link}}ads.txt{{/link}} të përshtatur enkas për sajtin tuaj. Nëse keni nevojë të shtoni zëra të tjerë për rrjete të tjerë, ju lutemi, vendosini ata në hapësirën më poshtë, një për rresht."],"Custom ads.txt entries":["Zëra vetjakë ads.txt"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}Që të krijoni një sajt të hijshëm që duket dhe funksionon pikërisht ashtu si e doni, Jetpack Professional ju jep mundësinë e përdorimit të pakufizuar të mbi 200 temash grafike WordPress me pagesë.{{/p}}{{p}}Jetpack Professional është diçka më tepër se thjesht gjetja e skemës së përsosur grafike. Është edhe për ta pasur mendjen plotësisht të fjetur: kopjeruajtjet e atypëratyshme, kontrollet automatike ndaj malware-it, dhe asistenca me përparësi nga ekipi ynë global garantojnë që sajti juaj do të jetë gjithmonë i parrezikuar dhe i siguruar.{{/p}}"],"Introducing Premium Themes":["Ju paraqesim Tema me Pagesë"]," Premium Themes":[" Tema Me Pagesë"],"Privacy information":["Informacion Privatësie"],"Enable Lazy Loading for images":["Aktivizo \"Lazy-load\" për figurat"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["Funksioni <em>lazy-loading</em> për figurat do të përmirësojë shpejtësinë e sajtit tuaj dhe krijojë për përdoruesin pamje të rrjedhshme. Figurat do të ngarkohen dora-dorës që vizitorët rrëshqasin poshtë nëpër ekran, në vend se të tëra njëherësh."],"Performance & speed":["Performancë & shpejtësi"],"Enable high-speed, ad-free video player":["Aktivizo lojtës videosh të shpejtë, pa reklama"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["Bëjeni më tërheqëse lëndën që botoni, përmes videosh <em>high-resolution</em>. Me Jetpack Video mund të përshtatni lojtësin tuaj të mediave dhe t’u jepni vizitorëve tuaj video të shpejta, pa reklama dhe pa marka. Videot depozitohen te shërbyesit tanë WordPress.com dhe nuk zënë vend te plani juaj i strehimit në shërbyes!"],"Video":["Video"],"Carousel color scheme":["Skemë ngjyrash Rrotullameje"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Të dhënat Exif u shfaqin parësve hollësi teknike shtesë të një fotoje, të tilla si rrezja vatrore, hapja e diafragmës, dhe ISO."],"Show photo Exif metadata in carousel (when available)":["Shfaq te rrotullamja tejtëdhëna fotosh Exif (në pastë)"],"Display images in a full-screen carousel gallery":["Te galeria rrotullame figurat shfaqi në madhësi të plotë"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["Krijoni rrotullame diapozitivash sa krejt ekrani për figurat në postime dhe faqe tuajat. Galeritë rrotullame janë të përshtatshme për celularin dhe i nxitin vizitorët e sajtit të ndërveprojnë me fotot tuaja."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["Paneli WordPress.com zëvendëson panelin parazgjedhje WordPress të përgjegjësi dhe e bën më të rrjedhshme punën tuaj me WordPress-in. Ofron hyrje me një klikim për administrim të krejt sajteve tuaj, përditësim të profilit tuaj WordPress.com, parje njoftimesh, dhe ndjekje të sajteve që ndiqni në Reader."],"Portfolios shortcode: [portfolio]":["Kod i shkurtër për portofola: [portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["Përdorni në sajtin tuaj {{portfolioLink}}portofole{{/portfolioLink}}, për të nxjerrë në pah ajkën e punës tuaj. Nëse tema juaj grafike nuk mbulon Jetpack Portfolios, për shfaqjen e tyre në sajtin tuaj mundeni prapëseprapë të përdorni një kod të shkurtër."],"Testimonials shortcode: [testimonials]":["Kod i shkurtër për përshtypje: [testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["Shtoni te sajti juaj {{testimonialLink}}përshtypje{{/testimonialLink}} që të tërhiqni klientë të rinj. Nëse tema juaj grafike nuk mbulon Jetpack Testimonials, për shfaqjen e tyre në sajtin tuaj mundeni prapëseprapë të përdorni një kod të shkurtër."],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["Motorët e kërkimit s’mund të përdorin sajtin tuaj këtë çast. Nëse doni ta bëni sajtin tuaj të përdorshëm prej tyre, shihni {{a}}rregullimet tuaja për Lexim{{/a}} dhe kalojeni \"Dukshmëri Për Motorë Kërkimesh\" në vlerën <em>on</em>."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["Lajme të mira: Jetpack-u po e dërgon hartën e sajtit tuaj vetvetiu te krejt motorët kryesorë të kërkimeve, për indeksim."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["Hartat e sajteve janë kartela që motorë kërkimi, të tillë si Google ose Bing i përdorin për të indeksuar sajtin tuaj. Ato mund të ndihmojnë të përmirësohet vendi juaj në renditje përfundimesh kërkimesh. Kur e aktivizoni këtë veçori, Jetpack-u do të krijojë për ju harta sajti dhe do t’i përditësojë ato vetvetiu kur lënda në sajt ndryshon."],"Configure related posts in the Customizer":["Formësoni postime të afërta te Përshtatësi"],"Highlight related content with a heading":["Nxirre në pah lëndën e përafërt përmes një stili kryesh"],"View security scan details":["Shihni hollësi kontrolli sigurie"],"View backup history":["Shihni historik kopjeruajtjesh"],"Show a thumbnail image where available":["Shfaq një figurë miniaturë kur të ketë"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["Për më tepër të dhëna se si veçori të caktuara të Jetpack-ut përdorin të dhëna dhe gjurmojnë veprimtari, ju lutemi, shihni te {{privacyCenterLink}}Qendra jonë e Privatësisë{{/privacyCenterLink}}."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["Përdorim mjete të tjera gjurmimi, përfshi disa të tillë nga palë të treta. {{cookiePolicyLink}}Lexoni rreth tyre{{/cookiePolicyLink}} dhe se si t’i mbani nën kontroll."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["Këto të dhëna na ndihmojnë të përmirësojmë produktet tona, ta bëjmë marketingun më specifik për ju, më personal punimin tuaj në WordPress.com, etj, siç përshkruhet hollësisht te {{pp}}rregullat tona mbi privatësinë{{/p}}."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["Ndani me mjetin tonë të analizave të Dhëna rreth përdorimit tuaj të shërbimeve, teksa jeni i futur në llogarinë tuaj WordPress.com. {{cookiePolicyLink}}Mësoni më tepër{{/cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["Kjo veçori administrohet nga një përgjegjës sajti. {{link}}Mësoni më tepër{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["Kjo veçori është çaktivizuar nga një përgjegjës sajti. {{link}}Mësoni më tepër{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["Kjo veçori është aktivizuar nga një përgjegjës sajti. {{link}}Mësoni më tepër{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["%(moduleName)s është çaktivizuar nga një përgjegjës sajti. {{link}}Mësoni më tepër{{/link}}."],"This feature has been disabled by a site administrator.":["Kjo veçori është çaktivizuar nga një përgjegjës sajti."],"%(moduleName)s has been disabled by a site administrator.":["%(moduleName)s është çaktivizuar nga një përgjegjës sajti."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["Reklama shtesë mund të vendosni duke përdorur widget-in Shtoni. {{link}}Provojeni!{{/link}}"],"Configure your notification settings":["Formësoni rregullimet për njoftime"],"Monitor your site's downtime":["Mbikëqyrje ndalesash punimi"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["Moduli Jetpack për Kërkime është një zëvendësim i fuqishëm i mekanizmit të brendshëm për kërkime të vetë WordPress-it."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["Kartelat e sajtit tuaj kontrollohen rregullisht për modifikime të paautorizuara ose të dyshimta që mund të cenojnë sigurinë dhe të dhënat tuaja."],"Plugin needs updating.":["Shtojca lyp përditësim.","Shtojcat lypin përditësim."],"%(number)s":["%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Përditësimi i Shtojcave nga Jetpack-u ju lejon të zgjidhni cilat shtojca përditësohen vetvetiu."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack-u do t’i optimizojë figurat tuaja dhe shërbejë ato nga vendndodhje shërbyesi më afër vizitorëve tuaj. Përdorimi i rrjetit tonë global të shpërndarjes së lëndës do të fuqizojë shpejtësinë e ngarkimit të sajtit tuaj."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":["Mbikëqyrësi Jetpack i mosfunksionimit do të vëzhgojë sajtin tuaj dhe do t’ju njoftojë në çastin kur të pikaset një i tillë."],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Kopjeruajtjet Jetpack ju lejojnë të riktheni apo shkarkoni lehtësisht një kopjeruajtje të bërë në një kohë të caktuar."],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet-i i kontrollon komentet dhe parashtrimet te formularët e kontaktit kundrejt bazës sonë globale të të dhënave për mesazhe të padëshiruar."],"Privacy Information":["Informacion Privatësie"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["VideoPress-i ju lejon të ngarkoni video prej kompjuterit tuaj për t’i strehuar te WordPress.com, në vend se te shërbyesit e strehës tuaj. Mandej mund t’i futni këto te sajti juaj i vetëstrehuar Jetpack. "],"Add the Search (Jetpack) widget to your sidebar":["Shtoni widget-in Search (Jetpack) te anështylla juaj"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["Jepuni vizitorëve tuaj një mekanizëm të shkëlqyer kërkimesh, duke u lejuar të filtrojnë dhe renditin shpejt përfundime kërkimi që kanë kuptim."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["Aktivizon një temë të peshës së lehtë, të përshtatshme për celular, që do t’u shfaqet vizitorëve në pajisje celulare."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["Ngarkon vetvetiu postimet pasuese, kur lexuesi i afrohet fundit të faqes."],"Allows you to publish new posts by sending an email to a special address.":["Ju lejon të botoni postime të reja duke i dërguar si email te një adresë speciale."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["Ju lejon të hartoni lëndë me lidhje, lista dhe stile të tjerë, duke përdorur sintaksën Markdown."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["E kontrollon lëndën tuaj për gramatikë dhe drejtshkrim të saktë, fjalë të keqpërdorura, dhe stil, teksa shkruani."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["Furnizon etiketat e nevojshme të fshehura që duhen për të verifikuar sajtin tuaj WordPress me shërbime të ndryshme."],"Displays information on your site activity, including visitors and popular posts or pages.":["Shfaq të dhëna mbi veprimtarinë në sajtin tuaj, përfshi vizitorë dhe postime ose faqe popullore."],"Allows you to optimize your site and its content for better results in search engines.":["Ju lejon të optimizoni sajtin tuaj dhe lëndën e tij për përfundime më të mira kërkimi në motorë kërkimesh."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["Integron sajtin tuaj WordPress me Google Analytics, një platformë që ofron ndjekje të prirjeve të trafikut tuaj, vizitorëve dhe shndërrimeve të vizitave."],"Displays high-quality ads on your site that allow you to earn income.":["Shfaq në sajtin tuaj reklama cilësore, që ju lejojnë të fitoni të ardhura."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["Shton te lënda juaj butona ndarjesh me të tjerët, që kështu vizitorët të mund ta ndajnë me të tjerët në sajte mediash shoqërore."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["Ju lejon të ndani vetvetiu me të tjerët në sajte mediash shoqërore lëndë tuajën të re, përfshi Facebook dhe Twitter."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["Shton te lënda juaj butona pëlqimi, që kështu vizitorët të mund të shpalosin vlerësimin apo ngazëllimin e tyre."],"Allows registered users to log in to your site with their WordPress.com accounts.":["U lejon përdoruesve të regjistruar të bëjnë hyrjen në sajtin tuaj përmes llogarive të tyre WordPress.com."],"Protects your site from traditional and distributed brute force login attacks.":["E mbron sajtin tuaj nga sulme tradicionale, dhe nga ata <em>brute force</em> me shpërndarje, ndaj hyrjes."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["E kopjeruan sajtin tuaj te shërbyesit globalë WordPress.com, duke ju lejuar të riktheni lëndën tuaj, në rast urgjence apo gabimi."],"Removes spam from comments and contact forms.":["Heq mesazhe të padëshiruar nga formularë komentesh dhe kontakti."],"We are committed to your privacy and security. ":["Jemi të përkushtuar për privatësinë dhe sigurinë tuaj. "],"View all Jetpack plans":["Shihni krejt planet Jetpack"],"Manage your plan":["Administroni planin tuaj"],"Your Plan":["Plani Juaj"],"You’re currently on Jetpack %(plan)s.":["Gjendeni nën Jetpack %(plan)s."],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["U lejon lexuesve të pajtohen te postimet apo komentet tuaja, dhe të marrin njoftime email mbi lëndë të re."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["Zëvendëson formularin standard WordPress të komenteve me një sistem të ri komentesh që përfshin mundësi hyrjeje që nga media shoqërore."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}Aktivizojeni{{/a}} që mekanizmi i brendshëm WordPress i kërkimeve të zëvendësohet me Jetpack Search, një funksion i thelluar kërkimesh."],"Add Search (Jetpack) Widget":["Shtoni Widget-in (Jetpack) Search"],"Jetpack Search is powering search on your site.":["Kërkimi në sajtin tuaj ngrihet mbi Jetpack Search."],"Manage your plugins":["Administroni shtojcat tuaja"],"Moderate comments":["Moderoni komentet"],"Error updating privacy settings. %(error)s":["Gabim në përditësim rregullimesh privatësie. (%(error)s)"],"Updated privacy settings.":["Rregullimet e privatësisë u përditësuan."],"Updating privacy settings…":["Po përditësohen rregullime privatësie…"],"Add Jetpack Search Widget":["Shtoni Widget-in Jetpack Search"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["Që të formësoni renditje dhe filtrim, shtoni widget-in Jetpack Search te anështylla juaj."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["Suitë e plotë sigurie, mjete automatizimi marketingu dhe të ardhurash, strehim videosh i pakufizuar, tema grafike të panumërta, kërkim i thelluar, dhe asistencë me përparësi."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["Suitë e plotë sigurie, mjete automatizimi marketingu dhe të ardhurash, strehim videosh i pakufizuar, dhe asistencë me përparësi."],"Daily backups, spam filtering, and priority support.":["Kopjeruajtje të përditshme, filtrim mesazhesh të padëshiruar, dhe asistencë me përparësi."],"Always-on Security":["Siguri Përherë Zgjuar"],"Activate video hosting":["Aktivizoni strehim videosh"],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Kopjeruajtje e atypëratyshme e krejt të dhënave të sajtit tuaj, pa kufizim hapësire, rikthime me një klikim, kontrolle të automatizuar sigurie, dhe asistencë me përparësi"],"Design the perfect website":["Skiconi sajtin e përsosur"],"Set up Jetpack":["Rregulloni Jetpack-un"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["Kopjeruajtje e atypëratyshme, pa kufizim hapësire, e krejt të dhënave të sajtit tuaj, rikthime me një klikim, dhe kontrolle të automatizuar sigurie."],"Jetpack Search":["Kërkim Jetpack"],"Jetpack version %(version)s":["Version Jetpack-u %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["Për sajtin tuaj tani krijohen kopjeruajtje të atypëratyshme dhe kontrollohet për kërcënime të sigurisë."],"Daily backup of all your site data with unlimited space and one-click restores":["Kopjeruajtje të përditshme e krejt të dhënave të sajtit tuaj, pa kufizime hapësire për to dhe rikthime me një klikim"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Kopjeruajtje të përditshme e krejt të dhënave të sajtit tuaj, pa kufizim hapësire, rikthime me një klikim, kontrolle të automatizuar sigurie, dhe asistencë me përparësi"],"View your security activity":["Shihni veprimtarinë tuaj të sigurisë"]," (powered by VaultPress).":[" (bazuar në VaultPress)."],"Customize Search Widget":["Përshtateni Widget-in e Kërkimeve"],"Please correct the issue below and try again.":["Ju lutemi, ndreqni problemin e mëposhtëm dhe riprovoni.","Ju lutemi, ndreqni problemet e mëposhtëm dhe riprovoni."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["Po bëjmë të mundur që sajti juaj të jetë i lirë nga kërcënime sigurie. Nëse gjejmë ndonjë, do t’ju njoftojmë."],"Your site is being backed up in real-time.":["Për sajtin tuaj bëhen kopjeruajtje të atypëratyshme."],"Jetpack version":["Version Jetpack-u"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}Shihni veprimtari në sajtin tuaj{{/a}} që nga një prurje e vetme."],"Activity":["Veprimtari"],"Confirm each new phrase you add by pressing enter.":["Ripohoni duke shtypur Enter çdo togfjalësh të ri që shtoni."],"{{a}}View details{{/a}}":["{{a}}Shihni hollësitë{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["Faleminderit që zgjodhët një plan Jetpack Professional. Jetpack-u tani po bën kopjeruajtjen e lëndës tuaj aty për aty, po indekson për kërkime lëndën tua, po kontrollon për kërcënime sigurie, dhe po akordon hyrje te temat me pagesë."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["Me Jetpack-un Professional, mund të krijoni sajtin e përsosur me një nga mbi 300 tema WordPress-i të hartuara profesionalisht, përfshi më tepër se 200 tema me pagesë. Bëjeni lëndën tuaj si e doni, përmes një larmie widget-esh, ose shtoni te postimet dhe faqet tuaja një numër të pakufizuar videosh -- që shfaqen pa reklama apo shenja origjine."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["Shtimi i pasuesve tuaj është i lehtë me planin Profesional, falë ndarjesh së lëndës me të tjerët dhe planifikimesh botimi, mjetesh SEO, dhe mundësi të brendshme pajtimi. Me një buton Simple Payments dhe reklama të brendshme, mund të përfitoni para nga sajti juaj, dhe të mbikëqyrni suksesin e përpjekjeve tuaja duke e integruar me Google Analytics."],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Plani juaj Jetpack ju jep gjithçka që ju duhet për ta ruajtur të parrezikuar punën tuaj të zorshme, përfshi kopjeruajtje sipas kërkesash dhe kontrolle malware-i, rikthime sajti me një klikim dhe zgjidhje problemesh. Sajti juaj do të jetë tërësisht i mbrojtur nga mesazhe të padëshiruar, kodi keqdashës, dhe përpjekjesh për hyrje <em>brute force</em>."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Filloni të eksploroni Jetpack-un Profesional që tani, që të shihni krejt përfitimet e planit tuaj të ri."],"Install premium themes":["Instaloni tema me pagesë"],"Review SEO features":["Shqyrtoni veçori SEO"],"Welcome Professional":["Mirë se vini te Jetpack-u Profesional"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["Faleminderit që zgjodhët një plan Jetpack Me Pagesë. Jetpack-u tani po bën një kopjeruajtje të sajtit tuaj, po kontrollon për kërcënime sigurie, dhe po aktivizon mekanizma monetarizimi."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["Me Jetpack-un Me Pagesë, mund të krijoni sajtin e përsosur, pavarësisht fushës së tij. Përshtateni pamjen e sajtit tuaj përmes njërës nga më shumë se 100 tema falas, ose përmirësojeni lëndën tuaj me video të pakufizuara, në cilësi HD -- krejt strehuar pa reklama dhe shenja origjine."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Duke përdorur mjetet e fuqishme Jetpack për ndarje me të tjerët, mund të ndani vetvetiu me të tjerët në media shoqërore postimet tuaja më të reja, ose të planifikoni lëndë tuajën për rindarje në çfarëdo date ose kohe që vendosni. Dhe duke shtuar pasuesit tuaj, mund të shtoni biznesin tuaj, me mjete të tilla si butona pagesash dhe reklama."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Filloni të eksploroni Jetpack-un Me Pagesë që tani, që të shihni krejt përfitimet e planit tuaj të ri."],"Monetize your site with ads":["Monetarizoni sajtin tuaj me reklama"],"Welcome Premium":["Mirë se vini te Jetpack-u Me Pagesë"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["Faleminderit për zgjedhjen e një plani Jetpack Personal. Jetpack-u tani po bën një kopjeruajtje të sajtit tuaj dhe po kontrollon për kërcënime ndaj sigurisë."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["Me Jetpack-un Personal, keni aftësinë të përdorni më shumë se 100 tema WordPress falas, me cilësi profesionale. Zgjidhni temën që i përshtatet më mirë sajtit tuaj dhe përshtatni ngjyrat, figurat, ose shtoni një larmi widget-esh të rinj."],"Got it":["E mora vesh"],"Welcome personal":[""],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["Duke klikuar mbi butonin më poshtë, pajtoheni me {{tosLink}}Kushtet tona të Shërbimit{{/tosLink}} dhe me {{shareDetailsLink}}dhënie hollësish{{/shareDetailsLink}} te WordPress.com-i."],"Jetpack Stats People":[""],"Hello there! Your stats have been activated.":["Tungjatjeta juaj! Statistikat për ju janë aktivizuar."],"Just give us a little time to collect data so we can display it for you here.":["Thjesht na jepni pak kohë të mbledhim të dhëna që kështu të mund t’i shfaqim për ju."],"Okay, got it!":["OK, e mora vesh!"],"Display ads below posts on":["Shfaq reklama nën postime te"],"Additional ad placements":["Vendosje reklamash shtesë"],"Top of each page":["Në krye të çdo faqeje"],"Second ad below post":["Reklama e dytë nën postim"],"Archives":["Arkiva"],"Explore Professional":["Eksploroni Jetpack-un Profesional"],"Compare All Plans":["Krahasoni Krejt Planet"],"Person with laptop":["Person me laptop"],"Your Jetpack site is ready to go!":["Sajti juaj me Jetpack-u juaj është gati për punë!"],"Stars":["Yje"],"Jupiter":["Jupiter"],"Welcome to Jetpack Personal":["Mirë se vini te Jetpack-u Personal"],"Welcome to Jetpack Premium":["Mirë se vini te Jetpack-u Me Pagesë"],"Welcome to Jetpack Professional":["Mirë se vini te Jetpack-u Profesional"],"Schedule posts":["Vini postime në plan"],"Activate Publicize":["Aktivizoni Publicizimet"],"Your site is backed up.":["Sajti juaj është i kopjeruajtur."],"Image Performance":["Performancë Figurash"],"Get WordPress Apps for every device":["Merrni Aplikacione WordPress për çdo pajisje"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Administroni krejt sajtet tuaj nga një pult i vetëm: botoni lëndë, ndiqni statistika, moderoni komente, dhe kaq shumë gjëra, prej ngado në botë."],"I already use this app.":["E përdor tashmë këtë aplikacion."],"Create address":["Krijoje adresën"],"Priority support":["Asistencës me përparësi"],"Add sharing buttons to your posts":["Shtoni te postimet tuaja butona për ndarjen e tyre me të tjerë"],"Automatically share your posts to social networks":["Ndajini postimet tuaja automatikisht me të tjerët në rrjete shoqërore"],"Updating settings…":["Po përditësohen rregullimet…"],"Updating Post by Email address…":["Përditësim Postimi sipas adrese Email…"],"Your paid plan gives you access to prioritized Jetpack support.":["Plani që keni paguar ju lejon për Jetpack-un asistencë me përparësi."],"You have paid for backups but they're not yet active.":["Keni paguar për kopjeruajtje, por ato s’janë ende aktive."],"You have paid for backups and security scanning but they’re not yet active.":["Keni paguar për kopjeruajtje dhe kontrolle sigurie, por ato s’janë ende aktive."],"Click \"Set Up\" to finish installation.":["Klikoni mbi \"Rregulloje\" që të përfundohet instalimi."],"Checking site status…":["Po kontrollohet gjendje sajti…"],"Pages":["Faqe"],"We're here to help":["Për ndihmë, na keni këtu"],"Jetpack comes with free, basic support for all users.":["Jetpack-u vjen me asistencë bazë falas, për krejt përdoruesit."],"Ask a question":["Bëni një pyetje"],"Search our support site":["Kërkoni te sajti ynë i asistencës"],"Get a faster resolution to your support questions.":["Merrni një zgjidhje më të shpejtë për pyetjet tuaja ndaj asistencës."],"Host fast, high-quality, ad-free video.":["Strehoni video me cilësi të lartë, pa reklama, dhe të shpejta."],"Generate income with high-quality ads.":["Prodhoni të ardhura, me reklama të cilësisë së lartë."],"Real-time site backups and automatic threat resolution.":["Kopjeruajtje sajti të atypëratyshme dhe shmangie e vetvetishme kërcënimesh."],"Protect against data loss, malware, and malicious attacks.":["Mbrohuni nga humbje të dhënash, malware, dhe sulme dashakeqe."],"Integrate easily with Google Analytics.":["Integrojeni lehtësisht me Google Analytics."],"Help your content get found and shared with SEO tools.":["Ndihmoni, përmes mjeteve SEO, që lëndë juaj të gjendet dhe të ndahet me të tjerët."],"Protect your site from spam.":["Mbrojeni sajtin tuaj nga mesazhet e padëshiruar."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["Ky sajt s’është lidhur me WordPress.com-in. Ju lutemi, kërkojini përgjegjësi të sajtit që ta lidhë."],"Spam filtering":["Filtrim mesazhesh të padëshiruar"],"Daily, automated malware scanning":["Kontrolle të përditshme, të automatizuara, kundër malware-i"],"Daily, automated backups (unlimited storage)":["Kopjeruajtje të përditshme, të automatizuara (depozitim i pakufizuar)"],"Daily, automated malware scanning with automated resolution":["Kontrolle të përditshme, të automatizuara, kundër malware-i, me zgjidhje të automatizuar"],"Unlimited, high-speed video hosting":["Strehim i pakufizuar videosh të shpejta"],"SEO preview tools":["Mjete paraparje SEO"],"Site stats, related content, and sharing tools":["Statistika sajti, lëndë e afërt, dhe mjete ndarjesh me të tjerët"],"Brute force attack protection and downtime monitoring":["Mbrojtje nga sulme <em>brute force</em> dhe mbikëqyrje për ndalesa funksionimi"],"Unlimited, high-speed image hosting":["Strehim i pakufizuar figurash të shpejta"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["Duke e shkëputur %(siteName)s nga WordPress.com nuk do të mund të përdorni më sa vijon:"],"Read more about Jetpack benefits":["Lexoni më tepër mbi përfitimet nga Jetpack-u"],"An Automattic Airline":["Linjë Ajrore nga <span>Automattic</span>"],"Manage site connection":["Administroni lidhje sajti"],"Connect your account to WordPress.com to view more stats":["Që të shihni më tepër statistika, lidheni llogarinë tuaj me WordPress.com-in"],"Theme enhancements":["Thellime teme grafike"],"Load more posts using the default theme behavior":["Ngarko më tepër postime duke përdorur sjelljen parazgjedhje të temës"],"Load more posts in page with a button":["Ngarko më tepër postime në një faqe me një buton"],"Load more posts as the reader scrolls down":["Ngarko më tepër postime teksa lexuesi zbret më poshtë në faqe"],"Theme support required.":["Lypset mbulim teme."],"Learn more about adding support for Infinite Scroll to your theme.":["Mësoni më tepër mbi shtimin te tema juaj të mbulimit për Rrëshqitje Pa Fund."],"Use excerpts instead of full posts on front page and archive pages":["Në vend se postime të plota, te faqja ballore dhe te faqe arkivash përdorni copëza"],"Show featured images":["Shfaq figura të zgjedhura"],"Enable the WordPress.com toolbar":["Aktivizoni panelin WordPress.com"],"Writing tools available to you will be shown here when an administrator enables them.":["Këtu do të shfaqen mjetet e shkrimit që mund të përdorni, kur t’i aktivizojë një përgjegjës."],"Portfolios":["Portofole"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Kini parasysh se, që sajti juaj të indeksohet nga motorë kërkimesh, {{b}}verifikimi i tij me këto shërbime s’është i nevojshëm{{/b}}. Që të përdorni këto mjete të përparuara motorësh kërkimi dhe që të verifikoni sajtin tuaj me një shërbim, ngjitni më poshtë kodin HTML Tag. Nëse keni probleme, lexoni {{support}}udhëzimet e plota{{/support}}. Shërbime verifikimi të mbuluara: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["Prodhoni harta XMl sajtesh"],"Collecting valuable traffic stats and insights":["Grumbullim statistikash dhe tendenca trafiku"],"The image helps collect stats, but should work when hidden.":["Figura ndihmon të grumbullohen statistika, por duhet të punojë kur është e fshehur."],"Count logged in page views from":["Numëroni parje faqesh nga përdorues të futur"],"Allow stats reports to be viewed by":["Lejoni parje raporte statistikash nga"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["Nëse dëshironi kontroll më të thelluar, këto rregullime mund t’i përimtoni. Lexoni më tepër se ç’mund të bëni që të {{a}}optimizoni SEO-n për sajtin tuaj{{/a}}."],"Configure your SEO settings":["Formësoni rregullimet tuaja SEO"],"In \"Upgrade\"":["Te \"Përmirësojeni\""],"Configure your Google Analytics settings":["Formësoni rregullimet për Google Analytics"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Shfaqni reklama në artikullin e parë te faqja juaj hyrëse ose në fund të çdo faqeje dhe postimi. Vendosni reklama shtesë në krye të sajtit tuaj dhe te çdo fushë widget-esh, që të shtoni të ardhurat."],"Enable ads and display an ad below each post":["Aktivizo reklamat dhe shfaq një reklamë nën çdo postim"],"Configure your sharing buttons":["Formësoni butonat tuaj për ndarje me të tjerët"],"Connect your social media accounts":["Lidhni llogaritë tuaja prej mediash shoqërore"],"Match accounts using email addresses":["Përputhjet për llogari kërkoji sipas adresash email-i"],"Require accounts to use WordPress.com Two-Step Authentication":["Pyet për llogari përdorimi të Mirëfilltësimit Dyhapësh të WordPress.com-it"],"Add to whitelist":["Shtoje në listë lejimesh"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["Për të penguar përgjithmonë bllokimin e tyre nga Jetpack-u, një adresë ose seri adresash IP mund t’i vendosni në një listë lejimesh. Janë të pranueshme adresa të llojit IPv4 dhe IPv6. Që të jepni një interval vlerash, jepni vlerën e ulët dhe të lartë, ndarë nga një vijë. Për shembull: 12.12.12.1–12.12.12.100"],"Your site is backed up and threat-free.":["Sajti juaj është i kopjeruajtur dhe i pakërcënuar."],"Checking your spam protection…":["Po kontrollohet mbrojtja juaj kundër mesazhesh të padëshiruar…"],"Fetching key…":["Po sillen kyçi…"],"Your site needs an Antispam key.":["Sajti juaj lyp një kyç Antispam."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["Ka një problem me kyçin tuaj për API-n Antispam. {{a}}Mësoni më tepër{{/a}}."],"Your site is not protected from spam.":["Sajti juaj nuk mbrohet nga mesazhet e padëshiruar."],"Your Antispam key is valid.":["Kyçi juaj Antispam është i vlefshëm."],"Your site is protected from spam.":["Sajti juaj mbrohet nga mesazhet e padëshiruar."],"Checking key…":["Po kontrollohet kyçi…"],"Your API key":["Kyçi juaj API"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["Nëse s’keni ende një kyç API, atëherë {{a}}merreni kyçin tuaj API këtu{{/a}}, dhe do të udhëhiqeni përmes procesit të marrjes së një të tilli."],"No search results found for %(term)s":["S’u gjetën përfundime kërkimi për %(term)s"],"Enter a search term to find settings or close search.":["Jepni një term kërkimi që të gjenden rregullime ose mbylleni kërkimin."],"Connections":["Lidhje"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Sajti juaj gjendet nën Mënyrën Zhvillim, ndaj s’mund të lidhet te WordPress.com-i."],"Your site is connected to WordPress.com.":["Sajti juaj është i lidhur me WordPress.com-in."],"You are the Jetpack owner.":["Jeni i zoti i Jetpack-ut."],"Connected as {{span}}%(username)s{{/span}}":["I lidhur si {{span}}%(username)s{{/span}}"],"View your Email Followers":["Shihni Ndjekësit tuaj Me Email"],"Color scheme":["Skemë ngjyrash"],"Enable Markdown use for comments.":["Aktivizoni Markdown për komente."],"Updated settings.":["U përditësuan rregullimet."],"Error updating settings. %(error)s":["Gabim në përditësim rregullimesh. %(error)s"],"Regenerated Post by Email address.":["U riprodhua Postimi sipas adresës Email."],"Error regenerating Post by Email address. %(error)s":["Gabim në riprodhimin e Postimit sipas adresës Email. %(error)s"],"Updated settings. Refreshing page…":["Rregullimet u përditësuan. Po rifreskohet faqja…"],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["Hëpërhë nën {{a}}Mënyrën Zhvillim{{/a}} (disa veçori janë të çaktivizuara) ngaqë: {{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}Filtri jetpack_development_mode është aktiv{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}Konstantja JETPACK_DEV_DEBUG është e përkufizuar{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}URL-së së sajtit tuaj i mungon (p.sh. http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics është një shërbim falas që plotëson {{a}}mekanizmin tonë të brendshëm të statistikave{{/a}} me tendenca të ndryshme në trafikun tuaj. Statistikat WordPress.com dhe Google Analytics përdorin metoda të ndryshme për të identifikuar dhe ndjekur veprimtarinë në sajtin tuaj, ndaj ato normalisht do të japin vlera paksa të ndryshme për vizitat, parjet, etj."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Formësoni Google Analytics"],"Activate Google Analytics":["Aktivizoni Google Analytics"],"Download the free apps":["Shkarkoni aplikacionet falas"],"Upgrade Focus: VideoPress For Weddings":["Përmirësoni Focus-in: VideoPress Për Dasma"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}Postime të afërta mund të formësoni gjithashtu edhe te Përshtatësi. {{ExternalLink}}Provojeni!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["Si parazgjedhje, reklamat shfaqen në fund të çdo faqeje, postimi, ose të artikullit të parë në faqen tuaj hyrëse. Mund t’i vendosni edhe në krye të sajtit tuaj dhe te cilado zonë widget-esh, që të shtoni të ardhurat tuaja!"],"Display an ad unit at the top of your site.":["Shfaqni një njësi reklamash në krye të sajtit tuaj."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["Duke pranuar reklama, pajtoheni me {{link}}Kushtet e Shërbimit{{/link}} për Reklama nga Automattic."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Shërbyesi juaj është i keqformësuar, që do të thotë se Jetpack Protect s’është në gjendje ta mbrojë me efektshmëri sajtin tuaj."],"In \"Mobile\"":["Te \"Celular\""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Formësoni rregullimet për njoftime Monitor në WordPress.com{{/link}}"],"View your earnings":["Shihni fitimet tuaja"],"Configure site SEO":["Formësoni SEO sajti"],"Activate SEO tools":["Aktivizoni mjete SEO"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["Që t’ia filloni. klikoni mbi Shtoni Media, te përpunuesi i postimeve tuaja dhe ngarkoni një video; për të tjerat kujdesemi ne!"],"Video Hosting":["Strehim Videosh"],"SEO Tools":["Mjete SEO"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Mjete të thelluara SEO që të ndihmojnë në gjetjen e sajtit tuaj kur njerëzit kërkojnë për lëndë që lidhet me të."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["Mënyra më e lehtë për të ngarkuar te sajti juaj video pa reklama dhe që s’i përkasin ndonjë marke. Përfitoni statistika mbi luajtjen dhe ndarjen me të tjerët të videove dhe lojtësi është i peshës së lehtë dhe reagues."],"You are running Jetpack on a staging server.":["Po e xhironi Jetpack-un në një shërbyes provash."],"More Info":["Më Tepër të Dhëna"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Administroni dukshmëri Pëlqimesh, që nga Rregullimet për Modulin e Ndarjeve Me të Tjerë{{/a}}"],"Your current IP: %(ip)s":["IP-ja Juaj e Tanishme: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["Në këtë skedë ka rregullime të paruajtura, që do të humbasin, nëse dilni prej saj. Të vazhdohet?"],"This will reset all Jetpack options, are you sure?":["Kështu do të kthehen në fillimet krejt mundësitë Jetpack, jeni i sigurt?"],"Search for a Jetpack feature.":["Kërkoni për një veçori Jetpack-u."],"Configure your Security Scans":["Formësoni Kontrollet tuaj të Sigurisë"],"Subscriber":["Pajtimtar"],"Big iPhone/iPad Update Now Available":["Gati Tani një Përditësim i Madh për iPhone/iPad"],"The WordPress for Android App Gets a Big Facelift":["Aplikacioni WordPress për Android Ndërron Pamjen Goxha"],"WordPress.com Likes are:":["Pëlqimet te WordPress.com janë:"],"Comments headline":["Krye komentesh"],"A few catchy words to motivate your readers to comment.":["Pak fjalë karrem për të motivuar lexuesit tuaj të komentojnë."],"Show a \"follow blog\" option in the comment form":["Shfaq te formulari i komenteve mundësinë \"ndiqni blogun\""],"Show a \"follow comments\" option in the comment form":["Shfaq te formulari i komenteve mundësinë \"ndiqini komentet\""],"Put a chart showing 48 hours of views in the admin bar":["Vendosni te shtylla e përgjegjësit një grafik që tregon parjet e 48 orëve"],"Hide the stats smiley face image":["Fshihe figurën me fytyrat e emotikonëve për statistika"],"Whitelisted IP addresses":["Adresa IP të lejuara"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Shfaqni te fundfaqja e temës për celular një reklamë për aplikacione WordPress për celular"],"Copied!":["U kopjua!"],"Highlight and copy the following text to your clipboard:":["Theksojeni dhe kopjojeni tekstin vijues te e papastra juaj:"],"Regenerate address":["Riprodhoje adresën"],"Automatically proofread content when: ":["Ndreq lëndë vetvetiu kur: "],"A post or page is first published":["Publikohet një postim apo faqe fillimisht"],"A post or page is updated":["Përditësohet një postim apo faqe"],"Automatic Language Detection":["Zbulim i Vetvetishëm Gjuhe"],"The proofreader supports English, French, German, Portuguese and Spanish.":["Kontrollori i drejtshkrimit mbulon gjuhët anglisht, frëngjisht, gjermanisht, portugalisht dhe spanjisht."],"Enable proofreading for the following grammar and style rules: ":["Aktivizoni kontroll drejtshkrimi për rregullat vijues gramatike dhe stilistike: "],"Add a phrase":["Shtoni një togfjalësh"],"Cheatin' uh?":["Po bëni me hile, hë?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}A ju mbetet qejfi të na thoni pse s’e plotësuat lidhjen e Jetpack-ut, përmes këtij {{a}}pyetësori me 2 pyetje{{/a}}?{{/p}}{{p}}Që të funksionojnë veçoritë tona për siguri falas dhe trafik, lypset lidhje e Jetpack-ut.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Mirë se vini te {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["Jetpack-u juaj është i lidhur tashmë."],"You're fueled up and ready to go, Jetpack is now active.":["E keni serbatorin plot dhe jeni gati për udhë, Jetpack-u tani është aktiv."],"You're fueled up and ready to go.":["E keni serbatorin plot dhe jeni gati për udhë."],"You are currently running a development version of Jetpack.":["Jeni duke xhiruar një version zhvillim të Jetpack-ut."],"Submit Beta feedback":["Parashtroni përshtypje për versionin Beta"],"What would you like to see on your Jetpack Dashboard?":["Ç’do të donit të shihnit te Pulti i JetPack-ut tuaj?"],"Let us know!":["Na e bëni të ditur!"],"Saving…":["Po ruhet…"],"Save Settings":["Ruaji Rregullimet"],"Jetpack Stats Icon":["Ikonë Statistikash Jetpack"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Aktivizoni Statistika Sajti{{/a}} që të shihni statistika të hollësishme, pëlqime, ndjekës, pajtimtarë, etj! {{a1}}Mësoni më tepër{{/a1}}"],"Activate Site Stats":["Aktivizoni Statistika Sajti"],"Security Scanning":["Kontrolle Sigurie"],"Site Backups":["Kopjeruajtje Sajti"],"Upgrade":["Përmirësojeni"],"ACTIVE":["AKTIVE"],"Your site is on Development Mode":["Sajti juaj gjendet nën Mënyrën Zhvillim"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Pasi të lidheni, mund ta përmirësoni me një plan me pagesë, që t’u hapni rrugë mjeteve të klasit botëror për sigurinë, mbrojtjen nga mesazhe të padëshiruar, dhe asistencës me përparësi."],"View your spam stats":["Shihni statistika tuaja mbi mesazhe të padëshiruar"],"View your security dashboard":["Shihni pultin tuaj të sigurisë"],"The site is in Development Mode, so you can not connect to WordPress.com.":["Sajti gjendet nën Mënyrën Zhvillim, ndaj s&#mund të lidheni te WordPress.com-i."],"Link your account to WordPress.com to get the most out of Jetpack.":["Lidheni llogarinë tuaj me WordPress.com-in, që të përfitoni maksimumin prej Jetpack-ut."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["Për kontroll të plotë, të automatizuar, për kërcënime sigurie, ju lutemi, {{a}}instaloni dhe aktivizoni{{/a}} VaultPress-in."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["Për kontroll të plotë, të automatizuar, për kërcënime sigurie, ju lutemi, {{a}}përmirësoni llogarinë tuaj{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack-u po bllokon në mënyrë aktive përpjekje dashakeqe për hyrje. Të dhënat do të shfaqen këtë së afërmi!"],"Total malicious attacks blocked on your site.":["Sulme dashakeqës të bllokuar në sajtin tuaj gjithsej."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Aktivizoni Protect-in{{/a}} që ta mbani sajtin tuaj të mbrojtur nga përpjekje hyrjesh dashakeqe."],"All plugins are up-to-date. Awesome work!":["Krejt shtojcat janë të përditësuara. Punë e paqme!"],"Jetpack is improving and optimizing your image speed.":["Jetpack-u po përmirëson dhe optimizon shpejtësinë për figurat tuaja."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack-u po e mbikëqyr sajtin tuaj. Nëse na duket se sajti juaj është jashtë funksionimi, do të merrni një email."],"Security":["Siguri"],"Performance":["Performancë"],"Backups":["Kopjeruajtje"],"{{a}}View backup details{{/a}}.":["{{a}}Shihni hollësi kopjeruajtjeje{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["Që të kopjeruhet vetvetiu krejt sajti juaj, ju lutemi, {{a}}instaloni dhe aktivizoni{{/a}} VaultPress-in."],"Unavailable in Dev Mode.":["S’mund të kihet nën mënyrën Dev."],"Spam Protection":["Mbrojtje nga të Padëshiruarit"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["Për mbrojtje të fjalës së fundit nga mesazhe të padëshiruar, ju lutemi, {{a}}instaloni Akismet-in{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["Për mbrojtje të fjalës së fundit nga mesazhe të padëshiruar, ju lutemi, {{a}}aktivizoni Akismet-in{{/a}}."],"Invalid key":["Kyç i pavlefshëm"],"Unavailable in Dev Mode":["S’mund të kihet nën mënyrën Dev"],"Activating recommended features…":["Po aktivizohen veçori të këshilluara…"],"Recommended features active.":["Veçoritë e këshilluara janë aktive."],"Recommended features failed to activate. %(error)s":["Dështoi aktivizimi i veçorive të zgjedhura. %(error)s"],"Activating %(slug)s…":["Po aktivizohet %(slug)s…"],"%(slug)s has been activated.":["%(slug)s është aktivizuar."],"%(slug)s failed to activate. %(error)s":["Dështoi aktivizimi i %(slug)s. %(error)s"],"Deactivating %(slug)s…":["Po çaktivizohet %(slug)s…"],"%(slug)s has been deactivated.":["%(slug)s u çaktivizua."],"%(slug)s failed to deactivate. %(error)s":["Dështoi çaktivizimi i %(slug)s. %(error)s"],"Updating %(slug)s settings…":["Po përditësohen rregullimet për %(slug)s…"],"Updated %(slug)s settings.":["U përditësuan rregullimet për %(slug)s."],"Error updating %(slug)s settings. %(error)s":["Gabim në përditësimin e rregullimeve për %(slug)s. %(error)s"],"Updating %(slug)s address…":["Po përditësohet adresa për %(slug)s…"],"Regenerated %(slug)s address .":["U riprodhua adresa për %(slug)s ."],"Error regenerating %(slug)s address. %(error)s":["Gabim në riprodhimin e adresës %(slug)s. %(error)s"],"Resetting Jetpack options…":["Po rikthehen në fillimet mundësitë për Jetpack-un…"],"Options reset.":["Mundësitë u rikthyen te parazgjedhjet."],"Options failed to reset.":["Dështoi rikthimi i mundësive te parazgjedhjet."],"There was an error disconnecting Jetpack. Error: %(error)s":["Pati një gabim gjatë shkëputjes së jetpack-ut. Gabim: %(error)s"],"Unlinking from WordPress.com":["Po shkëputet nga WordPress.Com-i"],"Unlinked from WordPress.com.":["U shkëput nga WordPress.Com-i."],"Error unlinking from WordPress.com. %(error)s":["Gabim gjatë heqjes së lidhjes nga WordPress.com. %(error)s"],"At A Glance":["Me një Vështrim"],"Clichés":["Klishe"],"Dashboard":["Pult"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["A do të na e tregonit pse-në? Thjesht {{a}}duke iu përgjigjur dy pyetjeve të thjeshta{{/a}} do të na ndihmonte të përmirësojmë Jetpack-un."],"Automattic's Privacy Policy":["Rregulla Privatësie te Automattic"],"WordPress.com Terms of Service":["Kushte Shërbimi te WordPress.com"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}Aktivizojeni{{/a}} që të zgjeroni funksionimin dhe shpejtësinë e ngarkimit të figurave tuaja."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Aktivizoni vetëpërditësime shtojcash{{/a}}"],"Plugin Updates":["Përditësime Shtojcash"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["Që të kopjeruhet vetvetiu krejt sajti juaj, ju lutemi, {{a}}përmirësoni llogarinë tuaj{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["Hëm! Kyçi juaj Akismet mungon ose është i pavlefshëm. {{akismetSettings}}Kaloni te rregullimet për Akismet-in që ta ndreqni{{/akismetSettings}}."],"No threats found, you're good to go!":["S’u gjetën rreziqe, jeni gati të vazhdoni!"],"{{a}}Contact Support{{/a}}":["{{a}}Lidhuni Me Ata të Asistencës{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}Shihni hollësitë te VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["Uh oh, u gjet %(number)s rrezik.","Uh oh, u gjet %(number)s rreziqe."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}Aktivizoni Monitor-in{{/a}} që të merrni njoftime me email, nëse sajti juaj del jashtë funksionimi."],"Loading…":["Po ngarkohet…"],"Downtime monitoring":["Mbikëqyrje për ndalesa funksionimi"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}Shihni më tepër statistika te WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}Shihni statistika të hollësishme{{/button}}"],"All-time comments":["Komente gjatë krejt kohës"],"All-time views":["Parje gjatë krejt kohës"],"%(number)s View":["%(number)s Parje","%(number)s Parje"],"Best overall day":["Dita më e mirë"],"Views today":["Parje sot"],"Months":["Muaj"],"Weeks":["Javë"],"Days":["Ditë"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["Diç ndodhi gjatë ngarkimit të statistikave. Ju lutemi, provoni më vonë ose {{a}}shihini statistikat tuaja te WordPress.com{{/a}}"],"Click to view detailed stats.":["Klikoni që të shihni statistika të hollësishme."],"Views: %(numberOfViews)s":["Parje: %(numberOfViews)s"],"Week of %(date)s":["Java e %(date)s"],"Site Security":["Siguri Sajti"],"Activate recommended features":["Aktivizoni veçori të këshilluara"],"Link to WordPress.com":["Lidhje për te WordPress.com"],"Unlink me from WordPress.com":["Shkëputmë WordPress.com-i"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["Pati një problem me lidhjen e Jetpack-ut tuaj. Ju lutemi, riklikoni mbi \"Lidhe me WordPress.com-in\"."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["Patëm një problem me lidhjen e Jetpack-ut; çaktivizojeni dhe mandej riaktivizojeni shtojcën Jetpack, mandej rilidheni."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Lypset të qëndroni i futur në blogun tuaj WordPress teksa autorizoni Jetpack-un."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Jetpack-u juaj ka një kleçkë.{{/s}} Na vjen keq për ngatërresën. Ju lutemi, riprovoni më vonë; nëse problemi vazhdon, ju lutemi, lidhuni me ata të asistencës me këtë mesazh: %(error_key)s"],"Disconnecting Jetpack":["Po shkëputet Jetpack-u"],"Learn more":["Mësoni më tepër"],"Posts":["Postime"],"Front page":["Faqja ballore"],"Upload videos":["Ngarkoni video"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Shfaq lëndë të afërt pas postimesh"],"Related":["Të afërta"],"Save":["Ruaje"],"Email Address":["Adresë Email"],"Media":["Media"],"Themes":["Tema"],"Site Stats":["Statistika Sajti"],"Sharing":["Ndarje me të tjerët"],"Testimonials":["Dëshmi"],"Cancel":["Anuloje"],"Comments":["Komente"],"Ignored Phrases":["Togfjalësha të Shpërfillur"],"Use automatically detected language to proofread posts and pages":["Për ndreqjen gjuhësore në postime dhe faqe përdor gjuhën e zbuluar automatikisht"],"Redundant Phrases":["Togfjalësha të Përsëritur"],"Phrases to Avoid":["Togfjalësha Për T’u Shmangur"],"Passive Voice":["Zë Pasiv"],"Jargon":["Zhargon"],"Hidden Verbs":["Folje të Fshehura"],"Double Negatives":["Negativë të Dyfishtë"],"Diacritical Marks":["Shenja Diakritike"],"Complex Phrases":["Togfjalësha Kompleksë"],"Bias Language":["Gjuhë Fyese"],"English Options":["Mundësi Anglishteje"],"Proofreading":["Ndreqje gjuhësore"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack-u s’u lidh dot me WordPress.com-in: %(error_key)s. Zakonisht kjo vjen kur diçka te strehuesi juaj web s’është formësuar si duhet."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com po ka probleme dhe s’është në gjendje të mbushë serbatorin e Jetpack-ut tuaj. Ju lutemi, riprovoni më vonë."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Jetpack-u juaj ka një parregullsi.{{/s}} Lidhja e këtij sajti me WordPress.com-in s’është e mundur. Zakonisht kjo vjen kur sajti juaj nuk hapet dot nga përdoruesit (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Që të përdorë Jetpack-un, sajti juaj web duhet të jetë i përdorshëm publikisht: %(error_key)s"],"You have successfully disconnected Jetpack":["E shkëputët me sukses Jetpack-un"],"Edit":["Përpunoni"],"Connected":["I lidhur"],"Activate":["Aktivizoje"],"Active":["Aktive"],"Search":["Kërko"],"Settings":["Rregullime"],"Learn More":["Mësoni Më Tepër"],"Disconnect Jetpack":["Shkëputeni Jetpack-un"],"Test your site’s compatibility with Jetpack.":["Provoni përputhshmërinë mes sajtit tuaj dhe Jetpack-ut."],"Settings header\u0004Plugin Autoupdates":["Vetëpërditësime Shtojce"],"Settings header\u0004Downtime monitoring":["Mbikëqyrje për ndalesa funksionimi"],"Settings header\u0004Privacy Settings":["Rregullime Privatësie"],"Settings header\u0004WordPress.com toolbar":["Panel WordPress.com"],"Settings header\u0004Composing":["Hartim Mesazhesh"],"Settings header\u0004Site stats":["Statistika sajti"],"Settings header\u0004Search engine optimization":["Optimizim motorësh kërkimesh"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Butona ndarjesh me të tjerët"],"Settings header\u0004Publicize connections":["Lidhje Publicize"],"Settings header\u0004Like buttons":["Butona pëlqimesh"],"Settings header\u0004WordPress.com log in":["Hyrje nga WordPress.com"],"Settings header\u0004Brute force attack protection":["Mbrojtje nga sulme <em>brute force</em>"],"Settings header\u0004Backups and security scanning":["Kopjeruajtje dhe kontrolle sigurie"],"Settings header\u0004Spam filtering":["Filtrim mesazhesh të padëshiruar"],"Navigation item.\u0004Performance":["Funksionim"],"Navigation item.\u0004My Plan":["Plani Im"],"Navigation item.\u0004Dev Tools":["Mjete Zhvilluesi"],"Navigation item.\u0004Settings":["Rregullime"],"Navigation item.\u0004Discussion":["Diskutim"],"Navigation item.\u0004Traffic":["Trafik"],"Navigation item.\u0004Sharing":["Ndarje Me të Tjerët"],"Navigation item.\u0004At A Glance":["Me një Vështrim"],"Navigation item.\u0004Plans":["Plane"],"Navigation item.\u0004Writing":["Të shkruarit"],"Navigation item.\u0004Reset Options (dev only)":["Mundësi Rikthimi Në Fillimet (vetëm versione dev)"],"Navigation item.\u0004Security":["Siguri"],"Navigation item.\u0004At a Glance":["Me një Vështrim"],"Search term.\u0004terms of service":["kushte shërbimit"],"Search term.\u0004tos":[""],"Search term.\u0004gdpr":["gdpr"],"Search term.\u0004data":["të dhëna"],"Search term.\u0004tracks":["pjesë"],"Search term.\u0004privacy":["privatësi"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["Përmirësojeni"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Përmirësojeni"],"Button caption\u0004Saving…":["Po ruhet…"],"Button caption\u0004Save settings":["Ruaji rregullimet"],"A heading for a block of related posts.\u0004Related":["Të afërta"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Paraparje"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Mbajeni të lidhur"],"A caption for a button to disconnect.\u0004Disconnect":["Shkëputu"],"Short warning message\u0004Updates needed":["Lypsen përditësime"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Me pagesë"],"A header for a preview area in the configuration screen.\u0004Preview":["Paraparje"],"Ads header\u0004Ads":["Reklama"],"Dashboard widget header\u0004Site connection":["Lidhje sajti"],"Dashboard widget header\u0004Account connection":["Lidhje llogarie"],"A caption for a small button to fix security issues.\u0004Threats":["Rreziqe"],"A caption for a small button to fix security issues.\u0004FIX":["NDREQE"],"Short warning message about new threats found.\u0004Threats found!":["U gjetën rreziqe!"],"Short warning message about site having no security scan.\u0004No scanning":["Pa skanim"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Përmirësojeni"],"Short message informing user that the site is secure.\u0004Secure":["I sigurt"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Kyç i pavlefshëm"],"Caption for a button to set up a feature.\u0004Set up":["Rregullojeni"],"verb\u0004Copy":["Kopjoje"],"Shorthand for Privacy Policy.\u0004Privacy":["Privatësi"],"Shorthand for Terms of Service.\u0004Terms":["Kushte"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Diagnostikim"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["U bllokuan komente të padëshiruar."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-sr_RS-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-sr_RS-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index aaf99ecc..00000000
--- a/plugins/jetpack/languages/json/jetpack-sr_RS-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);","lang":"sr_RS"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Управљајте прегледношћу лајкова помоћу модула за подешавање подела{{/a}}"],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["Постоје незапамћене измене у овом табу, које ће бити изгубљене ако га напустите. Наставити?"],"This will reset all Jetpack options, are you sure?":["Ово ће ресетовати све Jetpack опције, да ли сте сигурни?"],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":[""],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":[""],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":[""],"Save Settings":[""],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":[""],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found.","Uh oh, %(number)s threats found."],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["","%(number)s Views","%(number)s Views"],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":[""],"Learn more":["Сазнај више"],"Posts":["Чланци"],"Front page":["Почетна страница"],"Pinterest":["Пинтерест"],"Google":["Google"],"Show related content after posts":[""],"Related":[""],"Save":["Сачувај"],"Email Address":["Адреса е-поште"],"Media":["Садржај"],"Themes":[""],"Site Stats":["Статистике веб места"],"Sharing":["Дељење"],"Testimonials":["Сведочанства"],"Cancel":["Одустани"],"Comments":["Коментари"],"Ignored Phrases":[""],"Use automatically detected language to proofread posts and pages":[""],"Redundant Phrases":[""],"Phrases to Avoid":[""],"Passive Voice":[""],"Jargon":[""],"Hidden Verbs":[""],"Double Negatives":[""],"Diacritical Marks":[""],"Complex Phrases":[""],"Bias Language":[""],"English Options":[""],"Proofreading":[""],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[""],"You have successfully disconnected Jetpack":[""],"Edit":["Уреди"],"Connected":["Повезан"],"Activate":["Укључи"],"Active":["Укључено"],"Search":["Претрага"],"Settings":["Подешавања"],"Learn More":["Сазнај више"],"Disconnect Jetpack":[""],"Test your site’s compatibility with Jetpack.":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-sv_SE-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-sv_SE-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 02020146..00000000
--- a/plugins/jetpack/languages/json/jetpack-sv_SE-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"sv_SE"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":["Nu ska du aktivera Jetpacks rekommenderade funktion för att optimera webbplatsens säkerhet och prestanda. {{a}}Läs mer om vad som ingår{{/a}}."],"We’re now collecting stats and securing your site. Welcome aboard.":["Vi samlar nu in statistik och säkrar din webbplats. Välkommen ombord."],"{{a}}Skip, and explore features individually{{/a}}.":["{{a}}Hoppa över och utforska funktionerna individuellt{{/a}}."],"Jetpack Business Plan":["Jetpacks Business-paket"],"Jetpack Premium Plan":["Jetpacks Premium-paket"],"Jetpack Personal Plan":["Jetpacks Personal-paket"],"Get started with hassle-free design, stats, and performance tools.":["Kom igång med smidiga verktyg för design, statistik och prestanda."],"Welcome to Jetpack Free":["Välkommen till Jetpack Free"],"Jetpack Free Plan":["Paketet Jetpacks Free"],"Explore Jetpack plans":["Utforska Jetpack-paket"],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":["Få tryggheten av automatisk säkerhetskopiering och prioriterad support, nå ut till en bredare målgrupp genom att använda avancerade sökmotoroptimeringsverktyg, öka intäkterna från din webbplats med reklam och anpassa din webbplats med våra över 200 premiumteman."],"Jetpack offers so much more":["Jetpack erbjuder mycket mer"],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":["Behöver du hjälp? Sök på vår supportwebbplats för att få veta mer om din webbplats, ditt konto och hur du får ut det mesta av WordPress."],"Support documentation":["Supportdokumentation"],"Chat bubbles representing getting in touch with support":["Använd talbubblorna för att kontakta supporten"],"Site Activity":["Webbplatsaktivitet"],"Start publicizing now":["Börja publicera nu"],"Reach a wider audience by automatically sharing your posts on social media.":["Nå ut till en större målgrupp genom att dela dina inlägg automatiskt på sociala medier."],"Increase traffic to your site":["Öka trafiken till din webbplats"],"Explore free themes":["Utforska gratisteman"],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":["Få obegränsad åtkomst till hundratals professionella teman och anpassa din webbplats precis som du vill ha den."],"A wide variety of themes and tools to customize a site":["Ett brett urval av teman och verktyg för att anpassa en webbplats"],"Set up your site security":["Ställ in webbplatssäkerhet"],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":["Förhindra inloggningsattacker och få aviseringar omedelbart när problem uppstår med din webbplats."],"Site stats showing an evolution in traffic and engagement":["Webbplatsstatistik visar utvecklingen av trafik och användning"],"A hand holding a loupe":["En hand som håller ett förstoringsglas"],"A chart showing an healthy increase in earnings":["En tabell som visar goda ökade intäkter"],"Interface showing a chronological list of changes and updates in a site":["Ett gränssnitt som visar en kronologisk lista över ändringar och uppdateringar på en webbplats"],"A cloud with multiple types of content floating around it":["Ett moln med många typer av innehåll som svävar omkring det"],"A folder holding real comments":["En mapp som innehåller verkliga kommentarer"],"Make your site faster":["Gör din webbplats snabbare"],"Load pages faster by serving your images from our global network of servers.":["Ladda sidor snabbare genom att lägga upp dina bilder från vårt globala servernätverk."],"A fast and performant website":["En snabb och högpresterande webbplats"],"A secure site, locked and protected by Jetpack":["En säker webbplats som är låst och skyddad av Jetpack"],"These settings won't apply to related posts added using the block editor.":["Dessa inställningar gäller inte relaterade inlägg som läggs till med blockredigeraren."],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["Kopiera befintliga inlägg, sidor, omdömen och portföljer. Allt innehåll kommer att kopieras, inklusive text, utvalda bilder, delningsinställningar, med mera."],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":[""],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":[""],"Add Like buttons to your posts and pages":[""],"When visitors enjoy your content, let them show it with a Like.":[""],"Explore your Jetpack Professional plan!":["Utforska ditt Jetpack Professional-paket!"],"Explore your Jetpack Premium plan!":["Utforska ditt Jetpack Premium-paket!"],"Explore your Jetpack Personal plan!":["Utforska ditt Jetpack Personal-paket!"],"Create account":["Skapa konto"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["Jetpack ger kraft åt din webbplats, men för att få åtkomst till alla dess funktioner behöver du skapa ett konto."],"Real-time, automated backups (unlimited storage)":["Automatiska säkerhetskopieringar i realtid (obegränsat lagringsutrymme)"],"Compose content the way you want to and streamline your publishing experience.":["Skapa innehåll på det sätt som du önskar och strömlinjeforma din publiceringsupplevelse."],"Add a portfolio item":["Lägg till ett portföljobjekt"],"Add a testimonial":["Lägg till ett omdöme"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["Maximera synligheten för din webbplats i sökmotorer och se statistik över trafiken i realtid."],"Create a Jetpack account to use this feature":["Skapa ett Jetpack-konto för att använda denna funktion"],"Share your content on social media and increase audience engagement.":["Dela ditt innehåll på sociala medier och öka användarnas engagemang."],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["Jetpack övervakar din webbplats kontinuerligt och varnar dig direkt när ett driftstopp upptäcks."],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["När en uppdatering för ett tillägg släpps, är bästa praxis att uppdatera tillägget på en gång Välj vilka tillägg du vill uppdatera automatiskt så att din webbplats hålls säker."],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["Skapa en webbplats med säkerhet i toppklass och få notifikationer om tekniska problem."],"Error enabling Site accelerator. %(error)s":["Ett fel uppstod vid aktiveringen av webbplatsacceleratorn. %(error)s"],"Site accelerator is now speeding up your site!":["Webbplatsacceleratorn kommer nu göra din webbplats snabbare!"],"Enabling Site accelerator…":["Aktiverar webbplatsacceleratorn..."],"Error disabling site accelerator. %(error)s":["Ett fel uppstod vid inaktiveringen av webbplatsacceleratorn. %(error)s"],"Site accelerator is no longer speeding up your site!":["Webbplatsacceleratorn ökar inte längre hastigheten för din webbplats!"],"Disabling site accelerator…":["Inaktivering av webbplatsacceleratorn."],"Load pages faster, optimize images, and speed up your visitors’ experience.":["Ladda sidor snabbare, optimera bilder och skapa en snabbare upplevelse för dina besökare."],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["Komplettera statistiken från WordPress.com med Googles djupgående analys av dina besökare och deras trafikmönster."],"High-speed, high-definition video hosting with no third-party ads.":["Högupplöst videovisning med hög hastighet, utan annonser från tredje part."],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["Tidsinställ obegränsat med tweets, Facebook-inlägg och andra sociala inlägg i förväg."],"Marketing Automation":["Automatiserad marknadsföring"],"Activate Jetpack Search":["Aktivera Jetpack-sökning"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["Ersätt WordPress standardsökning med bättre resultat och filtrering via Elasticsearch."],"Start earning":["Börja tjäna pengar"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["WordAds gör att du kan tjäna pengar genom att visa reklaminnehåll. Börja tjäna pengar idag."],"Spam is automatically blocked from your comments.":["Skräppost blockeras automatiskt från dina kommentarer."],"Spam Filtering":["Skräppostfiltrering"],"Browse premium themes":["Bläddra bland premiumteman."],"Access hundreds of beautifully designed premium themes at no extra cost.":["Få tillgång till hundratals vackert designade premium-teman utan extra kostnad."],"Try a premium theme":["Testa ett premiumtema"],"View settings":["Visa inställningar"],"Create a Jetpack account to view your email followers":["Skapa ett Jetpack-konto för att visa dina prenumeranter av e-post"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["Öppna din webbplats för kommentarer och bjud in prenumeranter för att få meddelanden om ditt senaste arbete."],"Manage security settings":["Hantera säkerhetsinställningar"],"Built-in Performance":["Inbyggd prestanda"],"Jetpack is ready for the new WordPress editor":["Jetpack är redo för den nya WordPress-redigeraren"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["I dag introducerar vi den första vågen av Jetpack-specifika block som har utformats särskilt för den nya redigeraren: Enkel betalningsknapp, formulär, karta och Markdown."],"Build your Jetpack site with blocks":["Bygg din Jetpack-webbplats med block"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["En ny redigerare? Ja! {{a}}Läs mer{{/a}}."],"The features you rely on, adapted for the new WordPress editor.":["Funktionerna du förlitar dig på har anpassats till en ny WordPress-redigerare."],"Take me to the new editor":["Ta mig till den nya redigeraren"],"Testing Jetpack Connection":["Testar Jetpack-anslutning"],"There was an error testing Jetpack. Error: %(error)s":["Det uppstod ett fel när Jetpack testades. Fel: %(error)s"],"New in Jetpack!":["Nytt i Jetpack!"],"Speed up static file load times":["Snabba upp laddningstiderna för statiska filer"],"Speed up image load times":["Snabba upp laddningstiderna för bilder"],"Enable site accelerator":["Aktivera webbplatsacceleratorn"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["Ladda sidor snabbare genom att tillåta Jetpack att optimera dina bilder och servera dina bilder och statiska filer (såsom CSS och JavaScript) från vårt globala servernätverk."],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["Lägg till ett extra säkerhetslager för din webbplats genom att aktivera WordPress.com-inloggning och säker autentisering. Om du har flera webbplatser med det här alternativet aktiverat kan du logga in på var och en av dem med samma uppgifter."],"View your site activity":["Visa din webbplatsaktivitet"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["Visa en kronologisk lista över alla ändringar och uppdateringar på din webbplats på ett organiserat, läsbart sätt."],"Manually Verify ":["Verifiera manuellt"],"Verify with Google":["Verifiera med Google"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["Google kommer att skicka e-post om vissa händelser på din webbplats, inklusive indikationer på att din webbplats har blivit {{a1}}hackad{{/a1}}, eller problem med {{a2}}indexeringen av{{/a2}} din webbplats."],"or":["eller"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["Övervaka din webbplats trafik och prestanda från{{a}}Google Search Console{{/a}}."],"Your site is verified with Google":["Din webbplats är verifierad med Google"],"Site failed to verify: %(error)s":["Webbplats kunde inte verifieras: %(error)s"],"Verifying...":["Verifierar…"],"Add faster, more advanced searching to your site with Jetpack Professional.":["Lägg till snabbare och mer avancerad sökning för din webbplats med Jetpack Professional."],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["Ersätt WordPress inbyggda sökfunktion med Jetpack Sök, en avancerat sökupplevelse"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["Jetpack Sök ersätter den inbyggda sökningen med en snabb, skalbar, anpassningsbar och mycket relevant sökningsvärd i WordPress.com-molnet. Resultatet: Dina användare hittar det innehåll de vill ha, snabbare."],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["Den inbyggda WordPress-sökningen är utmärkt för webbplatser som inte har så mycket innehåll. Men när din webbplats växer blir sökningarna saktare och returnerar mindre relevanta resultat."],"Jetpack Search supports many customizations.":["Jetpack Sök stöder många anpassningar."],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["Ersätt den inbyggda sökningen med en snabb, skalbar, anpassningsbar och mycket relevant sökningsvärd i{{a}} WordPress.com-molnet{{/a}}."],"Site is verified":["Webbplats är verifierad"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}För att skapa en vacker webbplats som ser ut och fungerar exakt som du vill, ger Jetpack Professional dig obegränsad tillgång till över 200 WordPress-premiumteman.{{/p}}{{p}}Jetpack Professional handlar om mer än att bara hitta den perfekta designen. Det handlar även om den totala trygghet det innebär att veta att du har prioriterat stöd från vårt globala expertteam, om behovet skulle uppstå.{{/p}}"],"Spam filtering and priority support.":["Skräppostfiltrering och prioriterad support."],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["När annonser är aktiverade genererar Jetpack automatiskt en anpassad ads.txt som är skräddarsydd för din webbplats."],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["Jetpack generera automatiskt en anpassad {{link}}ads.txt{{/link}} som är skräddarsydd för din webbplats. Om du behöver lägga till ytterligare poster för andra nätverk så lägger du till dem i utrymmet nedan, en per rad."],"Custom ads.txt entries":["Anpassade ads.txt-poster"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}För att skapa en vacker webbplats som ser ut och fungerar exakt som du vill, ger Jetpack Professional dig obegränsad tillgång till över 200 WordPress-premiumteman.{{/p}}{{p}}Jetpack Professional handlar om mer än att bara hitta den perfekta designen. Det handlar också om total trygghet: säkerhetskopiering i realtid, automatisk skanning efter skadlig kod, samt prioriterad support från vårt team av experter garanterar att din webbplats alltid är säker.{{/p}}"],"Introducing Premium Themes":["Introducerar Premium-teman"]," Premium Themes":[" Premium-teman"],"Privacy information":["Integritetsinformation"],"Enable Lazy Loading for images":["Aktivera ”Lazy Load” för bilder"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["”Lazy load” av bilder snabbar upp din webbplats och skapar en jämnare visningsupplevelse. Bilder laddas in allteftersom besökaren bläddrar nedåt på skärmen, istället för alla på en gång."],"Performance & speed":["Prestanda och hastighet"],"Enable high-speed, ad-free video player":["Aktivera snabb, reklamfri videospelare"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["Gör innehållet du publicerar mer engagerande med högupplöst video. Med Jetpack Video kan du anpassa din mediaspelare och leverera snabba, reklamfria och varumärkesfria videor till dina besökare. Videor lagras på våra WordPress.com-servrar och upptar inte något utrymme på ditt webbhotell!"],"Video":["Video"],"Carousel color scheme":["Karusellfärgschema"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Exif-data visar besökare ytterligare tekniska detaljer för en bild, såsom brännvidd, bländare och ISO."],"Show photo Exif metadata in carousel (when available)":["Visa Exif-metadata för bild i karusellvisning (när de är tillgängliga)"],"Display images in a full-screen carousel gallery":["Visa bilder i ett karusellgalleri i fullskärm."],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["Skapa karusellbildspel i fullskärm för bilderna i dina inlägg och på dina sidor. Karusellgallerier är mobilvänliga och uppmanar webbplatsbesökare att interagera med dina bilder."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["WordPress.com-verktygsfältet ersätter WordPress.com-administratörsverktygsfältet och effektiviserar din WordPress-upplevelse. Det erbjuder åtkomst med ett klick för att hantera alla dina webbplatser, uppdatera din WordPress.com-profil, visa meddelanden och hålla koll på de webbplatser du följer i läsaren."],"Portfolios shortcode: [portfolio]":["Portfolio-kortkod: [portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["Använd {{portfolioLink}}portfolior{{/portfolioLink}} på din webbplats för att visa upp ditt bästa arbete. Om ditt tema inte har stöd för Jetpack-portfolior kan du ändå visa dem på din webbplats med hjälp av en enkel kortkod."],"Testimonials shortcode: [testimonials]":["Kortkod för omdömen: [testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["Lägg till {{testimonialLink}}omdömen{{/testimonialLink}} på din webbplats för att locka nya kunder. Om ditt tema inte har stöd för Jetpack-omdömen kan du ändå visa dem på din webbplats med hjälp av en enkel kortkod."],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["Sökmotorer kan inte komma åt din webbplats för tillfället. Om du vill göra din webbplats tillgänglig, kontrollera dina {{a}}inställningar för Läsaren{{/a}} och slå på ”Synlighet i sökmotorer”."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["Goda nyheter: Jetpack skickar automatiskt din webbplatskarta till alla större sökmotorer för indexering."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["Webbplatskartor är filer som sökmotorer som Google eller Bing använder för att indexera din webbplats. De kan hjälpa till att förbättra din rankning i sökresultat. När du aktiverar den här funktionen skapar Jetpack webbplatskartor åt dig och uppdaterar dem automatiskt när innehållet på din webbplats ändras."],"Configure related posts in the Customizer":["Konfigurera relaterade inlägg i Anpassa"],"Highlight related content with a heading":["Framhåll relaterat innehåll med en rubrik"],"View security scan details":["Visa säkerhetsskanningsdetaljer"],"View backup history":["Visa säkerhetskopieringsstatistik"],"Show a thumbnail image where available":["Visa miniatyrbilder om de finns"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["För mer information om hur specifika Jetpack-funktioner använder data- och spårningsaktiviteter se vårt {{privacyCenterLink}}Integritetscenter{{/privacyCenterLink}}."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["Vi använder andra spårningsverktyg, inklusive några från tredje part. {{cookiePolicyLink}}Läs om dessa{{/cookiePolicyLink}} och hur man kontrollerar dem."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["Denna information hjälper oss att förbättra våra produkter, göra vår marknadsföring gentemot dig mer relevant, anpassa din WordPress.com-upplevelse och mycket mer, enligt vår {{pp}}sekretesspolicy{{/pp}}."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["Dela information med våra analysverktyg om din användning av tjänster när du är inloggad på ditt WordPress.com-konto. {{cookiePolicyLink}}Läs mer{{/cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["Den här funktionen hanteras av en administratör. {{link}}Läs mer{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["Den här funktionen har inaktiverats av en administratör. {{link}}Läs mer{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["Den här funktionen har aktiverats av en administratör. {{link}}Läs mer{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["%(moduleName) har inaktiverats av en administratör. {{link}}Läs mer{{/link}}."],"This feature has been disabled by a site administrator.":["Den här funktionen har inaktiverats av en administratör."],"%(moduleName)s has been disabled by a site administrator.":["%(moduleName) har inaktiverats av en administratör."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["Du kan lägga till ytterligare annonser med Ad-widgeten. {{link}}Prova det!{{/link}}"],"Configure your notification settings":["Konfigurera dina notisinställningar"],"Monitor your site's downtime":["Driftstoppsövervaka din webbplats"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["Jetpack-sökning är en kraftfull ersättning för sökfunktionen inbyggd i WordPress."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["Filerna på din webbplats söks regelbundet igenom efter obehöriga eller misstänksamma ändringar som kan kompromettera din säkerhet och data."],"Plugin needs updating.":["Tillägg behöver uppdateras.","Tillägg behöver uppdateras."],"%(number)s":["%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Jetpacks tillägg Updates låter dig välja vilka tillägg som ska uppdateras automatiskt."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack kommer att optimera dina bilder och leverera dem från den server som finns närmast dina besökare. Användningen av vårt globala nätverk för innehållsdistribution får din webbplats att laddas snabbare."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":["Jetpacks driftstoppsövervakning håller koll på din webbplats och och varnar dig direkt när ett driftstopp upptäcks."],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Jetpack Backups låter dig enkelt återställa eller ladda ner en säkerhetskopia från ett specifikt tillfälle."],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet kontrollerar dina kommentarer och kontaktformulärinskick mot vår globala databas över skräppost."],"Privacy Information":["Integritetsinformation"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["VideoPress gör att du kan ladda upp videoklipp från din dator till att ligga på WordPress.com istället för på ditt webbhotells servrar. Du kan sedan infoga dessa på din Jetpack-webbplats på egen server. "],"Add the Search (Jetpack) widget to your sidebar":["Lägg till Sök-widget (Jetpack) i ditt sidofält"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["Ge dina besökare en bra sökupplevelse genom att låta dem filtrera och sortera snabba, relevanta sökresultat."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["Aktiverar ett mobilvänligt tema som väger lite och som kommer att visas för besökare på mobila enheter."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["Laddar nästa inlägg automatiskt när läsaren närmar sig slutet på sidan."],"Allows you to publish new posts by sending an email to a special address.":["Gör att du kan publicera nya inlägg genom att skicka ett e-postmeddelande till en särskild adress."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["Gör att du kan komponera innehåll med länkar, listor och andra stilar med hjälp av Markdown-syntax."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["Kontrollerar ditt innehåll för korrekt grammatik och stavning, missbrukade ord och stil medan du skriver."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["Tillhandahåller de nödvändiga, dolda taggar som behövs för att verifiera din WordPress-webbplats med olika tjänster."],"Displays information on your site activity, including visitors and popular posts or pages.":["Visar information om aktiviteten på din webbplats, inklusive besökare och populära inlägg eller sidor."],"Allows you to optimize your site and its content for better results in search engines.":["Gör att du kan optimera din webbplats och dess innehåll för bättre resultat i sökmotorer."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["Integrerar din WordPress-webbplats med Google Analytics, en plattform som erbjuder insikter om din trafik, besökare och konverteringar."],"Displays high-quality ads on your site that allow you to earn income.":["Visa annonser av hög kvalitet på din webbplats som gör att du kan skapa intäkter."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["Lägger till delningsknappar i ditt innehåll så att besökare kan dela på sociala medier."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["Gör så att du automatiskt kan dela ditt senaste innehåll på sociala medier, inklusive Facebook och Twitter."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["Lägger till gilla-knappar i ditt innehåll så att besökare kan visa sin uppskattning."],"Allows registered users to log in to your site with their WordPress.com accounts.":["Gör så att registrerade användare kan logga in på din webbplats med sina WordPress.com-konton."],"Protects your site from traditional and distributed brute force login attacks.":["Skyddar din webbplats från traditionella och distribuerade brute force-inloggningsattacker."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["Säkerhetskopierar din webbplats till de globala WordPress.com-servrarna, så att du kan återställa innehållet i händelse av en nödsituation eller ett fel."],"Removes spam from comments and contact forms.":["Tar bort skräppost från kommentarer och kontaktformulär."],"We are committed to your privacy and security. ":["Vi är engagerade i din integritet och säkerhet. "],"View all Jetpack plans":["Visa alla Jetpack-paket"],"Manage your plan":["Hantera ditt paket"],"Your Plan":["Ditt paket"],"You’re currently on Jetpack %(plan)s.":["Du är för närvarande på Jetpack %(plan)s."],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["Gör att användare kan prenumerera på dina inlägg eller kommentarer och ta emot notiser om nytt innehåll via e-post."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["Ersätter WordPress standardformulär för kommentarer med ett nytt kommentarssystem som innehåller inloggningsalternativ för sociala medier."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}Aktivera{{/a}} för att ersätta WordPress inbyggda sökfunktion med Jetpack Sök, en avancerad sökupplevelse"],"Add Search (Jetpack) Widget":["Lägg till Sökwidget (Jetpack)"],"Jetpack Search is powering search on your site.":["Jetpack Sök förbättrar sökningen på din webbplats."],"Manage your plugins":["Hantera dina tillägg"],"Moderate comments":["Moderera kommentarer"],"Error updating privacy settings. %(error)s":["Fel vid uppdatering av integritetsinställningar. %(error)s"],"Updated privacy settings.":["Uppdaterade integritetsinställningar"],"Updating privacy settings…":["Uppdaterar integritetsinställningar ..."],"Add Jetpack Search Widget":["Lägg till Jetpack sökwidget"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["Lägg till Jetpack-sök widget i din sidopanel för att konfigurera sortering och filter."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["Fullständigt säkerhetspaket, marknadsförings- och intäktsautomatiseringsverktyg, obegränsat videohotell, obegränsade teman, förbättrad sökning och prioriterad support."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["Fullständigt säkerhetspaket, marknadsförings- och intäktsautomatiseringsverktyg, obegränsat videohotell och prioriterad support."],"Daily backups, spam filtering, and priority support.":["Daglig säkerhetskopiering, skräppostfiltrering och prioriterad support."],"Always-on Security":["Säkerhet 24/7"],"Activate video hosting":["Aktivera videohotell"],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Säkerhetskopiering av alla dina webbplatsdata i realtid med obegränsat utrymme, återställning med ett klick, automatisk säkerhetsskanning och prioriterad support"],"Design the perfect website":["Designa den perfekta webbplatsen"],"Set up Jetpack":["Konfigurera Jetpack"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["Säkerhetskopiera alla dina webbplatsdata i realtid med obegränsat utrymme, återställning med ett klick och automatisk säkerhetsskanning."],"Jetpack Search":["Jetpack Sök"],"Jetpack version %(version)s":["Jetpack version %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["Din webbplats säkerhetskopieras i realtid och skannas regelbundet igenom efter säkerhetshot."],"Daily backup of all your site data with unlimited space and one-click restores":["Dagliga säkerhetskopior av alla din webbplatsdata med obegränsat utrymme och återställningar med ett klick"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Daglig säkerhetskopiering av alla dina data med obegränsat utrymme, återställningar med ett klick, automatisk säkerhetsskanning och prioriterad support"],"View your security activity":["Visa din säkerhetsaktivitet"]," (powered by VaultPress).":["(drivs av VaultPress)."],"Customize Search Widget":["Anpassa sökwidgeten"],"Please correct the issue below and try again.":["Vänligen åtgärda problemet nedan och försök igen.","Vänligen åtgärda problemen nedan och försök igen."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["Vi ser till att din webbplats är fri från säkerhetshot. Du kommer att meddelas om vi hittar ett."],"Your site is being backed up in real-time.":["Din webbplats säkerhetskopieras i realtid."],"Jetpack version":["Jetpack version"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}Visa aktiviteten för din webbplats{{/a}} i ett enskilt flöde."],"Activity":["Aktivitet"],"Confirm each new phrase you add by pressing enter.":["Bekräfta varje ny fras du lägger till genom att tryck retur."],"{{a}}View details{{/a}}":["{{a}}Visa detaljer{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["Tack för att du väljer Jetpack Professional. Jetpack säkerhetskopierar nu ditt innehåll i realtid, sökindexerar ditt innehåll, söker efter säkerhetshot och ger dig tillgång till premiumteman."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["Med Jetpack Professional kan du skapa den perfekta webbplatsen med hjälp av över 300 professionellt designade WordPress-teman, inklusive mer än 200 premiumteman. Anpassa ditt innehåll med en mängd widgetar eller lägg till ett obegränsat antal videoklipp i dina inlägg och sidor – som visas utan annonser eller vattenstämplar."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["Att skaffa fler följare är enkelt med vårt Professional-paket, tack vare innehållsdelning och schemaläggning, verktyg för sökmotoroptimering och inbyggda prenumerationsalternativ. Du kan tjäna pengar på din webbplats med en enkel betalningsknapp och annonsering, och övervaka resultatet av dina ansträngningar genom att integrera med Google Analytics."],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Jetpack Professional ger dig allt du behöver för att resultatet av ditt hårda arbete ska vara i trygghet, inklusive säkerhetskopieringar på begäran och genomsökning efter skadliga program, samt återställning och problemlösning med ett klick. Din webbplats kommer att vara fullständigt skyddad mot skräppost, skadlig kod och brute force-attacker mot inloggningen."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Börja utforska Jetpack Professional nu för att se alla fördelar med ditt nya paket."],"Install premium themes":["Installera premiumteman"],"Review SEO features":["Granska SEO-funktioner"],"Welcome Professional":["Välkommen till Jetpack Professional"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["Tack för att du valde Jetpack Premium. Jetpack säkerhetskopierar nu din webbplats, söker efter säkerhetshot och gör det möjligt att tjäna pengar på din webbplats."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["Med Jetpack Premium kan du skapa den perfekta webbplatsen, oavsett dess syfte. Anpassa utseendet för din webbplats med hjälp av över 100 gratisteman eller förstärk ditt innehåll med obegränsad HD-video – allt utan annonser eller vattenmärken."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Med Jetpacks kraftfulla delningsverktyg kan du automatiskt dela dina nyaste inlägg på sociala medier, eller schemalägga innehåll för att åter delas valfritt datum och tidpunkt du själv väljer. I takt med att antalet följare ökar kan ditt företag växa med hjälp av verktyg som betalningsknappar och annonser."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Börja utforska Jetpack Premium nu för att se alla fördelar med ditt nya paket."],"Monetize your site with ads":["Tjäna pengar på din webbplats med hjälp av annonser"],"Welcome Premium":["Välkommen till Jetpack Premium"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["Tack för att du valde Jetpack Personal. Jetpack säkerhetskopierar nu din webbplats och söker efter säkerhetshot."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["Med Jetpack Personal har du tillgång till över 100 professionellt designade WordPress-teman gratis. Välj det tema som passar din webbplats bäst och anpassa färger och bilder eller lägg till nya widgetar."],"Got it":["Jag fattar"],"Welcome personal":["Välkommen till Jetpack Personal"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["Genom att klicka på knappen nedan godkänner du våra {{tosLink}}användarvillkor{{/tosLink}} och att {{shareDetailsLink}}dela detaljer{{/shareDetailsLink}} med WordPress.com."],"Jetpack Stats People":["Jetpack-statistik personer"],"Hello there! Your stats have been activated.":["Hallå där! Din statistik har aktiverats."],"Just give us a little time to collect data so we can display it for you here.":["Ge oss lite mer tid att samla in data så att vi kan visa det för dig här."],"Okay, got it!":["Ok, jag fattar!"],"Display ads below posts on":["Visa annonser under inlägg på"],"Additional ad placements":["Ytterligare annonsplaceringar"],"Top of each page":["Längst upp på varje sida"],"Second ad below post":["Andra annonsen under inlägg"],"Archives":["Arkiv"],"Explore Professional":["Utforska Professional"],"Compare All Plans":["Jämför alla paket"],"Person with laptop":["Personer med bärbar dator"],"Your Jetpack site is ready to go!":["Din Jetpack-webbplats är klar!"],"Stars":["Stjärnor"],"Jupiter":["Jupiter"],"Welcome to Jetpack Personal":["Välkommen till Jetpack Personal"],"Welcome to Jetpack Premium":["Välkommen till Jetpack Premium"],"Welcome to Jetpack Professional":["Välkommen till Jetpack Professional"],"Schedule posts":["Schemalägg inlägg"],"Activate Publicize":["Aktivera ”offentliggör”"],"Your site is backed up.":["Din webbplats är säkerhetskopierad."],"Image Performance":["Bildprestanda"],"Get WordPress Apps for every device":["Hämta WordPress-appar för alla enheter."],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Hantera alla dina webbplatser från en enda adminpanel: publicera innehåll, följ statistik, moderera kommentarer och mycket mer, var som helst ifrån."],"I already use this app.":["Jag använder redan denna app."],"Create address":["Skapa adress"],"Priority support":["Prioriterad support"],"Add sharing buttons to your posts":["Lägg till delningsknappar i dina inlägg"],"Automatically share your posts to social networks":["Dela dina inlägg automatiskt på sociala nätverk"],"Updating settings…":["Uppdaterar inställningar…"],"Updating Post by Email address…":["Uppdaterar adress för Inlägg via e-post…"],"Your paid plan gives you access to prioritized Jetpack support.":["Ditt betalpaket ger dig tillgång till prioriterad Jetpack-support."],"You have paid for backups but they're not yet active.":["Du har betalat för säkerhetskopieringar men de är inte aktiverade ännu."],"You have paid for backups and security scanning but they’re not yet active.":["Du har betalat för säkerhetskopieringar och säkerhetsskanning men de är inte aktiverade ännu."],"Click \"Set Up\" to finish installation.":["Klicka på \"Konfigurera\" för att slutföra installationen."],"Checking site status…":["Kontrollerar webbplatsens status…"],"Pages":["Sidor"],"We're here to help":["Vi finns här för att hjälpa"],"Jetpack comes with free, basic support for all users.":["Jetpack levereras med gratis, grundläggande support för alla användare."],"Ask a question":["Ställ en fråga"],"Search our support site":["Sök på vår supportwebbplats"],"Get a faster resolution to your support questions.":["Få svar snabbare på dina supportfrågor."],"Host fast, high-quality, ad-free video.":["Snabb, reklamfri videolagring med hög kvalitet."],"Generate income with high-quality ads.":["Skapa inkomster med annonser av hög kvalitet."],"Real-time site backups and automatic threat resolution.":["Säkerhetskopiering av webbplatsen i realtid och automatisk lösning på säkerhetsproblem."],"Protect against data loss, malware, and malicious attacks.":["Skydd mot dataförlust, skadlig programvara och skadliga attacker."],"Integrate easily with Google Analytics.":["Enkel integrering med Google Analytics."],"Help your content get found and shared with SEO tools.":["Hjälp ditt innehåll att hittas och delas med verktyg för sökmotoroptimering."],"Protect your site from spam.":["Skydda din webbplats mot skräppost."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["Denna webbplats är inte ansluten till WordPress.com. Be att webbplatsadministratören ansluter."],"Spam filtering":["Skräppostfiltrering"],"Daily, automated malware scanning":["Daglig, automatisk sökning efter skadlig programvara"],"Daily, automated backups (unlimited storage)":["Dagliga, automatiska säkerhetskopieringar (obegränsat lagringsutrymme)"],"Daily, automated malware scanning with automated resolution":["Daglig, automatisk sökning efter skadlig programvara med automatisk lösning"],"Unlimited, high-speed video hosting":["Obegränsad, höghastighets videolagring"],"SEO preview tools":["Verktyg för förhandsgranskning av sökmotoroptimering"],"Site stats, related content, and sharing tools":["Webbplatsstatistik, relaterat innehåll och delningsverktyg"],"Brute force attack protection and downtime monitoring":["Driftstidsövervakning och skydd mot brute force-attacker"],"Unlimited, high-speed image hosting":["Obegränsad, snabb bildlagring"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["Genom att avbryta anslutningen av %(siteName)s till WordPress.com kommer du inte längre att ha åtkomst till följande:"],"Read more about Jetpack benefits":["Läs mer om fördelarna med Jetpack"],"An Automattic Airline":["Från Automattic, naturligtvis"],"Manage site connection":["Hantera webbplatsanslutning"],"Connect your account to WordPress.com to view more stats":["Anslut ditt konto till WordPress.com för att visa mer statistik"],"Theme enhancements":["Temaförbättringar"],"Load more posts using the default theme behavior":["Ladda fler inlägg med hjälp av standardtemats beteende"],"Load more posts in page with a button":["Ladda fler inlägg på sidan med en knapp"],"Load more posts as the reader scrolls down":["Ladda fler inlägg när besökaren bläddrar nedåt"],"Theme support required.":["Temasupport behövs."],"Learn more about adding support for Infinite Scroll to your theme.":["Läs mer om att lägga till stöd för oändlig bläddring i ditt tema."],"Use excerpts instead of full posts on front page and archive pages":["Använd utdrag istället för hela inlägg på startsidan och arkivsidorna"],"Show featured images":["Visa utvalda bilder"],"Enable the WordPress.com toolbar":["Aktivera WordPress.com-verktygsfältet"],"Writing tools available to you will be shown here when an administrator enables them.":["De skrivverktyg som finns tillgängliga för dig kommer att visas här när en administratör aktiverar dem."],"Portfolios":["Portföljer"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Observera att {{b}}verifiering av din webbplats med dessa tjänster inte är nödvändig{{/b}} för att din webbplats ska indexeras av sökmotorer. Klistra in HTML-etikettkoden nedan om du vill använda dessa avancerade sökmotorverktyg och verifiera din webbplats med en tjänst. Läs de {{support}}fullständiga instruktionerna{{/support}} om du får problem. Verifieringstjänster som stöds: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}} och {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["Generera XML-webbplatskartor"],"Collecting valuable traffic stats and insights":["Samla värdefull trafikstatistik och insikter"],"The image helps collect stats, but should work when hidden.":["Bilden hjälper till att samla statistik, men bör fungera även när den är dold."],"Count logged in page views from":["Räkna inloggade sidvisningar från"],"Allow stats reports to be viewed by":["Tillåt att statistikrapporter visas för"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["Du kan justera dessa inställningar om du vill ha mer avancerad kontroll. Läs mer om vad du kan göra för att {{a}}sökmotoroptimera din webbplats{{/a}}."],"Configure your SEO settings":["Konfigurera dina inställningar för sökmotoroptimering."],"In \"Upgrade\"":["I \"Uppgradera\""],"Configure your Google Analytics settings":["Konfigurera dina Google Analytics-inställningar"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Visa annonser i den första artikeln på din startsida eller i slutet på varje sida och inlägg. Placera fler annonser längst upp på din webbplats och i alla widget-områden för att öka dina inkomster."],"Enable ads and display an ad below each post":["Aktivera annonser och visa en annons under varje inlägg"],"Configure your sharing buttons":["Konfigurera dina delningsknappar"],"Connect your social media accounts":["Anslut dina konton för sociala media"],"Match accounts using email addresses":["Koppla samman konton med hjälp av e-postadresser"],"Require accounts to use WordPress.com Two-Step Authentication":["Kräv att konton använder WordPress.com tvåstegs-autentisering"],"Add to whitelist":["Lägg till i vitlistan"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["Du kan vitlista en IP-adress eller en serie adresser för att hindra dem från att någonsin blockeras av Jetpack. IPv4 och IPv6 kan användas. Ange ett intervall genom att ange det lägsta värdet och det högsta värdet åtskilda med ett bindestreck. Exempel: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["Din webbplats är säkerhetskopierad och fri från hot."],"Checking your spam protection…":["Kontrollerar ditt spamskydd…"],"Fetching key…":["Hämtar nyckel…"],"Your site needs an Antispam key.":["Din webbplats behöver en Antispam-nyckel."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["Det är problem med din Antispam API-nyckel. {{a}}Läs mer{{/a}}."],"Your site is not protected from spam.":["Din sida är inte skyddad mot spam."],"Your Antispam key is valid.":["Din Antispam-nyckel är giltig."],"Your site is protected from spam.":["Din sida är skyddad från spam."],"Checking key…":["Kontrollerar nyckel…"],"Your API key":["Din API-nyckel"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["Om du inte redan har en API-nyckel kan du {{a}}hämta din API-nyckel här{{/a}}, och du kommer att guidas genom processen för att få den."],"No search results found for %(term)s":["Inga sökresultat hittades för %(term)s"],"Enter a search term to find settings or close search.":["Skriv in ett sökord för att hitta inställningar eller avsluta sökningen."],"Connections":["Anslutningar"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Din webbplats är i Utvecklingsläge, så den kan inte anslutas till WordPress.com."],"Your site is connected to WordPress.com.":["Din webbplats är ansluten till WordPress.com."],"You are the Jetpack owner.":["Du är Jetpack-ägaren."],"Connected as {{span}}%(username)s{{/span}}":["Ansluten som {{span}}%(username)s{{/span}}"],"View your Email Followers":["Visa dina e-postföljare"],"Color scheme":["Färgschema"],"Enable Markdown use for comments.":["Aktivera Markdown-användning för kommentarer."],"Updated settings.":["Uppdaterade inställningar."],"Error updating settings. %(error)s":["Fel vid uppdatering av inställningar. %(error)s"],"Regenerated Post by Email address.":["Adress för Inlägg via e-post har genererats igen."],"Error regenerating Post by Email address. %(error)s":["Fel uppstod när adress för Inlägg via e-post skulle genereras igen. %(error)s"],"Updated settings. Refreshing page…":["Uppdaterade inställningar. Uppdaterar sida …"],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["För närvarande i {{a}}utvecklingsläge{{/a}} (vissa funktioner är blockerade) eftersom: {{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}Filtret jetpack_development_mode är aktivt{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}Konstanten JETPACK_DEV_DEBUG är definierad{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}Det finns ingen punkt i URL:en för din webbplats (t.ex. http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics är en gratistjänst som kompletterar vår {{a}}inbyggda statistik{{/a}} genom att visa olika saker om dina besökare. Statistiken från WordPress.com stats och Google Analytics använder olika metoder för att identifiera och spåra aktivitet på din webbplats, så normalt kommer de att visa något olika uppgifter för antal besök, sidvisningar o.s.v."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Konfigurera Google Analytics"],"Activate Google Analytics":["Aktivera Google Analytics"],"Download the free apps":["Ladda ner gratisapparna"],"Upgrade Focus: VideoPress For Weddings":["Uppgraderingsfokus: VideoPress för bröllop"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}Nu kan du också konfigurera relaterade inlägg i Anpassa. {{ExternalLink}}Testa!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["Annonser visas som standard i slutet av varje sida, inlägg eller i den första artikeln på din startsida. Du kan även lägga till dem längst upp på din webbplats och i alla widget-områden för att öka dina inkomster!"],"Display an ad unit at the top of your site.":["Visa en annonsenhet högst upp på din webbplats."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["Genom att aktivera annonser godkänner du Automattic Ads {{link}}användarvillkor{{/link}}."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Din server är felkonfigurerad. Det gör att Jetpack Protect inte kan skydda sin webbplats effektivt."],"In \"Mobile\"":["Under ”Mobilt”"],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}Konfigurera inställningarna för dina Monitor-meddelanden på WordPress.com{{/link}}"],"View your earnings":["Visa dina inkomster"],"Configure site SEO":["Konfigurera SEO för webbplats"],"Activate SEO tools":["Aktivera SEO-verktyg"],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["För att komma igång klickar du på Lägg till media i din inläggsredigerare och laddar upp en video. Vi tar hand om resten!"],"Video Hosting":["Videovisning"],"SEO Tools":["SEO-verktyg"],"Advanced SEO tools to help your site get found when people search for relevant content.":["Avancerade verktyg för sökmotoroptimering som hjälper till så att din webbplats hittas när personer söker efter relevant innehåll."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["Det enklaste sättet att ladda upp reklamfria och omärkta videoklipp på din webbplats. Du får statistik över videouppspelning och delningar, spelaren väger lite och är responsiv."],"You are running Jetpack on a staging server.":["Du kör Jetpack på en mellanserver."],"More Info":["Mer info"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Hantera synlighet för gilla-markeringar i inställningarna för delningsmodulen{{/a}}"],"Your current IP: %(ip)s":["Din aktuella IP: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["Det finns inställningar på den här fliken som inte sparats och de kommer förloras om du lämnar den. Fortsätta?"],"This will reset all Jetpack options, are you sure?":["Detta kommer att återställa alla Jetpack-alternativ, är du säker?"],"Search for a Jetpack feature.":["Sök efter en Jetpack-funktion."],"Configure your Security Scans":["Konfigurera dina säkerhetsskanningar"],"Subscriber":["Prenumerant"],"Big iPhone/iPad Update Now Available":["Stor iPhone/iPad-uppdatering finns nu tillgänglig"],"The WordPress for Android App Gets a Big Facelift":["WordPress för Android får en rejäl ansiktslyftning"],"WordPress.com Likes are:":["WordPress.com Gillar är:"],"Comments headline":["Rubrik för kommentarer"],"A few catchy words to motivate your readers to comment.":["Några välfunna ord för att motivera dina läsare att kommentera"],"Show a \"follow blog\" option in the comment form":["Visa alternativet ”följ blogg” i kommentarsformuläret"],"Show a \"follow comments\" option in the comment form":["Visa alternativet ”följ kommentarer” i kommentarsformuläret"],"Put a chart showing 48 hours of views in the admin bar":["Lägg till ett diagram i adminmenyn som visar antalet visningar under de senaste 48 timmarna"],"Hide the stats smiley face image":["Dölj smileyn från statistiken"],"Whitelisted IP addresses":["Vitlistade IP-adresser"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Visa en annons för WordPress mobilappar i sidfoten på mobiltemat"],"Copied!":["Kopierad!"],"Highlight and copy the following text to your clipboard:":["Markera och kopiera följande text till dina urklipp:"],"Regenerate address":["Återbilda adress"],"Automatically proofread content when: ":["Korrekturläs innehåll automatiskt när: "],"A post or page is first published":["Ett inlägg eller en sida publiceras första gången"],"A post or page is updated":["Ett inlägg eller en sida är uppdaterad"],"Automatic Language Detection":["Automatisk språkidentifiering"],"The proofreader supports English, French, German, Portuguese and Spanish.":["Korrekturläsaren har stöd för engelska, franska, tyska, portugisiska och spanska."],"Enable proofreading for the following grammar and style rules: ":["Aktivera korrekturläsning för följande grammatik- och stilregler: "],"Add a phrase":["Lägg till en fras"],"Cheatin' uh?":["Fuskar du?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}Vill du berätta varför du inte slutförde Jetpack-anslutningen via detta {{a}}formulär med två frågor{{/a}}?{{/p}}{{p}}En Jetpack-anslutning krävs för att våra kostnadsfria säkerhets- och trafikfunktioner ska fungera.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["Välkommen till {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["Jetpack är redan anslutet."],"You're fueled up and ready to go, Jetpack is now active.":["Tanken är full och du är redo att köra, nu är Jetpack aktiverat."],"You're fueled up and ready to go.":["Tanken är full och du är redo att köra."],"You are currently running a development version of Jetpack.":["Du kör för närvarande en utvecklingsversion av Jetpack."],"Submit Beta feedback":["Ge oss beta-feedback"],"What would you like to see on your Jetpack Dashboard?":["Vad skulle du vilja se på din Jetpack-adminpanel?"],"Let us know!":["Låt oss veta!"],"Saving…":["Sparar..."],"Save Settings":["Spara inställningar"],"Jetpack Stats Icon":["Jetpack statistikikon"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}Aktivera webbplatsstatistik{{/a}} för att se detaljerad statistik, Gilla-markeringar, följare, prenumeranter och mycket mer! {{a1}}Läs mer{{/a1}}"],"Activate Site Stats":["Aktivera webbplatsstatistik"],"Security Scanning":["Säkerhetsskanning"],"Site Backups":["Säkerhetskopiering av webbplats"],"Upgrade":["Uppgradera"],"ACTIVE":["AKTIV"],"Your site is on Development Mode":["Din webbplats är i Utvecklingsläge"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["När du väl är ansluten kan du uppgradera till ett betalpaket för att låsa upp säkerhetsfunktioner, skyddsverktyg mot skräppost och prioriterad support i världsklass."],"View your spam stats":["Visa din skräppoststatistik"],"View your security dashboard":["Visa din säkerhetspanel"],"The site is in Development Mode, so you can not connect to WordPress.com.":["Webbplatsen är i Utvecklingsläge, så du kan inte ansluta till WordPress.com."],"Link your account to WordPress.com to get the most out of Jetpack.":["Länka ditt konto till WordPress.com för att få ut mesta möjliga ur Jetpack."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["För automatisk, omfattande skanning efter säkerhetshot, {{a}}installera och aktivera{{/a}} VaultPress."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["Uppgradera ditt konto för automatisk, omfattande {{a}}skanning efter säkerhetshot{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack blockerar skadliga inloggningsförsök aktivt. Information kommer snart att visas här!"],"Total malicious attacks blocked on your site.":["Totalt antal skadliga attacker blockerade på din webbplats."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}Aktivera Protect{{/a}} för att skydda din webbplats mot inloggningsförsök från utomstående."],"All plugins are up-to-date. Awesome work!":["Alla tillägg är uppdaterade. Bra jobbat!"],"Jetpack is improving and optimizing your image speed.":["Jetpack förbättrar och optimerar din bildhastighet."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack övervakar din webbplats. Om vi tror att din webbplats är nere får du ett e-postmeddelande."],"Security":["Säkerhet"],"Performance":["Prestanda"],"Backups":["Säkerhetskopior"],"{{a}}View backup details{{/a}}.":["{{a}}Visa information om säkerhetskopiering{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["För att säkerhetskopiera hela din webbplats automatiskt, {{a}}installera och aktivera{{/a}} VaultPress."],"Unavailable in Dev Mode.":["Ej tillgängligt i utvecklingsläge."],"Spam Protection":["Skräppostskydd"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["För högteknologiskt skräppostskydd, {{a}}installera Akismet{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["{{a}}Aktivera Akismet{{/a}} för högteknologiskt skräppostskydd."],"Invalid key":["Ogiltig nyckel"],"Unavailable in Dev Mode":["Ej tillgängligt i utvecklingsläge"],"Activating recommended features…":["Aktiverar rekommenderade funktioner…"],"Recommended features active.":["Rekommenderade funktioner aktiverade."],"Recommended features failed to activate. %(error)s":["Rekommenderade funktioner kunde inte aktiveras. %(error)s"],"Activating %(slug)s…":["Aktiverar %(slug)s…"],"%(slug)s has been activated.":["%(slug)s har aktiverats."],"%(slug)s failed to activate. %(error)s":["%(slug)s kunde inte aktiveras. %(error)s"],"Deactivating %(slug)s…":["Inaktiverar %(slug)s…"],"%(slug)s has been deactivated.":["%(slug)s har inaktiverats."],"%(slug)s failed to deactivate. %(error)s":["%(slug)s kunde inte inaktiveras. %(error)s"],"Updating %(slug)s settings…":["Uppdaterar %(slug)s inställningar…"],"Updated %(slug)s settings.":["Uppdaterat inställningar för %(slug)s."],"Error updating %(slug)s settings. %(error)s":["Fel vid uppdatering av inställningarna %(slug)s. %(error)s"],"Updating %(slug)s address…":["Uppdaterar %(slug)s adress …"],"Regenerated %(slug)s address .":["Återbildade %(slug)s adress."],"Error regenerating %(slug)s address. %(error)s":["Fel vid återbildning av %(slug)sadress. %(error)s"],"Resetting Jetpack options…":["Återställer Jetpack-alternativ…"],"Options reset.":["Alternativ återställda."],"Options failed to reset.":["Alternativ kunde inte återställas."],"There was an error disconnecting Jetpack. Error: %(error)s":["Ett fel uppstod när Jetpack kopplades från. Fel: %(error)s"],"Unlinking from WordPress.com":["Länkning till WordPress.com tas bort."],"Unlinked from WordPress.com.":["Länkning till WordPress.com borttagen."],"Error unlinking from WordPress.com. %(error)s":["Fel vid borttagning av länkning till WordPress.com. %(error)s"],"At A Glance":["I korthet"],"Clichés":["Klichéer"],"Dashboard":["Adminpanel"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Kan du berätta varför? Om du bara vill {{a}}svara på två enkla frågor{{/a}} hjälper du oss att förbättra Jetpack."],"Automattic's Privacy Policy":["Automattics sekretesspolicy"],"WordPress.com Terms of Service":["WordPress.com användarvillkor"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}Aktivera{{/a}} för att förbättra prestanda och hastighet för dina bilder."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Aktivera automatisk uppdatering av tillägg{{/a}}"],"Plugin Updates":["Uppdateringar för tillägg"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["{{a}}Uppgradera ditt konto{{/a}} för att säkerhetskopiera hela din webbplats automatiskt."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["Hoppsan! Din Akismet-nyckel saknas eller är ogiltig. {{akismetSettings}}Gå till Akismet-inställningar för att fixa{{/akismetSettings}}."],"No threats found, you're good to go!":["Inga hot hittades, du är klar att köra!"],"{{a}}Contact Support{{/a}}":["{{a}}Kontakta supporten{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}Visa information på VaultPress.com{{/a}}"],"Uh oh, %(number)s threat found.":["Aj då, %(number)s hot hittat.","Aj då, %(number)s hot hittade."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}Aktivera Övervakning{{/a}} för att få e-postmeddelanden om din webbplats går ner."],"Loading…":["Laddar in ..."],"Downtime monitoring":["Driftstoppsövervakning"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}Visa mer statistik på WordPress.com {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}Visa detaljerad statistik{{/button}}"],"All-time comments":["Kommentarer totalt"],"All-time views":["Visningar totalt"],"%(number)s View":["%(number)s Visning","%(number)s Visningar"],"Best overall day":["Bästa dag totalt"],"Views today":["Visningar i dag"],"Months":["Månader"],"Weeks":["Veckor"],"Days":["Dagar"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["Något inträffade när statistiken laddades. Försök igen senare eller {{a}}se din statistik nu på WordPress.com{{/a}}"],"Click to view detailed stats.":["Klicka för att se detaljerad statistik."],"Views: %(numberOfViews)s":["Visningar: %(numberOfViews)s"],"Week of %(date)s":["Vecka %(date)s"],"Site Security":["Webbplatssäkerhet"],"Activate recommended features":["Aktivera rekommenderade funktioner"],"Link to WordPress.com":["Länk till WordPress.com"],"Unlink me from WordPress.com":["Ta bort länkning till WordPress.com"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["Vi hade problem med att ansluta Jetpack. Klicka på \"Anslut till WordPress.com\" igen."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["Vi hade problem med att ansluta Jetpack, inaktivera och återaktivera Jetpack-tillägget och anslut därefter igen."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Du måste fortsätta att vara inloggad på din WordPress-blogg medan du auktoriserar Jetpack."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Det finns en bugg i din Jetpack.{{/s}} Vi ber om ursäkt för besväret. Försök igen senare. Om problemet kvarstår kontakta vår supportavdelning med detta meddelande: %(error_key)s"],"Disconnecting Jetpack":["Kopplar bort Jetpack"],"Learn more":["Läs mer"],"Posts":["Inlägg"],"Front page":["Startsida"],"Upload videos":["Ladda upp videoklipp"],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Visa relaterat innehåll efter inlägg"],"Related":["Relaterade"],"Save":["Spara"],"Email Address":["E-postadress"],"Media":["Media"],"Themes":["Teman"],"Site Stats":["Statistik för webbplats"],"Sharing":["Delning"],"Testimonials":["Omdömen"],"Cancel":["Avbryt"],"Comments":["Kommentarer"],"Ignored Phrases":["Ignorerade fraser"],"Use automatically detected language to proofread posts and pages":["Använd ett automatiskt identifierat språk för korrekturläsning av inlägg och sidor"],"Redundant Phrases":["Redundanta fraser"],"Phrases to Avoid":["Fraser att undvika"],"Passive Voice":["Passivt språk"],"Jargon":["Slang"],"Hidden Verbs":["Dolda verb"],"Double Negatives":["Dubbla negationer"],"Diacritical Marks":["Diakritiska tecken"],"Complex Phrases":["Komplexa fraser"],"Bias Language":["Fördomsfullt språk"],"English Options":["Engelska inställningar"],"Proofreading":["Korrekturläsning"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack får inte kontakt med WordPress.com. %(error_key)s. Det betyder oftast att något är felaktigt konfigurerat på din webbserver."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com har stött på problem och kan inte få fart på din Jetpack. Försök igen senare."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Det finns en bugg i din Jetpack.{{/s}} Det är inte möjligt att ansluta den här webbplatsen till WordPress.com. Det betyder vanligtvis att din webbplats inte är offentligt åtkomlig (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Din webbplats behöver vara offentlig åtkomlig för att du ska kunna använda Jetpack: %(error_key)s"],"You have successfully disconnected Jetpack":["Du har kopplat bort Jetpack"],"Edit":["Redigera"],"Connected":["Ansluten"],"Activate":["Aktivera"],"Active":["Aktiv"],"Search":["Sök"],"Settings":["Inställningar"],"Learn More":["Läs mer"],"Disconnect Jetpack":["Koppla från Jetpack"],"Test your site’s compatibility with Jetpack.":["Testa om din webbplats är kompatibel med Jetpack."],"Settings header\u0004Plugin Autoupdates":["Automatiska uppdateringar av tillägg"],"Settings header\u0004Downtime monitoring":["Driftstoppsövervakning"],"Settings header\u0004Privacy Settings":["Integritetsinställningar"],"Settings header\u0004WordPress.com toolbar":["WordPress.com-verktygsfält"],"Settings header\u0004Composing":["Komposition"],"Settings header\u0004Site stats":["Webbplatsstatistik"],"Settings header\u0004Search engine optimization":["Sökmotoroptimering"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Delningsknappar"],"Settings header\u0004Publicize connections":["Publiceringsanslutningar"],"Settings header\u0004Like buttons":["Gilla-knappar"],"Settings header\u0004WordPress.com log in":["WordPress.com-inloggning"],"Settings header\u0004Brute force attack protection":["Skydd mot brute force-attacker"],"Settings header\u0004Backups and security scanning":["Säkerhetskopieringar och säkerhetsskanning"],"Settings header\u0004Spam filtering":["Spamfiltrering"],"Navigation item.\u0004Performance":["Prestanda"],"Navigation item.\u0004My Plan":["Mitt paket"],"Navigation item.\u0004Dev Tools":["Utvecklingsverktyg"],"Navigation item.\u0004Settings":["Inställningar"],"Navigation item.\u0004Discussion":["Diskussion"],"Navigation item.\u0004Traffic":["Trafik"],"Navigation item.\u0004Sharing":["Delning"],"Navigation item.\u0004At A Glance":["I korthet"],"Navigation item.\u0004Plans":["Paket"],"Navigation item.\u0004Writing":["Skriva"],"Navigation item.\u0004Reset Options (dev only)":["Återställ alternativ (endast utvecklingsversioner)"],"Navigation item.\u0004Security":["Säkerhet"],"Navigation item.\u0004At a Glance":["I korthet"],"Search term.\u0004terms of service":["användarvillkor"],"Search term.\u0004tos":["tos"],"Search term.\u0004gdpr":["gdpr"],"Search term.\u0004data":["data"],"Search term.\u0004tracks":["spårning"],"Search term.\u0004privacy":["integritet"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["Uppgradera"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Uppgradera"],"Button caption\u0004Saving…":["Sparar…"],"Button caption\u0004Save settings":["Spara inställningar"],"A heading for a block of related posts.\u0004Related":["Relaterad"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Förhandsvisa"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Förbli ansluten"],"A caption for a button to disconnect.\u0004Disconnect":["Koppla från"],"Short warning message\u0004Updates needed":["Uppdateringar behövs"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Betald"],"A header for a preview area in the configuration screen.\u0004Preview":["Förhandsvisning"],"Ads header\u0004Ads":["Annonser"],"Dashboard widget header\u0004Site connection":["Webbplatsanslutning"],"Dashboard widget header\u0004Account connection":["Kontoanslutning"],"A caption for a small button to fix security issues.\u0004Threats":["Hot"],"A caption for a small button to fix security issues.\u0004FIX":["FIXA"],"Short warning message about new threats found.\u0004Threats found!":["Hot upptäckta!"],"Short warning message about site having no security scan.\u0004No scanning":["Ingen skanning"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Uppgradera"],"Short message informing user that the site is secure.\u0004Secure":["Säker"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Ogiltig nyckel"],"Caption for a button to set up a feature.\u0004Set up":["Konfigurera"],"verb\u0004Copy":["Kopiera"],"Shorthand for Privacy Policy.\u0004Privacy":["Integritet"],"Shorthand for Terms of Service.\u0004Terms":["Villkor"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Felsök"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["Spamkommentarer blockerade."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-te-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-te-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index fd3f9c88..00000000
--- a/plugins/jetpack/languages/json/jetpack-te-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"te"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":[""],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":[""],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":["మాకు తెలియజేయండి!"],"Saving…":["భద్రమవుతోంది…"],"Save Settings":["అమరికలను భద్రపరచు"],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":[""],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found."],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["","%(number)s Views"],"Best overall day":[""],"Views today":[""],"Months":["నెలలు"],"Weeks":["వారాలు"],"Days":["రోజులు"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":[""],"Learn more":["మరింత తెలుసుకోండి"],"Posts":["టపాలు"],"Front page":["మొదటి పేజీ"],"Pinterest":[""],"Google":["గూగుల్"],"Show related content after posts":[""],"Related":[""],"Save":["భద్రపరచు"],"Email Address":["ఈ-మెయిల్ చిరునామా"],"Media":["మాధ్యమాలు"],"Themes":["అలంకారాలు"],"Site Stats":["సైటు గణాంకాలు"],"Sharing":["పంచుకోవడం"],"Testimonials":[""],"Cancel":["రద్దుచేయి"],"Comments":["వ్యాఖ్యలు"],"Ignored Phrases":[""],"Use automatically detected language to proofread posts and pages":[""],"Redundant Phrases":[""],"Phrases to Avoid":[""],"Passive Voice":[""],"Jargon":["పదజాలం"],"Hidden Verbs":[""],"Double Negatives":[""],"Diacritical Marks":[""],"Complex Phrases":[""],"Bias Language":[""],"English Options":["ఆంగ్ల భాషా ఎంపికలు"],"Proofreading":[""],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[""],"You have successfully disconnected Jetpack":[""],"Edit":["మార్చు"],"Connected":[""],"Activate":["చేతనం"],"Active":["సచేతనము గా"],"Search":["వెతుకు"],"Settings":["అమరికలు"],"Learn More":["మరింత తెలుసుకోండి"],"Disconnect Jetpack":[""],"Test your site’s compatibility with Jetpack.":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-th-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-th-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 094ff2ef..00000000
--- a/plugins/jetpack/languages/json/jetpack-th-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=1; plural=0;","lang":"th"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":[""],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":[""],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":[""],"Save Settings":[""],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":[""],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":[""],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":[""],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":[""],"Learn more":["ดูเพิ่มเติม"],"Posts":["เรื่อง"],"Front page":["หน้าแรก"],"Pinterest":[""],"Google":[""],"Show related content after posts":[""],"Related":[""],"Save":["บันทึก"],"Email Address":["อีเมล์"],"Media":["ไฟล์สื่อ"],"Themes":[""],"Site Stats":[""],"Sharing":[""],"Testimonials":[""],"Cancel":["ยกเลิก"],"Comments":["ความเห็น"],"Ignored Phrases":["ไม่สนใจวลี"],"Use automatically detected language to proofread posts and pages":["ใช้การตรวจจับภาษาอัตโนมัติเพื่อพิสูจน์อักษรเรื่องและหน้า"],"Redundant Phrases":["วลีที่ซ้ำซ้อน"],"Phrases to Avoid":["วลีที่หลีกเลี่ยง"],"Passive Voice":["กรรมวาจก (ผู้ถูกกระทำ)"],"Jargon":["ศัพท์เฉพาะ"],"Hidden Verbs":["กริยาที่ซ่อนอยู่"],"Double Negatives":["ปฎิเสธซ้อนปฎิเสธ"],"Diacritical Marks":["ออกเสียงวรรณยุกต์"],"Complex Phrases":["วลีที่ซับซ้อน"],"Bias Language":["ภาษาที่ขัดกัน"],"English Options":["ตัวเลือกภาษาอังกฤษ"],"Proofreading":["การพิสูจน์อักษร"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[""],"You have successfully disconnected Jetpack":[""],"Edit":["แก้ไข"],"Connected":[""],"Activate":["ใช้งาน"],"Active":["เคลื่อนไหว"],"Search":["ค้นหา"],"Settings":["ตั้งค่า"],"Learn More":["ดูเพิ่มเติม"],"Disconnect Jetpack":[""],"Test your site’s compatibility with Jetpack.":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-tr_TR-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-tr_TR-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 5b2c4fe1..00000000
--- a/plugins/jetpack/languages/json/jetpack-tr_TR-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=(n > 1);","lang":"tr"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":["Ardından sitenizin güvenliğini ve performansını en üst düzeye çıkarmak için Jetpack’in önerilen özellik kümesini etkinleştirin. {{a}}Dâhil olan özellikler hakkında daha fazla bilgi edinin{{/a}}."],"We’re now collecting stats and securing your site. Welcome aboard.":["Artık istatistikleri topluyoruz ve sitenizi güvenli hale getiriyoruz. Ekibe hoş geldiniz."],"{{a}}Skip, and explore features individually{{/a}}.":["{{a}}Atlayın ve özellikleri ayrı ayrı keşfedin{{/a}}."],"Jetpack Business Plan":["Jetpack Kurumsal Paket"],"Jetpack Premium Plan":["Jetpack Premium Paket"],"Jetpack Personal Plan":["Jetpack Kişisel Paket"],"Get started with hassle-free design, stats, and performance tools.":["Zahmetsiz tasarım, istatistikler ve performans araçlarını kullanmaya başlayın."],"Welcome to Jetpack Free":["Jetpack Ücretsiz Pakete hoş geldiniz"],"Jetpack Free Plan":["Jetpack Ücretsiz Paket"],"Explore Jetpack plans":["Jetpack paketlerini keşfedin"],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":["Otomatik yedeklemeler ve öncelik desteği ile içiniz rahat olsun, gelişmiş SEO araçlarını kullanarak daha geniş bir kitleye ulaşın, reklam alarak sitenizden para kazanın ve 200’den fazla premium temamızla sitenizi özelleştirin."],"Jetpack offers so much more":["Jetpack çok daha fazlasını sunuyor"],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":["Yardıma mı ihtiyacınız var? Siteniz, hesabınız ve WordPress'ten en iyi şekilde yararlanma hakkında bilgi edinmek için destek sitemizde arama yapın."],"Support documentation":["Destek belgeleri"],"Chat bubbles representing getting in touch with support":["Destekle iletişime geçmeyi temsil eden konuşma balonları"],"Site Activity":["Site Etkinliği"],"Start publicizing now":["Şimdi duyuru yapmaya başlayın"],"Reach a wider audience by automatically sharing your posts on social media.":["Sosyal medyada otomatik olarak paylaşım yaparak daha geniş bir kitleye ulaşın."],"Increase traffic to your site":["Sitenizin trafiğini artırın"],"Explore free themes":["Ücretsiz temaları keşfedin"],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":["Yüzlerce profesyonel temaya sınırsız erişim elde edin ve sitenizi tam istediğiniz gibi özelleştirin."],"A wide variety of themes and tools to customize a site":["Site özelleştirmek için çok çeşitli temalar ve araçlar"],"Set up your site security":["Sitenizin güvenliğini oluşturun"],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":["Oturum açma saldırılarını önleyin ve sitenizde bir sorun olduğunda anlık bildirimler alın."],"Site stats showing an evolution in traffic and engagement":["Trafik ve etkileşimdeki gelişmeyi gönderen site istatistikleri"],"A hand holding a loupe":["Büyüteç tutan bir el"],"A chart showing an healthy increase in earnings":["Kazançta sağlıklı bir artış gösteren grafik"],"Interface showing a chronological list of changes and updates in a site":["Bir sitedeki değişikliklerin ve güncellemelerin kronolojik listesini gösteren arayüz"],"A cloud with multiple types of content floating around it":["Etrafında çeşitli türde içerik bulunan bulut"],"A folder holding real comments":["Gerçek yorumları içeren bir klasör"],"Make your site faster":["Sitenizi hızlandırın"],"Load pages faster by serving your images from our global network of servers.":["Görsellerinizi küresel sunucu ağımızdan sunarak sayfaları daha hızlı yükleyin."],"A fast and performant website":["Hızlı ve yüksek performanslı web sitesi"],"A secure site, locked and protected by Jetpack":["Jetpack tarafından kilitlenen ve korunan güvenli bir site"],"These settings won't apply to related posts added using the block editor.":["Bu ayarlar, blok düzenleyici kullanılarak eklenen benzer yazılar için geçerli değildir."],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["Mevcut gönderileri, sayfaları, Görüşleri ve Portföyleri çoğaltın. Metinler, öne çıkan resimler ve paylaşım ayarları dahil olmak üzere tüm içerik kopyalanır."],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":["Bu site, {{a}}Hizmet Koşullarımızı{{/a}} ihlal ettiğinden WordPress.com’a bağlanamıyor."],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":["Web sitenizi, kullandığınız sosyal medya ağlarına bağlayın ve içeriğinizi tek bir tıkla tüm sosyal hesaplarınızda paylaşın. Bir gönderi yayımladığınızda bu, bağlı olan tüm hesaplarda görünür."],"Add Like buttons to your posts and pages":["Gönderilerinize ve sayfalarınıza Beğen düğmeleri ekleyin"],"When visitors enjoy your content, let them show it with a Like.":["İçeriğinizi beğendiklerini göstermeleri için ziyaretçilere bir Beğen düğmesi sağlayın."],"Explore your Jetpack Professional plan!":["Jetpack Profesyonel paketinizi keşfedin!"],"Explore your Jetpack Premium plan!":["Jetpack Premium paketinizi keşfedin!"],"Explore your Jetpack Personal plan!":["Jetpack Kişisel paketinizi keşfedin!"],"Create account":["Hesap oluştur"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["Jetpack, sitenizi destekler ancak tüm özelliklerine erişmek için hesap oluşturmanız gerekir."],"Real-time, automated backups (unlimited storage)":["Gerçek zamanlı, otomatik yedeklemeler (sınırsız depolama alanı)"],"Compose content the way you want to and streamline your publishing experience.":["Dilediğiniz şekilde içerik oluşturun ve gönderi yayımlama deneyiminize kolaylık katın."],"Add a portfolio item":["Portföy öğesi ekleme"],"Add a testimonial":["Görüş ekleme"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["Sitenizin arama motorlarındaki görünürlüğünü maksimuma çıkarın ve trafik istatistiklerini gerçek zamanlı olarak görüntüleyin."],"Create a Jetpack account to use this feature":["Bu özelliği kullanmak için bir Jetpack hesabı oluşturun"],"Share your content on social media and increase audience engagement.":["İçeriğinizi sosyal medyada paylaşın ve kitlenizin katılımını artırın."],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["Jetpack, sitenizi sürekli olarak izler ve kullanım dışı kalma durumu tespit edildiği anda sizi uyarır."],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["Bir eklenti güncellemesi kullanıma sunulduğunda en iyi yöntem bu eklentiyi hemen güncellemektir. Sitenizin güvende kalması için otomatik olarak güncellenmesini istediğiniz eklentileri seçin."],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["Son teknoloji güvenlik özellikleriyle sitenizi koruyun ve teknik sorunlarla ilgili bildirimler alın."],"Error enabling Site accelerator. %(error)s":["Site hızlandırıcısı etkinleştirilirken hata oluştu. %(error)s"],"Site accelerator is now speeding up your site!":["Site hızlandırıcısı artık sitenizi hızlandırıyor!"],"Enabling Site accelerator…":["Site hızlandırıcısı etkinleştiriliyor..."],"Error disabling site accelerator. %(error)s":["Site hızlandırıcısı devre dışı bırakılırken hata oluştu. %(error)s"],"Site accelerator is no longer speeding up your site!":["Site hızlandırıcısı artık sitenizi hızlandırmıyor!"],"Disabling site accelerator…":["Site hızlandırıcısı devre dışı bırakılıyor..."],"Load pages faster, optimize images, and speed up your visitors’ experience.":["Sayfaları daha hızlı yükleyin, görselleri optimize edin ve ziyaretçilerinizin deneyimine hız katın."],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["Google’ın ziyaretçilerinize ve trafik düzenlerinize ayrıntılı bakışıyla WordPress.com'un istatistiklerini tamamlayın."],"High-speed, high-definition video hosting with no third-party ads.":["Üçüncü taraf reklamların olmadığı yüksek hızlı ve yüksek tanımlı video barındırma olanağı."],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["Sınırsız sayıda tweet, Facebook gönderisi ve diğer sosyal medya platformlarındaki paylaşımı önceden zamanlayın."],"Marketing Automation":["Pazarlama Otomasyonu"],"Activate Jetpack Search":["Jetpack Araması’nı Etkinleştir"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["Varsayılan WordPress aramasını, Elasticsearch'ün sunduğu daha iyi sonuçlar ve filtreleme özelliğiyle değiştirin."],"Start earning":["Kazanmaya başlayın"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["WordAds, promosyon içeriği görüntüleyerek para kazanmanızı sağlar. Kazanmaya bugün başlayın."],"Spam is automatically blocked from your comments.":["Yorumlarınızdaki istenmeyen içerikler otomatik olarak engellenir."],"Spam Filtering":["İstenmeyen İçerik Filtreleme"],"Browse premium themes":["Premium temalara göz atın"],"Access hundreds of beautifully designed premium themes at no extra cost.":["Hoş tasarımlı binlerce premium temaya ek ücret ödemeden erişin."],"Try a premium theme":["Premium tema deneyin"],"View settings":["Ayarları görüntüle"],"Create a Jetpack account to view your email followers":["E-posta takipçilerinizi görüntülemek için bir Jetpack hesabı oluşturun"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["Sitenizi yorumlara açın ve son çalışmanızla ilgili uyarı almaları için aboneleri davet edin."],"Manage security settings":["Güvenlik ayarlarını yönetin"],"Built-in Performance":["Yerleşik Performans"],"Jetpack is ready for the new WordPress editor":["Jetpack yeni WordPress düzenleyicisi için hazır"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["Bugün, yeni düzenleyici deneyimi için özel olarak oluşturulan, Jetpack'e özel blokların ilk dalgasını tanıtıyoruz: Basit Ödeme düğmesi, Form, Harita ve Markdown."],"Build your Jetpack site with blocks":["Bloklarla Jetpack sitenizi oluşturun"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["Yeni bir düzenleyici mi? Evet! {{a}}Daha fazla bilgi edinin{{/a}}."],"The features you rely on, adapted for the new WordPress editor.":["Yararlandığınız özellikler yeni WordPress düzenleyicisine uyarlandı."],"Take me to the new editor":["Beni yeni düzenleyiciye götür"],"Testing Jetpack Connection":[""],"There was an error testing Jetpack. Error: %(error)s":["Jetpack test edilirken hata oluştu. Hata: %(error)s"],"New in Jetpack!":["Jetpack'te Yenilik!"],"Speed up static file load times":["Statik dosya yükleme sürelerini hızlandırın"],"Speed up image load times":["Görsel yükleme sürelerini hızlandırın"],"Enable site accelerator":["Site hızlandırıcısını etkinleştirin"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["Jetpack'in görsellerinizi optimize etmesine, görsellerinizi ve statik dosyalarınızı (CSS ve JavaScript gibi) küresel sunucu ağımızdan sunmasına izin vererek sayfaları daha hızlı yükleyin."],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["WordPress.com oturum açma ve güvenli yetkilendirme özelliğini etkinleştirerek web sitenizi bir kademe daha güvenli hale getirin. Bu seçeneğin etkinleştirildiği birden fazla sayfanız varsa, aynı bilgileri kullanarak her birine giriş yapabilirsiniz."],"View your site activity":["Site etkinliğinizi görüntüleyin"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["Sitenizde yaptığınız tüm değişikliklerin ve güncellemelerin kronolojik listesini düzenli ve okunaklı şekilde görüntüleyin."],"Manually Verify ":["El ile Doğrula "],"Verify with Google":["Google ile Doğrula"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["Google, sitenizin {{a1}}ele geçirildiğinin{{/a1}} belirtileri veya sitenizin {{a2}}haritalama ya da endeksleme{{/a2}} sorunları da dahil olmak üzere sitenizde gerçekleşen belirli olaylar hakkında size e-posta gönderecek."],"or":["veya"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["{{a}}Google Search Console{{/a}} üzerinden sitenizin trafiğini ve performansını izleyin."],"Your site is verified with Google":["Siteniz Google ile doğrulandı."],"Site failed to verify: %(error)s":["Site doğrulanamadı: %(error)s"],"Verifying...":["Doğrulanıyor..."],"Add faster, more advanced searching to your site with Jetpack Professional.":["Jetpack Profesyonel ile sitenizde yapılan aramaları daha hızlı ve daha gelişmiş hale getirin."],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["WordPress yerleşik aramasını gelişmiş bir arama deneyimi olan Jetpack Araması ile değiştirin"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["Jetpack Araması, WordPress.com bulutunda barındırılan hızlı, ölçeklenebilir, özelleştirilebilir ve ilgi oranı yüksek bir aramayla yerleşik arama işlevinin yerini alıyor. Sonuç: Kullanıcılarınız istedikleri içeriği daha hızlı bulur."],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["Yerleşik WordPress araması çok fazla içerik barındırmayan siteler için mükemmeldir. Ancak siteniz büyüdükçe aramalar yavaşlar ve ilgi oranı daha düşük sonuçları gösterir."],"Jetpack Search supports many customizations.":["Jetpack Araması birçok özelleştirmeyi destekler."],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["Yerleşik arama işlevini {{a}}WordPress.com bulutunda barındırılan{{/a}} hızlı, ölçeklenebilir, özelleştirilebilir ve ilgi oranı yüksek bir aramayla değiştirin."],"Site is verified":["Site doğrulandı"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}Tam olarak istediğiniz gibi görünen ve çalışan güzel bir site oluşturmanız için Jetpack Profesyonel, 200'ün üzerinde premium WordPress temasına sınırsız erişim sağlar.{{/p}}{{p}}Jetpack Profesyonel mükemmel bir tasarım bulmaktan daha fazlasını yapar. Bu ayrıca ihtiyacınız olması durumunda global uzman ekibimizden öncelikli destek alacağınızı bilmenin gönül rahatlığıdır.{{/p}}"],"Spam filtering and priority support.":["İstenmeyen e-posta filtrelemesi ve öncelikli destek."],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["Reklamlar etkinleştirildiğinde Jetpack otomatik olarak sitenize özel bir ads.txt dosyası oluşturur."],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["Jetpack otomatik olarak sitenize özel bir {{link}}ads.txt{{/link}} dosyası oluşturur. Diğer ağlar için ek girişlere ihtiyacınız varsa lütfen bunları aşağıdaki alana her satıra bir tane gelecek şekilde ekleyin."],"Custom ads.txt entries":["Özel ads.txt girişleri"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}Tam olarak istediğiniz gibi görünen ve çalışan güzel bir site oluşturmanız için Jetpack Profesyonel, 200'ün üzerinde premium WordPress temasına sınırsız erişim sağlar.{{/p}}{{p}}Jetpack Profesyonel mükemmel bir tasarım bulmaktan daha fazlasını yapar. Ayrıca Jetpack Profesyonel ile içiniz rahat olur: gerçek zamanlı yedeklemeler, otomatik kötü amaçlı yazılım taramaları ve uluslararası uzman ekibimizin öncelikli desteği, sitenizin her zaman güvende olacağını garanti eder.{{/p}}"],"Introducing Premium Themes":["Premium Temalarla Tanışın"]," Premium Themes":[" Premium Temalar"],"Privacy information":["Gizlilik bilgileri"],"Enable Lazy Loading for images":["Resimler için Geç Yüklemeyi etkinleştirin"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":["Geç yüklenen resimler, sitenizin hızını yükseltir ve daha sorunsuz bir görüntüleme deneyimi sunar. Resimlerin tümü aynı anda değil, ziyaretçileriniz ekranı aşağı kaydırdıkça yüklenir."],"Performance & speed":["Performans ve hız"],"Enable high-speed, ad-free video player":["Yüksek hızlı, reklamsız video oynatıcısını etkinleştirin"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["Yüksek çözünürlüklü video ile yayımladığınız içeriği daha ilgi çekici kılın. Jetpack Video ile medya oynatıcınızı özelleştirebilir ve ziyaretçilerinize yüksek hızlı, reklamsız ve markasız videolar sunabilirsiniz. Videolarınızı WordPress.com sunucularımızda barındırıyor ve barındırma paketinizden alan eksiltmiyoruz!"],"Video":["Video"],"Carousel color scheme":["Carousel renk düzeni"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Exif verileri, izleyicilere bir fotoğrafın odak uzaklığı, diyafram açıklığı ve ISO değeri gibi ek teknik ayrıntılarını gösterir."],"Show photo Exif metadata in carousel (when available)":["Mevcut olduğunda fotoğraf Exif meta verilerini Carousel'de gösterin."],"Display images in a full-screen carousel gallery":["Resimleri tam ekran bir Carousel galerisinde görüntüleyin"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["Gönderilerinizdeki ve sayfalarınızdaki resimler için tam ekran Carousel slayt gösterileri oluşturun. Carousel galerileri mobil desteklidir ve sitenizin ziyaretçilerini fotoğraflarınızla etkileşimde bulunmaları için teşvik eder."],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["WordPress.com araç çubuğu, varsayılan WordPress yönetici araç çubuğunun yerini alır ve WordPress deneyiminizi kolaylaştırır. Tüm sitelerinizi yönetmeniz, WordPress.com profilinizi güncellemeniz, bildirimleri görüntülemeniz ve Okuyucu'da takip ettiğiniz sitelere göz atmanız için tek tıkla erişim sağlar."],"Portfolios shortcode: [portfolio]":["Portföy kısa kodu: [portföy]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["En iyi işlerinizi sitenizde sergilemek için {{portfolioLink}}portföyleri{{/portfolioLink}} kullanın. Temanız Jetpack Portföyleri’ni desteklemiyorsa, sitenizde görüntülemek için basit bir kısa kod kullanabilirsiniz."],"Testimonials shortcode: [testimonials]":["Görüşler kısa kodu: [görüşler]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["Web sitenize {{testimonialLink}}görüşler{{/testimonialLink}} ekleyerek yeni müşterilerin dikkatini çekin. Temanız Jetpack Görüşleri’ni desteklemiyorsa, sitenizde görüntülemek için basit bir kısa kod kullanabilirsiniz."],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["Şu anda arama motorları sitenize erişim sağlayamaz. Sitenizi erişilebilir hale getirmek istiyorsanız, {{a}}Okuma ayarlarınızı{{/a}} kontrol edin ve \"Arama Motoru Görünürlüğü\"nü açın."],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["İyi haber: Jetpack site haritanızı otomatik olarak tüm büyük arama motorlarına dizine eklenmesi için gönderiyor."],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["Site haritaları, Google veya Bing gibi arama motorlarının web sitenizi dizine eklemek için kullandığı dosyalardır. Arama sonuçlarındaki sıralamanızı yükseltmenize yardımcı olabilirler. Bu özelliği etkinleştirdiğinizde, Jetpack sizin için site haritaları oluşturur ve sitenizdeki içerik değiştiğinde bunları otomatik olarak günceller."],"Configure related posts in the Customizer":["Özelleştirici’deki ilgili gönderileri yapılandırın"],"Highlight related content with a heading":["İlgili içeriği bir başlık ile vurgulayın"],"View security scan details":["Güvenlik taraması ayrıntılarını görüntüleyin"],"View backup history":["Yedekleme geçmişini görüntüleyin"],"Show a thumbnail image where available":["Mevcut olduğunda küçük resim göster"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["Belirli Jetpack özelliklerinin verileri ve izleme etkinliğini nasıl kullandıkları hakkında daha fazla bilgi için lütfen {{privacyCenterLink}}Gizlilik Merkezimize{{/privacyCenterLink}} bakın."],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["Üçüncü taraflara ait olanlar dahil diğer izleme araçlarını kullanıyoruz. Bunlar ve nasıl kontrol edilecekleri {{cookiePolicyLink}}hakkında bilgi alın{{/cookiePolicyLink}}."],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["Bu bilgiler, ürünlerimizi geliştirmemize, pazarlamayı sizin için daha alakalı hale getirmemize, WordPress.com deneyiminizi kişiselleştirmemize ve ayrıntılı olarak {{pp}}gizlilik politikamızda{{/pp}} belirttiğimiz şekilde daha fazlasına yardımcı olur."],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["WordPress.com hesabınızda oturum açmış durumdayken hizmetlerini kullanımınız hakkında bilgileri analiz aracımızla paylaşın. {{cookiePolicyLink}}Daha fazla bilgi edinin{{/cookiePolicyLink}}."],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["Bu özellik bir site yöneticisi tarafından yönetiliyor. {{link}}Daha fazla bilgi edinin{{/link}}."],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["Bu özellik bir site yöneticisi tarafından devre dışı bırakıldı. {{link}}Daha fazla bilgi edinin{{/link}}."],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["Bu özellik bir site yöneticisi tarafından etkinleştirildi. {{link}}Daha fazla bilgi edinin{{/link}}."],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["%(moduleName)s bir site yöneticisi tarafından devre dışı bırakıldı. {{link}}Daha fazla bilgi edinin{{/link}}."],"This feature has been disabled by a site administrator.":["Bu özellik bir site yöneticisi tarafından devre dışı bırakıldı."],"%(moduleName)s has been disabled by a site administrator.":["%(moduleName)s bir site yöneticisi tarafından devre dışı bırakıldı."],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["Reklam bileşenini kullanarak ek reklamlar yerleştirebilirsiniz. {{link}}Deneyin!{{/link}}"],"Configure your notification settings":["Bildirim ayarlarınızı yapılandırın"],"Monitor your site's downtime":["Sitenizin kullanım dışı kalmasını izleyin"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["Jetpack’in Arama modülü, WordPress'teki arama özelliği için güçlü bir ikamedir."],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["Sitenizin dosyaları güvenliğinizi ve verilerinizi tehlikeye düşürebilecek yetkisiz veya şüpheli değiştirmelere karşı düzenli olarak taranır."],"Plugin needs updating.":["Eklentinin güncellenmesi gerekiyor.","Eklentilerin güncellenmesi gerekiyor."],"%(number)s":["%(number)s","%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Jetpack’in Eklenti Güncellemeleri hangi eklentilerin otomatik olarak güncelleneceğini seçmenizi sağlar."],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack resimlerinizi optimize eder ve bunları ziyaretçilerinize en yakın sunucu konumundan sunar. Global içerik sağlama ağımızı kullanmak sitenizin yüklenme hızını artıracak."],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":[""],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Jetpack Yedeklemeleri belirli bir andaki yedeklemeyi kolayca geri yüklemenizi veya indirmenizi sağlar."],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet yorumlarınızı ve iletişim formu gönderilerinizi global kötü amaçlı mesaj veritabanımıza göre kontrol eder."],"Privacy Information":["Gizlilik Bilgileri"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["VideoPress, bilgisayarınızdaki videoları, ana bilgisayarınızın sunucusu yerine WordPress.com’da barındırılmak üzere karşıya yüklemenize olanak tanır. Daha sonra bu videoları şirket içinde barındırılan Jetpack sitenize ekleyebilirsiniz. "],"Add the Search (Jetpack) widget to your sidebar":["Arama (Jetpack) bileşenini kenar çubuğunuza ekleme"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["İlgili arama sonuçlarını hızlıca filtreleme ve sıralama olanağıyla ziyaretçilerinizi üstün bir arama deneyimiyle tanıştırın."],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["Mobil cihaz kullanan ziyaretçilere görüntülenecek, hafif ve cep telefonuna uygun bir tema sunar."],"Loads the next posts automatically when the reader approaches the bottom of the page.":["Okuyucu sayfanın alt kısmına ulaştığında sonraki gönderiyi otomatik olarak yükler."],"Allows you to publish new posts by sending an email to a special address.":["Özel bir adrese e-posta göndererek yeni gönderiler yayınlayabilmenizi sağlar."],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["Markdown söz dizimini kullanarak bağlantı, liste ve diğer tarzlarda içerikler oluşturabilmenizi sağlar."],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["İçerik oluşturulurken dil bilgisi, yazım, yanlış kullanılan sözcük ve stil denetimi yapar."],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["WordPress sitenizi çeşitli hizmetlerle doğrulamak için gerekli gizli etiketleri sunar."],"Displays information on your site activity, including visitors and popular posts or pages.":["Sitenizde ziyaretçiler, popüler gönderiler veya sayfalar gibi etkinlikler hakkında bilgi görüntüler."],"Allows you to optimize your site and its content for better results in search engines.":["Sitenizi ve içeriklerini arama motorlarında daha iyi sonuçlar almak için iyileştirebilmenizi sağlar."],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["WordPress sitenizi trafik, ziyaretçiler ve dönüştürme işlemleriyle ilgili bilgi sunan bir platform olan Google Analytics ile tümleştirir."],"Displays high-quality ads on your site that allow you to earn income.":["Sitenizde, kazanç elde etmenizi sağlayan yüksek kaliteli reklamlar görüntüler."],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["Ziyaretçilerinizin içeriklerinizi sosyal medya sitelerinde paylaşabilmesi için sitenize paylaşım düğmeleri ekler."],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["Facebook ve Twitter dâhil sosyal medya sitelerinde en yeni içerikleri otomatik olarak paylaşabilmenizi sağlar."],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["Ziyaretçilerinizin teşekkürlerini veya beğenilerini ifade edebilmeleri için içeriklerinize beğeni düğmeleri ekler."],"Allows registered users to log in to your site with their WordPress.com accounts.":["Kayıtlı kullanıcıların kendi WordPress.com hesaplarıyla sitenizde oturum açabilmesini sağlar."],"Protects your site from traditional and distributed brute force login attacks.":["Sitenizi sıradan ve dağıtılmış deneme yanılma saldırılarına karşı korur."],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["Sitenizi küresel WordPress.com sunucularında yedekleyerek acil durumla karşılaşıldığında veya hata alındığında içeriklerinizi geri yükleyebilmenizi sağlar."],"Removes spam from comments and contact forms.":["Yorum ve iletişim formlarından istenmeyen içerikleri kaldırır."],"We are committed to your privacy and security. ":["Gizliliğiniz ve güvenliğiniz bizim için önemlidir. "],"View all Jetpack plans":["Tüm Jetpack paketlerini görüntüleyin"],"Manage your plan":["Paketinizi yönetme"],"Your Plan":["Paketiniz"],"You’re currently on Jetpack %(plan)s.":["Şu anda Jetpack %(plan)s paketine sahipsiniz."],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["Okuyucuların gönderilerinize veya yorumlarınıza abone olabilmelerini ve yeni içerikler hakkında e-postayla bildirim almalarını sağlar."],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["Standart WordPress yorumlarını, sosyal medyada oturum açma seçenekleri içeren yeni bir yorum sistemiyle değiştirir."],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["Yerleşik WordPress aramasını, gelişmiş bir arama deneyimi olan Jetpack Arama modülüyle değiştirmek için bu seçeneği {{a}}etkinleştirin{{/a}}."],"Add Search (Jetpack) Widget":["Arama (Jetpack) Bileşeni Ekle"],"Jetpack Search is powering search on your site.":["Jetpack Araması, sitenizdeki arama özelliğini güçlendirir."],"Manage your plugins":["Eklentilerinizi yönetin"],"Moderate comments":["Yorumları yönetin"],"Error updating privacy settings. %(error)s":["Gizlilik ayarları güncellenirken hata oluştu. %(error)s"],"Updated privacy settings.":["Gizlilik ayarları güncellendi."],"Updating privacy settings…":["Gizlilik ayarları güncelleniyor…"],"Add Jetpack Search Widget":["Jetpack Arama Bileşeni Ekle"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["Sıralamayı ve filtreleri yapılandırmak için kenar çubuğunuza Jetpack Arama bileşenini ekleyin."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["Tam güvenlik paketi, pazarlama ve gelir otomasyon araçları, sınırsız video barındırma, sınırsız temalar, gelişmiş arama ve öncelikli destek."],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["Tam güvenlik paketi, pazarlama ve gelir otomasyon araçları, sınırsız video barındırma ve öncelikli destek."],"Daily backups, spam filtering, and priority support.":["Günlük yedeklemeler, istenmeyen e-posta filtreleme ve öncelikli destek."],"Always-on Security":["Her zaman etkin Güvenlik"],"Activate video hosting":[""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Sınırsız alan, tek tıkla geri yükleme, otomatik güvenlik taramaları ve öncelikli destek ile sitenizdeki verilerin tamamı gerçek zamanlı olarak yedeklenir."],"Design the perfect website":["Mükemmel web sitesini tasarlayın"],"Set up Jetpack":["Jetpack'i Kur"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["Sınırsız alan, tek tıkla geri yükleme, otomatik güvenlik taramaları ile sitenizdeki verilerin tamamı gerçek zamanlı olarak yedeklenir."],"Jetpack Search":["Jetpack Araması"],"Jetpack version %(version)s":["Jetpack versiyonu %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["Siteniz gerçek zamanlı olarak yedekleniyor ve güvenlik tehditlerine karşı düzenli olarak taranıyor."],"Daily backup of all your site data with unlimited space and one-click restores":["Sınırsız alan ve tek tıkla geri yükleme olanağı ile sitenizin tamamı günlük olarak yedeklenir."],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["Sınırsız alan, tek tıkla geri yükleme, otomatik güvenlik taramaları ve tek tıkla tehdit çözümleme ile sitenizdeki verilerin tamamı gerçek zamanlı olarak yedeklenir."],"View your security activity":["Güvenlik etkinliğinizi görüntüleyin"]," (powered by VaultPress).":[" (VaultPress tarafından desteklenir)."],"Customize Search Widget":["Arama Bileşenini Kişiselleştir"],"Please correct the issue below and try again.":["Lütfen aşağıdaki sorunu çözüp tekrar deneyin.","Lütfen aşağıda listelenen sorunları çözüp tekrar deneyin."],"We are making sure your site stays free of security threats. You will be notified if we find one.":["Sitenizin güvenlik tehditlerine karşı güvende kalmasını sağlıyoruz. Bir tane bulursak bilgilendirileceksiniz."],"Your site is being backed up in real-time.":["Siteniz gerçek zamanlı olarak yedekleniyor."],"Jetpack version":["Jetpack versiyonu"],"{{a}}View your site's activity{{/a}} in a single feed.":["{{a}}Sitenizin aktivitesini{{/a}} tek bir beslemede görün."],"Activity":["Etkinlik"],"Confirm each new phrase you add by pressing enter.":["Enter tuşuna basarak eklediğiniz her yeni tümceciği onaylayın."],"{{a}}View details{{/a}}":["{{a}}Detayları görüntüle{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["Jetpack Profesyonel planını tercih ettiğiniz için teşekkür ederiz. Jetpack artık içeriklerinizi yedekleme, güvenlik tehditlerini arama ve premium temalara erişim avantajları sunuyor."],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["Jetpack Profesyonel ile profesyonelce tasarlanmış 300’den fazla WordPress teması ve 200’den fazla premium tema arasından birini seçerek kusursuz siteler oluşturabilirsiniz. Birçok bileşenle içeriğinizi özelleştirebilir ve gönderileriniz ile sayfalarınıza sınırsız sayıda video (reklamsız, filigransız) ekleyebilirsiniz."],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["İçerik paylaşımı ve zamanlama, SEO araçları ve yerleşik abonelik seçenekleri sayesinde, Profesyonel paket ile takipçi sayınızı artırmak oldukça kolaydır. Basit Ödeme Düğmesi ve satır içi reklamlarla sitenizden para kazanabilir, Google Analytics ile entegre ederek emeklerinizin karşılığını izleyebilirsiniz."],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Jetpack Profesyonel, sıkı çalışmanızın güvenliğini sağlamak için isteğe bağlı yedeklemeler, kötü amaçlı yazılım taramaları, tek tıkla kurtarma ve sorun giderme gibi ihtiyaç duyduğunuz tüm özellikleri sunar. Siteniz istenmeyen e-postalar, zararlı kodlar ve deneme yanılmayla oturum açma denemeleri gibi tehditlerden korunur."],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["Yeni planınızla sunulan avantajları görmek için Jetpack Profesyonel’i keşfetmeye başlayın."],"Install premium themes":["Premium temaları yükleyin,"],"Review SEO features":["SEO özelliklerini gözden geçirin"],"Welcome Professional":["Profesyonel plana hoş geldiniz!"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["Jetpack Premium planını tercih ettiğiniz için teşekkür ederiz. Jetpack artık sitenizi yedekleme, güvenlik tehditlerini arama ve site trafiğini paraya dönüştürme avantajları sunuyor."],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["Jetpack Premium ile, dilediğiniz amaca hizmet eden kusursuz siteler oluşturabilirsiniz. 100’den fazla ücretsiz temayla sitenizin görünümünü özelleştirin veya tümü reklamsız ve filigransız olarak barındırılan sınırsız HD video ile içeriklerinizi geliştirin."],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["Jetpack’in güçlü paylaşma araçlarını kullanarak yeni gönderilerinizi sosyal medyada paylaşabilir veya içeriğinizi seçtiğiniz bir tarih veya saatte yeniden paylaşılacak şekilde zamanlayabilirsiniz. Ödeme düğmelerini ve reklamları kullanarak, takipçi sayınızı artırmakla birlikte işletmenizi de geliştirebilirsiniz."],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["Yeni planınızla sunulan avantajları görmek için Jetpack Premium’u keşfetmeye başlayın."],"Monetize your site with ads":["Reklamlarla sitenizden para kazanın"],"Welcome Premium":["Premium planına hoş geldiniz"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["Jetpack Kişisel planını tercih ettiğiniz için teşekkür ederiz. Jetpack artık sitenizi yedekleme ve güvenlik tehditlerini arama avantajları sunuyor."],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["Jetpack Kişisel ile 100’den fazla ücretsiz ve profesyonel olarak tasarlanmış WordPress temasına erişebilirsiniz. Sitenize en uygun temayı seçin ve renkler ile resimleri özelleştirin, yeni bileşenler ekleyin."],"Got it":[""],"Welcome personal":["Kişisel plana hoş geldiniz"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["Sitenizi bağlayarak {{tosLink}}hizmet koşullarımızı{{/tosLink}} ve WordPress.com ile {{shareDetailsLink}}bilgi paylaşımını{{/shareDetailsLink}} kabul etmiş olursunuz."],"Jetpack Stats People":["Jetpack Kişi İstatistikleri"],"Hello there! Your stats have been activated.":["Merhaba! İstatistikleriniz etkinleştirildi."],"Just give us a little time to collect data so we can display it for you here.":["Verilerinizi görüntüleyebilmek için topluyoruz, lütfen kısa bir süre bekleyin."],"Okay, got it!":["Tamam, anladım!"],"Display ads below posts on":["Şuradaki gönderilerin altında reklam görüntüle:"],"Additional ad placements":["Ek reklam yerleştirmeleri"],"Top of each page":["Her sayfanın başı"],"Second ad below post":["Gönderilerin altında ikinci reklam"],"Archives":["Arşivler"],"Explore Professional":["Profesyonel Sürümü Keşfedin"],"Compare All Plans":["Tüm Planları Karşılaştırın"],"Person with laptop":["Dizüstü bilgisayara sahip kişi"],"Your Jetpack site is ready to go!":["Jetpack siteniz hazır!"],"Stars":["Yıldızlar"],"Jupiter":["Jüpiter"],"Welcome to Jetpack Personal":["Jetpack Kişisel dünyasına hoş geldiniz"],"Welcome to Jetpack Premium":["Jetpack Premium dünyasına hoş geldiniz"],"Welcome to Jetpack Professional":["Jetpack Profesyonel dünyasına hoş geldiniz"],"Schedule posts":[""],"Activate Publicize":["Duyuru’yu Etkinleştirme"],"Your site is backed up.":["Siteniz yedeklendi."],"Image Performance":["Görüntü Performansı"],"Get WordPress Apps for every device":["Her cihaz için WordPress Uygulamalarını edinin."],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["Tüm sitelerinizi tek bir panodan yönetin: Dünyanın her yerinden içerik yayımlayın, istatistikleri izleyin, yorumları yönetin ve çok daha fazlasını yapın."],"I already use this app.":["Bu uygulamayı zaten kullanıyorum."],"Create address":["Adres oluştur"],"Priority support":["Öncelik desteği"],"Add sharing buttons to your posts":["Yazılarınıza paylaşma düğmeleri ekleyin"],"Automatically share your posts to social networks":["YAzılarınızı otomatik olarak sosyal ağlarda paylaşın"],"Updating settings…":["Ayarlar güncelleniyor…"],"Updating Post by Email address…":["Gönderi E-posta adresi ile güncelleniyor..."],"Your paid plan gives you access to prioritized Jetpack support.":["Ücretli paketiniz size, öncelik verilmiş Jetpack destek erişimi sağlıyor."],"You have paid for backups but they're not yet active.":["Yedeklemeler için ödeme yaptınız ancak henüz etkin değiller."],"You have paid for backups and security scanning but they’re not yet active.":["Yedekleme ve güvenlik taraması için ödeme yaptınız ancak henüz etkin değiller."],"Click \"Set Up\" to finish installation.":["Yüklemeyi tamamlamak için \"Ayarla\" düğmesine tıklayın."],"Checking site status…":["Site durumu kontrol ediliyor…"],"Pages":["Sayfalar"],"We're here to help":["Size yardım etmek için buradayız"],"Jetpack comes with free, basic support for all users.":["Jetpack tüm kullanıcılar için ücretsiz, temel bir destek ile gelir."],"Ask a question":["Soru sorun"],"Search our support site":["Destek sitemizde arama yapın"],"Get a faster resolution to your support questions.":["Destek ile ilgili sorularınıza daha hızlı çözüm alın."],"Host fast, high-quality, ad-free video.":["Hızlı, yüksek kaliteli, reklamsız video barındırın."],"Generate income with high-quality ads.":["Yüksek kaliteli reklamlarla gelir elde edin."],"Real-time site backups and automatic threat resolution.":["Gerçek zamanlı site yedeklemeleri ve otomatik tehdit çözümleme."],"Protect against data loss, malware, and malicious attacks.":["Veri kaybına, zararlı yazılımlara ve kötü amaçlı saldırılara karşı korunun."],"Integrate easily with Google Analytics.":["Google Analytics ile kolayca entegre edin."],"Help your content get found and shared with SEO tools.":["İçeriğinizin SEO araçlarıyla bulunmasına ve paylaşılmasına yardımcı olun."],"Protect your site from spam.":["Sitenizi istenmeyen içeriklerden koruyun."],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["Bu site WordPress.com'a bağlı değil. Lütfen bağlaması için site yöneticisine bildirin."],"Spam filtering":["İstenmeyen içerik filtreleme"],"Daily, automated malware scanning":["Günlük, otomatik zararlı yazılım taraması"],"Daily, automated backups (unlimited storage)":["Günlük, otomatik yedeklemeler (sınırsız depolama alanı)"],"Daily, automated malware scanning with automated resolution":["Otomatik çözümleme ile günlük, otomatik zararlı yazılım tarama"],"Unlimited, high-speed video hosting":[""],"SEO preview tools":["SEO ön izleme araçları"],"Site stats, related content, and sharing tools":["Site istatistikleri, ilgili içerik ve paylaşım araçları"],"Brute force attack protection and downtime monitoring":["Deneme yanılma saldırılarına karşı koruma ve çalışma süresi izleme"],"Unlimited, high-speed image hosting":["Sınırsız, yüksek hızlı görsel barındırma"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["%(siteName)s sitesinin WordPress.com ile olan bağlantısını kestiğinizde artık aşağıdakilere erişiminiz olmaz:"],"Read more about Jetpack benefits":["Jetpack avantajları hakkında daha fazla bilgi edinin"],"An Automattic Airline":["Bir Automattic Hava Yolu"],"Manage site connection":["Site bağlantısını yönet"],"Connect your account to WordPress.com to view more stats":["Daha fazla istatistik görüntülemek için hesabınızı WordPress.com'a bağlayın"],"Theme enhancements":["Tema güçlendirmeleri"],"Load more posts using the default theme behavior":["Varsayılan tema davranışını kullanarak daha fazla gönderi yükleyin"],"Load more posts in page with a button":["Tek bir düğmeyle sayfaya daha fazla gönderi yükleyin"],"Load more posts as the reader scrolls down":["Okuyucu sayfayı aşağı kaydırırken daha fazla gönderi yükleyin"],"Theme support required.":["Tema desteği gereklidir."],"Learn more about adding support for Infinite Scroll to your theme.":["Temanıza Sınırsız Kaydırma desteği ekleme hakkında daha fazla bilgi edinin."],"Use excerpts instead of full posts on front page and archive pages":["Ana sayfa ve arşiv sayfalarında tam gönderiler yerine özetler gösterin"],"Show featured images":["Öne çıkan görselleri göster"],"Enable the WordPress.com toolbar":["WordPress.com araç çubuğunu etkinleştirin"],"Writing tools available to you will be shown here when an administrator enables them.":["Yönetici etkinleştirdiğinde kullanabileceğiniz yazma araçları burada gösterilecektir."],"Portfolios":["Portföyler"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["Unutmayın; sitenizin arama motorları tarafından indekslenmesi için {{b}}sitenizi bu hizmetlerle doğrulamanız gerekli değildir{{/b}}. Bu gelişmiş arama motoru araçlarını kullanmak ve sitenizi bir hizmetle doğrulamak için aşağıdaki HTML Etiket kodunu yapıştırın. Sorunla karşılaşırsanız {{support}}ayrıntılı yönergeleri{{/support}} okuyun. Desteklenen doğrulama hizmetleri: {{google}}Google Arama Konsolu{{/google}}, {{bing}}Bing Webmaster Merkezi{{/bing}}, {{pinterest}}Pinterest Site Doğrulama{{/pinterest}} ve {{yandex}}Yandex.Webmaster{{/yandex}}."],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["XML site haritalarını oluştur"],"Collecting valuable traffic stats and insights":["Değerli trafik istatistikleri ve bilgilerini toplama"],"The image helps collect stats, but should work when hidden.":["Görsel, istatistiklerin toplanmasına yardımcı olur ama gizlenmiş olsa bile çalışması gerekir."],"Count logged in page views from":["Oturum açmış şu grubun sayfa görüntülemelerini sayın:"],"Allow stats reports to be viewed by":["Şu grubun istatistik raporlarını görüntülemesine izin verin:"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["Daha gelişmiş bir denetim istiyorsanız ayarları değiştirebilirsiniz. {{a}}Sitenizin SEO'sunu optimize etmek{{/a}} için yapabilecekleriniz hakkında daha fazla bilgi edinin."],"Configure your SEO settings":["SEO ayarlarınızı yapılandırın"],"In \"Upgrade\"":["\"Yükseltme\" içinde"],"Configure your Google Analytics settings":["Google Analytics ayarlarınızı yapılandırın"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["Reklamları ana sayfanızdaki ilk makalede veya her sayfa ve gönderinin sonunda görüntüleyin. Gelirlerinizi artırmak için ek reklamları sitenizin üst kısmına veya herhangi bir bileşen alanına yerleştirin."],"Enable ads and display an ad below each post":["Reklamları etkinleştirin ve her yazı altında bir reklam görüntüleyin"],"Configure your sharing buttons":["Paylaşım düğmelerinizi yapılandırın"],"Connect your social media accounts":["Sosyal medya hesaplarınızı bağlayın"],"Match accounts using email addresses":["E-posta adreslerini kullanarak hesapları eşleştir"],"Require accounts to use WordPress.com Two-Step Authentication":["Hesapların WordPress.com iki adımlı kimlik doğrulama kullanmasını zorunlu tut"],"Add to whitelist":["Güvenilir adresler listesine ekle"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["Jetpack tarafından daima engellenmelerini önleyen bir IP adresini veya bir dizi adresi güvenilir adresler listesine ekleyebilirsiniz. IPv4 ve IPv6 kabul edilebilir niteliktedir. Bir aralık belirtmek için aralarına tire ekleyerek düşük ve yüksek değerleri girin. Örnek: 12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["Siteniz yedeklendi ve tehlikelere karşı korunuyor."],"Checking your spam protection…":["İstenmeyen içerik korumanız kontrol ediliyor..."],"Fetching key…":["Anahtar alınıyor…"],"Your site needs an Antispam key.":["Siteniz bir Antispam anahtarına ihtiyaç duyuyor."],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["Antispam API anahtarınızla ilgili bir sorun var. {{a}}Daha fazla bilgi edinin{{/a}}."],"Your site is not protected from spam.":["Siteniz istenmeyen içeriğe karşı korunmuyor."],"Your Antispam key is valid.":["Antispam anahtarınız geçerli."],"Your site is protected from spam.":["Siteniz istenmeyen içeriğe karşı korunuyor."],"Checking key…":["Anahtar kontrol ediliyor…"],"Your API key":["API anahtarınız"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["Bir API anahtarınız yoksa {{a}}API anahtarınızı buradan alabilirsiniz{{/a}}, ardından anahtar edinme süreci boyunca yönlendirileceksiniz."],"No search results found for %(term)s":["%(term)s için hiçbir sonuç bulunamadı"],"Enter a search term to find settings or close search.":["Ayarları bulmak için bir arama terimi girin veya aramayı kapatın."],"Connections":["Bağlantılar"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["Siteniz Geliştirme Modu’nda, bu nedenle WordPress.com’a bağlanamaz."],"Your site is connected to WordPress.com.":["Siteniz WordPress.com'a bağlı."],"You are the Jetpack owner.":["Jetpack sahibi sizsiniz."],"Connected as {{span}}%(username)s{{/span}}":["{{span}}%(username)s{{/span}} olarak bağlanıldı"],"View your Email Followers":["E-posta Takipçilerinizi görüntüleyin"],"Color scheme":["Renk düzeni"],"Enable Markdown use for comments.":["Yorumlar için Markdown’ı etkinleştirin."],"Updated settings.":["Ayarlar güncellendi."],"Error updating settings. %(error)s":["Ayarlar güncellenirken hata oluştu. %(error)"],"Regenerated Post by Email address.":["E-posta adresi ile yazı yeniden oluşturuldu."],"Error regenerating Post by Email address. %(error)s":["E-posta adresi ile yazı yeniden oluşturulurken hata oluştu. %(error)s"],"Updated settings. Refreshing page…":["Ayarlar güncellendi. Sayfa yenileniyor…"],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["Şu anda {{a}}Geliştirme Modu{{/a}}‘nda (bazı özellikler devre dışı) çünkü: {{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}jetpack_development_mode filtresi etkin{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}JETPACK_DEV_DEBUG sabiti tanımlı{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}Sitenizin URL’sinde bir nokta eksik (ör. http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics, {{a}}yerleşik istatistiklerimizi{{/a}} trafiğinize ilişkin farklı görüşlerle tamamlayan ücretsiz bir hizmettir. WordPress.com istatistikleri ve Google Analytics, sitenizdeki etkinlikleri tanımlamak ve izlemek için farklı yöntemler kullanır. Bu nedenle, normal olarak toplam ziyaret, görüntüleme vb. sayılarını biraz farklı şekilde gösterir."],"Google Analytics":["Google Analytics"],"Configure Google Analytics":["Google Analytics Ayarları"],"Activate Google Analytics":["Google Analytics Etkinleştir"],"Download the free apps":["Ücretsiz uygulamaları indir"],"Upgrade Focus: VideoPress For Weddings":["Yükseltme Odağı: Düğünler İçin VideoPress"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}Şimdi Özelleştiricideki ilgili gönderileri yapılandırabilirsiniz. {{ExternalLink}}Deneyin!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["Varsayılan reklamlar her sayfanın, gönderinin sonunda veya ön sayfanızdaki ilk makalenin sonunda gösterilir. Bununla birlikte reklamları sitenizin üstüne ve herhangi bir bileşen alanına ekleyerek gelirinizi artırabilirsiniz!"],"Display an ad unit at the top of your site.":["Sitenizin üst kısmında bir reklam birimi gösterin."],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["Reklamları etkinleştirerek Otomatik Reklam {{link}}Hizmet Şartlarını{{/link}} kabul etmiş olursunuz."],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["Sunucunuz yanlış yapılandırılmış, bu nedenle Jetpack Protect sitenizi etkin bir şekilde koruyamıyor."],"In \"Mobile\"":["\"Mobil\" içinde"],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["WordPress.com'da İzleme bildirim ayarlarınızı yapılandırın"],"View your earnings":["Kazancınızı görüntüleyin"],"Configure site SEO":[""],"Activate SEO tools":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["Başlamak için gönderi düzenleyicinizde Medya Ekle’ye tıklayıp karşıya bir video yükleyin; gerisini biz hallederiz!"],"Video Hosting":["Video Barındırma"],"SEO Tools":["SEO Araçları"],"Advanced SEO tools to help your site get found when people search for relevant content.":["İlgili içeriği arayan kişilerin sitenizi bulmasına yardımcı olacak gelişmiş SEO araçları."],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["Sitenize reklam ve marka içermeyen videolar yüklemenin en kolay yolu. Video oynatma ve video paylaşımları ile ilgili istatistikler alırsınız. Ayrıca oynatıcı hafif ve hızlıdır."],"You are running Jetpack on a staging server.":["Jetpack’i prova sunucusu üzerinde çalıştırıyorsunuz."],"More Info":["Daha Fazla Bilgi"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}Paylaşım Modülü Ayarları’ndan Beğeni görünürlüğünü yönetin{{/a}}"],"Your current IP: %(ip)s":["Geçerli IP adresiniz: %(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["Bu sekmede kaydedilmemiş ayarlar var ve ayrılmanız durumunda bu ayarlar kaybolacak. Devam etmek istiyor musunuz?"],"This will reset all Jetpack options, are you sure?":["Bunu yaptığınızda tüm Jetpack seçenekleri sıfırlanacak; emin misiniz?"],"Search for a Jetpack feature.":["Jetpack özelliği arayın."],"Configure your Security Scans":["Güvenlik Taramalarınızı Yapılandırın"],"Subscriber":["Abone"],"Big iPhone/iPad Update Now Available":["Büyük iPhone/iPad Güncellemesi İndirilmeye Hazır"],"The WordPress for Android App Gets a Big Facelift":["Android için WordPress Uygulaması Büyük Bir Görsel Gelişim Yaşadı"],"WordPress.com Likes are:":["WordPress.com Beğenileri:"],"Comments headline":["Yorumlar başlığı"],"A few catchy words to motivate your readers to comment.":["Akılda kalıcı birkaç sözcükle okuyucularınızı yorum yapmaya teşvik edin."],"Show a \"follow blog\" option in the comment form":["Yorum formunda “blogu takip et” seçeneğini göster"],"Show a \"follow comments\" option in the comment form":["Yorum formunda “yorumları takip et” seçeneğini göster"],"Put a chart showing 48 hours of views in the admin bar":["Yönetim çubuğuna 48 saatteki görüntülemeleri gösteren bir grafik yerleştirin"],"Hide the stats smiley face image":["İstatistik yüz ifadesi görselini gizleyin"],"Whitelisted IP addresses":["Güvenilir adresler listesindeki IP adresleri"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["Mobil temanın alt bilgi kısmında WordPress mobil uygulamaları için bir tanıtım gösterin"],"Copied!":["Kopyalandı!"],"Highlight and copy the following text to your clipboard:":["Aşağıdaki metni vurgulayıp panonuza kopyalayın:"],"Regenerate address":["Adresi yeniden oluşturun"],"Automatically proofread content when: ":["Şu durumda içerikte otomatik olarak düzeltme okuması yap: "],"A post or page is first published":["Bir yazı ya da sayfa ilk kez yayımlandı"],"A post or page is updated":["Bir yazı ya da sayfa güncellendi"],"Automatic Language Detection":["Otomatik Dil Algılama"],"The proofreader supports English, French, German, Portuguese and Spanish.":["Düzeltme okuyucusu İngilizce, Fransızca, Almanca, Portekizce ve İspanyolca dillerini destekler."],"Enable proofreading for the following grammar and style rules: ":["Şu dil bilgisi ve stil kuralları için düzeltme okumasını etkinleştirin: "],"Add a phrase":["Tümcecik ekle"],"Cheatin' uh?":["Hile mi yapıyorsunuz?"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}Bu {{a}}2 soruluk anketi{{/a}} yanıtlayarak Jetpack bağlantısını neden tamamlamadığınızı açıklayabilir misiniz?{{/p}}{{p}}Jetpack bağlantısı, ücretsiz güvenlik ve trafik özelliklerimizin çalışabilmesi için gereklidir.{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["{{s}}Jetpack %(jetpack_version)s{{/s}} dünyasına hoş geldiniz!"],"Your Jetpack is already connected.":["Jetpack'iniz zaten bağlı."],"You're fueled up and ready to go, Jetpack is now active.":["Her şey tamam, harekete hazırsınız. Jetpack artık etkin."],"You're fueled up and ready to go.":["Her şey tamam, harekete hazırsınız."],"You are currently running a development version of Jetpack.":["Şu anda Jetpack’in geliştirme sürümünü çalıştırıyorsunuz."],"Submit Beta feedback":["Beta geri bildirimi gönder"],"What would you like to see on your Jetpack Dashboard?":["Jetpack Panonuzda neler görmek istersiniz?"],"Let us know!":["Bize haber verin!"],"Saving…":["Kaydediliyor…"],"Save Settings":["Ayarları Kaydet"],"Jetpack Stats Icon":["Jetpack İstatistikleri Simgesi"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["Ayrıntılı istatistikler, beğeniler, takipçiler, aboneler ve daha fazlasını görmek için {{a}}Site İstatistiklerini Etkinleştirin{{/a}}! {{a1}}Daha Fazla Bilgi Edinin{{/a1}}"],"Activate Site Stats":["Site İstatistiklerini Etkinleştir"],"Security Scanning":["Güvenlik Taraması"],"Site Backups":["Site Yedeklemeleri"],"Upgrade":["Yükselt"],"ACTIVE":["ETKİN"],"Your site is on Development Mode":["Siteniz Geliştirme Modu’nda"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["Bağlandıktan sonra ücretli sürüme yükseltme yaparak birinci sınıf güvenlik, istenmeyen posta koruması araçları ve öncelikli destek elde edebilirsiniz."],"View your spam stats":["İstenmeyen posta istatistiklerinizi görüntüleyin"],"View your security dashboard":["Güvenlik panonuzu görüntüleyin"],"The site is in Development Mode, so you can not connect to WordPress.com.":["Site, Geliştirme Modu’nda, bu nedenle WordPress.com’a bağlanamazsınız."],"Link your account to WordPress.com to get the most out of Jetpack.":["Jetpack’ten maksimum verim alabilmek için hesabınızı WordPress.com’a bağlayın."],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["Güvenlik tehditlerinin otomatik ve kapsamlı olarak taranması için lütfen VaultPress’i {{a}}yükleyip etkinleştirin{{/a}}."],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["Güvenlik tehditlerinin otomatik ve kapsamlı olarak taranması için lütfen {{a}}hesabınızı yükseltin{{/a}}."],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack etkin olarak kötü amaçlı oturum açma denemelerini engelliyor. Yakında burada veriler görüntülenecek!"],"Total malicious attacks blocked on your site.":["Kötü amaçlı saldırı sitenizde engellendi."],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["Sitenizi kötü amaçlı oturum açma denemelerine karşı korumak için {{a}}Protect’i etkinleştirin{{/a}}."],"All plugins are up-to-date. Awesome work!":["Tüm eklentiler güncel. Harika bir iş!"],"Jetpack is improving and optimizing your image speed.":["Jetpack görüntü hızınızı iyileştirip optimize ediyor."],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack sitenizi izliyor. Sitenizin kullanım dışı olduğunu düşünürsek bir e-posta alırsınız."],"Security":["Güvenlik"],"Performance":["Performans"],"Backups":["Yedeklemeler"],"{{a}}View backup details{{/a}}.":["{{a}}Yedekleme ayrıntılarını görüntüleyin{{/a}}."],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["Tüm sitenizi otomatik olarak yedeklemek için lütfen VaultPress’i {{a}}yükleyip etkinleştirin{{/a}}."],"Unavailable in Dev Mode.":["Geliştirme Modu’nda kullanılamaz."],"Spam Protection":["Spam Koruması"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["Son model istenmeyen posta savunması için lütfen {{a}}Akismet’i yükleyin{{/a}}."],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["Son model istenmeyen posta savunması için lütfen {{a}}Akismet’i etkinleştirin{{/a}}."],"Invalid key":["Geçersiz anahtar"],"Unavailable in Dev Mode":["Geliştirme Modu’nda kullanılamaz"],"Activating recommended features…":["Önerilen özellikler etkinleştiriliyor…"],"Recommended features active.":["Önerilen özellikler etkin."],"Recommended features failed to activate. %(error)s":["Önerilen özellikler etkinleştirilemedi. %(error)s"],"Activating %(slug)s…":["%(slug)s etkinleştiriliyor…"],"%(slug)s has been activated.":["%(slug)s etkinleştirildi."],"%(slug)s failed to activate. %(error)s":["%(slug)s etkinleştirilemedi. %(error)s"],"Deactivating %(slug)s…":["%(slug)s devre dışı bırakılıyor…"],"%(slug)s has been deactivated.":["%(slug)s devre dışı bırakıldı."],"%(slug)s failed to deactivate. %(error)s":["%(slug)s devre dışı bırakılamadı. %(error)s"],"Updating %(slug)s settings…":["%(slug)s ayarları güncelleniyor…"],"Updated %(slug)s settings.":["%(slug)s ayarları güncellendi."],"Error updating %(slug)s settings. %(error)s":["%(slug)s ayarları güncellenirken hata oluştu. %(error)s"],"Updating %(slug)s address…":["%(slug)s adresi güncelleniyor…"],"Regenerated %(slug)s address .":["%(slug)s adresi yeniden oluşturuldu."],"Error regenerating %(slug)s address. %(error)s":["%(slug) adresi yeniden oluşturulurken hata oluştu. %(error)s"],"Resetting Jetpack options…":["Jetpack seçenekleri sıfırlanıyor…"],"Options reset.":["Seçenekler sıfırlandı."],"Options failed to reset.":["Seçenekler sıfırlanamadı."],"There was an error disconnecting Jetpack. Error: %(error)s":["Jetpack bağlantısı kesilirken bir hata oluştu. Hata: %(error)s"],"Unlinking from WordPress.com":["WordPress.com bağlantısı kaldırılıyor"],"Unlinked from WordPress.com.":["WordPress.com bağlantısı kaldırıldı."],"Error unlinking from WordPress.com. %(error)s":["WordPress.com bağlantısı kaldırılırken hata oluştu. %(error)s"],"At A Glance":["Bir Bakışta"],"Clichés":["Klişeler"],"Dashboard":["Pano"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["Bunun nedenini bize söyleyebilir misiniz? Sadece {{a}}iki basit soruyu yanıtlamanız{{/a}} Jetpack'i daha iyi hale getirmemize yardımcı olacak."],"Automattic's Privacy Policy":["Automattic'in Gizlilik İlkesi"],"WordPress.com Terms of Service":["WordPress.com Hizmet Koşulları"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["Görsellerinizin performans ve hızını artırmak için {{a}}etkinleştirin{{/a}}."],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}Otomatik eklenti güncellemelerini açın{{/a}}"],"Plugin Updates":["Eklenti Güncellemeleri"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["Tüm sitenizi otomatik olarak yedeklemek için lütfen {{a}}hesabınızı yükseltin!{{/a}}."],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["Hata! Akismet anahtarınız eksik veya geçersiz. {{akismetSettings}}Düzeltmek için Akismet ayarlarına gidin{{/akismetSettings}}."],"No threats found, you're good to go!":["Tehdit bulunmadı, çekinmeden devam edin!"],"{{a}}Contact Support{{/a}}":["{{a}}Destek Birimine Başvurun{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}Ayrıntıları VaultPress.com’da görüntüleyin{{/a}}"],"Uh oh, %(number)s threat found.":["Eyvah, %(number)s tehdit bulundu.","Eyvah, %(number)s tehdit bulundu."],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["Siteniz çökerse bildirimler almak için {{a}}Monitor’ı etkinleştirin{{/a}}."],"Loading…":["Yükleniyor…"],"Downtime monitoring":["Kesinti izleme"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}WordPress.com'da daha fazla istatistik görüntüle {{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}Detaylı istatistikleri görüntüle{{/button}}"],"All-time comments":["Tüm zamanlarda toplam yorum sayısı"],"All-time views":["Tüm zamanlarda toplam görüntüleme sayısı"],"%(number)s View":["%(number)s Görüntüleme","%(number)s Görüntüleme"],"Best overall day":["Toplamda en iyi gün"],"Views today":["Bugünkü görüntüleme sayısı"],"Months":["Ay"],"Weeks":["Hafta"],"Days":["Gün"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["İstatistikler yüklenirken bir sorun yaşandı. Lütfen daha sonra tekrar deneyin veya {{a}}istatistiklerinizi şimdi WordPress.com’da görüntüleyin{{/a}}"],"Click to view detailed stats.":["Ayrıntılı istatistikleri görüntülemek için tıklayın."],"Views: %(numberOfViews)s":["Görüntülemeler: %(numberOfViews)s"],"Week of %(date)s":["%(date)s haftası"],"Site Security":["Site Güvenliği"],"Activate recommended features":["Önerilen özellikleri etkinleştir"],"Link to WordPress.com":["WordPress.com'a bağlan"],"Unlink me from WordPress.com":["WordPress.com bağlantımı kaldır"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["Jetpack'inize bağlanırken bir sorun oluştu. Lütfen \"WordPress.com'a bağlan\" seçeneğine yeniden tıklayın."],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["Jetpack'e bağlanırken bir sorun yaşadık. Jetpack eklentisini devre dışı bırakıp yeniden etkinleştirin, ardından tekrar bağlanın."],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["Jetpack'i yetkilendirirken WordPress blogunuzda oturum açmış olmanız gerekir."],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}Jetpack'inizde bir hata var.{{/s}} Bu rahatsızlıktan dolayı özür dileriz. Lütfen daha sonra yeniden deneyin. Sorun hâlâ devam ediyorsa lütfen şu mesajla desteğe başvurun: %(error_key)s"],"Disconnecting Jetpack":["Jetpack Bağlantısı Kesiliyor"],"Learn more":["Daha Fazla Bilgi"],"Posts":["Yazılar"],"Front page":["Ön sayfa"],"Upload videos":[""],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["Yazılardan sonra ilgili içeriği göster"],"Related":["İlgili"],"Save":["Kaydet"],"Email Address":["E-posta Adresi"],"Media":["Ortam"],"Themes":["Temalar"],"Site Stats":["Site İstatistikleri"],"Sharing":["Paylaşma"],"Testimonials":["Görüşler"],"Cancel":["Vazgeç"],"Comments":["Yorumlar"],"Ignored Phrases":["Göz ardı edilen cümleler"],"Use automatically detected language to proofread posts and pages":["Gönderilerde ve sayfalarda düzeltme okuması yapmak için otomatik olarak algılanan dili kullan"],"Redundant Phrases":["Ağdalı cümleler"],"Phrases to Avoid":["Kaçınılacak cümleler"],"Passive Voice":["Pasif ses"],"Jargon":["Jargon"],"Hidden Verbs":["Gizli fiiller"],"Double Negatives":["Çifte negatifler"],"Diacritical Marks":["Belirleyici işaretler"],"Complex Phrases":["Karmaşık cümleler"],"Bias Language":["Önyargılı dil"],"English Options":["İngilizce ayarlar"],"Proofreading":["Düzeltme Okuması"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack, WordPress.com ile iletişim kuramadı: %(error_key)s. Bu genellikle, web sunucunuzda bir şeylerin yanlış yapılandırıldığı anlamına gelir."],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com şu anda sorun yaşıyor ve Jetpack'inizi destekleyemiyor. Lütfen daha sonra tekrar deneyin."],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}Jetpack'inizde bir hata var.{{/s}} Bu site ile WordPress.com arasında bağlantı kurmak mümkün değil. Bu genellikle, sitenizin herkesin erişimine açık olmadığı anlamına gelir (localhost)."],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["Jetpack'in kullanılabilmesi için web sitenizin herkesin erişimine açık olması gerekir: %(error_key)s"],"You have successfully disconnected Jetpack":["Jetpack bağlantısını başarıyla kestiniz"],"Edit":["Düzenle"],"Connected":["Bağlanıldı"],"Activate":["Etkinleştir"],"Active":["Etkin"],"Search":["Ara"],"Settings":["Ayarlar"],"Learn More":["Daha Fazla Bilgi"],"Disconnect Jetpack":["Jetpack Bağlantısını Kes"],"Test your site’s compatibility with Jetpack.":["Sitenizin Jetpack ile uyumluluğunu test edin."],"Settings header\u0004Plugin Autoupdates":["Otomatik Eklenti Güncellemeleri"],"Settings header\u0004Downtime monitoring":["Kullanım dışı kalma izleme"],"Settings header\u0004Privacy Settings":["Gizlilik Ayarları"],"Settings header\u0004WordPress.com toolbar":["WordPress.com araç çubuğu"],"Settings header\u0004Composing":["Derleniyor"],"Settings header\u0004Site stats":["Site istatistikleri"],"Settings header\u0004Search engine optimization":["Arama motoru optimizasyonu"],"Settings header\u0004Google Analytics":["Google Analytics"],"Settings header\u0004Sharing buttons":["Paylaşım düğmeleri"],"Settings header\u0004Publicize connections":["Bağlantıları duyurun"],"Settings header\u0004Like buttons":["Beğenme düğmeleri"],"Settings header\u0004WordPress.com log in":["WordPress.com oturum açma"],"Settings header\u0004Brute force attack protection":["Deneme yanılma saldırılarına karşı koruma"],"Settings header\u0004Backups and security scanning":["Yedeklemeler ve güvenlik taraması"],"Settings header\u0004Spam filtering":["İstenmeyen içerik filtreleme"],"Navigation item.\u0004Performance":["Performans"],"Navigation item.\u0004My Plan":["Paketim"],"Navigation item.\u0004Dev Tools":["Geliştirme araçları"],"Navigation item.\u0004Settings":["Ayarlar"],"Navigation item.\u0004Discussion":["Tartışma"],"Navigation item.\u0004Traffic":["Trafik"],"Navigation item.\u0004Sharing":["Paylaşma"],"Navigation item.\u0004At A Glance":["Bir Bakışta"],"Navigation item.\u0004Plans":["Paketler"],"Navigation item.\u0004Writing":["Yazma"],"Navigation item.\u0004Reset Options (dev only)":["Sıfırlama seçenekleri (yalnızca geliştirme sürümleri için)"],"Navigation item.\u0004Security":["Güvenlik"],"Navigation item.\u0004At a Glance":["Bir Bakışta"],"Search term.\u0004terms of service":["hizmet koşulları"],"Search term.\u0004tos":["hk"],"Search term.\u0004gdpr":["gdpr"],"Search term.\u0004data":["veri"],"Search term.\u0004tracks":["izlemeler"],"Search term.\u0004privacy":["gizlilik"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["Yükseltme"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["Yükselt"],"Button caption\u0004Saving…":["Kaydediliyor…"],"Button caption\u0004Save settings":["Ayarları kaydet"],"A heading for a block of related posts.\u0004Related":["Benzer"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["Ön izleme"],"A caption for a button to cancel disconnection.\u0004Stay connected":["Bağlı kal"],"A caption for a button to disconnect.\u0004Disconnect":["Bağlantıyı kes"],"Short warning message\u0004Updates needed":["Güncellemelerin yapılması gerekiyor"],"Short label appearing near a paid feature configuration block.\u0004Paid":["Ücretli"],"A header for a preview area in the configuration screen.\u0004Preview":["Ön izleme"],"Ads header\u0004Ads":["Reklamlar"],"Dashboard widget header\u0004Site connection":["Site bağlantısı"],"Dashboard widget header\u0004Account connection":["Hesap bağlantısı"],"A caption for a small button to fix security issues.\u0004Threats":["Tehditler"],"A caption for a small button to fix security issues.\u0004FIX":["DÜZELT"],"Short warning message about new threats found.\u0004Threats found!":["Tehditler bulundu!"],"Short warning message about site having no security scan.\u0004No scanning":["Tarama yok"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["Yükselt"],"Short message informing user that the site is secure.\u0004Secure":["Güvenli"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["Geçersiz anahtar"],"Caption for a button to set up a feature.\u0004Set up":["Ayarla"],"verb\u0004Copy":["Kopyala"],"Shorthand for Privacy Policy.\u0004Privacy":["Gizlilik"],"Shorthand for Terms of Service.\u0004Terms":["Koşullar"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["Hata ayıklama"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["İstenmeyen yorumlar engellendi."]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-uk-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-uk-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 6a927f7c..00000000
--- a/plugins/jetpack/languages/json/jetpack-uk-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);","lang":"uk_UA"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":[""],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":[""],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":[""],"Save Settings":[""],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":[""],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found.","Uh oh, %(number)s threats found."],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["","%(number)s Views","%(number)s Views"],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":[""],"Learn more":["Дізнатись більше"],"Posts":["Публікації"],"Front page":[""],"Pinterest":[""],"Google":[""],"Show related content after posts":["Показувати пов’язаний вміст після записів"],"Related":["Пов’язано"],"Save":["Зберегти"],"Email Address":["Адреса електронної пошти"],"Media":["Медіафайли"],"Themes":[""],"Site Stats":["Статистика"],"Sharing":["Поділитись"],"Testimonials":["Рекомендації"],"Cancel":["Скасувати"],"Comments":["Коментарі"],"Ignored Phrases":["Ігноровані фрази"],"Use automatically detected language to proofread posts and pages":[""],"Redundant Phrases":[""],"Phrases to Avoid":[""],"Passive Voice":[""],"Jargon":[""],"Hidden Verbs":[""],"Double Negatives":["подвійні заперечення"],"Diacritical Marks":[""],"Complex Phrases":["Складні фрази"],"Bias Language":[""],"English Options":[""],"Proofreading":[""],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[""],"You have successfully disconnected Jetpack":[""],"Edit":["Редагувати"],"Connected":["З’єднано"],"Activate":["Активувати"],"Active":["Активний"],"Search":["Пошук"],"Settings":["Налаштування"],"Learn More":["Дізнатись більше"],"Disconnect Jetpack":[""],"Test your site’s compatibility with Jetpack.":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-ur-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-ur-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 68f81ddd..00000000
--- a/plugins/jetpack/languages/json/jetpack-ur-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=2; plural=n != 1;","lang":"ur_PK"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":[""],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":[""],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":[""],"Save Settings":[""],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":[""],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":["","Uh oh, %(number)s threats found."],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":["","%(number)s Views"],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":[""],"Learn more":[""],"Posts":["تحریریں"],"Front page":[""],"Pinterest":[""],"Google":[""],"Show related content after posts":[""],"Related":[""],"Save":["محفوظ کریں"],"Email Address":["ای میل پتہ"],"Media":[""],"Themes":[""],"Site Stats":[""],"Sharing":[""],"Testimonials":[""],"Cancel":["مسترد"],"Comments":["تبصرے"],"Ignored Phrases":[""],"Use automatically detected language to proofread posts and pages":[""],"Redundant Phrases":[""],"Phrases to Avoid":[""],"Passive Voice":[""],"Jargon":[""],"Hidden Verbs":[""],"Double Negatives":[""],"Diacritical Marks":[""],"Complex Phrases":[""],"Bias Language":[""],"English Options":[""],"Proofreading":[""],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[""],"You have successfully disconnected Jetpack":[""],"Edit":["تدوین"],"Connected":[""],"Activate":["فعال کریں"],"Active":[""],"Search":["تلاش"],"Settings":[""],"Learn More":[""],"Disconnect Jetpack":[""],"Test your site’s compatibility with Jetpack.":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-vi-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-vi-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index c5a0861d..00000000
--- a/plugins/jetpack/languages/json/jetpack-vi-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=1; plural=0;","lang":"vi_VN"},"Pages":[""],"We're here to help":[""],"Jetpack comes with free, basic support for all users.":[""],"Ask a question":[""],"Search our support site":[""],"Get a faster resolution to your support questions.":[""],"Host fast, high-quality, ad-free video.":[""],"Generate income with high-quality ads.":[""],"Real-time site backups and automatic threat resolution.":[""],"Protect against data loss, malware, and malicious attacks.":[""],"Integrate easily with Google Analytics.":[""],"Help your content get found and shared with SEO tools.":[""],"Protect your site from spam.":[""],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":[""],"Spam filtering":[""],"Daily, automated malware scanning":[""],"Daily, automated backups (unlimited storage)":[""],"Daily, automated malware scanning with automated resolution":[""],"SEO preview tools":[""],"Site stats, related content, and sharing tools":[""],"Unlimited, high-speed image hosting":[""],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":[""],"Read more about Jetpack benefits":[""],"An Automattic Airline":[""],"Manage site connection":[""],"Connect your account to WordPress.com to view more stats":[""],"Theme enhancements":[""],"Load more posts using the default theme behavior":[""],"Load more posts in page with a button":[""],"Load more posts as the reader scrolls down":[""],"Theme support required.":[""],"Learn more about adding support for Infinite Scroll to your theme.":[""],"Use excerpts instead of full posts on front page and archive pages":[""],"Show featured images":[""],"Enable the WordPress.com toolbar":[""],"Writing tools available to you will be shown here when an administrator enables them.":[""],"Portfolios":[""],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":[""],"Bing":[""],"Yandex":[""],"Generate XML sitemaps":[""],"Collecting valuable traffic stats and insights":[""],"The image helps collect stats, but should work when hidden.":[""],"Count logged in page views from":[""],"Allow stats reports to be viewed by":[""],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":[""],"Configure your SEO settings":[""],"In \"Upgrade\"":[""],"Configure your Google Analytics settings":[""],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":[""],"Enable ads and display an ad below each post":[""],"Configure your sharing buttons":[""],"Connect your social media accounts":[""],"Match accounts using email addresses":[""],"Require accounts to use WordPress.com Two-Step Authentication":[""],"Add to whitelist":[""],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":[""],"Your site is backed up and threat-free.":[""],"Checking your spam protection…":[""],"Fetching key…":[""],"Your site needs an Antispam key.":[""],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":[""],"Your site is not protected from spam.":[""],"Your Antispam key is valid.":[""],"Your site is protected from spam.":[""],"Checking key…":[""],"Your API key":[""],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":[""],"No search results found for %(term)s":[""],"Enter a search term to find settings or close search.":[""],"Connections":[""],"Your site is in Development Mode, so it can not be connected to WordPress.com.":[""],"Your site is connected to WordPress.com.":[""],"You are the Jetpack owner.":[""],"Connected as {{span}}%(username)s{{/span}}":[""],"View your Email Followers":[""],"Color scheme":[""],"Enable Markdown use for comments.":[""],"Updated settings.":[""],"Error updating settings. %(error)s":[""],"Regenerated Post by Email address.":[""],"Error regenerating Post by Email address. %(error)s":[""],"Updated settings. Refreshing page…":[""],"{{li}}The jetpack_development_mode filter is active{{/li}}":[""],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":[""],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":[""],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":[""],"Google Analytics":[""],"Configure Google Analytics":[""],"Activate Google Analytics":[""],"Upgrade Focus: VideoPress For Weddings":[""],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":[""],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":[""],"Display an ad unit at the top of your site.":[""],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":[""],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":[""],"In \"Mobile\"":[""],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":[""],"View your earnings":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":[""],"Video Hosting":[""],"SEO Tools":[""],"Advanced SEO tools to help your site get found when people search for relevant content.":[""],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":[""],"You are running Jetpack on a staging server.":[""],"More Info":[""],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":[""],"Your current IP: %(ip)s":[""],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":[""],"This will reset all Jetpack options, are you sure?":[""],"Search for a Jetpack feature.":[""],"Configure your Security Scans":[""],"Subscriber":[""],"Big iPhone/iPad Update Now Available":[""],"The WordPress for Android App Gets a Big Facelift":[""],"WordPress.com Likes are:":[""],"Comments headline":[""],"A few catchy words to motivate your readers to comment.":[""],"Show a \"follow blog\" option in the comment form":[""],"Show a \"follow comments\" option in the comment form":[""],"Put a chart showing 48 hours of views in the admin bar":[""],"Hide the stats smiley face image":[""],"Whitelisted IP addresses":[""],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":[""],"Copied!":[""],"Highlight and copy the following text to your clipboard:":[""],"Regenerate address":[""],"Automatically proofread content when: ":[""],"A post or page is first published":[""],"A post or page is updated":[""],"Automatic Language Detection":[""],"The proofreader supports English, French, German, Portuguese and Spanish.":[""],"Enable proofreading for the following grammar and style rules: ":[""],"Add a phrase":[""],"Cheatin' uh?":[""],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":[""],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":[""],"Your Jetpack is already connected.":[""],"You're fueled up and ready to go, Jetpack is now active.":[""],"You're fueled up and ready to go.":[""],"You are currently running a development version of Jetpack.":[""],"Submit Beta feedback":[""],"What would you like to see on your Jetpack Dashboard?":[""],"Let us know!":[""],"Saving…":[""],"Save Settings":[""],"Jetpack Stats Icon":[""],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":[""],"Activate Site Stats":[""],"Security Scanning":[""],"Upgrade":[""],"ACTIVE":[""],"Your site is on Development Mode":[""],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":[""],"View your spam stats":[""],"View your security dashboard":[""],"The site is in Development Mode, so you can not connect to WordPress.com.":[""],"Link your account to WordPress.com to get the most out of Jetpack.":[""],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":[""],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":[""],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":[""],"Total malicious attacks blocked on your site.":[""],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":[""],"All plugins are up-to-date. Awesome work!":[""],"Jetpack is improving and optimizing your image speed.":[""],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":[""],"Security":[""],"Performance":[""],"Backups":[""],"{{a}}View backup details{{/a}}.":[""],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":[""],"Unavailable in Dev Mode.":[""],"Spam Protection":[""],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":[""],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":[""],"Invalid key":[""],"Unavailable in Dev Mode":[""],"Activating recommended features…":[""],"Recommended features active.":[""],"Recommended features failed to activate. %(error)s":[""],"%(slug)s has been activated.":[""],"%(slug)s failed to activate. %(error)s":[""],"%(slug)s has been deactivated.":[""],"%(slug)s failed to deactivate. %(error)s":[""],"Updating %(slug)s settings…":[""],"Updated %(slug)s settings.":[""],"Error updating %(slug)s settings. %(error)s":[""],"Updating %(slug)s address…":[""],"Regenerated %(slug)s address .":[""],"Error regenerating %(slug)s address. %(error)s":[""],"Resetting Jetpack options…":[""],"Options reset.":[""],"Options failed to reset.":[""],"There was an error disconnecting Jetpack. Error: %(error)s":[""],"Unlinking from WordPress.com":[""],"Unlinked from WordPress.com.":[""],"Error unlinking from WordPress.com. %(error)s":[""],"At A Glance":[""],"Clichés":[""],"Dashboard":[""],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":[""],"Automattic's Privacy Policy":[""],"WordPress.com Terms of Service":[""],"Plugin Updates":[""],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":[""],"No threats found, you're good to go!":[""],"{{a}}Contact Support{{/a}}":[""],"{{a}}View details at VaultPress.com{{/a}}":[""],"Uh oh, %(number)s threat found.":[""],"Loading…":[""],"{{button}}View more stats on WordPress.com {{/button}}":[""],"{{button}}View detailed stats{{/button}}":[""],"All-time comments":[""],"All-time views":[""],"%(number)s View":[""],"Best overall day":[""],"Views today":[""],"Months":[""],"Weeks":[""],"Days":[""],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":[""],"Click to view detailed stats.":[""],"Views: %(numberOfViews)s":[""],"Week of %(date)s":[""],"Site Security":[""],"Link to WordPress.com":[""],"Unlink me from WordPress.com":[""],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":[""],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":[""],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":[""],"Disconnecting Jetpack":[""],"Learn more":["Học thêm"],"Posts":["Bài viết"],"Front page":[""],"Pinterest":["Pinterest"],"Google":[""],"Show related content after posts":["Hiện nội dung liên quan sau các bài đăng"],"Related":["Có liên quan"],"Save":["Lưu lại"],"Email Address":["Địa chỉ thư điện tử (email)"],"Media":["Phương tiện"],"Themes":[""],"Site Stats":[""],"Sharing":[""],"Testimonials":[""],"Cancel":["Hủy bỏ"],"Comments":["Phản hồi"],"Ignored Phrases":[""],"Use automatically detected language to proofread posts and pages":[""],"Redundant Phrases":[""],"Phrases to Avoid":[""],"Passive Voice":[""],"Jargon":[""],"Hidden Verbs":[""],"Double Negatives":[""],"Diacritical Marks":[""],"Complex Phrases":[""],"Bias Language":[""],"English Options":[""],"Proofreading":[""],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":[""],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":[""],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":[""],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":[""],"You have successfully disconnected Jetpack":[""],"Edit":["Sửa"],"Connected":["Đã kết nối"],"Activate":["Kích hoạt"],"Active":["Hoạt động"],"Search":["Tìm kiếm"],"Settings":["Cài đặt"],"Learn More":["Xem thêm"],"Disconnect Jetpack":[""],"Test your site’s compatibility with Jetpack.":[""],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":[""],"Button caption\u0004Saving…":[""],"Button caption\u0004Save settings":[""],"Noun, a header for a preview block in a configuration screen.\u0004Preview":[""],"A caption for a button to cancel disconnection.\u0004Stay connected":[""],"A caption for a button to disconnect.\u0004Disconnect":[""],"Navigation item.\u0004Dev Tools":[""],"Navigation item.\u0004Settings":[""],"Navigation item.\u0004Discussion":[""],"Navigation item.\u0004Traffic":[""],"Navigation item.\u0004Sharing":[""],"Navigation item.\u0004At A Glance":[""],"Navigation item.\u0004Plans":[""],"Navigation item.\u0004Writing":[""],"Navigation item.\u0004Reset Options (dev only)":[""],"Navigation item.\u0004Security":[""],"Navigation item.\u0004At a Glance":[""],"Short warning message\u0004Updates needed":[""],"Short label appearing near a paid feature configuration block.\u0004Paid":[""],"Settings header\u0004WordPress.com toolbar":[""],"Settings header\u0004Composing":[""],"Settings header\u0004Site stats":[""],"Settings header\u0004Search engine optimization":[""],"Settings header\u0004Google Analytics":[""],"Settings header\u0004Sharing buttons":[""],"Settings header\u0004Publicize connections":[""],"Settings header\u0004Like buttons":[""],"Settings header\u0004WordPress.com log in":[""],"Settings header\u0004Brute force attack protection":[""],"Settings header\u0004Backups and security scanning":[""],"Settings header\u0004Spam filtering":[""],"A header for a preview area in the configuration screen.\u0004Preview":[""],"Ads header\u0004Ads":[""],"Dashboard widget header\u0004Site connection":[""],"Dashboard widget header\u0004Account connection":[""],"A caption for a small button to fix security issues.\u0004Threats":[""],"A caption for a small button to fix security issues.\u0004FIX":[""],"Short warning message about new threats found.\u0004Threats found!":[""],"Short warning message about site having no security scan.\u0004No scanning":[""],"Caption for a button to purchase a paid feature.\u0004Upgrade":[""],"Short message informing user that the site is secure.\u0004Secure":[""],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":[""],"Caption for a button to set up a feature.\u0004Set up":[""],"verb\u0004Copy":[""],"Shorthand for Privacy Policy.\u0004Privacy":[""],"Shorthand for Terms of Service.\u0004Terms":[""],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":[""],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":[""]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-zh_CN-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-zh_CN-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index fcc0d8d5..00000000
--- a/plugins/jetpack/languages/json/jetpack-zh_CN-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=1; plural=0;","lang":"zh_CN"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":["接下来,激活 Jetpack 的推荐功能设置,更大程度提高站点的安全性和性能。{{a}}了解更多详细信息{{/a}}。"],"We’re now collecting stats and securing your site. Welcome aboard.":["现在,我们会收集统计数据,并保证您站点的安全。欢迎您加入我们。"],"{{a}}Skip, and explore features individually{{/a}}.":["{{a}}跳过,并逐一浏览各项功能{{/a}}。"],"Jetpack Business Plan":["Jetpack 商务版套餐"],"Jetpack Premium Plan":["Jetpack 高级版套餐"],"Jetpack Personal Plan":["Jetpack 个人版套餐"],"Get started with hassle-free design, stats, and performance tools.":["开始使用简单方便的设计、统计数据和性能工具。"],"Welcome to Jetpack Free":["欢迎使用 Jetpack 免费版"],"Jetpack Free Plan":["Jetpack 免费版套餐"],"Explore Jetpack plans":["了解 Jetpack 套餐"],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":["利用自动备份和优先支持免除后顾之忧,使用搜索引擎优化工具扩大受众群体,通过投放广告来利用站点获利,并使用 200 多款高级套餐主题定制您的站点。"],"Jetpack offers so much more":["Jetpack 能提供的不止这些"],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":["需要帮助?请搜索我们的支持站点,查找有关站点、帐户以及如何充分利用 WordPress 的信息。"],"Support documentation":["支持文档"],"Chat bubbles representing getting in touch with support":["表示可以获取帮助的弹出对话框"],"Site Activity":["站点活动"],"Start publicizing now":["立即开始分享"],"Reach a wider audience by automatically sharing your posts on social media.":["通过在社交媒体上自动分享文章来扩大受众群体。"],"Increase traffic to your site":["增加站点的流量"],"Explore free themes":["了解免费主题"],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":["无限制访问数百款专业主题,并根据您的喜好准确定制站点。"],"A wide variety of themes and tools to customize a site":["用于定制站点的丰富主题和工具"],"Set up your site security":["设置站点安全"],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":["防止遭受登录攻击,并在您的站点出现问题时即时接收通知。"],"Site stats showing an evolution in traffic and engagement":["显示流量和参与度变化情况的站点统计数据"],"A hand holding a loupe":["握着放大镜的手"],"A chart showing an healthy increase in earnings":["显示收入正常增加的图表"],"Interface showing a chronological list of changes and updates in a site":["显示站点更改和更新列表(按时间顺序排列)的界面"],"A cloud with multiple types of content floating around it":["周围漂浮多个内容类型的云"],"A folder holding real comments":["包含真实评论的文件夹"],"Make your site faster":["加快站点运行速度"],"Load pages faster by serving your images from our global network of servers.":["通过我们的全球服务器网络提供图片,加快页面加载速度。"],"A fast and performant website":["快速、高性能的网站"],"A secure site, locked and protected by Jetpack":["由 Jetpack 锁定并提供保护的安全站点"],"These settings won't apply to related posts added using the block editor.":["这些设置不适用于使用区块编辑器添加的相关文章。"],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["复制现有文章、页面、好评和作品集。包括文本、推荐图片、共享设置等在内的所有内容都将被复制。"],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":[""],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":[""],"Add Like buttons to your posts and pages":[""],"When visitors enjoy your content, let them show it with a Like.":[""],"Explore your Jetpack Professional plan!":["体验您的 Jetpack 专业版套餐!"],"Explore your Jetpack Premium plan!":["体验您的 Jetpack 高级版套餐!"],"Explore your Jetpack Personal plan!":["体验您的 Jetpack 个人版套餐!"],"Create account":["创建帐户"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["Jetpack 正在为您的站点提供支持,但您将需要创建帐户才能访问其全部功能。"],"Real-time, automated backups (unlimited storage)":["实时自动备份(无限的存储空间)"],"Compose content the way you want to and streamline your publishing experience.":["按照您喜欢的方式编写内容,并简化发布流程。"],"Add a portfolio item":["添加文件夹项"],"Add a testimonial":["添加评价"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["尽可能提升您的站点在搜索引擎中的曝光度,并实时查看流量统计数据。"],"Create a Jetpack account to use this feature":["创建 Jetpack 帐户即可使用此功能"],"Share your content on social media and increase audience engagement.":["在社交媒体上分享内容,并提高观众参与度。"],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["Jetpack 会持续监控您的站点,并在检测到停机时间时提醒您。"],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["当一款插件更新发布时,最佳做法是立即更新该插件。选择您想要自动更新的插件,以便维护站点安全。"],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["使用先进的安全技术来保证站点的安全,并接收关于技术问题的通知。"],"Error enabling Site accelerator. %(error)s":["启用站点加速器时出错。%(error)s"],"Site accelerator is now speeding up your site!":["站点加速器正在为您的站点加速!"],"Enabling Site accelerator…":["正在启用站点加速器..."],"Error disabling site accelerator. %(error)s":["停用站点加速器时出错。%(error)s"],"Site accelerator is no longer speeding up your site!":["站点加速器已停止为您的站点加速!"],"Disabling site accelerator…":["正在停用站点加速器..."],"Load pages faster, optimize images, and speed up your visitors’ experience.":["提高页面加载速度、优化图片质量,并为访客提供更快的浏览体验。"],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["利用 Google 对您的访客和流量模式的深度解析,完善 WordPress.com 的统计信息。"],"High-speed, high-definition video hosting with no third-party ads.":["高速高清的视频托管,没有第三方广告。"],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["提前预发布无限量推文、Facebook 帖子和其他社交媒体文章。"],"Marketing Automation":["市场营销自动化"],"Activate Jetpack Search":["激活 Jetpack 搜索"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["使用由 Elasticsearch 提供支持的更好的结果和过滤功能替换默认的 WordPress 搜索。"],"Start earning":["开始赚取收益"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["通过 WordAds,您可以展示促销内容,进而赚取收益。立即开始赚取收益。"],"Spam is automatically blocked from your comments.":["系统会自动屏蔽评论中的垃圾评论。"],"Spam Filtering":["垃圾邮件过滤"],"Browse premium themes":["浏览高级套餐主题"],"Access hundreds of beautifully designed premium themes at no extra cost.":["无需额外费用,即可访问上百个设计精美的高级版主题。"],"Try a premium theme":["试用高级套餐主题"],"View settings":["查看设置"],"Create a Jetpack account to view your email followers":["创建 Jetpack 帐户,查看电子邮件粉丝"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["开放站点来接收评论,并邀请订阅者接收关于您的最新作品的提醒。"],"Manage security settings":["管理安全设置"],"Built-in Performance":["嵌入性能"],"Jetpack is ready for the new WordPress editor":["Jetpack 已为新的 WordPress 编辑器做好准备"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["现在,我们将介绍专为新的编辑器体验而打造的首批 Jetpack 专有区块:“简单付款”按钮、表单、映射和 Markdown。"],"Build your Jetpack site with blocks":["借助区块打造您的 Jetpack 站点"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["想要一个新编辑器吗?是的!{{a}}了解详情{{/a}}。"],"The features you rely on, adapted for the new WordPress editor.":["您所依赖的功能已针对新的 WordPress 编辑器进行调整。"],"Take me to the new editor":["查看新的编辑器"],"Testing Jetpack Connection":[""],"There was an error testing Jetpack. Error: %(error)s":["测试 Jetpack 时出错。错误:%(error)s"],"New in Jetpack!":["Jetpack 新功能!"],"Speed up static file load times":["提高静态文件的加载速度"],"Speed up image load times":["提高图片的加载速度"],"Enable site accelerator":["启用站点加速器"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["允许 Jetpack 优化您的图片以提高页面加载速度,并通过我们的全球服务器网络提供您的图片和静态文件(例如,CSS 和 JavaScript)。"],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["启用 WordPress.com 登录和安全认证,为您的网站添加额外的安全保护。如果您有多个站点已启用此选项,您将能够使用相同的凭证登录每个站点。"],"View your site activity":["查看您的站点活动"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["以有序且易读的方式查看按时间顺序排列的站点所有更改和更新列表。"],"Manually Verify ":["手动验证"],"Verify with Google":["通过 Google 验证"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["Google 会通过电子邮件发送您的站点上发生的特定事件,包括您的网站{{a1}}遭到入侵{{/a1}}的迹象,或有关{{a2}}抓取或索引{{/a2}}您的站点时遇到的问题。"],"or":["或"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["通过 {{a}}Google Search Console{{/a}} 监控您站点的流量和性能。"],"Your site is verified with Google":["您的站点已通过 Google 验证"],"Site failed to verify: %(error)s":["站点验证失败:%(error)s"],"Verifying...":["正在验证..."],"Add faster, more advanced searching to your site with Jetpack Professional.":["借助 Jetpack 专业版套餐,为您的站点添加更快、更高级的搜索。"],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["使用 Jetpack 搜索的高级搜索体验替换 WordPress 内置搜索"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["Jetpack 搜索利用 WordPress.com 云中托管的快速、可扩展、可自定义且可返回高度相关结果的搜索体验替换内置搜索。结果是:您的用户能够更快地找到他们想要的内容。"],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["内置 WordPress 搜索更适合没有太多内容的站点。但随着站点的不断发展,搜索速度会变慢并会返回不太相关的结果。"],"Jetpack Search supports many customizations.":["Jetpack 搜索支持许多自定义设置。"],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["利用 {{a}}WordPress.com 云中托管{{/a}}的快速、可扩展、可自定义且可返回高度相关结果的搜索体验替换内置搜索。"],"Site is verified":["站点已验证"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}要创建外观和功能完全符合您预期的精美站点,您可以使用 Jetpack 专业版无限量访问 200 多个高级版 WordPress 主题。{{/p}}{{p}}使用 Jetpack 专业版,不仅可以找到完美的设计,同时,我们的全球专家团队会在您需要时优先提供支持,让您真正高枕无忧。{{/p}}"],"Spam filtering and priority support.":["垃圾邮件过滤和优先支持。"],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["当启用广告时,Jetpack 将根据您的站点自动生成一个自定义的 ads.txt。"],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["Jetpack 根据您的站点自动生成自定义 {{link}}ads.txt{{/link}}。如果您需要为其他网络添加额外的条目,请将其填在下面的空白处(每行一个)。"],"Custom ads.txt entries":["自定义 ads.txt 条目"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}要创建外观和运行性能完全符合预期的精美站点,您可以使用 Jetpack 专业版无限访问 200 多个 WordPress 高级套餐主题。{{/p}}{{p}}Jetpack 专业版不止于发现完美的设计,还可让您高枕无忧:实时备份、自动恶意软件扫描和来自全球专家团队的优先支持,可确保您的站点始终处于安全状态。{{/p}}"],"Introducing Premium Themes":["介绍高级套餐主题"]," Premium Themes":["高级套餐主题"],"Privacy information":["隐私信息"],"Enable Lazy Loading for images":["为图像启用延迟加载功能"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":[""],"Performance & speed":["性能和速度"],"Enable high-speed, ad-free video player":["启用高速且无广告的视频播放器"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["借助高分辨率视频,确保您发布的内容更具吸引力。借助 Jetpack 视频,您可以定制媒体播放器,向访客提供高速、无广告、无品牌信息的视频。视频托管在我们的 WordPress.com 服务器上,不会占用您的托管套餐空间!"],"Video":["视频"],"Carousel color scheme":["轮播配色方案"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Exif 数据向浏览者显示照片的其他技术详细信息,例如焦距、光圈和 ISO。"],"Show photo Exif metadata in carousel (when available)":["采用轮播方式显示照片 Exif 元数据(如果可以)"],"Display images in a full-screen carousel gallery":["在全屏轮播图库中显示图像"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["在文章和页面中创建图像的全屏轮播幻灯片。轮播图库适合移动应用,便于站点访客与照片进行交互。"],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["WordPress.com 工具栏取代默认的 WordPress 管理员工具栏,简化了您的 WordPress 体验。它提供一键式访问,以管理您的所有站点、更新 WordPress.com 个人资料、查看通知,并及时掌握您在阅读器中关注的站点的动态。"],"Portfolios shortcode: [portfolio]":["文件夹短代码:[portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["在您的站点上使用{{portfolioLink}}文件夹{{/portfolioLink}}来展示您的优秀作品。如果您的主题不支持 Jetpack 文件夹,您仍可以使用简单的短代码在站点上显示这些内容。"],"Testimonials shortcode: [testimonials]":["好评短代码:[testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["向您的网站添加{{testimonialLink}}好评{{/testimonialLink}}以吸引新客户。如果您的主题不支持 Jetpack 好评,您仍可以使用简单的短代码在站点上显示这些内容。"],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["搜索引擎目前无法访问您的站点。如果希望放开站点的访问权限,请查看{{a}}阅读设置{{/a}}并打开“搜索引擎可见性”。"],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["好消息:Jetpack 会自动将您的站点地图发送至所有主要的搜索引擎,以便编入索引。"],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["站点地图是 Google 或 Bing 等搜索引擎用于将您的网站编入索引的文件。站点地图有助于改善您的网站在搜索结果中的排名。启用此功能后,Jetpack 将为您创建站点地图,并在站点上的内容发生更改时自动进行更新。"],"Configure related posts in the Customizer":["在定制器中配置相关文章"],"Highlight related content with a heading":["使用标题高亮显示相关内容"],"View security scan details":["查看安全扫描详情"],"View backup history":["查看备份历史记录"],"Show a thumbnail image where available":["在可用的地方显示缩略图"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["要详细了解 Jetpack 特定功能如何使用数据和跟踪活动,请访问我们的{{privacyCenterLink}}隐私中心{{/privacyCenterLink}}。"],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["我们使用其他跟踪工具,其中包括来自第三方的工具。{{cookiePolicyLink}}了解这些隐私政策{{/cookiePolicyLink}}及其控制方法。"],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["该信息有助于我们改善产品、开展与您更加相关的营销活动、个性化您的 WordPress.com 体验等,更多详情参阅{{pp}}隐私政策{{/pp}}。"],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["登录到您的 WordPress.com 帐户时,使用分析工具共享关于您使用服务的信息。{{cookiePolicyLink}}了解详情{{/cookiePolicyLink}}。"],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["此功能由站点管理员进行管理。{{link}}了解详情{{/link}}。"],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["站点管理员已禁用此功能。{{link}}了解详情{{/link}}。"],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["站点管理员已启用此功能。{{link}}了解详情{{/link}}。"],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["站点管理员已禁用 %(moduleName)s。{{link}}了解详情{{/link}}。"],"This feature has been disabled by a site administrator.":["站点管理员已禁用此功能。"],"%(moduleName)s has been disabled by a site administrator.":["站点管理员已禁用 %(moduleName)s。"],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["您可以使用 Ad 小组件投放更多广告。{{link}}试试看!{{/link}}"],"Configure your notification settings":["配置您的通知设置"],"Monitor your site's downtime":["监控您站点的停机时间"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":["Jetpack 搜索提供强大的搜索功能,取代了 WordPress 内置的搜索功能。"],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["系统会定期扫描您站点的文件,以识别未经授权或可疑的修改,防范安全和数据威胁。"],"Plugin needs updating.":["需要更新的插件。"],"%(number)s":["%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Jetpack 的插件更新功能可让您选择要自动更新哪些插件。"],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack 将优化您的图像,并通过距离访客最近的服务器位置提供。使用我们的全球内容交付网络将大大提升您站点的加载速度。"],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":[""],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Jetpack 备份功能可让您轻松还原至特定时刻,或下载特定时刻的备份文件。"],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet 会根据我们的全球垃圾内容数据库,检查评论和联系表单提交内容。"],"Privacy Information":["隐私信息"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["VideoPress 可让您从 WordPress.com 上托管的计算机中上传视频,但您无法通过主机服务器上传。随后,您可以在自托管的 Jetpack 站点上插入这些内容。"],"Add the Search (Jetpack) widget to your sidebar":["在边栏中添加“搜索”(Jetpack) 小组件"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["提供快速过滤和分类功能,为访客提供出色的搜索体验和相关搜索结果。"],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["为使用移动设备的访客启用适合移动设备的简洁主题。"],"Loads the next posts automatically when the reader approaches the bottom of the page.":["当读者接近页面底部时,自动加载接下来的文章。"],"Allows you to publish new posts by sending an email to a special address.":["允许您通过向特殊地址发送电子邮件,发布新文章。"],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["允许您使用 Markdown 语法发表包含链接、列表和其他样式的内容。"],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["在您写作时检查内容有无语法和拼写错误、字词误用和风格问题。"],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["提供所需的隐藏式标签,以便向各种服务验证您的 WordPress 站点。"],"Displays information on your site activity, including visitors and popular posts or pages.":["展示与网站活动有关的信息,包括与访客和热门文章或页面有关的信息。"],"Allows you to optimize your site and its content for better results in search engines.":["允许您优化站点和内容,以便在搜索引擎中取得更好的效果。"],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["将您 WordPress 站点与 Google Analytics(分析)集成,Google Analytics(分析)可以提供流量、访客和转化方面的数据洞见。"],"Displays high-quality ads on your site that allow you to earn income.":["在您的站点上展示高质量广告,帮助您实现创收。"],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["在内容中添加分享按钮,以便访客在社交媒体站点上分享您的内容。"],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["允许您自动在社交媒体站点(包括 Facebook 和 Twitter)上分享最新内容。"],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["在内容中添加“点赞”按钮,以便访客表达欣赏或喜爱之情。"],"Allows registered users to log in to your site with their WordPress.com accounts.":["允许注册用户使用 WordPress.com 帐户登录您的站点。"],"Protects your site from traditional and distributed brute force login attacks.":["保护您的站点免遭传统的分布式暴力破解登录攻击。"],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["将您的站点备份到全球范围内的 WordPress.com 服务器中,以便在发生紧急情况或出现错误时恢复内容。"],"Removes spam from comments and contact forms.":["移除评论和联系表单中的垃圾内容。"],"We are committed to your privacy and security. ":["我们致力于保护您的隐私和安全。"],"View all Jetpack plans":["查看所有 Jetpack 套餐"],"Manage your plan":["管理您的套餐"],"Your Plan":["您的套餐"],"You’re currently on Jetpack %(plan)s.":["您目前的套餐是 Jetpack %(plan)s。"],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["允许读者订阅文章或评论,并通过电子邮件接收与新内容有关的通知。"],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["包含社交媒体登录选项的新评论系统取代了标准的 WordPress 评论表单。"],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}激活{{/a}}即可使用 Jetpack 搜索的高级搜索体验替换 WordPress 内置搜索。"],"Add Search (Jetpack) Widget":["添加搜索 (Jetpack) 小组件"],"Jetpack Search is powering search on your site.":["Jetpack 搜索为您的站点提供搜索功能。"],"Manage your plugins":["管理您的插件"],"Moderate comments":["审阅评论"],"Error updating privacy settings. %(error)s":["更新隐私设置时出错。%(error)s"],"Updated privacy settings.":["更新后的隐私设置。"],"Updating privacy settings…":["正在更新隐私设置…"],"Add Jetpack Search Widget":["添加 Jetpack 搜索小组件"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["将 Jetpack 搜索小组件添加到边栏以配置排序和过滤器。"],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["全套安全套件、营销和收益自动化工具、无限的视频托管、无限量的主题、增强型搜索和优先支持。"],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["全套安全套件、营销和收益自动化工具、无限的视频托管和优先支持。"],"Daily backups, spam filtering, and priority support.":["日常备份、垃圾邮件过滤和优先支持。"],"Always-on Security":["始终在线的安全性"],"Activate video hosting":[""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["借助无限的存储空间、一键式恢复、自动安全扫描和优先支持,您可以实时备份站点的所有数据。"],"Design the perfect website":["设计精美的网站"],"Set up Jetpack":["设置 Jetpack"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["借助无限的存储空间、一键式恢复和自动安全扫描,您可以实时备份所有站点数据。"],"Jetpack Search":["Jetpack 搜索"],"Jetpack version %(version)s":["Jetpack 版本 %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["系统正在对您的站点进行实时备份,并定期扫描安全威胁。"],"Daily backup of all your site data with unlimited space and one-click restores":["借助无限的存储空间和一键式恢复,您可以每天备份所有站点数据。"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["借助无限的存储空间、一键式恢复、自动安全扫描和一键式威胁解决方案,您可以实时备份所有站点数据。"],"View your security activity":["查看您的安全活动"]," (powered by VaultPress).":["(由VaultPress提供)。"],"Customize Search Widget":["自定义搜索小组件"],"Please correct the issue below and try again.":["请更正下列问题,然后重试。"],"We are making sure your site stays free of security threats. You will be notified if we find one.":["我们始终确保您的站点不会受到安全威胁。我们会在发现威胁时通知您。"],"Your site is being backed up in real-time.":["系统正在实时备份您的站点。"],"Jetpack version":["Jetpack版本"],"{{a}}View your site's activity{{/a}} in a single feed.":["在一个源中{{a}}查看站点活动{{/a}}。"],"Activity":["活动"],"Confirm each new phrase you add by pressing enter.":["按 Enter 键确认您添加的每个新词。"],"{{a}}View details{{/a}}":["{{a}}查看详细信息{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["感谢您选择 Jetpack 专业版套餐。Jetpack 现在可以实时备份内容,将内容编入索引以便于搜索,扫描安全威胁,并授予对高级套餐主题的访问权限。"],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["借助 Jetpack 专业版,您可以从 300 多种经过专业设计的 WordPress 主题(包括 200 多个高级套餐主题)中选择其一来创建完美的网站。使用各种小组件自定义您的内容,或者将不限数量的视频添加到您的文章和页面 - 可无广告或无水印显示。"],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["借助专业版套餐的内容共享和预发布功能、搜索引擎优化工具及内置的订阅选项,轻轻松松即可增加粉丝人数。您可以通过“简单付款”按钮和内嵌广告来利用您的站点获利,并通过与 Google Analytics(分析)集成来监控您的工作成果。"],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Jetpack 套餐可为您提供所需的一切来保护您的工作成果安全无虞,其中包括按需备份和恶意软件扫描,以及一键还原和问题解决方案。您的站点将获得全面保护,有效防御垃圾邮件、恶意代码和暴力破解密码登录企图。"],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["立即开始探索 Jetpack 专业版,以了解您的新套餐的全部优势。"],"Install premium themes":["安装高级套餐主题"],"Review SEO features":["查看 SEO 功能"],"Welcome Professional":["专业版欢迎辞"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["感谢您选择 Jetpack 高级版套餐。Jetpack 现在可以备份您的站点,扫描安全威胁,并支持获利功能。"],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["借助 Jetpack 高级版,您可以创建完美站点,无论站点用途为何。您可以从 100 多个免费主题中选择其一来自定义您的站点外观,或无限地使用高清视频来提升内容,所有这些均可无广告或无水印托管。"],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["使用 Jetpack 强大的共享工具,您可以在社交媒体上自动分享最新的文章,或者安排您的内容在选择的任何日期或时间进行重新共享。随着粉丝数量的不断增加,您可以借助付款按钮和广告等工具来拓展业务。"],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["立即开始探索 Jetpack 高级版,以了解您的新套餐的全部优势。"],"Monetize your site with ads":["通过在站点上投放广告获利"],"Welcome Premium":["高级版欢迎辞"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["感谢您选择 Jetpack 个人版套餐。Jetpack 现在可以备份您的站点并扫描安全威胁。"],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["借助 Jetpack 个人版,您可以使用 100 多种经过专业设计的免费 WordPress 主题。选择最适合您站点的主题,并自定义颜色、图片或添加各种新的小组件。"],"Got it":[""],"Welcome personal":["个人版欢迎辞"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["点击下方按钮即表示您同意我们的{{tosLink}}服务条款{{/tosLink}},并与 WordPress.com {{shareDetailsLink}}共享详细信息{{/shareDetailsLink}}。"],"Jetpack Stats People":["Jetpack 统计查看者"],"Hello there! Your stats have been activated.":["您好!您的统计功能已激活。"],"Just give us a little time to collect data so we can display it for you here.":["请稍候片刻,正在收集数据,稍后会在此处显示相关数据。"],"Okay, got it!":["好,可以了!"],"Display ads below posts on":["在文章下方显示广告"],"Additional ad placements":["其他广告位置"],"Top of each page":["每个页面顶部"],"Second ad below post":["文章下方的第二条广告"],"Archives":["存档"],"Explore Professional":["探索专业版"],"Compare All Plans":["比较所有套餐"],"Person with laptop":["拥有笔记本电脑的人"],"Your Jetpack site is ready to go!":["您的 Jetpack 站点整装待发!"],"Stars":["星级"],"Jupiter":["木星"],"Welcome to Jetpack Personal":["欢迎使用 Jetpack 个人版"],"Welcome to Jetpack Premium":["欢迎使用 Jetpack 高级版"],"Welcome to Jetpack Professional":["欢迎使用 Jetpack 专业版"],"Schedule posts":[""],"Activate Publicize":["激活 Publicize"],"Your site is backed up.":["您的站点已备份。"],"Image Performance":["图像性能"],"Get WordPress Apps for every device":["为每个设备获取 WordPress 应用"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["通过单个控制面板管理所有站点:随时随地发布内容、跟踪统计信息、审核评论等等。"],"I already use this app.":["我已使用此应用。"],"Create address":["创建地址"],"Priority support":["优先支持"],"Add sharing buttons to your posts":["向您的文章添加共享按钮"],"Automatically share your posts to social networks":["自动将您的文章共享到社交网络"],"Updating settings…":["正在更新设置…"],"Updating Post by Email address…":["正在更新“通过电子邮件发布”地址…"],"Your paid plan gives you access to prioritized Jetpack support.":["付费套餐可为您提供获取 Jetpack 优先支持的权限。"],"You have paid for backups but they're not yet active.":["您已购买备份功能,但这些功能尚未激活。"],"You have paid for backups and security scanning but they’re not yet active.":["您已购买备份和安全扫描功能,但这些功能尚未激活。"],"Click \"Set Up\" to finish installation.":["单击“设置”以完成安装。"],"Checking site status…":["正在检查站点状态…"],"Pages":["页面"],"We're here to help":["我们随时为您提供帮助"],"Jetpack comes with free, basic support for all users.":["Jetpack 自带面向所有用户的免费的基本支持。"],"Ask a question":["提问"],"Search our support site":["搜索我们的支持站点"],"Get a faster resolution to your support questions.":["更快速地解决您的支持问题。"],"Host fast, high-quality, ad-free video.":["快速、优质、无广告的视频托管。"],"Generate income with high-quality ads.":["通过优质广告获得收益。"],"Real-time site backups and automatic threat resolution.":["实时备份站点和自动解决威胁。"],"Protect against data loss, malware, and malicious attacks.":["保护数据免遭丢失、恶意软件和可疑攻击的威胁。"],"Integrate easily with Google Analytics.":["轻松地与 Google Analytics(分析)集成。"],"Help your content get found and shared with SEO tools.":["通过搜索引擎优化工具帮助您广泛传播和共享自己的内容。"],"Protect your site from spam.":["保护您的站点免遭垃圾邮件侵扰。"],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["此站点未连接至 WordPress.com。请要求站点管理员进行连接。"],"Spam filtering":["垃圾邮件过滤"],"Daily, automated malware scanning":["每日自动扫描恶意软件"],"Daily, automated backups (unlimited storage)":["每日自动备份(无限的存储空间)"],"Daily, automated malware scanning with automated resolution":["每日自动扫描恶意软件,并自动解决威胁"],"Unlimited, high-speed video hosting":[""],"SEO preview tools":["搜索引擎优化预览工具"],"Site stats, related content, and sharing tools":["站点统计、相关内容和共享工具"],"Brute force attack protection and downtime monitoring":["暴力破解攻击防护和停机时间监控"],"Unlimited, high-speed image hosting":["无限的高速图像托管"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["断开 %(siteName)s 与 WordPress.com 的连接后,您将无权再使用以下功能:"],"Read more about Jetpack benefits":["详细了解 Jetpack 的优势"],"An Automattic Airline":["一条 Automattic 线路"],"Manage site connection":["管理站点连接"],"Connect your account to WordPress.com to view more stats":["将您的帐户连接至 WordPress.com 以查看更多统计信息"],"Theme enhancements":["主题增强"],"Load more posts using the default theme behavior":["使用默认主题行为加载更多文章"],"Load more posts in page with a button":["使用按钮在页面中加载更多文章"],"Load more posts as the reader scrolls down":["在读者向下滚动页面时加载更多文章"],"Theme support required.":["需要主题支持。"],"Learn more about adding support for Infinite Scroll to your theme.":["详细了解如何在主题中添加“无限滚动”支持。"],"Use excerpts instead of full posts on front page and archive pages":["在首页和存档页面上使用摘录,而非完整文章"],"Show featured images":["显示特色图片"],"Enable the WordPress.com toolbar":["启用 WordPress.com 工具栏"],"Writing tools available to you will be shown here when an administrator enables them.":["如果管理员启用了您可使用的撰写工具,相关工具将显示在此处。"],"Portfolios":["组合"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["请注意,要让搜索引擎将您的站点编入索引,{{b}}无需使用这些服务验证您的站点{{/b}}。要使用这些高级搜索引擎工具并使用某服务验证您的站点,请将 HTML 标签代码复制粘贴到以下位置。如有问题,请阅读{{support}}完整说明{{/support}}。支持的验证服务:{{google}}Google Search Console{{/google}}、{{bing}}Bing Webmaster Center{{/bing}}、{{pinterest}}Pinterest Site Verification{{/pinterest}} 和 {{yandex}}Yandex.Webmaster{{/yandex}}。"],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["生成 XML 站点地图"],"Collecting valuable traffic stats and insights":["收集宝贵的流量统计信息和分析数据"],"The image helps collect stats, but should work when hidden.":["该图片有助于收集统计信息,但在隐藏状态下,仍应继续发挥作用。"],"Count logged in page views from":["计算由用户查看已登录页面的次数:"],"Allow stats reports to be viewed by":["允许以下用户查看统计报告:"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["如果您想要更高级的控制,可以调整这些设置。详细了解如何{{a}}优化站点的搜索引擎优化{{/a}}。"],"Configure your SEO settings":["配置您的搜索引擎优化设置"],"In \"Upgrade\"":["在“升级”中"],"Configure your Google Analytics settings":["配置 Google Analytics(分析)设置"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["在主页的第一篇文章或每页和每篇文章的最后显示广告。在站点的顶部和任何小组件区域放置其他广告,以增加收益。"],"Enable ads and display an ad below each post":["启用广告功能,并在每篇文章下显示广告。"],"Configure your sharing buttons":["配置共享按钮"],"Connect your social media accounts":["连接社交媒体帐户"],"Match accounts using email addresses":["使用电子邮件地址匹配帐户"],"Require accounts to use WordPress.com Two-Step Authentication":["要求帐户使用 WordPress.com 两步验证"],"Add to whitelist":["添加到白名单"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["您可以将一个 IP 地址或一系列地址加入白名单,以防止 Jetpack 将其屏蔽。IPv4 和 IPv6 都可以。如要指定范围,请输入最小值和最大值,使用破折号隔开。示例:12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["您的站点已备份且不存在任何威胁。"],"Checking your spam protection…":["正在检查垃圾邮件保护…"],"Fetching key…":["正在获取密钥…"],"Your site needs an Antispam key.":["您的站点需要 Antispam 密钥。"],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["您的 Antispam API 密钥存在问题。{{a}}了解详情{{/a}}。"],"Your site is not protected from spam.":["您的站点未开启垃圾邮件保护。"],"Your Antispam key is valid.":["您的 Antispam 密钥有效。"],"Your site is protected from spam.":["您的站点已开启垃圾邮件保护。"],"Checking key…":["正在检查密钥…"],"Your API key":["您的 API 密钥"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["如果您没有 API 密钥,则{{a}}点击此处获取 API 密钥{{/a}},系统会指导您完成获取密钥的流程。"],"No search results found for %(term)s":["未找到与 %(term)s 相符的搜索结果"],"Enter a search term to find settings or close search.":["输入搜索条件以查找设置或关闭搜索。"],"Connections":["连接"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["您的站点处于开发模式,因此无法连接到 WordPress.com。"],"Your site is connected to WordPress.com.":["您的站点已连接至 WordPress.com。"],"You are the Jetpack owner.":["您是 Jetpack 所有者。"],"Connected as {{span}}%(username)s{{/span}}":["已使用 {{span}}%(username)s{{/span}} 的身份进行连接"],"View your Email Followers":["查看您的电子邮件粉丝"],"Color scheme":["配色方案"],"Enable Markdown use for comments.":["针对评论启用 Markdown。"],"Updated settings.":["已更新设置。"],"Error updating settings. %(error)s":["更新设置时出错。%(error)s"],"Regenerated Post by Email address.":["已重新生成“通过电子邮件发布”地址。"],"Error regenerating Post by Email address. %(error)s":["重新生成“通过电子邮件发布”地址时出错。%(error)s"],"Updated settings. Refreshing page…":["已更新设置。正在刷新页面…"],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["目前处于{{a}}开发模式{{/a}}(部分功能已被禁用),原因如下:{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}jetpack_development_mode 过滤器处于活跃状态{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}JETPACK_DEV_DEBUG 常数已定义{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}您的站点 URL 缺少点(例如 http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics(分析)是一种免费服务,它可利用对流量的不同数据分析补充我们的{{a}}内置统计信息{{/a}}。WordPress.com 统计功能和 Google Analytics(分析)分别采用不同的方法来识别和跟踪您站点上的活动,因此它们显示的总访问次数、阅读次数等信息往往会有细微差别。"],"Google Analytics":["Google Analytics(分析)"],"Configure Google Analytics":["配置 Google Analytics(分析)"],"Activate Google Analytics":["激活 Google Analytics(分析)"],"Download the free apps":["下载免费应用程序"],"Upgrade Focus: VideoPress For Weddings":["升级重点:婚礼 VideoPress"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}您现在还可以在定制器中配置相关文章。{{ExternalLink}}试试看吧!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["默认情况下,广告显示在每页、每篇文章或首页第一篇文章的最后。您还可以向站点顶部和任何小组件区域添加广告,以增加收入!"],"Display an ad unit at the top of your site.":["在您的站点顶部显示一个广告。"],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["激活广告即表示,您同意 Automattic 广告{{link}}服务条款{{/link}}。"],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["您的服务器配置错误,这意味着 Jetpack Protect 无法有效保护您的站点。"],"In \"Mobile\"":["在“手机”中"],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}在 WordPress.com 上配置 Monitor 通知设置{{/link}}"],"View your earnings":["查看您的收入"],"Configure site SEO":[""],"Activate SEO tools":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["首先,点击文章编辑器中的“添加媒体”并上传视频,其余工作交给我们就可以!"],"Video Hosting":["视频托管"],"SEO Tools":["搜索引擎优化工具"],"Advanced SEO tools to help your site get found when people search for relevant content.":["高级搜索引擎优化工具有助于人们在搜索相关内容时找到您的站点。"],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["将无广告、无品牌信息的视频上传到您站点的最简单方法。获取有关视频播放和共享的统计信息,并且播放器是轻量级的,响应迅速。"],"You are running Jetpack on a staging server.":["您正在暂存服务器上运行 Jetpack。"],"More Info":["更多信息"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}通过共享模块设置管理赞的可见性{{/a}}"],"Your current IP: %(ip)s":["您当前的 IP:%(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["此选项卡中存在未保存的设置,退出后,相应设置将会丢失。继续?"],"This will reset all Jetpack options, are you sure?":["这将重置所有 Jetpack 选项,您确定吗?"],"Search for a Jetpack feature.":["搜索 Jetpack 功能。"],"Configure your Security Scans":["配置您的安全扫描"],"Subscriber":["订阅者"],"Big iPhone/iPad Update Now Available":["iPhone/iPad 现在有重要更新"],"The WordPress for Android App Gets a Big Facelift":["Android 版 WordPress 应用程序外观有大变动"],"WordPress.com Likes are:":["WordPress.com 点赞:"],"Comments headline":["评论标题"],"A few catchy words to motivate your readers to comment.":["能鼓励您的读者发表评论的几个抢眼词语。"],"Show a \"follow blog\" option in the comment form":["在评论表单中显示“关注博客”选项"],"Show a \"follow comments\" option in the comment form":["在评论表单中显示“关注评论”选项。"],"Put a chart showing 48 hours of views in the admin bar":["在管理员栏中置入一个显示 48 小时浏览量的图表"],"Hide the stats smiley face image":["隐藏统计笑脸图片"],"Whitelisted IP addresses":["已加入白名单的 IP 地址"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["在移动主题的页脚中显示针对 WordPress 移动应用程序的广告"],"Copied!":["已复制!"],"Highlight and copy the following text to your clipboard:":["高亮显示以下文本并将其复制到剪贴板:"],"Regenerate address":["重新生成地址"],"Automatically proofread content when: ":["自动校对内容的时间:"],"A post or page is first published":["文章或页面首次发布"],"A post or page is updated":["文章或页面已更新"],"Automatic Language Detection":["自动检测语言"],"The proofreader supports English, French, German, Portuguese and Spanish.":["校对程序支持英语、法语、德语、葡萄牙语和西班牙语。"],"Enable proofreading for the following grammar and style rules: ":["启用针对下列语法和样式规则的校对功能:"],"Add a phrase":["添加短语"],"Cheatin' uh?":["您的攻击行为已被记录。"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}能否在这个{{a}}包含 2 个问题的调查问卷{{/a}}中告诉我们您为什么没有完成 Jetpack 连接?{{/p}}{{p}}必须有 Jetpack 连接,我们免费的安全和流量功能才能正常运行。{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["欢迎使用 {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["您的 Jetpack 已连接。"],"You're fueled up and ready to go, Jetpack is now active.":["Jetpack 现已激活,您已准备充分,随时可以开始。"],"You're fueled up and ready to go.":["您已准备充分,随时可以开始。"],"You are currently running a development version of Jetpack.":["您目前使用的是 Jetpack 的开发版本。"],"Submit Beta feedback":["提交测试版反馈"],"What would you like to see on your Jetpack Dashboard?":["您希望在 Jetpack 控制面板上看到哪些内容?"],"Let us know!":["请告诉我们!"],"Saving…":["正在保存..."],"Save Settings":["保存设置"],"Jetpack Stats Icon":["Jetpack 统计图标"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}激活站点统计{{/a}}以查看详细统计、赞、粉丝、订阅者等更多信息!{{a1}}了解详情{{/a1}}"],"Activate Site Stats":["激活站点统计"],"Security Scanning":["安全扫描"],"Site Backups":["站点备份"],"Upgrade":["升级"],"ACTIVE":["有效"],"Your site is on Development Mode":["您的站点处于开发模式"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["连接后,即可升级到付费套餐,以挖掘世界一流的安全功能、垃圾内容防御工具和优先支持。"],"View your spam stats":["查看您的垃圾内容统计信息"],"View your security dashboard":["查看您的安全控制面板"],"The site is in Development Mode, so you can not connect to WordPress.com.":["此站点处于开发模式,因此您无法连接到 WordPress.com。"],"Link your account to WordPress.com to get the most out of Jetpack.":["将您的帐户链接到 WordPress.com 以充分利用 Jetpack。"],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["为了自动全面地扫描安全威胁,请{{a}}安装并激活 {{/a}} VaultPress。"],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["为了自动全面地扫描安全威胁,请{{a}}升级您的帐户{{/a}}。"],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack 正在积极地拦截恶意登录尝试。数据将很快显示在此处!"],"Total malicious attacks blocked on your site.":["在您的站点上拦截的恶意攻击总数。"],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}激活 Protect{{/a}} 保护您的站点免受恶意登录尝试的侵害。"],"All plugins are up-to-date. Awesome work!":["所有插件都是最新的。太棒了!"],"Jetpack is improving and optimizing your image speed.":["Jetpack 正在改进和优化您的图像传输速度。"],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack 正在监控您的站点。如果我们认为您的站点有故障,您将会收到电子邮件。"],"Security":["安全性"],"Performance":["性能"],"Backups":["备份"],"{{a}}View backup details{{/a}}.":["{{a}}查看备份详细信息{{/a}}。"],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["要自动备份整个站点,请{{a}}安装并激活{{/a}} VaultPress。"],"Unavailable in Dev Mode.":["在开发模式中不可用。"],"Spam Protection":["垃圾内容防护"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["为了获得一流的垃圾内容防御,请{{a}}安装 Akismet{{/a}}。"],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["为了获得一流的垃圾内容防御,请{{a}}激活 Akismet{{/a}}。"],"Invalid key":["键无效"],"Unavailable in Dev Mode":["在开发模式中不可用"],"Activating recommended features…":["正在激活推荐的功能…"],"Recommended features active.":["推荐的功能已激活。"],"Recommended features failed to activate. %(error)s":["无法激活推荐的功能。%(error)s"],"Activating %(slug)s…":["正在激活 %(slug)s…"],"%(slug)s has been activated.":["%(slug)s 已激活。"],"%(slug)s failed to activate. %(error)s":["激活 %(slug)s 失败。%(error)s"],"Deactivating %(slug)s…":["正在停用 %(slug)s…"],"%(slug)s has been deactivated.":["%(slug)s 已停用。"],"%(slug)s failed to deactivate. %(error)s":["未能停用 %(slug)s。%(error)s"],"Updating %(slug)s settings…":["正在更新 %(slug)s 设置…"],"Updated %(slug)s settings.":["已更新 %(slug)s 设置。"],"Error updating %(slug)s settings. %(error)s":["更新 %(slug)s 设置时出错。%(error)s"],"Updating %(slug)s address…":["正在更新 %(slug)s 地址…"],"Regenerated %(slug)s address .":["已重新生成 %(slug)s 地址。"],"Error regenerating %(slug)s address. %(error)s":["重新生成 %(slug)s 地址时出错。%(error)s"],"Resetting Jetpack options…":["正在重置 Jetpack 选项…"],"Options reset.":["选项已重置。"],"Options failed to reset.":["未能重置选项。"],"There was an error disconnecting Jetpack. Error: %(error)s":["断开 Jetpack 连接时出错。错误:%(error)s"],"Unlinking from WordPress.com":["正在与 WordPress.com 取消关联"],"Unlinked from WordPress.com.":["已与 WordPress.com 取消关联。"],"Error unlinking from WordPress.com. %(error)s":["取消与 WordPress.com 的关联时出错。%(error)s"],"At A Glance":["概览"],"Clichés":["陈词滥调"],"Dashboard":["控制面板"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["您可以告诉我们原因吗?只需{{a}}回答两个简单问题{{/a}}即可帮助我们改善 Jetpack。"],"Automattic's Privacy Policy":["Automattic 的隐私政策"],"WordPress.com Terms of Service":["WordPress.com 服务条款"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}激活{{/a}}以提高您的图像的性能和速度。"],"{{a}}Turn on plugin autoupdates{{/a}}":[""],"Plugin Updates":["插件更新"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["要自动备份您整个站点,请{{a}}升级您的帐户{{/a}}。"],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["哎呀!您的 Akismet 键缺失或无效。{{akismetSettings}}转到 Akismet 设置以修复{{/akismetSettings}}。"],"No threats found, you're good to go!":["未找到威胁,您可以继续操作!"],"{{a}}Contact Support{{/a}}":["{{a}}联系支持人员{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}在 VaultPress.com 中查看详细信息{{/a}}"],"Uh oh, %(number)s threat found.":["糟糕,找到 %(number)s 个威胁。"],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}激活 Monitor{{/a}},以便在您的站点出现故障时接收电子邮件通知。"],"Loading…":["正在加载…"],"Downtime monitoring":[""],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}查看 WordPress.com 上的更多精彩内容{{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}查看旧统计数据{{/button}}"],"All-time comments":["所有时间的评论"],"All-time views":["所有时间的浏览"],"%(number)s View":["%(number)s 次浏览"],"Best overall day":["总体情况最好的一天"],"Views today":["今天的浏览量"],"Months":["月"],"Weeks":["周"],"Days":["天"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["加载统计信息时出错。请稍后重试或{{a}}立即在 WordPress.com 上查看统计信息{{/a}}"],"Click to view detailed stats.":["点击以查看详细统计信息。"],"Views: %(numberOfViews)s":["浏览次数:%(numberOfViews)s"],"Week of %(date)s":["%(date)s 周"],"Site Security":["站点安全"],"Activate recommended features":["激活推荐的功能"],"Link to WordPress.com":["关联到 WordPress.com"],"Unlink me from WordPress.com":["取消我与 WordPress.com 的关联"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["连接您的 Jetpack 时出现问题。请再次点击“连接至 WordPress.com”。"],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["连接 Jetpack 时出现问题;请停用 Jetpack 插件后再重新激活,然后再次连接。"],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["您必须在为 Jetpack 授权时登录到您的 WordPress 博客。"],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}您的 Jetpack 有问题。{{/s}}我们对由此带来的不便深感歉意。请稍后重试,如果问题仍然存在,请联系支持人员并提供以下信息:%(error_key)s"],"Disconnecting Jetpack":["断开 Jetpack"],"Learn more":["了解更多"],"Posts":["日志"],"Front page":["首页"],"Upload videos":[""],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["在博文后显示相关内容"],"Related":["相关"],"Save":["保存"],"Email Address":["电子邮件地址"],"Media":["媒体"],"Themes":["主题"],"Site Stats":["网站统计"],"Sharing":["共享"],"Testimonials":["褒奖"],"Cancel":["取消"],"Comments":["评论"],"Ignored Phrases":["忽略的词组"],"Use automatically detected language to proofread posts and pages":["使用自动检测的语言来校对文章和页面"],"Redundant Phrases":["繁冗的词组"],"Phrases to Avoid":["避免使用的词组"],"Passive Voice":["被动语态"],"Jargon":["行话"],"Hidden Verbs":["隐藏的动词"],"Double Negatives":["双重否定"],"Diacritical Marks":["变音符"],"Complex Phrases":["复杂的词组"],"Bias Language":["歧视性语言"],"English Options":["英语选项"],"Proofreading":["校对"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack 无法与 WordPress.com 通信:%(error_key)s。这通常表示您的 Web 主机上存在某些错误配置。"],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com 当前存在问题,无法为您的 Jetpack 提供支持。请稍后重试。"],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}您的 Jetpack 有问题。{{/s}}无法将此站点与 WordPress.com 连接。这通常表示您的站点不可公开访问(本地主机)。"],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["您的网站必须能公开访问才能使用 Jetpack:%(error_key)s"],"You have successfully disconnected Jetpack":["您已成功断开 Jetpack"],"Edit":["编辑"],"Connected":["已连接"],"Activate":["启用"],"Active":["已激活"],"Search":["搜索"],"Settings":["设置"],"Learn More":["了解更多"],"Disconnect Jetpack":["断开 Jetpack 连接"],"Test your site’s compatibility with Jetpack.":["测试您的站点与 Jetpack 的兼容性。"],"Settings header\u0004Plugin Autoupdates":["插件自动更新"],"Settings header\u0004Downtime monitoring":["停机时间监控"],"Settings header\u0004Privacy Settings":["隐私设置"],"Settings header\u0004WordPress.com toolbar":["WordPress.com 工具栏"],"Settings header\u0004Composing":["撰写"],"Settings header\u0004Site stats":["站点统计信息"],"Settings header\u0004Search engine optimization":["搜索引擎优化"],"Settings header\u0004Google Analytics":["Google Analytics(分析)"],"Settings header\u0004Sharing buttons":["共享按钮"],"Settings header\u0004Publicize connections":["Publicize 连接"],"Settings header\u0004Like buttons":["“赞”按钮"],"Settings header\u0004WordPress.com log in":["WordPress.com 登录"],"Settings header\u0004Brute force attack protection":["强力攻击保护"],"Settings header\u0004Backups and security scanning":["备份和安全扫描"],"Settings header\u0004Spam filtering":["垃圾邮件过滤"],"Navigation item.\u0004Performance":["性能"],"Navigation item.\u0004My Plan":["我的套餐"],"Navigation item.\u0004Dev Tools":["开发者工具"],"Navigation item.\u0004Settings":["设置"],"Navigation item.\u0004Discussion":["讨论"],"Navigation item.\u0004Traffic":["流量"],"Navigation item.\u0004Sharing":["共享"],"Navigation item.\u0004At A Glance":["概览"],"Navigation item.\u0004Plans":["套餐"],"Navigation item.\u0004Writing":["撰写"],"Navigation item.\u0004Reset Options (dev only)":["重置选项(仅限开发版本)"],"Navigation item.\u0004Security":["安全性"],"Navigation item.\u0004At a Glance":["概览"],"Search term.\u0004terms of service":["服务条款"],"Search term.\u0004tos":["服务条款"],"Search term.\u0004gdpr":["gdpr"],"Search term.\u0004data":["数据"],"Search term.\u0004tracks":["跟踪"],"Search term.\u0004privacy":["隐私"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["升级"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["升级"],"Button caption\u0004Saving…":["正在保存..."],"Button caption\u0004Save settings":["保存设置"],"A heading for a block of related posts.\u0004Related":["相关文章"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["预览"],"A caption for a button to cancel disconnection.\u0004Stay connected":["保持连接"],"A caption for a button to disconnect.\u0004Disconnect":["断开连接"],"Short warning message\u0004Updates needed":["需要更新"],"Short label appearing near a paid feature configuration block.\u0004Paid":["已付"],"A header for a preview area in the configuration screen.\u0004Preview":["预览"],"Ads header\u0004Ads":["广告"],"Dashboard widget header\u0004Site connection":["站点连接"],"Dashboard widget header\u0004Account connection":["帐户连接"],"A caption for a small button to fix security issues.\u0004Threats":["威胁"],"A caption for a small button to fix security issues.\u0004FIX":["修复"],"Short warning message about new threats found.\u0004Threats found!":["发现威胁!"],"Short warning message about site having no security scan.\u0004No scanning":["无扫描"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["升级"],"Short message informing user that the site is secure.\u0004Secure":["安全"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["密钥无效"],"Caption for a button to set up a feature.\u0004Set up":["设置"],"verb\u0004Copy":["复制"],"Shorthand for Privacy Policy.\u0004Privacy":["隐私权"],"Shorthand for Terms of Service.\u0004Terms":["条款"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["调试"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["垃圾评论已拦截。"]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-zh_HK-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-zh_HK-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index c3f59c6b..00000000
--- a/plugins/jetpack/languages/json/jetpack-zh_HK-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=1; plural=0;","lang":"zh_HK"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":[""],"We’re now collecting stats and securing your site. Welcome aboard.":[""],"{{a}}Skip, and explore features individually{{/a}}.":[""],"Jetpack Business Plan":[""],"Jetpack Premium Plan":[""],"Jetpack Personal Plan":[""],"Get started with hassle-free design, stats, and performance tools.":[""],"Welcome to Jetpack Free":[""],"Jetpack Free Plan":[""],"Explore Jetpack plans":[""],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":[""],"Jetpack offers so much more":[""],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":[""],"Support documentation":[""],"Chat bubbles representing getting in touch with support":[""],"Site Activity":[""],"Start publicizing now":[""],"Reach a wider audience by automatically sharing your posts on social media.":[""],"Increase traffic to your site":[""],"Explore free themes":[""],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":[""],"A wide variety of themes and tools to customize a site":[""],"Set up your site security":[""],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":[""],"Site stats showing an evolution in traffic and engagement":[""],"A hand holding a loupe":[""],"A chart showing an healthy increase in earnings":[""],"Interface showing a chronological list of changes and updates in a site":[""],"A cloud with multiple types of content floating around it":[""],"A folder holding real comments":[""],"Make your site faster":[""],"Load pages faster by serving your images from our global network of servers.":[""],"A fast and performant website":[""],"A secure site, locked and protected by Jetpack":[""],"These settings won't apply to related posts added using the block editor.":[""],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":[""],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":[""],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":[""],"Add Like buttons to your posts and pages":[""],"When visitors enjoy your content, let them show it with a Like.":[""],"Explore your Jetpack Professional plan!":[""],"Explore your Jetpack Premium plan!":[""],"Explore your Jetpack Personal plan!":[""],"Create account":[""],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":[""],"Real-time, automated backups (unlimited storage)":[""],"Compose content the way you want to and streamline your publishing experience.":[""],"Add a portfolio item":[""],"Add a testimonial":[""],"Maximize your site’s visibility in search engines and view traffic stats in real time.":[""],"Create a Jetpack account to use this feature":[""],"Share your content on social media and increase audience engagement.":[""],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":[""],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":[""],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":[""],"Error enabling Site accelerator. %(error)s":[""],"Site accelerator is now speeding up your site!":[""],"Enabling Site accelerator…":[""],"Error disabling site accelerator. %(error)s":[""],"Site accelerator is no longer speeding up your site!":[""],"Disabling site accelerator…":[""],"Load pages faster, optimize images, and speed up your visitors’ experience.":[""],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":[""],"High-speed, high-definition video hosting with no third-party ads.":[""],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":[""],"Marketing Automation":[""],"Activate Jetpack Search":[""],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":[""],"Start earning":[""],"WordAds lets you earn money by displaying promotional content. Start earning today.":[""],"Spam is automatically blocked from your comments.":[""],"Spam Filtering":[""],"Browse premium themes":[""],"Access hundreds of beautifully designed premium themes at no extra cost.":[""],"Try a premium theme":[""],"View settings":[""],"Create a Jetpack account to view your email followers":[""],"Open your site to comments and invite subscribers to get alerts about your latest work.":[""],"Manage security settings":[""],"Built-in Performance":[""],"Jetpack is ready for the new WordPress editor":[""],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":[""],"Build your Jetpack site with blocks":[""],"A new editor? Yes! {{a}}Learn more{{/a}}.":[""],"The features you rely on, adapted for the new WordPress editor.":[""],"Take me to the new editor":[""],"Testing Jetpack Connection":[""],"There was an error testing Jetpack. Error: %(error)s":[""],"New in Jetpack!":[""],"Speed up static file load times":[""],"Speed up image load times":[""],"Enable site accelerator":[""],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":[""],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":[""],"View your site activity":[""],"View a chronological list of all the changes and updates to your site in an organized, readable way.":[""],"Manually Verify ":[""],"Verify with Google":[""],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":[""],"or":[""],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":[""],"Your site is verified with Google":[""],"Site failed to verify: %(error)s":[""],"Verifying...":[""],"Add faster, more advanced searching to your site with Jetpack Professional.":[""],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":[""],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":[""],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":[""],"Jetpack Search supports many customizations.":[""],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":[""],"Site is verified":[""],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":[""],"Spam filtering and priority support.":[""],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":[""],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":[""],"Custom ads.txt entries":[""],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}Jetpack 專業版提供可讓你無限制使用超過 200 種進階版 WordPress 佈景主題,助你建立夢寐以求的網站,既精美又有效率。{{/p}}{{p}}Jetpack 專業版不只能讓你找到最完美的版面設計,還能讓你在使用過程中安心無慮:我們提供即時備份、自動掃描惡意軟體、國際專家團隊的優先支援服務,全力保護你的網站安全。{{/p}}"],"Introducing Premium Themes":["為你介紹進階版佈景主題"]," Premium Themes":["進階版佈景主題"],"Privacy information":["隱私權資訊"],"Enable Lazy Loading for images":["啟用延緩載入圖片功能"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":[""],"Performance & speed":["效能與速度"],"Enable high-speed, ad-free video player":["啟用高速的無廣告影片播放器"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["加入高解析度影片,讓你發佈的內容更加吸引。你可以透過 Jetpack 影片自訂媒體播放器,為訪客呈現高速、無廣告和品牌牌示的影片。WordPress.com 伺服器會託管你的影片,而且不會佔用你的託管方案空間!"],"Video":["影片"],"Carousel color scheme":["隨選顏色配置"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Exif 資料會為讀者顯示相片的額外技術詳細資料,例如焦距、光圈和 ISO。"],"Show photo Exif metadata in carousel (when available)":["在資料可用時,於隨選區顯示相片 Exif 中繼資料"],"Display images in a full-screen carousel gallery":["在全螢幕隨選區圖庫中顯示圖片"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["為你文章和頁面中的圖片建立全螢幕隨選區投影片。隨選區圖庫適用於行動裝置,同時鼓勵訪客與你的相片互動。"],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["WordPress.com 工具列會取代預設 WordPress 管理員工具列,以簡化你的 WordPress 操作流程。提供一鍵存取功能,讓你輕鬆管理你所有的網站、更新 WordPress.com 個人檔案、檢視通知,並在閱讀器中掌握你追蹤網站的最新動態。"],"Portfolios shortcode: [portfolio]":["作品集簡碼:[作品集]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["在你的網站上使用{{portfolioLink}}作品集{{/portfolioLink}}來展示你的佳作。如果你的佈景主題不支援 Jetpack 個人作品集,你仍然可以使用簡單的簡碼在網站上展示你的作品。"],"Testimonials shortcode: [testimonials]":["證言簡碼:[證言]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["在你的網站中加入{{testimonialLink}}證言{{/testimonialLink}}來吸引新的顧客。如果你的佈景主題不支援 Jetpack 證言,你仍然可以使用簡單的簡碼在網站上顯示證言。"],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["搜尋引擎目前無法存取你的網站。若要讓訪客存取你的網站,請檢查你的{{a}}閱讀設定{{/a}}並開啟「搜尋引擎可見度」。"],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["好消息:Jetpack 已自動將你的網站地圖傳送給所有主要搜尋引擎進行索引。"],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["網站地圖是 Google 或 Bing 等搜尋引擎索引你網站所使用的檔案。網站地圖可以協助改善網站在搜尋結果中的排名。啟用這項功能後,Jetpack 會建立你的網站地圖,並在網站內容變更時自動更新。"],"Configure related posts in the Customizer":["在自訂工具中設定相關文章"],"Highlight related content with a heading":["反白標示含有標題的相關內容"],"View security scan details":["檢視安全性掃描詳細資料"],"View backup history":["檢視備份記錄"],"Show a thumbnail image where available":["顯示可用的縮圖圖片"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["若需關於特定 Jetpack 功能如何使用資料和追蹤活動的詳細資訊,請參閱我們的{{privacyCenterLink}}隱私權中心{{/privacyCenterLink}}。"],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["我們會使用其他的追蹤工具,包括由第三方所提供的追蹤工具。{{cookiePolicyLink}}瞭解相關資訊{{/cookiePolicyLink}}及其管理方式。"],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["這類資訊有助我們改進產品、提供與你更加相關的行銷活動、帶來更為個人化的 WordPress.com 使用體驗;若要瞭解更多詳細內容,請參見我們的{{pp}}「隱私權政策」{{/pp}}。"],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["在登入你的 WordPress.com 帳號時,請將你的服務使用情況相關資訊與我們的分析工具分享。{{cookiePolicyLink}}瞭解更多資訊{{/cookiePolicyLink}}。"],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["這個功能是由網站管理員所管理。{{link}}瞭解更多{{/link}}。"],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["這個功能已由網站管理員停用。{{link}}瞭解更多{{/link}}。"],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["這個功能已由網站管理員啟用。{{link}}瞭解更多{{/link}}。"],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["網站管理員已停用 %(moduleName)s。{{link}}瞭解更多{{/link}}。"],"This feature has been disabled by a site administrator.":["這個功能已由網站管理員停用。"],"%(moduleName)s has been disabled by a site administrator.":["網站管理員已停用 %(moduleName)s。"],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["您可以使用廣告小工具刊登其他廣告。{{link}}立即試用!{{/link}}"],"Configure your notification settings":["調整你的通知設定"],"Monitor your site's downtime":["監控你的網站停機時間"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":[""],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["系統會定期對你網站的檔案進行掃描,確認是否有可能會損害你安全性和資料的未授權或可疑的。"],"Plugin needs updating.":["外掛程式需要更新。"],"%(number)s":["%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Jetpack 的外掛程式更新可讓您選擇要自動更新的外掛程式。"],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack 會最佳化你的圖片,並從與訪客距離最近的伺服器提供圖片。使用我們的全球內容傳遞網路可大幅提升網站的載入速度。"],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":[""],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Jetpack 備份功能可讓您輕鬆復原或下載特定時刻的備份。"],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet 會將你提交的留言和聯絡表單與我們的全球垃圾郵件資料庫進行檢查。"],"Privacy Information":["隱私權資訊"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["VideoPress 可讓你從電腦上傳影片,並由 WordPress.com 而非主機伺服器託管。你可以接著將這些影片插入自助託管的 Jetpack 網站。"],"Add the Search (Jetpack) widget to your sidebar":["新增搜尋 (Jetpack) 小工具至側邊欄"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["讓訪客快速篩選和排序相關搜尋結果,為訪客提供絕佳的搜尋體驗。"],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["啟用輕量且適用於手機的佈景主題,以顯示在訪客的行動裝置上。"],"Loads the next posts automatically when the reader approaches the bottom of the page.":["讀者閱讀到網頁底部時,可自動載入後續文章。"],"Allows you to publish new posts by sending an email to a special address.":["讓你可透過寄信至特定電子郵件地址來發佈新文章。"],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["使用 Markdown 語法,讓你撰寫含有連結、清單和其他樣式的內容。"],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["在撰寫時檢查內容的文法、拼字、錯別字和樣式。"],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["提供所需的隱藏標籤,以便將你的 WordPress 網站與多項服務進行驗證。"],"Displays information on your site activity, including visitors and popular posts or pages.":["顯示網站活動相關資訊,包括訪客身分以及熱門文章或頁面。"],"Allows you to optimize your site and its content for better results in search engines.":["讓你最佳化你的網站和內容,在搜尋引擎中顯示較佳結果。"],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["將你的 WordPress 網站與 Google Analytics 整合 (Google Analytics 是一個可提供關於流量、訪客和轉換洞察報告的平台)。"],"Displays high-quality ads on your site that allow you to earn income.":["在你的網站上顯示高品質廣告,讓你賺取收入。"],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["將分享按鈕新增至你的內容,讓訪客可以將文章分享至社交媒體網站。"],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["讓你將最新內容自動分享至社交媒體網站,包括 Facebook 和 Twitter。"],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["新增「讚」按鈕至你的內容,讓訪客能夠表達欣賞或高興的感受。"],"Allows registered users to log in to your site with their WordPress.com accounts.":["讓已註冊使用者能夠透過其 WordPress.com 帳號登入你的網站。"],"Protects your site from traditional and distributed brute force login attacks.":["保護你的網站不受傳統和分散式暴力破解攻擊。"],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["將你的網站備份至全球的 WordPress.com 伺服器,讓你在發生緊急情況或錯誤時還原內容。"],"Removes spam from comments and contact forms.":["從留言和聯絡表單移除垃圾留言。"],"We are committed to your privacy and security. ":["我們致力維護你的隱私權及安全。"],"View all Jetpack plans":["檢視所有 Jetpack 方案"],"Manage your plan":["管理你的方案"],"Your Plan":["你的方案"],"You’re currently on Jetpack %(plan)s.":["你目前使用的 Jetpack 方案為 %(plan)s。"],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["允許讀者訂閱你的文章和留言,並透過電子郵件接收新內容的通知。"],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["使用包含社交媒體登入選項的全新留言系統,取代標準的 WordPress 留言表單。"],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":[""],"Add Search (Jetpack) Widget":["新增搜尋 (Jetpack) 小工具"],"Jetpack Search is powering search on your site.":["「Jetpack 搜尋」為你的網站提供搜尋功能。"],"Manage your plugins":["管理你的外掛程式"],"Moderate comments":["審核留言"],"Error updating privacy settings. %(error)s":["更新隱私設定時發生錯誤。%(error)s"],"Updated privacy settings.":["已更新隱私設定。"],"Updating privacy settings…":["正在更新隱私設定…"],"Add Jetpack Search Widget":["新增 Jetpack 搜尋小工具"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":[""],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["完整安全性套件、行銷與營收自動化工具、無限影片託管、無限使用佈景主題、增強的搜尋功能及優先支援。"],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["完整安全性套件、行銷與營收自動化工具、無限影片託管及優先支援。"],"Daily backups, spam filtering, and priority support.":["每日備份、過濾垃圾訊息和優先支援。"],"Always-on Security":["全天候安全性"],"Activate video hosting":[""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["透過無限空間、一鍵復原、自動安全掃描功能及優先支援服務,即時備份所有網站資料。"],"Design the perfect website":["設計完美的網站"],"Set up Jetpack":["設定 Jetpack"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["透過無限制空間、一鍵復原以及自動安全掃描功能,即時備份所有網站資料。"],"Jetpack Search":["Jetpack 搜尋"],"Jetpack version %(version)s":["Jetpack 版本 %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["你的網站已即時備份,並定期執行安全性威脅掃描。"],"Daily backup of all your site data with unlimited space and one-click restores":["透過無限制的空間每日備份所有網站資料,還有一鍵復原"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["透過無限制的空間即時備份所有網站資料、一鍵復原、自動安全性掃描、一鍵排除所有威脅及優先支援服務。"],"View your security activity":["檢視你的安全性活動"]," (powered by VaultPress).":[" (powered by VaultPress)。"],"Customize Search Widget":["自訂搜尋小工具"],"Please correct the issue below and try again.":["請更正以下列出的問題,然後再試一次。"],"We are making sure your site stays free of security threats. You will be notified if we find one.":["我們會確保你的網站遠離安全性威脅。如果我們發現安全性威脅,你將收到通知。"],"Your site is being backed up in real-time.":["你的網站正在實時備份。"],"Jetpack version":["Jetpack 版本 "],"{{a}}View your site's activity{{/a}} in a single feed.":["以單一摘要方式{{a}}檢視網站活動{{/a}}。"],"Activity":["活動"],"Confirm each new phrase you add by pressing enter.":["按下 Enter 以逐個確認你新增的字詞。"],"{{a}}View details{{/a}}":["{{a}}檢視詳情{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":[""],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["使用 Jetpack 專業版,你便可以建立完美的網站,其中有超過 300 種專業設計的 WordPress 佈景主題,包括超過 100 種進階版佈景主題。使用各種小工具自訂你的內容,或將無限制的影片新增到你的文章和頁面 -- 不顯示任何廣告或浮水印。"],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":[""],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":[""],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["開始探索 Jetpack 專業版,瞭解新方案的所有優點。"],"Install premium themes":["安裝高級佈景主題"],"Review SEO features":["檢閱 SEO 功能"],"Welcome Professional":["歡迎使用專業方案"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["感謝你選擇 Jetpack 進階版方案。Jetpack 現在正在備份你的網站、掃描安全性威脅,並啟用獲利功能。"],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["你可以使用 Jetpack 進階版打造完美的網站,無論其用途為何。使用 200 種以上的免費佈景主題自訂你的網站外觀,或使用高達 13 GB 的高畫質影片來增強內容 -- 全部皆以沒有任何廣告或浮水印的方式託管。"],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["你可以使用 Jetpack 功能強大的分享工具,在社交媒體上分享最新文章,也可以將內容安排在由你選擇的任何日期或時間重新分享。隨著曝光追蹤不斷增加,你可以使用付款按鈕和廣告等工具來拓展你的業務。"],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["開始探索 Jetpack 進階版,瞭解新方案的所有優點。"],"Monetize your site with ads":["透過廣告為你的網站營利"],"Welcome Premium":["歡迎使用進階方案"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["感謝你選擇 Jetpack 個人版方案。Jetpack 現在正在備份你的網站,並掃描安全性威脅。"],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["使用 Jetpack 個人版,你便可以存取超過 100 種免費的專業設計 WordPress 佈景主題。選擇最適合你網站的佈景主題,並自訂顏色、圖片,或新增各種新的小工具。"],"Got it":[""],"Welcome personal":["歡迎使用個人方案"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":[""],"Jetpack Stats People":["Jetpack 統計使用者"],"Hello there! Your stats have been activated.":["你好!你的統計功能已啟用。"],"Just give us a little time to collect data so we can display it for you here.":["請稍候片刻,待我們收集完資料,很快就會在這裡顯示統計資料。"],"Okay, got it!":["我知道了!"],"Display ads below posts on":["在文章下方顯示廣告"],"Additional ad placements":["其他廣告版位"],"Top of each page":["每個頁面的頂端"],"Second ad below post":["文章下方第二則廣告"],"Archives":["彙整"],"Explore Professional":["探索專業版功能"],"Compare All Plans":["比較所有方案"],"Person with laptop":["使用筆記本電腦的訪客"],"Your Jetpack site is ready to go!":["你的 Jetpack 網站已經準備就緒!"],"Stars":["恆星"],"Jupiter":["木星"],"Welcome to Jetpack Personal":["歡迎使用 Jetpack 個人版"],"Welcome to Jetpack Premium":["\t歡迎使用 Jetpack 進階版"],"Welcome to Jetpack Professional":["歡迎使用 Jetpack 專業版"],"Schedule posts":[""],"Activate Publicize":["啟用 Publicize"],"Your site is backed up.":["你的網站已備份。"],"Image Performance":["圖片效能"],"Get WordPress Apps for every device":["下載適用於各種裝置的 WordPress 應用程式"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["從單一控制台管理所有網站:無論你身在何處,都可以發表內容、追蹤統計數據、審核留言,還能使用其他許多功能。"],"I already use this app.":["我已經使用此應用程式。"],"Create address":["建立位址"],"Priority support":["優先支援服務"],"Add sharing buttons to your posts":["將分享按鈕新增至你的文章"],"Automatically share your posts to social networks":["自動將你的文章分享到社交網站"],"Updating settings…":["正在更新設定…"],"Updating Post by Email address…":["正在透過電子郵件地址更新文章…"],"Your paid plan gives you access to prioritized Jetpack support.":["你的付費方案給予你優先的 Jetpack 支援。"],"You have paid for backups but they're not yet active.":["你已購買備份功能,但尚未啟用。"],"You have paid for backups and security scanning but they’re not yet active.":["你已購買備份及安全掃描功能,但尚未啟用。"],"Click \"Set Up\" to finish installation.":["按一下「設定」以完成安裝。"],"Checking site status…":["正在檢查網站狀態…"],"Pages":["頁面"],"We're here to help":["我們樂意提供協助"],"Jetpack comes with free, basic support for all users.":["Jetpack 為所有使用者提供免費的基本支援。"],"Ask a question":["提出疑問"],"Search our support site":["搜尋我們的支援網站"],"Get a faster resolution to your support questions.":["讓您的支援問題更快獲得解決。"],"Host fast, high-quality, ad-free video.":["託管快速、高品質、無廣告的影片。"],"Generate income with high-quality ads.":["以高品質廣告賺取收入。"],"Real-time site backups and automatic threat resolution.":["即時網站備份與自動排除威脅。"],"Protect against data loss, malware, and malicious attacks.":["防禦資料遺失、惡意軟體及惡意攻擊。"],"Integrate easily with Google Analytics.":["輕鬆與 Google Analytics (分析) 進行整合。"],"Help your content get found and shared with SEO tools.":["使用 SEO 工具協助他人找到及分享您的內容。"],"Protect your site from spam.":["保護您的網站不受垃圾訊息攻擊。"],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["此網站未與 WordPress.com 連結。請要求網站管理員連結。"],"Spam filtering":["過濾垃圾訊息"],"Daily, automated malware scanning":["每日自動掃描惡意軟體"],"Daily, automated backups (unlimited storage)":["每日自動備份 (無限儲存空間)"],"Daily, automated malware scanning with automated resolution":["每日自動掃描惡意軟體,並自動排除威脅"],"Unlimited, high-speed video hosting":[""],"SEO preview tools":["SEO 預覽工具"],"Site stats, related content, and sharing tools":["網站統計資料、相關內容與分享工具"],"Brute force attack protection and downtime monitoring":["保護您免受暴力破解密碼攻擊並監控運作時間"],"Unlimited, high-speed image hosting":["無限高速圖片託管"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["中斷 %(siteName)s 與 WordPress.com 的連結後,您將無法再存取下列項目:"],"Read more about Jetpack benefits":["深入瞭解 Jetpack 的優點"],"An Automattic Airline":["一個 Automattic 主公司"],"Manage site connection":["管理網站連結"],"Connect your account to WordPress.com to view more stats":["將您的帳戶與 WordPress.com 連結,即可查看更多統計資料"],"Theme enhancements":["佈景主題增強項目"],"Load more posts using the default theme behavior":["使用預設佈景主題行為載入更多文章"],"Load more posts in page with a button":["使用按鈕在頁面中載入更多文章"],"Load more posts as the reader scrolls down":["隨著讀者向下捲動頁面載入更多文章"],"Theme support required.":["需要佈景主題支援。"],"Learn more about adding support for Infinite Scroll to your theme.":["可於佈景主題中加入無限捲動支援。立即深入瞭解。"],"Use excerpts instead of full posts on front page and archive pages":["在首頁和存檔頁面使用摘要而非全文"],"Show featured images":["顯示特色圖片"],"Enable the WordPress.com toolbar":["啟用 WordPress.com 工具列"],"Writing tools available to you will be shown here when an administrator enables them.":["管理員啟用撰寫工具時,您的可用撰寫工具會顯示在這裡。"],"Portfolios":["作品集"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["請注意,{{b}}不一定要使用這些服務驗證你的網站{{/b}},才可以讓搜尋引擎將你的網站加入索引。若要使用進階搜尋引擎工具,並以提供的服務驗證你的網站,請在下方貼上 HTML 標籤程式碼。如果遇到任何問題,請閱讀{{support}}完整指示{{/support}}。支援的驗證服務:{{google}}Google Search Console{{/google}}、{{bing}}Bing Webmaster Center{{/bing}}、{{pinterest}}Pinterest Site Verification{{/pinterest}} 及 {{yandex}}Yandex.Webmaster{{/yandex}}。"],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["產生 XML 網站地圖"],"Collecting valuable traffic stats and insights":["收集寶貴的流量統計資料和洞察報告"],"The image helps collect stats, but should work when hidden.":["圖片有助於蒐集統計資料,但隱藏時應正常運作。"],"Count logged in page views from":["計算從下列時間起算的登入頁面瀏覽量:"],"Allow stats reports to be viewed by":["可查看統計報告的使用者:"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["如果你想要進一步控制,可以視需要調整這些設定。閱讀{{a}}最佳化你網站的 SEO{{/a}}深入瞭解相關做法。"],"Configure your SEO settings":["調整你的 SEO 設定"],"In \"Upgrade\"":["在「升級」中"],"Configure your Google Analytics settings":["調整你的 Google Analytics (分析) 設定"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["在首頁的第一篇文章或每個頁面及文章的結尾顯示廣告。將其他廣告放在網站頂端及任何小工具區域,以增加你的收入。"],"Enable ads and display an ad below each post":["啟用廣告並在每篇文章底下顯示廣告"],"Configure your sharing buttons":["設定你的分享按鈕"],"Connect your social media accounts":["連結你的社交媒體帳戶"],"Match accounts using email addresses":["使用電子郵件地址比對帳戶"],"Require accounts to use WordPress.com Two-Step Authentication":["需要帳戶才能使用 WordPress.com 兩步驟驗證"],"Add to whitelist":["新增至允許清單"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["你可在允許清單中新增 IP 位址或一系列的位址,以避免這些位址受到 Jetpack 封鎖。可接受 IPv4 和 IPv6。若要指定範圍,請輸入最低值及最高值,並以破折號分隔。範例:12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["你的網站已備份,並已排除所有威脅。"],"Checking your spam protection…":["正在檢查你的垃圾訊息防護…"],"Fetching key…":["正在擷取金鑰…"],"Your site needs an Antispam key.":["你的網站需要 Antispam 金鑰。"],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["你的 Antispam API 金鑰發生問題。{{a}}瞭解更多{{/a}}。"],"Your site is not protected from spam.":["你的網站未啟用垃圾訊息防護。"],"Your Antispam key is valid.":["你的 Antispam 金鑰有效。"],"Your site is protected from spam.":["你的網站已啟用垃圾訊息防護。"],"Checking key…":["正在檢查金鑰…"],"Your API key":["你的 API 金鑰"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["如果你還沒有 API 金鑰,則請{{a}}到這裡取得你的 API 金鑰{{/a}},系統會引導你完成申請程序。"],"No search results found for %(term)s":["找不到「%(term)s」的搜尋結果"],"Enter a search term to find settings or close search.":["輸入搜尋字詞以尋找設定或關閉搜尋。"],"Connections":["連結"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["你的網站目前為開發模式,因此無法連結 WordPress.com。"],"Your site is connected to WordPress.com.":["你的網站已與 WordPress.com 連結。"],"You are the Jetpack owner.":["你是 Jetpack 擁有者。"],"Connected as {{span}}%(username)s{{/span}}":["已以 {{span}}%(username)s{{/span}} 的身分連結"],"View your Email Followers":["查看你的電子郵件關注者"],"Color scheme":["顏色配置"],"Enable Markdown use for comments.":["啟用 Markdown 的留言功能。"],"Updated settings.":["已更新設定。"],"Error updating settings. %(error)s":["更新設定時發生錯誤。(%個錯誤)"],"Regenerated Post by Email address.":["透過電子郵件地址重新產生文章。"],"Error regenerating Post by Email address. %(error)s":["透過電子郵件地址重新產生文章時發生錯誤。%(error)s"],"Updated settings. Refreshing page…":["已更新設定。正在重新整理頁面…"],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["目前處於{{a}}開發模式{{/a}} (已停用部分功能),因為:{{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}已啟用 jetpack_development_mode 篩選{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}已定義 JETPACK_DEV_DEBUG 常數{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}你的網站 URL 少了一個點 (例如:http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics 這項免費服務可使用流量中的不同洞察報告來補充{{a}}內建統計資料{{/a}}。WordPress.com 統計資料與 Google Analytics 會透過不同方法來識別及追蹤你網站上的活動,所以它們顯示的總點閱次數、總瀏覽次數等資料通常會有些微差異。"],"Google Analytics":["Google 分析"],"Configure Google Analytics":["設定 Google Analytics"],"Activate Google Analytics":["啟用 Google Analytics"],"Download the free apps":["下載免費Apps"],"Upgrade Focus: VideoPress For Weddings":["升級重點:婚禮適用的 VideoPress"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}你現在可以在自訂工具中設定相關文章。{{ExternalLink}}試試看!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["預設情況下,廣告會顯示在每個頁面、文章,或首頁第一篇文章的底部。你可以將廣告新增到網站頂端或任何小工具區域,以增加你的收入!"],"Display an ad unit at the top of your site.":["在網站頂端顯示廣告單元。"],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["啟用廣告,即代表你同意 Automattic Ads 的{{link}}服務條款{{/link}}。"],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["你的伺服器設定有誤,這代表 Jetpack Protect 無法有效保護你的網站。"],"In \"Mobile\"":["在「行動」中"],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}設定你在 WordPress.com 的 Monitor 通知設定{{/link}}"],"View your earnings":["查看你的收入"],"Configure site SEO":[""],"Activate SEO tools":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["若要開始使用,請按一下文章編輯器的「新增媒體」並上傳影片,剩下的工作就交給我們處理!"],"Video Hosting":["影片託管"],"SEO Tools":["SEO 工具"],"Advanced SEO tools to help your site get found when people search for relevant content.":["進階 SEO 工具有助於讓你的網站顯示在使用者的相關內容搜尋結果中。"],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["在網站上傳無廣告和無品牌影片最輕鬆的方式。你可獲得影片播放和分享次數的統計資料,而且播放器為輕量型且回應靈敏。"],"You are running Jetpack on a staging server.":["你正在暫存伺服器上執行 Jetpack。"],"More Info":["更多資訊"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}從「分享模組設定」管理按讚次數的可見度{{/a}}"],"Your current IP: %(ip)s":["你目前的IP:%(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["本分頁中有未儲存的設定,如果離開,這些設定便會遺失。要繼續嗎?"],"This will reset all Jetpack options, are you sure?":["這樣會重設所有的 Jetpack 選項,你確定嗎?"],"Search for a Jetpack feature.":["搜尋 Jetpack 功能。"],"Configure your Security Scans":["設定安全性掃描"],"Subscriber":["訂閱者"],"Big iPhone/iPad Update Now Available":["有重大的 iPhone/iPad 更新可供使用"],"The WordPress for Android App Gets a Big Facelift":["Android 專用的 WordPress 應用程式已全面翻新"],"WordPress.com Likes are:":["WordPress.com 按讚功能:"],"Comments headline":["評論標題"],"A few catchy words to motivate your readers to comment.":["使用一些吸引人的字詞,鼓勵讀者發表評論。"],"Show a \"follow blog\" option in the comment form":["在評論表單中顯示「關注網誌」選項"],"Show a \"follow comments\" option in the comment form":["在評論表單中顯示「關注評論」選項"],"Put a chart showing 48 hours of views in the admin bar":["在管理員列中放置一張圖表,顯示 48 小時內的瀏覽次數"],"Hide the stats smiley face image":["隱藏統計資料笑臉圖片"],"Whitelisted IP addresses":["在允許清單中的 IP 位址"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["在手機佈景主題的頁尾對 WordPress 行動應用程式顯示一則促銷活動"],"Copied!":["已複製!"],"Highlight and copy the following text to your clipboard:":["將以下文字反白標示,複製貼到你的剪貼簿:"],"Regenerate address":["重新產生位址"],"Automatically proofread content when: ":["自動校對內容:"],"A post or page is first published":["第一次發表文章或網頁時"],"A post or page is updated":["文章或網頁更新時"],"Automatic Language Detection":["自動語言偵測"],"The proofreader supports English, French, German, Portuguese and Spanish.":["校對服務支援英文、法文、德文、葡萄牙文和西班牙文。"],"Enable proofreading for the following grammar and style rules: ":["啟用以下的文法和樣式規則校對功能:"],"Add a phrase":["新增字詞"],"Cheatin' uh?":["喂!別偷跑喔!"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}你願意告訴我們為什麼未在這份{{a}}含有 2 個問題的調查{{/a}}中完成 Jetpack 連結嗎?{{/p}}{{p}}我們的免費安全性與流量功能需要 Jetpack 連結才能運作。{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["歡迎使用 {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["你的 Jetpack 已連結。"],"You're fueled up and ready to go, Jetpack is now active.":["你已準備就緒,Jetpack 現已啟用。"],"You're fueled up and ready to go.":["你已準備就緒。"],"You are currently running a development version of Jetpack.":["你目前執行的是開發版本的 Jetpack。"],"Submit Beta feedback":["送出測試版意見回饋"],"What would you like to see on your Jetpack Dashboard?":["你希望你的 Jetpack 控制台顯示哪些內容?"],"Let us know!":["請讓我們知道!"],"Saving…":["儲存中…"],"Save Settings":["儲存設定"],"Jetpack Stats Icon":["Jetpack 統計圖示"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}啟用網站統計{{/a}}可查看詳細的統計資料、讚數、關注者和訂閱者等內容!{{a1}}瞭解詳情{{/a1}}"],"Activate Site Stats":["啟用網站統計"],"Security Scanning":["安全性掃描"],"Site Backups":["網站備份"],"Upgrade":["升級"],"ACTIVE":["啟用中"],"Your site is on Development Mode":["你的網站目前為開發模式"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["連結之後,你可以升級為付費方案以使用世界級的安全性、垃圾郵件防護工具以及優先支援服務。"],"View your spam stats":["檢視垃圾評論統計資料"],"View your security dashboard":["檢視安全性控制台"],"The site is in Development Mode, so you can not connect to WordPress.com.":["網站目前為開發模式,因此你無法連結 WordPress.com。"],"Link your account to WordPress.com to get the most out of Jetpack.":["將帳戶連結到 WordPress.com 即可更完善地運用 Jetpack 的功能。"],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["如需自動且全面的安全性威脅掃描,請{{a}}安裝並啟用{{/a}} VaultPress。"],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["如需自動且全面的安全性威脅掃描,請{{a}}升級帳戶{{/a}}。"],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack 正在主動阻擋惡意登入嘗試。這裡很快就會顯示資料!"],"Total malicious attacks blocked on your site.":["你網站阻擋的惡意攻擊總計。"],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}啟用 Protect{{/a}} 可防止你的網站受到惡意登入嘗試的侵擾。"],"All plugins are up-to-date. Awesome work!":["所有外掛程式都是最新版本。做得好!"],"Jetpack is improving and optimizing your image speed.":["Jetpack 正在改善和最佳化你的圖片速度。"],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack 正在監控你的網站。如果我們發現你的網站停機,你就會收到一封電子郵件。"],"Security":["安全性"],"Performance":["效能"],"Backups":["備份"],"{{a}}View backup details{{/a}}.":["{{a}}檢視備份詳細資料{{/a}}。"],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["若要自動備份整個網站,請{{a}}安裝並啟用{{/a}} VaultPress。"],"Unavailable in Dev Mode.":["開發模式中無法使用。"],"Spam Protection":["垃圾訊息防護"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["如需最新的垃圾訊息防護,請{{a}}安裝 Akismet{{/a}}。"],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["如需最新的垃圾訊息防護,請{{a}}啟用 Akismet{{/a}}。"],"Invalid key":["無效金鑰"],"Unavailable in Dev Mode":["開發模式中無法使用"],"Activating recommended features…":["正在啟用推薦的功能…"],"Recommended features active.":["推薦的功能已啟用。"],"Recommended features failed to activate. %(error)s":["推薦的功能無法啟用。%(error)s"],"Activating %(slug)s…":["正在啟用 %(slug)s…"],"%(slug)s has been activated.":["%(slug)s 已啟用。"],"%(slug)s failed to activate. %(error)s":["%(slug)s 無法啟用。%(error)s"],"Deactivating %(slug)s…":["正在停用 %(slug)s…"],"%(slug)s has been deactivated.":["%(slug)s 已停用。"],"%(slug)s failed to deactivate. %(error)s":["%(slug)s 無法停用。%(error)s"],"Updating %(slug)s settings…":["正在更新 %(slug)s 設定…"],"Updated %(slug)s settings.":["已更新 %(slug)s 設定。"],"Error updating %(slug)s settings. %(error)s":["更新 %(slug)s 設定時發生錯誤。%(error)s"],"Updating %(slug)s address…":["正在更新 %(slug)s 位址…"],"Regenerated %(slug)s address .":["已重新產生 %(slug)s 位址。"],"Error regenerating %(slug)s address. %(error)s":["重新產生 %(slug)s 位址時發生錯誤。%(error)s"],"Resetting Jetpack options…":["正在重設 Jetpack 選項…"],"Options reset.":["選項已重設。"],"Options failed to reset.":["無法重設選項。"],"There was an error disconnecting Jetpack. Error: %(error)s":["中斷 Jetpack 連結時發生錯誤。錯誤:%(error)s"],"Unlinking from WordPress.com":["正在從 WordPress.com 取消連結"],"Unlinked from WordPress.com.":["已從 WordPress.com 取消連結。"],"Error unlinking from WordPress.com. %(error)s":["從 WordPress.com 取消連結時發生錯誤。%(error)s"],"At A Glance":["總覽"],"Clichés":["陳腔濫調"],"Dashboard":["控制台"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["可以告訴我們原因嗎?只要{{a}}回答兩個簡單的問題,就{{/a}}能協助我們改善 Jetpack。"],"Automattic's Privacy Policy":["Automattic 的隱私權保護政策"],"WordPress.com Terms of Service":["WordPress.com 服務條款"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}啟用{{/a}}以提升圖片的效能和速度。"],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}開啟外掛程式自動更新{{/a}}"],"Plugin Updates":["外掛程式更新"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["若要自動備份整個網站,請{{a}}升級您的帳戶{{/a}}。"],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["糟糕!你的 Akismet 金鑰遺失或無效。{{akismetSettings}}前往 Akismet 設定以進行修正{{/akismetSettings}}。"],"No threats found, you're good to go!":["沒有找到威脅,你可以開始使用了!"],"{{a}}Contact Support{{/a}}":["{{a}}聯絡支援團隊{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}到 VaultPress.com 檢視詳細資料{{/a}}"],"Uh oh, %(number)s threat found.":["糟糕,找到了 %(number)s 個威脅。"],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}啟用監控{{/a}}可在網站停機時接收通知。"],"Loading…":["載入中…"],"Downtime monitoring":["停機監控"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}檢視更多 WordPress.com 統計資料{{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}檢視舊版統計{{/button}}"],"All-time comments":["全時段評論次數"],"All-time views":["全時段瀏覽次數"],"%(number)s View":["%(number)s 次瀏覽"],"Best overall day":["全天最佳"],"Views today":["今天的瀏覽次數"],"Months":["月"],"Weeks":["週"],"Days":["天"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["載入統計資料時發生問題。請稍後再試,或立即到 WordPress.com {{a}}檢視你的統計資料{{/a}}"],"Click to view detailed stats.":["按一下可檢視詳細的統計資料。"],"Views: %(numberOfViews)s":["瀏覽次數:%(numberOfViews)s"],"Week of %(date)s":["%(date)s 當週"],"Site Security":["網站安全"],"Activate recommended features":["啟用推薦的功能"],"Link to WordPress.com":["連結到 WordPress.com"],"Unlink me from WordPress.com":["中斷我和 WordPress.com 的連結"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["連結 Jetpack 時發生問題。請再按一次「連結 WordPress.com」。"],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["我們在連接 Jetpack 時發生問題。請停用 Jetpack 外掛程式並重新啟用,然後重新連接一次。"],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["授權 Jetpack 期間,你必須保持登入自己的 WordPress 網誌。"],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}你的 Jetpack 發生故障。{{/s}}造成不便,敬請見諒。請稍後再試一次,如果持續發生此問題,請聯絡支援團隊並附上這段訊息:%(error_key)s"],"Disconnecting Jetpack":["正在中斷與 Jetpack 的連結"],"Learn more":["瞭解更多"],"Posts":["文章"],"Front page":["首頁頁面"],"Upload videos":[""],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["顯示文章之後的相關內容"],"Related":["相關"],"Save":["儲存"],"Email Address":["電子郵件位址"],"Media":["媒體"],"Themes":["佈景主題"],"Site Stats":["網誌統計"],"Sharing":["分享"],"Testimonials":["證言"],"Cancel":["取消"],"Comments":["評論"],"Ignored Phrases":["忽略縮寫"],"Use automatically detected language to proofread posts and pages":["使用自動檢測語言校對文章和分頁"],"Redundant Phrases":["冗餘短語"],"Phrases to Avoid":["忽略短語"],"Passive Voice":["被動語態"],"Jargon":["特殊用語"],"Hidden Verbs":["隱藏動詞"],"Double Negatives":["雙重否定"],"Diacritical Marks":["變音符號"],"Complex Phrases":["複雜短語"],"Bias Language":["偏差用語"],"English Options":["英文選項"],"Proofreading":["校對"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack 無法聯繫 WordPress.com:%(error_key)s。這通常代表著你網路主機的設定不正確。"],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com目前有問題,無法啟動你Jetpack。請稍後再試。"],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}你的 Jetpack 發生故障。{{/s}}無法將此網站連結到 WordPress.com。這通常代表你的網站並未允許公開存取 (localhost)。"],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["你的網站必須允許公開存取才能使用 Jetpack:%(error_key)s"],"You have successfully disconnected Jetpack":["你已成功與 Jetpack 中斷連結"],"Edit":["編輯"],"Connected":["已連結"],"Activate":["啟用"],"Active":["執行套用"],"Search":["搜尋"],"Settings":["設定"],"Learn More":["瞭解更多"],"Disconnect Jetpack":["中斷與 Jetpack 的連線"],"Test your site’s compatibility with Jetpack.":["測試你的網站與 Jetpack 的相容性。"],"Settings header\u0004Plugin Autoupdates":[""],"Settings header\u0004Downtime monitoring":["停機時間監控"],"Settings header\u0004Privacy Settings":["隱私設定"],"Settings header\u0004WordPress.com toolbar":["WordPress.com 工具列"],"Settings header\u0004Composing":["撰寫"],"Settings header\u0004Site stats":["網站統計資料"],"Settings header\u0004Search engine optimization":["搜尋引擎最佳化"],"Settings header\u0004Google Analytics":["Google Analytics (分析)"],"Settings header\u0004Sharing buttons":["分享按鈕"],"Settings header\u0004Publicize connections":["Publicize 連結"],"Settings header\u0004Like buttons":["「讚」按鈕"],"Settings header\u0004WordPress.com log in":["WordPress.com 登入"],"Settings header\u0004Brute force attack protection":["暴力破解密碼攻擊防護"],"Settings header\u0004Backups and security scanning":["備份與安全掃描"],"Settings header\u0004Spam filtering":["過濾垃圾訊息"],"Navigation item.\u0004Performance":[""],"Navigation item.\u0004My Plan":[""],"Navigation item.\u0004Dev Tools":["開發工具"],"Navigation item.\u0004Settings":["設定"],"Navigation item.\u0004Discussion":["討論"],"Navigation item.\u0004Traffic":["流量"],"Navigation item.\u0004Sharing":["分享"],"Navigation item.\u0004At A Glance":["總覽"],"Navigation item.\u0004Plans":["方案"],"Navigation item.\u0004Writing":["撰寫"],"Navigation item.\u0004Reset Options (dev only)":["重設選項 (僅限開發人員版本)"],"Navigation item.\u0004Security":["安全性"],"Navigation item.\u0004At a Glance":["總覽"],"Search term.\u0004terms of service":["服務條款"],"Search term.\u0004tos":["tos"],"Search term.\u0004gdpr":["gdpr"],"Search term.\u0004data":["資料"],"Search term.\u0004tracks":["追蹤"],"Search term.\u0004privacy":["隱私權"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["升級"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["升級"],"Button caption\u0004Saving…":["正在儲存…"],"Button caption\u0004Save settings":["儲存設定"],"A heading for a block of related posts.\u0004Related":["相關"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["預覽"],"A caption for a button to cancel disconnection.\u0004Stay connected":["保持連結"],"A caption for a button to disconnect.\u0004Disconnect":["中斷連結"],"Short warning message\u0004Updates needed":["需要更新"],"Short label appearing near a paid feature configuration block.\u0004Paid":["付費"],"A header for a preview area in the configuration screen.\u0004Preview":["預覽"],"Ads header\u0004Ads":["廣告"],"Dashboard widget header\u0004Site connection":["網站連結"],"Dashboard widget header\u0004Account connection":["帳戶連結"],"A caption for a small button to fix security issues.\u0004Threats":["威脅"],"A caption for a small button to fix security issues.\u0004FIX":["修正"],"Short warning message about new threats found.\u0004Threats found!":["找到威脅!"],"Short warning message about site having no security scan.\u0004No scanning":["無掃描"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["升級"],"Short message informing user that the site is secure.\u0004Secure":["安全"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["無效的金鑰"],"Caption for a button to set up a feature.\u0004Set up":["設定"],"verb\u0004Copy":["複製"],"Shorthand for Privacy Policy.\u0004Privacy":["隱私權"],"Shorthand for Terms of Service.\u0004Terms":["條款"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["偵錯"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["垃圾評論已封鎖。"]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/json/jetpack-zh_TW-1bac79e646a8bf4081a5011ab72d5807.json b/plugins/jetpack/languages/json/jetpack-zh_TW-1bac79e646a8bf4081a5011ab72d5807.json
deleted file mode 100644
index 7ff8a4fc..00000000
--- a/plugins/jetpack/languages/json/jetpack-zh_TW-1bac79e646a8bf4081a5011ab72d5807.json
+++ /dev/null
@@ -1 +0,0 @@
-{"locale_data":{"jetpack":{"":{"domain":"jetpack","plural_forms":"nplurals=1; plural=0;","lang":"zh_TW"},"Next, activate Jetpack’s recommended feature set to maximize your site’s security and performance. {{a}}Learn more about what’s included{{/a}}.":[""],"We’re now collecting stats and securing your site. Welcome aboard.":[""],"{{a}}Skip, and explore features individually{{/a}}.":[""],"Jetpack Business Plan":[""],"Jetpack Premium Plan":[""],"Jetpack Personal Plan":[""],"Get started with hassle-free design, stats, and performance tools.":[""],"Welcome to Jetpack Free":[""],"Jetpack Free Plan":[""],"Explore Jetpack plans":[""],"Get peace of mind of automated backups and priority support, reach a wider audience by using advanced SEO tools, monetize your site by running ads, and customize your site with any of our 200+ premium themes.":[""],"Jetpack offers so much more":[""],"Need help? Search our support site to find out about your site, your account, and how to make the most of WordPress.":[""],"Support documentation":[""],"Chat bubbles representing getting in touch with support":[""],"Site Activity":[""],"Start publicizing now":[""],"Reach a wider audience by automatically sharing your posts on social media.":[""],"Increase traffic to your site":[""],"Explore free themes":[""],"Get unlimited access to hundreds of professional themes, and customize your site exactly how you like it.":[""],"A wide variety of themes and tools to customize a site":[""],"Set up your site security":[""],"Prevent login attacks, and get instant notifications when there’s an issue with your site.":[""],"Site stats showing an evolution in traffic and engagement":[""],"A hand holding a loupe":[""],"A chart showing an healthy increase in earnings":[""],"Interface showing a chronological list of changes and updates in a site":[""],"A cloud with multiple types of content floating around it":[""],"A folder holding real comments":[""],"Make your site faster":[""],"Load pages faster by serving your images from our global network of servers.":[""],"A fast and performant website":[""],"A secure site, locked and protected by Jetpack":[""],"These settings won't apply to related posts added using the block editor.":["這些設定不適用於使用區塊編輯器新增的相關文章。"],"Duplicate existing posts, pages, Testimonials, and Portfolios. All the content will be copied including text, featured images, sharing settings, and more.":["重複現有的文章、頁面、證言和作品集。將複製包含文字、特色圖片、共用設定等在內的所有內容。"],"This site can't be connected to WordPress.com because it violates our {{a}}Terms of Service{{/a}}.":[""],"Connect your website to the social media networks you use and share your content across all your social accounts with a single click. When you publish a post, it will appear on all connected accounts.":[""],"Add Like buttons to your posts and pages":[""],"When visitors enjoy your content, let them show it with a Like.":[""],"Explore your Jetpack Professional plan!":["探索 Jetpack 專業版方案!"],"Explore your Jetpack Premium plan!":["探索 Jetpack 進階版方案!"],"Explore your Jetpack Personal plan!":["探索 Jetpack 個人版方案!"],"Create account":["建立帳號"],"Jetpack is powering your site, but to access all of its features you’ll need to create an account.":["你的網站採用 Jetpack 技術,但你必須建立帳號才能使用全部功能。"],"Real-time, automated backups (unlimited storage)":["即時自動備份 (無限的儲存空間)"],"Compose content the way you want to and streamline your publishing experience.":["隨心所欲撰寫內容,體驗更簡便的發佈流程。"],"Add a portfolio item":["新增作品集項目"],"Add a testimonial":["新增證言"],"Maximize your site’s visibility in search engines and view traffic stats in real time.":["在搜尋引擎中充分提升網站的可見度,以及即時檢視流量統計資料。"],"Create a Jetpack account to use this feature":["你必須建立 Jetpack 帳號才能使用此功能"],"Share your content on social media and increase audience engagement.":["在社交媒體上分享你的內容,與讀者建立密切關係。"],"Jetpack will continuously monitor your site, and alert you the moment downtime is detected.":["Jetpack 會持續監控你的網站,並在偵測到停機時發出警示。"],"When a plugin update is released, the best practice is to update that plugin right away. Choose which plugins you'd like to autoupdate so that your site stays secure.":["當外掛程式更新發佈時,最好立即更新該外掛程式。選擇要自動更新的外掛程式,以保障網站安全。"],"Keep your site safe with state-of-the-art security and receive notifications of technical problems.":["使用最先進的安全性保障網站安全,發生技術問題也能收到通知。"],"Error enabling Site accelerator. %(error)s":["啟用網站加速器時發生錯誤。%(error)s"],"Site accelerator is now speeding up your site!":["網站加速器正在為你的網站加速!"],"Enabling Site accelerator…":["正在啟用網站加速器..."],"Error disabling site accelerator. %(error)s":["停用網站加速器時發生錯誤。%(error)s"],"Site accelerator is no longer speeding up your site!":["網站加速器無法繼續為你的網站加速!"],"Disabling site accelerator…":["正在停用網站加速器..."],"Load pages faster, optimize images, and speed up your visitors’ experience.":["加快頁面載入速度,最佳化影像品質,為訪客提供更快速的瀏覽體驗。"],"Complement WordPress.com’s stats with Google’s in-depth look at your visitors and traffic patterns.":["透過 Google 深入分析你的訪客和流量模式,補充 WordPress.com 的統計資料。"],"High-speed, high-definition video hosting with no third-party ads.":["裝載高速度、高畫質且沒有第三方廣告的影片。"],"Schedule unlimited tweets, Facebook posts, and other social posts in advance.":["預先排程 Twitter 推文、Facebook 文章和其他社交文章,數量沒有限制。"],"Marketing Automation":["自動化行銷"],"Activate Jetpack Search":["啟用 Jetpack Search"],"Replace the default WordPress search with better results and filtering powered by Elasticsearch.":["使用 Elasticsearch 提供的服務,讓更優異的搜尋和篩選功能取代預設的 WordPress 搜尋。"],"Start earning":["開始獲利"],"WordAds lets you earn money by displaying promotional content. Start earning today.":["WordAds 可為你刊登宣傳內容,進而賺取收入。今天開始賺取收入。"],"Spam is automatically blocked from your comments.":["系統將自動封鎖留言中的垃圾訊息。"],"Spam Filtering":["過濾垃圾訊息"],"Browse premium themes":["瀏覽進階版佈景主題"],"Access hundreds of beautifully designed premium themes at no extra cost.":["不必額外付費,就能享有數百款精心設計的進階版佈景主題。"],"Try a premium theme":["嘗試使用進階版佈景主題"],"View settings":["檢視設定"],"Create a Jetpack account to view your email followers":["建立 Jetpack 帳號即可檢視電子郵件關注者"],"Open your site to comments and invite subscribers to get alerts about your latest work.":["打開網站即可留言,也可邀請使用者訂閱,如此一來,每當最新作品發佈時訂閱者就能收到警示。"],"Manage security settings":["管理安全性設定"],"Built-in Performance":["內建效能"],"Jetpack is ready for the new WordPress editor":["全新 WordPress 編輯器已可使用 Jetpack"],"Today, we are introducing the first wave of Jetpack-specific blocks built specifically for the new editor experience: Simple Payment button, Form, Map, and Markdown.":["我們會在今天推出第一波 Jetpack 專用區塊,讓你獲得全新的編輯器體驗。輕鬆付款按鈕、表單、地圖和 Markdown。"],"Build your Jetpack site with blocks":["使用區塊打造 Jetpack 網站"],"A new editor? Yes! {{a}}Learn more{{/a}}.":["全新編輯器?沒錯!{{a}}瞭解更多{{/a}}。"],"The features you rely on, adapted for the new WordPress editor.":["針對全新 WordPress 編輯器調整你常用的功能。"],"Take me to the new editor":["立即使用全新編輯器"],"Testing Jetpack Connection":[""],"There was an error testing Jetpack. Error: %(error)s":["測試 Jetpack 時發生錯誤。錯誤:%(error)s"],"New in Jetpack!":["Jetpack 全新內容!"],"Speed up static file load times":["加速靜態檔案載入時間"],"Speed up image load times":["加速影像載入時間"],"Enable site accelerator":["啟用網站加速器"],"Load pages faster by allowing Jetpack to optimize your images and serve your images and static files (like CSS and JavaScript) from our global network of servers.":["透過我們的全球伺服器網路提供圖片和靜態檔案 (如 CSS 和 JavaScript),讓 Jetpack 最佳化你的圖片,藉此來加快載入頁面的速度。"],"Add an extra layer of security to your website by enabling WordPress.com log in and secure authentication. If you have multiple sites with this option enabled, you will be able to log into every one of them with the same credentials.":["藉由啓用 WordPress.com 登入和安全驗證,爲你的網站安全提供多一層安全防護。如果在多個網站上啓用這個選項,就能使用相同的憑證登入每個網站。"],"View your site activity":["檢視你的網站活動"],"View a chronological list of all the changes and updates to your site in an organized, readable way.":["檢視依時間排列的清單,透過有條不紊、一目了然的方式瞭解網站所有變更和更新。"],"Manually Verify ":["手動驗證"],"Verify with Google":["使用 Google 驗證"],"Google will email about certain events that occur with your site, including indications that your website has been {{a1}}hacked{{/a1}}, or problems {{a2}}crawling or indexing{{/a2}} your site.":["Google 會以電子郵件通知你網站發生的某些事件,包括網站已{{a1}}遭到入侵{{/a1}}的跡象,或對網站{{a2}}進行編目或建立索引{{/a2}}時發生問題。"],"or":["或"],"Monitor your site's traffic and performance from the {{a}}Google Search Console{{/a}}.":["從 {{a}}Google Search Console{{/a}} 監控網站的流量。"],"Your site is verified with Google":["你的網站已透過 Google 驗證"],"Site failed to verify: %(error)s":["網站無法驗證:%(error)s"],"Verifying...":["正在驗證..."],"Add faster, more advanced searching to your site with Jetpack Professional.":["選擇 Jetpack 專業版方案,為你的網站加入速度更快的進階搜尋功能。"],"Replace WordPress built-in search with Jetpack Search, an advanced search experience":["以 Jetpack 搜尋取代 WordPress 內建搜尋功能,獲得進階的搜尋體驗"],"Jetpack Search replaces the built-in search with a fast, scalable, customizable, and highly-relevant search hosted in the WordPress.com cloud. The result: Your users find the content they want, faster.":["Jetpack Search 取代了內建搜尋功能,可快速搜尋託管在 WordPress.com 雲端上的內容,不但可擴充、可自訂,而且結果高度相關。讓你的使用者更快找到他們想要的內容。"],"The built-in WordPress search is great for sites without much content. But as your site grows, searches slow down and return less relevant results.":["內建 WordPress 搜尋功能適合內容較少的網站,但隨著你的網站逐漸成長,搜尋速度就會變慢,而且會傳回較少相關的搜尋結果。"],"Jetpack Search supports many customizations.":["Jetpack Search 支援許多自訂內容,"],"Replace the built-in search with a fast, scalable, customizable, and highly-relevant search {{a}}hosted in the WordPress.com cloud{{/a}}.":["取代內建搜尋功能,可快速搜尋{{a}}託管在 WordPress.com 雲端上的內容{{/a}},不但可擴充、可自訂,而且結果高度相關。"],"Site is verified":["網站已完成驗證"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind knowing that you'll have priority support from our global team of experts should the need arise.{{/p}}":["{{p}}Jetpack 專業版提供可讓你無限制使用超過 200 種進階版 WordPress 佈景主題,助你建立夢寐以求的網站,既精美又有效率。{{/p}}{{p}}Jetpack 專業版不只能讓你找到最完美的版面設計,還提供全球專家團隊的優先支援,滿足你的需求,讓你高枕無憂。{{/p}}"],"Spam filtering and priority support.":["過濾垃圾訊息和優先支援。"],"When ads are enabled, Jetpack automatically generates a custom ads.txt tailored for your site.":["啟用廣告後,Jetpack 會自動產生為您的網站量身訂做的自訂 ads.txt。"],"Jetpack automatically generates a custom {{link}}ads.txt{{/link}} tailored for your site. If you need to add additional entries for other networks please add them in the space below, one per line.":["Jetpack 會自動產生為您的網站量身訂做的自訂 {{link}}ads.txt{{/link}}。如果您需要為其他網路新增其他項目,請在下方空白處,於每行新增一個項目。"],"Custom ads.txt entries":["自訂 ads.txt 項目"],"{{p}}To create a beautiful site that looks and works exactly how you want it to, Jetpack Professional gives you unlimited access to over 200 premium WordPress themes.{{/p}}{{p}}Jetpack Professional is about more than just finding the perfect design. It's also about total peace of mind: real-time backups, automatic malware scanning, and priority support from our global team of experts guarantee that your site will always be safe and secure.{{/p}}":["{{p}}Jetpack 專業版提供可讓你無限制使用超過 200 種進階版 WordPress 佈景主題,助你建立夢寐以求的網站,既精美又有效率。{{/p}}{{p}}Jetpack 專業版不只能讓你找到最完美的版面設計,還能讓你在使用過程中安心無慮:我們提供即時備份、自動掃描惡意軟體、國際專家團隊的優先支援服務,全力保護你的網站安全。{{/p}}"],"Introducing Premium Themes":["為你介紹進階版佈景主題"]," Premium Themes":["進階版佈景主題"],"Privacy information":["隱私權資訊"],"Enable Lazy Loading for images":["啟用延緩載入圖片功能"],"Lazy-loading images will improve your site’s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.":[""],"Performance & speed":["效能與速度"],"Enable high-speed, ad-free video player":["啟用高速的無廣告影片播放器"],"Make the content you publish more engaging with high-resolution video. With Jetpack Video you can customize your media player and deliver high-speed, ad-free, and unbranded videos to your visitors. Videos are hosted on our WordPress.com servers and do not subtract space from your hosting plan!":["加入高解析度影片,讓你發佈的內容更加吸引。你可以透過 Jetpack 影片自訂媒體播放器,為訪客呈現高速、無廣告和品牌牌示的影片。WordPress.com 伺服器會託管你的影片,而且不會佔用你的託管方案空間!"],"Video":["影片"],"Carousel color scheme":["隨選顏色配置"],"Exif data shows viewers additional technical details of a photo, like its focal length, aperture, and ISO.":["Exif 資料會為讀者顯示相片的額外技術詳細資料,例如焦距、光圈和 ISO。"],"Show photo Exif metadata in carousel (when available)":["在資料可用時,於隨選區顯示相片 Exif 中繼資料"],"Display images in a full-screen carousel gallery":["在全螢幕隨選區圖庫中顯示圖片"],"Create full-screen carousel slideshows for the images in your posts and pages. Carousel galleries are mobile-friendly and encourage site visitors to interact with your photos.":["為你文章和頁面中的圖片建立全螢幕隨選區投影片。隨選區圖庫適用於行動裝置,同時鼓勵訪客與你的相片互動。"],"The WordPress.com toolbar replaces the default WordPress admin toolbar and streamlines your WordPress experience. It offers one-click access to manage all your sites, update your WordPress.com profile, view notifications, and catch up on the sites you follow in the Reader.":["WordPress.com 工具列會取代預設 WordPress 管理員工具列,以簡化你的 WordPress 操作流程。提供一鍵存取功能,讓你輕鬆管理你所有的網站、更新 WordPress.com 個人檔案、檢視通知,並在閱讀器中掌握你追蹤網站的最新動態。"],"Portfolios shortcode: [portfolio]":["作品集簡碼:[portfolio]"],"Use {{portfolioLink}}portfolios{{/portfolioLink}} on your site to showcase your best work. If your theme doesn’t support Jetpack Portfolios, you can still use a simple shortcode to display them on your site.":["在你的網站上使用{{portfolioLink}}作品集{{/portfolioLink}}來展示你的佳作。如果你的佈景主題不支援 Jetpack 個人作品集,你仍然可以使用簡單的簡碼在網站上展示你的作品。"],"Testimonials shortcode: [testimonials]":["證言簡碼:[testimonials]"],"Add {{testimonialLink}}testimonials{{/testimonialLink}} to your website to attract new customers. If your theme doesn’t support Jetpack Testimonials, you can still use a simple shortcode to display them on your site.":["在你的網站中加入{{testimonialLink}}證言{{/testimonialLink}}來吸引新的顧客。如果你的佈景主題不支援 Jetpack 證言,你仍然可以使用簡單的簡碼在網站上顯示證言。"],"Search engines can't access your site at the moment. If you'd like to make your site accessible, check your {{a}}Reading settings{{/a}} and switch \"Search Engine Visibility\" on.":["搜尋引擎目前無法存取你的網站。若要讓訪客存取你的網站,請檢查你的{{a}}閱讀設定{{/a}}並開啟「搜尋引擎可見度」。"],"Good news: Jetpack is sending your sitemap automatically to all major search engines for indexing.":["好消息:Jetpack 已自動將你的網站地圖傳送給所有主要搜尋引擎進行索引。"],"Sitemaps are files that search engines like Google or Bing use to index your website. They can help improve your ranking in search results. When you enable this feature, Jetpack will create sitemaps for you and update them automatically when the content on your site changes.":["網站地圖是 Google 或 Bing 等搜尋引擎索引你網站所使用的檔案。網站地圖可以協助改善網站在搜尋結果中的排名。啟用這項功能後,Jetpack 會建立你的網站地圖,並在網站內容變更時自動更新。"],"Configure related posts in the Customizer":["在自訂工具中設定相關文章"],"Highlight related content with a heading":["反白標示含有標題的相關內容"],"View security scan details":["檢視安全性掃描詳細資料"],"View backup history":["檢視備份記錄"],"Show a thumbnail image where available":["顯示可用的縮圖圖片"],"For more information on how specific Jetpack features use data and track activity, please refer to our {{privacyCenterLink}}Privacy Center{{/privacyCenterLink}}.":["若需關於特定 Jetpack 功能如何使用資料和追蹤活動的詳細資訊,請參閱我們的{{privacyCenterLink}}隱私權中心{{/privacyCenterLink}}。"],"We use other tracking tools, including some from third parties. {{cookiePolicyLink}}Read about these{{/cookiePolicyLink}} and how to control them.":["我們會使用其他的追蹤工具,包括由第三方所提供的追蹤工具。{{cookiePolicyLink}}瞭解相關資訊{{/cookiePolicyLink}}及其管理方式。"],"This information helps us improve our products, make marketing to you more relevant, personalize your WordPress.com experience, and more as detailed in our {{pp}}privacy policy{{/pp}}.":["這類資訊有助我們改進產品、提供與你更加相關的行銷活動、帶來更為個人化的 WordPress.com 使用體驗;若要瞭解更多詳細內容,請參見我們的{{pp}}「隱私權政策」{{/pp}}。"],"Share information with our analytics tool about your use of services while logged in to your WordPress.com account. {{cookiePolicyLink}}Learn more{{/cookiePolicyLink}}.":["在登入你的 WordPress.com 帳號時,請將你的服務使用情況相關資訊與我們的分析工具分享。{{cookiePolicyLink}}瞭解更多資訊{{/cookiePolicyLink}}。"],"This feature is being managed by a site administrator. {{link}}Learn more{{/link}}.":["這個功能是由網站管理員所管理。{{link}}瞭解更多{{/link}}。"],"This feature has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["這個功能已由網站管理員停用。{{link}}瞭解更多{{/link}}。"],"This feature has been enabled by a site administrator. {{link}}Learn more{{/link}}.":["這個功能已由網站管理員啟用。{{link}}瞭解更多{{/link}}。"],"%(moduleName)s has been disabled by a site administrator. {{link}}Learn more{{/link}}.":["網站管理員已停用 %(moduleName)s。{{link}}瞭解更多{{/link}}。"],"This feature has been disabled by a site administrator.":["這個功能已由網站管理員停用。"],"%(moduleName)s has been disabled by a site administrator.":["網站管理員已停用 %(moduleName)s。"],"You can place additional ads using the Ad widget. {{link}}Try it out!{{/link}}":["您可以使用廣告小工具刊登其他廣告。{{link}}立即試用!{{/link}}"],"Configure your notification settings":["調整你的通知設定"],"Monitor your site's downtime":["監控你的網站停機時間"],"Jetpack Search is a powerful replacement for the search capability built into WordPress.":[""],"Your site’s files are regularly scanned for unauthorized or suspicious modifications that could compromise your security and data.":["系統會定期對你網站的檔案進行掃描,確認是否有可能會損害你安全性和資料的未授權或可疑的。"],"Plugin needs updating.":["外掛程式需要更新。"],"%(number)s":["%(number)s"],"Jetpack’s Plugin Updates allows you to choose which plugins update automatically.":["Jetpack 的外掛程式更新可讓您選擇要自動更新的外掛程式。"],"Jetpack will optimize your images and serve them from the server location nearest to your visitors. Using our global content delivery network will boost the loading speed of your site.":["Jetpack 會最佳化你的圖片,並從與訪客距離最近的伺服器提供圖片。使用我們的全球內容傳遞網路可大幅提升網站的載入速度。"],"Jetpack’s downtime monitor will continuously monitor your site, and alert you the moment that downtime is detected.":[""],"Jetpack Backups allow you to easily restore or download a backup from a specific moment.":["Jetpack 備份功能可讓您輕鬆復原或下載特定時刻的備份。"],"Akismet checks your comments and contact form submissions against our global database of spam.":["Akismet 會將你提交的留言和聯絡表單與我們的全球垃圾郵件資料庫進行檢查。"],"Privacy Information":["隱私權資訊"],"VideoPress allows you to upload videos from your computer to be hosted on WordPress.com, rather than on your host’s servers. You can then insert these on your self-hosted Jetpack site. ":["VideoPress 可讓你從電腦上傳影片,並由 WordPress.com 而非主機伺服器託管。你可以接著將這些影片插入自助託管的 Jetpack 網站。"],"Add the Search (Jetpack) widget to your sidebar":["新增搜尋 (Jetpack) 小工具至側邊欄"],"Give your visitor's a great search experience by letting them filter and sort fast, relevant search results.":["讓訪客快速篩選和排序相關搜尋結果,為訪客提供絕佳的搜尋體驗。"],"Enables a lightweight, mobile-friendly theme that will be displayed to visitors on mobile devices.":["啟用輕量且適用於手機的佈景主題,以顯示在訪客的行動裝置上。"],"Loads the next posts automatically when the reader approaches the bottom of the page.":["讀者閱讀到網頁底部時,可自動載入後續文章。"],"Allows you to publish new posts by sending an email to a special address.":["讓你可透過寄信至特定電子郵件地址來發佈新文章。"],"Allows you to compose content with links, lists, and other styles using the Markdown syntax.":["使用 Markdown 語法,讓你撰寫含有連結、清單和其他樣式的內容。"],"Checks your content for correct grammar and spelling, misused words, and style while you write.":["在撰寫時檢查內容的文法、拼字、錯別字和樣式。"],"Provides the necessary hidden tags needed to verify your WordPress site with various services.":["提供所需的隱藏標籤,以便將你的 WordPress 網站與多項服務進行驗證。"],"Displays information on your site activity, including visitors and popular posts or pages.":["顯示網站活動相關資訊,包括訪客身分以及熱門文章或頁面。"],"Allows you to optimize your site and its content for better results in search engines.":["讓你最佳化你的網站和內容,在搜尋引擎中顯示較佳結果。"],"Integrates your WordPress site with Google Analytics, a platform that offers insights into your traffic, visitors, and conversions.":["將你的 WordPress 網站與 Google Analytics 整合 (Google Analytics 是一個可提供關於流量、訪客和轉換洞察報告的平台)。"],"Displays high-quality ads on your site that allow you to earn income.":["在你的網站上顯示高品質廣告,讓你賺取收入。"],"Adds sharing buttons to your content so that visitors can share it on social media sites.":["將分享按鈕新增至你的內容,讓訪客可以將文章分享至社交媒體網站。"],"Allows you to automatically share your newest content on social media sites, including Facebook and Twitter.":["讓你將最新內容自動分享至社交媒體網站,包括 Facebook 和 Twitter。"],"Adds like buttons to your content so that visitors can show their appreciation or enjoyment.":["新增「讚」按鈕至你的內容,讓訪客能夠表達欣賞或高興的感受。"],"Allows registered users to log in to your site with their WordPress.com accounts.":["讓已註冊使用者能夠透過其 WordPress.com 帳號登入你的網站。"],"Protects your site from traditional and distributed brute force login attacks.":["保護你的網站不受傳統和分散式暴力破解攻擊。"],"Backs up your site to the global WordPress.com servers, allowing you to restore your content in the event of an emergency or error.":["將你的網站備份至全球的 WordPress.com 伺服器,讓你在發生緊急情況或錯誤時還原內容。"],"Removes spam from comments and contact forms.":["從留言和聯絡表單移除垃圾留言。"],"We are committed to your privacy and security. ":["我們致力維護你的隱私權及安全。"],"View all Jetpack plans":["檢視所有 Jetpack 方案"],"Manage your plan":["管理你的方案"],"Your Plan":["你的方案"],"You’re currently on Jetpack %(plan)s.":["你目前使用的 Jetpack 方案為 %(plan)s。"],"Allows readers to subscribe to your posts or comments, and receive notifications of new content by email.":["允許讀者訂閱你的文章和留言,並透過電子郵件接收新內容的通知。"],"Replaces the standard WordPress comment form with a new comment system that includes social media login options.":["使用包含社交媒體登入選項的全新留言系統,取代標準的 WordPress 留言表單。"],"{{a}}Activate{{/a}} to replace the WordPress built-in search with Jetpack Search, an advanced search experience.":["{{a}}啟用{{/a}}以 Jetpack 搜尋取代 WordPress 內建搜尋功能,獲得進階的搜尋體驗。"],"Add Search (Jetpack) Widget":["新增搜尋 (Jetpack) 小工具"],"Jetpack Search is powering search on your site.":["「Jetpack 搜尋」為你的網站提供搜尋功能。"],"Manage your plugins":["管理你的外掛程式"],"Moderate comments":["審核留言"],"Error updating privacy settings. %(error)s":["更新隱私設定時發生錯誤。%(error)s"],"Updated privacy settings.":["已更新隱私設定。"],"Updating privacy settings…":["正在更新隱私設定…"],"Add Jetpack Search Widget":["新增 Jetpack 搜尋小工具"],"Add the Jetpack Search widget to your sidebar to configure sorting and filters.":["將 Jetpack 搜尋小工具新增到側邊欄以設定排序和篩選條件。"],"Full security suite, marketing and revenue automation tools, unlimited video hosting, unlimited themes, enhanced search, and priority support.":["完整安全性套件、行銷與營收自動化工具、無限影片託管、無限使用佈景主題、增強的搜尋功能及優先支援。"],"Full security suite, marketing and revenue automation tools, unlimited video hosting, and priority support.":["完整安全性套件、行銷與營收自動化工具、無限影片託管及優先支援。"],"Daily backups, spam filtering, and priority support.":["每日備份、過濾垃圾訊息和優先支援。"],"Always-on Security":["全天候安全性"],"Activate video hosting":[""],"Real-time backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["透過無限空間、一鍵復原、自動安全掃描功能及優先支援服務,即時備份所有網站資料。"],"Design the perfect website":["設計完美的網站"],"Set up Jetpack":["設定 Jetpack"],"Real-time backup of all your site data with unlimited space, one-click restores, and automated security scanning.":["透過無限制空間、一鍵復原以及自動安全掃描功能,即時備份所有網站資料。"],"Jetpack Search":["Jetpack 搜尋"],"Jetpack version %(version)s":["Jetpack 版本 %(version)s"],"Your site is being backed up in real time and regularly scanned for security threats.":["你的網站已即時備份,並定期執行安全性威脅掃描。"],"Daily backup of all your site data with unlimited space and one-click restores":["透過無限制的空間每日備份所有網站資料,還有一鍵復原"],"Daily backup of all your site data with unlimited space, one-click restores, automated security scanning, and priority support":["透過無限制的空間即時備份所有網站資料、一鍵復原、自動安全性掃描、一鍵排除所有威脅及優先支援服務。"],"View your security activity":["檢視安全性活動"]," (powered by VaultPress).":["(由 VaultPress 建置)。"],"Customize Search Widget":["自訂搜尋小工具"],"Please correct the issue below and try again.":["請更正以下列出的問題,然後再試一次。"],"We are making sure your site stays free of security threats. You will be notified if we find one.":["我們會確保你的網站遠離安全性威脅。如果我們發現安全性威脅,你將收到通知。"],"Your site is being backed up in real-time.":["你的網站會即時備份。"],"Jetpack version":["Jetpack 版本"],"{{a}}View your site's activity{{/a}} in a single feed.":["以單一摘要方式{{a}}檢視網站活動{{/a}}。"],"Activity":["活動"],"Confirm each new phrase you add by pressing enter.":["按下 Enter 以逐個確認你新增的字詞。"],"{{a}}View details{{/a}}":["{{a}}查看詳細資訊{{/a}}"],"Thanks for choosing Jetpack Professional. Jetpack is now backing up your content in real-time, indexing your content for search, scanning for security threats, and granting access to premium themes.":["感謝你選擇 Jetpack 專業版。Jetpack 正在即時備份你的內容、為你的搜尋內容編列索引、掃描安全性威脅,並授予對進階版佈景主題的存取權。"],"With Jetpack Professional, you can create the perfect site with one of over 300 professionally-designed WordPress themes, including more than 200 premium themes. Customize your content with a variety of widgets, or add unlimited videos to your posts and pages -- displayed free of ads or watermarks.":["使用 Jetpack 專業版,你便可以建立完美的網站,其中有超過 300 種專業設計的 WordPress 佈景主題,包括超過 100 種進階版佈景主題。使用各種小工具自訂你的內容,或將無限制的影片新增到你的文章和頁面 -- 不顯示任何廣告或浮水印。"],"Growing your following is easy with your Professional plan, thanks to content sharing and scheduling, SEO tools, and built-in subscription options. You can monetize your site with a Simple Payments button and in-line ads, and monitor the success of your efforts by integrating with Google Analytics.":["使用專業版方案的內容分享和排程、SEO 工具,以及內建的訂閱選項,可以輕鬆提高你的曝光追蹤。你可以利用「輕鬆付款」按鈕和內置廣告透過網站獲利,並與 Google Analytics 整合來掌握你付出的努力是否獲得成效。"],"Your Jetpack plan gives you everything you need to keep your hard work safe, including on-demand backups and malware scans with one-click restores and issue resolution. Your site will be fully protected against spam, malicious code, and brute force login attempts.":["Jetpack 專業版方案提供保護你辛勤努力成果所需的一切,包括隨選即用備份和惡意軟體掃描,以及單鍵還原和問題解決。你的網站可完全防禦垃圾郵件、惡意程式碼,以及暴力破解密碼的登入嘗試。"],"Start exploring Jetpack Professional now to see all the benefits of your new plan.":["開始探索 Jetpack 專業版,瞭解新方案的所有優點。"],"Install premium themes":["安裝進階版佈景主題"],"Review SEO features":["檢閱 SEO 功能"],"Welcome Professional":["歡迎使用專業版"],"Thanks for choosing Jetpack Premium. Jetpack is now backing up your site, scanning for security threats, and enabling monetization features.":["感謝你選擇 Jetpack 進階版方案。Jetpack 現在正在備份你的網站、掃描安全性威脅,並啟用獲利功能。"],"With Jetpack Premium, you can create the perfect site, no matter its purpose. Customize your site’s appearance with one of more than 100 free themes, or enhance your content with unlimited HD video -- all hosted free of ads or watermarks.":["你可以使用 Jetpack 進階版打造完美的網站,無論其用途為何。使用 200 種以上的免費佈景主題自訂你的網站外觀,或使用高達 13 GB 的高畫質影片來增強內容 -- 全部皆以沒有任何廣告或浮水印的方式託管。"],"Using Jetpack’s powerful sharing tools, you can automatically share your newest posts on social media, or schedule your content to be re-shared at any date or time you choose. And along with growing your following, you can grow your business with tools like payment buttons and ads.":["你可以使用 Jetpack 功能強大的分享工具,在社交媒體上分享最新文章,也可以將內容安排在由你選擇的任何日期或時間重新分享。隨著曝光追蹤不斷增加,你可以使用付款按鈕和廣告等工具來拓展你的業務。"],"Start exploring Jetpack Premium now to see all the benefits of your new plan.":["開始探索 Jetpack 進階版,瞭解新方案的所有優點。"],"Monetize your site with ads":["利用網站廣告獲利"],"Welcome Premium":["歡迎使用進階版"],"Thanks for choosing Jetpack Personal. Jetpack is now backing up your site and scanning for security threats.":["感謝你選擇 Jetpack 個人版方案。Jetpack 現在正在備份你的網站,並掃描安全性威脅。"],"With Jetpack Personal, you have access to more than 100 free, professionally-designed WordPress themes. Choose the theme that best fits your site and customize colors, images, or add a variety of new widgets.":["使用 Jetpack 個人版,你便可以存取超過 100 種免費的專業設計 WordPress 佈景主題。選擇最適合你網站的佈景主題,並自訂顏色、圖片,或新增各種新的小工具。"],"Got it":[""],"Welcome personal":["歡迎使用個人版"],"By clicking the button below, you agree to our {{tosLink}}Terms of Service{{/tosLink}} and to {{shareDetailsLink}}share details{{/shareDetailsLink}} with WordPress.com.":["按下方按鈕,即表示你同意我們的{{tosLink}}服務條款{{/tosLink}},並同意與 WordPress.com {{shareDetailsLink}}分享詳細資料{{/shareDetailsLink}}。"],"Jetpack Stats People":["Jetpack 統計使用者"],"Hello there! Your stats have been activated.":["你好!你的統計功能已啟用。"],"Just give us a little time to collect data so we can display it for you here.":["請稍候片刻,待我們收集完資料,很快就會在這裡顯示統計資料。"],"Okay, got it!":["了解!"],"Display ads below posts on":["在文章下方顯示廣告"],"Additional ad placements":["其他廣告版位"],"Top of each page":["每個頁面的頂端"],"Second ad below post":["文章下方的第二則廣告"],"Archives":["封存"],"Explore Professional":["探索專業版功能"],"Compare All Plans":["比較所有方案"],"Person with laptop":["使用筆記型電腦的訪客"],"Your Jetpack site is ready to go!":["你的 Jetpack 網站已經準備就緒!"],"Stars":["星星"],"Jupiter":["木星"],"Welcome to Jetpack Personal":["歡迎使用 Jetpack 個人方案"],"Welcome to Jetpack Premium":["歡迎使用 Jetpack 進階版"],"Welcome to Jetpack Professional":["歡迎使用 Jetpack 專業版"],"Schedule posts":[""],"Activate Publicize":["啟用 Publicize"],"Your site is backed up.":["你的網站已備份。"],"Image Performance":["圖片效能"],"Get WordPress Apps for every device":["下載適用於各種裝置的 WordPress 應用程式"],"Manage all your sites from a single dashboard: publish content, track stats, moderate comments, and so much more from anywhere in the world.":["從單一儀表板管理所有網站:無論你身在何處,都可以發表內容、追蹤統計數據、審核留言,還能使用其他許多功能。"],"I already use this app.":["我已經使用此應用程式。"],"Create address":["建立位址"],"Priority support":["優先支援服務"],"Add sharing buttons to your posts":["將分享按鈕新增至你的文章"],"Automatically share your posts to social networks":["自動將你的文章分享到社交網站"],"Updating settings…":["正在更新設定..."],"Updating Post by Email address…":["正在透過電子郵件地址更新文章..."],"Your paid plan gives you access to prioritized Jetpack support.":["你的付費方案給予你優先的 Jetpack 支援。"],"You have paid for backups but they're not yet active.":["你已購買備份功能,但尚未啟用。"],"You have paid for backups and security scanning but they’re not yet active.":["你已購買備份及安全掃描功能,但尚未啟用。"],"Click \"Set Up\" to finish installation.":["按一下「設定」以完成安裝。"],"Checking site status…":["正在檢查網站狀態..."],"Pages":["頁面"],"We're here to help":["我們樂意提供協助"],"Jetpack comes with free, basic support for all users.":["Jetpack 為所有使用者提供免費的基本支援。"],"Ask a question":["提出疑問"],"Search our support site":["搜尋我們的支援網站"],"Get a faster resolution to your support questions.":["讓您的支援問題更快獲得解決。"],"Host fast, high-quality, ad-free video.":["託管快速、高品質、無廣告的影片。"],"Generate income with high-quality ads.":["以高品質廣告賺取收入。"],"Real-time site backups and automatic threat resolution.":["即時網站備份與自動排除威脅。"],"Protect against data loss, malware, and malicious attacks.":["防禦資料遺失、惡意軟體及惡意攻擊。"],"Integrate easily with Google Analytics.":["輕鬆與 Google Analytics (分析) 進行整合。"],"Help your content get found and shared with SEO tools.":["使用 SEO 工具協助他人找到及分享您的內容。"],"Protect your site from spam.":["保護您的網站不受垃圾訊息攻擊。"],"This site is not connected to WordPress.com. Please ask the site administrator to connect.":["此網站未與 WordPress.com 連結。請要求網站管理員連結。"],"Spam filtering":["過濾垃圾訊息"],"Daily, automated malware scanning":["每日自動掃描惡意軟體"],"Daily, automated backups (unlimited storage)":["每日自動備份 (無限儲存空間)"],"Daily, automated malware scanning with automated resolution":["每日自動掃描惡意軟體,並自動排除威脅"],"Unlimited, high-speed video hosting":[""],"SEO preview tools":["SEO 預覽工具"],"Site stats, related content, and sharing tools":["網站統計資料、相關內容與分享工具"],"Brute force attack protection and downtime monitoring":["暴力破解攻擊防護以及運作時間監控"],"Unlimited, high-speed image hosting":["無限高速圖片託管"],"By disconnecting %(siteName)s from WordPress.com you will no longer have access to the following:":["中斷 %(siteName)s 與 WordPress.com 的連結後,您將無法再存取下列項目:"],"Read more about Jetpack benefits":["深入瞭解 Jetpack 的優點"],"An Automattic Airline":["一個 Automattic 主公司"],"Manage site connection":["管理網站連結"],"Connect your account to WordPress.com to view more stats":["將您的帳號與 WordPress.com 連結,即可查看更多統計資料"],"Theme enhancements":["佈景主題增強項目"],"Load more posts using the default theme behavior":["使用預設佈景主題行為載入更多文章"],"Load more posts in page with a button":["使用按鈕在頁面中載入更多文章"],"Load more posts as the reader scrolls down":["隨著讀者向下捲動頁面載入更多文章"],"Theme support required.":["需要佈景主題支援。"],"Learn more about adding support for Infinite Scroll to your theme.":["可於佈景主題中加入無限捲動支援。立即深入瞭解。"],"Use excerpts instead of full posts on front page and archive pages":["在首頁和存檔頁面使用摘要而非全文"],"Show featured images":["顯示特色圖片"],"Enable the WordPress.com toolbar":["啟用 WordPress.com 工具列"],"Writing tools available to you will be shown here when an administrator enables them.":["管理員啟用撰寫工具時,您的可用撰寫工具會顯示在這裡。"],"Portfolios":["作品集"],"Note that {{b}}verifying your site with these services is not necessary{{/b}} in order for your site to be indexed by search engines. To use these advanced search engine tools and verify your site with a service, paste the HTML Tag code below. Read the {{support}}full instructions{{/support}} if you are having trouble. Supported verification services: {{google}}Google Search Console{{/google}}, {{bing}}Bing Webmaster Center{{/bing}}, {{pinterest}}Pinterest Site Verification{{/pinterest}}, and {{yandex}}Yandex.Webmaster{{/yandex}}.":["請注意,{{b}}不一定要使用這些服務驗證你的網站{{/b}},才可以讓搜尋引擎將你的網站加入索引。若要使用進階搜尋引擎工具,並以提供的服務驗證你的網站,請在下方貼上 HTML 標籤程式碼。如果遇到任何問題,請閱讀{{support}}完整指示{{/support}}。支援的驗證服務:{{google}}Google Search Console{{/google}}、{{bing}}Bing Webmaster Center{{/bing}}、{{pinterest}}Pinterest Site Verification{{/pinterest}} 及 {{yandex}}Yandex.Webmaster{{/yandex}}。"],"Bing":["Bing"],"Yandex":["Yandex"],"Generate XML sitemaps":["產生 XML 網站地圖"],"Collecting valuable traffic stats and insights":["收集寶貴的流量統計資料和洞察報告"],"The image helps collect stats, but should work when hidden.":["圖片有助於蒐集統計資料,但隱藏時應正常運作。"],"Count logged in page views from":["計算從下列時間起算的登入頁面瀏覽量:"],"Allow stats reports to be viewed by":["可查看統計報告的使用者:"],"You can tweak these settings if you'd like more advanced control. Read more about what you can do to {{a}}optimize your site's SEO{{/a}}.":["如果你想要進一步控制,可以視需要調整這些設定。閱讀{{a}}最佳化你網站的 SEO{{/a}}深入瞭解相關做法。"],"Configure your SEO settings":["調整你的 SEO 設定"],"In \"Upgrade\"":["在「升級」中"],"Configure your Google Analytics settings":["調整你的 Google Analytics (分析) 設定"],"Show ads on the first article on your home page or at the end of every page and post. Place additional ads at the top of your site and to any widget area to increase your earnings.":["在首頁的第一篇文章或每個頁面及文章的結尾顯示廣告。將其他廣告放在網站頂端及任何小工具區域,以增加你的收入。"],"Enable ads and display an ad below each post":["啟用廣告並在每篇文章底下顯示廣告"],"Configure your sharing buttons":["設定你的分享按鈕"],"Connect your social media accounts":["連結你的社交媒體帳號"],"Match accounts using email addresses":["使用電子郵件地址比對帳號"],"Require accounts to use WordPress.com Two-Step Authentication":["需要帳號才能使用 WordPress.com 兩步驟驗證"],"Add to whitelist":["新增至允許清單"],"You may whitelist an IP address or series of addresses preventing them from ever being blocked by Jetpack. IPv4 and IPv6 are acceptable. To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100":["你可在允許清單中新增 IP 位址或一系列的位址,以避免這些位址受到 Jetpack 封鎖。可接受 IPv4 和 IPv6。若要指定範圍,請輸入最低值及最高值,並以破折號分隔。範例:12.12.12.1-12.12.12.100"],"Your site is backed up and threat-free.":["你的網站已備份,並已排除所有威脅。"],"Checking your spam protection…":["正在檢查你的垃圾訊息防護..."],"Fetching key…":["正在擷取金鑰..."],"Your site needs an Antispam key.":["你的網站需要 Antispam 金鑰。"],"There's a problem with your Antispam API key. {{a}}Learn more{{/a}}.":["你的 Antispam API 金鑰發生問題。{{a}}瞭解更多{{/a}}。"],"Your site is not protected from spam.":["你的網站未啟用垃圾訊息防護。"],"Your Antispam key is valid.":["你的 Antispam 金鑰有效。"],"Your site is protected from spam.":["你的網站已啟用垃圾訊息防護。"],"Checking key…":["正在檢查金鑰..."],"Your API key":["你的 API 金鑰"],"If you don't already have an API key, then {{a}}get your API key here{{/a}}, and you'll be guided through the process of getting one.":["如果你還沒有 API 金鑰,則請{{a}}到這裡取得你的 API 金鑰{{/a}},系統會引導你完成申請程序。"],"No search results found for %(term)s":["找不到「%(term)s」的搜尋結果"],"Enter a search term to find settings or close search.":["輸入搜尋字詞以尋找設定或關閉搜尋。"],"Connections":["連結"],"Your site is in Development Mode, so it can not be connected to WordPress.com.":["你的網站目前為開發模式,因此無法連結 WordPress.com。"],"Your site is connected to WordPress.com.":["你的網站已與 WordPress.com 連結。"],"You are the Jetpack owner.":["你是 Jetpack 擁有者。"],"Connected as {{span}}%(username)s{{/span}}":["已以 {{span}}%(username)s{{/span}} 的身分連結"],"View your Email Followers":["查看你的電子郵件關注者"],"Color scheme":["顏色配置"],"Enable Markdown use for comments.":["啟用 Markdown 的留言功能。"],"Updated settings.":["已更新設定。"],"Error updating settings. %(error)s":["更新設定時發生錯誤。%(error)s"],"Regenerated Post by Email address.":["透過電子郵件地址重新產生文章。"],"Error regenerating Post by Email address. %(error)s":["透過電子郵件地址重新產生文章時發生錯誤。%(error)s"],"Updated settings. Refreshing page…":["已更新設定。正在重新整理頁面..."],"Currently in {{a}}Development Mode{{/a}} (some features are disabled) because: {{reasons/}}":["目前處於{{a}}開發模式{{/a}} (已停用部分功能),因為:{{reasons/}}"],"{{li}}The jetpack_development_mode filter is active{{/li}}":["{{li}}已啟用 jetpack_development_mode 篩選{{/li}}"],"{{li}}The JETPACK_DEV_DEBUG constant is defined{{/li}}":["{{li}}已定義 JETPACK_DEV_DEBUG 常數{{/li}}"],"{{li}}Your site URL lacks a dot (e.g. http://localhost){{/li}}":["{{li}}你的網站 URL 少了一個點 (例如:http://localhost){{/li}}"],"Google Analytics is a free service that complements our {{a}}built-in stats{{/a}} with different insights into your traffic. WordPress.com stats and Google Analytics use different methods to identify and track activity on your site, so they will normally show slightly different totals for your visits, views, etc.":["Google Analytics 這項免費服務可使用流量中的不同洞察報告來補充{{a}}內建統計資料{{/a}}。WordPress.com 統計資料與 Google Analytics 會透過不同方法來識別及追蹤你網站上的活動,所以它們顯示的總點閱次數、總瀏覽次數等資料通常會有些微差異。"],"Google Analytics":["Google 分析"],"Configure Google Analytics":["設定 Google Analytics"],"Activate Google Analytics":["啟用 Google Analytics"],"Download the free apps":[""],"Upgrade Focus: VideoPress For Weddings":["升級重點:婚禮適用的 VideoPress"],"{{span}}You can now also configure related posts in the Customizer. {{ExternalLink}}Try it out!{{/ExternalLink}}{{/span}}":["{{span}}你現在可以在自訂工具中設定相關文章。{{ExternalLink}}試試看!{{/ExternalLink}}{{/span}}"],"By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!":["預設情況下,廣告會顯示在每個頁面、文章,或首頁第一篇文章的底部。你可以將廣告新增到網站頂端或任何小工具區域,以增加你的收入!"],"Display an ad unit at the top of your site.":["在網站頂端顯示廣告單元。"],"By activating ads, you agree to the Automattic Ads {{link}}Terms of Service{{/link}}.":["啟用廣告,即代表你同意 Automattic Ads 的{{link}}服務條款{{/link}}。"],"Your server is misconfigured, which means that Jetpack Protect is unable to effectively protect your site.":["你的伺服器設定有誤,這代表 Jetpack Protect 無法有效保護你的網站。"],"In \"Mobile\"":["在「行動」中"],"{{link}}Configure your Monitor notification settings on WordPress.com{{/link}}":["{{link}}設定你在 WordPress.com 的 Monitor 通知設定{{/link}}"],"View your earnings":["查看你的收入"],"Configure site SEO":[""],"Activate SEO tools":[""],"To get started, click on Add Media in your post editor and upload a video; we’ll take care of the rest!":["若要開始使用,請按一下文章編輯器的「新增媒體」並上傳影片,剩下的工作就交給我們處理!"],"Video Hosting":["影片託管"],"SEO Tools":["SEO 工具"],"Advanced SEO tools to help your site get found when people search for relevant content.":["進階 SEO 工具有助於讓你的網站顯示在使用者的相關內容搜尋結果中。"],"The easiest way to upload ad-free and unbranded videos to your site. You get stats on video playback and shares and the player is lightweight and responsive.":["在網站上傳無廣告和無品牌影片最輕鬆的方式。你可獲得影片播放和分享次數的統計資料,而且播放器為輕量型且回應靈敏。"],"You are running Jetpack on a staging server.":["你正在暫存伺服器上執行 Jetpack。"],"More Info":["更多資訊"],"{{a}}Manage Likes visibility from the Sharing Module Settings{{/a}}":["{{a}}從「分享模組設定」管理按讚次數的可見度{{/a}}"],"Your current IP: %(ip)s":["你目前的IP:%(ip)s"],"There are unsaved settings in this tab that will be lost if you leave it. Proceed?":["本分頁中有未儲存的設定,如果離開,這些設定便會遺失。要繼續嗎?"],"This will reset all Jetpack options, are you sure?":["這樣會重設所有的 Jetpack 選項,你確定嗎?"],"Search for a Jetpack feature.":["搜尋 Jetpack 功能。"],"Configure your Security Scans":["設定安全性掃描"],"Subscriber":["訂閱者"],"Big iPhone/iPad Update Now Available":["有重大的 iPhone/iPad 更新可供使用"],"The WordPress for Android App Gets a Big Facelift":["Android 專用的 WordPress 應用程式已全面翻新"],"WordPress.com Likes are:":["WordPress.com 按讚功能:"],"Comments headline":["迴響標題"],"A few catchy words to motivate your readers to comment.":["使用一些吸引人的字詞,鼓勵讀者發表迴響。"],"Show a \"follow blog\" option in the comment form":["在迴響表單中顯示「關注網誌」選項"],"Show a \"follow comments\" option in the comment form":["在迴響表單中顯示「關注迴響」選項"],"Put a chart showing 48 hours of views in the admin bar":["在管理員列中放置一張圖表,顯示 48 小時內的瀏覽次數"],"Hide the stats smiley face image":["隱藏統計資料笑臉圖片"],"Whitelisted IP addresses":["在允許清單中的 IP 位址"],"Show an ad for the WordPress mobile apps in the footer of the mobile theme":["在手機佈景主題的頁尾對 WordPress 行動應用程式顯示一則促銷活動"],"Copied!":["已複製!"],"Highlight and copy the following text to your clipboard:":["將以下文字反白標示,複製貼到你的剪貼簿:"],"Regenerate address":["重新產生位址"],"Automatically proofread content when: ":["自動校對內容:"],"A post or page is first published":["第一次發表文章或網頁時"],"A post or page is updated":["文章或網頁更新時"],"Automatic Language Detection":["自動語言偵測"],"The proofreader supports English, French, German, Portuguese and Spanish.":["校對服務支援英文、法文、德文、葡萄牙文和西班牙文。"],"Enable proofreading for the following grammar and style rules: ":["啟用以下的文法和樣式規則校對功能:"],"Add a phrase":["新增字詞"],"Cheatin' uh?":["喂!別偷跑喔!"],"{{p}}Would you mind telling us why you did not complete the Jetpack connection in this {{a}}2 question survey{{/a}}?{{/p}}{{p}}A Jetpack connection is required for our free security and traffic features to work.{{/p}}":["{{p}}你願意告訴我們為什麼未在這份{{a}}含有 2 個問題的調查{{/a}}中完成 Jetpack 連結嗎?{{/p}}{{p}}我們的免費安全性與流量功能需要 Jetpack 連結才能運作。{{/p}}"],"Welcome to {{s}}Jetpack %(jetpack_version)s{{/s}}!":["歡迎使用 {{s}}Jetpack %(jetpack_version)s{{/s}}!"],"Your Jetpack is already connected.":["你的 Jetpack 已連結。"],"You're fueled up and ready to go, Jetpack is now active.":["你已準備就緒,Jetpack 現已啟用。"],"You're fueled up and ready to go.":["你已準備就緒!"],"You are currently running a development version of Jetpack.":["你目前執行的是開發版本的 Jetpack。"],"Submit Beta feedback":["送出測試版意見回饋"],"What would you like to see on your Jetpack Dashboard?":["你希望你的 Jetpack 儀表板顯示哪些內容?"],"Let us know!":["請讓我們知道!"],"Saving…":["儲存中…"],"Save Settings":["儲存設定"],"Jetpack Stats Icon":["Jetpack 統計圖示"],"{{a}}Activate Site Stats{{/a}} to see detailed stats, likes, followers, subscribers, and more! {{a1}}Learn More{{/a1}}":["{{a}}啟用網站統計{{/a}}可查看詳細的統計資料、讚數、關注者和訂閱者等內容!{{a1}}瞭解詳情{{/a1}}"],"Activate Site Stats":["啟用網站統計"],"Security Scanning":["安全性掃描"],"Site Backups":["網站備份"],"Upgrade":["升級"],"ACTIVE":["啟用中"],"Your site is on Development Mode":["你的網站目前為開發模式"],"Once you connect, you can upgrade to a paid plan in order to unlock world-class security, spam protection tools, and priority support.":["連結之後,你可以升級為付費方案以使用世界級的安全性、垃圾郵件防護工具以及優先支援服務。"],"View your spam stats":["檢視垃圾迴響統計資料"],"View your security dashboard":["檢視安全性控制台"],"The site is in Development Mode, so you can not connect to WordPress.com.":["網站目前為開發模式,因此你無法連結 WordPress.com。"],"Link your account to WordPress.com to get the most out of Jetpack.":["將帳號連結到 WordPress.com 即可更完善地運用 Jetpack 的功能。"],"For automated, comprehensive scanning of security threats, please {{a}}install and activate{{/a}} VaultPress.":["如需自動且全面的安全性威脅掃描,請{{a}}安裝並啟用{{/a}} VaultPress。"],"For automated, comprehensive scanning of security threats, please {{a}}upgrade your account{{/a}}.":["如需自動且全面的安全性威脅掃描,請{{a}}升級帳號{{/a}}。"],"Jetpack is actively blocking malicious login attempts. Data will display here soon!":["Jetpack 正在主動阻擋惡意登入嘗試。這裡很快就會顯示資料!"],"Total malicious attacks blocked on your site.":["你網站阻擋的惡意攻擊總計。"],"{{a}}Activate Protect{{/a}} to keep your site protected from malicious sign in attempts.":["{{a}}啟用 Protect{{/a}} 可防止你的網站受到惡意登入嘗試的侵擾。"],"All plugins are up-to-date. Awesome work!":["所有外掛程式都是最新版本。做得好!"],"Jetpack is improving and optimizing your image speed.":["Jetpack 正在改善和最佳化你的圖片速度。"],"Jetpack is monitoring your site. If we think your site is down, you will receive an email.":["Jetpack 正在監控你的網站。如果我們發現你的網站停機,你就會收到一封電子郵件。"],"Security":["安全性"],"Performance":["效能"],"Backups":["備份"],"{{a}}View backup details{{/a}}.":["{{a}}檢視備份詳細資料{{/a}}。"],"To automatically back up your entire site, please {{a}}install and activate{{/a}} VaultPress.":["若要自動備份整個網站,請{{a}}安裝並啟用{{/a}} VaultPress。"],"Unavailable in Dev Mode.":["開發模式中無法使用。"],"Spam Protection":["垃圾訊息防護"],"For state-of-the-art spam defense, please {{a}}install Akismet{{/a}}.":["如需最新的垃圾訊息防護,請{{a}}安裝 Akismet{{/a}}。"],"For state-of-the-art spam defense, please {{a}}activate Akismet{{/a}}.":["如需最新的垃圾訊息防護,請{{a}}啟用 Akismet{{/a}}。"],"Invalid key":["無效金鑰"],"Unavailable in Dev Mode":["開發模式中無法使用"],"Activating recommended features…":["正在啟用推薦的功能…"],"Recommended features active.":["推薦的功能已啟用。"],"Recommended features failed to activate. %(error)s":["推薦的功能無法啟用。%(error)s"],"Activating %(slug)s…":["正在啟用 %(slug)s…"],"%(slug)s has been activated.":["%(slug)s 已啟用。"],"%(slug)s failed to activate. %(error)s":["%(slug)s 無法啟用。%(error)s"],"Deactivating %(slug)s…":["正在停用 %(slug)s…"],"%(slug)s has been deactivated.":["%(slug)s 已停用。"],"%(slug)s failed to deactivate. %(error)s":["%(slug)s 無法停用。%(error)s"],"Updating %(slug)s settings…":["正在更新 %(slug)s 設定…"],"Updated %(slug)s settings.":["已更新 %(slug)s 設定。"],"Error updating %(slug)s settings. %(error)s":["更新 %(slug)s 設定時發生錯誤。%(error)s"],"Updating %(slug)s address…":["正在更新 %(slug)s 位址…"],"Regenerated %(slug)s address .":["已重新產生 %(slug)s 位址。"],"Error regenerating %(slug)s address. %(error)s":["重新產生 %(slug)s 位址時發生錯誤。%(error)s"],"Resetting Jetpack options…":["正在重設 Jetpack 選項…"],"Options reset.":["選項已重設。"],"Options failed to reset.":["無法重設選項。"],"There was an error disconnecting Jetpack. Error: %(error)s":["中斷 Jetpack 連結時發生錯誤。錯誤:%(error)s"],"Unlinking from WordPress.com":["正在從 WordPress.com 取消連結"],"Unlinked from WordPress.com.":["已從 WordPress.com 取消連結。"],"Error unlinking from WordPress.com. %(error)s":["從 WordPress.com 取消連結時發生錯誤。%(error)s"],"At A Glance":["總覽"],"Clichés":["陳腔濫調"],"Dashboard":["儀表板"],"Would you tell us why? Just {{a}}answering two simple questions{{/a}} would help us improve Jetpack.":["可以告訴我們原因嗎?只要{{a}}回答兩個簡單的問題,就{{/a}}能協助我們改善 Jetpack。"],"Automattic's Privacy Policy":["Automattic 的隱私權保護政策"],"WordPress.com Terms of Service":["WordPress.com 服務條款"],"{{a}}Activate{{/a}} to enhance the performance and speed of your images.":["{{a}}啟用{{/a}}可提升圖片的效能和速度。"],"{{a}}Turn on plugin autoupdates{{/a}}":["{{a}}開啟外掛自動更新{{/a}}"],"Plugin Updates":["外掛程式更新"],"To automatically back up your entire site, please {{a}}upgrade your account{{/a}}.":["若要自動備份整個網站,請{{a}}升級你的帳戶{{/a}}。"],"Whoops! Your Akismet key is missing or invalid. {{akismetSettings}}Go to Akismet settings to fix{{/akismetSettings}}.":["糟糕!你的 Akismet 金鑰遺失或無效。{{akismetSettings}}前往 Akismet 設定以進行修正{{/akismetSettings}}。"],"No threats found, you're good to go!":["沒有找到威脅,你可以開始使用了!"],"{{a}}Contact Support{{/a}}":["{{a}}聯絡支援團隊{{/a}}"],"{{a}}View details at VaultPress.com{{/a}}":["{{a}}到 VaultPress.com 檢視詳細資料{{/a}}"],"Uh oh, %(number)s threat found.":["糟糕,找到了 %(number)s 個威脅。"],"{{a}}Activate Monitor{{/a}} to receive email notifications if your site goes down.":["{{a}}啟用監控{{/a}}可在網站停機時接收電子郵件通知。"],"Loading…":["載入中…"],"Downtime monitoring":["停機時間監控"],"{{button}}View more stats on WordPress.com {{/button}}":["{{button}}檢視更多 WordPress.com 統計資料{{/button}}"],"{{button}}View detailed stats{{/button}}":["{{button}}檢視舊版統計{{/button}}"],"All-time comments":["全時段迴響次數"],"All-time views":["全時段瀏覽次數"],"%(number)s View":["%(number)s 次瀏覽"],"Best overall day":["全天最佳"],"Views today":["今天的瀏覽次數"],"Months":["月"],"Weeks":["週"],"Days":["天"],"Something happened while loading stats. Please try again later or {{a}}view your stats now on WordPress.com{{/a}}":["載入統計資料時發生問題。請稍後再試,或立即到 WordPress.com {{a}}檢視你的統計資料{{/a}}"],"Click to view detailed stats.":["按一下可檢視詳細的統計資料。"],"Views: %(numberOfViews)s":["瀏覽次數:%(numberOfViews)s"],"Week of %(date)s":["%(date)s 當週"],"Site Security":["網站安全"],"Activate recommended features":["啟用推薦的功能"],"Link to WordPress.com":["連結到 WordPress.com"],"Unlink me from WordPress.com":["中斷我和 WordPress.com 的連結"],"There was an issue connecting your Jetpack. Please click \"Connect to WordPress.com\" again.":["連結 Jetpack 時發生問題。請再按一次「連結 WordPress.com」。"],"We had an issue connecting Jetpack; deactivate then reactivate the Jetpack plugin, then connect again.":["我們在連接 Jetpack 時發生問題。請停用 Jetpack 外掛程式並重新啟用,然後重新連接一次。"],"You need to stay logged in to your WordPress blog while you authorize Jetpack.":["授權 Jetpack 期間,你必須保持登入自己的 WordPress 網誌。"],"{{s}}Your Jetpack has a glitch.{{/s}} We're sorry for the inconvenience. Please try again later, if the issue continues please contact support with this message: %(error_key)s":["{{s}}你的 Jetpack 發生故障。{{/s}}造成不便,敬請見諒。請稍後再試一次,如果持續發生此問題,請聯絡支援團隊並附上這段訊息:%(error_key)s"],"Disconnecting Jetpack":["正在中斷與 Jetpack 的連結"],"Learn more":["瞭解更多"],"Posts":["文章"],"Front page":["首頁頁面"],"Upload videos":[""],"Pinterest":["Pinterest"],"Google":["Google"],"Show related content after posts":["顯示文章之後的相關內容"],"Related":["相關"],"Save":["儲存"],"Email Address":["電子郵件位址"],"Media":["媒體"],"Themes":["佈景主題"],"Site Stats":["網誌統計"],"Sharing":["分享"],"Testimonials":["證言"],"Cancel":["取消"],"Comments":["迴響"],"Ignored Phrases":["忽略縮寫"],"Use automatically detected language to proofread posts and pages":["使用自動檢測語言校對文章和分頁"],"Redundant Phrases":["冗餘短語"],"Phrases to Avoid":["忽略短語"],"Passive Voice":["被動語態"],"Jargon":["特殊用語"],"Hidden Verbs":["隱藏動詞"],"Double Negatives":["雙重否定"],"Diacritical Marks":["變音符號"],"Complex Phrases":["複雜短語"],"Bias Language":["偏差用語"],"English Options":["英文選項"],"Proofreading":["校對"],"Jetpack could not contact WordPress.com: %(error_key)s. This usually means something is incorrectly configured on your web host.":["Jetpack 無法聯繫 WordPress.com:%(error_key)s。這通常代表著你網路主機的設定不正確。"],"WordPress.com is currently having problems and is unable to fuel up your Jetpack. Please try again later.":["WordPress.com目前有問題,無法啟動你Jetpack。請稍後再試。"],"{{s}}Your Jetpack has a glitch.{{/s}} Connecting this site with WordPress.com is not possible. This usually means your site is not publicly accessible (localhost).":["{{s}}你的 Jetpack 發生故障。{{/s}}無法將此網站連結到 WordPress.com。這通常代表你的網站並未允許公開存取 (localhost)。"],"Your website needs to be publicly accessible to use Jetpack: %(error_key)s":["你的網站必須允許公開存取才能使用 Jetpack:%(error_key)s"],"You have successfully disconnected Jetpack":["你已成功與 Jetpack 中斷連結"],"Edit":["編輯"],"Connected":["已連結"],"Activate":["啟用"],"Active":["執行套用"],"Search":["搜尋"],"Settings":["設定"],"Learn More":["瞭解更多"],"Disconnect Jetpack":["中斷與 Jetpack 的連線"],"Test your site’s compatibility with Jetpack.":["測試你的網站與 Jetpack 的相容性。"],"Settings header\u0004Plugin Autoupdates":["外掛程式自動更新"],"Settings header\u0004Downtime monitoring":["停機時間監控"],"Settings header\u0004Privacy Settings":["隱私設定"],"Settings header\u0004WordPress.com toolbar":["WordPress.com 工具列"],"Settings header\u0004Composing":["撰寫"],"Settings header\u0004Site stats":["網站統計資料"],"Settings header\u0004Search engine optimization":["搜尋引擎最佳化"],"Settings header\u0004Google Analytics":["Google Analytics (分析)"],"Settings header\u0004Sharing buttons":["分享按鈕"],"Settings header\u0004Publicize connections":["Publicize 連結"],"Settings header\u0004Like buttons":["「讚」按鈕"],"Settings header\u0004WordPress.com log in":["WordPress.com 登入"],"Settings header\u0004Brute force attack protection":["暴力破解密碼攻擊防護"],"Settings header\u0004Backups and security scanning":["備份與安全掃描"],"Settings header\u0004Spam filtering":["過濾垃圾訊息"],"Navigation item.\u0004Performance":["效能"],"Navigation item.\u0004My Plan":["我的方案"],"Navigation item.\u0004Dev Tools":["開發工具"],"Navigation item.\u0004Settings":["設定"],"Navigation item.\u0004Discussion":["討論"],"Navigation item.\u0004Traffic":["流量"],"Navigation item.\u0004Sharing":["分享"],"Navigation item.\u0004At A Glance":["總覽"],"Navigation item.\u0004Plans":["方案"],"Navigation item.\u0004Writing":["撰寫"],"Navigation item.\u0004Reset Options (dev only)":["重設選項 (僅限開發人員版本)"],"Navigation item.\u0004Security":["安全性"],"Navigation item.\u0004At a Glance":["總覽"],"Search term.\u0004terms of service":["服務條款"],"Search term.\u0004tos":["tos"],"Search term.\u0004gdpr":["gdpr"],"Search term.\u0004data":["資料"],"Search term.\u0004tracks":["追蹤"],"Search term.\u0004privacy":["隱私權"],"Caption for a button to purchase a pro plan.\u0004Upgrade":["升級"],"A caption for a button to upgrade an existing paid feature to a higher tier.\u0004Upgrade":["升級"],"Button caption\u0004Saving…":["正在儲存..."],"Button caption\u0004Save settings":["儲存設定"],"A heading for a block of related posts.\u0004Related":["相關文章"],"Noun, a header for a preview block in a configuration screen.\u0004Preview":["預覽"],"A caption for a button to cancel disconnection.\u0004Stay connected":["保持連結"],"A caption for a button to disconnect.\u0004Disconnect":["中斷連結"],"Short warning message\u0004Updates needed":["需要更新"],"Short label appearing near a paid feature configuration block.\u0004Paid":["付費"],"A header for a preview area in the configuration screen.\u0004Preview":["預覽"],"Ads header\u0004Ads":["廣告"],"Dashboard widget header\u0004Site connection":["網站連結"],"Dashboard widget header\u0004Account connection":["帳號連結"],"A caption for a small button to fix security issues.\u0004Threats":["威脅"],"A caption for a small button to fix security issues.\u0004FIX":["修正"],"Short warning message about new threats found.\u0004Threats found!":["找到威脅!"],"Short warning message about site having no security scan.\u0004No scanning":["無掃描"],"Caption for a button to purchase a paid feature.\u0004Upgrade":["升級"],"Short message informing user that the site is secure.\u0004Secure":["安全"],"Short warning message about an invalid key being used for Akismet.\u0004Invalid key":["無效的金鑰"],"Caption for a button to set up a feature.\u0004Set up":["設定"],"verb\u0004Copy":["複製"],"Shorthand for Privacy Policy.\u0004Privacy":["隱私權"],"Shorthand for Terms of Service.\u0004Terms":["條款"],"Navigation item. Noun. Links to a debugger tool for Jetpack.\u0004Debug":["偵錯"],"Example: \"412 Spam comments blocked\"\u0004Spam comments blocked.":["垃圾迴響已封鎖。"]}}} \ No newline at end of file
diff --git a/plugins/jetpack/languages/readme.txt b/plugins/jetpack/languages/readme.txt
deleted file mode 100644
index 54e30e10..00000000
--- a/plugins/jetpack/languages/readme.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-=== How To Translate Jetpack ===
-
-== Who translates Jetpack? How can I get involved? ==
-
-Anyone can help by suggesting new translations [here](https://translate.wordpress.org/projects/wp-plugins/jetpack/).
-
-Once you've suggested a new translation, a GlotPress validator will review it. They will then approve, reject, or change your suggestions. Once your changes get approved, they are automatically shipped to all Jetpack users using WordPress in your language.
-
-== How does GlotPress work? ==
-
-You can find detailed GlotPress documentation on [this page](https://en.support.wordpress.com/glotpress/).
-
-== I want to change translations locally. Where can I download the .PO file for my language? ==
-
-You'll find options to create a .PO file and export translations at the bottom of each language page in GlotPress.
diff --git a/plugins/jetpack/locales.php b/plugins/jetpack/locales.php
deleted file mode 100644
index a7314247..00000000
--- a/plugins/jetpack/locales.php
+++ /dev/null
@@ -1,2396 +0,0 @@
-<?php
-
-if ( ! class_exists( 'GP_Locale' ) ) :
-
-class GP_Locale {
- public $english_name;
- public $native_name;
- public $text_direction = 'ltr';
- public $lang_code_iso_639_1 = null;
- public $lang_code_iso_639_2 = null;
- public $lang_code_iso_639_3 = null;
- public $country_code;
- public $wp_locale;
- public $slug;
- public $nplurals = 2;
- public $plural_expression = 'n != 1';
- public $google_code = null;
- public $preferred_sans_serif_font_family = null;
- public $facebook_locale = null;
- // TODO: days, months, decimals, quotes
-
- private $_index_for_number;
-
- public function __construct( $args = array() ) {
- foreach( $args as $key => $value ) {
- $this->$key = $value;
- }
- }
-
- public static function __set_state( $state ) {
- return new GP_Locale( $state );
- }
-
- /**
- * Make deprecated properties checkable for backwards compatibility.
- *
- * @param string $name Property to check if set.
- * @return bool Whether the property is set.
- */
- public function __isset( $name ) {
- if ( 'rtl' == $name ) {
- return isset( $this->text_direction );
- }
- }
-
- /**
- * Make deprecated properties readable for backwards compatibility.
- *
- * @param string $name Property to get.
- * @return mixed Property.
- */
- public function __get( $name ) {
- if ( 'rtl' == $name ) {
- return ( 'rtl' === $this->text_direction );
- }
- }
-
- public function combined_name() {
- /* translators: combined name for locales: 1: name in English, 2: native name */
- return sprintf( _x( '%1$s/%2$s', 'locales', 'jetpack' ), $this->english_name, $this->native_name );
- }
-
- public function numbers_for_index( $index, $how_many = 3, $test_up_to = 1000 ) {
- $numbers = array();
-
- for( $number = 0; $number < $test_up_to; ++$number ) {
- if ( $this->index_for_number( $number ) == $index ) {
- $numbers[] = $number;
-
- if ( count( $numbers ) >= $how_many ) {
- break;
- }
- }
- }
-
- return $numbers;
- }
-
- public function index_for_number( $number ) {
- if ( ! isset( $this->_index_for_number ) ) {
- $gettext = new Gettext_Translations;
- $expression = $gettext->parenthesize_plural_exression( $this->plural_expression );
- $this->_index_for_number = $gettext->make_plural_form_function( $this->nplurals, $expression );
- }
-
- $f = $this->_index_for_number;
-
- return $f( $number );
- }
-
-}
-
-endif;
-
-if ( ! class_exists( 'GP_Locales' ) ) :
-
-class GP_Locales {
-
- public $locales = array();
-
- public function __construct() {
- $aa = new GP_Locale();
- $aa->english_name = 'Afar';
- $aa->native_name = 'Afaraf';
- $aa->lang_code_iso_639_1 = 'aa';
- $aa->lang_code_iso_639_2 = 'aar';
- $aa->slug = 'aa';
-
- $ae = new GP_Locale();
- $ae->english_name = 'Avestan';
- $ae->native_name = 'Avesta';
- $ae->lang_code_iso_639_1 = 'ae';
- $ae->lang_code_iso_639_2 = 'ave';
- $ae->slug = 'ae';
-
- $af = new GP_Locale();
- $af->english_name = 'Afrikaans';
- $af->native_name = 'Afrikaans';
- $af->lang_code_iso_639_1 = 'af';
- $af->lang_code_iso_639_2 = 'afr';
- $af->country_code = 'za';
- $af->wp_locale = 'af';
- $af->slug = 'af';
- $af->google_code = 'af';
- $af->facebook_locale = 'af_ZA';
-
- $ak = new GP_Locale();
- $ak->english_name = 'Akan';
- $ak->native_name = 'Akan';
- $ak->lang_code_iso_639_1 = 'ak';
- $ak->lang_code_iso_639_2 = 'aka';
- $ak->wp_locale = 'ak';
- $ak->slug = 'ak';
- $ak->facebook_locale = 'ak_GH';
-
- $am = new GP_Locale();
- $am->english_name = 'Amharic';
- $am->native_name = 'አማርኛ';
- $am->lang_code_iso_639_1 = 'am';
- $am->lang_code_iso_639_2 = 'amh';
- $am->country_code = 'et';
- $am->wp_locale = 'am';
- $am->slug = 'am';
- $am->facebook_locale = 'am_ET';
-
- $an = new GP_Locale();
- $an->english_name = 'Aragonese';
- $an->native_name = 'Aragonés';
- $an->lang_code_iso_639_1 = 'an';
- $an->lang_code_iso_639_2 = 'arg';
- $an->country_code = 'es';
- $an->slug = 'an';
-
- $ar = new GP_Locale();
- $ar->english_name = 'Arabic';
- $ar->native_name = 'العربية';
- $ar->lang_code_iso_639_1 = 'ar';
- $ar->lang_code_iso_639_2 = 'ara';
- $ar->wp_locale = 'ar';
- $ar->slug = 'ar';
- $ar->nplurals = 6;
- $ar->plural_expression = 'n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5';
- $ar->text_direction = 'rtl';
- $ar->preferred_sans_serif_font_family = 'Tahoma';
- $ar->google_code = 'ar';
- $ar->facebook_locale = 'ar_AR';
-
- $arq = new GP_Locale();
- $arq->english_name = 'Algerian Arabic';
- $arq->native_name = 'الدارجة الجزايرية';
- $arq->lang_code_iso_639_1 = 'ar';
- $arq->lang_code_iso_639_3 = 'arq';
- $arq->country_code = 'dz';
- $arq->wp_locale = 'arq';
- $arq->slug = 'arq';
- $arq->nplurals = 6;
- $arq->plural_expression = 'n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5';
- $arq->text_direction = 'rtl';
-
- $ary = new GP_Locale();
- $ary->english_name = 'Moroccan Arabic';
- $ary->native_name = 'العربية المغربية';
- $ary->lang_code_iso_639_1 = 'ar';
- $ary->lang_code_iso_639_3 = 'ary';
- $ary->country_code = 'ma';
- $ary->wp_locale = 'ary';
- $ary->slug = 'ary';
- $ary->nplurals = 6;
- $ary->plural_expression = 'n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5';
- $ary->text_direction = 'rtl';
-
- $as = new GP_Locale();
- $as->english_name = 'Assamese';
- $as->native_name = 'অসমীয়া';
- $as->lang_code_iso_639_1 = 'as';
- $as->lang_code_iso_639_2 = 'asm';
- $as->lang_code_iso_639_3 = 'asm';
- $as->country_code = 'in';
- $as->wp_locale = 'as';
- $as->slug = 'as';
- $as->facebook_locale = 'as_IN';
-
- $ast = new GP_Locale();
- $ast->english_name = 'Asturian';
- $ast->native_name = 'Asturianu';
- $ast->lang_code_iso_639_2 = 'ast';
- $ast->lang_code_iso_639_3 = 'ast';
- $ast->country_code = 'es';
- $ast->wp_locale = 'ast';
- $ast->slug = 'ast';
-
- $av = new GP_Locale();
- $av->english_name = 'Avaric';
- $av->native_name = 'авар мацӀ';
- $av->lang_code_iso_639_1 = 'av';
- $av->lang_code_iso_639_2 = 'ava';
- $av->slug = 'av';
-
- $ay = new GP_Locale();
- $ay->english_name = 'Aymara';
- $ay->native_name = 'aymar aru';
- $ay->lang_code_iso_639_1 = 'ay';
- $ay->lang_code_iso_639_2 = 'aym';
- $ay->slug = 'ay';
- $ay->nplurals = 1;
- $ay->plural_expression = '0';
- $ay->facebook_locale = 'ay_BO';
-
- $az = new GP_Locale();
- $az->english_name = 'Azerbaijani';
- $az->native_name = 'Azərbaycan dili';
- $az->lang_code_iso_639_1 = 'az';
- $az->lang_code_iso_639_2 = 'aze';
- $az->country_code = 'az';
- $az->wp_locale = 'az';
- $az->slug = 'az';
- $az->google_code = 'az';
- $az->facebook_locale = 'az_AZ';
-
- $azb = new GP_Locale();
- $azb->english_name = 'South Azerbaijani';
- $azb->native_name = 'گؤنئی آذربایجان';
- $azb->lang_code_iso_639_1 = 'az';
- $azb->lang_code_iso_639_3 = 'azb';
- $azb->country_code = 'ir';
- $azb->wp_locale = 'azb';
- $azb->slug = 'azb';
- $azb->text_direction = 'rtl';
-
- $az_tr = new GP_Locale();
- $az_tr->english_name = 'Azerbaijani (Turkey)';
- $az_tr->native_name = 'Azərbaycan Türkcəsi';
- $az_tr->lang_code_iso_639_1 = 'az';
- $az_tr->lang_code_iso_639_2 = 'aze';
- $az_tr->country_code = 'tr';
- $az_tr->wp_locale = 'az_TR';
- $az_tr->slug = 'az-tr';
-
- $ba = new GP_Locale();
- $ba->english_name = 'Bashkir';
- $ba->native_name = 'башҡорт теле';
- $ba->lang_code_iso_639_1 = 'ba';
- $ba->lang_code_iso_639_2 = 'bak';
- $ba->wp_locale = 'ba';
- $ba->slug = 'ba';
-
- $bal = new GP_Locale();
- $bal->english_name = 'Catalan (Balear)';
- $bal->native_name = 'Català (Balear)';
- $bal->lang_code_iso_639_2 = 'bal';
- $bal->country_code = 'es';
- $bal->wp_locale = 'bal';
- $bal->slug = 'bal';
-
- $bcc = new GP_Locale();
- $bcc->english_name = 'Balochi Southern';
- $bcc->native_name = 'بلوچی مکرانی';
- $bcc->lang_code_iso_639_3 = 'bcc';
- $bcc->country_code = 'pk';
- $bcc->wp_locale = 'bcc';
- $bcc->slug = 'bcc';
- $bcc->nplurals = 1;
- $bcc->plural_expression = '0';
- $bcc->text_direction = 'rtl';
-
- $be = new GP_Locale();
- $be->english_name = 'Belarusian';
- $be->native_name = 'Беларуская мова';
- $be->lang_code_iso_639_1 = 'be';
- $be->lang_code_iso_639_2 = 'bel';
- $be->country_code = 'by';
- $be->wp_locale = 'bel';
- $be->slug = 'bel';
- $be->nplurals = 3;
- $be->plural_expression = '(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)';
- $be->google_code = 'be';
- $be->facebook_locale = 'be_BY';
-
- $bg = new GP_Locale();
- $bg->english_name = 'Bulgarian';
- $bg->native_name = 'Български';
- $bg->lang_code_iso_639_1 = 'bg';
- $bg->lang_code_iso_639_2 = 'bul';
- $bg->country_code = 'bg';
- $bg->wp_locale = 'bg_BG';
- $bg->slug = 'bg';
- $bg->google_code = 'bg';
- $bg->facebook_locale = 'bg_BG';
-
- $bh = new GP_Locale();
- $bh->english_name = 'Bihari';
- $bh->native_name = 'भोजपुरी';
- $bh->lang_code_iso_639_1 = 'bh';
- $bh->lang_code_iso_639_2 = 'bih';
- $bh->slug = 'bh';
-
- $bi = new GP_Locale();
- $bi->english_name = 'Bislama';
- $bi->native_name = 'Bislama';
- $bi->lang_code_iso_639_1 = 'bi';
- $bi->lang_code_iso_639_2 = 'bis';
- $bi->country_code = 'vu';
- $bi->slug = 'bi';
-
- $bm = new GP_Locale();
- $bm->english_name = 'Bambara';
- $bm->native_name = 'Bamanankan';
- $bm->lang_code_iso_639_1 = 'bm';
- $bm->lang_code_iso_639_2 = 'bam';
- $bm->slug = 'bm';
-
- $bn_bd = new GP_Locale();
- $bn_bd->english_name = 'Bengali';
- $bn_bd->native_name = 'বাংলা';
- $bn_bd->lang_code_iso_639_1 = 'bn';
- $bn_bd->country_code = 'bn';
- $bn_bd->wp_locale = 'bn_BD';
- $bn_bd->slug = 'bn';
- $bn_bd->google_code = 'bn';
- $bn_bd->facebook_locale = 'bn_IN';
-
- $bo = new GP_Locale();
- $bo->english_name = 'Tibetan';
- $bo->native_name = 'བོད་ཡིག';
- $bo->lang_code_iso_639_1 = 'bo';
- $bo->lang_code_iso_639_2 = 'tib';
- $bo->wp_locale = 'bo';
- $bo->slug = 'bo';
- $bo->nplurals = 1;
- $bo->plural_expression = '0';
-
- $br = new GP_Locale();
- $br->english_name = 'Breton';
- $br->native_name = 'Brezhoneg';
- $br->lang_code_iso_639_1 = 'br';
- $br->lang_code_iso_639_2 = 'bre';
- $br->lang_code_iso_639_3 = 'bre';
- $br->country_code = 'fr';
- $br->wp_locale = 'bre';
- $br->slug = 'br';
- $br->nplurals = 2;
- $br->plural_expression = '(n > 1)';
- $br->facebook_locale = 'br_FR';
-
- $bs = new GP_Locale();
- $bs->english_name = 'Bosnian';
- $bs->native_name = 'Bosanski';
- $bs->lang_code_iso_639_1 = 'bs';
- $bs->lang_code_iso_639_2 = 'bos';
- $bs->country_code = 'ba';
- $bs->wp_locale = 'bs_BA';
- $bs->slug = 'bs';
- $bs->nplurals = 3;
- $bs->plural_expression = '(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)';
- $bs->google_code = 'bs';
- $bs->facebook_locale = 'bs_BA';
-
- $ca = new GP_Locale();
- $ca->english_name = 'Catalan';
- $ca->native_name = 'Català';
- $ca->lang_code_iso_639_1 = 'ca';
- $ca->lang_code_iso_639_2 = 'cat';
- $ca->wp_locale = 'ca';
- $ca->slug = 'ca';
- $ca->google_code = 'ca';
- $ca->facebook_locale = 'ca_ES';
-
- $ce = new GP_Locale();
- $ce->english_name = 'Chechen';
- $ce->native_name = 'Нохчийн мотт';
- $ce->lang_code_iso_639_1 = 'ce';
- $ce->lang_code_iso_639_2 = 'che';
- $ce->slug = 'ce';
-
- $ceb = new GP_Locale();
- $ceb->english_name = 'Cebuano';
- $ceb->native_name = 'Cebuano';
- $ceb->lang_code_iso_639_2 = 'ceb';
- $ceb->lang_code_iso_639_3 = 'ceb';
- $ceb->country_code = 'ph';
- $ceb->wp_locale = 'ceb';
- $ceb->slug = 'ceb';
- $ceb->facebook_locale = 'cx_PH';
-
- $ch = new GP_Locale();
- $ch->english_name = 'Chamorro';
- $ch->native_name = 'Chamoru';
- $ch->lang_code_iso_639_1 = 'ch';
- $ch->lang_code_iso_639_2 = 'cha';
- $ch->slug = 'ch';
-
- $ckb = new GP_Locale();
- $ckb->english_name = 'Kurdish (Sorani)';
- $ckb->native_name = 'كوردی‎';
- $ckb->lang_code_iso_639_1 = 'ku';
- $ckb->lang_code_iso_639_3 = 'ckb';
- $ckb->country_code = 'iq';
- $ckb->wp_locale = 'ckb';
- $ckb->slug = 'ckb';
- $ckb->text_direction = 'rtl';
- $ckb->facebook_locale = 'cb_IQ';
-
- $co = new GP_Locale();
- $co->english_name = 'Corsican';
- $co->native_name = 'Corsu';
- $co->lang_code_iso_639_1 = 'co';
- $co->lang_code_iso_639_2 = 'cos';
- $co->country_code = 'it';
- $co->wp_locale = 'co';
- $co->slug = 'co';
-
- $cr = new GP_Locale();
- $cr->english_name = 'Cree';
- $cr->native_name = 'ᓀᐦᐃᔭᐍᐏᐣ';
- $cr->lang_code_iso_639_1 = 'cr';
- $cr->lang_code_iso_639_2 = 'cre';
- $cr->country_code = 'ca';
- $cr->slug = 'cr';
-
- $cs = new GP_Locale();
- $cs->english_name = 'Czech';
- $cs->native_name = 'Čeština';
- $cs->lang_code_iso_639_1 = 'cs';
- $cs->lang_code_iso_639_2 = 'ces';
- $cs->country_code = 'cz';
- $cs->wp_locale = 'cs_CZ';
- $cs->slug = 'cs';
- $cs->nplurals = 3;
- $cs->plural_expression = '(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2';
- $cs->google_code = 'cs';
- $cs->facebook_locale = 'cs_CZ';
-
- $csb = new GP_Locale();
- $csb->english_name = 'Kashubian';
- $csb->native_name = 'Kaszëbsczi';
- $csb->lang_code_iso_639_2 = 'csb';
- $csb->slug = 'csb';
- $csb->nplurals = 3;
- $csb->plural_expression = 'n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2';
-
- $cu = new GP_Locale();
- $cu->english_name = 'Church Slavic';
- $cu->native_name = 'ѩзыкъ словѣньскъ';
- $cu->lang_code_iso_639_1 = 'cu';
- $cu->lang_code_iso_639_2 = 'chu';
- $cu->slug = 'cu';
-
- $cv = new GP_Locale();
- $cv->english_name = 'Chuvash';
- $cv->native_name = 'чӑваш чӗлхи';
- $cv->lang_code_iso_639_1 = 'cv';
- $cv->lang_code_iso_639_2 = 'chv';
- $cv->country_code = 'ru';
- $cv->slug = 'cv';
-
- $cy = new GP_Locale();
- $cy->english_name = 'Welsh';
- $cy->native_name = 'Cymraeg';
- $cy->lang_code_iso_639_1 = 'cy';
- $cy->lang_code_iso_639_2 = 'cym';
- $cy->country_code = 'gb';
- $cy->wp_locale = 'cy';
- $cy->slug = 'cy';
- $cy->nplurals = 4;
- $cy->plural_expression = '(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3';
- $cy->google_code = 'cy';
- $cy->facebook_locale = 'cy_GB';
-
- $da = new GP_Locale();
- $da->english_name = 'Danish';
- $da->native_name = 'Dansk';
- $da->lang_code_iso_639_1 = 'da';
- $da->lang_code_iso_639_2 = 'dan';
- $da->country_code = 'dk';
- $da->wp_locale = 'da_DK';
- $da->slug = 'da';
- $da->google_code = 'da';
- $da->facebook_locale = 'da_DK';
-
- $de = new GP_Locale();
- $de->english_name = 'German';
- $de->native_name = 'Deutsch';
- $de->lang_code_iso_639_1 = 'de';
- $de->country_code = 'de';
- $de->wp_locale = 'de_DE';
- $de->slug = 'de';
- $de->google_code = 'de';
- $de->facebook_locale = 'de_DE';
-
- $de_ch = new GP_Locale();
- $de_ch->english_name = 'German (Switzerland)';
- $de_ch->native_name = 'Deutsch (Schweiz)';
- $de_ch->lang_code_iso_639_1 = 'de';
- $de_ch->country_code = 'ch';
- $de_ch->wp_locale = 'de_CH';
- $de_ch->slug = 'de-ch';
- $de_ch->google_code = 'de';
-
- $dv = new GP_Locale();
- $dv->english_name = 'Dhivehi';
- $dv->native_name = 'ދިވެހި';
- $dv->lang_code_iso_639_1 = 'dv';
- $dv->lang_code_iso_639_2 = 'div';
- $dv->country_code = 'mv';
- $dv->wp_locale = 'dv';
- $dv->slug = 'dv';
- $dv->text_direction = 'rtl';
-
- $dzo = new GP_Locale();
- $dzo->english_name = 'Dzongkha';
- $dzo->native_name = 'རྫོང་ཁ';
- $dzo->lang_code_iso_639_1 = 'dz';
- $dzo->lang_code_iso_639_2 = 'dzo';
- $dzo->country_code = 'bt';
- $dzo->wp_locale = 'dzo';
- $dzo->slug = 'dzo';
- $dzo->nplurals = 1;
- $dzo->plural_expression = '0';
-
- $ewe = new GP_Locale();
- $ewe->english_name = 'Ewe';
- $ewe->native_name = 'Eʋegbe';
- $ewe->lang_code_iso_639_1 = 'ee';
- $ewe->lang_code_iso_639_2 = 'ewe';
- $ewe->lang_code_iso_639_3 = 'ewe';
- $ewe->country_code = 'gh';
- $ewe->wp_locale = 'ewe';
- $ewe->slug = 'ee';
-
- $el_po = new GP_Locale();
- $el_po->english_name = 'Greek (Polytonic)';
- $el_po->native_name = 'Greek (Polytonic)'; // TODO
- $el_po->country_code = 'gr';
- $el_po->slug = 'el-po';
-
- $el = new GP_Locale();
- $el->english_name = 'Greek';
- $el->native_name = 'Ελληνικά';
- $el->lang_code_iso_639_1 = 'el';
- $el->lang_code_iso_639_2 = 'ell';
- $el->country_code = 'gr';
- $el->wp_locale = 'el';
- $el->slug = 'el';
- $el->google_code = 'el';
- $el->facebook_locale = 'el_GR';
-
- $emoji = new GP_Locale();
- $emoji->english_name = 'Emoji';
- $emoji->native_name = "\xf0\x9f\x8c\x8f\xf0\x9f\x8c\x8d\xf0\x9f\x8c\x8e (Emoji)";
- $emoji->lang_code_iso_639_2 = 'art';
- $emoji->wp_locale = 'art_xemoji';
- $emoji->slug = 'art-xemoji';
- $emoji->nplurals = 1;
- $emoji->plural_expression = '0';
-
- $en = new GP_Locale();
- $en->english_name = 'English';
- $en->native_name = 'English';
- $en->lang_code_iso_639_1 = 'en';
- $en->country_code = 'us';
- $en->wp_locale = 'en_US';
- $en->slug = 'en';
- $en->google_code = 'en';
- $en->facebook_locale = 'en_US';
-
- $en_au = new GP_Locale();
- $en_au->english_name = 'English (Australia)';
- $en_au->native_name = 'English (Australia)';
- $en_au->lang_code_iso_639_1 = 'en';
- $en_au->lang_code_iso_639_2 = 'eng';
- $en_au->lang_code_iso_639_3 = 'eng';
- $en_au->country_code = 'au';
- $en_au->wp_locale = 'en_AU';
- $en_au->slug = 'en-au';
- $en_au->google_code = 'en';
-
- $en_ca = new GP_Locale();
- $en_ca->english_name = 'English (Canada)';
- $en_ca->native_name = 'English (Canada)';
- $en_ca->lang_code_iso_639_1 = 'en';
- $en_ca->lang_code_iso_639_2 = 'eng';
- $en_ca->lang_code_iso_639_3 = 'eng';
- $en_ca->country_code = 'ca';
- $en_ca->wp_locale = 'en_CA';
- $en_ca->slug = 'en-ca';
- $en_ca->google_code = 'en';
-
- $en_gb = new GP_Locale();
- $en_gb->english_name = 'English (UK)';
- $en_gb->native_name = 'English (UK)';
- $en_gb->lang_code_iso_639_1 = 'en';
- $en_gb->lang_code_iso_639_2 = 'eng';
- $en_gb->lang_code_iso_639_3 = 'eng';
- $en_gb->country_code = 'gb';
- $en_gb->wp_locale = 'en_GB';
- $en_gb->slug = 'en-gb';
- $en_gb->google_code = 'en';
- $en_gb->facebook_locale = 'en_GB';
-
- $en_nz = new GP_Locale();
- $en_nz->english_name = 'English (New Zealand)';
- $en_nz->native_name = 'English (New Zealand)';
- $en_nz->lang_code_iso_639_1 = 'en';
- $en_nz->lang_code_iso_639_2 = 'eng';
- $en_nz->lang_code_iso_639_3 = 'eng';
- $en_nz->country_code = 'nz';
- $en_nz->wp_locale = 'en_NZ';
- $en_nz->slug = 'en-nz';
- $en_nz->google_code = 'en';
-
- $en_za = new GP_Locale();
- $en_za->english_name = 'English (South Africa)';
- $en_za->native_name = 'English (South Africa)';
- $en_za->lang_code_iso_639_1 = 'en';
- $en_za->lang_code_iso_639_2 = 'eng';
- $en_za->lang_code_iso_639_3 = 'eng';
- $en_za->country_code = 'za';
- $en_za->wp_locale = 'en_ZA';
- $en_za->slug = 'en-za';
- $en_za->google_code = 'en';
-
- $eo = new GP_Locale();
- $eo->english_name = 'Esperanto';
- $eo->native_name = 'Esperanto';
- $eo->lang_code_iso_639_1 = 'eo';
- $eo->lang_code_iso_639_2 = 'epo';
- $eo->wp_locale = 'eo';
- $eo->slug = 'eo';
- $eo->google_code = 'eo';
- $eo->facebook_locale = 'eo_EO';
-
- $es = new GP_Locale();
- $es->english_name = 'Spanish (Spain)';
- $es->native_name = 'Español';
- $es->lang_code_iso_639_1 = 'es';
- $es->lang_code_iso_639_2 = 'spa';
- $es->lang_code_iso_639_3 = 'spa';
- $es->country_code = 'es';
- $es->wp_locale = 'es_ES';
- $es->slug = 'es';
- $es->google_code = 'es';
- $es->facebook_locale = 'es_ES';
-
- $es_ar = new GP_Locale();
- $es_ar->english_name = 'Spanish (Argentina)';
- $es_ar->native_name = 'Español de Argentina';
- $es_ar->lang_code_iso_639_1 = 'es';
- $es_ar->lang_code_iso_639_2 = 'spa';
- $es_ar->lang_code_iso_639_3 = 'spa';
- $es_ar->country_code = 'ar';
- $es_ar->wp_locale = 'es_AR';
- $es_ar->slug = 'es-ar';
- $es_ar->google_code = 'es';
- $es_ar->facebook_locale = 'es_LA';
-
- $es_cl = new GP_Locale();
- $es_cl->english_name = 'Spanish (Chile)';
- $es_cl->native_name = 'Español de Chile';
- $es_cl->lang_code_iso_639_1 = 'es';
- $es_cl->lang_code_iso_639_2 = 'spa';
- $es_cl->lang_code_iso_639_3 = 'spa';
- $es_cl->country_code = 'cl';
- $es_cl->wp_locale = 'es_CL';
- $es_cl->slug = 'es-cl';
- $es_cl->google_code = 'es';
- $es_cl->facebook_locale = 'es_CL';
-
- $es_co = new GP_Locale();
- $es_co->english_name = 'Spanish (Colombia)';
- $es_co->native_name = 'Español de Colombia';
- $es_co->lang_code_iso_639_1 = 'es';
- $es_co->lang_code_iso_639_2 = 'spa';
- $es_co->lang_code_iso_639_3 = 'spa';
- $es_co->country_code = 'co';
- $es_co->wp_locale = 'es_CO';
- $es_co->slug = 'es-co';
- $es_co->google_code = 'es';
- $es_co->facebook_locale = 'es_CO';
-
- $es_cr = new GP_Locale();
- $es_cr->english_name = 'Spanish (Costa Rica)';
- $es_cr->native_name = 'Español de Costa Rica';
- $es_cr->lang_code_iso_639_1 = 'es';
- $es_cr->lang_code_iso_639_2 = 'spa';
- $es_cr->lang_code_iso_639_3 = 'spa';
- $es_cr->country_code = 'cr';
- $es_cr->wp_locale = 'es_CR';
- $es_cr->slug = 'es-cr';
-
- $es_gt = new GP_Locale();
- $es_gt->english_name = 'Spanish (Guatemala)';
- $es_gt->native_name = 'Español de Guatemala';
- $es_gt->lang_code_iso_639_1 = 'es';
- $es_gt->lang_code_iso_639_2 = 'spa';
- $es_gt->lang_code_iso_639_3 = 'spa';
- $es_gt->country_code = 'gt';
- $es_gt->wp_locale = 'es_GT';
- $es_gt->slug = 'es-gt';
- $es_gt->google_code = 'es';
- $es_gt->facebook_locale = 'es_LA';
-
- $es_mx = new GP_Locale();
- $es_mx->english_name = 'Spanish (Mexico)';
- $es_mx->native_name = 'Español de México';
- $es_mx->lang_code_iso_639_1 = 'es';
- $es_mx->lang_code_iso_639_2 = 'spa';
- $es_mx->lang_code_iso_639_3 = 'spa';
- $es_mx->country_code = 'mx';
- $es_mx->wp_locale = 'es_MX';
- $es_mx->slug = 'es-mx';
- $es_mx->google_code = 'es';
- $es_mx->facebook_locale = 'es_MX';
-
- $es_pe = new GP_Locale();
- $es_pe->english_name = 'Spanish (Peru)';
- $es_pe->native_name = 'Español de Perú';
- $es_pe->lang_code_iso_639_1 = 'es';
- $es_pe->lang_code_iso_639_2 = 'spa';
- $es_pe->lang_code_iso_639_3 = 'spa';
- $es_pe->country_code = 'pe';
- $es_pe->wp_locale = 'es_PE';
- $es_pe->slug = 'es-pe';
- $es_pe->google_code = 'es';
- $es_pe->facebook_locale = 'es_LA';
-
- $es_pr = new GP_Locale();
- $es_pr->english_name = 'Spanish (Puerto Rico)';
- $es_pr->native_name = 'Español de Puerto Rico';
- $es_pr->lang_code_iso_639_1 = 'es';
- $es_pr->lang_code_iso_639_2 = 'spa';
- $es_pr->lang_code_iso_639_3 = 'spa';
- $es_pr->country_code = 'pr';
- $es_pr->wp_locale = 'es_PR';
- $es_pr->slug = 'es-pr';
- $es_pr->google_code = 'es';
- $es_pr->facebook_locale = 'es_LA';
-
- $es_us = new GP_Locale();
- $es_us->english_name = 'Spanish (US)';
- $es_us->native_name = 'Español de los Estados Unidos';
- $es_us->lang_code_iso_639_1 = 'es';
- $es_us->lang_code_iso_639_2 = 'spa';
- $es_us->lang_code_iso_639_3 = 'spa';
- $es_us->country_code = 'us';
- $es_us->slug = 'es-us';
-
- $es_ve = new GP_Locale();
- $es_ve->english_name = 'Spanish (Venezuela)';
- $es_ve->native_name = 'Español de Venezuela';
- $es_ve->lang_code_iso_639_1 = 'es';
- $es_ve->lang_code_iso_639_2 = 'spa';
- $es_ve->lang_code_iso_639_3 = 'spa';
- $es_ve->country_code = 've';
- $es_ve->wp_locale = 'es_VE';
- $es_ve->slug = 'es-ve';
- $es_ve->google_code = 'es';
- $es_ve->facebook_locale = 'es_VE';
-
- $et = new GP_Locale();
- $et->english_name = 'Estonian';
- $et->native_name = 'Eesti';
- $et->lang_code_iso_639_1 = 'et';
- $et->lang_code_iso_639_2 = 'est';
- $et->country_code = 'ee';
- $et->wp_locale = 'et';
- $et->slug = 'et';
- $et->google_code = 'et';
- $et->facebook_locale = 'et_EE';
-
- $eu = new GP_Locale();
- $eu->english_name = 'Basque';
- $eu->native_name = 'Euskara';
- $eu->lang_code_iso_639_1 = 'eu';
- $eu->lang_code_iso_639_2 = 'eus';
- $eu->country_code = 'es';
- $eu->wp_locale = 'eu';
- $eu->slug = 'eu';
- $eu->google_code = 'eu';
- $eu->facebook_locale = 'eu_ES';
-
- $fa = new GP_Locale();
- $fa->english_name = 'Persian';
- $fa->native_name = 'فارسی';
- $fa->lang_code_iso_639_1 = 'fa';
- $fa->lang_code_iso_639_2 = 'fas';
- $fa->wp_locale = 'fa_IR';
- $fa->slug = 'fa';
- $fa->nplurals = 1;
- $fa->plural_expression = '0';
- $fa->text_direction = 'rtl';
- $fa->google_code = 'fa';
- $fa->facebook_locale = 'fa_IR';
-
- $fa_af = new GP_Locale();
- $fa_af->english_name = 'Persian (Afghanistan)';
- $fa_af->native_name = '(فارسی (افغانستان';
- $fa_af->lang_code_iso_639_1 = 'fa';
- $fa_af->lang_code_iso_639_2 = 'fas';
- $fa_af->wp_locale = 'fa_AF';
- $fa_af->slug = 'fa-af';
- $fa_af->nplurals = 1;
- $fa_af->plural_expression = '0';
- $fa_af->text_direction = 'rtl';
- $fa_af->google_code = 'fa';
-
- $ff_sn = new GP_Locale();
- $ff_sn->english_name = 'Fulah';
- $ff_sn->native_name = 'Pulaar';
- $ff_sn->lang_code_iso_639_1 = 'ff';
- $ff_sn->lang_code_iso_639_2 = 'fuc';
- $ff_sn->country_code = 'sn';
- $ff_sn->wp_locale = 'fuc';
- $ff_sn->slug = 'fuc';
- $ff_sn->plural_expression = 'n!=1';
-
- $fi = new GP_Locale();
- $fi->english_name = 'Finnish';
- $fi->native_name = 'Suomi';
- $fi->lang_code_iso_639_1 = 'fi';
- $fi->lang_code_iso_639_2 = 'fin';
- $fi->country_code = 'fi';
- $fi->wp_locale = 'fi';
- $fi->slug = 'fi';
- $fi->google_code = 'fi';
- $fi->facebook_locale = 'fi_FI';
-
- $fj = new GP_Locale();
- $fj->english_name = 'Fijian';
- $fj->native_name = 'Vosa Vakaviti';
- $fj->lang_code_iso_639_1 = 'fj';
- $fj->lang_code_iso_639_2 = 'fij';
- $fj->country_code = 'fj';
- $fj->slug = 'fj';
-
- $fo = new GP_Locale();
- $fo->english_name = 'Faroese';
- $fo->native_name = 'Føroyskt';
- $fo->lang_code_iso_639_1 = 'fo';
- $fo->lang_code_iso_639_2 = 'fao';
- $fo->country_code = 'fo';
- $fo->wp_locale = 'fo';
- $fo->slug = 'fo';
- $fo->facebook_locale = 'fo_FO';
-
- $fr = new GP_Locale();
- $fr->english_name = 'French (France)';
- $fr->native_name = 'Français';
- $fr->lang_code_iso_639_1 = 'fr';
- $fr->country_code = 'fr';
- $fr->wp_locale = 'fr_FR';
- $fr->slug = 'fr';
- $fr->nplurals = 2;
- $fr->plural_expression = 'n > 1';
- $fr->google_code = 'fr';
- $fr->facebook_locale = 'fr_FR';
-
- $fr_be = new GP_Locale();
- $fr_be->english_name = 'French (Belgium)';
- $fr_be->native_name = 'Français de Belgique';
- $fr_be->lang_code_iso_639_1 = 'fr';
- $fr_be->lang_code_iso_639_2 = 'fra';
- $fr_be->country_code = 'be';
- $fr_be->wp_locale = 'fr_BE';
- $fr_be->slug = 'fr-be';
-
- $fr_ca = new GP_Locale();
- $fr_ca->english_name = 'French (Canada)';
- $fr_ca->native_name = 'Français du Canada';
- $fr_ca->lang_code_iso_639_1 = 'fr';
- $fr_ca->lang_code_iso_639_2 = 'fra';
- $fr_ca->country_code = 'ca';
- $fr_ca->wp_locale = 'fr_CA';
- $fr_ca->slug = 'fr-ca';
- $fr_ca->facebook_locale = 'fr_CA';
-
- $fr_ch = new GP_Locale();
- $fr_ch->english_name = 'French (Switzerland)';
- $fr_ch->native_name = 'Français de Suisse';
- $fr_ch->lang_code_iso_639_1 = 'fr';
- $fr_ch->lang_code_iso_639_2 = 'fra';
- $fr_ch->country_code = 'ch';
- $fr_ch->slug = 'fr-ch';
-
- $frp = new GP_Locale();
- $frp->english_name = 'Arpitan';
- $frp->native_name = 'Arpitan';
- $frp->lang_code_iso_639_3 = 'frp';
- $frp->country_code = 'fr';
- $frp->wp_locale = 'frp';
- $frp->slug = 'frp';
- $frp->nplurals = 2;
- $frp->plural_expression = 'n > 1';
-
- $fur = new GP_Locale();
- $fur->english_name = 'Friulian';
- $fur->native_name = 'Friulian';
- $fur->lang_code_iso_639_2 = 'fur';
- $fur->lang_code_iso_639_3 = 'fur';
- $fur->country_code = 'it';
- $fur->wp_locale = 'fur';
- $fur->slug = 'fur';
-
- $fy = new GP_Locale();
- $fy->english_name = 'Frisian';
- $fy->native_name = 'Frysk';
- $fy->lang_code_iso_639_1 = 'fy';
- $fy->lang_code_iso_639_2 = 'fry';
- $fy->country_code = 'nl';
- $fy->wp_locale = 'fy';
- $fy->slug = 'fy';
- $fy->facebook_locale = 'fy_NL';
-
- $ga = new GP_Locale();
- $ga->english_name = 'Irish';
- $ga->native_name = 'Gaelige';
- $ga->lang_code_iso_639_1 = 'ga';
- $ga->lang_code_iso_639_2 = 'gle';
- $ga->country_code = 'ie';
- $ga->slug = 'ga';
- $ga->wp_locale = 'ga';
- $ga->nplurals = 5;
- $ga->plural_expression = 'n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4';
- $ga->google_code = 'ga';
- $ga->facebook_locale = 'ga_IE';
-
- $gd = new GP_Locale();
- $gd->english_name = 'Scottish Gaelic';
- $gd->native_name = 'Gàidhlig';
- $gd->lang_code_iso_639_1 = 'gd';
- $gd->lang_code_iso_639_2 = 'gla';
- $gd->lang_code_iso_639_3 = 'gla';
- $gd->country_code = 'gb';
- $gd->wp_locale = 'gd';
- $gd->slug = 'gd';
- $gd->nplurals = 4;
- $gd->plural_expression = '(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3';
- $gd->google_code = 'gd';
-
- $gl = new GP_Locale();
- $gl->english_name = 'Galician';
- $gl->native_name = 'Galego';
- $gl->lang_code_iso_639_1 = 'gl';
- $gl->lang_code_iso_639_2 = 'glg';
- $gl->country_code = 'es';
- $gl->wp_locale = 'gl_ES';
- $gl->slug = 'gl';
- $gl->google_code = 'gl';
- $gl->facebook_locale = 'gl_ES';
-
- $gn = new GP_Locale();
- $gn->english_name = 'Guaraní';
- $gn->native_name = 'Avañe\'ẽ';
- $gn->lang_code_iso_639_1 = 'gn';
- $gn->lang_code_iso_639_2 = 'grn';
- $gn->wp_locale = 'gn';
- $gn->slug = 'gn';
-
- $gsw = new GP_Locale();
- $gsw->english_name = 'Swiss German';
- $gsw->native_name = 'Schwyzerdütsch';
- $gsw->lang_code_iso_639_2 = 'gsw';
- $gsw->lang_code_iso_639_3 = 'gsw';
- $gsw->country_code = 'ch';
- $gsw->wp_locale = 'gsw';
- $gsw->slug = 'gsw';
-
- $gu = new GP_Locale();
- $gu->english_name = 'Gujarati';
- $gu->native_name = 'ગુજરાતી';
- $gu->lang_code_iso_639_1 = 'gu';
- $gu->lang_code_iso_639_2 = 'guj';
- $gu->wp_locale = 'gu';
- $gu->slug = 'gu';
- $gu->google_code = 'gu';
- $gu->facebook_locale = 'gu_IN';
-
- $ha = new GP_Locale();
- $ha->english_name = 'Hausa (Arabic)';
- $ha->native_name = 'هَوُسَ';
- $ha->lang_code_iso_639_1 = 'ha';
- $ha->lang_code_iso_639_2 = 'hau';
- $ha->slug = 'ha';
- $ha->text_direction = 'rtl';
- $ha->google_code = 'ha';
-
- $hat = new GP_Locale();
- $hat->english_name = 'Haitian Creole';
- $hat->native_name = 'Kreyol ayisyen';
- $hat->lang_code_iso_639_1 = 'ht';
- $hat->lang_code_iso_639_2 = 'hat';
- $hat->lang_code_iso_639_3 = 'hat';
- $hat->country_code = 'ht';
- $hat->wp_locale = 'hat';
- $hat->slug = 'hat';
-
- $hau = new GP_Locale();
- $hau->english_name = 'Hausa';
- $hau->native_name = 'Harshen Hausa';
- $hau->lang_code_iso_639_1 = 'ha';
- $hau->lang_code_iso_639_2 = 'hau';
- $hau->lang_code_iso_639_3 = 'hau';
- $hau->country_code = 'ng';
- $hau->wp_locale = 'hau';
- $hau->slug = 'hau';
- $hau->google_code = 'ha';
- $hau->facebook_locale = 'ha_NG';
-
- $haw = new GP_Locale();
- $haw->english_name = 'Hawaiian';
- $haw->native_name = 'Ōlelo Hawaiʻi';
- $haw->lang_code_iso_639_2 = 'haw';
- $haw->country_code = 'us';
- $haw->wp_locale = 'haw_US';
- $haw->slug = 'haw';
-
- $haz = new GP_Locale();
- $haz->english_name = 'Hazaragi';
- $haz->native_name = 'هزاره گی';
- $haz->lang_code_iso_639_3 = 'haz';
- $haz->country_code = 'af';
- $haz->wp_locale = 'haz';
- $haz->slug = 'haz';
- $haz->text_direction = 'rtl';
-
- $he = new GP_Locale();
- $he->english_name = 'Hebrew';
- $he->native_name = 'עִבְרִית';
- $he->lang_code_iso_639_1 = 'he';
- $he->country_code = 'il';
- $he->wp_locale = 'he_IL';
- $he->slug = 'he';
- $he->text_direction = 'rtl';
- $he->google_code = 'iw';
- $he->facebook_locale = 'he_IL';
-
- $hi = new GP_Locale();
- $hi->english_name = 'Hindi';
- $hi->native_name = 'हिन्दी';
- $hi->lang_code_iso_639_1 = 'hi';
- $hi->lang_code_iso_639_2 = 'hin';
- $hi->country_code = 'in';
- $hi->wp_locale = 'hi_IN';
- $hi->slug = 'hi';
- $hi->google_code = 'hi';
- $hi->facebook_locale = 'hi_IN';
-
- $hr = new GP_Locale();
- $hr->english_name = 'Croatian';
- $hr->native_name = 'Hrvatski';
- $hr->lang_code_iso_639_1 = 'hr';
- $hr->lang_code_iso_639_2 = 'hrv';
- $hr->country_code = 'hr';
- $hr->wp_locale = 'hr';
- $hr->slug = 'hr';
- $hr->nplurals = 3;
- $hr->plural_expression = '(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)';
- $hr->google_code = 'hr';
- $hr->facebook_locale = 'hr_HR';
-
- $hu = new GP_Locale();
- $hu->english_name = 'Hungarian';
- $hu->native_name = 'Magyar';
- $hu->lang_code_iso_639_1 = 'hu';
- $hu->lang_code_iso_639_2 = 'hun';
- $hu->country_code = 'hu';
- $hu->wp_locale = 'hu_HU';
- $hu->slug = 'hu';
- $hu->google_code = 'hu';
- $hu->facebook_locale = 'hu_HU';
-
- $hy = new GP_Locale();
- $hy->english_name = 'Armenian';
- $hy->native_name = 'Հայերեն';
- $hy->lang_code_iso_639_1 = 'hy';
- $hy->lang_code_iso_639_2 = 'hye';
- $hy->country_code = 'am';
- $hy->wp_locale = 'hy';
- $hy->slug = 'hy';
- $hy->google_code = 'hy';
- $hy->facebook_locale = 'hy_AM';
-
- $ia = new GP_Locale();
- $ia->english_name = 'Interlingua';
- $ia->native_name = 'Interlingua';
- $ia->lang_code_iso_639_1 = 'ia';
- $ia->lang_code_iso_639_2 = 'ina';
- $ia->slug = 'ia';
-
- $id = new GP_Locale();
- $id->english_name = 'Indonesian';
- $id->native_name = 'Bahasa Indonesia';
- $id->lang_code_iso_639_1 = 'id';
- $id->lang_code_iso_639_2 = 'ind';
- $id->country_code = 'id';
- $id->wp_locale = 'id_ID';
- $id->slug = 'id';
- $id->nplurals = 2;
- $id->plural_expression = 'n > 1';
- $id->google_code = 'id';
- $id->facebook_locale = 'id_ID';
-
- $ido = new GP_Locale();
- $ido->english_name = 'Ido';
- $ido->native_name = 'Ido';
- $ido->lang_code_iso_639_1 = 'io';
- $ido->lang_code_iso_639_2 = 'ido';
- $ido->lang_code_iso_639_3 = 'ido';
- $ido->wp_locale = 'ido';
- $ido->slug = 'ido';
-
- $ike = new GP_Locale();
- $ike->english_name = 'Inuktitut';
- $ike->native_name = 'ᐃᓄᒃᑎᑐᑦ';
- $ike->lang_code_iso_639_1 = 'iu';
- $ike->lang_code_iso_639_2 = 'iku';
- $ike->country_code = 'ca';
- $ike->slug = 'ike';
-
- $ilo = new GP_Locale();
- $ilo->english_name = 'Iloko';
- $ilo->native_name = 'Pagsasao nga Iloko';
- $ilo->lang_code_iso_639_2 = 'ilo';
- $ilo->country_code = 'ph';
- $ilo->slug = 'ilo';
-
- $is = new GP_Locale();
- $is->english_name = 'Icelandic';
- $is->native_name = 'Íslenska';
- $is->lang_code_iso_639_1 = 'is';
- $is->lang_code_iso_639_2 = 'isl';
- $is->country_code = 'is';
- $is->slug = 'is';
- $is->wp_locale = 'is_IS';
- $is->nplurals = 2;
- $is->plural_expression = '(n % 100 != 1 && n % 100 != 21 && n % 100 != 31 && n % 100 != 41 && n % 100 != 51 && n % 100 != 61 && n % 100 != 71 && n % 100 != 81 && n % 100 != 91)';
- $is->google_code = 'is';
- $is->facebook_locale = 'is_IS';
-
- $it = new GP_Locale();
- $it->english_name = 'Italian';
- $it->native_name = 'Italiano';
- $it->lang_code_iso_639_1 = 'it';
- $it->lang_code_iso_639_2 = 'ita';
- $it->country_code = 'it';
- $it->wp_locale = 'it_IT';
- $it->slug = 'it';
- $it->google_code = 'it';
- $it->facebook_locale = 'it_IT';
-
- $ja = new GP_Locale();
- $ja->english_name = 'Japanese';
- $ja->native_name = '日本語';
- $ja->lang_code_iso_639_1 = 'ja';
- $ja->country_code = 'jp';
- $ja->wp_locale = 'ja';
- $ja->slug = 'ja';
- $ja->google_code = 'ja';
- $ja->facebook_locale = 'ja_JP';
- $ja->nplurals = 1;
- $ja->plural_expression = '0';
-
- $jv = new GP_Locale();
- $jv->english_name = 'Javanese';
- $jv->native_name = 'Basa Jawa';
- $jv->lang_code_iso_639_1 = 'jv';
- $jv->lang_code_iso_639_2 = 'jav';
- $jv->country_code = 'id';
- $jv->wp_locale = 'jv_ID';
- $jv->slug = 'jv';
- $jv->google_code = 'jw';
- $jv->facebook_locale = 'jv_ID';
-
- $ka = new GP_Locale();
- $ka->english_name = 'Georgian';
- $ka->native_name = 'ქართული';
- $ka->lang_code_iso_639_1 = 'ka';
- $ka->lang_code_iso_639_2 = 'kat';
- $ka->country_code = 'ge';
- $ka->wp_locale = 'ka_GE';
- $ka->slug = 'ka';
- $ka->nplurals = 1;
- $ka->plural_expression = '0';
- $ka->google_code = 'ka';
- $ka->facebook_locale = 'ka_GE';
-
- $kab = new GP_Locale();
- $kab->english_name = 'Kabyle';
- $kab->native_name = 'Taqbaylit';
- $kab->lang_code_iso_639_2 = 'kab';
- $kab->lang_code_iso_639_3 = 'kab';
- $kab->country_code = 'dz';
- $kab->wp_locale = 'kab';
- $kab->slug = 'kab';
- $kab->nplurals = 2;
- $kab->plural_expression = '(n > 1)';
-
- $kal = new GP_Locale();
- $kal->english_name = 'Greenlandic';
- $kal->native_name = 'Kalaallisut';
- $kal->lang_code_iso_639_1 = 'kl';
- $kal->lang_code_iso_639_2 = 'kal';
- $kal->lang_code_iso_639_3 = 'kal';
- $kal->country_code = 'gl';
- $kal->wp_locale = 'kal';
- $kal->slug = 'kal';
-
- $kin = new GP_Locale();
- $kin->english_name = 'Kinyarwanda';
- $kin->native_name = 'Ikinyarwanda';
- $kin->lang_code_iso_639_1 = 'rw';
- $kin->lang_code_iso_639_2 = 'kin';
- $kin->lang_code_iso_639_3 = 'kin';
- $kin->wp_locale = 'kin';
- $kin->country_code = 'rw';
- $kin->slug = 'kin';
- $kin->facebook_locale = 'rw_RW';
-
- $kk = new GP_Locale();
- $kk->english_name = 'Kazakh';
- $kk->native_name = 'Қазақ тілі';
- $kk->lang_code_iso_639_1 = 'kk';
- $kk->lang_code_iso_639_2 = 'kaz';
- $kk->country_code = 'kz';
- $kk->wp_locale = 'kk';
- $kk->slug = 'kk';
- $kk->google_code = 'kk';
- $kk->facebook_locale = 'kk_KZ';
-
- $km = new GP_Locale();
- $km->english_name = 'Khmer';
- $km->native_name = 'ភាសាខ្មែរ';
- $km->lang_code_iso_639_1 = 'km';
- $km->lang_code_iso_639_2 = 'khm';
- $km->country_code = 'kh';
- $km->wp_locale = 'km';
- $km->slug = 'km';
- $km->nplurals = 1;
- $km->plural_expression = '0';
- $km->google_code = 'km';
- $km->facebook_locale = 'km_KH';
-
- $kmr = new GP_Locale();
- $kmr->english_name = 'Kurdish (Kurmanji)';
- $kmr->native_name = 'Kurdî';
- $kmr->lang_code_iso_639_1 = 'ku';
- $kmr->lang_code_iso_639_3 = 'kmr';
- $kmr->country_code = 'tr';
- $kmr->slug = 'kmr';
- $kmr->facebook_locale = 'ku_TR';
-
- $kn = new GP_Locale();
- $kn->english_name = 'Kannada';
- $kn->native_name = 'ಕನ್ನಡ';
- $kn->lang_code_iso_639_1 = 'kn';
- $kn->lang_code_iso_639_2 = 'kan';
- $kn->country_code = 'in';
- $kn->wp_locale = 'kn';
- $kn->slug = 'kn';
- $kn->google_code = 'kn';
- $kn->facebook_locale = 'kn_IN';
-
- $ko = new GP_Locale();
- $ko->english_name = 'Korean';
- $ko->native_name = '한국어';
- $ko->lang_code_iso_639_1 = 'ko';
- $ko->lang_code_iso_639_2 = 'kor';
- $ko->country_code = 'kr';
- $ko->wp_locale = 'ko_KR';
- $ko->slug = 'ko';
- $ko->nplurals = 1;
- $ko->plural_expression = '0';
- $ko->google_code = 'ko';
- $ko->facebook_locale = 'ko_KR';
-
- $ks = new GP_Locale();
- $ks->english_name = 'Kashmiri';
- $ks->native_name = 'कश्मीरी';
- $ks->lang_code_iso_639_1 = 'ks';
- $ks->lang_code_iso_639_2 = 'kas';
- $ks->slug = 'ks';
-
- $kir = new GP_Locale();
- $kir->english_name = 'Kyrgyz';
- $kir->native_name = 'Кыргызча';
- $kir->lang_code_iso_639_1 = 'ky';
- $kir->lang_code_iso_639_2 = 'kir';
- $kir->lang_code_iso_639_3 = 'kir';
- $kir->country_code = 'kg';
- $kir->wp_locale = 'kir';
- $kir->slug = 'kir';
- $kir->nplurals = 1;
- $kir->plural_expression = '0';
- $kir->google_code = 'ky';
-
- $la = new GP_Locale();
- $la->english_name = 'Latin';
- $la->native_name = 'Latine';
- $la->lang_code_iso_639_1 = 'la';
- $la->lang_code_iso_639_2 = 'lat';
- $la->slug = 'la';
- $la->google_code = 'la';
- $la->facebook_locale = 'la_VA';
-
- $lb = new GP_Locale();
- $lb->english_name = 'Luxembourgish';
- $lb->native_name = 'Lëtzebuergesch';
- $lb->lang_code_iso_639_1 = 'lb';
- $lb->country_code = 'lu';
- $lb->wp_locale = 'lb_LU';
- $lb->slug = 'lb';
-
- $li = new GP_Locale();
- $li->english_name = 'Limburgish';
- $li->native_name = 'Limburgs';
- $li->lang_code_iso_639_1 = 'li';
- $li->lang_code_iso_639_2 = 'lim';
- $li->lang_code_iso_639_3 = 'lim';
- $li->country_code = 'nl';
- $li->wp_locale = 'li';
- $li->slug = 'li';
- $li->facebook_locale = 'li_NL';
-
- $lin = new GP_Locale();
- $lin->english_name = 'Lingala';
- $lin->native_name = 'Ngala';
- $lin->lang_code_iso_639_1 = 'ln';
- $lin->lang_code_iso_639_2 = 'lin';
- $lin->country_code = 'cd';
- $lin->wp_locale = 'lin';
- $lin->slug = 'lin';
- $lin->nplurals = 2;
- $lin->plural_expression = 'n>1';
- $lin->facebook_locale = 'ln_CD';
-
- $lmo = new GP_Locale();
- $lmo->english_name = 'Lombard';
- $lmo->native_name = 'Lombardo';
- $lmo->lang_code_iso_639_3 = 'lmo';
- $lmo->country_code = 'it';
- $lmo->wp_locale = 'lmo';
- $lmo->slug = 'lmo';
-
- $lo = new GP_Locale();
- $lo->english_name = 'Lao';
- $lo->native_name = 'ພາສາລາວ';
- $lo->lang_code_iso_639_1 = 'lo';
- $lo->lang_code_iso_639_2 = 'lao';
- $lo->country_code = 'LA';
- $lo->wp_locale = 'lo';
- $lo->slug = 'lo';
- $lo->nplurals = 1;
- $lo->plural_expression = '0';
- $lo->google_code = 'lo';
- $lo->facebook_locale = 'lo_LA';
-
- $lt = new GP_Locale();
- $lt->english_name = 'Lithuanian';
- $lt->native_name = 'Lietuvių kalba';
- $lt->lang_code_iso_639_1 = 'lt';
- $lt->lang_code_iso_639_2 = 'lit';
- $lt->country_code = 'lt';
- $lt->wp_locale = 'lt_LT';
- $lt->slug = 'lt';
- $lt->nplurals = 3;
- $lt->plural_expression = '(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2)';
- $lt->google_code = 'lt';
- $lt->facebook_locale = 'lt_LT';
-
- $lug = new GP_Locale();
- $lug->english_name = 'Luganda';
- $lug->native_name = 'Oluganda';
- $lug->lang_code_iso_639_1 = 'lg';
- $lug->lang_code_iso_639_2 = 'lug';
- $lug->lang_code_iso_639_3 = 'lug';
- $lug->country_code = 'ug';
- $lug->wp_locale = 'lug';
- $lug->slug = 'lug';
-
- $lv = new GP_Locale();
- $lv->english_name = 'Latvian';
- $lv->native_name = 'Latviešu valoda';
- $lv->lang_code_iso_639_1 = 'lv';
- $lv->lang_code_iso_639_2 = 'lav';
- $lv->country_code = 'lv';
- $lv->wp_locale = 'lv';
- $lv->slug = 'lv';
- $lv->nplurals = 3;
- $lv->plural_expression = '(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2)';
- $lv->google_code = 'lv';
- $lv->facebook_locale = 'lv_LV';
-
- $me = new GP_Locale();
- $me->english_name = 'Montenegrin';
- $me->native_name = 'Crnogorski jezik';
- $me->lang_code_iso_639_1 = 'me';
- $me->country_code = 'me';
- $me->wp_locale = 'me_ME';
- $me->slug = 'me';
- $me->nplurals = 3;
- $me->plural_expression = '(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)';
-
- $mfe = new GP_Locale();
- $mfe->english_name = 'Mauritian Creole';
- $mfe->native_name = 'Kreol Morisien';
- $mfe->lang_code_iso_639_3 = 'mfe';
- $mfe->country_code = 'mu';
- $mfe->wp_locale = 'mfe';
- $mfe->slug = 'mfe';
- $mfe->nplurals = 1;
- $mfe->plural_expression = '0';
-
- $mg = new GP_Locale();
- $mg->english_name = 'Malagasy';
- $mg->native_name = 'Malagasy';
- $mg->lang_code_iso_639_1 = 'mg';
- $mg->lang_code_iso_639_2 = 'mlg';
- $mg->country_code = 'mg';
- $mg->wp_locale = 'mg_MG';
- $mg->slug = 'mg';
- $mg->google_code = 'mg';
- $mg->facebook_locale = 'mg_MG';
-
- $mhr = new GP_Locale();
- $mhr->english_name = 'Mari (Meadow)';
- $mhr->native_name = 'Олык марий';
- $mhr->lang_code_iso_639_3 = 'mhr';
- $mhr->country_code = 'ru';
- $mhr->slug = 'mhr';
-
- $mk = new GP_Locale();
- $mk->english_name = 'Macedonian';
- $mk->native_name = 'Македонски јазик';
- $mk->lang_code_iso_639_1 = 'mk';
- $mk->lang_code_iso_639_2 = 'mkd';
- $mk->country_code = 'mk';
- $mk->wp_locale = 'mk_MK';
- $mk->slug = 'mk';
- $mk->nplurals = 2;
- $mk->plural_expression = 'n==1 || n%10==1 ? 0 : 1';
- $mk->google_code = 'mk';
- $mk->facebook_locale = 'mk_MK';
-
- $ml = new GP_Locale();
- $ml->english_name = 'Malayalam';
- $ml->native_name = 'മലയാളം';
- $ml->lang_code_iso_639_1 = 'ml';
- $ml->lang_code_iso_639_2 = 'mal';
- $ml->country_code = 'in';
- $ml->wp_locale = 'ml_IN';
- $ml->slug = 'ml';
- $ml->google_code = 'ml';
- $ml->facebook_locale = 'ml_IN';
-
- $mlt = new GP_Locale();
- $mlt->english_name = 'Maltese';
- $mlt->native_name = 'Malti';
- $mlt->lang_code_iso_639_1 = 'mt';
- $mlt->lang_code_iso_639_2 = 'mlt';
- $mlt->lang_code_iso_639_3 = 'mlt';
- $mlt->country_code = 'mt';
- $mlt->wp_locale = 'mlt';
- $mlt->slug = 'mlt';
- $mlt->nplurals = 4;
- $mlt->plural_expression = '(n==1 ? 0 : n==0 || ( n%100>1 && n%100<11) ? 1 : (n%100>10 && n%100<20 ) ? 2 : 3)';
- $mlt->google_code = 'mt';
- $mlt->facebook_locale = 'mt_MT';
-
- $mn = new GP_Locale();
- $mn->english_name = 'Mongolian';
- $mn->native_name = 'Монгол';
- $mn->lang_code_iso_639_1 = 'mn';
- $mn->lang_code_iso_639_2 = 'mon';
- $mn->country_code = 'mn';
- $mn->wp_locale = 'mn';
- $mn->slug = 'mn';
- $mn->google_code = 'mn';
- $mn->facebook_locale = 'mn_MN';
-
- $mr = new GP_Locale();
- $mr->english_name = 'Marathi';
- $mr->native_name = 'मराठी';
- $mr->lang_code_iso_639_1 = 'mr';
- $mr->lang_code_iso_639_2 = 'mar';
- $mr->wp_locale = 'mr';
- $mr->slug = 'mr';
- $mr->google_code = 'mr';
- $mr->facebook_locale = 'mr_IN';
-
- $mri = new GP_Locale();
- $mri->english_name = 'Maori';
- $mri->native_name = 'Te Reo Māori';
- $mri->lang_code_iso_639_1 = 'mi';
- $mri->lang_code_iso_639_3 = 'mri';
- $mri->country_code = 'nz';
- $mri->slug = 'mri';
- $mri->wp_locale = 'mri';
- $mri->nplurals = 2;
- $mri->plural_expression = '(n > 1)';
- $mri->google_code = 'mi';
-
- $mrj = new GP_Locale();
- $mrj->english_name = 'Mari (Hill)';
- $mrj->native_name = 'Кырык мары';
- $mrj->lang_code_iso_639_3 = 'mrj';
- $mrj->country_code = 'ru';
- $mrj->slug = 'mrj';
-
- $ms = new GP_Locale();
- $ms->english_name = 'Malay';
- $ms->native_name = 'Bahasa Melayu';
- $ms->lang_code_iso_639_1 = 'ms';
- $ms->lang_code_iso_639_2 = 'msa';
- $ms->wp_locale = 'ms_MY';
- $ms->slug = 'ms';
- $ms->nplurals = 1;
- $ms->plural_expression = '0';
- $ms->google_code = 'ms';
- $ms->facebook_locale = 'ms_MY';
-
- $mwl = new GP_Locale();
- $mwl->english_name = 'Mirandese';
- $mwl->native_name = 'Mirandés';
- $mwl->lang_code_iso_639_2 = 'mwl';
- $mwl->slug = 'mwl';
-
- $my = new GP_Locale();
- $my->english_name = 'Myanmar (Burmese)';
- $my->native_name = 'ဗမာစာ';
- $my->lang_code_iso_639_1 = 'my';
- $my->lang_code_iso_639_2 = 'mya';
- $my->country_code = 'mm';
- $my->wp_locale = 'my_MM';
- $my->slug = 'mya';
- $my->google_code = 'my';
-
- $ne = new GP_Locale();
- $ne->english_name = 'Nepali';
- $ne->native_name = 'नेपाली';
- $ne->lang_code_iso_639_1 = 'ne';
- $ne->lang_code_iso_639_2 = 'nep';
- $ne->country_code = 'np';
- $ne->wp_locale = 'ne_NP';
- $ne->slug = 'ne';
- $ne->google_code = 'ne';
- $ne->facebook_locale = 'ne_NP';
-
- $nb = new GP_Locale();
- $nb->english_name = 'Norwegian (Bokmål)';
- $nb->native_name = 'Norsk bokmål';
- $nb->lang_code_iso_639_1 = 'nb';
- $nb->lang_code_iso_639_2 = 'nob';
- $nb->country_code = 'no';
- $nb->wp_locale = 'nb_NO';
- $nb->slug = 'nb';
- $nb->google_code = 'no';
- $nb->facebook_locale = 'nb_NO';
-
- $nl = new GP_Locale();
- $nl->english_name = 'Dutch';
- $nl->native_name = 'Nederlands';
- $nl->lang_code_iso_639_1 = 'nl';
- $nl->lang_code_iso_639_2 = 'nld';
- $nl->country_code = 'nl';
- $nl->wp_locale = 'nl_NL';
- $nl->slug = 'nl';
- $nl->google_code = 'nl';
- $nl->facebook_locale = 'nl_NL';
-
- $nl_be = new GP_Locale();
- $nl_be->english_name = 'Dutch (Belgium)';
- $nl_be->native_name = 'Nederlands (België)';
- $nl_be->lang_code_iso_639_1 = 'nl';
- $nl_be->lang_code_iso_639_2 = 'nld';
- $nl_be->country_code = 'be';
- $nl_be->wp_locale = 'nl_BE';
- $nl_be->slug = 'nl-be';
- $nl_be->google_code = 'nl';
-
- $nn = new GP_Locale();
- $nn->english_name = 'Norwegian (Nynorsk)';
- $nn->native_name = 'Norsk nynorsk';
- $nn->lang_code_iso_639_1 = 'nn';
- $nn->lang_code_iso_639_2 = 'nno';
- $nn->country_code = 'no';
- $nn->wp_locale = 'nn_NO';
- $nn->slug = 'nn';
- $nn->google_code = 'no';
- $nn->facebook_locale = 'nn_NO';
-
- $no = new GP_Locale();
- $no->english_name = 'Norwegian';
- $no->native_name = 'Norsk';
- $no->lang_code_iso_639_1 = 'no';
- $no->lang_code_iso_639_2 = 'nor';
- $no->country_code = 'no';
- $no->slug = 'no';
- $no->google_code = 'no';
-
- $oci = new GP_Locale();
- $oci->english_name = 'Occitan';
- $oci->native_name = 'Occitan';
- $oci->lang_code_iso_639_1 = 'oc';
- $oci->lang_code_iso_639_2 = 'oci';
- $oci->country_code = 'fr';
- $oci->wp_locale = 'oci';
- $oci->slug = 'oci';
- $oci->nplurals = 2;
- $oci->plural_expression = '(n > 1)';
-
- $orm = new GP_Locale();
- $orm->english_name = 'Oromo';
- $orm->native_name = 'Afaan Oromo';
- $orm->lang_code_iso_639_1 = 'om';
- $orm->lang_code_iso_639_2 = 'orm';
- $orm->lang_code_iso_639_3 = 'orm';
- $orm->slug = 'orm';
- $orm->plural_expression = '(n > 1)';
-
- $ory = new GP_Locale();
- $ory->english_name = 'Oriya';
- $ory->native_name = 'ଓଡ଼ିଆ';
- $ory->lang_code_iso_639_1 = 'or';
- $ory->lang_code_iso_639_2 = 'ory';
- $ory->country_code = 'in';
- $ory->wp_locale = 'ory';
- $ory->slug = 'ory';
- $ory->facebook_locale = 'or_IN';
-
- $os = new GP_Locale();
- $os->english_name = 'Ossetic';
- $os->native_name = 'Ирон';
- $os->lang_code_iso_639_1 = 'os';
- $os->lang_code_iso_639_2 = 'oss';
- $os->wp_locale = 'os';
- $os->slug = 'os';
-
- $pa = new GP_Locale();
- $pa->english_name = 'Punjabi';
- $pa->native_name = 'ਪੰਜਾਬੀ';
- $pa->lang_code_iso_639_1 = 'pa';
- $pa->lang_code_iso_639_2 = 'pan';
- $pa->country_code = 'in';
- $pa->wp_locale = 'pa_IN';
- $pa->slug = 'pa';
- $pa->google_code = 'pa';
- $pa->facebook_locale = 'pa_IN';
-
- $pap = new GP_Locale();
- $pap->english_name = 'Papiamento';
- $pap->native_name = 'Papiamentu';
- $pap->lang_code_iso_639_2 = 'pap';
- $pap->lang_code_iso_639_3 = 'pap';
- $pap->country_code = 'cw';
- $pap->wp_locale = 'pap';
- $pap->slug = 'pap';
-
- $pirate = new GP_Locale();
- $pirate->english_name = 'English (Pirate)';
- $pirate->native_name = 'English (Pirate)';
- $pirate->lang_code_iso_639_2 = 'art';
- $pirate->wp_locale = 'art_xpirate';
- $pirate->slug = 'pirate';
- $pirate->google_code = 'xx-pirate';
- $pirate->facebook_locale = 'en_PI';
-
- $pl = new GP_Locale();
- $pl->english_name = 'Polish';
- $pl->native_name = 'Polski';
- $pl->lang_code_iso_639_1 = 'pl';
- $pl->lang_code_iso_639_2 = 'pol';
- $pl->country_code = 'pl';
- $pl->wp_locale = 'pl_PL';
- $pl->slug = 'pl';
- $pl->nplurals = 3;
- $pl->plural_expression = '(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)';
- $pl->google_code = 'pl';
- $pl->facebook_locale = 'pl_PL';
-
- $pt_br = new GP_Locale();
- $pt_br->english_name = 'Portuguese (Brazil)';
- $pt_br->native_name = 'Português do Brasil';
- $pt_br->lang_code_iso_639_1 = 'pt';
- $pt_br->lang_code_iso_639_2 = 'por';
- $pt_br->country_code = 'br';
- $pt_br->wp_locale = 'pt_BR';
- $pt_br->slug = 'pt-br';
- $pt_br->nplurals = 2;
- $pt_br->plural_expression = '(n > 1)';
- $pt_br->google_code = 'pt-BR';
- $pt_br->facebook_locale = 'pt_BR';
-
- $pt = new GP_Locale();
- $pt->english_name = 'Portuguese (Portugal)';
- $pt->native_name = 'Português';
- $pt->lang_code_iso_639_1 = 'pt';
- $pt->country_code = 'pt';
- $pt->wp_locale = 'pt_PT';
- $pt->slug = 'pt';
- $pt->google_code = 'pt-PT';
- $pt->facebook_locale = 'pt_PT';
-
- $ps = new GP_Locale();
- $ps->english_name = 'Pashto';
- $ps->native_name = 'پښتو';
- $ps->lang_code_iso_639_1 = 'ps';
- $ps->lang_code_iso_639_2 = 'pus';
- $ps->country_code = 'af';
- $ps->wp_locale = 'ps';
- $ps->slug = 'ps';
- $ps->text_direction = 'rtl';
- $ps->facebook_locale = 'ps_AF';
-
- $rhg = new GP_Locale();
- $rhg->english_name = 'Rohingya';
- $rhg->native_name = 'Ruáinga';
- $rhg->lang_code_iso_639_3 = 'rhg';
- $rhg->country_code = 'mm';
- $rhg->wp_locale = 'rhg';
- $rhg->slug = 'rhg';
- $rhg->nplurals = 1;
- $rhg->plural_expression = '0';
-
- $ro = new GP_Locale();
- $ro->english_name = 'Romanian';
- $ro->native_name = 'Română';
- $ro->lang_code_iso_639_1 = 'ro';
- $ro->lang_code_iso_639_2 = 'ron';
- $ro->country_code = 'ro';
- $ro->wp_locale = 'ro_RO';
- $ro->slug = 'ro';
- $ro->nplurals = 3;
- $ro->plural_expression = '(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2)';
- $ro->google_code = 'ro';
- $ro->facebook_locale = 'ro_RO';
-
- $roh = new GP_Locale();
- $roh->english_name = 'Romansh';
- $roh->native_name = 'Rumantsch';
- $roh->lang_code_iso_639_2 = 'rm';
- $roh->lang_code_iso_639_3 = 'roh';
- $roh->country_code = 'ch';
- $roh->wp_locale = 'roh';
- $roh->slug = 'roh';
-
- $ru = new GP_Locale();
- $ru->english_name = 'Russian';
- $ru->native_name = 'Русский';
- $ru->lang_code_iso_639_1 = 'ru';
- $ru->lang_code_iso_639_2 = 'rus';
- $ru->country_code = 'ru';
- $ru->wp_locale = 'ru_RU';
- $ru->slug = 'ru';
- $ru->nplurals = 3;
- $ru->plural_expression = '(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)';
- $ru->google_code = 'ru';
- $ru->facebook_locale = 'ru_RU';
-
- $rue = new GP_Locale();
- $rue->english_name = 'Rusyn';
- $rue->native_name = 'Русиньскый';
- $rue->lang_code_iso_639_3 = 'rue';
- $rue->wp_locale = 'rue';
- $rue->slug = 'rue';
- $rue->nplurals = 3;
- $rue->plural_expression = '(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)';
-
- $rup = new GP_Locale();
- $rup->english_name = 'Aromanian';
- $rup->native_name = 'Armãneashce';
- $rup->lang_code_iso_639_2 = 'rup';
- $rup->lang_code_iso_639_3 = 'rup';
- $rup->country_code = 'mk';
- $rup->wp_locale = 'rup_MK';
- $rup->slug = 'rup';
-
- $sah = new GP_Locale();
- $sah->english_name = 'Sakha';
- $sah->native_name = 'Сахалыы';
- $sah->lang_code_iso_639_2 = 'sah';
- $sah->lang_code_iso_639_3 = 'sah';
- $sah->country_code = 'ru';
- $sah->wp_locale = 'sah';
- $sah->slug = 'sah';
-
- $sa_in = new GP_Locale();
- $sa_in->english_name = 'Sanskrit';
- $sa_in->native_name = 'भारतम्';
- $sa_in->lang_code_iso_639_1 = 'sa';
- $sa_in->lang_code_iso_639_2 = 'san';
- $sa_in->lang_code_iso_639_3 = 'san';
- $sa_in->country_code = 'in';
- $sa_in->wp_locale = 'sa_IN';
- $sa_in->slug = 'sa-in';
- $sa_in->facebook_locale = 'sa_IN';
-
- $scn = new GP_Locale();
- $scn->english_name = 'Sicilian';
- $scn->native_name = 'Sicilianu';
- $scn->lang_code_iso_639_3 = 'scn';
- $scn->country_code = 'it';
- $scn->wp_locale = 'scn';
- $scn->slug = 'scn';
-
- $si = new GP_Locale();
- $si->english_name = 'Sinhala';
- $si->native_name = 'සිංහල';
- $si->lang_code_iso_639_1 = 'si';
- $si->lang_code_iso_639_2 = 'sin';
- $si->country_code = 'lk';
- $si->wp_locale = 'si_LK';
- $si->slug = 'si';
- $si->google_code = 'si';
- $si->facebook_locale = 'si_LK';
-
- $sk = new GP_Locale();
- $sk->english_name = 'Slovak';
- $sk->native_name = 'Slovenčina';
- $sk->lang_code_iso_639_1 = 'sk';
- $sk->lang_code_iso_639_2 = 'slk';
- $sk->country_code = 'sk';
- $sk->slug = 'sk';
- $sk->wp_locale = 'sk_SK';
- $sk->nplurals = 3;
- $sk->plural_expression = '(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2';
- $sk->google_code = 'sk';
- $sk->facebook_locale = 'sk_SK';
-
- $skr = new GP_Locale();
- $skr->english_name = 'Saraiki';
- $skr->native_name = 'سرائیکی';
- $skr->lang_code_iso_639_3 = 'skr';
- $skr->country_code = 'pk';
- $skr->wp_locale = 'skr';
- $skr->slug = 'skr';
- $skr->nplurals = 2;
- $skr->plural_expression = '(n > 1)';
- $skr->text_direction = 'rtl';
-
- $sl = new GP_Locale();
- $sl->english_name = 'Slovenian';
- $sl->native_name = 'Slovenščina';
- $sl->lang_code_iso_639_1 = 'sl';
- $sl->lang_code_iso_639_2 = 'slv';
- $sl->country_code = 'si';
- $sl->wp_locale = 'sl_SI';
- $sl->slug = 'sl';
- $sl->nplurals = 4;
- $sl->plural_expression = '(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3)';
- $sl->google_code = 'sl';
- $sl->facebook_locale = 'sl_SI';
-
- $sna = new GP_Locale();
- $sna->english_name = 'Shona';
- $sna->native_name = 'ChiShona';
- $sna->lang_code_iso_639_1 = 'sn';
- $sna->lang_code_iso_639_3 = 'sna';
- $sna->country_code = 'zw';
- $sna->wp_locale = 'sna';
- $sna->slug = 'sna';
-
- $snd = new GP_Locale();
- $snd->english_name = 'Sindhi';
- $snd->native_name = 'سنڌي';
- $snd->lang_code_iso_639_1 = 'sd';
- $snd->lang_code_iso_639_2 = 'sd';
- $snd->lang_code_iso_639_3 = 'snd';
- $snd->country_code = 'pk';
- $snd->wp_locale = 'snd';
- $snd->slug = 'snd';
- $snd->text_direction = 'rtl';
-
- $so = new GP_Locale();
- $so->english_name = 'Somali';
- $so->native_name = 'Afsoomaali';
- $so->lang_code_iso_639_1 = 'so';
- $so->lang_code_iso_639_2 = 'som';
- $so->lang_code_iso_639_3 = 'som';
- $so->country_code = 'so';
- $so->wp_locale = 'so_SO';
- $so->slug = 'so';
- $so->google_code = 'so';
- $so->facebook_locale = 'so_SO';
-
- $sq = new GP_Locale();
- $sq->english_name = 'Albanian';
- $sq->native_name = 'Shqip';
- $sq->lang_code_iso_639_1 = 'sq';
- $sq->lang_code_iso_639_2 = 'sqi';
- $sq->wp_locale = 'sq';
- $sq->country_code = 'al';
- $sq->slug = 'sq';
- $sq->google_code = 'sq';
- $sq->facebook_locale = 'sq_AL';
-
- $sq_xk = new GP_Locale();
- $sq_xk->english_name = 'Shqip (Kosovo)';
- $sq_xk->native_name = 'Për Kosovën Shqip';
- $sq_xk->lang_code_iso_639_1 = 'sq';
- $sq_xk->country_code = 'xk'; // Temporary country code until Kosovo is assigned an ISO code.
- $sq_xk->wp_locale = 'sq_XK';
- $sq_xk->slug = 'sq-xk';
-
- $sr = new GP_Locale();
- $sr->english_name = 'Serbian';
- $sr->native_name = 'Српски језик';
- $sr->lang_code_iso_639_1 = 'sr';
- $sr->lang_code_iso_639_2 = 'srp';
- $sr->country_code = 'rs';
- $sr->wp_locale = 'sr_RS';
- $sr->slug = 'sr';
- $sr->nplurals = 3;
- $sr->plural_expression = '(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)';
- $sr->google_code = 'sr';
- $sr->facebook_locale = 'sr_RS';
-
- $srd = new GP_Locale();
- $srd->english_name = 'Sardinian';
- $srd->native_name = 'Sardu';
- $srd->lang_code_iso_639_1 = 'sc';
- $srd->lang_code_iso_639_2 = 'srd';
- $srd->country_code = 'it';
- $srd->wp_locale = 'srd';
- $srd->slug = 'srd';
- $srd->facebook_locale = 'sc_IT';
-
- $ssw = new GP_Locale();
- $ssw->english_name = 'Swati';
- $ssw->native_name = 'SiSwati';
- $ssw->lang_code_iso_639_1 = 'ss';
- $ssw->lang_code_iso_639_2 = 'ssw';
- $ssw->lang_code_iso_639_3 = 'ssw';
- $ssw->country_code = 'sz';
- $ssw->wp_locale = 'ssw';
- $ssw->slug = 'ssw';
-
- $su = new GP_Locale();
- $su->english_name = 'Sundanese';
- $su->native_name = 'Basa Sunda';
- $su->lang_code_iso_639_1 = 'su';
- $su->lang_code_iso_639_2 = 'sun';
- $su->country_code = 'id';
- $su->wp_locale = 'su_ID';
- $su->slug = 'su';
- $su->nplurals = 1;
- $su->plural_expression = '0';
- $su->google_code = 'su';
-
- $sv = new GP_Locale();
- $sv->english_name = 'Swedish';
- $sv->native_name = 'Svenska';
- $sv->lang_code_iso_639_1 = 'sv';
- $sv->lang_code_iso_639_2 = 'swe';
- $sv->country_code = 'se';
- $sv->wp_locale = 'sv_SE';
- $sv->slug = 'sv';
- $sv->google_code = 'sv';
- $sv->facebook_locale = 'sv_SE';
-
- $sw = new GP_Locale();
- $sw->english_name = 'Swahili';
- $sw->native_name = 'Kiswahili';
- $sw->lang_code_iso_639_1 = 'sw';
- $sw->lang_code_iso_639_2 = 'swa';
- $sw->wp_locale = 'sw';
- $sw->slug = 'sw';
- $sw->google_code = 'sw';
- $sw->facebook_locale = 'sw_KE';
-
- $syr = new GP_Locale();
- $syr->english_name = 'Syriac';
- $syr->native_name = 'Syriac';
- $syr->lang_code_iso_639_3 = 'syr';
- $syr->country_code = 'iq';
- $syr->wp_locale = 'syr';
- $syr->slug = 'syr';
-
- $szl = new GP_Locale();
- $szl->english_name = 'Silesian';
- $szl->native_name = 'Ślōnskŏ gŏdka';
- $szl->lang_code_iso_639_3 = 'szl';
- $szl->country_code = 'pl';
- $szl->wp_locale = 'szl';
- $szl->slug = 'szl';
- $szl->nplurals = 3;
- $szl->plural_expression = '(n==1 ? 0 : n%10>=2 && n%10<=4 && n%100==20 ? 1 : 2)';
- $szl->facebook_locale = 'sz_PL';
-
- $ta = new GP_Locale();
- $ta->english_name = 'Tamil';
- $ta->native_name = 'தமிழ்';
- $ta->lang_code_iso_639_1 = 'ta';
- $ta->lang_code_iso_639_2 = 'tam';
- $ta->country_code = 'in';
- $ta->wp_locale = 'ta_IN';
- $ta->slug = 'ta';
- $ta->google_code = 'ta';
- $ta->facebook_locale = 'ta_IN';
-
- $ta_lk = new GP_Locale();
- $ta_lk->english_name = 'Tamil (Sri Lanka)';
- $ta_lk->native_name = 'தமிழ்';
- $ta_lk->lang_code_iso_639_1 = 'ta';
- $ta_lk->lang_code_iso_639_2 = 'tam';
- $ta_lk->country_code = 'lk';
- $ta_lk->wp_locale = 'ta_LK';
- $ta_lk->slug = 'ta-lk';
- $ta_lk->google_code = 'ta';
-
- $tah = new GP_Locale();
- $tah->english_name = 'Tahitian';
- $tah->native_name = 'Reo Tahiti';
- $tah->lang_code_iso_639_1 = 'ty';
- $tah->lang_code_iso_639_2 = 'tah';
- $tah->lang_code_iso_639_3 = 'tah';
- $tah->country_code = 'fr';
- $tah->wp_locale = 'tah';
- $tah->slug = 'tah';
- $tah->nplurals = 2;
- $tah->plural_expression = '(n > 1)';
-
- $te = new GP_Locale();
- $te->english_name = 'Telugu';
- $te->native_name = 'తెలుగు';
- $te->lang_code_iso_639_1 = 'te';
- $te->lang_code_iso_639_2 = 'tel';
- $te->wp_locale = 'te';
- $te->slug = 'te';
- $te->google_code = 'te';
- $te->facebook_locale = 'te_IN';
-
- $tg = new GP_Locale();
- $tg->english_name = 'Tajik';
- $tg->native_name = 'Тоҷикӣ';
- $tg->lang_code_iso_639_1 = 'tg';
- $tg->lang_code_iso_639_2 = 'tgk';
- $tah->country_code = 'tj';
- $tg->wp_locale = 'tg';
- $tg->slug = 'tg';
- $tg->google_code = 'tg';
- $tg->facebook_locale = 'tg_TJ';
-
- $th = new GP_Locale();
- $th->english_name = 'Thai';
- $th->native_name = 'ไทย';
- $th->lang_code_iso_639_1 = 'th';
- $th->lang_code_iso_639_2 = 'tha';
- $th->wp_locale = 'th';
- $th->slug = 'th';
- $th->nplurals = 1;
- $th->plural_expression = '0';
- $th->google_code = 'th';
- $th->facebook_locale = 'th_TH';
-
- $tir = new GP_Locale();
- $tir->english_name = 'Tigrinya';
- $tir->native_name = 'ትግርኛ';
- $tir->lang_code_iso_639_1 = 'ti';
- $tir->lang_code_iso_639_2 = 'tir';
- $tir->country_code = 'er';
- $tir->wp_locale = 'tir';
- $tir->slug = 'tir';
- $tir->nplurals = 1;
- $tir->plural_expression = '0';
-
- $tlh = new GP_Locale();
- $tlh->english_name = 'Klingon';
- $tlh->native_name = 'TlhIngan';
- $tlh->lang_code_iso_639_2 = 'tlh';
- $tlh->slug = 'tlh';
- $tlh->nplurals = 1;
- $tlh->plural_expression = '0';
- $tlh->facebook_locale = 'tl_ST';
-
- $tl = new GP_Locale();
- $tl->english_name = 'Tagalog';
- $tl->native_name = 'Tagalog';
- $tl->lang_code_iso_639_1 = 'tl';
- $tl->lang_code_iso_639_2 = 'tgl';
- $tl->country_code = 'ph';
- $tl->wp_locale = 'tl';
- $tl->slug = 'tl';
- $tl->google_code = 'tl';
- $tl->facebook_locale = 'tl_PH';
-
- $tr = new GP_Locale();
- $tr->english_name = 'Turkish';
- $tr->native_name = 'Türkçe';
- $tr->lang_code_iso_639_1 = 'tr';
- $tr->lang_code_iso_639_2 = 'tur';
- $tr->country_code = 'tr';
- $tr->wp_locale = 'tr_TR';
- $tr->slug = 'tr';
- $tr->nplurals = 2;
- $tr->plural_expression = '(n > 1)';
- $tr->google_code = 'tr';
- $tr->facebook_locale = 'tr_TR';
-
- $tt_ru = new GP_Locale();
- $tt_ru->english_name = 'Tatar';
- $tt_ru->native_name = 'Татар теле';
- $tt_ru->lang_code_iso_639_1 = 'tt';
- $tt_ru->lang_code_iso_639_2 = 'tat';
- $tt_ru->country_code = 'ru';
- $tt_ru->wp_locale = 'tt_RU';
- $tt_ru->slug = 'tt';
- $tt_ru->nplurals = 1;
- $tt_ru->plural_expression = '0';
- $tt_ru->facebook_locale = 'tt_RU';
-
- $tuk = new GP_Locale();
- $tuk->english_name = 'Turkmen';
- $tuk->native_name = 'Türkmençe';
- $tuk->lang_code_iso_639_1 = 'tk';
- $tuk->lang_code_iso_639_2 = 'tuk';
- $tuk->country_code = 'tm';
- $tuk->wp_locale = 'tuk';
- $tuk->slug = 'tuk';
- $tuk->nplurals = 2;
- $tuk->plural_expression = '(n > 1)';
- $tuk->facebook_locale = 'tk_TM';
-
- $twd = new GP_Locale();
- $twd->english_name = 'Tweants';
- $twd->native_name = 'Twents';
- $twd->lang_code_iso_639_3 = 'twd';
- $twd->country_code = 'nl';
- $twd->wp_locale = 'twd';
- $twd->slug = 'twd';
-
- $tzm = new GP_Locale();
- $tzm->english_name = 'Tamazight (Central Atlas)';
- $tzm->native_name = 'ⵜⴰⵎⴰⵣⵉⵖⵜ';
- $tzm->lang_code_iso_639_2 = 'tzm';
- $tzm->country_code = 'ma';
- $tzm->wp_locale = 'tzm';
- $tzm->slug = 'tzm';
- $tzm->nplurals = 2;
- $tzm->plural_expression = '(n > 1)';
-
- $udm = new GP_Locale();
- $udm->english_name = 'Udmurt';
- $udm->native_name = 'Удмурт кыл';
- $udm->lang_code_iso_639_2 = 'udm';
- $udm->slug = 'udm';
-
- $ug = new GP_Locale();
- $ug->english_name = 'Uighur';
- $ug->native_name = 'ئۇيغۇرچە';
- $ug->lang_code_iso_639_1 = 'ug';
- $ug->lang_code_iso_639_2 = 'uig';
- $ug->country_code = 'cn';
- $ug->wp_locale = 'ug_CN';
- $ug->slug = 'ug';
- $ug->text_direction = 'rtl';
-
- $uk = new GP_Locale();
- $uk->english_name = 'Ukrainian';
- $uk->native_name = 'Українська';
- $uk->lang_code_iso_639_1 = 'uk';
- $uk->lang_code_iso_639_2 = 'ukr';
- $uk->country_code = 'ua';
- $uk->wp_locale = 'uk';
- $uk->slug = 'uk';
- $uk->nplurals = 3;
- $uk->plural_expression = '(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)';
- $uk->google_code = 'uk';
- $uk->facebook_locale = 'uk_UA';
-
- $ur = new GP_Locale();
- $ur->english_name = 'Urdu';
- $ur->native_name = 'اردو';
- $ur->lang_code_iso_639_1 = 'ur';
- $ur->lang_code_iso_639_2 = 'urd';
- $ur->country_code = 'pk';
- $ur->wp_locale = 'ur';
- $ur->slug = 'ur';
- $ur->text_direction = 'rtl';
- $ur->google_code = 'ur';
- $ur->facebook_locale = 'ur_PK';
-
- $uz = new GP_Locale();
- $uz->english_name = 'Uzbek';
- $uz->native_name = 'O‘zbekcha';
- $uz->lang_code_iso_639_1 = 'uz';
- $uz->lang_code_iso_639_2 = 'uzb';
- $uz->country_code = 'uz';
- $uz->wp_locale = 'uz_UZ';
- $uz->slug = 'uz';
- $uz->nplurals = 1;
- $uz->plural_expression = '0';
- $uz->google_code = 'uz';
- $uz->facebook_locale = 'uz_UZ';
-
- $vec = new GP_Locale();
- $vec->english_name = 'Venetian';
- $vec->native_name = 'Vèneta';
- $vec->lang_code_iso_639_2 = 'roa';
- $vec->lang_code_iso_639_3 = 'vec';
- $vec->country_code = 'it';
- $vec->slug = 'vec';
-
- $vi = new GP_Locale();
- $vi->english_name = 'Vietnamese';
- $vi->native_name = 'Tiếng Việt';
- $vi->lang_code_iso_639_1 = 'vi';
- $vi->lang_code_iso_639_2 = 'vie';
- $vi->country_code = 'vn';
- $vi->wp_locale = 'vi';
- $vi->slug = 'vi';
- $vi->nplurals = 1;
- $vi->plural_expression = '0';
- $vi->google_code = 'vi';
- $vi->facebook_locale = 'vi_VN';
-
- $wa = new GP_Locale();
- $wa->english_name = 'Walloon';
- $wa->native_name = 'Walon';
- $wa->lang_code_iso_639_1 = 'wa';
- $wa->lang_code_iso_639_2 = 'wln';
- $wa->country_code = 'be';
- $wa->wp_locale = 'wa';
- $wa->slug = 'wa';
-
- $xho = new GP_Locale();
- $xho->english_name = 'Xhosa';
- $xho->native_name = 'isiXhosa';
- $xho->lang_code_iso_639_1 = 'xh';
- $xho->lang_code_iso_639_2 = 'xho';
- $xho->lang_code_iso_639_3 = 'xho';
- $xho->country_code = 'za';
- $xho->wp_locale = 'xho';
- $xho->slug = 'xho';
- $xho->google_code = 'xh';
- $xho->facebook_locale = 'xh_ZA';
-
- $xmf = new GP_Locale();
- $xmf->english_name = 'Mingrelian';
- $xmf->native_name = 'მარგალური ნინა';
- $xmf->lang_code_iso_639_3 = 'xmf';
- $xmf->country_code = 'ge';
- $xmf->wp_locale = 'xmf';
- $xmf->slug = 'xmf';
-
- $yi = new GP_Locale();
- $yi->english_name = 'Yiddish';
- $yi->native_name = 'ייִדיש';
- $yi->lang_code_iso_639_1 = 'yi';
- $yi->lang_code_iso_639_2 = 'yid';
- $yi->slug = 'yi';
- $yi->text_direction = 'rtl';
- $yi->google_code = 'yi';
-
- $yor = new GP_Locale();
- $yor->english_name = 'Yoruba';
- $yor->native_name = 'Yorùbá';
- $yor->lang_code_iso_639_1 = 'yo';
- $yor->lang_code_iso_639_2 = 'yor';
- $yor->lang_code_iso_639_3 = 'yor';
- $yor->country_code = 'ng';
- $yor->wp_locale = 'yor';
- $yor->slug = 'yor';
- $yor->google_code = 'yo';
- $yor->facebook_locale = 'yo_NG';
-
- $zh_cn = new GP_Locale();
- $zh_cn->english_name = 'Chinese (China)';
- $zh_cn->native_name = '简体中文';
- $zh_cn->lang_code_iso_639_1 = 'zh';
- $zh_cn->lang_code_iso_639_2 = 'zho';
- $zh_cn->country_code = 'cn';
- $zh_cn->wp_locale = 'zh_CN';
- $zh_cn->slug = 'zh-cn';
- $zh_cn->nplurals = 1;
- $zh_cn->plural_expression = '0';
- $zh_cn->google_code = 'zh-CN';
- $zh_cn->facebook_locale = 'zh_CN';
-
- $zh_hk = new GP_Locale();
- $zh_hk->english_name = 'Chinese (Hong Kong)';
- $zh_hk->native_name = '香港中文版 ';
- $zh_hk->lang_code_iso_639_1 = 'zh';
- $zh_hk->lang_code_iso_639_2 = 'zho';
- $zh_hk->country_code = 'hk';
- $zh_hk->wp_locale = 'zh_HK';
- $zh_hk->slug = 'zh-hk';
- $zh_hk->nplurals = 1;
- $zh_hk->plural_expression = '0';
- $zh_hk->facebook_locale = 'zh_HK';
-
- $zh_sg = new GP_Locale();
- $zh_sg->english_name = 'Chinese (Singapore)';
- $zh_sg->native_name = '中文';
- $zh_sg->lang_code_iso_639_1 = 'zh';
- $zh_sg->lang_code_iso_639_2 = 'zho';
- $zh_sg->country_code = 'sg';
- $zh_sg->wp_locale = 'zh_SG';
- $zh_sg->slug = 'zh-sg';
- $zh_sg->nplurals = 1;
- $zh_sg->plural_expression = '0';
-
- $zh_tw = new GP_Locale();
- $zh_tw->english_name = 'Chinese (Taiwan)';
- $zh_tw->native_name = '繁體中文';
- $zh_tw->lang_code_iso_639_1 = 'zh';
- $zh_tw->lang_code_iso_639_2 = 'zho';
- $zh_tw->country_code = 'tw';
- $zh_tw->slug = 'zh-tw';
- $zh_tw->wp_locale= 'zh_TW';
- $zh_tw->nplurals = 1;
- $zh_tw->plural_expression = '0';
- $zh_tw->google_code = 'zh-TW';
- $zh_tw->facebook_locale = 'zh_TW';
-
- $zh = new GP_Locale();
- $zh->english_name = 'Chinese';
- $zh->native_name = '中文';
- $zh->lang_code_iso_639_1 = 'zh';
- $zh->lang_code_iso_639_2 = 'zho';
- $zh->slug = 'zh';
- $zh->nplurals = 1;
- $zh->plural_expression = '0';
-
- $zul = new GP_Locale();
- $zul->english_name = 'Zulu';
- $zul->native_name = 'isiZulu';
- $zul->lang_code_iso_639_1 = 'zu';
- $zul->lang_code_iso_639_2 = 'zul';
- $zul->lang_code_iso_639_3 = 'zul';
- $zul->country_code = 'za';
- $zul->wp_locale = 'zul';
- $zul->slug = 'zul';
- $zul->google_code = 'zu';
-
- foreach( get_defined_vars() as $locale ) {
- $this->locales[ $locale->slug ] = $locale;
- }
- }
-
- public static function &instance() {
- if ( ! isset( $GLOBALS['gp_locales'] ) )
- $GLOBALS['gp_locales'] = new GP_Locales;
-
- return $GLOBALS['gp_locales'];
- }
-
- public static function locales() {
- $instance = GP_Locales::instance();
- return $instance->locales;
- }
-
- public static function exists( $slug ) {
- $instance = GP_Locales::instance();
- return isset( $instance->locales[ $slug ] );
- }
-
- public static function by_slug( $slug ) {
- $instance = GP_Locales::instance();
- return isset( $instance->locales[ $slug ] )? $instance->locales[ $slug ] : null;
- }
-
- public static function by_field( $field_name, $field_value ) {
- $instance = GP_Locales::instance();
- $result = false;
-
- foreach( $instance->locales() as $locale ) {
- if ( isset( $locale->$field_name ) && $locale->$field_name == $field_value ) {
- $result = $locale;
- break;
- }
- }
-
- return $result;
- }
-}
-
-endif;
diff --git a/plugins/jetpack/modules/after-the-deadline.php b/plugins/jetpack/modules/after-the-deadline.php
deleted file mode 100644
index a856efbe..00000000
--- a/plugins/jetpack/modules/after-the-deadline.php
+++ /dev/null
@@ -1,364 +0,0 @@
-<?php
-/**
- * Module Name: Spelling and Grammar
- * Module Description: Check your spelling, style, and grammar
- * Sort Order: 6
- * First Introduced: 1.1
- * Requires Connection: Yes
- * Auto Activate: Yes
- * Module Tags: Writing
- * Feature: Writing
- * Additional Search Queries: after the deadline, afterthedeadline, spell, spellchecker, spelling, grammar, proofreading, style, language, cliche
- */
-
-if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- // This wpcom-specific code should eventually be moved elsewhere.
-
- function AtD_http_post_timeout_action() {
- return 5;
- }
- add_filter( 'atd_http_post_timeout', 'AtD_http_post_timeout_action' );
- function AtD_http_post_error_action( $code ) {
- /** This action is documented in modules/widgets/social-media-icons.php */
- do_action( 'jetpack_bump_stats_extras', 'atd-remote-error', $code );
- }
- add_action( 'atd_http_post_error', 'AtD_http_post_error_action' );
- function AtD_service_domain_action() {
- return 'en.service.afterthedeadline.com';
- }
- add_filter( 'atd_service_domain', 'AtD_service_domain_action' );
- function AtD_update_setting( $user_id, $name, $value ) {
- update_user_attribute( $user_id, $name, $value );
- }
- function AtD_get_setting( $user_id, $name, $single = true ) {
- return get_user_attribute( $user_id, $name );
- }
- function AtD_get_rpc_id() {
- return get_bloginfo( 'wpurl' );
- }
-} else {
- // This code is used only in Jetpack.
-
- add_action( 'jetpack_modules_loaded', 'AtD_load' );
- function AtD_load() {
- Jetpack::enable_module_configurable( __FILE__ );
- Jetpack::module_configuration_load( __FILE__, 'AtD_configuration_load' );
- }
- function AtD_configuration_load() {
- wp_safe_redirect( get_edit_profile_url( get_current_user_id() ) . '#atd' );
- exit;
- }
- function AtD_update_setting( $user_id, $name, $value ) {
- return update_user_meta( $user_id, $name, $value );
- }
- function AtD_get_setting( $user_id, $name, $single = true ) {
- return get_user_meta( $user_id, $name, $single );
- }
- function AtD_get_rpc_id() {
- return 'WPORG-' . md5( get_bloginfo( 'wpurl ') );
- }
-}
-
-/*
- * Load necessary include files
- */
-include( dirname( __FILE__ ) . '/after-the-deadline/config-options.php' );
-include( dirname( __FILE__ ) . '/after-the-deadline/config-unignore.php' );
-include( dirname( __FILE__ ) . '/after-the-deadline/proxy.php' );
-
-define( 'ATD_VERSION', '20150715' );
-
-/*
- * Display the AtD configuration options
- */
-function AtD_config() {
- AtD_display_options_form();
- AtD_display_unignore_form();
-}
-
-/*
- * Code to update the toolbar with the AtD Button and Install the AtD TinyMCE Plugin
- */
-function AtD_addbuttons() {
- /* Don't bother doing this stuff if the current user lacks permissions */
- if ( ! AtD_is_allowed() )
- return;
-
- if ( ! defined( 'ATD_TINYMCE_4' ) ) {
- define( 'ATD_TINYMCE_4', ( ! empty( $GLOBALS['tinymce_version'] ) && substr( $GLOBALS['tinymce_version'], 0, 1 ) >= 4 ) );
- }
-
- /* Add only in Rich Editor mode */
- if ( get_user_option( 'rich_editing' ) == 'true' ) {
- add_filter( 'mce_external_plugins', 'add_AtD_tinymce_plugin' );
- add_filter( 'mce_buttons', 'register_AtD_button' );
- }
-
- add_action( 'personal_options_update', 'AtD_process_options_update' );
- add_action( 'personal_options_update', 'AtD_process_unignore_update' );
- add_action( 'profile_personal_options', 'AtD_config' );
-}
-
-/*
- * Hook into the TinyMCE buttons and replace the current spellchecker
- */
-function register_AtD_button( $buttons ) {
- if ( ATD_TINYMCE_4 ) {
- // Use the default icon in TinyMCE 4.0 (replaced by dashicons in editor.css)
- if ( ! in_array( 'spellchecker', $buttons, true ) ) {
- $buttons[] = 'spellchecker';
- }
-
- return $buttons;
- }
-
- /* kill the spellchecker.. don't need no steenkin PHP spell checker */
- foreach ( $buttons as $key => $button ) {
- if ( $button == 'spellchecker' ) {
- $buttons[$key] = 'AtD';
- return $buttons;
- }
- }
-
- /* hrm... ok add us last plz */
- array_push( $buttons, '|', 'AtD' );
- return $buttons;
-}
-
-/*
- * Load the TinyMCE plugin : editor_plugin.js (TinyMCE 3.x) | plugin.js (TinyMCE 4.0)
- */
-function add_AtD_tinymce_plugin( $plugin_array ) {
- $plugin = ATD_TINYMCE_4 ? 'plugin' : 'editor_plugin';
-
- $plugin_array['AtD'] = add_query_arg( 'v', ATD_VERSION, plugins_url( 'after-the-deadline/tinymce/' . $plugin . '.js', __FILE__ ) );
- return $plugin_array;
-}
-
-/*
- * Update the TinyMCE init block with AtD specific settings
- */
-function AtD_change_mce_settings( $init_array ) {
- if ( ! AtD_is_allowed() )
- return $init_array;
-
- if ( ! is_array( $init_array ) )
- $init_array = array();
-
- $user = wp_get_current_user();
-
- $init_array['atd_rpc_url'] = admin_url( 'admin-ajax.php?action=proxy_atd&_wpnonce=' . wp_create_nonce( 'proxy_atd' ) . '&url=' );
- $init_array['atd_ignore_rpc_url'] = admin_url( 'admin-ajax.php?action=atd_ignore&_wpnonce=' . wp_create_nonce( 'atd_ignore' ) . '&phrase=' );
- $init_array['atd_rpc_id'] = AtD_get_rpc_id();
- $init_array['atd_theme'] = 'wordpress';
- $init_array['atd_ignore_enable'] = 'true';
- $init_array['atd_strip_on_get'] = 'true';
- $init_array['atd_ignore_strings'] = json_encode( explode( ',', AtD_get_setting( $user->ID, 'AtD_ignored_phrases' ) ) );
- $init_array['atd_show_types'] = AtD_get_setting( $user->ID, 'AtD_options' );
- $init_array['gecko_spellcheck'] = 'false';
-
- return $init_array;
-}
-
-/*
- * Sanitizes AtD AJAX data to acceptable chars, caller needs to make sure ' is escaped
- */
-function AtD_sanitize( $untrusted ) {
- return preg_replace( '/[^a-zA-Z0-9\-\',_ ]/i', "", $untrusted );
-}
-
-/*
- * AtD HTML Editor Stuff
- */
-function AtD_settings() {
- $user = wp_get_current_user();
-
- header( 'Content-Type: text/javascript' );
-
- /* set the RPC URL for AtD */
- echo "AtD.rpc = " . json_encode( esc_url_raw( admin_url( 'admin-ajax.php?action=proxy_atd&_wpnonce=' . wp_create_nonce( 'proxy_atd' ) . '&url=' ) ) ) . ";\n";
-
- /* set the API key for AtD */
- echo "AtD.api_key = " . json_encode( AtD_get_rpc_id() ) . ";\n";
-
- /* set the ignored phrases for AtD */
- echo "AtD.setIgnoreStrings(" . json_encode( AtD_get_setting( $user->ID, 'AtD_ignored_phrases' ) ) . ");\n";
-
- /* honor the types we want to show */
- echo "AtD.showTypes(" . json_encode( AtD_get_setting( $user->ID, 'AtD_options' ) ) .");\n";
-
- /* this is not an AtD/jQuery setting but I'm putting it in AtD to make it easy for the non-viz plugin to find it */
- $admin_ajax_url = admin_url( 'admin-ajax.php?action=atd_ignore&_wpnonce=' . wp_create_nonce( 'atd_ignore' ) . '&phrase=' );
- echo "AtD.rpc_ignore = " . json_encode( esc_url_raw( $admin_ajax_url ) ) . ";\n";
-
- die;
-}
-
-function AtD_load_javascripts() {
- if ( AtD_should_load_on_page() ) {
- wp_enqueue_script(
- 'AtD_core',
- Jetpack::get_file_url_for_environment(
- '_inc/build/after-the-deadline/atd.core.min.js',
- 'modules/after-the-deadline/atd.core.js'
- ),
- array(),
- ATD_VERSION
- );
- wp_enqueue_script(
- 'AtD_quicktags',
- Jetpack::get_file_url_for_environment(
- '_inc/build/after-the-deadline/atd-nonvis-editor-plugin.min.js',
- 'modules/after-the-deadline/atd-nonvis-editor-plugin.js'
- ),
- array('quicktags'),
- ATD_VERSION
- );
- wp_enqueue_script(
- 'AtD_jquery',
- Jetpack::get_file_url_for_environment(
- '_inc/build/after-the-deadline/jquery.atd.min.js',
- 'modules/after-the-deadline/jquery.atd.js'
- ),
- array('jquery'),
- ATD_VERSION
- );
- wp_enqueue_script( 'AtD_settings', admin_url( 'admin-ajax.php?action=atd_settings' ), array('AtD_jquery'), ATD_VERSION );
- wp_enqueue_script(
- 'AtD_autoproofread',
- Jetpack::get_file_url_for_environment(
- '_inc/build/after-the-deadline/atd-autoproofread.min.js',
- 'modules/after-the-deadline/atd-autoproofread.js'
- ),
- array('AtD_jquery'),
- ATD_VERSION
- );
-
- /* load localized strings for AtD */
- wp_localize_script( 'AtD_core', 'AtD_l10n_r0ar', array (
- 'menu_title_spelling' => __( 'Spelling', 'jetpack' ),
- 'menu_title_repeated_word' => __( 'Repeated Word', 'jetpack' ),
-
- 'menu_title_no_suggestions' => __( 'No suggestions', 'jetpack' ),
-
- 'menu_option_explain' => __( 'Explain...', 'jetpack' ),
- 'menu_option_ignore_once' => __( 'Ignore suggestion', 'jetpack' ),
- 'menu_option_ignore_always' => __( 'Ignore always', 'jetpack' ),
- 'menu_option_ignore_all' => __( 'Ignore all', 'jetpack' ),
-
- 'menu_option_edit_selection' => __( 'Edit Selection...', 'jetpack' ),
-
- 'button_proofread' => __( 'proofread', 'jetpack' ),
- 'button_edit_text' => __( 'edit text', 'jetpack' ),
- 'button_proofread_tooltip' => __( 'Proofread Writing', 'jetpack' ),
-
- 'message_no_errors_found' => __( 'No writing errors were found.', 'jetpack' ),
- 'message_server_error' => __( 'There was a problem communicating with the Proofreading service. Try again in one minute.', 'jetpack' ),
- 'message_server_error_short' => __( 'There was an error communicating with the proofreading service.', 'jetpack' ),
-
- 'dialog_replace_selection' => __( 'Replace selection with:', 'jetpack' ),
- 'dialog_confirm_post_publish' => __( "The proofreader has suggestions for this post. Are you sure you want to publish it?\n\nPress OK to publish your post, or Cancel to view the suggestions and edit your post.", 'jetpack' ),
- 'dialog_confirm_post_update' => __( "The proofreader has suggestions for this post. Are you sure you want to update it?\n\nPress OK to update your post, or Cancel to view the suggestions and edit your post.", 'jetpack' ),
- ) );
- }
-}
-
-/* Spits out user options for auto-proofreading on publish/update */
-function AtD_load_submit_check_javascripts() {
- global $pagenow;
-
- $user = wp_get_current_user();
- if ( ! $user || $user->ID == 0 )
- return;
-
- if ( AtD_should_load_on_page() ) {
- $atd_check_when = AtD_get_setting( $user->ID, 'AtD_check_when' );
-
- if ( !empty( $atd_check_when ) ) {
- $check_when = array();
- /* Set up the options in json */
- foreach( explode( ',', $atd_check_when ) as $option ) {
- $check_when[$option] = true;
- }
- echo '<script type="text/javascript">' . "\n";
- echo 'AtD_check_when = ' . json_encode( (object) $check_when ) . ";\n";
- echo '</script>' . "\n";
- }
- }
-}
-
-/*
- * Check if a user is allowed to use AtD
- */
-function AtD_is_allowed() {
- if ( ( defined( 'AtD_FORCED_ON' ) && AtD_FORCED_ON ) ) {
- return true;
- }
- $user = wp_get_current_user();
- if ( ! $user || $user->ID == 0 )
- return;
-
- if ( ! current_user_can( 'edit_posts' ) && ! current_user_can( 'edit_pages' ) )
- return;
-
- return 1;
-}
-
-function AtD_load_css() {
- if ( AtD_should_load_on_page() ) {
- wp_enqueue_style( 'AtD_style', plugins_url( '/after-the-deadline/atd.css', __FILE__ ), null, ATD_VERSION, 'screen' );
- wp_style_add_data( 'AtD_style', 'rtl', 'replace' );
- }
-}
-
-/* Helper used to check if javascript should be added to page. Helps avoid bloat in admin */
-function AtD_should_load_on_page() {
- global $pagenow, $current_screen;
-
- $pages = array( 'post.php', 'post-new.php', 'page.php', 'page-new.php', 'admin.php', 'profile.php' );
-
- if ( in_array( $pagenow, $pages ) ) {
- if ( isset( $current_screen->post_type ) && $current_screen->post_type ) {
- return post_type_supports( $current_screen->post_type, 'editor' );
- }
- return true;
- }
-
- /**
- * Allows scripts to be loaded via AtD in admin.
- *
- * By default, AtD only enqueues JS on certain admin pages to reduce bloat. The filter allows additional pages to have AtD JS.
- *
- * @module after-the-deadline
- *
- * @since 1.2.3
- *
- * @param bool false Boolean to load or not load AtD scripts in admin.
- */
- return apply_filters( 'atd_load_scripts', false );
-}
-
-// add button to DFW
-if ( ! ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ) {
- add_filter( 'wp_fullscreen_buttons', 'AtD_fullscreen' );
-}
-function AtD_fullscreen($buttons) {
- $buttons['spellchecker'] = array( 'title' => __( 'Proofread Writing', 'jetpack' ), 'onclick' => "tinyMCE.execCommand('mceWritingImprovementTool');", 'both' => false );
- return $buttons;
-}
-
-/* add some vars into the AtD plugin */
-add_filter( 'tiny_mce_before_init', 'AtD_change_mce_settings' );
-
-/* load some stuff for non-visual editor */
-add_action( 'admin_enqueue_scripts', 'AtD_load_javascripts' );
-add_action( 'admin_enqueue_scripts', 'AtD_load_submit_check_javascripts' );
-add_action( 'admin_enqueue_scripts', 'AtD_load_css' );
-
-/* init process for button control */
-add_action( 'init', 'AtD_addbuttons' );
-
-/* setup hooks for our PHP functions we want to make available via an AJAX call */
-add_action( 'wp_ajax_proxy_atd', 'AtD_redirect_call' );
-add_action( 'wp_ajax_atd_ignore', 'AtD_ignore_call' );
-add_action( 'wp_ajax_atd_settings', 'AtD_settings' );
diff --git a/plugins/jetpack/modules/after-the-deadline/atd-autoproofread.js b/plugins/jetpack/modules/after-the-deadline/atd-autoproofread.js
deleted file mode 100644
index c56d55d9..00000000
--- a/plugins/jetpack/modules/after-the-deadline/atd-autoproofread.js
+++ /dev/null
@@ -1,93 +0,0 @@
-/* jshint devel: true, onevar: false */
-/* global tinyMCE, AtD_restore_if_proofreading, AtD_check, AtD_unbind_proofreader_listeners,
- AtD, AtD_bind_proofreader_listeners, AtD_check_when
- */
-
-/* the AtD/jQuery and AtD/TinyMCE plugins check if this variable exists and increment it when a proofread check happens */
-var AtD_proofread_click_count = 0;
-
-/* This is function called when the publish/update button is pressed */
-function AtD_submit_check( e ) {
- /* User has already checked their document... no need to hold up their submit */
- if (AtD_proofread_click_count > 0) {
- return;
- }
-
- /* Let's not submit the form, shall we? */
- e.stopImmediatePropagation();
- e.preventDefault();
-
- /* We'll call the AtD function based on which editor is currently active */
- if ( typeof(tinyMCE) !== 'undefined' && tinyMCE.activeEditor && !tinyMCE.activeEditor.isHidden() ) {
- /* Woo! We're running tinyMCE! */
- tinyMCE.activeEditor.execCommand('mceWritingImprovementTool', AtD_submit_check_callback);
- } else {
- /* Go Go HTML editor! */
- AtD_restore_if_proofreading();
- AtD_check( AtD_submit_check_callback );
- }
-}
-
-/* This is the callback function that runs after the publish/update button is pressed */
-function AtD_submit_check_callback(count) {
- count = Number( count || 0 );
- AtD_unbind_proofreader_listeners();
-
- if ( 0 === count || 1 < AtD_proofread_click_count ) {
- /* if no errors were found, submit form */
- AtD_update_post();
- } else if ( -1 === count ) {
- /* If there was an error, alert the user and submit form */
- alert( AtD.getLang('message_server_error', 'There was a problem communicating with the Proofreading service. Try again in one minute.') );
- AtD_update_post();
- } else {
- var original_post_status = jQuery('#original_post_status').val();
-
- /* Okay, the user has tried to publish/update already but there are still errors. Ask them what to do */
- var message;
- if ( original_post_status === 'publish' ) {
- message = AtD.getLang('dialog_confirm_post_publish', 'The proofreader has suggestions for this post. Are you sure you want to publish it?\n\nPress OK to publish your post, or Cancel to view the suggestions and edit your post.');
- } else {
- message = AtD.getLang('dialog_confirm_post_update', 'The proofreader has suggestions for this post. Are you sure you want to update it?\n\nPress OK to update your post, or Cancel to view the suggestions and edit your post.');
- }
-
- if ( confirm( message ) ) {
- AtD_update_post();
- } else {
- AtD_bind_proofreader_listeners();
- AtD_kill_autoproofread();
- }
-
- /* Let's do some interface clean-up */
- jQuery('#publish').removeClass('button-primary-disabled');
- jQuery('#ajax-loading').hide();
- }
-}
-
-/* Stop the proofreader from doing its auto proofread thing (activated when the proofread button is clicked) */
-function AtD_kill_autoproofread() {
- jQuery('#publish').unbind('click.AtD_submit_check');
-}
-
-/* a function to force the post to be submitted */
-function AtD_update_post() {
-
- if ( typeof(tinyMCE) === 'undefined' || !tinyMCE.activeEditor || tinyMCE.activeEditor.isHidden() ) {
- AtD_restore_if_proofreading();
- }
-
- jQuery('#publish').unbind('click.AtD_submit_check').click();
-}
-
-/* init the autoproofread options */
-jQuery( document ).ready( function($){
- var orig_status = $('#original_post_status').val();
-
- /* check if auto-check is enabled && if #content exists */
- if ( typeof AtD_check_when !== 'undefined' && $('#content').length &&
- ( ( orig_status !== 'publish' && AtD_check_when.onpublish ) ||
- ( ( orig_status === 'publish' || orig_status === 'schedule' ) && AtD_check_when.onupdate ) ) ) {
- $('#publish').bind( 'click.AtD_submit_check', AtD_submit_check );
- }
-});
-
diff --git a/plugins/jetpack/modules/after-the-deadline/atd-nonvis-editor-plugin.js b/plugins/jetpack/modules/after-the-deadline/atd-nonvis-editor-plugin.js
deleted file mode 100644
index 5a5bf22b..00000000
--- a/plugins/jetpack/modules/after-the-deadline/atd-nonvis-editor-plugin.js
+++ /dev/null
@@ -1,268 +0,0 @@
-/* jshint devel: true, onevar: false, smarttabs: true */
-/* global AtD, QTags, AtD_l10n_r0ar, edButtons, edButton, switchEditors, AtD_unbind_proofreader_listeners */
-/* exported AtD_unbind_proofreader_listeners */
-
-var AtD_qtbutton, autosave;
-/* convienence method to restore the text area from the preview div */
-function AtD_restore_text_area() {
- var content;
-
- /* swap the preview div for the textarea, notice how I have to restore the appropriate class/id/style attributes */
- if( jQuery('#atd-content').get(0) ) {
- AtD.remove('atd-content');
- content = jQuery('#atd-content').html();
- } else {
- AtD.remove('content');
- content = jQuery('#content').html();
- }
-
- if ( navigator.appName === 'Microsoft Internet Explorer' ) {
- content = content.replace(/<BR.*?class.*?atd_remove_me.*?>/gi, '\n');
- }
-
- // Remove emoji replacement images
- if ( typeof window.twemoji !== 'undefined' ) {
- content = content.replace( /<img [^>]+>/g, function( img ) {
- // The images should have class containing 'emoji'
- if ( img.indexOf( 'emoji' ) !== -1 ) {
- var alt = img.match( /alt="([^"]+)"/ );
-
- if ( alt && alt[1] && window.twemoji.test( alt[1] ) ) {
- return alt[1];
- }
- }
-
- return img;
- });
- }
-
- // jQuery('#content').replaceWith( AtD.content_canvas );
- jQuery('#content').val( content.replace(/\&lt\;/g, '<').replace(/\&gt\;/g, '>').replace(/\&amp;/g, '&') )
- .height(AtD.height)
- .show();
- jQuery('#atd-content').remove();
-
- if ( AtD_qtbutton ) {
- /* change the link text back to its original label */
- jQuery(AtD_qtbutton).val( AtD.getLang('button_proofread', 'proofread') );
- jQuery(AtD_qtbutton).css({ 'color' : '#464646' });
-
- /* enable the toolbar buttons */
- jQuery( AtD_qtbutton ).siblings('input').andSelf().attr( 'disabled', false );
- }
-
- /* restore autosave */
- if ( AtD.autosave !== undefined ) {
- if ( window.wp && window.wp.autosave && window.wp.autosave.server ) {
- window.wp.autosave.local.resume && window.wp.autosave.local.resume();
- window.wp.autosave.server.resume && window.wp.autosave.server.resume();
- } else {
- autosave = AtD.autosave;
- }
- }
-}
-
-// add the AtD button properly to quicktags
-if ( typeof(QTags) !== 'undefined' && QTags.addButton ) {
- jQuery(document).ready(function(){
- QTags.addButton( 'AtD', AtD_l10n_r0ar.button_proofread, AtD_check );
- });
-} else {
- edButtons[edButtons.length] = new edButton('ed_AtD', 'AtD', '', '', '');
- jQuery(document).ready(function($){
- $('#ed_AtD').replaceWith('<input type="button" id="ed_AtD" accesskey="" class="ed_button" onclick="AtD_check(this);" value="' + AtD_l10n_r0ar.button_proofread + '" />');
- });
-}
-
-function AtD_restore_if_proofreading() {
- if ( AtD_qtbutton && jQuery(AtD_qtbutton).val() === AtD.getLang('button_edit_text', 'edit text') ) {
- AtD_restore_text_area();
- }
-}
-
-/* exported AtD_unbind_proofreader_listeners */
-function AtD_unbind_proofreader_listeners() {
- jQuery('#save-post, #post-preview, #publish, #edButtonPreview').unbind('focus', AtD_restore_if_proofreading );
- jQuery('#add_poll, #add_image, #add_video, #add_audio, #add_media').unbind('click', AtD_restore_if_proofreading );
- jQuery('#post').unbind('submit', AtD_restore_if_proofreading );
-}
-
-function AtD_bind_proofreader_listeners() {
- jQuery('#save-post, #post-preview, #publish, #edButtonPreview').focus( AtD_restore_if_proofreading );
- jQuery('#add_poll, #add_image, #add_video, #add_audio, #add_media').click( AtD_restore_if_proofreading );
- jQuery('#post').submit( AtD_restore_if_proofreading );
-}
-
-/* where the magic happens, checks the spelling or restores the form */
-function AtD_check(button) {
- var callback, divHeight;
-
- if ( jQuery.isFunction( button ) ) {
- callback = button;
-
- if ( !AtD_qtbutton ) {
- AtD_qtbutton = jQuery( '#qt_content_AtD, #ed_AtD' ).get( 0 );
- }
- } else {
- if ( !button.id ) {
- button = button[0];
- }
-
- AtD_qtbutton = button;
- }
-
- if ( !jQuery('#content').length ) {
- if ( 'undefined' !== typeof callback ) {
- callback( 0 );
- }
- AtD_restore_if_proofreading();
- return;
- }
-
- /* If the text of the link says edit comment, then restore the textarea so the user can edit the text */
-
- if ( jQuery(AtD_qtbutton).val() === AtD.getLang('button_edit_text', 'edit text') ) {
- AtD_restore_text_area();
- } else {
- // Disable editor expand/scroll
- if ( window.editorExpand && jQuery( '#postdivrich' ).hasClass( 'wp-editor-expand' ) ) {
- AtD.wpEditorExpand = true;
- // window.editorExpand.off && window.editorExpand.off();
- } else {
- AtD.wpEditorExpand = false;
- }
-
- /* initialize some of the stuff related to this plugin */
- if ( ! AtD.height ) {
-
- AtD.height = jQuery('#content').height();
- AtD_bind_proofreader_listeners();
-
- /* make it so clicking the Visual button works when AtD is active */
-
- jQuery('#edButtonPreview').attr( 'onclick', null ).click( function() {
- AtD_restore_if_proofreading();
- switchEditors.go( 'content', 'tinymce' );
- });
-
- /* saved the textarea as we need to restore the original one for the toolbar to continue to function properly */
- AtD.content_canvas = jQuery('#content');
-
- /* store the autosave, we're going to make it empty during spellcheck to prevent auto saved text from being
- over written with empty text */
- AtD.autosave = autosave;
- } else {
- // Update the height
- AtD.height = jQuery('#content').height();
- }
-
- /* set the spell check link to a link that lets the user edit the text */
- /* disable the button to prevent a race condition where content is deleted if proofread is clicked with a check
- in progress. */
- jQuery(AtD_qtbutton).css({ 'color' : 'red' }).val( AtD.getLang('button_edit_text', 'edit text') ).attr('disabled', true);
-
- /* replace the div */
- var $replacement,
- $textarea = jQuery('#content'),
- text = $textarea.val().replace( /\&/g, '&amp;' ).replace( /</g, '&lt;' ).replace( /\>/g, '&gt;' ),
- fontFamily = $textarea.css('font-family'),
- fontSize = $textarea.css('font-size'),
- lineHeight = $textarea.css('line-height');
-
- if ( navigator.appName === 'Microsoft Internet Explorer' ) {
- text = text.replace( /[\n\r\f]/gm, '<BR class="atd_remove_me">' );
- }
-
- $replacement = jQuery( '<div class="input" id="atd-content">' + text + '</div>' );
- $textarea.after( $replacement ).hide();
-
- divHeight = AtD.height;
- // AtD disables resizing of the Text editor, normalize the size of the replacement div.
- if ( divHeight < 200 ) {
- divHeight = 200;
- } else if ( divHeight > 1000 ) {
- divHeight = 1000;
- }
- var toolBarHeight = jQuery('#ed_toolbar').height();
- $replacement.css( {
- overflow: 'auto',
- 'background-color': 'white',
- color: 'black',
- 'white-space': 'pre-wrap',
- padding: '10px',
- 'font-family': fontFamily || 'Consolas, Monaco, monospace',
- 'font-size': fontSize || '13px',
- 'line-height': lineHeight || '1.5',
- height: divHeight,
- 'margin-top': toolBarHeight+7+'px'
- } );
-
- /* kill autosave... :) */
- if ( window.wp && window.wp.autosave && window.wp.autosave.server ) {
- window.wp.autosave.local.suspend && window.wp.autosave.local.suspend();
- window.wp.autosave.server.suspend && window.wp.autosave.server.suspend();
- } else {
- autosave = function() { };
- }
-
- /* disable the toolbar buttons */
- jQuery( AtD_qtbutton ).siblings('input').andSelf().attr( 'disabled', true ); // using .arrt instead of .prop so it's compat with older WP and jQuery
-
- /* check the writing in the textarea */
- AtD.check('atd-content', {
- success: function(errorCount) {
- if ( Number( errorCount ) === 0 && typeof callback !== 'function' ) {
- alert( AtD.getLang('message_no_errors_found', 'No writing errors were found') );
- }
- AtD_restore_if_proofreading();
- },
-
- ready: function(errorCount) {
- jQuery(AtD_qtbutton).attr('disabled', false);
-
- if ( typeof callback === 'function' ) {
- callback( errorCount );
- }
- },
-
- error: function() {
- jQuery(AtD_qtbutton).attr('disabled', false);
-
- if ( typeof callback === 'function' ) {
- callback( -1 );
- } else {
- alert( AtD.getLang('message_server_error', 'There was a problem communicating with the Proofreading service. Try again in one minute.') );
- }
-
- AtD_restore_if_proofreading();
- },
-
- editSelection: function(element) {
- var text = prompt( AtD.getLang('dialog_replace_selection', 'Replace selection with:'), element.text() );
-
- if ( text != null ) {
- element.replaceWith( text );
- }
- },
-
- explain: function(url) {
- var left = (screen.width / 2) - (480 / 2);
- var top = (screen.height / 2) - (380 / 2);
- window.open( url, '', 'width=480,height=380,toolbar=0,status=0,resizable=0,location=0,menuBar=0,left=' + left + ',top=' + top).focus();
- },
-
- ignore: function(word) {
- jQuery.ajax({
- type : 'GET',
- url : AtD.rpc_ignore + encodeURI( word ).replace( /&/g, '%26'),
- format : 'raw',
- error : function(XHR, status, error) {
- if ( AtD.callback_f !== undefined && AtD.callback_f.error !== undefined ) {
- AtD.callback_f.error(status + ': ' + error);
- }
- }
- });
- }
- });
- }
-}
diff --git a/plugins/jetpack/modules/after-the-deadline/atd-rtl.css b/plugins/jetpack/modules/after-the-deadline/atd-rtl.css
deleted file mode 100644
index b08722a7..00000000
--- a/plugins/jetpack/modules/after-the-deadline/atd-rtl.css
+++ /dev/null
@@ -1,122 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-/* AtD error styles */
-
-.hiddenSpellError
-{
- border-bottom: 2px solid red;
- cursor: default;
-}
-
-.hiddenGrammarError
-{
- border-bottom: 2px solid green;
- cursor: default;
-}
-
-.hiddenSuggestion
-{
- border-bottom: 2px solid blue;
- cursor: default;
-}
-
-/* Menu styles derived from:
- * jquery.spellchecker.js - a simple jQuery Spell Checker
- * Copyright (c) 2008 Richard Willis
- * MIT license : http://www.opensource.org/licenses/mit-license.php
- * Project : http://jquery-spellchecker.googlecode.com
- */
-
-#suggestmenu
-{
- min-width: 122px;
- background: #ebeaeb;
- position: absolute;
- display: none;
- z-index: 9999;
- overflow: none;
- margin-top: 1px;
- text-align: right;
- font-size: 11px;
-}
-
-#suggestmenu strong
-{
- background: #cccccc;
- font-weight: bold;
- padding:3px 6px 3px 6px;
- display:block;
- border:1px solid #dddddd;
- border-bottom: 1px solid #aaaaaa;
- color: black;
-}
-
-#suggestmenu em
-{
- text-align:center;
- padding:3px 6px 3px 6px;
- display:block;
- border-top:1px solid #ccc;
- border-right:1px solid #ccc;
-}
-
-#suggestmenu a, #suggestmenu a:visited
-{
- background: #ebeaeb;
- border-right:1px solid #dddddd;
- border-left:1px solid #dddddd;
- padding:3px 6px 3px 6px;
- display:block;
- margin:0px;
- text-decoration:none;
- color: black;
- outline:none
-}
-
-#suggestmenu a.first, #suggestmenu a.first:visited
-{
- border-top:1px solid #dddddd;
-}
-
-.spell_sep_bottom
-{
- border-bottom: 1px solid #dddddd;
-}
-
-.spell_sep_top
-{
- border-top: 1px solid #aaaaaa;
-}
-
-#suggestmenu a:hover
-{
- color:#000;
- background: #f5f5f5;
-}
-
-#suggestmenu .foot
-{
- border-top:1px solid #aaaaaa;
- background:#fff
-}
-
-#suggestmenu .foot a, #suggestmenu .foot a:visited
-{
- outline:none
-}
-
-/* TinyMCE 4.0 */
-div.mce-atd-menu-title.mce-disabled {
- padding: 3px 12px 0;
-}
-
-div.mce-atd-menu-title.mce-disabled:hover,
-div.mce-atd-menu-title.mce-disabled:hover span.mce-text {
- background: none;
- color: #888;
- cursor: default;
-}
-
-div.mce-atd-menu-title.mce-disabled span.mce-text {
- font-weight: bold;
- color: #888;
-}
diff --git a/plugins/jetpack/modules/after-the-deadline/atd-rtl.min.css b/plugins/jetpack/modules/after-the-deadline/atd-rtl.min.css
deleted file mode 100644
index 914a4653..00000000
--- a/plugins/jetpack/modules/after-the-deadline/atd-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.hiddenSpellError{border-bottom:2px solid red;cursor:default}.hiddenGrammarError{border-bottom:2px solid green;cursor:default}.hiddenSuggestion{border-bottom:2px solid #00f;cursor:default}#suggestmenu{min-width:122px;background:#ebeaeb;position:absolute;display:none;z-index:9999;overflow:none;margin-top:1px;text-align:right;font-size:11px}#suggestmenu strong{background:#ccc;font-weight:700;padding:3px 6px 3px 6px;display:block;border:1px solid #ddd;border-bottom:1px solid #aaa;color:#000}#suggestmenu em{text-align:center;padding:3px 6px 3px 6px;display:block;border-top:1px solid #ccc;border-right:1px solid #ccc}#suggestmenu a,#suggestmenu a:visited{background:#ebeaeb;border-right:1px solid #ddd;border-left:1px solid #ddd;padding:3px 6px 3px 6px;display:block;margin:0;text-decoration:none;color:#000;outline:0}#suggestmenu a.first,#suggestmenu a.first:visited{border-top:1px solid #ddd}.spell_sep_bottom{border-bottom:1px solid #ddd}.spell_sep_top{border-top:1px solid #aaa}#suggestmenu a:hover{color:#000;background:#f5f5f5}#suggestmenu .foot{border-top:1px solid #aaa;background:#fff}#suggestmenu .foot a,#suggestmenu .foot a:visited{outline:0}div.mce-atd-menu-title.mce-disabled{padding:3px 12px 0}div.mce-atd-menu-title.mce-disabled:hover,div.mce-atd-menu-title.mce-disabled:hover span.mce-text{background:0 0;color:#888;cursor:default}div.mce-atd-menu-title.mce-disabled span.mce-text{font-weight:700;color:#888} \ No newline at end of file
diff --git a/plugins/jetpack/modules/after-the-deadline/atd.core.js b/plugins/jetpack/modules/after-the-deadline/atd.core.js
deleted file mode 100644
index f62f68e7..00000000
--- a/plugins/jetpack/modules/after-the-deadline/atd.core.js
+++ /dev/null
@@ -1,640 +0,0 @@
-/*
- * atd.core.js - A building block to create a front-end for AtD
- * Author : Raphael Mudge, Automattic
- * License : LGPL
- * Project : http://www.afterthedeadline.com/developers.slp
- * Contact : raffi@automattic.com
- */
-
-/* jshint sub: true, devel: true, onevar: false, smarttabs: true, loopfunc: true */
-/* exported EXPORTED_SYMBOLS, atd_sprintf */
-
-/* EXPORTED_SYMBOLS is set so this file can be a JavaScript Module */
-var EXPORTED_SYMBOLS = ['AtDCore'];
-
-function AtDCore() {
- /* these are the categories of errors AtD should ignore */
- this.ignore_types = ['Bias Language', 'Cliches', 'Complex Expression', 'Diacritical Marks', 'Double Negatives', 'Hidden Verbs', 'Jargon Language', 'Passive voice', 'Phrases to Avoid', 'Redundant Expression'];
-
- /* these are the phrases AtD should ignore */
- this.ignore_strings = {};
-
- /* Localized strings */
- // Back-compat, not used
- this.i18n = {};
-}
-
-/*
- * Internationalization Functions
- */
-
-AtDCore.prototype.getLang = function( key, defaultk ) {
- return ( window.AtD_l10n_r0ar && window.AtD_l10n_r0ar[key] ) || defaultk;
-};
-
-AtDCore.prototype.addI18n = function( obj ) {
- // Back-compat
- window.AtD_l10n_r0ar = obj;
-};
-
-/*
- * Setters
- */
-
-AtDCore.prototype.setIgnoreStrings = function(string) {
- var parent = this;
-
- this.map(string.split(/,\s*/g), function(string) {
- parent.ignore_strings[string] = 1;
- });
-};
-
-AtDCore.prototype.showTypes = function(string) {
- var show_types = string.split(/,\s*/g);
- var types = {};
-
- /* set some default types that we want to make optional */
-
- /* grammar checker options */
- types['Double Negatives'] = 1;
- types['Hidden Verbs'] = 1;
- types['Passive voice'] = 1;
- types['Bias Language'] = 1;
-
- /* style checker options */
- types['Cliches'] = 1;
- types['Complex Expression'] = 1;
- types['Diacritical Marks'] = 1;
- types['Jargon Language'] = 1;
- types['Phrases to Avoid'] = 1;
- types['Redundant Expression'] = 1;
-
- var ignore_types = [];
-
- this.map(show_types, function(string) {
- types[string] = undefined;
- });
-
- this.map(this.ignore_types, function(string) {
- if (types[string] !== undefined) {
- ignore_types.push(string);
- }
- });
-
- this.ignore_types = ignore_types;
-};
-
-/*
- * Error Parsing Code
- */
-
-AtDCore.prototype.makeError = function(error_s, tokens, type, seps/*, pre*/) {
- var struct = {};
- struct.type = type;
- struct.string = error_s;
- struct.tokens = tokens;
-
- if (new RegExp('\\b' + error_s + '\\b').test(error_s)) {
- struct.regexp = new RegExp('(?!'+error_s+'<)\\b' + error_s.replace(/\s+/g, seps) + '\\b');
- }
- else if (new RegExp(error_s + '\\b').test(error_s)) {
- struct.regexp = new RegExp('(?!'+error_s+'<)' + error_s.replace(/\s+/g, seps) + '\\b');
- }
- else if (new RegExp('\\b' + error_s).test(error_s)) {
- struct.regexp = new RegExp('(?!'+error_s+'<)\\b' + error_s.replace(/\s+/g, seps));
- }
- else {
- struct.regexp = new RegExp('(?!'+error_s+'<)' + error_s.replace(/\s+/g, seps));
- }
-
- struct.used = false; /* flag whether we've used this rule or not */
-
- return struct;
-};
-
-AtDCore.prototype.addToErrorStructure = function(errors, list, type, seps) {
- var parent = this;
-
- this.map(list, function(error) {
- var tokens = error['word'].split(/\s+/);
- var pre = error['pre'];
- var first = tokens[0];
-
- if (errors['__' + first] === undefined) {
- errors['__' + first] = {};
- errors['__' + first].pretoks = {};
- errors['__' + first].defaults = [];
- }
-
- if (pre === '') {
- errors['__' + first].defaults.push(parent.makeError(error['word'], tokens, type, seps, pre));
- } else {
- if (errors['__' + first].pretoks['__' + pre] === undefined) {
- errors['__' + first].pretoks['__' + pre] = [];
- }
-
- errors['__' + first].pretoks['__' + pre].push(parent.makeError(error['word'], tokens, type, seps, pre));
- }
- });
-};
-
-AtDCore.prototype.buildErrorStructure = function(spellingList, enrichmentList, grammarList) {
- var seps = this._getSeparators();
- var errors = {};
-
- this.addToErrorStructure(errors, spellingList, 'hiddenSpellError', seps);
- this.addToErrorStructure(errors, grammarList, 'hiddenGrammarError', seps);
- this.addToErrorStructure(errors, enrichmentList, 'hiddenSuggestion', seps);
- return errors;
-};
-
-AtDCore.prototype._getSeparators = function() {
- var re = '', i;
- var str = '"s!#$%&()*+,./:;<=>?@[\\]^_{|}';
-
- // Build word separator regexp
- for (i=0; i<str.length; i++) {
- re += '\\' + str.charAt(i);
- }
-
- return '(?:(?:[\xa0' + re + '])|(?:\\-\\-))+';
-};
-
-AtDCore.prototype.processXML = function(responseXML) {
-
- /* types of errors to ignore */
- var types = {};
-
- this.map(this.ignore_types, function(type) {
- types[type] = 1;
- });
-
- /* save suggestions in the editor object */
- this.suggestions = [];
-
- /* process through the errors */
- var errors = responseXML.getElementsByTagName('error');
-
- /* words to mark */
- var grammarErrors = [];
- var spellingErrors = [];
- var enrichment = [];
-
- for (var i = 0; i < errors.length; i++) {
- if (errors[i].getElementsByTagName('string').item(0).firstChild !== null) {
- var errorString = errors[i].getElementsByTagName('string').item(0).firstChild.data;
- var errorType = errors[i].getElementsByTagName('type').item(0).firstChild.data;
- var errorDescription = errors[i].getElementsByTagName('description').item(0).firstChild.data;
-
- var errorContext;
-
- if (errors[i].getElementsByTagName('precontext').item(0).firstChild !== null) {
- errorContext = errors[i].getElementsByTagName('precontext').item(0).firstChild.data;
- } else {
- errorContext = '';
- }
-
- /* create a hashtable with information about the error in the editor object, we will use this later
- to populate a popup menu with information and suggestions about the error */
-
- if (this.ignore_strings[errorString] === undefined) {
- var suggestion = {};
- suggestion['description'] = errorDescription;
- suggestion['suggestions'] = [];
-
- /* used to find suggestions when a highlighted error is clicked on */
- suggestion['matcher'] = new RegExp('^' + errorString.replace(/\s+/, this._getSeparators()) + '$');
-
- suggestion['context'] = errorContext;
- suggestion['string'] = errorString;
- suggestion['type'] = errorType;
-
- this.suggestions.push(suggestion);
-
- if (errors[i].getElementsByTagName('suggestions').item(0) !== null) {
- var suggestions = errors[i].getElementsByTagName('suggestions').item(0).getElementsByTagName('option');
- for (var j = 0; j < suggestions.length; j++) {
- suggestion['suggestions'].push(suggestions[j].firstChild.data);
- }
- }
-
- /* setup the more info url */
- if (errors[i].getElementsByTagName('url').item(0) !== null) {
- var errorUrl = errors[i].getElementsByTagName('url').item(0).firstChild.data;
- suggestion['moreinfo'] = errorUrl + '&theme=tinymce';
- }
-
- if (types[errorDescription] === undefined) {
- if (errorType === 'suggestion') {
- enrichment.push({ word: errorString, pre: errorContext });
- }
-
- if (errorType === 'grammar') {
- grammarErrors.push({ word: errorString, pre: errorContext });
- }
- }
-
- if (errorType === 'spelling' || errorDescription === 'Homophone') {
- spellingErrors.push({ word: errorString, pre: errorContext });
- }
-
- if (errorDescription === 'Cliches') {
- suggestion['description'] = 'Clichés'; /* done here for backwards compatability with current user settings */
- }
-
- if (errorDescription === 'Spelling') {
- suggestion['description'] = this.getLang('menu_title_spelling', 'Spelling');
- }
-
- if (errorDescription === 'Repeated Word') {
- suggestion['description'] = this.getLang('menu_title_repeated_word', 'Repeated Word');
- }
-
- if (errorDescription === 'Did you mean...') {
- suggestion['description'] = this.getLang('menu_title_confused_word', 'Did you mean...');
- }
- } // end if ignore[errorString] == undefined
- } // end if
- } // end for loop
-
- var errorStruct;
- var ecount = spellingErrors.length + grammarErrors.length + enrichment.length;
-
- if (ecount > 0) {
- errorStruct = this.buildErrorStructure(spellingErrors, enrichment, grammarErrors);
- } else {
- errorStruct = undefined;
- }
-
- /* save some state in this object, for retrieving suggestions later */
- return { errors: errorStruct, count: ecount, suggestions: this.suggestions };
-};
-
-AtDCore.prototype.findSuggestion = function(element) {
- var text = element.innerHTML;
- var context = ( this.getAttrib(element, 'pre') + '' ).replace(/[\\,!\\?\\."\s]/g, '');
- if (this.getAttrib(element, 'pre') === undefined) {
- alert(element.innerHTML);
- }
-
- var errorDescription;
- var len = this.suggestions.length;
-
- for (var i = 0; i < len; i++) {
- if ((context === '' || context === this.suggestions[i]['context']) && this.suggestions[i]['matcher'].test(text)) {
- errorDescription = this.suggestions[i];
- break;
- }
- }
- return errorDescription;
-};
-
-/*
- * TokenIterator class
- */
-
-function TokenIterator(tokens) {
- this.tokens = tokens;
- this.index = 0;
- this.count = 0;
- this.last = 0;
-}
-
-TokenIterator.prototype.next = function() {
- var current = this.tokens[this.index];
- this.count = this.last;
- this.last += current.length + 1;
- this.index++;
-
- /* strip single quotes from token, AtD does this when presenting errors */
- if (current !== '') {
- if (current[0] === '\'') {
- current = current.substring(1, current.length);
- }
-
- if (current[current.length - 1] === '\'') {
- current = current.substring(0, current.length - 1);
- }
- }
-
- return current;
-};
-
-TokenIterator.prototype.hasNext = function() {
- return this.index < this.tokens.length;
-};
-
-TokenIterator.prototype.hasNextN = function(n) {
- return (this.index + n) < this.tokens.length;
-};
-
-TokenIterator.prototype.skip = function(m, n) {
- this.index += m;
- this.last += n;
-
- if (this.index < this.tokens.length) {
- this.count = this.last - this.tokens[this.index].length;
- }
-};
-
-TokenIterator.prototype.getCount = function() {
- return this.count;
-};
-
-TokenIterator.prototype.peek = function(n) {
- var peepers = [];
- var end = this.index + n;
- for (var x = this.index; x < end; x++) {
- peepers.push(this.tokens[x]);
- }
- return peepers;
-};
-
-/*
- * code to manage highlighting of errors
- */
-AtDCore.prototype.markMyWords = function(container_nodes, errors) {
- var seps = new RegExp(this._getSeparators()),
- nl = [],
- ecount = 0, /* track number of highlighted errors */
- parent = this,
- bogus = this._isTinyMCE ? ' data-mce-bogus="1"' : '',
- emptySpan = '<span class="mceItemHidden"' + bogus + '>&nbsp;</span>',
- textOnlyMode;
-
- /**
- * Split a text node into an ordered list of siblings:
- * - text node to the left of the match
- * - the element replacing the match
- * - text node to the right of the match
- *
- * We have to leave the text to the left and right of the match alone
- * in order to prevent XSS
- *
- * @return array
- */
- function splitTextNode( textnode, regexp, replacement ) {
- var text = textnode.nodeValue,
- index = text.search( regexp ),
- match = text.match( regexp ),
- captured = [],
- cursor;
-
- if ( index < 0 || ! match.length ) {
- return [ textnode ];
- }
-
- if ( index > 0 ) {
- // capture left text node
- captured.push( document.createTextNode( text.substr( 0, index ) ) );
- }
-
- // capture the replacement of the matched string
- captured.push( parent.create( match[0].replace( regexp, replacement ) ) );
-
- cursor = index + match[0].length;
-
- if ( cursor < text.length ) {
- // capture right text node
- captured.push( document.createTextNode( text.substr( cursor ) ) );
- }
-
- return captured;
- }
-
- function _isInPre( node ) {
- if ( node ) {
- while ( node.parentNode ) {
- if ( node.nodeName === 'PRE' ) {
- return true;
- }
- node = node.parentNode;
- }
- }
-
- return false;
- }
-
- /* Collect all text nodes */
- /* Our goal--ignore nodes that are already wrapped */
-
- this._walk( container_nodes, function( n ) {
- if ( n.nodeType === 3 && ! parent.isMarkedNode( n ) && ! _isInPre( n ) ) {
- nl.push( n );
- }
- });
-
- /* walk through the relevant nodes */
-
- var iterator;
-
- this.map( nl, function( n ) {
- var v;
-
- if ( n.nodeType === 3 ) {
- v = n.nodeValue; /* we don't want to mangle the HTML so use the actual encoded string */
- var tokens = n.nodeValue.split( seps ); /* split on the unencoded string so we get access to quotes as " */
- var previous = '';
-
- var doReplaces = [];
-
- iterator = new TokenIterator(tokens);
-
- while ( iterator.hasNext() ) {
- var token = iterator.next();
- var current = errors['__' + token];
-
- var defaults;
-
- if ( current !== undefined && current.pretoks !== undefined ) {
- defaults = current.defaults;
- current = current.pretoks['__' + previous];
-
- var done = false;
- var prev, curr;
-
- prev = v.substr(0, iterator.getCount());
- curr = v.substr(prev.length, v.length);
-
- var checkErrors = function( error ) {
- if ( error !== undefined && ! error.used && foundStrings[ '__' + error.string ] === undefined && error.regexp.test( curr ) ) {
- foundStrings[ '__' + error.string ] = 1;
- doReplaces.push([ error.regexp, '<span class="'+error.type+'" pre="'+previous+'"' + bogus + '>$&</span>' ]);
-
- error.used = true;
- done = true;
- }
- }; // jshint ignore:line
-
- var foundStrings = {};
-
- if (current !== undefined) {
- previous = previous + ' ';
- parent.map(current, checkErrors);
- }
-
- if (!done) {
- previous = '';
- parent.map(defaults, checkErrors);
- }
- }
-
- previous = token;
- } // end while
-
- /* do the actual replacements on this span */
- if ( doReplaces.length > 0 ) {
- var newNode = n;
-
- for ( var x = 0; x < doReplaces.length; x++ ) {
- var regexp = doReplaces[x][0], result = doReplaces[x][1];
-
- /* it's assumed that this function is only being called on text nodes (nodeType == 3), the iterating is necessary
- because eventually the whole thing gets wrapped in an mceItemHidden span and from there it's necessary to
- handle each node individually. */
- var bringTheHurt = function( node ) {
- var span, splitNodes;
-
- if ( node.nodeType === 3 ) {
- ecount++;
-
- /* sometimes IE likes to ignore the space between two spans, solution is to insert a placeholder span with
- a non-breaking space. The markup removal code substitutes this span for a space later */
- if ( parent.isIE() && node.nodeValue.length > 0 && node.nodeValue.substr(0, 1) === ' ' ) {
- return parent.create( emptySpan + node.nodeValue.substr( 1, node.nodeValue.length - 1 ).replace( regexp, result ), false );
- } else {
- if ( textOnlyMode ) {
- return parent.create( node.nodeValue.replace( regexp, result ), false );
- }
-
- span = parent.create( '<span />' );
- if ( typeof textOnlyMode === 'undefined' ) {
- // cache this to avoid adding / removing nodes unnecessarily
- textOnlyMode = typeof span.appendChild !== 'function';
- if ( textOnlyMode ) {
- parent.remove( span );
- return parent.create( node.nodeValue.replace( regexp, result ), false );
- }
- }
-
- // "Visual" mode
- splitNodes = splitTextNode( node, regexp, result );
- for ( var i = 0; i < splitNodes.length; i++ ) {
- span.appendChild( splitNodes[i] );
- }
-
- node = span;
- return node;
- }
- }
- else {
- var contents = parent.contents(node);
-
- for ( var y = 0; y < contents.length; y++ ) {
- if ( contents[y].nodeType === 3 && regexp.test( contents[y].nodeValue ) ) {
- var nnode;
-
- if ( parent.isIE() && contents[y].nodeValue.length > 0 && contents[y].nodeValue.substr(0, 1) === ' ') {
- nnode = parent.create( emptySpan + contents[y].nodeValue.substr( 1, contents[y].nodeValue.length - 1 ).replace( regexp, result ), true );
- } else {
- nnode = parent.create( contents[y].nodeValue.replace( regexp, result ), true );
- }
-
- parent.replaceWith( contents[y], nnode );
- parent.removeParent( nnode );
-
- ecount++;
-
- return node; /* we did a replacement so we can call it quits, errors only get used once */
- }
- }
-
- return node;
- }
- }; // jshint ignore:line
-
- newNode = bringTheHurt(newNode);
- }
-
- parent.replaceWith(n, newNode);
- }
- }
- });
-
- return ecount;
-};
-
-AtDCore.prototype._walk = function(elements, f) {
- var i;
- for (i = 0; i < elements.length; i++) {
- f.call(f, elements[i]);
- this._walk(this.contents(elements[i]), f);
- }
-};
-
-AtDCore.prototype.removeWords = function(node, w) {
- var count = 0;
- var parent = this;
-
- this.map(this.findSpans(node).reverse(), function(n) {
- if (n && (parent.isMarkedNode(n) || parent.hasClass(n, 'mceItemHidden') || parent.isEmptySpan(n)) ) {
- if (n.innerHTML === '&nbsp;') {
- var nnode = document.createTextNode(' '); /* hax0r */
- parent.replaceWith(n, nnode);
- } else if (!w || n.innerHTML === w) {
- parent.removeParent(n);
- count++;
- }
- }
- });
-
- return count;
-};
-
-AtDCore.prototype.isEmptySpan = function(node) {
- return (this.getAttrib(node, 'class') === '' && this.getAttrib(node, 'style') === '' && this.getAttrib(node, 'id') === '' && !this.hasClass(node, 'Apple-style-span') && this.getAttrib(node, 'mce_name') === '');
-};
-
-AtDCore.prototype.isMarkedNode = function(node) {
- return (this.hasClass(node, 'hiddenGrammarError') || this.hasClass(node, 'hiddenSpellError') || this.hasClass(node, 'hiddenSuggestion'));
-};
-
-/*
- * Context Menu Helpers
- */
-AtDCore.prototype.applySuggestion = function(element, suggestion) {
- if (suggestion === '(omit)') {
- this.remove(element);
- }
- else {
- var node = this.create(suggestion);
- this.replaceWith(element, node);
- this.removeParent(node);
- }
-};
-
-/*
- * Check for an error
- */
-AtDCore.prototype.hasErrorMessage = function(xmlr) {
- return (xmlr !== undefined && xmlr.getElementsByTagName('message').item(0) !== null);
-};
-
-AtDCore.prototype.getErrorMessage = function(xmlr) {
- return xmlr.getElementsByTagName('message').item(0);
-};
-
-/* this should always be an error, alas... not practical */
-AtDCore.prototype.isIE = function() {
- return navigator.appName === 'Microsoft Internet Explorer';
-};
-
-// TODO: this doesn't seem used anywhere in AtD, moved here from install_atd_l10n.js for eventual back-compat
-/* a quick poor man's sprintf */
-function atd_sprintf(format, values) {
- var result = format;
- for (var x = 0; x < values.length; x++) {
- result = result.replace(new RegExp('%' + (x + 1) + '\\$', 'g'), values[x]);
- }
- return result;
-}
diff --git a/plugins/jetpack/modules/after-the-deadline/atd.css b/plugins/jetpack/modules/after-the-deadline/atd.css
deleted file mode 100644
index 88ac9fe7..00000000
--- a/plugins/jetpack/modules/after-the-deadline/atd.css
+++ /dev/null
@@ -1,121 +0,0 @@
-/* AtD error styles */
-
-.hiddenSpellError
-{
- border-bottom: 2px solid red;
- cursor: default;
-}
-
-.hiddenGrammarError
-{
- border-bottom: 2px solid green;
- cursor: default;
-}
-
-.hiddenSuggestion
-{
- border-bottom: 2px solid blue;
- cursor: default;
-}
-
-/* Menu styles derived from:
- * jquery.spellchecker.js - a simple jQuery Spell Checker
- * Copyright (c) 2008 Richard Willis
- * MIT license : http://www.opensource.org/licenses/mit-license.php
- * Project : http://jquery-spellchecker.googlecode.com
- */
-
-#suggestmenu
-{
- min-width: 122px;
- background: #ebeaeb;
- position: absolute;
- display: none;
- z-index: 9999;
- overflow: none;
- margin-top: 1px;
- text-align: left;
- font-size: 11px;
-}
-
-#suggestmenu strong
-{
- background: #cccccc;
- font-weight: bold;
- padding:3px 6px 3px 6px;
- display:block;
- border:1px solid #dddddd;
- border-bottom: 1px solid #aaaaaa;
- color: black;
-}
-
-#suggestmenu em
-{
- text-align:center;
- padding:3px 6px 3px 6px;
- display:block;
- border-top:1px solid #ccc;
- border-left:1px solid #ccc;
-}
-
-#suggestmenu a, #suggestmenu a:visited
-{
- background: #ebeaeb;
- border-left:1px solid #dddddd;
- border-right:1px solid #dddddd;
- padding:3px 6px 3px 6px;
- display:block;
- margin:0px;
- text-decoration:none;
- color: black;
- outline:none
-}
-
-#suggestmenu a.first, #suggestmenu a.first:visited
-{
- border-top:1px solid #dddddd;
-}
-
-.spell_sep_bottom
-{
- border-bottom: 1px solid #dddddd;
-}
-
-.spell_sep_top
-{
- border-top: 1px solid #aaaaaa;
-}
-
-#suggestmenu a:hover
-{
- color:#000;
- background: #f5f5f5;
-}
-
-#suggestmenu .foot
-{
- border-top:1px solid #aaaaaa;
- background:#fff
-}
-
-#suggestmenu .foot a, #suggestmenu .foot a:visited
-{
- outline:none
-}
-
-/* TinyMCE 4.0 */
-div.mce-atd-menu-title.mce-disabled {
- padding: 3px 12px 0;
-}
-
-div.mce-atd-menu-title.mce-disabled:hover,
-div.mce-atd-menu-title.mce-disabled:hover span.mce-text {
- background: none;
- color: #888;
- cursor: default;
-}
-
-div.mce-atd-menu-title.mce-disabled span.mce-text {
- font-weight: bold;
- color: #888;
-}
diff --git a/plugins/jetpack/modules/after-the-deadline/atd.min.css b/plugins/jetpack/modules/after-the-deadline/atd.min.css
deleted file mode 100644
index b212720a..00000000
--- a/plugins/jetpack/modules/after-the-deadline/atd.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-.hiddenSpellError{border-bottom:2px solid red;cursor:default}.hiddenGrammarError{border-bottom:2px solid green;cursor:default}.hiddenSuggestion{border-bottom:2px solid #00f;cursor:default}#suggestmenu{min-width:122px;background:#ebeaeb;position:absolute;display:none;z-index:9999;overflow:none;margin-top:1px;text-align:left;font-size:11px}#suggestmenu strong{background:#ccc;font-weight:700;padding:3px 6px 3px 6px;display:block;border:1px solid #ddd;border-bottom:1px solid #aaa;color:#000}#suggestmenu em{text-align:center;padding:3px 6px 3px 6px;display:block;border-top:1px solid #ccc;border-left:1px solid #ccc}#suggestmenu a,#suggestmenu a:visited{background:#ebeaeb;border-left:1px solid #ddd;border-right:1px solid #ddd;padding:3px 6px 3px 6px;display:block;margin:0;text-decoration:none;color:#000;outline:0}#suggestmenu a.first,#suggestmenu a.first:visited{border-top:1px solid #ddd}.spell_sep_bottom{border-bottom:1px solid #ddd}.spell_sep_top{border-top:1px solid #aaa}#suggestmenu a:hover{color:#000;background:#f5f5f5}#suggestmenu .foot{border-top:1px solid #aaa;background:#fff}#suggestmenu .foot a,#suggestmenu .foot a:visited{outline:0}div.mce-atd-menu-title.mce-disabled{padding:3px 12px 0}div.mce-atd-menu-title.mce-disabled:hover,div.mce-atd-menu-title.mce-disabled:hover span.mce-text{background:0 0;color:#888;cursor:default}div.mce-atd-menu-title.mce-disabled span.mce-text{font-weight:700;color:#888} \ No newline at end of file
diff --git a/plugins/jetpack/modules/after-the-deadline/button.gif b/plugins/jetpack/modules/after-the-deadline/button.gif
deleted file mode 100644
index 279a75de..00000000
--- a/plugins/jetpack/modules/after-the-deadline/button.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/after-the-deadline/config-options.php b/plugins/jetpack/modules/after-the-deadline/config-options.php
deleted file mode 100644
index e39916d4..00000000
--- a/plugins/jetpack/modules/after-the-deadline/config-options.php
+++ /dev/null
@@ -1,143 +0,0 @@
-<?php
-/*
- * Display the configuration options for AtD
- */
-
-/*
- * A convienence function to display the HTML for an AtD option
- */
-function AtD_print_option( $name, $value, $options ) {
- // Attribute-safe version of $name
- $attr_name = sanitize_title( $name ); // Using sanitize_title since there's no comparable function for attributes
-?>
- <input type="checkbox" id="atd_<?php echo esc_attr( $attr_name ); ?>" name="<?php echo esc_attr( $options['name'] ); ?>[<?php echo esc_attr( $name ); ?>]" value="1" <?php checked( '1', isset( $options[ $name ] ) ? $options[ $name ] : false ); ?>> <label for="atd_<?php echo esc_attr( $attr_name ); ?>"><?php echo esc_html( $value ); ?></label>
-<?php
-}
-
-/*
- * Save AtD options
- */
-function AtD_process_options_update() {
-
- $user = wp_get_current_user();
-
- if ( ! $user || $user->ID == 0 ) {
- return;
- }
-
- AtD_update_options( $user->ID, 'AtD_options' );
- AtD_update_options( $user->ID, 'AtD_check_when' );
- AtD_update_options( $user->ID, 'AtD_guess_lang' );
-}
-
-/*
- * Display the various AtD options
- */
-function AtD_display_options_form() {
-
- /* grab our user and validate their existence */
- $user = wp_get_current_user();
- if ( ! $user || $user->ID == 0 ) {
- return;
- }
-
- $options_show_types = AtD_get_options( $user->ID, 'AtD_options' );
- $options_check_when = AtD_get_options( $user->ID, 'AtD_check_when' );
- $options_guess_lang = AtD_get_options( $user->ID, 'AtD_guess_lang' );
-?>
- <table class="form-table">
- <tr valign="top">
- <th scope="row"> <a id="atd"></a> <?php _e( 'Proofreading', 'jetpack' ); ?></th>
- <td>
- <p><?php _e( 'Automatically proofread content when:', 'jetpack' ); ?>
-
- <p>
- <?php
- AtD_print_option( 'onpublish', __( 'a post or page is first published', 'jetpack' ), $options_check_when );
- echo '<br />';
- AtD_print_option( 'onupdate', __( 'a post or page is updated', 'jetpack' ), $options_check_when );
- ?>
- </p>
-
- <p style="font-weight: bold"><?php _e( 'English Options', 'jetpack' ); ?></p>
-
- <p><?php _e( 'Enable proofreading for the following grammar and style rules when writing posts and pages:', 'jetpack' ); ?></p>
-
- <p>
- <?php
- AtD_print_option( 'Bias Language', __( 'Bias Language', 'jetpack' ), $options_show_types );
- echo '<br />';
- AtD_print_option( 'Cliches', __( 'Clich&eacute;s', 'jetpack' ), $options_show_types );
- echo '<br />';
- AtD_print_option( 'Complex Expression', __( 'Complex Phrases', 'jetpack' ), $options_show_types );
- echo '<br />';
- AtD_print_option( 'Diacritical Marks', __( 'Diacritical Marks', 'jetpack' ), $options_show_types );
- echo '<br />';
- AtD_print_option( 'Double Negative', __( 'Double Negatives', 'jetpack' ), $options_show_types );
- echo '<br />';
- AtD_print_option( 'Hidden Verbs', __( 'Hidden Verbs', 'jetpack' ), $options_show_types );
- echo '<br />';
- AtD_print_option( 'Jargon Language', __( 'Jargon', 'jetpack' ), $options_show_types );
- echo '<br />';
- AtD_print_option( 'Passive voice', __( 'Passive Voice', 'jetpack' ), $options_show_types );
- echo '<br />';
- AtD_print_option( 'Phrases to Avoid', __( 'Phrases to Avoid', 'jetpack' ), $options_show_types );
- echo '<br />';
- AtD_print_option( 'Redundant Expression', __( 'Redundant Phrases', 'jetpack' ), $options_show_types );
- ?>
- </p>
- <p>
- <?php
- printf( __( '<a href="%s" rel="noopener noreferrer" target="_blank">Learn more</a> about these options.', 'jetpack' ), 'http://support.wordpress.com/proofreading/' );
-?>
-</p>
-
- <p style="font-weight: bold"><?php _e( 'Language', 'jetpack' ); ?></p>
-
- <p>
- <?php
- _e( 'The proofreader supports English, French, German, Portuguese, and Spanish. Your user interface language (see above) is the default proofreading language.', 'jetpack' );
- ?>
- </p>
-
- <p>
- <?php
- AtD_print_option( 'true', __( 'Use automatically detected language to proofread posts and pages', 'jetpack' ), $options_guess_lang );
- ?>
- </p>
-
-<?php
-}
-
-/*
- * Returns an array of AtD user options specified by $name
- */
-function AtD_get_options( $user_id, $name ) {
- $options_raw = AtD_get_setting( $user_id, $name, 'single' );
-
- $options = array();
- $options['name'] = $name;
-
- if ( $options_raw ) {
- foreach ( explode( ',', $options_raw ) as $option ) {
- $options[ $option ] = 1;
- }
- }
-
- return $options;
-}
-
-/*
- * Saves set of user options specified by $name from POST data
- */
-function AtD_update_options( $user_id, $name ) {
- /* We should probably run $_POST[name] through an esc_*() function... */
- if ( isset( $_POST[ $name ] ) && is_array( $_POST[ $name ] ) ) {
- $copy = array_map( 'strip_tags', array_keys( $_POST[ $name ] ) );
- AtD_update_setting( $user_id, AtD_sanitize( $name ), implode( ',', $copy ) );
- } else {
- AtD_update_setting( $user_id, AtD_sanitize( $name ), '' );
- }
-
- return;
-}
diff --git a/plugins/jetpack/modules/after-the-deadline/config-unignore.php b/plugins/jetpack/modules/after-the-deadline/config-unignore.php
deleted file mode 100644
index 46c35550..00000000
--- a/plugins/jetpack/modules/after-the-deadline/config-unignore.php
+++ /dev/null
@@ -1,155 +0,0 @@
-<?php
-/*
- * Called by the TinyMCE plugin when Ignore Always is clicked (setup as an action through admin-ajax.php)
- */
-function AtD_ignore_call() {
-
- if ( ! AtD_is_allowed() ) {
- return;
- }
-
- $user = wp_get_current_user();
-
- if ( ! $user || $user->ID == 0 ) {
- return;
- }
-
- check_admin_referer( 'atd_ignore' );
-
- $ignores = explode( ',', AtD_get_setting( $user->ID, 'AtD_ignored_phrases' ) );
- array_push( $ignores, $_GET['phrase'] );
-
- $ignores = array_filter( array_map( 'strip_tags', $ignores ) );
-
- AtD_update_setting( $user->ID, 'AtD_ignored_phrases', implode( ',', $ignores ) );
-
- header( 'Content-Type: text/xml' );
- echo '<success></success>';
- die();
-}
-
-/*
- * Called when a POST occurs, used to save AtD ignored phrases
- */
-function AtD_process_unignore_update() {
-
- if ( ! AtD_is_allowed() ) {
- return;
- }
-
- if ( ! isset( $_POST['AtD_ignored_phrases'] ) ) {
- return;
- }
-
- $user = wp_get_current_user();
-
- if ( ! $user || $user->ID == 0 ) {
- return;
- }
-
- $ignores = array_filter( array_map( 'strip_tags', explode( ',', $_POST['AtD_ignored_phrases'] ) ) );
- AtD_update_setting( $user->ID, 'AtD_ignored_phrases', join( ',', $ignores ) );
-}
-
-/*
- * Display the AtD unignore form on a page
- */
-function AtD_display_unignore_form() {
-
- if ( ! AtD_is_allowed() ) {
- return;
- }
-
- $user = wp_get_current_user();
-
- if ( ! $user || $user->ID == 0 ) {
- return;
- }
-
- $ignores = AtD_get_setting( $user->ID, 'AtD_ignored_phrases' );
-?>
-<script>
-function atd_show_phrases( ignored )
-{
- var element = jQuery( '#atd_ignores' ),
- items = [],
- delLink;
-
- ignored.sort();
-
- element.empty();
- for ( var i = 0; i < ignored.length; i++ ) {
- if ( ignored[i].length > 0 ) {
- delLink = jQuery( '<span id="atd_' + i + '">&nbsp;</span>' );
- delLink
- .text( delLink.text() + ignored[i] )
- .prepend( jQuery( '<a class="ntdelbutton">X</a>' ).data( 'ignored', ignored[i] ) );
- element.append( delLink ).append( '<br />' );
- }
- }
-}
-
-function atd_unignore( phrase ) {
- /* get the ignored values and remove the unwanted phrase */
- var ignored = jQuery( '#AtD_ignored_phrases' ).val().split( /,/g );
- ignored = jQuery.map(ignored, function(value, index) { return value == phrase ? null : value; });
- jQuery( '#AtD_ignored_phrases' ).val( ignored.join(',') );
-
- /* update the UI */
- atd_show_phrases( ignored );
-
- /* show a nifty message to the user */
- jQuery( '#AtD_message' ).show();
-}
-
-function atd_ignore () {
- /* get the ignored values and update the hidden field */
- var ignored = jQuery( '#AtD_ignored_phrases' ).val().split( /,/g );
-
- jQuery.map(jQuery( '#AtD_add_ignore' ).val().split(/,\s*/g), function(value, index) { ignored.push(value); });
-
- jQuery( '#AtD_ignored_phrases' ).val( ignored.join(',') );
-
- /* update the UI */
- atd_show_phrases( ignored );
- jQuery( '#AtD_add_ignore' ).val('');
-
- /* show that nifteroo messaroo to the useroo */
- jQuery( '#AtD_message' ).show();
-}
-
-function atd_ignore_init() {
- jQuery( '#AtD_message' ).hide();
- jQuery( '#atd_ignores' ).on( 'click', 'a', function() {
- atd_unignore( jQuery(this).data( 'ignored' ) );
- return false;
- } );
- atd_show_phrases( jQuery( '#AtD_ignored_phrases' ).val().split( /,/g ) );
-}
-
-/* document.ready() does not execute in IE6 unless it's at the bottom of the page. oi! */
-if (navigator.appName == 'Microsoft Internet Explorer')
- setTimeout( atd_ignore_init, 2500 );
-else
- jQuery( document ).ready( atd_ignore_init );
-</script>
- <input type="hidden" name="AtD_ignored_phrases" id="AtD_ignored_phrases" value="<?php echo esc_attr( $ignores ); ?>">
-
- <p style="font-weight: bold"><?php _e( 'Ignored Phrases', 'jetpack' ); ?></p>
-
- <p><?php _e( 'Identify words and phrases to ignore while proofreading your posts and pages:', 'jetpack' ); ?></p>
-
- <p><input type="text" id="AtD_add_ignore" name="AtD_add_ignore"> <input type="button" value="<?php esc_attr_e( 'Add', 'jetpack' ); ?>" onclick="javascript:atd_ignore()"></p>
-
- <div class="tagchecklist" id="atd_ignores"></div>
-
- <div class="plugin-update-tr" id="AtD_message" style="display: none">
- <div class="update-message"><strong><?php _e( 'Be sure to click "Update Profile" at the bottom of the screen to save your changes.', 'jetpack' ); ?></strong></div>
- </div>
-
- </td>
- </tr>
- </table>
-
-<?php
-}
diff --git a/plugins/jetpack/modules/after-the-deadline/jquery.atd.js b/plugins/jetpack/modules/after-the-deadline/jquery.atd.js
deleted file mode 100644
index 1ffd8a01..00000000
--- a/plugins/jetpack/modules/after-the-deadline/jquery.atd.js
+++ /dev/null
@@ -1,436 +0,0 @@
-/*
- * jquery.atd.js - jQuery powered writing check with After the Deadline
- * Author : Raphael Mudge, Automattic Inc.
- * License : LGPL or MIT License (take your pick)
- * Project : http://www.afterthedeadline.com/development.slp
- * Contact : raffi@automattic.com
- *
- * Derived from:
- *
- * jquery.spellchecker.js - a simple jQuery Spell Checker
- * Copyright (c) 2008 Richard Willis
- * MIT license : http://www.opensource.org/licenses/mit-license.php
- * Project : http://jquery-spellchecker.googlecode.com
- * Contact : willis.rh@gmail.com
- */
-
-/* jshint onevar: false, sub: true, smarttabs: true, loopfunc: true */
-/* global AtDCore, AtD_proofread_click_count:true, CSSHttpRequest, ActiveXObject */
-
-var AtD =
-{
- rpc : '', /* see the proxy.php that came with the AtD/TinyMCE plugin */
- rpc_css : 'http://www.polishmywriting.com/atd-jquery/server/proxycss.php?data=', /* you may use this, but be nice! */
- rpc_css_lang : 'en',
- api_key : '',
- i18n : {}, // Back-compat
- listener : {}
-};
-
-AtD.getLang = function( key, defaultk ) {
- return ( window.AtD_l10n_r0ar && window.AtD_l10n_r0ar[key] ) || defaultk;
-};
-
-AtD.addI18n = function( obj ) {
- // Back-compat
- window.AtD_l10n_r0ar = obj;
-};
-
-AtD.setIgnoreStrings = function(string) {
- AtD.core.setIgnoreStrings(string);
-};
-
-AtD.showTypes = function(string) {
- AtD.core.showTypes(string);
-};
-
-AtD.checkCrossAJAX = function(container_id, callback_f) {
- /* checks if a global var for click stats exists and increments it if it does... */
- if (typeof AtD_proofread_click_count !== 'undefined') {
- AtD_proofread_click_count++;
- }
-
- AtD.callback_f = callback_f; /* remember the callback for later */
- AtD.remove(container_id);
- var container = jQuery('#' + container_id);
-
- var text = jQuery.trim(container.html());
- text = text.replace(/\&lt;/g, '<').replace(/\&gt;/g, '>').replace(/\&amp;/g, '&');
- text = encodeURIComponent( text.replace( /\%/g, '%25' ) ); /* % not being escaped here creates problems, I don't know why. */
-
- /* do some sanity checks based on the browser */
- if ((text.length > 2000 && navigator.appName === 'Microsoft Internet Explorer') || text.length > 7800) {
- if (callback_f !== undefined && callback_f.error !== undefined) {
- callback_f.error('Maximum text length for this browser exceeded');
- }
-
- return;
- }
-
- /* do some cross-domain AJAX action with CSSHttpRequest */
- CSSHttpRequest.get(AtD.rpc_css + text + '&lang=' + AtD.rpc_css_lang + '&nocache=' + (new Date().getTime()), function(response) {
- /* do some magic to convert the response into an XML document */
- var xml;
- if (navigator.appName === 'Microsoft Internet Explorer') {
- xml = new ActiveXObject('Microsoft.XMLDOM');
- xml.async = false;
- xml.loadXML(response);
- } else {
- xml = (new DOMParser()).parseFromString(response, 'text/xml');
- }
-
- /* check for and display error messages from the server */
- if (AtD.core.hasErrorMessage(xml)) {
- if (AtD.callback_f !== undefined && AtD.callback_f.error !== undefined) {
- AtD.callback_f.error(AtD.core.getErrorMessage(xml));
- }
-
- return;
- }
-
- /* highlight the errors */
-
- AtD.container = container_id;
- var count = Number( AtD.processXML(container_id, xml) );
-
- if (AtD.callback_f !== undefined && AtD.callback_f.ready !== undefined) {
- AtD.callback_f.ready(count);
- }
-
- if (count === 0 && AtD.callback_f !== undefined && AtD.callback_f.success !== undefined) {
- AtD.callback_f.success(count);
- }
-
- AtD.counter = count;
- AtD.count = count;
- });
-};
-
-/* check a div for any incorrectly spelled words */
-AtD.check = function(container_id, callback_f) {
- /* checks if a global var for click stats exists and increments it if it does... */
- if (typeof AtD_proofread_click_count !== 'undefined') {
- AtD_proofread_click_count++;
- }
-
- AtD.callback_f = callback_f; /* remember the callback for later */
-
- AtD.remove(container_id);
-
- var container = jQuery('#' + container_id);
-
- var text = jQuery.trim(container.html());
- text = text.replace(/\&lt;/g, '<').replace(/\&gt;/g, '>').replace(/\&amp;/g, '&');
- text = encodeURIComponent( text ); /* re-escaping % is not necessary here. don't do it */
-
- jQuery.ajax({
- type : 'POST',
- url : AtD.rpc + '/checkDocument',
- data : 'key=' + AtD.api_key + '&data=' + text,
- format : 'raw',
- dataType : (jQuery.browser.msie) ? 'text' : 'xml',
-
- error : function(XHR, status, error) {
- if (AtD.callback_f !== undefined && AtD.callback_f.error !== undefined) {
- AtD.callback_f.error(status + ': ' + error);
- }
- },
-
- success : function(data) {
- /* apparently IE likes to return XML as plain text-- work around from:
- http://docs.jquery.com/Specifying_the_Data_Type_for_AJAX_Requests */
-
- var xml;
- if (typeof data === 'string') {
- xml = new ActiveXObject('Microsoft.XMLDOM');
- xml.async = false;
- xml.loadXML(data);
- }
- else {
- xml = data;
- }
-
- if (AtD.core.hasErrorMessage(xml)) {
- if (AtD.callback_f !== undefined && AtD.callback_f.error !== undefined) {
- AtD.callback_f.error(AtD.core.getErrorMessage(xml));
- }
-
- return;
- }
-
- /* on with the task of processing and highlighting errors */
-
- AtD.container = container_id;
- var count = Number( AtD.processXML(container_id, xml) );
-
- if (AtD.callback_f !== undefined && AtD.callback_f.ready !== undefined) {
- AtD.callback_f.ready(count);
- }
-
- if (count === 0 && AtD.callback_f !== undefined && AtD.callback_f.success !== undefined) {
- AtD.callback_f.success(count);
- }
-
- AtD.counter = count;
- AtD.count = count;
- }
- });
-};
-
-AtD.remove = function(container_id) {
- AtD._removeWords(container_id, null);
-};
-
-AtD.clickListener = function(event) {
- if (AtD.core.isMarkedNode(event.target)) {
- AtD.suggest(event.target);
- }
-};
-
-AtD.processXML = function(container_id, responseXML) {
-
- var results = AtD.core.processXML(responseXML);
-
- if (results.count > 0) {
- results.count = AtD.core.markMyWords(jQuery('#' + container_id).contents(), results.errors);
- }
-
- jQuery('#' + container_id).unbind('click', AtD.clickListener);
- jQuery('#' + container_id).click(AtD.clickListener);
-
- return results.count;
-};
-
-AtD.useSuggestion = function(word) {
- this.core.applySuggestion(AtD.errorElement, word);
-
- AtD.counter --;
- if (AtD.counter === 0 && AtD.callback_f !== undefined && AtD.callback_f.success !== undefined) {
- AtD.callback_f.success(AtD.count);
- }
-};
-
-AtD.editSelection = function() {
- var parent = AtD.errorElement.parent();
-
- if (AtD.callback_f !== undefined && AtD.callback_f.editSelection !== undefined) {
- AtD.callback_f.editSelection(AtD.errorElement);
- }
-
- if (AtD.errorElement.parent() !== parent) {
- AtD.counter --;
- if (AtD.counter === 0 && AtD.callback_f !== undefined && AtD.callback_f.success !== undefined) {
- AtD.callback_f.success(AtD.count);
- }
- }
-};
-
-AtD.ignoreSuggestion = function() {
- AtD.core.removeParent(AtD.errorElement);
-
- AtD.counter --;
- if (AtD.counter === 0 && AtD.callback_f !== undefined && AtD.callback_f.success !== undefined) {
- AtD.callback_f.success(AtD.count);
- }
-};
-
-AtD.ignoreAll = function(container_id) {
- var target = AtD.errorElement.text();
- var removed = AtD._removeWords(container_id, target);
-
- AtD.counter -= removed;
-
- if (AtD.counter === 0 && AtD.callback_f !== undefined && AtD.callback_f.success !== undefined) {
- AtD.callback_f.success(AtD.count);
- }
-
- if (AtD.callback_f !== undefined && AtD.callback_f.ignore !== undefined) {
- AtD.callback_f.ignore(target);
- AtD.core.setIgnoreStrings(target);
- }
-};
-
-AtD.explainError = function() {
- if (AtD.callback_f !== undefined && AtD.callback_f.explain !== undefined) {
- AtD.callback_f.explain(AtD.explainURL);
- }
-};
-
-AtD.suggest = function(element) {
- /* construct the menu if it doesn't already exist */
- var suggest;
-
- if (jQuery('#suggestmenu').length === 0) {
- suggest = jQuery('<div id="suggestmenu"></div>');
- suggest.prependTo('body');
- } else {
- suggest = jQuery('#suggestmenu');
- suggest.hide();
- }
-
- /* find the correct suggestions object */
-
- var errorDescription = AtD.core.findSuggestion(element);
-
- /* build up the menu y0 */
-
- AtD.errorElement = jQuery(element);
-
- suggest.empty();
-
- if (errorDescription === undefined) {
- suggest.append('<strong>' + AtD.getLang('menu_title_no_suggestions', 'No suggestions') + '</strong>');
- } else if (errorDescription['suggestions'].length === 0) {
- suggest.append('<strong>' + errorDescription['description'] + '</strong>');
- } else {
- suggest.append('<strong>' + errorDescription['description'] + '</strong>');
-
- for (var i = 0; i < errorDescription['suggestions'].length; i++) {
- (function(sugg) {
- suggest.append('<a href="javascript:AtD.useSuggestion(\'' + sugg.replace(/'/, '\\\'') + '\')">' + sugg + '</a>');
- })(errorDescription['suggestions'][i]); // jshint ignore:line
- }
- }
-
- /* do the explain menu if configured */
-
- if (AtD.callback_f !== undefined && AtD.callback_f.explain !== undefined && errorDescription['moreinfo'] !== undefined) {
- suggest.append('<a href="javascript:AtD.explainError()" class="spell_sep_top">' + AtD.getLang('menu_option_explain', 'Explain...') + '</a>');
- AtD.explainURL = errorDescription['moreinfo'];
- }
-
- /* do the ignore option */
-
- suggest.append('<a href="javascript:AtD.ignoreSuggestion()" class="spell_sep_top">' + AtD.getLang('menu_option_ignore_once', 'Ignore suggestion') + '</a>');
-
- /* add the edit in place and ignore always option */
-
- if (AtD.callback_f !== undefined && AtD.callback_f.editSelection !== undefined) {
- if (AtD.callback_f !== undefined && AtD.callback_f.ignore !== undefined) {
- suggest.append('<a href="javascript:AtD.ignoreAll(\'' + AtD.container + '\')">' + AtD.getLang('menu_option_ignore_always', 'Ignore always') + '</a>');
- } else {
- suggest.append('<a href="javascript:AtD.ignoreAll(\'' + AtD.container + '\')">' + AtD.getLang('menu_option_ignore_all', 'Ignore all') + '</a>');
- }
-
- suggest.append('<a href="javascript:AtD.editSelection(\'' + AtD.container + '\')" class="spell_sep_bottom spell_sep_top">' + AtD.getLang('menu_option_edit_selection', 'Edit Selection...') + '</a>');
- }
- else {
- if (AtD.callback_f !== undefined && AtD.callback_f.ignore !== undefined) {
- suggest.append('<a href="javascript:AtD.ignoreAll(\'' + AtD.container + '\')" class="spell_sep_bottom">' + AtD.getLang('menu_option_ignore_always', 'Ignore always') + '</a>');
- } else {
- suggest.append('<a href="javascript:AtD.ignoreAll(\'' + AtD.container + '\')" class="spell_sep_bottom">' + AtD.getLang('menu_option_ignore_all', 'Ignore all') + '</a>');
- }
- }
-
- /* show the menu */
-
- var pos = jQuery(element).offset();
- var width = jQuery(element).width();
-
- /* a sanity check for Internet Explorer--my favorite browser in every possible way */
- if (width > 100) {
- width = 50;
- }
-
- jQuery(suggest).css({ left: (pos.left + width) + 'px', top: pos.top + 'px' });
-
- jQuery(suggest).fadeIn(200);
-
- /* bind events to make the menu disappear when the user clicks outside of it */
-
- AtD.suggestShow = true;
-
- setTimeout(function() {
- jQuery('body').bind('click', function() {
- if (!AtD.suggestShow) {
- jQuery('#suggestmenu').fadeOut(200);
- }
- });
- }, 1);
-
- setTimeout(function() {
- AtD.suggestShow = false;
- }, 2);
-};
-
-AtD._removeWords = function(container_id, w) {
- return this.core.removeWords(jQuery('#' + container_id), w);
-};
-
-/*
- * Set prototypes used by AtD Core UI
- */
-AtD.initCoreModule = function() {
- var core = new AtDCore();
-
- core.hasClass = function(node, className) {
- return jQuery(node).hasClass(className);
- };
-
- core.map = jQuery.map;
-
- core.contents = function(node) {
- return jQuery(node).contents();
- };
-
- core.replaceWith = function(old_node, new_node) {
- return jQuery(old_node).replaceWith(new_node);
- };
-
- core.findSpans = function(parent) {
- return jQuery.makeArray(parent.find('span'));
- };
-
- core.create = function(string/*, isTextNode*/) {
- // replace out all tags with &-equivalents so that we preserve tag text.
- string = string.replace(/\&/g, '&amp;');
- string = string.replace(/</g, '&lt;').replace(/\>/g, '&gt;');
-
- // find all instances of AtD-created spans
- var matches = string.match(/\&lt;span class="hidden\w+?" pre="[^"]*"\&gt;.*?\&lt;\/span\&gt;/g);
- var x;
-
- // ... and fix the tags in those substrings.
- if (matches) {
- for (x = 0; x < matches.length; x++) {
- string = string.replace(matches[x], matches[x].replace(/\&lt;/gi, '<').replace(/\&gt;/gi, '>'));
- }
- }
-
- if (core.isIE()) {
- // and... one more round of corrections for our friends over at the Internet Explorer
- matches = string.match(/\&lt;span class="mceItemHidden"\&gt;\&amp;nbsp;\&lt;\/span&gt;/g, string);
- //|&lt;BR.*?class.*?atd_remove_me.*?\&gt;/gi, string);
- if (matches) {
- for (x = 0; x < matches.length; x++) {
- string = string.replace(matches[x], matches[x].replace(/\&lt;/gi, '<').replace(/\&gt;/gi, '>').replace(/\&amp;/gi, '&'));
- }
- }
- }
-
- var node = jQuery('<span class="mceItemHidden"></span>');
- node.html(string);
- return node;
- };
-
- core.remove = function(node) {
- return jQuery(node).remove();
- };
-
- core.removeParent = function(node) {
- /* unwrap exists in jQuery 1.4+ only. Thankfully because replaceWith as-used here won't work in 1.4 */
- if (jQuery(node).unwrap) {
- return jQuery(node).contents().unwrap();
- } else {
- return jQuery(node).replaceWith(jQuery(node).html());
- }
- };
-
- core.getAttrib = function(node, name) {
- return jQuery(node).attr(name);
- };
-
- return core;
-};
-
-AtD.core = AtD.initCoreModule();
diff --git a/plugins/jetpack/modules/after-the-deadline/proxy.php b/plugins/jetpack/modules/after-the-deadline/proxy.php
deleted file mode 100644
index c00b04f4..00000000
--- a/plugins/jetpack/modules/after-the-deadline/proxy.php
+++ /dev/null
@@ -1,113 +0,0 @@
-<?php
-/*
- * This script redirects AtD AJAX requests to the AtD service
- */
-
-/**
- * Returns array with headers in $response[0] and body in $response[1]
- * Based on a function from Akismet
- */
-function AtD_http_post( $request, $host, $path, $port = 80 ) {
- $http_args = array(
- 'body' => $request,
- 'headers' => array(
- 'Content-Type' => 'application/x-www-form-urlencoded; charset=' . get_option( 'blog_charset' ),
- 'Host' => $host,
- 'User-Agent' => 'AtD/0.1',
- ),
- 'httpversion' => '1.0',
- /**
- * Change the timeout time for AtD post.
- *
- * @module after-the-deadline
- *
- * @since 1.2.3
- *
- * @param int $var Timeout time in seconds, default 15.
- */
- 'timeout' => apply_filters( 'atd_http_post_timeout', 15 ),
- );
-
- // Handle non-standard ports being passed in.
- if ( ( 80 !== $port ) && is_numeric( $port ) && ( intval( $port ) > 0 ) ) {
- $host .= ':' . intval( $port );
- }
- // Strip any / off the begining so we can add it back and protect against SSRF
- $path = ltrim( $path, '/' );
- $AtD_url = set_url_scheme( "http://{$host}/{$path}" );
- $response = wp_remote_post( $AtD_url, $http_args );
- $code = (int) wp_remote_retrieve_response_code( $response );
-
- if ( is_wp_error( $response ) ) {
- /**
- * Fires when there is a post error to AtD.
- *
- * @module after-the-deadline
- *
- * @since 1.2.3
- *
- * @param int|string http-error The error that AtD runs into.
- */
- do_action( 'atd_http_post_error', 'http-error' );
- return array();
- } elseif ( 200 != $code ) {
- /** This action is documented in modules/after-the-deadline/proxy.php */
- do_action( 'atd_http_post_error', $code );
- }
-
- return array(
- wp_remote_retrieve_headers( $response ),
- wp_remote_retrieve_body( $response ),
- );
-}
-
-/*
- * This function is called as an action handler to admin-ajax.php
- */
-function AtD_redirect_call() {
- if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) {
- $postText = trim( file_get_contents( 'php://input' ) );
- }
-
- check_admin_referer( 'proxy_atd' );
-
- $url = $_GET['url'];
- /**
- * Change the AtD service domain.
- *
- * @module after-the-deadline
- *
- * @since 1.2.3
- *
- * @param string $var The URL for AtD service domain, default is service.afterthedeadline.com.
- */
- $service = apply_filters( 'atd_service_domain', 'service.afterthedeadline.com' );
-
- $user = wp_get_current_user();
-
- $atd_lang = get_user_locale( $user->ID );
-
- if ( ! empty( $atd_lang ) ) {
- if ( strpos( $atd_lang, 'pt' ) !== false ) {
- $service = 'pt.service.afterthedeadline.com';
- } elseif ( strpos( $atd_lang, 'de' ) !== false ) {
- $service = 'de.service.afterthedeadline.com';
- } elseif ( strpos( $atd_lang, 'es' ) !== false ) {
- $service = 'es.service.afterthedeadline.com';
- } elseif ( strpos( $atd_lang, 'fr' ) !== false ) {
- $service = 'fr.service.afterthedeadline.com';
- }
- }
-
- $guess = strcmp( AtD_get_setting( $user->ID, 'AtD_guess_lang' ), 'true' ) == 0 ? 'true' : 'false';
-
- $data = AtD_http_post( $postText . "&guess=$guess", defined( 'ATD_HOST' ) ? ATD_HOST : $service, $url, defined( 'ATD_PORT' ) ? ATD_PORT : 80 );
-
- header( 'Content-Type: text/xml' );
-
- if ( ! empty( $data[1] ) ) {
- echo $data[1];
- }
-
- die();
-}
diff --git a/plugins/jetpack/modules/after-the-deadline/rtl/atd-rtl.css b/plugins/jetpack/modules/after-the-deadline/rtl/atd-rtl.css
deleted file mode 100644
index d4f19d3c..00000000
--- a/plugins/jetpack/modules/after-the-deadline/rtl/atd-rtl.css
+++ /dev/null
@@ -1,124 +0,0 @@
-/* This file was automatically generated on Mar 20 2014 23:59:38 */
-
-/* AtD error styles */
-
-.hiddenSpellError
-{
- border-bottom: 2px solid red;
- cursor: default;
-}
-
-.hiddenGrammarError
-{
- border-bottom: 2px solid green;
- cursor: default;
-}
-
-.hiddenSuggestion
-{
- border-bottom: 2px solid blue;
- cursor: default;
-}
-
-/* Menu styles derived from:
- * jquery.spellchecker.js - a simple jQuery Spell Checker
- * Copyright (c) 2008 Richard Willis
- * MIT license : http://www.opensource.org/licenses/mit-license.php
- * Project : http://jquery-spellchecker.googlecode.com
- */
-
-#suggestmenu
-{
- min-width: 122px;
- background: #ebeaeb;
- position: absolute;
- display: none;
- z-index: 9999;
- overflow: none;
- margin-top: 1px;
- text-align: right;
- font-size: 11px;
- font-family: Tahoma, Verdana, Arial, Helvetica;
-}
-
-#suggestmenu strong
-{
- background: #cccccc;
- font-weight: bold;
- padding:3px 6px 3px 6px;
- display:block;
- border:1px solid #dddddd;
- border-bottom: 1px solid #aaaaaa;
- color: black;
-}
-
-#suggestmenu em
-{
- text-align:center;
- padding:3px 6px 3px 6px;
- display:block;
- border-top:1px solid #ccc;
- border-right:1px solid #ccc;
-}
-
-#suggestmenu a, #suggestmenu a:visited
-{
- background: #ebeaeb;
- border-right:1px solid #dddddd;
- border-left:1px solid #dddddd;
- padding:3px 6px 3px 6px;
- display:block;
- margin:0px;
- text-decoration:none;
- color: black;
- outline:none
-}
-
-#suggestmenu a.first, #suggestmenu a.first:visited
-{
- border-top:1px solid #dddddd;
-}
-
-.spell_sep_bottom
-{
- border-bottom: 1px solid #dddddd;
-}
-
-.spell_sep_top
-{
- border-top: 1px solid #aaaaaa;
-}
-
-#suggestmenu a:hover
-{
- color:#000;
- background: #f5f5f5;
-}
-
-#suggestmenu .foot
-{
- border-top:1px solid #aaaaaa;
- background:#fff
-}
-
-#suggestmenu .foot a, #suggestmenu .foot a:visited
-{
- outline:none
-}
-
-/* TinyMCE 4.0 */
-div.mce-atd-menu-title.mce-disabled {
- padding: 3px 12px 0;
-}
-
-div.mce-atd-menu-title.mce-disabled:hover,
-div.mce-atd-menu-title.mce-disabled:hover span.mce-text {
- background: none;
- color: #888;
- cursor: default;
-}
-
-div.mce-atd-menu-title.mce-disabled span.mce-text {
- font-weight: bold;
- color: #888;
-}
diff --git a/plugins/jetpack/modules/after-the-deadline/tinymce/atdbuttontr.gif b/plugins/jetpack/modules/after-the-deadline/tinymce/atdbuttontr.gif
deleted file mode 100644
index 6c51d075..00000000
--- a/plugins/jetpack/modules/after-the-deadline/tinymce/atdbuttontr.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/after-the-deadline/tinymce/css/content-rtl.css b/plugins/jetpack/modules/after-the-deadline/tinymce/css/content-rtl.css
deleted file mode 100644
index 4c67c718..00000000
--- a/plugins/jetpack/modules/after-the-deadline/tinymce/css/content-rtl.css
+++ /dev/null
@@ -1,19 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-.hiddenSpellError
-{
- border-bottom: 2px solid red;
- cursor: default;
-}
-
-.hiddenGrammarError
-{
- border-bottom: 2px solid green;
- cursor: default;
-}
-
-.hiddenSuggestion
-{
- border-bottom: 2px solid blue;
- cursor: default;
-}
-
diff --git a/plugins/jetpack/modules/after-the-deadline/tinymce/css/content-rtl.min.css b/plugins/jetpack/modules/after-the-deadline/tinymce/css/content-rtl.min.css
deleted file mode 100644
index fc5165ca..00000000
--- a/plugins/jetpack/modules/after-the-deadline/tinymce/css/content-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.hiddenSpellError{border-bottom:2px solid red;cursor:default}.hiddenGrammarError{border-bottom:2px solid green;cursor:default}.hiddenSuggestion{border-bottom:2px solid #00f;cursor:default} \ No newline at end of file
diff --git a/plugins/jetpack/modules/after-the-deadline/tinymce/css/content.css b/plugins/jetpack/modules/after-the-deadline/tinymce/css/content.css
deleted file mode 100644
index 8a667529..00000000
--- a/plugins/jetpack/modules/after-the-deadline/tinymce/css/content.css
+++ /dev/null
@@ -1,18 +0,0 @@
-.hiddenSpellError
-{
- border-bottom: 2px solid red;
- cursor: default;
-}
-
-.hiddenGrammarError
-{
- border-bottom: 2px solid green;
- cursor: default;
-}
-
-.hiddenSuggestion
-{
- border-bottom: 2px solid blue;
- cursor: default;
-}
-
diff --git a/plugins/jetpack/modules/after-the-deadline/tinymce/css/content.min.css b/plugins/jetpack/modules/after-the-deadline/tinymce/css/content.min.css
deleted file mode 100644
index cff68d47..00000000
--- a/plugins/jetpack/modules/after-the-deadline/tinymce/css/content.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-.hiddenSpellError{border-bottom:2px solid red;cursor:default}.hiddenGrammarError{border-bottom:2px solid green;cursor:default}.hiddenSuggestion{border-bottom:2px solid #00f;cursor:default} \ No newline at end of file
diff --git a/plugins/jetpack/modules/after-the-deadline/tinymce/editor_plugin.js b/plugins/jetpack/modules/after-the-deadline/tinymce/editor_plugin.js
deleted file mode 100644
index 198c9a5d..00000000
--- a/plugins/jetpack/modules/after-the-deadline/tinymce/editor_plugin.js
+++ /dev/null
@@ -1,479 +0,0 @@
-/*
- * TinyMCE Writing Improvement Tool Plugin
- * Author: Raphael Mudge (raffi@automattic.com)
- *
- * http://www.afterthedeadline.com
- *
- * Distributed under the LGPL
- *
- * Derived from:
- * $Id: editor_plugin_src.js 425 2007-11-21 15:17:39Z spocke $
- *
- * @author Moxiecode
- * @copyright Copyright (C) 2004-2008, Moxiecode Systems AB, All rights reserved.
- *
- * Moxiecode Spell Checker plugin released under the LGPL with TinyMCE
- */
-
-/* jshint onevar: false, sub: true, devel: true, loopfunc: true */
-/* global tinymce, AtDCore, AtD_proofread_click_count:true */
-
-(function()
-{
- var each = tinymce.each, DOM = tinymce.DOM, core;
-
- function getLang( key, defaultStr ) {
- return ( window.AtD_l10n_r0ar && window.AtD_l10n_r0ar[key] ) || defaultStr;
- }
-
- tinymce.create('tinymce.plugins.AfterTheDeadlinePlugin',
- {
- getInfo : function()
- {
- return {
- longname : 'After The Deadline',
- author : 'Raphael Mudge',
- authorurl : 'http://blog.afterthedeadline.com',
- infourl : 'http://www.afterthedeadline.com',
- version : tinymce.majorVersion + '.' + tinymce.minorVersion
- };
- },
-
- /* initializes the functions used by the AtD Core UI Module */
- initAtDCore : function(editor/*, plugin*/)
- {
- var core = new AtDCore();
-
- core.map = each;
-
- core.getAttrib = function(node, key)
- {
- return editor.dom.getAttrib(node, key);
- };
-
- core.findSpans = function(parent)
- {
- if (!parent) {
- return editor.dom.select('span');
- } else {
- return editor.dom.select('span', parent);
- }
- };
-
- core.hasClass = function(node, className)
- {
- return editor.dom.hasClass(node, className);
- };
-
- core.contents = function(node)
- {
- return node.childNodes;
- };
-
- core.replaceWith = function(old_node, new_node)
- {
- return editor.dom.replace(new_node, old_node);
- };
-
- core.create = function(node_html)
- {
- return editor.dom.create('span', { 'class': 'mceItemHidden' }, node_html);
- };
-
- core.removeParent = function(node)
- {
- editor.dom.remove(node, 1);
- return node;
- };
-
- core.remove = function(node)
- {
- editor.dom.remove(node);
- };
-
- core.setIgnoreStrings(editor.getParam('atd_ignore_strings', [] ).join(','));
- core.showTypes(editor.getParam('atd_show_types', ''));
- return core;
- },
-
- /* called when the plugin is initialized */
- init : function(ed, url)
- {
- if ( typeof(AtDCore) === 'undefined' ) {
- return;
- }
-
- var plugin = this;
- var editor = ed;
- this.url = url;
- this.editor = ed;
-
- core = ed.core = this.initAtDCore(editor, plugin);
-
- /* look at the atd_ignore variable and put that stuff into a hash */
- var ignore = tinymce.util.Cookie.getHash('atd_ignore');
-
- if (!ignore) {
- ignore = {};
- }
-
- /* add a command to request a document check and process the results. */
- editor.addCommand('mceWritingImprovementTool', function(callback)
- {
- /* checks if a global var for click stats exists and increments it if it does... */
- if (typeof AtD_proofread_click_count !== 'undefined') {
- AtD_proofread_click_count++;
- }
-
- /* create the nifty spinny thing that says "hizzo, I'm doing something fo realz" */
- plugin.editor.setProgressState(1);
-
- /* remove the previous errors */
- plugin._removeWords();
-
- /* send request to our service */
- plugin.sendRequest('checkDocument', ed.getContent({ format: 'raw' }), function(data, request/*, someObject*/)
- {
- /* turn off the spinning thingie */
- plugin.editor.setProgressState(0);
-
- /* if the server is not accepting requests, let the user know */
- if ( request.status !== 200 || request.responseText.substr(1, 4) === 'html' || !request.responseXML )
- {
- ed.windowManager.alert(
- getLang( 'message_server_error', 'There was a problem communicating with the Proofreading service. Try again in one minute.' ),
- callback ? function() { callback( 0 ); } : function() {}
- );
- return;
- }
-
- /* check to see if things are broken first and foremost */
- if (request.responseXML.getElementsByTagName('message').item(0) != null)
- {
- ed.windowManager.alert(
- request.responseXML.getElementsByTagName('message').item(0).firstChild.data,
- callback ? function() { callback( 0 ); } : function() {}
- );
- return;
- }
-
- var results = core.processXML(request.responseXML);
- var ecount = 0;
-
- if (results.count > 0)
- {
- ecount = plugin.markMyWords(results.errors);
- ed.suggestions = results.suggestions;
- }
-
- if (ecount === 0 && (!callback || callback === undefined)) {
- ed.windowManager.alert( getLang('message_no_errors_found', 'No writing errors were found.') );
- } else if (callback) {
- callback(ecount);
- }
- });
- });
-
- /* load cascading style sheet for this plugin */
- editor.onInit.add(function()
- {
- /* loading the content.css file, why? I have no clue */
- if (editor.settings.content_css !== false)
- {
- editor.dom.loadCSS(editor.getParam('atd_css_url', url + '/css/content.css'));
- }
- });
-
- /* again showing a menu, I have no clue what */
- editor.onClick.add(plugin._showMenu, plugin);
-
- /* we're showing some sort of menu, no idea what */
- editor.onContextMenu.add(plugin._showMenu, plugin);
-
- /* strip out the markup before the contents is serialized (and do it on a copy of the markup so we don't affect the user experience) */
- editor.onPreProcess.add(function(sender, object)
- {
- var dom = sender.dom;
-
- each(dom.select('span', object.node).reverse(), function(n)
- {
- if (n && (dom.hasClass(n, 'hiddenGrammarError') || dom.hasClass(n, 'hiddenSpellError') || dom.hasClass(n, 'hiddenSuggestion') || dom.hasClass(n, 'mceItemHidden') || (!dom.getAttrib(n, 'class') && !dom.getAttrib(n, 'style') && !dom.getAttrib(n, 'id') && !dom.hasClass(n, 'Apple-style-span') && !dom.getAttrib(n, 'mce_name'))))
- {
- dom.remove(n, 1);
- }
- });
- });
-
- /* cleanup the HTML before executing certain commands */
- editor.onBeforeExecCommand.add(function(editor, command)
- {
- if (command === 'mceCodeEditor')
- {
- plugin._removeWords();
- }
- else if (command === 'mceFullScreen')
- {
- plugin._done();
- }
- });
-
- ed.addButton('AtD', {
- title: getLang( 'button_proofread_tooltip', 'Proofread Writing' ),
- image: ed.getParam('atd_button_url', url + '/atdbuttontr.gif'),
- cmd: 'mceWritingImprovementTool'
- });
- },
-
- _removeWords : function(w)
- {
- var ed = this.editor, dom = ed.dom, se = ed.selection, b = se.getBookmark();
-
- ed.core.removeWords(undefined, w);
-
- /* force a rebuild of the DOM... even though the right elements are stripped, the DOM is still organized
- as if the span were there and this breaks my code */
-
- dom.setHTML(dom.getRoot(), dom.getRoot().innerHTML);
-
- se.moveToBookmark(b);
- },
-
- markMyWords : function(errors)
- {
- var ed = this.editor;
- var se = ed.selection, b = se.getBookmark();
-
- var ecount = ed.core.markMyWords(ed.core.contents(this.editor.getBody()), errors);
-
- se.moveToBookmark(b);
- return ecount;
- },
-
- _showMenu : function(ed, e)
- {
- var t = this;
- ed = t.editor; // not clear why this overwrites the function parameter
- var m = t._menu, p1, dom = ed.dom, vp = dom.getViewPort(ed.getWin());
-
- if (!m)
- {
- p1 = DOM.getPos(ed.getContentAreaContainer());
- //p2 = DOM.getPos(ed.getContainer());
-
- m = ed.controlManager.createDropMenu('spellcheckermenu',
- {
- offset_x : p1.x,
- offset_y : p1.y,
- 'class' : 'mceNoIcons'
- });
-
- t._menu = m;
- }
-
- if (ed.core.isMarkedNode(e.target))
- {
- /* remove these other lame-o elements */
- m.removeAll();
-
- /* find the correct suggestions object */
- var errorDescription = ed.core.findSuggestion(e.target);
-
- if (!errorDescription)
- {
- m.add({ title: getLang( 'menu_title_no_suggestions', 'No suggestions' ), 'class': 'mceMenuItemTitle' }).setDisabled(1);
- }
- else if (errorDescription['suggestions'].length === 0)
- {
- m.add({ title: errorDescription['description'], 'class' : 'mceMenuItemTitle' }).setDisabled(1);
- }
- else
- {
- m.add({ title : errorDescription['description'], 'class' : 'mceMenuItemTitle' }).setDisabled(1);
-
- for (var i = 0; i < errorDescription['suggestions'].length; i++)
- {
- (function(sugg)
- {
- m.add({
- title : sugg,
- onclick : function()
- {
- ed.core.applySuggestion(e.target, sugg);
- t._checkDone();
- }
- });
- })(errorDescription['suggestions'][i]); // jshint ignore:line
- }
-
- m.addSeparator();
- }
-
- if (errorDescription && errorDescription['moreinfo'])
- {
- (function(url)
- {
- m.add({
- title : getLang( 'menu_option_explain', 'Explain...' ),
- onclick : function()
- {
- ed.windowManager.open({
- url : url,
- width : 480,
- height : 380,
- inline : true
- }, { theme_url : this.url });
- }
- });
- })(errorDescription['moreinfo']);
-
- m.addSeparator();
- }
-
- m.add({
- title : getLang( 'menu_option_ignore_once', 'Ignore suggestion' ),
- onclick : function()
- {
- dom.remove(e.target, 1);
- t._checkDone();
- }
- });
-
- if (String(this.editor.getParam('atd_ignore_enable', 'false')) === 'true')
- {
- m.add({
- title : getLang( 'menu_option_ignore_always', 'Ignore always' ),
- onclick : function()
- {
- var url = t.editor.getParam('atd_ignore_rpc_url', '{backend}');
-
- if (url === '{backend}')
- {
- /* Default scheme is to save ignore preferences in a cookie */
-
- var ignore = tinymce.util.Cookie.getHash('atd_ignore');
- if (!ignore) { ignore = {}; }
- ignore[e.target.innerHTML] = 1;
-
- tinymce.util.Cookie.setHash('atd_ignore', ignore, new Date( (new Date().getTime()) + 157680000000) );
- }
- else
- {
- /* Plugin is configured to send ignore preferences to server, do that */
-
- var id = t.editor.getParam('atd_rpc_id', '12345678');
-
- tinymce.util.XHR.send({
- url : url + encodeURI(e.target.innerHTML).replace(/&/g, '%26') + '&key=' + id,
- content_type : 'text/xml',
- async : true,
- type : 'GET',
- success : function(/* type, req, o */)
- {
- /* do nothing */
- },
- error : function( type, req, o )
- {
- alert( 'Ignore preference save failed\n' + type + '\n' + req.status + '\nAt: ' + o.url );
- }
- });
-
- /* update atd_ignore_strings with the new value */
- t.editor.core.setIgnoreStrings(e.target.innerHTML); /* this does an update */
- }
-
- t._removeWords(e.target.innerHTML);
- t._checkDone();
- }
- });
- }
- else
- {
- m.add({
- title : getLang( 'menu_option_ignore_all', 'Ignore all' ),
- onclick : function()
- {
- t._removeWords(e.target.innerHTML);
- t._checkDone();
- }
- });
- }
-
- /* show the menu please */
- ed.selection.select(e.target);
- p1 = dom.getPos(e.target);
- m.showMenu(p1.x, p1.y + e.target.offsetHeight - vp.y);
-
- return tinymce.dom.Event.cancel(e);
- }
- else
- {
- m.hideMenu();
- }
- },
-
- /* loop through editor DOM, call _done if no mce tags exist. */
- _checkDone : function()
- {
- var t = this, ed = t.editor, dom = ed.dom, o;
-
- each(dom.select('span'), function(n)
- {
- if (n && dom.hasClass(n, 'mceItemHidden'))
- {
- o = true;
- return false;
- }
- });
-
- if (!o)
- {
- t._done();
- }
- },
-
- /* remove all tags, hide the menu, and fire a dom change event */
- _done : function()
- {
- var plugin = this;
- plugin._removeWords();
-
- if (plugin._menu)
- {
- plugin._menu.hideMenu();
- }
-
- plugin.editor.nodeChanged();
- },
-
- sendRequest : function(file, data, success)
- {
- var id = this.editor.getParam('atd_rpc_id', '12345678');
- var url = this.editor.getParam('atd_rpc_url', '{backend}');
- var plugin = this;
-
- if (url === '{backend}' || id === '12345678')
- {
- this.editor.setProgressState(0);
- alert('Please specify: atd_rpc_url and atd_rpc_id');
- return;
- }
-
- tinymce.util.XHR.send({
- url : url + '/' + file,
- content_type : 'text/xml',
- type : 'POST',
- data : 'data=' + encodeURI(data).replace(/&/g, '%26') + '&key=' + id,
- async : true,
- success : success,
- error : function( type, req, o )
- {
- plugin.editor.setProgressState(0);
- alert( type + '\n' + req.status + '\nAt: ' + o.url );
- }
- });
- }
- });
-
- // Register plugin
- tinymce.PluginManager.add('AtD', tinymce.plugins.AfterTheDeadlinePlugin);
-})();
diff --git a/plugins/jetpack/modules/after-the-deadline/tinymce/plugin.js b/plugins/jetpack/modules/after-the-deadline/tinymce/plugin.js
deleted file mode 100644
index 27cf86f8..00000000
--- a/plugins/jetpack/modules/after-the-deadline/tinymce/plugin.js
+++ /dev/null
@@ -1,427 +0,0 @@
-/* global tinymce */
-/*
- * TinyMCE Writing Improvement Tool Plugin
- * Author: Raphael Mudge (raffi@automattic.com)
- *
- * Updated for TinyMCE 4.0
- *
- * http://www.afterthedeadline.com
- *
- * Distributed under the LGPL
- *
- * Derived from:
- * $Id: editor_plugin_src.js 425 2007-11-21 15:17:39Z spocke $
- *
- * @author Moxiecode
- * @copyright Copyright (C) 2004-2008, Moxiecode Systems AB, All rights reserved.
- *
- * Moxiecode Spell Checker plugin released under the LGPL with TinyMCE
- */
-tinymce.PluginManager.add( 'AtD', function( editor ) {
- var suggestionsMenu, started, atdCore, dom,
- each = tinymce.each;
-
- /* initializes the functions used by the AtD Core UI Module */
- function initAtDCore() {
-
- atdCore = new window.AtDCore();
- atdCore.map = each;
- atdCore._isTinyMCE = true;
-
- atdCore.getAttrib = function( node, key ) {
- return dom.getAttrib( node, key );
- };
-
- atdCore.findSpans = function( parent ) {
- if ( parent === undefined ) {
- return dom.select('span');
- } else {
- return dom.select( 'span', parent );
- }
- };
-
- atdCore.hasClass = function( node, className ) {
- return dom.hasClass( node, className );
- };
-
- atdCore.contents = function( node ) {
- return node.childNodes;
- };
-
- atdCore.replaceWith = function( old_node, new_node ) {
- return dom.replace( new_node, old_node );
- };
-
- atdCore.create = function( node_html ) {
- return dom.create( 'span', { 'class': 'mceItemHidden', 'data-mce-bogus': 1 }, node_html );
- };
-
- atdCore.removeParent = function( node ) {
- dom.remove( node, true );
- return node;
- };
-
- atdCore.remove = function( node ) {
- dom.remove( node );
- };
-
- atdCore.setIgnoreStrings( editor.getParam( 'atd_ignore_strings', [] ).join(',') );
- atdCore.showTypes( editor.getParam( 'atd_show_types', '' ) );
- }
-
- function getLang( key, defaultStr ) {
- return ( window.AtD_l10n_r0ar && window.AtD_l10n_r0ar[key] ) || defaultStr;
- }
-
- function isMarkedNode( node ) {
- return ( node.className && /\bhidden(GrammarError|SpellError|Suggestion)\b/.test( node.className ) );
- }
-
- function markMyWords( errors ) {
- return atdCore.markMyWords( atdCore.contents( editor.getBody() ), errors );
- }
-
- // If no more suggestions, finish.
- function checkIfFinished() {
- if ( ! editor.dom.select('span.hiddenSpellError, span.hiddenGrammarError, span.hiddenSuggestion').length ) {
- if ( suggestionsMenu ) {
- suggestionsMenu.hide();
- }
-
- finish();
- }
- }
-
- function ignoreWord( target, word, all ) {
- var dom = editor.dom;
-
- if ( all ) {
- each( editor.dom.select( 'span.hiddenSpellError, span.hiddenGrammarError, span.hiddenSuggestion' ), function( node ) {
- var text = node.innerText || node.textContent;
-
- if ( text === word ) {
- dom.remove( node, true );
- }
- });
- } else {
- dom.remove( target, true );
- }
-
- checkIfFinished();
- }
-
- // Called when the user clicks "Finish" or when no more suggestions left.
- // Removes all remaining spans and fires custom event.
- function finish() {
- var node,
- dom = editor.dom,
- regex = new RegExp( 'mceItemHidden|hidden(((Grammar|Spell)Error)|Suggestion)' ),
- nodes = dom.select('span'),
- i = nodes.length;
-
- while ( i-- ) { // reversed
- node = nodes[i];
-
- if ( node.className && regex.test( node.className ) ) {
- dom.remove( node, true );
- }
- }
-
- // Rebuild the DOM so AtD core can find the text nodes
- editor.setContent( editor.getContent({ format: 'raw' }), { format: 'raw' } );
-
- started = false;
- editor.nodeChanged();
- editor.fire('SpellcheckEnd');
- }
-
- function sendRequest( file, data, success ) {
- var id = editor.getParam( 'atd_rpc_id', '12345678' ),
- url = editor.getParam( 'atd_rpc_url', '{backend}' );
-
- if ( url === '{backend}' || id === '12345678' ) {
- window.alert( 'Please specify: atd_rpc_url and atd_rpc_id' );
- return;
- }
-
- // create the nifty spinny thing that says "hizzo, I'm doing something fo realz"
- editor.setProgressState( true );
-
- tinymce.util.XHR.send({
- url: url + '/' + file,
- content_type: 'text/xml',
- type: 'POST',
- data: 'data=' + encodeURI( data ).replace( /&/g, '%26' ) + '&key=' + id,
- success: success,
- error: function( type, req, o ) {
- editor.setProgressState();
- window.alert( type + '\n' + req.status + '\nAt: ' + o.url );
- }
- });
- }
-
- function storeIgnoredStrings( /*text*/ ) {
- // Store in sessionStorage?
- }
-
- function setAlwaysIgnore( text ) {
- var url = editor.getParam( 'atd_ignore_rpc_url' );
-
- if ( ! url || url === '{backend}' ) {
- // Store ignored words for this session only
- storeIgnoredStrings( text );
- } else {
- // Plugin is configured to send ignore preferences to server, do that
- tinymce.util.XHR.send({
- url: url + encodeURIComponent( text ) + '&key=' + editor.getParam( 'atd_rpc_id', '12345678' ),
- content_type: 'text/xml',
- type: 'GET',
- error: function() {
- storeIgnoredStrings( text );
- }
- });
- }
-
- // Update atd_ignore_strings with the new value
- atdCore.setIgnoreStrings( text );
- }
-
- // Create the suggestions menu
- function showSuggestions( target ) {
- var pos, root, targetPos,
- items = [],
- text = target.innerText || target.textContent,
- errorDescription = atdCore.findSuggestion( target );
-
- if ( ! errorDescription ) {
- items.push({
- text: getLang( 'menu_title_no_suggestions', 'No suggestions' ),
- classes: 'atd-menu-title',
- disabled: true
- });
- } else {
- items.push({
- text: errorDescription.description,
- classes: 'atd-menu-title',
- disabled: true
- });
-
- if ( errorDescription.suggestions.length ) {
- items.push({ text: '-' }); // separator
-
- each( errorDescription.suggestions, function( suggestion ) {
- items.push({
- text: suggestion,
- onclick: function() {
- atdCore.applySuggestion( target, suggestion );
- checkIfFinished();
- }
- });
- });
- }
- }
-
- if ( errorDescription && errorDescription.moreinfo ) {
- items.push({ text: '-' }); // separator
-
- items.push({
- text: getLang( 'menu_option_explain', 'Explain...' ),
- onclick : function() {
- editor.windowManager.open({
- title: getLang( 'menu_option_explain', 'Explain...' ),
- url: errorDescription.moreinfo,
- width: 480,
- height: 380,
- inline: true
- });
- }
- });
- }
-
- items.push.apply( items, [
- { text: '-' }, // separator
-
- { text: getLang( 'menu_option_ignore_once', 'Ignore suggestion' ), onclick: function() {
- ignoreWord( target, text );
- }}
- ]);
-
- if ( editor.getParam( 'atd_ignore_enable' ) ) {
- items.push({
- text: getLang( 'menu_option_ignore_always', 'Ignore always' ),
- onclick: function() {
- setAlwaysIgnore( text );
- ignoreWord( target, text, true );
- }
- });
- } else {
- items.push({
- text: getLang( 'menu_option_ignore_all', 'Ignore all' ),
- onclick: function() {
- ignoreWord( target, text, true );
- }
- });
- }
-
- // Render menu
- suggestionsMenu = new tinymce.ui.Menu({
- items: items,
- context: 'contextmenu',
- onautohide: function( event ) {
- if ( isMarkedNode( event.target ) ) {
- event.preventDefault();
- }
- },
- onhide: function() {
- suggestionsMenu.remove();
- suggestionsMenu = null;
- }
- });
-
- suggestionsMenu.renderTo( document.body );
-
- // Position menu
- pos = tinymce.DOM.getPos( editor.getContentAreaContainer() );
- targetPos = editor.dom.getPos( target );
- root = editor.dom.getRoot();
-
- // Adjust targetPos for scrolling in the editor
- if ( root.nodeName === 'BODY' ) {
- targetPos.x -= root.ownerDocument.documentElement.scrollLeft || root.scrollLeft;
- targetPos.y -= root.ownerDocument.documentElement.scrollTop || root.scrollTop;
- } else {
- targetPos.x -= root.scrollLeft;
- targetPos.y -= root.scrollTop;
- }
-
- pos.x += targetPos.x;
- pos.y += targetPos.y;
-
- suggestionsMenu.moveTo( pos.x, pos.y + target.offsetHeight );
- }
-
- // Init everything
- editor.on( 'init', function() {
- if ( typeof window.AtDCore === 'undefined' ) {
- return;
- }
-
- // Set dom and atdCore
- dom = editor.dom;
- initAtDCore();
-
- // add a command to request a document check and process the results.
- editor.addCommand( 'mceWritingImprovementTool', function( callback ) {
- var results,
- errorCount = 0;
-
- if ( typeof callback !== 'function' ) {
- callback = function(){};
- }
-
- // checks if a global var for click stats exists and increments it if it does...
- if ( typeof window.AtD_proofread_click_count !== 'undefined' ) {
- window.AtD_proofread_click_count++;
- }
-
- // remove the previous errors
- if ( started ) {
- finish();
- return;
- }
-
- // send request to our service
- sendRequest( 'checkDocument', editor.getContent({ format: 'raw' }), function( data, request ) {
- // turn off the spinning thingie
- editor.setProgressState();
-
- // if the server is not accepting requests, let the user know
- if ( request.status !== 200 || request.responseText.substr( 1, 4 ) === 'html' || ! request.responseXML ) {
- editor.windowManager.alert(
- getLang( 'message_server_error', 'There was a problem communicating with the Proofreading service. Try again in one minute.' ),
- callback(0)
- );
-
- return;
- }
-
- // check to see if things are broken first and foremost
- if ( request.responseXML.getElementsByTagName('message').item(0) !== null ) {
- editor.windowManager.alert(
- request.responseXML.getElementsByTagName('message').item(0).firstChild.data,
- callback(0)
- );
-
- return;
- }
-
- results = atdCore.processXML( request.responseXML );
-
- if ( results.count > 0 ) {
- errorCount = markMyWords( results.errors );
- }
-
- if ( ! errorCount ) {
- editor.windowManager.alert( getLang( 'message_no_errors_found', 'No writing errors were found.' ) );
- } else {
- started = true;
- editor.fire('SpellcheckStart');
- }
-
- callback( errorCount );
- });
- });
-
- if ( editor.settings.content_css !== false ) {
- // CSS for underlining suggestions
- dom.addStyle( '.hiddenSpellError{border-bottom:2px solid red;cursor:default;}' +
- '.hiddenGrammarError{border-bottom:2px solid green;cursor:default;}' +
- '.hiddenSuggestion{border-bottom:2px solid blue;cursor:default;}' );
- }
-
- // Menu z-index > DFW
- tinymce.DOM.addStyle( 'div.mce-floatpanel{z-index:150100 !important;}' );
-
- // Click on misspelled word
- editor.on( 'click', function( event ) {
- if ( isMarkedNode( event.target ) ) {
- event.preventDefault();
- editor.selection.select( event.target );
- // Create the suggestions menu
- showSuggestions( event.target );
- }
- });
- });
-
- editor.addMenuItem( 'spellchecker', {
- text: getLang( 'button_proofread_tooltip', 'Proofread Writing' ),
- context: 'tools',
- cmd: 'mceWritingImprovementTool',
- onPostRender: function() {
- var self = this;
-
- editor.on('SpellcheckStart SpellcheckEnd', function() {
- self.active( started );
- });
- }
- });
-
- editor.addButton( 'spellchecker', {
- tooltip: getLang( 'button_proofread_tooltip', 'Proofread Writing' ),
- cmd: 'mceWritingImprovementTool',
- onPostRender: function() {
- var self = this;
-
- editor.on( 'SpellcheckStart SpellcheckEnd', function() {
- self.active( started );
- });
- }
- });
-
- editor.on( 'remove', function() {
- if ( suggestionsMenu ) {
- suggestionsMenu.remove();
- suggestionsMenu = null;
- }
- });
-});
diff --git a/plugins/jetpack/modules/blocks.php b/plugins/jetpack/modules/blocks.php
deleted file mode 100644
index 88c13090..00000000
--- a/plugins/jetpack/modules/blocks.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Deprecated. No longer needed.
- *
- * @package Jetpack
- */
diff --git a/plugins/jetpack/modules/calypsoify/README.md b/plugins/jetpack/modules/calypsoify/README.md
deleted file mode 100644
index 4ce1273d..00000000
--- a/plugins/jetpack/modules/calypsoify/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# calypsoify
-WordPress plugin for redesigning WP-Admin plugin screens to match Calypso.
-
-![](https://cldup.com/jxE-hrHGgj.png)
diff --git a/plugins/jetpack/modules/calypsoify/class.jetpack-calypsoify.php b/plugins/jetpack/modules/calypsoify/class.jetpack-calypsoify.php
deleted file mode 100644
index 0838bb3f..00000000
--- a/plugins/jetpack/modules/calypsoify/class.jetpack-calypsoify.php
+++ /dev/null
@@ -1,373 +0,0 @@
-<?php
-/*
- * This is Calypso skin of the wp-admin interface that is conditionally triggered via the ?calypsoify=1 param.
- * Ported from an internal Automattic plugin.
-*/
-
-class Jetpack_Calypsoify {
- static $instance = false;
-
- private function __construct() {
- add_action( 'wp_loaded', array( $this, 'setup' ) );
- }
-
- public static function getInstance() {
- if ( ! self::$instance ) {
- self::$instance = new self();
- }
-
- return self::$instance;
- }
-
- public function setup() {
- add_action( 'admin_init', array( $this, 'check_param' ), 4 );
-
- if ( 1 == (int) get_user_meta( get_current_user_id(), 'calypsoify', true ) ) {
- add_action( 'admin_init', array( $this, 'setup_admin' ), 6 );
- }
-
- // Make this always available -- in case calypsoify gets toggled off.
- add_action( 'wp_ajax_jetpack_toggle_autoupdate', array( $this, 'jetpack_toggle_autoupdate' ) );
- add_filter( 'handle_bulk_actions-plugins', array( $this, 'handle_bulk_actions_plugins' ), 10, 3 );
- }
-
- public function setup_admin() {
- // Masterbar is currently required for this to work properly. Mock the instance of it
- if ( ! Jetpack::is_module_active( 'masterbar' ) ) {
- $this->mock_masterbar_activation();
- }
-
- if ( $this->is_page_gutenberg() ) {
- add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_for_gutenberg' ), 100 );
- return;
- }
-
- add_action( 'admin_init', array( $this, 'check_page' ) );
- add_action( 'admin_menu', array( $this, 'remove_core_menus' ), 100 );
- add_action( 'admin_menu', array( $this, 'add_plugin_menus' ), 101 );
- add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ), 100 );
- add_action( 'in_admin_header', array( $this, 'insert_sidebar_html' ) );
- add_action( 'wp_before_admin_bar_render', array( $this, 'modify_masterbar' ), 100000 );
-
- add_filter( 'get_user_option_admin_color', array( $this, 'admin_color_override' ) );
-
- add_action( 'manage_plugins_columns', array( $this, 'manage_plugins_columns_header' ) );
- add_action( 'manage_plugins_custom_column', array( $this, 'manage_plugins_custom_column' ), 10, 2 );
- add_filter( 'bulk_actions-plugins', array( $this, 'bulk_actions_plugins' ) );
-
- if ( 'plugins.php' === basename( $_SERVER['PHP_SELF'] ) ) {
- add_action( 'admin_notices', array( $this, 'plugins_admin_notices' ) );
- }
- }
-
- public function manage_plugins_columns_header( $columns ) {
- if ( current_user_can( 'jetpack_manage_autoupdates' ) ) {
- $columns['autoupdate'] = __( 'Automatic Update', 'jetpack' );
- }
- return $columns;
- }
-
- public function manage_plugins_custom_column( $column_name, $slug ) {
- static $repo_plugins = array();
-
- if ( ! current_user_can( 'jetpack_manage_autoupdates' ) ) {
- return;
- }
-
- if ( empty( $repo_plugins ) ) {
- $repo_plugins = self::get_dotorg_repo_plugins();
- }
-
- $autoupdating_plugins = Jetpack_Options::get_option( 'autoupdate_plugins', array() );
- // $autoupdating_plugins_translations = Jetpack_Options::get_option( 'autoupdate_plugins_translations', array() );
- if ( 'autoupdate' === $column_name ) {
- if ( ! in_array( $slug, $repo_plugins ) ) {
- return;
- }
- // Shamelessly swiped from https://github.com/Automattic/wp-calypso/blob/59bdfeeb97eda4266ad39410cb0a074d2c88dbc8/client/components/forms/form-toggle
- ?>
-
- <span class="form-toggle__wrapper">
- <input
- id="autoupdate_plugin-toggle-<?php echo esc_attr( $slug ) ?>"
- name="autoupdate_plugins[<?php echo esc_attr( $slug ) ?>]"
- value="autoupdate"
- class="form-toggle autoupdate-toggle"
- type="checkbox"
- <?php checked( in_array( $slug, $autoupdating_plugins ) ); ?>
- readonly
- data-slug="<?php echo esc_attr( $slug ); ?>"
- />
- <label class="form-toggle__label" for="autoupdate_plugin-toggle-<?php echo esc_attr( $slug ) ?>">
- <span class="form-toggle__switch" role="checkbox"></span>
- <span class="form-toggle__label-content"><?php /* */ ?></span>
- </label>
- </span>
-
- <?php
- }
- }
-
- public static function get_dotorg_repo_plugins() {
- $plugins = get_site_transient( 'update_plugins' );
- return array_merge( array_keys( $plugins->response ), array_keys( $plugins->no_update ) );
- }
-
- public function bulk_actions_plugins( $bulk_actions ) {
- $bulk_actions['jetpack_enable_plugin_autoupdates'] = __( 'Enable Automatic Updates', 'jetpack' );
- $bulk_actions['jetpack_disable_plugin_autoupdates'] = __( 'Disable Automatic Updates', 'jetpack' );
- return $bulk_actions;
- }
-
- public function handle_bulk_actions_plugins( $redirect_to, $action, $slugs ) {
- $redirect_to = remove_query_arg( array( 'jetpack_enable_plugin_autoupdates', 'jetpack_disable_plugin_autoupdates' ), $redirect_to );
- if ( in_array( $action, array( 'jetpack_enable_plugin_autoupdates', 'jetpack_disable_plugin_autoupdates' ) ) ) {
- $list = Jetpack_Options::get_option( 'autoupdate_plugins', array() );
- $initial_qty = sizeof( $list );
-
- if ( 'jetpack_enable_plugin_autoupdates' === $action ) {
- $list = array_unique( array_merge( $list, $slugs ) );
- } elseif ( 'jetpack_disable_plugin_autoupdates' === $action ) {
- $list = array_diff( $list, $slugs );
- }
-
- Jetpack_Options::update_option( 'autoupdate_plugins', $list );
- $redirect_to = add_query_arg( $action, absint( sizeof( $list ) - $initial_qty ), $redirect_to );
- }
- return $redirect_to;
- }
-
- public function plugins_admin_notices() {
- if ( ! empty( $_GET['jetpack_enable_plugin_autoupdates'] ) ) {
- $qty = (int) $_GET['jetpack_enable_plugin_autoupdates'];
- printf( '<div id="message" class="updated fade"><p>' . _n( 'Enabled automatic updates on %d plugin.', 'Enabled automatic updates on %d plugins.', $qty, 'jetpack' ) . '</p></div>', $qty );
- } elseif ( ! empty( $_GET['jetpack_disable_plugin_autoupdates'] ) ) {
- $qty = (int) $_GET['jetpack_disable_plugin_autoupdates'];
- printf( '<div id="message" class="updated fade"><p>' . _n( 'Disabled automatic updates on %d plugin.', 'Disabled automatic updates on %d plugins.', $qty, 'jetpack' ) . '</p></div>', $qty );
- }
- }
-
- public function jetpack_toggle_autoupdate() {
- if ( ! current_user_can( 'jetpack_manage_autoupdates' ) ) {
- wp_send_json_error();
- return;
- }
-
- $type = $_POST['type'];
- $slug = $_POST['slug'];
- $active = 'false' !== $_POST['active'];
-
- check_ajax_referer( "jetpack_toggle_autoupdate-{$type}" );
-
- if ( ! in_array( $type, array( 'plugins', 'plugins_translations' ) ) ) {
- wp_send_json_error();
- return;
- }
-
- $jetpack_option_name = "autoupdate_{$type}";
-
- $list = Jetpack_Options::get_option( $jetpack_option_name, array() );
-
- if ( $active ) {
- $list = array_unique( array_merge( $list, (array) $slug ) );
- } else {
- $list = array_diff( $list, (array) $slug );
- }
-
- Jetpack_Options::update_option( $jetpack_option_name, $list );
-
- wp_send_json_success( $list );
- }
-
- public function admin_color_override( $color ) {
- return 'fresh';
- }
-
- public function mock_masterbar_activation() {
- include_once JETPACK__PLUGIN_DIR . 'modules/masterbar/masterbar.php';
- new A8C_WPCOM_Masterbar;
- }
-
- public function remove_core_menus() {
- remove_menu_page( 'index.php' );
- remove_menu_page( 'jetpack' );
- remove_menu_page( 'edit.php' );
- remove_menu_page( 'edit.php?post_type=feedback' );
- remove_menu_page( 'upload.php' );
- remove_menu_page( 'edit.php?post_type=page' );
- remove_menu_page( 'edit-comments.php' );
- remove_menu_page( 'themes.php' );
- remove_menu_page( 'plugins.php' );
- remove_menu_page( 'users.php' );
- remove_menu_page( 'tools.php' );
- remove_menu_page( 'link-manager.php' );
-
- // Core settings pages
- remove_submenu_page( 'options-general.php', 'options-general.php' );
- remove_submenu_page( 'options-general.php', 'options-writing.php' );
- remove_submenu_page( 'options-general.php', 'options-reading.php' );
- remove_submenu_page( 'options-general.php', 'options-discussion.php' );
- remove_submenu_page( 'options-general.php', 'options-media.php' );
- remove_submenu_page( 'options-general.php', 'options-permalink.php' );
- remove_submenu_page( 'options-general.php', 'privacy.php' );
- remove_submenu_page( 'options-general.php', 'sharing' );
- }
-
- public function add_plugin_menus() {
- global $menu, $submenu;
-
- add_menu_page( __( 'Manage Plugins', 'jetpack' ), __( 'Manage Plugins', 'jetpack' ), 'activate_plugins', 'plugins.php', '', $this->installed_plugins_icon(), 1 );
-
- // // Count the settings page submenus, if it's zero then don't show this.
- if ( empty( $submenu['options-general.php'] ) ) {
- remove_menu_page( 'options-general.php' );
- } else {
- // Rename and make sure the plugin settings menu is always last.
- // Sneaky plugins seem to override this otherwise.
- // Settings is always key 80.
- $menu[80][0] = __( 'Plugin Settings', 'jetpack' );
- $menu[ max( array_keys( $menu ) ) + 1 ] = $menu[80];
- unset( $menu[80] );
- }
- }
-
- public function enqueue() {
- wp_enqueue_style( 'calypsoify_wpadminmods_css', plugin_dir_url( __FILE__ ) . 'style.min.css', false, JETPACK__VERSION );
- wp_style_add_data( 'calypsoify_wpadminmods_css', 'rtl', 'replace' );
- wp_style_add_data( 'calypsoify_wpadminmods_css', 'suffix', '.min' );
-
- wp_enqueue_script( 'calypsoify_wpadminmods_js', plugin_dir_url( __FILE__ ) . 'mods.js', false, JETPACK__VERSION );
- wp_localize_script( 'calypsoify_wpadminmods_js', 'CalypsoifyOpts', array(
- 'nonces' => array(
- 'autoupdate_plugins' => wp_create_nonce( 'jetpack_toggle_autoupdate-plugins' ),
- 'autoupdate_plugins_translations' => wp_create_nonce( 'jetpack_toggle_autoupdate-plugins_translations' ),
- )
- ) );
- }
-
- public function enqueue_for_gutenberg() {
- wp_enqueue_style( 'calypsoify_wpadminmods_css', plugin_dir_url( __FILE__ ) . 'style-gutenberg.min.css', false, JETPACK__VERSION );
- wp_style_add_data( 'calypsoify_wpadminmods_css', 'rtl', 'replace' );
- wp_style_add_data( 'calypsoify_wpadminmods_css', 'suffix', '.min' );
-
- wp_enqueue_script( 'calypsoify_wpadminmods_js', plugin_dir_url( __FILE__ ) . 'mods-gutenberg.js', false, JETPACK__VERSION );
- wp_localize_script(
- 'calypsoify_wpadminmods_js',
- 'calypsoifyGutenberg',
- array(
- 'closeUrl' => $this->get_close_gutenberg_url(),
- )
- );
- }
-
- public function insert_sidebar_html() { ?>
- <a href="<?php echo esc_url( 'https://wordpress.com/stats/day/' . Jetpack::build_raw_urls( home_url() ) ); ?>" id="calypso-sidebar-header">
- <svg class="gridicon gridicons-chevron-left" height="24" width="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M14 20l-8-8 8-8 1.414 1.414L8.828 12l6.586 6.586"></path></g></svg>
-
- <ul>
- <li id="calypso-sitename"><?php bloginfo( 'name' ); ?></li>
- <li id="calypso-plugins"><?php esc_html_e( 'Plugins' ); ?></li>
- </ul>
- </a>
- <?php
- }
-
- public function modify_masterbar() {
- global $wp_admin_bar;
-
- // Add proper links to masterbar top sections.
- $my_sites_node = (object) $wp_admin_bar->get_node( 'blog' );
- $my_sites_node->href = 'https://wordpress.com/stats/day/' . Jetpack::build_raw_urls( home_url() );
- $wp_admin_bar->add_node( $my_sites_node );
-
- $reader_node = (object) $wp_admin_bar->get_node( 'newdash' );
- $reader_node->href = 'https://wordpress.com';
- $wp_admin_bar->add_node( $reader_node );
-
- $me_node = (object) $wp_admin_bar->get_node( 'my-account' );
- $me_node->href = 'https://wordpress.com/me';
- $wp_admin_bar->add_node( $me_node );
- }
-
- private function installed_plugins_icon() {
- $svg = '<svg class="gridicon gridicons-plugins" height="24" width="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 24"><g><path d="M16 8V3c0-.552-.448-1-1-1s-1 .448-1 1v5h-4V3c0-.552-.448-1-1-1s-1 .448-1 1v5H5v4c0 2.79 1.637 5.193 4 6.317V22h6v-3.683c2.363-1.124 4-3.527 4-6.317V8h-3z" fill="black"></path></g></svg>';
-
- return 'data:image/svg+xml;base64,' . base64_encode( $svg );
- }
-
- public function get_close_gutenberg_url() {
- $screen = get_current_screen();
-
- // E.g. `posts`, `pages`, or `types/some_custom_post_type`
- $post_type = ( 'post' === $screen->post_type || 'page' === $screen->post_type )
- ? $screen->post_type . 's'
- : 'types/' . $screen->post_type;
-
- return 'https://wordpress.com/' . $post_type . '/' . Jetpack::build_raw_urls( home_url() );
- }
-
- public function check_param() {
- if ( isset( $_GET['calypsoify'] ) ) {
- if ( 1 == (int) $_GET['calypsoify'] ) {
- update_user_meta( get_current_user_id(), 'calypsoify', 1 );
- } else {
- update_user_meta( get_current_user_id(), 'calypsoify', 0 );
- }
-
- $page = remove_query_arg( 'calypsoify', wp_basename( $_SERVER['REQUEST_URI'] ) );
-
- wp_safe_redirect( admin_url( $page ) );
- }
- }
-
- public function check_page() {
- // If the user hits plain /wp-admin/ then disable Calypso styles.
- $page = wp_basename( esc_url( $_SERVER['REQUEST_URI'] ) );
-
- if ( false !== strpos( 'index.php', $page ) || false !== strpos( 'wp-admin', $page ) ) {
- update_user_meta( get_current_user_id(), 'calypsoify', 0 );
- wp_safe_redirect( admin_url() );
- die;
- }
- }
-
- /**
- * Return whether a post type should display the Gutenberg/block editor.
- *
- * @since 6.7.0
- */
- public function is_post_type_gutenberg( $post_type ) {
- return use_block_editor_for_post_type( $post_type );
- }
-
- public function is_page_gutenberg() {
- $page = wp_basename( esc_url( $_SERVER['REQUEST_URI'] ) );
-
- if ( false !== strpos( $page, 'post-new.php' ) && empty ( $_GET['post_type'] ) ) {
- return true;
- }
-
- if ( false !== strpos( $page, 'post-new.php' ) && isset( $_GET['post_type'] ) && $this->is_post_type_gutenberg( $_GET['post_type'] ) ) {
- return true;
- }
-
- if ( false !== strpos( $page, 'post.php' ) ) {
- $post = get_post( $_GET['post'] );
- if ( isset( $post ) && isset( $post->post_type ) && $this->is_post_type_gutenberg( $post->post_type ) ) {
- return true;
- }
- }
-
- if ( false !== strpos( $page, 'revision.php' ) ) {
- $post = get_post( $_GET['revision'] );
- $parent = get_post( $post->post_parent );
- if ( isset( $parent ) && isset( $parent->post_type ) && $this->is_post_type_gutenberg( $parent->post_type ) ) {
- return true;
- }
- }
-
- return false;
- }
-}
-
-$Jetpack_Calypsoify = Jetpack_Calypsoify::getInstance();
diff --git a/plugins/jetpack/modules/calypsoify/gutenberg-styles/button.scss b/plugins/jetpack/modules/calypsoify/gutenberg-styles/button.scss
deleted file mode 100644
index 38c256e8..00000000
--- a/plugins/jetpack/modules/calypsoify/gutenberg-styles/button.scss
+++ /dev/null
@@ -1,143 +0,0 @@
-.components-button {
- &.is-default {
- color: $muriel-gray-700;
- border-color: $muriel-gray-100;
- background: $white;
- box-shadow: none;
- border-width: 1px 1px 2px;
-
- &:hover {
- background: $white;
- border-color: $muriel-gray-200;
- box-shadow: none;
- color: $muriel-gray-700;
- }
-
- &:focus:enabled {
- background: $white;
- color: $muriel-gray-700;
- border-color: $color-primary;
- box-shadow: 0 0 0 2px $color-primary-light;
- }
-
- &:active:enabled {
- background: $white;
- border-color: $muriel-gray-100;
- border-width: 2px 1px 1px;
- box-shadow: none;
- }
-
- &:disabled,
- &[aria-disabled='true'] {
- color: $muriel-gray-50;
- background-color: $white;
- border-color: $muriel-gray-50;
- text-shadow: none;
- }
- }
-
- &.is-primary {
- background: $color-accent;
- border-color: $color-accent-dark;
- box-shadow: none;
- color: $white;
- text-shadow: none;
-
- &:focus:enabled {
- background: $muriel-hot-pink-400;
- border-color: $color-accent;
- color: $white;
- box-shadow: 0 0 0 2px $color-accent-light;
- }
-
- &:hover {
- box-shadow: none;
- background: $muriel-hot-pink-400;
- border-color: $color-accent-dark;
- color: $white;
- }
-
- &:focus:enabled {
- box-shadow: 0 0 0 2px $color-accent-light;
- }
-
- &:active:enabled {
- background: $muriel-hot-pink-400;
- border-color: $color-accent-dark;
- box-shadow: inset 0 1px 0 $color-accent-dark;
- }
-
- &:disabled,
- &[aria-disabled='true'] {
- color: $muriel-gray-50;
- background: $white;
- border-color: $muriel-gray-50;
- text-shadow: none;
-
- &:hover,
- &:focus,
- &:active {
- color: $muriel-gray-50;
- background-color: $white;
- border-color: $muriel-gray-50;
- box-shadow: none;
- }
- }
-
- &.is-busy,
- &.is-busy:disabled,
- &.is-busy[aria-disabled='true'] {
- background-image: linear-gradient(
- -45deg,
- $color-accent 28%,
- $muriel-hot-pink-600 28%,
- $muriel-hot-pink-600 72%,
- $color-accent 72%
- );
- border-color: $color-accent-dark;
- }
- }
-
- /* Buttons that look like links, for a cross of good semantics with the visual */
- &.is-link {
- color: $color-link;
-
- &:hover,
- &:active {
- color: $color-link-dark;
- }
-
- &:focus {
- color: $color-link-dark;
- box-shadow: 0 0 0 2px $color-primary-light;
- }
- }
-
- /* Link buttons that are red to indicate destructive behavior. */
- &.is-link.is-destructive {
- color: $alert-red;
- }
-
- &:focus:enabled {
- // @include button-style__focus-active;
- }
-
- &.is-busy {
- background-image: repeating-linear-gradient(
- -45deg,
- $muriel-gray-500,
- $white 11px,
- $white 10px,
- $muriel-gray-500 20px
- );
- }
-
- // Buttons that are text-based.
- &.is-tertiary {
- color: $color-link;
-
- &:not( :disabled ):not( [aria-disabled='true'] ):not( .is-default ):hover {
- color: $color-link-dark;
- }
- }
-}
diff --git a/plugins/jetpack/modules/calypsoify/mods-gutenberg.js b/plugins/jetpack/modules/calypsoify/mods-gutenberg.js
deleted file mode 100644
index abcc3ed5..00000000
--- a/plugins/jetpack/modules/calypsoify/mods-gutenberg.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/* eslint-disable no-var */
-/* global wp, calypsoifyGutenberg */
-
-jQuery( function( $ ) {
- if ( wp && wp.data && wp.data.select && ! wp.data.select( 'core/edit-post' ).isFeatureActive( 'fullscreenMode' ) ) {
- wp.data.dispatch( 'core/edit-post' ).toggleFeature( 'fullscreenMode' );
- }
-
- var editPostHeaderInception = setInterval( function() {
- var $closeButton = $( '.edit-post-fullscreen-mode-close__toolbar a' );
- if ( $closeButton.length < 1 ) {
- return;
- }
- clearInterval( editPostHeaderInception );
-
- $closeButton.attr( 'href', calypsoifyGutenberg.closeUrl );
- } );
-
- $( 'body.revision-php a' ).each( function() {
- var href = $( this ).attr( 'href' );
- $( this ).attr( 'href', href.replace( '&classic-editor', '' ) );
- } );
-} );
diff --git a/plugins/jetpack/modules/calypsoify/mods.js b/plugins/jetpack/modules/calypsoify/mods.js
deleted file mode 100644
index 400e4b03..00000000
--- a/plugins/jetpack/modules/calypsoify/mods.js
+++ /dev/null
@@ -1,68 +0,0 @@
-/* global pagenow, ajaxurl, CalypsoifyOpts */
-( function( $ ) {
- $( window ).load( function() {
- // On Plugins.php
- if ( 'plugins' === pagenow ) { // pagenow === $current_screen->id
- // Remove | and () from the plugins filter bar
- $.each( $( 'ul.subsubsub li' ), function( i, el ) {
- var li = $( el );
- li.html( li.html().replace( '|', '' ).replace( '(', '' ).replace( ')', '' ) );
- } );
-
- // Add in the AJAX-y goodness for toggling autoupdates.
- $( 'input.autoupdate-toggle' ).change( function( event ) {
- var el = event.target;
-
- el.disabled = true;
- el.classList.add( 'is-toggling' );
-
- jQuery.post( ajaxurl, {
- action: 'jetpack_toggle_autoupdate',
- type: 'plugins',
- slug: el.dataset.slug,
- active: el.checked,
- _wpnonce: CalypsoifyOpts.nonces.autoupdate_plugins
- }, function() {
- // Add something to test and confirm that `el.dataset.slug` is missing from `response.data` ?
- el.disabled = false;
- el.classList.remove( 'is-toggling' );
- } );
- } );
- }
-
- $( '#wp-admin-bar-root-default' ).on( 'click', 'li', function( event ) {
- location.href = $( event.target ).closest( 'a' ).attr( 'href' );
- } );
-
- $( '#wp-admin-bar-top-secondary' ).on( 'click', 'li#wp-admin-bar-my-account', function( event ) {
- location.href = $( event.target ).closest( 'a' ).attr( 'href' );
- } );
-
- if ( document && document.location && document.location.search ) {
- var params_array = document.location.search.substr( 1 ).split( '&' ),
- params_object = {},
- body = $( document.body ),
- i, key_value, pluginEl;
-
- if ( params_array && params_array.length ) {
- for ( i = 0; i < params_array.length; i++ ) {
- key_value = params_array[ i ].split( '=' );
- params_object[ key_value[ 0 ] ] = key_value[ 1 ];
- }
-
- if ( params_object.s && params_object[ 'modal-mode' ] && params_object.plugin ) {
- pluginEl = $( '.plugin-card-' + params_object.plugin + ' .thickbox.open-plugin-details-modal' );
- if ( pluginEl && pluginEl.length ) {
- pluginEl.click();
- }
- }
- }
-
- body.on( 'thickbox:iframe:loaded', function() {
- $( '#TB_window' ).on( 'click', 'button#TB_closeWindowButton', function() {
- $( '#TB_closeWindowButton' ).click();
- } );
- } );
- }
- } );
-} )( jQuery );
diff --git a/plugins/jetpack/modules/calypsoify/style-gutenberg-rtl.min.css b/plugins/jetpack/modules/calypsoify/style-gutenberg-rtl.min.css
deleted file mode 100644
index 002de0ee..00000000
--- a/plugins/jetpack/modules/calypsoify/style-gutenberg-rtl.min.css
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Do not modify this file directly. It is compiled SASS code. */
-.components-button.is-default{color:#3d4145;border-color:#ccced0;background:#fff;box-shadow:none;border-width:1px 1px 2px}.components-button.is-default:hover{background:#fff;border-color:#b0b5b8;box-shadow:none;color:#3d4145}.components-button.is-default:focus:enabled{background:#fff;color:#3d4145;border-color:#016087;box-shadow:0 0 0 2px #6f93ad}.components-button.is-default:active:enabled{background:#fff;border-color:#ccced0;border-width:2px 1px 1px;box-shadow:none}.components-button.is-default:disabled,.components-button.is-default[aria-disabled='true']{color:#e1e2e2;background-color:#fff;border-color:#e1e2e2;text-shadow:none}.components-button.is-primary{background:#d52c82;border-color:#992053;box-shadow:none;color:#fff;text-shadow:none}.components-button.is-primary:focus:enabled{background:#ff3997;border-color:#d52c82;color:#fff;box-shadow:0 0 0 2px #ff76b8}.components-button.is-primary:hover{box-shadow:none;background:#ff3997;border-color:#992053;color:#fff}.components-button.is-primary:focus:enabled{box-shadow:0 0 0 2px #ff76b8}.components-button.is-primary:active:enabled{background:#ff3997;border-color:#992053;box-shadow:inset 0 1px 0 #992053}.components-button.is-primary:disabled,.components-button.is-primary[aria-disabled='true']{color:#e1e2e2;background:#fff;border-color:#e1e2e2;text-shadow:none}.components-button.is-primary:disabled:hover,.components-button.is-primary:disabled:focus,.components-button.is-primary:disabled:active,.components-button.is-primary[aria-disabled='true']:hover,.components-button.is-primary[aria-disabled='true']:focus,.components-button.is-primary[aria-disabled='true']:active{color:#e1e2e2;background-color:#fff;border-color:#e1e2e2;box-shadow:none}.components-button.is-primary.is-busy,.components-button.is-primary.is-busy:disabled,.components-button.is-primary.is-busy[aria-disabled='true']{background-image:linear-gradient(45deg, #d52c82 28%, #b7266a 28%, #b7266a 72%, #d52c82 72%);border-color:#992053}.components-button.is-link{color:#016087}.components-button.is-link:hover,.components-button.is-link:active{color:#23354b}.components-button.is-link:focus{color:#23354b;box-shadow:0 0 0 2px #6f93ad}.components-button.is-link.is-destructive{color:#ff4b1c}.components-button.is-busy{background-image:repeating-linear-gradient(45deg, #636d75, #fff 11px, #fff 10px, #636d75 20px)}.components-button.is-tertiary{color:#016087}.components-button.is-tertiary:not(:disabled):not([aria-disabled='true']):not(.is-default):hover{color:#23354b}.edit-post-more-menu__content .components-menu-group:first-child .components-menu-item__button:last-child{display:none}.editor-inserter__manage-reusable-blocks,a.components-menu-item__button[href*="post_type=wp_block"]{display:none}.edit-post-sidebar__panel-tab.is-active{border-color:#016087}.edit-post-sidebar .input-control:focus,.edit-post-sidebar input[type='checkbox']:focus,.edit-post-sidebar input[type='color']:focus,.edit-post-sidebar input[type='date']:focus,.edit-post-sidebar input[type='datetime-local']:focus,.edit-post-sidebar input[type='datetime']:focus,.edit-post-sidebar input[type='email']:focus,.edit-post-sidebar input[type='month']:focus,.edit-post-sidebar input[type='number']:focus,.edit-post-sidebar input[type='password']:focus,.edit-post-sidebar input[type='radio']:focus,.edit-post-sidebar input[type='search']:focus,.edit-post-sidebar input[type='tel']:focus,.edit-post-sidebar input[type='text']:focus,.edit-post-sidebar input[type='time']:focus,.edit-post-sidebar input[type='url']:focus,.edit-post-sidebar input[type='week']:focus,.edit-post-sidebar select:focus,.edit-post-sidebar textarea:focus{border-color:#016087;box-shadow:0 0 0 2px #6f93ad}.edit-post-sidebar input[type='checkbox']:checked{background:#016087;border-color:#016087}a{color:#016087}a:active,a:hover{color:#23354b}a:focus{color:#23354b;box-shadow:none;outline:thin dotted}.wp-toolbar .revision-php{margin-top:-32px}.revision-php{background:#f6f6f6}.revision-php #wpadminbar,.revision-php #adminmenumain,.revision-php #wp-admin-bar-menu-toggle{display:none}.revision-php #wpcontent{margin-right:0 !important}.revision-php #wpbody{padding-top:0}.revision-php #screen-meta-links{display:none !important}.revision-php #wpfooter{display:none !important}.revision-tickmarks{margin-top:8px}.revisions-controls{height:118px}.revisions-controls .author-card .avatar{border-radius:50%;height:38px;margin-top:4px;width:38px}.revisions-controls .author-card .author-info{line-height:20px;margin-top:4px}.comparing-two-revisions .revisions-controls{height:176px}.revisions-meta{margin-top:28px}.diff-meta{min-height:46px}.revision-toggle-compare-mode label{vertical-align:top}.revisions-tooltip{transform:translateY(-36px)}
-
-/*# sourceMappingURL=style-gutenberg-rtl.min.css.map */
diff --git a/plugins/jetpack/modules/calypsoify/style-gutenberg.min.css b/plugins/jetpack/modules/calypsoify/style-gutenberg.min.css
deleted file mode 100644
index cb47e755..00000000
--- a/plugins/jetpack/modules/calypsoify/style-gutenberg.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled SASS code. */
-.components-button.is-default{color:#3d4145;border-color:#ccced0;background:#fff;box-shadow:none;border-width:1px 1px 2px}.components-button.is-default:hover{background:#fff;border-color:#b0b5b8;box-shadow:none;color:#3d4145}.components-button.is-default:focus:enabled{background:#fff;color:#3d4145;border-color:#016087;box-shadow:0 0 0 2px #6f93ad}.components-button.is-default:active:enabled{background:#fff;border-color:#ccced0;border-width:2px 1px 1px;box-shadow:none}.components-button.is-default:disabled,.components-button.is-default[aria-disabled='true']{color:#e1e2e2;background-color:#fff;border-color:#e1e2e2;text-shadow:none}.components-button.is-primary{background:#d52c82;border-color:#992053;box-shadow:none;color:#fff;text-shadow:none}.components-button.is-primary:focus:enabled{background:#ff3997;border-color:#d52c82;color:#fff;box-shadow:0 0 0 2px #ff76b8}.components-button.is-primary:hover{box-shadow:none;background:#ff3997;border-color:#992053;color:#fff}.components-button.is-primary:focus:enabled{box-shadow:0 0 0 2px #ff76b8}.components-button.is-primary:active:enabled{background:#ff3997;border-color:#992053;box-shadow:inset 0 1px 0 #992053}.components-button.is-primary:disabled,.components-button.is-primary[aria-disabled='true']{color:#e1e2e2;background:#fff;border-color:#e1e2e2;text-shadow:none}.components-button.is-primary:disabled:hover,.components-button.is-primary:disabled:focus,.components-button.is-primary:disabled:active,.components-button.is-primary[aria-disabled='true']:hover,.components-button.is-primary[aria-disabled='true']:focus,.components-button.is-primary[aria-disabled='true']:active{color:#e1e2e2;background-color:#fff;border-color:#e1e2e2;box-shadow:none}.components-button.is-primary.is-busy,.components-button.is-primary.is-busy:disabled,.components-button.is-primary.is-busy[aria-disabled='true']{background-image:linear-gradient(-45deg, #d52c82 28%, #b7266a 28%, #b7266a 72%, #d52c82 72%);border-color:#992053}.components-button.is-link{color:#016087}.components-button.is-link:hover,.components-button.is-link:active{color:#23354b}.components-button.is-link:focus{color:#23354b;box-shadow:0 0 0 2px #6f93ad}.components-button.is-link.is-destructive{color:#ff4b1c}.components-button.is-busy{background-image:repeating-linear-gradient(-45deg, #636d75, #fff 11px, #fff 10px, #636d75 20px)}.components-button.is-tertiary{color:#016087}.components-button.is-tertiary:not(:disabled):not([aria-disabled='true']):not(.is-default):hover{color:#23354b}.edit-post-more-menu__content .components-menu-group:first-child .components-menu-item__button:last-child{display:none}.editor-inserter__manage-reusable-blocks,a.components-menu-item__button[href*="post_type=wp_block"]{display:none}.edit-post-sidebar__panel-tab.is-active{border-color:#016087}.edit-post-sidebar .input-control:focus,.edit-post-sidebar input[type='checkbox']:focus,.edit-post-sidebar input[type='color']:focus,.edit-post-sidebar input[type='date']:focus,.edit-post-sidebar input[type='datetime-local']:focus,.edit-post-sidebar input[type='datetime']:focus,.edit-post-sidebar input[type='email']:focus,.edit-post-sidebar input[type='month']:focus,.edit-post-sidebar input[type='number']:focus,.edit-post-sidebar input[type='password']:focus,.edit-post-sidebar input[type='radio']:focus,.edit-post-sidebar input[type='search']:focus,.edit-post-sidebar input[type='tel']:focus,.edit-post-sidebar input[type='text']:focus,.edit-post-sidebar input[type='time']:focus,.edit-post-sidebar input[type='url']:focus,.edit-post-sidebar input[type='week']:focus,.edit-post-sidebar select:focus,.edit-post-sidebar textarea:focus{border-color:#016087;box-shadow:0 0 0 2px #6f93ad}.edit-post-sidebar input[type='checkbox']:checked{background:#016087;border-color:#016087}a{color:#016087}a:active,a:hover{color:#23354b}a:focus{color:#23354b;box-shadow:none;outline:thin dotted}.wp-toolbar .revision-php{margin-top:-32px}.revision-php{background:#f6f6f6}.revision-php #wpadminbar,.revision-php #adminmenumain,.revision-php #wp-admin-bar-menu-toggle{display:none}.revision-php #wpcontent{margin-left:0 !important}.revision-php #wpbody{padding-top:0}.revision-php #screen-meta-links{display:none !important}.revision-php #wpfooter{display:none !important}.revision-tickmarks{margin-top:8px}.revisions-controls{height:118px}.revisions-controls .author-card .avatar{border-radius:50%;height:38px;margin-top:4px;width:38px}.revisions-controls .author-card .author-info{line-height:20px;margin-top:4px}.comparing-two-revisions .revisions-controls{height:176px}.revisions-meta{margin-top:28px}.diff-meta{min-height:46px}.revision-toggle-compare-mode label{vertical-align:top}.revisions-tooltip{transform:translateY(-36px)}
diff --git a/plugins/jetpack/modules/calypsoify/style-rtl.min.css b/plugins/jetpack/modules/calypsoify/style-rtl.min.css
deleted file mode 100644
index 2022acb8..00000000
--- a/plugins/jetpack/modules/calypsoify/style-rtl.min.css
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Do not modify this file directly. It is compiled SASS code. */
-body,#wp-content-editor-tools{background:#f6f6f6}#wpwrap{top:14px}#wp-admin-bar-notes #wpnt-notes-unread-count.wpn-unread{background-image:none !important;background-color:#ff76b8 !important;border:none !important}#adminmenu #collapse-menu,#adminmenu .wp-menu-separator,#screen-meta-links,.wp-submenu,#toplevel_page_jetpack{display:none}.wp-menu-open .wp-submenu{display:block}#adminmenuwrap,#adminmenuback,#adminmenu{background:#fff}#adminmenuback{border-left:1px solid #e1e2e2}#adminmenu,#adminmenuwrap,#adminmenuback,#adminmenu .wp-submenu{width:272px}#adminmenu{margin-top:71px}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .opensub .wp-submenu,#adminmenu .opensub .wp-submenu:after,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu{background:transparent !important}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus,#adminmenu li.wp-menu-open,#adminmenu a:hover{background:#f6f6f6}#adminmenu .wp-submenu-head,#adminmenu a.menu-top{padding:5px 5px 5px 0}#adminmenu .wp-has-current-submenu ul>li>a{padding:11px 20px 11px 16px;font-size:14px}#adminmenu .wp-submenu a:hover{background-color:#e1e2e2}#adminmenu>li.wp-first-item{border-bottom:1px solid rgba(200,215,225,0.5)}#adminmenu a.wp-has-current-submenu:after,#adminmenu>li.current>a.current:after,#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border:none}#adminmenu .dashicons,#adminmenu .dashicons-before:before{width:24px;height:24px;font-size:24px}#adminmenu a,#adminmenu div.wp-menu-image:before{color:#3d4145 !important}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu{background:#d8dee4}#adminmenu div.wp-menu-image.svg{filter:brightness(0.25)}#adminmenu li.wp-menu-open div.wp-menu-image.svg{filter:brightness(100)}#adminmenu li.wp-menu-open div.wp-menu-image:before,#adminmenu li.wp-menu-open div.wp-menu-name{color:#016087 !important}#adminmenu div.wp-menu-name{color:#2b2d2f;font-size:15px;padding:9px 41px 8px 0}#adminmenu li.menu-top{min-height:46px}#adminmenu .awaiting-mod,#adminmenu .update-plugins{background-color:#016087}.no-js li.wp-has-current-submenu:hover .wp-submenu{background:transparent !important}#wpcontent,#wpfooter{margin-right:272px}#toplevel_page_plugins div.wp-menu-image.svg,#toplevel_page_plugin-install div.wp-menu-image.svg{background-size:24px auto}#toplevel_page_plugins div.wp-menu-image.svg{position:relative;right:-2px}#calypso-sidebar-header{position:fixed;top:47px;right:0;width:272px;height:70px;background:#fff;z-index:10000}#calypso-sidebar-header svg{float:right;position:relative;right:10px;top:23px}#calypso-sidebar-header ul{float:right;position:relative;top:3px;right:15px}#calypso-sidebar-header ul li{margin:0}#calypso-sidebar-header ul li#calypso-sitename{font-size:12px;color:#636d75;overflow:hidden;white-space:nowrap;width:225px}@media screen and (max-width: 782px){#calypso-sidebar-header ul li#calypso-sitename{width:150px}}#calypso-sidebar-header ul li#calypso-sitename:after{content:'';display:block;position:absolute;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;background:linear-gradient(to left, rgba(255,255,255,0), #fff 90%);top:0px;bottom:0px;left:0px;right:auto;width:20%;height:auto}#calypso-sidebar-header ul li#calypso-plugins{font-weight:bold;color:#2b2d2f;font-size:16px}.folded #adminmenu .wp-has-current-submenu .wp-submenu,.folded #adminmenu .opensub .wp-submenu,.folded #adminmenu .opensub .wp-submenu:after,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu{background:#f6f6f6 !important}.folded #adminmenu li.menu-top .wp-submenu>li>a{padding:7px 46px 7px 12px;font-size:14px}.folded #adminmenu li.current.menu-top,.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head{background:#f3f5f6}.folded #adminmenu .wp-submenu .wp-submenu-head{padding:14px 11px 14px 4px}.folded #adminmenu a.menu-top{padding-right:1px}.folded #wpcontent #calypso-sidebar-header{width:36px}.folded #wpcontent #calypso-sidebar-header svg{right:6px}.folded #wpcontent #calypso-sidebar-header ul{display:none}.folded .no-js li.wp-has-current-submenu:hover .wp-submenu{background:#f6f6f6 !important}.folded #toplevel_page_plugins div.wp-menu-image.svg{position:relative;right:-2px}@media only screen and (max-width: 960px){#calypso-sidebar-header{width:36px}#calypso-sidebar-header ul{display:none}#calypso-sidebar-header svg{right:6px}#adminmenu a.menu-top{padding-right:1px}}@media screen and (max-width: 782px){#calypso-sidebar-header{position:absolute;display:none;width:190px;top:-14px}.wp-responsive-open #calypso-sidebar-header{display:block}#calypso-sidebar-header ul{display:block}.auto-fold #adminmenu .wp-menu-name{margin-right:0}.auto-fold #adminmenu{top:-14px}.auto-fold #adminmenu .selected,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus,#adminmenu li.wp-menu-open{background:#d8dee4 !important}#adminmenu .wp-submenu,.auto-fold #adminmenu .selected .wp-submenu,.auto-fold #adminmenu .wp-menu-open .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu{background:#fff !important}.auto-fold #adminmenu li.selected div.wp-menu-image.svg{filter:brightness(100)}.auto-fold #adminmenu li.selected div.wp-menu-image:before,.auto-fold #adminmenu li.selected div.wp-menu-name{color:#016087 !important}#wpadminbar .quicklinks>ul>li>a,#wpadminbar .quicklinks>ul>li>.ab-empty-item{padding:0 15px !important}#wpadminbar li#wp-admin-bar-ab-new-post a{padding:7px 15px !important}}@media screen and (max-width: 600px){#calypso-sidebar-header{top:32px}.auto-fold #adminmenu{top:32px}}@media screen and (max-width: 480px){#wpadminbar #wp-admin-bar-blog.my-sites>a.ab-item:before{margin-top:4px !important}#wpadminbar #wp-admin-bar-newdash>a.ab-item:before{margin-top:6px !important}#wpadminbar ul li#wp-admin-bar-ab-new-post a:before{top:-5px !important;margin-right:-12px !important}}.nav-tab-wrapper,.wrap h2.nav-tab-wrapper{margin:10px 0 25px;background:#fff;border:1px solid rgba(200,215,225,0.5)}.nav-tab{border:none;background:none;font-weight:400;padding:3px 13px 12px;color:#016087}.nav-tab-active,.nav-tab-active:focus,.nav-tab-active:focus:active,.nav-tab-active:hover{background:transparent;box-shadow:none}.nav-tab:first-child{margin-right:0}.nav-tab-active,.nav-tab-active:focus,.nav-tab-active:focus:active{border-bottom:2px solid #3d4145;color:#2b2d2f}#wpadminbar{background:#016087;-webkit-box-shadow:none;-mozilla-box-shadow:none;height:46px;position:fixed}#wpadminbar .ab-top-menu>li>.ab-item{font-size:14px}#wpadminbar .ab-top-menu>li.hover>.ab-item{background:#6f93ad !important;color:#fff}#wpadminbar *{line-height:46px}#wpadminbar .quicklinks a,#wpadminbar .quicklinks .ab-empty-item,#wpadminbar .shortlink-input{height:46px}#wpadminbar .quicklinks>ul>li>a{padding:0 15px}#wpadminbar .quicklinks>ul>li.current>a{background:#004966}#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar .ab-top-menu>li.ab-hover>.ab-item{background:transparent !important}#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item{background:#6f93ad !important;color:#fff}#wpadminbar .ab-top-menu>li.my-sites>.ab-item,#wpadminbar .ab-top-menu>li.my-sites.hover>.ab-item,#wpadminbar .ab-top-menu>li.my-sites.ab-hover>.ab-item{background:#004966 !important}#wpadminbar #wp-admin-bar-blog.my-sites>a.ab-item:before,#wpadminbar #wp-admin-bar-newdash>a.ab-item:before{margin-top:12px}#wpadminbar ul li#wp-admin-bar-ab-new-post{border-radius:3px}#wpadminbar ul li#wp-admin-bar-ab-new-post a{padding:6px 15px;color:#016087 !important}#wpadminbar ul li#wp-admin-bar-ab-new-post a span{color:#016087 !important;font-size:14px !important}#wpadminbar ul li#wp-admin-bar-ab-new-post a:before,#wpadminbar ul li#wp-admin-bar-ab-new-post a:after{background-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><rect x="0" fill="none" width="24" height="24"/><g><path fill="%230087be" d="M21 14v5c0 1.105-.895 2-2 2H5c-1.105 0-2-.895-2-2V5c0-1.105.895-2 2-2h5v2H5v14h14v-5h2z"/><path fill="%230087be" d="M21 7h-4V3h-2v4h-4v2h4v4h2V9h4"/></g></svg>') !important}#wpadminbar ul li#wp-admin-bar-ab-new-post:hover,#wpadminbar ul li#wp-admin-bar-ab-new-post:hover>.ab-item{background:#f6f6f6 !important;opacity:1;border-radius:3px !important}#wpadminbar li#wp-admin-bar-blog.menupop>.ab-sub-wrapper,#wpadminbar li#wp-admin-bar-newdash.menupop>.ab-sub-wrapper,#wpadminbar li#wp-admin-bar-my-account.menupop>.ab-sub-wrapper{display:none !important}#wpadminbar li#wp-admin-bar-notes.active,#wpadminbar li#wp-admin-bar-notes.active>.ab-item{background:#004966 !important}#wpadminbar li#wp-admin-bar-notes>#wpnt-notes-panel2{top:46px}#wpadminbar .ab-top-menu>li.ab-active>.ab-item,#wpadminbar>#wp-toolbar .wpnt-show span.noticon,#wpadminbar #wp-admin-bar-notes.wpnt-show .noticon{color:#fff !important}#wpadminbar .ab-active>a.ab-item:before,#wpadminbar #wp-admin-bar-notes.active .noticon-bell:before{filter:brightness(100) !important}#wpadminbar .quicklinks>ul>li#wp-admin-bar-notes>a.ab-item span.noticon,#wpadminbar>#wp-toolbar span.noticon,#wpadminbar #wp-admin-bar-notes .noticon{top:10px}#wpadminbar>#wp-toolbar>#wp-admin-bar-root-default .ab-icon,#wpadminbar .ab-icon,#wpadminbar .ab-item:before{font-size:24px;line-height:1.45}.wrap{margin:20px 15px 25px 30px}@media screen and (max-width: 782px){.wrap{margin:10px 7px 10px 18px}}.subsubsub,.wp-filter{margin:10px 0 25px;background:#fff;border:1px solid rgba(200,215,225,0.5);width:100%;box-shadow:none;padding:0}.subsubsub a,.filter-links li>a{padding:10px 15px;display:inline-block;font-size:14px;margin:0;color:#016087;border-bottom:2px solid #fff;outline:none}.subsubsub a:focus,.filter-links li>a:focus{box-shadow:0 0 0 1px #016087,0 0 2px 1px #6f93ad}.subsubsub a:hover,.filter-links li>a:hover{color:#23354b;background-color:#f3f5f6}.subsubsub a:hover:not(.current),.filter-links li>a:hover:not(.current){border-color:#f3f5f6}.filter-links li>a{padding:16px}.subsubsub a.current,.filter-links .current{border-bottom:2px solid #3d4145}.count{display:inline-block;padding:1px 6px;border:solid 1px #969ca1;border-radius:12px;font-size:11px;font-weight:bold;line-height:14px;color:#636d75;text-align:center;margin-right:2px}.plugins-php .plugins a{color:#016087}.plugins-php .plugins a:hover,.plugins-php .plugins a:focus{color:#23354b}.plugins-php .plugins a:focus{box-shadow:0 0 0 1px #016087,0 0 2px 1px #6f93ad}.plugins-php .plugins a.delete{color:#eb0001}.plugins-php .plugins a.delete:hover,.plugins-php .plugins a.delete:focus{color:#ac120b}.plugins-php .plugins a.delete:focus{box-shadow:0 0 0 1px #eb0001,0 0 2px 1px #ff8248}.plugins-php .tablenav{clear:none;float:right;margin-bottom:15px}.plugins-php .tablenav .one-page .displaying-num{display:none}.plugins-php .bulkactions select:focus{border-color:#016087;box-shadow:0 0 2px #6f93ad}.plugins-php p.search-box{margin-top:5px}.plugins-php p.search-box .wp-filter-search:focus{border-color:#016087;box-shadow:0 0 2px #6f93ad}.plugins-php .plugins .active th{border-right:4px solid #016087}.plugins-php .plugins .active th,.plugins-php .plugins .active td{background-color:#f3f5f6}.wrap .wp-heading-inline+.page-title-action,.wrap .add-new-h2,.wrap .add-new-h2:active,.wrap .page-title-action,.wrap .page-title-action:active{background:#d52c82;border-color:#992053;color:#fff;border-style:solid;border-width:1px 1px 2px;cursor:pointer;display:inline-block;margin:0 0 0 5px;outline:0;overflow:hidden;font-weight:500;text-overflow:ellipsis;text-decoration:none;vertical-align:middle;box-sizing:border-box;font-size:13px;line-height:21px;border-radius:4px;padding:2px 10px 2px;margin-bottom:2px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.wrap .wp-heading-inline+.page-title-action:hover,.wrap .add-new-h2:hover,.wrap .add-new-h2:active:hover,.wrap .page-title-action:hover,.wrap .page-title-action:active:hover{background-color:#ff3997}.wrap .wp-heading-inline+.page-title-action:focus,.wrap .add-new-h2:focus,.wrap .add-new-h2:active:focus,.wrap .page-title-action:focus,.wrap .page-title-action:active:focus{box-shadow:0 0 0 2px #ff76b8;background-color:#ff3997}.wp-core-ui .button{background:#fff}.wp-core-ui .button:focus{border-color:#016087;box-shadow:0 0 3px #6f93ad}.wp-core-ui .button-primary{background:#016087;border-color:#23354b;color:#fff;text-shadow:none}.wp-core-ui .button-primary:hover,.wp-core-ui .button-primary:focus{background-color:#46799a}.ui-tabs-nav li,.wp-switch-editor{background-color:#f6f6f6 !important}.plugin-card a,.popular-tags a,.filter-links>li>a{color:#016087}.plugin-card a:hover,.plugin-card a:focus,.popular-tags a:hover,.popular-tags a:focus,.filter-links>li>a:hover,.filter-links>li>a:focus{color:#23354b}.plugin-card a:focus,.popular-tags a:focus,.filter-links>li>a:focus{box-shadow:0 0 0 1px #016087,0 0 2px 1px #6f93ad}.plugin-card-bottom,.alternate,.striped>tbody>:nth-child(odd),ul.striped>:nth-child(odd),.ui-tabs-panel,.ui-tabs-nav li.ui-tabs-active,.ui-tabs-nav li.ui-tabs-active:hover,div.mce-toolbar-grp,.html-active .switch-html,.tmce-active .switch-tmce,#post-status-info,.quicktags-toolbar,#major-publishing-actions{background-color:#fff;border-color:#d7e1e9}.wp-filter .search-form{margin-left:10px}.form-toggle[type="checkbox"]{display:none}.form-toggle__switch{position:relative;display:inline-block;border-radius:12px;box-sizing:border-box;padding:2px;width:40px;height:24px;vertical-align:middle;align-self:flex-start;outline:0;cursor:pointer;transition:all .4s ease, box-shadow 0s}.form-toggle__switch:before,.form-toggle__switch:after{position:relative;display:block;content:"";width:20px;height:20px}.form-toggle__switch:after{right:0;border-radius:50%;background:#fff;transition:all .2s ease}.form-toggle__switch:before{display:none}.accessible-focus .form-toggle__switch:focus{box-shadow:0 0 0 2px #016087}.form-toggle__label{cursor:pointer}.is-disabled .form-toggle__label{cursor:default}.form-toggle__label .form-toggle__label-content{flex:0 1 100%;margin-right:12px}.accessible-focus .form-toggle:focus+.form-toggle__label .form-toggle__switch{box-shadow:0 0 0 2px #016087}.accessible-focus .form-toggle:focus:checked+.form-toggle__label .form-toggle__switch{box-shadow:0 0 0 2px #6f93ad}.form-toggle+.form-toggle__label .form-toggle__switch{background:#b0b5b8}.form-toggle:not(:disabled)+.form-toggle__label:hover .form-toggle__switch{background:#ccced0}.form-toggle:checked+.form-toggle__label .form-toggle__switch{background:#016087}.form-toggle:checked+.form-toggle__label .form-toggle__switch:after{right:16px}.form-toggle:checked:not(:disabled)+.form-toggle__label:hover .form-toggle__switch{background:#6f93ad}.form-toggle:disabled+label.form-toggle__label span.form-toggle__switch{opacity:0.25;cursor:default}.form-toggle.is-toggling+.form-toggle__label .form-toggle__switch{background:#016087}.form-toggle.is-toggling:checked+.form-toggle__label .form-toggle__switch{background:#ccced0}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch{border-radius:8px;width:24px;height:16px}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:before,.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:after{width:12px;height:12px}.form-toggle.is-compact:checked+.form-toggle__label .form-toggle__switch:after{right:8px}
-
-/*# sourceMappingURL=style-rtl.min.css.map */
diff --git a/plugins/jetpack/modules/calypsoify/style.min.css b/plugins/jetpack/modules/calypsoify/style.min.css
deleted file mode 100644
index 555ee289..00000000
--- a/plugins/jetpack/modules/calypsoify/style.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is compiled SASS code. */
-body,#wp-content-editor-tools{background:#f6f6f6}#wpwrap{top:14px}#wp-admin-bar-notes #wpnt-notes-unread-count.wpn-unread{background-image:none !important;background-color:#ff76b8 !important;border:none !important}#adminmenu #collapse-menu,#adminmenu .wp-menu-separator,#screen-meta-links,.wp-submenu,#toplevel_page_jetpack{display:none}.wp-menu-open .wp-submenu{display:block}#adminmenuwrap,#adminmenuback,#adminmenu{background:#fff}#adminmenuback{border-right:1px solid #e1e2e2}#adminmenu,#adminmenuwrap,#adminmenuback,#adminmenu .wp-submenu{width:272px}#adminmenu{margin-top:71px}#adminmenu .wp-has-current-submenu .wp-submenu,#adminmenu .opensub .wp-submenu,#adminmenu .opensub .wp-submenu:after,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu{background:transparent !important}#adminmenu li.menu-top:hover,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus,#adminmenu li.wp-menu-open,#adminmenu a:hover{background:#f6f6f6}#adminmenu .wp-submenu-head,#adminmenu a.menu-top{padding:5px 0 5px 5px}#adminmenu .wp-has-current-submenu ul>li>a{padding:11px 16px 11px 20px;font-size:14px}#adminmenu .wp-submenu a:hover{background-color:#e1e2e2}#adminmenu>li.wp-first-item{border-bottom:1px solid rgba(200,215,225,0.5)}#adminmenu a.wp-has-current-submenu:after,#adminmenu>li.current>a.current:after,#adminmenu li.wp-has-submenu.wp-not-current-submenu.opensub:hover:after{border:none}#adminmenu .dashicons,#adminmenu .dashicons-before:before{width:24px;height:24px;font-size:24px}#adminmenu a,#adminmenu div.wp-menu-image:before{color:#3d4145 !important}#adminmenu li.current a.menu-top,#adminmenu li.wp-has-current-submenu a.wp-has-current-submenu{background:#d8dee4}#adminmenu div.wp-menu-image.svg{filter:brightness(0.25)}#adminmenu li.wp-menu-open div.wp-menu-image.svg{filter:brightness(100)}#adminmenu li.wp-menu-open div.wp-menu-image:before,#adminmenu li.wp-menu-open div.wp-menu-name{color:#016087 !important}#adminmenu div.wp-menu-name{color:#2b2d2f;font-size:15px;padding:9px 0 8px 41px}#adminmenu li.menu-top{min-height:46px}#adminmenu .awaiting-mod,#adminmenu .update-plugins{background-color:#016087}.no-js li.wp-has-current-submenu:hover .wp-submenu{background:transparent !important}#wpcontent,#wpfooter{margin-left:272px}#toplevel_page_plugins div.wp-menu-image.svg,#toplevel_page_plugin-install div.wp-menu-image.svg{background-size:24px auto}#toplevel_page_plugins div.wp-menu-image.svg{position:relative;left:-2px}#calypso-sidebar-header{position:fixed;top:47px;left:0;width:272px;height:70px;background:#fff;z-index:10000}#calypso-sidebar-header svg{float:left;position:relative;left:10px;top:23px}#calypso-sidebar-header ul{float:left;position:relative;top:3px;left:15px}#calypso-sidebar-header ul li{margin:0}#calypso-sidebar-header ul li#calypso-sitename{font-size:12px;color:#636d75;overflow:hidden;white-space:nowrap;width:225px}@media screen and (max-width: 782px){#calypso-sidebar-header ul li#calypso-sitename{width:150px}}#calypso-sidebar-header ul li#calypso-sitename:after{content:'';display:block;position:absolute;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;background:linear-gradient(to right, rgba(255,255,255,0), #fff 90%);top:0px;bottom:0px;right:0px;left:auto;width:20%;height:auto}#calypso-sidebar-header ul li#calypso-plugins{font-weight:bold;color:#2b2d2f;font-size:16px}.folded #adminmenu .wp-has-current-submenu .wp-submenu,.folded #adminmenu .opensub .wp-submenu,.folded #adminmenu .opensub .wp-submenu:after,.folded #adminmenu a.wp-has-current-submenu:focus+.wp-submenu{background:#f6f6f6 !important}.folded #adminmenu li.menu-top .wp-submenu>li>a{padding:7px 12px 7px 46px;font-size:14px}.folded #adminmenu li.current.menu-top,.folded #adminmenu li.wp-has-current-submenu,.folded #adminmenu li.wp-has-current-submenu .wp-submenu .wp-submenu-head{background:#f3f5f6}.folded #adminmenu .wp-submenu .wp-submenu-head{padding:14px 4px 14px 11px}.folded #adminmenu a.menu-top{padding-left:1px}.folded #wpcontent #calypso-sidebar-header{width:36px}.folded #wpcontent #calypso-sidebar-header svg{left:6px}.folded #wpcontent #calypso-sidebar-header ul{display:none}.folded .no-js li.wp-has-current-submenu:hover .wp-submenu{background:#f6f6f6 !important}.folded #toplevel_page_plugins div.wp-menu-image.svg{position:relative;left:-2px}@media only screen and (max-width: 960px){#calypso-sidebar-header{width:36px}#calypso-sidebar-header ul{display:none}#calypso-sidebar-header svg{left:6px}#adminmenu a.menu-top{padding-left:1px}}@media screen and (max-width: 782px){#calypso-sidebar-header{position:absolute;display:none;width:190px;top:-14px}.wp-responsive-open #calypso-sidebar-header{display:block}#calypso-sidebar-header ul{display:block}.auto-fold #adminmenu .wp-menu-name{margin-left:0}.auto-fold #adminmenu{top:-14px}.auto-fold #adminmenu .selected,#adminmenu li.opensub>a.menu-top,#adminmenu li>a.menu-top:focus,#adminmenu li.wp-menu-open{background:#d8dee4 !important}#adminmenu .wp-submenu,.auto-fold #adminmenu .selected .wp-submenu,.auto-fold #adminmenu .wp-menu-open .wp-submenu,#adminmenu a.wp-has-current-submenu:focus+.wp-submenu{background:#fff !important}.auto-fold #adminmenu li.selected div.wp-menu-image.svg{filter:brightness(100)}.auto-fold #adminmenu li.selected div.wp-menu-image:before,.auto-fold #adminmenu li.selected div.wp-menu-name{color:#016087 !important}#wpadminbar .quicklinks>ul>li>a,#wpadminbar .quicklinks>ul>li>.ab-empty-item{padding:0 15px !important}#wpadminbar li#wp-admin-bar-ab-new-post a{padding:7px 15px !important}}@media screen and (max-width: 600px){#calypso-sidebar-header{top:32px}.auto-fold #adminmenu{top:32px}}@media screen and (max-width: 480px){#wpadminbar #wp-admin-bar-blog.my-sites>a.ab-item:before{margin-top:4px !important}#wpadminbar #wp-admin-bar-newdash>a.ab-item:before{margin-top:6px !important}#wpadminbar ul li#wp-admin-bar-ab-new-post a:before{top:-5px !important;margin-left:-12px !important}}.nav-tab-wrapper,.wrap h2.nav-tab-wrapper{margin:10px 0 25px;background:#fff;border:1px solid rgba(200,215,225,0.5)}.nav-tab{border:none;background:none;font-weight:400;padding:3px 13px 12px;color:#016087}.nav-tab-active,.nav-tab-active:focus,.nav-tab-active:focus:active,.nav-tab-active:hover{background:transparent;box-shadow:none}.nav-tab:first-child{margin-left:0}.nav-tab-active,.nav-tab-active:focus,.nav-tab-active:focus:active{border-bottom:2px solid #3d4145;color:#2b2d2f}#wpadminbar{background:#016087;-webkit-box-shadow:none;-mozilla-box-shadow:none;height:46px;position:fixed}#wpadminbar .ab-top-menu>li>.ab-item{font-size:14px}#wpadminbar .ab-top-menu>li.hover>.ab-item{background:#6f93ad !important;color:#fff}#wpadminbar *{line-height:46px}#wpadminbar .quicklinks a,#wpadminbar .quicklinks .ab-empty-item,#wpadminbar .shortlink-input{height:46px}#wpadminbar .quicklinks>ul>li>a{padding:0 15px}#wpadminbar .quicklinks>ul>li.current>a{background:#004966}#wpadminbar:not(.mobile) .ab-top-menu>li>.ab-item:focus,#wpadminbar.nojq .quicklinks .ab-top-menu>li>.ab-item:focus,#wpadminbar .ab-top-menu>li.ab-hover>.ab-item{background:transparent !important}#wpadminbar:not(.mobile) .ab-top-menu>li:hover>.ab-item{background:#6f93ad !important;color:#fff}#wpadminbar .ab-top-menu>li.my-sites>.ab-item,#wpadminbar .ab-top-menu>li.my-sites.hover>.ab-item,#wpadminbar .ab-top-menu>li.my-sites.ab-hover>.ab-item{background:#004966 !important}#wpadminbar #wp-admin-bar-blog.my-sites>a.ab-item:before,#wpadminbar #wp-admin-bar-newdash>a.ab-item:before{margin-top:12px}#wpadminbar ul li#wp-admin-bar-ab-new-post{border-radius:3px}#wpadminbar ul li#wp-admin-bar-ab-new-post a{padding:6px 15px;color:#016087 !important}#wpadminbar ul li#wp-admin-bar-ab-new-post a span{color:#016087 !important;font-size:14px !important}#wpadminbar ul li#wp-admin-bar-ab-new-post a:before,#wpadminbar ul li#wp-admin-bar-ab-new-post a:after{background-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><rect x="0" fill="none" width="24" height="24"/><g><path fill="%230087be" d="M21 14v5c0 1.105-.895 2-2 2H5c-1.105 0-2-.895-2-2V5c0-1.105.895-2 2-2h5v2H5v14h14v-5h2z"/><path fill="%230087be" d="M21 7h-4V3h-2v4h-4v2h4v4h2V9h4"/></g></svg>') !important}#wpadminbar ul li#wp-admin-bar-ab-new-post:hover,#wpadminbar ul li#wp-admin-bar-ab-new-post:hover>.ab-item{background:#f6f6f6 !important;opacity:1;border-radius:3px !important}#wpadminbar li#wp-admin-bar-blog.menupop>.ab-sub-wrapper,#wpadminbar li#wp-admin-bar-newdash.menupop>.ab-sub-wrapper,#wpadminbar li#wp-admin-bar-my-account.menupop>.ab-sub-wrapper{display:none !important}#wpadminbar li#wp-admin-bar-notes.active,#wpadminbar li#wp-admin-bar-notes.active>.ab-item{background:#004966 !important}#wpadminbar li#wp-admin-bar-notes>#wpnt-notes-panel2{top:46px}#wpadminbar .ab-top-menu>li.ab-active>.ab-item,#wpadminbar>#wp-toolbar .wpnt-show span.noticon,#wpadminbar #wp-admin-bar-notes.wpnt-show .noticon{color:#fff !important}#wpadminbar .ab-active>a.ab-item:before,#wpadminbar #wp-admin-bar-notes.active .noticon-bell:before{filter:brightness(100) !important}#wpadminbar .quicklinks>ul>li#wp-admin-bar-notes>a.ab-item span.noticon,#wpadminbar>#wp-toolbar span.noticon,#wpadminbar #wp-admin-bar-notes .noticon{top:10px}#wpadminbar>#wp-toolbar>#wp-admin-bar-root-default .ab-icon,#wpadminbar .ab-icon,#wpadminbar .ab-item:before{font-size:24px;line-height:1.45}.wrap{margin:20px 30px 25px 15px}@media screen and (max-width: 782px){.wrap{margin:10px 18px 10px 7px}}.subsubsub,.wp-filter{margin:10px 0 25px;background:#fff;border:1px solid rgba(200,215,225,0.5);width:100%;box-shadow:none;padding:0}.subsubsub a,.filter-links li>a{padding:10px 15px;display:inline-block;font-size:14px;margin:0;color:#016087;border-bottom:2px solid #fff;outline:none}.subsubsub a:focus,.filter-links li>a:focus{box-shadow:0 0 0 1px #016087,0 0 2px 1px #6f93ad}.subsubsub a:hover,.filter-links li>a:hover{color:#23354b;background-color:#f3f5f6}.subsubsub a:hover:not(.current),.filter-links li>a:hover:not(.current){border-color:#f3f5f6}.filter-links li>a{padding:16px}.subsubsub a.current,.filter-links .current{border-bottom:2px solid #3d4145}.count{display:inline-block;padding:1px 6px;border:solid 1px #969ca1;border-radius:12px;font-size:11px;font-weight:bold;line-height:14px;color:#636d75;text-align:center;margin-left:2px}.plugins-php .plugins a{color:#016087}.plugins-php .plugins a:hover,.plugins-php .plugins a:focus{color:#23354b}.plugins-php .plugins a:focus{box-shadow:0 0 0 1px #016087,0 0 2px 1px #6f93ad}.plugins-php .plugins a.delete{color:#eb0001}.plugins-php .plugins a.delete:hover,.plugins-php .plugins a.delete:focus{color:#ac120b}.plugins-php .plugins a.delete:focus{box-shadow:0 0 0 1px #eb0001,0 0 2px 1px #ff8248}.plugins-php .tablenav{clear:none;float:left;margin-bottom:15px}.plugins-php .tablenav .one-page .displaying-num{display:none}.plugins-php .bulkactions select:focus{border-color:#016087;box-shadow:0 0 2px #6f93ad}.plugins-php p.search-box{margin-top:5px}.plugins-php p.search-box .wp-filter-search:focus{border-color:#016087;box-shadow:0 0 2px #6f93ad}.plugins-php .plugins .active th{border-left:4px solid #016087}.plugins-php .plugins .active th,.plugins-php .plugins .active td{background-color:#f3f5f6}.wrap .wp-heading-inline+.page-title-action,.wrap .add-new-h2,.wrap .add-new-h2:active,.wrap .page-title-action,.wrap .page-title-action:active{background:#d52c82;border-color:#992053;color:#fff;border-style:solid;border-width:1px 1px 2px;cursor:pointer;display:inline-block;margin:0 5px 0 0;outline:0;overflow:hidden;font-weight:500;text-overflow:ellipsis;text-decoration:none;vertical-align:middle;box-sizing:border-box;font-size:13px;line-height:21px;border-radius:4px;padding:2px 10px 2px;margin-bottom:2px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.wrap .wp-heading-inline+.page-title-action:hover,.wrap .add-new-h2:hover,.wrap .add-new-h2:active:hover,.wrap .page-title-action:hover,.wrap .page-title-action:active:hover{background-color:#ff3997}.wrap .wp-heading-inline+.page-title-action:focus,.wrap .add-new-h2:focus,.wrap .add-new-h2:active:focus,.wrap .page-title-action:focus,.wrap .page-title-action:active:focus{box-shadow:0 0 0 2px #ff76b8;background-color:#ff3997}.wp-core-ui .button{background:#fff}.wp-core-ui .button:focus{border-color:#016087;box-shadow:0 0 3px #6f93ad}.wp-core-ui .button-primary{background:#016087;border-color:#23354b;color:#fff;text-shadow:none}.wp-core-ui .button-primary:hover,.wp-core-ui .button-primary:focus{background-color:#46799a}.ui-tabs-nav li,.wp-switch-editor{background-color:#f6f6f6 !important}.plugin-card a,.popular-tags a,.filter-links>li>a{color:#016087}.plugin-card a:hover,.plugin-card a:focus,.popular-tags a:hover,.popular-tags a:focus,.filter-links>li>a:hover,.filter-links>li>a:focus{color:#23354b}.plugin-card a:focus,.popular-tags a:focus,.filter-links>li>a:focus{box-shadow:0 0 0 1px #016087,0 0 2px 1px #6f93ad}.plugin-card-bottom,.alternate,.striped>tbody>:nth-child(odd),ul.striped>:nth-child(odd),.ui-tabs-panel,.ui-tabs-nav li.ui-tabs-active,.ui-tabs-nav li.ui-tabs-active:hover,div.mce-toolbar-grp,.html-active .switch-html,.tmce-active .switch-tmce,#post-status-info,.quicktags-toolbar,#major-publishing-actions{background-color:#fff;border-color:#d7e1e9}.wp-filter .search-form{margin-right:10px}.form-toggle[type="checkbox"]{display:none}.form-toggle__switch{position:relative;display:inline-block;border-radius:12px;box-sizing:border-box;padding:2px;width:40px;height:24px;vertical-align:middle;align-self:flex-start;outline:0;cursor:pointer;transition:all .4s ease, box-shadow 0s}.form-toggle__switch:before,.form-toggle__switch:after{position:relative;display:block;content:"";width:20px;height:20px}.form-toggle__switch:after{left:0;border-radius:50%;background:#fff;transition:all .2s ease}.form-toggle__switch:before{display:none}.accessible-focus .form-toggle__switch:focus{box-shadow:0 0 0 2px #016087}.form-toggle__label{cursor:pointer}.is-disabled .form-toggle__label{cursor:default}.form-toggle__label .form-toggle__label-content{flex:0 1 100%;margin-left:12px}.accessible-focus .form-toggle:focus+.form-toggle__label .form-toggle__switch{box-shadow:0 0 0 2px #016087}.accessible-focus .form-toggle:focus:checked+.form-toggle__label .form-toggle__switch{box-shadow:0 0 0 2px #6f93ad}.form-toggle+.form-toggle__label .form-toggle__switch{background:#b0b5b8}.form-toggle:not(:disabled)+.form-toggle__label:hover .form-toggle__switch{background:#ccced0}.form-toggle:checked+.form-toggle__label .form-toggle__switch{background:#016087}.form-toggle:checked+.form-toggle__label .form-toggle__switch:after{left:16px}.form-toggle:checked:not(:disabled)+.form-toggle__label:hover .form-toggle__switch{background:#6f93ad}.form-toggle:disabled+label.form-toggle__label span.form-toggle__switch{opacity:0.25;cursor:default}.form-toggle.is-toggling+.form-toggle__label .form-toggle__switch{background:#016087}.form-toggle.is-toggling:checked+.form-toggle__label .form-toggle__switch{background:#ccced0}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch{border-radius:8px;width:24px;height:16px}.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:before,.form-toggle.is-compact+.form-toggle__label .form-toggle__switch:after{width:12px;height:12px}.form-toggle.is-compact:checked+.form-toggle__label .form-toggle__switch:after{left:8px}
diff --git a/plugins/jetpack/modules/carousel.php b/plugins/jetpack/modules/carousel.php
deleted file mode 100644
index fda08752..00000000
--- a/plugins/jetpack/modules/carousel.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-
-/**
- * Module Name: Carousel
- * Module Description: Display images and galleries in a gorgeous, full-screen browsing experience
- * Sort Order: 22
- * Recommendation Order: 12
- * First Introduced: 1.5
- * Requires Connection: No
- * Auto Activate: No
- * Module Tags: Photos and Videos
- * Feature: Appearance
- * Additional Search Queries: gallery, carousel, diaporama, slideshow, images, lightbox, exif, metadata, image
- */
-
-include dirname( __FILE__ ) . '/carousel/jetpack-carousel.php';
diff --git a/plugins/jetpack/modules/carousel/images/arrows-2x.png b/plugins/jetpack/modules/carousel/images/arrows-2x.png
deleted file mode 100644
index 01214f2e..00000000
--- a/plugins/jetpack/modules/carousel/images/arrows-2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/carousel/images/arrows.png b/plugins/jetpack/modules/carousel/images/arrows.png
deleted file mode 100644
index 9251dce1..00000000
--- a/plugins/jetpack/modules/carousel/images/arrows.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/carousel/images/carousel-likereblog-2x.png b/plugins/jetpack/modules/carousel/images/carousel-likereblog-2x.png
deleted file mode 100644
index 1dd594fe..00000000
--- a/plugins/jetpack/modules/carousel/images/carousel-likereblog-2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/carousel/images/carousel-likereblog.png b/plugins/jetpack/modules/carousel/images/carousel-likereblog.png
deleted file mode 100644
index e4cd0596..00000000
--- a/plugins/jetpack/modules/carousel/images/carousel-likereblog.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/carousel/images/carousel-link-2x.png b/plugins/jetpack/modules/carousel/images/carousel-link-2x.png
deleted file mode 100644
index 9939ecba..00000000
--- a/plugins/jetpack/modules/carousel/images/carousel-link-2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/carousel/images/carousel-link.png b/plugins/jetpack/modules/carousel/images/carousel-link.png
deleted file mode 100644
index 225348db..00000000
--- a/plugins/jetpack/modules/carousel/images/carousel-link.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/carousel/images/carousel-sprite-2x.png b/plugins/jetpack/modules/carousel/images/carousel-sprite-2x.png
deleted file mode 100644
index 85d0e3f3..00000000
--- a/plugins/jetpack/modules/carousel/images/carousel-sprite-2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/carousel/images/carousel-sprite.png b/plugins/jetpack/modules/carousel/images/carousel-sprite.png
deleted file mode 100644
index 41ad9c8d..00000000
--- a/plugins/jetpack/modules/carousel/images/carousel-sprite.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/carousel/jetpack-carousel-rtl.css b/plugins/jetpack/modules/carousel/jetpack-carousel-rtl.css
deleted file mode 100644
index bf71e026..00000000
--- a/plugins/jetpack/modules/carousel/jetpack-carousel-rtl.css
+++ /dev/null
@@ -1 +0,0 @@
-.jp-carousel-wrap *{line-height:inherit}.jp-carousel-overlay{background:#000}div.jp-carousel-fadeaway{background:-moz-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background:-webkit-gradient(linear,right bottom,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));position:fixed;bottom:0;z-index:2147483647;width:100%;height:15px}.jp-carousel-next-button span,.jp-carousel-previous-button span{background:url(../modules/carousel/images/arrows.png) no-repeat center center;background-size:200px 126px}.jp-carousel-msg{font-family:"Open Sans",sans-serif;font-style:normal;display:inline-block;line-height:19px;padding:11px 15px;font-size:14px;text-align:center;margin:25px 2px 0 20px;background-color:#fff;border-right:4px solid #ffba00;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){.jp-carousel-next-button span,.jp-carousel-previous-button span{background-image:url(../modules/carousel/images/arrows-2x.png)}}.jp-carousel-wrap{font-family:"Helvetica Neue",sans-serif!important}.jp-carousel-info{position:absolute;bottom:0;text-align:right!important;-webkit-font-smoothing:subpixel-antialiased!important}.jp-carousel-info ::selection{background:#68c9e8;color:#fff}.jp-carousel-info ::-moz-selection{background:#68c9e8;color:#fff}.jp-carousel-photo-info{position:relative;right:25%;width:50%}.jp-carousel-transitions .jp-carousel-photo-info{transition:.4s ease-out}.jp-carousel-info h2{background:100% 0!important;border:none!important;color:#999;display:block!important;font:normal 13px/1.25em "Helvetica Neue",sans-serif!important;letter-spacing:0!important;margin:7px 0 0 0!important;padding:10px 0 0!important;overflow:hidden;text-align:right;text-shadow:none!important;text-transform:none!important;-webkit-font-smoothing:subpixel-antialiased}.jp-carousel-next-button,.jp-carousel-previous-button{text-indent:-9999px;overflow:hidden;cursor:pointer}.jp-carousel-next-button span,.jp-carousel-previous-button span{position:absolute;top:0;bottom:0;width:82px;zoom:1;opacity:.2}.jp-carousel-transitions .jp-carousel-next-button span,.jp-carousel-transitions .jp-carousel-previous-button span{transition:.5s opacity ease-out}.jp-carousel-next-button:hover span,.jp-carousel-previous-button:hover span{opacity:.6}.jp-carousel-next-button span{background-position:-110px center;left:0}.jp-carousel-previous-button span{background-position:-10px center;right:0}.jp-carousel-buttons{margin:-18px -20px 15px;padding:8px 10px;border-bottom:1px solid #222;background:#222;text-align:center}div.jp-carousel-buttons a{border:none!important;color:#999;font:normal 11px/1.2em "Helvetica Neue",sans-serif!important;letter-spacing:0!important;padding:5px 0 5px 2px;text-decoration:none!important;text-shadow:none!important;vertical-align:middle;-webkit-font-smoothing:subpixel-antialiased}div.jp-carousel-buttons a:hover{color:#68c9e8;border:none!important}.jp-carousel-transitions div.jp-carousel-buttons a:hover{transition:none!important}.jp-carousel-next-button,.jp-carousel-previous-button,.jp-carousel-slide,.jp-carousel-slide img{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.jp-carousel-slide{position:fixed;width:0;bottom:0;background-color:#000;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px}.jp-carousel-transitions .jp-carousel-slide{transition:.3s ease-out}.jp-carousel-slide.selected{position:absolute!important;opacity:1}.jp-carousel-slide{opacity:.25}.jp-carousel-slide img{display:block;width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important;background:100% 0!important;border:none!important;padding:0!important;box-shadow:0 2px 8px rgba(0,0,0,.1);zoom:1}.jp-carousel-transitions .jp-carousel-slide{transition:opacity .4s linear}.jp-carousel-close-hint{color:#999;cursor:default;letter-spacing:0!important;padding:.35em 0 0;position:absolute;text-align:left;width:90%}.jp-carousel-transitions .jp-carousel-close-hint{transition:color .2s linear}.jp-carousel-close-hint span{cursor:pointer;background-color:#000;background-color:rgba(0,0,0,.8);display:inline-block;height:22px;font:400 24px/1 "Helvetica Neue",sans-serif!important;line-height:22px;margin:0 .4em 0 0;text-align:center;vertical-align:middle;width:22px;border-radius:4px}.jp-carousel-transitions .jp-carousel-close-hint span{transition:border-color .2s linear}.jp-carousel-close-hint:hover{cursor:default;color:#fff}.jp-carousel-close-hint:hover span{border-color:#fff}a.jp-carousel-image-download,div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{background:url(../modules/carousel/images/carousel-sprite.png?5) no-repeat;background-size:16px 200px}div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{margin:0 0 0 14px!important}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-color:#303030;padding-left:8px!important;border-radius:2px;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{margin:0 -12px 0 2px!important}div.jp-carousel-buttons a.jp-carousel-reblog,div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover{background-position:6px -36px;padding-left:auto!important;padding-right:26px!important;color:#999}div.jp-carousel-buttons a.jp-carousel-commentlink{background-position:100% -156px;padding-right:19px!important}div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover{cursor:default}div.jp-carousel-buttons a.jp-carousel-reblog:hover{background-position:6px -56px;color:#68c9e8}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (-o-min-device-pixel-ratio:3/2),only screen and (min--moz-device-pixel-ratio:1.5),only screen and (min-device-pixel-ratio:1.5){a.jp-carousel-image-download,div.jp-carousel-buttons a.jp-carousel-commentlink,div.jp-carousel-buttons a.jp-carousel-reblog{background-image:url(../modules/carousel/images/carousel-sprite-2x.png?5)}}div#carousel-reblog-box{background:#222;background:-moz-linear-gradient(bottom,#222,#333);background:-webkit-gradient(linear,right bottom,right top,from(#222),to(#333));padding:3px 0 0;display:none;margin:5px auto 0;border-radius:2px;box-shadow:0 0 20px rgba(0,0,0,.9);height:74px;width:565px}#carousel-reblog-box textarea{background:#999;font:13px/1.4 "Helvetica Neue",sans-serif!important;color:#444;padding:3px 6px;width:370px;height:48px;float:right;margin:6px 9px 0 9px;border:1px solid #666;box-shadow:inset -2px 2px 2px rgba(0,0,0,.2);border-radius:2px}#carousel-reblog-box textarea:focus{background:#ccc;color:#222}#carousel-reblog-box label{color:#aaa;font-size:11px;padding-left:2px;padding-right:2px;display:inline;font-weight:400}#carousel-reblog-box select{width:110px;padding:0;font-size:12px;font-family:"Helvetica Neue",sans-serif!important;background:#333;color:#eee;border:1px solid #444;margin-top:5px}#carousel-reblog-box .submit,#wrapper #carousel-reblog-box p.response{float:right;width:154px;padding-top:0;padding-right:1px;overflow:hidden;height:34px;margin:3px 2px 0 0!important}#wrapper #carousel-reblog-box p.response{font-size:13px;clear:none;padding-right:2px;height:34px;color:#aaa}#carousel-reblog-box input#carousel-reblog-submit,#jp-carousel-comment-form-button-submit{font:13px/24px "Helvetica Neue",sans-serif!important;margin-top:8px;padding:0 10px!important;border-radius:1em;height:24px;color:#333;cursor:pointer;font-weight:400;background:#aaa;background:-moz-linear-gradient(bottom,#aaa,#ccc);background:-webkit-gradient(linear,right bottom,right top,from(#aaa),to(#ccc));border:1px solid #444}#carousel-reblog-box input#carousel-reblog-submit:hover,#jp-carousel-comment-form-button-submit:hover{background:#ccc;background:-moz-linear-gradient(bottom,#ccc,#eee);background:-webkit-gradient(linear,right bottom,right top,from(#ccc),to(#eee))}#carousel-reblog-box .canceltext{color:#aaa;font-size:11px;line-height:24px}#carousel-reblog-box .canceltext a{color:#fff}.jp-carousel-titleanddesc{border-top:1px solid #222;color:#999;font-size:15px;padding-top:24px;margin-bottom:20px;font-weight:400}.jp-carousel-titleanddesc-title{font:300 1.5em/1.1 "Helvetica Neue",sans-serif!important;text-transform:none!important;color:#fff;margin:0 0 15px;padding:0}.jp-carousel-titleanddesc-desc p{color:#999;line-height:1.4;margin-bottom:.75em}.jp-carousel-comments p a,.jp-carousel-info h2 a,.jp-carousel-titleanddesc p a{color:#fff!important;border:none!important;text-decoration:underline!important;font-weight:400!important;font-style:normal!important}.jp-carousel-titleanddesc p b,.jp-carousel-titleanddesc p strong{font-weight:700;color:#999}.jp-carousel-titleanddesc p em,.jp-carousel-titleanddesc p i{font-style:italic;color:#999}.jp-carousel-comments p a:hover,.jp-carousel-info h2 a:hover,.jp-carousel-titleanddesc p a:hover{color:#68c9e8!important}.jp-carousel-titleanddesc p:empty{display:none}.jp-carousel-left-column-wrapper h1:after,.jp-carousel-left-column-wrapper h1:before,.jp-carousel-photo-info h1:after,.jp-carousel-photo-info h1:before{content:none!important}.jp-carousel-image-meta{background:#111;border:1px solid #222;color:#fff;font-size:13px;font:12px/1.4 "Helvetica Neue",sans-serif!important;overflow:hidden;padding:18px 20px;width:209px!important}.jp-carousel-image-meta h5,.jp-carousel-image-meta li{font-family:"Helvetica Neue",sans-serif!important;position:inherit!important;top:auto!important;left:auto!important;right:auto!important;bottom:auto!important;background:100% 0!important;border:none!important;font-weight:400!important;line-height:1.3em!important}.jp-carousel-image-meta ul{margin:0!important;padding:0!important;list-style:none!important}.jp-carousel-image-meta li{width:48%!important;display:inline-block!important;vertical-align:top!important;margin:0 0 15px 2%!important;color:#fff!important;font-size:13px!important}.jp-carousel-image-meta h5{color:#999!important;text-transform:uppercase!important;font-size:10px!important;margin:0 0 2px!important;letter-spacing:.1em!important}a.jp-carousel-image-download{padding-right:23px;display:inline-block;clear:both;color:#999;line-height:1;font-weight:400;font-size:13px;text-decoration:none;background-position:100% -82px}a.jp-carousel-image-download span.photo-size{font-size:11px;border-radius:1em;margin-right:2px;display:inline-block}a.jp-carousel-image-download span.photo-size-times{padding:0 2px 0 1px}a.jp-carousel-image-download:hover{background-position:100% -122px;color:#68c9e8;border:none!important}.jp-carousel-image-map{position:relative;margin:-20px -20px 20px;border-bottom:1px solid rgba(255,255,255,.17);height:154px}.jp-carousel-image-map img.gmap-main{border-top-right-radius:6px;border-left:1px solid rgba(255,255,255,.17)}.jp-carousel-image-map div.gmap-topright{width:94px;height:154px;position:absolute;top:0;left:0}.jp-carousel-image-map div.imgclip{overflow:hidden;border-top-left-radius:6px}.jp-carousel-image-map div.gmap-topright img{margin-right:-40px}.jp-carousel-image-map img.gmap-bottomright{position:absolute;top:96px;left:0}.jp-carousel-comments{font:15px/1.7 "Helvetica Neue",sans-serif!important;font-weight:400;background:none transparent}.jp-carousel-comments p a:active,.jp-carousel-comments p a:focus,.jp-carousel-comments p a:hover{color:#68c9e8!important}.jp-carousel-comment{background:none transparent;color:#999;margin-bottom:20px;clear:right;overflow:auto;width:100%}.jp-carousel-comment p{color:#999!important}.jp-carousel-comment .comment-author{font-size:13px;font-weight:400;padding:0;width:auto;display:inline;float:none;border:none;margin:0}.jp-carousel-comment .comment-author a{color:#fff}.jp-carousel-comment .comment-gravatar{float:right}.jp-carousel-comment .comment-content{border:none;margin-right:85px;padding:0}.jp-carousel-comment .avatar{margin:0 0 0 20px;border-radius:4px;border:none!important;padding:0!important;background-color:transparent!important}.jp-carousel-comment .comment-date{color:#999;margin-top:4px;font-size:11px;display:inline;float:left}#jp-carousel-comment-form{margin:0 0 10px!important;float:right;width:100%}textarea#jp-carousel-comment-form-comment-field{background:rgba(34,34,34,.9);border:1px solid #3a3a3a;color:#aaa;font:15px/1.4 "Helvetica Neue",sans-serif!important;width:100%;padding:10px 10px 5px;margin:0;float:none;height:147px;box-shadow:inset -2px 2px 2px rgba(0,0,0,.2);border-radius:3px;overflow:hidden;box-sizing:border-box}textarea#jp-carousel-comment-form-comment-field::-webkit-input-placeholder{color:#555}textarea#jp-carousel-comment-form-comment-field:focus{background:#ccc;color:#222}textarea#jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder{color:#aaa}#jp-carousel-comment-form-spinner{color:#fff;margin:22px 10px 0 0;display:block;width:20px;height:20px;float:right}#jp-carousel-comment-form-submit-and-info-wrapper{display:none;overflow:hidden;width:100%}#jp-carousel-comment-form-commenting-as input{background:rgba(34,34,34,.9);border:1px solid #3a3a3a;color:#aaa;font:13px/1.4 "Helvetica Neue",sans-serif!important;padding:3px 6px;float:right;box-shadow:inset -2px 2px 2px rgba(0,0,0,.2);border-radius:2px;width:285px}#jp-carousel-comment-form-commenting-as input:focus{background:#ccc;color:#222}#jp-carousel-comment-form-commenting-as p{font:400 13px/1.7 "Helvetica Neue",sans-serif!important;margin:22px 0 0;float:right}#jp-carousel-comment-form-commenting-as fieldset{float:right;border:none;margin:20px 0 0 0;padding:0}#jp-carousel-comment-form-commenting-as fieldset{clear:both}#jp-carousel-comment-form-commenting-as label{font:400 13px/1.7 "Helvetica Neue",sans-serif!important;margin:0 0 3px 20px;float:right;width:100px}#jp-carousel-comment-form-button-submit{margin-top:20px;float:left}#js-carousel-comment-form-container{margin-bottom:15px;overflow:auto;width:100%}#jp-carousel-comment-form-container{margin-bottom:15px;overflow:auto;width:100%}#jp-carousel-comment-post-results{display:none;overflow:auto;width:100%}#jp-carousel-comment-post-results span{display:block;text-align:center;margin-top:20px;width:100%;overflow:auto;padding:1em 0;box-sizing:border-box;background:rgba(0,0,0,.7);border-radius:2px;font:13px/1.4 "Helvetica Neue",sans-serif!important;border:1px solid rgba(255,255,255,.17);box-shadow:inset 0 0 5px 5px rgba(0,0,0,1)}.jp-carousel-comment-post-error{color:#df4926}#jp-carousel-comments-closed{display:none;color:#999}#jp-carousel-comments-loading{font:400 15px/1.7 "Helvetica Neue",sans-serif!important;display:none;color:#999;text-align:right;margin-bottom:20px}.jp-carousel-light .jp-carousel-overlay{background:#fff}.jp-carousel-light .jp-carousel-next-button:hover span,.jp-carousel-light .jp-carousel-previous-button:hover span{opacity:.8}.jp-carousel-light .jp-carousel-close-hint:hover,.jp-carousel-light .jp-carousel-titleanddesc div{color:#000!important}.jp-carousel-light .jp-carousel-comment .comment-author a,.jp-carousel-light .jp-carousel-comments p a,.jp-carousel-light .jp-carousel-info h2 a,.jp-carousel-light .jp-carousel-titleanddesc p a{color:#1e8cbe!important}.jp-carousel-light .jp-carousel-comment .comment-author a:hover,.jp-carousel-light .jp-carousel-comments p a:hover,.jp-carousel-light .jp-carousel-info h2 a:hover,.jp-carousel-light .jp-carousel-titleanddesc p a:hover{color:#f1831e!important}.jp-carousel-light .jp-carousel-comment,.jp-carousel-light .jp-carousel-comment p,.jp-carousel-light .jp-carousel-info h2,.jp-carousel-light .jp-carousel-titleanddesc,.jp-carousel-light .jp-carousel-titleanddesc p,.jp-carousel-light .jp-carousel-titleanddesc p b,.jp-carousel-light .jp-carousel-titleanddesc p em,.jp-carousel-light .jp-carousel-titleanddesc p i,.jp-carousel-light .jp-carousel-titleanddesc p strong,.jp-carousel-light div.jp-carousel-buttons a{color:#666}.jp-carousel-light .jp-carousel-buttons{border-bottom-color:#f0f0f0;background:#f5f5f5}.jp-carousel-light div.jp-carousel-buttons a:hover{text-decoration:none;color:#f1831e}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog,.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog:hover{background-position:4px -56px;padding-right:24px!important}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-color:#2ea2cc;color:#fff}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-commentlink{background-position:100% -176px}.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged{background-position:5px -36px}.jp-carousel-light div#carousel-reblog-box{background:#eee;background:-moz-linear-gradient(bottom,#ececec,#f7f7f7);background:-webkit-gradient(linear,right bottom,right top,from(#ececec),to(#f7f7f7));box-shadow:0 2px 10px rgba(0,0,0,.1);border:1px solid #ddd}.jp-carousel-light #carousel-reblog-box textarea{border:1px inset #ccc;color:#666;border:1px solid #cfcfcf;background:#fff}.jp-carousel-light #carousel-reblog-box .canceltext{color:#888}.jp-carousel-light #carousel-reblog-box .canceltext a{color:#666}.jp-carousel-light #carousel-reblog-box select{background:#eee;color:#333;border:1px solid #aaa}#jp-carousel-comment-form-button-submit,.jp-carousel-light #carousel-reblog-box input#carousel-reblog-submit{color:#333;background:#fff;background:-moz-linear-gradient(bottom,#ddd,#fff);background:-webkit-gradient(linear,right bottom,right top,from(#ddd),to(#fff));border:1px solid #aaa}.jp-carousel-light .jp-carousel-image-meta{background:#fafafa;border:1px solid #eee;border-top-color:#f5f5f5;border-right-color:#f5f5f5;color:#333}.jp-carousel-light .jp-carousel-image-meta li{color:#000!important}.jp-carousel-light .jp-carousel-close-hint{color:#ccc}.jp-carousel-light .jp-carousel-close-hint span{background-color:#fff;border-color:#ccc}.jp-carousel-light #jp-carousel-comment-form-comment-field::-webkit-input-placeholder{color:#aaa}.jp-carousel-light #jp-carousel-comment-form-comment-field:focus{color:#333}.jp-carousel-light #jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder{color:#ddd}.jp-carousel-light a.jp-carousel-image-download{background-position:100% -122px}.jp-carousel-light a.jp-carousel-image-download:hover{background-position:100% -122px;color:#f1831e}.jp-carousel-light textarea#jp-carousel-comment-form-comment-field{background:#fbfbfb;color:#333;border:1px solid #dfdfdf;box-shadow:inset -2px 2px 2px rgba(0,0,0,.1)}.jp-carousel-light #jp-carousel-comment-form-commenting-as input{background:#fbfbfb;border:1px solid #dfdfdf;color:#333;box-shadow:inset -2px 2px 2px rgba(0,0,0,.1)}.jp-carousel-light #jp-carousel-comment-form-commenting-as input:focus{background:#fbfbfb;color:#333}.jp-carousel-light #jp-carousel-comment-post-results span{background:#f7f7f7;border:1px solid #dfdfdf;box-shadow:inset 0 0 5px rgba(0,0,0,.05)}.jp-carousel-light .jp-carousel-slide{background-color:#fff}.jp-carousel-light .jp-carousel-titleanddesc{border-top:1px solid #eee}.jp-carousel-light .jp-carousel-fadeaway{background:-moz-linear-gradient(bottom,rgba(255,255,255,.75),rgba(255,255,255,0));background:-webkit-gradient(linear,right bottom,right top,from(rgba(255,255,255,.75)),to(rgba(255,255,255,0)))}@media only screen and (max-width:760px){.jp-carousel-info{margin:0 10px!important}.jp-carousel-next-button,.jp-carousel-previous-button{display:none!important}.jp-carousel-buttons{display:none!important}.jp-carousel-image-meta{float:none!important;width:100%!important;box-sizing:border-box}.jp-carousel-close-hint{font-weight:800!important;font-size:26px!important;position:fixed!important;top:-10px}.jp-carousel-slide img{opacity:1}.jp-carousel-wrap{background-color:#000}.jp-carousel-fadeaway{display:none}#jp-carousel-comment-form-container{display:none!important}.jp-carousel-titleanddesc{padding-top:0!important;border:none!important}.jp-carousel-titleanddesc-title{font-size:1em!important}.jp-carousel-left-column-wrapper{padding:0;width:100%!important}.jp-carousel-photo-info{right:0!important;width:100%!important}} \ No newline at end of file
diff --git a/plugins/jetpack/modules/carousel/jetpack-carousel.css b/plugins/jetpack/modules/carousel/jetpack-carousel.css
deleted file mode 100644
index 6eb89bac..00000000
--- a/plugins/jetpack/modules/carousel/jetpack-carousel.css
+++ /dev/null
@@ -1,1129 +0,0 @@
-.jp-carousel-wrap * {
- line-height:inherit; /* prevent declarations of line-height in the universal selector */
-}
-
-.jp-carousel-overlay {
- background: #000;
-}
-
-div.jp-carousel-fadeaway {
- background: -moz-linear-gradient(bottom, rgba(0,0,0,0.5), rgba(0,0,0,0));
- background: -webkit-gradient(linear, left bottom, left top, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0)));
- position: fixed;
- bottom: 0;
- z-index: 2147483647;
- width: 100%;
- height: 15px;
-}
-
-.jp-carousel-next-button span,
-.jp-carousel-previous-button span {
- background: url(./images/arrows.png) no-repeat center center;
- background-size: 200px 126px;
-}
-
-.jp-carousel-msg {
- font-family: "Open Sans", sans-serif;
- font-style: normal;
- display: inline-block;
- line-height: 19px;
- padding: 11px 15px;
- font-size: 14px;
- text-align: center;
- margin: 25px 20px 0 2px;
- background-color: #fff;
- border-left: 4px solid #ffba00;
- -webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
- box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
-}
-
-@media
-only screen and (-webkit-min-device-pixel-ratio: 1.5),
-only screen and (-o-min-device-pixel-ratio: 3/2),
-only screen and (min--moz-device-pixel-ratio: 1.5),
-only screen and (min-device-pixel-ratio: 1.5) {
- .jp-carousel-next-button span,
- .jp-carousel-previous-button span {
- background-image: url(./images/arrows-2x.png);
- }
-}
-
-.jp-carousel-wrap {
- font-family: "Helvetica Neue", sans-serif !important;
-}
-
-.jp-carousel-info {
- position: absolute;
- bottom: 0;
- text-align: left !important;
- -webkit-font-smoothing: subpixel-antialiased !important;
-}
-
-.jp-carousel-info ::selection {
- background: #68c9e8; /* Safari */
- color: #fff;
- }
-
-.jp-carousel-info ::-moz-selection {
- background: #68c9e8; /* Firefox */
- color: #fff;
-}
-
-.jp-carousel-photo-info {
- position: relative;
- left: 25%;
- width: 50%;
-}
-
-.jp-carousel-transitions .jp-carousel-photo-info {
- -webkit-transition: 400ms ease-out;
- -moz-transition: 400ms ease-out;
- -o-transition: 400ms ease-out;
- transition: 400ms ease-out;
-}
-
-.jp-carousel-info h2 {
- background: none !important;
- border: none !important;
- color: #999;
- display: block !important;
- font: normal 13px/1.25em "Helvetica Neue", sans-serif !important;
- letter-spacing: 0 !important;
- margin: 7px 0 0 0 !important;
- padding: 10px 0 0 !important;
- overflow: hidden;
- text-align: left;
- text-shadow: none !important;
- text-transform: none !important;
- -webkit-font-smoothing: subpixel-antialiased;
-}
-
-.jp-carousel-next-button,
-.jp-carousel-previous-button {
- text-indent: -9999px;
- overflow: hidden;
- cursor: pointer;
-}
-
-.jp-carousel-next-button span,
-.jp-carousel-previous-button span {
- position: absolute;
- top: 0;
- bottom: 0;
- width: 82px;
- zoom: 1;
- filter: alpha(opacity=20);
- opacity: 0.2;
-}
-
-.jp-carousel-transitions .jp-carousel-next-button span,
-.jp-carousel-transitions .jp-carousel-previous-button span {
- -webkit-transition: 500ms opacity ease-out;
- -moz-transition: 500ms opacity ease-out;
- -o-transition: 500ms opacity ease-out;
- transition: 500ms opacity ease-out;
-}
-
-.jp-carousel-next-button:hover span,
-.jp-carousel-previous-button:hover span {
- filter: alpha(opacity=60);
- opacity: 0.6;
-}
-.jp-carousel-next-button span {
- background-position: -110px center;
- right: 0;
-}
-
-.jp-carousel-previous-button span {
- background-position: -10px center;
- left:0;
-}
-
-.jp-carousel-buttons {
- margin:-18px -20px 15px;
- padding:8px 10px;
- border-bottom:1px solid #222;
- background: #222;
- text-align: center;
-}
-
-div.jp-carousel-buttons a {
- border: none !important;
- color: #999;
- font: normal 11px/1.2em "Helvetica Neue", sans-serif !important;
- letter-spacing: 0 !important;
- padding: 5px 2px 5px 0;
- text-decoration: none !important;
- text-shadow: none !important;
- vertical-align: middle;
- -webkit-font-smoothing: subpixel-antialiased;
-}
-
-div.jp-carousel-buttons a:hover {
- color: #68c9e8;
- border: none !important;
-}
-
-.jp-carousel-transitions div.jp-carousel-buttons a:hover {
- -webkit-transition: none !important;
- -moz-transition: none !important;
- -o-transition: none !important;
- transition: none !important;
-}
-
-.jp-carousel-slide, .jp-carousel-slide img, .jp-carousel-next-button,
-.jp-carousel-previous-button {
- -webkit-transform:translate3d(0, 0, 0);
- -moz-transform:translate3d(0, 0, 0);
- -o-transform:translate3d(0, 0, 0);
- -ms-transform:translate3d(0, 0, 0);
-}
-
-.jp-carousel-slide {
- position:fixed;
- width:0;
- bottom:0;
- background-color:#000;
- border-radius:2px;
- -webkit-border-radius:2px;
- -moz-border-radius:2px;
- -ms-border-radius:2px;
- -o-border-radius:2px;
-}
-
-.jp-carousel-transitions .jp-carousel-slide {
- -webkit-transition: 300ms ease-out;
- -moz-transition: 300ms ease-out;
- -o-transition: 300ms ease-out;
- transition: 300ms ease-out;
-}
-
-.jp-carousel-slide.selected {
- position: absolute !important;
- filter: alpha(opacity=100);
- opacity: 1;
-}
-
-.jp-carousel-slide {
- filter: alpha(opacity=25);
- opacity: 0.25;
-}
-
-.jp-carousel-slide img {
- display: block;
- width: 100% !important;
- height: 100% !important;
- max-width: 100% !important;
- max-height: 100% !important;
- background: none !important;
- border: none !important;
- padding: 0 !important;
- -webkit-box-shadow: 0 2px 8px rgba(0,0,0,0.1);
- -moz-box-shadow: 0 2px 8px rgba(0,0,0,0.1);
- box-shadow: 0 2px 8px rgba(0,0,0,0.1);
- zoom: 1;
-}
-
-.jp-carousel-transitions .jp-carousel-slide {
- -webkit-transition: opacity 400ms linear;
- -moz-transition: opacity 400ms linear;
- -o-transition: opacity 400ms linear;
- transition: opacity 400ms linear;
-}
-
-.jp-carousel-close-hint {
- color: #999;
- cursor: default;
- letter-spacing: 0 !important;
- padding:0.35em 0 0;
- position: absolute;
- text-align: right;
- width: 90%;
-}
-
-.jp-carousel-transitions .jp-carousel-close-hint {
- -webkit-transition: color 200ms linear;
- -moz-transition: color 200ms linear;
- -o-transition: color 200ms linear;
- transition: color 200ms linear;
-}
-
-.jp-carousel-close-hint span {
- cursor: pointer;
- background-color: black;
- background-color: rgba(0,0,0,0.8);
- display: inline-block;
- height: 22px;
- font: 400 24px/1 "Helvetica Neue", sans-serif !important;
- line-height: 22px;
- margin: 0 0 0 0.4em;
- text-align: center;
- vertical-align: middle;
- width: 22px;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
-}
-
-.jp-carousel-transitions .jp-carousel-close-hint span {
- -webkit-transition: border-color 200ms linear;
- -moz-transition: border-color 200ms linear;
- -o-transition: border-color 200ms linear;
- transition: border-color 200ms linear;
-}
-
-.jp-carousel-close-hint:hover {
- cursor: default;
- color: #fff;
-}
-
-.jp-carousel-close-hint:hover span {
- border-color: #fff;
-}
-
-div.jp-carousel-buttons a.jp-carousel-reblog,
-div.jp-carousel-buttons a.jp-carousel-commentlink,
-a.jp-carousel-image-download {
- background: url(./images/carousel-sprite.png?5) no-repeat;
- background-size: 16px 200px;
-}
-
-div.jp-carousel-buttons a.jp-carousel-reblog,
-div.jp-carousel-buttons a.jp-carousel-commentlink {
- margin: 0 14px 0 0 !important;
-}
-
-div.jp-carousel-buttons a.jp-carousel-reblog.reblogged {
- background-color: #303030;
- padding-right: 8px !important;
- border-radius: 2px;
- border-radius: 2px;
- -webkit-border-radius:2px;
- -moz-border-radius:2px;
- -ms-border-radius:2px;
- -o-border-radius:2px;
-}
-
-div.jp-carousel-buttons a.jp-carousel-reblog.reblogged {
- margin: 0 2px 0 -12px !important;
-}
-
-div.jp-carousel-buttons a.jp-carousel-reblog,
-div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover {
- background-position: 6px -36px;
- padding-right: auto !important;
- padding-left: 26px !important;
- color: #999;
-}
-
-div.jp-carousel-buttons a.jp-carousel-commentlink {
- background-position: 0px -156px;
- padding-left: 19px !important;
-}
-
-div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover {
- cursor: default;
-}
-
-div.jp-carousel-buttons a.jp-carousel-reblog:hover {
- background-position: 6px -56px;
- color: #68c9e8;
-}
-
-@media
-only screen and (-webkit-min-device-pixel-ratio: 1.5),
-only screen and (-o-min-device-pixel-ratio: 3/2),
-only screen and (min--moz-device-pixel-ratio: 1.5),
-only screen and (min-device-pixel-ratio: 1.5) {
- div.jp-carousel-buttons a.jp-carousel-reblog,
- div.jp-carousel-buttons a.jp-carousel-commentlink,
- a.jp-carousel-image-download {
- background-image: url(./images/carousel-sprite-2x.png?5);
- }
-}
-
-/* reblog */
-div#carousel-reblog-box {
- background: #222;
- background: -moz-linear-gradient(bottom, #222, #333);
- background: -webkit-gradient(linear, left bottom, left top, from(#222), to(#333));
- padding: 3px 0 0;
- display: none;
- margin: 5px auto 0;
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
- -webkit-box-shadow: 0 0 20px rgba(0,0,0,0.9);
- -moz-box-shadow: 0 0 20px rgba(0,0,0,0.9);
- box-shadow: 0 0 20px rgba(0,0,0,0.9);
- height: 74px;
- width: 565px;
-}
-
-#carousel-reblog-box textarea {
- background: #999;
- font: 13px/1.4 "Helvetica Neue", sans-serif !important;
- color: #444;
- padding: 3px 6px;
- width: 370px;
- height: 48px;
- float: left;
- margin: 6px 9px 0 9px;
- border: 1px solid #666;
- -webkit-box-shadow: inset 2px 2px 2px rgba(0,0,0,0.2);
- box-shadow: inset 2px 2px 2px rgba(0,0,0,0.2);
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
-}
-
-#carousel-reblog-box textarea:focus {
- background: #ccc;
- color: #222;
-}
-
-#carousel-reblog-box label {
- color: #aaa;
- font-size: 11px;
- padding-right: 2px;
- padding-left: 2px;
- display: inline;
- font-weight: normal;
-}
-
-#carousel-reblog-box select {
- width: 110px;
- padding: 0;
- font-size: 12px;
- font-family: "Helvetica Neue", sans-serif !important;
- background: #333;
- color: #eee;
- border: 1px solid #444;
- margin-top:5px;
-}
-
-#carousel-reblog-box .submit,
-#wrapper #carousel-reblog-box p.response {
- float: left;
- width: 154px;
- padding-top: 0;
- padding-left: 1px;
- overflow: hidden;
- height: 34px;
- margin:3px 0 0 2px !important;
-}
-
-#wrapper #carousel-reblog-box p.response {
- font-size: 13px;
- clear: none;
- padding-left: 2px;
- height: 34px;
- color: #aaa;
-}
-
-#carousel-reblog-box input#carousel-reblog-submit, #jp-carousel-comment-form-button-submit {
- font: 13px/24px "Helvetica Neue", sans-serif !important;
- margin-top: 8px;
- padding: 0 10px !important;
- border-radius: 1em;
- height: 24px;
- color: #333;
- cursor:pointer;
- font-weight: normal;
- background: #aaa;
- background: -moz-linear-gradient(bottom, #aaa, #ccc);
- background: -webkit-gradient(linear, left bottom, left top, from(#aaa), to(#ccc));
- border: 1px solid #444;
-}
-
-#carousel-reblog-box input#carousel-reblog-submit:hover, #jp-carousel-comment-form-button-submit:hover {
- background: #ccc;
- background: -moz-linear-gradient(bottom, #ccc, #eee);
- background: -webkit-gradient(linear, left bottom, left top, from(#ccc), to(#eee));
-}
-
-#carousel-reblog-box .canceltext {
- color: #aaa;
- font-size: 11px;
- line-height: 24px;
-}
-
-#carousel-reblog-box .canceltext a {
- color: #fff;
-}
-/* reblog end */
-
-
-/** Title and Desc Start **/
-.jp-carousel-titleanddesc {
- border-top: 1px solid #222;
- color: #999;
- font-size: 15px;
- padding-top: 24px;
- margin-bottom: 20px;
- font-weight:400;
-}
-.jp-carousel-titleanddesc-title {
- font: 300 1.5em/1.1 "Helvetica Neue", sans-serif !important;
- text-transform: none !important; /* prevents uppercase from leaking through */
- color: #fff;
- margin: 0 0 15px;
- padding:0;
-}
-
-.jp-carousel-titleanddesc-desc p {
- color: #999;
- line-height:1.4;
- margin-bottom: 0.75em;
-}
-
-.jp-carousel-titleanddesc p a,
-.jp-carousel-comments p a,
-.jp-carousel-info h2 a {
- color: #fff !important;
- border: none !important;
- text-decoration: underline !important;
- font-weight: normal !important;
- font-style: normal !important;
-}
-
-.jp-carousel-titleanddesc p strong,
-.jp-carousel-titleanddesc p b {
- font-weight: bold;
- color: #999;
-}
-
-.jp-carousel-titleanddesc p em,
-.jp-carousel-titleanddesc p i {
- font-style: italic;
- color: #999;
-}
-
-
-.jp-carousel-titleanddesc p a:hover,
-.jp-carousel-comments p a:hover,
-.jp-carousel-info h2 a:hover {
- color: #68c9e8 !important;
-}
-
-.jp-carousel-titleanddesc p:empty {
- display: none;
-}
-
-.jp-carousel-photo-info h1:before,
-.jp-carousel-photo-info h1:after,
-.jp-carousel-left-column-wrapper h1:before,
-.jp-carousel-left-column-wrapper h1:after {
- content:none !important;
-}
-/** Title and Desc End **/
-
-/** Meta Box Start **/
-.jp-carousel-image-meta {
- background: #111;
- border: 1px solid #222;
- color: #fff;
- font-size: 13px;
- font: 12px/1.4 "Helvetica Neue", sans-serif !important;
- overflow: hidden;
- padding: 18px 20px;
- width: 209px !important;
-}
-
-.jp-carousel-image-meta li,
-.jp-carousel-image-meta h5 {
- font-family: "Helvetica Neue", sans-serif !important;
- position: inherit !important;
- top: auto !important;
- right: auto !important;
- left: auto !important;
- bottom: auto !important;
- background: none !important;
- border: none !important;
- font-weight: 400 !important;
- line-height: 1.3em !important;
-}
-
-.jp-carousel-image-meta ul {
- margin: 0 !important;
- padding: 0 !important;
- list-style: none !important;
-}
-
-.jp-carousel-image-meta li {
- width: 48% !important;
- display: inline-block !important;
- vertical-align: top !important;
- margin: 0 2% 15px 0 !important;
- color: #fff !important;
- font-size:13px !important;
-}
-
-.jp-carousel-image-meta h5 {
- color: #999 !important;
- text-transform: uppercase !important;
- font-size:10px !important;
- margin:0 0 2px !important;
- letter-spacing: 0.1em !important;
-}
-
-a.jp-carousel-image-download {
- padding-left: 23px;
- display: inline-block;
- clear: both;
- color: #999;
- line-height: 1;
- font-weight: 400;
- font-size: 13px;
- text-decoration: none;
- background-position: 0 -82px;
-}
-
-a.jp-carousel-image-download span.photo-size {
- font-size: 11px;
- border-radius: 1em;
- margin-left: 2px;
- display: inline-block;
-}
-
-a.jp-carousel-image-download span.photo-size-times {
- padding: 0 1px 0 2px;
-}
-
-a.jp-carousel-image-download:hover {
- background-position: 0 -122px;
- color: #68c9e8;
- border: none !important;
-}
-
-/** Meta Box End **/
-
-/** GPS Map Start **/
-.jp-carousel-image-map {
- position: relative;
- margin: -20px -20px 20px;
- border-bottom: 1px solid rgba( 255, 255, 255, 0.17 );
- height: 154px;
-}
-
-.jp-carousel-image-map img.gmap-main {
- -moz-border-radius-topleft: 6px;
- border-top-left-radius: 6px;
- border-right: 1px solid rgba( 255, 255, 255, 0.17 );
-}
-.jp-carousel-image-map div.gmap-topright {
- width: 94px;
- height: 154px;
- position: absolute;
- top: 0;
- right: 0;
-}
-.jp-carousel-image-map div.imgclip {
- overflow: hidden;
- -moz-border-radius-topright: 6px;
- border-top-right-radius: 6px;
-}
-.jp-carousel-image-map div.gmap-topright img {
- margin-left: -40px;
-}
-.jp-carousel-image-map img.gmap-bottomright {
- position: absolute;
- top: 96px;
- right: 0;
-}
-
-/** Comments Start **/
-.jp-carousel-comments {
- font: 15px/1.7 "Helvetica Neue", sans-serif !important;
- font-weight: 400;
- background:none transparent;
-}
-
-.jp-carousel-comments p a:hover, .jp-carousel-comments p a:focus, .jp-carousel-comments p a:active {
- color: #68c9e8 !important;
-}
-
-.jp-carousel-comment {
- background:none transparent;
- color: #999;
- margin-bottom: 20px;
- clear:left;
- overflow: auto;
- width: 100%
-}
-
-.jp-carousel-comment p {
- color: #999 !important;
-}
-
-.jp-carousel-comment .comment-author {
- font-size: 13px;
- font-weight:400;
- padding:0;
- width:auto;
- display: inline;
- float:none;
- border:none;
- margin:0;
-}
-
-.jp-carousel-comment .comment-author a {
- color: #fff;
-}
-
-.jp-carousel-comment .comment-gravatar {
- float:left;
-}
-
-.jp-carousel-comment .comment-content {
- border:none;
- margin-left:85px;
- padding: 0;
-}
-
-.jp-carousel-comment .avatar {
- margin:0 20px 0 0;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
- border: none !important;
- padding: 0 !important;
- background-color: transparent !important;
-}
-
-.jp-carousel-comment .comment-date {
- color:#999;
- margin-top: 4px;
- font-size:11px;
- display: inline;
- float: right;
- /*clear: right;*/
-}
-
-#jp-carousel-comment-form {
- margin:0 0 10px !important;
- float: left;
- width: 100%;
-}
-
-textarea#jp-carousel-comment-form-comment-field {
- background: rgba(34,34,34,0.9);
- border: 1px solid #3a3a3a;
- color: #aaa;
- font: 15px/1.4 "Helvetica Neue", sans-serif !important;
- width: 100%;
- padding: 10px 10px 5px;
- margin: 0;
- float: none;
- height: 147px;
- -webkit-box-shadow: inset 2px 2px 2px rgba(0,0,0,0.2);
- box-shadow: inset 2px 2px 2px rgba(0,0,0,0.2);
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
- overflow: hidden;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-textarea#jp-carousel-comment-form-comment-field::-webkit-input-placeholder {
- color: #555;
-}
-
-textarea#jp-carousel-comment-form-comment-field:focus {
- background: #ccc;
- color: #222;
-}
-
-textarea#jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder {
- color: #aaa;
-}
-
-#jp-carousel-comment-form-spinner {
- color: #fff;
- margin:22px 0 0 10px;
- display: block;
- width: 20px;
- height: 20px;
- float: left;
-}
-
-#jp-carousel-comment-form-submit-and-info-wrapper {
- display: none;
- /*margin-bottom:15px;*/
- overflow: hidden;
- width: 100%
-}
-
-#jp-carousel-comment-form-commenting-as {
-}
-
-#jp-carousel-comment-form-commenting-as input {
- background: rgba(34,34,34,0.9);
- border: 1px solid #3a3a3a;
- color: #aaa;
- font: 13px/1.4 "Helvetica Neue", sans-serif !important;
- padding: 3px 6px;
- float: left;
- -webkit-box-shadow: inset 2px 2px 2px rgba(0,0,0,0.2);
- box-shadow: inset 2px 2px 2px rgba(0,0,0,0.2);
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
- width:285px;
-}
-
-#jp-carousel-comment-form-commenting-as input:focus {
- background: #ccc;
- color: #222;
-}
-
-#jp-carousel-comment-form-commenting-as p {
- font: 400 13px/1.7 "Helvetica Neue", sans-serif !important;
- margin:22px 0 0;
- float: left;
-}
-
-#jp-carousel-comment-form-commenting-as fieldset {
- float:left;
- border:none;
- margin:20px 0 0 0;
- padding:0;
-}
-
-#jp-carousel-comment-form-commenting-as fieldset {
- clear: both;
-}
-
-#jp-carousel-comment-form-commenting-as label {
- font: 400 13px/1.7 "Helvetica Neue", sans-serif !important;
- margin:0 20px 3px 0;
- float:left;
- width:100px;
-}
-
-#jp-carousel-comment-form-button-submit {
- margin-top: 20px;
- float:right;
-}
-
-#js-carousel-comment-form-container {
- margin-bottom:15px;
- overflow: auto;
- width: 100%;
-}
-
-#jp-carousel-comment-form-container {
- margin-bottom:15px;
- overflow: auto;
- width: 100%;
-}
-
-#jp-carousel-comment-post-results {
- display: none;
- overflow:auto;
- width:100%;
-}
-
-#jp-carousel-comment-post-results span {
- display:block;
- text-align: center;
- margin-top:20px;
- width: 100%;
- overflow: auto;
- padding: 1em 0;
- box-sizing: border-box;
- background: rgba( 0, 0, 0, 0.7 );
- border-radius: 2px;
- font: 13px/1.4 "Helvetica Neue", sans-serif !important;
- border: 1px solid rgba( 255, 255, 255, 0.17 );
- -webkit-box-shadow: inset 0px 0px 5px 5px rgba(0, 0, 0, 1);
- box-shadow: inset 0px 0px 5px 5px rgba(0, 0, 0, 1);
-}
-
-.jp-carousel-comment-post-error {
- color:#DF4926;
-}
-
-.jp-carousel-comment-post-success {
- /*color:#21759B;*/
-}
-
-#jp-carousel-comments-closed {
- display: none;
- color: #999;
-}
-
-#jp-carousel-comments-loading {
- font: 400 15px/1.7 "Helvetica Neue", sans-serif !important;
- display: none;
- color: #999;
- text-align: left;
- margin-bottom: 20px;
-}
-
-
-/* ----- Light variant ----- */
-
-.jp-carousel-light .jp-carousel-overlay {
- background: #fff;
-}
-
-.jp-carousel-light .jp-carousel-next-button:hover span,
-.jp-carousel-light .jp-carousel-previous-button:hover span {
- opacity: 0.8;
-}
-
-.jp-carousel-light .jp-carousel-close-hint:hover,
-.jp-carousel-light .jp-carousel-titleanddesc div {
- color: #000 !important;
-}
-
-.jp-carousel-light .jp-carousel-comments p a,
-.jp-carousel-light .jp-carousel-comment .comment-author a,
-.jp-carousel-light .jp-carousel-titleanddesc p a,
-.jp-carousel-light .jp-carousel-titleanddesc p a,
-.jp-carousel-light .jp-carousel-comments p a,
-.jp-carousel-light .jp-carousel-info h2 a {
- color: #1e8cbe !important;
-}
-
-.jp-carousel-light .jp-carousel-comments p a:hover,
-.jp-carousel-light .jp-carousel-comment .comment-author a:hover,
-.jp-carousel-light .jp-carousel-titleanddesc p a:hover,
-.jp-carousel-light .jp-carousel-titleanddesc p a:hover,
-.jp-carousel-light .jp-carousel-comments p a:hover,
-.jp-carousel-light .jp-carousel-info h2 a:hover {
- color: #f1831e !important;
-}
-
-.jp-carousel-light .jp-carousel-info h2,
-.jp-carousel-light .jp-carousel-titleanddesc,
-.jp-carousel-light .jp-carousel-titleanddesc p,
-.jp-carousel-light .jp-carousel-comment,
-.jp-carousel-light .jp-carousel-comment p,
-.jp-carousel-light div.jp-carousel-buttons a,
-.jp-carousel-light .jp-carousel-titleanddesc p strong,
-.jp-carousel-light .jp-carousel-titleanddesc p b,
-.jp-carousel-light .jp-carousel-titleanddesc p em,
-.jp-carousel-light .jp-carousel-titleanddesc p i {
- color: #666;
-}
-
-.jp-carousel-light .jp-carousel-buttons {
- border-bottom-color: #f0f0f0;
- background: #f5f5f5;
-}
-
-.jp-carousel-light div.jp-carousel-buttons a:hover {
- text-decoration: none;
- color: #f1831e;
-}
-
-.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog,
-.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog:hover {
- background-position: 4px -56px;
- padding-left: 24px !important;
-}
-
-.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged {
- background-color: #2ea2cc;
- color: #fff;
-}
-
-.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-commentlink {
- background-position: 0px -176px;
-}
-
-.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged {
- background-position: 5px -36px;
-}
-
-.jp-carousel-light div#carousel-reblog-box {
- background: #eee;
- background: -moz-linear-gradient(bottom, #ececec, #f7f7f7);
- background: -webkit-gradient(linear, left bottom, left top, from(#ececec), to(#f7f7f7));
- -webkit-box-shadow: 0 2px 6px rgba(0,0,0,0.1);
- -moz-box-shadow: 0 2px 10px rgba(0,0,0,0.1);
- box-shadow: 0 2px 10px rgba(0,0,0,0.1);
- border:1px solid #ddd;
-}
-
-.jp-carousel-light #carousel-reblog-box textarea {
- border: 1px inset #ccc;
- color: #666;
- border: 1px solid #cfcfcf;
- background: #fff;
-}
-
-.jp-carousel-light #carousel-reblog-box .canceltext {
- color: #888;
-}
-
-.jp-carousel-light #carousel-reblog-box .canceltext a {
- color: #666;
-}
-
-.jp-carousel-light #carousel-reblog-box select {
- background: #eee;
- color: #333;
- border: 1px solid #aaa;
-}
-
-.jp-carousel-light #carousel-reblog-box input#carousel-reblog-submit, #jp-carousel-comment-form-button-submit {
- color: #333;
- background: #fff;
- background: -moz-linear-gradient(bottom, #ddd, #fff);
- background: -webkit-gradient(linear, left bottom, left top, from(#ddd), to(#fff));
- border: 1px solid #aaa;
-}
-
-.jp-carousel-light .jp-carousel-image-meta {
- background: #fafafa;
- border: 1px solid #eee;
- border-top-color: #f5f5f5;
- border-left-color: #f5f5f5;
- color: #333;
-}
-
-.jp-carousel-light .jp-carousel-image-meta li {
- color: #000 !important;
-}
-
-.jp-carousel-light .jp-carousel-close-hint {
- color: #ccc;
-}
-
-.jp-carousel-light .jp-carousel-close-hint span {
- background-color: white;
- border-color: #ccc;
-}
-
-.jp-carousel-light #jp-carousel-comment-form-comment-field::-webkit-input-placeholder {
- color: #aaa;
-}
-
-.jp-carousel-light #jp-carousel-comment-form-comment-field:focus {
- color: #333;
-}
-
-.jp-carousel-light #jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder {
- color: #ddd;
-}
-
-.jp-carousel-light a.jp-carousel-image-download {
- background-position: 0 -122px;
-}
-
-.jp-carousel-light a.jp-carousel-image-download:hover {
- background-position: 0 -122px;
- color: #f1831e;
-}
-
-.jp-carousel-light textarea#jp-carousel-comment-form-comment-field {
- background: #fbfbfb;
- color: #333;
- border: 1px solid #dfdfdf;
- -webkit-box-shadow: inset 2px 2px 2px rgba(0,0,0,0.1);
- box-shadow: inset 2px 2px 2px rgba(0,0,0,0.1);
-}
-
-.jp-carousel-light #jp-carousel-comment-form-commenting-as input {
- background: #fbfbfb;
- border: 1px solid #dfdfdf;
- color: #333;
- -webkit-box-shadow: inset 2px 2px 2px rgba(0,0,0,0.1);
- box-shadow: inset 2px 2px 2px rgba(0,0,0,0.1);
-}
-
-.jp-carousel-light #jp-carousel-comment-form-commenting-as input:focus {
- background: #fbfbfb;
- color: #333;
-}
-
-.jp-carousel-light #jp-carousel-comment-post-results span {
- background: #f7f7f7;
- border:1px solid #dfdfdf;
- -webkit-box-shadow: inset 0px 0px 5px rgba(0, 0, 0, 0.05);
- box-shadow: inset 0px 0px 5px rgba(0, 0, 0, 0.05);
-}
-
-.jp-carousel-light .jp-carousel-slide {
- background-color:#fff;
-}
-
-.jp-carousel-light .jp-carousel-titleanddesc {
- border-top: 1px solid #eee;
-}
-
-.jp-carousel-light .jp-carousel-fadeaway {
- background: -moz-linear-gradient(bottom, rgba(255,255,255,0.75), rgba(255,255,255,0));
- background: -webkit-gradient(linear, left bottom, left top, from(rgba(255,255,255,0.75)), to(rgba(255,255,255,0)));
-}
-
-/* Small screens */
-@media only screen and (max-width: 760px) {
-
- .jp-carousel-info {
- margin: 0 10px !important;
- }
-
- .jp-carousel-next-button, .jp-carousel-previous-button {
- display: none !important;
- }
-
- .jp-carousel-buttons {
- display: none !important;
- }
-
- .jp-carousel-image-meta {
- float: none !important;
- width: 100% !important;
- -moz-box-sizing:border-box;
- -webkit-box-sizing:border-box;
- box-sizing: border-box;
- }
-
- .jp-carousel-close-hint {
- font-weight: 800 !important;
- font-size: 26px !important;
- position: fixed !important;
- top: -10px;
- }
-
- .jp-carousel-slide img {
- filter: alpha(opacity=100);
- opacity: 1;
- }
-
- .jp-carousel-wrap {
- background-color: #000;
- }
-
- .jp-carousel-fadeaway {
- display: none;
- }
-
- #jp-carousel-comment-form-container {
- display: none !important;
- }
-
- .jp-carousel-titleanddesc {
- padding-top: 0 !important;
- border: none !important;
- }
- .jp-carousel-titleanddesc-title {
- font-size: 1em !important;
- }
-
- .jp-carousel-left-column-wrapper {
- padding: 0;
- width: 100% !important;
- }
-
- .jp-carousel-photo-info {
- left: 0 !important;
- width: 100% !important;
- }
-}
diff --git a/plugins/jetpack/modules/carousel/jetpack-carousel.js b/plugins/jetpack/modules/carousel/jetpack-carousel.js
deleted file mode 100644
index d5cc8037..00000000
--- a/plugins/jetpack/modules/carousel/jetpack-carousel.js
+++ /dev/null
@@ -1,1609 +0,0 @@
-/* jshint sub: true, onevar: false, multistr: true, devel: true, smarttabs: true */
-/* global jetpackCarouselStrings, DocumentTouch */
-
-
-jQuery(document).ready(function($) {
-
- // gallery faded layer and container elements
- var overlay, comments, gallery, container, nextButton, previousButton, info, transitionBegin,
- caption, resizeTimeout, photo_info, close_hint, commentInterval, lastSelectedSlide,
- screenPadding = 110, originalOverflow = $('body').css('overflow'), originalHOverflow = $('html').css('overflow'), proportion = 85,
- last_known_location_hash = '', imageMeta, titleAndDescription, commentForm, leftColWrapper, scrollPos;
-
- if ( window.innerWidth <= 760 ) {
- screenPadding = Math.round( ( window.innerWidth / 760 ) * 110 );
-
- if ( screenPadding < 40 && ( ( 'ontouchstart' in window ) || window.DocumentTouch && document instanceof DocumentTouch ) ) {
- screenPadding = 0;
- }
- }
-
- // Adding a polyfill for browsers that do not have Date.now
- if ( 'undefined' === typeof Date.now ) {
- Date.now = function now() {
- return new Date().getTime();
- };
- }
-
- var keyListener = function(e){
- switch(e.which){
- case 38: // up
- e.preventDefault();
- container.scrollTop(container.scrollTop() - 100);
- break;
- case 40: // down
- e.preventDefault();
- container.scrollTop(container.scrollTop() + 100);
- break;
- case 39: // right
- e.preventDefault();
- gallery.jp_carousel('next');
- break;
- case 37: // left
- case 8: // backspace
- e.preventDefault();
- gallery.jp_carousel('previous');
- break;
- case 27: // escape
- e.preventDefault();
- container.jp_carousel('close');
- break;
- default:
- // making jslint happy
- break;
- }
- };
-
- var resizeListener = function(/*e*/){
- clearTimeout(resizeTimeout);
- resizeTimeout = setTimeout(function(){
- gallery
- .jp_carousel('slides')
- .jp_carousel('fitSlide', true);
- gallery.jp_carousel('updateSlidePositions', true);
- gallery.jp_carousel('fitMeta', true);
- }, 200);
- };
-
- var prepareGallery = function( /*dataCarouselExtra*/ ){
- if (!overlay) {
- overlay = $('<div></div>')
- .addClass('jp-carousel-overlay')
- .css({
- 'position' : 'fixed',
- 'top' : 0,
- 'right' : 0,
- 'bottom' : 0,
- 'left' : 0
- });
-
- var buttons = '<a class="jp-carousel-commentlink" href="#">' + jetpackCarouselStrings.comment + '</a>';
- if ( 1 === Number( jetpackCarouselStrings.is_logged_in ) ) {
- }
-
- buttons = $('<div class="jp-carousel-buttons">' + buttons + '</div>');
-
- caption = $('<h2 itemprop="caption description"></h2>');
- photo_info = $('<div class="jp-carousel-photo-info"></div>').append(caption);
-
- imageMeta = $('<div></div>')
- .addClass('jp-carousel-image-meta')
- .css({
- 'float' : 'right',
- 'margin-top' : '20px',
- 'width' : '250px'
- });
-
- imageMeta
- .append( buttons )
- .append( '<ul class=\'jp-carousel-image-exif\' style=\'display:none;\'></ul>' )
- .append( '<a class=\'jp-carousel-image-download\' style=\'display:none;\'></a>' )
- .append( '<div class=\'jp-carousel-image-map\' style=\'display:none;\'></div>' );
-
- titleAndDescription = $('<div></div>')
- .addClass('jp-carousel-titleanddesc')
- .css({
- 'width' : '100%',
- 'margin-top' : imageMeta.css('margin-top')
- });
-
- var commentFormMarkup = '<div id="jp-carousel-comment-form-container">';
-
- if ( jetpackCarouselStrings.local_comments_commenting_as && jetpackCarouselStrings.local_comments_commenting_as.length ) {
- // Comments not enabled, fallback to local comments
-
- if ( 1 !== Number( jetpackCarouselStrings.is_logged_in ) && 1 === Number( jetpackCarouselStrings.comment_registration ) ) {
- commentFormMarkup += '<div id="jp-carousel-comment-form-commenting-as">' + jetpackCarouselStrings.local_comments_commenting_as + '</div>';
- } else {
- commentFormMarkup += '<form id="jp-carousel-comment-form">';
- commentFormMarkup += '<textarea name="comment" class="jp-carousel-comment-form-field jp-carousel-comment-form-textarea" id="jp-carousel-comment-form-comment-field" placeholder="' + jetpackCarouselStrings.write_comment + '"></textarea>';
- commentFormMarkup += '<div id="jp-carousel-comment-form-submit-and-info-wrapper">';
- commentFormMarkup += '<div id="jp-carousel-comment-form-commenting-as">' + jetpackCarouselStrings.local_comments_commenting_as + '</div>';
- commentFormMarkup += '<input type="submit" name="submit" class="jp-carousel-comment-form-button" id="jp-carousel-comment-form-button-submit" value="'+jetpackCarouselStrings.post_comment+'" />';
- commentFormMarkup += '<span id="jp-carousel-comment-form-spinner">&nbsp;</span>';
- commentFormMarkup += '<div id="jp-carousel-comment-post-results"></div>';
- commentFormMarkup += '</div>';
- commentFormMarkup += '</form>';
- }
- }
- commentFormMarkup += '</div>';
-
- commentForm = $(commentFormMarkup)
- .css({
- 'width' : '100%',
- 'margin-top' : '20px',
- 'color' : '#999'
- });
-
- comments = $('<div></div>')
- .addClass('jp-carousel-comments')
- .css({
- 'width' : '100%',
- 'bottom' : '10px',
- 'margin-top' : '20px'
- });
-
- var commentsLoading = $('<div id="jp-carousel-comments-loading"><span>'+jetpackCarouselStrings.loading_comments+'</span></div>')
- .css({
- 'width' : '100%',
- 'bottom' : '10px',
- 'margin-top' : '20px'
- });
-
- var leftWidth = ( $(window).width() - ( screenPadding * 2 ) ) - (imageMeta.width() + 40);
- leftWidth += 'px';
-
- leftColWrapper = $('<div></div>')
- .addClass('jp-carousel-left-column-wrapper')
- .css({
- 'width' : Math.floor( leftWidth )
- })
- .append(titleAndDescription)
- .append(commentForm)
- .append(comments)
- .append(commentsLoading);
-
- var fadeaway = $('<div></div>')
- .addClass('jp-carousel-fadeaway');
-
- info = $('<div></div>')
- .addClass('jp-carousel-info')
- .css({
- 'top' : Math.floor( ($(window).height() / 100) * proportion ),
- 'left' : screenPadding,
- 'right' : screenPadding
- })
- .append(photo_info)
- .append(imageMeta);
-
- if ( window.innerWidth <= 760 ) {
- photo_info.remove().insertAfter( titleAndDescription );
- info.prepend( leftColWrapper );
- }
- else {
- info.append( leftColWrapper );
- }
-
- var targetBottomPos = ( $(window).height() - parseInt( info.css('top'), 10 ) ) + 'px';
-
- nextButton = $('<div><span></span></div>')
- .addClass('jp-carousel-next-button')
- .css({
- 'right' : '15px'
- })
- .hide();
-
- previousButton = $('<div><span></span></div>')
- .addClass('jp-carousel-previous-button')
- .css({
- 'left' : 0
- })
- .hide();
-
- nextButton.add( previousButton ).css( {
- 'position' : 'fixed',
- 'top' : '40px',
- 'bottom' : targetBottomPos,
- 'width' : screenPadding
- } );
-
- gallery = $('<div></div>')
- .addClass('jp-carousel')
- .css({
- 'position' : 'absolute',
- 'top' : 0,
- 'bottom' : targetBottomPos,
- 'left' : 0,
- 'right' : 0
- });
-
- close_hint = $('<div class="jp-carousel-close-hint"><span>&times;</span></div>')
- .css({
- position : 'fixed'
- });
-
- container = $('<div></div>')
- .addClass('jp-carousel-wrap')
- .addClass( 'jp-carousel-transitions' );
- if ( 'white' === jetpackCarouselStrings.background_color ) {
- container.addClass('jp-carousel-light');
- }
-
- container.attr('itemscope', '');
-
- container.attr('itemtype', 'https://schema.org/ImageGallery');
-
- container.css({
- 'position' : 'fixed',
- 'top' : 0,
- 'right' : 0,
- 'bottom' : 0,
- 'left' : 0,
- 'z-index' : 2147483647,
- 'overflow-x' : 'hidden',
- 'overflow-y' : 'auto',
- 'direction' : 'ltr'
- })
- .hide()
- .append(overlay)
- .append(gallery)
- .append(fadeaway)
- .append(info)
- .append(nextButton)
- .append(previousButton)
- .append(close_hint)
- .appendTo($('body'))
- .click(function(e){
- var target = $(e.target), wrap = target.parents('div.jp-carousel-wrap'), data = wrap.data('carousel-extra'),
- slide = wrap.find('div.selected'), attachment_id = slide.data('attachment-id');
- data = data || [];
-
- if ( target.is(gallery) || target.parents().add(target).is(close_hint) ) {
- container.jp_carousel('close');
- } else if ( target.hasClass('jp-carousel-commentlink') ) {
- e.preventDefault();
- e.stopPropagation();
- $(window).unbind('keydown', keyListener);
- container.animate({scrollTop: parseInt(info.position()['top'], 10)}, 'fast');
- $('#jp-carousel-comment-form-submit-and-info-wrapper').slideDown('fast');
- $('#jp-carousel-comment-form-comment-field').focus();
- } else if ( target.hasClass('jp-carousel-comment-login') ) {
- var url = jetpackCarouselStrings.login_url + '%23jp-carousel-' + attachment_id;
-
- window.location.href = url;
- } else if ( target.parents('#jp-carousel-comment-form-container').length ) {
- var textarea = $('#jp-carousel-comment-form-comment-field')
- .blur(function(){
- $(window).bind('keydown', keyListener);
- })
- .focus(function(){
- $(window).unbind('keydown', keyListener);
- });
-
- var emailField = $('#jp-carousel-comment-form-email-field')
- .blur(function(){
- $(window).bind('keydown', keyListener);
- })
- .focus(function(){
- $(window).unbind('keydown', keyListener);
- });
-
- var authorField = $('#jp-carousel-comment-form-author-field')
- .blur(function(){
- $(window).bind('keydown', keyListener);
- })
- .focus(function(){
- $(window).unbind('keydown', keyListener);
- });
-
- var urlField = $('#jp-carousel-comment-form-url-field')
- .blur(function(){
- $(window).bind('keydown', keyListener);
- })
- .focus(function(){
- $(window).unbind('keydown', keyListener);
- });
-
- if ( textarea && textarea.attr('id') === target.attr('id')) {
- // For first page load
- $(window).unbind('keydown', keyListener);
- $('#jp-carousel-comment-form-submit-and-info-wrapper').slideDown('fast');
- } else if ( target.is( 'input[type="submit"]' ) ) {
- e.preventDefault();
- e.stopPropagation();
-
- $('#jp-carousel-comment-form-spinner').spin('small', 'white');
-
- var ajaxData = {
- action: 'post_attachment_comment',
- nonce: jetpackCarouselStrings.nonce,
- blog_id: data['blog_id'],
- id: attachment_id,
- comment: textarea.val()
- };
-
- if ( ! ajaxData['comment'].length ) {
- gallery.jp_carousel('postCommentError', {'field': 'jp-carousel-comment-form-comment-field', 'error': jetpackCarouselStrings.no_comment_text});
- return;
- }
-
- if ( 1 !== Number( jetpackCarouselStrings.is_logged_in ) ) {
- ajaxData['email'] = emailField.val();
- ajaxData['author'] = authorField.val();
- ajaxData['url'] = urlField.val();
-
- if ( 1 === Number( jetpackCarouselStrings.require_name_email ) ) {
- if ( ! ajaxData['email'].length || ! ajaxData['email'].match('@') ) {
- gallery.jp_carousel('postCommentError', {'field': 'jp-carousel-comment-form-email-field', 'error': jetpackCarouselStrings.no_comment_email});
- return;
- } else if ( ! ajaxData['author'].length ) {
- gallery.jp_carousel('postCommentError', {'field': 'jp-carousel-comment-form-author-field', 'error': jetpackCarouselStrings.no_comment_author});
- return;
- }
- }
- }
-
- $.ajax({
- type: 'POST',
- url: jetpackCarouselStrings.ajaxurl,
- data: ajaxData,
- dataType: 'json',
- success: function(response/*, status, xhr*/) {
- if ( 'approved' === response.comment_status ) {
- $('#jp-carousel-comment-post-results').slideUp('fast').html('<span class="jp-carousel-comment-post-success">' + jetpackCarouselStrings.comment_approved + '</span>').slideDown('fast');
- } else if ( 'unapproved' === response.comment_status ) {
- $('#jp-carousel-comment-post-results').slideUp('fast').html('<span class="jp-carousel-comment-post-success">' + jetpackCarouselStrings.comment_unapproved + '</span>').slideDown('fast');
- } else {
- // 'deleted', 'spam', false
- $('#jp-carousel-comment-post-results').slideUp('fast').html('<span class="jp-carousel-comment-post-error">' + jetpackCarouselStrings.comment_post_error + '</span>').slideDown('fast');
- }
- gallery.jp_carousel('clearCommentTextAreaValue');
- gallery.jp_carousel('getComments', {attachment_id: attachment_id, offset: 0, clear: true});
- $('#jp-carousel-comment-form-button-submit').val(jetpackCarouselStrings.post_comment);
- $('#jp-carousel-comment-form-spinner').spin(false);
- },
- error: function(/*xhr, status, error*/) {
- // TODO: Add error handling and display here
- gallery.jp_carousel('postCommentError', {'field': 'jp-carousel-comment-form-comment-field', 'error': jetpackCarouselStrings.comment_post_error});
- return;
- }
- });
- }
- } else if ( ! target.parents( '.jp-carousel-info' ).length ) {
- container.jp_carousel('next');
- }
- })
- .bind('jp_carousel.afterOpen', function(){
- $(window).bind('keydown', keyListener);
- $(window).bind('resize', resizeListener);
- gallery.opened = true;
-
- resizeListener();
- })
- .bind('jp_carousel.beforeClose', function(){
- var scroll = $(window).scrollTop();
-
- $(window).unbind('keydown', keyListener);
- $(window).unbind('resize', resizeListener);
- $(window).scrollTop(scroll);
- $( '.jp-carousel-previous-button' ).hide();
- $( '.jp-carousel-next-button' ).hide();
- })
- .bind('jp_carousel.afterClose', function(){
- if ( window.location.hash && history.back ) {
- history.back();
- }
- last_known_location_hash = '';
- gallery.opened = false;
- })
- .on( 'transitionend.jp-carousel ', '.jp-carousel-slide', function ( e ) {
- // If the movement transitions take more than twice the allotted time, disable them.
- // There is some wiggle room in the 2x, since some of that time is taken up in
- // JavaScript, setting up the transition and calling the events.
- if ( 'transform' === e.originalEvent.propertyName ) {
- var transitionMultiplier = ( ( Date.now() - transitionBegin ) / 1000 ) / e.originalEvent.elapsedTime;
-
- container.off( 'transitionend.jp-carousel' );
-
- if ( transitionMultiplier >= 2 ) {
- $( '.jp-carousel-transitions' ).removeClass( 'jp-carousel-transitions' );
- }
- }
- } );
-
- $( '.jp-carousel-wrap' ).touchwipe( {
- wipeLeft : function ( e ) {
- e.preventDefault();
- gallery.jp_carousel( 'next' );
- },
- wipeRight : function ( e ) {
- e.preventDefault();
- gallery.jp_carousel( 'previous' );
- },
- preventDefaultEvents : false
- } );
-
- nextButton.add(previousButton).click(function(e){
- e.preventDefault();
- e.stopPropagation();
- if ( nextButton.is(this) ) {
- gallery.jp_carousel('next');
- } else {
- gallery.jp_carousel('previous');
- }
- });
- }
- };
-
- var processSingleImageGallery = function() {
- // process links that contain img tag with attribute data-attachment-id
- $( 'a img[data-attachment-id]' ).each(function() {
- var container = $( this ).parent();
-
- // skip if image was already added to gallery by shortcode
- if( container.parent( '.gallery-icon' ).length ) {
- return;
- }
-
- // skip if the container is not a link
- if ( 'undefined' === typeof( $( container ).attr( 'href' ) ) ) {
- return;
- }
-
- var valid = false;
-
- // if link points to 'Media File' (ignoring GET parameters) and flag is set allow it
- if ( $( container ).attr( 'href' ).split( '?' )[0] === $( this ).attr( 'data-orig-file' ).split( '?' )[0] &&
- 1 === Number( jetpackCarouselStrings.single_image_gallery_media_file )
- ) {
- valid = true;
- }
-
- // if link points to 'Attachment Page' allow it
- if( $( container ).attr( 'href' ) === $( this ).attr( 'data-permalink' ) ) {
- valid = true;
- }
-
- // links to 'Custom URL' or 'Media File' when flag not set are not valid
- if( ! valid ) {
- return;
- }
-
- // make this node a gallery recognizable by event listener above
- $( container ).addClass( 'single-image-gallery' ) ;
- // blog_id is needed to allow posting comments to correct blog
- $( container ).data( 'carousel-extra', { blog_id: Number( jetpackCarouselStrings.blog_id ) } );
- });
- };
-
- var methods = {
- testForData: function(gallery) {
- gallery = $( gallery ); // make sure we have it as a jQuery object.
- return !( ! gallery.length || ! gallery.data( 'carousel-extra' ) );
- },
-
- testIfOpened: function() {
- return !!( 'undefined' !== typeof(gallery) && 'undefined' !== typeof(gallery.opened) && gallery.opened );
- },
-
- openOrSelectSlide: function( index ) {
- // The `open` method triggers an asynchronous effect, so we will get an
- // error if we try to use `open` then `selectSlideAtIndex` immediately
- // after it. We can only use `selectSlideAtIndex` if the carousel is
- // already open.
- if ( ! $( this ).jp_carousel( 'testIfOpened' ) ) {
- // The `open` method selects the correct slide during the
- // initialization.
- $( this ).jp_carousel( 'open', { start_index: index } );
- } else {
- gallery.jp_carousel( 'selectSlideAtIndex', index );
- }
- },
-
- open: function(options) {
- var settings = {
- 'items_selector' : '.gallery-item [data-attachment-id], .tiled-gallery-item [data-attachment-id], img[data-attachment-id]',
- 'start_index': 0
- },
- data = $(this).data('carousel-extra');
-
- if ( !data ) {
- return; // don't run if the default gallery functions weren't used
- }
-
- prepareGallery( data );
-
- if ( gallery.jp_carousel( 'testIfOpened' ) ) {
- return; // don't open if already opened
- }
-
- // make sure to stop the page from scrolling behind the carousel overlay, so we don't trigger
- // infiniscroll for it when enabled (Reader, theme infiniscroll, etc).
- originalOverflow = $('body').css('overflow');
- $('body').css('overflow', 'hidden');
- // prevent html from overflowing on some of the new themes.
- originalHOverflow = $('html').css('overflow');
- $('html').css('overflow', 'hidden');
- scrollPos = $( window ).scrollTop();
-
- container.data('carousel-extra', data);
-
- return this.each(function() {
- // If options exist, lets merge them
- // with our default settings
- var $this = $(this);
-
- if ( options ) {
- $.extend( settings, options );
- }
- if ( -1 === settings.start_index ) {
- settings.start_index = 0; //-1 returned if can't find index, so start from beginning
- }
-
- container.trigger('jp_carousel.beforeOpen').fadeIn('fast',function(){
- container.trigger('jp_carousel.afterOpen');
- gallery
- .jp_carousel('initSlides', $this.find(settings.items_selector), settings.start_index)
- .jp_carousel('selectSlideAtIndex', settings.start_index);
- });
- gallery.html('');
- });
- },
-
- selectSlideAtIndex : function(index){
- var slides = this.jp_carousel('slides'), selected = slides.eq(index);
-
- if ( 0 === selected.length ) {
- selected = slides.eq(0);
- }
-
- gallery.jp_carousel('selectSlide', selected, false);
- return this;
- },
-
- close : function(){
- // make sure to let the page scroll again
- $('body').css('overflow', originalOverflow);
- $('html').css('overflow', originalHOverflow);
- this.jp_carousel( 'clearCommentTextAreaValue' );
- return container
- .trigger('jp_carousel.beforeClose')
- .fadeOut('fast', function(){
- container.trigger('jp_carousel.afterClose');
- $( window ).scrollTop( scrollPos );
- });
-
- },
-
- next : function() {
- this.jp_carousel( 'previousOrNext', 'nextSlide' );
- },
-
- previous : function() {
- this.jp_carousel( 'previousOrNext', 'prevSlide' );
- },
-
- previousOrNext : function ( slideSelectionMethodName ) {
- if ( ! this.jp_carousel( 'hasMultipleImages' ) ) {
- return false;
- }
-
- var slide = gallery.jp_carousel( slideSelectionMethodName );
-
- if ( slide ) {
- container.animate( { scrollTop: 0 }, 'fast' );
- this.jp_carousel( 'clearCommentTextAreaValue' );
- this.jp_carousel( 'selectSlide', slide );
- }
- },
-
-
-
- selectedSlide : function(){
- return this.find('.selected');
- },
-
- setSlidePosition : function(x) {
- transitionBegin = Date.now();
-
- return this.css({
- '-webkit-transform':'translate3d(' + x + 'px,0,0)',
- '-moz-transform':'translate3d(' + x + 'px,0,0)',
- '-ms-transform':'translate(' + x + 'px,0)',
- '-o-transform':'translate(' + x + 'px,0)',
- 'transform':'translate3d(' + x + 'px,0,0)'
- });
- },
-
- updateSlidePositions : function(animate) {
- var current = this.jp_carousel( 'selectedSlide' ),
- galleryWidth = gallery.width(),
- currentWidth = current.width(),
- previous = gallery.jp_carousel( 'prevSlide' ),
- next = gallery.jp_carousel( 'nextSlide' ),
- previousPrevious = previous.prev(),
- nextNext = next.next(),
- left = Math.floor( ( galleryWidth - currentWidth ) * 0.5 );
-
- current.jp_carousel( 'setSlidePosition', left ).show();
-
- // minimum width
- gallery.jp_carousel( 'fitInfo', animate );
-
- // prep the slides
- var direction = lastSelectedSlide.is( current.prevAll() ) ? 1 : -1;
-
- // Since we preload the `previousPrevious` and `nextNext` slides, we need
- // to make sure they technically visible in the DOM, but invisible to the
- // user. To hide them from the user, we position them outside the edges
- // of the window.
- //
- // This section of code only applies when there are more than three
- // slides. Otherwise, the `previousPrevious` and `nextNext` slides will
- // overlap with the `previous` and `next` slides which must be visible
- // regardless.
- if ( 1 === direction ) {
- if ( ! nextNext.is( previous ) ) {
- nextNext.jp_carousel( 'setSlidePosition', galleryWidth + next.width() ).show();
- }
-
- if ( ! previousPrevious.is( next ) ) {
- previousPrevious.jp_carousel( 'setSlidePosition', -previousPrevious.width() - currentWidth ).show();
- }
- } else {
- if ( ! nextNext.is( previous ) ) {
- nextNext.jp_carousel( 'setSlidePosition', galleryWidth + currentWidth ).show();
- }
- }
-
- previous.jp_carousel( 'setSlidePosition', Math.floor( -previous.width() + ( screenPadding * 0.75 ) ) ).show();
- next.jp_carousel( 'setSlidePosition', Math.ceil( galleryWidth - ( screenPadding * 0.75 ) ) ).show();
- },
-
- selectSlide : function(slide, animate){
- lastSelectedSlide = this.find( '.selected' ).removeClass( 'selected' );
-
- var slides = gallery.jp_carousel( 'slides' ).css({ 'position': 'fixed' }),
- current = $( slide ).addClass( 'selected' ).css({ 'position': 'relative' }),
- attachmentId = current.data( 'attachment-id' ),
- previous = gallery.jp_carousel( 'prevSlide' ),
- next = gallery.jp_carousel( 'nextSlide' ),
- previousPrevious = previous.prev(),
- nextNext = next.next(),
- animated,
- captionHtml;
-
- // center the main image
- gallery.jp_carousel( 'loadFullImage', current );
-
- caption.hide();
-
- if ( next.length === 0 && slides.length <= 2 ) {
- $( '.jp-carousel-next-button' ).hide();
- } else {
- $( '.jp-carousel-next-button' ).show();
- }
-
- if ( previous.length === 0 && slides.length <= 2 ) {
- $( '.jp-carousel-previous-button' ).hide();
- } else {
- $( '.jp-carousel-previous-button' ).show();
- }
-
- animated = current
- .add( previous )
- .add( previousPrevious )
- .add( next )
- .add( nextNext )
- .jp_carousel( 'loadSlide' );
-
- // slide the whole view to the x we want
- slides.not( animated ).hide();
-
- gallery.jp_carousel( 'updateSlidePositions', animate );
-
- container.trigger( 'jp_carousel.selectSlide', [current] );
-
- gallery.jp_carousel( 'getTitleDesc', {
- title: current.data( 'title' ),
- desc: current.data( 'desc' )
- });
-
- var imageMeta = current.data( 'image-meta' );
- gallery.jp_carousel( 'updateExif', imageMeta );
- gallery.jp_carousel( 'updateFullSizeLink', current );
- gallery.jp_carousel( 'updateMap', imageMeta );
- gallery.jp_carousel( 'testCommentsOpened', current.data( 'comments-opened' ) );
- gallery.jp_carousel( 'getComments', {
- 'attachment_id': attachmentId,
- 'offset': 0,
- 'clear': true
- });
- $( '#jp-carousel-comment-post-results' ).slideUp();
-
- // $('<div />').text(sometext).html() is a trick to go to HTML to plain
- // text (including HTML entities decode, etc)
- if ( current.data( 'caption' ) ) {
- captionHtml = $( '<div />' ).text( current.data( 'caption' ) ).html();
-
- if ( captionHtml === $( '<div />' ).text( current.data( 'title' ) ).html() ) {
- $( '.jp-carousel-titleanddesc-title' ).fadeOut( 'fast' ).empty();
- }
-
- if ( captionHtml === $( '<div />' ).text( current.data( 'desc' ) ).html() ) {
- $( '.jp-carousel-titleanddesc-desc' ).fadeOut( 'fast' ).empty();
- }
-
- caption.html( current.data( 'caption' ) ).fadeIn( 'slow' );
- } else {
- caption.fadeOut( 'fast' ).empty();
- }
-
- // Record pageview in WP Stats, for each new image loaded full-screen.
- if ( jetpackCarouselStrings.stats ) {
- new Image().src = document.location.protocol +
- '//pixel.wp.com/g.gif?' +
- jetpackCarouselStrings.stats +
- '&post=' + encodeURIComponent( attachmentId ) +
- '&rand=' + Math.random();
- }
-
-
- // Load the images for the next and previous slides.
- $( next ).add( previous ).each( function() {
- gallery.jp_carousel( 'loadFullImage', $( this ) );
- });
-
- window.location.hash = last_known_location_hash = '#jp-carousel-' + attachmentId;
- },
-
- slides : function(){
- return this.find('.jp-carousel-slide');
- },
-
- slideDimensions : function(){
- return {
- width: $(window).width() - (screenPadding * 2),
- height: Math.floor( $(window).height() / 100 * proportion - 60 )
- };
- },
-
- loadSlide : function() {
- return this.each(function(){
- var slide = $(this);
- slide.find('img')
- .one('load', function(){
- // set the width/height of the image if it's too big
- slide
- .jp_carousel('fitSlide',false);
- });
- });
- },
-
- bestFit : function(){
- var max = gallery.jp_carousel('slideDimensions'),
- orig = this.jp_carousel('originalDimensions'),
- orig_ratio = orig.width / orig.height,
- w_ratio = 1,
- h_ratio = 1,
- width, height;
-
- if ( orig.width > max.width ) {
- w_ratio = max.width / orig.width;
- }
- if ( orig.height > max.height ) {
- h_ratio = max.height / orig.height;
- }
-
- if ( w_ratio < h_ratio ) {
- width = max.width;
- height = Math.floor( width / orig_ratio );
- } else if ( h_ratio < w_ratio ) {
- height = max.height;
- width = Math.floor( height * orig_ratio );
- } else {
- width = orig.width;
- height = orig.height;
- }
-
- return {
- width: width,
- height: height
- };
- },
-
- fitInfo : function(/*animated*/){
- var current = this.jp_carousel('selectedSlide'),
- size = current.jp_carousel('bestFit');
-
- photo_info.css({
- 'left' : Math.floor( (info.width() - size.width) * 0.5 ),
- 'width' : Math.floor( size.width )
- });
-
- return this;
- },
-
- fitMeta : function(animated){
- var newInfoTop = { top: Math.floor( $(window).height() / 100 * proportion + 5 ) + 'px' };
- var newLeftWidth = { width: ( info.width() - (imageMeta.width() + 80) ) + 'px' };
-
- if (animated) {
- info.animate(newInfoTop);
- leftColWrapper.animate(newLeftWidth);
- } else {
- info.animate(newInfoTop);
- leftColWrapper.css(newLeftWidth);
- }
- },
-
- fitSlide : function(/*animated*/){
- return this.each(function(){
- var $this = $(this),
- dimensions = $this.jp_carousel('bestFit'),
- method = 'css',
- max = gallery.jp_carousel('slideDimensions');
-
- dimensions.left = 0;
- dimensions.top = Math.floor( (max.height - dimensions.height) * 0.5 ) + 40;
- $this[method](dimensions);
- });
- },
-
- texturize : function(text) {
- text = '' + text; // make sure we get a string. Title "1" came in as int 1, for example, which did not support .replace().
- text = text.replace(/'/g, '&#8217;').replace(/&#039;/g, '&#8217;').replace(/[\u2019]/g, '&#8217;');
- text = text.replace(/"/g, '&#8221;').replace(/&#034;/g, '&#8221;').replace(/&quot;/g, '&#8221;').replace(/[\u201D]/g, '&#8221;');
- text = text.replace(/([\w]+)=&#[\d]+;(.+?)&#[\d]+;/g, '$1="$2"'); // untexturize allowed HTML tags params double-quotes
- return $.trim(text);
- },
-
- initSlides : function(items, start_index){
- if ( items.length < 2 ) {
- $( '.jp-carousel-next-button, .jp-carousel-previous-button' ).hide();
- } else {
- $( '.jp-carousel-next-button, .jp-carousel-previous-button' ).show();
- }
-
- // Calculate the new src.
- items.each(function(/*i*/){
- var src_item = $(this),
- orig_size = src_item.data('orig-size') || '',
- max = gallery.jp_carousel('slideDimensions'),
- parts = orig_size.split(','),
- medium_file = src_item.data('medium-file') || '',
- large_file = src_item.data('large-file') || '',
- src;
- orig_size = {width: parseInt(parts[0], 10), height: parseInt(parts[1], 10)};
-
- src = src_item.data('orig-file');
-
- src = gallery.jp_carousel('selectBestImageSize', {
- orig_file : src,
- orig_width : orig_size.width,
- orig_height : orig_size.height,
- max_width : max.width,
- max_height : max.height,
- medium_file : medium_file,
- large_file : large_file
- });
-
- // Set the final src
- $(this).data( 'gallery-src', src );
- });
-
- // If the start_index is not 0 then preload the clicked image first.
- if ( 0 !== start_index ) {
- $('<img/>')[0].src = $(items[start_index]).data('gallery-src');
- }
-
- var useInPageThumbnails = items.first().closest( '.tiled-gallery.type-rectangular' ).length > 0;
-
- // create the 'slide'
- items.each(function(i){
- var src_item = $(this),
- attachment_id = src_item.data('attachment-id') || 0,
- comments_opened = src_item.data('comments-opened') || 0,
- image_meta = src_item.data('image-meta') || {},
- orig_size = src_item.data('orig-size') || '',
- thumb_size = { width : src_item[0].naturalWidth, height : src_item[0].naturalHeight },
- title = src_item.data('image-title') || '',
- description = src_item.data('image-description') || '',
- caption = src_item.parents('.gallery-item').find('.gallery-caption').html() || '',
- src = src_item.data('gallery-src') || '',
- medium_file = src_item.data('medium-file') || '',
- large_file = src_item.data('large-file') || '',
- orig_file = src_item.data('orig-file') || '';
-
- var tiledCaption = src_item.parents('div.tiled-gallery-item').find('div.tiled-gallery-caption').html();
- if ( tiledCaption ) {
- caption = tiledCaption;
- }
-
- if ( attachment_id && orig_size.length ) {
- title = gallery.jp_carousel('texturize', title);
- description = gallery.jp_carousel('texturize', description);
- caption = gallery.jp_carousel('texturize', caption);
-
- // Initially, the image is a 1x1 transparent gif. The preview is shown as a background image on the slide itself.
- var image = $( '<img/>' )
- .attr( 'src', 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7' )
- .css( 'width', '100%' )
- .css( 'height', '100%' );
-
- var slide = $('<div class="jp-carousel-slide" itemprop="associatedMedia" itemscope itemtype="https://schema.org/ImageObject"></div>')
- .hide()
- .css({
- //'position' : 'fixed',
- 'left' : i < start_index ? -1000 : gallery.width()
- })
- .append( image )
- .appendTo(gallery)
- .data('src', src )
- .data('title', title)
- .data('desc', description)
- .data('caption', caption)
- .data('attachment-id', attachment_id)
- .data('permalink', src_item.parents('a').attr('href'))
- .data('orig-size', orig_size)
- .data('comments-opened', comments_opened)
- .data('image-meta', image_meta)
- .data('medium-file', medium_file)
- .data('large-file', large_file)
- .data('orig-file', orig_file)
- .data('thumb-size', thumb_size)
- ;
-
- if ( useInPageThumbnails ) {
- // Use the image already loaded in the gallery as a preview.
- slide
- .data( 'preview-image', src_item.attr( 'src' ) )
- .css( {
- 'background-image' : 'url("' + src_item.attr( 'src' ) + '")',
- 'background-size' : '100% 100%',
- 'background-position' : 'center center'
- } );
- }
-
- slide.jp_carousel( 'fitSlide', false );
- }
- });
- return this;
- },
-
- selectBestImageSize: function(args) {
- if ( 'object' !== typeof args ) {
- args = {};
- }
-
- if ( 'undefined' === typeof args.orig_file ) {
- return '';
- }
-
- if ( 'undefined' === typeof args.orig_width || 'undefined' === typeof args.max_width ) {
- return args.orig_file;
- }
-
- if ( 'undefined' === typeof args.medium_file || 'undefined' === typeof args.large_file ) {
- return args.orig_file;
- }
-
- // Check if the image is being served by Photon (using a regular expression on the hostname).
-
- var imageLinkParser = document.createElement( 'a' );
- imageLinkParser.href = args.large_file;
-
- var isPhotonUrl = /^i[0-2].wp.com$/i.test( imageLinkParser.hostname );
-
- var medium_size_parts = gallery.jp_carousel( 'getImageSizeParts', args.medium_file, args.orig_width, isPhotonUrl );
- var large_size_parts = gallery.jp_carousel( 'getImageSizeParts', args.large_file, args.orig_width, isPhotonUrl );
-
- var large_width = parseInt( large_size_parts[0], 10 ),
- large_height = parseInt( large_size_parts[1], 10 ),
- medium_width = parseInt( medium_size_parts[0], 10 ),
- medium_height = parseInt( medium_size_parts[1], 10 );
-
- // Assign max width and height.
- args.orig_max_width = args.max_width;
- args.orig_max_height = args.max_height;
-
- // Give devices with a higher devicePixelRatio higher-res images (Retina display = 2, Android phones = 1.5, etc)
- if ( 'undefined' !== typeof window.devicePixelRatio && window.devicePixelRatio > 1 ) {
- args.max_width = args.max_width * window.devicePixelRatio;
- args.max_height = args.max_height * window.devicePixelRatio;
- }
-
- if ( large_width >= args.max_width || large_height >= args.max_height ) {
- return args.large_file;
- }
-
- if ( medium_width >= args.max_width || medium_height >= args.max_height ) {
- return args.medium_file;
- }
-
- if ( isPhotonUrl ) {
- // args.orig_file doesn't point to a Photon url, so in this case we use args.large_file
- // to return the photon url of the original image.
- var largeFileIndex = args.large_file.lastIndexOf( '?' );
- var origPhotonUrl = args.large_file;
- if ( -1 !== largeFileIndex ) {
- origPhotonUrl = args.large_file.substring( 0, largeFileIndex );
- // If we have a really large image load a smaller version
- // that is closer to the viewable size
- if ( args.orig_width > args.max_width || args.orig_height > args.max_height ) {
- origPhotonUrl += '?fit=' + args.orig_max_width + '%2C' + args.orig_max_height;
- }
- }
- return origPhotonUrl;
- }
-
- return args.orig_file;
- },
-
- getImageSizeParts: function( file, orig_width, isPhotonUrl ) {
- var size = isPhotonUrl ?
- file.replace( /.*=([\d]+%2C[\d]+).*$/, '$1' ) :
- file.replace( /.*-([\d]+x[\d]+)\..+$/, '$1' );
-
- var size_parts = ( size !== file ) ?
- ( isPhotonUrl ? size.split( '%2C' ) : size.split( 'x' ) ) :
- [ orig_width, 0 ];
-
- // If one of the dimensions is set to 9999, then the actual value of that dimension can't be retrieved from the url.
- // In that case, we set the value to 0.
- if ( '9999' === size_parts[0] ) {
- size_parts[0] = '0';
- }
-
- if ( '9999' === size_parts[1] ) {
- size_parts[1] = '0';
- }
-
- return size_parts;
- },
-
-
- originalDimensions: function() {
- var splitted = $(this).data('orig-size').split(',');
- return {width: parseInt(splitted[0], 10), height: parseInt(splitted[1], 10)};
- },
-
- format: function( args ) {
- if ( 'object' !== typeof args ) {
- args = {};
- }
- if ( ! args.text || 'undefined' === typeof args.text ) {
- return;
- }
- if ( ! args.replacements || 'undefined' === typeof args.replacements ) {
- return args.text;
- }
- return args.text.replace(/{(\d+)}/g, function( match, number ) {
- return typeof args.replacements[number] !== 'undefined' ? args.replacements[number] : match;
- });
- },
-
- /**
- * Returns a number in a fraction format that represents the shutter speed.
- * @param Number speed
- * @return String
- */
- shutterSpeed: function( speed ) {
- var denominator;
-
- // round to one decimal if value > 1s by multiplying it by 10, rounding, then dividing by 10 again
- if ( speed >= 1 ) {
- return Math.round( speed * 10 ) / 10 + 's';
- }
-
- // If the speed is less than one, we find the denominator by inverting
- // the number. Since cameras usually use rational numbers as shutter
- // speeds, we should get a nice round number. Or close to one in cases
- // like 1/30. So we round it.
- denominator = Math.round( 1 / speed );
-
- return '1/' + denominator + 's';
- },
-
- parseTitleDesc: function( value ) {
- if ( !value.match(' ') && value.match('_') ) {
- return '';
- }
- // Prefix list originally based on http://commons.wikimedia.org/wiki/MediaWiki:Filename-prefix-blacklist
- $([
- 'CIMG', // Casio
- 'DSC_', // Nikon
- 'DSCF', // Fuji
- 'DSCN', // Nikon
- 'DUW', // some mobile phones
- 'GEDC', // GE
- 'IMG', // generic
- 'JD', // Jenoptik
- 'MGP', // Pentax
- 'PICT', // misc.
- 'Imagen', // misc.
- 'Foto', // misc.
- 'DSC', // misc.
- 'Scan', // Scanners
- 'SANY', // Sanyo
- 'SAM', // Samsung
- 'Screen Shot [0-9]+' // Mac screenshots
- ])
- .each(function(key, val){
- var regex = new RegExp('^' + val);
- if ( regex.test(value) ) {
- value = '';
- return;
- }
- });
- return value;
- },
-
- getTitleDesc: function( data ) {
- var title ='', desc = '', markup = '', target;
-
- target = $( 'div.jp-carousel-titleanddesc', 'div.jp-carousel-wrap' );
- target.hide();
-
- title = gallery.jp_carousel('parseTitleDesc', data.title) || '';
- desc = gallery.jp_carousel('parseTitleDesc', data.desc) || '';
-
- if ( title.length || desc.length ) {
- // Convert from HTML to plain text (including HTML entities decode, etc)
- if ( $('<div />').html( title ).text() === $('<div />').html( desc ).text() ) {
- title = '';
- }
-
- markup = ( title.length ) ? '<div class="jp-carousel-titleanddesc-title">' + title + '</div>' : '';
- markup += ( desc.length ) ? '<div class="jp-carousel-titleanddesc-desc">' + desc + '</div>' : '';
-
- target.html( markup ).fadeIn('slow');
- }
-
- $( 'div#jp-carousel-comment-form-container' ).css('margin-top', '20px');
- $( 'div#jp-carousel-comments-loading' ).css('margin-top', '20px');
- },
-
- // updateExif updates the contents of the exif UL (.jp-carousel-image-exif)
- updateExif: function( meta ) {
- if ( !meta || 1 !== Number( jetpackCarouselStrings.display_exif ) ) {
- return false;
- }
-
- var $ul = $( '<ul class=\'jp-carousel-image-exif\'></ul>' );
-
- $.each( meta, function( key, val ) {
- if ( 0 === parseFloat(val) || !val.length || -1 === $.inArray( key, $.makeArray( jetpackCarouselStrings.meta_data ) ) ) {
- return;
- }
-
- switch( key ) {
- case 'focal_length':
- val = val + 'mm';
- break;
- case 'shutter_speed':
- val = gallery.jp_carousel('shutterSpeed', val);
- break;
- case 'aperture':
- val = 'f/' + val;
- break;
- }
-
- $ul.append( '<li><h5>' + jetpackCarouselStrings[key] + '</h5>' + val + '</li>' );
- });
-
- // Update (replace) the content of the ul
- $( 'div.jp-carousel-image-meta ul.jp-carousel-image-exif' ).replaceWith( $ul );
- },
-
- // updateFullSizeLink updates the contents of the jp-carousel-image-download link
- updateFullSizeLink: function(current) {
- if(!current || !current.data) {
- return false;
- }
- var original,
- origSize = current.data('orig-size').split(',' ),
- imageLinkParser = document.createElement( 'a' );
-
- imageLinkParser.href = current.data( 'src' ).replace( /\?.+$/, '' );
-
- // Is this a Photon URL?
- if ( imageLinkParser.hostname.match( /^i[\d]{1}.wp.com$/i ) !== null ) {
- original = imageLinkParser.href;
- } else {
- original = current.data('orig-file').replace(/\?.+$/, '');
- }
-
- var permalink = $( '<a>'+gallery.jp_carousel('format', {'text': jetpackCarouselStrings.download_original, 'replacements': origSize})+'</a>' )
- .addClass( 'jp-carousel-image-download' )
- .attr( 'href', original )
- .attr( 'target', '_blank' );
-
- // Update (replace) the content of the anchor
- $( 'div.jp-carousel-image-meta a.jp-carousel-image-download' ).replaceWith( permalink );
- },
-
- updateMap: function( meta ) {
- if ( !meta.latitude || !meta.longitude || 1 !== Number( jetpackCarouselStrings.display_geo ) ) {
- return;
- }
-
- var latitude = meta.latitude,
- longitude = meta.longitude,
- $metabox = $( 'div.jp-carousel-image-meta', 'div.jp-carousel-wrap' ),
- $mapbox = $( '<div></div>' ),
- style = '&scale=2&style=feature:all|element:all|invert_lightness:true|hue:0x0077FF|saturation:-50|lightness:-5|gamma:0.91';
-
- $mapbox
- .addClass( 'jp-carousel-image-map' )
- .html( '<img width="154" height="154" src="https://maps.googleapis.com/maps/api/staticmap?\
- center=' + latitude + ',' + longitude + '&\
- zoom=8&\
- size=154x154&\
- sensor=false&\
- markers=size:medium%7Ccolor:blue%7C' + latitude + ',' + longitude + style +'" class="gmap-main" />\
- \
- <div class="gmap-topright"><div class="imgclip"><img width="175" height="154" src="https://maps.googleapis.com/maps/api/staticmap?\
- center=' + latitude + ',' + longitude + '&\
- zoom=3&\
- size=175x154&\
- sensor=false&\
- markers=size:small%7Ccolor:blue%7C' + latitude + ',' + longitude + style + '"c /></div></div>\
- \
- ' )
- .prependTo( $metabox );
- },
-
- testCommentsOpened: function( opened ) {
- if ( 1 === parseInt( opened, 10 ) ) {
- $('.jp-carousel-buttons').fadeIn('fast');
- commentForm.fadeIn('fast');
- } else {
- $('.jp-carousel-buttons').fadeOut('fast');
- commentForm.fadeOut('fast');
- }
- },
-
- getComments: function( args ) {
- clearInterval( commentInterval );
-
- if ( 'object' !== typeof args ) {
- return;
- }
-
- if ( 'undefined' === typeof args.attachment_id || ! args.attachment_id ) {
- return;
- }
-
- if ( ! args.offset || 'undefined' === typeof args.offset || args.offset < 1 ) {
- args.offset = 0;
- }
-
- var comments = $('.jp-carousel-comments'),
- commentsLoading = $('#jp-carousel-comments-loading').show();
-
- if ( args.clear ) {
- comments.hide().empty();
- }
-
- $.ajax({
- type: 'GET',
- url: jetpackCarouselStrings.ajaxurl,
- dataType: 'json',
- data: {
- action: 'get_attachment_comments',
- nonce: jetpackCarouselStrings.nonce,
- id: args.attachment_id,
- offset: args.offset
- },
- success: function(data/*, status, xhr*/) {
- if ( args.clear ) {
- comments.fadeOut('fast').empty();
- }
-
- $( data ).each(function(){
- var comment = $('<div></div>')
- .addClass('jp-carousel-comment')
- .attr('id', 'jp-carousel-comment-' + this['id'])
- .html(
- '<div class="comment-gravatar">' +
- this['gravatar_markup'] +
- '</div>' +
- '<div class="comment-author">' +
- this['author_markup'] +
- '</div>' +
- '<div class="comment-date">' +
- this['date_gmt'] +
- '</div>' +
- '<div class="comment-content">' +
- this['content'] +
- '</div>'
- );
- comments.append(comment);
-
- // Set the interval to check for a new page of comments.
- clearInterval( commentInterval );
- commentInterval = setInterval( function() {
- if ( ( $('.jp-carousel-overlay').height() - 150 ) < $('.jp-carousel-wrap').scrollTop() + $(window).height() ) {
- gallery.jp_carousel('getComments',{ attachment_id: args.attachment_id, offset: args.offset + 10, clear: false });
- clearInterval( commentInterval );
- }
- }, 300 );
- });
-
- // Verify (late) that the user didn't repeatldy click the arrows really fast, in which case the requested
- // attachment id might no longer match the current attachment id by the time we get the data back or a now
- // registered infiniscroll event kicks in, so we don't ever display comments for the wrong image by mistake.
- var current = $('.jp-carousel div.selected');
- if ( current && current.data && current.data('attachment-id') != args.attachment_id ) { // jshint ignore:line
- comments.fadeOut('fast');
- comments.empty();
- return;
- }
-
- // Increase the height of the background, semi-transparent overlay to match the new length of the comments list.
- $('.jp-carousel-overlay').height( $(window).height() + titleAndDescription.height() + commentForm.height() + ( (comments.height() > 0) ? comments.height() : imageMeta.height() ) + 200 );
-
- comments.show();
- commentsLoading.hide();
- },
- error: function(xhr, status, error) {
- // TODO: proper error handling
- console.log( 'Comment get fail...', xhr, status, error );
- comments.fadeIn('fast');
- commentsLoading.fadeOut('fast');
- }
- });
- },
-
- postCommentError: function(args) {
- if ( 'object' !== typeof args ) {
- args = {};
- }
- if ( ! args.field || 'undefined' === typeof args.field || ! args.error || 'undefined' === typeof args.error ) {
- return;
- }
- $('#jp-carousel-comment-post-results').slideUp('fast').html('<span class="jp-carousel-comment-post-error">'+args.error+'</span>').slideDown('fast');
- $('#jp-carousel-comment-form-spinner').spin(false);
- },
-
- setCommentIframeSrc: function(attachment_id) {
- var iframe = $('#jp-carousel-comment-iframe');
- // Set the proper irame src for the current attachment id
- if (iframe && iframe.length) {
- iframe.attr('src', iframe.attr('src').replace(/(postid=)\d+/, '$1'+attachment_id) );
- iframe.attr('src', iframe.attr('src').replace(/(%23.+)?$/, '%23jp-carousel-'+attachment_id) );
- }
- },
-
- clearCommentTextAreaValue: function() {
- var commentTextArea = $('#jp-carousel-comment-form-comment-field');
- if ( commentTextArea ) {
- commentTextArea.val('');
- }
- },
-
- nextSlide : function () {
- var slides = this.jp_carousel( 'slides' );
- var selected = this.jp_carousel( 'selectedSlide' );
-
- if ( selected.length === 0 || ( slides.length > 2 && selected.is( slides.last() ) ) ) {
- return slides.first();
- }
-
- return selected.next();
- },
-
- prevSlide : function () {
- var slides = this.jp_carousel( 'slides' );
- var selected = this.jp_carousel( 'selectedSlide' );
-
- if ( selected.length === 0 || ( slides.length > 2 && selected.is( slides.first() ) ) ) {
- return slides.last();
- }
-
- return selected.prev();
- },
-
- loadFullImage : function ( slide ) {
- var image = slide.find( 'img:first' );
-
- if ( ! image.data( 'loaded' ) ) {
- // If the width of the slide is smaller than the width of the "thumbnail" we're already using,
- // don't load the full image.
-
- image.on( 'load.jetpack', function () {
- image.off( 'load.jetpack' );
- $( this ).closest( '.jp-carousel-slide' ).css( 'background-image', '' );
- } );
-
- if ( ! slide.data( 'preview-image' ) || ( slide.data( 'thumb-size' ) && slide.width() > slide.data( 'thumb-size' ).width ) ) {
- image.attr( 'src', image.closest( '.jp-carousel-slide' ).data( 'src' ) ).attr('itemprop', 'image');
- } else {
- image.attr( 'src', slide.data( 'preview-image' ) ).attr('itemprop', 'image');
- }
-
- image.data( 'loaded', 1 );
- }
- },
-
- hasMultipleImages : function () {
- return gallery.jp_carousel('slides').length > 1;
- }
- };
-
- $.fn.jp_carousel = function(method){
- // ask for the HTML of the gallery
- // Method calling logic
- if ( methods[method] ) {
- return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
- } else if ( typeof method === 'object' || ! method ) {
- return methods.open.apply( this, arguments );
- } else {
- $.error( 'Method ' + method + ' does not exist on jQuery.jp_carousel' );
- }
-
- };
-
- // register the event listener for starting the gallery
- $(document.body).on('click.jp-carousel', 'div.gallery, div.tiled-gallery, ul.wp-block-gallery, div.wp-block-jetpack-tiled-gallery, a.single-image-gallery', function( e ) {
- if ( ! $(this).jp_carousel( 'testForData', e.currentTarget ) ) {
- return;
- }
-
- // Do not open the modal if we are looking at a gallery caption from before WP5, which may contain a link.
- if ( $(e.target).parent().hasClass('gallery-caption') ) {
- return;
- }
-
- // Do not open the modal if we are looking at a caption of a gallery block, which may contain a link.
- if ( $(e.target).parent().is('figcaption') ) {
- return;
- }
-
- e.preventDefault();
-
- // Stopping propagation in case there are parent elements
- // with .gallery or .tiled-gallery class
- e.stopPropagation();
- $(this).jp_carousel('open', { start_index: $(this).find('.gallery-item, .tiled-gallery-item, .blocks-gallery-item, .tiled-gallery__item').index($(e.target).parents('.gallery-item, .tiled-gallery-item, .blocks-gallery-item, .tiled-gallery__item'))});
- });
-
- // handle lightbox (single image gallery) for images linking to 'Attachment Page'
- if ( 1 === Number( jetpackCarouselStrings.single_image_gallery ) ) {
- processSingleImageGallery();
- $( document.body ).on( 'post-load', function() {
- processSingleImageGallery();
- } );
- }
-
- // Makes carousel work on page load and when back button leads to same URL with carousel hash (ie: no actual document.ready trigger)
- $( window ).on( 'hashchange.jp-carousel', function () {
-
- var hashRegExp = /jp-carousel-(\d+)/,
- matches, attachmentId, galleries, selectedThumbnail;
-
- if ( ! window.location.hash || ! hashRegExp.test( window.location.hash ) ) {
- if ( gallery && gallery.opened ) {
- container.jp_carousel( 'close' );
- }
-
- return;
- }
-
- if ( ( window.location.hash === last_known_location_hash ) && gallery.opened ) {
- return;
- }
-
- if ( window.location.hash && gallery && !gallery.opened && history.back) {
- history.back();
- return;
- }
-
- last_known_location_hash = window.location.hash;
- matches = window.location.hash.match( hashRegExp );
- attachmentId = parseInt( matches[1], 10 );
- galleries = $( 'div.gallery, div.tiled-gallery, a.single-image-gallery, ul.wp-block-gallery, div.wp-block-jetpack-tiled-gallery' );
-
- // Find the first thumbnail that matches the attachment ID in the location
- // hash, then open the gallery that contains it.
- galleries.each( function( _, galleryEl ) {
- $( galleryEl ).find('img').each( function( imageIndex, imageEl ) {
- if ( $( imageEl ).data( 'attachment-id' ) === parseInt( attachmentId, 10 ) ) {
- selectedThumbnail = { index: imageIndex, gallery: galleryEl };
- return false;
- }
- });
-
- if ( selectedThumbnail ) {
- $( selectedThumbnail.gallery )
- .jp_carousel( 'openOrSelectSlide', selectedThumbnail.index );
- return false;
- }
- });
- });
-
- if ( window.location.hash ) {
- $( window ).trigger( 'hashchange' );
- }
-});
-
-/**
- * jQuery Plugin to obtain touch gestures from iPhone, iPod Touch and iPad, should also work with Android mobile phones (not tested yet!)
- * Common usage: wipe images (left and right to show the previous or next image)
- *
- * @author Andreas Waltl, netCU Internetagentur (http://www.netcu.de)
- * Version 1.1.1, modified to pass the touchmove event to the callbacks.
- */
-(function($) {
-$.fn.touchwipe = function(settings) {
- var config = {
- min_move_x: 20,
- min_move_y: 20,
- wipeLeft: function(/*e*/) { },
- wipeRight: function(/*e*/) { },
- wipeUp: function(/*e*/) { },
- wipeDown: function(/*e*/) { },
- preventDefaultEvents: true
- };
-
- if (settings) {
- $.extend(config, settings);
- }
-
- this.each(function() {
- var startX;
- var startY;
- var isMoving = false;
-
- function cancelTouch() {
- this.removeEventListener('touchmove', onTouchMove);
- startX = null;
- isMoving = false;
- }
-
- function onTouchMove(e) {
- if(config.preventDefaultEvents) {
- e.preventDefault();
- }
- if(isMoving) {
- var x = e.touches[0].pageX;
- var y = e.touches[0].pageY;
- var dx = startX - x;
- var dy = startY - y;
- if(Math.abs(dx) >= config.min_move_x) {
- cancelTouch();
- if(dx > 0) {
- config.wipeLeft(e);
- } else {
- config.wipeRight(e);
- }
- }
- else if(Math.abs(dy) >= config.min_move_y) {
- cancelTouch();
- if(dy > 0) {
- config.wipeDown(e);
- } else {
- config.wipeUp(e);
- }
- }
- }
- }
-
- function onTouchStart(e)
- {
- if (e.touches.length === 1) {
- startX = e.touches[0].pageX;
- startY = e.touches[0].pageY;
- isMoving = true;
- this.addEventListener('touchmove', onTouchMove, false);
- }
- }
- if ('ontouchstart' in document.documentElement) {
- this.addEventListener('touchstart', onTouchStart, false);
- }
- });
-
- return this;
-};
-})(jQuery);
diff --git a/plugins/jetpack/modules/carousel/jetpack-carousel.php b/plugins/jetpack/modules/carousel/jetpack-carousel.php
deleted file mode 100644
index f2f347df..00000000
--- a/plugins/jetpack/modules/carousel/jetpack-carousel.php
+++ /dev/null
@@ -1,820 +0,0 @@
-<?php
-
-/*
-Plugin Name: Jetpack Carousel
-Plugin URL: https://wordpress.com/
-Description: Transform your standard image galleries into an immersive full-screen experience.
-Version: 0.1
-Author: Automattic
-
-Released under the GPL v.2 license.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-*/
-class Jetpack_Carousel {
-
- public $prebuilt_widths = array( 370, 700, 1000, 1200, 1400, 2000 );
-
- public $first_run = true;
-
- public $in_gallery = false;
-
- public $in_jetpack = true;
-
- public $single_image_gallery_enabled = false;
-
- public $single_image_gallery_enabled_media_file = false;
-
- function __construct() {
- add_action( 'init', array( $this, 'init' ) );
- }
-
- function init() {
- if ( $this->maybe_disable_jp_carousel() ) {
- return;
- }
-
- $this->in_jetpack = ( class_exists( 'Jetpack' ) && method_exists( 'Jetpack', 'enable_module_configurable' ) ) ? true : false;
-
- $this->single_image_gallery_enabled = ! $this->maybe_disable_jp_carousel_single_images();
- $this->single_image_gallery_enabled_media_file = $this->maybe_enable_jp_carousel_single_images_media_file();
-
- if ( is_admin() ) {
- // Register the Carousel-related related settings
- add_action( 'admin_init', array( $this, 'register_settings' ), 5 );
- if ( ! $this->in_jetpack ) {
- if ( 0 == $this->test_1or0_option( get_option( 'carousel_enable_it' ), true ) ) {
- return; // Carousel disabled, abort early, but still register setting so user can switch it back on
- }
- }
- // If in admin, register the ajax endpoints.
- add_action( 'wp_ajax_get_attachment_comments', array( $this, 'get_attachment_comments' ) );
- add_action( 'wp_ajax_nopriv_get_attachment_comments', array( $this, 'get_attachment_comments' ) );
- add_action( 'wp_ajax_post_attachment_comment', array( $this, 'post_attachment_comment' ) );
- add_action( 'wp_ajax_nopriv_post_attachment_comment', array( $this, 'post_attachment_comment' ) );
- } else {
- if ( ! $this->in_jetpack ) {
- if ( 0 == $this->test_1or0_option( get_option( 'carousel_enable_it' ), true ) ) {
- return; // Carousel disabled, abort early
- }
- }
- // If on front-end, do the Carousel thang.
- /**
- * Filter the array of default prebuilt widths used in Carousel.
- *
- * @module carousel
- *
- * @since 1.6.0
- *
- * @param array $this->prebuilt_widths Array of default widths.
- */
- $this->prebuilt_widths = apply_filters( 'jp_carousel_widths', $this->prebuilt_widths );
- // below: load later than other callbacks hooked it (e.g. 3rd party plugins handling gallery shortcode)
- add_filter( 'post_gallery', array( $this, 'check_if_shortcode_processed_and_enqueue_assets' ), 1000, 2 );
- add_filter( 'post_gallery', array( $this, 'set_in_gallery' ), -1000 );
- add_filter( 'gallery_style', array( $this, 'add_data_to_container' ) );
- add_filter( 'wp_get_attachment_image_attributes', array( $this, 'add_data_to_images' ), 10, 2 );
- add_filter( 'the_content', array( $this, 'check_content_for_blocks' ), 1 );
- add_filter( 'jetpack_tiled_galleries_block_content', array( $this, 'add_data_img_tags_and_enqueue_assets' ) );
- if ( $this->single_image_gallery_enabled ) {
- add_filter( 'the_content', array( $this, 'add_data_img_tags_and_enqueue_assets' ) );
- }
- }
-
- if ( $this->in_jetpack && method_exists( 'Jetpack', 'module_configuration_load' ) ) {
- Jetpack::enable_module_configurable( dirname( dirname( __FILE__ ) ) . '/carousel.php' );
- Jetpack::module_configuration_load( dirname( dirname( __FILE__ ) ) . '/carousel.php', array( $this, 'jetpack_configuration_load' ) );
- }
- }
-
- function maybe_disable_jp_carousel() {
- /**
- * Allow third-party plugins or themes to disable Carousel.
- *
- * @module carousel
- *
- * @since 1.6.0
- *
- * @param bool false Should Carousel be disabled? Default to false.
- */
- return apply_filters( 'jp_carousel_maybe_disable', false );
- }
-
- function maybe_disable_jp_carousel_single_images() {
- /**
- * Allow third-party plugins or themes to disable Carousel for single images.
- *
- * @module carousel
- *
- * @since 4.5.0
- *
- * @param bool false Should Carousel be disabled for single images? Default to false.
- */
- return apply_filters( 'jp_carousel_maybe_disable_single_images', false );
- }
-
- function maybe_enable_jp_carousel_single_images_media_file() {
- /**
- * Allow third-party plugins or themes to enable Carousel
- * for single images linking to 'Media File' (full size image).
- *
- * @module carousel
- *
- * @since 4.5.0
- *
- * @param bool false Should Carousel be enabled for single images linking to 'Media File'? Default to false.
- */
- return apply_filters( 'jp_carousel_load_for_images_linked_to_file', false );
- }
-
- function jetpack_configuration_load() {
- wp_safe_redirect( admin_url( 'options-media.php#carousel_background_color' ) );
- exit;
- }
-
- function asset_version( $version ) {
- /**
- * Filter the version string used when enqueuing Carousel assets.
- *
- * @module carousel
- *
- * @since 1.6.0
- *
- * @param string $version Asset version.
- */
- return apply_filters( 'jp_carousel_asset_version', $version );
- }
-
- function display_bail_message( $output = '' ) {
- // Displays a message on top of gallery if carousel has bailed
- $message = '<div class="jp-carousel-msg"><p>';
- $message .= __( 'Jetpack\'s Carousel has been disabled, because another plugin or your theme is overriding the [gallery] shortcode.', 'jetpack' );
- $message .= '</p></div>';
- // put before gallery output
- $output = $message . $output;
- return $output;
- }
-
- function check_if_shortcode_processed_and_enqueue_assets( $output ) {
- if ( Jetpack_AMP_Support::is_amp_request() ) {
- return $output;
- }
-
- if (
- ! empty( $output ) &&
- /**
- * Allow third-party plugins or themes to force-enable Carousel.
- *
- * @module carousel
- *
- * @since 1.9.0
- *
- * @param bool false Should we force enable Carousel? Default to false.
- */
- ! apply_filters( 'jp_carousel_force_enable', false )
- ) {
- // Bail because someone is overriding the [gallery] shortcode.
- remove_filter( 'gallery_style', array( $this, 'add_data_to_container' ) );
- remove_filter( 'wp_get_attachment_image_attributes', array( $this, 'add_data_to_images' ) );
- remove_filter( 'the_content', array( $this, 'add_data_img_tags_and_enqueue_assets' ) );
- // Display message that carousel has bailed, if user is super_admin, and if we're not on WordPress.com.
- if (
- is_super_admin() &&
- ! ( defined( 'IS_WPCOM' ) && IS_WPCOM )
- ) {
- add_filter( 'post_gallery', array( $this, 'display_bail_message' ) );
- }
- return $output;
- }
-
- /**
- * Fires when thumbnails are shown in Carousel.
- *
- * @module carousel
- *
- * @since 1.6.0
- **/
- do_action( 'jp_carousel_thumbnails_shown' );
-
- $this->enqueue_assets();
-
- return $output;
- }
-
- /**
- * Check if the content of a post uses gallery blocks. To be used by 'the_content' filter.
- *
- * @since 6.8.0
- *
- * @param string $content Post content.
- *
- * @return string $content Post content.
- */
- function check_content_for_blocks( $content ) {
- if ( Jetpack_AMP_Support::is_amp_request() ) {
- return $content;
- }
-
- if ( has_block( 'gallery', $content ) || has_block( 'jetpack/tiled-gallery', $content ) ) {
- $this->enqueue_assets();
- $content = $this->add_data_to_container( $content );
- }
- return $content;
- }
-
- function enqueue_assets() {
- if ( $this->first_run ) {
- wp_enqueue_script(
- 'jetpack-carousel',
- Jetpack::get_file_url_for_environment(
- '_inc/build/carousel/jetpack-carousel.min.js',
- 'modules/carousel/jetpack-carousel.js'
- ),
- array( 'jquery.spin' ),
- $this->asset_version( '20190102' ),
- true
- );
-
- // Note: using home_url() instead of admin_url() for ajaxurl to be sure to get same domain on wpcom when using mapped domains (also works on self-hosted)
- // Also: not hardcoding path since there is no guarantee site is running on site root in self-hosted context.
- $is_logged_in = is_user_logged_in();
- $current_user = wp_get_current_user();
- $comment_registration = intval( get_option( 'comment_registration' ) );
- $require_name_email = intval( get_option( 'require_name_email' ) );
- $localize_strings = array(
- 'widths' => $this->prebuilt_widths,
- 'is_logged_in' => $is_logged_in,
- 'lang' => strtolower( substr( get_locale(), 0, 2 ) ),
- 'ajaxurl' => set_url_scheme( admin_url( 'admin-ajax.php' ) ),
- 'nonce' => wp_create_nonce( 'carousel_nonce' ),
- 'display_exif' => $this->test_1or0_option( Jetpack_Options::get_option_and_ensure_autoload( 'carousel_display_exif', true ) ),
- 'display_geo' => $this->test_1or0_option( Jetpack_Options::get_option_and_ensure_autoload( 'carousel_display_geo', true ) ),
- 'single_image_gallery' => $this->single_image_gallery_enabled,
- 'single_image_gallery_media_file' => $this->single_image_gallery_enabled_media_file,
- 'background_color' => $this->carousel_background_color_sanitize( Jetpack_Options::get_option_and_ensure_autoload( 'carousel_background_color', '' ) ),
- 'comment' => __( 'Comment', 'jetpack' ),
- 'post_comment' => __( 'Post Comment', 'jetpack' ),
- 'write_comment' => __( 'Write a Comment...', 'jetpack' ),
- 'loading_comments' => __( 'Loading Comments...', 'jetpack' ),
- 'download_original' => sprintf( __( 'View full size <span class="photo-size">%1$s<span class="photo-size-times">&times;</span>%2$s</span>', 'jetpack' ), '{0}', '{1}' ),
- 'no_comment_text' => __( 'Please be sure to submit some text with your comment.', 'jetpack' ),
- 'no_comment_email' => __( 'Please provide an email address to comment.', 'jetpack' ),
- 'no_comment_author' => __( 'Please provide your name to comment.', 'jetpack' ),
- 'comment_post_error' => __( 'Sorry, but there was an error posting your comment. Please try again later.', 'jetpack' ),
- 'comment_approved' => __( 'Your comment was approved.', 'jetpack' ),
- 'comment_unapproved' => __( 'Your comment is in moderation.', 'jetpack' ),
- 'camera' => __( 'Camera', 'jetpack' ),
- 'aperture' => __( 'Aperture', 'jetpack' ),
- 'shutter_speed' => __( 'Shutter Speed', 'jetpack' ),
- 'focal_length' => __( 'Focal Length', 'jetpack' ),
- 'copyright' => __( 'Copyright', 'jetpack' ),
- 'comment_registration' => $comment_registration,
- 'require_name_email' => $require_name_email,
- /** This action is documented in core/src/wp-includes/link-template.php */
- 'login_url' => wp_login_url( apply_filters( 'the_permalink', get_permalink() ) ),
- 'blog_id' => (int) get_current_blog_id(),
- 'meta_data' => array( 'camera', 'aperture', 'shutter_speed', 'focal_length', 'copyright' ),
- );
-
- if ( ! isset( $localize_strings['jetpack_comments_iframe_src'] ) || empty( $localize_strings['jetpack_comments_iframe_src'] ) ) {
- // We're not using Comments after all, so fallback to standard local comments.
-
- if ( $is_logged_in ) {
- $localize_strings['local_comments_commenting_as'] = '<p id="jp-carousel-commenting-as">' . sprintf( __( 'Commenting as %s', 'jetpack' ), $current_user->data->display_name ) . '</p>';
- } else {
- if ( $comment_registration ) {
- $localize_strings['local_comments_commenting_as'] = '<p id="jp-carousel-commenting-as">' . __( 'You must be <a href="#" class="jp-carousel-comment-login">logged in</a> to post a comment.', 'jetpack' ) . '</p>';
- } else {
- $required = ( $require_name_email ) ? __( '%s (Required)', 'jetpack' ) : '%s';
- $localize_strings['local_comments_commenting_as'] = ''
- . '<fieldset><label for="email">' . sprintf( $required, __( 'Email', 'jetpack' ) ) . '</label> '
- . '<input type="text" name="email" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-email-field" /></fieldset>'
- . '<fieldset><label for="author">' . sprintf( $required, __( 'Name', 'jetpack' ) ) . '</label> '
- . '<input type="text" name="author" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-author-field" /></fieldset>'
- . '<fieldset><label for="url">' . __( 'Website', 'jetpack' ) . '</label> '
- . '<input type="text" name="url" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-url-field" /></fieldset>';
- }
- }
- }
-
- /**
- * Handle WP stats for images in full-screen.
- * Build string with tracking info.
- */
-
- /**
- * Filter if Jetpack should enable stats collection on carousel views
- *
- * @module carousel
- *
- * @since 4.3.2
- *
- * @param bool Enable Jetpack Carousel stat collection. Default false.
- */
- if ( apply_filters( 'jetpack_enable_carousel_stats', false ) && in_array( 'stats', Jetpack::get_active_modules() ) && ! Jetpack::is_development_mode() ) {
- $localize_strings['stats'] = 'blog=' . Jetpack_Options::get_option( 'id' ) . '&host=' . parse_url( get_option( 'home' ), PHP_URL_HOST ) . '&v=ext&j=' . JETPACK__API_VERSION . ':' . JETPACK__VERSION;
-
- // Set the stats as empty if user is logged in but logged-in users shouldn't be tracked.
- if ( is_user_logged_in() && function_exists( 'stats_get_options' ) ) {
- $stats_options = stats_get_options();
- $track_loggedin_users = isset( $stats_options['reg_users'] ) ? (bool) $stats_options['reg_users'] : false;
-
- if ( ! $track_loggedin_users ) {
- $localize_strings['stats'] = '';
- }
- }
- }
-
- /**
- * Filter the strings passed to the Carousel's js file.
- *
- * @module carousel
- *
- * @since 1.6.0
- *
- * @param array $localize_strings Array of strings passed to the Jetpack js file.
- */
- $localize_strings = apply_filters( 'jp_carousel_localize_strings', $localize_strings );
- wp_localize_script( 'jetpack-carousel', 'jetpackCarouselStrings', $localize_strings );
- wp_enqueue_style( 'jetpack-carousel', plugins_url( 'jetpack-carousel.css', __FILE__ ), array(), $this->asset_version( '20120629' ) );
- wp_style_add_data( 'jetpack-carousel', 'rtl', 'replace' );
-
- /**
- * Fires after carousel assets are enqueued for the first time.
- * Allows for adding additional assets to the carousel page.
- *
- * @module carousel
- *
- * @since 1.6.0
- *
- * @param bool $first_run First load if Carousel on the page.
- * @param array $localized_strings Array of strings passed to the Jetpack js file.
- */
- do_action( 'jp_carousel_enqueue_assets', $this->first_run, $localize_strings );
-
- $this->first_run = false;
- }
- }
-
- function set_in_gallery( $output ) {
- if ( Jetpack_AMP_Support::is_amp_request() ) {
- return $output;
- }
- $this->in_gallery = true;
- return $output;
- }
-
- /**
- * Adds data-* attributes required by carousel to img tags in post HTML
- * content. To be used by 'the_content' filter.
- *
- * @see add_data_to_images()
- * @see wp_make_content_images_responsive() in wp-includes/media.php
- *
- * @param string $content HTML content of the post
- * @return string Modified HTML content of the post
- */
- function add_data_img_tags_and_enqueue_assets( $content ) {
- if ( Jetpack_AMP_Support::is_amp_request() ) {
- return $content;
- }
-
- if ( ! preg_match_all( '/<img [^>]+>/', $content, $matches ) ) {
- return $content;
- }
- $selected_images = array();
- foreach ( $matches[0] as $image_html ) {
- if ( preg_match( '/(wp-image-|data-id=)\"?([0-9]+)\"?/i', $image_html, $class_id ) &&
- ! preg_match( '/wp-block-jetpack-slideshow_image/', $image_html ) ) {
- $attachment_id = absint( $class_id[2] );
- /**
- * If exactly the same image tag is used more than once, overwrite it.
- * All identical tags will be replaced later with 'str_replace()'.
- */
- $selected_images[ $attachment_id ] = $image_html;
- }
- }
-
- $find = array();
- $replace = array();
- if ( empty( $selected_images ) ) {
- return $content;
- }
-
- $attachments = get_posts(
- array(
- 'include' => array_keys( $selected_images ),
- 'post_type' => 'any',
- 'post_status' => 'any',
- 'suppress_filters' => false,
- )
- );
-
- foreach ( $attachments as $attachment ) {
- $image_html = $selected_images[ $attachment->ID ];
-
- $attributes = $this->add_data_to_images( array(), $attachment );
- $attributes_html = '';
- foreach ( $attributes as $k => $v ) {
- $attributes_html .= esc_attr( $k ) . '="' . esc_attr( $v ) . '" ';
- }
-
- $find[] = $image_html;
- $replace[] = str_replace( '<img ', "<img $attributes_html", $image_html );
- }
-
- $content = str_replace( $find, $replace, $content );
- $this->enqueue_assets();
- return $content;
- }
-
- function add_data_to_images( $attr, $attachment = null ) {
- if ( Jetpack_AMP_Support::is_amp_request() ) {
- return $attr;
- }
-
- $attachment_id = intval( $attachment->ID );
- if ( ! wp_attachment_is_image( $attachment_id ) ) {
- return $attr;
- }
-
- $orig_file = wp_get_attachment_image_src( $attachment_id, 'full' );
- $orig_file = isset( $orig_file[0] ) ? $orig_file[0] : wp_get_attachment_url( $attachment_id );
- $meta = wp_get_attachment_metadata( $attachment_id );
- $size = isset( $meta['width'] ) ? intval( $meta['width'] ) . ',' . intval( $meta['height'] ) : '';
- $img_meta = ( ! empty( $meta['image_meta'] ) ) ? (array) $meta['image_meta'] : array();
- $comments_opened = intval( comments_open( $attachment_id ) );
-
- /**
- * Note: Cannot generate a filename from the width and height wp_get_attachment_image_src() returns because
- * it takes the $content_width global variable themes can set in consideration, therefore returning sizes
- * which when used to generate a filename will likely result in a 404 on the image.
- * $content_width has no filter we could temporarily de-register, run wp_get_attachment_image_src(), then
- * re-register. So using returned file URL instead, which we can define the sizes from through filename
- * parsing in the JS, as this is a failsafe file reference.
- *
- * EG with Twenty Eleven activated:
- * array(4) { [0]=> string(82) "http://vanillawpinstall.blah/wp-content/uploads/2012/06/IMG_3534-1024x764.jpg" [1]=> int(584) [2]=> int(435) [3]=> bool(true) }
- *
- * EG with Twenty Ten activated:
- * array(4) { [0]=> string(82) "http://vanillawpinstall.blah/wp-content/uploads/2012/06/IMG_3534-1024x764.jpg" [1]=> int(640) [2]=> int(477) [3]=> bool(true) }
- */
-
- $medium_file_info = wp_get_attachment_image_src( $attachment_id, 'medium' );
- $medium_file = isset( $medium_file_info[0] ) ? $medium_file_info[0] : '';
-
- $large_file_info = wp_get_attachment_image_src( $attachment_id, 'large' );
- $large_file = isset( $large_file_info[0] ) ? $large_file_info[0] : '';
-
- $attachment = get_post( $attachment_id );
- $attachment_title = wptexturize( $attachment->post_title );
- $attachment_desc = wpautop( wptexturize( $attachment->post_content ) );
- // Not yet providing geo-data, need to "fuzzify" for privacy
- if ( ! empty( $img_meta ) ) {
- foreach ( $img_meta as $k => $v ) {
- if ( 'latitude' == $k || 'longitude' == $k ) {
- unset( $img_meta[ $k ] );
- }
- }
- }
-
- // See https://github.com/Automattic/jetpack/issues/2765
- if ( isset( $img_meta['keywords'] ) ) {
- unset( $img_meta['keywords'] );
- }
-
- $img_meta = json_encode( array_map( 'strval', array_filter( $img_meta, 'is_scalar' ) ) );
-
- $attr['data-attachment-id'] = $attachment_id;
- $attr['data-permalink'] = esc_attr( get_permalink( $attachment->ID ) );
- $attr['data-orig-file'] = esc_attr( $orig_file );
- $attr['data-orig-size'] = $size;
- $attr['data-comments-opened'] = $comments_opened;
- $attr['data-image-meta'] = esc_attr( $img_meta );
- $attr['data-image-title'] = esc_attr( htmlspecialchars( $attachment_title ) );
- $attr['data-image-description'] = esc_attr( htmlspecialchars( $attachment_desc ) );
- $attr['data-medium-file'] = esc_attr( $medium_file );
- $attr['data-large-file'] = esc_attr( $large_file );
-
- return $attr;
- }
-
- function add_data_to_container( $html ) {
- global $post;
- if ( Jetpack_AMP_Support::is_amp_request() ) {
- return $html;
- }
-
- if ( isset( $post ) ) {
- $blog_id = (int) get_current_blog_id();
-
- $extra_data = array(
- 'data-carousel-extra' => array(
- 'blog_id' => $blog_id,
- 'permalink' => get_permalink( $post->ID ),
- ),
- );
-
- /**
- * Filter the data added to the Gallery container.
- *
- * @module carousel
- *
- * @since 1.6.0
- *
- * @param array $extra_data Array of data about the site and the post.
- */
- $extra_data = apply_filters( 'jp_carousel_add_data_to_container', $extra_data );
- foreach ( (array) $extra_data as $data_key => $data_values ) {
- $html = str_replace( '<div ', '<div ' . esc_attr( $data_key ) . "='" . json_encode( $data_values ) . "' ", $html );
- $html = str_replace( '<ul class="wp-block-gallery', '<ul ' . esc_attr( $data_key ) . "='" . json_encode( $data_values ) . "' class=\"wp-block-gallery", $html );
- }
- }
-
- return $html;
- }
-
- function get_attachment_comments() {
- if ( ! headers_sent() ) {
- header( 'Content-type: text/javascript' );
- }
-
- /**
- * Allows for the checking of privileges of the blog user before comments
- * are packaged as JSON and sent back from the get_attachment_comments
- * AJAX endpoint
- *
- * @module carousel
- *
- * @since 1.6.0
- */
- do_action( 'jp_carousel_check_blog_user_privileges' );
-
- $attachment_id = ( isset( $_REQUEST['id'] ) ) ? (int) $_REQUEST['id'] : 0;
- $offset = ( isset( $_REQUEST['offset'] ) ) ? (int) $_REQUEST['offset'] : 0;
-
- if ( ! $attachment_id ) {
- echo json_encode( __( 'Missing attachment ID.', 'jetpack' ) );
- die();
- }
-
- if ( $offset < 1 ) {
- $offset = 0;
- }
-
- $comments = get_comments(
- array(
- 'status' => 'approve',
- 'order' => ( 'asc' == get_option( 'comment_order' ) ) ? 'ASC' : 'DESC',
- 'number' => 10,
- 'offset' => $offset,
- 'post_id' => $attachment_id,
- )
- );
-
- $out = array();
-
- // Can't just send the results, they contain the commenter's email address.
- foreach ( $comments as $comment ) {
- $avatar = get_avatar( $comment->comment_author_email, 64 );
- if ( ! $avatar ) {
- $avatar = '';
- }
- $out[] = array(
- 'id' => $comment->comment_ID,
- 'parent_id' => $comment->comment_parent,
- 'author_markup' => get_comment_author_link( $comment->comment_ID ),
- 'gravatar_markup' => $avatar,
- 'date_gmt' => $comment->comment_date_gmt,
- 'content' => wpautop( $comment->comment_content ),
- );
- }
-
- die( json_encode( $out ) );
- }
-
- function post_attachment_comment() {
- if ( ! headers_sent() ) {
- header( 'Content-type: text/javascript' );
- }
-
- if ( empty( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'carousel_nonce' ) ) {
- die( json_encode( array( 'error' => __( 'Nonce verification failed.', 'jetpack' ) ) ) );
- }
-
- $_blog_id = (int) $_POST['blog_id'];
- $_post_id = (int) $_POST['id'];
- $comment = $_POST['comment'];
-
- if ( empty( $_blog_id ) ) {
- die( json_encode( array( 'error' => __( 'Missing target blog ID.', 'jetpack' ) ) ) );
- }
-
- if ( empty( $_post_id ) ) {
- die( json_encode( array( 'error' => __( 'Missing target post ID.', 'jetpack' ) ) ) );
- }
-
- if ( empty( $comment ) ) {
- die( json_encode( array( 'error' => __( 'No comment text was submitted.', 'jetpack' ) ) ) );
- }
-
- // Used in context like NewDash
- $switched = false;
- if ( is_multisite() && $_blog_id != get_current_blog_id() ) {
- switch_to_blog( $_blog_id );
- $switched = true;
- }
-
- /** This action is documented in modules/carousel/jetpack-carousel.php */
- do_action( 'jp_carousel_check_blog_user_privileges' );
-
- if ( ! comments_open( $_post_id ) ) {
- die( json_encode( array( 'error' => __( 'Comments on this post are closed.', 'jetpack' ) ) ) );
- }
-
- if ( is_user_logged_in() ) {
- $user = wp_get_current_user();
- $user_id = $user->ID;
- $display_name = $user->display_name;
- $email = $user->user_email;
- $url = $user->user_url;
-
- if ( empty( $user_id ) ) {
- die( json_encode( array( 'error' => __( 'Sorry, but we could not authenticate your request.', 'jetpack' ) ) ) );
- }
- } else {
- $user_id = 0;
- $display_name = $_POST['author'];
- $email = $_POST['email'];
- $url = $_POST['url'];
-
- if ( get_option( 'require_name_email' ) ) {
- if ( empty( $display_name ) ) {
- die( json_encode( array( 'error' => __( 'Please provide your name.', 'jetpack' ) ) ) );
- }
-
- if ( empty( $email ) ) {
- die( json_encode( array( 'error' => __( 'Please provide an email address.', 'jetpack' ) ) ) );
- }
-
- if ( ! is_email( $email ) ) {
- die( json_encode( array( 'error' => __( 'Please provide a valid email address.', 'jetpack' ) ) ) );
- }
- }
- }
-
- $comment_data = array(
- 'comment_content' => $comment,
- 'comment_post_ID' => $_post_id,
- 'comment_author' => $display_name,
- 'comment_author_email' => $email,
- 'comment_author_url' => $url,
- 'comment_approved' => 0,
- 'comment_type' => '',
- );
-
- if ( ! empty( $user_id ) ) {
- $comment_data['user_id'] = $user_id;
- }
-
- // Note: wp_new_comment() sanitizes and validates the values (too).
- $comment_id = wp_new_comment( $comment_data );
-
- /**
- * Fires before adding a new comment to the database via the get_attachment_comments ajax endpoint.
- *
- * @module carousel
- *
- * @since 1.6.0
- */
- do_action( 'jp_carousel_post_attachment_comment' );
- $comment_status = wp_get_comment_status( $comment_id );
-
- if ( true == $switched ) {
- restore_current_blog();
- }
-
- die(
- json_encode(
- array(
- 'comment_id' => $comment_id,
- 'comment_status' => $comment_status,
- )
- )
- );
- }
-
- function register_settings() {
- add_settings_section( 'carousel_section', __( 'Image Gallery Carousel', 'jetpack' ), array( $this, 'carousel_section_callback' ), 'media' );
-
- if ( ! $this->in_jetpack ) {
- add_settings_field( 'carousel_enable_it', __( 'Enable carousel', 'jetpack' ), array( $this, 'carousel_enable_it_callback' ), 'media', 'carousel_section' );
- register_setting( 'media', 'carousel_enable_it', array( $this, 'carousel_enable_it_sanitize' ) );
- }
-
- add_settings_field( 'carousel_background_color', __( 'Background color', 'jetpack' ), array( $this, 'carousel_background_color_callback' ), 'media', 'carousel_section' );
- register_setting( 'media', 'carousel_background_color', array( $this, 'carousel_background_color_sanitize' ) );
-
- add_settings_field( 'carousel_display_exif', __( 'Metadata', 'jetpack' ), array( $this, 'carousel_display_exif_callback' ), 'media', 'carousel_section' );
- register_setting( 'media', 'carousel_display_exif', array( $this, 'carousel_display_exif_sanitize' ) );
-
- // No geo setting yet, need to "fuzzify" data first, for privacy
- // add_settings_field('carousel_display_geo', __( 'Geolocation', 'jetpack' ), array( $this, 'carousel_display_geo_callback' ), 'media', 'carousel_section' );
- // register_setting( 'media', 'carousel_display_geo', array( $this, 'carousel_display_geo_sanitize' ) );
- }
-
- // Fulfill the settings section callback requirement by returning nothing
- function carousel_section_callback() {
- return;
- }
-
- function test_1or0_option( $value, $default_to_1 = true ) {
- if ( true == $default_to_1 ) {
- // Binary false (===) of $value means it has not yet been set, in which case we do want to default sites to 1
- if ( false === $value ) {
- $value = 1;
- }
- }
- return ( 1 == $value ) ? 1 : 0;
- }
-
- function sanitize_1or0_option( $value ) {
- return ( 1 == $value ) ? 1 : 0;
- }
-
- function settings_checkbox( $name, $label_text, $extra_text = '', $default_to_checked = true ) {
- if ( empty( $name ) ) {
- return;
- }
- $option = $this->test_1or0_option( get_option( $name ), $default_to_checked );
- echo '<fieldset>';
- echo '<input type="checkbox" name="' . esc_attr( $name ) . '" id="' . esc_attr( $name ) . '" value="1" ';
- checked( '1', $option );
- echo '/> <label for="' . esc_attr( $name ) . '">' . $label_text . '</label>';
- if ( ! empty( $extra_text ) ) {
- echo '<p class="description">' . $extra_text . '</p>';
- }
- echo '</fieldset>';
- }
-
- function settings_select( $name, $values, $extra_text = '' ) {
- if ( empty( $name ) || ! is_array( $values ) || empty( $values ) ) {
- return;
- }
- $option = get_option( $name );
- echo '<fieldset>';
- echo '<select name="' . esc_attr( $name ) . '" id="' . esc_attr( $name ) . '">';
- foreach ( $values as $key => $value ) {
- echo '<option value="' . esc_attr( $key ) . '" ';
- selected( $key, $option );
- echo '>' . esc_html( $value ) . '</option>';
- }
- echo '</select>';
- if ( ! empty( $extra_text ) ) {
- echo '<p class="description">' . $extra_text . '</p>';
- }
- echo '</fieldset>';
- }
-
- function carousel_display_exif_callback() {
- $this->settings_checkbox( 'carousel_display_exif', __( 'Show photo metadata (<a href="http://en.wikipedia.org/wiki/Exchangeable_image_file_format" rel="noopener noreferrer" target="_blank">Exif</a>) in carousel, when available.', 'jetpack' ) );
- }
-
- function carousel_display_exif_sanitize( $value ) {
- return $this->sanitize_1or0_option( $value );
- }
-
- function carousel_display_geo_callback() {
- $this->settings_checkbox( 'carousel_display_geo', __( 'Show map of photo location in carousel, when available.', 'jetpack' ) );
- }
-
- function carousel_display_geo_sanitize( $value ) {
- return $this->sanitize_1or0_option( $value );
- }
-
- function carousel_background_color_callback() {
- $this->settings_select(
- 'carousel_background_color', array(
- 'black' => __( 'Black', 'jetpack' ),
- 'white' => __( 'White', 'jetpack' ),
- )
- );
- }
-
- function carousel_background_color_sanitize( $value ) {
- return ( 'white' == $value ) ? 'white' : 'black';
- }
-
- function carousel_enable_it_callback() {
- $this->settings_checkbox( 'carousel_enable_it', __( 'Display images in full-size carousel slideshow.', 'jetpack' ) );
- }
-
- function carousel_enable_it_sanitize( $value ) {
- return $this->sanitize_1or0_option( $value );
- }
-}
-
-new Jetpack_Carousel;
diff --git a/plugins/jetpack/modules/carousel/rtl/jetpack-carousel-rtl.css b/plugins/jetpack/modules/carousel/rtl/jetpack-carousel-rtl.css
deleted file mode 100644
index c42d454b..00000000
--- a/plugins/jetpack/modules/carousel/rtl/jetpack-carousel-rtl.css
+++ /dev/null
@@ -1,1130 +0,0 @@
-/* This file was automatically generated on Jul 30 2015 22:37:09 */
-
-.jp-carousel-wrap * {
- line-height:inherit; /* prevent declarations of line-height in the universal selector */
-}
-
-.jp-carousel-overlay {
- background: #000;
-}
-
-div.jp-carousel-fadeaway {
- background: -moz-linear-gradient(bottom, rgba(0,0,0,0.5), rgba(0,0,0,0));
- background: -webkit-gradient(linear, right bottom, right top, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0)));
- position: fixed;
- bottom: 0;
- z-index: 2147483647;
- width: 100%;
- height: 15px;
-}
-
-.jp-carousel-next-button span,
-.jp-carousel-previous-button span {
- background: url(.././images/arrows.png) no-repeat center center;
- background-size: 200px 126px;
-}
-
-.jp-carousel-msg {
- font-family: "Open Sans", sans-serif;
- font-style: normal;
- display: inline-block;
- line-height: 19px;
- padding: 11px 15px;
- font-size: 14px;
- text-align: center;
- margin: 25px 2px 0 20px;
- background-color: #fff;
- border-right: 4px solid #ffba00;
- -webkit-box-shadow: 0 0 1px 1px rgba(0,0,0,0.1);
- box-shadow: 0 0 1px 1px rgba(0,0,0,0.1);
-}
-
-@media
-only screen and (-webkit-min-device-pixel-ratio: 1.5),
-only screen and (-o-min-device-pixel-ratio: 3/2),
-only screen and (min--moz-device-pixel-ratio: 1.5),
-only screen and (min-device-pixel-ratio: 1.5) {
- .jp-carousel-next-button span,
- .jp-carousel-previous-button span {
- background-image: url(.././images/arrows-2x.png);
- }
-}
-
-.jp-carousel-wrap {
- font-family: "Helvetica Neue", sans-serif !important;
-}
-
-.jp-carousel-info {
- position: absolute;
- bottom: 0;
- text-align: right !important;
- -webkit-font-smoothing: subpixel-antialiased !important;
-}
-
-.jp-carousel-info ::selection {
- background: #68c9e8; /* Safari */
- color: #fff;
- }
-
-.jp-carousel-info ::-moz-selection {
- background: #68c9e8; /* Firefox */
- color: #fff;
-}
-
-.jp-carousel-photo-info {
- position: relative;
- right: 25%;
- width: 50%;
-}
-
-.jp-carousel-transitions .jp-carousel-photo-info {
- -webkit-transition: 400ms ease-out;
- -moz-transition: 400ms ease-out;
- -o-transition: 400ms ease-out;
- transition: 400ms ease-out;
-}
-
-.jp-carousel-info h2 {
- background: none !important;
- border: none !important;
- color: #999;
- display: block !important;
- font: normal 13px/1.25em "Helvetica Neue", sans-serif !important;
- letter-spacing: 0 !important;
- margin: 7px 0 0 0 !important;
- padding: 10px 0 0 !important;
- overflow: hidden;
- text-align: right;
- text-shadow: none !important;
- text-transform: none !important;
- -webkit-font-smoothing: subpixel-antialiased;
-}
-
-.jp-carousel-next-button,
-.jp-carousel-previous-button {
- text-indent: -9999px;
- overflow: hidden;
- cursor: pointer;
-}
-
-.jp-carousel-next-button span,
-.jp-carousel-previous-button span {
- position: absolute;
- top: 0;
- bottom: 0;
- width: 82px;
- zoom: 1;
- filter: alpha(opacity=20);
- opacity: 0.2;
-}
-
-.jp-carousel-transitions .jp-carousel-next-button span,
-.jp-carousel-transitions .jp-carousel-previous-button span {
- -webkit-transition: 500ms opacity ease-out;
- -moz-transition: 500ms opacity ease-out;
- -o-transition: 500ms opacity ease-out;
- transition: 500ms opacity ease-out;
-}
-
-.jp-carousel-next-button:hover span,
-.jp-carousel-previous-button:hover span {
- filter: alpha(opacity=60);
- opacity: 0.6;
-}
-.jp-carousel-next-button span {
- background-position: -110px center;
- left: 0;
-}
-
-.jp-carousel-previous-button span {
- background-position: -10px center;
- right:0;
-}
-
-.jp-carousel-buttons {
- margin:-18px -20px 15px;
- padding:8px 10px;
- border-bottom:1px solid #222;
- background: #222;
- text-align: center;
-}
-
-div.jp-carousel-buttons a {
- border: none !important;
- color: #999;
- font: normal 11px/1.2em "Helvetica Neue", sans-serif !important;
- letter-spacing: 0 !important;
- padding: 5px 0 5px 2px;
- text-decoration: none !important;
- text-shadow: none !important;
- vertical-align: middle;
- -webkit-font-smoothing: subpixel-antialiased;
-}
-
-div.jp-carousel-buttons a:hover {
- color: #68c9e8;
- border: none !important;
-}
-
-.jp-carousel-transitions div.jp-carousel-buttons a:hover {
- -webkit-transition: none !important;
- -moz-transition: none !important;
- -o-transition: none !important;
- transition: none !important;
-}
-
-.jp-carousel-slide, .jp-carousel-slide img, .jp-carousel-next-button,
-.jp-carousel-previous-button {
- -webkit-transform:translate3d(0, 0, 0);
- -moz-transform:translate3d(0, 0, 0);
- -o-transform:translate3d(0, 0, 0);
- -ms-transform:translate3d(0, 0, 0);
-}
-
-.jp-carousel-slide {
- position:fixed;
- width:0;
- bottom:0;
- background-color:#000;
- border-radius:2px;
- -webkit-border-radius:2px;
- -moz-border-radius:2px;
- -ms-border-radius:2px;
- -o-border-radius:2px;
-}
-
-.jp-carousel-transitions .jp-carousel-slide {
- -webkit-transition: 300ms ease-out;
- -moz-transition: 300ms ease-out;
- -o-transition: 300ms ease-out;
- transition: 300ms ease-out;
-}
-
-.jp-carousel-slide.selected {
- position: absolute !important;
- filter: alpha(opacity=100);
- opacity: 1;
-}
-
-.jp-carousel-slide {
- filter: alpha(opacity=25);
- opacity: 0.25;
-}
-
-.jp-carousel-slide img {
- display: block;
- width: 100% !important;
- height: 100% !important;
- max-width: 100% !important;
- max-height: 100% !important;
- background: none !important;
- border: none !important;
- padding: 0 !important;
- -webkit-box-shadow: 0 2px 8px rgba(0,0,0,0.1);
- -moz-box-shadow: 0 2px 8px rgba(0,0,0,0.1);
- box-shadow: 0 2px 8px rgba(0,0,0,0.1);
- zoom: 1;
-}
-
-.jp-carousel-transitions .jp-carousel-slide {
- -webkit-transition: opacity 400ms linear;
- -moz-transition: opacity 400ms linear;
- -o-transition: opacity 400ms linear;
- transition: opacity 400ms linear;
-}
-
-.jp-carousel-close-hint {
- color: #999;
- cursor: default;
- letter-spacing: 0 !important;
- padding:0.35em 0 0;
- position: absolute;
- text-align: right;
- width: 90%;
-}
-
-.jp-carousel-transitions .jp-carousel-close-hint {
- -webkit-transition: color 200ms linear;
- -moz-transition: color 200ms linear;
- -o-transition: color 200ms linear;
- transition: color 200ms linear;
-}
-
-.jp-carousel-close-hint span {
- cursor: pointer;
- background-color: black;
- background-color: rgba(0,0,0,0.8);
- display: block;
- height: 22px;
- font: 400 24px/1 "Helvetica Neue", sans-serif !important;
- line-height: 22px;
- margin: 0 0.4em 0 0;
- text-align: center;
- vertical-align: middle;
- width: 22px;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
-}
-
-.jp-carousel-transitions .jp-carousel-close-hint span {
- -webkit-transition: border-color 200ms linear;
- -moz-transition: border-color 200ms linear;
- -o-transition: border-color 200ms linear;
- transition: border-color 200ms linear;
-}
-
-.jp-carousel-close-hint:hover {
- cursor: default;
- color: #fff;
-}
-
-.jp-carousel-close-hint:hover span {
- border-color: #fff;
-}
-
-div.jp-carousel-buttons a.jp-carousel-reblog,
-div.jp-carousel-buttons a.jp-carousel-commentlink,
-a.jp-carousel-image-download {
- background: url(.././images/carousel-sprite.png?5) no-repeat;
- background-size: 16px 200px;
-}
-
-div.jp-carousel-buttons a.jp-carousel-reblog,
-div.jp-carousel-buttons a.jp-carousel-commentlink {
- margin: 0 0 0 14px !important;
-}
-
-div.jp-carousel-buttons a.jp-carousel-reblog.reblogged {
- background-color: #303030;
- padding-left: 8px !important;
- border-radius: 2px;
- border-radius: 2px;
- -webkit-border-radius:2px;
- -moz-border-radius:2px;
- -ms-border-radius:2px;
- -o-border-radius:2px;
-}
-
-div.jp-carousel-buttons a.jp-carousel-reblog.reblogged {
- margin: 0 -12px 0 2px !important;
-}
-
-div.jp-carousel-buttons a.jp-carousel-reblog,
-div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover {
- background-position: 6px -36px;
- padding-left: auto !important;
- padding-right: 26px !important;
- color: #999;
-}
-
-div.jp-carousel-buttons a.jp-carousel-commentlink {
- background-position: 0px -156px;
- padding-right: 19px !important;
-}
-
-div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover {
- cursor: default;
-}
-
-div.jp-carousel-buttons a.jp-carousel-reblog:hover {
- background-position: 6px -56px;
- color: #68c9e8;
-}
-
-@media
-only screen and (-webkit-min-device-pixel-ratio: 1.5),
-only screen and (-o-min-device-pixel-ratio: 3/2),
-only screen and (min--moz-device-pixel-ratio: 1.5),
-only screen and (min-device-pixel-ratio: 1.5) {
- div.jp-carousel-buttons a.jp-carousel-reblog,
- div.jp-carousel-buttons a.jp-carousel-commentlink,
- a.jp-carousel-image-download {
- background-image: url(.././images/carousel-sprite-2x.png?5);
- }
-}
-
-/* reblog */
-div#carousel-reblog-box {
- background: #222;
- background: -moz-linear-gradient(bottom, #222, #333);
- background: -webkit-gradient(linear, right bottom, right top, from(#222), to(#333));
- padding: 3px 0 0;
- display: none;
- margin: 5px auto 0;
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
- -webkit-box-shadow: 0 0 20px rgba(0,0,0,0.9);
- -moz-box-shadow: 0 0 20px rgba(0,0,0,0.9);
- box-shadow: 0 0 20px rgba(0,0,0,0.9);
- height: 74px;
- width: 565px;
-}
-
-#carousel-reblog-box textarea {
- background: #999;
- font: 13px/1.4 "Helvetica Neue", sans-serif !important;
- color: #444;
- padding: 3px 6px;
- width: 370px;
- height: 48px;
- float: right;
- margin: 6px 9px 0 9px;
- border: 1px solid #666;
- -webkit-box-shadow: inset 2px 2px 2px rgba(0,0,0,0.2);
- box-shadow: inset 2px 2px 2px rgba(0,0,0,0.2);
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
-}
-
-#carousel-reblog-box textarea:focus {
- background: #ccc;
- color: #222;
-}
-
-#carousel-reblog-box label {
- color: #aaa;
- font-size: 11px;
- padding-left: 2px;
- padding-right: 2px;
- display: inline;
- font-weight: normal;
-}
-
-#carousel-reblog-box select {
- width: 110px;
- padding: 0;
- font-size: 12px;
- font-family: "Helvetica Neue", sans-serif !important;
- background: #333;
- color: #eee;
- border: 1px solid #444;
- margin-top:5px;
-}
-
-#carousel-reblog-box .submit,
-#wrapper #carousel-reblog-box p.response {
- float: right;
- width: 154px;
- padding-top: 0;
- padding-right: 1px;
- overflow: hidden;
- height: 34px;
- margin:3px 2px 0 0 !important;
-}
-
-#wrapper #carousel-reblog-box p.response {
- font-size: 13px;
- clear: none;
- padding-right: 2px;
- height: 34px;
- color: #aaa;
-}
-
-#carousel-reblog-box input#carousel-reblog-submit, #jp-carousel-comment-form-button-submit {
- font: 13px/24px "Helvetica Neue", sans-serif !important;
- margin-top: 8px;
- padding: 0 10px !important;
- border-radius: 1em;
- height: 24px;
- color: #333;
- cursor:pointer;
- font-weight: normal;
- background: #aaa;
- background: -moz-linear-gradient(bottom, #aaa, #ccc);
- background: -webkit-gradient(linear, right bottom, right top, from(#aaa), to(#ccc));
- border: 1px solid #444;
-}
-
-#carousel-reblog-box input#carousel-reblog-submit:hover, #jp-carousel-comment-form-button-submit:hover {
- background: #ccc;
- background: -moz-linear-gradient(bottom, #ccc, #eee);
- background: -webkit-gradient(linear, right bottom, right top, from(#ccc), to(#eee));
-}
-
-#carousel-reblog-box .canceltext {
- color: #aaa;
- font-size: 11px;
- line-height: 24px;
-}
-
-#carousel-reblog-box .canceltext a {
- color: #fff;
-}
-/* reblog end */
-
-
-/** Title and Desc Start **/
-.jp-carousel-titleanddesc {
- border-top: 1px solid #222;
- color: #999;
- font-size: 15px;
- padding-top: 24px;
- margin-bottom: 20px;
- font-weight:400;
-}
-.jp-carousel-titleanddesc-title {
- font: 300 1.5em/1.1 "Helvetica Neue", sans-serif !important;
- text-transform: none !important; /* prevents uppercase from leaking through */
- color: #fff;
- margin: 0 0 15px;
- padding:0;
-}
-
-.jp-carousel-titleanddesc-desc p {
- color: #999;
- line-height:1.4;
- margin-bottom: 0.75em;
-}
-
-.jp-carousel-titleanddesc p a,
-.jp-carousel-comments p a,
-.jp-carousel-info h2 a {
- color: #fff !important;
- border: none !important;
- text-decoration: underline !important;
- font-weight: normal !important;
- font-style: normal !important;
-}
-
-.jp-carousel-titleanddesc p strong,
-.jp-carousel-titleanddesc p b {
- font-weight: bold;
- color: #999;
-}
-
-.jp-carousel-titleanddesc p em,
-.jp-carousel-titleanddesc p i {
- font-style: italic;
- color: #999;
-}
-
-
-.jp-carousel-titleanddesc p a:hover,
-.jp-carousel-comments p a:hover,
-.jp-carousel-info h2 a:hover {
- color: #68c9e8 !important;
-}
-
-.jp-carousel-titleanddesc p:empty {
- display: none;
-}
-
-.jp-carousel-photo-info h1:before,
-.jp-carousel-photo-info h1:after,
-.jp-carousel-left-column-wrapper h1:before,
-.jp-carousel-left-column-wrapper h1:after {
- content:none !important;
-}
-/** Title and Desc End **/
-
-/** Meta Box Start **/
-.jp-carousel-image-meta {
- background: #111;
- border: 1px solid #222;
- color: #fff;
- font-size: 13px;
- font: 12px/1.4 "Helvetica Neue", sans-serif !important;
- overflow: hidden;
- padding: 18px 20px;
- width: 209px !important;
-}
-
-.jp-carousel-image-meta li,
-.jp-carousel-image-meta h5 {
- font-family: "Helvetica Neue", sans-serif !important;
- position: inherit !important;
- top: auto !important;
- left: auto !important;
- right: auto !important;
- bottom: auto !important;
- background: none !important;
- border: none !important;
- font-weight: 400 !important;
- line-height: 1.3em !important;
-}
-
-.jp-carousel-image-meta ul {
- margin: 0 !important;
- padding: 0 !important;
- list-style: none !important;
-}
-
-.jp-carousel-image-meta li {
- width: 48% !important;
- float: right !important;
- margin: 0 0 15px 2% !important;
- color: #fff !important;
- font-size:13px !important;
-}
-
-.jp-carousel-image-meta h5 {
- color: #999 !important;
- text-transform: uppercase !important;
- font-size:10px !important;
- margin:0 0 2px !important;
- letter-spacing: 0.1em !important;
-}
-
-a.jp-carousel-image-download {
- padding-right: 23px;
- display: inline-block;
- clear: both;
- color: #999;
- line-height: 1;
- font-weight: 400;
- font-size: 13px;
- text-decoration: none;
- background-position: 0 -82px;
-}
-
-a.jp-carousel-image-download span.photo-size {
- font-size: 11px;
- border-radius: 1em;
- margin-right: 2px;
- display: inline-block;
-}
-
-a.jp-carousel-image-download span.photo-size-times {
- padding: 0 2px 0 1px;
-}
-
-a.jp-carousel-image-download:hover {
- background-position: 0 -122px;
- color: #68c9e8;
- border: none !important;
-}
-
-/** Meta Box End **/
-
-/** GPS Map Start **/
-.jp-carousel-image-map {
- position: relative;
- margin: -20px -20px 20px;
- border-bottom: 1px solid rgba( 255, 255, 255, 0.17 );
- height: 154px;
-}
-
-.jp-carousel-image-map img.gmap-main {
- -moz-border-radius-topleft: 6px;
- border-top-right-radius: 6px;
- border-left: 1px solid rgba( 255, 255, 255, 0.17 );
-}
-.jp-carousel-image-map div.gmap-topright {
- width: 94px;
- height: 154px;
- position: absolute;
- top: 0;
- left: 0;
-}
-.jp-carousel-image-map div.imgclip {
- overflow: hidden;
- -moz-border-radius-topright: 6px;
- border-top-left-radius: 6px;
-}
-.jp-carousel-image-map div.gmap-topright img {
- margin-right: -40px;
-}
-.jp-carousel-image-map img.gmap-bottomright {
- position: absolute;
- top: 96px;
- left: 0;
-}
-
-/** Comments Start **/
-.jp-carousel-comments {
- font: 15px/1.7 "Helvetica Neue", sans-serif !important;
- font-weight: 400;
- background:none transparent;
-}
-
-.jp-carousel-comments p a:hover, .jp-carousel-comments p a:focus, .jp-carousel-comments p a:active {
- color: #68c9e8 !important;
-}
-
-.jp-carousel-comment {
- background:none transparent;
- color: #999;
- margin-bottom: 20px;
- clear:right;
- overflow: auto;
- width: 100%
-}
-
-.jp-carousel-comment p {
- color: #999 !important;
-}
-
-.jp-carousel-comment .comment-author {
- font-size: 13px;
- font-weight:400;
- padding:0;
- width:auto;
- display: inline;
- float:none;
- border:none;
- margin:0;
-}
-
-.jp-carousel-comment .comment-author a {
- color: #fff;
-}
-
-.jp-carousel-comment .comment-gravatar {
- float:right;
-}
-
-.jp-carousel-comment .comment-content {
- border:none;
- margin-right:85px;
- padding: 0;
-}
-
-.jp-carousel-comment .avatar {
- margin:0 0 0 20px;
- -moz-border-radius: 4px;
- -webkit-border-radius: 4px;
- border-radius: 4px;
- border: none !important;
- padding: 0 !important;
- background-color: transparent !important;
-}
-
-.jp-carousel-comment .comment-date {
- color:#999;
- margin-top: 4px;
- font-size:11px;
- display: inline;
- float: left;
- /*clear: right;*/
-}
-
-#jp-carousel-comment-form {
- margin:0 0 10px !important;
- float: right;
- width: 100%;
-}
-
-textarea#jp-carousel-comment-form-comment-field {
- background: rgba(34,34,34,0.9);
- border: 1px solid #3a3a3a;
- color: #aaa;
- font: 15px/1.4 "Helvetica Neue", sans-serif !important;
- width: 100%;
- padding: 10px 10px 5px;
- margin: 0;
- float: none;
- height: 147px;
- -webkit-box-shadow: inset 2px 2px 2px rgba(0,0,0,0.2);
- box-shadow: inset 2px 2px 2px rgba(0,0,0,0.2);
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
- overflow: hidden;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-textarea#jp-carousel-comment-form-comment-field::-webkit-input-placeholder {
- color: #555;
-}
-
-textarea#jp-carousel-comment-form-comment-field:focus {
- background: #ccc;
- color: #222;
-}
-
-textarea#jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder {
- color: #aaa;
-}
-
-#jp-carousel-comment-form-spinner {
- color: #fff;
- margin:22px 10px 0 0;
- display: block;
- width: 20px;
- height: 20px;
- float: right;
-}
-
-#jp-carousel-comment-form-submit-and-info-wrapper {
- display: none;
- /*margin-bottom:15px;*/
- overflow: hidden;
- width: 100%
-}
-
-#jp-carousel-comment-form-commenting-as {
-}
-
-#jp-carousel-comment-form-commenting-as input {
- background: rgba(34,34,34,0.9);
- border: 1px solid #3a3a3a;
- color: #aaa;
- font: 13px/1.4 "Helvetica Neue", sans-serif !important;
- padding: 3px 6px;
- float: right;
- -webkit-box-shadow: inset 2px 2px 2px rgba(0,0,0,0.2);
- box-shadow: inset 2px 2px 2px rgba(0,0,0,0.2);
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
- width:285px;
-}
-
-#jp-carousel-comment-form-commenting-as input:focus {
- background: #ccc;
- color: #222;
-}
-
-#jp-carousel-comment-form-commenting-as p {
- font: 400 13px/1.7 "Helvetica Neue", sans-serif !important;
- margin:22px 0 0;
- float: right;
-}
-
-#jp-carousel-comment-form-commenting-as fieldset {
- float:right;
- border:none;
- margin:20px 0 0 0;
- padding:0;
-}
-
-#jp-carousel-comment-form-commenting-as fieldset {
- clear: both;
-}
-
-#jp-carousel-comment-form-commenting-as label {
- font: 400 13px/1.7 "Helvetica Neue", sans-serif !important;
- margin:0 0 3px 20px;
- float:right;
- width:100px;
-}
-
-#jp-carousel-comment-form-button-submit {
- margin-top: 20px;
- float:left;
-}
-
-#js-carousel-comment-form-container {
- margin-bottom:15px;
- overflow: auto;
- width: 100%;
-}
-
-#jp-carousel-comment-form-container {
- margin-bottom:15px;
- overflow: auto;
- width: 100%;
-}
-
-#jp-carousel-comment-post-results {
- display: none;
- overflow:auto;
- width:100%;
-}
-
-#jp-carousel-comment-post-results span {
- display:block;
- text-align: center;
- margin-top:20px;
- width: 100%;
- overflow: auto;
- padding: 1em 0;
- box-sizing: border-box;
- background: rgba( 0, 0, 0, 0.7 );
- border-radius: 2px;
- font: 13px/1.4 "Helvetica Neue", sans-serif !important;
- border: 1px solid rgba( 255, 255, 255, 0.17 );
- -webkit-box-shadow: inset 0px 5px 5px 0px rgba(0, 0, 0, 1);
- box-shadow: inset 0px 5px 5px 0px rgba(0, 0, 0, 1);
-}
-
-.jp-carousel-comment-post-error {
- color:#DF4926;
-}
-
-.jp-carousel-comment-post-success {
- /*color:#21759B;*/
-}
-
-#jp-carousel-comments-closed {
- display: none;
- color: #999;
-}
-
-#jp-carousel-comments-loading {
- font: 400 15px/1.7 "Helvetica Neue", sans-serif !important;
- display: none;
- color: #999;
- text-align: right;
- margin-bottom: 20px;
-}
-
-
-/* ----- Light variant ----- */
-
-.jp-carousel-light .jp-carousel-overlay {
- background: #fff;
-}
-
-.jp-carousel-light .jp-carousel-next-button:hover span,
-.jp-carousel-light .jp-carousel-previous-button:hover span {
- opacity: 0.8;
-}
-
-.jp-carousel-light .jp-carousel-close-hint:hover,
-.jp-carousel-light .jp-carousel-titleanddesc div {
- color: #000 !important;
-}
-
-.jp-carousel-light .jp-carousel-comments p a,
-.jp-carousel-light .jp-carousel-comment .comment-author a,
-.jp-carousel-light .jp-carousel-titleanddesc p a,
-.jp-carousel-light .jp-carousel-titleanddesc p a,
-.jp-carousel-light .jp-carousel-comments p a,
-.jp-carousel-light .jp-carousel-info h2 a {
- color: #1e8cbe !important;
-}
-
-.jp-carousel-light .jp-carousel-comments p a:hover,
-.jp-carousel-light .jp-carousel-comment .comment-author a:hover,
-.jp-carousel-light .jp-carousel-titleanddesc p a:hover,
-.jp-carousel-light .jp-carousel-titleanddesc p a:hover,
-.jp-carousel-light .jp-carousel-comments p a:hover,
-.jp-carousel-light .jp-carousel-info h2 a:hover {
- color: #f1831e !important;
-}
-
-.jp-carousel-light .jp-carousel-info h2,
-.jp-carousel-light .jp-carousel-titleanddesc,
-.jp-carousel-light .jp-carousel-titleanddesc p,
-.jp-carousel-light .jp-carousel-comment,
-.jp-carousel-light .jp-carousel-comment p,
-.jp-carousel-light div.jp-carousel-buttons a,
-.jp-carousel-light .jp-carousel-titleanddesc p strong,
-.jp-carousel-light .jp-carousel-titleanddesc p b,
-.jp-carousel-light .jp-carousel-titleanddesc p em,
-.jp-carousel-light .jp-carousel-titleanddesc p i {
- color: #666;
-}
-
-.jp-carousel-light .jp-carousel-buttons {
- border-bottom-color: #f0f0f0;
- background: #f5f5f5;
-}
-
-.jp-carousel-light div.jp-carousel-buttons a:hover {
- text-decoration: none;
- color: #f1831e;
-}
-
-.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog,
-.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog:hover {
- background-position: 4px -56px;
- padding-right: 24px !important;
-}
-
-.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged {
- background-color: #2ea2cc;
- color: #fff;
-}
-
-.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-commentlink {
- background-position: 0px -176px;
-}
-
-.jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged {
- background-position: 5px -36px;
-}
-
-.jp-carousel-light div#carousel-reblog-box {
- background: #eee;
- background: -moz-linear-gradient(bottom, #ececec, #f7f7f7);
- background: -webkit-gradient(linear, right bottom, right top, from(#ececec), to(#f7f7f7));
- -webkit-box-shadow: 0 2px 6px rgba(0,0,0,0.1);
- -moz-box-shadow: 0 2px 10px rgba(0,0,0,0.1);
- box-shadow: 0 2px 10px rgba(0,0,0,0.1);
- border:1px solid #ddd;
-}
-
-.jp-carousel-light #carousel-reblog-box textarea {
- border: 1px inset #ccc;
- color: #666;
- border: 1px solid #cfcfcf;
- background: #fff;
-}
-
-.jp-carousel-light #carousel-reblog-box .canceltext {
- color: #888;
-}
-
-.jp-carousel-light #carousel-reblog-box .canceltext a {
- color: #666;
-}
-
-.jp-carousel-light #carousel-reblog-box select {
- background: #eee;
- color: #333;
- border: 1px solid #aaa;
-}
-
-.jp-carousel-light #carousel-reblog-box input#carousel-reblog-submit, #jp-carousel-comment-form-button-submit {
- color: #333;
- background: #fff;
- background: -moz-linear-gradient(bottom, #ddd, #fff);
- background: -webkit-gradient(linear, right bottom, right top, from(#ddd), to(#fff));
- border: 1px solid #aaa;
-}
-
-.jp-carousel-light .jp-carousel-image-meta {
- background: #fafafa;
- border: 1px solid #eee;
- border-top-color: #f5f5f5;
- border-right-color: #f5f5f5;
- color: #333;
-}
-
-.jp-carousel-light .jp-carousel-image-meta li {
- color: #000 !important;
-}
-
-.jp-carousel-light .jp-carousel-close-hint {
- color: #ccc;
-}
-
-.jp-carousel-light .jp-carousel-close-hint span {
- background-color: white;
- border-color: #ccc;
-}
-
-.jp-carousel-light #jp-carousel-comment-form-comment-field::-webkit-input-placeholder {
- color: #aaa;
-}
-
-.jp-carousel-light #jp-carousel-comment-form-comment-field:focus {
- color: #333;
-}
-
-.jp-carousel-light #jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder {
- color: #ddd;
-}
-
-.jp-carousel-light a.jp-carousel-image-download {
- background-position: 0 -122px;
-}
-
-.jp-carousel-light a.jp-carousel-image-download:hover {
- background-position: 0 -122px;
- color: #f1831e;
-}
-
-.jp-carousel-light textarea#jp-carousel-comment-form-comment-field {
- background: #fbfbfb;
- color: #333;
- border: 1px solid #dfdfdf;
- -webkit-box-shadow: inset 2px 2px 2px rgba(0,0,0,0.1);
- box-shadow: inset 2px 2px 2px rgba(0,0,0,0.1);
-}
-
-.jp-carousel-light #jp-carousel-comment-form-commenting-as input {
- background: #fbfbfb;
- border: 1px solid #dfdfdf;
- color: #333;
- -webkit-box-shadow: inset 2px 2px 2px rgba(0,0,0,0.1);
- box-shadow: inset 2px 2px 2px rgba(0,0,0,0.1);
-}
-
-.jp-carousel-light #jp-carousel-comment-form-commenting-as input:focus {
- background: #fbfbfb;
- color: #333;
-}
-
-.jp-carousel-light #jp-carousel-comment-post-results span {
- background: #f7f7f7;
- border:1px solid #dfdfdf;
- -webkit-box-shadow: inset 0px 0px 5px rgba(0, 0, 0, 0.05);
- box-shadow: inset 0px 0px 5px rgba(0, 0, 0, 0.05);
-}
-
-.jp-carousel-light .jp-carousel-slide {
- background-color:#fff;
-}
-
-.jp-carousel-light .jp-carousel-titleanddesc {
- border-top: 1px solid #eee;
-}
-
-.jp-carousel-light .jp-carousel-fadeaway {
- background: -moz-linear-gradient(bottom, rgba(255,255,255,0.75), rgba(255,255,255,0));
- background: -webkit-gradient(linear, right bottom, right top, from(rgba(255,255,255,0.75)), to(rgba(255,255,255,0)));
-}
-
-/* Small screens */
-@media only screen and (max-width: 760px) {
-
- .jp-carousel-info {
- margin: 0 10px !important;
- }
-
- .jp-carousel-next-button, .jp-carousel-previous-button {
- display: none !important;
- }
-
- .jp-carousel-buttons {
- display: none !important;
- }
-
- .jp-carousel-image-meta {
- float: none !important;
- width: 100% !important;
- -moz-box-sizing:border-box;
- -webkit-box-sizing:border-box;
- box-sizing: border-box;
- }
-
- .jp-carousel-close-hint {
- font-weight: 800 !important;
- font-size: 26px !important;
- position: fixed !important;
- top: -10px;
- }
-
- .jp-carousel-slide img {
- filter: alpha(opacity=100);
- opacity: 1;
- }
-
- .jp-carousel-wrap {
- background-color: #000;
- }
-
- .jp-carousel-fadeaway {
- display: none;
- }
-
- #jp-carousel-comment-form-container {
- display: none !important;
- }
-
- .jp-carousel-titleanddesc {
- padding-top: 0 !important;
- border: none !important;
- }
- .jp-carousel-titleanddesc-title {
- font-size: 1em !important;
- }
-
- .jp-carousel-left-column-wrapper {
- padding: 0;
- width: 100% !important;
- }
-
- .jp-carousel-photo-info {
- right: 0 !important;
- width: 100% !important;
- }
-}
diff --git a/plugins/jetpack/modules/comment-likes.php b/plugins/jetpack/modules/comment-likes.php
deleted file mode 100644
index 4fd73751..00000000
--- a/plugins/jetpack/modules/comment-likes.php
+++ /dev/null
@@ -1,205 +0,0 @@
-<?php
-/**
- * Module Name: Comment Likes
- * Module Description: Increase visitor engagement by adding a Like button to comments.
- * Sort Order: 39
- * Recommendation Order: 17
- * First Introduced: 5.1
- * Requires Connection: Yes
- * Auto Activate: No
- * Module Tags: Social
- * Additional Search Queries: like widget, like button, like, likes
- */
-
-Jetpack::dns_prefetch(
- array(
- '//widgets.wp.com',
- )
-);
-
-require_once dirname( __FILE__ ) . '/likes/jetpack-likes-master-iframe.php';
-require_once dirname( __FILE__ ) . '/likes/jetpack-likes-settings.php';
-
-class Jetpack_Comment_Likes {
- public static function init() {
- static $instance = NULL;
-
- if ( ! $instance ) {
- $instance = new Jetpack_Comment_Likes;
- }
-
- return $instance;
- }
-
- private function __construct() {
- $this->settings = new Jetpack_Likes_Settings();
- $this->blog_id = Jetpack_Options::get_option( 'id' );
- $this->url = home_url();
- $this->url_parts = parse_url( $this->url );
- $this->domain = $this->url_parts['host'];
-
- add_action( 'template_redirect', array( $this, 'frontend_init' ) );
- add_action( 'admin_init', array( $this, 'admin_init' ) );
-
- if ( ! Jetpack::is_module_active( 'likes' ) ) {
- $active = Jetpack::get_active_modules();
-
- if ( ! in_array( 'sharedaddy', $active ) && ! in_array( 'publicize', $active ) ) {
- // we don't have a sharing page yet
- add_action( 'admin_menu', array( $this->settings, 'sharing_menu' ) );
- }
-
- if ( in_array( 'publicize', $active ) && ! in_array( 'sharedaddy', $active ) ) {
- // we have a sharing page but not the global options area
- add_action( 'pre_admin_screen_sharing', array( $this->settings, 'sharing_block' ), 20 );
- add_action( 'pre_admin_screen_sharing', array( $this->settings, 'updated_message' ), -10 );
- }
-
- if( ! in_array( 'sharedaddy', $active ) ) {
- add_action( 'admin_init', array( $this->settings, 'process_update_requests_if_sharedaddy_not_loaded' ) );
- add_action( 'sharing_global_options', array( $this->settings, 'admin_settings_showbuttonon_init' ), 19 );
- add_action( 'sharing_admin_update', array( $this->settings, 'admin_settings_showbuttonon_callback' ), 19 );
- add_action( 'admin_init', array( $this->settings, 'add_meta_box' ) );
- } else {
- add_filter( 'sharing_meta_box_title', array( $this->settings, 'add_likes_to_sharing_meta_box_title' ) );
- add_action( 'start_sharing_meta_box_content', array( $this->settings, 'meta_box_content' ) );
- }
-
- add_action( 'save_post', array( $this->settings, 'meta_box_save' ) );
- add_action( 'edit_attachment', array( $this->settings, 'meta_box_save' ) );
- add_action( 'sharing_global_options', array( $this->settings, 'admin_settings_init' ), 20 );
- add_action( 'sharing_admin_update', array( $this->settings, 'admin_settings_callback' ), 20 );
- }
- }
-
- public function admin_init() {
- add_filter( 'manage_edit-comments_columns', array( $this, 'add_like_count_column' ) );
- add_action( 'manage_comments_custom_column', array( $this, 'comment_likes_edit_column' ), 10, 2 );
- add_action( 'admin_print_styles-edit-comments.php', array( $this, 'enqueue_admin_styles_scripts' ) );
- }
-
- public function comment_likes_edit_column( $column_name, $comment_id ) {
- if ( 'comment_likes' !== $column_name ) {
- return;
- }
-
- $permalink = get_permalink( get_the_ID() );
- ?>
- <a
- data-comment-id="<?php echo absint( $comment_id ); ?>"
- data-blog-id="<?php echo absint( $this->blog_id ); ?>"
- class="comment-like-count"
- id="comment-like-count-<?php echo absint( $comment_id ); ?>"
- href="<?php echo esc_url( $permalink ); ?>#comment-<?php echo absint( $comment_id ); ?>"
- >
- <span class="like-count">0</span>
- </a>
- <?php
- }
-
- function enqueue_admin_styles_scripts() {
- wp_enqueue_style( 'comment-like-count', plugins_url( 'comment-likes/admin-style.css', __FILE__ ), array(), JETPACK__VERSION );
- wp_enqueue_script(
- 'comment-like-count',
- Jetpack::get_file_url_for_environment(
- '_inc/build/comment-likes/comment-like-count.min.js',
- 'modules/comment-likes/comment-like-count.js'
- ),
- array( 'jquery' ),
- JETPACK__VERSION
- );
- }
-
- public function add_like_count_column( $columns ) {
- $columns['comment_likes'] = '<span class="vers"></span>';
-
- return $columns;
- }
-
- public function frontend_init() {
- if ( Jetpack_AMP_Support::is_amp_request() ) {
- return;
- }
-
- add_action( 'wp_enqueue_scripts', array( $this, 'load_styles_register_scripts' ) );
- add_filter( 'comment_text', array( $this, 'comment_likes' ), 10, 2 );
- }
-
- public function load_styles_register_scripts() {
- if ( ! wp_style_is( 'open-sans', 'registered' ) ) {
- wp_register_style( 'open-sans', 'https://fonts.googleapis.com/css?family=Open+Sans', array(), JETPACK__VERSION );
- }
- wp_enqueue_style( 'jetpack_likes', plugins_url( 'likes/style.css', __FILE__ ), array( 'open-sans' ), JETPACK__VERSION );
- wp_enqueue_script(
- 'postmessage',
- Jetpack::get_file_url_for_environment( '_inc/build/postmessage.min.js', '_inc/postmessage.js' ),
- array( 'jquery' ),
- JETPACK__VERSION,
- false
- );
- wp_enqueue_script(
- 'jetpack_resize',
- Jetpack::get_file_url_for_environment(
- '_inc/build/jquery.jetpack-resize.min.js',
- '_inc/jquery.jetpack-resize.js'
- ),
- array( 'jquery' ),
- JETPACK__VERSION,
- false
- );
- wp_enqueue_script( 'jetpack_likes_queuehandler', plugins_url( 'likes/queuehandler.js' , __FILE__ ), array( 'jquery', 'postmessage', 'jetpack_resize' ), JETPACK__VERSION, true );
- }
-
- public function comment_likes( $content, $comment = null ) {
- if ( empty( $comment ) ) {
- return $content;
- }
-
- if ( ! $this->settings->is_likes_visible() ) {
- return $content;
- }
-
- $comment_id = get_comment_ID();
- if ( empty( $comment_id ) && ! empty( $comment->comment_ID ) ) {
- $comment_id = $comment->comment_ID;
- }
-
- if ( empty( $content ) || empty( $comment_id ) ) {
- return $content;
- }
-
- // In case master iframe hasn't been loaded. This could be the case when Post Likes module is disabled,
- // or on pages on which we have comments but post likes are disabled.
- if ( false === has_action( 'wp_footer', 'jetpack_likes_master_iframe' ) ) {
- add_action( 'wp_footer', 'jetpack_likes_master_iframe', 21 );
- }
-
- $uniqid = uniqid();
-
- $src = sprintf( 'https://widgets.wp.com/likes/#blog_id=%1$d&amp;comment_id=%2$d&amp;origin=%3$s&amp;obj_id=%1$d-%2$d-%4$s', $this->blog_id, $comment_id, $this->domain, $uniqid );
- $name = sprintf( 'like-comment-frame-%1$d-%2$d-%3$s', $this->blog_id, $comment_id, $uniqid );
- $wrapper = sprintf( 'like-comment-wrapper-%1$d-%2$d-%3$s', $this->blog_id, $comment_id, $uniqid );
-
- $html = '';
- $html .= "<div class='jetpack-comment-likes-widget-wrapper jetpack-likes-widget-unloaded' id='$wrapper' data-src='$src' data-name='$name'>";
- $html .= "<div class='likes-widget-placeholder comment-likes-widget-placeholder comment-likes'><span class='loading'>" . esc_html__( 'Loading...', 'jetpack' ) . "</span></div>";
- $html .= "<div class='comment-likes-widget jetpack-likes-widget comment-likes'><span class='comment-like-feedback'></span>";
- $html .= "<span class='sd-text-color'></span><a class='sd-link-color'></a>";
- $html .= '</div></div>';
-
- /**
- * Filters the Comment Likes button content.
- *
- * @module comment-likes
- *
- * @since 5.1.0
- *
- * @param string $html Comment Likes button content.
- */
- $like_button = apply_filters( 'comment_like_button', $html );
-
- return $content . $like_button;
- }
-}
-
-Jetpack_Comment_Likes::init();
diff --git a/plugins/jetpack/modules/comment-likes/admin-style.css b/plugins/jetpack/modules/comment-likes/admin-style.css
deleted file mode 100644
index 7079fe7e..00000000
--- a/plugins/jetpack/modules/comment-likes/admin-style.css
+++ /dev/null
@@ -1,45 +0,0 @@
-.fixed .column-comment_likes {
- width: 5.5em;
- padding: 8px 0;
- text-align: center;
-}
-
-.fixed .column-stats {
- width: 5em;
-}
-
-.fixed .column-comment_likes .comment-like-count {
- box-sizing: border-box;
- display: inline-block;
- padding: 0 8px;
- height: 2em;
- margin-top: 5px;
- -webkit-border-radius: 5px;
- border-radius: 5px;
- background-color: #72777c;
- color: #fff;
- font-size: 11px;
- line-height: 21px;
-}
-
-.fixed .column-comment_likes .comment-like-count:after {
- border: none;
-}
-
-.fixed .column-comment_likes .comment-like-count:hover {
- background-color: #0073aa;
-}
-
-.fixed .column-comment_likes .vers:before {
- font: normal 20px/1 dashicons;
- content: '\f155';
- speak: none;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-@media screen and (max-width: 782px) {
- .fixed .column-comment_likes {
- display: none;
- }
-}
diff --git a/plugins/jetpack/modules/comment-likes/comment-like-count.js b/plugins/jetpack/modules/comment-likes/comment-like-count.js
deleted file mode 100644
index 950b306b..00000000
--- a/plugins/jetpack/modules/comment-likes/comment-like-count.js
+++ /dev/null
@@ -1,38 +0,0 @@
-jQuery( document ).ready( function( $ ) {
- var jsonAPIbase = 'https://public-api.wordpress.com/rest/v1',
- APIqueue = [];
-
- function getCommentLikeCounts() {
- $( '.comment-like-count' ).each( function() {
- var blogId = $( this ).attr( 'data-blog-id' ),
- commentId = $( this ).attr( 'data-comment-id' );
-
- APIqueue.push( '/sites/' + blogId + '/comments/' + commentId + '/likes' );
- } );
-
- return $.ajax( {
- type: 'GET',
- url: jsonAPIbase + '/batch',
- dataType: 'jsonp',
- data: 'urls[]=' + APIqueue.map( encodeURIComponent ).join( '&urls[]=' ),
- success: function( response ) {
- for ( var path in response ) {
- if ( ! response[ path ].error_data ) {
- var urlPieces = path.split( '/' ),
- commentId = urlPieces[ 4 ],
- likeCount = response[ path ].found;
-
- if ( likeCount < 1 ) {
- return;
- }
-
- $( '#comment-like-count-' + commentId ).find( '.like-count' ).hide().text( likeCount ).fadeIn();
- }
- }
- },
- error: function() {}
- } );
- }
-
- getCommentLikeCounts();
-} );
diff --git a/plugins/jetpack/modules/comments.php b/plugins/jetpack/modules/comments.php
deleted file mode 100644
index 7e1ba01a..00000000
--- a/plugins/jetpack/modules/comments.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/**
- * Module Name: Comments
- * Module Description: Let readers use WordPress.com, Twitter, Facebook, or Google+ accounts to comment
- * First Introduced: 1.4
- * Sort Order: 20
- * Requires Connection: Yes
- * Auto Activate: No
- * Module Tags: Social
- * Feature: Engagement
- * Additional Search Queries: comments, comment, facebook, twitter, google+, social
- */
-
-require dirname( __FILE__ ) . '/comments/comments.php';
-
-if ( is_admin() ) {
- require dirname( __FILE__ ) . '/comments/admin.php';
-}
-
-function jetpack_comments_load() {
- Jetpack::enable_module_configurable( __FILE__ );
- Jetpack::module_configuration_load( __FILE__, 'jetpack_comments_configuration_load' );
-}
-
-function jetpack_comments_configuration_load() {
- wp_safe_redirect( admin_url( 'options-discussion.php#jetpack-comments-settings' ) );
- exit;
-}
-
-add_action( 'jetpack_modules_loaded', 'jetpack_comments_load' );
-
-Jetpack::dns_prefetch( array(
- '//jetpack.wordpress.com',
- '//s0.wp.com',
- '//s1.wp.com',
- '//s2.wp.com',
- '//public-api.wordpress.com',
- '//0.gravatar.com',
- '//1.gravatar.com',
- '//2.gravatar.com',
-) );
diff --git a/plugins/jetpack/modules/comments/admin.php b/plugins/jetpack/modules/comments/admin.php
deleted file mode 100644
index 59300465..00000000
--- a/plugins/jetpack/modules/comments/admin.php
+++ /dev/null
@@ -1,210 +0,0 @@
-<?php
-
-class Jetpack_Comments_Settings {
-
- /** Variables *************************************************************/
-
- /**
- * The Jetpack Coments singleton
- */
- public $jetpack_comments;
-
- /**
- * The default comment form greeting
- * @var string
- */
- public $default_greeting = ''; // Set in constructor
-
- /**
- * The default comment form color scheme
- * @var string
- */
- public $color_schemes = array();
-
- public static function init() {
- static $instance = false;
-
- if ( ! $instance ) {
- $instance = new Jetpack_Comments_Settings( Jetpack_Comments::init() );
- }
-
- return $instance;
- }
-
- public function __construct( Highlander_Comments_Base $jetpack_comments ) {
- $this->jetpack_comments = $jetpack_comments;
-
- // Setup settings
- add_action( 'admin_init', array( $this, 'add_settings' ) );
- $this->setup_globals();
- }
-
- /** Private Methods *******************************************************/
-
- /**
- * Set any global variables or class variables
- * @since JetpackComments (1.4)
- */
- protected function setup_globals() {
- // Default option values
- $this->default_greeting = __( 'Leave a Reply', 'jetpack' );
-
- // Possible color schemes
- $this->color_schemes = array(
- 'light' => __( 'Light', 'jetpack' ),
- 'dark' => __( 'Dark', 'jetpack' ),
- 'transparent' => __( 'Transparent', 'jetpack' ),
- );
- }
-
- /** Settings **************************************************************/
-
- /**
- * Add the Jetpack settings to WordPress's discussions page
- *
- * @since JetpackComments (1.4)
- */
- public function add_settings() {
-
- // Create the section
- add_settings_section(
- 'jetpack_comment_form',
- __( 'Comments', 'jetpack' ),
- array( $this, 'comment_form_settings_section' ),
- 'discussion'
- );
-
- /** Clever Greeting ***************************************************/
-
- add_settings_field(
- 'highlander_comment_form_prompt',
- __( 'Greeting Text', 'jetpack' ),
- array( $this, 'comment_form_greeting_setting' ),
- 'discussion',
- 'jetpack_comment_form'
- );
-
- register_setting(
- 'discussion',
- 'highlander_comment_form_prompt',
- array( $this, 'comment_form_greeting_sanitize' )
- );
-
- /** Color Scheme ******************************************************/
-
- add_settings_field(
- 'jetpack_comment_form_color_scheme',
- __( 'Color Scheme', 'jetpack' ),
- array( $this, 'comment_form_color_scheme_setting' ),
- 'discussion',
- 'jetpack_comment_form'
- );
-
- register_setting(
- 'discussion',
- 'jetpack_comment_form_color_scheme',
- array( $this, 'comment_form_color_scheme_sanitize' )
- );
- }
-
- /**
- * Discussions setting section blurb
- *
- * @since JetpackComments (1.4)
- */
- public function comment_form_settings_section() {
- ?>
-
- <p id="jetpack-comments-settings"><?php _e( 'Adjust your Comments form with a clever greeting and color-scheme.', 'jetpack' ); ?></p>
-
- <?php
- }
-
- /**
- * Custom Comment Greeting Text
- *
- * @since JetpackComments (1.4)
- */
- public function comment_form_greeting_setting() {
-
- // The greeting
- $greeting = get_option( 'highlander_comment_form_prompt', $this->default_greeting );
- ?>
-
- <input type="text" name="highlander_comment_form_prompt" id="jetpack-comment-form-greeting" value="<?php echo esc_attr( $greeting ); ?>" class="regular-text">
- <p class="description"><?php _e( 'A few catchy words to motivate your readers to comment', 'jetpack' ); ?></p>
-
- <?php
- }
-
- /**
- * Sanitize the clever comment greeting
- *
- * @since JetpackComments (1.4)
- * @param type $val
- * @return string
- */
- function comment_form_greeting_sanitize( $val ) {
-
- // Delete if empty or the default
- if ( empty( $val ) || ( $this->default_greeting == $val ) ) {
- delete_option( 'highlander_comment_form_prompt' );
- return false;
- }
-
- return wp_kses( $val, array() );
- }
-
- /**
- * Color Scheme Setting
- *
- * @since JetpackComments (1.4)
- */
- public function comment_form_color_scheme_setting() {
-
- // The color scheme
- $scheme = get_option( 'jetpack_comment_form_color_scheme', $this->jetpack_comments->default_color_scheme );
- ?>
-
- <fieldset>
- <legend class="screen-reader-text"><?php _e( 'Color Scheme', 'jetpack' ); ?></legend>
-
- <?php foreach ( $this->color_schemes as $key => $label ) : ?>
-
- <label>
- <input type="radio" name="jetpack_comment_form_color_scheme" id="jetpack-comment-form-color-scheme" value="<?php echo $key; ?>" <?php checked( $scheme, $key ); ?>>
- <?php echo $label; ?>
- </label>
- <br />
-
- <?php endforeach; ?>
-
- </fieldset>
-
- <?php
- }
-
- /**
- * Sanitize the color scheme
- *
- * @since JetpackComments (1.4)
- * @param type $val
- * @return string
- */
- public function comment_form_color_scheme_sanitize( $val ) {
-
- // Delete the option if it's...
- if (
- empty( $val ) || ! in_array( $val, array_keys( $this->color_schemes ) ) // ... unknown
- ||
- $val == $this->jetpack_comments->default_color_scheme // ... or the default
- ) {
- delete_option( 'jetpack_comment_form_color_scheme' );
- return false;
- }
-
- return $val;
- }
-}
-
-Jetpack_Comments_Settings::init();
diff --git a/plugins/jetpack/modules/comments/base.php b/plugins/jetpack/modules/comments/base.php
deleted file mode 100644
index ecbbf1c4..00000000
--- a/plugins/jetpack/modules/comments/base.php
+++ /dev/null
@@ -1,308 +0,0 @@
-<?php
-
-/**
- * All the code shared between WP.com Highlander and Jetpack Highlander
- */
-class Highlander_Comments_Base {
- function __construct() {
- $this->setup_globals();
- $this->setup_actions();
- $this->setup_filters();
- }
-
- /**
- * Set any global variables or class variables
- * @since JetpackComments (1.4)
- */
- protected function setup_globals() {}
-
- /**
- * Setup actions for methods in this class
- * @since JetpackComments (1.4)
- */
- protected function setup_actions() {
- // Before a comment is posted
- add_action( 'pre_comment_on_post', array( $this, 'allow_logged_out_user_to_comment_as_external' ) );
-
- // After a comment is posted
- add_action( 'comment_post', array( $this, 'set_comment_cookies' ) );
- }
-
- /**
- * Setup filters for methods in this class
- * @since JetpackComments (1.4)
- */
- protected function setup_filters() {
- add_filter( 'comments_array', array( $this, 'comments_array' ) );
- add_filter( 'preprocess_comment', array( $this, 'allow_logged_in_user_to_comment_as_guest' ), 0 );
- }
-
- /**
- * Is this a Highlander POST request?
- * Optionally restrict to one or more credentials slug (facebook, twitter, ...)
- *
- * @param string Comment credentials slug
- * @param ...
- * @return false|string false if it's not a Highlander POST request. The matching credentials slug if it is.
- */
- function is_highlander_comment_post() {
- if ( empty( $_POST['hc_post_as'] ) ) {
- return false;
- }
-
- if ( func_num_args() ) {
- foreach ( func_get_args() as $id_source ) {
- if ( $id_source === $_POST['hc_post_as'] ) {
- return $id_source;
- }
- }
- return false;
- }
-
- return is_string( $_POST['hc_post_as'] ) && in_array( $_POST['hc_post_as'], $this->id_sources ) ? $_POST['hc_post_as'] : false;
- }
-
- /**
- * Signs an array of scalars with the self-hosted blog's Jetpack Token
- *
- * @param array $parameters
- * @param string $key
- * @return string HMAC
- */
- static function sign_remote_comment_parameters( $parameters, $key ) {
- unset(
- $parameters['sig'], // Don't sign the signature
- $parameters['replytocom'] // This parameter is unsigned - it changes dynamically as the comment form moves from parent comment to parent comment
- );
-
- ksort( $parameters );
-
- $signing = array();
- foreach ( $parameters as $k => $v ) {
- if ( ! is_scalar( $v ) ) {
- return new WP_Error( 'invalid_input', __( 'Invalid request', 'jetpack' ) );
- }
-
- $signing[] = "{$k}={$v}";
- }
-
- return hash_hmac( 'sha1', implode( ':', $signing ), $key );
- }
-
- /*
- * After commenting as a guest while logged in, the user needs to see both:
- *
- * ( user_id = blah AND comment_approved = 0 )
- * and
- * ( comment_author_email = blah AND comment_approved = 0 )
- *
- * Core only does the first since the user is logged in.
- *
- * Add the second to the comments array.
- */
- function comments_array( $comments ) {
- global $wpdb, $post;
-
- $commenter = $this->get_current_commenter();
-
- if ( ! $commenter['user_id'] ) {
- return $comments;
- }
-
- if ( ! $commenter['comment_author'] ) {
- return $comments;
- }
-
- $in_moderation_comments = $wpdb->get_results(
- $wpdb->prepare(
- "SELECT * FROM `$wpdb->comments` WHERE `comment_post_ID` = %d AND `user_id` = 0 AND `comment_author` = %s AND `comment_author_email` = %s AND `comment_approved` = '0' ORDER BY `comment_date_gmt` /* Highlander_Comments_Base::comments_array() */",
- $post->ID,
- wp_specialchars_decode( $commenter['comment_author'], ENT_QUOTES ),
- $commenter['comment_author_email']
- )
- );
-
- if ( ! $in_moderation_comments ) {
- return $comments;
- }
-
- // @todo ZOMG this is a bad idea
- $comments = array_merge( $comments, $in_moderation_comments );
- usort( $comments, array( $this, 'sort_comments_by_comment_date_gmt' ) );
-
- return $comments;
- }
-
- /**
- * Comment sort comparator: comment_date_gmt
- *
- * @since JetpackComments (1.4)
- * @param object $a
- * @param object $b
- * @return int
- */
- public function sort_comments_by_comment_date_gmt( $a, $b ) {
- if ( $a->comment_date_gmt == $b->comment_date_gmt ) {
- return 0;
- }
-
- return $a->comment_date_gmt < $b->comment_date_gmt ? -1 : 1;
- }
-
- /**
- * Get the current commenter's information from their cookie
- *
- * @since JetpackComments (1.4)
- * @return array Commenters information from cookie
- */
- protected function get_current_commenter() {
- // Defaults
- $user_id = 0;
- $comment_author = '';
- $comment_author_email = '';
- $comment_author_url = '';
-
- if ( isset( $_COOKIE[ 'comment_author_' . COOKIEHASH ] ) ) {
- $comment_author = $_COOKIE[ 'comment_author_' . COOKIEHASH ];
- }
-
- if ( isset( $_COOKIE[ 'comment_author_email_' . COOKIEHASH ] ) ) {
- $comment_author_email = $_COOKIE[ 'comment_author_email_' . COOKIEHASH ];
- }
-
- if ( isset( $_COOKIE[ 'comment_author_url_' . COOKIEHASH ] ) ) {
- $comment_author_url = $_COOKIE[ 'comment_author_url_' . COOKIEHASH ];
- }
-
- if ( is_user_logged_in() ) {
- $user = wp_get_current_user();
- $user_id = $user->ID;
- }
-
- return compact( 'comment_author', 'comment_author_email', 'comment_author_url', 'user_id' );
- }
-
- /**
- * Allows a logged out user to leave a comment as a facebook or twitter credentialed user.
- * Overrides WordPress' core comment_registration option to treat these commenters as "registered" (verified) users.
- *
- * @since JetpackComments (1.4)
- * @return If no
- */
- function allow_logged_out_user_to_comment_as_external() {
- if ( ! $this->is_highlander_comment_post( 'facebook', 'twitter', 'googleplus' ) ) {
- return;
- }
-
- add_filter( 'pre_option_comment_registration', '__return_zero' );
- }
-
- /**
- * Allow a logged in user to post as a guest, FB, or twitter credentialed request.
- * Bypasses WordPress' core overrides that force a logged in user to comment as that user.
- * Respects comment_registration option.
- *
- * @since JetpackComments (1.4)
- * @param array $comment_data
- * @return int
- */
- function allow_logged_in_user_to_comment_as_guest( $comment_data ) {
- // Bail if user registration is allowed
- if ( get_option( 'comment_registration' ) ) {
- return $comment_data;
- }
-
- // Bail if user is not logged in or not a post request
- if ( 'POST' != strtoupper( $_SERVER['REQUEST_METHOD'] ) || ! is_user_logged_in() ) {
- return $comment_data;
- }
-
- // Bail if this is not a guest or external service credentialed request
- if ( ! $this->is_highlander_comment_post( 'guest', 'facebook', 'twitter', 'googleplus' ) ) {
- return $comment_data;
- }
-
- $user = wp_get_current_user();
-
- foreach ( array(
- 'comment_author' => 'display_name',
- 'comment_author_email' => 'user_email',
- 'comment_author_url' => 'user_url',
- ) as $comment_field => $user_field ) {
- if ( $comment_data[ $comment_field ] != addslashes( $user->$user_field ) ) {
- return $comment_data; // some other plugin already did something funky
- }
- }
-
- if ( get_option( 'require_name_email' ) ) {
- if ( 6 > strlen( $_POST['email'] ) || empty( $_POST['author'] ) ) {
- wp_die( __( 'Error: please fill the required fields (name, email).', 'jetpack' ) );
- } elseif ( ! is_email( $_POST['email'] ) ) {
- wp_die( __( 'Error: please enter a valid email address.', 'jetpack' ) );
- }
- }
-
- $author_change = false;
- foreach ( array(
- 'comment_author' => 'author',
- 'comment_author_email' => 'email',
- 'comment_author_url' => 'url',
- ) as $comment_field => $post_field ) {
- if ( $comment_data[ $comment_field ] != $_POST[ $post_field ] && 'url' != $post_field ) {
- $author_change = true;
- }
- $comment_data[ $comment_field ] = $_POST[ $post_field ];
- }
-
- // Mark as guest comment if name or email were changed
- if ( $author_change ) {
- $comment_data['user_id'] = $comment_data['user_ID'] = 0;
- }
-
- return $comment_data;
- }
-
- /**
- * Set the comment cookies or bail if comment is invalid
- *
- * @since JetpackComments (1.4)
- * @param type $comment_id
- * @return If comment is invalid
- */
- public function set_comment_cookies( $comment_id ) {
- // Get comment and bail if it's invalid somehow
- $comment = get_comment( $comment_id );
- if ( empty( $comment ) || is_wp_error( $comment ) ) {
- return;
- }
-
- $id_source = $this->is_highlander_comment_post();
- if ( empty( $id_source ) ) {
- return;
- }
-
- // Set comment author cookies
- // phpcs:ignore WordPress.WP.CapitalPDangit
- if ( ( 'wordpress' != $id_source ) && is_user_logged_in() ) {
- /** This filter is already documented in core/wp-includes/comment-functions.php */
- $comment_cookie_lifetime = apply_filters( 'comment_cookie_lifetime', 30000000 );
- setcookie( 'comment_author_' . COOKIEHASH, $comment->comment_author, time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN );
- setcookie( 'comment_author_email_' . COOKIEHASH, $comment->comment_author_email, time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN );
- setcookie( 'comment_author_url_' . COOKIEHASH, esc_url( $comment->comment_author_url ), time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN );
- }
- }
-
- /**
- * Get an avatar from Photon
- *
- * @since JetpackComments (1.4)
- * @param string $url
- * @param int $size
- * @return string
- */
- protected function photon_avatar( $url, $size ) {
- $size = (int) $size;
-
- return jetpack_photon_url( $url, array( 'resize' => "$size,$size" ) );
- }
-}
diff --git a/plugins/jetpack/modules/comments/comments.php b/plugins/jetpack/modules/comments/comments.php
deleted file mode 100644
index f80da0fb..00000000
--- a/plugins/jetpack/modules/comments/comments.php
+++ /dev/null
@@ -1,626 +0,0 @@
-<?php
-
-require dirname( __FILE__ ) . '/base.php';
-
-/**
- * Main Comments class
- *
- * @package JetpackComments
- * @version 1.4
- * @since 1.4
- */
-class Jetpack_Comments extends Highlander_Comments_Base {
-
- /** Variables *************************************************************/
-
- /**
- * Possible comment form sources
- * @var array
- */
- public $id_sources = array();
-
- /**
- * URL
- * @var string
- */
- public $signed_url = '';
-
- /**
- * The default comment form color scheme
- * @var string
- * @see ::set_default_color_theme_based_on_theme_settings()
- */
- public $default_color_scheme = 'light';
-
- /** Methods ***************************************************************/
-
- public static function init() {
- static $instance = false;
-
- if ( ! $instance ) {
- $instance = new Jetpack_Comments;
- }
-
- return $instance;
- }
-
- /**
- * Main constructor for Comments
- *
- * @since JetpackComments (1.4)
- */
- public function __construct() {
- parent::__construct();
-
- // Comments is loaded
-
- /**
- * Fires after the Jetpack_Comments object has been instantiated
- *
- * @module comments
- *
- * @since 1.4.0
- *
- * @param array $jetpack_comments_loaded First element in array of type Jetpack_Comments
- **/
- do_action_ref_array( 'jetpack_comments_loaded', array( $this ) );
- add_action( 'after_setup_theme', array( $this, 'set_default_color_theme_based_on_theme_settings' ), 100 );
- }
-
- public function set_default_color_theme_based_on_theme_settings() {
- if ( function_exists( 'twentyeleven_get_theme_options' ) ) {
- $theme_options = twentyeleven_get_theme_options();
- $theme_color_scheme = isset( $theme_options['color_scheme'] ) ? $theme_options['color_scheme'] : 'transparent';
- } else {
- $theme_color_scheme = get_theme_mod( 'color_scheme', 'transparent' );
- }
- // Default for $theme_color_scheme is 'transparent' just so it doesn't match 'light' or 'dark'
- // The default for Jetpack's color scheme is still defined above as 'light'
-
- if ( false !== stripos( $theme_color_scheme, 'light' ) ) {
- $this->default_color_scheme = 'light';
- } elseif ( false !== stripos( $theme_color_scheme, 'dark' ) ) {
- $this->default_color_scheme = 'dark';
- }
- }
-
- /** Private Methods *******************************************************/
-
- /**
- * Set any global variables or class variables
- * @since JetpackComments (1.4)
- */
- protected function setup_globals() {
- parent::setup_globals();
-
- // Sources
- $this->id_sources = array(
- 'guest',
- 'jetpack',
- 'wordpress',
- 'twitter',
- 'facebook',
- );
- }
-
- /**
- * Setup actions for methods in this class
- * @since JetpackComments (1.4)
- */
- protected function setup_actions() {
- parent::setup_actions();
-
- // Selfishly remove everything from the existing comment form
- remove_all_actions( 'comment_form_before' );
-
- // Selfishly add only our actions back to the comment form
- add_action( 'comment_form_before', array( $this, 'comment_form_before' ) );
- add_action( 'comment_form_after', array( $this, 'comment_form_after' ), 1 ); // Set very early since we remove everything outputed before our action.
-
- // Before a comment is posted
- add_action( 'pre_comment_on_post', array( $this, 'pre_comment_on_post' ), 1 );
-
- // After a comment is posted
- add_action( 'comment_post', array( $this, 'add_comment_meta' ) );
- }
-
- /**
- * Setup filters for methods in this class
- * @since 1.6.2
- */
- protected function setup_filters() {
- parent::setup_filters();
-
- add_filter( 'comment_post_redirect', array( $this, 'capture_comment_post_redirect_to_reload_parent_frame' ), 100 );
- add_filter( 'get_avatar', array( $this, 'get_avatar' ), 10, 4 );
- }
-
- /**
- * Get the comment avatar from Gravatar, Twitter, or Facebook
- *
- * @since JetpackComments (1.4)
- *
- * @param string $avatar Current avatar URL
- * @param string $comment Comment for the avatar
- * @param int $size Size of the avatar
- * @param string $default Not used
- *
- * @return string New avatar
- */
- public function get_avatar( $avatar, $comment, $size, $default ) {
- if ( ! isset( $comment->comment_post_ID ) || ! isset( $comment->comment_ID ) ) {
- // it's not a comment - bail
- return $avatar;
- }
-
- // Detect whether it's a Facebook or Twitter avatar
- $foreign_avatar = get_comment_meta( $comment->comment_ID, 'hc_avatar', true );
- $foreign_avatar_hostname = parse_url( $foreign_avatar, PHP_URL_HOST );
- if ( ! $foreign_avatar_hostname ||
- ! preg_match( '/\.?(graph\.facebook\.com|twimg\.com)$/', $foreign_avatar_hostname ) ) {
- return $avatar;
- }
-
- // Return the FB or Twitter avatar
- return preg_replace( '#src=([\'"])[^\'"]+\\1#', 'src=\\1' . esc_url( set_url_scheme( $this->photon_avatar( $foreign_avatar, $size ), 'https' ) ) . '\\1', $avatar );
- }
-
- /** Output Methods ********************************************************/
-
- /**
- * Start capturing the core comment_form() output
- * @since JetpackComments (1.4)
- */
- public function comment_form_before() {
- /**
- * Filters the setting that determines if Jetpagk comments should be enabled for
- * the current post type.
- *
- * @module comments
- *
- * @since 3.8.1
- *
- * @param boolean $return Should comments be enabled?
- */
- if ( ! apply_filters( 'jetpack_comment_form_enabled_for_' . get_post_type(), true ) ) {
- return;
- }
-
- // Add some JS to the footer
- add_action( 'wp_footer', array( $this, 'watch_comment_parent' ), 100 );
-
- ob_start();
- }
-
- /**
- * Noop the default comment form output, get some options, and output our
- * tricked out totally radical comment form.
- *
- * @since JetpackComments (1.4)
- */
- public function comment_form_after() {
- /** This filter is documented in modules/comments/comments.php */
- if ( ! apply_filters( 'jetpack_comment_form_enabled_for_' . get_post_type(), true ) ) {
- return;
- }
-
- // Throw it all out and drop in our replacement
- ob_end_clean();
-
- // If users are required to be logged in, and they're not, then we don't need to do anything else
- if ( get_option( 'comment_registration' ) && ! is_user_logged_in() ) {
- /**
- * Changes the log in to comment prompt.
- *
- * @module comments
- *
- * @since 1.4.0
- *
- * @param string $var Default is "You must log in to post a comment."
- */
- echo '<p class="must-log-in">' . sprintf( apply_filters( 'jetpack_must_log_in_to_comment', __( 'You must <a href="%s">log in</a> to post a comment.', 'jetpack' ) ), wp_login_url( get_permalink() . '#respond' ) ) . '</p>';
-
- return;
- }
-
- if ( in_array( 'subscriptions', Jetpack::get_active_modules() ) ) {
- $stb_enabled = get_option( 'stb_enabled', 1 );
- $stb_enabled = empty( $stb_enabled ) ? 0 : 1;
-
- $stc_enabled = get_option( 'stc_enabled', 1 );
- $stc_enabled = empty( $stc_enabled ) ? 0 : 1;
- } else {
- $stb_enabled = 0;
- $stc_enabled = 0;
- }
-
- $params = array(
- 'blogid' => Jetpack_Options::get_option( 'id' ),
- 'postid' => get_the_ID(),
- 'comment_registration' => ( get_option( 'comment_registration' ) ? '1' : '0' ), // Need to explicitly send a '1' or a '0' for these
- 'require_name_email' => ( get_option( 'require_name_email' ) ? '1' : '0' ),
- 'stc_enabled' => $stc_enabled,
- 'stb_enabled' => $stb_enabled,
- 'show_avatars' => ( get_option( 'show_avatars' ) ? '1' : '0' ),
- 'avatar_default' => get_option( 'avatar_default' ),
- 'greeting' => get_option( 'highlander_comment_form_prompt', __( 'Leave a Reply', 'jetpack' ) ),
- /**
- * Changes the comment form prompt.
- *
- * @module comments
- *
- * @since 2.3.0
- *
- * @param string $var Default is "Leave a Reply to %s."
- */
- 'greeting_reply' => apply_filters( 'jetpack_comment_form_prompt_reply', __( 'Leave a Reply to %s', 'jetpack' ) ),
- 'color_scheme' => get_option( 'jetpack_comment_form_color_scheme', $this->default_color_scheme ),
- 'lang' => get_locale(),
- 'jetpack_version' => JETPACK__VERSION,
- );
-
- // Extra parameters for logged in user
- if ( is_user_logged_in() ) {
- $current_user = wp_get_current_user();
- $params['hc_post_as'] = 'jetpack';
- $params['hc_userid'] = $current_user->ID;
- $params['hc_username'] = $current_user->display_name;
- $params['hc_userurl'] = $current_user->user_url;
- $params['hc_useremail'] = md5( strtolower( trim( $current_user->user_email ) ) );
- if ( current_user_can( 'unfiltered_html' ) ) {
- $params['_wp_unfiltered_html_comment'] = wp_create_nonce( 'unfiltered-html-comment_' . get_the_ID() );
- }
- } else {
- $commenter = wp_get_current_commenter();
- $params['show_cookie_consent'] = (int) has_action( 'set_comment_cookies', 'wp_set_comment_cookies' );
- $params['has_cookie_consent'] = (int) ! empty( $commenter['comment_author_email'] );
- }
-
- $signature = Jetpack_Comments::sign_remote_comment_parameters( $params, Jetpack_Options::get_option( 'blog_token' ) );
- if ( is_wp_error( $signature ) ) {
- $signature = 'error';
- }
-
- $params['sig'] = $signature;
- $url_origin = set_url_scheme( 'http://jetpack.wordpress.com' );
- $url = "{$url_origin}/jetpack-comment/?" . http_build_query( $params );
- $url = "{$url}#parent=" . urlencode( set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ) );
- $this->signed_url = $url;
- $height = $params['comment_registration'] || is_user_logged_in() ? '315' : '430'; // Iframe can be shorter if we're not allowing guest commenting
- $transparent = ( $params['color_scheme'] == 'transparent' ) ? 'true' : 'false';
-
- if ( isset( $_GET['replytocom'] ) ) {
- $url .= '&replytocom=' . (int) $_GET['replytocom'];
- }
-
- /**
- * Filter whether the comment title can be displayed.
- *
- * @module comments
- *
- * @since 4.7.0
- *
- * @param bool $show Can the comment be displayed? Default to true.
- */
- $show_greeting = apply_filters( 'jetpack_comment_form_display_greeting', true );
-
- // The actual iframe (loads comment form from Jetpack server)
- ?>
-
- <div id="respond" class="comment-respond">
- <?php if ( true === $show_greeting ) : ?>
- <h3 id="reply-title" class="comment-reply-title"><?php comment_form_title( esc_html( $params['greeting'] ), esc_html( $params['greeting_reply'] ) ); ?>
- <small><?php cancel_comment_reply_link( esc_html__( 'Cancel reply', 'jetpack' ) ); ?></small>
- </h3>
- <?php endif; ?>
- <form id="commentform" class="comment-form">
- <iframe title="<?php esc_attr_e( 'Comment Form', 'jetpack' ); ?>" src="<?php echo esc_url( $url ); ?>" style="width:100%; height: <?php echo $height; ?>px; border:0;" name="jetpack_remote_comment" class="jetpack_remote_comment" id="jetpack_remote_comment" sandbox="allow-same-origin allow-top-navigation allow-scripts allow-forms allow-popups"></iframe>
- <?php if ( ! Jetpack_AMP_Support::is_amp_request() ) : ?>
- <!--[if !IE]><!-->
- <script>
- document.addEventListener('DOMContentLoaded', function () {
- var commentForms = document.getElementsByClassName('jetpack_remote_comment');
- for (var i = 0; i < commentForms.length; i++) {
- commentForms[i].allowTransparency = <?php echo $transparent; ?>;
- commentForms[i].scrolling = 'no';
- }
- });
- </script>
- <!--<![endif]-->
- <?php endif; ?>
- </form>
- </div>
-
- <?php // Below is required for comment reply JS to work ?>
-
- <input type="hidden" name="comment_parent" id="comment_parent" value="" />
-
- <?php
- }
-
- /**
- * Add some JS to wp_footer to watch for hierarchical reply parent change
- *
- * @since JetpackComments (1.4)
- */
- public function watch_comment_parent() {
- $url_origin = set_url_scheme( 'http://jetpack.wordpress.com' );
- ?>
-
- <!--[if IE]>
- <script type="text/javascript">
- if ( 0 === window.location.hash.indexOf( '#comment-' ) ) {
- // window.location.reload() doesn't respect the Hash in IE
- window.location.hash = window.location.hash;
- }
- </script>
- <![endif]-->
- <script type="text/javascript">
- (function () {
- var comm_par_el = document.getElementById( 'comment_parent' ),
- comm_par = ( comm_par_el && comm_par_el.value ) ? comm_par_el.value : '',
- frame = document.getElementById( 'jetpack_remote_comment' ),
- tellFrameNewParent;
-
- tellFrameNewParent = function () {
- if ( comm_par ) {
- frame.src = "<?php echo esc_url_raw( $this->signed_url ); ?>" + '&replytocom=' + parseInt( comm_par, 10 ).toString();
- } else {
- frame.src = "<?php echo esc_url_raw( $this->signed_url ); ?>";
- }
- };
-
- <?php if ( get_option( 'thread_comments' ) && get_option( 'thread_comments_depth' ) ) : ?>
-
- if ( 'undefined' !== typeof addComment ) {
- addComment._Jetpack_moveForm = addComment.moveForm;
-
- addComment.moveForm = function ( commId, parentId, respondId, postId ) {
- var returnValue = addComment._Jetpack_moveForm( commId, parentId, respondId, postId ),
- cancelClick, cancel;
-
- if ( false === returnValue ) {
- cancel = document.getElementById( 'cancel-comment-reply-link' );
- cancelClick = cancel.onclick;
- cancel.onclick = function () {
- var cancelReturn = cancelClick.call( this );
- if ( false !== cancelReturn ) {
- return cancelReturn;
- }
-
- if ( ! comm_par ) {
- return cancelReturn;
- }
-
- comm_par = 0;
-
- tellFrameNewParent();
-
- return cancelReturn;
- };
- }
-
- if ( comm_par == parentId ) {
- return returnValue;
- }
-
- comm_par = parentId;
-
- tellFrameNewParent();
-
- return returnValue;
- };
- }
-
- <?php endif; ?>
-
- // Do the post message bit after the dom has loaded.
- document.addEventListener( 'DOMContentLoaded', function () {
- var iframe_url = <?php echo json_encode( esc_url_raw( $url_origin ) ); ?>;
- if ( window.postMessage ) {
- if ( document.addEventListener ) {
- window.addEventListener( 'message', function ( event ) {
- var origin = event.origin.replace( /^http:\/\//i, 'https://' );
- if ( iframe_url.replace( /^http:\/\//i, 'https://' ) !== origin ) {
- return;
- }
- jQuery( frame ).height( event.data );
- });
- } else if ( document.attachEvent ) {
- window.attachEvent( 'message', function ( event ) {
- var origin = event.origin.replace( /^http:\/\//i, 'https://' );
- if ( iframe_url.replace( /^http:\/\//i, 'https://' ) !== origin ) {
- return;
- }
- jQuery( frame ).height( event.data );
- });
- }
- }
- })
-
- })();
- </script>
-
- <?php
- }
-
- /**
- * Verify the hash included in remote comments.
- *
- * @since JetpackComments (1.4)
- *
- * @param type $comment Not used
- */
- public function pre_comment_on_post( $comment ) {
- $post_array = stripslashes_deep( $_POST );
-
- // Bail if missing the Jetpack token
- if ( ! isset( $post_array['sig'] ) ) {
- unset( $_POST['hc_post_as'] );
-
- return;
- }
-
- if ( false !== strpos( $post_array['hc_avatar'], '.gravatar.com' ) ) {
- $post_array['hc_avatar'] = htmlentities( $post_array['hc_avatar'] );
- }
-
- $check = Jetpack_Comments::sign_remote_comment_parameters( $post_array, Jetpack_Options::get_option( 'blog_token' ) );
- if ( is_wp_error( $check ) ) {
- wp_die( $check );
- }
-
- // Bail if token is expired or not valid
- if ( $check !== $post_array['sig'] ) {
- wp_die( __( 'Invalid security token.', 'jetpack' ) );
- }
-
- /** This filter is documented in modules/comments/comments.php */
- if ( ! apply_filters( 'jetpack_comment_form_enabled_for_' . get_post_type( $post_array['comment_post_ID'] ), true ) ) {
- // In case the comment POST is legit, but the comments are
- // now disabled, we don't allow the comment
-
- wp_die( __( 'Comments are not allowed.', 'jetpack' ) );
- }
- }
-
- /** Capabilities **********************************************************/
-
- /**
- * Add some additional comment meta after comment is saved about what
- * service the comment is from, the avatar, user_id, etc...
- *
- * @since JetpackComments (1.4)
- *
- * @param type $comment_id
- */
- public function add_comment_meta( $comment_id ) {
- $comment_meta = array();
-
- switch ( $this->is_highlander_comment_post() ) {
- case 'facebook':
- $comment_meta['hc_post_as'] = 'facebook';
- $comment_meta['hc_avatar'] = stripslashes( $_POST['hc_avatar'] );
- $comment_meta['hc_foreign_user_id'] = stripslashes( $_POST['hc_userid'] );
- break;
-
- case 'twitter':
- $comment_meta['hc_post_as'] = 'twitter';
- $comment_meta['hc_avatar'] = stripslashes( $_POST['hc_avatar'] );
- $comment_meta['hc_foreign_user_id'] = stripslashes( $_POST['hc_userid'] );
- break;
-
- // phpcs:ignore WordPress.WP.CapitalPDangit
- case 'wordpress':
- // phpcs:ignore WordPress.WP.CapitalPDangit
- $comment_meta['hc_post_as'] = 'wordpress';
- $comment_meta['hc_avatar'] = stripslashes( $_POST['hc_avatar'] );
- $comment_meta['hc_foreign_user_id'] = stripslashes( $_POST['hc_userid'] );
- $comment_meta['hc_wpcom_id_sig'] = stripslashes( $_POST['hc_wpcom_id_sig'] ); //since 1.9
- break;
-
- case 'jetpack':
- $comment_meta['hc_post_as'] = 'jetpack';
- $comment_meta['hc_avatar'] = stripslashes( $_POST['hc_avatar'] );
- $comment_meta['hc_foreign_user_id'] = stripslashes( $_POST['hc_userid'] );
- break;
-
- }
-
- // Bail if no extra comment meta
- if ( empty( $comment_meta ) ) {
- return;
- }
-
- // Loop through extra meta and add values
- foreach ( $comment_meta as $key => $value ) {
- add_comment_meta( $comment_id, $key, $value, true );
- }
- }
-
- function capture_comment_post_redirect_to_reload_parent_frame( $url ) {
- if ( ! isset( $_GET['for'] ) || 'jetpack' != $_GET['for'] ) {
- return $url;
- }
- ?>
- <!DOCTYPE html>
- <html <?php language_attributes(); ?>>
- <!--<![endif]-->
- <head>
- <meta charset="<?php bloginfo( 'charset' ); ?>" />
- <title><?php printf( __( 'Submitting Comment%s', 'jetpack' ), '&hellip;' ); ?></title>
- <style type="text/css">
- body {
- display: table;
- width: 100%;
- height: 60%;
- position: absolute;
- top: 0;
- left: 0;
- overflow: hidden;
- color: #333;
- }
-
- h1 {
- text-align: center;
- margin: 0;
- padding: 0;
- display: table-cell;
- vertical-align: middle;
- font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", sans-serif;
- font-weight: normal;
- }
-
- .hidden {
- opacity: 0;
- }
-
- h1 span {
- -moz-transition-property: opacity;
- -moz-transition-duration: 1s;
- -moz-transition-timing-function: ease-in-out;
-
- -webkit-transition-property: opacity;
- -webkit-transition-duration: 1s;
- -webbit-transition-timing-function: ease-in-out;
-
- -o-transition-property: opacity;
- -o-transition-duration: 1s;
- -o-transition-timing-function: ease-in-out;
-
- -ms-transition-property: opacity;
- -ms-transition-duration: 1s;
- -ms-transition-timing-function: ease-in-out;
-
- transition-property: opacity;
- transition-duration: 1s;
- transition-timing-function: ease-in-out;
- }
- </style>
- </head>
- <body>
- <h1><?php printf( __( 'Submitting Comment%s', 'jetpack' ), '<span id="ellipsis" class="hidden">&hellip;</span>' ); ?></h1>
- <script type="text/javascript">
- try {
- window.parent.location = <?php echo json_encode( $url ); ?>;
- window.parent.location.reload(true);
- } catch (e) {
- window.location = <?php echo json_encode( $url ); ?>;
- window.location.reload(true);
- }
- ellipsis = document.getElementById('ellipsis');
-
- function toggleEllipsis() {
- ellipsis.className = ellipsis.className ? '' : 'hidden';
- }
-
- setInterval(toggleEllipsis, 1200);
- </script>
- </body>
- </html>
- <?php
- exit;
- }
-}
-
-Jetpack_Comments::init();
diff --git a/plugins/jetpack/modules/contact-form.php b/plugins/jetpack/modules/contact-form.php
deleted file mode 100644
index 93c66df7..00000000
--- a/plugins/jetpack/modules/contact-form.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-/**
- * Module Name: Contact Form
- * Module Description: Add a customizable contact form to any post or page using the Jetpack Form Block.
- * Sort Order: 15
- * Recommendation Order: 14
- * First Introduced: 1.3
- * Requires Connection: No
- * Auto Activate: Yes
- * Module Tags: Other
- * Feature: Writing
- * Additional Search Queries: contact, form, grunion, feedback, submission, contact form, email, feedback, contact form plugin, custom form, custom form plugin, form builder, forms, form maker, survey, contact by jetpack, contact us, forms free
- */
-
-require_once dirname( __FILE__ ) . '/contact-form/grunion-contact-form.php';
-/*
- * Filters if the new Contact Form Editor View should be used.
- *
- * A temporary filter to disable the new Editor View for the older UI.
- * Please note this filter and the old UI will be removed in the future.
- * Expected to be removed in Jetpack 5.8 or if a security issue merits removing the old code sooner.
- *
- * @since 5.2.0
- *
- * @param boolean $view Use new Editor View. Default true.
- */
-if ( is_admin() && apply_filters( 'tmp_grunion_allow_editor_view', true ) ) {
- require_once dirname( __FILE__ ) . '/contact-form/grunion-editor-view.php';
-}
diff --git a/plugins/jetpack/modules/contact-form/admin.php b/plugins/jetpack/modules/contact-form/admin.php
deleted file mode 100644
index 0596f798..00000000
--- a/plugins/jetpack/modules/contact-form/admin.php
+++ /dev/null
@@ -1,894 +0,0 @@
-<?php
-/**
- * Add a contact form button to the post composition screen
- */
-add_action( 'media_buttons', 'grunion_media_button', 999 );
-function grunion_media_button() {
- global $post_ID, $temp_ID, $pagenow;
-
- if ( 'press-this.php' === $pagenow ) {
- return;
- }
-
- $iframe_post_id = (int) ( 0 == $post_ID ? $temp_ID : $post_ID );
- $title = __( 'Add Contact Form', 'jetpack' );
- $plugin_url = esc_url( GRUNION_PLUGIN_URL );
- $site_url = esc_url( admin_url( "/admin-ajax.php?post_id={$iframe_post_id}&action=grunion_form_builder&TB_iframe=true&width=768" ) );
- ?>
-
- <a id="insert-jetpack-contact-form" class="button thickbox" title="<?php echo esc_attr( $title ); ?>" data-editor="content" href="<?php echo $site_url; ?>&id=add_form">
- <span class="jetpack-contact-form-icon"></span> <?php echo esc_html( $title ); ?>
- </a>
-
- <?php
-}
-
-add_action( 'wp_ajax_grunion_form_builder', 'grunion_display_form_view' );
-
-function grunion_display_form_view() {
- if ( current_user_can( 'edit_posts' ) ) {
- require_once GRUNION_PLUGIN_DIR . 'grunion-form-view.php';
- }
- exit;
-}
-
-// feedback specific css items
-add_action( 'admin_print_styles', 'grunion_admin_css' );
-function grunion_admin_css() {
- global $current_screen;
- if ( is_null( $current_screen ) ) {
- return;
- }
- if ( 'edit-feedback' !== $current_screen->id ) {
- return;
- }
-
- wp_enqueue_script( 'wp-lists' );
-?>
-
-<style type='text/css'>
-.add-new-h2, .view-switch, body.no-js .tablenav select[name^=action], body.no-js #doaction, body.no-js #doaction2 {
- display: none
-}
-
-.column-feedback_from img {
- float:left;
- margin-right:10px;
- margin-top:3px;
-}
-
-.widefat .column-feedback_from {
- width: 17%;
-}
-.widefat .column-feedback_date {
- width: 17%;
-}
-
-.spam a {
- color: #BC0B0B;
-}
-
-.untrash a {
- color: #D98500;
-}
-
-.unspam a {
-color: #D98500;
-}
-
-</style>
-
-<?php
-}
-
-/**
- * Hack a 'Bulk Spam' option for bulk edit in other than spam view
- * Hack a 'Bulk Delete' option for bulk edit in spam view
- *
- * There isn't a better way to do this until
- * http://core.trac.wordpress.org/changeset/17297 is resolved
- */
-add_action( 'admin_head', 'grunion_add_bulk_edit_option' );
-function grunion_add_bulk_edit_option() {
-
- $screen = get_current_screen();
-
- if ( is_null( $screen ) ) {
- return;
- }
-
- if ( 'edit-feedback' != $screen->id ) {
- return;
- }
-
- // When viewing spam we want to be able to be able to bulk delete
- // When viewing anything we want to be able to bulk move to spam
- if ( isset( $_GET['post_status'] ) && 'spam' == $_GET['post_status'] ) {
- // Create Delete Permanently bulk item
- $option_val = 'delete';
- $option_txt = __( 'Delete Permanently', 'jetpack' );
- $pseudo_selector = 'last-child';
-
- } else {
- // Create Mark Spam bulk item
- $option_val = 'spam';
- $option_txt = __( 'Mark as Spam', 'jetpack' );
- $pseudo_selector = 'first-child';
- }
-
- ?>
- <script type="text/javascript">
- jQuery(document).ready(function($) {
- $('#posts-filter .actions select').filter('[name=action], [name=action2]').find('option:<?php echo $pseudo_selector; ?>').after('<option value="<?php echo $option_val; ?>"><?php echo esc_attr( $option_txt ); ?></option>' );
- })
- </script>
- <?php
-}
-
-/**
- * Hack an 'Empty Spam' button to spam view
- *
- * Leverages core's delete_all functionality
- */
-add_action( 'admin_head', 'grunion_add_empty_spam_button' );
-function grunion_add_empty_spam_button() {
- $screen = get_current_screen();
-
- if ( is_null( $screen ) ) {
- return;
- }
-
- // Only add to feedback, only to spam view
- if ( 'edit-feedback' != $screen->id
- || empty( $_GET['post_status'] )
- || 'spam' !== $_GET['post_status'] ) {
- return;
- }
-
- // Get HTML for the button
- $button_html = wp_nonce_field( 'bulk-destroy', '_destroy_nonce', true, false );
- $button_html .= get_submit_button( __( 'Empty Spam', 'jetpack' ), 'apply', 'delete_all', false );
-
- // Add the button next to the filter button via js
- ?>
- <script type="text/javascript">
- jQuery(document).ready(function($) {
- $('#posts-filter #post-query-submit').after('<?php echo $button_html; ?>' );
- })
- </script>
- <?php
-}
-
-/**
- * Handle a bulk spam report
- */
-add_action( 'admin_init', 'grunion_handle_bulk_spam' );
-function grunion_handle_bulk_spam() {
- global $pagenow;
-
- if ( 'edit.php' != $pagenow
- || ( empty( $_REQUEST['post_type'] ) || 'feedback' != $_REQUEST['post_type'] ) ) {
- return;
- }
-
- // Slip in a success message
- if ( ! empty( $_REQUEST['message'] ) && 'marked-spam' == $_REQUEST['message'] ) {
- add_action( 'admin_notices', 'grunion_message_bulk_spam' );
- }
-
- if ( ( empty( $_REQUEST['action'] ) || 'spam' != $_REQUEST['action'] ) && ( empty( $_REQUEST['action2'] ) || 'spam' != $_REQUEST['action2'] ) ) {
- return;
- }
-
- check_admin_referer( 'bulk-posts' );
-
- if ( empty( $_REQUEST['post'] ) ) {
- wp_safe_redirect( wp_get_referer() );
- exit;
- }
-
- $post_ids = array_map( 'intval', $_REQUEST['post'] );
-
- foreach ( $post_ids as $post_id ) {
- if ( ! current_user_can( 'edit_page', $post_id ) ) {
- wp_die( __( 'You are not allowed to manage this item.', 'jetpack' ) );
- }
-
- $post = array(
- 'ID' => $post_id,
- 'post_status' => 'spam',
- );
- $akismet_values = get_post_meta( $post_id, '_feedback_akismet_values', true );
- wp_update_post( $post );
-
- /**
- * Fires after a comment has been marked by Akismet.
- *
- * Typically this means the comment is spam.
- *
- * @module contact-form
- *
- * @since 2.2.0
- *
- * @param string $comment_status Usually is 'spam', otherwise 'ham'.
- * @param array $akismet_values From '_feedback_akismet_values' in comment meta
- */
- do_action( 'contact_form_akismet', 'spam', $akismet_values );
- }
-
- $redirect_url = add_query_arg( 'message', 'marked-spam', wp_get_referer() );
- wp_safe_redirect( $redirect_url );
- exit;
-}
-
-function grunion_message_bulk_spam() {
- echo '<div class="updated"><p>' . __( 'Feedback(s) marked as spam', 'jetpack' ) . '</p></div>';
-}
-
-// remove admin UI parts that we don't support in feedback management
-add_action( 'admin_menu', 'grunion_admin_menu' );
-function grunion_admin_menu() {
- global $menu, $submenu;
- unset( $submenu['edit.php?post_type=feedback'] );
-}
-
-add_filter( 'bulk_actions-edit-feedback', 'grunion_admin_bulk_actions' );
-function grunion_admin_bulk_actions( $actions ) {
- global $current_screen;
- if ( 'edit-feedback' != $current_screen->id ) {
- return $actions;
- }
-
- unset( $actions['edit'] );
- return $actions;
-}
-
-add_filter( 'views_edit-feedback', 'grunion_admin_view_tabs' );
-function grunion_admin_view_tabs( $views ) {
- global $current_screen;
- if ( 'edit-feedback' != $current_screen->id ) {
- return $views;
- }
-
- unset( $views['publish'] );
-
- preg_match( '|post_type=feedback\'( class="current")?\>(.*)\<span class=|', $views['all'], $match );
- if ( ! empty( $match[2] ) ) {
- $views['all'] = str_replace( $match[2], __( 'Messages', 'jetpack' ) . ' ', $views['all'] );
- }
-
- return $views;
-}
-
-add_filter( 'manage_feedback_posts_columns', 'grunion_post_type_columns_filter' );
-function grunion_post_type_columns_filter( $cols ) {
- $cols = array(
- 'cb' => '<input type="checkbox" />',
- 'feedback_from' => __( 'From', 'jetpack' ),
- 'feedback_message' => __( 'Message', 'jetpack' ),
- 'feedback_date' => __( 'Date', 'jetpack' ),
- );
-
- return $cols;
-}
-
-add_action( 'manage_posts_custom_column', 'grunion_manage_post_columns', 10, 2 );
-function grunion_manage_post_columns( $col, $post_id ) {
- global $post;
-
- /**
- * Only call parse_fields_from_content if we're dealing with a Grunion custom column.
- */
- if ( ! in_array( $col, array( 'feedback_date', 'feedback_from', 'feedback_message' ) ) ) {
- return;
- }
-
- $content_fields = Grunion_Contact_Form_Plugin::parse_fields_from_content( $post_id );
-
- switch ( $col ) {
- case 'feedback_from':
- $author_name = isset( $content_fields['_feedback_author'] ) ? $content_fields['_feedback_author'] : '';
- $author_email = isset( $content_fields['_feedback_author_email'] ) ? $content_fields['_feedback_author_email'] : '';
- $author_url = isset( $content_fields['_feedback_author_url'] ) ? $content_fields['_feedback_author_url'] : '';
- $author_ip = isset( $content_fields['_feedback_ip'] ) ? $content_fields['_feedback_ip'] : '';
- $form_url = isset( $post->post_parent ) ? get_permalink( $post->post_parent ) : null;
-
- $author_name_line = '';
- if ( ! empty( $author_name ) ) {
- if ( ! empty( $author_email ) ) {
- $author_name_line = get_avatar( $author_email, 32 );
- }
-
- $author_name_line .= sprintf( '<strong>%s</strong><br />', esc_html( $author_name ) );
- }
-
- $author_email_line = '';
- if ( ! empty( $author_email ) ) {
- $author_email_line = sprintf( "<a href='%1\$s' target='_blank'>%2\$s</a><br />", esc_url( 'mailto:' . $author_email ), esc_html( $author_email ) );
- }
-
- $author_url_line = '';
- if ( ! empty( $author_url ) ) {
- $author_url_line = sprintf( "<a href='%1\$s'>%1\$s</a><br />", esc_url( $author_url ) );
- }
-
- echo $author_name_line;
- echo $author_email_line;
- echo $author_url_line;
- echo "<a href='edit.php?post_type=feedback&s=" . urlencode( $author_ip );
- echo "&mode=detail'>" . esc_html( $author_ip ) . '</a><br />';
- if ( $form_url ) {
- echo '<a href="' . esc_url( $form_url ) . '">' . esc_html( $form_url ) . '</a>';
- }
- break;
-
- case 'feedback_message':
- $post_type_object = get_post_type_object( $post->post_type );
- if ( isset( $content_fields['_feedback_subject'] ) ) {
- echo '<strong>';
- echo esc_html( $content_fields['_feedback_subject'] );
- echo '</strong>';
- echo '<br />';
- }
- echo sanitize_text_field( get_the_content( '' ) );
- echo '<br />';
-
- $extra_fields = get_post_meta( $post_id, '_feedback_extra_fields', true );
- if ( ! empty( $extra_fields ) ) {
- echo '<br /><hr />';
- echo '<table cellspacing="0" cellpadding="0" style="">' . "\n";
- foreach ( (array) $extra_fields as $k => $v ) {
- // Remove prefix from exta fields
- echo "<tr><td align='right'><b>" . esc_html( preg_replace( '#^\d+_#', '', $k ) ) . '</b></td><td>' . sanitize_text_field( $v ) . "</td></tr>\n";
- }
- echo '</table>';
- }
-
- echo '<div class="row-actions">';
- if ( $post->post_status == 'trash' ) {
- echo '<span class="untrash" id="feedback-restore-' . $post_id;
- echo '"><a title="';
- echo esc_attr__( 'Restore this item from the Trash', 'jetpack' );
- echo '" href="' . wp_nonce_url( admin_url( sprintf( $post_type_object->_edit_link . '&amp;action=untrash', $post->ID ) ), 'untrash-' . $post->post_type . '_' . $post->ID );
- echo '">' . __( 'Restore', 'jetpack' ) . '</a></span> | ';
-
- echo "<span class='delete'> <a class='submitdelete' title='";
- echo esc_attr( __( 'Delete this item permanently', 'jetpack' ) );
- echo "' href='" . get_delete_post_link( $post->ID, '', true );
- echo "'>" . __( 'Delete Permanently', 'jetpack' ) . '</a></span>';
-?>
-
-<script>
-jQuery(document).ready(function($) {
-$('#feedback-restore-<?php echo $post_id; ?>').click(function(e) {
- e.preventDefault();
- $.post(ajaxurl, {
- action: 'grunion_ajax_spam',
- post_id: '<?php echo $post_id; ?>',
- make_it: 'publish',
- sub_menu: jQuery('.subsubsub .current').attr('href'),
- _ajax_nonce: '<?php echo wp_create_nonce( 'grunion-post-status-' . $post_id ); ?>'
- },
- function(r) {
- $('#post-<?php echo $post_id; ?>')
- .css({backgroundColor: '#59C859'})
- .fadeOut(350, function() {
- $(this).remove();
- $('.subsubsub').html(r);
- });
- }
- );
-});
-});
-</script>
-
-<?php
- } elseif ( $post->post_status == 'publish' ) {
- echo '<span class="spam" id="feedback-spam-' . $post_id;
- echo '"><a title="';
- echo __( 'Mark this message as spam', 'jetpack' );
- echo '" href="' . wp_nonce_url( admin_url( 'admin-ajax.php?post_id=' . $post_id . '&amp;action=spam' ), 'spam-feedback_' . $post_id );
- echo '">Spam</a></span>';
- echo ' | ';
-
- echo '<span class="delete" id="feedback-trash-' . $post_id;
- echo '">';
- echo '<a class="submitdelete" title="' . esc_attr__( 'Trash', 'jetpack' );
- echo '" href="' . get_delete_post_link( $post_id );
- echo '">' . __( 'Trash', 'jetpack' ) . '</a></span>';
-
-?>
-
-<script>
-jQuery(document).ready( function($) {
- $('#feedback-spam-<?php echo $post_id; ?>').click( function(e) {
- e.preventDefault();
- $.post( ajaxurl, {
- action: 'grunion_ajax_spam',
- post_id: '<?php echo $post_id; ?>',
- make_it: 'spam',
- sub_menu: jQuery('.subsubsub .current').attr('href'),
- _ajax_nonce: '<?php echo wp_create_nonce( 'grunion-post-status-' . $post_id ); ?>'
- },
- function( r ) {
- $('#post-<?php echo $post_id; ?>')
- .css( {backgroundColor:'#FF7979'} )
- .fadeOut(350, function() {
- $(this).remove();
- $('.subsubsub').html(r);
- });
- });
- });
-
- $('#feedback-trash-<?php echo $post_id; ?>').click(function(e) {
- e.preventDefault();
- $.post(ajaxurl, {
- action: 'grunion_ajax_spam',
- post_id: '<?php echo $post_id; ?>',
- make_it: 'trash',
- sub_menu: jQuery('.subsubsub .current').attr('href'),
- _ajax_nonce: '<?php echo wp_create_nonce( 'grunion-post-status-' . $post_id ); ?>'
- },
- function(r) {
- $('#post-<?php echo $post_id; ?>')
- .css({backgroundColor: '#FF7979'})
- .fadeOut(350, function() {
- $(this).remove();
- $('.subsubsub').html(r);
- });
- }
- );
- });
-});
-</script>
-
-<?php
- } elseif ( $post->post_status == 'spam' ) {
- echo '<span class="unspam unapprove" id="feedback-ham-' . $post_id;
- echo '"><a title="';
- echo __( 'Mark this message as NOT spam', 'jetpack' );
- echo '" href="">Not Spam</a></span>';
- echo ' | ';
-
- echo "<span class='delete' id='feedback-trash-" . $post_id;
- echo "'> <a class='submitdelete' title='";
- echo esc_attr( __( 'Delete this item permanently', 'jetpack' ) );
- echo "' href='" . get_delete_post_link( $post->ID, '', true );
- echo "'>" . __( 'Delete Permanently', 'jetpack' ) . '</a></span>';
-?>
-
-<script>
-jQuery(document).ready( function($) {
- $('#feedback-ham-<?php echo $post_id; ?>').click( function(e) {
- e.preventDefault();
- $.post( ajaxurl, {
- action: 'grunion_ajax_spam',
- post_id: '<?php echo $post_id; ?>',
- make_it: 'ham',
- sub_menu: jQuery('.subsubsub .current').attr('href'),
- _ajax_nonce: '<?php echo wp_create_nonce( 'grunion-post-status-' . $post_id ); ?>'
- },
- function( r ) {
- $('#post-<?php echo $post_id; ?>')
- .css( {backgroundColor:'#59C859'} )
- .fadeOut(350, function() {
- $(this).remove();
- $('.subsubsub').html(r);
- });
- });
- });
-});
-</script>
-
-<?php
- }
- break;
-
- case 'feedback_date':
- $date_time_format = _x( '%1$s \a\t %2$s', '{$date_format} \a\t {$time_format}', 'jetpack' );
- $date_time_format = sprintf( $date_time_format, get_option( 'date_format' ), get_option( 'time_format' ) );
- $time = date_i18n( $date_time_format, get_the_time( 'U' ) );
-
- echo $time;
- break;
- }
-}
-
-function grunion_esc_attr( $attr ) {
- $out = esc_attr( $attr );
- // we also have to entity-encode square brackets so they don't interfere with the shortcode parser
- // FIXME: do this better - just stripping out square brackets for now since they mysteriously keep reappearing
- $out = str_replace( '[', '', $out );
- $out = str_replace( ']', '', $out );
- return $out;
-}
-
-function grunion_sort_objects( $a, $b ) {
- if ( isset( $a['order'] ) && isset( $b['order'] ) ) {
- return $a['order'] - $b['order'];
- }
- return 0;
-}
-
-// take an array of field types from the form builder, and construct a shortcode form
-// returns both the shortcode form, and HTML markup representing a preview of the form
-function grunion_ajax_shortcode() {
- check_ajax_referer( 'grunion_shortcode' );
-
- if ( ! current_user_can( 'edit_posts' ) ) {
- die( '-1' );
- }
-
- $attributes = array();
-
- foreach ( array( 'subject', 'to' ) as $attribute ) {
- if ( isset( $_POST[ $attribute ] ) && strlen( $_POST[ $attribute ] ) ) {
- $attributes[ $attribute ] = stripslashes( $_POST[ $attribute ] );
- }
- }
-
- if ( is_array( $_POST['fields'] ) ) {
- $fields = stripslashes_deep( $_POST['fields'] );
- usort( $fields, 'grunion_sort_objects' );
-
- $field_shortcodes = array();
-
- foreach ( $fields as $field ) {
- $field_attributes = array();
-
- if ( isset( $field['required'] ) && 'true' === $field['required'] ) {
- $field_attributes['required'] = 'true';
- }
-
- foreach ( array( 'options', 'label', 'type' ) as $attribute ) {
- if ( isset( $field[ $attribute ] ) ) {
- $field_attributes[ $attribute ] = $field[ $attribute ];
- }
- }
-
- $field_shortcodes[] = new Grunion_Contact_Form_Field( $field_attributes );
- }
- }
-
- $grunion = new Grunion_Contact_Form( $attributes, $field_shortcodes );
-
- die( "\n$grunion\n" );
-}
-
-// takes a post_id, extracts the contact-form shortcode from that post (if there is one), parses it,
-// and constructs a json object representing its contents and attributes
-function grunion_ajax_shortcode_to_json() {
- global $post, $grunion_form;
-
- check_ajax_referer( 'grunion_shortcode_to_json' );
-
- if ( ! empty( $_POST['post_id'] ) && ! current_user_can( 'edit_post', $_POST['post_id'] ) ) {
- die( '-1' );
- } elseif ( ! current_user_can( 'edit_posts' ) ) {
- die( '-1' );
- }
-
- if ( ! isset( $_POST['content'] ) || ! is_numeric( $_POST['post_id'] ) ) {
- die( '-1' );
- }
-
- $content = stripslashes( $_POST['content'] );
-
- // doesn't look like a post with a [contact-form] already.
- if ( false === has_shortcode( $content, 'contact-form' ) ) {
- die( '' );
- }
-
- $post = get_post( $_POST['post_id'] );
-
- do_shortcode( $content );
-
- $grunion = Grunion_Contact_Form::$last;
-
- $out = array(
- 'to' => '',
- 'subject' => '',
- 'fields' => array(),
- );
-
- foreach ( $grunion->fields as $field ) {
- $out['fields'][ $field->get_attribute( 'id' ) ] = $field->attributes;
- }
-
- $to = $grunion->get_attribute( 'to' );
- $subject = $grunion->get_attribute( 'subject' );
- foreach ( array( 'to', 'subject' ) as $attribute ) {
- $value = $grunion->get_attribute( $attribute );
- if ( isset( $grunion->defaults[ $attribute ] ) && $value == $grunion->defaults[ $attribute ] ) {
- $value = '';
- }
- $out[ $attribute ] = $value;
- }
-
- die( json_encode( $out ) );
-}
-
-
-add_action( 'wp_ajax_grunion_shortcode', 'grunion_ajax_shortcode' );
-add_action( 'wp_ajax_grunion_shortcode_to_json', 'grunion_ajax_shortcode_to_json' );
-
-
-// process row-action spam/not spam clicks
-add_action( 'wp_ajax_grunion_ajax_spam', 'grunion_ajax_spam' );
-function grunion_ajax_spam() {
- global $wpdb;
-
- if ( empty( $_POST['make_it'] ) ) {
- return;
- }
-
- $post_id = (int) $_POST['post_id'];
- check_ajax_referer( 'grunion-post-status-' . $post_id );
- if ( ! current_user_can( 'edit_page', $post_id ) ) {
- wp_die( __( 'You are not allowed to manage this item.', 'jetpack' ) );
- }
-
- require_once dirname( __FILE__ ) . '/grunion-contact-form.php';
-
- $current_menu = '';
- if ( isset( $_POST['sub_menu'] ) && preg_match( '|post_type=feedback|', $_POST['sub_menu'] ) ) {
- if ( preg_match( '|post_status=spam|', $_POST['sub_menu'] ) ) {
- $current_menu = 'spam';
- } elseif ( preg_match( '|post_status=trash|', $_POST['sub_menu'] ) ) {
- $current_menu = 'trash';
- } else {
- $current_menu = 'messages';
- }
- }
-
- $post = get_post( $post_id );
- $post_type_object = get_post_type_object( $post->post_type );
- $akismet_values = get_post_meta( $post_id, '_feedback_akismet_values', true );
- if ( $_POST['make_it'] == 'spam' ) {
- $post->post_status = 'spam';
- $status = wp_insert_post( $post );
- wp_transition_post_status( 'spam', 'publish', $post );
-
- /** This action is already documented in modules/contact-form/admin.php */
- do_action( 'contact_form_akismet', 'spam', $akismet_values );
- } elseif ( $_POST['make_it'] == 'ham' ) {
- $post->post_status = 'publish';
- $status = wp_insert_post( $post );
- wp_transition_post_status( 'publish', 'spam', $post );
-
- /** This action is already documented in modules/contact-form/admin.php */
- do_action( 'contact_form_akismet', 'ham', $akismet_values );
-
- $comment_author_email = $reply_to_addr = $message = $to = $headers = false;
- $blog_url = wp_parse_url( site_url() );
-
- // resend the original email
- $email = get_post_meta( $post_id, '_feedback_email', true );
- $content_fields = Grunion_Contact_Form_Plugin::parse_fields_from_content( $post_id );
-
- if ( ! empty( $email ) && ! empty( $content_fields ) ) {
- if ( isset( $content_fields['_feedback_author_email'] ) ) {
- $comment_author_email = $content_fields['_feedback_author_email'];
- }
-
- if ( isset( $email['to'] ) ) {
- $to = $email['to'];
- }
-
- if ( isset( $email['message'] ) ) {
- $message = $email['message'];
- }
-
- if ( isset( $email['headers'] ) ) {
- $headers = $email['headers'];
- } else {
- $headers = 'From: "' . $content_fields['_feedback_author'] . '" <wordpress@' . $blog_url['host'] . ">\r\n";
-
- if ( ! empty( $comment_author_email ) ) {
- $reply_to_addr = $comment_author_email;
- } elseif ( is_array( $to ) ) {
- $reply_to_addr = $to[0];
- }
-
- if ( $reply_to_addr ) {
- $headers .= 'Reply-To: "' . $content_fields['_feedback_author'] . '" <' . $reply_to_addr . ">\r\n";
- }
-
- $headers .= 'Content-Type: text/plain; charset="' . get_option( 'blog_charset' ) . '"';
- }
-
- /**
- * Filters the subject of the email sent after a contact form submission.
- *
- * @module contact-form
- *
- * @since 3.0.0
- *
- * @param string $content_fields['_feedback_subject'] Feedback's subject line.
- * @param array $content_fields['_feedback_all_fields'] Feedback's data from old fields.
- */
- $subject = apply_filters( 'contact_form_subject', $content_fields['_feedback_subject'], $content_fields['_feedback_all_fields'] );
-
- Grunion_Contact_Form::wp_mail( $to, $subject, $message, $headers );
- }
- } elseif ( $_POST['make_it'] == 'publish' ) {
- if ( ! current_user_can( $post_type_object->cap->delete_post, $post_id ) ) {
- wp_die( __( 'You are not allowed to move this item out of the Trash.', 'jetpack' ) );
- }
-
- if ( ! wp_untrash_post( $post_id ) ) {
- wp_die( __( 'Error in restoring from Trash.', 'jetpack' ) );
- }
- } elseif ( $_POST['make_it'] == 'trash' ) {
- if ( ! current_user_can( $post_type_object->cap->delete_post, $post_id ) ) {
- wp_die( __( 'You are not allowed to move this item to the Trash.', 'jetpack' ) );
- }
-
- if ( ! wp_trash_post( $post_id ) ) {
- wp_die( __( 'Error in moving to Trash.', 'jetpack' ) );
- }
- }
-
- $sql = "
- SELECT post_status,
- COUNT( * ) AS post_count
- FROM `{$wpdb->posts}`
- WHERE post_type = 'feedback'
- GROUP BY post_status
- ";
- $status_count = (array) $wpdb->get_results( $sql, ARRAY_A );
-
- $status = array();
- $status_html = '';
- foreach ( $status_count as $i => $row ) {
- $status[ $row['post_status'] ] = $row['post_count'];
- }
-
- if ( isset( $status['publish'] ) ) {
- $status_html .= '<li><a href="edit.php?post_type=feedback"';
- if ( $current_menu == 'messages' ) {
- $status_html .= ' class="current"';
- }
-
- $status_html .= '>' . __( 'Messages', 'jetpack' ) . ' <span class="count">';
- $status_html .= '(' . number_format( $status['publish'] ) . ')';
- $status_html .= '</span></a> |</li>';
- }
-
- if ( isset( $status['trash'] ) ) {
- $status_html .= '<li><a href="edit.php?post_status=trash&amp;post_type=feedback"';
- if ( $current_menu == 'trash' ) {
- $status_html .= ' class="current"';
- }
-
- $status_html .= '>' . __( 'Trash', 'jetpack' ) . ' <span class="count">';
- $status_html .= '(' . number_format( $status['trash'] ) . ')';
- $status_html .= '</span></a>';
- if ( isset( $status['spam'] ) ) {
- $status_html .= ' |';
- }
- $status_html .= '</li>';
- }
-
- if ( isset( $status['spam'] ) ) {
- $status_html .= '<li><a href="edit.php?post_status=spam&amp;post_type=feedback"';
- if ( $current_menu == 'spam' ) {
- $status_html .= ' class="current"';
- }
-
- $status_html .= '>' . __( 'Spam', 'jetpack' ) . ' <span class="count">';
- $status_html .= '(' . number_format( $status['spam'] ) . ')';
- $status_html .= '</span></a></li>';
- }
-
- echo $status_html;
- exit;
-}
-
-/**
- * Add the scripts that will add the "Check for Spam" button to the Feedbacks dashboard page.
- */
-function grunion_enable_spam_recheck() {
- if ( ! defined( 'AKISMET_VERSION' ) ) {
- return;
- }
-
- $screen = get_current_screen();
-
- // Only add to feedback, only to non-spam view
- if ( 'edit-feedback' != $screen->id || ( ! empty( $_GET['post_status'] ) && 'spam' == $_GET['post_status'] ) ) {
- return;
- }
-
- // Add the scripts that handle the spam check event.
- wp_register_script(
- 'grunion-admin',
- Jetpack::get_file_url_for_environment(
- '_inc/build/contact-form/js/grunion-admin.min.js',
- 'modules/contact-form/js/grunion-admin.js'
- ),
- array( 'jquery' )
- );
- wp_enqueue_script( 'grunion-admin' );
-
- wp_enqueue_style( 'grunion.css' );
-
- // Add the actual "Check for Spam" button.
- add_action( 'admin_head', 'grunion_check_for_spam_button' );
-}
-
-add_action( 'admin_enqueue_scripts', 'grunion_enable_spam_recheck' );
-
-/**
- * Add the "Check for Spam" button to the Feedbacks dashboard page.
- */
-function grunion_check_for_spam_button() {
- // Get HTML for the button
- $button_html = get_submit_button(
- __( 'Check for Spam', 'jetpack' ),
- 'secondary',
- 'jetpack-check-feedback-spam',
- false,
- array( 'class' => 'jetpack-check-feedback-spam' )
- );
- $button_html .= '<span class="jetpack-check-feedback-spam-spinner"></span>';
-
- // Add the button next to the filter button via js
- ?>
- <script type="text/javascript">
- jQuery( function( $ ) {
- $( '#posts-filter #post-query-submit' ).after( '<?php echo $button_html; ?>' );
- } );
- </script>
- <?php
-}
-
-/**
- * Recheck all approved feedbacks for spam.
- */
-function grunion_recheck_queue() {
- global $wpdb;
-
- $query = 'post_type=feedback&post_status=publish';
-
- if ( isset( $_POST['limit'], $_POST['offset'] ) ) {
- $query .= '&posts_per_page=' . intval( $_POST['limit'] ) . '&offset=' . intval( $_POST['offset'] );
- }
-
- $approved_feedbacks = get_posts( $query );
-
- foreach ( $approved_feedbacks as $feedback ) {
- $meta = get_post_meta( $feedback->ID, '_feedback_akismet_values', true );
-
- /**
- * Filter whether the submitted feedback is considered as spam.
- *
- * @module contact-form
- *
- * @since 3.4.0
- *
- * @param bool false Is the submitted feedback spam? Default to false.
- * @param array $meta Feedack values returned by the Akismet plugin.
- */
- $is_spam = apply_filters( 'jetpack_contact_form_is_spam', false, $meta );
-
- if ( $is_spam ) {
- wp_update_post(
- array(
- 'ID' => $feedback->ID,
- 'post_status' => 'spam',
- )
- );
- /** This action is already documented in modules/contact-form/admin.php */
- do_action( 'contact_form_akismet', 'spam', $meta );
- }
- }
-
- wp_send_json(
- array(
- 'processed' => count( $approved_feedbacks ),
- )
- );
-}
-
-add_action( 'wp_ajax_grunion_recheck_queue', 'grunion_recheck_queue' );
diff --git a/plugins/jetpack/modules/contact-form/class-grunion-contact-form-endpoint.php b/plugins/jetpack/modules/contact-form/class-grunion-contact-form-endpoint.php
deleted file mode 100644
index ba2785a6..00000000
--- a/plugins/jetpack/modules/contact-form/class-grunion-contact-form-endpoint.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-/*
- * Plugin Name: Feedback CPT Permissions over-ride
- */
-
-if ( class_exists( 'WP_REST_Posts_Controller' ) ) {
-
- /**
- * Class Grunion_Contact_Form_Endpoint
- * Used as 'rest_controller_class' parameter when 'feedback' post type is registered in modules/contact-form/grunion-contact-form.php.
- */
- class Grunion_Contact_Form_Endpoint extends WP_REST_Posts_Controller {
- /**
- * Check whether a given request has proper authorization to view feedback items.
- *
- * @param WP_REST_Request $request Full details about the request.
- * @return WP_Error|boolean
- */
- public function get_items_permissions_check( $request ) {
- if ( ! is_user_member_of_blog( get_current_user_id(), get_current_blog_id() ) ) {
- return new WP_Error(
- 'rest_cannot_view',
- esc_html__( 'Sorry, you cannot view this resource.', 'jetpack' ),
- array( 'status' => 401 )
- );
- }
-
- return true;
- }
-
- /**
- * Check whether a given request has proper authorization to view feedback item.
- *
- * @param WP_REST_Request $request Full details about the request.
- * @return WP_Error|boolean
- */
- public function get_item_permissions_check( $request ) {
- if ( ! is_user_member_of_blog( get_current_user_id(), get_current_blog_id() ) ) {
- return new WP_Error(
- 'rest_cannot_view',
- esc_html__( 'Sorry, you cannot view this resource.', 'jetpack' ),
- array( 'status' => 401 )
- );
- }
-
- return true;
- }
-
- }
-
-}
diff --git a/plugins/jetpack/modules/contact-form/css/editor-inline-editing-style-rtl.css b/plugins/jetpack/modules/contact-form/css/editor-inline-editing-style-rtl.css
deleted file mode 100644
index 1cfbf3ce..00000000
--- a/plugins/jetpack/modules/contact-form/css/editor-inline-editing-style-rtl.css
+++ /dev/null
@@ -1,825 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-/* ==========================================================================
-** Normalize
-** ======================================================================== */
-
-html {
- direction: rtl;
-}
-
-body {
- font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
- font-size: 16px;
- line-height: 1.4em;
- margin: 0;
-}
-
-/* Links */
-a,
-a:visited {
- color: #0087be;
- text-decoration: none;
-}
-
-a:hover,
-a:focus,
-a:active {
- color: $link-highlight;
-}
-
-/* ==========================================================================
-** Card
-** ======================================================================= */
-
-.card,
-body {
- display: block;
- position: relative;
- margin: 0 auto 10px auto;
- padding: 16px;
- box-sizing: border-box;
- background: white;
- box-shadow: 0 0 0 1px rgba(200, 215, 225, 0.5), 0 1px 2px #e9eff3;
-}
-
-body {
- margin: 0;
- background: #f5f5f5;
-}
-
-.card:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden;
-}
-
-.card:hover,
-.card:focus {
- box-shadow: 0 0 0 1px #999, 0 1px 2px #e9eff3;
-}
-
-.card .delete-field {
- display: block;
- float: left;
-}
-
-@media ( min-width: 481px ) {
- .card {
- margin-bottom: 16px;
- padding: 24px;
- }
- body {
- padding: 24px;
- }
-}
-
-.card.is-compact {
- margin-bottom: 1px;
-}
-
-@media ( min-width: 481px ) {
- .card.is-compact {
- margin-bottom: 1px;
- padding: 16px 24px;
- }
-}
-
-.card > div {
- margin-top: 24px;
-}
-
-.card > div:first-child {
- margin-top: 0;
-}
-
-
-/* ==========================================================================
-** Labels
-** ======================================================================= */
-
-label {
- display: block;
- font-size: 14px;
- font-weight: 600;
- margin-bottom: 5px;
- margin-top: 8px;
-}
-
-label:first-of-type {
- margin-top: 4px;
-}
-
-
-/* ==========================================================================
-** Text Inputs
-** ======================================================================= */
-
-input[type="text"],
-input[type="tel"],
-input[type="email"],
-input[type="url"] {
- border-radius: 0;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
- box-sizing: border-box;
- margin: 0;
- padding: 7px 14px;
- width: 100%;
- color: #2e4453;
- font-size: 16px;
- line-height: 1.5;
- border: 1px solid #c8d7e1;
- background-color: #fff;
- transition: all .15s ease-in-out;
- box-shadow: none;
-}
-
-input[type="text"]:-ms-input-placeholder,
-input[type="tel"]:-ms-input-placeholder,
-input[type="email"]:-ms-input-placeholder,
-input[type="url"]:-ms-input-placeholder {
- color: #87a6bc;
-}
-
-input[type="text"]::-ms-input-placeholder,
-input[type="tel"]::-ms-input-placeholder,
-input[type="email"]::-ms-input-placeholder,
-input[type="url"]::-ms-input-placeholder {
- color: #87a6bc;
-}
-
-input[type="text"]::placeholder,
-input[type="tel"]::placeholder,
-input[type="email"]::placeholder,
-input[type="url"]::placeholder {
- color: #87a6bc;
-}
-
-input[type="text"]:hover,
-input[type="tel"]:hover,
-input[type="email"]:hover,
-input[type="url"]:hover {
- border-color: #a8bece;
-}
-
-input[type="text"]:focus,
-input[type="tel"]:focus,
-input[type="email"]:focus,
-input[type="url"]:focus {
- border-color: #0087be;
- outline: none;
- box-shadow: 0 0 0 2px #78dcfa;
-}
-
-input[type="text"]:focus::-ms-clear,
-input[type="tel"]:focus::-ms-clear,
-input[type="email"]:focus::-ms-clear,
-input[type="url"]:focus::-ms-clear {
- display: none;
-}
-
-input[type="text"]:disabled,
-input[type="tel"]:disabled,
-input[type="email"]:disabled,
-input[type="url"]:disabled {
- background: #f3f6f8;
- border-color: #e9eff3;
- color: #a8bece;
- -webkit-text-fill-color: #a8bece;
-}
-
-input[type="text"]:disabled:hover,
-input[type="tel"]:disabled:hover,
-input[type="email"]:disabled:hover,
-input[type="url"]:disabled:hover {
- cursor: default;
-}
-
-input[type="text"]:disabled:-ms-input-placeholder,
-input[type="tel"]:disabled:-ms-input-placeholder,
-input[type="email"]:disabled:-ms-input-placeholder,
-input[type="url"]:disabled:-ms-input-placeholder {
- color: #a8bece;
-}
-
-input[type="text"]:disabled::-ms-input-placeholder,
-input[type="tel"]:disabled::-ms-input-placeholder,
-input[type="email"]:disabled::-ms-input-placeholder,
-input[type="url"]:disabled::-ms-input-placeholder {
- color: #a8bece;
-}
-
-input[type="text"]:disabled::placeholder,
-input[type="tel"]:disabled::placeholder,
-input[type="email"]:disabled::placeholder,
-input[type="url"]:disabled::placeholder {
- color: #a8bece;
-}
-
-
-/* ==========================================================================
-** Textareas
-** ======================================================================= */
-
-textarea {
- border-radius: 0;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
- box-sizing: border-box;
- margin: 0;
- padding: 7px 14px;
- height: 92px;
- width: 100%;
- color: #2e4453;
- font-size: 16px;
- line-height: 1.5;
- border: 1px solid #c8d7e1;
- background-color: #fff;
- transition: all .15s ease-in-out;
- box-shadow: none;
-}
-
-textarea:-ms-input-placeholder {
- color: #87a6bc;
-}
-
-textarea::-ms-input-placeholder {
- color: #87a6bc;
-}
-
-textarea::placeholder {
- color: #87a6bc;
-}
-
-textarea:hover {
- border-color: #a8bece;
-}
-
-textarea:focus {
- border-color: #0087be;
- outline: none;
- box-shadow: 0 0 0 2px #78dcfa;
-}
-
-textarea:focus::-ms-clear {
- display: none;
-}
-
-textarea:disabled {
- background: #f3f6f8;
- border-color: #e9eff3;
- color: #a8bece;
- -webkit-text-fill-color: #a8bece;
-}
-
-textarea:disabled:hover {
- cursor: default;
-}
-
-textarea:disabled:-ms-input-placeholder {
- color: #a8bece;
-}
-
-textarea:disabled::-ms-input-placeholder {
- color: #a8bece;
-}
-
-textarea:disabled::placeholder {
- color: #a8bece;
-}
-
-
-/* ==========================================================================
-** Checkboxes
-** ======================================================================= */
-
-.checkbox,
-input[type="checkbox"] {
- -webkit-appearance: none;
- display: inline-block;
- box-sizing: border-box;
- margin: 2px 0 0;
- padding: 7px 14px;
- width: 16px;
- height: 16px;
- float: right;
- outline: 0;
- padding: 0;
- box-shadow: none;
- background-color: #fff;
- border: 1px solid #c8d7e1;
- color: #2e4453;
- font-size: 16px;
- line-height: 0;
- text-align: center;
- vertical-align: middle;
- -moz-appearance: none;
- appearance: none;
- transition: all .15s ease-in-out;
- clear: none;
- cursor: pointer;
-}
-
-.checkbox:checked:before,
-input[type="checkbox"]:checked:before {
- content: '\f147';
- font-family: Dashicons;
- margin: -3px -4px 0 0;
- float: right;
- display: inline-block;
- vertical-align: middle;
- width: 16px;
- font-size: 20px;
- line-height: 1;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- speak: none;
- color: #00aadc;
-}
-
-.checkbox:disabled:checked:before,
-input[type="checkbox"]:disabled:checked:before {
- color: #a8bece;
-}
-
-.checkbox:hover,
-input[type="checkbox"]:hover {
- border-color: #a8bece;
-}
-
-.checkbox:focus,
-input[type="checkbox"]:focus {
- border-color: #0087be;
- outline: none;
- box-shadow: 0 0 0 2px #78dcfa;
-}
-
-.checkbox:disabled,
-input[type="checkbox"]:disabled {
- background: #f3f6f8;
- border-color: #e9eff3;
- color: #a8bece;
- opacity: 1;
-}
-
-.checkbox:disabled:hover,
-input[type="checkbox"]:disabled:hover {
- cursor: default;
-}
-
-.checkbox + span,
-input[type="checkbox"] + span {
- display: block;
- font-weight: normal;
- margin-right: 24px;
-}
-
-
-/* ==========================================================================
-** Radio buttons
-** ======================================================================== */
-
-.radio-button,
-input[type=radio] {
- color: #2e4453;
- font-size: 16px;
- border: 1px solid #c8d7e1;
- background-color: #fff;
- transition: all .15s ease-in-out;
- box-sizing: border-box;
- -webkit-appearance: none;
- clear: none;
- cursor: pointer;
- display: inline-block;
- line-height: 0;
- height: 16px;
- margin: 2px 0 0 4px;
- float: right;
- outline: 0;
- padding: 0;
- text-align: center;
- vertical-align: middle;
- width: 16px;
- min-width: 16px;
- -moz-appearance: none;
- appearance: none;
- border-radius: 50%;
- line-height: 10px;
-}
-
-.radio-button:hover,
-input[type="radio"]:hover {
- border-color: #a8bece;
-}
-
-.radio-button:focus,
-input[type="radio"]:focus {
- border-color: #0087be;
- outline: none;
- box-shadow: 0 0 0 2px #78dcfa;
-}
-
-.radio-button:focus::-ms-clear,
-input[type="radio"]:focus::-ms-clear {
- display: none;
-}
-
-.radio-button:checked:before,
-input[type="radio"]:checked:before {
- float: right;
- display: inline-block;
- content: '\2022';
- margin: 3px;
- width: 8px;
- height: 8px;
- text-indent: -9999px;
- background: #00aadc;
- vertical-align: middle;
- border-radius: 50%;
- animation: grow .2s ease-in-out;
-}
-
-.radio-button:disabled,
-input[type="radio"]:disabled {
- background: #f3f6f8;
- border-color: #e9eff3;
- color: #a8bece;
- opacity: 1;
- -webkit-text-fill-color: #a8bece;
-}
-
-.radio-button:disabled:hover,
-input[type="radio"]:disabled:hover {
- cursor: default;
-}
-
-.radio-button:disabled:-ms-input-placeholder,
-input[type="radio"]:disabled:-ms-input-placeholder {
- color: #a8bece;
-}
-
-.radio-button:disabled::-ms-input-placeholder,
-input[type="radio"]:disabled::-ms-input-placeholder {
- color: #a8bece;
-}
-
-.radio-button:disabled::placeholder,
-input[type="radio"]:disabled::placeholder {
- color: #a8bece;
-}
-
-.radio-button:disabled:checked::before,
-input[type="radio"]:disabled:checked:before {
- background: #e9eff3;
-}
-
-.radio-button + span,
-input[type="radio"] + span {
- display: block;
- font-weight: normal;
- margin-right: 24px;
-}
-
-@keyframes grow {
- 0% {
- transform: scale(0.3);
- }
-
- 60% {
- transform: scale(1.15);
- }
-
- 100% {
- transform: scale(1);
- }
-}
-
-@keyframes grow {
- 0% {
- transform: scale(0.3);
- }
-
- 60% {
- transform: scale(1.15);
- }
-
- 100% {
- transform: scale(1);
- }
-}
-
-
-/* ==========================================================================
-** Selects
-** ======================================================================== */
-
-select {
- background: #fff url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjQzhEN0UxIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==) no-repeat left 10px center;
- border-color: #c8d7e1;
- border-style: solid;
- border-radius: 4px;
- border-width: 1px 1px 2px;
- color: #2e4453;
- cursor: pointer;
- display: inline-block;
- margin: 0;
- outline: 0;
- overflow: hidden;
- font-size: 14px;
- line-height: 21px;
- font-weight: 600;
- text-overflow: ellipsis;
- text-decoration: none;
- vertical-align: top;
- white-space: nowrap;
- box-sizing: border-box;
- /* Aligns the text to the 8px baseline grid and adds padding on right to allow for the arrow. */
- padding: 7px 14px 9px 32px;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
-}
-
-select:hover {
- background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjYThiZWNlIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==);
-}
-
-select:focus {
- background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiA8dGl0bGU+YXJyb3ctZG93bjwvdGl0bGU+IDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiA8ZGVmcz48L2RlZnM+IDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNrZXRjaDp0eXBlPSJNU1BhZ2UiPiA8ZyBpZD0iYXJyb3ctZG93biIgc2tldGNoOnR5cGU9Ik1TQXJ0Ym9hcmRHcm91cCIgZmlsbD0iIzJlNDQ1MyI+IDxwYXRoIGQ9Ik0xNS41LDYgTDE3LDcuNSBMMTAuMjUsMTQuMjUgTDMuNSw3LjUgTDUsNiBMMTAuMjUsMTEuMjUgTDE1LjUsNiBaIiBpZD0iRG93bi1BcnJvdyIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPiA8L2c+IDwvZz48L3N2Zz4=);
- border-color: #00aadc;
- box-shadow: 0 0 0 2px #78dcfa;
- outline: 0;
- -moz-outline:none;
- -moz-user-focus:ignore;
-}
-
-select:disabled,
-select:hover:disabled {
- background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjZTllZmYzIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==) no-repeat left 10px center;;
-}
-
-select.is-compact {
- min-width: 0;
- padding: 0 6px 2px 20px;
- margin: 0 4px;
- background-position: left 5px center;
- background-size: 12px 12px;
-}
-
-/* Make it display:block when it follows a label */
-label select,
-label + select {
- display: block;
- min-width: 200px;
-}
-
-label select.is-compact,
-label + select.is-compact {
- display: inline-block;
- min-width: 0;
-}
-
-/* IE: Remove the default arrow */
-select::-ms-expand {
- display: none;
-}
-
-/* IE: Remove default background and color styles on focus */
-select::-ms-value {
- background: none;
- color: #2e4453;
-}
-
-/* Firefox: Remove the focus outline, see http://stackoverflow.com/questions/3773430/remove-outline-from-select-box-in-ff/18853002#18853002 */
-select:-moz-focusring {
- color: transparent;
- text-shadow: 0 0 0 #2e4453;
-}
-
-
-/* ==========================================================================
-** Buttons
-** ======================================================================== */
-
-input[type="submit"] {
- padding: 0;
- font-size: 14px;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
- vertical-align: baseline;
- background: white;
- border-color: #c8d7e1;
- border-style: solid;
- border-width: 1px 1px 2px;
- color: #2e4453;
- cursor: pointer;
- display: inline-block;
- margin: 24px 0 0;
- outline: 0;
- overflow: hidden;
- font-weight: 500;
- text-overflow: ellipsis;
- text-decoration: none;
- vertical-align: top;
- box-sizing: border-box;
- font-size: 14px;
- line-height: 21px;
- border-radius: 4px;
- padding: 7px 14px 9px;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
-}
-
-input[type="submit"]:hover {
- border-color: #a8bece;
- color: #2e4453;
-}
-
-input[type="submit"]:active {
- border-width: 2px 1px 1px;
-}
-
-input[type="submit"]:visited {
- color: #2e4453;
-}
-
-input[type="submit"][disabled],
-input[type="submit"]:disabled {
- color: #e9eff3;
- background: white;
- border-color: #e9eff3;
- cursor: default;
-}
-
-input[type="submit"][disabled]:active,
-input[type="submit"]:disabled:active {
- border-width: 1px 1px 2px;
-}
-
-input[type="submit"]:focus {
- border-color: #00aadc;
- box-shadow: 0 0 0 2px #78dcfa;
-}
-
-input[type="submit"].hidden {
- display: none;
-}
-
-input[type="submit"] .gridicon {
- position: relative;
- top: 4px;
- margin-top: -2px;
- width: 18px;
- height: 18px;
-}
-
-input[type="submit"].button-primary {
- background: #00aadc;
- border-color: #008ab3;
- color: white;
-}
-
-input[type="submit"].button-primary:hover,
-input[type="submit"].button-primary:focus {
- border-color: #005082;
- color: white;
-}
-
-input[type="submit"].button-primary[disabled],
-input[type="submit"].button-primary:disabled {
- background: #bceefd;
- border-color: #8cc9e2;
- color: white;
-}
-
-input[type="submit"].button-primary {
- color: white;
-}
-
-
-/* ==========================================================================
-** Inline editor styles
-** ======================================================================== */
-
-
-.ui-sortable-handle {
- cursor: move;
-}
-
-.grunion-section-header {
- font-size: 21px;
- margin-top: 32px;
- font-weight: 600;
-}
-
-.grunion-form-settings:hover {
- box-shadow: 0 0 0 1px rgba(200, 215, 225, 0.5), 0 1px 2px #e9eff3;
-}
-
-.grunion-section-header:first-child {
- margin-top: 0;
-}
-
-.grunion-type-options {
- display: flex;
- flex-wrap: wrap;
-}
-
-.grunion-type {
- flex-grow: 0;
- flex-shrink: 0;
-}
-
-.grunion-type select {
- -webkit-appearance: none;
- width: 100%;
-}
-
-.grunion-required {
- padding: 27px 16px 0 0;
- flex-grow: 0;
- flex-shrink: 0;
-}
-
-.grunion-options {
- padding-top: 16px;
-}
-
-.grunion-options ol {
- list-style: none;
- padding: 0;
- margin: 8px 0 0;
-}
-
-.grunion-options li {
- display: flex;
- margin-bottom: 16px;
-}
-
-.grunion-field-edit .grunion-options {
- display: none;
-}
-
-.delete-option,
-.delete-field {
- color: #0087be;
- text-decoration: none;
- width: 40px;
- line-height: 40px;
- font-size: 21px;
- text-align: center;
- font-weight: 600;
-}
-
-.delete-field {
- position: absolute;
- top: 0;
- left: 0;
-}
-
-.grunion-controls {
- display: flex;
- flex-wrap: wrap;
-}
-
-.grunion-update-controls {
- text-align: left;
- flex-grow: 1;
-}
-
-#add-field {
- flex-grow: 0;
-}
-
-.delete-option:before,
-.delete-field:before {
- font-family: Dashicons;
-/* content: "\f158"; /* This is the bolder X */
- content: "\f335"; /* This is the thinner X */
- display: inline-block;
- speak: none;
-}
-
-.grunion-field-edit.grunion-field-checkbox-multiple .grunion-options,
-.grunion-field-edit.grunion-field-radio .grunion-options,
-.grunion-field-edit.grunion-field-select .grunion-options {
- display: block;
-}
-
-.screen-reader-text {
- position: absolute;
- margin: -1px;
- padding: 0;
- height: 1px;
- width: 1px;
- overflow: hidden;
- clip: rect(0 0 0 0);
- border: 0;
- word-wrap: normal !important; /* many screen reader and browser combinations announce broken words as they would appear visually */
-}
diff --git a/plugins/jetpack/modules/contact-form/css/editor-inline-editing-style-rtl.min.css b/plugins/jetpack/modules/contact-form/css/editor-inline-editing-style-rtl.min.css
deleted file mode 100644
index 9b7a27c2..00000000
--- a/plugins/jetpack/modules/contact-form/css/editor-inline-editing-style-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-html{direction:rtl}body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:1.4em;margin:0}a,a:visited{color:#0087be;text-decoration:none}a:active,a:focus,a:hover{color:$link-highlight}.card,body{display:block;position:relative;margin:0 auto 10px auto;padding:16px;box-sizing:border-box;background:#fff;box-shadow:0 0 0 1px rgba(200,215,225,.5),0 1px 2px #e9eff3}body{margin:0;background:#f5f5f5}.card:after{content:".";display:block;height:0;clear:both;visibility:hidden}.card:focus,.card:hover{box-shadow:0 0 0 1px #999,0 1px 2px #e9eff3}.card .delete-field{display:block;float:left}@media (min-width:481px){.card{margin-bottom:16px;padding:24px}body{padding:24px}}.card.is-compact{margin-bottom:1px}@media (min-width:481px){.card.is-compact{margin-bottom:1px;padding:16px 24px}}.card>div{margin-top:24px}.card>div:first-child{margin-top:0}label{display:block;font-size:14px;font-weight:600;margin-bottom:5px;margin-top:8px}label:first-of-type{margin-top:4px}input[type=email],input[type=tel],input[type=text],input[type=url]{border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;margin:0;padding:7px 14px;width:100%;color:#2e4453;font-size:16px;line-height:1.5;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-shadow:none}input[type=email]:-ms-input-placeholder,input[type=tel]:-ms-input-placeholder,input[type=text]:-ms-input-placeholder,input[type=url]:-ms-input-placeholder{color:#87a6bc}input[type=email]::-ms-input-placeholder,input[type=tel]::-ms-input-placeholder,input[type=text]::-ms-input-placeholder,input[type=url]::-ms-input-placeholder{color:#87a6bc}input[type=email]::placeholder,input[type=tel]::placeholder,input[type=text]::placeholder,input[type=url]::placeholder{color:#87a6bc}input[type=email]:hover,input[type=tel]:hover,input[type=text]:hover,input[type=url]:hover{border-color:#a8bece}input[type=email]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=url]:focus{border-color:#0087be;outline:0;box-shadow:0 0 0 2px #78dcfa}input[type=email]:focus::-ms-clear,input[type=tel]:focus::-ms-clear,input[type=text]:focus::-ms-clear,input[type=url]:focus::-ms-clear{display:none}input[type=email]:disabled,input[type=tel]:disabled,input[type=text]:disabled,input[type=url]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;-webkit-text-fill-color:#a8bece}input[type=email]:disabled:hover,input[type=tel]:disabled:hover,input[type=text]:disabled:hover,input[type=url]:disabled:hover{cursor:default}input[type=email]:disabled:-ms-input-placeholder,input[type=tel]:disabled:-ms-input-placeholder,input[type=text]:disabled:-ms-input-placeholder,input[type=url]:disabled:-ms-input-placeholder{color:#a8bece}input[type=email]:disabled::-ms-input-placeholder,input[type=tel]:disabled::-ms-input-placeholder,input[type=text]:disabled::-ms-input-placeholder,input[type=url]:disabled::-ms-input-placeholder{color:#a8bece}input[type=email]:disabled::placeholder,input[type=tel]:disabled::placeholder,input[type=text]:disabled::placeholder,input[type=url]:disabled::placeholder{color:#a8bece}textarea{border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;margin:0;padding:7px 14px;height:92px;width:100%;color:#2e4453;font-size:16px;line-height:1.5;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-shadow:none}textarea:-ms-input-placeholder{color:#87a6bc}textarea::-ms-input-placeholder{color:#87a6bc}textarea::placeholder{color:#87a6bc}textarea:hover{border-color:#a8bece}textarea:focus{border-color:#0087be;outline:0;box-shadow:0 0 0 2px #78dcfa}textarea:focus::-ms-clear{display:none}textarea:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;-webkit-text-fill-color:#a8bece}textarea:disabled:hover{cursor:default}textarea:disabled:-ms-input-placeholder{color:#a8bece}textarea:disabled::-ms-input-placeholder{color:#a8bece}textarea:disabled::placeholder{color:#a8bece}.checkbox,input[type=checkbox]{-webkit-appearance:none;display:inline-block;box-sizing:border-box;margin:2px 0 0;padding:7px 14px;width:16px;height:16px;float:right;outline:0;padding:0;box-shadow:none;background-color:#fff;border:1px solid #c8d7e1;color:#2e4453;font-size:16px;line-height:0;text-align:center;vertical-align:middle;-moz-appearance:none;appearance:none;transition:all .15s ease-in-out;clear:none;cursor:pointer}.checkbox:checked:before,input[type=checkbox]:checked:before{content:'\f147';font-family:Dashicons;margin:-3px -4px 0 0;float:right;display:inline-block;vertical-align:middle;width:16px;font-size:20px;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;color:#00aadc}.checkbox:disabled:checked:before,input[type=checkbox]:disabled:checked:before{color:#a8bece}.checkbox:hover,input[type=checkbox]:hover{border-color:#a8bece}.checkbox:focus,input[type=checkbox]:focus{border-color:#0087be;outline:0;box-shadow:0 0 0 2px #78dcfa}.checkbox:disabled,input[type=checkbox]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;opacity:1}.checkbox:disabled:hover,input[type=checkbox]:disabled:hover{cursor:default}.checkbox+span,input[type=checkbox]+span{display:block;font-weight:400;margin-right:24px}.radio-button,input[type=radio]{color:#2e4453;font-size:16px;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-sizing:border-box;-webkit-appearance:none;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:2px 0 0 4px;float:right;outline:0;padding:0;text-align:center;vertical-align:middle;width:16px;min-width:16px;-moz-appearance:none;appearance:none;border-radius:50%;line-height:10px}.radio-button:hover,input[type=radio]:hover{border-color:#a8bece}.radio-button:focus,input[type=radio]:focus{border-color:#0087be;outline:0;box-shadow:0 0 0 2px #78dcfa}.radio-button:focus::-ms-clear,input[type=radio]:focus::-ms-clear{display:none}.radio-button:checked:before,input[type=radio]:checked:before{float:right;display:inline-block;content:'\2022';margin:3px;width:8px;height:8px;text-indent:-9999px;background:#00aadc;vertical-align:middle;border-radius:50%;animation:grow .2s ease-in-out}.radio-button:disabled,input[type=radio]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;opacity:1;-webkit-text-fill-color:#a8bece}.radio-button:disabled:hover,input[type=radio]:disabled:hover{cursor:default}.radio-button:disabled:-ms-input-placeholder,input[type=radio]:disabled:-ms-input-placeholder{color:#a8bece}.radio-button:disabled::-ms-input-placeholder,input[type=radio]:disabled::-ms-input-placeholder{color:#a8bece}.radio-button:disabled::placeholder,input[type=radio]:disabled::placeholder{color:#a8bece}.radio-button:disabled:checked::before,input[type=radio]:disabled:checked:before{background:#e9eff3}.radio-button+span,input[type=radio]+span{display:block;font-weight:400;margin-right:24px}@keyframes grow{0%{transform:scale(.3)}60%{transform:scale(1.15)}100%{transform:scale(1)}}@keyframes grow{0%{transform:scale(.3)}60%{transform:scale(1.15)}100%{transform:scale(1)}}select{background:#fff url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjQzhEN0UxIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==) no-repeat left 10px center;border-color:#c8d7e1;border-style:solid;border-radius:4px;border-width:1px 1px 2px;color:#2e4453;cursor:pointer;display:inline-block;margin:0;outline:0;overflow:hidden;font-size:14px;line-height:21px;font-weight:600;text-overflow:ellipsis;text-decoration:none;vertical-align:top;white-space:nowrap;box-sizing:border-box;padding:7px 14px 9px 32px;-webkit-appearance:none;-moz-appearance:none;appearance:none}select:hover{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjYThiZWNlIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==)}select:focus{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiA8dGl0bGU+YXJyb3ctZG93bjwvdGl0bGU+IDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiA8ZGVmcz48L2RlZnM+IDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNrZXRjaDp0eXBlPSJNU1BhZ2UiPiA8ZyBpZD0iYXJyb3ctZG93biIgc2tldGNoOnR5cGU9Ik1TQXJ0Ym9hcmRHcm91cCIgZmlsbD0iIzJlNDQ1MyI+IDxwYXRoIGQ9Ik0xNS41LDYgTDE3LDcuNSBMMTAuMjUsMTQuMjUgTDMuNSw3LjUgTDUsNiBMMTAuMjUsMTEuMjUgTDE1LjUsNiBaIiBpZD0iRG93bi1BcnJvdyIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPiA8L2c+IDwvZz48L3N2Zz4=);border-color:#00aadc;box-shadow:0 0 0 2px #78dcfa;outline:0;-moz-outline:none;-moz-user-focus:ignore}select:disabled,select:hover:disabled{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjZTllZmYzIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==) no-repeat left 10px center}select.is-compact{min-width:0;padding:0 6px 2px 20px;margin:0 4px;background-position:left 5px center;background-size:12px 12px}label select,label+select{display:block;min-width:200px}label select.is-compact,label+select.is-compact{display:inline-block;min-width:0}select::-ms-expand{display:none}select::-ms-value{background:0 0;color:#2e4453}select:-moz-focusring{color:transparent;text-shadow:0 0 0 #2e4453}input[type=submit]{padding:0;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;vertical-align:baseline;background:#fff;border-color:#c8d7e1;border-style:solid;border-width:1px 1px 2px;color:#2e4453;cursor:pointer;display:inline-block;margin:24px 0 0;outline:0;overflow:hidden;font-weight:500;text-overflow:ellipsis;text-decoration:none;vertical-align:top;box-sizing:border-box;font-size:14px;line-height:21px;border-radius:4px;padding:7px 14px 9px;-webkit-appearance:none;-moz-appearance:none;appearance:none}input[type=submit]:hover{border-color:#a8bece;color:#2e4453}input[type=submit]:active{border-width:2px 1px 1px}input[type=submit]:visited{color:#2e4453}input[type=submit]:disabled,input[type=submit][disabled]{color:#e9eff3;background:#fff;border-color:#e9eff3;cursor:default}input[type=submit]:disabled:active,input[type=submit][disabled]:active{border-width:1px 1px 2px}input[type=submit]:focus{border-color:#00aadc;box-shadow:0 0 0 2px #78dcfa}input[type=submit].hidden{display:none}input[type=submit] .gridicon{position:relative;top:4px;margin-top:-2px;width:18px;height:18px}input[type=submit].button-primary{background:#00aadc;border-color:#008ab3;color:#fff}input[type=submit].button-primary:focus,input[type=submit].button-primary:hover{border-color:#005082;color:#fff}input[type=submit].button-primary:disabled,input[type=submit].button-primary[disabled]{background:#bceefd;border-color:#8cc9e2;color:#fff}input[type=submit].button-primary{color:#fff}.ui-sortable-handle{cursor:move}.grunion-section-header{font-size:21px;margin-top:32px;font-weight:600}.grunion-form-settings:hover{box-shadow:0 0 0 1px rgba(200,215,225,.5),0 1px 2px #e9eff3}.grunion-section-header:first-child{margin-top:0}.grunion-type-options{display:flex;flex-wrap:wrap}.grunion-type{flex-grow:0;flex-shrink:0}.grunion-type select{-webkit-appearance:none;width:100%}.grunion-required{padding:27px 16px 0 0;flex-grow:0;flex-shrink:0}.grunion-options{padding-top:16px}.grunion-options ol{list-style:none;padding:0;margin:8px 0 0}.grunion-options li{display:flex;margin-bottom:16px}.grunion-field-edit .grunion-options{display:none}.delete-field,.delete-option{color:#0087be;text-decoration:none;width:40px;line-height:40px;font-size:21px;text-align:center;font-weight:600}.delete-field{position:absolute;top:0;left:0}.grunion-controls{display:flex;flex-wrap:wrap}.grunion-update-controls{text-align:left;flex-grow:1}#add-field{flex-grow:0}.delete-field:before,.delete-option:before{font-family:Dashicons;content:"\f335";display:inline-block;speak:none}.grunion-field-edit.grunion-field-checkbox-multiple .grunion-options,.grunion-field-edit.grunion-field-radio .grunion-options,.grunion-field-edit.grunion-field-select .grunion-options{display:block}.screen-reader-text{position:absolute;margin:-1px;padding:0;height:1px;width:1px;overflow:hidden;clip:rect(0 0 0 0);border:0;word-wrap:normal!important} \ No newline at end of file
diff --git a/plugins/jetpack/modules/contact-form/css/editor-inline-editing-style.css b/plugins/jetpack/modules/contact-form/css/editor-inline-editing-style.css
deleted file mode 100644
index 13db02fd..00000000
--- a/plugins/jetpack/modules/contact-form/css/editor-inline-editing-style.css
+++ /dev/null
@@ -1,764 +0,0 @@
-/* ==========================================================================
-** Normalize
-** ======================================================================== */
-
-html {
- direction: ltr;
-}
-
-body {
- font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
- font-size: 16px;
- line-height: 1.4em;
- margin: 0;
-}
-
-/* Links */
-a,
-a:visited {
- color: #0087be;
- text-decoration: none;
-}
-
-a:hover,
-a:focus,
-a:active {
- color: $link-highlight;
-}
-
-/* ==========================================================================
-** Card
-** ======================================================================= */
-
-.card,
-body {
- display: block;
- position: relative;
- margin: 0 auto 10px auto;
- padding: 16px;
- box-sizing: border-box;
- background: white;
- box-shadow: 0 0 0 1px rgba(200, 215, 225, 0.5), 0 1px 2px #e9eff3;
-}
-
-body {
- margin: 0;
- background: #f5f5f5;
-}
-
-.card:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden;
-}
-
-.card:hover,
-.card:focus {
- box-shadow: 0 0 0 1px #999, 0 1px 2px #e9eff3;
-}
-
-.card .delete-field {
- display: block;
- float: right;
-}
-
-@media ( min-width: 481px ) {
- .card {
- margin-bottom: 16px;
- padding: 24px;
- }
- body {
- padding: 24px;
- }
-}
-
-.card.is-compact {
- margin-bottom: 1px;
-}
-
-@media ( min-width: 481px ) {
- .card.is-compact {
- margin-bottom: 1px;
- padding: 16px 24px;
- }
-}
-
-.card > div {
- margin-top: 24px;
-}
-
-.card > div:first-child {
- margin-top: 0;
-}
-
-
-/* ==========================================================================
-** Labels
-** ======================================================================= */
-
-label {
- display: block;
- font-size: 14px;
- font-weight: 600;
- margin-bottom: 5px;
- margin-top: 8px;
-}
-
-label:first-of-type {
- margin-top: 4px;
-}
-
-
-/* ==========================================================================
-** Text Inputs
-** ======================================================================= */
-
-input[type="text"],
-input[type="tel"],
-input[type="email"],
-input[type="url"] {
- border-radius: 0;
- appearance: none;
- box-sizing: border-box;
- margin: 0;
- padding: 7px 14px;
- width: 100%;
- color: #2e4453;
- font-size: 16px;
- line-height: 1.5;
- border: 1px solid #c8d7e1;
- background-color: #fff;
- transition: all .15s ease-in-out;
- box-shadow: none;
-}
-
-input[type="text"]::placeholder,
-input[type="tel"]::placeholder,
-input[type="email"]::placeholder,
-input[type="url"]::placeholder {
- color: #87a6bc;
-}
-
-input[type="text"]:hover,
-input[type="tel"]:hover,
-input[type="email"]:hover,
-input[type="url"]:hover {
- border-color: #a8bece;
-}
-
-input[type="text"]:focus,
-input[type="tel"]:focus,
-input[type="email"]:focus,
-input[type="url"]:focus {
- border-color: #0087be;
- outline: none;
- box-shadow: 0 0 0 2px #78dcfa;
-}
-
-input[type="text"]:focus::-ms-clear,
-input[type="tel"]:focus::-ms-clear,
-input[type="email"]:focus::-ms-clear,
-input[type="url"]:focus::-ms-clear {
- display: none;
-}
-
-input[type="text"]:disabled,
-input[type="tel"]:disabled,
-input[type="email"]:disabled,
-input[type="url"]:disabled {
- background: #f3f6f8;
- border-color: #e9eff3;
- color: #a8bece;
- -webkit-text-fill-color: #a8bece;
-}
-
-input[type="text"]:disabled:hover,
-input[type="tel"]:disabled:hover,
-input[type="email"]:disabled:hover,
-input[type="url"]:disabled:hover {
- cursor: default;
-}
-
-input[type="text"]:disabled::placeholder,
-input[type="tel"]:disabled::placeholder,
-input[type="email"]:disabled::placeholder,
-input[type="url"]:disabled::placeholder {
- color: #a8bece;
-}
-
-
-/* ==========================================================================
-** Textareas
-** ======================================================================= */
-
-textarea {
- border-radius: 0;
- appearance: none;
- box-sizing: border-box;
- margin: 0;
- padding: 7px 14px;
- height: 92px;
- width: 100%;
- color: #2e4453;
- font-size: 16px;
- line-height: 1.5;
- border: 1px solid #c8d7e1;
- background-color: #fff;
- transition: all .15s ease-in-out;
- box-shadow: none;
-}
-
-textarea::placeholder {
- color: #87a6bc;
-}
-
-textarea:hover {
- border-color: #a8bece;
-}
-
-textarea:focus {
- border-color: #0087be;
- outline: none;
- box-shadow: 0 0 0 2px #78dcfa;
-}
-
-textarea:focus::-ms-clear {
- display: none;
-}
-
-textarea:disabled {
- background: #f3f6f8;
- border-color: #e9eff3;
- color: #a8bece;
- -webkit-text-fill-color: #a8bece;
-}
-
-textarea:disabled:hover {
- cursor: default;
-}
-
-textarea:disabled::placeholder {
- color: #a8bece;
-}
-
-
-/* ==========================================================================
-** Checkboxes
-** ======================================================================= */
-
-.checkbox,
-input[type="checkbox"] {
- -webkit-appearance: none;
- display: inline-block;
- box-sizing: border-box;
- margin: 2px 0 0;
- padding: 7px 14px;
- width: 16px;
- height: 16px;
- float: left;
- outline: 0;
- padding: 0;
- box-shadow: none;
- background-color: #fff;
- border: 1px solid #c8d7e1;
- color: #2e4453;
- font-size: 16px;
- line-height: 0;
- text-align: center;
- vertical-align: middle;
- appearance: none;
- transition: all .15s ease-in-out;
- clear: none;
- cursor: pointer;
-}
-
-.checkbox:checked:before,
-input[type="checkbox"]:checked:before {
- content: '\f147';
- font-family: Dashicons;
- margin: -3px 0 0 -4px;
- float: left;
- display: inline-block;
- vertical-align: middle;
- width: 16px;
- font-size: 20px;
- line-height: 1;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- speak: none;
- color: #00aadc;
-}
-
-.checkbox:disabled:checked:before,
-input[type="checkbox"]:disabled:checked:before {
- color: #a8bece;
-}
-
-.checkbox:hover,
-input[type="checkbox"]:hover {
- border-color: #a8bece;
-}
-
-.checkbox:focus,
-input[type="checkbox"]:focus {
- border-color: #0087be;
- outline: none;
- box-shadow: 0 0 0 2px #78dcfa;
-}
-
-.checkbox:disabled,
-input[type="checkbox"]:disabled {
- background: #f3f6f8;
- border-color: #e9eff3;
- color: #a8bece;
- opacity: 1;
-}
-
-.checkbox:disabled:hover,
-input[type="checkbox"]:disabled:hover {
- cursor: default;
-}
-
-.checkbox + span,
-input[type="checkbox"] + span {
- display: block;
- font-weight: normal;
- margin-left: 24px;
-}
-
-
-/* ==========================================================================
-** Radio buttons
-** ======================================================================== */
-
-.radio-button,
-input[type=radio] {
- color: #2e4453;
- font-size: 16px;
- border: 1px solid #c8d7e1;
- background-color: #fff;
- transition: all .15s ease-in-out;
- box-sizing: border-box;
- -webkit-appearance: none;
- clear: none;
- cursor: pointer;
- display: inline-block;
- line-height: 0;
- height: 16px;
- margin: 2px 4px 0 0;
- float: left;
- outline: 0;
- padding: 0;
- text-align: center;
- vertical-align: middle;
- width: 16px;
- min-width: 16px;
- appearance: none;
- border-radius: 50%;
- line-height: 10px;
-}
-
-.radio-button:hover,
-input[type="radio"]:hover {
- border-color: #a8bece;
-}
-
-.radio-button:focus,
-input[type="radio"]:focus {
- border-color: #0087be;
- outline: none;
- box-shadow: 0 0 0 2px #78dcfa;
-}
-
-.radio-button:focus::-ms-clear,
-input[type="radio"]:focus::-ms-clear {
- display: none;
-}
-
-.radio-button:checked:before,
-input[type="radio"]:checked:before {
- float: left;
- display: inline-block;
- content: '\2022';
- margin: 3px;
- width: 8px;
- height: 8px;
- text-indent: -9999px;
- background: #00aadc;
- vertical-align: middle;
- border-radius: 50%;
- animation: grow .2s ease-in-out;
-}
-
-.radio-button:disabled,
-input[type="radio"]:disabled {
- background: #f3f6f8;
- border-color: #e9eff3;
- color: #a8bece;
- opacity: 1;
- -webkit-text-fill-color: #a8bece;
-}
-
-.radio-button:disabled:hover,
-input[type="radio"]:disabled:hover {
- cursor: default;
-}
-
-.radio-button:disabled::placeholder,
-input[type="radio"]:disabled::placeholder {
- color: #a8bece;
-}
-
-.radio-button:disabled:checked::before,
-input[type="radio"]:disabled:checked:before {
- background: #e9eff3;
-}
-
-.radio-button + span,
-input[type="radio"] + span {
- display: block;
- font-weight: normal;
- margin-left: 24px;
-}
-
-@keyframes grow {
- 0% {
- transform: scale(0.3);
- }
-
- 60% {
- transform: scale(1.15);
- }
-
- 100% {
- transform: scale(1);
- }
-}
-
-@keyframes grow {
- 0% {
- transform: scale(0.3);
- }
-
- 60% {
- transform: scale(1.15);
- }
-
- 100% {
- transform: scale(1);
- }
-}
-
-
-/* ==========================================================================
-** Selects
-** ======================================================================== */
-
-select {
- background: #fff url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjQzhEN0UxIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==) no-repeat right 10px center;
- border-color: #c8d7e1;
- border-style: solid;
- border-radius: 4px;
- border-width: 1px 1px 2px;
- color: #2e4453;
- cursor: pointer;
- display: inline-block;
- margin: 0;
- outline: 0;
- overflow: hidden;
- font-size: 14px;
- line-height: 21px;
- font-weight: 600;
- text-overflow: ellipsis;
- text-decoration: none;
- vertical-align: top;
- white-space: nowrap;
- box-sizing: border-box;
- /* Aligns the text to the 8px baseline grid and adds padding on right to allow for the arrow. */
- padding: 7px 32px 9px 14px;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
-}
-
-select:hover {
- background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjYThiZWNlIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==);
-}
-
-select:focus {
- background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiA8dGl0bGU+YXJyb3ctZG93bjwvdGl0bGU+IDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiA8ZGVmcz48L2RlZnM+IDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNrZXRjaDp0eXBlPSJNU1BhZ2UiPiA8ZyBpZD0iYXJyb3ctZG93biIgc2tldGNoOnR5cGU9Ik1TQXJ0Ym9hcmRHcm91cCIgZmlsbD0iIzJlNDQ1MyI+IDxwYXRoIGQ9Ik0xNS41LDYgTDE3LDcuNSBMMTAuMjUsMTQuMjUgTDMuNSw3LjUgTDUsNiBMMTAuMjUsMTEuMjUgTDE1LjUsNiBaIiBpZD0iRG93bi1BcnJvdyIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPiA8L2c+IDwvZz48L3N2Zz4=);
- border-color: #00aadc;
- box-shadow: 0 0 0 2px #78dcfa;
- outline: 0;
- -moz-outline:none;
- -moz-user-focus:ignore;
-}
-
-select:disabled,
-select:hover:disabled {
- background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjZTllZmYzIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==) no-repeat right 10px center;;
-}
-
-select.is-compact {
- min-width: 0;
- padding: 0 20px 2px 6px;
- margin: 0 4px;
- background-position: right 5px center;
- background-size: 12px 12px;
-}
-
-/* Make it display:block when it follows a label */
-label select,
-label + select {
- display: block;
- min-width: 200px;
-}
-
-label select.is-compact,
-label + select.is-compact {
- display: inline-block;
- min-width: 0;
-}
-
-/* IE: Remove the default arrow */
-select::-ms-expand {
- display: none;
-}
-
-/* IE: Remove default background and color styles on focus */
-select::-ms-value {
- background: none;
- color: #2e4453;
-}
-
-/* Firefox: Remove the focus outline, see http://stackoverflow.com/questions/3773430/remove-outline-from-select-box-in-ff/18853002#18853002 */
-select:-moz-focusring {
- color: transparent;
- text-shadow: 0 0 0 #2e4453;
-}
-
-
-/* ==========================================================================
-** Buttons
-** ======================================================================== */
-
-input[type="submit"] {
- padding: 0;
- font-size: 14px;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
- vertical-align: baseline;
- background: white;
- border-color: #c8d7e1;
- border-style: solid;
- border-width: 1px 1px 2px;
- color: #2e4453;
- cursor: pointer;
- display: inline-block;
- margin: 24px 0 0;
- outline: 0;
- overflow: hidden;
- font-weight: 500;
- text-overflow: ellipsis;
- text-decoration: none;
- vertical-align: top;
- box-sizing: border-box;
- font-size: 14px;
- line-height: 21px;
- border-radius: 4px;
- padding: 7px 14px 9px;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
-}
-
-input[type="submit"]:hover {
- border-color: #a8bece;
- color: #2e4453;
-}
-
-input[type="submit"]:active {
- border-width: 2px 1px 1px;
-}
-
-input[type="submit"]:visited {
- color: #2e4453;
-}
-
-input[type="submit"][disabled],
-input[type="submit"]:disabled {
- color: #e9eff3;
- background: white;
- border-color: #e9eff3;
- cursor: default;
-}
-
-input[type="submit"][disabled]:active,
-input[type="submit"]:disabled:active {
- border-width: 1px 1px 2px;
-}
-
-input[type="submit"]:focus {
- border-color: #00aadc;
- box-shadow: 0 0 0 2px #78dcfa;
-}
-
-input[type="submit"].hidden {
- display: none;
-}
-
-input[type="submit"] .gridicon {
- position: relative;
- top: 4px;
- margin-top: -2px;
- width: 18px;
- height: 18px;
-}
-
-input[type="submit"].button-primary {
- background: #00aadc;
- border-color: #008ab3;
- color: white;
-}
-
-input[type="submit"].button-primary:hover,
-input[type="submit"].button-primary:focus {
- border-color: #005082;
- color: white;
-}
-
-input[type="submit"].button-primary[disabled],
-input[type="submit"].button-primary:disabled {
- background: #bceefd;
- border-color: #8cc9e2;
- color: white;
-}
-
-input[type="submit"].button-primary {
- color: white;
-}
-
-
-/* ==========================================================================
-** Inline editor styles
-** ======================================================================== */
-
-
-.ui-sortable-handle {
- cursor: move;
-}
-
-.grunion-section-header {
- font-size: 21px;
- margin-top: 32px;
- font-weight: 600;
-}
-
-.grunion-form-settings:hover {
- box-shadow: 0 0 0 1px rgba(200, 215, 225, 0.5), 0 1px 2px #e9eff3;
-}
-
-.grunion-section-header:first-child {
- margin-top: 0;
-}
-
-.grunion-type-options {
- display: flex;
- flex-wrap: wrap;
-}
-
-.grunion-type {
- flex-grow: 0;
- flex-shrink: 0;
-}
-
-.grunion-type select {
- -webkit-appearance: none;
- width: 100%;
-}
-
-.grunion-required {
- padding: 27px 0 0 16px;
- flex-grow: 0;
- flex-shrink: 0;
-}
-
-.grunion-options {
- padding-top: 16px;
-}
-
-.grunion-options ol {
- list-style: none;
- padding: 0;
- margin: 8px 0 0;
-}
-
-.grunion-options li {
- display: flex;
- margin-bottom: 16px;
-}
-
-.grunion-field-edit .grunion-options {
- display: none;
-}
-
-.delete-option,
-.delete-field {
- color: #0087be;
- text-decoration: none;
- width: 40px;
- line-height: 40px;
- font-size: 21px;
- text-align: center;
- font-weight: 600;
-}
-
-.delete-field {
- position: absolute;
- top: 0;
- right: 0;
-}
-
-.grunion-controls {
- display: flex;
- flex-wrap: wrap;
-}
-
-.grunion-update-controls {
- text-align: right;
- flex-grow: 1;
-}
-
-#add-field {
- flex-grow: 0;
-}
-
-.delete-option:before,
-.delete-field:before {
- font-family: Dashicons;
-/* content: "\f158"; /* This is the bolder X */
- content: "\f335"; /* This is the thinner X */
- display: inline-block;
- speak: none;
-}
-
-.grunion-field-edit.grunion-field-checkbox-multiple .grunion-options,
-.grunion-field-edit.grunion-field-radio .grunion-options,
-.grunion-field-edit.grunion-field-select .grunion-options {
- display: block;
-}
-
-.screen-reader-text {
- position: absolute;
- margin: -1px;
- padding: 0;
- height: 1px;
- width: 1px;
- overflow: hidden;
- clip: rect(0 0 0 0);
- border: 0;
- word-wrap: normal !important; /* many screen reader and browser combinations announce broken words as they would appear visually */
-}
diff --git a/plugins/jetpack/modules/contact-form/css/editor-inline-editing-style.min.css b/plugins/jetpack/modules/contact-form/css/editor-inline-editing-style.min.css
deleted file mode 100644
index 7d3a0ca0..00000000
--- a/plugins/jetpack/modules/contact-form/css/editor-inline-editing-style.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-html{direction:ltr}body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:1.4em;margin:0}a,a:visited{color:#0087be;text-decoration:none}a:active,a:focus,a:hover{color:$link-highlight}.card,body{display:block;position:relative;margin:0 auto 10px auto;padding:16px;box-sizing:border-box;background:#fff;box-shadow:0 0 0 1px rgba(200,215,225,.5),0 1px 2px #e9eff3}body{margin:0;background:#f5f5f5}.card:after{content:".";display:block;height:0;clear:both;visibility:hidden}.card:focus,.card:hover{box-shadow:0 0 0 1px #999,0 1px 2px #e9eff3}.card .delete-field{display:block;float:right}@media (min-width:481px){.card{margin-bottom:16px;padding:24px}body{padding:24px}}.card.is-compact{margin-bottom:1px}@media (min-width:481px){.card.is-compact{margin-bottom:1px;padding:16px 24px}}.card>div{margin-top:24px}.card>div:first-child{margin-top:0}label{display:block;font-size:14px;font-weight:600;margin-bottom:5px;margin-top:8px}label:first-of-type{margin-top:4px}input[type=email],input[type=tel],input[type=text],input[type=url]{border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;margin:0;padding:7px 14px;width:100%;color:#2e4453;font-size:16px;line-height:1.5;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-shadow:none}input[type=email]:-ms-input-placeholder,input[type=tel]:-ms-input-placeholder,input[type=text]:-ms-input-placeholder,input[type=url]:-ms-input-placeholder{color:#87a6bc}input[type=email]::-ms-input-placeholder,input[type=tel]::-ms-input-placeholder,input[type=text]::-ms-input-placeholder,input[type=url]::-ms-input-placeholder{color:#87a6bc}input[type=email]::placeholder,input[type=tel]::placeholder,input[type=text]::placeholder,input[type=url]::placeholder{color:#87a6bc}input[type=email]:hover,input[type=tel]:hover,input[type=text]:hover,input[type=url]:hover{border-color:#a8bece}input[type=email]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=url]:focus{border-color:#0087be;outline:0;box-shadow:0 0 0 2px #78dcfa}input[type=email]:focus::-ms-clear,input[type=tel]:focus::-ms-clear,input[type=text]:focus::-ms-clear,input[type=url]:focus::-ms-clear{display:none}input[type=email]:disabled,input[type=tel]:disabled,input[type=text]:disabled,input[type=url]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;-webkit-text-fill-color:#a8bece}input[type=email]:disabled:hover,input[type=tel]:disabled:hover,input[type=text]:disabled:hover,input[type=url]:disabled:hover{cursor:default}input[type=email]:disabled:-ms-input-placeholder,input[type=tel]:disabled:-ms-input-placeholder,input[type=text]:disabled:-ms-input-placeholder,input[type=url]:disabled:-ms-input-placeholder{color:#a8bece}input[type=email]:disabled::-ms-input-placeholder,input[type=tel]:disabled::-ms-input-placeholder,input[type=text]:disabled::-ms-input-placeholder,input[type=url]:disabled::-ms-input-placeholder{color:#a8bece}input[type=email]:disabled::placeholder,input[type=tel]:disabled::placeholder,input[type=text]:disabled::placeholder,input[type=url]:disabled::placeholder{color:#a8bece}textarea{border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;margin:0;padding:7px 14px;height:92px;width:100%;color:#2e4453;font-size:16px;line-height:1.5;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-shadow:none}textarea:-ms-input-placeholder{color:#87a6bc}textarea::-ms-input-placeholder{color:#87a6bc}textarea::placeholder{color:#87a6bc}textarea:hover{border-color:#a8bece}textarea:focus{border-color:#0087be;outline:0;box-shadow:0 0 0 2px #78dcfa}textarea:focus::-ms-clear{display:none}textarea:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;-webkit-text-fill-color:#a8bece}textarea:disabled:hover{cursor:default}textarea:disabled:-ms-input-placeholder{color:#a8bece}textarea:disabled::-ms-input-placeholder{color:#a8bece}textarea:disabled::placeholder{color:#a8bece}.checkbox,input[type=checkbox]{-webkit-appearance:none;display:inline-block;box-sizing:border-box;margin:2px 0 0;padding:7px 14px;width:16px;height:16px;float:left;outline:0;padding:0;box-shadow:none;background-color:#fff;border:1px solid #c8d7e1;color:#2e4453;font-size:16px;line-height:0;text-align:center;vertical-align:middle;-moz-appearance:none;appearance:none;transition:all .15s ease-in-out;clear:none;cursor:pointer}.checkbox:checked:before,input[type=checkbox]:checked:before{content:'\f147';font-family:Dashicons;margin:-3px 0 0 -4px;float:left;display:inline-block;vertical-align:middle;width:16px;font-size:20px;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;color:#00aadc}.checkbox:disabled:checked:before,input[type=checkbox]:disabled:checked:before{color:#a8bece}.checkbox:hover,input[type=checkbox]:hover{border-color:#a8bece}.checkbox:focus,input[type=checkbox]:focus{border-color:#0087be;outline:0;box-shadow:0 0 0 2px #78dcfa}.checkbox:disabled,input[type=checkbox]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;opacity:1}.checkbox:disabled:hover,input[type=checkbox]:disabled:hover{cursor:default}.checkbox+span,input[type=checkbox]+span{display:block;font-weight:400;margin-left:24px}.radio-button,input[type=radio]{color:#2e4453;font-size:16px;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-sizing:border-box;-webkit-appearance:none;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:2px 4px 0 0;float:left;outline:0;padding:0;text-align:center;vertical-align:middle;width:16px;min-width:16px;-moz-appearance:none;appearance:none;border-radius:50%;line-height:10px}.radio-button:hover,input[type=radio]:hover{border-color:#a8bece}.radio-button:focus,input[type=radio]:focus{border-color:#0087be;outline:0;box-shadow:0 0 0 2px #78dcfa}.radio-button:focus::-ms-clear,input[type=radio]:focus::-ms-clear{display:none}.radio-button:checked:before,input[type=radio]:checked:before{float:left;display:inline-block;content:'\2022';margin:3px;width:8px;height:8px;text-indent:-9999px;background:#00aadc;vertical-align:middle;border-radius:50%;animation:grow .2s ease-in-out}.radio-button:disabled,input[type=radio]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;opacity:1;-webkit-text-fill-color:#a8bece}.radio-button:disabled:hover,input[type=radio]:disabled:hover{cursor:default}.radio-button:disabled:-ms-input-placeholder,input[type=radio]:disabled:-ms-input-placeholder{color:#a8bece}.radio-button:disabled::-ms-input-placeholder,input[type=radio]:disabled::-ms-input-placeholder{color:#a8bece}.radio-button:disabled::placeholder,input[type=radio]:disabled::placeholder{color:#a8bece}.radio-button:disabled:checked::before,input[type=radio]:disabled:checked:before{background:#e9eff3}.radio-button+span,input[type=radio]+span{display:block;font-weight:400;margin-left:24px}@keyframes grow{0%{transform:scale(.3)}60%{transform:scale(1.15)}100%{transform:scale(1)}}@keyframes grow{0%{transform:scale(.3)}60%{transform:scale(1.15)}100%{transform:scale(1)}}select{background:#fff url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjQzhEN0UxIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==) no-repeat right 10px center;border-color:#c8d7e1;border-style:solid;border-radius:4px;border-width:1px 1px 2px;color:#2e4453;cursor:pointer;display:inline-block;margin:0;outline:0;overflow:hidden;font-size:14px;line-height:21px;font-weight:600;text-overflow:ellipsis;text-decoration:none;vertical-align:top;white-space:nowrap;box-sizing:border-box;padding:7px 32px 9px 14px;-webkit-appearance:none;-moz-appearance:none;appearance:none}select:hover{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjYThiZWNlIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==)}select:focus{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiA8dGl0bGU+YXJyb3ctZG93bjwvdGl0bGU+IDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiA8ZGVmcz48L2RlZnM+IDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNrZXRjaDp0eXBlPSJNU1BhZ2UiPiA8ZyBpZD0iYXJyb3ctZG93biIgc2tldGNoOnR5cGU9Ik1TQXJ0Ym9hcmRHcm91cCIgZmlsbD0iIzJlNDQ1MyI+IDxwYXRoIGQ9Ik0xNS41LDYgTDE3LDcuNSBMMTAuMjUsMTQuMjUgTDMuNSw3LjUgTDUsNiBMMTAuMjUsMTEuMjUgTDE1LjUsNiBaIiBpZD0iRG93bi1BcnJvdyIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPiA8L2c+IDwvZz48L3N2Zz4=);border-color:#00aadc;box-shadow:0 0 0 2px #78dcfa;outline:0;-moz-outline:none;-moz-user-focus:ignore}select:disabled,select:hover:disabled{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjZTllZmYzIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==) no-repeat right 10px center}select.is-compact{min-width:0;padding:0 20px 2px 6px;margin:0 4px;background-position:right 5px center;background-size:12px 12px}label select,label+select{display:block;min-width:200px}label select.is-compact,label+select.is-compact{display:inline-block;min-width:0}select::-ms-expand{display:none}select::-ms-value{background:0 0;color:#2e4453}select:-moz-focusring{color:transparent;text-shadow:0 0 0 #2e4453}input[type=submit]{padding:0;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;vertical-align:baseline;background:#fff;border-color:#c8d7e1;border-style:solid;border-width:1px 1px 2px;color:#2e4453;cursor:pointer;display:inline-block;margin:24px 0 0;outline:0;overflow:hidden;font-weight:500;text-overflow:ellipsis;text-decoration:none;vertical-align:top;box-sizing:border-box;font-size:14px;line-height:21px;border-radius:4px;padding:7px 14px 9px;-webkit-appearance:none;-moz-appearance:none;appearance:none}input[type=submit]:hover{border-color:#a8bece;color:#2e4453}input[type=submit]:active{border-width:2px 1px 1px}input[type=submit]:visited{color:#2e4453}input[type=submit]:disabled,input[type=submit][disabled]{color:#e9eff3;background:#fff;border-color:#e9eff3;cursor:default}input[type=submit]:disabled:active,input[type=submit][disabled]:active{border-width:1px 1px 2px}input[type=submit]:focus{border-color:#00aadc;box-shadow:0 0 0 2px #78dcfa}input[type=submit].hidden{display:none}input[type=submit] .gridicon{position:relative;top:4px;margin-top:-2px;width:18px;height:18px}input[type=submit].button-primary{background:#00aadc;border-color:#008ab3;color:#fff}input[type=submit].button-primary:focus,input[type=submit].button-primary:hover{border-color:#005082;color:#fff}input[type=submit].button-primary:disabled,input[type=submit].button-primary[disabled]{background:#bceefd;border-color:#8cc9e2;color:#fff}input[type=submit].button-primary{color:#fff}.ui-sortable-handle{cursor:move}.grunion-section-header{font-size:21px;margin-top:32px;font-weight:600}.grunion-form-settings:hover{box-shadow:0 0 0 1px rgba(200,215,225,.5),0 1px 2px #e9eff3}.grunion-section-header:first-child{margin-top:0}.grunion-type-options{display:flex;flex-wrap:wrap}.grunion-type{flex-grow:0;flex-shrink:0}.grunion-type select{-webkit-appearance:none;width:100%}.grunion-required{padding:27px 0 0 16px;flex-grow:0;flex-shrink:0}.grunion-options{padding-top:16px}.grunion-options ol{list-style:none;padding:0;margin:8px 0 0}.grunion-options li{display:flex;margin-bottom:16px}.grunion-field-edit .grunion-options{display:none}.delete-field,.delete-option{color:#0087be;text-decoration:none;width:40px;line-height:40px;font-size:21px;text-align:center;font-weight:600}.delete-field{position:absolute;top:0;right:0}.grunion-controls{display:flex;flex-wrap:wrap}.grunion-update-controls{text-align:right;flex-grow:1}#add-field{flex-grow:0}.delete-field:before,.delete-option:before{font-family:Dashicons;content:"\f335";display:inline-block;speak:none}.grunion-field-edit.grunion-field-checkbox-multiple .grunion-options,.grunion-field-edit.grunion-field-radio .grunion-options,.grunion-field-edit.grunion-field-select .grunion-options{display:block}.screen-reader-text{position:absolute;margin:-1px;padding:0;height:1px;width:1px;overflow:hidden;clip:rect(0 0 0 0);border:0;word-wrap:normal!important} \ No newline at end of file
diff --git a/plugins/jetpack/modules/contact-form/css/editor-style-rtl.css b/plugins/jetpack/modules/contact-form/css/editor-style-rtl.css
deleted file mode 100644
index e6b43f3c..00000000
--- a/plugins/jetpack/modules/contact-form/css/editor-style-rtl.css
+++ /dev/null
@@ -1,613 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-/* ==========================================================================
-** Normalize
-** ======================================================================== */
-
-body,
-label {
- font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
- font-size: 16px;
- line-height: 1.4em;
-}
-
-/* ==========================================================================
-** Card
-** ======================================================================= */
-
-.card {
- display: block;
- position: relative;
- margin: 0 auto;
- padding: 16px;
- box-sizing: border-box;
- background: white;
- box-shadow: 0 0 0 1px rgba(200, 215, 225, 0.5), 0 1px 2px #e9eff3;
-}
-
-.card:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden;
-}
-
-@media ( min-width: 481px ) {
- .card {
- padding: 24px;
- }
-}
-
-.card > div {
- margin-top: 24px;
-}
-
-.card > div:first-child {
- margin-top: 0;
-}
-
-
-/* ==========================================================================
-** Labels
-** ======================================================================= */
-
-label {
- display: block;
- font-size: 14px;
- font-weight: 600;
- margin-bottom: 5px;
-}
-
-
-/* ==========================================================================
-** Text Inputs
-** ======================================================================= */
-
-input[type="text"],
-input[type="tel"],
-input[type="email"],
-input[type="url"] {
- border-radius: 0;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
- box-sizing: border-box;
- margin: 0;
- padding: 7px 14px;
- width: 100%;
- color: #2e4453;
- font-size: 16px;
- line-height: 1.5;
- border: 1px solid #c8d7e1;
- background-color: #fff;
- transition: all .15s ease-in-out;
- box-shadow: none;
-}
-
-input[type="text"]:-ms-input-placeholder,
-input[type="tel"]:-ms-input-placeholder,
-input[type="email"]:-ms-input-placeholder,
-input[type="url"]:-ms-input-placeholder {
- color: #87a6bc;
-}
-
-input[type="text"]::-ms-input-placeholder,
-input[type="tel"]::-ms-input-placeholder,
-input[type="email"]::-ms-input-placeholder,
-input[type="url"]::-ms-input-placeholder {
- color: #87a6bc;
-}
-
-input[type="text"]::placeholder,
-input[type="tel"]::placeholder,
-input[type="email"]::placeholder,
-input[type="url"]::placeholder {
- color: #87a6bc;
-}
-
-input[type="text"]:hover,
-input[type="tel"]:hover,
-input[type="email"]:hover,
-input[type="url"]:hover {
- border-color: #a8bece;
-}
-
-input[type="text"]:focus,
-input[type="tel"]:focus,
-input[type="email"]:focus,
-input[type="url"]:focus {
- border-color: #0087be;
- outline: none;
- box-shadow: 0 0 0 2px #78dcfa;
-}
-
-input[type="text"]:focus::-ms-clear,
-input[type="tel"]:focus::-ms-clear,
-input[type="email"]:focus::-ms-clear,
-input[type="url"]:focus::-ms-clear {
- display: none;
-}
-
-input[type="text"]:disabled,
-input[type="tel"]:disabled,
-input[type="email"]:disabled,
-input[type="url"]:disabled {
- background: #f3f6f8;
- border-color: #e9eff3;
- color: #a8bece;
- -webkit-text-fill-color: #a8bece;
-}
-
-input[type="text"]:disabled:hover,
-input[type="tel"]:disabled:hover,
-input[type="email"]:disabled:hover,
-input[type="url"]:disabled:hover {
- cursor: default;
-}
-
-input[type="text"]:disabled:-ms-input-placeholder,
-input[type="tel"]:disabled:-ms-input-placeholder,
-input[type="email"]:disabled:-ms-input-placeholder,
-input[type="url"]:disabled:-ms-input-placeholder {
- color: #a8bece;
-}
-
-input[type="text"]:disabled::-ms-input-placeholder,
-input[type="tel"]:disabled::-ms-input-placeholder,
-input[type="email"]:disabled::-ms-input-placeholder,
-input[type="url"]:disabled::-ms-input-placeholder {
- color: #a8bece;
-}
-
-input[type="text"]:disabled::placeholder,
-input[type="tel"]:disabled::placeholder,
-input[type="email"]:disabled::placeholder,
-input[type="url"]:disabled::placeholder {
- color: #a8bece;
-}
-
-
-/* ==========================================================================
-** Textareas
-** ======================================================================= */
-
-textarea {
- border-radius: 0;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
- box-sizing: border-box;
- margin: 0;
- padding: 7px 14px;
- height: 92px;
- width: 100%;
- color: #2e4453;
- font-size: 16px;
- line-height: 1.5;
- border: 1px solid #c8d7e1;
- background-color: #fff;
- transition: all .15s ease-in-out;
- box-shadow: none;
-}
-
-textarea:-ms-input-placeholder {
- color: #87a6bc;
-}
-
-textarea::-ms-input-placeholder {
- color: #87a6bc;
-}
-
-textarea::placeholder {
- color: #87a6bc;
-}
-
-textarea:hover {
- border-color: #a8bece;
-}
-
-textarea:focus {
- border-color: #0087be;
- outline: none;
- box-shadow: 0 0 0 2px #78dcfa;
-}
-
-textarea:focus::-ms-clear {
- display: none;
-}
-
-textarea:disabled {
- background: #f3f6f8;
- border-color: #e9eff3;
- color: #a8bece;
- -webkit-text-fill-color: #a8bece;
-}
-
-textarea:disabled:hover {
- cursor: default;
-}
-
-textarea:disabled:-ms-input-placeholder {
- color: #a8bece;
-}
-
-textarea:disabled::-ms-input-placeholder {
- color: #a8bece;
-}
-
-textarea:disabled::placeholder {
- color: #a8bece;
-}
-
-
-/* ==========================================================================
-** Checkboxes
-** ======================================================================= */
-
-input[type="checkbox"] {
- -webkit-appearance: none;
- display: inline-block;
- box-sizing: border-box;
- margin: 2px 0 0;
- padding: 7px 14px;
- width: 16px;
- height: 16px;
- float: right;
- outline: 0;
- padding: 0;
- box-shadow: none;
- background-color: #fff;
- border: 1px solid #c8d7e1;
- color: #2e4453;
- font-size: 16px;
- line-height: 0;
- text-align: center;
- vertical-align: middle;
- -moz-appearance: none;
- appearance: none;
- transition: all .15s ease-in-out;
- clear: none;
- cursor: pointer;
-}
-
-input[type="checkbox"]:checked:before {
- content: '\f147';
- font-family: Dashicons;
- margin: -3px -4px 0 0;
- float: right;
- display: inline-block;
- vertical-align: middle;
- width: 16px;
- font-size: 20px;
- line-height: 1;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- speak: none;
- color: #00aadc;
-}
-
-input[type="checkbox"]:disabled:checked:before {
- color: #a8bece;
-}
-
-input[type="checkbox"]:hover {
- border-color: #a8bece;
-}
-
-input[type="checkbox"]:focus {
- border-color: #0087be;
- outline: none;
- box-shadow: 0 0 0 2px #78dcfa;
-}
-
-input[type="checkbox"]:disabled {
- background: #f3f6f8;
- border-color: #e9eff3;
- color: #a8bece;
- opacity: 1;
-}
-
-input[type="checkbox"]:disabled:hover {
- cursor: default;
-}
-
-input[type="checkbox"] + span {
- display: block;
- font-weight: normal;
- margin-right: 24px;
-}
-
-
-/* ==========================================================================
-** Radio buttons
-** ======================================================================== */
-
-input[type=radio] {
- color: #2e4453;
- font-size: 16px;
- border: 1px solid #c8d7e1;
- background-color: #fff;
- transition: all .15s ease-in-out;
- box-sizing: border-box;
- -webkit-appearance: none;
- clear: none;
- cursor: pointer;
- display: inline-block;
- line-height: 0;
- height: 16px;
- margin: 2px 0 0 4px;
- float: right;
- outline: 0;
- padding: 0;
- text-align: center;
- vertical-align: middle;
- width: 16px;
- min-width: 16px;
- -moz-appearance: none;
- appearance: none;
- border-radius: 50%;
- line-height: 10px;
-}
-
-input[type="radio"]:hover {
- border-color: #a8bece;
-}
-
-input[type="radio"]:focus {
- border-color: #0087be;
- outline: none;
- box-shadow: 0 0 0 2px #78dcfa;
-}
-
-input[type="radio"]:focus::-ms-clear {
- display: none;
-}
-
-input[type="radio"]:checked:before {
- float: right;
- display: inline-block;
- content: '\2022';
- margin: 3px;
- width: 8px;
- height: 8px;
- text-indent: -9999px;
- background: #00aadc;
- vertical-align: middle;
- border-radius: 50%;
- animation: grow .2s ease-in-out;
-}
-
-input[type="radio"]:disabled {
- background: #f3f6f8;
- border-color: #e9eff3;
- color: #a8bece;
- opacity: 1;
- -webkit-text-fill-color: #a8bece;
-}
-
-input[type="radio"]:disabled:hover {
- cursor: default;
-}
-
-input[type="radio"]:disabled:-ms-input-placeholder {
- color: #a8bece;
-}
-
-input[type="radio"]:disabled::-ms-input-placeholder {
- color: #a8bece;
-}
-
-input[type="radio"]:disabled::placeholder {
- color: #a8bece;
-}
-
-input[type="radio"]:disabled:checked:before {
- background: #e9eff3;
-}
-
-input[type="radio"] + span {
- display: block;
- font-weight: normal;
- margin-right: 24px;
-}
-
-@keyframes grow {
- 0% {
- transform: scale(0.3);
- }
-
- 60% {
- transform: scale(1.15);
- }
-
- 100% {
- transform: scale(1);
- }
-}
-
-@keyframes grow {
- 0% {
- transform: scale(0.3);
- }
-
- 60% {
- transform: scale(1.15);
- }
-
- 100% {
- transform: scale(1);
- }
-}
-
-
-/* ==========================================================================
-** Selects
-** ======================================================================== */
-
-select {
- background: #fff url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjQzhEN0UxIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==) no-repeat left 10px center;
- border-color: #c8d7e1;
- border-style: solid;
- border-radius: 4px;
- border-width: 1px 1px 2px;
- color: #2e4453;
- cursor: pointer;
- display: inline-block;
- margin: 0;
- outline: 0;
- overflow: hidden;
- font-size: 14px;
- line-height: 21px;
- font-weight: 600;
- text-overflow: ellipsis;
- text-decoration: none;
- vertical-align: top;
- white-space: nowrap;
- box-sizing: border-box;
- /* Aligns the text to the 8px baseline grid and adds padding on right to allow for the arrow. */
- padding: 7px 14px 9px 32px;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
-}
-
-select:hover {
- background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjYThiZWNlIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==);
-}
-
-select:focus {
- background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiA8dGl0bGU+YXJyb3ctZG93bjwvdGl0bGU+IDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiA8ZGVmcz48L2RlZnM+IDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNrZXRjaDp0eXBlPSJNU1BhZ2UiPiA8ZyBpZD0iYXJyb3ctZG93biIgc2tldGNoOnR5cGU9Ik1TQXJ0Ym9hcmRHcm91cCIgZmlsbD0iIzJlNDQ1MyI+IDxwYXRoIGQ9Ik0xNS41LDYgTDE3LDcuNSBMMTAuMjUsMTQuMjUgTDMuNSw3LjUgTDUsNiBMMTAuMjUsMTEuMjUgTDE1LjUsNiBaIiBpZD0iRG93bi1BcnJvdyIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPiA8L2c+IDwvZz48L3N2Zz4=);
- border-color: #00aadc;
- box-shadow: 0 0 0 2px #78dcfa;
- outline: 0;
- -moz-outline:none;
- -moz-user-focus:ignore;
-}
-
-select:disabled,
-select:hover:disabled {
- background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjZTllZmYzIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==) no-repeat left 10px center;;
-}
-
-select.is-compact {
- min-width: 0;
- padding: 0 6px 2px 20px;
- margin: 0 4px;
- background-position: left 5px center;
- background-size: 12px 12px;
-}
-
-/* Make it display:block when it follows a label */
-label select,
-label + select {
- display: block;
- min-width: 200px;
-}
-
-label select.is-compact,
-label + select.is-compact {
- display: inline-block;
- min-width: 0;
-}
-
-/* IE: Remove the default arrow */
-select::-ms-expand {
- display: none;
-}
-
-/* IE: Remove default background and color styles on focus */
-select::-ms-value {
- background: none;
- color: #2e4453;
-}
-
-/* Firefox: Remove the focus outline, see http://stackoverflow.com/questions/3773430/remove-outline-from-select-box-in-ff/18853002#18853002 */
-select:-moz-focusring {
- color: transparent;
- text-shadow: 0 0 0 #2e4453;
-}
-
-
-/* ==========================================================================
-** Buttons
-** ======================================================================== */
-
-input[type="submit"] {
- padding: 0;
- font-size: 14px;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
- vertical-align: baseline;
- background: white;
- border-color: #c8d7e1;
- border-style: solid;
- border-width: 1px 1px 2px;
- color: #2e4453;
- cursor: pointer;
- display: inline-block;
- margin: 24px 0 0;
- outline: 0;
- overflow: hidden;
- font-weight: 500;
- text-overflow: ellipsis;
- text-decoration: none;
- vertical-align: top;
- box-sizing: border-box;
- font-size: 14px;
- line-height: 21px;
- border-radius: 4px;
- padding: 7px 14px 9px;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
-}
-
-input[type="submit"]:hover {
- border-color: #a8bece;
- color: #2e4453;
-}
-
-input[type="submit"]:active {
- border-width: 2px 1px 1px;
-}
-
-input[type="submit"]:visited {
- color: #2e4453;
-}
-
-input[type="submit"][disabled],
-input[type="submit"]:disabled {
- color: #e9eff3;
- background: white;
- border-color: #e9eff3;
- cursor: default;
-}
-
-input[type="submit"][disabled]:active,
-input[type="submit"]:disabled:active {
- border-width: 1px 1px 2px;
-}
-
-input[type="submit"]:focus {
- border-color: #00aadc;
- box-shadow: 0 0 0 2px #78dcfa;
-}
-
-/* ==========================================================================
-** Preview styles
-** ======================================================================== */
-
-.wpview.wpview-wrap[data-wpview-type=contact-form] iframe.inline-edit-contact-form {
- width: 100%;
- min-height: 500px;
- border: 0;
- overflow: hidden;
- margin-bottom: 0;
- display: block;
-}
-
-.contact-submit.contact-submit {
- margin-top: 0;
- margin-bottom: 0;
-}
diff --git a/plugins/jetpack/modules/contact-form/css/editor-style-rtl.min.css b/plugins/jetpack/modules/contact-form/css/editor-style-rtl.min.css
deleted file mode 100644
index 4562abc2..00000000
--- a/plugins/jetpack/modules/contact-form/css/editor-style-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-body,label{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:1.4em}.card{display:block;position:relative;margin:0 auto;padding:16px;box-sizing:border-box;background:#fff;box-shadow:0 0 0 1px rgba(200,215,225,.5),0 1px 2px #e9eff3}.card:after{content:".";display:block;height:0;clear:both;visibility:hidden}@media (min-width:481px){.card{padding:24px}}.card>div{margin-top:24px}.card>div:first-child{margin-top:0}label{display:block;font-size:14px;font-weight:600;margin-bottom:5px}input[type=email],input[type=tel],input[type=text],input[type=url]{border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;margin:0;padding:7px 14px;width:100%;color:#2e4453;font-size:16px;line-height:1.5;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-shadow:none}input[type=email]:-ms-input-placeholder,input[type=tel]:-ms-input-placeholder,input[type=text]:-ms-input-placeholder,input[type=url]:-ms-input-placeholder{color:#87a6bc}input[type=email]::-ms-input-placeholder,input[type=tel]::-ms-input-placeholder,input[type=text]::-ms-input-placeholder,input[type=url]::-ms-input-placeholder{color:#87a6bc}input[type=email]::placeholder,input[type=tel]::placeholder,input[type=text]::placeholder,input[type=url]::placeholder{color:#87a6bc}input[type=email]:hover,input[type=tel]:hover,input[type=text]:hover,input[type=url]:hover{border-color:#a8bece}input[type=email]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=url]:focus{border-color:#0087be;outline:0;box-shadow:0 0 0 2px #78dcfa}input[type=email]:focus::-ms-clear,input[type=tel]:focus::-ms-clear,input[type=text]:focus::-ms-clear,input[type=url]:focus::-ms-clear{display:none}input[type=email]:disabled,input[type=tel]:disabled,input[type=text]:disabled,input[type=url]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;-webkit-text-fill-color:#a8bece}input[type=email]:disabled:hover,input[type=tel]:disabled:hover,input[type=text]:disabled:hover,input[type=url]:disabled:hover{cursor:default}input[type=email]:disabled:-ms-input-placeholder,input[type=tel]:disabled:-ms-input-placeholder,input[type=text]:disabled:-ms-input-placeholder,input[type=url]:disabled:-ms-input-placeholder{color:#a8bece}input[type=email]:disabled::-ms-input-placeholder,input[type=tel]:disabled::-ms-input-placeholder,input[type=text]:disabled::-ms-input-placeholder,input[type=url]:disabled::-ms-input-placeholder{color:#a8bece}input[type=email]:disabled::placeholder,input[type=tel]:disabled::placeholder,input[type=text]:disabled::placeholder,input[type=url]:disabled::placeholder{color:#a8bece}textarea{border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;margin:0;padding:7px 14px;height:92px;width:100%;color:#2e4453;font-size:16px;line-height:1.5;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-shadow:none}textarea:-ms-input-placeholder{color:#87a6bc}textarea::-ms-input-placeholder{color:#87a6bc}textarea::placeholder{color:#87a6bc}textarea:hover{border-color:#a8bece}textarea:focus{border-color:#0087be;outline:0;box-shadow:0 0 0 2px #78dcfa}textarea:focus::-ms-clear{display:none}textarea:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;-webkit-text-fill-color:#a8bece}textarea:disabled:hover{cursor:default}textarea:disabled:-ms-input-placeholder{color:#a8bece}textarea:disabled::-ms-input-placeholder{color:#a8bece}textarea:disabled::placeholder{color:#a8bece}input[type=checkbox]{-webkit-appearance:none;display:inline-block;box-sizing:border-box;margin:2px 0 0;padding:7px 14px;width:16px;height:16px;float:right;outline:0;padding:0;box-shadow:none;background-color:#fff;border:1px solid #c8d7e1;color:#2e4453;font-size:16px;line-height:0;text-align:center;vertical-align:middle;-moz-appearance:none;appearance:none;transition:all .15s ease-in-out;clear:none;cursor:pointer}input[type=checkbox]:checked:before{content:'\f147';font-family:Dashicons;margin:-3px -4px 0 0;float:right;display:inline-block;vertical-align:middle;width:16px;font-size:20px;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;color:#00aadc}input[type=checkbox]:disabled:checked:before{color:#a8bece}input[type=checkbox]:hover{border-color:#a8bece}input[type=checkbox]:focus{border-color:#0087be;outline:0;box-shadow:0 0 0 2px #78dcfa}input[type=checkbox]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;opacity:1}input[type=checkbox]:disabled:hover{cursor:default}input[type=checkbox]+span{display:block;font-weight:400;margin-right:24px}input[type=radio]{color:#2e4453;font-size:16px;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-sizing:border-box;-webkit-appearance:none;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:2px 0 0 4px;float:right;outline:0;padding:0;text-align:center;vertical-align:middle;width:16px;min-width:16px;-moz-appearance:none;appearance:none;border-radius:50%;line-height:10px}input[type=radio]:hover{border-color:#a8bece}input[type=radio]:focus{border-color:#0087be;outline:0;box-shadow:0 0 0 2px #78dcfa}input[type=radio]:focus::-ms-clear{display:none}input[type=radio]:checked:before{float:right;display:inline-block;content:'\2022';margin:3px;width:8px;height:8px;text-indent:-9999px;background:#00aadc;vertical-align:middle;border-radius:50%;animation:grow .2s ease-in-out}input[type=radio]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;opacity:1;-webkit-text-fill-color:#a8bece}input[type=radio]:disabled:hover{cursor:default}input[type=radio]:disabled:-ms-input-placeholder{color:#a8bece}input[type=radio]:disabled::-ms-input-placeholder{color:#a8bece}input[type=radio]:disabled::placeholder{color:#a8bece}input[type=radio]:disabled:checked:before{background:#e9eff3}input[type=radio]+span{display:block;font-weight:400;margin-right:24px}@keyframes grow{0%{transform:scale(.3)}60%{transform:scale(1.15)}100%{transform:scale(1)}}@keyframes grow{0%{transform:scale(.3)}60%{transform:scale(1.15)}100%{transform:scale(1)}}select{background:#fff url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjQzhEN0UxIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==) no-repeat left 10px center;border-color:#c8d7e1;border-style:solid;border-radius:4px;border-width:1px 1px 2px;color:#2e4453;cursor:pointer;display:inline-block;margin:0;outline:0;overflow:hidden;font-size:14px;line-height:21px;font-weight:600;text-overflow:ellipsis;text-decoration:none;vertical-align:top;white-space:nowrap;box-sizing:border-box;padding:7px 14px 9px 32px;-webkit-appearance:none;-moz-appearance:none;appearance:none}select:hover{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjYThiZWNlIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==)}select:focus{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiA8dGl0bGU+YXJyb3ctZG93bjwvdGl0bGU+IDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiA8ZGVmcz48L2RlZnM+IDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNrZXRjaDp0eXBlPSJNU1BhZ2UiPiA8ZyBpZD0iYXJyb3ctZG93biIgc2tldGNoOnR5cGU9Ik1TQXJ0Ym9hcmRHcm91cCIgZmlsbD0iIzJlNDQ1MyI+IDxwYXRoIGQ9Ik0xNS41LDYgTDE3LDcuNSBMMTAuMjUsMTQuMjUgTDMuNSw3LjUgTDUsNiBMMTAuMjUsMTEuMjUgTDE1LjUsNiBaIiBpZD0iRG93bi1BcnJvdyIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPiA8L2c+IDwvZz48L3N2Zz4=);border-color:#00aadc;box-shadow:0 0 0 2px #78dcfa;outline:0;-moz-outline:none;-moz-user-focus:ignore}select:disabled,select:hover:disabled{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjZTllZmYzIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==) no-repeat left 10px center}select.is-compact{min-width:0;padding:0 6px 2px 20px;margin:0 4px;background-position:left 5px center;background-size:12px 12px}label select,label+select{display:block;min-width:200px}label select.is-compact,label+select.is-compact{display:inline-block;min-width:0}select::-ms-expand{display:none}select::-ms-value{background:0 0;color:#2e4453}select:-moz-focusring{color:transparent;text-shadow:0 0 0 #2e4453}input[type=submit]{padding:0;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;vertical-align:baseline;background:#fff;border-color:#c8d7e1;border-style:solid;border-width:1px 1px 2px;color:#2e4453;cursor:pointer;display:inline-block;margin:24px 0 0;outline:0;overflow:hidden;font-weight:500;text-overflow:ellipsis;text-decoration:none;vertical-align:top;box-sizing:border-box;font-size:14px;line-height:21px;border-radius:4px;padding:7px 14px 9px;-webkit-appearance:none;-moz-appearance:none;appearance:none}input[type=submit]:hover{border-color:#a8bece;color:#2e4453}input[type=submit]:active{border-width:2px 1px 1px}input[type=submit]:visited{color:#2e4453}input[type=submit]:disabled,input[type=submit][disabled]{color:#e9eff3;background:#fff;border-color:#e9eff3;cursor:default}input[type=submit]:disabled:active,input[type=submit][disabled]:active{border-width:1px 1px 2px}input[type=submit]:focus{border-color:#00aadc;box-shadow:0 0 0 2px #78dcfa}.wpview.wpview-wrap[data-wpview-type=contact-form] iframe.inline-edit-contact-form{width:100%;min-height:500px;border:0;overflow:hidden;margin-bottom:0;display:block}.contact-submit.contact-submit{margin-top:0;margin-bottom:0} \ No newline at end of file
diff --git a/plugins/jetpack/modules/contact-form/css/editor-style.css b/plugins/jetpack/modules/contact-form/css/editor-style.css
deleted file mode 100644
index e060f69a..00000000
--- a/plugins/jetpack/modules/contact-form/css/editor-style.css
+++ /dev/null
@@ -1,554 +0,0 @@
-/* ==========================================================================
-** Normalize
-** ======================================================================== */
-
-body,
-label {
- font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
- font-size: 16px;
- line-height: 1.4em;
-}
-
-/* ==========================================================================
-** Card
-** ======================================================================= */
-
-.card {
- display: block;
- position: relative;
- margin: 0 auto;
- padding: 16px;
- box-sizing: border-box;
- background: white;
- box-shadow: 0 0 0 1px rgba(200, 215, 225, 0.5), 0 1px 2px #e9eff3;
-}
-
-.card:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden;
-}
-
-@media ( min-width: 481px ) {
- .card {
- padding: 24px;
- }
-}
-
-.card > div {
- margin-top: 24px;
-}
-
-.card > div:first-child {
- margin-top: 0;
-}
-
-
-/* ==========================================================================
-** Labels
-** ======================================================================= */
-
-label {
- display: block;
- font-size: 14px;
- font-weight: 600;
- margin-bottom: 5px;
-}
-
-
-/* ==========================================================================
-** Text Inputs
-** ======================================================================= */
-
-input[type="text"],
-input[type="tel"],
-input[type="email"],
-input[type="url"] {
- border-radius: 0;
- appearance: none;
- box-sizing: border-box;
- margin: 0;
- padding: 7px 14px;
- width: 100%;
- color: #2e4453;
- font-size: 16px;
- line-height: 1.5;
- border: 1px solid #c8d7e1;
- background-color: #fff;
- transition: all .15s ease-in-out;
- box-shadow: none;
-}
-
-input[type="text"]::placeholder,
-input[type="tel"]::placeholder,
-input[type="email"]::placeholder,
-input[type="url"]::placeholder {
- color: #87a6bc;
-}
-
-input[type="text"]:hover,
-input[type="tel"]:hover,
-input[type="email"]:hover,
-input[type="url"]:hover {
- border-color: #a8bece;
-}
-
-input[type="text"]:focus,
-input[type="tel"]:focus,
-input[type="email"]:focus,
-input[type="url"]:focus {
- border-color: #0087be;
- outline: none;
- box-shadow: 0 0 0 2px #78dcfa;
-}
-
-input[type="text"]:focus::-ms-clear,
-input[type="tel"]:focus::-ms-clear,
-input[type="email"]:focus::-ms-clear,
-input[type="url"]:focus::-ms-clear {
- display: none;
-}
-
-input[type="text"]:disabled,
-input[type="tel"]:disabled,
-input[type="email"]:disabled,
-input[type="url"]:disabled {
- background: #f3f6f8;
- border-color: #e9eff3;
- color: #a8bece;
- -webkit-text-fill-color: #a8bece;
-}
-
-input[type="text"]:disabled:hover,
-input[type="tel"]:disabled:hover,
-input[type="email"]:disabled:hover,
-input[type="url"]:disabled:hover {
- cursor: default;
-}
-
-input[type="text"]:disabled::placeholder,
-input[type="tel"]:disabled::placeholder,
-input[type="email"]:disabled::placeholder,
-input[type="url"]:disabled::placeholder {
- color: #a8bece;
-}
-
-
-/* ==========================================================================
-** Textareas
-** ======================================================================= */
-
-textarea {
- border-radius: 0;
- appearance: none;
- box-sizing: border-box;
- margin: 0;
- padding: 7px 14px;
- height: 92px;
- width: 100%;
- color: #2e4453;
- font-size: 16px;
- line-height: 1.5;
- border: 1px solid #c8d7e1;
- background-color: #fff;
- transition: all .15s ease-in-out;
- box-shadow: none;
-}
-
-textarea::placeholder {
- color: #87a6bc;
-}
-
-textarea:hover {
- border-color: #a8bece;
-}
-
-textarea:focus {
- border-color: #0087be;
- outline: none;
- box-shadow: 0 0 0 2px #78dcfa;
-}
-
-textarea:focus::-ms-clear {
- display: none;
-}
-
-textarea:disabled {
- background: #f3f6f8;
- border-color: #e9eff3;
- color: #a8bece;
- -webkit-text-fill-color: #a8bece;
-}
-
-textarea:disabled:hover {
- cursor: default;
-}
-
-textarea:disabled::placeholder {
- color: #a8bece;
-}
-
-
-/* ==========================================================================
-** Checkboxes
-** ======================================================================= */
-
-input[type="checkbox"] {
- -webkit-appearance: none;
- display: inline-block;
- box-sizing: border-box;
- margin: 2px 0 0;
- padding: 7px 14px;
- width: 16px;
- height: 16px;
- float: left;
- outline: 0;
- padding: 0;
- box-shadow: none;
- background-color: #fff;
- border: 1px solid #c8d7e1;
- color: #2e4453;
- font-size: 16px;
- line-height: 0;
- text-align: center;
- vertical-align: middle;
- appearance: none;
- transition: all .15s ease-in-out;
- clear: none;
- cursor: pointer;
-}
-
-input[type="checkbox"]:checked:before {
- content: '\f147';
- font-family: Dashicons;
- margin: -3px 0 0 -4px;
- float: left;
- display: inline-block;
- vertical-align: middle;
- width: 16px;
- font-size: 20px;
- line-height: 1;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- speak: none;
- color: #00aadc;
-}
-
-input[type="checkbox"]:disabled:checked:before {
- color: #a8bece;
-}
-
-input[type="checkbox"]:hover {
- border-color: #a8bece;
-}
-
-input[type="checkbox"]:focus {
- border-color: #0087be;
- outline: none;
- box-shadow: 0 0 0 2px #78dcfa;
-}
-
-input[type="checkbox"]:disabled {
- background: #f3f6f8;
- border-color: #e9eff3;
- color: #a8bece;
- opacity: 1;
-}
-
-input[type="checkbox"]:disabled:hover {
- cursor: default;
-}
-
-input[type="checkbox"] + span {
- display: block;
- font-weight: normal;
- margin-left: 24px;
-}
-
-
-/* ==========================================================================
-** Radio buttons
-** ======================================================================== */
-
-input[type=radio] {
- color: #2e4453;
- font-size: 16px;
- border: 1px solid #c8d7e1;
- background-color: #fff;
- transition: all .15s ease-in-out;
- box-sizing: border-box;
- -webkit-appearance: none;
- clear: none;
- cursor: pointer;
- display: inline-block;
- line-height: 0;
- height: 16px;
- margin: 2px 4px 0 0;
- float: left;
- outline: 0;
- padding: 0;
- text-align: center;
- vertical-align: middle;
- width: 16px;
- min-width: 16px;
- appearance: none;
- border-radius: 50%;
- line-height: 10px;
-}
-
-input[type="radio"]:hover {
- border-color: #a8bece;
-}
-
-input[type="radio"]:focus {
- border-color: #0087be;
- outline: none;
- box-shadow: 0 0 0 2px #78dcfa;
-}
-
-input[type="radio"]:focus::-ms-clear {
- display: none;
-}
-
-input[type="radio"]:checked:before {
- float: left;
- display: inline-block;
- content: '\2022';
- margin: 3px;
- width: 8px;
- height: 8px;
- text-indent: -9999px;
- background: #00aadc;
- vertical-align: middle;
- border-radius: 50%;
- animation: grow .2s ease-in-out;
-}
-
-input[type="radio"]:disabled {
- background: #f3f6f8;
- border-color: #e9eff3;
- color: #a8bece;
- opacity: 1;
- -webkit-text-fill-color: #a8bece;
-}
-
-input[type="radio"]:disabled:hover {
- cursor: default;
-}
-
-input[type="radio"]:disabled::placeholder {
- color: #a8bece;
-}
-
-input[type="radio"]:disabled:checked:before {
- background: #e9eff3;
-}
-
-input[type="radio"] + span {
- display: block;
- font-weight: normal;
- margin-left: 24px;
-}
-
-@keyframes grow {
- 0% {
- transform: scale(0.3);
- }
-
- 60% {
- transform: scale(1.15);
- }
-
- 100% {
- transform: scale(1);
- }
-}
-
-@keyframes grow {
- 0% {
- transform: scale(0.3);
- }
-
- 60% {
- transform: scale(1.15);
- }
-
- 100% {
- transform: scale(1);
- }
-}
-
-
-/* ==========================================================================
-** Selects
-** ======================================================================== */
-
-select {
- background: #fff url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjQzhEN0UxIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==) no-repeat right 10px center;
- border-color: #c8d7e1;
- border-style: solid;
- border-radius: 4px;
- border-width: 1px 1px 2px;
- color: #2e4453;
- cursor: pointer;
- display: inline-block;
- margin: 0;
- outline: 0;
- overflow: hidden;
- font-size: 14px;
- line-height: 21px;
- font-weight: 600;
- text-overflow: ellipsis;
- text-decoration: none;
- vertical-align: top;
- white-space: nowrap;
- box-sizing: border-box;
- /* Aligns the text to the 8px baseline grid and adds padding on right to allow for the arrow. */
- padding: 7px 32px 9px 14px;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
-}
-
-select:hover {
- background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjYThiZWNlIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==);
-}
-
-select:focus {
- background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiA8dGl0bGU+YXJyb3ctZG93bjwvdGl0bGU+IDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiA8ZGVmcz48L2RlZnM+IDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNrZXRjaDp0eXBlPSJNU1BhZ2UiPiA8ZyBpZD0iYXJyb3ctZG93biIgc2tldGNoOnR5cGU9Ik1TQXJ0Ym9hcmRHcm91cCIgZmlsbD0iIzJlNDQ1MyI+IDxwYXRoIGQ9Ik0xNS41LDYgTDE3LDcuNSBMMTAuMjUsMTQuMjUgTDMuNSw3LjUgTDUsNiBMMTAuMjUsMTEuMjUgTDE1LjUsNiBaIiBpZD0iRG93bi1BcnJvdyIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPiA8L2c+IDwvZz48L3N2Zz4=);
- border-color: #00aadc;
- box-shadow: 0 0 0 2px #78dcfa;
- outline: 0;
- -moz-outline:none;
- -moz-user-focus:ignore;
-}
-
-select:disabled,
-select:hover:disabled {
- background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjZTllZmYzIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==) no-repeat right 10px center;;
-}
-
-select.is-compact {
- min-width: 0;
- padding: 0 20px 2px 6px;
- margin: 0 4px;
- background-position: right 5px center;
- background-size: 12px 12px;
-}
-
-/* Make it display:block when it follows a label */
-label select,
-label + select {
- display: block;
- min-width: 200px;
-}
-
-label select.is-compact,
-label + select.is-compact {
- display: inline-block;
- min-width: 0;
-}
-
-/* IE: Remove the default arrow */
-select::-ms-expand {
- display: none;
-}
-
-/* IE: Remove default background and color styles on focus */
-select::-ms-value {
- background: none;
- color: #2e4453;
-}
-
-/* Firefox: Remove the focus outline, see http://stackoverflow.com/questions/3773430/remove-outline-from-select-box-in-ff/18853002#18853002 */
-select:-moz-focusring {
- color: transparent;
- text-shadow: 0 0 0 #2e4453;
-}
-
-
-/* ==========================================================================
-** Buttons
-** ======================================================================== */
-
-input[type="submit"] {
- padding: 0;
- font-size: 14px;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
- vertical-align: baseline;
- background: white;
- border-color: #c8d7e1;
- border-style: solid;
- border-width: 1px 1px 2px;
- color: #2e4453;
- cursor: pointer;
- display: inline-block;
- margin: 24px 0 0;
- outline: 0;
- overflow: hidden;
- font-weight: 500;
- text-overflow: ellipsis;
- text-decoration: none;
- vertical-align: top;
- box-sizing: border-box;
- font-size: 14px;
- line-height: 21px;
- border-radius: 4px;
- padding: 7px 14px 9px;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
-}
-
-input[type="submit"]:hover {
- border-color: #a8bece;
- color: #2e4453;
-}
-
-input[type="submit"]:active {
- border-width: 2px 1px 1px;
-}
-
-input[type="submit"]:visited {
- color: #2e4453;
-}
-
-input[type="submit"][disabled],
-input[type="submit"]:disabled {
- color: #e9eff3;
- background: white;
- border-color: #e9eff3;
- cursor: default;
-}
-
-input[type="submit"][disabled]:active,
-input[type="submit"]:disabled:active {
- border-width: 1px 1px 2px;
-}
-
-input[type="submit"]:focus {
- border-color: #00aadc;
- box-shadow: 0 0 0 2px #78dcfa;
-}
-
-/* ==========================================================================
-** Preview styles
-** ======================================================================== */
-
-.wpview.wpview-wrap[data-wpview-type=contact-form] iframe.inline-edit-contact-form {
- width: 100%;
- min-height: 500px;
- border: 0;
- overflow: hidden;
- margin-bottom: 0;
- display: block;
-}
-
-.contact-submit.contact-submit {
- margin-top: 0;
- margin-bottom: 0;
-}
diff --git a/plugins/jetpack/modules/contact-form/css/editor-style.min.css b/plugins/jetpack/modules/contact-form/css/editor-style.min.css
deleted file mode 100644
index fdef6b83..00000000
--- a/plugins/jetpack/modules/contact-form/css/editor-style.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-body,label{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:1.4em}.card{display:block;position:relative;margin:0 auto;padding:16px;box-sizing:border-box;background:#fff;box-shadow:0 0 0 1px rgba(200,215,225,.5),0 1px 2px #e9eff3}.card:after{content:".";display:block;height:0;clear:both;visibility:hidden}@media (min-width:481px){.card{padding:24px}}.card>div{margin-top:24px}.card>div:first-child{margin-top:0}label{display:block;font-size:14px;font-weight:600;margin-bottom:5px}input[type=email],input[type=tel],input[type=text],input[type=url]{border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;margin:0;padding:7px 14px;width:100%;color:#2e4453;font-size:16px;line-height:1.5;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-shadow:none}input[type=email]:-ms-input-placeholder,input[type=tel]:-ms-input-placeholder,input[type=text]:-ms-input-placeholder,input[type=url]:-ms-input-placeholder{color:#87a6bc}input[type=email]::-ms-input-placeholder,input[type=tel]::-ms-input-placeholder,input[type=text]::-ms-input-placeholder,input[type=url]::-ms-input-placeholder{color:#87a6bc}input[type=email]::placeholder,input[type=tel]::placeholder,input[type=text]::placeholder,input[type=url]::placeholder{color:#87a6bc}input[type=email]:hover,input[type=tel]:hover,input[type=text]:hover,input[type=url]:hover{border-color:#a8bece}input[type=email]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=url]:focus{border-color:#0087be;outline:0;box-shadow:0 0 0 2px #78dcfa}input[type=email]:focus::-ms-clear,input[type=tel]:focus::-ms-clear,input[type=text]:focus::-ms-clear,input[type=url]:focus::-ms-clear{display:none}input[type=email]:disabled,input[type=tel]:disabled,input[type=text]:disabled,input[type=url]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;-webkit-text-fill-color:#a8bece}input[type=email]:disabled:hover,input[type=tel]:disabled:hover,input[type=text]:disabled:hover,input[type=url]:disabled:hover{cursor:default}input[type=email]:disabled:-ms-input-placeholder,input[type=tel]:disabled:-ms-input-placeholder,input[type=text]:disabled:-ms-input-placeholder,input[type=url]:disabled:-ms-input-placeholder{color:#a8bece}input[type=email]:disabled::-ms-input-placeholder,input[type=tel]:disabled::-ms-input-placeholder,input[type=text]:disabled::-ms-input-placeholder,input[type=url]:disabled::-ms-input-placeholder{color:#a8bece}input[type=email]:disabled::placeholder,input[type=tel]:disabled::placeholder,input[type=text]:disabled::placeholder,input[type=url]:disabled::placeholder{color:#a8bece}textarea{border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;margin:0;padding:7px 14px;height:92px;width:100%;color:#2e4453;font-size:16px;line-height:1.5;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-shadow:none}textarea:-ms-input-placeholder{color:#87a6bc}textarea::-ms-input-placeholder{color:#87a6bc}textarea::placeholder{color:#87a6bc}textarea:hover{border-color:#a8bece}textarea:focus{border-color:#0087be;outline:0;box-shadow:0 0 0 2px #78dcfa}textarea:focus::-ms-clear{display:none}textarea:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;-webkit-text-fill-color:#a8bece}textarea:disabled:hover{cursor:default}textarea:disabled:-ms-input-placeholder{color:#a8bece}textarea:disabled::-ms-input-placeholder{color:#a8bece}textarea:disabled::placeholder{color:#a8bece}input[type=checkbox]{-webkit-appearance:none;display:inline-block;box-sizing:border-box;margin:2px 0 0;padding:7px 14px;width:16px;height:16px;float:left;outline:0;padding:0;box-shadow:none;background-color:#fff;border:1px solid #c8d7e1;color:#2e4453;font-size:16px;line-height:0;text-align:center;vertical-align:middle;-moz-appearance:none;appearance:none;transition:all .15s ease-in-out;clear:none;cursor:pointer}input[type=checkbox]:checked:before{content:'\f147';font-family:Dashicons;margin:-3px 0 0 -4px;float:left;display:inline-block;vertical-align:middle;width:16px;font-size:20px;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;speak:none;color:#00aadc}input[type=checkbox]:disabled:checked:before{color:#a8bece}input[type=checkbox]:hover{border-color:#a8bece}input[type=checkbox]:focus{border-color:#0087be;outline:0;box-shadow:0 0 0 2px #78dcfa}input[type=checkbox]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;opacity:1}input[type=checkbox]:disabled:hover{cursor:default}input[type=checkbox]+span{display:block;font-weight:400;margin-left:24px}input[type=radio]{color:#2e4453;font-size:16px;border:1px solid #c8d7e1;background-color:#fff;transition:all .15s ease-in-out;box-sizing:border-box;-webkit-appearance:none;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:2px 4px 0 0;float:left;outline:0;padding:0;text-align:center;vertical-align:middle;width:16px;min-width:16px;-moz-appearance:none;appearance:none;border-radius:50%;line-height:10px}input[type=radio]:hover{border-color:#a8bece}input[type=radio]:focus{border-color:#0087be;outline:0;box-shadow:0 0 0 2px #78dcfa}input[type=radio]:focus::-ms-clear{display:none}input[type=radio]:checked:before{float:left;display:inline-block;content:'\2022';margin:3px;width:8px;height:8px;text-indent:-9999px;background:#00aadc;vertical-align:middle;border-radius:50%;animation:grow .2s ease-in-out}input[type=radio]:disabled{background:#f3f6f8;border-color:#e9eff3;color:#a8bece;opacity:1;-webkit-text-fill-color:#a8bece}input[type=radio]:disabled:hover{cursor:default}input[type=radio]:disabled:-ms-input-placeholder{color:#a8bece}input[type=radio]:disabled::-ms-input-placeholder{color:#a8bece}input[type=radio]:disabled::placeholder{color:#a8bece}input[type=radio]:disabled:checked:before{background:#e9eff3}input[type=radio]+span{display:block;font-weight:400;margin-left:24px}@keyframes grow{0%{transform:scale(.3)}60%{transform:scale(1.15)}100%{transform:scale(1)}}@keyframes grow{0%{transform:scale(.3)}60%{transform:scale(1.15)}100%{transform:scale(1)}}select{background:#fff url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjQzhEN0UxIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==) no-repeat right 10px center;border-color:#c8d7e1;border-style:solid;border-radius:4px;border-width:1px 1px 2px;color:#2e4453;cursor:pointer;display:inline-block;margin:0;outline:0;overflow:hidden;font-size:14px;line-height:21px;font-weight:600;text-overflow:ellipsis;text-decoration:none;vertical-align:top;white-space:nowrap;box-sizing:border-box;padding:7px 32px 9px 14px;-webkit-appearance:none;-moz-appearance:none;appearance:none}select:hover{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjYThiZWNlIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==)}select:focus{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiA8dGl0bGU+YXJyb3ctZG93bjwvdGl0bGU+IDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiA8ZGVmcz48L2RlZnM+IDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNrZXRjaDp0eXBlPSJNU1BhZ2UiPiA8ZyBpZD0iYXJyb3ctZG93biIgc2tldGNoOnR5cGU9Ik1TQXJ0Ym9hcmRHcm91cCIgZmlsbD0iIzJlNDQ1MyI+IDxwYXRoIGQ9Ik0xNS41LDYgTDE3LDcuNSBMMTAuMjUsMTQuMjUgTDMuNSw3LjUgTDUsNiBMMTAuMjUsMTEuMjUgTDE1LjUsNiBaIiBpZD0iRG93bi1BcnJvdyIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPiA8L2c+IDwvZz48L3N2Zz4=);border-color:#00aadc;box-shadow:0 0 0 2px #78dcfa;outline:0;-moz-outline:none;-moz-user-focus:ignore}select:disabled,select:hover:disabled{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB3aWR0aD0iMjBweCIgaGVpZ2h0PSIyMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPiAgICAgICAgPHRpdGxlPmFycm93LWRvd248L3RpdGxlPiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4gICAgPGRlZnM+PC9kZWZzPiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4gICAgICAgIDxnIGlkPSJhcnJvdy1kb3duIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIiBmaWxsPSIjZTllZmYzIj4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNSw2IEwxNyw3LjUgTDEwLjI1LDE0LjI1IEwzLjUsNy41IEw1LDYgTDEwLjI1LDExLjI1IEwxNS41LDYgWiIgaWQ9IkRvd24tQXJyb3ciIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgPC9nPjwvc3ZnPg==) no-repeat right 10px center}select.is-compact{min-width:0;padding:0 20px 2px 6px;margin:0 4px;background-position:right 5px center;background-size:12px 12px}label select,label+select{display:block;min-width:200px}label select.is-compact,label+select.is-compact{display:inline-block;min-width:0}select::-ms-expand{display:none}select::-ms-value{background:0 0;color:#2e4453}select:-moz-focusring{color:transparent;text-shadow:0 0 0 #2e4453}input[type=submit]{padding:0;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;vertical-align:baseline;background:#fff;border-color:#c8d7e1;border-style:solid;border-width:1px 1px 2px;color:#2e4453;cursor:pointer;display:inline-block;margin:24px 0 0;outline:0;overflow:hidden;font-weight:500;text-overflow:ellipsis;text-decoration:none;vertical-align:top;box-sizing:border-box;font-size:14px;line-height:21px;border-radius:4px;padding:7px 14px 9px;-webkit-appearance:none;-moz-appearance:none;appearance:none}input[type=submit]:hover{border-color:#a8bece;color:#2e4453}input[type=submit]:active{border-width:2px 1px 1px}input[type=submit]:visited{color:#2e4453}input[type=submit]:disabled,input[type=submit][disabled]{color:#e9eff3;background:#fff;border-color:#e9eff3;cursor:default}input[type=submit]:disabled:active,input[type=submit][disabled]:active{border-width:1px 1px 2px}input[type=submit]:focus{border-color:#00aadc;box-shadow:0 0 0 2px #78dcfa}.wpview.wpview-wrap[data-wpview-type=contact-form] iframe.inline-edit-contact-form{width:100%;min-height:500px;border:0;overflow:hidden;margin-bottom:0;display:block}.contact-submit.contact-submit{margin-top:0;margin-bottom:0} \ No newline at end of file
diff --git a/plugins/jetpack/modules/contact-form/css/editor-ui-rtl.css b/plugins/jetpack/modules/contact-form/css/editor-ui-rtl.css
deleted file mode 100644
index df4c059d..00000000
--- a/plugins/jetpack/modules/contact-form/css/editor-ui-rtl.css
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-i.mce-i-grunion {
- font-size: 20px;
-}
-
-i.mce-i-grunion:before,
-.jetpack-contact-form-icon:before {
- width: 24px;
- vertical-align: top;
- content: '';
- display: block;
- height: 24px;
- background-size: 24px;
- background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="rgb(85, 93, 102)" d="M13 7.5h5v2h-5zm0 7h5v2h-5zM19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zM11 6H6v5h5V6zm-1 4H7V7h3v3zm1 3H6v5h5v-5zm-1 4H7v-3h3v3z"/></svg>');
- margin-top: -4px;
-}
-i.mce-i-grunion:before {
- margin-top: -2px;
- margin-right: -2px;
-}
-
-.jetpack-contact-form-icon {
- opacity: 0.7;
- vertical-align: text-top;
- display: inline-block;
- height: 18px;
-}
diff --git a/plugins/jetpack/modules/contact-form/css/editor-ui-rtl.min.css b/plugins/jetpack/modules/contact-form/css/editor-ui-rtl.min.css
deleted file mode 100644
index 3d7d4a17..00000000
--- a/plugins/jetpack/modules/contact-form/css/editor-ui-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-i.mce-i-grunion{font-size:20px}.jetpack-contact-form-icon:before,i.mce-i-grunion:before{width:24px;vertical-align:top;content:'';display:block;height:24px;background-size:24px;background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="rgb(85, 93, 102)" d="M13 7.5h5v2h-5zm0 7h5v2h-5zM19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zM11 6H6v5h5V6zm-1 4H7V7h3v3zm1 3H6v5h5v-5zm-1 4H7v-3h3v3z"/></svg>');margin-top:-4px}i.mce-i-grunion:before{margin-top:-2px;margin-right:-2px}.jetpack-contact-form-icon{opacity:.7;vertical-align:text-top;display:inline-block;height:18px} \ No newline at end of file
diff --git a/plugins/jetpack/modules/contact-form/css/editor-ui.css b/plugins/jetpack/modules/contact-form/css/editor-ui.css
deleted file mode 100644
index b68f810b..00000000
--- a/plugins/jetpack/modules/contact-form/css/editor-ui.css
+++ /dev/null
@@ -1,26 +0,0 @@
-i.mce-i-grunion {
- font-size: 20px;
-}
-
-i.mce-i-grunion:before,
-.jetpack-contact-form-icon:before {
- width: 24px;
- vertical-align: top;
- content: '';
- display: block;
- height: 24px;
- background-size: 24px;
- background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="rgb(85, 93, 102)" d="M13 7.5h5v2h-5zm0 7h5v2h-5zM19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zM11 6H6v5h5V6zm-1 4H7V7h3v3zm1 3H6v5h5v-5zm-1 4H7v-3h3v3z"/></svg>');
- margin-top: -4px;
-}
-i.mce-i-grunion:before {
- margin-top: -2px;
- margin-left: -2px;
-}
-
-.jetpack-contact-form-icon {
- opacity: 0.7;
- vertical-align: text-top;
- display: inline-block;
- height: 18px;
-}
diff --git a/plugins/jetpack/modules/contact-form/css/editor-ui.min.css b/plugins/jetpack/modules/contact-form/css/editor-ui.min.css
deleted file mode 100644
index f7c96dfb..00000000
--- a/plugins/jetpack/modules/contact-form/css/editor-ui.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-i.mce-i-grunion{font-size:20px}.jetpack-contact-form-icon:before,i.mce-i-grunion:before{width:24px;vertical-align:top;content:'';display:block;height:24px;background-size:24px;background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="rgb(85, 93, 102)" d="M13 7.5h5v2h-5zm0 7h5v2h-5zM19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zM11 6H6v5h5V6zm-1 4H7V7h3v3zm1 3H6v5h5v-5zm-1 4H7v-3h3v3z"/></svg>');margin-top:-4px}i.mce-i-grunion:before{margin-top:-2px;margin-left:-2px}.jetpack-contact-form-icon{opacity:.7;vertical-align:text-top;display:inline-block;height:18px} \ No newline at end of file
diff --git a/plugins/jetpack/modules/contact-form/css/grunion-rtl.css b/plugins/jetpack/modules/contact-form/css/grunion-rtl.css
deleted file mode 100644
index 952b25fa..00000000
--- a/plugins/jetpack/modules/contact-form/css/grunion-rtl.css
+++ /dev/null
@@ -1 +0,0 @@
-.contact-form .clear-form{clear:both}.contact-form input:-ms-input-placeholder{transition:opacity .3s ease-out}.contact-form input::-ms-input-placeholder{transition:opacity .3s ease-out}.contact-form input::placeholder{transition:opacity .3s ease-out}.contact-form input:hover:-ms-input-placeholder{opacity:.5}.contact-form input:hover::-ms-input-placeholder{opacity:.5}.contact-form input:hover::placeholder{opacity:.5}.contact-form input:focus:-ms-input-placeholder{opacity:.3}.contact-form input:focus::-ms-input-placeholder{opacity:.3}.contact-form input:focus::placeholder{opacity:.3}.contact-form input[type=email],.contact-form input[type=text],.contact-form input[type=url]{width:300px;max-width:98%;margin-bottom:13px}.contact-form select{margin-bottom:13px}.contact-form textarea{height:200px;width:80%;float:none;margin-bottom:13px}.contact-form input[type=checkbox],.contact-form input[type=radio]{float:none;margin-bottom:13px}.contact-form label{margin-bottom:3px;float:none;font-weight:700;display:block}.contact-form label.checkbox,.contact-form label.radio{margin-bottom:3px;float:none;font-weight:700;display:inline-block}.contact-form label span{color:#aaa;margin-right:4px;font-weight:400}.contact-form-submission{margin-bottom:4em;padding:1.5em 1em}.contact-form-submission p{margin:0 auto;word-wrap:break-word}.form-errors .form-error-message{color:red}.textwidget .contact-form input[type=email],.textwidget .contact-form input[type=text],.textwidget .contact-form input[type=url],.textwidget .contact-form textarea{width:250px;max-width:100%;box-sizing:border-box}#jetpack-check-feedback-spam{margin:1px 0 0 8px}.jetpack-check-feedback-spam-spinner{display:inline-block;margin-top:7px} \ No newline at end of file
diff --git a/plugins/jetpack/modules/contact-form/css/grunion.css b/plugins/jetpack/modules/contact-form/css/grunion.css
deleted file mode 100644
index 1089188d..00000000
--- a/plugins/jetpack/modules/contact-form/css/grunion.css
+++ /dev/null
@@ -1,91 +0,0 @@
-.contact-form .clear-form {
- clear: both;
-}
-
-.contact-form input::placeholder {
- transition: opacity .3s ease-out;
-}
-.contact-form input:hover::placeholder {
- opacity: 0.5;
-}
-.contact-form input:focus::placeholder {
- opacity: 0.3;
-}
-
-.contact-form input[type='text'],
-.contact-form input[type='email'],
-.contact-form input[type='url'] {
- width: 300px;
- max-width: 98%;
- margin-bottom: 13px;
-}
-
-.contact-form select {
- margin-bottom: 13px;
-}
-
-.contact-form textarea {
- height: 200px;
- width: 80%;
- float: none;
- margin-bottom: 13px;
-}
-
-.contact-form input[type='radio'],
-.contact-form input[type='checkbox'] {
- float: none;
- margin-bottom: 13px;
-}
-
-.contact-form label {
- margin-bottom: 3px;
- float: none;
- font-weight: bold;
- display: block;
-}
-
-.contact-form label.checkbox,
-.contact-form label.radio {
- margin-bottom: 3px;
- float: none;
- font-weight: bold;
- display: inline-block;
-}
-
-.contact-form label span {
- color: #AAA;
- margin-left: 4px;
- font-weight: normal;
-}
-
-.contact-form-submission {
- margin-bottom: 4em;
- padding: 1.5em 1em;
-}
-
-.contact-form-submission p {
- margin: 0 auto;
- word-wrap: break-word;
-}
-
-.form-errors .form-error-message {
- color: red;
-}
-
-.textwidget .contact-form input[type='text'],
-.textwidget .contact-form input[type='email'],
-.textwidget .contact-form input[type='url'],
-.textwidget .contact-form textarea {
- width: 250px;
- max-width: 100%;
- box-sizing: border-box;
-}
-
-#jetpack-check-feedback-spam {
- margin: 1px 8px 0px 0px;
-}
-
-.jetpack-check-feedback-spam-spinner {
- display: inline-block;
- margin-top: 7px;
-}
diff --git a/plugins/jetpack/modules/contact-form/css/jquery-ui-datepicker.css b/plugins/jetpack/modules/contact-form/css/jquery-ui-datepicker.css
deleted file mode 100644
index e82283eb..00000000
--- a/plugins/jetpack/modules/contact-form/css/jquery-ui-datepicker.css
+++ /dev/null
@@ -1,160 +0,0 @@
-.ui-datepicker {
- padding: 0;
- margin: 0;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
- background-color: #fff;
- border: 1px solid #dfdfdf;
- border-top: none;
- -webkit-box-shadow: 0 3px 6px rgba(0, 0, 0, 0.075);
- box-shadow: 0 3px 6px rgba(0, 0, 0, 0.075);
- width: auto;
-}
-
-.ui-datepicker * {
- padding: 0;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-
-.ui-datepicker table {
- width: auto;
- margin: 0;
- border: none;
- border-collapse: collapse;
-}
-
-.ui-datepicker .ui-widget-header,
-.ui-datepicker .ui-datepicker-header {
- background-image: none;
- border: none;
- font-weight: normal;
-}
-
-.ui-datepicker .ui-datepicker-header .ui-state-hover {
- background: transparent;
- border-color: transparent;
- cursor: pointer;
-}
-
-.ui-datepicker .ui-datepicker-title {
- margin: 0;
- padding: 10px 0;
- font-size: 14px;
- line-height: 14px;
- text-align: center;
-}
-
-.ui-datepicker .ui-datepicker-prev,
-.ui-datepicker .ui-datepicker-next {
- position: relative;
- top: 0;
- height: 34px;
- width: 34px;
-}
-
-.ui-datepicker .ui-state-hover.ui-datepicker-prev,
-.ui-datepicker .ui-state-hover.ui-datepicker-next {
- border: none;
-}
-
-.ui-datepicker .ui-datepicker-prev,
-.ui-datepicker .ui-datepicker-prev-hover {
- left: 0;
-}
-
-.ui-datepicker .ui-datepicker-next,
-.ui-datepicker .ui-datepicker-next-hover {
- right: 0;
-}
-
-.ui-datepicker .ui-datepicker-next span,
-.ui-datepicker .ui-datepicker-prev span {
- display: none;
-}
-
-.ui-datepicker .ui-datepicker-prev {
- float: left;
-}
-
-.ui-datepicker .ui-datepicker-next {
- float: right;
-}
-
-.ui-datepicker .ui-datepicker-prev:before,
-.ui-datepicker .ui-datepicker-next:before {
- font: normal 20px/34px 'dashicons';
- padding-left: 7px;
- speak: none;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- width: 34px;
- height: 34px;
-}
-
-.ui-datepicker .ui-datepicker-prev:before {
- content: '\f341';
-}
-
-.ui-datepicker .ui-datepicker-next:before {
- content: '\f345';
-}
-
-.ui-datepicker .ui-datepicker-prev-hover:before,
-.ui-datepicker .ui-datepicker-next-hover:before {
- opacity: 0.7;
-}
-
-.ui-datepicker select.ui-datepicker-month,
-.ui-datepicker select.ui-datepicker-year {
- width: 33%;
-}
-
-.ui-datepicker thead {
- font-weight: 600;
-}
-
-.ui-datepicker th {
- padding: 10px;
- border-width: 1px;
-}
-
-.ui-datepicker td {
- padding: 0;
- border: 1px solid #f4f4f4;
-}
-
-.ui-datepicker td.ui-datepicker-other-month {
- border: transparent;
-}
-
-.ui-datepicker td.ui-datepicker-week-end {
- background-color: #f4f4f4;
- border: 1px solid #f4f4f4;
-}
-
-.ui-datepicker td.ui-datepicker-today {
- background-color: #f0f0c0;
-}
-
-.ui-datepicker td.ui-datepicker-current-day {
- background: #bbdd88;
-}
-
-.ui-datepicker td .ui-state-default {
- background: transparent;
- border: none;
- text-align: center;
- text-decoration: none;
- width: auto;
- display: block;
- padding: 5px 10px;
- font-weight: normal;
- color: #444;
-}
-
-.ui-datepicker td.ui-state-disabled .ui-state-default {
- opacity: 0.5;
-}
diff --git a/plugins/jetpack/modules/contact-form/grunion-contact-form.php b/plugins/jetpack/modules/contact-form/grunion-contact-form.php
deleted file mode 100644
index 8d83f535..00000000
--- a/plugins/jetpack/modules/contact-form/grunion-contact-form.php
+++ /dev/null
@@ -1,3479 +0,0 @@
-<?php
-
-/*
-Plugin Name: Grunion Contact Form
-Description: Add a contact form to any post, page or text widget. Emails will be sent to the post's author by default, or any email address you choose. As seen on WordPress.com.
-Plugin URI: http://automattic.com/#
-AUthor: Automattic, Inc.
-Author URI: http://automattic.com/
-Version: 2.4
-License: GPLv2 or later
-*/
-
-define( 'GRUNION_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
-define( 'GRUNION_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
-
-if ( is_admin() ) {
- require_once GRUNION_PLUGIN_DIR . 'admin.php';
-}
-
-add_action( 'rest_api_init', 'grunion_contact_form_require_endpoint' );
-function grunion_contact_form_require_endpoint() {
- require_once GRUNION_PLUGIN_DIR . 'class-grunion-contact-form-endpoint.php';
-}
-
-/**
- * Sets up various actions, filters, post types, post statuses, shortcodes.
- */
-class Grunion_Contact_Form_Plugin {
-
- /**
- * @var string The Widget ID of the widget currently being processed. Used to build the unique contact-form ID for forms embedded in widgets.
- */
- public $current_widget_id;
-
- static $using_contact_form_field = false;
-
- /**
- * @var int The last Feedback Post ID Erased as part of the Personal Data Eraser.
- * Helps with pagination.
- */
- private $pde_last_post_id_erased = 0;
-
- /**
- * @var string The email address for which we are deleting/exporting all feedbacks
- * as part of a Personal Data Eraser or Personal Data Exporter request.
- */
- private $pde_email_address = '';
-
- static function init() {
- static $instance = false;
-
- if ( ! $instance ) {
- $instance = new Grunion_Contact_Form_Plugin;
-
- // Schedule our daily cleanup
- add_action( 'wp_scheduled_delete', array( $instance, 'daily_akismet_meta_cleanup' ) );
- }
-
- return $instance;
- }
-
- /**
- * Runs daily to clean up spam detection metadata after 15 days. Keeps your DB squeaky clean.
- */
- public function daily_akismet_meta_cleanup() {
- global $wpdb;
-
- $feedback_ids = $wpdb->get_col( "SELECT p.ID FROM {$wpdb->posts} as p INNER JOIN {$wpdb->postmeta} as m on m.post_id = p.ID WHERE p.post_type = 'feedback' AND m.meta_key = '_feedback_akismet_values' AND DATE_SUB(NOW(), INTERVAL 15 DAY) > p.post_date_gmt LIMIT 10000" );
-
- if ( empty( $feedback_ids ) ) {
- return;
- }
-
- /**
- * Fires right before deleting the _feedback_akismet_values post meta on $feedback_ids
- *
- * @module contact-form
- *
- * @since 6.1.0
- *
- * @param array $feedback_ids list of feedback post ID
- */
- do_action( 'jetpack_daily_akismet_meta_cleanup_before', $feedback_ids );
- foreach ( $feedback_ids as $feedback_id ) {
- delete_post_meta( $feedback_id, '_feedback_akismet_values' );
- }
-
- /**
- * Fires right after deleting the _feedback_akismet_values post meta on $feedback_ids
- *
- * @module contact-form
- *
- * @since 6.1.0
- *
- * @param array $feedback_ids list of feedback post ID
- */
- do_action( 'jetpack_daily_akismet_meta_cleanup_after', $feedback_ids );
- }
-
- /**
- * Strips HTML tags from input. Output is NOT HTML safe.
- *
- * @param mixed $data_with_tags
- * @return mixed
- */
- public static function strip_tags( $data_with_tags ) {
- if ( is_array( $data_with_tags ) ) {
- foreach ( $data_with_tags as $index => $value ) {
- $index = sanitize_text_field( strval( $index ) );
- $value = wp_kses( strval( $value ), array() );
- $value = str_replace( '&amp;', '&', $value ); // undo damage done by wp_kses_normalize_entities()
-
- $data_without_tags[ $index ] = $value;
- }
- } else {
- $data_without_tags = wp_kses( $data_with_tags, array() );
- $data_without_tags = str_replace( '&amp;', '&', $data_without_tags ); // undo damage done by wp_kses_normalize_entities()
- }
-
- return $data_without_tags;
- }
-
- /**
- * Class uses singleton pattern; use Grunion_Contact_Form_Plugin::init() to initialize.
- */
- protected function __construct() {
- $this->add_shortcode();
-
- // While generating the output of a text widget with a contact-form shortcode, we need to know its widget ID.
- add_action( 'dynamic_sidebar', array( $this, 'track_current_widget' ) );
-
- // Add a "widget" shortcode attribute to all contact-form shortcodes embedded in widgets
- add_filter( 'widget_text', array( $this, 'widget_atts' ), 0 );
-
- // If Text Widgets don't get shortcode processed, hack ours into place.
- if (
- version_compare( get_bloginfo( 'version' ), '4.9-z', '<=' )
- && ! has_filter( 'widget_text', 'do_shortcode' )
- ) {
- add_filter( 'widget_text', array( $this, 'widget_shortcode_hack' ), 5 );
- }
-
- add_filter( 'jetpack_contact_form_is_spam', array( $this, 'is_spam_blacklist' ), 10, 2 );
-
- // Akismet to the rescue
- if ( defined( 'AKISMET_VERSION' ) || function_exists( 'akismet_http_post' ) ) {
- add_filter( 'jetpack_contact_form_is_spam', array( $this, 'is_spam_akismet' ), 10, 2 );
- add_action( 'contact_form_akismet', array( $this, 'akismet_submit' ), 10, 2 );
- }
-
- add_action( 'loop_start', array( 'Grunion_Contact_Form', '_style_on' ) );
-
- add_action( 'wp_ajax_grunion-contact-form', array( $this, 'ajax_request' ) );
- add_action( 'wp_ajax_nopriv_grunion-contact-form', array( $this, 'ajax_request' ) );
-
- // GDPR: personal data exporter & eraser.
- add_filter( 'wp_privacy_personal_data_exporters', array( $this, 'register_personal_data_exporter' ) );
- add_filter( 'wp_privacy_personal_data_erasers', array( $this, 'register_personal_data_eraser' ) );
-
- // Export to CSV feature
- if ( is_admin() ) {
- add_action( 'admin_init', array( $this, 'download_feedback_as_csv' ) );
- add_action( 'admin_footer-edit.php', array( $this, 'export_form' ) );
- add_action( 'admin_menu', array( $this, 'admin_menu' ) );
- add_action( 'current_screen', array( $this, 'unread_count' ) );
- }
-
- // custom post type we'll use to keep copies of the feedback items
- register_post_type(
- 'feedback', array(
- 'labels' => array(
- 'name' => __( 'Feedback', 'jetpack' ),
- 'singular_name' => __( 'Feedback', 'jetpack' ),
- 'search_items' => __( 'Search Feedback', 'jetpack' ),
- 'not_found' => __( 'No feedback found', 'jetpack' ),
- 'not_found_in_trash' => __( 'No feedback found', 'jetpack' ),
- ),
- // Matrial Ballot icon
- 'menu_icon' => 'data:image/svg+xml;base64,' . base64_encode('<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="none" d="M13 7.5h5v2h-5zm0 7h5v2h-5zM19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zM11 6H6v5h5V6zm-1 4H7V7h3v3zm1 3H6v5h5v-5zm-1 4H7v-3h3v3z"/></svg>'),
- 'show_ui' => true,
- 'show_in_admin_bar' => false,
- 'public' => false,
- 'rewrite' => false,
- 'query_var' => false,
- 'capability_type' => 'page',
- 'show_in_rest' => true,
- 'rest_controller_class' => 'Grunion_Contact_Form_Endpoint',
- 'capabilities' => array(
- 'create_posts' => false,
- 'publish_posts' => 'publish_pages',
- 'edit_posts' => 'edit_pages',
- 'edit_others_posts' => 'edit_others_pages',
- 'delete_posts' => 'delete_pages',
- 'delete_others_posts' => 'delete_others_pages',
- 'read_private_posts' => 'read_private_pages',
- 'edit_post' => 'edit_page',
- 'delete_post' => 'delete_page',
- 'read_post' => 'read_page',
- ),
- 'map_meta_cap' => true,
- )
- );
-
- // Add to REST API post type whitelist
- add_filter( 'rest_api_allowed_post_types', array( $this, 'allow_feedback_rest_api_type' ) );
-
- // Add "spam" as a post status
- register_post_status(
- 'spam', array(
- 'label' => 'Spam',
- 'public' => false,
- 'exclude_from_search' => true,
- 'show_in_admin_all_list' => false,
- 'label_count' => _n_noop( 'Spam <span class="count">(%s)</span>', 'Spam <span class="count">(%s)</span>', 'jetpack' ),
- 'protected' => true,
- '_builtin' => false,
- )
- );
-
- // POST handler
- if (
- isset( $_SERVER['REQUEST_METHOD'] ) && 'POST' == strtoupper( $_SERVER['REQUEST_METHOD'] )
- &&
- isset( $_POST['action'] ) && 'grunion-contact-form' == $_POST['action']
- &&
- isset( $_POST['contact-form-id'] )
- ) {
- add_action( 'template_redirect', array( $this, 'process_form_submission' ) );
- }
-
- /*
- Can be dequeued by placing the following in wp-content/themes/yourtheme/functions.php
- *
- * function remove_grunion_style() {
- * wp_deregister_style('grunion.css');
- * }
- * add_action('wp_print_styles', 'remove_grunion_style');
- */
- wp_register_style( 'grunion.css', GRUNION_PLUGIN_URL . 'css/grunion.css', array(), JETPACK__VERSION );
- wp_style_add_data( 'grunion.css', 'rtl', 'replace' );
-
- self::register_contact_form_blocks();
- }
-
- private static function register_contact_form_blocks() {
- jetpack_register_block( 'jetpack/contact-form', array(
- 'render_callback' => array( __CLASS__, 'gutenblock_render_form' ),
- ) );
-
- // Field render methods.
- jetpack_register_block( 'jetpack/field-text', array(
- 'parent' => array( 'jetpack/contact-form' ),
- 'render_callback' => array( __CLASS__, 'gutenblock_render_field_text' ),
- ) );
- jetpack_register_block( 'jetpack/field-name', array(
- 'parent' => array( 'jetpack/contact-form' ),
- 'render_callback' => array( __CLASS__, 'gutenblock_render_field_name' ),
- ) );
- jetpack_register_block( 'jetpack/field-email', array(
- 'parent' => array( 'jetpack/contact-form' ),
- 'render_callback' => array( __CLASS__, 'gutenblock_render_field_email' ),
- ) );
- jetpack_register_block( 'jetpack/field-url', array(
- 'parent' => array( 'jetpack/contact-form' ),
- 'render_callback' => array( __CLASS__, 'gutenblock_render_field_url' ),
- ) );
- jetpack_register_block( 'jetpack/field-date', array(
- 'parent' => array( 'jetpack/contact-form' ),
- 'render_callback' => array( __CLASS__, 'gutenblock_render_field_date' ),
- ) );
- jetpack_register_block( 'jetpack/field-telephone', array(
- 'parent' => array( 'jetpack/contact-form' ),
- 'render_callback' => array( __CLASS__, 'gutenblock_render_field_telephone' ),
- ) );
- jetpack_register_block( 'jetpack/field-textarea', array(
- 'parent' => array( 'jetpack/contact-form' ),
- 'render_callback' => array( __CLASS__, 'gutenblock_render_field_textarea' ),
- ) );
- jetpack_register_block( 'jetpack/field-checkbox', array(
- 'parent' => array( 'jetpack/contact-form' ),
- 'render_callback' => array( __CLASS__, 'gutenblock_render_field_checkbox' ),
- ) );
- jetpack_register_block( 'jetpack/field-checkbox-multiple', array(
- 'parent' => array( 'jetpack/contact-form' ),
- 'render_callback' => array( __CLASS__, 'gutenblock_render_field_checkbox_multiple' ),
- ) );
- jetpack_register_block( 'jetpack/field-radio', array(
- 'parent' => array( 'jetpack/contact-form' ),
- 'render_callback' => array( __CLASS__, 'gutenblock_render_field_radio' ),
- ) );
- jetpack_register_block( 'jetpack/field-select', array(
- 'parent' => array( 'jetpack/contact-form' ),
- 'render_callback' => array( __CLASS__, 'gutenblock_render_field_select' ),
- ) );
- }
-
- public static function gutenblock_render_form( $atts, $content ) {
- return Grunion_Contact_Form::parse( $atts, do_blocks( $content ) );
- }
-
- public static function block_attributes_to_shortcode_attributes( $atts, $type ) {
- $atts['type'] = $type;
- if ( isset( $atts['className'] ) ) {
- $atts['class'] = $atts['className'];
- unset( $atts['className'] );
- }
-
- if ( isset( $atts['defaultValue'] ) ) {
- $atts['default'] = $atts['defaultValue'];
- unset( $atts['defaultValue'] );
- }
-
- return $atts;
- }
-
- public static function gutenblock_render_field_text( $atts, $content ) {
- $atts = self::block_attributes_to_shortcode_attributes( $atts, 'text' );
- return Grunion_Contact_Form::parse_contact_field( $atts, $content );
- }
- public static function gutenblock_render_field_name( $atts, $content ) {
- $atts = self::block_attributes_to_shortcode_attributes( $atts, 'name' );
- return Grunion_Contact_Form::parse_contact_field( $atts, $content );
- }
- public static function gutenblock_render_field_email( $atts, $content ) {
- $atts = self::block_attributes_to_shortcode_attributes( $atts, 'email' );
- return Grunion_Contact_Form::parse_contact_field( $atts, $content );
- }
- public static function gutenblock_render_field_url( $atts, $content ) {
- $atts = self::block_attributes_to_shortcode_attributes( $atts, 'url' );
- return Grunion_Contact_Form::parse_contact_field( $atts, $content );
- }
- public static function gutenblock_render_field_date( $atts, $content ) {
- $atts = self::block_attributes_to_shortcode_attributes( $atts, 'date' );
- return Grunion_Contact_Form::parse_contact_field( $atts, $content );
- }
- public static function gutenblock_render_field_telephone( $atts, $content ) {
- $atts = self::block_attributes_to_shortcode_attributes( $atts, 'telephone' );
- return Grunion_Contact_Form::parse_contact_field( $atts, $content );
- }
- public static function gutenblock_render_field_textarea( $atts, $content ) {
- $atts = self::block_attributes_to_shortcode_attributes( $atts, 'textarea' );
- return Grunion_Contact_Form::parse_contact_field( $atts, $content );
- }
- public static function gutenblock_render_field_checkbox( $atts, $content ) {
- $atts = self::block_attributes_to_shortcode_attributes( $atts, 'checkbox' );
- return Grunion_Contact_Form::parse_contact_field( $atts, $content );
- }
- public static function gutenblock_render_field_checkbox_multiple( $atts, $content ) {
- $atts = self::block_attributes_to_shortcode_attributes( $atts, 'checkbox-multiple' );
- return Grunion_Contact_Form::parse_contact_field( $atts, $content );
- }
- public static function gutenblock_render_field_radio( $atts, $content ) {
- $atts = self::block_attributes_to_shortcode_attributes( $atts, 'radio' );
- return Grunion_Contact_Form::parse_contact_field( $atts, $content );
- }
- public static function gutenblock_render_field_select( $atts, $content ) {
- $atts = self::block_attributes_to_shortcode_attributes( $atts, 'select' );
- return Grunion_Contact_Form::parse_contact_field( $atts, $content );
- }
-
- /**
- * Add the 'Export' menu item as a submenu of Feedback.
- */
- public function admin_menu() {
- add_submenu_page(
- 'edit.php?post_type=feedback',
- __( 'Export feedback as CSV', 'jetpack' ),
- __( 'Export CSV', 'jetpack' ),
- 'export',
- 'feedback-export',
- array( $this, 'export_form' )
- );
- }
-
- /**
- * Add to REST API post type whitelist
- */
- function allow_feedback_rest_api_type( $post_types ) {
- $post_types[] = 'feedback';
- return $post_types;
- }
-
- /**
- * Display the count of new feedback entries received. It's reset when user visits the Feedback screen.
- *
- * @since 4.1.0
- *
- * @param object $screen Information about the current screen.
- */
- function unread_count( $screen ) {
- if ( isset( $screen->post_type ) && 'feedback' == $screen->post_type ) {
- update_option( 'feedback_unread_count', 0 );
- } else {
- global $menu;
- if ( isset( $menu ) && is_array( $menu ) && ! empty( $menu ) ) {
- foreach ( $menu as $index => $menu_item ) {
- if ( 'edit.php?post_type=feedback' == $menu_item[2] ) {
- $unread = get_option( 'feedback_unread_count', 0 );
- if ( $unread > 0 ) {
- $unread_count = current_user_can( 'publish_pages' ) ? " <span class='feedback-unread count-{$unread} awaiting-mod'><span class='feedback-unread-count'>" . number_format_i18n( $unread ) . '</span></span>' : '';
- $menu[ $index ][0] .= $unread_count;
- }
- break;
- }
- }
- }
- }
- }
-
- /**
- * Handles all contact-form POST submissions
- *
- * Conditionally attached to `template_redirect`
- */
- function process_form_submission() {
- // Add a filter to replace tokens in the subject field with sanitized field values
- add_filter( 'contact_form_subject', array( $this, 'replace_tokens_with_input' ), 10, 2 );
-
- $id = stripslashes( $_POST['contact-form-id'] );
- $hash = isset( $_POST['contact-form-hash'] ) ? $_POST['contact-form-hash'] : null;
- $hash = preg_replace( '/[^\da-f]/i', '', $hash );
-
- if ( is_user_logged_in() ) {
- check_admin_referer( "contact-form_{$id}" );
- }
-
- $is_widget = 0 === strpos( $id, 'widget-' );
-
- $form = false;
-
- if ( $is_widget ) {
- // It's a form embedded in a text widget
- $this->current_widget_id = substr( $id, 7 ); // remove "widget-"
- $widget_type = implode( '-', array_slice( explode( '-', $this->current_widget_id ), 0, -1 ) ); // Remove trailing -#
-
- // Is the widget active?
- $sidebar = is_active_widget( false, $this->current_widget_id, $widget_type );
-
- // This is lame - no core API for getting a widget by ID
- $widget = isset( $GLOBALS['wp_registered_widgets'][ $this->current_widget_id ] ) ? $GLOBALS['wp_registered_widgets'][ $this->current_widget_id ] : false;
-
- if ( $sidebar && $widget && isset( $widget['callback'] ) ) {
- // prevent PHP notices by populating widget args
- $widget_args = array(
- 'before_widget' => '',
- 'after_widget' => '',
- 'before_title' => '',
- 'after_title' => '',
- );
- // This is lamer - no API for outputting a given widget by ID
- ob_start();
- // Process the widget to populate Grunion_Contact_Form::$last
- call_user_func( $widget['callback'], $widget_args, $widget['params'][0] );
- ob_end_clean();
- }
- } else {
- // It's a form embedded in a post
- $post = get_post( $id );
-
- // Process the content to populate Grunion_Contact_Form::$last
- /** This filter is already documented in core. wp-includes/post-template.php */
- apply_filters( 'the_content', $post->post_content );
- }
-
- $form = isset( Grunion_Contact_Form::$forms[ $hash ] ) ? Grunion_Contact_Form::$forms[ $hash ] : null;
-
- // No form may mean user is using do_shortcode, grab the form using the stored post meta
- if ( ! $form ) {
-
- // Get shortcode from post meta
- $shortcode = get_post_meta( $_POST['contact-form-id'], "_g_feedback_shortcode_{$hash}", true );
-
- // Format it
- if ( $shortcode != '' ) {
-
- // Get attributes from post meta.
- $parameters = '';
- $attributes = get_post_meta( $_POST['contact-form-id'], "_g_feedback_shortcode_atts_{$hash}", true );
- if ( ! empty( $attributes ) && is_array( $attributes ) ) {
- foreach ( array_filter( $attributes ) as $param => $value ) {
- $parameters .= " $param=\"$value\"";
- }
- }
-
- $shortcode = '[contact-form' . $parameters . ']' . $shortcode . '[/contact-form]';
- do_shortcode( $shortcode );
-
- // Recreate form
- $form = Grunion_Contact_Form::$last;
- }
-
- if ( ! $form ) {
- return false;
- }
- }
-
- if ( is_wp_error( $form->errors ) && $form->errors->get_error_codes() ) {
- return $form->errors;
- }
-
- // Process the form
- return $form->process_submission();
- }
-
- function ajax_request() {
- $submission_result = self::process_form_submission();
-
- if ( ! $submission_result ) {
- header( 'HTTP/1.1 500 Server Error', 500, true );
- echo '<div class="form-error"><ul class="form-errors"><li class="form-error-message">';
- esc_html_e( 'An error occurred. Please try again later.', 'jetpack' );
- echo '</li></ul></div>';
- } elseif ( is_wp_error( $submission_result ) ) {
- header( 'HTTP/1.1 400 Bad Request', 403, true );
- echo '<div class="form-error"><ul class="form-errors"><li class="form-error-message">';
- echo esc_html( $submission_result->get_error_message() );
- echo '</li></ul></div>';
- } else {
- echo '<h3>' . esc_html__( 'Message Sent', 'jetpack' ) . '</h3>' . $submission_result;
- }
-
- die;
- }
-
- /**
- * Ensure the post author is always zero for contact-form feedbacks
- * Attached to `wp_insert_post_data`
- *
- * @see Grunion_Contact_Form::process_submission()
- *
- * @param array $data the data to insert
- * @param array $postarr the data sent to wp_insert_post()
- * @return array The filtered $data to insert
- */
- function insert_feedback_filter( $data, $postarr ) {
- if ( $data['post_type'] == 'feedback' && $postarr['post_type'] == 'feedback' ) {
- $data['post_author'] = 0;
- }
-
- return $data;
- }
- /*
- * Adds our contact-form shortcode
- * The "child" contact-field shortcode is enabled as needed by the contact-form shortcode handler
- */
- function add_shortcode() {
- add_shortcode( 'contact-form', array( 'Grunion_Contact_Form', 'parse' ) );
- add_shortcode( 'contact-field', array( 'Grunion_Contact_Form', 'parse_contact_field' ) );
- }
-
- static function tokenize_label( $label ) {
- return '{' . trim( preg_replace( '#^\d+_#', '', $label ) ) . '}';
- }
-
- static function sanitize_value( $value ) {
- return preg_replace( '=((<CR>|<LF>|0x0A/%0A|0x0D/%0D|\\n|\\r)\S).*=i', null, $value );
- }
-
- /**
- * Replaces tokens like {city} or {City} (case insensitive) with the value
- * of an input field of that name
- *
- * @param string $subject
- * @param array $field_values Array with field label => field value associations
- *
- * @return string The filtered $subject with the tokens replaced
- */
- function replace_tokens_with_input( $subject, $field_values ) {
- // Wrap labels into tokens (inside {})
- $wrapped_labels = array_map( array( 'Grunion_Contact_Form_Plugin', 'tokenize_label' ), array_keys( $field_values ) );
- // Sanitize all values
- $sanitized_values = array_map( array( 'Grunion_Contact_Form_Plugin', 'sanitize_value' ), array_values( $field_values ) );
-
- foreach ( $sanitized_values as $k => $sanitized_value ) {
- if ( is_array( $sanitized_value ) ) {
- $sanitized_values[ $k ] = implode( ', ', $sanitized_value );
- }
- }
-
- // Search for all valid tokens (based on existing fields) and replace with the field's value
- $subject = str_ireplace( $wrapped_labels, $sanitized_values, $subject );
- return $subject;
- }
-
- /**
- * Tracks the widget currently being processed.
- * Attached to `dynamic_sidebar`
- *
- * @see $current_widget_id
- *
- * @param array $widget The widget data
- */
- function track_current_widget( $widget ) {
- $this->current_widget_id = $widget['id'];
- }
-
- /**
- * Adds a "widget" attribute to every contact-form embedded in a text widget.
- * Used to tell the difference between post-embedded contact-forms and widget-embedded contact-forms
- * Attached to `widget_text`
- *
- * @param string $text The widget text
- * @return string The filtered widget text
- */
- function widget_atts( $text ) {
- Grunion_Contact_Form::style( true );
-
- return preg_replace( '/\[contact-form([^a-zA-Z_-])/', '[contact-form widget="' . $this->current_widget_id . '"\\1', $text );
- }
-
- /**
- * For sites where text widgets are not processed for shortcodes, we add this hack to process just our shortcode
- * Attached to `widget_text`
- *
- * @param string $text The widget text
- * @return string The contact-form filtered widget text
- */
- function widget_shortcode_hack( $text ) {
- if ( ! preg_match( '/\[contact-form([^a-zA-Z_-])/', $text ) ) {
- return $text;
- }
-
- $old = $GLOBALS['shortcode_tags'];
- remove_all_shortcodes();
- Grunion_Contact_Form_Plugin::$using_contact_form_field = true;
- $this->add_shortcode();
-
- $text = do_shortcode( $text );
-
- Grunion_Contact_Form_Plugin::$using_contact_form_field = false;
- $GLOBALS['shortcode_tags'] = $old;
-
- return $text;
- }
-
- /**
- * Check if a submission matches the Comment Blacklist.
- * The Comment Blacklist is a means to moderate discussion, and contact
- * forms are 1:1 discussion forums, ripe for abuse by users who are being
- * removed from the public discussion.
- * Attached to `jetpack_contact_form_is_spam`
- *
- * @param bool $is_spam
- * @param array $form
- * @return bool TRUE => spam, FALSE => not spam
- */
- function is_spam_blacklist( $is_spam, $form = array() ) {
- if ( $is_spam ) {
- return $is_spam;
- }
-
- if ( wp_blacklist_check( $form['comment_author'], $form['comment_author_email'], $form['comment_author_url'], $form['comment_content'], $form['user_ip'], $form['user_agent'] ) ) {
- return true;
- }
-
- return false;
- }
-
- /**
- * Populate an array with all values necessary to submit a NEW contact-form feedback to Akismet.
- * Note that this includes the current user_ip etc, so this should only be called when accepting a new item via $_POST
- *
- * @param array $form Contact form feedback array
- * @return array feedback array with additional data ready for submission to Akismet
- */
- function prepare_for_akismet( $form ) {
- $form['comment_type'] = 'contact_form';
- $form['user_ip'] = $_SERVER['REMOTE_ADDR'];
- $form['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
- $form['referrer'] = $_SERVER['HTTP_REFERER'];
- $form['blog'] = get_option( 'home' );
-
- foreach ( $_SERVER as $key => $value ) {
- if ( ! is_string( $value ) ) {
- continue;
- }
- if ( in_array( $key, array( 'HTTP_COOKIE', 'HTTP_COOKIE2', 'HTTP_USER_AGENT', 'HTTP_REFERER' ) ) ) {
- // We don't care about cookies, and the UA and Referrer were caught above.
- continue;
- } elseif ( in_array( $key, array( 'REMOTE_ADDR', 'REQUEST_URI', 'DOCUMENT_URI' ) ) ) {
- // All three of these are relevant indicators and should be passed along.
- $form[ $key ] = $value;
- } elseif ( wp_startswith( $key, 'HTTP_' ) ) {
- // Any other HTTP header indicators.
- // `wp_startswith()` is a wpcom helper function and is included in Jetpack via `functions.compat.php`
- $form[ $key ] = $value;
- }
- }
-
- return $form;
- }
-
- /**
- * Submit contact-form data to Akismet to check for spam.
- * If you're accepting a new item via $_POST, run it Grunion_Contact_Form_Plugin::prepare_for_akismet() first
- * Attached to `jetpack_contact_form_is_spam`
- *
- * @param bool $is_spam
- * @param array $form
- * @return bool|WP_Error TRUE => spam, FALSE => not spam, WP_Error => stop processing entirely
- */
- function is_spam_akismet( $is_spam, $form = array() ) {
- global $akismet_api_host, $akismet_api_port;
-
- // The signature of this function changed from accepting just $form.
- // If something only sends an array, assume it's still using the old
- // signature and work around it.
- if ( empty( $form ) && is_array( $is_spam ) ) {
- $form = $is_spam;
- $is_spam = false;
- }
-
- // If a previous filter has alrady marked this as spam, trust that and move on.
- if ( $is_spam ) {
- return $is_spam;
- }
-
- if ( ! function_exists( 'akismet_http_post' ) && ! defined( 'AKISMET_VERSION' ) ) {
- return false;
- }
-
- $query_string = http_build_query( $form );
-
- if ( method_exists( 'Akismet', 'http_post' ) ) {
- $response = Akismet::http_post( $query_string, 'comment-check' );
- } else {
- $response = akismet_http_post( $query_string, $akismet_api_host, '/1.1/comment-check', $akismet_api_port );
- }
-
- $result = false;
-
- if ( isset( $response[0]['x-akismet-pro-tip'] ) && 'discard' === trim( $response[0]['x-akismet-pro-tip'] ) && get_option( 'akismet_strictness' ) === '1' ) {
- $result = new WP_Error( 'feedback-discarded', __( 'Feedback discarded.', 'jetpack' ) );
- } elseif ( isset( $response[1] ) && 'true' == trim( $response[1] ) ) { // 'true' is spam
- $result = true;
- }
-
- /**
- * Filter the results returned by Akismet for each submitted contact form.
- *
- * @module contact-form
- *
- * @since 1.3.1
- *
- * @param WP_Error|bool $result Is the submitted feedback spam.
- * @param array|bool $form Submitted feedback.
- */
- return apply_filters( 'contact_form_is_spam_akismet', $result, $form );
- }
-
- /**
- * Submit a feedback as either spam or ham
- *
- * @param string $as Either 'spam' or 'ham'.
- * @param array $form the contact-form data
- */
- function akismet_submit( $as, $form ) {
- global $akismet_api_host, $akismet_api_port;
-
- if ( ! in_array( $as, array( 'ham', 'spam' ) ) ) {
- return false;
- }
-
- $query_string = '';
- if ( is_array( $form ) ) {
- $query_string = http_build_query( $form );
- }
- if ( method_exists( 'Akismet', 'http_post' ) ) {
- $response = Akismet::http_post( $query_string, "submit-{$as}" );
- } else {
- $response = akismet_http_post( $query_string, $akismet_api_host, "/1.1/submit-{$as}", $akismet_api_port );
- }
-
- return trim( $response[1] );
- }
-
- /**
- * Prints the menu
- */
- function export_form() {
- $current_screen = get_current_screen();
- if ( ! in_array( $current_screen->id, array( 'edit-feedback', 'feedback_page_feedback-export' ) ) ) {
- return;
- }
-
- if ( ! current_user_can( 'export' ) ) {
- return;
- }
-
- // if there aren't any feedbacks, bail out
- if ( ! (int) wp_count_posts( 'feedback' )->publish ) {
- return;
- }
- ?>
-
- <div id="feedback-export" style="display:none">
- <h2><?php _e( 'Export feedback as CSV', 'jetpack' ); ?></h2>
- <div class="clear"></div>
- <form action="<?php echo admin_url( 'admin-post.php' ); ?>" method="post" class="form">
- <?php wp_nonce_field( 'feedback_export', 'feedback_export_nonce' ); ?>
-
- <input name="action" value="feedback_export" type="hidden">
- <label for="post"><?php _e( 'Select feedback to download', 'jetpack' ); ?></label>
- <select name="post">
- <option value="all"><?php esc_html_e( 'All posts', 'jetpack' ); ?></option>
- <?php echo $this->get_feedbacks_as_options(); ?>
- </select>
-
- <br><br>
- <input type="submit" name="submit" id="submit" class="button button-primary" value="<?php esc_html_e( 'Download', 'jetpack' ); ?>">
- </form>
- </div>
-
- <?php
- // There aren't any usable actions in core to output the "export feedback" form in the correct place,
- // so this inline JS moves it from the top of the page to the bottom.
- ?>
- <script type='text/javascript'>
- var menu = document.getElementById( 'feedback-export' ),
- wrapper = document.getElementsByClassName( 'wrap' )[0];
- <?php if ( 'edit-feedback' === $current_screen->id ) : ?>
- wrapper.appendChild(menu);
- <?php endif; ?>
- menu.style.display = 'block';
- </script>
- <?php
- }
-
- /**
- * Fetch post content for a post and extract just the comment.
- *
- * @param int $post_id The post id to fetch the content for.
- *
- * @return string Trimmed post comment.
- *
- * @codeCoverageIgnore
- */
- public function get_post_content_for_csv_export( $post_id ) {
- $post_content = get_post_field( 'post_content', $post_id );
- $content = explode( '<!--more-->', $post_content );
-
- return trim( $content[0] );
- }
-
- /**
- * Get `_feedback_extra_fields` field from post meta data.
- *
- * @param int $post_id Id of the post to fetch meta data for.
- *
- * @return mixed
- *
- * @codeCoverageIgnore - No need to be covered.
- */
- public function get_post_meta_for_csv_export( $post_id ) {
- return get_post_meta( $post_id, '_feedback_extra_fields', true );
- }
-
- /**
- * Get parsed feedback post fields.
- *
- * @param int $post_id Id of the post to fetch parsed contents for.
- *
- * @return array
- *
- * @codeCoverageIgnore - No need to be covered.
- */
- public function get_parsed_field_contents_of_post( $post_id ) {
- return self::parse_fields_from_content( $post_id );
- }
-
- /**
- * Properly maps fields that are missing from the post meta data
- * to names, that are similar to those of the post meta.
- *
- * @param array $parsed_post_content Parsed post content
- *
- * @see parse_fields_from_content for how the input data is generated.
- *
- * @return array Mapped fields.
- */
- public function map_parsed_field_contents_of_post_to_field_names( $parsed_post_content ) {
-
- $mapped_fields = array();
-
- $field_mapping = array(
- '_feedback_subject' => __( 'Contact Form', 'jetpack' ),
- '_feedback_author' => '1_Name',
- '_feedback_author_email' => '2_Email',
- '_feedback_author_url' => '3_Website',
- '_feedback_main_comment' => '4_Comment',
- );
-
- foreach ( $field_mapping as $parsed_field_name => $field_name ) {
- if (
- isset( $parsed_post_content[ $parsed_field_name ] )
- && ! empty( $parsed_post_content[ $parsed_field_name ] )
- ) {
- $mapped_fields[ $field_name ] = $parsed_post_content[ $parsed_field_name ];
- }
- }
-
- return $mapped_fields;
- }
-
- /**
- * Registers the personal data exporter.
- *
- * @since 6.1.1
- *
- * @param array $exporters An array of personal data exporters.
- *
- * @return array $exporters An array of personal data exporters.
- */
- public function register_personal_data_exporter( $exporters ) {
- $exporters['jetpack-feedback'] = array(
- 'exporter_friendly_name' => __( 'Feedback', 'jetpack' ),
- 'callback' => array( $this, 'personal_data_exporter' ),
- );
-
- return $exporters;
- }
-
- /**
- * Registers the personal data eraser.
- *
- * @since 6.1.1
- *
- * @param array $erasers An array of personal data erasers.
- *
- * @return array $erasers An array of personal data erasers.
- */
- public function register_personal_data_eraser( $erasers ) {
- $erasers['jetpack-feedback'] = array(
- 'eraser_friendly_name' => __( 'Feedback', 'jetpack' ),
- 'callback' => array( $this, 'personal_data_eraser' ),
- );
-
- return $erasers;
- }
-
- /**
- * Exports personal data.
- *
- * @since 6.1.1
- *
- * @param string $email Email address.
- * @param int $page Page to export.
- *
- * @return array $return Associative array with keys expected by core.
- */
- public function personal_data_exporter( $email, $page = 1 ) {
- return $this->_internal_personal_data_exporter( $email, $page );
- }
-
- /**
- * Internal method for exporting personal data.
- *
- * Allows us to have a different signature than core expects
- * while protecting against future core API changes.
- *
- * @internal
- * @since 6.5
- *
- * @param string $email Email address.
- * @param int $page Page to export.
- * @param int $per_page Number of feedbacks to process per page. Internal use only (testing)
- *
- * @return array Associative array with keys expected by core.
- */
- public function _internal_personal_data_exporter( $email, $page = 1, $per_page = 250 ) {
- $export_data = array();
- $post_ids = $this->personal_data_post_ids_by_email( $email, $per_page, $page );
-
- foreach ( $post_ids as $post_id ) {
- $post_fields = $this->get_parsed_field_contents_of_post( $post_id );
-
- if ( ! is_array( $post_fields ) || empty( $post_fields['_feedback_subject'] ) ) {
- continue; // Corrupt data.
- }
-
- $post_fields['_feedback_main_comment'] = $this->get_post_content_for_csv_export( $post_id );
- $post_fields = $this->map_parsed_field_contents_of_post_to_field_names( $post_fields );
-
- if ( ! is_array( $post_fields ) || empty( $post_fields ) ) {
- continue; // No fields to export.
- }
-
- $post_meta = $this->get_post_meta_for_csv_export( $post_id );
- $post_meta = is_array( $post_meta ) ? $post_meta : array();
-
- $post_export_data = array();
- $post_data = array_merge( $post_fields, $post_meta );
- ksort( $post_data );
-
- foreach ( $post_data as $post_data_key => $post_data_value ) {
- $post_export_data[] = array(
- 'name' => preg_replace( '/^[0-9]+_/', '', $post_data_key ),
- 'value' => $post_data_value,
- );
- }
-
- $export_data[] = array(
- 'group_id' => 'feedback',
- 'group_label' => __( 'Feedback', 'jetpack' ),
- 'item_id' => 'feedback-' . $post_id,
- 'data' => $post_export_data,
- );
- }
-
- return array(
- 'data' => $export_data,
- 'done' => count( $post_ids ) < $per_page,
- );
- }
-
- /**
- * Erases personal data.
- *
- * @since 6.1.1
- *
- * @param string $email Email address.
- * @param int $page Page to erase.
- *
- * @return array Associative array with keys expected by core.
- */
- public function personal_data_eraser( $email, $page = 1 ) {
- return $this->_internal_personal_data_eraser( $email, $page );
- }
-
- /**
- * Internal method for erasing personal data.
- *
- * Allows us to have a different signature than core expects
- * while protecting against future core API changes.
- *
- * @internal
- * @since 6.5
- *
- * @param string $email Email address.
- * @param int $page Page to erase.
- * @param int $per_page Number of feedbacks to process per page. Internal use only (testing)
- *
- * @return array Associative array with keys expected by core.
- */
- public function _internal_personal_data_eraser( $email, $page = 1, $per_page = 250 ) {
- $removed = false;
- $retained = false;
- $messages = array();
- $option_name = sprintf( '_jetpack_pde_feedback_%s', md5( $email ) );
- $last_post_id = 1 === $page ? 0 : get_option( $option_name, 0 );
- $post_ids = $this->personal_data_post_ids_by_email( $email, $per_page, $page, $last_post_id );
-
- foreach ( $post_ids as $post_id ) {
- /**
- * Filters whether to erase a particular Feedback post.
- *
- * @since 6.3.0
- *
- * @param bool|string $prevention_message Whether to apply erase the Feedback post (bool).
- * Custom prevention message (string). Default true.
- * @param int $post_id Feedback post ID.
- */
- $prevention_message = apply_filters( 'grunion_contact_form_delete_feedback_post', true, $post_id );
-
- if ( true !== $prevention_message ) {
- if ( $prevention_message && is_string( $prevention_message ) ) {
- $messages[] = esc_html( $prevention_message );
- } else {
- $messages[] = sprintf(
- // translators: %d: Post ID.
- __( 'Feedback ID %d could not be removed at this time.', 'jetpack' ),
- $post_id
- );
- }
-
- $retained = true;
-
- continue;
- }
-
- if ( wp_delete_post( $post_id, true ) ) {
- $removed = true;
- } else {
- $retained = true;
- $messages[] = sprintf(
- // translators: %d: Post ID.
- __( 'Feedback ID %d could not be removed at this time.', 'jetpack' ),
- $post_id
- );
- }
- }
-
- $done = count( $post_ids ) < $per_page;
-
- if ( $done ) {
- delete_option( $option_name );
- } else {
- update_option( $option_name, (int) $post_id );
- }
-
- return array(
- 'items_removed' => $removed,
- 'items_retained' => $retained,
- 'messages' => $messages,
- 'done' => $done,
- );
- }
-
- /**
- * Queries personal data by email address.
- *
- * @since 6.1.1
- *
- * @param string $email Email address.
- * @param int $per_page Post IDs per page. Default is `250`.
- * @param int $page Page to query. Default is `1`.
- * @param int $last_post_id Page to query. Default is `0`. If non-zero, used instead of $page.
- *
- * @return array An array of post IDs.
- */
- public function personal_data_post_ids_by_email( $email, $per_page = 250, $page = 1, $last_post_id = 0 ) {
- add_filter( 'posts_search', array( $this, 'personal_data_search_filter' ) );
-
- $this->pde_last_post_id_erased = $last_post_id;
- $this->pde_email_address = $email;
-
- $post_ids = get_posts(
- array(
- 'post_type' => 'feedback',
- 'post_status' => 'publish',
- // This search parameter gets overwritten in ->personal_data_search_filter()
- 's' => '..PDE..AUTHOR EMAIL:..PDE..',
- 'sentence' => true,
- 'order' => 'ASC',
- 'orderby' => 'ID',
- 'fields' => 'ids',
- 'posts_per_page' => $per_page,
- 'paged' => $last_post_id ? 1 : $page,
- 'suppress_filters' => false,
- )
- );
-
- $this->pde_last_post_id_erased = 0;
- $this->pde_email_address = '';
-
- remove_filter( 'posts_search', array( $this, 'personal_data_search_filter' ) );
-
- return $post_ids;
- }
-
- /**
- * Filters searches by email address.
- *
- * @since 6.1.1
- *
- * @param string $search SQL where clause.
- *
- * @return array Filtered SQL where clause.
- */
- public function personal_data_search_filter( $search ) {
- global $wpdb;
-
- /*
- * Limits search to `post_content` only, and we only match the
- * author's email address whenever it's on a line by itself.
- */
- if ( $this->pde_email_address && false !== strpos( $search, '..PDE..AUTHOR EMAIL:..PDE..' ) ) {
- $search = $wpdb->prepare(
- " AND (
- {$wpdb->posts}.post_content LIKE %s
- OR {$wpdb->posts}.post_content LIKE %s
- )",
- // `chr( 10 )` = `\n`, `chr( 13 )` = `\r`
- '%' . $wpdb->esc_like( chr( 10 ) . 'AUTHOR EMAIL: ' . $this->pde_email_address . chr( 10 ) ) . '%',
- '%' . $wpdb->esc_like( chr( 13 ) . 'AUTHOR EMAIL: ' . $this->pde_email_address . chr( 13 ) ) . '%'
- );
-
- if ( $this->pde_last_post_id_erased ) {
- $search .= $wpdb->prepare( " AND {$wpdb->posts}.ID > %d", $this->pde_last_post_id_erased );
- }
- }
-
- return $search;
- }
-
- /**
- * Prepares feedback post data for CSV export.
- *
- * @param array $post_ids Post IDs to fetch the data for. These need to be Feedback posts.
- *
- * @return array
- */
- public function get_export_data_for_posts( $post_ids ) {
-
- $posts_data = array();
- $field_names = array();
- $result = array();
-
- /**
- * Fetch posts and get the possible field names for later use
- */
- foreach ( $post_ids as $post_id ) {
-
- /**
- * Fetch post main data, because we need the subject and author data for the feedback form.
- */
- $post_real_data = $this->get_parsed_field_contents_of_post( $post_id );
-
- /**
- * If `$post_real_data` is not an array or there is no `_feedback_subject` set,
- * then something must be wrong with the feedback post. Skip it.
- */
- if ( ! is_array( $post_real_data ) || ! isset( $post_real_data['_feedback_subject'] ) ) {
- continue;
- }
-
- /**
- * Fetch main post comment. This is from the default textarea fields.
- * If it is non-empty, then we add it to data, otherwise skip it.
- */
- $post_comment_content = $this->get_post_content_for_csv_export( $post_id );
- if ( ! empty( $post_comment_content ) ) {
- $post_real_data['_feedback_main_comment'] = $post_comment_content;
- }
-
- /**
- * Map parsed fields to proper field names
- */
- $mapped_fields = $this->map_parsed_field_contents_of_post_to_field_names( $post_real_data );
-
- /**
- * Fetch post meta data.
- */
- $post_meta_data = $this->get_post_meta_for_csv_export( $post_id );
-
- /**
- * If `$post_meta_data` is not an array or if it is empty, then there is no
- * extra feedback to work with. Create an empty array.
- */
- if ( ! is_array( $post_meta_data ) || empty( $post_meta_data ) ) {
- $post_meta_data = array();
- }
-
- /**
- * Prepend the feedback subject to the list of fields.
- */
- $post_meta_data = array_merge(
- $mapped_fields,
- $post_meta_data
- );
-
- /**
- * Save post metadata for later usage.
- */
- $posts_data[ $post_id ] = $post_meta_data;
-
- /**
- * Save field names, so we can use them as header fields later in the CSV.
- */
- $field_names = array_merge( $field_names, array_keys( $post_meta_data ) );
- }
-
- /**
- * Make sure the field names are unique, because we don't want duplicate data.
- */
- $field_names = array_unique( $field_names );
-
- /**
- * Sort the field names by the field id number
- */
- sort( $field_names, SORT_NUMERIC );
-
- /**
- * Loop through every post, which is essentially CSV row.
- */
- foreach ( $posts_data as $post_id => $single_post_data ) {
-
- /**
- * Go through all the possible fields and check if the field is available
- * in the current post.
- *
- * If it is - add the data as a value.
- * If it is not - add an empty string, which is just a placeholder in the CSV.
- */
- foreach ( $field_names as $single_field_name ) {
- if (
- isset( $single_post_data[ $single_field_name ] )
- && ! empty( $single_post_data[ $single_field_name ] )
- ) {
- $result[ $single_field_name ][] = trim( $single_post_data[ $single_field_name ] );
- } else {
- $result[ $single_field_name ][] = '';
- }
- }
- }
-
- return $result;
- }
-
- /**
- * download as a csv a contact form or all of them in a csv file
- */
- function download_feedback_as_csv() {
- if ( empty( $_POST['feedback_export_nonce'] ) ) {
- return;
- }
-
- check_admin_referer( 'feedback_export', 'feedback_export_nonce' );
-
- if ( ! current_user_can( 'export' ) ) {
- return;
- }
-
- $args = array(
- 'posts_per_page' => -1,
- 'post_type' => 'feedback',
- 'post_status' => 'publish',
- 'order' => 'ASC',
- 'fields' => 'ids',
- 'suppress_filters' => false,
- );
-
- $filename = date( 'Y-m-d' ) . '-feedback-export.csv';
-
- // Check if we want to download all the feedbacks or just a certain contact form
- if ( ! empty( $_POST['post'] ) && $_POST['post'] !== 'all' ) {
- $args['post_parent'] = (int) $_POST['post'];
- $filename = date( 'Y-m-d' ) . '-' . str_replace( '&nbsp;', '-', get_the_title( (int) $_POST['post'] ) ) . '.csv';
- }
-
- $feedbacks = get_posts( $args );
-
- if ( empty( $feedbacks ) ) {
- return;
- }
-
- $filename = sanitize_file_name( $filename );
-
- /**
- * Prepare data for export.
- */
- $data = $this->get_export_data_for_posts( $feedbacks );
-
- /**
- * If `$data` is empty, there's nothing we can do below.
- */
- if ( ! is_array( $data ) || empty( $data ) ) {
- return;
- }
-
- /**
- * Extract field names from `$data` for later use.
- */
- $fields = array_keys( $data );
-
- /**
- * Count how many rows will be exported.
- */
- $row_count = count( reset( $data ) );
-
- // Forces the download of the CSV instead of echoing
- header( 'Content-Disposition: attachment; filename=' . $filename );
- header( 'Pragma: no-cache' );
- header( 'Expires: 0' );
- header( 'Content-Type: text/csv; charset=utf-8' );
-
- $output = fopen( 'php://output', 'w' );
-
- /**
- * Print CSV headers
- */
- fputcsv( $output, $fields );
-
- /**
- * Print rows to the output.
- */
- for ( $i = 0; $i < $row_count; $i ++ ) {
-
- $current_row = array();
-
- /**
- * Put all the fields in `$current_row` array.
- */
- foreach ( $fields as $single_field_name ) {
- $current_row[] = $this->esc_csv( $data[ $single_field_name ][ $i ] );
- }
-
- /**
- * Output the complete CSV row
- */
- fputcsv( $output, $current_row );
- }
-
- fclose( $output );
- }
-
- /**
- * Escape a string to be used in a CSV context
- *
- * Malicious input can inject formulas into CSV files, opening up the possibility for phishing attacks and
- * disclosure of sensitive information.
- *
- * Additionally, Excel exposes the ability to launch arbitrary commands through the DDE protocol.
- *
- * @see http://www.contextis.com/resources/blog/comma-separated-vulnerabilities/
- *
- * @param string $field
- *
- * @return string
- */
- public function esc_csv( $field ) {
- $active_content_triggers = array( '=', '+', '-', '@' );
-
- if ( in_array( mb_substr( $field, 0, 1 ), $active_content_triggers, true ) ) {
- $field = "'" . $field;
- }
-
- return $field;
- }
-
- /**
- * Returns a string of HTML <option> items from an array of posts
- *
- * @return string a string of HTML <option> items
- */
- protected function get_feedbacks_as_options() {
- $options = '';
-
- // Get the feedbacks' parents' post IDs
- $feedbacks = get_posts(
- array(
- 'fields' => 'id=>parent',
- 'posts_per_page' => 100000,
- 'post_type' => 'feedback',
- 'post_status' => 'publish',
- 'suppress_filters' => false,
- )
- );
- $parents = array_unique( array_values( $feedbacks ) );
-
- $posts = get_posts(
- array(
- 'orderby' => 'ID',
- 'posts_per_page' => 1000,
- 'post_type' => 'any',
- 'post__in' => array_values( $parents ),
- 'suppress_filters' => false,
- )
- );
-
- // creates the string of <option> elements
- foreach ( $posts as $post ) {
- $options .= sprintf( '<option value="%s">%s</option>', esc_attr( $post->ID ), esc_html( $post->post_title ) );
- }
-
- return $options;
- }
-
- /**
- * Get the names of all the form's fields
- *
- * @param array|int $posts the post we want the fields of
- *
- * @return array the array of fields
- *
- * @deprecated As this is no longer necessary as of the CSV export rewrite. - 2015-12-29
- */
- protected function get_field_names( $posts ) {
- $posts = (array) $posts;
- $all_fields = array();
-
- foreach ( $posts as $post ) {
- $fields = self::parse_fields_from_content( $post );
-
- if ( isset( $fields['_feedback_all_fields'] ) ) {
- $extra_fields = array_keys( $fields['_feedback_all_fields'] );
- $all_fields = array_merge( $all_fields, $extra_fields );
- }
- }
-
- $all_fields = array_unique( $all_fields );
- return $all_fields;
- }
-
- public static function parse_fields_from_content( $post_id ) {
- static $post_fields;
-
- if ( ! is_array( $post_fields ) ) {
- $post_fields = array();
- }
-
- if ( isset( $post_fields[ $post_id ] ) ) {
- return $post_fields[ $post_id ];
- }
-
- $all_values = array();
- $post_content = get_post_field( 'post_content', $post_id );
- $content = explode( '<!--more-->', $post_content );
- $lines = array();
-
- if ( count( $content ) > 1 ) {
- $content = str_ireplace( array( '<br />', ')</p>' ), '', $content[1] );
- $one_line = preg_replace( '/\s+/', ' ', $content );
- $one_line = preg_replace( '/.*Array \( (.*)\)/', '$1', $one_line );
-
- preg_match_all( '/\[([^\]]+)\] =\&gt\; ([^\[]+)/', $one_line, $matches );
-
- if ( count( $matches ) > 1 ) {
- $all_values = array_combine( array_map( 'trim', $matches[1] ), array_map( 'trim', $matches[2] ) );
- }
-
- $lines = array_filter( explode( "\n", $content ) );
- }
-
- $var_map = array(
- 'AUTHOR' => '_feedback_author',
- 'AUTHOR EMAIL' => '_feedback_author_email',
- 'AUTHOR URL' => '_feedback_author_url',
- 'SUBJECT' => '_feedback_subject',
- 'IP' => '_feedback_ip',
- );
-
- $fields = array();
-
- foreach ( $lines as $line ) {
- $vars = explode( ': ', $line, 2 );
- if ( ! empty( $vars ) ) {
- if ( isset( $var_map[ $vars[0] ] ) ) {
- $fields[ $var_map[ $vars[0] ] ] = self::strip_tags( trim( $vars[1] ) );
- }
- }
- }
-
- $fields['_feedback_all_fields'] = $all_values;
-
- $post_fields[ $post_id ] = $fields;
-
- return $fields;
- }
-
- /**
- * Creates a valid csv row from a post id
- *
- * @param int $post_id The id of the post
- * @param array $fields An array containing the names of all the fields of the csv
- * @return String The csv row
- *
- * @deprecated This is no longer needed, as of the CSV export rewrite.
- */
- protected static function make_csv_row_from_feedback( $post_id, $fields ) {
- $content_fields = self::parse_fields_from_content( $post_id );
- $all_fields = array();
-
- if ( isset( $content_fields['_feedback_all_fields'] ) ) {
- $all_fields = $content_fields['_feedback_all_fields'];
- }
-
- // Overwrite the parsed content with the content we stored in post_meta in a better format.
- $extra_fields = get_post_meta( $post_id, '_feedback_extra_fields', true );
- foreach ( $extra_fields as $extra_field => $extra_value ) {
- $all_fields[ $extra_field ] = $extra_value;
- }
-
- // The first element in all of the exports will be the subject
- $row_items[] = $content_fields['_feedback_subject'];
-
- // Loop the fields array in order to fill the $row_items array correctly
- foreach ( $fields as $field ) {
- if ( $field === __( 'Contact Form', 'jetpack' ) ) { // the first field will ever be the contact form, so we can continue
- continue;
- } elseif ( array_key_exists( $field, $all_fields ) ) {
- $row_items[] = $all_fields[ $field ];
- } else {
- $row_items[] = '';
- }
- }
-
- return $row_items;
- }
-
- public static function get_ip_address() {
- return isset( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : null;
- }
-}
-
-/**
- * Generic shortcode class.
- * Does nothing other than store structured data and output the shortcode as a string
- *
- * Not very general - specific to Grunion.
- */
-class Crunion_Contact_Form_Shortcode {
- /**
- * @var string the name of the shortcode: [$shortcode_name /]
- */
- public $shortcode_name;
-
- /**
- * @var array key => value pairs for the shortcode's attributes: [$shortcode_name key="value" ... /]
- */
- public $attributes;
-
- /**
- * @var array key => value pair for attribute defaults
- */
- public $defaults = array();
-
- /**
- * @var null|string Null for selfclosing shortcodes. Hhe inner content of otherwise: [$shortcode_name]$content[/$shortcode_name]
- */
- public $content;
-
- /**
- * @var array Associative array of inner "child" shortcodes equivalent to the $content: [$shortcode_name][child 1/][child 2/][/$shortcode_name]
- */
- public $fields;
-
- /**
- * @var null|string The HTML of the parsed inner "child" shortcodes". Null for selfclosing shortcodes.
- */
- public $body;
-
- /**
- * @param array $attributes An associative array of shortcode attributes. @see shortcode_atts()
- * @param null|string $content Null for selfclosing shortcodes. The inner content otherwise.
- */
- function __construct( $attributes, $content = null ) {
- $this->attributes = $this->unesc_attr( $attributes );
- if ( is_array( $content ) ) {
- $string_content = '';
- foreach ( $content as $field ) {
- $string_content .= (string) $field;
- }
-
- $this->content = $string_content;
- } else {
- $this->content = $content;
- }
-
- $this->parse_content( $this->content );
- }
-
- /**
- * Processes the shortcode's inner content for "child" shortcodes
- *
- * @param string $content The shortcode's inner content: [shortcode]$content[/shortcode]
- */
- function parse_content( $content ) {
- if ( is_null( $content ) ) {
- $this->body = null;
- }
-
- $this->body = do_shortcode( $content );
- }
-
- /**
- * Returns the value of the requested attribute.
- *
- * @param string $key The attribute to retrieve
- * @return mixed
- */
- function get_attribute( $key ) {
- return isset( $this->attributes[ $key ] ) ? $this->attributes[ $key ] : null;
- }
-
- function esc_attr( $value ) {
- if ( is_array( $value ) ) {
- return array_map( array( $this, 'esc_attr' ), $value );
- }
-
- $value = Grunion_Contact_Form_Plugin::strip_tags( $value );
- $value = _wp_specialchars( $value, ENT_QUOTES, false, true );
-
- // Shortcode attributes can't contain "]"
- $value = str_replace( ']', '', $value );
- $value = str_replace( ',', '&#x002c;', $value ); // store commas encoded
- $value = strtr(
- $value, array(
- '%' => '%25',
- '&' => '%26',
- )
- );
-
- // shortcode_parse_atts() does stripcslashes()
- $value = addslashes( $value );
- return $value;
- }
-
- function unesc_attr( $value ) {
- if ( is_array( $value ) ) {
- return array_map( array( $this, 'unesc_attr' ), $value );
- }
-
- // For back-compat with old Grunion encoding
- // Also, unencode commas
- $value = strtr(
- $value, array(
- '%26' => '&',
- '%25' => '%',
- )
- );
- $value = preg_replace( array( '/&#x0*22;/i', '/&#x0*27;/i', '/&#x0*26;/i', '/&#x0*2c;/i' ), array( '"', "'", '&', ',' ), $value );
- $value = htmlspecialchars_decode( $value, ENT_QUOTES );
- $value = Grunion_Contact_Form_Plugin::strip_tags( $value );
-
- return $value;
- }
-
- /**
- * Generates the shortcode
- */
- function __toString() {
- $r = "[{$this->shortcode_name} ";
-
- foreach ( $this->attributes as $key => $value ) {
- if ( ! $value ) {
- continue;
- }
-
- if ( isset( $this->defaults[ $key ] ) && $this->defaults[ $key ] == $value ) {
- continue;
- }
-
- if ( 'id' == $key ) {
- continue;
- }
-
- $value = $this->esc_attr( $value );
-
- if ( is_array( $value ) ) {
- $value = join( ',', $value );
- }
-
- if ( false === strpos( $value, "'" ) ) {
- $value = "'$value'";
- } elseif ( false === strpos( $value, '"' ) ) {
- $value = '"' . $value . '"';
- } else {
- // Shortcodes can't contain both '"' and "'". Strip one.
- $value = str_replace( "'", '', $value );
- $value = "'$value'";
- }
-
- $r .= "{$key}={$value} ";
- }
-
- $r = rtrim( $r );
-
- if ( $this->fields ) {
- $r .= ']';
-
- foreach ( $this->fields as $field ) {
- $r .= (string) $field;
- }
-
- $r .= "[/{$this->shortcode_name}]";
- } else {
- $r .= '/]';
- }
-
- return $r;
- }
-}
-
-/**
- * Class for the contact-form shortcode.
- * Parses shortcode to output the contact form as HTML
- * Sends email and stores the contact form response (a.k.a. "feedback")
- */
-class Grunion_Contact_Form extends Crunion_Contact_Form_Shortcode {
- public $shortcode_name = 'contact-form';
-
- /**
- * @var WP_Error stores form submission errors
- */
- public $errors;
-
- /**
- * @var string The SHA1 hash of the attributes that comprise the form.
- */
- public $hash;
-
- /**
- * @var Grunion_Contact_Form The most recent (inclusive) contact-form shortcode processed
- */
- static $last;
-
- /**
- * @var Whatever form we are currently looking at. If processed, will become $last
- */
- static $current_form;
-
- /**
- * @var array All found forms, indexed by hash.
- */
- static $forms = array();
-
- /**
- * @var bool Whether to print the grunion.css style when processing the contact-form shortcode
- */
- static $style = false;
-
- /**
- * @var array When printing the submit button, what tags are allowed
- */
- static $allowed_html_tags_for_submit_button = array( 'br' => array() );
-
- function __construct( $attributes, $content = null ) {
- global $post;
-
- $this->hash = sha1( json_encode( $attributes ) . $content );
- self::$forms[ $this->hash ] = $this;
-
- // Set up the default subject and recipient for this form
- $default_to = '';
- $default_subject = '[' . get_option( 'blogname' ) . ']';
-
- if ( ! isset( $attributes ) || ! is_array( $attributes ) ) {
- $attributes = array();
- }
-
- if ( ! empty( $attributes['widget'] ) && $attributes['widget'] ) {
- $default_to .= get_option( 'admin_email' );
- $attributes['id'] = 'widget-' . $attributes['widget'];
- $default_subject = sprintf( _x( '%1$s Sidebar', '%1$s = blog name', 'jetpack' ), $default_subject );
- } elseif ( $post ) {
- $attributes['id'] = $post->ID;
- $default_subject = sprintf( _x( '%1$s %2$s', '%1$s = blog name, %2$s = post title', 'jetpack' ), $default_subject, Grunion_Contact_Form_Plugin::strip_tags( $post->post_title ) );
- $post_author = get_userdata( $post->post_author );
- $default_to .= $post_author->user_email;
- }
-
- // Keep reference to $this for parsing form fields
- self::$current_form = $this;
-
- $this->defaults = array(
- 'to' => $default_to,
- 'subject' => $default_subject,
- 'show_subject' => 'no', // only used in back-compat mode
- 'widget' => 0, // Not exposed to the user. Works with Grunion_Contact_Form_Plugin::widget_atts()
- 'id' => null, // Not exposed to the user. Set above.
- 'submit_button_text' => __( 'Submit', 'jetpack' ),
- );
-
- $attributes = shortcode_atts( $this->defaults, $attributes, 'contact-form' );
-
- // We only enable the contact-field shortcode temporarily while processing the contact-form shortcode
- Grunion_Contact_Form_Plugin::$using_contact_form_field = true;
-
- parent::__construct( $attributes, $content );
-
- // There were no fields in the contact form. The form was probably just [contact-form /]. Build a default form.
- if ( empty( $this->fields ) ) {
- // same as the original Grunion v1 form
- $default_form = '
- [contact-field label="' . __( 'Name', 'jetpack' ) . '" type="name" required="true" /]
- [contact-field label="' . __( 'Email', 'jetpack' ) . '" type="email" required="true" /]
- [contact-field label="' . __( 'Website', 'jetpack' ) . '" type="url" /]';
-
- if ( 'yes' == strtolower( $this->get_attribute( 'show_subject' ) ) ) {
- $default_form .= '
- [contact-field label="' . __( 'Subject', 'jetpack' ) . '" type="subject" /]';
- }
-
- $default_form .= '
- [contact-field label="' . __( 'Message', 'jetpack' ) . '" type="textarea" /]';
-
- $this->parse_content( $default_form );
-
- // Store the shortcode
- $this->store_shortcode( $default_form, $attributes, $this->hash );
- } else {
- // Store the shortcode
- $this->store_shortcode( $content, $attributes, $this->hash );
- }
-
- // $this->body and $this->fields have been setup. We no longer need the contact-field shortcode.
- Grunion_Contact_Form_Plugin::$using_contact_form_field = false;
- }
-
- /**
- * Store shortcode content for recall later
- * - used to receate shortcode when user uses do_shortcode
- *
- * @param string $content
- * @param array $attributes
- * @param string $hash
- */
- static function store_shortcode( $content = null, $attributes = null, $hash = null ) {
-
- if ( $content != null and isset( $attributes['id'] ) ) {
-
- if ( empty( $hash ) ) {
- $hash = sha1( json_encode( $attributes ) . $content );
- }
-
- $shortcode_meta = get_post_meta( $attributes['id'], "_g_feedback_shortcode_{$hash}", true );
-
- if ( $shortcode_meta != '' or $shortcode_meta != $content ) {
- update_post_meta( $attributes['id'], "_g_feedback_shortcode_{$hash}", $content );
-
- // Save attributes to post_meta for later use. They're not available later in do_shortcode situations.
- update_post_meta( $attributes['id'], "_g_feedback_shortcode_atts_{$hash}", $attributes );
- }
- }
- }
-
- /**
- * Toggle for printing the grunion.css stylesheet
- *
- * @param bool $style
- */
- static function style( $style ) {
- $previous_style = self::$style;
- self::$style = (bool) $style;
- return $previous_style;
- }
-
- /**
- * Turn on printing of grunion.css stylesheet
- *
- * @see ::style()
- * @internal
- * @param bool $style
- */
- static function _style_on() {
- return self::style( true );
- }
-
- /**
- * The contact-form shortcode processor
- *
- * @param array $attributes Key => Value pairs as parsed by shortcode_parse_atts()
- * @param string|null $content The shortcode's inner content: [contact-form]$content[/contact-form]
- * @return string HTML for the concat form.
- */
- static function parse( $attributes, $content ) {
- require_once JETPACK__PLUGIN_DIR . '/sync/class.jetpack-sync-settings.php';
- if ( Jetpack_Sync_Settings::is_syncing() ) {
- return '';
- }
- // Create a new Grunion_Contact_Form object (this class)
- $form = new Grunion_Contact_Form( $attributes, $content );
-
- $id = $form->get_attribute( 'id' );
-
- if ( ! $id ) { // something terrible has happened
- return '[contact-form]';
- }
-
- if ( is_feed() ) {
- return '[contact-form]';
- }
-
- self::$last = $form;
-
- // Enqueue the grunion.css stylesheet if self::$style allows it
- if ( self::$style && ( empty( $_REQUEST['action'] ) || $_REQUEST['action'] != 'grunion_shortcode_to_json' ) ) {
- // Enqueue the style here instead of printing it, because if some other plugin has run the_post()+rewind_posts(),
- // (like VideoPress does), the style tag gets "printed" the first time and discarded, leaving the contact form unstyled.
- // when WordPress does the real loop.
- wp_enqueue_style( 'grunion.css' );
- }
-
- $r = '';
- $r .= "<div id='contact-form-$id'>\n";
-
- if ( is_wp_error( $form->errors ) && $form->errors->get_error_codes() ) {
- // There are errors. Display them
- $r .= "<div class='form-error'>\n<h3>" . __( 'Error!', 'jetpack' ) . "</h3>\n<ul class='form-errors'>\n";
- foreach ( $form->errors->get_error_messages() as $message ) {
- $r .= "\t<li class='form-error-message'>" . esc_html( $message ) . "</li>\n";
- }
- $r .= "</ul>\n</div>\n\n";
- }
-
- if ( isset( $_GET['contact-form-id'] )
- && $_GET['contact-form-id'] == self::$last->get_attribute( 'id' )
- && isset( $_GET['contact-form-sent'], $_GET['contact-form-hash'] )
- && hash_equals( $form->hash, $_GET['contact-form-hash'] ) ) {
- // The contact form was submitted. Show the success message/results
- $feedback_id = (int) $_GET['contact-form-sent'];
-
- $back_url = remove_query_arg( array( 'contact-form-id', 'contact-form-sent', '_wpnonce' ) );
-
- $r_success_message =
- '<h3>' . __( 'Message Sent', 'jetpack' ) .
- ' (<a href="' . esc_url( $back_url ) . '">' . esc_html__( 'go back', 'jetpack' ) . '</a>)' .
- "</h3>\n\n";
-
- // Don't show the feedback details unless the nonce matches
- if ( $feedback_id && wp_verify_nonce( stripslashes( $_GET['_wpnonce'] ), "contact-form-sent-{$feedback_id}" ) ) {
- $r_success_message .= self::success_message( $feedback_id, $form );
- }
-
- /**
- * Filter the message returned after a successful contact form submission.
- *
- * @module contact-form
- *
- * @since 1.3.1
- *
- * @param string $r_success_message Success message.
- */
- $r .= apply_filters( 'grunion_contact_form_success_message', $r_success_message );
- } else {
- // Nothing special - show the normal contact form
- if ( $form->get_attribute( 'widget' ) ) {
- // Submit form to the current URL
- $url = remove_query_arg( array( 'contact-form-id', 'contact-form-sent', 'action', '_wpnonce' ) );
- } else {
- // Submit form to the post permalink
- $url = get_permalink();
- }
-
- // For SSL/TLS page. See RFC 3986 Section 4.2
- $url = set_url_scheme( $url );
-
- // May eventually want to send this to admin-post.php...
- /**
- * Filter the contact form action URL.
- *
- * @module contact-form
- *
- * @since 1.3.1
- *
- * @param string $contact_form_id Contact form post URL.
- * @param $post $GLOBALS['post'] Post global variable.
- * @param int $id Contact Form ID.
- */
- $url = apply_filters( 'grunion_contact_form_form_action', "{$url}#contact-form-{$id}", $GLOBALS['post'], $id );
-
- $r .= "<form action='" . esc_url( $url ) . "' method='post' class='contact-form commentsblock'>\n";
- $r .= $form->body;
- $r .= "\t<p class='contact-submit'>\n";
-
- $gutenberg_submit_button_classes = '';
- if ( ! empty( $attributes['submitButtonClasses'] ) ) {
- $gutenberg_submit_button_classes = ' ' . $attributes['submitButtonClasses'];
- }
-
- /**
- * Filter the contact form submit button class attribute.
- *
- * @module contact-form
- *
- * @since 6.6.0
- *
- * @param string $class Additional CSS classes for button attribute.
- */
- $submit_button_class = apply_filters( 'jetpack_contact_form_submit_button_class', 'pushbutton-wide' . $gutenberg_submit_button_classes );
-
- $submit_button_styles = '';
- if ( ! empty( $attributes['customBackgroundButtonColor'] ) ) {
- $submit_button_styles .= 'background-color: ' . $attributes['customBackgroundButtonColor'] . '; ';
- }
- if ( ! empty( $attributes['customTextButtonColor'] ) ) {
- $submit_button_styles .= 'color: ' . $attributes['customTextButtonColor'] . ';';
- }
- if ( ! empty( $attributes['submitButtonText'] ) ) {
- $submit_button_text = $attributes['submitButtonText'];
- } else {
- $submit_button_text = $form->get_attribute( 'submit_button_text' );
- }
-
- $r .= "\t\t<button type='submit' class='" . esc_attr( $submit_button_class ) . "'";
- if ( ! empty( $submit_button_styles ) ) {
- $r .= " style='" . esc_attr( $submit_button_styles ) . "'";
- }
- $r .= ">";
- $r .= wp_kses(
- $submit_button_text,
- self::$allowed_html_tags_for_submit_button
- ) . "</button>";
-
- if ( is_user_logged_in() ) {
- $r .= "\t\t" . wp_nonce_field( 'contact-form_' . $id, '_wpnonce', true, false ) . "\n"; // nonce and referer
- }
- $r .= "\t\t<input type='hidden' name='contact-form-id' value='$id' />\n";
- $r .= "\t\t<input type='hidden' name='action' value='grunion-contact-form' />\n";
- $r .= "\t\t<input type='hidden' name='contact-form-hash' value='" . esc_attr( $form->hash ) . "' />\n";
- $r .= "\t</p>\n";
- $r .= "</form>\n";
- }
-
- $r .= '</div>';
-
- return $r;
- }
-
- /**
- * Returns a success message to be returned if the form is sent via AJAX.
- *
- * @param int $feedback_id
- * @param object Grunion_Contact_Form $form
- *
- * @return string $message
- */
- static function success_message( $feedback_id, $form ) {
- return wp_kses(
- '<blockquote class="contact-form-submission">'
- . '<p>' . join( self::get_compiled_form( $feedback_id, $form ), '</p><p>' ) . '</p>'
- . '</blockquote>',
- array(
- 'br' => array(),
- 'blockquote' => array( 'class' => array() ),
- 'p' => array(),
- )
- );
- }
-
- /**
- * Returns a compiled form with labels and values in a form of an array
- * of lines.
- *
- * @param int $feedback_id
- * @param object Grunion_Contact_Form $form
- *
- * @return array $lines
- */
- static function get_compiled_form( $feedback_id, $form ) {
- $feedback = get_post( $feedback_id );
- $field_ids = $form->get_field_ids();
- $content_fields = Grunion_Contact_Form_Plugin::parse_fields_from_content( $feedback_id );
-
- // Maps field_ids to post_meta keys
- $field_value_map = array(
- 'name' => 'author',
- 'email' => 'author_email',
- 'url' => 'author_url',
- 'subject' => 'subject',
- 'textarea' => false, // not a post_meta key. This is stored in post_content
- );
-
- $compiled_form = array();
-
- // "Standard" field whitelist
- foreach ( $field_value_map as $type => $meta_key ) {
- if ( isset( $field_ids[ $type ] ) ) {
- $field = $form->fields[ $field_ids[ $type ] ];
-
- if ( $meta_key ) {
- if ( isset( $content_fields[ "_feedback_{$meta_key}" ] ) ) {
- $value = $content_fields[ "_feedback_{$meta_key}" ];
- }
- } else {
- // The feedback content is stored as the first "half" of post_content
- $value = $feedback->post_content;
- list( $value ) = explode( '<!--more-->', $value );
- $value = trim( $value );
- }
-
- $field_index = array_search( $field_ids[ $type ], $field_ids['all'] );
- $compiled_form[ $field_index ] = sprintf(
- '<b>%1$s:</b> %2$s<br /><br />',
- wp_kses( $field->get_attribute( 'label' ), array() ),
- self::escape_and_sanitize_field_value( $value )
- );
- }
- }
-
- // "Non-standard" fields
- if ( $field_ids['extra'] ) {
- // array indexed by field label (not field id)
- $extra_fields = get_post_meta( $feedback_id, '_feedback_extra_fields', true );
-
- /**
- * Only get data for the compiled form if `$extra_fields` is a valid and non-empty array.
- */
- if ( is_array( $extra_fields ) && ! empty( $extra_fields ) ) {
-
- $extra_field_keys = array_keys( $extra_fields );
-
- $i = 0;
- foreach ( $field_ids['extra'] as $field_id ) {
- $field = $form->fields[ $field_id ];
- $field_index = array_search( $field_id, $field_ids['all'] );
-
- $label = $field->get_attribute( 'label' );
-
- $compiled_form[ $field_index ] = sprintf(
- '<b>%1$s:</b> %2$s<br /><br />',
- wp_kses( $label, array() ),
- self::escape_and_sanitize_field_value( $extra_fields[ $extra_field_keys[ $i ] ] )
- );
-
- $i++;
- }
- }
- }
-
- // Sorting lines by the field index
- ksort( $compiled_form );
-
- return $compiled_form;
- }
-
- static function escape_and_sanitize_field_value( $value ) {
- $value = str_replace( array( '[' , ']' ) , array( '&#91;' , '&#93;' ) , $value );
- return nl2br( wp_kses( $value, array() ) );
- }
-
- /**
- * Only strip out empty string values and keep all the other values as they are.
- *
- * @param $single_value
- *
- * @return bool
- */
- static function remove_empty( $single_value ) {
- return ( $single_value !== '' );
- }
-
- /**
- * The contact-field shortcode processor
- * We use an object method here instead of a static Grunion_Contact_Form_Field class method to parse contact-field shortcodes so that we can tie them to the contact-form object.
- *
- * @param array $attributes Key => Value pairs as parsed by shortcode_parse_atts()
- * @param string|null $content The shortcode's inner content: [contact-field]$content[/contact-field]
- * @return HTML for the contact form field
- */
- static function parse_contact_field( $attributes, $content ) {
- // Don't try to parse contact form fields if not inside a contact form
- if ( ! Grunion_Contact_Form_Plugin::$using_contact_form_field ) {
- $att_strs = array();
- if ( ! isset( $attributes['label'] ) ) {
- $type = isset( $attributes['type'] ) ? $attributes['type'] : null;
- $attributes['label'] = self::get_default_label_from_type( $type );
- }
- foreach ( $attributes as $att => $val ) {
- if ( is_numeric( $att ) ) { // Is a valueless attribute
- $att_strs[] = esc_html( $val );
- } elseif ( isset( $val ) ) { // A regular attr - value pair
- if ( ( $att === 'options' || $att === 'values' ) && is_string( $val ) ) { // remove any empty strings
- $val = explode( ',', $val );
- }
- if ( is_array( $val ) ) {
- $val = array_filter( $val, array( __CLASS__, 'remove_empty' ) ); // removes any empty strings
- $att_strs[] = esc_html( $att ) . '="' . implode( ',', array_map( 'esc_html', $val ) ) . '"';
- } elseif ( is_bool( $val ) ) {
- $att_strs[] = esc_html( $att ) . '="' . esc_html( $val ? '1' : '' ) . '"';
- } else {
- $att_strs[] = esc_html( $att ) . '="' . esc_html( $val ) . '"';
- }
- }
- }
-
- $html = '[contact-field ' . implode( ' ', $att_strs );
-
- if ( isset( $content ) && ! empty( $content ) ) { // If there is content, let's add a closing tag
- $html .= ']' . esc_html( $content ) . '[/contact-field]';
- } else { // Otherwise let's add a closing slash in the first tag
- $html .= '/]';
- }
-
- return $html;
- }
-
- $form = Grunion_Contact_Form::$current_form;
-
- $field = new Grunion_Contact_Form_Field( $attributes, $content, $form );
-
- $field_id = $field->get_attribute( 'id' );
- if ( $field_id ) {
- $form->fields[ $field_id ] = $field;
- } else {
- $form->fields[] = $field;
- }
-
- if (
- isset( $_POST['action'] ) && 'grunion-contact-form' === $_POST['action']
- &&
- isset( $_POST['contact-form-id'] ) && $form->get_attribute( 'id' ) == $_POST['contact-form-id']
- &&
- isset( $_POST['contact-form-hash'] ) && hash_equals( $form->hash, $_POST['contact-form-hash'] )
- ) {
- // If we're processing a POST submission for this contact form, validate the field value so we can show errors as necessary.
- $field->validate();
- }
-
- // Output HTML
- return $field->render();
- }
-
- static function get_default_label_from_type( $type ) {
- switch ( $type ) {
- case 'text':
- return __( 'Text', 'jetpack' );
- case 'name':
- return __( 'Name', 'jetpack' );
- case 'email':
- return __( 'Email', 'jetpack' );
- case 'url':
- return __( 'Website', 'jetpack' );
- case 'date':
- return __( 'Date', 'jetpack' );
- case 'telephone':
- return __( 'Phone', 'jetpack' );
- case 'textarea':
- return __( 'Message', 'jetpack' );
- case 'checkbox':
- return __( 'Checkbox', 'jetpack' );
- case 'checkbox-multiple':
- return __( 'Choose several', 'jetpack' );
- case 'radio':
- return __( 'Choose one', 'jetpack' );
- case 'select':
- return __( 'Select one', 'jetpack' );
- default:
- return null;
- }
- }
-
- /**
- * Loops through $this->fields to generate a (structured) list of field IDs.
- *
- * Important: Currently the whitelisted fields are defined as follows:
- * `name`, `email`, `url`, `subject`, `textarea`
- *
- * If you need to add new fields to the Contact Form, please don't add them
- * to the whitelisted fields and leave them as extra fields.
- *
- * The reasoning behind this is that both the admin Feedback view and the CSV
- * export will not include any fields that are added to the list of
- * whitelisted fields without taking proper care to add them to all the
- * other places where they accessed/used/saved.
- *
- * The safest way to add new fields is to add them to the dropdown and the
- * HTML list ( @see Grunion_Contact_Form_Field::render ) and don't add them
- * to the list of whitelisted fields. This way they will become a part of the
- * `extra fields` which are saved in the post meta and will be properly
- * handled by the admin Feedback view and the CSV Export without any extra
- * work.
- *
- * If there is need to add a field to the whitelisted fields, then please
- * take proper care to add logic to handle the field in the following places:
- *
- * - Below in the switch statement - so the field is recognized as whitelisted.
- *
- * - Grunion_Contact_Form::process_submission - validation and logic.
- *
- * - Grunion_Contact_Form::process_submission - add the field as an additional
- * field in the `post_content` when saving the feedback content.
- *
- * - Grunion_Contact_Form_Plugin::parse_fields_from_content - add mapping
- * for the field, defined in the above method.
- *
- * - Grunion_Contact_Form_Plugin::map_parsed_field_contents_of_post_to_field_names -
- * add mapping of the field for the CSV Export. Otherwise it will be missing
- * from the exported data.
- *
- * - admin.php / grunion_manage_post_columns - add the field to the render logic.
- * Otherwise it will be missing from the admin Feedback view.
- *
- * @return array
- */
- function get_field_ids() {
- $field_ids = array(
- 'all' => array(), // array of all field_ids
- 'extra' => array(), // array of all non-whitelisted field IDs
-
- // Whitelisted "standard" field IDs:
- // 'email' => field_id,
- // 'name' => field_id,
- // 'url' => field_id,
- // 'subject' => field_id,
- // 'textarea' => field_id,
- );
-
- foreach ( $this->fields as $id => $field ) {
- $field_ids['all'][] = $id;
-
- $type = $field->get_attribute( 'type' );
- if ( isset( $field_ids[ $type ] ) ) {
- // This type of field is already present in our whitelist of "standard" fields for this form
- // Put it in extra
- $field_ids['extra'][] = $id;
- continue;
- }
-
- /**
- * See method description before modifying the switch cases.
- */
- switch ( $type ) {
- case 'email':
- case 'name':
- case 'url':
- case 'subject':
- case 'textarea':
- $field_ids[ $type ] = $id;
- break;
- default:
- // Put everything else in extra
- $field_ids['extra'][] = $id;
- }
- }
-
- return $field_ids;
- }
-
- /**
- * Process the contact form's POST submission
- * Stores feedback. Sends email.
- */
- function process_submission() {
- global $post;
-
- $plugin = Grunion_Contact_Form_Plugin::init();
-
- $id = $this->get_attribute( 'id' );
- $to = $this->get_attribute( 'to' );
- $widget = $this->get_attribute( 'widget' );
-
- $contact_form_subject = $this->get_attribute( 'subject' );
-
- $to = str_replace( ' ', '', $to );
- $emails = explode( ',', $to );
-
- $valid_emails = array();
-
- foreach ( (array) $emails as $email ) {
- if ( ! is_email( $email ) ) {
- continue;
- }
-
- if ( function_exists( 'is_email_address_unsafe' ) && is_email_address_unsafe( $email ) ) {
- continue;
- }
-
- $valid_emails[] = $email;
- }
-
- // No one to send it to, which means none of the "to" attributes are valid emails.
- // Use default email instead.
- if ( ! $valid_emails ) {
- $valid_emails = $this->defaults['to'];
- }
-
- $to = $valid_emails;
-
- // Last ditch effort to set a recipient if somehow none have been set.
- if ( empty( $to ) ) {
- $to = get_option( 'admin_email' );
- }
-
- // Make sure we're processing the form we think we're processing... probably a redundant check.
- if ( $widget ) {
- if ( 'widget-' . $widget != $_POST['contact-form-id'] ) {
- return false;
- }
- } else {
- if ( $post->ID != $_POST['contact-form-id'] ) {
- return false;
- }
- }
-
- $field_ids = $this->get_field_ids();
-
- // Initialize all these "standard" fields to null
- $comment_author_email = $comment_author_email_label = // v
- $comment_author = $comment_author_label = // v
- $comment_author_url = $comment_author_url_label = // v
- $comment_content = $comment_content_label = null;
-
- // For each of the "standard" fields, grab their field label and value.
- if ( isset( $field_ids['name'] ) ) {
- $field = $this->fields[ $field_ids['name'] ];
- $comment_author = Grunion_Contact_Form_Plugin::strip_tags(
- stripslashes(
- /** This filter is already documented in core/wp-includes/comment-functions.php */
- apply_filters( 'pre_comment_author_name', addslashes( $field->value ) )
- )
- );
- $comment_author_label = Grunion_Contact_Form_Plugin::strip_tags( $field->get_attribute( 'label' ) );
- }
-
- if ( isset( $field_ids['email'] ) ) {
- $field = $this->fields[ $field_ids['email'] ];
- $comment_author_email = Grunion_Contact_Form_Plugin::strip_tags(
- stripslashes(
- /** This filter is already documented in core/wp-includes/comment-functions.php */
- apply_filters( 'pre_comment_author_email', addslashes( $field->value ) )
- )
- );
- $comment_author_email_label = Grunion_Contact_Form_Plugin::strip_tags( $field->get_attribute( 'label' ) );
- }
-
- if ( isset( $field_ids['url'] ) ) {
- $field = $this->fields[ $field_ids['url'] ];
- $comment_author_url = Grunion_Contact_Form_Plugin::strip_tags(
- stripslashes(
- /** This filter is already documented in core/wp-includes/comment-functions.php */
- apply_filters( 'pre_comment_author_url', addslashes( $field->value ) )
- )
- );
- if ( 'http://' == $comment_author_url ) {
- $comment_author_url = '';
- }
- $comment_author_url_label = Grunion_Contact_Form_Plugin::strip_tags( $field->get_attribute( 'label' ) );
- }
-
- if ( isset( $field_ids['textarea'] ) ) {
- $field = $this->fields[ $field_ids['textarea'] ];
- $comment_content = trim( Grunion_Contact_Form_Plugin::strip_tags( $field->value ) );
- $comment_content_label = Grunion_Contact_Form_Plugin::strip_tags( $field->get_attribute( 'label' ) );
- }
-
- if ( isset( $field_ids['subject'] ) ) {
- $field = $this->fields[ $field_ids['subject'] ];
- if ( $field->value ) {
- $contact_form_subject = Grunion_Contact_Form_Plugin::strip_tags( $field->value );
- }
- }
-
- $all_values = $extra_values = array();
- $i = 1; // Prefix counter for stored metadata
-
- // For all fields, grab label and value
- foreach ( $field_ids['all'] as $field_id ) {
- $field = $this->fields[ $field_id ];
- $label = $i . '_' . $field->get_attribute( 'label' );
- $value = $field->value;
-
- $all_values[ $label ] = $value;
- $i++; // Increment prefix counter for the next field
- }
-
- // For the "non-standard" fields, grab label and value
- // Extra fields have their prefix starting from count( $all_values ) + 1
- foreach ( $field_ids['extra'] as $field_id ) {
- $field = $this->fields[ $field_id ];
- $label = $i . '_' . $field->get_attribute( 'label' );
- $value = $field->value;
-
- if ( is_array( $value ) ) {
- $value = implode( ', ', $value );
- }
-
- $extra_values[ $label ] = $value;
- $i++; // Increment prefix counter for the next extra field
- }
-
- $contact_form_subject = trim( $contact_form_subject );
-
- $comment_author_IP = Grunion_Contact_Form_Plugin::get_ip_address();
-
- $vars = array( 'comment_author', 'comment_author_email', 'comment_author_url', 'contact_form_subject', 'comment_author_IP' );
- foreach ( $vars as $var ) {
- $$var = str_replace( array( "\n", "\r" ), '', $$var );
- }
-
- // Ensure that Akismet gets all of the relevant information from the contact form,
- // not just the textarea field and predetermined subject.
- $akismet_vars = compact( $vars );
- $akismet_vars['comment_content'] = $comment_content;
-
- foreach ( array_merge( $field_ids['all'], $field_ids['extra'] ) as $field_id ) {
- $field = $this->fields[ $field_id ];
-
- // Skip any fields that are just a choice from a pre-defined list. They wouldn't have any value
- // from a spam-filtering point of view.
- if ( in_array( $field->get_attribute( 'type' ), array( 'select', 'checkbox', 'checkbox-multiple', 'radio' ) ) ) {
- continue;
- }
-
- // Normalize the label into a slug.
- $field_slug = trim( // Strip all leading/trailing dashes.
- preg_replace( // Normalize everything to a-z0-9_-
- '/[^a-z0-9_]+/',
- '-',
- strtolower( $field->get_attribute( 'label' ) ) // Lowercase
- ),
- '-'
- );
-
- $field_value = ( is_array( $field->value ) ) ? trim( implode( ', ', $field->value ) ) : trim( $field->value );
-
- // Skip any values that are already in the array we're sending.
- if ( $field_value && in_array( $field_value, $akismet_vars ) ) {
- continue;
- }
-
- $akismet_vars[ 'contact_form_field_' . $field_slug ] = $field_value;
- }
-
- $spam = '';
- $akismet_values = $plugin->prepare_for_akismet( $akismet_vars );
-
- // Is it spam?
- /** This filter is already documented in modules/contact-form/admin.php */
- $is_spam = apply_filters( 'jetpack_contact_form_is_spam', false, $akismet_values );
- if ( is_wp_error( $is_spam ) ) { // WP_Error to abort
- return $is_spam; // abort
- } elseif ( $is_spam === true ) { // TRUE to flag a spam
- $spam = '***SPAM*** ';
- }
-
- if ( ! $comment_author ) {
- $comment_author = $comment_author_email;
- }
-
- /**
- * Filter the email where a submitted feedback is sent.
- *
- * @module contact-form
- *
- * @since 1.3.1
- *
- * @param string|array $to Array of valid email addresses, or single email address.
- */
- $to = (array) apply_filters( 'contact_form_to', $to );
- $reply_to_addr = $to[0]; // get just the address part before the name part is added
-
- foreach ( $to as $to_key => $to_value ) {
- $to[ $to_key ] = Grunion_Contact_Form_Plugin::strip_tags( $to_value );
- $to[ $to_key ] = self::add_name_to_address( $to_value );
- }
-
- $blog_url = parse_url( site_url() );
- $from_email_addr = 'wordpress@' . $blog_url['host'];
-
- if ( ! empty( $comment_author_email ) ) {
- $reply_to_addr = $comment_author_email;
- }
-
- $headers = 'From: "' . $comment_author . '" <' . $from_email_addr . ">\r\n" .
- 'Reply-To: "' . $comment_author . '" <' . $reply_to_addr . ">\r\n";
-
- // Build feedback reference
- $feedback_time = current_time( 'mysql' );
- $feedback_title = "{$comment_author} - {$feedback_time}";
- $feedback_id = md5( $feedback_title );
-
- $all_values = array_merge(
- $all_values, array(
- 'entry_title' => the_title_attribute( 'echo=0' ),
- 'entry_permalink' => esc_url( get_permalink( get_the_ID() ) ),
- 'feedback_id' => $feedback_id,
- )
- );
-
- /** This filter is already documented in modules/contact-form/admin.php */
- $subject = apply_filters( 'contact_form_subject', $contact_form_subject, $all_values );
- $url = $widget ? home_url( '/' ) : get_permalink( $post->ID );
-
- $date_time_format = _x( '%1$s \a\t %2$s', '{$date_format} \a\t {$time_format}', 'jetpack' );
- $date_time_format = sprintf( $date_time_format, get_option( 'date_format' ), get_option( 'time_format' ) );
- $time = date_i18n( $date_time_format, current_time( 'timestamp' ) );
-
- // keep a copy of the feedback as a custom post type
- $feedback_status = $is_spam === true ? 'spam' : 'publish';
-
- foreach ( (array) $akismet_values as $av_key => $av_value ) {
- $akismet_values[ $av_key ] = Grunion_Contact_Form_Plugin::strip_tags( $av_value );
- }
-
- foreach ( (array) $all_values as $all_key => $all_value ) {
- $all_values[ $all_key ] = Grunion_Contact_Form_Plugin::strip_tags( $all_value );
- }
-
- foreach ( (array) $extra_values as $ev_key => $ev_value ) {
- $extra_values[ $ev_key ] = Grunion_Contact_Form_Plugin::strip_tags( $ev_value );
- }
-
- /*
- We need to make sure that the post author is always zero for contact
- * form submissions. This prevents export/import from trying to create
- * new users based on form submissions from people who were logged in
- * at the time.
- *
- * Unfortunately wp_insert_post() tries very hard to make sure the post
- * author gets the currently logged in user id. That is how we ended up
- * with this work around. */
- add_filter( 'wp_insert_post_data', array( $plugin, 'insert_feedback_filter' ), 10, 2 );
-
- $post_id = wp_insert_post(
- array(
- 'post_date' => addslashes( $feedback_time ),
- 'post_type' => 'feedback',
- 'post_status' => addslashes( $feedback_status ),
- 'post_parent' => (int) $post->ID,
- 'post_title' => addslashes( wp_kses( $feedback_title, array() ) ),
- 'post_content' => addslashes( wp_kses( $comment_content . "\n<!--more-->\n" . "AUTHOR: {$comment_author}\nAUTHOR EMAIL: {$comment_author_email}\nAUTHOR URL: {$comment_author_url}\nSUBJECT: {$subject}\nIP: {$comment_author_IP}\n" . @print_r( $all_values, true ), array() ) ), // so that search will pick up this data
- 'post_name' => $feedback_id,
- )
- );
-
- // once insert has finished we don't need this filter any more
- remove_filter( 'wp_insert_post_data', array( $plugin, 'insert_feedback_filter' ), 10 );
-
- update_post_meta( $post_id, '_feedback_extra_fields', $this->addslashes_deep( $extra_values ) );
-
- if ( 'publish' == $feedback_status ) {
- // Increase count of unread feedback.
- $unread = get_option( 'feedback_unread_count', 0 ) + 1;
- update_option( 'feedback_unread_count', $unread );
- }
-
- if ( defined( 'AKISMET_VERSION' ) ) {
- update_post_meta( $post_id, '_feedback_akismet_values', $this->addslashes_deep( $akismet_values ) );
- }
-
- $message = self::get_compiled_form( $post_id, $this );
-
- array_push(
- $message,
- '<br />',
- '<hr />',
- __( 'Time:', 'jetpack' ) . ' ' . $time . '<br />',
- __( 'IP Address:', 'jetpack' ) . ' ' . $comment_author_IP . '<br />',
- __( 'Contact Form URL:', 'jetpack' ) . ' ' . $url . '<br />'
- );
-
- if ( is_user_logged_in() ) {
- array_push(
- $message,
- sprintf(
- '<p>' . __( 'Sent by a verified %s user.', 'jetpack' ) . '</p>',
- isset( $GLOBALS['current_site']->site_name ) && $GLOBALS['current_site']->site_name ?
- $GLOBALS['current_site']->site_name : '"' . get_option( 'blogname' ) . '"'
- )
- );
- } else {
- array_push( $message, '<p>' . __( 'Sent by an unverified visitor to your site.', 'jetpack' ) . '</p>' );
- }
-
- $message = join( $message, '' );
-
- /**
- * Filters the message sent via email after a successful form submission.
- *
- * @module contact-form
- *
- * @since 1.3.1
- *
- * @param string $message Feedback email message.
- */
- $message = apply_filters( 'contact_form_message', $message );
-
- // This is called after `contact_form_message`, in order to preserve back-compat
- $message = self::wrap_message_in_html_tags( $message );
-
- update_post_meta( $post_id, '_feedback_email', $this->addslashes_deep( compact( 'to', 'message' ) ) );
-
- /**
- * Fires right before the contact form message is sent via email to
- * the recipient specified in the contact form.
- *
- * @module contact-form
- *
- * @since 1.3.1
- *
- * @param integer $post_id Post contact form lives on
- * @param array $all_values Contact form fields
- * @param array $extra_values Contact form fields not included in $all_values
- */
- do_action( 'grunion_pre_message_sent', $post_id, $all_values, $extra_values );
-
- // schedule deletes of old spam feedbacks
- if ( ! wp_next_scheduled( 'grunion_scheduled_delete' ) ) {
- wp_schedule_event( time() + 250, 'daily', 'grunion_scheduled_delete' );
- }
-
- if (
- $is_spam !== true &&
- /**
- * Filter to choose whether an email should be sent after each successful contact form submission.
- *
- * @module contact-form
- *
- * @since 2.6.0
- *
- * @param bool true Should an email be sent after a form submission. Default to true.
- * @param int $post_id Post ID.
- */
- true === apply_filters( 'grunion_should_send_email', true, $post_id )
- ) {
- self::wp_mail( $to, "{$spam}{$subject}", $message, $headers );
- } elseif (
- true === $is_spam &&
- /**
- * Choose whether an email should be sent for each spam contact form submission.
- *
- * @module contact-form
- *
- * @since 1.3.1
- *
- * @param bool false Should an email be sent after a spam form submission. Default to false.
- */
- apply_filters( 'grunion_still_email_spam', false ) == true
- ) { // don't send spam by default. Filterable.
- self::wp_mail( $to, "{$spam}{$subject}", $message, $headers );
- }
-
- if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
- return self::success_message( $post_id, $this );
- }
-
- $redirect = wp_get_referer();
- if ( ! $redirect ) { // wp_get_referer() returns false if the referer is the same as the current page
- $redirect = $_SERVER['REQUEST_URI'];
- }
-
- $redirect = add_query_arg(
- urlencode_deep(
- array(
- 'contact-form-id' => $id,
- 'contact-form-sent' => $post_id,
- 'contact-form-hash' => $this->hash,
- '_wpnonce' => wp_create_nonce( "contact-form-sent-{$post_id}" ), // wp_nonce_url HTMLencodes :(
- )
- ), $redirect
- );
-
- /**
- * Filter the URL where the reader is redirected after submitting a form.
- *
- * @module contact-form
- *
- * @since 1.9.0
- *
- * @param string $redirect Post submission URL.
- * @param int $id Contact Form ID.
- * @param int $post_id Post ID.
- */
- $redirect = apply_filters( 'grunion_contact_form_redirect_url', $redirect, $id, $post_id );
-
- wp_safe_redirect( $redirect );
- exit;
- }
-
- /**
- * Wrapper for wp_mail() that enables HTML messages with text alternatives
- *
- * @param string|array $to Array or comma-separated list of email addresses to send message.
- * @param string $subject Email subject.
- * @param string $message Message contents.
- * @param string|array $headers Optional. Additional headers.
- * @param string|array $attachments Optional. Files to attach.
- *
- * @return bool Whether the email contents were sent successfully.
- */
- public static function wp_mail( $to, $subject, $message, $headers = '', $attachments = array() ) {
- add_filter( 'wp_mail_content_type', __CLASS__ . '::get_mail_content_type' );
- add_action( 'phpmailer_init', __CLASS__ . '::add_plain_text_alternative' );
-
- $result = wp_mail( $to, $subject, $message, $headers, $attachments );
-
- remove_filter( 'wp_mail_content_type', __CLASS__ . '::get_mail_content_type' );
- remove_action( 'phpmailer_init', __CLASS__ . '::add_plain_text_alternative' );
-
- return $result;
- }
-
- /**
- * Add a display name part to an email address
- *
- * SpamAssassin doesn't like addresses in HTML messages that are missing display names (e.g., `foo@bar.org`
- * instead of `"Foo Bar" <foo@bar.org>`.
- *
- * @param string $address
- *
- * @return string
- */
- function add_name_to_address( $address ) {
- // If it's just the address, without a display name
- if ( is_email( $address ) ) {
- $address_parts = explode( '@', $address );
- $address = sprintf( '"%s" <%s>', $address_parts[0], $address );
- }
-
- return $address;
- }
-
- /**
- * Get the content type that should be assigned to outbound emails
- *
- * @return string
- */
- static function get_mail_content_type() {
- return 'text/html';
- }
-
- /**
- * Wrap a message body with the appropriate in HTML tags
- *
- * This helps to ensure correct parsing by clients, and also helps avoid triggering spam filtering rules
- *
- * @param string $body
- *
- * @return string
- */
- static function wrap_message_in_html_tags( $body ) {
- // Don't do anything if the message was already wrapped in HTML tags
- // That could have be done by a plugin via filters
- if ( false !== strpos( $body, '<html' ) ) {
- return $body;
- }
-
- $html_message = sprintf(
- // The tabs are just here so that the raw code is correctly formatted for developers
- // They're removed so that they don't affect the final message sent to users
- str_replace(
- "\t", '',
- '<!doctype html>
- <html xmlns="http://www.w3.org/1999/xhtml">
- <body>
-
- %s
-
- </body>
- </html>'
- ),
- $body
- );
-
- return $html_message;
- }
-
- /**
- * Add a plain-text alternative part to an outbound email
- *
- * This makes the message more accessible to mail clients that aren't HTML-aware, and decreases the likelihood
- * that the message will be flagged as spam.
- *
- * @param PHPMailer $phpmailer
- */
- static function add_plain_text_alternative( $phpmailer ) {
- // Add an extra break so that the extra space above the <p> is preserved after the <p> is stripped out
- $alt_body = str_replace( '<p>', '<p><br />', $phpmailer->Body );
-
- // Convert <br> to \n breaks, to preserve the space between lines that we want to keep
- $alt_body = str_replace( array( '<br>', '<br />' ), "\n", $alt_body );
-
- // Convert <hr> to an plain-text equivalent, to preserve the integrity of the message
- $alt_body = str_replace( array( '<hr>', '<hr />' ), "----\n", $alt_body );
-
- // Trim the plain text message to remove the \n breaks that were after <doctype>, <html>, and <body>
- $phpmailer->AltBody = trim( strip_tags( $alt_body ) );
- }
-
- function addslashes_deep( $value ) {
- if ( is_array( $value ) ) {
- return array_map( array( $this, 'addslashes_deep' ), $value );
- } elseif ( is_object( $value ) ) {
- $vars = get_object_vars( $value );
- foreach ( $vars as $key => $data ) {
- $value->{$key} = $this->addslashes_deep( $data );
- }
- return $value;
- }
-
- return addslashes( $value );
- }
-}
-
-/**
- * Class for the contact-field shortcode.
- * Parses shortcode to output the contact form field as HTML.
- * Validates input.
- */
-class Grunion_Contact_Form_Field extends Crunion_Contact_Form_Shortcode {
- public $shortcode_name = 'contact-field';
-
- /**
- * @var Grunion_Contact_Form parent form
- */
- public $form;
-
- /**
- * @var string default or POSTed value
- */
- public $value;
-
- /**
- * @var bool Is the input invalid?
- */
- public $error = false;
-
- /**
- * @param array $attributes An associative array of shortcode attributes. @see shortcode_atts()
- * @param null|string $content Null for selfclosing shortcodes. The inner content otherwise.
- * @param Grunion_Contact_Form $form The parent form
- */
- function __construct( $attributes, $content = null, $form = null ) {
- $attributes = shortcode_atts(
- array(
- 'label' => null,
- 'type' => 'text',
- 'required' => false,
- 'options' => array(),
- 'id' => null,
- 'default' => null,
- 'values' => null,
- 'placeholder' => null,
- 'class' => null,
- ), $attributes, 'contact-field'
- );
-
- // special default for subject field
- if ( 'subject' == $attributes['type'] && is_null( $attributes['default'] ) && ! is_null( $form ) ) {
- $attributes['default'] = $form->get_attribute( 'subject' );
- }
-
- // allow required=1 or required=true
- if ( '1' == $attributes['required'] || 'true' == strtolower( $attributes['required'] ) ) {
- $attributes['required'] = true;
- } else {
- $attributes['required'] = false;
- }
-
- // parse out comma-separated options list (for selects, radios, and checkbox-multiples)
- if ( ! empty( $attributes['options'] ) && is_string( $attributes['options'] ) ) {
- $attributes['options'] = array_map( 'trim', explode( ',', $attributes['options'] ) );
-
- if ( ! empty( $attributes['values'] ) && is_string( $attributes['values'] ) ) {
- $attributes['values'] = array_map( 'trim', explode( ',', $attributes['values'] ) );
- }
- }
-
- if ( $form ) {
- // make a unique field ID based on the label, with an incrementing number if needed to avoid clashes
- $form_id = $form->get_attribute( 'id' );
- $id = isset( $attributes['id'] ) ? $attributes['id'] : false;
-
- $unescaped_label = $this->unesc_attr( $attributes['label'] );
- $unescaped_label = str_replace( '%', '-', $unescaped_label ); // jQuery doesn't like % in IDs?
- $unescaped_label = preg_replace( '/[^a-zA-Z0-9.-_:]/', '', $unescaped_label );
-
- if ( empty( $id ) ) {
- $id = sanitize_title_with_dashes( 'g' . $form_id . '-' . $unescaped_label );
- $i = 0;
- $max_tries = 99;
- while ( isset( $form->fields[ $id ] ) ) {
- $i++;
- $id = sanitize_title_with_dashes( 'g' . $form_id . '-' . $unescaped_label . '-' . $i );
-
- if ( $i > $max_tries ) {
- break;
- }
- }
- }
-
- $attributes['id'] = $id;
- }
-
- parent::__construct( $attributes, $content );
-
- // Store parent form
- $this->form = $form;
- }
-
- /**
- * This field's input is invalid. Flag as invalid and add an error to the parent form
- *
- * @param string $message The error message to display on the form.
- */
- function add_error( $message ) {
- $this->is_error = true;
-
- if ( ! is_wp_error( $this->form->errors ) ) {
- $this->form->errors = new WP_Error;
- }
-
- $this->form->errors->add( $this->get_attribute( 'id' ), $message );
- }
-
- /**
- * Is the field input invalid?
- *
- * @see $error
- *
- * @return bool
- */
- function is_error() {
- return $this->error;
- }
-
- /**
- * Validates the form input
- */
- function validate() {
- // If it's not required, there's nothing to validate
- if ( ! $this->get_attribute( 'required' ) ) {
- return;
- }
-
- $field_id = $this->get_attribute( 'id' );
- $field_type = $this->get_attribute( 'type' );
- $field_label = $this->get_attribute( 'label' );
-
- if ( isset( $_POST[ $field_id ] ) ) {
- if ( is_array( $_POST[ $field_id ] ) ) {
- $field_value = array_map( 'stripslashes', $_POST[ $field_id ] );
- } else {
- $field_value = stripslashes( $_POST[ $field_id ] );
- }
- } else {
- $field_value = '';
- }
-
- switch ( $field_type ) {
- case 'email':
- // Make sure the email address is valid
- if ( ! is_email( $field_value ) ) {
- /* translators: %s is the name of a form field */
- $this->add_error( sprintf( __( '%s requires a valid email address', 'jetpack' ), $field_label ) );
- }
- break;
- case 'checkbox-multiple':
- // Check that there is at least one option selected
- if ( empty( $field_value ) ) {
- /* translators: %s is the name of a form field */
- $this->add_error( sprintf( __( '%s requires at least one selection', 'jetpack' ), $field_label ) );
- }
- break;
- default:
- // Just check for presence of any text
- if ( ! strlen( trim( $field_value ) ) ) {
- /* translators: %s is the name of a form field */
- $this->add_error( sprintf( __( '%s is required', 'jetpack' ), $field_label ) );
- }
- }
- }
-
-
- /**
- * Check the default value for options field
- *
- * @param string value
- * @param int index
- * @param string default value
- *
- * @return string
- */
- public function get_option_value( $value, $index, $options ) {
- if ( empty( $value[ $index ] ) ) {
- return $options;
- }
- return $value[ $index ];
- }
-
- /**
- * Outputs the HTML for this form field
- *
- * @return string HTML
- */
- function render() {
- global $current_user, $user_identity;
-
- $field_id = $this->get_attribute( 'id' );
- $field_type = $this->get_attribute( 'type' );
- $field_label = $this->get_attribute( 'label' );
- $field_required = $this->get_attribute( 'required' );
- $field_placeholder = $this->get_attribute( 'placeholder' );
- $class = 'date' === $field_type ? 'jp-contact-form-date' : $this->get_attribute( 'class' );
-
- /**
- * Filters the "class" attribute of the contact form input
- *
- * @module contact-form
- *
- * @since 6.6.0
- *
- * @param string $class Additional CSS classes for input class attribute.
- */
- $field_class = apply_filters( 'jetpack_contact_form_input_class', $class );
-
- if ( isset( $_POST[ $field_id ] ) ) {
- if ( is_array( $_POST[ $field_id ] ) ) {
- $this->value = array_map( 'stripslashes', $_POST[ $field_id ] );
- } else {
- $this->value = stripslashes( (string) $_POST[ $field_id ] );
- }
- } elseif ( isset( $_GET[ $field_id ] ) ) {
- $this->value = stripslashes( (string) $_GET[ $field_id ] );
- } elseif (
- is_user_logged_in() &&
- ( ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ||
- /**
- * Allow third-party tools to prefill the contact form with the user's details when they're logged in.
- *
- * @module contact-form
- *
- * @since 3.2.0
- *
- * @param bool false Should the Contact Form be prefilled with your details when you're logged in. Default to false.
- */
- true === apply_filters( 'jetpack_auto_fill_logged_in_user', false )
- )
- ) {
- // Special defaults for logged-in users
- switch ( $this->get_attribute( 'type' ) ) {
- case 'email':
- $this->value = $current_user->data->user_email;
- break;
- case 'name':
- $this->value = $user_identity;
- break;
- case 'url':
- $this->value = $current_user->data->user_url;
- break;
- default:
- $this->value = $this->get_attribute( 'default' );
- }
- } else {
- $this->value = $this->get_attribute( 'default' );
- }
-
- $field_value = Grunion_Contact_Form_Plugin::strip_tags( $this->value );
- $field_label = Grunion_Contact_Form_Plugin::strip_tags( $field_label );
-
- $rendered_field = $this->render_field( $field_type, $field_id, $field_label, $field_value, $field_class, $field_placeholder, $field_required );
-
- /**
- * Filter the HTML of the Contact Form.
- *
- * @module contact-form
- *
- * @since 2.6.0
- *
- * @param string $rendered_field Contact Form HTML output.
- * @param string $field_label Field label.
- * @param int|null $id Post ID.
- */
- return apply_filters( 'grunion_contact_form_field_html', $rendered_field, $field_label, ( in_the_loop() ? get_the_ID() : null ) );
- }
-
- function render_label( $type = '', $id, $label, $required, $required_field_text ) {
-
- $type_class = $type ? ' ' .$type : '';
- return
- "<label
- for='" . esc_attr( $id ) . "'
- class='grunion-field-label{$type_class}" . ( $this->is_error() ? ' form-error' : '' ) . "'
- >"
- . esc_html( $label )
- . ( $required ? '<span>' . $required_field_text . '</span>' : '' )
- . "</label>\n";
-
- }
-
- function render_input_field( $type, $id, $value, $class, $placeholder, $required ) {
- return "<input
- type='". esc_attr( $type ) ."'
- name='" . esc_attr( $id ) . "'
- id='" . esc_attr( $id ) . "'
- value='" . esc_attr( $value ) . "'
- " . $class . $placeholder . '
- ' . ( $required ? "required aria-required='true'" : '' ) . "
- />\n";
- }
-
- function render_email_field( $id, $label, $value, $class, $required, $required_field_text, $placeholder ) {
- $field = $this->render_label( 'email', $id, $label, $required, $required_field_text );
- $field .= $this->render_input_field( 'email', $id, $value, $class, $placeholder, $required );
- return $field;
- }
-
- function render_telephone_field( $id, $label, $value, $class, $required, $required_field_text, $placeholder ) {
- $field = $this->render_label( 'telephone', $id, $label, $required, $required_field_text );
- $field .= $this->render_input_field( 'tel', $id, $value, $class, $placeholder, $required );
- return $field;
- }
-
- function render_url_field( $id, $label, $value, $class, $required, $required_field_text, $placeholder ) {
- $field = $this->render_label( 'url', $id, $label, $required, $required_field_text );
- $field .= $this->render_input_field( 'url', $id, $value, $class, $placeholder, $required );
- return $field;
- }
-
- function render_textarea_field( $id, $label, $value, $class, $required, $required_field_text, $placeholder ) {
- $field = $this->render_label( 'textarea', 'contact-form-comment-' . $id, $label, $required, $required_field_text );
- $field .= "<textarea
- name='" . esc_attr( $id ) . "'
- id='contact-form-comment-" . esc_attr( $id ) . "'
- rows='20' "
- . $class
- . $placeholder
- . ' ' . ( $required ? "required aria-required='true'" : '' ) .
- '>' . esc_textarea( $value )
- . "</textarea>\n";
- return $field;
- }
-
- function render_radio_field( $id, $label, $value, $class, $required, $required_field_text ) {
- $field = $this->render_label( '', $id, $label, $required, $required_field_text );
- foreach ( (array) $this->get_attribute( 'options' ) as $optionIndex => $option ) {
- $option = Grunion_Contact_Form_Plugin::strip_tags( $option );
- if ( $option ) {
- $field .= "\t\t<label class='grunion-radio-label radio" . ( $this->is_error() ? ' form-error' : '' ) . "'>";
- $field .= "<input
- type='radio'
- name='" . esc_attr( $id ) . "'
- value='" . esc_attr( $this->get_option_value( $this->get_attribute( 'values' ), $optionIndex, $option ) ) . "' "
- . $class
- . checked( $option, $value, false ) . ' '
- . ( $required ? "required aria-required='true'" : '' )
- . '/> ';
- $field .= esc_html( $option ) . "</label>\n";
- $field .= "\t\t<div class='clear-form'></div>\n";
- }
- }
- return $field;
- }
-
- function render_checkbox_field( $id, $label, $value, $class, $required, $required_field_text ) {
- $field = "<label class='grunion-field-label checkbox" . ( $this->is_error() ? ' form-error' : '' ) . "'>";
- $field .= "\t\t<input type='checkbox' name='" . esc_attr( $id ) . "' value='" . esc_attr__( 'Yes', 'jetpack' ) . "' " . $class . checked( (bool) $value, true, false ) . ' ' . ( $required ? "required aria-required='true'" : '' ) . "/> \n";
- $field .= "\t\t" . esc_html( $label ) . ( $required ? '<span>' . $required_field_text . '</span>' : '' );
- $field .= "</label>\n";
- $field .= "<div class='clear-form'></div>\n";
- return $field;
- }
-
- function render_checkbox_multiple_field( $id, $label, $value, $class, $required, $required_field_text ) {
- $field = $this->render_label( '', $id, $label, $required, $required_field_text );
- foreach ( (array) $this->get_attribute( 'options' ) as $optionIndex => $option ) {
- $option = Grunion_Contact_Form_Plugin::strip_tags( $option );
- if ( $option ) {
- $field .= "\t\t<label class='grunion-checkbox-multiple-label checkbox-multiple" . ( $this->is_error() ? ' form-error' : '' ) . "'>";
- $field .= "<input type='checkbox' name='" . esc_attr( $id ) . "[]' value='" . esc_attr( $this->get_option_value( $this->get_attribute( 'values' ), $optionIndex, $option ) ) . "' " . $class . checked( in_array( $option, (array) $value ), true, false ) . ' /> ';
- $field .= esc_html( $option ) . "</label>\n";
- $field .= "\t\t<div class='clear-form'></div>\n";
- }
- }
-
- return $field;
- }
-
- function render_select_field( $id, $label, $value, $class, $required, $required_field_text ) {
- $field = $this->render_label( 'select', $id, $label, $required, $required_field_text );
- $field .= "\t<select name='" . esc_attr( $id ) . "' id='" . esc_attr( $id ) . "' " . $class . ( $required ? "required aria-required='true'" : '' ) . ">\n";
- foreach ( (array) $this->get_attribute( 'options' ) as $optionIndex => $option ) {
- $option = Grunion_Contact_Form_Plugin::strip_tags( $option );
- if ( $option ) {
- $field .= "\t\t<option"
- . selected( $option, $value, false )
- . " value='" . esc_attr( $this->get_option_value( $this->get_attribute( 'values' ), $optionIndex, $option ) )
- . "'>" . esc_html( $option )
- . "</option>\n";
- }
- }
- $field .= "\t</select>\n";
- return $field;
- }
-
- function render_date_field( $id, $label, $value, $class, $required, $required_field_text, $placeholder ) {
- $field = $this->render_label( 'date', $id, $label, $required, $required_field_text );
- $field .= $this->render_input_field( 'text', $id, $value, $class, $placeholder, $required );
-
- wp_enqueue_script(
- 'grunion-frontend',
- Jetpack::get_file_url_for_environment(
- '_inc/build/contact-form/js/grunion-frontend.min.js',
- 'modules/contact-form/js/grunion-frontend.js'
- ),
- array( 'jquery', 'jquery-ui-datepicker' )
- );
- wp_enqueue_style( 'jp-jquery-ui-datepicker', plugins_url( 'css/jquery-ui-datepicker.css', __FILE__ ), array( 'dashicons' ), '1.0' );
-
- // Using Core's built-in datepicker localization routine
- wp_localize_jquery_ui_datepicker();
- return $field;
- }
-
- function render_default_field( $id, $label, $value, $class, $required, $required_field_text, $placeholder, $type ) {
- $field = $this->render_label( $type, $id, $label, $required, $required_field_text );
- $field .= $this->render_input_field( 'text', $id, $value, $class, $placeholder, $required );
- return $field;
- }
-
- function render_field( $type, $id, $label, $value, $class, $placeholder, $required ) {
- $field_placeholder = ( ! empty( $placeholder ) ) ? "placeholder='" . esc_attr( $placeholder ) . "'" : '';
- $field_class = "class='" . trim( esc_attr( $type ) . ' ' . esc_attr( $class ) ) . "' ";
- $wrap_classes = empty( $class ) ? '' : implode( '-wrap ', array_filter( explode( ' ', $class ) ) ) . '-wrap'; // this adds
-
- $shell_field_class = "class='grunion-field-wrap grunion-field-" . trim( esc_attr( $type ) . '-wrap ' . esc_attr( $wrap_classes ) ) . "' ";
- /**
- /**
- * Filter the Contact Form required field text
- *
- * @module contact-form
- *
- * @since 3.8.0
- *
- * @param string $var Required field text. Default is "(required)".
- */
- $required_field_text = esc_html( apply_filters( 'jetpack_required_field_text', __( '(required)', 'jetpack' ) ) );
-
- $field = "\n<div {$shell_field_class} >\n"; // new in Jetpack 6.8.0
- switch ( $type ) {
- case 'email':
- $field .= $this->render_email_field( $id, $label, $value, $field_class, $required, $required_field_text, $field_placeholder );
- break;
- case 'telephone':
- $field .= $this->render_telephone_field( $id, $label, $value, $field_class, $required, $required_field_text, $field_placeholder );
- break;
- case 'url':
- $field .= $this->render_url_field( $id, $label, $value, $field_class, $required, $required_field_text, $field_placeholder );
- break;
- case 'textarea':
- $field .= $this->render_textarea_field( $id, $label, $value, $field_class, $required, $required_field_text, $field_placeholder );
- break;
- case 'radio':
- $field .= $this->render_radio_field( $id, $label, $value, $field_class, $required, $required_field_text, $field_placeholder );
- break;
- case 'checkbox':
- $field .= $this->render_checkbox_field( $id, $label, $value, $field_class, $required, $required_field_text );
- break;
- case 'checkbox-multiple':
- $field .= $this->render_checkbox_multiple_field( $id, $label, $value, $field_class, $required, $required_field_text );
- break;
- case 'select':
- $field .= $this->render_select_field( $id, $label, $value, $field_class, $required, $required_field_text );
- break;
- case 'date':
- $field .= $this->render_date_field( $id, $label, $value, $field_class, $required, $required_field_text, $field_placeholder );
- break;
- default: // text field
- $field .= $this->render_default_field( $id, $label, $value, $field_class, $required, $required_field_text, $field_placeholder, $type );
- break;
- }
- $field .= "\t</div>\n";
- return $field;
- }
-}
-
-add_action( 'init', array( 'Grunion_Contact_Form_Plugin', 'init' ), 9 );
-
-add_action( 'grunion_scheduled_delete', 'grunion_delete_old_spam' );
-
-/**
- * Deletes old spam feedbacks to keep the posts table size under control
- */
-function grunion_delete_old_spam() {
- global $wpdb;
-
- $grunion_delete_limit = 100;
-
- $now_gmt = current_time( 'mysql', 1 );
- $sql = $wpdb->prepare(
- "
- SELECT `ID`
- FROM $wpdb->posts
- WHERE DATE_SUB( %s, INTERVAL 15 DAY ) > `post_date_gmt`
- AND `post_type` = 'feedback'
- AND `post_status` = 'spam'
- LIMIT %d
- ", $now_gmt, $grunion_delete_limit
- );
- $post_ids = $wpdb->get_col( $sql );
-
- foreach ( (array) $post_ids as $post_id ) {
- // force a full delete, skip the trash
- wp_delete_post( $post_id, true );
- }
-
- if (
- /**
- * Filter if the module run OPTIMIZE TABLE on the core WP tables.
- *
- * @module contact-form
- *
- * @since 1.3.1
- * @since 6.4.0 Set to false by default.
- *
- * @param bool $filter Should Jetpack optimize the table, defaults to false.
- */
- apply_filters( 'grunion_optimize_table', false )
- ) {
- $wpdb->query( "OPTIMIZE TABLE $wpdb->posts" );
- }
-
- // if we hit the max then schedule another run
- if ( count( $post_ids ) >= $grunion_delete_limit ) {
- wp_schedule_single_event( time() + 700, 'grunion_scheduled_delete' );
- }
-}
diff --git a/plugins/jetpack/modules/contact-form/grunion-editor-view.php b/plugins/jetpack/modules/contact-form/grunion-editor-view.php
deleted file mode 100644
index d1ba0439..00000000
--- a/plugins/jetpack/modules/contact-form/grunion-editor-view.php
+++ /dev/null
@@ -1,299 +0,0 @@
-<?php
-
-/*
- * A prototype to allow inline editing / editor views for contact forms.\
- *
- * Originally developed in: http://github.com/automattic/gm2016-grunion-editor
- * Authors: Michael Arestad, Andrew Ozz, and George Stephanis
- */
-
-class Grunion_Editor_View {
-
- /**
- * Add hooks according to screen.
- *
- * @param WP_Screen $screen Data about current screen.
- */
- public static function add_hooks( $screen ) {
- if ( isset( $screen->base ) && 'post' === $screen->base ) {
- add_action( 'admin_notices', array( __CLASS__, 'handle_editor_view_js' ) );
- add_action( 'admin_head', array( __CLASS__, 'admin_head' ) );
- }
- }
-
- public static function admin_head() {
- remove_action( 'media_buttons', 'grunion_media_button', 999 );
- add_action( 'media_buttons', array( __CLASS__, 'grunion_media_button' ), 999 );
- }
-
- public static function grunion_media_button() {
- $title = __( 'Add Contact Form', 'jetpack' );
- ?>
-
- <button type="button" id="insert-jetpack-contact-form" class="button" title="<?php echo esc_attr( $title ); ?>" href="javascript:;">
- <span class="jetpack-contact-form-icon"></span>
- <?php echo esc_html( $title ); ?>
- </button>
-
- <?php
- }
-
- public static function mce_external_plugins( $plugin_array ) {
- $plugin_array['grunion_form'] = Jetpack::get_file_url_for_environment(
- '_inc/build/contact-form/js/tinymce-plugin-form-button.min.js',
- 'modules/contact-form/js/tinymce-plugin-form-button.js'
- );
- return $plugin_array;
- }
-
- public static function mce_buttons( $buttons ) {
- $size = sizeof( $buttons );
- $buttons1 = array_slice( $buttons, 0, $size - 1 );
- $buttons2 = array_slice( $buttons, $size - 1 );
- return array_merge(
- $buttons1,
- array( 'grunion' ),
- $buttons2
- );
- }
-
- /**
- * WordPress Shortcode Editor View JS Code
- */
- public static function handle_editor_view_js() {
- add_action( 'admin_print_footer_scripts', array( __CLASS__, 'editor_view_js_templates' ), 1 );
- add_filter( 'mce_external_plugins', array( __CLASS__, 'mce_external_plugins' ) );
- add_filter( 'mce_buttons', array( __CLASS__, 'mce_buttons' ) );
-
- wp_enqueue_style( 'grunion-editor-ui', plugins_url( 'css/editor-ui.css', __FILE__ ) );
- wp_style_add_data( 'grunion-editor-ui', 'rtl', 'replace' );
- wp_enqueue_script(
- 'grunion-editor-view',
- Jetpack::get_file_url_for_environment(
- '_inc/build/contact-form/js/editor-view.min.js',
- 'modules/contact-form/js/editor-view.js'
- ),
- array( 'wp-util', 'jquery', 'quicktags' ),
- false,
- true
- );
- wp_localize_script(
- 'grunion-editor-view', 'grunionEditorView', array(
- 'inline_editing_style' => plugins_url( 'css/editor-inline-editing-style.css', __FILE__ ),
- 'inline_editing_style_rtl' => plugins_url( 'css/editor-inline-editing-style-rtl.css', __FILE__ ),
- 'dashicons_css_url' => includes_url( 'css/dashicons.css' ),
- 'default_form' => '[contact-field label="' . __( 'Name', 'jetpack' ) . '" type="name" required="true" /]' .
- '[contact-field label="' . __( 'Email', 'jetpack' ) . '" type="email" required="true" /]' .
- '[contact-field label="' . __( 'Website', 'jetpack' ) . '" type="url" /]' .
- '[contact-field label="' . __( 'Message', 'jetpack' ) . '" type="textarea" /]',
- 'labels' => array(
- 'submit_button_text' => __( 'Submit', 'jetpack' ),
- /** This filter is documented in modules/contact-form/grunion-contact-form.php */
- 'required_field_text' => apply_filters( 'jetpack_required_field_text', __( '(required)', 'jetpack' ) ),
- 'edit_close_ays' => __( 'Are you sure you\'d like to stop editing this form without saving your changes?', 'jetpack' ),
- 'quicktags_label' => __( 'contact form', 'jetpack' ),
- 'tinymce_label' => __( 'Add contact form', 'jetpack' ),
- ),
- )
- );
-
- add_editor_style( plugin_dir_url( __FILE__ ) . 'css/editor-style.css' );
- }
-
- /**
- * JS Templates.
- */
- public static function editor_view_js_templates() {
- ?>
-<script type="text/html" id="tmpl-grunion-contact-form">
- <form class="card jetpack-contact-form-shortcode-preview" action='#' method='post' class='contact-form commentsblock' onsubmit="return false;">
- {{{ data.body }}}
- <p class='contact-submit'>
- <input type='submit' value='{{ data.submit_button_text }}' class='pushbutton-wide'/>
- </p>
- </form>
-</script>
-
-<script type="text/html" id="tmpl-grunion-field-email">
- <div>
- <label for='{{ data.id }}' class='grunion-field-label email'>{{ data.label }}<# if ( data.required ) print( " <span>" + data.required + "</span>" ) #></label>
- <input type='email' name='{{ data.id }}' id='{{ data.id }}' value='{{ data.value }}' class='{{ data.class }}' placeholder='{{ data.placeholder }}' />
- </div>
-</script>
-
-<script type="text/html" id="tmpl-grunion-field-telephone">
- <div>
- <label for='{{ data.id }}' class='grunion-field-label telephone'>{{ data.label }}<# if ( data.required ) print( " <span>" + data.required + "</span>" ) #></label>
- <input type='tel' name='{{ data.id }}' id='{{ data.id }}' value='{{ data.value }}' class='{{ data.class }}' placeholder='{{ data.placeholder }}' />
- </div>
-</script>
-
-<script type="text/html" id="tmpl-grunion-field-textarea">
- <div>
- <label for='contact-form-comment-{{ data.id }}' class='grunion-field-label textarea'>{{ data.label }}<# if ( data.required ) print( " <span>" + data.required + "</span>" ) #></label>
- <textarea name='{{ data.id }}' id='contact-form-comment-{{ data.id }}' rows='20' class='{{ data.class }}' placeholder='{{ data.placeholder }}'>{{ data.value }}</textarea>
- </div>
-</script>
-
-<script type="text/html" id="tmpl-grunion-field-radio">
- <div>
- <label class='grunion-field-label'>{{ data.label }}<# if ( data.required ) print( " <span>" + data.required + "</span>" ) #></label>
- <# _.each( data.options, function( option ) { #>
- <label class='grunion-radio-label radio'>
- <input type='radio' name='{{ data.id }}' value='{{ option }}' class="{{ data.class }}" <# if ( option === data.value ) print( "checked='checked'" ) #> />
- <span>{{ option }}</span>
- </label>
- <# }); #>
- <div class='clear-form'></div>
- </div>
-</script>
-
-<script type="text/html" id="tmpl-grunion-field-checkbox">
- <div>
- <label class='grunion-field-label checkbox'>
- <input type='checkbox' name='{{ data.id }}' value='<?php esc_attr__( 'Yes', 'jetpack' ); ?>' class="{{ data.class }}" <# if ( data.value ) print( 'checked="checked"' ) #> />
- <span>{{ data.label }}</span><# if ( data.required ) print( " <span>" + data.required + "</span>" ) #>
- </label>
- <div class='clear-form'></div>
- </div>
-</script>
-
-<script type="text/html" id="tmpl-grunion-field-checkbox-multiple">
- <div>
- <label class='grunion-field-label'>{{ data.label }}<# if ( data.required ) print( " <span>" + data.required + "</span>" ) #></label>
- <# _.each( data.options, function( option ) { #>
- <label class='grunion-checkbox-multiple-label checkbox-multiple'>
- <input type='checkbox' name='{{ data.id }}[]' value='{{ option }}' class="{{ data.class }}" <# if ( option === data.value || _.contains( data.value, option ) ) print( "checked='checked'" ) #> />
- <span>{{ option }}</span>
- </label>
- <# }); #>
- <div class='clear-form'></div>
- </div>
-</script>
-
-<script type="text/html" id="tmpl-grunion-field-select">
- <div>
- <label for='{{ data.id }}' class='grunion-field-label select'>{{ data.label }}<# if ( data.required ) print( " <span>" + data.required + "</span>" ) #></label>
- <select name='{{ data.id }}' id='{{ data.id }}' class="{{ data.class }}">
- <# _.each( data.options, function( option ) { #>
- <option <# if ( option === data.value ) print( "selected='selected'" ) #>>{{ option }}</option>
- <# }); #>
- </select>
- </div>
-</script>
-
-<script type="text/html" id="tmpl-grunion-field-date">
- <div>
- <label for='{{ data.id }}' class='grunion-field-label {{ data.type }}'>{{ data.label }}<# if ( data.required ) print( " <span>" + data.required + "</span>" ) #></label>
- <input type='text' name='{{ data.id }}' id='{{ data.id }}' value='{{ data.value }}' class="{{ data.class }}" />
- </div>
-</script>
-
-<script type="text/html" id="tmpl-grunion-field-text">
- <div>
- <label for='{{ data.id }}' class='grunion-field-label {{ data.type }}'>{{ data.label }}<# if ( data.required ) print( " <span>" + data.required + "</span>" ) #></label>
- <input type='text' name='{{ data.id }}' id='{{ data.id }}' value='{{ data.value }}' class='{{ data.class }}' placeholder='{{ data.placeholder }}' />
- </div>
-</script>
-
-<script type="text/html" id="tmpl-grunion-field-url">
- <div>
- <label for='{{ data.id }}' class='grunion-field-label {{ data.type }}'>{{ data.label }}<# if ( data.required ) print( " <span>" + data.required + "</span>" ) #></label>
- <input type='url' name='{{ data.id }}' id='{{ data.id }}' value='{{ data.value }}' class='{{ data.class }}' placeholder='{{ data.placeholder }}' />
- </div>
-</script>
-
-
-<script type="text/html" id="tmpl-grunion-field-edit">
- <div class="card is-compact grunion-field-edit grunion-field-{{ data.type }}" aria-label="<?php esc_attr_e( 'Form Field', 'jetpack' ); ?>">
- <label class="grunion-name">
- <span><?php esc_html_e( 'Field Label', 'jetpack' ); ?></span>
- <input type="text" name="label" placeholder="<?php esc_attr_e( 'Label', 'jetpack' ); ?>" value="{{ data.label }}"/>
- </label>
-
- <?php
- $grunion_field_types = array(
- 'text' => __( 'Text', 'jetpack' ),
- 'name' => __( 'Name', 'jetpack' ),
- 'email' => __( 'Email', 'jetpack' ),
- 'url' => __( 'Website', 'jetpack' ),
- 'textarea' => __( 'Textarea', 'jetpack' ),
- 'checkbox' => __( 'Checkbox', 'jetpack' ),
- 'checkbox-multiple' => __( 'Checkbox with Multiple Items', 'jetpack' ),
- 'select' => __( 'Drop down', 'jetpack' ),
- 'radio' => __( 'Radio', 'jetpack' ),
- 'date' => __( 'Date', 'jetpack' ),
- );
- ?>
- <div class="grunion-type-options">
- <label class="grunion-type">
- <?php esc_html_e( 'Field Type', 'jetpack' ); ?>
- <select name="type">
- <?php foreach ( $grunion_field_types as $type => $label ) : ?>
- <option <# if ( '<?php echo esc_js( $type ); ?>' === data.type ) print( "selected='selected'" ) #> value="<?php echo esc_attr( $type ); ?>">
- <?php echo esc_html( $label ); ?>
- </option>
- <?php endforeach; ?>
- </select>
- </label>
-
- <label class="grunion-required">
- <input type="checkbox" name="required" value="1" <# if ( data.required ) print( 'checked="checked"' ) #> />
- <span><?php esc_html_e( 'Required?', 'jetpack' ); ?></span>
- </label>
- </div>
-
- <label class="grunion-options">
- <?php esc_html_e( 'Options', 'jetpack' ); ?>
- <ol>
- <# if ( data.options ) { #>
- <# _.each( data.options, function( option ) { #>
- <li><input type="text" name="option" value="{{ option }}" /> <a class="delete-option" href="javascript:;"><span class="screen-reader-text"><?php esc_html_e( 'Delete Option', 'jetpack' ); ?></span></a></li>
- <# }); #>
- <# } else { #>
- <li><input type="text" name="option" /> <a class="delete-option" href="javascript:;"><span class="screen-reader-text"><?php esc_html_e( 'Delete Option', 'jetpack' ); ?></span></a></li>
- <li><input type="text" name="option" /> <a class="delete-option" href="javascript:;"><span class="screen-reader-text"><?php esc_html_e( 'Delete Option', 'jetpack' ); ?></span></a></li>
- <li><input type="text" name="option" /> <a class="delete-option" href="javascript:;"><span class="screen-reader-text"><?php esc_html_e( 'Delete Option', 'jetpack' ); ?></span></a></li>
- <# } #>
- <li><a class="add-option" href="javascript:;"><?php esc_html_e( 'Add new option...', 'jetpack' ); ?></a></li>
- </ol>
- </label>
-
- <a href="javascript:;" class="delete-field"><span class="screen-reader-text"><?php esc_html_e( 'Delete Field', 'jetpack' ); ?></span></a>
- </div>
-</script>
-
-<script type="text/html" id="tmpl-grunion-field-edit-option">
- <li><input type="text" name="option" /> <a class="delete-option" href="javascript:;"><span class="screen-reader-text"><?php esc_html_e( 'Delete Option', 'jetpack' ); ?></span></a></li>
-</script>
-
-<script type="text/html" id="tmpl-grunion-editor-inline">
- <h1 id="form-settings-header" class="grunion-section-header"><?php esc_html_e( 'Contact form information', 'jetpack' ); ?></h1>
- <section class="card grunion-form-settings" aria-labelledby="form-settings-header">
- <label><?php esc_html_e( 'What would you like the subject of the email to be?', 'jetpack' ); ?>
- <input type="text" name="subject" value="{{ data.subject }}" />
- </label>
- <label><?php esc_html_e( 'Which email address should we send the submissions to?', 'jetpack' ); ?>
- <input type="text" name="to" value="{{ data.to }}" />
- </label>
- </section>
- <h1 id="form-fields-header" class="grunion-section-header"><?php esc_html_e( 'Contact form fields', 'jetpack' ); ?></h1>
- <section class="grunion-fields" aria-labelledby="form-fields-header">
- {{{ data.fields }}}
- </section>
- <section class="grunion-controls">
- <?php submit_button( esc_html__( 'Add Field', 'jetpack' ), 'secondary', 'add-field', false ); ?>
-
- <div class="grunion-update-controls">
- <?php submit_button( esc_html__( 'Cancel', 'jetpack' ), 'delete', 'cancel', false ); ?>
- <?php submit_button( esc_html__( 'Update Form', 'jetpack' ), 'primary', 'submit', false ); ?>
- </div>
- </section>
-</script>
-
-</div>
- <?php
- }
-}
-
-add_action( 'current_screen', array( 'Grunion_Editor_View', 'add_hooks' ) );
diff --git a/plugins/jetpack/modules/contact-form/grunion-form-view.php b/plugins/jetpack/modules/contact-form/grunion-form-view.php
deleted file mode 100644
index 26ed6dfe..00000000
--- a/plugins/jetpack/modules/contact-form/grunion-form-view.php
+++ /dev/null
@@ -1,266 +0,0 @@
-<?php
-/**
- * Template for form builder
- */
-
-/**
- * Filter to modify the limit of 5 additional contact form fields.
- *
- * @module contact-form
- *
- * @since 3.2.0
- *
- * @param int 5 Maximum number of additional fields.
- */
-$max_new_fields = apply_filters( 'grunion_max_new_fields', 5 );
-
-wp_register_script(
- 'grunion',
- Jetpack::get_file_url_for_environment(
- '_inc/build/contact-form/js/grunion.min.js',
- 'modules/contact-form/js/grunion.js'
- ),
- array( 'jquery-ui-sortable', 'jquery-ui-draggable' ),
- JETPACK__VERSION
-);
-
-wp_localize_script(
- 'grunion', 'GrunionFB_i18n', array(
- 'nameLabel' => esc_attr( _x( 'Name', 'Label for HTML form "Name" field in contact form builder', 'jetpack' ) ),
- 'emailLabel' => esc_attr( _x( 'Email', 'Label for HTML form "Email" field in contact form builder', 'jetpack' ) ),
- 'urlLabel' => esc_attr( _x( 'Website', 'Label for HTML form "URL/Website" field in contact form builder', 'jetpack' ) ),
- 'commentLabel' => esc_attr( _x( 'Comment', 'noun', 'jetpack' ) ),
- 'newLabel' => esc_attr( _x( 'New Field', 'Default label for new HTML form field in contact form builder', 'jetpack' ) ),
- 'optionsLabel' => esc_attr( _x( 'Options', 'Label for the set of options to be included in a user-created dropdown in contact form builder', 'jetpack' ) ),
- 'optionsLabel' => esc_attr( _x( 'Option', 'Label for an option to be included in a user-created dropdown in contact form builder', 'jetpack' ) ),
- 'firstOptionLabel' => esc_attr( _x( 'First option', 'Default label for the first option to be included in a user-created dropdown in contact form builder', 'jetpack' ) ),
- 'problemGeneratingForm' => esc_attr( _x( "Oops, there was a problem generating your form. You'll likely need to try again.", 'error message in contact form builder', 'jetpack' ) ),
- 'moveInstructions' => esc_attr__( "Drag up or down\nto re-arrange", 'jetpack' ),
- 'moveLabel' => esc_attr( _x( 'move', 'Label to drag HTML form fields around to change their order in contact form builder', 'jetpack' ) ),
- 'editLabel' => esc_attr( _x( 'edit', 'Link to edit an HTML form field in contact form builder', 'jetpack' ) ),
- 'savedMessage' => esc_attr__( 'Saved successfully', 'jetpack' ),
- 'requiredLabel' => esc_attr( _x( '(required)', 'This HTML form field is marked as required by the user in contact form builder', 'jetpack' ) ),
- 'exitConfirmMessage' => esc_attr__( 'Are you sure you want to exit the form editor without saving? Any changes you have made will be lost.', 'jetpack' ),
- 'maxNewFields' => intval( $max_new_fields ),
- )
-);
-
-?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title><?php esc_html_e( 'Contact Form', 'jetpack' ); ?></title>
-<script type="text/javascript">
- var ajaxurl = '<?php echo admin_url( 'admin-ajax.php' ); ?>';
- var postId = <?php echo absint( $_GET['post_id'] ); ?>;
- var ajax_nonce_shortcode = '<?php echo wp_create_nonce( 'grunion_shortcode' ); ?>';
- var ajax_nonce_json = '<?php echo wp_create_nonce( 'grunion_shortcode_to_json' ); ?>';
-</script>
-<?php wp_print_scripts( 'grunion' ); ?>
-<script type="text/javascript">
- jQuery(document).ready(function () {
- FB.ContactForm.init();
- FB.ContactForm.resizePop();
- });
- jQuery(window).resize(function() {
- setTimeout(function () { FB.ContactForm.resizePop(); }, 50);
- });
-</script>
-<style>
- /* Reset */
- html { height: 100%; }
- body, div, ul, ol, li, h1, h2, h3, h4, h5, h6, form, fieldset, legend, input, button, textarea, p, blockquote, th, td { margin: 0; padding: 0; }
- body { background: #F9F9F9; font-family:"Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif; font-size:12px; color: #333; line-height:1.5em; height: 100%; width: 100%; padding-bottom: 20px !important; }
- a { color: #21759B; text-decoration: none; }
- a:hover { text-decoration: underline; text-shadow: none !important; }
- h1 { font-size: 21px; color:#5A5A5A; font-family:Georgia,"Times New Roman",Times,serif; font-weight:normal; margin-bottom: 21px; }
- h3 { font-size: 13px; color: #666; margin-bottom: 18px; }
- input { width: 301px; }
- input[type='text'] { padding: 3px 5px; margin-right: 4px; -moz-border-radius:3px; border-radius:3px; -webkit-border-radius:3px; }
- input[type='text']:focus { border: 2px solid #80B8D9; outline: 0 !important; }
- input[type='checkbox'], input[type='radio'] { width: auto !important; float: left; margin-top: 3px; margin-right: 8px; }
- input.fieldError, select.fieldError, textarea.fieldError { border: 2px solid #D56F55; }
- img { border: none; }
- label { color: #222; font-weight: bold; display: block; margin-bottom: 4px; }
- label.radio { width: auto; margin: -2px 0 0 5px; }
- label span.label-required { color: #AAA; margin-left: 4px; font-weight: normal; }
- td { vertical-align: top; }
- select { width: 300px; }
- textarea { height: 100px; width: 311px; }
- /* Core */
- #media-upload-header { border-bottom: 1px solid #DFDFDF; font-weight:bold; margin:0; padding:3px 5px 0 5px; position:relative; background: #FFF; }
- #sidemenu { bottom:-1px; font-size:12px; list-style:none outside none; padding-left:10px; position:relative; left:0; margin:0 5px; overflow:hidden; }
- #sidemenu a { text-decoration:none; border-top: 1px solid #FFF; display:block; float:left; line-height:28px; padding:0 13px; outline: none; }
- #sidemenu a.current { background-color:#F9F9F9; border-color:#DFDFDF #DFDFDF #F9F9F9; color:#D54E21; -moz-border-radius:4px 4px 0 0; border-radius:4px 4px 0 0; -webkit-border-radius:4px 4px 0 0; border-style:solid; border-width:1px; font-weight:normal; }
- #sidemenu li { display:inline; margin-bottom:6px; line-height:200%; list-style:none outside none; margin:0; padding:0; text-align:center; white-space:nowrap; }
- .button { background-color:#f2f2f2; border-color:#BBBBBB; min-width:80px; text-align:center; color:#464646; text-shadow:0 1px 0 #FFFFFF; border-style:solid; border-width:1px; cursor:pointer; width: auto; font-size:11px !important; line-height:13px; padding:3px 11px; margin-top: 12px; text-decoration:none; -moz-border-radius:11px; border-radius:11px; -webkit-border-radius:11px }
- .button-primary { background-color:#21759B; font-weight: bold; border-color:#298CBA; text-align:center; color:#EAF2FA; text-shadow:0 -1px 0 rgba(0, 0, 0, 0.3); border-style:solid; border-width:1px; cursor:pointer; width: auto; font-size:11px !important; line-height:13px; padding:3px 11px; margin-top: 21px; text-decoration:none; -moz-border-radius:11px; border-radius:11px; -webkit-border-radius:11px }
- .clear { clear: both; }
- .fb-add-field { padding-left: 10px; }
- .fb-add-option { margin: 0 0 14px 100px; }
- .fb-container { margin: 21px; padding-bottom: 20px; }
- .fb-desc, #fb-add-field { margin-top: 34px; }
- .fb-extra-fields { margin-bottom: 2px; }
- .fb-form-case { background: #FFF; padding: 13px; border: 1px solid #E2E2E2; width: 336px; -moz-border-radius:4px; border-radius:4px; -webkit-border-radius:4px }
- .fb-form-case a { outline: none; }
- .fb-form-case input[type='text'], .fb-form-case textarea { background: #E1E1E1; }
- .fb-radio-label { display: inline-block; float: left; width: 290px; }
- .fb-new-fields { position: relative; border: 1px dashed #FFF; background: #FFF; padding: 4px 10px 10px; cursor: default; }
- .fb-new-fields:hover { border: 1px dashed #BBDBEA; background: #F7FBFD; }
- .fb-options { width: 170px !important; }
- .fb-remove { background: url('<?php echo GRUNION_PLUGIN_URL; ?>/images/grunion-remove-field.gif') no-repeat; position: absolute; cursor: pointer !important; right: -26px; top: 27px; width: 20px; height: 23px; }
- .fb-remove:hover { background: url('<?php echo GRUNION_PLUGIN_URL; ?>/images/grunion-remove-field-hover.gif') no-repeat; }
- .fb-remove-small { top: 2px !important; }
- .fb-remove-option { position: absolute; top: 1px; right: 10px; width: 20px; height: 23px; background: url('<?php echo GRUNION_PLUGIN_URL; ?>/images/grunion-remove-option.gif') no-repeat; }
- .fb-remove-option:hover { background: url('<?php echo GRUNION_PLUGIN_URL; ?>/images/grunion-remove-option-hover.gif') no-repeat; }
- .fb-reorder { cursor: move; position: relative; }
- .fb-reorder:hover div { display: block !important; width: 130px !important; position: absolute; top: 0; right: 0; z-index: 200; padding: 5px 10px; color: #555; font-size: 11px; background: #FFF; border: 1px solid #CCC; -moz-border-radius:4px; border-radius:4px; -webkit-border-radius:4px; }
- .fb-right { position: absolute; right: 0; top: 0; width: 315px; margin: 57px 21px 0 0; }
- .fb-right .fb-new-fields { border: none; background: #F9F9F9; padding: 0; }
- .fb-right input[type='text'] { width: 195px; margin-bottom: 14px; }
- .fb-right label { color: #444; width: 100px; float: left; font-weight: normal; }
- .fb-right select { width: 195px !important; margin-bottom: 14px; }
- .fb-right textarea { margin-bottom: 13px; }
- .fb-right p { color: #999; line-height: 19px; }
- .fb-settings input[type='text'], .fb-settings textarea { background-image: none !important; }
- .fb-success { position: absolute; top: -3px; right: 100px; padding: 6px 23px 4px 23px; background: #FFFFE0; font-weight: normal; border: 1px solid #E6DB55; color: #333; -moz-border-radius:4px; border-radius:4px; -webkit-border-radius:4px; }
- .right { float: right; }
- /* rtl */
- body.rtl{ direction: rtl; font-family:Tahoma,Arial,sans-serif}
- .rtl input[type='text'] { margin-left: 4px; margin-right: 0; }
- .rtl input[type='checkbox'], .rtl input[type='radio'] { float: right; }
- .rtl input[type='radio'] { margin-left: 8px; margin-right: 0; }
- .rtl label.radio { margin: -2px 5px 0 0; }
- .rtl label span.label-required { margin-right: 4px; margin-left:0 }
- .rtl #sidemenu { padding-right:10px; padding-left: 0; left:auto; right: 0; }
- .rtl #sidemenu a { float:right; }
- .rtl .fb-add-field { padding-right: 10px; padding-left: 0; }
- .rtl .fb-add-option { margin: 0 100px 14px 0; }
- .rtl .fb-radio-label { margin-right: 8px; margin-left: 0; float: right; }
- .rtl .fb-remove { right: auto; left: -26px; transform: scaleX(-1); }
- .rtl .fb-remove-option { right: auto; left: 10px; }
- .rtl .fb-reorder:hover div { left: 0; right: auto; }
- .rtl .fb-right { left: 0; right: auto; margin: 57px 0 0 21px; }
- .rtl .fb-right label { float: right; }
- .rtl .fb-success { right: auto; left: 100px;}
- .rtl .right { float: left; }
- @media only screen and (min--moz-device-pixel-ratio: 1.5), only screen and (-o-min-device-pixel-ratio: 3/2), only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5) {
- .fb-remove { background: url('<?php echo GRUNION_PLUGIN_URL; ?>/images/grunion-remove-field-2x.png') no-repeat; background-size: 20px 23px; }
- .fb-remove:hover { background: url('<?php echo GRUNION_PLUGIN_URL; ?>/images/grunion-remove-field-hover-2x.png') no-repeat; background-size: 20px 23px; }
- .fb-remove-option { background: url('<?php echo GRUNION_PLUGIN_URL; ?>/images/grunion-remove-option-2x.png') no-repeat; background-size: 20px 23px; }
- .fb-remove-option:hover { background: url('<?php echo GRUNION_PLUGIN_URL; ?>/images/grunion-remove-option-hover-2x.png') no-repeat; background-size: 20px 23px; }
- }
-</style>
-</head>
-
-<body
-<?php
-if ( is_rtl() ) {
- echo 'class="rtl"'; }
-?>
->
- <div id="media-upload-header">
- <div id="fb-success" class="fb-success" style="display: none;"><?php esc_html_e( 'Your new field was saved successfully', 'jetpack' ); ?></div>
- <ul id="sidemenu">
- <li id="tab-preview"><a class="current" href=""><?php esc_html_e( 'Form builder', 'jetpack' ); ?></a></li>
- <li id="tab-settings"><a href=""><?php esc_html_e( 'Email notifications', 'jetpack' ); ?></a></li>
- </ul>
- </div>
- <div class="fb-right">
- <div id="fb-desc" class="fb-desc">
- <h3><?php esc_html_e( 'How does this work?', 'jetpack' ); ?></h3>
- <p><?php esc_html_e( 'By adding a contact form, your readers will be able to submit feedback to you. All feedback is automatically scanned for spam, and the legitimate feedback will be emailed to you.', 'jetpack' ); ?></p>
- <h3 style="margin-top: 21px;"><?php esc_html_e( 'Can I add more fields?', 'jetpack' ); ?></h3>
- <p>
- <?php
- printf(
- esc_html( _x( 'Sure thing. %1$s to add a new text box, textarea, radio, checkbox, or dropdown field.', '%1$s = "Click here" in an HTML link', 'jetpack' ) ),
- '<a href="#" class="fb-add-field" style="padding-left: 0;">' . esc_html__( 'Click here', 'jetpack' ) . '</a>'
- );
- ?>
- </p>
- <h3 style="margin-top: 21px;"><?php esc_html_e( 'Can I view my feedback within WordPress?', 'jetpack' ); ?></h3>
- <p>
- <?php
- printf(
- esc_html( _x( 'Yep, you can read your feedback at any time by clicking the "%1$s" link in the admin menu.', '%1$s = "Feedback" in an HTML link', 'jetpack' ) ),
- '<a id="fb-feedback" href="' . admin_url( 'edit.php?post_type=feedback' ) . '">' . esc_html__( 'Feedback', 'jetpack' ) . '</a>'
- );
- ?>
- </p>
- <div class="clear"></div>
- </div>
- <div id="fb-email-desc" class="fb-desc" style="display: none;">
- <h3><?php esc_html_e( 'Do I need to fill this out?', 'jetpack' ); ?></h3>
- <p><?php esc_html_e( 'Nope. However, if you&#8217;d like to modify where your feedback is sent, or the subject line you can. If you don&#8217;t make any changes here, feedback will be sent to the author of the page/post and the subject will be the name of this page/post.', 'jetpack' ); ?></p>
- <h3 style="margin-top: 21px;"><?php esc_html_e( 'Can I send a notification to more than one person?', 'jetpack' ); ?></h3>
- <p><?php esc_html_e( 'Yep. You can enter multiple email addresses in the Email address field, and separate them with commas. A notification email will then be sent to each email address.', 'jetpack' ); ?></p>
- <div class="clear"></div>
- </div>
- <div id="fb-add-field" style="display: none;">
- <h3><?php esc_html_e( 'Edit this new field', 'jetpack' ); ?></h3>
-
- <label for="fb-new-label"><?php esc_html_e( 'Label', 'jetpack' ); ?></label>
- <input type="text" id="fb-new-label" value="<?php esc_attr_e( 'New field', 'jetpack' ); ?>" />
-
- <label for="fb-new-label"><?php esc_html_e( 'Field type', 'jetpack' ); ?></label>
- <select id="fb-new-type">
- <option value="checkbox"><?php esc_html_e( 'Checkbox', 'jetpack' ); ?></option>
- <option value="checkbox-multiple"><?php esc_html_e( 'Checkbox with Multiple Items', 'jetpack' ); ?></option>
- <option value="select"><?php esc_html_e( 'Drop down', 'jetpack' ); ?></option>
- <option value="email"><?php esc_html_e( 'Email', 'jetpack' ); ?></option>
- <option value="name"><?php esc_html_e( 'Name', 'jetpack' ); ?></option>
- <option value="radio"><?php esc_html_e( 'Radio', 'jetpack' ); ?></option>
- <option value="text" selected="selected"><?php esc_html_e( 'Text', 'jetpack' ); ?></option>
- <option value="textarea"><?php esc_html_e( 'Textarea', 'jetpack' ); ?></option>
- <option value="url"><?php esc_html_e( 'Website', 'jetpack' ); ?></option>
- </select>
- <div class="clear"></div>
-
- <div id="fb-options" style="display: none;">
- <div id="fb-new-options">
- <label for="fb-option0"><?php esc_html_e( 'Options', 'jetpack' ); ?></label>
- <input type="text" id="fb-option0" optionid="0" value="<?php esc_attr_e( 'First option', 'jetpack' ); ?>" class="fb-options" />
- </div>
- <div id="fb-add-option" class="fb-add-option">
- <a href="#" id="fb-another-option"><?php esc_html_e( 'Add another option', 'jetpack' ); ?></a>
- </div>
- </div>
-
- <div class="fb-required">
- <label for="fb-new-label"></label>
- <input type="checkbox" id="fb-new-required" />
- <label for="fb-new-label" class="fb-radio-label"><?php esc_html_e( 'Required?', 'jetpack' ); ?></label>
- <div class="clear"></div>
- </div>
-
- <input type="hidden" id="fb-field-id" />
- <input type="submit" class="button" value="<?php esc_attr_e( 'Save this field', 'jetpack' ); ?>" id="fb-save-field" name="save">
- </div>
- </div>
- <form id="fb-preview">
- <div id="fb-preview-form" class="fb-container">
- <h1><?php esc_html_e( 'Here&#8217;s what your form will look like', 'jetpack' ); ?></h1>
- <div id="sortable" class="fb-form-case">
-
- <div id="fb-extra-fields" class="fb-extra-fields"></div>
-
- <a href="#" id="fb-new-field" class="fb-add-field"><?php esc_html_e( 'Add a new field', 'jetpack' ); ?></a>
- </div>
- <input type="submit" class="button-primary" tabindex="4" value="<?php esc_attr_e( 'Add this form to my post', 'jetpack' ); ?>" id="fb-save-form" name="save">
- </div>
- <div id="fb-email-settings" class="fb-container" style="display: none;">
- <h1><?php esc_html_e( 'Email settings', 'jetpack' ); ?></h1>
- <div class="fb-form-case fb-settings">
- <label for="fb-fieldname"><?php esc_html_e( 'Enter your email address', 'jetpack' ); ?></label>
- <input type="text" id="fb-field-my-email" style="background: #FFF !important;" />
-
- <label for="fb-fieldemail" style="margin-top: 14px;"><?php esc_html_e( 'What should the subject line be?', 'jetpack' ); ?></label>
- <input type="text" id="fb-field-subject" style="background: #FFF !important;" />
- </div>
- <input type="submit" class="button-primary" value="<?php esc_attr_e( 'Save and go back to form builder', 'jetpack' ); ?>" id="fb-prev-form" name="save">
- </div>
- </form>
-</body>
-</html>
diff --git a/plugins/jetpack/modules/contact-form/images/blank-screen-akismet.png b/plugins/jetpack/modules/contact-form/images/blank-screen-akismet.png
deleted file mode 100644
index a4ba1e2d..00000000
--- a/plugins/jetpack/modules/contact-form/images/blank-screen-akismet.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/contact-form/images/blank-screen-button.png b/plugins/jetpack/modules/contact-form/images/blank-screen-button.png
deleted file mode 100644
index 58dfa26b..00000000
--- a/plugins/jetpack/modules/contact-form/images/blank-screen-button.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/contact-form/images/grunion-form-2x.png b/plugins/jetpack/modules/contact-form/images/grunion-form-2x.png
deleted file mode 100644
index 824d85a3..00000000
--- a/plugins/jetpack/modules/contact-form/images/grunion-form-2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/contact-form/images/grunion-form.png b/plugins/jetpack/modules/contact-form/images/grunion-form.png
deleted file mode 100644
index f4a0cc1d..00000000
--- a/plugins/jetpack/modules/contact-form/images/grunion-form.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/contact-form/images/grunion-remove-field-2x.png b/plugins/jetpack/modules/contact-form/images/grunion-remove-field-2x.png
deleted file mode 100644
index bfbca5ed..00000000
--- a/plugins/jetpack/modules/contact-form/images/grunion-remove-field-2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/contact-form/images/grunion-remove-field-hover-2x.png b/plugins/jetpack/modules/contact-form/images/grunion-remove-field-hover-2x.png
deleted file mode 100644
index dca39da9..00000000
--- a/plugins/jetpack/modules/contact-form/images/grunion-remove-field-hover-2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/contact-form/images/grunion-remove-field-hover.gif b/plugins/jetpack/modules/contact-form/images/grunion-remove-field-hover.gif
deleted file mode 100644
index 20d9e712..00000000
--- a/plugins/jetpack/modules/contact-form/images/grunion-remove-field-hover.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/contact-form/images/grunion-remove-field.gif b/plugins/jetpack/modules/contact-form/images/grunion-remove-field.gif
deleted file mode 100644
index 55062664..00000000
--- a/plugins/jetpack/modules/contact-form/images/grunion-remove-field.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/contact-form/images/grunion-remove-option-2x.png b/plugins/jetpack/modules/contact-form/images/grunion-remove-option-2x.png
deleted file mode 100644
index 4272442c..00000000
--- a/plugins/jetpack/modules/contact-form/images/grunion-remove-option-2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/contact-form/images/grunion-remove-option-hover-2x.png b/plugins/jetpack/modules/contact-form/images/grunion-remove-option-hover-2x.png
deleted file mode 100644
index 210de1b3..00000000
--- a/plugins/jetpack/modules/contact-form/images/grunion-remove-option-hover-2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/contact-form/images/grunion-remove-option-hover.gif b/plugins/jetpack/modules/contact-form/images/grunion-remove-option-hover.gif
deleted file mode 100644
index 9098b065..00000000
--- a/plugins/jetpack/modules/contact-form/images/grunion-remove-option-hover.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/contact-form/images/grunion-remove-option.gif b/plugins/jetpack/modules/contact-form/images/grunion-remove-option.gif
deleted file mode 100644
index ec491663..00000000
--- a/plugins/jetpack/modules/contact-form/images/grunion-remove-option.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/contact-form/js/editor-view.js b/plugins/jetpack/modules/contact-form/js/editor-view.js
deleted file mode 100644
index 951a0d88..00000000
--- a/plugins/jetpack/modules/contact-form/js/editor-view.js
+++ /dev/null
@@ -1,238 +0,0 @@
-/* global grunionEditorView, tinyMCE, QTags, wp */
-( function( $, wp, grunionEditorView ) {
- wp.mce = wp.mce || {};
- if ( 'undefined' === typeof wp.mce.views ) {
- return;
- }
-
- wp.mce.grunion_wp_view_renderer = {
- shortcode_string : 'contact-form',
- template : wp.template( 'grunion-contact-form' ),
- field_templates: {
- email : wp.template( 'grunion-field-email' ),
- telephone : wp.template( 'grunion-field-telephone' ),
- textarea : wp.template( 'grunion-field-textarea' ),
- radio : wp.template( 'grunion-field-radio' ),
- checkbox : wp.template( 'grunion-field-checkbox' ),
- 'checkbox-multiple' : wp.template( 'grunion-field-checkbox-multiple' ),
- select : wp.template( 'grunion-field-select' ),
- date : wp.template( 'grunion-field-date' ),
- text : wp.template( 'grunion-field-text' ),
- name : wp.template( 'grunion-field-text' ),
- url : wp.template( 'grunion-field-url' )
- },
- edit_template : wp.template( 'grunion-field-edit' ),
- editor_inline : wp.template( 'grunion-editor-inline' ),
- editor_option : wp.template( 'grunion-field-edit-option' ),
- getContent : function() {
- var content = this.shortcode.content,
- index = 0,
- field, named,
- body = '';
-
- // If it's the legacy `[contact-form /]` syntax, populate default fields.
- if ( ! content ) {
- content = grunionEditorView.default_form;
- }
-
- // Render the fields.
- while ( ( field = wp.shortcode.next( 'contact-field', content, index ) ) ) {
- index = field.index + field.content.length;
- named = field.shortcode.attrs.named;
- if ( ! named.type || ! this.field_templates[ named.type ] ) {
- named.type = 'text';
- }
- if ( named.required ) {
- named.required = grunionEditorView.labels.required_field_text;
- }
- if ( named.options && 'string' === typeof named.options ) {
- named.options = named.options.split( ',' );
- }
- body += this.field_templates[ named.type ]( named );
- }
-
- var options = {
- body : body,
- submit_button_text : grunionEditorView.labels.submit_button_text
- };
-
- return this.template( options );
- },
- edit: function( data, update_callback ) {
- var shortcode_data = wp.shortcode.next( this.shortcode_string, data ),
- shortcode = shortcode_data.shortcode,
- $tinyMCE_document = $( tinyMCE.activeEditor.getDoc() ),
- $view = $tinyMCE_document.find( '.wpview.wpview-wrap' ).filter( function() {
- return $( this ).attr( 'data-mce-selected' );
- } ),
- $editframe = $( '<iframe scrolling="no" class="inline-edit-contact-form" />' ),
- index = 0,
- named,
- fields = '',
- field;
-
- if ( ! shortcode.content ) {
- shortcode.content = grunionEditorView.default_form;
- }
-
- // Render the fields.
- while ( ( field = wp.shortcode.next( 'contact-field', shortcode.content, index ) ) ) {
- index = field.index + field.content.length;
- named = field.shortcode.attrs.named;
- if ( named.options && 'string' === typeof named.options ) {
- named.options = named.options.split( ',' );
- }
- fields += this.edit_template( named );
- }
-
- $editframe.on( 'checkheight', function() {
- var innerDoc = ( this.contentDocument ) ? this.contentDocument : this.contentWindow.document;
- this.style.height = '10px';
- this.style.height = ( 5 + innerDoc.body.scrollHeight ) + 'px';
- tinyMCE.activeEditor.execCommand( 'wpAutoResize' );
- } );
-
- $editframe.on( 'load', function() {
- var stylesheet_url = ( 1 === window.isRtl ) ? grunionEditorView.inline_editing_style_rtl : grunionEditorView.inline_editing_style,
- $stylesheet = $( '<link rel="stylesheet" href="' + stylesheet_url + '" />' ),
- $dashicons_css = $( '<link rel="stylesheet" href="' + grunionEditorView.dashicons_css_url + '" />' );
-
- $stylesheet.on( 'load', function() {
- $editframe.contents().find( 'body' ).css( 'visibility', 'visible' );
- $editframe.trigger( 'checkheight' );
- } );
- $editframe.contents().find( 'head' ).append( $stylesheet ).append( $dashicons_css );
-
- $editframe.contents().find( 'body' ).html( wp.mce.grunion_wp_view_renderer.editor_inline( {
- to : shortcode.attrs.named.to,
- subject : shortcode.attrs.named.subject,
- fields : fields
- } ) ).css( 'visibility', 'hidden' );
-
- $editframe.contents().find( 'input:first' ).focus();
-
- setTimeout( function(){
- $editframe.trigger( 'checkheight' );
- }, 250 );
-
- // Add a second timeout for super long forms racing, and to not slow it down for shorter forms unnecessarily.
- setTimeout( function(){
- $editframe.trigger( 'checkheight' );
- }, 500 );
-
- var $editfields = $editframe.contents().find( '.grunion-fields' ),
- $buttons = $editframe.contents().find( '.grunion-controls' );
-
- $editfields.sortable();
-
- // Now, add all the listeners!
-
- $editfields.on( 'change select', 'select[name=type]', function() {
- $( this ).closest( '.grunion-field-edit' )[ 0 ].className =
- 'card is-compact grunion-field-edit grunion-field-' + $( this ).val();
- $editframe.trigger( 'checkheight' );
- } );
-
- $editfields.on( 'click', '.delete-option', function( e ) {
- e.preventDefault();
- $( this ).closest( 'li' ).remove();
- $editframe.trigger( 'checkheight' );
- } );
-
- $editfields.on( 'click', '.add-option', function( e ) {
- var $new_option = $( wp.mce.grunion_wp_view_renderer.editor_option() );
- e.preventDefault();
- $( this ).closest( 'li' ).before( $new_option );
- $editframe.trigger( 'checkheight' );
- $new_option.find( 'input:first' ).focus();
- } );
-
- $editfields.on( 'click', '.delete-field', function( e ) {
- e.preventDefault();
- $( this ).closest( '.card' ).remove();
- $editframe.trigger( 'checkheight' );
- } );
-
- $buttons.find( 'input[name=submit]' ).on( 'click', function(){
- var new_data = shortcode;
-
- new_data.type = 'closed';
- new_data.attrs = {};
- new_data.content = '';
-
- $editfields.children().each( function() {
- var field_shortcode = {
- tag : 'contact-field',
- type : 'single',
- attrs : {
- label : $( this ).find( 'input[name=label]' ).val(),
- type : $( this ).find( 'select[name=type]' ).val()
- }
- },
- options = [];
-
- if ( $( this ).find( 'input[name=required]:checked' ).length ) {
- field_shortcode.attrs.required = '1';
- }
-
- $( this ).find( 'input[name=option]' ).each( function() {
- if ( $( this ).val() ) {
- options.push( $( this ).val() );
- }
- } );
- if ( options.length ) {
- field_shortcode.attrs.options = options.join( ',' );
- }
-
- new_data.content += wp.shortcode.string( field_shortcode );
- } );
-
- if ( $editframe.contents().find( 'input[name=to]' ).val() ) {
- new_data.attrs.to = $editframe.contents().find( 'input[name=to]' ).val();
- }
- if ( $editframe.contents().find( 'input[name=subject]' ).val() ) {
- new_data.attrs.subject = $editframe.contents().find( 'input[name=subject]' ).val();
- }
-
- update_callback( wp.shortcode.string( new_data ) );
- } );
-
- $buttons.find( 'input[name=cancel]' ).on( 'click', function() {
- update_callback( wp.shortcode.string( shortcode ) );
- } );
-
- $buttons.find( 'input[name=add-field]' ).on( 'click', function() {
- var $new_field = $( wp.mce.grunion_wp_view_renderer.edit_template( {} ) );
- $editfields.append( $new_field );
- $editfields.sortable( 'refresh' );
- $editframe.trigger( 'checkheight' );
- $new_field.find( 'input:first' ).focus();
- } );
- } );
-
- $view.html( $editframe );
- }
- };
- wp.mce.views.register( 'contact-form', wp.mce.grunion_wp_view_renderer );
-
- // Add the 'text' editor button.
- QTags.addButton(
- 'grunion_shortcode',
- grunionEditorView.labels.quicktags_label,
- function() {
- QTags.insertContent( '[contact-form]' + grunionEditorView.default_form + '[/contact-form]' );
- }
- );
-
- var $wp_content_wrap = $( '#wp-content-wrap' );
- $( '#insert-jetpack-contact-form' ).on( 'click', function( e ) {
- e.preventDefault();
- if ( $wp_content_wrap.hasClass( 'tmce-active' ) ) {
- tinyMCE.execCommand( 'grunion_add_form' );
- } else if ( $wp_content_wrap.hasClass( 'html-active' ) ) {
- QTags.insertContent( '[contact-form]' + grunionEditorView.default_form + '[/contact-form]' );
- } else {
- window.console.error( 'Neither TinyMCE nor QuickTags is active. Unable to insert form.' );
- }
- } );
-}( jQuery, wp, grunionEditorView ) );
diff --git a/plugins/jetpack/modules/contact-form/js/grunion-admin.js b/plugins/jetpack/modules/contact-form/js/grunion-admin.js
deleted file mode 100644
index d3fe222d..00000000
--- a/plugins/jetpack/modules/contact-form/js/grunion-admin.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/* global ajaxurl */
-jQuery( function ( $ ) {
- $( document ).on( 'click', '#jetpack-check-feedback-spam:not(.button-disabled)', function( e ) {
- e.preventDefault();
-
- $( '#jetpack-check-feedback-spam:not(.button-disabled)' ).addClass( 'button-disabled' );
- $( '.jetpack-check-feedback-spam-spinner' ).addClass( 'spinner' ).show();
- grunion_check_for_spam( 0, 100 );
- } );
-
- function grunion_check_for_spam( offset, limit ) {
- $.post(
- ajaxurl,
- {
- 'action' : 'grunion_recheck_queue',
- 'offset' : offset,
- 'limit' : limit
- },
- function ( result ) {
- if ( result.processed < limit ) {
- window.location.reload();
- }
- else {
- grunion_check_for_spam( offset + limit, limit );
- }
- }
- );
- }
-} );
diff --git a/plugins/jetpack/modules/contact-form/js/grunion-frontend.js b/plugins/jetpack/modules/contact-form/js/grunion-frontend.js
deleted file mode 100644
index dbd5664c..00000000
--- a/plugins/jetpack/modules/contact-form/js/grunion-frontend.js
+++ /dev/null
@@ -1,3 +0,0 @@
-jQuery( function ( $ ) {
- $( '.contact-form input.jp-contact-form-date' ).datepicker();
-} );
diff --git a/plugins/jetpack/modules/contact-form/js/grunion.js b/plugins/jetpack/modules/contact-form/js/grunion.js
deleted file mode 100644
index 99631d62..00000000
--- a/plugins/jetpack/modules/contact-form/js/grunion.js
+++ /dev/null
@@ -1,813 +0,0 @@
-/* jshint onevar: false, devel: true, smarttabs: true */
-/* global GrunionFB_i18n: true, FB, ajax_nonce_shortcode, ajax_nonce_json, ajaxurl, postId */
-
-if ( ! window.FB ) {
- window.FB = {};
-}
-
-GrunionFB_i18n = jQuery.extend( {
- nameLabel: 'Name',
- emailLabel: 'Email',
- urlLabel: 'Website',
- commentLabel: 'Comment',
- newLabel: 'New Field',
- optionsLabel: 'Options',
- optionLabel: 'Option',
- firstOptionLabel: 'First option',
- problemGeneratingForm: 'Oops, there was a problem generating your form. You\'ll likely need to try again.',
- moveInstructions: 'Drag up or down\nto re-arrange',
- moveLabel: 'move',
- editLabel: 'edit',
- savedMessage: 'Saved successfully',
- requiredLabel: '(required)',
- exitConfirmMessage: 'Are you sure you want to exit the form editor without saving? Any changes you have made will be lost.',
- maxNewFields: 5,
- invalidEmail: ' is an invalid email address.'
-}, GrunionFB_i18n );
-
-GrunionFB_i18n.moveInstructions = GrunionFB_i18n.moveInstructions.replace( '\n', '<br />' );
-
-FB.span = jQuery( '<span>' );
-FB.esc_html = function( string ) {
- return FB.span.text( string ).html();
-};
-
-FB.esc_attr = function( string ) {
- string = FB.esc_html( string );
- return string.replace( '"', '&quot;' ).replace( '\'', '&#039;' );
-};
-
-FB.ContactForm = (function() {
- var fbForm = { // Main object that generated shortcode via AJAX call
- 'action' : 'grunion_shortcode',
- '_ajax_nonce' : ajax_nonce_shortcode,
- 'to' : '',
- 'subject' : '',
- 'fields' : {}
- };
- var defaultFields = {
- 'name': {
- 'label' : GrunionFB_i18n.nameLabel,
- 'type' : 'name',
- 'required' : true,
- 'options' : [],
- 'order' : '1'
- },
- 'email': {
- 'label' : GrunionFB_i18n.emailLabel,
- 'type' : 'email',
- 'required' : true,
- 'options' : [],
- 'order' : '2'
- },
- 'url': {
- 'label' : GrunionFB_i18n.urlLabel,
- 'type' : 'url',
- 'required' : false,
- 'options' : [],
- 'order' : '3'
- },
- 'comment': {
- 'label' : GrunionFB_i18n.commentLabel,
- 'type' : 'textarea',
- 'required' : true,
- 'options' : [],
- 'order' : '4'
- }
- };
- var debug = false; // will print errors to log if true
- var grunionNewCount = 0; // increment for new fields
- var maxNewFields = GrunionFB_i18n.maxNewFields; // See filter in ../grunion-form-view.php
- var optionsCache = {};
- var optionsCount = 0; // increment for options
- var shortcode;
-
- function addField () {
- try {
- grunionNewCount++;
- if (grunionNewCount <= maxNewFields) {
- // Add to preview
- jQuery('#fb-extra-fields').append('<div id="fb-new-field' + grunionNewCount + '" fieldid="' + grunionNewCount + '" class="fb-new-fields"><div class="fb-fields"><div id="' + grunionNewCount + '" class="fb-remove"></div><label fieldid="' + grunionNewCount + '" for="fb-field' + grunionNewCount + '"><span class="label-text">' + GrunionFB_i18n.newLabel + '</span> </label><input type="text" id="fb-field' + grunionNewCount + '" disabled="disabled" /></div></div>');
- // Add to form object
- fbForm.fields[grunionNewCount] = {
- 'label' : GrunionFB_i18n.newLabel,
- 'type' : 'text',
- 'required' : false,
- 'options' : [],
- 'order' : '5'
- };
- if (grunionNewCount === maxNewFields) {
- jQuery('#fb-new-field').hide();
- }
- // Reset form for this new field
- optionsCount = 0;
- optionsCache = {};
- jQuery('#fb-new-options').html('<label for="fb-option0">' + GrunionFB_i18n.optionsLabel + '</label><input type="text" id="fb-option0" optionid="0" value="' + GrunionFB_i18n.firstOptionLabel + '" class="fb-options" />');
- jQuery('#fb-options').hide();
- jQuery('#fb-new-label').val( GrunionFB_i18n.newLabel );
- jQuery('#fb-new-type').val('text');
- jQuery('#fb-field-id').val(grunionNewCount);
- setTimeout(function () { jQuery('#fb-new-label').focus().select(); }, 100);
- } else {
- jQuery('#fb-new-field').hide();
- }
- } catch(e) {
- if (debug) {
- console.log('addField(): ' + e);
- }
- }
- }
- function addOption () {
- try {
- optionsCount = jQuery( '#fb-new-options .fb-options' ).length;
- var thisId = jQuery('#fb-field-id').val();
- var thisType = jQuery('#fb-new-type').val();
- if (thisType === 'radio') {
- // Add to right col
- jQuery('#fb-new-options').append('<div id="fb-option-box-' + optionsCount + '" class="fb-new-fields"><span optionid="' + optionsCount + '" class="fb-remove-option"></span><label></label><input type="text" id="fb-option' + optionsCount + '" optionid="' + optionsCount + '" value="' + GrunionFB_i18n.optionLabel + '" class="fb-options" /><div>');
- // Add to preview
- jQuery('#fb-new-field' + thisId + ' .fb-fields').append('<div id="fb-radio-' + thisId + '-' + optionsCount + '"><input type="radio" disabled="disabled" id="fb-field' + thisId + '" name="radio-' + thisId + '" /><span>' + GrunionFB_i18n.optionLabel + '</span><div class="clear"></div></div>');
- } else if ( 'checkbox-multiple' === thisType ) {
- // Add to right col
- jQuery('#fb-new-options').append('<div id="fb-option-box-' + optionsCount + '" class="fb-new-fields"><span optionid="' + optionsCount + '" class="fb-remove-option"></span><label></label><input type="text" id="fb-option' + optionsCount + '" optionid="' + optionsCount + '" value="' + GrunionFB_i18n.optionLabel + '" class="fb-options" /><div>');
- // Add to preview
- jQuery('#fb-new-field' + thisId + ' .fb-fields').append('<div id="fb-checkbox-multiple-' + thisId + '-' + optionsCount + '"><input type="checkbox" disabled="disabled" id="fb-field' + thisId + '" name="checkbox-multiple-' + thisId + '" /><span>' + GrunionFB_i18n.optionLabel + '</span><div class="clear"></div></div>');
- } else {
- // Add to right col
- jQuery('#fb-new-options').append('<div id="fb-option-box-' + optionsCount + '" class="fb-new-fields"><span optionid="' + optionsCount + '" class="fb-remove-option"></span><label></label><input type="text" id="fb-option' + optionsCount + '" optionid="' + optionsCount + '" value="" class="fb-options" /><div>');
- // Add to preview
- jQuery('#fb-field'+ thisId).append('<option id="fb-' + thisId + '-' + optionsCount + '" value="' + thisId + '-' + optionsCount + '"></option>');
- }
- // Add to fbForm object
- fbForm.fields[thisId].options[optionsCount] = '';
- // Add focus to new field
- jQuery('#fb-option' + optionsCount).focus().select();
- } catch(e) {
- if (debug) {
- console.log('addOption(): ' + e);
- }
- }
- }
- function buildPreview () {
- try {
- if (fbForm.to) { jQuery('#fb-field-my-email').val(fbForm.to); }
- if (fbForm.subject) { jQuery('#fb-field-subject').val(fbForm.subject); }
- // Loop over and add fields
- jQuery.each(fbForm.fields, function(index, value) {
- jQuery('#fb-extra-fields').before('<div class="fb-new-fields ui-state-default" fieldid="' + index + '" id="fb-new-field' + index + '"><div class="fb-fields"></div></div>');
- jQuery('#fb-field-id').val(index);
- optionsCache[index] = {};
- optionsCache[index].options = [];
- if ( 'radio' === value.type || 'select' === value.type || 'checkbox-multiple' === value.type ) {
- jQuery.each(value.options, function(i, value) {
- optionsCache[index].options[i] = value;
- });
- }
- updateType(value.type, value.label, value.required);
- });
- } catch(e) {
- if (debug) {
- console.log('buildPreview(): ' + e);
- }
- }
- }
- function customOptions (id, thisType) {
- try {
- var thisOptions = '';
- for (var i=0; i<optionsCache[id].options.length; i++) {
- if (optionsCache[id].options[i] !== undefined) {
- if (thisType === 'radio') {
- thisOptions = thisOptions + '<div id="fb-radio-' + id + '-' + i + '"><input type="radio" id="fb-field' + id + '" name="radio-' + id + '" /><span>' + FB.esc_html( optionsCache[id].options[i] ) + '</span><div class="clear"></div></div>';
- } else if ( 'checkbox-multiple' === thisType ) {
- thisOptions = thisOptions + '<div id="fb-checkbox-multiple-' + id + '-' + i + '"><input type="checkbox" id="fb-field' + id + '" name="checkbox-multiple-' + id + '" /><span>' + FB.esc_html( optionsCache[id].options[i] ) + '</span><div class="clear"></div></div>';
- } else {
- thisOptions = thisOptions + '<option id="fb-' + id + '-' + i + '" value="' + id + '-' + i + '">' + FB.esc_html( optionsCache[id].options[i] ) + '</option>';
- }
- }
- }
- return thisOptions;
- } catch(e) {
- if (debug) {
- console.log('customOptions(): ' + e);
- }
- }
- }
- function deleteField (that) {
- try {
- grunionNewCount--;
- var thisId = that.attr('id');
- delete fbForm.fields[thisId];
- jQuery('#' + thisId).parent().parent().remove();
- if (grunionNewCount <= maxNewFields) {
- jQuery('#fb-new-field').show();
- }
- } catch(e) {
- if (debug) {
- console.log('deleteField(): ' + e);
- }
- }
- }
- function editField (that) {
- try {
- scroll(0,0);
- setTimeout(function () { jQuery('#fb-new-label').focus().select(); }, 100);
- var thisId = that.parent().attr('fieldid');
- loadFieldEditor(thisId);
- } catch(e) {
- if (debug) {
- console.log('editField(): ' + e);
- }
- }
- }
- function grabShortcode () {
- try {
- // Takes fbForm object and returns shortcode syntax
- jQuery.post(ajaxurl, fbForm, function(response) {
- shortcode = response;
- });
- } catch(e) {
- alert( GrunionFB_i18n.problemGeneratingForm );
- if (debug) {
- console.log('grabShortcode(): ' + e);
- }
- }
- }
- function hideDesc () {
- jQuery('#fb-desc').hide();
- jQuery('#fb-add-field').show();
- }
- function hidePopup () {
- try {
- // copied from wp-includes/js/thickbox/thickbox.js
- jQuery('#TB_imageOff', window.parent.document).unbind('click');
- jQuery('#TB_closeWindowButton', window.parent.document).unbind('click');
- jQuery('#TB_window', window.parent.document).fadeOut('fast');
- jQuery('body', window.parent.document).removeClass('modal-open');
- jQuery('#TB_window,#TB_overlay,#TB_HideSelect', window.parent.document).trigger('unload').unbind().remove();
- jQuery('#TB_load', window.parent.document).remove();
- if (typeof window.parent.document.body.style.maxHeight === 'undefined') {//if IE 6
- jQuery('body', 'html', window.parent.document).css({height: 'auto', width: 'auto'});
- jQuery('html', window.parent.document).css('overflow', '');
- }
- window.parent.document.onkeydown = '';
- window.parent.document.onkeyup = '';
- return false;
- } catch(e) {
- if (debug) {
- console.log('hidePopup(): ' + e);
- }
- }
- }
- function hideShowEditLink (whichType, that) {
- try {
- if (whichType === 'show') {
- // Prevents showing links twice
- if (jQuery('.fb-edit-field').is(':visible')) {
- jQuery('.fb-edit-field').remove();
- }
- that.find('label').prepend('<span class="right fb-edit-field" style="font-weight: normal;"><a href="" class="fb-reorder"><div style="display: none;">' + GrunionFB_i18n.moveInstructions + '</div>' + GrunionFB_i18n.moveLabel + '</a>&nbsp;&nbsp;<span style="color: #C7D8DE;">|</span>&nbsp;&nbsp;<a href="" class="fb-edit">' + GrunionFB_i18n.editLabel + '</a></span>');
- } else {
- jQuery('.fb-edit-field').remove();
- }
- } catch(e) {
- if (debug) {
- console.log('hideShowEditLink(): ' + e);
- }
- }
- }
- function loadFieldEditor (id) {
- try {
- var thisType = fbForm.fields[id].type;
- jQuery('#fb-options').hide();
- // Reset hidden field ID
- jQuery('#fb-field-id').val(id);
- // Load label
- jQuery('#fb-new-label').val(fbForm.fields[id].label);
- // Load type
- jQuery('#fb-new-type').val(fbForm.fields[id].type);
- // Load required
- if (fbForm.fields[id].required) {
- jQuery('#fb-new-required').prop('checked', true);
- } else {
- jQuery('#fb-new-required').prop('checked', false);
- }
- // Load options if there are any
- if ( 'select' === thisType || 'radio' === thisType || 'checkbox-multiple' === thisType ) {
- var thisOptions = fbForm.fields[id].options;
- jQuery('#fb-options').show();
- jQuery('#fb-new-options').html(''); // Clear it all out
- for (var i=0; i<thisOptions.length; i++) {
- if (thisOptions[i] !== undefined) {
- if (thisType === 'radio') {
- jQuery('#fb-new-options').append('<div id="fb-option-box-' + i + '" class="fb-new-fields"><span optionid="' + i + '" class="fb-remove-option"></span><label></label><input type="text" id="fb-option' + i + '" optionid="' + i + '" value="' + FB.esc_attr( fbForm.fields[id].options[i] ) + '" class="fb-options" /><div>');
- } else {
- jQuery('#fb-new-options').append('<div id="fb-option-box-' + i + '" class="fb-new-fields"><span optionid="' + i + '" class="fb-remove-option"></span><label></label><input type="text" id="fb-option' + i + '" optionid="' + i + '" value="' + FB.esc_attr( fbForm.fields[id].options[i] ) + '" class="fb-options" /><div>');
- }
- }
- }
- }
- // Load editor & hide description
- hideDesc();
- } catch(e) {
- if (debug) {
- console.log('loadFieldEditor(): ' + e);
- }
- }
- }
- function parseShortcode (data) {
- try {
- // Clean up fields by resetting them
- fbForm.fields = {};
- // Add new fields
- if (!data) {
- fbForm.fields = defaultFields;
- } else {
- jQuery.each(data.fields, function(index, value) {
- if ( 1 === parseInt(value.required, 10) ) {
- value.required = 'true';
- }
- fbForm.fields[index] = value;
- });
- fbForm.to = data.to;
- fbForm.subject = data.subject;
- }
- } catch(e) {
- if (debug) {
- console.log('parseShortcode(): ' + e);
- }
- }
- }
- function removeOption (optionId) {
- try {
- var thisId = jQuery('#fb-field-id').val();
- var thisVal = jQuery('#fb-option' + optionId).val();
- var thisType = jQuery('#fb-new-type').val();
- // Remove from right
- jQuery('#fb-option-box-' + optionId).remove();
- // Remove from preview
- if (thisType === 'radio') {
- jQuery('#fb-radio-' + thisId + '-' + optionId).remove();
- } else if ( 'checkbox-multiple' === thisType ) {
- jQuery('#fb-checkbox-multiple-' + thisId + '-' + optionId).remove();
- } else {
- jQuery('#fb-' + thisId + '-' + optionId).remove();
- }
- // Remove from fbForm object
- var idx = fbForm.fields[thisId].options.indexOf(thisVal);
- if (idx !== -1) { fbForm.fields[thisId].options.splice(idx, 1); }
- } catch(e) {
- if (debug) {
- console.log('removeOption(): ' + e);
- }
- }
- }
- function removeOptions () {
- try {
- var thisId = jQuery('#fb-field-id').val();
- jQuery('#fb-options').hide();
- if (optionsCache[thisId] === undefined) { optionsCache[thisId] = {}; }
- optionsCache[thisId].options = fbForm.fields[thisId].options; // Save options in case they change their mind
- fbForm.fields[thisId].options = []; // Removes all options
- } catch(e) {
- if (debug) {
- console.log('removeOptions(): ' + e);
- }
- }
- }
- function sendShortcodeToEditor () {
- try {
- // Serialize fields
- jQuery('div#sortable div.fb-new-fields').each(function(index) {
- var thisId = jQuery(this).attr('fieldid');
- fbForm.fields[thisId].order = index;
- });
- // Export to WYSIWYG editor
- jQuery.post(ajaxurl, fbForm, function(response) {
- var isVisual = jQuery('#edButtonPreview', window.parent.document).hasClass('active');
- /* WP 3.3+ */
- if ( !isVisual ) {
- isVisual = jQuery( '#wp-content-wrap', window.parent.document ).hasClass( 'tmce-active' );
- }
-
- var win = window.dialogArguments || opener || parent || top;
- var currentCode;
- if (isVisual) {
- currentCode = win.tinyMCE.activeEditor.getContent();
- } else {
- currentCode = jQuery('#editorcontainer textarea', window.parent.document).val();
- /* WP 3.3+ */
- if ( typeof currentCode !== 'string' ) {
- currentCode = jQuery( '.wp-editor-area', window.parent.document ).val();
- }
- }
- var regexp = new RegExp('\\[contact-form\\b.*?\\/?\\](?:[\\s\\S]+?\\[\\/contact-form\\])?');
-
- // Remove new lines that cause BR tags to show up
- response = response.replace(/\n/g,' ');
- // Convert characters to comma
- response = response.replace( /%26#x002c;/g , ',' );
-
- // Add new shortcode
- if (currentCode.match(regexp)) {
- if (isVisual) {
- win.tinyMCE.activeEditor.execCommand('mceSetContent', false, currentCode.replace(regexp, response));
- } else {
- // looks like the visual editor is disabled,
- // update the contents of the post directly
- jQuery( '#content', window.parent.document ).val( currentCode.replace( regexp, response ) );
- }
- } else {
- try {
- win.send_to_editor( response );
- } catch ( e ) {
- if (isVisual) {
- win.tinyMCE.activeEditor.execCommand('mceInsertContent', false, response);
- } else {
- // looks like the visual editor is disabled,
- // update the contents of the post directly
- jQuery( '#content', window.parent.document ).val( currentCode + response );
- }
- }
- }
- hidePopup();
- });
- } catch(e) {
- if (debug) {
- console.log('sendShortcodeToEditor(): ' + e);
- }
- }
- }
- function showDesc () {
- jQuery('#fb-desc').show();
- jQuery('#fb-add-field').hide();
- }
- function showAndHideMessage (message) {
- try {
- var newMessage = (!message) ? GrunionFB_i18n.savedMessage : message;
- jQuery('#fb-success').text(newMessage);
- jQuery('#fb-success').slideDown('fast');
- setTimeout(function () {
- jQuery('#fb-success').slideUp('fast');
- }, 2500);
- } catch(e) {
- if (debug) {
- console.log('showAndHideMessage(): ' + e);
- }
- }
- }
- function switchTabs (whichType) {
- try {
- if (whichType === 'preview') {
- if ( ! validateEmails( jQuery( '#fb-field-my-email' ).val() ) ) {
- return;
- }
- jQuery('#tab-preview a').addClass('current');
- jQuery('#tab-settings a').removeClass('current');
- jQuery('#fb-preview-form, #fb-desc').show();
- jQuery('#fb-email-settings, #fb-email-desc').hide();
- showAndHideMessage( GrunionFB_i18n.savedMessage );
-
- } else {
- jQuery('#tab-preview a').removeClass('current');
- jQuery('#tab-settings a').addClass('current');
- jQuery('#fb-preview-form, #fb-desc, #fb-add-field').hide();
- jQuery('#fb-email-settings, #fb-email-desc').show();
- jQuery('#fb-field-my-email').focus().select();
- }
- } catch(e) {
- if (debug) {
- console.log('switchTabs(): ' + e);
- }
- }
- }
- function validateEmails( emails ) {
- // Field is allowed to be empty :)
- if ( 0 === emails.length ) {
- return true;
- }
-
- var $e, emailList = emails.split( ',' );
-
- for ( $e = 0 ; $e < emailList.length ; $e++ ) {
- if ( false === validateEmail( emailList[ $e ] ) ) {
- alert( emailList[ $e ] + GrunionFB_i18n.invalidEmail );
- return false;
- }
- }
-
- return true;
- }
- /* Uses The Official Standard: RFC 5322 -- http://www.regular-expressions.info/email.html */
- function validateEmail( email ) {
- var re = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/i;
- return re.test( email );
- }
- function updateLabel () {
- try {
- var thisId = jQuery('#fb-field-id').val();
- var thisLabel = jQuery('#fb-new-label').val();
- // Update preview
- if (thisLabel.length === 0) {
- jQuery('#fb-new-field' + thisId + ' label .label-text').text( GrunionFB_i18n.newLabel );
- } else {
- jQuery('#fb-new-field' + thisId + ' label .label-text').text( thisLabel );
- }
- // Update fbForm object
- fbForm.fields[thisId].label = thisLabel;
- } catch(e) {
- if (debug) {
- console.log('updateLabel(): ' + e);
- }
- }
- }
- function updateMyEmail () {
- try {
- var thisEmail = jQuery('#fb-field-my-email').val();
- fbForm.to = thisEmail;
- } catch(e) {
- if (debug) {
- console.log('updateMyEmail(): ' + e);
- }
- }
- }
- function updateOption (that) {
- try {
- var thisId = jQuery('#fb-field-id').val();
- var thisOptionid = that.attr('optionid');
- var thisOptionValue = that.val();
- var thisType = jQuery('#fb-new-type').val();
- // Update preview
- if (thisType === 'radio') {
- jQuery('#fb-radio-' + thisId + '-' + thisOptionid + ' span').text(thisOptionValue);
- } else if ( 'checkbox-multiple' === thisType ) {
- jQuery('#fb-checkbox-multiple-' + thisId + '-' + thisOptionid + ' span').text(thisOptionValue);
- } else {
- jQuery('#fb-' + thisId + '-' + thisOptionid).text(thisOptionValue);
- }
- // Update fbForm object
- fbForm.fields[thisId].options[thisOptionid] = thisOptionValue;
- } catch(e) {
- if (debug) {
- console.log('updateOption(): ' + e);
- }
- }
- }
- function updateRequired () {
- try {
- var thisId = jQuery('#fb-field-id').val();
- var thisChecked = jQuery('#fb-new-required').is(':checked');
- // Update object and preview
- if (thisChecked) {
- fbForm.fields[thisId].required = true;
- jQuery('#fb-new-field' + thisId + ' label').append('<span class="label-required">' + GrunionFB_i18n.requiredLabel + '</span>');
- } else {
- fbForm.fields[thisId].required = false;
- jQuery('#fb-new-field' + thisId + ' label .label-required').remove();
- }
- } catch(e) {
- if (debug) {
- console.log('updateRequired(): ' + e);
- }
- }
- }
- function updateSubject () {
- try {
- var thisSubject = jQuery('#fb-field-subject').val();
- fbForm.subject = thisSubject;
- } catch(e) {
- if (debug) {
- console.log('updateSubject(): ' + e);
- }
- }
- }
- function updateType(thisType, thisLabelText, thisRequired) {
- try {
- var thisId = jQuery('#fb-field-id').val();
- if (!thisType) { thisType = jQuery('#fb-new-type').val(); }
- if (!thisLabelText) { thisLabelText = jQuery('#fb-new-field' + thisId + ' .label-text').text(); }
- var isRequired = (thisRequired) ? '<span class="label-required">' + GrunionFB_i18n.requiredLabel + '</span>' : '';
- var thisLabel = '<label fieldid="' + thisId + '" for="fb-field' + thisId + '"><span class="label-text">' + FB.esc_html( thisLabelText ) + '</span>' + isRequired + '</label>';
- var thisRadio = '<input type="radio" name="radio-' + thisId + '" id="fb-field' + thisId + ' "disabled="disabled" />';
- var thisRadioLabel = '<label fieldid="' + thisId + '" for="fb-field' + thisId + '" class="fb-radio-label"><span class="label-text">' + FB.esc_html( thisLabelText ) + '</span>' + isRequired + '</label>';
- var thisRadioRemove = '<div class="fb-remove fb-remove-small" id="' + thisId + '"></div>';
- var thisRemove = '<div class="fb-remove" id="' + thisId + '"></div>';
- var thisCheckbox = '<input type="checkbox" id="fb-field' + thisId + '" "disabled="disabled" />';
- var thisCheckboxMultiple = '<input type="checkbox" id="fb-field' + thisId + '" "disabled="disabled" />';
- var thisCheckboxMultipleRemove = '<div class="fb-remove fb-remove-small" id="' + thisId + '"></div>';
- var thisText = '<input type="text" id="fb-field' + thisId + '" "disabled="disabled" />';
- var thisTextarea = '<textarea id="fb-field' + thisId + '" "disabled="disabled"></textarea>';
- var thisClear = '<div class="clear"></div>';
- var thisSelect = '<select id="fb-field' + thisId + '" fieldid="' + thisId + '"><option id="fb-' + thisId + '-' + optionsCount + '" value="' + thisId + '-' + optionsCount + '">' + GrunionFB_i18n.firstOptionLabel + '</option></select>';
- switch (thisType) {
- case 'checkbox':
- removeOptions();
- jQuery('#fb-new-field' + thisId + ' .fb-fields').html(thisRadioRemove + thisCheckbox + thisRadioLabel + thisClear);
- break;
- case 'checkbox-multiple':
- jQuery('#fb-new-field' + thisId + ' .fb-fields').html(thisLabel + thisCheckboxMultipleRemove + '<div fieldid="' + thisId + '" id="fb-custom-checkbox-multiple' + thisId + '"></div>');
- if (optionsCache[thisId] !== undefined && optionsCache[thisId].options.length !== 0) {
- fbForm.fields[thisId].options = optionsCache[thisId].options;
- jQuery('#fb-custom-checkbox-multiple' + thisId).append(customOptions(thisId, thisType));
- } else {
- jQuery('#fb-new-options').html('<label for="fb-option0">' + GrunionFB_i18n.optionsLabel + '</label><input type="text" id="fb-option0" optionid="0" value="' + GrunionFB_i18n.firstOptionLabel + '" class="fb-options" />');
- jQuery('#fb-custom-checkbox-multiple' + thisId).append('<div id="fb-checkbox-multiple-' + thisId + '-0">' + thisCheckboxMultiple + '<span>' + GrunionFB_i18n.firstOptionLabel + '</span>' + thisClear + '</div>');
- fbForm.fields[thisId].options[optionsCount] = GrunionFB_i18n.firstOptionLabel;
- }
- jQuery('#fb-options').show();
- setTimeout(function () { jQuery('#fb-option0').focus().select(); }, 100);
- break;
- case 'email':
- removeOptions();
- jQuery('#fb-new-field' + thisId + ' .fb-fields').html(thisRemove + thisLabel + thisText);
- break;
- case 'name':
- removeOptions();
- jQuery('#fb-new-field' + thisId + ' .fb-fields').html(thisRemove + thisLabel + thisText);
- break;
- case 'radio':
- jQuery('#fb-new-field' + thisId + ' .fb-fields').html(thisLabel + thisRadioRemove + '<div fieldid="' + thisId + '" id="fb-custom-radio' + thisId + '"></div>');
- if (optionsCache[thisId] !== undefined && optionsCache[thisId].options.length !== 0) {
- fbForm.fields[thisId].options = optionsCache[thisId].options;
- jQuery('#fb-custom-radio' + thisId).append(customOptions(thisId, thisType));
- } else {
- jQuery('#fb-new-options').html('<label for="fb-option0">' + GrunionFB_i18n.optionsLabel + '</label><input type="text" id="fb-option0" optionid="0" value="' + GrunionFB_i18n.firstOptionLabel + '" class="fb-options" />');
- jQuery('#fb-custom-radio' + thisId).append('<div id="fb-radio-' + thisId + '-0">' + thisRadio + '<span>' + GrunionFB_i18n.firstOptionLabel + '</span>' + thisClear + '</div>');
- fbForm.fields[thisId].options[optionsCount] = GrunionFB_i18n.firstOptionLabel;
- }
- jQuery('#fb-options').show();
- setTimeout(function () { jQuery('#fb-option0').focus().select(); }, 100);
- break;
- case 'select':
- jQuery('#fb-new-field' + thisId + ' .fb-fields').html(thisRemove + thisLabel + thisSelect);
- if (optionsCache[thisId] !== undefined && optionsCache[thisId].options.length !== 0) {
- fbForm.fields[thisId].options = optionsCache[thisId].options;
- jQuery('#fb-field' + thisId).html(customOptions(thisId, thisType));
- } else {
- jQuery('#fb-new-options').html('<label for="fb-option0">' + GrunionFB_i18n.optionsLabel + '</label><input type="text" id="fb-option0" optionid="0" value="' + GrunionFB_i18n.firstOptionLabel + '" class="fb-options" />');
- fbForm.fields[thisId].options[optionsCount] = GrunionFB_i18n.firstOptionLabel;
- }
- jQuery('#fb-options').show();
- setTimeout(function () { jQuery('#fb-option0').focus().select(); }, 100);
- break;
- case 'text':
- removeOptions();
- jQuery('#fb-new-field' + thisId + ' .fb-fields').html(thisRemove + thisLabel + thisText);
- break;
- case 'textarea':
- removeOptions();
- jQuery('#fb-new-field' + thisId + ' .fb-fields').html(thisRemove + thisLabel + thisTextarea);
- break;
- case 'url':
- removeOptions();
- jQuery('#fb-new-field' + thisId + ' .fb-fields').html(thisRemove + thisLabel + thisText);
- break;
- }
- // update object
- fbForm.fields[thisId].type = thisType;
- } catch(e) {
- if (debug) {
- console.log('updateType(): ' + e);
- }
- }
- }
- return {
- resizePop: function () {
- try {
- //Thickbox won't resize for some reason, we are manually doing it here
- var totalWidth = jQuery('body', window.parent.document).width();
- var totalHeight = jQuery('body', window.parent.document).height();
- var isIE6 = typeof document.body.style.maxHeight === 'undefined';
-
- jQuery('#TB_window, #TB_iframeContent', window.parent.document).css('width', '768px');
- jQuery('#TB_window', window.parent.document).css({ left: (totalWidth-768)/2 + 'px', top: '23px', position: 'absolute', marginLeft: '0' });
- if ( ! isIE6 ) { // take away IE6
- jQuery('#TB_window, #TB_iframeContent', window.parent.document).css('height', (totalHeight-73) + 'px');
- }
- } catch(e) {
- if (debug) {
- console.log('resizePop(): ' + e);
- }
- }
- },
- init: function () {
- // Scroll to top of page
- window.parent.scroll(0,0);
- //Check for existing form data
- var contentSource;
- if (jQuery('#edButtonPreview', window.parent.document).hasClass('active') || jQuery( '#wp-content-wrap', window.parent.document ).hasClass( 'tmce-active' ) ) {
- var win = window.dialogArguments || opener || parent || top;
- contentSource = win.tinyMCE.activeEditor.getContent();
- } else {
- contentSource = jQuery('#content', window.parent.document).val();
- }
- var data = {
- action: 'grunion_shortcode_to_json',
- '_ajax_nonce' : ajax_nonce_json,
- post_id: postId,
- content: contentSource
- };
-
- var $doc = jQuery(document);
-
- jQuery.post(ajaxurl, data, function(response) {
- // Setup fbForm
- parseShortcode(jQuery.parseJSON(response));
- // Now build out the preview form
- buildPreview();
- });
- // actions
- jQuery('.fb-add-field').click(function () {
- addField();
- hideDesc();
- return false;
- });
- jQuery('#fb-new-label').keyup(function () {
- updateLabel();
- });
- jQuery('#fb-new-type').change(function () {
- updateType();
- });
- jQuery('#fb-new-required').click(function () {
- updateRequired();
- });
- $doc.on('click', '.fb-remove', function () {
- showDesc();
- deleteField(jQuery(this));
- grabShortcode();
- });
- jQuery('#fb-preview').submit(function () {
- sendShortcodeToEditor();
- return false;
- });
- jQuery('#TB_overlay, #TB_closeWindowButton', window.parent.document).mousedown(function () {
- if(confirm( GrunionFB_i18n.exitConfirmMessage )) {
- hidePopup();
- }
- });
- $doc.on('click', '#fb-another-option', function () {
- addOption();
- });
- $doc.on('keyup', '.fb-options', function () {
- updateOption(jQuery(this));
- });
- $doc.on('click', '.fb-remove-option', function () {
- removeOption(jQuery(this).attr('optionid'));
- });
- jQuery('#tab-preview a').click(function () {
- switchTabs('preview');
- return false;
- });
- jQuery('#fb-prev-form').click(function () {
- switchTabs('preview');
- return false;
- });
- jQuery('#tab-settings a').click(function () {
- switchTabs();
- return false;
- });
- jQuery('#fb-field-my-email').blur(function () {
- updateMyEmail();
- });
- jQuery('#fb-field-subject').blur(function () {
- updateSubject();
- });
- $doc.on('mouseenter', '.fb-form-case .fb-new-fields', function () {
- hideShowEditLink('show', jQuery(this));
- });
- $doc.on('mouseleave', '.fb-form-case .fb-new-fields', function () {
- hideShowEditLink('hide');
- return false;
- });
- $doc.on('click', '.fb-edit-field', function () {
- editField(jQuery(this));
- return false;
- });
- $doc.on('click', '.fb-edit-field .fb-reorder', function () {
- return false;
- });
- $doc.on('click', '#fb-save-field', function () {
- showDesc();
- showAndHideMessage();
- return false;
- });
- jQuery('#fb-feedback').click(function () {
- var thisHref = jQuery(this).attr('href');
- window.parent.location = thisHref;
- return false;
- });
- jQuery('#sortable').sortable({
- axis: 'y',
- handle: '.fb-reorder',
- revert: true,
- start: function() { jQuery('.fb-edit-field').hide(); }
- });
- jQuery('#draggable').draggable({
- axis: 'y',
- handle: '.fb-reorder',
- connectToSortable: '#sortable',
- helper: 'clone',
- revert: 'invalid'
- });
- }
- };
-})();
diff --git a/plugins/jetpack/modules/contact-form/js/tinymce-plugin-form-button.js b/plugins/jetpack/modules/contact-form/js/tinymce-plugin-form-button.js
deleted file mode 100644
index 9825c1b4..00000000
--- a/plugins/jetpack/modules/contact-form/js/tinymce-plugin-form-button.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/* global grunionEditorView, tinymce */
-(function() {
- tinymce.create( 'tinymce.plugins.grunion_form', {
-
- init : function( editor ) {
- editor.addButton( 'grunion', {
- title : grunionEditorView.labels.tinymce_label,
- cmd : 'grunion_add_form',
- icon : 'grunion'
- });
- editor.addCommand('grunion_add_form', function() {
- if ( grunionEditorView.default_form ) {
- editor.execCommand( 'mceInsertContent', 0, '[contact-form]' + grunionEditorView.default_form + '[/contact-form]' );
- } else {
- editor.execCommand( 'mceInsertContent', 0, '[contact-form /]' );
- }
- });
- },
-
- createControl : function() {
- return null;
- },
-
- getInfo : function() {
- return {
- longname : 'Grunion Contact Form',
- author : 'Automattic',
- version : '1'
- };
- }
- });
-
- tinymce.PluginManager.add( 'grunion_form', tinymce.plugins.grunion_form );
-})(); \ No newline at end of file
diff --git a/plugins/jetpack/modules/copy-post.php b/plugins/jetpack/modules/copy-post.php
deleted file mode 100644
index 1ae33ced..00000000
--- a/plugins/jetpack/modules/copy-post.php
+++ /dev/null
@@ -1,338 +0,0 @@
-<?php
-/**
- * Module Name: Copy Post
- * Module Description: Copy an existing post's content into a new draft post
- * Jumpstart Description: Copy an existing post's content into a new draft post
- * Sort Order: 15
- * First Introduced: 7.0
- * Requires Connection: No
- * Auto Activate: No
- * Module Tags: Writing
- * Feature: Writing
- * Additional Search Queries: copy, duplicate
- */
-
-/**
- * Copy Post class.
- */
-class Jetpack_Copy_Post {
- /**
- * Jetpack_Copy_Post_By_Param constructor.
- * Add row actions to post/page/CPT listing screens.
- * Process any `?copy` param if on a create new post/page/CPT screen.
- *
- * @return void
- */
- public function __construct() {
- if ( 'edit.php' === $GLOBALS['pagenow'] ) {
- add_filter( 'post_row_actions', array( $this, 'add_row_action' ), 10, 2 );
- add_filter( 'page_row_actions', array( $this, 'add_row_action' ), 10, 2 );
- return;
- }
-
- if ( ! empty( $_GET['jetpack-copy'] ) && 'post-new.php' === $GLOBALS['pagenow'] ) {
- add_action( 'wp_insert_post', array( $this, 'update_post_data' ), 10, 3 );
- add_filter( 'pre_option_default_post_format', '__return_empty_string' );
- }
- }
-
- /**
- * Update the new (target) post data with the source post data.
- *
- * @param int $target_post_id Target post ID.
- * @param WP_Post $post Target post object (not used).
- * @param bool $update Whether this is an existing post being updated or not.
- * @return void
- */
- public function update_post_data( $target_post_id, $post, $update ) {
- // This `$update` check avoids infinite loops of trying to update our updated post.
- if ( $update ) {
- return;
- }
-
- $source_post = get_post( $_GET['jetpack-copy'] );
- if ( ! $source_post instanceof WP_Post ||
- ! $this->user_can_access_post( $source_post->ID ) ||
- ! $this->validate_post_type( $source_post ) ) {
- return;
- }
-
- $update_results = array(
- 'update_content' => $this->update_content( $source_post, $target_post_id ),
- 'update_featured_image' => $this->update_featured_image( $source_post, $target_post_id ),
- 'update_post_format' => $this->update_post_format( $source_post, $target_post_id ),
- 'update_likes_sharing' => $this->update_likes_sharing( $source_post, $target_post_id ),
- 'update_post_type_terms' => $this->update_post_type_terms( $source_post, $target_post_id ),
- );
-
- // Required to satisfy get_default_post_to_edit(), which has these filters after post creation.
- add_filter( 'default_title', array( $this, 'filter_title' ), 10, 2 );
- add_filter( 'default_content', array( $this, 'filter_content' ), 10, 2 );
- add_filter( 'default_excerpt', array( $this, 'filter_excerpt' ), 10, 2 );
-
- // Required to avoid the block editor from adding default blocks according to post format.
- add_filter( 'block_editor_settings', array( $this, 'remove_post_format_template' ) );
-
- /**
- * Fires after all updates have been performed, and default content filters have been added.
- * Allows for any cleanup or post operations, and default content filters can be removed or modified.
- *
- * @module copy-post
- *
- * @since 7.0.0
- *
- * @param WP_Post $source_post Post object that was copied.
- * @param int $target_post_id Target post ID.
- * @param array $update_results Results of all update operations, allowing action to be taken.
- */
- do_action( 'jetpack_copy_post', $source_post, $target_post_id, $update_results );
- }
-
- /**
- * Determine if the current user has edit access to the source post.
- *
- * @param int $post_id Source post ID (the post being copied).
- * @return bool True if user has the meta cap of `edit_post` for the given post ID, false otherwise.
- */
- protected function user_can_access_post( $post_id ) {
- return current_user_can( 'edit_post', $post_id );
- }
-
- /**
- * Update the target post's title, content, excerpt, categories, and tags.
- *
- * @param WP_Post $source_post Post object to be copied.
- * @param int $target_post_id Target post ID.
- * @return int 0 on failure, or the updated post ID on success.
- */
- protected function update_content( $source_post, $target_post_id ) {
- $data = array(
- 'ID' => $target_post_id,
- 'post_title' => $source_post->post_title,
- 'post_content' => $source_post->post_content,
- 'post_excerpt' => $source_post->post_excerpt,
- 'comment_status' => $source_post->comment_status,
- 'ping_status' => $source_post->ping_status,
- 'post_category' => $source_post->post_category,
- 'post_password' => $source_post->post_password,
- 'tags_input' => $source_post->tags_input,
- );
-
- /**
- * Fires just before the target post is updated with its new data.
- * Allows for final data adjustments before updating the target post.
- *
- * @module copy-post
- *
- * @since 7.0.0
- *
- * @param array $data Post data with which to update the target (new) post.
- * @param WP_Post $source_post Post object being copied.
- * @param int $target_post_id Target post ID.
- */
- $data = apply_filters( 'jetpack_copy_post_data', $data, $source_post, $target_post_id );
- return wp_update_post( $data );
- }
-
- /**
- * Update terms for post types.
- *
- * @param WP_Post $source_post Post object to be copied.
- * @param int $target_post_id Target post ID.
- * @return array Results of attempts to set each term to the target (new) post.
- */
- protected function update_post_type_terms( $source_post, $target_post_id ) {
- $results = array();
-
- $bypassed_post_types = apply_filters( 'jetpack_copy_post_bypassed_post_types', array( 'post', 'page' ), $source_post, $target_post_id );
- if ( in_array( $source_post->post_type, $bypassed_post_types, true ) ) {
- return $results;
- }
-
- $taxonomies = get_object_taxonomies( $source_post, 'objects' );
- foreach ( $taxonomies as $taxonomy ) {
- $terms = wp_get_post_terms( $source_post->ID, $taxonomy->name, array( 'fields' => 'ids' ) );
- $results[] = wp_set_post_terms( $target_post_id, $terms, $taxonomy->name );
- }
-
- return $results;
- }
-
- /**
- * Update the target post's featured image.
- *
- * @param WP_Post $source_post Post object to be copied.
- * @param int $target_post_id Target post ID.
- * @return int|bool Meta ID if the key didn't exist, true on successful update, false on failure.
- */
- protected function update_featured_image( $source_post, $target_post_id ) {
- $featured_image_id = get_post_thumbnail_id( $source_post );
- return update_post_meta( $target_post_id, '_thumbnail_id', $featured_image_id );
- }
-
- /**
- * Update the target post's post format.
- *
- * @param WP_Post $source_post Post object to be copied.
- * @param int $target_post_id Target post ID.
- * @return array|WP_Error|false WP_Error on error, array of affected term IDs on success.
- */
- protected function update_post_format( $source_post, $target_post_id ) {
- $post_format = get_post_format( $source_post );
- return set_post_format( $target_post_id, $post_format );
- }
-
- /**
- * Ensure the block editor doesn't modify the source post content for non-standard post formats.
- *
- * @param array $settings Settings to be passed into the block editor.
- * @return array Settings with any `template` key removed.
- */
- public function remove_post_format_template( $settings ) {
- unset( $settings['template'] );
- return $settings;
- }
-
- /**
- * Update the target post's Likes and Sharing statuses.
- *
- * @param WP_Post $source_post Post object to be copied.
- * @param int $target_post_id Target post ID.
- * @return array Array with the results of each update action.
- */
- protected function update_likes_sharing( $source_post, $target_post_id ) {
- $likes = get_post_meta( $source_post->ID, 'switch_like_status', true );
- $sharing = get_post_meta( $source_post->ID, 'sharing_disabled', false );
- $likes_result = update_post_meta( $target_post_id, 'switch_like_status', $likes );
- $sharing_result = update_post_meta( $target_post_id, 'sharing_disabled', $sharing );
- return array(
- 'likes' => $likes_result,
- 'sharing' => $sharing_result,
- );
- }
-
- /**
- * Update the target post's title.
- *
- * @param string $post_title Post title determined by `get_default_post_to_edit()`.
- * @param WP_Post $post Post object of newly-inserted post.
- * @return string Updated post title from source post.
- */
- public function filter_title( $post_title, $post ) {
- return $post->post_title;
- }
-
- /**
- * Update the target post's content (`post_content`).
- *
- * @param string $post_content Post content determined by `get_default_post_to_edit()`.
- * @param WP_Post $post Post object of newly-inserted post.
- * @return string Updated post content from source post.
- */
- public function filter_content( $post_content, $post ) {
- return $post->post_content;
- }
-
- /**
- * Update the target post's excerpt.
- *
- * @param string $post_excerpt Post excerpt determined by `get_default_post_to_edit()`.
- * @param WP_Post $post Post object of newly-inserted post.
- * @return string Updated post excerpt from source post.
- */
- public function filter_excerpt( $post_excerpt, $post ) {
- return $post->post_excerpt;
- }
-
- /**
- * Validate the post type to be used for the target post.
- *
- * @param WP_Post $post Post object of current post in listing.
- * @return bool True if the post type is in a list of supported psot types; false otherwise.
- */
- protected function validate_post_type( $post ) {
- /**
- * Fires when determining if the "Copy" row action should be made available.
- * Allows overriding supported post types.
- *
- * @module copy-post
- *
- * @since 7.0.0
- *
- * @param array Post types supported by default.
- * @param WP_Post $post Post object of current post in listing.
- */
- $valid_post_types = apply_filters(
- 'jetpack_copy_post_post_types',
- array(
- 'post',
- 'page',
- 'jetpack-testimonial',
- 'jetpack-portfolio',
- ),
- $post
- );
- return in_array( $post->post_type, $valid_post_types, true );
- }
-
- /**
- * Add a "Copy" row action to supported posts/pages/CPTs on list views.
- *
- * @param array $actions Existing actions.
- * @param WP_Post $post Post object of current post in list.
- * @return array Array of updated row actions.
- */
- public function add_row_action( $actions, $post ) {
- if ( ! $this->user_can_access_post( $post->ID ) ||
- ! $post instanceof WP_Post ||
- ! $this->validate_post_type( $post ) ) {
- return $actions;
- }
-
- $edit_url = add_query_arg(
- array(
- 'post_type' => $post->post_type,
- 'jetpack-copy' => $post->ID,
- ),
- admin_url( 'post-new.php' )
- );
- $edit_action = array(
- 'jetpack-copy' => sprintf(
- '<a href="%s" aria-label="%s">%s</a>',
- esc_url( $edit_url ),
- esc_attr__( 'Copy this post.', 'jetpack' ),
- esc_html__( 'Copy', 'jetpack' )
- ),
- );
-
- // Insert the Copy action before the Trash action.
- $edit_offset = array_search( 'trash', array_keys( $actions ), true );
- $updated_actions = array_merge(
- array_slice( $actions, 0, $edit_offset ),
- $edit_action,
- array_slice( $actions, $edit_offset )
- );
-
- /**
- * Fires after the new Copy action has been added to the row actions.
- * Allows changes to the action presentation, or other final checks.
- *
- * @module copy-post
- *
- * @since 7.0.0
- *
- * @param array $updated_actions Updated row actions with the Copy Post action.
- * @param array $actions Original row actions passed to this filter.
- * @param WP_Post $post Post object of current post in listing.
- */
- return apply_filters( 'jetpack_copy_post_row_actions', $updated_actions, $actions, $post );
- }
-}
-
-/**
- * Instantiate an instance of Jetpack_Copy_Post on the `admin_init` hook.
- */
-function jetpack_copy_post_init() {
- new Jetpack_Copy_Post();
-}
-add_action( 'admin_init', 'jetpack_copy_post_init' );
diff --git a/plugins/jetpack/modules/custom-content-types.php b/plugins/jetpack/modules/custom-content-types.php
deleted file mode 100644
index 665631f1..00000000
--- a/plugins/jetpack/modules/custom-content-types.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-/**
- * Module Name: Custom content types
- * Module Description: Display different types of content on your site with custom content types.
- * First Introduced: 3.1
- * Requires Connection: No
- * Auto Activate: Yes
- * Module Tags: Writing
- * Sort Order: 34
- * Feature: Writing
- * Additional Search Queries: cpt, custom post types, portfolio, portfolios, testimonial, testimonials
- */
-
-function jetpack_load_custom_post_types() {
- include dirname( __FILE__ ) . "/custom-post-types/portfolios.php";
-}
-
-function jetpack_custom_post_types_loaded() {
- Jetpack::enable_module_configurable( __FILE__ );
- Jetpack::module_configuration_load( __FILE__, 'jetpack_custom_post_types_configuration_load' );
-}
-add_action( 'jetpack_modules_loaded', 'jetpack_custom_post_types_loaded' );
-
-function jetpack_custom_post_types_configuration_load() {
- wp_safe_redirect( admin_url( 'options-writing.php#cpt-options' ) );
- exit;
-}
-
-// Add Settings Section for CPT
-function jetpack_cpt_settings_api_init() {
- add_settings_section(
- 'jetpack_cpt_section',
- '<span id="cpt-options">' . __( 'Your Custom Content Types', 'jetpack' ) . '</span>',
- 'jetpack_cpt_section_callback',
- 'writing'
- );
-}
-add_action( 'admin_init', 'jetpack_cpt_settings_api_init' );
-
-/*
- * Settings Description
- */
-function jetpack_cpt_section_callback() {
- ?>
- <p>
- <?php esc_html_e( 'Use these settings to display different types of content on your site.', 'jetpack' ); ?>
- <a target="_blank" href="http://jetpack.com/support/custom-content-types/"><?php esc_html_e( 'Learn More', 'jetpack' ); ?></a>
- </p>
- <?php
-}
-
-jetpack_load_custom_post_types();
diff --git a/plugins/jetpack/modules/custom-css.php b/plugins/jetpack/modules/custom-css.php
deleted file mode 100644
index 940ef0ba..00000000
--- a/plugins/jetpack/modules/custom-css.php
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-
-/**
- * Module Name: Custom CSS
- * Module Description: Tweak your site’s CSS without modifying your theme.
- * Sort Order: 2
- * First Introduced: 1.7
- * Requires Connection: No
- * Auto Activate: Yes
- * Module Tags: Appearance
- * Feature: Appearance
- * Additional Search Queries: css, customize, custom, style, editor, less, sass, preprocessor, font, mobile, appearance, theme, stylesheet
- */
-
-function jetpack_load_custom_css() {
- // If WordPress has the core version of Custom CSS, load our new version.
- // @see https://core.trac.wordpress.org/changeset/38829
- if ( function_exists( 'wp_get_custom_css' ) ) {
- if ( ! function_exists( 'wp_update_custom_css_post' ) ) {
- wp_die( 'Please run a SVN up to get the latest version of trunk, or update to at least 4.7 RC1' );
- }
- if ( ! Jetpack_Options::get_option( 'custom_css_4.7_migration' ) ) {
- include_once dirname( __FILE__ ) . '/custom-css/migrate-to-core.php';
- }
-
- // TODO: DELETE THIS
- else {
- if ( defined( 'WP_CLI' ) && WP_CLI ) {
- function jetpack_custom_css_undo_data_migration_cli() {
- Jetpack_Options::delete_option( 'custom_css_4.7_migration' );
- WP_CLI::success( __( 'Option deleted, re-migrate via `wp jetpack custom-css migrate`.', 'jetpack' ) );
- }
- WP_CLI::add_command( 'jetpack custom-css undo-migrate', 'jetpack_custom_css_undo_data_migration_cli' );
- }
- }
- // TODO: END DELETE THIS
-
- include_once dirname( __FILE__ ) . '/custom-css/custom-css/preprocessors.php';
- include_once dirname( __FILE__ ) . '/custom-css/custom-css-4.7.php';
- return;
- }
-
- include_once dirname( __FILE__ ) . "/custom-css/custom-css.php";
- add_action( 'init', array( 'Jetpack_Custom_CSS', 'init' ) );
-}
-
-add_action( 'jetpack_modules_loaded', 'custom_css_loaded' );
-
-function custom_css_loaded() {
- Jetpack::enable_module_configurable( __FILE__ );
- Jetpack::module_configuration_load( __FILE__, 'custom_css_configuration_load' );
- add_filter( 'jetpack_module_configuration_url_custom-css', 'jetpack_custom_css_configuration_url' );
-}
-
-/**
- * Overrides default configuration url
- *
- * @uses admin_url
- * @return string module settings URL
- */
-function jetpack_custom_css_configuration_url() {
- // Redirect to Core's CSS editor in the customizer if the feature is available.
- if ( function_exists( 'wp_get_custom_css' ) ) {
- $configuration_link = Jetpack_Custom_CSS_Enhancements::customizer_link(
- array(
- 'return_url' => wp_get_referer(),
- )
- );
- } else {
- $configuration_link = admin_url( 'themes.php?page=editcss#settingsdiv' );
- }
-
- return $configuration_link;
-}
-
-function custom_css_configuration_load() {
- // Redirect to Core's CSS editor in the customizer if the feature is available.
- if ( function_exists( 'wp_get_custom_css' ) ) {
- $configuration_link = Jetpack_Custom_CSS_Enhancements::customizer_link(
- array(
- 'return_url' => wp_get_referer(),
- )
- );
- } else {
- $configuration_link = admin_url( 'themes.php?page=editcss#settingsdiv' );
- }
-
- wp_safe_redirect( $configuration_link );
- exit;
-}
-
-jetpack_load_custom_css();
diff --git a/plugins/jetpack/modules/custom-css/csstidy/class.csstidy.php b/plugins/jetpack/modules/custom-css/csstidy/class.csstidy.php
deleted file mode 100644
index e92669da..00000000
--- a/plugins/jetpack/modules/custom-css/csstidy/class.csstidy.php
+++ /dev/null
@@ -1,1246 +0,0 @@
-<?php
-/**
- * CSSTidy - CSS Parser and Optimiser
- *
- * CSS Parser class
- *
- * Copyright 2005, 2006, 2007 Florian Schmitz
- *
- * This file is part of CSSTidy.
- *
- * CSSTidy is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
- *
- * CSSTidy is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * @license http://opensource.org/licenses/lgpl-license.php GNU Lesser General Public License
- * @package csstidy
- * @author Florian Schmitz (floele at gmail dot com) 2005-2007
- * @author Brett Zamir (brettz9 at yahoo dot com) 2007
- * @author Nikolay Matsievsky (speed at webo dot name) 2009-2010
- * @author Cedric Morin (cedric at yterium dot com) 2010
- */
-/**
- * Defines ctype functions if required
- *
- * @version 1.0
- */
-require_once( dirname( __FILE__ ) . '/class.csstidy_ctype.php' );
-
-/**
- * Various CSS data needed for correct optimisations etc.
- *
- * @version 1.3
- */
-require( dirname( __FILE__ ) . '/data.inc.php' );
-
-/**
- * Contains a class for printing CSS code
- *
- * @version 1.0
- */
-require( dirname( __FILE__ ) . '/class.csstidy_print.php' );
-
-/**
- * Contains a class for optimising CSS code
- *
- * @version 1.0
- */
-require( dirname( __FILE__ ) . '/class.csstidy_optimise.php' );
-
-/**
- * CSS Parser class
- *
-
- * This class represents a CSS parser which reads CSS code and saves it in an array.
- * In opposite to most other CSS parsers, it does not use regular expressions and
- * thus has full CSS2 support and a higher reliability.
- * Additional to that it applies some optimisations and fixes to the CSS code.
- * An online version should be available here: http://cdburnerxp.se/cssparse/css_optimiser.php
- * @package csstidy
- * @author Florian Schmitz (floele at gmail dot com) 2005-2006
- * @version 1.3.1
- */
-class csstidy {
-
- /**
- * Saves the parsed CSS. This array is empty if preserve_css is on.
- * @var array
- * @access public
- */
- public $css = array();
- /**
- * Saves the parsed CSS (raw)
- * @var array
- * @access private
- */
- public $tokens = array();
- /**
- * Printer class
- * @see csstidy_print
- * @var object
- * @access public
- */
- public $print;
- /**
- * Optimiser class
- * @see csstidy_optimise
- * @var object
- * @access private
- */
- public $optimise;
- /**
- * Saves the CSS charset (@charset)
- * @var string
- * @access private
- */
- public $charset = '';
- /**
- * Saves all @import URLs
- * @var array
- * @access private
- */
- public $import = array();
- /**
- * Saves the namespace
- * @var string
- * @access private
- */
- public $namespace = '';
- /**
- * Contains the version of csstidy
- * @var string
- * @access private
- */
- public $version = '1.3';
- /**
- * Stores the settings
- * @var array
- * @access private
- */
- public $settings = array();
- /**
- * Saves the parser-status.
- *
- * Possible values:
- * - is = in selector
- * - ip = in property
- * - iv = in value
- * - instr = in string (started at " or ' or ( )
- * - ic = in comment (ignore everything)
- * - at = in @-block
- *
- * @var string
- * @access private
- */
- public $status = 'is';
- /**
- * Saves the current at rule (@media)
- * @var string
- * @access private
- */
- public $at = '';
- /**
- * Saves the current selector
- * @var string
- * @access private
- */
- public $selector = '';
- /**
- * Saves the current property
- * @var string
- * @access private
- */
- public $property = '';
- /**
- * Saves the position of , in selectors
- * @var array
- * @access private
- */
- public $sel_separate = array();
- /**
- * Saves the current value
- * @var string
- * @access private
- */
- public $value = '';
- /**
- * Saves the current sub-value
- *
- * Example for a subvalue:
- * background:url(foo.png) red no-repeat;
- * "url(foo.png)", "red", and "no-repeat" are subvalues,
- * separated by whitespace
- * @var string
- * @access private
- */
- public $sub_value = '';
- /**
- * Array which saves all subvalues for a property.
- * @var array
- * @see sub_value
- * @access private
- */
- public $sub_value_arr = array();
- /**
- * Saves the stack of characters that opened the current strings
- * @var array
- * @access private
- */
- public $str_char = array();
- public $cur_string = array();
- /**
- * Status from which the parser switched to ic or instr
- * @var array
- * @access private
- */
- public $from = array();
- /**
- /**
- * =true if in invalid at-rule
- * @var bool
- * @access private
- */
- public $invalid_at = false;
- /**
- * =true if something has been added to the current selector
- * @var bool
- * @access private
- */
- public $added = false;
- /**
- * Array which saves the message log
- * @var array
- * @access private
- */
- public $log = array();
- /**
- * Saves the line number
- * @var integer
- * @access private
- */
- public $line = 1;
- /**
- * Marks if we need to leave quotes for a string
- * @var array
- * @access private
- */
- public $quoted_string = array();
-
- /**
- * List of tokens
- * @var string
- */
- public $tokens_list = "";
-
- /**
- * Loads standard template and sets default settings
- * @access private
- * @version 1.3
- */
- function __construct() {
- $this->settings['remove_bslash'] = true;
- $this->settings['compress_colors'] = true;
- $this->settings['compress_font-weight'] = true;
- $this->settings['lowercase_s'] = false;
- /*
- 1 common shorthands optimization
- 2 + font property optimization
- 3 + background property optimization
- */
- $this->settings['optimise_shorthands'] = 1;
- $this->settings['remove_last_;'] = true;
- /* rewrite all properties with low case, better for later gzip OK, safe*/
- $this->settings['case_properties'] = 1;
- /* sort properties in alpabetic order, better for later gzip
- * but can cause trouble in case of overiding same propertie or using hack
- */
- $this->settings['sort_properties'] = false;
- /*
- 1, 3, 5, etc -- enable sorting selectors inside @media: a{}b{}c{}
- 2, 5, 8, etc -- enable sorting selectors inside one CSS declaration: a,b,c{}
- preserve order by default cause it can break functionnality
- */
- $this->settings['sort_selectors'] = 0;
- /* is dangeroues to be used: CSS is broken sometimes */
- $this->settings['merge_selectors'] = 0;
- /* preserve or not browser hacks */
- $this->settings['discard_invalid_selectors'] = false;
- $this->settings['discard_invalid_properties'] = false;
- $this->settings['css_level'] = 'CSS2.1';
- $this->settings['preserve_css'] = false;
- $this->settings['timestamp'] = false;
- $this->settings['template'] = ''; // say that propertie exist
- $this->set_cfg('template','default'); // call load_template
- $this->optimise = new csstidy_optimise($this);
-
- $this->tokens_list = & $GLOBALS['csstidy']['tokens'];
- }
-
- function csstidy() {
- $this->__construct();
- }
-
- /**
- * Get the value of a setting.
- * @param string $setting
- * @access public
- * @return mixed
- * @version 1.0
- */
- function get_cfg($setting) {
- if (isset($this->settings[$setting])) {
- return $this->settings[$setting];
- }
- return false;
- }
-
- /**
- * Load a template
- * @param string $template used by set_cfg to load a template via a configuration setting
- * @access private
- * @version 1.4
- */
- function _load_template($template) {
- switch ($template) {
- case 'default':
- $this->load_template('default');
- break;
-
- case 'highest':
- $this->load_template('highest_compression');
- break;
-
- case 'high':
- $this->load_template('high_compression');
- break;
-
- case 'low':
- $this->load_template('low_compression');
- break;
-
- default:
- $this->load_template($template);
- break;
- }
- }
-
- /**
- * Set the value of a setting.
- * @param string $setting
- * @param mixed $value
- * @access public
- * @return bool
- * @version 1.0
- */
- function set_cfg($setting, $value=null) {
- if (is_array($setting) && $value === null) {
- foreach ($setting as $setprop => $setval) {
- $this->settings[$setprop] = $setval;
- }
- if (array_key_exists('template', $setting)) {
- $this->_load_template($this->settings['template']);
- }
- return true;
- } else if (isset($this->settings[$setting]) && $value !== '') {
- $this->settings[$setting] = $value;
- if ($setting === 'template') {
- $this->_load_template($this->settings['template']);
- }
- return true;
- }
- return false;
- }
-
- /**
- * Adds a token to $this->tokens
- * @param mixed $type
- * @param string $data
- * @param bool $do add a token even if preserve_css is off
- * @access private
- * @version 1.0
- */
- function _add_token($type, $data, $do = false) {
- if ($this->get_cfg('preserve_css') || $do) {
- $this->tokens[] = array($type, ($type == COMMENT) ? $data : trim($data));
- }
- }
-
- /**
- * Add a message to the message log
- * @param string $message
- * @param string $type
- * @param integer $line
- * @access private
- * @version 1.0
- */
- function log($message, $type, $line = -1) {
- if ($line === -1) {
- $line = $this->line;
- }
- $line = intval($line);
- $add = array('m' => $message, 't' => $type);
- if (!isset($this->log[$line]) || !in_array($add, $this->log[$line])) {
- $this->log[$line][] = $add;
- }
- }
-
- /**
- * Parse unicode notations and find a replacement character
- * @param string $string
- * @param integer $i
- * @access private
- * @return string
- * @version 1.2
- */
- function _unicode(&$string, &$i) {
- ++$i;
- $add = '';
- $replaced = false;
-
- while ($i < strlen($string) && (ctype_xdigit($string{$i}) || ctype_space($string{$i})) && strlen($add) < 6) {
- $add .= $string{$i};
-
- if (ctype_space($string{$i})) {
- break;
- }
- $i++;
- }
-
- if (hexdec($add) > 47 && hexdec($add) < 58 || hexdec($add) > 64 && hexdec($add) < 91 || hexdec($add) > 96 && hexdec($add) < 123) {
- $this->log('Replaced unicode notation: Changed \\' . $add . ' to ' . chr(hexdec($add)), 'Information');
- $add = chr(hexdec($add));
- $replaced = true;
- } else {
- $add = trim('\\' . $add);
- }
-
- if (@ctype_xdigit($string{$i + 1}) && ctype_space($string{$i})
- && !$replaced || !ctype_space($string{$i})) {
- $i--;
- }
-
- if ($add !== '\\' || !$this->get_cfg('remove_bslash') || strpos($this->tokens_list, $string{$i + 1}) !== false) {
- return $add;
- }
-
- if ($add === '\\') {
- $this->log('Removed unnecessary backslash', 'Information');
- }
- return '';
- }
-
- /**
- * Write formatted output to a file
- * @param string $filename
- * @param string $doctype when printing formatted, is a shorthand for the document type
- * @param bool $externalcss when printing formatted, indicates whether styles to be attached internally or as an external stylesheet
- * @param string $title when printing formatted, is the title to be added in the head of the document
- * @param string $lang when printing formatted, gives a two-letter language code to be added to the output
- * @access public
- * @version 1.4
- */
- function write_page($filename, $doctype='xhtml1.1', $externalcss=true, $title='', $lang='en') {
- $this->write($filename, true);
- }
-
- /**
- * Write plain output to a file
- * @param string $filename
- * @param bool $formatted whether to print formatted or not
- * @param string $doctype when printing formatted, is a shorthand for the document type
- * @param bool $externalcss when printing formatted, indicates whether styles to be attached internally or as an external stylesheet
- * @param string $title when printing formatted, is the title to be added in the head of the document
- * @param string $lang when printing formatted, gives a two-letter language code to be added to the output
- * @param bool $pre_code whether to add pre and code tags around the code (for light HTML formatted templates)
- * @access public
- * @version 1.4
- */
- function write($filename, $formatted=false, $doctype='xhtml1.1', $externalcss=true, $title='', $lang='en', $pre_code=true) {
- $filename .= ( $formatted) ? '.xhtml' : '.css';
-
- if (!is_dir('temp')) {
- $madedir = mkdir('temp');
- if (!$madedir) {
- print 'Could not make directory "temp" in ' . dirname(__FILE__);
- exit;
- }
- }
- $handle = fopen('temp/' . $filename, 'w');
- if ($handle) {
- if (!$formatted) {
- fwrite($handle, $this->print->plain());
- } else {
- fwrite($handle, $this->print->formatted_page($doctype, $externalcss, $title, $lang, $pre_code));
- }
- }
- fclose($handle);
- }
-
- /**
- * Loads a new template
- * @param string $content either filename (if $from_file == true), content of a template file, "high_compression", "highest_compression", "low_compression", or "default"
- * @param bool $from_file uses $content as filename if true
- * @access public
- * @version 1.1
- * @see http://csstidy.sourceforge.net/templates.php
- */
- function load_template($content, $from_file=true) {
- $predefined_templates = & $GLOBALS['csstidy']['predefined_templates'];
- if ($content === 'high_compression' || $content === 'default' || $content === 'highest_compression' || $content === 'low_compression') {
- $this->template = $predefined_templates[$content];
- return;
- }
-
-
- if ($from_file) {
- $content = strip_tags(file_get_contents($content), '<span>');
- }
- $content = str_replace("\r\n", "\n", $content); // Unify newlines (because the output also only uses \n)
- $template = explode('|', $content);
-
- for ($i = 0; $i < count($template); $i++) {
- $this->template[$i] = $template[$i];
- }
- }
-
- /**
- * Starts parsing from URL
- * @param string $url
- * @access public
- * @version 1.0
- */
- function parse_from_url($url) {
- return $this->parse(@file_get_contents($url));
- }
-
- /**
- * Checks if there is a token at the current position
- * @param string $string
- * @param integer $i
- * @access public
- * @version 1.11
- */
- function is_token(&$string, $i) {
- return (strpos($this->tokens_list, $string{$i}) !== false && !csstidy::escaped($string, $i));
- }
-
- /**
- * Parses CSS in $string. The code is saved as array in $this->css
- * @param string $string the CSS code
- * @access public
- * @return bool
- * @version 1.1
- */
- function parse($string) {
- // Temporarily set locale to en_US in order to handle floats properly
- $old = @setlocale(LC_ALL, 0);
- @setlocale(LC_ALL, 'C');
-
- // PHP bug? Settings need to be refreshed in PHP4
- $this->print = new csstidy_print($this);
- //$this->optimise = new csstidy_optimise($this);
-
- $all_properties = & $GLOBALS['csstidy']['all_properties'];
- $at_rules = & $GLOBALS['csstidy']['at_rules'];
- $quoted_string_properties = & $GLOBALS['csstidy']['quoted_string_properties'];
-
- $this->css = array();
- $this->print->input_css = $string;
- $string = str_replace("\r\n", "\n", $string) . ' ';
- $cur_comment = '';
-
- for ($i = 0, $size = strlen($string); $i < $size; $i++) {
- if ($string{$i} === "\n" || $string{$i} === "\r") {
- ++$this->line;
- }
-
- switch ($this->status) {
- /* Case in at-block */
- case 'at':
- if (csstidy::is_token($string, $i)) {
- if ($string{$i} === '/' && @$string{$i + 1} === '*') {
- $this->status = 'ic';
- ++$i;
- $this->from[] = 'at';
- } elseif ($string{$i} === '{') {
- $this->status = 'is';
- $this->at = $this->css_new_media_section($this->at);
- $this->_add_token(AT_START, $this->at);
- } elseif ($string{$i} === ',') {
- $this->at = trim($this->at) . ',';
- } elseif ($string{$i} === '\\') {
- $this->at .= $this->_unicode($string, $i);
- }
- // fix for complicated media, i.e @media screen and (-webkit-min-device-pixel-ratio:1.5)
- // '/' is included for ratios in Opera: (-o-min-device-pixel-ratio: 3/2)
- elseif (in_array($string{$i}, array('(', ')', ':', '.', '/'))) {
- $this->at .= $string{$i};
- }
- } else {
- $lastpos = strlen($this->at) - 1;
- if (!( (ctype_space($this->at{$lastpos}) || csstidy::is_token($this->at, $lastpos) && $this->at{$lastpos} === ',') && ctype_space($string{$i}))) {
- $this->at .= $string{$i};
- }
- }
- break;
-
- /* Case in-selector */
- case 'is':
- if (csstidy::is_token($string, $i)) {
- if ($string{$i} === '/' && @$string{$i + 1} === '*' && trim($this->selector) == '') {
- $this->status = 'ic';
- ++$i;
- $this->from[] = 'is';
- } elseif ($string{$i} === '@' && trim($this->selector) == '') {
- // Check for at-rule
- $this->invalid_at = true;
- foreach ($at_rules as $name => $type) {
- if (!strcasecmp(substr($string, $i + 1, strlen($name)), $name)) {
- ($type === 'at') ? $this->at = '@' . $name : $this->selector = '@' . $name;
- $this->status = $type;
- $i += strlen($name);
- $this->invalid_at = false;
- }
- }
-
- if ($this->invalid_at) {
- $this->selector = '@';
- $invalid_at_name = '';
- for ($j = $i + 1; $j < $size; ++$j) {
- if (!ctype_alpha($string{$j})) {
- break;
- }
- $invalid_at_name .= $string{$j};
- }
- $this->log('Invalid @-rule: ' . $invalid_at_name . ' (removed)', 'Warning');
- }
- } elseif (($string{$i} === '"' || $string{$i} === "'")) {
- $this->cur_string[] = $string{$i};
- $this->status = 'instr';
- $this->str_char[] = $string{$i};
- $this->from[] = 'is';
- /* fixing CSS3 attribute selectors, i.e. a[href$=".mp3" */
- $this->quoted_string[] = ($string{$i - 1} == '=' );
- } elseif ($this->invalid_at && $string{$i} === ';') {
- $this->invalid_at = false;
- $this->status = 'is';
- } elseif ($string{$i} === '{') {
- $this->status = 'ip';
- if($this->at == '') {
- $this->at = $this->css_new_media_section(DEFAULT_AT);
- }
- $this->selector = $this->css_new_selector($this->at,$this->selector);
- $this->_add_token(SEL_START, $this->selector);
- $this->added = false;
- } elseif ($string{$i} === '}') {
- $this->_add_token(AT_END, $this->at);
- $this->at = '';
- $this->selector = '';
- $this->sel_separate = array();
- } elseif ($string{$i} === ',') {
- $this->selector = trim($this->selector) . ',';
- $this->sel_separate[] = strlen($this->selector);
- } elseif ($string{$i} === '\\') {
- $this->selector .= $this->_unicode($string, $i);
- } elseif ($string{$i} === '*' && @in_array($string{$i + 1}, array('.', '#', '[', ':'))) {
- // remove unnecessary universal selector, FS#147
- } else {
- $this->selector .= $string{$i};
- }
- } else {
- $lastpos = strlen($this->selector) - 1;
- if ($lastpos == -1 || !( (ctype_space($this->selector{$lastpos}) || csstidy::is_token($this->selector, $lastpos) && $this->selector{$lastpos} === ',') && ctype_space($string{$i}))) {
- $this->selector .= $string{$i};
- }
- else if (ctype_space($string{$i}) && $this->get_cfg('preserve_css') && !$this->get_cfg('merge_selectors')) {
- $this->selector .= $string{$i};
- }
- }
- break;
-
- /* Case in-property */
- case 'ip':
- if (csstidy::is_token($string, $i)) {
- if (($string{$i} === ':' || $string{$i} === '=') && $this->property != '') {
- $this->status = 'iv';
- if (!$this->get_cfg('discard_invalid_properties') || csstidy::property_is_valid($this->property)) {
- $this->property = $this->css_new_property($this->at,$this->selector,$this->property);
- $this->_add_token(PROPERTY, $this->property);
- }
- } elseif ($string{$i} === '/' && @$string{$i + 1} === '*' && $this->property == '') {
- $this->status = 'ic';
- ++$i;
- $this->from[] = 'ip';
- } elseif ($string{$i} === '}') {
- $this->explode_selectors();
- $this->status = 'is';
- $this->invalid_at = false;
- $this->_add_token(SEL_END, $this->selector);
- $this->selector = '';
- $this->property = '';
- } elseif ($string{$i} === ';') {
- $this->property = '';
- } elseif ($string{$i} === '\\') {
- $this->property .= $this->_unicode($string, $i);
- }
- // else this is dumb IE a hack, keep it
- elseif ($this->property=='' AND !ctype_space($string{$i})) {
- $this->property .= $string{$i};
- }
- }
- elseif (!ctype_space($string{$i})) {
- $this->property .= $string{$i};
- }
- break;
-
- /* Case in-value */
- case 'iv':
- $pn = (($string{$i} === "\n" || $string{$i} === "\r") && $this->property_is_next($string, $i + 1) || $i == strlen($string) - 1);
- if ((csstidy::is_token($string, $i) || $pn) && (!($string{$i} == ',' && !ctype_space($string{$i+1})))) {
- if ($string{$i} === '/' && @$string{$i + 1} === '*') {
- $this->status = 'ic';
- ++$i;
- $this->from[] = 'iv';
- } elseif (($string{$i} === '"' || $string{$i} === "'" || $string{$i} === '(')) {
- $this->cur_string[] = $string{$i};
- $this->str_char[] = ($string{$i} === '(') ? ')' : $string{$i};
- $this->status = 'instr';
- $this->from[] = 'iv';
- $this->quoted_string[] = in_array(strtolower($this->property), $quoted_string_properties);
- } elseif ($string{$i} === ',') {
- $this->sub_value = trim($this->sub_value) . ',';
- } elseif ($string{$i} === '\\') {
- $this->sub_value .= $this->_unicode($string, $i);
- } elseif ($string{$i} === ';' || $pn) {
- if ($this->selector{0} === '@' && isset($at_rules[substr($this->selector, 1)]) && $at_rules[substr($this->selector, 1)] === 'iv') {
- $this->status = 'is';
-
- switch ($this->selector) {
- case '@charset':
- /* Add quotes to charset */
- $this->sub_value_arr[] = '"' . trim($this->sub_value) . '"';
- $this->charset = $this->sub_value_arr[0];
- break;
- case '@namespace':
- /* Add quotes to namespace */
- $this->sub_value_arr[] = '"' . trim($this->sub_value) . '"';
- $this->namespace = implode(' ', $this->sub_value_arr);
- break;
- case '@import':
- $this->sub_value = trim($this->sub_value);
-
- if (empty($this->sub_value_arr)) {
- // Quote URLs in imports only if they're not already inside url() and not already quoted.
- if (substr($this->sub_value, 0, 4) != 'url(') {
- if (!($this->sub_value{0} == substr($this->sub_value, -1) && in_array($this->sub_value{0}, array("'", '"')))) {
- $this->sub_value = '"' . $this->sub_value . '"';
- }
- }
- }
-
- $this->sub_value_arr[] = $this->sub_value;
- $this->import[] = implode(' ', $this->sub_value_arr);
- break;
- }
-
- $this->sub_value_arr = array();
- $this->sub_value = '';
- $this->selector = '';
- $this->sel_separate = array();
- } else {
- $this->status = 'ip';
- }
- } elseif ($string{$i} !== '}') {
- $this->sub_value .= $string{$i};
- }
- if (($string{$i} === '}' || $string{$i} === ';' || $pn) && !empty($this->selector)) {
- if ($this->at == '') {
- $this->at = $this->css_new_media_section(DEFAULT_AT);
- }
-
- // case settings
- if ($this->get_cfg('lowercase_s')) {
- $this->selector = strtolower($this->selector);
- }
- $this->property = strtolower($this->property);
-
- $this->optimise->subvalue();
- if ($this->sub_value != '') {
- if (substr($this->sub_value, 0, 6) == 'format') {
- $format_strings = csstidy::parse_string_list(substr($this->sub_value, 7, -1));
- if (!$format_strings) {
- $this->sub_value = "";
- }
- else {
- $this->sub_value = "format(";
-
- foreach ($format_strings as $format_string) {
- $this->sub_value .= '"' . str_replace('"', '\\"', $format_string) . '",';
- }
-
- $this->sub_value = substr($this->sub_value, 0, -1) . ")";
- }
- }
- if ($this->sub_value != '') {
- $this->sub_value_arr[] = $this->sub_value;
- }
- $this->sub_value = '';
- }
-
- $this->value = array_shift($this->sub_value_arr);
- while(count($this->sub_value_arr)){
- //$this->value .= (substr($this->value,-1,1)==','?'':' ').array_shift($this->sub_value_arr);
- $this->value .= ' '.array_shift($this->sub_value_arr);
- }
-
- $this->optimise->value();
-
- $valid = csstidy::property_is_valid($this->property);
- if ((!$this->invalid_at || $this->get_cfg('preserve_css')) && (!$this->get_cfg('discard_invalid_properties') || $valid)) {
- $this->css_add_property($this->at, $this->selector, $this->property, $this->value);
- $this->_add_token(VALUE, $this->value);
- $this->optimise->shorthands();
- }
- if (!$valid) {
- if ($this->get_cfg('discard_invalid_properties')) {
- $this->log('Removed invalid property: ' . $this->property, 'Warning');
- } else {
- $this->log('Invalid property in ' . strtoupper($this->get_cfg('css_level')) . ': ' . $this->property, 'Warning');
- }
- }
-
- $this->property = '';
- $this->sub_value_arr = array();
- $this->value = '';
- }
- if ($string{$i} === '}') {
- $this->explode_selectors();
- $this->_add_token(SEL_END, $this->selector);
- $this->status = 'is';
- $this->invalid_at = false;
- $this->selector = '';
- }
- } elseif (!$pn) {
- $this->sub_value .= $string{$i};
-
- if (ctype_space($string{$i}) || $string{$i} == ',') {
- $this->optimise->subvalue();
- if ($this->sub_value != '') {
- $this->sub_value_arr[] = $this->sub_value;
- $this->sub_value = '';
- }
- }
- }
- break;
-
- /* Case in string */
- case 'instr':
- $_str_char = $this->str_char[count($this->str_char)-1];
- $_cur_string = $this->cur_string[count($this->cur_string)-1];
- $temp_add = $string{$i};
-
- // Add another string to the stack. Strings can't be nested inside of quotes, only parentheses, but
- // parentheticals can be nested more than once.
- if ($_str_char === ")" && ($string{$i} === "(" || $string{$i} === '"' || $string{$i} === '\'') && !csstidy::escaped($string, $i)) {
- $this->cur_string[] = $string{$i};
- $this->str_char[] = $string{$i} == "(" ? ")" : $string{$i};
- $this->from[] = 'instr';
- $this->quoted_string[] = !($string{$i} === "(");
- continue 2;
- }
-
- if ($_str_char !== ")" && ($string{$i} === "\n" || $string{$i} === "\r") && !($string{$i - 1} === '\\' && !csstidy::escaped($string, $i - 1))) {
- $temp_add = "\\A";
- $this->log('Fixed incorrect newline in string', 'Warning');
- }
-
- $_cur_string .= $temp_add;
-
- if ($string{$i} === $_str_char && !csstidy::escaped($string, $i)) {
- $_quoted_string = array_pop($this->quoted_string);
-
- $this->status = array_pop($this->from);
-
- if (!preg_match('|[' . implode('', $GLOBALS['csstidy']['whitespace']) . ']|uis', $_cur_string) && $this->property !== 'content') {
- if (!$_quoted_string) {
- if ($_str_char !== ')') {
- // Convert properties like
- // font-family: 'Arial';
- // to
- // font-family: Arial;
- // or
- // url("abc")
- // to
- // url(abc)
- $_cur_string = substr($_cur_string, 1, -1);
- }
- } else {
- $_quoted_string = false;
- }
- }
-
- array_pop($this->cur_string);
- array_pop($this->str_char);
-
- if ($_str_char === ")") {
- $_cur_string = "(" . trim(substr($_cur_string, 1, -1)) . ")";
- }
-
- if ($this->status === 'iv') {
- if (!$_quoted_string){
- if (strpos($_cur_string,',')!==false)
- // we can on only remove space next to ','
- $_cur_string = implode(',',array_map('trim',explode(',',$_cur_string)));
- // and multiple spaces (too expensive)
- if (strpos($_cur_string,' ')!==false)
- $_cur_string = preg_replace(",\s+,"," ",$_cur_string);
- }
- $this->sub_value .= $_cur_string;
- } elseif ($this->status === 'is') {
- $this->selector .= $_cur_string;
- } elseif ($this->status === 'instr') {
- $this->cur_string[count($this->cur_string)-1] .= $_cur_string;
- }
- }
- else {
- $this->cur_string[count($this->cur_string)-1] = $_cur_string;
- }
- break;
-
- /* Case in-comment */
- case 'ic':
- if ($string{$i} === '*' && $string{$i + 1} === '/') {
- $this->status = array_pop($this->from);
- $i++;
- $this->_add_token(COMMENT, $cur_comment);
- $cur_comment = '';
- } else {
- $cur_comment .= $string{$i};
- }
- break;
- }
- }
-
- $this->optimise->postparse();
-
- $this->print->_reset();
-
- @setlocale(LC_ALL, $old); // Set locale back to original setting
-
- return!(empty($this->css) && empty($this->import) && empty($this->charset) && empty($this->tokens) && empty($this->namespace));
- }
-
- /**
- * Explodes selectors
- * @access private
- * @version 1.0
- */
- function explode_selectors() {
- // Explode multiple selectors
- if ($this->get_cfg('merge_selectors') === 1) {
- $new_sels = array();
- $lastpos = 0;
- $this->sel_separate[] = strlen($this->selector);
- foreach ($this->sel_separate as $num => $pos) {
- if ($num == count($this->sel_separate) - 1) {
- $pos += 1;
- }
-
- $new_sels[] = substr($this->selector, $lastpos, $pos - $lastpos - 1);
- $lastpos = $pos;
- }
-
- if (count($new_sels) > 1) {
- foreach ($new_sels as $selector) {
- if (isset($this->css[$this->at][$this->selector])) {
- $this->merge_css_blocks($this->at, $selector, $this->css[$this->at][$this->selector]);
- }
- }
- unset($this->css[$this->at][$this->selector]);
- }
- }
- $this->sel_separate = array();
- }
-
- /**
- * Checks if a character is escaped (and returns true if it is)
- * @param string $string
- * @param integer $pos
- * @access public
- * @return bool
- * @version 1.02
- */
- static function escaped(&$string, $pos) {
- return!(@($string{$pos - 1} !== '\\') || csstidy::escaped($string, $pos - 1));
- }
-
- /**
- * Adds a property with value to the existing CSS code
- * @param string $media
- * @param string $selector
- * @param string $property
- * @param string $new_val
- * @access private
- * @version 1.2
- */
- function css_add_property($media, $selector, $property, $new_val) {
- if ($this->get_cfg('preserve_css') || trim($new_val) == '') {
- return;
- }
-
- $this->added = true;
- if (isset($this->css[$media][$selector][$property])) {
- if ((csstidy::is_important($this->css[$media][$selector][$property]) && csstidy::is_important($new_val)) || !csstidy::is_important($this->css[$media][$selector][$property])) {
- $this->css[$media][$selector][$property] = trim($new_val);
- }
- } else {
- $this->css[$media][$selector][$property] = trim($new_val);
- }
- }
-
- /**
- * Start a new media section.
- * Check if the media is not already known,
- * else rename it with extra spaces
- * to avoid merging
- *
- * @param string $media
- * @return string
- */
- function css_new_media_section($media){
- if($this->get_cfg('preserve_css')) {
- return $media;
- }
-
- // if the last @media is the same as this
- // keep it
- if (!$this->css OR !is_array($this->css) OR empty($this->css)){
- return $media;
- }
- end($this->css);
- $at = current( $this->css );
- if ($at == $media){
- return $media;
- }
- while (isset($this->css[$media]))
- if (is_numeric($media))
- $media++;
- else
- $media .= " ";
- return $media;
- }
-
- /**
- * Start a new selector.
- * If already referenced in this media section,
- * rename it with extra space to avoid merging
- * except if merging is required,
- * or last selector is the same (merge siblings)
- *
- * never merge @font-face
- *
- * @param string $media
- * @param string $selector
- * @return string
- */
- function css_new_selector($media,$selector){
- if($this->get_cfg('preserve_css')) {
- return $selector;
- }
- $selector = trim($selector);
- if (strncmp($selector,"@font-face",10)!=0){
- if ($this->settings['merge_selectors'] != false)
- return $selector;
-
- if (!$this->css OR !isset($this->css[$media]) OR !$this->css[$media])
- return $selector;
-
- // if last is the same, keep it
- end($this->css[$media]);
- $sel = current( $this->css[$media] );
- if ($sel == $selector){
- return $selector;
- }
- }
-
- while (isset($this->css[$media][$selector]))
- $selector .= " ";
- return $selector;
- }
-
- /**
- * Start a new propertie.
- * If already references in this selector,
- * rename it with extra space to avoid override
- *
- * @param string $media
- * @param string $selector
- * @param string $property
- * @return string
- */
- function css_new_property($media, $selector, $property){
- if($this->get_cfg('preserve_css')) {
- return $property;
- }
- if (!$this->css OR !isset($this->css[$media][$selector]) OR !$this->css[$media][$selector])
- return $property;
-
- while (isset($this->css[$media][$selector][$property]))
- $property .= " ";
-
- return $property;
- }
-
- /**
- * Adds CSS to an existing media/selector
- * @param string $media
- * @param string $selector
- * @param array $css_add
- * @access private
- * @version 1.1
- */
- function merge_css_blocks($media, $selector, $css_add) {
- foreach ($css_add as $property => $value) {
- $this->css_add_property($media, $selector, $property, $value, false);
- }
- }
-
- /**
- * Checks if $value is !important.
- * @param string $value
- * @return bool
- * @access public
- * @version 1.0
- */
- static function is_important(&$value) {
- return (!strcasecmp(substr(str_replace($GLOBALS['csstidy']['whitespace'], '', $value), -10, 10), '!important'));
- }
-
- /**
- * Returns a value without !important
- * @param string $value
- * @return string
- * @access public
- * @version 1.0
- */
- static function gvw_important($value) {
- if (csstidy::is_important($value)) {
- $value = trim($value);
- $value = substr($value, 0, -9);
- $value = trim($value);
- $value = substr($value, 0, -1);
- $value = trim($value);
- return $value;
- }
- return $value;
- }
-
- /**
- * Checks if the next word in a string from pos is a CSS property
- * @param string $istring
- * @param integer $pos
- * @return bool
- * @access private
- * @version 1.2
- */
- function property_is_next($istring, $pos) {
- $all_properties = & $GLOBALS['csstidy']['all_properties'];
- $istring = substr($istring, $pos, strlen($istring) - $pos);
- $pos = strpos($istring, ':');
- if ($pos === false) {
- return false;
- }
- $istring = strtolower(trim(substr($istring, 0, $pos)));
- if (isset($all_properties[$istring])) {
- $this->log('Added semicolon to the end of declaration', 'Warning');
- return true;
- }
- return false;
- }
-
- /**
- * Checks if a property is valid
- * @param string $property
- * @return bool;
- * @access public
- * @version 1.0
- */
- function property_is_valid($property) {
- $property = strtolower($property);
- if (in_array(trim($property), $GLOBALS['csstidy']['multiple_properties'])) $property = trim($property);
- $all_properties = & $GLOBALS['csstidy']['all_properties'];
- return (isset($all_properties[$property]) && strpos($all_properties[$property], strtoupper($this->get_cfg('css_level'))) !== false );
- }
-
- /**
- * Accepts a list of strings (e.g., the argument to format() in a @font-face src property)
- * and returns a list of the strings. Converts things like:
- *
- * format(abc) => format("abc")
- * format(abc def) => format("abc","def")
- * format(abc "def") => format("abc","def")
- * format(abc, def, ghi) => format("abc","def","ghi")
- * format("abc",'def') => format("abc","def")
- * format("abc, def, ghi") => format("abc, def, ghi")
- *
- * @param string
- * @return array
- */
-
- function parse_string_list($value) {
- $value = trim($value);
-
- // Case: empty
- if (!$value) return array();
-
- $strings = array();
-
- $in_str = false;
- $current_string = "";
-
- for ($i = 0, $_len = strlen($value); $i < $_len; $i++) {
- if (($value{$i} == "," || $value{$i} === " ") && $in_str === true) {
- $in_str = false;
- $strings[] = $current_string;
- $current_string = "";
- }
- else if ($value{$i} == '"' || $value{$i} == "'"){
- if ($in_str === $value{$i}) {
- $strings[] = $current_string;
- $in_str = false;
- $current_string = "";
- continue;
- }
- else if (!$in_str) {
- $in_str = $value{$i};
- }
- }
- else {
- if ($in_str){
- $current_string .= $value{$i};
- }
- else {
- if (!preg_match("/[\s,]/", $value{$i})) {
- $in_str = true;
- $current_string = $value{$i};
- }
- }
- }
- }
-
- if ($current_string) {
- $strings[] = $current_string;
- }
-
- return $strings;
- }
-}
diff --git a/plugins/jetpack/modules/custom-css/csstidy/class.csstidy_ctype.php b/plugins/jetpack/modules/custom-css/csstidy/class.csstidy_ctype.php
deleted file mode 100644
index bc5accc5..00000000
--- a/plugins/jetpack/modules/custom-css/csstidy/class.csstidy_ctype.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-
-/**
- * CSSTidy - CSS Parser and Optimiser
- *
- * CSS ctype functions
- * Defines some functions that can be not defined.
- *
- * This file is part of CSSTidy.
- *
- * CSSTidy is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * CSSTidy is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with CSSTidy; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * @license http://opensource.org/licenses/gpl-license.php GNU Public License
- * @package csstidy
- * @author Nikolay Matsievsky (speed at webo dot name) 2009-2010
- * @version 1.0
- */
-/* ctype_space Check for whitespace character(s) */
-if (!function_exists('ctype_space')) {
-
- function ctype_space($text) {
- return!preg_match("/[^\s\r\n\t\f]/", $text);
- }
-
-}
-/* ctype_alpha Check for alphabetic character(s) */
-if (!function_exists('ctype_alpha')) {
-
- function ctype_alpha($text) {
- return preg_match("/[a-zA-Z]/", $text);
- }
-
-}
-?> \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-css/csstidy/class.csstidy_optimise.php b/plugins/jetpack/modules/custom-css/csstidy/class.csstidy_optimise.php
deleted file mode 100644
index 176e0fd3..00000000
--- a/plugins/jetpack/modules/custom-css/csstidy/class.csstidy_optimise.php
+++ /dev/null
@@ -1,938 +0,0 @@
-<?php
-
-/**
- * CSSTidy - CSS Parser and Optimiser
- *
- * CSS Optimising Class
- * This class optimises CSS data generated by csstidy.
- *
- * Copyright 2005, 2006, 2007 Florian Schmitz
- *
- * This file is part of CSSTidy.
- *
- * CSSTidy is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
- *
- * CSSTidy is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * @license http://opensource.org/licenses/lgpl-license.php GNU Lesser General Public License
- * @package csstidy
- * @author Florian Schmitz (floele at gmail dot com) 2005-2007
- * @author Brett Zamir (brettz9 at yahoo dot com) 2007
- * @author Nikolay Matsievsky (speed at webo dot name) 2009-2010
- */
-
-/**
- * CSS Optimising Class
- *
- * This class optimises CSS data generated by csstidy.
- *
- * @package csstidy
- * @author Florian Schmitz (floele at gmail dot com) 2005-2006
- * @version 1.0
- */
-class csstidy_optimise {
- /**
- * Constructor
- * @param array $css contains the class csstidy
- * @access private
- * @version 1.0
- */
- function __construct(&$css) {
- $this->parser = & $css;
- $this->css = & $css->css;
- $this->sub_value = & $css->sub_value;
- $this->at = & $css->at;
- $this->selector = & $css->selector;
- $this->property = & $css->property;
- $this->value = & $css->value;
- }
-
- function csstidy_optimise(&$css) {
- $this->__construct($css);
- }
-
- /**
- * Optimises $css after parsing
- * @access public
- * @version 1.0
- */
- function postparse() {
- if ($this->parser->get_cfg('preserve_css')) {
- return;
- }
-
- if ($this->parser->get_cfg('merge_selectors') === 2) {
- foreach ($this->css as $medium => $value) {
- $this->merge_selectors($this->css[$medium]);
- }
- }
-
- if ($this->parser->get_cfg('discard_invalid_selectors')) {
- foreach ($this->css as $medium => $value) {
- $this->discard_invalid_selectors($this->css[$medium]);
- }
- }
-
- if ($this->parser->get_cfg('optimise_shorthands') > 0) {
- foreach ($this->css as $medium => $value) {
- foreach ($value as $selector => $value1) {
- $this->css[$medium][$selector] = csstidy_optimise::merge_4value_shorthands($this->css[$medium][$selector]);
-
- if ($this->parser->get_cfg('optimise_shorthands') < 2) {
- continue;
- }
-
- $this->css[$medium][$selector] = csstidy_optimise::merge_font($this->css[$medium][$selector]);
-
- if ($this->parser->get_cfg('optimise_shorthands') < 3) {
- continue;
- }
-
- $this->css[$medium][$selector] = csstidy_optimise::merge_bg($this->css[$medium][$selector]);
- if (empty($this->css[$medium][$selector])) {
- unset($this->css[$medium][$selector]);
- }
- }
- }
- }
- }
-
- /**
- * Optimises values
- * @access public
- * @version 1.0
- */
- function value() {
- $shorthands = & $GLOBALS['csstidy']['shorthands'];
-
- // optimise shorthand properties
- if (isset($shorthands[$this->property])) {
- $temp = csstidy_optimise::shorthand($this->value); // FIXME - move
- if ($temp != $this->value) {
- $this->parser->log('Optimised shorthand notation (' . $this->property . '): Changed "' . $this->value . '" to "' . $temp . '"', 'Information');
- }
- $this->value = $temp;
- }
-
- // Remove whitespace at ! important
- if ($this->value != $this->compress_important($this->value)) {
- $this->parser->log('Optimised !important', 'Information');
- }
- }
-
- /**
- * Optimises shorthands
- * @access public
- * @version 1.0
- */
- function shorthands() {
- $shorthands = & $GLOBALS['csstidy']['shorthands'];
-
- if (!$this->parser->get_cfg('optimise_shorthands') || $this->parser->get_cfg('preserve_css')) {
- return;
- }
-
- if ($this->property === 'font' && $this->parser->get_cfg('optimise_shorthands') > 1) {
- $this->css[$this->at][$this->selector]['font']='';
- $this->parser->merge_css_blocks($this->at, $this->selector, csstidy_optimise::dissolve_short_font($this->value));
- }
- if ($this->property === 'background' && $this->parser->get_cfg('optimise_shorthands') > 2) {
- $this->css[$this->at][$this->selector]['background']='';
- $this->parser->merge_css_blocks($this->at, $this->selector, csstidy_optimise::dissolve_short_bg($this->value));
- }
- if (isset($shorthands[$this->property])) {
- $this->parser->merge_css_blocks($this->at, $this->selector, csstidy_optimise::dissolve_4value_shorthands($this->property, $this->value));
- if (is_array($shorthands[$this->property])) {
- $this->css[$this->at][$this->selector][$this->property] = '';
- }
- }
- }
-
- /**
- * Optimises a sub-value
- * @access public
- * @version 1.0
- */
- function subvalue() {
- $replace_colors = & $GLOBALS['csstidy']['replace_colors'];
-
- $this->sub_value = trim($this->sub_value);
- if ($this->sub_value == '') { // caution : '0'
- return;
- }
-
- $important = '';
- if (csstidy::is_important($this->sub_value)) {
- $important = '!important';
- }
- $this->sub_value = csstidy::gvw_important($this->sub_value);
-
- // Compress font-weight
- if ($this->property === 'font-weight' && $this->parser->get_cfg('compress_font-weight')) {
- if ($this->sub_value === 'bold') {
- $this->sub_value = '700';
- $this->parser->log('Optimised font-weight: Changed "bold" to "700"', 'Information');
- } else if ($this->sub_value === 'normal') {
- $this->sub_value = '400';
- $this->parser->log('Optimised font-weight: Changed "normal" to "400"', 'Information');
- }
- }
-
- $temp = $this->compress_numbers($this->sub_value);
- if (strcasecmp($temp, $this->sub_value) !== 0) {
- if (strlen($temp) > strlen($this->sub_value)) {
- $this->parser->log('Fixed invalid number: Changed "' . $this->sub_value . '" to "' . $temp . '"', 'Warning');
- } else {
- $this->parser->log('Optimised number: Changed "' . $this->sub_value . '" to "' . $temp . '"', 'Information');
- }
- $this->sub_value = $temp;
- }
- if ($this->parser->get_cfg('compress_colors')) {
- $temp = $this->cut_color($this->sub_value);
- if ($temp !== $this->sub_value) {
- if (isset($replace_colors[$this->sub_value])) {
- $this->parser->log('Fixed invalid color name: Changed "' . $this->sub_value . '" to "' . $temp . '"', 'Warning');
- } else {
- $this->parser->log('Optimised color: Changed "' . $this->sub_value . '" to "' . $temp . '"', 'Information');
- }
- $this->sub_value = $temp;
- }
- }
- $this->sub_value .= $important;
- }
-
- /**
- * Compresses shorthand values. Example: margin:1px 1px 1px 1px -> margin:1px
- * @param string $value
- * @access public
- * @return string
- * @version 1.0
- */
- static function shorthand($value) {
- $important = '';
- if (csstidy::is_important($value)) {
- $values = csstidy::gvw_important($value);
- $important = '!important';
- }
- else
- $values = $value;
-
- $values = explode(' ', $values);
- switch (count($values)) {
- case 4:
- if ($values[0] == $values[1] && $values[0] == $values[2] && $values[0] == $values[3]) {
- return $values[0] . $important;
- } elseif ($values[1] == $values[3] && $values[0] == $values[2]) {
- return $values[0] . ' ' . $values[1] . $important;
- } elseif ($values[1] == $values[3]) {
- return $values[0] . ' ' . $values[1] . ' ' . $values[2] . $important;
- }
- break;
-
- case 3:
- if ($values[0] == $values[1] && $values[0] == $values[2]) {
- return $values[0] . $important;
- } elseif ($values[0] == $values[2]) {
- return $values[0] . ' ' . $values[1] . $important;
- }
- break;
-
- case 2:
- if ($values[0] == $values[1]) {
- return $values[0] . $important;
- }
- break;
- }
-
- return $value;
- }
-
- /**
- * Removes unnecessary whitespace in ! important
- * @param string $string
- * @return string
- * @access public
- * @version 1.1
- */
- function compress_important(&$string) {
- if (csstidy::is_important($string)) {
- $string = csstidy::gvw_important($string) . ' !important'; }
- return $string;
- }
-
- /**
- * Color compression function. Converts all rgb() values to #-values and uses the short-form if possible. Also replaces 4 color names by #-values.
- * @param string $color
- * @return string
- * @version 1.1
- */
- function cut_color($color) {
- $replace_colors = & $GLOBALS['csstidy']['replace_colors'];
-
- // rgb(0,0,0) -> #000000 (or #000 in this case later)
- if (strtolower(substr($color, 0, 4)) === 'rgb(') {
- $color_tmp = substr($color, 4, strlen($color) - 5);
- $color_tmp = explode(',', $color_tmp);
- for ($i = 0; $i < count($color_tmp); $i++) {
- $color_tmp[$i] = trim($color_tmp[$i]);
- if (substr($color_tmp[$i], -1) === '%') {
- $color_tmp[$i] = round((255 * $color_tmp[$i]) / 100);
- }
- if ($color_tmp[$i] > 255)
- $color_tmp[$i] = 255;
- }
- $color = '#';
- for ($i = 0; $i < 3; $i++) {
- if ($color_tmp[$i] < 16) {
- $color .= '0' . dechex($color_tmp[$i]);
- } else {
- $color .= dechex($color_tmp[$i]);
- }
- }
- }
-
- // Fix bad color names
- if (isset($replace_colors[strtolower($color)])) {
- $color = $replace_colors[strtolower($color)];
- }
-
- // #aabbcc -> #abc
- if (strlen($color) == 7) {
- $color_temp = strtolower($color);
- if ($color_temp{0} === '#' && $color_temp{1} == $color_temp{2} && $color_temp{3} == $color_temp{4} && $color_temp{5} == $color_temp{6}) {
- $color = '#' . $color{1} . $color{3} . $color{5};
- }
- }
-
- switch (strtolower($color)) {
- /* color name -> hex code */
- case 'black': return '#000';
- case 'fuchsia': return '#f0f';
- case 'white': return '#fff';
- case 'yellow': return '#ff0';
-
- /* hex code -> color name */
- case '#800000': return 'maroon';
- case '#ffa500': return 'orange';
- case '#808000': return 'olive';
- case '#800080': return 'purple';
- case '#008000': return 'green';
- case '#000080': return 'navy';
- case '#008080': return 'teal';
- case '#c0c0c0': return 'silver';
- case '#808080': return 'gray';
- case '#f00': return 'red';
- }
-
- return $color;
- }
-
- /**
- * Compresses numbers (ie. 1.0 becomes 1 or 1.100 becomes 1.1 )
- * @param string $subvalue
- * @return string
- * @version 1.2
- */
- function compress_numbers($subvalue) {
- $unit_values = & $GLOBALS['csstidy']['unit_values'];
- $color_values = & $GLOBALS['csstidy']['color_values'];
-
- // for font:1em/1em sans-serif...;
- if ($this->property === 'font') {
- $temp = explode('/', $subvalue);
- } else {
- $temp = array($subvalue);
- }
- for ($l = 0; $l < count($temp); $l++) {
- // if we are not dealing with a number at this point, do not optimise anything
- $number = $this->AnalyseCssNumber($temp[$l]);
- if ($number === false) {
- return $subvalue;
- }
-
- // Fix bad colors
- if (in_array($this->property, $color_values)) {
- if (strlen($temp[$l]) == 3 || strlen($temp[$l]) == 6) {
- $temp[$l] = '#' . $temp[$l];
- }
- else {
- $temp[$l] = "0";
- }
- continue;
- }
-
- if (abs($number[0]) > 0) {
- if ($number[1] == '' && in_array($this->property, $unit_values, true)) {
- $number[1] = 'px';
- }
- } else {
- $number[1] = '';
- }
-
- $temp[$l] = $number[0] . $number[1];
- }
-
- return ((count($temp) > 1) ? $temp[0] . '/' . $temp[1] : $temp[0]);
- }
-
- /**
- * Checks if a given string is a CSS valid number. If it is,
- * an array containing the value and unit is returned
- * @param string $string
- * @return array ('unit' if unit is found or '' if no unit exists, number value) or false if no number
- */
- function AnalyseCssNumber($string) {
- // most simple checks first
- if (strlen($string) == 0 || ctype_alpha($string{0})) {
- return false;
- }
-
- $units = & $GLOBALS['csstidy']['units'];
- $return = array(0, '');
-
- $return[0] = floatval($string);
- if (abs($return[0]) > 0 && abs($return[0]) < 1) {
- if ($return[0] < 0) {
- $return[0] = '-' . ltrim(substr($return[0], 1), '0');
- } else {
- $return[0] = ltrim($return[0], '0');
- }
- }
-
- // Look for unit and split from value if exists
- foreach ($units as $unit) {
- $expectUnitAt = strlen($string) - strlen($unit);
- if (!($unitInString = stristr($string, $unit))) { // mb_strpos() fails with "false"
- continue;
- }
- $actualPosition = strpos($string, $unitInString);
- if ($expectUnitAt === $actualPosition) {
- $return[1] = $unit;
- $string = substr($string, 0, - strlen($unit));
- break;
- }
- }
- if (!is_numeric($string)) {
- return false;
- }
- return $return;
- }
-
- /**
- * Merges selectors with same properties. Example: a{color:red} b{color:red} -> a,b{color:red}
- * Very basic and has at least one bug. Hopefully there is a replacement soon.
- * @param array $array
- * @return array
- * @access public
- * @version 1.2
- */
- function merge_selectors(&$array) {
- $css = $array;
- foreach ($css as $key => $value) {
- if (!isset($css[$key])) {
- continue;
- }
- $newsel = '';
-
- // Check if properties also exist in another selector
- $keys = array();
- // PHP bug (?) without $css = $array; here
- foreach ($css as $selector => $vali) {
- if ($selector == $key) {
- continue;
- }
-
- if ($css[$key] === $vali) {
- $keys[] = $selector;
- }
- }
-
- if (!empty($keys)) {
- $newsel = $key;
- unset($css[$key]);
- foreach ($keys as $selector) {
- unset($css[$selector]);
- $newsel .= ',' . $selector;
- }
- $css[$newsel] = $value;
- }
- }
- $array = $css;
- }
-
- /**
- * Removes invalid selectors and their corresponding rule-sets as
- * defined by 4.1.7 in REC-CSS2. This is a very rudimentary check
- * and should be replaced by a full-blown parsing algorithm or
- * regular expression
- * @version 1.4
- */
- function discard_invalid_selectors(&$array) {
- $invalid = array('+' => true, '~' => true, ',' => true, '>' => true);
- foreach ($array as $selector => $decls) {
- $ok = true;
- $selectors = array_map('trim', explode(',', $selector));
- foreach ($selectors as $s) {
- $simple_selectors = preg_split('/\s*[+>~\s]\s*/', $s);
- foreach ($simple_selectors as $ss) {
- if ($ss === '')
- $ok = false;
- // could also check $ss for internal structure,
- // but that probably would be too slow
- }
- }
- if (!$ok)
- unset($array[$selector]);
- }
- }
-
- /**
- * Dissolves properties like padding:10px 10px 10px to padding-top:10px;padding-bottom:10px;...
- * @param string $property
- * @param string $value
- * @return array
- * @version 1.0
- * @see merge_4value_shorthands()
- */
- static function dissolve_4value_shorthands($property, $value) {
- $shorthands = & $GLOBALS['csstidy']['shorthands'];
- if (!is_array($shorthands[$property])) {
- $return[$property] = $value;
- return $return;
- }
-
- $important = '';
- if (csstidy::is_important($value)) {
- $value = csstidy::gvw_important($value);
- $important = '!important';
- }
- $values = explode(' ', $value);
-
-
- $return = array();
- if (count($values) == 4) {
- for ($i = 0; $i < 4; $i++) {
- $return[$shorthands[$property][$i]] = $values[$i] . $important;
- }
- } elseif (count($values) == 3) {
- $return[$shorthands[$property][0]] = $values[0] . $important;
- $return[$shorthands[$property][1]] = $values[1] . $important;
- $return[$shorthands[$property][3]] = $values[1] . $important;
- $return[$shorthands[$property][2]] = $values[2] . $important;
- } elseif (count($values) == 2) {
- for ($i = 0; $i < 4; $i++) {
- $return[$shorthands[$property][$i]] = (($i % 2 != 0)) ? $values[1] . $important : $values[0] . $important;
- }
- } else {
- for ($i = 0; $i < 4; $i++) {
- $return[$shorthands[$property][$i]] = $values[0] . $important;
- }
- }
-
- return $return;
- }
-
- /**
- * Explodes a string as explode() does, however, not if $sep is escaped or within a string.
- * @param string $sep seperator
- * @param string $string
- * @return array
- * @version 1.0
- */
- static function explode_ws($sep, $string) {
- $status = 'st';
- $to = '';
-
- $output = array();
- $num = 0;
- for ($i = 0, $len = strlen($string); $i < $len; $i++) {
- switch ($status) {
- case 'st':
- if ($string{$i} == $sep && !csstidy::escaped($string, $i)) {
- ++$num;
- } elseif ($string{$i} === '"' || $string{$i} === '\'' || $string{$i} === '(' && !csstidy::escaped($string, $i)) {
- $status = 'str';
- $to = ($string{$i} === '(') ? ')' : $string{$i};
- (isset($output[$num])) ? $output[$num] .= $string{$i} : $output[$num] = $string{$i};
- } else {
- (isset($output[$num])) ? $output[$num] .= $string{$i} : $output[$num] = $string{$i};
- }
- break;
-
- case 'str':
- if ($string{$i} == $to && !csstidy::escaped($string, $i)) {
- $status = 'st';
- }
- (isset($output[$num])) ? $output[$num] .= $string{$i} : $output[$num] = $string{$i};
- break;
- }
- }
-
- if (isset($output[0])) {
- return $output;
- } else {
- return array($output);
- }
- }
-
- /**
- * Merges Shorthand properties again, the opposite of dissolve_4value_shorthands()
- * @param array $array
- * @return array
- * @version 1.2
- * @see dissolve_4value_shorthands()
- */
- static function merge_4value_shorthands($array) {
- $return = $array;
- $shorthands = & $GLOBALS['csstidy']['shorthands'];
-
- foreach ($shorthands as $key => $value) {
- if (isset($array[$value[0]]) && isset($array[$value[1]])
- && isset($array[$value[2]]) && isset($array[$value[3]]) && $value !== 0) {
- $return[$key] = '';
-
- $important = '';
- for ($i = 0; $i < 4; $i++) {
- $val = $array[$value[$i]];
- if (csstidy::is_important($val)) {
- $important = '!important';
- $return[$key] .= csstidy::gvw_important($val) . ' ';
- } else {
- $return[$key] .= $val . ' ';
- }
- unset($return[$value[$i]]);
- }
- $return[$key] = csstidy_optimise::shorthand(trim($return[$key] . $important));
- }
- }
- return $return;
- }
-
- /**
- * Dissolve background property
- * @param string $str_value
- * @return array
- * @version 1.0
- * @see merge_bg()
- * @todo full CSS 3 compliance
- */
- static function dissolve_short_bg($str_value) {
- // don't try to explose background gradient !
- if (stripos($str_value, "gradient(")!==FALSE)
- return array('background'=>$str_value);
-
- $background_prop_default = & $GLOBALS['csstidy']['background_prop_default'];
- $repeat = array('repeat', 'repeat-x', 'repeat-y', 'no-repeat', 'space');
- $attachment = array('scroll', 'fixed', 'local');
- $clip = array('border', 'padding');
- $origin = array('border', 'padding', 'content');
- $pos = array('top', 'center', 'bottom', 'left', 'right');
- $important = '';
- $return = array('background-image' => null, 'background-size' => null, 'background-repeat' => null, 'background-position' => null, 'background-attachment' => null, 'background-clip' => null, 'background-origin' => null, 'background-color' => null);
-
- if (csstidy::is_important($str_value)) {
- $important = ' !important';
- $str_value = csstidy::gvw_important($str_value);
- }
-
- $str_value = csstidy_optimise::explode_ws(',', $str_value);
- for ($i = 0; $i < count($str_value); $i++) {
- $have['clip'] = false;
- $have['pos'] = false;
- $have['color'] = false;
- $have['bg'] = false;
-
- if (is_array($str_value[$i])) {
- $str_value[$i] = $str_value[$i][0];
- }
- $str_value[$i] = csstidy_optimise::explode_ws(' ', trim($str_value[$i]));
-
- for ($j = 0; $j < count($str_value[$i]); $j++) {
- if ($have['bg'] === false && (substr($str_value[$i][$j], 0, 4) === 'url(' || $str_value[$i][$j] === 'none')) {
- $return['background-image'] .= $str_value[$i][$j] . ',';
- $have['bg'] = true;
- } elseif (in_array($str_value[$i][$j], $repeat, true)) {
- $return['background-repeat'] .= $str_value[$i][$j] . ',';
- } elseif (in_array($str_value[$i][$j], $attachment, true)) {
- $return['background-attachment'] .= $str_value[$i][$j] . ',';
- } elseif (in_array($str_value[$i][$j], $clip, true) && !$have['clip']) {
- $return['background-clip'] .= $str_value[$i][$j] . ',';
- $have['clip'] = true;
- } elseif (in_array($str_value[$i][$j], $origin, true)) {
- $return['background-origin'] .= $str_value[$i][$j] . ',';
- } elseif ($str_value[$i][$j]{0} === '(') {
- $return['background-size'] .= substr($str_value[$i][$j], 1, -1) . ',';
- } elseif (in_array($str_value[$i][$j], $pos, true) || is_numeric($str_value[$i][$j]{0}) || $str_value[$i][$j]{0} === null || $str_value[$i][$j]{0} === '-' || $str_value[$i][$j]{0} === '.') {
- $return['background-position'] .= $str_value[$i][$j];
- if (!$have['pos'])
- $return['background-position'] .= ' '; else
- $return['background-position'].= ',';
- $have['pos'] = true;
- }
- elseif (!$have['color']) {
- $return['background-color'] .= $str_value[$i][$j] . ',';
- $have['color'] = true;
- }
- }
- }
-
- foreach ($background_prop_default as $bg_prop => $default_value) {
- if ($return[$bg_prop] !== null) {
- $return[$bg_prop] = substr($return[$bg_prop], 0, -1) . $important;
- }
- else
- $return[$bg_prop] = $default_value . $important;
- }
- return $return;
- }
-
- /**
- * Merges all background properties
- * @param array $input_css
- * @return array
- * @version 1.0
- * @see dissolve_short_bg()
- * @todo full CSS 3 compliance
- */
- static function merge_bg($input_css) {
- $background_prop_default = & $GLOBALS['csstidy']['background_prop_default'];
- // Max number of background images. CSS3 not yet fully implemented
- $number_of_values = @max(count(csstidy_optimise::explode_ws(',', $input_css['background-image'])), count(csstidy_optimise::explode_ws(',', $input_css['background-color'])), 1);
- // Array with background images to check if BG image exists
- $bg_img_array = @csstidy_optimise::explode_ws(',', csstidy::gvw_important($input_css['background-image']));
- $new_bg_value = '';
- $important = '';
-
- // if background properties is here and not empty, don't try anything
- if (isset($input_css['background']) AND $input_css['background'])
- return $input_css;
-
- for ($i = 0; $i < $number_of_values; $i++) {
- foreach ($background_prop_default as $bg_property => $default_value) {
- // Skip if property does not exist
- if (!isset($input_css[$bg_property])) {
- continue;
- }
-
- $cur_value = $input_css[$bg_property];
- // skip all optimisation if gradient() somewhere
- if (stripos($cur_value, "gradient(")!==FALSE)
- return $input_css;
-
- // Skip some properties if there is no background image
- if ((!isset($bg_img_array[$i]) || $bg_img_array[$i] === 'none')
- && ($bg_property === 'background-size' || $bg_property === 'background-position'
- || $bg_property === 'background-attachment' || $bg_property === 'background-repeat')) {
- continue;
- }
-
- // Remove !important
- if (csstidy::is_important($cur_value)) {
- $important = ' !important';
- $cur_value = csstidy::gvw_important($cur_value);
- }
-
- // Do not add default values
- if ($cur_value === $default_value) {
- continue;
- }
-
- $temp = csstidy_optimise::explode_ws(',', $cur_value);
-
- if (isset($temp[$i])) {
- if ($bg_property === 'background-size') {
- $new_bg_value .= '(' . $temp[$i] . ') ';
- } else {
- $new_bg_value .= $temp[$i] . ' ';
- }
- }
- }
-
- $new_bg_value = trim($new_bg_value);
- if ($i != $number_of_values - 1)
- $new_bg_value .= ',';
- }
-
- // Delete all background-properties
- foreach ($background_prop_default as $bg_property => $default_value) {
- unset($input_css[$bg_property]);
- }
-
- // Add new background property
- if ($new_bg_value !== '')
- $input_css['background'] = $new_bg_value . $important;
- elseif(isset ($input_css['background']))
- $input_css['background'] = 'none';
-
- return $input_css;
- }
-
- /**
- * Dissolve font property
- * @param string $str_value
- * @return array
- * @version 1.3
- * @see merge_font()
- */
- static function dissolve_short_font($str_value) {
- $font_prop_default = & $GLOBALS['csstidy']['font_prop_default'];
- $font_weight = array('normal', 'bold', 'bolder', 'lighter', 100, 200, 300, 400, 500, 600, 700, 800, 900);
- $font_variant = array('normal', 'small-caps');
- $font_style = array('normal', 'italic', 'oblique');
- $important = '';
- $return = array('font-style' => null, 'font-variant' => null, 'font-weight' => null, 'font-size' => null, 'line-height' => null, 'font-family' => null);
-
- if (csstidy::is_important($str_value)) {
- $important = '!important';
- $str_value = csstidy::gvw_important($str_value);
- }
-
- $have['style'] = false;
- $have['variant'] = false;
- $have['weight'] = false;
- $have['size'] = false;
- // Detects if font-family consists of several words w/o quotes
- $multiwords = false;
-
- // Workaround with multiple font-family
- $str_value = csstidy_optimise::explode_ws(',', trim($str_value));
-
- $str_value[0] = csstidy_optimise::explode_ws(' ', trim($str_value[0]));
-
- for ($j = 0; $j < count($str_value[0]); $j++) {
- if ($have['weight'] === false && in_array($str_value[0][$j], $font_weight)) {
- $return['font-weight'] = $str_value[0][$j];
- $have['weight'] = true;
- } elseif ($have['variant'] === false && in_array($str_value[0][$j], $font_variant)) {
- $return['font-variant'] = $str_value[0][$j];
- $have['variant'] = true;
- } elseif ($have['style'] === false && in_array($str_value[0][$j], $font_style)) {
- $return['font-style'] = $str_value[0][$j];
- $have['style'] = true;
- } elseif ($have['size'] === false && (is_numeric($str_value[0][$j]{0}) || $str_value[0][$j]{0} === null || $str_value[0][$j]{0} === '.')) {
- $size = csstidy_optimise::explode_ws('/', trim($str_value[0][$j]));
- $return['font-size'] = $size[0];
- if (isset($size[1])) {
- $return['line-height'] = $size[1];
- } else {
- $return['line-height'] = ''; // don't add 'normal' !
- }
- $have['size'] = true;
- } else {
- if (isset($return['font-family'])) {
- $return['font-family'] .= ' ' . $str_value[0][$j];
- $multiwords = true;
- } else {
- $return['font-family'] = $str_value[0][$j];
- }
- }
- }
- // add quotes if we have several qords in font-family
- if ($multiwords !== false) {
- $return['font-family'] = '"' . $return['font-family'] . '"';
- }
- $i = 1;
- while (isset($str_value[$i])) {
- $return['font-family'] .= ',' . trim($str_value[$i]);
- $i++;
- }
-
- // Fix for 100 and more font-size
- if ($have['size'] === false && isset($return['font-weight']) &&
- is_numeric($return['font-weight']{0})) {
- $return['font-size'] = $return['font-weight'];
- unset($return['font-weight']);
- }
-
- foreach ($font_prop_default as $font_prop => $default_value) {
- if ($return[$font_prop] !== null) {
- $return[$font_prop] = $return[$font_prop] . $important;
- }
- else
- $return[$font_prop] = $default_value . $important;
- }
- return $return;
- }
-
- /**
- * Merges all fonts properties
- * @param array $input_css
- * @return array
- * @version 1.3
- * @see dissolve_short_font()
- */
- static function merge_font($input_css) {
- $font_prop_default = & $GLOBALS['csstidy']['font_prop_default'];
- $new_font_value = '';
- $important = '';
- // Skip if not font-family and font-size set
- if (isset($input_css['font-family']) && isset($input_css['font-size'])) {
- // fix several words in font-family - add quotes
- if (isset($input_css['font-family'])) {
- $families = explode(",", $input_css['font-family']);
- $result_families = array();
- foreach ($families as $family) {
- $family = trim($family);
- $len = strlen($family);
- if (strpos($family, " ") &&
- !(($family{0} == '"' && $family{$len - 1} == '"') ||
- ($family{0} == "'" && $family{$len - 1} == "'"))) {
- $family = '"' . $family . '"';
- }
- $result_families[] = $family;
- }
- $input_css['font-family'] = implode(",", $result_families);
- }
- foreach ($font_prop_default as $font_property => $default_value) {
-
- // Skip if property does not exist
- if (!isset($input_css[$font_property])) {
- continue;
- }
-
- $cur_value = $input_css[$font_property];
-
- // Skip if default value is used
- if ($cur_value === $default_value) {
- continue;
- }
-
- // Remove !important
- if (csstidy::is_important($cur_value)) {
- $important = '!important';
- $cur_value = csstidy::gvw_important($cur_value);
- }
-
- $new_font_value .= $cur_value;
- // Add delimiter
- $new_font_value .= ( $font_property === 'font-size' &&
- isset($input_css['line-height'])) ? '/' : ' ';
- }
-
- $new_font_value = trim($new_font_value);
-
- // Delete all font-properties
- foreach ($font_prop_default as $font_property => $default_value) {
- if ($font_property!=='font' OR !$new_font_value)
- unset($input_css[$font_property]);
- }
-
- // Add new font property
- if ($new_font_value !== '') {
- $input_css['font'] = $new_font_value . $important;
- }
- }
-
- return $input_css;
- }
-
-}
diff --git a/plugins/jetpack/modules/custom-css/csstidy/class.csstidy_print.php b/plugins/jetpack/modules/custom-css/csstidy/class.csstidy_print.php
deleted file mode 100644
index 56b95404..00000000
--- a/plugins/jetpack/modules/custom-css/csstidy/class.csstidy_print.php
+++ /dev/null
@@ -1,410 +0,0 @@
-<?php
-/**
- * CSSTidy - CSS Parser and Optimiser
- *
- * CSS Printing class
- * This class prints CSS data generated by csstidy.
- *
- * Copyright 2005, 2006, 2007 Florian Schmitz
- *
- * This file is part of CSSTidy.
- *
- * CSSTidy is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
- *
- * CSSTidy is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * @license http://opensource.org/licenses/lgpl-license.php GNU Lesser General Public License
- * @package csstidy
- * @author Florian Schmitz (floele at gmail dot com) 2005-2007
- * @author Brett Zamir (brettz9 at yahoo dot com) 2007
- * @author Cedric Morin (cedric at yterium dot com) 2010
- */
-
-/**
- * CSS Printing class
- *
- * This class prints CSS data generated by csstidy.
- *
- * @package csstidy
- * @author Florian Schmitz (floele at gmail dot com) 2005-2006
- * @version 1.0.1
- */
-class csstidy_print {
-
- /**
- * Saves the input CSS string
- * @var string
- * @access private
- */
- public $input_css = '';
- /**
- * Saves the formatted CSS string
- * @var string
- * @access public
- */
- public $output_css = '';
- /**
- * Saves the formatted CSS string (plain text)
- * @var string
- * @access public
- */
- public $output_css_plain = '';
-
- /**
- * Constructor
- * @param array $css contains the class csstidy
- * @access private
- * @version 1.0
- */
- function __construct(&$css) {
- $this->parser = & $css;
- $this->css = & $css->css;
- $this->template = & $css->template;
- $this->tokens = & $css->tokens;
- $this->charset = & $css->charset;
- $this->import = & $css->import;
- $this->namespace = & $css->namespace;
- }
-
- function csstidy_print(&$css) {
- $this->__construct($css);
- }
-
- /**
- * Resets output_css and output_css_plain (new css code)
- * @access private
- * @version 1.0
- */
- function _reset() {
- $this->output_css = '';
- $this->output_css_plain = '';
- }
-
- /**
- * Returns the CSS code as plain text
- * @param string $default_media default @media to add to selectors without any @media
- * @return string
- * @access public
- * @version 1.0
- */
- function plain($default_media='') {
- $this->_print(true, $default_media);
- return $this->output_css_plain;
- }
-
- /**
- * Returns the formatted CSS code
- * @param string $default_media default @media to add to selectors without any @media
- * @return string
- * @access public
- * @version 1.0
- */
- function formatted($default_media='') {
- $this->_print(false, $default_media);
- return $this->output_css;
- }
-
- /**
- * Returns the formatted CSS code to make a complete webpage
- * @param string $doctype shorthand for the document type
- * @param bool $externalcss indicates whether styles to be attached internally or as an external stylesheet
- * @param string $title title to be added in the head of the document
- * @param string $lang two-letter language code to be added to the output
- * @return string
- * @access public
- * @version 1.4
- */
- function formatted_page($doctype='xhtml1.1', $externalcss=true, $title='', $lang='en') {
- switch ($doctype) {
- case 'xhtml1.0strict':
- $doctype_output = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
- break;
- case 'xhtml1.1':
- default:
- $doctype_output = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
- "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">';
- break;
- }
-
- $output = $cssparsed = '';
- $this->output_css_plain = & $output;
-
- $output .= $doctype_output . "\n" . '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="' . $lang . '"';
- $output .= ( $doctype === 'xhtml1.1') ? '>' : ' lang="' . $lang . '">';
- $output .= "\n<head>\n <title>$title</title>";
-
- if ($externalcss) {
- $output .= "\n <style type=\"text/css\">\n";
- $cssparsed = file_get_contents('cssparsed.css');
- $output .= $cssparsed; // Adds an invisible BOM or something, but not in css_optimised.php
- $output .= "\n</style>";
- } else {
- $output .= "\n" . ' <link rel="stylesheet" type="text/css" href="cssparsed.css" />';
-// }
- }
- $output .= "\n</head>\n<body><code id=\"copytext\">";
- $output .= $this->formatted();
- $output .= '</code>' . "\n" . '</body></html>';
- return $this->output_css_plain;
- }
-
- /**
- * Returns the formatted CSS Code and saves it into $this->output_css and $this->output_css_plain
- * @param bool $plain plain text or not
- * @param string $default_media default @media to add to selectors without any @media
- * @access private
- * @version 2.0
- */
- function _print($plain = false, $default_media='') {
- if ($this->output_css && $this->output_css_plain) {
- return;
- }
-
- $output = '';
- if (!$this->parser->get_cfg('preserve_css')) {
- $this->_convert_raw_css($default_media);
- }
-
- $template = & $this->template;
-
- if ($plain) {
- $template = array_map('strip_tags', $template);
- }
-
- if ($this->parser->get_cfg('timestamp')) {
- array_unshift($this->tokens, array(COMMENT, ' CSSTidy ' . $this->parser->version . ': ' . date('r') . ' '));
- }
-
- if (!empty($this->charset)) {
- $output .= $template[0] . '@charset ' . $template[5] . $this->charset . $template[6];
- }
-
- if (!empty($this->import)) {
- for ($i = 0, $size = count($this->import); $i < $size; $i++) {
- $import_components = explode(' ', $this->import[$i]);
- if (substr($import_components[0], 0, 4) === 'url(' && substr($import_components[0], -1, 1) === ')') {
- $import_components[0] = '\'' . trim(substr($import_components[0], 4, -1), "'\"") . '\'';
- $this->import[$i] = implode(' ', $import_components);
- $this->parser->log('Optimised @import : Removed "url("', 'Information');
- }
- $output .= $template[0] . '@import ' . $template[5] . $this->import[$i] . $template[6];
- }
- }
- if (!empty($this->namespace)) {
- if (substr($this->namespace, 0, 4) === 'url(' && substr($this->namespace, -1, 1) === ')') {
- $this->namespace = '\'' . substr($this->namespace, 4, -1) . '\'';
- $this->parser->log('Optimised @namespace : Removed "url("', 'Information');
- }
- $output .= $template[0] . '@namespace ' . $template[5] . $this->namespace . $template[6];
- }
-
- $output .= $template[13];
- $in_at_out = '';
- $out = & $output;
-
- foreach ($this->tokens as $key => $token) {
- switch ($token[0]) {
- case AT_START:
- $out .= $template[0] . $this->_htmlsp($token[1], $plain) . $template[1];
- $out = & $in_at_out;
- break;
-
- case SEL_START:
- if ($this->parser->get_cfg('lowercase_s'))
- $token[1] = strtolower($token[1]);
- $out .= ( $token[1]{0} !== '@') ? $template[2] . $this->_htmlsp($token[1], $plain) : $template[0] . $this->_htmlsp($token[1], $plain);
- $out .= $template[3];
- break;
-
- case PROPERTY:
- if ($this->parser->get_cfg('case_properties') === 2) {
- $token[1] = strtoupper($token[1]);
- } elseif ($this->parser->get_cfg('case_properties') === 1) {
- $token[1] = strtolower($token[1]);
- }
- $out .= $template[4] . $this->_htmlsp($token[1], $plain) . ':' . $template[5];
- break;
-
- case VALUE:
- $out .= $this->_htmlsp($token[1], $plain);
- if ($this->_seeknocomment($key, 1) == SEL_END && $this->parser->get_cfg('remove_last_;')) {
- $out .= str_replace(';', '', $template[6]);
- } else {
- $out .= $template[6];
- }
- break;
-
- case SEL_END:
- $out .= $template[7];
- if ($this->_seeknocomment($key, 1) != AT_END)
- $out .= $template[8];
- break;
-
- case AT_END:
- $out = & $output;
- $out .= $template[10] . str_replace("\n", "\n" . $template[10], $in_at_out);
- $in_at_out = '';
- $out .= $template[9];
- break;
-
- case COMMENT:
- $out .= $template[11] . '/*' . $this->_htmlsp($token[1], $plain) . '*/' . $template[12];
- break;
- }
- }
-
- $output = trim($output);
-
- if (!$plain) {
- $this->output_css = $output;
- $this->_print(true);
- } else {
- // If using spaces in the template, don't want these to appear in the plain output
- $this->output_css_plain = str_replace('&#160;', '', $output);
- }
- }
-
- /**
- * Gets the next token type which is $move away from $key, excluding comments
- * @param integer $key current position
- * @param integer $move move this far
- * @return mixed a token type
- * @access private
- * @version 1.0
- */
- function _seeknocomment($key, $move) {
- $go = ($move > 0) ? 1 : -1;
- for ($i = $key + 1; abs($key - $i) - 1 < abs($move); $i += $go) {
- if (!isset($this->tokens[$i])) {
- return;
- }
- if ($this->tokens[$i][0] == COMMENT) {
- $move += 1;
- continue;
- }
- return $this->tokens[$i][0];
- }
- }
-
- /**
- * Converts $this->css array to a raw array ($this->tokens)
- * @param string $default_media default @media to add to selectors without any @media
- * @access private
- * @version 1.0
- */
- function _convert_raw_css($default_media='') {
- $this->tokens = array();
-
- foreach ($this->css as $medium => $val) {
- if ($this->parser->get_cfg('sort_selectors'))
- ksort($val);
- if (intval($medium) < DEFAULT_AT) {
- $this->parser->_add_token(AT_START, $medium, true);
- }
- elseif ($default_media) {
- $this->parser->_add_token(AT_START, $default_media, true);
- }
-
- foreach ($val as $selector => $vali) {
- if ($this->parser->get_cfg('sort_properties'))
- ksort($vali);
- $this->parser->_add_token(SEL_START, $selector, true);
-
- foreach ($vali as $property => $valj) {
- $this->parser->_add_token(PROPERTY, $property, true);
- $this->parser->_add_token(VALUE, $valj, true);
- }
-
- $this->parser->_add_token(SEL_END, $selector, true);
- }
-
- if (intval($medium) < DEFAULT_AT) {
- $this->parser->_add_token(AT_END, $medium, true);
- }
- elseif ($default_media) {
- $this->parser->_add_token(AT_END, $default_media, true);
- }
- }
- }
-
- /**
- * Same as htmlspecialchars, only that chars are not replaced if $plain !== true. This makes print_code() cleaner.
- * @param string $string
- * @param bool $plain
- * @return string
- * @see csstidy_print::_print()
- * @access private
- * @version 1.0
- */
- function _htmlsp($string, $plain) {
- if (!$plain) {
- return htmlspecialchars($string, ENT_QUOTES, 'utf-8');
- }
- return $string;
- }
-
- /**
- * Get compression ratio
- * @access public
- * @return float
- * @version 1.2
- */
- function get_ratio() {
- if (!$this->output_css_plain) {
- $this->formatted();
- }
- return round((strlen($this->input_css) - strlen($this->output_css_plain)) / strlen($this->input_css), 3) * 100;
- }
-
- /**
- * Get difference between the old and new code in bytes and prints the code if necessary.
- * @access public
- * @return string
- * @version 1.1
- */
- function get_diff() {
- if (!$this->output_css_plain) {
- $this->formatted();
- }
-
- $diff = strlen($this->output_css_plain) - strlen($this->input_css);
-
- if ($diff > 0) {
- return '+' . $diff;
- } elseif ($diff == 0) {
- return '+-' . $diff;
- }
-
- return $diff;
- }
-
- /**
- * Get the size of either input or output CSS in KB
- * @param string $loc default is "output"
- * @access public
- * @return integer
- * @version 1.0
- */
- function size($loc = 'output') {
- if ($loc === 'output' && !$this->output_css) {
- $this->formatted();
- }
-
- if ($loc === 'input') {
- return (strlen($this->input_css) / 1000);
- } else {
- return (strlen($this->output_css_plain) / 1000);
- }
- }
-
-}
diff --git a/plugins/jetpack/modules/custom-css/csstidy/cssparse-rtl.css b/plugins/jetpack/modules/custom-css/csstidy/cssparse-rtl.css
deleted file mode 100644
index 54a7a9c9..00000000
--- a/plugins/jetpack/modules/custom-css/csstidy/cssparse-rtl.css
+++ /dev/null
@@ -1,119 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-@import url("modules/custom-css/csstidy/cssparsed.css");
-
-html, body {
-font:0.8em Verdana,Helvetica,sans-serif;
-background:#F8F8F6;
-}
-
-code {
-font-size:1.2em;
-}
-
-div#rightcol {
-padding-right:32em;
-}
-
-fieldset {
-display:block;
-margin:0.5em 0;
-padding:1em;
-border:solid #7284AB 2px;
-}
-fieldset.code_output {
-display:inline;
-}
-
-h1 {
-font-size:2em;
-}
-
-small {
-font-size:0.7em;
-}
-
-fieldset#field_input {
-float:right;
-margin:0 0 1em 0.5em;
-}
-
-fieldset#options,fieldset#code_layout {
-width:31em;
-}
-
-input#submit {
-clear:both;
-display:block;
-margin:1em;
-}
-
-select {
-margin:2px 0 0;
-}
-
-label.block {
-display:block;
-}
-
-legend {
-background:#c4E1C3;
-padding:2px 4px;
-border:dashed 1px;
-}
-
-textarea#css_text {
-width:27em;
-height:370px;
-display:block;
-margin-left:1em;
-}
-
-.help {
-cursor:help;
-}
-
-p.important {
-border:solid 1px red;
-font-weight:bold;
-padding:1em;
-background:white;
-}
-
-p {
-margin:1em 0;
-}
-
-dl {
-padding-right:0.5em;
-}
-
-dt {
-font-weight:bold;
-margin:0;
-float:right;
-clear:both;
-height:1.5em;
-}
-
-dd {
-margin:0 4em 0 0;
-height:1.5em;
-}
-
-fieldset#messages {
-background:white;
-padding:0 1em 0 0;
-}
-
-fieldset#messages div {
-height:10em;
-overflow:auto;
-}
-
-dd.Warning {
-color:orange;
-}
-
-dd.Information {
-color:green;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-css/csstidy/cssparse-rtl.min.css b/plugins/jetpack/modules/custom-css/csstidy/cssparse-rtl.min.css
deleted file mode 100644
index 02da7f4c..00000000
--- a/plugins/jetpack/modules/custom-css/csstidy/cssparse-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-code#copytext{white-space:pre;font-family:Verdana}.at{color:#00008b}.format{color:gray}.property{color:green}.selector{color:#00f}.value{color:red;left:500px}.comment{color:orange}body,html{font:.8em Verdana,Helvetica,sans-serif;background:#f8f8f6}code{font-size:1.2em}div#rightcol{padding-right:32em}fieldset{display:block;margin:.5em 0;padding:1em;border:solid #7284ab 2px}fieldset.code_output{display:inline}h1{font-size:2em}small{font-size:.7em}fieldset#field_input{float:right;margin:0 0 1em .5em}fieldset#code_layout,fieldset#options{width:31em}input#submit{clear:both;display:block;margin:1em}select{margin:2px 0 0}label.block{display:block}legend{background:#c4e1c3;padding:2px 4px;border:dashed 1px}textarea#css_text{width:27em;height:370px;display:block;margin-left:1em}.help{cursor:help}p.important{border:solid 1px red;font-weight:700;padding:1em;background:#fff}p{margin:1em 0}dl{padding-right:.5em}dt{font-weight:700;margin:0;float:right;clear:both;height:1.5em}dd{margin:0 4em 0 0;height:1.5em}fieldset#messages{background:#fff;padding:0 1em 0 0}fieldset#messages div{height:10em;overflow:auto}dd.Warning{color:orange}dd.Information{color:green} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-css/csstidy/cssparse.css b/plugins/jetpack/modules/custom-css/csstidy/cssparse.css
deleted file mode 100644
index bddd34f9..00000000
--- a/plugins/jetpack/modules/custom-css/csstidy/cssparse.css
+++ /dev/null
@@ -1,118 +0,0 @@
-@import url("modules/custom-css/csstidy/cssparsed.css");
-
-html, body {
-font:0.8em Verdana,Helvetica,sans-serif;
-background:#F8F8F6;
-}
-
-code {
-font-size:1.2em;
-}
-
-div#rightcol {
-padding-left:32em;
-}
-
-fieldset {
-display:block;
-margin:0.5em 0;
-padding:1em;
-border:solid #7284AB 2px;
-}
-fieldset.code_output {
-display:inline;
-}
-
-h1 {
-font-size:2em;
-}
-
-small {
-font-size:0.7em;
-}
-
-fieldset#field_input {
-float:left;
-margin:0 0.5em 1em 0;
-}
-
-fieldset#options,fieldset#code_layout {
-width:31em;
-}
-
-input#submit {
-clear:both;
-display:block;
-margin:1em;
-}
-
-select {
-margin:2px 0 0;
-}
-
-label.block {
-display:block;
-}
-
-legend {
-background:#c4E1C3;
-padding:2px 4px;
-border:dashed 1px;
-}
-
-textarea#css_text {
-width:27em;
-height:370px;
-display:block;
-margin-right:1em;
-}
-
-.help {
-cursor:help;
-}
-
-p.important {
-border:solid 1px red;
-font-weight:bold;
-padding:1em;
-background:white;
-}
-
-p {
-margin:1em 0;
-}
-
-dl {
-padding-left:0.5em;
-}
-
-dt {
-font-weight:bold;
-margin:0;
-float:left;
-clear:both;
-height:1.5em;
-}
-
-dd {
-margin:0 0 0 4em;
-height:1.5em;
-}
-
-fieldset#messages {
-background:white;
-padding:0 0 0 1em;
-}
-
-fieldset#messages div {
-height:10em;
-overflow:auto;
-}
-
-dd.Warning {
-color:orange;
-}
-
-dd.Information {
-color:green;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-css/csstidy/cssparse.min.css b/plugins/jetpack/modules/custom-css/csstidy/cssparse.min.css
deleted file mode 100644
index fa4927e5..00000000
--- a/plugins/jetpack/modules/custom-css/csstidy/cssparse.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-code#copytext{white-space:pre;font-family:Verdana}.at{color:#00008b}.format{color:gray}.property{color:green}.selector{color:#00f}.value{color:red;left:500px}.comment{color:orange}body,html{font:.8em Verdana,Helvetica,sans-serif;background:#f8f8f6}code{font-size:1.2em}div#rightcol{padding-left:32em}fieldset{display:block;margin:.5em 0;padding:1em;border:solid #7284ab 2px}fieldset.code_output{display:inline}h1{font-size:2em}small{font-size:.7em}fieldset#field_input{float:left;margin:0 .5em 1em 0}fieldset#code_layout,fieldset#options{width:31em}input#submit{clear:both;display:block;margin:1em}select{margin:2px 0 0}label.block{display:block}legend{background:#c4e1c3;padding:2px 4px;border:dashed 1px}textarea#css_text{width:27em;height:370px;display:block;margin-right:1em}.help{cursor:help}p.important{border:solid 1px red;font-weight:700;padding:1em;background:#fff}p{margin:1em 0}dl{padding-left:.5em}dt{font-weight:700;margin:0;float:left;clear:both;height:1.5em}dd{margin:0 0 0 4em;height:1.5em}fieldset#messages{background:#fff;padding:0 0 0 1em}fieldset#messages div{height:10em;overflow:auto}dd.Warning{color:orange}dd.Information{color:green} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-css/csstidy/cssparsed-rtl.css b/plugins/jetpack/modules/custom-css/csstidy/cssparsed-rtl.css
deleted file mode 100644
index d765e2d7..00000000
--- a/plugins/jetpack/modules/custom-css/csstidy/cssparsed-rtl.css
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-code#copytext {
- white-space: pre;
- font-family: Verdana;
-}
-
-.at {
-color:darkblue;
-}
-
-.format {
-color:gray;
-}
-
-.property {
-color:green;
-}
-
-.selector {
-color:blue;
-}
-
-.value {
-color:red;
-right: 500px;
-}
-
-.comment {
-color:orange;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-css/csstidy/cssparsed-rtl.min.css b/plugins/jetpack/modules/custom-css/csstidy/cssparsed-rtl.min.css
deleted file mode 100644
index ba9903d0..00000000
--- a/plugins/jetpack/modules/custom-css/csstidy/cssparsed-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-code#copytext{white-space:pre;font-family:Verdana}.at{color:#00008b}.format{color:gray}.property{color:green}.selector{color:#00f}.value{color:red;right:500px}.comment{color:orange} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-css/csstidy/cssparsed.css b/plugins/jetpack/modules/custom-css/csstidy/cssparsed.css
deleted file mode 100644
index 5aaf2bb1..00000000
--- a/plugins/jetpack/modules/custom-css/csstidy/cssparsed.css
+++ /dev/null
@@ -1,29 +0,0 @@
-code#copytext {
- white-space: pre;
- font-family: Verdana;
-}
-
-.at {
-color:darkblue;
-}
-
-.format {
-color:gray;
-}
-
-.property {
-color:green;
-}
-
-.selector {
-color:blue;
-}
-
-.value {
-color:red;
-left: 500px;
-}
-
-.comment {
-color:orange;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-css/csstidy/cssparsed.min.css b/plugins/jetpack/modules/custom-css/csstidy/cssparsed.min.css
deleted file mode 100644
index db96935e..00000000
--- a/plugins/jetpack/modules/custom-css/csstidy/cssparsed.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-code#copytext{white-space:pre;font-family:Verdana}.at{color:#00008b}.format{color:gray}.property{color:green}.selector{color:#00f}.value{color:red;left:500px}.comment{color:orange} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-css/csstidy/data-wp.inc.php b/plugins/jetpack/modules/custom-css/csstidy/data-wp.inc.php
deleted file mode 100644
index f0f7376f..00000000
--- a/plugins/jetpack/modules/custom-css/csstidy/data-wp.inc.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-
-unset( $GLOBALS['csstidy']['all_properties']['binding'] );
-
-$GLOBALS['csstidy']['all_properties']['text-size-adjust'] = 'CSS3.0';
-
-// Support browser prefixes for properties only in the latest CSS draft
-foreach ( $GLOBALS['csstidy']['all_properties'] as $property => $levels ) {
- if ( strpos( $levels, "," ) === false ) {
- $GLOBALS['csstidy']['all_properties']['-moz-' . $property] = $levels;
- $GLOBALS['csstidy']['all_properties']['-webkit-' . $property] = $levels;
- $GLOBALS['csstidy']['all_properties']['-ms-' . $property] = $levels;
- $GLOBALS['csstidy']['all_properties']['-o-' . $property] = $levels;
- $GLOBALS['csstidy']['all_properties']['-khtml-' . $property] = $levels;
-
- if ( in_array( $property, $GLOBALS['csstidy']['unit_values'] ) ) {
- $GLOBALS['csstidy']['unit_values'][] = '-moz-' . $property;
- $GLOBALS['csstidy']['unit_values'][] = '-webkit-' . $property;
- $GLOBALS['csstidy']['unit_values'][] = '-ms-' . $property;
- $GLOBALS['csstidy']['unit_values'][] = '-o-' . $property;
- $GLOBALS['csstidy']['unit_values'][] = '-khtml-' . $property;
- }
-
- if ( in_array( $property, $GLOBALS['csstidy']['color_values'] ) ) {
- $GLOBALS['csstidy']['color_values'][] = '-moz-' . $property;
- $GLOBALS['csstidy']['color_values'][] = '-webkit-' . $property;
- $GLOBALS['csstidy']['color_values'][] = '-ms-' . $property;
- $GLOBALS['csstidy']['color_values'][] = '-o-' . $property;
- $GLOBALS['csstidy']['color_values'][] = '-khtml-' . $property;
- }
- }
-}
-
-// Add `display` to the list of properties that can be used multiple times in a single selector
-$GLOBALS['csstidy']['multiple_properties'][] = 'display';
-
-// Allow vendor prefixes for any property that is allowed to be used multiple times inside a single selector
-foreach ( $GLOBALS['csstidy']['multiple_properties'] as $property ) {
- if ( '-' != $property[0] ) {
- $GLOBALS['csstidy']['multiple_properties'][] = '-o-' . $property;
- $GLOBALS['csstidy']['multiple_properties'][] = '-ms-' . $property;
- $GLOBALS['csstidy']['multiple_properties'][] = '-webkit-' . $property;
- $GLOBALS['csstidy']['multiple_properties'][] = '-moz-' . $property;
- $GLOBALS['csstidy']['multiple_properties'][] = '-khtml-' . $property;
- }
-}
-
-/**
- * CSS Animation
- *
- * @see https://developer.mozilla.org/en/CSS/CSS_animations
- */
-$GLOBALS['csstidy']['at_rules']['-webkit-keyframes'] = 'at';
-$GLOBALS['csstidy']['at_rules']['-moz-keyframes'] = 'at';
-$GLOBALS['csstidy']['at_rules']['-ms-keyframes'] = 'at';
-$GLOBALS['csstidy']['at_rules']['-o-keyframes'] = 'at';
-
-/**
- * Non-standard viewport rule.
- */
-$GLOBALS['csstidy']['at_rules']['viewport'] = 'is';
-$GLOBALS['csstidy']['at_rules']['-webkit-viewport'] = 'is';
-$GLOBALS['csstidy']['at_rules']['-moz-viewport'] = 'is';
-$GLOBALS['csstidy']['at_rules']['-ms-viewport'] = 'is';
-
-/**
- * Non-standard CSS properties. They're not part of any spec, but we say
- * they're in all of them so that we can support them.
- */
-$GLOBALS['csstidy']['all_properties']['-webkit-filter'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['-moz-filter'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['-ms-filter'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['filter'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['scrollbar-face-color'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['-ms-interpolation-mode'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['text-rendering'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['-webkit-transform-origin-x'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['-webkit-transform-origin-y'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['-webkit-transform-origin-z'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['-webkit-font-smoothing'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['-moz-osx-font-smoothing'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['-font-smooth'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['-o-object-fit'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['object-fit'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['-o-object-position'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['object-position'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['text-overflow'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['zoom'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['pointer-events'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['font-feature-settings'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['font-kerning'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['font-language-override'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['font-synthesis'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['font-variant-alternates'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['font-variant-caps'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['font-variant-east-asian'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['font-variant-ligatures'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['font-variant-numeric'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['font-variant-position'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['font-variation-settings'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['line-height-step'] = 'CSS3.0';
-
diff --git a/plugins/jetpack/modules/custom-css/csstidy/data.inc.php b/plugins/jetpack/modules/custom-css/csstidy/data.inc.php
deleted file mode 100644
index 9ed2e1c4..00000000
--- a/plugins/jetpack/modules/custom-css/csstidy/data.inc.php
+++ /dev/null
@@ -1,693 +0,0 @@
-<?php
-/**
- * Various CSS Data for CSSTidy
- *
- * This file is part of CSSTidy.
- *
- * CSSTidy is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * CSSTidy is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with CSSTidy; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * @license http://opensource.org/licenses/gpl-license.php GNU Public License
- * @package csstidy
- * @author Florian Schmitz (floele at gmail dot com) 2005
- * @author Nikolay Matsievsky (speed at webo dot name) 2010
- */
-
-define('AT_START', 1);
-define('AT_END', 2);
-define('SEL_START', 3);
-define('SEL_END', 4);
-define('PROPERTY', 5);
-define('VALUE', 6);
-define('COMMENT', 7);
-define('DEFAULT_AT', 41);
-
-/**
- * All whitespace allowed in CSS
- *
- * @global array $GLOBALS['csstidy']['whitespace']
- * @version 1.0
- */
-$GLOBALS['csstidy']['whitespace'] = array(' ',"\n","\t","\r","\x0B");
-
-/**
- * All CSS tokens used by csstidy
- *
- * @global string $GLOBALS['csstidy']['tokens']
- * @version 1.0
- */
-$GLOBALS['csstidy']['tokens'] = '/@}{;:=\'"(,\\!$%&)*+.<>?[]^`|~';
-
-/**
- * All CSS units (CSS 3 units included)
- *
- * @see compress_numbers()
- * @global array $GLOBALS['csstidy']['units']
- * @version 1.0
- */
-$GLOBALS['csstidy']['units'] = array('in','cm','mm','pt','pc','px','rem','em','%','ex','gd','vw','vh','vm','deg','grad','rad','ms','s','khz','hz');
-
-/**
- * Available at-rules
- *
- * @global array $GLOBALS['csstidy']['at_rules']
- * @version 1.0
- */
-$GLOBALS['csstidy']['at_rules'] = array('page' => 'is','font-face' => 'is','charset' => 'iv', 'import' => 'iv','namespace' => 'iv','media' => 'at','keyframes' => 'at', 'supports' => 'at');
-
- /**
- * Properties that need a value with unit
- *
- * @todo CSS3 properties
- * @see compress_numbers();
- * @global array $GLOBALS['csstidy']['unit_values']
- * @version 1.2
- */
-$GLOBALS['csstidy']['unit_values'] = array ('background', 'background-position', 'background-size', 'border', 'border-top', 'border-right', 'border-bottom', 'border-left', 'border-width',
- 'border-top-width', 'border-right-width', 'border-left-width', 'border-bottom-width', 'bottom', 'border-spacing', 'column-gap', 'column-width',
- 'font-size', 'height', 'left', 'margin', 'margin-top', 'margin-right', 'margin-bottom', 'margin-left', 'max-height',
- 'max-width', 'min-height', 'min-width', 'outline', 'outline-width', 'padding', 'padding-top', 'padding-right',
- 'padding-bottom', 'padding-left', 'perspective', 'right', 'top', 'text-indent', 'letter-spacing', 'word-spacing', 'width');
-
-/**
- * Properties that allow <color> as value
- *
- * @todo CSS3 properties
- * @see compress_numbers();
- * @global array $GLOBALS['csstidy']['color_values']
- * @version 1.0
- */
-$GLOBALS['csstidy']['color_values'] = array();
-$GLOBALS['csstidy']['color_values'][] = 'background-color';
-$GLOBALS['csstidy']['color_values'][] = 'border-color';
-$GLOBALS['csstidy']['color_values'][] = 'border-top-color';
-$GLOBALS['csstidy']['color_values'][] = 'border-right-color';
-$GLOBALS['csstidy']['color_values'][] = 'border-bottom-color';
-$GLOBALS['csstidy']['color_values'][] = 'border-left-color';
-$GLOBALS['csstidy']['color_values'][] = 'color';
-$GLOBALS['csstidy']['color_values'][] = 'outline-color';
-$GLOBALS['csstidy']['color_values'][] = 'column-rule-color';
-
-/**
- * Default values for the background properties
- *
- * @todo Possibly property names will change during CSS3 development
- * @global array $GLOBALS['csstidy']['background_prop_default']
- * @see dissolve_short_bg()
- * @see merge_bg()
- * @version 1.0
- */
-$GLOBALS['csstidy']['background_prop_default'] = array();
-$GLOBALS['csstidy']['background_prop_default']['background-image'] = 'none';
-$GLOBALS['csstidy']['background_prop_default']['background-size'] = 'auto';
-$GLOBALS['csstidy']['background_prop_default']['background-repeat'] = 'repeat';
-$GLOBALS['csstidy']['background_prop_default']['background-position'] = '0 0';
-$GLOBALS['csstidy']['background_prop_default']['background-attachment'] = 'scroll';
-$GLOBALS['csstidy']['background_prop_default']['background-clip'] = 'border';
-$GLOBALS['csstidy']['background_prop_default']['background-origin'] = 'padding';
-$GLOBALS['csstidy']['background_prop_default']['background-color'] = 'transparent';
-
-/**
- * Default values for the font properties
- *
- * @global array $GLOBALS['csstidy']['font_prop_default']
- * @see merge_fonts()
- * @version 1.3
- */
-$GLOBALS['csstidy']['font_prop_default'] = array();
-$GLOBALS['csstidy']['font_prop_default']['font-style'] = 'normal';
-$GLOBALS['csstidy']['font_prop_default']['font-variant'] = 'normal';
-$GLOBALS['csstidy']['font_prop_default']['font-weight'] = 'normal';
-$GLOBALS['csstidy']['font_prop_default']['font-size'] = '';
-$GLOBALS['csstidy']['font_prop_default']['line-height'] = '';
-$GLOBALS['csstidy']['font_prop_default']['font-family'] = '';
-
-/**
- * A list of non-W3C color names which get replaced by their hex-codes
- *
- * @global array $GLOBALS['csstidy']['replace_colors']
- * @see cut_color()
- * @version 1.0
- */
-$GLOBALS['csstidy']['replace_colors'] = array();
-$GLOBALS['csstidy']['replace_colors']['aliceblue'] = '#f0f8ff';
-$GLOBALS['csstidy']['replace_colors']['antiquewhite'] = '#faebd7';
-$GLOBALS['csstidy']['replace_colors']['aquamarine'] = '#7fffd4';
-$GLOBALS['csstidy']['replace_colors']['azure'] = '#f0ffff';
-$GLOBALS['csstidy']['replace_colors']['beige'] = '#f5f5dc';
-$GLOBALS['csstidy']['replace_colors']['bisque'] = '#ffe4c4';
-$GLOBALS['csstidy']['replace_colors']['blanchedalmond'] = '#ffebcd';
-$GLOBALS['csstidy']['replace_colors']['blueviolet'] = '#8a2be2';
-$GLOBALS['csstidy']['replace_colors']['brown'] = '#a52a2a';
-$GLOBALS['csstidy']['replace_colors']['burlywood'] = '#deb887';
-$GLOBALS['csstidy']['replace_colors']['cadetblue'] = '#5f9ea0';
-$GLOBALS['csstidy']['replace_colors']['chartreuse'] = '#7fff00';
-$GLOBALS['csstidy']['replace_colors']['chocolate'] = '#d2691e';
-$GLOBALS['csstidy']['replace_colors']['coral'] = '#ff7f50';
-$GLOBALS['csstidy']['replace_colors']['cornflowerblue'] = '#6495ed';
-$GLOBALS['csstidy']['replace_colors']['cornsilk'] = '#fff8dc';
-$GLOBALS['csstidy']['replace_colors']['crimson'] = '#dc143c';
-$GLOBALS['csstidy']['replace_colors']['cyan'] = '#00ffff';
-$GLOBALS['csstidy']['replace_colors']['darkblue'] = '#00008b';
-$GLOBALS['csstidy']['replace_colors']['darkcyan'] = '#008b8b';
-$GLOBALS['csstidy']['replace_colors']['darkgoldenrod'] = '#b8860b';
-$GLOBALS['csstidy']['replace_colors']['darkgray'] = '#a9a9a9';
-$GLOBALS['csstidy']['replace_colors']['darkgreen'] = '#006400';
-$GLOBALS['csstidy']['replace_colors']['darkkhaki'] = '#bdb76b';
-$GLOBALS['csstidy']['replace_colors']['darkmagenta'] = '#8b008b';
-$GLOBALS['csstidy']['replace_colors']['darkolivegreen'] = '#556b2f';
-$GLOBALS['csstidy']['replace_colors']['darkorange'] = '#ff8c00';
-$GLOBALS['csstidy']['replace_colors']['darkorchid'] = '#9932cc';
-$GLOBALS['csstidy']['replace_colors']['darkred'] = '#8b0000';
-$GLOBALS['csstidy']['replace_colors']['darksalmon'] = '#e9967a';
-$GLOBALS['csstidy']['replace_colors']['darkseagreen'] = '#8fbc8f';
-$GLOBALS['csstidy']['replace_colors']['darkslateblue'] = '#483d8b';
-$GLOBALS['csstidy']['replace_colors']['darkslategray'] = '#2f4f4f';
-$GLOBALS['csstidy']['replace_colors']['darkturquoise'] = '#00ced1';
-$GLOBALS['csstidy']['replace_colors']['darkviolet'] = '#9400d3';
-$GLOBALS['csstidy']['replace_colors']['deeppink'] = '#ff1493';
-$GLOBALS['csstidy']['replace_colors']['deepskyblue'] = '#00bfff';
-$GLOBALS['csstidy']['replace_colors']['dimgray'] = '#696969';
-$GLOBALS['csstidy']['replace_colors']['dodgerblue'] = '#1e90ff';
-$GLOBALS['csstidy']['replace_colors']['feldspar'] = '#d19275';
-$GLOBALS['csstidy']['replace_colors']['firebrick'] = '#b22222';
-$GLOBALS['csstidy']['replace_colors']['floralwhite'] = '#fffaf0';
-$GLOBALS['csstidy']['replace_colors']['forestgreen'] = '#228b22';
-$GLOBALS['csstidy']['replace_colors']['gainsboro'] = '#dcdcdc';
-$GLOBALS['csstidy']['replace_colors']['ghostwhite'] = '#f8f8ff';
-$GLOBALS['csstidy']['replace_colors']['gold'] = '#ffd700';
-$GLOBALS['csstidy']['replace_colors']['goldenrod'] = '#daa520';
-$GLOBALS['csstidy']['replace_colors']['greenyellow'] = '#adff2f';
-$GLOBALS['csstidy']['replace_colors']['honeydew'] = '#f0fff0';
-$GLOBALS['csstidy']['replace_colors']['hotpink'] = '#ff69b4';
-$GLOBALS['csstidy']['replace_colors']['indianred'] = '#cd5c5c';
-$GLOBALS['csstidy']['replace_colors']['indigo'] = '#4b0082';
-$GLOBALS['csstidy']['replace_colors']['ivory'] = '#fffff0';
-$GLOBALS['csstidy']['replace_colors']['khaki'] = '#f0e68c';
-$GLOBALS['csstidy']['replace_colors']['lavender'] = '#e6e6fa';
-$GLOBALS['csstidy']['replace_colors']['lavenderblush'] = '#fff0f5';
-$GLOBALS['csstidy']['replace_colors']['lawngreen'] = '#7cfc00';
-$GLOBALS['csstidy']['replace_colors']['lemonchiffon'] = '#fffacd';
-$GLOBALS['csstidy']['replace_colors']['lightblue'] = '#add8e6';
-$GLOBALS['csstidy']['replace_colors']['lightcoral'] = '#f08080';
-$GLOBALS['csstidy']['replace_colors']['lightcyan'] = '#e0ffff';
-$GLOBALS['csstidy']['replace_colors']['lightgoldenrodyellow'] = '#fafad2';
-$GLOBALS['csstidy']['replace_colors']['lightgrey'] = '#d3d3d3';
-$GLOBALS['csstidy']['replace_colors']['lightgreen'] = '#90ee90';
-$GLOBALS['csstidy']['replace_colors']['lightpink'] = '#ffb6c1';
-$GLOBALS['csstidy']['replace_colors']['lightsalmon'] = '#ffa07a';
-$GLOBALS['csstidy']['replace_colors']['lightseagreen'] = '#20b2aa';
-$GLOBALS['csstidy']['replace_colors']['lightskyblue'] = '#87cefa';
-$GLOBALS['csstidy']['replace_colors']['lightslateblue'] = '#8470ff';
-$GLOBALS['csstidy']['replace_colors']['lightslategray'] = '#778899';
-$GLOBALS['csstidy']['replace_colors']['lightsteelblue'] = '#b0c4de';
-$GLOBALS['csstidy']['replace_colors']['lightyellow'] = '#ffffe0';
-$GLOBALS['csstidy']['replace_colors']['limegreen'] = '#32cd32';
-$GLOBALS['csstidy']['replace_colors']['linen'] = '#faf0e6';
-$GLOBALS['csstidy']['replace_colors']['magenta'] = '#ff00ff';
-$GLOBALS['csstidy']['replace_colors']['mediumaquamarine'] = '#66cdaa';
-$GLOBALS['csstidy']['replace_colors']['mediumblue'] = '#0000cd';
-$GLOBALS['csstidy']['replace_colors']['mediumorchid'] = '#ba55d3';
-$GLOBALS['csstidy']['replace_colors']['mediumpurple'] = '#9370d8';
-$GLOBALS['csstidy']['replace_colors']['mediumseagreen'] = '#3cb371';
-$GLOBALS['csstidy']['replace_colors']['mediumslateblue'] = '#7b68ee';
-$GLOBALS['csstidy']['replace_colors']['mediumspringgreen'] = '#00fa9a';
-$GLOBALS['csstidy']['replace_colors']['mediumturquoise'] = '#48d1cc';
-$GLOBALS['csstidy']['replace_colors']['mediumvioletred'] = '#c71585';
-$GLOBALS['csstidy']['replace_colors']['midnightblue'] = '#191970';
-$GLOBALS['csstidy']['replace_colors']['mintcream'] = '#f5fffa';
-$GLOBALS['csstidy']['replace_colors']['mistyrose'] = '#ffe4e1';
-$GLOBALS['csstidy']['replace_colors']['moccasin'] = '#ffe4b5';
-$GLOBALS['csstidy']['replace_colors']['navajowhite'] = '#ffdead';
-$GLOBALS['csstidy']['replace_colors']['oldlace'] = '#fdf5e6';
-$GLOBALS['csstidy']['replace_colors']['olivedrab'] = '#6b8e23';
-$GLOBALS['csstidy']['replace_colors']['orangered'] = '#ff4500';
-$GLOBALS['csstidy']['replace_colors']['orchid'] = '#da70d6';
-$GLOBALS['csstidy']['replace_colors']['palegoldenrod'] = '#eee8aa';
-$GLOBALS['csstidy']['replace_colors']['palegreen'] = '#98fb98';
-$GLOBALS['csstidy']['replace_colors']['paleturquoise'] = '#afeeee';
-$GLOBALS['csstidy']['replace_colors']['palevioletred'] = '#d87093';
-$GLOBALS['csstidy']['replace_colors']['papayawhip'] = '#ffefd5';
-$GLOBALS['csstidy']['replace_colors']['peachpuff'] = '#ffdab9';
-$GLOBALS['csstidy']['replace_colors']['peru'] = '#cd853f';
-$GLOBALS['csstidy']['replace_colors']['pink'] = '#ffc0cb';
-$GLOBALS['csstidy']['replace_colors']['plum'] = '#dda0dd';
-$GLOBALS['csstidy']['replace_colors']['powderblue'] = '#b0e0e6';
-$GLOBALS['csstidy']['replace_colors']['rosybrown'] = '#bc8f8f';
-$GLOBALS['csstidy']['replace_colors']['royalblue'] = '#4169e1';
-$GLOBALS['csstidy']['replace_colors']['saddlebrown'] = '#8b4513';
-$GLOBALS['csstidy']['replace_colors']['salmon'] = '#fa8072';
-$GLOBALS['csstidy']['replace_colors']['sandybrown'] = '#f4a460';
-$GLOBALS['csstidy']['replace_colors']['seagreen'] = '#2e8b57';
-$GLOBALS['csstidy']['replace_colors']['seashell'] = '#fff5ee';
-$GLOBALS['csstidy']['replace_colors']['sienna'] = '#a0522d';
-$GLOBALS['csstidy']['replace_colors']['skyblue'] = '#87ceeb';
-$GLOBALS['csstidy']['replace_colors']['slateblue'] = '#6a5acd';
-$GLOBALS['csstidy']['replace_colors']['slategray'] = '#708090';
-$GLOBALS['csstidy']['replace_colors']['snow'] = '#fffafa';
-$GLOBALS['csstidy']['replace_colors']['springgreen'] = '#00ff7f';
-$GLOBALS['csstidy']['replace_colors']['steelblue'] = '#4682b4';
-$GLOBALS['csstidy']['replace_colors']['tan'] = '#d2b48c';
-$GLOBALS['csstidy']['replace_colors']['thistle'] = '#d8bfd8';
-$GLOBALS['csstidy']['replace_colors']['tomato'] = '#ff6347';
-$GLOBALS['csstidy']['replace_colors']['turquoise'] = '#40e0d0';
-$GLOBALS['csstidy']['replace_colors']['violet'] = '#ee82ee';
-$GLOBALS['csstidy']['replace_colors']['violetred'] = '#d02090';
-$GLOBALS['csstidy']['replace_colors']['wheat'] = '#f5deb3';
-$GLOBALS['csstidy']['replace_colors']['whitesmoke'] = '#f5f5f5';
-$GLOBALS['csstidy']['replace_colors']['yellowgreen'] = '#9acd32';
-
-/**
- * A list of all shorthand properties that are divided into four properties and/or have four subvalues
- *
- * @global array $GLOBALS['csstidy']['shorthands']
- * @todo Are there new ones in CSS3?
- * @see dissolve_4value_shorthands()
- * @see merge_4value_shorthands()
- * @version 1.0
- */
-$GLOBALS['csstidy']['shorthands'] = array();
-$GLOBALS['csstidy']['shorthands']['border-color'] = array('border-top-color','border-right-color','border-bottom-color','border-left-color');
-$GLOBALS['csstidy']['shorthands']['border-style'] = array('border-top-style','border-right-style','border-bottom-style','border-left-style');
-$GLOBALS['csstidy']['shorthands']['border-width'] = array('border-top-width','border-right-width','border-bottom-width','border-left-width');
-$GLOBALS['csstidy']['shorthands']['margin'] = array('margin-top','margin-right','margin-bottom','margin-left');
-$GLOBALS['csstidy']['shorthands']['padding'] = array('padding-top','padding-right','padding-bottom','padding-left');
-$GLOBALS['csstidy']['shorthands']['-moz-border-radius'] = 0;
-
-/**
- * All CSS Properties. Needed for csstidy::property_is_next()
- *
- * @global array $GLOBALS['csstidy']['all_properties']
- * @todo Add CSS3 properties
- * @version 1.0
- * @see csstidy::property_is_next()
- */
-$GLOBALS['csstidy']['all_properties']['align-content'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['align-items'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['align-self'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['alignment-adjust'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['alignment-baseline'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['animation'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['animation-delay'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['animation-direction'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['animation-duration'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['animation-fill-mode'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['animation-iteration-count'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['animation-name'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['animation-play-state'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['animation-timing-function'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['appearance'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['azimuth'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['backface-visibility'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['background'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['background-attachment'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['background-clip'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['background-color'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['background-image'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['background-origin'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['background-position'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['background-repeat'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['background-size'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['baseline-shift'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['binding'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['bleed'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['bookmark-label'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['bookmark-level'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['bookmark-state'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['bookmark-target'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-bottom'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-bottom-color'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-bottom-left-radius'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-bottom-right-radius'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-bottom-style'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-bottom-width'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-collapse'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-color'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-image'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-image-outset'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-image-repeat'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-image-slice'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-image-source'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-image-width'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-left'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-left-color'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-left-style'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-left-width'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-radius'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-right'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-right-color'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-right-style'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-right-width'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-spacing'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-style'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-top'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-top-color'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-top-left-radius'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-top-right-radius'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-top-style'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-top-width'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['border-width'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['bottom'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['box-decoration-break'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['box-shadow'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['box-sizing'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['break-after'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['break-before'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['break-inside'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['caption-side'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['clear'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['clip'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['color'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['color-profile'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['column-count'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['column-fill'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['column-gap'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['column-rule'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['column-rule-color'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['column-rule-style'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['column-rule-width'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['column-span'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['column-width'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['columns'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['content'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['counter-increment'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['counter-reset'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['crop'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['cue'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['cue-after'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['cue-before'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['cursor'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['direction'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['display'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['dominant-baseline'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['drop-initial-after-adjust'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['drop-initial-after-align'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['drop-initial-before-adjust'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['drop-initial-before-align'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['drop-initial-size'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['drop-initial-value'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['elevation'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['empty-cells'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['fill'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['fit'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['fit-position'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['flex'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['flex-align'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['flex-basis'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['flex-direction'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['flex-flow'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['flex-grow'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['flex-line-pack'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['flex-order'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['flex-pack'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['flex-shrink'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['flex-wrap'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['float'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['float-offset'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['font'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['font-family'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['font-size'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['font-size-adjust'] = 'CSS2.0,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['font-stretch'] = 'CSS2.0,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['font-style'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['font-variant'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['font-weight'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['grid'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['grid-area'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['grid-auto-columns'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['grid-auto-flow'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['grid-auto-rows'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['grid-column'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['grid-columns'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['grid-column-end'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['grid-column-gap'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['grid-column-start'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['grid-gap'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['grid-row'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['grid-rows'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['grid-row-end'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['grid-row-gap'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['grid-row-start'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['grid-template'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['grid-template-areas'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['grid-template-columns'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['grid-template-rows'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['hanging-punctuation'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['height'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['hyphenate-after'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['hyphenate-before'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['hyphenate-character'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['hyphenate-lines'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['hyphenate-resource'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['hyphens'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['icon'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['image-orientation'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['image-rendering'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['image-resolution'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['inline-box-align'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['justify-content'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['justify-items'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['justify-self'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['left'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['letter-spacing'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['line-break'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['line-height'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['line-stacking'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['line-stacking-ruby'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['line-stacking-shift'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['line-stacking-strategy'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['list-style'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['list-style-image'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['list-style-position'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['list-style-type'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['margin'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['margin-bottom'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['margin-left'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['margin-right'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['margin-top'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['marker-offset'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['marks'] = 'CSS2.0,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['marquee-direction'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['marquee-loop'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['marquee-play-count'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['marquee-speed'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['marquee-style'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['max-height'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['max-width'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['min-height'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['min-width'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['move-to'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['nav-down'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['nav-index'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['nav-left'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['nav-right'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['nav-up'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['opacity'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['order'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['orphans'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['outline'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['outline-color'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['outline-offset'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['outline-style'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['outline-width'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['overflow'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['overflow-style'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['overflow-wrap'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['overflow-x'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['overflow-y'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['padding'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['padding-bottom'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['padding-left'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['padding-right'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['padding-top'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['page'] = 'CSS2.0,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['page-break-after'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['page-break-before'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['page-break-inside'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['page-policy'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['pause'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['pause-after'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['pause-before'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['perspective'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['perspective-origin'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['phonemes'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['pitch'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['pitch-range'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['play-during'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['position'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['presentation-level'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['punctuation-trim'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['quotes'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['rendering-intent'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['resize'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['rest'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['rest-after'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['rest-before'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['richness'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['right'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['rotation'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['rotation-point'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['ruby-align'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['ruby-overhang'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['ruby-position'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['ruby-span'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['size'] = 'CSS2.0,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['speak'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['speak-header'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['speak-numeral'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['speak-punctuation'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['speech-rate'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['src'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['stress'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['string-set'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['stroke'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['tab-size'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['table-layout'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['target'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['target-name'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['target-new'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['target-position'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['text-align'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['text-align-last'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['text-decoration'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['text-decoration-color'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['text-decoration-line'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['text-decoration-skip'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['text-decoration-style'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['text-emphasis'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['text-emphasis-color'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['text-emphasis-position'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['text-emphasis-style'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['text-height'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['text-indent'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['text-justify'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['text-outline'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['text-shadow'] = 'CSS2.0,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['text-space-collapse'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['text-transform'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['text-underline-position'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['text-wrap'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['top'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['transform'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['transform-origin'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['transform-style'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['transition'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['transition-delay'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['transition-duration'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['transition-property'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['transition-timing-function'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['unicode-bidi'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['vertical-align'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['visibility'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['voice-balance'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['voice-duration'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['voice-family'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['voice-pitch'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['voice-pitch-range'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['voice-rate'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['voice-stress'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['voice-volume'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['volume'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['white-space'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['widows'] = 'CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['width'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['word-break'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['word-spacing'] = 'CSS1.0,CSS2.0,CSS2.1,CSS3.0';
-$GLOBALS['csstidy']['all_properties']['word-wrap'] = 'CSS3.0';
-$GLOBALS['csstidy']['all_properties']['z-index'] = 'CSS2.0,CSS2.1,CSS3.0';
-
-/**
- * An array containing all properties that can accept a quoted string as a value.
- *
- * @global array $GLOBALS['csstidy']['quoted_string_properties']
- */
-$GLOBALS['csstidy']['quoted_string_properties'] = array('content', 'font', 'font-family', 'quotes');
-
-/**
- * An array containing all properties that can be defined multiple times without being overwritten.
- * All unit values are included so that units like rem can be supported with fallbacks to px or em.
- *
- * @global array $GLOBALS['csstidy']['quoted_string_properties']
- */
-$GLOBALS['csstidy']['multiple_properties'] = array_merge( $GLOBALS['csstidy']['color_values'], $GLOBALS['csstidy']['unit_values'], array( 'transition', 'background-image', 'border-image', 'list-style-image' ) );
-
-/**
- * An array containing all predefined templates.
- *
- * @global array $GLOBALS['csstidy']['predefined_templates']
- * @version 1.0
- * @see csstidy::load_template()
- */
-$GLOBALS['csstidy']['predefined_templates']['default'][] = '<span class="at">'; //string before @rule
-$GLOBALS['csstidy']['predefined_templates']['default'][] = '</span> <span class="format">{</span>'."\n"; //bracket after @-rule
-$GLOBALS['csstidy']['predefined_templates']['default'][] = '<span class="selector">'; //string before selector
-$GLOBALS['csstidy']['predefined_templates']['default'][] = '</span> <span class="format">{</span>'."\n"; //bracket after selector
-$GLOBALS['csstidy']['predefined_templates']['default'][] = '<span class="property">'; //string before property
-$GLOBALS['csstidy']['predefined_templates']['default'][] = '</span><span class="value">'; //string after property+before value
-$GLOBALS['csstidy']['predefined_templates']['default'][] = '</span><span class="format">;</span>'."\n"; //string after value
-$GLOBALS['csstidy']['predefined_templates']['default'][] = '<span class="format">}</span>'; //closing bracket - selector
-$GLOBALS['csstidy']['predefined_templates']['default'][] = "\n\n"; //space between blocks {...}
-$GLOBALS['csstidy']['predefined_templates']['default'][] = "\n".'<span class="format">}</span>'. "\n\n"; //closing bracket @-rule
-$GLOBALS['csstidy']['predefined_templates']['default'][] = ''; //indent in @-rule
-$GLOBALS['csstidy']['predefined_templates']['default'][] = '<span class="comment">'; // before comment
-$GLOBALS['csstidy']['predefined_templates']['default'][] = '</span>'."\n"; // after comment
-$GLOBALS['csstidy']['predefined_templates']['default'][] = "\n"; // after last line @-rule
-
-$GLOBALS['csstidy']['predefined_templates']['high_compression'][] = '<span class="at">';
-$GLOBALS['csstidy']['predefined_templates']['high_compression'][] = '</span> <span class="format">{</span>'."\n";
-$GLOBALS['csstidy']['predefined_templates']['high_compression'][] = '<span class="selector">';
-$GLOBALS['csstidy']['predefined_templates']['high_compression'][] = '</span><span class="format">{</span>';
-$GLOBALS['csstidy']['predefined_templates']['high_compression'][] = '<span class="property">';
-$GLOBALS['csstidy']['predefined_templates']['high_compression'][] = '</span><span class="value">';
-$GLOBALS['csstidy']['predefined_templates']['high_compression'][] = '</span><span class="format">;</span>';
-$GLOBALS['csstidy']['predefined_templates']['high_compression'][] = '<span class="format">}</span>';
-$GLOBALS['csstidy']['predefined_templates']['high_compression'][] = "\n";
-$GLOBALS['csstidy']['predefined_templates']['high_compression'][] = "\n". '<span class="format">}'."\n".'</span>';
-$GLOBALS['csstidy']['predefined_templates']['high_compression'][] = '';
-$GLOBALS['csstidy']['predefined_templates']['high_compression'][] = '<span class="comment">'; // before comment
-$GLOBALS['csstidy']['predefined_templates']['high_compression'][] = '</span>'; // after comment
-$GLOBALS['csstidy']['predefined_templates']['high_compression'][] = "\n";
-
-$GLOBALS['csstidy']['predefined_templates']['highest_compression'][] = '<span class="at">';
-$GLOBALS['csstidy']['predefined_templates']['highest_compression'][] = '</span><span class="format">{</span>';
-$GLOBALS['csstidy']['predefined_templates']['highest_compression'][] = '<span class="selector">';
-$GLOBALS['csstidy']['predefined_templates']['highest_compression'][] = '</span><span class="format">{</span>';
-$GLOBALS['csstidy']['predefined_templates']['highest_compression'][] = '<span class="property">';
-$GLOBALS['csstidy']['predefined_templates']['highest_compression'][] = '</span><span class="value">';
-$GLOBALS['csstidy']['predefined_templates']['highest_compression'][] = '</span><span class="format">;</span>';
-$GLOBALS['csstidy']['predefined_templates']['highest_compression'][] = '<span class="format">}</span>';
-$GLOBALS['csstidy']['predefined_templates']['highest_compression'][] = '';
-$GLOBALS['csstidy']['predefined_templates']['highest_compression'][] = '<span class="format">}</span>';
-$GLOBALS['csstidy']['predefined_templates']['highest_compression'][] = '';
-$GLOBALS['csstidy']['predefined_templates']['highest_compression'][] = '<span class="comment">'; // before comment
-$GLOBALS['csstidy']['predefined_templates']['highest_compression'][] = '</span>'; // after comment
-$GLOBALS['csstidy']['predefined_templates']['highest_compression'][] = '';
-
-$GLOBALS['csstidy']['predefined_templates']['low_compression'][] = '<span class="at">';
-$GLOBALS['csstidy']['predefined_templates']['low_compression'][] = '</span> <span class="format">{</span>'."\n";
-$GLOBALS['csstidy']['predefined_templates']['low_compression'][] = '<span class="selector">';
-$GLOBALS['csstidy']['predefined_templates']['low_compression'][] = '</span>'."\n".'<span class="format">{</span>'."\n";
-$GLOBALS['csstidy']['predefined_templates']['low_compression'][] = ' <span class="property">';
-$GLOBALS['csstidy']['predefined_templates']['low_compression'][] = '</span><span class="value">';
-$GLOBALS['csstidy']['predefined_templates']['low_compression'][] = '</span><span class="format">;</span>'."\n";
-$GLOBALS['csstidy']['predefined_templates']['low_compression'][] = '<span class="format">}</span>';
-$GLOBALS['csstidy']['predefined_templates']['low_compression'][] = "\n\n";
-$GLOBALS['csstidy']['predefined_templates']['low_compression'][] = "\n".'<span class="format">}</span>'."\n\n";
-$GLOBALS['csstidy']['predefined_templates']['low_compression'][] = ' ';
-$GLOBALS['csstidy']['predefined_templates']['low_compression'][] = '<span class="comment">'; // before comment
-$GLOBALS['csstidy']['predefined_templates']['low_compression'][] = '</span>'."\n"; // after comment
-$GLOBALS['csstidy']['predefined_templates']['low_compression'][] = "\n";
-
-require dirname( __FILE__ ) . '/data-wp.inc.php';
diff --git a/plugins/jetpack/modules/custom-css/csstidy/lang.inc.php b/plugins/jetpack/modules/custom-css/csstidy/lang.inc.php
deleted file mode 100644
index d4c61114..00000000
--- a/plugins/jetpack/modules/custom-css/csstidy/lang.inc.php
+++ /dev/null
@@ -1,308 +0,0 @@
-<?php
-
-/**
- * Localization of CSS Optimiser Interface of CSSTidy
- *
- * Copyright 2005, 2006, 2007 Florian Schmitz
- *
- * This file is part of CSSTidy.
- *
- * CSSTidy is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
- *
- * CSSTidy is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * @license http://opensource.org/licenses/lgpl-license.php GNU Lesser General Public License
- * @package csstidy
- * @author Florian Schmitz (floele at gmail dot com) 2005-2007
- * @author Brett Zamir (brettz9 at yahoo dot com) 2007
- */
-
-if ( isset( $_GET['lang'] ) ) {
- $l = $_GET['lang'];
-} elseif ( isset( $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) ) {
- $l = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
- $l = strtolower( substr( $l, 0, 2 ) );
-} else {
- $l = '';
-}
-
-$l = ( in_array( $l, array( 'de', 'fr', 'zh' ) ) ) ? $l : 'en';
-
-// note 5 in all but French, and 40 in all are orphaned
-
-$lang = array();
-$lang['en'][0] = 'CSS Formatter and Optimiser/Optimizer (based on CSSTidy ';
-$lang['en'][1] = 'CSS Formatter and Optimiser';
-$lang['en'][2] = '(based on';
-$lang['en'][3] = '(plaintext)';
-$lang['en'][4] = 'Important Note:';
-$lang['en'][6] = 'Your code should be well-formed. This is <strong>not a validator</strong> which points out errors in your CSS code. To make sure that your code is valid, use the <a href="http://jigsaw.w3.org/css-validator/">W3C Validator</a>.';
-$lang['en'][7] = 'all comments are removed';
-$lang['en'][8] = 'CSS Input:';
-$lang['en'][9] = 'CSS-Code:';
-$lang['en'][10] = 'CSS from URL:';
-$lang['en'][11] = 'Code Layout:';
-$lang['en'][12] = 'Compression&#160;(code&#160;layout):';
-$lang['en'][13] = 'Highest (no readability, smallest size)';
-$lang['en'][14] = 'High (moderate readability, smaller size)';
-$lang['en'][15] = 'Standard (balance between readability and size)';
-$lang['en'][16] = 'Low (higher readability)';
-$lang['en'][17] = 'Custom (enter below)';
-$lang['en'][18] = 'Custom <a href="http://csstidy.sourceforge.net/templates.php">template</a>';
-$lang['en'][19] = 'Options';
-$lang['en'][20] = 'Sort Selectors (caution)';
-$lang['en'][21] = 'Sort Properties';
-$lang['en'][22] = 'Regroup selectors';
-$lang['en'][23] = 'Optimise shorthands';
-$lang['en'][24] = 'Compress colors';
-$lang['en'][25] = 'Lowercase selectors';
-$lang['en'][26] = 'Case for properties:';
-$lang['en'][27] = 'Lowercase';
-$lang['en'][28] = 'No or invalid CSS input or wrong URL!';
-$lang['en'][29] = 'Uppercase';
-$lang['en'][30] = 'lowercase elementnames needed for XHTML';
-$lang['en'][31] = 'Remove unnecessary backslashes';
-$lang['en'][32] = 'convert !important-hack';
-$lang['en'][33] = 'Output as file';
-$lang['en'][34] = 'Bigger compression because of smaller newlines (copy &#38; paste doesn\'t work)';
-$lang['en'][35] = 'Process CSS';
-$lang['en'][36] = 'Compression Ratio';
-$lang['en'][37] = 'Input';
-$lang['en'][38] = 'Output';
-$lang['en'][39] = 'Language';
-$lang['en'][41] = 'Attention: This may change the behavior of your CSS Code!';
-$lang['en'][42] = 'Remove last ;';
-$lang['en'][43] = 'Discard invalid properties';
-$lang['en'][44] = 'Only safe optimisations';
-$lang['en'][45] = 'Compress font-weight';
-$lang['en'][46] = 'Save comments';
-$lang['en'][47] = 'Do not change anything';
-$lang['en'][48] = 'Only separate selectors (split at ,)';
-$lang['en'][49] = 'Merge selectors with the same properties (fast)';
-$lang['en'][50] = 'Merge selectors intelligently (slow)';
-$lang['en'][51] = 'Preserve CSS';
-$lang['en'][52] = 'Save comments, hacks, etc. Most optimisations can *not* be applied if this is enabled.';
-$lang['en'][53] = 'None';
-$lang['en'][54] = 'Don\'t optimise';
-$lang['en'][55] = 'Safe optimisations';
-$lang['en'][56] = 'All optimisations';
-$lang['en'][57] = 'Add timestamp';
-$lang['en'][58] = 'Copy to clipboard';
-$lang['en'][59] = 'Back to top';
-$lang['en'][60] = 'Your browser doesn\'t support copy to clipboard.';
-$lang['en'][61] = 'For bugs and suggestions feel free to';
-$lang['en'][62] = 'contact me';
-$lang['en'][63] = 'Output CSS code as complete HTML document';
-$lang['en'][64] = 'Code';
-$lang['en'][65] = 'CSS to style CSS output';
-$lang['en'][66] = 'You need to go to about:config in your URL bar, select \'signed.applets.codebase_principal_support\' in the filter field, and set its value to true in order to use this feature; however, be aware that doing so increases security risks.';
-
-
-$lang['de'][0] = 'CSS Formatierer und Optimierer (basierend auf CSSTidy ';
-$lang['de'][1] = 'CSS Formatierer und Optimierer';
-$lang['de'][2] = '(basierend auf';
-$lang['de'][3] = '(Textversion)';
-$lang['de'][4] = 'Wichtiger Hinweis:';
-$lang['de'][6] = 'Der CSS Code sollte wohlgeformt sein. Der CSS Code wird <strong>nicht auf Gültigkeit überprüft</strong>. Um sicherzugehen dass dein Code valide ist, benutze den <a href="http://jigsaw.w3.org/css-validator/">W3C Validierungsservice</a>.';
-$lang['de'][7] = 'alle Kommentare werden entfernt';
-$lang['de'][8] = 'CSS Eingabe:';
-$lang['de'][9] = 'CSS-Code:';
-$lang['de'][10] = 'CSS von URL:';
-$lang['de'][11] = 'Code Layout:';
-$lang['de'][12] = 'Komprimierung&#160;(Code&#160;Layout):';
-$lang['de'][13] = 'Höchste (keine Lesbarkeit, niedrigste Größe)';
-$lang['de'][14] = 'Hoch (mittelmäßige Lesbarkeit, geringe Größe)';
-$lang['de'][15] = 'Standard (Kompromiss zwischen Lesbarkeit und Größe)';
-$lang['de'][16] = 'Niedrig (höhere Lesbarkeit)';
-$lang['de'][17] = 'Benutzerdefiniert (unten eingeben)';
-$lang['de'][18] = 'Benutzerdefinierte <a href="http://csstidy.sourceforge.net/templates.php">Vorlage</a>';
-$lang['de'][19] = 'Optionen';
-$lang['de'][20] = 'Selektoren sortieren (Vorsicht)';
-$lang['de'][21] = 'Eigenschaften sortieren';
-$lang['de'][22] = 'Selektoren umgruppieren';
-$lang['de'][23] = 'Shorthands optimieren';
-$lang['de'][24] = 'Farben komprimieren';
-$lang['de'][25] = 'Selektoren in Kleinbuchstaben';
-$lang['de'][26] = 'Groß-/Kleinschreibung für Eigenschaften';
-$lang['de'][27] = 'Kleinbuchstaben';
-$lang['de'][28] = 'Keine oder ungültige CSS Eingabe oder falsche URL!';
-$lang['de'][29] = 'Großbuchstaben';
-$lang['de'][30] = 'kleingeschriebene Elementnamen benötigt für XHTML';
-$lang['de'][31] = 'Unnötige Backslashes entfernen';
-$lang['de'][32] = '!important-Hack konvertieren';
-$lang['de'][33] = 'Als Datei ausgeben';
-$lang['de'][34] = 'Größere Komprimierung augrund von kleineren Neuezeile-Zeichen';
-$lang['de'][35] = 'CSS verarbeiten';
-$lang['de'][36] = 'Komprimierungsrate';
-$lang['de'][37] = 'Eingabe';
-$lang['de'][38] = 'Ausgabe';
-$lang['de'][39] = 'Sprache';
-$lang['de'][41] = 'Achtung: Dies könnte das Verhalten ihres CSS-Codes verändern!';
-$lang['de'][42] = 'Letztes ; entfernen';
-$lang['de'][43] = 'Ungültige Eigenschaften entfernen';
-$lang['de'][44] = 'Nur sichere Optimierungen';
-$lang['de'][45] = 'font-weight komprimieren';
-$lang['de'][46] = 'Kommentare beibehalten';
-$lang['de'][47] = 'Nichts ändern';
-$lang['de'][48] = 'Selektoren nur trennen (am Komma)';
-$lang['de'][49] = 'Selektoren mit gleichen Eigenschaften zusammenfassen (schnell)';
-$lang['de'][50] = 'Selektoren intelligent zusammenfassen (langsam!)';
-$lang['de'][51] = 'CSS erhalten';
-$lang['de'][52] = 'Kommentare, Hacks, etc. speichern. Viele Optimierungen sind dann aber nicht mehr möglich.';
-$lang['de'][53] = 'Keine';
-$lang['de'][54] = 'Nicht optimieren';
-$lang['de'][55] = 'Sichere Optimierungen';
-$lang['de'][56] = 'Alle Optimierungen';
-$lang['de'][57] = 'Zeitstempel hinzufügen';
-$lang['de'][58] = 'Copy to clipboard';
-$lang['de'][59] = 'Back to top';
-$lang['de'][60] = 'Your browser doesn\'t support copy to clipboard.';
-$lang['de'][61] = 'For bugs and suggestions feel free to';
-$lang['de'][62] = 'contact me';
-$lang['de'][63] = 'Output CSS code as complete HTML document';
-$lang['de'][64] = 'Code';
-$lang['de'][65] = 'CSS to style CSS output';
-$lang['de'][66] = 'You need to go to about:config in your URL bar, select \'signed.applets.codebase_principal_support\' in the filter field, and set its value to true in order to use this feature; however, be aware that doing so increases security risks.';
-
-
-$lang['fr'][0] = 'CSS Formatteur et Optimiseur (basé sur CSSTidy ';
-$lang['fr'][1] = 'CSS Formatteur et Optimiseur';
-$lang['fr'][2] = '(basé sur ';
-$lang['fr'][3] = '(Version texte)';
-$lang['fr'][4] = 'Note Importante&#160;:';
-$lang['fr'][6] = 'Votre code doit être valide. Ce n’est <strong>pas un validateur</strong> qui signale les erreurs dans votre code CSS. Pour être sûr que votre code est correct, utilisez le validateur&#160;: <a href="http://jigsaw.w3.org/css-validator/">W3C Validator</a>.';
-$lang['fr'][7] = 'tous les commentaires sont enlevés';
-$lang['fr'][8] = 'Champ CSS&#160;:';
-$lang['fr'][9] = 'Code CSS&#160;:';
-$lang['fr'][10] = 'CSS en provenance d’une URL&#160;:<br />';
-$lang['fr'][11] = 'Mise en page du code&#160;:';
-$lang['fr'][12] = 'Compression (mise en page du code)&#160;:';
-$lang['fr'][13] = 'La plus élevée (aucune lisibilité, taille minimale)';
-$lang['fr'][14] = 'Élevée (lisibilité modérée, petite taille)';
-$lang['fr'][15] = 'Normale (équilibre entre lisibilité et taille)';
-$lang['fr'][16] = 'Faible (lisibilité élevée)';
-$lang['fr'][17] = 'Sur mesure (entrer ci-dessous)';
-$lang['fr'][18] = '<a href="http://csstidy.sourceforge.net/templates.php">Gabarit</a> sur mesure';
-$lang['fr'][19] = 'Options';
-$lang['fr'][20] = 'Trier les sélecteurs (attention)';
-$lang['fr'][21] = 'Trier les propriétés';
-$lang['fr'][22] = 'Regrouper les sélecteurs';
-$lang['fr'][23] = 'Propriétés raccourcies';
-$lang['fr'][24] = 'Compresser les couleurs';
-$lang['fr'][25] = 'Sélecteurs en minuscules';
-$lang['fr'][26] = 'Case pour les propriétés&#160;:';
-$lang['fr'][27] = 'Minuscule';
-$lang['fr'][28] = 'CSS non valide ou URL incorrecte&#160;!';
-$lang['fr'][29] = 'Majuscule';
-$lang['fr'][30] = 'les noms des éléments en minuscules (indispensables pour XHTML)';
-$lang['fr'][31] = 'enlever les antislashs inutiles';
-$lang['fr'][32] = 'convertir !important-hack';
-$lang['fr'][33] = 'Sauver en tant que fichier';
-$lang['fr'][34] = 'Meilleure compression grâce aux caractères de saut de ligne plus petits (copier &#38; coller ne marche pas)';
-$lang['fr'][35] = 'Compresser la CSS';
-$lang['fr'][36] = 'Facteur de Compression';
-$lang['fr'][37] = 'Entrée';
-$lang['fr'][38] = 'Sortie';
-$lang['fr'][39] = 'Langue';
-$lang['fr'][41] = 'Attention&#160;: ceci peut changer le comportement de votre code CSS&#160;!';
-$lang['fr'][42] = 'Enlever le dernier ;';
-$lang['fr'][43] = 'Supprimer les propriétés non valide';
-$lang['fr'][44] = 'Seulement les optimisations sûres';
-$lang['fr'][45] = 'Compresser font-weight';
-$lang['fr'][46] = 'Sauvegarder les commentaires ';
-$lang['fr'][47] = 'Ne rien changer';
-$lang['fr'][48] = 'Sépare les sélecteurs (sépare au niveau de ,)';
-$lang['fr'][49] = 'Fusionne les sélecteurs avec les mêmes propriétés (rapide)';
-$lang['fr'][50] = 'Fusionne les sélecteurs intelligemment (lent)';
-$lang['fr'][51] = 'Préserver la CSS';
-$lang['fr'][52] = 'Sauvegarder les commentaires, hacks, etc. La plupart des optimisations ne peuvent *pas* être appliquées si cela est activé.';
-$lang['fr'][53] = 'Aucun';
-$lang['fr'][54] = 'Ne pas optimiser';
-$lang['fr'][55] = 'Optimisations sûres';
-$lang['fr'][56] = 'Toutes les optimisations';
-$lang['fr'][57] = 'Ajouter un timestamp';
-$lang['fr'][58] = 'Copier dans le presse-papiers';
-$lang['fr'][59] = 'Retour en haut';
-$lang['fr'][60] = 'Votre navigateur ne suporte pas la copie vers le presse-papiers.';
-$lang['fr'][61] = 'Pour signaler des bugs ou pour des suggestions,';
-$lang['fr'][62] = 'contactez-moi';
-$lang['fr'][63] = 'Sauver le code CSS comme document complet HTML';
-$lang['fr'][64] = 'Code';
-$lang['fr'][65] = 'CSS pour colorier la sortie CSS';
-$lang['fr'][66] = 'Vous devez aller dans about:config dans votre barre d’adresse, selectionner \'signed.applets.codebase_principal_support\' dans le champ Filtre et attribuez-lui la valeur \'true\' pour utiliser cette fonctionnalité; toutefois, soyez conscient que cela augmente les risques de sécurité.';
-
-
-$lang['zh'][0] = 'CSS整形與最佳化工具(使用 CSSTidy ';
-$lang['zh'][1] = 'CSS整形與最佳化工具';
-$lang['zh'][2] = '(使用';
-$lang['zh'][3] = '(純文字)';
-$lang['zh'][4] = '重要事項:';
-$lang['zh'][6] = '你的原始碼必須是良構的(well-formed). 這個工具<strong>沒有內建驗證器(validator)</strong>. 驗證器能夠指出你CSS原始碼裡的錯誤. 請使用 <a href="http://jigsaw.w3.org/css-validator/">W3C 驗證器</a>, 確保你的原始碼合乎規範.';
-$lang['zh'][7] = '所有註解都移除了';
-$lang['zh'][8] = 'CSS 輸入:';
-$lang['zh'][9] = 'CSS 原始碼:';
-$lang['zh'][10] = 'CSS 檔案網址(URL):';
-$lang['zh'][11] = '原始碼規劃:';
-$lang['zh'][12] = '壓縮程度(原始碼規劃):';
-$lang['zh'][13] = '最高 (沒有辦法讀, 檔案最小)';
-$lang['zh'][14] = '高 (適度的可讀性, 檔案小)';
-$lang['zh'][15] = '標準 (兼顧可讀性與檔案大小)';
-$lang['zh'][16] = '低 (注重可讀性)';
-$lang['zh'][17] = '自訂 (在下方設定)';
-$lang['zh'][18] = '自訂<a href="http://csstidy.sourceforge.net/templates.php">樣板</a>';
-$lang['zh'][19] = '選項';
-$lang['zh'][20] = '整理選擇符(請謹慎使用)';
-$lang['zh'][21] = '整理屬性';
-$lang['zh'][22] = '重組選擇符';
-$lang['zh'][23] = '速記法(shorthand)最佳化';
-$lang['zh'][24] = '壓縮色彩語法';
-$lang['zh'][25] = '改用小寫選擇符';
-$lang['zh'][26] = '屬性的字形:';
-$lang['zh'][27] = '小寫';
-$lang['zh'][28] = '沒有輸入CSS, 語法不符合規定, 或是網址錯誤!';
-$lang['zh'][29] = '大寫';
-$lang['zh'][30] = 'XHTML必須使用小寫的元素名稱';
-$lang['zh'][31] = '移除不必要的反斜線';
-$lang['zh'][32] = '轉換 !important-hack';
-$lang['zh'][33] = '輸出成檔案形式';
-$lang['zh'][34] = '由於比較少換行字元, 會有更大的壓縮比率(複製&#38;貼上沒有用)';
-$lang['zh'][35] = '執行';
-$lang['zh'][36] = '壓縮比率';
-$lang['zh'][37] = '輸入';
-$lang['zh'][38] = '輸出';
-$lang['zh'][39] = '語言';
-$lang['zh'][41] = '注意: 這或許會變更你CSS原始碼的行為!';
-$lang['zh'][42] = '除去最後一個分號';
-$lang['zh'][43] = '拋棄不符合規定的屬性';
-$lang['zh'][44] = '只安全地最佳化';
-$lang['zh'][45] = '壓縮 font-weight';
-$lang['zh'][46] = '保留註解';
-$lang['zh'][47] = '什麼都不要改';
-$lang['zh'][48] = '只分開原本用逗號分隔的選擇符';
-$lang['zh'][49] = '合併有相同屬性的選擇符(快速)';
-$lang['zh'][50] = '聰明地合併選擇符(慢速)';
-$lang['zh'][51] = '保護CSS';
-$lang['zh'][52] = '保留註解與 hack 等等. 如果啟用這個選項, 大多數的最佳化程序都不會執行.';
-$lang['zh'][53] = '不改變';
-$lang['zh'][54] = '不做最佳化';
-$lang['zh'][55] = '安全地最佳化';
-$lang['zh'][56] = '全部最佳化';
-$lang['zh'][57] = '加上時間戳記';
-$lang['zh'][58] = '复制到剪贴板';
-$lang['zh'][59] = '回到页面上方';
-$lang['zh'][60] = '你的浏览器不支持复制到剪贴板。';
-$lang['zh'][61] = '如果程序有错误或你有建议,欢迎';
-$lang['zh'][62] = '和我联系';
-$lang['zh'][63] = 'Output CSS code as complete HTML document';
-$lang['zh'][64] = '代码';
-$lang['zh'][65] = 'CSS to style CSS output';
-$lang['zh'][66] = 'You need to go to about:config in your URL bar, select \'signed.applets.codebase_principal_support\' in the filter field, and set its value to true in order to use this feature; however, be aware that doing so increases security risks.';
diff --git a/plugins/jetpack/modules/custom-css/csstidy/wordpress-standard.tpl b/plugins/jetpack/modules/custom-css/csstidy/wordpress-standard.tpl
deleted file mode 100644
index 9499e839..00000000
--- a/plugins/jetpack/modules/custom-css/csstidy/wordpress-standard.tpl
+++ /dev/null
@@ -1,10 +0,0 @@
-| {
-|| {
-| | |;
-|}|
-
-|
-}
-
-| ||
-|
diff --git a/plugins/jetpack/modules/custom-css/custom-css-4.7.php b/plugins/jetpack/modules/custom-css/custom-css-4.7.php
deleted file mode 100644
index bb72caec..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css-4.7.php
+++ /dev/null
@@ -1,1165 +0,0 @@
-<?php
-/**
- * Alternate Custom CSS source for 4.7 compat.
- *
- * @since 4.4.2
- *
- * @package Jetpack
- */
-
-/**
- * Class Jetpack_Custom_CSS_Enhancements
- */
-class Jetpack_Custom_CSS_Enhancements {
- /**
- * Set up the actions and filters needed for our compatability layer on top of core's Custom CSS implementation.
- */
- public static function add_hooks() {
- add_action( 'init', array( __CLASS__, 'init' ) );
- add_action( 'admin_menu', array( __CLASS__, 'admin_menu' ) );
- add_action( 'customize_controls_enqueue_scripts', array( __CLASS__, 'customize_controls_enqueue_scripts' ) );
- add_action( 'customize_register', array( __CLASS__, 'customize_register' ) );
- add_filter( 'map_meta_cap', array( __CLASS__, 'map_meta_cap' ), 20, 2 );
- add_action( 'customize_preview_init', array( __CLASS__, 'customize_preview_init' ) );
- add_filter( '_wp_post_revision_fields', array( __CLASS__, '_wp_post_revision_fields' ), 10, 2 );
- add_action( 'load-revision.php', array( __CLASS__, 'load_revision_php' ) );
-
- add_action( 'wp_enqueue_scripts', array( __CLASS__, 'wp_enqueue_scripts' ) );
-
- // Handle Sass/LESS.
- add_filter( 'customize_value_custom_css', array( __CLASS__, 'customize_value_custom_css' ), 10, 2 );
- add_filter( 'customize_update_custom_css_post_content_args', array( __CLASS__, 'customize_update_custom_css_post_content_args' ), 10, 3 );
- add_filter( 'update_custom_css_data', array( __CLASS__, 'update_custom_css_data' ), 10, 2 );
-
- // Stuff for stripping out the theme's default stylesheet...
- add_filter( 'stylesheet_uri', array( __CLASS__, 'style_filter' ) );
- add_filter( 'safecss_skip_stylesheet', array( __CLASS__, 'preview_skip_stylesheet' ) );
-
- // Stuff for overriding content width...
- add_action( 'customize_preview_init', array( __CLASS__, 'preview_content_width' ) );
- add_filter( 'jetpack_content_width', array( __CLASS__, 'jetpack_content_width' ) );
- add_filter( 'editor_max_image_size', array( __CLASS__, 'editor_max_image_size' ), 10, 3 );
- add_action( 'template_redirect', array( __CLASS__, 'set_content_width' ) );
- add_action( 'admin_init', array( __CLASS__, 'set_content_width' ) );
-
- // Stuff?
- }
-
- /**
- * Things that we do on init.
- */
- public static function init() {
- $min = '.min';
- if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) {
- $min = '';
- }
-
- wp_register_style( 'jetpack-codemirror', plugins_url( 'custom-css/css/codemirror.css', __FILE__ ), array(), '20120905' );
- wp_register_style( 'jetpack-customizer-css', plugins_url( 'custom-css/css/customizer-control.css', __FILE__ ), array(), '20140728' );
- wp_register_script( 'jetpack-codemirror', plugins_url( 'custom-css/js/codemirror.min.js', __FILE__ ), array(), '3.16', true );
- $src = Jetpack::get_file_url_for_environment(
- '_inc/build/custom-css/custom-css/js/core-customizer-css.core-4.9.min.js',
- 'modules/custom-css/custom-css/js/core-customizer-css.core-4.9.js'
- );
- wp_register_script( 'jetpack-customizer-css', $src, array( 'customize-controls', 'underscore' ), JETPACK__VERSION, true );
-
- wp_register_script(
- 'jetpack-customizer-css-preview',
- Jetpack::get_file_url_for_environment(
- '_inc/build/custom-css/custom-css/js/core-customizer-css-preview.min.js',
- 'modules/custom-css/custom-css/js/core-customizer-css-preview.js'
- ),
- array( 'customize-selective-refresh' ),
- JETPACK__VERSION,
- true
- );
-
- remove_action( 'wp_head', 'wp_custom_css_cb', 11 ); // 4.7.0 had it at 11, 4.7.1 moved it to 101.
- remove_action( 'wp_head', 'wp_custom_css_cb', 101 );
- add_action( 'wp_head', array( __CLASS__, 'wp_custom_css_cb' ), 101 );
-
- if ( isset( $_GET['custom-css'] ) ) {
- self::print_linked_custom_css();
- }
- }
-
- /**
- * Things that we do on init when the Customize Preview is loading.
- */
- public static function customize_preview_init() {
- add_filter( 'wp_get_custom_css', array( __CLASS__, 'customize_preview_wp_get_custom_css' ) );
- }
-
- /**
- * Print the current Custom CSS. This is for linking instead of printing directly.
- */
- public static function print_linked_custom_css() {
- header( 'Content-type: text/css' );
- header( 'Expires: ' . gmdate( 'D, d M Y H:i:s', time() + YEAR_IN_SECONDS ) . ' GMT' );
- echo wp_get_custom_css();
- exit;
- }
-
- /**
- * Re-map the Edit CSS capability.
- *
- * Core, by default, restricts this to users that have `unfiltered_html` which
- * would make the feature unusable in multi-site by non-super-admins, due to Core
- * not shipping any solid sanitization.
- *
- * We're expanding who can use it, and then conditionally applying CSSTidy
- * sanitization to users that do not have the `unfiltered_html` capability.
- *
- * @param array $caps Returns the user's actual capabilities.
- * @param string $cap Capability name.
- *
- * @return array $caps
- */
- public static function map_meta_cap( $caps, $cap ) {
- if ( 'edit_css' === $cap ) {
- $caps = array( 'edit_theme_options' );
- }
- return $caps;
- }
-
- /**
- * Handle our admin menu item and legacy page declaration.
- */
- public static function admin_menu() {
- // Add in our legacy page to support old bookmarks and such.
- add_submenu_page( null, __( 'CSS', 'jetpack' ), __( 'Edit CSS', 'jetpack' ), 'edit_theme_options', 'editcss', array( __CLASS__, 'admin_page' ) );
-
- // Add in our new page slug that will redirect to the customizer.
- $hook = add_theme_page( __( 'CSS', 'jetpack' ), __( 'Edit CSS', 'jetpack' ), 'edit_theme_options', 'editcss-customizer-redirect', array( __CLASS__, 'admin_page' ) );
- add_action( "load-{$hook}", array( __CLASS__, 'customizer_redirect' ) );
- }
-
- /**
- * Handle the redirect for the customizer. This is necessary because
- * we can't directly add customizer links to the admin menu.
- *
- * There is a core patch in trac that would make this unnecessary.
- *
- * @link https://core.trac.wordpress.org/ticket/39050
- */
- public static function customizer_redirect() {
- wp_safe_redirect( self::customizer_link( array(
- 'return_url' => wp_get_referer(),
- ) ) );
- exit;
- }
-
- /**
- * Shows Preprocessor code in the Revisions screen, and ensures that post_content_filtered
- * is maintained on revisions
- *
- * @param array $fields Post fields pertinent to revisions.
- * @param array $post A post array being processed for insertion as a post revision.
- *
- * @return array $fields Modified array to include post_content_filtered.
- */
- public static function _wp_post_revision_fields( $fields, $post ) {
- // None of the fields in $post are required to be passed in this filter.
- if ( ! isset( $post['post_type'], $post['ID'] ) ) {
- return $fields;
- }
-
- // If we're passed in a revision, go get the main post instead.
- if ( 'revision' === $post['post_type'] ) {
- $main_post_id = wp_is_post_revision( $post['ID'] );
- $post = get_post( $main_post_id, ARRAY_A );
- }
- if ( 'custom_css' === $post['post_type'] ) {
- $fields['post_content'] = __( 'CSS', 'jetpack' );
- $fields['post_content_filtered'] = __( 'Preprocessor', 'jetpack' );
- }
- return $fields;
- }
-
- /**
- * Get the published custom CSS post.
- *
- * @param string $stylesheet Optional. A theme object stylesheet name. Defaults to the current theme.
- * @return WP_Post|null
- */
- public static function get_css_post( $stylesheet = '' ) {
- return wp_get_custom_css_post( $stylesheet );
- }
-
- /**
- * Override Core's `wp_custom_css_cb` method to provide linking to custom css.
- */
- public static function wp_custom_css_cb() {
- $styles = wp_get_custom_css();
- if ( strlen( $styles ) > 2000 && ! is_customize_preview() ) :
- // Add a cache buster to the url.
- $url = home_url( '/' );
- $url = add_query_arg( 'custom-css', substr( md5( $styles ), -10 ), $url );
- ?>
- <link rel="stylesheet" type="text/css" id="wp-custom-css" href="<?php echo esc_url( $url ); ?>" />
- <?php elseif ( $styles || is_customize_preview() ) : ?>
- <style type="text/css" id="wp-custom-css">
- <?php echo strip_tags( $styles ); // Note that esc_html() cannot be used because `div &gt; span` is not interpreted properly. ?>
- </style>
- <?php endif;
- }
-
- /**
- * Get the ID of a Custom CSS post tying to a given stylesheet.
- *
- * @param string $stylesheet Stylesheet name.
- *
- * @return int $post_id Post ID.
- */
- public static function post_id( $stylesheet = '' ) {
- $post = self::get_css_post( $stylesheet );
- if ( $post instanceof WP_Post ) {
- return $post->ID;
- }
- return 0;
- }
-
- /**
- * Partial for use in the Customizer.
- */
- public static function echo_custom_css_partial() {
- echo wp_get_custom_css();
- }
-
- /**
- * Admin page!
- *
- * This currently has two main uses -- firstly to display the css for an inactive
- * theme if there are no revisions attached it to a legacy bug, and secondly to
- * handle folks that have bookmarkes in their browser going to the old page for
- * managing Custom CSS in Jetpack.
- *
- * If we ever add back in a non-Customizer CSS editor, this would be the place.
- */
- public static function admin_page() {
- $post = null;
- $stylesheet = null;
- if ( isset( $_GET['id'] ) ) {
- $post_id = absint( $_GET['id'] );
- $post = get_post( $post_id );
- if ( $post instanceof WP_Post && 'custom_css' === $post->post_type ) {
- $stylesheet = $post->post_title;
- }
- }
- ?>
- <div class="wrap">
- <?php self::revisions_switcher_box( $stylesheet ); ?>
- <h1>
- <?php
- if ( $post ) {
- printf( 'Custom CSS for &#8220;%1$s&#8221;', wp_get_theme( $stylesheet )->Name );
- } else {
- esc_html_e( 'Custom CSS', 'jetpack' );
- }
- if ( current_user_can( 'customize' ) ) {
- printf(
- ' <a class="page-title-action hide-if-no-customize" href="%1$s">%2$s</a>',
- esc_url( self::customizer_link() ),
- esc_html__( 'Manage with Live Preview', 'jetpack' )
- );
- }
- ?>
- </h1>
- <p><?php esc_html_e( 'Custom CSS is now managed in the Customizer.', 'jetpack' ); ?></p>
- <?php if ( $post ) : ?>
- <div class="revisions">
- <h3><?php esc_html_e( 'CSS', 'jetpack' ); ?></h3>
- <textarea class="widefat" readonly><?php echo esc_textarea( $post->post_content ); ?></textarea>
- <?php if ( $post->post_content_filtered ) : ?>
- <h3><?php esc_html_e( 'Preprocessor', 'jetpack' ); ?></h3>
- <textarea class="widefat" readonly><?php echo esc_textarea( $post->post_content_filtered ); ?></textarea>
- <?php endif; ?>
- </div>
- <?php endif; ?>
- </div>
-
- <style>
- .other-themes-wrap {
- float: right;
- background-color: #fff;
- -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1);
- box-shadow: 0 1px 3px rgba(0,0,0,0.1);
- padding: 5px 10px;
- margin-bottom: 10px;
- }
- .other-themes-wrap label {
- display: block;
- margin-bottom: 10px;
- }
- .other-themes-wrap select {
- float: left;
- width: 77%;
- }
- .other-themes-wrap button {
- float: right;
- width: 20%;
- }
- .revisions {
- clear: both;
- }
- .revisions textarea {
- min-height: 300px;
- background: #fff;
- }
- </style>
- <script>
- (function($){
- var $switcher = $('.other-themes-wrap');
- $switcher.find('button').on('click', function(e){
- e.preventDefault();
- if ( $switcher.find('select').val() ) {
- window.location.href = $switcher.find('select').val();
- }
- });
- })(jQuery);
- </script>
- <?php
- }
-
- /**
- * Build the URL to deep link to the Customizer.
- *
- * You can modify the return url via $args.
- *
- * @param array $args Array of parameters.
- * @return string
- */
- public static function customizer_link( $args = array() ) {
- $args = wp_parse_args( $args, array(
- 'return_url' => urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ),
- ) );
-
- return add_query_arg(
- array(
- array(
- 'autofocus' => array(
- 'section' => 'custom_css',
- ),
- ),
- 'return' => $args['return_url'],
- ),
- admin_url( 'customize.php' )
- );
- }
-
- /**
- * Handle the enqueueing and localizing for scripts to be used in the Customizer.
- */
- public static function customize_controls_enqueue_scripts() {
- wp_enqueue_style( 'jetpack-customizer-css' );
- wp_enqueue_script( 'jetpack-customizer-css' );
-
- $content_help = __( 'Set a different content width for full size images.', 'jetpack' );
- if ( ! empty( $GLOBALS['content_width'] ) ) {
- $content_help .= sprintf(
- _n( ' The default content width for the <strong>%1$s</strong> theme is %2$d pixel.', ' The default content width for the <strong>%1$s</strong> theme is %2$d pixels.', intval( $GLOBALS['content_width'] ), 'jetpack' ),
- wp_get_theme()->Name,
- intval( $GLOBALS['content_width'] )
- );
- }
-
- wp_localize_script( 'jetpack-customizer-css', '_jp_css_settings', array(
- /** This filter is documented in modules/custom-css/custom-css.php */
- 'useRichEditor' => ! jetpack_is_mobile() && apply_filters( 'safecss_use_ace', true ),
- 'areThereCssRevisions' => self::are_there_css_revisions(),
- 'revisionsUrl' => self::get_revisions_url(),
- 'cssHelpUrl' => '//en.support.wordpress.com/custom-design/editing-css/',
- 'l10n' => array(
- 'mode' => __( 'Start Fresh', 'jetpack' ),
- 'mobile' => __( 'On Mobile', 'jetpack' ),
- 'contentWidth' => $content_help,
- 'revisions' => _x( 'See full history', 'Toolbar button to see full CSS revision history', 'jetpack' ),
- 'css_help_title' => _x( 'Help', 'Toolbar button to get help with custom CSS', 'jetpack' ),
- ),
- ));
- }
-
- /**
- * Check whether there are CSS Revisions for a given theme.
- *
- * Going forward, there should always be, but this was necessitated
- * early on by https://core.trac.wordpress.org/ticket/30854
- *
- * @param string $stylesheet Stylesheet name.
- *
- * @return bool|null|WP_Post
- */
- public static function are_there_css_revisions( $stylesheet = '' ) {
- $post = wp_get_custom_css_post( $stylesheet );
- if ( empty( $post ) ) {
- return $post;
- }
- return (bool) wp_get_post_revisions( $post );
- }
-
- /**
- * Core doesn't have a function to get the revisions url for a given post ID.
- *
- * @param string $stylesheet Stylesheet name.
- *
- * @return null|string|void
- */
- public static function get_revisions_url( $stylesheet = '' ) {
- $post = wp_get_custom_css_post( $stylesheet );
-
- // If we have any currently saved customizations...
- if ( $post instanceof WP_Post ) {
- $revisions = wp_get_post_revisions( $post->ID, array( 'posts_per_page' => 1 ) );
- if ( empty( $revisions ) || is_wp_error( $revisions ) ) {
- return admin_url( 'themes.php?page=editcss' );
- }
- $revision = reset( $revisions );
- return get_edit_post_link( $revision->ID );
- }
-
- return admin_url( 'themes.php?page=editcss' );
- }
-
- /**
- * Get a map of all theme names and theme stylesheets for mapping stuff.
- *
- * @return array
- */
- public static function get_themes() {
- $themes = wp_get_themes( array( 'errors' => null ) );
- $all = array();
- foreach ( $themes as $theme ) {
- $all[ $theme->name ] = $theme->stylesheet;
- }
- return $all;
- }
-
- /**
- * When we need to get all themes that have Custom CSS saved.
- *
- * @return array
- */
- public static function get_all_themes_with_custom_css() {
- $themes = self::get_themes();
- $custom_css = get_posts( array(
- 'post_type' => 'custom_css',
- 'post_status' => get_post_stati(),
- 'number' => -1,
- 'order' => 'DESC',
- 'orderby' => 'modified',
- ) );
- $return = array();
-
- foreach ( $custom_css as $post ) {
- $stylesheet = $post->post_title;
- $label = array_search( $stylesheet, $themes );
-
- if ( ! $label ) {
- continue;
- }
-
- $return[ $stylesheet ] = array(
- 'label' => $label,
- 'post' => $post,
- );
- }
-
- return $return;
- }
-
- /**
- * Handle the enqueueing of scripts for customize previews.
- */
- public static function wp_enqueue_scripts() {
- if ( is_customize_preview() ) {
- wp_enqueue_script( 'jetpack-customizer-css-preview' );
- wp_localize_script( 'jetpack-customizer-css-preview', 'jpCustomizerCssPreview', array(
- /** This filter is documented in modules/custom-css/custom-css.php */
- 'preprocessors' => apply_filters( 'jetpack_custom_css_preprocessors', array() ),
- ));
- }
- }
-
- /**
- * Sanitize the CSS for users without `unfiltered_html`.
- *
- * @param string $css Input CSS.
- * @param array $args Array of CSS options.
- *
- * @return mixed|string
- */
- public static function sanitize_css( $css, $args = array() ) {
- $args = wp_parse_args( $args, array(
- 'force' => false,
- 'preprocessor' => null,
- ) );
-
- if ( $args['force'] || ! current_user_can( 'unfiltered_html' ) ) {
-
- $warnings = array();
-
- safecss_class();
- $csstidy = new csstidy();
- $csstidy->optimise = new safecss( $csstidy );
-
- $csstidy->set_cfg( 'remove_bslash', false );
- $csstidy->set_cfg( 'compress_colors', false );
- $csstidy->set_cfg( 'compress_font-weight', false );
- $csstidy->set_cfg( 'optimise_shorthands', 0 );
- $csstidy->set_cfg( 'remove_last_;', false );
- $csstidy->set_cfg( 'case_properties', false );
- $csstidy->set_cfg( 'discard_invalid_properties', true );
- $csstidy->set_cfg( 'css_level', 'CSS3.0' );
- $csstidy->set_cfg( 'preserve_css', true );
- $csstidy->set_cfg( 'template', dirname( __FILE__ ) . '/csstidy/wordpress-standard.tpl' );
-
- // Test for some preg_replace stuff.
- {
- $prev = $css;
- $css = preg_replace( '/\\\\([0-9a-fA-F]{4})/', '\\\\\\\\$1', $css );
- // prevent content: '\3434' from turning into '\\3434'.
- $css = str_replace( array( '\'\\\\', '"\\\\' ), array( '\'\\', '"\\' ), $css );
- if ( $css !== $prev ) {
- $warnings[] = 'preg_replace found stuff';
- }
- }
-
- // Some people put weird stuff in their CSS, KSES tends to be greedy.
- $css = str_replace( '<=', '&lt;=', $css );
-
- // Test for some kses stuff.
- {
- $prev = $css;
- // Why KSES instead of strip_tags? Who knows?
- $css = wp_kses_split( $css, array(), array() );
- $css = str_replace( '&gt;', '>', $css ); // kses replaces lone '>' with &gt;
- // Why both KSES and strip_tags? Because we just added some '>'.
- $css = strip_tags( $css );
-
- if ( $css != $prev ) {
- $warnings[] = 'kses found stuff';
- }
- }
-
- // if we're not using a preprocessor.
- if ( ! $args['preprocessor'] ) {
-
- /** This action is documented in modules/custom-css/custom-css.php */
- do_action( 'safecss_parse_pre', $csstidy, $css, $args );
-
- $csstidy->parse( $css );
-
- /** This action is documented in modules/custom-css/custom-css.php */
- do_action( 'safecss_parse_post', $csstidy, $warnings, $args );
-
- $css = $csstidy->print->plain();
- }
- }
- return $css;
- }
-
- /**
- * Override $content_width in customizer previews.
- */
- public static function preview_content_width() {
- global $wp_customize;
- if ( ! is_customize_preview() ) {
- return;
- }
-
- $setting = $wp_customize->get_setting( 'jetpack_custom_css[content_width]' );
- if ( ! $setting ) {
- return;
- }
-
- $customized_content_width = (int) $setting->post_value();
- if ( ! empty( $customized_content_width ) ) {
- $GLOBALS['content_width'] = $customized_content_width;
- }
- }
-
- /**
- * Filter the current theme's stylesheet for potentially nullifying it.
- *
- * @param string $current Stylesheet URI for the current theme/child theme.
- *
- * @return mixed|void
- */
- static function style_filter( $current ) {
- if ( is_admin() ) {
- return $current;
- } elseif ( self::is_freetrial() && ( ! self::is_preview() || ! current_user_can( 'switch_themes' ) ) ) {
- return $current;
- } elseif ( self::skip_stylesheet() ) {
- /** This filter is documented in modules/custom-css/custom-css.php */
- return apply_filters( 'safecss_style_filter_url', plugins_url( 'custom-css/css/blank.css', __FILE__ ) );
- }
-
- return $current;
- }
-
- /**
- * Determine whether or not we should have the theme skip its main stylesheet.
- *
- * @return mixed The truthiness of this value determines whether the stylesheet should be skipped.
- */
- static function skip_stylesheet() {
- /** This filter is documented in modules/custom-css/custom-css.php */
- $skip_stylesheet = apply_filters( 'safecss_skip_stylesheet', null );
- if ( ! is_null( $skip_stylesheet ) ) {
- return $skip_stylesheet;
- }
-
- $jetpack_custom_css = get_theme_mod( 'jetpack_custom_css', array() );
- if ( isset( $jetpack_custom_css['replace'] ) ) {
- return $jetpack_custom_css['replace'];
- }
-
- return false;
- }
-
- /**
- * Override $content_width in customizer previews.
- *
- * Runs on `safecss_skip_stylesheet` filter.
- *
- * @param bool $skip_value Should the stylesheet be skipped.
- *
- * @return null|bool
- */
- public static function preview_skip_stylesheet( $skip_value ) {
- global $wp_customize;
- if ( ! is_customize_preview() ) {
- return $skip_value;
- }
-
- $setting = $wp_customize->get_setting( 'jetpack_custom_css[replace]' );
- if ( ! $setting ) {
- return $skip_value;
- }
-
- $customized_replace = $setting->post_value();
- if ( null !== $customized_replace ) {
- return $customized_replace;
- }
-
- return $skip_value;
- }
-
- /**
- * Add Custom CSS section and controls.
- *
- * @param WP_Customize_Manager $wp_customize WP_Customize_Manager instance.
- */
- public static function customize_register( $wp_customize ) {
-
- /**
- * SETTINGS.
- */
-
- $wp_customize->add_setting( 'jetpack_custom_css[preprocessor]', array(
- 'default' => '',
- 'transport' => 'postMessage',
- 'sanitize_callback' => array( __CLASS__, 'sanitize_preprocessor' ),
- ) );
-
- $wp_customize->add_setting( 'jetpack_custom_css[replace]', array(
- 'default' => false,
- 'transport' => 'refresh',
- ) );
-
- $wp_customize->add_setting( 'jetpack_custom_css[content_width]', array(
- 'default' => '',
- 'transport' => 'refresh',
- 'sanitize_callback' => array( __CLASS__, 'intval_base10' ),
- ) );
-
- // Add custom sanitization to the core css customizer setting.
- foreach ( $wp_customize->settings() as $setting ) {
- if ( $setting instanceof WP_Customize_Custom_CSS_Setting ) {
- add_filter( "customize_sanitize_{$setting->id}", array( __CLASS__, 'sanitize_css_callback' ), 10, 2 );
- }
- }
-
- /**
- * CONTROLS.
- */
-
- // Overwrite or Tweak the Core Control.
- $core_custom_css = $wp_customize->get_control( 'custom_css' );
- if ( $core_custom_css ) {
- if ( $core_custom_css instanceof WP_Customize_Code_Editor_Control ) {
- // In WP 4.9, we let the Core CodeMirror control keep running the show, but hook into it to tweak stuff.
- $types = array(
- 'default' => 'text/css',
- 'less' => 'text/x-less',
- 'sass' => 'text/x-scss',
- );
- $preprocessor = $wp_customize->get_setting( 'jetpack_custom_css[preprocessor]' )->value();
- if ( isset( $types[ $preprocessor ] ) ) {
- $core_custom_css->code_type = $types[ $preprocessor ];
- }
- } else {
- // Core < 4.9 Fallback
- $core_custom_css->type = 'jetpackCss';
- }
- }
-
- $wp_customize->selective_refresh->add_partial( 'custom_css', array(
- 'type' => 'custom_css',
- 'selector' => '#wp-custom-css',
- 'container_inclusive' => false,
- 'fallback_refresh' => false,
- 'settings' => array(
- 'custom_css[' . $wp_customize->get_stylesheet() . ']',
- 'jetpack_custom_css[preprocessor]',
- ),
- 'render_callback' => array( __CLASS__, 'echo_custom_css_partial' ),
- ) );
-
- $wp_customize->add_control( 'wpcom_custom_css_content_width_control', array(
- 'type' => 'text',
- 'label' => __( 'Media Width', 'jetpack' ),
- 'section' => 'custom_css',
- 'settings' => 'jetpack_custom_css[content_width]',
- ) );
-
- $wp_customize->add_control( 'jetpack_css_mode_control', array(
- 'type' => 'checkbox',
- 'label' => __( 'Don\'t use the theme\'s original CSS.', 'jetpack' ),
- 'section' => 'custom_css',
- 'settings' => 'jetpack_custom_css[replace]',
- ) );
-
- /**
- * An action to grab on to if another Jetpack Module would like to add its own controls.
- *
- * @module custom-css
- *
- * @since 4.4.2
- *
- * @param $wp_customize The WP_Customize object.
- */
- do_action( 'jetpack_custom_css_customizer_controls', $wp_customize );
-
- /** This filter is documented in modules/custom-css/custom-css.php */
- $preprocessors = apply_filters( 'jetpack_custom_css_preprocessors', array() );
- if ( ! empty( $preprocessors ) ) {
- $preprocessor_choices = array(
- '' => __( 'None', 'jetpack' ),
- );
-
- foreach ( $preprocessors as $preprocessor_key => $processor ) {
- $preprocessor_choices[ $preprocessor_key ] = $processor['name'];
- }
-
- $wp_customize->add_control( 'jetpack_css_preprocessors_control', array(
- 'type' => 'select',
- 'choices' => $preprocessor_choices,
- 'label' => __( 'Preprocessor', 'jetpack' ),
- 'section' => 'custom_css',
- 'settings' => 'jetpack_custom_css[preprocessor]',
- ) );
- }
-
- }
-
- /**
- * The callback to handle sanitizing the CSS. Takes different arguments, hence the proxy function.
- *
- * @param mixed $css Value of the setting.
- * @param WP_Customize_Setting $setting WP_Customize_Setting instance.
- *
- * @return mixed|string
- */
- public static function sanitize_css_callback( $css, $setting ) {
- global $wp_customize;
- return self::sanitize_css( $css, array(
- 'preprocessor' => $wp_customize->get_setting( 'jetpack_custom_css[preprocessor]' )->value(),
- ) );
- }
-
- /**
- * Flesh out for wpcom.
- *
- * @todo
- *
- * @return bool
- */
- public static function is_freetrial() {
- return false;
- }
-
- /**
- * Flesh out for wpcom.
- *
- * @todo
- *
- * @return bool
- */
- public static function is_preview() {
- return false;
- }
-
- /**
- * Output the custom css for customize preview.
- *
- * @param string $css Custom CSS content.
- *
- * @return mixed
- */
- public static function customize_preview_wp_get_custom_css( $css ) {
- global $wp_customize;
-
- $preprocessor = $wp_customize->get_setting( 'jetpack_custom_css[preprocessor]' )->value();
-
- // If it's empty, just return.
- if ( empty( $preprocessor ) ) {
- return $css;
- }
-
- /** This filter is documented in modules/custom-css/custom-css.php */
- $preprocessors = apply_filters( 'jetpack_custom_css_preprocessors', array() );
- if ( isset( $preprocessors[ $preprocessor ] ) ) {
- return call_user_func( $preprocessors[ $preprocessor ]['callback'], $css );
- }
-
- return $css;
- }
-
- /**
- * Add CSS preprocessing to our CSS if it is supported.
- *
- * @param mixed $css Value of the setting.
- * @param WP_Customize_Setting $setting WP_Customize_Setting instance.
- *
- * @return string
- */
- public static function customize_value_custom_css( $css, $setting ) {
- // Find the current preprocessor.
- $jetpack_custom_css = get_theme_mod( 'jetpack_custom_css', array() );
- if ( isset( $jetpack_custom_css['preprocessor'] ) ) {
- $preprocessor = $jetpack_custom_css['preprocessor'];
- }
-
- // If it's not supported, just return.
- /** This filter is documented in modules/custom-css/custom-css.php */
- $preprocessors = apply_filters( 'jetpack_custom_css_preprocessors', array() );
- if ( ! isset( $preprocessors[ $preprocessor ] ) ) {
- return $css;
- }
-
- // Swap it for the `post_content_filtered` instead.
- $post = wp_get_custom_css_post( $setting->stylesheet );
- if ( $post && ! empty( $post->post_content_filtered ) ) {
- $css = $post->post_content_filtered;
- }
-
- return $css;
- }
-
- /**
- * Store the original pre-processed CSS in `post_content_filtered`
- * and then store processed CSS in `post_content`.
- *
- * @param array $args Content post args.
- * @param string $css Original CSS being updated.
- * @param WP_Customize_Custom_CSS_Setting $setting Custom CSS Setting.
- *
- * @return mixed
- */
- public static function customize_update_custom_css_post_content_args( $args, $css, $setting ) {
- // Find the current preprocessor.
- $jetpack_custom_css = get_theme_mod( 'jetpack_custom_css', array() );
- if ( empty( $jetpack_custom_css['preprocessor'] ) ) {
- return $args;
- }
-
- $preprocessor = $jetpack_custom_css['preprocessor'];
- /** This filter is documented in modules/custom-css/custom-css.php */
- $preprocessors = apply_filters( 'jetpack_custom_css_preprocessors', array() );
-
- // If it's empty, just return.
- if ( empty( $preprocessor ) ) {
- return $args;
- }
-
- if ( isset( $preprocessors[ $preprocessor ] ) ) {
- $args['post_content_filtered'] = $css;
- $args['post_content'] = call_user_func( $preprocessors[ $preprocessor ]['callback'], $css );
- }
-
- return $args;
- }
-
- /**
- * Filter to handle the processing of preprocessed css on save.
- *
- * @param array $args Custom CSS options.
- * @param string $stylesheet Original CSS to be updated.
- *
- * @return mixed
- */
- public static function update_custom_css_data( $args, $stylesheet ) {
- // Find the current preprocessor.
- $jetpack_custom_css = get_theme_mod( 'jetpack_custom_css', array() );
- if ( empty( $jetpack_custom_css['preprocessor'] ) ) {
- return $args;
- }
-
- /** This filter is documented in modules/custom-css/custom-css.php */
- $preprocessors = apply_filters( 'jetpack_custom_css_preprocessors', array() );
- $preprocessor = $jetpack_custom_css['preprocessor'];
-
- // If we have a preprocessor specified ...
- if ( isset( $preprocessors[ $preprocessor ] ) ) {
- // And no other preprocessor has run ...
- if ( empty( $args['preprocessed'] ) ) {
- $args['preprocessed'] = $args['css'];
- $args['css'] = call_user_func( $preprocessors[ $preprocessor ]['callback'], $args['css'] );
- } else {
- trigger_error( 'Jetpack CSS Preprocessor specified, but something else has already modified the argument.', E_USER_WARNING );
- }
- }
-
- return $args;
- }
-
- /**
- * When on the edit screen, make sure the custom content width
- * setting is applied to the large image size.
- *
- * @param array $dims Array of image dimensions (width and height).
- * @param string $size Size of the resulting image.
- * @param null $context Context the image is being resized for. `edit` or `display`.
- *
- * @return array
- */
- static function editor_max_image_size( $dims, $size = 'medium', $context = null ) {
- list( $width, $height ) = $dims;
-
- if ( 'large' === $size && 'edit' === $context ) {
- $width = Jetpack::get_content_width();
- }
-
- return array( $width, $height );
- }
-
- /**
- * Override the content_width with a custom value if one is set.
- *
- * @param int $content_width Content Width value to be updated.
- *
- * @return int
- */
- static function jetpack_content_width( $content_width ) {
- $custom_content_width = 0;
-
- $jetpack_custom_css = get_theme_mod( 'jetpack_custom_css', array() );
- if ( isset( $jetpack_custom_css['content_width'] ) ) {
- $custom_content_width = $jetpack_custom_css['content_width'];
- }
-
- if ( $custom_content_width > 0 ) {
- return $custom_content_width;
- }
-
- return $content_width;
- }
-
- /**
- * Currently this filter function gets called on
- * 'template_redirect' action and
- * 'admin_init' action
- */
- static function set_content_width() {
- // Don't apply this filter on the Edit CSS page.
- if ( isset( $_GET['page'] ) && 'editcss' === $_GET['page'] && is_admin() ) {
- return;
- }
-
- $GLOBALS['content_width'] = Jetpack::get_content_width();
- }
-
- /**
- * Make sure the preprocessor we're saving is one we know about.
- *
- * @param string $preprocessor The preprocessor to sanitize.
- *
- * @return null|string
- */
- public static function sanitize_preprocessor( $preprocessor ) {
- /** This filter is documented in modules/custom-css/custom-css.php */
- $preprocessors = apply_filters( 'jetpack_custom_css_preprocessors', array() );
- if ( empty( $preprocessor ) || array_key_exists( $preprocessor, $preprocessors ) ) {
- return $preprocessor;
- }
- return null;
- }
-
- /**
- * Get the base10 intval.
- *
- * This is used as a setting's sanitize_callback; we can't use just plain
- * intval because the second argument is not what intval() expects.
- *
- * @access public
- *
- * @param mixed $value Number to convert.
- * @return int Integer.
- */
- public static function intval_base10( $value ) {
- return intval( $value, 10 );
- }
-
- /**
- * Add a footer action on revision.php to print some customizations for the theme switcher.
- */
- public static function load_revision_php() {
- add_action( 'admin_footer', array( __CLASS__, 'revision_admin_footer' ) );
- }
-
- /**
- * Print the theme switcher on revision.php and move it into place.
- */
- public static function revision_admin_footer() {
- $post = get_post();
- if ( 'custom_css' !== $post->post_type ) {
- return;
- }
- $stylesheet = $post->post_title;
- ?>
-<script type="text/html" id="tmpl-other-themes-switcher">
- <?php self::revisions_switcher_box( $stylesheet ); ?>
-</script>
-<style>
-.other-themes-wrap {
- float: right;
- background-color: #fff;
- -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1);
- box-shadow: 0 1px 3px rgba(0,0,0,0.1);
- padding: 5px 10px;
- margin-bottom: 10px;
-}
-.other-themes-wrap label {
- display: block;
- margin-bottom: 10px;
-}
-.other-themes-wrap select {
- float: left;
- width: 77%;
-}
-.other-themes-wrap button {
- float: right;
- width: 20%;
-}
-.revisions {
- clear: both;
-}
-/* Hide the back-to-post link */
-.long-header + a {
- display: none;
-}
-</style>
-<script>
-(function($){
- var switcher = $('#tmpl-other-themes-switcher').html(),
- qty = $( switcher ).find('select option').length,
- $switcher;
-
- if ( qty >= 3 ) {
- $('h1.long-header').before( switcher );
- $switcher = $('.other-themes-wrap');
- $switcher.find('button').on('click', function(e){
- e.preventDefault();
- if ( $switcher.find('select').val() ) {
- window.location.href = $switcher.find('select').val();
- }
- })
- }
-})(jQuery);
-</script>
- <?php
- }
-
- /**
- * The HTML for the theme revision switcher box.
- *
- * @param string $stylesheet Stylesheet name.
- */
- public static function revisions_switcher_box( $stylesheet = '' ) {
- $themes = self::get_all_themes_with_custom_css();
- ?>
- <div class="other-themes-wrap">
- <label for="other-themes"><?php esc_html_e( 'Select another theme to view its custom CSS.', 'jetpack' ); ?></label>
- <select id="other-themes">
- <option value=""><?php esc_html_e( 'Select a theme&hellip;', 'jetpack' ); ?></option>
- <?php
- foreach ( $themes as $theme_stylesheet => $data ) {
- $revisions = wp_get_post_revisions( $data['post']->ID, array( 'posts_per_page' => 1 ) );
- if ( ! $revisions ) {
- ?>
- <option value="<?php echo esc_url( add_query_arg( 'id', $data['post']->ID, menu_page_url( 'editcss', 0 ) ) ); ?>" <?php disabled( $stylesheet, $theme_stylesheet ); ?>>
- <?php echo esc_html( $data['label'] ); ?>
- <?php printf( esc_html__( '(modified %s ago)', 'jetpack' ), human_time_diff( strtotime( $data['post']->post_modified_gmt ) ) ); ?></option>
- <?php
- continue;
- }
- $revision = array_shift( $revisions );
- ?>
- <option value="<?php echo esc_url( get_edit_post_link( $revision->ID ) ); ?>" <?php disabled( $stylesheet, $theme_stylesheet ); ?>>
- <?php echo esc_html( $data['label'] ); ?>
- <?php printf( esc_html__( '(modified %s ago)', 'jetpack' ), human_time_diff( strtotime( $data['post']->post_modified_gmt ) ) ); ?></option>
- <?php
- }
- ?>
- </select>
- <button class="button" id="other_theme_custom_css_switcher"><?php esc_html_e( 'Switch', 'jetpack' ); ?></button>
- </div>
- <?php
- }
-}
-
-Jetpack_Custom_CSS_Enhancements::add_hooks();
-
-if ( ! function_exists( 'safecss_class' ) ) :
- /**
- * Load in the class only when needed. Makes lighter load by having one less class in memory.
- */
- function safecss_class() {
- // Wrapped so we don't need the parent class just to load the plugin.
- if ( class_exists( 'safecss' ) ) {
- return;
- }
-
- require_once( dirname( __FILE__ ) . '/csstidy/class.csstidy.php' );
-
- /**
- * Class safecss
- */
- class safecss extends csstidy_optimise {
-
- /**
- * Optimises $css after parsing.
- */
- function postparse() {
-
- /** This action is documented in modules/custom-css/custom-css.php */
- do_action( 'csstidy_optimize_postparse', $this );
-
- return parent::postparse();
- }
-
- /**
- * Optimises a sub-value.
- */
- function subvalue() {
-
- /** This action is documented in modules/custom-css/custom-css.php */
- do_action( 'csstidy_optimize_subvalue', $this );
-
- return parent::subvalue();
- }
- }
- }
-endif;
diff --git a/plugins/jetpack/modules/custom-css/custom-css.php b/plugins/jetpack/modules/custom-css/custom-css.php
deleted file mode 100644
index 6229014b..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css.php
+++ /dev/null
@@ -1,1866 +0,0 @@
-<?php
-
-class Jetpack_Custom_CSS {
- static function init() {
- add_action( 'switch_theme', array( __CLASS__, 'reset' ) );
- add_action( 'wp_restore_post_revision', array( __CLASS__, 'restore_revision' ), 10, 2 );
-
- // Save revisions for posts of type safecss.
- add_action( 'load-revision.php', array( __CLASS__, 'add_revision_redirect' ) );
-
- // Override the edit link, the default link causes a redirect loop
- add_filter( 'get_edit_post_link', array( __CLASS__, 'revision_post_link' ), 10, 3 );
-
- // Overwrite the content width global variable if one is set in the custom css
- add_action( 'template_redirect', array( __CLASS__, 'set_content_width' ) );
- add_action( 'admin_init', array( __CLASS__, 'set_content_width' ) );
-
- if ( ! is_admin() )
- add_filter( 'stylesheet_uri', array( __CLASS__, 'style_filter' ) );
-
- define(
- 'SAFECSS_USE_ACE',
- ! jetpack_is_mobile() &&
- ! Jetpack_User_Agent_Info::is_ipad() &&
- /**
- * Should the Custom CSS module use ACE to process CSS.
- * @see http://ace.c9.io/
- *
- * @module custom-css
- *
- * @since 1.7.0
- *
- * @param bool true Use ACE to process the Custom CSS. Default to true.
- */
- apply_filters( 'safecss_use_ace', true )
- );
-
- // Register safecss as a custom post_type
- // Explicit capability definitions are largely unnecessary because the posts are manipulated in code via an options page, managing CSS revisions does check the capabilities, so let's ensure that the proper caps are checked.
- register_post_type( 'safecss', array(
- // These are the defaults
- // 'exclude_from_search' => true,
- // 'public' => false,
- // 'publicly_queryable' => false,
- // 'show_ui' => false,
- 'supports' => array( 'revisions' ),
- 'label' => 'Custom CSS',
- 'can_export' => false,
- 'rewrite' => false,
- 'capabilities' => array(
- 'edit_post' => 'edit_theme_options',
- 'read_post' => 'read',
- 'delete_post' => 'edit_theme_options',
- 'edit_posts' => 'edit_theme_options',
- 'edit_others_posts' => 'edit_theme_options',
- 'publish_posts' => 'edit_theme_options',
- 'read_private_posts' => 'read'
- )
- ) );
-
- // Short-circuit WP if this is a CSS stylesheet request
- if ( isset( $_GET['custom-css'] ) ) {
- header( 'Content-Type: text/css', true, 200 );
- header( 'Expires: ' . gmdate( 'D, d M Y H:i:s', time() + 31536000) . ' GMT' ); // 1 year
- Jetpack_Custom_CSS::print_css();
- exit;
- }
-
- add_action( 'admin_enqueue_scripts', array( 'Jetpack_Custom_CSS', 'enqueue_scripts' ) );
-
- if ( isset( $_GET['page'] ) && 'editcss' == $_GET['page'] && is_admin() ) {
- // Do migration routine if necessary
- Jetpack_Custom_CSS::upgrade();
-
- /**
- * Allows additional work when migrating safecss from wp_options to wp_post.
- *
- * @module custom-css
- *
- * @since 1.7.0
- */
- do_action( 'safecss_migrate_post' );
- }
-
- /**
- * Never embed the style in the head on wpcom.
- * Yes, this filter should be added to an unsynced file on wpcom, but
- * there is no good syntactically-correct location to put it yet.
- * @link https://github.com/Automattic/jetpack/commit/a1be114e9179f64d147124727a58e2cf76c7e5a1#commitcomment-7763921
- */
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- add_filter( 'safecss_embed_style', '__return_false' );
- } else {
- add_filter( 'safecss_embed_style', array( 'Jetpack_Custom_CSS', 'should_we_inline_custom_css' ), 10, 2 );
- }
-
- add_action( 'wp_head', array( 'Jetpack_Custom_CSS', 'link_tag' ), 101 );
-
- add_filter( 'jetpack_content_width', array( 'Jetpack_Custom_CSS', 'jetpack_content_width' ) );
- add_filter( 'editor_max_image_size', array( 'Jetpack_Custom_CSS', 'editor_max_image_size' ), 10, 3 );
-
- if ( !current_user_can( 'switch_themes' ) && !is_super_admin() )
- return;
-
- add_action( 'admin_menu', array( 'Jetpack_Custom_CSS', 'menu' ) );
-
- if ( isset( $_POST['safecss'] ) && false == strstr( $_SERVER[ 'REQUEST_URI' ], 'options.php' ) ) {
- check_admin_referer( 'safecss' );
-
- $save_result = self::save( array(
- 'css' => stripslashes( $_POST['safecss'] ),
- 'is_preview' => isset( $_POST['action'] ) && $_POST['action'] == 'preview',
- 'preprocessor' => isset( $_POST['custom_css_preprocessor'] ) ? $_POST['custom_css_preprocessor'] : '',
- 'add_to_existing' => isset( $_POST['add_to_existing'] ) ? $_POST['add_to_existing'] == 'true' : true,
- 'content_width' => isset( $_POST['custom_content_width'] ) ? $_POST['custom_content_width'] : false,
- ) );
-
- if ( $_POST['action'] == 'preview' ) {
- wp_safe_redirect( add_query_arg( 'csspreview', 'true', get_option( 'home' ) ) );
- exit;
- }
-
- if ( $save_result )
- add_action( 'admin_notices', array( 'Jetpack_Custom_CSS', 'saved_message' ) );
- }
-
- // Prevent content filters running on CSS when restoring revisions
- if ( isset( $_REQUEST[ 'action' ] ) && 'restore' === $_REQUEST[ 'action' ] && false !== strstr( $_SERVER[ 'REQUEST_URI' ], 'revision.php' ) ) {
- $parent_post = get_post( wp_get_post_parent_id( intval( $_REQUEST[ 'revision' ] ) ) );
- if ( $parent_post && ! is_wp_error( $parent_post ) && 'safecss' === $parent_post->post_type ) {
- // Remove wp_filter_post_kses, this causes CSS escaping issues
- remove_filter( 'content_save_pre', 'wp_filter_post_kses' );
- remove_filter( 'content_filtered_save_pre', 'wp_filter_post_kses' );
- remove_all_filters( 'content_save_pre' );
- }
- }
-
- // Modify all internal links so that preview state persists
- if ( Jetpack_Custom_CSS::is_preview() )
- ob_start( array( 'Jetpack_Custom_CSS', 'buffer' ) );
- }
-
- /**
- * Save new custom CSS. This should be the entry point for any third-party code using Jetpack_Custom_CSS
- * to save CSS.
- *
- * @param array $args Array of arguments:
- * string $css The CSS (or LESS or Sass)
- * bool $is_preview Whether this CSS is preview or published
- * string preprocessor Which CSS preprocessor to use
- * bool $add_to_existing Whether this CSS replaces the theme's CSS or supplements it.
- * int $content_width A custom $content_width to go along with this CSS.
- * @return int The post ID of the saved Custom CSS post.
- */
- public static function save( $args = array() ) {
- $defaults = array(
- 'css' => '',
- 'is_preview' => false,
- 'preprocessor' => '',
- 'add_to_existing' => true,
- 'content_width' => false,
- );
-
- $args = wp_parse_args( $args, $defaults );
-
- if ( $args['content_width'] && intval( $args['content_width']) > 0 && ( ! isset( $GLOBALS['content_width'] ) || $args['content_width'] != $GLOBALS['content_width'] ) )
- $args['content_width'] = intval( $args['content_width'] );
- else
- $args['content_width'] = false;
-
- // Remove wp_filter_post_kses, this causes CSS escaping issues
- remove_filter( 'content_save_pre', 'wp_filter_post_kses' );
- remove_filter( 'content_filtered_save_pre', 'wp_filter_post_kses' );
- remove_all_filters( 'content_save_pre' );
-
- /**
- * Fires prior to saving custom css values. Necessitated because the
- * core WordPress save_pre filters were removed:
- * - content_save_pre
- * - content_filtered_save_pre
- *
- * @module custom-css
- *
- * @since 1.7.0
- *
- * @param array $args {
- * Array of custom CSS arguments.
- * @type string $css The CSS (or LESS or Sass).
- * @type bool $is_preview Whether this CSS is preview or published.
- * @type string preprocessor Which CSS preprocessor to use.
- * @type bool $add_to_existing Whether this CSS replaces the theme's CSS or supplements it.
- * @type int $content_width A custom $content_width to go along with this CSS.
- * }
- */
- do_action( 'safecss_save_pre', $args );
-
- $warnings = array();
-
- safecss_class();
- $csstidy = new csstidy();
- $csstidy->optimise = new safecss( $csstidy );
-
- $csstidy->set_cfg( 'remove_bslash', false );
- $csstidy->set_cfg( 'compress_colors', false );
- $csstidy->set_cfg( 'compress_font-weight', false );
- $csstidy->set_cfg( 'optimise_shorthands', 0 );
- $csstidy->set_cfg( 'remove_last_;', false );
- $csstidy->set_cfg( 'case_properties', false );
- $csstidy->set_cfg( 'discard_invalid_properties', true );
- $csstidy->set_cfg( 'css_level', 'CSS3.0' );
- $csstidy->set_cfg( 'preserve_css', true );
- $csstidy->set_cfg( 'template', dirname( __FILE__ ) . '/csstidy/wordpress-standard.tpl' );
-
- $css = $orig = $args['css'];
-
- $css = preg_replace( '/\\\\([0-9a-fA-F]{4})/', '\\\\\\\\$1', $prev = $css );
- // prevent content: '\3434' from turning into '\\3434'
- $css = str_replace( array( '\'\\\\', '"\\\\' ), array( '\'\\', '"\\' ), $css );
-
- if ( $css != $prev )
- $warnings[] = 'preg_replace found stuff';
-
- // Some people put weird stuff in their CSS, KSES tends to be greedy
- $css = str_replace( '<=', '&lt;=', $css );
- // Why KSES instead of strip_tags? Who knows?
- $css = wp_kses_split( $prev = $css, array(), array() );
- $css = str_replace( '&gt;', '>', $css ); // kses replaces lone '>' with &gt;
- // Why both KSES and strip_tags? Because we just added some '>'.
- $css = strip_tags( $css );
-
- if ( $css != $prev )
- $warnings[] = 'kses found stuff';
-
- // if we're not using a preprocessor
- if ( ! $args['preprocessor'] ) {
-
- /**
- * Fires before parsing the css with CSSTidy, but only if
- * the preprocessor is not configured for use.
- *
- * @module custom-css
- *
- * @since 1.7.0
- *
- * @param obj $csstidy The csstidy object.
- * @param string $css Custom CSS.
- * @param array $args Array of custom CSS arguments.
- */
- do_action( 'safecss_parse_pre', $csstidy, $css, $args );
-
- $csstidy->parse( $css );
-
- /**
- * Fires after parsing the css with CSSTidy, but only if
- * the preprocessor is not cinfigured for use.
- *
- * @module custom-css
- *
- * @since 1.7.0
- *
- * @param obj $csstidy The csstidy object.
- * @param array $warnings Array of warnings.
- * @param array $args Array of custom CSS arguments.
- */
- do_action( 'safecss_parse_post', $csstidy, $warnings, $args );
-
- $css = $csstidy->print->plain();
- }
-
- if ( $args['add_to_existing'] )
- $add_to_existing = 'yes';
- else
- $add_to_existing = 'no';
-
- if ( $args['is_preview'] || Jetpack_Custom_CSS::is_freetrial() ) {
- // Save the CSS
- $safecss_revision_id = Jetpack_Custom_CSS::save_revision( $css, true, $args['preprocessor'] );
-
- // Cache Buster
- update_option( 'safecss_preview_rev', intval( get_option( 'safecss_preview_rev' ) ) + 1);
-
- update_metadata( 'post', $safecss_revision_id, 'custom_css_add', $add_to_existing );
- update_metadata( 'post', $safecss_revision_id, 'content_width', $args['content_width'] );
- update_metadata( 'post', $safecss_revision_id, 'custom_css_preprocessor', $args['preprocessor'] );
-
- delete_option( 'safecss_add' );
- delete_option( 'safecss_content_width' );
-
- if ( $args['is_preview'] ) {
- return $safecss_revision_id;
- }
-
- /**
- * Fires after saving Custom CSS.
- *
- * @module custom-css
- *
- * @since 1.7.0
- */
- do_action( 'safecss_save_preview_post' );
- }
-
- // Save the CSS
- $safecss_post_id = Jetpack_Custom_CSS::save_revision( $css, false, $args['preprocessor'] );
-
- $safecss_post_revision = Jetpack_Custom_CSS::get_current_revision();
-
- update_option( 'safecss_rev', intval( get_option( 'safecss_rev' ) ) + 1 );
-
- update_post_meta( $safecss_post_id, 'custom_css_add', $add_to_existing );
- update_post_meta( $safecss_post_id, 'content_width', $args['content_width'] );
- update_post_meta( $safecss_post_id, 'custom_css_preprocessor', $args['preprocessor'] );
-
- delete_option( 'safecss_add' );
- delete_option( 'safecss_content_width' );
-
- update_metadata( 'post', $safecss_post_revision['ID'], 'custom_css_add', $add_to_existing );
- update_metadata( 'post', $safecss_post_revision['ID'], 'content_width', $args['content_width'] );
- update_metadata( 'post', $safecss_post_revision['ID'], 'custom_css_preprocessor', $args['preprocessor'] );
-
- delete_option( 'safecss_preview_add' );
-
- return $safecss_post_id;
- }
-
- /**
- * Get the published custom CSS post.
- *
- * @return array
- */
- static function get_post() {
- $custom_css_post_id = Jetpack_Custom_CSS::post_id();
-
- if ( $custom_css_post_id )
- return get_post( $custom_css_post_id, ARRAY_A );
-
- return array();
- }
-
- /**
- * Get the post ID of the published custom CSS post.
- *
- * @return int|bool The post ID if it exists; false otherwise.
- */
- static function post_id() {
- /**
- * Filter the ID of the post where Custom CSS is stored, before the ID is retrieved.
- *
- * If the callback function returns a non-null value, then post_id() will immediately
- * return that value, instead of retrieving the normal post ID.
- *
- * @module custom-css
- *
- * @since 3.8.1
- *
- * @param null null The ID to return instead of the normal ID.
- */
- $custom_css_post_id = apply_filters( 'jetpack_custom_css_pre_post_id', null );
- if ( ! is_null( $custom_css_post_id ) ) {
- return $custom_css_post_id;
- }
-
- $custom_css_post_id = wp_cache_get( 'custom_css_post_id' );
-
- if ( false === $custom_css_post_id ) {
- $custom_css_posts = get_posts( array(
- 'posts_per_page' => 1,
- 'post_type' => 'safecss',
- 'post_status' => 'publish',
- 'orderby' => 'date',
- 'order' => 'DESC'
- ) );
-
- if ( count( $custom_css_posts ) > 0 )
- $custom_css_post_id = $custom_css_posts[0]->ID;
- else
- $custom_css_post_id = 0;
-
- // Save post_id=0 to note that no safecss post exists.
- wp_cache_set( 'custom_css_post_id', $custom_css_post_id );
- }
-
- if ( ! $custom_css_post_id )
- return false;
-
- return $custom_css_post_id;
- }
-
- /**
- * Get the current revision of the original safecss record
- *
- * @return object
- */
- static function get_current_revision() {
- $safecss_post = Jetpack_Custom_CSS::get_post();
-
- if ( empty( $safecss_post ) ) {
- return false;
- }
-
- $revisions = wp_get_post_revisions( $safecss_post['ID'], array( 'posts_per_page' => 1, 'orderby' => 'date', 'order' => 'DESC' ) );
-
- // Empty array if no revisions exist
- if ( empty( $revisions ) ) {
- // Return original post
- return $safecss_post;
- } else {
- // Return the first entry in $revisions, this will be the current revision
- $current_revision = get_object_vars( array_shift( $revisions ) );
- return $current_revision;
- }
- }
-
- /**
- * Save new revision of CSS
- * Checks to see if content was modified before really saving
- *
- * @param string $css
- * @param bool $is_preview
- * @return bool|int If nothing was saved, returns false. If a post
- * or revision was saved, returns the post ID.
- */
- static function save_revision( $css, $is_preview = false, $preprocessor = '' ) {
- $safecss_post = Jetpack_Custom_CSS::get_post();
-
- $compressed_css = Jetpack_Custom_CSS::minify( $css, $preprocessor );
-
- // If null, there was no original safecss record, so create one
- if ( null == $safecss_post ) {
- if ( ! $css )
- return false;
-
- $post = array();
- $post['post_content'] = wp_slash( $css );
- $post['post_title'] = 'safecss';
- $post['post_status'] = 'publish';
- $post['post_type'] = 'safecss';
- $post['post_content_filtered'] = wp_slash( $compressed_css );
-
- // Set excerpt to current theme, for display in revisions list
- $current_theme = wp_get_theme();
- $post['post_excerpt'] = $current_theme->Name;
-
- // Insert the CSS into wp_posts
- $post_id = wp_insert_post( $post );
- wp_cache_set( 'custom_css_post_id', $post_id );
- return $post_id;
- }
-
- // Update CSS in post array with new value passed to this function
- $safecss_post['post_content'] = $css;
- $safecss_post['post_content_filtered'] = $compressed_css;
-
- // Set excerpt to current theme, for display in revisions list
- $current_theme = wp_get_theme();
- $safecss_post['post_excerpt'] = $current_theme->Name;
-
- // Don't carry over last revision's timestamps, otherwise revisions all have matching timestamps
- unset( $safecss_post['post_date'] );
- unset( $safecss_post['post_date_gmt'] );
- unset( $safecss_post['post_modified'] );
- unset( $safecss_post['post_modified_gmt'] );
-
- // Do not update post if we are only saving a preview
- if ( false === $is_preview ) {
- $safecss_post['post_content'] = wp_slash( $safecss_post['post_content'] );
- $safecss_post['post_content_filtered'] = wp_slash( $safecss_post['post_content_filtered'] );
- $post_id = wp_update_post( $safecss_post );
- wp_cache_set( 'custom_css_post_id', $post_id );
- return $post_id;
- }
- else if ( ! defined( 'DOING_MIGRATE' ) ) {
- return _wp_put_post_revision( $safecss_post );
- }
- }
-
- static function skip_stylesheet() {
- /**
- * Prevent the Custom CSS stylesheet from being enqueued.
- *
- * @module custom-css
- *
- * @since 2.2.1
- *
- * @param null Should the stylesheet be skipped. Default to null. Anything else will force the stylesheet to be skipped.
- */
- $skip_stylesheet = apply_filters( 'safecss_skip_stylesheet', null );
-
- if ( null !== $skip_stylesheet ) {
- return $skip_stylesheet;
- } elseif ( Jetpack_Custom_CSS::is_customizer_preview() ) {
- return false;
- } else {
- if ( Jetpack_Custom_CSS::is_preview() ) {
- $safecss_post = Jetpack_Custom_CSS::get_current_revision();
-
- if ( $safecss_post )
- return (bool) ( get_post_meta( $safecss_post['ID'], 'custom_css_add', true ) == 'no' );
- else
- return (bool) ( get_option( 'safecss_preview_add' ) == 'no' );
- }
- else {
- $custom_css_post_id = Jetpack_Custom_CSS::post_id();
-
- if ( $custom_css_post_id ) {
- $custom_css_add = get_post_meta( $custom_css_post_id, 'custom_css_add', true );
-
- // It is possible for the CSS to be stored in a post but for the safecss_add option
- // to have not been upgraded yet if the user hasn't opened their Custom CSS editor
- // since October 2012.
- if ( ! empty( $custom_css_add ) )
- return (bool) ( $custom_css_add === 'no' );
- }
-
- return (bool) ( Jetpack_Options::get_option_and_ensure_autoload( 'safecss_add', '' ) == 'no' );
- }
- }
- }
-
- static function is_preview() {
- return isset( $_GET['csspreview'] ) && $_GET['csspreview'] === 'true';
- }
-
- /**
- * Currently this filter function gets called on
- * 'template_redirect' action and
- * 'admin_init' action
- */
- static function set_content_width(){
- // Don't apply this filter on the Edit CSS page
- if ( isset( $_GET ) && isset( $_GET['page'] ) && 'editcss' == $_GET['page'] && is_admin() ) {
- return;
- }
-
- $GLOBALS['content_width'] = Jetpack::get_content_width();
- }
-
- /*
- * False when the site has the Custom Design upgrade.
- * Used only on WordPress.com.
- */
- static function is_freetrial() {
- /**
- * Determine if a WordPress.com site uses a Free trial of the Custom Design Upgrade.
- * Used only on WordPress.com.
- *
- * @module custom-css
- *
- * @since 1.7.0
- *
- * @param bool false Does the site use a Free trial of the Custom Design Upgrade. Default to false.
- */
- return apply_filters( 'safecss_is_freetrial', false );
- }
-
- static function get_preprocessor_key() {
- $safecss_post = Jetpack_Custom_CSS::get_current_revision();
- return get_post_meta( $safecss_post['ID'], 'custom_css_preprocessor', true );
- }
-
- static function get_preprocessor() {
- /** This filter is documented in modules/custom-css/custom-css.php */
- $preprocessors = apply_filters( 'jetpack_custom_css_preprocessors', array() );
- $selected_preprocessor_key = self::get_preprocessor_key();
- $selected_preprocessor = isset( $preprocessors[ $selected_preprocessor_key ] ) ? $preprocessors[ $selected_preprocessor_key ] : null;
- return $selected_preprocessor;
- }
-
- static function get_css( $compressed = false ) {
- /**
- * Filter the Custom CSS returned.
- * Can be used to return an error, or no CSS at all.
- *
- * @module custom-css
- *
- * @since 1.7.0
- *
- * @param bool false Should we return an error instead of the Custom CSS. Default to false.
- */
- $default_css = apply_filters( 'safecss_get_css_error', false );
-
- if ( $default_css !== false )
- return $default_css;
-
- $option = ( Jetpack_Custom_CSS::is_preview() || Jetpack_Custom_CSS::is_freetrial() ) ? 'safecss_preview' : 'safecss';
- $css = '';
-
- if ( 'safecss' == $option ) {
- // Don't bother checking for a migrated 'safecss' option if it never existed.
- if ( false === get_option( 'safecss' ) || get_option( 'safecss_revision_migrated' ) ) {
- $safecss_post = Jetpack_Custom_CSS::get_post();
- if ( ! empty( $safecss_post ) ) {
- $css = ( $compressed && $safecss_post['post_content_filtered'] ) ? $safecss_post['post_content_filtered'] : $safecss_post['post_content'];
- }
- } else {
- $current_revision = Jetpack_Custom_CSS::get_current_revision();
- if ( false === $current_revision ) {
- $css = '';
- } else {
- $css = ( $compressed && $current_revision['post_content_filtered'] ) ? $current_revision['post_content_filtered'] : $current_revision['post_content'];
- }
- }
-
- // Fix for un-migrated Custom CSS
- if ( empty( $safecss_post ) ) {
- $_css = get_option( 'safecss' );
- if ( !empty( $_css ) ) {
- $css = $_css;
- }
- }
- }
- else if ( 'safecss_preview' == $option ) {
- $safecss_post = Jetpack_Custom_CSS::get_current_revision();
- $css = $safecss_post['post_content'];
- $css = Jetpack_Custom_CSS::minify( $css, get_post_meta( $safecss_post['ID'], 'custom_css_preprocessor', true ) );
- }
-
- $css = str_replace( array( '\\\00BB \\\0020', '\0BB \020', '0BB 020' ), '\00BB \0020', $css );
-
- if ( empty( $css ) ) {
- $css = "/*\n"
- . wordwrap(
- /**
- * Filter the default message displayed in the Custom CSS editor.
- *
- * @module custom-css
- *
- * @since 1.7.0
- *
- * @param string $str Default Custom CSS editor content.
- */
- apply_filters(
- 'safecss_default_css',
- __(
- "Welcome to Custom CSS!\n\nTo learn how this works, see http://wp.me/PEmnE-Bt",
- 'jetpack'
- )
- )
- )
- . "\n*/";
- }
-
- /**
- * Filter the Custom CSS returned from the editor.
- *
- * @module custom-css
- *
- * @since 1.7.0
- *
- * @param string $css Custom CSS.
- */
- $css = apply_filters( 'safecss_css', $css );
-
- return $css;
- }
-
- static function replace_insecure_urls( $css ) {
- if ( ! function_exists( '_sa_get_frontend_https_url_replacement_map' ) ) {
- return $css;
- }
- list( $http_urls, $secure_urls ) = _sa_get_frontend_https_url_replacement_map();
-
- return str_replace( $http_urls, $secure_urls, $css );
- }
-
- static function print_css() {
-
- /**
- * Fires right before printing the custom CSS inside the <head> element.
- *
- * @module custom-css
- *
- * @since 1.7.0
- */
- do_action( 'safecss_print_pre' );
- $css = Jetpack_Custom_CSS::get_css( true );
- echo self::replace_insecure_urls( $css );
- }
-
- static function should_we_inline_custom_css( $should_we, $css ) {
- // If the CSS is less than 2,000 characters, inline it! otherwise return what was passed in.
- return ( strlen( $css ) < 2000 ) ? true : $should_we;
- }
-
- static function link_tag() {
- global $blog_id, $current_blog;
-
- if (
- /**
- * Do not include any CSS on the page if the CSS includes an error.
- * Setting this filter to true stops any Custom CSS from being enqueued.
- *
- * @module custom-css
- *
- * @since 1.7.0
- *
- * @param bool false Does the CSS include an error. Default to false.
- */
- apply_filters( 'safecss_style_error', false )
- ) {
- return;
- }
-
- if ( ! is_super_admin() && isset( $current_blog ) && ( 1 == $current_blog->spam || 1 == $current_blog->deleted ) )
- return;
-
- if ( Jetpack_Custom_CSS::is_customizer_preview() )
- return;
-
- $css = '';
- $option = Jetpack_Custom_CSS::is_preview() ? 'safecss_preview' : 'safecss';
-
- if ( 'safecss' == $option ) {
- if ( Jetpack_Options::get_option_and_ensure_autoload( 'safecss_revision_migrated', '0' ) ) {
- $safecss_post = Jetpack_Custom_CSS::get_post();
-
- if ( ! empty( $safecss_post['post_content'] ) ) {
- $css = $safecss_post['post_content'];
- }
- } else {
- $current_revision = Jetpack_Custom_CSS::get_current_revision();
-
- if ( ! empty( $current_revision['post_content'] ) ) {
- $css = $current_revision['post_content'];
- }
- }
-
- // Fix for un-migrated Custom CSS
- if ( empty( $safecss_post ) ) {
- $_css = Jetpack_Options::get_option_and_ensure_autoload( 'safecss', '' );
- if ( !empty( $_css ) ) {
- $css = $_css;
- }
- }
- }
-
- if ( 'safecss_preview' == $option ) {
- $safecss_post = Jetpack_Custom_CSS::get_current_revision();
-
- if ( !empty( $safecss_post['post_content'] ) ) {
- $css = $safecss_post['post_content'];
- }
- }
-
- $css = str_replace( array( '\\\00BB \\\0020', '\0BB \020', '0BB 020' ), '\00BB \0020', $css );
-
- if ( $css == '' )
- return;
-
- if (
- /**
- * Allow inserting CSS inline instead of through a separate file.
- *
- * @module custom-css
- *
- * @since 3.4.0
- *
- * @param bool false Should the CSS be added inline instead of through a separate file. Default to false.
- * @param string $css Custom CSS.
- */
- apply_filters( 'safecss_embed_style', false, $css )
- ) {
-
- echo "\r\n" . '<style id="custom-css-css">' . Jetpack_Custom_CSS::get_css( true ) . "</style>\r\n";
-
- } else {
-
- $href = home_url( '/' );
- $href = add_query_arg( 'custom-css', 1, $href );
- $href = add_query_arg( 'csblog', $blog_id, $href );
- $href = add_query_arg( 'cscache', 6, $href );
- $href = add_query_arg( 'csrev', (int) get_option( $option . '_rev' ), $href );
-
- /**
- * Filter the Custom CSS link enqueued in the head.
- *
- * @module custom-css
- *
- * @since 1.7.0
- *
- * @param string $href Custom CSS link enqueued in the head.
- * @param string $blog_id Blog ID.
- */
- $href = apply_filters( 'safecss_href', $href, $blog_id );
-
- if ( Jetpack_Custom_CSS::is_preview() )
- $href = add_query_arg( 'csspreview', 'true', $href );
-
- ?>
- <link rel="stylesheet" id="custom-css-css" type="text/css" href="<?php echo esc_url( $href ); ?>" />
- <?php
-
- }
-
- /**
- * Fires after creating the <link> in the <head> element for the custom css stylesheet.
- *
- * @module custom-css
- *
- * @since 2.2.2
- */
- do_action( 'safecss_link_tag_post' );
- }
-
- static function style_filter( $current ) {
- if ( Jetpack_Custom_CSS::is_freetrial() && ( ! Jetpack_Custom_CSS::is_preview() || ! current_user_can( 'switch_themes' ) ) )
- return $current;
- else if ( Jetpack_Custom_CSS::skip_stylesheet() )
- /**
- * Filter the default blank Custom CSS URL.
- *
- * @module custom-css
- *
- * @since 2.2.1
- *
- * @param string $url Default blank Custom CSS URL.
- */
- return apply_filters( 'safecss_style_filter_url', plugins_url( 'custom-css/css/blank.css', __FILE__ ) );
-
- return $current;
- }
-
- static function buffer( $html ) {
- $html = str_replace( '</body>', Jetpack_Custom_CSS::preview_flag(), $html );
- return preg_replace_callback( '!href=([\'"])(.*?)\\1!', array( 'Jetpack_Custom_CSS', 'preview_links' ), $html );
- }
-
- static function preview_links( $matches ) {
- if ( 0 !== strpos( $matches[2], get_option( 'home' ) ) )
- return $matches[0];
-
- $link = wp_specialchars_decode( $matches[2] );
- $link = add_query_arg( 'csspreview', 'true', $link );
- $link = esc_url( $link );
- return "href={$matches[1]}$link{$matches[1]}";
- }
-
- /**
- * Places a black bar above every preview page
- */
- static function preview_flag() {
- if ( is_admin() )
- return;
-
- $message = esc_html__( 'Preview: changes must be saved or they will be lost', 'jetpack' );
- /**
- * Filter the Preview message displayed on the site when previewing custom CSS, before to save it.
- *
- * @module custom-css
- *
- * @since 1.7.0
- *
- * @param string $message Custom CSS preview message.
- */
- $message = apply_filters( 'safecss_preview_message', $message );
-
- $preview_flag_js = "var flag = document.createElement('div');
- flag.innerHTML = " . json_encode( $message ) . ";
- flag.style.background = '#FF6600';
- flag.style.color = 'white';
- flag.style.textAlign = 'center';
- flag.style.fontSize = '15px';
- flag.style.padding = '2px';
- flag.style.fontFamily = 'sans-serif';
- document.body.style.paddingTop = '0px';
- document.body.insertBefore(flag, document.body.childNodes[0]);
- ";
-
- /**
- * Filter the Custom CSS preview message JS styling.
- *
- * @module custom-css
- *
- * @since 1.7.0
- *
- * @param string $preview_flag_js Custom CSS preview message JS styling.
- */
- $preview_flag_js = apply_filters( 'safecss_preview_flag_js', $preview_flag_js );
- if ( $preview_flag_js ) {
- $preview_flag_js = '<script type="text/javascript">
- // <![CDATA[
- ' . $preview_flag_js . '
- // ]]>
- </script>';
- }
-
- return $preview_flag_js;
- }
-
- static function menu() {
- $parent = 'themes.php';
- $title = __( 'Edit CSS', 'jetpack' );
- $hook = add_theme_page( $title, $title, 'edit_theme_options', 'editcss', array( 'Jetpack_Custom_CSS', 'admin' ) );
-
- add_action( "load-revision.php", array( 'Jetpack_Custom_CSS', 'prettify_post_revisions' ) );
- add_action( "load-$hook", array( 'Jetpack_Custom_CSS', 'update_title' ) );
- }
-
- /**
- * Adds a menu item in the appearance section for this plugin's administration
- * page. Also adds hooks to enqueue the CSS and JS for the admin page.
- */
- static function update_title() {
- global $title;
- $title = __( 'CSS', 'jetpack' );
- }
-
- static function prettify_post_revisions() {
- add_filter( 'the_title', array( 'Jetpack_Custom_CSS', 'post_title' ), 10, 2 );
- }
-
- static function post_title( $title, $post_id ) {
- if ( !$post_id = (int) $post_id ) {
- return $title;
- }
-
- if ( !$post = get_post( $post_id ) ) {
- return $title;
- }
-
- if ( 'safecss' != $post->post_type ) {
- return $title;
- }
-
- return __( 'Custom CSS Stylesheet', 'jetpack' );
- }
-
- static function enqueue_scripts( $hook ) {
- if ( 'appearance_page_editcss' != $hook )
- return;
-
- wp_enqueue_script( 'postbox' );
- wp_enqueue_script(
- 'custom-css-editor',
- Jetpack::get_file_url_for_environment(
- '_inc/build/custom-css/custom-css/js/css-editor.min.js',
- 'modules/custom-css/custom-css/js/css-editor.js'
- ),
- 'jquery',
- '20130325',
- true
- );
- wp_enqueue_style( 'custom-css-editor', plugins_url( 'custom-css/css/css-editor.css', __FILE__ ) );
-
- if ( defined( 'SAFECSS_USE_ACE' ) && SAFECSS_USE_ACE ) {
- wp_register_style( 'jetpack-css-codemirror', plugins_url( 'custom-css/css/codemirror.css', __FILE__ ), array(), '20120905' );
- wp_enqueue_style( 'jetpack-css-use-codemirror', plugins_url( 'custom-css/css/use-codemirror.css', __FILE__ ), array( 'jetpack-css-codemirror' ), '20120905' );
-
- wp_register_script( 'jetpack-css-codemirror', plugins_url( 'custom-css/js/codemirror.min.js', __FILE__ ), array(), '3.16', true );
- wp_enqueue_script(
- 'jetpack-css-use-codemirror',
- Jetpack::get_file_url_for_environment(
- '_inc/build/custom-css/custom-css/js/use-codemirror.min.js',
- 'modules/custom-css/custom-css/js/use-codemirror.js'
- ),
- array( 'jquery', 'underscore', 'jetpack-css-codemirror' ),
- '20131009',
- true
- );
- }
- }
-
- static function saved_message() {
- echo '<div id="message" class="updated fade"><p><strong>' . __( 'Stylesheet saved.', 'jetpack' ) . '</strong></p></div>';
- }
-
- static function admin() {
- add_meta_box( 'submitdiv', __( 'Publish', 'jetpack' ), array( __CLASS__, 'publish_box' ), 'editcss', 'side' );
- add_action( 'custom_css_submitbox_misc_actions', array( __CLASS__, 'content_width_settings' ) );
-
- $safecss_post = Jetpack_Custom_CSS::get_post();
-
- if ( ! empty( $safecss_post ) && 0 < $safecss_post['ID'] && wp_get_post_revisions( $safecss_post['ID'], array( 'posts_per_page' => 1 ) ) )
- add_meta_box( 'revisionsdiv', __( 'CSS Revisions', 'jetpack' ), array( __CLASS__, 'revisions_meta_box' ), 'editcss', 'side' );
- ?>
- <div class="wrap">
- <?php
-
- /**
- * Fires right before the custom css page begins.
- *
- * @module custom-css
- *
- * @since 1.7.0
- */
- do_action( 'custom_design_header' );
-
- ?>
- <h1><?php _e( 'CSS Stylesheet Editor', 'jetpack' ); ?></h1>
- <form id="safecssform" action="" method="post">
- <?php wp_nonce_field( 'safecss' ) ?>
- <?php wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); ?>
- <?php wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?>
- <input type="hidden" name="action" value="save" />
- <div id="poststuff">
- <p class="css-support">
- <?php
- /**
- * Filter the intro text appearing above the Custom CSS Editor.
- *
- * @module custom-css
- *
- * @since 1.7.0
- *
- * @param string $str Intro text appearing above the Custom CSS editor.
- */
- echo apply_filters( 'safecss_intro_text', __( 'New to CSS? Start with a <a href="http://www.htmldog.com/guides/cssbeginner/" rel="noopener noreferrer" target="_blank">beginner tutorial</a>. Questions?
- Ask in the <a href="https://wordpress.org/support/forum/themes-and-templates" rel="noopener noreferrer" target="_blank">Themes and Templates forum</a>.', 'jetpack' ) );
- ?></p>
- <p class="css-support"><?php echo __( 'Note: Custom CSS will be reset when changing themes.', 'jetpack' ); ?></p>
-
- <div id="post-body" class="metabox-holder columns-2">
- <div id="post-body-content">
- <div class="postarea">
- <textarea id="safecss" name="safecss"<?php if ( SAFECSS_USE_ACE ) echo ' class="hide-if-js"'; ?>><?php echo esc_textarea( Jetpack_Custom_CSS::get_css() ); ?></textarea>
- <div class="clear"></div>
- </div>
- </div>
- <div id="postbox-container-1" class="postbox-container">
- <?php do_meta_boxes( 'editcss', 'side', $safecss_post ); ?>
- </div>
- </div>
- <br class="clear" />
- </div>
- </form>
- </div>
- <?php
- }
-
- /**
- * Content width setting callback
- */
- static function content_width_settings() {
- $safecss_post = Jetpack_Custom_CSS::get_current_revision();
-
- $custom_content_width = get_post_meta( $safecss_post['ID'], 'content_width', true );
-
- // If custom content width hasn't been overridden and the theme has a content_width value, use that as a default.
- if ( $custom_content_width <= 0 && ! empty( $GLOBALS['content_width'] ) )
- $custom_content_width = $GLOBALS['content_width'];
-
- if ( ! $custom_content_width || ( isset( $GLOBALS['content_width'] ) && $custom_content_width == $GLOBALS['content_width'] ) )
- $custom_content_width = '';
-
- ?>
- <div class="misc-pub-section">
- <label><?php esc_html_e( 'Media Width:', 'jetpack' ); ?></label>
- <span id="content-width-display" data-default-text="<?php esc_attr_e( 'Default', 'jetpack' ); ?>" data-custom-text="<?php esc_attr_e( '%s px', 'jetpack' ); ?>"><?php echo $custom_content_width ? sprintf( esc_html__( '%s px', 'jetpack' ), $custom_content_width ) : esc_html_e( 'Default', 'jetpack' ); ?></span>
- <a class="edit-content-width hide-if-no-js" href="#content-width"><?php echo esc_html_e( 'Edit', 'jetpack' ); ?></a>
- <div id="content-width-select" class="hide-if-js">
- <input type="hidden" name="custom_content_width" id="custom_content_width" value="<?php echo esc_attr( $custom_content_width ); ?>" />
- <p>
- <?php
-
- printf( /* translators: %1$s is replaced with an input field for numbers. */
- __( 'Limit width to %1$s pixels for full size images. (<a href="%2$s" rel="noopener noreferrer" target="_blank">More info</a>.)', 'jetpack' ),
- '<input type="text" id="custom_content_width_visible" value="' . esc_attr( $custom_content_width ) . '" size="4" />',
- /**
- * Filter the Custom CSS limited width's support doc URL.
- *
- * @module custom-css
- *
- * @since 2.2.3
- *
- * @param string $url Custom CSS limited width's support doc URL.
- */
- apply_filters( 'safecss_limit_width_link', 'http://jetpack.com/support/custom-css/#limited-width' )
- );
-
- ?>
- </p>
- <?php
-
- if (
- ! empty( $GLOBALS['content_width'] )
- && $custom_content_width != $GLOBALS['content_width']
- ) {
- $current_theme = wp_get_theme()->Name;
-
- ?>
- <p><?php printf( _n( 'The default content width for the %s theme is %d pixel.', 'The default content width for the %s theme is %d pixels.', intval( $GLOBALS['content_width'] ), 'jetpack' ), $current_theme, intval( $GLOBALS['content_width'] ) ); ?></p>
- <?php
- }
-
- ?>
- <a class="save-content-width hide-if-no-js button" href="#content-width"><?php esc_html_e( 'OK', 'jetpack' ); ?></a>
- <a class="cancel-content-width hide-if-no-js" href="#content-width"><?php esc_html_e( 'Cancel', 'jetpack' ); ?></a>
- </div>
- <script type="text/javascript">
- jQuery( function ( $ ) {
- var defaultContentWidth = <?php echo isset( $GLOBALS['content_width'] ) ? json_encode( intval( $GLOBALS['content_width'] ) ) : 0; ?>;
-
- $( '.edit-content-width' ).bind( 'click', function ( e ) {
- e.preventDefault();
-
- $( '#content-width-select' ).slideDown();
- $( this ).hide();
- } );
-
- $( '.cancel-content-width' ).bind( 'click', function ( e ) {
- e.preventDefault();
-
- $( '#content-width-select' ).slideUp( function () {
- $( '.edit-content-width' ).show();
- $( '#custom_content_width_visible' ).val( $( '#custom_content_width' ).val() );
- } );
- } );
-
- $( '.save-content-width' ).bind( 'click', function ( e ) {
- e.preventDefault();
-
- $( '#content-width-select' ).slideUp();
-
- var newContentWidth = parseInt( $( '#custom_content_width_visible' ).val(), 10 );
-
- if ( newContentWidth && newContentWidth != defaultContentWidth ) {
- $( '#content-width-display' ).text(
- $( '#content-width-display' )
- .data( 'custom-text' )
- .replace( '%s', $( '#custom_content_width_visible' ).val() )
- );
- }
- else {
- $( '#content-width-display' ).text( $( '#content-width-display' ).data( 'default-text' ) );
- }
-
- $( '#custom_content_width' ).val( $( '#custom_content_width_visible' ).val() );
- $( '.edit-content-width' ).show();
- } );
- } );
- </script>
- </div>
- <?php
- }
-
- static function publish_box() {
- ?>
- <div id="minor-publishing">
- <div id="misc-publishing-actions">
- <?php
-
- /**
- * Filter the array of available Custom CSS preprocessors.
- *
- * @module custom-css
- *
- * @since 2.0.3
- *
- * @param array array() Empty by default.
- */
- $preprocessors = apply_filters( 'jetpack_custom_css_preprocessors', array() );
-
- if ( ! empty( $preprocessors ) ) {
- $safecss_post = Jetpack_Custom_CSS::get_current_revision();
- $selected_preprocessor_key = get_post_meta( $safecss_post['ID'], 'custom_css_preprocessor', true );
- $selected_preprocessor = isset( $preprocessors[$selected_preprocessor_key] ) ? $preprocessors[$selected_preprocessor_key] : null;
-
- ?>
- <div class="misc-pub-section">
- <label><?php esc_html_e( 'Preprocessor:', 'jetpack' ); ?></label>
- <span id="preprocessor-display"><?php echo esc_html( $selected_preprocessor ? $selected_preprocessor['name'] : __( 'None', 'jetpack' ) ); ?></span>
- <a class="edit-preprocessor hide-if-no-js" href="#preprocessor"><?php echo esc_html_e( 'Edit', 'jetpack' ); ?></a>
- <div id="preprocessor-select" class="hide-if-js">
- <input type="hidden" name="custom_css_preprocessor" id="custom_css_preprocessor" value="<?php echo esc_attr( $selected_preprocessor_key ); ?>" />
- <select id="preprocessor_choices">
- <option value=""><?php esc_html_e( 'None', 'jetpack' ); ?></option>
- <?php
-
- foreach ( $preprocessors as $preprocessor_key => $preprocessor ) {
- ?>
- <option value="<?php echo esc_attr( $preprocessor_key ); ?>" <?php selected( $selected_preprocessor_key, $preprocessor_key ); ?>><?php echo esc_html( $preprocessor['name'] ); ?></option>
- <?php
- }
-
- ?>
- </select>
- <a class="save-preprocessor hide-if-no-js button" href="#preprocessor"><?php esc_html_e( 'OK', 'jetpack' ); ?></a>
- <a class="cancel-preprocessor hide-if-no-js" href="#preprocessor"><?php esc_html_e( 'Cancel', 'jetpack' ); ?></a>
- </div>
- </div>
- <?php
- }
-
- $safecss_post = Jetpack_Custom_CSS::get_current_revision();
-
- $add_css = ( get_post_meta( $safecss_post['ID'], 'custom_css_add', true ) != 'no' );
-
- ?>
- <div class="misc-pub-section">
- <label><?php esc_html_e( 'Mode:', 'jetpack' ); ?></label>
- <span id="css-mode-display"><?php echo esc_html( $add_css ? __( 'Add-on', 'jetpack' ) : __( 'Replacement', 'jetpack' ) ); ?></span>
- <a class="edit-css-mode hide-if-no-js" href="#css-mode"><?php echo esc_html_e( 'Edit', 'jetpack' ); ?></a>
- <div id="css-mode-select" class="hide-if-js">
- <input type="hidden" name="add_to_existing" id="add_to_existing" value="<?php echo $add_css ? 'true' : 'false'; ?>" />
- <p>
- <label>
- <input type="radio" name="add_to_existing_display" value="true" <?php checked( $add_css ); ?>/>
- <?php _e( 'Add-on CSS <b>(Recommended)</b>', 'jetpack' ); ?>
- </label>
- <br />
- <label>
- <input type="radio" name="add_to_existing_display" value="false" <?php checked( ! $add_css ); ?>/>
- <?php printf(
- __( 'Replace <a href="%s">theme\'s CSS</a> <b>(Advanced)</b>', 'jetpack' ),
- /**
- * Filter the theme's stylesheet URL.
- *
- * @module custom-css
- *
- * @since 1.7.0
- *
- * @param string $url Active theme's stylesheet URL. Default to get_stylesheet_uri().
- */
- apply_filters( 'safecss_theme_stylesheet_url', get_stylesheet_uri() )
- ); ?>
- </label>
- </p>
- <a class="save-css-mode hide-if-no-js button" href="#css-mode"><?php esc_html_e( 'OK', 'jetpack' ); ?></a>
- <a class="cancel-css-mode hide-if-no-js" href="#css-mode"><?php esc_html_e( 'Cancel', 'jetpack' ); ?></a>
- </div>
- </div>
- <?php
-
- /**
- * Allows addition of elements to the submit box for custom css on the wp-admin side.
- *
- * @module custom-css
- *
- * @since 2.0.3
- */
- do_action( 'custom_css_submitbox_misc_actions' );
-
- ?>
- </div>
- </div>
- <div id="major-publishing-actions">
- <input type="button" class="button" id="preview" name="preview" value="<?php esc_attr_e( 'Preview', 'jetpack' ) ?>" />
- <div id="publishing-action">
- <input type="submit" class="button-primary" id="save" name="save" value="<?php ( Jetpack_Custom_CSS::is_freetrial() ) ? esc_attr_e( 'Save &amp; Buy Upgrade', 'jetpack' ) : esc_attr_e( 'Save Stylesheet', 'jetpack' ); ?>" />
- </div>
- </div>
- <?php
- }
-
- /**
- * Render metabox listing CSS revisions and the themes that correspond to the revisions.
- * Called by safecss_admin
- *
- * @global $post
- * @param array $safecss_post
- * @uses wp_revisions_to_keep
- * @uses WP_Query
- * @uses wp_post_revision_title
- * @uses esc_html
- * @uses add_query_arg
- * @uses menu_page_url
- * @uses wp_reset_query
- * @return string
- */
- static function revisions_meta_box( $safecss_post ) {
-
- $show_all_revisions = isset( $_GET['show_all_rev'] );
-
- if ( function_exists( 'wp_revisions_to_keep' ) ) {
- $max_revisions = wp_revisions_to_keep( (object) $safecss_post );
- } else {
- $max_revisions = defined( 'WP_POST_REVISIONS' ) && is_numeric( WP_POST_REVISIONS ) ? (int) WP_POST_REVISIONS : 25;
- }
-
- $posts_per_page = $show_all_revisions ? $max_revisions : 6;
-
- $revisions = new WP_Query( array(
- 'posts_per_page' => $posts_per_page,
- 'post_type' => 'revision',
- 'post_status' => 'inherit',
- 'post_parent' => $safecss_post['ID'],
- 'orderby' => 'date',
- 'order' => 'DESC'
- ) );
-
- if ( $revisions->have_posts() ) { ?>
- <ul class="post-revisions"><?php
-
- global $post;
-
- while ( $revisions->have_posts() ) :
- $revisions->the_post();
-
- ?><li>
- <?php
- echo wp_post_revision_title( $post );
-
- if ( ! empty( $post->post_excerpt ) )
- echo ' (' . esc_html( $post->post_excerpt ) . ')';
- ?>
- </li><?php
-
- endwhile;
-
- ?></ul><?php
-
- if ( $revisions->found_posts > 6 && !$show_all_revisions ) {
- ?>
- <br>
- <a href="<?php echo add_query_arg( 'show_all_rev', 'true', menu_page_url( 'editcss', false ) ); ?>"><?php esc_html_e( 'Show all', 'jetpack' ); ?></a>
- <?php
- }
- }
-
- wp_reset_query();
- }
-
- /**
- * Hook in init at priority 11 to disable custom CSS.
- */
- static function disable() {
- remove_action( 'wp_head', array( 'Jetpack_Custom_CSS', 'link_tag' ), 101 );
- remove_filter( 'stylesheet_uri', array( 'Jetpack_Custom_CSS', 'style_filter' ) );
- }
-
- /**
- * Reset all aspects of Custom CSS on a theme switch so that changing
- * themes is a sure-fire way to get a clean start.
- */
- static function reset() {
- $safecss_post_id = Jetpack_Custom_CSS::save_revision( '' );
- $safecss_revision = Jetpack_Custom_CSS::get_current_revision();
-
- update_option( 'safecss_rev', intval( get_option( 'safecss_rev' ) ) + 1 );
-
- update_post_meta( $safecss_post_id, 'custom_css_add', 'yes' );
- update_post_meta( $safecss_post_id, 'content_width', false );
- update_post_meta( $safecss_post_id, 'custom_css_preprocessor', '' );
-
- delete_option( 'safecss_add' );
- delete_option( 'safecss_content_width' );
-
- update_metadata( 'post', $safecss_revision['ID'], 'custom_css_add', 'yes' );
- update_metadata( 'post', $safecss_revision['ID'], 'content_width', false );
- update_metadata( 'post', $safecss_revision['ID'], 'custom_css_preprocessor', '' );
-
- delete_option( 'safecss_preview_add' );
- }
-
- static function is_customizer_preview() {
- if ( isset ( $GLOBALS['wp_customize'] ) )
- return ! $GLOBALS['wp_customize']->is_theme_active();
-
- return false;
- }
-
- static function minify( $css, $preprocessor = '' ) {
- if ( ! $css )
- return '';
-
- if ( $preprocessor ) {
- /** This filter is documented in modules/custom-css/custom-css.php */
- $preprocessors = apply_filters( 'jetpack_custom_css_preprocessors', array() );
-
- if ( isset( $preprocessors[$preprocessor] ) ) {
- $css = call_user_func( $preprocessors[$preprocessor]['callback'], $css );
- }
- }
-
- safecss_class();
- $csstidy = new csstidy();
- $csstidy->optimise = new safecss( $csstidy );
-
- $csstidy->set_cfg( 'remove_bslash', false );
- $csstidy->set_cfg( 'compress_colors', true );
- $csstidy->set_cfg( 'compress_font-weight', true );
- $csstidy->set_cfg( 'remove_last_;', true );
- $csstidy->set_cfg( 'case_properties', true );
- $csstidy->set_cfg( 'discard_invalid_properties', true );
- $csstidy->set_cfg( 'css_level', 'CSS3.0' );
- $csstidy->set_cfg( 'template', 'highest');
- $csstidy->parse( $css );
-
- return $csstidy->print->plain();
- }
-
- /**
- * When restoring a SafeCSS post revision, also copy over the
- * content_width and custom_css_add post metadata.
- */
- static function restore_revision( $_post_id, $_revision_id ) {
- $_post = get_post( $_post_id );
-
- if ( 'safecss' != $_post->post_type )
- return;
-
- $safecss_revision = Jetpack_Custom_CSS::get_current_revision();
-
- $content_width = get_post_meta( $_revision_id, 'content_width', true );
- $custom_css_add = get_post_meta( $_revision_id, 'custom_css_add', true );
- $preprocessor = get_post_meta( $_revision_id, 'custom_css_preprocessor', true );
-
- update_metadata( 'post', $safecss_revision['ID'], 'content_width', $content_width );
- update_metadata( 'post', $safecss_revision['ID'], 'custom_css_add', $custom_css_add );
- update_metadata( 'post', $safecss_revision['ID'], 'custom_css_preprocessor', $preprocessor );
-
- delete_option( 'safecss_add' );
- delete_option( 'safecss_content_width' );
-
- update_post_meta( $_post->ID, 'content_width', $content_width );
- update_post_meta( $_post->ID, 'custom_css_add', $custom_css_add );
- update_post_meta( $_post->ID, 'custom_css_preprocessor', $preprocessor );
-
- delete_option( 'safecss_preview_add' );
- }
-
- /**
- * Migration routine for moving safecss from wp_options to wp_posts to support revisions
- *
- * @return void
- */
- static function upgrade() {
- $css = get_option( 'safecss' );
-
- if ( get_option( 'safecss_revision_migrated' ) ) {
- return false;
- }
-
- // Check if CSS is stored in wp_options
- if ( $css ) {
- // Remove the async actions from publish_post
- remove_action( 'publish_post', 'queue_publish_post' );
-
- $post = array();
- $post['post_content'] = $css;
- $post['post_title'] = 'safecss';
- $post['post_status'] = 'publish';
- $post['post_type'] = 'safecss';
-
- // Insert the CSS into wp_posts
- $post_id = wp_insert_post( $post );
- // Check for errors
- if ( !$post_id or is_wp_error( $post_id ) )
- die( $post_id->get_error_message() );
-
- // Delete safecss option
- delete_option( 'safecss' );
- }
-
- unset( $css );
-
- // Check if we have already done this
- if ( !get_option( 'safecss_revision_migrated' ) ) {
- define( 'DOING_MIGRATE', true );
-
- // Get hashes of safecss post and current revision
- $safecss_post = Jetpack_Custom_CSS::get_post();
-
- if ( empty( $safecss_post ) )
- return;
-
- $safecss_post_hash = md5( $safecss_post['post_content'] );
- $current_revision = Jetpack_Custom_CSS::get_current_revision();
-
- if ( null == $current_revision )
- return;
-
- $current_revision_hash = md5( $current_revision['post_content'] );
-
- // If hashes are not equal, set safecss post with content from current revision
- if ( $safecss_post_hash !== $current_revision_hash ) {
- Jetpack_Custom_CSS::save_revision( $current_revision['post_content'] );
- // Reset post_content to display the migrated revsion
- $safecss_post['post_content'] = $current_revision['post_content'];
- }
-
- // Set option so that we dont keep doing this
- update_option( 'safecss_revision_migrated', time() );
- }
-
- $newest_safecss_post = Jetpack_Custom_CSS::get_current_revision();
-
- if ( $newest_safecss_post ) {
- if ( get_option( 'safecss_content_width' ) ) {
- // Add the meta to the post and the latest revision.
- update_post_meta( $newest_safecss_post['ID'], 'content_width', get_option( 'safecss_content_width' ) );
- update_metadata( 'post', $newest_safecss_post['ID'], 'content_width', get_option( 'safecss_content_width' ) );
-
- delete_option( 'safecss_content_width' );
- }
-
- if ( get_option( 'safecss_add' ) ) {
- update_post_meta( $newest_safecss_post['ID'], 'custom_css_add', get_option( 'safecss_add' ) );
- update_metadata( 'post', $newest_safecss_post['ID'], 'custom_css_add', get_option( 'safecss_add' ) );
-
- delete_option( 'safecss_add' );
- }
- }
- }
-
- /**
- * Adds a filter to the redirect location in `wp-admin/revisions.php`.
- */
- static function add_revision_redirect() {
- add_filter( 'wp_redirect', array( __CLASS__, 'revision_redirect' ) );
- }
-
- /**
- * Filters the redirect location in `wp-admin/revisions.php`.
- *
- * @param string $location The path to redirect to.
- * @return string
- */
- static function revision_redirect( $location ) {
- $post = get_post();
-
- if ( ! empty( $post->post_type ) && 'safecss' == $post->post_type ) {
- $location = 'themes.php?page=editcss';
-
- if ( 'edit.php' == $location ) {
- $location = '';
- }
- }
-
- return $location;
- }
-
- static function revision_post_link( $post_link, $post_id, $context ) {
- if ( !$post_id = (int) $post_id ) {
- return $post_link;
- }
-
- if ( !$post = get_post( $post_id ) ) {
- return $post_link;
- }
-
- if ( 'safecss' != $post->post_type ) {
- return $post_link;
- }
-
- $post_link = admin_url( 'themes.php?page=editcss' );
-
- if ( 'display' == $context ) {
- return esc_url( $post_link );
- }
-
- return esc_url_raw( $post_link );
- }
-
- /**
- * When on the edit screen, make sure the custom content width
- * setting is applied to the large image size.
- */
- static function editor_max_image_size( $dims, $size = 'medium', $context = null ) {
- list( $width, $height ) = $dims;
-
- if ( 'large' == $size && 'edit' == $context )
- $width = Jetpack::get_content_width();
-
- return array( $width, $height );
- }
-
- /**
- * Override the content_width with a custom value if one is set.
- */
- static function jetpack_content_width( $content_width ) {
- $custom_content_width = 0;
-
- if ( Jetpack_Custom_CSS::is_preview() ) {
- $safecss_post = Jetpack_Custom_CSS::get_current_revision();
- $custom_content_width = intval( get_post_meta( $safecss_post['ID'], 'content_width', true ) );
- } else if ( ! Jetpack_Custom_CSS::is_freetrial() ) {
- $custom_css_post_id = Jetpack_Custom_CSS::post_id();
- if ( $custom_css_post_id )
- $custom_content_width = intval( get_post_meta( $custom_css_post_id, 'content_width', true ) );
- }
-
- if ( $custom_content_width > 0 )
- $content_width = $custom_content_width;
-
- return $content_width;
- }
-}
-
-class Jetpack_Safe_CSS {
- static function filter_attr( $css, $element = 'div' ) {
- safecss_class();
-
- $css = $element . ' {' . $css . '}';
-
- $csstidy = new csstidy();
- $csstidy->optimise = new safecss( $csstidy );
- $csstidy->set_cfg( 'remove_bslash', false );
- $csstidy->set_cfg( 'compress_colors', false );
- $csstidy->set_cfg( 'compress_font-weight', false );
- $csstidy->set_cfg( 'discard_invalid_properties', true );
- $csstidy->set_cfg( 'merge_selectors', false );
- $csstidy->set_cfg( 'remove_last_;', false );
- $csstidy->set_cfg( 'css_level', 'CSS3.0' );
-
- $css = preg_replace( '/\\\\([0-9a-fA-F]{4})/', '\\\\\\\\$1', $css );
- $css = wp_kses_split( $css, array(), array() );
- $csstidy->parse( $css );
-
- $css = $csstidy->print->plain();
-
- $css = str_replace( array( "\n","\r","\t" ), '', $css );
-
- preg_match( "/^{$element}\s*{(.*)}\s*$/", $css, $matches );
-
- if ( empty( $matches[1] ) )
- return '';
-
- return $matches[1];
- }
-}
-
-function migrate() {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::upgrade()' );
-
- return Jetpack_Custom_CSS::upgrade();
-}
-
-function safecss_revision_redirect( $redirect ) {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::revision_redirect()' );
-
- return Jetpack_Custom_CSS::revision_redirect( $redirect );
-}
-
-function safecss_revision_post_link( $post_link, $post_id, $context ) {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::revision_post_link()' );
-
- return Jetpack_Custom_CSS::revision_post_link( $post_link, $post_id, $context );
-}
-
-function get_safecss_post() {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::get_post()' );
-
- return Jetpack_Custom_CSS::get_post();
-}
-
-function custom_css_post_id() {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::post_id()' );
-
- return Jetpack_Custom_CSS::post_id();
-}
-
-function get_current_revision() {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::get_current_revision()' );
-
- return Jetpack_Custom_CSS::get_current_revision();
-}
-
-function save_revision( $css, $is_preview = false, $preprocessor = '' ) {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::save_revision()' );
-
- return Jetpack_Custom_CSS::save_revision( $css, $is_preview, $preprocessor );
-}
-
-function safecss_skip_stylesheet() {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::skip_stylesheet()' );
-
- return Jetpack_Custom_CSS::skip_stylesheet();
-}
-
-function safecss_init() {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::init()' );
-
- return Jetpack_Custom_CSS::init();
-}
-
-function safecss_is_preview() {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::is_preview()' );
-
- return Jetpack_Custom_CSS::is_preview();
-}
-
-function safecss_is_freetrial() {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::is_freetrial()' );
-
- return Jetpack_Custom_CSS::is_freetrial();
-}
-
-function safecss( $compressed = false ) {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::get_css()' );
-
- return Jetpack_Custom_CSS::get_css( $compressed );
-}
-
-function safecss_print() {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::print_css()' );
-
- return Jetpack_Custom_CSS::print_css();
-}
-
-function safecss_style() {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::link_tag()' );
-
- return Jetpack_Custom_CSS::link_tag();
-}
-
-function safecss_style_filter( $current ) {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::style_filter()' );
-
- return Jetpack_Custom_CSS::style_filter( $current );
-}
-
-function safecss_buffer( $html ) {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::buffer()' );
-
- return Jetpack_Custom_CSS::buffer( $html );
-}
-
-function safecss_preview_links( $matches ) {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::preview_links()' );
-
- return Jetpack_Custom_CSS::preview_links( $matches );
-}
-
-function safecss_preview_flag() {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::preview_flag()' );
-
- return Jetpack_Custom_CSS::preview_flag();
-}
-
-function safecss_menu() {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::menu()' );
-
- return Jetpack_Custom_CSS::menu();
-}
-
-function update_title() {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::update_title()' );
-
- return Jetpack_Custom_CSS::update_title();
-}
-
-function safecss_prettify_post_revisions() {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::prettify_post_revisions()' );
-
- return Jetpack_Custom_CSS::prettify_post_revisions();
-}
-
-function safecss_remove_title_excerpt_from_revisions() {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::remove_title_excerpt_from_revisions()' );
-
- return Jetpack_Custom_CSS::remove_title_excerpt_from_revisions();
-}
-
-function safecss_post_title( $title, $post_id ) {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::post_title()' );
-
- return Jetpack_Custom_CSS::post_title( $title, $post_id );
-}
-
-function safe_css_enqueue_scripts() {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::enqueue_scripts()' );
-
- return Jetpack_Custom_CSS::enqueue_scripts( null );
-}
-
-function safecss_admin_head() {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::admin_head()' );
-
- return Jetpack_Custom_CSS::admin_head();
-}
-
-function safecss_saved() {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::saved_message()' );
-
- return Jetpack_Custom_CSS::saved_message();
-}
-
-function safecss_admin() {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::admin()' );
-
- return Jetpack_Custom_CSS::admin();
-}
-
-function custom_css_meta_box() {
- _deprecated_function( __FUNCTION__, '2.1', 'add_meta_box( $id, $title, $callback, \'editcss\', \'side\' )' );
-}
-
-function custom_css_post_revisions_meta_box( $safecss_post ) {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::revisions_meta_box()' );
-
- return Jetpack_Custom_CSS::revisions_meta_box( $safecss_post );
-}
-
-function disable_safecss_style() {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::disable()' );
-
- return Jetpack_Custom_CSS::disable();
-}
-
-function custom_css_reset() {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::reset()' );
-
- return Jetpack_Custom_CSS::reset();
-}
-
-function custom_css_is_customizer_preview() {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::is_customizer_preview()' );
-
- return Jetpack_Custom_CSS::is_customizer_preview();
-}
-
-function custom_css_minify( $css, $preprocessor = '' ) {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::minify()' );
-
- return Jetpack_Custom_CSS::minify( $css, $preprocessor );
-}
-
-function custom_css_restore_revision( $_post_id, $_revision_id ) {
- _deprecated_function( __FUNCTION__, '2.1', 'Jetpack_Custom_CSS::restore_revision()' );
-
- return Jetpack_Custom_CSS::restore_revision( $_post_id, $_revision_id );
-}
-
-if ( ! function_exists( 'safecss_class' ) ) :
-function safecss_class() {
- // Wrapped so we don't need the parent class just to load the plugin
- if ( class_exists('safecss') )
- return;
-
- require_once( dirname( __FILE__ ) . '/csstidy/class.csstidy.php' );
-
- class safecss extends csstidy_optimise {
-
- function postparse() {
-
- /**
- * Fires after parsing the css.
- *
- * @module custom-css
- *
- * @since 1.8.0
- *
- * @param obj $this CSSTidy object.
- */
- do_action( 'csstidy_optimize_postparse', $this );
-
- return parent::postparse();
- }
-
- function subvalue() {
-
- /**
- * Fires before optimizing the Custom CSS subvalue.
- *
- * @module custom-css
- *
- * @since 1.8.0
- *
- * @param obj $this CSSTidy object.
- **/
- do_action( 'csstidy_optimize_subvalue', $this );
-
- return parent::subvalue();
- }
- }
-}
-endif;
-
-if ( ! function_exists( 'safecss_filter_attr' ) ) {
- function safecss_filter_attr( $css, $element = 'div' ) {
- return Jetpack_Safe_CSS::filter_attr( $css, $element );
- }
-}
-
-include_once dirname( __FILE__ ) . '/custom-css/preprocessors.php';
diff --git a/plugins/jetpack/modules/custom-css/custom-css/css/blank.css b/plugins/jetpack/modules/custom-css/custom-css/css/blank.css
deleted file mode 100644
index c84ecefc..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/css/blank.css
+++ /dev/null
@@ -1 +0,0 @@
-/* */ \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-css/custom-css/css/codemirror-rtl.css b/plugins/jetpack/modules/custom-css/custom-css/css/codemirror-rtl.css
deleted file mode 100644
index 359717bf..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/css/codemirror-rtl.css
+++ /dev/null
@@ -1,262 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-/* NOAUTORTL */
-.rtl .CodeMirror {
- direction: rtl; /* code should always be written left to right */
-}
-/* BASICS */
-.CodeMirror {
- /* Set height, width, borders, and global font properties here */
- font-family: monospace;
- height: 400px;
-}
-.CodeMirror-scroll {
- /* Set scrolling behavior here */
- overflow: auto;
-}
-
-/* PADDING */
-
-.CodeMirror-lines {
- padding: 4px 0; /* Vertical padding around content */
-}
-.CodeMirror pre {
- padding: 0 4px; /* Horizontal padding of content */
-}
-
-.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
- background-color: white; /* The little square between H and V scrollbars */
-}
-
-/* GUTTER */
-
-.CodeMirror-gutters {
- border-left: 1px solid #ddd;
- background-color: #f7f7f7;
- white-space: nowrap;
-}
-.CodeMirror-linenumbers {}
-.CodeMirror-linenumber {
- padding: 0 5px 0 3px;
- min-width: 20px;
- text-align: left;
- color: #999;
-}
-
-/* CURSOR */
-
-.CodeMirror div.CodeMirror-cursor {
- border-right: 1px solid black;
- z-index: 3;
-}
-/* Shown when moving in bi-directional text */
-.CodeMirror div.CodeMirror-secondarycursor {
- border-right: 1px solid silver;
-}
-.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor {
- width: auto;
- border: 0;
- background: #7e7;
- z-index: 1;
-}
-/* Can style cursor different in overwrite (non-insert) mode */
-.CodeMirror div.CodeMirror-cursor.CodeMirror-overwrite {}
-
-.cm-tab { display: inline-block; }
-
-/* DEFAULT THEME */
-
-.cm-s-default .cm-keyword {color: #708;}
-.cm-s-default .cm-atom {color: #219;}
-.cm-s-default .cm-number {color: #164;}
-.cm-s-default .cm-def {color: #00f;}
-.cm-s-default .cm-variable {color: black;}
-.cm-s-default .cm-variable-2 {color: #05a;}
-.cm-s-default .cm-variable-3 {color: #085;}
-.cm-s-default .cm-property {color: black;}
-.cm-s-default .cm-operator {color: black;}
-.cm-s-default .cm-comment {color: #a50;}
-.cm-s-default .cm-string {color: #a11;}
-.cm-s-default .cm-string-2 {color: #f50;}
-.cm-s-default .cm-meta {color: #555;}
-.cm-s-default .cm-error {color: #f00;}
-.cm-s-default .cm-qualifier {color: #555;}
-.cm-s-default .cm-builtin {color: #30a;}
-.cm-s-default .cm-bracket {color: #997;}
-.cm-s-default .cm-tag {color: #170;}
-.cm-s-default .cm-attribute {color: #00c;}
-.cm-s-default .cm-header {color: blue;}
-.cm-s-default .cm-quote {color: #090;}
-.cm-s-default .cm-hr {color: #999;}
-.cm-s-default .cm-link {color: #00c;}
-
-.cm-negative {color: #d44;}
-.cm-positive {color: #292;}
-.cm-header, .cm-strong {font-weight: bold;}
-.cm-em {font-style: italic;}
-.cm-link {text-decoration: underline;}
-
-.cm-invalidchar {color: #f00;}
-
-div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
-div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
-.CodeMirror-activeline-background {background: #e8f2ff;}
-
-/* STOP */
-
-/* The rest of this file contains styles related to the mechanics of
- the editor. You probably shouldn't touch them. */
-
-.CodeMirror {
- line-height: 1;
- position: relative;
- overflow: hidden;
- background: white;
- color: black;
-}
-
-.CodeMirror-scroll {
- /* 30px is the magic margin used to hide the element's real scrollbars */
- /* See overflow: hidden in .CodeMirror */
- margin-bottom: -30px; margin-left: -30px;
- padding-bottom: 30px; padding-left: 30px;
- height: 100%;
- outline: none; /* Prevent dragging from highlighting the element */
- position: relative;
-}
-.CodeMirror-sizer {
- position: relative;
-}
-
-/* The fake, visible scrollbars. Used to force redraw during scrolling
- before actuall scrolling happens, thus preventing shaking and
- flickering artifacts. */
-.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
- position: absolute;
- z-index: 6;
- display: none;
-}
-.CodeMirror-vscrollbar {
- left: 0; top: 0;
- overflow-x: hidden;
- overflow-y: scroll;
-}
-.CodeMirror-hscrollbar {
- bottom: 0; right: 0;
- overflow-y: hidden;
- overflow-x: scroll;
-}
-.CodeMirror-scrollbar-filler {
- left: 0; bottom: 0;
-}
-.CodeMirror-gutter-filler {
- right: 0; bottom: 0;
-}
-
-.CodeMirror-gutters {
- position: absolute; right: 0; top: 0;
- padding-bottom: 30px;
- z-index: 3;
-}
-.CodeMirror-gutter {
- white-space: normal;
- height: 100%;
- padding-bottom: 30px;
- margin-bottom: -32px;
- display: inline-block;
- /* Hack to make IE7 behave */
- *zoom:1;
- *display:inline;
-}
-.CodeMirror-gutter-elt {
- position: absolute;
- cursor: default;
- z-index: 4;
-}
-
-.CodeMirror-lines {
- cursor: text;
-}
-.CodeMirror pre {
- /* Reset some styles that the rest of the page might have set */ border-radius: 0;
- border-width: 0;
- background: transparent;
- font-family: inherit;
- font-size: inherit;
- margin: 0;
- white-space: pre;
- word-wrap: normal;
- line-height: inherit;
- color: inherit;
- z-index: 2;
- position: relative;
- overflow: visible;
-}
-.CodeMirror-wrap pre {
- word-wrap: break-word;
- white-space: pre-wrap;
- word-break: normal;
-}
-.CodeMirror-code pre {
- border-left: 30px solid transparent;
- width: -webkit-fit-content;
- width: -moz-fit-content;
- width: fit-content;
-}
-.CodeMirror-wrap .CodeMirror-code pre {
- border-left: none;
- width: auto;
-}
-.CodeMirror-linebackground {
- position: absolute;
- right: 0; left: 0; top: 0; bottom: 0;
- z-index: 0;
-}
-
-.CodeMirror-linewidget {
- position: relative;
- z-index: 2;
- overflow: auto;
-}
-
-.CodeMirror-widget {
-}
-
-.CodeMirror-wrap .CodeMirror-scroll {
- overflow-x: hidden;
-}
-
-.CodeMirror-measure {
- position: absolute;
- width: 100%; height: 0px;
- overflow: hidden;
- visibility: hidden;
-}
-.CodeMirror-measure pre { position: static; }
-
-.CodeMirror div.CodeMirror-cursor {
- position: absolute;
- visibility: hidden;
- border-left: none;
- width: 0;
-}
-.CodeMirror-focused div.CodeMirror-cursor {
- visibility: visible;
-}
-
-.CodeMirror-selected { background: #d9d9d9; }
-.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
-
-.cm-searching {
- background: #ffa;
- background: rgba(255, 255, 0, .4);
-}
-
-/* IE7 hack to prevent it from returning funny offsetTops on the spans */
-.CodeMirror span { *vertical-align: text-bottom; }
-
-@media print {
- /* Hide the cursor when printing */
- .CodeMirror div.CodeMirror-cursor {
- visibility: hidden;
- }
-}
diff --git a/plugins/jetpack/modules/custom-css/custom-css/css/codemirror-rtl.min.css b/plugins/jetpack/modules/custom-css/custom-css/css/codemirror-rtl.min.css
deleted file mode 100644
index bb4ede28..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/css/codemirror-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.rtl .CodeMirror{direction:rtl}.CodeMirror{font-family:monospace;height:400px}.CodeMirror-scroll{overflow:auto}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-left:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 5px 0 3px;min-width:20px;text-align:left;color:#999}.CodeMirror div.CodeMirror-cursor{border-right:1px solid #000;z-index:3}.CodeMirror div.CodeMirror-secondarycursor{border-right:1px solid silver}.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor{width:auto;border:0;background:#7e7;z-index:1}.cm-tab{display:inline-block}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable{color:#000}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-property{color:#000}.cm-s-default .cm-operator{color:#000}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-error{color:red}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-invalidchar{color:red}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{line-height:1;position:relative;overflow:hidden;background:#fff;color:#000}.CodeMirror-scroll{margin-bottom:-30px;margin-left:-30px;padding-bottom:30px;padding-left:30px;height:100%;outline:0;position:relative}.CodeMirror-sizer{position:relative}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{left:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;right:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{left:0;bottom:0}.CodeMirror-gutter-filler{right:0;bottom:0}.CodeMirror-gutters{position:absolute;right:0;top:0;padding-bottom:30px;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;padding-bottom:30px;margin-bottom:-32px;display:inline-block}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-lines{cursor:text}.CodeMirror pre{border-radius:0;border-width:0;background:0 0;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-code pre{border-left:30px solid transparent;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.CodeMirror-wrap .CodeMirror-code pre{border-left:none;width:auto}.CodeMirror-linebackground{position:absolute;right:0;left:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-wrap .CodeMirror-scroll{overflow-x:hidden}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-measure pre{position:static}.CodeMirror div.CodeMirror-cursor{position:absolute;visibility:hidden;border-left:none;width:0}.CodeMirror-focused div.CodeMirror-cursor{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.cm-searching{background:#ffa;background:rgba(255,255,0,.4)}@media print{.CodeMirror div.CodeMirror-cursor{visibility:hidden}} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-css/custom-css/css/codemirror.css b/plugins/jetpack/modules/custom-css/custom-css/css/codemirror.css
deleted file mode 100644
index db90a5a5..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/css/codemirror.css
+++ /dev/null
@@ -1,262 +0,0 @@
-/* NOAUTORTL */
-.rtl .CodeMirror {
- direction: ltr; /* code should always be written left to right */
-}
-/* BASICS */
-.CodeMirror {
- /* Set height, width, borders, and global font properties here */
- font-family: monospace;
- height: 400px;
-}
-.CodeMirror-scroll {
- /* Set scrolling behavior here */
- overflow: auto;
-}
-
-/* PADDING */
-
-.CodeMirror-lines {
- padding: 4px 0; /* Vertical padding around content */
-}
-.CodeMirror pre {
- padding: 0 4px; /* Horizontal padding of content */
-}
-
-.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
- background-color: white; /* The little square between H and V scrollbars */
-}
-
-/* GUTTER */
-
-.CodeMirror-gutters {
- border-right: 1px solid #ddd;
- background-color: #f7f7f7;
- white-space: nowrap;
-}
-.CodeMirror-linenumbers {}
-.CodeMirror-linenumber {
- padding: 0 3px 0 5px;
- min-width: 20px;
- text-align: right;
- color: #999;
-}
-
-/* CURSOR */
-
-.CodeMirror div.CodeMirror-cursor {
- border-left: 1px solid black;
- z-index: 3;
-}
-/* Shown when moving in bi-directional text */
-.CodeMirror div.CodeMirror-secondarycursor {
- border-left: 1px solid silver;
-}
-.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor {
- width: auto;
- border: 0;
- background: #7e7;
- z-index: 1;
-}
-/* Can style cursor different in overwrite (non-insert) mode */
-.CodeMirror div.CodeMirror-cursor.CodeMirror-overwrite {}
-
-.cm-tab { display: inline-block; }
-
-/* DEFAULT THEME */
-
-.cm-s-default .cm-keyword {color: #708;}
-.cm-s-default .cm-atom {color: #219;}
-.cm-s-default .cm-number {color: #164;}
-.cm-s-default .cm-def {color: #00f;}
-.cm-s-default .cm-variable {color: black;}
-.cm-s-default .cm-variable-2 {color: #05a;}
-.cm-s-default .cm-variable-3 {color: #085;}
-.cm-s-default .cm-property {color: black;}
-.cm-s-default .cm-operator {color: black;}
-.cm-s-default .cm-comment {color: #a50;}
-.cm-s-default .cm-string {color: #a11;}
-.cm-s-default .cm-string-2 {color: #f50;}
-.cm-s-default .cm-meta {color: #555;}
-.cm-s-default .cm-error {color: #f00;}
-.cm-s-default .cm-qualifier {color: #555;}
-.cm-s-default .cm-builtin {color: #30a;}
-.cm-s-default .cm-bracket {color: #997;}
-.cm-s-default .cm-tag {color: #170;}
-.cm-s-default .cm-attribute {color: #00c;}
-.cm-s-default .cm-header {color: blue;}
-.cm-s-default .cm-quote {color: #090;}
-.cm-s-default .cm-hr {color: #999;}
-.cm-s-default .cm-link {color: #00c;}
-
-.cm-negative {color: #d44;}
-.cm-positive {color: #292;}
-.cm-header, .cm-strong {font-weight: bold;}
-.cm-em {font-style: italic;}
-.cm-link {text-decoration: underline;}
-
-.cm-invalidchar {color: #f00;}
-
-div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
-div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
-.CodeMirror-activeline-background {background: #e8f2ff;}
-
-/* STOP */
-
-/* The rest of this file contains styles related to the mechanics of
- the editor. You probably shouldn't touch them. */
-
-.CodeMirror {
- line-height: 1;
- position: relative;
- overflow: hidden;
- background: white;
- color: black;
-}
-
-.CodeMirror-scroll {
- /* 30px is the magic margin used to hide the element's real scrollbars */
- /* See overflow: hidden in .CodeMirror */
- margin-bottom: -30px; margin-right: -30px;
- padding-bottom: 30px; padding-right: 30px;
- height: 100%;
- outline: none; /* Prevent dragging from highlighting the element */
- position: relative;
-}
-.CodeMirror-sizer {
- position: relative;
-}
-
-/* The fake, visible scrollbars. Used to force redraw during scrolling
- before actuall scrolling happens, thus preventing shaking and
- flickering artifacts. */
-.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
- position: absolute;
- z-index: 6;
- display: none;
-}
-.CodeMirror-vscrollbar {
- right: 0; top: 0;
- overflow-x: hidden;
- overflow-y: scroll;
-}
-.CodeMirror-hscrollbar {
- bottom: 0; left: 0;
- overflow-y: hidden;
- overflow-x: scroll;
-}
-.CodeMirror-scrollbar-filler {
- right: 0; bottom: 0;
-}
-.CodeMirror-gutter-filler {
- left: 0; bottom: 0;
-}
-
-.CodeMirror-gutters {
- position: absolute; left: 0; top: 0;
- padding-bottom: 30px;
- z-index: 3;
-}
-.CodeMirror-gutter {
- white-space: normal;
- height: 100%;
- padding-bottom: 30px;
- margin-bottom: -32px;
- display: inline-block;
- /* Hack to make IE7 behave */
- *zoom:1;
- *display:inline;
-}
-.CodeMirror-gutter-elt {
- position: absolute;
- cursor: default;
- z-index: 4;
-}
-
-.CodeMirror-lines {
- cursor: text;
-}
-.CodeMirror pre {
- /* Reset some styles that the rest of the page might have set */
- -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
- border-width: 0;
- background: transparent;
- font-family: inherit;
- font-size: inherit;
- margin: 0;
- white-space: pre;
- word-wrap: normal;
- line-height: inherit;
- color: inherit;
- z-index: 2;
- position: relative;
- overflow: visible;
-}
-.CodeMirror-wrap pre {
- word-wrap: break-word;
- white-space: pre-wrap;
- word-break: normal;
-}
-.CodeMirror-code pre {
- border-right: 30px solid transparent;
- width: -webkit-fit-content;
- width: -moz-fit-content;
- width: fit-content;
-}
-.CodeMirror-wrap .CodeMirror-code pre {
- border-right: none;
- width: auto;
-}
-.CodeMirror-linebackground {
- position: absolute;
- left: 0; right: 0; top: 0; bottom: 0;
- z-index: 0;
-}
-
-.CodeMirror-linewidget {
- position: relative;
- z-index: 2;
- overflow: auto;
-}
-
-.CodeMirror-widget {
-}
-
-.CodeMirror-wrap .CodeMirror-scroll {
- overflow-x: hidden;
-}
-
-.CodeMirror-measure {
- position: absolute;
- width: 100%; height: 0px;
- overflow: hidden;
- visibility: hidden;
-}
-.CodeMirror-measure pre { position: static; }
-
-.CodeMirror div.CodeMirror-cursor {
- position: absolute;
- visibility: hidden;
- border-right: none;
- width: 0;
-}
-.CodeMirror-focused div.CodeMirror-cursor {
- visibility: visible;
-}
-
-.CodeMirror-selected { background: #d9d9d9; }
-.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
-
-.cm-searching {
- background: #ffa;
- background: rgba(255, 255, 0, .4);
-}
-
-/* IE7 hack to prevent it from returning funny offsetTops on the spans */
-.CodeMirror span { *vertical-align: text-bottom; }
-
-@media print {
- /* Hide the cursor when printing */
- .CodeMirror div.CodeMirror-cursor {
- visibility: hidden;
- }
-}
diff --git a/plugins/jetpack/modules/custom-css/custom-css/css/codemirror.min.css b/plugins/jetpack/modules/custom-css/custom-css/css/codemirror.min.css
deleted file mode 100644
index 92af420a..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/css/codemirror.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-.rtl .CodeMirror{direction:ltr}.CodeMirror{font-family:monospace;height:400px}.CodeMirror-scroll{overflow:auto}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999}.CodeMirror div.CodeMirror-cursor{border-left:1px solid #000;z-index:3}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor{width:auto;border:0;background:#7e7;z-index:1}.cm-tab{display:inline-block}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable{color:#000}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-property{color:#000}.cm-s-default .cm-operator{color:#000}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-error{color:red}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-invalidchar{color:red}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{line-height:1;position:relative;overflow:hidden;background:#fff;color:#000}.CodeMirror-scroll{margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;padding-right:30px;height:100%;outline:0;position:relative}.CodeMirror-sizer{position:relative}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;padding-bottom:30px;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;padding-bottom:30px;margin-bottom:-32px;display:inline-block}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-lines{cursor:text}.CodeMirror pre{border-radius:0;border-width:0;background:0 0;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-code pre{border-right:30px solid transparent;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.CodeMirror-wrap .CodeMirror-code pre{border-right:none;width:auto}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-wrap .CodeMirror-scroll{overflow-x:hidden}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-measure pre{position:static}.CodeMirror div.CodeMirror-cursor{position:absolute;visibility:hidden;border-right:none;width:0}.CodeMirror-focused div.CodeMirror-cursor{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.cm-searching{background:#ffa;background:rgba(255,255,0,.4)}@media print{.CodeMirror div.CodeMirror-cursor{visibility:hidden}} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-css/custom-css/css/css-editor-rtl.css b/plugins/jetpack/modules/custom-css/custom-css/css/css-editor-rtl.css
deleted file mode 100644
index a8202fb2..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/css/css-editor-rtl.css
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-#revision-field-post_title, #revision-field-post_excerpt {
- display: none;
-}
-
-#safecssform {
- position: relative;
-}
-
-#poststuff {
- padding-top: 0;
-}
-
-#safecss {
- min-height: 250px;
- width: 100%;
-}
-
-.misc-pub-section > span {
- font-weight: bold;
-}
-
-.misc-pub-section > div {
- margin-top: 3px;
-}
-#safecss-ace .ace_gutter {
- z-index: 1;
-}
-
-#post-body-content{
- margin-bottom: 20px;
-}
-
diff --git a/plugins/jetpack/modules/custom-css/custom-css/css/css-editor-rtl.min.css b/plugins/jetpack/modules/custom-css/custom-css/css/css-editor-rtl.min.css
deleted file mode 100644
index 62eb4809..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/css/css-editor-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-#revision-field-post_excerpt,#revision-field-post_title{display:none}#safecssform{position:relative}#poststuff{padding-top:0}#safecss{min-height:250px;width:100%}.misc-pub-section>span{font-weight:700}.misc-pub-section>div{margin-top:3px}#safecss-ace .ace_gutter{z-index:1}#post-body-content{margin-bottom:20px} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-css/custom-css/css/css-editor.css b/plugins/jetpack/modules/custom-css/custom-css/css/css-editor.css
deleted file mode 100644
index f85bec14..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/css/css-editor.css
+++ /dev/null
@@ -1,32 +0,0 @@
-#revision-field-post_title, #revision-field-post_excerpt {
- display: none;
-}
-
-#safecssform {
- position: relative;
-}
-
-#poststuff {
- padding-top: 0;
-}
-
-#safecss {
- min-height: 250px;
- width: 100%;
-}
-
-.misc-pub-section > span {
- font-weight: bold;
-}
-
-.misc-pub-section > div {
- margin-top: 3px;
-}
-#safecss-ace .ace_gutter {
- z-index: 1;
-}
-
-#post-body-content{
- margin-bottom: 20px;
-}
-
diff --git a/plugins/jetpack/modules/custom-css/custom-css/css/css-editor.min.css b/plugins/jetpack/modules/custom-css/custom-css/css/css-editor.min.css
deleted file mode 100644
index 6245c019..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/css/css-editor.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-#revision-field-post_excerpt,#revision-field-post_title{display:none}#safecssform{position:relative}#poststuff{padding-top:0}#safecss{min-height:250px;width:100%}.misc-pub-section>span{font-weight:700}.misc-pub-section>div{margin-top:3px}#safecss-ace .ace_gutter{z-index:1}#post-body-content{margin-bottom:20px} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-css/custom-css/css/customizer-control.css b/plugins/jetpack/modules/custom-css/custom-css/css/customizer-control.css
deleted file mode 100644
index e7927ff2..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/css/customizer-control.css
+++ /dev/null
@@ -1,150 +0,0 @@
-/* NOAUTORTL */
-.for-codemirror, .CodeMirror {
- font-family: Consolas, Monaco, monospace;
- font-size: 12px;
- line-height: 16px;
- margin: 0;
- direction: ltr;
- text-align: left;
- border-top: 1px solid #ddd;
- border-bottom: 1px solid #ddd;
-}
-#customize-control-custom_css#customize-control-custom_css {
- margin-right: -12px;
- margin-left: -12px;
- width: calc( 100% + 24px );
-}
-.customize-control-code_editor .CodeMirror {
- height: 300px;
- height: calc( 100vh - 268px );
-}
-.for-codemirror {
- width: 98%;
- height: 300px;
-}
-#customize-control-wpcom_custom_css_content_width_control {
- position: relative;
-}
-#customize-control-wpcom_custom_css_content_width_control > label {
- position: relative;
- width: 100px;
-}
-#customize-control-wpcom_custom_css_content_width_control .customize-control-title {
- padding-bottom: 6px;
-}
-#customize-controls #customize-control-wpcom_custom_css_content_width_control input[type="text"], /* stronger selector to override new-customizer.css */
-#customize-control-wpcom_custom_css_content_width_control input[type="text"] {
- width: 64px;
- padding-right: 22px;
- text-align: right;
-}
-#customize-control-wpcom_custom_css_content_width_control input[type="text"] + span {
- position: absolute;
- left: 43px;
- padding-top: 3px;
- opacity: .8;
-}
-@-moz-document url-prefix() {
- #customize-control-wpcom_custom_css_content_width_control input[type="text"] + span {
- top: 47px;
- }
-}
-#customize-control-wpcom_custom_css_content_width_control input[type="text"]:focus + span {
- opacity: 1;
-}
-
-#customize-control-wpcom_custom_css_content_width_control .description {
- display: block;
- margin: 28px 0 0 0;
- color: #aaa;
-}
-
-#customize-control-wpcom_custom_css_content_width_control .description strong {
- font-style: normal;
-}
-
-#customize-control-jetpack_custom_css_control {
- position: relative;
-}
-
-.css-help {
- border-bottom: 1px solid #ddd;
- background: #ffffff;
- position: relative;
- right: 0;
- left: 0;
- width: 100%;
- padding: 0;
- overflow: hidden;
-}
-
-.css-help a {
- float: none;
- display: inline-block;
- text-decoration: none;
- border-bottom: 4px solid transparent;
- color: #555d66;
- padding: 7px 10px 5px;
- transition: .15s color ease-in-out,.15s background-color ease-in-out,.15s border-color ease-in-out;
-}
-
-.css-help a:hover {
- color: #0073aa;
- background-color: #f3f3f5;
-}
-
-.css-help a:before {
- display: inline-block;
- position: relative;
- font-family: dashicons;
- font-size: 20px;
- padding-right: 3px;
- top: 5px;
- line-height: 1px;
-}
-
-.css-help a:focus {
- color: #0073aa;
- background-color: #f3f3f5;
- border-bottom-color: #0073aa;
- box-shadow: none;
-}
-
-.css-help a#revisions-link:before {
- content: "\f321";
-}
-
-.css-help a#help-link:before {
- content: "\f223";
-}
-
-#sub-accordion-section-custom_css .customize-control {
- margin: 12px 0;
-}
-
-#sub-accordion-section-custom_css .customize-control-jetpackCss {
- margin: 0 -12px;
- width: calc( 100% + 24px );
-}
-
-#customize-theme-controls #sub-accordion-section-custom_css .customize-control-title {
- margin-left: 0;
- margin-right: 0;
-}
-
-#sub-accordion-section-custom_css #customize-control-jetpack_css_preprocessors_control select {
- max-width: 75%;
-}
-
-body.editing-css .wp-full-overlay-sidebar {
- width: 500px;
-}
-
-body.editing-css .wp-full-overlay.expanded {
- margin-left: 500px;
-}
-
-input[type=jetpackCss] {
- display: none;
-}
-
diff --git a/plugins/jetpack/modules/custom-css/custom-css/css/rtl/codemirror-rtl.css b/plugins/jetpack/modules/custom-css/custom-css/css/rtl/codemirror-rtl.css
deleted file mode 100644
index 74ad41fb..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/css/rtl/codemirror-rtl.css
+++ /dev/null
@@ -1,260 +0,0 @@
-/* This file was automatically generated on Sep 10 2013 23:18:59 */
-
-/* BASICS */
-.CodeMirror {
- /* Set height, width, borders, and global font properties here */
- font-family: monospace;
- height: 300px;
-}
-.CodeMirror-scroll {
- /* Set scrolling behavior here */
- overflow: auto;
-}
-
-/* PADDING */
-
-.CodeMirror-lines {
- padding: 4px 0; /* Vertical padding around content */
-}
-.CodeMirror pre {
- padding: 0 4px; /* Horizontal padding of content */
-}
-
-.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
- background-color: white; /* The little square between H and V scrollbars */
-}
-
-/* GUTTER */
-
-.CodeMirror-gutters {
- border-left: 1px solid #ddd;
- background-color: #f7f7f7;
- white-space: nowrap;
-}
-.CodeMirror-linenumbers {}
-.CodeMirror-linenumber {
- padding: 0 5px 0 3px;
- min-width: 20px;
- text-align: left;
- color: #999;
-}
-
-/* CURSOR */
-
-.CodeMirror div.CodeMirror-cursor {
- border-right: 1px solid black;
- z-index: 3;
-}
-/* Shown when moving in bi-directional text */
-.CodeMirror div.CodeMirror-secondarycursor {
- border-right: 1px solid silver;
-}
-.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor {
- width: auto;
- border: 0;
- background: #7e7;
- z-index: 1;
-}
-/* Can style cursor different in overwrite (non-insert) mode */
-.CodeMirror div.CodeMirror-cursor.CodeMirror-overwrite {}
-
-.cm-tab { display: inline-block; }
-
-/* DEFAULT THEME */
-
-.cm-s-default .cm-keyword {color: #708;}
-.cm-s-default .cm-atom {color: #219;}
-.cm-s-default .cm-number {color: #164;}
-.cm-s-default .cm-def {color: #00f;}
-.cm-s-default .cm-variable {color: black;}
-.cm-s-default .cm-variable-2 {color: #05a;}
-.cm-s-default .cm-variable-3 {color: #085;}
-.cm-s-default .cm-property {color: black;}
-.cm-s-default .cm-operator {color: black;}
-.cm-s-default .cm-comment {color: #a50;}
-.cm-s-default .cm-string {color: #a11;}
-.cm-s-default .cm-string-2 {color: #f50;}
-.cm-s-default .cm-meta {color: #555;}
-.cm-s-default .cm-error {color: #f00;}
-.cm-s-default .cm-qualifier {color: #555;}
-.cm-s-default .cm-builtin {color: #30a;}
-.cm-s-default .cm-bracket {color: #997;}
-.cm-s-default .cm-tag {color: #170;}
-.cm-s-default .cm-attribute {color: #00c;}
-.cm-s-default .cm-header {color: blue;}
-.cm-s-default .cm-quote {color: #090;}
-.cm-s-default .cm-hr {color: #999;}
-.cm-s-default .cm-link {color: #00c;}
-
-.cm-negative {color: #d44;}
-.cm-positive {color: #292;}
-.cm-header, .cm-strong {font-weight: bold;}
-.cm-em {font-style: italic;}
-.cm-link {text-decoration: underline;}
-
-.cm-invalidchar {color: #f00;}
-
-div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
-div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
-.CodeMirror-activeline-background {background: #e8f2ff;}
-
-/* STOP */
-
-/* The rest of this file contains styles related to the mechanics of
- the editor. You probably shouldn't touch them. */
-
-.CodeMirror {
- line-height: 1;
- position: relative;
- overflow: hidden;
- background: white;
- color: black;
-}
-
-.CodeMirror-scroll {
- /* 30px is the magic margin used to hide the element's real scrollbars */
- /* See overflow: hidden in .CodeMirror */
- margin-bottom: -30px; margin-left: -30px;
- padding-bottom: 30px; padding-left: 30px;
- height: 100%;
- outline: none; /* Prevent dragging from highlighting the element */
- position: relative;
-}
-.CodeMirror-sizer {
- position: relative;
-}
-
-/* The fake, visible scrollbars. Used to force redraw during scrolling
- before actuall scrolling happens, thus preventing shaking and
- flickering artifacts. */
-.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
- position: absolute;
- z-index: 6;
- display: none;
-}
-.CodeMirror-vscrollbar {
- left: 0; top: 0;
- overflow-x: hidden;
- overflow-y: scroll;
-}
-.CodeMirror-hscrollbar {
- bottom: 0; right: 0;
- overflow-y: hidden;
- overflow-x: scroll;
-}
-.CodeMirror-scrollbar-filler {
- left: 0; bottom: 0;
-}
-.CodeMirror-gutter-filler {
- right: 0; bottom: 0;
-}
-
-.CodeMirror-gutters {
- position: absolute; right: 0; top: 0;
- padding-bottom: 30px;
- z-index: 3;
-}
-.CodeMirror-gutter {
- white-space: normal;
- height: 100%;
- padding-bottom: 30px;
- margin-bottom: -32px;
- display: inline-block;
- /* Hack to make IE7 behave */
- *zoom:1;
- *display:inline;
-}
-.CodeMirror-gutter-elt {
- position: absolute;
- cursor: default;
- z-index: 4;
-}
-
-.CodeMirror-lines {
- cursor: text;
-}
-.CodeMirror pre {
- /* Reset some styles that the rest of the page might have set */
- -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
- border-width: 0;
- background: transparent;
- font-family: inherit;
- font-size: inherit;
- margin: 0;
- white-space: pre;
- word-wrap: normal;
- line-height: inherit;
- color: inherit;
- z-index: 2;
- position: relative;
- overflow: visible;
-}
-.CodeMirror-wrap pre {
- word-wrap: break-word;
- white-space: pre-wrap;
- word-break: normal;
-}
-.CodeMirror-code pre {
- border-left: 30px solid transparent;
- width: -webkit-fit-content;
- width: -moz-fit-content;
- width: fit-content;
-}
-.CodeMirror-wrap .CodeMirror-code pre {
- border-left: none;
- width: auto;
-}
-.CodeMirror-linebackground {
- position: absolute;
- right: 0; left: 0; top: 0; bottom: 0;
- z-index: 0;
-}
-
-.CodeMirror-linewidget {
- position: relative;
- z-index: 2;
- overflow: auto;
-}
-
-.CodeMirror-widget {
-}
-
-.CodeMirror-wrap .CodeMirror-scroll {
- overflow-x: hidden;
-}
-
-.CodeMirror-measure {
- position: absolute;
- width: 100%; height: 0px;
- overflow: hidden;
- visibility: hidden;
-}
-.CodeMirror-measure pre { position: static; }
-
-.CodeMirror div.CodeMirror-cursor {
- position: absolute;
- visibility: hidden;
- border-left: none;
- width: 0;
-}
-.CodeMirror-focused div.CodeMirror-cursor {
- visibility: visible;
-}
-
-.CodeMirror-selected { background: #d9d9d9; }
-.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
-
-.cm-searching {
- background: #ffa;
- background: rgba(255, 255, 0, .4);
-}
-
-/* IE7 hack to prevent it from returning funny offsetTops on the spans */
-.CodeMirror span { *vertical-align: text-bottom; }
-
-@media print {
- /* Hide the cursor when printing */
- .CodeMirror div.CodeMirror-cursor {
- visibility: hidden;
- }
-}
diff --git a/plugins/jetpack/modules/custom-css/custom-css/css/use-codemirror-rtl.css b/plugins/jetpack/modules/custom-css/custom-css/css/use-codemirror-rtl.css
deleted file mode 100644
index 649fb168..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/css/use-codemirror-rtl.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-.CodeMirror, #safecss {
- font-family: Consolas, Monaco, monospace;
- font-size: 12px;
- line-height: 16px;
- min-height: 300px;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-css/custom-css/css/use-codemirror-rtl.min.css b/plugins/jetpack/modules/custom-css/custom-css/css/use-codemirror-rtl.min.css
deleted file mode 100644
index 8dce7dda..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/css/use-codemirror-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-#safecss,.CodeMirror{font-family:Consolas,Monaco,monospace;font-size:12px;line-height:16px;min-height:300px} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-css/custom-css/css/use-codemirror.css b/plugins/jetpack/modules/custom-css/custom-css/css/use-codemirror.css
deleted file mode 100644
index 924bb4d0..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/css/use-codemirror.css
+++ /dev/null
@@ -1,6 +0,0 @@
-.CodeMirror, #safecss {
- font-family: Consolas, Monaco, monospace;
- font-size: 12px;
- line-height: 16px;
- min-height: 300px;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-css/custom-css/css/use-codemirror.min.css b/plugins/jetpack/modules/custom-css/custom-css/css/use-codemirror.min.css
deleted file mode 100644
index 024ae478..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/css/use-codemirror.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-#safecss,.CodeMirror{font-family:Consolas,Monaco,monospace;font-size:12px;line-height:16px;min-height:300px} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-css/custom-css/js/codemirror.min.js b/plugins/jetpack/modules/custom-css/custom-css/js/codemirror.min.js
deleted file mode 100644
index efc8a0fb..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/js/codemirror.min.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * http://codemirror.net/
- * MIT License
- * Includes CSS & LESS modes.
- * v3.19.1
- */
-window.CodeMirror=function(){"use strict";function x(a,c){if(!(this instanceof x))return new x(a,c);this.options=c=c||{};for(var d in _c)!c.hasOwnProperty(d)&&_c.hasOwnProperty(d)&&(c[d]=_c[d]);J(c);var e="string"==typeof c.value?0:c.value.first,f=this.display=y(a,e);f.wrapper.CodeMirror=this,G(this),c.autofocus&&!p&&Nb(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,draggingText:!1,highlight:new Xe},E(this),c.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap");var g=c.value;"string"==typeof g&&(g=new ge(c.value,c.mode)),Fb(this,ke)(this,g),b&&setTimeout(ff(Mb,this,!0),20),Pb(this);var h;try{h=document.activeElement==f.input}catch(i){}h||c.autofocus&&!p?setTimeout(ff(mc,this),20):nc(this),Fb(this,function(){for(var a in $c)$c.propertyIsEnumerable(a)&&$c[a](this,c[a],bd);for(var b=0;b<fd.length;++b)fd[b](this)})()}function y(a,b){var d={},e=d.input=lf("textarea",null,null,"position: absolute; padding: 0; width: 1px; height: 1em; outline: none; font-size: 4px;");return f?e.style.width="1000px":e.setAttribute("wrap","off"),o&&(e.style.border="1px solid black"),e.setAttribute("autocorrect","off"),e.setAttribute("autocapitalize","off"),e.setAttribute("spellcheck","false"),d.inputDiv=lf("div",[e],null,"overflow: hidden; position: relative; width: 3px; height: 0px;"),d.scrollbarH=lf("div",[lf("div",null,null,"height: 1px")],"CodeMirror-hscrollbar"),d.scrollbarV=lf("div",[lf("div",null,null,"width: 1px")],"CodeMirror-vscrollbar"),d.scrollbarFiller=lf("div",null,"CodeMirror-scrollbar-filler"),d.gutterFiller=lf("div",null,"CodeMirror-gutter-filler"),d.lineDiv=lf("div",null,"CodeMirror-code"),d.selectionDiv=lf("div",null,null,"position: relative; z-index: 1"),d.cursor=lf("div","\xa0","CodeMirror-cursor"),d.otherCursor=lf("div","\xa0","CodeMirror-cursor CodeMirror-secondarycursor"),d.measure=lf("div",null,"CodeMirror-measure"),d.lineSpace=lf("div",[d.measure,d.selectionDiv,d.lineDiv,d.cursor,d.otherCursor],null,"position: relative; outline: none"),d.mover=lf("div",[lf("div",[d.lineSpace],"CodeMirror-lines")],null,"position: relative"),d.sizer=lf("div",[d.mover],"CodeMirror-sizer"),d.heightForcer=lf("div",null,null,"position: absolute; height: "+Ve+"px; width: 1px;"),d.gutters=lf("div",null,"CodeMirror-gutters"),d.lineGutter=null,d.scroller=lf("div",[d.sizer,d.heightForcer,d.gutters],"CodeMirror-scroll"),d.scroller.setAttribute("tabIndex","-1"),d.wrapper=lf("div",[d.inputDiv,d.scrollbarH,d.scrollbarV,d.scrollbarFiller,d.gutterFiller,d.scroller],"CodeMirror"),c&&(d.gutters.style.zIndex=-1,d.scroller.style.paddingRight=0),a.appendChild?a.appendChild(d.wrapper):a(d.wrapper),o&&(e.style.width="0px"),f||(d.scroller.draggable=!0),k?(d.inputDiv.style.height="1px",d.inputDiv.style.position="absolute"):c&&(d.scrollbarH.style.minWidth=d.scrollbarV.style.minWidth="18px"),d.viewOffset=d.lastSizeC=0,d.showingFrom=d.showingTo=b,d.lineNumWidth=d.lineNumInnerWidth=d.lineNumChars=null,d.prevInput="",d.alignWidgets=!1,d.pollingFast=!1,d.poll=new Xe,d.cachedCharWidth=d.cachedTextHeight=null,d.measureLineCache=[],d.measureLineCachePos=0,d.inaccurateSelection=!1,d.maxLine=null,d.maxLineLength=0,d.maxLineChanged=!1,d.wheelDX=d.wheelDY=d.wheelStartX=d.wheelStartY=null,d}function z(a){a.doc.mode=x.getMode(a.options,a.doc.modeOption),a.doc.iter(function(a){a.stateAfter&&(a.stateAfter=null),a.styles&&(a.styles=null)}),a.doc.frontier=a.doc.first,bb(a,100),a.state.modeGen++,a.curOp&&Ib(a)}function A(a){a.options.lineWrapping?(a.display.wrapper.className+=" CodeMirror-wrap",a.display.sizer.style.minWidth=""):(a.display.wrapper.className=a.display.wrapper.className.replace(" CodeMirror-wrap",""),I(a)),C(a),Ib(a),pb(a),setTimeout(function(){K(a)},100)}function B(a){var b=Ab(a.display),c=a.options.lineWrapping,d=c&&Math.max(5,a.display.scroller.clientWidth/Bb(a.display)-3);return function(e){return Gd(a.doc,e)?0:c?(Math.ceil(e.text.length/d)||1)*b:b}}function C(a){var b=a.doc,c=B(a);b.iter(function(a){var b=c(a);b!=a.height&&oe(a,b)})}function D(a){var b=kd[a.options.keyMap],c=b.style;a.display.wrapper.className=a.display.wrapper.className.replace(/\s*cm-keymap-\S+/g,"")+(c?" cm-keymap-"+c:""),a.state.disableInput=b.disableInput}function E(a){a.display.wrapper.className=a.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+a.options.theme.replace(/(^|\s)\s*/g," cm-s-"),pb(a)}function F(a){G(a),Ib(a),setTimeout(function(){M(a)},20)}function G(a){var b=a.display.gutters,c=a.options.gutters;mf(b);for(var d=0;d<c.length;++d){var e=c[d],f=b.appendChild(lf("div",null,"CodeMirror-gutter "+e));"CodeMirror-linenumbers"==e&&(a.display.lineGutter=f,f.style.width=(a.display.lineNumWidth||1)+"px")}b.style.display=d?"":"none"}function H(a,b){if(0==b.height)return 0;for(var d,c=b.text.length,e=b;d=Dd(e);){var f=d.find();e=le(a,f.from.line),c+=f.from.ch-f.to.ch}for(e=b;d=Ed(e);){var f=d.find();c-=e.text.length-f.from.ch,e=le(a,f.to.line),c+=e.text.length-f.to.ch}return c}function I(a){var b=a.display,c=a.doc;b.maxLine=le(c,c.first),b.maxLineLength=H(c,b.maxLine),b.maxLineChanged=!0,c.iter(function(a){var d=H(c,a);d>b.maxLineLength&&(b.maxLineLength=d,b.maxLine=a)})}function J(a){var b=bf(a.gutters,"CodeMirror-linenumbers");-1==b&&a.lineNumbers?a.gutters=a.gutters.concat(["CodeMirror-linenumbers"]):b>-1&&!a.lineNumbers&&(a.gutters=a.gutters.slice(0),a.gutters.splice(b,1))}function K(a){var b=a.display,c=a.doc.height,d=c+gb(b);b.sizer.style.minHeight=b.heightForcer.style.top=d+"px",b.gutters.style.height=Math.max(d,b.scroller.clientHeight-Ve)+"px";var e=Math.max(d,b.scroller.scrollHeight),f=b.scroller.scrollWidth>b.scroller.clientWidth+1,g=e>b.scroller.clientHeight+1;g?(b.scrollbarV.style.display="block",b.scrollbarV.style.bottom=f?tf(b.measure)+"px":"0",b.scrollbarV.firstChild.style.height=e-b.scroller.clientHeight+b.scrollbarV.clientHeight+"px"):(b.scrollbarV.style.display="",b.scrollbarV.firstChild.style.height="0"),f?(b.scrollbarH.style.display="block",b.scrollbarH.style.right=g?tf(b.measure)+"px":"0",b.scrollbarH.firstChild.style.width=b.scroller.scrollWidth-b.scroller.clientWidth+b.scrollbarH.clientWidth+"px"):(b.scrollbarH.style.display="",b.scrollbarH.firstChild.style.width="0"),f&&g?(b.scrollbarFiller.style.display="block",b.scrollbarFiller.style.height=b.scrollbarFiller.style.width=tf(b.measure)+"px"):b.scrollbarFiller.style.display="",f&&a.options.coverGutterNextToScrollbar&&a.options.fixedGutter?(b.gutterFiller.style.display="block",b.gutterFiller.style.height=tf(b.measure)+"px",b.gutterFiller.style.width=b.gutters.offsetWidth+"px"):b.gutterFiller.style.display="",l&&0===tf(b.measure)&&(b.scrollbarV.style.minWidth=b.scrollbarH.style.minHeight=m?"18px":"12px",b.scrollbarV.style.pointerEvents=b.scrollbarH.style.pointerEvents="none")}function L(a,b,c){var d=a.scroller.scrollTop,e=a.wrapper.clientHeight;"number"==typeof c?d=c:c&&(d=c.top,e=c.bottom-c.top),d=Math.floor(d-fb(a));var f=Math.ceil(d+e);return{from:qe(b,d),to:qe(b,f)}}function M(a){var b=a.display;if(b.alignWidgets||b.gutters.firstChild&&a.options.fixedGutter){for(var c=P(b)-b.scroller.scrollLeft+a.doc.scrollLeft,d=b.gutters.offsetWidth,e=c+"px",f=b.lineDiv.firstChild;f;f=f.nextSibling)if(f.alignable)for(var g=0,h=f.alignable;g<h.length;++g)h[g].style.left=e;a.options.fixedGutter&&(b.gutters.style.left=c+d+"px")}}function N(a){if(!a.options.lineNumbers)return!1;var b=a.doc,c=O(a.options,b.first+b.size-1),d=a.display;if(c.length!=d.lineNumChars){var e=d.measure.appendChild(lf("div",[lf("div",c)],"CodeMirror-linenumber CodeMirror-gutter-elt")),f=e.firstChild.offsetWidth,g=e.offsetWidth-f;return d.lineGutter.style.width="",d.lineNumInnerWidth=Math.max(f,d.lineGutter.offsetWidth-g),d.lineNumWidth=d.lineNumInnerWidth+g,d.lineNumChars=d.lineNumInnerWidth?c.length:-1,d.lineGutter.style.width=d.lineNumWidth+"px",!0}return!1}function O(a,b){return String(a.lineNumberFormatter(b+a.firstLineNumber))}function P(a){return pf(a.scroller).left-pf(a.sizer).left}function Q(a,b,c,d){for(var g,e=a.display.showingFrom,f=a.display.showingTo,h=L(a.display,a.doc,c),i=!0;;i=!1){var j=a.display.scroller.clientWidth;if(!R(a,b,h,d))break;if(g=!0,b=[],Z(a),K(a),i&&a.options.lineWrapping&&j!=a.display.scroller.clientWidth)d=!0;else if(d=!1,c&&(c=Math.min(a.display.scroller.scrollHeight-a.display.scroller.clientHeight,"number"==typeof c?c:c.top)),h=L(a.display,a.doc,c),h.from>=a.display.showingFrom&&h.to<=a.display.showingTo)break}return g&&(Qe(a,"update",a),(a.display.showingFrom!=e||a.display.showingTo!=f)&&Qe(a,"viewportChange",a,a.display.showingFrom,a.display.showingTo)),g}function R(a,b,c,d){var e=a.display,f=a.doc;if(!e.wrapper.clientWidth)return e.showingFrom=e.showingTo=f.first,e.viewOffset=0,void 0;if(!(!d&&0==b.length&&c.from>e.showingFrom&&c.to<e.showingTo)){N(a)&&(b=[{from:f.first,to:f.first+f.size}]);var g=e.sizer.style.marginLeft=e.gutters.offsetWidth+"px";e.scrollbarH.style.left=a.options.fixedGutter?g:"0";var h=1/0;if(a.options.lineNumbers)for(var i=0;i<b.length;++i)b[i].diff&&b[i].from<h&&(h=b[i].from);var j=f.first+f.size,k=Math.max(c.from-a.options.viewportMargin,f.first),l=Math.min(j,c.to+a.options.viewportMargin);if(e.showingFrom<k&&k-e.showingFrom<20&&(k=Math.max(f.first,e.showingFrom)),e.showingTo>l&&e.showingTo-l<20&&(l=Math.min(j,e.showingTo)),w)for(k=pe(Fd(f,le(f,k)));j>l&&Gd(f,le(f,l));)++l;var m=[{from:Math.max(e.showingFrom,f.first),to:Math.min(e.showingTo,j)}];if(m=m[0].from>=m[0].to?[]:U(m,b),w)for(var i=0;i<m.length;++i)for(var o,n=m[i];o=Ed(le(f,n.to-1));){var p=o.find().from.line;if(!(p>n.from)){m.splice(i--,1);break}n.to=p}for(var q=0,i=0;i<m.length;++i){var n=m[i];n.from<k&&(n.from=k),n.to>l&&(n.to=l),n.from>=n.to?m.splice(i--,1):q+=n.to-n.from}if(!d&&q==l-k&&k==e.showingFrom&&l==e.showingTo)return T(a),void 0;m.sort(function(a,b){return a.from-b.from});try{var r=document.activeElement}catch(s){}.7*(l-k)>q&&(e.lineDiv.style.display="none"),W(a,k,l,m,h),e.lineDiv.style.display="",r&&document.activeElement!=r&&r.offsetHeight&&r.focus();var t=k!=e.showingFrom||l!=e.showingTo||e.lastSizeC!=e.wrapper.clientHeight;return t&&(e.lastSizeC=e.wrapper.clientHeight,bb(a,400)),e.showingFrom=k,e.showingTo=l,S(a),T(a),!0}}function S(a){for(var f,b=a.display,d=b.lineDiv.offsetTop,e=b.lineDiv.firstChild;e;e=e.nextSibling)if(e.lineObj){if(c){var g=e.offsetTop+e.offsetHeight;f=g-d,d=g}else{var h=pf(e);f=h.bottom-h.top}var i=e.lineObj.height-f;if(2>f&&(f=Ab(b)),i>.001||-.001>i){oe(e.lineObj,f);var j=e.lineObj.widgets;if(j)for(var k=0;k<j.length;++k)j[k].height=j[k].node.offsetHeight}}}function T(a){var b=a.display.viewOffset=re(a,le(a.doc,a.display.showingFrom));a.display.mover.style.top=b+"px"}function U(a,b){for(var c=0,d=b.length||0;d>c;++c){for(var e=b[c],f=[],g=e.diff||0,h=0,i=a.length;i>h;++h){var j=a[h];e.to<=j.from&&e.diff?f.push({from:j.from+g,to:j.to+g}):e.to<=j.from||e.from>=j.to?f.push(j):(e.from>j.from&&f.push({from:j.from,to:e.from}),e.to<j.to&&f.push({from:e.to+g,to:j.to+g}))}a=f}return a}function V(a){for(var b=a.display,c={},d={},e=b.gutters.firstChild,f=0;e;e=e.nextSibling,++f)c[a.options.gutters[f]]=e.offsetLeft,d[a.options.gutters[f]]=e.offsetWidth;return{fixedPos:P(b),gutterTotalWidth:b.gutters.offsetWidth,gutterLeft:c,gutterWidth:d,wrapperWidth:b.wrapper.clientWidth}}function W(a,b,c,d,e){function l(b){var c=b.nextSibling;return f&&q&&a.display.currentWheelTarget==b?(b.style.display="none",b.lineObj=null):b.parentNode.removeChild(b),c}var g=V(a),h=a.display,i=a.options.lineNumbers;d.length||f&&a.display.currentWheelTarget||mf(h.lineDiv);var j=h.lineDiv,k=j.firstChild,m=d.shift(),n=b;for(a.doc.iter(b,c,function(b){if(m&&m.to==n&&(m=d.shift()),Gd(a.doc,b)){if(0!=b.height&&oe(b,0),b.widgets&&k&&k.previousSibling)for(var c=0;c<b.widgets.length;++c){var f=b.widgets[c];if(f.showIfHidden){var h=k.previousSibling;if(/pre/i.test(h.nodeName)){var o=lf("div",null,null,"position: relative");h.parentNode.replaceChild(o,h),o.appendChild(h),h=o}var p=h.appendChild(lf("div",[f.node],"CodeMirror-linewidget"));f.handleMouseEvents||(p.ignoreEvents=!0),Y(f,p,h,g)}}}else if(m&&m.from<=n&&m.to>n){for(;k.lineObj!=b;)k=l(k);i&&n>=e&&k.lineNumber&&of(k.lineNumber,O(a.options,n)),k=k.nextSibling}else{if(b.widgets)for(var s,q=0,r=k;r&&20>q;++q,r=r.nextSibling)if(r.lineObj==b&&/div/i.test(r.nodeName)){s=r;break}var t=X(a,b,n,g,s);if(t!=s)j.insertBefore(t,k);else{for(;k!=s;)k=l(k);k=k.nextSibling}t.lineObj=b}++n});k;)k=l(k)}function X(a,b,d,e,f){var k,g=Xd(a,b),h=g.pre,i=b.gutterMarkers,j=a.display,l=g.bgClass?g.bgClass+" "+(b.bgClass||""):b.bgClass;if(!(a.options.lineNumbers||i||l||b.wrapClass||b.widgets))return h;if(f){f.alignable=null;for(var q,m=!0,n=0,o=null,p=f.firstChild;p;p=q)if(q=p.nextSibling,/\bCodeMirror-linewidget\b/.test(p.className)){for(var r=0;r<b.widgets.length;++r){var s=b.widgets[r];if(s.node==p.firstChild){s.above||o||(o=p),Y(s,p,f,e),++n;break}}if(r==b.widgets.length){m=!1;break}}else f.removeChild(p);f.insertBefore(h,o),m&&n==b.widgets.length&&(k=f,f.className=b.wrapClass||"")}if(k||(k=lf("div",null,b.wrapClass,"position: relative"),k.appendChild(h)),l&&k.insertBefore(lf("div",null,l+" CodeMirror-linebackground"),k.firstChild),a.options.lineNumbers||i){var t=k.insertBefore(lf("div",null,null,"position: absolute; left: "+(a.options.fixedGutter?e.fixedPos:-e.gutterTotalWidth)+"px"),k.firstChild);if(a.options.fixedGutter&&(k.alignable||(k.alignable=[])).push(t),!a.options.lineNumbers||i&&i["CodeMirror-linenumbers"]||(k.lineNumber=t.appendChild(lf("div",O(a.options,d),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+e.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+j.lineNumInnerWidth+"px"))),i)for(var u=0;u<a.options.gutters.length;++u){var v=a.options.gutters[u],w=i.hasOwnProperty(v)&&i[v];w&&t.appendChild(lf("div",[w],"CodeMirror-gutter-elt","left: "+e.gutterLeft[v]+"px; width: "+e.gutterWidth[v]+"px"))}}if(c&&(k.style.zIndex=2),b.widgets&&k!=f)for(var r=0,x=b.widgets;r<x.length;++r){var s=x[r],y=lf("div",[s.node],"CodeMirror-linewidget");s.handleMouseEvents||(y.ignoreEvents=!0),Y(s,y,k,e),s.above?k.insertBefore(y,a.options.lineNumbers&&0!=b.height?t:h):k.appendChild(y),Qe(s,"redraw")}return k}function Y(a,b,c,d){if(a.noHScroll){(c.alignable||(c.alignable=[])).push(b);var e=d.wrapperWidth;b.style.left=d.fixedPos+"px",a.coverGutter||(e-=d.gutterTotalWidth,b.style.paddingLeft=d.gutterTotalWidth+"px"),b.style.width=e+"px"}a.coverGutter&&(b.style.zIndex=5,b.style.position="relative",a.noHScroll||(b.style.marginLeft=-d.gutterTotalWidth+"px"))}function Z(a){var b=a.display,c=Cc(a.doc.sel.from,a.doc.sel.to);if(c||a.options.showCursorWhenSelecting?$(a):b.cursor.style.display=b.otherCursor.style.display="none",c?b.selectionDiv.style.display="none":_(a),a.options.moveInputWithCursor){var d=vb(a,a.doc.sel.head,"div"),e=pf(b.wrapper),f=pf(b.lineDiv);b.inputDiv.style.top=Math.max(0,Math.min(b.wrapper.clientHeight-10,d.top+f.top-e.top))+"px",b.inputDiv.style.left=Math.max(0,Math.min(b.wrapper.clientWidth-10,d.left+f.left-e.left))+"px"}}function $(a){var b=a.display,c=vb(a,a.doc.sel.head,"div");b.cursor.style.left=c.left+"px",b.cursor.style.top=c.top+"px",b.cursor.style.height=Math.max(0,c.bottom-c.top)*a.options.cursorHeight+"px",b.cursor.style.display="",c.other?(b.otherCursor.style.display="",b.otherCursor.style.left=c.other.left+"px",b.otherCursor.style.top=c.other.top+"px",b.otherCursor.style.height=.85*(c.other.bottom-c.other.top)+"px"):b.otherCursor.style.display="none"}function _(a){function h(a,b,c,d){0>b&&(b=0),e.appendChild(lf("div",null,"CodeMirror-selected","position: absolute; left: "+a+"px; top: "+b+"px; width: "+(null==c?f-a:c)+"px; height: "+(d-b)+"px"))}function i(b,d,e){function m(c,d){return ub(a,Bc(b,c),"div",i,d)}var k,l,i=le(c,b),j=i.text.length;return Af(se(i),d||0,null==e?j:e,function(a,b,c){var n,o,p,i=m(a,"left");if(a==b)n=i,o=p=i.left;else{if(n=m(b-1,"right"),"rtl"==c){var q=i;i=n,n=q}o=i.left,p=n.right}null==d&&0==a&&(o=g),n.top-i.top>3&&(h(o,i.top,null,i.bottom),o=g,i.bottom<n.top&&h(o,i.bottom,null,n.top)),null==e&&b==j&&(p=f),(!k||i.top<k.top||i.top==k.top&&i.left<k.left)&&(k=i),(!l||n.bottom>l.bottom||n.bottom==l.bottom&&n.right>l.right)&&(l=n),g+1>o&&(o=g),h(o,n.top,p-o,n.bottom)}),{start:k,end:l}}var b=a.display,c=a.doc,d=a.doc.sel,e=document.createDocumentFragment(),f=b.lineSpace.offsetWidth,g=hb(a.display);if(d.from.line==d.to.line)i(d.from.line,d.from.ch,d.to.ch);else{var j=le(c,d.from.line),k=le(c,d.to.line),l=Fd(c,j)==Fd(c,k),m=i(d.from.line,d.from.ch,l?j.text.length:null).end,n=i(d.to.line,l?0:null,d.to.ch).start;l&&(m.top<n.top-2?(h(m.right,m.top,null,m.bottom),h(g,n.top,n.left,n.bottom)):h(m.right,m.top,n.left-m.right,m.bottom)),m.bottom<n.top&&h(g,m.bottom,null,n.top)}nf(b.selectionDiv,e),b.selectionDiv.style.display=""}function ab(a){if(a.state.focused){var b=a.display;clearInterval(b.blinker);var c=!0;b.cursor.style.visibility=b.otherCursor.style.visibility="",a.options.cursorBlinkRate>0&&(b.blinker=setInterval(function(){b.cursor.style.visibility=b.otherCursor.style.visibility=(c=!c)?"":"hidden"},a.options.cursorBlinkRate))}}function bb(a,b){a.doc.mode.startState&&a.doc.frontier<a.display.showingTo&&a.state.highlight.set(b,ff(cb,a))}function cb(a){var b=a.doc;if(b.frontier<b.first&&(b.frontier=b.first),!(b.frontier>=a.display.showingTo)){var f,c=+new Date+a.options.workTime,d=hd(b.mode,eb(a,b.frontier)),e=[];b.iter(b.frontier,Math.min(b.first+b.size,a.display.showingTo+500),function(g){if(b.frontier>=a.display.showingFrom){var h=g.styles;g.styles=Sd(a,g,d);for(var i=!h||h.length!=g.styles.length,j=0;!i&&j<h.length;++j)i=h[j]!=g.styles[j];i&&(f&&f.end==b.frontier?f.end++:e.push(f={start:b.frontier,end:b.frontier+1})),g.stateAfter=hd(b.mode,d)}else Ud(a,g,d),g.stateAfter=0==b.frontier%5?hd(b.mode,d):null;return++b.frontier,+new Date>c?(bb(a,a.options.workDelay),!0):void 0}),e.length&&Fb(a,function(){for(var a=0;a<e.length;++a)Ib(this,e[a].start,e[a].end)})()}}function db(a,b,c){for(var d,e,f=a.doc,g=c?-1:b-(a.doc.mode.innerMode?1e3:100),h=b;h>g;--h){if(h<=f.first)return f.first;var i=le(f,h-1);if(i.stateAfter&&(!c||h<=f.frontier))return h;var j=Ye(i.text,null,a.options.tabSize);(null==e||d>j)&&(e=h-1,d=j)}return e}function eb(a,b,c){var d=a.doc,e=a.display;if(!d.mode.startState)return!0;var f=db(a,b,c),g=f>d.first&&le(d,f-1).stateAfter;return g=g?hd(d.mode,g):id(d.mode),d.iter(f,b,function(c){Ud(a,c,g);var h=f==b-1||0==f%5||f>=e.showingFrom&&f<e.showingTo;c.stateAfter=h?hd(d.mode,g):null,++f}),c&&(d.frontier=f),g}function fb(a){return a.lineSpace.offsetTop}function gb(a){return a.mover.offsetHeight-a.lineSpace.offsetHeight}function hb(a){var b=nf(a.measure,lf("pre",null,null,"text-align: left")).appendChild(lf("span","x"));return b.offsetLeft}function ib(a,b,c,d,e){var f=-1;if(d=d||lb(a,b),d.crude){var g=d.left+c*d.width;return{left:g,right:g+d.width,top:d.top,bottom:d.bottom}}for(var h=c;;h+=f){var i=d[h];if(i)break;0>f&&0==h&&(f=1)}return e=h>c?"left":c>h?"right":e,"left"==e&&i.leftSide?i=i.leftSide:"right"==e&&i.rightSide&&(i=i.rightSide),{left:c>h?i.right:i.left,right:h>c?i.left:i.right,top:i.top,bottom:i.bottom}}function jb(a,b){for(var c=a.display.measureLineCache,d=0;d<c.length;++d){var e=c[d];if(e.text==b.text&&e.markedSpans==b.markedSpans&&a.display.scroller.clientWidth==e.width&&e.classes==b.textClass+"|"+b.wrapClass)return e}}function kb(a,b){var c=jb(a,b);c&&(c.text=c.measure=c.markedSpans=null)}function lb(a,b){var c=jb(a,b);if(c)return c.measure;var d=mb(a,b),e=a.display.measureLineCache,f={text:b.text,width:a.display.scroller.clientWidth,markedSpans:b.markedSpans,measure:d,classes:b.textClass+"|"+b.wrapClass};return 16==e.length?e[++a.display.measureLineCachePos%16]=f:e.push(f),d}function mb(a,e){function t(a){var b=a.top-p.top,c=a.bottom-p.top;c>s&&(c=s),0>b&&(b=0);for(var d=q.length-2;d>=0;d-=2){var e=q[d],f=q[d+1];if(!(e>c||b>f)&&(b>=e&&f>=c||e>=b&&c>=f||Math.min(c,f)-Math.max(b,e)>=c-b>>1)){q[d]=Math.min(b,e),q[d+1]=Math.max(c,f);break}}return 0>d&&(d=q.length,q.push(b,c)),{left:a.left-p.left,right:a.right-p.left,top:d,bottom:null}}function u(a){a.bottom=q[a.top+1],a.top=q[a.top]}if(!a.options.lineWrapping&&e.text.length>=a.options.crudeMeasuringFrom)return nb(a,e);var f=a.display,g=ef(e.text.length),h=Xd(a,e,g,!0).pre;if(b&&!c&&!a.options.lineWrapping&&h.childNodes.length>100){for(var i=document.createDocumentFragment(),j=10,k=h.childNodes.length,l=0,m=Math.ceil(k/j);m>l;++l){for(var n=lf("div",null,null,"display: inline-block"),o=0;j>o&&k;++o)n.appendChild(h.firstChild),--k;i.appendChild(n)}h.appendChild(i)}nf(f.measure,h);var p=pf(f.lineDiv),q=[],r=ef(e.text.length),s=h.offsetHeight;d&&f.measure.first!=h&&nf(f.measure,h);for(var v,l=0;l<g.length;++l)if(v=g[l]){var w=v,x=null;if(/\bCodeMirror-widget\b/.test(v.className)&&v.getClientRects){1==v.firstChild.nodeType&&(w=v.firstChild);var y=w.getClientRects();y.length>1&&(x=r[l]=t(y[0]),x.rightSide=t(y[y.length-1]))}x||(x=r[l]=t(pf(w))),v.measureRight&&(x.right=pf(v.measureRight).left),v.leftSide&&(x.leftSide=t(pf(v.leftSide)))}mf(a.display.measure);for(var v,l=0;l<r.length;++l)(v=r[l])&&(u(v),v.leftSide&&u(v.leftSide),v.rightSide&&u(v.rightSide));return r}function nb(a,b){var c=new Od(b.text.slice(0,100),null);b.textClass&&(c.textClass=b.textClass);var d=mb(a,c),e=ib(a,c,0,d,"left"),f=ib(a,c,99,d,"right");return{crude:!0,top:e.top,left:e.left,bottom:e.bottom,width:(f.right-e.left)/100}}function ob(a,b){var c=!1;if(b.markedSpans)for(var d=0;d<b.markedSpans;++d){var e=b.markedSpans[d];!e.collapsed||null!=e.to&&e.to!=b.text.length||(c=!0)}var f=!c&&jb(a,b);if(f||b.text.length>=a.options.crudeMeasuringFrom)return ib(a,b,b.text.length,f&&f.measure,"right").right;var g=Xd(a,b,null,!0).pre,h=g.appendChild(vf(a.display.measure));return nf(a.display.measure,g),pf(h).right-pf(a.display.lineDiv).left}function pb(a){a.display.measureLineCache.length=a.display.measureLineCachePos=0,a.display.cachedCharWidth=a.display.cachedTextHeight=null,a.options.lineWrapping||(a.display.maxLineChanged=!0),a.display.lineNumChars=null}function qb(){return window.pageXOffset||(document.documentElement||document.body).scrollLeft}function rb(){return window.pageYOffset||(document.documentElement||document.body).scrollTop}function sb(a,b,c,d){if(b.widgets)for(var e=0;e<b.widgets.length;++e)if(b.widgets[e].above){var f=Md(b.widgets[e]);c.top+=f,c.bottom+=f}if("line"==d)return c;d||(d="local");var g=re(a,b);if("local"==d?g+=fb(a.display):g-=a.display.viewOffset,"page"==d||"window"==d){var h=pf(a.display.lineSpace);g+=h.top+("window"==d?0:rb());var i=h.left+("window"==d?0:qb());c.left+=i,c.right+=i}return c.top+=g,c.bottom+=g,c}function tb(a,b,c){if("div"==c)return b;var d=b.left,e=b.top;if("page"==c)d-=qb(),e-=rb();else if("local"==c||!c){var f=pf(a.display.sizer);d+=f.left,e+=f.top}var g=pf(a.display.lineSpace);return{left:d-g.left,top:e-g.top}}function ub(a,b,c,d,e){return d||(d=le(a.doc,b.line)),sb(a,d,ib(a,d,b.ch,null,e),c)}function vb(a,b,c,d,e){function f(b,f){var g=ib(a,d,b,e,f?"right":"left");return f?g.left=g.right:g.right=g.left,sb(a,d,g,c)}function g(a,b){var c=h[b],d=c.level%2;return a==Bf(c)&&b&&c.level<h[b-1].level?(c=h[--b],a=Cf(c)-(c.level%2?0:1),d=!0):a==Cf(c)&&b<h.length-1&&c.level<h[b+1].level&&(c=h[++b],a=Bf(c)-c.level%2,d=!1),d&&a==c.to&&a>c.from?f(a-1):f(a,d)}d=d||le(a.doc,b.line),e||(e=lb(a,d));var h=se(d),i=b.ch;if(!h)return f(i);var j=Jf(h,i),k=g(i,j);return null!=If&&(k.other=g(i,If)),k}function wb(a,b,c,d){var e=new Bc(a,b);return e.xRel=d,c&&(e.outside=!0),e}function xb(a,b,c){var d=a.doc;if(c+=a.display.viewOffset,0>c)return wb(d.first,0,!0,-1);var e=qe(d,c),f=d.first+d.size-1;if(e>f)return wb(d.first+d.size-1,le(d,f).text.length,!0,1);for(0>b&&(b=0);;){var g=le(d,e),h=yb(a,g,e,b,c),i=Ed(g),j=i&&i.find();if(!i||!(h.ch>j.from.ch||h.ch==j.from.ch&&h.xRel>0))return h;e=j.to.line}}function yb(a,b,c,d,e){function j(d){var e=vb(a,Bc(c,d),"line",b,i);return g=!0,f>e.bottom?e.left-h:f<e.top?e.left+h:(g=!1,e.left)}var f=e-re(a,b),g=!1,h=2*a.display.wrapper.clientWidth,i=lb(a,b),k=se(b),l=b.text.length,m=Df(b),n=Ef(b),o=j(m),p=g,q=j(n),r=g;if(d>q)return wb(c,n,r,1);for(;;){if(k?n==m||n==Lf(b,m,1):1>=n-m){for(var s=o>d||q-d>=d-o?m:n,t=d-(s==m?o:q);kf.test(b.text.charAt(s));)++s;var u=wb(c,s,s==m?p:r,0>t?-1:t?1:0);return u}var v=Math.ceil(l/2),w=m+v;if(k){w=m;for(var x=0;v>x;++x)w=Lf(b,w,1)}var y=j(w);y>d?(n=w,q=y,(r=g)&&(q+=1e3),l=v):(m=w,o=y,p=g,l-=v)}}function Ab(a){if(null!=a.cachedTextHeight)return a.cachedTextHeight;if(null==zb){zb=lf("pre");for(var b=0;49>b;++b)zb.appendChild(document.createTextNode("x")),zb.appendChild(lf("br"));zb.appendChild(document.createTextNode("x"))}nf(a.measure,zb);var c=zb.offsetHeight/50;return c>3&&(a.cachedTextHeight=c),mf(a.measure),c||1}function Bb(a){if(null!=a.cachedCharWidth)return a.cachedCharWidth;var b=lf("span","x"),c=lf("pre",[b]);nf(a.measure,c);var d=b.offsetWidth;return d>2&&(a.cachedCharWidth=d),d||10}function Db(a){a.curOp={changes:[],forceUpdate:!1,updateInput:null,userSelChange:null,textChanged:null,selectionChanged:!1,cursorActivity:!1,updateMaxLine:!1,updateScrollPos:!1,id:++Cb},Pe++||(Oe=[])}function Eb(a){var b=a.curOp,c=a.doc,d=a.display;if(a.curOp=null,b.updateMaxLine&&I(a),d.maxLineChanged&&!a.options.lineWrapping&&d.maxLine){var e=ob(a,d.maxLine);d.sizer.style.minWidth=Math.max(0,e+3+Ve)+"px",d.maxLineChanged=!1;var f=Math.max(0,d.sizer.offsetLeft+d.sizer.offsetWidth-d.scroller.clientWidth);f<c.scrollLeft&&!b.updateScrollPos&&ac(a,Math.min(d.scroller.scrollLeft,f),!0)}var g,h;if(b.updateScrollPos)g=b.updateScrollPos;else if(b.selectionChanged&&d.scroller.clientHeight){var i=vb(a,c.sel.head);g=Rc(a,i.left,i.top,i.left,i.bottom)}(b.changes.length||b.forceUpdate||g&&null!=g.scrollTop)&&(h=Q(a,b.changes,g&&g.scrollTop,b.forceUpdate),a.display.scroller.offsetHeight&&(a.doc.scrollTop=a.display.scroller.scrollTop)),!h&&b.selectionChanged&&Z(a),b.updateScrollPos?(d.scroller.scrollTop=d.scrollbarV.scrollTop=c.scrollTop=g.scrollTop,d.scroller.scrollLeft=d.scrollbarH.scrollLeft=c.scrollLeft=g.scrollLeft,M(a),b.scrollToPos&&Pc(a,Gc(a.doc,b.scrollToPos.from),Gc(a.doc,b.scrollToPos.to),b.scrollToPos.margin)):g&&Oc(a),b.selectionChanged&&ab(a),a.state.focused&&b.updateInput&&Mb(a,b.userSelChange);var j=b.maybeHiddenMarkers,k=b.maybeUnhiddenMarkers;if(j)for(var l=0;l<j.length;++l)j[l].lines.length||Ne(j[l],"hide");if(k)for(var l=0;l<k.length;++l)k[l].lines.length&&Ne(k[l],"unhide");var m;if(--Pe||(m=Oe,Oe=null),b.textChanged&&Ne(a,"change",a,b.textChanged),b.cursorActivity&&Ne(a,"cursorActivity",a),m)for(var l=0;l<m.length;++l)m[l]()}function Fb(a,b){return function(){var c=a||this,d=!c.curOp;d&&Db(c);try{var e=b.apply(c,arguments)}finally{d&&Eb(c)}return e}}function Gb(a){return function(){var c,b=this.cm&&!this.cm.curOp;b&&Db(this.cm);try{c=a.apply(this,arguments)}finally{b&&Eb(this.cm)}return c}}function Hb(a,b){var d,c=!a.curOp;c&&Db(a);try{d=b()}finally{c&&Eb(a)}return d}function Ib(a,b,c,d){null==b&&(b=a.doc.first),null==c&&(c=a.doc.first+a.doc.size),a.curOp.changes.push({from:b,to:c,diff:d})}function Jb(a){a.display.pollingFast||a.display.poll.set(a.options.pollInterval,function(){Lb(a),a.state.focused&&Jb(a)})}function Kb(a){function c(){var d=Lb(a);d||b?(a.display.pollingFast=!1,Jb(a)):(b=!0,a.display.poll.set(60,c))}var b=!1;a.display.pollingFast=!0,a.display.poll.set(20,c)}function Lb(a){var c=a.display.input,e=a.display.prevInput,f=a.doc,g=f.sel;if(!a.state.focused||xf(c)||Ob(a)||a.state.disableInput)return!1;a.state.pasteIncoming&&a.state.fakedLastChar&&(c.value=c.value.substring(0,c.value.length-1),a.state.fakedLastChar=!1);var h=c.value;if(h==e&&Cc(g.from,g.to))return!1;if(b&&!d&&a.display.inputHasSelection===h)return Mb(a,!0),!1;var i=!a.curOp;i&&Db(a),g.shift=!1;for(var j=0,k=Math.min(e.length,h.length);k>j&&e.charCodeAt(j)==h.charCodeAt(j);)++j;var l=g.from,m=g.to;j<e.length?l=Bc(l.line,l.ch-(e.length-j)):a.state.overwrite&&Cc(l,m)&&!a.state.pasteIncoming&&(m=Bc(m.line,Math.min(le(f,m.line).text.length,m.ch+(h.length-j))));var n=a.curOp.updateInput,o={from:l,to:m,text:wf(h.slice(j)),origin:a.state.pasteIncoming?"paste":"+input"};return uc(a.doc,o,"end"),a.curOp.updateInput=n,Qe(a,"inputRead",a,o),h.length>1e3||h.indexOf("\n")>-1?c.value=a.display.prevInput="":a.display.prevInput=h,i&&Eb(a),a.state.pasteIncoming=!1,!0}function Mb(a,c){var e,f,g=a.doc;if(Cc(g.sel.from,g.sel.to))c&&(a.display.prevInput=a.display.input.value="",b&&!d&&(a.display.inputHasSelection=null));else{a.display.prevInput="",e=yf&&(g.sel.to.line-g.sel.from.line>100||(f=a.getSelection()).length>1e3);var h=e?"-":f||a.getSelection();a.display.input.value=h,a.state.focused&&af(a.display.input),b&&!d&&(a.display.inputHasSelection=h)}a.display.inaccurateSelection=e}function Nb(a){"nocursor"==a.options.readOnly||p&&document.activeElement==a.display.input||a.display.input.focus()}function Ob(a){return a.options.readOnly||a.doc.cantEdit}function Pb(a){function e(){a.state.focused&&setTimeout(ff(Nb,a),0)}function h(){null==g&&(g=setTimeout(function(){g=null,c.cachedCharWidth=c.cachedTextHeight=sf=null,pb(a),Hb(a,ff(Ib,a))},100))}function i(){for(var a=c.wrapper.parentNode;a&&a!=document.body;a=a.parentNode);a?setTimeout(i,5e3):Me(window,"resize",h)}function j(b){Re(a,b)||a.options.onDragEvent&&a.options.onDragEvent(a,Ee(b))||Ie(b)}function l(){c.inaccurateSelection&&(c.prevInput="",c.inaccurateSelection=!1,c.input.value=a.getSelection(),af(c.input))}var c=a.display;Le(c.scroller,"mousedown",Fb(a,Ub)),b?Le(c.scroller,"dblclick",Fb(a,function(b){if(!Re(a,b)){var c=Rb(a,b);if(c&&!Xb(a,b)&&!Qb(a.display,b)){Fe(b);var d=Yc(le(a.doc,c.line).text,c);Jc(a.doc,d.from,d.to)}}})):Le(c.scroller,"dblclick",function(b){Re(a,b)||Fe(b)}),Le(c.lineSpace,"selectstart",function(a){Qb(c,a)||Fe(a)}),u||Le(c.scroller,"contextmenu",function(b){pc(a,b)}),Le(c.scroller,"scroll",function(){c.scroller.clientHeight&&(_b(a,c.scroller.scrollTop),ac(a,c.scroller.scrollLeft,!0),Ne(a,"scroll",a))}),Le(c.scrollbarV,"scroll",function(){c.scroller.clientHeight&&_b(a,c.scrollbarV.scrollTop)}),Le(c.scrollbarH,"scroll",function(){c.scroller.clientHeight&&ac(a,c.scrollbarH.scrollLeft)}),Le(c.scroller,"mousewheel",function(b){dc(a,b)}),Le(c.scroller,"DOMMouseScroll",function(b){dc(a,b)}),Le(c.scrollbarH,"mousedown",e),Le(c.scrollbarV,"mousedown",e),Le(c.wrapper,"scroll",function(){c.wrapper.scrollTop=c.wrapper.scrollLeft=0});var g;Le(window,"resize",h),setTimeout(i,5e3),Le(c.input,"keyup",Fb(a,function(b){Re(a,b)||a.options.onKeyEvent&&a.options.onKeyEvent(a,Ee(b))||16==b.keyCode&&(a.doc.sel.shift=!1)})),Le(c.input,"input",function(){b&&!d&&a.display.inputHasSelection&&(a.display.inputHasSelection=null),Kb(a)}),Le(c.input,"keydown",Fb(a,kc)),Le(c.input,"keypress",Fb(a,lc)),Le(c.input,"focus",ff(mc,a)),Le(c.input,"blur",ff(nc,a)),a.options.dragDrop&&(Le(c.scroller,"dragstart",function(b){$b(a,b)}),Le(c.scroller,"dragenter",j),Le(c.scroller,"dragover",j),Le(c.scroller,"drop",Fb(a,Zb))),Le(c.scroller,"paste",function(b){Qb(c,b)||(Nb(a),Kb(a))}),Le(c.input,"paste",function(){if(f&&!a.state.fakedLastChar&&!(new Date-a.state.lastMiddleDown<200)){var b=c.input.selectionStart,d=c.input.selectionEnd;c.input.value+="$",c.input.selectionStart=b,c.input.selectionEnd=d,a.state.fakedLastChar=!0}a.state.pasteIncoming=!0,Kb(a)}),Le(c.input,"cut",l),Le(c.input,"copy",l),k&&Le(c.sizer,"mouseup",function(){document.activeElement==c.input&&c.input.blur(),Nb(a)})}function Qb(a,b){for(var c=Je(b);c!=a.wrapper;c=c.parentNode)if(!c||c.ignoreEvents||c.parentNode==a.sizer&&c!=a.mover)return!0}function Rb(a,b,c){var d=a.display;if(!c){var e=Je(b);if(e==d.scrollbarH||e==d.scrollbarH.firstChild||e==d.scrollbarV||e==d.scrollbarV.firstChild||e==d.scrollbarFiller||e==d.gutterFiller)return null}var f,g,h=pf(d.lineSpace);try{f=b.clientX,g=b.clientY}catch(b){return null}return xb(a,f-h.left,g-h.top)}function Ub(a){function q(a){if(!Cc(p,a)){if(p=a,"single"==j)return Jc(c.doc,Gc(e,h),a),void 0;if(n=Gc(e,n),o=Gc(e,o),"double"==j){var b=Yc(le(e,a.line).text,a);Dc(a,n)?Jc(c.doc,b.from,o):Jc(c.doc,n,b.to)
-}else"triple"==j&&(Dc(a,n)?Jc(c.doc,o,Gc(e,Bc(a.line,0))):Jc(c.doc,n,Gc(e,Bc(a.line+1,0))))}}function t(a){var b=++s,f=Rb(c,a,!0);if(f)if(Cc(f,l)){var h=a.clientY<r.top?-20:a.clientY>r.bottom?20:0;h&&setTimeout(Fb(c,function(){s==b&&(d.scroller.scrollTop+=h,t(a))}),50)}else{c.state.focused||mc(c),l=f,q(f);var g=L(d,e);(f.line>=g.to||f.line<g.from)&&setTimeout(Fb(c,function(){s==b&&t(a)}),150)}}function v(a){s=1/0,Fe(a),Nb(c),Me(document,"mousemove",w),Me(document,"mouseup",x)}if(!Re(this,a)){var c=this,d=c.display,e=c.doc,g=e.sel;if(g.shift=a.shiftKey,Qb(d,a))return f||(d.scroller.draggable=!1,setTimeout(function(){d.scroller.draggable=!0},100)),void 0;if(!Xb(c,a)){var h=Rb(c,a);switch(Ke(a)){case 3:return u&&pc.call(c,c,a),void 0;case 2:return f&&(c.state.lastMiddleDown=+new Date),h&&Jc(c.doc,h),setTimeout(ff(Nb,c),20),Fe(a),void 0}if(!h)return Je(a)==d.scroller&&Fe(a),void 0;c.state.focused||mc(c);var i=+new Date,j="single";if(Tb&&Tb.time>i-400&&Cc(Tb.pos,h))j="triple",Fe(a),setTimeout(ff(Nb,c),20),Zc(c,h.line);else if(Sb&&Sb.time>i-400&&Cc(Sb.pos,h)){j="double",Tb={time:i,pos:h},Fe(a);var k=Yc(le(e,h.line).text,h);Jc(c.doc,k.from,k.to)}else Sb={time:i,pos:h};var l=h;if(c.options.dragDrop&&qf&&!Ob(c)&&!Cc(g.from,g.to)&&!Dc(h,g.from)&&!Dc(g.to,h)&&"single"==j){var m=Fb(c,function(b){f&&(d.scroller.draggable=!1),c.state.draggingText=!1,Me(document,"mouseup",m),Me(d.scroller,"drop",m),Math.abs(a.clientX-b.clientX)+Math.abs(a.clientY-b.clientY)<10&&(Fe(b),Jc(c.doc,h),Nb(c))});return f&&(d.scroller.draggable=!0),c.state.draggingText=m,d.scroller.dragDrop&&d.scroller.dragDrop(),Le(document,"mouseup",m),Le(d.scroller,"drop",m),void 0}Fe(a),"single"==j&&Jc(c.doc,Gc(e,h));var n=g.from,o=g.to,p=h,r=pf(d.wrapper),s=0,w=Fb(c,function(a){b||Ke(a)?t(a):v(a)}),x=Fb(c,v);Le(document,"mousemove",w),Le(document,"mouseup",x)}}}function Vb(a,b,c,d,e){try{var f=b.clientX,g=b.clientY}catch(b){return!1}if(f>=Math.floor(pf(a.display.gutters).right))return!1;d&&Fe(b);var h=a.display,i=pf(h.lineDiv);if(g>i.bottom||!Te(a,c))return He(b);g-=i.top-h.viewOffset;for(var j=0;j<a.options.gutters.length;++j){var k=h.gutters.childNodes[j];if(k&&pf(k).right>=f){var l=qe(a.doc,g),m=a.options.gutters[j];return e(a,c,a,l,m,b),He(b)}}}function Wb(a,b){return Te(a,"gutterContextMenu")?Vb(a,b,"gutterContextMenu",!1,Ne):!1}function Xb(a,b){return Vb(a,b,"gutterClick",!0,Qe)}function Zb(a){var c=this;if(!(Re(c,a)||Qb(c.display,a)||c.options.onDragEvent&&c.options.onDragEvent(c,Ee(a)))){Fe(a),b&&(Yb=+new Date);var d=Rb(c,a,!0),e=a.dataTransfer.files;if(d&&!Ob(c))if(e&&e.length&&window.FileReader&&window.File)for(var f=e.length,g=Array(f),h=0,i=function(a,b){var e=new FileReader;e.onload=function(){g[b]=e.result,++h==f&&(d=Gc(c.doc,d),uc(c.doc,{from:d,to:d,text:wf(g.join("\n")),origin:"paste"},"around"))},e.readAsText(a)},j=0;f>j;++j)i(e[j],j);else{if(c.state.draggingText&&!Dc(d,c.doc.sel.from)&&!Dc(c.doc.sel.to,d))return c.state.draggingText(a),setTimeout(ff(Nb,c),20),void 0;try{var g=a.dataTransfer.getData("Text");if(g){var k=c.doc.sel.from,l=c.doc.sel.to;Lc(c.doc,d,d),c.state.draggingText&&Ac(c.doc,"",k,l,"paste"),c.replaceSelection(g,null,"paste"),Nb(c),mc(c)}}catch(a){}}}}function $b(a,c){if(b&&(!a.state.draggingText||+new Date-Yb<100))return Ie(c),void 0;if(!Re(a,c)&&!Qb(a.display,c)){var d=a.getSelection();if(c.dataTransfer.setData("Text",d),c.dataTransfer.setDragImage&&!j){var e=lf("img",null,null,"position: fixed; left: 0; top: 0;");e.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",i&&(e.width=e.height=1,a.display.wrapper.appendChild(e),e._top=e.offsetTop),c.dataTransfer.setDragImage(e,0,0),i&&e.parentNode.removeChild(e)}}}function _b(b,c){Math.abs(b.doc.scrollTop-c)<2||(b.doc.scrollTop=c,a||Q(b,[],c),b.display.scroller.scrollTop!=c&&(b.display.scroller.scrollTop=c),b.display.scrollbarV.scrollTop!=c&&(b.display.scrollbarV.scrollTop=c),a&&Q(b,[]),bb(b,100))}function ac(a,b,c){(c?b==a.doc.scrollLeft:Math.abs(a.doc.scrollLeft-b)<2)||(b=Math.min(b,a.display.scroller.scrollWidth-a.display.scroller.clientWidth),a.doc.scrollLeft=b,M(a),a.display.scroller.scrollLeft!=b&&(a.display.scroller.scrollLeft=b),a.display.scrollbarH.scrollLeft!=b&&(a.display.scrollbarH.scrollLeft=b))}function dc(b,c){var d=c.wheelDeltaX,e=c.wheelDeltaY;null==d&&c.detail&&c.axis==c.HORIZONTAL_AXIS&&(d=c.detail),null==e&&c.detail&&c.axis==c.VERTICAL_AXIS?e=c.detail:null==e&&(e=c.wheelDelta);var g=b.display,h=g.scroller;if(d&&h.scrollWidth>h.clientWidth||e&&h.scrollHeight>h.clientHeight){if(e&&q&&f)for(var j=c.target;j!=h;j=j.parentNode)if(j.lineObj){b.display.currentWheelTarget=j;break}if(d&&!a&&!i&&null!=cc)return e&&_b(b,Math.max(0,Math.min(h.scrollTop+e*cc,h.scrollHeight-h.clientHeight))),ac(b,Math.max(0,Math.min(h.scrollLeft+d*cc,h.scrollWidth-h.clientWidth))),Fe(c),g.wheelStartX=null,void 0;if(e&&null!=cc){var k=e*cc,l=b.doc.scrollTop,m=l+g.wrapper.clientHeight;0>k?l=Math.max(0,l+k-50):m=Math.min(b.doc.height,m+k+50),Q(b,[],{top:l,bottom:m})}20>bc&&(null==g.wheelStartX?(g.wheelStartX=h.scrollLeft,g.wheelStartY=h.scrollTop,g.wheelDX=d,g.wheelDY=e,setTimeout(function(){if(null!=g.wheelStartX){var a=h.scrollLeft-g.wheelStartX,b=h.scrollTop-g.wheelStartY,c=b&&g.wheelDY&&b/g.wheelDY||a&&g.wheelDX&&a/g.wheelDX;g.wheelStartX=g.wheelStartY=null,c&&(cc=(cc*bc+c)/(bc+1),++bc)}},200)):(g.wheelDX+=d,g.wheelDY+=e))}}function ec(a,b,c){if("string"==typeof b&&(b=jd[b],!b))return!1;a.display.pollingFast&&Lb(a)&&(a.display.pollingFast=!1);var d=a.doc,e=d.sel.shift,f=!1;try{Ob(a)&&(a.state.suppressEdits=!0),c&&(d.sel.shift=!1),f=b(a)!=We}finally{d.sel.shift=e,a.state.suppressEdits=!1}return f}function fc(a){var b=a.state.keyMaps.slice(0);return a.options.extraKeys&&b.push(a.options.extraKeys),b.push(a.options.keyMap),b}function hc(a,b){var c=ld(a.options.keyMap),e=c.auto;clearTimeout(gc),e&&!nd(b)&&(gc=setTimeout(function(){ld(a.options.keyMap)==c&&(a.options.keyMap=e.call?e.call(null,a):e,D(a))},50));var f=od(b,!0),g=!1;if(!f)return!1;var h=fc(a);return g=b.shiftKey?md("Shift-"+f,h,function(b){return ec(a,b,!0)})||md(f,h,function(b){return("string"==typeof b?/^go[A-Z]/.test(b):b.motion)?ec(a,b):void 0}):md(f,h,function(b){return ec(a,b)}),g&&(Fe(b),ab(a),d&&(b.oldKeyCode=b.keyCode,b.keyCode=0),Qe(a,"keyHandled",a,f,b)),g}function ic(a,b,c){var d=md("'"+c+"'",fc(a),function(b){return ec(a,b,!0)});return d&&(Fe(b),ab(a),Qe(a,"keyHandled",a,"'"+c+"'",b)),d}function kc(a){var c=this;if(c.state.focused||mc(c),!(Re(c,a)||c.options.onKeyEvent&&c.options.onKeyEvent(c,Ee(a)))){b&&27==a.keyCode&&(a.returnValue=!1);var d=a.keyCode;c.doc.sel.shift=16==d||a.shiftKey;var e=hc(c,a);i&&(jc=e?d:null,!e&&88==d&&!yf&&(q?a.metaKey:a.ctrlKey)&&c.replaceSelection(""))}}function lc(a){var c=this;if(!(Re(c,a)||c.options.onKeyEvent&&c.options.onKeyEvent(c,Ee(a)))){var e=a.keyCode,f=a.charCode;if(i&&e==jc)return jc=null,Fe(a),void 0;if(!(i&&(!a.which||a.which<10)||k)||!hc(c,a)){var g=String.fromCharCode(null==f?e:f);this.options.electricChars&&this.doc.mode.electricChars&&this.options.smartIndent&&!Ob(this)&&this.doc.mode.electricChars.indexOf(g)>-1&&setTimeout(Fb(c,function(){Uc(c,c.doc.sel.to.line,"smart")}),75),ic(c,a,g)||(b&&!d&&(c.display.inputHasSelection=null),Kb(c))}}}function mc(a){"nocursor"!=a.options.readOnly&&(a.state.focused||(Ne(a,"focus",a),a.state.focused=!0,-1==a.display.wrapper.className.search(/\bCodeMirror-focused\b/)&&(a.display.wrapper.className+=" CodeMirror-focused"),a.curOp||(Mb(a,!0),f&&setTimeout(ff(Mb,a,!0),0))),Jb(a),ab(a))}function nc(a){a.state.focused&&(Ne(a,"blur",a),a.state.focused=!1,a.display.wrapper.className=a.display.wrapper.className.replace(" CodeMirror-focused","")),clearInterval(a.display.blinker),setTimeout(function(){a.state.focused||(a.doc.sel.shift=!1)},150)}function pc(a,c){function l(){if(null!=e.input.selectionStart){var a=e.input.value="\u200b"+(Cc(f.from,f.to)?"":e.input.value);e.prevInput="\u200b",e.input.selectionStart=1,e.input.selectionEnd=a.length}}function m(){if(e.inputDiv.style.position="relative",e.input.style.cssText=k,d&&(e.scrollbarV.scrollTop=e.scroller.scrollTop=h),Jb(a),null!=e.input.selectionStart){(!b||d)&&l(),clearTimeout(oc);var c=0,f=function(){" "==e.prevInput&&0==e.input.selectionStart?Fb(a,jd.selectAll)(a):c++<10?oc=setTimeout(f,500):Mb(a)};oc=setTimeout(f,200)}}if(!Re(a,c,"contextmenu")){var e=a.display,f=a.doc.sel;if(!Qb(e,c)&&!Wb(a,c)){var g=Rb(a,c),h=e.scroller.scrollTop;if(g&&!i){var j=a.options.resetSelectionOnContextMenu;j&&(Cc(f.from,f.to)||Dc(g,f.from)||!Dc(g,f.to))&&Fb(a,Lc)(a.doc,g,g);var k=e.input.style.cssText;if(e.inputDiv.style.position="absolute",e.input.style.cssText="position: fixed; width: 30px; height: 30px; top: "+(c.clientY-5)+"px; left: "+(c.clientX-5)+"px; z-index: 1000; background: white; outline: none;"+"border-width: 0; outline: none; overflow: hidden; opacity: .05; -ms-opacity: .05; filter: alpha(opacity=5);",Nb(a),Mb(a,!0),Cc(f.from,f.to)&&(e.input.value=e.prevInput=" "),b&&!d&&l(),u){Ie(c);var n=function(){Me(window,"mouseup",n),setTimeout(m,20)};Le(window,"mouseup",n)}else setTimeout(m,50)}}}}function rc(a,b,c){if(!Dc(b.from,c))return Gc(a,c);var d=b.text.length-1-(b.to.line-b.from.line);if(c.line>b.to.line+d){var e=c.line-d,f=a.first+a.size-1;return e>f?Bc(f,le(a,f).text.length):Hc(c,le(a,e).text.length)}if(c.line==b.to.line+d)return Hc(c,_e(b.text).length+(1==b.text.length?b.from.ch:0)+le(a,b.to.line).text.length-b.to.ch);var g=c.line-b.from.line;return Hc(c,b.text[g].length+(g?0:b.from.ch))}function sc(a,b,c){if(c&&"object"==typeof c)return{anchor:rc(a,b,c.anchor),head:rc(a,b,c.head)};if("start"==c)return{anchor:b.from,head:b.from};var d=qc(b);if("around"==c)return{anchor:b.from,head:d};if("end"==c)return{anchor:d,head:d};var e=function(a){if(Dc(a,b.from))return a;if(!Dc(b.to,a))return d;var c=a.line+b.text.length-(b.to.line-b.from.line)-1,e=a.ch;return a.line==b.to.line&&(e+=d.ch-b.to.ch),Bc(c,e)};return{anchor:e(a.sel.anchor),head:e(a.sel.head)}}function tc(a,b,c){var d={canceled:!1,from:b.from,to:b.to,text:b.text,origin:b.origin,cancel:function(){this.canceled=!0}};return c&&(d.update=function(b,c,d,e){b&&(this.from=Gc(a,b)),c&&(this.to=Gc(a,c)),d&&(this.text=d),void 0!==e&&(this.origin=e)}),Ne(a,"beforeChange",a,d),a.cm&&Ne(a.cm,"beforeChange",a.cm,d),d.canceled?null:{from:d.from,to:d.to,text:d.text,origin:d.origin}}function uc(a,b,c,d){if(a.cm){if(!a.cm.curOp)return Fb(a.cm,uc)(a,b,c,d);if(a.cm.state.suppressEdits)return}if(!(Te(a,"beforeChange")||a.cm&&Te(a.cm,"beforeChange"))||(b=tc(a,b,!0))){var e=v&&!d&&Bd(a,b.from,b.to);if(e){for(var f=e.length-1;f>=1;--f)vc(a,{from:e[f].from,to:e[f].to,text:[""]});e.length&&vc(a,{from:e[0].from,to:e[0].to,text:b.text},c)}else vc(a,b,c)}}function vc(a,b,c){if(1!=b.text.length||""!=b.text[0]||!Cc(b.from,b.to)){var d=sc(a,b,c);we(a,b,d,a.cm?a.cm.curOp.id:0/0),yc(a,b,d,zd(a,b));var e=[];je(a,function(a,c){c||-1!=bf(e,a.history)||(Ce(a.history,b),e.push(a.history)),yc(a,b,null,zd(a,b))})}}function wc(a,b){if(!a.cm||!a.cm.state.suppressEdits){var c=a.history,d=("undo"==b?c.done:c.undone).pop();if(d){var e={changes:[],anchorBefore:d.anchorAfter,headBefore:d.headAfter,anchorAfter:d.anchorBefore,headAfter:d.headBefore,generation:c.generation};("undo"==b?c.undone:c.done).push(e),c.generation=d.generation||++c.maxGeneration;for(var f=Te(a,"beforeChange")||a.cm&&Te(a.cm,"beforeChange"),g=d.changes.length-1;g>=0;--g){var h=d.changes[g];if(h.origin=b,f&&!tc(a,h,!1))return("undo"==b?c.done:c.undone).length=0,void 0;e.changes.push(ve(a,h));var i=g?sc(a,h,null):{anchor:d.anchorBefore,head:d.headBefore};yc(a,h,i,Ad(a,h));var j=[];je(a,function(a,b){b||-1!=bf(j,a.history)||(Ce(a.history,h),j.push(a.history)),yc(a,h,null,Ad(a,h))})}}}}function xc(a,b){function c(a){return Bc(a.line+b,a.ch)}a.first+=b,a.cm&&Ib(a.cm,a.first,a.first,b),a.sel.head=c(a.sel.head),a.sel.anchor=c(a.sel.anchor),a.sel.from=c(a.sel.from),a.sel.to=c(a.sel.to)}function yc(a,b,c,d){if(a.cm&&!a.cm.curOp)return Fb(a.cm,yc)(a,b,c,d);if(b.to.line<a.first)return xc(a,b.text.length-1-(b.to.line-b.from.line)),void 0;if(!(b.from.line>a.lastLine())){if(b.from.line<a.first){var e=b.text.length-1-(a.first-b.from.line);xc(a,e),b={from:Bc(a.first,0),to:Bc(b.to.line+e,b.to.ch),text:[_e(b.text)],origin:b.origin}}var f=a.lastLine();b.to.line>f&&(b={from:b.from,to:Bc(f,le(a,f).text.length),text:[b.text[0]],origin:b.origin}),b.removed=me(a,b.from,b.to),c||(c=sc(a,b,null)),a.cm?zc(a.cm,b,d,c):ce(a,b,d,c)}}function zc(a,b,c,d){var e=a.doc,f=a.display,g=b.from,h=b.to,i=!1,j=g.line;a.options.lineWrapping||(j=pe(Fd(e,le(e,g.line))),e.iter(j,h.line+1,function(a){return a==f.maxLine?(i=!0,!0):void 0})),Dc(e.sel.head,b.from)||Dc(b.to,e.sel.head)||(a.curOp.cursorActivity=!0),ce(e,b,c,d,B(a)),a.options.lineWrapping||(e.iter(j,g.line+b.text.length,function(a){var b=H(e,a);b>f.maxLineLength&&(f.maxLine=a,f.maxLineLength=b,f.maxLineChanged=!0,i=!1)}),i&&(a.curOp.updateMaxLine=!0)),e.frontier=Math.min(e.frontier,g.line),bb(a,400);var k=b.text.length-(h.line-g.line)-1;if(Ib(a,g.line,h.line+1,k),Te(a,"change")){var l={from:g,to:h,text:b.text,removed:b.removed,origin:b.origin};if(a.curOp.textChanged){for(var m=a.curOp.textChanged;m.next;m=m.next);m.next=l}else a.curOp.textChanged=l}}function Ac(a,b,c,d,e){if(d||(d=c),Dc(d,c)){var f=d;d=c,c=f}"string"==typeof b&&(b=wf(b)),uc(a,{from:c,to:d,text:b,origin:e},null)}function Bc(a,b){return this instanceof Bc?(this.line=a,this.ch=b,void 0):new Bc(a,b)}function Cc(a,b){return a.line==b.line&&a.ch==b.ch}function Dc(a,b){return a.line<b.line||a.line==b.line&&a.ch<b.ch}function Ec(a){return Bc(a.line,a.ch)}function Fc(a,b){return Math.max(a.first,Math.min(b,a.first+a.size-1))}function Gc(a,b){if(b.line<a.first)return Bc(a.first,0);var c=a.first+a.size-1;return b.line>c?Bc(c,le(a,c).text.length):Hc(b,le(a,b.line).text.length)}function Hc(a,b){var c=a.ch;return null==c||c>b?Bc(a.line,b):0>c?Bc(a.line,0):a}function Ic(a,b){return b>=a.first&&b<a.first+a.size}function Jc(a,b,c,d){if(a.sel.shift||a.sel.extend){var e=a.sel.anchor;if(c){var f=Dc(b,e);f!=Dc(c,e)?(e=b,b=c):f!=Dc(b,c)&&(b=c)}Lc(a,e,b,d)}else Lc(a,b,c||b,d);a.cm&&(a.cm.curOp.userSelChange=!0)}function Kc(a,b,c){var d={anchor:b,head:c};return Ne(a,"beforeSelectionChange",a,d),a.cm&&Ne(a.cm,"beforeSelectionChange",a.cm,d),d.anchor=Gc(a,d.anchor),d.head=Gc(a,d.head),d}function Lc(a,b,c,d,e){if(!e&&Te(a,"beforeSelectionChange")||a.cm&&Te(a.cm,"beforeSelectionChange")){var f=Kc(a,b,c);c=f.head,b=f.anchor}var g=a.sel;if(g.goalColumn=null,null==d&&(d=Dc(c,g.head)?-1:1),(e||!Cc(b,g.anchor))&&(b=Nc(a,b,d,"push"!=e)),(e||!Cc(c,g.head))&&(c=Nc(a,c,d,"push"!=e)),!Cc(g.anchor,b)||!Cc(g.head,c)){g.anchor=b,g.head=c;var h=Dc(c,b);g.from=h?c:b,g.to=h?b:c,a.cm&&(a.cm.curOp.updateInput=a.cm.curOp.selectionChanged=a.cm.curOp.cursorActivity=!0),Qe(a,"cursorActivity",a)}}function Mc(a){Lc(a.doc,a.doc.sel.from,a.doc.sel.to,null,"push")}function Nc(a,b,c,d){var e=!1,f=b,g=c||1;a.cantEdit=!1;a:for(;;){var h=le(a,f.line);if(h.markedSpans)for(var i=0;i<h.markedSpans.length;++i){var j=h.markedSpans[i],k=j.marker;if((null==j.from||(k.inclusiveLeft?j.from<=f.ch:j.from<f.ch))&&(null==j.to||(k.inclusiveRight?j.to>=f.ch:j.to>f.ch))){if(d&&(Ne(k,"beforeCursorEnter"),k.explicitlyCleared)){if(h.markedSpans){--i;continue}break}if(!k.atomic)continue;var l=k.find()[0>g?"from":"to"];if(Cc(l,f)&&(l.ch+=g,l.ch<0?l=l.line>a.first?Gc(a,Bc(l.line-1)):null:l.ch>h.text.length&&(l=l.line<a.first+a.size-1?Bc(l.line+1,0):null),!l)){if(e)return d?(a.cantEdit=!0,Bc(a.first,0)):Nc(a,b,c,!0);e=!0,l=b,g=-g}f=l;continue a}}return f}}function Oc(a){var b=Pc(a,a.doc.sel.head,null,a.options.cursorScrollMargin);if(a.state.focused){var c=a.display,d=pf(c.sizer),e=null;if(b.top+d.top<0?e=!0:b.bottom+d.top>(window.innerHeight||document.documentElement.clientHeight)&&(e=!1),null!=e&&!n){var f="none"==c.cursor.style.display;f&&(c.cursor.style.display="",c.cursor.style.left=b.left+"px",c.cursor.style.top=b.top-c.viewOffset+"px"),c.cursor.scrollIntoView(e),f&&(c.cursor.style.display="none")}}}function Pc(a,b,c,d){for(null==d&&(d=0);;){var e=!1,f=vb(a,b),g=c&&c!=b?vb(a,c):f,h=Rc(a,Math.min(f.left,g.left),Math.min(f.top,g.top)-d,Math.max(f.left,g.left),Math.max(f.bottom,g.bottom)+d),i=a.doc.scrollTop,j=a.doc.scrollLeft;if(null!=h.scrollTop&&(_b(a,h.scrollTop),Math.abs(a.doc.scrollTop-i)>1&&(e=!0)),null!=h.scrollLeft&&(ac(a,h.scrollLeft),Math.abs(a.doc.scrollLeft-j)>1&&(e=!0)),!e)return f}}function Qc(a,b,c,d,e){var f=Rc(a,b,c,d,e);null!=f.scrollTop&&_b(a,f.scrollTop),null!=f.scrollLeft&&ac(a,f.scrollLeft)}function Rc(a,b,c,d,e){var f=a.display,g=Ab(a.display);0>c&&(c=0);var h=f.scroller.clientHeight-Ve,i=f.scroller.scrollTop,j={},k=a.doc.height+gb(f),l=g>c,m=e>k-g;if(i>c)j.scrollTop=l?0:c;else if(e>i+h){var n=Math.min(c,(m?k:e)-h);n!=i&&(j.scrollTop=n)}var o=f.scroller.clientWidth-Ve,p=f.scroller.scrollLeft;b+=f.gutters.offsetWidth,d+=f.gutters.offsetWidth;var q=f.gutters.offsetWidth,r=q+10>b;return p+q>b||r?(r&&(b=0),j.scrollLeft=Math.max(0,b-10-q)):d>o+p-3&&(j.scrollLeft=d+10-o),j}function Sc(a,b,c){a.curOp.updateScrollPos={scrollLeft:null==b?a.doc.scrollLeft:b,scrollTop:null==c?a.doc.scrollTop:c}}function Tc(a,b,c){var d=a.curOp.updateScrollPos||(a.curOp.updateScrollPos={scrollLeft:a.doc.scrollLeft,scrollTop:a.doc.scrollTop}),e=a.display.scroller;d.scrollTop=Math.max(0,Math.min(e.scrollHeight-e.clientHeight,d.scrollTop+c)),d.scrollLeft=Math.max(0,Math.min(e.scrollWidth-e.clientWidth,d.scrollLeft+b))}function Uc(a,b,c,d){var e=a.doc;if(null==c&&(c="add"),"smart"==c)if(a.doc.mode.indent)var f=eb(a,b);else c="prev";var k,g=a.options.tabSize,h=le(e,b),i=Ye(h.text,null,g),j=h.text.match(/^\s*/)[0];if("smart"==c&&(k=a.doc.mode.indent(f,h.text.slice(j.length),h.text),k==We)){if(!d)return;c="prev"}"prev"==c?k=b>e.first?Ye(le(e,b-1).text,null,g):0:"add"==c?k=i+a.options.indentUnit:"subtract"==c?k=i-a.options.indentUnit:"number"==typeof c&&(k=i+c),k=Math.max(0,k);var l="",m=0;if(a.options.indentWithTabs)for(var n=Math.floor(k/g);n;--n)m+=g,l+=" ";k>m&&(l+=$e(k-m)),l!=j?Ac(a.doc,l,Bc(b,0),Bc(b,j.length),"+input"):e.sel.head.line==b&&e.sel.head.ch<j.length&&Lc(e,Bc(b,j.length),Bc(b,j.length),1),h.stateAfter=null}function Vc(a,b,c){var d=b,e=b,f=a.doc;return"number"==typeof b?e=le(f,Fc(f,b)):d=pe(b),null==d?null:c(e,d)?(Ib(a,d,d+1),e):null}function Wc(a,b,c,d,e){function k(){var b=f+c;return b<a.first||b>=a.first+a.size?j=!1:(f=b,i=le(a,b))}function l(a){var b=(e?Lf:Mf)(i,g,c,!0);if(null==b){if(a||!k())return j=!1;g=e?(0>c?Ef:Df)(i):0>c?i.text.length:0}else g=b;return!0}var f=b.line,g=b.ch,h=c,i=le(a,f),j=!0;if("char"==d)l();else if("column"==d)l(!0);else if("word"==d||"group"==d)for(var m=null,n="group"==d,o=!0;!(0>c)||l(!o);o=!1){var p=i.text.charAt(g)||"\n",q=hf(p)?"w":n?/\s/.test(p)?null:"p":null;if(m&&m!=q){0>c&&(c=1,l());break}if(q&&(m=q),c>0&&!l(!o))break}var r=Nc(a,Bc(f,g),h,!0);return j||(r.hitSide=!0),r}function Xc(a,b,c,d){var g,e=a.doc,f=b.left;if("page"==d){var h=Math.min(a.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight);g=b.top+c*(h-(0>c?1.5:.5)*Ab(a.display))}else"line"==d&&(g=c>0?b.bottom+3:b.top-3);for(;;){var i=xb(a,f,g);if(!i.outside)break;if(0>c?0>=g:g>=e.height){i.hitSide=!0;break}g+=5*c}return i}function Yc(a,b){var c=b.ch,d=b.ch;if(a){(b.xRel<0||d==a.length)&&c?--c:++d;for(var e=a.charAt(c),f=hf(e)?hf:/\s/.test(e)?function(a){return/\s/.test(a)}:function(a){return!/\s/.test(a)&&!hf(a)};c>0&&f(a.charAt(c-1));)--c;for(;d<a.length&&f(a.charAt(d));)++d}return{from:Bc(b.line,c),to:Bc(b.line,d)}}function Zc(a,b){Jc(a.doc,Bc(b,0),Gc(a.doc,Bc(b+1,0)))}function ad(a,b,c,d){x.defaults[a]=b,c&&($c[a]=d?function(a,b,d){d!=bd&&c(a,b,d)}:c)}function hd(a,b){if(b===!0)return b;if(a.copyState)return a.copyState(b);var c={};for(var d in b){var e=b[d];e instanceof Array&&(e=e.concat([])),c[d]=e}return c}function id(a,b,c){return a.startState?a.startState(b,c):!0}function ld(a){return"string"==typeof a?kd[a]:a}function md(a,b,c){function d(b){b=ld(b);var e=b[a];if(e===!1)return"stop";if(null!=e&&c(e))return!0;if(b.nofallthrough)return"stop";var f=b.fallthrough;if(null==f)return!1;if("[object Array]"!=Object.prototype.toString.call(f))return d(f);for(var g=0,h=f.length;h>g;++g){var i=d(f[g]);if(i)return i}return!1}for(var e=0;e<b.length;++e){var f=d(b[e]);if(f)return"stop"!=f}}function nd(a){var b=zf[a.keyCode];return"Ctrl"==b||"Alt"==b||"Shift"==b||"Mod"==b}function od(a,b){if(i&&34==a.keyCode&&a["char"])return!1;var c=zf[a.keyCode];return null==c||a.altGraphKey?!1:(a.altKey&&(c="Alt-"+c),(t?a.metaKey:a.ctrlKey)&&(c="Ctrl-"+c),(t?a.ctrlKey:a.metaKey)&&(c="Cmd-"+c),!b&&a.shiftKey&&(c="Shift-"+c),c)}function pd(a,b){this.pos=this.start=0,this.string=a,this.tabSize=b||8,this.lastColumnPos=this.lastColumnValue=0}function qd(a,b){this.lines=[],this.type=b,this.doc=a}function rd(a,b,c,d,e){if(d&&d.shared)return td(a,b,c,d,e);if(a.cm&&!a.cm.curOp)return Fb(a.cm,rd)(a,b,c,d,e);var f=new qd(a,e);if(Dc(c,b)||Cc(b,c)&&"range"==e&&(!d.inclusiveLeft||!d.inclusiveRight))return f;d&&df(d,f),f.replacedWith&&(f.collapsed=!0,f.replacedWith=lf("span",[f.replacedWith],"CodeMirror-widget"),d.handleMouseEvents||(f.replacedWith.ignoreEvents=!0)),f.collapsed&&(w=!0),f.addToHistory&&we(a,{from:b,to:c,origin:"markText"},{head:a.sel.head,anchor:a.sel.anchor},0/0);var i,j,l,g=b.line,h=0,k=a.cm;if(a.iter(g,c.line+1,function(d){k&&f.collapsed&&!k.options.lineWrapping&&Fd(a,d)==k.display.maxLine&&(l=!0);var e={from:null,to:null,marker:f};h+=d.text.length,g==b.line&&(e.from=b.ch,h-=b.ch),g==c.line&&(e.to=c.ch,h-=d.text.length-c.ch),f.collapsed&&(g==c.line&&(j=Cd(d,c.ch)),g==b.line?i=Cd(d,b.ch):oe(d,0)),wd(d,e),++g}),f.collapsed&&a.iter(b.line,c.line+1,function(b){Gd(a,b)&&oe(b,0)}),f.clearOnEnter&&Le(f,"beforeCursorEnter",function(){f.clear()}),f.readOnly&&(v=!0,(a.history.done.length||a.history.undone.length)&&a.clearHistory()),f.collapsed){if(i!=j)throw new Error("Inserting collapsed marker overlapping an existing one");f.size=h,f.atomic=!0}return k&&(l&&(k.curOp.updateMaxLine=!0),(f.className||f.title||f.startStyle||f.endStyle||f.collapsed)&&Ib(k,b.line,c.line+1),f.atomic&&Mc(k)),f}function sd(a,b){this.markers=a,this.primary=b;for(var c=0,d=this;c<a.length;++c)a[c].parent=this,Le(a[c],"clear",function(){d.clear()})}function td(a,b,c,d,e){d=df(d),d.shared=!1;var f=[rd(a,b,c,d,e)],g=f[0],h=d.replacedWith;return je(a,function(a){h&&(d.replacedWith=h.cloneNode(!0)),f.push(rd(a,Gc(a,b),Gc(a,c),d,e));for(var i=0;i<a.linked.length;++i)if(a.linked[i].isParent)return;g=_e(f)}),new sd(f,g)}function ud(a,b){if(a)for(var c=0;c<a.length;++c){var d=a[c];if(d.marker==b)return d}}function vd(a,b){for(var c,d=0;d<a.length;++d)a[d]!=b&&(c||(c=[])).push(a[d]);return c}function wd(a,b){a.markedSpans=a.markedSpans?a.markedSpans.concat([b]):[b],b.marker.attachLine(a)}function xd(a,b,c){if(a)for(var e,d=0;d<a.length;++d){var f=a[d],g=f.marker,h=null==f.from||(g.inclusiveLeft?f.from<=b:f.from<b);if(h||(g.inclusiveLeft&&g.inclusiveRight||"bookmark"==g.type)&&f.from==b&&(!c||!f.marker.insertLeft)){var i=null==f.to||(g.inclusiveRight?f.to>=b:f.to>b);(e||(e=[])).push({from:f.from,to:i?null:f.to,marker:g})}}return e}function yd(a,b,c){if(a)for(var e,d=0;d<a.length;++d){var f=a[d],g=f.marker,h=null==f.to||(g.inclusiveRight?f.to>=b:f.to>b);if(h||"bookmark"==g.type&&f.from==b&&(!c||f.marker.insertLeft)){var i=null==f.from||(g.inclusiveLeft?f.from<=b:f.from<b);(e||(e=[])).push({from:i?null:f.from-b,to:null==f.to?null:f.to-b,marker:g})}}return e}function zd(a,b){var c=Ic(a,b.from.line)&&le(a,b.from.line).markedSpans,d=Ic(a,b.to.line)&&le(a,b.to.line).markedSpans;if(!c&&!d)return null;var e=b.from.ch,f=b.to.ch,g=Cc(b.from,b.to),h=xd(c,e,g),i=yd(d,f,g),j=1==b.text.length,k=_e(b.text).length+(j?e:0);if(h)for(var l=0;l<h.length;++l){var m=h[l];if(null==m.to){var n=ud(i,m.marker);n?j&&(m.to=null==n.to?null:n.to+k):m.to=e}}if(i)for(var l=0;l<i.length;++l){var m=i[l];if(null!=m.to&&(m.to+=k),null==m.from){var n=ud(h,m.marker);n||(m.from=k,j&&(h||(h=[])).push(m))}else m.from+=k,j&&(h||(h=[])).push(m)}if(j&&h){for(var l=0;l<h.length;++l)null!=h[l].from&&h[l].from==h[l].to&&"bookmark"!=h[l].marker.type&&h.splice(l--,1);h.length||(h=null)}var o=[h];if(!j){var q,p=b.text.length-2;if(p>0&&h)for(var l=0;l<h.length;++l)null==h[l].to&&(q||(q=[])).push({from:null,to:null,marker:h[l].marker});for(var l=0;p>l;++l)o.push(q);o.push(i)}return o}function Ad(a,b){var c=ye(a,b),d=zd(a,b);if(!c)return d;if(!d)return c;for(var e=0;e<c.length;++e){var f=c[e],g=d[e];if(f&&g)a:for(var h=0;h<g.length;++h){for(var i=g[h],j=0;j<f.length;++j)if(f[j].marker==i.marker)continue a;f.push(i)}else g&&(c[e]=g)}return c}function Bd(a,b,c){var d=null;if(a.iter(b.line,c.line+1,function(a){if(a.markedSpans)for(var b=0;b<a.markedSpans.length;++b){var c=a.markedSpans[b].marker;!c.readOnly||d&&-1!=bf(d,c)||(d||(d=[])).push(c)}}),!d)return null;for(var e=[{from:b,to:c}],f=0;f<d.length;++f)for(var g=d[f],h=g.find(),i=0;i<e.length;++i){var j=e[i];if(!Dc(j.to,h.from)&&!Dc(h.to,j.from)){var k=[i,1];(Dc(j.from,h.from)||!g.inclusiveLeft&&Cc(j.from,h.from))&&k.push({from:j.from,to:h.from}),(Dc(h.to,j.to)||!g.inclusiveRight&&Cc(j.to,h.to))&&k.push({from:h.to,to:j.to}),e.splice.apply(e,k),i+=k.length-1}}return e}function Cd(a,b){var d,c=w&&a.markedSpans;if(c)for(var e,f=0;f<c.length;++f)e=c[f],e.marker.collapsed&&(null==e.from||e.from<b)&&(null==e.to||e.to>b)&&(!d||d.width<e.marker.width)&&(d=e.marker);return d}function Dd(a){return Cd(a,-1)}function Ed(a){return Cd(a,a.text.length+1)}function Fd(a,b){for(var c;c=Dd(b);)b=le(a,c.find().from.line);return b}function Gd(a,b){var c=w&&b.markedSpans;if(c)for(var d,e=0;e<c.length;++e)if(d=c[e],d.marker.collapsed){if(null==d.from)return!0;if(!d.marker.replacedWith&&0==d.from&&d.marker.inclusiveLeft&&Hd(a,b,d))return!0}}function Hd(a,b,c){if(null==c.to){var d=c.marker.find().to,e=le(a,d.line);return Hd(a,e,ud(e.markedSpans,c.marker))}if(c.marker.inclusiveRight&&c.to==b.text.length)return!0;for(var f,g=0;g<b.markedSpans.length;++g)if(f=b.markedSpans[g],f.marker.collapsed&&!f.marker.replacedWith&&f.from==c.to&&(f.marker.inclusiveLeft||c.marker.inclusiveRight)&&Hd(a,b,f))return!0}function Id(a){var b=a.markedSpans;if(b){for(var c=0;c<b.length;++c)b[c].marker.detachLine(a);a.markedSpans=null}}function Jd(a,b){if(b){for(var c=0;c<b.length;++c)b[c].marker.attachLine(a);a.markedSpans=b}}function Ld(a){return function(){var b=!this.cm.curOp;b&&Db(this.cm);try{var c=a.apply(this,arguments)}finally{b&&Eb(this.cm)}return c}}function Md(a){return null!=a.height?a.height:(a.node.parentNode&&1==a.node.parentNode.nodeType||nf(a.cm.display.measure,lf("div",[a.node],null,"position: relative")),a.height=a.node.offsetHeight)}function Nd(a,b,c,d){var e=new Kd(a,c,d);return e.noHScroll&&(a.display.alignWidgets=!0),Vc(a,b,function(b){var c=b.widgets||(b.widgets=[]);if(null==e.insertAt?c.push(e):c.splice(Math.min(c.length-1,Math.max(0,e.insertAt)),0,e),e.line=b,!Gd(a.doc,b)||e.showIfHidden){var d=re(a,b)<a.doc.scrollTop;oe(b,b.height+Md(e)),d&&Tc(a,0,e.height)}return!0}),e}function Pd(a,b,c,d){a.text=b,a.stateAfter&&(a.stateAfter=null),a.styles&&(a.styles=null),null!=a.order&&(a.order=null),Id(a),Jd(a,c);var e=d?d(a):1;e!=a.height&&oe(a,e)}function Qd(a){a.parent=null,Id(a)}function Rd(a,b,c,d,e){var f=c.flattenSpans;null==f&&(f=a.options.flattenSpans);var j,g=0,h=null,i=new pd(b,a.options.tabSize);for(""==b&&c.blankLine&&c.blankLine(d);!i.eol();)i.pos>a.options.maxHighlightLength?(f=!1,i.pos=b.length,j=null):j=c.token(i,d),f&&h==j||(g<i.start&&e(i.start,h),g=i.start,h=j),i.start=i.pos;for(;g<i.pos;){var k=Math.min(i.pos,g+5e4);e(k,h),g=k}}function Sd(a,b,c){var d=[a.state.modeGen];Rd(a,b.text,a.doc.mode,c,function(a,b){d.push(a,b)});for(var e=0;e<a.state.overlays.length;++e){var f=a.state.overlays[e],g=1,h=0;Rd(a,b.text,f.mode,!0,function(a,b){for(var c=g;a>h;){var e=d[g];e>a&&d.splice(g,1,a,d[g+1],e),g+=2,h=Math.min(a,e)}if(b)if(f.opaque)d.splice(c,g-c,a,b),g=c+2;else for(;g>c;c+=2){var i=d[c+1];d[c+1]=i?i+" "+b:b}})}return d}function Td(a,b){return b.styles&&b.styles[0]==a.state.modeGen||(b.styles=Sd(a,b,b.stateAfter=eb(a,pe(b)))),b.styles}function Ud(a,b,c){var d=a.doc.mode,e=new pd(b.text,a.options.tabSize);for(""==b.text&&d.blankLine&&d.blankLine(c);!e.eol()&&e.pos<=a.options.maxHighlightLength;)d.token(e,c),e.start=e.pos}function Wd(a,b){if(!a)return null;for(;;){var c=a.match(/(?:^|\s)line-(background-)?(\S+)/);if(!c)break;a=a.slice(0,c.index)+a.slice(c.index+c[0].length);var d=c[1]?"bgClass":"textClass";null==b[d]?b[d]=c[2]:new RegExp("(?:^|s)"+c[2]+"(?:$|s)").test(b[d])||(b[d]+=" "+c[2])}return Vd[a]||(Vd[a]="cm-"+a.replace(/ +/g," cm-"))}function Xd(a,c,d,g){for(var h,i=c,j=!0;h=Dd(i);)i=le(a.doc,h.find().from.line);var k={pre:lf("pre"),col:0,pos:0,measure:null,measuredSomething:!1,cm:a,copyWidgets:g};do{i.text&&(j=!1),k.measure=i==c&&d,k.pos=0,k.addToken=k.measure?$d:Zd,(b||f)&&a.getOption("lineWrapping")&&(k.addToken=_d(k.addToken));var l=be(i,k,Td(a,i));d&&i==c&&!k.measuredSomething&&(d[0]=k.pre.appendChild(vf(a.display.measure)),k.measuredSomething=!0),l&&(i=le(a.doc,l.to.line))}while(l);!d||k.measuredSomething||d[0]||(d[0]=k.pre.appendChild(j?lf("span","\xa0"):vf(a.display.measure))),k.pre.firstChild||Gd(a.doc,c)||k.pre.appendChild(document.createTextNode("\xa0"));var m;if(d&&(b||e)&&(m=se(i))){var n=m.length-1;m[n].from==m[n].to&&--n;var o=m[n],p=m[n-1];if(o.from+1==o.to&&p&&o.level<p.level){var q=d[k.pos-1];q&&q.parentNode.insertBefore(q.measureRight=vf(a.display.measure),q.nextSibling)}}var r=k.textClass?k.textClass+" "+(c.textClass||""):c.textClass;return r&&(k.pre.className=r),Ne(a,"renderLine",a,c,k.pre),k}function Zd(a,b,c,d,e,f){if(b){if(Yd.test(b))for(var g=document.createDocumentFragment(),h=0;;){Yd.lastIndex=h;var i=Yd.exec(b),j=i?i.index-h:b.length-h;if(j&&(g.appendChild(document.createTextNode(b.slice(h,h+j))),a.col+=j),!i)break;if(h+=j+1," "==i[0]){var k=a.cm.options.tabSize,l=k-a.col%k;g.appendChild(lf("span",$e(l),"cm-tab")),a.col+=l}else{var m=lf("span","\u2022","cm-invalidchar");m.title="\\u"+i[0].charCodeAt(0).toString(16),g.appendChild(m),a.col+=1}}else{a.col+=b.length;var g=document.createTextNode(b)}if(c||d||e||a.measure){var n=c||"";d&&(n+=d),e&&(n+=e);var m=lf("span",[g],n);return f&&(m.title=f),a.pre.appendChild(m)}a.pre.appendChild(g)}}function $d(a,c,d,e,f){for(var g=a.cm.options.lineWrapping,h=0;h<c.length;++h){var i=c.charAt(h),j=0==h;i>="\ud800"&&"\udbff">i&&h<c.length-1?(i=c.slice(h,h+2),++h):h&&g&&rf(c,h)&&a.pre.appendChild(lf("wbr"));var k=a.measure[a.pos],l=a.measure[a.pos]=Zd(a,i,d,j&&e,h==c.length-1&&f);k&&(l.leftSide=k.leftSide||k),b&&g&&" "==i&&h&&!/\s/.test(c.charAt(h-1))&&h<c.length-1&&!/\s/.test(c.charAt(h+1))&&(l.style.whiteSpace="normal"),a.pos+=i.length}c.length&&(a.measuredSomething=!0)}function _d(a){function b(a){for(var b=" ",c=0;c<a.length-2;++c)b+=c%2?" ":"\xa0";return b+=" "}return function(c,d,e,f,g,h){return a(c,d.replace(/ {3,}/g,b),e,f,g,h)}}function ae(a,b,c,d){var e=!d&&c.replacedWith;if(e&&(a.copyWidgets&&(e=e.cloneNode(!0)),a.pre.appendChild(e),a.measure)){if(b)a.measure[a.pos]=e;else{var f=vf(a.cm.display.measure);if("bookmark"!=c.type||c.insertLeft){if(a.measure[a.pos])return;a.measure[a.pos]=a.pre.insertBefore(f,e)}else a.measure[a.pos]=a.pre.appendChild(f)}a.measuredSomething=!0}a.pos+=b}function be(a,b,c){var d=a.markedSpans,e=a.text,f=0;if(d)for(var k,m,n,o,p,q,h=e.length,i=0,g=1,j="",l=0;;){if(l==i){m=n=o=p="",q=null,l=1/0;for(var r=[],s=0;s<d.length;++s){var t=d[s],u=t.marker;t.from<=i&&(null==t.to||t.to>i)?(null!=t.to&&l>t.to&&(l=t.to,n=""),u.className&&(m+=" "+u.className),u.startStyle&&t.from==i&&(o+=" "+u.startStyle),u.endStyle&&t.to==l&&(n+=" "+u.endStyle),u.title&&!p&&(p=u.title),u.collapsed&&(!q||q.marker.size<u.size)&&(q=t)):t.from>i&&l>t.from&&(l=t.from),"bookmark"==u.type&&t.from==i&&u.replacedWith&&r.push(u)}if(q&&(q.from||0)==i&&(ae(b,(null==q.to?h:q.to)-i,q.marker,null==q.from),null==q.to))return q.marker.find();if(!q&&r.length)for(var s=0;s<r.length;++s)ae(b,0,r[s])
-}if(i>=h)break;for(var v=Math.min(h,l);;){if(j){var w=i+j.length;if(!q){var x=w>v?j.slice(0,v-i):j;b.addToken(b,x,k?k+m:m,o,i+x.length==l?n:"",p)}if(w>=v){j=j.slice(v-i),i=v;break}i=w,o=""}j=e.slice(f,f=c[g++]),k=Wd(c[g++],b)}}else for(var g=1;g<c.length;g+=2)b.addToken(b,e.slice(f,f=c[g]),Wd(c[g+1],b))}function ce(a,b,c,d,e){function f(a){return c?c[a]:null}function g(a,c,d){Pd(a,c,d,e),Qe(a,"change",a,b)}var h=b.from,i=b.to,j=b.text,k=le(a,h.line),l=le(a,i.line),m=_e(j),n=f(j.length-1),o=i.line-h.line;if(0==h.ch&&0==i.ch&&""==m){for(var p=0,q=j.length-1,r=[];q>p;++p)r.push(new Od(j[p],f(p),e));g(l,l.text,n),o&&a.remove(h.line,o),r.length&&a.insert(h.line,r)}else if(k==l)if(1==j.length)g(k,k.text.slice(0,h.ch)+m+k.text.slice(i.ch),n);else{for(var r=[],p=1,q=j.length-1;q>p;++p)r.push(new Od(j[p],f(p),e));r.push(new Od(m+k.text.slice(i.ch),n,e)),g(k,k.text.slice(0,h.ch)+j[0],f(0)),a.insert(h.line+1,r)}else if(1==j.length)g(k,k.text.slice(0,h.ch)+j[0]+l.text.slice(i.ch),f(0)),a.remove(h.line+1,o);else{g(k,k.text.slice(0,h.ch)+j[0],f(0)),g(l,m+l.text.slice(i.ch),n);for(var p=1,q=j.length-1,r=[];q>p;++p)r.push(new Od(j[p],f(p),e));o>1&&a.remove(h.line+1,o-1),a.insert(h.line+1,r)}Qe(a,"change",a,b),Lc(a,d.anchor,d.head,null,!0)}function de(a){this.lines=a,this.parent=null;for(var b=0,c=a.length,d=0;c>b;++b)a[b].parent=this,d+=a[b].height;this.height=d}function ee(a){this.children=a;for(var b=0,c=0,d=0,e=a.length;e>d;++d){var f=a[d];b+=f.chunkSize(),c+=f.height,f.parent=this}this.size=b,this.height=c,this.parent=null}function je(a,b,c){function d(a,e,f){if(a.linked)for(var g=0;g<a.linked.length;++g){var h=a.linked[g];if(h.doc!=e){var i=f&&h.sharedHist;(!c||i)&&(b(h.doc,i),d(h.doc,a,i))}}}d(a,null,!0)}function ke(a,b){if(b.cm)throw new Error("This document is already in use.");a.doc=b,b.cm=a,C(a),z(a),a.options.lineWrapping||I(a),a.options.mode=b.modeOption,Ib(a)}function le(a,b){for(b-=a.first;!a.lines;)for(var c=0;;++c){var d=a.children[c],e=d.chunkSize();if(e>b){a=d;break}b-=e}return a.lines[b]}function me(a,b,c){var d=[],e=b.line;return a.iter(b.line,c.line+1,function(a){var f=a.text;e==c.line&&(f=f.slice(0,c.ch)),e==b.line&&(f=f.slice(b.ch)),d.push(f),++e}),d}function ne(a,b,c){var d=[];return a.iter(b,c,function(a){d.push(a.text)}),d}function oe(a,b){for(var c=b-a.height,d=a;d;d=d.parent)d.height+=c}function pe(a){if(null==a.parent)return null;for(var b=a.parent,c=bf(b.lines,a),d=b.parent;d;b=d,d=d.parent)for(var e=0;d.children[e]!=b;++e)c+=d.children[e].chunkSize();return c+b.first}function qe(a,b){var c=a.first;a:do{for(var d=0,e=a.children.length;e>d;++d){var f=a.children[d],g=f.height;if(g>b){a=f;continue a}b-=g,c+=f.chunkSize()}return c}while(!a.lines);for(var d=0,e=a.lines.length;e>d;++d){var h=a.lines[d],i=h.height;if(i>b)break;b-=i}return c+d}function re(a,b){b=Fd(a.doc,b);for(var c=0,d=b.parent,e=0;e<d.lines.length;++e){var f=d.lines[e];if(f==b)break;c+=f.height}for(var g=d.parent;g;d=g,g=d.parent)for(var e=0;e<g.children.length;++e){var h=g.children[e];if(h==d)break;c+=h.height}return c}function se(a){var b=a.order;return null==b&&(b=a.order=Nf(a.text)),b}function te(a){return{done:[],undone:[],undoDepth:1/0,lastTime:0,lastOp:null,lastOrigin:null,generation:a||1,maxGeneration:a||1}}function ue(a,b,c,d){var e=b["spans_"+a.id],f=0;a.iter(Math.max(a.first,c),Math.min(a.first+a.size,d),function(c){c.markedSpans&&((e||(e=b["spans_"+a.id]={}))[f]=c.markedSpans),++f})}function ve(a,b){var c={line:b.from.line,ch:b.from.ch},d={from:c,to:qc(b),text:me(a,b.from,b.to)};return ue(a,d,b.from.line,b.to.line+1),je(a,function(a){ue(a,d,b.from.line,b.to.line+1)},!0),d}function we(a,b,c,d){var e=a.history;e.undone.length=0;var f=+new Date,g=_e(e.done);if(g&&(e.lastOp==d||e.lastOrigin==b.origin&&b.origin&&("+"==b.origin.charAt(0)&&a.cm&&e.lastTime>f-a.cm.options.historyEventDelay||"*"==b.origin.charAt(0)))){var h=_e(g.changes);Cc(b.from,b.to)&&Cc(b.from,h.to)?h.to=qc(b):g.changes.push(ve(a,b)),g.anchorAfter=c.anchor,g.headAfter=c.head}else for(g={changes:[ve(a,b)],generation:e.generation,anchorBefore:a.sel.anchor,headBefore:a.sel.head,anchorAfter:c.anchor,headAfter:c.head},e.done.push(g),e.generation=++e.maxGeneration;e.done.length>e.undoDepth;)e.done.shift();e.lastTime=f,e.lastOp=d,e.lastOrigin=b.origin}function xe(a){if(!a)return null;for(var c,b=0;b<a.length;++b)a[b].marker.explicitlyCleared?c||(c=a.slice(0,b)):c&&c.push(a[b]);return c?c.length?c:null:a}function ye(a,b){var c=b["spans_"+a.id];if(!c)return null;for(var d=0,e=[];d<b.text.length;++d)e.push(xe(c[d]));return e}function ze(a,b){for(var c=0,d=[];c<a.length;++c){var e=a[c],f=e.changes,g=[];d.push({changes:g,anchorBefore:e.anchorBefore,headBefore:e.headBefore,anchorAfter:e.anchorAfter,headAfter:e.headAfter});for(var h=0;h<f.length;++h){var j,i=f[h];if(g.push({from:i.from,to:i.to,text:i.text}),b)for(var k in i)(j=k.match(/^spans_(\d+)$/))&&bf(b,Number(j[1]))>-1&&(_e(g)[k]=i[k],delete i[k])}}return d}function Ae(a,b,c,d){c<a.line?a.line+=d:b<a.line&&(a.line=b,a.ch=0)}function Be(a,b,c,d){for(var e=0;e<a.length;++e){for(var f=a[e],g=!0,h=0;h<f.changes.length;++h){var i=f.changes[h];if(f.copied||(i.from=Ec(i.from),i.to=Ec(i.to)),c<i.from.line)i.from.line+=d,i.to.line+=d;else if(b<=i.to.line){g=!1;break}}f.copied||(f.anchorBefore=Ec(f.anchorBefore),f.headBefore=Ec(f.headBefore),f.anchorAfter=Ec(f.anchorAfter),f.readAfter=Ec(f.headAfter),f.copied=!0),g?(Ae(f.anchorBefore),Ae(f.headBefore),Ae(f.anchorAfter),Ae(f.headAfter)):(a.splice(0,e+1),e=0)}}function Ce(a,b){var c=b.from.line,d=b.to.line,e=b.text.length-(d-c)-1;Be(a.done,c,d,e),Be(a.undone,c,d,e)}function De(){Ie(this)}function Ee(a){return a.stop||(a.stop=De),a}function Fe(a){a.preventDefault?a.preventDefault():a.returnValue=!1}function Ge(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0}function He(a){return null!=a.defaultPrevented?a.defaultPrevented:0==a.returnValue}function Ie(a){Fe(a),Ge(a)}function Je(a){return a.target||a.srcElement}function Ke(a){var b=a.which;return null==b&&(1&a.button?b=1:2&a.button?b=3:4&a.button&&(b=2)),q&&a.ctrlKey&&1==b&&(b=3),b}function Le(a,b,c){if(a.addEventListener)a.addEventListener(b,c,!1);else if(a.attachEvent)a.attachEvent("on"+b,c);else{var d=a._handlers||(a._handlers={}),e=d[b]||(d[b]=[]);e.push(c)}}function Me(a,b,c){if(a.removeEventListener)a.removeEventListener(b,c,!1);else if(a.detachEvent)a.detachEvent("on"+b,c);else{var d=a._handlers&&a._handlers[b];if(!d)return;for(var e=0;e<d.length;++e)if(d[e]==c){d.splice(e,1);break}}}function Ne(a,b){var c=a._handlers&&a._handlers[b];if(c)for(var d=Array.prototype.slice.call(arguments,2),e=0;e<c.length;++e)c[e].apply(null,d)}function Qe(a,b){function e(a){return function(){a.apply(null,d)}}var c=a._handlers&&a._handlers[b];if(c){var d=Array.prototype.slice.call(arguments,2);Oe||(++Pe,Oe=[],setTimeout(Se,0));for(var f=0;f<c.length;++f)Oe.push(e(c[f]))}}function Re(a,b,c){return Ne(a,c||b.type,a,b),He(b)||b.codemirrorIgnore}function Se(){--Pe;var a=Oe;Oe=null;for(var b=0;b<a.length;++b)a[b]()}function Te(a,b){var c=a._handlers&&a._handlers[b];return c&&c.length>0}function Ue(a){a.prototype.on=function(a,b){Le(this,a,b)},a.prototype.off=function(a,b){Me(this,a,b)}}function Xe(){this.id=null}function Ye(a,b,c,d,e){null==b&&(b=a.search(/[^\s\u00a0]/),-1==b&&(b=a.length));for(var f=d||0,g=e||0;b>f;++f)" "==a.charAt(f)?g+=c-g%c:++g;return g}function $e(a){for(;Ze.length<=a;)Ze.push(_e(Ze)+" ");return Ze[a]}function _e(a){return a[a.length-1]}function af(a){if(o)a.selectionStart=0,a.selectionEnd=a.value.length;else try{a.select()}catch(b){}}function bf(a,b){if(a.indexOf)return a.indexOf(b);for(var c=0,d=a.length;d>c;++c)if(a[c]==b)return c;return-1}function cf(a,b){function c(){}c.prototype=a;var d=new c;return b&&df(b,d),d}function df(a,b){b||(b={});for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}function ef(a){for(var b=[],c=0;a>c;++c)b.push(void 0);return b}function ff(a){var b=Array.prototype.slice.call(arguments,1);return function(){return a.apply(null,b)}}function hf(a){return/\w/.test(a)||a>"\x80"&&(a.toUpperCase()!=a.toLowerCase()||gf.test(a))}function jf(a){for(var b in a)if(a.hasOwnProperty(b)&&a[b])return!1;return!0}function lf(a,b,c,d){var e=document.createElement(a);if(c&&(e.className=c),d&&(e.style.cssText=d),"string"==typeof b)of(e,b);else if(b)for(var f=0;f<b.length;++f)e.appendChild(b[f]);return e}function mf(a){for(var b=a.childNodes.length;b>0;--b)a.removeChild(a.firstChild);return a}function nf(a,b){return mf(a).appendChild(b)}function of(a,b){d?(a.innerHTML="",a.appendChild(document.createTextNode(b))):a.textContent=b}function pf(a){return a.getBoundingClientRect()}function rf(){return!1}function tf(a){if(null!=sf)return sf;var b=lf("div",null,null,"width: 50px; height: 50px; overflow-x: scroll");return nf(a,b),b.offsetWidth&&(sf=b.offsetHeight-b.clientHeight),sf||0}function vf(a){if(null==uf){var b=lf("span","\u200b");nf(a,lf("span",[b,document.createTextNode("x")])),0!=a.firstChild.offsetHeight&&(uf=b.offsetWidth<=1&&b.offsetHeight>2&&!c)}return uf?lf("span","\u200b"):lf("span","\xa0",null,"display: inline-block; width: 1px; margin-right: -1px")}function Af(a,b,c,d){if(!a)return d(b,c,"ltr");for(var e=!1,f=0;f<a.length;++f){var g=a[f];(g.from<c&&g.to>b||b==c&&g.to==b)&&(d(Math.max(g.from,b),Math.min(g.to,c),1==g.level?"rtl":"ltr"),e=!0)}e||d(b,c,"ltr")}function Bf(a){return a.level%2?a.to:a.from}function Cf(a){return a.level%2?a.from:a.to}function Df(a){var b=se(a);return b?Bf(b[0]):0}function Ef(a){var b=se(a);return b?Cf(_e(b)):a.text.length}function Ff(a,b){var c=le(a.doc,b),d=Fd(a.doc,c);d!=c&&(b=pe(d));var e=se(d),f=e?e[0].level%2?Ef(d):Df(d):0;return Bc(b,f)}function Gf(a,b){for(var c,d;c=Ed(d=le(a.doc,b));)b=c.find().to.line;var e=se(d),f=e?e[0].level%2?Df(d):Ef(d):d.text.length;return Bc(b,f)}function Hf(a,b,c){var d=a[0].level;return b==d?!0:c==d?!1:c>b}function Jf(a,b){for(var d,c=0;c<a.length;++c){var e=a[c];if(e.from<b&&e.to>b)return If=null,c;if(e.from==b||e.to==b){if(null!=d)return Hf(a,e.level,a[d].level)?(If=d,c):(If=c,d);d=c}}return If=null,d}function Kf(a,b,c,d){if(!d)return b+c;do b+=c;while(b>0&&kf.test(a.text.charAt(b)));return b}function Lf(a,b,c,d){var e=se(a);if(!e)return Mf(a,b,c,d);for(var f=Jf(e,b),g=e[f],h=Kf(a,b,g.level%2?-c:c,d);;){if(h>g.from&&h<g.to)return h;if(h==g.from||h==g.to)return Jf(e,h)==f?h:(g=e[f+=c],c>0==g.level%2?g.to:g.from);if(g=e[f+=c],!g)return null;h=c>0==g.level%2?Kf(a,g.to,-1,d):Kf(a,g.from,1,d)}}function Mf(a,b,c,d){var e=b+c;if(d)for(;e>0&&kf.test(a.text.charAt(e));)e+=c;return 0>e||e>a.text.length?null:e}var a=/gecko\/\d/i.test(navigator.userAgent),b=/MSIE \d/.test(navigator.userAgent),c=b&&(null==document.documentMode||document.documentMode<8),d=b&&(null==document.documentMode||document.documentMode<9),e=/Trident\/([7-9]|\d{2,})\./,f=/WebKit\//.test(navigator.userAgent),g=f&&/Qt\/\d+\.\d+/.test(navigator.userAgent),h=/Chrome\//.test(navigator.userAgent),i=/Opera\//.test(navigator.userAgent),j=/Apple Computer/.test(navigator.vendor),k=/KHTML\//.test(navigator.userAgent),l=/Mac OS X 1\d\D([7-9]|\d\d)\D/.test(navigator.userAgent),m=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent),n=/PhantomJS/.test(navigator.userAgent),o=/AppleWebKit/.test(navigator.userAgent)&&/Mobile\/\w+/.test(navigator.userAgent),p=o||/Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent),q=o||/Mac/.test(navigator.platform),r=/win/i.test(navigator.platform),s=i&&navigator.userAgent.match(/Version\/(\d*\.\d*)/);s&&(s=Number(s[1])),s&&s>=15&&(i=!1,f=!0);var zb,Sb,Tb,t=q&&(g||i&&(null==s||12.11>s)),u=a||b&&!d,v=!1,w=!1,Cb=0,Yb=0,bc=0,cc=null;b?cc=-.53:a?cc=15:h?cc=-.7:j&&(cc=-1/3);var gc,oc,jc=null,qc=x.changeEnd=function(a){return a.text?Bc(a.from.line+a.text.length-1,_e(a.text).length+(1==a.text.length?a.from.ch:0)):a.to};x.Pos=Bc,x.prototype={constructor:x,focus:function(){window.focus(),Nb(this),mc(this),Kb(this)},setOption:function(a,b){var c=this.options,d=c[a];(c[a]!=b||"mode"==a)&&(c[a]=b,$c.hasOwnProperty(a)&&Fb(this,$c[a])(this,b,d))},getOption:function(a){return this.options[a]},getDoc:function(){return this.doc},addKeyMap:function(a,b){this.state.keyMaps[b?"push":"unshift"](a)},removeKeyMap:function(a){for(var b=this.state.keyMaps,c=0;c<b.length;++c)if(b[c]==a||"string"!=typeof b[c]&&b[c].name==a)return b.splice(c,1),!0},addOverlay:Fb(null,function(a,b){var c=a.token?a:x.getMode(this.options,a);if(c.startState)throw new Error("Overlays may not be stateful.");this.state.overlays.push({mode:c,modeSpec:a,opaque:b&&b.opaque}),this.state.modeGen++,Ib(this)}),removeOverlay:Fb(null,function(a){for(var b=this.state.overlays,c=0;c<b.length;++c){var d=b[c].modeSpec;if(d==a||"string"==typeof a&&d.name==a)return b.splice(c,1),this.state.modeGen++,Ib(this),void 0}}),indentLine:Fb(null,function(a,b,c){"string"!=typeof b&&"number"!=typeof b&&(b=null==b?this.options.smartIndent?"smart":"prev":b?"add":"subtract"),Ic(this.doc,a)&&Uc(this,a,b,c)}),indentSelection:Fb(null,function(a){var b=this.doc.sel;if(Cc(b.from,b.to))return Uc(this,b.from.line,a);for(var c=b.to.line-(b.to.ch?0:1),d=b.from.line;c>=d;++d)Uc(this,d,a)}),getTokenAt:function(a,b){var c=this.doc;a=Gc(c,a);for(var d=eb(this,a.line,b),e=this.doc.mode,f=le(c,a.line),g=new pd(f.text,this.options.tabSize);g.pos<a.ch&&!g.eol();){g.start=g.pos;var h=e.token(g,d)}return{start:g.start,end:g.pos,string:g.current(),className:h||null,type:h||null,state:d}},getTokenTypeAt:function(a){a=Gc(this.doc,a);var b=Td(this,le(this.doc,a.line)),c=0,d=(b.length-1)/2,e=a.ch;if(0==e)return b[2];for(;;){var f=c+d>>1;if((f?b[2*f-1]:0)>=e)d=f;else{if(!(b[2*f+1]<e))return b[2*f+2];c=f+1}}},getModeAt:function(a){var b=this.doc.mode;return b.innerMode?x.innerMode(b,this.getTokenAt(a).state).mode:b},getHelper:function(a,b){if(gd.hasOwnProperty(b)){var c=gd[b],d=this.getModeAt(a);return d[b]&&c[d[b]]||d.helperType&&c[d.helperType]||c[d.name]}},getStateAfter:function(a,b){var c=this.doc;return a=Fc(c,null==a?c.first+c.size-1:a),eb(this,a+1,b)},cursorCoords:function(a,b){var c,d=this.doc.sel;return c=null==a?d.head:"object"==typeof a?Gc(this.doc,a):a?d.from:d.to,vb(this,c,b||"page")},charCoords:function(a,b){return ub(this,Gc(this.doc,a),b||"page")},coordsChar:function(a,b){return a=tb(this,a,b||"page"),xb(this,a.left,a.top)},lineAtHeight:function(a,b){return a=tb(this,{top:a,left:0},b||"page").top,qe(this.doc,a+this.display.viewOffset)},heightAtLine:function(a,b){var c=!1,d=this.doc.first+this.doc.size-1;a<this.doc.first?a=this.doc.first:a>d&&(a=d,c=!0);var e=le(this.doc,a);return sb(this,le(this.doc,a),{top:0,left:0},b||"page").top+(c?e.height:0)},defaultTextHeight:function(){return Ab(this.display)},defaultCharWidth:function(){return Bb(this.display)},setGutterMarker:Fb(null,function(a,b,c){return Vc(this,a,function(a){var d=a.gutterMarkers||(a.gutterMarkers={});return d[b]=c,!c&&jf(d)&&(a.gutterMarkers=null),!0})}),clearGutter:Fb(null,function(a){var b=this,c=b.doc,d=c.first;c.iter(function(c){c.gutterMarkers&&c.gutterMarkers[a]&&(c.gutterMarkers[a]=null,Ib(b,d,d+1),jf(c.gutterMarkers)&&(c.gutterMarkers=null)),++d})}),addLineClass:Fb(null,function(a,b,c){return Vc(this,a,function(a){var d="text"==b?"textClass":"background"==b?"bgClass":"wrapClass";if(a[d]){if(new RegExp("(?:^|\\s)"+c+"(?:$|\\s)").test(a[d]))return!1;a[d]+=" "+c}else a[d]=c;return!0})}),removeLineClass:Fb(null,function(a,b,c){return Vc(this,a,function(a){var d="text"==b?"textClass":"background"==b?"bgClass":"wrapClass",e=a[d];if(!e)return!1;if(null==c)a[d]=null;else{var f=e.match(new RegExp("(?:^|\\s+)"+c+"(?:$|\\s+)"));if(!f)return!1;var g=f.index+f[0].length;a[d]=e.slice(0,f.index)+(f.index&&g!=e.length?" ":"")+e.slice(g)||null}return!0})}),addLineWidget:Fb(null,function(a,b,c){return Nd(this,a,b,c)}),removeLineWidget:function(a){a.clear()},lineInfo:function(a){if("number"==typeof a){if(!Ic(this.doc,a))return null;var b=a;if(a=le(this.doc,a),!a)return null}else{var b=pe(a);if(null==b)return null}return{line:b,handle:a,text:a.text,gutterMarkers:a.gutterMarkers,textClass:a.textClass,bgClass:a.bgClass,wrapClass:a.wrapClass,widgets:a.widgets}},getViewport:function(){return{from:this.display.showingFrom,to:this.display.showingTo}},addWidget:function(a,b,c,d,e){var f=this.display;a=vb(this,Gc(this.doc,a));var g=a.bottom,h=a.left;if(b.style.position="absolute",f.sizer.appendChild(b),"over"==d)g=a.top;else if("above"==d||"near"==d){var i=Math.max(f.wrapper.clientHeight,this.doc.height),j=Math.max(f.sizer.clientWidth,f.lineSpace.clientWidth);("above"==d||a.bottom+b.offsetHeight>i)&&a.top>b.offsetHeight?g=a.top-b.offsetHeight:a.bottom+b.offsetHeight<=i&&(g=a.bottom),h+b.offsetWidth>j&&(h=j-b.offsetWidth)}b.style.top=g+"px",b.style.left=b.style.right="","right"==e?(h=f.sizer.clientWidth-b.offsetWidth,b.style.right="0px"):("left"==e?h=0:"middle"==e&&(h=(f.sizer.clientWidth-b.offsetWidth)/2),b.style.left=h+"px"),c&&Qc(this,h,g,h+b.offsetWidth,g+b.offsetHeight)},triggerOnKeyDown:Fb(null,kc),execCommand:function(a){return jd[a](this)},findPosH:function(a,b,c,d){var e=1;0>b&&(e=-1,b=-b);for(var f=0,g=Gc(this.doc,a);b>f&&(g=Wc(this.doc,g,e,c,d),!g.hitSide);++f);return g},moveH:Fb(null,function(a,b){var d,c=this.doc.sel;d=c.shift||c.extend||Cc(c.from,c.to)?Wc(this.doc,c.head,a,b,this.options.rtlMoveVisually):0>a?c.from:c.to,Jc(this.doc,d,d,a)}),deleteH:Fb(null,function(a,b){var c=this.doc.sel;Cc(c.from,c.to)?Ac(this.doc,"",c.from,Wc(this.doc,c.head,a,b,!1),"+delete"):Ac(this.doc,"",c.from,c.to,"+delete"),this.curOp.userSelChange=!0}),findPosV:function(a,b,c,d){var e=1,f=d;0>b&&(e=-1,b=-b);for(var g=0,h=Gc(this.doc,a);b>g;++g){var i=vb(this,h,"div");if(null==f?f=i.left:i.left=f,h=Xc(this,i,e,c),h.hitSide)break}return h},moveV:Fb(null,function(a,b){var c=this.doc.sel,d=vb(this,c.head,"div");null!=c.goalColumn&&(d.left=c.goalColumn);var e=Xc(this,d,a,b);"page"==b&&Tc(this,0,ub(this,e,"div").top-d.top),Jc(this.doc,e,e,a),c.goalColumn=d.left}),toggleOverwrite:function(a){(null==a||a!=this.state.overwrite)&&((this.state.overwrite=!this.state.overwrite)?this.display.cursor.className+=" CodeMirror-overwrite":this.display.cursor.className=this.display.cursor.className.replace(" CodeMirror-overwrite",""))},hasFocus:function(){return this.state.focused},scrollTo:Fb(null,function(a,b){Sc(this,a,b)}),getScrollInfo:function(){var a=this.display.scroller,b=Ve;return{left:a.scrollLeft,top:a.scrollTop,height:a.scrollHeight-b,width:a.scrollWidth-b,clientHeight:a.clientHeight-b,clientWidth:a.clientWidth-b}},scrollIntoView:Fb(null,function(a,b){null==a?a={from:this.doc.sel.head,to:null}:"number"==typeof a?a={from:Bc(a,0),to:null}:null==a.from&&(a={from:a,to:null}),a.to||(a.to=a.from),b||(b=0);var c=a;null!=a.from.line&&(this.curOp.scrollToPos={from:a.from,to:a.to,margin:b},c={from:vb(this,a.from),to:vb(this,a.to)});var d=Rc(this,Math.min(c.from.left,c.to.left),Math.min(c.from.top,c.to.top)-b,Math.max(c.from.right,c.to.right),Math.max(c.from.bottom,c.to.bottom)+b);Sc(this,d.scrollLeft,d.scrollTop)}),setSize:Fb(null,function(a,b){function c(a){return"number"==typeof a||/^\d+$/.test(String(a))?a+"px":a}null!=a&&(this.display.wrapper.style.width=c(a)),null!=b&&(this.display.wrapper.style.height=c(b)),this.options.lineWrapping&&(this.display.measureLineCache.length=this.display.measureLineCachePos=0),this.curOp.forceUpdate=!0}),operation:function(a){return Hb(this,a)},refresh:Fb(null,function(){var a=null==this.display.cachedTextHeight;pb(this),Sc(this,this.doc.scrollLeft,this.doc.scrollTop),Ib(this),a&&C(this)}),swapDoc:Fb(null,function(a){var b=this.doc;return b.cm=null,ke(this,a),pb(this),Mb(this,!0),Sc(this,a.scrollLeft,a.scrollTop),Qe(this,"swapDoc",this,b),b}),getInputField:function(){return this.display.input},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Ue(x);var $c=x.optionHandlers={},_c=x.defaults={},bd=x.Init={toString:function(){return"CodeMirror.Init"}};ad("value","",function(a,b){a.setValue(b)},!0),ad("mode",null,function(a,b){a.doc.modeOption=b,z(a)},!0),ad("indentUnit",2,z,!0),ad("indentWithTabs",!1),ad("smartIndent",!0),ad("tabSize",4,function(a){z(a),pb(a),Ib(a)},!0),ad("electricChars",!0),ad("rtlMoveVisually",!r),ad("theme","default",function(a){E(a),F(a)},!0),ad("keyMap","default",D),ad("extraKeys",null),ad("onKeyEvent",null),ad("onDragEvent",null),ad("lineWrapping",!1,A,!0),ad("gutters",[],function(a){J(a.options),F(a)},!0),ad("fixedGutter",!0,function(a,b){a.display.gutters.style.left=b?P(a.display)+"px":"0",a.refresh()},!0),ad("coverGutterNextToScrollbar",!1,K,!0),ad("lineNumbers",!1,function(a){J(a.options),F(a)},!0),ad("firstLineNumber",1,F,!0),ad("lineNumberFormatter",function(a){return a},F,!0),ad("showCursorWhenSelecting",!1,Z,!0),ad("resetSelectionOnContextMenu",!0),ad("readOnly",!1,function(a,b){"nocursor"==b?(nc(a),a.display.input.blur(),a.display.disabled=!0):(a.display.disabled=!1,b||Mb(a,!0))}),ad("dragDrop",!0),ad("cursorBlinkRate",530),ad("cursorScrollMargin",0),ad("cursorHeight",1),ad("workTime",100),ad("workDelay",100),ad("flattenSpans",!0),ad("pollInterval",100),ad("undoDepth",40,function(a,b){a.doc.history.undoDepth=b}),ad("historyEventDelay",500),ad("viewportMargin",10,function(a){a.refresh()},!0),ad("maxHighlightLength",1e4,function(a){z(a),a.refresh()},!0),ad("crudeMeasuringFrom",1e4),ad("moveInputWithCursor",!0,function(a,b){b||(a.display.inputDiv.style.top=a.display.inputDiv.style.left=0)}),ad("tabindex",null,function(a,b){a.display.input.tabIndex=b||""}),ad("autofocus",null);var cd=x.modes={},dd=x.mimeModes={};x.defineMode=function(a,b){if(x.defaults.mode||"null"==a||(x.defaults.mode=a),arguments.length>2){b.dependencies=[];for(var c=2;c<arguments.length;++c)b.dependencies.push(arguments[c])}cd[a]=b},x.defineMIME=function(a,b){dd[a]=b},x.resolveMode=function(a){if("string"==typeof a&&dd.hasOwnProperty(a))a=dd[a];else if(a&&"string"==typeof a.name&&dd.hasOwnProperty(a.name)){var b=dd[a.name];a=cf(b,a),a.name=b.name}else if("string"==typeof a&&/^[\w\-]+\/[\w\-]+\+xml$/.test(a))return x.resolveMode("application/xml");return"string"==typeof a?{name:a}:a||{name:"null"}},x.getMode=function(a,b){var b=x.resolveMode(b),c=cd[b.name];if(!c)return x.getMode(a,"text/plain");var d=c(a,b);if(ed.hasOwnProperty(b.name)){var e=ed[b.name];for(var f in e)e.hasOwnProperty(f)&&(d.hasOwnProperty(f)&&(d["_"+f]=d[f]),d[f]=e[f])}return d.name=b.name,d},x.defineMode("null",function(){return{token:function(a){a.skipToEnd()}}}),x.defineMIME("text/plain","null");var ed=x.modeExtensions={};x.extendMode=function(a,b){var c=ed.hasOwnProperty(a)?ed[a]:ed[a]={};df(b,c)},x.defineExtension=function(a,b){x.prototype[a]=b},x.defineDocExtension=function(a,b){ge.prototype[a]=b},x.defineOption=ad;var fd=[];x.defineInitHook=function(a){fd.push(a)};var gd=x.helpers={};x.registerHelper=function(a,b,c){gd.hasOwnProperty(a)||(gd[a]=x[a]={}),gd[a][b]=c},x.isWordChar=hf,x.copyState=hd,x.startState=id,x.innerMode=function(a,b){for(;a.innerMode;){var c=a.innerMode(b);if(!c||c.mode==a)break;b=c.state,a=c.mode}return c||{mode:a,state:b}};var jd=x.commands={selectAll:function(a){a.setSelection(Bc(a.firstLine(),0),Bc(a.lastLine()))},killLine:function(a){var b=a.getCursor(!0),c=a.getCursor(!1),d=!Cc(b,c);d||a.getLine(b.line).length!=b.ch?a.replaceRange("",b,d?c:Bc(b.line),"+delete"):a.replaceRange("",b,Bc(b.line+1,0),"+delete")},deleteLine:function(a){var b=a.getCursor().line;a.replaceRange("",Bc(b,0),Bc(b),"+delete")},delLineLeft:function(a){var b=a.getCursor();a.replaceRange("",Bc(b.line,0),b,"+delete")},undo:function(a){a.undo()},redo:function(a){a.redo()},goDocStart:function(a){a.extendSelection(Bc(a.firstLine(),0))},goDocEnd:function(a){a.extendSelection(Bc(a.lastLine()))},goLineStart:function(a){a.extendSelection(Ff(a,a.getCursor().line))},goLineStartSmart:function(a){var b=a.getCursor(),c=Ff(a,b.line),d=a.getLineHandle(c.line),e=se(d);if(e&&0!=e[0].level)a.extendSelection(c);else{var f=Math.max(0,d.text.search(/\S/)),g=b.line==c.line&&b.ch<=f&&b.ch;a.extendSelection(Bc(c.line,g?0:f))}},goLineEnd:function(a){a.extendSelection(Gf(a,a.getCursor().line))},goLineRight:function(a){var b=a.charCoords(a.getCursor(),"div").top+5;a.extendSelection(a.coordsChar({left:a.display.lineDiv.offsetWidth+100,top:b},"div"))},goLineLeft:function(a){var b=a.charCoords(a.getCursor(),"div").top+5;a.extendSelection(a.coordsChar({left:0,top:b},"div"))},goLineUp:function(a){a.moveV(-1,"line")},goLineDown:function(a){a.moveV(1,"line")},goPageUp:function(a){a.moveV(-1,"page")},goPageDown:function(a){a.moveV(1,"page")},goCharLeft:function(a){a.moveH(-1,"char")},goCharRight:function(a){a.moveH(1,"char")},goColumnLeft:function(a){a.moveH(-1,"column")},goColumnRight:function(a){a.moveH(1,"column")},goWordLeft:function(a){a.moveH(-1,"word")},goGroupRight:function(a){a.moveH(1,"group")},goGroupLeft:function(a){a.moveH(-1,"group")},goWordRight:function(a){a.moveH(1,"word")},delCharBefore:function(a){a.deleteH(-1,"char")},delCharAfter:function(a){a.deleteH(1,"char")},delWordBefore:function(a){a.deleteH(-1,"word")},delWordAfter:function(a){a.deleteH(1,"word")},delGroupBefore:function(a){a.deleteH(-1,"group")},delGroupAfter:function(a){a.deleteH(1,"group")},indentAuto:function(a){a.indentSelection("smart")},indentMore:function(a){a.indentSelection("add")},indentLess:function(a){a.indentSelection("subtract")},insertTab:function(a){a.replaceSelection(" ","end","+input")},defaultTab:function(a){a.somethingSelected()?a.indentSelection("add"):a.replaceSelection(" ","end","+input")},transposeChars:function(a){var b=a.getCursor(),c=a.getLine(b.line);b.ch>0&&b.ch<c.length-1&&a.replaceRange(c.charAt(b.ch)+c.charAt(b.ch-1),Bc(b.line,b.ch-1),Bc(b.line,b.ch+1))},newlineAndIndent:function(a){Fb(a,function(){a.replaceSelection("\n","end","+input"),a.indentLine(a.getCursor().line,null,!0)})()},toggleOverwrite:function(a){a.toggleOverwrite()}},kd=x.keyMap={};kd.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite"},kd.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Alt-Up":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Down":"goDocEnd","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore",fallthrough:"basic"},kd.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineStart","Cmd-Right":"goLineEnd","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delLineLeft",fallthrough:["basic","emacsy"]},kd["default"]=q?kd.macDefault:kd.pcDefault,kd.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars"},x.lookupKey=md,x.isModifierKey=nd,x.keyName=od,x.fromTextArea=function(a,b){function e(){a.value=i.getValue()}if(b||(b={}),b.value=a.value,!b.tabindex&&a.tabindex&&(b.tabindex=a.tabindex),!b.placeholder&&a.placeholder&&(b.placeholder=a.placeholder),null==b.autofocus){var c=document.body;try{c=document.activeElement}catch(d){}b.autofocus=c==a||null!=a.getAttribute("autofocus")&&c==document.body}if(a.form&&(Le(a.form,"submit",e),!b.leaveSubmitMethodAlone)){var f=a.form,g=f.submit;try{var h=f.submit=function(){e(),f.submit=g,f.submit(),f.submit=h}}catch(d){}}a.style.display="none";var i=x(function(b){a.parentNode.insertBefore(b,a.nextSibling)},b);return i.save=e,i.getTextArea=function(){return a},i.toTextArea=function(){e(),a.parentNode.removeChild(i.getWrapperElement()),a.style.display="",a.form&&(Me(a.form,"submit",e),"function"==typeof a.form.submit&&(a.form.submit=g))},i},pd.prototype={eol:function(){return this.pos>=this.string.length},sol:function(){return 0==this.pos},peek:function(){return this.string.charAt(this.pos)||void 0},next:function(){return this.pos<this.string.length?this.string.charAt(this.pos++):void 0},eat:function(a){var b=this.string.charAt(this.pos);if("string"==typeof a)var c=b==a;else var c=b&&(a.test?a.test(b):a(b));return c?(++this.pos,b):void 0},eatWhile:function(a){for(var b=this.pos;this.eat(a););return this.pos>b},eatSpace:function(){for(var a=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>a},skipToEnd:function(){this.pos=this.string.length},skipTo:function(a){var b=this.string.indexOf(a,this.pos);return b>-1?(this.pos=b,!0):void 0},backUp:function(a){this.pos-=a},column:function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=Ye(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue},indentation:function(){return Ye(this.string,null,this.tabSize)},match:function(a,b,c){if("string"!=typeof a){var f=this.string.slice(this.pos).match(a);return f&&f.index>0?null:(f&&b!==!1&&(this.pos+=f[0].length),f)}var d=function(a){return c?a.toLowerCase():a},e=this.string.substr(this.pos,a.length);return d(e)==d(a)?(b!==!1&&(this.pos+=a.length),!0):void 0},current:function(){return this.string.slice(this.start,this.pos)}},x.StringStream=pd,x.TextMarker=qd,Ue(qd),qd.prototype.clear=function(){if(!this.explicitlyCleared){var a=this.doc.cm,b=a&&!a.curOp;if(b&&Db(a),Te(this,"clear")){var c=this.find();c&&Qe(this,"clear",c.from,c.to)}for(var d=null,e=null,f=0;f<this.lines.length;++f){var g=this.lines[f],h=ud(g.markedSpans,this);null!=h.to&&(e=pe(g)),g.markedSpans=vd(g.markedSpans,h),null!=h.from?d=pe(g):this.collapsed&&!Gd(this.doc,g)&&a&&oe(g,Ab(a.display))}if(a&&this.collapsed&&!a.options.lineWrapping)for(var f=0;f<this.lines.length;++f){var i=Fd(a.doc,this.lines[f]),j=H(a.doc,i);j>a.display.maxLineLength&&(a.display.maxLine=i,a.display.maxLineLength=j,a.display.maxLineChanged=!0)}null!=d&&a&&Ib(a,d,e+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,a&&Mc(a)),b&&Eb(a)}},qd.prototype.find=function(){for(var a,b,c=0;c<this.lines.length;++c){var d=this.lines[c],e=ud(d.markedSpans,this);if(null!=e.from||null!=e.to){var f=pe(d);null!=e.from&&(a=Bc(f,e.from)),null!=e.to&&(b=Bc(f,e.to))}}return"bookmark"==this.type?a:a&&{from:a,to:b}},qd.prototype.changed=function(){var a=this.find(),b=this.doc.cm;if(a&&b){"bookmark"!=this.type&&(a=a.from);var c=le(this.doc,a.line);if(kb(b,c),a.line>=b.display.showingFrom&&a.line<b.display.showingTo){for(var d=b.display.lineDiv.firstChild;d;d=d.nextSibling)if(d.lineObj==c){d.offsetHeight!=c.height&&oe(c,d.offsetHeight);break}Hb(b,function(){b.curOp.selectionChanged=b.curOp.forceUpdate=b.curOp.updateMaxLine=!0})}}},qd.prototype.attachLine=function(a){if(!this.lines.length&&this.doc.cm){var b=this.doc.cm.curOp;b.maybeHiddenMarkers&&-1!=bf(b.maybeHiddenMarkers,this)||(b.maybeUnhiddenMarkers||(b.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(a)},qd.prototype.detachLine=function(a){if(this.lines.splice(bf(this.lines,a),1),!this.lines.length&&this.doc.cm){var b=this.doc.cm.curOp;
-(b.maybeHiddenMarkers||(b.maybeHiddenMarkers=[])).push(this)}},x.SharedTextMarker=sd,Ue(sd),sd.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var a=0;a<this.markers.length;++a)this.markers[a].clear();Qe(this,"clear")}},sd.prototype.find=function(){return this.primary.find()};var Kd=x.LineWidget=function(a,b,c){if(c)for(var d in c)c.hasOwnProperty(d)&&(this[d]=c[d]);this.cm=a,this.node=b};Ue(Kd),Kd.prototype.clear=Ld(function(){var a=this.line.widgets,b=pe(this.line);if(null!=b&&a){for(var c=0;c<a.length;++c)a[c]==this&&a.splice(c--,1);a.length||(this.line.widgets=null);var d=re(this.cm,this.line)<this.cm.doc.scrollTop;oe(this.line,Math.max(0,this.line.height-Md(this))),d&&Tc(this.cm,0,-this.height),Ib(this.cm,b,b+1)}}),Kd.prototype.changed=Ld(function(){var a=this.height;this.height=null;var b=Md(this)-a;if(b){oe(this.line,this.line.height+b);var c=pe(this.line);Ib(this.cm,c,c+1)}});var Od=x.Line=function(a,b,c){this.text=a,Jd(this,b),this.height=c?c(this):1};Ue(Od);var Vd={},Yd=/[\t\u0000-\u0019\u00ad\u200b\u2028\u2029\uFEFF]/g;de.prototype={chunkSize:function(){return this.lines.length},removeInner:function(a,b){for(var c=a,d=a+b;d>c;++c){var e=this.lines[c];this.height-=e.height,Qd(e),Qe(e,"delete")}this.lines.splice(a,b)},collapse:function(a){a.splice.apply(a,[a.length,0].concat(this.lines))},insertInner:function(a,b,c){this.height+=c,this.lines=this.lines.slice(0,a).concat(b).concat(this.lines.slice(a));for(var d=0,e=b.length;e>d;++d)b[d].parent=this},iterN:function(a,b,c){for(var d=a+b;d>a;++a)if(c(this.lines[a]))return!0}},ee.prototype={chunkSize:function(){return this.size},removeInner:function(a,b){this.size-=b;for(var c=0;c<this.children.length;++c){var d=this.children[c],e=d.chunkSize();if(e>a){var f=Math.min(b,e-a),g=d.height;if(d.removeInner(a,f),this.height-=g-d.height,e==f&&(this.children.splice(c--,1),d.parent=null),0==(b-=f))break;a=0}else a-=e}if(this.size-b<25){var h=[];this.collapse(h),this.children=[new de(h)],this.children[0].parent=this}},collapse:function(a){for(var b=0,c=this.children.length;c>b;++b)this.children[b].collapse(a)},insertInner:function(a,b,c){this.size+=b.length,this.height+=c;for(var d=0,e=this.children.length;e>d;++d){var f=this.children[d],g=f.chunkSize();if(g>=a){if(f.insertInner(a,b,c),f.lines&&f.lines.length>50){for(;f.lines.length>50;){var h=f.lines.splice(f.lines.length-25,25),i=new de(h);f.height-=i.height,this.children.splice(d+1,0,i),i.parent=this}this.maybeSpill()}break}a-=g}},maybeSpill:function(){if(!(this.children.length<=10)){var a=this;do{var b=a.children.splice(a.children.length-5,5),c=new ee(b);if(a.parent){a.size-=c.size,a.height-=c.height;var e=bf(a.parent.children,a);a.parent.children.splice(e+1,0,c)}else{var d=new ee(a.children);d.parent=a,a.children=[d,c],a=d}c.parent=a.parent}while(a.children.length>10);a.parent.maybeSpill()}},iterN:function(a,b,c){for(var d=0,e=this.children.length;e>d;++d){var f=this.children[d],g=f.chunkSize();if(g>a){var h=Math.min(b,g-a);if(f.iterN(a,h,c))return!0;if(0==(b-=h))break;a=0}else a-=g}}};var fe=0,ge=x.Doc=function(a,b,c){if(!(this instanceof ge))return new ge(a,b,c);null==c&&(c=0),ee.call(this,[new de([new Od("",null)])]),this.first=c,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.history=te(),this.cleanGeneration=1,this.frontier=c;var d=Bc(c,0);this.sel={from:d,to:d,head:d,anchor:d,shift:!1,extend:!1,goalColumn:null},this.id=++fe,this.modeOption=b,"string"==typeof a&&(a=wf(a)),ce(this,{from:d,to:d,text:a},null,{head:d,anchor:d})};ge.prototype=cf(ee.prototype,{constructor:ge,iter:function(a,b,c){c?this.iterN(a-this.first,b-a,c):this.iterN(this.first,this.first+this.size,a)},insert:function(a,b){for(var c=0,d=0,e=b.length;e>d;++d)c+=b[d].height;this.insertInner(a-this.first,b,c)},remove:function(a,b){this.removeInner(a-this.first,b)},getValue:function(a){var b=ne(this,this.first,this.first+this.size);return a===!1?b:b.join(a||"\n")},setValue:function(a){var b=Bc(this.first,0),c=this.first+this.size-1;uc(this,{from:b,to:Bc(c,le(this,c).text.length),text:wf(a),origin:"setValue"},{head:b,anchor:b},!0)},replaceRange:function(a,b,c,d){b=Gc(this,b),c=c?Gc(this,c):b,Ac(this,a,b,c,d)},getRange:function(a,b,c){var d=me(this,Gc(this,a),Gc(this,b));return c===!1?d:d.join(c||"\n")},getLine:function(a){var b=this.getLineHandle(a);return b&&b.text},setLine:function(a,b){Ic(this,a)&&Ac(this,b,Bc(a,0),Gc(this,Bc(a)))},removeLine:function(a){a?Ac(this,"",Gc(this,Bc(a-1)),Gc(this,Bc(a))):Ac(this,"",Bc(0,0),Gc(this,Bc(1,0)))},getLineHandle:function(a){return Ic(this,a)?le(this,a):void 0},getLineNumber:function(a){return pe(a)},getLineHandleVisualStart:function(a){return"number"==typeof a&&(a=le(this,a)),Fd(this,a)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(a){return Gc(this,a)},getCursor:function(a){var c,b=this.sel;return c=null==a||"head"==a?b.head:"anchor"==a?b.anchor:"end"==a||a===!1?b.to:b.from,Ec(c)},somethingSelected:function(){return!Cc(this.sel.head,this.sel.anchor)},setCursor:Gb(function(a,b,c){var d=Gc(this,"number"==typeof a?Bc(a,b||0):a);c?Jc(this,d):Lc(this,d,d)}),setSelection:Gb(function(a,b,c){Lc(this,Gc(this,a),Gc(this,b||a),c)}),extendSelection:Gb(function(a,b,c){Jc(this,Gc(this,a),b&&Gc(this,b),c)}),getSelection:function(a){return this.getRange(this.sel.from,this.sel.to,a)},replaceSelection:function(a,b,c){uc(this,{from:this.sel.from,to:this.sel.to,text:wf(a),origin:c},b||"around")},undo:Gb(function(){wc(this,"undo")}),redo:Gb(function(){wc(this,"redo")}),setExtending:function(a){this.sel.extend=a},historySize:function(){var a=this.history;return{undo:a.done.length,redo:a.undone.length}},clearHistory:function(){this.history=te(this.history.maxGeneration)},markClean:function(){this.cleanGeneration=this.changeGeneration()},changeGeneration:function(){return this.history.lastOp=this.history.lastOrigin=null,this.history.generation},isClean:function(a){return this.history.generation==(a||this.cleanGeneration)},getHistory:function(){return{done:ze(this.history.done),undone:ze(this.history.undone)}},setHistory:function(a){var b=this.history=te(this.history.maxGeneration);b.done=a.done.slice(0),b.undone=a.undone.slice(0)},markText:function(a,b,c){return rd(this,Gc(this,a),Gc(this,b),c,"range")},setBookmark:function(a,b){var c={replacedWith:b&&(null==b.nodeType?b.widget:b),insertLeft:b&&b.insertLeft};return a=Gc(this,a),rd(this,a,a,c,"bookmark")},findMarksAt:function(a){a=Gc(this,a);var b=[],c=le(this,a.line).markedSpans;if(c)for(var d=0;d<c.length;++d){var e=c[d];(null==e.from||e.from<=a.ch)&&(null==e.to||e.to>=a.ch)&&b.push(e.marker.parent||e.marker)}return b},getAllMarks:function(){var a=[];return this.iter(function(b){var c=b.markedSpans;if(c)for(var d=0;d<c.length;++d)null!=c[d].from&&a.push(c[d].marker)}),a},posFromIndex:function(a){var b,c=this.first;return this.iter(function(d){var e=d.text.length+1;return e>a?(b=a,!0):(a-=e,++c,void 0)}),Gc(this,Bc(c,b))},indexFromPos:function(a){a=Gc(this,a);var b=a.ch;return a.line<this.first||a.ch<0?0:(this.iter(this.first,a.line,function(a){b+=a.text.length+1}),b)},copy:function(a){var b=new ge(ne(this,this.first,this.first+this.size),this.modeOption,this.first);return b.scrollTop=this.scrollTop,b.scrollLeft=this.scrollLeft,b.sel={from:this.sel.from,to:this.sel.to,head:this.sel.head,anchor:this.sel.anchor,shift:this.sel.shift,extend:!1,goalColumn:this.sel.goalColumn},a&&(b.history.undoDepth=this.history.undoDepth,b.setHistory(this.getHistory())),b},linkedDoc:function(a){a||(a={});var b=this.first,c=this.first+this.size;null!=a.from&&a.from>b&&(b=a.from),null!=a.to&&a.to<c&&(c=a.to);var d=new ge(ne(this,b,c),a.mode||this.modeOption,b);return a.sharedHist&&(d.history=this.history),(this.linked||(this.linked=[])).push({doc:d,sharedHist:a.sharedHist}),d.linked=[{doc:this,isParent:!0,sharedHist:a.sharedHist}],d},unlinkDoc:function(a){if(a instanceof x&&(a=a.doc),this.linked)for(var b=0;b<this.linked.length;++b){var c=this.linked[b];if(c.doc==a){this.linked.splice(b,1),a.unlinkDoc(this);break}}if(a.history==this.history){var d=[a.id];je(a,function(a){d.push(a.id)},!0),a.history=te(),a.history.done=ze(this.history.done,d),a.history.undone=ze(this.history.undone,d)}},iterLinkedDocs:function(a){je(this,a)},getMode:function(){return this.mode},getEditor:function(){return this.cm}}),ge.prototype.eachLine=ge.prototype.iter;var he="iter insert remove copy getEditor".split(" ");for(var ie in ge.prototype)ge.prototype.hasOwnProperty(ie)&&bf(he,ie)<0&&(x.prototype[ie]=function(a){return function(){return a.apply(this.doc,arguments)}}(ge.prototype[ie]));Ue(ge),x.e_stop=Ie,x.e_preventDefault=Fe,x.e_stopPropagation=Ge;var Oe,Pe=0;x.on=Le,x.off=Me,x.signal=Ne;var Ve=30,We=x.Pass={toString:function(){return"CodeMirror.Pass"}};Xe.prototype={set:function(a,b){clearTimeout(this.id),this.id=setTimeout(b,a)}},x.countColumn=Ye;var Ze=[""],gf=/[\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,kf=/[\u0300-\u036F\u0483-\u0487\u0488-\u0489\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7-\u06E8\u06EA-\u06ED\uA66F\uA670-\uA672\uA674-\uA67D\uA69F\udc00-\udfff]/;x.replaceGetRect=function(a){pf=a};var qf=function(){if(d)return!1;var a=lf("div");return"draggable"in a||"dragDrop"in a}();a?rf=function(a,b){return 36==a.charCodeAt(b-1)&&39==a.charCodeAt(b)}:j&&!/Version\/([6-9]|\d\d)\b/.test(navigator.userAgent)?rf=function(a,b){return/\-[^ \-?]|\?[^ !\'\"\),.\-\/:;\?\]\}]/.test(a.slice(b-1,b+1))}:f&&/Chrome\/(?:29|[3-9]\d|\d\d\d)\./.test(navigator.userAgent)?rf=function(a,b){var c=a.charCodeAt(b-1);return c>=8208&&8212>=c}:f&&(rf=function(a,b){if(b>1&&45==a.charCodeAt(b-1)){if(/\w/.test(a.charAt(b-2))&&/[^\-?\.]/.test(a.charAt(b)))return!0;if(b>2&&/[\d\.,]/.test(a.charAt(b-2))&&/[\d\.,]/.test(a.charAt(b)))return!1}return/[~!#%&*)=+}\]\\|\"\.>,:;][({[<]|-[^\-?\.\u2010-\u201f\u2026]|\?[\w~`@#$%\^&*(_=+{[|><]|\u2026[\w~`@#$%\^&*(_=+{[><]/.test(a.slice(b-1,b+1))});var sf,uf,wf=3!="\n\nb".split(/\n/).length?function(a){for(var b=0,c=[],d=a.length;d>=b;){var e=a.indexOf("\n",b);-1==e&&(e=a.length);var f=a.slice(b,"\r"==a.charAt(e-1)?e-1:e),g=f.indexOf("\r");-1!=g?(c.push(f.slice(0,g)),b+=g+1):(c.push(f),b=e+1)}return c}:function(a){return a.split(/\r\n?|\n/)};x.splitLines=wf;var xf=window.getSelection?function(a){try{return a.selectionStart!=a.selectionEnd}catch(b){return!1}}:function(a){try{var b=a.ownerDocument.selection.createRange()}catch(c){}return b&&b.parentElement()==a?0!=b.compareEndPoints("StartToEnd",b):!1},yf=function(){var a=lf("div");return"oncopy"in a?!0:(a.setAttribute("oncopy","return;"),"function"==typeof a.oncopy)}(),zf={3:"Enter",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",91:"Mod",92:"Mod",93:"Mod",109:"-",107:"=",127:"Delete",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63276:"PageUp",63277:"PageDown",63275:"End",63273:"Home",63234:"Left",63232:"Up",63235:"Right",63233:"Down",63302:"Insert",63272:"Delete"};x.keyNames=zf,function(){for(var a=0;10>a;a++)zf[a+48]=String(a);for(var a=65;90>=a;a++)zf[a]=String.fromCharCode(a);for(var a=1;12>=a;a++)zf[a+111]=zf[a+63235]="F"+a}();var If,Nf=function(){function c(c){return 255>=c?a.charAt(c):c>=1424&&1524>=c?"R":c>=1536&&1791>=c?b.charAt(c-1536):c>=1792&&2220>=c?"r":"L"}var a="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLL",b="rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmmrrrrrrrrrrrrrrrrrr",d=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,e=/[stwN]/,f=/[LRr]/,g=/[Lb1n]/,h=/[1n]/,i="L";return function(a){if(!d.test(a))return!1;for(var l,b=a.length,j=[],k=0;b>k;++k)j.push(l=c(a.charCodeAt(k)));for(var k=0,m=i;b>k;++k){var l=j[k];"m"==l?j[k]=m:m=l}for(var k=0,n=i;b>k;++k){var l=j[k];"1"==l&&"r"==n?j[k]="n":f.test(l)&&(n=l,"r"==l&&(j[k]="R"))}for(var k=1,m=j[0];b-1>k;++k){var l=j[k];"+"==l&&"1"==m&&"1"==j[k+1]?j[k]="1":","!=l||m!=j[k+1]||"1"!=m&&"n"!=m||(j[k]=m),m=l}for(var k=0;b>k;++k){var l=j[k];if(","==l)j[k]="N";else if("%"==l){for(var o=k+1;b>o&&"%"==j[o];++o);for(var p=k&&"!"==j[k-1]||b-1>o&&"1"==j[o]?"1":"N",q=k;o>q;++q)j[q]=p;k=o-1}}for(var k=0,n=i;b>k;++k){var l=j[k];"L"==n&&"1"==l?j[k]="L":f.test(l)&&(n=l)}for(var k=0;b>k;++k)if(e.test(j[k])){for(var o=k+1;b>o&&e.test(j[o]);++o);for(var r="L"==(k?j[k-1]:i),s="L"==(b-1>o?j[o]:i),p=r||s?"L":"R",q=k;o>q;++q)j[q]=p;k=o-1}for(var u,t=[],k=0;b>k;)if(g.test(j[k])){var v=k;for(++k;b>k&&g.test(j[k]);++k);t.push({from:v,to:k,level:0})}else{var w=k,x=t.length;for(++k;b>k&&"L"!=j[k];++k);for(var q=w;k>q;)if(h.test(j[q])){q>w&&t.splice(x,0,{from:w,to:q,level:1});var y=q;for(++q;k>q&&h.test(j[q]);++q);t.splice(x,0,{from:y,to:q,level:2}),w=q}else++q;k>w&&t.splice(x,0,{from:w,to:k,level:1})}return 1==t[0].level&&(u=a.match(/^\s+/))&&(t[0].from=u[0].length,t.unshift({from:0,to:u[0].length,level:0})),1==_e(t).level&&(u=a.match(/\s+$/))&&(_e(t).to-=u[0].length,t.push({from:b-u[0].length,to:b,level:0})),t[0].level!=_e(t).level&&t.push({from:b,to:b,level:t[0].level}),t}}();return x.version="3.19.1",x}(),CodeMirror.defineMode("css",function(a,b){"use strict";function l(a,b){return k=b,a}function m(a,b){var c=a.next();if(d[c]){var e=d[c](a,b);if(e!==!1)return e}if("@"==c)return a.eatWhile(/[\w\\\-]/),l("def",a.current());if("="==c)l(null,"compare");else{if(("~"==c||"|"==c)&&a.eat("="))return l(null,"compare");if('"'==c||"'"==c)return b.tokenize=n(c),b.tokenize(a,b);if("#"==c)return a.eatWhile(/[\w\\\-]/),l("atom","hash");if("!"==c)return a.match(/^\s*\w*/),l("keyword","important");if(/\d/.test(c)||"."==c&&a.eat(/\d/))return a.eatWhile(/[\w.%]/),l("number","unit");if("-"!==c)return/[,+>*\/]/.test(c)?l(null,"select-op"):"."==c&&a.match(/^-?[_a-z][_a-z0-9-]*/i)?l("qualifier","qualifier"):":"==c?l("operator",c):/[;{}\[\]\(\)]/.test(c)?l(null,c):"u"==c&&a.match("rl(")?(a.backUp(1),b.tokenize=o,l("property","variable")):(a.eatWhile(/[\w\\\-]/),l("property","variable"));if(/\d/.test(a.peek()))return a.eatWhile(/[\w.%]/),l("number","unit");if(a.match(/^[^-]+-/))return l("meta","meta")}}function n(a,b){return function(c,d){for(var f,e=!1;null!=(f=c.next())&&(f!=a||e);)e=!e&&"\\"==f;return e||(b&&c.backUp(1),d.tokenize=m),l("string","string")}}function o(a,b){return a.next(),b.tokenize=a.match(/\s*[\"\']/,!1)?m:n(")",!0),l(null,"(")}b.propertyKeywords||(b=CodeMirror.resolveMode("text/css"));var c=a.indentUnit||a.tabSize||2,d=b.hooks||{},e=b.atMediaTypes||{},f=b.atMediaFeatures||{},g=b.propertyKeywords||{},h=b.colorKeywords||{},i=b.valueKeywords||{},j=!!b.allowNested,k=null;return{startState:function(a){return{tokenize:m,baseIndent:a||0,stack:[],lastToken:null}},token:function(a,b){if(b.tokenize=b.tokenize||m,b.tokenize==m&&a.eatSpace())return null;var c=b.tokenize(a,b);c&&"string"!=typeof c&&(c=l(c[0],c[1]));var d=b.stack[b.stack.length-1];if("variable"==c)return"variable-definition"==k&&b.stack.push("propertyValue"),b.lastToken="variable-2";if("property"==c){var n=a.current().toLowerCase();"propertyValue"==d?c=i.hasOwnProperty(n)?"string-2":h.hasOwnProperty(n)?"keyword":"variable-2":"rule"==d?g.hasOwnProperty(n)||(c+=" error"):"block"==d?c=g.hasOwnProperty(n)?"property":h.hasOwnProperty(n)?"keyword":i.hasOwnProperty(n)?"string-2":"tag":d&&"@media{"!=d?"@media"==d?c=e[a.current()]?"attribute":/^(only|not)$/.test(n)?"keyword":"and"==n?"error":f.hasOwnProperty(n)?"error":"attribute error":"@mediaType"==d?c=e.hasOwnProperty(n)?"attribute":"and"==n?"operator":/^(only|not)$/.test(n)?"error":"error":"@mediaType("==d?g.hasOwnProperty(n)||(e.hasOwnProperty(n)?c="error":"and"==n?c="operator":/^(only|not)$/.test(n)?c="error":c+=" error"):c="@import"==d?"tag":"error":c="tag"}else"atom"==c?d&&"@media{"!=d&&"block"!=d?"propertyValue"==d?/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(a.current())||(c+=" error"):c="error":c="builtin":"@media"==d&&"{"==k&&(c="error");if("{"==k)if("@media"==d||"@mediaType"==d)b.stack[b.stack.length-1]="@media{";else{var o=j?"block":"rule";b.stack.push(o)}else if("}"==k)for("interpolation"==d&&(c="operator");b.stack.length;){var p=b.stack.pop();if(p.indexOf("{")>-1)break}else if("interpolation"==k)b.stack.push("interpolation");else if("@media"==k)b.stack.push("@media");else if("@import"==k)b.stack.push("@import");else if("@media"==d&&/\b(keyword|attribute)\b/.test(c))b.stack[b.stack.length-1]="@mediaType";else if("@mediaType"==d&&","==a.current())b.stack[b.stack.length-1]="@media";else if("("==k)"@media"==d||"@mediaType"==d?(b.stack[b.stack.length-1]="@mediaType",b.stack.push("@mediaType(")):b.stack.push("(");else if(")"==k)for(;b.stack.length;){var p=b.stack.pop();if(p.indexOf("(")>-1)break}else":"==k&&"property"==b.lastToken?b.stack.push("propertyValue"):"propertyValue"==d&&";"==k?b.stack.pop():"@import"==d&&";"==k&&b.stack.pop();return b.lastToken=c},indent:function(a,b){var d=a.stack.length;return/^\}/.test(b)&&(d-="propertyValue"==a.stack[d-1]?2:1),a.baseIndent+d*c},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",fold:"brace"}}),function(){function a(a){for(var b={},c=0;c<a.length;++c)b[a[c]]=!0;return b}function g(a,b){for(var d,c=!1;null!=(d=a.next());){if(c&&"/"==d){b.tokenize=null;break}c="*"==d}return["comment","comment"]}var b=a(["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"]),c=a(["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid"]),d=a(["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid-cell","grid-column","grid-column-align","grid-column-sizing","grid-column-span","grid-columns","grid-flow","grid-row","grid-row-align","grid-row-sizing","grid-row-span","grid-rows","grid-template","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marker-offset","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-inside","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","word-break","word-spacing","word-wrap","z-index","zoom","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-profile","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","kerning","text-anchor","writing-mode"]),e=a(["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"]),f=a(["above","absolute","activeborder","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","auto","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","column","compact","condensed","contain","content","content-box","context-menu","continuous","copy","cover","crop","cross","crosshair","currentcolor","cursive","dashed","decimal","decimal-leading-zero","default","default-button","destination-atop","destination-in","destination-out","destination-over","devanagari","disc","discard","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ew-resize","expanded","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","footnotes","forwards","from","geometricPrecision","georgian","graytext","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-table","inset","inside","intrinsic","invert","italic","justify","kannada","katakana","katakana-iroha","keep-all","khmer","landscape","lao","large","larger","left","level","lighter","line-through","linear","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","malayalam","match","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","nw-resize","nwse-resize","oblique","octal","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","round","row-resize","rtl","run-in","running","s-resize","sans-serif","scroll","scrollbar","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","semi-condensed","semi-expanded","separate","serif","show","sidama","single","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","solid","somali","source-atop","source-in","source-out","source-over","space","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","transparent","ultra-condensed","ultra-expanded","underline","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","x-large","x-small","xor","xx-large","xx-small"]);CodeMirror.defineMIME("text/css",{atMediaTypes:b,atMediaFeatures:c,propertyKeywords:d,colorKeywords:e,valueKeywords:f,hooks:{"<":function(a,b){function c(a,b){for(var d,c=0;null!=(d=a.next());){if(c>=2&&">"==d){b.tokenize=null;break}c="-"==d?c+1:0}return["comment","comment"]}return a.eat("!")?(b.tokenize=c,c(a,b)):void 0},"/":function(a,b){return a.eat("*")?(b.tokenize=g,g(a,b)):!1}},name:"css"}),CodeMirror.defineMIME("text/x-scss",{atMediaTypes:b,atMediaFeatures:c,propertyKeywords:d,colorKeywords:e,valueKeywords:f,allowNested:!0,hooks:{":":function(a){return a.match(/\s*{/)?[null,"{"]:!1},$:function(a){return a.match(/^[\w-]+/),":"==a.peek()?["variable","variable-definition"]:["variable","variable"]},",":function(a,b){return"propertyValue"==b.stack[b.stack.length-1]?["operator",";"]:void 0},"/":function(a,b){return a.eat("/")?(a.skipToEnd(),["comment","comment"]):a.eat("*")?(b.tokenize=g,g(a,b)):["operator","operator"]
-},"#":function(a){return a.eat("{")?["operator","interpolation"]:(a.eatWhile(/[\w\\\-]/),["atom","hash"])}},name:"css"})}(),CodeMirror.defineMode("less",function(a){function d(a,b){return c=b,a}function f(a,b){var f=a.next();if("@"==f)return a.eatWhile(/[\w\-]/),d("meta",a.current());if("/"==f&&a.eat("*"))return b.tokenize=h,h(a,b);if("<"==f&&a.eat("!"))return b.tokenize=i,i(a,b);if("="==f)d(null,"compare");else{if("|"==f&&a.eat("="))return d(null,"compare");if('"'==f||"'"==f)return b.tokenize=j(f),b.tokenize(a,b);if("/"==f){if(a.eat("/"))return b.tokenize=g,g(a,b);if("string"==c||"("==c)return d("string","string");if(void 0!==b.stack[b.stack.length-1])return d(null,f);if(a.eatWhile(/[\a-zA-Z0-9\-_.\s]/),/\/|\)|#/.test(a.peek()||a.eatSpace()&&")"===a.peek())||a.eol())return d("string","string")}else{if("!"==f)return a.match(/^\s*\w*/),d("keyword","important");if(/\d/.test(f))return a.eatWhile(/[\w.%]/),d("number","unit");if(/[,+<>*\/]/.test(f))return"="==a.peek()||"a"==c?d("string","string"):","===f?d(null,f):d(null,"select-op");if(/[;{}:\[\]()~\|]/.test(f)){if(":"==f)return a.eatWhile(/[a-z\\\-]/),e.test(a.current())?d("tag","tag"):":"==a.peek()?(a.next(),a.eatWhile(/[a-z\\\-]/),a.current().match(/\:\:\-(o|ms|moz|webkit)\-/)?d("string","string"):e.test(a.current().substring(1))?d("tag","tag"):d(null,f)):d(null,f);if("~"!=f)return d(null,f);if("r"==c)return d("string","string")}else{if("."==f)return"("==c?d("string","string"):(a.eatWhile(/[\a-zA-Z0-9\-_]/)," "===a.peek()&&a.eatSpace(),")"===a.peek()||":"===c?d("number","unit"):a.current().length>1&&"rule"===b.stack[b.stack.length-1]&&null===a.peek().match(/{|,|\+|\(/)?d("number","unit"):d("tag","tag"));if("#"==f)return a.eatWhile(/[A-Za-z0-9]/),4==a.current().length||7==a.current().length?null!=a.current().match(/[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}/,!1)?a.current().substring(1)!=a.current().match(/[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}/,!1)?d("atom","tag"):(a.eatSpace(),/[\/<>.(){!$%^&*_\-\\?=+\|#'~`]/.test(a.peek())?"select-op"===c?d("number","unit"):d("atom","tag"):"}"==a.peek()?d("number","unit"):/[a-zA-Z\\]/.test(a.peek())?d("atom","tag"):a.eol()?d("atom","tag"):d("number","unit")):(a.eatWhile(/[\w\\\-]/),d("atom",a.current())):(a.eatWhile(/[\w\\\-]/),"rule"===b.stack[b.stack.length-1]?d("atom",a.current()):d("atom",a.current()));if("&"==f)return a.eatWhile(/[\w\-]/),d(null,f);if(a.eatWhile(/[\w\\\-_%.{]/),null===a.current().match(/\\/)){if("string"==c)return"{"===b.stack[b.stack.length-1]&&":"===a.peek()?d("variable","variable"):("/"===a.peek()&&a.eatWhile(/[\w\\\-_%.{:\/]/),d(c,a.current()));if(null!=a.current().match(/(^http$|^https$)/))return a.eatWhile(/[\w\\\-_%.{:\/]/),"/"===a.peek()&&a.eatWhile(/[\w\\\-_%.{:\/]/),d("string","string");if("<"==a.peek()||">"==a.peek()||"+"==a.peek())return"("!==c||"n"!==a.current()&&"-n"!==a.current()?d("tag","tag"):d("string",a.current());if(/\(/.test(a.peek()))return"when"===a.current()?d("variable","variable"):"@media"===b.stack[b.stack.length-1]&&"and"===a.current()?d("variable",a.current()):d(null,f);if("/"==a.peek()&&void 0!==b.stack[b.stack.length-1])return"/"===a.peek()&&a.eatWhile(/[\w\\\-_%.{:\/]/),d("string",a.current());if(a.current().match(/\-\d|\-.\d/))return d("number","unit");if(/\/|[\s\)]/.test(a.peek()||a.eol()||a.eatSpace()&&"/"==a.peek())&&-1!==a.current().indexOf("."))return"{"==a.current().substring(a.current().length-1,a.current().length)?(a.backUp(1),d("tag","tag")):(a.eatSpace(),/[{<>.a-zA-Z\/]/.test(a.peek())||a.eol()?d("tag","tag"):d("string","string"));if(a.eol()||"["==a.peek()||"#"==a.peek()||"tag"==c){if("{"==a.current().substring(a.current().length-1,a.current().length))a.backUp(1);else{if("border-color"===b.stack[b.stack.length-1]||"background-position"===b.stack[b.stack.length-1]||"font-family"===b.stack[b.stack.length-1])return d(null,a.current());if("tag"===c)return d("tag","tag");if((":"===c||"unit"===c)&&"rule"===b.stack[b.stack.length-1])return d(null,a.current());if("rule"===b.stack[b.stack.length-1]&&"tag"===c)return d("string",a.current());if(";"===b.stack[b.stack.length-1]&&":"===c)return d(null,a.current());if("#"===a.peek()&&void 0!==c&&null===c.match(/\+|,|tag|select\-op|}|{|;/g))return d("string",a.current());if("variable"===c)return d(null,a.current());if("{"===b.stack[b.stack.length-1]&&"comment"===c)return d("variable",a.current());if(0===b.stack.length&&(";"===c||"comment"===c))return d("tag",a.current());if(("{"===b.stack[b.stack.length-1]||";"===c)&&"@media{"!==b.stack[b.stack.length-1])return d("variable",a.current());if("{"===b.stack[b.stack.length-2]&&";"===b.stack[b.stack.length-1])return d("variable",a.current())}return d("tag","tag")}if("compare"==c||"a"==c||"("==c)return d("string","string");if("|"==c||"-"==a.current()||"["==c)return"|"==c&&null!==a.peek().match(/\]|=|\~/)?d("number",a.current()):"|"==c?d("tag","tag"):"["==c?(a.eatWhile(/\w\-/),d("number",a.current())):d(null,f);if(":"==a.peek()||a.eatSpace()&&":"==a.peek()){a.next();var k=":"==a.peek()?!0:!1;if(k)a.backUp(1);else{var l=a.pos,m=a.current().length;a.eatWhile(/[a-z\\\-]/);var n=a.pos;if(null!=a.current().substring(m-1).match(e))return a.backUp(n-(l-1)),d("tag","tag");a.backUp(n-(l-1))}return k?d("tag","tag"):d("variable","variable")}return"font-family"===b.stack[b.stack.length-1]||"background-position"===b.stack[b.stack.length-1]||"border-color"===b.stack[b.stack.length-1]?d(null,null):null===b.stack[b.stack.length-1]&&":"===c?d(null,a.current()):/\^|\$/.test(a.current())&&null!==a.peek().match(/\~|=/)?d("string","string"):"unit"===c&&"rule"===b.stack[b.stack.length-1]?d(null,"unit"):"unit"===c&&";"===b.stack[b.stack.length-1]?d(null,"unit"):")"===c&&"rule"===b.stack[b.stack.length-1]?d(null,"unit"):c&&null!==c.match("@")&&"rule"===b.stack[b.stack.length-1]?d(null,"unit"):";"!==c&&"}"!==c&&","!==c||";"!==b.stack[b.stack.length-1]?";"===c&&void 0!==a.peek()&&null===a.peek().match(/{|./)||";"===c&&a.eatSpace()&&null===a.peek().match(/{|./)?d("variable",a.current()):"@media"===c&&"@media"===b.stack[b.stack.length-1]||"@namespace"===c?d("tag",a.current()):"{"===c&&";"===b.stack[b.stack.length-1]&&"{"===a.peek()?d("tag","tag"):"{"!==c&&":"!==c||";"!==b.stack[b.stack.length-1]?"{"===b.stack[b.stack.length-1]&&a.eatSpace()&&null===a.peek().match(/.|#/)||"select-op"===c||"rule"===b.stack[b.stack.length-1]&&","===c?d("tag","tag"):"variable"===c&&"rule"===b.stack[b.stack.length-1]?d("tag","tag"):a.eatSpace()&&"{"===a.peek()||a.eol()||"{"===a.peek()?d("tag","tag"):")"!==c||"and"!=a.current()&&"and "!=a.current()?")"!==c||"when"!=a.current()&&"when "!=a.current()?")"===c||"comment"===c||"{"===c?d("tag","tag"):a.sol()?d("tag","tag"):a.eatSpace()&&"#"===a.peek()||"#"===a.peek()?d("tag","tag"):0===b.stack.length?d("tag","tag"):";"===c&&void 0!==a.peek()&&null!==a.peek().match(/^[.|\#]/g)?d("tag","tag"):":"===c?(a.eatSpace(),d(null,a.current())):"and "===a.current()||"and"===a.current()?d("variable",a.current()):";"===c&&"{"===b.stack[b.stack.length-1]?d("variable",a.current()):"rule"===b.stack[b.stack.length-1]?d(null,a.current()):d("tag",a.current()):d("variable","variable"):d("variable","variable"):d(null,a.current()):d("tag",a.current())}if("\\"===a.current().charAt(a.current().length-1)){for(a.eat(/\'|\"|\)|\(/);a.eatWhile(/[\w\\\-_%.{]/);)a.eat(/\'|\"|\)|\(/);return d("string",a.current())}}}}}function g(a,b){return a.skipToEnd(),b.tokenize=f,d("comment","comment")}function h(a,b){for(var e,c=!1;null!=(e=a.next());){if(c&&"/"==e){b.tokenize=f;break}c="*"==e}return d("comment","comment")}function i(a,b){for(var e,c=0;null!=(e=a.next());){if(c>=2&&">"==e){b.tokenize=f;break}c="-"==e?c+1:0}return d("comment","comment")}function j(a){return function(b,c){for(var g,e=!1;null!=(g=b.next())&&(g!=a||e);)e=!e&&"\\"==g;return e||(c.tokenize=f),d("string","string")}}var c,b=a.indentUnit,e=/(^\:root$|^\:nth\-child$|^\:nth\-last\-child$|^\:nth\-of\-type$|^\:nth\-last\-of\-type$|^\:first\-child$|^\:last\-child$|^\:first\-of\-type$|^\:last\-of\-type$|^\:only\-child$|^\:only\-of\-type$|^\:empty$|^\:link|^\:visited$|^\:active$|^\:hover$|^\:focus$|^\:target$|^\:lang$|^\:enabled^\:disabled$|^\:checked$|^\:first\-line$|^\:first\-letter$|^\:before$|^\:after$|^\:not$|^\:required$|^\:invalid$)/;return{startState:function(a){return{tokenize:f,baseIndent:a||0,stack:[]}},token:function(a,b){if(a.eatSpace())return null;var e=b.tokenize(a,b),f=b.stack[b.stack.length-1];if("hash"==c&&"rule"==f?e="atom":"variable"==e&&("rule"==f?e=null:f&&"@media{"!=f||(e="when"==a.current()?"variable":/[\s,|\s\)|\s]/.test(a.peek())?"tag":c)),"rule"==f&&/^[\{\};]$/.test(c)&&b.stack.pop(),"{"==c?"@media"==f?b.stack[b.stack.length-1]="@media{":b.stack.push("{"):"}"==c?b.stack.pop():"@media"==c?b.stack.push("@media"):"font-family"===a.current()?b.stack[b.stack.length-1]="font-family":"background-position"===a.current()?b.stack[b.stack.length-1]="background-position":"border-color"===a.current()?b.stack[b.stack.length-1]="border-color":"{"==f&&"comment"!=c&&"tag"!==c?b.stack.push("rule"):":"===a.peek()&&null===a.current().match(/@|#/)&&(e=c),";"!==c||"font-family"!=b.stack[b.stack.length-1]&&"background-position"!=b.stack[b.stack.length-1]&&"border-color"!=b.stack[b.stack.length-1]){if("tag"===c&&")"===a.peek()&&null===a.current().match(/\:/))c=null,e=null;else if("variable"===c&&")"===a.peek()||"variable"===c&&a.eatSpace()&&")"===a.peek())return d(null,a.current())}else b.stack[b.stack.length-1]=a.current();return e},indent:function(a,c){var d=a.stack.length;return/^\}/.test(c)?d-="rule"===a.stack[a.stack.length-1]?2:1:"{"===a.stack[a.stack.length-2]&&(d-="rule"===a.stack[a.stack.length-1]?1:0),a.baseIndent+d*b},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//"}}),CodeMirror.defineMIME("text/x-less","less"),CodeMirror.mimeModes.hasOwnProperty("text/css")||CodeMirror.defineMIME("text/css","less"); \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-css/custom-css/js/core-customizer-css-preview.js b/plugins/jetpack/modules/custom-css/custom-css/js/core-customizer-css-preview.js
deleted file mode 100644
index 15090ee3..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/js/core-customizer-css-preview.js
+++ /dev/null
@@ -1,42 +0,0 @@
-// Originally based on https://raw.githubusercontent.com/xwp/wp-custom-scss-demo/master/custom-scss-demo-preview.js
-/* globals jpCustomizerCssPreview */
-(function( api, $ ) {
- if ( api.settingPreviewHandlers ) {
- // No-op the custom_css preview handler since now handled by partial.
- api.settingPreviewHandlers.custom_css = function() {};
- } else {
- parent.console.warn( 'Missing core patch that adds support for settingPreviewHandlers' );
- }
-
- api.selectiveRefresh.partialConstructor.custom_css = api.selectiveRefresh.Partial.extend( {
-
- /**
- * Refresh custom_css partial, using selective refresh if pre-processor and direct DOM manipulation if otherwise.
- *
- * @returns {jQuery.promise}
- */
- refresh: function() {
- var partial = this,
- preprocessor = api( 'jetpack_custom_css[preprocessor]' ).get(),
- deferred, setting;
-
- // Sass or Less require Partial -- so ajax call to get it from PHP.
- // We can explicitly override for specific providers by testing if `'sass' === preprocessor`
- if ( jpCustomizerCssPreview.preprocessors.hasOwnProperty( preprocessor ) ) {
- return api.selectiveRefresh.Partial.prototype.refresh.call( partial );
- }
-
- // No special providers, just write what we got.
- deferred = new $.Deferred();
- setting = api( 'custom_css[' + api.settings.theme.stylesheet + ']' );
- _.each( partial.placements(), function( placement ) {
- placement.container.text( setting.get() );
- } );
-
- deferred.resolve();
- return deferred.promise();
- }
-
- } );
-
-}( wp.customize, jQuery ));
diff --git a/plugins/jetpack/modules/custom-css/custom-css/js/core-customizer-css.core-4.9.js b/plugins/jetpack/modules/custom-css/custom-css/js/core-customizer-css.core-4.9.js
deleted file mode 100644
index 7fef365f..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/js/core-customizer-css.core-4.9.js
+++ /dev/null
@@ -1,85 +0,0 @@
-(function( $, customize ){
- /**
- * Helper function to qet a control by ID
- * @param {string} controlId Control ID
- * @return {object} jQuery object of the container
- */
- function _getControl ( controlId ) {
- var control = customize.control.value( controlId );
- if ( control ) {
- return control.container;
- }
- return null;
- }
-
- /**
- * Add some labels that the default checkbox controls don't allow.
- * Add CSS Revisions and CSS Help links.
- */
- $(document).ready( function(){
- var cssModeControl = _getControl( 'jetpack_css_mode_control' );
- if ( cssModeControl ) {
- cssModeControl.prepend( '<span class="customize-control-title">' + window._jp_css_settings.l10n.mode + '</span>' );
- }
-
- var mobileCssControl = _getControl( 'jetpack_mobile_css_control' );
- if ( mobileCssControl ) {
- mobileCssControl.prepend( '<span class="customize-control-title">' + window._jp_css_settings.l10n.mobile + '</span>' );
- }
-
- var widthControl = _getControl( 'wpcom_custom_css_content_width_control' );
- if ( widthControl ) {
- widthControl.append( '<span class="description">' + window._jp_css_settings.l10n.contentWidth + '<span>' );
- widthControl.find( 'input' ).after( '<span>px</span>' );
- }
-
- $( '<div />', {
- id : 'css-help-links',
- 'class' : 'css-help'
- }).appendTo( _getControl( 'custom_css' ) );
-
- $( '<a />', {
- id : 'help-link',
- target : '_blank',
- rel: 'noopener noreferrer',
- href : window._jp_css_settings.cssHelpUrl,
- text : window._jp_css_settings.l10n.css_help_title
- }).prependTo( '#css-help-links' );
-
- // Only show the revisions link if there are revisions
- if ( window._jp_css_settings.areThereCssRevisions ) {
- $( '<a />', {
- id : 'revisions-link',
- target : '_blank',
- rel: 'noopener noreferrer',
- href : window._jp_css_settings.revisionsUrl,
- text : window._jp_css_settings.l10n.revisions
- }).prependTo( '#css-help-links' );
- }
-
- customize( 'jetpack_custom_css[preprocessor]', function( preprocessorSetting ) {
- preprocessorSetting.bind( function( curr ) {
- var preprocessor_modes = {
- 'default' : 'text/css',
- less : 'text/x-less',
- sass : 'text/x-scss'
- },
- new_mode = 'text/css';
-
- if ( 'undefined' !== typeof preprocessor_modes[ curr ] ) {
- new_mode = preprocessor_modes[ curr ];
- }
-
- customize.control( 'custom_css' ).deferred.codemirror.done( function ( cm ) {
- cm.setOption( 'mode', new_mode );
- if ( 'text/css' === new_mode ) {
- cm.setOption( 'lint', true );
- } else {
- cm.setOption( 'lint', false );
- }
- });
- });
- });
- });
-
-})( jQuery, this.wp.customize );
diff --git a/plugins/jetpack/modules/custom-css/custom-css/js/core-customizer-css.js b/plugins/jetpack/modules/custom-css/custom-css/js/core-customizer-css.js
deleted file mode 100644
index 570cb8d2..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/js/core-customizer-css.js
+++ /dev/null
@@ -1,192 +0,0 @@
-(function( wp, $, api ){
- api.controlConstructor.jetpackCss = api.Control.extend({
- modes: {
- 'default': 'text/css',
- 'less': 'text/x-less',
- 'sass': 'text/x-scss'
- },
- _updating: false,
- /**
- * Fires when our control is ready for action. Gets everything set up.
- * @return {null}
- */
- ready: function() {
- this.opts = window._jp_css_settings;
- // add our textarea
- this.$input = $( '<textarea />', {
- name: this.setting.id,
- 'class': 'for-codemirror hidden'
- } ).val( this.setting() );
- this.container.append( this.$input );
-
- // keep the textarea and the setting synced up
- api( this.setting.id, _.bind( function( setting ){
- var element = new api.Element( this.$input );
- this.elements = [ element ];
- element.sync( setting );
- element.set( setting() );
- }, this ) );
-
- // should we use CodeMirror?
- if ( this.opts.useRichEditor ) {
- this.initCodeMirror();
- } else {
- this.$input.removeClass( 'hidden' );
- }
-
- api.bind( 'ready', _.bind( this.addLabels, this ) );
- },
- /**
- * Set up our CodeMirror instance
- * @return {null}
- */
- initCodeMirror: function() {
- this.editor = window.CodeMirror.fromTextArea( this.$input.get(0), {
- mode: this.getMode(),
- lineNumbers: true,
- tabSize: 2,
- indentWithTabs: true,
- lineWrapping: true
- } );
-
- this.addListeners();
- },
- /**
- * Adds various listeners for CodeMirror to render and keep in sync
- * with the textarea.
- */
- addListeners: function() {
- var edited = false;
-
- // refresh the CodeMirror instance's rendering because it's initially hidden
- // 250ms because that's the open animation duration
- $( '#accordion-section-custom_css > .accordion-section-title' ).click( _.bind( _.debounce( this.editor.refresh, 250 ), this.editor ) );
- // also refresh when focusing
- this.editor.on( 'focus', function( editor ) {
- editor.refresh();
- });
-
- // when the CodeMirror instance changes, mirror to the textarea,
- // where we have our "true" change event handler bound. This allows both to function.
- this.editor.on( 'change', _.bind( function( editor ) {
- this._updating = true;
- this.$input.val( editor.getValue() ).trigger( 'change' );
- this._updating = false;
-
- if ( ! edited ) {
- window.ga && window.ga( 'send', 'event', 'Customizer', 'Typed Custom CSS' );
- edited = true;
- }
- }, this ) );
-
- this.editor.on( 'focus', function() {
- window.ga && window.ga( 'send', 'event', 'Customizer', 'Focused CSS Editor' );
- } );
-
- // when others update the control, update CodeMirror
- this.setting.bind( 'change', _.bind( this.externalChange, this ) );
- },
- /**
- * Get the mode of the currently active preprocessor (if any),
- * falling back to text/css
- * @return {string} mode for CodeMirror
- */
- getMode: function() {
- var mode = api( 'jetpack_custom_css[preprocessor]' )();
- if ( '' === mode || ! this.modes[ mode ] ) {
- mode = 'default';
- }
- return this.modes[ mode ];
- },
- /**
- * If another control updates our setting, re-render the CodeMirror instance
- * @return {null}
- */
- externalChange: function() {
- // only if the change wasn't internal
- if( ! this._updating ) {
- this.editor.setValue( this.setting() );
- }
- },
- /**
- * Callback for when the CSS panel opens to refresh the CodeMirror rendering
- * @param {string} id The panel being opened
- * @return {null}
- */
- refresh: function( id ) {
- if ( 'accordion-section-custom_css' === id ) {
- setTimeout( _.bind( function(){
- this.editor.refresh();
- }, this), 300 );
- }
- },
- /**
- * Add some labels that the default checkbox controls don't allow.
- * Add CSS Revisions and CSS Help links.
- */
- addLabels: function() {
- this.addTitle( 'jetpack_css_mode_control', this.opts.l10n.mode );
- this.addTitle( 'jetpack_mobile_css_control', this.opts.l10n.mobile );
- this.addDesc( 'wpcom_custom_css_content_width_control', this.opts.l10n.contentWidth );
- var widthControl = this._getControl( 'wpcom_custom_css_content_width_control' );
- if ( widthControl ) {
- widthControl.find( 'input' ).after( '<span>px</span>' );
- }
- $( '<div />', {
- id: 'css-help-links',
- 'class': 'css-help'
- }).appendTo( this.container );
- $( '<a />', {
- id: 'help-link',
- target: '_blank',
- href: this.opts.cssHelpUrl,
- text: this.opts.l10n.css_help_title
- }).prependTo( '#css-help-links' );
-
- // Only show the revisions link if there are revisions
- if ( this.opts.areThereCssRevisions ) {
- $( '<a />', {
- id: 'revisions-link',
- target: '_blank',
- href: this.opts.revisionsUrl,
- text: this.opts.l10n.revisions
- }).prependTo( '#css-help-links' );
- }
- },
- /**
- * Add a title to a control
- * @param {string} controlId Control ID
- * @param {string} title A title to add
- */
- addTitle: function( controlId, title ) {
- var control = this._getControl( controlId );
- if ( control ) {
- control.prepend( '<span class="customize-control-title">' + title + '<span>' );
- }
- },
- /**
- * Add a description to a control
- * @param {string} controlId Control ID
- * @param {string} desc A description to add
- */
- addDesc: function( controlId, desc ) {
- var control = this._getControl( controlId );
- if ( control ) {
- control.append( '<span class="description">' + desc + '<span>' );
- }
- },
- /**
- * Helper function to qet a control by ID
- * @param {string} controlId Control ID
- * @return {object} jQuery object of the container
- */
- _getControl: function( controlId ) {
- var control = api.control.value( controlId );
- if ( control ) {
- return control.container;
- }
- return null;
- }
- });
-
-})( this.wp, jQuery, this.wp.customize );
diff --git a/plugins/jetpack/modules/custom-css/custom-css/js/css-editor.js b/plugins/jetpack/modules/custom-css/custom-css/js/css-editor.js
deleted file mode 100644
index 2c90eaea..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/js/css-editor.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/* jshint onevar: false, smarttabs: true */
-/* global postboxes, addLoadEvent */
-
-( function ( $ ) {
- var safe, win, safecssResize, safecssInit;
-
- safecssResize = function () {
- safe.height( win.height() - safe.offset().top - 250 );
- };
-
- safecssInit = function() {
- safe = $( '#safecss' );
- win = $( window );
-
- postboxes.add_postbox_toggles( 'editcss' );
- safecssResize();
-
- // Bound on a parent to ensure that this click event executes last.
- $( '#safecssform' ).on( 'click', '#preview', function ( e ) {
- e.preventDefault();
-
- document.forms.safecssform.target = 'csspreview';
- document.forms.safecssform.action.value = 'preview';
- document.forms.safecssform.submit();
- document.forms.safecssform.target = '';
- document.forms.safecssform.action.value = 'save';
- } );
- };
-
- window.onresize = safecssResize;
- addLoadEvent( safecssInit );
-} )( jQuery );
-
-jQuery( function ( $ ) {
- $( '.edit-preprocessor' ).bind( 'click', function ( e ) {
- e.preventDefault();
-
- $( '#preprocessor-select' ).slideDown();
- $( this ).hide();
- } );
-
- $( '.cancel-preprocessor' ).bind( 'click', function ( e ) {
- e.preventDefault();
-
- $( '#preprocessor-select' ).slideUp( function () {
- $( '.edit-preprocessor' ).show();
- $( '#preprocessor_choices' ).val( $( '#custom_css_preprocessor' ).val() );
- } );
- } );
-
- $( '.save-preprocessor' ).bind( 'click', function ( e ) {
- e.preventDefault();
-
- $( '#preprocessor-select' ).slideUp();
- $( '#preprocessor-display' ).text( $( '#preprocessor_choices option:selected' ).text() );
- $( '#custom_css_preprocessor' ).val( $( '#preprocessor_choices' ).val() ).change();
- $( '.edit-preprocessor' ).show();
- } );
-
- $( '.edit-css-mode' ).bind( 'click', function ( e ) {
- e.preventDefault();
-
- $( '#css-mode-select' ).slideDown();
- $( this ).hide();
- } );
-
- $( '.cancel-css-mode' ).bind( 'click', function ( e ) {
- e.preventDefault();
-
- $( '#css-mode-select' ).slideUp( function () {
- $( '.edit-css-mode' ).show();
- $( 'input[name=add_to_existing_display][value=' + $( '#add_to_existing' ).val() + ']' ).attr( 'checked', true );
- } );
- } );
-
- $( '.save-css-mode' ).bind( 'click', function ( e ) {
- e.preventDefault();
-
- $( '#css-mode-select' ).slideUp();
- $( '#css-mode-display' ).text( $( 'input[name=add_to_existing_display]:checked' ).val() === 'true' ? 'Add-on' : 'Replacement' );
- $( '#add_to_existing' ).val( $( 'input[name=add_to_existing_display]:checked' ).val() );
- $( '.edit-css-mode' ).show();
- } );
-} );
diff --git a/plugins/jetpack/modules/custom-css/custom-css/js/use-codemirror.js b/plugins/jetpack/modules/custom-css/custom-css/js/use-codemirror.js
deleted file mode 100644
index 00b5ac7e..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/js/use-codemirror.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/* jshint onevar: false, smarttabs: true */
-
-(function($){
- var Jetpack_CSS = {
- modes: {
- 'default': 'text/css',
- 'less': 'text/x-less',
- 'sass': 'text/x-scss'
- },
- init: function() {
- this.$textarea = $( '#safecss' );
- this.editor = window.CodeMirror.fromTextArea( this.$textarea.get(0),{
- mode: this.getMode(),
- lineNumbers: true,
- tabSize: 2,
- indentWithTabs: true,
- lineWrapping: true
- });
- this.setEditorHeight();
- },
- addListeners: function() {
- // nice sizing
- $( window ).on( 'resize', _.bind( _.debounce( this.setEditorHeight, 100 ), this ) );
- // keep textarea synced up
- this.editor.on( 'change', _.bind( function( editor ){
- this.$textarea.val( editor.getValue() );
- }, this ) );
- // change mode
- $( '#preprocessor_choices' ).change( _.bind( function(){
- this.editor.setOption( 'mode', this.getMode() );
- }, this ) );
- },
- setEditorHeight: function() {
- var height = $('html').height() - $( this.editor.getWrapperElement() ).offset().top;
- this.editor.setSize( null, height );
- },
- getMode: function() {
- var mode = $( '#preprocessor_choices' ).val();
- if ( '' === mode || ! this.modes[ mode ] ) {
- mode = 'default';
- }
- return this.modes[ mode ];
- }
- };
-
- $( document ).ready( _.bind( Jetpack_CSS.init, Jetpack_CSS ) );
-})(jQuery);
diff --git a/plugins/jetpack/modules/custom-css/custom-css/preprocessors.php b/plugins/jetpack/modules/custom-css/custom-css/preprocessors.php
deleted file mode 100644
index 7d561b3d..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/preprocessors.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-/**
- * CSS preprocessor registration.
- *
- * To add a new preprocessor (or replace an existing one), hook into the
- * jetpack_custom_css_preprocessors filter and add an entry to the array
- * that is passed in.
- *
- * Format is:
- * $preprocessors[ UNIQUE_KEY ] => array( 'name' => 'Processor name', 'callback' => [processing function] );
- *
- * The callback function accepts a single string argument (non-CSS markup) and returns a string (CSS).
- *
- * @param array $preprocessors The list of preprocessors added thus far.
- * @return array
- */
-
-function jetpack_register_css_preprocessors( $preprocessors ) {
- $preprocessors['less'] = array(
- 'name' => 'LESS',
- 'callback' => 'jetpack_less_css_preprocess'
- );
-
- $preprocessors['sass'] = array(
- 'name' => 'Sass (SCSS Syntax)',
- 'callback' => 'jetpack_sass_css_preprocess'
- );
-
- return $preprocessors;
-}
-
-add_filter( 'jetpack_custom_css_preprocessors', 'jetpack_register_css_preprocessors' );
-
-function jetpack_less_css_preprocess( $less ) {
- require_once( dirname( __FILE__ ) . '/preprocessors/lessc.inc.php' );
-
- $compiler = new lessc();
-
- try {
- return $compiler->compile( $less );
- } catch ( Exception $e ) {
- return $less;
- }
-}
-
-function jetpack_sass_css_preprocess( $sass ) {
- require_once( dirname( __FILE__ ) . '/preprocessors/scss.inc.php' );
-
- $compiler = new scssc();
- $compiler->setFormatter( 'scss_formatter' );
-
- try {
- return $compiler->compile( $sass );
- } catch ( Exception $e ) {
- return $sass;
- }
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-css/custom-css/preprocessors/lessc.inc.php b/plugins/jetpack/modules/custom-css/custom-css/preprocessors/lessc.inc.php
deleted file mode 100644
index ddaa4788..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/preprocessors/lessc.inc.php
+++ /dev/null
@@ -1,3768 +0,0 @@
-<?php
-
-/**
- * lessphp v0.5.0
- * http://leafo.net/lessphp
- *
- * LESS CSS compiler, adapted from http://lesscss.org
- *
- * Copyright 2013, Leaf Corcoran <leafot@gmail.com>
- * Licensed under MIT or GPLv3, see LICENSE
- */
-
-
-/**
- * The LESS compiler and parser.
- *
- * Converting LESS to CSS is a three stage process. The incoming file is parsed
- * by `lessc_parser` into a syntax tree, then it is compiled into another tree
- * representing the CSS structure by `lessc`. The CSS tree is fed into a
- * formatter, like `lessc_formatter` which then outputs CSS as a string.
- *
- * During the first compile, all values are *reduced*, which means that their
- * types are brought to the lowest form before being dump as strings. This
- * handles math equations, variable dereferences, and the like.
- *
- * The `parse` function of `lessc` is the entry point.
- *
- * In summary:
- *
- * The `lessc` class creates an instance of the parser, feeds it LESS code,
- * then transforms the resulting tree to a CSS tree. This class also holds the
- * evaluation context, such as all available mixins and variables at any given
- * time.
- *
- * The `lessc_parser` class is only concerned with parsing its input.
- *
- * The `lessc_formatter` takes a CSS tree, and dumps it to a formatted string,
- * handling things like indentation.
- */
-class lessc {
- static public $VERSION = "v0.5.0";
-
- static public $TRUE = array("keyword", "true");
- static public $FALSE = array("keyword", "false");
-
- protected $libFunctions = array();
- protected $registeredVars = array();
- protected $preserveComments = false;
-
- public $vPrefix = '@'; // prefix of abstract properties
- public $mPrefix = '$'; // prefix of abstract blocks
- public $parentSelector = '&';
-
- public $importDisabled = false;
- public $importDir = '';
-
- protected $numberPrecision = null;
-
- protected $allParsedFiles = array();
-
- // set to the parser that generated the current line when compiling
- // so we know how to create error messages
- protected $sourceParser = null;
- protected $sourceLoc = null;
-
- static protected $nextImportId = 0; // uniquely identify imports
-
- // attempts to find the path of an import url, returns null for css files
- protected function findImport($url) {
- foreach ((array)$this->importDir as $dir) {
- $full = $dir.(substr($dir, -1) != '/' ? '/' : '').$url;
- if ($this->fileExists($file = $full.'.less') || $this->fileExists($file = $full)) {
- return $file;
- }
- }
-
- return null;
- }
-
- protected function fileExists($name) {
- return is_file($name);
- }
-
- static public function compressList($items, $delim) {
- if (!isset($items[1]) && isset($items[0])) return $items[0];
- else return array('list', $delim, $items);
- }
-
- static public function preg_quote($what) {
- return preg_quote($what, '/');
- }
-
- protected function tryImport($importPath, $parentBlock, $out) {
- if ($importPath[0] == "function" && $importPath[1] == "url") {
- $importPath = $this->flattenList($importPath[2]);
- }
-
- $str = $this->coerceString($importPath);
- if ($str === null) return false;
-
- $url = $this->compileValue($this->lib_e($str));
-
- // don't import if it ends in css
- if (substr_compare($url, '.css', -4, 4) === 0) return false;
-
- $realPath = $this->findImport($url);
-
- if ($realPath === null) return false;
-
- if ($this->importDisabled) {
- return array(false, "/* import disabled */");
- }
-
- if (isset($this->allParsedFiles[realpath($realPath)])) {
- return array(false, null);
- }
-
- $this->addParsedFile($realPath);
- $parser = $this->makeParser($realPath);
- $root = $parser->parse(file_get_contents($realPath));
-
- // set the parents of all the block props
- foreach ($root->props as $prop) {
- if ($prop[0] == "block") {
- $prop[1]->parent = $parentBlock;
- }
- }
-
- // copy mixins into scope, set their parents
- // bring blocks from import into current block
- // TODO: need to mark the source parser these came from this file
- foreach ($root->children as $childName => $child) {
- if (isset($parentBlock->children[$childName])) {
- $parentBlock->children[$childName] = array_merge(
- $parentBlock->children[$childName],
- $child);
- } else {
- $parentBlock->children[$childName] = $child;
- }
- }
-
- $pi = pathinfo($realPath);
- $dir = $pi["dirname"];
-
- list($top, $bottom) = $this->sortProps($root->props, true);
- $this->compileImportedProps($top, $parentBlock, $out, $parser, $dir);
-
- return array(true, $bottom, $parser, $dir);
- }
-
- protected function compileImportedProps($props, $block, $out, $sourceParser, $importDir) {
- $oldSourceParser = $this->sourceParser;
-
- $oldImport = $this->importDir;
-
- // TODO: this is because the importDir api is stupid
- $this->importDir = (array)$this->importDir;
- array_unshift($this->importDir, $importDir);
-
- foreach ($props as $prop) {
- $this->compileProp($prop, $block, $out);
- }
-
- $this->importDir = $oldImport;
- $this->sourceParser = $oldSourceParser;
- }
-
- /**
- * Recursively compiles a block.
- *
- * A block is analogous to a CSS block in most cases. A single LESS document
- * is encapsulated in a block when parsed, but it does not have parent tags
- * so all of it's children appear on the root level when compiled.
- *
- * Blocks are made up of props and children.
- *
- * Props are property instructions, array tuples which describe an action
- * to be taken, eg. write a property, set a variable, mixin a block.
- *
- * The children of a block are just all the blocks that are defined within.
- * This is used to look up mixins when performing a mixin.
- *
- * Compiling the block involves pushing a fresh environment on the stack,
- * and iterating through the props, compiling each one.
- *
- * See lessc::compileProp()
- *
- */
- protected function compileBlock($block) {
- switch ($block->type) {
- case "root":
- $this->compileRoot($block);
- break;
- case null:
- $this->compileCSSBlock($block);
- break;
- case "media":
- $this->compileMedia($block);
- break;
- case "directive":
- $name = "@" . $block->name;
- if (!empty($block->value)) {
- $name .= " " . $this->compileValue($this->reduce($block->value));
- }
-
- $this->compileNestedBlock($block, array($name));
- break;
- default:
- $this->throwError("unknown block type: $block->type\n");
- }
- }
-
- protected function compileCSSBlock($block) {
- $env = $this->pushEnv();
-
- $selectors = $this->compileSelectors($block->tags);
- $env->selectors = $this->multiplySelectors($selectors);
- $out = $this->makeOutputBlock(null, $env->selectors);
-
- $this->scope->children[] = $out;
- $this->compileProps($block, $out);
-
- $block->scope = $env; // mixins carry scope with them!
- $this->popEnv();
- }
-
- protected function compileMedia($media) {
- $env = $this->pushEnv($media);
- $parentScope = $this->mediaParent($this->scope);
-
- $query = $this->compileMediaQuery($this->multiplyMedia($env));
-
- $this->scope = $this->makeOutputBlock($media->type, array($query));
- $parentScope->children[] = $this->scope;
-
- $this->compileProps($media, $this->scope);
-
- if (count($this->scope->lines) > 0) {
- $orphanSelelectors = $this->findClosestSelectors();
- if (!is_null($orphanSelelectors)) {
- $orphan = $this->makeOutputBlock(null, $orphanSelelectors);
- $orphan->lines = $this->scope->lines;
- array_unshift($this->scope->children, $orphan);
- $this->scope->lines = array();
- }
- }
-
- $this->scope = $this->scope->parent;
- $this->popEnv();
- }
-
- protected function mediaParent($scope) {
- while (!empty($scope->parent)) {
- if (!empty($scope->type) && $scope->type != "media") {
- break;
- }
- $scope = $scope->parent;
- }
-
- return $scope;
- }
-
- protected function compileNestedBlock($block, $selectors) {
- $this->pushEnv($block);
- $this->scope = $this->makeOutputBlock($block->type, $selectors);
- $this->scope->parent->children[] = $this->scope;
-
- $this->compileProps($block, $this->scope);
-
- $this->scope = $this->scope->parent;
- $this->popEnv();
- }
-
- protected function compileRoot($root) {
- $this->pushEnv();
- $this->scope = $this->makeOutputBlock($root->type);
- $this->compileProps($root, $this->scope);
- $this->popEnv();
- }
-
- protected function compileProps($block, $out) {
- foreach ($this->sortProps($block->props) as $prop) {
- $this->compileProp($prop, $block, $out);
- }
- $out->lines = $this->deduplicate($out->lines);
- }
-
- /**
- * Deduplicate lines in a block. Comments are not deduplicated. If a
- * duplicate rule is detected, the comments immediately preceding each
- * occurence are consolidated.
- */
- protected function deduplicate($lines) {
- $unique = array();
- $comments = array();
-
- foreach($lines as $line) {
- if (strpos($line, '/*') === 0) {
- $comments[] = $line;
- continue;
- }
- if (!in_array($line, $unique)) {
- $unique[] = $line;
- }
- array_splice($unique, array_search($line, $unique), 0, $comments);
- $comments = array();
- }
- return array_merge($unique, $comments);
- }
-
- protected function sortProps($props, $split = false) {
- $vars = array();
- $imports = array();
- $other = array();
- $stack = array();
-
- foreach ($props as $prop) {
- switch ($prop[0]) {
- case "comment":
- $stack[] = $prop;
- break;
- case "assign":
- $stack[] = $prop;
- if (isset($prop[1][0]) && $prop[1][0] == $this->vPrefix) {
- $vars = array_merge($vars, $stack);
- } else {
- $other = array_merge($other, $stack);
- }
- $stack = array();
- break;
- case "import":
- $id = self::$nextImportId++;
- $prop[] = $id;
- $stack[] = $prop;
- $imports = array_merge($imports, $stack);
- $other[] = array("import_mixin", $id);
- $stack = array();
- break;
- default:
- $stack[] = $prop;
- $other = array_merge($other, $stack);
- $stack = array();
- break;
- }
- }
- $other = array_merge($other, $stack);
-
- if ($split) {
- return array(array_merge($imports, $vars), $other);
- } else {
- return array_merge($imports, $vars, $other);
- }
- }
-
- protected function compileMediaQuery($queries) {
- $compiledQueries = array();
- foreach ($queries as $query) {
- $parts = array();
- foreach ($query as $q) {
- switch ($q[0]) {
- case "mediaType":
- $parts[] = implode(" ", array_slice($q, 1));
- break;
- case "mediaExp":
- if (isset($q[2])) {
- $parts[] = "($q[1]: " .
- $this->compileValue($this->reduce($q[2])) . ")";
- } else {
- $parts[] = "($q[1])";
- }
- break;
- case "variable":
- $parts[] = $this->compileValue($this->reduce($q));
- break;
- }
- }
-
- if (count($parts) > 0) {
- $compiledQueries[] = implode(" and ", $parts);
- }
- }
-
- $out = "@media";
- if (!empty($parts)) {
- $out .= " " .
- implode($this->formatter->selectorSeparator, $compiledQueries);
- }
- return $out;
- }
-
- protected function multiplyMedia($env, $childQueries = null) {
- if (is_null($env) ||
- !empty($env->block->type) && $env->block->type != "media")
- {
- return $childQueries;
- }
-
- // plain old block, skip
- if (empty($env->block->type)) {
- return $this->multiplyMedia($env->parent, $childQueries);
- }
-
- $out = array();
- $queries = $env->block->queries;
- if (is_null($childQueries)) {
- $out = $queries;
- } else {
- foreach ($queries as $parent) {
- foreach ($childQueries as $child) {
- $out[] = array_merge($parent, $child);
- }
- }
- }
-
- return $this->multiplyMedia($env->parent, $out);
- }
-
- protected function expandParentSelectors(&$tag, $replace) {
- $parts = explode("$&$", $tag);
- $count = 0;
- foreach ($parts as &$part) {
- $part = str_replace($this->parentSelector, $replace, $part, $c);
- $count += $c;
- }
- $tag = implode($this->parentSelector, $parts);
- return $count;
- }
-
- protected function findClosestSelectors() {
- $env = $this->env;
- $selectors = null;
- while ($env !== null) {
- if (isset($env->selectors)) {
- $selectors = $env->selectors;
- break;
- }
- $env = $env->parent;
- }
-
- return $selectors;
- }
-
-
- // multiply $selectors against the nearest selectors in env
- protected function multiplySelectors($selectors) {
- // find parent selectors
-
- $parentSelectors = $this->findClosestSelectors();
- if (is_null($parentSelectors)) {
- // kill parent reference in top level selector
- foreach ($selectors as &$s) {
- $this->expandParentSelectors($s, "");
- }
-
- return $selectors;
- }
-
- $out = array();
- foreach ($parentSelectors as $parent) {
- foreach ($selectors as $child) {
- $count = $this->expandParentSelectors($child, $parent);
-
- // don't prepend the parent tag if & was used
- if ($count > 0) {
- $out[] = trim($child);
- } else {
- $out[] = trim($parent . ' ' . $child);
- }
- }
- }
-
- return $out;
- }
-
- // reduces selector expressions
- protected function compileSelectors($selectors) {
- $out = array();
-
- foreach ($selectors as $s) {
- if (is_array($s)) {
- list(, $value) = $s;
- $out[] = trim($this->compileValue($this->reduce($value)));
- } else {
- $out[] = $s;
- }
- }
-
- return $out;
- }
-
- protected function eq($left, $right) {
- return $left == $right;
- }
-
- protected function patternMatch($block, $orderedArgs, $keywordArgs) {
- // match the guards if it has them
- // any one of the groups must have all its guards pass for a match
- if (!empty($block->guards)) {
- $groupPassed = false;
- foreach ($block->guards as $guardGroup) {
- foreach ($guardGroup as $guard) {
- $this->pushEnv();
- $this->zipSetArgs($block->args, $orderedArgs, $keywordArgs);
-
- $negate = false;
- if ($guard[0] == "negate") {
- $guard = $guard[1];
- $negate = true;
- }
-
- $passed = $this->reduce($guard) == self::$TRUE;
- if ($negate) $passed = !$passed;
-
- $this->popEnv();
-
- if ($passed) {
- $groupPassed = true;
- } else {
- $groupPassed = false;
- break;
- }
- }
-
- if ($groupPassed) break;
- }
-
- if (!$groupPassed) {
- return false;
- }
- }
-
- if (empty($block->args)) {
- return $block->isVararg || empty($orderedArgs) && empty($keywordArgs);
- }
-
- $remainingArgs = $block->args;
- if ($keywordArgs) {
- $remainingArgs = array();
- foreach ($block->args as $arg) {
- if ($arg[0] == "arg" && isset($keywordArgs[$arg[1]])) {
- continue;
- }
-
- $remainingArgs[] = $arg;
- }
- }
-
- $i = -1; // no args
- // try to match by arity or by argument literal
- foreach ($remainingArgs as $i => $arg) {
- switch ($arg[0]) {
- case "lit":
- if (empty($orderedArgs[$i]) || !$this->eq($arg[1], $orderedArgs[$i])) {
- return false;
- }
- break;
- case "arg":
- // no arg and no default value
- if (!isset($orderedArgs[$i]) && !isset($arg[2])) {
- return false;
- }
- break;
- case "rest":
- $i--; // rest can be empty
- break 2;
- }
- }
-
- if ($block->isVararg) {
- return true; // not having enough is handled above
- } else {
- $numMatched = $i + 1;
- // greater than becuase default values always match
- return $numMatched >= count($orderedArgs);
- }
- }
-
- protected function patternMatchAll($blocks, $orderedArgs, $keywordArgs, $skip=array()) {
- $matches = null;
- foreach ($blocks as $block) {
- // skip seen blocks that don't have arguments
- if (isset($skip[$block->id]) && !isset($block->args)) {
- continue;
- }
-
- if ($this->patternMatch($block, $orderedArgs, $keywordArgs)) {
- $matches[] = $block;
- }
- }
-
- return $matches;
- }
-
- // attempt to find blocks matched by path and args
- protected function findBlocks($searchIn, $path, $orderedArgs, $keywordArgs, $seen=array()) {
- if ($searchIn == null) return null;
- if (isset($seen[$searchIn->id])) return null;
- $seen[$searchIn->id] = true;
-
- $name = $path[0];
-
- if (isset($searchIn->children[$name])) {
- $blocks = $searchIn->children[$name];
- if (count($path) == 1) {
- $matches = $this->patternMatchAll($blocks, $orderedArgs, $keywordArgs, $seen);
- if (!empty($matches)) {
- // This will return all blocks that match in the closest
- // scope that has any matching block, like lessjs
- return $matches;
- }
- } else {
- $matches = array();
- foreach ($blocks as $subBlock) {
- $subMatches = $this->findBlocks($subBlock,
- array_slice($path, 1), $orderedArgs, $keywordArgs, $seen);
-
- if (!is_null($subMatches)) {
- foreach ($subMatches as $sm) {
- $matches[] = $sm;
- }
- }
- }
-
- return count($matches) > 0 ? $matches : null;
- }
- }
- if ($searchIn->parent === $searchIn) return null;
- return $this->findBlocks($searchIn->parent, $path, $orderedArgs, $keywordArgs, $seen);
- }
-
- // sets all argument names in $args to either the default value
- // or the one passed in through $values
- protected function zipSetArgs($args, $orderedValues, $keywordValues) {
- $assignedValues = array();
-
- $i = 0;
- foreach ($args as $a) {
- if ($a[0] == "arg") {
- if (isset($keywordValues[$a[1]])) {
- // has keyword arg
- $value = $keywordValues[$a[1]];
- } elseif (isset($orderedValues[$i])) {
- // has ordered arg
- $value = $orderedValues[$i];
- $i++;
- } elseif (isset($a[2])) {
- // has default value
- $value = $a[2];
- } else {
- $this->throwError("Failed to assign arg " . $a[1]);
- $value = null; // :(
- }
-
- $value = $this->reduce($value);
- $this->set($a[1], $value);
- $assignedValues[] = $value;
- } else {
- // a lit
- $i++;
- }
- }
-
- // check for a rest
- $last = end($args);
- if ($last[0] == "rest") {
- $rest = array_slice($orderedValues, count($args) - 1);
- $this->set($last[1], $this->reduce(array("list", " ", $rest)));
- }
-
- // wow is this the only true use of PHP's + operator for arrays?
- $this->env->arguments = $assignedValues + $orderedValues;
- }
-
- // compile a prop and update $lines or $blocks appropriately
- protected function compileProp($prop, $block, $out) {
- // set error position context
- $this->sourceLoc = isset($prop[-1]) ? $prop[-1] : -1;
-
- switch ($prop[0]) {
- case 'assign':
- list(, $name, $value) = $prop;
- if ($name[0] == $this->vPrefix) {
- $this->set($name, $value);
- } else {
- $out->lines[] = $this->formatter->property($name,
- $this->compileValue($this->reduce($value)));
- }
- break;
- case 'block':
- list(, $child) = $prop;
- $this->compileBlock($child);
- break;
- case 'mixin':
- list(, $path, $args, $suffix) = $prop;
-
- $orderedArgs = array();
- $keywordArgs = array();
- foreach ((array)$args as $arg) {
- $argval = null;
- switch ($arg[0]) {
- case "arg":
- if (!isset($arg[2])) {
- $orderedArgs[] = $this->reduce(array("variable", $arg[1]));
- } else {
- $keywordArgs[$arg[1]] = $this->reduce($arg[2]);
- }
- break;
-
- case "lit":
- $orderedArgs[] = $this->reduce($arg[1]);
- break;
- default:
- $this->throwError("Unknown arg type: " . $arg[0]);
- }
- }
-
- $mixins = $this->findBlocks($block, $path, $orderedArgs, $keywordArgs);
-
- if ($mixins === null) {
- $this->throwError("{$prop[1][0]} is undefined");
- }
-
- foreach ($mixins as $mixin) {
- if ($mixin === $block && !$orderedArgs) {
- continue;
- }
-
- $haveScope = false;
- if (isset($mixin->parent->scope)) {
- $haveScope = true;
- $mixinParentEnv = $this->pushEnv();
- $mixinParentEnv->storeParent = $mixin->parent->scope;
- }
-
- $haveArgs = false;
- if (isset($mixin->args)) {
- $haveArgs = true;
- $this->pushEnv();
- $this->zipSetArgs($mixin->args, $orderedArgs, $keywordArgs);
- }
-
- $oldParent = $mixin->parent;
- if ($mixin != $block) $mixin->parent = $block;
-
- foreach ($this->sortProps($mixin->props) as $subProp) {
- if ($suffix !== null &&
- $subProp[0] == "assign" &&
- is_string($subProp[1]) &&
- $subProp[1]{0} != $this->vPrefix)
- {
- $subProp[2] = array(
- 'list', ' ',
- array($subProp[2], array('keyword', $suffix))
- );
- }
-
- $this->compileProp($subProp, $mixin, $out);
- }
-
- $mixin->parent = $oldParent;
-
- if ($haveArgs) $this->popEnv();
- if ($haveScope) $this->popEnv();
- }
-
- break;
- case 'raw':
- $out->lines[] = $prop[1];
- break;
- case "directive":
- list(, $name, $value) = $prop;
- $out->lines[] = "@$name " . $this->compileValue($this->reduce($value)).';';
- break;
- case "comment":
- $out->lines[] = $prop[1];
- break;
- case "import";
- list(, $importPath, $importId) = $prop;
- $importPath = $this->reduce($importPath);
-
- if (!isset($this->env->imports)) {
- $this->env->imports = array();
- }
-
- $result = $this->tryImport($importPath, $block, $out);
-
- $this->env->imports[$importId] = $result === false ?
- array(false, "@import " . $this->compileValue($importPath).";") :
- $result;
-
- break;
- case "import_mixin":
- list(,$importId) = $prop;
- $import = $this->env->imports[$importId];
- if ($import[0] === false) {
- if (isset($import[1])) {
- $out->lines[] = $import[1];
- }
- } else {
- list(, $bottom, $parser, $importDir) = $import;
- $this->compileImportedProps($bottom, $block, $out, $parser, $importDir);
- }
-
- break;
- default:
- $this->throwError("unknown op: {$prop[0]}\n");
- }
- }
-
-
- /**
- * Compiles a primitive value into a CSS property value.
- *
- * Values in lessphp are typed by being wrapped in arrays, their format is
- * typically:
- *
- * array(type, contents [, additional_contents]*)
- *
- * The input is expected to be reduced. This function will not work on
- * things like expressions and variables.
- */
- public function compileValue($value) {
- switch ($value[0]) {
- case 'list':
- // [1] - delimiter
- // [2] - array of values
- return implode($value[1], array_map(array($this, 'compileValue'), $value[2]));
- case 'raw_color':
- if (!empty($this->formatter->compressColors)) {
- return $this->compileValue($this->coerceColor($value));
- }
- return $value[1];
- case 'keyword':
- // [1] - the keyword
- return $value[1];
- case 'number':
- list(, $num, $unit) = $value;
- // [1] - the number
- // [2] - the unit
- if ($this->numberPrecision !== null) {
- $num = round($num, $this->numberPrecision);
- }
- return $num . $unit;
- case 'string':
- // [1] - contents of string (includes quotes)
- list(, $delim, $content) = $value;
- foreach ($content as &$part) {
- if (is_array($part)) {
- $part = $this->compileValue($part);
- }
- }
- return $delim . implode($content) . $delim;
- case 'color':
- // [1] - red component (either number or a %)
- // [2] - green component
- // [3] - blue component
- // [4] - optional alpha component
- list(, $r, $g, $b) = $value;
- $r = round($r);
- $g = round($g);
- $b = round($b);
-
- if (count($value) == 5 && $value[4] != 1) { // rgba
- return 'rgba('.$r.','.$g.','.$b.','.$value[4].')';
- }
-
- $h = sprintf("#%02x%02x%02x", $r, $g, $b);
-
- if (!empty($this->formatter->compressColors)) {
- // Converting hex color to short notation (e.g. #003399 to #039)
- if ($h[1] === $h[2] && $h[3] === $h[4] && $h[5] === $h[6]) {
- $h = '#' . $h[1] . $h[3] . $h[5];
- }
- }
-
- return $h;
-
- case 'function':
- list(, $name, $args) = $value;
- return $name.'('.$this->compileValue($args).')';
- default: // assumed to be unit
- $this->throwError("unknown value type: $value[0]");
- }
- }
-
- protected function lib_pow($args) {
- list($base, $exp) = $this->assertArgs($args, 2, "pow");
- return pow($this->assertNumber($base), $this->assertNumber($exp));
- }
-
- protected function lib_pi() {
- return pi();
- }
-
- protected function lib_mod($args) {
- list($a, $b) = $this->assertArgs($args, 2, "mod");
- return $this->assertNumber($a) % $this->assertNumber($b);
- }
-
- protected function lib_tan($num) {
- return tan($this->assertNumber($num));
- }
-
- protected function lib_sin($num) {
- return sin($this->assertNumber($num));
- }
-
- protected function lib_cos($num) {
- return cos($this->assertNumber($num));
- }
-
- protected function lib_atan($num) {
- $num = atan($this->assertNumber($num));
- return array("number", $num, "rad");
- }
-
- protected function lib_asin($num) {
- $num = asin($this->assertNumber($num));
- return array("number", $num, "rad");
- }
-
- protected function lib_acos($num) {
- $num = acos($this->assertNumber($num));
- return array("number", $num, "rad");
- }
-
- protected function lib_sqrt($num) {
- return sqrt($this->assertNumber($num));
- }
-
- protected function lib_extract($value) {
- list($list, $idx) = $this->assertArgs($value, 2, "extract");
- $idx = $this->assertNumber($idx);
- // 1 indexed
- if ($list[0] == "list" && isset($list[2][$idx - 1])) {
- return $list[2][$idx - 1];
- }
- }
-
- protected function lib_isnumber($value) {
- return $this->toBool($value[0] == "number");
- }
-
- protected function lib_isstring($value) {
- return $this->toBool($value[0] == "string");
- }
-
- protected function lib_iscolor($value) {
- return $this->toBool($this->coerceColor($value));
- }
-
- protected function lib_iskeyword($value) {
- return $this->toBool($value[0] == "keyword");
- }
-
- protected function lib_ispixel($value) {
- return $this->toBool($value[0] == "number" && $value[2] == "px");
- }
-
- protected function lib_ispercentage($value) {
- return $this->toBool($value[0] == "number" && $value[2] == "%");
- }
-
- protected function lib_isem($value) {
- return $this->toBool($value[0] == "number" && $value[2] == "em");
- }
-
- protected function lib_isrem($value) {
- return $this->toBool($value[0] == "number" && $value[2] == "rem");
- }
-
- protected function lib_rgbahex($color) {
- $color = $this->coerceColor($color);
- if (is_null($color))
- $this->throwError("color expected for rgbahex");
-
- return sprintf("#%02x%02x%02x%02x",
- isset($color[4]) ? $color[4]*255 : 255,
- $color[1],$color[2], $color[3]);
- }
-
- protected function lib_argb($color){
- return $this->lib_rgbahex($color);
- }
-
- /**
- * Given an url, decide whether to output a regular link or the base64-encoded contents of the file
- *
- * @param array $value either an argument list (two strings) or a single string
- * @return string formatted url(), either as a link or base64-encoded
- */
- protected function lib_data_uri($value) {
- $mime = ($value[0] === 'list') ? $value[2][0][2] : null;
- $url = ($value[0] === 'list') ? $value[2][1][2][0] : $value[2][0];
-
- $fullpath = $this->findImport($url);
-
- if($fullpath && ($fsize = filesize($fullpath)) !== false) {
- // IE8 can't handle data uris larger than 32KB
- if($fsize/1024 < 32) {
- if(is_null($mime)) {
- if(class_exists('finfo')) { // php 5.3+
- // phpcs:ignore PHPCompatibility.PHP.NewClasses.finfoFound
- $finfo = new finfo(FILEINFO_MIME);
- $mime = explode('; ', $finfo->file($fullpath));
- $mime = $mime[0];
- } elseif(function_exists('mime_content_type')) { // PHP 5.2
- $mime = mime_content_type($fullpath);
- }
- }
-
- if(!is_null($mime)) // fallback if the mime type is still unknown
- $url = sprintf('data:%s;base64,%s', $mime, base64_encode(file_get_contents($fullpath)));
- }
- }
-
- return 'url("'.$url.'")';
- }
-
- // utility func to unquote a string
- protected function lib_e($arg) {
- switch ($arg[0]) {
- case "list":
- $items = $arg[2];
- if (isset($items[0])) {
- return $this->lib_e($items[0]);
- }
- $this->throwError("unrecognised input");
- case "string":
- $arg[1] = "";
- return $arg;
- case "keyword":
- return $arg;
- default:
- return array("keyword", $this->compileValue($arg));
- }
- }
-
- protected function lib__sprintf($args) {
- if ($args[0] != "list") return $args;
- $values = $args[2];
- $string = array_shift($values);
- $template = $this->compileValue($this->lib_e($string));
-
- $i = 0;
- if (preg_match_all('/%[dsa]/', $template, $m)) {
- foreach ($m[0] as $match) {
- $val = isset($values[$i]) ?
- $this->reduce($values[$i]) : array('keyword', '');
-
- // lessjs compat, renders fully expanded color, not raw color
- if ($color = $this->coerceColor($val)) {
- $val = $color;
- }
-
- $i++;
- $rep = $this->compileValue($this->lib_e($val));
- $template = preg_replace('/'.self::preg_quote($match).'/',
- $rep, $template, 1);
- }
- }
-
- $d = $string[0] == "string" ? $string[1] : '"';
- return array("string", $d, array($template));
- }
-
- protected function lib_floor($arg) {
- $value = $this->assertNumber($arg);
- return array("number", floor($value), $arg[2]);
- }
-
- protected function lib_ceil($arg) {
- $value = $this->assertNumber($arg);
- return array("number", ceil($value), $arg[2]);
- }
-
- protected function lib_round($arg) {
- if($arg[0] != "list") {
- $value = $this->assertNumber($arg);
- return array("number", round($value), $arg[2]);
- } else {
- $value = $this->assertNumber($arg[2][0]);
- $precision = $this->assertNumber($arg[2][1]);
- return array("number", round($value, $precision), $arg[2][0][2]);
- }
- }
-
- protected function lib_unit($arg) {
- if ($arg[0] == "list") {
- list($number, $newUnit) = $arg[2];
- return array("number", $this->assertNumber($number),
- $this->compileValue($this->lib_e($newUnit)));
- } else {
- return array("number", $this->assertNumber($arg), "");
- }
- }
-
- /**
- * Helper function to get arguments for color manipulation functions.
- * takes a list that contains a color like thing and a percentage
- */
- public function colorArgs($args) {
- if ($args[0] != 'list' || count($args[2]) < 2) {
- return array(array('color', 0, 0, 0), 0);
- }
- list($color, $delta) = $args[2];
- $color = $this->assertColor($color);
- $delta = floatval($delta[1]);
-
- return array($color, $delta);
- }
-
- protected function lib_darken($args) {
- list($color, $delta) = $this->colorArgs($args);
-
- $hsl = $this->toHSL($color);
- $hsl[3] = $this->clamp($hsl[3] - $delta, 100);
- return $this->toRGB($hsl);
- }
-
- protected function lib_lighten($args) {
- list($color, $delta) = $this->colorArgs($args);
-
- $hsl = $this->toHSL($color);
- $hsl[3] = $this->clamp($hsl[3] + $delta, 100);
- return $this->toRGB($hsl);
- }
-
- protected function lib_saturate($args) {
- list($color, $delta) = $this->colorArgs($args);
-
- $hsl = $this->toHSL($color);
- $hsl[2] = $this->clamp($hsl[2] + $delta, 100);
- return $this->toRGB($hsl);
- }
-
- protected function lib_desaturate($args) {
- list($color, $delta) = $this->colorArgs($args);
-
- $hsl = $this->toHSL($color);
- $hsl[2] = $this->clamp($hsl[2] - $delta, 100);
- return $this->toRGB($hsl);
- }
-
- protected function lib_spin($args) {
- list($color, $delta) = $this->colorArgs($args);
-
- $hsl = $this->toHSL($color);
-
- $hsl[1] = $hsl[1] + $delta % 360;
- if ($hsl[1] < 0) $hsl[1] += 360;
-
- return $this->toRGB($hsl);
- }
-
- protected function lib_fadeout($args) {
- list($color, $delta) = $this->colorArgs($args);
- $color[4] = $this->clamp((isset($color[4]) ? $color[4] : 1) - $delta/100);
- return $color;
- }
-
- protected function lib_fadein($args) {
- list($color, $delta) = $this->colorArgs($args);
- $color[4] = $this->clamp((isset($color[4]) ? $color[4] : 1) + $delta/100);
- return $color;
- }
-
- protected function lib_hue($color) {
- $hsl = $this->toHSL($this->assertColor($color));
- return round($hsl[1]);
- }
-
- protected function lib_saturation($color) {
- $hsl = $this->toHSL($this->assertColor($color));
- return round($hsl[2]);
- }
-
- protected function lib_lightness($color) {
- $hsl = $this->toHSL($this->assertColor($color));
- return round($hsl[3]);
- }
-
- // get the alpha of a color
- // defaults to 1 for non-colors or colors without an alpha
- protected function lib_alpha($value) {
- if (!is_null($color = $this->coerceColor($value))) {
- return isset($color[4]) ? $color[4] : 1;
- }
- }
-
- // set the alpha of the color
- protected function lib_fade($args) {
- list($color, $alpha) = $this->colorArgs($args);
- $color[4] = $this->clamp($alpha / 100.0);
- return $color;
- }
-
- protected function lib_percentage($arg) {
- $num = $this->assertNumber($arg);
- return array("number", $num*100, "%");
- }
-
- // mixes two colors by weight
- // mix(@color1, @color2, [@weight: 50%]);
- // http://sass-lang.com/docs/yardoc/Sass/Script/Functions.html#mix-instance_method
- protected function lib_mix($args) {
- if ($args[0] != "list" || count($args[2]) < 2)
- $this->throwError("mix expects (color1, color2, weight)");
-
- list($first, $second) = $args[2];
- $first = $this->assertColor($first);
- $second = $this->assertColor($second);
-
- $first_a = $this->lib_alpha($first);
- $second_a = $this->lib_alpha($second);
-
- if (isset($args[2][2])) {
- $weight = $args[2][2][1] / 100.0;
- } else {
- $weight = 0.5;
- }
-
- $w = $weight * 2 - 1;
- $a = $first_a - $second_a;
-
- $w1 = (($w * $a == -1 ? $w : ($w + $a)/(1 + $w * $a)) + 1) / 2.0;
- $w2 = 1.0 - $w1;
-
- $new = array('color',
- $w1 * $first[1] + $w2 * $second[1],
- $w1 * $first[2] + $w2 * $second[2],
- $w1 * $first[3] + $w2 * $second[3],
- );
-
- if ($first_a != 1.0 || $second_a != 1.0) {
- $new[] = $first_a * $weight + $second_a * ($weight - 1);
- }
-
- return $this->fixColor($new);
- }
-
- protected function lib_contrast($args) {
- $darkColor = array('color', 0, 0, 0);
- $lightColor = array('color', 255, 255, 255);
- $threshold = 0.43;
-
- if ( $args[0] == 'list' ) {
- $inputColor = ( isset($args[2][0]) ) ? $this->assertColor($args[2][0]) : $lightColor;
- $darkColor = ( isset($args[2][1]) ) ? $this->assertColor($args[2][1]) : $darkColor;
- $lightColor = ( isset($args[2][2]) ) ? $this->assertColor($args[2][2]) : $lightColor;
- $threshold = ( isset($args[2][3]) ) ? $this->assertNumber($args[2][3]) : $threshold;
- }
- else {
- $inputColor = $this->assertColor($args);
- }
-
- $inputColor = $this->coerceColor($inputColor);
- $darkColor = $this->coerceColor($darkColor);
- $lightColor = $this->coerceColor($lightColor);
-
- //Figure out which is actually light and dark!
- if ( $this->lib_luma($darkColor) > $this->lib_luma($lightColor) ) {
- $t = $lightColor;
- $lightColor = $darkColor;
- $darkColor = $t;
- }
-
- $inputColor_alpha = $this->lib_alpha($inputColor);
- if ( ( $this->lib_luma($inputColor) * $inputColor_alpha) < $threshold) {
- return $lightColor;
- }
- return $darkColor;
- }
-
- protected function lib_luma($color) {
- $color = $this->coerceColor($color);
- return (0.2126 * $color[0] / 255) + (0.7152 * $color[1] / 255) + (0.0722 * $color[2] / 255);
- }
-
-
- public function assertColor($value, $error = "expected color value") {
- $color = $this->coerceColor($value);
- if (is_null($color)) $this->throwError($error);
- return $color;
- }
-
- public function assertNumber($value, $error = "expecting number") {
- if ($value[0] == "number") return $value[1];
- $this->throwError($error);
- }
-
- public function assertArgs($value, $expectedArgs, $name="") {
- if ($expectedArgs == 1) {
- return $value;
- } else {
- if ($value[0] !== "list" || $value[1] != ",") $this->throwError("expecting list");
- $values = $value[2];
- $numValues = count($values);
- if ($expectedArgs != $numValues) {
- if ($name) {
- $name = $name . ": ";
- }
-
- $this->throwError("${name}expecting $expectedArgs arguments, got $numValues");
- }
-
- return $values;
- }
- }
-
- protected function toHSL($color) {
- if ($color[0] == 'hsl') return $color;
-
- $r = $color[1] / 255;
- $g = $color[2] / 255;
- $b = $color[3] / 255;
-
- $min = min($r, $g, $b);
- $max = max($r, $g, $b);
-
- $L = ($min + $max) / 2;
- if ($min == $max) {
- $S = $H = 0;
- } else {
- if ($L < 0.5)
- $S = ($max - $min)/($max + $min);
- else
- $S = ($max - $min)/(2.0 - $max - $min);
-
- if ($r == $max) $H = ($g - $b)/($max - $min);
- elseif ($g == $max) $H = 2.0 + ($b - $r)/($max - $min);
- elseif ($b == $max) $H = 4.0 + ($r - $g)/($max - $min);
-
- }
-
- $out = array('hsl',
- ($H < 0 ? $H + 6 : $H)*60,
- $S*100,
- $L*100,
- );
-
- if (count($color) > 4) $out[] = $color[4]; // copy alpha
- return $out;
- }
-
- protected function toRGB_helper($comp, $temp1, $temp2) {
- if ($comp < 0) $comp += 1.0;
- elseif ($comp > 1) $comp -= 1.0;
-
- if (6 * $comp < 1) return $temp1 + ($temp2 - $temp1) * 6 * $comp;
- if (2 * $comp < 1) return $temp2;
- if (3 * $comp < 2) return $temp1 + ($temp2 - $temp1)*((2/3) - $comp) * 6;
-
- return $temp1;
- }
-
- /**
- * Converts a hsl array into a color value in rgb.
- * Expects H to be in range of 0 to 360, S and L in 0 to 100
- */
- protected function toRGB($color) {
- if ($color[0] == 'color') return $color;
-
- $H = $color[1] / 360;
- $S = $color[2] / 100;
- $L = $color[3] / 100;
-
- if ($S == 0) {
- $r = $g = $b = $L;
- } else {
- $temp2 = $L < 0.5 ?
- $L*(1.0 + $S) :
- $L + $S - $L * $S;
-
- $temp1 = 2.0 * $L - $temp2;
-
- $r = $this->toRGB_helper($H + 1/3, $temp1, $temp2);
- $g = $this->toRGB_helper($H, $temp1, $temp2);
- $b = $this->toRGB_helper($H - 1/3, $temp1, $temp2);
- }
-
- // $out = array('color', round($r*255), round($g*255), round($b*255));
- $out = array('color', $r*255, $g*255, $b*255);
- if (count($color) > 4) $out[] = $color[4]; // copy alpha
- return $out;
- }
-
- protected function clamp($v, $max = 1, $min = 0) {
- return min($max, max($min, $v));
- }
-
- /**
- * Convert the rgb, rgba, hsl color literals of function type
- * as returned by the parser into values of color type.
- */
- protected function funcToColor($func) {
- $fname = $func[1];
- if ($func[2][0] != 'list') return false; // need a list of arguments
- $rawComponents = $func[2][2];
-
- if ($fname == 'hsl' || $fname == 'hsla') {
- $hsl = array('hsl');
- $i = 0;
- foreach ($rawComponents as $c) {
- $val = $this->reduce($c);
- $val = isset($val[1]) ? floatval($val[1]) : 0;
-
- if ($i == 0) $clamp = 360;
- elseif ($i < 3) $clamp = 100;
- else $clamp = 1;
-
- $hsl[] = $this->clamp($val, $clamp);
- $i++;
- }
-
- while (count($hsl) < 4) $hsl[] = 0;
- return $this->toRGB($hsl);
-
- } elseif ($fname == 'rgb' || $fname == 'rgba') {
- $components = array();
- $i = 1;
- foreach ($rawComponents as $c) {
- $c = $this->reduce($c);
- if ($i < 4) {
- if ($c[0] == "number" && $c[2] == "%") {
- $components[] = 255 * ($c[1] / 100);
- } else {
- $components[] = floatval($c[1]);
- }
- } elseif ($i == 4) {
- if ($c[0] == "number" && $c[2] == "%") {
- $components[] = 1.0 * ($c[1] / 100);
- } else {
- $components[] = floatval($c[1]);
- }
- } else break;
-
- $i++;
- }
- while (count($components) < 3) $components[] = 0;
- array_unshift($components, 'color');
- return $this->fixColor($components);
- }
-
- return false;
- }
-
- protected function reduce($value, $forExpression = false) {
- switch ($value[0]) {
- case "interpolate":
- $reduced = $this->reduce($value[1]);
- $var = $this->compileValue($reduced);
- $res = $this->reduce(array("variable", $this->vPrefix . $var));
-
- if ($res[0] == "raw_color") {
- $res = $this->coerceColor($res);
- }
-
- if (empty($value[2])) $res = $this->lib_e($res);
-
- return $res;
- case "variable":
- $key = $value[1];
- if (is_array($key)) {
- $key = $this->reduce($key);
- $key = $this->vPrefix . $this->compileValue($this->lib_e($key));
- }
-
- $seen =& $this->env->seenNames;
-
- if (!empty($seen[$key])) {
- $this->throwError("infinite loop detected: $key");
- }
-
- $seen[$key] = true;
- $out = $this->reduce($this->get($key));
- $seen[$key] = false;
- return $out;
- case "list":
- foreach ($value[2] as &$item) {
- $item = $this->reduce($item, $forExpression);
- }
- return $value;
- case "expression":
- return $this->evaluate($value);
- case "string":
- foreach ($value[2] as &$part) {
- if (is_array($part)) {
- $strip = $part[0] == "variable";
- $part = $this->reduce($part);
- if ($strip) $part = $this->lib_e($part);
- }
- }
- return $value;
- case "escape":
- list(,$inner) = $value;
- return $this->lib_e($this->reduce($inner));
- case "function":
- $color = $this->funcToColor($value);
- if ($color) return $color;
-
- list(, $name, $args) = $value;
- if ($name == "%") $name = "_sprintf";
-
- $f = isset($this->libFunctions[$name]) ?
- $this->libFunctions[$name] : array($this, 'lib_'.str_replace('-', '_', $name));
-
- if (is_callable($f)) {
- if ($args[0] == 'list')
- $args = self::compressList($args[2], $args[1]);
-
- $ret = call_user_func($f, $this->reduce($args, true), $this);
-
- if (is_null($ret)) {
- return array("string", "", array(
- $name, "(", $args, ")"
- ));
- }
-
- // convert to a typed value if the result is a php primitive
- if (is_numeric($ret)) $ret = array('number', $ret, "");
- elseif (!is_array($ret)) $ret = array('keyword', $ret);
-
- return $ret;
- }
-
- // plain function, reduce args
- $value[2] = $this->reduce($value[2]);
- return $value;
- case "unary":
- list(, $op, $exp) = $value;
- $exp = $this->reduce($exp);
-
- if ($exp[0] == "number") {
- switch ($op) {
- case "+":
- return $exp;
- case "-":
- $exp[1] *= -1;
- return $exp;
- }
- }
- return array("string", "", array($op, $exp));
- }
-
- if ($forExpression) {
- switch ($value[0]) {
- case "keyword":
- if ($color = $this->coerceColor($value)) {
- return $color;
- }
- break;
- case "raw_color":
- return $this->coerceColor($value);
- }
- }
-
- return $value;
- }
-
-
- // coerce a value for use in color operation
- protected function coerceColor($value) {
- switch($value[0]) {
- case 'color': return $value;
- case 'raw_color':
- $c = array("color", 0, 0, 0);
- $colorStr = substr($value[1], 1);
- $num = hexdec($colorStr);
- $width = strlen($colorStr) == 3 ? 16 : 256;
-
- for ($i = 3; $i > 0; $i--) { // 3 2 1
- $t = $num % $width;
- $num /= $width;
-
- $c[$i] = $t * (256/$width) + $t * floor(16/$width);
- }
-
- return $c;
- case 'keyword':
- $name = $value[1];
- if (isset(self::$cssColors[$name])) {
- $rgba = explode(',', self::$cssColors[$name]);
-
- if(isset($rgba[3]))
- return array('color', $rgba[0], $rgba[1], $rgba[2], $rgba[3]);
-
- return array('color', $rgba[0], $rgba[1], $rgba[2]);
- }
- return null;
- }
- }
-
- // make something string like into a string
- protected function coerceString($value) {
- switch ($value[0]) {
- case "string":
- return $value;
- case "keyword":
- return array("string", "", array($value[1]));
- }
- return null;
- }
-
- // turn list of length 1 into value type
- protected function flattenList($value) {
- if ($value[0] == "list" && count($value[2]) == 1) {
- return $this->flattenList($value[2][0]);
- }
- return $value;
- }
-
- public function toBool($a) {
- if ($a) return self::$TRUE;
- else return self::$FALSE;
- }
-
- // evaluate an expression
- protected function evaluate($exp) {
- list(, $op, $left, $right, $whiteBefore, $whiteAfter) = $exp;
-
- $left = $this->reduce($left, true);
- $right = $this->reduce($right, true);
-
- if ($leftColor = $this->coerceColor($left)) {
- $left = $leftColor;
- }
-
- if ($rightColor = $this->coerceColor($right)) {
- $right = $rightColor;
- }
-
- $ltype = $left[0];
- $rtype = $right[0];
-
- // operators that work on all types
- if ($op == "and") {
- return $this->toBool($left == self::$TRUE && $right == self::$TRUE);
- }
-
- if ($op == "=") {
- return $this->toBool($this->eq($left, $right) );
- }
-
- if ($op == "+" && !is_null($str = $this->stringConcatenate($left, $right))) {
- return $str;
- }
-
- // type based operators
- $fname = "op_${ltype}_${rtype}";
- if (is_callable(array($this, $fname))) {
- $out = $this->$fname($op, $left, $right);
- if (!is_null($out)) return $out;
- }
-
- // make the expression look it did before being parsed
- $paddedOp = $op;
- if ($whiteBefore) $paddedOp = " " . $paddedOp;
- if ($whiteAfter) $paddedOp .= " ";
-
- return array("string", "", array($left, $paddedOp, $right));
- }
-
- protected function stringConcatenate($left, $right) {
- if ($strLeft = $this->coerceString($left)) {
- if ($right[0] == "string") {
- $right[1] = "";
- }
- $strLeft[2][] = $right;
- return $strLeft;
- }
-
- if ($strRight = $this->coerceString($right)) {
- array_unshift($strRight[2], $left);
- return $strRight;
- }
- }
-
-
- // make sure a color's components don't go out of bounds
- protected function fixColor($c) {
- foreach (range(1, 3) as $i) {
- if ($c[$i] < 0) $c[$i] = 0;
- if ($c[$i] > 255) $c[$i] = 255;
- }
-
- return $c;
- }
-
- protected function op_number_color($op, $lft, $rgt) {
- if ($op == '+' || $op == '*') {
- return $this->op_color_number($op, $rgt, $lft);
- }
- }
-
- protected function op_color_number($op, $lft, $rgt) {
- if ($rgt[0] == '%') $rgt[1] /= 100;
-
- return $this->op_color_color($op, $lft,
- array_fill(1, count($lft) - 1, $rgt[1]));
- }
-
- protected function op_color_color($op, $left, $right) {
- $out = array('color');
- $max = count($left) > count($right) ? count($left) : count($right);
- foreach (range(1, $max - 1) as $i) {
- $lval = isset($left[$i]) ? $left[$i] : 0;
- $rval = isset($right[$i]) ? $right[$i] : 0;
- switch ($op) {
- case '+':
- $out[] = $lval + $rval;
- break;
- case '-':
- $out[] = $lval - $rval;
- break;
- case '*':
- $out[] = $lval * $rval;
- break;
- case '%':
- $out[] = $lval % $rval;
- break;
- case '/':
- if ($rval == 0) $this->throwError("evaluate error: can't divide by zero");
- $out[] = $lval / $rval;
- break;
- default:
- $this->throwError('evaluate error: color op number failed on op '.$op);
- }
- }
- return $this->fixColor($out);
- }
-
- function lib_red($color){
- $color = $this->coerceColor($color);
- if (is_null($color)) {
- $this->throwError('color expected for red()');
- }
-
- return $color[1];
- }
-
- function lib_green($color){
- $color = $this->coerceColor($color);
- if (is_null($color)) {
- $this->throwError('color expected for green()');
- }
-
- return $color[2];
- }
-
- function lib_blue($color){
- $color = $this->coerceColor($color);
- if (is_null($color)) {
- $this->throwError('color expected for blue()');
- }
-
- return $color[3];
- }
-
-
- // operator on two numbers
- protected function op_number_number($op, $left, $right) {
- $unit = empty($left[2]) ? $right[2] : $left[2];
-
- $value = 0;
- switch ($op) {
- case '+':
- $value = $left[1] + $right[1];
- break;
- case '*':
- $value = $left[1] * $right[1];
- break;
- case '-':
- $value = $left[1] - $right[1];
- break;
- case '%':
- $value = $left[1] % $right[1];
- break;
- case '/':
- if ($right[1] == 0) $this->throwError('parse error: divide by zero');
- $value = $left[1] / $right[1];
- break;
- case '<':
- return $this->toBool($left[1] < $right[1]);
- case '>':
- return $this->toBool($left[1] > $right[1]);
- case '>=':
- return $this->toBool($left[1] >= $right[1]);
- case '=<':
- return $this->toBool($left[1] <= $right[1]);
- default:
- $this->throwError('parse error: unknown number operator: '.$op);
- }
-
- return array("number", $value, $unit);
- }
-
-
- /* environment functions */
-
- protected function makeOutputBlock($type, $selectors = null) {
- $b = new stdclass;
- $b->lines = array();
- $b->children = array();
- $b->selectors = $selectors;
- $b->type = $type;
- $b->parent = $this->scope;
- return $b;
- }
-
- // the state of execution
- protected function pushEnv($block = null) {
- $e = new stdclass;
- $e->parent = $this->env;
- $e->store = array();
- $e->block = $block;
-
- $this->env = $e;
- return $e;
- }
-
- // pop something off the stack
- protected function popEnv() {
- $old = $this->env;
- $this->env = $this->env->parent;
- return $old;
- }
-
- // set something in the current env
- protected function set($name, $value) {
- $this->env->store[$name] = $value;
- }
-
-
- // get the highest occurrence entry for a name
- protected function get($name) {
- $current = $this->env;
-
- $isArguments = $name == $this->vPrefix . 'arguments';
- while ($current) {
- if ($isArguments && isset($current->arguments)) {
- return array('list', ' ', $current->arguments);
- }
-
- if (isset($current->store[$name]))
- return $current->store[$name];
- else {
- $current = isset($current->storeParent) ?
- $current->storeParent : $current->parent;
- }
- }
-
- $this->throwError("variable $name is undefined");
- }
-
- // inject array of unparsed strings into environment as variables
- protected function injectVariables($args) {
- $this->pushEnv();
- $parser = new lessc_parser($this, __METHOD__);
- foreach ($args as $name => $strValue) {
- if ($name{0} != '@') $name = '@'.$name;
- $parser->count = 0;
- $parser->buffer = (string)$strValue;
- if (!$parser->propertyValue($value)) {
- throw new Exception("failed to parse passed in variable $name: $strValue");
- }
-
- $this->set($name, $value);
- }
- }
-
- /**
- * Initialize any static state, can initialize parser for a file
- * $opts isn't used yet
- */
- public function __construct($fname = null) {
- if ($fname !== null) {
- // used for deprecated parse method
- $this->_parseFile = $fname;
- }
- }
-
- public function compile($string, $name = null) {
- $locale = setlocale(LC_NUMERIC, 0);
- setlocale(LC_NUMERIC, "C");
-
- $this->parser = $this->makeParser($name);
- $root = $this->parser->parse($string);
-
- $this->env = null;
- $this->scope = null;
-
- $this->formatter = $this->newFormatter();
-
- if (!empty($this->registeredVars)) {
- $this->injectVariables($this->registeredVars);
- }
-
- $this->sourceParser = $this->parser; // used for error messages
- $this->compileBlock($root);
-
- ob_start();
- $this->formatter->block($this->scope);
- $out = ob_get_clean();
- setlocale(LC_NUMERIC, $locale);
- return $out;
- }
-
- public function compileFile($fname, $outFname = null) {
- if (!is_readable($fname)) {
- throw new Exception('load error: failed to find '.$fname);
- }
-
- $pi = pathinfo($fname);
-
- $oldImport = $this->importDir;
-
- $this->importDir = (array)$this->importDir;
- $this->importDir[] = $pi['dirname'].'/';
-
- $this->addParsedFile($fname);
-
- $out = $this->compile(file_get_contents($fname), $fname);
-
- $this->importDir = $oldImport;
-
- if ($outFname !== null) {
- return file_put_contents($outFname, $out);
- }
-
- return $out;
- }
-
- // compile only if changed input has changed or output doesn't exist
- public function checkedCompile($in, $out) {
- if (!is_file($out) || filemtime($in) > filemtime($out)) {
- $this->compileFile($in, $out);
- return true;
- }
- return false;
- }
-
- /**
- * Execute lessphp on a .less file or a lessphp cache structure
- *
- * The lessphp cache structure contains information about a specific
- * less file having been parsed. It can be used as a hint for future
- * calls to determine whether or not a rebuild is required.
- *
- * The cache structure contains two important keys that may be used
- * externally:
- *
- * compiled: The final compiled CSS
- * updated: The time (in seconds) the CSS was last compiled
- *
- * The cache structure is a plain-ol' PHP associative array and can
- * be serialized and unserialized without a hitch.
- *
- * @param mixed $in Input
- * @param bool $force Force rebuild?
- * @return array lessphp cache structure
- */
- public function cachedCompile($in, $force = false) {
- // assume no root
- $root = null;
-
- if (is_string($in)) {
- $root = $in;
- } elseif (is_array($in) and isset($in['root'])) {
- if ($force or ! isset($in['files'])) {
- // If we are forcing a recompile or if for some reason the
- // structure does not contain any file information we should
- // specify the root to trigger a rebuild.
- $root = $in['root'];
- } elseif (isset($in['files']) and is_array($in['files'])) {
- foreach ($in['files'] as $fname => $ftime ) {
- if (!file_exists($fname) or filemtime($fname) > $ftime) {
- // One of the files we knew about previously has changed
- // so we should look at our incoming root again.
- $root = $in['root'];
- break;
- }
- }
- }
- } else {
- // TODO: Throw an exception? We got neither a string nor something
- // that looks like a compatible lessphp cache structure.
- return null;
- }
-
- if ($root !== null) {
- // If we have a root value which means we should rebuild.
- $out = array();
- $out['root'] = $root;
- $out['compiled'] = $this->compileFile($root);
- $out['files'] = $this->allParsedFiles();
- $out['updated'] = time();
- return $out;
- } else {
- // No changes, pass back the structure
- // we were given initially.
- return $in;
- }
-
- }
-
- // parse and compile buffer
- // This is deprecated
- public function parse($str = null, $initialVariables = null) {
- if (is_array($str)) {
- $initialVariables = $str;
- $str = null;
- }
-
- $oldVars = $this->registeredVars;
- if ($initialVariables !== null) {
- $this->setVariables($initialVariables);
- }
-
- if ($str == null) {
- if (empty($this->_parseFile)) {
- throw new exception("nothing to parse");
- }
-
- $out = $this->compileFile($this->_parseFile);
- } else {
- $out = $this->compile($str);
- }
-
- $this->registeredVars = $oldVars;
- return $out;
- }
-
- protected function makeParser($name) {
- $parser = new lessc_parser($this, $name);
- $parser->writeComments = $this->preserveComments;
-
- return $parser;
- }
-
- public function setFormatter($name) {
- $this->formatterName = $name;
- }
-
- protected function newFormatter() {
- $className = "lessc_formatter_lessjs";
- if (!empty($this->formatterName)) {
- if (!is_string($this->formatterName))
- return $this->formatterName;
- $className = "lessc_formatter_$this->formatterName";
- }
-
- return new $className;
- }
-
- public function setPreserveComments($preserve) {
- $this->preserveComments = $preserve;
- }
-
- public function registerFunction($name, $func) {
- $this->libFunctions[$name] = $func;
- }
-
- public function unregisterFunction($name) {
- unset($this->libFunctions[$name]);
- }
-
- public function setVariables($variables) {
- $this->registeredVars = array_merge($this->registeredVars, $variables);
- }
-
- public function unsetVariable($name) {
- unset($this->registeredVars[$name]);
- }
-
- public function setImportDir($dirs) {
- $this->importDir = (array)$dirs;
- }
-
- public function addImportDir($dir) {
- $this->importDir = (array)$this->importDir;
- $this->importDir[] = $dir;
- }
-
- public function allParsedFiles() {
- return $this->allParsedFiles;
- }
-
- public function addParsedFile($file) {
- $this->allParsedFiles[realpath($file)] = filemtime($file);
- }
-
- /**
- * Uses the current value of $this->count to show line and line number
- */
- public function throwError($msg = null) {
- if ($this->sourceLoc >= 0) {
- $this->sourceParser->throwError($msg, $this->sourceLoc);
- }
- throw new exception($msg);
- }
-
- // compile file $in to file $out if $in is newer than $out
- // returns true when it compiles, false otherwise
- public static function ccompile($in, $out, $less = null) {
- if ($less === null) {
- $less = new self;
- }
- return $less->checkedCompile($in, $out);
- }
-
- public static function cexecute($in, $force = false, $less = null) {
- if ($less === null) {
- $less = new self;
- }
- return $less->cachedCompile($in, $force);
- }
-
- static protected $cssColors = array(
- 'aliceblue' => '240,248,255',
- 'antiquewhite' => '250,235,215',
- 'aqua' => '0,255,255',
- 'aquamarine' => '127,255,212',
- 'azure' => '240,255,255',
- 'beige' => '245,245,220',
- 'bisque' => '255,228,196',
- 'black' => '0,0,0',
- 'blanchedalmond' => '255,235,205',
- 'blue' => '0,0,255',
- 'blueviolet' => '138,43,226',
- 'brown' => '165,42,42',
- 'burlywood' => '222,184,135',
- 'cadetblue' => '95,158,160',
- 'chartreuse' => '127,255,0',
- 'chocolate' => '210,105,30',
- 'coral' => '255,127,80',
- 'cornflowerblue' => '100,149,237',
- 'cornsilk' => '255,248,220',
- 'crimson' => '220,20,60',
- 'cyan' => '0,255,255',
- 'darkblue' => '0,0,139',
- 'darkcyan' => '0,139,139',
- 'darkgoldenrod' => '184,134,11',
- 'darkgray' => '169,169,169',
- 'darkgreen' => '0,100,0',
- 'darkgrey' => '169,169,169',
- 'darkkhaki' => '189,183,107',
- 'darkmagenta' => '139,0,139',
- 'darkolivegreen' => '85,107,47',
- 'darkorange' => '255,140,0',
- 'darkorchid' => '153,50,204',
- 'darkred' => '139,0,0',
- 'darksalmon' => '233,150,122',
- 'darkseagreen' => '143,188,143',
- 'darkslateblue' => '72,61,139',
- 'darkslategray' => '47,79,79',
- 'darkslategrey' => '47,79,79',
- 'darkturquoise' => '0,206,209',
- 'darkviolet' => '148,0,211',
- 'deeppink' => '255,20,147',
- 'deepskyblue' => '0,191,255',
- 'dimgray' => '105,105,105',
- 'dimgrey' => '105,105,105',
- 'dodgerblue' => '30,144,255',
- 'firebrick' => '178,34,34',
- 'floralwhite' => '255,250,240',
- 'forestgreen' => '34,139,34',
- 'fuchsia' => '255,0,255',
- 'gainsboro' => '220,220,220',
- 'ghostwhite' => '248,248,255',
- 'gold' => '255,215,0',
- 'goldenrod' => '218,165,32',
- 'gray' => '128,128,128',
- 'green' => '0,128,0',
- 'greenyellow' => '173,255,47',
- 'grey' => '128,128,128',
- 'honeydew' => '240,255,240',
- 'hotpink' => '255,105,180',
- 'indianred' => '205,92,92',
- 'indigo' => '75,0,130',
- 'ivory' => '255,255,240',
- 'khaki' => '240,230,140',
- 'lavender' => '230,230,250',
- 'lavenderblush' => '255,240,245',
- 'lawngreen' => '124,252,0',
- 'lemonchiffon' => '255,250,205',
- 'lightblue' => '173,216,230',
- 'lightcoral' => '240,128,128',
- 'lightcyan' => '224,255,255',
- 'lightgoldenrodyellow' => '250,250,210',
- 'lightgray' => '211,211,211',
- 'lightgreen' => '144,238,144',
- 'lightgrey' => '211,211,211',
- 'lightpink' => '255,182,193',
- 'lightsalmon' => '255,160,122',
- 'lightseagreen' => '32,178,170',
- 'lightskyblue' => '135,206,250',
- 'lightslategray' => '119,136,153',
- 'lightslategrey' => '119,136,153',
- 'lightsteelblue' => '176,196,222',
- 'lightyellow' => '255,255,224',
- 'lime' => '0,255,0',
- 'limegreen' => '50,205,50',
- 'linen' => '250,240,230',
- 'magenta' => '255,0,255',
- 'maroon' => '128,0,0',
- 'mediumaquamarine' => '102,205,170',
- 'mediumblue' => '0,0,205',
- 'mediumorchid' => '186,85,211',
- 'mediumpurple' => '147,112,219',
- 'mediumseagreen' => '60,179,113',
- 'mediumslateblue' => '123,104,238',
- 'mediumspringgreen' => '0,250,154',
- 'mediumturquoise' => '72,209,204',
- 'mediumvioletred' => '199,21,133',
- 'midnightblue' => '25,25,112',
- 'mintcream' => '245,255,250',
- 'mistyrose' => '255,228,225',
- 'moccasin' => '255,228,181',
- 'navajowhite' => '255,222,173',
- 'navy' => '0,0,128',
- 'oldlace' => '253,245,230',
- 'olive' => '128,128,0',
- 'olivedrab' => '107,142,35',
- 'orange' => '255,165,0',
- 'orangered' => '255,69,0',
- 'orchid' => '218,112,214',
- 'palegoldenrod' => '238,232,170',
- 'palegreen' => '152,251,152',
- 'paleturquoise' => '175,238,238',
- 'palevioletred' => '219,112,147',
- 'papayawhip' => '255,239,213',
- 'peachpuff' => '255,218,185',
- 'peru' => '205,133,63',
- 'pink' => '255,192,203',
- 'plum' => '221,160,221',
- 'powderblue' => '176,224,230',
- 'purple' => '128,0,128',
- 'red' => '255,0,0',
- 'rosybrown' => '188,143,143',
- 'royalblue' => '65,105,225',
- 'saddlebrown' => '139,69,19',
- 'salmon' => '250,128,114',
- 'sandybrown' => '244,164,96',
- 'seagreen' => '46,139,87',
- 'seashell' => '255,245,238',
- 'sienna' => '160,82,45',
- 'silver' => '192,192,192',
- 'skyblue' => '135,206,235',
- 'slateblue' => '106,90,205',
- 'slategray' => '112,128,144',
- 'slategrey' => '112,128,144',
- 'snow' => '255,250,250',
- 'springgreen' => '0,255,127',
- 'steelblue' => '70,130,180',
- 'tan' => '210,180,140',
- 'teal' => '0,128,128',
- 'thistle' => '216,191,216',
- 'tomato' => '255,99,71',
- 'transparent' => '0,0,0,0',
- 'turquoise' => '64,224,208',
- 'violet' => '238,130,238',
- 'wheat' => '245,222,179',
- 'white' => '255,255,255',
- 'whitesmoke' => '245,245,245',
- 'yellow' => '255,255,0',
- 'yellowgreen' => '154,205,50'
- );
-}
-
-// responsible for taking a string of LESS code and converting it into a
-// syntax tree
-class lessc_parser {
- static protected $nextBlockId = 0; // used to uniquely identify blocks
-
- static protected $precedence = array(
- '=<' => 0,
- '>=' => 0,
- '=' => 0,
- '<' => 0,
- '>' => 0,
-
- '+' => 1,
- '-' => 1,
- '*' => 2,
- '/' => 2,
- '%' => 2,
- );
-
- static protected $whitePattern;
- static protected $commentMulti;
-
- static protected $commentSingle = "//";
- static protected $commentMultiLeft = "/*";
- static protected $commentMultiRight = "*/";
-
- // regex string to match any of the operators
- static protected $operatorString;
-
- // these properties will supress division unless it's inside parenthases
- static protected $supressDivisionProps =
- array('/border-radius$/i', '/^font$/i');
-
- protected $blockDirectives = array("font-face", "keyframes", "page", "-moz-document", "viewport", "-moz-viewport", "-o-viewport", "-ms-viewport");
- protected $lineDirectives = array("charset");
-
- /**
- * if we are in parens we can be more liberal with whitespace around
- * operators because it must evaluate to a single value and thus is less
- * ambiguous.
- *
- * Consider:
- * property1: 10 -5; // is two numbers, 10 and -5
- * property2: (10 -5); // should evaluate to 5
- */
- protected $inParens = false;
-
- // caches preg escaped literals
- static protected $literalCache = array();
-
- public function __construct($lessc, $sourceName = null) {
- $this->eatWhiteDefault = true;
- // reference to less needed for vPrefix, mPrefix, and parentSelector
- $this->lessc = $lessc;
-
- $this->sourceName = $sourceName; // name used for error messages
-
- $this->writeComments = false;
-
- if (!self::$operatorString) {
- self::$operatorString =
- '('.implode('|', array_map(array('lessc', 'preg_quote'),
- array_keys(self::$precedence))).')';
-
- $commentSingle = lessc::preg_quote(self::$commentSingle);
- $commentMultiLeft = lessc::preg_quote(self::$commentMultiLeft);
- $commentMultiRight = lessc::preg_quote(self::$commentMultiRight);
-
- self::$commentMulti = $commentMultiLeft.'.*?'.$commentMultiRight;
- self::$whitePattern = '/'.$commentSingle.'[^\n]*\s*|('.self::$commentMulti.')\s*|\s+/Ais';
- }
- }
-
- public function parse($buffer) {
- $this->count = 0;
- $this->line = 1;
-
- $this->env = null; // block stack
- $this->buffer = $this->writeComments ? $buffer : $this->removeComments($buffer);
- $this->pushSpecialBlock("root");
- $this->eatWhiteDefault = true;
- $this->seenComments = array();
-
- // trim whitespace on head
- // if (preg_match('/^\s+/', $this->buffer, $m)) {
- // $this->line += substr_count($m[0], "\n");
- // $this->buffer = ltrim($this->buffer);
- // }
- $this->whitespace();
-
- // parse the entire file
- while (false !== $this->parseChunk());
-
- if ($this->count != strlen($this->buffer))
- $this->throwError();
-
- // TODO report where the block was opened
- if ( !property_exists($this->env, 'parent') || !is_null($this->env->parent) )
- throw new exception('parse error: unclosed block');
-
- return $this->env;
- }
-
- /**
- * Parse a single chunk off the head of the buffer and append it to the
- * current parse environment.
- * Returns false when the buffer is empty, or when there is an error.
- *
- * This function is called repeatedly until the entire document is
- * parsed.
- *
- * This parser is most similar to a recursive descent parser. Single
- * functions represent discrete grammatical rules for the language, and
- * they are able to capture the text that represents those rules.
- *
- * Consider the function lessc::keyword(). (all parse functions are
- * structured the same)
- *
- * The function takes a single reference argument. When calling the
- * function it will attempt to match a keyword on the head of the buffer.
- * If it is successful, it will place the keyword in the referenced
- * argument, advance the position in the buffer, and return true. If it
- * fails then it won't advance the buffer and it will return false.
- *
- * All of these parse functions are powered by lessc::match(), which behaves
- * the same way, but takes a literal regular expression. Sometimes it is
- * more convenient to use match instead of creating a new function.
- *
- * Because of the format of the functions, to parse an entire string of
- * grammatical rules, you can chain them together using &&.
- *
- * But, if some of the rules in the chain succeed before one fails, then
- * the buffer position will be left at an invalid state. In order to
- * avoid this, lessc::seek() is used to remember and set buffer positions.
- *
- * Before parsing a chain, use $s = $this->seek() to remember the current
- * position into $s. Then if a chain fails, use $this->seek($s) to
- * go back where we started.
- */
- protected function parseChunk() {
- if (empty($this->buffer)) return false;
- $s = $this->seek();
-
- if ($this->whitespace()) {
- return true;
- }
-
- // setting a property
- if ($this->keyword($key) && $this->assign() &&
- $this->propertyValue($value, $key) && $this->end())
- {
- $this->append(array('assign', $key, $value), $s);
- return true;
- } else {
- $this->seek($s);
- }
-
-
- // look for special css blocks
- if ($this->literal('@', false)) {
- $this->count--;
-
- // media
- if ($this->literal('@media')) {
- if (($this->mediaQueryList($mediaQueries) || true)
- && $this->literal('{'))
- {
- $media = $this->pushSpecialBlock("media");
- $media->queries = is_null($mediaQueries) ? array() : $mediaQueries;
- return true;
- } else {
- $this->seek($s);
- return false;
- }
- }
-
- if ($this->literal("@", false) && $this->keyword($dirName)) {
- if ($this->isDirective($dirName, $this->blockDirectives)) {
- if (($this->openString("{", $dirValue, null, array(";")) || true) &&
- $this->literal("{"))
- {
- $dir = $this->pushSpecialBlock("directive");
- $dir->name = $dirName;
- if (isset($dirValue)) $dir->value = $dirValue;
- return true;
- }
- } elseif ($this->isDirective($dirName, $this->lineDirectives)) {
- if ($this->propertyValue($dirValue) && $this->end()) {
- $this->append(array("directive", $dirName, $dirValue));
- return true;
- }
- }
- }
-
- $this->seek($s);
- }
-
- // setting a variable
- if ($this->variable($var) && $this->assign() &&
- $this->propertyValue($value) && $this->end())
- {
- $this->append(array('assign', $var, $value), $s);
- return true;
- } else {
- $this->seek($s);
- }
-
- if ($this->import($importValue)) {
- $this->append($importValue, $s);
- return true;
- }
-
- // opening parametric mixin
- if ($this->tag($tag, true) && $this->argumentDef($args, $isVararg) &&
- ($this->guards($guards) || true) &&
- $this->literal('{'))
- {
- $block = $this->pushBlock($this->fixTags(array($tag)));
- $block->args = $args;
- $block->isVararg = $isVararg;
- if (!empty($guards)) $block->guards = $guards;
- return true;
- } else {
- $this->seek($s);
- }
-
- // opening a simple block
- if ($this->tags($tags) && $this->literal('{', false)) {
- $tags = $this->fixTags($tags);
- $this->pushBlock($tags);
- return true;
- } else {
- $this->seek($s);
- }
-
- // closing a block
- if ($this->literal('}', false)) {
- try {
- $block = $this->pop();
- } catch (exception $e) {
- $this->seek($s);
- $this->throwError($e->getMessage());
- }
-
- $hidden = false;
- if (is_null($block->type)) {
- $hidden = true;
- if (!isset($block->args)) {
- foreach ($block->tags as $tag) {
- if (!is_string($tag) || $tag{0} != $this->lessc->mPrefix) {
- $hidden = false;
- break;
- }
- }
- }
-
- foreach ($block->tags as $tag) {
- if (is_string($tag)) {
- $this->env->children[$tag][] = $block;
- }
- }
- }
-
- if (!$hidden) {
- $this->append(array('block', $block), $s);
- }
-
- // this is done here so comments aren't bundled into he block that
- // was just closed
- $this->whitespace();
- return true;
- }
-
- // mixin
- if ($this->mixinTags($tags) &&
- ($this->argumentDef($argv, $isVararg) || true) &&
- ($this->keyword($suffix) || true) && $this->end())
- {
- $tags = $this->fixTags($tags);
- $this->append(array('mixin', $tags, $argv, $suffix), $s);
- return true;
- } else {
- $this->seek($s);
- }
-
- // spare ;
- if ($this->literal(';')) return true;
-
- return false; // got nothing, throw error
- }
-
- protected function isDirective($dirname, $directives) {
- // TODO: cache pattern in parser
- $pattern = implode("|",
- array_map(array("lessc", "preg_quote"), $directives));
- $pattern = '/^(-[a-z-]+-)?(' . $pattern . ')$/i';
-
- return preg_match($pattern, $dirname);
- }
-
- protected function fixTags($tags) {
- // move @ tags out of variable namespace
- foreach ($tags as &$tag) {
- if ($tag{0} == $this->lessc->vPrefix)
- $tag[0] = $this->lessc->mPrefix;
- }
- return $tags;
- }
-
- // a list of expressions
- protected function expressionList(&$exps) {
- $values = array();
-
- while ($this->expression($exp)) {
- $values[] = $exp;
- }
-
- if (count($values) == 0) return false;
-
- $exps = lessc::compressList($values, ' ');
- return true;
- }
-
- /**
- * Attempt to consume an expression.
- * @link http://en.wikipedia.org/wiki/Operator-precedence_parser#Pseudo-code
- */
- protected function expression(&$out) {
- if ($this->value($lhs)) {
- $out = $this->expHelper($lhs, 0);
-
- // look for / shorthand
- if (!empty($this->env->supressedDivision)) {
- unset($this->env->supressedDivision);
- $s = $this->seek();
- if ($this->literal("/") && $this->value($rhs)) {
- $out = array("list", "",
- array($out, array("keyword", "/"), $rhs));
- } else {
- $this->seek($s);
- }
- }
-
- return true;
- }
- return false;
- }
-
- /**
- * recursively parse infix equation with $lhs at precedence $minP
- */
- protected function expHelper($lhs, $minP) {
- $this->inExp = true;
- $ss = $this->seek();
-
- while (true) {
- $whiteBefore = isset($this->buffer[$this->count - 1]) &&
- ctype_space($this->buffer[$this->count - 1]);
-
- // If there is whitespace before the operator, then we require
- // whitespace after the operator for it to be an expression
- $needWhite = $whiteBefore && !$this->inParens;
-
- if ($this->match(self::$operatorString.($needWhite ? '\s' : ''), $m) && self::$precedence[$m[1]] >= $minP) {
- if (!$this->inParens && isset($this->env->currentProperty) && $m[1] == "/" && empty($this->env->supressedDivision)) {
- foreach (self::$supressDivisionProps as $pattern) {
- if (preg_match($pattern, $this->env->currentProperty)) {
- $this->env->supressedDivision = true;
- break 2;
- }
- }
- }
-
-
- $whiteAfter = isset($this->buffer[$this->count - 1]) &&
- ctype_space($this->buffer[$this->count - 1]);
-
- if (!$this->value($rhs)) break;
-
- // peek for next operator to see what to do with rhs
- if ($this->peek(self::$operatorString, $next) && self::$precedence[$next[1]] > self::$precedence[$m[1]]) {
- $rhs = $this->expHelper($rhs, self::$precedence[$next[1]]);
- }
-
- $lhs = array('expression', $m[1], $lhs, $rhs, $whiteBefore, $whiteAfter);
- $ss = $this->seek();
-
- continue;
- }
-
- break;
- }
-
- $this->seek($ss);
-
- return $lhs;
- }
-
- // consume a list of values for a property
- public function propertyValue(&$value, $keyName = null) {
- $values = array();
-
- if ($keyName !== null) $this->env->currentProperty = $keyName;
-
- $s = null;
- while ($this->expressionList($v)) {
- $values[] = $v;
- $s = $this->seek();
- if (!$this->literal(',')) break;
- }
-
- if ($s) $this->seek($s);
-
- if ($keyName !== null) unset($this->env->currentProperty);
-
- if (count($values) == 0) return false;
-
- $value = lessc::compressList($values, ', ');
- return true;
- }
-
- protected function parenValue(&$out) {
- $s = $this->seek();
-
- // speed shortcut
- if (isset($this->buffer[$this->count]) && $this->buffer[$this->count] != "(") {
- return false;
- }
-
- $inParens = $this->inParens;
- if ($this->literal("(") &&
- ($this->inParens = true) && $this->expression($exp) &&
- $this->literal(")"))
- {
- $out = $exp;
- $this->inParens = $inParens;
- return true;
- } else {
- $this->inParens = $inParens;
- $this->seek($s);
- }
-
- return false;
- }
-
- // a single value
- protected function value(&$value) {
- $s = $this->seek();
-
- // speed shortcut
- if (isset($this->buffer[$this->count]) && $this->buffer[$this->count] == "-") {
- // negation
- if ($this->literal("-", false) &&
- (($this->variable($inner) && $inner = array("variable", $inner)) ||
- $this->unit($inner) ||
- $this->parenValue($inner)))
- {
- $value = array("unary", "-", $inner);
- return true;
- } else {
- $this->seek($s);
- }
- }
-
- if ($this->parenValue($value)) return true;
- if ($this->unit($value)) return true;
- if ($this->color($value)) return true;
- if ($this->func($value)) return true;
- if ($this->string($value)) return true;
-
- if ($this->keyword($word)) {
- $value = array('keyword', $word);
- return true;
- }
-
- // try a variable
- if ($this->variable($var)) {
- $value = array('variable', $var);
- return true;
- }
-
- // unquote string (should this work on any type?
- if ($this->literal("~") && $this->string($str)) {
- $value = array("escape", $str);
- return true;
- } else {
- $this->seek($s);
- }
-
- // css hack: \0
- if ($this->literal('\\') && $this->match('([0-9]+)', $m)) {
- $value = array('keyword', '\\'.$m[1]);
- return true;
- } else {
- $this->seek($s);
- }
-
- return false;
- }
-
- // an import statement
- protected function import(&$out) {
- if (!$this->literal('@import')) return false;
-
- // @import "something.css" media;
- // @import url("something.css") media;
- // @import url(something.css) media;
-
- if ($this->propertyValue($value)) {
- $out = array("import", $value);
- return true;
- }
- }
-
- protected function mediaQueryList(&$out) {
- if ($this->genericList($list, "mediaQuery", ",", false)) {
- $out = $list[2];
- return true;
- }
- return false;
- }
-
- protected function mediaQuery(&$out) {
- $s = $this->seek();
-
- $expressions = null;
- $parts = array();
-
- if (($this->literal("only") && ($only = true) || $this->literal("not") && ($not = true) || true) && $this->keyword($mediaType)) {
- $prop = array("mediaType");
- if (isset($only)) $prop[] = "only";
- if (isset($not)) $prop[] = "not";
- $prop[] = $mediaType;
- $parts[] = $prop;
- } else {
- $this->seek($s);
- }
-
-
- if (!empty($mediaType) && !$this->literal("and")) {
- // ~
- } else {
- $this->genericList($expressions, "mediaExpression", "and", false);
- if (is_array($expressions)) $parts = array_merge($parts, $expressions[2]);
- }
-
- if (count($parts) == 0) {
- $this->seek($s);
- return false;
- }
-
- $out = $parts;
- return true;
- }
-
- protected function mediaExpression(&$out) {
- $s = $this->seek();
- $value = null;
- if ($this->literal("(") &&
- $this->keyword($feature) &&
- ($this->literal(":") && $this->expression($value) || true) &&
- $this->literal(")"))
- {
- $out = array("mediaExp", $feature);
- if ($value) $out[] = $value;
- return true;
- } elseif ($this->variable($variable)) {
- $out = array('variable', $variable);
- return true;
- }
-
- $this->seek($s);
- return false;
- }
-
- // an unbounded string stopped by $end
- protected function openString($end, &$out, $nestingOpen=null, $rejectStrs = null) {
- $oldWhite = $this->eatWhiteDefault;
- $this->eatWhiteDefault = false;
-
- $stop = array("'", '"', "@{", $end);
- $stop = array_map(array("lessc", "preg_quote"), $stop);
- // $stop[] = self::$commentMulti;
-
- if (!is_null($rejectStrs)) {
- $stop = array_merge($stop, $rejectStrs);
- }
-
- $patt = '(.*?)('.implode("|", $stop).')';
-
- $nestingLevel = 0;
-
- $content = array();
- while ($this->match($patt, $m, false)) {
- if (!empty($m[1])) {
- $content[] = $m[1];
- if ($nestingOpen) {
- $nestingLevel += substr_count($m[1], $nestingOpen);
- }
- }
-
- $tok = $m[2];
-
- $this->count-= strlen($tok);
- if ($tok == $end) {
- if ($nestingLevel == 0) {
- break;
- } else {
- $nestingLevel--;
- }
- }
-
- if (($tok == "'" || $tok == '"') && $this->string($str)) {
- $content[] = $str;
- continue;
- }
-
- if ($tok == "@{" && $this->interpolation($inter)) {
- $content[] = $inter;
- continue;
- }
-
- if (!empty($rejectStrs) && in_array($tok, $rejectStrs)) {
- break;
- }
-
- $content[] = $tok;
- $this->count+= strlen($tok);
- }
-
- $this->eatWhiteDefault = $oldWhite;
-
- if (count($content) == 0) return false;
-
- // trim the end
- if (is_string(end($content))) {
- $content[count($content) - 1] = rtrim(end($content));
- }
-
- $out = array("string", "", $content);
- return true;
- }
-
- protected function string(&$out) {
- $s = $this->seek();
- if ($this->literal('"', false)) {
- $delim = '"';
- } elseif ($this->literal("'", false)) {
- $delim = "'";
- } else {
- return false;
- }
-
- $content = array();
-
- // look for either ending delim , escape, or string interpolation
- $patt = '([^\n]*?)(@\{|\\\\|' .
- lessc::preg_quote($delim).')';
-
- $oldWhite = $this->eatWhiteDefault;
- $this->eatWhiteDefault = false;
-
- while ($this->match($patt, $m, false)) {
- $content[] = $m[1];
- if ($m[2] == "@{") {
- $this->count -= strlen($m[2]);
- if ($this->interpolation($inter, false)) {
- $content[] = $inter;
- } else {
- $this->count += strlen($m[2]);
- $content[] = "@{"; // ignore it
- }
- } elseif ($m[2] == '\\') {
- $content[] = $m[2];
- if ($this->literal($delim, false)) {
- $content[] = $delim;
- }
- } else {
- $this->count -= strlen($delim);
- break; // delim
- }
- }
-
- $this->eatWhiteDefault = $oldWhite;
-
- if ($this->literal($delim)) {
- $out = array("string", $delim, $content);
- return true;
- }
-
- $this->seek($s);
- return false;
- }
-
- protected function interpolation(&$out) {
- $oldWhite = $this->eatWhiteDefault;
- $this->eatWhiteDefault = true;
-
- $s = $this->seek();
- if ($this->literal("@{") &&
- $this->openString("}", $interp, null, array("'", '"', ";")) &&
- $this->literal("}", false))
- {
- $out = array("interpolate", $interp);
- $this->eatWhiteDefault = $oldWhite;
- if ($this->eatWhiteDefault) $this->whitespace();
- return true;
- }
-
- $this->eatWhiteDefault = $oldWhite;
- $this->seek($s);
- return false;
- }
-
- protected function unit(&$unit) {
- // speed shortcut
- if (isset($this->buffer[$this->count])) {
- $char = $this->buffer[$this->count];
- if (!ctype_digit($char) && $char != ".") return false;
- }
-
- if ($this->match('([0-9]+(?:\.[0-9]*)?|\.[0-9]+)([%a-zA-Z]+)?', $m)) {
- $unit = array("number", $m[1], empty($m[2]) ? "" : $m[2]);
- return true;
- }
- return false;
- }
-
- // a # color
- protected function color(&$out) {
- if ($this->match('(#(?:[0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{3}))', $m)) {
- if (strlen($m[1]) > 7) {
- $out = array("string", "", array($m[1]));
- } else {
- $out = array("raw_color", $m[1]);
- }
- return true;
- }
-
- return false;
- }
-
- // consume an argument definition list surrounded by ()
- // each argument is a variable name with optional value
- // or at the end a ... or a variable named followed by ...
- // arguments are separated by , unless a ; is in the list, then ; is the
- // delimiter.
- protected function argumentDef(&$args, &$isVararg) {
- $s = $this->seek();
- if (!$this->literal('(')) return false;
-
- $values = array();
- $delim = ",";
- $method = "expressionList";
-
- $isVararg = false;
- while (true) {
- if ($this->literal("...")) {
- $isVararg = true;
- break;
- }
-
- if ($this->$method($value)) {
- if ($value[0] == "variable") {
- $arg = array("arg", $value[1]);
- $ss = $this->seek();
-
- if ($this->assign() && $this->$method($rhs)) {
- $arg[] = $rhs;
- } else {
- $this->seek($ss);
- if ($this->literal("...")) {
- $arg[0] = "rest";
- $isVararg = true;
- }
- }
-
- $values[] = $arg;
- if ($isVararg) break;
- continue;
- } else {
- $values[] = array("lit", $value);
- }
- }
-
-
- if (!$this->literal($delim)) {
- if ($delim == "," && $this->literal(";")) {
- // found new delim, convert existing args
- $delim = ";";
- $method = "propertyValue";
-
- // transform arg list
- if (isset($values[1])) { // 2 items
- $newList = array();
- foreach ($values as $i => $arg) {
- switch($arg[0]) {
- case "arg":
- if ($i) {
- $this->throwError("Cannot mix ; and , as delimiter types");
- }
- $newList[] = $arg[2];
- break;
- case "lit":
- $newList[] = $arg[1];
- break;
- case "rest":
- $this->throwError("Unexpected rest before semicolon");
- }
- }
-
- $newList = array("list", ", ", $newList);
-
- switch ($values[0][0]) {
- case "arg":
- $newArg = array("arg", $values[0][1], $newList);
- break;
- case "lit":
- $newArg = array("lit", $newList);
- break;
- }
-
- } elseif ($values) { // 1 item
- $newArg = $values[0];
- }
-
- if ($newArg) {
- $values = array($newArg);
- }
- } else {
- break;
- }
- }
- }
-
- if (!$this->literal(')')) {
- $this->seek($s);
- return false;
- }
-
- $args = $values;
-
- return true;
- }
-
- // consume a list of tags
- // this accepts a hanging delimiter
- protected function tags(&$tags, $simple = false, $delim = ',') {
- $tags = array();
- while ($this->tag($tt, $simple)) {
- $tags[] = $tt;
- if (!$this->literal($delim)) break;
- }
- if (count($tags) == 0) return false;
-
- return true;
- }
-
- // list of tags of specifying mixin path
- // optionally separated by > (lazy, accepts extra >)
- protected function mixinTags(&$tags) {
- $tags = array();
- while ($this->tag($tt, true)) {
- $tags[] = $tt;
- $this->literal(">");
- }
-
- if (count($tags) == 0) return false;
-
- return true;
- }
-
- // a bracketed value (contained within in a tag definition)
- protected function tagBracket(&$parts, &$hasExpression) {
- // speed shortcut
- if (isset($this->buffer[$this->count]) && $this->buffer[$this->count] != "[") {
- return false;
- }
-
- $s = $this->seek();
-
- $hasInterpolation = false;
-
- if ($this->literal("[", false)) {
- $attrParts = array("[");
- // keyword, string, operator
- while (true) {
- if ($this->literal("]", false)) {
- $this->count--;
- break; // get out early
- }
-
- if ($this->match('\s+', $m)) {
- $attrParts[] = " ";
- continue;
- }
- if ($this->string($str)) {
- // escape parent selector, (yuck)
- foreach ($str[2] as &$chunk) {
- $chunk = str_replace($this->lessc->parentSelector, "$&$", $chunk);
- }
-
- $attrParts[] = $str;
- $hasInterpolation = true;
- continue;
- }
-
- if ($this->keyword($word)) {
- $attrParts[] = $word;
- continue;
- }
-
- if ($this->interpolation($inter, false)) {
- $attrParts[] = $inter;
- $hasInterpolation = true;
- continue;
- }
-
- // operator, handles attr namespace too
- if ($this->match('[|-~\$\*\^=]+', $m)) {
- $attrParts[] = $m[0];
- continue;
- }
-
- break;
- }
-
- if ($this->literal("]", false)) {
- $attrParts[] = "]";
- foreach ($attrParts as $part) {
- $parts[] = $part;
- }
- $hasExpression = $hasExpression || $hasInterpolation;
- return true;
- }
- $this->seek($s);
- }
-
- $this->seek($s);
- return false;
- }
-
- // a space separated list of selectors
- protected function tag(&$tag, $simple = false) {
- if ($simple)
- $chars = '^@,:;{}\][>\(\) "\'';
- else
- $chars = '^@,;{}["\'';
-
- $s = $this->seek();
-
- $hasExpression = false;
- $parts = array();
- while ($this->tagBracket($parts, $hasExpression));
-
- $oldWhite = $this->eatWhiteDefault;
- $this->eatWhiteDefault = false;
-
- while (true) {
- if ($this->match('(['.$chars.'0-9]['.$chars.']*)', $m)) {
- $parts[] = $m[1];
- if ($simple) break;
-
- while ($this->tagBracket($parts, $hasExpression));
- continue;
- }
-
- if (isset($this->buffer[$this->count]) && $this->buffer[$this->count] == "@") {
- if ($this->interpolation($interp)) {
- $hasExpression = true;
- $interp[2] = true; // don't unescape
- $parts[] = $interp;
- continue;
- }
-
- if ($this->literal("@")) {
- $parts[] = "@";
- continue;
- }
- }
-
- if ($this->unit($unit)) { // for keyframes
- $parts[] = $unit[1];
- $parts[] = $unit[2];
- continue;
- }
-
- break;
- }
-
- $this->eatWhiteDefault = $oldWhite;
- if (!$parts) {
- $this->seek($s);
- return false;
- }
-
- if ($hasExpression) {
- $tag = array("exp", array("string", "", $parts));
- } else {
- $tag = trim(implode($parts));
- }
-
- $this->whitespace();
- return true;
- }
-
- // a css function
- protected function func(&$func) {
- $s = $this->seek();
-
- if ($this->match('(%|[\w\-_][\w\-_:\.]+|[\w_])', $m) && $this->literal('(')) {
- $fname = $m[1];
-
- $sPreArgs = $this->seek();
-
- $args = array();
- while (true) {
- $ss = $this->seek();
- // this ugly nonsense is for ie filter properties
- if ($this->keyword($name) && $this->literal('=') && $this->expressionList($value)) {
- $args[] = array("string", "", array($name, "=", $value));
- } else {
- $this->seek($ss);
- if ($this->expressionList($value)) {
- $args[] = $value;
- }
- }
-
- if (!$this->literal(',')) break;
- }
- $args = array('list', ',', $args);
-
- if ($this->literal(')')) {
- $func = array('function', $fname, $args);
- return true;
- } elseif ($fname == 'url') {
- // couldn't parse and in url? treat as string
- $this->seek($sPreArgs);
- if ($this->openString(")", $string) && $this->literal(")")) {
- $func = array('function', $fname, $string);
- return true;
- }
- }
- }
-
- $this->seek($s);
- return false;
- }
-
- // consume a less variable
- protected function variable(&$name) {
- $s = $this->seek();
- if ($this->literal($this->lessc->vPrefix, false) &&
- ($this->variable($sub) || $this->keyword($name)))
- {
- if (!empty($sub)) {
- $name = array('variable', $sub);
- } else {
- $name = $this->lessc->vPrefix.$name;
- }
- return true;
- }
-
- $name = null;
- $this->seek($s);
- return false;
- }
-
- /**
- * Consume an assignment operator
- * Can optionally take a name that will be set to the current property name
- */
- protected function assign($name = null) {
- if ($name) $this->currentProperty = $name;
- return $this->literal(':') || $this->literal('=');
- }
-
- // consume a keyword
- protected function keyword(&$word) {
- if ($this->match('([\w_\-\*!"][\w\-_"]*)', $m)) {
- $word = $m[1];
- return true;
- }
- return false;
- }
-
- // consume an end of statement delimiter
- protected function end() {
- if ($this->literal(';', false)) {
- return true;
- } elseif ($this->count == strlen($this->buffer) || $this->buffer[$this->count] == '}') {
- // if there is end of file or a closing block next then we don't need a ;
- return true;
- }
- return false;
- }
-
- protected function guards(&$guards) {
- $s = $this->seek();
-
- if (!$this->literal("when")) {
- $this->seek($s);
- return false;
- }
-
- $guards = array();
-
- while ($this->guardGroup($g)) {
- $guards[] = $g;
- if (!$this->literal(",")) break;
- }
-
- if (count($guards) == 0) {
- $guards = null;
- $this->seek($s);
- return false;
- }
-
- return true;
- }
-
- // a bunch of guards that are and'd together
- // TODO rename to guardGroup
- protected function guardGroup(&$guardGroup) {
- $s = $this->seek();
- $guardGroup = array();
- while ($this->guard($guard)) {
- $guardGroup[] = $guard;
- if (!$this->literal("and")) break;
- }
-
- if (count($guardGroup) == 0) {
- $guardGroup = null;
- $this->seek($s);
- return false;
- }
-
- return true;
- }
-
- protected function guard(&$guard) {
- $s = $this->seek();
- $negate = $this->literal("not");
-
- if ($this->literal("(") && $this->expression($exp) && $this->literal(")")) {
- $guard = $exp;
- if ($negate) $guard = array("negate", $guard);
- return true;
- }
-
- $this->seek($s);
- return false;
- }
-
- /* raw parsing functions */
-
- protected function literal($what, $eatWhitespace = null) {
- if ($eatWhitespace === null) $eatWhitespace = $this->eatWhiteDefault;
-
- // shortcut on single letter
- if (!isset($what[1]) && isset($this->buffer[$this->count])) {
- if ($this->buffer[$this->count] == $what) {
- if (!$eatWhitespace) {
- $this->count++;
- return true;
- }
- // goes below...
- } else {
- return false;
- }
- }
-
- if (!isset(self::$literalCache[$what])) {
- self::$literalCache[$what] = lessc::preg_quote($what);
- }
-
- return $this->match(self::$literalCache[$what], $m, $eatWhitespace);
- }
-
- protected function genericList(&$out, $parseItem, $delim="", $flatten=true) {
- $s = $this->seek();
- $items = array();
- while ($this->$parseItem($value)) {
- $items[] = $value;
- if ($delim) {
- if (!$this->literal($delim)) break;
- }
- }
-
- if (count($items) == 0) {
- $this->seek($s);
- return false;
- }
-
- if ($flatten && count($items) == 1) {
- $out = $items[0];
- } else {
- $out = array("list", $delim, $items);
- }
-
- return true;
- }
-
-
- // advance counter to next occurrence of $what
- // $until - don't include $what in advance
- // $allowNewline, if string, will be used as valid char set
- protected function to($what, &$out, $until = false, $allowNewline = false) {
- if (is_string($allowNewline)) {
- $validChars = $allowNewline;
- } else {
- $validChars = $allowNewline ? "." : "[^\n]";
- }
- if (!$this->match('('.$validChars.'*?)'.lessc::preg_quote($what), $m, !$until)) return false;
- if ($until) $this->count -= strlen($what); // give back $what
- $out = $m[1];
- return true;
- }
-
- // try to match something on head of buffer
- protected function match($regex, &$out, $eatWhitespace = null) {
- if ($eatWhitespace === null) $eatWhitespace = $this->eatWhiteDefault;
-
- $r = '/'.$regex.($eatWhitespace && !$this->writeComments ? '\s*' : '').'/Ais';
- if (preg_match($r, $this->buffer, $out, null, $this->count)) {
- $this->count += strlen($out[0]);
- if ($eatWhitespace && $this->writeComments) $this->whitespace();
- return true;
- }
- return false;
- }
-
- // match some whitespace
- protected function whitespace() {
- if ($this->writeComments) {
- $gotWhite = false;
- while (preg_match(self::$whitePattern, $this->buffer, $m, null, $this->count)) {
- if (isset($m[1]) && empty($this->seenComments[$this->count])) {
- $this->append(array("comment", $m[1]));
- $this->seenComments[$this->count] = true;
- }
- $this->count += strlen($m[0]);
- $gotWhite = true;
- }
- return $gotWhite;
- } else {
- $this->match("", $m);
- return strlen($m[0]) > 0;
- }
- }
-
- // match something without consuming it
- protected function peek($regex, &$out = null, $from=null) {
- if (is_null($from)) $from = $this->count;
- $r = '/'.$regex.'/Ais';
- $result = preg_match($r, $this->buffer, $out, null, $from);
-
- return $result;
- }
-
- // seek to a spot in the buffer or return where we are on no argument
- protected function seek($where = null) {
- if ($where === null) return $this->count;
- else $this->count = $where;
- return true;
- }
-
- /* misc functions */
-
- public function throwError($msg = "parse error", $count = null) {
- $count = is_null($count) ? $this->count : $count;
-
- $line = $this->line +
- substr_count(substr($this->buffer, 0, $count), "\n");
-
- if (!empty($this->sourceName)) {
- $loc = "$this->sourceName on line $line";
- } else {
- $loc = "line: $line";
- }
-
- // TODO this depends on $this->count
- if ($this->peek("(.*?)(\n|$)", $m, $count)) {
- throw new exception("$msg: failed at `$m[1]` $loc");
- } else {
- throw new exception("$msg: $loc");
- }
- }
-
- protected function pushBlock($selectors=null, $type=null) {
- $b = new stdclass;
- $b->parent = $this->env;
-
- $b->type = $type;
- $b->id = self::$nextBlockId++;
-
- $b->isVararg = false; // TODO: kill me from here
- $b->tags = $selectors;
-
- $b->props = array();
- $b->children = array();
-
- $this->env = $b;
- return $b;
- }
-
- // push a block that doesn't multiply tags
- protected function pushSpecialBlock($type) {
- return $this->pushBlock(null, $type);
- }
-
- // append a property to the current block
- protected function append($prop, $pos = null) {
- if ($pos !== null) $prop[-1] = $pos;
- $this->env->props[] = $prop;
- }
-
- // pop something off the stack
- protected function pop() {
- $old = $this->env;
- $this->env = $this->env->parent;
- return $old;
- }
-
- // remove comments from $text
- // todo: make it work for all functions, not just url
- protected function removeComments($text) {
- $look = array(
- 'url(', '//', '/*', '"', "'"
- );
-
- $out = '';
- $min = null;
- while (true) {
- // find the next item
- foreach ($look as $token) {
- $pos = strpos($text, $token);
- if ($pos !== false) {
- if (!isset($min) || $pos < $min[1]) $min = array($token, $pos);
- }
- }
-
- if (is_null($min)) break;
-
- $count = $min[1];
- $skip = 0;
- $newlines = 0;
- switch ($min[0]) {
- case 'url(':
- if (preg_match('/url\(.*?\)/', $text, $m, 0, $count))
- $count += strlen($m[0]) - strlen($min[0]);
- break;
- case '"':
- case "'":
- if (preg_match('/'.$min[0].'.*?(?<!\\\\)'.$min[0].'/', $text, $m, 0, $count))
- $count += strlen($m[0]) - 1;
- break;
- case '//':
- $skip = strpos($text, "\n", $count);
- if ($skip === false) $skip = strlen($text) - $count;
- else $skip -= $count;
- break;
- case '/*':
- if (preg_match('/\/\*.*?\*\//s', $text, $m, 0, $count)) {
- $skip = strlen($m[0]);
- $newlines = substr_count($m[0], "\n");
- }
- break;
- }
-
- if ($skip == 0) $count += strlen($min[0]);
-
- $out .= substr($text, 0, $count).str_repeat("\n", $newlines);
- $text = substr($text, $count + $skip);
-
- $min = null;
- }
-
- return $out.$text;
- }
-
-}
-
-class lessc_formatter_classic {
- public $indentChar = " ";
-
- public $break = "\n";
- public $open = " {";
- public $close = "}";
- public $selectorSeparator = ", ";
- public $assignSeparator = ":";
-
- public $openSingle = " { ";
- public $closeSingle = " }";
-
- public $disableSingle = false;
- public $breakSelectors = false;
-
- public $compressColors = false;
-
- public function __construct() {
- $this->indentLevel = 0;
- }
-
- public function indentStr($n = 0) {
- return str_repeat($this->indentChar, max($this->indentLevel + $n, 0));
- }
-
- public function property($name, $value) {
- return $name . $this->assignSeparator . $value . ";";
- }
-
- protected function isEmpty($block) {
- if (empty($block->lines)) {
- foreach ($block->children as $child) {
- if (!$this->isEmpty($child)) return false;
- }
-
- return true;
- }
- return false;
- }
-
- public function block($block) {
- if ($this->isEmpty($block)) return;
-
- $inner = $pre = $this->indentStr();
-
- $isSingle = !$this->disableSingle &&
- is_null($block->type) && count($block->lines) == 1;
-
- if (!empty($block->selectors)) {
- $this->indentLevel++;
-
- if ($this->breakSelectors) {
- $selectorSeparator = $this->selectorSeparator . $this->break . $pre;
- } else {
- $selectorSeparator = $this->selectorSeparator;
- }
-
- echo $pre .
- implode($selectorSeparator, $block->selectors);
- if ($isSingle) {
- echo $this->openSingle;
- $inner = "";
- } else {
- echo $this->open . $this->break;
- $inner = $this->indentStr();
- }
-
- }
-
- if (!empty($block->lines)) {
- $glue = $this->break.$inner;
- echo $inner . implode($glue, $block->lines);
- if (!$isSingle && !empty($block->children)) {
- echo $this->break;
- }
- }
-
- foreach ($block->children as $child) {
- $this->block($child);
- }
-
- if (!empty($block->selectors)) {
- if (!$isSingle && empty($block->children)) echo $this->break;
-
- if ($isSingle) {
- echo $this->closeSingle . $this->break;
- } else {
- echo $pre . $this->close . $this->break;
- }
-
- $this->indentLevel--;
- }
- }
-}
-
-class lessc_formatter_compressed extends lessc_formatter_classic {
- public $disableSingle = true;
- public $open = "{";
- public $selectorSeparator = ",";
- public $assignSeparator = ":";
- public $break = "";
- public $compressColors = true;
-
- public function indentStr($n = 0) {
- return "";
- }
-}
-
-class lessc_formatter_lessjs extends lessc_formatter_classic {
- public $disableSingle = true;
- public $breakSelectors = true;
- public $assignSeparator = ": ";
- public $selectorSeparator = ",";
-}
-
diff --git a/plugins/jetpack/modules/custom-css/custom-css/preprocessors/scss.inc.php b/plugins/jetpack/modules/custom-css/custom-css/preprocessors/scss.inc.php
deleted file mode 100644
index 344b55f1..00000000
--- a/plugins/jetpack/modules/custom-css/custom-css/preprocessors/scss.inc.php
+++ /dev/null
@@ -1,4383 +0,0 @@
-<?php
-/**
- * SCSS compiler written in PHP
- *
- * @copyright 2012-2013 Leaf Corcoran
- *
- * @license http://opensource.org/licenses/gpl-license GPL-3.0
- * @license http://opensource.org/licenses/MIT MIT
- *
- * @link http://leafo.net/scssphp
- */
-
-/**
- * The scss compiler and parser.
- *
- * Converting SCSS to CSS is a three stage process. The incoming file is parsed
- * by `scssc_parser` into a syntax tree, then it is compiled into another tree
- * representing the CSS structure by `scssc`. The CSS tree is fed into a
- * formatter, like `scssc_formatter` which then outputs CSS as a string.
- *
- * During the first compile, all values are *reduced*, which means that their
- * types are brought to the lowest form before being dump as strings. This
- * handles math equations, variable dereferences, and the like.
- *
- * The `parse` function of `scssc` is the entry point.
- *
- * In summary:
- *
- * The `scssc` class creates an instance of the parser, feeds it SCSS code,
- * then transforms the resulting tree to a CSS tree. This class also holds the
- * evaluation context, such as all available mixins and variables at any given
- * time.
- *
- * The `scssc_parser` class is only concerned with parsing its input.
- *
- * The `scssc_formatter` takes a CSS tree, and dumps it to a formatted string,
- * handling things like indentation.
- */
-
-/**
- * SCSS compiler
- *
- * @author Leaf Corcoran <leafot@gmail.com>
- */
-class scssc {
- static public $VERSION = "v0.0.9";
-
- static protected $operatorNames = array(
- '+' => "add",
- '-' => "sub",
- '*' => "mul",
- '/' => "div",
- '%' => "mod",
-
- '==' => "eq",
- '!=' => "neq",
- '<' => "lt",
- '>' => "gt",
-
- '<=' => "lte",
- '>=' => "gte",
- );
-
- static protected $namespaces = array(
- "special" => "%",
- "mixin" => "@",
- "function" => "^",
- );
-
- static protected $unitTable = array(
- "in" => array(
- "in" => 1,
- "pt" => 72,
- "pc" => 6,
- "cm" => 2.54,
- "mm" => 25.4,
- "px" => 96,
- )
- );
-
- static public $true = array("keyword", "true");
- static public $false = array("keyword", "false");
- static public $null = array("null");
-
- static public $defaultValue = array("keyword", "");
- static public $selfSelector = array("self");
-
- protected $importPaths = array("");
- protected $importCache = array();
-
- protected $userFunctions = array();
-
- protected $numberPrecision = 5;
-
- protected $formatter = "scss_formatter_nested";
-
- public function compile($code, $name=null) {
- $this->indentLevel = -1;
- $this->commentsSeen = array();
- $this->extends = array();
- $this->extendsMap = array();
-
- $locale = setlocale(LC_NUMERIC, 0);
- setlocale(LC_NUMERIC, "C");
-
- $this->parsedFiles = array();
- $this->parser = new scss_parser($name);
- $tree = $this->parser->parse($code);
-
- $this->formatter = new $this->formatter();
-
- $this->env = null;
- $this->scope = null;
-
- $this->compileRoot($tree);
-
- $out = $this->formatter->format($this->scope);
-
- setlocale(LC_NUMERIC, $locale);
- return $out;
- }
-
- protected function isSelfExtend($target, $origin) {
- foreach ($origin as $sel) {
- if (in_array($target, $sel)) {
- return true;
- }
- }
-
- return false;
- }
-
- protected function pushExtends($target, $origin) {
- if ($this->isSelfExtend($target, $origin)) {
- return;
- }
-
- $i = count($this->extends);
- $this->extends[] = array($target, $origin);
-
- foreach ($target as $part) {
- if (isset($this->extendsMap[$part])) {
- $this->extendsMap[$part][] = $i;
- } else {
- $this->extendsMap[$part] = array($i);
- }
- }
- }
-
- protected function makeOutputBlock($type, $selectors = null) {
- $out = new stdClass;
- $out->type = $type;
- $out->lines = array();
- $out->children = array();
- $out->parent = $this->scope;
- $out->selectors = $selectors;
- $out->depth = $this->env->depth;
-
- return $out;
- }
-
- protected function matchExtendsSingle($single, &$outOrigin) {
- $counts = array();
- foreach ($single as $part) {
- if (!is_string($part)) return false; // hmm
-
- if (isset($this->extendsMap[$part])) {
- foreach ($this->extendsMap[$part] as $idx) {
- $counts[$idx] =
- isset($counts[$idx]) ? $counts[$idx] + 1 : 1;
- }
- }
- }
-
- $outOrigin = array();
- $found = false;
-
- foreach ($counts as $idx => $count) {
- list($target, $origin) = $this->extends[$idx];
-
- // check count
- if ($count != count($target)) continue;
-
- // check if target is subset of single
- if (array_diff(array_intersect($single, $target), $target)) continue;
-
- $rem = array_diff($single, $target);
-
- foreach ($origin as $j => $new) {
- // prevent infinite loop when target extends itself
- foreach ($new as $new_selector) {
- if (!array_diff($single, $new_selector)) {
- continue 2;
- }
- }
-
- $origin[$j][count($origin[$j]) - 1] = $this->combineSelectorSingle(end($new), $rem);
- }
-
- $outOrigin = array_merge($outOrigin, $origin);
-
- $found = true;
- }
-
- return $found;
- }
-
- protected function combineSelectorSingle($base, $other) {
- $tag = null;
- $out = array();
-
- foreach (array($base, $other) as $single) {
- foreach ($single as $part) {
- if (preg_match('/^[^\[.#:]/', $part)) {
- $tag = $part;
- } else {
- $out[] = $part;
- }
- }
- }
-
- if ($tag) {
- array_unshift($out, $tag);
- }
-
- return $out;
- }
-
- protected function matchExtends($selector, &$out, $from = 0, $initial=true) {
- foreach ($selector as $i => $part) {
- if ($i < $from) continue;
-
- if ($this->matchExtendsSingle($part, $origin)) {
- $before = array_slice($selector, 0, $i);
- $after = array_slice($selector, $i + 1);
-
- foreach ($origin as $new) {
- $k = 0;
-
- // remove shared parts
- if ($initial) {
- foreach ($before as $k => $val) {
- if (!isset($new[$k]) || $val != $new[$k]) {
- break;
- }
- }
- }
-
- $result = array_merge(
- $before,
- $k > 0 ? array_slice($new, $k) : $new,
- $after);
-
-
- if ($result == $selector) continue;
- $out[] = $result;
-
- // recursively check for more matches
- $this->matchExtends($result, $out, $i, false);
-
- // selector sequence merging
- if (!empty($before) && count($new) > 1) {
- $result2 = array_merge(
- array_slice($new, 0, -1),
- $k > 0 ? array_slice($before, $k) : $before,
- array_slice($new, -1),
- $after);
-
- $out[] = $result2;
- }
- }
- }
- }
- }
-
- protected function flattenSelectors($block, $parentKey = null) {
- if ($block->selectors) {
- $selectors = array();
- foreach ($block->selectors as $s) {
- $selectors[] = $s;
- if (!is_array($s)) continue;
- // check extends
- if (!empty($this->extendsMap)) {
- $this->matchExtends($s, $selectors);
- }
- }
-
- $block->selectors = array();
- $placeholderSelector = false;
- foreach ($selectors as $selector) {
- if ($this->hasSelectorPlaceholder($selector)) {
- $placeholderSelector = true;
- continue;
- }
- $block->selectors[] = $this->compileSelector($selector);
- }
-
- if ($placeholderSelector && 0 == count($block->selectors) && null !== $parentKey) {
- unset($block->parent->children[$parentKey]);
- return;
- }
- }
-
- foreach ($block->children as $key => $child) {
- $this->flattenSelectors($child, $key);
- }
- }
-
- protected function compileRoot($rootBlock) {
- $this->pushEnv($rootBlock);
- $this->scope = $this->makeOutputBlock("root");
-
- $this->compileChildren($rootBlock->children, $this->scope);
- $this->flattenSelectors($this->scope);
-
- $this->popEnv();
- }
-
- protected function compileMedia($media) {
- $this->pushEnv($media);
- $parentScope = $this->mediaParent($this->scope);
-
- $this->scope = $this->makeOutputBlock("media", array(
- $this->compileMediaQuery($this->multiplyMedia($this->env)))
- );
-
- $parentScope->children[] = $this->scope;
-
- // top level properties in a media cause it to be wrapped
- $needsWrap = false;
- foreach ($media->children as $child) {
- $type = $child[0];
- if ($type !== 'block' && $type !== 'media' && $type !== 'directive') {
- $needsWrap = true;
- break;
- }
- }
-
- if ($needsWrap) {
- $wrapped = (object)array(
- "selectors" => array(),
- "children" => $media->children
- );
- $media->children = array(array("block", $wrapped));
- }
-
- $this->compileChildren($media->children, $this->scope);
-
- $this->scope = $this->scope->parent;
- $this->popEnv();
- }
-
- protected function mediaParent($scope) {
- while (!empty($scope->parent)) {
- if (!empty($scope->type) && $scope->type != "media") {
- break;
- }
- $scope = $scope->parent;
- }
-
- return $scope;
- }
-
- // TODO refactor compileNestedBlock and compileMedia into same thing
- protected function compileNestedBlock($block, $selectors) {
- $this->pushEnv($block);
-
- $this->scope = $this->makeOutputBlock($block->type, $selectors);
- $this->scope->parent->children[] = $this->scope;
- $this->compileChildren($block->children, $this->scope);
-
- $this->scope = $this->scope->parent;
- $this->popEnv();
- }
-
- /**
- * Recursively compiles a block.
- *
- * A block is analogous to a CSS block in most cases. A single SCSS document
- * is encapsulated in a block when parsed, but it does not have parent tags
- * so all of its children appear on the root level when compiled.
- *
- * Blocks are made up of selectors and children.
- *
- * The children of a block are just all the blocks that are defined within.
- *
- * Compiling the block involves pushing a fresh environment on the stack,
- * and iterating through the props, compiling each one.
- *
- * @see scss::compileChild()
- *
- * @param \StdClass $block
- */
- protected function compileBlock($block) {
- $env = $this->pushEnv($block);
-
- $env->selectors =
- array_map(array($this, "evalSelector"), $block->selectors);
-
- $out = $this->makeOutputBlock(null, $this->multiplySelectors($env));
- $this->scope->children[] = $out;
- $this->compileChildren($block->children, $out);
-
- $this->popEnv();
- }
-
- // joins together .classes and #ids
- protected function flattenSelectorSingle($single) {
- $joined = array();
- foreach ($single as $part) {
- if (empty($joined) ||
- !is_string($part) ||
- preg_match('/[\[.:#%]/', $part))
- {
- $joined[] = $part;
- continue;
- }
-
- if (is_array(end($joined))) {
- $joined[] = $part;
- } else {
- $joined[count($joined) - 1] .= $part;
- }
- }
-
- return $joined;
- }
-
- // replaces all the interpolates
- protected function evalSelector($selector) {
- return array_map(array($this, "evalSelectorPart"), $selector);
- }
-
- protected function evalSelectorPart($piece) {
- foreach ($piece as &$p) {
- if (!is_array($p)) continue;
-
- switch ($p[0]) {
- case "interpolate":
- $p = $this->compileValue($p);
- break;
- case "string":
- $p = $this->compileValue($p);
- break;
- }
- }
-
- return $this->flattenSelectorSingle($piece);
- }
-
- // compiles to string
- // self(&) should have been replaced by now
- protected function compileSelector($selector) {
- if (!is_array($selector)) return $selector; // media and the like
-
- return implode(" ", array_map(
- array($this, "compileSelectorPart"), $selector));
- }
-
- protected function compileSelectorPart($piece) {
- foreach ($piece as &$p) {
- if (!is_array($p)) continue;
-
- switch ($p[0]) {
- case "self":
- $p = "&";
- break;
- default:
- $p = $this->compileValue($p);
- break;
- }
- }
-
- return implode($piece);
- }
-
- protected function hasSelectorPlaceholder($selector)
- {
- if (!is_array($selector)) return false;
-
- foreach ($selector as $parts) {
- foreach ($parts as $part) {
- if ('%' == $part[0]) {
- return true;
- }
- }
- }
-
- return false;
- }
-
- protected function compileChildren($stms, $out) {
- foreach ($stms as $stm) {
- $ret = $this->compileChild($stm, $out);
- if (!is_null($ret)) return $ret;
- }
- }
-
- protected function compileMediaQuery($queryList) {
- $out = "@media";
- $first = true;
- foreach ($queryList as $query){
- $parts = array();
- foreach ($query as $q) {
- switch ($q[0]) {
- case "mediaType":
- $parts[] = implode(" ", array_map(array($this, "compileValue"), array_slice($q, 1)));
- break;
- case "mediaExp":
- if (isset($q[2])) {
- $parts[] = "(". $this->compileValue($q[1]) . $this->formatter->assignSeparator . $this->compileValue($q[2]) . ")";
- } else {
- $parts[] = "(" . $this->compileValue($q[1]) . ")";
- }
- break;
- }
- }
- if (!empty($parts)) {
- if ($first) {
- $first = false;
- $out .= " ";
- } else {
- $out .= $this->formatter->tagSeparator;
- }
- $out .= implode(" and ", $parts);
- }
- }
- return $out;
- }
-
- // returns true if the value was something that could be imported
- protected function compileImport($rawPath, $out) {
- if ($rawPath[0] == "string") {
- $path = $this->compileStringContent($rawPath);
- if ($path = $this->findImport($path)) {
- $this->importFile($path, $out);
- return true;
- }
- return false;
- }
- if ($rawPath[0] == "list") {
- // handle a list of strings
- if (count($rawPath[2]) == 0) return false;
- foreach ($rawPath[2] as $path) {
- if ($path[0] != "string") return false;
- }
-
- foreach ($rawPath[2] as $path) {
- $this->compileImport($path, $out);
- }
-
- return true;
- }
-
- return false;
- }
-
- // return a value to halt execution
- protected function compileChild($child, $out) {
- $this->sourcePos = isset($child[-1]) ? $child[-1] : -1;
- $this->sourceParser = isset($child[-2]) ? $child[-2] : $this->parser;
-
- switch ($child[0]) {
- case "import":
- list(,$rawPath) = $child;
- $rawPath = $this->reduce($rawPath);
- if (!$this->compileImport($rawPath, $out)) {
- $out->lines[] = "@import " . $this->compileValue($rawPath) . ";";
- }
- break;
- case "directive":
- list(, $directive) = $child;
- $s = "@" . $directive->name;
- if (!empty($directive->value)) {
- $s .= " " . $this->compileValue($directive->value);
- }
- $this->compileNestedBlock($directive, array($s));
- break;
- case "media":
- $this->compileMedia($child[1]);
- break;
- case "block":
- $this->compileBlock($child[1]);
- break;
- case "charset":
- $out->lines[] = "@charset ".$this->compileValue($child[1]).";";
- break;
- case "assign":
- list(,$name, $value) = $child;
- if ($name[0] == "var") {
- $isDefault = !empty($child[3]);
-
- if ($isDefault) {
- $existingValue = $this->get($name[1], true);
- $shouldSet = $existingValue === true || $existingValue == self::$null;
- }
-
- if (!$isDefault || $shouldSet) {
- $this->set($name[1], $this->reduce($value));
- }
- break;
- }
-
- // if the value reduces to null from something else then
- // the property should be discarded
- if ($value[0] != "null") {
- $value = $this->reduce($value);
- if ($value[0] == "null") {
- break;
- }
- }
-
- $compiledValue = $this->compileValue($value);
- $out->lines[] = $this->formatter->property(
- $this->compileValue($name),
- $compiledValue);
- break;
- case "comment":
- $out->lines[] = $child[1];
- break;
- case "mixin":
- case "function":
- list(,$block) = $child;
- $this->set(self::$namespaces[$block->type] . $block->name, $block);
- break;
- case "extend":
- list(, $selectors) = $child;
- foreach ($selectors as $sel) {
- // only use the first one
- $sel = current($this->evalSelector($sel));
- $this->pushExtends($sel, $out->selectors);
- }
- break;
- case "if":
- list(, $if) = $child;
- if ($this->isTruthy($this->reduce($if->cond, true))) {
- return $this->compileChildren($if->children, $out);
- } else {
- foreach ($if->cases as $case) {
- if ($case->type == "else" ||
- $case->type == "elseif" && $this->isTruthy($this->reduce($case->cond)))
- {
- return $this->compileChildren($case->children, $out);
- }
- }
- }
- break;
- case "return":
- return $this->reduce($child[1], true);
- case "each":
- list(,$each) = $child;
- $list = $this->coerceList($this->reduce($each->list));
- foreach ($list[2] as $item) {
- $this->pushEnv();
- $this->set($each->var, $item);
- // TODO: allow return from here
- $this->compileChildren($each->children, $out);
- $this->popEnv();
- }
- break;
- case "while":
- list(,$while) = $child;
- while ($this->isTruthy($this->reduce($while->cond, true))) {
- $ret = $this->compileChildren($while->children, $out);
- if ($ret) return $ret;
- }
- break;
- case "for":
- list(,$for) = $child;
- $start = $this->reduce($for->start, true);
- $start = $start[1];
- $end = $this->reduce($for->end, true);
- $end = $end[1];
- $d = $start < $end ? 1 : -1;
-
- while (true) {
- if ((!$for->until && $start - $d == $end) ||
- ($for->until && $start == $end))
- {
- break;
- }
-
- $this->set($for->var, array("number", $start, ""));
- $start += $d;
-
- $ret = $this->compileChildren($for->children, $out);
- if ($ret) return $ret;
- }
-
- break;
- case "nestedprop":
- list(,$prop) = $child;
- $prefixed = array();
- $prefix = $this->compileValue($prop->prefix) . "-";
- foreach ($prop->children as $child) {
- if ($child[0] == "assign") {
- array_unshift($child[1][2], $prefix);
- }
- if ($child[0] == "nestedprop") {
- array_unshift($child[1]->prefix[2], $prefix);
- }
- $prefixed[] = $child;
- }
- $this->compileChildren($prefixed, $out);
- break;
- case "include": // including a mixin
- list(,$name, $argValues, $content) = $child;
- $mixin = $this->get(self::$namespaces["mixin"] . $name, false);
- if (!$mixin) {
- $this->throwError("Undefined mixin $name");
- }
-
- $callingScope = $this->env;
-
- // push scope, apply args
- $this->pushEnv();
- if ($this->env->depth > 0) {
- $this->env->depth--;
- }
-
- if (!is_null($content)) {
- $content->scope = $callingScope;
- $this->setRaw(self::$namespaces["special"] . "content", $content);
- }
-
- if (!is_null($mixin->args)) {
- $this->applyArguments($mixin->args, $argValues);
- }
-
- foreach ($mixin->children as $child) {
- $this->compileChild($child, $out);
- }
-
- $this->popEnv();
-
- break;
- case "mixin_content":
- $content = $this->get(self::$namespaces["special"] . "content");
- if (is_null($content)) {
- $this->throwError("Expected @content inside of mixin");
- }
-
- $strongTypes = array('include', 'block', 'for', 'while');
- foreach ($content->children as $child) {
- $this->storeEnv = (in_array($child[0], $strongTypes))
- ? null
- : $content->scope;
-
- $this->compileChild($child, $out);
- }
-
- unset($this->storeEnv);
- break;
- case "debug":
- list(,$value, $pos) = $child;
- $line = $this->parser->getLineNo($pos);
- $value = $this->compileValue($this->reduce($value, true));
- fwrite(STDERR, "Line $line DEBUG: $value\n");
- break;
- default:
- $this->throwError("unknown child type: $child[0]");
- }
- }
-
- protected function expToString($exp) {
- list(, $op, $left, $right, $inParens, $whiteLeft, $whiteRight) = $exp;
- $content = array($this->reduce($left));
- if ($whiteLeft) $content[] = " ";
- $content[] = $op;
- if ($whiteRight) $content[] = " ";
- $content[] = $this->reduce($right);
- return array("string", "", $content);
- }
-
- protected function isTruthy($value) {
- return $value != self::$false && $value != self::$null;
- }
-
- // should $value cause its operand to eval
- protected function shouldEval($value) {
- switch ($value[0]) {
- case "exp":
- if ($value[1] == "/") {
- return $this->shouldEval($value[2], $value[3]);
- }
- case "var":
- case "fncall":
- return true;
- }
- return false;
- }
-
- protected function reduce($value, $inExp = false) {
- list($type) = $value;
- switch ($type) {
- case "exp":
- list(, $op, $left, $right, $inParens) = $value;
- $opName = isset(self::$operatorNames[$op]) ? self::$operatorNames[$op] : $op;
-
- $inExp = $inExp || $this->shouldEval($left) || $this->shouldEval($right);
-
- $left = $this->reduce($left, true);
- $right = $this->reduce($right, true);
-
- // only do division in special cases
- if ($opName == "div" && !$inParens && !$inExp) {
- if ($left[0] != "color" && $right[0] != "color") {
- return $this->expToString($value);
- }
- }
-
- $left = $this->coerceForExpression($left);
- $right = $this->coerceForExpression($right);
-
- $ltype = $left[0];
- $rtype = $right[0];
-
- // this tries:
- // 1. op_[op name]_[left type]_[right type]
- // 2. op_[left type]_[right type] (passing the op as first arg
- // 3. op_[op name]
- $fn = "op_${opName}_${ltype}_${rtype}";
- if (is_callable(array($this, $fn)) ||
- (($fn = "op_${ltype}_${rtype}") &&
- is_callable(array($this, $fn)) &&
- $passOp = true) ||
- (($fn = "op_${opName}") &&
- is_callable(array($this, $fn)) &&
- $genOp = true))
- {
- $unitChange = false;
- if (!isset($genOp) &&
- $left[0] == "number" && $right[0] == "number")
- {
- if ($opName == "mod" && $right[2] != "") {
- $this->throwError("Cannot modulo by a number with units: $right[1]$right[2].");
- }
-
- $unitChange = true;
- $emptyUnit = $left[2] == "" || $right[2] == "";
- $targetUnit = "" != $left[2] ? $left[2] : $right[2];
-
- if ($opName != "mul") {
- $left[2] = "" != $left[2] ? $left[2] : $targetUnit;
- $right[2] = "" != $right[2] ? $right[2] : $targetUnit;
- }
-
- if ($opName != "mod") {
- $left = $this->normalizeNumber($left);
- $right = $this->normalizeNumber($right);
- }
-
- if ($opName == "div" && !$emptyUnit && $left[2] == $right[2]) {
- $targetUnit = "";
- }
-
- if ($opName == "mul") {
- $left[2] = "" != $left[2] ? $left[2] : $right[2];
- $right[2] = "" != $right[2] ? $right[2] : $left[2];
- } elseif ($opName == "div" && $left[2] == $right[2]) {
- $left[2] = "";
- $right[2] = "";
- }
- }
-
- $shouldEval = $inParens || $inExp;
- if (isset($passOp)) {
- $out = $this->$fn($op, $left, $right, $shouldEval);
- } else {
- $out = $this->$fn($left, $right, $shouldEval);
- }
-
- if (!is_null($out)) {
- if ($unitChange && $out[0] == "number") {
- $out = $this->coerceUnit($out, $targetUnit);
- }
- return $out;
- }
- }
-
- return $this->expToString($value);
- case "unary":
- list(, $op, $exp, $inParens) = $value;
- $inExp = $inExp || $this->shouldEval($exp);
-
- $exp = $this->reduce($exp);
- if ($exp[0] == "number") {
- switch ($op) {
- case "+":
- return $exp;
- case "-":
- $exp[1] *= -1;
- return $exp;
- }
- }
-
- if ($op == "not") {
- if ($inExp || $inParens) {
- if ($exp == self::$false) {
- return self::$true;
- } else {
- return self::$false;
- }
- } else {
- $op = $op . " ";
- }
- }
-
- return array("string", "", array($op, $exp));
- case "var":
- list(, $name) = $value;
- return $this->reduce($this->get($name));
- case "list":
- foreach ($value[2] as &$item) {
- $item = $this->reduce($item);
- }
- return $value;
- case "string":
- foreach ($value[2] as &$item) {
- if (is_array($item)) {
- $item = $this->reduce($item);
- }
- }
- return $value;
- case "interpolate":
- $value[1] = $this->reduce($value[1]);
- return $value;
- case "fncall":
- list(,$name, $argValues) = $value;
-
- // user defined function?
- $func = $this->get(self::$namespaces["function"] . $name, false);
- if ($func) {
- $this->pushEnv();
-
- // set the args
- if (isset($func->args)) {
- $this->applyArguments($func->args, $argValues);
- }
-
- // throw away lines and children
- $tmp = (object)array(
- "lines" => array(),
- "children" => array()
- );
- $ret = $this->compileChildren($func->children, $tmp);
- $this->popEnv();
-
- return is_null($ret) ? self::$defaultValue : $ret;
- }
-
- // built in function
- if ($this->callBuiltin($name, $argValues, $returnValue)) {
- return $returnValue;
- }
-
- // need to flatten the arguments into a list
- $listArgs = array();
- foreach ((array)$argValues as $arg) {
- if (empty($arg[0])) {
- $listArgs[] = $this->reduce($arg[1]);
- }
- }
- return array("function", $name, array("list", ",", $listArgs));
- default:
- return $value;
- }
- }
-
- public function normalizeValue($value) {
- $value = $this->coerceForExpression($this->reduce($value));
- list($type) = $value;
-
- switch ($type) {
- case "list":
- $value = $this->extractInterpolation($value);
- if ($value[0] != "list") {
- return array("keyword", $this->compileValue($value));
- }
- foreach ($value[2] as $key => $item) {
- $value[2][$key] = $this->normalizeValue($item);
- }
- return $value;
- case "number":
- return $this->normalizeNumber($value);
- default:
- return $value;
- }
- }
-
- // just does physical lengths for now
- protected function normalizeNumber($number) {
- list(, $value, $unit) = $number;
- if (isset(self::$unitTable["in"][$unit])) {
- $conv = self::$unitTable["in"][$unit];
- return array("number", $value / $conv, "in");
- }
- return $number;
- }
-
- // $number should be normalized
- protected function coerceUnit($number, $unit) {
- list(, $value, $baseUnit) = $number;
- if (isset(self::$unitTable[$baseUnit][$unit])) {
- $value = $value * self::$unitTable[$baseUnit][$unit];
- }
-
- return array("number", $value, $unit);
- }
-
- protected function op_add_number_number($left, $right) {
- return array("number", $left[1] + $right[1], $left[2]);
- }
-
- protected function op_mul_number_number($left, $right) {
- return array("number", $left[1] * $right[1], $left[2]);
- }
-
- protected function op_sub_number_number($left, $right) {
- return array("number", $left[1] - $right[1], $left[2]);
- }
-
- protected function op_div_number_number($left, $right) {
- return array("number", $left[1] / $right[1], $left[2]);
- }
-
- protected function op_mod_number_number($left, $right) {
- return array("number", $left[1] % $right[1], $left[2]);
- }
-
- // adding strings
- protected function op_add($left, $right) {
- if ($strLeft = $this->coerceString($left)) {
- if ($right[0] == "string") {
- $right[1] = "";
- }
- $strLeft[2][] = $right;
- return $strLeft;
- }
-
- if ($strRight = $this->coerceString($right)) {
- if ($left[0] == "string") {
- $left[1] = "";
- }
- array_unshift($strRight[2], $left);
- return $strRight;
- }
- }
-
- protected function op_and($left, $right, $shouldEval) {
- if (!$shouldEval) return;
- if ($left != self::$false) return $right;
- return $left;
- }
-
- protected function op_or($left, $right, $shouldEval) {
- if (!$shouldEval) return;
- if ($left != self::$false) return $left;
- return $right;
- }
-
- protected function op_color_color($op, $left, $right) {
- $out = array('color');
- foreach (range(1, 3) as $i) {
- $lval = isset($left[$i]) ? $left[$i] : 0;
- $rval = isset($right[$i]) ? $right[$i] : 0;
- switch ($op) {
- case '+':
- $out[] = $lval + $rval;
- break;
- case '-':
- $out[] = $lval - $rval;
- break;
- case '*':
- $out[] = $lval * $rval;
- break;
- case '%':
- $out[] = $lval % $rval;
- break;
- case '/':
- if ($rval == 0) {
- $this->throwError("color: Can't divide by zero");
- }
- $out[] = $lval / $rval;
- break;
- case "==":
- return $this->op_eq($left, $right);
- case "!=":
- return $this->op_neq($left, $right);
- default:
- $this->throwError("color: unknown op $op");
- }
- }
-
- if (isset($left[4])) $out[4] = $left[4];
- elseif (isset($right[4])) $out[4] = $right[4];
-
- return $this->fixColor($out);
- }
-
- protected function op_color_number($op, $left, $right) {
- $value = $right[1];
- return $this->op_color_color($op, $left,
- array("color", $value, $value, $value));
- }
-
- protected function op_number_color($op, $left, $right) {
- $value = $left[1];
- return $this->op_color_color($op,
- array("color", $value, $value, $value), $right);
- }
-
- protected function op_eq($left, $right) {
- if (($lStr = $this->coerceString($left)) && ($rStr = $this->coerceString($right))) {
- $lStr[1] = "";
- $rStr[1] = "";
- return $this->toBool($this->compileValue($lStr) == $this->compileValue($rStr));
- }
-
- return $this->toBool($left == $right);
- }
-
- protected function op_neq($left, $right) {
- return $this->toBool($left != $right);
- }
-
- protected function op_gte_number_number($left, $right) {
- return $this->toBool($left[1] >= $right[1]);
- }
-
- protected function op_gt_number_number($left, $right) {
- return $this->toBool($left[1] > $right[1]);
- }
-
- protected function op_lte_number_number($left, $right) {
- return $this->toBool($left[1] <= $right[1]);
- }
-
- protected function op_lt_number_number($left, $right) {
- return $this->toBool($left[1] < $right[1]);
- }
-
- public function toBool($thing) {
- return $thing ? self::$true : self::$false;
- }
-
- /**
- * Compiles a primitive value into a CSS property value.
- *
- * Values in scssphp are typed by being wrapped in arrays, their format is
- * typically:
- *
- * array(type, contents [, additional_contents]*)
- *
- * The input is expected to be reduced. This function will not work on
- * things like expressions and variables.
- *
- * @param array $value
- */
- protected function compileValue($value) {
- $value = $this->reduce($value);
-
- list($type) = $value;
- switch ($type) {
- case "keyword":
- return $value[1];
- case "color":
- // [1] - red component (either number for a %)
- // [2] - green component
- // [3] - blue component
- // [4] - optional alpha component
- list(, $r, $g, $b) = $value;
-
- $r = round($r);
- $g = round($g);
- $b = round($b);
-
- if (count($value) == 5 && $value[4] != 1) { // rgba
- return 'rgba('.$r.', '.$g.', '.$b.', '.$value[4].')';
- }
-
- $h = sprintf("#%02x%02x%02x", $r, $g, $b);
-
- // Converting hex color to short notation (e.g. #003399 to #039)
- if ($h[1] === $h[2] && $h[3] === $h[4] && $h[5] === $h[6]) {
- $h = '#' . $h[1] . $h[3] . $h[5];
- }
-
- return $h;
- case "number":
- return round($value[1], $this->numberPrecision) . $value[2];
- case "string":
- return $value[1] . $this->compileStringContent($value) . $value[1];
- case "function":
- $args = !empty($value[2]) ? $this->compileValue($value[2]) : "";
- return "$value[1]($args)";
- case "list":
- $value = $this->extractInterpolation($value);
- if ($value[0] != "list") return $this->compileValue($value);
-
- list(, $delim, $items) = $value;
-
- $filtered = array();
- foreach ($items as $item) {
- if ($item[0] == "null") continue;
- $filtered[] = $this->compileValue($item);
- }
-
- return implode("$delim ", $filtered);
- case "interpolated": # node created by extractInterpolation
- list(, $interpolate, $left, $right) = $value;
- list(,, $whiteLeft, $whiteRight) = $interpolate;
-
- $left = count($left[2]) > 0 ?
- $this->compileValue($left).$whiteLeft : "";
-
- $right = count($right[2]) > 0 ?
- $whiteRight.$this->compileValue($right) : "";
-
- return $left.$this->compileValue($interpolate).$right;
-
- case "interpolate": # raw parse node
- list(, $exp) = $value;
-
- // strip quotes if it's a string
- $reduced = $this->reduce($exp);
- switch ($reduced[0]) {
- case "string":
- $reduced = array("keyword",
- $this->compileStringContent($reduced));
- break;
- case "null":
- $reduced = array("keyword", "");
- }
-
- return $this->compileValue($reduced);
- case "null":
- return "null";
- default:
- $this->throwError("unknown value type: $type");
- }
- }
-
- protected function compileStringContent($string) {
- $parts = array();
- foreach ($string[2] as $part) {
- if (is_array($part)) {
- $parts[] = $this->compileValue($part);
- } else {
- $parts[] = $part;
- }
- }
-
- return implode($parts);
- }
-
- // doesn't need to be recursive, compileValue will handle that
- protected function extractInterpolation($list) {
- $items = $list[2];
- foreach ($items as $i => $item) {
- if ($item[0] == "interpolate") {
- $before = array("list", $list[1], array_slice($items, 0, $i));
- $after = array("list", $list[1], array_slice($items, $i + 1));
- return array("interpolated", $item, $before, $after);
- }
- }
- return $list;
- }
-
- // find the final set of selectors
- protected function multiplySelectors($env) {
- $envs = array();
- while (null !== $env) {
- if (!empty($env->selectors)) {
- $envs[] = $env;
- }
- $env = $env->parent;
- };
-
- $selectors = array();
- $parentSelectors = array(array());
- while ($env = array_pop($envs)) {
- $selectors = array();
- foreach ($env->selectors as $selector) {
- foreach ($parentSelectors as $parent) {
- $selectors[] = $this->joinSelectors($parent, $selector);
- }
- }
- $parentSelectors = $selectors;
- }
-
- return $selectors;
- }
-
- // looks for & to replace, or append parent before child
- protected function joinSelectors($parent, $child) {
- $setSelf = false;
- $out = array();
- foreach ($child as $part) {
- $newPart = array();
- foreach ($part as $p) {
- if ($p == self::$selfSelector) {
- $setSelf = true;
- foreach ($parent as $i => $parentPart) {
- if ($i > 0) {
- $out[] = $newPart;
- $newPart = array();
- }
-
- foreach ($parentPart as $pp) {
- $newPart[] = $pp;
- }
- }
- } else {
- $newPart[] = $p;
- }
- }
-
- $out[] = $newPart;
- }
-
- return $setSelf ? $out : array_merge($parent, $child);
- }
-
- protected function multiplyMedia($env, $childQueries = null) {
- if (is_null($env) ||
- !empty($env->block->type) && $env->block->type != "media")
- {
- return $childQueries;
- }
-
- // plain old block, skip
- if (empty($env->block->type)) {
- return $this->multiplyMedia($env->parent, $childQueries);
- }
-
- $parentQueries = $env->block->queryList;
- if ($childQueries == null) {
- $childQueries = $parentQueries;
- } else {
- $originalQueries = $childQueries;
- $childQueries = array();
-
- foreach ($parentQueries as $parentQuery){
- foreach ($originalQueries as $childQuery) {
- $childQueries []= array_merge($parentQuery, $childQuery);
- }
- }
- }
-
- return $this->multiplyMedia($env->parent, $childQueries);
- }
-
- // convert something to list
- protected function coerceList($item, $delim = ",") {
- if (!is_null($item) && $item[0] == "list") {
- return $item;
- }
-
- return array("list", $delim, is_null($item) ? array(): array($item));
- }
-
- protected function applyArguments($argDef, $argValues) {
- $hasVariable = false;
- $args = array();
- foreach ($argDef as $i => $arg) {
- list($name, $default, $isVariable) = $argDef[$i];
- $args[$name] = array($i, $name, $default, $isVariable);
- $hasVariable |= $isVariable;
- }
-
- $keywordArgs = array();
- $deferredKeywordArgs = array();
- $remaining = array();
- // assign the keyword args
- foreach ((array) $argValues as $arg) {
- if (!empty($arg[0])) {
- if (!isset($args[$arg[0][1]])) {
- if ($hasVariable) {
- $deferredKeywordArgs[$arg[0][1]] = $arg[1];
- } else {
- $this->throwError("Mixin or function doesn't have an argument named $%s.", $arg[0][1]);
- }
- } elseif ($args[$arg[0][1]][0] < count($remaining)) {
- $this->throwError("The argument $%s was passed both by position and by name.", $arg[0][1]);
- } else {
- $keywordArgs[$arg[0][1]] = $arg[1];
- }
- } elseif (count($keywordArgs)) {
- $this->throwError('Positional arguments must come before keyword arguments.');
- } elseif ($arg[2] == true) {
- $val = $this->reduce($arg[1], true);
- if ($val[0] == "list") {
- foreach ($val[2] as $name => $item) {
- if (!is_numeric($name)) {
- $keywordArgs[$name] = $item;
- } else {
- $remaining[] = $item;
- }
- }
- } else {
- $remaining[] = $val;
- }
- } else {
- $remaining[] = $arg[1];
- }
- }
-
- foreach ($args as $arg) {
- list($i, $name, $default, $isVariable) = $arg;
- if ($isVariable) {
- $val = array("list", ",", array());
- for ($count = count($remaining); $i < $count; $i++) {
- $val[2][] = $remaining[$i];
- }
- foreach ($deferredKeywordArgs as $itemName => $item) {
- $val[2][$itemName] = $item;
- }
- } elseif (isset($remaining[$i])) {
- $val = $remaining[$i];
- } elseif (isset($keywordArgs[$name])) {
- $val = $keywordArgs[$name];
- } elseif (!empty($default)) {
- $val = $default;
- } else {
- $this->throwError("Missing argument $name");
- }
-
- $this->set($name, $this->reduce($val, true), true);
- }
- }
-
- protected function pushEnv($block=null) {
- $env = new stdClass;
- $env->parent = $this->env;
- $env->store = array();
- $env->block = $block;
- $env->depth = isset($this->env->depth) ? $this->env->depth + 1 : 0;
-
- $this->env = $env;
- return $env;
- }
-
- protected function normalizeName($name) {
- return str_replace("-", "_", $name);
- }
-
- protected function getStoreEnv() {
- return isset($this->storeEnv) ? $this->storeEnv : $this->env;
- }
-
- protected function set($name, $value, $shadow=false) {
- $name = $this->normalizeName($name);
-
- if ($shadow) {
- $this->setRaw($name, $value);
- } else {
- $this->setExisting($name, $value);
- }
- }
-
- protected function setExisting($name, $value, $env = null) {
- if (is_null($env)) $env = $this->getStoreEnv();
-
- if (isset($env->store[$name]) || is_null($env->parent)) {
- $env->store[$name] = $value;
- } else {
- $this->setExisting($name, $value, $env->parent);
- }
- }
-
- protected function setRaw($name, $value) {
- $env = $this->getStoreEnv();
- $env->store[$name] = $value;
- }
-
- public function get($name, $defaultValue = null, $env = null) {
- $name = $this->normalizeName($name);
-
- if (is_null($env)) $env = $this->getStoreEnv();
- if (is_null($defaultValue)) $defaultValue = self::$defaultValue;
-
- if (isset($env->store[$name])) {
- return $env->store[$name];
- } elseif (isset($env->parent)) {
- return $this->get($name, $defaultValue, $env->parent);
- }
-
- return $defaultValue; // found nothing
- }
-
- protected function popEnv() {
- $env = $this->env;
- $this->env = $this->env->parent;
- return $env;
- }
-
- public function getParsedFiles() {
- return $this->parsedFiles;
- }
-
- public function addImportPath($path) {
- $this->importPaths[] = $path;
- }
-
- public function setImportPaths($path) {
- $this->importPaths = (array)$path;
- }
-
- public function setNumberPrecision($numberPrecision) {
- $this->numberPrecision = $numberPrecision;
- }
-
- public function setFormatter($formatterName) {
- $this->formatter = $formatterName;
- }
-
- public function registerFunction($name, $func) {
- $this->userFunctions[$this->normalizeName($name)] = $func;
- }
-
- public function unregisterFunction($name) {
- unset($this->userFunctions[$this->normalizeName($name)]);
- }
-
- protected function importFile($path, $out) {
- // see if tree is cached
- $realPath = realpath($path);
- if (isset($this->importCache[$realPath])) {
- $tree = $this->importCache[$realPath];
- } else {
- $code = file_get_contents($path);
- $parser = new scss_parser($path, false);
- $tree = $parser->parse($code);
- $this->parsedFiles[] = $path;
-
- $this->importCache[$realPath] = $tree;
- }
-
- $pi = pathinfo($path);
- array_unshift($this->importPaths, $pi['dirname']);
- $this->compileChildren($tree->children, $out);
- array_shift($this->importPaths);
- }
-
- // results the file path for an import url if it exists
- public function findImport($url) {
- $urls = array();
-
- // for "normal" scss imports (ignore vanilla css and external requests)
- if (!preg_match('/\.css|^http:\/\/$/', $url)) {
- // try both normal and the _partial filename
- $urls = array($url, preg_replace('/[^\/]+$/', '_\0', $url));
- }
-
- foreach ($this->importPaths as $dir) {
- if (is_string($dir)) {
- // check urls for normal import paths
- foreach ($urls as $full) {
- $full = $dir .
- (!empty($dir) && substr($dir, -1) != '/' ? '/' : '') .
- $full;
-
- if ($this->fileExists($file = $full.'.scss') ||
- $this->fileExists($file = $full))
- {
- return $file;
- }
- }
- } else {
- // check custom callback for import path
- $file = call_user_func($dir,$url,$this);
- if ($file !== null) {
- return $file;
- }
- }
- }
-
- return null;
- }
-
- protected function fileExists($name) {
- return is_file($name);
- }
-
- protected function callBuiltin($name, $args, &$returnValue) {
- // try a lib function
- $name = $this->normalizeName($name);
- $libName = "lib_".$name;
- $f = array($this, $libName);
- $prototype = isset(self::$$libName) ? self::$$libName : null;
-
- if (is_callable($f)) {
- $sorted = $this->sortArgs($prototype, $args);
- foreach ($sorted as &$val) {
- $val = $this->reduce($val, true);
- }
- $returnValue = call_user_func($f, $sorted, $this);
- } elseif (isset($this->userFunctions[$name])) {
- // see if we can find a user function
- $fn = $this->userFunctions[$name];
-
- foreach ($args as &$val) {
- $val = $this->reduce($val[1], true);
- }
-
- $returnValue = call_user_func($fn, $args, $this);
- }
-
- if (isset($returnValue)) {
- // coerce a php value into a scss one
- if (is_numeric($returnValue)) {
- $returnValue = array('number', $returnValue, "");
- } elseif (is_bool($returnValue)) {
- $returnValue = $returnValue ? self::$true : self::$false;
- } elseif (!is_array($returnValue)) {
- $returnValue = array('keyword', $returnValue);
- }
-
- return true;
- }
-
- return false;
- }
-
- // sorts any keyword arguments
- // TODO: merge with apply arguments
- protected function sortArgs($prototype, $args) {
- $keyArgs = array();
- $posArgs = array();
-
- foreach ($args as $arg) {
- list($key, $value) = $arg;
- $key = $key[1];
- if (empty($key)) {
- $posArgs[] = $value;
- } else {
- $keyArgs[$key] = $value;
- }
- }
-
- if (is_null($prototype)) return $posArgs;
-
- $finalArgs = array();
- foreach ($prototype as $i => $names) {
- if (isset($posArgs[$i])) {
- $finalArgs[] = $posArgs[$i];
- continue;
- }
-
- $set = false;
- foreach ((array)$names as $name) {
- if (isset($keyArgs[$name])) {
- $finalArgs[] = $keyArgs[$name];
- $set = true;
- break;
- }
- }
-
- if (!$set) {
- $finalArgs[] = null;
- }
- }
-
- return $finalArgs;
- }
-
- protected function coerceForExpression($value) {
- if ($color = $this->coerceColor($value)) {
- return $color;
- }
-
- return $value;
- }
-
- protected function coerceColor($value) {
- switch ($value[0]) {
- case "color": return $value;
- case "keyword":
- $name = $value[1];
- if (isset(self::$cssColors[$name])) {
- @list($r, $g, $b, $a) = explode(',', self::$cssColors[$name]);
- return isset($a)
- ? array('color', (int) $r, (int) $g, (int) $b, (int) $a)
- : array('color', (int) $r, (int) $g, (int) $b);
- }
- return null;
- }
-
- return null;
- }
-
- protected function coerceString($value) {
- switch ($value[0]) {
- case "string":
- return $value;
- case "keyword":
- return array("string", "", array($value[1]));
- }
- return null;
- }
-
- public function assertList($value) {
- if ($value[0] != "list")
- $this->throwError("expecting list");
- return $value;
- }
-
- public function assertColor($value) {
- if ($color = $this->coerceColor($value)) return $color;
- $this->throwError("expecting color");
- }
-
- public function assertNumber($value) {
- if ($value[0] != "number")
- $this->throwError("expecting number");
- return $value[1];
- }
-
- protected function coercePercent($value) {
- if ($value[0] == "number") {
- if ($value[2] == "%") {
- return $value[1] / 100;
- }
- return $value[1];
- }
- return 0;
- }
-
- // make sure a color's components don't go out of bounds
- protected function fixColor($c) {
- foreach (range(1, 3) as $i) {
- if ($c[$i] < 0) $c[$i] = 0;
- if ($c[$i] > 255) $c[$i] = 255;
- }
-
- return $c;
- }
-
- public function toHSL($red, $green, $blue) {
- $r = $red / 255;
- $g = $green / 255;
- $b = $blue / 255;
-
- $min = min($r, $g, $b);
- $max = max($r, $g, $b);
- $d = $max - $min;
- $l = ($min + $max) / 2;
-
- if ($min == $max) {
- $s = $h = 0;
- } else {
- if ($l < 0.5)
- $s = $d / (2 * $l);
- else
- $s = $d / (2 - 2 * $l);
-
- if ($r == $max)
- $h = 60 * ($g - $b) / $d;
- elseif ($g == $max)
- $h = 60 * ($b - $r) / $d + 120;
- elseif ($b == $max)
- $h = 60 * ($r - $g) / $d + 240;
- }
-
- return array('hsl', fmod($h, 360), $s * 100, $l * 100);
- }
-
- public function hueToRGB($m1, $m2, $h) {
- if ($h < 0)
- $h += 1;
- elseif ($h > 1)
- $h -= 1;
-
- if ($h * 6 < 1)
- return $m1 + ($m2 - $m1) * $h * 6;
-
- if ($h * 2 < 1)
- return $m2;
-
- if ($h * 3 < 2)
- return $m1 + ($m2 - $m1) * (2/3 - $h) * 6;
-
- return $m1;
- }
-
- // H from 0 to 360, S and L from 0 to 100
- public function toRGB($hue, $saturation, $lightness) {
- if ($hue < 0) {
- $hue += 360;
- }
-
- $h = $hue / 360;
- $s = min(100, max(0, $saturation)) / 100;
- $l = min(100, max(0, $lightness)) / 100;
-
- $m2 = $l <= 0.5 ? $l * ($s + 1) : $l + $s - $l * $s;
- $m1 = $l * 2 - $m2;
-
- $r = $this->hueToRGB($m1, $m2, $h + 1/3) * 255;
- $g = $this->hueToRGB($m1, $m2, $h) * 255;
- $b = $this->hueToRGB($m1, $m2, $h - 1/3) * 255;
-
- $out = array('color', $r, $g, $b);
- return $out;
- }
-
- // Built in functions
-
- protected static $lib_if = array("condition", "if-true", "if-false");
- protected function lib_if($args) {
- list($cond,$t, $f) = $args;
- if ($cond == self::$false) return $f;
- return $t;
- }
-
- protected static $lib_index = array("list", "value");
- protected function lib_index($args) {
- list($list, $value) = $args;
- $list = $this->assertList($list);
-
- $values = array();
- foreach ($list[2] as $item) {
- $values[] = $this->normalizeValue($item);
- }
- $key = array_search($this->normalizeValue($value), $values);
-
- return false === $key ? false : $key + 1;
- }
-
- protected static $lib_rgb = array("red", "green", "blue");
- protected function lib_rgb($args) {
- list($r,$g,$b) = $args;
- return array("color", $r[1], $g[1], $b[1]);
- }
-
- protected static $lib_rgba = array(
- array("red", "color"),
- "green", "blue", "alpha");
- protected function lib_rgba($args) {
- if ($color = $this->coerceColor($args[0])) {
- $num = is_null($args[1]) ? $args[3] : $args[1];
- $alpha = $this->assertNumber($num);
- $color[4] = $alpha;
- return $color;
- }
-
- list($r,$g,$b, $a) = $args;
- return array("color", $r[1], $g[1], $b[1], $a[1]);
- }
-
- // helper function for adjust_color, change_color, and scale_color
- protected function alter_color($args, $fn) {
- $color = $this->assertColor($args[0]);
-
- foreach (array(1,2,3,7) as $i) {
- if (!is_null($args[$i])) {
- $val = $this->assertNumber($args[$i]);
- $ii = $i == 7 ? 4 : $i; // alpha
- $color[$ii] =
- $this->$fn(isset($color[$ii]) ? $color[$ii] : 0, $val, $i);
- }
- }
-
- if (!is_null($args[4]) || !is_null($args[5]) || !is_null($args[6])) {
- $hsl = $this->toHSL($color[1], $color[2], $color[3]);
- foreach (array(4,5,6) as $i) {
- if (!is_null($args[$i])) {
- $val = $this->assertNumber($args[$i]);
- $hsl[$i - 3] = $this->$fn($hsl[$i - 3], $val, $i);
- }
- }
-
- $rgb = $this->toRGB($hsl[1], $hsl[2], $hsl[3]);
- if (isset($color[4])) $rgb[4] = $color[4];
- $color = $rgb;
- }
-
- return $color;
- }
-
- protected static $lib_adjust_color = array(
- "color", "red", "green", "blue",
- "hue", "saturation", "lightness", "alpha"
- );
- protected function adjust_color_helper($base, $alter, $i) {
- return $base += $alter;
- }
- protected function lib_adjust_color($args) {
- return $this->alter_color($args, "adjust_color_helper");
- }
-
- protected static $lib_change_color = array(
- "color", "red", "green", "blue",
- "hue", "saturation", "lightness", "alpha"
- );
- protected function change_color_helper($base, $alter, $i) {
- return $alter;
- }
- protected function lib_change_color($args) {
- return $this->alter_color($args, "change_color_helper");
- }
-
- protected static $lib_scale_color = array(
- "color", "red", "green", "blue",
- "hue", "saturation", "lightness", "alpha"
- );
- protected function scale_color_helper($base, $scale, $i) {
- // 1,2,3 - rgb
- // 4, 5, 6 - hsl
- // 7 - a
- switch ($i) {
- case 1:
- case 2:
- case 3:
- $max = 255; break;
- case 4:
- $max = 360; break;
- case 7:
- $max = 1; break;
- default:
- $max = 100;
- }
-
- $scale = $scale / 100;
- if ($scale < 0) {
- return $base * $scale + $base;
- } else {
- return ($max - $base) * $scale + $base;
- }
- }
- protected function lib_scale_color($args) {
- return $this->alter_color($args, "scale_color_helper");
- }
-
- protected static $lib_ie_hex_str = array("color");
- protected function lib_ie_hex_str($args) {
- $color = $this->coerceColor($args[0]);
- $color[4] = isset($color[4]) ? round(255*$color[4]) : 255;
-
- return sprintf('#%02X%02X%02X%02X', $color[4], $color[1], $color[2], $color[3]);
- }
-
- protected static $lib_red = array("color");
- protected function lib_red($args) {
- $color = $this->coerceColor($args[0]);
- return $color[1];
- }
-
- protected static $lib_green = array("color");
- protected function lib_green($args) {
- $color = $this->coerceColor($args[0]);
- return $color[2];
- }
-
- protected static $lib_blue = array("color");
- protected function lib_blue($args) {
- $color = $this->coerceColor($args[0]);
- return $color[3];
- }
-
- protected static $lib_alpha = array("color");
- protected function lib_alpha($args) {
- if ($color = $this->coerceColor($args[0])) {
- return isset($color[4]) ? $color[4] : 1;
- }
-
- // this might be the IE function, so return value unchanged
- return null;
- }
-
- protected static $lib_opacity = array("color");
- protected function lib_opacity($args) {
- $value = $args[0];
- if ($value[0] === 'number') return null;
- return $this->lib_alpha($args);
- }
-
- // mix two colors
- protected static $lib_mix = array("color-1", "color-2", "weight");
- protected function lib_mix($args) {
- list($first, $second, $weight) = $args;
- $first = $this->assertColor($first);
- $second = $this->assertColor($second);
-
- if (is_null($weight)) {
- $weight = 0.5;
- } else {
- $weight = $this->coercePercent($weight);
- }
-
- $firstAlpha = isset($first[4]) ? $first[4] : 1;
- $secondAlpha = isset($second[4]) ? $second[4] : 1;
-
- $w = $weight * 2 - 1;
- $a = $firstAlpha - $secondAlpha;
-
- $w1 = (($w * $a == -1 ? $w : ($w + $a)/(1 + $w * $a)) + 1) / 2.0;
- $w2 = 1.0 - $w1;
-
- $new = array('color',
- $w1 * $first[1] + $w2 * $second[1],
- $w1 * $first[2] + $w2 * $second[2],
- $w1 * $first[3] + $w2 * $second[3],
- );
-
- if ($firstAlpha != 1.0 || $secondAlpha != 1.0) {
- $new[] = $firstAlpha * $weight + $secondAlpha * ($weight - 1);
- }
-
- return $this->fixColor($new);
- }
-
- protected static $lib_hsl = array("hue", "saturation", "lightness");
- protected function lib_hsl($args) {
- list($h, $s, $l) = $args;
- return $this->toRGB($h[1], $s[1], $l[1]);
- }
-
- protected static $lib_hsla = array("hue", "saturation",
- "lightness", "alpha");
- protected function lib_hsla($args) {
- list($h, $s, $l, $a) = $args;
- $color = $this->toRGB($h[1], $s[1], $l[1]);
- $color[4] = $a[1];
- return $color;
- }
-
- protected static $lib_hue = array("color");
- protected function lib_hue($args) {
- $color = $this->assertColor($args[0]);
- $hsl = $this->toHSL($color[1], $color[2], $color[3]);
- return array("number", $hsl[1], "deg");
- }
-
- protected static $lib_saturation = array("color");
- protected function lib_saturation($args) {
- $color = $this->assertColor($args[0]);
- $hsl = $this->toHSL($color[1], $color[2], $color[3]);
- return array("number", $hsl[2], "%");
- }
-
- protected static $lib_lightness = array("color");
- protected function lib_lightness($args) {
- $color = $this->assertColor($args[0]);
- $hsl = $this->toHSL($color[1], $color[2], $color[3]);
- return array("number", $hsl[3], "%");
- }
-
- protected function adjustHsl($color, $idx, $amount) {
- $hsl = $this->toHSL($color[1], $color[2], $color[3]);
- $hsl[$idx] += $amount;
- $out = $this->toRGB($hsl[1], $hsl[2], $hsl[3]);
- if (isset($color[4])) $out[4] = $color[4];
- return $out;
- }
-
- protected static $lib_adjust_hue = array("color", "degrees");
- protected function lib_adjust_hue($args) {
- $color = $this->assertColor($args[0]);
- $degrees = $this->assertNumber($args[1]);
- return $this->adjustHsl($color, 1, $degrees);
- }
-
- protected static $lib_lighten = array("color", "amount");
- protected function lib_lighten($args) {
- $color = $this->assertColor($args[0]);
- $amount = 100*$this->coercePercent($args[1]);
- return $this->adjustHsl($color, 3, $amount);
- }
-
- protected static $lib_darken = array("color", "amount");
- protected function lib_darken($args) {
- $color = $this->assertColor($args[0]);
- $amount = 100*$this->coercePercent($args[1]);
- return $this->adjustHsl($color, 3, -$amount);
- }
-
- protected static $lib_saturate = array("color", "amount");
- protected function lib_saturate($args) {
- $value = $args[0];
- if ($value[0] === 'number') return null;
- $color = $this->assertColor($value);
- $amount = 100*$this->coercePercent($args[1]);
- return $this->adjustHsl($color, 2, $amount);
- }
-
- protected static $lib_desaturate = array("color", "amount");
- protected function lib_desaturate($args) {
- $color = $this->assertColor($args[0]);
- $amount = 100*$this->coercePercent($args[1]);
- return $this->adjustHsl($color, 2, -$amount);
- }
-
- protected static $lib_grayscale = array("color");
- protected function lib_grayscale($args) {
- $value = $args[0];
- if ($value[0] === 'number') return null;
- return $this->adjustHsl($this->assertColor($value), 2, -100);
- }
-
- protected static $lib_complement = array("color");
- protected function lib_complement($args) {
- return $this->adjustHsl($this->assertColor($args[0]), 1, 180);
- }
-
- protected static $lib_invert = array("color");
- protected function lib_invert($args) {
- $value = $args[0];
- if ($value[0] === 'number') return null;
- $color = $this->assertColor($value);
- $color[1] = 255 - $color[1];
- $color[2] = 255 - $color[2];
- $color[3] = 255 - $color[3];
- return $color;
- }
-
- // increases opacity by amount
- protected static $lib_opacify = array("color", "amount");
- protected function lib_opacify($args) {
- $color = $this->assertColor($args[0]);
- $amount = $this->coercePercent($args[1]);
-
- $color[4] = (isset($color[4]) ? $color[4] : 1) + $amount;
- $color[4] = min(1, max(0, $color[4]));
- return $color;
- }
-
- protected static $lib_fade_in = array("color", "amount");
- protected function lib_fade_in($args) {
- return $this->lib_opacify($args);
- }
-
- // decreases opacity by amount
- protected static $lib_transparentize = array("color", "amount");
- protected function lib_transparentize($args) {
- $color = $this->assertColor($args[0]);
- $amount = $this->coercePercent($args[1]);
-
- $color[4] = (isset($color[4]) ? $color[4] : 1) - $amount;
- $color[4] = min(1, max(0, $color[4]));
- return $color;
- }
-
- protected static $lib_fade_out = array("color", "amount");
- protected function lib_fade_out($args) {
- return $this->lib_transparentize($args);
- }
-
- protected static $lib_unquote = array("string");
- protected function lib_unquote($args) {
- $str = $args[0];
- if ($str[0] == "string") $str[1] = "";
- return $str;
- }
-
- protected static $lib_quote = array("string");
- protected function lib_quote($args) {
- $value = $args[0];
- if ($value[0] == "string" && !empty($value[1]))
- return $value;
- return array("string", '"', array($value));
- }
-
- protected static $lib_percentage = array("value");
- protected function lib_percentage($args) {
- return array("number",
- $this->coercePercent($args[0]) * 100,
- "%");
- }
-
- protected static $lib_round = array("value");
- protected function lib_round($args) {
- $num = $args[0];
- $num[1] = round($num[1]);
- return $num;
- }
-
- protected static $lib_floor = array("value");
- protected function lib_floor($args) {
- $num = $args[0];
- $num[1] = floor($num[1]);
- return $num;
- }
-
- protected static $lib_ceil = array("value");
- protected function lib_ceil($args) {
- $num = $args[0];
- $num[1] = ceil($num[1]);
- return $num;
- }
-
- protected static $lib_abs = array("value");
- protected function lib_abs($args) {
- $num = $args[0];
- $num[1] = abs($num[1]);
- return $num;
- }
-
- protected function lib_min($args) {
- $numbers = $this->getNormalizedNumbers($args);
- $min = null;
- foreach ($numbers as $key => $number) {
- if (null === $min || $number[1] <= $min[1]) {
- $min = array($key, $number[1]);
- }
- }
-
- return $args[$min[0]];
- }
-
- protected function lib_max($args) {
- $numbers = $this->getNormalizedNumbers($args);
- $max = null;
- foreach ($numbers as $key => $number) {
- if (null === $max || $number[1] >= $max[1]) {
- $max = array($key, $number[1]);
- }
- }
-
- return $args[$max[0]];
- }
-
- protected function getNormalizedNumbers($args) {
- $unit = null;
- $originalUnit = null;
- $numbers = array();
- foreach ($args as $key => $item) {
- if ('number' != $item[0]) {
- $this->throwError("%s is not a number", $item[0]);
- }
- $number = $this->normalizeNumber($item);
-
- if (null === $unit) {
- $unit = $number[2];
- $originalUnit = $item[2];
- } elseif ($unit !== $number[2]) {
- $this->throwError('Incompatible units: "%s" and "%s".', $originalUnit, $item[2]);
- }
-
- $numbers[$key] = $number;
- }
-
- return $numbers;
- }
-
- protected static $lib_length = array("list");
- protected function lib_length($args) {
- $list = $this->coerceList($args[0]);
- return count($list[2]);
- }
-
- protected static $lib_nth = array("list", "n");
- protected function lib_nth($args) {
- $list = $this->coerceList($args[0]);
- $n = $this->assertNumber($args[1]) - 1;
- return isset($list[2][$n]) ? $list[2][$n] : self::$defaultValue;
- }
-
- protected function listSeparatorForJoin($list1, $sep) {
- if (is_null($sep)) return $list1[1];
- switch ($this->compileValue($sep)) {
- case "comma":
- return ",";
- case "space":
- return "";
- default:
- return $list1[1];
- }
- }
-
- protected static $lib_join = array("list1", "list2", "separator");
- protected function lib_join($args) {
- list($list1, $list2, $sep) = $args;
- $list1 = $this->coerceList($list1, " ");
- $list2 = $this->coerceList($list2, " ");
- $sep = $this->listSeparatorForJoin($list1, $sep);
- return array("list", $sep, array_merge($list1[2], $list2[2]));
- }
-
- protected static $lib_append = array("list", "val", "separator");
- protected function lib_append($args) {
- list($list1, $value, $sep) = $args;
- $list1 = $this->coerceList($list1, " ");
- $sep = $this->listSeparatorForJoin($list1, $sep);
- return array("list", $sep, array_merge($list1[2], array($value)));
- }
-
- protected function lib_zip($args) {
- foreach ($args as $arg) {
- $this->assertList($arg);
- }
-
- $lists = array();
- $firstList = array_shift($args);
- foreach ($firstList[2] as $key => $item) {
- $list = array("list", "", array($item));
- foreach ($args as $arg) {
- if (isset($arg[2][$key])) {
- $list[2][] = $arg[2][$key];
- } else {
- break 2;
- }
- }
- $lists[] = $list;
- }
-
- return array("list", ",", $lists);
- }
-
- protected static $lib_type_of = array("value");
- protected function lib_type_of($args) {
- $value = $args[0];
- switch ($value[0]) {
- case "keyword":
- if ($value == self::$true || $value == self::$false) {
- return "bool";
- }
-
- if ($this->coerceColor($value)) {
- return "color";
- }
-
- return "string";
- default:
- return $value[0];
- }
- }
-
- protected static $lib_unit = array("number");
- protected function lib_unit($args) {
- $num = $args[0];
- if ($num[0] == "number") {
- return array("string", '"', array($num[2]));
- }
- return "";
- }
-
- protected static $lib_unitless = array("number");
- protected function lib_unitless($args) {
- $value = $args[0];
- return $value[0] == "number" && empty($value[2]);
- }
-
- protected static $lib_comparable = array("number-1", "number-2");
- protected function lib_comparable($args) {
- list($number1, $number2) = $args;
- if (!isset($number1[0]) || $number1[0] != "number" || !isset($number2[0]) || $number2[0] != "number") {
- $this->throwError('Invalid argument(s) for "comparable"');
- }
-
- $number1 = $this->normalizeNumber($number1);
- $number2 = $this->normalizeNumber($number2);
-
- return $number1[2] == $number2[2] || $number1[2] == "" || $number2[2] == "";
- }
-
- /**
- * Workaround IE7's content counter bug.
- *
- * @param array $args
- */
- protected function lib_counter($args) {
- $list = array_map(array($this, 'compileValue'), $args);
- return array('string', '', array('counter(' . implode(',', $list) . ')'));
- }
-
- public function throwError($msg = null) {
- if (func_num_args() > 1) {
- $msg = call_user_func_array("sprintf", func_get_args());
- }
-
- if ($this->sourcePos >= 0 && isset($this->sourceParser)) {
- $this->sourceParser->throwParseError($msg, $this->sourcePos);
- }
-
- throw new Exception($msg);
- }
-
- /**
- * CSS Colors
- *
- * @see http://www.w3.org/TR/css3-color
- */
- static protected $cssColors = array(
- 'aliceblue' => '240,248,255',
- 'antiquewhite' => '250,235,215',
- 'aqua' => '0,255,255',
- 'aquamarine' => '127,255,212',
- 'azure' => '240,255,255',
- 'beige' => '245,245,220',
- 'bisque' => '255,228,196',
- 'black' => '0,0,0',
- 'blanchedalmond' => '255,235,205',
- 'blue' => '0,0,255',
- 'blueviolet' => '138,43,226',
- 'brown' => '165,42,42',
- 'burlywood' => '222,184,135',
- 'cadetblue' => '95,158,160',
- 'chartreuse' => '127,255,0',
- 'chocolate' => '210,105,30',
- 'coral' => '255,127,80',
- 'cornflowerblue' => '100,149,237',
- 'cornsilk' => '255,248,220',
- 'crimson' => '220,20,60',
- 'cyan' => '0,255,255',
- 'darkblue' => '0,0,139',
- 'darkcyan' => '0,139,139',
- 'darkgoldenrod' => '184,134,11',
- 'darkgray' => '169,169,169',
- 'darkgreen' => '0,100,0',
- 'darkgrey' => '169,169,169',
- 'darkkhaki' => '189,183,107',
- 'darkmagenta' => '139,0,139',
- 'darkolivegreen' => '85,107,47',
- 'darkorange' => '255,140,0',
- 'darkorchid' => '153,50,204',
- 'darkred' => '139,0,0',
- 'darksalmon' => '233,150,122',
- 'darkseagreen' => '143,188,143',
- 'darkslateblue' => '72,61,139',
- 'darkslategray' => '47,79,79',
- 'darkslategrey' => '47,79,79',
- 'darkturquoise' => '0,206,209',
- 'darkviolet' => '148,0,211',
- 'deeppink' => '255,20,147',
- 'deepskyblue' => '0,191,255',
- 'dimgray' => '105,105,105',
- 'dimgrey' => '105,105,105',
- 'dodgerblue' => '30,144,255',
- 'firebrick' => '178,34,34',
- 'floralwhite' => '255,250,240',
- 'forestgreen' => '34,139,34',
- 'fuchsia' => '255,0,255',
- 'gainsboro' => '220,220,220',
- 'ghostwhite' => '248,248,255',
- 'gold' => '255,215,0',
- 'goldenrod' => '218,165,32',
- 'gray' => '128,128,128',
- 'green' => '0,128,0',
- 'greenyellow' => '173,255,47',
- 'grey' => '128,128,128',
- 'honeydew' => '240,255,240',
- 'hotpink' => '255,105,180',
- 'indianred' => '205,92,92',
- 'indigo' => '75,0,130',
- 'ivory' => '255,255,240',
- 'khaki' => '240,230,140',
- 'lavender' => '230,230,250',
- 'lavenderblush' => '255,240,245',
- 'lawngreen' => '124,252,0',
- 'lemonchiffon' => '255,250,205',
- 'lightblue' => '173,216,230',
- 'lightcoral' => '240,128,128',
- 'lightcyan' => '224,255,255',
- 'lightgoldenrodyellow' => '250,250,210',
- 'lightgray' => '211,211,211',
- 'lightgreen' => '144,238,144',
- 'lightgrey' => '211,211,211',
- 'lightpink' => '255,182,193',
- 'lightsalmon' => '255,160,122',
- 'lightseagreen' => '32,178,170',
- 'lightskyblue' => '135,206,250',
- 'lightslategray' => '119,136,153',
- 'lightslategrey' => '119,136,153',
- 'lightsteelblue' => '176,196,222',
- 'lightyellow' => '255,255,224',
- 'lime' => '0,255,0',
- 'limegreen' => '50,205,50',
- 'linen' => '250,240,230',
- 'magenta' => '255,0,255',
- 'maroon' => '128,0,0',
- 'mediumaquamarine' => '102,205,170',
- 'mediumblue' => '0,0,205',
- 'mediumorchid' => '186,85,211',
- 'mediumpurple' => '147,112,219',
- 'mediumseagreen' => '60,179,113',
- 'mediumslateblue' => '123,104,238',
- 'mediumspringgreen' => '0,250,154',
- 'mediumturquoise' => '72,209,204',
- 'mediumvioletred' => '199,21,133',
- 'midnightblue' => '25,25,112',
- 'mintcream' => '245,255,250',
- 'mistyrose' => '255,228,225',
- 'moccasin' => '255,228,181',
- 'navajowhite' => '255,222,173',
- 'navy' => '0,0,128',
- 'oldlace' => '253,245,230',
- 'olive' => '128,128,0',
- 'olivedrab' => '107,142,35',
- 'orange' => '255,165,0',
- 'orangered' => '255,69,0',
- 'orchid' => '218,112,214',
- 'palegoldenrod' => '238,232,170',
- 'palegreen' => '152,251,152',
- 'paleturquoise' => '175,238,238',
- 'palevioletred' => '219,112,147',
- 'papayawhip' => '255,239,213',
- 'peachpuff' => '255,218,185',
- 'peru' => '205,133,63',
- 'pink' => '255,192,203',
- 'plum' => '221,160,221',
- 'powderblue' => '176,224,230',
- 'purple' => '128,0,128',
- 'red' => '255,0,0',
- 'rosybrown' => '188,143,143',
- 'royalblue' => '65,105,225',
- 'saddlebrown' => '139,69,19',
- 'salmon' => '250,128,114',
- 'sandybrown' => '244,164,96',
- 'seagreen' => '46,139,87',
- 'seashell' => '255,245,238',
- 'sienna' => '160,82,45',
- 'silver' => '192,192,192',
- 'skyblue' => '135,206,235',
- 'slateblue' => '106,90,205',
- 'slategray' => '112,128,144',
- 'slategrey' => '112,128,144',
- 'snow' => '255,250,250',
- 'springgreen' => '0,255,127',
- 'steelblue' => '70,130,180',
- 'tan' => '210,180,140',
- 'teal' => '0,128,128',
- 'thistle' => '216,191,216',
- 'tomato' => '255,99,71',
- 'transparent' => '0,0,0,0',
- 'turquoise' => '64,224,208',
- 'violet' => '238,130,238',
- 'wheat' => '245,222,179',
- 'white' => '255,255,255',
- 'whitesmoke' => '245,245,245',
- 'yellow' => '255,255,0',
- 'yellowgreen' => '154,205,50'
- );
-}
-
-/**
- * SCSS parser
- *
- * @author Leaf Corcoran <leafot@gmail.com>
- */
-class scss_parser {
- static protected $precedence = array(
- "or" => 0,
- "and" => 1,
-
- '==' => 2,
- '!=' => 2,
- '<=' => 2,
- '>=' => 2,
- '=' => 2,
- '<' => 3,
- '>' => 2,
-
- '+' => 3,
- '-' => 3,
- '*' => 4,
- '/' => 4,
- '%' => 4,
- );
-
- static protected $operators = array("+", "-", "*", "/", "%",
- "==", "!=", "<=", ">=", "<", ">", "and", "or");
-
- static protected $operatorStr;
- static protected $whitePattern;
- static protected $commentMulti;
-
- static protected $commentSingle = "//";
- static protected $commentMultiLeft = "/*";
- static protected $commentMultiRight = "*/";
-
- public function __construct($sourceName = null, $rootParser = true) {
- $this->sourceName = $sourceName;
- $this->rootParser = $rootParser;
-
- if (empty(self::$operatorStr)) {
- self::$operatorStr = $this->makeOperatorStr(self::$operators);
-
- $commentSingle = $this->preg_quote(self::$commentSingle);
- $commentMultiLeft = $this->preg_quote(self::$commentMultiLeft);
- $commentMultiRight = $this->preg_quote(self::$commentMultiRight);
- self::$commentMulti = $commentMultiLeft.'.*?'.$commentMultiRight;
- self::$whitePattern = '/'.$commentSingle.'[^\n]*\s*|('.self::$commentMulti.')\s*|\s+/Ais';
- }
- }
-
- static protected function makeOperatorStr($operators) {
- return '('.implode('|', array_map(array('scss_parser','preg_quote'),
- $operators)).')';
- }
-
- public function parse($buffer) {
- $this->count = 0;
- $this->env = null;
- $this->inParens = false;
- $this->pushBlock(null); // root block
- $this->eatWhiteDefault = true;
- $this->insertComments = true;
-
- $this->buffer = $buffer;
-
- $this->whitespace();
- while (false !== $this->parseChunk());
-
- if ($this->count != strlen($this->buffer))
- $this->throwParseError();
-
- if (!empty($this->env->parent)) {
- $this->throwParseError("unclosed block");
- }
-
- $this->env->isRoot = true;
- return $this->env;
- }
-
- /**
- * Parse a single chunk off the head of the buffer and append it to the
- * current parse environment.
- *
- * Returns false when the buffer is empty, or when there is an error.
- *
- * This function is called repeatedly until the entire document is
- * parsed.
- *
- * This parser is most similar to a recursive descent parser. Single
- * functions represent discrete grammatical rules for the language, and
- * they are able to capture the text that represents those rules.
- *
- * Consider the function scssc::keyword(). (All parse functions are
- * structured the same.)
- *
- * The function takes a single reference argument. When calling the
- * function it will attempt to match a keyword on the head of the buffer.
- * If it is successful, it will place the keyword in the referenced
- * argument, advance the position in the buffer, and return true. If it
- * fails then it won't advance the buffer and it will return false.
- *
- * All of these parse functions are powered by scssc::match(), which behaves
- * the same way, but takes a literal regular expression. Sometimes it is
- * more convenient to use match instead of creating a new function.
- *
- * Because of the format of the functions, to parse an entire string of
- * grammatical rules, you can chain them together using &&.
- *
- * But, if some of the rules in the chain succeed before one fails, then
- * the buffer position will be left at an invalid state. In order to
- * avoid this, scssc::seek() is used to remember and set buffer positions.
- *
- * Before parsing a chain, use $s = $this->seek() to remember the current
- * position into $s. Then if a chain fails, use $this->seek($s) to
- * go back where we started.
- *
- * @return boolean
- */
- protected function parseChunk() {
- $s = $this->seek();
-
- // the directives
- if (isset($this->buffer[$this->count]) && $this->buffer[$this->count] == "@") {
- if ($this->literal("@media") && $this->mediaQueryList($mediaQueryList) && $this->literal("{")) {
- $media = $this->pushSpecialBlock("media");
- $media->queryList = $mediaQueryList[2];
- return true;
- } else {
- $this->seek($s);
- }
-
- if ($this->literal("@mixin") &&
- $this->keyword($mixinName) &&
- ($this->argumentDef($args) || true) &&
- $this->literal("{"))
- {
- $mixin = $this->pushSpecialBlock("mixin");
- $mixin->name = $mixinName;
- $mixin->args = $args;
- return true;
- } else {
- $this->seek($s);
- }
-
- if ($this->literal("@include") &&
- $this->keyword($mixinName) &&
- ($this->literal("(") &&
- ($this->argValues($argValues) || true) &&
- $this->literal(")") || true) &&
- ($this->end() ||
- $this->literal("{") && $hasBlock = true))
- {
- $child = array("include",
- $mixinName, isset($argValues) ? $argValues : null, null);
-
- if (!empty($hasBlock)) {
- $include = $this->pushSpecialBlock("include");
- $include->child = $child;
- } else {
- $this->append($child, $s);
- }
-
- return true;
- } else {
- $this->seek($s);
- }
-
- if ($this->literal("@import") &&
- $this->valueList($importPath) &&
- $this->end())
- {
- $this->append(array("import", $importPath), $s);
- return true;
- } else {
- $this->seek($s);
- }
-
- if ($this->literal("@extend") &&
- $this->selectors($selector) &&
- $this->end())
- {
- $this->append(array("extend", $selector), $s);
- return true;
- } else {
- $this->seek($s);
- }
-
- if ($this->literal("@function") &&
- $this->keyword($fnName) &&
- $this->argumentDef($args) &&
- $this->literal("{"))
- {
- $func = $this->pushSpecialBlock("function");
- $func->name = $fnName;
- $func->args = $args;
- return true;
- } else {
- $this->seek($s);
- }
-
- if ($this->literal("@return") && $this->valueList($retVal) && $this->end()) {
- $this->append(array("return", $retVal), $s);
- return true;
- } else {
- $this->seek($s);
- }
-
- if ($this->literal("@each") &&
- $this->variable($varName) &&
- $this->literal("in") &&
- $this->valueList($list) &&
- $this->literal("{"))
- {
- $each = $this->pushSpecialBlock("each");
- $each->var = $varName[1];
- $each->list = $list;
- return true;
- } else {
- $this->seek($s);
- }
-
- if ($this->literal("@while") &&
- $this->expression($cond) &&
- $this->literal("{"))
- {
- $while = $this->pushSpecialBlock("while");
- $while->cond = $cond;
- return true;
- } else {
- $this->seek($s);
- }
-
- if ($this->literal("@for") &&
- $this->variable($varName) &&
- $this->literal("from") &&
- $this->expression($start) &&
- ($this->literal("through") ||
- ($forUntil = true && $this->literal("to"))) &&
- $this->expression($end) &&
- $this->literal("{"))
- {
- $for = $this->pushSpecialBlock("for");
- $for->var = $varName[1];
- $for->start = $start;
- $for->end = $end;
- $for->until = isset($forUntil);
- return true;
- } else {
- $this->seek($s);
- }
-
- if ($this->literal("@if") && $this->valueList($cond) && $this->literal("{")) {
- $if = $this->pushSpecialBlock("if");
- $if->cond = $cond;
- $if->cases = array();
- return true;
- } else {
- $this->seek($s);
- }
-
- if (($this->literal("@debug") || $this->literal("@warn")) &&
- $this->valueList($value) &&
- $this->end()) {
- $this->append(array("debug", $value, $s), $s);
- return true;
- } else {
- $this->seek($s);
- }
-
- if ($this->literal("@content") && $this->end()) {
- $this->append(array("mixin_content"), $s);
- return true;
- } else {
- $this->seek($s);
- }
-
- $last = $this->last();
- if (!is_null($last) && $last[0] == "if") {
- list(, $if) = $last;
- if ($this->literal("@else")) {
- if ($this->literal("{")) {
- $else = $this->pushSpecialBlock("else");
- } elseif ($this->literal("if") && $this->valueList($cond) && $this->literal("{")) {
- $else = $this->pushSpecialBlock("elseif");
- $else->cond = $cond;
- }
-
- if (isset($else)) {
- $else->dontAppend = true;
- $if->cases[] = $else;
- return true;
- }
- }
-
- $this->seek($s);
- }
-
- if ($this->literal("@charset") &&
- $this->valueList($charset) && $this->end())
- {
- $this->append(array("charset", $charset), $s);
- return true;
- } else {
- $this->seek($s);
- }
-
- // doesn't match built in directive, do generic one
- if ($this->literal("@", false) && $this->keyword($dirName) &&
- ($this->openString("{", $dirValue) || true) &&
- $this->literal("{"))
- {
- $directive = $this->pushSpecialBlock("directive");
- $directive->name = $dirName;
- if (isset($dirValue)) $directive->value = $dirValue;
- return true;
- }
-
- $this->seek($s);
- return false;
- }
-
- // property shortcut
- // captures most properties before having to parse a selector
- if ($this->keyword($name, false) &&
- $this->literal(": ") &&
- $this->valueList($value) &&
- $this->end())
- {
- $name = array("string", "", array($name));
- $this->append(array("assign", $name, $value), $s);
- return true;
- } else {
- $this->seek($s);
- }
-
- // variable assigns
- if ($this->variable($name) &&
- $this->literal(":") &&
- $this->valueList($value) && $this->end())
- {
- // check for !default
- $defaultVar = $value[0] == "list" && $this->stripDefault($value);
- $this->append(array("assign", $name, $value, $defaultVar), $s);
- return true;
- } else {
- $this->seek($s);
- }
-
- // misc
- if ($this->literal("-->")) {
- return true;
- }
-
- // opening css block
- $oldComments = $this->insertComments;
- $this->insertComments = false;
- if ($this->selectors($selectors) && $this->literal("{")) {
- $this->pushBlock($selectors);
- $this->insertComments = $oldComments;
- return true;
- } else {
- $this->seek($s);
- }
- $this->insertComments = $oldComments;
-
- // property assign, or nested assign
- if ($this->propertyName($name) && $this->literal(":")) {
- $foundSomething = false;
- if ($this->valueList($value)) {
- $this->append(array("assign", $name, $value), $s);
- $foundSomething = true;
- }
-
- if ($this->literal("{")) {
- $propBlock = $this->pushSpecialBlock("nestedprop");
- $propBlock->prefix = $name;
- $foundSomething = true;
- } elseif ($foundSomething) {
- $foundSomething = $this->end();
- }
-
- if ($foundSomething) {
- return true;
- }
-
- $this->seek($s);
- } else {
- $this->seek($s);
- }
-
- // closing a block
- if ($this->literal("}")) {
- $block = $this->popBlock();
- if (isset($block->type) && $block->type == "include") {
- $include = $block->child;
- unset($block->child);
- $include[3] = $block;
- $this->append($include, $s);
- } elseif (empty($block->dontAppend)) {
- $type = isset($block->type) ? $block->type : "block";
- $this->append(array($type, $block), $s);
- }
- return true;
- }
-
- // extra stuff
- if ($this->literal(";") ||
- $this->literal("<!--"))
- {
- return true;
- }
-
- return false;
- }
-
- protected function stripDefault(&$value) {
- $def = end($value[2]);
- if ($def[0] == "keyword" && $def[1] == "!default") {
- array_pop($value[2]);
- $value = $this->flattenList($value);
- return true;
- }
-
- if ($def[0] == "list") {
- return $this->stripDefault($value[2][count($value[2]) - 1]);
- }
-
- return false;
- }
-
- protected function literal($what, $eatWhitespace = null) {
- if (is_null($eatWhitespace)) $eatWhitespace = $this->eatWhiteDefault;
-
- // shortcut on single letter
- if (!isset($what[1]) && isset($this->buffer[$this->count])) {
- if ($this->buffer[$this->count] == $what) {
- if (!$eatWhitespace) {
- $this->count++;
- return true;
- }
- // goes below...
- } else {
- return false;
- }
- }
-
- return $this->match($this->preg_quote($what), $m, $eatWhitespace);
- }
-
- // tree builders
-
- protected function pushBlock($selectors) {
- $b = new stdClass;
- $b->parent = $this->env; // not sure if we need this yet
-
- $b->selectors = $selectors;
- $b->children = array();
-
- $this->env = $b;
- return $b;
- }
-
- protected function pushSpecialBlock($type) {
- $block = $this->pushBlock(null);
- $block->type = $type;
- return $block;
- }
-
- protected function popBlock() {
- if (empty($this->env->parent)) {
- $this->throwParseError("unexpected }");
- }
-
- $old = $this->env;
- $this->env = $this->env->parent;
- unset($old->parent);
- return $old;
- }
-
- protected function append($statement, $pos=null) {
- if ($pos !== null) {
- $statement[-1] = $pos;
- if (!$this->rootParser) $statement[-2] = $this;
- }
- $this->env->children[] = $statement;
- }
-
- // last child that was appended
- protected function last() {
- $i = count($this->env->children) - 1;
- if (isset($this->env->children[$i]))
- return $this->env->children[$i];
- }
-
- // high level parsers (they return parts of ast)
-
- protected function mediaQueryList(&$out) {
- return $this->genericList($out, "mediaQuery", ",", false);
- }
-
- protected function mediaQuery(&$out) {
- $s = $this->seek();
-
- $expressions = null;
- $parts = array();
-
- if (($this->literal("only") && ($only = true) || $this->literal("not") && ($not = true) || true) && $this->mixedKeyword($mediaType)) {
- $prop = array("mediaType");
- if (isset($only)) $prop[] = array("keyword", "only");
- if (isset($not)) $prop[] = array("keyword", "not");
- $media = array("list", "", array());
- foreach ((array)$mediaType as $type) {
- if (is_array($type)) {
- $media[2][] = $type;
- } else {
- $media[2][] = array("keyword", $type);
- }
- }
- $prop[] = $media;
- $parts[] = $prop;
- }
-
- if (empty($parts) || $this->literal("and")) {
- $this->genericList($expressions, "mediaExpression", "and", false);
- if (is_array($expressions)) $parts = array_merge($parts, $expressions[2]);
- }
-
- $out = $parts;
- return true;
- }
-
- protected function mediaExpression(&$out) {
- $s = $this->seek();
- $value = null;
- if ($this->literal("(") &&
- $this->expression($feature) &&
- ($this->literal(":") && $this->expression($value) || true) &&
- $this->literal(")"))
- {
- $out = array("mediaExp", $feature);
- if ($value) $out[] = $value;
- return true;
- }
-
- $this->seek($s);
- return false;
- }
-
- protected function argValues(&$out) {
- if ($this->genericList($list, "argValue", ",", false)) {
- $out = $list[2];
- return true;
- }
- return false;
- }
-
- protected function argValue(&$out) {
- $s = $this->seek();
-
- $keyword = null;
- if (!$this->variable($keyword) || !$this->literal(":")) {
- $this->seek($s);
- $keyword = null;
- }
-
- if ($this->genericList($value, "expression")) {
- $out = array($keyword, $value, false);
- $s = $this->seek();
- if ($this->literal("...")) {
- $out[2] = true;
- } else {
- $this->seek($s);
- }
- return true;
- }
-
- return false;
- }
-
-
- protected function valueList(&$out) {
- return $this->genericList($out, "spaceList", ",");
- }
-
- protected function spaceList(&$out) {
- return $this->genericList($out, "expression");
- }
-
- protected function genericList(&$out, $parseItem, $delim="", $flatten=true) {
- $s = $this->seek();
- $items = array();
- while ($this->$parseItem($value)) {
- $items[] = $value;
- if ($delim) {
- if (!$this->literal($delim)) break;
- }
- }
-
- if (count($items) == 0) {
- $this->seek($s);
- return false;
- }
-
- if ($flatten && count($items) == 1) {
- $out = $items[0];
- } else {
- $out = array("list", $delim, $items);
- }
-
- return true;
- }
-
- protected function expression(&$out) {
- $s = $this->seek();
-
- if ($this->literal("(")) {
- if ($this->literal(")")) {
- $out = array("list", "", array());
- return true;
- }
-
- if ($this->valueList($out) && $this->literal(')') && $out[0] == "list") {
- return true;
- }
-
- $this->seek($s);
- }
-
- if ($this->value($lhs)) {
- $out = $this->expHelper($lhs, 0);
- return true;
- }
-
- return false;
- }
-
- protected function expHelper($lhs, $minP) {
- $opstr = self::$operatorStr;
-
- $ss = $this->seek();
- $whiteBefore = isset($this->buffer[$this->count - 1]) &&
- ctype_space($this->buffer[$this->count - 1]);
- while ($this->match($opstr, $m) && self::$precedence[$m[1]] >= $minP) {
- $whiteAfter = isset($this->buffer[$this->count - 1]) &&
- ctype_space($this->buffer[$this->count - 1]);
-
- $op = $m[1];
-
- // don't turn negative numbers into expressions
- if ($op == "-" && $whiteBefore) {
- if (!$whiteAfter) break;
- }
-
- if (!$this->value($rhs)) break;
-
- // peek and see if rhs belongs to next operator
- if ($this->peek($opstr, $next) && self::$precedence[$next[1]] > self::$precedence[$op]) {
- $rhs = $this->expHelper($rhs, self::$precedence[$next[1]]);
- }
-
- $lhs = array("exp", $op, $lhs, $rhs, $this->inParens, $whiteBefore, $whiteAfter);
- $ss = $this->seek();
- $whiteBefore = isset($this->buffer[$this->count - 1]) &&
- ctype_space($this->buffer[$this->count - 1]);
- }
-
- $this->seek($ss);
- return $lhs;
- }
-
- protected function value(&$out) {
- $s = $this->seek();
-
- if ($this->literal("not", false) && $this->whitespace() && $this->value($inner)) {
- $out = array("unary", "not", $inner, $this->inParens);
- return true;
- } else {
- $this->seek($s);
- }
-
- if ($this->literal("+") && $this->value($inner)) {
- $out = array("unary", "+", $inner, $this->inParens);
- return true;
- } else {
- $this->seek($s);
- }
-
- // negation
- if ($this->literal("-", false) &&
- ($this->variable($inner) ||
- $this->unit($inner) ||
- $this->parenValue($inner)))
- {
- $out = array("unary", "-", $inner, $this->inParens);
- return true;
- } else {
- $this->seek($s);
- }
-
- if ($this->parenValue($out)) return true;
- if ($this->interpolation($out)) return true;
- if ($this->variable($out)) return true;
- if ($this->color($out)) return true;
- if ($this->unit($out)) return true;
- if ($this->string($out)) return true;
- if ($this->func($out)) return true;
- if ($this->progid($out)) return true;
-
- if ($this->keyword($keyword)) {
- if ($keyword == "null") {
- $out = array("null");
- } else {
- $out = array("keyword", $keyword);
- }
- return true;
- }
-
- return false;
- }
-
- // value wrappen in parentheses
- protected function parenValue(&$out) {
- $s = $this->seek();
-
- $inParens = $this->inParens;
- if ($this->literal("(") &&
- ($this->inParens = true) && $this->expression($exp) &&
- $this->literal(")"))
- {
- $out = $exp;
- $this->inParens = $inParens;
- return true;
- } else {
- $this->inParens = $inParens;
- $this->seek($s);
- }
-
- return false;
- }
-
- protected function progid(&$out) {
- $s = $this->seek();
- if ($this->literal("progid:", false) &&
- $this->openString("(", $fn) &&
- $this->literal("("))
- {
- $this->openString(")", $args, "(");
- if ($this->literal(")")) {
- $out = array("string", "", array(
- "progid:", $fn, "(", $args, ")"
- ));
- return true;
- }
- }
-
- $this->seek($s);
- return false;
- }
-
- protected function func(&$func) {
- $s = $this->seek();
-
- if ($this->keyword($name, false) &&
- $this->literal("("))
- {
- if ($name == "alpha" && $this->argumentList($args)) {
- $func = array("function", $name, array("string", "", $args));
- return true;
- }
-
- if ($name != "expression" && !preg_match("/^(-[a-z]+-)?calc$/", $name)) {
- $ss = $this->seek();
- if ($this->argValues($args) && $this->literal(")")) {
- $func = array("fncall", $name, $args);
- return true;
- }
- $this->seek($ss);
- }
-
- if (($this->openString(")", $str, "(") || true ) &&
- $this->literal(")"))
- {
- $args = array();
- if (!empty($str)) {
- $args[] = array(null, array("string", "", array($str)));
- }
-
- $func = array("fncall", $name, $args);
- return true;
- }
- }
-
- $this->seek($s);
- return false;
- }
-
- protected function argumentList(&$out) {
- $s = $this->seek();
- $this->literal("(");
-
- $args = array();
- while ($this->keyword($var)) {
- $ss = $this->seek();
-
- if ($this->literal("=") && $this->expression($exp)) {
- $args[] = array("string", "", array($var."="));
- $arg = $exp;
- } else {
- break;
- }
-
- $args[] = $arg;
-
- if (!$this->literal(",")) break;
-
- $args[] = array("string", "", array(", "));
- }
-
- if (!$this->literal(")") || !count($args)) {
- $this->seek($s);
- return false;
- }
-
- $out = $args;
- return true;
- }
-
- protected function argumentDef(&$out) {
- $s = $this->seek();
- $this->literal("(");
-
- $args = array();
- while ($this->variable($var)) {
- $arg = array($var[1], null, false);
-
- $ss = $this->seek();
- if ($this->literal(":") && $this->genericList($defaultVal, "expression")) {
- $arg[1] = $defaultVal;
- } else {
- $this->seek($ss);
- }
-
- $ss = $this->seek();
- if ($this->literal("...")) {
- $sss = $this->seek();
- if (!$this->literal(")")) {
- $this->throwParseError("... has to be after the final argument");
- }
- $arg[2] = true;
- $this->seek($sss);
- } else {
- $this->seek($ss);
- }
-
- $args[] = $arg;
- if (!$this->literal(",")) break;
- }
-
- if (!$this->literal(")")) {
- $this->seek($s);
- return false;
- }
-
- $out = $args;
- return true;
- }
-
- protected function color(&$out) {
- $color = array('color');
-
- if ($this->match('(#([0-9a-f]{6})|#([0-9a-f]{3}))', $m)) {
- if (isset($m[3])) {
- $num = $m[3];
- $width = 16;
- } else {
- $num = $m[2];
- $width = 256;
- }
-
- $num = hexdec($num);
- foreach (array(3,2,1) as $i) {
- $t = $num % $width;
- $num /= $width;
-
- $color[$i] = $t * (256/$width) + $t * floor(16/$width);
- }
-
- $out = $color;
- return true;
- }
-
- return false;
- }
-
- protected function unit(&$unit) {
- if ($this->match('([0-9]*(\.)?[0-9]+)([%a-zA-Z]+)?', $m)) {
- $unit = array("number", $m[1], empty($m[3]) ? "" : $m[3]);
- return true;
- }
- return false;
- }
-
- protected function string(&$out) {
- $s = $this->seek();
- if ($this->literal('"', false)) {
- $delim = '"';
- } elseif ($this->literal("'", false)) {
- $delim = "'";
- } else {
- return false;
- }
-
- $content = array();
- $oldWhite = $this->eatWhiteDefault;
- $this->eatWhiteDefault = false;
-
- while ($this->matchString($m, $delim)) {
- $content[] = $m[1];
- if ($m[2] == "#{") {
- $this->count -= strlen($m[2]);
- if ($this->interpolation($inter, false)) {
- $content[] = $inter;
- } else {
- $this->count += strlen($m[2]);
- $content[] = "#{"; // ignore it
- }
- } elseif ($m[2] == '\\') {
- $content[] = $m[2];
- if ($this->literal($delim, false)) {
- $content[] = $delim;
- }
- } else {
- $this->count -= strlen($delim);
- break; // delim
- }
- }
-
- $this->eatWhiteDefault = $oldWhite;
-
- if ($this->literal($delim)) {
- $out = array("string", $delim, $content);
- return true;
- }
-
- $this->seek($s);
- return false;
- }
-
- protected function mixedKeyword(&$out) {
- $s = $this->seek();
-
- $parts = array();
-
- $oldWhite = $this->eatWhiteDefault;
- $this->eatWhiteDefault = false;
-
- while (true) {
- if ($this->keyword($key)) {
- $parts[] = $key;
- continue;
- }
-
- if ($this->interpolation($inter)) {
- $parts[] = $inter;
- continue;
- }
-
- break;
- }
-
- $this->eatWhiteDefault = $oldWhite;
-
- if (count($parts) == 0) return false;
-
- if ($this->eatWhiteDefault) {
- $this->whitespace();
- }
-
- $out = $parts;
- return true;
- }
-
- // an unbounded string stopped by $end
- protected function openString($end, &$out, $nestingOpen=null) {
- $oldWhite = $this->eatWhiteDefault;
- $this->eatWhiteDefault = false;
-
- $stop = array("'", '"', "#{", $end);
- $stop = array_map(array($this, "preg_quote"), $stop);
- $stop[] = self::$commentMulti;
-
- $patt = '(.*?)('.implode("|", $stop).')';
-
- $nestingLevel = 0;
-
- $content = array();
- while ($this->match($patt, $m, false)) {
- if (isset($m[1]) && $m[1] !== '') {
- $content[] = $m[1];
- if ($nestingOpen) {
- $nestingLevel += substr_count($m[1], $nestingOpen);
- }
- }
-
- $tok = $m[2];
-
- $this->count-= strlen($tok);
- if ($tok == $end) {
- if ($nestingLevel == 0) {
- break;
- } else {
- $nestingLevel--;
- }
- }
-
- if (($tok == "'" || $tok == '"') && $this->string($str)) {
- $content[] = $str;
- continue;
- }
-
- if ($tok == "#{" && $this->interpolation($inter)) {
- $content[] = $inter;
- continue;
- }
-
- $content[] = $tok;
- $this->count+= strlen($tok);
- }
-
- $this->eatWhiteDefault = $oldWhite;
-
- if (count($content) == 0) return false;
-
- // trim the end
- if (is_string(end($content))) {
- $content[count($content) - 1] = rtrim(end($content));
- }
-
- $out = array("string", "", $content);
- return true;
- }
-
- // $lookWhite: save information about whitespace before and after
- protected function interpolation(&$out, $lookWhite=true) {
- $oldWhite = $this->eatWhiteDefault;
- $this->eatWhiteDefault = true;
-
- $s = $this->seek();
- if ($this->literal("#{") && $this->valueList($value) && $this->literal("}", false)) {
-
- // TODO: don't error if out of bounds
-
- if ($lookWhite) {
- $left = preg_match('/\s/', $this->buffer[$s - 1]) ? " " : "";
- $right = preg_match('/\s/', $this->buffer[$this->count]) ? " ": "";
- } else {
- $left = $right = false;
- }
-
- $out = array("interpolate", $value, $left, $right);
- $this->eatWhiteDefault = $oldWhite;
- if ($this->eatWhiteDefault) $this->whitespace();
- return true;
- }
-
- $this->seek($s);
- $this->eatWhiteDefault = $oldWhite;
- return false;
- }
-
- // low level parsers
-
- // returns an array of parts or a string
- protected function propertyName(&$out) {
- $s = $this->seek();
- $parts = array();
-
- $oldWhite = $this->eatWhiteDefault;
- $this->eatWhiteDefault = false;
-
- while (true) {
- if ($this->interpolation($inter)) {
- $parts[] = $inter;
- } elseif ($this->keyword($text)) {
- $parts[] = $text;
- } elseif (count($parts) == 0 && $this->match('[:.#]', $m, false)) {
- // css hacks
- $parts[] = $m[0];
- } else {
- break;
- }
- }
-
- $this->eatWhiteDefault = $oldWhite;
- if (count($parts) == 0) return false;
-
- // match comment hack
- if (preg_match(self::$whitePattern,
- $this->buffer, $m, null, $this->count))
- {
- if (!empty($m[0])) {
- $parts[] = $m[0];
- $this->count += strlen($m[0]);
- }
- }
-
- $this->whitespace(); // get any extra whitespace
-
- $out = array("string", "", $parts);
- return true;
- }
-
- // comma separated list of selectors
- protected function selectors(&$out) {
- $s = $this->seek();
- $selectors = array();
- while ($this->selector($sel)) {
- $selectors[] = $sel;
- if (!$this->literal(",")) break;
- while ($this->literal(",")); // ignore extra
- }
-
- if (count($selectors) == 0) {
- $this->seek($s);
- return false;
- }
-
- $out = $selectors;
- return true;
- }
-
- // whitespace separated list of selectorSingle
- protected function selector(&$out) {
- $selector = array();
-
- while (true) {
- if ($this->match('[>+~]+', $m)) {
- $selector[] = array($m[0]);
- } elseif ($this->selectorSingle($part)) {
- $selector[] = $part;
- $this->whitespace();
- } elseif ($this->match('\/[^\/]+\/', $m)) {
- $selector[] = array($m[0]);
- } else {
- break;
- }
-
- }
-
- if (count($selector) == 0) {
- return false;
- }
-
- $out = $selector;
- return true;
- }
-
- // the parts that make up
- // div[yes=no]#something.hello.world:nth-child(-2n+1)%placeholder
- protected function selectorSingle(&$out) {
- $oldWhite = $this->eatWhiteDefault;
- $this->eatWhiteDefault = false;
-
- $parts = array();
-
- if ($this->literal("*", false)) {
- $parts[] = "*";
- }
-
- while (true) {
- // see if we can stop early
- if ($this->match("\s*[{,]", $m)) {
- $this->count--;
- break;
- }
-
- $s = $this->seek();
- // self
- if ($this->literal("&", false)) {
- $parts[] = scssc::$selfSelector;
- continue;
- }
-
- if ($this->literal(".", false)) {
- $parts[] = ".";
- continue;
- }
-
- if ($this->literal("|", false)) {
- $parts[] = "|";
- continue;
- }
-
- // for keyframes
- if ($this->unit($unit)) {
- $parts[] = $unit;
- continue;
- }
-
- if ($this->keyword($name)) {
- $parts[] = $name;
- continue;
- }
-
- if ($this->interpolation($inter)) {
- $parts[] = $inter;
- continue;
- }
-
- if ($this->literal('%', false) && $this->placeholder($placeholder)) {
- $parts[] = '%';
- $parts[] = $placeholder;
- continue;
- }
-
- if ($this->literal("#", false)) {
- $parts[] = "#";
- continue;
- }
-
- // a pseudo selector
- if ($this->match("::?", $m) && $this->mixedKeyword($nameParts)) {
- $parts[] = $m[0];
- foreach ($nameParts as $sub) {
- $parts[] = $sub;
- }
-
- $ss = $this->seek();
- if ($this->literal("(") &&
- ($this->openString(")", $str, "(") || true ) &&
- $this->literal(")"))
- {
- $parts[] = "(";
- if (!empty($str)) $parts[] = $str;
- $parts[] = ")";
- } else {
- $this->seek($ss);
- }
-
- continue;
- } else {
- $this->seek($s);
- }
-
- // attribute selector
- // TODO: replace with open string?
- if ($this->literal("[", false)) {
- $attrParts = array("[");
- // keyword, string, operator
- while (true) {
- if ($this->literal("]", false)) {
- $this->count--;
- break; // get out early
- }
-
- if ($this->match('\s+', $m)) {
- $attrParts[] = " ";
- continue;
- }
- if ($this->string($str)) {
- $attrParts[] = $str;
- continue;
- }
-
- if ($this->keyword($word)) {
- $attrParts[] = $word;
- continue;
- }
-
- if ($this->interpolation($inter, false)) {
- $attrParts[] = $inter;
- continue;
- }
-
- // operator, handles attr namespace too
- if ($this->match('[|-~\$\*\^=]+', $m)) {
- $attrParts[] = $m[0];
- continue;
- }
-
- break;
- }
-
- if ($this->literal("]", false)) {
- $attrParts[] = "]";
- foreach ($attrParts as $part) {
- $parts[] = $part;
- }
- continue;
- }
- $this->seek($s);
- // should just break here?
- }
-
- break;
- }
-
- $this->eatWhiteDefault = $oldWhite;
-
- if (count($parts) == 0) return false;
-
- $out = $parts;
- return true;
- }
-
- protected function variable(&$out) {
- $s = $this->seek();
- if ($this->literal("$", false) && $this->keyword($name)) {
- $out = array("var", $name);
- return true;
- }
- $this->seek($s);
- return false;
- }
-
- protected function keyword(&$word, $eatWhitespace = null) {
- if ($this->match('([\w_\-\*!"\'\\\\][\w\-_"\'\\\\]*)',
- $m, $eatWhitespace))
- {
- $word = $m[1];
- return true;
- }
- return false;
- }
-
- protected function placeholder(&$placeholder) {
- if ($this->match('([\w\-_]+)', $m)) {
- $placeholder = $m[1];
- return true;
- }
- return false;
- }
-
- // consume an end of statement delimiter
- protected function end() {
- if ($this->literal(';')) {
- return true;
- } elseif ($this->count == strlen($this->buffer) || $this->buffer[$this->count] == '}') {
- // if there is end of file or a closing block next then we don't need a ;
- return true;
- }
- return false;
- }
-
- // advance counter to next occurrence of $what
- // $until - don't include $what in advance
- // $allowNewline, if string, will be used as valid char set
- protected function to($what, &$out, $until = false, $allowNewline = false) {
- if (is_string($allowNewline)) {
- $validChars = $allowNewline;
- } else {
- $validChars = $allowNewline ? "." : "[^\n]";
- }
- if (!$this->match('('.$validChars.'*?)'.$this->preg_quote($what), $m, !$until)) return false;
- if ($until) $this->count -= strlen($what); // give back $what
- $out = $m[1];
- return true;
- }
-
- public function throwParseError($msg = "parse error", $count = null) {
- $count = is_null($count) ? $this->count : $count;
-
- $line = $this->getLineNo($count);
-
- if (!empty($this->sourceName)) {
- $loc = "$this->sourceName on line $line";
- } else {
- $loc = "line: $line";
- }
-
- if ($this->peek("(.*?)(\n|$)", $m, $count)) {
- throw new Exception("$msg: failed at `$m[1]` $loc");
- } else {
- throw new Exception("$msg: $loc");
- }
- }
-
- public function getLineNo($pos) {
- return 1 + substr_count(substr($this->buffer, 0, $pos), "\n");
- }
-
- /**
- * Match string looking for either ending delim, escape, or string interpolation
- *
- * {@internal This is a workaround for preg_match's 250K string match limit. }}
- *
- * @param array $m Matches (passed by reference)
- * @param string $delim Delimeter
- *
- * @return boolean True if match; false otherwise
- */
- protected function matchString(&$m, $delim) {
- $token = null;
-
- $end = strpos($this->buffer, "\n", $this->count);
- if ($end === false) {
- $end = strlen($this->buffer);
- }
-
- // look for either ending delim, escape, or string interpolation
- foreach (array('#{', '\\', $delim) as $lookahead) {
- $pos = strpos($this->buffer, $lookahead, $this->count);
- if ($pos !== false && $pos < $end) {
- $end = $pos;
- $token = $lookahead;
- }
- }
-
- if (!isset($token)) {
- return false;
- }
-
- $match = substr($this->buffer, $this->count, $end - $this->count);
- $m = array(
- $match . $token,
- $match,
- $token
- );
- $this->count = $end + strlen($token);
-
- return true;
- }
-
- // try to match something on head of buffer
- protected function match($regex, &$out, $eatWhitespace = null) {
- if (is_null($eatWhitespace)) $eatWhitespace = $this->eatWhiteDefault;
-
- $r = '/'.$regex.'/Ais';
- if (preg_match($r, $this->buffer, $out, null, $this->count)) {
- $this->count += strlen($out[0]);
- if ($eatWhitespace) $this->whitespace();
- return true;
- }
- return false;
- }
-
- // match some whitespace
- protected function whitespace() {
- $gotWhite = false;
- while (preg_match(self::$whitePattern, $this->buffer, $m, null, $this->count)) {
- if ($this->insertComments) {
- if (isset($m[1]) && empty($this->commentsSeen[$this->count])) {
- $this->append(array("comment", $m[1]));
- $this->commentsSeen[$this->count] = true;
- }
- }
- $this->count += strlen($m[0]);
- $gotWhite = true;
- }
- return $gotWhite;
- }
-
- protected function peek($regex, &$out, $from=null) {
- if (is_null($from)) $from = $this->count;
-
- $r = '/'.$regex.'/Ais';
- $result = preg_match($r, $this->buffer, $out, null, $from);
-
- return $result;
- }
-
- protected function seek($where = null) {
- if ($where === null) return $this->count;
- else $this->count = $where;
- return true;
- }
-
- static function preg_quote($what) {
- return preg_quote($what, '/');
- }
-
- protected function show() {
- if ($this->peek("(.*?)(\n|$)", $m, $this->count)) {
- return $m[1];
- }
- return "";
- }
-
- // turn list of length 1 into value type
- protected function flattenList($value) {
- if ($value[0] == "list" && count($value[2]) == 1) {
- return $this->flattenList($value[2][0]);
- }
- return $value;
- }
-}
-
-/**
- * SCSS base formatter
- *
- * @author Leaf Corcoran <leafot@gmail.com>
- */
-class scss_formatter {
- public $indentChar = " ";
-
- public $break = "\n";
- public $open = " {";
- public $close = "}";
- public $tagSeparator = ", ";
- public $assignSeparator = ": ";
-
- public function __construct() {
- $this->indentLevel = 0;
- }
-
- public function indentStr($n = 0) {
- return str_repeat($this->indentChar, max($this->indentLevel + $n, 0));
- }
-
- public function property($name, $value) {
- return $name . $this->assignSeparator . $value . ";";
- }
-
- protected function block($block) {
- if (empty($block->lines) && empty($block->children)) return;
-
- $inner = $pre = $this->indentStr();
-
- if (!empty($block->selectors)) {
- echo $pre .
- implode($this->tagSeparator, $block->selectors) .
- $this->open . $this->break;
- $this->indentLevel++;
- $inner = $this->indentStr();
- }
-
- if (!empty($block->lines)) {
- $glue = $this->break.$inner;
- echo $inner . implode($glue, $block->lines);
- if (!empty($block->children)) {
- echo $this->break;
- }
- }
-
- foreach ($block->children as $child) {
- $this->block($child);
- }
-
- if (!empty($block->selectors)) {
- $this->indentLevel--;
- if (empty($block->children)) echo $this->break;
- echo $pre . $this->close . $this->break;
- }
- }
-
- public function format($block) {
- ob_start();
- $this->block($block);
- $out = ob_get_clean();
-
- return $out;
- }
-}
-
-/**
- * SCSS nested formatter
- *
- * @author Leaf Corcoran <leafot@gmail.com>
- */
-class scss_formatter_nested extends scss_formatter {
- public $close = " }";
-
- // adjust the depths of all children, depth first
- public function adjustAllChildren($block) {
- // flatten empty nested blocks
- $children = array();
- foreach ($block->children as $i => $child) {
- if (empty($child->lines) && empty($child->children)) {
- if (isset($block->children[$i + 1])) {
- $block->children[$i + 1]->depth = $child->depth;
- }
- continue;
- }
- $children[] = $child;
- }
-
- $count = count($children);
- for ($i = 0; $i < $count; $i++) {
- $depth = $children[$i]->depth;
- $j = $i + 1;
- if (isset($children[$j]) && $depth < $children[$j]->depth) {
- $childDepth = $children[$j]->depth;
- for (; $j < $count; $j++) {
- if ($depth < $children[$j]->depth && $childDepth >= $children[$j]->depth) {
- $children[$j]->depth = $depth + 1;
- }
- }
- }
- }
-
- $block->children = $children;
-
- // make relative to parent
- foreach ($block->children as $child) {
- $this->adjustAllChildren($child);
- $child->depth = $child->depth - $block->depth;
- }
- }
-
- protected function block($block) {
- if ($block->type == "root") {
- $this->adjustAllChildren($block);
- }
-
- $inner = $pre = $this->indentStr($block->depth - 1);
- if (!empty($block->selectors)) {
- echo $pre .
- implode($this->tagSeparator, $block->selectors) .
- $this->open . $this->break;
- $this->indentLevel++;
- $inner = $this->indentStr($block->depth - 1);
- }
-
- if (!empty($block->lines)) {
- $glue = $this->break.$inner;
- echo $inner . implode($glue, $block->lines);
- if (!empty($block->children)) echo $this->break;
- }
-
- foreach ($block->children as $i => $child) {
- // echo "*** block: ".$block->depth." child: ".$child->depth."\n";
- $this->block($child);
- if ($i < count($block->children) - 1) {
- echo $this->break;
-
- if (isset($block->children[$i + 1])) {
- $next = $block->children[$i + 1];
- if ($next->depth == max($block->depth, 1) && $child->depth >= $next->depth) {
- echo $this->break;
- }
- }
- }
- }
-
- if (!empty($block->selectors)) {
- $this->indentLevel--;
- echo $this->close;
- }
-
- if ($block->type == "root") {
- echo $this->break;
- }
- }
-}
-
-/**
- * SCSS compressed formatter
- *
- * @author Leaf Corcoran <leafot@gmail.com>
- */
-class scss_formatter_compressed extends scss_formatter {
- public $open = "{";
- public $tagSeparator = ",";
- public $assignSeparator = ":";
- public $break = "";
-
- public function indentStr($n = 0) {
- return "";
- }
-}
-
-/**
- * SCSS server
- *
- * @author Leaf Corcoran <leafot@gmail.com>
- */
-class scss_server {
- /**
- * Join path components
- *
- * @param string $left Path component, left of the directory separator
- * @param string $right Path component, right of the directory separator
- *
- * @return string
- */
- protected function join($left, $right) {
- return rtrim($left, '/\\') . DIRECTORY_SEPARATOR . ltrim($right, '/\\');
- }
-
- /**
- * Get name of requested .scss file
- *
- * @return string|null
- */
- protected function inputName() {
- switch (true) {
- case isset($_GET['p']):
- return $_GET['p'];
- case isset($_SERVER['PATH_INFO']):
- return $_SERVER['PATH_INFO'];
- case isset($_SERVER['DOCUMENT_URI']):
- return substr($_SERVER['DOCUMENT_URI'], strlen($_SERVER['SCRIPT_NAME']));
- }
- }
-
- /**
- * Get path to requested .scss file
- *
- * @return string
- */
- protected function findInput() {
- if (($input = $this->inputName())
- && strpos($input, '..') === false
- && substr($input, -5) === '.scss'
- ) {
- $name = $this->join($this->dir, $input);
-
- if (is_file($name) && is_readable($name)) {
- return $name;
- }
- }
-
- return false;
- }
-
- /**
- * Get path to cached .css file
- *
- * @return string
- */
- protected function cacheName($fname) {
- return $this->join($this->cacheDir, md5($fname) . '.css');
- }
-
- /**
- * Get path to cached imports
- *
- * @return string
- */
- protected function importsCacheName($out) {
- return $out . '.imports';
- }
-
- /**
- * Determine whether .scss file needs to be re-compiled.
- *
- * @param string $in Input path
- * @param string $out Output path
- *
- * @return boolean True if compile required.
- */
- protected function needsCompile($in, $out) {
- if (!is_file($out)) return true;
-
- $mtime = filemtime($out);
- if (filemtime($in) > $mtime) return true;
-
- // look for modified imports
- $icache = $this->importsCacheName($out);
- if (is_readable($icache)) {
- $imports = unserialize(file_get_contents($icache));
- foreach ($imports as $import) {
- if (filemtime($import) > $mtime) return true;
- }
- }
- return false;
- }
-
- /**
- * Compile .scss file
- *
- * @param string $in Input path (.scss)
- * @param string $out Output path (.css)
- *
- * @return string
- */
- protected function compile($in, $out) {
- $start = microtime(true);
- $css = $this->scss->compile(file_get_contents($in), $in);
- $elapsed = round((microtime(true) - $start), 4);
-
- $v = scssc::$VERSION;
- $t = date('r');
- $css = "/* compiled by scssphp $v on $t (${elapsed}s) */\n\n" . $css;
-
- file_put_contents($out, $css);
- file_put_contents($this->importsCacheName($out),
- serialize($this->scss->getParsedFiles()));
- return $css;
- }
-
- /**
- * Compile requested scss and serve css. Outputs HTTP response.
- *
- * @param string $salt Prefix a string to the filename for creating the cache name hash
- */
- public function serve($salt = '') {
- if ($input = $this->findInput()) {
- $output = $this->cacheName($salt . $input);
- header('Content-type: text/css');
-
- if ($this->needsCompile($input, $output)) {
- try {
- echo $this->compile($input, $output);
- } catch (Exception $e) {
- header('HTTP/1.1 500 Internal Server Error');
- echo 'Parse error: ' . $e->getMessage() . "\n";
- }
- } else {
- header('X-SCSS-Cache: true');
- echo file_get_contents($output);
- }
-
- return;
- }
-
- header('HTTP/1.0 404 Not Found');
- header('Content-type: text');
- $v = scssc::$VERSION;
- echo "/* INPUT NOT FOUND scss $v */\n";
- }
-
- /**
- * Constructor
- *
- * @param string $dir Root directory to .scss files
- * @param string $cacheDir Cache directory
- * @param \scssc|null $scss SCSS compiler instance
- */
- public function __construct($dir, $cacheDir=null, $scss=null) {
- $this->dir = $dir;
-
- if (is_null($cacheDir)) {
- $cacheDir = $this->join($dir, 'scss_cache');
- }
-
- $this->cacheDir = $cacheDir;
- if (!is_dir($this->cacheDir)) mkdir($this->cacheDir, 0755, true);
-
- if (is_null($scss)) {
- $scss = new scssc();
- $scss->setImportPaths($this->dir);
- }
- $this->scss = $scss;
- }
-
- /**
- * Helper method to serve compiled scss
- *
- * @param string $path Root path
- */
- static public function serveFrom($path) {
- $server = new self($path);
- $server->serve();
- }
-}
diff --git a/plugins/jetpack/modules/custom-css/migrate-to-core.php b/plugins/jetpack/modules/custom-css/migrate-to-core.php
deleted file mode 100644
index 26108941..00000000
--- a/plugins/jetpack/modules/custom-css/migrate-to-core.php
+++ /dev/null
@@ -1,243 +0,0 @@
-<?php
-/**
- * Migration from Jetpack Custom CSS to WordPress' Core CSS.
- *
- * @since 4.4.2
- *
- * @package Jetpack
- */
-
-/**
- * Class Jetpack_Custom_CSS_Data_Migration
- */
-class Jetpack_Custom_CSS_Data_Migration {
- /**
- * Set up assorted actions and filters used by this class.
- */
- public static function add_hooks() {
- add_action( 'init', array( __CLASS__, 'register_legacy_post_type' ) );
- add_action( 'admin_init', array( __CLASS__, 'do_migration' ) );
-
- include_once( dirname( __FILE__ ) . '/custom-css.php' );
- if ( ! is_admin() ) {
- add_action( 'init', array( 'Jetpack_Custom_CSS', 'init' ) );
- }
- }
-
- /**
- * Do the bulk of the migration.
- *
- * @return int|null
- */
- public static function do_migration() {
- Jetpack_Options::update_option( 'custom_css_4.7_migration', true );
- Jetpack::log( 'custom_css_4.7_migration', 'start' );
-
- if ( ! post_type_exists( 'safecss' ) ) {
- self::register_legacy_post_type();
- }
-
- /** This filter is documented in modules/custom-css/custom-css.php */
- $preprocessors = apply_filters( 'jetpack_custom_css_preprocessors', array() );
- $core_css_post = wp_get_custom_css_post();
- $jetpack_css_post = self::get_post();
-
- if ( ! $jetpack_css_post ) {
- return;
- }
-
- $revisions = self::get_all_revisions();
-
- // Migrate the settings from revision meta to theme mod.
- $options = self::get_options( $jetpack_css_post->ID );
- set_theme_mod( 'jetpack_custom_css', $options );
-
- if ( empty( $revisions ) || ! is_array( $revisions ) ) {
- if ( $jetpack_css_post instanceof WP_Post ) {
- // Feed in the raw, if the current setting is Sass/LESS, it'll filter it inside.
- kses_remove_filters();
- wp_update_custom_css_post( $jetpack_css_post->post_content );
- kses_init();
- return 1;
- }
- return null;
- }
-
- $revisions = array_reverse( $revisions );
- $themes = Jetpack_Custom_CSS_Enhancements::get_themes();
- $migrated = array();
-
- foreach ( $revisions as $post_id => $post ) {
- // Jetpack had stored the theme Name, not the stylesheet directory, for ... reasons.
- // Get the stylesheet. If null, the theme is no longer available. Skip.
- $stylesheet = isset( $themes[ $post->post_excerpt ] ) ? $themes[ $post->post_excerpt ] : null;
- if ( empty( $stylesheet ) ) {
- continue;
- }
-
- $migrated[] = $post->ID;
- $preprocessor = get_post_meta( $post->ID, 'custom_css_preprocessor', true );
- $css = $post->post_content;
- $pre = '';
-
- // Do a revision by revision parsing.
- if ( $preprocessor && isset( $preprocessors[ $preprocessor ] ) ) {
- $pre = $css;
- $css = call_user_func( $preprocessors[ $preprocessor ]['callback'], $pre );
- }
-
- kses_remove_filters();
- wp_update_custom_css_post( $css, array(
- 'stylesheet' => $stylesheet,
- 'preprocessed' => $pre,
- ) );
- kses_init();
- }
-
- // If we've migrated some CSS for the current theme and there was already something there in the Core dataset ...
- if ( $core_css_post && $jetpack_css_post ) {
- $preprocessor = $options['preprocessor'];
-
- $css = $core_css_post->post_content;
- $pre = $core_css_post->post_content_filtered;
- if ( $preprocessor ) {
- if ( $pre ) {
- $pre .= "\r\n\r\n/*\r\n\t" . esc_js( __( 'CSS Migrated from Jetpack:', 'jetpack' ) ) . "\r\n*/\r\n\r\n";
- }
- $pre .= $jetpack_css_post->post_content;
-
- $css .= "\r\n\r\n/*\r\n\t" . esc_js( __( 'CSS Migrated from Jetpack:', 'jetpack' ) ) . "\r\n*/\r\n\r\n";
- $css .= call_user_func( $preprocessors[ $preprocessor ]['callback'], $jetpack_css_post->post_content );
- } else {
- $css .= "\r\n\r\n/*\r\n\t" . esc_js( __( 'CSS Migrated from Jetpack:', 'jetpack' ) ) . "\r\n*/\r\n\r\n";
- $css .= $jetpack_css_post->post_content;
- }
-
- wp_update_custom_css_post( $css, array(
- 'preprocessed' => $pre,
- ) );
- }
-
- Jetpack::log( 'custom_css_4.7_migration', count( $migrated ) . 'revisions migrated' );
- return count( $migrated );
- }
-
- /**
- * Re-register the legacy CPT so we can play with the content already in the database.
- */
- public static function register_legacy_post_type() {
- if ( post_type_exists( 'safecss' ) ) {
- return;
- }
- // Register safecss as a custom post_type
- // Explicit capability definitions are largely unnecessary because the posts are manipulated in code via an options page, managing CSS revisions does check the capabilities, so let's ensure that the proper caps are checked.
- register_post_type( 'safecss', array(
- 'label' => 'Custom CSS',
- 'supports' => array( 'revisions' ),
- 'can_export' => false,
- 'rewrite' => false,
- 'capabilities' => array(
- 'edit_post' => 'edit_theme_options',
- 'read_post' => 'read',
- 'delete_post' => 'edit_theme_options',
- 'edit_posts' => 'edit_theme_options',
- 'edit_others_posts' => 'edit_theme_options',
- 'publish_posts' => 'edit_theme_options',
- 'read_private_posts' => 'read',
- ),
- ) );
- }
-
- /**
- * Get the post used for legacy storage.
- *
- * Jetpack used to use a single post for all themes, just blanking it on theme switch. This gets that post.
- *
- * @return array|bool|null|WP_Post
- */
- public static function get_post() {
- /** This filter is documented in modules/custom-css/custom-css.php */
- $custom_css_post_id = apply_filters( 'jetpack_custom_css_pre_post_id', null );
- if ( ! is_null( $custom_css_post_id ) ) {
- return get_post( $custom_css_post_id );
- }
-
- $custom_css_post_id = wp_cache_get( 'custom_css_post_id' );
-
- if ( false === $custom_css_post_id ) {
- $custom_css_posts = get_posts( array(
- 'posts_per_page' => 1,
- 'post_type' => 'safecss',
- 'post_status' => 'publish',
- 'orderby' => 'date',
- 'order' => 'DESC',
- ) );
-
- $custom_css_post_id = 0;
- if ( count( $custom_css_posts ) > 0 ) {
- $custom_css_post_id = $custom_css_posts[0]->ID;
- }
-
- // Save post_id=0 to note that no safecss post exists.
- wp_cache_set( 'custom_css_post_id', $custom_css_post_id );
- }
-
- if ( ! $custom_css_post_id ) {
- return false;
- }
-
- return get_post( $custom_css_post_id );
- }
-
- /**
- * Get all revisions of the Jetpack CSS CPT entry.
- *
- * @return array
- */
- public static function get_all_revisions() {
- $post = self::get_post();
-
- if ( ! $post ) {
- return array();
- }
-
- $revisions = wp_get_post_revisions( $post->ID, array(
- 'posts_per_page' => -1,
- 'orderby' => 'date',
- 'order' => 'DESC',
- ) );
-
- return $revisions;
- }
-
- /**
- * Get the options stored for a given revision ID.
- *
- * Jetpack used to version the settings by storing them as meta on the revision.
- *
- * @param integer $post_id Post ID.
- *
- * @return array
- */
- public static function get_options( $post_id = null ) {
- if ( empty( $post_id ) ) {
- $post = self::get_post();
- $post_id = $post->ID;
- }
-
- $meta = get_post_meta( $post_id );
-
- $replace = false;
- if ( isset( $meta['custom_css_add'][0] ) && 'no' === $meta['custom_css_add'][0] ) {
- $replace = true;
- }
-
- return array(
- 'preprocessor' => isset( $meta['custom_css_preprocessor'][0] ) ? $meta['custom_css_preprocessor'][0] : '',
- 'replace' => $replace,
- 'content_width' => isset( $meta['content_width'][0] ) ? $meta['content_width'][0] : '',
- );
- }
-}
-
-Jetpack_Custom_CSS_Data_Migration::add_hooks();
diff --git a/plugins/jetpack/modules/custom-post-types/comics.php b/plugins/jetpack/modules/custom-post-types/comics.php
deleted file mode 100644
index 381e9b15..00000000
--- a/plugins/jetpack/modules/custom-post-types/comics.php
+++ /dev/null
@@ -1,533 +0,0 @@
-<?php
-
-class Jetpack_Comic {
- const POST_TYPE = 'jetpack-comic';
-
- static function init() {
- static $instance = false;
-
- if ( ! $instance )
- $instance = new Jetpack_Comic;
-
- return $instance;
- }
-
- /**
- * Conditionally hook into WordPress.
- *
- * Themes must declare that they support this module by adding
- * add_theme_support( 'jetpack-comic' ); during after_setup_theme.
- *
- * If no theme support is found there is no need to hook into
- * WordPress. We'll just return early instead.
- */
- function __construct() {
- // Make sure the post types are loaded for imports
- add_action( 'import_start', array( $this, 'register_post_types' ) );
-
- // Add to REST API post type whitelist
- add_filter( 'rest_api_allowed_post_types', array( $this, 'allow_rest_api_type' ) );
-
- // If called via REST API, we need to register later in lifecycle
- add_action( 'restapi_theme_init', array( $this, 'maybe_register_post_types' ) );
-
- // Return early if theme does not support Jetpack Comic.
- if ( ! ( $this->site_supports_comics() ) )
- return;
-
- $this->register_post_types();
-
- add_action( 'pre_get_posts', array( $this, 'add_posts_to_loop' ) );
-
- // In order for the Feedbag job to find Comic posts, we need to circumvent any pretty
- // URLs in the RSS feed given to Feedbag in favor of /?p=123&post_type=jetpack-comic
- add_filter( 'the_permalink_rss', array( $this, 'custom_permalink_for_feedbag' ) );
-
- // There are some cases (like when Feedbag is fetching posts) that the comics
- // post type needs to be registered no matter what, but none of the UI needs to be
- // available.
-
- add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) );
-
- if ( function_exists( 'queue_publish_post' ) ) {
- add_action( 'publish_jetpack-comic', 'queue_publish_post', 10, 2 );
- }
-
- add_action( 'pre_get_posts', array( $this, 'include_in_feeds' ) );
-
- add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
-
- add_filter( 'manage_' . self::POST_TYPE . '_posts_columns', array( $this, 'manage_posts_columns' ) );
- add_action( 'manage_' . self::POST_TYPE . '_posts_custom_column', array( $this, 'manage_posts_custom_column' ), 10, 2 );
- add_image_size( 'jetpack-comic-thumb', 150, 0, false );
-
- // Enable front-end uploading for users special enough.
- if ( current_user_can( 'upload_files' ) && current_user_can( 'edit_posts' ) ) {
- add_action( 'wp_ajax_jetpack_comic_upload', array( $this, 'upload' ) );
- add_action( 'wp_enqueue_scripts', array( $this, 'register_scripts' ) );
- }
-
- /**
- * Add a "Convert to Comic" and "Convert to Post" option to the bulk
- * edit dropdowns.
- */
- add_action( 'admin_footer-edit.php', array( $this, 'admin_footer' ) );
- add_action( 'load-edit.php', array( $this, 'bulk_edit' ) );
- add_action( 'admin_notices', array( $this, 'bulk_edit_notices' ) );
-
- }
-
- public function admin_footer() {
- $post_type = get_post_type();
-
- ?>
- <script type="text/javascript">
- jQuery( document ).ready( function( $ ) {
- <?php if ( ! $post_type || 'post' == $post_type ) { ?>
- $( '<option>' )
- .val( 'post2comic' )
- .text( <?php echo json_encode( __( 'Convert to Comic', 'jetpack' ) ); ?> )
- .appendTo( "select[name='action'], select[name='action2']" );
- <?php } ?>
- <?php if ( ! $post_type || self::POST_TYPE == $post_type ) { ?>
- $( '<option>' )
- .val( 'comic2post' )
- .text( <?php echo json_encode( __( 'Convert to Post', 'jetpack' ) ); ?> )
- .appendTo( "select[name='action'], select[name='action2']" );
- <?php } ?>
-
- $( '#message.jetpack-comic-post-type-conversion' ).remove().insertAfter( $( '.wrap h2:first' ) ).show();
- });
- </script>
- <?php
- }
-
- /**
- * Handle the "Convert to [Post|Comic]" bulk action.
- */
- public function bulk_edit() {
- if ( empty( $_REQUEST['post'] ) )
- return;
-
- $wp_list_table = _get_list_table( 'WP_Posts_List_Table' );
- $action = $wp_list_table->current_action();
-
- check_admin_referer( 'bulk-posts' );
-
- if ( 'post2comic' == $action || 'comic2post' == $action ) {
- if ( ! current_user_can( 'publish_posts' ) )
- wp_die( __( 'You are not allowed to make this change.', 'jetpack' ) );
-
- $post_ids = array_map( 'intval', $_REQUEST['post'] );
-
- $modified_count = 0;
-
- foreach ( $post_ids as $post_id ) {
- $destination_post_type = ( $action == 'post2comic' ) ? self::POST_TYPE : 'post';
- $origin_post_type = ( $destination_post_type == 'post' ) ? self::POST_TYPE : 'post';
-
- if ( current_user_can( 'edit_post', $post_id ) ) {
- $post = get_post( $post_id );
-
- // Only convert posts that are post => comic or comic => post.
- // (e.g., Ignore comic => comic, page => post, etc. )
- if ( $post->post_type != $destination_post_type && $post->post_type == $origin_post_type ) {
- $post_type_object = get_post_type_object( $destination_post_type );
-
- if ( current_user_can( $post_type_object->cap->publish_posts ) ) {
- set_post_type( $post_id, $destination_post_type );
- $modified_count++;
- }
- }
- }
- }
-
- $sendback = remove_query_arg( array( 'exported', 'untrashed', 'deleted', 'ids' ), wp_get_referer() );
-
- if ( ! $sendback )
- $sendback = add_query_arg( array( 'post_type', get_post_type() ), admin_url( 'edit.php' ) );
-
- $pagenum = $wp_list_table->get_pagenum();
- $sendback = add_query_arg( array( 'paged' => $pagenum, 'post_type_changed' => $modified_count ), $sendback );
-
- wp_safe_redirect( $sendback );
- exit();
- }
- }
-
- /**
- * Show the post conversion success notice.
- */
- public function bulk_edit_notices() {
- global $pagenow;
-
- if ( 'edit.php' == $pagenow && ! empty( $_GET['post_type_changed'] ) ) {
- ?><div id="message" class="updated below-h2 jetpack-comic-post-type-conversion" style="display: none;"><p><?php
- printf( _n( 'Post converted.', '%s posts converted', $_GET['post_type_changed'], 'jetpack' ), number_format_i18n( $_GET['post_type_changed'] ) );
- ?></p></div><?php
- }
- }
-
- public function register_scripts() {
- wp_enqueue_style( 'jetpack-comics-style', plugins_url( 'comics/comics.css', __FILE__ ) );
- wp_style_add_data( 'jetpack-comics-style', 'rtl', 'replace' );
-
- wp_enqueue_script(
- 'jetpack-comics',
- Jetpack::get_file_url_for_environment(
- '_inc/build/custom-post-types/comics/comics.min.js',
- 'modules/custom-post-types/comics/comics.js'
- ),
- array( 'jquery', 'jquery.spin' )
- );
-
- $options = array(
- 'nonce' => wp_create_nonce( 'jetpack_comic_upload_nonce' ),
- 'writeURL' => admin_url( 'admin-ajax.php?action=jetpack_comic_upload' ),
- 'labels' => array(
- 'dragging' => __( 'Drop images to upload', 'jetpack' ),
- 'uploading' => __( 'Uploading...', 'jetpack' ),
- 'processing' => __( 'Processing...', 'jetpack' ),
- 'unsupported' => __( "Sorry, your browser isn't supported. Upgrade at browsehappy.com.", 'jetpack' ),
- 'invalidUpload' => __( 'Only images can be uploaded here.', 'jetpack' ),
- 'error' => __( "Your upload didn't complete; try again later or cross your fingers and try again right now.", 'jetpack' ),
- )
- );
-
- wp_localize_script( 'jetpack-comics', 'Jetpack_Comics_Options', $options );
- }
-
- public function admin_enqueue_scripts() {
- wp_enqueue_style( 'jetpack-comics-admin', plugins_url( 'comics/admin.css', __FILE__ ) );
- }
-
- public function maybe_register_post_types() {
- // Return early if theme does not support Jetpack Comic.
- if ( ! ( $this->site_supports_comics() ) )
- return;
-
- $this->register_post_types();
- }
-
- function register_post_types() {
- if ( post_type_exists( self::POST_TYPE ) ) {
- return;
- }
-
- register_post_type( self::POST_TYPE, array(
- 'description' => __( 'Comics', 'jetpack' ),
- 'labels' => array(
- 'name' => esc_html__( 'Comics', 'jetpack' ),
- 'singular_name' => esc_html__( 'Comic', 'jetpack' ),
- 'menu_name' => esc_html__( 'Comics', 'jetpack' ),
- 'all_items' => esc_html__( 'All Comics', 'jetpack' ),
- 'add_new' => esc_html__( 'Add New', 'jetpack' ),
- 'add_new_item' => esc_html__( 'Add New Comic', 'jetpack' ),
- 'edit_item' => esc_html__( 'Edit Comic', 'jetpack' ),
- 'new_item' => esc_html__( 'New Comic', 'jetpack' ),
- 'view_item' => esc_html__( 'View Comic', 'jetpack' ),
- 'search_items' => esc_html__( 'Search Comics', 'jetpack' ),
- 'not_found' => esc_html__( 'No Comics found', 'jetpack' ),
- 'not_found_in_trash' => esc_html__( 'No Comics found in Trash', 'jetpack' ),
- 'filter_items_list' => esc_html__( 'Filter comics list', 'jetpack' ),
- 'items_list_navigation' => esc_html__( 'Comics list navigation', 'jetpack' ),
- 'items_list' => esc_html__( 'Comics list', 'jetpack' ),
- ),
- 'supports' => array(
- 'title',
- 'editor',
- 'thumbnail',
- 'comments',
- 'revisions',
- 'publicize', // Jetpack
- 'subscriptions', // wpcom
- 'shortlinks', // Jetpack
- ),
- 'rewrite' => array(
- 'slug' => 'comic',
- 'with_front' => false,
- ),
- 'taxonomies' => array(
- 'category',
- 'post_tag',
- ),
- // Only make the type public for sites that support Comics.
- 'public' => true,
- 'menu_position' => 5, // below Posts
- 'map_meta_cap' => true,
- 'has_archive' => true,
- 'query_var' => 'comic',
- 'show_in_rest' => true,
- ) );
- }
-
- public function manage_posts_columns( $columns ) {
- $new_columns = array(
- 'preview-jetpack-comic' => __( 'Preview', 'jetpack' ),
- );
- return array_merge( array_slice( $columns, 0, 2 ), $new_columns, array_slice( $columns, 2 ) );
- }
-
- public function manage_posts_custom_column( $column_name, $post_ID ) {
- if ( 'preview-jetpack-comic' == $column_name && has_post_thumbnail( $post_ID ) ) {
- echo get_the_post_thumbnail( $post_ID, 'jetpack-comic-thumb' );
- }
- }
-
- /**
- * The function url_to_postid() doesn't handle pretty permalinks
- * for CPTs very well. When we're generating an RSS feed to be consumed
- * for Feedbag (the Reader's feed storage mechanism), eschew
- * a pretty URL for one that will get the post into the Reader.
- *
- * @see http://core.trac.wordpress.org/ticket/19744
- * @param string $permalink The existing (possibly pretty) permalink.
- */
- public function custom_permalink_for_feedbag( $permalink ) {
- global $post;
-
- if ( ! empty( $GLOBALS['is_feedbag_rss_script'] ) && self::POST_TYPE == $post->post_type ) {
- $permalink = home_url( add_query_arg( array( 'p' => $post->ID, 'post_type' => self::POST_TYPE ), '?' ) );
- }
-
- return $permalink;
- }
-
- /*
- * Update messages for the Comic admin.
- */
- function updated_messages( $messages ) {
- global $post;
-
- $messages['jetpack-comic'] = array(
- 0 => '', // Unused. Messages start at index 1.
- 1 => sprintf( __( 'Comic updated. <a href="%s">View comic</a>', 'jetpack'), esc_url( get_permalink( $post->ID ) ) ),
- 2 => esc_html__( 'Custom field updated.', 'jetpack' ),
- 3 => esc_html__( 'Custom field deleted.', 'jetpack' ),
- 4 => esc_html__( 'Comic updated.', 'jetpack' ),
- /* translators: %s: date and time of the revision */
- 5 => isset( $_GET['revision'] ) ? sprintf( esc_html__( 'Comic restored to revision from %s', 'jetpack'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
- 6 => sprintf( __( 'Comic published. <a href="%s">View comic</a>', 'jetpack' ), esc_url( get_permalink( $post->ID ) ) ),
- 7 => esc_html__( 'Comic saved.', 'jetpack' ),
- 8 => sprintf( __( 'Comic submitted. <a target="_blank" href="%s">Preview comic</a>', 'jetpack'), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) ),
- 9 => sprintf( __( 'Comic scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview comic</a>', 'jetpack' ),
- // translators: Publish box date format, see http://php.net/date
- date_i18n( __( 'M j, Y @ G:i', 'jetpack' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post->ID) ) ),
- 10 => sprintf( __( 'Comic draft updated. <a target="_blank" href="%s">Preview comic</a>', 'jetpack' ), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) ),
- );
-
- return $messages;
- }
-
- /**
- * Should this Custom Post Type be made available?
- */
- public function site_supports_comics() {
- /**
- * @todo: Extract this out into a wpcom only file.
- */
- if ( 'blog-rss.php' == substr( $_SERVER['PHP_SELF'], -12 ) && count( $_SERVER['argv'] ) > 1 ) {
- // blog-rss.php isn't run in the context of the target blog when the init action fires,
- // so check manually whether the target blog supports comics.
- switch_to_blog( $_SERVER['argv'][1] );
- // The add_theme_support( 'jetpack-comic' ) won't fire on switch_to_blog, so check for Panel manually.
- $supports_comics = ( ( function_exists( 'site_vertical' ) && 'comics' == site_vertical() )
- || current_theme_supports( self::POST_TYPE )
- || get_stylesheet() == 'pub/panel' );
- restore_current_blog();
-
- /** This action is documented in modules/custom-post-types/nova.php */
- return (bool) apply_filters( 'jetpack_enable_cpt', $supports_comics, self::POST_TYPE );
- }
-
- $supports_comics = false;
-
- /**
- * If we're on WordPress.com, and it has the menu site vertical.
- * @todo: Extract this out into a wpcom only file.
- */
- if ( function_exists( 'site_vertical' ) && 'comics' == site_vertical() ) {
- $supports_comics = true;
- }
-
- /**
- * Else, if the current theme requests it.
- */
- if ( current_theme_supports( self::POST_TYPE ) ) {
- $supports_comics = true;
- }
-
- /**
- * Filter it in case something else knows better.
- */
- /** This action is documented in modules/custom-post-types/nova.php */
- return (bool) apply_filters( 'jetpack_enable_cpt', $supports_comics, self::POST_TYPE );
- }
-
- /**
- * Anywhere that a feed is displaying posts, show comics too.
- *
- * @param WP_Query $query
- */
- public function include_in_feeds( $query ) {
- if ( ! $query->is_feed() )
- return;
-
- // Don't modify the query if the post type isn't public.
- if ( ! get_post_type_object( 'jetpack-comic' )->public )
- return;
-
- $query_post_types = $query->get( 'post_type' );
-
- if ( empty( $query_post_types ) )
- $query_post_types = 'post';
-
- if ( ! is_array( $query_post_types ) )
- $query_post_types = array( $query_post_types );
-
- if ( in_array( 'post', $query_post_types ) ) {
- $query_post_types[] = self::POST_TYPE;
- $query->set( 'post_type', $query_post_types );
- }
- }
-
- /**
- * API endpoint for front-end image uploading.
- */
- public function upload() {
- global $content_width;
-
- header( 'Content-Type: application/json' );
-
- if ( ! wp_verify_nonce( $_REQUEST['nonce'], 'jetpack_comic_upload_nonce' ) )
- die( json_encode( array( 'error' => __( 'Invalid or expired nonce.', 'jetpack' ) ) ) );
-
- $_POST['action'] = 'wp_handle_upload';
-
- $image_id_arr = array();
- $image_error_arr = array();
-
- $i = 0;
-
- while ( isset( $_FILES['image_' . $i ] ) ) {
- // Create attachment for the image.
- $image_id = media_handle_upload( "image_$i", 0 );
-
- if ( is_wp_error( $image_id ) ) {
- $error = array( $image_id, $image_id->get_error_message() );
- array_push( $image_error_arr, $error );
- } else {
- array_push( $image_id_arr, $image_id );
- }
-
- $i++;
- }
-
- if ( count( $image_id_arr ) == 0 ) {
- // All image uploads failed.
- $rv = array( 'error' => '' );
-
- foreach ( $image_error_arr as $error )
- $rv['error'] .= $error[1] . "\n";
- }
- else {
- if ( count( $image_id_arr ) == 1 ) {
- $image_id = $image_id_arr[0];
-
- // Get the image
- $image_src = get_the_guid( $image_id );
- $image_dims = wp_get_attachment_image_src( $image_id, 'full' );
-
- // Take off 10px of width to account for padding and border. @todo make this smarter.
- if ( $content_width )
- $image_width = $content_width - 10;
- else
- $image_width = $image_dims[1] - 10;
-
- $post_content = '<a href="' . esc_attr( $image_src ) .'"><img src="' . esc_attr( $image_src ) . '?w=' . esc_attr( $image_width ) . '" alt="' . esc_attr( $_FILES['image_0']['name'] ) . '" class="size-full wp-image alignnone" id="i-' . esc_attr( $image_id ) . '" data-filename="' . esc_attr( $_FILES['image_0']['name'] ) . '" /></a>';
- }
- else {
- $post_content = '[gallery ids="' . esc_attr( implode( ',', $image_id_arr ) ) . '"]';
- }
-
- // Create a new post with the image(s)
- $post_id = wp_insert_post( array(
- 'post_content' => $post_content,
- 'post_type' => 'jetpack-comic',
- 'post_status' => 'draft',
- ),
- true
- );
-
- if ( is_wp_error( $post_id, 'WP_Error' ) ) {
- // Failed to create the post.
- $rv = array( 'error' => $post_id->get_error_message() );
-
- // Delete the uploaded images.
- foreach ( $image_id_arr as $image_id ) {
- wp_delete_post( $image_id, true );
- }
- }
- else {
- foreach ( $image_id_arr as $image_id ) {
- wp_update_post( array(
- 'ID' => $image_id,
- 'post_parent' => $post_id
- ) );
- }
-
- if ( current_theme_supports( 'post-thumbnails' ) && count( $image_id_arr ) == 1 )
- set_post_thumbnail( $post_id, $image_id_arr[0] );
-
- $rv = array( 'url' => add_query_arg( array( 'post' => $post_id, 'action' => 'edit' ), admin_url( 'post.php' ) ) );
- }
- }
-
- die( json_encode( $rv ) );
- }
-
- public function add_posts_to_loop( $query ) {
- // Add comic posts to the tag and category pages.
- if ( ! is_admin() && $query->is_main_query() && ( $query->is_category() || $query->is_tag() ) ) {
- $post_types = $query->get( 'post_type' );
-
- if ( ! $post_types || 'post' == $post_types )
- $post_types = array( 'post', self::POST_TYPE );
- else if ( is_array( $post_types ) )
- $post_types[] = self::POST_TYPE;
-
- $query->set( 'post_type', $post_types );
- }
-
- return $query;
- }
-
- /**
- * Add to REST API post type whitelist
- */
- public function allow_rest_api_type( $post_types ) {
- $post_types[] = self::POST_TYPE;
- return $post_types;
- }
-
-}
-
-add_action( 'init', array( 'Jetpack_Comic', 'init' ) );
-
-
-function comics_welcome_email( $welcome_email, $blog_id, $user_id, $password, $title, $meta ) {
- if ( ( isset( $meta['vertical'] ) && 'comics' == $meta['vertical'] ) || has_blog_sticker( 'vertical-comics', $blog_id ) ) {
- return __( "Welcome! Ready to publish your first strip?
-
-Your webcomic's new site is ready to go. Get started by <a href=\"BLOG_URLwp-admin/customize.php#title\">setting your comic's title and tagline</a> so your readers know what it's all about.
-
-Looking for more help with setting up your site? Check out the WordPress.com <a href=\"http://learn.wordpress.com/\" target=\"_blank\">beginner's tutorial</a> and the <a href=\"http://en.support.wordpress.com/comics/\" target=\"_blank\">guide to comics on WordPress.com</a>. Dive right in by <a href=\"BLOG_URLwp-admin/customize.php#title\">publishing your first strip!</a>
-
-Lots of laughs,
-The WordPress.com Team", 'jetpack' );
- }
-
- return $welcome_email;
-}
-
-add_filter( 'update_welcome_email_pre_replacement', 'comics_welcome_email', 10, 6 );
diff --git a/plugins/jetpack/modules/custom-post-types/comics/admin.css b/plugins/jetpack/modules/custom-post-types/comics/admin.css
deleted file mode 100644
index e347ac3c..00000000
--- a/plugins/jetpack/modules/custom-post-types/comics/admin.css
+++ /dev/null
@@ -1,7 +0,0 @@
-#adminmenu #menu-posts-jetpack-comic .menu-icon-post div.wp-menu-image:before {
- content: '\f125';
-}
-
-.edit-php .column-preview-jetpack-comic {
- width: 150px;
-}
diff --git a/plugins/jetpack/modules/custom-post-types/comics/comics-rtl.css b/plugins/jetpack/modules/custom-post-types/comics/comics-rtl.css
deleted file mode 100644
index 7662d7e5..00000000
--- a/plugins/jetpack/modules/custom-post-types/comics/comics-rtl.css
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-#jetpack-comic-drop-zone .dragging, #jetpack-comic-drop-zone .uploading {
- margin-top: 200px;
- display: none;
-}
-
-/* Display the appropriate loading message for each upload state. */
-body.dragging #jetpack-comic-drop-zone .dragging, body.uploading #jetpack-comic-drop-zone .uploading {
- display: block;
-}
-
-body.uploading #jetpack-comic-drop-zone .uploading .spinner {
- display: inline-block;
- width: 60px;
-}
-
-/* Add the drop zone overlay. */
-body.dragging #jetpack-comic-drop-zone, body.uploading #jetpack-comic-drop-zone {
- background: rgba( 0, 86, 132, 0.9 );
- border: 1px dashed #fff;
- color: #fff;
- display: block;
- font-size: 30px;
- position: fixed;
- top: 10px;
- right: 10px;
- left: 10px;
- bottom: 10px;
- text-align: center;
- z-index: 99999;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-post-types/comics/comics-rtl.min.css b/plugins/jetpack/modules/custom-post-types/comics/comics-rtl.min.css
deleted file mode 100644
index 9fa3feae..00000000
--- a/plugins/jetpack/modules/custom-post-types/comics/comics-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-#jetpack-comic-drop-zone .dragging,#jetpack-comic-drop-zone .uploading{margin-top:200px;display:none}body.dragging #jetpack-comic-drop-zone .dragging,body.uploading #jetpack-comic-drop-zone .uploading{display:block}body.uploading #jetpack-comic-drop-zone .uploading .spinner{display:inline-block;width:60px}body.dragging #jetpack-comic-drop-zone,body.uploading #jetpack-comic-drop-zone{background:rgba(0,86,132,.9);border:1px dashed #fff;color:#fff;display:block;font-size:30px;position:fixed;top:10px;right:10px;left:10px;bottom:10px;text-align:center;z-index:99999} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-post-types/comics/comics.css b/plugins/jetpack/modules/custom-post-types/comics/comics.css
deleted file mode 100644
index 6e5cf110..00000000
--- a/plugins/jetpack/modules/custom-post-types/comics/comics.css
+++ /dev/null
@@ -1,30 +0,0 @@
-#jetpack-comic-drop-zone .dragging, #jetpack-comic-drop-zone .uploading {
- margin-top: 200px;
- display: none;
-}
-
-/* Display the appropriate loading message for each upload state. */
-body.dragging #jetpack-comic-drop-zone .dragging, body.uploading #jetpack-comic-drop-zone .uploading {
- display: block;
-}
-
-body.uploading #jetpack-comic-drop-zone .uploading .spinner {
- display: inline-block;
- width: 60px;
-}
-
-/* Add the drop zone overlay. */
-body.dragging #jetpack-comic-drop-zone, body.uploading #jetpack-comic-drop-zone {
- background: rgba( 0, 86, 132, 0.9 );
- border: 1px dashed #fff;
- color: #fff;
- display: block;
- font-size: 30px;
- position: fixed;
- top: 10px;
- left: 10px;
- right: 10px;
- bottom: 10px;
- text-align: center;
- z-index: 99999;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-post-types/comics/comics.js b/plugins/jetpack/modules/custom-post-types/comics/comics.js
deleted file mode 100644
index 960fbfad..00000000
--- a/plugins/jetpack/modules/custom-post-types/comics/comics.js
+++ /dev/null
@@ -1,121 +0,0 @@
-/* jshint onevar: false, smarttabs: true, devel: true */
-/* global Jetpack_Comics_Options */
-
-jQuery( function ( $ ) {
- /**
- * Enable front-end uploading of images for Comics users.
- */
- var Jetpack_Comics = {
- init : function () {
- $( document ).on( 'dragover.jetpack-comics', 'body, #jetpack-comic-drop-zone', this.onDragOver );
- $( document ).on( 'dragleave.jetpack-comics', 'body, #jetpack-comic-drop-zone', this.onDragLeave );
- $( document ).on( 'drop.jetpack-comics', 'body, #jetpack-comic-drop-zone', this.onDrop );
-
- $( 'body' ).append( $( '<div id="jetpack-comic-drop-zone"><p class="dragging" /><p class="uploading" /></div>' ) );
- $( '#jetpack-comic-drop-zone' )
- .find( '.dragging' )
- .text( Jetpack_Comics_Options.labels.dragging )
- .end()
- .find( '.uploading' )
- .text( Jetpack_Comics_Options.labels.uploading )
- .prepend( $( '<span class="spinner"/>' ) );
-
- if ( ! ( 'FileReader' in window && 'File' in window ) ) {
- $( '#jetpack-comic-drop-zone .dragging' ).text( Jetpack_Comics_Options.labels.unsupported );
- $( document ).off( 'drop.jetpack-comics' ).on( 'drop.jetpack-comics', 'body, #jetpack-comic-drop-zone', this.onDragLeave );
- }
- },
-
- /**
- * Only upload image files.
- */
- filterImageFiles : function ( files ) {
- var validFiles = [];
-
- for ( var i = 0, _len = files.length; i < _len; i++ ) {
- if ( files[i].type.match( /^image\//i ) ) {
- validFiles.push( files[i] );
- }
- }
-
- return validFiles;
- },
-
- dragTimeout : null,
-
- onDragOver: function ( event ) {
- event.preventDefault();
-
- clearTimeout( Jetpack_Comics.dragTimeout );
-
- $( 'body' ).addClass( 'dragging' );
- },
-
- onDragLeave: function ( /*event*/ ) {
- clearTimeout( Jetpack_Comics.dragTimeout );
-
- // In Chrome, the screen flickers because we're moving the drop zone in front of 'body'
- // so the dragover/dragleave events happen frequently.
- Jetpack_Comics.dragTimeout = setTimeout( function () {
- $( 'body' ).removeClass( 'dragging' );
- }, 100 );
- },
-
- onDrop: function ( event ) {
- event.preventDefault();
- event.stopPropagation();
-
- // recent chrome bug requires this, see stackoverflow thread: http://bit.ly/13BU7b5
- event.originalEvent.stopPropagation();
- event.originalEvent.preventDefault();
-
- var files = Jetpack_Comics.filterImageFiles( event.originalEvent.dataTransfer.files );
-
- $( 'body' ).removeClass( 'dragging' );
-
- if ( files.length === 0 ) {
- alert( Jetpack_Comics_Options.labels.invalidUpload );
- return;
- }
-
- $( 'body' ).addClass( 'uploading' );
-
- var formData = new FormData();
-
- for ( var i = 0, fl = files.length; i < fl; i++ ) {
- formData.append( 'image_' + i, files[ i ] ); // won't work as image[]
- }
-
- $( '#jetpack-comic-drop-zone .uploading .spinner' ).spin();
-
- $.ajax( {
- url: Jetpack_Comics_Options.writeURL + '&nonce=' + Jetpack_Comics_Options.nonce,
- data: formData,
- processData: false,
- contentType: false,
- type: 'POST',
- dataType: 'json',
- xhrFields: {
- withCredentials: true
- }
- } )
- .done( function( data ) {
- $( '#jetpack-comic-drop-zone .uploading' ).text( Jetpack_Comics_Options.labels.processing );
-
- if ( 'url' in data ) {
- document.location.href = data.url;
- }
- else if ( 'error' in data ) {
- alert( data.error );
-
- $( 'body' ).removeClass( 'uploading' );
- }
- } )
- .fail( function ( /*req*/ ) {
- alert( Jetpack_Comics_Options.labels.error );
- } );
- }
- };
-
- Jetpack_Comics.init();
-} );
diff --git a/plugins/jetpack/modules/custom-post-types/comics/comics.min.css b/plugins/jetpack/modules/custom-post-types/comics/comics.min.css
deleted file mode 100644
index 2526a81c..00000000
--- a/plugins/jetpack/modules/custom-post-types/comics/comics.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-#jetpack-comic-drop-zone .dragging,#jetpack-comic-drop-zone .uploading{margin-top:200px;display:none}body.dragging #jetpack-comic-drop-zone .dragging,body.uploading #jetpack-comic-drop-zone .uploading{display:block}body.uploading #jetpack-comic-drop-zone .uploading .spinner{display:inline-block;width:60px}body.dragging #jetpack-comic-drop-zone,body.uploading #jetpack-comic-drop-zone{background:rgba(0,86,132,.9);border:1px dashed #fff;color:#fff;display:block;font-size:30px;position:fixed;top:10px;left:10px;right:10px;bottom:10px;text-align:center;z-index:99999} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-post-types/comics/rtl/comics-rtl.css b/plugins/jetpack/modules/custom-post-types/comics/rtl/comics-rtl.css
deleted file mode 100644
index 773fd99d..00000000
--- a/plugins/jetpack/modules/custom-post-types/comics/rtl/comics-rtl.css
+++ /dev/null
@@ -1,32 +0,0 @@
-/* This file was automatically generated on Jul 09 2013 05:18:56 */
-
-#jetpack-comic-drop-zone .dragging, #jetpack-comic-drop-zone .uploading {
- margin-top: 200px;
- display: none;
-}
-
-/* Display the appropriate loading message for each upload state. */
-body.dragging #jetpack-comic-drop-zone .dragging, body.uploading #jetpack-comic-drop-zone .uploading {
- display: block;
-}
-
-body.uploading #jetpack-comic-drop-zone .uploading .spinner {
- display: inline-block;
- width: 60px;
-}
-
-/* Add the drop zone overlay. */
-body.dragging #jetpack-comic-drop-zone, body.uploading #jetpack-comic-drop-zone {
- background: rgba( 0, 86, 132, 0.9 );
- border: 1px dashed #fff;
- color: #fff;
- display: block;
- font-size: 30px;
- position: fixed;
- top: 10px;
- right: 10px;
- left: 10px;
- bottom: 10px;
- text-align: center;
- z-index: 99999;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-post-types/css/edit-items.css b/plugins/jetpack/modules/custom-post-types/css/edit-items.css
deleted file mode 100644
index 85fbbe96..00000000
--- a/plugins/jetpack/modules/custom-post-types/css/edit-items.css
+++ /dev/null
@@ -1,24 +0,0 @@
-.widefat .menu-label-row td {
- border-bottom-width: 1px;
-}
-.widefat .menu-label-row td h3 {
- padding-left: 30px;
-}
-.widefat .menu-order-value {
- width: 2.5em;
- text-align: center;
-}
-.widefat .menu-label-row, .widefat .menu-label-row td {
- background-color: #d6d6d6;
- color: #111;
- border: 0 none;
-}
-.ui-sortable .type-nova_menu_item {
- cursor: move;
-}
-.tablenav .button-reorder {
- margin-top: 4px;
-}
-.tablenav .view-switch a, .tablenav div.tablenav-pages {
- display: none;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-post-types/css/many-items.css b/plugins/jetpack/modules/custom-post-types/css/many-items.css
deleted file mode 100644
index c9932430..00000000
--- a/plugins/jetpack/modules/custom-post-types/css/many-items.css
+++ /dev/null
@@ -1,14 +0,0 @@
-.many-items-table th, .many-items-table td {
- width: 25%;
-}
-
-.many-items-table input, .many-items-table textarea {
- width: 100%;
-}
-
-.many-items-table input[type=file] {
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- -ms-box-sizing: border-box;
- box-sizing: border-box;
-}
diff --git a/plugins/jetpack/modules/custom-post-types/css/nova-font.css b/plugins/jetpack/modules/custom-post-types/css/nova-font.css
deleted file mode 100644
index ac1b9067..00000000
--- a/plugins/jetpack/modules/custom-post-types/css/nova-font.css
+++ /dev/null
@@ -1,30 +0,0 @@
-@font-face {
- font-family: 'nova-font';
- src: url('../fonts/nova.eot');
-}
-@font-face {
- font-family: 'nova-font';
- src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg5lAuAAAAC8AAAAYGNtYXDL9xqaAAABHAAAADxnYXNwAAAAEAAAAVgAAAAIZ2x5Zrlfj0YAAAFgAAABrGhlYWQAW+atAAADDAAAADZoaGVhB2ED4AAAA0QAAAAkaG10eAXcAGQAAANoAAAADGxvY2EACgDWAAADdAAAAAhtYXhwAAgAkQAAA3wAAAAgbmFtZXvEneAAAAOcAAABHnBvc3QAAwAAAAAEvAAAACAAAwPoAZAABQAAAooCvAAAAIwCigK8AAAB4AAxAQIAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAACDmAwOp/8L/wgOpAD4AAAAAAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEACgAAAAGAAQAAQACACDmA///AAAAIOYD////4Rn/AAEAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAQAZAAyA7YDhAAoAEUAfQCOAAABMhY6ATMyPgI/ASMHJz8BDwEnNycHDgMHFgYWBhcHMgYWIjMXNwUHDgMHHgMXHgMzMj4CPwEnKgMjFyc3Ni4CJy4DIyIOAgcOAxceAxceAz8BAR4DMzI+Ajc+Ayc2LgIvAQEmPgI3PgEeARceAxcnApQCBAQEAg4XFxQKtzGXH2oaM3UhlwHUCg0KBAEBAQIBAhQBAQEBAXIN/t3oCwwLAwEBAwsMCwgVFhkMDhgXEwuxcgICAwEC94wFBQMUIRkRLS0xFQsVFxULCQ8GAgQDDxMaDxUuNDIaDgEwBhAQFQkMExIQCAcMBgUBAQUGDAfm/i8CAwIHAhApLy0VCRMMCwLrAfUBBAoNCtWWIHYyGWsglDS5CRQWGQ0CBAQEAw8BAWkOKsIJFBYZDQ0YFxQJCg0KBAQKDQrWngp+DxczNTUXEx4VDAMHDAoKGh4iExMnJSMPFB4SBQQD/l8HCgYEBAcLCAcQEhQKCxMSEAjPAV8BBgcHBA4KCRgTCxgWFQlaAAAAAAEAAAABAAAD2anvXw889QALA+gAAAAAzsPRIgAAAADOw9EiAAAAAAO2A4QAAAAIAAIAAAAAAAAAAQAAA6n/wgAAA+gAAAAyA7YAAQAAAAAAAAAAAAAAAAAAAAMAAAAAAfQAAAPoAGQAAAAAAAoA1gABAAAAAwCPAAQAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEACAAAAAEAAAAAAAIADgAyAAEAAAAAAAMACAAeAAEAAAAAAAQACABAAAEAAAAAAAUAFgAIAAEAAAAAAAYABAAmAAEAAAAAAAoAKABIAAMAAQQJAAEACAAAAAMAAQQJAAIADgAyAAMAAQQJAAMACAAeAAMAAQQJAAQACABAAAMAAQQJAAUAFgAIAAMAAQQJAAYACAAqAAMAAQQJAAoAKABIAG4AbwB2AGEAVgBlAHIAcwBpAG8AbgAgADAALgAwAG4AbwB2AGFub3ZhAG4AbwB2AGEAUgBlAGcAdQBsAGEAcgBuAG8AdgBhAEcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format('truetype'),
- url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAUoAAsAAAAABNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDmUC4GNtYXAAAAFoAAAAPAAAADzL9xqaZ2FzcAAAAaQAAAAIAAAACAAAABBnbHlmAAABrAAAAawAAAGsuV+PRmhlYWQAAANYAAAANgAAADYAW+ataGhlYQAAA5AAAAAkAAAAJAdhA+BobXR4AAADtAAAAAwAAAAMBdwAZGxvY2EAAAPAAAAACAAAAAgACgDWbWF4cAAAA8gAAAAgAAAAIAAIAJFuYW1lAAAD6AAAAR4AAAEee8Sd4HBvc3QAAAUIAAAAIAAAACAAAwAAAAMD6AGQAAUAAAKKArwAAACMAooCvAAAAeAAMQECAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg5gMDqf/C/8IDqQA+AAAAAAAAAAAAAAAAAAAAIAAAAAAAAgAAAAMAAAAUAAMAAQAAABQABAAoAAAABgAEAAEAAgAg5gP//wAAACDmA////+EZ/wABAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAAEAGQAMgO2A4QAKABFAH0AjgAAATIWOgEzMj4CPwEjByc/AQ8BJzcnBw4DBxYGFgYXBzIGFiIzFzcFBw4DBx4DFx4DMzI+Aj8BJyoDIxcnNzYuAicuAyMiDgIHDgMXHgMXHgM/AQEeAzMyPgI3PgMnNi4CLwEBJj4CNz4BHgEXHgMXJwKUAgQEBAIOFxcUCrcxlx9qGjN1IZcB1AoNCgQBAQECAQIUAQEBAQFyDf7d6AsMCwMBAQMLDAsIFRYZDA4YFxMLsXICAgMBAveMBQUDFCEZES0tMRULFRcVCwkPBgIEAw8TGg8VLjQyGg4BMAYQEBUJDBMSEAgHDAYFAQEFBgwH5v4vAgMCBwIQKS8tFQkTDAsC6wH1AQQKDQrVliB2MhlrIJQ0uQkUFhkNAgQEBAMPAQFpDirCCRQWGQ0NGBcUCQoNCgQECg0K1p4Kfg8XMzU1FxMeFQwDBwwKChoeIhMTJyUjDxQeEgUEA/5fBwoGBAQHCwgHEBIUCgsTEhAIzwFfAQYHBwQOCgkYEwsYFhUJWgAAAAABAAAAAQAAA9mp718PPPUACwPoAAAAAM7D0SIAAAAAzsPRIgAAAAADtgOEAAAACAACAAAAAAAAAAEAAAOp/8IAAAPoAAAAMgO2AAEAAAAAAAAAAAAAAAAAAAADAAAAAAH0AAAD6ABkAAAAAAAKANYAAQAAAAMAjwAEAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAgAAAABAAAAAAACAA4AMgABAAAAAAADAAgAHgABAAAAAAAEAAgAQAABAAAAAAAFABYACAABAAAAAAAGAAQAJgABAAAAAAAKACgASAADAAEECQABAAgAAAADAAEECQACAA4AMgADAAEECQADAAgAHgADAAEECQAEAAgAQAADAAEECQAFABYACAADAAEECQAGAAgAKgADAAEECQAKACgASABuAG8AdgBhAFYAZQByAHMAaQBvAG4AIAAwAC4AMABuAG8AdgBhbm92YQBuAG8AdgBhAFIAZQBnAHUAbABhAHIAbgBvAHYAYQBHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff');
- font-weight: normal;
- font-style: normal;
-}
-
-#menu-posts-nova_menu_item:before,
-#dashboard_right_now .nova-menu-count a:before,
-#dashboard_right_now .nova-menu-count span:before {
- font-family: 'nova-font';
- speak: none;
- font-style: normal;
- font-weight: normal;
- font-variant: normal;
- text-transform: none;
- line-height: 1;
-
- /* Better Font Rendering =========== */
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-#dashboard_right_now .nova-menu-count a:before, #dashboard_right_now .nova-menu-count span:before {
- content: '\e603';
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-post-types/css/nova.css b/plugins/jetpack/modules/custom-post-types/css/nova.css
deleted file mode 100644
index 309b510f..00000000
--- a/plugins/jetpack/modules/custom-post-types/css/nova.css
+++ /dev/null
@@ -1,110 +0,0 @@
-/* edit-items.css
--------------------------------------------------------------- */
-
-.widefat .menu-label-row td {
- border-bottom-width: 1px;
-}
-.widefat .menu-label-row td h3 {
- padding-left: 30px;
-}
-.widefat .menu-label-row td h3 .edit-nova-section {
- font-size: .8em;
- font-weight: normal;
- margin-left: 5px;
-}
-.widefat .menu-order-value {
- width: 2.5em;
- text-align: center;
-}
-.widefat .menu-label-row, .widefat .menu-label-row td {
- background-color: #eee;
- color: #111;
- border: 0 none;
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.05);
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.05);
-}
-.ui-sortable .type-nova_menu_item {
- cursor: move;
- background-color: #fff;
-}
-.ui-sortable .type-nova_menu_item:nth-child(even) {
- background-color: #f9f9f9;
-}
-.ui-sortable .type-nova_menu_item.ui-sortable-helper {
- -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, 0.1);
- box-shadow: 0 0 1px rgba(0, 0, 0, 0.1);
-}
-.tablenav .button-reorder {
- margin-top: 4px;
-}
-.tablenav .view-switch a, .tablenav div.tablenav-pages {
- display: none;
-}
-
-
-/* many-items.css
--------------------------------------------------------------- */
-
-.many-items-table th, .many-items-table td {
- width: 30%;
-}
-
-.many-items-table th.nova-price, .many-items-table td.nova-price {
- width: 10%;
-}
-
-.many-items-table input, .many-items-table textarea {
- width: 100%;
-}
-
-.many-items-table input[type=file] {
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- -ms-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-
-/* new
--------------------------------------------------------------- */
-
-#the-list tr td:nth-of-type(2) {
- padding-top: 15px;
-}
-
-.nova-move-menu-up:before,
-.nova-move-menu-down:before {
- margin-right: 5px;
- font: normal 10px/1 'dashicons' !important;
- speak: none;
-}
-
-.nova-move-menu-up:before {
- content: "\f342";
-}
-
-.nova-move-menu-down:before {
- content: "\f346";
-}
-
-.dashicon:before {
- font: normal 20px/1 'dashicons';
- speak: none;
- top: 5px;
- display: inline-block;
- position: relative;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- text-decoration: none !important;
- vertical-align: top;
-}
-
-.dashicon-plus:before {
- content: "\f132";
-}
-
-.dashicon-edit:before {
- margin: 2px 5px 0 10px;
- content: "\f327";
- font-size: 10px;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-post-types/css/portfolio-shortcode.css b/plugins/jetpack/modules/custom-post-types/css/portfolio-shortcode.css
deleted file mode 100644
index b3c2c1e3..00000000
--- a/plugins/jetpack/modules/custom-post-types/css/portfolio-shortcode.css
+++ /dev/null
@@ -1,131 +0,0 @@
-.jetpack-portfolio-shortcode {
- clear: both;
- margin: 0;
- overflow: hidden;
- padding: 0;
-}
-
-.portfolio-entry {
- float: left;
- margin: 0 0 3em;
- padding: 0;
- width: 100%;
-}
-
-/* Column setting */
-.portfolio-entry-column-1 {
- width: 100%;
-}
-
-.portfolio-entry-column-2 {
- margin-right: 4%;
- width: 48%;
-}
-
-.portfolio-entry-column-3 {
- margin-right: 3.5%;
- width: 31%;
-}
-
-.portfolio-entry-column-4 {
- margin-right: 3%;
- width: 22%;
-}
-
-.portfolio-entry-column-5 {
- margin-right: 2.5%;
- width: 18%;
-}
-
-.portfolio-entry-column-6 {
- margin-right: 2%;
- width: 15%;
-}
-.portfolio-entry-first-item-row {
- clear: both;
-}
-.portfolio-entry-last-item-row {
- margin-right: 0;
-}
-
-@media screen and (max-width:768px) {
- .portfolio-entry-mobile-first-item-row{
- margin-right: 4%;
- width: 48%;
- clear:both;
- }
- .portfolio-entry-first-item-row {
- clear:none;
- }
- .portfolio-entry-mobile-last-item-row{
- width: 48%;
- margin-right: 0;
- }
-}
-/* Entry Header */
-.portfolio-entry-header {
- border: 0;
- margin: 0;
- padding: 0;
-}
-
-.portfolio-featured-image {
- margin: 0;
- padding: 0;
-}
-
-.portfolio-featured-image img {
- border: 0;
- height: auto;
- max-width: 100%;
- vertical-align: middle;
-}
-
-.portfolio-entry-title {
- font-weight: 700;
- margin: 0;
- padding: 0;
-}
-
-.portfolio-featured-image + .portfolio-entry-title {
- margin-top: 1.0em;
-}
-
-.portfolio-entry-title a {
- border: 0;
- text-decoration: none;
-}
-
-/* Entry Meta */
-.portfolio-entry-meta {
- margin: 0;
- padding: 0;
-}
-
-.portfolio-entry-title + .portfolio-entry-meta {
- margin-top: 0.75em;
-}
-
-.portfolio-entry-title + .portfolio-entry-meta:empty {
- margin: 0;
-}
-
-.portfolio-entry-meta span,
-.portfolio-entry-meta a {
- font-size: 0.9em;
- padding: 0;
-}
-
-.portfolio-entry-meta a {
- border: 0;
- text-decoration: none;
-}
-/* Entry Content */
-.portfolio-entry-content {
- margin: 0.75em 0 0;
- padding: 0;
-}
-
-.portfolio-entry-content > :last-child {
- margin: 0;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-post-types/css/testimonial-shortcode.css b/plugins/jetpack/modules/custom-post-types/css/testimonial-shortcode.css
deleted file mode 100644
index 57a35bc8..00000000
--- a/plugins/jetpack/modules/custom-post-types/css/testimonial-shortcode.css
+++ /dev/null
@@ -1,102 +0,0 @@
-.jetpack-testimonial-shortcode {
- clear: both;
- margin: 0;
- overflow: hidden;
- padding: 0;
-}
-
-.testimonial-entry {
- float: left;
- margin: 0 0 3em;
- padding: 0;
- width: 100%;
-}
-
-/* Column setting */
-.testimonial-entry-column-1 {
- width: 100%;
-}
-
-.testimonial-entry-column-2 {
- margin-right: 4%;
- width: 48%;
-}
-
-.testimonial-entry-column-3 {
- margin-right: 3.5%;
- width: 31%;
-}
-
-.testimonial-entry-column-4 {
- margin-right: 3%;
- width: 22%;
-}
-
-.testimonial-entry-column-5 {
- margin-right: 2.5%;
- width: 18%;
-}
-
-.testimonial-entry-column-6 {
- margin-right: 2%;
- width: 15%;
-}
-.testimonial-entry-first-item-row {
- clear: both;
-}
-.testimonial-entry-last-item-row {
- margin-right: 0;
-}
-
-@media screen and (max-width:768px) {
- .testimonial-entry-mobile-first-item-row{
- margin-right: 4%;
- width: 48%;
- clear:both;
- }
- .testimonial-entry-first-item-row {
- clear:none;
- }
- .testimonial-entry-mobile-last-item-row{
- width: 48%;
- margin-right: 0;
- }
-}
-
-.testimonial-featured-image {
- padding: 0;
- margin: 0;
-}
-
-.testimonial-featured-image img {
- border: 0;
- height: auto;
- max-width: 100%;
- vertical-align: middle;
-}
-
-.testimonial-entry-title {
- font-weight: 700;
- margin: 0;
- padding: 0;
- display: block;
-}
-
-.testimonial-featured-image + .testimonial-entry-title {
- margin-top: 1.0em;
-}
-
-.testimonial-entry-title a {
- border: 0;
- text-decoration: none;
-}
-
-/* Entry Content */
-.testimonial-entry-content {
- margin: 0.75em 0;
- padding: 0;
-}
-
-.testimonial-entry-content > :last-child {
- margin: 0;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/custom-post-types/js/many-items.js b/plugins/jetpack/modules/custom-post-types/js/many-items.js
deleted file mode 100644
index 3483f6cd..00000000
--- a/plugins/jetpack/modules/custom-post-types/js/many-items.js
+++ /dev/null
@@ -1,112 +0,0 @@
-/* jshint onevar: false, smarttabs: true */
-
-(function( $ ){
- var menuSelector, nonceInput, methods;
-
- methods = {
- init : function( /*options*/ ) {
- var $this = this, tbody, row;
-
- this
- .on( 'keypress.manyItemsTable', function( event ) {
- if ( 13 !== event.which ) {
- return;
- }
-
- event.preventDefault();
- if ( 'function' === typeof FormData ) {
- methods.submitRow.apply( $this );
- }
- methods.addRow.apply( $this );
- } )
- .on( 'focus.manyItemsTable', ':input', function( /*event*/ ) {
- $this.data( 'currentRow', $( this ).parents( 'tr:first' ) );
- } );
-
- tbody = this.find( 'tbody:last' );
- row = tbody.find( 'tr:first' ).clone();
-
- this.data( 'form', this.parents( 'form:first' ) );
- this.data( 'tbody', tbody );
- this.data( 'row', row );
- this.data( 'currentRow', row );
-
- menuSelector = $( '#nova-menu-tax' );
- nonceInput = $( '#_wpnonce' );
-
- return this;
- },
-
- destroy : function() {
- this.off( '.manyItemsTable' );
-
- return this;
- },
-
- submitRow : function() {
- var submittedRow, currentInputs, allInputs, partialFormData;
-
- submittedRow = this.data( 'currentRow' );
- currentInputs = submittedRow.find( ':input' );
- allInputs = this.data( 'form' ).find( ':input' ).not( currentInputs ).attr( 'disabled', true ).end();
-
- partialFormData = new FormData( this.data( 'form' ).get( 0 ) );
- partialFormData.append( 'ajax', '1' );
- partialFormData.append( 'nova_menu_tax', menuSelector.val() );
- partialFormData.append( '_wpnonce', nonceInput.val() );
-
- allInputs.attr( 'disabled', false );
-
- $.ajax( {
- url: '',
- type: 'POST',
- data: partialFormData,
- processData: false,
- contentType: false
- } ).complete( function( xhr ) {
- submittedRow.html( xhr.responseText );
- } );
-
- currentInputs.attr( 'disabled', true );
-
- return this;
- },
-
- addRow : function() {
- var row = this.data( 'row' ).clone();
- row.appendTo( this.data( 'tbody' ) );
- row.find( ':input:first' ).focus();
-
- return this;
- }
- };
-
- $.fn.manyItemsTable = function( method ) {
- // Method calling logic
- if ( methods[method] ) {
- return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ) );
- } else if ( typeof method === 'object' || ! method ) {
- return methods.init.apply( this, arguments );
- } else {
- $.error( 'Method ' + method + ' does not exist on jQuery.manyItemsTable' );
- return this;
- }
- };
-
- $.fn.clickAddRow = function() {
- var tbody = this.find( 'tbody:last' ),
- row = tbody.find( 'tr:first' ).clone();
-
- $( row ).find( 'input, textarea' ).val( '' );
- $( row ).appendTo( tbody );
- };
-
-})( jQuery );
-
-jQuery( '.many-items-table' ).one( 'focus', ':input', function( event ) {
- jQuery( event.delegateTarget ).manyItemsTable();
-} );
-jQuery( '.many-items-table' ).on( 'click', 'a.nova-new-row', function( event ) {
- jQuery( event.delegateTarget ).clickAddRow();
-} );
-
diff --git a/plugins/jetpack/modules/custom-post-types/js/menu-checkboxes.js b/plugins/jetpack/modules/custom-post-types/js/menu-checkboxes.js
deleted file mode 100644
index 1ea72a51..00000000
--- a/plugins/jetpack/modules/custom-post-types/js/menu-checkboxes.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/* jshint onevar: false, smarttabs: true, devel: true */
-
-(function($) {
- var NovaCheckBoxes = {
- inputs: null,
- popInputs: null,
-
- initialize: function() {
- NovaCheckBoxes.popInputs = $( '#nova_menuchecklist-pop' ).find( ':checkbox' );
-
- NovaCheckBoxes.inputs = $( '#nova_menuchecklist' )
- .find( ':checkbox' )
- .change( NovaCheckBoxes.checkOne )
- .change( NovaCheckBoxes.syncPop );
-
- if ( !NovaCheckBoxes.isChecked() ) {
- NovaCheckBoxes.checkFirst();
- }
-
- NovaCheckBoxes.syncPop();
- },
-
- syncPop: function() {
- NovaCheckBoxes.popInputs.each( function() {
- var $this = $( this );
- $this.prop( 'checked', $( '#in-nova_menu-' + $this.val() ).is( ':checked' ) );
- } );
- },
-
- isChecked: function() {
- return NovaCheckBoxes.inputs.is( ':checked' );
- },
-
- checkFirst: function() {
- NovaCheckBoxes.inputs.first().prop( 'checked', true );
- },
-
- checkOne: function( /*event*/ ) {
- if ( $( this ).is( ':checked' ) ) {
- return NovaCheckBoxes.inputs.not( this ).prop( 'checked', false );
- } else {
- if ( $( this ).closest( '#nova_menuchecklist' ).find( ':checked' ).length > 0 ) {
- return $( this ).prop( 'checked', false );
- }
- return NovaCheckBoxes.checkFirst();
- }
- }
- };
-
- $( NovaCheckBoxes.initialize );
-})(jQuery);
diff --git a/plugins/jetpack/modules/custom-post-types/js/nova-drag-drop.js b/plugins/jetpack/modules/custom-post-types/js/nova-drag-drop.js
deleted file mode 100644
index 558d4651..00000000
--- a/plugins/jetpack/modules/custom-post-types/js/nova-drag-drop.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/* jshint onevar: false, smarttabs: true */
-/* global _novaDragDrop */
-
-(function($){
- var list;
-
- function init() {
- list = $('#the-list');
- dragMenus();
- addNonce();
- addSubmitButton();
- changeToPost();
- }
-
- function dragMenus() {
- list.sortable({
- cancel: '.no-items',
- stop: function( event, ui ) {
- if ( ui.item.is(':first-child') ) {
- return list.sortable('cancel');
- }
- //
- reOrder();
- }
- });
- }
-
- function reOrder() {
- list.find('.menu-label-row').each(function() {
- var term_id = $(this).data('term_id');
- $(this).nextUntil('.menu-label-row').each(function(i) {
- var row = $(this);
- row.find('.menu-order-value').val(i);
- row.find('.nova-menu-term').val(term_id);
- });
- });
- }
-
- function addSubmitButton() {
- $('.tablenav').prepend('<input type="submit" class="button-primary button-reorder alignright" value="' + _novaDragDrop.reorder + '" name="' + _novaDragDrop.reorderName + '" />');
- }
-
- function addNonce() {
- $('#posts-filter').append('<input type="hidden" name="' + _novaDragDrop.nonceName + '" value="' + _novaDragDrop.nonce + '" />');
- }
-
- function changeToPost() {
- $( '#posts-filter' ).attr( 'method', 'post' );
- }
-
- // do it
- $(document).ready(init);
-})(jQuery);
-
diff --git a/plugins/jetpack/modules/custom-post-types/nova.php b/plugins/jetpack/modules/custom-post-types/nova.php
deleted file mode 100644
index 7301a314..00000000
--- a/plugins/jetpack/modules/custom-post-types/nova.php
+++ /dev/null
@@ -1,1298 +0,0 @@
-<?php
-
-/*
- * Put the following code in your theme's Food Menu Page Template to customize the markup of the menu.
-
-if ( class_exists( 'Nova_Restaurant' ) ) {
- Nova_Restaurant::init( array(
- 'menu_tag' => 'section',
- 'menu_class' => 'menu-items',
- 'menu_header_tag' => 'header',
- 'menu_header_class' => 'menu-group-header',
- 'menu_title_tag' => 'h1',
- 'menu_title_class' => 'menu-group-title',
- 'menu_description_tag' => 'div',
- 'menu_description_class' => 'menu-group-description',
- ) );
-}
-
-*/
-
-/* @todo
-
-Bulk/Quick edit response of Menu Item rows is broken.
-
-Drag and Drop reordering.
-*/
-
-class Nova_Restaurant {
- const MENU_ITEM_POST_TYPE = 'nova_menu_item';
- const MENU_ITEM_LABEL_TAX = 'nova_menu_item_label';
- const MENU_TAX = 'nova_menu';
-
- public $version = '0.1';
-
- protected $default_menu_item_loop_markup = array(
- 'menu_tag' => 'section',
- 'menu_class' => 'menu-items',
- 'menu_header_tag' => 'header',
- 'menu_header_class' => 'menu-group-header',
- 'menu_title_tag' => 'h1',
- 'menu_title_class' => 'menu-group-title',
- 'menu_description_tag' => 'div',
- 'menu_description_class' => 'menu-group-description',
- );
-
- protected $menu_item_loop_markup = array();
- protected $menu_item_loop_last_term_id = false;
- protected $menu_item_loop_current_term = false;
-
- static function init( $menu_item_loop_markup = array() ) {
- static $instance = false;
-
- if ( !$instance ) {
- $instance = new Nova_Restaurant;
- }
-
- if ( $menu_item_loop_markup ) {
- $instance->menu_item_loop_markup = wp_parse_args( $menu_item_loop_markup, $instance->default_menu_item_loop_markup );
- }
-
- return $instance;
- }
-
- function __construct() {
- if ( ! $this->site_supports_nova() )
- return;
-
- $this->register_taxonomies();
- $this->register_post_types();
- add_action( 'admin_menu', array( $this, 'add_admin_menus' ) );
- add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_nova_styles' ) );
- add_action( 'admin_head', array( $this, 'set_custom_font_icon' ) );
-
- // Always sort menu items correctly
- add_action( 'parse_query', array( $this, 'sort_menu_item_queries_by_menu_order' ) );
- add_filter( 'posts_results', array( $this, 'sort_menu_item_queries_by_menu_taxonomy' ), 10, 2 );
-
- add_action( 'wp_insert_post', array( $this, 'add_post_meta' ) );
-
- $this->menu_item_loop_markup = $this->default_menu_item_loop_markup;
-
- // Only output our Menu Item Loop Markup on a real blog view. Not feeds, XML-RPC, admin, etc.
- add_filter( 'template_include', array( $this, 'setup_menu_item_loop_markup__in_filter' ) );
-
- add_filter( 'enter_title_here', array( $this, 'change_default_title' ) );
- add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) );
- add_filter( 'dashboard_glance_items', array( $this, 'add_to_dashboard' ) );
- }
-
- /**
- * Should this Custom Post Type be made available?
- */
- function site_supports_nova() {
- // If we're on WordPress.com, and it has the menu site vertical.
- if ( function_exists( 'site_vertical' ) && 'nova_menu' == site_vertical() )
- return true;
-
- // Else, if the current theme requests it.
- if ( current_theme_supports( self::MENU_ITEM_POST_TYPE ) )
- return true;
-
- // Otherwise, say no unless something wants to filter us to say yes.
- /**
- * Allow something else to hook in and enable this CPT.
- *
- * @module custom-content-types
- *
- * @since 2.6.0
- *
- * @param bool false Whether or not to enable this CPT.
- * @param string $var The slug for this CPT.
- */
- return (bool) apply_filters( 'jetpack_enable_cpt', false, self::MENU_ITEM_POST_TYPE );
- }
-
-/* Setup */
-
- /**
- * Register Taxonomies and Post Type
- */
- function register_taxonomies() {
- if ( ! taxonomy_exists( self::MENU_ITEM_LABEL_TAX ) ) {
- register_taxonomy( self::MENU_ITEM_LABEL_TAX, self::MENU_ITEM_POST_TYPE, array(
- 'labels' => array(
- /* translators: this is about a food menu */
- 'name' => __( 'Menu Item Labels', 'jetpack' ),
- /* translators: this is about a food menu */
- 'singular_name' => __( 'Menu Item Label', 'jetpack' ),
- /* translators: this is about a food menu */
- 'search_items' => __( 'Search Menu Item Labels', 'jetpack' ),
- 'popular_items' => __( 'Popular Labels', 'jetpack' ),
- /* translators: this is about a food menu */
- 'all_items' => __( 'All Menu Item Labels', 'jetpack' ),
- /* translators: this is about a food menu */
- 'edit_item' => __( 'Edit Menu Item Label', 'jetpack' ),
- /* translators: this is about a food menu */
- 'view_item' => __( 'View Menu Item Label', 'jetpack' ),
- /* translators: this is about a food menu */
- 'update_item' => __( 'Update Menu Item Label', 'jetpack' ),
- /* translators: this is about a food menu */
- 'add_new_item' => __( 'Add New Menu Item Label', 'jetpack' ),
- /* translators: this is about a food menu */
- 'new_item_name' => __( 'New Menu Item Label Name', 'jetpack' ),
- 'separate_items_with_commas' => __( 'For example, spicy, favorite, etc. <br /> Separate Labels with commas', 'jetpack' ),
- 'add_or_remove_items' => __( 'Add or remove Labels', 'jetpack' ),
- 'choose_from_most_used' => __( 'Choose from the most used Labels', 'jetpack' ),
- 'items_list_navigation' => __( 'Menu item label list navigation', 'jetpack' ),
- 'items_list' => __( 'Menu item labels list', 'jetpack' ),
- ),
- 'no_tagcloud' => __( 'No Labels found', 'jetpack' ),
- 'hierarchical' => false,
- ) );
- }
-
- if ( ! taxonomy_exists( self::MENU_TAX ) ) {
- register_taxonomy( self::MENU_TAX, self::MENU_ITEM_POST_TYPE, array(
- 'labels' => array(
- /* translators: this is about a food menu */
- 'name' => __( 'Menu Sections', 'jetpack' ),
- /* translators: this is about a food menu */
- 'singular_name' => __( 'Menu Section', 'jetpack' ),
- /* translators: this is about a food menu */
- 'search_items' => __( 'Search Menu Sections', 'jetpack' ),
- /* translators: this is about a food menu */
- 'all_items' => __( 'All Menu Sections', 'jetpack' ),
- /* translators: this is about a food menu */
- 'parent_item' => __( 'Parent Menu Section', 'jetpack' ),
- /* translators: this is about a food menu */
- 'parent_item_colon' => __( 'Parent Menu Section:', 'jetpack' ),
- /* translators: this is about a food menu */
- 'edit_item' => __( 'Edit Menu Section', 'jetpack' ),
- /* translators: this is about a food menu */
- 'view_item' => __( 'View Menu Section', 'jetpack' ),
- /* translators: this is about a food menu */
- 'update_item' => __( 'Update Menu Section', 'jetpack' ),
- /* translators: this is about a food menu */
- 'add_new_item' => __( 'Add New Menu Section', 'jetpack' ),
- /* translators: this is about a food menu */
- 'new_item_name' => __( 'New Menu Sections Name', 'jetpack' ),
- 'items_list_navigation' => __( 'Menu section list navigation', 'jetpack' ),
- 'items_list' => __( 'Menu section list', 'jetpack' ),
- ),
- 'rewrite' => array(
- 'slug' => 'menu',
- 'with_front' => false,
- 'hierarchical' => true,
- ),
- 'hierarchical' => true,
- 'show_tagcloud' => false,
- 'query_var' => 'menu',
- ) );
- }
- }
-
- function register_post_types() {
- if ( post_type_exists( self::MENU_ITEM_POST_TYPE ) ) {
- return;
- }
-
- register_post_type( self::MENU_ITEM_POST_TYPE, array(
- 'description' => __( "Items on your restaurant's menu", 'jetpack' ),
-
- 'labels' => array(
- /* translators: this is about a food menu */
- 'name' => __( 'Menu Items', 'jetpack' ),
- /* translators: this is about a food menu */
- 'singular_name' => __( 'Menu Item', 'jetpack' ),
- /* translators: this is about a food menu */
- 'menu_name' => __( 'Food Menus', 'jetpack' ),
- /* translators: this is about a food menu */
- 'all_items' => __( 'Menu Items', 'jetpack' ),
- /* translators: this is about a food menu */
- 'add_new' => __( 'Add One Item', 'jetpack' ),
- /* translators: this is about a food menu */
- 'add_new_item' => __( 'Add Menu Item', 'jetpack' ),
- /* translators: this is about a food menu */
- 'edit_item' => __( 'Edit Menu Item', 'jetpack' ),
- /* translators: this is about a food menu */
- 'new_item' => __( 'New Menu Item', 'jetpack' ),
- /* translators: this is about a food menu */
- 'view_item' => __( 'View Menu Item', 'jetpack' ),
- /* translators: this is about a food menu */
- 'search_items' => __( 'Search Menu Items', 'jetpack' ),
- /* translators: this is about a food menu */
- 'not_found' => __( 'No Menu Items found', 'jetpack' ),
- /* translators: this is about a food menu */
- 'not_found_in_trash' => __( 'No Menu Items found in Trash', 'jetpack' ),
- 'filter_items_list' => __( 'Filter menu items list', 'jetpack' ),
- 'items_list_navigation' => __( 'Menu item list navigation', 'jetpack' ),
- 'items_list' => __( 'Menu items list', 'jetpack' ),
- ),
- 'supports' => array(
- 'title',
- 'editor',
- 'thumbnail',
- 'excerpt',
- ),
- 'rewrite' => array(
- 'slug' => 'item',
- 'with_front' => false,
- 'feeds' => false,
- 'pages' => false,
- ),
- 'register_meta_box_cb' => array( $this, 'register_menu_item_meta_boxes' ),
-
- 'public' => true,
- 'show_ui' => true, // set to false to replace with custom UI
- 'menu_position' => 20, // below Pages
- 'capability_type' => 'page',
- 'map_meta_cap' => true,
- 'has_archive' => false,
- 'query_var' => 'item',
- ) );
- }
-
-
- /**
- * Update messages for the Menu Item admin.
- */
- function updated_messages( $messages ) {
- global $post;
-
- $messages[self::MENU_ITEM_POST_TYPE] = array(
- 0 => '', // Unused. Messages start at index 1.
- /* translators: this is about a food menu */
- 1 => sprintf( __( 'Menu item updated. <a href="%s">View item</a>', 'jetpack' ), esc_url( get_permalink( $post->ID ) ) ),
- 2 => esc_html__( 'Custom field updated.', 'jetpack' ),
- 3 => esc_html__( 'Custom field deleted.', 'jetpack' ),
- /* translators: this is about a food menu */
- 4 => esc_html__( 'Menu item updated.', 'jetpack' ),
- /* translators: %s: date and time of the revision */
- 5 => isset( $_GET['revision'] ) ? sprintf( esc_html__( 'Menu item restored to revision from %s', 'jetpack' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
- /* translators: this is about a food menu */
- 6 => sprintf( __( 'Menu item published. <a href="%s">View item</a>', 'jetpack' ), esc_url( get_permalink( $post->ID ) ) ),
- /* translators: this is about a food menu */
- 7 => esc_html__( 'Menu item saved.', 'jetpack' ),
- /* translators: this is about a food menu */
- 8 => sprintf( __( 'Menu item submitted. <a target="_blank" href="%s">Preview item</a>', 'jetpack' ), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) ),
- /* translators: this is about a food menu */
- 9 => sprintf( __( 'Menu item scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview item</a>', 'jetpack' ),
- // translators: Publish box date format, see http://php.net/date
- date_i18n( __( 'M j, Y @ G:i', 'jetpack' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post->ID) ) ),
- /* translators: this is about a food menu */
- 10 => sprintf( __( 'Menu item draft updated. <a target="_blank" href="%s">Preview item</a>', 'jetpack' ), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) ),
- );
-
- return $messages;
- }
-
-
- /**
- * Nova Styles and Scripts
- */
- function enqueue_nova_styles( $hook ) {
- global $post_type;
- $pages = array( 'edit.php', 'post.php', 'post-new.php' );
-
- if ( in_array( $hook, $pages ) && $post_type == self::MENU_ITEM_POST_TYPE ) {
- wp_enqueue_style( 'nova-style', plugins_url( 'css/nova.css', __FILE__ ), array(), $this->version );
- }
-
- wp_enqueue_style( 'nova-font', plugins_url( 'css/nova-font.css', __FILE__ ), array(), $this->version );
- }
-
-
- /**
- * Change ‘Enter Title Here’ text for the Menu Item.
- */
- function change_default_title( $title ) {
- if ( self::MENU_ITEM_POST_TYPE == get_post_type() ) {
- /* translators: this is about a food menu */
- $title = esc_html__( "Enter the menu item's name here", 'jetpack' );
- }
-
- return $title;
- }
-
-
- /**
- * Add to Dashboard At A Glance
- */
- function add_to_dashboard() {
- $number_menu_items = wp_count_posts( self::MENU_ITEM_POST_TYPE );
-
- if ( current_user_can( 'administrator' ) ) {
- $number_menu_items_published = sprintf( '<a href="%1$s">%2$s</a>',
- esc_url( get_admin_url( get_current_blog_id(), 'edit.php?post_type=' . self::MENU_ITEM_POST_TYPE ) ),
- sprintf( _n( '%1$d Food Menu Item', '%1$d Food Menu Items', intval( $number_menu_items->publish ), 'jetpack' ), number_format_i18n( $number_menu_items->publish ) )
- );
- }
- else {
- $number_menu_items_published = sprintf( '<span>%1$s</span>',
- sprintf( _n( '%1$d Food Menu Item', '%1$d Food Menu Items', intval( $number_menu_items->publish ), 'jetpack' ), number_format_i18n( $number_menu_items->publish ) )
- );
- }
-
- echo '<li class="nova-menu-count">' . $number_menu_items_published . '</li>';
- }
-
-
- /**
- * Query
- */
- function is_menu_item_query( $query ) {
- if (
- ( isset( $query->query_vars['taxonomy'] ) && self::MENU_TAX == $query->query_vars['taxonomy'] )
- ||
- ( isset( $query->query_vars['post_type'] ) && self::MENU_ITEM_POST_TYPE == $query->query_vars['post_type'] )
- ) {
- return true;
- }
-
- return false;
- }
-
- function sort_menu_item_queries_by_menu_order( $query ) {
- if ( ! $this->is_menu_item_query( $query ) ) {
- return;
- }
-
- $query->query_vars['orderby'] = 'menu_order';
- $query->query_vars['order'] = 'ASC';
-
- // For now, just turn off paging so we can sort by taxonmy later
- // If we want paging in the future, we'll need to add the taxonomy sort here (or at least before the DB query is made)
- $query->query_vars['posts_per_page'] = -1;
- }
-
- function sort_menu_item_queries_by_menu_taxonomy( $posts, $query ) {
- if ( !$posts ) {
- return $posts;
- }
-
- if ( !$this->is_menu_item_query( $query ) ) {
- return $posts;
- }
-
- $grouped_by_term = array();
-
- foreach ( $posts as $post ) {
- $term = $this->get_menu_item_menu_leaf( $post->ID );
- if ( !$term || is_wp_error( $term ) ) {
- $term_id = 0;
- } else {
- $term_id = $term->term_id;
- }
-
- if ( !isset( $grouped_by_term["$term_id"] ) ) {
- $grouped_by_term["$term_id"] = array();
- }
-
- $grouped_by_term["$term_id"][] = $post;
- }
-
- $term_order = get_option( 'nova_menu_order', array() );
-
- $return = array();
- foreach ( $term_order as $term_id ) {
- if ( isset( $grouped_by_term["$term_id"] ) ) {
- $return = array_merge( $return, $grouped_by_term["$term_id"] );
- unset( $grouped_by_term["$term_id"] );
- }
- }
-
- foreach ( $grouped_by_term as $term_id => $posts ) {
- $return = array_merge( $return, $posts );
- }
-
- return $return;
- }
-
-
- /**
- * Add Many Items
- */
- function add_admin_menus() {
- $hook = add_submenu_page(
- 'edit.php?post_type=' . self::MENU_ITEM_POST_TYPE,
- __( 'Add Many Items', 'jetpack' ),
- __( 'Add Many Items', 'jetpack' ),
- 'edit_pages',
- 'add_many_nova_items',
- array( $this, 'add_many_new_items_page' )
- );
-
- add_action( "load-$hook", array( $this, 'add_many_new_items_page_load' ) );
-
- add_action( 'current_screen', array( $this, 'current_screen_load' ) );
-
- //Adjust 'Add Many Items' submenu position
- if ( isset( $GLOBALS['submenu']['edit.php?post_type=' . self::MENU_ITEM_POST_TYPE] ) ) {
- $submenu_item = array_pop( $GLOBALS['submenu']['edit.php?post_type=' . self::MENU_ITEM_POST_TYPE] );
- $GLOBALS['submenu']['edit.php?post_type=' . self::MENU_ITEM_POST_TYPE][11] = $submenu_item;
- ksort( $GLOBALS['submenu']['edit.php?post_type=' . self::MENU_ITEM_POST_TYPE] );
- }
-
-
- $this->setup_menu_item_columns();
-
- wp_register_script(
- 'nova-menu-checkboxes',
- Jetpack::get_file_url_for_environment(
- '_inc/build/custom-post-types/js/menu-checkboxes.min.js',
- 'modules/custom-post-types/js/menu-checkboxes.js'
- ),
- array( 'jquery' ),
- $this->version,
- true
- );
- }
-
-
- /**
- * Custom Nova Icon CSS
- */
- function set_custom_font_icon() {
- ?>
- <style type="text/css">
- #menu-posts-nova_menu_item .wp-menu-image:before {
- font-family: 'nova-font' !important;
- content: '\e603' !important;
- }
- </style>
- <?php
- }
-
- function current_screen_load() {
- $screen = get_current_screen();
- if ( 'edit-nova_menu_item' !== $screen->id ) {
- return;
- }
-
- $this->edit_menu_items_page_load();
- add_filter( 'admin_notices', array( $this, 'admin_notices' ) );
- }
-
-/* Edit Items List */
-
- function admin_notices() {
- if ( isset( $_GET['nova_reordered'] ) )
- /* translators: this is about a food menu */
- printf( '<div class="updated"><p>%s</p></div>', __( 'Menu Items re-ordered.', 'jetpack' ) );
- }
-
- function no_title_sorting( $columns ) {
- if ( isset( $columns['title'] ) )
- unset( $columns['title'] );
- return $columns;
- }
-
- function setup_menu_item_columns() {
- add_filter( sprintf( 'manage_edit-%s_sortable_columns', self::MENU_ITEM_POST_TYPE ), array( $this, 'no_title_sorting' ) );
- add_filter( sprintf( 'manage_%s_posts_columns', self::MENU_ITEM_POST_TYPE ), array( $this, 'menu_item_columns' ) );
-
- add_action( sprintf( 'manage_%s_posts_custom_column', self::MENU_ITEM_POST_TYPE ), array( $this, 'menu_item_column_callback' ), 10, 2 );
- }
-
- function menu_item_columns( $columns ) {
- unset( $columns['date'], $columns['likes'] );
-
- $columns['thumbnail'] = __( 'Thumbnail', 'jetpack' );
- $columns['labels'] = __( 'Labels', 'jetpack' );
- $columns['price'] = __( 'Price', 'jetpack' );
- $columns['order'] = __( 'Order', 'jetpack' );
-
- return $columns;
- }
-
- function menu_item_column_callback( $column, $post_id ) {
- $screen = get_current_screen();
-
- switch ( $column ) {
- case 'thumbnail':
- echo get_the_post_thumbnail( $post_id, array( 50, 50 ) );
- break;
- case 'labels' :
- $this->list_admin_labels( $post_id );
- break;
- case 'price' :
- $this->display_price( $post_id );
- break;
- case 'order' :
- $url = admin_url( $screen->parent_file );
-
- $up_url = add_query_arg( array(
- 'action' => 'move-item-up',
- 'post_id' => (int) $post_id,
- ), wp_nonce_url( $url, 'nova_move_item_up_' . $post_id ) );
-
- $down_url = add_query_arg( array(
- 'action' => 'move-item-down',
- 'post_id' => (int) $post_id,
- ), wp_nonce_url( $url, 'nova_move_item_down_' . $post_id ) );
- $menu_item = get_post($post_id);
- $this->get_menu_by_post_id( $post_id );
- if ( $term_id = $this->get_menu_by_post_id( $post_id ) ) {
- $term_id = $term_id->term_id;
- }
- ?>
- <input type="hidden" class="menu-order-value" name="nova_order[<?php echo (int) $post_id ?>]" value="<?php echo esc_attr( $menu_item->menu_order ) ?>" />
- <input type="hidden" class='nova-menu-term' name="nova_menu_term[<?php echo (int) $post_id ?>]" value="<?php echo esc_attr( $term_id ); ?>">
-
- <span class="hide-if-js">
- &nbsp; &nbsp; &mdash; <a class="nova-move-item-up" data-post-id="<?php echo (int) $post_id; ?>" href="<?php echo esc_url( $up_url ); ?>">up</a>
- <br />
- &nbsp; &nbsp; &mdash; <a class="nova-move-item-down" data-post-id="<?php echo (int) $post_id; ?>" href="<?php echo esc_url( $down_url ); ?>">down</a>
- </span>
- <?php
- break;
- }
- }
-
- function get_menu_by_post_id( $post_id = null ) {
- if ( ! $post_id )
- return false;
-
- $terms = get_the_terms( $post_id, self::MENU_TAX );
-
- if ( ! is_array( $terms ) )
- return false;
-
- return array_pop( $terms );
- }
-
- /**
- * Fires on a menu edit page. We might have drag-n-drop reordered
- */
- function maybe_reorder_menu_items() {
- // make sure we clicked our button
- if ( ! ( isset( $_REQUEST['menu_reorder_submit'] ) && $_REQUEST['menu_reorder_submit'] === __( 'Save New Order', 'jetpack' ) ) )
- return;
- ;
-
- // make sure we have the nonce
- if ( ! ( isset( $_REQUEST['drag-drop-reorder'] ) && wp_verify_nonce( $_REQUEST['drag-drop-reorder'], 'drag-drop-reorder' ) ) )
- return;
-
- $term_pairs = array_map( 'absint', $_REQUEST['nova_menu_term'] );
- $order_pairs = array_map( 'absint', $_REQUEST['nova_order'] );
-
- foreach( $order_pairs as $ID => $menu_order ) {
- $ID = absint( $ID );
- unset( $order_pairs[$ID] );
- if ( $ID < 0 )
- continue;
-
- $post = get_post( $ID );
- if ( ! $post )
- continue;
-
- // save a write if the order hasn't changed
- if ( $menu_order != $post->menu_order )
- wp_update_post( compact( 'ID', 'menu_order' ) );
-
- // save a write if the term hasn't changed
- if ( $term_pairs[$ID] != $this->get_menu_by_post_id( $ID )->term_id )
- wp_set_object_terms( $ID, $term_pairs[$ID], self::MENU_TAX );
-
- }
-
- $redirect = add_query_arg( array(
- 'post_type' => self::MENU_ITEM_POST_TYPE,
- 'nova_reordered' => '1'
- ), admin_url( 'edit.php' ) );
- wp_safe_redirect( $redirect );
- exit;
-
- }
-
- function edit_menu_items_page_load() {
- if ( isset( $_GET['action'] ) ) {
- $this->handle_menu_item_actions();
- }
-
- $this->maybe_reorder_menu_items();
-
- wp_enqueue_script(
- 'nova-drag-drop',
- Jetpack::get_file_url_for_environment(
- '_inc/build/custom-post-types/js/nova-drag-drop.min.js',
- 'modules/custom-post-types/js/nova-drag-drop.js'
- ),
- array( 'jquery-ui-sortable' ),
- $this->version,
- true
- );
-
- wp_localize_script( 'nova-drag-drop', '_novaDragDrop', array(
- 'nonce' => wp_create_nonce( 'drag-drop-reorder' ),
- 'nonceName' => 'drag-drop-reorder',
- 'reorder' => __( 'Save New Order', 'jetpack' ),
- 'reorderName' => 'menu_reorder_submit'
- ) );
- add_action( 'the_post', array( $this, 'show_menu_titles_in_menu_item_list' ) );
- }
-
- function handle_menu_item_actions() {
- $action = (string) $_GET['action'];
-
- switch ( $action ) {
- case 'move-item-up' :
- case 'move-item-down' :
- $reorder = false;
-
- $post_id = (int) $_GET['post_id'];
-
- $term = $this->get_menu_item_menu_leaf( $post_id );
-
- // Get all posts in that term
- $query = new WP_Query( array(
- 'taxonomy' => self::MENU_TAX,
- 'term' => $term->slug,
- ) );
-
- $order = array();
- foreach ( $query->posts as $post ) {
- $order[] = $post->ID;
- }
-
- if ( 'move-item-up' == $action ) {
- check_admin_referer( 'nova_move_item_up_' . $post_id );
-
- $first_post_id = $order[0];
- if ( $post_id == $first_post_id ) {
- break;
- }
-
- foreach ( $order as $menu_order => $order_post_id ) {
- if ( $post_id != $order_post_id ) {
- continue;
- }
-
- $swap_post_id = $order[$menu_order - 1];
- $order[$menu_order - 1] = $post_id;
- $order[$menu_order] = $swap_post_id;
-
- $reorder = true;
- break;
- }
- } else {
- check_admin_referer( 'nova_move_item_down_' . $post_id );
-
- $last_post_id = end( $order );
- if ( $post_id == $last_post_id ) {
- break;
- }
-
- foreach ( $order as $menu_order => $order_post_id ) {
- if ( $post_id != $order_post_id ) {
- continue;
- }
-
- $swap_post_id = $order[$menu_order + 1];
- $order[$menu_order + 1] = $post_id;
- $order[$menu_order] = $swap_post_id;
-
- $reorder = true;
- }
- }
-
- if ( $reorder ) {
- foreach ( $order as $menu_order => $ID ) {
- wp_update_post( compact( 'ID', 'menu_order' ) );
- }
- }
-
- break;
- case 'move-menu-up' :
- case 'move-menu-down' :
- $reorder = false;
-
- $term_id = (int) $_GET['term_id'];
-
- $terms = $this->get_menus();
-
- $order = array();
- foreach ( $terms as $term ) {
- $order[] = $term->term_id;
- }
-
- if ( 'move-menu-up' == $action ) {
- check_admin_referer( 'nova_move_menu_up_' . $term_id );
-
- $first_term_id = $order[0];
- if ( $term_id == $first_term_id ) {
- break;
- }
-
- foreach ( $order as $menu_order => $order_term_id ) {
- if ( $term_id != $order_term_id ) {
- continue;
- }
-
- $swap_term_id = $order[$menu_order - 1];
- $order[$menu_order - 1] = $term_id;
- $order[$menu_order] = $swap_term_id;
-
- $reorder = true;
- break;
- }
- } else {
- check_admin_referer( 'nova_move_menu_down_' . $term_id );
-
- $last_term_id = end( $order );
- if ( $term_id == $last_term_id ) {
- break;
- }
-
- foreach ( $order as $menu_order => $order_term_id ) {
- if ( $term_id != $order_term_id ) {
- continue;
- }
-
- $swap_term_id = $order[$menu_order + 1];
- $order[$menu_order + 1] = $term_id;
- $order[$menu_order] = $swap_term_id;
-
- $reorder = true;
- }
- }
-
- if ( $reorder ) {
- update_option( 'nova_menu_order', $order );
- }
-
- break;
- default :
- return;
- }
-
- $redirect = add_query_arg( array(
- 'post_type' => self::MENU_ITEM_POST_TYPE,
- 'nova_reordered' => '1'
- ), admin_url( 'edit.php' ) );
- wp_safe_redirect( $redirect );
- exit;
- }
-
- /*
- * Add menu title rows to the list table
- */
- function show_menu_titles_in_menu_item_list( $post ) {
- global $wp_list_table;
-
- static $last_term_id = false;
-
- $term = $this->get_menu_item_menu_leaf( $post->ID );
-
- $term_id = $term instanceof WP_Term ? $term->term_id : null;
-
- if ( false !== $last_term_id && $last_term_id === $term_id ) {
- return;
- }
-
- if ( is_null( $term_id ) ) {
- $last_term_id = null;
- $term_name = '';
- $parent_count = 0;
- } else {
- $last_term_id = $term->term_id;
- $term_name = $term->name;
- $parent_count = 0;
- $current_term = $term;
- while ( $current_term->parent ) {
- $parent_count++;
- $current_term = get_term( $current_term->parent, self::MENU_TAX );
- }
- }
-
- $non_order_column_count = $wp_list_table->get_column_count() - 1;
-
- $screen = get_current_screen();
-
- $url = admin_url( $screen->parent_file );
-
- $up_url = add_query_arg( array(
- 'action' => 'move-menu-up',
- 'term_id' => (int) $term_id,
- ), wp_nonce_url( $url, 'nova_move_menu_up_' . $term_id ) );
-
- $down_url = add_query_arg( array(
- 'action' => 'move-menu-down',
- 'term_id' => (int) $term_id,
- ), wp_nonce_url( $url, 'nova_move_menu_down_' . $term_id ) );
-
-?>
- <tr class="no-items menu-label-row" data-term_id="<?php echo esc_attr( $term_id ) ?>">
- <td class="colspanchange" colspan="<?php echo (int) $non_order_column_count; ?>">
- <h3><?php
- echo str_repeat( ' &mdash; ', (int) $parent_count );
-
- if ( $term instanceof WP_Term ) {
- echo esc_html( sanitize_term_field( 'name', $term_name, $term_id, self::MENU_TAX, 'display' ) );
- edit_term_link( __( 'edit', 'jetpack' ), '<span class="edit-nova-section"><span class="dashicon dashicon-edit"></span>', '</span>', $term );
-
- } else {
- _e( 'Uncategorized' , 'jetpack' );
- }
- ?></h3>
- </td>
- <td>
- <?php if ( $term instanceof WP_Term ) { ?>
- <a class="nova-move-menu-up" title="<?php esc_attr_e( 'Move menu section up', 'jetpack' ); ?>" href="<?php echo esc_url( $up_url ); ?>"><?php esc_html_e( 'UP', 'jetpack' ); ?></a>
- <br />
- <a class="nova-move-menu-down" title="<?php esc_attr_e( 'Move menu section down', 'jetpack' ); ?>" href="<?php echo esc_url( $down_url ); ?>"><?php esc_html_e( 'DOWN', 'jetpack' ); ?></a>
- <?php } ?>
- </td>
- </tr>
-<?php
- }
-
-/* Edit Many Items */
-
- function add_many_new_items_page_load() {
- if ( 'POST' === strtoupper( $_SERVER['REQUEST_METHOD'] ) ) {
- $this->process_form_request();
- exit;
- }
-
- $this->enqueue_many_items_scripts();
- }
-
- function enqueue_many_items_scripts() {
- wp_enqueue_script(
- 'nova-many-items',
- Jetpack::get_file_url_for_environment(
- '_inc/build/custom-post-types/js/many-items.min.js',
- 'modules/custom-post-types/js/many-items.js'
- ),
- array( 'jquery' ),
- $this->version,
- true
- );
- }
-
- function process_form_request() {
- if ( !isset( $_POST['nova_title'] ) || !is_array( $_POST['nova_title'] ) ) {
- return;
- }
-
- $is_ajax = !empty( $_POST['ajax'] );
-
- if ( $is_ajax ) {
- check_ajax_referer( 'nova_many_items' );
- } else {
- check_admin_referer( 'nova_many_items' );
- }
-
- foreach ( array_keys( $_POST['nova_title'] ) as $key ) :
- // $_POST is already slashed
- $post_details = array(
- 'post_status' => 'publish',
- 'post_type' => self::MENU_ITEM_POST_TYPE,
- 'post_content' => $_POST['nova_content'][$key],
- 'post_title' => $_POST['nova_title'][$key],
- 'tax_input' => array(
- self::MENU_ITEM_LABEL_TAX => $_POST['nova_labels'][$key],
- self::MENU_TAX => isset( $_POST['nova_menu_tax'] ) ? $_POST['nova_menu_tax'] : null,
- ),
- );
-
- $post_id = wp_insert_post( $post_details );
- if ( !$post_id || is_wp_error( $post_id ) ) {
- continue;
- }
-
- $this->set_price( $post_id, isset( $_POST['nova_price'][$key] ) ? stripslashes( $_POST['nova_price'][$key] ) : '' );
-
- if ( $is_ajax ) :
- $post = get_post( $post_id );
- $GLOBALS['post'] = $post;
- setup_postdata( $post );
-
-?>
- <td><?php the_title(); ?></td>
- <td class="nova-price"><?php $this->display_price(); ?></td>
- <td><?php $this->list_labels( $post_id ); ?></td>
- <td><?php the_content(); ?></td>
-<?php
- endif;
-
- endforeach;
-
- if ( $is_ajax ) {
- exit;
- }
-
- wp_safe_redirect( admin_url( 'edit.php?post_type=' . self::MENU_ITEM_POST_TYPE ) );
- exit;
- }
-
- function add_many_new_items_page() {
-?>
- <div class="wrap">
- <h2><?php esc_html_e( 'Add Many Items', 'jetpack' ); ?></h2>
-
- <p><?php _e( 'Use the <kbd>TAB</kbd> key on your keyboard to move between colums and the <kbd>ENTER</kbd> or <kbd>RETURN</kbd> key to save each row and move on to the next.', 'jetpack' ); ?></p>
-
- <form method="post" action="" enctype="multipart/form-data">
- <p><h3><?php esc_html_e( 'Add to section:', 'jetpack' ); ?> <?php wp_dropdown_categories( array(
- 'id' => 'nova-menu-tax',
- 'name' => 'nova_menu_tax',
- 'taxonomy' => self::MENU_TAX,
- 'hide_empty' => false,
- 'hierarchical' => true,
- ) ); ?></h3></p>
-
- <table class="many-items-table wp-list-table widefat">
- <thead>
- <tr>
- <th scope="col"><?php esc_html_e( 'Name', 'jetpack' ); ?></th>
- <th scope="col" class="nova-price"><?php esc_html_e( 'Price', 'jetpack' ); ?></th>
- <th scope="col"><?php _e( 'Labels: <small>spicy, favorite, etc. <em>Separate Labels with commas</em></small>', 'jetpack' ); ?></th>
- <th scope="col"><?php esc_html_e( 'Description', 'jetpack' ); ?></th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><input type="text" name="nova_title[]" aria-required="true" /></td>
- <td class="nova-price"><input type="text" name="nova_price[]" /></td>
- <td><input type="text" name="nova_labels[]" /></td>
- <td><textarea name="nova_content[]" cols="20" rows="1"></textarea>
- </tr>
- </tbody>
- <tbody>
- <tr>
- <td><input type="text" name="nova_title[]" aria-required="true" /></td>
- <td class="nova-price"><input type="text" name="nova_price[]" /></td>
- <td><input type="text" name="nova_labels[]" /></td>
- <td><textarea name="nova_content[]" cols="20" rows="1"></textarea>
- </tr>
- </tbody>
- <tfoot>
- <tr>
- <th><a class="button button-secondary nova-new-row"><span class="dashicon dashicon-plus"></span> <?php esc_html_e( 'New Row' , 'jetpack' ); ?></a></th>
- <th class="nova-price"></th>
- <th></th>
- <th></th>
- </tr>
- </tfoot>
- </table>
-
- <p class="submit">
- <input type="submit" class="button-primary" value="<?php esc_attr_e( 'Add These New Menu Items', 'jetpack' ); ?>" />
- <?php wp_nonce_field( 'nova_many_items' ); ?>
- </p>
- </form>
- </div>
-<?php
- }
-
-/* Edit One Item */
-
- function register_menu_item_meta_boxes() {
- wp_enqueue_script( 'nova-menu-checkboxes' );
-
- add_meta_box( 'menu_item_price', __( 'Price', 'jetpack' ), array( $this, 'menu_item_price_meta_box' ), null, 'side', 'high' );
- }
-
- function menu_item_price_meta_box( $post, $meta_box ) {
- $price = $this->get_price( $post->ID );
-?>
- <label for="nova-price-<?php echo (int) $post->ID; ?>" class="screen-reader-text"><?php esc_html_e( 'Price', 'jetpack' ); ?></label>
- <input type="text" id="nova-price-<?php echo (int) $post->ID; ?>" class="widefat" name="nova_price[<?php echo (int) $post->ID; ?>]" value="<?php echo esc_attr( $price ); ?>" />
-<?php
- }
-
- function add_post_meta( $post_id ) {
- if ( !isset( $_POST['nova_price'][$post_id] ) ) {
- return;
- }
-
- $this->set_price( $post_id, stripslashes( $_POST['nova_price'][$post_id] ) );
- }
-
-/* Data */
-
- function get_menus( $args = array() ) {
- $args = wp_parse_args( $args, array(
- 'hide_empty' => false,
- ) );
-
- $terms = get_terms( self::MENU_TAX, $args );
- if ( !$terms || is_wp_error( $terms ) ) {
- return array();
- }
-
- $terms_by_id = array();
- foreach ( $terms as $term ) {
- $terms_by_id["{$term->term_id}"] = $term;
- }
-
- $term_order = get_option( 'nova_menu_order', array() );
-
- $return = array();
- foreach ( $term_order as $term_id ) {
- if ( isset( $terms_by_id["$term_id"] ) ) {
- $return[] = $terms_by_id["$term_id"];
- unset( $terms_by_id["$term_id"] );
- }
- }
-
- foreach ( $terms_by_id as $term_id => $term ) {
- $return[] = $term;
- }
-
- return $return;
- }
-
- function get_menu_item_menu_leaf( $post_id ) {
- // Get first menu taxonomy "leaf"
- $term_ids = wp_get_object_terms( $post_id, self::MENU_TAX, array( 'fields' => 'ids' ) );
-
- foreach ( $term_ids as $term_id ) {
- $children = get_term_children( $term_id, self::MENU_TAX );
- if ( ! $children ) {
- break;
- }
- }
-
- if ( ! isset( $term_id ) ) {
- return false;
- }
-
- return get_term( $term_id, self::MENU_TAX );
-
- }
-
- function list_labels( $post_id = 0 ) {
- $post = get_post( $post_id );
- echo get_the_term_list( $post->ID, self::MENU_ITEM_LABEL_TAX, '', _x( ', ', 'Nova label separator', 'jetpack' ), '' );
- }
-
- function list_admin_labels( $post_id = 0 ) {
- $post = get_post( $post_id );
- $labels = get_the_terms( $post->ID, self::MENU_ITEM_LABEL_TAX );
- if ( !empty( $labels ) ) {
- $out = array();
- foreach ( $labels as $label ) {
- $out[] = sprintf( '<a href="%s">%s</a>',
- esc_url( add_query_arg( array(
- 'post_type' => self::MENU_ITEM_POST_TYPE,
- 'taxonomy' => self::MENU_ITEM_LABEL_TAX,
- 'term' => $label->slug
- ), 'edit.php' ) ),
- esc_html( sanitize_term_field( 'name', $label->name, $label->term_id, self::MENU_ITEM_LABEL_TAX, 'display' ) )
- );
- }
-
- echo join( _x( ', ', 'Nova label separator', 'jetpack' ), $out );
- } else {
- esc_html_e( 'No Labels', 'jetpack' );
- }
- }
-
- function set_price( $post_id = 0, $price = '' ) {
- $post = get_post( $post_id );
-
- return update_post_meta( $post->ID, 'nova_price', $price );
- }
-
- function get_price( $post_id = 0 ) {
- $post = get_post( $post_id );
-
- return get_post_meta( $post->ID, 'nova_price', true );
- }
-
- function display_price( $post_id = 0 ) {
- echo esc_html( $this->get_price( $post_id ) );
- }
-
-/* Menu Item Loop Markup */
-
- /* Does not support nested loops */
-
- function get_menu_item_loop_markup( $field = null ) {
- return $this->menu_item_loop_markup;
- }
-
- /**
- * Sets up the loop markup.
- * Attached to the 'template_include' *filter*,
- * which fires only during a real blog view (not in admin, feeds, etc.)
- *
- * @param string Template File
- * @return string Template File. VERY Important.
- */
- function setup_menu_item_loop_markup__in_filter( $template ) {
- add_action( 'loop_start', array( $this, 'start_menu_item_loop' ) );
-
- return $template;
- }
-
- /**
- * If the Query is a Menu Item Query, start outputing the Menu Item Loop Marku
- * Attached to the 'loop_start' action.
- *
- * @param WP_Query
- */
- function start_menu_item_loop( $query ) {
- if ( !$this->is_menu_item_query( $query ) ) {
- return;
- }
-
- $this->menu_item_loop_last_term_id = false;
- $this->menu_item_loop_current_term = false;
-
- add_action( 'the_post', array( $this, 'menu_item_loop_each_post' ) );
- add_action( 'loop_end', array( $this, 'stop_menu_item_loop' ) );
- }
-
- /**
- * Outputs the Menu Item Loop Marku
- * Attached to the 'the_post' action.
- *
- * @param WP_Post
- */
- function menu_item_loop_each_post( $post ) {
- $this->menu_item_loop_current_term = $this->get_menu_item_menu_leaf( $post->ID );
-
- if ( false === $this->menu_item_loop_last_term_id ) {
- // We're at the very beginning of the loop
-
- $this->menu_item_loop_open_element( 'menu' ); // Start a new menu section
- $this->menu_item_loop_header(); // Output the menu's header
- } elseif ( $this->menu_item_loop_last_term_id != $this->menu_item_loop_current_term->term_id ) {
- // We're not at the very beginning but still need to start a new menu section. End the previous menu section first.
-
- $this->menu_item_loop_close_element( 'menu' ); // End the previous menu section
- $this->menu_item_loop_open_element( 'menu' ); // Start a new menu section
- $this->menu_item_loop_header(); // Output the menu's header
- }
-
- $this->menu_item_loop_last_term_id = $this->menu_item_loop_current_term->term_id;
- }
-
- /**
- * If the Query is a Menu Item Query, stop outputing the Menu Item Loop Marku
- * Attached to the 'loop_end' action.
- *
- * @param WP_Query
- */
- function stop_menu_item_loop( $query ) {
- if ( !$this->is_menu_item_query( $query ) ) {
- return;
- }
-
- remove_action( 'the_post', array( $this, 'menu_item_loop_each_post' ) );
- remove_action( 'loop_start', array( $this, 'start_menu_item_loop' ) );
- remove_action( 'loop_end', array( $this, 'stop_menu_item_loop' ) );
-
- $this->menu_item_loop_close_element( 'menu' ); // End the last menu section
- }
-
- /**
- * Outputs the Menu Group Header
- */
- function menu_item_loop_header() {
- $this->menu_item_loop_open_element( 'menu_header' );
- $this->menu_item_loop_open_element( 'menu_title' );
- echo esc_html( $this->menu_item_loop_current_term->name ); // @todo tax filter
- $this->menu_item_loop_close_element( 'menu_title' );
- if ( $this->menu_item_loop_current_term->description ) :
- $this->menu_item_loop_open_element( 'menu_description' );
- echo esc_html( $this->menu_item_loop_current_term->description ); // @todo kses, tax filter
- $this->menu_item_loop_close_element( 'menu_description' );
- endif;
- $this->menu_item_loop_close_element( 'menu_header' );
- }
-
- /**
- * Outputs a Menu Item Markup element opening tag
- *
- * @param string $field - Menu Item Markup settings field.
- */
- function menu_item_loop_open_element( $field ) {
- $markup = $this->get_menu_item_loop_markup();
- /**
- * Filter a menu item's element opening tag.
- *
- * @module custom-content-types
- *
- * @since 4.4.0
- *
- * @param string $tag Menu item's element opening tag.
- * @param string $field Menu Item Markup settings field.
- * @param array $markup Array of markup elements for the menu item.
- * @param false|object $term Taxonomy term for current menu item.
- */
- echo apply_filters(
- 'jetpack_nova_menu_item_loop_open_element',
- '<' . tag_escape( $markup["{$field}_tag"] ) . $this->menu_item_loop_class( $markup["{$field}_class"] ) . ">\n",
- $field,
- $markup,
- $this->menu_item_loop_current_term
- );
- }
-
- /**
- * Outputs a Menu Item Markup element closing tag
- *
- * @param string $field - Menu Item Markup settings field
- */
- function menu_item_loop_close_element( $field ) {
- $markup = $this->get_menu_item_loop_markup();
- /**
- * Filter a menu item's element closing tag.
- *
- * @module custom-content-types
- *
- * @since 4.4.0
- *
- * @param string $tag Menu item's element closing tag.
- * @param string $field Menu Item Markup settings field.
- * @param array $markup Array of markup elements for the menu item.
- * @param false|object $term Taxonomy term for current menu item.
- */
- echo apply_filters(
- 'jetpack_nova_menu_item_loop_close_element',
- '</' . tag_escape( $markup["{$field}_tag"] ) . ">\n",
- $field,
- $markup,
- $this->menu_item_loop_current_term
- );
- }
-
- /**
- * Returns a Menu Item Markup element's class attribute.
- *
- * @param string $class Class name.
- * @return string HTML class attribute with leading whitespace.
- */
- function menu_item_loop_class( $class ) {
- if ( ! $class ) {
- return '';
- }
-
- /**
- * Filter a menu Item Markup element's class attribute.
- *
- * @module custom-content-types
- *
- * @since 4.4.0
- *
- * @param string $tag Menu Item Markup element's class attribute.
- * @param string $class Menu Item Class name.
- * @param false|object $term Taxonomy term for current menu item.
- */
- return apply_filters(
- 'jetpack_nova_menu_item_loop_class',
- ' class="' . esc_attr( $class ) . '"',
- $class,
- $this->menu_item_loop_current_term
- );
- }
-}
-
-add_action( 'init', array( 'Nova_Restaurant', 'init' ) );
diff --git a/plugins/jetpack/modules/custom-post-types/portfolios.php b/plugins/jetpack/modules/custom-post-types/portfolios.php
deleted file mode 100644
index 43d9d455..00000000
--- a/plugins/jetpack/modules/custom-post-types/portfolios.php
+++ /dev/null
@@ -1,930 +0,0 @@
-<?php
-
-class Jetpack_Portfolio {
- const CUSTOM_POST_TYPE = 'jetpack-portfolio';
- const CUSTOM_TAXONOMY_TYPE = 'jetpack-portfolio-type';
- const CUSTOM_TAXONOMY_TAG = 'jetpack-portfolio-tag';
- const OPTION_NAME = 'jetpack_portfolio';
- const OPTION_READING_SETTING = 'jetpack_portfolio_posts_per_page';
-
- public $version = '0.1';
-
- static function init() {
- static $instance = false;
-
- if ( ! $instance ) {
- $instance = new Jetpack_Portfolio;
- }
-
- return $instance;
- }
-
- /**
- * Conditionally hook into WordPress.
- *
- * Setup user option for enabling CPT
- * If user has CPT enabled, show in admin
- */
- function __construct() {
- // Add an option to enable the CPT
- add_action( 'admin_init', array( $this, 'settings_api_init' ) );
-
- // Check on theme switch if theme supports CPT and setting is disabled
- add_action( 'after_switch_theme', array( $this, 'activation_post_type_support' ) );
-
- // Make sure the post types are loaded for imports
- add_action( 'import_start', array( $this, 'register_post_types' ) );
-
- // Add to REST API post type whitelist
- add_filter( 'rest_api_allowed_post_types', array( $this, 'allow_portfolio_rest_api_type' ) );
-
- $setting = Jetpack_Options::get_option_and_ensure_autoload( self::OPTION_NAME, '0' );
-
- // Bail early if Portfolio option is not set and the theme doesn't declare support
- if ( empty( $setting ) && ! $this->site_supports_custom_post_type() ) {
- return;
- }
-
- // CPT magic
- $this->register_post_types();
- add_action( sprintf( 'add_option_%s', self::OPTION_NAME ), array( $this, 'flush_rules_on_enable' ), 10 );
- add_action( sprintf( 'update_option_%s', self::OPTION_NAME ), array( $this, 'flush_rules_on_enable' ), 10 );
- add_action( sprintf( 'publish_%s', self::CUSTOM_POST_TYPE), array( $this, 'flush_rules_on_first_project' ) );
- add_action( 'after_switch_theme', array( $this, 'flush_rules_on_switch' ) );
-
- // Admin Customization
- add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) );
- add_filter( sprintf( 'manage_%s_posts_columns', self::CUSTOM_POST_TYPE), array( $this, 'edit_admin_columns' ) );
- add_filter( sprintf( 'manage_%s_posts_custom_column', self::CUSTOM_POST_TYPE), array( $this, 'image_column' ), 10, 2 );
- add_action( 'customize_register', array( $this, 'customize_register' ) );
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
-
- // Track all the things
- add_action( sprintf( 'add_option_%s', self::OPTION_NAME ), array( $this, 'new_activation_stat_bump' ) );
- add_action( sprintf( 'update_option_%s', self::OPTION_NAME ), array( $this, 'update_option_stat_bump' ), 11, 2 );
- add_action( sprintf( 'publish_%s', self::CUSTOM_POST_TYPE), array( $this, 'new_project_stat_bump' ) );
- }
-
- add_image_size( 'jetpack-portfolio-admin-thumb', 50, 50, true );
- add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_styles' ) );
-
- // register jetpack_portfolio shortcode and portfolio shortcode (legacy)
- add_shortcode( 'portfolio', array( $this, 'portfolio_shortcode' ) );
- add_shortcode( 'jetpack_portfolio', array( $this, 'portfolio_shortcode' ) );
-
- // Adjust CPT archive and custom taxonomies to obey CPT reading setting
- add_filter( 'infinite_scroll_settings', array( $this, 'infinite_scroll_click_posts_per_page' ) );
- add_filter( 'infinite_scroll_results', array( $this, 'infinite_scroll_results' ), 10, 3 );
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- // Add to Dotcom XML sitemaps
- add_filter( 'wpcom_sitemap_post_types', array( $this, 'add_to_sitemap' ) );
- } else {
- // Add to Jetpack XML sitemap
- add_filter( 'jetpack_sitemap_post_types', array( $this, 'add_to_sitemap' ) );
- }
-
- // Adjust CPT archive and custom taxonomies to obey CPT reading setting
- add_filter( 'pre_get_posts', array( $this, 'query_reading_setting' ) );
-
- // If CPT was enabled programatically and no CPT items exist when user switches away, disable
- if ( $setting && $this->site_supports_custom_post_type() ) {
- add_action( 'switch_theme', array( $this, 'deactivation_post_type_support' ) );
- }
- }
-
- /**
- * Add a checkbox field in 'Settings' > 'Writing'
- * for enabling CPT functionality.
- *
- * @return null
- */
- function settings_api_init() {
- add_settings_field(
- self::OPTION_NAME,
- '<span class="cpt-options">' . __( 'Portfolio Projects', 'jetpack' ) . '</span>',
- array( $this, 'setting_html' ),
- 'writing',
- 'jetpack_cpt_section'
- );
- register_setting(
- 'writing',
- self::OPTION_NAME,
- 'intval'
- );
-
- // Check if CPT is enabled first so that intval doesn't get set to NULL on re-registering
- if ( get_option( self::OPTION_NAME, '0' ) || current_theme_supports( self::CUSTOM_POST_TYPE ) ) {
- register_setting(
- 'writing',
- self::OPTION_READING_SETTING,
- 'intval'
- );
- }
- }
-
- /**
- * HTML code to display a checkbox true/false option
- * for the Portfolio CPT setting.
- *
- * @return html
- */
- function setting_html() {
- if ( current_theme_supports( self::CUSTOM_POST_TYPE ) ) : ?>
- <p><?php printf( /* translators: %s is the name of a custom post type such as "jetpack-portfolio" */ __( 'Your theme supports <strong>%s</strong>', 'jetpack' ), self::CUSTOM_POST_TYPE ); ?></p>
- <?php else : ?>
- <label for="<?php echo esc_attr( self::OPTION_NAME ); ?>">
- <input name="<?php echo esc_attr( self::OPTION_NAME ); ?>" id="<?php echo esc_attr( self::OPTION_NAME ); ?>" <?php echo checked( get_option( self::OPTION_NAME, '0' ), true, false ); ?> type="checkbox" value="1" />
- <?php esc_html_e( 'Enable Portfolio Projects for this site.', 'jetpack' ); ?>
- <a target="_blank" href="http://en.support.wordpress.com/portfolios/"><?php esc_html_e( 'Learn More', 'jetpack' ); ?></a>
- </label>
- <?php endif;
- if ( get_option( self::OPTION_NAME, '0' ) || current_theme_supports( self::CUSTOM_POST_TYPE ) ) :
- printf( '<p><label for="%1$s">%2$s</label></p>',
- esc_attr( self::OPTION_READING_SETTING ),
- /* translators: %1$s is replaced with an input field for numbers */
- sprintf( __( 'Portfolio pages display at most %1$s projects', 'jetpack' ),
- sprintf( '<input name="%1$s" id="%1$s" type="number" step="1" min="1" value="%2$s" class="small-text" />',
- esc_attr( self::OPTION_READING_SETTING ),
- esc_attr( get_option( self::OPTION_READING_SETTING, '10' ) )
- )
- )
- );
- endif;
- }
-
- /*
- * Bump Portfolio > New Activation stat
- */
- function new_activation_stat_bump() {
- bump_stats_extras( 'portfolios', 'new-activation' );
- }
-
- /*
- * Bump Portfolio > Option On/Off stats to get total active
- */
- function update_option_stat_bump( $old, $new ) {
- if ( empty( $old ) && ! empty( $new ) ) {
- bump_stats_extras( 'portfolios', 'option-on' );
- }
-
- if ( ! empty( $old ) && empty( $new ) ) {
- bump_stats_extras( 'portfolios', 'option-off' );
- }
- }
-
- /*
- * Bump Portfolio > Published Projects stat when projects are published
- */
- function new_project_stat_bump() {
- bump_stats_extras( 'portfolios', 'published-projects' );
- }
-
- /**
- * Should this Custom Post Type be made available?
- */
- function site_supports_custom_post_type() {
- // If the current theme requests it.
- if ( current_theme_supports( self::CUSTOM_POST_TYPE ) || get_option( self::OPTION_NAME, '0' ) ) {
- return true;
- }
-
- // Otherwise, say no unless something wants to filter us to say yes.
- /** This action is documented in modules/custom-post-types/nova.php */
- return (bool) apply_filters( 'jetpack_enable_cpt', false, self::CUSTOM_POST_TYPE );
- }
-
- /*
- * Flush permalinks when CPT option is turned on/off
- */
- function flush_rules_on_enable() {
- flush_rewrite_rules();
- }
-
- /*
- * Count published projects and flush permalinks when first projects is published
- */
- function flush_rules_on_first_project() {
- $projects = get_transient( 'jetpack-portfolio-count-cache' );
-
- if ( false === $projects ) {
- flush_rewrite_rules();
- $projects = (int) wp_count_posts( self::CUSTOM_POST_TYPE )->publish;
-
- if ( ! empty( $projects ) ) {
- set_transient( 'jetpack-portfolio-count-cache', $projects, HOUR_IN_SECONDS * 12 );
- }
- }
- }
-
- /*
- * Flush permalinks when CPT supported theme is activated
- */
- function flush_rules_on_switch() {
- if ( current_theme_supports( self::CUSTOM_POST_TYPE ) ) {
- flush_rewrite_rules();
- }
- }
-
- /**
- * On plugin/theme activation, check if current theme supports CPT
- */
- static function activation_post_type_support() {
- if ( current_theme_supports( self::CUSTOM_POST_TYPE ) ) {
- update_option( self::OPTION_NAME, '1' );
- }
- }
-
- /**
- * On theme switch, check if CPT item exists and disable if not
- */
- function deactivation_post_type_support() {
- $portfolios = get_posts( array(
- 'fields' => 'ids',
- 'posts_per_page' => 1,
- 'post_type' => self::CUSTOM_POST_TYPE,
- 'suppress_filters' => false
- ) );
-
- if ( empty( $portfolios ) ) {
- update_option( self::OPTION_NAME, '0' );
- }
- }
-
- /**
- * Register Post Type
- */
- function register_post_types() {
- if ( post_type_exists( self::CUSTOM_POST_TYPE ) ) {
- return;
- }
-
- register_post_type( self::CUSTOM_POST_TYPE, array(
- 'description' => __( 'Portfolio Items', 'jetpack' ),
- 'labels' => array(
- 'name' => esc_html__( 'Projects', 'jetpack' ),
- 'singular_name' => esc_html__( 'Project', 'jetpack' ),
- 'menu_name' => esc_html__( 'Portfolio', 'jetpack' ),
- 'all_items' => esc_html__( 'All Projects', 'jetpack' ),
- 'add_new' => esc_html__( 'Add New', 'jetpack' ),
- 'add_new_item' => esc_html__( 'Add New Project', 'jetpack' ),
- 'edit_item' => esc_html__( 'Edit Project', 'jetpack' ),
- 'new_item' => esc_html__( 'New Project', 'jetpack' ),
- 'view_item' => esc_html__( 'View Project', 'jetpack' ),
- 'search_items' => esc_html__( 'Search Projects', 'jetpack' ),
- 'not_found' => esc_html__( 'No Projects found', 'jetpack' ),
- 'not_found_in_trash' => esc_html__( 'No Projects found in Trash', 'jetpack' ),
- 'filter_items_list' => esc_html__( 'Filter projects list', 'jetpack' ),
- 'items_list_navigation' => esc_html__( 'Project list navigation', 'jetpack' ),
- 'items_list' => esc_html__( 'Projects list', 'jetpack' ),
- ),
- 'supports' => array(
- 'title',
- 'editor',
- 'thumbnail',
- 'author',
- 'comments',
- 'publicize',
- 'wpcom-markdown',
- 'revisions',
- 'excerpt',
- ),
- 'rewrite' => array(
- 'slug' => 'portfolio',
- 'with_front' => false,
- 'feeds' => true,
- 'pages' => true,
- ),
- 'public' => true,
- 'show_ui' => true,
- 'menu_position' => 20, // below Pages
- 'menu_icon' => 'dashicons-portfolio', // 3.8+ dashicon option
- 'capability_type' => 'page',
- 'map_meta_cap' => true,
- 'taxonomies' => array( self::CUSTOM_TAXONOMY_TYPE, self::CUSTOM_TAXONOMY_TAG ),
- 'has_archive' => true,
- 'query_var' => 'portfolio',
- 'show_in_rest' => true,
- ) );
-
- register_taxonomy( self::CUSTOM_TAXONOMY_TYPE, self::CUSTOM_POST_TYPE, array(
- 'hierarchical' => true,
- 'labels' => array(
- 'name' => esc_html__( 'Project Types', 'jetpack' ),
- 'singular_name' => esc_html__( 'Project Type', 'jetpack' ),
- 'menu_name' => esc_html__( 'Project Types', 'jetpack' ),
- 'all_items' => esc_html__( 'All Project Types', 'jetpack' ),
- 'edit_item' => esc_html__( 'Edit Project Type', 'jetpack' ),
- 'view_item' => esc_html__( 'View Project Type', 'jetpack' ),
- 'update_item' => esc_html__( 'Update Project Type', 'jetpack' ),
- 'add_new_item' => esc_html__( 'Add New Project Type', 'jetpack' ),
- 'new_item_name' => esc_html__( 'New Project Type Name', 'jetpack' ),
- 'parent_item' => esc_html__( 'Parent Project Type', 'jetpack' ),
- 'parent_item_colon' => esc_html__( 'Parent Project Type:', 'jetpack' ),
- 'search_items' => esc_html__( 'Search Project Types', 'jetpack' ),
- 'items_list_navigation' => esc_html__( 'Project type list navigation', 'jetpack' ),
- 'items_list' => esc_html__( 'Project type list', 'jetpack' ),
- ),
- 'public' => true,
- 'show_ui' => true,
- 'show_in_nav_menus' => true,
- 'show_in_rest' => true,
- 'show_admin_column' => true,
- 'query_var' => true,
- 'rewrite' => array( 'slug' => 'project-type' ),
- ) );
-
- register_taxonomy( self::CUSTOM_TAXONOMY_TAG, self::CUSTOM_POST_TYPE, array(
- 'hierarchical' => false,
- 'labels' => array(
- 'name' => esc_html__( 'Project Tags', 'jetpack' ),
- 'singular_name' => esc_html__( 'Project Tag', 'jetpack' ),
- 'menu_name' => esc_html__( 'Project Tags', 'jetpack' ),
- 'all_items' => esc_html__( 'All Project Tags', 'jetpack' ),
- 'edit_item' => esc_html__( 'Edit Project Tag', 'jetpack' ),
- 'view_item' => esc_html__( 'View Project Tag', 'jetpack' ),
- 'update_item' => esc_html__( 'Update Project Tag', 'jetpack' ),
- 'add_new_item' => esc_html__( 'Add New Project Tag', 'jetpack' ),
- 'new_item_name' => esc_html__( 'New Project Tag Name', 'jetpack' ),
- 'search_items' => esc_html__( 'Search Project Tags', 'jetpack' ),
- 'popular_items' => esc_html__( 'Popular Project Tags', 'jetpack' ),
- 'separate_items_with_commas' => esc_html__( 'Separate tags with commas', 'jetpack' ),
- 'add_or_remove_items' => esc_html__( 'Add or remove tags', 'jetpack' ),
- 'choose_from_most_used' => esc_html__( 'Choose from the most used tags', 'jetpack' ),
- 'not_found' => esc_html__( 'No tags found.', 'jetpack' ),
- 'items_list_navigation' => esc_html__( 'Project tag list navigation', 'jetpack' ),
- 'items_list' => esc_html__( 'Project tag list', 'jetpack' ),
- ),
- 'public' => true,
- 'show_ui' => true,
- 'show_in_nav_menus' => true,
- 'show_in_rest' => true,
- 'show_admin_column' => true,
- 'query_var' => true,
- 'rewrite' => array( 'slug' => 'project-tag' ),
- ) );
- }
-
- /**
- * Update messages for the Portfolio admin.
- */
- function updated_messages( $messages ) {
- global $post;
-
- $messages[self::CUSTOM_POST_TYPE] = array(
- 0 => '', // Unused. Messages start at index 1.
- 1 => sprintf( __( 'Project updated. <a href="%s">View item</a>', 'jetpack'), esc_url( get_permalink( $post->ID ) ) ),
- 2 => esc_html__( 'Custom field updated.', 'jetpack' ),
- 3 => esc_html__( 'Custom field deleted.', 'jetpack' ),
- 4 => esc_html__( 'Project updated.', 'jetpack' ),
- /* translators: %s: date and time of the revision */
- 5 => isset( $_GET['revision'] ) ? sprintf( esc_html__( 'Project restored to revision from %s', 'jetpack'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
- 6 => sprintf( __( 'Project published. <a href="%s">View project</a>', 'jetpack' ), esc_url( get_permalink( $post->ID ) ) ),
- 7 => esc_html__( 'Project saved.', 'jetpack' ),
- 8 => sprintf( __( 'Project submitted. <a target="_blank" href="%s">Preview project</a>', 'jetpack'), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) ),
- 9 => sprintf( __( 'Project scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview project</a>', 'jetpack' ),
- // translators: Publish box date format, see http://php.net/date
- date_i18n( __( 'M j, Y @ G:i', 'jetpack' ), strtotime( $post->post_date ) ), esc_url( get_permalink( $post->ID ) ) ),
- 10 => sprintf( __( 'Project item draft updated. <a target="_blank" href="%s">Preview project</a>', 'jetpack' ), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) ),
- );
-
- return $messages;
- }
-
- /**
- * Change ‘Title’ column label
- * Add Featured Image column
- */
- function edit_admin_columns( $columns ) {
- // change 'Title' to 'Project'
- $columns['title'] = __( 'Project', 'jetpack' );
- if ( current_theme_supports( 'post-thumbnails' ) ) {
- // add featured image before 'Project'
- $columns = array_slice( $columns, 0, 1, true ) + array( 'thumbnail' => '' ) + array_slice( $columns, 1, NULL, true );
- }
-
- return $columns;
- }
-
- /**
- * Add featured image to column
- */
- function image_column( $column, $post_id ) {
- global $post;
- switch ( $column ) {
- case 'thumbnail':
- echo get_the_post_thumbnail( $post_id, 'jetpack-portfolio-admin-thumb' );
- break;
- }
- }
-
- /**
- * Adjust image column width
- */
- function enqueue_admin_styles( $hook ) {
- $screen = get_current_screen();
-
- if ( 'edit.php' == $hook && self::CUSTOM_POST_TYPE == $screen->post_type && current_theme_supports( 'post-thumbnails' ) ) {
- wp_add_inline_style( 'wp-admin', '.manage-column.column-thumbnail { width: 50px; } @media screen and (max-width: 360px) { .column-thumbnail{ display:none; } }' );
- }
- }
-
- /**
- * Adds portfolio section to the Customizer.
- */
- function customize_register( $wp_customize ) {
- $options = get_theme_support( self::CUSTOM_POST_TYPE );
-
- if ( ( ! isset( $options[0]['title'] ) || true !== $options[0]['title'] ) && ( ! isset( $options[0]['content'] ) || true !== $options[0]['content'] ) && ( ! isset( $options[0]['featured-image'] ) || true !== $options[0]['featured-image'] ) ) {
- return;
- }
-
- $wp_customize->add_section( 'jetpack_portfolio', array(
- 'title' => esc_html__( 'Portfolio', 'jetpack' ),
- 'theme_supports' => self::CUSTOM_POST_TYPE,
- 'priority' => 130,
- ) );
-
- if ( isset( $options[0]['title'] ) && true === $options[0]['title'] ) {
- $wp_customize->add_setting( 'jetpack_portfolio_title', array(
- 'default' => esc_html__( 'Projects', 'jetpack' ),
- 'type' => 'option',
- 'sanitize_callback' => 'sanitize_text_field',
- 'sanitize_js_callback' => 'sanitize_text_field',
- ) );
-
- $wp_customize->add_control( 'jetpack_portfolio_title', array(
- 'section' => 'jetpack_portfolio',
- 'label' => esc_html__( 'Portfolio Archive Title', 'jetpack' ),
- 'type' => 'text',
- ) );
- }
-
- if ( isset( $options[0]['content'] ) && true === $options[0]['content'] ) {
- $wp_customize->add_setting( 'jetpack_portfolio_content', array(
- 'default' => '',
- 'type' => 'option',
- 'sanitize_callback' => 'wp_kses_post',
- 'sanitize_js_callback' => 'wp_kses_post',
- ) );
-
- $wp_customize->add_control( 'jetpack_portfolio_content', array(
- 'section' => 'jetpack_portfolio',
- 'label' => esc_html__( 'Portfolio Archive Content', 'jetpack' ),
- 'type' => 'textarea',
- ) );
- }
-
- if ( isset( $options[0]['featured-image'] ) && true === $options[0]['featured-image'] ) {
- $wp_customize->add_setting( 'jetpack_portfolio_featured_image', array(
- 'default' => '',
- 'type' => 'option',
- 'sanitize_callback' => 'attachment_url_to_postid',
- 'sanitize_js_callback' => 'attachment_url_to_postid',
- 'theme_supports' => 'post-thumbnails',
- ) );
-
- $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'jetpack_portfolio_featured_image', array(
- 'section' => 'jetpack_portfolio',
- 'label' => esc_html__( 'Portfolio Archive Featured Image', 'jetpack' ),
- ) ) );
- }
- }
-
- /**
- * Follow CPT reading setting on CPT archive and taxonomy pages
- */
- function query_reading_setting( $query ) {
- if ( ( ! is_admin() || ( is_admin() && defined( 'DOING_AJAX' ) && DOING_AJAX ) )
- && $query->is_main_query()
- && ( $query->is_post_type_archive( self::CUSTOM_POST_TYPE )
- || $query->is_tax( self::CUSTOM_TAXONOMY_TYPE )
- || $query->is_tax( self::CUSTOM_TAXONOMY_TAG ) )
- ) {
- $query->set( 'posts_per_page', get_option( self::OPTION_READING_SETTING, '10' ) );
- }
- }
-
- /*
- * If Infinite Scroll is set to 'click', use our custom reading setting instead of core's `posts_per_page`.
- */
- function infinite_scroll_click_posts_per_page( $settings ) {
- global $wp_query;
-
- if ( ( ! is_admin() || ( is_admin() && defined( 'DOING_AJAX' ) && DOING_AJAX ) )
- && true === $settings['click_handle']
- && ( $wp_query->is_post_type_archive( self::CUSTOM_POST_TYPE )
- || $wp_query->is_tax( self::CUSTOM_TAXONOMY_TYPE )
- || $wp_query->is_tax( self::CUSTOM_TAXONOMY_TAG ) )
- ) {
- $settings['posts_per_page'] = get_option( self::OPTION_READING_SETTING, $settings['posts_per_page'] );
- }
-
- return $settings;
- }
-
- /*
- * Filter the results of infinite scroll to make sure we get `lastbatch` right.
- */
- function infinite_scroll_results( $results, $query_args, $query ) {
- $results['lastbatch'] = $query_args['paged'] >= $query->max_num_pages;
- return $results;
- }
-
- /**
- * Add CPT to Dotcom sitemap
- */
- function add_to_sitemap( $post_types ) {
- $post_types[] = self::CUSTOM_POST_TYPE;
-
- return $post_types;
- }
-
- /**
- * Add to REST API post type whitelist
- */
- function allow_portfolio_rest_api_type( $post_types ) {
- $post_types[] = self::CUSTOM_POST_TYPE;
-
- return $post_types;
- }
-
- /**
- * Our [portfolio] shortcode.
- * Prints Portfolio data styled to look good on *any* theme.
- *
- * @return portfolio_shortcode_html
- */
- static function portfolio_shortcode( $atts ) {
- // Default attributes
- $atts = shortcode_atts( array(
- 'display_types' => true,
- 'display_tags' => true,
- 'display_content' => true,
- 'display_author' => false,
- 'show_filter' => false,
- 'include_type' => false,
- 'include_tag' => false,
- 'columns' => 2,
- 'showposts' => -1,
- 'order' => 'asc',
- 'orderby' => 'date',
- ), $atts, 'portfolio' );
-
- // A little sanitization
- if ( $atts['display_types'] && 'true' != $atts['display_types'] ) {
- $atts['display_types'] = false;
- }
-
- if ( $atts['display_tags'] && 'true' != $atts['display_tags'] ) {
- $atts['display_tags'] = false;
- }
-
- if ( $atts['display_author'] && 'true' != $atts['display_author'] ) {
- $atts['display_author'] = false;
- }
-
- if ( $atts['display_content'] && 'true' != $atts['display_content'] && 'full' != $atts['display_content'] ) {
- $atts['display_content'] = false;
- }
-
- if ( $atts['include_type'] ) {
- $atts['include_type'] = explode( ',', str_replace( ' ', '', $atts['include_type'] ) );
- }
-
- if ( $atts['include_tag'] ) {
- $atts['include_tag'] = explode( ',', str_replace( ' ', '', $atts['include_tag'] ) );
- }
-
- $atts['columns'] = absint( $atts['columns'] );
-
- $atts['showposts'] = intval( $atts['showposts'] );
-
-
- if ( $atts['order'] ) {
- $atts['order'] = urldecode( $atts['order'] );
- $atts['order'] = strtoupper( $atts['order'] );
- if ( 'DESC' != $atts['order'] ) {
- $atts['order'] = 'ASC';
- }
- }
-
- if ( $atts['orderby'] ) {
- $atts['orderby'] = urldecode( $atts['orderby'] );
- $atts['orderby'] = strtolower( $atts['orderby'] );
- $allowed_keys = array( 'author', 'date', 'title', 'rand' );
-
- $parsed = array();
- foreach ( explode( ',', $atts['orderby'] ) as $portfolio_index_number => $orderby ) {
- if ( ! in_array( $orderby, $allowed_keys ) ) {
- continue;
- }
- $parsed[] = $orderby;
- }
-
- if ( empty( $parsed ) ) {
- unset( $atts['orderby'] );
- } else {
- $atts['orderby'] = implode( ' ', $parsed );
- }
- }
-
- // enqueue shortcode styles when shortcode is used
- wp_enqueue_style( 'jetpack-portfolio-style', plugins_url( 'css/portfolio-shortcode.css', __FILE__ ), array(), '20140326' );
-
- return self::portfolio_shortcode_html( $atts );
- }
-
- /**
- * Query to retrieve entries from the Portfolio post_type.
- *
- * @return object
- */
- static function portfolio_query( $atts ) {
- // Default query arguments
- $default = array(
- 'order' => $atts['order'],
- 'orderby' => $atts['orderby'],
- 'posts_per_page' => $atts['showposts'],
- );
-
- $args = wp_parse_args( $atts, $default );
- $args['post_type'] = self::CUSTOM_POST_TYPE; // Force this post type
-
- if ( false != $atts['include_type'] || false != $atts['include_tag'] ) {
- $args['tax_query'] = array();
- }
-
- // If 'include_type' has been set use it on the main query
- if ( false != $atts['include_type'] ) {
- array_push( $args['tax_query'], array(
- 'taxonomy' => self::CUSTOM_TAXONOMY_TYPE,
- 'field' => 'slug',
- 'terms' => $atts['include_type'],
- ) );
- }
-
- // If 'include_tag' has been set use it on the main query
- if ( false != $atts['include_tag'] ) {
- array_push( $args['tax_query'], array(
- 'taxonomy' => self::CUSTOM_TAXONOMY_TAG,
- 'field' => 'slug',
- 'terms' => $atts['include_tag'],
- ) );
- }
-
- if ( false != $atts['include_type'] && false != $atts['include_tag'] ) {
- $args['tax_query']['relation'] = 'AND';
- }
-
- // Run the query and return
- $query = new WP_Query( $args );
- return $query;
- }
-
- /**
- * The Portfolio shortcode loop.
- *
- * @todo add theme color styles
- * @return html
- */
- static function portfolio_shortcode_html( $atts ) {
-
- $query = self::portfolio_query( $atts );
- $portfolio_index_number = 0;
-
- ob_start();
-
- // If we have posts, create the html
- // with hportfolio markup
- if ( $query->have_posts() ) {
-
- // Render styles
- //self::themecolor_styles();
-
- ?>
- <div class="jetpack-portfolio-shortcode column-<?php echo esc_attr( $atts['columns'] ); ?>">
- <?php // open .jetpack-portfolio
-
- // Construct the loop...
- while ( $query->have_posts() ) {
- $query->the_post();
- $post_id = get_the_ID();
- ?>
- <div class="portfolio-entry <?php echo esc_attr( self::get_project_class( $portfolio_index_number, $atts['columns'] ) ); ?>">
- <header class="portfolio-entry-header">
- <?php
- // Featured image
- echo self::get_portfolio_thumbnail_link( $post_id );
- ?>
-
- <h2 class="portfolio-entry-title"><a href="<?php echo esc_url( get_permalink() ); ?>" title="<?php echo esc_attr( the_title_attribute( ) ); ?>"><?php the_title(); ?></a></h2>
-
- <div class="portfolio-entry-meta">
- <?php
- if ( false != $atts['display_types'] ) {
- echo self::get_project_type( $post_id );
- }
-
- if ( false != $atts['display_tags'] ) {
- echo self::get_project_tags( $post_id );
- }
-
- if ( false != $atts['display_author'] ) {
- echo self::get_project_author( $post_id );
- }
- ?>
- </div>
-
- </header>
-
- <?php
- // The content
- if ( false !== $atts['display_content'] ) {
- add_filter( 'wordads_inpost_disable', '__return_true', 20 );
- if ( 'full' === $atts['display_content'] ) {
- ?>
- <div class="portfolio-entry-content"><?php the_content(); ?></div>
- <?php
- } else {
- ?>
- <div class="portfolio-entry-content"><?php the_excerpt(); ?></div>
- <?php
- }
- remove_filter( 'wordads_inpost_disable', '__return_true', 20 );
- }
- ?>
- </div><!-- close .portfolio-entry -->
- <?php $portfolio_index_number++;
- } // end of while loop
-
- wp_reset_postdata();
- ?>
- </div><!-- close .jetpack-portfolio -->
- <?php
- } else { ?>
- <p><em><?php _e( 'Your Portfolio Archive currently has no entries. You can start creating them on your dashboard.', 'jetpack' ); ?></p></em>
- <?php
- }
- $html = ob_get_clean();
-
- // If there is a [portfolio] within a [portfolio], remove the shortcode
- if ( has_shortcode( $html, 'portfolio' ) ){
- remove_shortcode( 'portfolio' );
- }
-
- // Return the HTML block
- return $html;
- }
-
- /**
- * Individual project class
- *
- * @return string
- */
- static function get_project_class( $portfolio_index_number, $columns ) {
- $project_types = wp_get_object_terms( get_the_ID(), self::CUSTOM_TAXONOMY_TYPE, array( 'fields' => 'slugs' ) );
- $class = array();
-
- $class[] = 'portfolio-entry-column-'.$columns;
- // add a type- class for each project type
- foreach ( $project_types as $project_type ) {
- $class[] = 'type-' . esc_html( $project_type );
- }
- if( $columns > 1) {
- if ( ( $portfolio_index_number % 2 ) == 0 ) {
- $class[] = 'portfolio-entry-mobile-first-item-row';
- } else {
- $class[] = 'portfolio-entry-mobile-last-item-row';
- }
- }
-
- // add first and last classes to first and last items in a row
- if ( ( $portfolio_index_number % $columns ) == 0 ) {
- $class[] = 'portfolio-entry-first-item-row';
- } elseif ( ( $portfolio_index_number % $columns ) == ( $columns - 1 ) ) {
- $class[] = 'portfolio-entry-last-item-row';
- }
-
-
- /**
- * Filter the class applied to project div in the portfolio
- *
- * @module custom-content-types
- *
- * @since 3.1.0
- *
- * @param string $class class name of the div.
- * @param int $portfolio_index_number iterator count the number of columns up starting from 0.
- * @param int $columns number of columns to display the content in.
- *
- */
- return apply_filters( 'portfolio-project-post-class', implode( " ", $class ) , $portfolio_index_number, $columns );
- }
-
- /**
- * Displays the project type that a project belongs to.
- *
- * @return html
- */
- static function get_project_type( $post_id ) {
- $project_types = get_the_terms( $post_id, self::CUSTOM_TAXONOMY_TYPE );
-
- // If no types, return empty string
- if ( empty( $project_types ) || is_wp_error( $project_types ) ) {
- return;
- }
-
- $html = '<div class="project-types"><span>' . __( 'Types', 'jetpack' ) . ':</span>';
- $types = array();
- // Loop thorugh all the types
- foreach ( $project_types as $project_type ) {
- $project_type_link = get_term_link( $project_type, self::CUSTOM_TAXONOMY_TYPE );
-
- if ( is_wp_error( $project_type_link ) ) {
- return $project_type_link;
- }
-
- $types[] = '<a href="' . esc_url( $project_type_link ) . '" rel="tag">' . esc_html( $project_type->name ) . '</a>';
- }
- $html .= ' '.implode( ', ', $types );
- $html .= '</div>';
-
- return $html;
- }
-
- /**
- * Displays the project tags that a project belongs to.
- *
- * @return html
- */
- static function get_project_tags( $post_id ) {
- $project_tags = get_the_terms( $post_id, self::CUSTOM_TAXONOMY_TAG );
-
- // If no tags, return empty string
- if ( empty( $project_tags ) || is_wp_error( $project_tags ) ) {
- return false;
- }
-
- $html = '<div class="project-tags"><span>' . __( 'Tags', 'jetpack' ) . ':</span>';
- $tags = array();
- // Loop thorugh all the tags
- foreach ( $project_tags as $project_tag ) {
- $project_tag_link = get_term_link( $project_tag, self::CUSTOM_TAXONOMY_TYPE );
-
- if ( is_wp_error( $project_tag_link ) ) {
- return $project_tag_link;
- }
-
- $tags[] = '<a href="' . esc_url( $project_tag_link ) . '" rel="tag">' . esc_html( $project_tag->name ) . '</a>';
- }
- $html .= ' '. implode( ', ', $tags );
- $html .= '</div>';
-
- return $html;
- }
-
- /**
- * Displays the author of the current portfolio project.
- *
- * @return html
- */
- static function get_project_author() {
- $html = '<div class="project-author">';
- /* translators: %1$s is link to author posts, %2$s is author display name */
- $html .= sprintf( __( '<span>Author:</span> <a href="%1$s">%2$s</a>', 'jetpack' ),
- esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ),
- esc_html( get_the_author() )
- );
- $html .= '</div>';
-
- return $html;
- }
-
- /**
- * Display the featured image if it's available
- *
- * @return html
- */
- static function get_portfolio_thumbnail_link( $post_id ) {
- if ( has_post_thumbnail( $post_id ) ) {
- /**
- * Change the Portfolio thumbnail size.
- *
- * @module custom-content-types
- *
- * @since 3.4.0
- *
- * @param string|array $var Either a registered size keyword or size array.
- */
- return '<a class="portfolio-featured-image" href="' . esc_url( get_permalink( $post_id ) ) . '">' . get_the_post_thumbnail( $post_id, apply_filters( 'jetpack_portfolio_thumbnail_size', 'large' ) ) . '</a>';
- }
- }
-}
-
-add_action( 'init', array( 'Jetpack_Portfolio', 'init' ) );
-
-// Check on plugin activation if theme supports CPT
-register_activation_hook( __FILE__, array( 'Jetpack_Portfolio', 'activation_post_type_support' ) );
-add_action( 'jetpack_activate_module_custom-content-types', array( 'Jetpack_Portfolio', 'activation_post_type_support' ) );
diff --git a/plugins/jetpack/modules/custom-post-types/testimonial.php b/plugins/jetpack/modules/custom-post-types/testimonial.php
deleted file mode 100644
index 7972078f..00000000
--- a/plugins/jetpack/modules/custom-post-types/testimonial.php
+++ /dev/null
@@ -1,763 +0,0 @@
-<?php
-
-class Jetpack_Testimonial {
- const CUSTOM_POST_TYPE = 'jetpack-testimonial';
- const OPTION_NAME = 'jetpack_testimonial';
- const OPTION_READING_SETTING = 'jetpack_testimonial_posts_per_page';
-
- public $version = '0.1';
-
- static function init() {
- static $instance = false;
-
- if ( ! $instance ) {
- $instance = new Jetpack_Testimonial;
- }
-
- return $instance;
- }
-
- /**
- * Conditionally hook into WordPress.
- *
- * Setup user option for enabling CPT.
- * If user has CPT enabled, show in admin.
- */
- function __construct() {
- // Make sure the post types are loaded for imports
- add_action( 'import_start', array( $this, 'register_post_types' ) );
-
- // If called via REST API, we need to register later in lifecycle
- add_action( 'restapi_theme_init', array( $this, 'maybe_register_cpt' ) );
-
- // Add to REST API post type whitelist
- add_filter( 'rest_api_allowed_post_types', array( $this, 'allow_cpt_rest_api_type' ) );
-
- $this->maybe_register_cpt();
- }
-
- /**
- * Registers the custom post types and adds action/filter handlers, but
- * only if the site supports it
- */
- function maybe_register_cpt() {
- // Add an option to enable the CPT
- add_action( 'admin_init', array( $this, 'settings_api_init' ) );
-
- // Check on theme switch if theme supports CPT and setting is disabled
- add_action( 'after_switch_theme', array( $this, 'activation_post_type_support' ) );
-
- $setting = Jetpack_Options::get_option_and_ensure_autoload( self::OPTION_NAME, '0' );
-
- // Bail early if Testimonial option is not set and the theme doesn't declare support
- if ( empty( $setting ) && ! $this->site_supports_custom_post_type() ) {
- return;
- }
-
- if ( ( ! defined( 'IS_WPCOM' ) || ! IS_WPCOM ) && ! Jetpack::is_module_active( 'custom-content-types' ) ) {
- return;
- }
-
- // CPT magic
- $this->register_post_types();
- add_action( sprintf( 'add_option_%s', self::OPTION_NAME ), array( $this, 'flush_rules_on_enable' ), 10 );
- add_action( sprintf( 'update_option_%s', self::OPTION_NAME ), array( $this, 'flush_rules_on_enable' ), 10 );
- add_action( sprintf( 'publish_%s', self::CUSTOM_POST_TYPE ), array( $this, 'flush_rules_on_first_testimonial' ) );
- add_action( 'after_switch_theme', array( $this, 'flush_rules_on_switch' ) );
-
- // Admin Customization
- add_filter( 'enter_title_here', array( $this, 'change_default_title' ) );
- add_filter( sprintf( 'manage_%s_posts_columns', self::CUSTOM_POST_TYPE), array( $this, 'edit_title_column_label' ) );
- add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) );
- add_action( 'customize_register', array( $this, 'customize_register' ) );
-
- // Only add the 'Customize' sub-menu if the theme supports it.
- $num_testimonials = self::count_testimonials();
- if ( ! empty( $num_testimonials ) && current_theme_supports( self::CUSTOM_POST_TYPE ) ) {
- add_action( 'admin_menu', array( $this, 'add_customize_page' ) );
- }
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- // Track all the things
- add_action( sprintf( 'add_option_%s', self::OPTION_NAME ), array( $this, 'new_activation_stat_bump' ) );
- add_action( sprintf( 'update_option_%s', self::OPTION_NAME ), array( $this, 'update_option_stat_bump' ), 11, 2 );
- add_action( sprintf( 'publish_%s', self::CUSTOM_POST_TYPE), array( $this, 'new_testimonial_stat_bump' ) );
-
- // Add to Dotcom XML sitemaps
- add_filter( 'wpcom_sitemap_post_types', array( $this, 'add_to_sitemap' ) );
- } else {
- // Add to Jetpack XML sitemap
- add_filter( 'jetpack_sitemap_post_types', array( $this, 'add_to_sitemap' ) );
- }
-
- // Adjust CPT archive and custom taxonomies to obey CPT reading setting
- add_filter( 'pre_get_posts', array( $this, 'query_reading_setting' ), 20 );
- add_filter( 'infinite_scroll_settings', array( $this, 'infinite_scroll_click_posts_per_page' ) );
-
- // Register [jetpack_testimonials] always and
- // register [testimonials] if [testimonials] isn't already set
- add_shortcode( 'jetpack_testimonials', array( $this, 'jetpack_testimonial_shortcode' ) );
-
- if ( ! shortcode_exists( 'testimonials' ) ) {
- add_shortcode( 'testimonials', array( $this, 'jetpack_testimonial_shortcode' ) );
- }
-
- // If CPT was enabled programatically and no CPT items exist when user switches away, disable
- if ( $setting && $this->site_supports_custom_post_type() ) {
- add_action( 'switch_theme', array( $this, 'deactivation_post_type_support' ) );
- }
- }
-
- /**
- * Add a checkbox field in 'Settings' > 'Writing'
- * for enabling CPT functionality.
- *
- * @return null
- */
- function settings_api_init() {
- add_settings_field(
- self::OPTION_NAME,
- '<span class="cpt-options">' . __( 'Testimonials', 'jetpack' ) . '</span>',
- array( $this, 'setting_html' ),
- 'writing',
- 'jetpack_cpt_section'
- );
-
- register_setting(
- 'writing',
- self::OPTION_NAME,
- 'intval'
- );
-
- // Check if CPT is enabled first so that intval doesn't get set to NULL on re-registering
- if ( $this->site_supports_custom_post_type() ) {
- register_setting(
- 'writing',
- self::OPTION_READING_SETTING,
- 'intval'
- );
- }
- }
-
- /**
- * HTML code to display a checkbox true/false option
- * for the CPT setting.
- *
- * @return html
- */
- function setting_html() {
- if ( current_theme_supports( self::CUSTOM_POST_TYPE ) ) : ?>
- <p><?php printf( __( 'Your theme supports Testimonials', 'jetpack' ) ); ?></p>
- <?php else : ?>
- <label for="<?php echo esc_attr( self::OPTION_NAME ); ?>">
- <input name="<?php echo esc_attr( self::OPTION_NAME ); ?>" id="<?php echo esc_attr( self::OPTION_NAME ); ?>" <?php echo checked( get_option( self::OPTION_NAME, '0' ), true, false ); ?> type="checkbox" value="1" />
- <?php esc_html_e( 'Enable Testimonials for this site.', 'jetpack' ); ?>
- <a target="_blank" href="http://en.support.wordpress.com/testimonials/"><?php esc_html_e( 'Learn More', 'jetpack' ); ?></a>
- </label>
- <?php endif;
-
- if ( $this->site_supports_custom_post_type() ) :
- printf( '<p><label for="%1$s">%2$s</label></p>',
- esc_attr( self::OPTION_READING_SETTING ),
- /* translators: %1$s is replaced with an input field for numbers */
- sprintf( __( 'Testimonial pages display at most %1$s testimonials', 'jetpack' ),
- sprintf( '<input name="%1$s" id="%1$s" type="number" step="1" min="1" value="%2$s" class="small-text" />',
- esc_attr( self::OPTION_READING_SETTING ),
- esc_attr( get_option( self::OPTION_READING_SETTING, '10' ) )
- )
- )
- );
- endif;
- }
-
- /**
- * Should this Custom Post Type be made available?
- */
- function site_supports_custom_post_type() {
- // If the current theme requests it.
- if ( current_theme_supports( self::CUSTOM_POST_TYPE ) || get_option( self::OPTION_NAME, '0' ) ) {
- return true;
- }
-
- // Otherwise, say no unless something wants to filter us to say yes.
- /** This action is documented in modules/custom-post-types/nova.php */
- return (bool) apply_filters( 'jetpack_enable_cpt', false, self::CUSTOM_POST_TYPE );
- }
-
- /**
- * Add to REST API post type whitelist
- */
- function allow_cpt_rest_api_type( $post_types ) {
- $post_types[] = self::CUSTOM_POST_TYPE;
-
- return $post_types;
- }
-
- /**
- * Bump Testimonial > New Activation stat
- */
- function new_activation_stat_bump() {
- /** This action is documented in modules/widgets/social-media-icons.php */
- do_action( 'jetpack_bump_stats_extras', 'testimonials', 'new-activation' );
- }
-
- /**
- * Bump Testimonial > Option On/Off stats to get total active
- */
- function update_option_stat_bump( $old, $new ) {
- if ( empty( $old ) && ! empty( $new ) ) {
- /** This action is documented in modules/widgets/social-media-icons.php */
- do_action( 'jetpack_bump_stats_extras', 'testimonials', 'option-on' );
- }
-
- if ( ! empty( $old ) && empty( $new ) ) {
- /** This action is documented in modules/widgets/social-media-icons.php */
- do_action( 'jetpack_bump_stats_extras', 'testimonials', 'option-off' );
- }
- }
-
- /**
- * Bump Testimonial > Published Testimonials stat when testimonials are published
- */
- function new_testimonial_stat_bump() {
- /** This action is documented in modules/widgets/social-media-icons.php */
- do_action ( 'jetpack_bump_stats_extras', 'testimonials', 'published-testimonials' );
- }
-
- /*
- * Flush permalinks when CPT option is turned on/off
- */
- function flush_rules_on_enable() {
- flush_rewrite_rules();
- }
-
- /*
- * Count published testimonials and flush permalinks when first testimonial is published
- */
- function flush_rules_on_first_testimonial() {
- $testimonials = get_transient( 'jetpack-testimonial-count-cache' );
-
- if ( false === $testimonials ) {
- flush_rewrite_rules();
- $testimonials = (int) wp_count_posts( self::CUSTOM_POST_TYPE )->publish;
-
- if ( ! empty( $testimonials ) ) {
- set_transient( 'jetpack-testimonial-count-cache', $testimonials, HOUR_IN_SECONDS * 12 );
- }
- }
- }
-
- /*
- * Flush permalinks when CPT supported theme is activated
- */
- function flush_rules_on_switch() {
- if ( current_theme_supports( self::CUSTOM_POST_TYPE ) ) {
- flush_rewrite_rules();
- }
- }
-
- /**
- * On plugin/theme activation, check if current theme supports CPT
- */
- static function activation_post_type_support() {
- if ( current_theme_supports( self::CUSTOM_POST_TYPE ) ) {
- update_option( self::OPTION_NAME, '1' );
- }
- }
-
- /**
- * On theme switch, check if CPT item exists and disable if not
- */
- function deactivation_post_type_support() {
- $portfolios = get_posts( array(
- 'fields' => 'ids',
- 'posts_per_page' => 1,
- 'post_type' => self::CUSTOM_POST_TYPE,
- 'suppress_filters' => false
- ) );
-
- if ( empty( $portfolios ) ) {
- update_option( self::OPTION_NAME, '0' );
- }
- }
-
- /**
- * Register Post Type
- */
- function register_post_types() {
- if ( post_type_exists( self::CUSTOM_POST_TYPE ) ) {
- return;
- }
-
- register_post_type( self::CUSTOM_POST_TYPE, array(
- 'description' => __( 'Customer Testimonials', 'jetpack' ),
- 'labels' => array(
- 'name' => esc_html__( 'Testimonials', 'jetpack' ),
- 'singular_name' => esc_html__( 'Testimonial', 'jetpack' ),
- 'menu_name' => esc_html__( 'Testimonials', 'jetpack' ),
- 'all_items' => esc_html__( 'All Testimonials', 'jetpack' ),
- 'add_new' => esc_html__( 'Add New', 'jetpack' ),
- 'add_new_item' => esc_html__( 'Add New Testimonial', 'jetpack' ),
- 'edit_item' => esc_html__( 'Edit Testimonial', 'jetpack' ),
- 'new_item' => esc_html__( 'New Testimonial', 'jetpack' ),
- 'view_item' => esc_html__( 'View Testimonial', 'jetpack' ),
- 'search_items' => esc_html__( 'Search Testimonials', 'jetpack' ),
- 'not_found' => esc_html__( 'No Testimonials found', 'jetpack' ),
- 'not_found_in_trash' => esc_html__( 'No Testimonials found in Trash', 'jetpack' ),
- 'filter_items_list' => esc_html__( 'Filter Testimonials list', 'jetpack' ),
- 'items_list_navigation' => esc_html__( 'Testimonial list navigation', 'jetpack' ),
- 'items_list' => esc_html__( 'Testimonials list', 'jetpack' ),
- ),
- 'supports' => array(
- 'title',
- 'editor',
- 'thumbnail',
- 'page-attributes',
- 'revisions',
- 'excerpt',
- ),
- 'rewrite' => array(
- 'slug' => 'testimonial',
- 'with_front' => false,
- 'feeds' => false,
- 'pages' => true,
- ),
- 'public' => true,
- 'show_ui' => true,
- 'menu_position' => 20, // below Pages
- 'menu_icon' => 'dashicons-testimonial',
- 'capability_type' => 'page',
- 'map_meta_cap' => true,
- 'has_archive' => true,
- 'query_var' => 'testimonial',
- 'show_in_rest' => true,
- ) );
- }
-
- /**
- * Update messages for the Testimonial admin.
- */
- function updated_messages( $messages ) {
- global $post;
-
- $messages[ self::CUSTOM_POST_TYPE ] = array(
- 0 => '', // Unused. Messages start at index 1.
- 1 => sprintf( __( 'Testimonial updated. <a href="%s">View testimonial</a>', 'jetpack'), esc_url( get_permalink( $post->ID ) ) ),
- 2 => esc_html__( 'Custom field updated.', 'jetpack' ),
- 3 => esc_html__( 'Custom field deleted.', 'jetpack' ),
- 4 => esc_html__( 'Testimonial updated.', 'jetpack' ),
- /* translators: %s: date and time of the revision */
- 5 => isset( $_GET['revision'] ) ? sprintf( esc_html__( 'Testimonial restored to revision from %s', 'jetpack'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
- 6 => sprintf( __( 'Testimonial published. <a href="%s">View testimonial</a>', 'jetpack' ), esc_url( get_permalink( $post->ID ) ) ),
- 7 => esc_html__( 'Testimonial saved.', 'jetpack' ),
- 8 => sprintf( __( 'Testimonial submitted. <a target="_blank" href="%s">Preview testimonial</a>', 'jetpack'), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) ),
- 9 => sprintf( __( 'Testimonial scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview testimonial</a>', 'jetpack' ),
- // translators: Publish box date format, see http://php.net/date
- date_i18n( __( 'M j, Y @ G:i', 'jetpack' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post->ID) ) ),
- 10 => sprintf( __( 'Testimonial draft updated. <a target="_blank" href="%s">Preview testimonial</a>', 'jetpack' ), esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) ),
- );
-
- return $messages;
- }
-
- /**
- * Change ‘Enter Title Here’ text for the Testimonial.
- */
- function change_default_title( $title ) {
- if ( self::CUSTOM_POST_TYPE == get_post_type() ) {
- $title = esc_html__( "Enter the customer's name here", 'jetpack' );
- }
-
- return $title;
- }
-
- /**
- * Change ‘Title’ column label on all Testimonials page.
- */
- function edit_title_column_label( $columns ) {
- $columns['title'] = esc_html__( 'Customer Name', 'jetpack' );
-
- return $columns;
- }
-
- /**
- * Follow CPT reading setting on CPT archive page
- */
- function query_reading_setting( $query ) {
- if ( ! is_admin()
- && $query->is_main_query()
- && $query->is_post_type_archive( self::CUSTOM_POST_TYPE )
- ) {
- $query->set( 'posts_per_page', get_option( self::OPTION_READING_SETTING, '10' ) );
- }
- }
-
- /*
- * If Infinite Scroll is set to 'click', use our custom reading setting instead of core's `posts_per_page`.
- */
- function infinite_scroll_click_posts_per_page( $settings ) {
- global $wp_query;
-
- if ( ! is_admin() && true === $settings['click_handle'] && $wp_query->is_post_type_archive( self::CUSTOM_POST_TYPE ) ) {
- $settings['posts_per_page'] = get_option( self::OPTION_READING_SETTING, $settings['posts_per_page'] );
- }
-
- return $settings;
- }
-
- /**
- * Add CPT to Dotcom sitemap
- */
- function add_to_sitemap( $post_types ) {
- $post_types[] = self::CUSTOM_POST_TYPE;
-
- return $post_types;
- }
-
- function set_testimonial_option() {
- $testimonials = wp_count_posts( self::CUSTOM_POST_TYPE );
- $published_testimonials = $testimonials->publish;
-
- update_option( self::OPTION_NAME, $published_testimonials );
- }
-
- function count_testimonials() {
- $testimonials = get_transient( 'jetpack-testimonial-count-cache' );
-
- if ( false === $testimonials ) {
- $testimonials = (int) wp_count_posts( self::CUSTOM_POST_TYPE )->publish;
-
- if ( ! empty( $testimonials ) ) {
- set_transient( 'jetpack-testimonial-count-cache', $testimonials, 60*60*12 );
- }
- }
-
- return $testimonials;
- }
-
- /**
- * Adds a submenu link to the Customizer.
- */
- function add_customize_page() {
- add_submenu_page(
- 'edit.php?post_type=' . self::CUSTOM_POST_TYPE,
- esc_html__( 'Customize Testimonials Archive', 'jetpack' ),
- esc_html__( 'Customize', 'jetpack' ),
- 'edit_theme_options',
- add_query_arg( array(
- 'url' => urlencode( home_url( '/testimonial/' ) ),
- 'autofocus[section]' => 'jetpack_testimonials'
- ), 'customize.php' )
- );
- }
-
- /**
- * Adds testimonial section to the Customizer.
- */
- function customize_register( $wp_customize ) {
- jetpack_testimonial_custom_control_classes();
-
- $wp_customize->add_section( 'jetpack_testimonials', array(
- 'title' => esc_html__( 'Testimonials', 'jetpack' ),
- 'theme_supports' => self::CUSTOM_POST_TYPE,
- 'priority' => 130,
- ) );
-
- $wp_customize->add_setting( 'jetpack_testimonials[page-title]', array(
- 'default' => esc_html__( 'Testimonials', 'jetpack' ),
- 'sanitize_callback' => array( 'Jetpack_Testimonial_Title_Control', 'sanitize_content' ),
- 'sanitize_js_callback' => array( 'Jetpack_Testimonial_Title_Control', 'sanitize_content' ),
- ) );
- $wp_customize->add_control( 'jetpack_testimonials[page-title]', array(
- 'section' => 'jetpack_testimonials',
- 'label' => esc_html__( 'Testimonial Archive Title', 'jetpack' ),
- 'type' => 'text',
- ) );
-
- $wp_customize->add_setting( 'jetpack_testimonials[page-content]', array(
- 'default' => '',
- 'sanitize_callback' => array( 'Jetpack_Testimonial_Textarea_Control', 'sanitize_content' ),
- 'sanitize_js_callback' => array( 'Jetpack_Testimonial_Textarea_Control', 'sanitize_content' ),
- ) );
- $wp_customize->add_control( new Jetpack_Testimonial_Textarea_Control( $wp_customize, 'jetpack_testimonials[page-content]', array(
- 'section' => 'jetpack_testimonials',
- 'settings' => 'jetpack_testimonials[page-content]',
- 'label' => esc_html__( 'Testimonial Archive Content', 'jetpack' ),
- ) ) );
-
- $wp_customize->add_setting( 'jetpack_testimonials[featured-image]', array(
- 'default' => '',
- 'sanitize_callback' => 'attachment_url_to_postid',
- 'sanitize_js_callback' => 'attachment_url_to_postid',
- 'theme_supports' => 'post-thumbnails',
- ) );
- $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'jetpack_testimonials[featured-image]', array(
- 'section' => 'jetpack_testimonials',
- 'label' => esc_html__( 'Testimonial Archive Featured Image', 'jetpack' ),
- ) ) );
-
- // The featured image control doesn't display properly in the Customizer unless we coerce
- // it back into a URL sooner, since that's what WP_Customize_Upload_Control::to_json() expects
- if ( is_admin() ) {
- add_filter( 'theme_mod_jetpack_testimonials', array( $this, 'coerce_testimonial_image_to_url' ) );
- }
- }
-
- public function coerce_testimonial_image_to_url( $opt ) {
- if ( ! $opt || ! is_array( $opt ) ) {
- return $opt;
- }
- if ( ! isset( $opt['featured-image'] ) || ! is_scalar( $opt['featured-image'] ) ) {
- return $opt;
- }
- $url = wp_get_attachment_url( $opt['featured-image'] );
- if ( $url ) {
- $opt['featured-image'] = $url;
- }
- return $opt;
- }
-
- /**
- * Our [testimonial] shortcode.
- * Prints Testimonial data styled to look good on *any* theme.
- *
- * @return jetpack_testimonial_shortcode_html
- */
- static function jetpack_testimonial_shortcode( $atts ) {
- // Default attributes
- $atts = shortcode_atts( array(
- 'display_content' => true,
- 'image' => true,
- 'columns' => 1,
- 'showposts' => -1,
- 'order' => 'asc',
- 'orderby' => 'date',
- ), $atts, 'testimonial' );
-
- // A little sanitization
- if ( $atts['display_content'] && 'true' != $atts['display_content'] && 'full' != $atts['display_content'] ) {
- $atts['display_content'] = false;
- }
-
- if ( $atts['image'] && 'true' != $atts['image'] ) {
- $atts['image'] = false;
- }
-
- $atts['columns'] = absint( $atts['columns'] );
-
- $atts['showposts'] = intval( $atts['showposts'] );
-
- if ( $atts['order'] ) {
- $atts['order'] = urldecode( $atts['order'] );
- $atts['order'] = strtoupper( $atts['order'] );
- if ( 'DESC' != $atts['order'] ) {
- $atts['order'] = 'ASC';
- }
- }
-
- if ( $atts['orderby'] ) {
- $atts['orderby'] = urldecode( $atts['orderby'] );
- $atts['orderby'] = strtolower( $atts['orderby'] );
- $allowed_keys = array('author', 'date', 'title', 'rand');
-
- $parsed = array();
- foreach ( explode( ',', $atts['orderby'] ) as $testimonial_index_number => $orderby ) {
- if ( ! in_array( $orderby, $allowed_keys ) ) {
- continue;
- }
- $parsed[] = $orderby;
- }
-
- if ( empty( $parsed ) ) {
- unset($atts['orderby']);
- } else {
- $atts['orderby'] = implode( ' ', $parsed );
- }
- }
-
- // enqueue shortcode styles when shortcode is used
- wp_enqueue_style( 'jetpack-testimonial-style', plugins_url( 'css/testimonial-shortcode.css', __FILE__ ), array(), '20140326' );
-
- return self::jetpack_testimonial_shortcode_html( $atts );
- }
-
- /**
- * The Testimonial shortcode loop.
- *
- * @return html
- */
- static function jetpack_testimonial_shortcode_html( $atts ) {
- // Default query arguments
- $defaults = array(
- 'order' => $atts['order'],
- 'orderby' => $atts['orderby'],
- 'posts_per_page' => $atts['showposts'],
- );
-
- $args = wp_parse_args( $atts, $defaults );
- $args['post_type'] = self::CUSTOM_POST_TYPE; // Force this post type
- $query = new WP_Query( $args );
-
- $testimonial_index_number = 0;
-
- ob_start();
-
- // If we have testimonials, create the html
- if ( $query->have_posts() ) {
-
- ?>
- <div class="jetpack-testimonial-shortcode column-<?php echo esc_attr( $atts['columns'] ); ?>">
- <?php // open .jetpack-testimonial-shortcode
-
- // Construct the loop...
- while ( $query->have_posts() ) {
- $query->the_post();
- $post_id = get_the_ID();
- ?>
- <div class="testimonial-entry <?php echo esc_attr( self::get_testimonial_class( $testimonial_index_number, $atts['columns'], has_post_thumbnail( $post_id ) ) ); ?>">
- <?php
- // The content
- if ( false !== $atts['display_content'] ) {
- if ( 'full' === $atts['display_content'] ) {
- ?>
- <div class="testimonial-entry-content"><?php the_content(); ?></div>
- <?php
- } else {
- ?>
- <div class="testimonial-entry-content"><?php the_excerpt(); ?></div>
- <?php
- }
- }
- ?>
- <span class="testimonial-entry-title">&#8213; <a href="<?php echo esc_url( get_permalink() ); ?>" title="<?php echo esc_attr( the_title_attribute( ) ); ?>"><?php the_title(); ?></a></span>
- <?php
- // Featured image
- if ( false !== $atts['image'] ) :
- echo self::get_testimonial_thumbnail_link( $post_id );
- endif;
- ?>
- </div><!-- close .testimonial-entry -->
- <?php
- $testimonial_index_number++;
- } // end of while loop
-
- wp_reset_postdata();
- ?>
- </div><!-- close .jetpack-testimonial-shortcode -->
- <?php
- } else { ?>
- <p><em><?php _e( 'Your Testimonial Archive currently has no entries. You can start creating them on your dashboard.', 'jetpack' ); ?></p></em>
- <?php
- }
- $html = ob_get_clean();
-
- // Return the HTML block
- return $html;
- }
-
- /**
- * Individual testimonial class
- *
- * @return string
- */
- static function get_testimonial_class( $testimonial_index_number, $columns, $image ) {
- $class = array();
-
- $class[] = 'testimonial-entry-column-'.$columns;
-
- if( $columns > 1) {
- if ( ( $testimonial_index_number % 2 ) == 0 ) {
- $class[] = 'testimonial-entry-mobile-first-item-row';
- } else {
- $class[] = 'testimonial-entry-mobile-last-item-row';
- }
- }
-
- // add first and last classes to first and last items in a row
- if ( ( $testimonial_index_number % $columns ) == 0 ) {
- $class[] = 'testimonial-entry-first-item-row';
- } elseif ( ( $testimonial_index_number % $columns ) == ( $columns - 1 ) ) {
- $class[] = 'testimonial-entry-last-item-row';
- }
-
- // add class if testimonial has a featured image
- if ( false !== $image ) {
- $class[] = 'has-testimonial-thumbnail';
- }
-
- /**
- * Filter the class applied to testimonial div in the testimonial
- *
- * @module custom-content-types
- *
- * @since 3.4.0
- *
- * @param string $class class name of the div.
- * @param int $testimonial_index_number iterator count the number of columns up starting from 0.
- * @param int $columns number of columns to display the content in.
- * @param boolean $image has a thumbnail or not.
- *
- */
- return apply_filters( 'testimonial-entry-post-class', implode( " ", $class ) , $testimonial_index_number, $columns, $image );
- }
-
- /**
- * Display the featured image if it's available
- *
- * @return html
- */
- static function get_testimonial_thumbnail_link( $post_id ) {
- if ( has_post_thumbnail( $post_id ) ) {
- /**
- * Change the thumbnail size for the Testimonial CPT.
- *
- * @module custom-content-types
- *
- * @since 3.4.0
- *
- * @param string|array $var Either a registered size keyword or size array.
- */
- return '<a class="testimonial-featured-image" href="' . esc_url( get_permalink( $post_id ) ) . '">' . get_the_post_thumbnail( $post_id, apply_filters( 'jetpack_testimonial_thumbnail_size', 'thumbnail' ) ) . '</a>';
- }
- }
-}
-
-function jetpack_testimonial_custom_control_classes() {
- class Jetpack_Testimonial_Title_Control extends WP_Customize_Control {
- public static function sanitize_content( $value ) {
- if ( '' != $value )
- $value = trim( convert_chars( wptexturize( $value ) ) );
-
- return $value;
- }
- }
-
- class Jetpack_Testimonial_Textarea_Control extends WP_Customize_Control {
- public $type = 'textarea';
-
- public function render_content() {
- ?>
- <label>
- <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
- <textarea rows="5" style="width:100%;" <?php $this->link(); ?>><?php echo esc_textarea( $this->value() ); ?></textarea>
- </label>
- <?php
- }
-
- public static function sanitize_content( $value ) {
- if ( ! empty( $value ) )
- /** This filter is already documented in core. wp-includes/post-template.php */
- $value = apply_filters( 'the_content', $value );
-
- $value = preg_replace( '@<div id="jp-post-flair"([^>]+)?>(.+)?</div>@is', '', $value ); // Strip WPCOM and Jetpack post flair if included in content
-
- return $value;
- }
- }
-}
-
-add_action( 'init', array( 'Jetpack_Testimonial', 'init' ) );
-
-// Check on plugin activation if theme supports CPT
-register_activation_hook( __FILE__, array( 'Jetpack_Testimonial', 'activation_post_type_support' ) );
-add_action( 'jetpack_activate_module_custom-content-types', array( 'Jetpack_Testimonial', 'activation_post_type_support' ) );
diff --git a/plugins/jetpack/modules/debug.php b/plugins/jetpack/modules/debug.php
deleted file mode 100644
index 88c13090..00000000
--- a/plugins/jetpack/modules/debug.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Deprecated. No longer needed.
- *
- * @package Jetpack
- */
diff --git a/plugins/jetpack/modules/enhanced-distribution.php b/plugins/jetpack/modules/enhanced-distribution.php
deleted file mode 100644
index 43c7f31d..00000000
--- a/plugins/jetpack/modules/enhanced-distribution.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-/**
- * Module Name: Enhanced Distribution
- * Module Description: Increase reach and traffic.
- * Sort Order: 5
- * First Introduced: 1.2
- * Requires Connection: Yes
- * Auto Activate: Public
- * Module Tags: Writing
- * Feature: Engagement
- * Additional Search Queries: google, seo, firehose, search, broadcast, broadcasting
- */
-
-// In case it's active prior to upgrading to 1.9
-function jetpack_enhanced_distribution_before_activate_default_modules() {
- $old_version = Jetpack_Options::get_option( 'old_version' );
- list( $old_version ) = explode( ':', $old_version );
-
- if ( version_compare( $old_version, '1.9-something', '>=' ) ) {
- return;
- }
-
- Jetpack::check_privacy( __FILE__ );
-}
-
-add_action( 'jetpack_before_activate_default_modules', 'jetpack_enhanced_distribution_before_activate_default_modules' );
-
-/**
- * If a request has ?get_freshly_pressed_data=true appended
- * to the end, then let's provide the necessary data back via JSON.
- */
-if ( isset( $_GET['get_freshly_pressed_data'] ) ) {
- add_action( 'template_redirect', 'jetpack_get_freshly_pressed_data' );
- function jetpack_get_freshly_pressed_data() {
- if ( is_single() ) {
- wp_send_json_success( array(
- 'blog_id' => Jetpack_Options::get_option( 'id' ),
- 'post_id' => get_the_ID(),
- ) );
- } else {
- wp_send_json_error( array(
- 'message' => 'Not Singular',
- ) );
- }
- }
-}
-
-add_action( 'rss_head', 'jetpack_enhanced_distribution_feed_id' );
-add_action( 'rss_item', 'jetpack_enhanced_distribution_post_id' );
-add_action( 'rss2_head', 'jetpack_enhanced_distribution_feed_id' );
-add_action( 'rss2_item', 'jetpack_enhanced_distribution_post_id' );
-
-function jetpack_enhanced_distribution_feed_id(){
- (int) $id = Jetpack_Options::get_option( 'id' );
- if ( $id > 0 ) {
- $output = sprintf( '<site xmlns="com-wordpress:feed-additions:1">%d</site>', $id );
- echo $output;
- }
-}
-
-function jetpack_enhanced_distribution_post_id(){
- $id = get_the_ID();
- if ( $id ) {
- $output = sprintf( '<post-id xmlns="com-wordpress:feed-additions:1">%d</post-id>', $id );
- echo $output;
- }
-}
diff --git a/plugins/jetpack/modules/geo-location.php b/plugins/jetpack/modules/geo-location.php
deleted file mode 100644
index 4d3e255c..00000000
--- a/plugins/jetpack/modules/geo-location.php
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-
-require_once dirname( __FILE__ ) . '/geo-location/class.jetpack-geo-location.php';
-
-/**
- * Geo-location shortcode for display of location data associated with a post.
- *
- * Usage with current global $post:
- * [geo-location]
- *
- * Usage with specific post ID:
- * [geo-location post=5]
- */
-add_shortcode( 'geo-location', 'jetpack_geo_shortcode' );
-
-function jetpack_geo_shortcode( $attributes ) {
- $attributes = shortcode_atts( array( 'post' => null, 'id' => null ), $attributes );
- return jetpack_geo_get_location( $attributes['post'] ? $attributes['post'] : $attributes['id'] );
-}
-
-/**
- * Get the geo-location data associated with the supplied post ID, if it's available
- * and marked as being available for public display. The returned array will contain
- * "latitude", "longitude" and "label" keys.
- *
- * If you do not supply a value for $post_id, the global $post will be used, if
- * available.
- *
- * @param integer|null $post_id
- *
- * @return array|null
- */
-function jetpack_geo_get_data( $post_id = null) {
- $geo = Jetpack_Geo_Location::init();
-
- if ( ! $post_id ) {
- $post_id = $geo->get_post_id();
- }
-
- $meta_values = $geo->get_meta_values( $post_id );
-
- if ( ! $meta_values['is_public'] || ! $meta_values['is_populated'] ) {
- return null;
- }
-
- return array(
- 'latitude' => $meta_values['latitude'],
- 'longitude' => $meta_values['longitude'],
- 'label' => $meta_values['label']
- );
-}
-
-/**
- * Display the label HTML for the geo-location information associated with the supplied
- * post ID.
- *
- * If you do not supply a value for $post_id, the global $post will be used, if
- * available.
- *
- * @param integer|null $post_id
- *
- * @return void
- */
-function jetpack_geo_display_location( $post_id = null ) {
- echo jetpack_geo_get_location( $post_id );
-}
-
-/**
- * Return the label HTML for the geo-location information associated with the supplied
- * post ID.
- *
- * If you do not supply a value for $post_id, the global $post will be used, if
- * available.
- *
- * @param integer|null $post_id
- *
- * @return string
- */
-function jetpack_geo_get_location( $post_id = null ) {
- return Jetpack_Geo_Location::init()->get_location_label( $post_id );
-}
diff --git a/plugins/jetpack/modules/geo-location/class.jetpack-geo-location.php b/plugins/jetpack/modules/geo-location/class.jetpack-geo-location.php
deleted file mode 100644
index e4941537..00000000
--- a/plugins/jetpack/modules/geo-location/class.jetpack-geo-location.php
+++ /dev/null
@@ -1,425 +0,0 @@
-<?php
-
-/**
- * Adds support for geo-location features.
- *
- * All Jetpack sites can support geo-location features. Users can tag posts with geo-location data
- * using the UI provided by Calypso. That information will be included in RSS feeds, meta tags during
- * wp_head, and in the Geo microformat following post content.
- *
- * If your theme declares support for "geo-location", you'll also get a small icon and location label
- * visible to users at the bottom of single posts and pages.
- *
- * To declare support in your theme, call `add_theme_support( 'jetpack-geo-location' )`.
- *
- * Once you've added theme support, you can rely on the standard HTML output generated in the
- * the_content_location_display() method of this class. Or, you can use the "geo_location_display"
- * filter to generate custom HTML for your particular theme. Your filter function will receive an
- * the default HTML as its first argument and an array containing the geo-location information as
- * its second argument in the following format:
- *
- * array(
- * 'is_public' => boolean,
- * 'latitude' => float,
- * 'longitude' => float,
- * 'label' => string,
- * 'is_populated' => boolean
- * )
- *
- * Add your filter with:
- *
- * add_filter( 'jetpack_geo_location_display', 'your_filter_function_name', 10, 2);
- */
-class Jetpack_Geo_Location {
- private static $instance;
-
- /**
- * Whether dashicons are enqueued.
- *
- * @since 6.6.0
- *
- * @var bool
- */
- private static $style_enqueued = false;
-
- public static function init() {
- if ( is_null( self::$instance ) ) {
- self::$instance = new Jetpack_Geo_Location();
- }
-
- return self::$instance;
- }
-
- /**
- * This is mostly just used for testing purposes.
- */
- public static function reset_instance() {
- self::$instance = null;
- }
-
- public function __construct() {
- add_action( 'init', array( $this, 'wordpress_init' ) );
- add_action( 'wp_head', array( $this, 'wp_head' ) );
- add_filter( 'the_content', array( $this, 'the_content_microformat' ) );
-
- $this->register_rss_hooks();
- }
-
- /**
- * Register support for the geo-location feature on pages and posts. Register the meta
- * fields managed by this plugin so that they are properly sanitized during save.
- */
- public function wordpress_init() {
- // Only render location label after post content, if the theme claims to support "geo-location".
- if ( current_theme_supports( 'jetpack-geo-location' ) ) {
- add_filter( 'the_content', array( $this, 'the_content_location_display' ), 15, 1 );
- }
-
- add_post_type_support( 'post', 'geo-location' );
- add_post_type_support( 'page', 'geo-location' );
-
- register_meta(
- 'post',
- 'geo_public',
- array(
- 'sanitize_callback' => array( $this, 'sanitize_public' ),
- 'type' => 'boolean',
- 'single' => true,
- )
- );
-
- register_meta(
- 'post',
- 'geo_latitude',
- array(
- 'sanitize_callback' => array( $this, 'sanitize_coordinate' ),
- 'type' => 'float',
- 'single' => true,
- )
- );
-
- register_meta(
- 'post',
- 'geo_longitude',
- array(
- 'sanitize_callback' => array( $this, 'sanitize_coordinate' ),
- 'type' => 'float',
- 'single' => true,
- )
- );
-
- register_meta(
- 'post',
- 'geo_address',
- array(
- 'sanitize_callback' => 'sanitize_text_field',
- 'type' => 'string',
- 'single' => true,
- )
- );
- }
-
- /**
- * Filter "public" input to always be either 1 or 0.
- *
- * @param mixed $public
- *
- * @return int
- */
- public function sanitize_public( $public ) {
- return absint( $public ) ? 1 : 0;
- }
-
- /**
- * Filter geo coordinates and normalize them to floats with 7 digits of precision.
- *
- * @param mixed $coordinate
- *
- * @return float|null
- */
- public function sanitize_coordinate( $coordinate ) {
- if ( ! $coordinate ) {
- return null;
- }
-
- return round( (float) $coordinate, 7 );
- }
-
- /**
- * Render geo.position and ICBM meta tags with public geo meta values when rendering
- * a single post.
- */
- public function wp_head() {
- if ( ! is_single() ) {
- return;
- }
-
- $meta_values = $this->get_meta_values( $this->get_post_id() );
-
- if ( ! $meta_values['is_public'] ) {
- return;
- }
-
- if ( ! self::$style_enqueued ) {
- // only enqueue scripts and styles when needed.
- self::enqueue_scripts();
- self::$style_enqueued = true;
- }
-
- echo "\n<!-- Jetpack Geo-location Tags -->\n";
-
- if ( $meta_values['label'] ) {
- printf(
- '<meta name="geo.placename" content="%s" />',
- esc_attr( $meta_values['label'] )
- );
- }
-
- printf(
- '<meta name="geo.position" content="%s;%s" />' . PHP_EOL,
- esc_attr( $meta_values['latitude'] ),
- esc_attr( $meta_values['longitude'] )
- );
-
- printf(
- '<meta name="ICBM" content="%s, %s" />' . PHP_EOL,
- esc_attr( $meta_values['latitude'] ),
- esc_attr( $meta_values['longitude'] )
- );
-
- echo "\n<!-- End Jetpack Geo-location Tags -->\n";
- }
-
- /**
- * Append public meta values in the Geo microformat (https://en.wikipedia.org/wiki/Geo_(microformat)
- * to the supplied content.
- *
- * Note that we cannot render the microformat in the context of an excerpt because tags are stripped
- * in that context, making our microformat data visible.
- *
- * @param string $content
- *
- * @return string
- */
- public function the_content_microformat( $content ) {
- if ( is_feed() || $this->is_currently_excerpt_filter() ) {
- return $content;
- }
-
- $meta_values = $this->get_meta_values( $this->get_post_id() );
-
- if ( ! $meta_values['is_public'] ) {
- return $content;
- }
-
- $microformat = sprintf(
- '<div id="geo-post-%d" class="geo geo-post" style="display: none">',
- esc_attr( $this->get_post_id() )
- );
-
- $microformat .= sprintf(
- '<span class="latitude">%s</span>',
- esc_html( $meta_values['latitude'] )
- );
-
- $microformat .= sprintf(
- '<span class="longitude">%s</span>',
- esc_html( $meta_values['longitude'] )
- );
-
- $microformat .= '</div>';
-
- return $content . $microformat;
- }
-
- /**
- * Register a range of hooks for integrating geo data with various feeds.
- */
- public function register_rss_hooks() {
- add_action( 'rss2_ns', array( $this, 'rss_namespace' ) );
- add_action( 'atom_ns', array( $this, 'rss_namespace' ) );
- add_action( 'rdf_ns', array( $this, 'rss_namespace' ) );
- add_action( 'rss_item', array( $this, 'rss_item' ) );
- add_action( 'rss2_item', array( $this, 'rss_item' ) );
- add_action( 'atom_entry', array( $this, 'rss_item' ) );
- add_action( 'rdf_item', array( $this, 'rss_item' ) );
- }
-
- /**
- * Add the georss namespace during RSS generation.
- */
- public function rss_namespace() {
- echo PHP_EOL . 'xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"' . PHP_EOL;
- }
-
- /**
- * Output georss data for RSS items, assuming we have data for the currently rendered post and
- * that data as marked as public.
- */
- public function rss_item() {
- $meta_values = $this->get_meta_values( $this->get_post_id() );
-
- if ( ! $meta_values['is_public'] ) {
- return;
- }
-
- printf(
- "\t<georss:point>%s %s</georss:point>\n",
- ent2ncr( esc_html( $meta_values['latitude'] ) ),
- ent2ncr( esc_html( $meta_values['longitude'] ) )
- );
-
- printf( "\t\t<geo:lat>%s</geo:lat>\n", ent2ncr( esc_html( $meta_values['latitude'] ) ) );
- printf( "\t\t<geo:long>%s</geo:long>\n", ent2ncr( esc_html( $meta_values['longitude'] ) ) );
- }
-
- /**
- * Enqueue CSS for rendering post flair with geo-location.
- */
- private static function enqueue_scripts() {
- wp_enqueue_style( 'dashicons' );
- }
-
- /**
- * If we're rendering a single post and public geo-location data is available for it,
- * include the human-friendly location label in the output.
- *
- * @param string $content
- *
- * @return string
- */
- public function the_content_location_display( $content ) {
- if ( ! is_single() ) {
- return $content;
- }
-
- return $content . $this->get_location_label();
- }
-
- /**
- * Get the HTML for displaying a label representing the location associated with the
- * supplied post ID. If no post ID is given, we'll use the global $post variable, if
- * it is available.
- *
- * @param integer|null $post_id
- *
- * @return string
- */
- public function get_location_label( $post_id = null ) {
- $meta_values = $this->get_meta_values( $post_id ? $post_id : $this->get_post_id() );
-
- if ( ! $meta_values['is_public'] ) {
- return '';
- }
-
- // If the location has not been labeled, do not show the location.
- if ( ! $meta_values['label'] ) {
- return '';
- }
-
- $html = '<div class="post-geo-location-label geo-chip">';
- $html .= '<span class="dashicons dashicons-location" style="vertical-align: text-top;"></span> ';
- $html .= esc_html( $meta_values['label'] );
- $html .= '</div>';
-
- /**
- * Allow modification or replacement of the default geo-location display HTML.
- *
- * @module geo-location
- *
- * @param array $html The default HTML for displaying a geo-location label.
- * @param array $geo_data An array containing "latitude", "longitude" and "label".
- */
- $html = apply_filters( 'jetpack_geo_location_display', $html, $meta_values );
-
- return $html;
- }
-
- /**
- * Get the ID of the current global post object, if available. Otherwise, return null.
- *
- * This isolates the access of the global scope to this single method, making it easier to
- * safeguard against unexpected missing $post objects in other hook functions.
- *
- * @return int|null
- */
- public function get_post_id() {
- global $post;
-
- if ( ! isset( $post ) || ! $post || ! is_object( $post ) || ! isset( $post->ID ) ) {
- return null;
- }
-
- return $post->ID;
- }
-
- /**
- * This method always returns an array with the following structure:
- *
- * array(is_public => bool, latitude => float, longitude => float, label => string, is_populated => bool)
- *
- * So, regardless of whether your post actually has values in postmeta for the geo-location fields,
- * you can be sure that you can reference those array keys in calling code without having to juggle
- * isset(), array_key_exists(), etc.
- *
- * Mocking this method during testing can also be useful for testing output and logic in various
- * hook functions.
- *
- * @param integer $post_id
- *
- * @return array A predictably structured array representing the meta values for the supplied post ID.
- */
- public function get_meta_values( $post_id ) {
- $meta_values = array(
- 'is_public' => (bool) $this->sanitize_public( $this->get_meta_value( $post_id, 'public' ) ),
- 'latitude' => $this->sanitize_coordinate( $this->get_meta_value( $post_id, 'latitude' ) ),
- 'longitude' => $this->sanitize_coordinate( $this->get_meta_value( $post_id, 'longitude' ) ),
- 'label' => trim( $this->get_meta_value( $post_id, 'address' ) ),
- 'is_populated' => false,
- );
-
- if ( $meta_values['latitude'] && $meta_values['longitude'] && $meta_values['label'] ) {
- $meta_values['is_populated'] = true;
- }
-
- return $meta_values;
- }
-
- /**
- * This function wraps get_post_meta() to enable us to keep the "geo_" prefix isolated to a single
- * location in the code and to assist in mocking during testing.
- *
- * @param integer $post_id
- * @param string $meta_field_name
- *
- * @return mixed
- */
- public function get_meta_value( $post_id, $meta_field_name ) {
- if ( ! $post_id ) {
- return null;
- }
-
- return get_post_meta( $post_id, 'geo_' . $meta_field_name, true );
- }
-
- /**
- * Check to see if the current filter is the get_the_excerpt filter.
- *
- * Just checking current_filter() here is not adequate because current_filter() only looks
- * at the last element in the $wp_current_filter array. In the context of rendering an
- * excerpt, however, both get_the_excerpt and the_content are present in that array.
- *
- * @return bool
- */
- public function is_currently_excerpt_filter() {
- if ( ! isset( $GLOBALS['wp_current_filter'] ) ) {
- return false;
- }
-
- $current_filters = (array) $GLOBALS['wp_current_filter'];
-
- return in_array( 'get_the_excerpt', $current_filters, true );
- }
-}
-
-Jetpack_Geo_Location::init();
diff --git a/plugins/jetpack/modules/google-analytics.php b/plugins/jetpack/modules/google-analytics.php
deleted file mode 100644
index 21a42921..00000000
--- a/plugins/jetpack/modules/google-analytics.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-/**
- * Module Name: Google Analytics
- * Module Description: Set up Google Analytics without touching a line of code.
- * First Introduced: 4.5
- * Sort Order: 37
- * Requires Connection: Yes
- * Auto Activate: No
- * Feature: Engagement
- * Additional Search Queries: webmaster, google, analytics, console
- * Plans: business, premium
- */
-
-include dirname( __FILE__ ) . "/google-analytics/wp-google-analytics.php";
diff --git a/plugins/jetpack/modules/google-analytics/classes/wp-google-analytics-legacy.php b/plugins/jetpack/modules/google-analytics/classes/wp-google-analytics-legacy.php
deleted file mode 100644
index ddca0e46..00000000
--- a/plugins/jetpack/modules/google-analytics/classes/wp-google-analytics-legacy.php
+++ /dev/null
@@ -1,256 +0,0 @@
-<?php
-
-/**
-* Jetpack_Google_Analytics_Legacy hooks and enqueues support for ga.js
-* https://developers.google.com/analytics/devguides/collection/gajs/
-*
-* @author Aaron D. Campbell (original)
-* @author allendav
-*/
-
-/**
-* Bail if accessed directly
-*/
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-class Jetpack_Google_Analytics_Legacy {
- public function __construct() {
- add_filter( 'jetpack_wga_classic_custom_vars', array( $this, 'jetpack_wga_classic_anonymize_ip' ) );
- add_filter( 'jetpack_wga_classic_custom_vars', array( $this, 'jetpack_wga_classic_track_purchases' ) );
- add_action( 'wp_footer', array( $this, 'insert_code' ) );
- add_action( 'wp_footer', array( $this, 'jetpack_wga_classic_track_add_to_cart' ) );
- }
-
- /**
- * Used to generate a tracking URL
- * Called exclusively by insert_code
- *
- * @param array $track - Must have ['data'] and ['code'].
- * @return string - Tracking URL
- */
- private function _get_url( $track ) {
- $site_url = ( is_ssl() ? 'https://':'http://' ) . sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) ); // Input var okay.
- foreach ( $track as $k => $value ) {
- if ( strpos( strtolower( $value ), strtolower( $site_url ) ) === 0 ) {
- $track[ $k ] = substr( $track[ $k ], strlen( $site_url ) );
- }
- if ( 'data' === $k ) {
- $track[ $k ] = preg_replace( '/^https?:\/\/|^\/+/i', '', $track[ $k ] );
- }
-
- // This way we don't lose search data.
- if ( 'data' === $k && 'search' === $track['code'] ) {
- $track[ $k ] = rawurlencode( $track[ $k ] );
- } else {
- $track[ $k ] = preg_replace( '/[^a-z0-9\.\/\+\?=-]+/i', '_', $track[ $k ] );
- }
-
- $track[ $k ] = trim( $track[ $k ], '_' );
- }
- $char = ( strpos( $track['data'], '?' ) === false ) ? '?' : '&amp;';
- return str_replace( "'", "\'", "/{$track['code']}/{$track['data']}{$char}referer=" . rawurlencode( isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : '' ) ); // Input var okay.
- }
-
- /**
- * This injects the Google Analytics code into the footer of the page.
- * Called exclusively by wp_footer action
- */
- public function insert_code() {
- $tracking_id = Jetpack_Google_Analytics_Options::get_tracking_code();
- if ( empty( $tracking_id ) ) {
- echo "<!-- Your Google Analytics Plugin is missing the tracking ID -->\r\n";
- return;
- }
-
- // If we're in the admin_area, return without inserting code.
- if ( is_admin() ) {
- return;
- }
-
- $custom_vars = array(
- "_gaq.push(['_setAccount', '{$tracking_id}']);",
- );
-
- $track = array();
- if ( is_404() ) {
- // This is a 404 and we are supposed to track them.
- $custom_vars[] = "_gaq.push(['_trackEvent', '404', document.location.href, document.referrer]);";
- } elseif (
- is_search()
- && isset( $_REQUEST['s'] )
- ) {
- // Set track for searches, if it's a search, and we are supposed to.
- $track['data'] = sanitize_text_field( wp_unslash( $_REQUEST['s'] ) ); // Input var okay.
- $track['code'] = 'search';
- }
-
- if ( ! empty( $track ) ) {
- $track['url'] = $this->_get_url( $track );
- // adjust the code that we output, account for both types of tracking.
- $track['url'] = esc_js( str_replace( '&', '&amp;', $track['url'] ) );
- $custom_vars[] = "_gaq.push(['_trackPageview','{$track['url']}']);";
- } else {
- $custom_vars[] = "_gaq.push(['_trackPageview']);";
- }
-
- /**
- * Allow for additional elements to be added to the classic Google Analytics queue (_gaq) array
- *
- * @since 5.4.0
- *
- * @param array $custom_vars Array of classic Google Analytics queue elements
- */
- $custom_vars = apply_filters( 'jetpack_wga_classic_custom_vars', $custom_vars );
-
- // Ref: https://developers.google.com/analytics/devguides/collection/gajs/gaTrackingEcommerce#Example
- printf(
- "<!-- Jetpack Google Analytics -->
- <script type='text/javascript'>
- var _gaq = _gaq || [];
- %s
- (function() {
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
- ga.src = ('https:' === document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
- })();
- </script>\r\n",
- implode( "\r\n", $custom_vars )
- );
- }
-
- /**
- * Used to filter in the anonymize IP snippet to the custom vars array for classic analytics
- * Ref https://developers.google.com/analytics/devguides/collection/gajs/methods/gaJSApi_gat#_gat._anonymizelp
- * @param array custom vars to be filtered
- * @return array possibly updated custom vars
- */
- public function jetpack_wga_classic_anonymize_ip( $custom_vars ) {
- if ( Jetpack_Google_Analytics_Options::anonymize_ip_is_enabled() ) {
- array_push( $custom_vars, "_gaq.push(['_gat._anonymizeIp']);" );
- }
-
- return $custom_vars;
- }
-
- /**
- * Used to filter in the order details to the custom vars array for classic analytics
- * @param array custom vars to be filtered
- * @return array possibly updated custom vars
- */
- public function jetpack_wga_classic_track_purchases( $custom_vars ) {
- global $wp;
-
- if ( ! class_exists( 'WooCommerce' ) ) {
- return $custom_vars;
- }
-
- if ( ! Jetpack_Google_Analytics_Options::has_tracking_code() ) {
- return;
- }
-
- // Ref: https://developers.google.com/analytics/devguides/collection/gajs/gaTrackingEcommerce#Example
- if ( ! Jetpack_Google_Analytics_Options::track_purchases_is_enabled() ) {
- return $custom_vars;
- }
-
- $minimum_woocommerce_active = class_exists( 'WooCommerce' ) && version_compare( WC_VERSION, '3.0', '>=' );
- if ( $minimum_woocommerce_active && is_order_received_page() ) {
- $order_id = isset( $wp->query_vars['order-received'] ) ? $wp->query_vars['order-received'] : 0;
- if ( 0 < $order_id && 1 != get_post_meta( $order_id, '_ga_tracked', true ) ) {
- $order = new WC_Order( $order_id );
-
- // [ '_add_Trans', '123', 'Site Title', '21.00', '1.00', '5.00', 'Snohomish', 'WA', 'USA' ]
- array_push(
- $custom_vars,
- sprintf(
- '_gaq.push( %s );', json_encode(
- array(
- '_addTrans',
- (string) $order->get_order_number(),
- get_bloginfo( 'name' ),
- (string) $order->get_total(),
- (string) $order->get_total_tax(),
- (string) $order->get_total_shipping(),
- (string) $order->get_billing_city(),
- (string) $order->get_billing_state(),
- (string) $order->get_billing_country()
- )
- )
- )
- );
-
- // Order items
- if ( $order->get_items() ) {
- foreach ( $order->get_items() as $item ) {
- $product = $order->get_product_from_item( $item );
- $product_sku_or_id = $product->get_sku() ? $product->get_sku() : $product->get_id();
-
- array_push(
- $custom_vars,
- sprintf(
- '_gaq.push( %s );', json_encode(
- array(
- '_addItem',
- (string) $order->get_order_number(),
- (string) $product_sku_or_id,
- $item['name'],
- Jetpack_Google_Analytics_Utils::get_product_categories_concatenated( $product ),
- (string) $order->get_item_total( $item ),
- (string) $item['qty']
- )
- )
- )
- );
- }
- } // get_items
-
- // Mark the order as tracked
- update_post_meta( $order_id, '_ga_tracked', 1 );
- array_push( $custom_vars, "_gaq.push(['_trackTrans']);" );
- } // order not yet tracked
- } // is order received page
-
- return $custom_vars;
- }
-
- /**
- * Used to add footer javascript to track user clicking on add-to-cart buttons
- * on single views (.single_add_to_cart_button) and list views (.add_to_cart_button)
- */
- public function jetpack_wga_classic_track_add_to_cart() {
- if ( ! class_exists( 'WooCommerce' ) ) {
- return;
- }
-
- if ( ! Jetpack_Google_Analytics_Options::has_tracking_code() ) {
- return;
- }
-
- if ( ! Jetpack_Google_Analytics_Options::track_add_to_cart_is_enabled() ) {
- return;
- }
-
- if ( is_product() ) { // product page
- global $product;
- $product_sku_or_id = $product->get_sku() ? $product->get_sku() : "#" + $product->get_id();
- wc_enqueue_js(
- "jQuery( function( $ ) {
- $( '.single_add_to_cart_button' ).click( function() {
- _gaq.push(['_trackEvent', 'Products', 'Add to Cart', '#" . esc_js( $product_sku_or_id ) . "']);
- } );
- } );"
- );
- } else if ( is_woocommerce() ) { // any other page that uses templates (like product lists, archives, etc)
- wc_enqueue_js(
- "jQuery( function( $ ) {
- $( '.add_to_cart_button:not(.product_type_variable, .product_type_grouped)' ).click( function() {
- var label = $( this ).data( 'product_sku' ) ? $( this ).data( 'product_sku' ) : '#' + $( this ).data( 'product_id' );
- _gaq.push(['_trackEvent', 'Products', 'Add to Cart', label]);
- } );
- } );"
- );
- }
- }
-}
diff --git a/plugins/jetpack/modules/google-analytics/classes/wp-google-analytics-options.php b/plugins/jetpack/modules/google-analytics/classes/wp-google-analytics-options.php
deleted file mode 100644
index b6e208b7..00000000
--- a/plugins/jetpack/modules/google-analytics/classes/wp-google-analytics-options.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-/**
-* Jetpack_Google_Analytics_Options provides a single interface to module options
-*
-* @author allendav
-*/
-
-/**
-* Bail if accessed directly
-*/
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-class Jetpack_Google_Analytics_Options {
- public static function get_option( $option_name, $default = false ) {
- $o = get_option( 'jetpack_wga' );
- return isset( $o[ $option_name ] ) ? $o[ $option_name ] : $default;
- }
-
- public static function get_tracking_code() {
- return self::get_option( 'code', '' );
- }
-
- public static function has_tracking_code() {
- $code = self::get_tracking_code();
- return ! empty( $code );
- }
-
- // Options used by both legacy and universal analytics
- public static function anonymize_ip_is_enabled() {
- return self::get_option( 'anonymize_ip' );
- }
-
- // eCommerce options used by both legacy and universal analytics
- public static function track_purchases_is_enabled() {
- return self::get_option( 'ec_track_purchases' );
- }
-
- public static function track_add_to_cart_is_enabled() {
- return self::get_option( 'ec_track_add_to_cart' );
- }
-
- // Enhanced eCommerce options
- public static function enhanced_ecommerce_tracking_is_enabled() {
- return self::get_option( 'enh_ec_tracking' );
- }
-
- public static function track_remove_from_cart_is_enabled() {
- return self::get_option( 'enh_ec_track_remove_from_cart' );
- }
-
- public static function track_product_impressions_is_enabled() {
- return self::get_option( 'enh_ec_track_prod_impression' );
- }
-
- public static function track_product_clicks_is_enabled() {
- return self::get_option( 'enh_ec_track_prod_click' );
- }
-
- public static function track_product_detail_view_is_enabled() {
- return self::get_option( 'enh_ec_track_prod_detail_view' );
- }
-
- public static function track_checkout_started_is_enabled() {
- return self::get_option( 'enh_ec_track_checkout_started' );
- }
-}
-
diff --git a/plugins/jetpack/modules/google-analytics/classes/wp-google-analytics-universal.php b/plugins/jetpack/modules/google-analytics/classes/wp-google-analytics-universal.php
deleted file mode 100644
index 999fffbd..00000000
--- a/plugins/jetpack/modules/google-analytics/classes/wp-google-analytics-universal.php
+++ /dev/null
@@ -1,410 +0,0 @@
-<?php
-
-/**
-* Jetpack_Google_Analytics_Universal hooks and and enqueues support for analytics.js
-* https://developers.google.com/analytics/devguides/collection/analyticsjs/
-* https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce
-*
-* @author allendav
-*/
-
-/**
-* Bail if accessed directly
-*/
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-class Jetpack_Google_Analytics_Universal {
- public function __construct() {
- add_filter( 'jetpack_wga_universal_commands', array( $this, 'maybe_anonymize_ip' ) );
- add_filter( 'jetpack_wga_universal_commands', array( $this, 'maybe_track_purchases' ) );
-
- add_action( 'wp_head', array( $this, 'wp_head' ), 999999 );
-
- add_action( 'woocommerce_after_add_to_cart_button', array( $this, 'add_to_cart' ) );
- add_action( 'wp_footer', array( $this, 'loop_add_to_cart' ) );
- add_action( 'woocommerce_after_cart', array( $this, 'remove_from_cart' ) );
- add_action( 'woocommerce_after_mini_cart', array( $this, 'remove_from_cart' ) );
- add_filter( 'woocommerce_cart_item_remove_link', array( $this, 'remove_from_cart_attributes' ), 10, 2 );
- add_action( 'woocommerce_after_shop_loop_item', array( $this, 'listing_impression' ) );
- add_action( 'woocommerce_after_shop_loop_item', array( $this, 'listing_click' ) );
- add_action( 'woocommerce_after_single_product', array( $this, 'product_detail' ) );
- add_action( 'woocommerce_after_checkout_form', array( $this, 'checkout_process' ) );
-
- // we need to send a pageview command last - so we use priority 24 to add
- // this command's JavaScript just before wc_print_js is called (pri 25)
- add_action( 'wp_footer', array( $this, 'send_pageview_in_footer' ), 24 );
- }
-
- public function wp_head() {
- $tracking_code = Jetpack_Google_Analytics_Options::get_tracking_code();
- if ( empty( $tracking_code ) ) {
- echo "<!-- No tracking ID configured for Jetpack Google Analytics -->\r\n";
- return;
- }
-
- // If we're in the admin_area, return without inserting code.
- if ( is_admin() ) {
- return;
- }
-
- /**
- * Allow for additional elements to be added to the universal Google Analytics queue (ga) array
- *
- * @since 5.6.0
- *
- * @param array $custom_vars Array of universal Google Analytics queue elements
- */
- $universal_commands = apply_filters( 'jetpack_wga_universal_commands', array() );
-
- $async_code = "
- <!-- Jetpack Google Analytics -->
- <script>
- window.ga = window.ga || function(){ ( ga.q = ga.q || [] ).push( arguments ) }; ga.l=+new Date;
- ga( 'create', '%tracking_id%', 'auto' );
- ga( 'require', 'ec' );
- %universal_commands%
- </script>
- <script async src='https://www.google-analytics.com/analytics.js'></script>
- <!-- End Jetpack Google Analytics -->
- ";
- $async_code = str_replace( '%tracking_id%', $tracking_code, $async_code );
-
- $universal_commands_string = implode( "\r\n", $universal_commands );
- $async_code = str_replace( '%universal_commands%', $universal_commands_string, $async_code );
-
- echo "$async_code\r\n";
- }
-
- public function maybe_anonymize_ip( $command_array ) {
- if ( Jetpack_Google_Analytics_Options::anonymize_ip_is_enabled() ) {
- array_push( $command_array, "ga( 'set', 'anonymizeIp', true );" );
- }
-
- return $command_array;
- }
-
- public function maybe_track_purchases( $command_array ) {
- global $wp;
-
- if ( ! Jetpack_Google_Analytics_Options::track_purchases_is_enabled() ) {
- return $command_array;
- }
-
- if ( ! class_exists( 'WooCommerce' ) ) {
- return $command_array;
- }
-
- $minimum_woocommerce_active = class_exists( 'WooCommerce' ) && version_compare( WC_VERSION, '3.0', '>=' );
- if ( ! $minimum_woocommerce_active ) {
- return $command_array;
- }
-
- if ( ! is_order_received_page() ) {
- return $command_array;
- }
-
- $order_id = isset( $wp->query_vars['order-received'] ) ? $wp->query_vars['order-received'] : 0;
- if ( 0 == $order_id ) {
- return $command_array;
- }
-
- // A 1 indicates we've already tracked this order - don't do it again
- if ( 1 == get_post_meta( $order_id, '_ga_tracked', true ) ) {
- return $command_array;
- }
-
- $order = new WC_Order( $order_id );
- $order_currency = $order->get_currency();
- $command = "ga( 'set', '&cu', '" . esc_js( $order_currency ) . "' );";
- array_push( $command_array, $command );
-
- // Order items
- if ( $order->get_items() ) {
- foreach ( $order->get_items() as $item ) {
- $product = $order->get_product_from_item( $item );
- $product_sku_or_id = Jetpack_Google_Analytics_Utils::get_product_sku_or_id( $product );
-
- $item_details = array(
- 'id' => $product_sku_or_id,
- 'name' => $item['name'],
- 'category' => Jetpack_Google_Analytics_Utils::get_product_categories_concatenated( $product ),
- 'price' => $order->get_item_total( $item ),
- 'quantity' => $item['qty'],
- );
- $command = "ga( 'ec:addProduct', " . wp_json_encode( $item_details ) . " );";
- array_push( $command_array, $command );
- }
- }
-
- // Order summary
- $summary = array(
- 'id' => $order->get_order_number(),
- 'affiliation' => get_bloginfo( 'name' ),
- 'revenue' => $order->get_total(),
- 'tax' => $order->get_total_tax(),
- 'shipping' => $order->get_total_shipping()
- );
- $command = "ga( 'ec:setAction', 'purchase', " . wp_json_encode( $summary ) . " );";
- array_push( $command_array, $command );
-
- update_post_meta( $order_id, '_ga_tracked', 1 );
-
- return $command_array;
- }
-
- public function add_to_cart() {
- if ( ! Jetpack_Google_Analytics_Options::track_add_to_cart_is_enabled() ) {
- return;
- }
-
- if ( ! is_single() ) {
- return;
- }
-
- global $product;
-
- $product_sku_or_id = Jetpack_Google_Analytics_Utils::get_product_sku_or_id( $product );
- $selector = ".single_add_to_cart_button";
-
- wc_enqueue_js(
- "$( '" . esc_js( $selector ) . "' ).click( function() {
- var productDetails = {
- 'id': '" . esc_js( $product_sku_or_id ) . "',
- 'name' : '" . esc_js( $product->get_title() ) . "',
- 'quantity': $( 'input.qty' ).val() ? $( 'input.qty' ).val() : '1',
- };
- ga( 'ec:addProduct', productDetails );
- ga( 'ec:setAction', 'add' );
- ga( 'send', 'event', 'UX', 'click', 'add to cart' );
- } );"
- );
- }
-
- public function loop_add_to_cart() {
- if ( ! Jetpack_Google_Analytics_Options::track_add_to_cart_is_enabled() ) {
- return;
- }
-
- if ( ! class_exists( 'WooCommerce' ) ) {
- return;
- }
-
- $minimum_woocommerce_active = class_exists( 'WooCommerce' ) && version_compare( WC_VERSION, '3.0', '>=' );
- if ( ! $minimum_woocommerce_active ) {
- return;
- }
-
- $selector = ".add_to_cart_button:not(.product_type_variable, .product_type_grouped)";
-
- wc_enqueue_js(
- "$( '" . esc_js( $selector ) . "' ).click( function() {
- var productSku = $( this ).data( 'product_sku' );
- var productID = $( this ).data( 'product_id' );
- var productDetails = {
- 'id': productSku ? productSku : '#' + productID,
- 'quantity': $( this ).data( 'quantity' ),
- };
- ga( 'ec:addProduct', productDetails );
- ga( 'ec:setAction', 'add' );
- ga( 'send', 'event', 'UX', 'click', 'add to cart' );
- } );"
- );
- }
-
- public function remove_from_cart() {
- if ( ! Jetpack_Google_Analytics_Options::enhanced_ecommerce_tracking_is_enabled() ) {
- return;
- }
-
- if ( ! Jetpack_Google_Analytics_Options::track_remove_from_cart_is_enabled() ) {
- return;
- }
-
- // We listen at div.woocommerce because the cart 'form' contents get forcibly
- // updated and subsequent removals from cart would then not have this click
- // handler attached
- wc_enqueue_js(
- "$( 'div.woocommerce' ).on( 'click', 'a.remove', function() {
- var productSku = $( this ).data( 'product_sku' );
- var productID = $( this ).data( 'product_id' );
- var quantity = $( this ).parent().parent().find( '.qty' ).val()
- var productDetails = {
- 'id': productSku ? productSku : '#' + productID,
- 'quantity': quantity ? quantity : '1',
- };
- ga( 'ec:addProduct', productDetails );
- ga( 'ec:setAction', 'remove' );
- ga( 'send', 'event', 'UX', 'click', 'remove from cart' );
- } );"
- );
- }
-
- /**
- * Adds the product ID and SKU to the remove product link (for use by remove_from_cart above) if not present
- *
- * @param string $url Full HTML a tag of the link to remove an item from the cart.
- * @param string $key Unique Key ID for a cart item.
- */
- public function remove_from_cart_attributes( $url, $key ) {
- if ( false !== strpos( $url, 'data-product_id' ) ) {
- return $url;
- }
-
- $item = WC()->cart->get_cart_item( $key );
- $product = $item['data'];
-
- $new_attributes = sprintf(
- '" data-product_id="%1$s" data-product_sku="%2$s">',
- esc_attr( $product->get_id() ),
- esc_attr( $product->get_sku() )
- );
-
- $url = str_replace( '">', $new_attributes, $url );
- return $url;
- }
-
- public function listing_impression() {
- if ( ! Jetpack_Google_Analytics_Options::enhanced_ecommerce_tracking_is_enabled() ) {
- return;
- }
-
- if ( ! Jetpack_Google_Analytics_Options::track_product_impressions_is_enabled() ) {
- return;
- }
-
- if ( isset( $_GET['s'] ) ) {
- $list = "Search Results";
- } else {
- $list = "Product List";
- }
-
- global $product, $woocommerce_loop;
- $product_sku_or_id = Jetpack_Google_Analytics_Utils::get_product_sku_or_id( $product );
-
- $item_details = array(
- 'id' => $product_sku_or_id,
- 'name' => $product->get_title(),
- 'category' => Jetpack_Google_Analytics_Utils::get_product_categories_concatenated( $product ),
- 'list' => $list,
- 'position' => $woocommerce_loop['loop']
- );
- wc_enqueue_js( "ga( 'ec:addImpression', " . wp_json_encode( $item_details ) . " );" );
- }
-
- public function listing_click() {
- if ( ! Jetpack_Google_Analytics_Options::enhanced_ecommerce_tracking_is_enabled() ) {
- return;
- }
-
- if ( ! Jetpack_Google_Analytics_Options::track_product_clicks_is_enabled() ) {
- return;
- }
-
- if ( isset( $_GET['s'] ) ) {
- $list = "Search Results";
- } else {
- $list = "Product List";
- }
-
- global $product, $woocommerce_loop;
- $product_sku_or_id = Jetpack_Google_Analytics_Utils::get_product_sku_or_id( $product );
-
- $selector = ".products .post-" . esc_js( $product->get_id() ) . " a";
-
- $item_details = array(
- 'id' => $product_sku_or_id,
- 'name' => $product->get_title(),
- 'category' => Jetpack_Google_Analytics_Utils::get_product_categories_concatenated( $product ),
- 'position' => $woocommerce_loop['loop']
- );
-
- wc_enqueue_js(
- "$( '" . esc_js( $selector ) . "' ).click( function() {
- if ( true === $( this ).hasClass( 'add_to_cart_button' ) ) {
- return;
- }
-
- ga( 'ec:addProduct', " . wp_json_encode( $item_details ) . " );
- ga( 'ec:setAction', 'click', { list: '" . esc_js( $list ) . "' } );
- ga( 'send', 'event', 'UX', 'click', { list: '" . esc_js( $list ) . "' } );
- } );"
- );
- }
-
- public function product_detail() {
- if ( ! Jetpack_Google_Analytics_Options::enhanced_ecommerce_tracking_is_enabled() ) {
- return;
- }
-
- if ( ! Jetpack_Google_Analytics_Options::track_product_detail_view_is_enabled() ) {
- return;
- }
-
- global $product;
- $product_sku_or_id = Jetpack_Google_Analytics_Utils::get_product_sku_or_id( $product );
-
- $item_details = array(
- 'id' => $product_sku_or_id,
- 'name' => $product->get_title(),
- 'category' => Jetpack_Google_Analytics_Utils::get_product_categories_concatenated( $product ),
- 'price' => $product->get_price()
- );
- wc_enqueue_js(
- "ga( 'ec:addProduct', " . wp_json_encode( $item_details ) . " );" .
- "ga( 'ec:setAction', 'detail' );"
- );
- }
-
- public function checkout_process() {
- if ( ! Jetpack_Google_Analytics_Options::enhanced_ecommerce_tracking_is_enabled() ) {
- return;
- }
-
- if ( ! Jetpack_Google_Analytics_Options::track_checkout_started_is_enabled() ) {
- return;
- }
-
- $universal_commands = array();
- $cart = WC()->cart->get_cart();
-
- foreach ( $cart as $cart_item_key => $cart_item ) {
- /**
- * This filter is already documented in woocommerce/templates/cart/cart.php
- */
- $product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );
- $product_sku_or_id = Jetpack_Google_Analytics_Utils::get_product_sku_or_id( $product );
-
- $item_details = array(
- 'id' => $product_sku_or_id,
- 'name' => $product->get_title(),
- 'category' => Jetpack_Google_Analytics_Utils::get_product_categories_concatenated( $product ),
- 'price' => $product->get_price(),
- 'quantity' => $cart_item[ 'quantity' ]
- );
-
- array_push( $universal_commands, "ga( 'ec:addProduct', " . wp_json_encode( $item_details ) . " );" );
- }
-
- array_push( $universal_commands, "ga( 'ec:setAction','checkout' );" );
-
- wc_enqueue_js( implode( "\r\n", $universal_commands ) );
- }
-
- public function send_pageview_in_footer() {
- if ( ! Jetpack_Google_Analytics_Options::has_tracking_code() ) {
- return;
- }
-
- if ( is_admin() ) {
- return;
- }
-
- if ( ! class_exists( 'WooCommerce' ) ) {
- return;
- }
-
- wc_enqueue_js( "ga( 'send', 'pageview' );" );
- }
-}
diff --git a/plugins/jetpack/modules/google-analytics/classes/wp-google-analytics-utils.php b/plugins/jetpack/modules/google-analytics/classes/wp-google-analytics-utils.php
deleted file mode 100644
index 807461de..00000000
--- a/plugins/jetpack/modules/google-analytics/classes/wp-google-analytics-utils.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-/**
-* Jetpack_Google_Analytics_Options provides a single interface to module options
-*
-* @author allendav
-*/
-
-/**
-* Bail if accessed directly
-*/
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-class Jetpack_Google_Analytics_Utils {
- /**
- * Gets product categories or varation attributes as a formatted concatenated string
- * @param WC_Product
- * @return string
- */
- public static function get_product_categories_concatenated( $product ) {
- if ( ! class_exists( 'WooCommerce' ) ) {
- return '';
- }
-
- if ( ! $product ) {
- return '';
- }
-
- $variation_data = $product->is_type( 'variation' ) ? wc_get_product_variation_attributes( $product->get_id() ) : '';
- if ( is_array( $variation_data ) && ! empty( $variation_data ) ) {
- $line = wc_get_formatted_variation( $variation_data, true );
- } else {
- $out = array();
- $categories = get_the_terms( $product->get_id(), 'product_cat' );
- if ( $categories ) {
- foreach ( $categories as $category ) {
- $out[] = $category->name;
- }
- }
- $line = join( "/", $out );
- }
- return $line;
- }
-
- /**
- * Gets a product's SKU with fallback to just ID. IDs are prepended with a hash symbol.
- * @param WC_Product
- * @return string
- */
- public static function get_product_sku_or_id( $product ) {
- if ( ! class_exists( 'WooCommerce' ) ) {
- return '';
- }
-
- if ( ! $product ) {
- return '';
- }
-
- return $product->get_sku() ? $product->get_sku() : '#' . $product->get_id();
- }
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/google-analytics/wp-google-analytics.php b/plugins/jetpack/modules/google-analytics/wp-google-analytics.php
deleted file mode 100644
index 8d7cdf24..00000000
--- a/plugins/jetpack/modules/google-analytics/wp-google-analytics.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-/*
- Copyright 2006 Aaron D. Campbell (email : wp_plugins@xavisys.com)
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-/**
- * Jetpack_Google_Analytics is the class that handles ALL of the plugin functionality.
- * It helps us avoid name collisions
- * http://codex.wordpress.org/Writing_a_Plugin#Avoiding_Function_Name_Collisions
- */
-
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-require_once( plugin_basename( 'classes/wp-google-analytics-utils.php' ) );
-require_once( plugin_basename( 'classes/wp-google-analytics-options.php' ) );
-require_once( plugin_basename( 'classes/wp-google-analytics-legacy.php' ) );
-require_once( plugin_basename( 'classes/wp-google-analytics-universal.php' ) );
-
-class Jetpack_Google_Analytics {
-
- /**
- * @var Jetpack_Google_Analytics - Static property to hold our singleton instance
- */
- static $instance = false;
-
- /**
- * @var Static property to hold concrete analytics impl that does the work (universal or legacy)
- */
- static $analytics = false;
-
- /**
- * This is our constructor, which is private to force the use of get_instance()
- *
- * @return void
- */
- private function __construct() {
- // At this time, we only leverage universal analytics when enhanced ecommerce is selected and WooCommerce is active.
- // Otherwise, don't bother emitting the tracking ID or fetching analytics.js
- if ( class_exists( 'WooCommerce' ) && Jetpack_Google_Analytics_Options::enhanced_ecommerce_tracking_is_enabled() ) {
- $analytics = new Jetpack_Google_Analytics_Universal();
- } else {
- $analytics = new Jetpack_Google_Analytics_Legacy();
- }
-
- }
-
- /**
- * Function to instantiate our class and make it a singleton
- */
- public static function get_instance() {
- if ( ! self::$instance ) {
- self::$instance = new self;
- }
-
- return self::$instance;
- }
-}
-
-global $jetpack_google_analytics;
-$jetpack_google_analytics = Jetpack_Google_Analytics::get_instance();
diff --git a/plugins/jetpack/modules/gplus-authorship.php b/plugins/jetpack/modules/gplus-authorship.php
deleted file mode 100644
index 88c13090..00000000
--- a/plugins/jetpack/modules/gplus-authorship.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Deprecated. No longer needed.
- *
- * @package Jetpack
- */
diff --git a/plugins/jetpack/modules/gravatar-hovercards.php b/plugins/jetpack/modules/gravatar-hovercards.php
deleted file mode 100644
index 6096ae77..00000000
--- a/plugins/jetpack/modules/gravatar-hovercards.php
+++ /dev/null
@@ -1,302 +0,0 @@
-<?php
-/**
- * Module Name: Gravatar Hovercards
- * Module Description: Enable pop-up business cards over commenters’ Gravatars.
- * Sort Order: 11
- * Recommendation Order: 13
- * First Introduced: 1.1
- * Requires Connection: No
- * Auto Activate: Yes
- * Module Tags: Social, Appearance
- * Feature: Appearance
- * Additional Search Queries: gravatar, hovercards
- */
-
-define( 'GROFILES__CACHE_BUSTER', gmdate( 'YM' ) . 'aa' ); // Break CDN cache, increment when gravatar.com/js/gprofiles.js changes
-
-function grofiles_hovercards_init() {
- add_filter( 'get_avatar', 'grofiles_get_avatar', 10, 2 );
- add_action( 'wp_enqueue_scripts', 'grofiles_attach_cards' );
- add_action( 'wp_footer', 'grofiles_extra_data' );
- add_action( 'admin_init', 'grofiles_add_settings' );
-
- add_action( 'load-index.php', 'grofiles_admin_cards' );
- add_action( 'load-users.php', 'grofiles_admin_cards' );
- add_action( 'load-edit-comments.php', 'grofiles_admin_cards' );
- add_action( 'load-options-discussion.php', 'grofiles_admin_cards_forced' );
-
- Jetpack::enable_module_configurable( __FILE__ );
- Jetpack::module_configuration_load( __FILE__, 'gravatar_hovercards_configuration_load' );
-}
-
-function gravatar_hovercards_configuration_load() {
- wp_safe_redirect( admin_url( 'options-discussion.php#show_avatars' ) );
- exit;
-}
-
-add_action( 'jetpack_modules_loaded', 'grofiles_hovercards_init' );
-
-/* Hovercard Settings */
-
-/**
- * Adds Gravatar Hovercard setting
- *
- * @todo - always print HTML, hide via CSS/JS if !show_avatars
- */
-function grofiles_add_settings() {
- if ( !get_option( 'show_avatars' ) )
- return;
-
- add_settings_field( 'gravatar_disable_hovercards', __( 'Gravatar Hovercards', 'jetpack' ), 'grofiles_setting_callback', 'discussion', 'avatars' );
- register_setting( 'discussion', 'gravatar_disable_hovercards', 'grofiles_hovercard_option_sanitize' );
-}
-
-/**
- * HTML for Gravatar Hovercard setting
- */
-function grofiles_setting_callback() {
- global $current_user;
-
- $checked = 'disabled' == get_option( 'gravatar_disable_hovercards' ) ? '' : 'checked="checked" ';
-
- echo "<label id='gravatar-hovercard-options'><input {$checked}name='gravatar_disable_hovercards' id='gravatar_disable_hovercards' type='checkbox' value='enabled' class='code' /> " . __( "View people's profiles when you mouse over their Gravatars", 'jetpack' ) . "</label>";
-?>
-<style type="text/css">
-#grav-profile-example img {
- float: left;
-}
-#grav-profile-example span {
- padding: 0 1em;
-}
-</style>
-<script type="text/javascript">
-// <![CDATA[
-jQuery( function($) {
- var tr = $( '#gravatar_disable_hovercards' ).change( function() {
- if ( $( this ).is( ':checked' ) ) {
- $( '#grav-profile-example' ).slideDown( 'fast' );
- } else {
- $( '#grav-profile-example' ).slideUp( 'fast' );
- }
- } ).parents( 'tr' );
- var ftr = tr.parents( 'table' ).find( 'tr:first' );
- if ( ftr.length && !ftr.find( '#gravatar_disable_hovercards' ).length ) {
- ftr.after( tr );
- }
-} );
-// ]]>
-</script>
- <p id="grav-profile-example" class="hide-if-no-js"<?php if ( !$checked ) echo ' style="display:none"'; ?>><?php echo get_avatar( $current_user->ID, 64 ); ?> <span><?php _e( 'Put your mouse over your Gravatar to check out your profile.', 'jetpack' ); ?> <br class="clear" /></span></p>
-<?php
-}
-
-/**
- * Sanitation filter for Gravatar Hovercard setting
- */
-function grofiles_hovercard_option_sanitize( $val ) {
- if ( 'disabled' == $val ) {
- return $val;
- }
-
- return $val ? 'enabled' : 'disabled';
-}
-
-
-/* Hovercard Display */
-
-/**
- * Stores the gravatars' users that need extra profile data attached.
- *
- * Getter/Setter
- *
- * @param int|string|null $author Setter: User ID or email address. Getter: null.
- *
- * @return mixed Setter: void. Getter: array of user IDs and email addresses.
- */
-function grofiles_gravatars_to_append( $author = null ) {
- static $authors = array();
-
- // Get
- if ( is_null( $author ) ) {
- return array_keys( $authors );
- }
-
- // Set
-
- if ( is_numeric( $author ) ) {
- $author = (int) $author;
- }
-
- $authors[$author] = true;
-}
-
-/**
- * Stores the user ID or email address for each gravatar generated.
- *
- * Attached to the 'get_avatar' filter.
- *
- * @param string $avatar The <img/> element of the avatar.
- * @param mixed $author User ID, email address, user login, comment object, user object, post object
- *
- * @return The <img/> element of the avatar.
- */
-function grofiles_get_avatar( $avatar, $author ) {
- if ( is_numeric( $author ) ) {
- grofiles_gravatars_to_append( $author );
- } else if ( is_string( $author ) ) {
- if ( false !== strpos( $author, '@' ) ) {
- grofiles_gravatars_to_append( $author );
- } else {
- if ( $user = get_user_by( 'slug', $author ) )
- grofiles_gravatars_to_append( $user->ID );
- }
- } else if ( isset( $author->comment_type ) ) {
- if ( '' != $author->comment_type && 'comment' != $author->comment_type )
- return $avatar;
- if ( $author->user_id )
- grofiles_gravatars_to_append( $author->user_id );
- else
- grofiles_gravatars_to_append( $author->comment_author_email );
- } else if ( isset( $author->user_login ) ) {
- grofiles_gravatars_to_append( $author->ID );
- } else if ( isset( $author->post_author ) ) {
- grofiles_gravatars_to_append( $author->post_author );
- }
-
- return $avatar;
-}
-
-/**
- * Loads Gravatar Hovercard script.
- *
- * @todo is_singular() only?
- */
-function grofiles_attach_cards() {
- global $blog_id;
-
- // Is the display of Avatars disabled?
- if ( ! get_option( 'show_avatars' ) ) {
- return;
- }
-
- // Is the display of Gravatar Hovercards disabled?
- if ( 'disabled' == Jetpack_Options::get_option_and_ensure_autoload( 'gravatar_disable_hovercards', '0' ) ) {
- return;
- }
-
- wp_enqueue_script( 'grofiles-cards', 'https://secure.gravatar.com/js/gprofiles.js', array( 'jquery' ), GROFILES__CACHE_BUSTER, true );
- wp_enqueue_script( 'wpgroho', plugins_url( 'wpgroho.js', __FILE__ ), array( 'grofiles-cards' ), false, true );
- if ( is_user_logged_in() ) {
- $cu = wp_get_current_user();
- $my_hash = md5( $cu->user_email );
- } else if ( !empty( $_COOKIE['comment_author_email_' . COOKIEHASH] ) ) {
- $my_hash = md5( $_COOKIE['comment_author_email_' . COOKIEHASH] );
- } else {
- $my_hash = '';
- }
- wp_localize_script( 'wpgroho', 'WPGroHo', compact( 'my_hash' ) );
-}
-
-function grofiles_attach_cards_forced() {
- add_filter( 'pre_option_gravatar_disable_hovercards', 'grofiles_force_gravatar_enable_hovercards' );
- grofiles_attach_cards();
-}
-
-function grofiles_force_gravatar_enable_hovercards() {
- return 'enabled';
-}
-
-function grofiles_admin_cards_forced() {
- add_action( 'admin_footer', 'grofiles_attach_cards_forced' );
-}
-
-function grofiles_admin_cards() {
- add_action( 'admin_footer', 'grofiles_attach_cards' );
-}
-
-function grofiles_extra_data() {
-?>
- <div style="display:none">
-<?php
- foreach ( grofiles_gravatars_to_append() as $author )
- grofiles_hovercards_data_html( $author );
-?>
- </div>
-<?php
-}
-
-/**
- * Echoes the data from grofiles_hovercards_data() as HTML elements.
- *
- * @since 5.5.0 Add support for a passed WP_User object
- *
- * @param int|string|WP_User $author User ID, email address, or a WP_User object
- */
-function grofiles_hovercards_data_html( $author ) {
- $data = grofiles_hovercards_data( $author );
- $hash = '';
- if ( is_numeric( $author ) ) {
- $user = get_userdata( $author );
- if ( $user ) {
- $hash = md5( $user->user_email );
- }
- } elseif ( is_email( $author ) ) {
- $hash = md5( $author );
- } elseif ( is_a( $author, 'WP_User' ) ) {
- $hash = md5( $author->user_email );
- }
-
- if ( ! $hash ) {
- return;
- }
-?>
- <div class="grofile-hash-map-<?php echo $hash; ?>">
-<?php foreach ( $data as $key => $value ) : ?>
- <span class="<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $value ); ?></span>
-<?php endforeach; ?>
- </div>
-<?php
-}
-
-
-/* API */
-
-/**
- * Returns the PHP callbacks for data sources.
- *
- * 'grofiles_hovercards_data_callbacks' filter
- *
- * @return array( data_key => data_callback, ... )
- */
-function grofiles_hovercards_data_callbacks() {
- /**
- * Filter the Gravatar Hovercard PHP callbacks.
- *
- * @module gravatar-hovercards
- *
- * @since 1.1.0
- *
- * @param array $args Array of data callbacks.
- */
- return apply_filters( 'grofiles_hovercards_data_callbacks', array() );
-}
-
-/**
- * Keyed JSON object containing all profile data provided by registered callbacks
- *
- * @param int|strung $author User ID or email address
- *
- * @return array( data_key => data, ... )
- */
-function grofiles_hovercards_data( $author ) {
- $r = array();
- foreach ( grofiles_hovercards_data_callbacks() as $key => $callback ) {
- if ( !is_callable( $callback ) )
- continue;
- $data = call_user_func( $callback, $author, $key );
- if ( !is_null( $data ) )
- $r[$key] = $data;
- }
-
- return $r;
-}
diff --git a/plugins/jetpack/modules/holiday-snow.php b/plugins/jetpack/modules/holiday-snow.php
deleted file mode 100644
index e8a94faa..00000000
--- a/plugins/jetpack/modules/holiday-snow.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Deprecated. No longer included in Jetpack.
- *
- * @package Jetpack
- */
diff --git a/plugins/jetpack/modules/infinite-scroll.php b/plugins/jetpack/modules/infinite-scroll.php
deleted file mode 100644
index a736ef00..00000000
--- a/plugins/jetpack/modules/infinite-scroll.php
+++ /dev/null
@@ -1,270 +0,0 @@
-<?php
-/**
- * Module Name: Infinite Scroll
- * Module Description: Automatically load new content when a visitor scrolls
- * Sort Order: 26
- * First Introduced: 2.0
- * Requires Connection: No
- * Auto Activate: No
- * Module Tags: Appearance
- * Feature: Appearance
- * Additional Search Queries: scroll, infinite, infinite scroll
- */
-
-/**
- * Jetpack-specific elements of Infinite Scroll
- */
-class Jetpack_Infinite_Scroll_Extras {
- /**
- * Class variables
- */
- // Oh look, a singleton
- private static $__instance = null;
-
- // Option names
- private $option_name_google_analytics = 'infinite_scroll_google_analytics';
-
- /**
- * Singleton implementation
- *
- * @return object
- */
- public static function instance() {
- if ( ! is_a( self::$__instance, 'Jetpack_Infinite_Scroll_Extras' ) )
- self::$__instance = new Jetpack_Infinite_Scroll_Extras;
-
- return self::$__instance;
- }
-
- /**
- * Register actions and filters
- *
- * @uses add_action, add_filter
- * @return null
- */
- private function __construct() {
- add_action( 'jetpack_modules_loaded', array( $this, 'action_jetpack_modules_loaded' ) );
-
- add_action( 'admin_init', array( $this, 'action_admin_init' ), 11 );
-
- add_action( 'after_setup_theme', array( $this, 'action_after_setup_theme' ), 5 );
-
- add_filter( 'infinite_scroll_js_settings', array( $this, 'filter_infinite_scroll_js_settings' ) );
-
- add_action( 'wp_enqueue_scripts', array( $this, 'action_wp_enqueue_scripts' ) );
- }
-
- /**
- * Enable "Configure" button on module card
- *
- * @uses Jetpack::enable_module_configurable, Jetpack::module_configuration_load
- * @action jetpack_modules_loaded
- * @return null
- */
- public function action_jetpack_modules_loaded() {
- Jetpack::enable_module_configurable( __FILE__ );
- Jetpack::module_configuration_load( __FILE__, array( $this, 'module_configuration_load' ) );
- add_filter( 'jetpack_module_configuration_url_infinite-scroll', array( $this, 'infinite_scroll_configuration_url' ) );
- }
-
- /**
- * Redirect configure button to Settings > Reading
- *
- * @uses wp_safe_redirect, admin_url
- * @return null
- */
- public function module_configuration_load() {
- wp_safe_redirect( admin_url( 'options-reading.php#infinite-scroll-options' ) );
- exit;
- }
-
- /**
- * Overrides default configuration url
- *
- * @uses admin_url
- * @return string module settings URL
- */
- public function infinite_scroll_configuration_url() {
- return admin_url( 'options-reading.php#infinite-scroll-options' );
- }
-
- /**
- * Register Google Analytics setting
- *
- * @uses add_settings_field, __, register_setting
- * @action admin_init
- * @return null
- */
- public function action_admin_init() {
- add_settings_field( $this->option_name_google_analytics, '<span id="infinite-scroll-google-analytics">' . __( 'Use Google Analytics with Infinite Scroll', 'jetpack' ) . '</span>', array( $this, 'setting_google_analytics' ), 'reading' );
- register_setting( 'reading', $this->option_name_google_analytics, array( $this, 'sanitize_boolean_value' ) );
- }
-
- /**
- * Render Google Analytics option
- *
- * @uses checked, get_option, __
- * @return html
- */
- public function setting_google_analytics() {
- echo '<label><input name="infinite_scroll_google_analytics" type="checkbox" value="1" ' . checked( true, (bool) get_option( $this->option_name_google_analytics, false ), false ) . ' /> ' . esc_html__( 'Track each scroll load (7 posts by default) as a page view in Google Analytics', 'jetpack' ) . '</label>';
- echo '<p class="description">' . esc_html__( 'Check the box above to record each new set of posts loaded via Infinite Scroll as a page view in Google Analytics.', 'jetpack' ) . '</p>';
- }
-
- /**
- * Sanitize value as a boolean
- *
- * @param mixed $value
- * @return bool
- */
- public function sanitize_boolean_value( $value ) {
- return (bool) $value;
- }
-
- /**
- * Load theme's infinite scroll annotation file, if present in the IS plugin.
- * The `setup_theme` action is used because the annotation files should be using `after_setup_theme` to register support for IS.
- *
- * As released in Jetpack 2.0, a child theme's parent wasn't checked for in the plugin's bundled support, hence the convoluted way the parent is checked for now.
- *
- * @uses is_admin, wp_get_theme, apply_filters
- * @action setup_theme
- * @return null
- */
- function action_after_setup_theme() {
- $theme = wp_get_theme();
-
- if ( ! is_a( $theme, 'WP_Theme' ) && ! is_array( $theme ) )
- return;
-
- /** This filter is already documented in modules/infinite-scroll/infinity.php */
- $customization_file = apply_filters( 'infinite_scroll_customization_file', dirname( __FILE__ ) . "/infinite-scroll/themes/{$theme['Stylesheet']}.php", $theme['Stylesheet'] );
-
- if ( is_readable( $customization_file ) ) {
- require_once( $customization_file );
- }
- elseif ( ! empty( $theme['Template'] ) ) {
- $customization_file = dirname( __FILE__ ) . "/infinite-scroll/themes/{$theme['Template']}.php";
-
- if ( is_readable( $customization_file ) )
- require_once( $customization_file );
- }
- }
-
- /**
- * Modify Infinite Scroll configuration information
- *
- * @uses Jetpack::get_active_modules, is_user_logged_in, stats_get_options, Jetpack_Options::get_option, get_option, JETPACK__API_VERSION, JETPACK__VERSION
- * @filter infinite_scroll_js_settings
- * @return array
- */
- public function filter_infinite_scroll_js_settings( $settings ) {
- // Provide WP Stats info for tracking Infinite Scroll loads
- // Abort if Stats module isn't active
- if ( in_array( 'stats', Jetpack::get_active_modules() ) ) {
- // Abort if user is logged in but logged-in users shouldn't be tracked.
- if ( is_user_logged_in() && function_exists( 'stats_get_options' ) ) {
- $stats_options = stats_get_options();
- $track_loggedin_users = isset( $stats_options['reg_users'] ) ? (bool) $stats_options['reg_users'] : false;
-
- if ( ! $track_loggedin_users )
- return $settings;
- }
-
- // We made it this far, so gather the data needed to track IS views
- $settings['stats'] = 'blog=' . Jetpack_Options::get_option( 'id' ) . '&host=' . parse_url( get_option( 'home' ), PHP_URL_HOST ) . '&v=ext&j=' . JETPACK__API_VERSION . ':' . JETPACK__VERSION;
-
- // Pagetype parameter
- $settings['stats'] .= '&x_pagetype=infinite';
- if ( 'click' == $settings['type'] )
- $settings['stats'] .= '-click';
-
- $settings['stats'] .= '-jetpack';
- }
-
- // Check if Google Analytics tracking is requested
- $settings['google_analytics'] = (bool) Jetpack_Options::get_option_and_ensure_autoload( $this->option_name_google_analytics, 0 );
-
- return $settings;
- }
-
- /**
- * Always load certain scripts when IS is enabled, as they can't be loaded after `document.ready` fires, meaning they can't leverage IS's script loader.
- *
- * @global $videopress
- * @uses do_action()
- * @uses apply_filters()
- * @uses wp_enqueue_style()
- * @uses wp_enqueue_script()
- * @action wp_enqueue_scripts
- * @return null
- */
- public function action_wp_enqueue_scripts() {
- // Do not load scripts and styles on singular pages and static pages
- $load_scripts_and_styles = ! ( is_singular() || is_page() );
- if (
- /**
- * Allow plugins to enqueue all Infinite Scroll scripts and styles on singular pages as well.
- *
- * @module infinite-scroll
- *
- * @since 3.1.0
- *
- * @param bool $load_scripts_and_styles Should scripts and styles be loaded on singular pahes and static pages. Default to false.
- */
- ! apply_filters( 'jetpack_infinite_scroll_load_scripts_and_styles', $load_scripts_and_styles )
- ) {
- return;
- }
-
- // VideoPress stand-alone plugin
- global $videopress;
- if ( ! empty( $videopress ) && The_Neverending_Home_Page::archive_supports_infinity() && is_a( $videopress, 'VideoPress' ) && method_exists( $videopress, 'enqueue_scripts' ) ) {
- $videopress->enqueue_scripts();
- }
-
- // VideoPress Jetpack module
- if ( Jetpack::is_module_active( 'videopress' ) ) {
- wp_enqueue_script( 'videopress' );
- }
-
- // Fire the post_gallery action early so Carousel scripts are present.
- if ( Jetpack::is_module_active( 'carousel' ) ) {
- /** This filter is already documented in core/wp-includes/media.php */
- do_action( 'post_gallery', '', '', 0 );
- }
-
- // Always enqueue Tiled Gallery scripts when both IS and Tiled Galleries are enabled
- if ( Jetpack::is_module_active( 'tiled-gallery' ) ) {
- Jetpack_Tiled_Gallery::default_scripts_and_styles();
- }
-
- // Core's Audio and Video Shortcodes
- if (
- /** This filter is already documented in core/wp-includes/media.php */
- 'mediaelement' === apply_filters( 'wp_audio_shortcode_library', 'mediaelement' )
- ) {
- wp_enqueue_style( 'wp-mediaelement' );
- wp_enqueue_script( 'wp-mediaelement' );
- }
-
- if (
- /** This filter is already documented in core/wp-includes/media.php */
- 'mediaelement' === apply_filters( 'wp_video_shortcode_library', 'mediaelement' )
- ) {
- wp_enqueue_style( 'wp-mediaelement' );
- wp_enqueue_script( 'wp-mediaelement' );
- }
- }
-}
-Jetpack_Infinite_Scroll_Extras::instance();
-
-/**
- * Load main IS file
- */
-require_once( dirname( __FILE__ ) . "/infinite-scroll/infinity.php" );
-
-/**
- * Remove the IS annotation loading function bundled with the IS plugin in favor of the Jetpack-specific version in Jetpack_Infinite_Scroll_Extras::action_after_setup_theme();
- */
-remove_action( 'after_setup_theme', 'the_neverending_home_page_theme_support', 5 );
diff --git a/plugins/jetpack/modules/infinite-scroll/infinity.css b/plugins/jetpack/modules/infinite-scroll/infinity.css
deleted file mode 100644
index 4c84e294..00000000
--- a/plugins/jetpack/modules/infinite-scroll/infinity.css
+++ /dev/null
@@ -1,164 +0,0 @@
-/* =Infinity Styles
--------------------------------------------------------------- */
-
-.infinite-wrap {
-}
-.infinite-loader {
- color: #000;
- display: block;
- height: 28px;
- text-indent: -9999px;
-}
-#infinite-handle span {
- background: #333;
- border-radius: 1px;
- color: #eee;
- cursor: pointer;
- font-size: 13px;
- padding: 6px 16px;
-}
-
-/**
- * Using a highly-specific rule to make sure that all button styles
- * will be reset
- */
-#infinite-handle span button,
-#infinite-handle span button:hover,
-#infinite-handle span button:focus {
- display: inline;
- position: static;
- padding: 0;
- margin: 0;
- border: none;
- line-height: inherit;
- background: transparent;
- color: inherit;
- cursor: inherit;
- font-size: inherit;
- font-weight: inherit;
- font-family: inherit;
-}
-
-/**
- * This is used to avoid unnecessary inner button spacing in Firefox
- */
-#infinite-handle span button::-moz-focus-inner {
- margin: 0;
- padding: 0;
- border: none;
-}
-
-/**
- * For smaller viewports, remove the down-arrow icon and turn
- * the button into a block element, spanning the content's full width.
- */
-@media (max-width: 800px) {
- #infinite-handle span:before {
- display: none;
- }
- #infinite-handle span {
- display: block;
- }
-}
-
-/**
- * Footer
- */
-#infinite-footer {
- position: fixed;
- bottom: -50px;
- left: 0;
- width: 100%;
-}
-#infinite-footer a {
- text-decoration: none;
-}
-#infinite-footer .blog-info a:hover,
-#infinite-footer .blog-credits a:hover {
- color: #444;
- text-decoration: underline;
-}
-#infinite-footer .container {
- background: rgba( 255, 255, 255, 0.8 );
- border-color: #ccc;
- border-color: rgba( 0, 0, 0, 0.1 );
- border-style: solid;
- border-width: 1px 0 0;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- margin: 0 auto;
- overflow: hidden;
- padding: 1px 20px;
- width: 780px;
-}
-#infinite-footer .blog-info,
-#infinite-footer .blog-credits {
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- line-height: 25px;
-}
-#infinite-footer .blog-info {
- float: left;
- overflow: hidden;
- text-align: left;
- text-overflow: ellipsis;
- white-space: nowrap;
- width: 40%;
-}
-#infinite-footer .blog-credits {
- font-weight: normal;
- float: right;
- width: 60%;
-}
-#infinite-footer .blog-info a {
- color: #111;
- font-size: 14px;
- font-weight: bold;
-}
-#infinite-footer .blog-credits {
- color: #888;
- font-size: 12px;
- text-align: right;
-}
-#infinite-footer .blog-credits a {
- color: #666;
-}
-
-/**
- * Hooks to infinity-end body class to restore footer
- */
-.infinity-end.neverending #infinite-footer {
- display: none;
-}
-
-/**
- * Responsive structure for the footer
- */
-@media (max-width: 640px) {
- #infinite-footer .container {
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- width: 100%;
- }
- #infinite-footer .blog-info {
- width: 30%;
- }
- #infinite-footer .blog-credits {
- width: 70%;
- }
- #infinite-footer .blog-info a,
- #infinite-footer .blog-credits {
- font-size: 10px;
- }
-}
-
-/**
- * No fixed footer on small viewports
- */
-@media ( max-width: 640px ) {
- #infinite-footer {
- position: static;
- }
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/infinite-scroll/infinity.js b/plugins/jetpack/modules/infinite-scroll/infinity.js
deleted file mode 100644
index e1a508e4..00000000
--- a/plugins/jetpack/modules/infinite-scroll/infinity.js
+++ /dev/null
@@ -1,750 +0,0 @@
-(function($){ // Open closure
-// Local vars
-var Scroller, ajaxurl, stats, type, text, totop;
-
-// IE requires special handling
-var isIE = ( -1 != navigator.userAgent.search( 'MSIE' ) );
-if ( isIE ) {
- var IEVersion = navigator.userAgent.match(/MSIE\s?(\d+)\.?\d*;/);
- var IEVersion = parseInt( IEVersion[1] );
-}
-
-// HTTP ajaxurl when site is HTTPS causes Access-Control-Allow-Origin failure in Desktop and iOS Safari
-if ( "https:" == document.location.protocol ) {
- infiniteScroll.settings.ajaxurl = infiniteScroll.settings.ajaxurl.replace( "http://", "https://" );
-}
-
-/**
- * Loads new posts when users scroll near the bottom of the page.
- */
-Scroller = function( settings ) {
- var self = this;
-
- // Initialize our variables
- this.id = settings.id;
- this.body = $( document.body );
- this.window = $( window );
- this.element = $( '#' + settings.id );
- this.wrapperClass = settings.wrapper_class;
- this.ready = true;
- this.disabled = false;
- this.page = 1;
- this.offset = settings.offset;
- this.currentday = settings.currentday;
- this.order = settings.order;
- this.throttle = false;
- this.handle = '<div id="infinite-handle"><span><button>' + text.replace( '\\', '' ) + '</button></span></div>';
- this.click_handle = settings.click_handle;
- this.google_analytics = settings.google_analytics;
- this.history = settings.history;
- this.origURL = window.location.href;
- this.pageCache = {};
-
- // Footer settings
- this.footer = $( '#infinite-footer' );
- this.footer.wrap = settings.footer;
-
- // Core's native MediaElement.js implementation needs special handling
- this.wpMediaelement = null;
-
- // We have two type of infinite scroll
- // cases 'scroll' and 'click'
-
- if ( type == 'scroll' ) {
- // Bind refresh to the scroll event
- // Throttle to check for such case every 300ms
-
- // On event the case becomes a fact
- this.window.bind( 'scroll.infinity', function() {
- this.throttle = true;
- });
-
- // Go back top method
- self.gotop();
-
- setInterval( function() {
- if ( this.throttle ) {
- // Once the case is the case, the action occurs and the fact is no more
- this.throttle = false;
- // Reveal or hide footer
- self.thefooter();
- // Fire the refresh
- self.refresh();
- self.determineURL(); // determine the url
- }
- }, 250 );
-
- // Ensure that enough posts are loaded to fill the initial viewport, to compensate for short posts and large displays.
- self.ensureFilledViewport();
- this.body.bind( 'post-load', { self: self }, self.checkViewportOnLoad );
- } else if ( type == 'click' ) {
- if ( this.click_handle ) {
- this.element.append( this.handle );
- }
-
- this.body.delegate( '#infinite-handle', 'click.infinity', function() {
- // Handle the handle
- if ( self.click_handle ) {
- $( '#infinite-handle' ).remove();
- }
-
- // Fire the refresh
- self.refresh();
- });
- }
-
- // Initialize any Core audio or video players loaded via IS
- this.body.bind( 'post-load', { self: self }, self.initializeMejs );
-};
-
-/**
- * Check whether we should fetch any additional posts.
- */
-Scroller.prototype.check = function() {
- var container = this.element.offset();
-
- // If the container can't be found, stop otherwise errors result
- if ( 'object' !== typeof container ) {
- return false;
- }
-
- var bottom = this.window.scrollTop() + this.window.height(),
- threshold = container.top + this.element.outerHeight(false) - (this.window.height() * 2);
-
- return bottom > threshold;
-};
-
-/**
- * Renders the results from a successful response.
- */
-Scroller.prototype.render = function( response ) {
- this.body.addClass( 'infinity-success' );
-
- // Check if we can wrap the html
- this.element.append( response.html );
- this.body.trigger( 'post-load', response );
- this.ready = true;
-};
-
-/**
- * Returns the object used to query for new posts.
- */
-Scroller.prototype.query = function() {
- return {
- page : this.page + this.offset, // Load the next page.
- currentday : this.currentday,
- order : this.order,
- scripts : window.infiniteScroll.settings.scripts,
- styles : window.infiniteScroll.settings.styles,
- query_args : window.infiniteScroll.settings.query_args,
- query_before : window.infiniteScroll.settings.query_before,
- last_post_date: window.infiniteScroll.settings.last_post_date
- };
-};
-
-/**
- * Scroll back to top.
- */
-Scroller.prototype.gotop = function() {
- var blog = $( '#infinity-blog-title' );
-
- blog.attr( 'title', totop );
-
- // Scroll to top on blog title
- blog.bind( 'click', function( e ) {
- $( 'html, body' ).animate( { scrollTop: 0 }, 'fast' );
- e.preventDefault();
- });
-};
-
-
-/**
- * The infinite footer.
- */
-Scroller.prototype.thefooter = function() {
- var self = this,
- width;
-
- // Check if we have an id for the page wrapper
- if ( $.type( this.footer.wrap ) === "string" ) {
- width = $( 'body #' + this.footer.wrap ).outerWidth( false );
-
- // Make the footer match the width of the page
- if ( width > 479 )
- this.footer.find( '.container' ).css( 'width', width );
- }
-
- // Reveal footer
- if ( this.window.scrollTop() >= 350 )
- self.footer.animate( { 'bottom': 0 }, 'fast' );
- else if ( this.window.scrollTop() < 350 )
- self.footer.animate( { 'bottom': '-50px' }, 'fast' );
-};
-
-
-/**
- * Controls the flow of the refresh. Don't mess.
- */
-Scroller.prototype.refresh = function() {
- var self = this,
- query, jqxhr, load, loader, color, customized;
-
- // If we're disabled, ready, or don't pass the check, bail.
- if ( this.disabled || ! this.ready || ! this.check() )
- return;
-
- // Let's get going -- set ready to false to prevent
- // multiple refreshes from occurring at once.
- this.ready = false;
-
- // Create a loader element to show it's working.
- if ( this.click_handle ) {
- loader = '<span class="infinite-loader"></span>';
- this.element.append( loader );
-
- loader = this.element.find( '.infinite-loader' );
- color = loader.css( 'color' );
-
- try {
- loader.spin( 'medium-left', color );
- } catch ( error ) { }
- }
-
- // Generate our query vars.
- query = $.extend({
- action: 'infinite_scroll'
- }, this.query() );
-
- // Inject Customizer state.
- if ( 'undefined' !== typeof wp && wp.customize && wp.customize.settings.theme ) {
- customized = {};
- query.wp_customize = 'on';
- query.theme = wp.customize.settings.theme.stylesheet;
- wp.customize.each( function( setting ) {
- if ( setting._dirty ) {
- customized[ setting.id ] = setting();
- }
- } );
- query.customized = JSON.stringify( customized );
- query.nonce = wp.customize.settings.nonce.preview;
- }
-
- // Fire the ajax request.
- jqxhr = $.post( infiniteScroll.settings.ajaxurl, query );
-
- // Allow refreshes to occur again if an error is triggered.
- jqxhr.fail( function() {
- if ( self.click_handle ) {
- loader.hide();
- }
-
- self.ready = true;
- });
-
- // Success handler
- jqxhr.done( function( response ) {
- // On success, let's hide the loader circle.
- if ( self.click_handle ) {
- loader.hide();
- }
-
- // Check for and parse our response.
- if ( ! response || ! response.type ) {
- return;
- }
-
- // If we've succeeded...
- if ( response.type == 'success' ) {
- // If additional scripts are required by the incoming set of posts, parse them
- if ( response.scripts ) {
- $( response.scripts ).each( function() {
- var elementToAppendTo = this.footer ? 'body' : 'head';
-
- // Add script handle to list of those already parsed
- window.infiniteScroll.settings.scripts.push( this.handle );
-
- // Output extra data, if present
- if ( this.extra_data ) {
- var data = document.createElement('script'),
- dataContent = document.createTextNode( "//<![CDATA[ \n" + this.extra_data + "\n//]]>" );
-
- data.type = 'text/javascript';
- data.appendChild( dataContent );
-
- document.getElementsByTagName( elementToAppendTo )[0].appendChild(data);
- }
-
- // Build script tag and append to DOM in requested location
- var script = document.createElement('script');
- script.type = 'text/javascript';
- script.src = this.src;
- script.id = this.handle;
-
- // If MediaElement.js is loaded in by this set of posts, don't initialize the players a second time as it breaks them all
- if ( 'wp-mediaelement' === this.handle ) {
- self.body.unbind( 'post-load', self.initializeMejs );
- }
-
- if ( 'wp-mediaelement' === this.handle && 'undefined' === typeof mejs ) {
- self.wpMediaelement = {};
- self.wpMediaelement.tag = script;
- self.wpMediaelement.element = elementToAppendTo;
- setTimeout( self.maybeLoadMejs.bind( self ), 250 );
- } else {
- document.getElementsByTagName( elementToAppendTo )[0].appendChild(script);
- }
- } );
- }
-
- // If additional stylesheets are required by the incoming set of posts, parse them
- if ( response.styles ) {
- $( response.styles ).each( function() {
- // Add stylesheet handle to list of those already parsed
- window.infiniteScroll.settings.styles.push( this.handle );
-
- // Build link tag
- var style = document.createElement('link');
- style.rel = 'stylesheet';
- style.href = this.src;
- style.id = this.handle + '-css';
-
- // Destroy link tag if a conditional statement is present and either the browser isn't IE, or the conditional doesn't evaluate true
- if ( this.conditional && ( ! isIE || ! eval( this.conditional.replace( /%ver/g, IEVersion ) ) ) )
- var style = false;
-
- // Append link tag if necessary
- if ( style )
- document.getElementsByTagName('head')[0].appendChild(style);
- } );
- }
-
- // stash the response in the page cache
- self.pageCache[self.page+self.offset] = response;
-
- // Increment the page number
- self.page++;
-
- // Record pageview in WP Stats, if available.
- if ( stats )
- new Image().src = document.location.protocol + '//pixel.wp.com/g.gif?' + stats + '&post=0&baba=' + Math.random();
-
- // Add new posts to the postflair object
- if ( 'object' == typeof response.postflair && 'object' == typeof WPCOM_sharing_counts )
- WPCOM_sharing_counts = $.extend( WPCOM_sharing_counts, response.postflair );
-
- // Render the results
- self.render.apply( self, arguments );
-
- // If 'click' type and there are still posts to fetch, add back the handle
- if ( type == 'click' ) {
- if ( response.lastbatch ) {
- if ( self.click_handle ) {
- $( '#infinite-handle' ).remove();
- // Update body classes
- self.body.addClass( 'infinity-end' ).removeClass( 'infinity-success' );
- } else {
- self.body.trigger( 'infinite-scroll-posts-end' );
- }
- } else {
- if ( self.click_handle ) {
- self.element.append( self.handle );
- } else {
- self.body.trigger( 'infinite-scroll-posts-more' );
- }
- }
- } else if ( response.lastbatch ) {
- self.disabled = true;
- self.body.addClass( 'infinity-end' ).removeClass( 'infinity-success' );
- }
-
- // Update currentday to the latest value returned from the server
- if ( response.currentday ) {
- self.currentday = response.currentday;
- }
-
- // Fire Google Analytics pageview
- if ( self.google_analytics ) {
- var ga_url = self.history.path.replace( /%d/, self.page );
- if ( 'object' === typeof _gaq ) {
- _gaq.push( [ '_trackPageview', ga_url ] );
- }
- if ( 'function' === typeof ga ) {
- ga( 'send', 'pageview', ga_url );
- }
- }
- }
- });
-
- return jqxhr;
-};
-
-/**
- * Core's native media player uses MediaElement.js
- * The library's size is sufficient that it may not be loaded in time for Core's helper to invoke it, so we need to delay until `mejs` exists.
- */
-Scroller.prototype.maybeLoadMejs = function() {
- if ( null === this.wpMediaelement ) {
- return;
- }
-
- if ( 'undefined' === typeof mejs ) {
- setTimeout( this.maybeLoadMejs, 250 );
- } else {
- document.getElementsByTagName( this.wpMediaelement.element )[0].appendChild( this.wpMediaelement.tag );
- this.wpMediaelement = null;
-
- // Ensure any subsequent IS loads initialize the players
- this.body.bind( 'post-load', { self: this }, this.initializeMejs );
- }
-}
-
-/**
- * Initialize the MediaElement.js player for any posts not previously initialized
- */
-Scroller.prototype.initializeMejs = function( ev, response ) {
- // Are there media players in the incoming set of posts?
- if ( ! response.html || -1 === response.html.indexOf( 'wp-audio-shortcode' ) && -1 === response.html.indexOf( 'wp-video-shortcode' ) ) {
- return;
- }
-
- // Don't bother if mejs isn't loaded for some reason
- if ( 'undefined' === typeof mejs ) {
- return;
- }
-
- // Adapted from wp-includes/js/mediaelement/wp-mediaelement.js
- // Modified to not initialize already-initialized players, as Mejs doesn't handle that well
- $(function () {
- var settings = {};
-
- if ( typeof _wpmejsSettings !== 'undefined' ) {
- settings.pluginPath = _wpmejsSettings.pluginPath;
- }
-
- settings.success = function (mejs) {
- var autoplay = mejs.attributes.autoplay && 'false' !== mejs.attributes.autoplay;
- if ( 'flash' === mejs.pluginType && autoplay ) {
- mejs.addEventListener( 'canplay', function () {
- mejs.play();
- }, false );
- }
- };
-
- $('.wp-audio-shortcode, .wp-video-shortcode').not( '.mejs-container' ).mediaelementplayer( settings );
- });
-}
-
-/**
- * Trigger IS to load additional posts if the initial posts don't fill the window.
- * On large displays, or when posts are very short, the viewport may not be filled with posts, so we overcome this by loading additional posts when IS initializes.
- */
-Scroller.prototype.ensureFilledViewport = function() {
- var self = this,
- windowHeight = self.window.height(),
- postsHeight = self.element.height(),
- aveSetHeight = 0,
- wrapperQty = 0;
-
- // Account for situations where postsHeight is 0 because child list elements are floated
- if ( postsHeight === 0 ) {
- $( self.element.selector + ' > li' ).each( function() {
- postsHeight += $( this ).height();
- } );
-
- if ( postsHeight === 0 ) {
- self.body.unbind( 'post-load', self.checkViewportOnLoad );
- return;
- }
- }
-
- // Calculate average height of a set of posts to prevent more posts than needed from being loaded.
- $( '.' + self.wrapperClass ).each( function() {
- aveSetHeight += $( this ).height();
- wrapperQty++;
- } );
-
- if ( wrapperQty > 0 )
- aveSetHeight = aveSetHeight / wrapperQty;
- else
- aveSetHeight = 0;
-
- // Load more posts if space permits, otherwise stop checking for a full viewport
- if ( postsHeight < windowHeight && ( postsHeight + aveSetHeight < windowHeight ) ) {
- self.ready = true;
- self.refresh();
- }
- else {
- self.body.unbind( 'post-load', self.checkViewportOnLoad );
- }
-}
-
-/**
- * Event handler for ensureFilledViewport(), tied to the post-load trigger.
- * Necessary to ensure that the variable `this` contains the scroller when used in ensureFilledViewport(). Since this function is tied to an event, `this` becomes the DOM element the event is tied to.
- */
-Scroller.prototype.checkViewportOnLoad = function( ev ) {
- ev.data.self.ensureFilledViewport();
-}
-
-function fullscreenState() {
- return document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement
- ? 1
- : 0;
-}
-
-var previousFullScrenState = fullscreenState();
-
-/**
- * Identify archive page that corresponds to majority of posts shown in the current browser window.
- */
-Scroller.prototype.determineURL = function () {
- var self = this,
- windowTop = $( window ).scrollTop(),
- windowBottom = windowTop + $( window ).height(),
- windowSize = windowBottom - windowTop,
- setsInView = [],
- setsHidden = [],
- pageNum = false,
- currentFullScreenState = fullscreenState();
-
- // xor - check if the state has changed
- if ( previousFullScrenState ^ currentFullScreenState ) {
- // If we just switched to/from fullscreen,
- // don't do the div clearing/caching or the
- // URL setting. Doing so can break video playback
- // if the video goes to fullscreen.
-
- previousFullScrenState = currentFullScreenState;
- return;
- }
- previousFullScrenState = currentFullScreenState;
-
- // Find out which sets are in view
- $( '.' + self.wrapperClass ).each( function() {
- var id = $( this ).attr( 'id' ),
- setTop = $( this ).offset().top,
- setHeight = $( this ).outerHeight( false ),
- setBottom = 0,
- setPageNum = $( this ).data( 'page-num' );
-
- // Account for containers that have no height because their children are floated elements.
- if ( 0 === setHeight ) {
- $( '> *', this ).each( function() {
- setHeight += $( this ).outerHeight( false );
- } );
- }
-
- // Determine position of bottom of set by adding its height to the scroll position of its top.
- setBottom = setTop + setHeight;
-
- // Populate setsInView object. While this logic could all be combined into a single conditional statement, this is easier to understand.
- if ( setTop < windowTop && setBottom > windowBottom ) { // top of set is above window, bottom is below
- setsInView.push({'id': id, 'top': setTop, 'bottom': setBottom, 'pageNum': setPageNum });
- }
- else if( setTop > windowTop && setTop < windowBottom ) { // top of set is between top (gt) and bottom (lt)
- setsInView.push({'id': id, 'top': setTop, 'bottom': setBottom, 'pageNum': setPageNum });
- }
- else if( setBottom > windowTop && setBottom < windowBottom ) { // bottom of set is between top (gt) and bottom (lt)
- setsInView.push({'id': id, 'top': setTop, 'bottom': setBottom, 'pageNum': setPageNum });
- } else {
- setsHidden.push({'id': id, 'top': setTop, 'bottom': setBottom, 'pageNum': setPageNum });
- }
- } );
-
- $.each(setsHidden, function() {
- var $set = $('#' + this.id);
- if( $set.hasClass( 'is--replaced' ) ) {
- return;
- }
-
- self.pageCache[ this.pageNum].html = $set.html();
-
- $set.css('min-height', ( this.bottom - this.top ) + 'px' )
- .addClass('is--replaced')
- .empty();
- });
-
- $.each(setsInView, function() {
- var $set = $('#' + this.id);
-
- if( $set.hasClass('is--replaced') ) {
- $set.css('min-height', '').removeClass('is--replaced');
- if( this.pageNum in self.pageCache ) {
- $set.html( self.pageCache[this.pageNum].html );
- self.body.trigger( 'post-load', self.pageCache[this.pageNum] );
- }
- }
-
- });
-
- // Parse number of sets found in view in an attempt to update the URL to match the set that comprises the majority of the window.
- if ( 0 == setsInView.length ) {
- pageNum = -1;
- }
- else if ( 1 == setsInView.length ) {
- var setData = setsInView.pop();
-
- // If the first set of IS posts is in the same view as the posts loaded in the template by WordPress, determine how much of the view is comprised of IS-loaded posts
- if ( ( ( windowBottom - setData.top ) / windowSize ) < 0.5 )
- pageNum = -1;
- else
- pageNum = setData.pageNum;
- }
- else {
- var majorityPercentageInView = 0;
-
- // Identify the IS set that comprises the majority of the current window and set the URL to it.
- $.each( setsInView, function( i, setData ) {
- var topInView = 0,
- bottomInView = 0,
- percentOfView = 0;
-
- // Figure percentage of view the current set represents
- if ( setData.top > windowTop && setData.top < windowBottom )
- topInView = ( windowBottom - setData.top ) / windowSize;
-
- if ( setData.bottom > windowTop && setData.bottom < windowBottom )
- bottomInView = ( setData.bottom - windowTop ) / windowSize;
-
- // Figure out largest percentage of view for current set
- if ( topInView >= bottomInView )
- percentOfView = topInView;
- else if ( bottomInView >= topInView )
- percentOfView = bottomInView;
-
- // Does current set's percentage of view supplant the largest previously-found set?
- if ( percentOfView > majorityPercentageInView ) {
- pageNum = setData.pageNum;
- majorityPercentageInView = percentOfView;
- }
- } );
- }
-
- // If a page number could be determined, update the URL
- // -1 indicates that the original requested URL should be used.
- if ( 'number' == typeof pageNum ) {
- self.updateURL( pageNum );
- }
-}
-
-/**
- * Update address bar to reflect archive page URL for a given page number.
- * Checks if URL is different to prevent pollution of browser history.
- */
-Scroller.prototype.updateURL = function( page ) {
- // IE only supports pushState() in v10 and above, so don't bother if those conditions aren't met.
- if ( ! window.history.pushState ) {
- return;
- }
- var self = this,
- pageSlug = -1 == page ? self.origURL : window.location.protocol + '//' + self.history.host + self.history.path.replace( /%d/, page ) + self.history.parameters;
-
- if ( window.location.href != pageSlug ) {
- history.pushState( null, null, pageSlug );
- }
-}
-
-/**
- * Pause scrolling.
- */
-Scroller.prototype.pause = function() {
- this.disabled = true;
-};
-
-/**
- * Resume scrolling.
- */
-Scroller.prototype.resume = function() {
- this.disabled = false;
-};
-
-/**
- * Ready, set, go!
- */
-$( document ).ready( function() {
- // Check for our variables
- if ( 'object' != typeof infiniteScroll )
- return;
-
- $( document.body ).addClass( infiniteScroll.settings.body_class );
-
- // Set ajaxurl (for brevity)
- ajaxurl = infiniteScroll.settings.ajaxurl;
-
- // Set stats, used for tracking stats
- stats = infiniteScroll.settings.stats;
-
- // Define what type of infinity we have, grab text for click-handle
- type = infiniteScroll.settings.type;
- text = infiniteScroll.settings.text;
- totop = infiniteScroll.settings.totop;
-
- // Initialize the scroller (with the ID of the element from the theme)
- infiniteScroll.scroller = new Scroller( infiniteScroll.settings );
-
- /**
- * Monitor user scroll activity to update URL to correspond to archive page for current set of IS posts
- */
- if( type == 'click' ) {
- var timer = null;
- $( window ).bind( 'scroll', function() {
- // run the real scroll handler once every 250 ms.
- if ( timer ) { return; }
- timer = setTimeout( function() {
- infiniteScroll.scroller.determineURL();
- timer = null;
- } , 250 );
- });
- }
-
- // Integrate with Selective Refresh in the Customizer.
- if ( 'undefined' !== typeof wp && wp.customize && wp.customize.selectiveRefresh ) {
-
- /**
- * Handle rendering of selective refresh partials.
- *
- * Make sure that when a partial is rendered, the Jetpack post-load event
- * will be triggered so that any dynamic elements will be re-constructed,
- * such as ME.js elements, Photon replacements, social sharing, and more.
- * Note that this is applying here not strictly to posts being loaded.
- * If a widget contains a ME.js element and it is previewed via selective
- * refresh, the post-load would get triggered allowing any dynamic elements
- * therein to also be re-constructed.
- *
- * @param {wp.customize.selectiveRefresh.Placement} placement
- */
- wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function( placement ) {
- var content;
- if ( 'string' === typeof placement.addedContent ) {
- content = placement.addedContent;
- } else if ( placement.container ) {
- content = $( placement.container ).html();
- }
-
- if ( content ) {
- $( document.body ).trigger( 'post-load', { html: content } );
- }
- } );
-
- /*
- * Add partials for posts added via infinite scroll.
- *
- * This is unnecessary when MutationObserver is supported by the browser
- * since then this will be handled by Selective Refresh in core.
- */
- if ( 'undefined' === typeof MutationObserver ) {
- $( document.body ).on( 'post-load', function( e, response ) {
- var rootElement = null;
- if ( response.html && -1 !== response.html.indexOf( 'data-customize-partial' ) ) {
- if ( infiniteScroll.settings.id ) {
- rootElement = $( '#' + infiniteScroll.settings.id );
- }
- wp.customize.selectiveRefresh.addPartials( rootElement );
- }
- } );
- }
- }
-});
-
-
-})(jQuery); // Close closure
diff --git a/plugins/jetpack/modules/infinite-scroll/infinity.php b/plugins/jetpack/modules/infinite-scroll/infinity.php
deleted file mode 100644
index 35193cfc..00000000
--- a/plugins/jetpack/modules/infinite-scroll/infinity.php
+++ /dev/null
@@ -1,1664 +0,0 @@
-<?php
-
-/*
-Plugin Name: The Neverending Home Page.
-Plugin URI: http://automattic.com/
-Description: Adds infinite scrolling support to the front-end blog post view for themes, pulling the next set of posts automatically into view when the reader approaches the bottom of the page.
-Version: 1.1
-Author: Automattic
-Author URI: http://automattic.com/
-License: GNU General Public License v2 or later
-License URI: http://www.gnu.org/licenses/gpl-2.0.html
-*/
-
-/**
- * Class: The_Neverending_Home_Page relies on add_theme_support, expects specific
- * styling from each theme; including fixed footer.
- */
-class The_Neverending_Home_Page {
- /**
- * Register actions and filters, plus parse IS settings
- *
- * @uses add_action, add_filter, self::get_settings
- * @return null
- */
- function __construct() {
- add_action( 'pre_get_posts', array( $this, 'posts_per_page_query' ) );
-
- add_action( 'admin_init', array( $this, 'settings_api_init' ) );
- add_action( 'template_redirect', array( $this, 'action_template_redirect' ) );
- add_action( 'template_redirect', array( $this, 'ajax_response' ) );
- add_action( 'custom_ajax_infinite_scroll', array( $this, 'query' ) );
- add_filter( 'infinite_scroll_query_args', array( $this, 'inject_query_args' ) );
- add_filter( 'infinite_scroll_allowed_vars', array( $this, 'allowed_query_vars' ) );
- add_action( 'the_post', array( $this, 'preserve_more_tag' ) );
- add_action( 'wp_footer', array( $this, 'footer' ) );
-
- // Plugin compatibility
- add_filter( 'grunion_contact_form_redirect_url', array( $this, 'filter_grunion_redirect_url' ) );
-
- // Parse IS settings from theme
- self::get_settings();
- }
-
- /**
- * Initialize our static variables
- */
- static $the_time = null;
- static $settings = null; // Don't access directly, instead use self::get_settings().
-
- static $option_name_enabled = 'infinite_scroll';
-
- /**
- * Parse IS settings provided by theme
- *
- * @uses get_theme_support, infinite_scroll_has_footer_widgets, sanitize_title, add_action, get_option, wp_parse_args, is_active_sidebar
- * @return object
- */
- static function get_settings() {
- if ( is_null( self::$settings ) ) {
- $css_pattern = '#[^A-Z\d\-_]#i';
-
- $settings = $defaults = array(
- 'type' => 'scroll', // scroll | click
- 'requested_type' => 'scroll', // store the original type for use when logic overrides it
- 'footer_widgets' => false, // true | false | sidebar_id | array of sidebar_ids -- last two are checked with is_active_sidebar
- 'container' => 'content', // container html id
- 'wrapper' => true, // true | false | html class
- 'render' => false, // optional function, otherwise the `content` template part will be used
- 'footer' => true, // boolean to enable or disable the infinite footer | string to provide an html id to derive footer width from
- 'footer_callback' => false, // function to be called to render the IS footer, in place of the default
- 'posts_per_page' => false, // int | false to set based on IS type
- 'click_handle' => true, // boolean to enable or disable rendering the click handler div. If type is click and this is false, page must include its own trigger with the HTML ID `infinite-handle`.
- );
-
- // Validate settings passed through add_theme_support()
- $_settings = get_theme_support( 'infinite-scroll' );
-
- if ( is_array( $_settings ) ) {
- // Preferred implementation, where theme provides an array of options
- if ( isset( $_settings[0] ) && is_array( $_settings[0] ) ) {
- foreach ( $_settings[0] as $key => $value ) {
- switch ( $key ) {
- case 'type' :
- if ( in_array( $value, array( 'scroll', 'click' ) ) )
- $settings[ $key ] = $settings['requested_type'] = $value;
-
- break;
-
- case 'footer_widgets' :
- if ( is_string( $value ) )
- $settings[ $key ] = sanitize_title( $value );
- elseif ( is_array( $value ) )
- $settings[ $key ] = array_map( 'sanitize_title', $value );
- elseif ( is_bool( $value ) )
- $settings[ $key ] = $value;
-
- break;
-
- case 'container' :
- case 'wrapper' :
- if ( 'wrapper' == $key && is_bool( $value ) ) {
- $settings[ $key ] = $value;
- } else {
- $value = preg_replace( $css_pattern, '', $value );
-
- if ( ! empty( $value ) )
- $settings[ $key ] = $value;
- }
-
- break;
-
- case 'render' :
- if ( false !== $value && is_callable( $value ) ) {
- $settings[ $key ] = $value;
- }
-
- break;
-
- case 'footer' :
- if ( is_bool( $value ) ) {
- $settings[ $key ] = $value;
- } elseif ( is_string( $value ) ) {
- $value = preg_replace( $css_pattern, '', $value );
-
- if ( ! empty( $value ) )
- $settings[ $key ] = $value;
- }
-
- break;
-
- case 'footer_callback' :
- if ( is_callable( $value ) )
- $settings[ $key ] = $value;
- else
- $settings[ $key ] = false;
-
- break;
-
- case 'posts_per_page' :
- if ( is_numeric( $value ) )
- $settings[ $key ] = (int) $value;
-
- break;
-
- case 'click_handle' :
- if ( is_bool( $value ) ) {
- $settings[ $key ] = $value;
- }
-
- break;
-
- default:
- break;
- }
- }
- } elseif ( is_string( $_settings[0] ) ) {
- // Checks below are for backwards compatibility
-
- // Container to append new posts to
- $settings['container'] = preg_replace( $css_pattern, '', $_settings[0] );
-
- // Wrap IS elements?
- if ( isset( $_settings[1] ) )
- $settings['wrapper'] = (bool) $_settings[1];
- }
- }
-
- // Always ensure all values are present in the final array
- $settings = wp_parse_args( $settings, $defaults );
-
- // Check if a legacy `infinite_scroll_has_footer_widgets()` function is defined and override the footer_widgets parameter's value.
- // Otherwise, if a widget area ID or array of IDs was provided in the footer_widgets parameter, check if any contains any widgets.
- // It is safe to use `is_active_sidebar()` before the sidebar is registered as this function doesn't check for a sidebar's existence when determining if it contains any widgets.
- if ( function_exists( 'infinite_scroll_has_footer_widgets' ) ) {
- $settings['footer_widgets'] = (bool) infinite_scroll_has_footer_widgets();
- } elseif ( is_array( $settings['footer_widgets'] ) ) {
- $sidebar_ids = $settings['footer_widgets'];
- $settings['footer_widgets'] = false;
-
- foreach ( $sidebar_ids as $sidebar_id ) {
- if ( is_active_sidebar( $sidebar_id ) ) {
- $settings['footer_widgets'] = true;
- break;
- }
- }
-
- unset( $sidebar_ids );
- unset( $sidebar_id );
- } elseif ( is_string( $settings['footer_widgets'] ) ) {
- $settings['footer_widgets'] = (bool) is_active_sidebar( $settings['footer_widgets'] );
- }
-
- /**
- * Filter Infinite Scroll's `footer_widgets` parameter.
- *
- * @module infinite-scroll
- *
- * @since 2.0.0
- *
- * @param bool $settings['footer_widgets'] Does the current theme have Footer Widgets.
- */
- $settings['footer_widgets'] = apply_filters( 'infinite_scroll_has_footer_widgets', $settings['footer_widgets'] );
-
- // Finally, after all of the sidebar checks and filtering, ensure that a boolean value is present, otherwise set to default of `false`.
- if ( ! is_bool( $settings['footer_widgets'] ) )
- $settings['footer_widgets'] = false;
-
- // Ensure that IS is enabled and no footer widgets exist if the IS type isn't already "click".
- if ( 'click' != $settings['type'] ) {
- // Check the setting status
- $disabled = '' === get_option( self::$option_name_enabled ) ? true : false;
-
- // Footer content or Reading option check
- if ( $settings['footer_widgets'] || $disabled )
- $settings['type'] = 'click';
- }
-
- // Force display of the click handler and attendant bits when the type isn't `click`
- if ( 'click' !== $settings['type'] ) {
- $settings['click_handle'] = true;
- }
-
- // Store final settings in a class static to avoid reparsing
- /**
- * Filter the array of Infinite Scroll settings.
- *
- * @module infinite-scroll
- *
- * @since 2.0.0
- *
- * @param array $settings Array of Infinite Scroll settings.
- */
- self::$settings = apply_filters( 'infinite_scroll_settings', $settings );
- }
-
- /** This filter is already documented in modules/infinite-scroll/infinity.php */
- return (object) apply_filters( 'infinite_scroll_settings', self::$settings );
- }
-
- /**
- * Number of posts per page.
- *
- * @uses self::wp_query, self::get_settings, apply_filters
- * @return int
- */
- static function posts_per_page() {
- $posts_per_page = self::get_settings()->posts_per_page ? self::get_settings()->posts_per_page : self::wp_query()->get( 'posts_per_page' );
-
- // Take JS query into consideration here
- if ( true === isset( $_REQUEST['query_args']['posts_per_page'] ) ) {
- $posts_per_page = $_REQUEST['query_args']['posts_per_page'];
- }
-
- /**
- * Filter the number of posts per page.
- *
- * @module infinite-scroll
- *
- * @since 6.0.0
- *
- * @param int $posts_per_page The number of posts to display per page.
- */
- return (int) apply_filters( 'infinite_scroll_posts_per_page', $posts_per_page );
- }
-
- /**
- * Retrieve the query used with Infinite Scroll
- *
- * @global $wp_the_query
- * @uses apply_filters
- * @return object
- */
- static function wp_query() {
- global $wp_the_query;
- /**
- * Filter the Infinite Scroll query object.
- *
- * @module infinite-scroll
- *
- * @since 2.2.1
- *
- * @param WP_Query $wp_the_query WP Query.
- */
- return apply_filters( 'infinite_scroll_query_object', $wp_the_query );
- }
-
- /**
- * Has infinite scroll been triggered?
- */
- static function got_infinity() {
- /**
- * Filter the parameter used to check if Infinite Scroll has been triggered.
- *
- * @module infinite-scroll
- *
- * @since 3.9.0
- *
- * @param bool isset( $_GET[ 'infinity' ] ) Return true if the "infinity" parameter is set.
- */
- return apply_filters( 'infinite_scroll_got_infinity', isset( $_GET[ 'infinity' ] ) );
- }
-
- /**
- * Is this guaranteed to be the last batch of posts?
- */
- static function is_last_batch() {
- /**
- * Override whether or not this is the last batch for a request
- *
- * @module infinite-scroll
- *
- * @since 4.8.0
- *
- * @param bool|null null Bool if value should be overridden, null to determine from query
- * @param object self::wp_query() WP_Query object for current request
- * @param object self::get_settings() Infinite Scroll settings
- */
- $override = apply_filters( 'infinite_scroll_is_last_batch', null, self::wp_query(), self::get_settings() );
- if ( is_bool( $override ) ) {
- return $override;
- }
-
- $entries = (int) self::wp_query()->found_posts;
- $posts_per_page = self::posts_per_page();
-
- // This is to cope with an issue in certain themes or setups where posts are returned but found_posts is 0.
- if ( 0 == $entries ) {
- return (bool) ( count( self::wp_query()->posts ) < $posts_per_page );
- }
- $paged = max( 1, self::wp_query()->get( 'paged' ) );
-
- // Are there enough posts for more than the first page?
- if ( $entries <= $posts_per_page ) {
- return true;
- }
-
- // Calculate entries left after a certain number of pages
- if ( $paged && $paged > 1 ) {
- $entries -= $posts_per_page * $paged;
- }
-
- // Are there some entries left to display?
- return $entries <= 0;
- }
-
- /**
- * The more tag will be ignored by default if the blog page isn't our homepage.
- * Let's force the $more global to false.
- */
- function preserve_more_tag( $array ) {
- global $more;
-
- if ( self::got_infinity() )
- $more = 0; //0 = show content up to the more tag. Add more link.
-
- return $array;
- }
-
- /**
- * Add a checkbox field to Settings > Reading
- * for enabling infinite scroll.
- *
- * Only show if the current theme supports infinity.
- *
- * @uses current_theme_supports, add_settings_field, __, register_setting
- * @action admin_init
- * @return null
- */
- function settings_api_init() {
- if ( ! current_theme_supports( 'infinite-scroll' ) )
- return;
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- // This setting is no longer configurable in wp-admin on WordPress.com -- leave a pointer
- add_settings_field( self::$option_name_enabled,
- '<span id="infinite-scroll-options">' . esc_html__( 'Infinite Scroll Behavior', 'jetpack' ) . '</span>',
- array( $this, 'infinite_setting_html_calypso_placeholder' ),
- 'reading'
- );
- return;
- }
-
- // Add the setting field [infinite_scroll] and place it in Settings > Reading
- add_settings_field( self::$option_name_enabled, '<span id="infinite-scroll-options">' . esc_html__( 'Infinite Scroll Behavior', 'jetpack' ) . '</span>', array( $this, 'infinite_setting_html' ), 'reading' );
- register_setting( 'reading', self::$option_name_enabled, 'esc_attr' );
- }
-
- function infinite_setting_html_calypso_placeholder() {
- $details = get_blog_details();
- echo '<span>' . sprintf(
- /* translators: Variables are the enclosing link to the settings page */
- esc_html__( 'This option has moved. You can now manage it %1$shere%2$s.' ),
- '<a href="' . esc_url( 'https://wordpress.com/settings/writing/' . $details->domain ) . '">',
- '</a>'
- ) . '</span>';
- }
-
- /**
- * HTML code to display a checkbox true/false option
- * for the infinite_scroll setting.
- */
- function infinite_setting_html() {
- $notice = '<em>' . __( 'We&rsquo;ve changed this option to a click-to-scroll version for you since you have footer widgets in Appearance &rarr; Widgets, or your theme uses click-to-scroll as the default behavior.', 'jetpack' ) . '</em>';
-
- // If the blog has footer widgets, show a notice instead of the checkbox
- if ( self::get_settings()->footer_widgets || 'click' == self::get_settings()->requested_type ) {
- echo '<label>' . $notice . '</label>';
- } else {
- echo '<label><input name="infinite_scroll" type="checkbox" value="1" ' . checked( 1, '' !== get_option( self::$option_name_enabled ), false ) . ' /> ' . esc_html__( 'Check to load posts as you scroll. Uncheck to show clickable button to load posts', 'jetpack' ) . '</label>';
- echo '<p class="description">' . esc_html( sprintf( _n( 'Shows %s post on each load.', 'Shows %s posts on each load.', self::posts_per_page(), 'jetpack' ), number_format_i18n( self::posts_per_page() ) ) ) . '</p>';
- }
- }
-
- /**
- * Does the legwork to determine whether the feature is enabled.
- *
- * @uses current_theme_supports, self::archive_supports_infinity, self::get_settings, add_filter, wp_enqueue_script, plugins_url, wp_enqueue_style, add_action
- * @action template_redirect
- * @return null
- */
- function action_template_redirect() {
- // Check that we support infinite scroll, and are on the home page.
- if ( ! current_theme_supports( 'infinite-scroll' ) || ! self::archive_supports_infinity() )
- return;
-
- $id = self::get_settings()->container;
-
- // Check that we have an id.
- if ( empty( $id ) )
- return;
-
- // Add our scripts.
- wp_register_script(
- 'the-neverending-homepage',
- Jetpack::get_file_url_for_environment(
- '_inc/build/infinite-scroll/infinity.min.js',
- 'modules/infinite-scroll/infinity.js'
- ),
- array( 'jquery' ),
- '4.0.0',
- true
- );
-
- // Add our default styles.
- wp_register_style( 'the-neverending-homepage', plugins_url( 'infinity.css', __FILE__ ), array(), '20140422' );
-
- // Make sure there are enough posts for IS
- if ( self::is_last_batch() ) {
- return;
- }
-
- // Add our scripts.
- wp_enqueue_script( 'the-neverending-homepage' );
-
- // Add our default styles.
- wp_enqueue_style( 'the-neverending-homepage' );
-
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_spinner_scripts' ) );
-
- add_action( 'wp_footer', array( $this, 'action_wp_footer_settings' ), 2 );
-
- add_action( 'wp_footer', array( $this, 'action_wp_footer' ), 21 ); // Core prints footer scripts at priority 20, so we just need to be one later than that
-
- add_filter( 'infinite_scroll_results', array( $this, 'filter_infinite_scroll_results' ), 10, 3 );
- }
-
- /**
- * Enqueue spinner scripts.
- */
- function enqueue_spinner_scripts() {
- wp_enqueue_script( 'jquery.spin' );
- }
-
- /**
- * Returns classes to be added to <body>. If it's enabled, 'infinite-scroll'. If set to continuous scroll, adds 'neverending' too.
- *
- * @since 4.7.0 No longer added as a 'body_class' filter but passed to JS environment and added using JS.
- *
- * @return string
- */
- function body_class() {
- $classes = '';
- // Do not add infinity-scroll class if disabled through the Reading page
- $disabled = '' === get_option( self::$option_name_enabled ) ? true : false;
- if ( ! $disabled || 'click' == self::get_settings()->type ) {
- $classes = 'infinite-scroll';
-
- if ( 'scroll' == self::get_settings()->type )
- $classes .= ' neverending';
- }
-
- return $classes;
- }
-
- /**
- * In case IS is activated on search page, we have to exclude initially loaded posts which match the keyword by title, not the content as they are displayed before content-matching ones
- *
- * @uses self::wp_query
- * @uses self::get_last_post_date
- * @uses self::has_only_title_matching_posts
- * @return array
- */
- function get_excluded_posts() {
-
- $excluded_posts = array();
- //loop through posts returned by wp_query call
- foreach( self::wp_query()->get_posts() as $post ) {
-
- $orderby = isset( self::wp_query()->query_vars['orderby'] ) ? self::wp_query()->query_vars['orderby'] : '';
- $post_date = ( ! empty( $post->post_date ) ? $post->post_date : false );
- if ( 'modified' === $orderby || false === $post_date ) {
- $post_date = $post->post_modified;
- }
-
- //in case all posts initially displayed match the keyword by title we add em all to excluded posts array
- //else, we add only posts which are older than last_post_date param as newer are natually excluded by last_post_date condition in the SQL query
- if ( self::has_only_title_matching_posts() || $post_date <= self::get_last_post_date() ) {
- array_push( $excluded_posts, $post->ID );
- }
- }
- return $excluded_posts;
- }
-
- /**
- * In case IS is active on search, we have to exclude posts matched by title rather than by post_content in order to prevent dupes on next pages
- *
- * @uses self::wp_query
- * @uses self::get_excluded_posts
- * @return array
- */
- function get_query_vars() {
-
- $query_vars = self::wp_query()->query_vars;
- //applies to search page only
- if ( true === self::wp_query()->is_search() ) {
- //set post__not_in array in query_vars in case it does not exists
- if ( false === isset( $query_vars['post__not_in'] ) ) {
- $query_vars['post__not_in'] = array();
- }
- //get excluded posts
- $excluded = self::get_excluded_posts();
- //merge them with other post__not_in posts (eg.: sticky posts)
- $query_vars['post__not_in'] = array_merge( $query_vars['post__not_in'], $excluded );
- }
- return $query_vars;
- }
-
- /**
- * This function checks whether all posts returned by initial wp_query match the keyword by title
- * The code used in this function is borrowed from WP_Query class where it is used to construct like conditions for keywords
- *
- * @uses self::wp_query
- * @return bool
- */
- function has_only_title_matching_posts() {
-
- //apply following logic for search page results only
- if ( false === self::wp_query()->is_search() ) {
- return false;
- }
-
- //grab the last posts in the stack as if the last one is title-matching the rest is title-matching as well
- $post = end( self::wp_query()->posts );
-
- //code inspired by WP_Query class
- if ( preg_match_all( '/".*?("|$)|((?<=[\t ",+])|^)[^\t ",+]+/', self::wp_query()->get( 's' ), $matches ) ) {
- $search_terms = self::wp_query()->query_vars['search_terms'];
- // if the search string has only short terms or stopwords, or is 10+ terms long, match it as sentence
- if ( empty( $search_terms ) || count( $search_terms ) > 9 ) {
- $search_terms = array( self::wp_query()->get( 's' ) );
- }
- } else {
- $search_terms = array( self::wp_query()->get( 's' ) );
- }
-
- //actual testing. As search query combines multiple keywords with AND, it's enough to check if any of the keywords is present in the title
- $term = current( $search_terms );
- if ( ! empty( $term ) && false !== strpos( $post->post_title, $term ) ) {
- return true;
- }
-
- return false;
- }
-
- /**
- * Grab the timestamp for the initial query's last post.
- *
- * This takes into account the query's 'orderby' parameter and returns
- * false if the posts are not ordered by date.
- *
- * @uses self::got_infinity
- * @uses self::has_only_title_matching_posts
- * @uses self::wp_query
- * @return string 'Y-m-d H:i:s' or false
- */
- function get_last_post_date() {
- if ( self::got_infinity() )
- return;
-
- if ( ! self::wp_query()->have_posts() ) {
- return null;
- }
-
- //In case there are only title-matching posts in the initial WP_Query result, we don't want to use the last_post_date param yet
- if ( true === self::has_only_title_matching_posts() ) {
- return false;
- }
-
- $post = end( self::wp_query()->posts );
- $orderby = isset( self::wp_query()->query_vars['orderby'] ) ?
- self::wp_query()->query_vars['orderby'] : '';
- $post_date = ( ! empty( $post->post_date ) ? $post->post_date : false );
- switch ( $orderby ) {
- case 'modified':
- return $post->post_modified;
- case 'date':
- case '':
- return $post_date;
- default:
- return false;
- }
- }
-
- /**
- * Returns the appropriate `wp_posts` table field for a given query's
- * 'orderby' parameter, if applicable.
- *
- * @param optional object $query
- * @uses self::wp_query
- * @return string or false
- */
- function get_query_sort_field( $query = null ) {
- if ( empty( $query ) )
- $query = self::wp_query();
-
- $orderby = isset( $query->query_vars['orderby'] ) ? $query->query_vars['orderby'] : '';
-
- switch ( $orderby ) {
- case 'modified':
- return 'post_modified';
- case 'date':
- case '':
- return 'post_date';
- default:
- return false;
- }
- }
-
- /**
- * Create a where clause that will make sure post queries return posts
- * in the correct order, without duplicates, if a new post is added
- * and we're sorting by post date.
- *
- * @global $wpdb
- * @param string $where
- * @param object $query
- * @uses apply_filters
- * @filter posts_where
- * @return string
- */
- function query_time_filter( $where, $query ) {
- if ( self::got_infinity() ) {
- global $wpdb;
-
- $sort_field = self::get_query_sort_field( $query );
-
- if ( 'post_date' !== $sort_field || 'DESC' !== $_REQUEST['query_args']['order'] ) {
- return $where;
- }
-
- $query_before = sanitize_text_field( wp_unslash( $_REQUEST['query_before'] ) );
-
- if ( empty( $query_before ) ) {
- return $where;
- }
-
- // Construct the date query using our timestamp
- $clause = $wpdb->prepare( " AND {$wpdb->posts}.post_date <= %s", $query_before );
-
- /**
- * Filter Infinite Scroll's SQL date query making sure post queries
- * will always return results prior to (descending sort)
- * or before (ascending sort) the last post date.
- *
- * @module infinite-scroll
- *
- * @param string $clause SQL Date query.
- * @param object $query Query.
- * @param string $operator @deprecated Query operator.
- * @param string $last_post_date @deprecated Last Post Date timestamp.
- */
- $operator = 'ASC' === $_REQUEST['query_args']['order'] ? '>' : '<';
- $last_post_date = sanitize_text_field( wp_unslash( $_REQUEST['last_post_date'] ) );
- $where .= apply_filters( 'infinite_scroll_posts_where', $clause, $query, $operator, $last_post_date );
- }
-
- return $where;
- }
-
- /**
- * Let's overwrite the default post_per_page setting to always display a fixed amount.
- *
- * @param object $query
- * @uses is_admin, self::archive_supports_infinity, self::get_settings
- * @return null
- */
- function posts_per_page_query( $query ) {
- if ( ! is_admin() && self::archive_supports_infinity() && $query->is_main_query() )
- $query->set( 'posts_per_page', self::posts_per_page() );
- }
-
- /**
- * Check if the IS output should be wrapped in a div.
- * Setting value can be a boolean or a string specifying the class applied to the div.
- *
- * @uses self::get_settings
- * @return bool
- */
- function has_wrapper() {
- return (bool) self::get_settings()->wrapper;
- }
-
- /**
- * Returns the Ajax url
- *
- * @global $wp
- * @uses home_url, add_query_arg, apply_filters
- * @return string
- */
- function ajax_url() {
- $base_url = set_url_scheme( home_url( '/' ) );
-
- $ajaxurl = add_query_arg( array( 'infinity' => 'scrolling' ), $base_url );
-
- /**
- * Filter the Infinite Scroll Ajax URL.
- *
- * @module infinite-scroll
- *
- * @since 2.0.0
- *
- * @param string $ajaxurl Infinite Scroll Ajax URL.
- */
- return apply_filters( 'infinite_scroll_ajax_url', $ajaxurl );
- }
-
- /**
- * Our own Ajax response, avoiding calling admin-ajax
- */
- function ajax_response() {
- // Only proceed if the url query has a key of "Infinity"
- if ( ! self::got_infinity() )
- return false;
-
- // This should already be defined below, but make sure.
- if ( ! defined( 'DOING_AJAX' ) ) {
- define( 'DOING_AJAX', true );
- }
-
- @header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) );
- send_nosniff_header();
-
- /**
- * Fires at the end of the Infinite Scroll Ajax response.
- *
- * @module infinite-scroll
- *
- * @since 2.0.0
- */
- do_action( 'custom_ajax_infinite_scroll' );
- die( '0' );
- }
-
- /**
- * Alias for renamed class method.
- *
- * Previously, JS settings object was unnecessarily output in the document head.
- * When the hook was changed, the method name no longer made sense.
- */
- function action_wp_head() {
- $this->action_wp_footer_settings();
- }
-
- /**
- * Prints the relevant infinite scroll settings in JS.
- *
- * @global $wp_rewrite
- * @uses self::get_settings, esc_js, esc_url_raw, self::has_wrapper, __, apply_filters, do_action, self::get_query_vars
- * @action wp_footer
- * @return string
- */
- function action_wp_footer_settings() {
- global $wp_rewrite;
- global $currentday;
-
- // Default click handle text
- $click_handle_text = __( 'Older posts', 'jetpack' );
-
- // If a single CPT is displayed, use its plural name instead of "posts"
- // Could be empty (posts) or an array of multiple post types.
- // In the latter two cases cases, the default text is used, leaving the `infinite_scroll_js_settings` filter for further customization.
- $post_type = self::wp_query()->get( 'post_type' );
-
- // If it's a taxonomy, try to change the button text.
- if ( is_tax() ) {
- // Get current taxonomy slug.
- $taxonomy_slug = self::wp_query()->get( 'taxonomy' );
-
- // Get taxonomy settings.
- $taxonomy = get_taxonomy( $taxonomy_slug );
-
- // Check if the taxonomy is attached to one post type only and use its plural name.
- // If not, use "Posts" without confusing the users.
- if ( count( $taxonomy->object_type ) < 2 ) {
- $post_type = $taxonomy->object_type[0];
- }
- }
-
- if ( is_string( $post_type ) && ! empty( $post_type ) ) {
- $post_type = get_post_type_object( $post_type );
-
- if ( is_object( $post_type ) && ! is_wp_error( $post_type ) ) {
- if ( isset( $post_type->labels->name ) ) {
- $cpt_text = $post_type->labels->name;
- } elseif ( isset( $post_type->label ) ) {
- $cpt_text = $post_type->label;
- }
-
- if ( isset( $cpt_text ) ) {
- /* translators: %s is the name of a custom post type */
- $click_handle_text = sprintf( __( 'More %s', 'jetpack' ), $cpt_text );
- unset( $cpt_text );
- }
- }
- }
-
- unset( $post_type );
-
- // Base JS settings
- $js_settings = array(
- 'id' => self::get_settings()->container,
- 'ajaxurl' => esc_url_raw( self::ajax_url() ),
- 'type' => esc_js( self::get_settings()->type ),
- 'wrapper' => self::has_wrapper(),
- 'wrapper_class' => is_string( self::get_settings()->wrapper ) ? esc_js( self::get_settings()->wrapper ) : 'infinite-wrap',
- 'footer' => is_string( self::get_settings()->footer ) ? esc_js( self::get_settings()->footer ) : self::get_settings()->footer,
- 'click_handle' => esc_js( self::get_settings()->click_handle ),
- 'text' => esc_js( $click_handle_text ),
- 'totop' => esc_js( __( 'Scroll back to top', 'jetpack' ) ),
- 'currentday' => $currentday,
- 'order' => 'DESC',
- 'scripts' => array(),
- 'styles' => array(),
- 'google_analytics' => false,
- 'offset' => max( 1, self::wp_query()->get( 'paged' ) ), // Pass through the current page so we can use that to offset the first load.
- 'history' => array(
- 'host' => preg_replace( '#^http(s)?://#i', '', untrailingslashit( esc_url( get_home_url() ) ) ),
- 'path' => self::get_request_path(),
- 'use_trailing_slashes' => $wp_rewrite->use_trailing_slashes,
- 'parameters' => self::get_request_parameters(),
- ),
- 'query_args' => self::get_query_vars(),
- 'query_before' => current_time( 'mysql' ),
- 'last_post_date' => self::get_last_post_date(),
- 'body_class' => self::body_class(),
- );
-
- // Optional order param
- if ( isset( $_REQUEST['order'] ) ) {
- $order = strtoupper( $_REQUEST['order'] );
-
- if ( in_array( $order, array( 'ASC', 'DESC' ) ) )
- $js_settings['order'] = $order;
- }
-
- /**
- * Filter the Infinite Scroll JS settings outputted in the head.
- *
- * @module infinite-scroll
- *
- * @since 2.0.0
- *
- * @param array $js_settings Infinite Scroll JS settings.
- */
- $js_settings = apply_filters( 'infinite_scroll_js_settings', $js_settings );
-
- /**
- * Fires before Infinite Scroll outputs inline JavaScript in the head.
- *
- * @module infinite-scroll
- *
- * @since 2.0.0
- */
- do_action( 'infinite_scroll_wp_head' );
-
- ?>
- <script type="text/javascript">
- //<![CDATA[
- var infiniteScroll = JSON.parse( decodeURIComponent( '<?php echo
- rawurlencode( json_encode( array( 'settings' => $js_settings ) ) );
- ?>' ) );
- //]]>
- </script>
- <?php
- }
-
- /**
- * Build path data for current request.
- * Used for Google Analytics and pushState history tracking.
- *
- * @global $wp_rewrite
- * @global $wp
- * @uses user_trailingslashit, sanitize_text_field, add_query_arg
- * @return string|bool
- */
- private function get_request_path() {
- global $wp_rewrite;
-
- if ( $wp_rewrite->using_permalinks() ) {
- global $wp;
-
- // If called too early, bail
- if ( ! isset( $wp->request ) )
- return false;
-
- // Determine path for paginated version of current request
- if ( false != preg_match( '#' . $wp_rewrite->pagination_base . '/\d+/?$#i', $wp->request ) )
- $path = preg_replace( '#' . $wp_rewrite->pagination_base . '/\d+$#i', $wp_rewrite->pagination_base . '/%d', $wp->request );
- else
- $path = $wp->request . '/' . $wp_rewrite->pagination_base . '/%d';
-
- // Slashes everywhere we need them
- if ( 0 !== strpos( $path, '/' ) )
- $path = '/' . $path;
-
- $path = user_trailingslashit( $path );
- } else {
- // Clean up raw $_REQUEST input
- $path = array_map( 'sanitize_text_field', $_REQUEST );
- $path = array_filter( $path );
-
- $path['paged'] = '%d';
-
- $path = add_query_arg( $path, '/' );
- }
-
- return empty( $path ) ? false : $path;
- }
-
- /**
- * Return query string for current request, prefixed with '?'.
- *
- * @return string
- */
- private function get_request_parameters() {
- $uri = $_SERVER[ 'REQUEST_URI' ];
- $uri = preg_replace( '/^[^?]*(\?.*$)/', '$1', $uri, 1, $count );
- if ( $count != 1 )
- return '';
- return $uri;
- }
-
- /**
- * Provide IS with a list of the scripts and stylesheets already present on the page.
- * Since posts may contain require additional assets that haven't been loaded, this data will be used to track the additional assets.
- *
- * @global $wp_scripts, $wp_styles
- * @action wp_footer
- * @return string
- */
- function action_wp_footer() {
- global $wp_scripts, $wp_styles;
-
- $scripts = is_a( $wp_scripts, 'WP_Scripts' ) ? $wp_scripts->done : array();
- /**
- * Filter the list of scripts already present on the page.
- *
- * @module infinite-scroll
- *
- * @since 2.1.2
- *
- * @param array $scripts Array of scripts present on the page.
- */
- $scripts = apply_filters( 'infinite_scroll_existing_scripts', $scripts );
-
- $styles = is_a( $wp_styles, 'WP_Styles' ) ? $wp_styles->done : array();
- /**
- * Filter the list of styles already present on the page.
- *
- * @module infinite-scroll
- *
- * @since 2.1.2
- *
- * @param array $styles Array of styles present on the page.
- */
- $styles = apply_filters( 'infinite_scroll_existing_stylesheets', $styles );
-
- ?><script type="text/javascript">
- jQuery.extend( infiniteScroll.settings.scripts, <?php echo json_encode( $scripts ); ?> );
- jQuery.extend( infiniteScroll.settings.styles, <?php echo json_encode( $styles ); ?> );
- </script><?php
- }
-
- /**
- * Identify additional scripts required by the latest set of IS posts and provide the necessary data to the IS response handler.
- *
- * @global $wp_scripts
- * @uses sanitize_text_field, add_query_arg
- * @filter infinite_scroll_results
- * @return array
- */
- function filter_infinite_scroll_results( $results, $query_args, $wp_query ) {
- // Don't bother unless there are posts to display
- if ( 'success' != $results['type'] )
- return $results;
-
- // Parse and sanitize the script handles already output
- $initial_scripts = isset( $_REQUEST['scripts'] ) && is_array( $_REQUEST['scripts'] ) ? array_map( 'sanitize_text_field', $_REQUEST['scripts'] ) : false;
-
- if ( is_array( $initial_scripts ) ) {
- global $wp_scripts;
-
- // Identify new scripts needed by the latest set of IS posts
- $new_scripts = array_diff( $wp_scripts->done, $initial_scripts );
-
- // If new scripts are needed, extract relevant data from $wp_scripts
- if ( ! empty( $new_scripts ) ) {
- $results['scripts'] = array();
-
- foreach ( $new_scripts as $handle ) {
- // Abort if somehow the handle doesn't correspond to a registered script
- if ( ! isset( $wp_scripts->registered[ $handle ] ) )
- continue;
-
- // Provide basic script data
- $script_data = array(
- 'handle' => $handle,
- 'footer' => ( is_array( $wp_scripts->in_footer ) && in_array( $handle, $wp_scripts->in_footer ) ),
- 'extra_data' => $wp_scripts->print_extra_script( $handle, false )
- );
-
- // Base source
- $src = $wp_scripts->registered[ $handle ]->src;
-
- // Take base_url into account
- if ( strpos( $src, 'http' ) !== 0 )
- $src = $wp_scripts->base_url . $src;
-
- // Version and additional arguments
- if ( null === $wp_scripts->registered[ $handle ]->ver )
- $ver = '';
- else
- $ver = $wp_scripts->registered[ $handle ]->ver ? $wp_scripts->registered[ $handle ]->ver : $wp_scripts->default_version;
-
- if ( isset( $wp_scripts->args[ $handle ] ) )
- $ver = $ver ? $ver . '&amp;' . $wp_scripts->args[$handle] : $wp_scripts->args[$handle];
-
- // Full script source with version info
- $script_data['src'] = add_query_arg( 'ver', $ver, $src );
-
- // Add script to data that will be returned to IS JS
- array_push( $results['scripts'], $script_data );
- }
- }
- }
-
- // Expose additional script data to filters, but only include in final `$results` array if needed.
- if ( ! isset( $results['scripts'] ) )
- $results['scripts'] = array();
-
- /**
- * Filter the additional scripts required by the latest set of IS posts.
- *
- * @module infinite-scroll
- *
- * @since 2.1.2
- *
- * @param array $results['scripts'] Additional scripts required by the latest set of IS posts.
- * @param array|bool $initial_scripts Set of scripts loaded on each page.
- * @param array $results Array of Infinite Scroll results.
- * @param array $query_args Array of Query arguments.
- * @param WP_Query $wp_query WP Query.
- */
- $results['scripts'] = apply_filters(
- 'infinite_scroll_additional_scripts',
- $results['scripts'],
- $initial_scripts,
- $results,
- $query_args,
- $wp_query
- );
-
- if ( empty( $results['scripts'] ) )
- unset( $results['scripts' ] );
-
- // Parse and sanitize the style handles already output
- $initial_styles = isset( $_REQUEST['styles'] ) && is_array( $_REQUEST['styles'] ) ? array_map( 'sanitize_text_field', $_REQUEST['styles'] ) : false;
-
- if ( is_array( $initial_styles ) ) {
- global $wp_styles;
-
- // Identify new styles needed by the latest set of IS posts
- $new_styles = array_diff( $wp_styles->done, $initial_styles );
-
- // If new styles are needed, extract relevant data from $wp_styles
- if ( ! empty( $new_styles ) ) {
- $results['styles'] = array();
-
- foreach ( $new_styles as $handle ) {
- // Abort if somehow the handle doesn't correspond to a registered stylesheet
- if ( ! isset( $wp_styles->registered[ $handle ] ) )
- continue;
-
- // Provide basic style data
- $style_data = array(
- 'handle' => $handle,
- 'media' => 'all'
- );
-
- // Base source
- $src = $wp_styles->registered[ $handle ]->src;
-
- // Take base_url into account
- if ( strpos( $src, 'http' ) !== 0 )
- $src = $wp_styles->base_url . $src;
-
- // Version and additional arguments
- if ( null === $wp_styles->registered[ $handle ]->ver )
- $ver = '';
- else
- $ver = $wp_styles->registered[ $handle ]->ver ? $wp_styles->registered[ $handle ]->ver : $wp_styles->default_version;
-
- if ( isset($wp_styles->args[ $handle ] ) )
- $ver = $ver ? $ver . '&amp;' . $wp_styles->args[$handle] : $wp_styles->args[$handle];
-
- // Full stylesheet source with version info
- $style_data['src'] = add_query_arg( 'ver', $ver, $src );
-
- // Parse stylesheet's conditional comments if present, converting to logic executable in JS
- if ( isset( $wp_styles->registered[ $handle ]->extra['conditional'] ) && $wp_styles->registered[ $handle ]->extra['conditional'] ) {
- // First, convert conditional comment operators to standard logical operators. %ver is replaced in JS with the IE version
- $style_data['conditional'] = str_replace( array(
- 'lte',
- 'lt',
- 'gte',
- 'gt'
- ), array(
- '%ver <=',
- '%ver <',
- '%ver >=',
- '%ver >',
- ), $wp_styles->registered[ $handle ]->extra['conditional'] );
-
- // Next, replace any !IE checks. These shouldn't be present since WP's conditional stylesheet implementation doesn't support them, but someone could be _doing_it_wrong().
- $style_data['conditional'] = preg_replace( '#!\s*IE(\s*\d+){0}#i', '1==2', $style_data['conditional'] );
-
- // Lastly, remove the IE strings
- $style_data['conditional'] = str_replace( 'IE', '', $style_data['conditional'] );
- }
-
- // Parse requested media context for stylesheet
- if ( isset( $wp_styles->registered[ $handle ]->args ) )
- $style_data['media'] = esc_attr( $wp_styles->registered[ $handle ]->args );
-
- // Add stylesheet to data that will be returned to IS JS
- array_push( $results['styles'], $style_data );
- }
- }
- }
-
- // Expose additional stylesheet data to filters, but only include in final `$results` array if needed.
- if ( ! isset( $results['styles'] ) )
- $results['styles'] = array();
-
- /**
- * Filter the additional styles required by the latest set of IS posts.
- *
- * @module infinite-scroll
- *
- * @since 2.1.2
- *
- * @param array $results['styles'] Additional styles required by the latest set of IS posts.
- * @param array|bool $initial_styles Set of styles loaded on each page.
- * @param array $results Array of Infinite Scroll results.
- * @param array $query_args Array of Query arguments.
- * @param WP_Query $wp_query WP Query.
- */
- $results['styles'] = apply_filters(
- 'infinite_scroll_additional_stylesheets',
- $results['styles'],
- $initial_styles,
- $results,
- $query_args,
- $wp_query
- );
-
- if ( empty( $results['styles'] ) )
- unset( $results['styles' ] );
-
- // Lastly, return the IS results array
- return $results;
- }
-
- /**
- * Runs the query and returns the results via JSON.
- * Triggered by an AJAX request.
- *
- * @global $wp_query
- * @global $wp_the_query
- * @uses current_theme_supports, get_option, self::wp_query, current_user_can, apply_filters, self::get_settings, add_filter, WP_Query, remove_filter, have_posts, wp_head, do_action, add_action, this::render, this::has_wrapper, esc_attr, wp_footer, sharing_register_post_for_share_counts, get_the_id
- * @return string or null
- */
- function query() {
- if ( ! isset( $_REQUEST['page'] ) || ! current_theme_supports( 'infinite-scroll' ) )
- die;
-
- $page = (int) $_REQUEST['page'];
-
- // Sanitize and set $previousday. Expected format: dd.mm.yy
- if ( preg_match( '/^\d{2}\.\d{2}\.\d{2}$/', $_REQUEST['currentday'] ) ) {
- global $previousday;
- $previousday = $_REQUEST['currentday'];
- }
-
- $post_status = array( 'publish' );
- if ( current_user_can( 'read_private_posts' ) )
- array_push( $post_status, 'private' );
-
- $order = in_array( $_REQUEST['order'], array( 'ASC', 'DESC' ) ) ? $_REQUEST['order'] : 'DESC';
-
- $query_args = array_merge( self::wp_query()->query_vars, array(
- 'paged' => $page,
- 'post_status' => $post_status,
- 'posts_per_page' => self::posts_per_page(),
- 'order' => $order
- ) );
-
- // 4.0 ?s= compatibility, see https://core.trac.wordpress.org/ticket/11330#comment:50
- if ( empty( $query_args['s'] ) && ! isset( self::wp_query()->query['s'] ) ) {
- unset( $query_args['s'] );
- }
-
- // By default, don't query for a specific page of a paged post object.
- // This argument can come from merging self::wp_query() into $query_args above.
- // Since IS is only used on archives, we should always display the first page of any paged content.
- unset( $query_args['page'] );
-
- /**
- * Filter the array of main query arguments.
- *
- * @module infinite-scroll
- *
- * @since 2.0.1
- *
- * @param array $query_args Array of Query arguments.
- */
- $query_args = apply_filters( 'infinite_scroll_query_args', $query_args );
-
- add_filter( 'posts_where', array( $this, 'query_time_filter' ), 10, 2 );
-
- $GLOBALS['wp_the_query'] = $GLOBALS['wp_query'] = $infinite_scroll_query = new WP_Query();
-
- $infinite_scroll_query->query( $query_args );
-
- remove_filter( 'posts_where', array( $this, 'query_time_filter' ), 10, 2 );
-
- $results = array();
-
- if ( have_posts() ) {
- // Fire wp_head to ensure that all necessary scripts are enqueued. Output isn't used, but scripts are extracted in self::action_wp_footer.
- ob_start();
- wp_head();
- while ( ob_get_length() ) {
- ob_end_clean();
- }
-
- $results['type'] = 'success';
-
- /**
- * Gather renderer callbacks. These will be called in order and allow multiple callbacks to be queued. Once content is found, no futher callbacks will run.
- *
- * @module infinite-scroll
- *
- * @since 6.0.0
- */
- $callbacks = apply_filters( 'infinite_scroll_render_callbacks', array(
- self::get_settings()->render, // This is the setting callback e.g. from add theme support.
- ) );
-
- // Append fallback callback. That rhymes.
- $callbacks[] = array( $this, 'render' );
-
- foreach ( $callbacks as $callback ) {
- if ( false !== $callback && is_callable( $callback ) ) {
- rewind_posts();
- ob_start();
- add_action( 'infinite_scroll_render', $callback );
-
- /**
- * Fires when rendering Infinite Scroll posts.
- *
- * @module infinite-scroll
- *
- * @since 2.0.0
- */
- do_action( 'infinite_scroll_render' );
-
- $results['html'] = ob_get_clean();
- remove_action( 'infinite_scroll_render', $callback );
- }
- if ( ! empty( $results['html'] ) ) {
- break;
- }
- }
-
- // If primary and fallback rendering methods fail, prevent further IS rendering attempts. Otherwise, wrap the output if requested.
- if ( empty( $results['html'] ) ) {
- unset( $results['html'] );
- /**
- * Fires when Infinite Scoll doesn't render any posts.
- *
- * @module infinite-scroll
- *
- * @since 2.0.0
- */
- do_action( 'infinite_scroll_empty' );
- $results['type'] = 'empty';
- } elseif ( $this->has_wrapper() ) {
- $wrapper_classes = is_string( self::get_settings()->wrapper ) ? self::get_settings()->wrapper : 'infinite-wrap';
- $wrapper_classes .= ' infinite-view-' . $page;
- $wrapper_classes = trim( $wrapper_classes );
-
- $results['html'] = '<div class="' . esc_attr( $wrapper_classes ) . '" id="infinite-view-' . $page . '" data-page-num="' . $page . '">' . $results['html'] . '</div>';
- }
-
- // Fire wp_footer to ensure that all necessary scripts are enqueued. Output isn't used, but scripts are extracted in self::action_wp_footer.
- ob_start();
- wp_footer();
- while ( ob_get_length() ) {
- ob_end_clean();
- }
-
- if ( 'success' == $results['type'] ) {
- global $currentday;
- $results['lastbatch'] = self::is_last_batch();
- $results['currentday'] = $currentday;
- }
-
- // Loop through posts to capture sharing data for new posts loaded via Infinite Scroll
- if ( 'success' == $results['type'] && function_exists( 'sharing_register_post_for_share_counts' ) ) {
- global $jetpack_sharing_counts;
-
- while( have_posts() ) {
- the_post();
-
- sharing_register_post_for_share_counts( get_the_ID() );
- }
-
- $results['postflair'] = array_flip( $jetpack_sharing_counts );
- }
- } else {
- /** This action is already documented in modules/infinite-scroll/infinity.php */
- do_action( 'infinite_scroll_empty' );
- $results['type'] = 'empty';
- }
-
- wp_send_json(
- /**
- * Filter the Infinite Scroll results.
- *
- * @module infinite-scroll
- *
- * @since 2.0.0
- *
- * @param array $results Array of Infinite Scroll results.
- * @param array $query_args Array of main query arguments.
- * @param WP_Query $wp_query WP Query.
- */
- apply_filters( 'infinite_scroll_results', $results, $query_args, self::wp_query() )
- );
- }
-
- /**
- * Update the $allowed_vars array with the standard WP public and private
- * query vars, as well as taxonomy vars
- *
- * @global $wp
- * @param array $allowed_vars
- * @filter infinite_scroll_allowed_vars
- * @return array
- */
- function allowed_query_vars( $allowed_vars ) {
- global $wp;
-
- $allowed_vars += $wp->public_query_vars;
- $allowed_vars += $wp->private_query_vars;
- $allowed_vars += $this->get_taxonomy_vars();
-
- foreach ( array_keys( $allowed_vars, 'paged' ) as $key ) {
- unset( $allowed_vars[ $key ] );
- }
-
- return array_unique( $allowed_vars );
- }
-
- /**
- * Returns an array of stock and custom taxonomy query vars
- *
- * @global $wp_taxonomies
- * @return array
- */
- function get_taxonomy_vars() {
- global $wp_taxonomies;
-
- $taxonomy_vars = array();
- foreach ( $wp_taxonomies as $taxonomy => $t ) {
- if ( $t->query_var )
- $taxonomy_vars[] = $t->query_var;
- }
-
- // still needed?
- $taxonomy_vars[] = 'tag_id';
-
- return $taxonomy_vars;
- }
-
- /**
- * Update the $query_args array with the parameters provided via AJAX/GET.
- *
- * @param array $query_args
- * @filter infinite_scroll_query_args
- * @return array
- */
- function inject_query_args( $query_args ) {
- /**
- * Filter the array of allowed Infinite Scroll query arguments.
- *
- * @module infinite-scroll
- *
- * @since 2.6.0
- *
- * @param array $args Array of allowed Infinite Scroll query arguments.
- * @param array $query_args Array of query arguments.
- */
- $allowed_vars = apply_filters( 'infinite_scroll_allowed_vars', array(), $query_args );
-
- $query_args = array_merge( $query_args, array(
- 'suppress_filters' => false,
- ) );
-
- if ( is_array( $_REQUEST[ 'query_args' ] ) ) {
- foreach ( $_REQUEST[ 'query_args' ] as $var => $value ) {
- if ( in_array( $var, $allowed_vars ) && ! empty( $value ) )
- $query_args[ $var ] = $value;
- }
- }
-
- return $query_args;
- }
-
- /**
- * Rendering fallback used when themes don't specify their own handler.
- *
- * @uses have_posts, the_post, get_template_part, get_post_format
- * @action infinite_scroll_render
- * @return string
- */
- function render() {
- while ( have_posts() ) {
- the_post();
-
- get_template_part( 'content', get_post_format() );
- }
- }
-
- /**
- * Allow plugins to filter what archives Infinite Scroll supports
- *
- * @uses current_theme_supports, is_home, is_archive, apply_filters, self::get_settings
- * @return bool
- */
- public static function archive_supports_infinity() {
- $supported = current_theme_supports( 'infinite-scroll' ) && ( is_home() || is_archive() || is_search() );
-
- // Disable when previewing a non-active theme in the customizer
- if ( is_customize_preview() && ! $GLOBALS['wp_customize']->is_theme_active() ) {
- return false;
- }
-
- /**
- * Allow plugins to filter what archives Infinite Scroll supports.
- *
- * @module infinite-scroll
- *
- * @since 2.0.0
- *
- * @param bool $supported Does the Archive page support Infinite Scroll.
- * @param object self::get_settings() IS settings provided by theme.
- */
- return (bool) apply_filters( 'infinite_scroll_archive_supported', $supported, self::get_settings() );
- }
-
- /**
- * The Infinite Blog Footer
- *
- * @uses self::get_settings, self::archive_supports_infinity, self::default_footer
- * @return string or null
- */
- function footer() {
- // Bail if theme requested footer not show
- if ( false == self::get_settings()->footer )
- return;
-
- // We only need the new footer for the 'scroll' type
- if ( 'scroll' != self::get_settings()->type || ! self::archive_supports_infinity() )
- return;
-
- if ( self::is_last_batch() ) {
- return;
- }
-
- // Display a footer, either user-specified or a default
- if ( false !== self::get_settings()->footer_callback && is_callable( self::get_settings()->footer_callback ) )
- call_user_func( self::get_settings()->footer_callback, self::get_settings() );
- else
- self::default_footer();
- }
-
- /**
- * Render default IS footer
- *
- * @uses __, wp_get_theme, apply_filters, home_url, esc_attr, get_bloginfo, bloginfo
- * @return string
- *
- */
- private function default_footer() {
- if ( '' !== get_privacy_policy_url() ) {
- $credits = get_the_privacy_policy_link() . '<span role="separator" aria-hidden="true"> / </span>';
- } else {
- $credits = '';
- }
- $credits .= sprintf(
- '<a href="https://wordpress.org/" rel="noopener noreferrer" target="_blank" rel="generator">%1$s</a> ',
- __( 'Proudly powered by WordPress', 'jetpack' )
- );
- $credits .= sprintf(
- /* translators: %1$s is the name of a theme */
- __( 'Theme: %1$s.', 'jetpack' ),
- wp_get_theme()->Name
- );
- /**
- * Filter Infinite Scroll's credit text.
- *
- * @module infinite-scroll
- *
- * @since 2.0.0
- *
- * @param string $credits Infinite Scroll credits.
- */
- $credits = apply_filters( 'infinite_scroll_credit', $credits );
-
- ?>
- <div id="infinite-footer">
- <div class="container">
- <div class="blog-info">
- <a id="infinity-blog-title" href="<?php echo home_url( '/' ); ?>" rel="home">
- <?php bloginfo( 'name' ); ?>
- </a>
- </div>
- <div class="blog-credits">
- <?php echo $credits; ?>
- </div>
- </div>
- </div><!-- #infinite-footer -->
- <?php
- }
-
- /**
- * Ensure that IS doesn't interfere with Grunion by stripping IS query arguments from the Grunion redirect URL.
- * When arguments are present, Grunion redirects to the IS AJAX endpoint.
- *
- * @param string $url
- * @uses remove_query_arg
- * @filter grunion_contact_form_redirect_url
- * @return string
- */
- public function filter_grunion_redirect_url( $url ) {
- // Remove IS query args, if present
- if ( false !== strpos( $url, 'infinity=scrolling' ) ) {
- $url = remove_query_arg( array(
- 'infinity',
- 'action',
- 'page',
- 'order',
- 'scripts',
- 'styles'
- ), $url );
- }
-
- return $url;
- }
-};
-
-/**
- * Initialize The_Neverending_Home_Page
- */
-function the_neverending_home_page_init() {
- if ( ! current_theme_supports( 'infinite-scroll' ) )
- return;
-
- new The_Neverending_Home_Page;
-}
-add_action( 'init', 'the_neverending_home_page_init', 20 );
-
-/**
- * Check whether the current theme is infinite-scroll aware.
- * If so, include the files which add theme support.
- */
-function the_neverending_home_page_theme_support() {
- if (
- defined( 'IS_WPCOM' ) && IS_WPCOM &&
- defined( 'REST_API_REQUEST' ) && REST_API_REQUEST &&
- ! doing_action( 'restapi_theme_after_setup_theme' )
- ) {
- // Don't source theme compat files until we're in the site's context
- return;
- }
- $theme_name = get_stylesheet();
-
- /**
- * Filter the path to the Infinite Scroll compatibility file.
- *
- * @module infinite-scroll
- *
- * @since 2.0.0
- *
- * @param string $str IS compatibility file path.
- * @param string $theme_name Theme name.
- */
- $customization_file = apply_filters( 'infinite_scroll_customization_file', dirname( __FILE__ ) . "/themes/{$theme_name}.php", $theme_name );
-
- if ( is_readable( $customization_file ) )
- require_once( $customization_file );
-}
-add_action( 'after_setup_theme', 'the_neverending_home_page_theme_support', 5 );
-
-/**
- * Early accommodation of the Infinite Scroll AJAX request
- */
-if ( The_Neverending_Home_Page::got_infinity() ) {
- /**
- * If we're sure this is an AJAX request (i.e. the HTTP_X_REQUESTED_WITH header says so),
- * indicate it as early as possible for actions like init
- */
- if ( ! defined( 'DOING_AJAX' ) &&
- isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) &&
- strtoupper( $_SERVER['HTTP_X_REQUESTED_WITH'] ) == 'XMLHTTPREQUEST'
- ) {
- define( 'DOING_AJAX', true );
- }
-
- // Don't load the admin bar when doing the AJAX response.
- show_admin_bar( false );
-}
diff --git a/plugins/jetpack/modules/infinite-scroll/themes/twentyeleven.css b/plugins/jetpack/modules/infinite-scroll/themes/twentyeleven.css
deleted file mode 100644
index cc232785..00000000
--- a/plugins/jetpack/modules/infinite-scroll/themes/twentyeleven.css
+++ /dev/null
@@ -1,45 +0,0 @@
-/* =Infinity Styles
--------------------------------------------------------------- */
-.infinite-scroll #main:after {
- clear: both;
- content: '';
- display: block;
-}
-.infinite-scroll #content {
- margin-bottom: 40px;
-}
-.infinite-scroll.neverending #content {
- margin-bottom: 70px;
-}
-.infinite-scroll .infinite-wrap {
- border-top: none;
- padding-top: 0;
-}
-.infinite-scroll .infinite-wrap .hentry:last-child {
- border-bottom: 1px solid #ddd;
-}
-.infinite-scroll .infinite-wrap:last-of-type .hentry:last-child {
- border-bottom: none;
-}
-
-/**
- * Elements to hide:
- * (footer widgets, post navigation, regular footer)
- */
-.infinite-scroll.neverending #colophon #supplementary,
-.infinite-scroll #nav-below,
-.infinite-scroll.neverending #colophon {
- display: none;
-}
-
-/* Hooks to infinity-end body class to restore footer */
-.infinity-end.neverending #colophon {
- display: block;
-}
-
-/* For responsive CSS */
-@media (max-width: 800px) {
- .infinite-scroll #infinite-handle {
- padding-bottom: 40px;
- }
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/infinite-scroll/themes/twentyeleven.php b/plugins/jetpack/modules/infinite-scroll/themes/twentyeleven.php
deleted file mode 100644
index 42a69b2d..00000000
--- a/plugins/jetpack/modules/infinite-scroll/themes/twentyeleven.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/**
- * Infinite Scroll Theme Assets
- *
- * Register support for @Twenty Eleven and enqueue relevant styles.
- */
-
-/**
- * Add theme support for infinity scroll
- */
-function jetpack_twentyeleven_infinite_scroll_init() {
- add_theme_support( 'infinite-scroll', array(
- 'container' => 'content',
- 'footer' => 'page',
- 'footer_widgets' => jetpack_twentyeleven_has_footer_widgets(),
- ) );
-}
-add_action( 'init', 'jetpack_twentyeleven_infinite_scroll_init' );
-
-/**
- * Enqueue CSS stylesheet with theme styles for infinity.
- */
-function jetpack_twentyeleven_infinite_scroll_enqueue_styles() {
- if ( wp_script_is( 'the-neverending-homepage' ) ) {
- // Add theme specific styles.
- wp_enqueue_style( 'infinity-twentyeleven', plugins_url( 'twentyeleven.css', __FILE__ ), array( 'the-neverending-homepage' ), '20121002' );
- }
-}
-add_action( 'wp_enqueue_scripts', 'jetpack_twentyeleven_infinite_scroll_enqueue_styles', 25 );
-
-/**
- * Do we have footer widgets?
- */
-function jetpack_twentyeleven_has_footer_widgets() {
- // Are any of the "Footer Area" sidebars active?
- if ( is_active_sidebar( 'sidebar-3' ) || is_active_sidebar( 'sidebar-4' ) || is_active_sidebar( 'sidebar-5' ) )
- return true;
-
- // If we're on mobile and the Main Sidebar has widgets, it falls below the content, so we have footer widgets.
- if ( function_exists( 'jetpack_is_mobile' ) && jetpack_is_mobile() && is_active_sidebar( 'sidebar-1' ) )
- return true;
-
- return false;
-}
diff --git a/plugins/jetpack/modules/infinite-scroll/themes/twentyfifteen-rtl.css b/plugins/jetpack/modules/infinite-scroll/themes/twentyfifteen-rtl.css
deleted file mode 100644
index c7bb9595..00000000
--- a/plugins/jetpack/modules/infinite-scroll/themes/twentyfifteen-rtl.css
+++ /dev/null
@@ -1,216 +0,0 @@
-/**
- * Infinite Scroll
- */
-
-.infinite-scroll .pagination,
-.infinite-scroll.neverending .site-footer {
- display: none;
-}
-
-.infinity-end.neverending .site-footer {
- display: block;
-}
-
-/* Spinner */
-.infinite-loader {
- clear: both;
- height: 24px;
- margin: 24px 0;
-}
-
-.infinite-loader .spinner {
- top: 50% !important;
- right: 50% !important;
-}
-
-/* Click-to-load */
-#infinite-handle {
- clear: both;
- margin: 7.6923%;
- text-align: center;
-}
-
-#infinite-handle span {
- background-color: #333;
- font-family: "Noto Sans", sans-serif;
- font-size: 12px;
- font-size: 1.2rem;
- font-weight: 700;
- letter-spacing: 0.04em;
- line-height: normal;
- padding: 0.7917em;
- text-transform: uppercase;
-}
-
-#infinite-handle span:hover,
-#infinite-handle span:focus {
- background-color: #707070;
- background-color: rgba(51, 51, 51, 0.7);
- color: #fff;
-}
-
-/* Footer */
-#infinite-footer {
- display: none;
- z-index: 999;
-}
-
-#infinite-footer .container {
- background-color: #fff;
- background-color: rgba(255, 255, 255, 0.5);
- border-color: #eaeaea;
- border-color: rgba(51, 51, 51, 0.1);
- padding: 0 0.8em;
- width: 100% !important;
-}
-
-#infinite-footer .blog-info {
- font-family: "Noto Sans", sans-serif;
-}
-
-#infinite-footer .blog-info,
-#infinite-footer .blog-credits {
- height: 24px;
- line-height: 24px;
-}
-
-#infinite-footer .blog-info a,
-#infinite-footer .blog-credits {
- font-size: 12px;
- font-size: 1.2rem;
-}
-
-#infinite-footer .blog-info a,
-#infinite-footer .blog-credits a:hover,
-#infinite-footer .blog-credits a:focus {
- color: #333;
-}
-
-#infinite-footer .blog-info a:hover,
-#infinite-footer .blog-info a:focus,
-#infinite-footer .blog-credits,
-#infinite-footer .blog-credits a {
- color: #707070;
- color: rgba(51, 51, 51, 0.7);
-}
-
-#infinite-footer .blog-info a:hover,
-#infinite-footer .blog-info a:focus,
-#infinite-footer .blog-credits a:hover,
-#infinite-footer .blog-credits a:focus {
- text-decoration: none;
-}
-
-@media screen and (min-width: 38.75em) {
- .infinite-loader {
- margin: 7.6923% 0;
- }
-
- .infinite-wrap {
- margin-top: 7.6923%;
- }
-
- #infinite-handle {
- margin-bottom: 0;
- }
-}
-
-@media screen and (min-width: 46.25em) {
- #infinite-handle span {
- display: block;
- font-size: 14px;
- font-size: 1.4rem;
- padding: 0.8214em
- }
-}
-
-@media screen and (min-width: 55em) {
- #infinite-handle span {
- font-size: 16px;
- font-size: 1.6rem;
- padding: 0.8125em;
- }
-}
-
-@media screen and (min-width: 59.6875em) {
- .infinite-loader {
- margin: 8.3333% 0;
- }
-
- .infinite-wrap {
- margin-top: 8.3333%;
- }
-
- #infinite-handle {
- margin: 8.3333% 8.3333% 0;
- }
-
- #infinite-handle span {
- display: inline-block;
- font-size: 12px;
- font-size: 1.2rem;
- padding: 0.7917em 1.5833em;
- }
-
- #infinite-footer {
- display: block;
- position: fixed;
- }
-}
-
-@media screen and (min-width: 68.75em) {
- #infinite-handle span {
- display: inline-block;
- font-size: 14px;
- font-size: 1.4rem;
- padding: 0.8214em 1.5714em;
- }
-
- #infinite-footer .container {
- padding: 0 0.8235em;
- }
-
- #infinite-footer .blog-info,
- #infinite-footer .blog-credits {
- height: 27px;
- line-height: 27px;
- }
-
- #infinite-footer .blog-info a {
- font-size: 14px;
- font-size: 1.4rem;
- }
-
- #infinite-footer .blog-credits {
- font-size: 12px;
- font-size: 1.2rem;
- }
-}
-
-@media screen and (min-width: 77.5em) {
- #infinite-handle span {
- font-size: 16px;
- font-size: 1.6rem;
- padding: 0.8125em 1.625em;
- }
-
- #infinite-footer .container {
- padding: 0 0.8421em;
- }
-
- #infinite-footer .blog-info,
- #infinite-footer .blog-credits {
- height: 32px;
- line-height: 32px;
- }
-
- #infinite-footer .blog-info a {
- font-size: 16px;
- font-size: 1.6rem;
- }
-
- #infinite-footer .blog-credits {
- font-size: 13px;
- font-size: 1.3rem;
- }
-}
diff --git a/plugins/jetpack/modules/infinite-scroll/themes/twentyfifteen.css b/plugins/jetpack/modules/infinite-scroll/themes/twentyfifteen.css
deleted file mode 100644
index 17ff0983..00000000
--- a/plugins/jetpack/modules/infinite-scroll/themes/twentyfifteen.css
+++ /dev/null
@@ -1,216 +0,0 @@
-/**
- * Infinite Scroll
- */
-
-.infinite-scroll .pagination,
-.infinite-scroll.neverending .site-footer {
- display: none;
-}
-
-.infinity-end.neverending .site-footer {
- display: block;
-}
-
-/* Spinner */
-.infinite-loader {
- clear: both;
- height: 24px;
- margin: 24px 0;
-}
-
-.infinite-loader .spinner {
- top: 50% !important;
- left: 50% !important;
-}
-
-/* Click-to-load */
-#infinite-handle {
- clear: both;
- margin: 7.6923%;
- text-align: center;
-}
-
-#infinite-handle span {
- background-color: #333;
- font-family: "Noto Sans", sans-serif;
- font-size: 12px;
- font-size: 1.2rem;
- font-weight: 700;
- letter-spacing: 0.04em;
- line-height: normal;
- padding: 0.7917em;
- text-transform: uppercase;
-}
-
-#infinite-handle span:hover,
-#infinite-handle span:focus {
- background-color: #707070;
- background-color: rgba(51, 51, 51, 0.7);
- color: #fff;
-}
-
-/* Footer */
-#infinite-footer {
- display: none;
- z-index: 999;
-}
-
-#infinite-footer .container {
- background-color: #fff;
- background-color: rgba(255, 255, 255, 0.5);
- border-color: #eaeaea;
- border-color: rgba(51, 51, 51, 0.1);
- padding: 0 0.8em;
- width: 100% !important;
-}
-
-#infinite-footer .blog-info {
- font-family: "Noto Sans", sans-serif;
-}
-
-#infinite-footer .blog-info,
-#infinite-footer .blog-credits {
- height: 24px;
- line-height: 24px;
-}
-
-#infinite-footer .blog-info a,
-#infinite-footer .blog-credits {
- font-size: 12px;
- font-size: 1.2rem;
-}
-
-#infinite-footer .blog-info a,
-#infinite-footer .blog-credits a:hover,
-#infinite-footer .blog-credits a:focus {
- color: #333;
-}
-
-#infinite-footer .blog-info a:hover,
-#infinite-footer .blog-info a:focus,
-#infinite-footer .blog-credits,
-#infinite-footer .blog-credits a {
- color: #707070;
- color: rgba(51, 51, 51, 0.7);
-}
-
-#infinite-footer .blog-info a:hover,
-#infinite-footer .blog-info a:focus,
-#infinite-footer .blog-credits a:hover,
-#infinite-footer .blog-credits a:focus {
- text-decoration: none;
-}
-
-@media screen and (min-width: 38.75em) {
- .infinite-loader {
- margin: 7.6923% 0;
- }
-
- .infinite-wrap {
- margin-top: 7.6923%;
- }
-
- #infinite-handle {
- margin-bottom: 0;
- }
-}
-
-@media screen and (min-width: 46.25em) {
- #infinite-handle span {
- display: block;
- font-size: 14px;
- font-size: 1.4rem;
- padding: 0.8214em
- }
-}
-
-@media screen and (min-width: 55em) {
- #infinite-handle span {
- font-size: 16px;
- font-size: 1.6rem;
- padding: 0.8125em;
- }
-}
-
-@media screen and (min-width: 59.6875em) {
- .infinite-loader {
- margin: 8.3333% 0;
- }
-
- .infinite-wrap {
- margin-top: 8.3333%;
- }
-
- #infinite-handle {
- margin: 8.3333% 8.3333% 0;
- }
-
- #infinite-handle span {
- display: inline-block;
- font-size: 12px;
- font-size: 1.2rem;
- padding: 0.7917em 1.5833em;
- }
-
- #infinite-footer {
- display: block;
- position: fixed;
- }
-}
-
-@media screen and (min-width: 68.75em) {
- #infinite-handle span {
- display: inline-block;
- font-size: 14px;
- font-size: 1.4rem;
- padding: 0.8214em 1.5714em;
- }
-
- #infinite-footer .container {
- padding: 0 0.8235em;
- }
-
- #infinite-footer .blog-info,
- #infinite-footer .blog-credits {
- height: 27px;
- line-height: 27px;
- }
-
- #infinite-footer .blog-info a {
- font-size: 14px;
- font-size: 1.4rem;
- }
-
- #infinite-footer .blog-credits {
- font-size: 12px;
- font-size: 1.2rem;
- }
-}
-
-@media screen and (min-width: 77.5em) {
- #infinite-handle span {
- font-size: 16px;
- font-size: 1.6rem;
- padding: 0.8125em 1.625em;
- }
-
- #infinite-footer .container {
- padding: 0 0.8421em;
- }
-
- #infinite-footer .blog-info,
- #infinite-footer .blog-credits {
- height: 32px;
- line-height: 32px;
- }
-
- #infinite-footer .blog-info a {
- font-size: 16px;
- font-size: 1.6rem;
- }
-
- #infinite-footer .blog-credits {
- font-size: 13px;
- font-size: 1.3rem;
- }
-}
diff --git a/plugins/jetpack/modules/infinite-scroll/themes/twentyfifteen.php b/plugins/jetpack/modules/infinite-scroll/themes/twentyfifteen.php
deleted file mode 100644
index d917dd56..00000000
--- a/plugins/jetpack/modules/infinite-scroll/themes/twentyfifteen.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * Infinite Scroll Theme Assets
- *
- * Register support for Twenty Fifteen.
- */
-
-/**
- * Add theme support for infinite scroll
- */
-function jetpack_twentyfifteen_infinite_scroll_init() {
- add_theme_support( 'infinite-scroll', array(
- 'container' => 'main',
- 'footer' => 'page',
- ) );
-}
-add_action( 'after_setup_theme', 'jetpack_twentyfifteen_infinite_scroll_init' );
-
-/**
- * Enqueue CSS stylesheet with theme styles for Infinite Scroll.
- */
-function jetpack_twentyfifteen_infinite_scroll_enqueue_styles() {
- if ( wp_script_is( 'the-neverending-homepage' ) ) {
- wp_enqueue_style( 'infinity-twentyfifteen', plugins_url( 'twentyfifteen.css', __FILE__ ), array( 'the-neverending-homepage' ), '20141022' );
- wp_style_add_data( 'infinity-twentyfifteen', 'rtl', 'replace' );
- }
-}
-add_action( 'wp_enqueue_scripts', 'jetpack_twentyfifteen_infinite_scroll_enqueue_styles', 25 );
diff --git a/plugins/jetpack/modules/infinite-scroll/themes/twentyfourteen.css b/plugins/jetpack/modules/infinite-scroll/themes/twentyfourteen.css
deleted file mode 100644
index 8fb5647e..00000000
--- a/plugins/jetpack/modules/infinite-scroll/themes/twentyfourteen.css
+++ /dev/null
@@ -1,111 +0,0 @@
-/* Spinner */
-
-.infinite-loader {
- height: 36px;
- padding: 24px 0;
-}
-
-.infinite-loader .spinner {
- margin: 0 auto;
- top: 18px !important;
- left: 0 !important;
-}
-
-.rtl .infinite-loader .spinner {
- right: 0 !important;
- left: auto !important;
-}
-
-/* Click-to-load */
-
-#infinite-handle {
- padding: 24px 0;
- text-align: center;
-}
-
-#infinite-handle span {
- background: #24890d;
- border-radius: 2px;
- display: inline-block;
- color: #fff;
- font-size: 12px;
- font-weight: 700;
- line-height: 1;
- padding: 12px 30px;
- text-transform: uppercase;
-}
-
-#infinite-handle span:hover {
- background-color: #41a62a;
-}
-
-#infinite-handle span:active {
- background-color: #55d737;
-}
-
-/* Footer */
-
-#infinite-footer {
- z-index: 2;
-}
-
-#infinite-footer .container {
- margin: 0;
- padding: 4px 20px;
-}
-
-#infinite-footer .blog-info a {
- color: #2b2b2b;
-}
-
-#infinite-footer .blog-credits,
-#infinite-footer .blog-credits a {
- color: #767676;
-}
-
-#infinite-footer .blog-info a:hover,
-#infinite-footer .blog-credits a:hover {
- color: #41a62a;
- text-decoration: none;
-}
-
-/* Elements to hide: post navigation, normal footer. */
-
-.infinite-scroll .paging-navigation,
-.infinite-scroll.neverending #colophon {
- display: none;
-}
-
-@media (max-width: 640px) {
- #infinite-footer {
- display: none;
- }
-}
-
-/* Hooks to infinity-end body class to restore footer. */
-
-.infinity-end.neverending #colophon {
- display: block;
-}
-
-/* Reset top margin adjustment for subsequent posts added by Infinite Scroll */
-.full-width .site-content .infinite-wrap .hentry.has-post-thumbnail:first-child {
- margin-top: 0;
-}
-
-@media screen and (min-width: 401px) {
- .infinite-loader,
- #infinite-handle {
- padding: 0 0 48px;
- }
-
- .list-view .site-content .infinite-wrap .hentry:first-of-type {
- border-top: 1px solid rgba(0, 0, 0, 0.1);
- padding-top: 48px;
- }
-
- .list-view .site-content .infinite-wrap .hentry.has-post-thumbnail {
- border-top: 0;
- padding-top: 0;
- }
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/infinite-scroll/themes/twentyfourteen.php b/plugins/jetpack/modules/infinite-scroll/themes/twentyfourteen.php
deleted file mode 100644
index 54a1fbc8..00000000
--- a/plugins/jetpack/modules/infinite-scroll/themes/twentyfourteen.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-/**
- * Infinite Scroll Theme Assets
- *
- * Register support for Twenty Fourteen.
- */
-
-/**
- * Add theme support for infinite scroll
- */
-function jetpack_twentyfourteen_infinite_scroll_init() {
- add_theme_support( 'infinite-scroll', array(
- 'container' => 'content',
- 'footer' => 'page',
- 'footer_widgets' => jetpack_twentyfourteen_has_footer_widgets(),
- ) );
-}
-add_action( 'after_setup_theme', 'jetpack_twentyfourteen_infinite_scroll_init' );
-
-/**
- * Switch to the "click to load" type IS with the following cases
- * 1. Viewed from iPad and the primary sidebar is active.
- * 2. Viewed from mobile and either the primary or the content sidebar is active.
- * 3. The footer widget is active.
- *
- * @return bool
- */
-function jetpack_twentyfourteen_has_footer_widgets() {
- if ( function_exists( 'jetpack_is_mobile' ) ) {
- if ( ( Jetpack_User_Agent_Info::is_ipad() && is_active_sidebar( 'sidebar-1' ) )
- || ( jetpack_is_mobile( '', true ) && ( is_active_sidebar( 'sidebar-1' ) || is_active_sidebar( 'sidebar-2' ) ) )
- || is_active_sidebar( 'sidebar-3' ) )
-
- return true;
- }
-
- return false;
-}
-
-/**
- * Enqueue CSS stylesheet with theme styles for Infinite Scroll.
- */
-function jetpack_twentyfourteen_infinite_scroll_enqueue_styles() {
- if ( wp_script_is( 'the-neverending-homepage' ) ) {
- wp_enqueue_style( 'infinity-twentyfourteen', plugins_url( 'twentyfourteen.css', __FILE__ ), array( 'the-neverending-homepage' ), '20131118' );
- }
-}
-add_action( 'wp_enqueue_scripts', 'jetpack_twentyfourteen_infinite_scroll_enqueue_styles', 25 );
diff --git a/plugins/jetpack/modules/infinite-scroll/themes/twentyseventeen-rtl.css b/plugins/jetpack/modules/infinite-scroll/themes/twentyseventeen-rtl.css
deleted file mode 100644
index 396dfc0d..00000000
--- a/plugins/jetpack/modules/infinite-scroll/themes/twentyseventeen-rtl.css
+++ /dev/null
@@ -1,168 +0,0 @@
-.infinite-scroll .pagination {
- display: none;
-}
-
-.infinite-wrap > article:before,
-.infinite-wrap > article:after {
- content: "";
- display: table;
-}
-
-.infinite-wrap > article:after {
- clear: both;
-}
-
-.infinite-wrap > article {
- padding-bottom: 2em;
-}
-
-/* Spinner */
-.site-main .infinite-loader {
- clear: both;
- color: currentColor;
- height: 42px;
- margin-bottom: 3.5em;
-}
-
-.blog:not(.has-sidebar) .infinite-loader {
- width: 100%;
-}
-
-.site-main .infinite-loader .spinner {
- right: 50%!important;
-}
-
-/* Click-to-load */
-#infinite-handle {
- clear: both;
- margin: 0 7.6923% 2em;
- text-align: center;
-}
-
-/* Style "Load More" button */
-.site-main #infinite-handle span {
- background: #1a1a1a;
- border-radius: 2px;
- color: #fff;
- font-family: "Libre Franklin", "Helvetica Neue", helvetica, arial, sans-serif;
- font-size: inherit;
- font-weight: 700;
- letter-spacing: 0.046875em;
- line-height: 1;
- padding: 0.84375em 0.875em 0.78125em;
- text-transform: uppercase;
-}
-
-#infinite-handle span:hover,
-#infinite-handle span:focus {
- background: #767676;
-}
-
-/* Style "Load More" button when dark color scheme is used */
-.colors-dark .site-main #infinite-handle span {
- background: #f8f8f8;
- border-radius: 2px;
- color: #222;
- font-family: "Libre Franklin", "Helvetica Neue", helvetica, arial, sans-serif;
- font-size: inherit;
- font-weight: 700;
- letter-spacing: 0.046875em;
- line-height: 1;
- padding: 0.84375em 0.875em 0.78125em;
- text-transform: uppercase;
-}
-
-.colors-dark #infinite-handle span:hover,
-.colors-dark #infinite-handle span:focus {
- background: #bbb;
- columns: #222;
-}
-
-/* Style Infinite Footer */
-#infinite-footer {
- position: fixed !important;
-}
-
-#infinite-footer .container {
- background-color: #fff;
- border-color: #d1d1d1;
- padding: 0 7.6923%;
-}
-
-#infinite-footer .blog-info,
-#infinite-footer .blog-credits {
- font-family: "Libre Franklin", "Helvetica Neue", helvetica, arial, sans-serif;
- text-align: center;
- width: auto;
-}
-
-#infinite-footer .blog-info a,
-#infinite-footer .blog-credits,
-#infinite-footer .blog-credits a {
- color: #222222;
-}
-
-#infinite-footer .blog-info a:hover,
-#infinite-footer .blog-info a:focus,
-#infinite-footer .blog-credits a:hover,
-#infinite-footer .blog-credits a:focus {
- color: #767676;
- text-decoration: none;
-}
-
-.infinite-scroll #navigation,
-.infinite-scroll.neverending .jetpack-mobile-link,
-.infinite-scroll.neverending .site-footer {
- display: none;
-}
-
-/* Shows the footer & mobile link again in case all posts have been loaded */
-.infinity-end.neverending .jetpack-mobile-link,
-.infinity-end.neverending .site-footer {
- display: block;
-}
-
-@media screen and (min-width: 44.375em) {
- #infinite-handle {
- margin: 0 0 1em 0;
- text-align: center;
- }
-
- .has-sidebar #infinite-handle {
- text-align: right;
- }
-
- .site-main #infinite-handle span {
- display: inline-block;
- }
-}
-
-@media screen and (min-width: 48em) {
- .infinite-wrap > article {
- padding-bottom: 4em;
- }
-}
-
-@media screen and (min-width: 48em) {
- #infinite-footer .blog-info,
- #infinite-footer .blog-credits {
- line-height: 35px;
- }
-
- #infinite-footer .blog-info {
- font-size: 1.1rem;
- }
-
- #infinite-footer .blog-credits {
- font-size: 0.9rem;
- }
-
- .blog:not(.has-sidebar) .infinite-loader {
- float: left;
- width: 58%;
- }
-
- .site-main .infinite-loader .spinner {
- margin-right: -17px;
- }
-}
diff --git a/plugins/jetpack/modules/infinite-scroll/themes/twentyseventeen.css b/plugins/jetpack/modules/infinite-scroll/themes/twentyseventeen.css
deleted file mode 100644
index 243cfb70..00000000
--- a/plugins/jetpack/modules/infinite-scroll/themes/twentyseventeen.css
+++ /dev/null
@@ -1,168 +0,0 @@
-.infinite-scroll .pagination {
- display: none;
-}
-
-.infinite-wrap > article:before,
-.infinite-wrap > article:after {
- content: "";
- display: table;
-}
-
-.infinite-wrap > article:after {
- clear: both;
-}
-
-.infinite-wrap > article {
- padding-bottom: 2em;
-}
-
-/* Spinner */
-.site-main .infinite-loader {
- clear: both;
- color: currentColor;
- height: 42px;
- margin-bottom: 3.5em;
-}
-
-.blog:not(.has-sidebar) .infinite-loader {
- width: 100%;
-}
-
-.site-main .infinite-loader .spinner {
- left: 50%!important;
-}
-
-/* Click-to-load */
-#infinite-handle {
- clear: both;
- margin: 0 7.6923% 2em;
- text-align: center;
-}
-
-/* Style "Load More" button */
-.site-main #infinite-handle span {
- background: #1a1a1a;
- border-radius: 2px;
- color: #fff;
- font-family: "Libre Franklin", "Helvetica Neue", helvetica, arial, sans-serif;
- font-size: inherit;
- font-weight: 700;
- letter-spacing: 0.046875em;
- line-height: 1;
- padding: 0.84375em 0.875em 0.78125em;
- text-transform: uppercase;
-}
-
-#infinite-handle span:hover,
-#infinite-handle span:focus {
- background: #767676;
-}
-
-/* Style "Load More" button when dark color scheme is used */
-.colors-dark .site-main #infinite-handle span {
- background: #f8f8f8;
- border-radius: 2px;
- color: #222;
- font-family: "Libre Franklin", "Helvetica Neue", helvetica, arial, sans-serif;
- font-size: inherit;
- font-weight: 700;
- letter-spacing: 0.046875em;
- line-height: 1;
- padding: 0.84375em 0.875em 0.78125em;
- text-transform: uppercase;
-}
-
-.colors-dark #infinite-handle span:hover,
-.colors-dark #infinite-handle span:focus {
- background: #bbb;
- columns: #222;
-}
-
-/* Style Infinite Footer */
-#infinite-footer {
- position: fixed !important;
-}
-
-#infinite-footer .container {
- background-color: #fff;
- border-color: #d1d1d1;
- padding: 0 7.6923%;
-}
-
-#infinite-footer .blog-info,
-#infinite-footer .blog-credits {
- font-family: "Libre Franklin", "Helvetica Neue", helvetica, arial, sans-serif;
- text-align: center;
- width: auto;
-}
-
-#infinite-footer .blog-info a,
-#infinite-footer .blog-credits,
-#infinite-footer .blog-credits a {
- color: #222222;
-}
-
-#infinite-footer .blog-info a:hover,
-#infinite-footer .blog-info a:focus,
-#infinite-footer .blog-credits a:hover,
-#infinite-footer .blog-credits a:focus {
- color: #767676;
- text-decoration: none;
-}
-
-.infinite-scroll #navigation,
-.infinite-scroll.neverending .jetpack-mobile-link,
-.infinite-scroll.neverending .site-footer {
- display: none;
-}
-
-/* Shows the footer & mobile link again in case all posts have been loaded */
-.infinity-end.neverending .jetpack-mobile-link,
-.infinity-end.neverending .site-footer {
- display: block;
-}
-
-@media screen and (min-width: 44.375em) {
- #infinite-handle {
- margin: 0 0 1em 0;
- text-align: center;
- }
-
- .has-sidebar #infinite-handle {
- text-align: left;
- }
-
- .site-main #infinite-handle span {
- display: inline-block;
- }
-}
-
-@media screen and (min-width: 48em) {
- .infinite-wrap > article {
- padding-bottom: 4em;
- }
-}
-
-@media screen and (min-width: 48em) {
- #infinite-footer .blog-info,
- #infinite-footer .blog-credits {
- line-height: 35px;
- }
-
- #infinite-footer .blog-info {
- font-size: 1.1rem;
- }
-
- #infinite-footer .blog-credits {
- font-size: 0.9rem;
- }
-
- .blog:not(.has-sidebar) .infinite-loader {
- float: right;
- width: 58%;
- }
-
- .site-main .infinite-loader .spinner {
- margin-left: -17px;
- }
-}
diff --git a/plugins/jetpack/modules/infinite-scroll/themes/twentyseventeen.php b/plugins/jetpack/modules/infinite-scroll/themes/twentyseventeen.php
deleted file mode 100644
index ca4c64c7..00000000
--- a/plugins/jetpack/modules/infinite-scroll/themes/twentyseventeen.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-/**
- * Infinite Scroll Theme Assets
- *
- * Register support for Twenty Seventeen.
- */
-
-/**
- * Add theme support for infinite scroll
- */
-function jetpack_twentyseventeen_infinite_scroll_init() {
- add_theme_support( 'infinite-scroll', array(
- 'container' => 'main',
- 'render' => 'jetpack_twentyseventeen_infinite_scroll_render',
- 'footer' => 'content',
- 'footer_widgets' => jetpack_twentyseventeen_has_footer_widgets(),
- ) );
-}
-add_action( 'init', 'jetpack_twentyseventeen_infinite_scroll_init' );
-
-/**
- * Custom render function for Infinite Scroll.
- */
-function jetpack_twentyseventeen_infinite_scroll_render() {
- while ( have_posts() ) {
- the_post();
- if ( is_search() ) {
- get_template_part( 'template-parts/post/content', 'search' );
- } else {
- get_template_part( 'template-parts/post/content', get_post_format() );
- }
- }
-}
-
-/**
- * Custom function to check for the presence of footer widgets or the social links menu
- */
-function jetpack_twentyseventeen_has_footer_widgets() {
- if ( is_active_sidebar( 'sidebar-2' ) ||
- is_active_sidebar( 'sidebar-3' ) ||
- has_nav_menu( 'social' ) ) {
-
- return true;
- }
-
- return false;
-}
-
-/**
- * Enqueue CSS stylesheet with theme styles for Infinite Scroll.
- */
-function jetpack_twentyseventeen_infinite_scroll_enqueue_styles() {
- if ( wp_script_is( 'the-neverending-homepage' ) ) {
- wp_enqueue_style( 'infinity-twentyseventeen', plugins_url( 'twentyseventeen.css', __FILE__ ), array( 'the-neverending-homepage' ), '20161219' );
- wp_style_add_data( 'infinity-twentyseventeen', 'rtl', 'replace' );
- }
-}
-add_action( 'wp_enqueue_scripts', 'jetpack_twentyseventeen_infinite_scroll_enqueue_styles', 25 );
diff --git a/plugins/jetpack/modules/infinite-scroll/themes/twentysixteen-rtl.css b/plugins/jetpack/modules/infinite-scroll/themes/twentysixteen-rtl.css
deleted file mode 100644
index 0b650cee..00000000
--- a/plugins/jetpack/modules/infinite-scroll/themes/twentysixteen-rtl.css
+++ /dev/null
@@ -1,161 +0,0 @@
-.infinite-scroll .pagination {
- display: none;
-}
-
-.infinite-wrap > article:before,
-.infinite-wrap > article:after {
- content: "";
- display: table;
-}
-
-.infinite-wrap > article:after {
- clear: both;
-}
-
-.infinite-wrap > article {
- margin-bottom: 3.5em;
-}
-
-/* Spinner */
-.site-main .infinite-loader {
- clear: both;
- color: currentColor;
- height: 42px;
- margin-bottom: 3.5em;
-}
-
-.infinite-loader .spinner {
- right: 50% !important;
- top: 50% !important;
-}
-
-/* Click-to-load */
-#infinite-handle {
- clear: both;
- margin-right: 7.6923%;
- margin-left: 7.6923%;
- text-align: center;
-}
-
-.site-main #infinite-handle span {
- background: #1a1a1a;
- border-radius: 2px;
- color: #fff;
- font-family: Montserrat, "Helvetica Neue", sans-serif;
- font-size: inherit;
- font-weight: 700;
- letter-spacing: 0.046875em;
- line-height: 1;
- padding: 0.84375em 0.875em 0.78125em;
- text-transform: uppercase;
-}
-
-#infinite-handle span:hover,
-#infinite-handle span:focus {
- background: #007acc;
-}
-
-#infinite-handle button:focus {
- outline-offset: 0.375em;
-}
-
-/* Footer */
-body #infinite-footer {
- display: none;
- z-index: 999;
-}
-
-body #infinite-footer .container {
- background-color: #fff;
- background-color: rgba(255, 255, 255, 0.8);
- border-color: #d1d1d1;
- padding: 0 7.6923%;
- width: 100% !important;
-}
-
-body #infinite-footer .blog-info {
- font-family: Montserrat, "Helvetica Neue", sans-serif;
- height: 2.1875em;
- line-height: 2.1875em;
-}
-
-body #infinite-footer .blog-info a {
- color: #1a1a1a;
- font-size: inherit
-}
-
-body #infinite-footer .blog-credits {
- font-size: 13px;
- font-size: 0.8125rem;
- height: 2.692307692em;
- line-height: 2.692307692em;
-}
-
-body #infinite-footer .blog-credits,
-body #infinite-footer .blog-credits a {
- color: #686868;
-}
-
-body #infinite-footer .blog-info a:hover,
-body #infinite-footer .blog-info a:focus,
-body #infinite-footer .blog-credits a:hover,
-body #infinite-footer .blog-credits a:focus {
- color: #007acc;
- text-decoration: none;
-}
-
-@media screen and (min-width: 44.375em) {
- .infinite-wrap > article,
- .site-main .infinite-loader {
- margin-bottom: 5.25em;
- }
-
- .infinite-loader .spinner {
- right: 7.6923% !important;
- margin-right: 12px;
- }
-
- #infinite-handle {
- text-align: right;
- }
-
- .site-main #infinite-handle span {
- display: inline-block;
- }
-
- body #infinite-footer .container {
- padding: 0 0.761904762em;
- width: -webkit-calc(100% - 42px) !important;
- width: calc(100% - 42px) !important;
- }
-
- body:not(.custom-background-image) #infinite-footer {
- bottom: 21px !important;
- }
-}
-
-@media screen and (min-width: 56.875em) {
- .infinite-loader .spinner {
- right: 0 !important;
- }
-
- #infinite-handle {
- margin: 0;
- }
-
- .no-sidebar .infinite-loader .spinner {
- right: 50% !important;
- margin: 0;
- }
-
- .no-sidebar #infinite-handle {
- text-align: center;
- }
-}
-
-@media screen and (min-width: 61.5625em) {
- .infinite-wrap > article,
- .site-main .infinite-loader {
- margin-bottom: 7.0em;
- }
-}
diff --git a/plugins/jetpack/modules/infinite-scroll/themes/twentysixteen.css b/plugins/jetpack/modules/infinite-scroll/themes/twentysixteen.css
deleted file mode 100644
index 3d2cd8f2..00000000
--- a/plugins/jetpack/modules/infinite-scroll/themes/twentysixteen.css
+++ /dev/null
@@ -1,161 +0,0 @@
-.infinite-scroll .pagination {
- display: none;
-}
-
-.infinite-wrap > article:before,
-.infinite-wrap > article:after {
- content: "";
- display: table;
-}
-
-.infinite-wrap > article:after {
- clear: both;
-}
-
-.infinite-wrap > article {
- margin-bottom: 3.5em;
-}
-
-/* Spinner */
-.site-main .infinite-loader {
- clear: both;
- color: currentColor;
- height: 42px;
- margin-bottom: 3.5em;
-}
-
-.infinite-loader .spinner {
- left: 50% !important;
- top: 50% !important;
-}
-
-/* Click-to-load */
-#infinite-handle {
- clear: both;
- margin-right: 7.6923%;
- margin-left: 7.6923%;
- text-align: center;
-}
-
-.site-main #infinite-handle span {
- background: #1a1a1a;
- border-radius: 2px;
- color: #fff;
- font-family: Montserrat, "Helvetica Neue", sans-serif;
- font-size: inherit;
- font-weight: 700;
- letter-spacing: 0.046875em;
- line-height: 1;
- padding: 0.84375em 0.875em 0.78125em;
- text-transform: uppercase;
-}
-
-#infinite-handle span:hover,
-#infinite-handle span:focus {
- background: #007acc;
-}
-
-#infinite-handle button:focus {
- outline-offset: 0.375em;
-}
-
-/* Footer */
-body #infinite-footer {
- display: none;
- z-index: 999;
-}
-
-body #infinite-footer .container {
- background-color: #fff;
- background-color: rgba(255, 255, 255, 0.8);
- border-color: #d1d1d1;
- padding: 0 7.6923%;
- width: 100% !important;
-}
-
-body #infinite-footer .blog-info {
- font-family: Montserrat, "Helvetica Neue", sans-serif;
- height: 2.1875em;
- line-height: 2.1875em;
-}
-
-body #infinite-footer .blog-info a {
- color: #1a1a1a;
- font-size: inherit
-}
-
-body #infinite-footer .blog-credits {
- font-size: 13px;
- font-size: 0.8125rem;
- height: 2.692307692em;
- line-height: 2.692307692em;
-}
-
-body #infinite-footer .blog-credits,
-body #infinite-footer .blog-credits a {
- color: #686868;
-}
-
-body #infinite-footer .blog-info a:hover,
-body #infinite-footer .blog-info a:focus,
-body #infinite-footer .blog-credits a:hover,
-body #infinite-footer .blog-credits a:focus {
- color: #007acc;
- text-decoration: none;
-}
-
-@media screen and (min-width: 44.375em) {
- .infinite-wrap > article,
- .site-main .infinite-loader {
- margin-bottom: 5.25em;
- }
-
- .infinite-loader .spinner {
- left: 7.6923% !important;
- margin-left: 12px;
- }
-
- #infinite-handle {
- text-align: left;
- }
-
- .site-main #infinite-handle span {
- display: inline-block;
- }
-
- body #infinite-footer .container {
- padding: 0 0.761904762em;
- width: -webkit-calc(100% - 42px) !important;
- width: calc(100% - 42px) !important;
- }
-
- body:not(.custom-background-image) #infinite-footer {
- bottom: 21px !important;
- }
-}
-
-@media screen and (min-width: 56.875em) {
- .infinite-loader .spinner {
- left: 0 !important;
- }
-
- #infinite-handle {
- margin: 0;
- }
-
- .no-sidebar .infinite-loader .spinner {
- left: 50% !important;
- margin: 0;
- }
-
- .no-sidebar #infinite-handle {
- text-align: center;
- }
-}
-
-@media screen and (min-width: 61.5625em) {
- .infinite-wrap > article,
- .site-main .infinite-loader {
- margin-bottom: 7.0em;
- }
-}
diff --git a/plugins/jetpack/modules/infinite-scroll/themes/twentysixteen.php b/plugins/jetpack/modules/infinite-scroll/themes/twentysixteen.php
deleted file mode 100644
index df0c14e9..00000000
--- a/plugins/jetpack/modules/infinite-scroll/themes/twentysixteen.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-/**
- * Infinite Scroll Theme Assets
- *
- * Register support for Twenty Sixteen.
- */
-
-/**
- * Add theme support for infinite scroll
- */
-function jetpack_twentysixteen_infinite_scroll_init() {
- add_theme_support( 'infinite-scroll', array(
- 'container' => 'main',
- 'render' => 'jetpack_twentysixteen_infinite_scroll_render',
- 'footer' => 'content',
- ) );
-}
-add_action( 'after_setup_theme', 'jetpack_twentysixteen_infinite_scroll_init' );
-
-/**
- * Custom render function for Infinite Scroll.
- */
-function jetpack_twentysixteen_infinite_scroll_render() {
- while ( have_posts() ) {
- the_post();
- if ( is_search() ) {
- get_template_part( 'template-parts/content', 'search' );
- } else {
- get_template_part( 'template-parts/content', get_post_format() );
- }
- }
-}
-
-/**
- * Enqueue CSS stylesheet with theme styles for Infinite Scroll.
- */
-function jetpack_twentysixteen_infinite_scroll_enqueue_styles() {
- if ( wp_script_is( 'the-neverending-homepage' ) ) {
- wp_enqueue_style( 'infinity-twentysixteen', plugins_url( 'twentysixteen.css', __FILE__ ), array( 'the-neverending-homepage' ), '20151102' );
- wp_style_add_data( 'infinity-twentysixteen', 'rtl', 'replace' );
- }
-}
-add_action( 'wp_enqueue_scripts', 'jetpack_twentysixteen_infinite_scroll_enqueue_styles', 25 );
diff --git a/plugins/jetpack/modules/infinite-scroll/themes/twentyten.css b/plugins/jetpack/modules/infinite-scroll/themes/twentyten.css
deleted file mode 100644
index 889abb3f..00000000
--- a/plugins/jetpack/modules/infinite-scroll/themes/twentyten.css
+++ /dev/null
@@ -1,25 +0,0 @@
-/* =Infinity Styles
--------------------------------------------------------------- */
-.infinite-scroll #wrapper {
- margin-bottom: 40px;
-}
-.infinite-scroll #content {
- margin-bottom: 50px;
-}
-.infinite-scroll #content .infinite-wrap {
- padding-top: 0;
- border-top: 0;
-}
-/* Elements to hide */
-.infinite-scroll #nav-above,
-.infinite-scroll #nav-below,
-.infinite-scroll.neverending #footer {
- display: none;
-}
-/* Restore the footer when IS is finished */
-.infinity-end.neverending #footer {
- display: block;
-}
-#infinite-footer .blog-info a {
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/infinite-scroll/themes/twentyten.php b/plugins/jetpack/modules/infinite-scroll/themes/twentyten.php
deleted file mode 100644
index b6128707..00000000
--- a/plugins/jetpack/modules/infinite-scroll/themes/twentyten.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-/**
- * Infinite Scroll Theme Assets
- *
- * Register support for @Twenty Ten and enqueue relevant styles.
- */
-
-/**
- * Add theme support for infinity scroll
- */
-function jetpack_twentyten_infinite_scroll_init() {
- add_theme_support( 'infinite-scroll', array(
- 'container' => 'content',
- 'render' => 'jetpack_twentyten_infinite_scroll_render',
- 'footer' => 'wrapper',
- 'footer_widgets' => jetpack_twentyten_has_footer_widgets(),
- ) );
-}
-add_action( 'init', 'jetpack_twentyten_infinite_scroll_init' );
-
-/**
- * Set the code to be rendered on for calling posts,
- * hooked to template parts when possible.
- *
- * Note: must define a loop.
- */
-function jetpack_twentyten_infinite_scroll_render() {
- get_template_part( 'loop' );
-}
-
-/**
- * Enqueue CSS stylesheet with theme styles for infinity.
- */
-function jetpack_twentyten_infinite_scroll_enqueue_styles() {
- if ( wp_script_is( 'the-neverending-homepage' ) ) {
- // Add theme specific styles.
- wp_enqueue_style( 'infinity-twentyten', plugins_url( 'twentyten.css', __FILE__ ), array( 'the-neverending-homepage' ), '20121002' );
- }
-}
-add_action( 'wp_enqueue_scripts', 'jetpack_twentyten_infinite_scroll_enqueue_styles', 25 );
-
-/**
- * Do we have footer widgets?
- */
-function jetpack_twentyten_has_footer_widgets() {
- if ( is_active_sidebar( 'first-footer-widget-area' ) ||
- is_active_sidebar( 'second-footer-widget-area' ) ||
- is_active_sidebar( 'third-footer-widget-area' ) ||
- is_active_sidebar( 'fourth-footer-widget-area' ) ) {
-
- return true;
- }
-
- return false;
-}
diff --git a/plugins/jetpack/modules/infinite-scroll/themes/twentythirteen.css b/plugins/jetpack/modules/infinite-scroll/themes/twentythirteen.css
deleted file mode 100644
index ba169b35..00000000
--- a/plugins/jetpack/modules/infinite-scroll/themes/twentythirteen.css
+++ /dev/null
@@ -1,90 +0,0 @@
-/* =Infinite Scroll
--------------------------------------------------------------- */
-
-.infinite-wrap {
- border-top: 0;
-}
-
-/* Spinner */
-.infinite-loader {
- background-color: #e8e5ce;
- padding: 40px 0;
-}
-.infinite-loader .spinner {
- margin: 0 auto;
- width: 34px;
- height: 34px;
-}
-.sidebar .infinite-loader .spinner {
- padding-right: 376px;
-}
-.rtl.sidebar .infinite-loader .spinner {
- padding-left: 376px;
- padding-right: 0;
-}
-
-/* Click-to-load */
-#infinite-handle {
- background-color: #e8e5ce;
- padding: 40px 0;
- text-align: center;
-}
-.sidebar #infinite-handle {
- padding-right: 376px;
-}
-.rtl.sidebar #infinite-handle {
- padding-left: 376px;
- padding-right: 0;
-}
-#infinite-handle span {
- background: #e05d22; /* Old browsers */
- background: -webkit-linear-gradient(top, #e05d22 0%, #d94412 100%); /* Chrome 10+, Safari 5.1+ */
- background: linear-gradient(to bottom, #e05d22 0%, #d94412 100%); /* W3C */
- border: none;
- border-bottom: 3px solid #b93207;
- border-radius: 2px;
- display: inline-block;
- color: #fff;
- font-size: 100%;
- padding: 11px 24px 10px;
- text-decoration: none;
-}
-#infinite-handle span:hover {
- background: #ed6a31; /* Old browsers */
- background: -webkit-linear-gradient(top, #ed6a31 0%, #e55627 100%); /* Chrome 10+, Safari 5.1+ */
- background: linear-gradient(to bottom, #ed6a31 0%, #e55627 100%); /* W3C */
- outline: none;
-}
-#infinite-handle span:active {
- background: #d94412; /* Old browsers */
- background: -webkit-linear-gradient(top, #d94412 0%, #e05d22 100%); /* Chrome 10+, Safari 5.1+ */
- background: linear-gradient(to bottom, #d94412 0%, #e05d22 100%); /* W3C */
- border: none;
- border-top: 3px solid #b93207;
- padding: 10px 24px 11px;
-}
-
-/* Elements to hide: post navigation, normal footer. */
-.infinite-scroll .paging-navigation,
-.infinite-scroll.neverending #colophon {
- display: none;
-}
-
-/* Hooks to infinity-end body class to restore footer. */
-.infinity-end.neverending #colophon {
- display: block;
-}
-
-/* For small viewports. */
-@media (max-width: 999px) {
- .sidebar .infinite-loader .spinner,
- .rtl.sidebar .infinite-loader .spinner {
- padding-right: 0;
- padding-left: 0;
- }
- .infinite-scroll #infinite-handle,
- .rtl.sidebar #infinite-handle {
- padding-right: 0;
- padding-left: 0;
- }
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/infinite-scroll/themes/twentythirteen.php b/plugins/jetpack/modules/infinite-scroll/themes/twentythirteen.php
deleted file mode 100644
index 803b31bb..00000000
--- a/plugins/jetpack/modules/infinite-scroll/themes/twentythirteen.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * Infinite Scroll Theme Assets
- *
- * Register support for Twenty Thirteen.
- */
-
-/**
- * Add theme support for infinite scroll
- */
-function jetpack_twentythirteen_infinite_scroll_init() {
- add_theme_support( 'infinite-scroll', array(
- 'container' => 'content',
- 'footer' => 'page',
- 'footer_widgets' => array( 'sidebar-1' ),
- ) );
-}
-add_action( 'after_setup_theme', 'jetpack_twentythirteen_infinite_scroll_init' );
-
-/**
- * Enqueue CSS stylesheet with theme styles for Infinite Scroll.
- */
-function jetpack_twentythirteen_infinite_scroll_enqueue_styles() {
- if ( wp_script_is( 'the-neverending-homepage' ) ) {
- wp_enqueue_style( 'infinity-twentythirteen', plugins_url( 'twentythirteen.css', __FILE__ ), array( 'the-neverending-homepage' ), '20130409' );
- }
-}
-add_action( 'wp_enqueue_scripts', 'jetpack_twentythirteen_infinite_scroll_enqueue_styles', 25 );
diff --git a/plugins/jetpack/modules/infinite-scroll/themes/twentytwelve.css b/plugins/jetpack/modules/infinite-scroll/themes/twentytwelve.css
deleted file mode 100644
index 032c2c9a..00000000
--- a/plugins/jetpack/modules/infinite-scroll/themes/twentytwelve.css
+++ /dev/null
@@ -1,33 +0,0 @@
-/* =Infinity Styles
--------------------------------------------------------------- */
-.infinite-scroll .site-content:after {
- clear: both;
- content: '';
- display: block;
-}
-.infinite-wrap {
- border-top: 0;
-}
-.infinite-scroll.neverending .site-content {
- margin-bottom: 48px;
- margin-bottom: 3.428571429rem;
-}
-
-/* Elements to hide: post navigation, regular footer */
-.infinite-scroll #nav-below,
-.infinite-scroll.neverending #colophon {
- display: none;
-}
-
-/* Hooks to infinity-end body class to restore footer */
-.infinity-end.neverending #colophon {
- display: block;
-}
-
-/* For responsive CSS */
-@media (max-width: 599px) {
- .infinite-scroll #infinite-handle {
- padding-bottom: 48px;
- padding-bottom: 3.428571429rem;
- }
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/infinite-scroll/themes/twentytwelve.php b/plugins/jetpack/modules/infinite-scroll/themes/twentytwelve.php
deleted file mode 100644
index b8b17b3f..00000000
--- a/plugins/jetpack/modules/infinite-scroll/themes/twentytwelve.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-/**
- * Infinite Scroll Theme Assets
- *
- * Register support for Twenty Twelve and enqueue relevant styles.
- */
-
-/**
- * Add theme support for infinite scroll
- */
-function jetpack_twentytwelve_infinite_scroll_init() {
- add_theme_support( 'infinite-scroll', array(
- 'container' => 'content',
- 'footer' => 'page',
- 'footer_widgets' => jetpack_twentytwelve_has_footer_widgets(),
- ) );
-}
-add_action( 'after_setup_theme', 'jetpack_twentytwelve_infinite_scroll_init' );
-
-/**
- * Enqueue CSS stylesheet with theme styles for infinity.
- */
-function jetpack_twentytwelve_infinite_scroll_enqueue_styles() {
- if ( wp_script_is( 'the-neverending-homepage' ) ) {
- // Add theme specific styles.
- wp_enqueue_style( 'infinity-twentytwelve', plugins_url( 'twentytwelve.css', __FILE__ ), array( 'the-neverending-homepage' ), '20120817' );
- }
-}
-add_action( 'wp_enqueue_scripts', 'jetpack_twentytwelve_infinite_scroll_enqueue_styles', 25 );
-
-/**
- * Do we have footer widgets?
- */
-function jetpack_twentytwelve_has_footer_widgets() {
- if ( function_exists( 'jetpack_is_mobile' ) && jetpack_is_mobile() ) {
- if ( is_front_page() && ( is_active_sidebar( 'sidebar-2' ) || is_active_sidebar( 'sidebar-3' ) ) )
- return true;
- elseif ( is_active_sidebar( 'sidebar-1' ) )
- return true;
- }
-
- return false;
-}
diff --git a/plugins/jetpack/modules/json-api.php b/plugins/jetpack/modules/json-api.php
deleted file mode 100644
index b30f38a9..00000000
--- a/plugins/jetpack/modules/json-api.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-/**
- * Module Name: JSON API
- * Module Description: Allow applications to securely access your content.
- * Sort Order: 19
- * First Introduced: 1.9
- * Requires Connection: Yes
- * Auto Activate: Public
- * Module Tags: Writing, Developers
- * Feature: General
- * Additional Search Queries: api, rest, develop, developers, json, klout, oauth
- */
diff --git a/plugins/jetpack/modules/latex.php b/plugins/jetpack/modules/latex.php
deleted file mode 100644
index f3c3802c..00000000
--- a/plugins/jetpack/modules/latex.php
+++ /dev/null
@@ -1,122 +0,0 @@
-<?php
-/**
- * Module Name: Beautiful Math
- * Module Description: Use LaTeX markup for complex equations and other geekery.
- * Sort Order: 12
- * First Introduced: 1.1
- * Requires Connection: No
- * Auto Activate: Yes
- * Module Tags: Writing
- * Feature: Writing
- * Additional Search Queries: latex, math, equation, equations, formula, code
- */
-
-/**
- * LaTeX support.
- *
- * Backward compatibility requires support for both "[latex][/latex]", and
- * "$latex $" shortcodes.
- *
- * $latex e^{\i \pi} + 1 = 0$ -> [latex]e^{\i \pi} + 1 = 0[/latex]
- * $latex [a, b]$ -> [latex][a, b][/latex]
- */
-
-function latex_markup( $content ) {
- $textarr = wp_html_split( $content );
-
- $regex = '%
- \$latex(?:=\s*|\s+)
- ((?:
- [^$]+ # Not a dollar
- |
- (?<=(?<!\\\\)\\\\)\$ # Dollar preceded by exactly one slash
- )+)
- (?<!\\\\)\$ # Dollar preceded by zero slashes
- %ix';
-
- foreach ( $textarr as &$element ) {
- if ( '' == $element || '<' === $element[0] ) {
- continue;
- }
-
- if ( false === stripos( $element, '$latex' ) ) {
- continue;
- }
-
- $element = preg_replace_callback( $regex, 'latex_src', $element );
- }
-
- return implode( '', $textarr );
-}
-
-function latex_src( $matches ) {
- $latex = $matches[1];
-
- $bg = latex_get_default_color( 'bg' );
- $fg = latex_get_default_color( 'text', '000' );
- $s = 0;
-
-
- $latex = latex_entity_decode( $latex );
- if ( preg_match( '/.+(&fg=[0-9a-f]{6}).*/i', $latex, $fg_matches ) ) {
- $fg = substr( $fg_matches[1], 4 );
- $latex = str_replace( $fg_matches[1], '', $latex );
- }
- if ( preg_match( '/.+(&bg=[0-9a-f]{6}).*/i', $latex, $bg_matches ) ) {
- $bg = substr( $bg_matches[1], 4 );
- $latex = str_replace( $bg_matches[1], '', $latex );
- }
- if ( preg_match( '/.+(&s=[0-9-]{1,2}).*/i', $latex, $s_matches ) ) {
- $s = (int) substr( $s_matches[1], 3 );
- $latex = str_replace( $s_matches[1], '', $latex );
- }
-
- return latex_render( $latex, $fg, $bg, $s );
-}
-
-function latex_get_default_color( $color, $default_color = 'ffffff' ) {
- global $themecolors;
- return isset($themecolors[$color]) ? $themecolors[$color] : $default_color;
-}
-
-function latex_entity_decode( $latex ) {
- return str_replace( array( '&lt;', '&gt;', '&quot;', '&#039;', '&#038;', '&amp;', "\n", "\r" ), array( '<', '>', '"', "'", '&', '&', ' ', ' ' ), $latex );
-}
-
-function latex_render( $latex, $fg, $bg, $s = 0 ) {
- $url = "//s0.wp.com/latex.php?latex=" . urlencode( $latex ) . "&bg=" . $bg . "&fg=" . $fg . "&s=" . $s;
- $url = esc_url( $url );
- $alt = str_replace( '\\', '&#92;', esc_attr( $latex ) );
-
- return '<img src="' . $url . '" alt="' . $alt . '" title="' . $alt . '" class="latex" />';
-}
-
-/**
- * The shortcode way. The attributes are the same as the old ones - 'fg' and 'bg', instead of foreground
- * and background, and 's' is for the font size.
- *
- * Example: [latex s=4 bg=00f fg=ff0]\LaTeX[/latex]
- */
-function latex_shortcode( $atts, $content = '' ) {
- extract( shortcode_atts( array(
- 's' => 0,
- 'bg' => latex_get_default_color( 'bg' ),
- 'fg' => latex_get_default_color( 'text', '000' )
- ), $atts, 'latex' ) );
-
- return latex_render( latex_entity_decode( $content ), $fg, $bg, $s );
-}
-
-/**
- * LaTeX needs to be untexturized
- */
-function latex_no_texturize( $shortcodes ) {
- $shortcodes[] = 'latex';
- return $shortcodes;
-}
-
-add_filter( 'no_texturize_shortcodes', 'latex_no_texturize' );
-
-add_filter( 'the_content', 'latex_markup', 9 ); // before wptexturize
-add_filter( 'comment_text', 'latex_markup', 9 ); // before wptexturize
-add_shortcode( 'latex', 'latex_shortcode' );
diff --git a/plugins/jetpack/modules/lazy-images.php b/plugins/jetpack/modules/lazy-images.php
deleted file mode 100644
index 57df7706..00000000
--- a/plugins/jetpack/modules/lazy-images.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-/**
- * Module Name: Lazy Images
- * Module Description: Speed up your site and create a smoother viewing experience by loading images as visitors scroll down the screen, instead of all at once.
- * Jumpstart Description: Lazy-loading images improve your site's speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.
- * Sort Order: 24
- * Recommendation Order: 14
- * First Introduced: 5.6.0
- * Requires Connection: No
- * Auto Activate: No
- * Module Tags: Appearance, Recommended
- * Feature: Appearance, Jumpstart
- * Additional Search Queries: mobile, theme, fast images, fast image, image, lazy, lazy load, lazyload, images, lazy images, thumbnail, image lazy load, lazy loading, load, loading
- */
-
-/**
- * This module relies heavily upon the Lazy Load plugin which was worked on by
- * Mohammad Jangda (batmoo), the WordPress.com VIP team, the TechCrunch 2011
- * redesign team, and Jake Goldman of 10up LLC.
- *
- * The JavaScript has been updated to rely on InterSection observer instead of
- * jQuery Sonar. Many thanks to Dean Hume (deanhume) and his example:
- * https://github.com/deanhume/lazy-observer-load
- */
-
-require_once( JETPACK__PLUGIN_DIR . 'modules/lazy-images/lazy-images.php' );
-
-/*
- * Initialize lazy images on the wp action so that conditional
- * tags are safe to use.
- *
- * As an example, this is important if a theme wants to disable lazy images except
- * on single posts, pages, or attachments by short-circuiting lazy images when
- * is_singular() returns false.
- *
- * See: https://github.com/Automattic/jetpack/issues/8888
- */
-
-add_action( 'wp', array( 'Jetpack_Lazy_Images', 'instance' ) );
diff --git a/plugins/jetpack/modules/lazy-images/images/1x1.trans.gif b/plugins/jetpack/modules/lazy-images/images/1x1.trans.gif
deleted file mode 100644
index f191b280..00000000
--- a/plugins/jetpack/modules/lazy-images/images/1x1.trans.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/lazy-images/js/lazy-images.js b/plugins/jetpack/modules/lazy-images/js/lazy-images.js
deleted file mode 100644
index 31286bd3..00000000
--- a/plugins/jetpack/modules/lazy-images/js/lazy-images.js
+++ /dev/null
@@ -1,870 +0,0 @@
-/* globals IntersectionObserver, jQuery */
-
-var jetpackLazyImagesModule = function( $ ) {
- var images,
- config = {
- // If the image gets within 200px in the Y axis, start the download.
- rootMargin: '200px 0px',
- threshold: 0.01
- },
- imageCount = 0,
- observer,
- image,
- i;
-
- $( document ).ready( function() {
- lazy_load_init();
-
- // Lazy load images that are brought in from Infinite Scroll
- $( 'body' ).bind( 'post-load', lazy_load_init );
-
- // Add event to provide optional compatibility for other code.
- $( 'body' ).bind( 'jetpack-lazy-images-load', lazy_load_init );
- } );
-
- function lazy_load_init() {
- images = document.querySelectorAll( 'img.jetpack-lazy-image:not(.jetpack-lazy-image--handled)' );
- imageCount = images.length;
-
- // If initialized, then disconnect the observer
- if ( observer ) {
- observer.disconnect();
- }
-
- // If we don't have support for intersection observer, loads the images immediately
- if ( ! ( 'IntersectionObserver' in window ) ) {
- loadImagesImmediately( images );
- } else {
- // It is supported, load the images
- observer = new IntersectionObserver( onIntersection, config );
-
- // foreach() is not supported in IE
- for ( i = 0; i < images.length; i++ ) {
- image = images[ i ];
- if ( image.getAttribute( 'data-lazy-loaded' ) ) {
- continue;
- }
-
- observer.observe( image );
- }
- }
- }
-
- /**
- * Load all of the images immediately
- * @param {NodeListOf<Element>} immediateImages List of lazy-loaded images to load immediately.
- */
- function loadImagesImmediately( immediateImages ) {
- var i;
-
- // foreach() is not supported in IE
- for ( i = 0; i < immediateImages.length; i++ ) {
- var image = immediateImages[ i ];
- applyImage( image );
- }
- }
-
- /**
- * On intersection
- * @param {array} entries List of elements being observed.
- */
- function onIntersection( entries ) {
- var i;
-
- // Disconnect if we've already loaded all of the images
- if ( imageCount === 0 ) {
- observer.disconnect();
- }
-
- // Loop through the entries
- for ( i = 0; i < entries.length; i++ ) {
- var entry = entries[ i ];
-
- // Are we in viewport?
- if ( entry.intersectionRatio > 0 ) {
- imageCount--;
-
- // Stop watching and load the image
- observer.unobserve( entry.target );
- applyImage( entry.target );
- }
- }
- }
-
- /**
- * Apply the image
- * @param {object} image The image object.
- */
- function applyImage( image ) {
- var theImage = $( image ),
- srcset,
- sizes,
- theClone;
-
- if ( ! theImage.length ) {
- return;
- }
-
- srcset = theImage.attr( 'data-lazy-srcset' );
- sizes = theImage.attr( 'data-lazy-sizes' );
- theClone = theImage.clone();
-
- // Remove lazy attributes from the clone.
- theClone.removeAttr( 'data-lazy-srcset' ),
- theClone.removeAttr( 'data-lazy-sizes' );
- theClone.removeAttr( 'data-lazy-src' );
-
- // Add the attributes we want on the finished image.
- theClone.addClass( 'jetpack-lazy-image--handled' );
- theClone.attr( 'data-lazy-loaded', 1 );
- if ( ! srcset ) {
- theClone.removeAttr( 'srcset' );
- } else {
- theClone.attr( 'srcset', srcset );
- }
- if ( sizes ) {
- theClone.attr( 'sizes', sizes );
- }
-
- theImage.replaceWith( theClone );
-
- // Fire an event so that third-party code can perform actions after an image is loaded.
- theClone.trigger( 'jetpack-lazy-loaded-image' );
- }
-};
-
-/**
- * The following is an Intersection observer polyfill which is licensed under
- * the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE and can be found at:
- * https://github.com/w3c/IntersectionObserver/tree/master/polyfill
- */
-
-/* jshint ignore:start */
-/**
- * Copyright 2016 Google Inc. All Rights Reserved.
- *
- * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.
- *
- * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document
- *
- */
-
-(function(window, document) {
- 'use strict';
-
-
- // Exits early if all IntersectionObserver and IntersectionObserverEntry
- // features are natively supported.
- if ('IntersectionObserver' in window &&
- 'IntersectionObserverEntry' in window &&
- 'intersectionRatio' in window.IntersectionObserverEntry.prototype) {
-
- // Minimal polyfill for Edge 15's lack of `isIntersecting`
- // See: https://github.com/w3c/IntersectionObserver/issues/211
- if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {
- Object.defineProperty(window.IntersectionObserverEntry.prototype,
- 'isIntersecting', {
- get: function () {
- return this.intersectionRatio > 0;
- }
- });
- }
- return;
- }
-
-
- /**
- * An IntersectionObserver registry. This registry exists to hold a strong
- * reference to IntersectionObserver instances currently observering a target
- * element. Without this registry, instances without another reference may be
- * garbage collected.
- */
- var registry = [];
-
-
- /**
- * Creates the global IntersectionObserverEntry constructor.
- * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry
- * @param {Object} entry A dictionary of instance properties.
- * @constructor
- */
- function IntersectionObserverEntry(entry) {
- this.time = entry.time;
- this.target = entry.target;
- this.rootBounds = entry.rootBounds;
- this.boundingClientRect = entry.boundingClientRect;
- this.intersectionRect = entry.intersectionRect || getEmptyRect();
- this.isIntersecting = !!entry.intersectionRect;
-
- // Calculates the intersection ratio.
- var targetRect = this.boundingClientRect;
- var targetArea = targetRect.width * targetRect.height;
- var intersectionRect = this.intersectionRect;
- var intersectionArea = intersectionRect.width * intersectionRect.height;
-
- // Sets intersection ratio.
- if (targetArea) {
- this.intersectionRatio = intersectionArea / targetArea;
- } else {
- // If area is zero and is intersecting, sets to 1, otherwise to 0
- this.intersectionRatio = this.isIntersecting ? 1 : 0;
- }
- }
-
-
- /**
- * Creates the global IntersectionObserver constructor.
- * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface
- * @param {Function} callback The function to be invoked after intersection
- * changes have queued. The function is not invoked if the queue has
- * been emptied by calling the `takeRecords` method.
- * @param {Object=} opt_options Optional configuration options.
- * @constructor
- */
- function IntersectionObserver(callback, opt_options) {
-
- var options = opt_options || {};
-
- if (typeof callback != 'function') {
- throw new Error('callback must be a function');
- }
-
- if (options.root && options.root.nodeType != 1) {
- throw new Error('root must be an Element');
- }
-
- // Binds and throttles `this._checkForIntersections`.
- this._checkForIntersections = throttle(
- this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT);
-
- // Private properties.
- this._callback = callback;
- this._observationTargets = [];
- this._queuedEntries = [];
- this._rootMarginValues = this._parseRootMargin(options.rootMargin);
-
- // Public properties.
- this.thresholds = this._initThresholds(options.threshold);
- this.root = options.root || null;
- this.rootMargin = this._rootMarginValues.map(function(margin) {
- return margin.value + margin.unit;
- }).join(' ');
- }
-
-
- /**
- * The minimum interval within which the document will be checked for
- * intersection changes.
- */
- IntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;
-
-
- /**
- * The frequency in which the polyfill polls for intersection changes.
- * this can be updated on a per instance basis and must be set prior to
- * calling `observe` on the first target.
- */
- IntersectionObserver.prototype.POLL_INTERVAL = null;
-
- /**
- * Use a mutation observer on the root element
- * to detect intersection changes.
- */
- IntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;
-
-
- /**
- * Starts observing a target element for intersection changes based on
- * the thresholds values.
- * @param {Element} target The DOM element to observe.
- */
- IntersectionObserver.prototype.observe = function(target) {
- var isTargetAlreadyObserved = this._observationTargets.some(function(item) {
- return item.element == target;
- });
-
- if (isTargetAlreadyObserved) {
- return;
- }
-
- if (!(target && target.nodeType == 1)) {
- throw new Error('target must be an Element');
- }
-
- this._registerInstance();
- this._observationTargets.push({element: target, entry: null});
- this._monitorIntersections();
- this._checkForIntersections();
- };
-
-
- /**
- * Stops observing a target element for intersection changes.
- * @param {Element} target The DOM element to observe.
- */
- IntersectionObserver.prototype.unobserve = function(target) {
- this._observationTargets =
- this._observationTargets.filter(function(item) {
-
- return item.element != target;
- });
- if (!this._observationTargets.length) {
- this._unmonitorIntersections();
- this._unregisterInstance();
- }
- };
-
-
- /**
- * Stops observing all target elements for intersection changes.
- */
- IntersectionObserver.prototype.disconnect = function() {
- this._observationTargets = [];
- this._unmonitorIntersections();
- this._unregisterInstance();
- };
-
-
- /**
- * Returns any queue entries that have not yet been reported to the
- * callback and clears the queue. This can be used in conjunction with the
- * callback to obtain the absolute most up-to-date intersection information.
- * @return {Array} The currently queued entries.
- */
- IntersectionObserver.prototype.takeRecords = function() {
- var records = this._queuedEntries.slice();
- this._queuedEntries = [];
- return records;
- };
-
-
- /**
- * Accepts the threshold value from the user configuration object and
- * returns a sorted array of unique threshold values. If a value is not
- * between 0 and 1 and error is thrown.
- * @private
- * @param {Array|number=} opt_threshold An optional threshold value or
- * a list of threshold values, defaulting to [0].
- * @return {Array} A sorted list of unique and valid threshold values.
- */
- IntersectionObserver.prototype._initThresholds = function(opt_threshold) {
- var threshold = opt_threshold || [0];
- if (!Array.isArray(threshold)) threshold = [threshold];
-
- return threshold.sort().filter(function(t, i, a) {
- if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) {
- throw new Error('threshold must be a number between 0 and 1 inclusively');
- }
- return t !== a[i - 1];
- });
- };
-
-
- /**
- * Accepts the rootMargin value from the user configuration object
- * and returns an array of the four margin values as an object containing
- * the value and unit properties. If any of the values are not properly
- * formatted or use a unit other than px or %, and error is thrown.
- * @private
- * @param {string=} opt_rootMargin An optional rootMargin value,
- * defaulting to '0px'.
- * @return {Array<Object>} An array of margin objects with the keys
- * value and unit.
- */
- IntersectionObserver.prototype._parseRootMargin = function(opt_rootMargin) {
- var marginString = opt_rootMargin || '0px';
- var margins = marginString.split(/\s+/).map(function(margin) {
- var parts = /^(-?\d*\.?\d+)(px|%)$/.exec(margin);
- if (!parts) {
- throw new Error('rootMargin must be specified in pixels or percent');
- }
- return {value: parseFloat(parts[1]), unit: parts[2]};
- });
-
- // Handles shorthand.
- margins[1] = margins[1] || margins[0];
- margins[2] = margins[2] || margins[0];
- margins[3] = margins[3] || margins[1];
-
- return margins;
- };
-
-
- /**
- * Starts polling for intersection changes if the polling is not already
- * happening, and if the page's visibilty state is visible.
- * @private
- */
- IntersectionObserver.prototype._monitorIntersections = function() {
- if (!this._monitoringIntersections) {
- this._monitoringIntersections = true;
-
- // If a poll interval is set, use polling instead of listening to
- // resize and scroll events or DOM mutations.
- if (this.POLL_INTERVAL) {
- this._monitoringInterval = setInterval(
- this._checkForIntersections, this.POLL_INTERVAL);
- }
- else {
- addEvent(window, 'resize', this._checkForIntersections, true);
- addEvent(document, 'scroll', this._checkForIntersections, true);
-
- if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in window) {
- this._domObserver = new MutationObserver(this._checkForIntersections);
- this._domObserver.observe(document, {
- attributes: true,
- childList: true,
- characterData: true,
- subtree: true
- });
- }
- }
- }
- };
-
-
- /**
- * Stops polling for intersection changes.
- * @private
- */
- IntersectionObserver.prototype._unmonitorIntersections = function() {
- if (this._monitoringIntersections) {
- this._monitoringIntersections = false;
-
- clearInterval(this._monitoringInterval);
- this._monitoringInterval = null;
-
- removeEvent(window, 'resize', this._checkForIntersections, true);
- removeEvent(document, 'scroll', this._checkForIntersections, true);
-
- if (this._domObserver) {
- this._domObserver.disconnect();
- this._domObserver = null;
- }
- }
- };
-
-
- /**
- * Scans each observation target for intersection changes and adds them
- * to the internal entries queue. If new entries are found, it
- * schedules the callback to be invoked.
- * @private
- */
- IntersectionObserver.prototype._checkForIntersections = function() {
- var rootIsInDom = this._rootIsInDom();
- var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();
-
- this._observationTargets.forEach(function(item) {
- var target = item.element;
- var targetRect = getBoundingClientRect(target);
- var rootContainsTarget = this._rootContainsTarget(target);
- var oldEntry = item.entry;
- var intersectionRect = rootIsInDom && rootContainsTarget &&
- this._computeTargetAndRootIntersection(target, rootRect);
-
- var newEntry = item.entry = new IntersectionObserverEntry({
- time: now(),
- target: target,
- boundingClientRect: targetRect,
- rootBounds: rootRect,
- intersectionRect: intersectionRect
- });
-
- if (!oldEntry) {
- this._queuedEntries.push(newEntry);
- } else if (rootIsInDom && rootContainsTarget) {
- // If the new entry intersection ratio has crossed any of the
- // thresholds, add a new entry.
- if (this._hasCrossedThreshold(oldEntry, newEntry)) {
- this._queuedEntries.push(newEntry);
- }
- } else {
- // If the root is not in the DOM or target is not contained within
- // root but the previous entry for this target had an intersection,
- // add a new record indicating removal.
- if (oldEntry && oldEntry.isIntersecting) {
- this._queuedEntries.push(newEntry);
- }
- }
- }, this);
-
- if (this._queuedEntries.length) {
- this._callback(this.takeRecords(), this);
- }
- };
-
-
- /**
- * Accepts a target and root rect computes the intersection between then
- * following the algorithm in the spec.
- * TODO(philipwalton): at this time clip-path is not considered.
- * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo
- * @param {Element} target The target DOM element
- * @param {Object} rootRect The bounding rect of the root after being
- * expanded by the rootMargin value.
- * @return {?Object} The final intersection rect object or undefined if no
- * intersection is found.
- * @private
- */
- IntersectionObserver.prototype._computeTargetAndRootIntersection =
- function(target, rootRect) {
-
- // If the element isn't displayed, an intersection can't happen.
- if (window.getComputedStyle(target).display == 'none') return;
-
- var targetRect = getBoundingClientRect(target);
- var intersectionRect = targetRect;
- var parent = getParentNode(target);
- var atRoot = false;
-
- while (!atRoot) {
- var parentRect = null;
- var parentComputedStyle = parent.nodeType == 1 ?
- window.getComputedStyle(parent) : {};
-
- // If the parent isn't displayed, an intersection can't happen.
- if (parentComputedStyle.display == 'none') return;
-
- if (parent == this.root || parent == document) {
- atRoot = true;
- parentRect = rootRect;
- } else {
- // If the element has a non-visible overflow, and it's not the <body>
- // or <html> element, update the intersection rect.
- // Note: <body> and <html> cannot be clipped to a rect that's not also
- // the document rect, so no need to compute a new intersection.
- if (parent != document.body &&
- parent != document.documentElement &&
- parentComputedStyle.overflow != 'visible') {
- parentRect = getBoundingClientRect(parent);
- }
- }
-
- // If either of the above conditionals set a new parentRect,
- // calculate new intersection data.
- if (parentRect) {
- intersectionRect = computeRectIntersection(parentRect, intersectionRect);
-
- if (!intersectionRect) break;
- }
- parent = getParentNode(parent);
- }
- return intersectionRect;
- };
-
-
- /**
- * Returns the root rect after being expanded by the rootMargin value.
- * @return {Object} The expanded root rect.
- * @private
- */
- IntersectionObserver.prototype._getRootRect = function() {
- var rootRect;
- if (this.root) {
- rootRect = getBoundingClientRect(this.root);
- } else {
- // Use <html>/<body> instead of window since scroll bars affect size.
- var html = document.documentElement;
- var body = document.body;
- rootRect = {
- top: 0,
- left: 0,
- right: html.clientWidth || body.clientWidth,
- width: html.clientWidth || body.clientWidth,
- bottom: html.clientHeight || body.clientHeight,
- height: html.clientHeight || body.clientHeight
- };
- }
- return this._expandRectByRootMargin(rootRect);
- };
-
-
- /**
- * Accepts a rect and expands it by the rootMargin value.
- * @param {Object} rect The rect object to expand.
- * @return {Object} The expanded rect.
- * @private
- */
- IntersectionObserver.prototype._expandRectByRootMargin = function(rect) {
- var margins = this._rootMarginValues.map(function(margin, i) {
- return margin.unit == 'px' ? margin.value :
- margin.value * (i % 2 ? rect.width : rect.height) / 100;
- });
- var newRect = {
- top: rect.top - margins[0],
- right: rect.right + margins[1],
- bottom: rect.bottom + margins[2],
- left: rect.left - margins[3]
- };
- newRect.width = newRect.right - newRect.left;
- newRect.height = newRect.bottom - newRect.top;
-
- return newRect;
- };
-
-
- /**
- * Accepts an old and new entry and returns true if at least one of the
- * threshold values has been crossed.
- * @param {?IntersectionObserverEntry} oldEntry The previous entry for a
- * particular target element or null if no previous entry exists.
- * @param {IntersectionObserverEntry} newEntry The current entry for a
- * particular target element.
- * @return {boolean} Returns true if a any threshold has been crossed.
- * @private
- */
- IntersectionObserver.prototype._hasCrossedThreshold =
- function(oldEntry, newEntry) {
-
- // To make comparing easier, an entry that has a ratio of 0
- // but does not actually intersect is given a value of -1
- var oldRatio = oldEntry && oldEntry.isIntersecting ?
- oldEntry.intersectionRatio || 0 : -1;
- var newRatio = newEntry.isIntersecting ?
- newEntry.intersectionRatio || 0 : -1;
-
- // Ignore unchanged ratios
- if (oldRatio === newRatio) return;
-
- for (var i = 0; i < this.thresholds.length; i++) {
- var threshold = this.thresholds[i];
-
- // Return true if an entry matches a threshold or if the new ratio
- // and the old ratio are on the opposite sides of a threshold.
- if (threshold == oldRatio || threshold == newRatio ||
- threshold < oldRatio !== threshold < newRatio) {
- return true;
- }
- }
- };
-
-
- /**
- * Returns whether or not the root element is an element and is in the DOM.
- * @return {boolean} True if the root element is an element and is in the DOM.
- * @private
- */
- IntersectionObserver.prototype._rootIsInDom = function() {
- return !this.root || containsDeep(document, this.root);
- };
-
-
- /**
- * Returns whether or not the target element is a child of root.
- * @param {Element} target The target element to check.
- * @return {boolean} True if the target element is a child of root.
- * @private
- */
- IntersectionObserver.prototype._rootContainsTarget = function(target) {
- return containsDeep(this.root || document, target);
- };
-
-
- /**
- * Adds the instance to the global IntersectionObserver registry if it isn't
- * already present.
- * @private
- */
- IntersectionObserver.prototype._registerInstance = function() {
- if (registry.indexOf(this) < 0) {
- registry.push(this);
- }
- };
-
-
- /**
- * Removes the instance from the global IntersectionObserver registry.
- * @private
- */
- IntersectionObserver.prototype._unregisterInstance = function() {
- var index = registry.indexOf(this);
- if (index != -1) registry.splice(index, 1);
- };
-
-
- /**
- * Returns the result of the performance.now() method or null in browsers
- * that don't support the API.
- * @return {number} The elapsed time since the page was requested.
- */
- function now() {
- return window.performance && performance.now && performance.now();
- }
-
-
- /**
- * Throttles a function and delays its executiong, so it's only called at most
- * once within a given time period.
- * @param {Function} fn The function to throttle.
- * @param {number} timeout The amount of time that must pass before the
- * function can be called again.
- * @return {Function} The throttled function.
- */
- function throttle(fn, timeout) {
- var timer = null;
- return function () {
- if (!timer) {
- timer = setTimeout(function() {
- fn();
- timer = null;
- }, timeout);
- }
- };
- }
-
-
- /**
- * Adds an event handler to a DOM node ensuring cross-browser compatibility.
- * @param {Node} node The DOM node to add the event handler to.
- * @param {string} event The event name.
- * @param {Function} fn The event handler to add.
- * @param {boolean} opt_useCapture Optionally adds the even to the capture
- * phase. Note: this only works in modern browsers.
- */
- function addEvent(node, event, fn, opt_useCapture) {
- if (typeof node.addEventListener == 'function') {
- node.addEventListener(event, fn, opt_useCapture || false);
- }
- else if (typeof node.attachEvent == 'function') {
- node.attachEvent('on' + event, fn);
- }
- }
-
-
- /**
- * Removes a previously added event handler from a DOM node.
- * @param {Node} node The DOM node to remove the event handler from.
- * @param {string} event The event name.
- * @param {Function} fn The event handler to remove.
- * @param {boolean} opt_useCapture If the event handler was added with this
- * flag set to true, it should be set to true here in order to remove it.
- */
- function removeEvent(node, event, fn, opt_useCapture) {
- if (typeof node.removeEventListener == 'function') {
- node.removeEventListener(event, fn, opt_useCapture || false);
- }
- else if (typeof node.detatchEvent == 'function') {
- node.detatchEvent('on' + event, fn);
- }
- }
-
-
- /**
- * Returns the intersection between two rect objects.
- * @param {Object} rect1 The first rect.
- * @param {Object} rect2 The second rect.
- * @return {?Object} The intersection rect or undefined if no intersection
- * is found.
- */
- function computeRectIntersection(rect1, rect2) {
- var top = Math.max(rect1.top, rect2.top);
- var bottom = Math.min(rect1.bottom, rect2.bottom);
- var left = Math.max(rect1.left, rect2.left);
- var right = Math.min(rect1.right, rect2.right);
- var width = right - left;
- var height = bottom - top;
-
- return (width >= 0 && height >= 0) && {
- top: top,
- bottom: bottom,
- left: left,
- right: right,
- width: width,
- height: height
- };
- }
-
-
- /**
- * Shims the native getBoundingClientRect for compatibility with older IE.
- * @param {Element} el The element whose bounding rect to get.
- * @return {Object} The (possibly shimmed) rect of the element.
- */
- function getBoundingClientRect(el) {
- var rect;
-
- try {
- rect = el.getBoundingClientRect();
- } catch (err) {
- // Ignore Windows 7 IE11 "Unspecified error"
- // https://github.com/w3c/IntersectionObserver/pull/205
- }
-
- if (!rect) return getEmptyRect();
-
- // Older IE
- if (!(rect.width && rect.height)) {
- rect = {
- top: rect.top,
- right: rect.right,
- bottom: rect.bottom,
- left: rect.left,
- width: rect.right - rect.left,
- height: rect.bottom - rect.top
- };
- }
- return rect;
- }
-
-
- /**
- * Returns an empty rect object. An empty rect is returned when an element
- * is not in the DOM.
- * @return {Object} The empty rect.
- */
- function getEmptyRect() {
- return {
- top: 0,
- bottom: 0,
- left: 0,
- right: 0,
- width: 0,
- height: 0
- };
- }
-
- /**
- * Checks to see if a parent element contains a child elemnt (including inside
- * shadow DOM).
- * @param {Node} parent The parent element.
- * @param {Node} child The child element.
- * @return {boolean} True if the parent node contains the child node.
- */
- function containsDeep(parent, child) {
- var node = child;
- while (node) {
- if (node == parent) return true;
-
- node = getParentNode(node);
- }
- return false;
- }
-
-
- /**
- * Gets the parent node of an element or its host element if the parent node
- * is a shadow root.
- * @param {Node} node The node whose parent to get.
- * @return {Node|null} The parent node or null if no parent exists.
- */
- function getParentNode(node) {
- var parent = node.parentNode;
-
- if (parent && parent.nodeType == 11 && parent.host) {
- // If the parent is a shadow root, return the host element.
- return parent.host;
- }
- return parent;
- }
-
-
- // Exposes the constructors globally.
- window.IntersectionObserver = IntersectionObserver;
- window.IntersectionObserverEntry = IntersectionObserverEntry;
-
- }(window, document));
-/* jshint ignore:end */
-
-// Let's kick things off now
-jetpackLazyImagesModule( jQuery );
diff --git a/plugins/jetpack/modules/lazy-images/lazy-images.php b/plugins/jetpack/modules/lazy-images/lazy-images.php
deleted file mode 100644
index befa5ec8..00000000
--- a/plugins/jetpack/modules/lazy-images/lazy-images.php
+++ /dev/null
@@ -1,353 +0,0 @@
-<?php
-
-class Jetpack_Lazy_Images {
- private static $__instance = null;
-
- /**
- * Singleton implementation
- *
- * @return object
- */
- public static function instance() {
- if ( is_null( self::$__instance ) ) {
- self::$__instance = new Jetpack_Lazy_Images();
- }
-
- return self::$__instance;
- }
-
- /**
- * Registers actions
- */
- private function __construct() {
- if ( is_admin() ) {
- return;
- }
-
- /**
- * Whether the lazy-images module should load.
- *
- * This filter is not prefixed with jetpack_ to provide a smoother migration
- * process from the WordPress Lazy Load plugin.
- *
- * @module lazy-images
- *
- * @since 5.6.0
- *
- * @param bool true Whether lazy image loading should occur.
- */
- if ( ! apply_filters( 'lazyload_is_enabled', true ) ) {
- return;
- }
-
- if ( Jetpack_AMP_Support::is_amp_request() ) {
- return;
- }
-
- add_action( 'wp_head', array( $this, 'setup_filters' ), 9999 ); // we don't really want to modify anything in <head> since it's mostly all metadata
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_assets' ) );
-
- // Do not lazy load avatar in admin bar
- add_action( 'admin_bar_menu', array( $this, 'remove_filters' ), 0 );
-
- add_filter( 'wp_kses_allowed_html', array( $this, 'allow_lazy_attributes' ) );
- add_action( 'wp_head', array( $this, 'add_nojs_fallback' ) );
- }
-
- public function setup_filters() {
- add_filter( 'the_content', array( $this, 'add_image_placeholders' ), PHP_INT_MAX ); // run this later, so other content filters have run, including image_add_wh on WP.com
- add_filter( 'post_thumbnail_html', array( $this, 'add_image_placeholders' ), PHP_INT_MAX );
- add_filter( 'get_avatar', array( $this, 'add_image_placeholders' ), PHP_INT_MAX );
- add_filter( 'widget_text', array( $this, 'add_image_placeholders' ), PHP_INT_MAX );
- add_filter( 'get_image_tag', array( $this, 'add_image_placeholders' ), PHP_INT_MAX);
- add_filter( 'wp_get_attachment_image_attributes', array( __CLASS__, 'process_image_attributes' ), PHP_INT_MAX );
- }
-
- public function remove_filters() {
- remove_filter( 'the_content', array( $this, 'add_image_placeholders' ), PHP_INT_MAX );
- remove_filter( 'post_thumbnail_html', array( $this, 'add_image_placeholders' ), PHP_INT_MAX );
- remove_filter( 'get_avatar', array( $this, 'add_image_placeholders' ), PHP_INT_MAX );
- remove_filter( 'widget_text', array( $this, 'add_image_placeholders' ), PHP_INT_MAX );
- remove_filter( 'get_image_tag', array( $this, 'add_image_placeholders' ), PHP_INT_MAX);
- remove_filter( 'wp_get_attachment_image_attributes', array( __CLASS__, 'process_image_attributes' ), PHP_INT_MAX );
- }
-
- /**
- * Ensure that our lazy image attributes are not filtered out of image tags.
- *
- * @param array $allowed_tags The allowed tags and their attributes.
- * @return array
- */
- public function allow_lazy_attributes( $allowed_tags ) {
- if ( ! isset( $allowed_tags['img'] ) ) {
- return $allowed_tags;
- }
-
- // But, if images are allowed, ensure that our attributes are allowed!
- $img_attributes = array_merge( $allowed_tags['img'], array(
- 'data-lazy-src' => 1,
- 'data-lazy-srcset' => 1,
- 'data-lazy-sizes' => 1,
- ) );
-
- $allowed_tags['img'] = $img_attributes;
-
- return $allowed_tags;
- }
-
- public function add_image_placeholders( $content ) {
- // Don't lazyload for feeds, previews
- if ( is_feed() || is_preview() ) {
- return $content;
- }
-
- // Don't lazy-load if the content has already been run through previously
- if ( false !== strpos( $content, 'data-lazy-src' ) ) {
- return $content;
- }
-
- // This is a pretty simple regex, but it works
- $content = preg_replace_callback( '#<(img)([^>]+?)(>(.*?)</\\1>|[\/]?>)#si', array( __CLASS__, 'process_image' ), $content );
-
- return $content;
- }
-
- /**
- * Returns true when a given string of classes contains a class signifying lazy images
- * should not process the image.
- *
- * @since 5.9.0
- *
- * @param string $classes A string of space-separated classes.
- * @return bool
- */
- public static function should_skip_image_with_blacklisted_class( $classes ) {
- $blacklisted_classes = array(
- 'skip-lazy',
- 'gazette-featured-content-thumbnail',
- );
-
- /**
- * Allow plugins and themes to tell lazy images to skip an image with a given class.
- *
- * @module lazy-images
- *
- * @since 5.9.0
- *
- * @param array An array of strings where each string is a class.
- */
- $blacklisted_classes = apply_filters( 'jetpack_lazy_images_blacklisted_classes', $blacklisted_classes );
-
- if ( ! is_array( $blacklisted_classes ) || empty( $blacklisted_classes ) ) {
- return false;
- }
-
- foreach ( $blacklisted_classes as $class ) {
- if ( false !== strpos( $classes, $class ) ) {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Processes images in content by acting as the preg_replace_callback
- *
- * @since 5.6.0
- *
- * @param array $matches
- *
- * @return string The image with updated lazy attributes
- */
- static function process_image( $matches ) {
- $old_attributes_str = $matches[2];
- $old_attributes_kses_hair = wp_kses_hair( $old_attributes_str, wp_allowed_protocols() );
-
- if ( empty( $old_attributes_kses_hair['src'] ) ) {
- return $matches[0];
- }
-
- $old_attributes = self::flatten_kses_hair_data( $old_attributes_kses_hair );
-
- // If we didn't add lazy attributes, just return the original image source.
- if ( ! empty( $old_attributes['class'] ) && false !== strpos( $old_attributes['class'], 'jetpack-lazy-image' ) ) {
- return $matches[0];
- }
-
- $new_attributes = self::process_image_attributes( $old_attributes );
- $new_attributes_str = self::build_attributes_string( $new_attributes );
-
- return sprintf( '<img %1$s><noscript>%2$s</noscript>', $new_attributes_str, $matches[0] );
- }
-
- /**
- * Given an array of image attributes, updates the `src`, `srcset`, and `sizes` attributes so
- * that they load lazily.
- *
- * @since 5.7.0
- *
- * @param array $attributes
- *
- * @return array The updated image attributes array with lazy load attributes
- */
- static function process_image_attributes( $attributes ) {
- if ( empty( $attributes['src'] ) ) {
- return $attributes;
- }
-
- if ( ! empty( $attributes['class'] ) && self::should_skip_image_with_blacklisted_class( $attributes['class'] ) ) {
- return $attributes;
- }
-
- /**
- * Allow plugins and themes to conditionally skip processing an image via its attributes.
- *
- * @module-lazy-images
- *
- * @deprecated 6.5.0 Use jetpack_lazy_images_skip_image_with_attributes instead.
- *
- * @since 5.9.0
- *
- * @param bool Default to not skip processing the current image.
- * @param array An array of attributes via wp_kses_hair() for the current image.
- */
- if ( apply_filters( 'jetpack_lazy_images_skip_image_with_atttributes', false, $attributes ) ) {
- return $attributes;
- }
-
- /**
- * Allow plugins and themes to conditionally skip processing an image via its attributes.
- *
- * @module-lazy-images
- *
- * @since 6.5.0 Filter name was updated from jetpack_lazy_images_skip_image_with_atttributes to correct typo.
- * @since 5.9.0
- *
- * @param bool Default to not skip processing the current image.
- * @param array An array of attributes via wp_kses_hair() for the current image.
- */
- if ( apply_filters( 'jetpack_lazy_images_skip_image_with_attributes', false, $attributes ) ) {
- return $attributes;
- }
-
- $old_attributes = $attributes;
-
- // Stash srcset and sizes in data attributes.
- foreach ( array( 'srcset', 'sizes' ) as $attribute ) {
- if ( isset( $old_attributes[ $attribute ] ) ) {
- $attributes[ "data-lazy-$attribute" ] = $old_attributes[ $attribute ];
- unset( $attributes[ $attribute ] );
- }
- }
-
- // We set this, adding the query arg so that it doesn't exactly equal the src attribute, so that photon JavaScript
- // will hold off on processing this image.
- $attributes['data-lazy-src'] = esc_url_raw( add_query_arg( 'is-pending-load', true, $attributes['src'] ) );
-
- $attributes['srcset'] = self::get_placeholder_image();
- $attributes['class'] = sprintf(
- '%s jetpack-lazy-image',
- empty( $old_attributes['class'] )
- ? ''
- : $old_attributes['class']
- );
-
- /**
- * Allow plugins and themes to override the attributes on the image before the content is updated.
- *
- * One potential use of this filter is for themes that set `height:auto` on the `img` tag.
- * With this filter, the theme could get the width and height attributes from the
- * $attributes array and then add a style tag that sets those values as well, which could
- * minimize reflow as images load.
- *
- * @module lazy-images
- *
- * @since 5.6.0
- *
- * @param array An array containing the attributes for the image, where the key is the attribute name
- * and the value is the attribute value.
- */
- return apply_filters( 'jetpack_lazy_images_new_attributes', $attributes );
- }
-
- /**
- * Adds JavaScript to check if the current browser supports JavaScript as well as some styles to hide lazy
- * images when the browser does not support JavaScript.
- *
- * @return void
- */
- public function add_nojs_fallback() {
- ?>
- <style type="text/css">
- /* If html does not have either class, do not show lazy loaded images. */
- html:not( .jetpack-lazy-images-js-enabled ):not( .js ) .jetpack-lazy-image {
- display: none;
- }
- </style>
- <script>
- document.documentElement.classList.add(
- 'jetpack-lazy-images-js-enabled'
- );
- </script>
- <?php
- }
-
- /**
- * Retrieves the placeholder image after running it through the lazyload_images_placeholder_image filter.
- *
- * @return string The placeholder image source.
- */
- private static function get_placeholder_image() {
- /**
- * Allows plugins and themes to modify the placeholder image.
- *
- * This filter is not prefixed with jetpack_ to provide a smoother migration
- * process from the WordPress Lazy Load plugin.
- *
- * @module lazy-images
- *
- * @since 5.6.0
- * @since 6.5.0 Default image is now a base64 encoded transparent gif.
- *
- * @param string The URL to the placeholder image
- */
- return apply_filters(
- 'lazyload_images_placeholder_image',
- 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'
- );
- }
-
- private static function flatten_kses_hair_data( $attributes ) {
- $flattened_attributes = array();
- foreach ( $attributes as $name => $attribute ) {
- $flattened_attributes[ $name ] = $attribute['value'];
- }
- return $flattened_attributes;
- }
-
- private static function build_attributes_string( $attributes ) {
- $string = array();
- foreach ( $attributes as $name => $value ) {
- if ( '' === $value ) {
- $string[] = sprintf( '%s', $name );
- } else {
- $string[] = sprintf( '%s="%s"', $name, esc_attr( $value ) );
- }
- }
- return implode( ' ', $string );
- }
-
- public function enqueue_assets() {
- wp_enqueue_script(
- 'jetpack-lazy-images',
- Jetpack::get_file_url_for_environment(
- '_inc/build/lazy-images/js/lazy-images.min.js',
- 'modules/lazy-images/js/lazy-images.js'
- ),
- array( 'jquery' ),
- JETPACK__VERSION,
- true
- );
- }
-}
diff --git a/plugins/jetpack/modules/likes.php b/plugins/jetpack/modules/likes.php
deleted file mode 100644
index b2e5de54..00000000
--- a/plugins/jetpack/modules/likes.php
+++ /dev/null
@@ -1,644 +0,0 @@
-<?php
-/**
- * Module Name: Likes
- * Module Description: Give visitors an easy way to show they appreciate your content.
- * First Introduced: 2.2
- * Sort Order: 23
- * Requires Connection: Yes
- * Auto Activate: No
- * Module Tags: Social
- * Feature: Engagement
- * Additional Search Queries: like, likes, wordpress.com
- */
-
-Jetpack::dns_prefetch( array(
- '//widgets.wp.com',
- '//s0.wp.com',
- '//0.gravatar.com',
- '//1.gravatar.com',
- '//2.gravatar.com',
-) );
-
-include_once dirname( __FILE__ ) . '/likes/jetpack-likes-master-iframe.php';
-include_once dirname( __FILE__ ) . '/likes/jetpack-likes-settings.php';
-
-class Jetpack_Likes {
- public static function init() {
- static $instance = NULL;
-
- if ( ! $instance ) {
- $instance = new Jetpack_Likes;
- }
-
- return $instance;
- }
-
- function __construct() {
- $this->in_jetpack = ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ? false : true;
- $this->settings = new Jetpack_Likes_Settings();
-
- // We need to run on wp hook rather than init because we check is_amp_endpoint()
- // when bootstrapping hooks
- add_action( 'wp', array( &$this, 'action_init' ), 99 );
-
- add_action( 'admin_init', array( $this, 'admin_init' ) );
-
- if ( $this->in_jetpack ) {
- add_action( 'jetpack_activate_module_likes', array( $this, 'set_social_notifications_like' ) );
- add_action( 'jetpack_deactivate_module_likes', array( $this, 'delete_social_notifications_like' ) );
-
- Jetpack::enable_module_configurable( __FILE__ );
- Jetpack::module_configuration_load( __FILE__, array( $this, 'configuration_redirect' ) );
- add_filter( 'jetpack_module_configuration_url_likes', array( $this, 'jetpack_likes_configuration_url' ) );
-
- add_action( 'admin_print_scripts-settings_page_sharing', array( &$this, 'load_jp_css' ) );
- add_filter( 'sharing_show_buttons_on_row_start', array( $this, 'configuration_target_area' ) );
-
- $active = Jetpack::get_active_modules();
-
- if ( ! in_array( 'sharedaddy', $active ) && ! in_array( 'publicize', $active ) ) {
- // we don't have a sharing page yet
- add_action( 'admin_menu', array( $this->settings, 'sharing_menu' ) );
- }
-
- if ( in_array( 'publicize', $active ) && ! in_array( 'sharedaddy', $active ) ) {
- // we have a sharing page but not the global options area
- add_action( 'pre_admin_screen_sharing', array( $this->settings, 'sharing_block' ), 20 );
- add_action( 'pre_admin_screen_sharing', array( $this->settings, 'updated_message' ), -10 );
- }
-
- if( ! in_array( 'sharedaddy', $active ) ) {
- add_action( 'admin_init', array( $this->settings, 'process_update_requests_if_sharedaddy_not_loaded' ) );
- add_action( 'sharing_global_options', array( $this->settings, 'admin_settings_showbuttonon_init' ), 19 );
- add_action( 'sharing_admin_update', array( $this->settings, 'admin_settings_showbuttonon_callback' ), 19 );
- add_action( 'admin_init', array( $this->settings, 'add_meta_box' ) );
- } else {
- add_filter( 'sharing_meta_box_title', array( $this->settings, 'add_likes_to_sharing_meta_box_title' ) );
- add_action( 'start_sharing_meta_box_content', array( $this->settings, 'meta_box_content' ) );
- }
- } else { // wpcom
- add_action( 'wpmu_new_blog', array( $this, 'enable_comment_likes' ), 10, 1 );
- add_action( 'admin_init', array( $this->settings, 'add_meta_box' ) );
- add_action( 'end_likes_meta_box_content', array( $this->settings, 'sharing_meta_box_content' ) );
- add_filter( 'likes_meta_box_title', array( $this->settings, 'add_likes_to_sharing_meta_box_title' ) );
- }
-
- add_action( 'admin_init', array( $this, 'admin_discussion_likes_settings_init' ) ); // Likes notifications
-
- add_action( 'admin_bar_menu', array( $this, 'admin_bar_likes' ), 60 );
-
- add_action( 'wp_enqueue_scripts', array( $this, 'load_styles_register_scripts' ) );
-
- add_action( 'save_post', array( $this->settings, 'meta_box_save' ) );
- add_action( 'edit_attachment', array( $this->settings, 'meta_box_save' ) );
- add_action( 'sharing_global_options', array( $this->settings, 'admin_settings_init' ), 20 );
- add_action( 'sharing_admin_update', array( $this->settings, 'admin_settings_callback' ), 20 );
- }
-
- /**
- * Set the social_notifications_like option to `on` when the Likes module is activated.
- *
- * @since 3.7.0
- *
- * @return null
- */
- function set_social_notifications_like() {
- update_option( 'social_notifications_like', 'on' );
- }
-
- /**
- * Delete the social_notifications_like option that was set to `on` on module activation.
- *
- * @since 3.7.0
- *
- * @return null
- */
- function delete_social_notifications_like() {
- delete_option( 'social_notifications_like' );
- }
-
- /**
- * Redirects to the likes section of the sharing page.
- */
- function configuration_redirect() {
- wp_safe_redirect( admin_url( 'options-general.php?page=sharing#likes' ) );
- die();
- }
-
- /**
- * Overrides default configuration url
- *
- * @uses admin_url
- * @return string module settings URL
- */
- function jetpack_likes_configuration_url() {
- return admin_url( 'options-general.php?page=sharing#likes' );
- }
-
- /**
- * Loads Jetpack's CSS on the sharing page so we can use .jetpack-targetable
- */
- function load_jp_css() {
- // Do we really need `admin_styles`? With the new admin UI, it's breaking some bits.
- // Jetpack::init()->admin_styles();
- }
-
- /**
- * Load scripts and styles for front end.
- * @return null
- */
- function load_styles_register_scripts() {
- if ( $this->in_jetpack ) {
- wp_enqueue_style( 'jetpack_likes', plugins_url( 'likes/style.css', __FILE__ ), array(), JETPACK__VERSION );
- $this->register_scripts();
- }
- }
-
-
- /**
- * Stub for is_post_likeable, since some wpcom functions call this directly on the class
- * Are likes enabled for this post?
- *
- * @param int $post_id
- * @return bool
- */
- static function is_post_likeable( $post_id = 0 ) {
- _deprecated_function( __METHOD__, 'jetpack-5.4', 'Jetpack_Likes_Settings()->is_post_likeable' );
- $settings = new Jetpack_Likes_Settings();
- return $settings->is_post_likeable();
- }
-
- /**
- * Stub for is_likes_visible, since some themes were calling it directly from this class
- *
- * @deprecated 5.4
- * @return bool
- */
- function is_likes_visible() {
- _deprecated_function( __METHOD__, 'jetpack-5.4', 'Jetpack_Likes_Settings()->is_likes_visible' );
-
- $settings = new Jetpack_Likes_Settings();
- return $settings->is_likes_visible();
- }
-
- /**
- * Adds in the jetpack-targetable class so when we visit sharing#likes our like settings get highlighted by a yellow box
- * @param string $html row heading for the sharedaddy "which page" setting
- * @return string html with the jetpack-targetable class and likes id. tbody gets closed after the like settings
- */
- function configuration_target_area( $html = '' ) {
- $html = "<tbody id='likes' class='jetpack-targetable'>" . $html;
- return $html;
- }
-
- /**
- * Options to be added to the discussion page (see also admin_settings_init, etc below for Sharing settings page)
- */
-
- function admin_discussion_likes_settings_init() {
- // Add a temporary section, until we can move the setting out of there and with the rest of the email notification settings
- add_settings_section( 'likes-notifications', __( 'Likes Notifications', 'jetpack' ), array( $this, 'admin_discussion_likes_settings_section' ), 'discussion' );
- add_settings_field( 'social-notifications', __( 'Email me whenever', 'jetpack' ), array( $this, 'admin_discussion_likes_settings_field' ), 'discussion', 'likes-notifications' );
- // Register the setting
- register_setting( 'discussion', 'social_notifications_like', array( $this, 'admin_discussion_likes_settings_validate' ) );
- }
-
- function admin_discussion_likes_settings_section() {
- // Atypical usage here. We emit jquery to move likes notification checkbox to be with the rest of the email notification settings
-?>
- <script type="text/javascript">
- jQuery( function( $ ) {
- var table = $( '#social_notifications_like' ).parents( 'table:first' ),
- header = table.prevAll( 'h2:first' ),
- newParent = $( '#moderation_notify' ).parent( 'label' ).parent();
-
- if ( !table.length || !header.length || !newParent.length ) {
- return;
- }
-
- newParent.append( '<br/>' ).append( table.end().parent( 'label' ).siblings().andSelf() );
- header.remove();
- table.remove();
- } );
- </script>
-<?php
- }
-
- function admin_likes_get_option( $option ) {
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $option_setting = get_blog_option( get_current_blog_id(), $option, 'on' );
- } else {
- $option_setting = get_option( $option, 'on' );
- }
-
- return intval( 'on' == $option_setting );
- }
-
- function admin_discussion_likes_settings_field() {
- $like = $this->admin_likes_get_option( 'social_notifications_like' );
-?>
- <label><input type="checkbox" id="social_notifications_like" name="social_notifications_like" value="1" <?php checked( $like ); ?> /> <?php esc_html_e( 'Someone likes one of my posts', 'jetpack' ); ?></label>
-<?php
- }
-
- function admin_discussion_likes_settings_validate( $input ) {
- // If it's not set (was unchecked during form submission) or was set to off (during option update), return 'off'.
- if ( !$input || 'off' == $input )
- return 'off';
-
- // Otherwise, return 'on'.
- return 'on';
- }
-
- function admin_init() {
- add_filter( 'manage_posts_columns', array( $this, 'add_like_count_column' ) );
- add_filter( 'manage_pages_columns', array( $this, 'add_like_count_column' ) );
- add_action( 'manage_posts_custom_column', array( $this, 'likes_edit_column' ), 10, 2 );
- add_action( 'manage_pages_custom_column', array( $this, 'likes_edit_column' ), 10, 2 );
- add_action( 'admin_print_styles-edit.php', array( $this, 'load_admin_css' ) );
- add_action( "admin_print_scripts-edit.php", array( $this, 'enqueue_admin_scripts' ) );
- }
-
- function action_init() {
- if ( is_admin() ) {
- return;
- }
-
- if ( ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) ||
- ( defined( 'APP_REQUEST' ) && APP_REQUEST ) ||
- ( defined( 'REST_API_REQUEST' ) && REST_API_REQUEST ) ||
- ( defined( 'COOKIE_AUTH_REQUEST' ) && COOKIE_AUTH_REQUEST ) ||
- ( defined( 'JABBER_SERVER' ) && JABBER_SERVER ) ) {
- return;
- }
-
- if ( Jetpack_AMP_Support::is_amp_request() ) {
- return;
- }
-
- if ( $this->in_jetpack ) {
- add_filter( 'the_content', array( &$this, 'post_likes' ), 30, 1 );
- add_filter( 'the_excerpt', array( &$this, 'post_likes' ), 30, 1 );
-
- } else {
- add_filter( 'post_flair', array( &$this, 'post_likes' ), 30, 1 );
- add_filter( 'post_flair_block_css', array( $this, 'post_flair_service_enabled_like' ) );
-
- wp_enqueue_script( 'postmessage', '/wp-content/js/postmessage.js', array( 'jquery' ), JETPACK__VERSION, false );
- wp_enqueue_script( 'jetpack_resize', '/wp-content/js/jquery/jquery.jetpack-resize.js', array( 'jquery' ), JETPACK__VERSION, false );
- wp_enqueue_script( 'jetpack_likes_queuehandler', plugins_url( 'queuehandler.js' , __FILE__ ), array( 'jquery', 'postmessage', 'jetpack_resize' ), JETPACK__VERSION, true );
- wp_enqueue_style( 'jetpack_likes', plugins_url( 'jetpack-likes.css', __FILE__ ), array(), JETPACK__VERSION );
- }
- }
-
- /**
- * Register scripts
- */
- function register_scripts() {
- wp_register_script(
- 'postmessage',
- Jetpack::get_file_url_for_environment( '_inc/build/postmessage.min.js', '_inc/postmessage.js' ),
- array( 'jquery' ),
- JETPACK__VERSION,
- false
- );
- wp_register_script(
- 'jetpack_resize',
- Jetpack::get_file_url_for_environment(
- '_inc/build/jquery.jetpack-resize.min.js',
- '_inc/jquery.jetpack-resize.js'
- ),
- array( 'jquery' ),
- JETPACK__VERSION,
- false
- );
- wp_register_script(
- 'jetpack_likes_queuehandler',
- Jetpack::get_file_url_for_environment(
- '_inc/build/likes/queuehandler.min.js',
- 'modules/likes/queuehandler.js'
- ),
- array( 'jquery', 'postmessage', 'jetpack_resize' ),
- JETPACK__VERSION,
- true
- );
- }
-
- /**
- * Load the CSS needed for the wp-admin area.
- */
- function load_admin_css() {
- ?>
- <style type="text/css">
- .vers img { display: none; }
- .metabox-prefs .vers img { display: inline; }
- .fixed .column-likes { width: 5.5em; padding: 8px 0; text-align: left; }
- .fixed .column-stats { width: 5em; }
- .fixed .column-likes .post-com-count {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- display: inline-block;
- padding: 0 8px;
- height: 2em;
- margin-top: 5px;
- -webkit-border-radius: 5px;
- border-radius: 5px;
- background-color: #72777C;
- color: #FFF;
- font-size: 11px;
- line-height: 21px;
- }
- .fixed .column-likes .post-com-count::after { border: none !important; }
- .fixed .column-likes .post-com-count:hover { background-color: #0073AA; }
- .fixed .column-likes .vers:before {
- font: normal 20px/1 dashicons;
- content: '\f155';
- speak: none;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- }
- @media screen and (max-width: 782px) {
- .fixed .column-likes {
- display: none;
- }
- }
- </style>
- <?php
- }
-
- /**
- * Load the JS required for loading the like counts.
- */
- function enqueue_admin_scripts() {
- if ( empty( $_GET['post_type'] ) || 'post' == $_GET['post_type'] || 'page' == $_GET['post_type'] ) {
- if ( $this->in_jetpack ) {
- wp_enqueue_script(
- 'likes-post-count',
- Jetpack::get_file_url_for_environment(
- '_inc/build/likes/post-count.min.js',
- 'modules/likes/post-count.js'
- ),
- array( 'jquery' ),
- JETPACK__VERSION
- );
- wp_enqueue_script(
- 'likes-post-count-jetpack',
- Jetpack::get_file_url_for_environment(
- '_inc/build/likes/post-count-jetpack.min.js',
- 'modules/likes/post-count-jetpack.js'
- ),
- array( 'likes-post-count' ),
- JETPACK__VERSION
- );
- } else {
- wp_enqueue_script( 'jquery.wpcom-proxy-request', "/wp-content/js/jquery/jquery.wpcom-proxy-request.js", array('jquery'), NULL, true );
- wp_enqueue_script( 'likes-post-count', plugins_url( 'likes/post-count.js', dirname( __FILE__ ) ), array( 'jquery' ), JETPACK__VERSION );
- wp_enqueue_script( 'likes-post-count-wpcom', plugins_url( 'likes/post-count-wpcom.js', dirname( __FILE__ ) ), array( 'likes-post-count', 'jquery.wpcom-proxy-request' ), JETPACK__VERSION );
- }
- }
- }
-
- /**
- * Add "Likes" column data to the post edit table in wp-admin.
- *
- * @param string $column_name
- * @param int $post_id
- */
- function likes_edit_column( $column_name, $post_id ) {
- if ( 'likes' == $column_name ) {
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $blog_id = get_current_blog_id();
- } else {
- $blog_id = Jetpack_Options::get_option( 'id' );
- }
-
- $permalink = get_permalink( get_the_ID() ); ?>
- <a title="" data-post-id="<?php echo (int) $post_id; ?>" class="post-com-count post-like-count" id="post-like-count-<?php echo (int) $post_id; ?>" data-blog-id="<?php echo (int) $blog_id; ?>" href="<?php echo esc_url( $permalink ); ?>#like-<?php echo (int) $post_id; ?>">
- <span class="comment-count">0</span>
- </a>
- <?php
- }
- }
-
- /**
- * Add a "Likes" column header to the post edit table in wp-admin.
- *
- * @param array $columns
- * @return array
- */
- function add_like_count_column( $columns ) {
- $date = $columns['date'];
- unset( $columns['date'] );
-
- $columns['likes'] = '<span class="vers"><img title="' . esc_attr__( 'Likes', 'jetpack' ) . '" alt="' . esc_attr__( 'Likes', 'jetpack' ) . '" src="//s0.wordpress.com/i/like-grey-icon.png" /><span class="screen-reader-text">' . __( 'Likes', 'jetpack' ) . '</span></span>';
- $columns['date'] = $date;
-
- return $columns;
- }
-
- function post_likes( $content ) {
- $post_id = get_the_ID();
-
- if ( ! is_numeric( $post_id ) || ! $this->settings->is_likes_visible() )
- return $content;
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $blog_id = get_current_blog_id();
- $bloginfo = get_blog_details( (int) $blog_id );
- $domain = $bloginfo->domain;
- } else {
- $blog_id = Jetpack_Options::get_option( 'id' );
- $url = home_url();
- $url_parts = wp_parse_url( $url );
- $domain = $url_parts['host'];
- }
- // make sure to include the scripts before the iframe otherwise weird things happen
- add_action( 'wp_footer', 'jetpack_likes_master_iframe', 21 );
-
- /**
- * if the same post appears more then once on a page the page goes crazy
- * we need a slightly more unique id / name for the widget wrapper.
- */
- $uniqid = uniqid();
-
- $src = sprintf( 'https://widgets.wp.com/likes/#blog_id=%1$d&amp;post_id=%2$d&amp;origin=%3$s&amp;obj_id=%1$d-%2$d-%4$s', $blog_id, $post_id, $domain, $uniqid );
- $name = sprintf( 'like-post-frame-%1$d-%2$d-%3$s', $blog_id, $post_id, $uniqid );
- $wrapper = sprintf( 'like-post-wrapper-%1$d-%2$d-%3$s', $blog_id, $post_id, $uniqid );
- $headline = sprintf(
- /** This filter is already documented in modules/sharedaddy/sharing-service.php */
- apply_filters( 'jetpack_sharing_headline_html', '<h3 class="sd-title">%s</h3>', esc_html__( 'Like this:', 'jetpack' ), 'likes' ),
- esc_html__( 'Like this:', 'jetpack' )
- );
-
- $html = "<div class='sharedaddy sd-block sd-like jetpack-likes-widget-wrapper jetpack-likes-widget-unloaded' id='$wrapper' data-src='$src' data-name='$name'>";
- $html .= $headline;
- $html .= "<div class='likes-widget-placeholder post-likes-widget-placeholder' style='height: 55px;'><span class='button'><span>" . esc_html__( 'Like', 'jetpack' ) . '</span></span> <span class="loading">' . esc_html__( 'Loading...', 'jetpack' ) . '</span></div>';
- $html .= "<span class='sd-text-color'></span><a class='sd-link-color'></a>";
- $html .= '</div>';
-
- // Let's make sure that the script is enqueued
- wp_enqueue_script( 'jetpack_likes_queuehandler' );
-
- return $content . $html;
- }
-
- function post_flair_service_enabled_like( $classes ) {
- $classes[] = 'sd-like-enabled';
- return $classes;
- }
-
- function is_admin_bar_button_visible() {
- global $wp_admin_bar;
-
- if ( ! is_object( $wp_admin_bar ) )
- return false;
-
- if ( ( ! is_singular( 'post' ) && ! is_attachment() && ! is_page() ) )
- return false;
-
- if ( ! $this->settings->is_likes_visible() )
- return false;
-
- if ( ! $this->settings->is_post_likeable() )
- return false;
-
- /**
- * Filters whether the Like button is enabled in the admin bar.
- *
- * @module likes
- *
- * @since 2.2.0
- *
- * @param bool true Should the Like button be visible in the Admin bar. Default to true.
- */
- return (bool) apply_filters( 'jetpack_admin_bar_likes_enabled', true );
- }
-
- function admin_bar_likes() {
- global $wp_admin_bar;
-
- $post_id = get_the_ID();
-
- if ( ! is_numeric( $post_id ) || ! $this->is_admin_bar_button_visible() ) {
- return;
- }
-
- $protocol = 'http';
- if ( is_ssl() )
- $protocol = 'https';
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $blog_id = get_current_blog_id();
- $bloginfo = get_blog_details( (int) $blog_id );
- $domain = $bloginfo->domain;
- } else {
- $blog_id = Jetpack_Options::get_option( 'id' );
- $url = home_url();
- $url_parts = wp_parse_url( $url );
- $domain = $url_parts['host'];
- }
- // make sure to include the scripts before the iframe otherwise weird things happen
- add_action( 'wp_footer', 'jetpack_likes_master_iframe', 21 );
-
- $src = sprintf( 'https://widgets.wp.com/likes/#blog_id=%2$d&amp;post_id=%3$d&amp;origin=%1$s://%4$s', $protocol, $blog_id, $post_id, $domain );
-
- $html = "<iframe class='admin-bar-likes-widget jetpack-likes-widget' scrolling='no' frameBorder='0' name='admin-bar-likes-widget' src='$src'></iframe>";
-
- $node = array(
- 'id' => 'admin-bar-likes-widget',
- 'meta' => array(
- 'html' => $html
- )
- );
-
- $wp_admin_bar->add_node( $node );
- }
-}
-
-/**
- * Callback to get the value for the jetpack_likes_enabled field.
- *
- * Warning: this behavior is somewhat complicated!
- * When the switch_like_status post_meta is unset, we follow the global setting in Sharing.
- * When it is set to 0, we disable likes on the post, regardless of the global setting.
- * When it is set to 1, we enable likes on the post, regardless of the global setting.
- */
-function jetpack_post_likes_get_value( array $post ) {
- $post_likes_switched = get_post_meta( $post['id'], 'switch_like_status', true );
-
- /** This filter is documented in modules/jetpack-likes-settings.php */
- $sitewide_likes_enabled = (bool) apply_filters( 'wpl_is_enabled_sitewide', ! get_option( 'disabled_likes' ) );
-
- // an empty string: post meta was not set, so go with the global setting
- if ( "" === $post_likes_switched ) {
- return $sitewide_likes_enabled;
- }
-
- // user overrode the global setting to disable likes
- elseif ( "0" === $post_likes_switched ) {
- return false;
- }
-
- // user overrode the global setting to enable likes
- elseif ( "1" === $post_likes_switched ) {
- return true;
- }
-
- // no default fallback, let's stay explicit
-}
-
-/**
- * Callback to set switch_like_status post_meta when jetpack_likes_enabled is updated.
- *
- * Warning: this behavior is somewhat complicated!
- * When the switch_like_status post_meta is unset, we follow the global setting in Sharing.
- * When it is set to 0, we disable likes on the post, regardless of the global setting.
- * When it is set to 1, we enable likes on the post, regardless of the global setting.
- */
-function jetpack_post_likes_update_value( $enable_post_likes, $post_object ) {
- /** This filter is documented in modules/jetpack-likes-settings.php */
- $sitewide_likes_enabled = (bool) apply_filters( 'wpl_is_enabled_sitewide', ! get_option( 'disabled_likes' ) );
-
- $should_switch_status = $enable_post_likes !== $sitewide_likes_enabled;
-
- if ( $should_switch_status ) {
- // set the meta to 0 if the user wants to disable likes, 1 if user wants to enable
- $switch_like_status = ( $enable_post_likes ? 1 : 0 );
- return update_post_meta( $post_object->ID, 'switch_like_status', $switch_like_status );
- } else {
- // unset the meta otherwise
- return delete_post_meta( $post_object->ID, 'switch_like_status' );
- }
-}
-
-/**
- * Add Likes post_meta to the REST API Post response.
- *
- * @action rest_api_init
- * @uses register_rest_field
- * @link https://developer.wordpress.org/rest-api/extending-the-rest-api/modifying-responses/
- */
-function jetpack_post_likes_register_rest_field() {
- $post_types = get_post_types( array( 'public' => true ) );
- foreach ( $post_types as $post_type ) {
- register_rest_field(
- $post_type,
- 'jetpack_likes_enabled',
- array(
- 'get_callback' => 'jetpack_post_likes_get_value',
- 'update_callback' => 'jetpack_post_likes_update_value',
- 'schema' => array(
- 'description' => __( 'Are Likes enabled?', 'jetpack' ),
- 'type' => 'boolean',
- ),
- )
- );
- }
-}
-
-// Add Likes post_meta to the REST API Post response.
-add_action( 'rest_api_init', 'jetpack_post_likes_register_rest_field' );
-
-Jetpack_Likes::init();
diff --git a/plugins/jetpack/modules/likes/jetpack-likes-master-iframe.php b/plugins/jetpack/modules/likes/jetpack-likes-master-iframe.php
deleted file mode 100644
index 9ccca4c1..00000000
--- a/plugins/jetpack/modules/likes/jetpack-likes-master-iframe.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-/**
- * This function needs to get loaded after the like scripts get added to the page.
- */
-function jetpack_likes_master_iframe() {
- $version = gmdate( 'YW' );
- $in_jetpack = ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ? false : true;
-
- $_locale = get_locale();
-
- // We have to account for w.org vs WP.com locale divergence
- if ( $in_jetpack ) {
- if ( ! defined( 'JETPACK__GLOTPRESS_LOCALES_PATH' ) || ! file_exists( JETPACK__GLOTPRESS_LOCALES_PATH ) ) {
- return false;
- }
-
- require_once JETPACK__GLOTPRESS_LOCALES_PATH;
-
- $gp_locale = GP_Locales::by_field( 'wp_locale', $_locale );
- $_locale = isset( $gp_locale->slug ) ? $gp_locale->slug : '';
- }
-
- $likes_locale = ( '' == $_locale || 'en' == $_locale ) ? '' : '&amp;lang=' . strtolower( $_locale );
-
- $src = sprintf(
- 'https://widgets.wp.com/likes/master.html?ver=%1$s#ver=%1$s%2$s',
- $version,
- $likes_locale
- );
-
- /* translators: The value of %d is not available at the time of output */
- $likersText = wp_kses( __( '<span>%d</span> bloggers like this:', 'jetpack' ), array( 'span' => array() ) );
- ?>
- <iframe src='<?php echo $src; ?>' scrolling='no' id='likes-master' name='likes-master' style='display:none;'></iframe>
- <div id='likes-other-gravatars'><div class="likes-text"><?php echo $likersText; ?></div><ul class="wpl-avatars sd-like-gravatars"></ul></div>
- <?php
-}
diff --git a/plugins/jetpack/modules/likes/jetpack-likes-settings.php b/plugins/jetpack/modules/likes/jetpack-likes-settings.php
deleted file mode 100644
index 8492b92a..00000000
--- a/plugins/jetpack/modules/likes/jetpack-likes-settings.php
+++ /dev/null
@@ -1,729 +0,0 @@
-<?php
-
-class Jetpack_Likes_Settings {
- function __construct() {
- $this->in_jetpack = ! ( defined( 'IS_WPCOM' ) && IS_WPCOM );
- }
-
- /**
- * Replaces the "Sharing" title for the post screen metabox with "Likes and Shares"
- */
- public function add_likes_to_sharing_meta_box_title() {
- return __( 'Likes and Shares', 'jetpack' );
- }
-
- /**
- * Adds a metabox to the post screen if the sharing one doesn't currently exist.
- */
- public function add_meta_box() {
- if (
- /**
- * Allow disabling of the Likes metabox on the post editor screen.
- *
- * @module likes
- *
- * @since 2.2.0
- *
- * @param bool false Should the Likes metabox be disabled? Default to false.
- */
- apply_filters( 'post_flair_disable', false )
- ) {
- return;
- }
-
- $post_types = get_post_types( array( 'public' => true ) );
- /**
- * Filters the Likes metabox title.
- *
- * @module likes
- *
- * @since 2.2.0
- *
- * @param string Likes metabox title. Default to "Likes".
- */
- $title = apply_filters( 'likes_meta_box_title', __( 'Likes', 'jetpack' ) );
- foreach( $post_types as $post_type ) {
- add_meta_box( 'likes_meta', $title, array( $this, 'meta_box_content' ), $post_type, 'side', 'default' );
- }
- }
-
- /**
- * Shows the likes option in the post screen metabox.
- */
- public function meta_box_content( $post ) {
- $post_id = ! empty( $post->ID ) ? (int) $post->ID : get_the_ID();
- $checked = true;
- $disabled = ! $this->is_enabled_sitewide();
- $switched_status = get_post_meta( $post_id, 'switch_like_status', true );
-
- if ( $disabled && empty( $switched_status ) || ! $disabled && $switched_status === '0' ) {
- $checked = false;
- }
-
- /**
- * Fires before the Likes meta box content in the post editor.
- *
- * @module likes
- *
- * @since 2.2.0
- *
- * @param WP_Post|array|null $post Post data.
- */
- do_action( 'start_likes_meta_box_content', $post );
- ?>
-
- <p>
- <label for="wpl_enable_post_likes">
- <input type="checkbox" name="wpl_enable_post_likes" id="wpl_enable_post_likes" value="1" <?php checked( $checked ); ?>>
- <?php esc_html_e( 'Show likes.', 'jetpack' ); ?>
- </label>
- <input type="hidden" name="wpl_like_status_hidden" value="1" />
- </p> <?php
- /**
- * Fires after the Likes meta box content in the post editor.
- *
- * @module likes
- *
- * @since 2.2.0
- *
- * @param WP_Post|array|null $post Post data.
- */
- do_action( 'end_likes_meta_box_content', $post );
- }
-
- /**
- * Returns the current state of the "WordPress.com Likes are" option.
- * @return boolean true if enabled sitewide, false if not
- */
- public function is_enabled_sitewide() {
- /**
- * Filters whether Likes are enabled by default on all posts.
- * true if enabled sitewide, false if not.
- *
- * @module likes
- *
- * @since 2.2.0
- *
- * @param bool $option Are Likes enabled sitewide.
- */
- return (bool) apply_filters( 'wpl_is_enabled_sitewide', ! Jetpack_Options::get_option_and_ensure_autoload( 'disabled_likes', 0 ) );
- }
-
- public function meta_box_save( $post_id ) {
- if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
- return $post_id;
- }
-
- if ( empty( $_POST['wpl_like_status_hidden'] ) ) {
- return $post_id;
- }
-
- // Record sharing disable. Only needs to be done for WPCOM
- if ( ! $this->in_jetpack ) {
- if ( isset( $_POST['post_type'] ) && in_array( $_POST['post_type'], get_post_types( array( 'public' => true ) ) ) ) {
- if ( ! isset( $_POST['wpl_enable_post_sharing'] ) ) {
- update_post_meta( $post_id, 'sharing_disabled', 1 );
- } else {
- delete_post_meta( $post_id, 'sharing_disabled' );
- }
- }
- }
-
- if ( 'post' == $_POST['post_type'] ) {
- if ( !current_user_can( 'edit_post', $post_id ) ) {
- return $post_id;
- }
- }
-
- // Record a change in like status for this post - only if it contradicts the
- // site like setting. If it doesn't contradict, then we delete the new individual status.
- if ( ! $this->is_enabled_sitewide() && ! empty( $_POST['wpl_enable_post_likes'] ) ) {
- // Likes turned on for individual posts. User wants to add the button to a single post
- update_post_meta( $post_id, 'switch_like_status', 1 );
- } else if ( $this->is_enabled_sitewide() && empty( $_POST['wpl_enable_post_likes'] ) ) {
- // Likes turned on for all posts. User wants to remove the button from a single post
- update_post_meta( $post_id, 'switch_like_status', 0 );
- } else if (
- ( ! $this->is_enabled_sitewide() && empty( $_POST['wpl_enable_post_likes'] ) ) ||
- ( $this->is_enabled_sitewide() && ! empty( $_POST['wpl_enable_post_likes'] ) )
- ) {
- // User wants to update the likes button status for an individual post, but the new status
- // is the same as if they're asking for the default behavior according to the current Likes setting.
- // So we delete the meta.
- delete_post_meta( $post_id, 'switch_like_status' );
- }
-
- return $post_id;
- }
-
- /**
- * WordPress.com: Metabox option for sharing (sharedaddy will handle this on the JP blog)
- */
- public function sharing_meta_box_content( $post ) {
- $post_id = ! empty( $post->ID ) ? (int) $post->ID : get_the_ID();
- $disabled = get_post_meta( $post_id, 'sharing_disabled', true ); ?>
- <p>
- <label for="wpl_enable_post_sharing">
- <input type="checkbox" name="wpl_enable_post_sharing" id="wpl_enable_post_sharing" value="1" <?php checked( ! $disabled ); ?>>
- <?php _e( 'Show sharing buttons.', 'jetpack' ); ?>
- </label>
- <input type="hidden" name="wpl_sharing_status_hidden" value="1" />
- </p> <?php
- }
-
- /**
- * Adds the 'sharing' menu to the settings menu.
- * Only ran if sharedaddy and publicize are not already active.
- */
- function sharing_menu() {
- add_submenu_page( 'options-general.php', esc_html__( 'Sharing Settings', 'jetpack' ), esc_html__( 'Sharing', 'jetpack' ), 'manage_options', 'sharing', array( $this, 'sharing_page' ) );
- }
-
- /**
- * Provides a sharing page with the sharing_global_options hook
- * so we can display the setting.
- * Only ran if sharedaddy and publicize are not already active.
- */
- function sharing_page() {
- $this->updated_message(); ?>
- <div class="wrap">
- <div class="icon32" id="icon-options-general"><br /></div>
- <h1><?php esc_html_e( 'Sharing Settings', 'jetpack' ); ?></h1>
- <?php
- /** This action is documented in modules/sharedaddy/sharing.php */
- do_action( 'pre_admin_screen_sharing' );
- ?>
- <?php $this->sharing_block(); ?>
- </div> <?php
- }
-
- /**
- * Returns the settings have been saved message.
- */
- function updated_message() {
- if ( isset( $_GET['update'] ) && $_GET['update'] == 'saved' ){
- echo '<div class="updated"><p>' . esc_html__( 'Settings have been saved', 'jetpack' ) . '</p></div>';
- }
- }
-
- /**
- * Returns just the "sharing buttons" w/ like option block, so it can be inserted into different sharing page contexts
- */
- function sharing_block() { ?>
- <h2><?php esc_html_e( 'Sharing Buttons', 'jetpack' ); ?></h2>
- <form method="post" action="">
- <table class="form-table">
- <tbody>
- <?php
- /** This action is documented in modules/sharedaddy/sharing.php */
- do_action( 'sharing_global_options' );
- ?>
- </tbody>
- </table>
-
- <p class="submit">
- <input type="submit" name="submit" class="button-primary" value="<?php esc_attr_e( 'Save Changes', 'jetpack' ); ?>" />
- </p>
-
- <input type="hidden" name="_wpnonce" value="<?php echo wp_create_nonce( 'sharing-options' );?>" />
- </form> <?php
- }
-
- /**
- * Are likes enabled for this post?
- *
- * @param int $post_id
- * @return bool
- */
- function is_post_likeable( $post_id = 0 ) {
- $post = get_post( $post_id );
- if ( ! $post || is_wp_error( $post ) ) {
- return false;
- }
-
- $sitewide_likes_enabled = (bool) $this->is_enabled_sitewide();
- $post_likes_switched = get_post_meta( $post->ID, 'switch_like_status', true );
-
- // on WPCOM, we need to look at post edit date so we don't break old posts
- // if post edit date predates this code, stick with the former (buggy) behavior
- // see: p7DVsv-64H-p2
- $last_modified_time = strtotime( $post->post_modified_gmt );
-
- $behavior_was_changed_at = strtotime( "2019-02-22 00:40:42" );
-
- if ( $this->in_jetpack || $last_modified_time > $behavior_was_changed_at ) {
- // the new and improved behavior on Jetpack and recent WPCOM posts:
- // $post_likes_switched is empty to follow site setting,
- // 0 if we want likes disabled, 1 if we want likes enabled
- return $post_likes_switched || ( $sitewide_likes_enabled && $post_likes_switched !== '0' );
- }
-
- // implicit else (old behavior): $post_likes_switched simply inverts the global setting
- return ( (bool) $post_likes_switched ) xor $sitewide_likes_enabled;
- }
-
- /**
- * Are likes visible in this context?
- *
- * Some of this code was taken and modified from sharing_display() to ensure
- * similar logic and filters apply here, too.
- */
- function is_likes_visible() {
- require_once JETPACK__PLUGIN_DIR . '/sync/class.jetpack-sync-settings.php';
- if ( Jetpack_Sync_Settings::is_syncing() ) {
- return false;
- }
-
- global $wp_current_filter; // Used to apply 'sharing_show' filter
-
- $post = get_post();
-
- // Never show on feeds or previews
- if ( is_feed() || is_preview() ) {
- $enabled = false;
-
- // Not a feed or preview, so what is it?
- } else {
-
- if ( in_the_loop() ) {
- // If in the loop, check if the current post is likeable
- $enabled = $this->is_post_likeable();
- } else {
- // Otherwise, check and see if likes are enabled sitewide
- $enabled = $this->is_enabled_sitewide();
- }
-
- if ( post_password_required() )
- $enabled = false;
-
- if ( in_array( 'get_the_excerpt', (array) $wp_current_filter ) ) {
- $enabled = false;
- }
-
- // Sharing Setting Overrides ****************************************
-
- // Single post including custom post types
- if ( is_single() ) {
- if ( ! $this->is_single_post_enabled( $post->post_type ) ) {
- $enabled = false;
- }
-
- // Single page
- } elseif ( is_page() && ! is_front_page() ) {
- if ( ! $this->is_single_page_enabled() ) {
- $enabled = false;
- }
-
- // Attachment
- } elseif ( is_attachment() ) {
- if ( ! $this->is_attachment_enabled() ) {
- $enabled = false;
- }
-
- // All other loops
- } elseif ( ! $this->is_index_enabled() ) {
- $enabled = false;
- }
- }
-
- if ( $post instanceof WP_Post ) {
- // Check that the post is a public, published post.
- if ( 'attachment' == $post->post_type ) {
- $post_status = get_post_status( $post->post_parent );
- } else {
- $post_status = $post->post_status;
- }
- if ( 'publish' != $post_status ) {
- $enabled = false;
- }
- }
-
- // Run through the sharing filters
- /** This filter is documented in modules/sharedaddy/sharing-service.php */
- $enabled = apply_filters( 'sharing_show', $enabled, $post );
-
- /**
- * Filters whether the Likes should be visible or not.
- * Allows overwriting the options set in Settings > Sharing.
- *
- * @module likes
- *
- * @since 2.2.0
- *
- * @param bool $enabled Should the Likes be visible?
- */
- return (bool) apply_filters( 'wpl_is_likes_visible', $enabled );
- }
-
- /**
- * Are Post Likes enabled on single posts?
- *
- * @param String $post_type custom post type identifier
- * @return bool
- */
- function is_single_post_enabled( $post_type = 'post' ) {
- $options = $this->get_options();
- return (bool) apply_filters(
- /**
- * Filters whether Likes should be enabled on single posts.
- *
- * The dynamic part of the filter, {$post_type}, allows you to specific the post type where Likes should be enabled.
- *
- * @module likes
- *
- * @since 2.2.0
- *
- * @param bool $enabled Are Post Likes enabled on single posts?
- */
- "wpl_is_single_{$post_type}_disabled",
- (bool) in_array( $post_type, $options['show'] )
- );
- }
-
- /**
- * Get the 'disabled_likes' option from the DB of the current blog.
- *
- * @return array
- */
- function get_options() {
- $setting = array();
- $setting['disabled'] = get_option( 'disabled_likes' );
- $sharing = get_option( 'sharing-options' );
-
- // Default visibility settings
- if ( ! isset( $sharing['global']['show'] ) ) {
- $sharing['global']['show'] = array( 'post', 'page' );
-
- // Scalar check
- } elseif ( is_scalar( $sharing['global']['show'] ) ) {
- switch ( $sharing['global']['show'] ) {
- case 'posts' :
- $sharing['global']['show'] = array( 'post', 'page' );
- break;
- case 'index' :
- $sharing['global']['show'] = array( 'index' );
- break;
- case 'posts-index' :
- $sharing['global']['show'] = array( 'post', 'page', 'index' );
- break;
- }
- }
-
- // Ensure it's always an array (even if not previously empty or scalar)
- $setting['show'] = ! empty( $sharing['global']['show'] ) ? (array) $sharing['global']['show'] : array();
-
- /**
- * Filters where the Likes are displayed.
- *
- * @module likes
- *
- * @since 2.2.0
- *
- * @param array $setting Array of Likes display settings.
- */
- return apply_filters( 'wpl_get_options', $setting );
- }
-
- /**
- * Are Post Likes enabled on archive/front/search pages?
- *
- * @return bool
- */
- function is_index_enabled() {
- $options = $this->get_options();
- /**
- * Filters whether Likes should be enabled on archive/front/search pages.
- *
- * @module likes
- *
- * @since 2.2.0
- *
- * @param bool $enabled Are Post Likes enabled on archive/front/search pages?
- */
- return (bool) apply_filters( 'wpl_is_index_disabled', (bool) in_array( 'index', $options['show'] ) );
- }
-
- /**
- * Are Post Likes enabled on single pages?
- *
- * @return bool
- */
- function is_single_page_enabled() {
- $options = $this->get_options();
- /**
- * Filters whether Likes should be enabled on single pages.
- *
- * @module likes
- *
- * @since 2.2.0
- *
- * @param bool $enabled Are Post Likes enabled on single pages?
- */
- return (bool) apply_filters( 'wpl_is_single_page_disabled', (bool) in_array( 'page', $options['show'] ) );
- }
-
- /**
- * Are Media Likes enabled on single pages?
- *
- * @return bool
- */
- function is_attachment_enabled() {
- $options = $this->get_options();
- /**
- * Filters whether Likes should be enabled on attachment pages.
- *
- * @module likes
- *
- * @since 2.2.0
- *
- * @param bool $enabled Are Post Likes enabled on attachment pages?
- */
- return (bool) apply_filters( 'wpl_is_attachment_disabled', (bool) in_array( 'attachment', $options['show'] ) );
- }
-
- /**
- * The actual options block to be inserted into the sharing page.
- */
- function admin_settings_init() {
- ?>
- <tr>
- <th scope="row">
- <label><?php esc_html_e( 'WordPress.com Likes are', 'jetpack' ); ?></label>
- </th>
- <td>
- <div>
- <label>
- <input type="radio" class="code" name="wpl_default" value="on" <?php checked( $this->is_enabled_sitewide(), true ); ?> />
- <?php esc_html_e( 'On for all posts', 'jetpack' ); ?>
- </label>
- </div>
- <div>
- <label>
- <input type="radio" class="code" name="wpl_default" value="off" <?php checked( $this->is_enabled_sitewide(), false ); ?> />
- <?php esc_html_e( 'Turned on per post', 'jetpack' ); ?>
- </label>
- <div>
- </td>
- </tr>
- <?php if ( ! $this->in_jetpack ) : ?>
- <tr>
- <th scope="row">
- <label><?php esc_html_e( 'WordPress.com Reblog Button', 'jetpack' ); ?></label>
- </th>
- <td>
- <div>
- <label>
- <input type="radio" class="code" name="jetpack_reblogs_enabled" value="on" <?php checked( $this->reblogs_enabled_sitewide(), true ); ?> />
- <?php esc_html_e( 'Show the Reblog button on posts', 'jetpack' ); ?>
- </label>
- </div>
- <div>
- <label>
- <input type="radio" class="code" name="jetpack_reblogs_enabled" value="off" <?php checked( $this->reblogs_enabled_sitewide(), false ); ?> />
- <?php esc_html_e( 'Don\'t show the Reblog button on posts', 'jetpack' ); ?>
- </label>
- </div>
- </td>
- </tr>
- <!-- WPCOM only: Comment Likes -->
- <?php if ( ! $this->in_jetpack ) : ?>
- <tr>
- <th scope="row">
- <label><?php esc_html_e( 'Comment Likes are', 'jetpack' ); ?></label>
- </th>
- <td>
- <div>
- <label>
- <input type="checkbox" class="code" name="jetpack_comment_likes_enabled" value="1" <?php checked( $this->is_comments_enabled(), true ); ?> />
- <?php esc_html_e( 'On for all comments', 'jetpack' ); ?>
- </label>
- </div>
- </td>
- </tr>
- <?php endif; ?>
- <?php endif; ?>
- </tbody> <?php // closes the tbody attached to sharing_show_buttons_on_row_start... ?>
- <?php
- }
-
- /**
- * Returns the current state of the "WordPress.com Reblogs are" option.
- * @return boolean true if enabled sitewide, false if not
- */
- function reblogs_enabled_sitewide() {
- /**
- * Filters whether Reblogs are enabled by default on all posts.
- * true if enabled sitewide, false if not.
- *
- * @module likes
- *
- * @since 3.0.0
- *
- * @param bool $option Are Reblogs enabled sitewide.
- */
- return (bool) apply_filters( 'wpl_reblogging_enabled_sitewide', ! get_option( 'disabled_reblogs' ) );
- }
-
- /**
- * Used for WPCOM ONLY. Comment likes are in their own module in Jetpack.
- * Returns if comment likes are enabled. Defaults to 'off'
- * @return boolean true if we should show comment likes, false if not
- */
- function is_comments_enabled() {
- /**
- * Filters whether Comment Likes are enabled.
- * true if enabled, false if not.
- *
- * @module comment-likes
- *
- * @since 2.2.0
- *
- * @param bool $option Are Comment Likes enabled sitewide.
- */
- return (bool) apply_filters( 'jetpack_comment_likes_enabled', get_option( 'jetpack_comment_likes_enabled', false ) );
- }
-
- /**
- * Saves the setting in the database, bumps a stat on WordPress.com
- */
- function admin_settings_callback() {
- // We're looking for these, and doing a dance to set some stats and save
- // them together in array option.
- $new_state = ! empty( $_POST['wpl_default'] ) ? $_POST['wpl_default'] : 'on';
- $db_state = $this->is_enabled_sitewide();
-
- $reblogs_new_state = ! empty( $_POST['jetpack_reblogs_enabled'] ) ? $_POST['jetpack_reblogs_enabled'] : 'on';
- $reblogs_db_state = $this->reblogs_enabled_sitewide();
- /** Default State *********************************************************/
-
- // Checked (enabled)
- switch( $new_state ) {
- case 'off' :
- if ( true == $db_state && ! $this->in_jetpack ) {
- $g_gif = file_get_contents( 'https://pixel.wp.com/g.gif?v=wpcom-no-pv&x_likes=disabled_likes' );
- }
- update_option( 'disabled_likes', 1 );
- break;
- case 'on' :
- default:
- if ( false == $db_state && ! $this->in_jetpack ) {
- $g_gif = file_get_contents( 'https://pixel.wp.com/g.gif?v=wpcom-no-pv&x_likes=reenabled_likes' );
- }
- delete_option( 'disabled_likes' );
- break;
- }
-
- switch( $reblogs_new_state ) {
- case 'off' :
- if ( true == $reblogs_db_state && ! $this->in_jetpack ) {
- $g_gif = file_get_contents( 'https://pixel.wp.com/g.gif?v=wpcom-no-pv&x_reblogs=disabled_reblogs' );
- }
- update_option( 'disabled_reblogs', 1 );
- break;
- case 'on' :
- default:
- if ( false == $reblogs_db_state && ! $this->in_jetpack ) {
- $g_gif = file_get_contents( 'https://pixel.wp.com/g.gif?v=wpcom-no-pv&x_reblogs=reenabled_reblogs' );
- }
- delete_option( 'disabled_reblogs' );
- break;
- }
-
- // WPCOM only: Comment Likes
- if ( ! $this->in_jetpack ) {
- $new_comments_state = ! empty( $_POST['jetpack_comment_likes_enabled'] ) ? $_POST['jetpack_comment_likes_enabled'] : false;
- switch( (bool) $new_comments_state ) {
- case true:
- update_option( 'jetpack_comment_likes_enabled', 1 );
- break;
- case false:
- default:
- update_option( 'jetpack_comment_likes_enabled', 0 );
- break;
- }
- }
- }
-
- /**
- * Adds the admin update hook so we can save settings even if Sharedaddy is not enabled.
- */
- function process_update_requests_if_sharedaddy_not_loaded() {
- if ( isset( $_GET['page'] ) && ( $_GET['page'] == 'sharing.php' || $_GET['page'] == 'sharing' ) ) {
- if ( isset( $_POST['_wpnonce'] ) && wp_verify_nonce( $_POST['_wpnonce'], 'sharing-options' ) ) {
- /** This action is documented in modules/sharedaddy/sharing.php */
- do_action( 'sharing_admin_update' );
- wp_safe_redirect( admin_url( 'options-general.php?page=sharing&update=saved' ) );
- die();
- }
- }
- }
-
- /**
- * If sharedaddy is not loaded, we don't have the "Show buttons on" yet, so we need to add that since it affects likes too.
- */
- function admin_settings_showbuttonon_init() {
- /** This action is documented in modules/sharedaddy/sharing.php */
- echo apply_filters( 'sharing_show_buttons_on_row_start', '<tr valign="top">' );
- ?>
- <th scope="row"><label><?php _e( 'Show buttons on', 'jetpack' ); ?></label></th>
- <td>
- <?php
- $br = false;
- $shows = array_values( get_post_types( array( 'public' => true ) ) );
- array_unshift( $shows, 'index' );
- $global = $this->get_options();
- foreach ( $shows as $show ) :
- if ( 'index' == $show ) {
- $label = __( 'Front Page, Archive Pages, and Search Results', 'jetpack' );
- } else {
- $post_type_object = get_post_type_object( $show );
- $label = $post_type_object->labels->name;
- }
- ?>
- <?php if ( $br ) echo '<br />'; ?><label><input type="checkbox"<?php checked( in_array( $show, $global['show'] ) ); ?> name="show[]" value="<?php echo esc_attr( $show ); ?>" /> <?php echo esc_html( $label ); ?></label>
- <?php $br = true; endforeach; ?>
- </td>
- <?php
- /** This action is documented in modules/sharedaddy/sharing.php */
- echo apply_filters( 'sharing_show_buttons_on_row_end', '</tr>' );
- ?>
- <?php
- }
-
- /**
- * If sharedaddy is not loaded, we still need to save the the settings of the "Show buttons on" option.
- */
- function admin_settings_showbuttonon_callback() {
- $options = get_option( 'sharing-options' );
- if ( !is_array( $options ) )
- $options = array();
-
- $shows = array_values( get_post_types( array( 'public' => true ) ) );
- $shows[] = 'index';
- $data = $_POST;
-
- if ( isset( $data['show'] ) ) {
- if ( is_scalar( $data['show'] ) ) {
- switch ( $data['show'] ) {
- case 'posts' :
- $data['show'] = array( 'post', 'page' );
- break;
- case 'index' :
- $data['show'] = array( 'index' );
- break;
- case 'posts-index' :
- $data['show'] = array( 'post', 'page', 'index' );
- break;
- }
- }
-
- if ( $data['show'] = array_intersect( $data['show'], $shows ) ) {
- $options['global']['show'] = $data['show'];
- }
- } else {
- $options['global']['show'] = array();
- }
-
- update_option( 'sharing-options', $options );
- }
-}
diff --git a/plugins/jetpack/modules/likes/post-count-jetpack.js b/plugins/jetpack/modules/likes/post-count-jetpack.js
deleted file mode 100644
index 42e7a0eb..00000000
--- a/plugins/jetpack/modules/likes/post-count-jetpack.js
+++ /dev/null
@@ -1,18 +0,0 @@
-var wpPostLikeCount = wpPostLikeCount || {};
-
-(function($) {
-
- wpPostLikeCount = jQuery.extend( wpPostLikeCount, {
- request: function( options ) {
- return $.ajax( {
- type: 'GET',
- url: wpPostLikeCount.jsonAPIbase + options.path,
- dataType : 'jsonp',
- data: options.data,
- success: function( response ) { options.success( response ); },
- error: function( response ) { options.error( response ); }
- } );
- }
- } );
-
-})(jQuery);
diff --git a/plugins/jetpack/modules/likes/post-count.js b/plugins/jetpack/modules/likes/post-count.js
deleted file mode 100644
index c531fe84..00000000
--- a/plugins/jetpack/modules/likes/post-count.js
+++ /dev/null
@@ -1,62 +0,0 @@
-/* jshint onevar: false, smarttabs: true */
-
-var wpPostLikeCount = wpPostLikeCount || {};
-
-(function($) {
-
- wpPostLikeCount = jQuery.extend( wpPostLikeCount, {
-
- jsonAPIbase: 'https://public-api.wordpress.com/rest/v1',
- APIqueue: [],
-
- wpPostLikeCount: function() {
- $( '.post-like-count' ).each( function() {
- var post_id = $(this).attr( 'data-post-id' );
- var blog_id = $(this).attr( 'data-blog-id' );
- wpPostLikeCount.APIqueue.push( '/sites/' + blog_id + '/posts/' + post_id + '/likes' );
- } );
- wpPostLikeCount.getCounts();
- },
-
- showCount: function( post_id, count ) {
- if ( count > 0 ) {
- $( '#post-like-count-' + post_id ).find( '.comment-count' ).hide();
- $( '#post-like-count-' + post_id ).find( '.comment-count' ).text( count );
- $( '#post-like-count-' + post_id ).find( '.comment-count' ).fadeIn();
- }
- },
-
- getCounts: function() {
- var batchRequest = {
- path: '/batch',
- data: '',
- success: function( response ) {
- for ( var path in response ) {
- if ( ! response[path].error_data ) {
- var urlPieces = path.split( '/' ); // pieces[4] = post id;
- var post_id = urlPieces[4];
- wpPostLikeCount.showCount( post_id, response[path].found );
- }
- }
- },
- error: function( /*response*/ ) {
- }
- };
-
- var amp = '';
- for( var i = 0; i < wpPostLikeCount.APIqueue.length; i++ ) {
- if ( i > 0 ) {
- amp = '&';
- }
- batchRequest.data += amp + 'urls[]=' + wpPostLikeCount.APIqueue[i];
- }
-
- wpPostLikeCount.request( batchRequest );
- }
- } );
-
-})(jQuery);
-
-jQuery(document).ready(function(/*$*/) {
- wpPostLikeCount.wpPostLikeCount();
-});
diff --git a/plugins/jetpack/modules/likes/queuehandler.js b/plugins/jetpack/modules/likes/queuehandler.js
deleted file mode 100644
index 0db8658a..00000000
--- a/plugins/jetpack/modules/likes/queuehandler.js
+++ /dev/null
@@ -1,384 +0,0 @@
-/* global pm, wpcom_reblog, JSON */
-
-var jetpackLikesWidgetBatch = [];
-var jetpackLikesMasterReady = false;
-
-// Due to performance problems on pages with a large number of widget iframes that need to be loaded,
-// we are limiting the processing at any instant to unloaded widgets that are currently in viewport,
-// plus this constant that will allow processing of widgets above and bellow the current fold.
-// This aim of it is to improve the UX and hide the transition from unloaded to loaded state from users.
-var jetpackLikesLookAhead = 2000; // pixels
-
-// Keeps track of loaded comment likes widget so we can unload them when they are scrolled out of view.
-var jetpackCommentLikesLoadedWidgets = [];
-
-function JetpackLikesPostMessage(message, target ) {
- if ( 'string' === typeof message ){
- try {
- message = JSON.parse( message );
- } catch(e) {
- return;
- }
- }
-
- pm( {
- target: target,
- type: 'likesMessage',
- data: message,
- origin: '*'
- } );
-}
-
-function JetpackLikesBatchHandler() {
- var requests = [];
- jQuery( 'div.jetpack-likes-widget-unloaded' ).each( function() {
- if ( jetpackLikesWidgetBatch.indexOf( this.id ) > -1 ) {
- return;
- }
-
- if ( ! jetpackIsScrolledIntoView( this ) ) {
- return;
- }
-
- jetpackLikesWidgetBatch.push( this.id );
-
- var regex = /like-(post|comment)-wrapper-(\d+)-(\d+)-(\w+)/,
- match = regex.exec( this.id ),
- info;
-
- if ( ! match || match.length !== 5 ) {
- return;
- }
-
- info = {
- blog_id: match[2],
- width: this.width
- };
-
- if ( 'post' === match[1] ) {
- info.post_id = match[3];
- } else if ( 'comment' === match[1] ) {
- info.comment_id = match[3];
- }
-
- info.obj_id = match[4];
-
- requests.push( info );
- });
-
- if ( requests.length > 0 ) {
- JetpackLikesPostMessage( { event: 'initialBatch', requests: requests }, window.frames['likes-master'] );
- }
-}
-
-function JetpackLikesMessageListener( event, message ) {
- var allowedOrigin, $container, $list, offset, rowLength, height, scrollbarWidth;
-
- if ( 'undefined' === typeof event.event ) {
- return;
- }
-
- // We only allow messages from one origin
- allowedOrigin = 'https://widgets.wp.com';
- if ( allowedOrigin !== message.origin ) {
- return;
- }
-
- switch ( event.event ) {
- case 'masterReady':
- jQuery( document ).ready( function() {
- jetpackLikesMasterReady = true;
-
- var stylesData = {
- event: 'injectStyles'
- },
- $sdTextColor = jQuery( '.sd-text-color' ),
- $sdLinkColor = jQuery( '.sd-link-color' );
-
- if ( jQuery( 'iframe.admin-bar-likes-widget' ).length > 0 ) {
- JetpackLikesPostMessage( { event: 'adminBarEnabled' }, window.frames[ 'likes-master' ] );
-
- stylesData.adminBarStyles = {
- background: jQuery( '#wpadminbar .quicklinks li#wp-admin-bar-wpl-like > a' ).css( 'background' ),
- isRtl: ( 'rtl' === jQuery( '#wpadminbar' ).css( 'direction' ) )
- };
- }
-
- if ( ! window.addEventListener ) {
- jQuery( '#wp-admin-bar-admin-bar-likes-widget' ).hide();
- }
-
- stylesData.textStyles = {
- color: $sdTextColor.css( 'color' ),
- fontFamily: $sdTextColor.css( 'font-family' ),
- fontSize: $sdTextColor.css( 'font-size' ),
- direction: $sdTextColor.css( 'direction' ),
- fontWeight: $sdTextColor.css( 'font-weight' ),
- fontStyle: $sdTextColor.css( 'font-style' ),
- textDecoration: $sdTextColor.css( 'text-decoration' )
- };
-
- stylesData.linkStyles = {
- color: $sdLinkColor.css( 'color' ),
- fontFamily: $sdLinkColor.css( 'font-family' ),
- fontSize: $sdLinkColor.css( 'font-size' ),
- textDecoration: $sdLinkColor.css( 'text-decoration' ),
- fontWeight: $sdLinkColor.css( 'font-weight' ),
- fontStyle: $sdLinkColor.css( 'font-style' )
- };
-
- JetpackLikesPostMessage( stylesData, window.frames[ 'likes-master' ] );
-
- JetpackLikesBatchHandler();
- } );
-
- break;
-
- case 'showLikeWidget':
- jQuery( '#' + event.id + ' .likes-widget-placeholder' ).fadeOut( 'fast' );
- break;
-
- case 'showCommentLikeWidget':
- jQuery( '#' + event.id + ' .likes-widget-placeholder' ).fadeOut( 'fast' );
- break;
-
- case 'killCommentLikes':
- // If kill switch for comment likes is enabled remove all widgets wrappers and `Loading...` placeholders.
- jQuery( '.jetpack-comment-likes-widget-wrapper' ).remove();
- break;
-
- case 'clickReblogFlair':
- wpcom_reblog.toggle_reblog_box_flair( event.obj_id );
- break;
-
- case 'showOtherGravatars':
- $container = jQuery( '#likes-other-gravatars' );
- $list = $container.find( 'ul' );
-
- $container.hide();
- $list.html( '' );
-
- $container.find( '.likes-text span' ).text( event.total );
-
- jQuery.each( event.likers, function( i, liker ) {
- var element;
-
- if ( 'http' !== liker.profile_URL.substr( 0, 4 ) ) {
- // We only display gravatars with http or https schema
- return;
- }
-
- element = jQuery( '<li><a><img /></a></li>' );
- element.addClass( liker.css_class );
-
- element.find( 'a' ).
- attr( {
- href: liker.profile_URL,
- rel: 'nofollow',
- target: '_parent'
- } ).
- addClass( 'wpl-liker' );
-
- element.find( 'img' ).
- attr( {
- src: liker.avatar_URL,
- alt: liker.name
- } ).
- css( {
- width: '30px',
- height: '30px',
- paddingRight: '3px'
- } );
-
- $list.append( element );
- } );
-
- offset = jQuery( 'body' ).find( '[name=\'' + event.parent + '\']' ).offset();
-
- $container.css( 'left', offset.left + event.position.left - 10 + 'px' );
- $container.css( 'top', offset.top + event.position.top - 33 + 'px' );
-
- rowLength = Math.floor( event.width / 37 );
- height = ( Math.ceil( event.likers.length / rowLength ) * 37 ) + 13;
- if ( height > 204 ) {
- height = 204;
- }
-
- $container.css( 'height', height + 'px' );
- $container.css( 'width', rowLength * 37 - 7 + 'px' );
-
- $list.css( 'width', rowLength * 37 + 'px' );
-
- $container.fadeIn( 'slow' );
-
- scrollbarWidth = $list[0].offsetWidth - $list[0].clientWidth;
- if ( scrollbarWidth > 0 ) {
- $container.width( $container.width() + scrollbarWidth );
- $list.width( $list.width() + scrollbarWidth );
- }
- }
-}
-
-pm.bind( 'likesMessage', JetpackLikesMessageListener );
-
-jQuery( document ).click( function( e ) {
- var $container = jQuery( '#likes-other-gravatars' );
-
- if ( $container.has( e.target ).length === 0 ) {
- $container.fadeOut( 'slow' );
- }
-});
-
-function JetpackLikesWidgetQueueHandler() {
- var wrapperID;
-
- if ( ! jetpackLikesMasterReady ) {
- setTimeout( JetpackLikesWidgetQueueHandler, 500 );
- return;
- }
-
- // Restore widgets to initial unloaded state when they are scrolled out of view.
- jetpackUnloadScrolledOutWidgets();
-
- var unloadedWidgetsInView = jetpackGetUnloadedWidgetsInView();
-
- if ( unloadedWidgetsInView.length > 0 ) {
- // Grab any unloaded widgets for a batch request
- JetpackLikesBatchHandler();
- }
-
- for ( var i=0, length = unloadedWidgetsInView.length; i <= length - 1; i++ ) {
- wrapperID = unloadedWidgetsInView[i].id;
-
- if ( ! wrapperID ){
- continue;
- }
-
- jetpackLoadLikeWidgetIframe( wrapperID );
- }
-}
-
-function jetpackLoadLikeWidgetIframe( wrapperID ) {
- var $wrapper;
-
- if ( 'undefined' === typeof wrapperID ) {
- return;
- }
-
- $wrapper = jQuery( '#' + wrapperID );
- $wrapper.find( 'iframe' ).remove();
-
- var placeholder = $wrapper.find( '.likes-widget-placeholder' );
-
- // Post like iframe
- if ( placeholder.hasClass( 'post-likes-widget-placeholder' ) ) {
- var postLikesFrame = document.createElement( 'iframe' );
-
- postLikesFrame['class'] = 'post-likes-widget jetpack-likes-widget';
- postLikesFrame.name = $wrapper.data( 'name' );
- postLikesFrame.src = $wrapper.data( 'src' );
- postLikesFrame.height = '18px';
- postLikesFrame.width = '200px';
- postLikesFrame.frameBorder = '0';
- postLikesFrame.scrolling = 'no';
-
- if ( $wrapper.hasClass( 'slim-likes-widget' ) ) {
- postLikesFrame.height = '22px';
- postLikesFrame.width = '68px';
- postLikesFrame.scrolling = 'no';
- } else {
- postLikesFrame.height = '55px';
- postLikesFrame.width = '100%';
- }
-
- placeholder.after( postLikesFrame );
- }
-
- // Comment like iframe
- if ( placeholder.hasClass( 'comment-likes-widget-placeholder' ) ) {
- var commentLikesFrame = document.createElement( 'iframe' );
-
- commentLikesFrame['class'] = 'comment-likes-widget-frame jetpack-likes-widget-frame';
- commentLikesFrame.name = $wrapper.data( 'name' );
- commentLikesFrame.src = $wrapper.data( 'src' );
- commentLikesFrame.height = '18px';
- commentLikesFrame.width = '100%';
- commentLikesFrame.frameBorder = '0';
- commentLikesFrame.scrolling = 'no';
-
- $wrapper.find( '.comment-like-feedback' ).after( commentLikesFrame );
-
- jetpackCommentLikesLoadedWidgets.push( commentLikesFrame );
- }
-
- $wrapper.removeClass( 'jetpack-likes-widget-unloaded' ).addClass( 'jetpack-likes-widget-loading' );
-
- $wrapper.find( 'iframe' ).load( function( e ) {
- var $iframe = jQuery( e.target );
-
- JetpackLikesPostMessage( { event: 'loadLikeWidget', name: $iframe.attr( 'name' ), width: $iframe.width() }, window.frames[ 'likes-master' ] );
-
- $wrapper.removeClass( 'jetpack-likes-widget-loading' ).addClass( 'jetpack-likes-widget-loaded' );
-
- if ( $wrapper.hasClass( 'slim-likes-widget' ) ) {
- $wrapper.find( 'iframe' ).Jetpack( 'resizeable' );
- }
- });
-}
-
-function jetpackGetUnloadedWidgetsInView() {
- var $unloadedWidgets = jQuery( 'div.jetpack-likes-widget-unloaded' );
-
- return $unloadedWidgets.filter( function() {
- return jetpackIsScrolledIntoView( this );
- } );
-}
-
-function jetpackIsScrolledIntoView( element ) {
- var top = element.getBoundingClientRect().top;
- var bottom = element.getBoundingClientRect().bottom;
-
- // Allow some slack above and bellow the fold with jetpackLikesLookAhead,
- // with the aim of hiding the transition from unloaded to loaded widget from users.
- return ( top + jetpackLikesLookAhead >= 0 ) && ( bottom <= window.innerHeight + jetpackLikesLookAhead );
-}
-
-function jetpackUnloadScrolledOutWidgets() {
- for ( var i = jetpackCommentLikesLoadedWidgets.length - 1; i >= 0; i-- ) {
- var currentWidgetIframe = jetpackCommentLikesLoadedWidgets[ i ];
-
- if ( ! jetpackIsScrolledIntoView( currentWidgetIframe ) ) {
- var $widgetWrapper = jQuery( currentWidgetIframe ).parent().parent();
-
- // Restore parent class to 'unloaded' so this widget can be picked up by queue manager again if needed.
- $widgetWrapper
- .removeClass( 'jetpack-likes-widget-loaded jetpack-likes-widget-loading' )
- .addClass( 'jetpack-likes-widget-unloaded' );
-
- // Bring back the loading placeholder into view.
- $widgetWrapper.children( '.comment-likes-widget-placeholder' ).fadeIn();
-
- // Remove it from the list of loaded widgets.
- jetpackCommentLikesLoadedWidgets.splice( i, 1 );
-
- // Remove comment like widget iFrame.
- jQuery( currentWidgetIframe ).remove();
- }
- }
-}
-
-var jetpackWidgetsDelayedExec = function( after, fn ) {
- var timer;
- return function() {
- timer && clearTimeout( timer );
- timer = setTimeout( fn, after );
- };
-};
-
-var jetpackOnScrollStopped = jetpackWidgetsDelayedExec( 250, JetpackLikesWidgetQueueHandler );
-
-// Load initial batch of widgets, prior to any scrolling events.
-JetpackLikesWidgetQueueHandler();
-
-// Add event listener to execute queue handler after scroll.
-window.addEventListener( 'scroll', jetpackOnScrollStopped, true );
diff --git a/plugins/jetpack/modules/likes/style.css b/plugins/jetpack/modules/likes/style.css
deleted file mode 100644
index e76b0c2d..00000000
--- a/plugins/jetpack/modules/likes/style.css
+++ /dev/null
@@ -1,233 +0,0 @@
-/**
- * Like Button toolbar button, loading text & container styles
- */
-
-@font-face {
- font-family: Noticons;
- src: url(https://wordpress.com/i/noticons/Noticons.woff);
-}
-
-/* Master container */
-#jp-post-flair {
- padding-top: .5em;
-}
-
-/* Overall Sharedaddy block title */
-div.sharedaddy,
-#content div.sharedaddy,
-#main div.sharedaddy {
- clear: both;
-}
-
-div.sharedaddy h3.sd-title {
- margin: 0 0 1em 0;
- display: inline-block;
- line-height: 1.2;
- font-size: 9pt;
- font-weight: bold;
-}
-
-div.sharedaddy h3.sd-title:before {
- content: "";
- display: block;
- width: 100%;
- min-width: 30px;
- border-top: 1px solid #ddd;
- margin-bottom: 1em;
-}
-
-
-/* Toolbar */
-#wpadminbar li#wp-admin-bar-admin-bar-likes-widget {
- width: 61px;
- overflow: hidden;
-}
-
-#wpadminbar iframe.admin-bar-likes-widget {
- width: 61px;
- height: 28px;
- min-height: 28px;
- border-width: 0px;
- position: absolute;
- top: 0;
-}
-
-div.jetpack-likes-widget-wrapper {
- width: 100%;
- min-height: 50px; /* Previous height, 60px */
- position: relative; /* Need to abs position placeholder and iframe so there isn't a jarring jump */
-}
-
-div.jetpack-likes-widget-wrapper .sd-link-color {
- font-size: 12px;
-}
-
-div.jetpack-likes-widget-wrapper.slim-likes-widget {
- width: 1px; /* initial default */
- min-height: 0;
-}
-
-div.jetpack-comment-likes-widget-wrapper {
- width: 100%;
- position: relative;
- min-height: 31px;
-}
-
-div.jetpack-comment-likes-widget-wrapper iframe {
- margin-bottom: 0;
-}
-
-#likes-other-gravatars {
- display: none;
- position: absolute;
- padding: 10px 10px 12px 10px;
- background-color: #2e4453;
- border-width: 0;
- box-shadow: 0 0 10px #2e4453;
- box-shadow: 0 0 10px rgba(46,68,83,.6);
- min-width: 130px;
- z-index: 1000;
-}
-
-#likes-other-gravatars * {
- line-height: normal;
-}
-
-#likes-other-gravatars .likes-text {
- color: white;
- font-size: 12px;
- padding-bottom: 8px;
-}
-
-#likes-other-gravatars ul,
-#likes-other-gravatars li {
- margin: 0;
- padding: 0;
- text-indent: 0;
- list-style-type: none;
-}
-
-#likes-other-gravatars li::before {
- content: "";
-}
-
-#likes-other-gravatars ul.wpl-avatars {
- overflow: auto;
- display: block;
- max-height: 190px;
-}
-
-#likes-other-gravatars ul.wpl-avatars li {
- width: 32px;
- height: 32px;
- float: left;
- margin: 0 5px 5px 0;
-}
-
-#likes-other-gravatars ul.wpl-avatars li a {
- margin: 0 2px 0 0;
- border-bottom: none !important;
- display: block;
-}
-
-#likes-other-gravatars ul.wpl-avatars li a img {
- background: none;
- border: none;
- margin: 0 !important;
- padding: 0 !important;
- position: static;
-}
-
-div.sd-box {
- border-top: 1px solid #ddd;
- border-top: 1px solid rgba(0,0,0,.13);
-}
-
-.entry-content .post-likes-widget, .post-likes-widget,
-.comment-likes-widget {
- margin: 0;
- border-width: 0;
- display: block;
-}
-
-/* Loading text */
-.post-likes-widget-placeholder,
-.comment-likes-widget-placeholder {
- margin: 0;
- border-width: 0;
- position: relative;
-}
-
-.comment-likes-widget-placeholder {
- height: 18px;
- position: absolute;
- display: flex;
- font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
- margin-top: 4px;
-}
-
-.comment-likes-widget-placeholder::before {
- -webkit-font-smoothing: antialiased;
- font-family: "Noticons";
- font-size: 20px;
- line-height: .9;
- color: #5CB5D4;
- content: '\f408';
- width: 16px;
- display: inline-block;
- vertical-align: middle;
-}
-
-.post-likes-widget-placeholder .button {
- display: none; /* Let's not show a dummy like button, let's just make a great button experience once it's loaded */
-}
-
-.post-likes-widget-placeholder .button span {
-}
-
-.post-likes-widget-placeholder .loading,
-.comment-likes-widget-placeholder .loading {
- color: #999;
- font-size: 12px;
-}
-
-.comment-likes-widget-placeholder .loading {
- padding-left: 5px;
- margin-top: 2px;
- align-self: center;
- color: #4E4E4E;
-}
-
-.slim-likes-widget .post-likes-widget {
- width: auto;
- float: none;
-}
-
-/* Like Special cases (display on it's own) */
-div.sharedaddy.sd-like-enabled .sd-like h3 {
- display: none;
-}
-
-div.sharedaddy.sd-like-enabled .sd-like .post-likes-widget {
- width: 100%;
- float: none;
- position: absolute; /* Need to abs position placeholder and iframe so there isn't a jarring jump */
- top: 0;
-}
-
-.comment-likes-widget {
- width: 100%;
-}
-
-
-/* Make ratings block. @todo: make !important unnecessary by removing inline style */
-.pd-rating,
-.cs-rating {
- display: block !important;
-}
-
-
-/* Hide G+ title */
-.sd-gplus .sd-title {
- display: none;
-}
diff --git a/plugins/jetpack/modules/manage.php b/plugins/jetpack/modules/manage.php
deleted file mode 100644
index 26bf9f98..00000000
--- a/plugins/jetpack/modules/manage.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-/**
- * Module Name: Manage
- * Module Description: Manage all of your sites from a centralized dashboard.
- * Jumpstart Description: Helps you remotely manage plugins, turn on automated updates, and more from <a href="https://wordpress.com/plugins/" target="_blank">wordpress.com</a>.
- * Sort Order: 1
- * Recommendation Order: 3
- * First Introduced: 3.4
- * Requires Connection: Yes
- * Auto Activate: Yes
- * Module Tags: Centralized Management, Recommended
- * Feature: General
- * Additional Search Queries: manage, management, remote
- */
-add_action( 'customize_register', 'add_wpcom_to_allowed_redirect_hosts' );
-
-// Add wordpress.com to the safe redirect whitelist if the Manage module is enabled
-// so the customizer can `return` to wordpress.com if invoked from there.
-function add_wpcom_to_allowed_redirect_hosts( $domains ) {
- if ( Jetpack::is_module_active( 'manage' ) ) {
- add_filter( 'allowed_redirect_hosts', 'allow_wpcom_domain' );
- }
-}
-
-// Return $domains, with 'wordpress.com' appended.
-function allow_wpcom_domain( $domains ) {
- if ( empty( $domains ) ) {
- $domains = array();
- }
- $domains[] = 'wordpress.com';
- return array_unique( $domains );
-}
-
-Jetpack::module_configuration_screen( 'manage', 'jetpack_manage_config_screen' );
-function jetpack_manage_config_screen() {
- include ( JETPACK__PLUGIN_DIR . 'modules/manage/confirm-admin.php' );
-}
diff --git a/plugins/jetpack/modules/manage/activate-admin.php b/plugins/jetpack/modules/manage/activate-admin.php
deleted file mode 100644
index 20b758b2..00000000
--- a/plugins/jetpack/modules/manage/activate-admin.php
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-
-$activate_url = wp_nonce_url(
- Jetpack::admin_url(
- array(
- 'page' => 'jetpack',
- 'action' => 'activate',
- 'module' => 'manage',
- )
- ),
- 'jetpack_activate-manage'
- );
-
-$section = isset( $_GET['section'] ) ? $_GET['section'] : null;
-
-switch( $section ) {
- case 'plugins':
- $description = __( 'Just one more step before your plugins can be managed with WordPress.com. Click the button below and you\'ll be managing all of your plugins in one place.', 'jetpack' );
- break;
-
- case 'themes':
- $description = __( 'Just one more step before your themes can be managed with WordPress.com. Click the button below and you\'ll be managing your themes with our newly-redesigned user interface.', 'jetpack' );
- break;
-
- case 'security-settings':
- $description = __( 'Just one more step before your site can be secured by Jetpack and WordPress.com. Click the button below and you\'ll be safe and secure.', 'jetpack' );
- break;
-
- case 'menus':
- $description = __( 'Just one more step before your menus can be managed with WordPress.com. Click the button below and you\'ll be managing your menus with our newly-redesigned user interface.', 'jetpack' );
- break;
-
- default:
- $description = __( 'Just one more step before you can manage your site from WordPress.com! Click the button below and you will be good to go.', 'jetpack' );
- break;
-}
-?>
-<div class="page-content landing manage-page">
- <div class="manage__icon">
- <svg width="149px" height="152px" viewBox="0 0 149 152" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
- <defs>
- <path id="path-1" d="M0,71.073 C0,76.696 0.677,82.16 1.919,87.407 L1.919,87.407 C3.934,87.957 6.074,88.157 8.155,88.025 L8.155,88.025 C24.965,86.955 36.859,74.293 47.988,63.218 L47.988,63.218 C48.289,62.92 53.255,57.979 53.255,57.979 L53.255,57.979 L59.009,63.704 C57.815,65.8 56.424,67.737 54.931,69.599 L54.931,69.599 L62.616,77.245 L25.84,113.838 L27.16,115.152 L20.938,121.344 C33.862,134.197 51.711,142.146 71.428,142.146 L71.428,142.146 C110.876,142.146 142.855,110.324 142.855,71.073 L142.855,71.073 C142.855,31.82 110.876,0 71.428,0 L71.428,0 C31.981,0 0,31.82 0,71.073 L0,71.073 Z"></path>
- <path id="path-3" d="M86.3139508,20.091 C86.3139508,20.091 79.5099508,25.071 79.0589508,25.741 L79.0589508,25.741 C78.6099508,26.414 80.8579508,31.113 81.3339508,31.311 L81.3339508,31.311 C81.8099508,31.511 90.6089508,31.19 90.6089508,31.19 L90.6089508,31.19 L93.5729508,25.793 L87.6959508,20 L86.3139508,20.091 Z"></path>
- <path id="path-5" d="M66.647,37.5820009 L45,59.1230009 L56.227,70.2960009 L84.141,42.5210009 L79.239,37.6450009 L79.176,37.5810009 C77.447,35.8600009 75.18,35.0000009 72.913,35.0000009 L72.913,35.0000009 C70.645,34.9990009 68.378,35.8600009 66.647,37.5820009 L66.647,37.5820009 Z"></path>
- <path id="path-7" d="M66.647,37.583 L45,59.124 L56.227,70.297 L84.141,42.522 L79.239,37.646 L79.176,37.582 C77.446,35.861 75.179,35 72.913,35 L72.913,35 C70.645,35 68.378,35.862 66.647,37.583 L66.647,37.583 Z"></path>
- <path id="path-9" d="M120.282,10.301 L120.282,13.022 L110.081,18.113 C104.759,20.77 100.242,24.716 96.875,29.537 L96.875,29.537 L92.488,25.171 L92.483,25.176 L89.051,28.591 C87.765,29.87 85.678,29.87 84.391,28.591 L84.391,28.591 L83.012,27.218 C82.346,26.556 82.346,25.48 83.012,24.818 L83.012,24.818 L87.547,20.305 C87.542,20.301 87.534,20.295 87.528,20.291 L87.528,20.291 L87.524,20.287 L87.524,20.287 C84.951,18.223 81.176,18.38 78.786,20.757 L78.786,20.757 L70.383,29.12 L78.874,37.568 C72.917,38.942 67.877,42.912 65.183,48.41 L65.183,48.41 L56.378,66.386 C49.275,69.043 43.6,74.775 41.15,82.172 L41.15,82.172 L34.145,103.322 L32.701,104.036 C25.038,107.817 18.832,113.993 15.03,121.619 L15.03,121.619 L9.602,132.506 L5.467,131.505 C3.76,131.093 2.039,132.136 1.625,133.835 L1.625,133.835 L-2,148.679 L5.021,141.693 L5.021,141.695 L53.777,93.18 C55.035,94.022 56.367,94.764 57.768,95.395 L57.768,95.395 L77.103,104.096 C71.971,104.937 67.023,106.788 62.568,109.584 L62.568,109.584 L52.321,116.022 L49.487,113.199 C48.348,112.067 46.503,112.067 45.365,113.199 L45.365,113.199 L34.877,123.636 L43.525,121.545 L43.522,121.548 L75.442,113.837 L83.03,112.004 C84.574,111.623 85.867,110.861 86.869,109.863 L86.869,109.863 C89.91,106.837 90.282,101.634 86.872,98.24 L86.872,98.24 L67.993,79.456 L73.85,75.054 L96.733,75.055 L96.732,75.054 L96.858,75.054 C97.996,75.055 99.003,74.501 99.628,73.652 L99.628,73.652 C99.637,73.639 99.648,73.628 99.658,73.617 L99.658,73.617 L99.655,73.615 C100.053,73.057 100.291,72.376 100.291,71.639 L100.291,71.639 L100.291,68.398 C100.291,67.355 99.442,66.509 98.393,66.509 L98.393,66.509 L95.136,66.509 C93.24,66.509 91.703,68.039 91.704,69.926 L91.704,69.926 L91.704,70.989 L85.174,68.831 C84.449,68.592 83.717,68.383 82.981,68.191 L82.981,68.191 L85.502,66.297 C89.664,63.17 92.118,58.29 92.14,53.1 L92.14,53.1 L92.176,44.73 L131.098,6.001 L124.605,6 C122.219,6.001 120.282,7.926 120.282,10.301 L120.282,10.301 Z"></path>
- </defs>
- <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
- <g id="Artboard-1-Copy" sketch:type="MSArtboardGroup">
- <g id="Group" sketch:type="MSLayerGroup" transform="translate(3.000000, 5.000000)">
- <path d="M71.427,0 C31.98,0 0,31.82 0,71.073 C0,76.696 0.676,82.16 1.918,87.408 C3.933,87.958 6.074,88.158 8.154,88.025 C24.965,86.955 36.858,74.294 47.987,63.219 C48.289,62.92 53.254,57.979 53.254,57.979 L59.009,63.705 C57.814,65.8 56.423,67.737 54.93,69.6 L62.615,77.245 L25.839,113.838 L27.159,115.153 L20.937,121.344 C33.861,134.197 51.711,142.146 71.427,142.146 C110.875,142.146 142.854,110.324 142.854,71.073 C142.854,31.82 110.875,0 71.427,0" id="Fill-1" sketch:type="MSShapeGroup"></path>
- <mask id="mask-2" sketch:name="Clip 4" fill="white">
- <use xlink:href="#path-1"></use>
- </mask>
- <g id="Clip-4"></g>
- <path d="M-163,194 L305,194 L305,-285 L-163,-285 L-163,194 Z" id="Fill-3" fill="#8CC257" sketch:type="MSShapeGroup" mask="url(#mask-2)"></path>
- <path d="M-5,-5 L147.855,-5 L147.855,147.146 L-5,147.146 L-5,-5 Z" id="Fill-5" fill="#8CC257" sketch:type="MSShapeGroup" mask="url(#mask-2)"></path>
- <mask id="mask-4" sketch:name="Clip 8" fill="white">
- <use xlink:href="#path-3"></use>
- </mask>
- <g id="Clip-8"></g>
- <path d="M74,15 L98.572,15 L98.572,36.377 L74,36.377 L74,15 Z" id="Fill-7" fill="#FFFFFF" sketch:type="MSShapeGroup" mask="url(#mask-4)"></path>
- <path d="M66.648,37.582375 L45,59.123375 L56.227,70.295375 L84.141,42.520375 L79.24,37.645375 L79.177,37.581375 C75.717,34.139375 70.108,34.139375 66.648,37.582375" id="Fill-10" fill="#B2B2B2" sketch:type="MSShapeGroup" mask="url(#mask-4)"></path>
- <mask id="mask-6" sketch:name="Clip 13" fill="white">
- <use xlink:href="#path-5"></use>
- </mask>
- <g id="Clip-13"></g>
- <path d="M-163,194 L305,194 L305,-285 L-163,-285 L-163,194 Z" id="Fill-12" fill="#B2B2B2" sketch:type="MSShapeGroup" mask="url(#mask-6)"></path>
- <mask id="mask-8" sketch:name="Clip 16" fill="white">
- <use xlink:href="#path-7"></use>
- </mask>
- <g id="Clip-16"></g>
- <path d="M40,30 L89.141,30 L89.141,75.295 L40,75.295 L40,30 Z" id="Fill-15" fill="#498E0B" sketch:type="MSShapeGroup" mask="url(#mask-8)"></path>
- <path d="M124.606,6 C122.219,6.001 120.283,7.926 120.283,10.302 L120.283,13.023 L110.082,18.113 C104.761,20.77 100.243,24.717 96.876,29.538 L92.488,25.172 L92.484,25.176 L89.052,28.591 C87.765,29.871 85.679,29.871 84.392,28.591 L83.013,27.219 C82.347,26.556 82.347,25.481 83.013,24.819 L87.548,20.306 C87.542,20.301 87.535,20.296 87.529,20.291 L87.526,20.288 L87.524,20.288 C84.951,18.224 81.176,18.38 78.787,20.758 L70.384,29.12 L78.875,37.569 C72.917,38.943 67.877,42.913 65.184,48.411 L56.379,66.386 C49.276,69.044 43.601,74.776 41.151,82.173 L34.147,103.323 L32.702,104.036 C25.039,107.818 18.833,113.994 15.031,121.619 L9.603,132.507 L5.468,131.506 C3.761,131.094 2.04,132.137 1.625,133.835 L-2,148.68 L5.021,141.693 L5.021,141.696 L53.778,93.181 C55.035,94.023 56.368,94.765 57.769,95.395 L77.104,104.096 C71.971,104.937 67.024,106.788 62.569,109.585 L52.322,116.022 L49.487,113.2 C48.349,112.068 46.504,112.068 45.366,113.2 L34.878,123.637 L43.526,121.546 L43.523,121.548 L75.443,113.837 L83.03,112.005 C84.575,111.624 85.867,110.862 86.87,109.864 C89.911,106.838 90.283,101.634 86.873,98.241 L67.994,79.456 L73.85,75.054 L96.734,75.055 L96.733,75.054 L96.859,75.054 C97.997,75.055 99.004,74.502 99.628,73.652 C99.638,73.639 99.649,73.629 99.659,73.617 L99.655,73.616 C100.054,73.057 100.292,72.377 100.292,71.64 L100.292,68.399 C100.292,67.356 99.443,66.51 98.394,66.51 L95.137,66.51 C93.241,66.51 91.704,68.04 91.705,69.926 L91.705,70.989 L85.174,68.832 C84.45,68.592 83.718,68.383 82.982,68.192 L85.503,66.298 C89.665,63.171 92.119,58.29 92.141,53.101 L92.176,44.731 L131.099,6.001 L124.606,6" id="Fill-18" sketch:type="MSShapeGroup" mask="url(#mask-8)"></path>
- <mask id="mask-10" sketch:name="Clip 21" fill="white">
- <use xlink:href="#path-9"></use>
- </mask>
- <g id="Clip-21"></g>
- <path d="M-163,194 L305,194 L305,-285 L-163,-285 L-163,194 Z" id="Fill-20" fill="#214703" sketch:type="MSShapeGroup" mask="url(#mask-10)"></path>
- <path d="M-7,1 L136.099,1 L136.099,153.68 L-7,153.68 L-7,1 Z" id="Fill-22" sketch:type="MSShapeGroup" mask="url(#mask-10)"></path>
- </g>
- </g>
- </g>
- </svg>
- </div>
- <h1 class="manage__title"><?php esc_html_e( __( 'Enable Jetpack Manage', 'jetpack' ) ); ?></h1>
- <p class="manage__description">
- <?php esc_html_e( $description, 'jetpack' ); ?>
- </p>
- <p class="manage__description">
- <a class="button-primary manage__button" href="<?php echo esc_url( $activate_url ) ?>">
- <?php esc_html_e( __( 'Enable Jetpack Manage Now', 'jetpack' ) ); ?>
- </a>
- </p>
-</div>
diff --git a/plugins/jetpack/modules/manage/confirm-admin.php b/plugins/jetpack/modules/manage/confirm-admin.php
deleted file mode 100644
index d0507053..00000000
--- a/plugins/jetpack/modules/manage/confirm-admin.php
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-
-$activate_url = wp_nonce_url(
- Jetpack::admin_url(
- array(
- 'page' => 'jetpack',
- 'action' => 'activate',
- 'module' => 'manage',
- )
- ),
- 'jetpack_activate-manage'
- );
-
-$section = isset( $_GET['section'] ) ? $_GET['section'] : null;
-$normalized_site_url = Jetpack::build_raw_urls( get_home_url() );
-
-$description = __( 'Well that was easy. You can now manage all of your sites in one convenient place on WordPress.com', 'jetpack' );
-
-switch( $section ) {
- case 'plugins':
- $link = 'https://wordpress.com/plugins/manage/' . $normalized_site_url;
- $link_title = __( 'Manage Your Plugins', 'jetpack' );
- break;
-
- case 'plugins-setup':
- $link = 'https://wordpress.com/plugins/setup/' . $normalized_site_url;
- $link_title = __( 'Back to Plan Setup', 'jetpack' );
- break;
-
- case 'themes':
- $link = 'https://wordpress.com/themes/' . $normalized_site_url;
- $link_title = __( 'Manage Your Themes', 'jetpack' );
- break;
-
- case 'security-settings':
- $link = 'https://wordpress.com/settings/security/' . $normalized_site_url;
- $link_title = __( 'Manage Your Security Settings', 'jetpack' );
- break;
-
- case 'menus':
- $link = 'https://wordpress.com/menus/' . $normalized_site_url;
- $link_title = __( 'Manage Your Menus', 'jetpack' );
- break;
-
- default:
- $link = 'https://wordpress.com/stats/day/' . $normalized_site_url;
- $link_title = __( 'Manage Your Site', 'jetpack' );
- break;
-}
-?>
-<div class="page-content landing manage-page">
- <div class="manage__icon">
- <svg width="149px" height="152px" viewBox="0 0 149 152" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
- <defs>
- <path id="path-1" d="M0,71.073 C0,76.696 0.677,82.16 1.919,87.407 L1.919,87.407 C3.934,87.957 6.074,88.157 8.155,88.025 L8.155,88.025 C24.965,86.955 36.859,74.293 47.988,63.218 L47.988,63.218 C48.289,62.92 53.255,57.979 53.255,57.979 L53.255,57.979 L59.009,63.704 C57.815,65.8 56.424,67.737 54.931,69.599 L54.931,69.599 L62.616,77.245 L25.84,113.838 L27.16,115.152 L20.938,121.344 C33.862,134.197 51.711,142.146 71.428,142.146 L71.428,142.146 C110.876,142.146 142.855,110.324 142.855,71.073 L142.855,71.073 C142.855,31.82 110.876,0 71.428,0 L71.428,0 C31.981,0 0,31.82 0,71.073 L0,71.073 Z"></path>
- <path id="path-3" d="M86.3139508,20.091 C86.3139508,20.091 79.5099508,25.071 79.0589508,25.741 L79.0589508,25.741 C78.6099508,26.414 80.8579508,31.113 81.3339508,31.311 L81.3339508,31.311 C81.8099508,31.511 90.6089508,31.19 90.6089508,31.19 L90.6089508,31.19 L93.5729508,25.793 L87.6959508,20 L86.3139508,20.091 Z"></path>
- <path id="path-5" d="M66.647,37.5820009 L45,59.1230009 L56.227,70.2960009 L84.141,42.5210009 L79.239,37.6450009 L79.176,37.5810009 C77.447,35.8600009 75.18,35.0000009 72.913,35.0000009 L72.913,35.0000009 C70.645,34.9990009 68.378,35.8600009 66.647,37.5820009 L66.647,37.5820009 Z"></path>
- <path id="path-7" d="M66.647,37.583 L45,59.124 L56.227,70.297 L84.141,42.522 L79.239,37.646 L79.176,37.582 C77.446,35.861 75.179,35 72.913,35 L72.913,35 C70.645,35 68.378,35.862 66.647,37.583 L66.647,37.583 Z"></path>
- <path id="path-9" d="M120.282,10.301 L120.282,13.022 L110.081,18.113 C104.759,20.77 100.242,24.716 96.875,29.537 L96.875,29.537 L92.488,25.171 L92.483,25.176 L89.051,28.591 C87.765,29.87 85.678,29.87 84.391,28.591 L84.391,28.591 L83.012,27.218 C82.346,26.556 82.346,25.48 83.012,24.818 L83.012,24.818 L87.547,20.305 C87.542,20.301 87.534,20.295 87.528,20.291 L87.528,20.291 L87.524,20.287 L87.524,20.287 C84.951,18.223 81.176,18.38 78.786,20.757 L78.786,20.757 L70.383,29.12 L78.874,37.568 C72.917,38.942 67.877,42.912 65.183,48.41 L65.183,48.41 L56.378,66.386 C49.275,69.043 43.6,74.775 41.15,82.172 L41.15,82.172 L34.145,103.322 L32.701,104.036 C25.038,107.817 18.832,113.993 15.03,121.619 L15.03,121.619 L9.602,132.506 L5.467,131.505 C3.76,131.093 2.039,132.136 1.625,133.835 L1.625,133.835 L-2,148.679 L5.021,141.693 L5.021,141.695 L53.777,93.18 C55.035,94.022 56.367,94.764 57.768,95.395 L57.768,95.395 L77.103,104.096 C71.971,104.937 67.023,106.788 62.568,109.584 L62.568,109.584 L52.321,116.022 L49.487,113.199 C48.348,112.067 46.503,112.067 45.365,113.199 L45.365,113.199 L34.877,123.636 L43.525,121.545 L43.522,121.548 L75.442,113.837 L83.03,112.004 C84.574,111.623 85.867,110.861 86.869,109.863 L86.869,109.863 C89.91,106.837 90.282,101.634 86.872,98.24 L86.872,98.24 L67.993,79.456 L73.85,75.054 L96.733,75.055 L96.732,75.054 L96.858,75.054 C97.996,75.055 99.003,74.501 99.628,73.652 L99.628,73.652 C99.637,73.639 99.648,73.628 99.658,73.617 L99.658,73.617 L99.655,73.615 C100.053,73.057 100.291,72.376 100.291,71.639 L100.291,71.639 L100.291,68.398 C100.291,67.355 99.442,66.509 98.393,66.509 L98.393,66.509 L95.136,66.509 C93.24,66.509 91.703,68.039 91.704,69.926 L91.704,69.926 L91.704,70.989 L85.174,68.831 C84.449,68.592 83.717,68.383 82.981,68.191 L82.981,68.191 L85.502,66.297 C89.664,63.17 92.118,58.29 92.14,53.1 L92.14,53.1 L92.176,44.73 L131.098,6.001 L124.605,6 C122.219,6.001 120.282,7.926 120.282,10.301 L120.282,10.301 Z"></path>
- </defs>
- <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
- <g id="Artboard-1-Copy" sketch:type="MSArtboardGroup">
- <g id="Group" sketch:type="MSLayerGroup" transform="translate(3.000000, 5.000000)">
- <path d="M71.427,0 C31.98,0 0,31.82 0,71.073 C0,76.696 0.676,82.16 1.918,87.408 C3.933,87.958 6.074,88.158 8.154,88.025 C24.965,86.955 36.858,74.294 47.987,63.219 C48.289,62.92 53.254,57.979 53.254,57.979 L59.009,63.705 C57.814,65.8 56.423,67.737 54.93,69.6 L62.615,77.245 L25.839,113.838 L27.159,115.153 L20.937,121.344 C33.861,134.197 51.711,142.146 71.427,142.146 C110.875,142.146 142.854,110.324 142.854,71.073 C142.854,31.82 110.875,0 71.427,0" id="Fill-1" sketch:type="MSShapeGroup"></path>
- <mask id="mask-2" sketch:name="Clip 4" fill="white">
- <use xlink:href="#path-1"></use>
- </mask>
- <g id="Clip-4"></g>
- <path d="M-163,194 L305,194 L305,-285 L-163,-285 L-163,194 Z" id="Fill-3" fill="#8CC257" sketch:type="MSShapeGroup" mask="url(#mask-2)"></path>
- <path d="M-5,-5 L147.855,-5 L147.855,147.146 L-5,147.146 L-5,-5 Z" id="Fill-5" fill="#8CC257" sketch:type="MSShapeGroup" mask="url(#mask-2)"></path>
- <mask id="mask-4" sketch:name="Clip 8" fill="white">
- <use xlink:href="#path-3"></use>
- </mask>
- <g id="Clip-8"></g>
- <path d="M74,15 L98.572,15 L98.572,36.377 L74,36.377 L74,15 Z" id="Fill-7" fill="#FFFFFF" sketch:type="MSShapeGroup" mask="url(#mask-4)"></path>
- <path d="M66.648,37.582375 L45,59.123375 L56.227,70.295375 L84.141,42.520375 L79.24,37.645375 L79.177,37.581375 C75.717,34.139375 70.108,34.139375 66.648,37.582375" id="Fill-10" fill="#B2B2B2" sketch:type="MSShapeGroup" mask="url(#mask-4)"></path>
- <mask id="mask-6" sketch:name="Clip 13" fill="white">
- <use xlink:href="#path-5"></use>
- </mask>
- <g id="Clip-13"></g>
- <path d="M-163,194 L305,194 L305,-285 L-163,-285 L-163,194 Z" id="Fill-12" fill="#B2B2B2" sketch:type="MSShapeGroup" mask="url(#mask-6)"></path>
- <mask id="mask-8" sketch:name="Clip 16" fill="white">
- <use xlink:href="#path-7"></use>
- </mask>
- <g id="Clip-16"></g>
- <path d="M40,30 L89.141,30 L89.141,75.295 L40,75.295 L40,30 Z" id="Fill-15" fill="#498E0B" sketch:type="MSShapeGroup" mask="url(#mask-8)"></path>
- <path d="M124.606,6 C122.219,6.001 120.283,7.926 120.283,10.302 L120.283,13.023 L110.082,18.113 C104.761,20.77 100.243,24.717 96.876,29.538 L92.488,25.172 L92.484,25.176 L89.052,28.591 C87.765,29.871 85.679,29.871 84.392,28.591 L83.013,27.219 C82.347,26.556 82.347,25.481 83.013,24.819 L87.548,20.306 C87.542,20.301 87.535,20.296 87.529,20.291 L87.526,20.288 L87.524,20.288 C84.951,18.224 81.176,18.38 78.787,20.758 L70.384,29.12 L78.875,37.569 C72.917,38.943 67.877,42.913 65.184,48.411 L56.379,66.386 C49.276,69.044 43.601,74.776 41.151,82.173 L34.147,103.323 L32.702,104.036 C25.039,107.818 18.833,113.994 15.031,121.619 L9.603,132.507 L5.468,131.506 C3.761,131.094 2.04,132.137 1.625,133.835 L-2,148.68 L5.021,141.693 L5.021,141.696 L53.778,93.181 C55.035,94.023 56.368,94.765 57.769,95.395 L77.104,104.096 C71.971,104.937 67.024,106.788 62.569,109.585 L52.322,116.022 L49.487,113.2 C48.349,112.068 46.504,112.068 45.366,113.2 L34.878,123.637 L43.526,121.546 L43.523,121.548 L75.443,113.837 L83.03,112.005 C84.575,111.624 85.867,110.862 86.87,109.864 C89.911,106.838 90.283,101.634 86.873,98.241 L67.994,79.456 L73.85,75.054 L96.734,75.055 L96.733,75.054 L96.859,75.054 C97.997,75.055 99.004,74.502 99.628,73.652 C99.638,73.639 99.649,73.629 99.659,73.617 L99.655,73.616 C100.054,73.057 100.292,72.377 100.292,71.64 L100.292,68.399 C100.292,67.356 99.443,66.51 98.394,66.51 L95.137,66.51 C93.241,66.51 91.704,68.04 91.705,69.926 L91.705,70.989 L85.174,68.832 C84.45,68.592 83.718,68.383 82.982,68.192 L85.503,66.298 C89.665,63.171 92.119,58.29 92.141,53.101 L92.176,44.731 L131.099,6.001 L124.606,6" id="Fill-18" sketch:type="MSShapeGroup" mask="url(#mask-8)"></path>
- <mask id="mask-10" sketch:name="Clip 21" fill="white">
- <use xlink:href="#path-9"></use>
- </mask>
- <g id="Clip-21"></g>
- <path d="M-163,194 L305,194 L305,-285 L-163,-285 L-163,194 Z" id="Fill-20" fill="#214703" sketch:type="MSShapeGroup" mask="url(#mask-10)"></path>
- <path d="M-7,1 L136.099,1 L136.099,153.68 L-7,153.68 L-7,1 Z" id="Fill-22" sketch:type="MSShapeGroup" mask="url(#mask-10)"></path>
- </g>
- </g>
- </g>
- </svg>
- </div>
- <h1 class="manage__title"><span class="genericon genericon-checkmark"></span><?php esc_html_e( __( 'Jetpack Manage Enabled', 'jetpack' ) ); ?></h1>
- <p class="manage__description">
- <?php echo esc_html( $description ); ?>
- </p>
- <p class="manage__description">
- <a class="manage__link" href="<?php echo esc_url( $link ); ?>">
- <span class="genericon genericon-previous"></span>
- <?php echo esc_html( $link_title ); ?>
- </a>
- </p>
-</div>
-<style >
- #jp-settings-screen h3{ display: none; }
-</style>
diff --git a/plugins/jetpack/modules/markdown.php b/plugins/jetpack/modules/markdown.php
deleted file mode 100644
index 719095a6..00000000
--- a/plugins/jetpack/modules/markdown.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-/**
- * Module Name: Markdown
- * Module Description: Write posts or pages in plain-text Markdown syntax
- * Sort Order: 31
- * First Introduced: 2.8
- * Requires Connection: No
- * Auto Activate: No
- * Module Tags: Writing
- * Feature: Writing
- * Additional Search Queries: md, markdown
- */
-
-include dirname( __FILE__ ) . '/markdown/easy-markdown.php';
-
-/**
- * Remove checkbox set in modules/markdown/easy-markdown.php.
- * We don't just remove the register_setting call there because the checkbox is
- * needed on WordPress.com, where the file is sync'ed verbatim.
- */
-function jetpack_markdown_posting_always_on() {
- // why oh why isn't there a remove_settings_field?
- global $wp_settings_fields;
- if ( isset( $wp_settings_fields['writing']['default'][ WPCom_Markdown::POST_OPTION ] ) ) {
- unset( $wp_settings_fields['writing']['default'][ WPCom_Markdown::POST_OPTION ] );
- }
-}
-add_action( 'admin_init', 'jetpack_markdown_posting_always_on', 11 );
diff --git a/plugins/jetpack/modules/markdown/easy-markdown.php b/plugins/jetpack/modules/markdown/easy-markdown.php
deleted file mode 100644
index 06a2cab9..00000000
--- a/plugins/jetpack/modules/markdown/easy-markdown.php
+++ /dev/null
@@ -1,812 +0,0 @@
-<?php
-
-/*
-Plugin Name: Easy Markdown
-Plugin URI: http://automattic.com/
-Description: Write in Markdown, publish in WordPress
-Version: 0.1
-Author: Matt Wiebe
-Author URI: http://automattic.com/
-*/
-
-/**
- * Copyright (c) Automattic. All rights reserved.
- *
- * Released under the GPL license
- * http://www.opensource.org/licenses/gpl-license.php
- *
- * This is an add-on for WordPress
- * https://wordpress.org/
- *
- * **********************************************************************
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- * **********************************************************************
- */
-
-class WPCom_Markdown {
-
-
- const POST_OPTION = 'wpcom_publish_posts_with_markdown';
- const COMMENT_OPTION = 'wpcom_publish_comments_with_markdown';
- const POST_TYPE_SUPPORT = 'wpcom-markdown';
- const IS_MD_META = '_wpcom_is_markdown';
-
- private static $parser;
- private static $instance;
-
- // to ensure that our munged posts over xml-rpc are removed from the cache
- public $posts_to_uncache = array();
- private $monitoring = array( 'post' => array(), 'parent' => array() );
-
-
- /**
- * Yay singletons!
- * @return object WPCom_Markdown instance
- */
- public static function get_instance() {
- if ( ! self::$instance )
- self::$instance = new self();
- return self::$instance;
- }
-
- /**
- * Kicks things off on `init` action
- * @return null
- */
- public function load() {
- $this->add_default_post_type_support();
- $this->maybe_load_actions_and_filters();
- if ( defined( 'REST_API_REQUEST' ) && REST_API_REQUEST ) {
- add_action( 'switch_blog', array( $this, 'maybe_load_actions_and_filters' ), 10, 2 );
- }
- add_action( 'admin_init', array( $this, 'register_setting' ) );
- add_action( 'admin_init', array( $this, 'maybe_unload_for_bulk_edit' ) );
- if ( current_theme_supports( 'o2' ) || class_exists( 'P2' ) ) {
- $this->add_o2_helpers();
- }
- }
-
- /**
- * If we're in a bulk edit session, unload so that we don't lose our markdown metadata
- * @return null
- */
- public function maybe_unload_for_bulk_edit() {
- if ( isset( $_REQUEST['bulk_edit'] ) && $this->is_posting_enabled() ) {
- $this->unload_markdown_for_posts();
- }
- }
-
- /**
- * Called on init and fires on switch_blog to decide if our actions and filters
- * should be running.
- * @param int|null $new_blog_id New blog ID
- * @param int|null $old_blog_id Old blog ID
- * @return null
- */
- public function maybe_load_actions_and_filters( $new_blog_id = null, $old_blog_id = null ) {
- // If this is a switch_to_blog call, and the blog isn't changing, we'll already be loaded
- if ( $new_blog_id && $new_blog_id === $old_blog_id ) {
- return;
- }
-
- if ( $this->is_posting_enabled() ) {
- $this->load_markdown_for_posts();
- } else {
- $this->unload_markdown_for_posts();
- }
-
- if ( $this->is_commenting_enabled() ) {
- $this->load_markdown_for_comments();
- } else {
- $this->unload_markdown_for_comments();
- }
- }
-
- /**
- * Set up hooks for enabling Markdown conversion on posts
- * @return null
- */
- public function load_markdown_for_posts() {
- add_filter( 'wp_kses_allowed_html', array( $this, 'wp_kses_allowed_html' ), 10, 2 );
- add_action( 'after_wp_tiny_mce', array( $this, 'after_wp_tiny_mce' ) );
- add_action( 'wp_insert_post', array( $this, 'wp_insert_post' ) );
- add_filter( 'wp_insert_post_data', array( $this, 'wp_insert_post_data' ), 10, 2 );
- add_filter( 'edit_post_content', array( $this, 'edit_post_content' ), 10, 2 );
- add_filter( 'edit_post_content_filtered', array( $this, 'edit_post_content_filtered' ), 10, 2 );
- add_action( 'wp_restore_post_revision', array( $this, 'wp_restore_post_revision' ), 10, 2 );
- add_filter( '_wp_post_revision_fields', array( $this, '_wp_post_revision_fields' ) );
- add_action( 'xmlrpc_call', array( $this, 'xmlrpc_actions' ) );
- add_filter( 'content_save_pre', array( $this, 'preserve_code_blocks' ), 1 );
- if ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) {
- $this->check_for_early_methods();
- }
- }
-
- /**
- * Removes hooks to disable Markdown conversion on posts
- * @return null
- */
- public function unload_markdown_for_posts() {
- remove_filter( 'wp_kses_allowed_html', array( $this, 'wp_kses_allowed_html' ) );
- remove_action( 'after_wp_tiny_mce', array( $this, 'after_wp_tiny_mce' ) );
- remove_action( 'wp_insert_post', array( $this, 'wp_insert_post' ) );
- remove_filter( 'wp_insert_post_data', array( $this, 'wp_insert_post_data' ), 10, 2 );
- remove_filter( 'edit_post_content', array( $this, 'edit_post_content' ), 10, 2 );
- remove_filter( 'edit_post_content_filtered', array( $this, 'edit_post_content_filtered' ), 10, 2 );
- remove_action( 'wp_restore_post_revision', array( $this, 'wp_restore_post_revision' ), 10, 2 );
- remove_filter( '_wp_post_revision_fields', array( $this, '_wp_post_revision_fields' ) );
- remove_action( 'xmlrpc_call', array( $this, 'xmlrpc_actions' ) );
- remove_filter( 'content_save_pre', array( $this, 'preserve_code_blocks' ), 1 );
- }
-
- /**
- * Set up hooks for enabling Markdown conversion on comments
- * @return null
- */
- protected function load_markdown_for_comments() {
- // Use priority 9 so that Markdown runs before KSES, which can clean up
- // any munged HTML.
- add_filter( 'pre_comment_content', array( $this, 'pre_comment_content' ), 9 );
- }
-
- /**
- * Removes hooks to disable Markdown conversion
- * @return null
- */
- protected function unload_markdown_for_comments() {
- remove_filter( 'pre_comment_content', array( $this, 'pre_comment_content' ), 9 );
- }
-
- /**
- * o2 does some of what we do. Let's take precedence.
- * @return null
- */
- public function add_o2_helpers() {
- if ( $this->is_posting_enabled() ) {
- add_filter( 'content_save_pre', array( $this, 'o2_escape_lists' ), 1 );
- }
-
- add_filter( 'o2_preview_post', array( $this, 'o2_preview_post' ) );
- add_filter( 'o2_preview_comment', array( $this, 'o2_preview_comment' ) );
-
- add_filter( 'wpcom_markdown_transform_pre', array( $this, 'o2_unescape_lists' ) );
- add_filter( 'wpcom_untransformed_content', array( $this, 'o2_unescape_lists' ) );
- }
-
- /**
- * If Markdown is enabled for posts on this blog, filter the text for o2 previews
- * @param string $text Post text
- * @return string Post text transformed through the magic of Markdown
- */
- public function o2_preview_post( $text ) {
- if ( $this->is_posting_enabled() ) {
- $text = $this->transform( $text, array( 'unslash' => false ) );
- }
- return $text;
- }
-
- /**
- * If Markdown is enabled for comments on this blog, filter the text for o2 previews
- * @param string $text Comment text
- * @return string Comment text transformed through the magic of Markdown
- */
- public function o2_preview_comment( $text ) {
- if ( $this->is_commenting_enabled() ) {
- $text = $this->transform( $text, array( 'unslash' => false ) );
- }
- return $text;
- }
-
- /**
- * Escapes lists so that o2 doesn't trounce them
- * @param string $text Post/comment text
- * @return string Text escaped with HTML entity for asterisk
- */
- public function o2_escape_lists( $text ) {
- return preg_replace( '/^\\* /um', '&#42; ', $text );
- }
-
- /**
- * Unescapes the token we inserted on o2_escape_lists
- * @param string $text Post/comment text with HTML entities for asterisks
- * @return string Text with the HTML entity removed
- */
- public function o2_unescape_lists( $text ) {
- return preg_replace( '/^[&]\#042; /um', '* ', $text );
- }
-
- /**
- * Preserve code blocks from being munged by KSES before they have a chance
- * @param string $text post content
- * @return string post content with code blocks escaped
- */
- public function preserve_code_blocks( $text ) {
- return $this->get_parser()->codeblock_preserve( $text );
- }
-
- /**
- * Remove KSES if it's there. Store the result to manually invoke later if needed.
- * @return null
- */
- public function maybe_remove_kses() {
- // Filters return true if they existed before you removed them
- if ( $this->is_posting_enabled() )
- $this->kses = remove_filter( 'content_filtered_save_pre', 'wp_filter_post_kses' ) && remove_filter( 'content_save_pre', 'wp_filter_post_kses' );
- }
-
- /**
- * Add our Writing and Discussion settings.
- * @return null
- */
- public function register_setting() {
- add_settings_field( self::POST_OPTION, __( 'Markdown', 'jetpack' ), array( $this, 'post_field' ), 'writing' );
- register_setting( 'writing', self::POST_OPTION, array( $this, 'sanitize_setting') );
- add_settings_field( self::COMMENT_OPTION, __( 'Markdown', 'jetpack' ), array( $this, 'comment_field' ), 'discussion' );
- register_setting( 'discussion', self::COMMENT_OPTION, array( $this, 'sanitize_setting') );
- }
-
- /**
- * Sanitize setting. Don't really want to store "on" value, so we'll store "1" instead!
- * @param string $input Value received by settings API via $_POST
- * @return bool Cast to boolean.
- */
- public function sanitize_setting( $input ) {
- return (bool) $input;
- }
-
- /**
- * Prints HTML for the Writing setting
- * @return null
- */
- public function post_field() {
- printf(
- '<label><input name="%s" id="%s" type="checkbox"%s /> %s</label><p class="description">%s</p>',
- self::POST_OPTION,
- self::POST_OPTION,
- checked( $this->is_posting_enabled(), true, false ),
- esc_html__( 'Use Markdown for posts and pages.', 'jetpack' ),
- sprintf( '<a href="%s">%s</a>', esc_url( $this->get_support_url() ), esc_html__( 'Learn more about Markdown.', 'jetpack' ) )
- );
- }
-
- /**
- * Prints HTML for the Discussion setting
- * @return null
- */
- public function comment_field() {
- printf(
- '<label><input name="%s" id="%s" type="checkbox"%s /> %s</label><p class="description">%s</p>',
- self::COMMENT_OPTION,
- self::COMMENT_OPTION,
- checked( $this->is_commenting_enabled(), true, false ),
- esc_html__( 'Use Markdown for comments.', 'jetpack' ),
- sprintf( '<a href="%s">%s</a>', esc_url( $this->get_support_url() ), esc_html__( 'Learn more about Markdown.', 'jetpack' ) )
- );
- }
-
- /**
- * Get the support url for Markdown
- * @uses apply_filters
- * @return string support url
- */
- protected function get_support_url() {
- /**
- * Filter the Markdown support URL.
- *
- * @module markdown
- *
- * @since 2.8.0
- *
- * @param string $url Markdown support URL.
- */
- return apply_filters( 'easy_markdown_support_url', 'http://en.support.wordpress.com/markdown-quick-reference/' );
- }
-
- /**
- * Is Mardown conversion for posts enabled?
- * @return boolean
- */
- public function is_posting_enabled() {
- return (bool) Jetpack_Options::get_option_and_ensure_autoload( self::POST_OPTION, '' );
- }
-
- /**
- * Is Markdown conversion for comments enabled?
- * @return boolean
- */
- public function is_commenting_enabled() {
- return (bool) Jetpack_Options::get_option_and_ensure_autoload( self::COMMENT_OPTION, '' );
- }
-
- /**
- * Check if a $post_id has Markdown enabled
- * @param int $post_id A post ID.
- * @return boolean
- */
- public function is_markdown( $post_id ) {
- return get_metadata( 'post', $post_id, self::IS_MD_META, true );
- }
-
- /**
- * Set Markdown as enabled on a post_id. We skip over update_postmeta so we
- * can sneakily set metadata on post revisions, which we need.
- * @param int $post_id A post ID.
- * @return bool The metadata was successfully set.
- */
- protected function set_as_markdown( $post_id ) {
- return update_metadata( 'post', $post_id, self::IS_MD_META, true );
- }
-
- /**
- * Get our Markdown parser object, optionally requiring all of our needed classes and
- * instantiating our parser.
- * @return object WPCom_GHF_Markdown_Parser instance.
- */
- public function get_parser() {
-
- if ( ! self::$parser ) {
- jetpack_require_lib( 'markdown' );
- self::$parser = new WPCom_GHF_Markdown_Parser;
- }
-
- return self::$parser;
- }
-
- /**
- * We don't want Markdown conversion all over the place.
- * @return null
- */
- public function add_default_post_type_support() {
- add_post_type_support( 'post', self::POST_TYPE_SUPPORT );
- add_post_type_support( 'page', self::POST_TYPE_SUPPORT );
- add_post_type_support( 'revision', self::POST_TYPE_SUPPORT );
- }
-
- /**
- * Figure out the post type of the post screen we're on
- * @return string Current post_type
- */
- protected function get_post_screen_post_type() {
- global $pagenow;
- if ( 'post-new.php' === $pagenow )
- return ( isset( $_GET['post_type'] ) ) ? $_GET['post_type'] : 'post';
- if ( isset( $_GET['post'] ) ) {
- $post = get_post( (int) $_GET['post'] );
- if ( is_object( $post ) && isset( $post->post_type ) )
- return $post->post_type;
- }
- return 'post';
- }
-
- /**
- * Swap post_content and post_content_filtered for editing
- * @param string $content Post content
- * @param int $id post ID
- * @return string Swapped content
- */
- public function edit_post_content( $content, $id ) {
- if ( $this->is_markdown( $id ) ) {
- $post = get_post( $id );
- if ( $post && ! empty( $post->post_content_filtered ) ) {
- $post = $this->swap_for_editing( $post );
- return $post->post_content;
- }
- }
- return $content;
- }
-
- /**
- * Swap post_content_filtered and post_content for editing
- * @param string $content Post content_filtered
- * @param int $id post ID
- * @return string Swapped content
- */
- public function edit_post_content_filtered( $content, $id ) {
- // if markdown was disabled, let's turn this off
- if ( ! $this->is_posting_enabled() && $this->is_markdown( $id ) ) {
- $post = get_post( $id );
- if ( $post && ! empty( $post->post_content_filtered ) )
- $content = '';
- }
- return $content;
- }
-
- /**
- * Some tags are allowed to have a 'markdown' attribute, allowing them to contain Markdown.
- * We need to tell KSES about those tags.
- * @param array $tags List of tags that KSES allows.
- * @param string $context The context that KSES is allowing these tags.
- * @return array The tags that KSES allows, with our extra 'markdown' parameter where necessary.
- */
- public function wp_kses_allowed_html( $tags, $context ) {
- if ( 'post' !== $context ) {
- return $tags;
- }
-
- $re = '/' . $this->get_parser()->contain_span_tags_re . '/';
- foreach ( $tags as $tag => $attributes ) {
- if ( preg_match( $re, $tag ) ) {
- $attributes['markdown'] = true;
- $tags[ $tag ] = $attributes;
- }
- }
-
- return $tags;
- }
-
- /**
- * TinyMCE needs to know not to strip the 'markdown' attribute. Unfortunately, it doesn't
- * really offer a nice API for whitelisting attributes, so we have to manually add it
- * to the schema instead.
- */
- public function after_wp_tiny_mce() {
-?>
-<script type="text/javascript">
-jQuery( function() {
- ( 'undefined' !== typeof tinymce ) && tinymce.on( 'AddEditor', function( event ) {
- event.editor.on( 'BeforeSetContent', function( event ) {
- var editor = event.target;
- Object.keys( editor.schema.elements ).forEach( function( key, index ) {
- editor.schema.elements[ key ].attributes['markdown'] = {};
- editor.schema.elements[ key ].attributesOrder.push( 'markdown' );
- } );
- } );
- }, true );
-} );
-</script>
-<?php
- }
-
- /**
- * Magic happens here. Markdown is converted and stored on post_content. Original Markdown is stored
- * in post_content_filtered so that we can continue editing as Markdown.
- * @param array $post_data The post data that will be inserted into the DB. Slashed.
- * @param array $postarr All the stuff that was in $_POST.
- * @return array $post_data with post_content and post_content_filtered modified
- */
- public function wp_insert_post_data( $post_data, $postarr ) {
- // $post_data array is slashed!
- $post_id = isset( $postarr['ID'] ) ? $postarr['ID'] : false;
- // bail early if markdown is disabled or this post type is unsupported.
- if ( ! $this->is_posting_enabled() || ! post_type_supports( $post_data['post_type'], self::POST_TYPE_SUPPORT ) ) {
- // it's disabled, but maybe this *was* a markdown post before.
- if ( $this->is_markdown( $post_id ) && ! empty( $post_data['post_content_filtered'] ) ) {
- $post_data['post_content_filtered'] = '';
- }
- // we have no context to determine supported post types in the `post_content_pre` hook,
- // which already ran to sanitize code blocks. Undo that.
- $post_data['post_content'] = $this->get_parser()->codeblock_restore( $post_data['post_content'] );
- return $post_data;
- }
- // rejigger post_content and post_content_filtered
- // revisions are already in the right place, except when we're restoring, but that's taken care of elsewhere
- // also prevent quick edit feature from overriding already-saved markdown (issue https://github.com/Automattic/jetpack/issues/636)
- if ( 'revision' !== $post_data['post_type'] && ! isset( $_POST['_inline_edit'] ) ) {
- /**
- * Filter the original post content passed to Markdown.
- *
- * @module markdown
- *
- * @since 2.8.0
- *
- * @param string $post_data['post_content'] Untransformed post content.
- */
- $post_data['post_content_filtered'] = apply_filters( 'wpcom_untransformed_content', $post_data['post_content'] );
- $post_data['post_content'] = $this->transform( $post_data['post_content'], array( 'id' => $post_id ) );
- /** This filter is already documented in core/wp-includes/default-filters.php */
- $post_data['post_content'] = apply_filters( 'content_save_pre', $post_data['post_content'] );
- } elseif ( 0 === strpos( $post_data['post_name'], $post_data['post_parent'] . '-autosave' ) ) {
- // autosaves for previews are weird
- /** This filter is already documented in modules/markdown/easy-markdown.php */
- $post_data['post_content_filtered'] = apply_filters( 'wpcom_untransformed_content', $post_data['post_content'] );
- $post_data['post_content'] = $this->transform( $post_data['post_content'], array( 'id' => $post_data['post_parent'] ) );
- /** This filter is already documented in core/wp-includes/default-filters.php */
- $post_data['post_content'] = apply_filters( 'content_save_pre', $post_data['post_content'] );
- }
-
- // set as markdown on the wp_insert_post hook later
- if ( $post_id )
- $this->monitoring['post'][ $post_id ] = true;
- else
- $this->monitoring['content'] = wp_unslash( $post_data['post_content'] );
- if ( 'revision' === $postarr['post_type'] && $this->is_markdown( $postarr['post_parent'] ) )
- $this->monitoring['parent'][ $postarr['post_parent'] ] = true;
-
- return $post_data;
- }
-
- /**
- * Calls on wp_insert_post action, after wp_insert_post_data. This way we can
- * still set postmeta on our revisions after it's all been deleted.
- * @param int $post_id The post ID that has just been added/updated
- * @return null
- */
- public function wp_insert_post( $post_id ) {
- $post_parent = get_post_field( 'post_parent', $post_id );
- // this didn't have an ID yet. Compare the content that was just saved.
- if ( isset( $this->monitoring['content'] ) && $this->monitoring['content'] === get_post_field( 'post_content', $post_id ) ) {
- unset( $this->monitoring['content'] );
- $this->set_as_markdown( $post_id );
- }
- if ( isset( $this->monitoring['post'][$post_id] ) ) {
- unset( $this->monitoring['post'][$post_id] );
- $this->set_as_markdown( $post_id );
- } elseif ( isset( $this->monitoring['parent'][$post_parent] ) ) {
- unset( $this->monitoring['parent'][$post_parent] );
- $this->set_as_markdown( $post_id );
- }
- }
-
- /**
- * Run a comment through Markdown. Easy peasy.
- * @param string $content
- * @return string
- */
- public function pre_comment_content( $content ) {
- return $this->transform( $content, array(
- 'id' => $this->comment_hash( $content ),
- ) );
- }
-
- protected function comment_hash( $content ) {
- return 'c-' . substr( md5( $content ), 0, 8 );
- }
-
- /**
- * Markdown conversion. Some DRYness for repetitive tasks.
- * @param string $text Content to be run through Markdown
- * @param array $args Arguments, with keys:
- * id: provide a string to prefix footnotes with a unique identifier
- * unslash: when true, expects and returns slashed data
- * decode_code_blocks: when true, assume that text in fenced code blocks is already
- * HTML encoded and should be decoded before being passed to Markdown, which does
- * its own encoding.
- * @return string Markdown-processed content
- */
- public function transform( $text, $args = array() ) {
- // If this contains Gutenberg content, let's keep it intact.
- if ( has_blocks( $text ) ) {
- return $text;
- }
-
- $args = wp_parse_args( $args, array(
- 'id' => false,
- 'unslash' => true,
- 'decode_code_blocks' => ! $this->get_parser()->use_code_shortcode
- ) );
- // probably need to unslash
- if ( $args['unslash'] )
- $text = wp_unslash( $text );
-
- /**
- * Filter the content to be run through Markdown, before it's transformed by Markdown.
- *
- * @module markdown
- *
- * @since 2.8.0
- *
- * @param string $text Content to be run through Markdown
- * @param array $args Array of Markdown options.
- */
- $text = apply_filters( 'wpcom_markdown_transform_pre', $text, $args );
- // ensure our paragraphs are separated
- $text = str_replace( array( '</p><p>', "</p>\n<p>" ), "</p>\n\n<p>", $text );
- // visual editor likes to add <p>s. Buh-bye.
- $text = $this->get_parser()->unp( $text );
- // sometimes we get an encoded > at start of line, breaking blockquotes
- $text = preg_replace( '/^&gt;/m', '>', $text );
- // prefixes are because we need to namespace footnotes by post_id
- $this->get_parser()->fn_id_prefix = $args['id'] ? $args['id'] . '-' : '';
- // If we're not using the code shortcode, prevent over-encoding.
- if ( $args['decode_code_blocks'] ) {
- $text = $this->get_parser()->codeblock_restore( $text );
- }
- // Transform it!
- $text = $this->get_parser()->transform( $text );
- // Fix footnotes - kses doesn't like the : IDs it supplies
- $text = preg_replace( '/((id|href)="#?fn(ref)?):/', "$1-", $text );
- // Markdown inserts extra spaces to make itself work. Buh-bye.
- $text = rtrim( $text );
- /**
- * Filter the content to be run through Markdown, after it was transformed by Markdown.
- *
- * @module markdown
- *
- * @since 2.8.0
- *
- * @param string $text Content to be run through Markdown
- * @param array $args Array of Markdown options.
- */
- $text = apply_filters( 'wpcom_markdown_transform_post', $text, $args );
-
- // probably need to re-slash
- if ( $args['unslash'] )
- $text = wp_slash( $text );
-
- return $text;
- }
-
- /**
- * Shows Markdown in the Revisions screen, and ensures that post_content_filtered
- * is maintained on revisions
- * @param array $fields Post fields pertinent to revisions
- * @return array Modified array to include post_content_filtered
- */
- public function _wp_post_revision_fields( $fields ) {
- $fields['post_content_filtered'] = __( 'Markdown content', 'jetpack' );
- return $fields;
- }
-
- /**
- * Do some song and dance to keep all post_content and post_content_filtered content
- * in the expected place when a post revision is restored.
- * @param int $post_id The post ID have a restore done to it
- * @param int $revision_id The revision ID being restored
- * @return null
- */
- public function wp_restore_post_revision( $post_id, $revision_id ) {
- if ( $this->is_markdown( $revision_id ) ) {
- $revision = get_post( $revision_id, ARRAY_A );
- $post = get_post( $post_id, ARRAY_A );
- $post['post_content'] = $revision['post_content_filtered']; // Yes, we put it in post_content, because our wp_insert_post_data() expects that
- // set this flag so we can restore the post_content_filtered on the last revision later
- $this->monitoring['restore'] = true;
- // let's not make a revision of our fixing update
- add_filter( 'wp_revisions_to_keep', '__return_false', 99 );
- wp_update_post( $post );
- $this->fix_latest_revision_on_restore( $post_id );
- remove_filter( 'wp_revisions_to_keep', '__return_false', 99 );
- }
- }
-
- /**
- * We need to ensure the last revision has Markdown, not HTML in its post_content_filtered
- * column after a restore.
- * @param int $post_id The post ID that was just restored.
- * @return null
- */
- protected function fix_latest_revision_on_restore( $post_id ) {
- global $wpdb;
- $post = get_post( $post_id );
- $last_revision = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE post_type = 'revision' AND post_parent = %d ORDER BY ID DESC", $post->ID ) );
- $last_revision->post_content_filtered = $post->post_content_filtered;
- wp_insert_post( (array) $last_revision );
- }
-
- /**
- * Kicks off magic for an XML-RPC session. We want to keep editing Markdown
- * and publishing HTML.
- * @param string $xmlrpc_method The current XML-RPC method
- * @return null
- */
- public function xmlrpc_actions( $xmlrpc_method ) {
- switch ( $xmlrpc_method ) {
- case 'metaWeblog.getRecentPosts':
- case 'wp.getPosts':
- case 'wp.getPages':
- add_action( 'parse_query', array( $this, 'make_filterable' ), 10, 1 );
- break;
- case 'wp.getPost':
- $this->prime_post_cache();
- break;
- }
- }
-
- /**
- * metaWeblog.getPost and wp.getPage fire xmlrpc_call action *after* get_post() is called.
- * So, we have to detect those methods and prime the post cache early.
- * @return null
- */
- protected function check_for_early_methods() {
- $raw_post_data = file_get_contents( "php://input" );
- if ( false === strpos( $raw_post_data, 'metaWeblog.getPost' )
- && false === strpos( $raw_post_data, 'wp.getPage' ) ) {
- return;
- }
- include_once( ABSPATH . WPINC . '/class-IXR.php' );
- $message = new IXR_Message( $raw_post_data );
- $message->parse();
- $post_id_position = 'metaWeblog.getPost' === $message->methodName ? 0 : 1;
- $this->prime_post_cache( $message->params[ $post_id_position ] );
- }
-
- /**
- * Prime the post cache with swapped post_content. This is a sneaky way of getting around
- * the fact that there are no good hooks to call on the *.getPost xmlrpc methods.
- *
- * @return null
- */
- private function prime_post_cache( $post_id = false ) {
- global $wp_xmlrpc_server;
- if ( ! $post_id ) {
- $post_id = $wp_xmlrpc_server->message->params[3];
- }
-
- // prime the post cache
- if ( $this->is_markdown( $post_id ) ) {
- $post = get_post( $post_id );
- if ( ! empty( $post->post_content_filtered ) ) {
- wp_cache_delete( $post->ID, 'posts' );
- $post = $this->swap_for_editing( $post );
- wp_cache_add( $post->ID, $post, 'posts' );
- $this->posts_to_uncache[] = $post_id;
- }
- }
- // uncache munged posts if using a persistent object cache
- if ( wp_using_ext_object_cache() ) {
- add_action( 'shutdown', array( $this, 'uncache_munged_posts' ) );
- }
- }
-
- /**
- * Swaps `post_content_filtered` back to `post_content` for editing purposes.
- * @param object $post WP_Post object
- * @return object WP_Post object with swapped `post_content_filtered` and `post_content`
- */
- protected function swap_for_editing( $post ) {
- $markdown = $post->post_content_filtered;
- // unencode encoded code blocks
- $markdown = $this->get_parser()->codeblock_restore( $markdown );
- // restore beginning of line blockquotes
- $markdown = preg_replace( '/^&gt; /m', '> ', $markdown );
- $post->post_content_filtered = $post->post_content;
- $post->post_content = $markdown;
- return $post;
- }
-
-
- /**
- * We munge the post cache to serve proper markdown content to XML-RPC clients.
- * Uncache these after the XML-RPC session ends.
- * @return null
- */
- public function uncache_munged_posts() {
- // $this context gets lost in testing sometimes. Weird.
- foreach( WPCom_Markdown::get_instance()->posts_to_uncache as $post_id ) {
- wp_cache_delete( $post_id, 'posts' );
- }
- }
-
- /**
- * Since *.(get)?[Rr]ecentPosts calls get_posts with suppress filters on, we need to
- * turn them back on so that we can swap things for editing.
- * @param object $wp_query WP_Query object
- * @return null
- */
- public function make_filterable( $wp_query ) {
- $wp_query->set( 'suppress_filters', false );
- add_action( 'the_posts', array( $this, 'the_posts' ), 10, 2 );
- }
-
- /**
- * Swaps post_content and post_content_filtered for editing.
- * @param array $posts Posts returned by the just-completed query
- * @param object $wp_query Current WP_Query object
- * @return array Modified $posts
- */
- public function the_posts( $posts, $wp_query ) {
- foreach ( $posts as $key => $post ) {
- if ( $this->is_markdown( $post->ID ) && ! empty( $posts[ $key ]->post_content_filtered ) ) {
- $markdown = $posts[ $key ]->post_content_filtered;
- $posts[ $key ]->post_content_filtered = $posts[ $key ]->post_content;
- $posts[ $key ]->post_content = $markdown;
- }
- }
- return $posts;
- }
-
- /**
- * Singleton silence is golden
- */
- private function __construct() {}
-}
-
-add_action( 'init', array( WPCom_Markdown::get_instance(), 'load' ) );
diff --git a/plugins/jetpack/modules/masterbar.php b/plugins/jetpack/modules/masterbar.php
deleted file mode 100644
index 8efeae3e..00000000
--- a/plugins/jetpack/modules/masterbar.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Module Name: WordPress.com Toolbar
- * Module Description: Replaces the admin bar with a useful toolbar to quickly manage your site via WordPress.com.
- * Sort Order: 38
- * Recommendation Order: 16
- * First Introduced: 4.8
- * Requires Connection: Yes
- * Auto Activate: No
- * Module Tags: General
- * Additional Search Queries: adminbar, masterbar
- */
-
-require dirname( __FILE__ ) . '/masterbar/masterbar.php';
-
-// In order to be able to tell if it's an AMP request or not we have to hook into parse_query at a later priority.
-add_action( 'admin_bar_init', 'jetpack_initialize_masterbar', 99 );
-
-/**
- * Initializes the Masterbar in case the request is not AMP.
- */
-function jetpack_initialize_masterbar() {
- if ( ! Jetpack_AMP_Support::is_amp_request() ) {
- new A8C_WPCOM_Masterbar();
- }
-}
diff --git a/plugins/jetpack/modules/masterbar/masterbar.php b/plugins/jetpack/modules/masterbar/masterbar.php
deleted file mode 100644
index 3f39f2d0..00000000
--- a/plugins/jetpack/modules/masterbar/masterbar.php
+++ /dev/null
@@ -1,1038 +0,0 @@
-<?php
-
-require_once dirname( __FILE__ ) . '/rtl-admin-bar.php';
-
-class A8C_WPCOM_Masterbar {
- /**
- * Use for testing changes made to remotely enqueued scripts and styles on your sandbox.
- * If not set it will default to loading the ones from WordPress.com.
- *
- * @var string $sandbox_url
- */
- private $sandbox_url = '';
-
- private $locale;
-
- private $user_id;
- private $user_data;
- private $user_login;
- private $user_email;
- private $display_name;
- private $primary_site_slug;
- private $user_text_direction;
- private $user_site_count;
-
- function __construct() {
- $this->locale = $this->get_locale();
- $this->user_id = get_current_user_id();
-
- // Limit the masterbar to be shown only to connected Jetpack users.
- if ( ! Jetpack::is_user_connected( $this->user_id ) ) {
- return;
- }
-
- Jetpack::dns_prefetch( array(
- '//s0.wp.com',
- '//s1.wp.com',
- '//s2.wp.com',
- '//0.gravatar.com',
- '//1.gravatar.com',
- '//2.gravatar.com',
- ) );
-
- // Atomic only
- if ( jetpack_is_atomic_site() ) {
- // override user setting that hides masterbar from site's front.
- // https://github.com/Automattic/jetpack/issues/7667
- add_filter( 'show_admin_bar', '__return_true' );
- }
-
- $this->user_data = Jetpack::get_connected_user_data( $this->user_id );
- $this->user_login = $this->user_data['login'];
- $this->user_email = $this->user_data['email'];
- $this->display_name = $this->user_data['display_name'];
- $this->user_site_count = $this->user_data['site_count'];
-
- // Used to build menu links that point directly to Calypso.
- $this->primary_site_slug = Jetpack::build_raw_urls( get_home_url() );
-
- // Used for display purposes and for building WP Admin links.
- $this->primary_site_url = str_replace( '::', '/', $this->primary_site_slug );
-
- // We need to use user's setting here, instead of relying on current blog's text direction
- $this->user_text_direction = $this->user_data['text_direction'];
-
- if ( $this->is_rtl() ) {
- // Extend core WP_Admin_Bar class in order to add rtl styles
- add_filter( 'wp_admin_bar_class', array( $this, 'get_rtl_admin_bar_class' ) );
- }
- add_filter( 'admin_body_class', array( $this, 'admin_body_class' ) );
-
- add_action( 'wp_before_admin_bar_render', array( $this, 'replace_core_masterbar' ), 99999 );
-
- add_action( 'wp_enqueue_scripts', array( $this, 'add_styles_and_scripts' ) );
- add_action( 'admin_enqueue_scripts', array( $this, 'add_styles_and_scripts' ) );
-
- add_action( 'wp_enqueue_scripts', array( $this, 'remove_core_styles' ) );
- add_action( 'admin_enqueue_scripts', array( $this, 'remove_core_styles' ) );
-
- if ( Jetpack::is_module_active( 'notes' ) && $this->is_rtl() ) {
- // Override Notification module to include RTL styles
- add_action( 'a8c_wpcom_masterbar_enqueue_rtl_notification_styles', '__return_true' );
- }
-
- add_action( 'wp_logout', array( $this, 'maybe_logout_user_from_wpcom' ) );
- }
-
- public function maybe_logout_user_from_wpcom() {
- /**
- * Whether we should sign out from wpcom too when signing out from the masterbar.
- *
- * @since 5.9.0
- *
- * @param bool $masterbar_should_logout_from_wpcom True by default.
- */
- $masterbar_should_logout_from_wpcom = apply_filters( 'jetpack_masterbar_should_logout_from_wpcom', true );
- if (
- isset( $_GET['context'] ) &&
- 'masterbar' === $_GET['context'] &&
- $masterbar_should_logout_from_wpcom
- ) {
- do_action( 'wp_masterbar_logout' );
- }
- }
-
- public function get_rtl_admin_bar_class() {
- return 'RTL_Admin_Bar';
- }
-
- /**
- * Adds CSS classes to admin body tag.
- *
- * @since 5.1
- *
- * @param string $admin_body_classes CSS classes that will be added.
- *
- * @return string
- */
- public function admin_body_class( $admin_body_classes ) {
- return "$admin_body_classes jetpack-masterbar";
- }
-
- public function remove_core_styles() {
- wp_dequeue_style( 'admin-bar' );
- }
-
- public function is_rtl() {
- return $this->user_text_direction === 'rtl' ? true : false;
- }
-
- public function add_styles_and_scripts() {
-
- if ( $this->is_rtl() ) {
- wp_enqueue_style( 'a8c-wpcom-masterbar-rtl', $this->wpcom_static_url( '/wp-content/mu-plugins/admin-bar/rtl/wpcom-admin-bar-rtl.css' ), array(), JETPACK__VERSION );
- wp_enqueue_style( 'a8c-wpcom-masterbar-overrides-rtl', $this->wpcom_static_url( '/wp-content/mu-plugins/admin-bar/masterbar-overrides/rtl/masterbar-rtl.css' ), array(), JETPACK__VERSION );
- } else {
- wp_enqueue_style( 'a8c-wpcom-masterbar', $this->wpcom_static_url( '/wp-content/mu-plugins/admin-bar/wpcom-admin-bar.css' ), array(), JETPACK__VERSION );
- wp_enqueue_style( 'a8c-wpcom-masterbar-overrides', $this->wpcom_static_url( '/wp-content/mu-plugins/admin-bar/masterbar-overrides/masterbar.css' ), array(), JETPACK__VERSION );
- }
-
- // Local overrides
- wp_enqueue_style( 'a8c_wpcom_css_override', plugins_url( 'overrides.css', __FILE__ ), array(), JETPACK__VERSION );
-
- if ( ! Jetpack::is_module_active( 'notes ' ) ) {
- // Masterbar is relying on some icons from noticons.css
- wp_enqueue_style( 'noticons', $this->wpcom_static_url( '/i/noticons/noticons.css' ), array(), JETPACK__VERSION . '-' . gmdate( 'oW' ) );
- }
-
- wp_enqueue_script(
- 'jetpack-accessible-focus',
- Jetpack::get_file_url_for_environment( '_inc/build/accessible-focus.min.js', '_inc/accessible-focus.js' ),
- array(),
- JETPACK__VERSION
- );
- wp_enqueue_script(
- 'a8c_wpcom_masterbar_tracks_events',
- Jetpack::get_file_url_for_environment(
- '_inc/build/masterbar/tracks-events.min.js',
- 'modules/masterbar/tracks-events.js'
- ),
- array( 'jquery' ),
- JETPACK__VERSION
- );
-
- wp_enqueue_script( 'a8c_wpcom_masterbar_overrides', $this->wpcom_static_url( '/wp-content/mu-plugins/admin-bar/masterbar-overrides/masterbar.js' ), array( 'jquery' ), JETPACK__VERSION );
- }
-
- function wpcom_static_url( $file ) {
- if ( ! empty( $this->sandbox_url ) ) {
- // For testing undeployed changes to remotely enqueued scripts and styles.
- return set_url_scheme( $this->sandbox_url . $file, 'https');
- }
-
- $i = hexdec( substr( md5( $file ), - 1 ) ) % 2;
- $url = 'https://s' . $i . '.wp.com' . $file;
-
- return set_url_scheme( $url, 'https');
- }
-
- public function replace_core_masterbar() {
- global $wp_admin_bar;
-
- if ( ! is_object( $wp_admin_bar ) ) {
- return false;
- }
-
- $this->clear_core_masterbar( $wp_admin_bar );
- $this->build_wpcom_masterbar( $wp_admin_bar );
- }
-
- // Remove all existing toolbar entries from core Masterbar
- public function clear_core_masterbar( $wp_admin_bar ) {
- foreach ( $wp_admin_bar->get_nodes() as $node ) {
- $wp_admin_bar->remove_node( $node->id );
- }
- }
-
- // Add entries corresponding to WordPress.com Masterbar
- public function build_wpcom_masterbar( $wp_admin_bar ) {
- // Menu groups
- $this->wpcom_adminbar_add_secondary_groups( $wp_admin_bar );
-
- // Left part
- $this->add_my_sites_submenu( $wp_admin_bar );
- $this->add_reader_submenu( $wp_admin_bar );
-
- // Right part
- if ( Jetpack::is_module_active( 'notes' ) ) {
- $this->add_notifications( $wp_admin_bar );
- }
-
- $this->add_me_submenu( $wp_admin_bar );
- $this->add_write_button( $wp_admin_bar );
- }
-
- public function get_locale() {
- $wpcom_locale = get_locale();
-
- if ( ! class_exists( 'GP_Locales' ) ) {
- if ( defined( 'JETPACK__GLOTPRESS_LOCALES_PATH' ) && file_exists( JETPACK__GLOTPRESS_LOCALES_PATH ) ) {
- require JETPACK__GLOTPRESS_LOCALES_PATH;
- }
- }
-
- if ( class_exists( 'GP_Locales' ) ) {
- $wpcom_locale_object = GP_Locales::by_field( 'wp_locale', get_locale() );
- if ( $wpcom_locale_object instanceof GP_Locale ) {
- $wpcom_locale = $wpcom_locale_object->slug;
- }
- }
-
- return $wpcom_locale;
- }
-
- public function add_notifications( $wp_admin_bar ) {
- $wp_admin_bar->add_node( array(
- 'id' => 'notes',
- 'title' => '<span id="wpnt-notes-unread-count" class="wpnt-loading wpn-read"></span>
- <span class="screen-reader-text">' . esc_html__( 'Notifications', 'jetpack' ) . '</span>
- <span class="noticon noticon-bell"></span>',
- 'meta' => array(
- 'html' => '<div id="wpnt-notes-panel2" style="display:none" lang="'. esc_attr( $this->locale ) . '" dir="' . ( $this->is_rtl() ? 'rtl' : 'ltr' ) . '">' .
- '<div class="wpnt-notes-panel-header">' .
- '<span class="wpnt-notes-header">' .
- esc_html__( 'Notifications', 'jetpack' ) .
- '</span>' .
- '<span class="wpnt-notes-panel-link">' .
- '</span>' .
- '</div>' .
- '</div>',
- 'class' => 'menupop mb-trackable',
- ),
- 'parent' => 'top-secondary',
- ) );
- }
-
- public function add_reader_submenu( $wp_admin_bar ) {
- $wp_admin_bar->add_menu( array(
- 'parent' => 'root-default',
- 'id' => 'newdash',
- 'title' => esc_html__( 'Reader', 'jetpack' ),
- 'href' => '#',
- 'meta' => array(
- 'class' => 'mb-trackable',
- )
- ) );
-
- $wp_admin_bar->add_menu( array(
- 'parent' => 'newdash',
- 'id' => 'streams-header',
- 'title' => esc_html_x(
- 'Streams',
- 'Title for Reader sub-menu that contains followed sites, likes, and recommendations',
- 'jetpack'
- ),
- 'meta' => array(
- 'class' => 'ab-submenu-header',
- )
- ) );
-
- $following_title = $this->create_menu_item_pair(
- array(
- 'url' => 'https://wordpress.com/',
- 'id' => 'wp-admin-bar-followed-sites',
- 'label' => esc_html__( 'Followed Sites', 'jetpack' ),
- ),
- array(
- 'url' => 'https://wordpress.com/following/edit',
- 'id' => 'wp-admin-bar-reader-followed-sites-manage',
- 'label' => esc_html__( 'Manage', 'jetpack' ),
- )
- );
-
- $wp_admin_bar->add_menu( array(
- 'parent' => 'newdash',
- 'id' => 'following',
- 'title' => $following_title,
- 'meta' => array( 'class' => 'inline-action' )
- ) );
-
- $wp_admin_bar->add_menu( array(
- 'parent' => 'newdash',
- 'id' => 'discover-discover',
- 'title' => esc_html__( 'Discover', 'jetpack' ),
- 'href' => 'https://wordpress.com/discover',
- 'meta' => array(
- 'class' => 'mb-icon-spacer',
- )
- ) );
-
- $wp_admin_bar->add_menu( array(
- 'parent' => 'newdash',
- 'id' => 'discover-search',
- 'title' => esc_html__( 'Search', 'jetpack' ),
- 'href' => 'https://wordpress.com/read/search',
- 'meta' => array(
- 'class' => 'mb-icon-spacer',
- )
- ) );
-
- $wp_admin_bar->add_menu( array(
- 'parent' => 'newdash',
- 'id' => 'discover-recommended-blogs',
- 'title' => esc_html__( 'Recommendations', 'jetpack' ),
- 'href' => 'https://wordpress.com/recommendations',
- 'meta' => array(
- 'class' => 'mb-icon-spacer',
- )
- ) );
-
- $wp_admin_bar->add_menu( array(
- 'parent' => 'newdash',
- 'id' => 'my-activity-my-likes',
- 'title' => esc_html__( 'My Likes', 'jetpack' ),
- 'href' => 'https://wordpress.com/activities/likes',
- 'meta' => array(
- 'class' => 'mb-icon-spacer',
- )
- ) );
-
- }
-
- public function create_menu_item_pair( $primary, $secondary ) {
- $primary_class = 'ab-item ab-primary mb-icon';
- $secondary_class = 'ab-secondary';
-
- $primary_anchor = $this->create_menu_item_anchor( $primary_class, $primary['url'], $primary['label'], $primary['id'] );
- $secondary_anchor = $this->create_menu_item_anchor( $secondary_class, $secondary['url'], $secondary['label'], $secondary['id'] );
-
- return $primary_anchor . $secondary_anchor;
- }
-
- public function create_menu_item_anchor( $class, $url, $label, $id ) {
- return '<a href="' . $url . '" class="' . $class . '" id="' . $id . '">' . $label . '</a>';
- }
-
- public function wpcom_adminbar_add_secondary_groups( $wp_admin_bar ) {
- $wp_admin_bar->add_group( array(
- 'id' => 'root-default',
- 'meta' => array(
- 'class' => 'ab-top-menu',
- ),
- ) );
-
- $wp_admin_bar->add_group( array(
- 'parent' => 'blog',
- 'id' => 'blog-secondary',
- 'meta' => array(
- 'class' => 'ab-sub-secondary',
- ),
- ) );
-
- $wp_admin_bar->add_group( array(
- 'id' => 'top-secondary',
- 'meta' => array(
- 'class' => 'ab-top-secondary',
- ),
- ) );
- }
-
- public function add_me_submenu( $wp_admin_bar ) {
- $user_id = get_current_user_id();
- if ( empty( $user_id ) ) {
- return;
- }
-
- $avatar = get_avatar( $this->user_email, 32, 'mm', '', array( 'force_display' => true ) );
- $class = empty( $avatar ) ? 'mb-trackable' : 'with-avatar mb-trackable';
-
- // Add the 'Me' menu
- $wp_admin_bar->add_menu( array(
- 'id' => 'my-account',
- 'parent' => 'top-secondary',
- 'title' => $avatar . '<span class="ab-text">' . esc_html__( 'Me', 'jetpack' ) . '</span>',
- 'href' => '#',
- 'meta' => array(
- 'class' => $class,
- ),
- ) );
-
- $id = 'user-actions';
- $wp_admin_bar->add_group( array(
- 'parent' => 'my-account',
- 'id' => $id,
- ) );
-
- $settings_url = 'https://wordpress.com/me/account';
-
- $logout_url = wp_logout_url();
- $logout_url = add_query_arg( 'context', 'masterbar', $logout_url );
-
- $user_info = get_avatar( $this->user_email, 128, 'mm', '', array( 'force_display' => true ) );
- $user_info .= '<span class="display-name">' . $this->display_name . '</span>';
- $user_info .= '<a class="username" href="http://gravatar.com/' . $this->user_login . '">@' . $this->user_login . '</a>';
-
- $user_info .= sprintf(
- '<div><a href="%s" class="ab-sign-out">%s</a></div>',
- $logout_url,
- esc_html__( 'Sign Out', 'jetpack' )
- );
-
- $wp_admin_bar->add_menu( array(
- 'parent' => $id,
- 'id' => 'user-info',
- 'title' => $user_info,
- 'meta' => array(
- 'class' => 'user-info user-info-item',
- 'tabindex' => -1,
- ),
- ) );
-
- $wp_admin_bar->add_menu( array(
- 'parent' => $id,
- 'id' => 'profile-header',
- 'title' => esc_html__( 'Profile', 'jetpack' ),
- 'meta' => array(
- 'class' => 'ab-submenu-header',
- ),
- ) );
-
- $wp_admin_bar->add_menu( array(
- 'parent' => $id,
- 'id' => 'my-profile',
- 'title' => esc_html__( 'My Profile', 'jetpack' ),
- 'href' => 'https://wordpress.com/me',
- 'meta' => array(
- 'class' => 'mb-icon',
- ),
- ) );
-
- $wp_admin_bar->add_menu( array(
- 'parent' => $id,
- 'id' => 'account-settings',
- 'title' => esc_html__( 'Account Settings', 'jetpack' ),
- 'href' => $settings_url,
- 'meta' => array(
- 'class' => 'mb-icon',
- ),
- ) );
-
- $wp_admin_bar->add_menu( array(
- 'parent' => $id,
- 'id' => 'billing',
- 'title' => esc_html__( 'Manage Purchases', 'jetpack' ),
- 'href' => 'https://wordpress.com/me/purchases',
- 'meta' => array(
- 'class' => 'mb-icon',
- ),
- ) );
-
- $wp_admin_bar->add_menu( array(
- 'parent' => $id,
- 'id' => 'security',
- 'title' => esc_html__( 'Security', 'jetpack' ),
- 'href' => 'https://wordpress.com/me/security',
- 'meta' => array(
- 'class' => 'mb-icon',
- ),
- ) );
-
- $wp_admin_bar->add_menu( array(
- 'parent' => $id,
- 'id' => 'notifications',
- 'title' => esc_html__( 'Notifications', 'jetpack' ),
- 'href' => 'https://wordpress.com/me/notifications',
- 'meta' => array(
- 'class' => 'mb-icon',
- ),
- ) );
-
- $wp_admin_bar->add_menu( array(
- 'parent' => $id,
- 'id' => 'special-header',
- 'title' => esc_html_x(
- 'Special',
- 'Title for Me sub-menu that contains Get Apps, Next Steps, and Help options',
- 'jetpack'
- ),
- 'meta' => array(
- 'class' => 'ab-submenu-header',
- ),
- ) );
-
- $wp_admin_bar->add_menu( array(
- 'parent' => $id,
- 'id' => 'get-apps',
- 'title' => esc_html__( 'Get Apps', 'jetpack' ),
- 'href' => 'https://wordpress.com/me/get-apps',
- 'meta' => array(
- 'class' => 'mb-icon user-info-item',
- ),
- ) );
-
- $help_link = 'https://jetpack.com/support/';
-
- if ( jetpack_is_atomic_site() ) {
- $help_link = 'https://wordpress.com/help';
- }
-
- $wp_admin_bar->add_menu( array(
- 'parent' => $id,
- 'id' => 'help',
- 'title' => esc_html__( 'Help', 'jetpack' ),
- 'href' => $help_link,
- 'meta' => array(
- 'class' => 'mb-icon user-info-item',
- ),
- ) );
- }
-
- public function add_write_button( $wp_admin_bar ) {
- $current_user = wp_get_current_user();
-
- $posting_blog_id = get_current_blog_id();
- if ( ! is_user_member_of_blog( get_current_user_id(), get_current_blog_id() ) ) {
- $posting_blog_id = $current_user->primary_blog;
- }
-
- $user_can_post = current_user_can_for_blog( $posting_blog_id, 'publish_posts' );
-
- if ( ! $posting_blog_id || ! $user_can_post ) {
- return;
- }
-
- $blog_post_page = 'https://wordpress.com/post/' . esc_attr( $this->primary_site_slug );
-
- $wp_admin_bar->add_menu( array(
- 'parent' => 'top-secondary',
- 'id' => 'ab-new-post',
- 'href' => $blog_post_page,
- 'title' => '<span>' . esc_html__( 'Write', 'jetpack' ) . '</span>',
- 'meta' => array(
- 'class' => 'mb-trackable',
- )
- ) );
- }
-
- public function add_my_sites_submenu( $wp_admin_bar ) {
- $current_user = wp_get_current_user();
-
- $blog_name = get_bloginfo( 'name' );
- if ( empty( $blog_name ) ) {
- $blog_name = $this->primary_site_slug;
- }
-
- if ( mb_strlen( $blog_name ) > 20 ) {
- $blog_name = mb_substr( html_entity_decode( $blog_name, ENT_QUOTES ), 0, 20 ) . '&hellip;';
- }
-
- $wp_admin_bar->add_menu( array(
- 'parent' => 'root-default',
- 'id' => 'blog',
- 'title' => _n( 'My Site', 'My Sites', $this->user_site_count, 'jetpack' ),
- 'href' => '#',
- 'meta' => array(
- 'class' => 'my-sites mb-trackable',
- ),
- ) );
-
- if ( $this->user_site_count > 1 ) {
- $wp_admin_bar->add_menu( array(
- 'parent' => 'blog',
- 'id' => 'switch-site',
- 'title' => esc_html__( 'Switch Site', 'jetpack' ),
- 'href' => 'https://wordpress.com/sites',
- ) );
- } else {
- $wp_admin_bar->add_menu( array(
- 'parent' => 'blog',
- 'id' => 'new-site',
- 'title' => esc_html__( '+ Add New WordPress', 'jetpack' ),
- 'href' => 'https://wordpress.com/start?ref=admin-bar-logged-in',
- ) );
- }
-
- if ( is_user_member_of_blog( $current_user->ID ) ) {
- $blavatar = '';
- $class = 'current-site';
-
- if ( has_site_icon() ) {
- $src = get_site_icon_url();
- $blavatar = '<img class="avatar" src="'. esc_attr( $src ) . '" alt="Current site avatar">';
- $class = 'has-blavatar';
- }
-
- $blog_info = '<div class="ab-site-icon">' . $blavatar . '</div>';
- $blog_info .= '<span class="ab-site-title">' . esc_html( $blog_name ) . '</span>';
- $blog_info .= '<span class="ab-site-description">' . esc_html( $this->primary_site_url ) . '</span>';
-
- $wp_admin_bar->add_menu( array(
- 'parent' => 'blog',
- 'id' => 'blog-info',
- 'title' => $blog_info,
- 'href' => esc_url( trailingslashit( $this->primary_site_url ) ),
- 'meta' => array(
- 'class' => $class,
- ),
- ) );
- }
-
- // Site Preview
- if ( is_admin() ) {
- $wp_admin_bar->add_menu( array(
- 'parent' => 'blog',
- 'id' => 'site-view',
- 'title' => __( 'View Site', 'jetpack' ),
- 'href' => home_url(),
- 'meta' => array(
- 'class' => 'mb-icon',
- 'target' => '_blank',
- ),
- ) );
- }
-
- // Stats
- if ( Jetpack::is_module_active( 'stats' ) ) {
- $wp_admin_bar->add_menu( array(
- 'parent' => 'blog',
- 'id' => 'blog-stats',
- 'title' => esc_html__( 'Stats', 'jetpack' ),
- 'href' => 'https://wordpress.com/stats/' . esc_attr( $this->primary_site_slug ),
- 'meta' => array(
- 'class' => 'mb-icon',
- ),
- ) );
- }
-
- if ( current_user_can( 'manage_options' ) ) {
- $wp_admin_bar->add_menu( array(
- 'parent' => 'blog',
- 'id' => 'activity',
- 'title' => esc_html__( 'Activity', 'jetpack' ),
- 'href' => 'https://wordpress.com/activity-log/' . esc_attr( $this->primary_site_slug ),
- 'meta' => array(
- 'class' => 'mb-icon',
- ),
- ) );
- }
-
- // Add Calypso plans link and plan type indicator
- if ( is_user_member_of_blog( $current_user->ID ) ) {
- $plans_url = 'https://wordpress.com/plans/' . esc_attr( $this->primary_site_slug );
- $label = esc_html__( 'Plan', 'jetpack' );
- $plan = Jetpack_Plan::get();
-
- $plan_title = $this->create_menu_item_pair(
- array(
- 'url' => $plans_url,
- 'id' => 'wp-admin-bar-plan',
- 'label' => $label,
- ),
- array(
- 'url' => $plans_url,
- 'id' => 'wp-admin-bar-plan-badge',
- 'label' => $plan['product_name_short']
- )
- );
-
- $wp_admin_bar->add_menu( array(
- 'parent' => 'blog',
- 'id' => 'plan',
- 'title' => $plan_title,
- 'meta' => array(
- 'class' => 'inline-action',
- ),
- ) );
- }
-
- // Publish group
- $wp_admin_bar->add_group( array(
- 'parent' => 'blog',
- 'id' => 'publish',
- ) );
-
- // Publish header
- $wp_admin_bar->add_menu( array(
- 'parent' => 'publish',
- 'id' => 'publish-header',
- 'title' => esc_html_x( 'Manage', 'admin bar menu group label', 'jetpack' ),
- 'meta' => array(
- 'class' => 'ab-submenu-header',
- ),
- ) );
-
- // Pages
- $pages_title = $this->create_menu_item_pair(
- array(
- 'url' => 'https://wordpress.com/pages/' . esc_attr( $this->primary_site_slug ),
- 'id' => 'wp-admin-bar-edit-page',
- 'label' => esc_html__( 'Site Pages', 'jetpack' ),
- ),
- array(
- 'url' => 'https://wordpress.com/page/' . esc_attr( $this->primary_site_slug ),
- 'id' => 'wp-admin-bar-new-page-badge',
- 'label' => esc_html_x( 'Add', 'admin bar menu new item label', 'jetpack' ),
- )
- );
-
- if ( ! current_user_can( 'edit_pages' ) ) {
- $pages_title = $this->create_menu_item_anchor(
- 'ab-item ab-primary mb-icon',
- 'https://wordpress.com/pages/' . esc_attr( $this->primary_site_slug ),
- esc_html__( 'Site Pages', 'jetpack' ),
- 'wp-admin-bar-edit-page'
- );
- }
-
- $wp_admin_bar->add_menu( array(
- 'parent' => 'publish',
- 'id' => 'new-page',
- 'title' => $pages_title,
- 'meta' => array(
- 'class' => 'inline-action',
- ),
- ) );
-
- // Blog Posts
- $posts_title = $this->create_menu_item_pair(
- array(
- 'url' => 'https://wordpress.com/posts/' . esc_attr( $this->primary_site_slug ),
- 'id' => 'wp-admin-bar-edit-post',
- 'label' => esc_html__( 'Blog Posts', 'jetpack' ),
- ),
- array(
- 'url' => 'https://wordpress.com/post/' . esc_attr( $this->primary_site_slug ),
- 'id' => 'wp-admin-bar-new-post-badge',
- 'label' => esc_html_x( 'Add', 'admin bar menu new item label', 'jetpack' ),
- )
- );
-
- if ( ! current_user_can( 'edit_posts' ) ) {
- $posts_title = $this->create_menu_item_anchor(
- 'ab-item ab-primary mb-icon',
- 'https://wordpress.com/posts/' . esc_attr( $this->primary_site_slug ),
- esc_html__( 'Blog Posts', 'jetpack' ),
- 'wp-admin-bar-edit-post'
- );
- }
-
- $wp_admin_bar->add_menu( array(
- 'parent' => 'publish',
- 'id' => 'new-post',
- 'title' => $posts_title,
- 'meta' => array(
- 'class' => 'inline-action mb-trackable',
- ),
- ) );
-
- // Comments
- if ( current_user_can( 'moderate_comments' ) ) {
- $wp_admin_bar->add_menu( array(
- 'parent' => 'publish',
- 'id' => 'comments',
- 'title' => __( 'Comments' ),
- 'href' => 'https://wordpress.com/comments/' . esc_attr( $this->primary_site_slug ),
- 'meta' => array(
- 'class' => 'mb-icon',
- ),
- ) );
- }
-
- // Testimonials
- if ( Jetpack::is_module_active( 'custom-content-types' ) && get_option( 'jetpack_testimonial' ) ) {
- $testimonials_title = $this->create_menu_item_pair(
- array(
- 'url' => 'https://wordpress.com/types/jetpack-testimonial/' . esc_attr( $this->primary_site_slug ),
- 'id' => 'wp-admin-bar-edit-testimonial',
- 'label' => esc_html__( 'Testimonials', 'jetpack' ),
- ),
- array(
- 'url' => 'https://wordpress.com/edit/jetpack-testimonial/' . esc_attr( $this->primary_site_slug ),
- 'id' => 'wp-admin-bar-new-testimonial',
- 'label' => esc_html_x( 'Add', 'Button label for adding a new item via the toolbar menu', 'jetpack' ),
- )
- );
-
- if ( ! current_user_can( 'edit_pages' ) ) {
- $testimonials_title = $this->create_menu_item_anchor(
- 'ab-item ab-primary mb-icon',
- 'https://wordpress.com/types/jetpack-testimonial/' . esc_attr( $this->primary_site_slug ),
- esc_html__( 'Testimonials', 'jetpack' ),
- 'wp-admin-bar-edit-testimonial'
- );
- }
-
- $wp_admin_bar->add_menu( array(
- 'parent' => 'publish',
- 'id' => 'new-jetpack-testimonial',
- 'title' => $testimonials_title,
- 'meta' => array(
- 'class' => 'inline-action',
- ),
- ) );
- }
-
- // Portfolio
- if ( Jetpack::is_module_active( 'custom-content-types' ) && get_option( 'jetpack_portfolio' ) ) {
- $portfolios_title = $this->create_menu_item_pair(
- array(
- 'url' => 'https://wordpress.com/types/jetpack-portfolio/' . esc_attr( $this->primary_site_slug ),
- 'id' => 'wp-admin-bar-edit-portfolio',
- 'label' => esc_html__( 'Portfolio', 'jetpack' ),
- ),
- array(
- 'url' => 'https://wordpress.com/edit/jetpack-portfolio/' . esc_attr( $this->primary_site_slug ),
- 'id' => 'wp-admin-bar-new-portfolio',
- 'label' => esc_html_x( 'Add', 'Button label for adding a new item via the toolbar menu', 'jetpack' ),
- )
- );
-
- if ( ! current_user_can( 'edit_pages' ) ) {
- $portfolios_title = $this->create_menu_item_anchor(
- 'ab-item ab-primary mb-icon',
- 'https://wordpress.com/types/jetpack-portfolio/' . esc_attr( $this->primary_site_slug ),
- esc_html__( 'Portfolio', 'jetpack' ),
- 'wp-admin-bar-edit-portfolio'
- );
- }
-
- $wp_admin_bar->add_menu( array(
- 'parent' => 'publish',
- 'id' => 'new-jetpack-portfolio',
- 'title' => $portfolios_title,
- 'meta' => array(
- 'class' => 'inline-action',
- ),
- ) );
- }
-
- if ( current_user_can( 'edit_theme_options' ) ) {
- // Look and Feel group
- $wp_admin_bar->add_group( array(
- 'parent' => 'blog',
- 'id' => 'look-and-feel',
- ) );
-
- // Look and Feel header
- $wp_admin_bar->add_menu( array(
- 'parent' => 'look-and-feel',
- 'id' => 'look-and-feel-header',
- 'title' => esc_html_x( 'Personalize', 'admin bar menu group label', 'jetpack' ),
- 'meta' => array(
- 'class' => 'ab-submenu-header',
- ),
- ) );
-
- if ( is_admin() ) {
- // In wp-admin the `return` query arg will return to that page after closing the Customizer
- $customizer_url = add_query_arg( array( 'return' => urlencode( site_url( $_SERVER['REQUEST_URI'] ) ) ), wp_customize_url() );
- } else {
- // On the frontend the `url` query arg will load that page in the Customizer and also return to it after closing
- // non-home URLs won't work unless we undo domain mapping since the Customizer preview is unmapped to always have HTTPS
- $current_page = '//' . $this->primary_site_slug . $_SERVER['REQUEST_URI'];
- $customizer_url = add_query_arg( array( 'url' => urlencode( $current_page ) ), wp_customize_url() );
- }
-
- $theme_title = $this->create_menu_item_pair(
- array(
- 'url' => $customizer_url,
- 'id' => 'wp-admin-bar-cmz',
- 'label' => esc_html_x( 'Customize', 'admin bar customize item label', 'jetpack' ),
- ),
- array(
- 'url' => 'https://wordpress.com/themes/' . esc_attr( $this->primary_site_slug ),
- 'id' => 'wp-admin-bar-themes',
- 'label' => esc_html__( 'Themes', 'jetpack' ),
- )
- );
- $meta = array( 'class' => 'mb-icon', 'class' => 'inline-action' );
- $href = false;
-
- $wp_admin_bar->add_menu( array(
- 'parent' => 'look-and-feel',
- 'id' => 'themes',
- 'title' => $theme_title,
- 'href' => $href,
- 'meta' => $meta
- ) );
- }
-
- if ( current_user_can( 'manage_options' ) ) {
- // Configuration group
- $wp_admin_bar->add_group( array(
- 'parent' => 'blog',
- 'id' => 'configuration',
- ) );
-
- // Configuration header
- $wp_admin_bar->add_menu( array(
- 'parent' => 'configuration',
- 'id' => 'configuration-header',
- 'title' => esc_html__( 'Configure', 'admin bar menu group label', 'jetpack' ),
- 'meta' => array(
- 'class' => 'ab-submenu-header',
- ),
- ) );
-
- if ( Jetpack::is_module_active( 'publicize' ) || Jetpack::is_module_active( 'sharedaddy' ) ) {
- $wp_admin_bar->add_menu( array(
- 'parent' => 'configuration',
- 'id' => 'sharing',
- 'title' => esc_html__( 'Sharing', 'jetpack' ),
- 'href' => 'https://wordpress.com/sharing/' . esc_attr( $this->primary_site_slug ),
- 'meta' => array(
- 'class' => 'mb-icon',
- ),
- ) );
- }
-
- $people_title = $this->create_menu_item_pair(
- array(
- 'url' => 'https://wordpress.com/people/team/' . esc_attr( $this->primary_site_slug ),
- 'id' => 'wp-admin-bar-people',
- 'label' => esc_html__( 'People', 'jetpack' ),
- ),
- array(
- 'url' => admin_url( 'user-new.php' ),
- 'id' => 'wp-admin-bar-people-add',
- 'label' => esc_html_x( 'Add', 'admin bar people item label', 'jetpack' ),
- )
- );
-
- $wp_admin_bar->add_menu( array(
- 'parent' => 'configuration',
- 'id' => 'users-toolbar',
- 'title' => $people_title,
- 'href' => false,
- 'meta' => array(
- 'class' => 'inline-action',
- ),
- ) );
-
- $plugins_title = $this->create_menu_item_pair(
- array(
- 'url' => 'https://wordpress.com/plugins/' . esc_attr( $this->primary_site_slug ),
- 'id' => 'wp-admin-bar-plugins',
- 'label' => esc_html__( 'Plugins', 'jetpack' ),
- ),
- array(
- 'url' => 'https://wordpress.com/plugins/manage/' . esc_attr( $this->primary_site_slug ),
- 'id' => 'wp-admin-bar-plugins-add',
- 'label' => esc_html_x( 'Manage', 'Label for the button on the Masterbar to manage plugins', 'jetpack' ),
- )
- );
-
- $wp_admin_bar->add_menu( array(
- 'parent' => 'configuration',
- 'id' => 'plugins',
- 'title' => $plugins_title,
- 'href' => false,
- 'meta' => array(
- 'class' => 'inline-action',
- ),
- ) );
-
- if ( jetpack_is_atomic_site() ) {
- $domain_title = $this->create_menu_item_pair(
- array(
- 'url' => 'https://wordpress.com/domains/' . esc_attr( $this->primary_site_slug ),
- 'id' => 'wp-admin-bar-domains',
- 'label' => esc_html__( 'Domains', 'jetpack' ),
- ),
- array(
- 'url' => 'https://wordpress.com/domains/add/' . esc_attr( $this->primary_site_slug ),
- 'id' => 'wp-admin-bar-domains-add',
- 'label' => esc_html_x( 'Add', 'Label for the button on the Masterbar to add a new domain', 'jetpack' ),
- )
- );
- $wp_admin_bar->add_menu( array(
- 'parent' => 'configuration',
- 'id' => 'domains',
- 'title' => $domain_title,
- 'href' => false,
- 'meta' => array(
- 'class' => 'inline-action',
- ),
- ) );
- }
-
- $wp_admin_bar->add_menu( array(
- 'parent' => 'configuration',
- 'id' => 'blog-settings',
- 'title' => esc_html__( 'Settings', 'jetpack' ),
- 'href' => 'https://wordpress.com/settings/general/' . esc_attr( $this->primary_site_slug ),
- 'meta' => array(
- 'class' => 'mb-icon',
- ),
- ) );
-
- if ( ! is_admin() ) {
- $wp_admin_bar->add_menu( array(
- 'parent' => 'configuration',
- 'id' => 'legacy-dashboard',
- 'title' => esc_html__( 'Dashboard', 'jetpack' ),
- 'href' => admin_url(),
- 'meta' => array(
- 'class' => 'mb-icon',
- ),
- ) );
- }
-
- // Restore dashboard menu toggle that is needed on mobile views.
- if ( is_admin() ) {
- $wp_admin_bar->add_menu( array(
- 'id' => 'menu-toggle',
- 'title' => '<span class="ab-icon"></span><span class="screen-reader-text">' . esc_html__( 'Menu', 'jetpack' ) . '</span>',
- 'href' => '#',
- ) );
- }
-
- /**
- * Fires when menu items are added to the masterbar "My Sites" menu.
- *
- * @since 5.4.0
- */
- do_action( 'jetpack_masterbar' );
- }
- }
-}
diff --git a/plugins/jetpack/modules/masterbar/overrides.css b/plugins/jetpack/modules/masterbar/overrides.css
deleted file mode 100644
index a1c9a534..00000000
--- a/plugins/jetpack/modules/masterbar/overrides.css
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Remove min-height from menu elements that was causing them to render incorrectly */
-.my-sites li {
- min-height: unset !important;
-}
-
-/* Overwrite a core style which breaks the overflow for .my-sites in Safari */
-#wpadminbar li.menupop.my-sites {
- overflow: visible;
-}
-
-/* Add a focus style for menu items */
-.accessible-focus #wpadminbar li.menupop a.ab-item:focus,
-.accessible-focus #wpadminbar li#wp-admin-bar-notes.menupop .ab-item:focus,
-.accessible-focus #wpadminbar ul li#wp-admin-bar-ab-new-post a:focus {
- -webkit-box-shadow: inset 2px 2px 0 #668eaa,
- inset -2px -2px 0 #668eaa;
- box-shadow: inset 2px 2px 0 #668eaa,
- inset -2px -2px 0 #668eaa;
-}
-
-/* Menu items in panels are inside `ab-empty-item` */
-.accessible-focus #wpadminbar li.menupop .ab-empty-item a.ab-item:focus,
-.accessible-focus #wpadminbar li.menupop .ab-empty-item a.ab-secondary:focus,
-.accessible-focus #wpadminbar li.menupop .ab-empty-item a.username:focus {
- -webkit-box-shadow: inset 2px 2px 0 #2e4354,
- inset -2px -2px 0 #2e4354;
- box-shadow: inset 2px 2px 0 #2e4354,
- inset -2px -2px 0 #2e4354;
-}
-
-.accessible-focus #wpadminbar .quicklinks li#wp-admin-bar-my-account #wp-admin-bar-user-info .ab-sign-out:focus {
- -webkit-box-shadow: inset 2px 2px 0 #2e4354,
- inset -2px -2px 0 #2e4354 !important;
- box-shadow: inset 2px 2px 0 #2e4354,
- inset -2px -2px 0 #2e4354 !important;
-}
-
-.accessible-focus #wpadminbar:not(.mobile) .ab-top-menu > li > .ab-item:focus {
- background: transparent;
-}
-
-/* Hide the panels initially */
-#wpadminbar li#wp-admin-bar-blog.menupop > .ab-sub-wrapper, /* My Sites */
-#wpadminbar li#wp-admin-bar-newdash.menupop > .ab-sub-wrapper, /* Reader */
-#wpadminbar li#wp-admin-bar-my-account.menupop > .ab-sub-wrapper, /* Me */
-#wpadminbar li#wp-admin-bar-notes.menupop > #wpnt-notes-panel2 { /* Notifications */
- display: block !important;
-}
-
-/* Change notification icon the match the one on WP.com */
-#wp-admin-bar-notes .noticon-bell:before {
- content: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0Ij48cmVjdCB4PSIwIiBmaWxsPSJub25lIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiLz48Zz48cGF0aCBmaWxsPSIjZmZmZmZmIiBkPSJNNi4xNCAxNC45N2wyLjgyOCAyLjgyN2MtLjM2Mi4zNjItLjg2Mi41ODYtMS40MTQuNTg2LTEuMTA1IDAtMi0uODk1LTItMiAwLS41NTIuMjI0LTEuMDUyLjU4Ni0xLjQxNHptOC44NjcgNS4zMjRMMTQuMyAyMSAzIDkuN2wuNzA2LS43MDcgMS4xMDIuMTU3Yy43NTQuMTA4IDEuNjktLjEyMiAyLjA3Ny0uNTFsMy44ODUtMy44ODRjMi4zNC0yLjM0IDYuMTM1LTIuMzQgOC40NzUgMHMyLjM0IDYuMTM1IDAgOC40NzVsLTMuODg1IDMuODg2Yy0uMzg4LjM4OC0uNjE4IDEuMzIzLS41MSAyLjA3N2wuMTU3IDEuMXoiLz48L2c+PC9zdmc+") !important;
-}
-#wp-admin-bar-notes.active .noticon-bell:before {
- content: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0Ij48cmVjdCB4PSIwIiBmaWxsPSJub25lIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiLz48Zz48cGF0aCBmaWxsPSIjMjMyODJkIiBkPSJNNi4xNCAxNC45N2wyLjgyOCAyLjgyN2MtLjM2Mi4zNjItLjg2Mi41ODYtMS40MTQuNTg2LTEuMTA1IDAtMi0uODk1LTItMiAwLS41NTIuMjI0LTEuMDUyLjU4Ni0xLjQxNHptOC44NjcgNS4zMjRMMTQuMyAyMSAzIDkuN2wuNzA2LS43MDcgMS4xMDIuMTU3Yy43NTQuMTA4IDEuNjktLjEyMiAyLjA3Ny0uNTFsMy44ODUtMy44ODRjMi4zNC0yLjM0IDYuMTM1LTIuMzQgOC40NzUgMHMyLjM0IDYuMTM1IDAgOC40NzVsLTMuODg1IDMuODg2Yy0uMzg4LjM4OC0uNjE4IDEuMzIzLS41MSAyLjA3N2wuMTU3IDEuMXoiLz48L2c+PC9zdmc+") !important;
-}
-
-/* Fit width of sign out button to content */
-#wpadminbar .quicklinks li#wp-admin-bar-my-account #wp-admin-bar-user-info .ab-sign-out {
- display: inline-block;
-}
diff --git a/plugins/jetpack/modules/masterbar/rtl-admin-bar.php b/plugins/jetpack/modules/masterbar/rtl-admin-bar.php
deleted file mode 100644
index 8ac524e8..00000000
--- a/plugins/jetpack/modules/masterbar/rtl-admin-bar.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-if ( ! class_exists( 'WP_Admin_Bar' ) ) {
- require_once ABSPATH . '/wp-includes/class-wp-admin-bar.php';
-}
-
-/**
- * We are using this class to replace core WP_Admin_Bar in cases when
- * we need to override the default styles with rtl ones. This is
- * achieved by adding 'rtl' class to #wpadminbar div. Apart from that
- * the output of render method should be the same as the one of base class.
- */
-class RTL_Admin_Bar extends WP_Admin_Bar {
- function render() {
- global $is_IE;
- $root = $this->_bind();
-
- // Add browser and RTL classes.
- // We have to do this here since admin bar shows on the front end.
- $class = 'nojq nojs rtl';
- if ( $is_IE ) {
- if ( strpos( $_SERVER['HTTP_USER_AGENT'], 'MSIE 7' ) ) {
- $class .= ' ie7';
- } elseif ( strpos( $_SERVER['HTTP_USER_AGENT'], 'MSIE 8' ) ) {
- $class .= ' ie8';
- } elseif ( strpos( $_SERVER['HTTP_USER_AGENT'], 'MSIE 9' ) ) {
- $class .= ' ie9';
- }
- } elseif ( wp_is_mobile() ) {
- $class .= ' mobile';
- }
-
- ?>
- <div id="wpadminbar" class="<?php echo $class; ?>">
- <?php if ( ! is_admin() ) : ?>
- <a class="screen-reader-shortcut" href="#wp-toolbar" tabindex="1"><?php _e( 'Skip to toolbar', 'jetpack' ); ?></a>
- <?php endif; ?>
- <div class="quicklinks" id="wp-toolbar" role="navigation" aria-label="<?php esc_attr_e( 'Toolbar', 'jetpack' ); ?>" tabindex="0">
- <?php
- foreach ( $root->children as $group ) :
- $this->_render_group( $group );
- endforeach;
- ?>
- </div>
- <?php if ( is_user_logged_in() ) : ?>
- <a class="screen-reader-shortcut" href="<?php echo esc_url( wp_logout_url() ); ?>"><?php _e( 'Log Out', 'jetpack' ); ?></a>
- <?php endif; ?>
- </div>
-
- <?php
- }
-}
diff --git a/plugins/jetpack/modules/masterbar/tracks-events.js b/plugins/jetpack/modules/masterbar/tracks-events.js
deleted file mode 100644
index adc40a42..00000000
--- a/plugins/jetpack/modules/masterbar/tracks-events.js
+++ /dev/null
@@ -1,159 +0,0 @@
-/*globals jQuery, JSON */
-( function( $ ) {
- var eventName = 'masterbar_click';
-
- var linksTracksEvents = {
- //top level items
- 'wp-admin-bar-blog' : 'my_sites',
- 'wp-admin-bar-newdash' : 'reader',
- 'wp-admin-bar-ab-new-post' : 'write_button',
- 'wp-admin-bar-my-account' : 'my_account',
- 'wp-admin-bar-notes' : 'notifications',
- //my sites - top items
- 'wp-admin-bar-switch-site' : 'my_sites_switch_site',
- 'wp-admin-bar-blog-info' : 'my_sites_blog_info',
- 'wp-admin-bar-site-view' : 'my_sites_view_site',
- 'wp-admin-bar-blog-stats' : 'my_sites_blog_stats',
- 'wp-admin-bar-activity' : 'my_sites_activity',
- 'wp-admin-bar-plan' : 'my_sites_plan',
- 'wp-admin-bar-plan-badge' : 'my_sites_plan_badge',
- //my sites - manage
- 'wp-admin-bar-edit-page' : 'my_sites_manage_site_pages',
- 'wp-admin-bar-new-page-badge' : 'my_sites_manage_add_page',
- 'wp-admin-bar-edit-post' : 'my_sites_manage_blog_posts',
- 'wp-admin-bar-new-post-badge' : 'my_sites_manage_add_new_post',
- 'wp-admin-bar-edit-attachment' : 'my_sites_manage_media',
- 'wp-admin-bar-new-attachment-badge' : 'my_sites_manage_add_media',
- 'wp-admin-bar-comments' : 'my_sites_manage_comments',
- 'wp-admin-bar-edit-testimonial' : 'my_sites_manage_testimonials',
- 'wp-admin-bar-new-testimonial' : 'my_sites_manage_add_testimonial',
- 'wp-admin-bar-edit-portfolio' : 'my_sites_manage_portfolio',
- 'wp-admin-bar-new-portfolio' : 'my_sites_manage_add_portfolio',
- //my sites - personalize
- 'wp-admin-bar-themes' : 'my_sites_personalize_themes',
- 'wp-admin-bar-cmz' : 'my_sites_personalize_themes_customize',
- //my sites - configure
- 'wp-admin-bar-sharing' : 'my_sites_configure_sharing',
- 'wp-admin-bar-people' : 'my_sites_configure_people',
- 'wp-admin-bar-people-add' : 'my_sites_configure_people_add_button',
- 'wp-admin-bar-plugins' : 'my_sites_configure_plugins',
- 'wp-admin-bar-plugins-add' : 'my_sites_configure_manage_plugins',
- 'wp-admin-bar-blog-settings' : 'my_sites_configure_settings',
- //reader
- 'wp-admin-bar-followed-sites' : 'reader_followed_sites',
- 'wp-admin-bar-reader-followed-sites-manage': 'reader_manage_followed_sites',
- 'wp-admin-bar-discover-discover' : 'reader_discover',
- 'wp-admin-bar-discover-search' : 'reader_search',
- 'wp-admin-bar-discover-recommended-blogs' : 'reader_recommendations',
- 'wp-admin-bar-my-activity-my-likes' : 'reader_my_likes',
- //account
- 'wp-admin-bar-user-info' : 'my_account_user_name',
- // account - profile
- 'wp-admin-bar-my-profile' : 'my_account_profile_my_profile',
- 'wp-admin-bar-account-settings' : 'my_account_profile_account_settings',
- 'wp-admin-bar-billing' : 'my_account_profile_manage_purchases',
- 'wp-admin-bar-security' : 'my_account_profile_security',
- 'wp-admin-bar-notifications' : 'my_account_profile_notifications',
- //account - special
- 'wp-admin-bar-get-apps' : 'my_account_special_get_apps',
- 'wp-admin-bar-next-steps' : 'my_account_special_next_steps',
- 'wp-admin-bar-help' : 'my_account_special_help'
- };
-
- var notesTracksEvents = {
- openSite: function( data ) {
- return {
- clicked: 'masterbar_notifications_panel_site',
- site_id: data.siteId
- };
- },
- openPost: function( data ) {
- return {
- clicked: 'masterbar_notifications_panel_post',
- site_id: data.siteId,
- post_id: data.postId
- };
- },
- openComment: function( data ) {
- return {
- clicked: 'masterbar_notifications_panel_comment',
- site_id: data.siteId,
- post_id: data.postId,
- comment_id: data.commentId
- };
- }
- };
-
- function parseJson( s, defaultValue ) {
- try {
- return JSON.parse( s );
- } catch ( e ) {
- return defaultValue;
- }
- }
-
- $( document ).ready( function() {
- var trackableLinks = '.mb-trackable .ab-item:not(div),' +
- '#wp-admin-bar-notes .ab-item,' +
- '#wp-admin-bar-user-info .ab-item,' +
- '.mb-trackable .ab-secondary';
-
- $( trackableLinks ).on( 'click touchstart', function( e ) {
- if ( ! window.jpTracksAJAX || 'function' !== typeof( window.jpTracksAJAX.record_ajax_event ) ) {
- return;
- }
-
- var $target = $( e.target ),
- $parent = $target.closest( 'li' );
-
- if ( ! $target.is( 'a' ) ) {
- $target = $target.closest( 'a' );
- }
-
- if ( ! $parent || ! $target ) {
- return;
- }
-
- var trackingId = $target.attr( 'ID' ) || $parent.attr( 'ID' );
-
- if ( ! linksTracksEvents.hasOwnProperty( trackingId ) ) {
- return;
- }
- var eventProps = { 'clicked': linksTracksEvents[ trackingId ] };
-
- if ( $parent.hasClass( 'menupop' ) ) {
- window.jpTracksAJAX.record_ajax_event( eventName, 'click', eventProps );
- } else {
- e.preventDefault();
- window.jpTracksAJAX.record_ajax_event( eventName, 'click', eventProps ).always( function() {
- window.location = $target.attr( 'href' );
- } );
- }
- } );
- } );
-
- // listen for postMessage events from the notifications iframe
- $( window ).on( 'message', function( e ) {
- if ( ! window.jpTracksAJAX || 'function' !== typeof( window.jpTracksAJAX.record_ajax_event ) ) {
- return;
- }
-
- var event = ! e.data && e.originalEvent.data ? e.originalEvent : e;
- if ( event.origin !== 'https://widgets.wp.com' ) {
- return;
- }
-
- var data = ( 'string' === typeof event.data ) ? parseJson( event.data, {} ) : event.data;
- if ( 'notesIframeMessage' !== data.type ) {
- return;
- }
-
- var eventData = notesTracksEvents[ data.action ];
- if ( ! eventData ) {
- return;
- }
-
- window.jpTracksAJAX.record_ajax_event( eventName, 'click', eventData( data ) );
- } );
-
-} )( jQuery );
diff --git a/plugins/jetpack/modules/minileven.php b/plugins/jetpack/modules/minileven.php
deleted file mode 100644
index 5e4c13c2..00000000
--- a/plugins/jetpack/modules/minileven.php
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-
-/**
- * Module Name: Mobile Theme
- * Module Description: Enable the Jetpack Mobile theme
- * Sort Order: 21
- * Recommendation Order: 11
- * First Introduced: 1.8
- * Requires Connection: No
- * Auto Activate: No
- * Module Tags: Appearance, Mobile, Recommended
- * Feature: Appearance
- * Additional Search Queries: mobile, theme, minileven
- */
-
-function jetpack_load_minileven() {
- include dirname( __FILE__ ) . "/minileven/minileven.php";
-
- if ( Jetpack_Options::get_option_and_ensure_autoload( 'wp_mobile_app_promos', '0' ) != '1' )
- remove_action( 'wp_mobile_theme_footer', 'jetpack_mobile_app_promo' );
-}
-
-add_action( 'jetpack_modules_loaded', 'minileven_loaded' );
-
-function minileven_loaded() {
- Jetpack::enable_module_configurable( __FILE__ );
- Jetpack::module_configuration_load( __FILE__, 'minileven_configuration_load' );
- Jetpack::module_configuration_screen( __FILE__, 'minileven_configuration_screen' );
-}
-
-function minileven_configuration_load() {
- if ( isset( $_POST['action'] ) && $_POST['action'] == 'save_options' && $_POST['_wpnonce'] == wp_create_nonce( 'minileven' ) ) {
- if ( isset( $_POST['wp_mobile_excerpt'] ) ) {
- update_option( 'wp_mobile_excerpt', '1' == $_POST['wp_mobile_excerpt'] ? '1' : '0' );
- }
-
- if ( isset( $_POST['wp_mobile_featured_images'] ) ) {
- update_option( 'wp_mobile_featured_images', '1' == $_POST['wp_mobile_featured_images'] ? '1' : '0' );
- }
-
- update_option( 'wp_mobile_app_promos', ( isset( $_POST['wp_mobile_app_promos'] ) ) ? '1' : '0' );
-
- Jetpack::state( 'message', 'module_configured' );
- wp_safe_redirect( Jetpack::module_configuration_url( 'minileven' ) );
- exit;
- }
-}
-
-function minileven_configuration_screen() {
- $excerpts = ( 0 == get_option( 'wp_mobile_excerpt' ) ) ? 0 : 1;
- $featured_images = ( 0 == get_option( 'wp_mobile_featured_images' ) ) ? 0 : 1;
- $promos = ( '1' == get_option( 'wp_mobile_app_promos' ) ) ? 1 : 0;
-
- ?>
- <form method="post">
- <input type="hidden" name="action" value="save_options" />
- <?php wp_nonce_field( 'minileven' ); ?>
- <table id="menu" class="form-table">
- <tr valign="top">
- <th scope="row"><?php _e( 'Excerpts', 'jetpack' ); ?></th>
- <td>
- <label>
- <input name="wp_mobile_excerpt" type="radio" value="1" class="code" <?php checked( 1, $excerpts, true ); ?> />
- <?php _e( 'Enable excerpts on front page and on archive pages', 'jetpack' ); ?>
- </label>
- <br />
- <label>
- <input name="wp_mobile_excerpt" type="radio" value="0" class="code" <?php checked( 0, $excerpts, true ); ?> />
- <?php _e( 'Show full posts on front page and on archive pages', 'jetpack' ); ?>
- </label>
- </td>
- </tr>
- <tr valign="top">
- <th scope="row"><?php _e( 'Featured Images', 'jetpack' ); ?></th>
- <td>
- <label>
- <input name="wp_mobile_featured_images" type="radio" value="0" class="code" <?php checked( 0, $featured_images, true ); ?> />
- <?php _e( 'Hide all featured images', 'jetpack' ); ?>
- </label>
- <br />
- <label>
- <input name="wp_mobile_featured_images" type="radio" value="1" class="code" <?php checked( 1, $featured_images, true ); ?> />
- <?php _e( 'Display featured images', 'jetpack' ); ?>
- </label>
- </td>
- </tr>
- <tr valign="top">
- <th scope="row"><?php _e( 'Mobile App Promos', 'jetpack' ); ?></th>
- <td>
- <label>
- <input name="wp_mobile_app_promos" type="checkbox" value="1" <?php checked( 1, $promos, true ); ?> />
- <?php _e ( 'Show a promo for the WordPress mobile apps in the footer of the mobile theme.', 'jetpack' ); ?>
- </label>
- </td>
- </tr>
- </table>
- <p class="submit">
- <input type="submit" class="button-primary" value="<?php esc_attr_e( 'Save configuration', 'jetpack' ); ?>" />
- </p>
- </form>
- <h3><?php _e( 'Mobile Apps', 'jetpack' ); ?></h3>
- <p><?php _e( 'Take WordPress with you.', 'jetpack' ); ?></p>
- <a href="https://wordpress.org/mobile/" target="_blank"><img src="<?php echo plugin_dir_url( __FILE__ ); ?>/minileven/images/wp-app-devices.png" width="332" height="73" /></a>
- <p><?php printf( __( 'We have apps for <a href="%s" target="_blank">iOS (iPhone, iPad, iPod Touch) and Android</a>!', 'jetpack' ), 'https://apps.wordpress.org/' ); ?></p>
- <?php
-}
-
-function minileven_theme_root( $theme_root ) {
- if ( jetpack_check_mobile() ) {
- return dirname( __FILE__ ) . '/minileven/theme';
- }
-
- return $theme_root;
-}
-
-add_filter( 'theme_root', 'minileven_theme_root' );
-
-function minileven_theme_root_uri( $theme_root_uri ) {
- if ( jetpack_check_mobile() ) {
- return plugins_url( 'modules/minileven/theme', dirname( __FILE__ ) );
- }
-
- return $theme_root_uri;
-}
-
-add_filter( 'theme_root_uri', 'minileven_theme_root_uri' );
-
-function minileven_enabled( $wp_mobile_disable_option ) {
- return true;
-}
-
-if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- add_filter( 'option_wp_mobile_disable', 'minileven_enabled' );
-}
-
-jetpack_load_minileven();
diff --git a/plugins/jetpack/modules/minileven/images/wp-app-devices.png b/plugins/jetpack/modules/minileven/images/wp-app-devices.png
deleted file mode 100644
index 2efefe20..00000000
--- a/plugins/jetpack/modules/minileven/images/wp-app-devices.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/minileven/minileven.php b/plugins/jetpack/modules/minileven/minileven.php
deleted file mode 100644
index abfec53d..00000000
--- a/plugins/jetpack/modules/minileven/minileven.php
+++ /dev/null
@@ -1,344 +0,0 @@
-<?php
-
-// ********** modify blog option 'wp_mobile_template' manually to specify a theme (ex. 'vip/cnnmobile')
-
-// WordPress Mobile Edition
-//
-// Copyright (c) 2002-2008 Alex King
-// http://alexking.org/projects/wordpress
-//
-// Released under the GPL license
-// http://www.opensource.org/licenses/gpl-license.php
-//
-// **********************************************************************
-// This program is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// *****************************************************************
-
-/*
-Plugin Name: WordPress Mobile Edition
-Plugin URI: http://alexking.org/projects/wordpress
-Description: Show a mobile view of the post/page if the visitor is on a known mobile device. Questions on configuration, etc.? Make sure to read the README.
-Author: Alex King
-Author URI: http://alexking.org
-Version: 2.1a-WPCOM
-*/
-
-$_SERVER['REQUEST_URI'] = ( isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : $_SERVER['SCRIPT_NAME'] . (( isset($_SERVER['QUERY_STRING']) ? '?' . $_SERVER['QUERY_STRING'] : '')));
-
-function jetpack_check_mobile() {
- if ( ( defined('XMLRPC_REQUEST') && XMLRPC_REQUEST ) || ( defined('APP_REQUEST') && APP_REQUEST ) )
- return false;
- if ( !isset($_SERVER["HTTP_USER_AGENT"]) || (isset($_COOKIE['akm_mobile']) && $_COOKIE['akm_mobile'] == 'false') )
- return false;
- if ( jetpack_mobile_exclude() )
- return false;
- if ( 1 == Jetpack_Options::get_option_and_ensure_autoload( 'wp_mobile_disable', '0' ) )
- return false;
- if ( isset($_COOKIE['akm_mobile']) && $_COOKIE['akm_mobile'] == 'true' )
- return true;
-
- $is_mobile = jetpack_is_mobile();
-
- /**
- * Filter the Mobile check results.
- *
- * @module minileven
- *
- * @since 1.8.0
- *
- * @param bool $is_mobile Is the reader on a mobile device.
- */
- return apply_filters( 'jetpack_check_mobile', $is_mobile );
-}
-
-function jetpack_mobile_exclude() {
- $exclude = false;
- $pages_to_exclude = array(
- 'wp-admin',
- 'wp-comments-post.php',
- 'wp-mail.php',
- 'wp-login.php',
- 'wp-activate.php',
- );
- foreach ( $pages_to_exclude as $exclude_page ) {
- if ( strstr( strtolower( $_SERVER['REQUEST_URI'] ), $exclude_page ) )
- $exclude = true;
- }
-
- if ( defined( 'DOING_AJAX' ) && true === DOING_AJAX )
- $exclude = false;
-
- if ( isset( $GLOBALS['wp_customize'] ) )
- return true;
-
- return $exclude;
-}
-
-function wp_mobile_get_main_template() {
- remove_action( 'option_template', 'jetpack_mobile_template' );
- $template = get_option( 'template' );
- add_action( 'option_template', 'jetpack_mobile_template' );
- return $template;
-}
-
-function wp_mobile_get_main_stylesheet() {
- remove_action( 'option_stylesheet', 'jetpack_mobile_stylesheet' );
- $stylesheet = get_option( 'stylesheet' );
- add_action( 'option_stylesheet', 'jetpack_mobile_stylesheet' );
- return $stylesheet;
-}
-
-function jetpack_mobile_stylesheet( $theme ) {
- /**
- * Filter Jetpack's Mobile stylesheet.
- *
- * @module minileven
- *
- * @since 1.8.0
- *
- * @param string $theme Theme.
- */
- return apply_filters( 'jetpack_mobile_stylesheet', 'pub/minileven', $theme );
-}
-
-function jetpack_mobile_template( $theme ) {
- /**
- * Filter Jetpack's Mobile template.
- *
- * @module minileven
- *
- * @since 1.8.0
- *
- * @param string $theme Theme.
- */
- return apply_filters( 'jetpack_mobile_template', 'pub/minileven', $theme );
-}
-
-function jetpack_mobile_available() {
- echo '<div class="jetpack-mobile-link" style="text-align:center;margin:10px 0;"><a href="'. esc_url( home_url( add_query_arg('ak_action', 'accept_mobile') ) ) . '">' . __( 'View Mobile Site', 'jetpack' ) . '</a></div>';
-}
-
-function jetpack_mobile_request_handler() {
- global $wpdb;
- if (isset($_GET['ak_action'])) {
- $url = parse_url( get_bloginfo( 'url' ) );
- $domain = $url['host'];
- if (!empty($url['path'])) {
- $path = $url['path'];
- }
- else {
- $path = '/';
- }
- $redirect = false;
- switch ($_GET['ak_action']) {
- case 'reject_mobile':
- setcookie(
- 'akm_mobile'
- , 'false'
- , time() + 300000
- , $path
- , $domain
- );
- $redirect = true;
-
- /**
- * In Jetpack's Mobile theme, fires after the user taps on the link to display a full version of the site.
- *
- * @module minileven
- *
- * @since 1.8.0
- */
- do_action( 'mobile_reject_mobile' );
- break;
- case 'force_mobile':
- case 'accept_mobile':
- setcookie(
- 'akm_mobile'
- , 'true'
- , time() + 300000
- , $path
- , $domain
- );
- $redirect = true;
-
- /**
- * In Jetpack's Mobile theme, fires after the user taps on the link to go back from full site to mobile site.
- *
- * @module minileven
- *
- * @since 1.8.0
- */
- do_action( 'mobile_force_mobile' );
- break;
- }
- if ($redirect) {
- if ( isset( $_GET['redirect_to'] ) && $_GET['redirect_to'] ) {
- $go = urldecode( $_GET['redirect_to'] );
- } else {
- $go = remove_query_arg( array( 'ak_action' ) );
- }
- wp_safe_redirect( $go );
- exit;
- }
- }
-}
-add_action('init', 'jetpack_mobile_request_handler');
-
-function jetpack_mobile_theme_setup() {
- if ( jetpack_check_mobile() ) {
- // Redirect to download page if user clicked mobile app promo link in mobile footer
- if ( isset( $_GET['app-download'] ) ) {
- /**
- * Fires before you're redirected to download page if you clicked the mobile app promo link in mobile footer
- *
- * @module minileven
- *
- * @since 1.8.0
- *
- * @param string $_GET['app-download'] app-download URL parameter.
- */
- do_action( 'mobile_app_promo_download', $_GET['app-download'] );
-
- switch ( $_GET['app-download'] ) {
- case 'android':
- header( 'Location: market://search?q=pname:org.wordpress.android' );
- exit;
- break;
- case 'ios':
- header( 'Location: http://itunes.apple.com/us/app/wordpress/id335703880?mt=8' );
- exit;
- break;
- case 'blackberry':
- header( 'Location: http://blackberry.wordpress.org/download/' );
- exit;
- break;
- }
- }
-
- add_action('stylesheet', 'jetpack_mobile_stylesheet');
- add_action('template', 'jetpack_mobile_template');
- add_action('option_template', 'jetpack_mobile_template');
- add_action('option_stylesheet', 'jetpack_mobile_stylesheet');
-
- if ( class_exists( 'Jetpack_Custom_CSS' ) && method_exists( 'Jetpack_Custom_CSS', 'disable' ) && ! get_option( 'wp_mobile_custom_css' ) )
- add_action( 'init', array( 'Jetpack_Custom_CSS', 'disable' ), 11 );
-
- /**
- * Fires after Jetpack's mobile theme has been setup.
- *
- * @module minileven
- *
- * @since 1.8.0
- */
- do_action( 'mobile_setup' );
- }
-}
-
-// Need a hook after plugins_loaded (since this code won't be loaded in Jetpack
-// until then) but after init (because it has its own init hooks to add).
-add_action( 'setup_theme', 'jetpack_mobile_theme_setup' );
-
-if (isset($_COOKIE['akm_mobile']) && $_COOKIE['akm_mobile'] == 'false') {
- add_action('wp_footer', 'jetpack_mobile_available');
-}
-
-function jetpack_mobile_app_promo() {
- ?>
- <script type="text/javascript">
- if ( ! navigator.userAgent.match( /wp-(iphone|android|blackberry|nokia|windowsphone)/i ) ) {
- if ( ( navigator.userAgent.match( /iphone/i ) ) || ( navigator.userAgent.match( /ipod/i ) ) )
- document.write( '<span id="wpcom-mobile-app-promo" style="margin-top: 10px; font-size: 13px;"><strong>Now Available!</strong> <a href="/index.php?app-download=ios">Download WordPress for iOS</a></span><br /><br />' );
- else if ( ( navigator.userAgent.match( /android/i ) ) && ( null == navigator.userAgent.match( /playbook/i ) && null == navigator.userAgent.match( /bb10/i ) ) )
- document.write( '<span id="wpcom-mobile-app-promo" style="margin-top: 10px; font-size: 13px;"><strong>Now Available!</strong> <a href="/index.php?app-download=android">Download WordPress for Android</a></span><br /><br />' );
- else if ( ( navigator.userAgent.match( /blackberry/i ) ) || ( navigator.userAgent.match( /playbook/i ) ) || ( navigator.userAgent.match( /bb10/i ) ) )
- document.write( '<span id="wpcom-mobile-app-promo" style="margin-top: 10px; font-size: 13px;"><strong>Now Available!</strong> <a href="/index.php?app-download=blackberry">Download WordPress for BlackBerry</a></span><br /><br />' );
- }
- </script>
- <?php
-}
-
-add_action( 'wp_mobile_theme_footer', 'jetpack_mobile_app_promo' );
-
-/**
- * Adds an option to allow your Custom CSS to also be applied to the Mobile Theme.
- * It's disabled by default, but this should allow people who know what they're
- * doing to customize the mobile theme.
- */
-function jetpack_mobile_css_settings() {
- $mobile_css = get_option( 'wp_mobile_custom_css' );
-
- ?>
- <div class="misc-pub-section">
- <label><?php esc_html_e( 'Mobile-compatible:', 'jetpack' ); ?></label>
- <span id="mobile-css-display"><?php echo $mobile_css ? __( 'Yes', 'jetpack' ) : __( 'No', 'jetpack' ); ?></span>
- <a class="edit-mobile-css hide-if-no-js" href="#mobile-css"><?php echo esc_html_e( 'Edit', 'jetpack' ); ?></a>
- <div id="mobile-css-select" class="hide-if-js">
- <input type="hidden" name="mobile_css" id="mobile-css" value="<?php echo intval( $mobile_css ); ?>" />
- <label>
- <input type="checkbox" id="mobile-css-visible" <?php checked( get_option( 'wp_mobile_custom_css' ) ); ?> />
- <?php esc_html_e( 'Include this CSS in the Mobile Theme', 'jetpack' ); ?>
- </label>
- <p>
- <a class="save-mobile-css hide-if-no-js button" href="#mobile-css"><?php esc_html_e( 'OK', 'jetpack' ); ?></a>
- <a class="cancel-mobile-css hide-if-no-js" href="#mobile-css"><?php esc_html_e( 'Cancel', 'jetpack' ); ?></a>
- </p>
- </div>
- </div>
- <script type="text/javascript">
- jQuery( function ( $ ) {
- $( '.edit-mobile-css' ).bind( 'click', function ( e ) {
- e.preventDefault();
-
- $( '#mobile-css-select' ).slideDown();
- $( this ).hide();
- } );
-
- $( '.cancel-mobile-css' ).bind( 'click', function ( e ) {
- e.preventDefault();
-
- $( '#mobile-css-select' ).slideUp( function () {
- $( '.edit-mobile-css' ).show();
-
- $( '#mobile-css-visible' ).prop( 'checked', $( '#mobile-css' ).val() == '1' );
- } );
- } );
-
- $( '.save-mobile-css' ).bind( 'click', function ( e ) {
- e.preventDefault();
-
- $( '#mobile-css-select' ).slideUp();
- $( '#mobile-css-display' ).text( $( '#mobile-css-visible' ).prop( 'checked' ) ? 'Yes' : 'No' );
- $( '#mobile-css' ).val( $( '#mobile-css-visible' ).prop( 'checked' ) ? '1' : '0' );
- $( '.edit-mobile-css' ).show();
- } );
- } );
- </script>
- <?php
-}
-
-add_action( 'custom_css_submitbox_misc_actions', 'jetpack_mobile_css_settings' );
-
-function jetpack_mobile_customizer_controls( $wp_customize ) {
- $wp_customize->add_setting( 'wp_mobile_custom_css' , array(
- 'default' => true,
- 'transport' => 'postMessage',
- 'type' => 'option'
- ) );
-
- $wp_customize->add_control( 'jetpack_mobile_css_control', array(
- 'type' => 'checkbox',
- 'label' => __( 'Include this CSS in the Mobile Theme', 'jetpack' ),
- 'section' => 'jetpack_custom_css',
- 'settings' => 'wp_mobile_custom_css',
- ) );
-}
-
-add_action( 'jetpack_custom_css_customizer_controls', 'jetpack_mobile_customizer_controls' );
-
-function jetpack_mobile_save_css_settings() {
- update_option( 'wp_mobile_custom_css', isset( $_POST['mobile_css'] ) && ! empty( $_POST['mobile_css'] ) );
-}
-
-add_action( 'safecss_save_pre', 'jetpack_mobile_save_css_settings' );
diff --git a/plugins/jetpack/modules/minileven/theme/pub/minileven/comments.php b/plugins/jetpack/modules/minileven/theme/pub/minileven/comments.php
deleted file mode 100644
index 55c35161..00000000
--- a/plugins/jetpack/modules/minileven/theme/pub/minileven/comments.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-/**
- * The template for displaying Comments.
- *
- * The area of the page that contains both current comments
- * and the comment form. The actual display of comments is
- * handled by a callback to minileven_comment() which is
- * located in the functions.php file.
- *
- * @package Minileven
- */
-?>
- <div id="comments">
- <?php if ( post_password_required() ) : ?>
- <p class="nopassword"><?php _e( 'This post is password protected. Enter the password to view any comments.', 'jetpack' ); ?></p>
- </div><!-- #comments -->
- <?php
- /* Stop the rest of comments.php from being processed,
- * but don't kill the script entirely -- we still have
- * to fully load the template.
- */
- return;
- endif;
- ?>
-
- <?php // You can start editing here -- including this comment! ?>
-
- <?php comment_form(); ?>
-
- <?php if ( have_comments() ) : ?>
- <ol class="commentlist">
- <?php
- /* Loop through and list the comments. Tell wp_list_comments()
- * to use minileven_comment() to format the comments.
- * If you want to overload this in a child theme then you can
- * define minileven_comment() and that will be used instead.
- * See minileven_comment() in minileven/functions.php for more.
- */
- wp_list_comments( array( 'callback' => 'minileven_comment' ) );
- ?>
- </ol>
-
- <?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?>
- <nav id="comment-nav-below">
- <h1 class="assistive-text"><?php _e( 'Comment navigation', 'jetpack' ); ?></h1>
- <div class="nav-previous"><?php previous_comments_link( __( '&larr; Older Comments', 'jetpack' ) ); ?></div>
- <div class="nav-next"><?php next_comments_link( __( 'Newer Comments &rarr;', 'jetpack' ) ); ?></div>
- </nav>
- <?php endif; // check for comment navigation
- endif; // check for the existence of comments
- ?>
- </div><!-- #comments --> \ No newline at end of file
diff --git a/plugins/jetpack/modules/minileven/theme/pub/minileven/content-gallery.php b/plugins/jetpack/modules/minileven/theme/pub/minileven/content-gallery.php
deleted file mode 100644
index 218949ea..00000000
--- a/plugins/jetpack/modules/minileven/theme/pub/minileven/content-gallery.php
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-/**
- * The template for displaying posts in the Gallery Post Format on index and archive pages
- *
- * Learn more: http://codex.wordpress.org/Post_Formats
- *
- * @package Minileven
- */
-?>
-
-<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
- <header class="entry-header">
- <div class="entry-heading">
- <?php if ( '1' == get_option( 'wp_mobile_featured_images' ) && minileven_show_featured_images() ) : ?>
- <div class="entry-thumbnail">
- <a href="<?php the_permalink(); ?>" title="<?php echo esc_attr( sprintf( __( 'Permalink to %s', 'jetpack' ), the_title_attribute( 'echo=0' ) ) ); ?>" rel="<?php the_ID(); ?>" class="minileven-featured-thumbnail"><?php the_post_thumbnail(); ?></a>
- </div><!-- .entry-thumbnail -->
- <?php endif; ?>
- <h2 class="entry-title"><a href="<?php the_permalink(); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
- <h3 class="entry-format"><?php _e( 'Gallery', 'jetpack' ); ?></h3>
- </div>
- </header><!-- .entry-header -->
-
- <div class="entry-content">
- <?php if ( is_single() || post_password_required() ) : ?>
- <?php the_content( __( 'Continue reading <span class="meta-nav">&rarr;</span>', 'jetpack' ) ); ?>
-
- <?php else : ?>
- <?php
- $images = minileven_get_gallery_images();
- if ( $images ) :
- $total_images = count( $images );
- $large_image = array_shift( $images );
- $thumb1_image = array_shift( $images );
- $thumb2_image = array_shift( $images );
- $thumb3_image = array_shift( $images );
-
- $image_img_tag = wp_get_attachment_image( (int) $large_image, 'large' );
- $thumb1_img_tag = wp_get_attachment_image( (int) $thumb1_image, 'thumbnail' );
- $thumb2_img_tag = wp_get_attachment_image( (int) $thumb2_image, 'thumbnail' );
- $thumb3_img_tag = wp_get_attachment_image( (int) $thumb3_image, 'thumbnail' );
- ?>
- <div class="img-gallery">
- <div class="gallery-large">
- <a href="<?php the_permalink(); ?>"><?php echo $image_img_tag; ?></a>
- </div><!-- .gallery-large -->
- <?php if ( 3 == $total_images ) : ?>
- <div class="gallery-thumbs-2">
- <a href="<?php the_permalink(); ?>" class="gallery-thumb-1"><?php echo $thumb1_img_tag; ?></a>
- <a href="<?php the_permalink(); ?>" class="gallery-thumb-2"><?php echo $thumb2_img_tag; ?></a>
- </div><!-- .gallery-thumbs -->
-
- <?php elseif ( 4 <= $total_images ) : ?>
- <div class="gallery-thumbs-3">
- <a href="<?php the_permalink(); ?>" class="gallery-thumb-1"><?php echo $thumb1_img_tag; ?></a>
- <a href="<?php the_permalink(); ?>" class="gallery-thumb-2"><?php echo $thumb2_img_tag; ?></a>
- <a href="<?php the_permalink(); ?>" class="gallery-thumb-3"><?php echo $thumb3_img_tag; ?></a>
- </div><!-- .gallery-thumbs -->
- </div><!-- .img-gallery -->
- <?php endif; ?>
-
- <p class="gallery-info"><em><?php printf( _n( 'This gallery contains <a %1$s>%2$s photo</a>.', 'This gallery contains <a %1$s>%2$s photos</a>.', $total_images, 'jetpack' ),
- 'href="' . esc_url( get_permalink() ) . '" title="' . esc_attr( sprintf( __( 'Permalink to %s', 'jetpack' ), the_title_attribute( 'echo=0' ) ) ) . '" rel="bookmark"',
- number_format_i18n( $total_images ) );
- ?></em></p>
-
- <?php endif; ?>
- <?php endif; ?>
-
- <?php wp_link_pages( array( 'before' => '<div class="page-link"><span>' . __( 'Pages:', 'jetpack' ) . '</span>', 'after' => '</div>' ) ); ?>
-</div><!-- .entry-content -->
-
- <footer class="entry-meta">
- <?php minileven_posted_on(); ?>
- <?php if ( comments_open() ) : ?>
- <span class="comments-link"><?php comments_popup_link( '<span class="leave-reply">' . __( 'Leave a Reply', 'jetpack' ) . '</span>', __( '<b>1</b> Reply', 'jetpack' ), __( '<b>%</b> Replies', 'jetpack' ) ); ?></span>
- <?php endif; // End if comments_open() ?>
-
- <?php edit_post_link( __( 'Edit', 'jetpack' ), '<span class="edit-link">', '</span>' ); ?>
- </footer><!-- #entry-meta -->
-</article><!-- #post-<?php the_ID(); ?> -->
-
-<?php comments_template( '', true ); ?>
diff --git a/plugins/jetpack/modules/minileven/theme/pub/minileven/content.php b/plugins/jetpack/modules/minileven/theme/pub/minileven/content.php
deleted file mode 100644
index e434ea41..00000000
--- a/plugins/jetpack/modules/minileven/theme/pub/minileven/content.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-/**
- * The default template for displaying content
- *
- * @package Minileven
- */
-?>
-
- <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
- <header class="entry-header">
- <?php if ( '1' == get_option( 'wp_mobile_featured_images' ) && minileven_show_featured_images() ) : ?>
- <div class="entry-thumbnail">
- <a href="<?php the_permalink(); ?>" title="<?php echo esc_attr( sprintf( __( 'Permalink to %s', 'jetpack' ), the_title_attribute( 'echo=0' ) ) ); ?>" rel="<?php the_ID(); ?>" class="minileven-featured-thumbnail"><?php the_post_thumbnail(); ?></a>
- </div><!-- .entry-thumbnail -->
- <?php endif; ?>
- <?php if ( is_sticky() ) : ?>
- <div class="entry-heading">
- <h2 class="entry-title"><a href="<?php the_permalink(); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
- <h3 class="entry-format"><?php _e( 'Featured', 'jetpack' ); ?></h3>
- <div>
- <?php else : ?>
- <h1 class="entry-title"><a href="<?php the_permalink(); ?>" rel="bookmark"><?php the_title(); ?></a></h1>
- <?php endif; ?>
-
- <div class="entry-meta">
- <?php if ( is_singular() && is_multi_author() ) : ?>
- <span class="author-link">
- <?php _e( 'Posted by ', 'jetpack' ); ?>
- <?php the_author_posts_link(); ?>
- </span><!-- .author-link -->
- <?php endif; ?>
- </div><!-- .entry-meta -->
- </header><!-- .entry-header -->
-
- <div class="entry-content">
- <?php if ( '1' == get_option( 'wp_mobile_excerpt' ) && ( is_home() || is_search() || is_archive() ) ) : ?>
- <?php echo minileven_excerpt( 300 ); ?>
- <?php else : ?>
- <?php the_content( __( 'Continue reading <span class="meta-nav">&rarr;</span>', 'jetpack' ) ); ?>
- <?php endif; ?>
- <?php wp_link_pages( array( 'before' => '<div class="page-link"><span>' . __( 'Pages:', 'jetpack' ) . '</span>', 'after' => '</div>' ) ); ?>
- </div><!-- .entry-content -->
-
- <footer class="entry-meta">
- <?php if ( 'post' == get_post_type() ) : ?>
- <?php minileven_posted_on(); ?>
- <?php endif; ?>
- <?php if ( comments_open() ) : ?>
- <span class="comments-link"><?php comments_popup_link( '<span class="leave-reply">' . __( 'Leave a reply', 'jetpack' ) . '</span>', __( '<b>1</b> Reply', 'jetpack' ), __( '<b>%</b> Replies', 'jetpack' ) ); ?></span>
- <?php endif; // End if comments_open() ?>
- <?php edit_post_link( __( 'Edit', 'jetpack' ), '<span class="edit-link">', '</span>' ); ?>
- </footer><!-- #entry-meta -->
- </article><!-- #post-<?php the_ID(); ?> -->
-
- <?php if ( is_single() ) : ?>
- <nav id="nav-single">
- <h3 class="assistive-text"><?php _e( 'Post navigation', 'jetpack' ); ?></h3>
- <span class="nav-previous"><?php previous_post_link( '%link', __( '&laquo; Previous', 'jetpack' ) ); ?></span>
- <span class="nav-next"><?php next_post_link( '%link', __( 'Next &raquo;', 'jetpack' ) ); ?></span>
- </nav><!-- #nav-single -->
- <?php endif; ?>
-
- <?php comments_template( '', true ); ?>
diff --git a/plugins/jetpack/modules/minileven/theme/pub/minileven/footer.php b/plugins/jetpack/modules/minileven/theme/pub/minileven/footer.php
deleted file mode 100644
index 964165f0..00000000
--- a/plugins/jetpack/modules/minileven/theme/pub/minileven/footer.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-/**
- * The template for displaying the footer.
- *
- * Contains the closing of the id=main div and all content after
- *
- * @package Minileven
- */
-?>
-
- </div><!-- #main -->
-</div><!-- #page -->
-<?php get_sidebar(); ?>
-
-</div><!-- #wrapper -->
-
-<?php
- /**
- * Fires before the Mobile Theme's <footer> tag.
- *
- * @module minileven
- *
- * @since 3.7.0
- */
- do_action( 'jetpack_mobile_footer_before' );
-?>
-
-<footer id="colophon" role="contentinfo">
- <div id="site-generator">
- <a href="<?php echo esc_url( home_url( add_query_arg('ak_action', 'reject_mobile') ) ); ?>"><?php _e( 'View Full Site', 'jetpack' ); ?></a><br />
-
- <?php
- /**
- * Fires after the View Full Site link in the Mobile Theme's footer.
- *
- * By default, a promo to download the native apps is added to this action.
- *
- * @module minileven
- *
- * @since 1.8.0
- */
- do_action( 'wp_mobile_theme_footer' );
-
- /**
- * Fires before the credit links in the Mobile Theme's footer.
- *
- * @module minilven
- *
- * @since 1.8.0
- */
- do_action( 'minileven_credits' );
- ?>
-
- <a href="<?php echo esc_url( __( 'https://wordpress.org/', 'jetpack' ) ); ?>" rel="noopener noreferrer" target="_blank" title="<?php esc_attr_e( 'Semantic Personal Publishing Platform', 'jetpack' ); ?>" rel="generator"><?php printf( __( 'Proudly powered by %s', 'jetpack' ), 'WordPress' ); ?></a>
- </div>
-</footer><!-- #colophon -->
-
-<?php wp_footer(); ?>
-
-</body>
-</html>
diff --git a/plugins/jetpack/modules/minileven/theme/pub/minileven/functions.php b/plugins/jetpack/modules/minileven/theme/pub/minileven/functions.php
deleted file mode 100644
index fadd678c..00000000
--- a/plugins/jetpack/modules/minileven/theme/pub/minileven/functions.php
+++ /dev/null
@@ -1,273 +0,0 @@
-<?php
-/**
- * Minileven functions and definitions
- *
- * Sets up the theme and provides some helper functions. Some helper functions
- * are used in the theme as custom template tags. Others are attached to action and
- * filter hooks in WordPress to change core functionality.
- *
- * The first function, minileven_setup(), sets up the theme by registering support
- * for various features in WordPress, such as post thumbnails, navigation menus, and the like.
- *
- * @package Minileven
- */
-
-/**
- * Set the content width based on the theme's design and stylesheet.
- */
-if ( ! isset( $content_width ) )
- $content_width = 584;
-
-/**
- * Tell WordPress to run minileven_setup() when the 'after_setup_theme' hook is run.
- */
-add_action( 'after_setup_theme', 'minileven_setup' );
-
-if ( ! function_exists( 'minileven_setup' ) ):
-/**
- * Sets up theme defaults and registers support for various WordPress features.
- */
-function minileven_setup() {
- global $wp_version;
-
- /**
- * Custom template tags for this theme.
- */
- require( get_template_directory() . '/inc/template-tags.php' );
-
- /**
- * Custom functions that act independently of the theme templates
- */
- require( get_template_directory() . '/inc/tweaks.php' );
-
- /**
- * Implement the Custom Header functions
- */
- require( get_template_directory() . '/inc/custom-header.php' );
-
- /* Make Minileven available for translation.
- * Translations can be added to the /languages/ directory.
- * If you're building a theme based on Minileven, use a find and replace
- * to change 'minileven' to the name of your theme in all the template files.
- */
-/* Don't load a minileven textdomain, as it uses the Jetpack textdomain.
- load_theme_textdomain( 'minileven', get_template_directory() . '/languages' );
-*/
-
- // Add default posts and comments RSS feed links to <head>.
- add_theme_support( 'automatic-feed-links' );
-
- // This theme uses wp_nav_menu() in one location.
- register_nav_menu( 'primary', __( 'Primary Menu', 'jetpack' ) );
-
- // Add support for a variety of post formats
- add_theme_support( 'post-formats', array( 'gallery' ) );
-
- // Add support for custom backgrounds
- add_theme_support( 'custom-background' );
-
- // Add support for post thumbnails
- add_theme_support( 'post-thumbnails' );
-}
-endif; // minileven_setup
-
-/**
- * Enqueue scripts and styles
- */
-function minileven_scripts() {
- global $post;
-
- wp_enqueue_style( 'style', get_stylesheet_uri() );
-
- wp_enqueue_script(
- 'small-menu',
- Jetpack::get_file_url_for_environment(
- '_inc/build/minileven/theme/pub/minileven/js/small-menu.min.js',
- 'modules/minileven/theme/pub/minileven/js/small-menu.js'
- ),
- array( 'jquery' ),
- '20120206',
- true
- );
-
- if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
- wp_enqueue_script( 'comment-reply' );
- }
-}
-add_action( 'wp_enqueue_scripts', 'minileven_scripts' );
-
-function minileven_fonts() {
-
- /* translators: If there are characters in your language that are not supported
- by Open Sans, translate this to 'off'. Do not translate into your own language. */
-
- if ( 'off' !== _x( 'on', 'Open Sans font: on or off', 'jetpack' ) ) {
-
- $opensans_subsets = 'latin,latin-ext';
-
- /* translators: To add an additional Open Sans character subset specific to your language, translate
- this to 'greek', 'cyrillic' or 'vietnamese'. Do not translate into your own language. */
- $opensans_subset = _x( 'no-subset', 'Open Sans font: add new subset (greek, cyrillic, vietnamese)', 'jetpack' );
-
- if ( 'cyrillic' == $opensans_subset )
- $opensans_subsets .= ',cyrillic,cyrillic-ext';
- elseif ( 'greek' == $opensans_subset )
- $opensans_subsets .= ',greek,greek-ext';
- elseif ( 'vietnamese' == $opensans_subset )
- $opensans_subsets .= ',vietnamese';
-
- $opensans_query_args = array(
- 'family' => 'Open+Sans:200,200italic,300,300italic,400,400italic,600,600italic,700,700italic',
- 'subset' => $opensans_subsets,
- );
- wp_register_style( 'minileven-open-sans', add_query_arg( $opensans_query_args, "//fonts.googleapis.com/css" ), array(), null );
- }
-}
-add_action( 'init', 'minileven_fonts' );
-
-/**
- * Register our sidebars and widgetized areas.
- * @since Minileven 1.0
- */
-function minileven_widgets_init() {
- register_sidebar( array(
- 'name' => __( 'Main Sidebar', 'jetpack' ),
- 'id' => 'sidebar-1',
- 'before_widget' => '<aside id="%1$s" class="widget %2$s">',
- 'after_widget' => "</aside>",
- 'before_title' => '<h3 class="widget-title">',
- 'after_title' => '</h3>',
- ) );
-}
-add_action( 'widgets_init', 'minileven_widgets_init' );
-
-function minileven_posts_per_page() {
- return 5;
-}
-add_filter('pre_option_posts_per_page', 'minileven_posts_per_page');
-
-/**
- * Determine the currently active theme.
- */
-function minileven_actual_current_theme() {
- $removed = remove_action( 'option_stylesheet', 'jetpack_mobile_stylesheet' );
- $stylesheet = get_option( 'stylesheet' );
- if ( $removed )
- add_action( 'option_stylesheet', 'jetpack_mobile_stylesheet' );
-
- return $stylesheet;
-}
-
-/* This function grabs the location of the custom menus from the current theme. If no menu is set in a location
-* it will return a boolean "false". This function helps Minileven know which custom menu to display. */
-function minileven_get_menu_location() {
- $theme_slug = minileven_actual_current_theme();
- $mods = get_option( "theme_mods_{$theme_slug}" );
-
- if ( has_filter( 'jetpack_mobile_theme_menu' ) ) {
-
- /**
- * Filter the menu displayed in the Mobile Theme.
- *
- * @module minileven
- *
- * @since 3.4.0
- *
- * @param int $menu_id ID of the menu to display.
- */
- return array( 'primary' => apply_filters( 'jetpack_mobile_theme_menu', $menu_id ) );
- }
-
- if ( isset( $mods['nav_menu_locations'] ) && ! empty( $mods['nav_menu_locations'] ) )
- return $mods['nav_menu_locations'];
-
- return false;
-}
-
-/* This function grabs the custom background image from the user's current theme so that Minileven can display it. */
-function minileven_get_background() {
- $theme_slug = minileven_actual_current_theme();
- $mods = get_option( "theme_mods_$theme_slug" );
-
- if ( ! empty( $mods ) ) {
- return array(
- 'color' => isset( $mods['background_color'] ) ? $mods['background_color'] : null,
- 'image' => isset( $mods['background_image'] ) ? $mods['background_image'] : null,
- 'repeat' => isset( $mods['background_repeat'] ) ? $mods['background_repeat'] : null,
- 'position' => isset( $mods['background_position_x'] ) ? $mods['background_position_x'] : null,
- 'attachment' => isset( $mods['attachment'] ) ? $mods['attachment'] : null,
- );
- }
- return false;
-}
-
-/**
- * If the user has set a static front page, show all posts on the front page, instead of a static page.
- */
-if ( '1' == get_option( 'wp_mobile_static_front_page' ) )
- add_filter( 'pre_option_page_on_front', '__return_zero' );
-
-/**
- * Retrieves the IDs for images in a gallery.
- *
- * @uses get_post_galleries() first, if available. Falls back to shortcode parsing,
- * then as last option uses a get_posts() call.
- *
- * @return array List of image IDs from the post gallery.
- */
-function minileven_get_gallery_images() {
- $images = array();
-
- if ( function_exists( 'get_post_galleries' ) ) {
- $galleries = get_post_galleries( get_the_ID(), false );
- if ( isset( $galleries[0]['ids'] ) )
- $images = explode( ',', $galleries[0]['ids'] );
- } else {
- $pattern = get_shortcode_regex();
- preg_match( "/$pattern/s", get_the_content(), $match );
- $atts = shortcode_parse_atts( $match[3] );
- if ( isset( $atts['ids'] ) )
- $images = explode( ',', $atts['ids'] );
- }
-
- if ( ! $images ) {
- $images = get_posts( array(
- 'fields' => 'ids',
- 'numberposts' => 999,
- 'order' => 'ASC',
- 'orderby' => 'menu_order',
- 'post_mime_type' => 'image',
- 'post_parent' => get_the_ID(),
- 'post_type' => 'attachment',
- 'suppress_filters' => false,
- ) );
- }
-
- return $images;
-}
-
-/**
- * Allow plugins to filter where Featured Images are displayed.
- * Default has Featured Images disabled on single view and pages.
- *
- * @uses is_search()
- * @uses apply_filters()
- * @return bool
- */
-function minileven_show_featured_images() {
- $enabled = ( is_home() || is_search() || is_archive() ) ? true : false;
-
- /**
- * Filter where featured images are displayed in the Mobile Theme.
- *
- * By setting $enabled to true or false using functions like is_home() or
- * is_archive(), you can control where featured images are be displayed.
- *
- * @module minileven
- *
- * @since 3.2.0
- *
- * @param bool $enabled True if featured images should be displayed, false if not.
- */
- return (bool) apply_filters( 'minileven_show_featured_images', $enabled );
-}
diff --git a/plugins/jetpack/modules/minileven/theme/pub/minileven/header.php b/plugins/jetpack/modules/minileven/theme/pub/minileven/header.php
deleted file mode 100644
index 2488a47f..00000000
--- a/plugins/jetpack/modules/minileven/theme/pub/minileven/header.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-/**
- * The Header for our theme.
- *
- * Displays all of the <head> section and everything up till <div id="main">
- *
- * @package Minileven
- */
-?><!DOCTYPE html>
-<html <?php language_attributes(); ?>>
-<head>
-<meta charset="<?php bloginfo( 'charset' ); ?>" />
-<meta name="viewport" content="width=device-width" />
-<title><?php wp_title( '|', true, 'right' ); ?></title>
-<link rel="profile" href="http://gmpg.org/xfn/11" />
-<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" />
-<?php wp_head(); ?>
-</head>
-
-<body <?php body_class(); ?>>
-<div id="wrapper">
- <?php
- $location = minileven_get_menu_location(); // get the menu locations from the current theme in use
- ?>
- <div class="menu-search">
- <nav id="access" class="site-navigation main-navigation" role="navigation">
- <h3 class="menu-toggle"><?php _e( 'Menu', 'jetpack' ); ?></h3>
-
- <?php /* Allow screen readers / text browsers to skip the navigation menu and get right to the good stuff. */ ?>
- <div class="skip-link"><a class="assistive-text" href="#content"><?php _e( 'Skip to primary content', 'jetpack' ); ?></a></div>
- <?php /* Our navigation menu. If one isn't filled out, wp_nav_menu falls back to wp_page_menu. The menu assiged to the primary position is the one used. If none is assigned, the menu with the lowest ID is used. */
- if ( false !== $location ) :
- $location_values = array_values( $location );
- $menu_id = array_shift( $location_values ); // acccess the ID of the menu assigned to that location. Using only the first menu ID returned in the array.
- wp_nav_menu( array( 'theme_location' => 'primary', 'container_class' => '', 'menu_class' => 'nav-menu', 'menu' => $menu_id ) );
- else: // if the $location variable is false, wp_page_menu() is shown instead.
- wp_nav_menu( array( 'theme_location' => 'primary', 'container_class' => '', 'menu_class' => 'nav-menu' ) );
- endif;
- ?>
- </nav><!-- #access -->
- <div class="search-form">
- <?php get_search_form(); ?>
- </div><!-- .search-form-->
- </div><!-- .menu-search-->
-
- <?php
- /**
- * Fires before Minileven header.
- *
- * @module minileven
- *
- * @since 3.4.0
- */
- do_action( 'jetpack_mobile_header_before' );
-
- if ( function_exists( 'minileven_header' ) )
- minileven_header();
-
- /**
- * Fires after Minileven header.
- *
- * @module minilven
- *
- * @since 3.4.0
- */
- do_action( 'jetpack_mobile_header_after' );
- ?>
-
- <div id="page" class="hfeed">
- <div id="main">
diff --git a/plugins/jetpack/modules/minileven/theme/pub/minileven/image.php b/plugins/jetpack/modules/minileven/theme/pub/minileven/image.php
deleted file mode 100644
index 02032c2c..00000000
--- a/plugins/jetpack/modules/minileven/theme/pub/minileven/image.php
+++ /dev/null
@@ -1,108 +0,0 @@
-<?php
-/**
- * The template for displaying image attachments.
- *
- * @package Minileven
- */
-
-get_header(); ?>
-
- <div id="primary" class="image-attachment">
- <div id="content" role="main">
-
- <?php while ( have_posts() ) : the_post(); ?>
-
- <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
- <header class="entry-header">
- <h1 class="entry-title"><?php the_title(); ?></h1>
- </header><!-- .entry-header -->
-
- <div class="entry-content">
-
- <div class="entry-attachment">
- <div class="attachment">
-<?php
- /**
- * Grab the IDs of all the image attachments in a gallery so we can get the URL of the next adjacent image in a gallery,
- * or the first image (if we're looking at the last image in a gallery), or, in a gallery of one, just the link to that image file
- */
- $attachments = array_values( get_children( array( 'post_parent' => $post->post_parent, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC', 'orderby' => 'menu_order ID', 'suppress_filters' => false ) ) );
- foreach ( $attachments as $k => $attachment ) {
- if ( $attachment->ID == $post->ID )
- break;
- }
- $k++;
- // If there is more than 1 attachment in a gallery
- if ( count( $attachments ) > 1 ) {
- if ( isset( $attachments[ $k ] ) )
- // get the URL of the next image attachment
- $next_attachment_url = get_attachment_link( $attachments[ $k ]->ID );
- else
- // or get the URL of the first image attachment
- $next_attachment_url = get_attachment_link( $attachments[ 0 ]->ID );
- } else {
- // or, if there's only 1 image, get the URL of the image
- $next_attachment_url = wp_get_attachment_url();
- }
-?>
- <a href="<?php echo esc_url( $next_attachment_url ); ?>" title="<?php echo esc_attr( get_the_title() ); ?>" rel="attachment"><?php
-
- /**
- * Filter the Mobile Theme image size.
- *
- * @module minileven
- *
- * @since 1.8.0
- *
- * @param int Image size in pixels.
- */
- $attachment_size = apply_filters( 'minileven_attachment_size', 848 );
- echo wp_get_attachment_image( $post->ID, array( $attachment_size, 1024 ) ); // filterable image width with 1024px limit for image height.
- ?></a>
-
- <?php if ( ! empty( $post->post_excerpt ) ) : ?>
- <div class="entry-caption">
- <?php the_excerpt(); ?>
- </div>
- <?php endif; ?>
- </div><!-- .attachment -->
-
- </div><!-- .entry-attachment -->
-
- <div class="entry-description">
- <?php the_content(); ?>
- <?php wp_link_pages( array( 'before' => '<div class="page-link"><span>' . __( 'Pages:', 'jetpack' ) . '</span>', 'after' => '</div>' ) ); ?>
- </div><!-- .entry-description -->
-
- </div><!-- .entry-content -->
-
- <footer class="entry-meta">
- <div class="attachment-meta">
- <?php
- $metadata = wp_get_attachment_metadata();
- printf( __( '<span class="entry-gallery">&laquo; <a href="%1$s" title="Back to %2$s" rel="gallery">Back to Gallery</a></span>', 'jetpack' ),
- esc_url( get_permalink( $post->post_parent ) ),
- get_the_title( $post->post_parent )
- );
- ?>
- </div><!-- .attachment-meta-->
- <?php if ( comments_open() ) : ?>
- <span class="comments-link"><?php comments_popup_link( '<span class="leave-reply">' . __( 'Leave a reply', 'jetpack' ) . '</span>', __( '<b>1</b> Reply', 'jetpack' ), __( '<b>%</b> Replies', 'jetpack' ) ); ?></span>
- <?php endif; // End if comments_open() ?>
- <?php edit_post_link( __( 'Edit', 'jetpack' ), '<span class="edit-link">', '</span>' ); ?>
- </footer><!-- #entry-meta -->
- </article><!-- #post-<?php the_ID(); ?> -->
-
- <nav id="nav-single">
- <h3 class="assistive-text"><?php _ex( 'Image navigation', 'next-saturday' , 'jetpack' ); ?></h3>
- <span class="nav-previous"><?php previous_image_link( false, __( '&laquo; Previous' , 'jetpack' ) ); ?></span>
- <span class="nav-next"><?php next_image_link( false, __( 'Next &raquo; ' , 'jetpack' ) ); ?></span>
- </nav><!-- #nav-single -->
-
- <?php comments_template(); ?>
-
- <?php endwhile; // end of the loop. ?>
-
- </div><!-- #content -->
- </div><!-- #primary -->
-<?php get_footer(); ?>
diff --git a/plugins/jetpack/modules/minileven/theme/pub/minileven/inc/custom-header.php b/plugins/jetpack/modules/minileven/theme/pub/minileven/inc/custom-header.php
deleted file mode 100644
index dc8758b7..00000000
--- a/plugins/jetpack/modules/minileven/theme/pub/minileven/inc/custom-header.php
+++ /dev/null
@@ -1,107 +0,0 @@
-<?php
-/**
- * @package Minileven
- * @since Minileven 2.0
- */
-
-/* This function grabs the custom header from the current theme so that Minileven can display it. */
-function minileven_get_header_image() {
- $theme_slug = minileven_actual_current_theme();
- $mods = get_option( "theme_mods_{$theme_slug}" );
-
- if ( isset( $mods['header_image'] ) && 'remove-header' != $mods['header_image'] && 'random-default-image' != $mods['header_image'] && 'random-uploaded-image' != $mods['header_image'] )
- return $mods['header_image'];
-
- return false;
-}
-
-/* This function determines whether or not the user is displaying the header on the current theme */
-function minileven_header_text_display() {
- $theme_slug = minileven_actual_current_theme();
- $mods = get_option( "theme_mods_{$theme_slug}" );
-
- if ( isset( $mods['header_textcolor'] ) )
- return $mods['header_textcolor'];
-
- return false;
-}
-
-/* This function determines how the header should be displayed. */
-function minileven_header() {
- $header_image = minileven_get_header_image();
- $header_text = minileven_header_text_display();
-
- if ( 'blank' != $header_text || false != $header_image ) : ?>
-
- <header id="branding" role="banner">
- <?php if ( 'blank' != $header_text ) : ?>
- <div class="site-branding">
- <h1 id="site-title"><span><a href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></span></h1>
- <h2 id="site-description"><?php bloginfo( 'description' ); ?></h2>
- </div>
- <?php endif;
-
- if ( false !== $header_image ) : ?>
- <div id="header-img">
- <a href="<?php echo esc_url( home_url( '/' ) ); ?>">
- <img src="<?php echo $header_image; ?>" alt="" />
- </a>
- </div><!-- #header-img -->
- <?php endif; // end check for header image existence. ?>
- </header><!-- #branding -->
-<?php endif; // end check for both header text and header image
-}
-
-/* This function displays the custom background image or color, and custom text color */
-function minileven_show_background_and_header_color() {
- $background = minileven_get_background();
- $header_text = minileven_header_text_display();
-
- $style = '';
-
- if ( $background['color'] || $background['image'] ) :
- $style = $background['color'] ? "background-color: #$background[color];" : '';
-
- if ( $background['image'] ) :
- $image = " background-image: url('$background[image]');";
-
- if ( ! in_array( $background['repeat'], array( 'no-repeat', 'repeat-x', 'repeat-y', 'repeat' ) ) )
- $background['repeat'] = 'repeat';
- $repeat = " background-repeat: $background[repeat];";
-
- if ( ! in_array( $background['position'], array( 'center', 'right', 'left' ) ) )
- $background['position'] = 'left';
- $position = " background-position: top $background[position];";
-
- if ( ! in_array( $background['attachment'], array( 'fixed', 'scroll' ) ) )
- $background['attachment'] = 'scroll';
- $attachment = " background-attachment: $background[attachment];";
-
- $style .= $image . $repeat . $position . $attachment;
- endif;
- endif;
-?>
- <style type="text/css">
- <?php if ( $style ) { ?>
- body {
- <?php echo trim( $style ); ?>
- }
- <?php } ?>
- #page,
- #branding {
- margin: 0.6em 0.6em 0.8em;
- }
- #site-generator {
- border: 0;
- }
- <?php if ( 'blank' != $header_text && '1' != get_option( 'wp_mobile_header_color' ) ) : ?>
- /* If The user has set a header text color, use that */
- #site-title,
- #site-title a {
- color: #<?php echo $header_text; ?>;
- <?php endif; ?>
- }
- </style>
-<?php
-}
-add_action( 'wp_head', 'minileven_show_background_and_header_color' ); \ No newline at end of file
diff --git a/plugins/jetpack/modules/minileven/theme/pub/minileven/inc/fonts/genericons-regular-webfont.eot b/plugins/jetpack/modules/minileven/theme/pub/minileven/inc/fonts/genericons-regular-webfont.eot
deleted file mode 100644
index 5a60506a..00000000
--- a/plugins/jetpack/modules/minileven/theme/pub/minileven/inc/fonts/genericons-regular-webfont.eot
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/minileven/theme/pub/minileven/inc/fonts/genericons-regular-webfont.svg b/plugins/jetpack/modules/minileven/theme/pub/minileven/inc/fonts/genericons-regular-webfont.svg
deleted file mode 100644
index 3dce209e..00000000
--- a/plugins/jetpack/modules/minileven/theme/pub/minileven/inc/fonts/genericons-regular-webfont.svg
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="genericonsregular" horiz-adv-x="2048" >
-<font-face units-per-em="2048" ascent="1638" descent="-410" />
-<missing-glyph horiz-adv-x="500" />
-<glyph unicode="&#x2000;" horiz-adv-x="1024" />
-<glyph unicode="&#x2001;" />
-<glyph unicode="&#x2002;" horiz-adv-x="1024" />
-<glyph unicode="&#x2003;" />
-<glyph unicode="&#x2004;" horiz-adv-x="682" />
-<glyph unicode="&#x2005;" horiz-adv-x="512" />
-<glyph unicode="&#x2006;" horiz-adv-x="341" />
-<glyph unicode="&#x2007;" horiz-adv-x="341" />
-<glyph unicode="&#x2008;" horiz-adv-x="256" />
-<glyph unicode="&#x2009;" horiz-adv-x="409" />
-<glyph unicode="&#x200a;" horiz-adv-x="113" />
-<glyph unicode="&#x202f;" horiz-adv-x="409" />
-<glyph unicode="&#x205f;" horiz-adv-x="512" />
-<glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" />
-<glyph unicode="&#xf100;" d="M512 512v128h768v-128h-768zM512 768v128h256v-128h-256zM512 1024v128h640v-128h-640zM512 1280v128h1024v-128h-1024zM896 768v128h640v-128h-640zM1280 1024v128h256v-128h-256z" />
-<glyph unicode="&#xf101;" d="M256 1024q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5zM768 1024q0 -106 75 -181t181 -75t181 75t75 181t-75 181t-181 75t-181 -75t-75 -181z" />
-<glyph unicode="&#xf102;" d="M128 384v896l512 128l128 256h512l128 -256h512v-1024h-1792zM256 1440v160h256v-96zM576 960q0 -185 131.5 -316.5t316.5 -131.5q186 0 317 131.5t131 316.5t-131 316.5t-317 131.5q-185 0 -316.5 -131.5t-131.5 -316.5zM704 960q0 133 93.5 226.5t226.5 93.5 t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5z" />
-<glyph unicode="&#xf103;" d="M128 512v384h384v-384h-384zM128 1024v384h896v-384h-896zM640 512v384h384v-384h-384zM1152 512v896h896v-896h-896z" />
-<glyph unicode="&#xf104;" d="M512 384v1280l1152 -640z" />
-<glyph unicode="&#xf105;" d="M640 1408q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5q0 -124 -71.5 -222t-184.5 -138v-536l-256 -128v664q-113 40 -184.5 138t-71.5 222z" />
-<glyph unicode="&#xf106;" d="M384 640l128 768h512l-256 -768h-384zM1152 640l128 768h512l-256 -768h-384z" />
-<glyph unicode="&#xf107;" d="M376 852q0 108 72 204l160 128l96 -96l-160 -128q-48 -96 0 -192l96 -96q96 -48 192 0l128 160l96 -96l-128 -160q-96 -72 -204 -72t-180 72l-96 96q-72 72 -72 180zM736 960l352 352l96 -96l-352 -352zM864 1440l128 160q96 72 204 72t180 -72l96 -96q72 -72 72 -180 t-72 -204l-160 -128l-96 96l160 128q48 96 0 192l-96 96q-96 48 -192 0l-128 -160z" />
-<glyph unicode="&#xf108;" d="M0 1152v384q0 96 80 176t176 80h1024q96 0 176 -80t80 -176v-384q0 -96 -80 -176t-176 -80h-448l-448 -448v448h-128q-96 0 -176 80t-80 176zM768 640l128 128h384q168 0 276 108t108 276v384q96 0 176 -80t80 -176v-384q0 -96 -80 -176t-176 -80h-128v-448l-448 448 h-320z" />
-<glyph unicode="&#xf109;" d="M256 768v512h384l384 384v-1280l-384 384h-384zM1216 832q21 43 32 66.5t21.5 59.5t10.5 66t-10.5 66t-21.5 59.5t-32 66.5l96 96q96 -144 96 -288q0 -160 -96 -256zM1376 672q74 74 117 166t43 186t-43 186t-117 166l96 96q95 -71 143.5 -186.5t48.5 -261.5 t-48.5 -261.5t-143.5 -186.5z" />
-<glyph unicode="&#xf200;" d="M0 1024q0 212 79.5 402t216 326.5t326.5 216t402 79.5t402 -79.5t326.5 -216t216 -326.5t79.5 -402t-79.5 -402t-216 -326.5t-326.5 -216t-402 -79.5t-402 79.5t-326.5 216t-216 326.5t-79.5 402zM128 1024q0 -307 173.5 -536.5t466.5 -327.5v224q0 224 128 224 q-125 0 -213.5 16t-146.5 47t-91.5 83t-47 115.5t-13.5 154.5q0 100 25 187t71 133q-28 71 -28 143t14 109l14 36q7 0 18 -1t44 -7.5t63 -18.5t67 -38.5t64 -62.5q144 24 300 24t276 -24q27 36 60 62.5t60.5 38.5t51.5 18.5t38 7.5l14 1q4 -5 10 -14.5t19 -40.5t20 -63 t4 -78.5t-21 -91.5q96 -144 96 -320q0 -113 -21 -187.5t-75 -128t-147.5 -77t-236.5 -23.5q49 -25 72.5 -77.5t23.5 -146.5v-224q293 98 466.5 327.5t173.5 536.5q0 176 -73 341.5t-194.5 287t-287 194.5t-341.5 73t-341.5 -73t-287 -194.5t-194.5 -287t-73 -341.5z" />
-<glyph unicode="&#xf201;" d="M0 1024q0 206 82 395.5t219.5 327t327 219.5t395.5 82t395.5 -82t327 -219.5t219.5 -327t82 -395.5t-82 -395.5t-219.5 -327t-327 -219.5t-395.5 -82t-395.5 82t-327 219.5t-219.5 327t-82 395.5zM128 1024q0 -167 58 -319.5t166 -272.5q125 205 339 360t445 232 q-16 48 -80 176q-282 -86 -481.5 -111t-446.5 -1v-64zM160 1232q194 -22 444 14t388 82q-141 282 -320 528q-194 -85 -329.5 -247.5t-182.5 -376.5zM480 320q216 -192 544 -192q181 0 368 80q-33 300 -208 688q-222 -74 -410 -225.5t-294 -350.5zM832 1904 q102 -166 304 -512q6 2 86 31t118.5 45t108 47t122 64t93.5 69q-126 126 -290.5 199t-349.5 73q-32 0 -96 -8t-96 -8zM1200 1248q22 -29 36.5 -54.5t34 -67.5t25.5 -54q170 33 336 30t288 -30q-26 285 -160 464q-71 -57 -162 -104.5t-214.5 -100.5t-183.5 -83zM1344 928 q14 -27 43 -103t74.5 -231t74.5 -306q156 108 258 278t126 362q-276 46 -576 0z" />
-<glyph unicode="&#xf202;" d="M0 381q50 -6 100 -6q293 0 522 180q-137 2 -244.5 83t-147.5 208q44 -7 79 -7q57 0 110 15q-145 29 -241 144.5t-96 267.5v5q86 -48 191 -53q-86 58 -136.5 150t-50.5 200q0 113 57 211q158 -194 383 -310t483 -129q-11 49 -11 96q0 174 123 297t297 123q89 0 168.5 -35 t138.5 -97q142 27 266 102q-47 -150 -184 -233q124 15 241 66q-84 -127 -210 -217q2 -36 2 -55q0 -168 -49 -337t-150 -323.5t-241 -273.5t-336 -190t-420 -71q-351 0 -644 189z" />
-<glyph unicode="&#xf203;" d="M0 117q0 -48 34.5 -82.5t82.5 -34.5h1814q48 0 82.5 34.5t34.5 82.5v1814q0 48 -34.5 82.5t-82.5 34.5h-1814q-48 0 -82.5 -34.5t-34.5 -82.5v-1814zM900 969v303h222v258q0 78 26 147t77 124t136.5 87t194.5 32q55 0 108 -3t79 -6l26 -3l-7 -282h-193q-76 0 -101.5 -32 t-25.5 -101v-3v-2v-9v-207h329l-14 -303h-315v-841h-320v841h-222z" />
-<glyph unicode="&#xf204;" d="M640 969v303h222v258q0 78 26 147t77 124t136.5 87t194.5 32q55 0 108 -3t79 -6l26 -3l-7 -282h-193q-76 0 -101.5 -32t-25.5 -101v-3v-2v-9v-207h329l-14 -303h-315v-841h-320v841h-222z" />
-<glyph unicode="&#xf205;" d="M0 1024q0 208 81 397.5t218.5 327t327 218.5t397.5 81t398 -81t327 -218.5t218 -327t81 -397.5q0 -209 -81 -398.5t-218 -326.5t-326.5 -218t-398.5 -81q-208 0 -397.5 81t-327 218t-218.5 327t-81 398zM128 1024q0 -259 135.5 -473.5t359.5 -327.5l-421 1156 q-74 -168 -74 -355zM285 1530q4 0 13.5 -0.5t15.5 -0.5q70 0 127.5 2.5t80.5 4.5l22 3q29 2 46.5 -16t19.5 -40.5t-13 -43t-44 -24.5q-27 -4 -70 -8l295 -877l198 591l-104 283l-90 11q-38 2 -51.5 34t4.5 62t56 28q54 -10 201 -10q70 0 127.5 2.5t80.5 4.5l22 3 q38 2 56.5 -27t5 -60.5t-51.5 -36.5q-27 -4 -69 -8l293 -870l90 301q69 177 69 293q0 51 -14 107q-18 45 -40 81q-2 3 -15 24t-15.5 25t-13 22t-13 24.5t-10 22t-10 24.5t-6.5 22t-5 25t-1 24q0 63 42 110.5t106 49.5q-121 108 -274.5 168t-321.5 60q-226 0 -421 -105 t-318 -285zM772 165q123 -37 252 -37q152 0 296 51q0 1 -1 1l-1 2l-278 763zM1485 256q199 120 317 324t118 444q0 216 -99 409q4 -44 4 -68q0 -153 -69 -324z" />
-<glyph unicode="&#xf206;" d="M128 486v485q125 -127 330 -127q30 0 59 3q-32 -61 -32 -118q0 -33 13 -63t28.5 -48.5t45.5 -47.5q-18 0 -54.5 -0.5t-55.5 -0.5q-183 0 -334 -83zM128 1599v97q0 93 65.5 158.5t158.5 65.5h1344q93 0 158.5 -65.5t65.5 -158.5v-224h-280v280h-140v-280h-280v-140h280 v-280h140v280h280v-980q0 -93 -65.5 -158.5t-158.5 -65.5h-539q5 28 5 50q0 143 -46.5 230t-189.5 194q-3 2 -20.5 15t-25 19t-25.5 20t-27.5 22.5t-24 22t-23 23.5t-17 22t-12.5 22.5t-4 20.5q0 52 23 87t99 94q180 141 180 324q0 113 -45 204.5t-128 139.5h160l135 142 h-607q-127 0 -241.5 -49t-194.5 -132zM134 301q56 89 166.5 143.5t241.5 53.5q84 -1 158 -26q19 -13 62 -42.5t61 -42t48 -37t44.5 -41.5t29 -41.5t21.5 -49.5q7 -29 7 -66q0 -16 -1 -24h-620q-79 0 -140 49t-78 124zM228 1307q-21 161 50.5 269.5t194.5 104.5 q121 -4 215.5 -118.5t116.5 -277.5q21 -160 -43 -256t-187 -92q-125 4 -225.5 108t-121.5 262z" />
-<glyph unicode="&#xf207;" d="M384 1422q0 -58 40.5 -97.5t105.5 -39.5h1q67 0 108.5 39.5t41.5 97.5q-2 60 -42 98.5t-106 38.5q-67 0 -108 -39t-41 -98zM400 384h263v793h-263v-793zM809 384h264v443q0 45 8 64q16 40 50.5 68t85.5 28q133 0 133 -179v-424h264v455q0 175 -83.5 266t-220.5 91 q-50 0 -90.5 -12t-68.5 -34t-45 -41t-33 -44v112h-264v-793z" />
-<glyph unicode="&#xf208;" d="M128 384v1280q0 106 75 181t181 75h1280q106 0 181 -75t75 -181v-1280q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM384 1422q0 -58 40.5 -97.5t105.5 -39.5h1q67 0 108.5 39.5t41.5 97.5q-2 60 -42 98.5t-106 38.5q-67 0 -108 -39t-41 -98zM400 384h263 v793h-263v-793zM809 384h264v443q0 45 8 64q16 40 50.5 68t85.5 28q133 0 133 -179v-424h264v455q0 175 -83.5 266t-220.5 91q-50 0 -90.5 -12t-68.5 -34t-45 -41t-33 -44v112h-264v-793z" />
-<glyph unicode="&#xf209;" d="M171 1260q0 109 35.5 219t110 213t179 182t254 126.5t323.5 47.5q176 0 327.5 -60.5t253.5 -161t160 -231t58 -270.5q0 -246 -85 -443t-241 -309.5t-355 -112.5q-99 0 -186.5 46.5t-121.5 110.5q-73 -290 -89 -347q-34 -123 -127 -270l-149 54q-7 167 22 290l162 688 q-40 81 -40 200q0 139 70.5 232.5t172.5 93.5q83 0 127 -53.5t44 -135.5q0 -51 -18.5 -124t-49 -170t-44.5 -154q-23 -99 37.5 -171t161.5 -72q117 0 209.5 92t142 244.5t49.5 334.5q0 214 -139 349t-387 135q-139 0 -257.5 -49.5t-197 -133t-122.5 -193t-44 -229.5 q0 -147 83 -247q18 -21 21.5 -34t-3.5 -37q-16 -61 -25 -101q-7 -24 -24.5 -32t-39.5 1q-127 51 -192.5 181.5t-65.5 300.5z" />
-<glyph unicode="&#xf210;" d="M0 1024q0 208 81 398t218.5 327t327 218t397.5 81q209 0 398.5 -81t326.5 -218t218 -326.5t81 -398.5t-81 -398.5t-218 -326.5t-326.5 -218t-398.5 -81q-147 0 -290 42q74 116 103 219l72 282q28 -53 99 -90.5t151 -37.5q162 0 288.5 91.5t195.5 251t69 359.5 q0 114 -47 220t-130 187.5t-206.5 130.5t-265.5 49q-141 0 -262 -38.5t-205.5 -103t-145.5 -147.5t-89.5 -172.5t-28.5 -178.5q0 -138 53 -243.5t156 -147.5q18 -8 32.5 -1t18.5 26q2 9 10 41t11 41q5 19 2.5 30t-16.5 28q-68 78 -68 200q0 97 35.5 186t99.5 156.5t160 108 t209 40.5q201 0 313.5 -109.5t112.5 -283.5q0 -148 -40 -271.5t-115 -198t-169 -74.5q-82 0 -131.5 58.5t-30.5 138.5q11 46 35.5 125t39.5 138t15 101q0 66 -35.5 109.5t-102.5 43.5q-82 0 -139.5 -76t-57.5 -189q0 -43 8 -83.5t16 -59.5l9 -19q-113 -475 -132 -558 q-24 -97 -18 -235q-275 120 -444 374t-169 564z" />
-<glyph unicode="&#xf211;" d="M160 1024q0 -172 122 -294t294 -122t294 122t122 294t-122 294t-294 122t-294 -122t-122 -294zM1056 1024q0 -172 122 -294t294 -122t294 122t122 294t-122 294t-294 122t-294 -122t-122 -294z" />
-<glyph unicode="&#xf300;" d="M256 896v384q0 106 75 181t181 75h1024q106 0 181 -75t75 -181v-384q0 -106 -75 -181t-181 -75h-448l-448 -448v448h-128q-106 0 -181 75t-75 181z" />
-<glyph unicode="&#xf301;" d="M384 512v1024h384l64 -128h448v-128h-640l-128 -256h128l64 128h960l-256 -640h-1024z" />
-<glyph unicode="&#xf302;" d="M256 768l768 768h512v-512l-768 -768zM1152 1280q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5z" />
-<glyph unicode="&#xf303;" d="M256 1088q0 143 55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5t-55.5 -273.5t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5zM384 1088q0 -117 45.5 -223.5t123 -184t184 -123t223.5 -45.5 t223.5 45.5t184 123t123 184t45.5 223.5t-45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5zM896 1062v474h128v-421l298 -298l-90 -91z" />
-<glyph unicode="&#xf304;" d="M512 384v256q0 159 112.5 271.5t271.5 112.5h256q159 0 271.5 -112.5t112.5 -271.5v-256h-1024zM768 1408q0 106 75 181t181 75t181 -75t75 -181t-75 -181t-181 -75t-181 75t-75 181z" />
-<glyph unicode="&#xf305;" d="M256 384v1280h256v128h128v-128h640v128h128v-128h256v-1280h-1408zM384 640q0 -53 37.5 -90.5t90.5 -37.5h896q53 0 90.5 37.5t37.5 90.5v640q0 53 -37.5 90.5t-90.5 37.5h-896q-53 0 -90.5 -37.5t-37.5 -90.5v-640zM768 1216q0 26 19 45t45 19h128q26 0 45 -19t19 -45 v-512q0 -26 -19 -45t-45 -19t-45 19t-19 45v448h-64q-26 0 -45 19t-19 45z" />
-<glyph unicode="&#xf306;" d="M256 384v1280h256v128h128v-128h640v128h128v-128h256v-1280h-1408zM384 640q0 -53 37.5 -90.5t90.5 -37.5h896q53 0 90.5 37.5t37.5 90.5v640q0 53 -37.5 90.5t-90.5 37.5h-896q-53 0 -90.5 -37.5t-37.5 -90.5v-640zM768 1216q0 26 19 45t45 19h256h2h1h3 q22 -2 38.5 -18t19.5 -39v-2v-2v-1v-2q0 -5 -2 -15l-128 -512q-6 -26 -28.5 -40t-48.5 -7q-26 6 -40 28.5t-7 48.5l108 433h-174q-26 0 -45 19t-19 45z" />
-<glyph unicode="&#xf307;" d="M256 384v1280h256v128h128v-128h640v128h128v-128h256v-1280h-1408zM384 640q0 -53 37.5 -90.5t90.5 -37.5h896q53 0 90.5 37.5t37.5 90.5v640q0 53 -37.5 90.5t-90.5 37.5h-896q-53 0 -90.5 -37.5t-37.5 -90.5v-640zM512 640v128h128v-128h-128zM512 896v128h128v-128 h-128zM768 640v128h128v-128h-128zM768 896v128h128v-128h-128zM768 1152v128h128v-128h-128zM1024 640v128h128v-128h-128zM1024 896v128h128v-128h-128zM1024 1152v128h128v-128h-128zM1280 896v128h128v-128h-128zM1280 1152v128h128v-128h-128z" />
-<glyph unicode="&#xf400;" d="M256 1216q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5q0 -184 -111 -337l495 -495l-128 -128l-495 495q-153 -111 -337 -111q-117 0 -223.5 45.5t-184 123t-123 184t-45.5 223.5zM384 1216q0 -185 131.5 -316.5 t316.5 -131.5q186 0 317 131.5t131 316.5t-131 316.5t-317 131.5q-185 0 -316.5 -131.5t-131.5 -316.5z" />
-<glyph unicode="&#xf401;" d="M256 1216q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5q0 -184 -111 -337l495 -495l-128 -128l-495 495q-153 -111 -337 -111q-117 0 -223.5 45.5t-184 123t-123 184t-45.5 223.5zM384 1216q0 -185 131.5 -316.5 t316.5 -131.5q186 0 317 131.5t131 316.5t-131 316.5t-317 131.5q-185 0 -316.5 -131.5t-131.5 -316.5zM512 1152v128h640v-128h-640z" />
-<glyph unicode="&#xf402;" d="M256 1216q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5q0 -184 -111 -337l495 -495l-128 -128l-495 495q-153 -111 -337 -111q-117 0 -223.5 45.5t-184 123t-123 184t-45.5 223.5zM384 1216q0 -185 131.5 -316.5 t316.5 -131.5q186 0 317 131.5t131 316.5t-131 316.5t-317 131.5q-185 0 -316.5 -131.5t-131.5 -316.5zM512 1152v128h256v256h128v-256h256v-128h-256v-256h-128v256h-256z" />
-<glyph unicode="&#xf403;" d="M0 1024l506 506q101 103 234.5 160.5t283.5 57.5t283.5 -57.5t233.5 -159.5l507 -507l-506 -507q-101 -103 -234.5 -160t-283.5 -57t-283.5 57.5t-233.5 160.5zM272 1024l370 -371q77 -78 175.5 -119.5t206.5 -41.5t206 41.5t174 118.5l373 372l-371 371 q-158 161 -382 161q-108 0 -206.5 -41t-173.5 -119zM640 1024q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5zM1024 1152q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5 t-90.5 -37.5t-37.5 -90.5z" />
-<glyph unicode="&#xf404;" d="M0 1024l506 506q101 103 234.5 160.5t283.5 57.5q193 0 358 -95l-143 -143q-103 46 -215 46q-108 0 -206.5 -41t-173.5 -119l-372 -372l240 -240l-136 -136zM339 429l90 -90l1280 1280l-90 90zM640 1024q0 159 112.5 271.5t271.5 112.5q44 0 98 -14l-468 -468 q-14 54 -14 98zM666 395l143 143q103 -46 215 -46q108 0 206 41.5t174 118.5l373 372l-241 241l136 135l376 -376l-506 -507q-101 -103 -234.5 -160t-283.5 -57q-193 0 -358 95zM926 654l468 468q14 -54 14 -98q0 -159 -112.5 -271.5t-271.5 -112.5q-44 0 -98 14z" />
-<glyph unicode="&#xf405;" d="M640 768l320 320l-320 320l128 128l320 -320l320 320l128 -128l-320 -320l320 -320l-128 -128l-320 320l-320 -320z" />
-<glyph unicode="&#xf406;" d="M128 256l832 832l-832 832l128 128l832 -832l832 832l128 -128l-832 -832l832 -832l-128 -128l-832 832l-832 -832z" />
-<glyph unicode="&#xf407;" d="M384 1280q0 106 75 181t181 75h140q20 56 69.5 92t110.5 36q62 0 111 -35.5t69 -92.5h140q106 0 181 -75t75 -181h-128v-768q0 -53 -37.5 -90.5t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v768h-128zM640 576q0 -26 19 -45t45 -19t45 19t19 45v640q0 26 -19 45 t-45 19t-45 -19t-19 -45v-640zM896 576q0 -26 19 -45t45 -19t45 19t19 45v640q0 26 -19 45t-45 19t-45 -19t-19 -45v-640zM1152 576q0 -26 19 -45t45 -19t45 19t19 45v640q0 26 -19 45t-45 19t-45 -19t-19 -45v-640z" />
-<glyph unicode="&#xf408;" d="M256 1151l476 -330l-183 -535l475 332l475 -332l-183 535l476 329h-587l-181 535l-180 -534h-588z" />
-<glyph unicode="&#xf409;" d="M384 1024l640 640l640 -640l-128 -128l-512 512l-512 -512zM640 512v384l384 384l384 -384v-384h-256v384h-256v-384h-256z" />
-<glyph unicode="&#xf410;" d="M0 384l640 640l384 -384l384 384l640 -640h-2048zM0 512v1152l576 -576zM0 1792h2048l-1024 -1024zM1472 1088l576 576v-1152z" />
-<glyph unicode="&#xf411;" d="M384 384v448l896 896l448 -448l-896 -896h-448zM512 768l256 -256l128 128l-256 256zM685 941l96 -96l595 595l-96 96zM845 781l96 -96l595 595l-96 96z" />
-<glyph unicode="&#xf412;" d="M256 640v704l384 384v-704h640v448l640 -640l-640 -640v448h-1024z" />
-<glyph unicode="&#xf413;" d="M128 384q0 106 75 181t181 75t181 -75t75 -181t-75 -181t-181 -75t-181 75t-75 181zM128 971v345q240 0 459 -94t377.5 -253.5t252.5 -379.5t94 -461h-345q0 170 -63.5 324t-181.5 273q-119 119 -272 182.5t-321 63.5zM129 1582v345q243 0 475 -64.5t428.5 -181 t362 -282.5t281 -363.5t180 -430.5t64.5 -477h-345q0 197 -52 385.5t-145.5 348t-227 294t-292 228t-346 146t-383.5 52.5z" />
-<glyph unicode="&#xf414;" d="M21 230q-57 102 31 244l760 1237q57 93 134.5 126.5t155 0t135.5 -126.5l759 -1237q88 -142 31 -244t-224 -102h-1557q-168 0 -225 102zM896 512q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5t-37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5zM896 896 q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5v384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5v-384z" />
-<glyph unicode="&#xf415;" d="M128 1024h400q45 0 79.5 27.5t44.5 69.5q33 125 136.5 206t235.5 81q154 0 270 -114q38 -38 90.5 -38t90.5 38q37 38 37 91t-37 90q-88 89 -204.5 139t-246.5 50q-194 0 -353 -106t-234 -278h-309v-256zM536 663q0 -53 37 -90q89 -89 205 -139t246 -50q194 0 353 106 t234 278h309v256h-400q-45 0 -79.5 -27.5t-44.5 -69.5q-33 -125 -136.5 -206t-235.5 -81q-156 0 -269 115q-38 37 -91 37t-91 -38q-37 -38 -37 -91zM768 1024q0 -106 75 -181t181 -75t181 75t75 181t-75 181t-181 75t-181 -75t-75 -181z" />
-<glyph unicode="&#xf416;" d="M512 832v320h128v-320q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5t93.5 226.5v640q0 80 -56 136t-136 56t-136 -56t-56 -136v-512q0 -26 19 -45t45 -19t45 19t19 45v452h128v-452q0 -80 -56 -136t-136 -56t-136 56t-56 136v512q0 133 93.5 226.5t226.5 93.5t226.5 -93.5 t93.5 -226.5v-640q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5z" />
-<glyph unicode="&#xf417;" d="M384 1216q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5t-44.5 -222.5t-124.5 -185.5l-407 -406l-407 406q-80 80 -124.5 185.5t-44.5 222.5zM640 1216q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5t93.5 226.5t-93.5 226.5 t-226.5 93.5t-226.5 -93.5t-93.5 -226.5z" />
-<glyph unicode="&#xf418;" d="M608 1056l128 128l224 -192l448 512l128 -96l-512 -768h-128z" />
-<glyph unicode="&#xf419;" d="M0 256v256h2048v-256h-2048zM0 896v256h2048v-256h-2048zM0 1536v256h2048v-256h-2048z" />
-<glyph unicode="&#xf420;" d="M384 512l640 640l640 -640h-1280zM384 1280v128h1280v-128h-1280z" />
-<glyph unicode="&#xf421;" d="M384 896v256h1152v-256h-1152z" />
-<glyph unicode="&#xf422;" d="M384 512v1024h1152v-1024h-1152zM512 640h896v640h-896v-640z" />
-<glyph unicode="&#xf500;" d="M128 0l960 960l960 -960h-1920z" />
-<glyph unicode="&#xf501;" d="M0 128l960 960l-960 960v-1920z" />
-<glyph unicode="&#xf502;" d="M128 2048l960 -960l960 960h-1920z" />
-<glyph unicode="&#xf503;" d="M1088 1088l960 960v-1920z" />
-</font>
-</defs></svg> \ No newline at end of file
diff --git a/plugins/jetpack/modules/minileven/theme/pub/minileven/inc/fonts/genericons-regular-webfont.ttf b/plugins/jetpack/modules/minileven/theme/pub/minileven/inc/fonts/genericons-regular-webfont.ttf
deleted file mode 100644
index 45228d9e..00000000
--- a/plugins/jetpack/modules/minileven/theme/pub/minileven/inc/fonts/genericons-regular-webfont.ttf
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/minileven/theme/pub/minileven/inc/fonts/genericons-regular-webfont.woff b/plugins/jetpack/modules/minileven/theme/pub/minileven/inc/fonts/genericons-regular-webfont.woff
deleted file mode 100644
index a64be4b1..00000000
--- a/plugins/jetpack/modules/minileven/theme/pub/minileven/inc/fonts/genericons-regular-webfont.woff
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/minileven/theme/pub/minileven/inc/template-tags.php b/plugins/jetpack/modules/minileven/theme/pub/minileven/inc/template-tags.php
deleted file mode 100644
index 6a398391..00000000
--- a/plugins/jetpack/modules/minileven/theme/pub/minileven/inc/template-tags.php
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-/**
- * Custom template tags for this theme.
- *
- * Eventually, some of the functionality here could be replaced by core features
- *
- * @package Minileven
- * @since Minileven 2.0
- */
-
-/**
- * Display navigation to next/previous pages when applicable
- */
-function minileven_content_nav( $nav_id ) {
- global $wp_query;
-
- if ( $wp_query->max_num_pages > 1 ) : ?>
- <nav id="<?php echo $nav_id; ?>">
- <h3 class="assistive-text"><?php _e( 'Post navigation', 'jetpack' ); ?></h3>
- <div class="nav-previous"><?php next_posts_link( __( '<span class="meta-nav">&laquo;</span> Older', 'jetpack' ) ); ?></div>
- <div class="nav-next"><?php previous_posts_link( __( 'Newer <span class="meta-nav">&raquo;</span>', 'jetpack' ) ); ?></div>
- </nav><!-- #nav-above -->
- <?php endif;
-}
-
-/**
- * Template for comments and pingbacks.
- * Used as a callback by wp_list_comments() for displaying the comments.
- * @since Minileven 1.0
- */
-function minileven_comment( $comment, $args, $depth ) {
- $GLOBALS['comment'] = $comment;
- switch ( $comment->comment_type ) :
- case 'pingback' :
- case 'trackback' :
- ?>
- <li class="post pingback">
- <p><?php _e( 'Pingback:', 'jetpack' ); ?> <?php comment_author_link(); ?></p>
- <?php
- break;
- default :
- ?>
- <li <?php comment_class(); ?> id="li-comment-<?php comment_ID(); ?>">
- <article id="comment-<?php comment_ID(); ?>" class="comment">
- <footer class="comment-meta">
- <div class="comment-author vcard">
- <?php
- $avatar_size = 32;
- if ( '0' != $comment->comment_parent )
- $avatar_size = 24;
-
- echo get_avatar( $comment, $avatar_size );
-
- /* translators: 1: comment author, 2: date and time */
- printf( __( '%1$s on %2$s', 'jetpack' ),
- sprintf( '<span class="fn">%s</span>', get_comment_author_link() ),
- sprintf( '<a href="%1$s"><time pubdate datetime="%2$s">%3$s</time></a>',
- esc_url( get_comment_link( $comment->comment_ID ) ),
- get_comment_time( 'c' ),
- /* translators: 1: date, 2: time */
- sprintf( __( '%1$s at %2$s', 'jetpack' ), get_comment_date(), get_comment_time() )
- )
- );
- ?>
- </div><!-- .comment-author .vcard -->
-
- <?php if ( $comment->comment_approved == '0' ) : ?>
- <em class="comment-awaiting-moderation"><?php _e( 'Your comment is awaiting moderation.', 'jetpack' ); ?></em>
- <br />
- <?php endif; ?>
-
- </footer>
-
- <div class="comment-content"><?php comment_text(); ?></div>
- <div class="reply">
- <?php comment_reply_link( array_merge( $args, array( 'reply_text' => __( 'Reply', 'jetpack' ), 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?>
- </div><!-- .reply -->
- </article><!-- #comment-## -->
-
- <?php
- break;
- endswitch;
-}
-
-/**
- * Prints HTML with meta information for the current post-date/time and author.
- * @since Minileven 1.0
- */
-function minileven_posted_on() {
- printf( __( '<span class="entry-date"><a href="%1$s" title="%2$s" rel="bookmark"><time datetime="%3$s" pubdate>%4$s</time></a></span>', 'jetpack' ),
- esc_url( get_permalink() ),
- esc_attr( get_the_time() ),
- esc_attr( get_the_date( 'c' ) ),
- esc_html( get_the_date() )
- );
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/minileven/theme/pub/minileven/inc/tweaks.php b/plugins/jetpack/modules/minileven/theme/pub/minileven/inc/tweaks.php
deleted file mode 100644
index a0c664f5..00000000
--- a/plugins/jetpack/modules/minileven/theme/pub/minileven/inc/tweaks.php
+++ /dev/null
@@ -1,103 +0,0 @@
-<?php
-/**
- * Custom functions that act independently of the theme templates
- *
- * Eventually, some of the functionality here could be replaced by core features
- *
- * @package Minileven
- * @since Minileven 2.0
- */
-
-/**
-* Sets the post excerpt length based on number of characters, without breaking words at the end
-*
-*/
-function minileven_excerpt( $count ) {
- $excerpt = get_the_content();
- $excerpt = strip_tags( $excerpt );
- $excerpt = strip_shortcodes( $excerpt );
- $excerpt = substr( $excerpt, 0, $count );
- $excerpt = substr( $excerpt, 0, strripos( $excerpt, " " ) );
- $excerpt = $excerpt . minileven_continue_reading_link();
- return $excerpt;
-}
-/**
-
-/**
- * Returns a "Continue Reading" link for excerpts
- */
-function minileven_continue_reading_link() {
- return ' &hellip; <a href="'. esc_url( get_permalink() ) . '">' . __( 'Continue reading <span class="meta-nav">&rarr;</span>', 'jetpack' ) . '</a>';
-}
-
-/**
- * Replaces "[...]" (appended to automatically generated excerpts) with an ellipsis and minileven_continue_reading_link().
- */
-function minileven_auto_excerpt_more( $more ) {
- return ' &hellip;' . minileven_continue_reading_link();
-}
-add_filter( 'excerpt_more', 'minileven_auto_excerpt_more' );
-
-/**
- * Adds a pretty "Continue Reading" link to custom post excerpts.
- *
- * To override this link in a child theme, remove the filter and add your own
- * function tied to the get_the_excerpt filter hook.
- */
-function minileven_custom_excerpt_more( $output ) {
- if ( has_excerpt() && ! is_attachment() ) {
- $output .= minileven_continue_reading_link();
- }
- return $output;
-}
-add_filter( 'get_the_excerpt', 'minileven_custom_excerpt_more' );
-
-/**
- * Get our wp_nav_menu() fallback, wp_page_menu(), to show a home link.
- */
-function minileven_page_menu_args( $args ) {
- $args['show_home'] = true;
- return $args;
-}
-add_filter( 'wp_page_menu_args', 'minileven_page_menu_args' );
-
-/**
- * Adds a custom class to the array of body classes, to allow Minileven to be targeted with Custom CSS.
- */
-function minileven_body_classes( $classes ) {
- $classes[] = 'mobile-theme';
- return $classes;
-}
-add_filter( 'body_class', 'minileven_body_classes' );
-
-/**
- * Filters wp_title to print a neat <title> tag based on what is being viewed.
- *
- * @since Minileven 2.0
- */
-function minileven_wp_title( $title, $sep ) {
- global $page, $paged;
-
- if ( is_feed() )
- return $title;
-
- // Add the blog name
- $title .= get_bloginfo( 'name' );
-
- // Add the blog description for the home/front page.
- $site_description = get_bloginfo( 'description', 'display' );
- if ( $site_description && ( is_home() || is_front_page() ) )
- $title .= " $sep $site_description";
-
- // Add a page number if necessary:
- if ( $paged >= 2 || $page >= 2 )
- $title .= " $sep " . sprintf( __( 'Page %s', 'jetpack' ), max( $paged, $page ) );
-
- return $title;
-}
-add_filter( 'wp_title', 'minileven_wp_title', 10, 2 );
-
-/**
- * Add theme support for Responsive Videos.
- */
-add_theme_support( 'jetpack-responsive-videos' ); \ No newline at end of file
diff --git a/plugins/jetpack/modules/minileven/theme/pub/minileven/index.php b/plugins/jetpack/modules/minileven/theme/pub/minileven/index.php
deleted file mode 100644
index 63a51a19..00000000
--- a/plugins/jetpack/modules/minileven/theme/pub/minileven/index.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-/**
- * The main template file.
- *
- * This is the most generic template file in a WordPress theme
- * and one of the two required files for a theme (the other being style.css).
- * It is used to display a page when nothing more specific matches a query.
- * E.g., it puts together the home page when no home.php file exists.
- * Learn more: http://codex.wordpress.org/Template_Hierarchy
- *
- * @package Minileven
- */
-
-get_header(); ?>
-
- <div id="primary">
- <div id="content" role="main">
-
- <?php if ( is_archive() ) : ?>
- <header class="page-header">
- <h1 class="page-title">
- <?php if ( is_day() ) : ?>
- <?php printf( __( 'Daily Archives: %s', 'jetpack' ), '<span>' . get_the_date() . '</span>' ); ?>
- <?php elseif ( is_month() ) : ?>
- <?php printf( __( 'Monthly Archives: %s', 'jetpack' ), '<span>' . get_the_date( 'F Y' ) . '</span>' ); ?>
- <?php elseif ( is_year() ) : ?>
- <?php printf( __( 'Yearly Archives: %s', 'jetpack' ), '<span>' . get_the_date( 'Y' ) . '</span>' ); ?>
- <?php elseif ( is_category() ) : ?>
- <?php printf( __( 'Posted in %s', 'jetpack' ), '<span>' . single_cat_title( '', false ) . '</span>' ); ?>
- <?php elseif ( is_tag() ) : ?>
- <?php printf( __( 'Tagged with %s', 'jetpack' ), '<span>' . single_tag_title( '', false ) . '</span>' ); ?>
- <?php elseif( is_author() ) : ?>
- <?php printf( __( 'Posted by %s', 'jetpack' ), '<span>' . get_the_author() . '</span>' ); ?>
- <?php else : ?>
- <?php _e( 'Blog Archives', 'jetpack' ); ?>
- <?php endif; ?>
- </h1>
- </header>
- <?php endif; ?>
-
- <?php if ( is_search() ) : ?>
- <header class="page-header">
- <h1 class="page-title"><?php printf( __( 'Search Results for: %s', 'jetpack' ), '<span>' . get_search_query() . '</span>' ); ?></h1>
- </header>
- <?php endif; ?>
-
- <?php if ( have_posts() ) : // Start the loop ?>
- <?php while ( have_posts() ) : the_post(); ?>
-
- <?php get_template_part( 'content', get_post_format() ); ?>
-
- <?php endwhile; ?>
-
- <?php else : ?>
- <article id="post-0" class="post error404 not-found">
- <header class="entry-header">
- <h1 class="entry-title"><?php _e( 'Nothing Found', 'jetpack' ); ?></h1>
- </header><!-- .entry-header -->
-
- <div class="entry-content">
- <p><?php _e( 'Apologies, but no results were found for the requested archive. Perhaps searching will help find a related post.', 'jetpack' ); ?></p>
- <?php get_search_form(); ?>
- </div><!-- .entry-content -->
- </article><!-- #post-0 -->
-
- <?php endif; ?>
-
- </div><!-- #content -->
-
- <?php minileven_content_nav( 'nav-below' ); ?>
-
- </div><!-- #primary -->
-
-<?php get_sidebar(); ?>
-<?php get_footer(); ?>
diff --git a/plugins/jetpack/modules/minileven/theme/pub/minileven/js/small-menu.js b/plugins/jetpack/modules/minileven/theme/pub/minileven/js/small-menu.js
deleted file mode 100644
index 1f336a2f..00000000
--- a/plugins/jetpack/modules/minileven/theme/pub/minileven/js/small-menu.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * navigation.js
- *
- * Handles toggling the navigation menu for small screens.
- */
-( function() {
- var nav = document.getElementById( 'access' ), button, menu;
- if ( ! nav ) {
- return;
- }
- button = nav.getElementsByTagName( 'h3' )[0];
- menu = nav.getElementsByTagName( 'ul' )[0];
- if ( ! button ) {
- return;
- }
-
- // Hide button if menu is missing or empty.
- if ( ! menu || ! menu.childNodes.length ) {
- button.style.display = 'none';
- return;
- }
-
- button.onclick = function() {
- if ( -1 === menu.className.indexOf( 'nav-menu' ) ) {
- menu.className = 'nav-menu';
- }
-
- if ( -1 !== button.className.indexOf( 'toggled-on' ) ) {
- button.className = button.className.replace( ' toggled-on', '' );
- menu.className = menu.className.replace( ' toggled-on', '' );
- } else {
- button.className += ' toggled-on';
- menu.className += ' toggled-on';
- }
- };
-} )();
diff --git a/plugins/jetpack/modules/minileven/theme/pub/minileven/page.php b/plugins/jetpack/modules/minileven/theme/pub/minileven/page.php
deleted file mode 100644
index 0b09197b..00000000
--- a/plugins/jetpack/modules/minileven/theme/pub/minileven/page.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-/**
- * The template for displaying all pages.
- *
- * This is the template that displays all pages by default.
- * Please note that this is the WordPress construct of pages
- * and that other 'pages' on your WordPress site will use a
- * different template.
- *
- * @package Minileven
- */
-
-get_header(); ?>
-
- <div id="primary">
- <div id="content" role="main">
-
- <?php while ( have_posts() ) : the_post(); ?>
-
- <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
- <header class="entry-header">
- <?php if ( '1' == get_option( 'wp_mobile_featured_images' ) && minileven_show_featured_images() ) : ?>
- <div class="entry-thumbnail">
- <a href="<?php the_permalink(); ?>" title="<?php echo esc_attr( sprintf( __( 'Permalink to %s', 'jetpack' ), the_title_attribute( 'echo=0' ) ) ); ?>" rel="<?php the_ID(); ?>" class="minileven-featured-thumbnail"><?php the_post_thumbnail(); ?></a>
- </div><!-- .entry-thumbnail -->
- <?php endif; ?>
- <h1 class="entry-title"><?php the_title(); ?></h1>
- </header><!-- .entry-header -->
-
- <div class="entry-content">
- <?php the_content(); ?>
- <?php wp_link_pages( array( 'before' => '<div class="page-link"><span>' . __( 'Pages:', 'jetpack' ) . '</span>', 'after' => '</div>' ) ); ?>
- </div><!-- .entry-content -->
- <?php if ( is_user_logged_in() ) : ?>
- <footer class="entry-meta">
- <?php edit_post_link( __( 'Edit', 'jetpack' ), '<span class="edit-link">', '</span>' ); ?>
- </footer><!-- .entry-meta -->
- <?php endif; ?>
- </article><!-- #post-<?php the_ID(); ?> -->
-
- <?php comments_template( '', true ); ?>
-
- <?php endwhile; // end of the loop. ?>
-
- </div><!-- #content -->
- </div><!-- #primary -->
-<?php get_footer(); ?> \ No newline at end of file
diff --git a/plugins/jetpack/modules/minileven/theme/pub/minileven/rtl.css b/plugins/jetpack/modules/minileven/theme/pub/minileven/rtl.css
deleted file mode 100644
index b2839d74..00000000
--- a/plugins/jetpack/modules/minileven/theme/pub/minileven/rtl.css
+++ /dev/null
@@ -1,574 +0,0 @@
-/*
-Theme Name: Twenty Eleven
-
-Adding support for language written in a Right To Left (RTL) direction is easy -
-it's just a matter of overwriting all the horizontal positioning attributes
-of your CSS stylesheet in a separate stylesheet file named rtl.css.
-
-http://codex.wordpress.org/Right_to_Left_Language_Support
-
-*/
-
-/* =Reset reset
------------------------------------------------ */
-
-caption, th, td {
- text-align: right;
-}
-
-/* =Structure
------------------------------------------------ */
-
-body {
- direction:rtl;
- unicode-bidi:embed;
-}
-
-/* Showcase */
-.page-template-showcase-php section.recent-posts {
- float: left;
- margin: 0 31% 0 0;
-}
-.page-template-showcase-php #main .widget-area {
- float: right;
- margin: 0 0 0 -22.15%;
-}
-
-/* One column */
-
-.one-column article.feature-image.small .entry-summary a {
- left: auto;
- right: -9%;
-}
-
-/* Simplify the pullquotes and pull styles */
-.one-column.singular .entry-meta .edit-link a {
- right: 0px;
- left: auto;
-}
-/* Make sure we have room for our comment avatars */
-.one-column .commentlist > li.comment {
- margin-left: 0;
- margin-right: 102px;
-}
-/* Make sure the logo and search form don't collide */
-.one-column #branding #searchform {
- right: auto;
- left: 40px;
-}
-/* Talking avatars take up too much room at this size */
-.one-column .commentlist > li.comment {
- margin-right: 0;
-}
-.one-column .commentlist > li.comment .comment-meta,
-.one-column .commentlist > li.comment .comment-content {
- margin-right: 0;
- margin-left: 85px;
-}
-.one-column .commentlist .avatar {
- right: auto;
- left: 1.625em;
-}
-.one-column .commentlist .children .avatar {
- left: auto;
- right: 2.2em;
-}
-
-/* =Global
------------------------------------------------ */
-
-/* Text elements */
-p {
- margin-bottom: 1.625em;
-}
-ul, ol {
- margin: 0 2.5em 1.625em 0;
-}
-.ltr ul, ol {
- margin: 0 0 1.625em 2.5em;
-}
-blockquote {
- font-family: Arial, sans-serif;
-}
-blockquote em, blockquote i, blockquote cite {
- font-style: normal;
-}
-
-/* Forms */
-textarea {
- padding-left: 0;
- padding-right: 3px;
-}
-input#s {
- background-position: 97% 6px;
- padding: 4px 28px 4px 10px;
-}
-
-/* Assistive text */
-#access a.assistive-text:active,
-#access a.assistive-text:focus {
- left: auto;
- right: 7.6%;
-}
-
-/* =Header
------------------------------------------------ */
-
-#site-title {
- margin-right: 0;
- margin-left: 270px;
-}
-
-#site-description {
- margin: 0 0 3.65625em 270px;
-}
-
-/* =Menu
--------------------------------------------------------------- */
-
-#access {
- float: right;
-}
-#access ul {
- margin: 0 -0.8125em 0 0;
- padding-right: 0;
-}
-#access li {
- float: right;
-}
-#access ul ul {
- float: right;
- left: auto;
- right: 0;
-}
-#access ul ul ul {
- left: auto;
- right: 100%;
-}
-
-/* Search Form */
-#branding #searchform {
- right: auto;
- left: 7.6%;
- text-align: left;
-}
-#branding #s {
- float: left;
-}
-#branding .only-search + #access div {
- padding-right: 0;
- padding-left: 205px;
-}
-
-
-/* =Content
------------------------------------------------ */
-.entry-title,
-.entry-header .entry-meta {
- padding-right: 0;
- padding-left: 76px;
-}
-.entry-content td,
-.comment-content td {
- padding: 6px 0 6px 10px;
-}
-.page-link span {
- margin-right: 0;
- margin-left: 6px;
-}
-.entry-meta .edit-link a {
- float: left;
-}
-/* Images */
-
-.wp-caption .wp-caption-text,
-.gallery-caption {
- font-family: Arial, sans-serif;
-}
-.wp-caption .wp-caption-text {
- padding: 10px 40px 5px 0px;
-}
-.wp-caption .wp-caption-text:before {
- margin-right: 0;
- margin-left: 5px;
- left: auto;
- right: 10px;
-}
-#content .gallery-columns-4 .gallery-item {
- padding-right:0;
- padding-left:2%;
-}
-
-/* Author Info */
-.singular #author-info {
- margin: 2.2em -35.4% 0 -35.6%;
-}
-#author-avatar {
- float: right;
- margin-right: 0;
- margin-left: -78px;
-}
-#author-description {
- float: right;
- margin-left: 0;
- margin-right: 108px;
-}
-/* Comments link */
-.entry-header .comments-link a {
- background-image: url(images/comment-bubble-rtl.png);
- right: auto;
- left: 0;
-}
-
-/*
- Post Formats Headings
-*/
-.singular .entry-title,
-.singular .entry-header .entry-meta {
- padding-left: 0;
-}
-.singular .entry-header .entry-meta {
- left: auto;
- right: 0;
-}
-.singular .entry-meta .edit-link a {
- left: auto;
- right: 50px;
-}
-
-
-/* =Gallery
------------------------------------------------ */
-
-.format-gallery .gallery-thumb {
- float: right;
- margin: .375em 0 0 1.625em;
-}
-
-
-/* =Status
------------------------------------------------ */
-
-.format-status img.avatar {
- float: right;
- margin: 4px 0 2px 10px;
-}
-
-
-/* =Image
------------------------------------------------ */
-
-.indexed.format-image div.entry-meta {
- float: right;
-}
-/* =error404
-----------------------
-------------------------- */
-.error404 #main .widget {
- float: right;
- margin-right: auto;
- margin-left: 3.7%;
-}
-.error404 #main .widget_archive {
- margin-left: 0;
-}
-.error404 #main .widget_tag_cloud {
- margin-left: 0;
-}
-
-/* =Showcase
------------------------------------------------ */
-
-article.intro .edit-link a {
- right: auto;
- left: 20px;
-}
-
-/* Featured post */
-section.featured-post {
- float: right;
-}
-
-/* Small featured post */
-section.featured-post .attachment-small-feature {
- float: left;
- margin: 0 0 1.625em -8.9%;
- right: auto;
- left: -15px;
-}
-article.feature-image.small {
- float: right;
-}
-article.feature-image.small .entry-summary p a {
- left:auto;
- right: -23.8%;
- padding: 9px 85px 9px 26px;
-}
-
-/* Large featured post */
-section.feature-image.large .hentry {
- left:auto;
- right: 9%;
- margin: 1.625em 0 0 9%;
-}
-/* Featured Slider */
-.featured-posts .showcase-heading {
- padding-left: 0;
- padding-right: 8.9%;
-}
-.featured-posts section.featured-post {
- left: auto;
- right: 0;
-}
-#content .feature-slider {
- right: auto;
- left: 8.9%;
-}
-.feature-slider li {
- float: right;
-}
-/* Recent Posts */
-section.recent-posts .other-recent-posts a[rel="bookmark"] {
- float: right;
-}
-section.recent-posts .other-recent-posts .comments-link a,
-section.recent-posts .other-recent-posts .comments-link > span {
- padding: 0.3125em 1em 0.3125em 0;
- left: 0;
- text-align: left;
-}
-
-/* =Attachments
------------------------------------------------ */
-
-/* =Navigation
--------------------------------------------------------------- */
-
-.nav-previous {
- float: right;
-}
-.nav-next {
- float: left;
- text-align: left;
-}
-
-/* Singular navigation */
-#nav-single {
- float: left;
- text-align: left;
-}
-#nav-single .nav-next {
- padding-left: 0;
- padding-right: .5em;
-}
-
-
-/* =Widgets
------------------------------------------------ */
-
-.widget ul ul {
- margin-left: 0;
- margin-right: 1.5em;
-}
-
-/* Twitter */
-.widget_twitter .timesince {
- margin-right: 0;
- margin-left: -10px;
- text-align: left;
-}
-
-/* =Comments
------------------------------------------------ */
-
-.commentlist .children li.comment {
- border-left: none;
- border-right: 1px solid #ddd;
- -moz-border-radius: 3px 0 0 3px;
- border-radius: 3px 0 0 3px;
-}
-.commentlist .children li.comment .comment-meta {
- margin-left: 0;
- margin-right: 50px;
-}
-.commentlist .avatar {
- left: auto;
- right: -102px;
-}
-.commentlist > li:before {
- content: url(images/comment-arrow-rtl.png);
- left:auto;
- right: -21px;
-}
-.commentlist > li.pingback:before {
- content: '';
-}
-.commentlist .children .avatar {
- left: auto;
- right: 2.2em;
-}
-
-/* Post author highlighting */
-.commentlist > li.bypostauthor:before {
- content: url(images/comment-arrow-bypostauthor-rtl.png);
-}
-
-/* sidebar-page.php comments */
-/* Make sure we have room for our comment avatars */
-.page-template-sidebar-page-php .commentlist > li.comment,
-.page-template-sidebar-page-php.commentlist .pingback {
- margin-left: 0;
- margin-right: 102px;
-}
-
-/* Comment Form */
-#respond .comment-form-author label,
-#respond .comment-form-email label,
-#respond .comment-form-url label,
-#respond .comment-form-comment label {
- left: auto;
- right: 4px;
-}
-#respond .comment-form-author label,
-#respond .comment-form-email label,
-#respond .comment-form-url label,
-#respond .comment-form-comment label {
- -webkit-box-shadow: -1px 2px 2px rgba(204,204,204,0.8);
- -moz-box-shadow: -1px 2px 2px rgba(204,204,204,0.8);
- box-shadow: -1px 2px 2px rgba(204,204,204,0.8);
-}
-#respond .comment-form-author .required,
-#respond .comment-form-email .required {
- left: auto;
- right: 75%;
-}
-#respond .form-submit {
- float: left;
-}
-#respond input#submit {
- left: auto;
- right: 30px;
- padding: 5px 22px 5px 42px;
-}
-#respond #cancel-comment-reply-link {
- margin-left: 0;
- margin-right: 10px;
-}
-#cancel-comment-reply-link {
- right: auto;
- left: 1.625em;
-}
-
-/* =Footer
------------------------------------------------ */
-
-/* Two Footer Widget Areas */
-#supplementary.two .widget-area {
- float: right;
- margin-right: 0;
- margin-left: 3.7%;
-}
-#supplementary.two .widget-area + .widget-area {
- margin-left: 0;
-}
-
-/* Three Footer Widget Areas */
-#supplementary.three .widget-area {
- float: right;
- margin-right: 0;
- margin-left: 3.7%;
-}
-#supplementary.three .widget-area + .widget-area + .widget-area {
- margin-left: 0;
-}
-
-/* Site Generator Line */
-#site-generator .sep {
- background-position: right center;
-}
-
-
-/* =Responsive Structure
------------------------------------------------ */
-
-@media (max-width: 800px) {
- /* Simplify the showcase template when small feature */
- section.featured-post .attachment-small-feature,
- .one-column section.featured-post .attachment-small-feature {
- float: right;
- }
- article.feature-image.small {
- float: left;
- }
- article.feature-image.small .entry-summary p a {
- right: 0;
- }
- .singular .entry-meta .edit-link a {
- left: auto;
- right: 0px;
- }
- /* Make sure we have room for our comment avatars */
- .commentlist > li.comment,
- .commentlist .pingback {
- margin-left: 0;
- margin-right: 102px;
- }
- /* No need to float footer widgets at this size */
- #colophon #supplementary .widget-area {
- margin-left: 0;
- }
- /* No need to float 404 widgets at this size */
- .error404 #main .widget {
- margin-left: 0;
- }
-}
-@media (max-width: 650px) {
- /* @media (max-width: 650px) Reduce font-sizes for better readability on smaller devices */
- #site-title,
- #site-description {
- margin-left: 0;
- }
- /* Talking avatars take up too much room at this size */
- .commentlist > li.comment,
- .commentlist > li.pingback {
- margin-right: 0 !important;
- }
- .commentlist .children .avatar {
- left: auto;
- right: 2.2em;
- }
- /* Use the available space in the smaller comment form */
- #respond .comment-form-author .required,
- #respond .comment-form-email .required {
- left: auto;
- right: 95%;
- }
- #content .gallery-columns-3 .gallery-item {
- padding-right: 0;
- padding-left:2%;
- }
-}
-@media (max-width: 450px) {
- #content .gallery-columns-2 .gallery-item {
- padding-right:0;
- padding-left:4%;
- }
-}
-
-/* =Print
------------------------------------------------ */
-
-@media print {
- #primary {
- float: right;
- }
- /* Comments */
- .commentlist .avatar {
- left: auto;
- right: 2.2em;
- }
- .commentlist li.comment .comment-meta {
- margin-left: 0;
- margin-right: 50px;
- }
-}
diff --git a/plugins/jetpack/modules/minileven/theme/pub/minileven/screenshot.png b/plugins/jetpack/modules/minileven/theme/pub/minileven/screenshot.png
deleted file mode 100644
index d735057f..00000000
--- a/plugins/jetpack/modules/minileven/theme/pub/minileven/screenshot.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/minileven/theme/pub/minileven/searchform.php b/plugins/jetpack/modules/minileven/theme/pub/minileven/searchform.php
deleted file mode 100644
index b4fd79aa..00000000
--- a/plugins/jetpack/modules/minileven/theme/pub/minileven/searchform.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-/**
- * The template for displaying search forms in Minileven
- *
- * @package Minileven
- */
-?>
- <form method="get" id="searchform" action="<?php echo esc_url( home_url( '/' ) ); ?>">
- <label for="s" class="assistive-text"><?php _e( 'Search', 'jetpack' ); ?></label>
- <input type="text" class="field" name="s" id="s" placeholder="<?php esc_attr_e( 'Search', 'jetpack' ); ?>" />
- <input type="submit" class="submit" name="submit" id="searchsubmit" value="<?php esc_attr_e( 'Search', 'jetpack' ); ?>" />
- </form>
diff --git a/plugins/jetpack/modules/minileven/theme/pub/minileven/sidebar.php b/plugins/jetpack/modules/minileven/theme/pub/minileven/sidebar.php
deleted file mode 100644
index 5d1a4a06..00000000
--- a/plugins/jetpack/modules/minileven/theme/pub/minileven/sidebar.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-/**
- * The Sidebar containing the main widget area.
- *
- * @package Minileven
- */
-?>
- <?php if ( is_active_sidebar( 'sidebar-1' ) ) : ?>
- <div id="secondary" class="widget-area" role="complementary">
- <?php dynamic_sidebar( 'sidebar-1' ); ?>
- </div><!-- #secondary .widget-area -->
- <?php endif; ?> \ No newline at end of file
diff --git a/plugins/jetpack/modules/minileven/theme/pub/minileven/style.css b/plugins/jetpack/modules/minileven/theme/pub/minileven/style.css
deleted file mode 100644
index d3727dc0..00000000
--- a/plugins/jetpack/modules/minileven/theme/pub/minileven/style.css
+++ /dev/null
@@ -1,1588 +0,0 @@
-/*
-Theme Name: Minileven
-Theme URI: http://theme.wordpress.com
-Author: Automattic
-Author URI: http://theme.wordpress.com
-Description: The Minileven theme is a clean, lightweight mobile experience for your blog based on Twenty Eleven.
-Version: 2.0-wpcom
-License: GNU General Public License
-License URI: license.txt
-Tags: dark, light, white, black, gray, one-column, fluid-layout, responsive-layout, custom-background, custom-header, custom-menu, full-width-template, infinite-scroll, microformats, post-formats, rtl-language-support, sticky-post, theme-options, translation-ready, blog, bright, clean, contemporary, elegant, minimal, modern, photography, simple, tumblelog
-*/
-
-.image-attachment .entry-caption p {
- font-size: 0.769em;
- letter-spacing: 0.1em;
- line-height: 2.6;
- margin: 0 0 2.6em;
- text-transform: uppercase;
-}
-
-/* =Webfont, thanks to FontSquirrel.com for conversion!
--------------------------------------------------------------- */
-@font-face {
- font-family: 'Genericons';
- src: url('inc/fonts/genericons-regular-webfont.eot');
- src: url('inc/fonts/genericons-regular-webfont.eot?#iefix') format('embedded-opentype'),
- url('inc/fonts/genericons-regular-webfont.woff') format('woff'),
- url('inc/fonts/genericons-regular-webfont.ttf') format('truetype'),
- url('inc/fonts/genericons-regular-webfont.svg#genericonsregular') format('svg');
- font-weight: normal;
- font-style: normal;
-
-}
-
-/* =Reset default browser CSS. Based on work by Eric Meyer: http://meyerweb.com/eric/tools/css/reset/index.html
--------------------------------------------------------------- */
-
-html, body, div, span, applet, object, iframe,
-h1, h2, h3, h4, h5, h6, p, blockquote, pre,
-a, abbr, acronym, address, big, cite, code,
-del, dfn, em, font, ins, kbd, q, s, samp,
-small, strike, strong, sub, sup, tt, var,
-dl, dt, dd, ol, ul, li,
-fieldset, form, label, legend,
-table, caption, tbody, tfoot, thead, tr, th, td {
- border: 0;
- font-family: inherit;
- font-size: 100%;
- font-style: inherit;
- font-weight: inherit;
- margin: 0;
- outline: 0;
- padding: 0;
- vertical-align: baseline;
-}
-:focus {/* remember to define focus styles! */
- outline: 0;
-}
-body {
- background: #fff;
- line-height: 1;
-}
-ol, ul {
- list-style: none;
-}
-a img {
- border: 0;
-}
-article, aside, details, figcaption, figure,
-footer, header, menu, nav, section {
- display: block;
-}
-
-
-/* =Global
------------------------------------------------ */
-
-body, input, textarea {
- color: #404040;
- font: 13px "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
- line-height: 1.625;
- word-wrap: break-word;
-}
-body {
- background: #f1f1f1;
- font-weight: 400;
-}
-#page,
-#branding {
- background: #fff;
- -moz-box-shadow: 0 1px 2px rgba( 0,0,0,0.075 );
- -webkit-box-shadow: 0 1px 2px rgba( 0,0,0,0.075 );
- box-shadow: 0 1px 2px rgba( 0,0,0,0.075 );
-}
-
-/* Headings */
-h1,h2,h3,h4,h5,h6 {
- clear: both;
-}
-hr {
- background-color: #ccc;
- border: 0;
- height: 1px;
- margin-bottom: 1.625em;
-}
-
-/* Text elements */
-p {
- margin-bottom: 1.0em;
-}
-ul, ol {
- margin: 0 0 1.625em 2.5em;
-}
-ul {
- list-style: square;
-}
-ol {
- list-style-type: decimal;
-}
-ul ul, ol ol, ul ol, ol ul {
- margin-bottom: 0;
-}
-dl {
- margin: 0 1.625em;
-}
-dt {
- font-weight: bold;
-}
-dd {
- margin-bottom: 1.625em;
-}
-strong {
- font-weight: bold;
-}
-cite, em, i {
- font-style: italic;
-}
-blockquote {
- font-style: italic;
- font-weight: normal;
- margin: 0;
-}
-blockquote em, blockquote i, blockquote cite {
- font-style: normal;
-}
-blockquote cite {
- color: #666;
- font-size: 0.800em;
- font-weight: 300;
- letter-spacing: 0.05em;
- text-transform: uppercase;
-}
-pre {
- background: #f4f4f4;
- font: 1em "Courier 10 Pitch", Courier, monospace;
- line-height: 1.5;
- margin-bottom: 1.625em;
- overflow: auto;
- padding: 0.75em 1.625em;
-}
-code, kbd {
- font: 1em Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace;
-}
-abbr, acronym, dfn {
- border-bottom: 1px dotted #666;
- cursor: help;
-}
-address {
- display: block;
- margin: 0 0 1.625em;
-}
-ins {
- background: #fff9c0;
- text-decoration: none;
-}
-sup,
-sub {
- font-size: 0.667em;
- height: 0;
- line-height: 1;
- position: relative;
- vertical-align: baseline;
-}
-sup {
- bottom: 1ex;
-}
-sub {
- top: .5ex;
-}
-
-/* Forms */
-input[type=text],
-input[type=email],
-input[type=password],
-textarea {
- background: #fafafa;
- -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,0.1);
- -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.1);
- box-shadow: inset 0 1px 1px rgba(0,0,0,0.1);
- border: 1px solid #ddd;
- color: #888;
-}
-input[type=text]:focus,
-input[type=email]:focus,
-textarea:focus {
- color: #373737;
-}
-textarea {
- padding-left: 3px;
- width: 98%;
-}
-input[type=text],
-input[type=email] {
- padding: 3px;
-}
-input#s {
- border-radius: 2px;
- height: 1.692em;
- line-height: 1.2;
- padding: 0.4em 0.6em 0.29em;
-}
-input#s:focus {
- padding-bottom: 0.3em;
-}
-input#searchsubmit {
- display: none;
-}
-input#s:focus,
-input[type=text]:focus,
-input[type=email]:focus,
-textarea:focus {
- font-size: 1.231em;
-}
-
-/* Links */
-a {
- color: #278dbc;
- text-decoration: none;
-}
-a:hover,
-.entry-title a:hover,
-.entry-meta .edit-link a:hover,
-.commentlist .edit-link a:hover,
-.entry-meta .comments-link a:hover {
- color: #7dcae7;
-}
-/* Assistive text */
-.assistive-text {
- clip: rect(1px, 1px, 1px, 1px);
- position: absolute !important;
- visibility: hidden;
-}
-
-
-/* =Structure
------------------------------------------------ */
-
-#page {
- margin: 0 auto;
- padding: 2.5%;
-}
-#branding {
- margin: 0.6em auto 0;
- padding: 2.5% 2.5% 1.5%;
-}
-
-#primary,
-#secondary {
- margin: 0 auto;
- width: auto;
-}
-#secondary {
- margin-top: 0.8em;
-}
-
-/* Alignment */
-.aligncenter,
-.alignleft,
-.alignright {
- clear: both;
- display: block;
- margin-left: auto;
- margin-right: auto;
-}
-
-/* Make sure embeds and iframes scale on smaller screens */
-embed,
-iframe,
-object {
- width: auto;
-}
-.jetpack-video-wrapper {
- margin-bottom: 1.0em;
-}
-
-/* Make sure the WordPress Video Shortcode scales on smaller screens */
-video {
- height: 100% !important;
- max-width: 100% !important;
- width: 100% !important;
-}
-.wp-video {
- width: 100% !important;
-}
-
-
-/* =Header
------------------------------------------------ */
-
-#branding .site-branding {
- margin-bottom: 1.3em;
-}
-#site-title,
-#site-description {
- clear: none;
-}
-#site-title a {
- color: #111;
- font-size: 1.846em;
- font-weight: bold;
- line-height: 1.3;
-}
-#site-description {
- color: #7a7a7a;
- font-size: 0.923em;
-}
-
-/* Header Image */
-#header-img {
- text-align: center;
-}
-header img {
- max-width: 100%;
- height: auto;
-}
-
-
-/* =Navigation and Search Form
------------------------------------------------ */
-
-.menu-search {
- background: #1e8cbe;
- -webkit-box-shadow: inset 0 -1px rgba(0, 86, 132, 0.8), 0 1px 3px rgba(0, 86, 132, 0.4);
- -moz-box-shadow: inset 0 -1px 0 rgba(0, 86, 132, 0.8), 0 1px 3px rgba(0, 86, 132, 0.4);
- box-shadow: inset 0 -1px 0 rgba(0, 86, 132, 0.8), 0 1px 3px rgba(0, 86, 132, 0.4);
- clear: both;
- height: 46px;
- width: 100%;
-}
-.menu-search:after {
- clear: both;
- content: "";
- display: block;
-}
-.menu-search,
-#access,
-.menu-toggle,
-#access .menu-label {
- height: 46px;
-}
-
-/* Small menu */
-#access {
- float: left;
- width: 60%;
-}
-.search-form {
- float: right;
- text-align: right;
- width: 39%;
-}
-.menu-toggle {
- cursor: pointer;
-}
-#access h3.toggled-on {
- opacity: 0.8;
-}
-#access ul.nav-menu {
- background: #fff;
- -webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.15), 0 3px 8px rgba(0, 0, 0, 0.1);
- -moz-box-shadow: 0 0 2px rgba(0, 0, 0, 0.15), 0 3px 8px rgba(0, 0, 0, 0.1);
- box-shadow: 0 0 2px rgba(0, 0, 0, 0.15), 0 3px 8px rgba(0, 0, 0, 0.1);
- display: none;
- position: absolute;
- left: 0.5em;
- top: 3em;
- width: 100%;
- z-index: 99999;
-}
-.admin-bar #access ul.nav-menu {
- top: 6.6em;
-}
-.main-small-navigation .menu {
- background: #f9f9f9;
- border: 1px solid #e9e9e9;
- position: absolute;
- width: 100%;
-}
-#access ul.nav-menu:before {
- color: #fff;
- content: '\f500';
- display: inline-block;
- font: 0.9em/1 'Genericons';
- left: 49px;
- position: absolute;
- top: -11px;
- }
-#access ul li {
- border-bottom: 1px solid rgba( 0, 0, 0, 0.1 );
- padding: 1em 0.8em;
-}
-#access ul li:last-of-type {
- border: none;
-}
-#access ul ul li,
-#access ul ul ul li {
- border: none;
- padding-bottom: 0;
-}
-#access a {
- display: block;
- font-size: 1em;
-}
-#access ul {
- display: none;
- list-style: none;
- margin: 0;
- padding: 0.5em 0;
-}
-#access ul ul {
- display: block;
-}
-#access .sub-menu {
- margin: 0 0 0 15px;
-}
-#access .menu-toggle {
- clear: none;
- color: #fff;
- font-size: 1.077em;
- line-height: 2.5;
- padding: 0.3em 0 0 0.8em;
-}
-#access .menu-toggle:after {
- content: '\f502';
- cursor: pointer;
- display: inline-block;
- font: 0.7em/1 'Genericons';
- margin-left: 0.8em;
- margin-top: 1.7em;
- position: absolute;
-}
-#access .toggled-on:after {
- opacity: 0.8;
-}
-#access ul.nav-menu.toggled-on {
- display: inline-block;
-}
-.search-form #s {
- background: #006d9d;
- border: 1px solid #00587f;
- border-width: 0 0 0 1px;
- border-radius: 0;
- color: rgba( 255, 255, 255, 0.6 );
- font-size: 1em;
- height: 30px;
- margin-right: 0;
- padding: 0.6em;
- width: 80%;
-}
-
-
-/* =Content
------------------------------------------------ */
-
-.page-title {
- color: #666;
- font-size: 0.769em;
- font-weight: 300;
- letter-spacing: 0.1em;
- line-height: 2.6;
- margin-bottom: 1.2em;
- text-transform: uppercase;
-}
-.page-title a {
- font-size: 0.923em;
- font-weight: bold;
- letter-spacing: 0;
- text-transform: none;
-}
-.hentry,
-.no-results {
- clear: both;
- margin: 0 0 1.5em;
- padding: 0 0 2em;
- position: relative;
-}
-.hentry {
- border-bottom: 1px solid #ececec;
-}
-.hentry:last-child,
-.no-results,
-body.singular .hentry {
- border-bottom: none;
-}
-.blog .sticky .entry-header .entry-meta {
- clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
- clip: rect(1px, 1px, 1px, 1px);
- position: absolute !important;
-}
-.entry-title {
- clear: both;
- font-size: 1.538em;
- line-height: 1.260;
- word-wrap: break-word;
-}
-.featured-post .entry-title {
- font-size: 1.077em;
-}
-.entry-title,
-.entry-title a {
- color: #333;
- text-decoration: none;
-}
-.entry-meta {
- color: #666;
- clear: both;
- font-size: 0.923em;
- font-weight: 300;
- line-height: 1.385;
- overflow: hidden;
- padding: 0 0 0.6em 0;
-}
-.entry-meta .entry-date,
-.entry-meta .entry-gallery {
- display: block;
- float: left;
-}
-.entry-meta .author-link {
- display: block;
- margin-top: 0.7em;
-}
-.entry-meta .comments-link {
- display: block;
- float: right;
-}
-.entry-meta .edit-link a {
- margin-right: .5em;
-}
-.entry-meta .edit-link a,
-.commentlist .edit-link a,
-.entry-meta .comments-link a,
-a.comment-reply-link {
- color: #464646;
-}
-.entry-meta .edit-link a {
- float: right;
- text-decoration: none;
- padding: 0 0.615em;
-}
-.entry-meta .comments-link a:before,
-.entry-meta .edit-link a:before {
- display: inline-block;
- -webkit-font-smoothing: antialiased;
- font: normal 18px/1 'Genericons';
- margin-right: 0.1em;
- vertical-align: top;
-}
-.entry-meta .comments-link a:before {
- content: '\f300';
- font-family: Genericons;
-}
-.entry-meta .edit-link a:before,
-.commentlist .edit-link a:before {
- content: '\f411';
- font-family: Genericons;
-}
-.commentlist .edit-link a:before,
-.entry-meta .comments-link a:before,
-.entry-meta .edit-link a:before,
-a.comment-reply-link:before {
- color: #7bcbe4;
-}
-.entry-content {
- font-size: 1em;
- line-height: 1.538;
- margin: 1.286em 0;
- padding: 0;
-}
-.entry-content h1,
-.entry-content h2,
-.comment-content h1,
-.comment-content h2,
-.entry-content h3,
-.comment-content h3 {
- color: #000;
- margin: 0 0 .8125em;
-}
-.entry-content h1,
-.comment-content h1 {
- font-size: 1.5em;
- line-height: 2.9;
-}
-.entry-content h2,
-.comment-content h2 {
- font-size: 1.4em;
- line-height: 2.6;
-}
-.entry-content h3,
-.comment-content h3 {
- font-size: 1.3em;
- line-height: 2.3;
-}
-.entry-content table,
-.comment-content table {
- border-bottom: 1px solid #ddd;
- margin: 0 0 1.625em;
- width: 100%;
-}
-.entry-content th,
-.comment-content th {
- color: #666;
- font-size: 0.769em;
- font-weight: 500;
- letter-spacing: 0.1em;
- line-height: 2.6;
- text-transform: uppercase;
-}
-.entry-content td,
-.comment-content td {
- border-top: 1px solid #ddd;
- padding: 0.600em 1em 0.600em 0;
-}
-.entry-content #s {
- width: 75%;
-}
-.comment-content ul,
-.comment-content ol {
- margin-bottom: 1.625em;
-}
-.comment-content ul ul,
-.comment-content ol ol,
-.comment-content ul ol,
-.comment-content ol ul {
- margin-bottom: 0;
-}
-dl.gallery-item {
- margin: 0;
-}
-.page-link {
- clear: both;
- display: block;
- margin: 0 0 1em;
-}
-.page-link a {
- background: #278dbc;
- color: #fff;
- margin: 0;
- padding: 0.1em 0.231em;
- text-decoration: none;
-}
-.page-link span {
- margin-right: 0.462em;
-}
-
-/* Images */
-.entry-content img,
-.comment-content img,
-.widget img {
- height: auto;
- max-width: 100% !important; /* Fluid images for posts, comments, and widgets */
-}
-#content .gallery-columns-3 .gallery-item img,
-#content .gallery-columns-4 .gallery-item img,
-#content .gallery-columns-2 .gallery-item img {
- width: 100%;
- height: auto;
-}
-img[class*="align"],
-img[class*="wp-image-"],
-img[class*="attachment-"] {
- height: auto; /* Make sure images with WordPress-added height and width attributes are scaled correctly */
-}
-img.size-full,
-img.size-large {
- max-width: 100%;
- width: auto; /* Prevent stretching of full-size and large-size images with height and width attributes in IE8 */
- height: auto; /* Make sure images with WordPress-added height and width attributes are scaled correctly */
-}
-img.size-full,
-img.size-large,
-img.size-medium {
- display: block;
- margin: 0 auto;
-}
-.entry-content img.wp-smiley {
- border: none;
- margin-bottom: 0;
- margin-top: 0;
- padding: 0;
-}
-img.alignleft,
-img.alignright,
-img.aligncenter {
- margin-bottom: 1.625em;
-}
-p img,
-.wp-caption {
- margin-top: 0.4em;
-}
-.wp-caption {
- max-width: 96%;
-}
-.wp-caption img {
- display: block;
- margin: 0 auto;
- max-width: 98%;
-}
-.wp-caption .wp-caption-text,
-.gallery-caption {
- color: #999;
- font-size: 0.923em;
-}
-.wp-caption .wp-caption-text {
- margin-bottom: 0.6em;
- padding: 0.833em 0 0.417em 0;
- position: relative;
-}
-#content .gallery {
- margin: 0 auto 1.625em;
-}
-#content .gallery a img {
- border: none;
-}
-#content .gallery-columns-3 .gallery-item {
- width: 31%;
- padding-right: 2%;
-}
-#content .gallery-columns-4 .gallery-item {
- width: 23%;
- padding-right: 2%;
-}
-#content .gallery-columns-2 .gallery-item {
- width: 45%;
- padding-right: 4%;
-}
-
-
-/* Make sure embeds and iframes fit their containers */
-embed,
-iframe,
-object {
- max-width: 100%;
-}
-
-/* Password Protected Posts */
-.post-password-required .entry-header .comments-link {
- margin: 1.625em 0 0;
-}
-.post-password-required input[type=password] {
- margin: 0.8125em 0;
-}
-.post-password-required input[type=password]:focus {
- background: #f7f7f7;
-}
-
-
-/*
-Post Formats Headings
-To hide the headings, display: none the ".entry-header .entry-format" selector,
-and remove the padding rules below.
-*/
-.entry-header .entry-format {
- color: #666;
- font-size: 0.7em;
- font-weight: 300;
- letter-spacing: 0.1em;
- line-height: 2em;
- position: absolute;
- text-transform: uppercase;
- top: -5px;
-}
-.entry-header .entry-heading .entry-title {
- padding-top: 0.8em;
-}
-.entry-header .entry-heading {
- position: relative;
-}
-.entry-thumbnail {
- margin-bottom: 0.7em;
- text-align: center;
-}
-
-/* Singular content styles for Posts and Pages */
-.singular .hentry {
- padding: 1.625em 0 0;
- position: relative;
-}
-.page .hentry {
- padding-bottom: .7em;
-}
-.singular .entry-meta .edit-link a {
- bottom: auto;
- left: 0;
- position: absolute;
- right: auto;
- top: 40px;
-}
-.single-format-gallery .hentry {
- margin-bottom: 0;
-}
-.singular #author-info {
- margin: 2.2em -8.8% 0;
- padding: 1.538em 8.8%;
-}
-
-
-/* =Gallery Posts
------------------------------------------------ */
-
-#content .gallery {
- margin-bottom: 0;
-}
-.format-gallery img {
- margin: 0;
-}
-.format-gallery .gallery-large {
- line-height: 1.2em;
- margin: 0;
- width: 100%;
-}
-.format-gallery .gallery-thumbs-2,
- .format-gallery .gallery-thumbs-3 {
- overflow: hidden;
- width: 100%;
-}
-.format-gallery .gallery-thumbs-2 img {
- margin-right: 0.3%;
- max-width: 48%;
-}
-.format-gallery .gallery-thumbs-3 img {
- float: left;
- margin-left: 0.2%;
- max-width: 33%;
-}
-.format-gallery .gallery-large,
-.format-gallery .gallery-thumbs-2 img,
- .format-gallery .gallery-thumbs-3 img {
- display: inline-block;
-}
-.format-gallery .gallery-thumbs-3 .gallery-thumb-1 img {
- margin: 0;
-}
-.gallery-info {
- margin-top: 1.3em;
-}
-
-/* =Quote Posts
------------------------------------------------ */
-
-.format-quote blockquote {
- color: #555;
- font-size: 1.308em;
- margin: 0;
-}
-
-/* =error404
------------------------------------------------ */
-
-.error404 #main #searchform {
- background: #f9f9f9;
- border: 1px solid #ddd;
- border-width: 1px 0;
- margin: 0 -8.9% 1.625em;
- overflow: hidden;
- padding: 1.625em 8.9%;
-}
-.error404 #main #s {
- width: 95%;
-}
-.error404 .widgettitle {
- font-size: 0.769em;
- letter-spacing: 0.1em;
- line-height: 2.6em;
- text-transform: uppercase;
-}
-
-
-/* =Attachments
------------------------------------------------ */
-
-.image-attachment div.attachment {
- background: #f9f9f9;
- border: 1px solid #ddd;
- border-width: 1px 0;
- margin: 0 -8.9% 1.625em;
- overflow: hidden;
- padding: 1.625em 1.625em 0;
- text-align: center;
-}
-.image-attachment div.attachment img {
- display: block;
- height: auto;
- margin: 0 auto 1.625em;
- max-width: 100%;
-}
-.image-attachment div.attachment a img {
- border-color: #f9f9f9;
-}
-.image-attachment div.attachment a:focus img,
-.image-attachment div.attachment a:hover img,
-.image-attachment div.attachment a:active img {
- border-color: #ddd;
- background: #fff;
-}
-
-
-/* =Navigation
--------------------------------------------------------------- */
-
-#content nav {
- clear: both;
-}
-#nav-below,
-#nav-single {
- margin: 0 auto 1.9em;
- overflow: hidden;
- width: 100%;
-}
-.nav-previous {
- float: left;
- width: 48%;
-}
-.nav-next {
- float: right;
- width: 46%;
-}
-#nav-single {
- display: block;
- position: static;
-}
-#nav-single .nav-previous {
- margin-left: 0;
- width: 50%;
-}
-#nav-single .nav-next {
- margin-right: 0;
- width: 49%;
-}
-.nav-previous a,
-.nav-next a {
- background: #278dbc;
- color: #fff;
- display: block;
- font-size: 1.231em;
- padding: 1em 0;
- text-align: center;
- width: 100%;
-}
-#content nav .meta-nav {
- font-weight: normal;
-}
-#jp-post-flair {
- margin: 1em auto !important;
-}
-
-
-
-/* =Widget Area & Widgets
------------------------------------------------ */
-
-.widget-area {
- background: #f9f9f9;
- border-top: 1px solid #ddd;
- color: #666;
- font-size: 0.923em;
- padding: .6em 0.8em;
- -moz-box-shadow: 0 1px 2px rgba( 0,0,0,0.075 );
- -webkit-box-shadow: 0 1px 2px rgba( 0,0,0,0.075 );
- box-shadow: 0 1px 2px rgba( 0,0,0,0.075 );
-}
-.widget {
- border-bottom: 1px solid #ddd;
- clear: both;
- margin: 0;
- overflow: hidden;
- padding: 1em 0;
-}
-.widget:last-of-type {
- border: 0;
-}
-.widget-title {
- color: #666;
- font-size: 1.2em;
- font-weight: bold;
- line-height: 2em;
- margin-bottom: 0.5em;
-}
-.widget-title a {
- color: #666;
-}
-.widget ul {
- list-style: none;
- margin-bottom: 0;
- margin-left: 0;
-}
-.widget ul ul {
- margin-left: 1.5em;
-}
-.widget ul li {
- color: #777;
-}
-.widget a {
- font-weight: normal;
- text-decoration: none;
-}
-.widget a:hover,
-.widget a:focus,
-.widget a:active {
- text-decoration: underline;
-}
-
-/* Search Widget */
-.widget_search #s {
- width: 77%;
-}
-.widget_search #searchsubmit {
- background: #ddd;
- border: 1px solid #ccc;
- -webkit-box-shadow: inset 0px -1px 1px rgba(0, 0, 0, 0.09);
- -moz-box-shadow: inset 0px -1px 1px rgba(0, 0, 0, 0.09);
- box-shadow: inset 0px -1px 1px rgba(0, 0, 0, 0.09);
- color: #888;
- line-height: 2.083em;
- position: relative;
- top: -2px;
-}
-.widget_search #searchsubmit:active {
- background: #278dbc;
- border-color: #0861a5;
- -webkit-box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.1);
- -moz-box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.1);
- box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.1);
- color: #bfddf3;
-}
-
-/* Twitter */
-.tweets {
- margin-left: 0;
-}
-.widget_twitter li {
- list-style-type: none;
- margin-bottom: 1.167em;
-}
-.widget_twitter .timesince {
- font-size: 0.917em;
- font-weight: normal;
- text-align: right;
-}
-
-/* RSS-Related Widgets */
-.widget_rss img {
- display: inline-block;
- margin: 0;
- vertical-align: middle;
-}
-.widget_rss .rss-date {
- font-size: 90%;
-}
-.widget_rss_links img,
-.widget_rss_links a:hover img,
-.widget_rss_links a:focus img,
-.widget_rss_links a:active img {
- background: transparent;
- border: none;
- padding: 0;
-}
-
-/* Calendar Widget */
-.widget_calendar #wp-calendar {
- color: #555;
- width: 95%;
- text-align: center;
-}
-.widget_calendar #wp-calendar caption,
-.widget_calendar #wp-calendar td,
-.widget_calendar #wp-calendar th {
- text-align: center;
-}
-.widget_calendar #wp-calendar caption {
- font-size: 11px;
- font-weight: 500;
- padding: 5px 0 3px 0;
- text-transform: uppercase;
-}
-.widget_calendar #wp-calendar th {
- background: #f4f4f4;
- border-top: 1px solid #ccc;
- border-bottom: 1px solid #ccc;
- font-weight: bold;
-}
-.widget_calendar #wp-calendar tfoot td {
- background: #f4f4f4;
- border-top: 1px solid #ccc;
- border-bottom: 1px solid #ccc;
-}
-
-/* Recent Comments */
-.widget_recent_comments td.recentcommentstexttop,
-.widget_recent_comments td.recentcommentstextend {
- vertical-align: top;
-}
-
-/* Authors Widget */
-.widget_authors ul {
- margin-left: 0;
-}
-.widget_authors li {
- background: none !important;
- overflow: hidden;
-}
-.widget_authors ul ul li {
- overflow: hidden;
-}
-.widget_authors img {
- float: left;
- padding-right: 0.833em;
- vertical-align: text-top;
-}
-
-/*Flickr Widget */
-.widget_flickr #flickr_badge_wrapper {
- background-color: transparent;
- border: none;
-}
-#flickr_badge_uber_wrapper a:hover,
-#flickr_badge_uber_wrapper a:link,
-#flickr_badge_uber_wrapper a:active,
-#flickr_badge_uber_wrapper a:visited {
- color: #278dbc !important;
-}
-
-
-/* =Comments
------------------------------------------------ */
-
-#comments {
- margin-top: 1.5em;
-}
-#comments-title {
- color: #000;
- font-size: 1.154em;
- font-weight: bold;
- line-height: 1em;
- padding: 1em 0;
-}
-#comment-nav-below {
- overflow: hidden;
-}
-.nopassword,
-.nocomments {
- color: #aaa;
- font-size: 1.846em;
- font-weight: 100;
- margin: 2em 0;
- text-align: center;
-}
-.commentlist {
- list-style: none;
- margin: 2em auto;
- width: 100%;
-}
-.commentlist > li.comment {
- border: 1px solid rgba(0, 0, 0, 0.1);
- border-width: 1px 0 0;
- clear: both;
- margin: 0 -2.5% 0.5em;
- overflow: hidden;
- padding: .8em;
- position: relative;
-}
-.commentlist > li.comment,
-.commentlist .pingback {
- width: auto;
-}
-
-/* Reblogs */
-.commentlist > li.reblog {
- border: 1px solid #eee;
- -moz-border-radius: 3px;
- border-radius: 3px;
- margin: 0 0 1.625em;
- padding: 1.625em;
- position: relative;
-}
-.commentlist .reblog .comment-meta {
- display: none;
-}
-.commentlist .reblog p:first-child {
- color: #999;
- font-size: 1em;
-}
-.commentlist .reblog p:first-child a {
- font-weight: bold;
-}
-.commentlist .pingback {
- border-top: 1px solid rgba( 0, 0, 0, 0.1 );
- margin: 0 -2.5% 0.5em;
-}
-.commentlist .pingback p {
- color: #c0c0c0;
- margin-bottom: 0;
- padding: 0.8em;
-}
-.commentlist .children {
- list-style: none;
- margin: 0;
-}
-.commentlist .children li.comment {
- background: #f9f9f9;
- border-top: 1px solid rgba( 0, 0, 0, 0.1 );
- clear: both;
- margin: 1.625em 0 0;
- overflow: hidden;
- padding: 1.625em 1.625em 0.5em;
- position: relative;
-}
-.comment-meta .fn {
- font-style: normal;
-}
-.comment-meta,
-.comment-content {
- margin-left: 4em;
-}
-.comment-meta {
- font-size: 0.923em;
-}
-.comment-content {
- margin-top: 1em;
-}
-.commentlist .children li.comment .comment-meta {
- line-height: 1.625;
- margin-left: 3.462em;
-}
-.commentlist .children li.comment .comment-content {
- margin: 1em 0 0 3.1em;
-}
-.comment-meta a:focus,
-.comment-meta a:active,
-.comment-meta a:hover {
-}
-.commentlist .avatar {
- background: transparent;
- display: block;
- padding: 0;
- position: absolute;
- left: 13px;
- top: 13px;
-}
-.commentlist .children .avatar {
- background: none;
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
- left: 2.2em;
- padding: 0;
- position: absolute;
- top: 2.2em;
-}
-.comment-actions {
- float: right;
- font-weight: 300;
- margin-bottom: 1em;
-}
-a.comment-reply-link:before {
- content: '\f412';
- display: inline-block;
- -webkit-font-smoothing: antialiased;
- font: normal 13px/1 'Genericons';
- margin: 0.2em 0.1em 0 0;
- vertical-align: top;
-}
-a.comment-reply-link {
- display: inline-block;
- font-size: 0.923em;
- padding: 0 0.615em;
- text-decoration: none;
-}
-a.comment-reply-link > span {
- display: inline-block;
- position: relative;
- top: -1px;
-}
-
-/* Comment Form */
-#respond {
- margin: 0 auto 1.625em;
- width: auto;
-}
-#respond input[type="text"],
-#respond textarea {
- background: #fff;
- position: relative;
- padding: 0.615em;
-}
-#respond .comment-form-author,
-#respond .comment-form-email,
-#respond .comment-form-url,
-#respond .comment-form-comment {
- position: relative;
-}
-#respond .comment-form-author label,
-#respond .comment-form-email label,
-#respond .comment-form-url label,
-#respond .comment-form-comment label {
- display: inline-block;
- font-size: 1.077em;
- padding: 0.154em 0 0;
- position: relative;
-}
-#respond textarea {
- resize: vertical;
- width: 95%;
-}
-#respond .comment-form-author .required,
-#respond .comment-form-email .required {
- color: #bd3500;
- font-size: 1.692em;
- font-weight: bold;
- left: 95%;
- position: absolute;
- top: 45px;
- z-index: 1;
-}
-#respond .comment-notes,
-#respond .logged-in-as {
- font-size: 0.8em;
- color: #666;
-}
-#respond .logged-in-as {
- margin-top: 1em;
-}
-#respond p {
- margin: 0.769em 0 0;
-}
-#respond .form-submit {
- margin: 0;
-}
-#respond input#submit {
- background-color: #2ea2cc;
- background-image: -moz-linear-gradient(top, #278dbc 0%, #0074a2 100%);
- background-image: -webkit-linear-gradient(top, #278dbc 0%,#0074a2 100%);
- background-image: -ms-linear-gradient(top, #278dbc 0%,#0074a2 100%);
- background-image: -o-linear-gradient(top, #278dbc 0%,#0074a2 100%);
- background-image: linear-gradient(top, #278dbc 0%,#0074a2 100%);
-
- -moz-box-shadow: inset 0 1px 0 rgba(120,200,230,0.5);
- -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.5);
- -o-box-shadow: inset 0 1px 0 rgba(120,200,230,0.5);
- -ms-box-shadow: inset 0 1px 0 rgba(120,200,230,0.5);
- box-shadow: inset 0 1px 0 rgba(120,200,230,0.5);
- border: none;
- -moz-border-radius: 2px 0 0 0;
- -webkit-border-radius: 2px 0 0 0;
- -o-border-radius: 2px 0 0 0;
- -ms-border-radius: 2px 0 0 0;
- border-radius: 2px;
- color: rgba( 255, 255, 255, 0.9 );
- cursor: pointer;
- font-size: 1em;
- margin: 0.462em 0;
- padding: 1em;
- left: 30px;
- text-shadow: 0 -1px 0 rgba(0,116,162,0.8);
-}
-#respond input#submit:hover {
- color: #fff;
- text-shadow: 0 -1px 0 rgb(0,116,162);
-
- background-image: -moz-linear-gradient(top, #2ea2cc 0%, #0074a2 100%);
- background-image: -webkit-linear-gradient(top, #2ea2cc 0%,#0074a2 100%);
- background-image: -o-linear-gradient(top, #2ea2cc 0%,#0074a2 100%);
- background-image: -ms-linear-gradient(top, #2ea2cc 0%,#0074a2 100%);
- background-image: linear-gradient(top, #2ea2cc 0%,#0074a2 100%);
-
- -moz-box-shadow: inset 0 1px 0 #2ea2cc, inset 0 2px 0 rgba(120,200,230,0.7);
- -webkit-box-shadow: inset 0 1px 0 #2ea2cc, inset 0 2px 0 rgba(120,200,230,0.7);
- -o-box-shadow: inset 0 1px 0 #2ea2cc, inset 0 2px 0 rgba(120,200,230,0.7);
- -ms-box-shadow: inset 0 1px 0 #2ea2cc, inset 0 2px 0 rgba(120,200,230,0.7);
- box-shadow: inset 0 1px 0 #2ea2cc, inset 0 2px 0 rgba(120,200,230,0.7);
-}
-#respond input#submit:active {
- color:rgba(255,255,255,.9);
- background-image: -moz-linear-gradient(top, #278dbc 0%, #0074a2 100%);
- background-image: -webkit-linear-gradient(top, #278dbc 0%,#0074a2 100%);
- background-image: -o-linear-gradient(top, #278dbc 0%,#0074a2 100%);
- background-image: -ms-linear-gradient(top, #278dbc 0%,#0074a2 100%);
- background-image: linear-gradient(top, #278dbc 0%,#0074a2 100%);
-
- -moz-box-shadow: inset 0 1px 5px #005684, inset 0 -1px 0 #278dbc;
- -webkit-box-shadow: inset 0 1px 5px #005684, inset 0 -1px 0 #278dbc;
- -o-box-shadow: inset 0 1px 5px #005684, inset 0 -1px 0 #278dbc;
- -ms-box-shadow: inset 0 1px 5px #005684, inset 0 -1px 0 #278dbc;
- box-shadow: inset 0 1px 5px #005684, inset 0 -1px 0 #278dbc;
-}
-.commentlist #respond {
- margin: 1.625em 0 0;
- width: auto;
-}
-#respond .comment-subscription-form {
- margin: 6px 0;
-}
-#reply-title {
- font-size: 1.5em;
-}
-.comment #reply-title {
- margin-top: 1em;
-}
-#cancel-comment-reply-link {
- color: #bd3500;
- display: block;
- font-size: 0.6em;
- font-weight: 300;
- line-height: 2.2;
- margin-top: 0.4em;
- text-decoration: none;
-}
-#respond label {
- line-height: 2.2;
-}
-#respond input[type=text] {
- display: block;
- height: 1.846em;
- width: 95%;
-}
-#respond p {
- font-size: 0.923em;
-}
-p.comment-form-comment {
- margin: 0;
-}
-.form-allowed-tags {
- display: none;
-}
-
-
-/* =Footer
------------------------------------------------ */
-
-#colophon {
- background: #f1f1f1;
- clear: both;
- margin-bottom: -2em;
- padding-bottom: 1em;
-}
-
-/* Site Generator Line */
-#site-generator {
- border-top: 1px solid #ddd;
- font-size: 0.923em;
- line-height: 2.2;
- padding: 2.2em 0.5em;
- text-align: center;
-}
-#site-generator a {
- color: #278dbc;
-}
-#site-generator .sep {
- color: transparent;
- display: inline-block;
- height: 16px;
- line-height: 1.231;
- margin: 0 0.538em;
- text-indent: 40px; /* Push the separator just out of the way */
- width: 3.077em;
-}
-
-
-/* =WP.com
------------------------------------------------ */
-
-.entry-content .twitter-tweet-rendered {
- max-width: 100% !important; /* Override the Twitter embed fixed width */
-}
-.video-player {
- max-width: 100% !important;
-}
-.videopress-placeholder,
-.video-player img {
- max-width: 100% !important;
- height: auto !important;
-}
-.syntaxhighlighter {
- overflow: auto;
-}
-.single #content #wp-likebox,
-.page #content #wp-likebox {
- display: block;
-}
-#wpl-mustlogin {
- width: 240px !important;
- margin-left: -60px !important;
-}
-img.latex {
- display: inline;
-}
-
-/* WP.com comment form */
-#comments #respond {
- max-width: 75%;
- margin: 0 auto 15px;
-}
-.content #comments #respond,
-#comments .commentlist #respond {
- max-width: 100%;
-}
-#respond textarea {
- text-indent: 0;
-}
-.singular #content .wpl-likebox {
- width: 100%;
-}
-#comments #respond {
- max-width: 100%;
-}
-#wpstats {
- display: block;
- margin: -1.8em auto 0;
-}
-#wpstats2 {
- display: none;
-}
-
-/* Adjust the width of Crowdsignal polls */
-.PDS_Poll .pds-box,
-.CSS_Poll .css-box {
- width: 99% !important;
-}
-
-/* Infinite Scroll */
-.infinite-wrap {
- border-top: 1px solid #ececec;
- padding-top: 1.5em !important;
-}
-.infinite-scroll .hentry:last-of-type,
-.infinite-scroll .hentry.last-before-infinite {
- margin-bottom: 0;
-}
-.infinite-scroll #content {
- padding-bottom: 0.1em;
-}
-#infinite-handle span:before {
- display: none;
-}
-#infinite-handle span {
- background: #278dbc;
- border-radius: 2px;
- border: none;
- color: #fff;
- cursor: pointer;
- font-size: 14px;
- font-weight: 400;
- padding: 6px 26px;
- text-align: center;
-}
-#infinite-handle span:hover {
- background: #7dcae7;
-}
-
-/* Remove margins and padding on outer containers for super-tiny screens */
-@media only screen and (min-device-width: 100px) and (max-device-width: 300px) {
- #wrapper {
- margin: 0;
- padding: 0;
- }
- #access {
- padding: 0.385em 0;
- }
- #page,
- .widget-area,
- #main,
- #branding {
- width: 100%;
- margin: 0;
- }
- .widget-area {
- padding: 0.417em;
- }
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/mobile-push.php b/plugins/jetpack/modules/mobile-push.php
deleted file mode 100644
index a421f47d..00000000
--- a/plugins/jetpack/modules/mobile-push.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Deprecated. See notes.php for the new module
- *
- * @package Jetpack
- **/
diff --git a/plugins/jetpack/modules/module-extras.php b/plugins/jetpack/modules/module-extras.php
deleted file mode 100644
index bf8cf481..00000000
--- a/plugins/jetpack/modules/module-extras.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-/*
- * Load module code that is needed even when a module isn't active.
- * For example, if a module shouldn't be activatable unless certain conditions are met, the code belongs in this file.
- */
-
-// Include extra tools that aren't modules, in a filterable way
-$tools = array(
- 'theme-tools/social-links.php',
- 'theme-tools/random-redirect.php',
- 'theme-tools/featured-content.php',
- 'theme-tools/infinite-scroll.php',
- 'theme-tools/responsive-videos.php',
- 'theme-tools/site-logo.php',
- 'theme-tools/site-breadcrumbs.php',
- 'theme-tools/social-menu.php',
- 'theme-tools/content-options.php',
- 'custom-post-types/comics.php',
- 'custom-post-types/testimonial.php',
- 'custom-post-types/nova.php',
- 'theme-tools.php',
- 'seo-tools/jetpack-seo-utils.php',
- 'seo-tools/jetpack-seo-titles.php',
- 'seo-tools/jetpack-seo-posts.php',
- 'simple-payments/simple-payments.php',
- 'verification-tools/verification-tools-utils.php',
- 'woocommerce-analytics/wp-woocommerce-analytics.php',
- 'geo-location.php',
- 'calypsoify/class.jetpack-calypsoify.php',
-
- // Keep working the VideoPress videos in existing posts/pages when the module is deactivated
- 'videopress/utility-functions.php',
- 'videopress/class.videopress-gutenberg.php',
-
- 'plugin-search.php',
-);
-
-// Not every tool needs to be included if Jetpack is inactive and not in development mode
-if ( ! Jetpack::is_active() && ! Jetpack::is_development_mode() ) {
- $tools = array(
- 'seo-tools/jetpack-seo-utils.php',
- 'seo-tools/jetpack-seo-titles.php',
- 'seo-tools/jetpack-seo-posts.php',
- );
-}
-
-/**
- * Filter extra tools (not modules) to include.
- *
- * @since 2.4.0
- * @since 5.4.0 can be used in multisite when Jetpack is not connected to WordPress.com and not in development mode.
- *
- * @param array $tools Array of extra tools to include.
- */
-$jetpack_tools_to_include = apply_filters( 'jetpack_tools_to_include', $tools );
-
-if ( ! empty( $jetpack_tools_to_include ) ) {
- foreach ( $jetpack_tools_to_include as $tool ) {
- if ( file_exists( JETPACK__PLUGIN_DIR . '/modules/' . $tool ) ) {
- require_once( JETPACK__PLUGIN_DIR . '/modules/' . $tool );
- }
- }
-}
-
-/**
- * Add the "(Jetpack)" suffix to the widget names
- */
-function jetpack_widgets_add_suffix( $widget_name ) {
- return sprintf( __( '%s (Jetpack)', 'jetpack' ), $widget_name );
-}
-add_filter( 'jetpack_widget_name', 'jetpack_widgets_add_suffix' );
diff --git a/plugins/jetpack/modules/module-headings.php b/plugins/jetpack/modules/module-headings.php
deleted file mode 100644
index 245f79eb..00000000
--- a/plugins/jetpack/modules/module-headings.php
+++ /dev/null
@@ -1,359 +0,0 @@
-<?php
-// Do not edit this file. It's generated by jetpack/tools/build-module-headings-translations.php
-
-/**
- * For a given module, return an array with translated name, description and recommended description.
- *
- * @param string $key Module file name without .php
- *
- * @return array
- */
-function jetpack_get_module_i18n( $key ) {
- static $modules;
- if ( ! isset( $modules ) ) {
- $modules = array(
- 'after-the-deadline' => array(
- 'name' => _x( 'Spelling and Grammar', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Check your spelling, style, and grammar', 'Module Description', 'jetpack' ),
- ),
-
- 'carousel' => array(
- 'name' => _x( 'Carousel', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Display images and galleries in a gorgeous, full-screen browsing experience', 'Module Description', 'jetpack' ),
- ),
-
- 'comment-likes' => array(
- 'name' => _x( 'Comment Likes', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Increase visitor engagement by adding a Like button to comments.', 'Module Description', 'jetpack' ),
- ),
-
- 'comments' => array(
- 'name' => _x( 'Comments', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Let readers use WordPress.com, Twitter, Facebook, or Google+ accounts to comment', 'Module Description', 'jetpack' ),
- ),
-
- 'contact-form' => array(
- 'name' => _x( 'Contact Form', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Add a customizable contact form to any post or page using the Jetpack Form Block.', 'Module Description', 'jetpack' ),
- ),
-
- 'copy-post' => array(
- 'name' => _x( 'Copy Post', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Copy an existing post\'s content into a new draft post', 'Module Description', 'jetpack' ),
- 'recommended description' => _x( 'Copy an existing post\'s content into a new draft post', 'Jumpstart Description', 'jetpack' ),
- ),
-
- 'custom-content-types' => array(
- 'name' => _x( 'Custom content types', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Display different types of content on your site with custom content types.', 'Module Description', 'jetpack' ),
- ),
-
- 'custom-css' => array(
- 'name' => _x( 'Custom CSS', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Tweak your site’s CSS without modifying your theme.', 'Module Description', 'jetpack' ),
- ),
-
- 'enhanced-distribution' => array(
- 'name' => _x( 'Enhanced Distribution', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Increase reach and traffic.', 'Module Description', 'jetpack' ),
- ),
-
- 'google-analytics' => array(
- 'name' => _x( 'Google Analytics', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Set up Google Analytics without touching a line of code.', 'Module Description', 'jetpack' ),
- ),
-
- 'gravatar-hovercards' => array(
- 'name' => _x( 'Gravatar Hovercards', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Enable pop-up business cards over commenters’ Gravatars.', 'Module Description', 'jetpack' ),
- ),
-
- 'infinite-scroll' => array(
- 'name' => _x( 'Infinite Scroll', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Automatically load new content when a visitor scrolls', 'Module Description', 'jetpack' ),
- ),
-
- 'json-api' => array(
- 'name' => _x( 'JSON API', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Allow applications to securely access your content.', 'Module Description', 'jetpack' ),
- ),
-
- 'latex' => array(
- 'name' => _x( 'Beautiful Math', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Use LaTeX markup for complex equations and other geekery.', 'Module Description', 'jetpack' ),
- ),
-
- 'lazy-images' => array(
- 'name' => _x( 'Lazy Images', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Speed up your site and create a smoother viewing experience by loading images as visitors scroll down the screen, instead of all at once.', 'Module Description', 'jetpack' ),
- 'recommended description' => _x( 'Lazy-loading images improve your site\'s speed and create a smoother viewing experience. Images will load as visitors scroll down the screen, instead of all at once.', 'Jumpstart Description', 'jetpack' ),
- ),
-
- 'likes' => array(
- 'name' => _x( 'Likes', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Give visitors an easy way to show they appreciate your content.', 'Module Description', 'jetpack' ),
- ),
-
- 'manage' => array(
- 'name' => _x( 'Manage', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Manage all of your sites from a centralized dashboard.', 'Module Description', 'jetpack' ),
- 'recommended description' => _x( 'Helps you remotely manage plugins, turn on automated updates, and more from <a href="https://wordpress.com/plugins/" target="_blank">wordpress.com</a>.', 'Jumpstart Description', 'jetpack' ),
- ),
-
- 'markdown' => array(
- 'name' => _x( 'Markdown', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Write posts or pages in plain-text Markdown syntax', 'Module Description', 'jetpack' ),
- ),
-
- 'masterbar' => array(
- 'name' => _x( 'WordPress.com Toolbar', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Replaces the admin bar with a useful toolbar to quickly manage your site via WordPress.com.', 'Module Description', 'jetpack' ),
- ),
-
- 'minileven' => array(
- 'name' => _x( 'Mobile Theme', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Enable the Jetpack Mobile theme', 'Module Description', 'jetpack' ),
- ),
-
- 'monitor' => array(
- 'name' => _x( 'Monitor', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Jetpack’s downtime monitoring will continuously watch your site, and alert you the moment that downtime is detected.', 'Module Description', 'jetpack' ),
- 'recommended description' => _x( 'Receive immediate notifications if your site goes down, 24/7.', 'Jumpstart Description', 'jetpack' ),
- ),
-
- 'notes' => array(
- 'name' => _x( 'Notifications', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Receive instant notifications of site comments and likes.', 'Module Description', 'jetpack' ),
- ),
-
- 'photon-cdn' => array(
- 'name' => _x( 'Asset CDN', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Jetpack’s Site Accelerator loads your site faster by optimizing your images and serving your images and static files from our global network of servers.', 'Module Description', 'jetpack' ),
- ),
-
- 'photon' => array(
- 'name' => _x( 'Image CDN', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Mirrors and serves your images from our free and fast image CDN, improving your site’s performance with no additional load on your servers.', 'Module Description', 'jetpack' ),
- 'recommended description' => _x( 'Mirrors and serves your images from our free and fast image CDN, improving your site’s performance with no additional load on your servers.', 'Jumpstart Description', 'jetpack' ),
- ),
-
- 'post-by-email' => array(
- 'name' => _x( 'Post by email', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Publish posts by sending an email', 'Module Description', 'jetpack' ),
- ),
-
- 'protect' => array(
- 'name' => _x( 'Protect', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Protect yourself from brute force and distributed brute force attacks, which are the most common way for hackers to get into your site.', 'Module Description', 'jetpack' ),
- ),
-
- 'publicize' => array(
- 'name' => _x( 'Publicize', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Publicize makes it easy to share your site’s posts on several social media networks automatically when you publish a new post.', 'Module Description', 'jetpack' ),
- ),
-
- 'pwa' => array(
- 'name' => _x( 'Progressive Web Apps', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Speed up and improve the reliability of your site using the latest in web technology.', 'Module Description', 'jetpack' ),
- ),
-
- 'related-posts' => array(
- 'name' => _x( 'Related posts', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Keep visitors engaged on your blog by highlighting relevant and new content at the bottom of each published post.', 'Module Description', 'jetpack' ),
- ),
-
- 'search' => array(
- 'name' => _x( 'Search', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Enhanced search, powered by Elasticsearch, a powerful replacement for WordPress search.', 'Module Description', 'jetpack' ),
- ),
-
- 'seo-tools' => array(
- 'name' => _x( 'SEO Tools', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Better results on search engines and social media.', 'Module Description', 'jetpack' ),
- ),
-
- 'sharedaddy' => array(
- 'name' => _x( 'Sharing', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Add Twitter, Facebook and Google+ buttons at the bottom of each post, making it easy for visitors to share your content.', 'Module Description', 'jetpack' ),
- ),
-
- 'shortcodes' => array(
- 'name' => _x( 'Shortcode Embeds', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Embed media from popular sites without any coding.', 'Module Description', 'jetpack' ),
- ),
-
- 'shortlinks' => array(
- 'name' => _x( 'WP.me Shortlinks', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Create short and simple links for all posts and pages.', 'Module Description', 'jetpack' ),
- ),
-
- 'sitemaps' => array(
- 'name' => _x( 'Sitemaps', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Make it easy for search engines to find your site.', 'Module Description', 'jetpack' ),
- ),
-
- 'sso' => array(
- 'name' => _x( 'Secure Sign On', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Allow users to log into this site using WordPress.com accounts', 'Module Description', 'jetpack' ),
- 'recommended description' => _x( 'Lets you log in to all your Jetpack-enabled sites with one click using your WordPress.com account.', 'Jumpstart Description', 'jetpack' ),
- ),
-
- 'stats' => array(
- 'name' => _x( 'Site Stats', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Collect valuable traffic stats and insights.', 'Module Description', 'jetpack' ),
- ),
-
- 'subscriptions' => array(
- 'name' => _x( 'Subscriptions', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Allow users to subscribe to your posts and comments and receive notifications via email', 'Module Description', 'jetpack' ),
- ),
-
- 'tiled-gallery' => array(
- 'name' => _x( 'Tiled Galleries', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Display image galleries in a variety of elegant arrangements.', 'Module Description', 'jetpack' ),
- ),
-
- 'vaultpress' => array(
- 'name' => _x( 'Backups and Scanning', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Protect your site with daily or real-time backups and automated virus scanning and threat detection.', 'Module Description', 'jetpack' ),
- ),
-
- 'verification-tools' => array(
- 'name' => _x( 'Site verification', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Establish your site\'s authenticity with external services.', 'Module Description', 'jetpack' ),
- ),
-
- 'videopress' => array(
- 'name' => _x( 'VideoPress', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Save on hosting storage and bandwidth costs by streaming fast, ad-free video from our global network.', 'Module Description', 'jetpack' ),
- ),
-
- 'widget-visibility' => array(
- 'name' => _x( 'Widget Visibility', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Control where widgets appear on your site.', 'Module Description', 'jetpack' ),
- ),
-
- 'widgets' => array(
- 'name' => _x( 'Extra Sidebar Widgets', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Add images, Twitter streams, and more to your sidebar.', 'Module Description', 'jetpack' ),
- ),
-
- 'wordads' => array(
- 'name' => _x( 'Ads', 'Module Name', 'jetpack' ),
- 'description' => _x( 'Earn income by allowing Jetpack to display high quality ads.', 'Module Description', 'jetpack' ),
- ),
- );
- }
- return $modules[ $key ];
-}
-/**
- * For a given module tag, return its translated version.
- *
- * @param string $key Module tag as is in each module heading.
- *
- * @return string
- */
-function jetpack_get_module_i18n_tag( $key ) {
- static $module_tags;
- if ( ! isset( $module_tags ) ) {
- $module_tags = array(
- // Modules with `Other` tag:
- // - modules/contact-form.php
- // - modules/notes.php
- 'Other' =>_x( 'Other', 'Module Tag', 'jetpack' ),
-
- // Modules with `Writing` tag:
- // - modules/after-the-deadline.php
- // - modules/copy-post.php
- // - modules/custom-content-types.php
- // - modules/enhanced-distribution.php
- // - modules/json-api.php
- // - modules/latex.php
- // - modules/markdown.php
- // - modules/post-by-email.php
- // - modules/shortcodes.php
- 'Writing' =>_x( 'Writing', 'Module Tag', 'jetpack' ),
-
- // Modules with `Photos and Videos` tag:
- // - modules/carousel.php
- // - modules/photon-cdn.php
- // - modules/photon.php
- // - modules/shortcodes.php
- // - modules/tiled-gallery.php
- // - modules/videopress.php
- 'Photos and Videos' =>_x( 'Photos and Videos', 'Module Tag', 'jetpack' ),
-
- // Modules with `Social` tag:
- // - modules/comment-likes.php
- // - modules/comments.php
- // - modules/gravatar-hovercards.php
- // - modules/likes.php
- // - modules/publicize.php
- // - modules/seo-tools.php
- // - modules/sharedaddy.php
- // - modules/shortcodes.php
- // - modules/shortlinks.php
- // - modules/subscriptions.php
- // - modules/widgets.php
- 'Social' =>_x( 'Social', 'Module Tag', 'jetpack' ),
-
- // Modules with `Appearance` tag:
- // - modules/custom-css.php
- // - modules/gravatar-hovercards.php
- // - modules/infinite-scroll.php
- // - modules/lazy-images.php
- // - modules/minileven.php
- // - modules/photon-cdn.php
- // - modules/photon.php
- // - modules/seo-tools.php
- // - modules/shortcodes.php
- // - modules/widget-visibility.php
- // - modules/widgets.php
- // - modules/wordads.php
- 'Appearance' =>_x( 'Appearance', 'Module Tag', 'jetpack' ),
-
- // Modules with `Developers` tag:
- // - modules/json-api.php
- // - modules/pwa.php
- // - modules/sso.php
- 'Developers' =>_x( 'Developers', 'Module Tag', 'jetpack' ),
-
- // Modules with `Recommended` tag:
- // - modules/lazy-images.php
- // - modules/manage.php
- // - modules/minileven.php
- // - modules/monitor.php
- // - modules/photon-cdn.php
- // - modules/photon.php
- // - modules/protect.php
- // - modules/publicize.php
- // - modules/related-posts.php
- // - modules/sharedaddy.php
- // - modules/sitemaps.php
- // - modules/stats.php
- 'Recommended' =>_x( 'Recommended', 'Module Tag', 'jetpack' ),
-
- // Modules with `Centralized Management` tag:
- // - modules/manage.php
- 'Centralized Management' =>_x( 'Centralized Management', 'Module Tag', 'jetpack' ),
-
- // Modules with `General` tag:
- // - modules/masterbar.php
- 'General' =>_x( 'General', 'Module Tag', 'jetpack' ),
-
- // Modules with `Mobile` tag:
- // - modules/minileven.php
- 'Mobile' =>_x( 'Mobile', 'Module Tag', 'jetpack' ),
-
- // Modules with `Traffic` tag:
- // - modules/sitemaps.php
- // - modules/wordads.php
- 'Traffic' =>_x( 'Traffic', 'Module Tag', 'jetpack' ),
-
- // Modules with `Site Stats` tag:
- // - modules/stats.php
- 'Site Stats' =>_x( 'Site Stats', 'Module Tag', 'jetpack' ),
- );
- }
- return $module_tags[ $key ];
-}
diff --git a/plugins/jetpack/modules/module-info.php b/plugins/jetpack/modules/module-info.php
deleted file mode 100644
index fd01e9a0..00000000
--- a/plugins/jetpack/modules/module-info.php
+++ /dev/null
@@ -1,714 +0,0 @@
-<?php
-/**
- * "Learn More" information blocks for all modules live in this file.
- *
- * Each module must include 2 functions:
- * - The first one creates a button where users can find more information about the module.
- * It is hooked into `jetpack_learn_more_button_ . $module`
- * - The second creates a information block.
- * It is hooked into `jetpack_module_more_info_ . $module`
- */
-
-/**
- * VaultPress (stub)
- */
-function vaultpress_jetpack_load_more_link() {
- echo 'https://help.vaultpress.com/get-to-know/';
-}
-add_filter( 'jetpack_learn_more_button_vaultpress', 'vaultpress_jetpack_load_more_link' );
-
-function vaultpress_jetpack_more_info() {
- esc_html_e(
- 'We keep a daily or real-time backup of your site so that when mistakes or accidents occur, restoring your
- site to any location takes a matter of minutes. Your site’s files are regularly scanned for unauthorized or
- suspicious modifications that could compromise your security and data. In many cases, we can fix them
- automatically (and will notify you). When we can’t, we provide you with expert support.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_vaultpress', 'vaultpress_jetpack_more_info' );
-
-/**
- * Gravatar Hovercards
- */
-function grofiles_load_more_link() {
- echo 'https://jetpack.com/support/gravatar-hovercards/';
-}
-add_filter( 'jetpack_learn_more_button_gravatar-hovercards', 'grofiles_load_more_link' );
-
-function grofiles_more_info() { ?>
- <?php esc_html_e(
- 'Enhance plain Gravatar images with information about a person (including a name,
- bio, pictures, and contact info) when they leave a comment on one of your posts.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_gravatar-hovercards', 'grofiles_more_info' );
-
-/**
- * Shortcodes
- */
-function jetpack_shortcodes_load_more_link() {
- echo 'https://jetpack.com/support/shortcode-embeds/';
-}
-add_filter( 'jetpack_learn_more_button_shortcodes', 'jetpack_shortcodes_load_more_link' );
-
-function jetpack_shortcodes_more_info() { ?>
- <?php esc_html_e(
- 'Easily and safely embed media from YouTube, Facebook, Flickr, Vimeo, Instagram,
- Google Maps, SlideShare, Vine, SoundCloud, and more. Just enter the appropriate shortcode directly into the
- editor and click “Publish.”'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_shortcodes', 'jetpack_shortcodes_more_info' );
-
-/**
- * Shortlinks
- */
-function wpme_load_more_link() {
- echo 'http://wp.me/p1moTy-DL';
-}
-add_filter( 'jetpack_learn_more_button_shortlinks', 'wpme_load_more_link' );
-
-function wpme_more_info() { ?>
- <?php esc_html_e(
- 'Grab short and simple links to your posts and pages using the compact wp.me domain name. Perfect
- for use on Twitter, Facebook, and in text messages where every character counts.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_shortlinks', 'wpme_more_info' );
-
-/**
- * Site Stats
- */
-function stats_load_more_link() {
- echo 'https://jetpack.com/support/wordpress-com-stats/';
-}
-add_filter( 'jetpack_learn_more_button_stats', 'stats_load_more_link' );
-
-function stats_more_info() { ?>
- <?php esc_html_e(
- 'Simple and concise statistics about your traffic. Jetpack collects data about pageviews, likes, comments,
- locations, and top posts. View them in your dashboard or on WordPress.com.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_stats', 'stats_more_info' );
-
-/**
- * Publicize
- */
-function publicize_load_more_link() {
- echo 'https://jetpack.com/support/publicize/';
-}
-add_filter( 'jetpack_learn_more_button_publicize', 'publicize_load_more_link' );
-
-function publicize_more_info() { ?>
- <?php esc_html_e(
- 'Automatically share and promote newly published posts to Facebook, Twitter, Tumblr,
- and LinkedIn. You can add connections for yourself or for all users on your site.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_publicize', 'publicize_more_info' );
-
-/**
- * Notifications
- */
-function notes_load_more_link() {
- echo 'https://jetpack.com/support/notifications/';
-}
-add_filter( 'jetpack_learn_more_button_notes', 'notes_load_more_link' );
-
-function notes_more_info() { ?>
- <?php esc_html_e(
- 'You will receive instant notifications in your dashboard or your mobile device when somebody comments
- on any of your sites. Reply directly wherever you are to keep the conversation going.'
- , 'jetpack' );
-}
-add_filter( 'jetpack_module_more_info_notes', 'notes_more_info' );
-
-/**
- * LaTeX
- */
-function latex_load_more_link() {
- echo 'https://jetpack.com/support/beautiful-math-with-latex/';
-}
-add_filter( 'jetpack_learn_more_button_latex', 'latex_load_more_link' );
-
-function latex_more_info() { ?>
- <?php printf( esc_html__(
- '%1$s is a powerful markup language for writing complex mathematical equations and formulas.
- Jetpack combines the power of %1$s and the simplicity of WordPress to give you the ultimate
- in math blogging platforms. Use $latex your latex code here$ or [latex]your latex code here[/latex]
- to include in your posts and comments. Enjoy all sorts of options and embrace your inner nerd.'
- , 'jetpack' )
- , '<a href="http://www.latex-project.org/" target="_blank"><img src="//s0.wp.com/latex.php?latex=%5CLaTeX&amp;bg=transparent&amp;fg=000&amp;s=-1" alt="LaTeX logo" title="LaTeX" style="vertical-align: -25%" /></a>'
- ); ?>
-<?php
-}
-add_action( 'jetpack_module_more_info_latex', 'latex_more_info' );
-
-/**
- * Sharing
- */
-function sharedaddy_load_more_link() {
- echo 'https://jetpack.com/support/sharing/';
-}
-add_filter( 'jetpack_learn_more_button_sharedaddy', 'sharedaddy_load_more_link' );
-
-function sharedaddy_more_info() { ?>
- <?php esc_html_e(
- 'Visitors can share your posts with Twitter, Facebook, Reddit, Digg, LinkedIn, Google+, print,
- and email. You can configure services to appear as icons, text, or both and some services like Twitter
- have additional options.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_sharedaddy', 'sharedaddy_more_info' );
-
-/**
- * After The Deadline
- */
-function jpatd_load_more_link() {
- echo 'https://jetpack.com/support/spelling-and-grammar/';
-}
-add_filter( 'jetpack_learn_more_button_after-the-deadline', 'jpatd_load_more_link' );
-
-function jpatd_more_info() { ?>
- <?php esc_html_e(
- 'The After the Deadline proofreading service improves your writing by using artificial intelligence to
- find spelling and grammatical errors and offers smart suggestions.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_after-the-deadline', 'jpatd_more_info' );
-
-/**
- * Extra Sidebar Widgets
- */
-function jetpack_widgets_load_more_link() {
- echo 'https://jetpack.com/support/extra-sidebar-widgets/';
-}
-add_filter( 'jetpack_learn_more_button_widgets', 'jetpack_widgets_load_more_link' );
-
-function jetpack_widgets_more_info() { ?>
- <?php esc_html_e(
- 'Add as many custom widgets as you like by dragging and dropping and customize each to fit your needs,
- including, Twitter streams, Facebook like boxes, custom images, Gravatars, tiled galleries, recent posts,
- or social icons.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_widgets', 'jetpack_widgets_more_info' );
-
-/**
- * Subscriptions
- */
-function jetpack_subscriptions_load_more_link() {
- echo 'https://jetpack.com/support/subscriptions/';
-}
-add_action( 'jetpack_learn_more_button_subscriptions', 'jetpack_subscriptions_load_more_link' );
-
-function jetpack_subscriptions_more_info() { ?>
- <?php esc_html_e(
- 'A widget in your sidebar allows visitors to subscribe to your site so that they receive an email
- each time you publish new content. Your visitors can also subscribe to a post\'s comments to keep up with the conversation.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_subscriptions', 'jetpack_subscriptions_more_info' );
-
-/**
- * Enhanced Distribution
- */
-function jetpack_enhanced_distribution_more_link() {
- echo 'https://jetpack.com/support/enhanced-distribution/';
-}
-add_action( 'jetpack_learn_more_button_enhanced-distribution', 'jetpack_enhanced_distribution_more_link' );
-
-function jetpack_enhanced_distribution_more_info() {
- esc_html_e(
- 'Jetpack will automatically take your great published content and share it instantly with third-party services
- like search engines, increasing your reach and traffic.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_enhanced-distribution', 'jetpack_enhanced_distribution_more_info' );
-
-
-/**
- * Protect
- */
-function jetpack_protect_more_link() {
- echo 'https://jetpack.com/support/protect/';
-}
-add_action( 'jetpack_learn_more_button_protect', 'jetpack_protect_more_link' );
-
-function jetpack_protect_more_info() {
- esc_html_e(
- 'Most sites will come under attack from automated bots that attempt to log in for malicious purposes.
- We protect you automatically from unauthorized access by using data from millions of sites.'
- , 'jetpack' );
-}
-
-add_action( 'jetpack_module_more_info_protect', 'jetpack_protect_more_info' );
-
-/**
- * JSON API
- */
-function jetpack_json_api_more_link() {
- echo 'https://jetpack.com/support/json-api/';
-}
-add_action( 'jetpack_learn_more_button_json-api', 'jetpack_json_api_more_link' );
-
-function jetpack_json_api_more_info() {
- esc_html_e(
- 'Authorize applications and services to securely connect to your site. Developers can use WordPress.com\'s OAuth2
- authentication system and WordPress.com REST API to manage and access your site\'s content.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_json-api', 'jetpack_json_api_more_info' );
-
-
-/**
- * Contact Form
- */
-function jetpack_contact_form_learn_more_button() {
- echo 'https://jetpack.com/support/contact-form/';
-}
-add_action( 'jetpack_learn_more_button_contact-form', 'jetpack_contact_form_learn_more_button' );
-
-function jetpack_contact_form_more_info() { ?>
- <?php esc_html_e(
- 'Create simple contact forms without any coding. You can have multiple forms and when
- a user submits it, their feedback will be emailed directly to you. If Akismet is active, submissions will be
- automatically filtered for spam.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_contact-form', 'jetpack_contact_form_more_info' );
-
-
-/**
- * Comments
- */
-function jetpack_comments_learn_more_button() {
- echo 'https://jetpack.com/support/comments';
-}
-add_action( 'jetpack_learn_more_button_comments', 'jetpack_comments_learn_more_button' );
-
-function jetpack_comments_more_info() { ?>
- <?php esc_html_e(
- 'Allow visitors to use their WordPress.com, Twitter, or Facebook accounts when commenting on
- your site. Jetpack will match your site\'s color scheme automatically (but you can adjust that).'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_comments', 'jetpack_comments_more_info' );
-
-/**
- * Carousel
- */
-function jetpack_carousel_learn_more_button() {
- echo 'https://jetpack.com/support/carousel';
-}
-add_action( 'jetpack_learn_more_button_carousel', 'jetpack_carousel_learn_more_button' );
-
-function jetpack_carousel_more_info() { ?>
- <?php esc_html_e(
- 'With Carousel active, any standard WordPress galleries or single images you have embedded in posts or pages will
- launch a full-screen photo browsing experience with comments and EXIF metadata.'
- , 'jetpack' ); ?>
-<?php
-}
-add_action( 'jetpack_module_more_info_carousel', 'jetpack_carousel_more_info' );
-
-/**
- * Custom CSS
- */
-function jetpack_custom_css_more_button() {
- echo 'https://jetpack.com/support/custom-css';
-}
-add_action( 'jetpack_learn_more_button_custom-css', 'jetpack_custom_css_more_button' );
-
-function jetpack_custom_css_more_info() { ?>
- <?php esc_html_e(
- "Add to or replace your theme's CSS including mobile styles, LESS, and SaSS.
- Includes syntax coloring, auto-indentation, and immediate CSS validation."
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_custom-css', 'jetpack_custom_css_more_info' );
-
-
-/**
- * Masterbar
- */
-function jetpack_masterbar_more_link() {
- echo 'https://jetpack.com/support/masterbar/';
-}
-add_action( 'jetpack_learn_more_button_masterbar', 'jetpack_masterbar_more_link' );
-
-function jetpack_masterbar_more_info() {
- esc_html_e(
- "Quickly access your Stats, Notifications, Posts and more on WordPress.com. " .
- "The Toolbar is displayed for any user on the site that is connected to WordPress.com."
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_masterbar', 'jetpack_masterbar_more_info' );
-
-/**
- * Mobile Theme
- */
-function jetpack_minileven_more_button() {
- echo 'https://jetpack.com/support/mobile-theme';
-}
-add_action( 'jetpack_learn_more_button_minileven', 'jetpack_minileven_more_button' );
-
-function jetpack_minileven_more_info() { ?>
- <?php esc_html_e(
- "Automatically optimize your site for mobile. Jetpack's mobile theme uses the header image,
- background, and widgets from your current theme. Post format support means your photos and galleries
- will also look fantastic."
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_minileven', 'jetpack_minileven_more_info' );
-
-/**
- * Infinite Scroll
- */
-function jetpack_infinite_scroll_more_button() {
- echo 'https://jetpack.com/support/infinite-scroll';
-}
-add_action( 'jetpack_learn_more_button_infinite-scroll', 'jetpack_infinite_scroll_more_button' );
-
-function jetpack_infinite_scroll_more_info() {
- esc_html_e(
- 'Infinite scrolling pulls the next set of posts automatically into view when the reader approaches
- the bottom of the page. This helps you reader see more of your content.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_infinite-scroll', 'jetpack_infinite_scroll_more_info' );
-
-/**
- * Post by Email
- */
-function jetpack_post_by_email_more_link() {
- echo 'https://jetpack.com/support/post-by-email/';
-}
-add_action( 'jetpack_learn_more_button_post-by-email', 'jetpack_post_by_email_more_link' );
-
-function jetpack_post_by_email_more_info() { ?>
- <?php esc_html_e(
- 'Publish posts on your site by writing and sending an email from any email client instead of using the post editor.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_post-by-email', 'jetpack_post_by_email_more_info' );
-
-/**
- * Photon
- */
-function jetpack_photon_more_link() {
- echo 'https://jetpack.com/support/photon';
-}
-add_action( 'jetpack_learn_more_button_photon', 'jetpack_photon_more_link' );
-
-function jetpack_photon_more_info() {
- esc_html_e(
- 'Jetpack will optimize your images and serve them from the server location nearest
- to your visitors. Using our global content delivery network will boost the loading speed of your site.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_photon', 'jetpack_photon_more_info' );
-
-/**
- * Lazy Images
- */
-function jetpack_lazy_images_more_link() {
- echo 'https://jetpack.com/support/lazy-images/';
-}
-add_action( 'jetpack_learn_more_button_lazy-images', 'jetpack_lazy_images_more_link' );
-
-function jetpack_lazy_images_more_info() {
- esc_html_e(
- 'Improve your site\'s speed by only loading images visible on the screen.
- New images will load just before they scroll into view. This prevents viewers
- from having to download all the images on a page all at once, even ones they can\'t see.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_lazy-images', 'jetpack_lazy_images_more_info' );
-
-/**
- * Tiled Galleries
- */
-function jetpack_tiled_gallery_more_link() {
- echo 'https://jetpack.com/support/tiled-galleries/';
-}
-add_action( 'jetpack_learn_more_button_tiled-gallery', 'jetpack_tiled_gallery_more_link' );
-
-function jetpack_tiled_gallery_more_info() { ?>
- <?php esc_html_e(
- 'When adding an image gallery, you will have the option to create elegant magazine-style mosaic layouts for your photos,
- including mosaic (default), square, and circular layouts.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_tiled-gallery', 'jetpack_tiled_gallery_more_info' );
-
-/**
- * Likes
- */
-function jetpack_likes_more_link() {
- echo 'https://jetpack.com/support/likes/';
-}
-add_action( 'jetpack_learn_more_button_likes', 'jetpack_likes_more_link' );
-
-function jetpack_likes_more_info() { ?>
- <?php esc_html_e(
- 'Allow your readers to show their appreciation for your posts and other content. Likes show up
- below each post and your readers will also be able to review their liked posts from WordPress.com.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_likes', 'jetpack_likes_more_info' );
-
-/**
- * Widget Visibility
- */
-function jetpack_widget_visibility_more_link() {
- echo 'https://jetpack.com/support/widget-visibility/';
-}
-add_action( 'jetpack_learn_more_button_widget-visibility', 'jetpack_widget_visibility_more_link' );
-
-function jetpack_widget_visibility_more_info() {
- esc_html_e(
- 'Choose from a set of visibility options for sidebar widgets such as showing them only certain categories,
- only on error pages, or only search results pages. You can also do the reverse and choose to hide them on certain pages.'
- , 'jetpack' ); ?>
-<?php
-}
-add_action( 'jetpack_module_more_info_widget-visibility', 'jetpack_widget_visibility_more_info' );
-
-/**
- * VideoPress
- */
-function jetpack_videopress_more_link() {
- echo 'https://jetpack.com/support/videopress/';
-}
-add_action( 'jetpack_learn_more_button_videopress', 'jetpack_videopress_more_link' );
-
-function jetpack_videopress_more_info() {
- esc_html_e(
- 'The easiest way to upload ad-free and unbranded videos to your site. You get stats on video
- playback and shares and the player is lightweight and responsive.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_videopress', 'jetpack_videopress_more_info' );
-
-/**
- * SSO
- */
-function jetpack_sso_more_link() {
- echo 'https://jetpack.com/support/sso/';
-}
-add_action( 'jetpack_learn_more_button_sso', 'jetpack_sso_more_link' );
-
-function jetpack_sso_more_info() {
- esc_html_e(
- 'Your users will be able to log in to your site with their WordPress.com account.
- This includes two-factor authentication making it the safest login mechanism for your site.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_sso', 'jetpack_sso_more_info' );
-
-/**
- * Monitor
- */
-function jetpack_monitor_more_link() {
- echo 'https://jetpack.com/support/monitor/';
-}
-add_action( 'jetpack_learn_more_button_monitor', 'jetpack_monitor_more_link' );
-
-function jetpack_monitor_more_info() {
- esc_html_e(
- 'Jetpack checks your site every five minutes and if any downtime is detected you will receive an email
- notification alerting you to the issue, so you can act quickly and get your site back online.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_monitor', 'jetpack_monitor_more_info' );
-
-/**
- * Related Posts
- */
-function jetpack_related_posts_more_button() {
- echo 'https://jetpack.com/support/related-posts/';
-}
-add_action( 'jetpack_learn_more_button_related-posts', 'jetpack_related_posts_more_button' );
-
-function jetpack_related_posts_more_info() {
- esc_html_e(
- 'Show visitors related content from your site at the bottom of your posts. This encourages them
- to browse more content, explore your site, and transform them into regular readers.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_related-posts', 'jetpack_related_posts_more_info' );
-
-/**
- * Markdown
- */
-function jetpack_markdown_more_link() {
- echo 'https://jetpack.com/support/markdown/';
-}
-add_action( 'jetpack_learn_more_button_markdown', 'jetpack_markdown_more_link' );
-
-function jetpack_markdown_more_info() {
- esc_html_e(
- 'Compose posts and comments with links, lists, and other styles using regular characters and
- punctuation marks. A quick and easy way to format text without needing any HTML or coding.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_markdown', 'jetpack_markdown_more_info' );
-
-/**
- * Site Verification Tools
- */
-function jetpack_verification_tools_more_link() {
- echo 'https://jetpack.com/support/site-verification-tools/';
-}
-add_action( 'jetpack_learn_more_button_verification-tools', 'jetpack_verification_tools_more_link' );
-
-function jetpack_verification_tools_more_info() {
- esc_html_e(
- 'Verify your site ownership with services like Google, Bing, Pinterest, and Yandex. This gives you access to
- advanced features on these services and get verification badges.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_verification-tools', 'jetpack_verification_tools_more_info' );
-
-/**
- * SEO Tools
- */
-function jetpack_seo_tools_more_link() {
- echo 'https://jetpack.com/support/seo-tools/';
-}
-add_action( 'jetpack_learn_more_button_seo-tools', 'jetpack_seo_tools_more_link' );
-
-function jetpack_seo_tools_more_info() {
- esc_html_e(
- 'Better results on search engines and social media.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_seo-tools', 'jetpack_seo_tools_more_info' );
-
-/**
- * Custom Content Types
- */
-function jetpack_custom_content_types_more_link() {
- echo 'https://jetpack.com/support/custom-content-types/';
-}
-add_action( 'jetpack_learn_more_button_custom-content-types', 'jetpack_custom_content_types_more_link' );
-
-function jetpack_custom_content_types_more_info() { ?>
- <?php esc_html_e(
- 'Add and organize content that doesn’t necessarily fit into a post or static page such as portfolios
- or testimonials. Custom content can be visible at specific URLs, or you may add them with shortcodes.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_custom-content-types', 'jetpack_custom_content_types_more_info' );
-// Custom Content Types: STOP
-
-/**
- * Manage
- */
-function jetpack_manage_more_link() {
- echo 'https://jetpack.com/support/site-management/';
-}
-add_action( 'jetpack_learn_more_button_manage', 'jetpack_manage_more_link' );
-
-function jetpack_custom_jetpack_manage() { ?>
- <?php esc_html_e(
- 'Manage and update this and other WordPress sites from one simple dashboard on WordPress.com. You can update
- plugins, set them to automatically update, and (de)activate them on a per-site basis or in bulk from
- wordpress.com/plugins. You can also use the brand new and mobile-friendly post editor on WordPress.com as well
- as view and activate installed themes and create or edit site menus.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_manage', 'jetpack_custom_jetpack_manage' );
-
-// XML Sitemap: START
-function jetpack_sitemaps_more_link() {
- echo 'https://jetpack.com/support/sitemaps/';
-}
-add_action( 'jetpack_learn_more_button_sitemaps', 'jetpack_sitemaps_more_link' );
-
-function jetpack_xml_sitemap_more_info() {
- esc_html_e(
- 'Automatically create two sitemap files that list the URLs of posts and pages in your site.
- This makes it easier for search engines (like Google) to include your site in relevant search results.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_sitemaps', 'jetpack_xml_sitemap_more_info' );
-// XML Sitemap: STOP
-
-/**
- * WordAds
- */
-function jetpack_wordads_more_link() {
- echo 'https://wordads.co/';
-}
-add_action( 'jetpack_learn_more_button_wordads', 'jetpack_wordads_more_link' );
-
-function jetpack_wordads_more_info() {
- esc_html_e(
- 'By default ads are shown at the end of every page, post, or the first article on your front page. You can also add them to the top of your site and to any widget area to increase your earnings!'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_wordads', 'jetpack_wordads_more_info' );
-// WordAds: STOP
-
-/**
- * Google Analytics
- */
-function jetpack_google_analytics_more_link() {
- echo 'https://jetpack.com/support/google-analytics';
-}
-add_action( 'jetpack_learn_more_button_google-analytics', 'jetpack_google_analytics_more_link' );
-
-function jetpack_google_analytics_more_info() {
- esc_html_e(
- 'Track website statistics with Google Analytics for a deeper understanding of your website visitors and customers.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_google-analytics', 'jetpack_google_analytics_more_info' );
-
-/**
- * WooCommerce Analytics
- */
-function jetpack_woocommerce_analytics_more_link() {
- echo 'https://jetpack.com/support/';
-}
-add_action( 'jetpack_learn_more_button_woocommerce-analytics', 'jetpack_woocommerce_analytics_more_link' );
-
-function jetpack_woocommerce_analytics_more_info() {
- esc_html_e(
- 'Enhanced analytics for WooCommerce and Jetpack users.'
- , 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_woocommerce-analytics', 'jetpack_woocommerce_analytics_more_info' );
-
-/**
- * Assets CDN
- */
-function jetpack_assetcdn_more_link() {
- echo 'https://jetpack.com/support/asset-cdn/';
-}
-add_action( 'jetpack_learn_more_button_photon-cdn', 'jetpack_assetcdn_more_link' );
-
-function jetpack_assetcdn_more_info() {
- esc_html_e(
- 'Our asset CDN is a site acceleration service.
- That means that we host static assets like JavaScript and CSS shipped with WordPress Core and Jetpack from our servers, alleviating the load on your server.',
- 'jetpack'
- );
-}
-add_action( 'jetpack_module_more_info_photon-cdn', 'jetpack_assetcdn_more_info' );
-
-/**
- * Copy Post
- */
-function jetpack_copy_post_more_link() {
- echo 'https://jetpack.com/support/copy-post-2/';
-}
-add_action( 'jetpack_learn_more_button_copy-post', 'jetpack_copy_post_more_link' );
-
-function jetpack_more_info_copy_post() {
- esc_html_e( 'Create a new post based on an existing post.', 'jetpack' );
-}
-add_action( 'jetpack_module_more_info_copy-post', 'jetpack_more_info_copy_post' );
diff --git a/plugins/jetpack/modules/monitor.php b/plugins/jetpack/modules/monitor.php
deleted file mode 100644
index c8710483..00000000
--- a/plugins/jetpack/modules/monitor.php
+++ /dev/null
@@ -1,200 +0,0 @@
-<?php
-/**
- * Module Name: Monitor
- * Module Description: Jetpack’s downtime monitoring will continuously watch your site, and alert you the moment that downtime is detected.
- * Jumpstart Description: Receive immediate notifications if your site goes down, 24/7.
- * Sort Order: 28
- * Recommendation Order: 10
- * First Introduced: 2.6
- * Requires Connection: Yes
- * Auto Activate: No
- * Module Tags: Recommended
- * Feature: Security, Jumpstart
- * Additional Search Queries: monitor, uptime, downtime, monitoring, maintenance, maintenance mode, offline, site is down, site down, down, repair, error
- */
-
-class Jetpack_Monitor {
-
- public $module = 'monitor';
-
- function __construct() {
- add_action( 'jetpack_modules_loaded', array( $this, 'jetpack_modules_loaded' ) );
- add_action( 'jetpack_activate_module_monitor', array( $this, 'activate_module' ) );
- }
-
- public function activate_module() {
- if ( Jetpack::is_user_connected() ) {
- self::update_option_receive_jetpack_monitor_notification( true );
- }
- }
-
- public function jetpack_modules_loaded() {
- Jetpack::enable_module_configurable( $this->module );
- Jetpack::module_configuration_load( $this->module, array( $this, 'jetpack_configuration_load' ) );
- Jetpack::module_configuration_screen( $this->module, array( $this, 'jetpack_configuration_screen' ) );
- }
-
- public function jetpack_configuration_load() {
- if ( Jetpack::is_user_connected() && ! self::is_active() ) {
- Jetpack::deactivate_module( $this->module );
- Jetpack::state( 'message', 'module_deactivated' );
- wp_safe_redirect( Jetpack::admin_url( 'page=jetpack' ) );
- die();
- }
- if ( ! empty( $_POST['action'] ) && $_POST['action'] == 'monitor-save' ) {
- check_admin_referer( 'monitor-settings' );
- $this->update_option_receive_jetpack_monitor_notification( isset( $_POST['receive_jetpack_monitor_notification'] ) );
- Jetpack::state( 'message', 'module_configured' );
- wp_safe_redirect( Jetpack::module_configuration_url( $this->module ) );
- exit;
- }
- }
-
- public function jetpack_configuration_screen() {
- ?>
- <p><?php esc_html_e( 'Nobody likes downtime, and that\'s why Downtime Monitor is on the job, keeping tabs on your site by checking it every five minutes. As soon as any downtime is detected, you will receive an email notification alerting you to the issue. That way you can act quickly, to get your site back online again!', 'jetpack' ); ?>
- <p><?php esc_html_e( 'We’ll also let you know as soon as your site is up and running, so you can keep an eye on total downtime.', 'jetpack'); ?></p>
- <div class="narrow">
- <?php if ( Jetpack::is_user_connected() && current_user_can( 'manage_options' ) ) : ?>
- <?php $user_email = Jetpack::get_connected_user_email(); ?>
- <form method="post" id="monitor-settings">
- <input type="hidden" name="action" value="monitor-save" />
- <?php wp_nonce_field( 'monitor-settings' ); ?>
-
- <table id="menu" class="form-table">
- <tr>
- <th scope="row">
- <?php _e( 'Notifications', 'jetpack' ); ?>
- </th>
- <td>
- <label for="receive_jetpack_monitor_notification">
- <input type="checkbox" name="receive_jetpack_monitor_notification" id="receive_jetpack_monitor_notification" value="receive_jetpack_monitor_notification"<?php checked( self::user_receives_notifications() ); ?> />
- <span><?php _e( 'Receive Monitor Email Notifications.' , 'jetpack'); ?></span>
- </label>
- <p class="description"><?php printf( __( 'Emails will be sent to %s (<a href="%s">Edit</a>)', 'jetpack' ), $user_email, 'https://wordpress.com/settings/account/'); ?></p>
- </td>
- </tr>
- </table>
- <?php submit_button(); ?>
- </form>
- <?php else : ?>
- <p><?php _e( 'This profile is not currently linked to a WordPress.com Profile.', 'jetpack' ); ?></p>
- <?php endif; ?>
- </div>
- <?php
- }
-
- public function is_active() {
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client( array(
- 'user_id' => get_current_user_id()
- ) );
- $xml->query( 'jetpack.monitor.isActive' );
- if ( $xml->isError() ) {
- wp_die( sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
- }
- return $xml->getResponse();
- }
-
- public function update_option_receive_jetpack_monitor_notification( $value ) {
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client( array(
- 'user_id' => get_current_user_id()
- ) );
- $xml->query( 'jetpack.monitor.setNotifications', (bool) $value );
-
- if ( $xml->isError() ) {
- wp_die( sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
- }
-
- // To be used only in Jetpack_Core_Json_Api_Endpoints::get_remote_value.
- update_option( 'monitor_receive_notifications', (bool) $value );
-
- return true;
- }
-
- /**
- * Checks the status of notifications for current Jetpack site user.
- *
- * @since 2.8
- * @since 4.1.0 New parameter $die_on_error.
- *
- * @param bool $die_on_error Whether to issue a wp_die when an error occurs or return a WP_Error object.
- *
- * @return boolean|WP_Error
- */
- static function user_receives_notifications( $die_on_error = true ) {
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client( array(
- 'user_id' => get_current_user_id()
- ) );
- $xml->query( 'jetpack.monitor.isUserInNotifications' );
-
- if ( $xml->isError() ) {
- if ( $die_on_error ) {
- wp_die( sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
- } else {
- return new WP_Error( $xml->getErrorCode(), $xml->getErrorMessage(), array( 'status' => 400 ) );
- }
- }
- return $xml->getResponse();
- }
-
- public function activate_monitor() {
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client( array(
- 'user_id' => get_current_user_id()
- ) );
-
- $xml->query( 'jetpack.monitor.activate' );
-
- if ( $xml->isError() ) {
- wp_die( sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
- }
- return true;
- }
-
- public function deactivate_monitor() {
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client( array(
- 'user_id' => get_current_user_id()
- ) );
-
- $xml->query( 'jetpack.monitor.deactivate' );
-
- if ( $xml->isError() ) {
- wp_die( sprintf( '%s: %s', $xml->getErrorCode(), $xml->getErrorMessage() ) );
- }
- return true;
- }
-
- /*
- * Returns date of the last downtime.
- *
- * @since 4.0.0
- * @return date in YYYY-MM-DD HH:mm:ss format
- */
- public function monitor_get_last_downtime() {
-// if ( $last_down = get_transient( 'monitor_last_downtime' ) ) {
-// return $last_down;
-// }
-
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client( array(
- 'user_id' => get_current_user_id()
- ) );
-
- $xml->query( 'jetpack.monitor.getLastDowntime' );
-
- if ( $xml->isError() ) {
- return new WP_Error( 'monitor-downtime', $xml->getErrorMessage() );
- }
-
- set_transient( 'monitor_last_downtime', $xml->getResponse(), 10 * MINUTE_IN_SECONDS );
-
- return $xml->getResponse();
- }
-
-}
-
-new Jetpack_Monitor;
diff --git a/plugins/jetpack/modules/notes.php b/plugins/jetpack/modules/notes.php
deleted file mode 100644
index 3b7ddfaa..00000000
--- a/plugins/jetpack/modules/notes.php
+++ /dev/null
@@ -1,198 +0,0 @@
-<?php
-/**
- * Module Name: Notifications
- * Module Description: Receive instant notifications of site comments and likes.
- * Sort Order: 13
- * First Introduced: 1.9
- * Requires Connection: Yes
- * Auto Activate: Yes
- * Module Tags: Other
- * Feature: General
- * Additional Search Queries: notification, notifications, toolbar, adminbar, push, comments
- */
-
-if ( !defined( 'JETPACK_NOTES__CACHE_BUSTER' ) ) define( 'JETPACK_NOTES__CACHE_BUSTER', JETPACK__VERSION . '-' . gmdate( 'oW' ) );
-
-class Jetpack_Notifications {
- public $jetpack = false;
-
- /**
- * Singleton
- * @static
- */
- public static function init() {
- static $instance = array();
-
- if ( !$instance ) {
- $instance[0] = new Jetpack_Notifications;
- }
-
- return $instance[0];
- }
-
- function __construct() {
- $this->jetpack = Jetpack::init();
-
- add_action( 'init', array( &$this, 'action_init' ) );
- }
-
- function wpcom_static_url($file) {
- $i = hexdec( substr( md5( $file ), -1 ) ) % 2;
- $url = 'http://s' . $i . '.wp.com' . $file;
- return set_url_scheme( $url );
- }
-
- // return the major version of Internet Explorer the viewer is using or false if it's not IE
- public static function get_internet_explorer_version() {
- static $version;
- if ( isset( $version ) ) {
- return $version;
- }
-
- $user_agent = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '';
-
- preg_match( '/MSIE (\d+)/', $user_agent, $matches );
- $version = empty( $matches[1] ) ? null : $matches[1];
- if ( empty( $version ) || !$version ) {
- return false;
- }
- return $version;
- }
-
- public static function current_browser_is_supported() {
- static $supported;
-
- if ( isset( $supported ) ) {
- return $supported;
- }
-
- $ie_version = self::get_internet_explorer_version();
- if ( false === $ie_version ) {
- return $supported = true;
- }
-
- if ( $ie_version < 8 ) {
- return $supported = false;
- }
-
- return $supported = true;
- }
-
- function action_init() {
- //syncing must wait until after init so
- //post types that support comments
- $filt_post_types = array();
- $all_post_types = get_post_types();
- foreach ( $all_post_types as $post_type ) {
- if ( post_type_supports( $post_type, 'comments' ) ) {
- $filt_post_types[] = $post_type;
- }
- }
-
- if ( defined( 'DOING_AJAX' ) && DOING_AJAX )
- return;
-
- if ( !has_filter( 'show_admin_bar', '__return_true' ) && !is_user_logged_in() )
- return;
-
- if ( !self::current_browser_is_supported() )
- return;
-
- add_action( 'admin_bar_menu', array( &$this, 'admin_bar_menu'), 120 );
- add_action( 'wp_head', array( &$this, 'styles_and_scripts'), 120 );
- add_action( 'admin_head', array( &$this, 'styles_and_scripts') );
- }
-
- function styles_and_scripts() {
- $is_rtl = is_rtl();
-
- if ( Jetpack::is_module_active( 'masterbar' ) ) {
- /**
- * Can be used to force Notifications to display in RTL style.
- *
- * @module notes
- *
- * @since 4.8.0
- *
- * @param bool true Should notifications be displayed in RTL style. Defaults to false.
- */
- $is_rtl = apply_filters( 'a8c_wpcom_masterbar_enqueue_rtl_notification_styles', false );
- }
-
- if ( ! $is_rtl ) {
- wp_enqueue_style( 'wpcom-notes-admin-bar', $this->wpcom_static_url( '/wp-content/mu-plugins/notes/admin-bar-v2.css' ), array(), JETPACK_NOTES__CACHE_BUSTER );
- } else {
- wp_enqueue_style( 'wpcom-notes-admin-bar', $this->wpcom_static_url( '/wp-content/mu-plugins/notes/rtl/admin-bar-v2-rtl.css' ), array(), JETPACK_NOTES__CACHE_BUSTER );
- }
- wp_enqueue_style( 'noticons', $this->wpcom_static_url( '/i/noticons/noticons.css' ), array(), JETPACK_NOTES__CACHE_BUSTER );
-
- $this->print_js();
-
- // attempt to use core or plugin libraries if registered
- if ( !wp_script_is( 'mustache', 'registered' ) ) {
- wp_register_script( 'mustache', $this->wpcom_static_url( '/wp-content/js/mustache.js' ), null, JETPACK_NOTES__CACHE_BUSTER );
- }
- if ( !wp_script_is( 'underscore', 'registered' ) ) {
- wp_register_script( 'underscore', $this->wpcom_static_url( '/wp-includes/js/underscore.min.js' ), null, JETPACK_NOTES__CACHE_BUSTER );
- }
- if ( !wp_script_is( 'backbone', 'registered' ) ) {
- wp_register_script( 'backbone', $this->wpcom_static_url( '/wp-includes/js/backbone.min.js' ), array( 'underscore' ), JETPACK_NOTES__CACHE_BUSTER );
- }
-
- wp_register_script( 'wpcom-notes-common', $this->wpcom_static_url( '/wp-content/mu-plugins/notes/notes-common-v2.js' ), array( 'jquery', 'underscore', 'backbone', 'mustache' ), JETPACK_NOTES__CACHE_BUSTER );
- wp_enqueue_script( 'wpcom-notes-admin-bar', $this->wpcom_static_url( '/wp-content/mu-plugins/notes/admin-bar-v2.js' ), array( 'wpcom-notes-common' ), JETPACK_NOTES__CACHE_BUSTER );
- }
-
- function admin_bar_menu() {
- global $wp_admin_bar, $current_blog;
-
- if ( !is_object( $wp_admin_bar ) )
- return;
-
- $wpcom_locale = get_locale();
-
- if ( !class_exists( 'GP_Locales' ) ) {
- if ( defined( 'JETPACK__GLOTPRESS_LOCALES_PATH' ) && file_exists( JETPACK__GLOTPRESS_LOCALES_PATH ) ) {
- require JETPACK__GLOTPRESS_LOCALES_PATH;
- }
- }
-
- if ( class_exists( 'GP_Locales' ) ) {
- $wpcom_locale_object = GP_Locales::by_field( 'wp_locale', $wpcom_locale );
- if ( $wpcom_locale_object instanceof GP_Locale ) {
- $wpcom_locale = $wpcom_locale_object->slug;
- }
- }
-
- $classes = 'wpnt-loading wpn-read';
- $wp_admin_bar->add_menu( array(
- 'id' => 'notes',
- 'title' => '<span id="wpnt-notes-unread-count" class="' . esc_attr( $classes ) . '">
- <span class="noticon noticon-notification"></span>
- </span>',
- 'meta' => array(
- 'html' => '<div id="wpnt-notes-panel2" style="display:none" lang="'. esc_attr( $wpcom_locale ) . '" dir="' . ( is_rtl() ? 'rtl' : 'ltr' ) . '"><div class="wpnt-notes-panel-header"><span class="wpnt-notes-header">' . __( 'Notifications', 'jetpack' ) . '</span><span class="wpnt-notes-panel-link"></span></div></div>',
- 'class' => 'menupop',
- ),
- 'parent' => 'top-secondary',
- ) );
- }
-
- function print_js() {
- $link_accounts_url = is_user_logged_in() && !Jetpack::is_user_connected() ? Jetpack::admin_url() : false;
-?>
-<script type="text/javascript">
-/* <![CDATA[ */
- var wpNotesIsJetpackClient = true;
- var wpNotesIsJetpackClientV2 = true;
-<?php if ( $link_accounts_url ) : ?>
- var wpNotesLinkAccountsURL = '<?php print $link_accounts_url; ?>';
-<?php endif; ?>
-/* ]]> */
-</script>
-<?php
- }
-
-}
-
-Jetpack_Notifications::init();
diff --git a/plugins/jetpack/modules/omnisearch.php b/plugins/jetpack/modules/omnisearch.php
deleted file mode 100644
index 88c13090..00000000
--- a/plugins/jetpack/modules/omnisearch.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Deprecated. No longer needed.
- *
- * @package Jetpack
- */
diff --git a/plugins/jetpack/modules/photon-cdn.php b/plugins/jetpack/modules/photon-cdn.php
deleted file mode 100644
index ecf0288c..00000000
--- a/plugins/jetpack/modules/photon-cdn.php
+++ /dev/null
@@ -1,298 +0,0 @@
-<?php
-/**
- * Module Name: Asset CDN
- * Module Description: Jetpack’s Site Accelerator loads your site faster by optimizing your images and serving your images and static files from our global network of servers.
- * Sort Order: 26
- * Recommendation Order: 1
- * First Introduced: 6.6
- * Requires Connection: No
- * Auto Activate: No
- * Module Tags: Photos and Videos, Appearance, Recommended
- * Feature: Recommended, Appearance, Jumpstart
- * Additional Search Queries: site accelerator, accelerate, static, assets, javascript, css, files, performance, cdn, bandwidth, content delivery network, pagespeed, combine js, optimize css
- */
-
-$GLOBALS['concatenate_scripts'] = false;
-
-Jetpack::dns_prefetch( array(
- '//c0.wp.com',
-) );
-
-class Jetpack_Photon_Static_Assets_CDN {
- const CDN = 'https://c0.wp.com/';
-
- /**
- * Sets up action handlers needed for Jetpack CDN.
- */
- public static function go() {
- add_action( 'wp_print_scripts', array( __CLASS__, 'cdnize_assets' ) );
- add_action( 'wp_print_styles', array( __CLASS__, 'cdnize_assets' ) );
- add_action( 'admin_print_scripts', array( __CLASS__, 'cdnize_assets' ) );
- add_action( 'admin_print_styles', array( __CLASS__, 'cdnize_assets' ) );
- add_action( 'wp_footer', array( __CLASS__, 'cdnize_assets' ) );
- add_filter( 'load_script_textdomain_relative_path', array( __CLASS__, 'fix_script_relative_path' ), 10, 2 );
- }
-
- /**
- * Sets up CDN URLs for assets that are enqueued by the WordPress Core.
- */
- public static function cdnize_assets() {
- global $wp_scripts, $wp_styles, $wp_version;
-
- /*
- * Short-circuit if AMP since not relevant as custom JS is not allowed and CSS is inlined.
- * Note that it is not suitable to use the jetpack_force_disable_site_accelerator filter for this
- * because it will be applied before the wp action, which is the point at which the queried object
- * is available and we know whether the response will be AMP or not. This is particularly important
- * for AMP-first (native AMP) pages where there are no AMP-specific URLs.
- */
- if ( Jetpack_AMP_Support::is_amp_request() ) {
- return;
- }
-
- /**
- * Filters Jetpack CDN's Core version number and locale. Can be used to override the values
- * that Jetpack uses to retrieve assets. Expects the values to be returned in an array.
- *
- * @module photon-cdn
- *
- * @since 6.6.0
- *
- * @param array $values array( $version = core assets version, i.e. 4.9.8, $locale = desired locale )
- */
- list( $version, $locale ) = apply_filters(
- 'jetpack_cdn_core_version_and_locale',
- array( $wp_version, get_locale() )
- );
-
- if ( self::is_public_version( $version ) ) {
- $site_url = trailingslashit( site_url() );
- foreach ( $wp_scripts->registered as $handle => $thing ) {
- if ( wp_startswith( $thing->src, self::CDN ) ) {
- continue;
- }
- $src = ltrim( str_replace( $site_url, '', $thing->src ), '/' );
- if ( self::is_js_or_css_file( $src ) && in_array( substr( $src, 0, 9 ), array( 'wp-admin/', 'wp-includ' ) ) ) {
- $wp_scripts->registered[ $handle ]->src = sprintf( self::CDN . 'c/%1$s/%2$s', $version, $src );
- $wp_scripts->registered[ $handle ]->ver = null;
- }
- }
- foreach ( $wp_styles->registered as $handle => $thing ) {
- if ( wp_startswith( $thing->src, self::CDN ) ) {
- continue;
- }
- $src = ltrim( str_replace( $site_url, '', $thing->src ), '/' );
- if ( self::is_js_or_css_file( $src ) && in_array( substr( $src, 0, 9 ), array( 'wp-admin/', 'wp-includ' ) ) ) {
- $wp_styles->registered[ $handle ]->src = sprintf( self::CDN . 'c/%1$s/%2$s', $version, $src );
- $wp_styles->registered[ $handle ]->ver = null;
- }
- }
- }
-
- self::cdnize_plugin_assets( 'jetpack', JETPACK__VERSION );
- if ( class_exists( 'WooCommerce' ) ) {
- self::cdnize_plugin_assets( 'woocommerce', WC_VERSION );
- }
- }
-
- /**
- * Ensure use of the correct relative path when determining the JavaScript file names.
- *
- * @param string $relative The relative path of the script. False if it could not be determined.
- * @param string $src The full source url of the script.
- * @return string The expected relative path for the CDN-ed URL.
- */
- public static function fix_script_relative_path( $relative, $src ) {
-
- // Note relevant in AMP responses. See note above.
- if ( Jetpack_AMP_Support::is_amp_request() ) {
- return $relative;
- }
-
- $strpos = strpos( $src, '/wp-includes/' );
-
- // We only treat URLs that have wp-includes in them. Cases like language textdomains
- // can also use this filter, they don't need to be touched because they are local paths.
- if ( false === $strpos ) {
- return $relative;
- }
- return substr( $src, 1 + $strpos );
- }
-
- /**
- * Sets up CDN URLs for supported plugin assets.
- *
- * @param String $plugin_slug plugin slug string.
- * @param String $current_version plugin version string.
- * @return null|bool
- */
- public static function cdnize_plugin_assets( $plugin_slug, $current_version ) {
- global $wp_scripts, $wp_styles;
-
- /**
- * Filters Jetpack CDN's plugin slug and version number. Can be used to override the values
- * that Jetpack uses to retrieve assets. For example, when testing a development version of Jetpack
- * the assets are not yet published, so you may need to override the version value to either
- * trunk, or the latest available version. Expects the values to be returned in an array.
- *
- * @module photon-cdn
- *
- * @since 6.6.0
- *
- * @param array $values array( $slug = the plugin repository slug, i.e. jetpack, $version = the plugin version, i.e. 6.6 )
- */
- list( $plugin_slug, $current_version ) = apply_filters(
- 'jetpack_cdn_plugin_slug_and_version',
- array( $plugin_slug, $current_version )
- );
-
- $assets = self::get_plugin_assets( $plugin_slug, $current_version );
- $plugin_directory_url = plugins_url() . '/' . $plugin_slug . '/';
-
- if ( is_wp_error( $assets ) || ! is_array( $assets ) ) {
- return false;
- }
-
- foreach ( $wp_scripts->registered as $handle => $thing ) {
- if ( wp_startswith( $thing->src, self::CDN ) ) {
- continue;
- }
- if ( wp_startswith( $thing->src, $plugin_directory_url ) ) {
- $local_path = substr( $thing->src, strlen( $plugin_directory_url ) );
- if ( in_array( $local_path, $assets, true ) ) {
- $wp_scripts->registered[ $handle ]->src = sprintf( self::CDN . 'p/%1$s/%2$s/%3$s', $plugin_slug, $current_version, $local_path );
- $wp_scripts->registered[ $handle ]->ver = null;
- }
- }
- }
- foreach ( $wp_styles->registered as $handle => $thing ) {
- if ( wp_startswith( $thing->src, self::CDN ) ) {
- continue;
- }
- if ( wp_startswith( $thing->src, $plugin_directory_url ) ) {
- $local_path = substr( $thing->src, strlen( $plugin_directory_url ) );
- if ( in_array( $local_path, $assets, true ) ) {
- $wp_styles->registered[ $handle ]->src = sprintf( self::CDN . 'p/%1$s/%2$s/%3$s', $plugin_slug, $current_version, $local_path );
- $wp_styles->registered[ $handle ]->ver = null;
- }
- }
- }
- }
-
- /**
- * Returns cdn-able assets for a given plugin.
- *
- * @param string $plugin plugin slug string.
- * @param string $version plugin version number string.
- * @return array|bool Will return false if not a public version.
- */
- public static function get_plugin_assets( $plugin, $version ) {
- if ( 'jetpack' === $plugin && JETPACK__VERSION === $version ) {
- if ( ! self::is_public_version( $version ) ) {
- return false;
- }
-
- $assets = array(); // The variable will be redefined in the included file.
-
- include JETPACK__PLUGIN_DIR . 'modules/photon-cdn/jetpack-manifest.php';
- return $assets;
- }
-
- /**
- * Used for other plugins to provide their bundled assets via filter to
- * prevent the need of storing them in an option or an external api request
- * to w.org.
- *
- * @module photon-cdn
- *
- * @since 6.6.0
- *
- * @param array $assets The assets array for the plugin.
- * @param string $version The version of the plugin being requested.
- */
- $assets = apply_filters( "jetpack_cdn_plugin_assets-{$plugin}", null, $version );
- if ( is_array( $assets ) ) {
- return $assets;
- }
-
- if ( ! self::is_public_version( $version ) ) {
- return false;
- }
-
- $cache = Jetpack_Options::get_option( 'static_asset_cdn_files', array() );
- if ( isset( $cache[ $plugin ][ $version ] ) ) {
- if ( is_array( $cache[ $plugin ][ $version ] ) ) {
- return $cache[ $plugin ][ $version ];
- }
- if ( is_numeric( $cache[ $plugin ][ $version ] ) ) {
- // Cache an empty result for up to 24h.
- if ( intval( $cache[ $plugin ][ $version ] ) + DAY_IN_SECONDS > time() ) {
- return array();
- }
- }
- }
-
- $url = sprintf( 'http://downloads.wordpress.org/plugin-checksums/%s/%s.json', $plugin, $version );
-
- if ( wp_http_supports( array( 'ssl' ) ) ) {
- $url = set_url_scheme( $url, 'https' );
- }
-
- $response = wp_remote_get( $url );
-
- $body = trim( wp_remote_retrieve_body( $response ) );
- $body = json_decode( $body, true );
-
- $return = time();
- if ( is_array( $body ) ) {
- $return = array_filter( array_keys( $body['files'] ), array( __CLASS__, 'is_js_or_css_file' ) );
- }
-
- $cache[ $plugin ] = array();
- $cache[ $plugin ][ $version ] = $return;
- Jetpack_Options::update_option( 'static_asset_cdn_files', $cache, true );
-
- return $return;
- }
-
- /**
- * Checks a path whether it is a JS or CSS file.
- *
- * @param String $path file path.
- * @return Boolean whether the file is a JS or CSS.
- */
- public static function is_js_or_css_file( $path ) {
- return ( false === strpos( $path, '?' ) ) && in_array( substr( $path, -3 ), array( 'css', '.js' ), true );
- }
-
- /**
- * Checks whether the version string indicates a production version.
- *
- * @param String $version the version string.
- * @param Boolean $include_beta_and_rc whether to count beta and RC versions as production.
- * @return Boolean
- */
- public static function is_public_version( $version, $include_beta_and_rc = false ) {
- if ( preg_match( '/^\d+(\.\d+)+$/', $version ) ) {
- // matches `1` `1.2` `1.2.3`.
- return true;
- } elseif ( $include_beta_and_rc && preg_match( '/^\d+(\.\d+)+(-(beta|rc|pressable)\d?)$/i', $version ) ) {
- // matches `1.2.3` `1.2.3-beta` `1.2.3-pressable` `1.2.3-beta1` `1.2.3-rc` `1.2.3-rc2`.
- return true;
- }
- // unrecognized version.
- return false;
- }
-}
-/**
- * Allow plugins to short-circuit the Asset CDN, even when the module is on.
- *
- * @module photon-cdn
- *
- * @since 6.7.0
- *
- * @param false bool Should the Asset CDN be blocked? False by default.
- */
-if ( true !== apply_filters( 'jetpack_force_disable_site_accelerator', false ) ) {
- Jetpack_Photon_Static_Assets_CDN::go();
-}
diff --git a/plugins/jetpack/modules/photon-cdn/jetpack-manifest.php b/plugins/jetpack/modules/photon-cdn/jetpack-manifest.php
deleted file mode 100644
index 1d40b5a1..00000000
--- a/plugins/jetpack/modules/photon-cdn/jetpack-manifest.php
+++ /dev/null
@@ -1,434 +0,0 @@
-<?php
-$assets = array (
- 0 => 'css/jetpack-admin.min.css',
- 1 => 'css/jetpack-idc.min.css',
- 2 => 'css/dashboard-widget-rtl.min.css',
- 3 => 'css/jetpack-admin-rtl.css',
- 4 => 'css/jetpack-idc-rtl.css',
- 5 => 'css/jetpack-icons-rtl.css',
- 6 => 'css/jetpack-icons.min.css',
- 7 => 'css/jetpack-idc-admin-bar.min.css',
- 8 => 'css/jetpack-admin.css',
- 9 => 'css/jetpack-idc-admin-bar-rtl.css',
- 10 => 'css/jetpack-idc-admin-bar-rtl.min.css',
- 11 => 'css/jetpack-idc-rtl.min.css',
- 12 => 'css/jetpack-icons.css',
- 13 => 'css/jetpack-admin-jitm-rtl.min.css',
- 14 => 'css/jetpack.css',
- 15 => 'css/jetpack-admin-jitm.css',
- 16 => 'css/jetpack-icons-rtl.min.css',
- 17 => 'css/jetpack-idc.css',
- 18 => 'css/jetpack-banners-rtl.min.css',
- 19 => 'css/dashboard-widget.min.css',
- 20 => 'css/jetpack-admin-rtl.min.css',
- 21 => 'css/dashboard-widget-rtl.css',
- 22 => 'css/jetpack-banners.css',
- 23 => 'css/jetpack-banners-rtl.css',
- 24 => 'css/jetpack-banners.min.css',
- 25 => 'css/jetpack-idc-admin-bar.css',
- 26 => 'css/jetpack-rtl.css',
- 27 => 'css/jetpack-admin-jitm-rtl.css',
- 28 => 'css/dashboard-widget.css',
- 29 => 'css/jetpack-admin-jitm.min.css',
- 30 => '3rd-party/debug-bar/debug-bar.css',
- 31 => '3rd-party/debug-bar/debug-bar.js',
- 32 => '_inc/blocks/tiled-gallery/view.rtl.css',
- 33 => '_inc/blocks/tiled-gallery/view.js',
- 34 => '_inc/blocks/tiled-gallery/view.css',
- 35 => '_inc/blocks/vendors~swiper.css',
- 36 => '_inc/blocks/editor.css',
- 37 => '_inc/blocks/editor.rtl.css',
- 38 => '_inc/blocks/vendors~map/mapbox-gl.rtl.css',
- 39 => '_inc/blocks/vendors~map/mapbox-gl.js',
- 40 => '_inc/blocks/vendors~map/mapbox-gl.css',
- 41 => '_inc/blocks/vendors~swiper.rtl.css',
- 42 => '_inc/blocks/repeat-visitor/view.js',
- 43 => '_inc/blocks/editor-beta.js',
- 44 => '_inc/blocks/mailchimp/view.rtl.css',
- 45 => '_inc/blocks/mailchimp/view.js',
- 46 => '_inc/blocks/mailchimp/view.css',
- 47 => '_inc/blocks/editor.js',
- 48 => '_inc/blocks/map/view.rtl.css',
- 49 => '_inc/blocks/map/view.js',
- 50 => '_inc/blocks/map/view.css',
- 51 => '_inc/blocks/vendors~swiper.js',
- 52 => '_inc/blocks/editor-beta.css',
- 53 => '_inc/blocks/contact-info/view.rtl.css',
- 54 => '_inc/blocks/contact-info/view.js',
- 55 => '_inc/blocks/contact-info/view.css',
- 56 => '_inc/blocks/slideshow/view.rtl.css',
- 57 => '_inc/blocks/slideshow/view.js',
- 58 => '_inc/blocks/slideshow/view.css',
- 59 => '_inc/blocks/editor-beta.rtl.css',
- 60 => '_inc/blocks/gif/view.rtl.css',
- 61 => '_inc/blocks/gif/view.js',
- 62 => '_inc/blocks/gif/view.css',
- 63 => '_inc/idc-notice.js',
- 64 => '_inc/jetpack-modules.js',
- 65 => '_inc/jquery.jetpack-resize.js',
- 66 => '_inc/genericons/genericons/genericons.css',
- 67 => '_inc/genericons/genericons/rtl/genericons-rtl.css',
- 68 => '_inc/genericons/genericons.css',
- 69 => '_inc/jetpack-modules.views.js',
- 70 => '_inc/jquery.spin.js',
- 71 => '_inc/facebook-embed.js',
- 72 => '_inc/twitter-timeline.js',
- 73 => '_inc/spin.js',
- 74 => '_inc/accessible-focus.js',
- 75 => '_inc/jetpack-jitm.js',
- 76 => '_inc/jetpack-modules.models.js',
- 77 => '_inc/social-logos/social-logos.min.css',
- 78 => '_inc/social-logos/social-logos.css',
- 79 => '_inc/gallery-settings.js',
- 80 => '_inc/lib/tracks/tracks-callables.js',
- 81 => '_inc/lib/tracks/tracks-ajax.js',
- 82 => '_inc/build/infinite-scroll/infinity.min.js',
- 83 => '_inc/build/videopress/js/videopress-plupload.min.js',
- 84 => '_inc/build/videopress/js/videopress-uploader.min.js',
- 85 => '_inc/build/videopress/js/media-video-widget-extensions.min.js',
- 86 => '_inc/build/videopress/js/editor-view.min.js',
- 87 => '_inc/build/tiled-gallery/tiled-gallery/tiled-gallery.min.js',
- 88 => '_inc/build/jetpack-connection-banner.min.js',
- 89 => '_inc/build/style.min.css',
- 90 => '_inc/build/masterbar/tracks-events.min.js',
- 91 => '_inc/build/sharedaddy/admin-sharing.min.js',
- 92 => '_inc/build/sharedaddy/sharing.min.js',
- 93 => '_inc/build/jquery.spin.min.js',
- 94 => '_inc/build/custom-post-types/comics/comics.min.js',
- 95 => '_inc/build/custom-post-types/js/nova-drag-drop.min.js',
- 96 => '_inc/build/custom-post-types/js/many-items.min.js',
- 97 => '_inc/build/custom-post-types/js/menu-checkboxes.min.js',
- 98 => '_inc/build/jquery.jetpack-resize.min.js',
- 99 => '_inc/build/likes/post-count-jetpack.min.js',
- 100 => '_inc/build/likes/queuehandler.min.js',
- 101 => '_inc/build/likes/post-count.min.js',
- 102 => '_inc/build/admin.dops-style.css',
- 103 => '_inc/build/after-the-deadline/tinymce/editor_plugin.min.js',
- 104 => '_inc/build/after-the-deadline/tinymce/plugin.min.js',
- 105 => '_inc/build/after-the-deadline/atd-nonvis-editor-plugin.min.js',
- 106 => '_inc/build/after-the-deadline/jquery.atd.min.js',
- 107 => '_inc/build/after-the-deadline/atd.core.min.js',
- 108 => '_inc/build/after-the-deadline/atd-autoproofread.min.js',
- 109 => '_inc/build/comment-likes/comment-like-count.min.js',
- 110 => '_inc/build/idc-notice.min.js',
- 111 => '_inc/build/accessible-focus.min.js',
- 112 => '_inc/build/contact-form/js/grunion.min.js',
- 113 => '_inc/build/contact-form/js/tinymce-plugin-form-button.min.js',
- 114 => '_inc/build/contact-form/js/grunion-admin.min.js',
- 115 => '_inc/build/contact-form/js/grunion-frontend.min.js',
- 116 => '_inc/build/contact-form/js/editor-view.min.js',
- 117 => '_inc/build/jetpack-modules.models.min.js',
- 118 => '_inc/build/related-posts/related-posts.min.js',
- 119 => '_inc/build/related-posts/related-posts-customizer.min.js',
- 120 => '_inc/build/carousel/jetpack-carousel.min.js',
- 121 => '_inc/build/shortcodes/js/brightcove.min.js',
- 122 => '_inc/build/shortcodes/js/gist.min.js',
- 123 => '_inc/build/shortcodes/js/recipes-printthis.min.js',
- 124 => '_inc/build/shortcodes/js/main.min.js',
- 125 => '_inc/build/shortcodes/js/recipes.min.js',
- 126 => '_inc/build/shortcodes/js/jmpress.min.js',
- 127 => '_inc/build/shortcodes/js/instagram.min.js',
- 128 => '_inc/build/shortcodes/js/slideshow-shortcode.min.js',
- 129 => '_inc/build/shortcodes/js/quiz.min.js',
- 130 => '_inc/build/minileven/theme/pub/minileven/js/small-menu.min.js',
- 131 => '_inc/build/custom-css/custom-css/js/core-customizer-css-preview.min.js',
- 132 => '_inc/build/custom-css/custom-css/js/core-customizer-css.core-4.9.min.js',
- 133 => '_inc/build/custom-css/custom-css/js/use-codemirror.min.js',
- 134 => '_inc/build/custom-css/custom-css/js/core-customizer-css.min.js',
- 135 => '_inc/build/custom-css/custom-css/js/css-editor.min.js',
- 136 => '_inc/build/jetpack-jitm.min.js',
- 137 => '_inc/build/gallery-settings.min.js',
- 138 => '_inc/build/spin.min.js',
- 139 => '_inc/build/jetpack-admin.min.js',
- 140 => '_inc/build/admin.js',
- 141 => '_inc/build/twitter-timeline.min.js',
- 142 => '_inc/build/jetpack-modules.views.min.js',
- 143 => '_inc/build/photon/photon.min.js',
- 144 => '_inc/build/style.min.rtl.css',
- 145 => '_inc/build/jetpack-modules.min.js',
- 146 => '_inc/build/postmessage.min.js',
- 147 => '_inc/build/widget-visibility/widget-conditions/widget-conditions.min.js',
- 148 => '_inc/build/facebook-embed.min.js',
- 149 => '_inc/build/widgets/simple-payments/customizer.min.js',
- 150 => '_inc/build/widgets/social-icons/social-icons-admin.min.js',
- 151 => '_inc/build/widgets/eu-cookie-law/eu-cookie-law.min.js',
- 152 => '_inc/build/widgets/eu-cookie-law/eu-cookie-law-admin.min.js',
- 153 => '_inc/build/widgets/gallery/js/gallery.min.js',
- 154 => '_inc/build/widgets/gallery/js/admin.min.js',
- 155 => '_inc/build/widgets/milestone/milestone.min.js',
- 156 => '_inc/build/widgets/milestone/admin.min.js',
- 157 => '_inc/build/widgets/search/js/search-widget.min.js',
- 158 => '_inc/build/widgets/search/js/search-widget-admin.min.js',
- 159 => '_inc/build/widgets/customizer-utils.min.js',
- 160 => '_inc/build/widgets/contact-info/contact-info-admin.min.js',
- 161 => '_inc/build/widgets/twitter-timeline-admin.min.js',
- 162 => '_inc/build/widgets/google-translate/google-translate.min.js',
- 163 => '_inc/build/lazy-images/js/lazy-images.min.js',
- 164 => '_inc/build/admin.dops-style.rtl.css',
- 165 => '_inc/jetpack-admin.js',
- 166 => '_inc/jetpack-connection-banner.js',
- 167 => '_inc/postmessage.js',
- 168 => 'modules/infinite-scroll/infinity.js',
- 169 => 'modules/infinite-scroll/infinity.css',
- 170 => 'modules/infinite-scroll/themes/twentysixteen.css',
- 171 => 'modules/infinite-scroll/themes/twentyeleven.css',
- 172 => 'modules/infinite-scroll/themes/twentyten.css',
- 173 => 'modules/infinite-scroll/themes/twentyseventeen-rtl.css',
- 174 => 'modules/infinite-scroll/themes/twentyfifteen.css',
- 175 => 'modules/infinite-scroll/themes/twentysixteen-rtl.css',
- 176 => 'modules/infinite-scroll/themes/twentyseventeen.css',
- 177 => 'modules/infinite-scroll/themes/twentytwelve.css',
- 178 => 'modules/infinite-scroll/themes/twentyfourteen.css',
- 179 => 'modules/infinite-scroll/themes/twentyfifteen-rtl.css',
- 180 => 'modules/infinite-scroll/themes/twentythirteen.css',
- 181 => 'modules/videopress/css/videopress-editor-style-rtl.css',
- 182 => 'modules/videopress/css/videopress-editor-style.min.css',
- 183 => 'modules/videopress/css/editor.css',
- 184 => 'modules/videopress/css/videopress-editor-style-rtl.min.css',
- 185 => 'modules/videopress/css/editor.min.css',
- 186 => 'modules/videopress/css/editor-rtl.css',
- 187 => 'modules/videopress/css/editor-rtl.min.css',
- 188 => 'modules/videopress/css/videopress-editor-style.css',
- 189 => 'modules/videopress/js/media-video-widget-extensions.js',
- 190 => 'modules/videopress/js/videopress-plupload.js',
- 191 => 'modules/videopress/js/videopress-uploader.js',
- 192 => 'modules/videopress/js/editor-view.js',
- 193 => 'modules/videopress/videopress-admin.css',
- 194 => 'modules/videopress/videopress-admin.min.css',
- 195 => 'modules/videopress/videopress-admin-rtl.css',
- 196 => 'modules/videopress/videopress-admin-rtl.min.css',
- 197 => 'modules/tiled-gallery/tiled-gallery/tiled-gallery-rtl.css',
- 198 => 'modules/tiled-gallery/tiled-gallery/tiled-gallery.css',
- 199 => 'modules/tiled-gallery/tiled-gallery/rtl/tiled-gallery-rtl.css',
- 200 => 'modules/tiled-gallery/tiled-gallery/tiled-gallery.js',
- 201 => 'modules/simple-payments/simple-payments.css',
- 202 => 'modules/simple-payments/paypal-express-checkout.js',
- 203 => 'modules/masterbar/overrides.css',
- 204 => 'modules/masterbar/tracks-events.js',
- 205 => 'modules/sharedaddy/admin-sharing-rtl.min.css',
- 206 => 'modules/sharedaddy/sharing.js',
- 207 => 'modules/sharedaddy/sharing.css',
- 208 => 'modules/sharedaddy/admin-sharing.js',
- 209 => 'modules/sharedaddy/admin-sharing.min.css',
- 210 => 'modules/sharedaddy/admin-sharing-rtl.css',
- 211 => 'modules/sharedaddy/admin-sharing.css',
- 212 => 'modules/custom-post-types/comics/comics.min.css',
- 213 => 'modules/custom-post-types/comics/comics-rtl.css',
- 214 => 'modules/custom-post-types/comics/comics.css',
- 215 => 'modules/custom-post-types/comics/comics-rtl.min.css',
- 216 => 'modules/custom-post-types/comics/comics.js',
- 217 => 'modules/custom-post-types/comics/admin.css',
- 218 => 'modules/custom-post-types/comics/rtl/comics-rtl.css',
- 219 => 'modules/custom-post-types/css/portfolio-shortcode.css',
- 220 => 'modules/custom-post-types/css/testimonial-shortcode.css',
- 221 => 'modules/custom-post-types/css/nova-font.css',
- 222 => 'modules/custom-post-types/css/edit-items.css',
- 223 => 'modules/custom-post-types/css/nova.css',
- 224 => 'modules/custom-post-types/css/many-items.css',
- 225 => 'modules/custom-post-types/js/menu-checkboxes.js',
- 226 => 'modules/custom-post-types/js/many-items.js',
- 227 => 'modules/custom-post-types/js/nova-drag-drop.js',
- 228 => 'modules/calypsoify/style-gutenberg-rtl.min.css',
- 229 => 'modules/calypsoify/style-rtl.min.css',
- 230 => 'modules/calypsoify/style.min.css',
- 231 => 'modules/calypsoify/style-gutenberg.min.css',
- 232 => 'modules/calypsoify/mods-gutenberg.js',
- 233 => 'modules/calypsoify/mods.js',
- 234 => 'modules/likes/post-count.js',
- 235 => 'modules/likes/post-count-jetpack.js',
- 236 => 'modules/likes/style.css',
- 237 => 'modules/likes/queuehandler.js',
- 238 => 'modules/protect/protect-dashboard-widget-rtl.min.css',
- 239 => 'modules/protect/protect-dashboard-widget.css',
- 240 => 'modules/protect/protect-dashboard-widget.min.css',
- 241 => 'modules/protect/protect-dashboard-widget-rtl.css',
- 242 => 'modules/after-the-deadline/jquery.atd.js',
- 243 => 'modules/after-the-deadline/tinymce/css/content-rtl.min.css',
- 244 => 'modules/after-the-deadline/tinymce/css/content.css',
- 245 => 'modules/after-the-deadline/tinymce/css/content-rtl.css',
- 246 => 'modules/after-the-deadline/tinymce/css/content.min.css',
- 247 => 'modules/after-the-deadline/tinymce/editor_plugin.js',
- 248 => 'modules/after-the-deadline/tinymce/plugin.js',
- 249 => 'modules/after-the-deadline/atd-rtl.css',
- 250 => 'modules/after-the-deadline/atd.min.css',
- 251 => 'modules/after-the-deadline/atd.core.js',
- 252 => 'modules/after-the-deadline/atd-rtl.min.css',
- 253 => 'modules/after-the-deadline/rtl/atd-rtl.css',
- 254 => 'modules/after-the-deadline/atd-autoproofread.js',
- 255 => 'modules/after-the-deadline/atd-nonvis-editor-plugin.js',
- 256 => 'modules/after-the-deadline/atd.css',
- 257 => 'modules/comment-likes/comment-like-count.js',
- 258 => 'modules/comment-likes/admin-style.css',
- 259 => 'modules/contact-form/css/editor-ui.min.css',
- 260 => 'modules/contact-form/css/editor-ui-rtl.css',
- 261 => 'modules/contact-form/css/editor-inline-editing-style.css',
- 262 => 'modules/contact-form/css/editor-inline-editing-style-rtl.css',
- 263 => 'modules/contact-form/css/editor-inline-editing-style.min.css',
- 264 => 'modules/contact-form/css/editor-style-rtl.min.css',
- 265 => 'modules/contact-form/css/jquery-ui-datepicker.css',
- 266 => 'modules/contact-form/css/grunion.css',
- 267 => 'modules/contact-form/css/editor-ui.css',
- 268 => 'modules/contact-form/css/editor-style.css',
- 269 => 'modules/contact-form/css/editor-style-rtl.css',
- 270 => 'modules/contact-form/css/editor-inline-editing-style-rtl.min.css',
- 271 => 'modules/contact-form/css/editor-style.min.css',
- 272 => 'modules/contact-form/css/grunion-rtl.css',
- 273 => 'modules/contact-form/css/editor-ui-rtl.min.css',
- 274 => 'modules/contact-form/js/grunion.js',
- 275 => 'modules/contact-form/js/grunion-admin.js',
- 276 => 'modules/contact-form/js/editor-view.js',
- 277 => 'modules/contact-form/js/grunion-frontend.js',
- 278 => 'modules/contact-form/js/tinymce-plugin-form-button.js',
- 279 => 'modules/related-posts/related-posts.css',
- 280 => 'modules/related-posts/related-posts.js',
- 281 => 'modules/related-posts/related-posts-rtl.css',
- 282 => 'modules/related-posts/rtl/related-posts-rtl.css',
- 283 => 'modules/related-posts/related-posts-customizer.js',
- 284 => 'modules/carousel/jetpack-carousel.js',
- 285 => 'modules/carousel/rtl/jetpack-carousel-rtl.css',
- 286 => 'modules/carousel/jetpack-carousel.css',
- 287 => 'modules/carousel/jetpack-carousel-rtl.css',
- 288 => 'modules/shortcodes/css/recipes.css',
- 289 => 'modules/shortcodes/css/slideshow-shortcode.min.css',
- 290 => 'modules/shortcodes/css/slideshow-shortcode-rtl.css',
- 291 => 'modules/shortcodes/css/recipes-print.min.css',
- 292 => 'modules/shortcodes/css/recipes-rtl.css',
- 293 => 'modules/shortcodes/css/recipes.min.css',
- 294 => 'modules/shortcodes/css/recipes-print-rtl.css',
- 295 => 'modules/shortcodes/css/recipes-print.css',
- 296 => 'modules/shortcodes/css/slideshow-shortcode-rtl.min.css',
- 297 => 'modules/shortcodes/css/recipes-rtl.min.css',
- 298 => 'modules/shortcodes/css/recipes-print-rtl.min.css',
- 299 => 'modules/shortcodes/css/style.css',
- 300 => 'modules/shortcodes/css/quiz.css',
- 301 => 'modules/shortcodes/css/slideshow-shortcode.css',
- 302 => 'modules/shortcodes/js/brightcove.js',
- 303 => 'modules/shortcodes/js/quiz.js',
- 304 => 'modules/shortcodes/js/recipes-printthis.js',
- 305 => 'modules/shortcodes/js/jmpress.js',
- 306 => 'modules/shortcodes/js/slideshow-shortcode.js',
- 307 => 'modules/shortcodes/js/main.js',
- 308 => 'modules/shortcodes/js/jquery.cycle.min.js',
- 309 => 'modules/shortcodes/js/instagram.js',
- 310 => 'modules/shortcodes/js/recipes.js',
- 311 => 'modules/shortcodes/js/gist.js',
- 312 => 'modules/subscriptions/subscriptions.css',
- 313 => 'modules/minileven/theme/pub/minileven/js/small-menu.js',
- 314 => 'modules/minileven/theme/pub/minileven/style.css',
- 315 => 'modules/minileven/theme/pub/minileven/rtl.css',
- 316 => 'modules/wordads/css/style.css',
- 317 => 'modules/custom-css/csstidy/cssparse-rtl.min.css',
- 318 => 'modules/custom-css/csstidy/cssparse-rtl.css',
- 319 => 'modules/custom-css/csstidy/cssparse.min.css',
- 320 => 'modules/custom-css/csstidy/cssparsed-rtl.min.css',
- 321 => 'modules/custom-css/csstidy/cssparsed.css',
- 322 => 'modules/custom-css/csstidy/cssparse.css',
- 323 => 'modules/custom-css/csstidy/cssparsed-rtl.css',
- 324 => 'modules/custom-css/csstidy/cssparsed.min.css',
- 325 => 'modules/custom-css/custom-css/css/blank.css',
- 326 => 'modules/custom-css/custom-css/css/css-editor.css',
- 327 => 'modules/custom-css/custom-css/css/use-codemirror.css',
- 328 => 'modules/custom-css/custom-css/css/codemirror.css',
- 329 => 'modules/custom-css/custom-css/css/codemirror-rtl.min.css',
- 330 => 'modules/custom-css/custom-css/css/css-editor-rtl.min.css',
- 331 => 'modules/custom-css/custom-css/css/css-editor-rtl.css',
- 332 => 'modules/custom-css/custom-css/css/customizer-control.css',
- 333 => 'modules/custom-css/custom-css/css/codemirror-rtl.css',
- 334 => 'modules/custom-css/custom-css/css/css-editor.min.css',
- 335 => 'modules/custom-css/custom-css/css/codemirror.min.css',
- 336 => 'modules/custom-css/custom-css/css/rtl/codemirror-rtl.css',
- 337 => 'modules/custom-css/custom-css/css/use-codemirror-rtl.css',
- 338 => 'modules/custom-css/custom-css/css/use-codemirror.min.css',
- 339 => 'modules/custom-css/custom-css/css/use-codemirror-rtl.min.css',
- 340 => 'modules/custom-css/custom-css/js/core-customizer-css.core-4.9.js',
- 341 => 'modules/custom-css/custom-css/js/css-editor.js',
- 342 => 'modules/custom-css/custom-css/js/codemirror.min.js',
- 343 => 'modules/custom-css/custom-css/js/core-customizer-css-preview.js',
- 344 => 'modules/custom-css/custom-css/js/core-customizer-css.js',
- 345 => 'modules/custom-css/custom-css/js/use-codemirror.js',
- 346 => 'modules/sso/jetpack-sso-login.css',
- 347 => 'modules/sso/jetpack-sso-login.js',
- 348 => 'modules/sso/jetpack-sso-login-rtl.css',
- 349 => 'modules/sso/jetpack-sso-login.min.css',
- 350 => 'modules/sso/jetpack-sso-login-rtl.min.css',
- 351 => 'modules/theme-tools/site-logo/css/site-logo-control.css',
- 352 => 'modules/theme-tools/site-logo/css/site-logo-control-rtl.min.css',
- 353 => 'modules/theme-tools/site-logo/css/site-logo-control.min.css',
- 354 => 'modules/theme-tools/site-logo/css/site-logo-control-rtl.css',
- 355 => 'modules/theme-tools/site-logo/js/site-logo.min.js',
- 356 => 'modules/theme-tools/site-logo/js/site-logo.js',
- 357 => 'modules/theme-tools/site-logo/js/site-logo-header-text.js',
- 358 => 'modules/theme-tools/site-logo/js/site-logo-control.js',
- 359 => 'modules/theme-tools/site-logo/js/site-logo-header-text.min.js',
- 360 => 'modules/theme-tools/site-logo/js/site-logo-control.min.js',
- 361 => 'modules/theme-tools/compat/twentysixteen.css',
- 362 => 'modules/theme-tools/compat/twentynineteen.css',
- 363 => 'modules/theme-tools/compat/twentyfourteen-rtl.css',
- 364 => 'modules/theme-tools/compat/twentyfifteen.css',
- 365 => 'modules/theme-tools/compat/twentysixteen-rtl.css',
- 366 => 'modules/theme-tools/compat/twentynineteen-rtl.css',
- 367 => 'modules/theme-tools/compat/twentyfourteen.css',
- 368 => 'modules/theme-tools/compat/twentyfifteen-rtl.css',
- 369 => 'modules/theme-tools/content-options/customizer.js',
- 370 => 'modules/theme-tools/js/suggest.js',
- 371 => 'modules/theme-tools/social-menu/social-menu.css',
- 372 => 'modules/theme-tools/responsive-videos/responsive-videos.css',
- 373 => 'modules/theme-tools/responsive-videos/responsive-videos.js',
- 374 => 'modules/theme-tools/responsive-videos/responsive-videos.min.js',
- 375 => 'modules/post-by-email/post-by-email-rtl.css',
- 376 => 'modules/post-by-email/post-by-email.min.css',
- 377 => 'modules/post-by-email/post-by-email-rtl.min.css',
- 378 => 'modules/post-by-email/post-by-email.css',
- 379 => 'modules/post-by-email/post-by-email.js',
- 380 => 'modules/photon/photon.js',
- 381 => 'modules/plugin-search/plugin-search.css',
- 382 => 'modules/plugin-search/plugin-search.js',
- 383 => 'modules/widget-visibility/widget-conditions/widget-conditions-rtl.min.css',
- 384 => 'modules/widget-visibility/widget-conditions/widget-conditions-rtl.css',
- 385 => 'modules/widget-visibility/widget-conditions/widget-conditions.min.css',
- 386 => 'modules/widget-visibility/widget-conditions/widget-conditions.css',
- 387 => 'modules/widget-visibility/widget-conditions/rtl/widget-conditions-rtl.css',
- 388 => 'modules/widget-visibility/widget-conditions/widget-conditions.js',
- 389 => 'modules/widgets/simple-payments/customizer.css',
- 390 => 'modules/widgets/simple-payments/customizer.js',
- 391 => 'modules/widgets/simple-payments/style.css',
- 392 => 'modules/widgets/twitter-timeline-admin.js',
- 393 => 'modules/widgets/facebook-likebox/style.css',
- 394 => 'modules/widgets/customizer-utils.js',
- 395 => 'modules/widgets/goodreads/css/goodreads.css',
- 396 => 'modules/widgets/goodreads/css/rtl/goodreads-rtl.css',
- 397 => 'modules/widgets/social-media-icons/style.css',
- 398 => 'modules/widgets/my-community/style.css',
- 399 => 'modules/widgets/authors/style.css',
- 400 => 'modules/widgets/social-icons/social-icons-admin.js',
- 401 => 'modules/widgets/social-icons/social-icons-admin.css',
- 402 => 'modules/widgets/social-icons/social-icons.css',
- 403 => 'modules/widgets/eu-cookie-law/eu-cookie-law.js',
- 404 => 'modules/widgets/eu-cookie-law/style.css',
- 405 => 'modules/widgets/eu-cookie-law/eu-cookie-law-admin.js',
- 406 => 'modules/widgets/flickr/style.css',
- 407 => 'modules/widgets/gallery/css/admin-rtl.min.css',
- 408 => 'modules/widgets/gallery/css/admin.css',
- 409 => 'modules/widgets/gallery/css/admin-rtl.css',
- 410 => 'modules/widgets/gallery/css/admin.min.css',
- 411 => 'modules/widgets/gallery/css/rtl/admin-rtl.css',
- 412 => 'modules/widgets/gallery/js/gallery.js',
- 413 => 'modules/widgets/gallery/js/admin.js',
- 414 => 'modules/widgets/top-posts/style.css',
- 415 => 'modules/widgets/milestone/style-admin.css',
- 416 => 'modules/widgets/milestone/milestone.js',
- 417 => 'modules/widgets/milestone/admin.js',
- 418 => 'modules/widgets/search/css/search-widget-frontend.css',
- 419 => 'modules/widgets/search/css/search-widget-admin-ui.css',
- 420 => 'modules/widgets/search/js/search-widget-admin.js',
- 421 => 'modules/widgets/search/js/search-widget.js',
- 422 => 'modules/widgets/contact-info/contact-info-admin.js',
- 423 => 'modules/widgets/contact-info/contact-info-map.css',
- 424 => 'modules/widgets/image-widget/style.css',
- 425 => 'modules/widgets/customizer-controls.css',
- 426 => 'modules/widgets/google-translate/google-translate.js',
- 427 => 'modules/widgets/wordpress-post-widget/style.css',
- 428 => 'modules/widgets/gravatar-profile.css',
- 429 => 'modules/lazy-images/js/lazy-images.js',
- 430 => 'modules/wpgroho.js',
-);
diff --git a/plugins/jetpack/modules/photon.php b/plugins/jetpack/modules/photon.php
deleted file mode 100644
index cd61ee70..00000000
--- a/plugins/jetpack/modules/photon.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-/**
- * Module Name: Image CDN
- * Module Description: Mirrors and serves your images from our free and fast image CDN, improving your site’s performance with no additional load on your servers.
- * Jumpstart Description: Mirrors and serves your images from our free and fast image CDN, improving your site’s performance with no additional load on your servers.
- * Sort Order: 25
- * Recommendation Order: 1
- * First Introduced: 2.0
- * Requires Connection: Yes
- * Auto Activate: No
- * Module Tags: Photos and Videos, Appearance, Recommended
- * Feature: Recommended, Jumpstart, Appearance
- * Additional Search Queries: photon, photo cdn, image cdn, speed, compression, resize, responsive images, responsive, content distribution network, optimize, page speed, image optimize, photon jetpack
- */
-
-Jetpack::dns_prefetch( array(
- '//i0.wp.com',
- '//i1.wp.com',
- '//i2.wp.com',
-) );
-
-Jetpack_Photon::instance();
diff --git a/plugins/jetpack/modules/photon/photon.js b/plugins/jetpack/modules/photon/photon.js
deleted file mode 100644
index 0485d85a..00000000
--- a/plugins/jetpack/modules/photon/photon.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/* jshint onevar: false */
-
-(function($){
- /**
- * For images lacking explicit dimensions and needing them, try to add them.
- */
- var restore_dims = function() {
- $( 'img[data-recalc-dims]' ).each( function recalc() {
- var $this = $( this );
- if ( this.complete ) {
-
- // Support for lazy loading: if there is a lazy-src
- // attribute and it's value is not the same as the current src we
- // should wait until the image load event
- if ( $this.data( 'lazy-src' ) && $this.attr( 'src' ) !== $this.data( 'lazy-src' ) ) {
- $this.load( recalc );
- return;
- }
-
- var width = this.width,
- height = this.height;
-
- if ( width && width > 0 && height && height > 0 ) {
- $this.attr( {
- width: width,
- height: height
- } );
-
- reset_for_retina( this );
- }
- }
- else {
- $this.load( recalc );
- }
- } );
- },
-
- /**
- * Modify given image's markup so that devicepx-jetpack.js will act on the image and it won't be reprocessed by this script.
- */
- reset_for_retina = function( img ) {
- $( img ).removeAttr( 'data-recalc-dims' ).removeAttr( 'scale' );
- };
-
- /**
- * Check both when page loads, and when IS is triggered.
- */
- $( document ).ready( restore_dims );
-
- if ( 'on' in $.fn ) {
- $( document.body ).on( 'post-load', restore_dims );
- } else {
- $( document ).delegate( 'body', 'post-load', restore_dims );
- }
-})(jQuery);
diff --git a/plugins/jetpack/modules/plugin-search.php b/plugins/jetpack/modules/plugin-search.php
deleted file mode 100644
index 0536d37b..00000000
--- a/plugins/jetpack/modules/plugin-search.php
+++ /dev/null
@@ -1,602 +0,0 @@
-<?php
-/**
- * Disable direct access and execution.
- */
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-
-if (
- is_admin() &&
- Jetpack::is_active() &&
- /** This filter is documented in _inc/lib/admin-pages/class.jetpack-react-page.php */
- apply_filters( 'jetpack_show_promotions', true ) &&
- jetpack_is_psh_active()
-) {
- Jetpack_Plugin_Search::init();
-}
-
-// Register endpoints when WP REST API is initialized.
-add_action( 'rest_api_init', array( 'Jetpack_Plugin_Search', 'register_endpoints' ) );
-
-/**
- * Class that includes cards in the plugin search results when users enter terms that match some Jetpack feature.
- * Card can be dismissed and includes a title, description, button to enable the feature and a link for more information.
- *
- * @since 7.1.0
- */
-class Jetpack_Plugin_Search {
-
- static $slug = 'jetpack-plugin-search';
-
- public static function init() {
- static $instance = null;
-
- if ( ! $instance ) {
- jetpack_require_lib( 'tracks/client' );
- $instance = new Jetpack_Plugin_Search();
- }
-
- return $instance;
- }
-
- public function __construct() {
- add_action( 'current_screen', array( $this, 'start' ) );
- }
-
- /**
- * Add actions and filters only if this is the plugin installation screen and it's the first page.
- *
- * @param object $screen
- *
- * @since 7.1.0
- */
- public function start( $screen ) {
- if ( 'plugin-install' === $screen->base && ( ! isset( $_GET['paged'] ) || 1 == $_GET['paged'] ) ) {
- add_action( 'admin_enqueue_scripts', array( $this, 'load_plugins_search_script' ) );
- add_filter( 'plugins_api_result', array( $this, 'inject_jetpack_module_suggestion' ), 10, 3 );
- add_filter( 'self_admin_url', array( $this, 'plugin_details' ) );
- add_filter( 'plugin_install_action_links', array( $this, 'insert_module_related_links' ), 10, 2 );
- }
- }
-
- /**
- * Modify URL used to fetch to plugin information so it pulls Jetpack plugin page.
- *
- * @param string $url URL to load in dialog pulling the plugin page from wporg.
- *
- * @since 7.1.0
- *
- * @return string The URL with 'jetpack' instead of 'jetpack-plugin-search'.
- */
- public function plugin_details( $url ) {
- return false !== stripos( $url, 'tab=plugin-information&amp;plugin=' . self::$slug )
- ? 'plugin-install.php?tab=plugin-information&amp;plugin=jetpack&amp;TB_iframe=true&amp;width=600&amp;height=550'
- : $url;
- }
-
- /**
- * Register REST API endpoints.
- *
- * @since 7.1.0
- */
- public static function register_endpoints() {
- register_rest_route( 'jetpack/v4', '/hints', array(
- 'methods' => WP_REST_Server::EDITABLE,
- 'callback' => __CLASS__ . '::dismiss',
- 'permission_callback' => __CLASS__ . '::can_request',
- 'args' => array(
- 'hint' => array(
- 'default' => '',
- 'type' => 'string',
- 'required' => true,
- 'validate_callback' => __CLASS__ . '::is_hint_id',
- ),
- )
- ) );
- }
-
- /**
- * A WordPress REST API permission callback method that accepts a request object and
- * decides if the current user has enough privileges to act.
- *
- * @since 7.1.0
- *
- * @return bool does a current user have enough privileges.
- */
- public static function can_request() {
- return current_user_can( 'jetpack_admin_page' );
- }
-
- /**
- * Validates that the ID of the hint to dismiss is a string.
- *
- * @since 7.1.0
- *
- * @param string|bool $value Value to check.
- * @param WP_REST_Request $request The request sent to the WP REST API.
- * @param string $param Name of the parameter passed to endpoint holding $value.
- *
- * @return bool|WP_Error
- */
- public static function is_hint_id( $value, $request, $param ) {
- return in_array( $value, Jetpack::get_available_modules(), true )
- ? true
- : new WP_Error( 'invalid_param', sprintf( esc_html__( '%s must be an alphanumeric string.', 'jetpack' ), $param ) );
- }
-
- /**
- * A WordPress REST API callback method that accepts a request object and decides what to do with it.
- *
- * @param WP_REST_Request $request {
- * Array of parameters received by request.
- *
- * @type string $hint Slug of card to dismiss.
- * }
- *
- * @since 7.1.0
- *
- * @return bool|array|WP_Error a resulting value or object, or an error.
- */
- public static function dismiss( WP_REST_Request $request ) {
- return self::add_to_dismissed_hints( $request['hint'] )
- ? rest_ensure_response( array( 'code' => 'success' ) )
- : new WP_Error( 'not_dismissed', esc_html__( 'The card could not be dismissed', 'jetpack' ), array( 'status' => 400 ) );
- }
-
- /**
- * Returns a list of previously dismissed hints.
- *
- * @since 7.1.0
- *
- * @return array List of dismissed hints.
- */
- protected static function get_dismissed_hints() {
- $dismissed_hints = Jetpack_Options::get_option( 'dismissed_hints' );
- return isset( $dismissed_hints ) && is_array( $dismissed_hints )
- ? $dismissed_hints
- : array();
- }
-
- /**
- * Save the hint in the list of dismissed hints.
- *
- * @since 7.1.0
- *
- * @param string $hint The hint id, which is a Jetpack module slug.
- *
- * @return bool Whether the card was added to the list and hence dismissed.
- */
- protected static function add_to_dismissed_hints( $hint ) {
- return Jetpack_Options::update_option( 'dismissed_hints', array_merge( self::get_dismissed_hints(), array( $hint ) ) );
- }
-
- /**
- * Checks that the module slug passed should be displayed.
- *
- * A feature hint will be displayed if it has not been dismissed before or if 2 or fewer other hints have been dismissed.
- *
- * @since 7.2.1
- *
- * @param string $hint The hint id, which is a Jetpack module slug.
- *
- * @return bool True if $hint should be displayed.
- */
- protected function should_display_hint( $hint ) {
- $dismissed_hints = $this->get_dismissed_hints();
- // If more than 2 hints have been dismissed, then show no more.
- if ( 2 < count( $dismissed_hints ) ) {
- return false;
- }
-
- $plan = Jetpack_Plan::get();
- if ( isset( $plan['class'] ) && ( 'free' === $plan['class'] || 'personal' === $plan['class'] ) && 'vaultpress' === $hint ) {
- return false;
- }
-
- return ! in_array( $hint, $dismissed_hints, true );
- }
-
- public function load_plugins_search_script() {
- wp_enqueue_script( self::$slug, plugins_url( 'modules/plugin-search/plugin-search.js', JETPACK__PLUGIN_FILE ), array( 'jquery' ), JETPACK__VERSION, true );
- wp_localize_script(
- self::$slug,
- 'jetpackPluginSearch',
- array(
- 'nonce' => wp_create_nonce( 'wp_rest' ),
- 'base_rest_url' => rest_url( '/jetpack/v4' ),
- 'poweredBy' => esc_html__( 'by Jetpack (installed)', 'jetpack' ),
- 'manageSettings' => esc_html__( 'Configure', 'jetpack' ),
- 'activateModule' => esc_html__( 'Activate Module', 'jetpack' ),
- 'getStarted' => esc_html__( 'Get started', 'jetpack' ),
- 'activated' => esc_html__( 'Activated', 'jetpack' ),
- 'activating' => esc_html__( 'Activating', 'jetpack' ),
- 'logo' => 'https://ps.w.org/jetpack/assets/icon.svg?rev=1791404',
- 'legend' => esc_html__(
- 'This suggestion was made by Jetpack, the security and performance plugin already installed on your site.',
- 'jetpack'
- ),
- 'supportText' => esc_html__(
- 'Learn more about these suggestions.',
- 'jetpack'
- ),
- 'supportLink' => 'https://jetpack.com/redirect/?source=plugin-hint-learn-support',
- 'hideText' => esc_html__( 'Hide this suggestion', 'jetpack' ),
- )
- );
-
- wp_enqueue_style( self::$slug, plugins_url( 'modules/plugin-search/plugin-search.css', JETPACK__PLUGIN_FILE ) );
- }
-
- /**
- * Get the plugin repo's data for Jetpack to populate the fields with.
- *
- * @return array|mixed|object|WP_Error
- */
- public static function get_jetpack_plugin_data() {
- $data = get_transient( 'jetpack_plugin_data' );
-
- if ( false === $data || is_wp_error( $data ) ) {
- include_once( ABSPATH . 'wp-admin/includes/plugin-install.php' );
- $data = plugins_api( 'plugin_information', array(
- 'slug' => 'jetpack',
- 'is_ssl' => is_ssl(),
- 'fields' => array(
- 'banners' => true,
- 'reviews' => true,
- 'active_installs' => true,
- 'versions' => false,
- 'sections' => false,
- ),
- ) );
- set_transient( 'jetpack_plugin_data', $data, DAY_IN_SECONDS );
- }
-
- return $data;
- }
-
- /**
- * Create a list with additional features for those we don't have a module, like Akismet.
- *
- * @since 7.1.0
- *
- * @return array List of features.
- */
- public function get_extra_features() {
- return array(
- 'akismet' => array(
- 'name' => 'Akismet',
- 'search_terms' => 'akismet, anti-spam, antispam, comments, spam, spam protection, form spam, captcha, no captcha, nocaptcha, recaptcha, phising, google',
- 'short_description' => esc_html__( 'Keep your visitors and search engines happy by stopping comment and contact form spam with Akismet.', 'jetpack' ),
- 'requires_connection' => true,
- 'module' => 'akismet',
- 'sort' => '16',
- 'learn_more_button' => 'https://jetpack.com/features/security/spam-filtering/',
- 'configure_url' => admin_url( 'admin.php?page=akismet-key-config' ),
- ),
- );
- }
-
- /**
- * Intercept the plugins API response and add in an appropriate card for Jetpack
- */
- public function inject_jetpack_module_suggestion( $result, $action, $args ) {
- // Looks like a search query; it's matching time
- if ( ! empty( $args->search ) ) {
- require_once JETPACK__PLUGIN_DIR . 'class.jetpack-admin.php';
- $jetpack_modules_list = array_intersect_key(
- array_merge( $this->get_extra_features(), Jetpack_Admin::init()->get_modules() ),
- array_flip( array(
- 'contact-form',
- 'lazy-images',
- 'monitor',
- 'photon',
- 'photon-cdn',
- 'protect',
- 'publicize',
- 'related-posts',
- 'sharedaddy',
- 'akismet',
- 'vaultpress',
- 'videopress',
- 'search',
- ) )
- );
- uasort( $jetpack_modules_list, array( $this, 'by_sorting_option' ) );
-
- // Record event when user searches for a term over 3 chars (less than 3 is not very useful.)
- if ( strlen( $args->search ) >= 3 ) {
- JetpackTracking::record_user_event( 'wpa_plugin_search_term', array( 'search_term' => $args->search ) );
- }
-
- // Lowercase, trim, remove punctuation/special chars, decode url, remove 'jetpack'
- $normalized_term = $this->sanitize_search_term( $args->search );
-
- $matching_module = null;
-
- // Try to match a passed search term with module's search terms
- foreach ( $jetpack_modules_list as $module_slug => $module_opts ) {
- /*
- * Does the site's current plan support the feature?
- * We don't use Jetpack_Plan::supports() here because
- * that check always returns Akismet as supported,
- * since Akismet has a free version.
- */
- $current_plan = Jetpack_Plan::get();
- $is_supported_by_plan = in_array( $module_slug, $current_plan['supports'], true );
-
- if (
- false !== stripos( $module_opts['search_terms'] . ', ' . $module_opts['name'], $normalized_term )
- && $is_supported_by_plan
- ) {
- $matching_module = $module_slug;
- break;
- }
- }
-
- if ( isset( $matching_module ) && $this->should_display_hint( $matching_module ) ) {
- // Record event when a matching feature is found
- JetpackTracking::record_user_event( 'wpa_plugin_search_match_found', array( 'feature' => $matching_module ) );
-
- $inject = (array) self::get_jetpack_plugin_data();
- $image_url = plugins_url( 'modules/plugin-search/psh', JETPACK__PLUGIN_FILE );
- $overrides = array(
- 'plugin-search' => true, // Helps to determine if that an injected card.
- 'name' => sprintf( // Supplement name/description so that they clearly indicate this was added.
- esc_html_x( 'Jetpack: %s', 'Jetpack: Module Name', 'jetpack' ),
- $jetpack_modules_list[ $matching_module ]['name']
- ),
- 'short_description' => $jetpack_modules_list[ $matching_module ]['short_description'],
- 'requires_connection' => (bool) $jetpack_modules_list[ $matching_module ]['requires_connection'],
- 'slug' => self::$slug,
- 'version' => JETPACK__VERSION,
- 'icons' => array(
- '1x' => "$image_url-128.png",
- '2x' => "$image_url-256.png",
- 'svg' => "$image_url.svg",
- ),
- );
-
- // Splice in the base module data
- $inject = array_merge( $inject, $jetpack_modules_list[ $matching_module ], $overrides );
-
- // Add it to the top of the list
- $result->plugins = array_filter( $result->plugins, array( $this, 'filter_cards' ) );
- array_unshift( $result->plugins, $inject );
- }
- }
- return $result;
- }
-
- /**
- * Remove cards for Jetpack plugins since we don't want duplicates.
- *
- * @since 7.1.0
- * @since 7.2.0 Only remove Jetpack.
- *
- * @param array|object $plugin
- *
- * @return bool
- */
- function filter_cards( $plugin ) {
- // Take in account that before WordPress 5.1, the list of plugins is an array of objects.
- // With WordPress 5.1 the list of plugins is an array of arrays.
- $slug = is_array( $plugin ) ? $plugin['slug'] : $plugin->slug;
- return ! in_array( $slug, array( 'jetpack' ), true );
- }
-
- /**
- * Take a raw search query and return something a bit more standardized and
- * easy to work with.
- *
- * @param String $term The raw search term
- * @return String A simplified/sanitized version.
- */
- private function sanitize_search_term( $term ) {
- $term = strtolower( urldecode( $term ) );
-
- // remove non-alpha/space chars.
- $term = preg_replace( '/[^a-z ]/', '', $term );
-
- // remove strings that don't help matches.
- $term = trim( str_replace( array( 'jetpack', 'jp', 'free', 'wordpress' ), '', $term ) );
-
- return $term;
- }
-
- /**
- * Callback function to sort the array of modules by the sort option.
- */
- private function by_sorting_option( $m1, $m2 ) {
- return $m1['sort'] - $m2['sort'];
- }
-
- /**
- * Builds a URL to purchase and upgrade inserting the site fragment and the affiliate code if it exists.
- *
- * @param string $feature Module slug (or forged one for extra features).
- *
- * @since 7.1.0
- *
- * @return string URL to upgrade.
- */
- private function get_upgrade_url( $feature ) {
- $site_raw_url = Jetpack::build_raw_urls( get_home_url() );
- $affiliateCode = Jetpack_Affiliate::init()->get_affiliate_code();
- $user = wp_get_current_user()->ID;
- return "https://jetpack.com/redirect/?source=plugin-hint-upgrade-$feature&site=$site_raw_url&u=$user" .
- ( $affiliateCode ? "&aff=$affiliateCode" : '' );
- }
-
- /**
- * Modify the URL to the feature settings, for example Publicize.
- * Sharing is included here because while we still have a page in WP Admin,
- * we prefer to send users to Calypso.
- *
- * @param string $feature
- * @param string $configure_url
- *
- * @return string
- * @since 7.1.0
- *
- */
- private function get_configure_url( $feature, $configure_url ) {
- $siteFragment = Jetpack::build_raw_urls( get_home_url() );
- switch ( $feature ) {
- case 'sharing':
- case 'publicize':
- $configure_url = "https://wordpress.com/sharing/$siteFragment";
- break;
- case 'seo-tools':
- $configure_url = "https://wordpress.com/settings/traffic/$siteFragment#seo";
- break;
- case 'google-analytics':
- $configure_url = "https://wordpress.com/settings/traffic/$siteFragment#analytics";
- break;
- case 'wordads':
- $configure_url = "https://wordpress.com/ads/settings/$siteFragment";
- break;
- }
- return $configure_url;
- }
-
- /**
- * Put some more appropriate links on our custom result cards.
- */
- public function insert_module_related_links( $links, $plugin ) {
- if ( self::$slug !== $plugin['slug'] ) {
- return $links;
- }
-
- // By the time this filter is applied, self_admin_url was already applied and we don't need it anymore.
- remove_filter( 'self_admin_url', array( $this, 'plugin_details' ) );
-
- $links = array();
-
- if ( 'akismet' === $plugin['module'] || 'vaultpress' === $plugin['module'] ) {
- $links['jp_get_started'] = '<a
- id="plugin-select-settings"
- class="jetpack-plugin-search__primary jetpack-plugin-search__get-started button"
- href="https://jetpack.com/redirect/?source=plugin-hint-learn-' . $plugin['module'] . '"
- data-module="' . esc_attr( $plugin['module'] ) . '"
- data-track="get_started"
- >' . esc_html__( 'Get started', 'jetpack' ) . '</a>';
- // Jetpack installed, active, feature not enabled; prompt to enable.
- } elseif (
- current_user_can( 'jetpack_activate_modules' ) &&
- ! Jetpack::is_module_active( $plugin['module'] ) &&
- Jetpack_Plan::supports( $plugin['module'] )
- ) {
- $links[] = '<button
- id="plugin-select-activate"
- class="jetpack-plugin-search__primary button"
- data-module="' . esc_attr( $plugin['module'] ) . '"
- data-configure-url="' . esc_url( $this->get_configure_url( $plugin['module'], $plugin['configure_url'] ) ) . '"
- > ' . esc_html__( 'Enable', 'jetpack' ) . '</button>';
-
- // Jetpack installed, active, feature enabled; link to settings.
- } elseif (
- ! empty( $plugin['configure_url'] ) &&
- current_user_can( 'jetpack_configure_modules' ) &&
- Jetpack::is_module_active( $plugin['module'] ) &&
- /** This filter is documented in class.jetpack-admin.php */
- apply_filters( 'jetpack_module_configurable_' . $plugin['module'], false )
- ) {
- $links[] = '<a
- id="plugin-select-settings"
- class="jetpack-plugin-search__primary button jetpack-plugin-search__configure"
- href="' . esc_url( $this->get_configure_url( $plugin['module'], $plugin['configure_url'] ) ) . '"
- data-module="' . esc_attr( $plugin['module'] ) . '"
- data-track="configure"
- >' . esc_html__( 'Configure', 'jetpack' ) . '</a>';
- // Module is active, doesn't have options to configure
- } elseif ( Jetpack::is_module_active( $plugin['module'] ) ) {
- $links['jp_get_started'] = '<a
- id="plugin-select-settings"
- class="jetpack-plugin-search__primary jetpack-plugin-search__get-started button"
- href="https://jetpack.com/redirect/?source=plugin-hint-learn-' . $plugin['module'] . '"
- data-module="' . esc_attr( $plugin['module'] ) . '"
- data-track="get_started"
- >' . esc_html__( 'Get started', 'jetpack' ) . '</a>';
- }
-
- // Add link pointing to a relevant doc page in jetpack.com only if the Get started button isn't displayed.
- if ( ! empty( $plugin['learn_more_button'] ) && ! isset( $links['jp_get_started'] ) ) {
- $links[] = '<a
- class="jetpack-plugin-search__learn-more"
- href="' . esc_url( $plugin['learn_more_button'] ) . '"
- target="_blank"
- data-module="' . esc_attr( $plugin['module'] ) . '"
- data-track="learn_more"
- >' . esc_html__( 'Learn more', 'jetpack' ) . '</a>';
- }
-
- // Dismiss link
- $links[] = '<a
- class="jetpack-plugin-search__dismiss"
- data-module="' . esc_attr( $plugin['module'] ) . '"
- >' . esc_html__( 'Hide this suggestion', 'jetpack' ) . '</a>';
-
- return $links;
- }
-
-}
-
-/**
- * Master control that checks if Plugin search hints is active.
- *
- * @since 7.1.1
- *
- * @return bool True if PSH is active.
- */
-function jetpack_is_psh_active() {
- // false means unset, 1 means active, 0 means inactive.
- $status = get_transient( 'jetpack_psh_status' );
-
- if ( false === $status ) {
- $error = false;
- $status = jetpack_get_remote_is_psh_active( $error );
- set_transient(
- 'jetpack_psh_status',
- // Cache as int
- (int) $status,
- // If there was an error, still cache but for a shorter time
- ( $error ? 5 : 15 ) * MINUTE_IN_SECONDS
- );
- }
-
- return (bool) $status;
-}
-
-/**
- * Makes remote request to determine if Plugin search hints is active.
- *
- * @since 7.1.1
- * @internal
- *
- * @param bool &$error Did the remote request result in an error?
- * @return bool True if PSH is active.
- */
-function jetpack_get_remote_is_psh_active( &$error ) {
- $response = wp_remote_get( 'https://jetpack.com/psh-status/' );
- if ( is_wp_error( $response ) ) {
- $error = true;
- return true;
- }
-
- $body = wp_remote_retrieve_body( $response );
- if ( empty( $body ) ) {
- $error = true;
- return true;
- }
-
- $json = json_decode( $body );
- if ( ! isset( $json->active ) ) {
- $error = true;
- return true;
- }
-
- $error = false;
- return (bool) $json->active;
-}
diff --git a/plugins/jetpack/modules/plugin-search/plugin-search.css b/plugins/jetpack/modules/plugin-search/plugin-search.css
deleted file mode 100644
index 8623d3f4..00000000
--- a/plugins/jetpack/modules/plugin-search/plugin-search.css
+++ /dev/null
@@ -1,84 +0,0 @@
-.plugin-card-jetpack-plugin-search h3 {
- margin: 0 0 4px 0;
-}
-
-.plugin-card-jetpack-plugin-search .column-name,
-.plugin-card-jetpack-plugin-search .column-description {
- margin-right: 20px;
-}
-
-.plugin-card-jetpack-plugin-search .action-links {
- overflow: auto;
- position: static;
-}
-
-@media screen and (max-width: 1100px) and (min-width: 782px), (max-width: 480px) {
- .plugin-card-jetpack-plugin-search .action-links {
- margin-left: 0;
- }
-}
-
-.plugin-card-jetpack-plugin-search .plugin-action-buttons {
- margin: 0;
- width: 100%;
- text-align: left;
- white-space: nowrap;
-}
-
-.plugin-card-jetpack-plugin-search .plugin-action-buttons .jetpack-plugin-search__primary {
- background: #00be28;
- border-color: #00a523;
- color: #fff;
- box-shadow: 0 1px 0 #c5e2c3;
-}
-
-.plugin-card-jetpack-plugin-search .plugin-action-buttons .jetpack-plugin-search__primary:hover {
- background: #00a523;
- border-color: #008b1d;
- color: #fff;
-}
-
-.plugin-card-jetpack-plugin-search .plugin-card-bottom {
- display: none;
-}
-
-.jetpack-plugin-search__bottom {
- display: flex;
- align-items: center;
- align-content: space-between;
- clear: both;
- padding: 12px 20px;
- background-color: #fafafa;
- border-top: 1px solid #ddd;
- overflow: hidden;
-}
-
-.jetpack-plugin-search__text {
- flex: 1;
- margin: 0 24px 0 16px;
-}
-
-@media screen and (max-width: 1100px) and (min-width: 782px), (max-width: 480px) {
- .plugin-card-jetpack-plugin-search .plugin-action-buttons li {
- display: block;
- }
- .plugin-card-jetpack-plugin-search .plugin-action-buttons li button {
- margin-right: 0;
- }
-}
-
-/* Hides the link to dismiss cards when it's in action links are before being moved to bottom row*/
-.action-links .jetpack-plugin-search__dismiss {
- display: none;
-}
-
-.jetpack-plugin-search__bottom .jetpack-plugin-search__dismiss {
- color: #484848;
- font-style: italic;
- text-decoration: underline;
- cursor: pointer;
-}
-
-.jetpack-plugin-search__dismiss:hover {
- color: #666;
-}
diff --git a/plugins/jetpack/modules/plugin-search/plugin-search.js b/plugins/jetpack/modules/plugin-search/plugin-search.js
deleted file mode 100644
index b277a5aa..00000000
--- a/plugins/jetpack/modules/plugin-search/plugin-search.js
+++ /dev/null
@@ -1,264 +0,0 @@
-/**
- * Handles the activation of a Jetpack feature, dismissing the card, and replacing the bottom row
- * of the card with customized content.
- */
-
-/* global jetpackPluginSearch, JSON, jpTracksAJAX */
-
-var JetpackPSH = {};
-
-( function( $, jpsh ) {
- JetpackPSH = {
-
- $pluginFilter: $( '#plugin-filter' ),
-
- /**
- * Get parent search hint element.
- * @returns {Element | null}
- */
- getCard: function() {
- return document.querySelector( '.plugin-card-jetpack-plugin-search' );
- },
-
- /**
- * Track user event such as a click on a button or a link.
- *
- * @param {string} eventName Event identifier.
- * @param {object} feature Identifier of feature involved in the event.
- * @param {object} target Object where action was performed.
- */
- trackEvent: function( eventName, feature, target ) {
- jpTracksAJAX
- .record_ajax_event( eventName, 'click', { 'feature' : feature } )
- .always( function() {
- if ( 'undefined' !== typeof target && !! target.getAttribute( 'href' ) ) {
- // If it has an href, follow it.
- window.location = target.getAttribute( 'href' );
- }
- } );
- },
-
- /**
- * Update title of the card to add a mention that the result is from the Jetpack plugin.
- */
- updateCardTitle: function() {
- var hint = JetpackPSH.getCard();
-
- if ( 'object' === typeof hint && null !== hint ) {
- var title = hint.querySelector( '.column-name h3' );
- title.outerHTML =
- title.outerHTML + '<strong>' + jetpackPluginSearch.poweredBy + '</strong>';
- }
- },
-
- /**
- * Move action links below description.
- */
- moveActionLinks: function() {
- var hint = JetpackPSH.getCard();
- if ( 'object' === typeof hint && null !== hint ) {
- var descriptionContainer = hint.querySelector( '.column-description' );
- // Keep only the first paragraph. The second is the plugin author.
- var descriptionText = descriptionContainer.querySelector( 'p:first-child' );
- var actionLinks = hint.querySelector( '.action-links' );
-
- // Change the contents of the description, to keep the description text and the action links.
- descriptionContainer.innerHTML = descriptionText.outerHTML + actionLinks.outerHTML;
-
- // Remove the action links from their default location.
- actionLinks.parentNode.removeChild( actionLinks );
- }
- },
-
- /**
- * Replace bottom row of the card to insert logo, text and link to dismiss the card.
- */
- replaceCardBottom: function() {
- var hint = JetpackPSH.getCard();
- if ( 'object' === typeof hint && null !== hint ) {
- hint.querySelector( '.plugin-card-bottom' ).outerHTML =
- '<div class="jetpack-plugin-search__bottom"><img src="' +
- jetpackPluginSearch.logo +
- '" width="32" />' +
- '<p class="jetpack-plugin-search__text">' +
- jetpackPluginSearch.legend +
- ' <a class="jetpack-plugin-search__support_link" href="' +
- jetpackPluginSearch.supportLink +
- '" target="_blank" rel="noopener noreferrer" data-track="support_link" >' +
- jetpackPluginSearch.supportText +
- '</a>' +
- '</p>' +
- '</div>';
-
- // Remove link and parent li from action links and move it to bottom row
- var dismissLink = document.querySelector( '.jetpack-plugin-search__dismiss' );
- dismissLink.parentNode.parentNode.removeChild( dismissLink.parentNode );
- document
- .querySelector( '.jetpack-plugin-search__bottom' )
- .appendChild( dismissLink );
- }
- },
-
- /**
- * Check if plugin card list nodes changed. If there's a Jetpack PSH card, replace the title and the bottom row.
- * @param {array} mutationsList
- */
- replaceOnNewResults: function( mutationsList ) {
- mutationsList.forEach( function( mutation ) {
- if (
- 'childList' === mutation.type &&
- 1 === document.querySelectorAll( '.plugin-card-jetpack-plugin-search' ).length
- ) {
- JetpackPSH.updateCardTitle();
- JetpackPSH.moveActionLinks();
- JetpackPSH.replaceCardBottom();
- }
- } );
- },
-
- dismiss: function( moduleName ) {
- document.getElementById( 'the-list' ).removeChild( JetpackPSH.getCard() );
- $.ajax( {
- url: jpsh.base_rest_url + '/hints',
- method: 'post',
- beforeSend: function( xhr ) {
- xhr.setRequestHeader( 'X-WP-Nonce', jpsh.nonce );
- },
- data: JSON.stringify( {
- hint: moduleName
- } ),
- contentType: 'application/json',
- dataType: 'json'
- } ).done( function() {
- JetpackPSH.trackEvent( 'wpa_plugin_search_dismiss', moduleName );
- } );
- },
-
- ajaxActivateModule: function( moduleName ) {
- var $moduleBtn = JetpackPSH.$pluginFilter.find( '#plugin-select-activate' );
- $moduleBtn.toggleClass( 'install-now updating-message' );
- $moduleBtn.prop( 'disabled', true );
- $moduleBtn.text( jpsh.activating );
- var data = {};
- data[ moduleName ] = true;
- $.ajax( {
- url: jpsh.base_rest_url + '/settings',
- method: 'post',
- beforeSend: function( xhr ) {
- xhr.setRequestHeader( 'X-WP-Nonce', jpsh.nonce );
- },
- data: JSON.stringify( data ),
- contentType: 'application/json',
- dataType: 'json'
- } ).done( function() {
- JetpackPSH.updateButton( moduleName );
- JetpackPSH.trackEvent( 'wpa_plugin_search_activate', moduleName );
- } ).error( function() {
- $moduleBtn.toggleClass( 'install-now updating-message' );
- } );
- },
-
- // Remove onclick handler, disable loading spinner, update button to redirect to module settings.
- updateButton: function( moduleName ) {
- $.ajax( {
- url: jpsh.base_rest_url + '/module/' + moduleName,
- method: 'get',
- beforeSend: function( xhr ) {
- xhr.setRequestHeader( 'X-WP-Nonce', jpsh.nonce );
- },
- dataType: 'json'
- } ).done( function( response ) {
- var $moduleBtn = JetpackPSH.$pluginFilter.find( '#plugin-select-activate' );
- $moduleBtn.prop( 'onclick', null ).off( 'click' );
- $moduleBtn.toggleClass( 'install-now updating-message' );
- $moduleBtn.text( jpsh.activated );
- setTimeout( function() {
- var url = 'https://jetpack.com/redirect/?source=plugin-hint-learn-' + moduleName,
- label = jpsh.getStarted,
- classes = 'jetpack-plugin-search__primary button',
- track = 'configure';
-
- // If the feature has options in Jetpack admin UI, link to them.
- if ( response.options && 0 < Object.keys( response.options ).length ) {
- url = $moduleBtn.data( 'configure-url' );
- label = jpsh.manageSettings;
- classes += ' jetpack-plugin-search__configure';
- } else {
- // If it has no options, the Get started button will be displayed so remove the Learn more link if it's there.
- var learnMore = document.querySelector( '.jetpack-plugin-search__learn-more' );
- learnMore.parentNode.removeChild( learnMore );
- classes += ' jetpack-plugin-search__get-started';
- track = 'get_started';
- }
- $moduleBtn.replaceWith(
- '<a id="plugin-select-settings" class="' + classes + '" href="' + url + '" data-module="' + moduleName + '" data-track="' + track + '">' + label + '</a>'
- );
- }, 1000 );
-
- } );
- },
-
- /**
- * Start suggesting.
- */
- init: function() {
- if ( JetpackPSH.$pluginFilter.length < 1 ) {
- return;
- }
-
- // Update title to show that the suggestion is from Jetpack.
- JetpackPSH.updateCardTitle();
-
- // Update the description and action links.
- JetpackPSH.moveActionLinks();
-
- // Replace PSH bottom row on page load
- JetpackPSH.replaceCardBottom();
-
- // Listen for changes in plugin search results
- var resultsObserver = new MutationObserver( JetpackPSH.replaceOnNewResults );
- resultsObserver.observe( document.getElementById( 'plugin-filter' ), { childList: true } );
-
- JetpackPSH.$pluginFilter
- .on( 'click', '.jetpack-plugin-search__dismiss', function( event ) {
- event.preventDefault();
- JetpackPSH.dismiss( $( this ).data( 'module' ) );
- } )
- .on( 'click', 'button#plugin-select-activate', function( event ) {
- event.preventDefault();
- JetpackPSH.ajaxActivateModule( $( this ).data( 'module' ) );
- } )
- .on( 'click', '.jetpack-plugin-search__primary', function( event ) {
- event.preventDefault();
- var $this = $( this );
- if ( $this.data( 'track' ) ) {
- // This catches Purchase, Configure, and Get started. Feature activation is tracked when it ends successfully, in its callback.
- JetpackPSH.trackEvent( 'wpa_plugin_search_' + $this.data( 'track' ), $this.data( 'module' ), $this.get(0) );
- }
- } )
- .on( 'click', '.jetpack-plugin-search__learn-more', function( event ) {
- event.preventDefault();
- var $this = $( this );
-
- JetpackPSH.trackEvent(
- 'wpa_plugin_search_learn_more',
- $this.data( 'module' ),
- $this.get( 0 )
- );
- } )
- .on( 'click', '.jetpack-plugin-search__support_link', function( event ) {
- event.preventDefault();
- var $this = $( this );
- JetpackPSH.trackEvent(
- 'wpa_plugin_search_support_link',
- $this.data( 'module' ),
- $this.get( 0 )
- );
- } );
- }
-
- };
-
- JetpackPSH.init();
-
-} )( jQuery, jetpackPluginSearch );
diff --git a/plugins/jetpack/modules/plugin-search/psh-128.png b/plugins/jetpack/modules/plugin-search/psh-128.png
deleted file mode 100644
index 20c74c4c..00000000
--- a/plugins/jetpack/modules/plugin-search/psh-128.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/plugin-search/psh-256.png b/plugins/jetpack/modules/plugin-search/psh-256.png
deleted file mode 100644
index 2dfc2207..00000000
--- a/plugins/jetpack/modules/plugin-search/psh-256.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/plugin-search/psh.svg b/plugins/jetpack/modules/plugin-search/psh.svg
deleted file mode 100644
index 5b2609ef..00000000
--- a/plugins/jetpack/modules/plugin-search/psh.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg viewBox="0 0 183 104" xmlns="http://www.w3.org/2000/svg"><path d="m.3 99.6c11-.6 22.1-.7 33.1-.8l16.6-.1h16.6l33.1.2c11 .1 22.1.2 33.1.6.2 0 .4.2.4.4s-.2.4-.4.4c-11 .4-22.1.5-33.1.6l-33.1.2h-16.6l-16.6-.1c-11-.1-22.1-.3-33.1-.8-.1 0-.2-.1-.2-.2 0-.3.1-.4.2-.4zm152.5 0c2.5-.5 5-.7 7.5-.8l3.7-.1h3.7c2.5 0 5 .1 7.5.2s5 .2 7.5.6c.2 0 .4.2.4.5 0 .2-.2.3-.4.4-2.5.4-5 .5-7.5.6s-5 .1-7.5.2h-3.7l-3.7-.1c-2.5-.1-5-.3-7.5-.8-.1 0-.2-.1-.2-.2 0-.4.1-.5.2-.5z" fill="#e3eaf0"/><path d="m46.1 82.8v-57.8h70.1v57.8h-66.3" fill="#d8dee4"/><path d="m46.1 24.7v-13.6h98.2v13.5h-92.8" fill="#BBC9D5"/><path d="m144.3 25.2.9 57.3-28.9.1v-57.4z" fill="#ccced0"/><path d="m102.5 82.7h-48.2v-32.1h53.1v32.1m0-35.7h-53.1v-13.2h53.1z" fill="#fff"/><path d="m96.1 41.6c-.7.2-1.4.5-2.1.8-.6.4-1.3.7-1.9 1.1-.4.3-.9.6-1.4.9.4-.5.9-1.1 1.3-1.6.5-.6 1-1.3 1.4-2 .5-.7.9-1.4 1.2-2.2 0-.1 0-.1-.1-.1h-.1c-.7.5-1.3 1.1-1.8 1.7s-1 1.3-1.5 1.9c-.4.6-.9 1.2-1.3 1.9.2-.7.5-1.4.7-2.2l.6-2.4c.2-.8.3-1.6.3-2.5v-.1h-.1c-.4.7-.8 1.5-1 2.2-.3.8-.5 1.6-.7 2.3-.2.6-.3 1.2-.4 1.8 0-.7-.1-1.5-.1-2.2-.1-.9-.2-1.7-.3-2.6s-.3-1.7-.5-2.6c0-.1-.1-.2-.2-.1-.1 0-.1.1-.1.2-.1.9-.1 1.8-.1 2.6 0 .9.1 1.7.1 2.6.1.9.1 1.7.2 2.6-.2-.5-.5-1.1-.8-1.6-.3-.6-.7-1.3-1-1.9l-1.2-1.8c-.1-.1-.2-.1-.3 0-.1 0-.1.1-.1.2.2.7.4 1.4.7 2.1s.6 1.3.9 2c.2.3.3.6.5.9-.5-.5-1-1.1-1.5-1.6-.7-.6-1.3-1.3-2-1.9s-1.4-1.2-2.2-1.7c-.1-.1-.2 0-.3.1v.2c.5.8 1.1 1.5 1.7 2.1.6.7 1.3 1.3 1.9 2 .6.6 1.3 1.3 2 1.9l.1.1c-.4-.2-.8-.4-1.2-.5-.6-.2-1.2-.5-1.9-.7-.6-.2-1.3-.4-1.9-.5-.1 0-.2.1-.2.2s0 .1.1.2c.5.4 1.1.7 1.7 1s1.2.6 1.8.8c.6.3 1.2.5 1.9.7.6.2 1.2.3 1.9.4h.3c.7-.3 1.4-.6 2-.9.6-.4 1.3-.7 1.9-1.1l1.8-1.2c.6-.4 1.2-.9 1.7-1.5v-.1c-.3.1-.4.1-.4.1z" fill="#ccced0"/><path d="m147.6 24.9c-8.7.9-17.4.9-26.1 1l-26.1.3h-26.1c-8.7 0-17.4.1-26.1-.7v-.5c8.7-.9 17.4-.9 26.1-1l26.1-.3h26.1c8.7 0 17.4-.1 26.1.7z" fill="#46799A"/><path d="m77.3 70c-1.1.6-2.1 1.3-2.9 2.2l.3-1.1c.4-1.7 1-3.4 1.6-5.1l-.3-.2c-.6.7-1.1 1.5-1.4 2.4-.4.9-.7 1.7-.9 2.6s-.4 1.8-.5 2.8v.8c-.2.6-.3 1.4-.1 2h.2l.1-.1v.1h.2c.1-.5.3-.9.4-1.4.1-.1.1-.2.2-.3.3-.5.7-1 1-1.5.4-.5.8-.9 1.3-1.4s.9-.9 1.3-1.5c-.2 0-.5-.3-.5-.3zm24.6-10.4c-.5-.9-1.3-2-2.8-2.5-.6-.2-1.3-.3-2-.3.3-.4.6-.7.9-1.1l-.3-.3c-.6.5-1.1 1-1.7 1.5-.5.1-1 .3-1.4.5-.2-1-.6-2.3-1.8-3.3-.8-.7-1.9-1.1-2.9-1.2-1.1-.1-2.1.7-2.3 1.8 0 .3 0 .5.1.8.3 1.1.9 2 1.8 2.7 1 .8 2.3 1.3 3.6 1.3.3 0 .6 0 .9-.1-1 1.5-1.8 3.1-2.5 4.8l-.1.1c-.2-1-.7-2.8-2.5-3.8-1.1-.6-2.3-.9-3.6-.7-1 .1-1.7 1-1.6 2.1 0 .1 0 .3.1.4.4 1.2 1.2 2.2 2.3 2.9 1.4.8 3 1 4.5.5 0 .1.1.2.2.3-.5 1.7-.8 3.4-1 5.1-.2-.6-1.4-2.8-3.9-3.3-1.2-.2-2.5 0-3.6.5-.9.5-1.3 1.6-.8 2.5.1.1.1.2.2.3.8 1 1.9 1.7 3.2 1.9.3.1.7.1 1.1.1 1.2 0 2.3-.4 3.3-1l-.1.2.2.3c.1.2.2.3.3.5-.1 1.5 0 3.1.2 4.6h.2c.2-1.3.3-2.5.4-3.8.9.8 2.1 1.2 3.4 1.2 1.2 0 2.3-.4 3.3-1 .5-.3.8-.8.8-1.4s-.2-1.1-.6-1.5c-.7-.7-1.9-1.5-3.5-1.5-1.1 0-2.1.3-3 .9.2-1.2.4-2.4.8-3.6.9.8 2 1.3 3.1 1.4h.5c1 0 2-.3 2.9-.8.5-.3.8-.8.9-1.3.1-.6-.1-1.1-.5-1.5-.7-.7-1.8-1.6-3.3-1.7-.8-.1-1.7.1-2.5.4.4-1 .9-2 1.5-3 .1-.1.1-.2.2-.4.6.9 1.6 1.7 2.7 2 .6.2 1.2.3 1.8.3s1.1-.1 1.6-.2c.5-.2 1-.6 1.2-1.1.5-.4.4-1 .1-1.5zm-15.2 4.9c-.9-.5-1.5-1.3-1.9-2.3-.1-.4.1-.9.5-1.1h.8c.8 0 1.6.2 2.3.6 1.5.9 1.9 2.6 2 3.3-1.2.3-2.6.1-3.7-.5zm-1.5 7.7c-1-.2-1.9-.7-2.6-1.6-.3-.4-.2-.9.1-1.2l.1-.1c.7-.3 1.4-.5 2.2-.5.3 0 .5 0 .8.1 1.7.3 2.7 1.8 3 2.5-.9.8-2.3 1.1-3.6.8zm8.8-1.3c1.3 0 2.2.6 2.8 1.2.3.3.4.9 0 1.2 0 0-.1.1-.2.1-.7.6-1.6.9-2.6.9-1.6 0-2.6-.8-3.2-1.5 0-.2.1-.4.1-.6.6-.5 1.7-1.3 3.1-1.3zm1.4-6.6c1.2.1 2.2.8 2.7 1.4.2.2.2.4.2.7s-.2.5-.4.6c-.9.5-1.9.7-2.9.6-1.1-.1-2.2-.7-2.9-1.5v-.1c.1-.3.2-.7.3-1 .9-.5 1.9-.8 3-.7zm-1.7-5.6c-1.3.2-2.6-.2-3.6-1-.7-.6-1.2-1.3-1.4-2.2-.2-.6.2-1.2.7-1.3h.4c.9.1 1.7.4 2.4 1 1.4 1 1.5 2.7 1.5 3.5zm7.4 2.1c-.1.2-.3.4-.6.5-.9.3-1.9.3-2.9-.1-1-.3-1.9-1.1-2.4-2l.9-1.2c.9-.2 1.8-.2 2.6.1 1.2.4 1.9 1.3 2.3 2 .2.2.2.5.1.7z" fill="#ccced0"/><path d="m178.2 57.1c-.1-.5-.5-.9-1-.9-2.1 0-4.2-.2-6.3-.5s-4.2-.8-6.2-1.5-3.9-1.6-5.7-2.7-3.3-2.5-4.6-4.1l-.1-.1c-.4-.3-1-.3-1.3.1-1.2 1.4-2.8 2.8-4.3 4-1.6 1.2-3.3 2.2-5.1 3s-3.7 1.4-5.6 1.8-3.9.5-5.9.3c-.4 0-.7.3-.8.6-.7 4.8-.9 9.5-.6 14.3.3 4.7 1.2 9.5 2.9 13.9 1.7 4.5 4.3 8.6 7.8 11.9s7.8 5.5 12.4 6.7h.1c2.5-.1 4.9-.8 7.1-1.8s4.4-2.3 6.2-4c3.8-3.2 6.7-7.4 8.6-12 2-4.6 2.8-9.5 3.1-14.4s0-9.8-.7-14.6z" fill="#00be28"/><path d="m145.3 78.3 7.4 5.9 15.1-17.2" fill="#00be28"/><path d="m168.1 66.9c-.1-.1-.3-.2-.5-.1-1.5 1.2-2.9 2.6-4.2 3.9l-3.9 4.2c-2.3 2.6-4.6 5.1-6.9 7.7-1-.8-1.9-1.5-2.9-2.3l-1.9-1.5c-.7-.5-1.2-1.1-2.1-1.2h-.4c-.4.2-.6.6-.4 1 .3.9 1 1.2 1.6 1.8l1.8 1.5c1.2 1 2.4 2 3.7 3 .5.4 1.1.3 1.5-.1 2.5-2.9 5-5.7 7.5-8.6 1.2-1.5 2.5-2.9 3.7-4.4s2.3-3 3.3-4.7c.2.1.1-.1.1-.2z" fill="#fff"/><path d="m137.2 99.7c-5-.2-10-.4-15-.5s-10-.2-15-.2c-10-.1-19.9-.1-29.9-.1l-29.9-.1h-18.7c-.7 0-1.1 0-1.6-.1s-.9-.3-1.3-.6c-.8-.6-1.3-1.4-1.5-2.4 0-.2-.1-.5-.1-.7v-1.6l52.9-.1h4.8v2.4c0 .3.2.5.5.5h24.5c.3 0 .5-.2.5-.5v-2.7c3.5 0 6.9-.1 10.4-.2 4.5-.1 9-.2 13.5-.4.1 0 .2-.1.2-.3 0-.1-.1-.2-.2-.2-4.5-.2-9-.3-13.5-.4s-9-.2-13.5-.2c-9-.1-18-.1-27-.1l-54.2-.2c-.6 0-1.2.5-1.2 1.2v2.8c0 .4 0 .8.1 1.2.5 2.3 2.2 4.2 4.5 4.8.7.2 1.6.2 2.2.2h18.7l29.9-.1c10 0 19.9 0 29.9-.1 5 0 10-.1 15-.2s10-.2 15-.5c.1 0 .2-.1.2-.3s-.1-.3-.2-.3zm16.6-99.4-25.8-.1h-85.1c-.6 0-1.2.1-1.8.3-1.2.3-2.3.9-3.3 1.7-1.9 1.6-3.1 4-3 6.5v82.5h2.2v-82.4c0-2.9 1.9-5.4 4.6-6.1.4-.1.9-.2 1.4-.2h85.1l24.9-.1.2 19.7.1 10.3.2 10.3c0 .2.2.3.4.3.1 0 .3-.1.3-.3l.2-10.3.1-10.3.2-20.6c-.1-.7-.4-1.1-.9-1.2z" fill="#ccced0"/><path d="m54.3 78.8c13.6-5.6 42.9-1.9 52.5 4.1l-52.5-.2z" fill="#6F93AD"/></svg> \ No newline at end of file
diff --git a/plugins/jetpack/modules/post-by-email.php b/plugins/jetpack/modules/post-by-email.php
deleted file mode 100644
index 0ae1ba93..00000000
--- a/plugins/jetpack/modules/post-by-email.php
+++ /dev/null
@@ -1,208 +0,0 @@
-<?php
-
-/**
- * Module Name: Post by email
- * Module Description: Publish posts by sending an email
- * First Introduced: 2.0
- * Sort Order: 14
- * Requires Connection: Yes
- * Auto Activate: Yes
- * Module Tags: Writing
- * Feature: Writing
- * Additional Search Queries: post by email, email
- */
-
-add_action( 'jetpack_modules_loaded', array( 'Jetpack_Post_By_Email', 'init' ) );
-
-Jetpack::enable_module_configurable( __FILE__ );
-Jetpack::module_configuration_load( __FILE__, array( 'Jetpack_Post_By_Email', 'configuration_redirect' ) );
-
-class Jetpack_Post_By_Email {
- public static function init() {
- static $instance = NULL;
-
- if ( !$instance ) {
- $instance = new Jetpack_Post_By_Email;
- }
-
- return $instance;
- }
-
- function __construct() {
- add_action( 'init', array( &$this, 'action_init' ) );
- }
-
- static function configuration_redirect() {
- wp_safe_redirect( get_edit_profile_url( get_current_user_id() ) . '#post-by-email' );
- exit;
- }
-
- function action_init() {
- if ( ! current_user_can( 'edit_posts' ) )
- return;
-
- add_action( 'profile_personal_options', array( &$this, 'user_profile' ) );
- add_action( 'admin_print_scripts-profile.php', array( &$this, 'profile_scripts' ) );
-
- add_action( 'wp_ajax_jetpack_post_by_email_enable', array( &$this, 'create_post_by_email_address' ) );
- add_action( 'wp_ajax_jetpack_post_by_email_regenerate', array( &$this, 'regenerate_post_by_email_address' ) );
- add_action( 'wp_ajax_jetpack_post_by_email_disable', array( &$this, 'delete_post_by_email_address' ) );
- }
-
- function profile_scripts() {
- wp_enqueue_script( 'post-by-email', plugins_url( 'post-by-email/post-by-email.js', __FILE__ ), array( 'jquery' ) );
- wp_localize_script( 'post-by-email', 'pbeVars', array(
- 'nonces' => array(
- 'enable' => wp_create_nonce( 'jetpack.createPostByEmailAddress' ),
- 'regenerate' => wp_create_nonce( 'jetpack.regeneratePostByEmailAddress' ),
- 'disable' => wp_create_nonce( 'jetpack.deletePostByEmailAddress' ),
- ),
- ));
- wp_enqueue_style( 'post-by-email', plugins_url( 'post-by-email/post-by-email.css', __FILE__ ) );
- wp_style_add_data( 'post-by-email', 'jetpack-inline', true );
- // Do we really need `admin_styles`? With the new admin UI, it's breaking some bits.
- // Jetpack::init()->admin_styles();
- }
-
- function check_user_connection() {
- $user_token = Jetpack_Data::get_access_token( get_current_user_id() );
- $is_user_connected = $user_token && !is_wp_error( $user_token );
-
- // If the user is already connected via Jetpack, then we're good
- if ( $is_user_connected )
- return true;
-
- return false;
- }
-
- function user_profile() {
- $blog_name = get_bloginfo( 'blogname' );
- if ( empty( $blog_name ) ) {
- $blog_name = home_url( '/' );
- }
-
- ?>
- <div id="post-by-email" class="jetpack-targetable">
- <h3><?php esc_html_e( 'Post by Email', 'jetpack' ); ?></h3>
- <table class="form-table">
- <tr>
- <th scope="row"><?php esc_html_e( 'Email Address', 'jetpack' ); ?><span id="jp-pbe-spinner" class="spinner"></span></th>
- <td>
- <div id="jp-pbe-error" class="jetpack-inline-error"></div> <?php
-
- if ( $this->check_user_connection() ) {
- $email = $this->get_post_by_email_address();
-
- if ( empty( $email ) ) {
- $enable_hidden = '';
- $info_hidden = ' style="display: none;"';
- } else {
- $enable_hidden = ' style="display: none;"';
- $info_hidden = '';
- } ?>
-
- <input type="button" name="jp-pbe-enable" id="jp-pbe-enable" class="button" value="<?php esc_attr_e( 'Enable Post By Email', 'jetpack' ); ?> "<?php echo $enable_hidden; ?> />
- <div id="jp-pbe-info"<?php echo $info_hidden; ?>>
- <p id="jp-pbe-email-wrapper">
- <input type="text" id="jp-pbe-email" value="<?php echo esc_attr( $email ); ?>" readonly="readonly" class="regular-text" />
- <span class="description"><a target="_blank" href="http://jetpack.com/support/post-by-email/"><?php esc_html_e( 'More information', 'jetpack' ); ?></a></span>
- </p>
- <p>
- <input type="button" name="jp-pbe-regenerate" id="jp-pbe-regenerate" class="button" value="<?php esc_attr_e( 'Regenerate Address', 'jetpack' ); ?> " />
- <input type="button" name="jp-pbe-disable" id="jp-pbe-disable" class="button" value="<?php esc_attr_e( 'Disable Post By Email', 'jetpack' ); ?> " />
- </p>
- </div> <?php
- } else {
- $jetpack = Jetpack::init(); ?>
-
- <p class="jetpack-inline-message">
- <?php printf(
- esc_html( wptexturize( __( 'To use Post By Email, you need to link your %s account to your WordPress.com account.', 'jetpack' ) ) ),
- '<strong>' . esc_html( $blog_name ) . '</strong>'
- ); ?><br />
- <?php echo esc_html( wptexturize( __( "If you don't have a WordPress.com account yet, you can sign up for free in just a few seconds.", 'jetpack' ) ) ); ?>
- </p>
- <p>
- <a href="<?php echo $jetpack->build_connect_url( false, get_edit_profile_url( get_current_user_id() ) . '#post-by-email', 'unlinked-user-pbe' ); ?>" class="button button-connector" id="wpcom-connect"><?php esc_html_e( 'Link account with WordPress.com', 'jetpack' ); ?></a>
- </p>
- <?php
- } ?>
- </td>
- </tr>
- </table>
- </div>
- <?php
- }
-
- function get_post_by_email_address() {
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client( array(
- 'user_id' => get_current_user_id(),
- ) );
- $xml->query( 'jetpack.getPostByEmailAddress' );
-
- if ( $xml->isError() )
- return NULL;
-
- $response = $xml->getResponse();
- if ( empty( $response ) )
- return NULL;
-
- return $response;
- }
-
- function create_post_by_email_address() {
- self::__process_ajax_proxy_request(
- 'jetpack.createPostByEmailAddress',
- __( 'Unable to create your Post By Email address. Please try again later.', 'jetpack' )
- );
- }
-
- function regenerate_post_by_email_address() {
- self::__process_ajax_proxy_request(
- 'jetpack.regeneratePostByEmailAddress',
- __( 'Unable to regenerate your Post By Email address. Please try again later.', 'jetpack' )
- );
- }
-
- function delete_post_by_email_address() {
- self::__process_ajax_proxy_request(
- 'jetpack.deletePostByEmailAddress',
- __( 'Unable to disable your Post By Email address. Please try again later.', 'jetpack' )
- );
- }
-
- /**
- * Back end function to abstract the xmlrpc function calls to wpcom.
- *
- * @param $endpoint
- * @param $error_message
- */
- function __process_ajax_proxy_request( $endpoint, $error_message ) { // phpcs:ignore
- if ( ! current_user_can( 'edit_posts' ) ) {
- wp_send_json_error( $error_message );
- }
- if ( empty( $_REQUEST['pbe_nonce'] ) || ! wp_verify_nonce( $_REQUEST['pbe_nonce'], $endpoint ) ) {
- wp_send_json_error( $error_message );
- }
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client( array(
- 'user_id' => get_current_user_id(),
- ) );
- $xml->query( $endpoint );
-
- if ( $xml->isError() ) {
- wp_send_json_error( $error_message );
- }
-
- $response = $xml->getResponse();
- if ( empty( $response ) ) {
- wp_send_json_error( $error_message );
- }
-
- // Will be used only in Jetpack_Core_Json_Api_Endpoints::get_remote_value.
- update_option( 'post_by_email_address' . get_current_user_id(), $response );
-
- wp_send_json_success( $response );
- }
-}
diff --git a/plugins/jetpack/modules/post-by-email/post-by-email-rtl.css b/plugins/jetpack/modules/post-by-email/post-by-email-rtl.css
deleted file mode 100644
index 46768086..00000000
--- a/plugins/jetpack/modules/post-by-email/post-by-email-rtl.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-#jp-pbe-error {
- display: none;
-}
-#post-by-email:target .jetpack-inline-message {
- background-color: #fff;
-}
diff --git a/plugins/jetpack/modules/post-by-email/post-by-email-rtl.min.css b/plugins/jetpack/modules/post-by-email/post-by-email-rtl.min.css
deleted file mode 100644
index a4e020bb..00000000
--- a/plugins/jetpack/modules/post-by-email/post-by-email-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-#jp-pbe-error{display:none}#post-by-email:target .jetpack-inline-message{background-color:#fff} \ No newline at end of file
diff --git a/plugins/jetpack/modules/post-by-email/post-by-email.css b/plugins/jetpack/modules/post-by-email/post-by-email.css
deleted file mode 100644
index c3b88def..00000000
--- a/plugins/jetpack/modules/post-by-email/post-by-email.css
+++ /dev/null
@@ -1,6 +0,0 @@
-#jp-pbe-error {
- display: none;
-}
-#post-by-email:target .jetpack-inline-message {
- background-color: #fff;
-}
diff --git a/plugins/jetpack/modules/post-by-email/post-by-email.js b/plugins/jetpack/modules/post-by-email/post-by-email.js
deleted file mode 100644
index 0933f825..00000000
--- a/plugins/jetpack/modules/post-by-email/post-by-email.js
+++ /dev/null
@@ -1,128 +0,0 @@
-/* global jetpack_post_by_email:true, ajaxurl, pbeVars */
-
-(function($) {
- var $pbeDisable,
- $pbeEmail,
- $pbeEmailWrapper,
- $pbeEnable,
- $pbeError,
- $pbeInfo,
- $pbeRegenerate,
- $pbeSpinner;
-
- jetpack_post_by_email = {
- init: function () {
- $pbeEnable.click( jetpack_post_by_email.enable );
- $pbeRegenerate.click( jetpack_post_by_email.regenerate );
- $pbeDisable.click( jetpack_post_by_email.disable );
- },
-
- enable: function () {
- $pbeEnable.attr('disabled', 'disabled');
- $pbeError.fadeOut();
- $pbeSpinner.fadeIn();
-
- var data = {
- action: 'jetpack_post_by_email_enable',
- pbe_nonce: pbeVars.nonces.enable
- };
-
- $.post( ajaxurl, data, jetpack_post_by_email.handle_enabled );
- },
-
- handle_enabled: function( response ) {
- $pbeRegenerate.removeAttr( 'disabled' );
- $pbeDisable.removeAttr( 'disabled' );
-
- if ( response.success ) {
- $pbeEnable.fadeOut( 400, function() {
- $pbeEnable.removeAttr( 'disabled' );
- $pbeEmail.val( response.data );
- $pbeInfo.fadeIn();
- });
- } else {
- $pbeError.text( response.data );
- $pbeError.fadeIn();
- $pbeEnable.removeAttr( 'disabled' );
- }
-
- $pbeSpinner.fadeOut();
- },
-
- regenerate: function() {
- $pbeRegenerate.attr( 'disabled', 'disabled' );
- $pbeDisable.attr( 'disabled', 'disabled' );
- $pbeError.fadeOut();
- $pbeSpinner.fadeIn();
-
- var data = {
- action: 'jetpack_post_by_email_regenerate',
- pbe_nonce: pbeVars.nonces.regenerate
- };
-
- $.post( ajaxurl, data, jetpack_post_by_email.handle_regenerated );
- },
-
- handle_regenerated: function( response ) {
- if ( response.success ) {
- $pbeEmailWrapper.fadeOut( 400, function() {
- $pbeEmail.val( response.data );
- $pbeEmailWrapper.fadeIn();
- });
- } else {
- $pbeError.text( response.data );
- $pbeError.fadeIn();
- }
-
- $pbeRegenerate.removeAttr( 'disabled' );
- $pbeDisable.removeAttr( 'disabled' );
- $pbeSpinner.fadeOut();
- },
-
- disable: function () {
- $pbeRegenerate.attr( 'disabled', 'disabled' );
- $pbeDisable.attr( 'disabled', 'disabled' );
- $pbeError.fadeOut();
- $pbeSpinner.fadeIn();
-
- var data = {
- action: 'jetpack_post_by_email_disable',
- pbe_nonce: pbeVars.nonces.disable
- };
-
- $.post( ajaxurl, data, jetpack_post_by_email.handle_disabled );
- },
-
- handle_disabled: function( response ) {
- if ( response.success ) {
- $pbeEnable.removeAttr( 'disabled' );
- $pbeInfo.fadeOut( 400, function() {
- $pbeRegenerate.removeAttr( 'disabled' );
- $pbeDisable.removeAttr( 'disabled' );
- $pbeEnable.fadeIn();
- });
- } else {
- $pbeRegenerate.removeAttr( 'disabled' );
- $pbeDisable.removeAttr( 'disabled' );
-
- $pbeError.text( response.data );
- $pbeError.fadeIn();
- }
-
- $pbeSpinner.fadeOut();
- }
- };
-
- $( function() {
- $pbeDisable = $('#jp-pbe-disable');
- $pbeEmail = $('#jp-pbe-email');
- $pbeEmailWrapper = $('#jp-pbe-email-wrapper');
- $pbeEnable = $('#jp-pbe-enable');
- $pbeError = $('#jp-pbe-error');
- $pbeInfo = $('#jp-pbe-info');
- $pbeRegenerate = $('#jp-pbe-regenerate');
- $pbeSpinner = $('#jp-pbe-spinner');
-
- jetpack_post_by_email.init();
- } );
-})(jQuery);
diff --git a/plugins/jetpack/modules/post-by-email/post-by-email.min.css b/plugins/jetpack/modules/post-by-email/post-by-email.min.css
deleted file mode 100644
index bfb7b63f..00000000
--- a/plugins/jetpack/modules/post-by-email/post-by-email.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-#jp-pbe-error{display:none}#post-by-email:target .jetpack-inline-message{background-color:#fff} \ No newline at end of file
diff --git a/plugins/jetpack/modules/protect.php b/plugins/jetpack/modules/protect.php
deleted file mode 100644
index c2e60705..00000000
--- a/plugins/jetpack/modules/protect.php
+++ /dev/null
@@ -1,923 +0,0 @@
-<?php
-/**
- * Module Name: Protect
- * Module Description: Protect yourself from brute force and distributed brute force attacks, which are the most common way for hackers to get into your site.
- * Sort Order: 1
- * Recommendation Order: 4
- * First Introduced: 3.4
- * Requires Connection: Yes
- * Auto Activate: Yes
- * Module Tags: Recommended
- * Feature: Security
- * Additional Search Queries: security, jetpack protect, secure, protection, botnet, brute force, protect, login, bot, password, passwords, strong passwords, strong password, wp-login.php, protect admin
- */
-
-include_once JETPACK__PLUGIN_DIR . 'modules/protect/shared-functions.php';
-
-class Jetpack_Protect_Module {
-
- private static $__instance = null;
- public $api_key;
- public $api_key_error;
- public $whitelist;
- public $whitelist_error;
- public $whitelist_saved;
- private $user_ip;
- private $local_host;
- private $api_endpoint;
- public $last_request;
- public $last_response_raw;
- public $last_response;
- private $block_login_with_math;
-
- /**
- * Singleton implementation
- *
- * @return object
- */
- public static function instance() {
- if ( ! is_a( self::$__instance, 'Jetpack_Protect_Module' ) ) {
- self::$__instance = new Jetpack_Protect_Module();
- }
-
- return self::$__instance;
- }
-
- /**
- * Registers actions
- */
- private function __construct() {
- add_action( 'jetpack_activate_module_protect', array ( $this, 'on_activation' ) );
- add_action( 'jetpack_deactivate_module_protect', array ( $this, 'on_deactivation' ) );
- add_action( 'jetpack_modules_loaded', array ( $this, 'modules_loaded' ) );
- add_action( 'login_form', array ( $this, 'check_use_math' ), 0 );
- add_filter( 'authenticate', array ( $this, 'check_preauth' ), 10, 3 );
- add_action( 'wp_login', array ( $this, 'log_successful_login' ), 10, 2 );
- add_action( 'wp_login_failed', array ( $this, 'log_failed_attempt' ) );
- add_action( 'admin_init', array ( $this, 'maybe_update_headers' ) );
- add_action( 'admin_init', array ( $this, 'maybe_display_security_warning' ) );
-
- // This is a backup in case $pagenow fails for some reason
- add_action( 'login_form', array ( $this, 'check_login_ability' ), 1 );
-
- // Load math fallback after math page form submission
- if ( isset( $_POST[ 'jetpack_protect_process_math_form' ] ) ) {
- include_once dirname( __FILE__ ) . '/protect/math-fallback.php';
- new Jetpack_Protect_Math_Authenticate;
- }
-
- // Runs a script every day to clean up expired transients so they don't
- // clog up our users' databases
- require_once( JETPACK__PLUGIN_DIR . '/modules/protect/transient-cleanup.php' );
- }
-
- /**
- * On module activation, try to get an api key
- */
- public function on_activation() {
- if ( is_multisite() && is_main_site() && get_site_option( 'jetpack_protect_active', 0 ) == 0 ) {
- update_site_option( 'jetpack_protect_active', 1 );
- }
-
- update_site_option( 'jetpack_protect_activating', 'activating' );
-
- // Get BruteProtect's counter number
- Jetpack_Protect_Module::protect_call( 'check_key' );
- }
-
- /**
- * On module deactivation, unset protect_active
- */
- public function on_deactivation() {
- if ( is_multisite() && is_main_site() ) {
- update_site_option( 'jetpack_protect_active', 0 );
- }
- }
-
- public function maybe_get_protect_key() {
- if ( get_site_option( 'jetpack_protect_activating', false ) && ! get_site_option( 'jetpack_protect_key', false ) ) {
- $key = $this->get_protect_key();
- delete_site_option( 'jetpack_protect_activating' );
- return $key;
- }
-
- return get_site_option( 'jetpack_protect_key' );
- }
-
- /**
- * Sends a "check_key" API call once a day. This call allows us to track IP-related
- * headers for this server via the Protect API, in order to better identify the source
- * IP for login attempts
- */
- public function maybe_update_headers( $force = false ) {
- $updated_recently = $this->get_transient( 'jpp_headers_updated_recently' );
-
- if ( ! $force ) {
- if ( isset( $_GET['protect_update_headers'] ) ) {
- $force = true;
- }
- }
-
- // check that current user is admin so we prevent a lower level user from adding
- // a trusted header, allowing them to brute force an admin account
- if ( ( $updated_recently && ! $force ) || ! current_user_can( 'update_plugins' ) ) {
- return;
- }
-
- $response = Jetpack_Protect_Module::protect_call( 'check_key' );
- $this->set_transient( 'jpp_headers_updated_recently', 1, DAY_IN_SECONDS );
-
- if ( isset( $response['msg'] ) && $response['msg'] ) {
- update_site_option( 'trusted_ip_header', json_decode( $response['msg'] ) );
- }
-
- }
-
- public function maybe_display_security_warning() {
- if ( is_multisite() && current_user_can( 'manage_network' ) ) {
- if ( ! function_exists( 'is_plugin_active_for_network' ) ) {
- require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
- }
-
- if ( ! ( is_plugin_active_for_network( 'jetpack/jetpack.php' ) || is_plugin_active_for_network( 'jetpack-dev/jetpack.php' ) ) ) {
- add_action( 'load-index.php', array ( $this, 'prepare_jetpack_protect_multisite_notice' ) );
- }
- }
- }
-
- public function prepare_jetpack_protect_multisite_notice() {
- add_action( 'admin_print_styles', array ( $this, 'admin_banner_styles' ) );
- add_action( 'admin_notices', array ( $this, 'admin_jetpack_manage_notice' ) );
- }
-
- public function admin_banner_styles() {
- global $wp_styles;
-
- $min = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
-
- wp_enqueue_style( 'jetpack', plugins_url( "css/jetpack-banners{$min}.css", JETPACK__PLUGIN_FILE ), false, JETPACK__VERSION );
- $wp_styles->add_data( 'jetpack', 'rtl', true );
- }
-
- public function admin_jetpack_manage_notice() {
-
- $dismissed = get_site_option( 'jetpack_dismissed_protect_multisite_banner' );
-
- if ( $dismissed ) {
- return;
- }
-
- $referer = '&_wp_http_referer=' . add_query_arg( '_wp_http_referer', null );
- $opt_out_url = wp_nonce_url( Jetpack::admin_url( 'jetpack-notice=jetpack-protect-multisite-opt-out' . $referer ), 'jetpack_protect_multisite_banner_opt_out' );
-
- ?>
- <div id="message" class="updated jetpack-message jp-banner is-opt-in protect-error"
- style="display:block !important;">
- <a class="jp-banner__dismiss" href="<?php echo esc_url( $opt_out_url ); ?>"
- title="<?php esc_attr_e( 'Dismiss this notice.', 'jetpack' ); ?>"></a>
-
- <div class="jp-banner__content">
- <h2><?php esc_html_e( 'Protect cannot keep your site secure.', 'jetpack' ); ?></h2>
-
- <p><?php printf( __( 'Thanks for activating Protect! To start protecting your site, please network activate Jetpack on your Multisite installation and activate Protect on your primary site. Due to the way logins are handled on WordPress Multisite, Jetpack must be network-enabled in order for Protect to work properly. <a href="%s" target="_blank">Learn More</a>', 'jetpack' ), 'http://jetpack.com/support/multisite-protect' ); ?></p>
- </div>
- <div class="jp-banner__action-container is-opt-in">
- <a href="<?php echo esc_url( network_admin_url( 'plugins.php' ) ); ?>" class="jp-banner__button"
- id="wpcom-connect"><?php _e( 'View Network Admin', 'jetpack' ); ?></a>
- </div>
- </div>
- <?php
- }
-
- /**
- * Request an api key from wordpress.com
- *
- * @return bool | string
- */
- public function get_protect_key() {
-
- $protect_blog_id = Jetpack_Protect_Module::get_main_blog_jetpack_id();
-
- // If we can't find the the blog id, that means we are on multisite, and the main site never connected
- // the protect api key is linked to the main blog id - instruct the user to connect their main blog
- if ( ! $protect_blog_id ) {
- $this->api_key_error = __( 'Your main blog is not connected to WordPress.com. Please connect to get an API key.', 'jetpack' );
-
- return false;
- }
-
- $request = array (
- 'jetpack_blog_id' => $protect_blog_id,
- 'bruteprotect_api_key' => get_site_option( 'bruteprotect_api_key' ),
- 'multisite' => '0',
- );
-
- // Send the number of blogs on the network if we are on multisite
- if ( is_multisite() ) {
- $request['multisite'] = get_blog_count();
- if ( ! $request['multisite'] ) {
- global $wpdb;
- $request['multisite'] = $wpdb->get_var( "SELECT COUNT(blog_id) as c FROM $wpdb->blogs WHERE spam = '0' AND deleted = '0' and archived = '0'" );
- }
- }
-
- // Request the key
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client( array (
- 'user_id' => get_current_user_id()
- ) );
- $xml->query( 'jetpack.protect.requestKey', $request );
-
- // Hmm, can't talk to wordpress.com
- if ( $xml->isError() ) {
- $code = $xml->getErrorCode();
- $message = $xml->getErrorMessage();
- $this->api_key_error = sprintf( __( 'Error connecting to WordPress.com. Code: %1$s, %2$s', 'jetpack' ), $code, $message );
-
- return false;
- }
-
- $response = $xml->getResponse();
-
- // Hmm. Can't talk to the protect servers ( api.bruteprotect.com )
- if ( ! isset( $response['data'] ) ) {
- $this->api_key_error = __( 'No reply from Jetpack servers', 'jetpack' );
-
- return false;
- }
-
- // There was an issue generating the key
- if ( empty( $response['success'] ) ) {
- $this->api_key_error = $response['data'];
-
- return false;
- }
-
- // Key generation successful!
- $active_plugins = Jetpack::get_active_plugins();
-
- // We only want to deactivate BruteProtect if we successfully get a key
- if ( in_array( 'bruteprotect/bruteprotect.php', $active_plugins ) ) {
- Jetpack_Client_Server::deactivate_plugin( 'bruteprotect/bruteprotect.php', 'BruteProtect' );
- }
-
- $key = $response['data'];
- update_site_option( 'jetpack_protect_key', $key );
-
- return $key;
- }
-
- /**
- * Called via WP action wp_login_failed to log failed attempt with the api
- *
- * Fires custom, plugable action jpp_log_failed_attempt with the IP
- *
- * @return void
- */
- function log_failed_attempt( $login_user = null ) {
-
- /**
- * Fires before every failed login attempt.
- *
- * @module protect
- *
- * @since 3.4.0
- *
- * @param array Information about failed login attempt
- * [
- * 'login' => (string) Username or email used in failed login attempt
- * ]
- */
- do_action( 'jpp_log_failed_attempt', array( 'login' => $login_user ) );
-
- if ( isset( $_COOKIE['jpp_math_pass'] ) ) {
-
- $transient = $this->get_transient( 'jpp_math_pass_' . $_COOKIE['jpp_math_pass'] );
- $transient--;
-
- if ( ! $transient || $transient < 1 ) {
- $this->delete_transient( 'jpp_math_pass_' . $_COOKIE['jpp_math_pass'] );
- setcookie( 'jpp_math_pass', 0, time() - DAY_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN, false );
- } else {
- $this->set_transient( 'jpp_math_pass_' . $_COOKIE['jpp_math_pass'], $transient, DAY_IN_SECONDS );
- }
-
- }
- $this->protect_call( 'failed_attempt' );
- }
-
- /**
- * Set up the Protect configuration page
- */
- public function modules_loaded() {
- Jetpack::enable_module_configurable( __FILE__ );
- Jetpack::module_configuration_load( __FILE__, array ( $this, 'configuration_load' ) );
- Jetpack::module_configuration_head( __FILE__, array ( $this, 'configuration_head' ) );
- Jetpack::module_configuration_screen( __FILE__, array ( $this, 'configuration_screen' ) );
- }
-
- /**
- * Logs a successful login back to our servers, this allows us to make sure we're not blocking
- * a busy IP that has a lot of good logins along with some forgotten passwords. Also saves current user's ip
- * to the ip address whitelist
- */
- public function log_successful_login( $user_login, $user = null ) {
- if ( ! $user ) { // For do_action( 'wp_login' ) calls that lacked passing the 2nd arg.
- $user = get_user_by( 'login', $user_login );
- }
-
- $this->protect_call( 'successful_login', array ( 'roles' => $user->roles ) );
- }
-
-
- /**
- * Checks for loginability BEFORE authentication so that bots don't get to go around the log in form.
- *
- * If we are using our math fallback, authenticate via math-fallback.php
- *
- * @param string $user
- * @param string $username
- * @param string $password
- *
- * @return string $user
- */
- function check_preauth( $user = 'Not Used By Protect', $username = 'Not Used By Protect', $password = 'Not Used By Protect' ) {
- $allow_login = $this->check_login_ability( true );
- $use_math = $this->get_transient( 'brute_use_math' );
-
- if ( ! $allow_login ) {
- $this->block_with_math();
- }
-
- if ( ( 1 == $use_math || 1 == $this->block_login_with_math ) && isset( $_POST['log'] ) ) {
- include_once dirname( __FILE__ ) . '/protect/math-fallback.php';
- Jetpack_Protect_Math_Authenticate::math_authenticate();
- }
-
- return $user;
- }
-
- /**
- * Get all IP headers so that we can process on our server...
- *
- * @return string
- */
- function get_headers() {
- $ip_related_headers = array (
- 'GD_PHP_HANDLER',
- 'HTTP_AKAMAI_ORIGIN_HOP',
- 'HTTP_CF_CONNECTING_IP',
- 'HTTP_CLIENT_IP',
- 'HTTP_FASTLY_CLIENT_IP',
- 'HTTP_FORWARDED',
- 'HTTP_FORWARDED_FOR',
- 'HTTP_INCAP_CLIENT_IP',
- 'HTTP_TRUE_CLIENT_IP',
- 'HTTP_X_CLIENTIP',
- 'HTTP_X_CLUSTER_CLIENT_IP',
- 'HTTP_X_FORWARDED',
- 'HTTP_X_FORWARDED_FOR',
- 'HTTP_X_IP_TRAIL',
- 'HTTP_X_REAL_IP',
- 'HTTP_X_VARNISH',
- 'REMOTE_ADDR'
- );
-
- foreach ( $ip_related_headers as $header ) {
- if ( isset( $_SERVER[ $header ] ) ) {
- $output[ $header ] = $_SERVER[ $header ];
- }
- }
-
- return $output;
- }
-
- /*
- * Checks if the IP address has been whitelisted
- *
- * @param string $ip
- *
- * @return bool
- */
- function ip_is_whitelisted( $ip ) {
- // If we found an exact match in wp-config
- if ( defined( 'JETPACK_IP_ADDRESS_OK' ) && JETPACK_IP_ADDRESS_OK == $ip ) {
- return true;
- }
-
- $whitelist = jetpack_protect_get_local_whitelist();
-
- if ( is_multisite() ) {
- $whitelist = array_merge( $whitelist, get_site_option( 'jetpack_protect_global_whitelist', array () ) );
- }
-
- if ( ! empty( $whitelist ) ) :
- foreach ( $whitelist as $item ) :
- // If the IPs are an exact match
- if ( ! $item->range && isset( $item->ip_address ) && $item->ip_address == $ip ) {
- return true;
- }
-
- if ( $item->range && isset( $item->range_low ) && isset( $item->range_high ) ) {
- if ( jetpack_protect_ip_address_is_in_range( $ip, $item->range_low, $item->range_high ) ) {
- return true;
- }
- }
- endforeach;
- endif;
-
- return false;
- }
-
- /**
- * Checks the status for a given IP. API results are cached as transients
- *
- * @param bool $preauth Whether or not we are checking prior to authorization
- *
- * @return bool Either returns true, fires $this->kill_login, or includes a math fallback and returns false
- */
- function check_login_ability( $preauth = false ) {
-
- /**
- * JETPACK_ALWAYS_PROTECT_LOGIN will always disable the login page, and use a page provided by Jetpack.
- */
- if ( Jetpack_Constants::is_true( 'JETPACK_ALWAYS_PROTECT_LOGIN' ) ) {
- $this->kill_login();
- }
-
- if ( $this->is_current_ip_whitelisted() ) {
- return true;
- }
-
- $status = $this->get_cached_status();
-
- if ( empty( $status ) ) {
- // If we've reached this point, this means that the IP isn't cached.
- // Now we check with the Protect API to see if we should allow login
- $response = $this->protect_call( $action = 'check_ip' );
-
- if ( isset( $response['math'] ) && ! function_exists( 'brute_math_authenticate' ) ) {
- include_once dirname( __FILE__ ) . '/protect/math-fallback.php';
- new Jetpack_Protect_Math_Authenticate;
-
- return false;
- }
-
- $status = $response['status'];
- }
-
- if ( 'blocked' == $status ) {
- $this->block_with_math();
- }
-
- if ( 'blocked-hard' == $status ) {
- $this->kill_login();
- }
-
- return true;
- }
-
- function is_current_ip_whitelisted() {
- $ip = jetpack_protect_get_ip();
-
- // Server is misconfigured and we can't get an IP
- if ( ! $ip && class_exists( 'Jetpack' ) ) {
- Jetpack::deactivate_module( 'protect' );
- ob_start();
- Jetpack::state( 'message', 'protect_misconfigured_ip' );
- ob_end_clean();
- return true;
- }
-
- /**
- * Short-circuit check_login_ability.
- *
- * If there is an alternate way to validate the current IP such as
- * a hard-coded list of IP addresses, we can short-circuit the rest
- * of the login ability checks and return true here.
- *
- * @module protect
- *
- * @since 4.4.0
- *
- * @param bool false Should we allow all logins for the current ip? Default: false
- */
- if ( apply_filters( 'jpp_allow_login', false, $ip ) ) {
- return true;
- }
-
- if ( jetpack_protect_ip_is_private( $ip ) ) {
- return true;
- }
-
- if ( $this->ip_is_whitelisted( $ip ) ) {
- return true;
- }
- }
-
- function has_login_ability() {
- if ( $this->is_current_ip_whitelisted() ) {
- return true;
- }
- $status = $this->get_cached_status();
- if ( empty( $status ) || $status === 'ok' ) {
- return true;
- }
- return false;
- }
-
- function get_cached_status() {
- $transient_name = $this->get_transient_name();
- $value = $this->get_transient( $transient_name );
- if ( isset( $value['status'] ) ) {
- return $value['status'];
- }
- return '';
- }
-
- function block_with_math() {
- /**
- * By default, Protect will allow a user who has been blocked for too
- * many failed logins to start answering math questions to continue logging in
- *
- * For added security, you can disable this.
- *
- * @module protect
- *
- * @since 3.6.0
- *
- * @param bool Whether to allow math for blocked users or not.
- */
-
- $this->block_login_with_math = 1;
- /**
- * Allow Math fallback for blocked IPs.
- *
- * @module protect
- *
- * @since 3.6.0
- *
- * @param bool true Should we fallback to the Math questions when an IP is blocked. Default to true.
- */
- $allow_math_fallback_on_fail = apply_filters( 'jpp_use_captcha_when_blocked', true );
- if ( ! $allow_math_fallback_on_fail ) {
- $this->kill_login();
- }
- include_once dirname( __FILE__ ) . '/protect/math-fallback.php';
- new Jetpack_Protect_Math_Authenticate;
-
- return false;
- }
-
- /*
- * Kill a login attempt
- */
- function kill_login() {
- if (
- isset( $_GET['action'], $_GET['_wpnonce'] ) &&
- 'logout' === $_GET['action'] &&
- wp_verify_nonce( $_GET['_wpnonce'], 'log-out' ) &&
- wp_get_current_user()
-
- ) {
- // Allow users to logout
- return;
- }
-
- $ip = jetpack_protect_get_ip();
- /**
- * Fires before every killed login.
- *
- * @module protect
- *
- * @since 3.4.0
- *
- * @param string $ip IP flagged by Protect.
- */
- do_action( 'jpp_kill_login', $ip );
-
- if( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) {
- $die_string = sprintf( __( 'Your IP (%1$s) has been flagged for potential security violations.', 'jetpack' ), str_replace( 'http://', '', esc_url( 'http://' . $ip ) ) );
- wp_die(
- $die_string,
- __( 'Login Blocked by Jetpack', 'jetpack' ),
- array ( 'response' => 403 )
- );
- }
-
- require_once dirname( __FILE__ ) . '/protect/blocked-login-page.php';
- $blocked_login_page = Jetpack_Protect_Blocked_Login_Page::instance( $ip );
-
- if ( $blocked_login_page->is_blocked_user_valid() ) {
- return;
- }
-
- $blocked_login_page->render_and_die();
- }
-
- /*
- * Checks if the protect API call has failed, and if so initiates the math captcha fallback.
- */
- public function check_use_math() {
- $use_math = $this->get_transient( 'brute_use_math' );
- if ( $use_math ) {
- include_once dirname( __FILE__ ) . '/protect/math-fallback.php';
- new Jetpack_Protect_Math_Authenticate;
- }
- }
-
- /**
- * Get or delete API key
- */
- public function configuration_load() {
-
- if ( isset( $_POST['action'] ) && $_POST['action'] == 'jetpack_protect_save_whitelist' && wp_verify_nonce( $_POST['_wpnonce'], 'jetpack-protect' ) ) {
- $whitelist = str_replace( ' ', '', $_POST['whitelist'] );
- $whitelist = explode( PHP_EOL, $whitelist );
- $result = jetpack_protect_save_whitelist( $whitelist );
- $this->whitelist_saved = ! is_wp_error( $result );
- $this->whitelist_error = is_wp_error( $result );
- }
-
- if ( isset( $_POST['action'] ) && 'get_protect_key' == $_POST['action'] && wp_verify_nonce( $_POST['_wpnonce'], 'jetpack-protect' ) ) {
- $result = $this->get_protect_key();
- // Only redirect on success
- // If it fails we need access to $this->api_key_error
- if ( $result ) {
- wp_safe_redirect( Jetpack::module_configuration_url( 'protect' ) );
- exit;
- }
- }
-
- $this->api_key = get_site_option( 'jetpack_protect_key', false );
- $this->user_ip = jetpack_protect_get_ip();
- }
-
- public function configuration_head() {
- wp_enqueue_style( 'jetpack-protect' );
- }
-
- /**
- * Prints the configuration screen
- */
- public function configuration_screen() {
- require_once dirname( __FILE__ ) . '/protect/config-ui.php';
- }
-
- /**
- * If we're in a multisite network, return the blog ID of the primary blog
- *
- * @return int
- */
- public function get_main_blog_id() {
- if ( ! is_multisite() ) {
- return false;
- }
-
- global $current_site;
- $primary_blog_id = $current_site->blog_id;
-
- return $primary_blog_id;
- }
-
- /**
- * Get jetpack blog id, or the jetpack blog id of the main blog in the main network
- *
- * @return int
- */
- public function get_main_blog_jetpack_id() {
- if ( ! is_main_site() ) {
- switch_to_blog( $this->get_main_blog_id() );
- $id = Jetpack::get_option( 'id', false );
- restore_current_blog();
- } else {
- $id = Jetpack::get_option( 'id' );
- }
-
- return $id;
- }
-
- public function check_api_key() {
- $response = $this->protect_call( 'check_key' );
-
- if ( isset( $response['ckval'] ) ) {
- return true;
- }
-
- if ( isset( $response['error'] ) ) {
-
- if ( $response['error'] == 'Invalid API Key' ) {
- $this->api_key_error = __( 'Your API key is invalid', 'jetpack' );
- }
-
- if ( $response['error'] == 'API Key Required' ) {
- $this->api_key_error = __( 'No API key', 'jetpack' );
- }
- }
-
- $this->api_key_error = __( 'There was an error contacting Jetpack servers.', 'jetpack' );
-
- return false;
- }
-
- /**
- * Calls over to the api using wp_remote_post
- *
- * @param string $action 'check_ip', 'check_key', or 'failed_attempt'
- * @param array $request Any custom data to post to the api
- *
- * @return array
- */
- function protect_call( $action = 'check_ip', $request = array () ) {
- global $wp_version;
-
- $api_key = $this->maybe_get_protect_key();
-
- $user_agent = "WordPress/{$wp_version} | Jetpack/" . constant( 'JETPACK__VERSION' );
-
- $request['action'] = $action;
- $request['ip'] = jetpack_protect_get_ip();
- $request['host'] = $this->get_local_host();
- $request['headers'] = json_encode( $this->get_headers() );
- $request['jetpack_version'] = constant( 'JETPACK__VERSION' );
- $request['wordpress_version'] = strval( $wp_version );
- $request['api_key'] = $api_key;
- $request['multisite'] = "0";
-
- if ( is_multisite() ) {
- $request['multisite'] = get_blog_count();
- }
-
-
- /**
- * Filter controls maximum timeout in waiting for reponse from Protect servers.
- *
- * @module protect
- *
- * @since 4.0.4
- *
- * @param int $timeout Max time (in seconds) to wait for a response.
- */
- $timeout = apply_filters( 'jetpack_protect_connect_timeout', 30 );
-
- $args = array (
- 'body' => $request,
- 'user-agent' => $user_agent,
- 'httpversion' => '1.0',
- 'timeout' => absint( $timeout )
- );
-
- $response_json = wp_remote_post( $this->get_api_host(), $args );
- $this->last_response_raw = $response_json;
-
- $transient_name = $this->get_transient_name();
- $this->delete_transient( $transient_name );
-
- if ( is_array( $response_json ) ) {
- $response = json_decode( $response_json['body'], true );
- }
-
- if ( isset( $response['blocked_attempts'] ) && $response['blocked_attempts'] ) {
- update_site_option( 'jetpack_protect_blocked_attempts', $response['blocked_attempts'] );
- }
-
- if ( isset( $response['status'] ) && ! isset( $response['error'] ) ) {
- $response['expire'] = time() + $response['seconds_remaining'];
- $this->set_transient( $transient_name, $response, $response['seconds_remaining'] );
- $this->delete_transient( 'brute_use_math' );
- } else { // Fallback to Math Captcha if no response from API host
- $this->set_transient( 'brute_use_math', 1, 600 );
- $response['status'] = 'ok';
- $response['math'] = true;
- }
-
- if ( isset( $response['error'] ) ) {
- update_site_option( 'jetpack_protect_error', $response['error'] );
- } else {
- delete_site_option( 'jetpack_protect_error' );
- }
-
- return $response;
- }
-
- function get_transient_name() {
- $headers = $this->get_headers();
- $header_hash = md5( json_encode( $headers ) );
-
- return 'jpp_li_' . $header_hash;
- }
-
- /**
- * Wrapper for WordPress set_transient function, our version sets
- * the transient on the main site in the network if this is a multisite network
- *
- * We do it this way (instead of set_site_transient) because of an issue where
- * sitewide transients are always autoloaded
- * https://core.trac.wordpress.org/ticket/22846
- *
- * @param string $transient Transient name. Expected to not be SQL-escaped. Must be
- * 45 characters or fewer in length.
- * @param mixed $value Transient value. Must be serializable if non-scalar.
- * Expected to not be SQL-escaped.
- * @param int $expiration Optional. Time until expiration in seconds. Default 0.
- *
- * @return bool False if value was not set and true if value was set.
- */
- function set_transient( $transient, $value, $expiration ) {
- if ( is_multisite() && ! is_main_site() ) {
- switch_to_blog( $this->get_main_blog_id() );
- $return = set_transient( $transient, $value, $expiration );
- restore_current_blog();
-
- return $return;
- }
-
- return set_transient( $transient, $value, $expiration );
- }
-
- /**
- * Wrapper for WordPress delete_transient function, our version deletes
- * the transient on the main site in the network if this is a multisite network
- *
- * @param string $transient Transient name. Expected to not be SQL-escaped.
- *
- * @return bool true if successful, false otherwise
- */
- function delete_transient( $transient ) {
- if ( is_multisite() && ! is_main_site() ) {
- switch_to_blog( $this->get_main_blog_id() );
- $return = delete_transient( $transient );
- restore_current_blog();
-
- return $return;
- }
-
- return delete_transient( $transient );
- }
-
- /**
- * Wrapper for WordPress get_transient function, our version gets
- * the transient on the main site in the network if this is a multisite network
- *
- * @param string $transient Transient name. Expected to not be SQL-escaped.
- *
- * @return mixed Value of transient.
- */
- function get_transient( $transient ) {
- if ( is_multisite() && ! is_main_site() ) {
- switch_to_blog( $this->get_main_blog_id() );
- $return = get_transient( $transient );
- restore_current_blog();
-
- return $return;
- }
-
- return get_transient( $transient );
- }
-
- function get_api_host() {
- if ( isset( $this->api_endpoint ) ) {
- return $this->api_endpoint;
- }
-
- //Check to see if we can use SSL
- $this->api_endpoint = Jetpack::fix_url_for_bad_hosts( JETPACK_PROTECT__API_HOST );
-
- return $this->api_endpoint;
- }
-
- function get_local_host() {
- if ( isset( $this->local_host ) ) {
- return $this->local_host;
- }
-
- $uri = 'http://' . strtolower( $_SERVER['HTTP_HOST'] );
-
- if ( is_multisite() ) {
- $uri = network_home_url();
- }
-
- $uridata = parse_url( $uri );
-
- $domain = $uridata['host'];
-
- // If we still don't have the site_url, get it
- if ( ! $domain ) {
- $uri = get_site_url( 1 );
- $uridata = parse_url( $uri );
- $domain = $uridata['host'];
- }
-
- $this->local_host = $domain;
-
- return $this->local_host;
- }
-
-}
-
-$jetpack_protect = Jetpack_Protect_Module::instance();
-
-global $pagenow;
-if ( isset( $pagenow ) && 'wp-login.php' == $pagenow ) {
- $jetpack_protect->check_login_ability();
-}
diff --git a/plugins/jetpack/modules/protect/blocked-login-page.php b/plugins/jetpack/modules/protect/blocked-login-page.php
deleted file mode 100644
index 246031f6..00000000
--- a/plugins/jetpack/modules/protect/blocked-login-page.php
+++ /dev/null
@@ -1,611 +0,0 @@
-<?php
-
-
-/**
- * Class Jetpack_Protect_Blocked_Login_Page
- *
- * Instanciated on the wp-login page when Jetpack modules are loaded and $pagenow
- * is available, or during the login_head hook.
- *
- * Class will only be instanciated if Protect has detected a hard blocked IP address.
- *
- *
- */
-class Jetpack_Protect_Blocked_Login_Page {
-
- private static $__instance = null;
- public $can_send_recovery_emails;
- public $ip_address;
- public $valid_blocked_user_id;
- public $email_address;
- const HELP_URL = 'https://jetpack.com/support/security-features/#unblock';
- const HTTP_STATUS_CODE_TOO_MANY_REQUESTS = 429;
-
- /**
- * Singleton implementation
- *
- * @return object
- */
- public static function instance( $ip_address ) {
- if ( ! is_a( self::$__instance, 'Jetpack_Protect_Blocked_Login_Page' ) ) {
- self::$__instance = new Jetpack_Protect_Blocked_Login_Page( $ip_address );
- }
-
- return self::$__instance;
- }
-
-
- function __construct( $ip_address ) {
- /**
- * Filter controls if an email recovery form is shown to blocked IPs.
- *
- * A recovery form allows folks to re-gain access to the login form
- * via an email link if their IP was mistakenly blocked.
- *
- * @module protect
- *
- * @since 5.6.0
- *
- * @param bool $can_send_recovery_emails Defaults to true.
- */
- $this->can_send_recovery_emails = apply_filters( 'jetpack_protect_can_send_recovery_emails', true );
- $this->ip_address = $ip_address;
-
- add_filter( 'wp_authenticate_user', array( $this, 'check_valid_blocked_user' ), 10, 1 );
- add_filter( 'site_url', array( $this, 'add_args_to_login_post_url' ), 10, 3 );
- add_filter( 'network_site_url', array( $this, 'add_args_to_login_post_url' ), 10, 3 );
- add_filter( 'lostpassword_url', array( $this, 'add_args_to_lostpassword_url' ), 10, 2 );
- add_filter( 'login_url', array( $this, 'add_args_to_login_url' ), 10, 3 );
- add_filter( 'lostpassword_redirect', array( $this, 'add_args_to_lostpassword_redirect_url' ), 10, 1 );
- }
-
- public function add_args_to_lostpassword_redirect_url( $url ) {
- if ( $this->valid_blocked_user_id ) {
- $url = empty( $url ) ? wp_login_url() : $url;
- $url = add_query_arg(
- array(
- 'validate_jetpack_protect_recovery' => $_GET['validate_jetpack_protect_recovery'],
- 'user_id' => $_GET['user_id'],
- 'checkemail' => 'confirm',
- ),
- $url
- );
- }
-
- return $url;
- }
-
- public function add_args_to_lostpassword_url( $url, $redirect ) {
- if ( $this->valid_blocked_user_id ) {
- $args = array(
- 'validate_jetpack_protect_recovery' => $_GET['validate_jetpack_protect_recovery'],
- 'user_id' => $_GET['user_id'],
- 'action' => 'lostpassword',
- );
- if ( ! empty( $redirect ) ) {
- $args['redirect_to'] = $redirect;
- }
- $url = add_query_arg( $args, $url );
- }
-
- return $url;
- }
-
- public function add_args_to_login_post_url( $url, $path, $scheme ) {
- if ( $this->valid_blocked_user_id && ( 'login_post' === $scheme || 'login' === $scheme ) ) {
- $url = add_query_arg(
- array(
- 'validate_jetpack_protect_recovery' => $_GET['validate_jetpack_protect_recovery'],
- 'user_id' => $_GET['user_id'],
- ),
- $url
- );
-
- }
-
- return $url;
- }
-
- public function add_args_to_login_url( $url, $redirect, $force_reauth ) {
- if ( $this->valid_blocked_user_id ) {
- $args = array(
- 'validate_jetpack_protect_recovery' => $_GET['validate_jetpack_protect_recovery'],
- 'user_id' => $_GET['user_id'],
- );
-
- if ( ! empty( $redirect ) ) {
- $args['redirect_to'] = $redirect;
- }
-
- if ( ! empty( $force_reauth ) ) {
- $args['reauth'] = '1';
- }
- $url = add_query_arg( $args, $url );
- }
-
- return $url;
- }
-
- public function check_valid_blocked_user( $user ) {
- if ( $this->valid_blocked_user_id && $this->valid_blocked_user_id != $user->ID ) {
- return new WP_Error( 'invalid_recovery_token', __( 'The recovery token is not valid for this user.', 'jetpack' ) );
- }
-
- return $user;
- }
-
- public function is_blocked_user_valid() {
- if ( ! $this->can_send_recovery_emails ) {
- return false;
- }
-
- if ( $this->valid_blocked_user_id ) {
- return true;
- }
-
- if ( ! isset( $_GET['validate_jetpack_protect_recovery'], $_GET['user_id'] ) ) {
- return false;
- }
-
- if ( ! $this->is_valid_protect_recovery_key( $_GET['validate_jetpack_protect_recovery'], $_GET['user_id'] ) ) {
- return false;
- }
-
- $this->valid_blocked_user_id = (int) $_GET['user_id'];
-
- return true;
- }
-
- public function is_valid_protect_recovery_key( $key, $user_id ) {
-
- $path = sprintf( '/sites/%d/protect/recovery/confirm', Jetpack::get_option( 'id' ) );
- $response = Jetpack_Client::wpcom_json_api_request_as_blog(
- $path,
- '1.1',
- array(
- 'method' => 'post'
- ),
- array(
- 'token' => $key,
- 'user_id' => $user_id,
- 'ip' => $this->ip_address,
- )
- );
-
- $result = json_decode( wp_remote_retrieve_body( $response ) );
-
- if ( is_wp_error( $result ) || empty( $result ) || isset( $result->error ) ) {
- return false;
- }
-
- return true;
- }
-
- public function render_and_die() {
- if ( ! $this->can_send_recovery_emails ) {
- $this->render_blocked_login_message();
-
- return;
- }
-
- if ( isset( $_GET['validate_jetpack_protect_recovery'] ) && $_GET['user_id'] ) {
- $error = new WP_Error( 'invalid_token', __( "Oops, we couldn't validate the recovery token.", 'jetpack' ) );
- $this->protect_die( $error );
-
- return;
- }
-
- if (
- isset( $_GET['jetpack-protect-recovery'] ) &&
- isset( $_POST['_wpnonce'] ) &&
- wp_verify_nonce( $_POST['_wpnonce'], 'bypass-protect' )
- ) {
- $this->process_recovery_email();
-
- return;
- }
-
- if ( isset( $_GET['loggedout'] ) && 'true' === $_GET['loggedout'] ) {
- $this->protect_die( __( 'You successfully logged out.', 'jetpack' ) );
- }
-
- $this->render_recovery_form();
- }
-
- public function render_blocked_login_message() {
- $this->protect_die( $this->get_html_blocked_login_message() );
- }
-
- function process_recovery_email() {
- $sent = $this->send_recovery_email();
- $show_recovery_form = true;
- if ( is_wp_error( $sent ) ) {
- if ( 'email_already_sent' === $sent->get_error_code() ) {
- $show_recovery_form = false;
- }
- $this->protect_die( $sent,null,true, $show_recovery_form );
- } else {
- $this->render_recovery_success();
- }
- }
-
- function send_recovery_email() {
- $email = isset( $_POST['email'] ) ? $_POST['email'] : '';
- if ( sanitize_email( $email ) !== $email || ! is_email( $email ) ) {
- return new WP_Error( 'invalid_email', __( "Oops, looks like that's not the right email address. Please try again!", 'jetpack' ) );
- }
- $user = get_user_by( 'email', trim( $email ) );
-
- if ( ! $user ) {
- return new WP_Error( 'invalid_user', __( "Oops, we couldn't find a user with that email. Please try again!", 'jetpack' ) );
- }
- $this->email_address = $email;
- $path = sprintf( '/sites/%d/protect/recovery/request', Jetpack::get_option( 'id' ) );
-
-
- $response = Jetpack_Client::wpcom_json_api_request_as_blog(
- $path,
- '1.1',
- array(
- 'method' => 'post'
- ),
- array(
- 'user_id' => $user->ID,
- 'ip' => $this->ip_address
- )
- );
-
- $code = wp_remote_retrieve_response_code( $response );
- $result = json_decode( wp_remote_retrieve_body( $response ) );
-
- if ( self::HTTP_STATUS_CODE_TOO_MANY_REQUESTS === $code ) {
- return new WP_Error( 'email_already_sent', sprintf( __( 'Recovery instructions were sent to %s. Check your inbox!', 'jetpack' ), $this->email_address ) );
- } else if ( is_wp_error( $result ) || empty( $result ) || isset( $result->error ) ) {
- return new WP_Error( 'email_send_error', __( 'Oops, we were unable to send a recovery email. Try again.', 'jetpack' ) );
- }
-
- return true;
- }
-
- function protect_die( $content, $title = null, $back_link = false, $recovery_form = false ) {
- if ( empty( $title ) ) {
- $title = __( 'Jetpack has locked your site\'s login page.', 'jetpack' );
- }
- if ( is_wp_error( $content ) ) {
- $svg = '<svg class="gridicon gridicons-notice" height="24" width="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 15h-2v-2h2v2zm0-4h-2l-.5-6h3l-.5 6z"/></g></svg>';
- $content = '<span class="error"> '. $svg . $content->get_error_message() . '</span>';
- }
- $content = '<p>'. $content .'</p>';
-
- // If for some reason the login pop up box show up in the wp-admin.
- if ( isset( $_GET['interim-login'] ) ) {
- $content = "<style>html{ background-color: #fff; } #error-message { margin:0 auto; padding: 1em; box-shadow: none; } </style>" . $content;
- }
- $this->display_page( $title, $content, $back_link, $recovery_form );
-
- }
-
- function render_recovery_form() {
- $content = $this->get_html_blocked_login_message();
- $this->protect_die( $content, null, null, true );
- }
-
- function render_recovery_success() {
- $this->protect_die( sprintf( __( 'Recovery instructions were sent to %s. Check your inbox!', 'jetpack' ), $this->email_address ) );
- }
-
-
- function get_html_blocked_login_message() {
- $icon = '<svg class="gridicon gridicons-spam" style="fill:#d94f4f" height="24" width="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M17 2H7L2 7v10l5 5h10l5-5V7l-5-5zm-4 15h-2v-2h2v2zm0-4h-2l-.5-6h3l-.5 6z"/></g></svg>';
- $ip = str_replace( 'http://', '', esc_url( 'http://' . $this->ip_address ) );
- return sprintf(
- __( '<p>Your IP address <code>%2$s</code> has been flagged for potential security violations. You can unlock your login by sending yourself a special link via email. <a href="%3$s">Learn More</a></p>', 'jetpack' ),
- $icon,
- $ip,
- esc_url( self::HELP_URL )
- );
- }
-
- function get_html_recovery_form() {
- ob_start(); ?>
- <div>
- <form method="post" action="?jetpack-protect-recovery=true">
- <?php echo wp_nonce_field( 'bypass-protect' ); ?>
- <p><label for="email"><?php esc_html_e( 'Your email', 'jetpack' ); ?><br/></label>
- <input type="email" name="email" class="text-input"/>
- <input type="submit" class="button"
- value="<?php esc_attr_e( 'Send email', 'jetpack' ); ?>"/>
- </p>
- </form>
- </div>
-
- <?php
- $contents = ob_get_contents();
- ob_end_clean();
-
- return $contents;
- }
-
- function display_page( $title, $message, $back_button = false, $recovery_form = false ) {
-
- if ( ! headers_sent() ) {
- nocache_headers();
- header( 'Content-Type: text/html; charset=utf-8' );
- }
-
- $text_direction = 'ltr';
- if ( is_rtl() ) {
- $text_direction = 'rtl';
- }
- ?>
- <!DOCTYPE html>
- <html xmlns="http://www.w3.org/1999/xhtml" <?php if ( function_exists( 'language_attributes' ) && function_exists( 'is_rtl' ) ) {
- language_attributes();
- } else {
- echo "dir='$text_direction'";
- } ?>>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta name="viewport" content="width=device-width">
- <?php
- if ( function_exists( 'wp_no_robots' ) ) {
- wp_no_robots();
- }
- ?>
- <title><?php echo $title ?></title>
- <style type="text/css">
- html {
- background: #f6f6f6;
- }
-
- body {
- color: #2e4453;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
- margin: 2em auto;
- padding: 1em 2em;
- max-width: 460px;
- text-align: left;
- }
- body.is-rtl {
- text-align: right;
- }
- h1 {
- clear: both;
- color: #3d596d;
- font-size: 24px;
- margin:0 0 24px 0;
- padding: 0;
- font-weight: 400;
- }
-
- #error-message {
- box-sizing: border-box;
- background: white;
- box-shadow: 0 0 0 1px rgba(200, 215, 225, 0.5), 0 1px 2px #e9eff3;
- padding: 24px;
- }
-
- #error-message img {
- margin: 0 auto;
- display: block;
- }
-
- #error-page {
- margin-top: 50px;
- }
-
- #error-page p {
- font-size: 14px;
- line-height: 1.5;
- margin: 24px 0 0;
- }
-
- #error-page code {
- font-family: Consolas, Monaco, monospace;
- }
-
- ul li {
- margin-bottom: 10px;
- font-size: 14px;
- }
-
- a {
- color: #00aadc;
- }
-
- label {
- font-weight: bold;
- font-size:16px;
- }
-
- a:hover,
- a:active {
- color: #0085be;
- }
-
- a:focus {
- color: #124964;
- -webkit-box-shadow: 0 0 0 1px #5b9dd9,
- 0 0 2px 1px rgba(30, 140, 190, .8);
- box-shadow: 0 0 0 1px #5b9dd9,
- 0 0 2px 1px rgba(30, 140, 190, .8);
- outline: none;
- }
-
- .button {
- background: #00aadc;
- color: white;
- border-color: #008ab3;
- border-style: solid;
- border-width: 1px 1px 2px;
- cursor: pointer;
- display: inline-block;
- margin: 0;
- margin-right: 0px;
- outline: 0;
- overflow: hidden;
- font-weight: 500;
- text-overflow: ellipsis;
- text-decoration: none;
- vertical-align: top;
- box-sizing: border-box;
- font-size: 14px;
- line-height: 21px;
- border-radius: 4px;
- padding: 7px 14px 9px;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
- font-size: 14px;
- width: 100%;
- }
-
- .button:hover,
- .button:focus {
- border-color: #005082;
- outline: none;
- }
-
- .button:focus {
- border-color: #005082;
- -webkit-box-shadow: 0 0 3px rgba(0, 115, 170, .8);
- box-shadow: 0 0 3px rgba(0, 115, 170, .8);
- outline: none;
- }
- .button::-moz-focus-inner {
- border: 0;
- }
-
- .button:active {
- border-width: 2px 1px 1px;
- }
- .gridicon {
- fill: currentColor;
- vertical-align: middle;
- }
- #error-footer {
- padding: 16px;
- }
- #error-footer a {
- text-decoration: none;
- line-height:20px;
- font-size: 14px;
- color: #4f748e;
- }
- #error-footer a:hover {
- color: #2e4453;
- }
- #error-footer .gridicon{
- width: 16px;
- }
- #error-footer .gridicons-help {
- width: 24px;
- margin-right:8px;
- }
-
- .is-rtl #error-footer .gridicons-help {
- margin-left:8px;
- }
-
- .error {
- background: #d94f4f;
- color:#FFF;
- display: block;
- border-radius: 3px;
- line-height: 1.5;
- padding: 16px;
- padding-left: 42px;
- }
- .is-rtl .error {
- padding-right: 42px;
- }
- .error .gridicon {
- float: left;
- margin-left: -32px;
- }
-
- .is-rtl .error .gridicon {
- float: right;
- margin-right: -32px;
- }
-
- .text-input {
- margin: 0;
- padding: 7px 14px;
- width: 100%;
- color: #2e4453;
- font-size: 16px;
- line-height: 1.5;
- border: 1px solid #c8d7e1;
- background-color: white;
- transition: all .15s ease-in-out;
- box-sizing: border-box;
- margin: 8px 0 16px;
- }
- #image {
- display: block;
- width: 200px;
- margin: 0 auto;
- }
- <?php
- $rtl_class = '';
- if ( 'rtl' == $text_direction ) {
- $rtl_class = 'class="is-rtl"';
- echo 'body { font-family: Tahoma, Arial; }';
- }
- ?>
- </style>
- </head>
- <body id="error-page" <?php echo $rtl_class; ?>>
- <h1 id="error-title"><?php echo esc_html( $title ); ?></h1>
- <div id="error-message">
- <svg id="image" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 250 134">
- <path fill="#E9EFF4" d="M205.2,129.8c3.7-0.7,7.4-0.9,11.1-1.1l5.5-0.1l5.5,0c3.7,0,7.4,0.1,11.1,0.2c3.7,0.1,7.4,0.3,11.1,0.8 c0.3,0,0.5,0.3,0.5,0.6c0,0.2-0.2,0.4-0.5,0.5c-3.7,0.5-7.4,0.6-11.1,0.8c-3.7,0.1-7.4,0.2-11.1,0.2l-5.5,0l-5.5-0.1 c-3.7-0.1-7.4-0.4-11.1-1.1c-0.1,0-0.2-0.2-0.2-0.3C205,129.9,205.1,129.8,205.2,129.8"/>
- <path fill="#E9EFF4" d="M0.2,130.9c3-0.7,5.9-0.9,8.9-1.1l4.4-0.1l4.4,0c3,0,5.9,0.1,8.9,0.2c3,0.1,5.9,0.3,8.9,0.8 c0.3,0,0.5,0.3,0.4,0.6c0,0.2-0.2,0.4-0.4,0.4c-3,0.5-5.9,0.6-8.9,0.8c-3,0.1-5.9,0.2-8.9,0.2l-4.4,0l-4.4-0.1 c-3-0.1-5.9-0.4-8.9-1.1c-0.1,0-0.2-0.2-0.2-0.3C0,131,0.1,130.9,0.2,130.9"/>
- <path fill="#C8D7E2" d="M101.6,130.1H70.1V52.5c0-8.5,6.9-15.3,15.3-15.3h16.1V130.1z"/>
- <path fill="#0DA9DD" d="M191.5,130.1h-73.8v-5.4c0-8.9,7.2-16.1,16.1-16.1h57.7V130.1z"/>
- <path fill="#C7E9F5" d="M55.2,25.6l-0.1,9.8L55,57l-0.1,21.6c0,0.2,0.2,0.4,0.4,0.4c0.2,0,0.4-0.2,0.4-0.4L56.6,57l0.8-21.6 c0.1-3.3,0.2-6.5,0.3-9.8H55.2z"/>
- <path fill="#C7E9F5" d="M203.1,25.6l0.1,18.1c0.2,28.8,0.4,57.6,1.2,86.3c0,0.4,0.4,0.8,0.8,0.8c0.4,0,0.8-0.3,0.8-0.8 c0.8-28.8,1-57.6,1.2-86.3l0.1-18.1H203.1z"/>
- <path fill="#7FD3F2" d="M55.3,25.6v-8.2v-6.8c0-5.9,4-10.7,9-10.7h134c5,0,9,4.8,9,10.7v14.9H55.3z"/>
- <path fill="#005083" d="M210.7,25.6c-13.3,1.1-26.7,1-40,1l-40,0.2l-40-0.2c-13.3-0.1-26.7,0-40-1V25c13.3-1.1,26.7-1,40-1l40-0.2 l40,0.2c13.3,0.1,26.7,0,40,1V25.6z"/>
- <polygon fill="#C7E9F5" points="168.7,95.6 117.7,95.6 117.7,44.6 "/>
- <path fill="#C8D7E2" d="M191.5,56.5c0,11-8.9,19.9-19.9,19.9c-11,0-19.9-8.9-19.9-19.9c0-11,8.9-19.9,19.9-19.9 C182.6,36.6,191.5,45.5,191.5,56.5"/>
- <path fill="#FFFFFF" d="M213.2,95.5c-3.3-5.1-3.2-16.7-3.2-28.4h-32.3c0,0-5.2,25.5,4.6,33c7.5-0.1,29.9-0.6,29.9-0.6"/>
- <path fill="#C8D7E2" d="M213.5,95.3l-0.1-0.1l-0.3-0.5c-0.2-0.4-0.3-0.7-0.5-1.1c-0.3-0.8-0.5-1.6-0.7-2.4c-0.1-0.5-0.2-1.1-0.3-1.6 c-0.4,0-0.8,0-1.2,0c0.5,2.1,1.1,4.3,2.4,6.1l0.2,0.2c0.2,0,0.4-0.1,0.5-0.3C213.6,95.5,213.6,95.4,213.5,95.3L213.5,95.3z"/>
- <path fill="#C8D7E2" d="M212.5,98.6c-0.1,0-0.2,0-0.3,0l-0.1,0H212l-0.3,0l-0.6,0l-1.3,0l-2.5,0l-5,0l-19.5,0.2 c-1.9-1.7-3.1-4.1-3.8-6.5c-0.8-2.6-1.1-5.4-1.2-8.2c-0.2-5.2,0.3-10.4,1.1-15.6l5.7-0.1c0-0.9,0-1.8,0-2.6l-4.4,0l-2.5,0 c-0.4,0-0.8,0.2-1,0.5c-0.1,0.2-0.2,0.3-0.3,0.5l-0.1,0.3l-0.2,1.2c-0.3,1.7-0.5,3.3-0.7,5c-0.3,3.3-0.5,6.7-0.4,10.1 c0.1,3.4,0.5,6.7,1.5,10c0.5,1.6,1.2,3.2,2.2,4.7c0.5,0.7,1,1.4,1.7,2c0.3,0.3,0.6,0.6,1,0.9l0.1,0.1c0.1,0,0.2,0.1,0.3,0.2 c0.2,0.1,0.5,0.1,0.6,0.1l0.6,0l20-0.6l5-0.2l2.5-0.1l1.2,0l0.3,0l0.2,0c0,0,0.3,0,0.4-0.1c0.3-0.2,0.5-0.5,0.5-0.9 C213.1,99.1,212.9,98.7,212.5,98.6z"/>
- <path fill="#FFFFFF" d="M223.1,84.8c-3.3-5.1-4.8-16.7-4.8-28.4h-32.3c0,0-3.5,25.5,6.3,33c7.5-0.1,29.9-0.6,29.9-0.6"/>
- <path fill="#C8D7E2" d="M222.9,84.9c-1.3-2.1-2.2-4.4-2.8-6.7c-0.6-2.4-1.1-4.8-1.5-7.2c-0.7-4.8-1-9.1-1-13.9l0,0l-31,0.1l0,0 c-0.4,2.8-0.5,5.1-0.5,7.9c-0.1,2.9,0,5.7,0.3,8.6c0.3,2.8,0.8,5.7,1.7,8.3c0.9,2.6,2.3,5.2,4.5,6.9l-0.4-0.1l14.9-0.2 c5-0.1,10-0.1,14.9-0.1c0.1,0,0.3,0.1,0.3,0.3c0,0.1-0.1,0.3-0.2,0.3c-5,0.2-10,0.4-14.9,0.5l-14.9,0.4c-0.1,0-0.3,0-0.4-0.1l0,0 c-2.5-1.9-3.9-4.7-5-7.4c-1-2.8-1.5-5.7-1.9-8.6c-0.3-2.9-0.4-5.8-0.4-8.8c0.1-2.9,0.2-5.8,0.6-8.8c0-0.4,0.4-0.6,0.7-0.6h0 l32.3,0.1h0c0.3,0,0.6,0.3,0.6,0.6v0c0,4.8,0.2,9.6,0.7,14.4c0.3,2.4,0.6,4.8,1.2,7.1c0.5,2.3,1.2,4.7,2.4,6.8c0,0.1,0,0.1,0,0.2 C223.1,85,223,85,222.9,84.9"/>
- <path fill="#C8D7E2" d="M192.1,67.1c1.6-0.9,3.4-1.2,5.1-1.3c1.7-0.2,3.5-0.2,5.2-0.2c3.5,0.1,6.9,0.2,10.3,1c0.1,0,0.2,0.2,0.2,0.3 c0,0.1-0.1,0.2-0.2,0.2c-3.4,0.2-6.9,0-10.3,0c-1.7,0-3.4,0-5.1,0c-1.7,0-3.4,0.1-5.1,0.3l0,0c-0.1,0-0.1,0-0.1-0.1 C192,67.2,192.1,67.1,192.1,67.1"/>
- <path fill="#C8D7E2" d="M194.1,74c1.4,0,2.7,0,4.1,0c1.4,0,2.7,0,4.1,0c2.7,0,5.4-0.1,8.2-0.2c0.1,0,0.3,0.1,0.3,0.3 c0,0.1-0.1,0.2-0.2,0.3c-1.3,0.5-2.7,0.7-4.1,0.9c-1.4,0.2-2.8,0.2-4.2,0.3c-1.4,0-2.8,0-4.2-0.2c-1.4-0.2-2.8-0.4-4.1-1.1 c-0.1,0-0.1-0.1,0-0.2C193.9,74.1,194,74,194.1,74L194.1,74z"/>
- <path fill="#86A6BD" d="M40.2,88.6c-0.5,0-0.8-0.4-0.9-0.9l-0.1-8.2c0-0.7,0-1.4,0-2.1c0.1-0.7,0.2-1.5,0.4-2.2c0.4-1.4,1-2.8,1.9-4 c1.7-2.5,4.3-4.3,7.1-5.1c0.7-0.2,1.5-0.3,2.2-0.5c0.7-0.1,1.5-0.1,2.2-0.1c1.3,0,2.9,0,4.4,0.4c2.9,0.7,5.6,2.5,7.4,4.9 c0.9,1.2,1.6,2.6,2.1,4c0.5,1.4,0.6,3,0.6,4.4l0,16.4c0,0.7-0.6,1.3-1.3,1.3l-6.7,0c-0.7,0-1.3-0.6-1.3-1.3v0l0-10.8l0-5.4 c0-1.4-0.7-2.8-1.8-3.5c-0.6-0.4-1.3-0.6-2-0.7c-0.7,0-1.9,0-2.5,0c-1.4,0.1-2.7,1-3.3,2.3c-0.3,0.7-0.4,1.3-0.4,2.1l0,2.7 l-0.1,5.4l0,0c0,0.5-0.4,0.9-1,0.9"/>
- <path fill="#FFFFFF" d="M41.1,86.9l0.1-7.3c-0.1-2.6,0.7-5,2.1-7.1c1.4-2,3.6-3.5,5.9-4.1c0.6-0.2,1.2-0.3,1.8-0.3 c0.6,0,1.2-0.1,1.9,0c1.4,0,2.5,0,3.7,0.4c2.4,0.6,4.5,2,5.9,4c0.7,1,1.3,2.1,1.6,3.2c0.4,1.2,0.5,2.3,0.5,3.7l0,15.1l0,0l-4.2,0 l0-9.5l0-5.4c0-2.2-1.2-4.4-3-5.5c-0.9-0.6-2-0.9-3.1-1c-1.1,0-1.7,0-2.9,0c-2.2,0.2-4.2,1.7-5.1,3.6c-0.5,0.9-0.7,2.1-0.6,3.1 l0,2.7l0.1,4.4l0,0L41.1,86.9L41.1,86.9"/>
- <path fill="#86A6BD" d="M36.3,133c-1.9,0-3.8-1.1-4.8-2.8c-0.5-0.8-0.7-1.8-0.7-2.8l0-2.4l0-9.6l-0.1-9.6l0-4.8c0-0.7,0-1.8,0.3-2.8 c0.3-1,0.9-1.8,1.7-2.5c0.8-0.6,1.7-1.1,2.7-1.3c1.1-0.2,1.8-0.1,2.6-0.1l4.8,0l9.6-0.1l19.2,0c2.1,0,4.1,1.2,5.1,3 c0.5,0.9,0.8,2,0.8,3l0,2.4l0,9.6l-0.1,9.6l0,4.8c0,0.7,0,1.8-0.4,2.8c-0.3,0.9-1,1.8-1.7,2.4c-0.8,0.6-1.7,1.1-2.7,1.2 c-1.1,0.1-1.8,0-2.6,0.1l-4.8,0l-9.6-0.1L36.3,133z"/>
- <path fill="#FFFFFF" d="M74.8,112.3l-0.1-9.6l0-2.4c0-0.6-0.1-1.1-0.4-1.6c-0.6-1-1.7-1.6-2.8-1.6l-19.2,0L42.7,97l-4.8,0 c-0.8,0-1.7,0-2.2,0c-0.6,0.1-1.1,0.3-1.6,0.7c-0.5,0.4-0.8,0.9-1,1.4c-0.2,0.6-0.2,1.1-0.2,2l0,4.8l-0.1,9.6l0,9.6l0,2.4 c0,0.6,0.2,1.3,0.5,1.8c0.6,1.1,1.9,1.8,3.1,1.8l19.2-0.1l9.6-0.1l4.8,0c0.8,0,1.7,0,2.2-0.1c0.6-0.1,1.2-0.4,1.6-0.8 c0.5-0.4,0.8-0.9,1-1.5c0.2-0.6,0.2-1.1,0.2-2l0-4.8L74.8,112.3z"/>
- <path fill="#86A6BD" d="M48.1,121.4l2.9-6.2c0.3-0.6,0.2-1.3-0.3-1.8c-1-1-1.5-2.5-1.2-4c0.3-1.7,1.7-3.1,3.4-3.4 c2.9-0.6,5.4,1.6,5.4,4.4c0,1.2-0.5,2.3-1.3,3.1c-0.5,0.5-0.6,1.2-0.3,1.8l2.9,6.2c0.1,0.2-0.1,0.5-0.3,0.5H48.4 C48.1,121.9,48,121.6,48.1,121.4"/>
- </svg>
-
- <?php echo $message; ?>
- <?php if ( $recovery_form ) {
- echo $this->get_html_recovery_form();
- } ?>
- </div>
- <div id="error-footer">
- <?php if ( $back_button && ! $recovery_form ) {
- if ( 'rtl' == $text_direction ) {
- $back_button_icon = '<svg class="gridicon gridicons-arrow-right" height="24" width="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8-8-8z"/></g></svg>';
- } else {
- $back_button_icon = '<svg class="gridicon gridicons-arrow-left" height="24" width="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"/></g></svg>';
- }
- ?>
- <a href='javascript:history.back()'><?php printf( __( '%s Back' ), $back_button_icon ); ?></a>
- <?php } else {
- $help_icon = '<svg class="gridicon gridicons-help" height="24" width="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm1 16h-2v-2h2v2zm0-4.14V15h-2v-2c0-.552.448-1 1-1 1.103 0 2-.897 2-2s-.897-2-2-2-2 .897-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 1.862-1.278 3.413-3 3.86z"/></g></svg>';?>
- <a href="<?php echo esc_url( self::HELP_URL ); ?>" rel="noopener noreferrer" target="_blank"><?php printf( __( '%s Get help unlocking your site' ), $help_icon );?></a>
- <?php } ?>
- </div>
- </body>
- </html>
- <?php
- die();
- }
-}
diff --git a/plugins/jetpack/modules/protect/config-ui.php b/plugins/jetpack/modules/protect/config-ui.php
deleted file mode 100644
index f758bb52..00000000
--- a/plugins/jetpack/modules/protect/config-ui.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php if ( ! $this->api_key ) : // no api key, provide a button to get one ?>
-
- <div class="protect-status attn">
- <?php if( ! empty( $this->api_key_error ) ) : ?>
- <p class="error"><?php echo $this->api_key_error; ?></p>
- <p>
- <a href="?page=jetpack-debugger"><?php echo __( 'Debug Jetpack for more information.', 'jetpack' ); ?></a>
- </p>
- <?php endif; ?>
-
- <form method="post">
- <?php wp_nonce_field( 'jetpack-protect' ); ?>
- <input type='hidden' name='action' value='get_protect_key' />
- <p class="submit">
- <?php _e( 'An API key is needed for Protect.', 'jetpack' ); ?>
- <br /><br /><input type='submit' class='button-primary' value='<?php echo esc_attr( __( 'Get an API Key', 'jetpack' ) ); ?>' />
- </p>
- </form>
- </div>
-
-<?php else : // api key is good, show white list options ?>
-
- <?php
- global $current_user;
- $whitelist = jetpack_protect_format_whitelist();
- ?>
- <div class="protect-whitelist">
-
- <form id="editable-whitelist" method="post">
- <h3><?php _e( 'Whitelist Management', 'jetpack' ); ?></h3>
-
- <?php if( ! empty( $this->whitelist_error ) ) : ?>
- <p class="error"><?php _e( 'One of your IP addresses was not valid.', 'jetpack' ); ?></p>
- <?php endif; ?>
-
- <?php if( $this->whitelist_saved === true ) : ?>
- <p class="success"><?php _e( 'Whitelist saved.', 'jetpack' ); ?></p>
- <?php endif; ?>
-
- <p>
- <?php _e( 'Whitelisting an IP address prevents it from ever being blocked by Jetpack. ', 'jetpack' ); ?><br />
-
- <?php if ( is_multisite() && current_user_can( 'manage_network' ) ) : ?>
- <a href="<?php echo network_admin_url( 'admin.php?page=jetpack-settings' ); ?>">
- <?php _e( 'You can manage your network-wide whitelist via the network admin.', 'jetpack' ); ?>
- </a><br />
- <?php endif; ?>
-
- <small>
- <?php _e( 'Make sure to add your most frequently used IP addresses as they can change between your home, office or other locations. Removing an IP address from the list below will remove it from your whitelist.', 'jetpack' ); ?>
- </small>
- </p>
-
-
-
- <p><strong><?php printf( __( 'Your current IP: %s', 'jetpack' ), $this->user_ip ); ?></strong></p>
- <?php wp_nonce_field( 'jetpack-protect' ); ?>
- <input type='hidden' name='action' value='jetpack_protect_save_whitelist' />
- <textarea name="whitelist"><?php echo implode( PHP_EOL, $whitelist['local'] ); ?></textarea>
- <p>
- <em><?php _e('IPv4 and IPv6 are acceptable. Enter multiple IPs on separate lines. <br />To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100', 'jetpack' ); ?></em>
- </p>
- <p>
- <input type='submit' class='button-primary' value='<?php echo esc_attr( __( 'Save', 'jetpack' ) ); ?>' />
- </p>
- </form>
-
- </div>
-
-<?php endif; ?>
diff --git a/plugins/jetpack/modules/protect/math-fallback.php b/plugins/jetpack/modules/protect/math-fallback.php
deleted file mode 100644
index bc29fa86..00000000
--- a/plugins/jetpack/modules/protect/math-fallback.php
+++ /dev/null
@@ -1,158 +0,0 @@
-<?php
-
-if ( ! class_exists( 'Jetpack_Protect_Math_Authenticate' ) ) {
- /*
- * The math captcha fallback if we can't talk to the Protect API
- */
- class Jetpack_Protect_Math_Authenticate {
-
- static $loaded;
-
- function __construct() {
-
- if ( self::$loaded ) {
- return;
- }
-
- self::$loaded = 1;
-
- add_action( 'login_form', array( $this, 'math_form' ) );
-
- if( isset( $_POST[ 'jetpack_protect_process_math_form' ] ) ) {
- add_action( 'init', array( $this, 'process_generate_math_page' ) );
- }
- }
-
- private static function time_window() {
- return ceil( time() / ( MINUTE_IN_SECONDS * 2 ) );
- }
-
- /**
- * Verifies that a user answered the math problem correctly while logging in.
- *
- * @return bool Returns true if the math is correct
- * @throws Error if insuffient $_POST variables are present.
- * @throws Error message if the math is wrong
- */
- static function math_authenticate() {
- if( isset( $_COOKIE[ 'jpp_math_pass' ] ) ) {
- $jetpack_protect = Jetpack_Protect_Module::instance();
- $transient = $jetpack_protect->get_transient( 'jpp_math_pass_' . $_COOKIE[ 'jpp_math_pass' ] );
-
- if( !$transient || $transient < 1 ) {
- Jetpack_Protect_Math_Authenticate::generate_math_page();
- }
- return true;
- }
-
- $ans = isset( $_POST['jetpack_protect_num'] ) ? (int) $_POST['jetpack_protect_num'] : '' ;
- $correct_ans = isset( $_POST[ 'jetpack_protect_answer' ] ) ? $_POST[ 'jetpack_protect_answer' ] : '' ;
-
- $time_window = Jetpack_Protect_Math_Authenticate::time_window();
- $salt = get_site_option( 'jetpack_protect_key' ) . '|' . get_site_option( 'admin_email' ) . '|';
- $salted_ans_1 = hash_hmac( 'sha1', $ans, $salt . $time_window );
- $salted_ans_2 = hash_hmac( 'sha1', $ans, $salt . ( $time_window - 1 ) );
-
- if ( ! $correct_ans || ! $ans ) {
- Jetpack_Protect_Math_Authenticate::generate_math_page();
- } elseif ( ! hash_equals( $salted_ans_1, $correct_ans ) && ! hash_equals( $salted_ans_2, $correct_ans ) ) {
- wp_die(
- __( '<strong>You failed to correctly answer the math problem.</strong> This is used to combat spam when the Protect API is unavailable. Please use your browser\'s back button to return to the login form, press the "refresh" button to generate a new math problem, and try to log in again.', 'jetpack' ),
- '',
- array ( 'response' => 401 )
- );
- } else {
- return true;
- }
- }
-
- /**
- * Creates an interim page to collect answers to a math captcha
- *
- * @return none, execution stopped
- */
- static function generate_math_page( $error = false ) {
- ob_start();
- ?>
- <h2><?php esc_html_e( 'Please solve this math problem to prove that you are not a bot. Once you solve it, you will need to log in again.', 'jetpack' ); ?></h2>
- <?php if ($error): ?>
- <h3><?php esc_html_e( 'Your answer was incorrect, please try again.', 'jetpack' ); ?></h3>
- <?php endif ?>
-
- <form action="<?php echo wp_login_url(); ?>" method="post" accept-charset="utf-8">
- <?php Jetpack_Protect_Math_Authenticate::math_form(); ?>
- <input type="hidden" name="jetpack_protect_process_math_form" value="1" id="jetpack_protect_process_math_form" />
- <p><input type="submit" value="<?php esc_attr_e( 'Continue &rarr;', 'jetpack' ); ?>"></p>
- </form>
- <?php
- $mathpage = ob_get_contents();
- ob_end_clean();
- wp_die(
- $mathpage,
- '',
- array ( 'response' => 401 )
- );
- }
-
- public function process_generate_math_page() {
- $ans = isset( $_POST['jetpack_protect_num'] ) ? (int)$_POST['jetpack_protect_num'] : '';
- $correct_ans = isset( $_POST[ 'jetpack_protect_answer' ] ) ? $_POST[ 'jetpack_protect_answer' ] : '' ;
-
- $time_window = Jetpack_Protect_Math_Authenticate::time_window();
- $salt = get_site_option( 'jetpack_protect_key' ) . '|' . get_site_option( 'admin_email' ) . '|';
- $salted_ans_1 = hash_hmac( 'sha1', $ans, $salt . $time_window );
- $salted_ans_2 = hash_hmac( 'sha1', $ans, $salt . ( $time_window - 1 ) );
-
- if ( ! hash_equals( $salted_ans_1, $correct_ans ) && ! hash_equals( $salted_ans_2, $correct_ans ) ) {
- Jetpack_Protect_Math_Authenticate::generate_math_page(true);
- } else {
- $temp_pass = substr( hash_hmac( 'sha1', rand( 1, 100000000 ), get_site_option( 'jetpack_protect_key' ) ), 5, 25 );
-
- $jetpack_protect = Jetpack_Protect_Module::instance();
- $jetpack_protect->set_transient( 'jpp_math_pass_' . $temp_pass, 3, DAY_IN_SECONDS );
- setcookie('jpp_math_pass', $temp_pass, time() + DAY_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN, false);
- remove_action( 'login_form', array( $this, 'math_form' ) );
- return true;
- }
- }
-
- /**
- * Requires a user to solve a simple equation. Added to any WordPress login form.
- *
- * @return VOID outputs html
- */
- static function math_form() {
- // Check if jpp_math_pass cookie is set and it matches valid transient
- if( isset( $_COOKIE[ 'jpp_math_pass' ] ) ) {
- $jetpack_protect = Jetpack_Protect_Module::instance();
- $transient = $jetpack_protect->get_transient( 'jpp_math_pass_' . $_COOKIE[ 'jpp_math_pass' ] );
-
- if( $transient && $transient > 0 ) {
- return '';
- }
- }
-
- $num1 = rand( 0, 10 );
- $num2 = rand( 1, 10 );
- $ans = $num1 + $num2;
-
- $time_window = Jetpack_Protect_Math_Authenticate::time_window();
- $salt = get_site_option( 'jetpack_protect_key' ) . '|' . get_site_option( 'admin_email' ) . '|';
- $salted_ans = hash_hmac( 'sha1', $ans, $salt . $time_window );
- ?>
- <div style="margin: 5px 0 20px;">
- <label for="jetpack_protect_answer">
- <?php esc_html_e( 'Prove your humanity', 'jetpack' ); ?>
- </label>
- <br/>
- <span style="vertical-align:super;">
- <?php echo esc_html( "$num1 &nbsp; + &nbsp; $num2 &nbsp; = &nbsp;" ); ?>
- </span>
- <input type="text" id="jetpack_protect_answer" name="jetpack_protect_num" value="" size="2" style="width:30px;height:25px;vertical-align:middle;font-size:13px;" class="input" />
- <input type="hidden" name="jetpack_protect_answer" value="<?php echo esc_attr( $salted_ans ); ?>" />
- </div>
- <?php
- }
-
- }
-}
diff --git a/plugins/jetpack/modules/protect/protect-dashboard-widget-rtl.css b/plugins/jetpack/modules/protect/protect-dashboard-widget-rtl.css
deleted file mode 100644
index 20bc0893..00000000
--- a/plugins/jetpack/modules/protect/protect-dashboard-widget-rtl.css
+++ /dev/null
@@ -1,117 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-/* loads inline on wp-admin in order to reduce http requests */
-
-#protect_dashboard_widget .inside {
- margin: 0;
- padding: 0;
- text-align: center;
-}
-
-.jetpack-security * {
- box-sizing: border-box;
-}
-
-/* alert msgs */
-#protect_dashboard_widget .msg {
- color: #fff;
- text-align: center;
- padding: 10px;
-}
-
-#protect_dashboard_widget .msg.working {
- background: #7BAC48;
-}
-
-#protect_dashboard_widget .msg.attn {
- background: #d94f4f;
-}
-
-#protect_dashboard_widget .msg a {
- color: #fff;
- text-decoration: underline;
-}
-
-#protect_dashboard_widget .msg a:hover {
- text-decoration: none;
-}
-
-#protect_dashboard_widget .msg .dashicons {
- float: left;
- text-decoration: none;
- border-radius: 2px;
-}
-
-#protect_dashboard_widget .msg.working .dashicons {
- color: #609643;
-}
-
-#protect_dashboard_widget .msg.working .dashicons:hover {
- background: #609643;
- color: #7BAC48;
-}
-
-#protect_dashboard_widget .msg.attn .dashicons {
- color: #a93838;
-}
-
-#protect_dashboard_widget .msg.attn .dashicons:hover {
- background: #a93838;
- color: #d94f4f;
-}
-
-.blocked-attacks,
-.file-scanning {
- position: relative;
-}
-
-.blocked-attacks {
- background: #fafafa;
- border-bottom: 1px #eee solid;
- padding-bottom: 35px;
-}
-
-.jetpack-security-sharing {
- width: 60px;
- display: inline-block;
- position: absolute;
- left: 0;
- top: 10px;
-}
-
-.jetpack-security-sharing a {
- color: #dcdcdc;
-}
-
-.jetpack-security-sharing a:hover {
- color: #cdcbcb;
-}
-
-.blocked-attacks h2,
-.blocked-attacks h3 {
- color: #7BAC48;
- font-weight: 300;
-}
-
-.blocked-attacks h2 {
- font-size: 4em;
- line-height: 110%;
- margin: 0;
- padding: 10px 12px 10px 12px;
-}
-
-.blocked-attacks h3 {
- font-size: 1.1em;
- line-height: 110%;
- padding: 0 12px 10px 12px;
- margin: 0;
-}
-
-.jetpack-protect-logo {
- width: 50px;
- position: relative;
-}
-
-.file-scanning {
- margin-top: -30px;
- padding: 0 12px;
-}
diff --git a/plugins/jetpack/modules/protect/protect-dashboard-widget-rtl.min.css b/plugins/jetpack/modules/protect/protect-dashboard-widget-rtl.min.css
deleted file mode 100644
index 72993a8d..00000000
--- a/plugins/jetpack/modules/protect/protect-dashboard-widget-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-#protect_dashboard_widget .inside{margin:0;padding:0;text-align:center}.jetpack-security *{box-sizing:border-box}#protect_dashboard_widget .msg{color:#fff;text-align:center;padding:10px}#protect_dashboard_widget .msg.working{background:#7bac48}#protect_dashboard_widget .msg.attn{background:#d94f4f}#protect_dashboard_widget .msg a{color:#fff;text-decoration:underline}#protect_dashboard_widget .msg a:hover{text-decoration:none}#protect_dashboard_widget .msg .dashicons{float:left;text-decoration:none;border-radius:2px}#protect_dashboard_widget .msg.working .dashicons{color:#609643}#protect_dashboard_widget .msg.working .dashicons:hover{background:#609643;color:#7bac48}#protect_dashboard_widget .msg.attn .dashicons{color:#a93838}#protect_dashboard_widget .msg.attn .dashicons:hover{background:#a93838;color:#d94f4f}.blocked-attacks,.file-scanning{position:relative}.blocked-attacks{background:#fafafa;border-bottom:1px #eee solid;padding-bottom:35px}.jetpack-security-sharing{width:60px;display:inline-block;position:absolute;left:0;top:10px}.jetpack-security-sharing a{color:#dcdcdc}.jetpack-security-sharing a:hover{color:#cdcbcb}.blocked-attacks h2,.blocked-attacks h3{color:#7bac48;font-weight:300}.blocked-attacks h2{font-size:4em;line-height:110%;margin:0;padding:10px 12px 10px 12px}.blocked-attacks h3{font-size:1.1em;line-height:110%;padding:0 12px 10px 12px;margin:0}.jetpack-protect-logo{width:50px;position:relative}.file-scanning{margin-top:-30px;padding:0 12px} \ No newline at end of file
diff --git a/plugins/jetpack/modules/protect/protect-dashboard-widget.css b/plugins/jetpack/modules/protect/protect-dashboard-widget.css
deleted file mode 100644
index b4a6b08e..00000000
--- a/plugins/jetpack/modules/protect/protect-dashboard-widget.css
+++ /dev/null
@@ -1,116 +0,0 @@
-/* loads inline on wp-admin in order to reduce http requests */
-
-#protect_dashboard_widget .inside {
- margin: 0;
- padding: 0;
- text-align: center;
-}
-
-.jetpack-security * {
- box-sizing: border-box;
-}
-
-/* alert msgs */
-#protect_dashboard_widget .msg {
- color: #fff;
- text-align: center;
- padding: 10px;
-}
-
-#protect_dashboard_widget .msg.working {
- background: #7BAC48;
-}
-
-#protect_dashboard_widget .msg.attn {
- background: #d94f4f;
-}
-
-#protect_dashboard_widget .msg a {
- color: #fff;
- text-decoration: underline;
-}
-
-#protect_dashboard_widget .msg a:hover {
- text-decoration: none;
-}
-
-#protect_dashboard_widget .msg .dashicons {
- float: right;
- text-decoration: none;
- border-radius: 2px;
-}
-
-#protect_dashboard_widget .msg.working .dashicons {
- color: #609643;
-}
-
-#protect_dashboard_widget .msg.working .dashicons:hover {
- background: #609643;
- color: #7BAC48;
-}
-
-#protect_dashboard_widget .msg.attn .dashicons {
- color: #a93838;
-}
-
-#protect_dashboard_widget .msg.attn .dashicons:hover {
- background: #a93838;
- color: #d94f4f;
-}
-
-.blocked-attacks,
-.file-scanning {
- position: relative;
-}
-
-.blocked-attacks {
- background: #fafafa;
- border-bottom: 1px #eee solid;
- padding-bottom: 35px;
-}
-
-.jetpack-security-sharing {
- width: 60px;
- display: inline-block;
- position: absolute;
- right: 0;
- top: 10px;
-}
-
-.jetpack-security-sharing a {
- color: #dcdcdc;
-}
-
-.jetpack-security-sharing a:hover {
- color: #cdcbcb;
-}
-
-.blocked-attacks h2,
-.blocked-attacks h3 {
- color: #7BAC48;
- font-weight: 300;
-}
-
-.blocked-attacks h2 {
- font-size: 4em;
- line-height: 110%;
- margin: 0;
- padding: 10px 12px 10px 12px;
-}
-
-.blocked-attacks h3 {
- font-size: 1.1em;
- line-height: 110%;
- padding: 0 12px 10px 12px;
- margin: 0;
-}
-
-.jetpack-protect-logo {
- width: 50px;
- position: relative;
-}
-
-.file-scanning {
- margin-top: -30px;
- padding: 0 12px;
-}
diff --git a/plugins/jetpack/modules/protect/protect-dashboard-widget.min.css b/plugins/jetpack/modules/protect/protect-dashboard-widget.min.css
deleted file mode 100644
index d3b0b996..00000000
--- a/plugins/jetpack/modules/protect/protect-dashboard-widget.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-#protect_dashboard_widget .inside{margin:0;padding:0;text-align:center}.jetpack-security *{box-sizing:border-box}#protect_dashboard_widget .msg{color:#fff;text-align:center;padding:10px}#protect_dashboard_widget .msg.working{background:#7bac48}#protect_dashboard_widget .msg.attn{background:#d94f4f}#protect_dashboard_widget .msg a{color:#fff;text-decoration:underline}#protect_dashboard_widget .msg a:hover{text-decoration:none}#protect_dashboard_widget .msg .dashicons{float:right;text-decoration:none;border-radius:2px}#protect_dashboard_widget .msg.working .dashicons{color:#609643}#protect_dashboard_widget .msg.working .dashicons:hover{background:#609643;color:#7bac48}#protect_dashboard_widget .msg.attn .dashicons{color:#a93838}#protect_dashboard_widget .msg.attn .dashicons:hover{background:#a93838;color:#d94f4f}.blocked-attacks,.file-scanning{position:relative}.blocked-attacks{background:#fafafa;border-bottom:1px #eee solid;padding-bottom:35px}.jetpack-security-sharing{width:60px;display:inline-block;position:absolute;right:0;top:10px}.jetpack-security-sharing a{color:#dcdcdc}.jetpack-security-sharing a:hover{color:#cdcbcb}.blocked-attacks h2,.blocked-attacks h3{color:#7bac48;font-weight:300}.blocked-attacks h2{font-size:4em;line-height:110%;margin:0;padding:10px 12px 10px 12px}.blocked-attacks h3{font-size:1.1em;line-height:110%;padding:0 12px 10px 12px;margin:0}.jetpack-protect-logo{width:50px;position:relative}.file-scanning{margin-top:-30px;padding:0 12px} \ No newline at end of file
diff --git a/plugins/jetpack/modules/protect/protect.png b/plugins/jetpack/modules/protect/protect.png
deleted file mode 100644
index 67bcdbad..00000000
--- a/plugins/jetpack/modules/protect/protect.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/protect/shared-functions.php b/plugins/jetpack/modules/protect/shared-functions.php
deleted file mode 100644
index 322901d8..00000000
--- a/plugins/jetpack/modules/protect/shared-functions.php
+++ /dev/null
@@ -1,316 +0,0 @@
-<?php
-/**
- * These functions are shared by the Protect module and its related json-endpoints
- */
-/**
- * Returns an array of IP objects that will never be blocked by the Protect module
- *
- * The array is segmented into a local whitelist which applies only to the current site
- * and a global whitelist which, for multisite installs, applies to the entire networko
- *
- * @return array
- */
-function jetpack_protect_format_whitelist() {
- $local_whitelist = jetpack_protect_get_local_whitelist();
- $formatted = array(
- 'local' => array(),
- );
- foreach ( $local_whitelist as $item ) {
- if ( $item->range ) {
- $formatted['local'][] = $item->range_low . ' - ' . $item->range_high;
- } else {
- $formatted['local'][] = $item->ip_address;
- }
- }
- if ( is_multisite() && current_user_can( 'manage_network' ) ) {
- $formatted['global'] = array();
- $global_whitelist = jetpack_protect_get_global_whitelist();
- if ( false === $global_whitelist ) {
- // If the global whitelist has never been set, check for a legacy option set prior to 3.6.
- $global_whitelist = get_site_option( 'jetpack_protect_whitelist', array() );
- }
- foreach ( $global_whitelist as $item ) {
- if ( $item->range ) {
- $formatted['global'][] = $item->range_low . ' - ' . $item->range_high;
- } else {
- $formatted['global'][] = $item->ip_address;
- }
- }
- }
- return $formatted;
-}
-/**
- * Gets the local Protect whitelist
- *
- * The 'local' part of the whitelist only really applies to multisite installs,
- * which can have a network wide whitelist, as well as a local list that applies
- * only to the current site. On single site installs, there will only be a local
- * whitelist.
- *
- * @return array A list of IP Address objects or an empty array
- */
-function jetpack_protect_get_local_whitelist() {
- $whitelist = Jetpack_Options::get_option( 'protect_whitelist' );
- if ( false === $whitelist ) {
- // The local whitelist has never been set.
- if ( is_multisite() ) {
- // On a multisite, we can check for a legacy site_option that existed prior to v 3.6, or default to an empty array.
- $whitelist = get_site_option( 'jetpack_protect_whitelist', array() );
- } else {
- // On a single site, we can just use an empty array.
- $whitelist = array();
- }
- }
- return $whitelist;
-}
-
-/**
- * Get the global, network-wide whitelist
- *
- * It will revert to the legacy site_option if jetpack_protect_global_whitelist has never been set.
- *
- * @return array
- */
-function jetpack_protect_get_global_whitelist() {
- $whitelist = get_site_option( 'jetpack_protect_global_whitelist' );
- if ( false === $whitelist ) {
- // The global whitelist has never been set. Check for legacy site_option, or default to an empty array.
- $whitelist = get_site_option( 'jetpack_protect_whitelist', array() );
- }
- return $whitelist;
-}
-
-/**
- * Jetpack Protect Save Whitelist.
- *
- * @access public
- * @param mixed $whitelist Whitelist.
- * @param bool $global (default: false) Global.
- * @return Bool.
- */
-function jetpack_protect_save_whitelist( $whitelist, $global = false ) {
- $whitelist_error = false;
- $new_items = array();
- if ( ! is_array( $whitelist ) ) {
- return new WP_Error( 'invalid_parameters', __( 'Expecting an array', 'jetpack' ) );
- }
- if ( $global && ! is_multisite() ) {
- return new WP_Error( 'invalid_parameters', __( 'Cannot use global flag on non-multisites', 'jetpack' ) );
- }
- if ( $global && ! current_user_can( 'manage_network' ) ) {
- return new WP_Error( 'permission_denied', __( 'Only super admins can edit the global whitelist', 'jetpack' ) );
- }
- // Validate each item.
- foreach ( $whitelist as $item ) {
- $item = trim( $item );
- if ( empty( $item ) ) {
- continue;
- }
- $range = false;
- if ( strpos( $item, '-' ) ) {
- $item = explode( '-', $item );
- $range = true;
- }
- $new_item = new stdClass();
- $new_item->range = $range;
- if ( ! empty( $range ) ) {
- $low = trim( $item[0] );
- $high = trim( $item[1] );
- if ( ! filter_var( $low, FILTER_VALIDATE_IP ) || ! filter_var( $high, FILTER_VALIDATE_IP ) ) {
- $whitelist_error = true;
- break;
- }
- if ( ! jetpack_convert_ip_address( $low ) || ! jetpack_convert_ip_address( $high ) ) {
- $whitelist_error = true;
- break;
- }
- $new_item->range_low = $low;
- $new_item->range_high = $high;
- } else {
- if ( ! filter_var( $item, FILTER_VALIDATE_IP ) ) {
- $whitelist_error = true;
- break;
- }
- if ( ! jetpack_convert_ip_address( $item ) ) {
- $whitelist_error = true;
- break;
- }
- $new_item->ip_address = $item;
- }
- $new_items[] = $new_item;
- } // End item loop.
- if ( ! empty( $whitelist_error ) ) {
- return new WP_Error( 'invalid_ip', __( 'One of your IP addresses was not valid.', 'jetpack' ) );
- }
- if ( $global ) {
- update_site_option( 'jetpack_protect_global_whitelist', $new_items );
- // Once a user has saved their global whitelist, we can permanently remove the legacy option.
- delete_site_option( 'jetpack_protect_whitelist' );
- } else {
- Jetpack_Options::update_option( 'protect_whitelist', $new_items );
- }
- return true;
-}
-
-/**
- * Jetpack Protect Get IP.
- *
- * @access public
- * @return IP.
- */
-function jetpack_protect_get_ip() {
- $trusted_header_data = get_site_option( 'trusted_ip_header' );
- if ( isset( $trusted_header_data->trusted_header ) && isset( $_SERVER[ $trusted_header_data->trusted_header ] ) ) {
- $ip = $_SERVER[ $trusted_header_data->trusted_header ];
- $segments = $trusted_header_data->segments;
- $reverse_order = $trusted_header_data->reverse;
- } else {
- $ip = $_SERVER['REMOTE_ADDR'];
- }
-
- if ( ! $ip ) {
- return false;
- }
-
-
-
- $ips = explode( ',', $ip );
- if ( ! isset( $segments ) || ! $segments ) {
- $segments = 1;
- }
- if ( isset( $reverse_order ) && $reverse_order ) {
- $ips = array_reverse( $ips );
- }
- $ip_count = count( $ips );
- if ( 1 === $ip_count ) {
- return jetpack_clean_ip( $ips[0] );
- } elseif ( $ip_count >= $segments ) {
- $the_one = $ip_count - $segments;
- return jetpack_clean_ip( $ips[ $the_one ] );
- } else {
- return jetpack_clean_ip( $_SERVER['REMOTE_ADDR'] );
- }
-}
-
-/**
- * Jetpack Clean IP.
- *
- * @access public
- * @param mixed $ip IP.
- * @return $ip IP.
- */
-function jetpack_clean_ip( $ip ) {
-
- // Some misconfigured servers give back extra info, which comes after "unless"
- $ips = explode( ' unless ', $ip );
- $ip = $ips[0];
-
- $ip = trim( $ip );
- // Check for IPv4 IP cast as IPv6.
- if ( preg_match( '/^::ffff:(\d+\.\d+\.\d+\.\d+)$/', $ip, $matches ) ) {
- $ip = $matches[1];
- }
-
- if ( function_exists( 'parse_url' ) ) {
- $parsed_url = parse_url( $ip );
-
- if ( isset( $parsed_url['host'] ) ) {
- $ip = $parsed_url['host'];
- } elseif ( isset( $parsed_url['path'] ) ) {
- $ip = $parsed_url['path'];
- }
- } else {
- $colon_count = substr_count( $ip, ':' );
- if ( 1 == $colon_count ) {
- $ips = explode( ':', $ip );
- $ip = $ips[0];
- }
- }
-
- return $ip;
-}
-
-/**
- * Checks an IP to see if it is within a private range.
- *
- * @param int $ip IP.
- * @return bool
- */
-function jetpack_protect_ip_is_private( $ip ) {
- // We are dealing with ipv6, so we can simply rely on filter_var.
- if ( false === strpos( $ip, '.' ) ) {
- return ! filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE );
- }
- // We are dealing with ipv4.
- $private_ip4_addresses = array(
- '10.0.0.0|10.255.255.255', // Single class A network.
- '172.16.0.0|172.31.255.255', // 16 contiguous class B network.
- '192.168.0.0|192.168.255.255', // 256 contiguous class C network.
- '169.254.0.0|169.254.255.255', // Link-local address also referred to as Automatic Private IP Addressing.
- '127.0.0.0|127.255.255.255', // localhost.
- );
- $long_ip = ip2long( $ip );
- if ( -1 !== $long_ip ) {
- foreach ( $private_ip4_addresses as $pri_addr ) {
- list ( $start, $end ) = explode( '|', $pri_addr );
- if ( $long_ip >= ip2long( $start ) && $long_ip <= ip2long( $end ) ) {
- return true;
- }
- }
- }
- return false;
-}
-
-/**
- * Uses inet_pton if available to convert an IP address to a binary string.
- * If inet_pton is not available, ip2long will convert the address to an integer.
- * Returns false if an invalid IP address is given.
- *
- * NOTE: ip2long will return false for any ipv6 address. servers that do not support
- * inet_pton will not support ipv6
- *
- * @access public
- * @param mixed $ip IP.
- * @return int|string|bool
- */
-function jetpack_convert_ip_address( $ip ) {
- if ( function_exists( 'inet_pton' ) ) {
- return inet_pton( $ip );
- }
- return ip2long( $ip );
-}
-
-/**
- * Checks that a given IP address is within a given low - high range.
- * Servers that support inet_pton will use that function to convert the ip to number,
- * while other servers will use ip2long.
- *
- * NOTE: servers that do not support inet_pton cannot support ipv6.
- *
- * @access public
- * @param mixed $ip IP.
- * @param mixed $range_low Range Low.
- * @param mixed $range_high Range High.
- * @return Bool.
- */
-function jetpack_protect_ip_address_is_in_range( $ip, $range_low, $range_high ) {
- // The inet_pton will give us binary string of an ipv4 or ipv6.
- // We can then use strcmp to see if the address is in range.
- if ( function_exists( 'inet_pton' ) ) {
- $ip_num = inet_pton( $ip );
- $ip_low = inet_pton( $range_low );
- $ip_high = inet_pton( $range_high );
- if ( $ip_num && $ip_low && $ip_high && strcmp( $ip_num, $ip_low ) >= 0 && strcmp( $ip_num, $ip_high ) <= 0 ) {
- return true;
- }
- // The ip2long will give us an integer of an ipv4 address only. it will produce FALSE for ipv6.
- } else {
- $ip_num = ip2long( $ip );
- $ip_low = ip2long( $range_low );
- $ip_high = ip2long( $range_high );
- if ( $ip_num && $ip_low && $ip_high && $ip_num >= $ip_low && $ip_num <= $ip_high ) {
- return true;
- }
- }
- return false;
-}
diff --git a/plugins/jetpack/modules/protect/transient-cleanup.php b/plugins/jetpack/modules/protect/transient-cleanup.php
deleted file mode 100644
index 8f1c169d..00000000
--- a/plugins/jetpack/modules/protect/transient-cleanup.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-/*
-Adapted from Purge Transients by Seebz
-https://github.com/Seebz/Snippets/tree/master/Wordpress/plugins/purge-transients
-*/
-if ( ! function_exists( 'jp_purge_transients' ) ) {
-
- /**
- * Jetpack Purge Transients.
- *
- * @access public
- * @param string $older_than (default: '1 hour') Older Than.
- * @return void
- */
- function jp_purge_transients( $older_than = '1 hour' ) {
- global $wpdb;
- $older_than_time = strtotime( '-' . $older_than );
- if ( $older_than_time > time() || $older_than_time < 1 ) {
- return false;
- }
- $sql = $wpdb->prepare( "
- SELECT REPLACE(option_name, '_transient_timeout_jpp_', '') AS transient_name
- FROM {$wpdb->options}
- WHERE option_name LIKE '\_transient\_timeout\_jpp\__%%'
- AND option_value < %d
- ", $older_than_time );
- $transients = $wpdb->get_col( $sql );
- $options_names = array();
- foreach ( $transients as $transient ) {
- $options_names[] = '_transient_jpp_' . $transient;
- $options_names[] = '_transient_timeout_jpp_' . $transient;
- }
- if ( $options_names ) {
- $option_names_string = implode( ', ', array_fill( 0, count( $options_names ), '%s' ) );
- $delete_sql = "DELETE FROM {$wpdb->options} WHERE option_name IN ($option_names_string)";
- $delete_sql = call_user_func_array( array( $wpdb, 'prepare' ), array_merge( array( $delete_sql ), $options_names ) );
- $result = $wpdb->query( $delete_sql );
- if ( ! $result ) {
- return false;
- }
- }
- return;
- }
-}
-
-/**
- * Jetpack Purge Transients Activation.
- *
- * @access public
- * @return void
- */
-function jp_purge_transients_activation() {
- if ( ! wp_next_scheduled( 'jp_purge_transients_cron' ) ) {
- wp_schedule_event( time(), 'daily', 'jp_purge_transients_cron' );
- }
-}
-add_action( 'admin_init', 'jp_purge_transients_activation' );
-add_action( 'jp_purge_transients_cron', 'jp_purge_transients' );
diff --git a/plugins/jetpack/modules/publicize.php b/plugins/jetpack/modules/publicize.php
deleted file mode 100644
index 20c1474e..00000000
--- a/plugins/jetpack/modules/publicize.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-/**
- * Module Name: Publicize
- * Module Description: Publicize makes it easy to share your site’s posts on several social media networks automatically when you publish a new post.
- * Sort Order: 10
- * Recommendation Order: 7
- * First Introduced: 2.0
- * Requires Connection: Yes
- * Auto Activate: Yes
- * Module Tags: Social, Recommended
- * Feature: Engagement
- * Additional Search Queries: facebook, jetpack publicize, twitter, tumblr, linkedin, social, tweet, connections, sharing, social media, automated, automated sharing, auto publish, auto tweet and like, auto tweet, facebook auto post, facebook posting
- */
-
-class Jetpack_Publicize {
-
- public $in_jetpack = true;
-
- function __construct() {
- global $publicize_ui;
-
- $this->in_jetpack = ( class_exists( 'Jetpack' ) && method_exists( 'Jetpack', 'enable_module_configurable' ) ) ? true : false;
-
- if ( $this->in_jetpack && method_exists( 'Jetpack', 'module_configuration_load' ) ) {
- Jetpack::enable_module_configurable( __FILE__ );
- Jetpack::module_configuration_load( __FILE__, array( $this, 'jetpack_configuration_load' ) );
- }
-
- require_once dirname( __FILE__ ) . '/publicize/publicize.php';
-
- if ( $this->in_jetpack )
- require_once dirname( __FILE__ ) . '/publicize/publicize-jetpack.php';
- else {
- require_once dirname( dirname( __FILE__ ) ) . '/mu-plugins/keyring/keyring.php';
- require_once dirname( __FILE__ ) . '/publicize/publicize-wpcom.php';
- }
-
- require_once dirname( __FILE__ ) . '/publicize/ui.php';
- $publicize_ui = new Publicize_UI();
- $publicize_ui->in_jetpack = $this->in_jetpack;
-
- // Jetpack specific checks / hooks
- if ( $this->in_jetpack ) {
- // if sharedaddy isn't active, the sharing menu hasn't been added yet
- $active = Jetpack::get_active_modules();
- if ( in_array( 'publicize', $active ) && ! in_array( 'sharedaddy', $active ) ) {
- add_action( 'admin_menu', array( &$publicize_ui, 'sharing_menu' ) );
- }
- }
- }
-
- function jetpack_configuration_load() {
- wp_safe_redirect( menu_page_url( 'sharing', false ) );
- exit;
- }
-}
-
-global $publicize_ui;
-new Jetpack_Publicize;
-
-if( ! ( defined( 'IS_WPCOM' ) && IS_WPCOM ) && ! function_exists( 'publicize_init' ) ) {
-/**
- * Helper for grabbing a Publicize object from the "front-end" (non-admin) of
- * a site. Normally Publicize is only loaded in wp-admin, so there's a little
- * set up that you might need to do if you want to use it on the front end.
- * Just call this function and it returns a Publicize object.
- *
- * @return Publicize Object
- */
-function publicize_init() {
- global $publicize;
-
- if ( ! class_exists( 'Publicize' ) ) {
- require_once dirname( __FILE__ ) . '/publicize/publicize.php';
- }
-
- return $publicize;
-}
-
-}
diff --git a/plugins/jetpack/modules/publicize/enhanced-open-graph.php b/plugins/jetpack/modules/publicize/enhanced-open-graph.php
deleted file mode 100644
index ba60b821..00000000
--- a/plugins/jetpack/modules/publicize/enhanced-open-graph.php
+++ /dev/null
@@ -1,129 +0,0 @@
-<?php
-if ( ! class_exists( 'Jetpack_Media_Summary' ) ) {
- if ( defined('IS_WPCOM') && IS_WPCOM ) {
- include WP_CONTENT_DIR . '/lib/class.wpcom-media-summary.php';
- } else {
- jetpack_require_lib( 'class.media-summary' );
- }
-}
-
-/**
- * Better OG Image Tags for Image Post Formats
- */
-function enhanced_og_image( $tags ) {
- if ( !is_singular() || post_password_required() )
- return $tags;
-
- global $post;
-
- // Always favor featured images.
- if ( enhanced_og_has_featured_image( $post->ID ) )
- return $tags;
-
- $summary = Jetpack_Media_Summary::get( $post->ID );
-
- if ( 'image' != $summary['type'] )
- return $tags;
-
- $tags['og:image'] = $summary['image'];
- $tags['og:image:secure_url'] = $summary['secure']['image'];
-
- return $tags;
-}
-add_filter( 'jetpack_open_graph_tags', 'enhanced_og_image' );
-
-/**
- * Better OG Image Tags for Gallery Post Formats
- */
-function enhanced_og_gallery( $tags ) {
- if ( !is_singular() || post_password_required() )
- return $tags;
-
- global $post;
-
- // Always favor featured images.
- if ( enhanced_og_has_featured_image( $post->ID ) )
- return $tags;
-
- $summary = Jetpack_Media_Summary::get( $post->ID );
-
- if ( 'gallery' != $summary['type'] )
- return $tags;
-
- if( !isset( $summary['images'] ) || !is_array( $summary['images'] ) || empty( $summary['images'] ) )
- return $tags;
-
- $images = $secures = array();
- foreach ( $summary['images'] as $i => $image ) {
- $images[] = $image['url'];
- $secures[] = $summary['secure']['images'][$i]['url'];
- }
-
- $tags['og:image'] = $images;
- $tags['og:image:secure_url'] = $secures;
-
- return $tags;
-}
-add_filter( 'jetpack_open_graph_tags', 'enhanced_og_gallery' );
-
-/**
- * Allows VideoPress, YouTube, and Vimeo videos to play inline on Facebook
- */
-function enhanced_og_video( $tags ) {
- if ( !is_singular() || post_password_required() )
- return $tags;
-
- global $post;
-
- // Always favor featured images.
- if ( enhanced_og_has_featured_image( $post->ID ) )
- return $tags;
-
- $summary = Jetpack_Media_Summary::get( $post->ID );
-
- if ( 'video' != $summary['type'] ) {
- if ( $summary['count']['video'] > 0 && $summary['count']['image'] < 1 ) {
- $tags['og:image'] = $summary['image'];
- $tags['og:image:secure_url'] = $summary['secure']['image'];
- }
- return $tags;
- }
-
- $tags['og:image'] = $summary['image'];
- $tags['og:image:secure_url'] = $summary['secure']['image'];
-
- // This should be html by default for youtube/vimeo, since we're linking to HTML pages.
- $tags['og:video:type'] = isset( $summary['video_type'] ) ? $summary['video_type'] : 'text/html';
-
- $video_url = $summary['video'];
- $secure_video_url = $summary['secure']['video'];
-
- if ( preg_match( '/((youtube|vimeo)\.com|youtu.be)/', $video_url ) ) {
- if ( strstr( $video_url, 'youtube' ) ) {
- $id = jetpack_get_youtube_id( $video_url );
- $video_url = 'http://www.youtube.com/embed/' . $id;
- $secure_video_url = 'https://www.youtube.com/embed/' . $id;
- } else if ( strstr( $video_url, 'vimeo' ) ) {
- preg_match( '|vimeo\.com/(\d+)/?$|i', $video_url, $match );
- $id = (int) $match[1];
- $video_url = 'http://vimeo.com/moogaloop.swf?clip_id=' . $id;
- $secure_video_url = 'https://vimeo.com/moogaloop.swf?clip_id=' . $id;
- }
- }
-
- $tags['og:video'] = $video_url;
- $tags['og:video:secure_url'] = $secure_video_url;
-
- if ( empty( $post->post_title ) )
- $tags['og:title'] = sprintf( __( 'Video on %s', 'jetpack' ), get_option( 'blogname' ) );
-
- return $tags;
-}
-add_filter( 'jetpack_open_graph_tags', 'enhanced_og_video' );
-
-function enhanced_og_has_featured_image( $post_id ) {
- $featured = Jetpack_PostImages::from_thumbnail( $post_id, 200, 200 );
- if ( !empty( $featured ) && count( $featured ) > 0 )
- return true;
- return false;
-}
diff --git a/plugins/jetpack/modules/publicize/publicize-jetpack.php b/plugins/jetpack/modules/publicize/publicize-jetpack.php
deleted file mode 100644
index b2ec20e8..00000000
--- a/plugins/jetpack/modules/publicize/publicize-jetpack.php
+++ /dev/null
@@ -1,753 +0,0 @@
-<?php
-
-class Publicize extends Publicize_Base {
-
- function __construct() {
- parent::__construct();
-
- add_filter( 'jetpack_xmlrpc_methods', array( $this, 'register_update_publicize_connections_xmlrpc_method' ) );
-
- add_action( 'load-settings_page_sharing', array( $this, 'admin_page_load' ), 9 );
-
- add_action( 'wp_ajax_publicize_tumblr_options_page', array( $this, 'options_page_tumblr' ) );
- add_action( 'wp_ajax_publicize_facebook_options_page', array( $this, 'options_page_facebook' ) );
- add_action( 'wp_ajax_publicize_twitter_options_page', array( $this, 'options_page_twitter' ) );
- add_action( 'wp_ajax_publicize_linkedin_options_page', array( $this, 'options_page_linkedin' ) );
-
- add_action( 'wp_ajax_publicize_tumblr_options_save', array( $this, 'options_save_tumblr' ) );
- add_action( 'wp_ajax_publicize_facebook_options_save', array( $this, 'options_save_facebook' ) );
- add_action( 'wp_ajax_publicize_twitter_options_save', array( $this, 'options_save_twitter' ) );
- add_action( 'wp_ajax_publicize_linkedin_options_save', array( $this, 'options_save_linkedin' ) );
-
- add_action( 'load-settings_page_sharing', array( $this, 'force_user_connection' ) );
-
- add_filter( 'jetpack_published_post_flags', array( $this, 'set_post_flags' ), 10, 2 );
-
- add_action( 'wp_insert_post', array( $this, 'save_publicized' ), 11, 3 );
-
- add_filter( 'jetpack_twitter_cards_site_tag', array( $this, 'enhaced_twitter_cards_site_tag' ) );
-
- add_action( 'publicize_save_meta', array( $this, 'save_publicized_twitter_account' ), 10, 4 );
- add_action( 'publicize_save_meta', array( $this, 'save_publicized_facebook_account' ), 10, 4 );
-
- add_action( 'connection_disconnected', array( $this, 'add_disconnect_notice' ) );
-
- add_filter( 'jetpack_sharing_twitter_via', array( $this, 'get_publicized_twitter_account' ), 10, 2 );
-
- include_once( JETPACK__PLUGIN_DIR . 'modules/publicize/enhanced-open-graph.php' );
-
- jetpack_require_lib( 'class.jetpack-keyring-service-helper' );
- }
-
- function add_disconnect_notice() {
- add_action( 'admin_notices', array( $this, 'display_disconnected' ) );
- }
-
- function force_user_connection() {
- global $current_user;
- $user_token = Jetpack_Data::get_access_token( $current_user->ID );
- $is_user_connected = $user_token && ! is_wp_error( $user_token );
-
- // If the user is already connected via Jetpack, then we're good
- if ( $is_user_connected ) {
- return;
- }
-
- // If they're not connected, then remove the Publicize UI and tell them they need to connect first
- global $publicize_ui;
- remove_action( 'pre_admin_screen_sharing', array( $publicize_ui, 'admin_page' ) );
-
- // Do we really need `admin_styles`? With the new admin UI, it's breaking some bits.
- // Jetpack::init()->admin_styles();
- add_action( 'pre_admin_screen_sharing', array( $this, 'admin_page_warning' ), 1 );
- }
-
- function admin_page_warning() {
- $jetpack = Jetpack::init();
- $blog_name = get_bloginfo( 'blogname' );
- if ( empty( $blog_name ) ) {
- $blog_name = home_url( '/' );
- }
-
- ?>
- <div id="message" class="updated jetpack-message jp-connect">
- <div class="jetpack-wrap-container">
- <div class="jetpack-text-container">
- <p><?php printf(
- /* translators: %s is the name of the blog */
- esc_html( wptexturize( __( "To use Publicize, you'll need to link your %s account to your WordPress.com account using the link below.", 'jetpack' ) ) ),
- '<strong>' . esc_html( $blog_name ) . '</strong>'
- ); ?></p>
- <p><?php echo esc_html( wptexturize( __( "If you don't have a WordPress.com account yet, you can sign up for free in just a few seconds.", 'jetpack' ) ) ); ?></p>
- </div>
- <div class="jetpack-install-container">
- <p class="submit"><a
- href="<?php echo $jetpack->build_connect_url( false, menu_page_url( 'sharing', false ) ); ?>"
- class="button-connector"
- id="wpcom-connect"><?php esc_html_e( 'Link account with WordPress.com', 'jetpack' ); ?></a>
- </p>
- <p class="jetpack-install-blurb">
- <?php jetpack_render_tos_blurb(); ?>
- </p>
- </div>
- </div>
- </div>
- <?php
- }
-
- /**
- * Remove a Publicize connection
- */
- function disconnect( $service_name, $connection_id, $_blog_id = false, $_user_id = false, $force_delete = false ) {
- return Jetpack_Keyring_Service_Helper::disconnect( $service_name, $connection_id, $_blog_id, $_user_id, $force_delete );
- }
-
- function receive_updated_publicize_connections( $publicize_connections ) {
- Jetpack_Options::update_option( 'publicize_connections', $publicize_connections );
-
- return true;
- }
-
- function register_update_publicize_connections_xmlrpc_method( $methods ) {
- return array_merge( $methods, array(
- 'jetpack.updatePublicizeConnections' => array( $this, 'receive_updated_publicize_connections' ),
- ) );
- }
-
- function get_all_connections() {
- $connections = Jetpack_Options::get_option( 'publicize_connections' );
- if ( isset( $connections['google_plus'] ) ) {
- unset( $connections['google_plus'] );
- }
- return $connections;
- }
-
- function get_connections( $service_name, $_blog_id = false, $_user_id = false ) {
- if ( false === $_user_id ) {
- $_user_id = $this->user_id();
- }
-
- $connections = $this->get_all_connections();
- $connections_to_return = array();
-
- if ( ! empty( $connections ) && is_array( $connections ) ) {
- if ( ! empty( $connections[ $service_name ] ) ) {
- foreach ( $connections[ $service_name ] as $id => $connection ) {
- if ( 0 == $connection['connection_data']['user_id'] || $_user_id == $connection['connection_data']['user_id'] ) {
- $connections_to_return[ $id ] = $connection;
- }
- }
- }
-
- return $connections_to_return;
- }
-
- return false;
- }
-
- function get_all_connections_for_user() {
- $connections = $this->get_all_connections();
-
- $connections_to_return = array();
- if ( ! empty( $connections ) ) {
- foreach ( (array) $connections as $service_name => $connections_for_service ) {
- foreach ( $connections_for_service as $id => $connection ) {
- $user_id = intval( $connection['connection_data']['user_id'] );
- // phpcs:ignore WordPress.PHP.YodaConditions.NotYoda
- if ( $user_id === 0 || $this->user_id() === $user_id ) {
- $connections_to_return[ $service_name ][ $id ] = $connection;
- }
- }
- }
-
- return $connections_to_return;
- }
-
- return false;
- }
-
- function get_connection_id( $connection ) {
- return $connection['connection_data']['id'];
- }
-
- function get_connection_unique_id( $connection ) {
- return $connection['connection_data']['token_id'];
- }
-
- function get_connection_meta( $connection ) {
- $connection['user_id'] = $connection['connection_data']['user_id']; // Allows for shared connections
- return $connection;
- }
-
- function admin_page_load() {
- if ( isset( $_GET['action'] ) && 'error' === $_GET['action'] ) {
- add_action( 'pre_admin_screen_sharing', array( $this, 'display_connection_error' ), 9 );
- }
- }
-
- function display_connection_error() {
- $code = false;
- if ( isset( $_GET['service'] ) ) {
- $service_name = $_GET['service'];
- $error = sprintf( __( 'There was a problem connecting to %s to create an authorized connection. Please try again in a moment.', 'jetpack' ), Publicize::get_service_label( $service_name ) );
- } else {
- if ( isset( $_GET['publicize_error'] ) ) {
- $code = strtolower( $_GET['publicize_error'] );
- switch ( $code ) {
- case '400':
- $error = __( 'An invalid request was made. This normally means that something intercepted or corrupted the request from your server to the Jetpack Server. Try again and see if it works this time.', 'jetpack' );
- break;
- case 'secret_mismatch':
- $error = __( 'We could not verify that your server is making an authorized request. Please try again, and make sure there is nothing interfering with requests from your server to the Jetpack Server.', 'jetpack' );
- break;
- case 'empty_blog_id':
- $error = __( 'No blog_id was included in your request. Please try disconnecting Jetpack from WordPress.com and then reconnecting it. Once you have done that, try connecting Publicize again.', 'jetpack' );
- break;
- case 'empty_state':
- $error = sprintf( __( 'No user information was included in your request. Please make sure that your user account has connected to Jetpack. Connect your user account by going to the <a href="%s">Jetpack page</a> within wp-admin.', 'jetpack' ), Jetpack::admin_url() );
- break;
- default:
- $error = __( 'Something which should never happen, happened. Sorry about that. If you try again, maybe it will work.', 'jetpack' );
- break;
- }
- } else {
- $error = __( 'There was a problem connecting with Publicize. Please try again in a moment.', 'jetpack' );
- }
- }
- // Using the same formatting/style as Jetpack::admin_notices() error
- ?>
- <div id="message" class="jetpack-message jetpack-err">
- <div class="squeezer">
- <h2><?php echo wp_kses( $error, array( 'a' => array( 'href' => true ),
- 'code' => true,
- 'strong' => true,
- 'br' => true,
- 'b' => true
- ) ); ?></h2>
- <?php if ( $code ) : ?>
- <p><?php printf( __( 'Error code: %s', 'jetpack' ), esc_html( stripslashes( $code ) ) ); ?></p>
- <?php endif; ?>
- </div>
- </div>
- <?php
- }
-
- function display_disconnected() {
- echo "<div class='updated'>\n";
- echo '<p>' . esc_html( __( 'That connection has been removed.', 'jetpack' ) ) . "</p>\n";
- echo "</div>\n\n";
- }
-
- function globalization() {
- if ( 'on' == $_REQUEST['global'] ) {
- $globalize_connection = $_REQUEST['connection'];
- if ( ! current_user_can( $this->GLOBAL_CAP ) ) {
- return;
- }
-
- $this->globalize_connection( $globalize_connection );
- }
- }
-
- function globalize_connection( $connection_id ) {
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client();
- $xml->query( 'jetpack.globalizePublicizeConnection', $connection_id, 'globalize' );
-
- if ( ! $xml->isError() ) {
- $response = $xml->getResponse();
- $this->receive_updated_publicize_connections( $response );
- }
- }
-
- function unglobalize_connection( $connection_id ) {
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client();
- $xml->query( 'jetpack.globalizePublicizeConnection', $connection_id, 'unglobalize' );
-
- if ( ! $xml->isError() ) {
- $response = $xml->getResponse();
- $this->receive_updated_publicize_connections( $response );
- }
- }
-
- function connect_url( $service_name, $for = 'publicize' ) {
- return Jetpack_Keyring_Service_Helper::connect_url( $service_name, $for );
- }
-
- function refresh_url( $service_name, $for = 'publicize' ) {
- return Jetpack_Keyring_Service_Helper::refresh_url( $service_name, $for );
- }
-
- function disconnect_url( $service_name, $id ) {
- return Jetpack_Keyring_Service_Helper::disconnect_url( $service_name, $id );
- }
-
- /**
- * Get social networks, either all available or only those that the site is connected to.
- *
- * @since 2.0.0
- * @since 6.6.0 Removed Path. Service closed October 2018.
- *
- * @param string $filter Select the list of services that will be returned. Defaults to 'all', accepts 'connected'.
- *
- * @return array List of social networks.
- */
- function get_services( $filter = 'all', $_blog_id = false, $_user_id = false ) {
- $services = array(
- 'facebook' => array(),
- 'twitter' => array(),
- 'linkedin' => array(),
- 'tumblr' => array(),
- );
-
- if ( 'all' == $filter ) {
- return $services;
- } else {
- $connected_services = array();
- foreach ( $services as $service_name => $empty ) {
- $connections = $this->get_connections( $service_name, $_blog_id, $_user_id );
- if ( $connections ) {
- $connected_services[ $service_name ] = $connections;
- }
- }
- return $connected_services;
- }
- }
-
- function get_connection( $service_name, $id, $_blog_id = false, $_user_id = false ) {
- // Stub
- }
-
- function flag_post_for_publicize( $new_status, $old_status, $post ) {
- if ( ! $this->post_type_is_publicizeable( $post->post_type ) ) {
- return;
- }
-
- if ( 'publish' == $new_status && 'publish' != $old_status ) {
- /**
- * Determines whether a post being published gets publicized.
- *
- * Side-note: Possibly our most alliterative filter name.
- *
- * @module publicize
- *
- * @since 4.1.0
- *
- * @param bool $should_publicize Should the post be publicized? Default to true.
- * @param WP_POST $post Current Post object.
- */
- $should_publicize = apply_filters( 'publicize_should_publicize_published_post', true, $post );
-
- if ( $should_publicize ) {
- update_post_meta( $post->ID, $this->PENDING, true );
- }
- }
- }
-
- function test_connection( $service_name, $connection ) {
-
- $id = $this->get_connection_id( $connection );
-
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client();
- $xml->query( 'jetpack.testPublicizeConnection', $id );
-
- // Bail if all is well
- if ( ! $xml->isError() ) {
- return true;
- }
-
- $xml_response = $xml->getResponse();
- $connection_test_message = $xml_response['faultString'];
-
- // Set up refresh if the user can
- $user_can_refresh = current_user_can( $this->GLOBAL_CAP );
- if ( $user_can_refresh ) {
- $nonce = wp_create_nonce( "keyring-request-" . $service_name );
- $refresh_text = sprintf( _x( 'Refresh connection with %s', 'Refresh connection with {social media service}', 'jetpack' ), $this->get_service_label( $service_name ) );
- $refresh_url = $this->refresh_url( $service_name );
- }
-
- $error_data = array(
- 'user_can_refresh' => $user_can_refresh,
- 'refresh_text' => $refresh_text,
- 'refresh_url' => $refresh_url
- );
-
- return new WP_Error( 'pub_conn_test_failed', $connection_test_message, $error_data );
- }
-
- /**
- * Checks if post has already been shared by Publicize in the past.
- *
- * Jetpack uses two methods:
- * 1. A POST_DONE . 'all' postmeta flag, or
- * 2. if the post has already been published.
- *
- * @since 6.7.0
- *
- * @param integer $post_id Optional. Post ID to query connection status for: will use current post if missing.
- *
- * @return bool True if post has already been shared by Publicize, false otherwise.
- */
- public function post_is_done_sharing( $post_id = null ) {
- // Defaults to current post if $post_id is null.
- $post = get_post( $post_id );
- if ( is_null( $post ) ) {
- return false;
- }
-
- return 'publish' == $post->post_status || get_post_meta( $post->ID, $this->POST_DONE . 'all', true );
- }
-
- /**
- * Save a flag locally to indicate that this post has already been Publicized via the selected
- * connections.
- */
- function save_publicized( $post_ID, $post = null, $update = null ) {
- if ( is_null( $post ) ) {
- return;
- }
- // Only do this when a post transitions to being published
- if ( get_post_meta( $post->ID, $this->PENDING ) && $this->post_type_is_publicizeable( $post->post_type ) ) {
- $connected_services = $this->get_all_connections();
- if ( ! empty( $connected_services ) ) {
- /**
- * Fires when a post is saved that has is marked as pending publicizing
- *
- * @since 4.1.0
- *
- * @param int The post ID
- */
- do_action_deprecated( 'jetpack_publicize_post', $post->ID, '4.8.0', 'jetpack_published_post_flags' );
- }
- delete_post_meta( $post->ID, $this->PENDING );
- update_post_meta( $post->ID, $this->POST_DONE . 'all', true );
- }
- }
-
- function set_post_flags( $flags, $post ) {
- $flags['publicize_post'] = false;
- if ( ! $this->post_type_is_publicizeable( $post->post_type ) ) {
- return $flags;
- }
- /** This filter is already documented in modules/publicize/publicize-jetpack.php */
- if ( ! apply_filters( 'publicize_should_publicize_published_post', true, $post ) ) {
- return $flags;
- }
-
- $connected_services = $this->get_all_connections();
-
- if ( empty( $connected_services ) ) {
- return $flags;
- }
-
- $flags['publicize_post'] = true;
-
- return $flags;
- }
-
- /**
- * Options Code
- */
-
- function options_page_facebook() {
- $connected_services = $this->get_all_connections();
- $connection = $connected_services['facebook'][ $_REQUEST['connection'] ];
- $options_to_show = ( ! empty( $connection['connection_data']['meta']['options_responses'] ) ? $connection['connection_data']['meta']['options_responses'] : false );
-
- // Nonce check
- check_admin_referer( 'options_page_facebook_' . $_REQUEST['connection'] );
-
- $pages = ( ! empty( $options_to_show[1]['data'] ) ? $options_to_show[1]['data'] : false );
-
- $page_selected = false;
- if ( ! empty( $connection['connection_data']['meta']['facebook_page'] ) ) {
- $found = false;
- if ( $pages && isset( $pages->data ) && is_array( $pages->data ) ) {
- foreach ( $pages->data as $page ) {
- if ( $page->id == $connection['connection_data']['meta']['facebook_page'] ) {
- $found = true;
- break;
- }
- }
- }
-
- if ( $found ) {
- $page_selected = $connection['connection_data']['meta']['facebook_page'];
- }
- }
-
- ?>
-
- <div id="thickbox-content">
-
- <?php
- ob_start();
- Publicize_UI::connected_notice( 'Facebook' );
- $update_notice = ob_get_clean();
-
- if ( ! empty( $update_notice ) ) {
- echo $update_notice;
- }
- $page_info_message = sprintf(
- __( 'Facebook supports Publicize connections to Facebook Pages, but not to Facebook Profiles. <a href="%s">Learn More about Publicize for Facebook</a>', 'jetpack' ),
- 'https://jetpack.com/support/publicize/facebook'
- );
-
- if ( $pages ) : ?>
- <p><?php _e( 'Publicize to my <strong>Facebook Page</strong>:', 'jetpack' ); ?></p>
- <table id="option-fb-fanpage">
- <tbody>
-
- <?php foreach ( $pages as $i => $page ) : ?>
- <?php if ( ! ( $i % 2 ) ) : ?>
- <tr>
- <?php endif; ?>
- <td class="radio"><input type="radio" name="option" data-type="page"
- id="<?php echo esc_attr( $page['id'] ) ?>"
- value="<?php echo esc_attr( $page['id'] ) ?>" <?php checked( $page_selected && $page_selected == $page['id'], true ); ?> />
- </td>
- <td class="thumbnail"><label for="<?php echo esc_attr( $page['id'] ) ?>"><img
- src="<?php echo esc_url( str_replace( '_s', '_q', $page['picture']['data']['url'] ) ) ?>"
- width="50" height="50"/></label></td>
- <td class="details">
- <label for="<?php echo esc_attr( $page['id'] ) ?>">
- <span class="name"><?php echo esc_html( $page['name'] ) ?></span><br/>
- <span class="category"><?php echo esc_html( $page['category'] ) ?></span>
- </label>
- </td>
- <?php if ( ( $i % 2 ) || ( $i == count( $pages ) - 1 ) ): ?>
- </tr>
- <?php endif; ?>
- <?php endforeach; ?>
-
- </tbody>
- </table>
-
- <?php Publicize_UI::global_checkbox( 'facebook', $_REQUEST['connection'] ); ?>
- <p style="text-align: center;">
- <input type="submit" value="<?php esc_attr_e( 'OK', 'jetpack' ) ?>"
- class="button fb-options save-options" name="save"
- data-connection="<?php echo esc_attr( $_REQUEST['connection'] ); ?>"
- rel="<?php echo wp_create_nonce( 'save_fb_token_' . $_REQUEST['connection'] ) ?>"/>
- </p><br/>
- <p><?php echo $page_info_message; ?></p>
- <?php else: ?>
- <div>
- <p><?php echo $page_info_message; ?></p>
- <p><?php printf( __( '<a class="button" href="%s" target="%s">Create a Facebook page</a> to get started.', 'jetpack' ), 'https://www.facebook.com/pages/creation/', '_blank noopener noreferrer' ); ?></p>
- </div>
- <?php endif; ?>
- </div>
- <?php
- }
-
- function options_save_facebook() {
- // Nonce check
- check_admin_referer( 'save_fb_token_' . $_REQUEST['connection'] );
-
- // Check for a numeric page ID
- $page_id = $_POST['selected_id'];
- if ( ! ctype_digit( $page_id ) ) {
- die( 'Security check' );
- }
-
- if ( 'page' != $_POST['type'] || ! isset( $_POST['selected_id'] ) ) {
- return;
- }
-
- // Publish to Page
- $options = array(
- 'facebook_page' => $page_id,
- 'facebook_profile' => null
- );
-
- $this->set_remote_publicize_options( $_POST['connection'], $options );
- }
-
- function options_page_tumblr() {
- // Nonce check
- check_admin_referer( 'options_page_tumblr_' . $_REQUEST['connection'] );
-
- $connected_services = $this->get_all_connections();
- $connection = $connected_services['tumblr'][ $_POST['connection'] ];
- $options_to_show = $connection['connection_data']['meta']['options_responses'];
- $request = $options_to_show[0];
-
- $blogs = $request['response']['user']['blogs'];
-
- $blog_selected = false;
-
- if ( ! empty( $connection['connection_data']['meta']['tumblr_base_hostname'] ) ) {
- foreach ( $blogs as $blog ) {
- if ( $connection['connection_data']['meta']['tumblr_base_hostname'] == $this->get_basehostname( $blog['url'] ) ) {
- $blog_selected = $connection['connection_data']['meta']['tumblr_base_hostname'];
- break;
- }
- }
-
- }
-
- // Use their Primary blog if they haven't selected one yet
- if ( ! $blog_selected ) {
- foreach ( $blogs as $blog ) {
- if ( $blog['primary'] ) {
- $blog_selected = $this->get_basehostname( $blog['url'] );
- }
- }
- } ?>
-
- <div id="thickbox-content">
-
- <?php
- ob_start();
- Publicize_UI::connected_notice( 'Tumblr' );
- $update_notice = ob_get_clean();
-
- if ( ! empty( $update_notice ) ) {
- echo $update_notice;
- }
- ?>
-
- <p><?php _e( 'Publicize to my <strong>Tumblr blog</strong>:', 'jetpack' ); ?></p>
-
- <ul id="option-tumblr-blog">
-
- <?php
- foreach ( $blogs as $blog ) {
- $url = $this->get_basehostname( $blog['url'] ); ?>
- <li>
- <input type="radio" name="option" data-type="blog" id="<?php echo esc_attr( $url ) ?>"
- value="<?php echo esc_attr( $url ) ?>" <?php checked( $blog_selected == $url, true ); ?> />
- <label for="<?php echo esc_attr( $url ) ?>"><span
- class="name"><?php echo esc_html( $blog['title'] ) ?></span></label>
- </li>
- <?php } ?>
-
- </ul>
-
- <?php Publicize_UI::global_checkbox( 'tumblr', $_REQUEST['connection'] ); ?>
-
- <p style="text-align: center;">
- <input type="submit" value="<?php esc_attr_e( 'OK', 'jetpack' ) ?>"
- class="button tumblr-options save-options" name="save"
- data-connection="<?php echo esc_attr( $_REQUEST['connection'] ); ?>"
- rel="<?php echo wp_create_nonce( 'save_tumblr_blog_' . $_REQUEST['connection'] ) ?>"/>
- </p> <br/>
- </div>
-
- <?php
- }
-
- function get_basehostname( $url ) {
- return parse_url( $url, PHP_URL_HOST );
- }
-
- function options_save_tumblr() {
- // Nonce check
- check_admin_referer( 'save_tumblr_blog_' . $_REQUEST['connection'] );
- $options = array( 'tumblr_base_hostname' => $_POST['selected_id'] );
-
- $this->set_remote_publicize_options( $_POST['connection'], $options );
-
- }
-
- function set_remote_publicize_options( $id, $options ) {
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client();
- $xml->query( 'jetpack.setPublicizeOptions', $id, $options );
-
- if ( ! $xml->isError() ) {
- $response = $xml->getResponse();
- Jetpack_Options::update_option( 'publicize_connections', $response );
- $this->globalization();
- }
- }
-
- function options_page_twitter() {
- Publicize_UI::options_page_other( 'twitter' );
- }
-
- function options_page_linkedin() {
- Publicize_UI::options_page_other( 'linkedin' );
- }
-
- function options_save_twitter() {
- $this->options_save_other( 'twitter' );
- }
-
- function options_save_linkedin() {
- $this->options_save_other( 'linkedin' );
- }
-
- function options_save_other( $service_name ) {
- // Nonce check
- check_admin_referer( 'save_' . $service_name . '_token_' . $_REQUEST['connection'] );
- $this->globalization();
- }
-
- /**
- * If there's only one shared connection to Twitter set it as twitter:site tag.
- */
- function enhaced_twitter_cards_site_tag( $tag ) {
- $custom_site_tag = get_option( 'jetpack-twitter-cards-site-tag' );
- if ( ! empty( $custom_site_tag ) ) {
- return $tag;
- }
- if ( ! $this->is_enabled( 'twitter' ) ) {
- return $tag;
- }
- $connections = $this->get_connections( 'twitter' );
- foreach ( $connections as $connection ) {
- $connection_meta = $this->get_connection_meta( $connection );
- if ( 0 == $connection_meta['connection_data']['user_id'] ) {
- // If the connection is shared
- return $this->get_display_name( 'twitter', $connection );
- }
- }
-
- return $tag;
- }
-
- function save_publicized_twitter_account( $submit_post, $post_id, $service_name, $connection ) {
- if ( 'twitter' == $service_name && $submit_post ) {
- $connection_meta = $this->get_connection_meta( $connection );
- $publicize_twitter_user = get_post_meta( $post_id, '_publicize_twitter_user' );
- if ( empty( $publicize_twitter_user ) || 0 != $connection_meta['connection_data']['user_id'] ) {
- update_post_meta( $post_id, '_publicize_twitter_user', $this->get_display_name( 'twitter', $connection ) );
- }
- }
- }
-
- function get_publicized_twitter_account( $account, $post_id ) {
- if ( ! empty( $account ) ) {
- return $account;
- }
- $account = get_post_meta( $post_id, '_publicize_twitter_user', true );
- if ( ! empty( $account ) ) {
- return $account;
- }
-
- return '';
- }
-
- /**
- * Save the Publicized Facebook account when publishing a post
- * Use only Personal accounts, not Facebook Pages
- */
- function save_publicized_facebook_account( $submit_post, $post_id, $service_name, $connection ) {
- $connection_meta = $this->get_connection_meta( $connection );
- if ( 'facebook' == $service_name && isset( $connection_meta['connection_data']['meta']['facebook_profile'] ) && $submit_post ) {
- $publicize_facebook_user = get_post_meta( $post_id, '_publicize_facebook_user' );
- if ( empty( $publicize_facebook_user ) || 0 != $connection_meta['connection_data']['user_id'] ) {
- $profile_link = $this->get_profile_link( 'facebook', $connection );
-
- if ( false !== $profile_link ) {
- update_post_meta( $post_id, '_publicize_facebook_user', $profile_link );
- }
- }
- }
- }
-}
diff --git a/plugins/jetpack/modules/publicize/publicize.php b/plugins/jetpack/modules/publicize/publicize.php
deleted file mode 100644
index 73632d4e..00000000
--- a/plugins/jetpack/modules/publicize/publicize.php
+++ /dev/null
@@ -1,1249 +0,0 @@
-<?php
-
-abstract class Publicize_Base {
-
- /**
- * Services that are currently connected to the given user
- * through publicize.
- */
- public $connected_services = array();
-
- /**
- * Services that are supported by publicize. They don't
- * necessarily need to be connected to the current user.
- */
- public $services;
-
- /**
- * key names for post meta
- */
- public $ADMIN_PAGE = 'wpas';
- public $POST_MESS = '_wpas_mess';
- public $POST_SKIP = '_wpas_skip_'; // connection id appended to indicate that a connection should NOT be publicized to
- public $POST_DONE = '_wpas_done_'; // connection id appended to indicate a connection has already been publicized to
- public $USER_AUTH = 'wpas_authorize';
- public $USER_OPT = 'wpas_';
- public $PENDING = '_publicize_pending'; // ready for Publicize to do its thing
- public $POST_SERVICE_DONE = '_publicize_done_external'; // array of external ids where we've Publicized
-
- /**
- * default pieces of the message used in constructing the
- * content pushed out to other social networks
- */
-
- public $default_prefix = '';
- public $default_message = '%title%';
- public $default_suffix = ' ';
-
- /**
- * What WP capability is require to create/delete global connections?
- * All users with this cap can un-globalize all other global connections, and globalize any of their own
- * Globalized connections cannot be unselected by users without this capability when publishing
- */
- public $GLOBAL_CAP = 'publish_posts';
-
- /**
- * Sets up the basics of Publicize
- */
- function __construct() {
- $this->default_message = self::build_sprintf( array(
- /**
- * Filter the default Publicize message.
- *
- * @module publicize
- *
- * @since 2.0.0
- *
- * @param string $this->default_message Publicize's default message. Default is the post title.
- */
- apply_filters( 'wpas_default_message', $this->default_message ),
- 'title',
- 'url',
- ) );
-
- $this->default_prefix = self::build_sprintf( array(
- /**
- * Filter the message prepended to the Publicize custom message.
- *
- * @module publicize
- *
- * @since 2.0.0
- *
- * @param string $this->default_prefix String prepended to the Publicize custom message.
- */
- apply_filters( 'wpas_default_prefix', $this->default_prefix ),
- 'url',
- ) );
-
- $this->default_suffix = self::build_sprintf( array(
- /**
- * Filter the message appended to the Publicize custom message.
- *
- * @module publicize
- *
- * @since 2.0.0
- *
- * @param string $this->default_suffix String appended to the Publicize custom message.
- */
- apply_filters( 'wpas_default_suffix', $this->default_suffix ),
- 'url',
- ) );
-
- /**
- * Filter the capability to change global Publicize connection options.
- *
- * All users with this cap can un-globalize all other global connections, and globalize any of their own
- * Globalized connections cannot be unselected by users without this capability when publishing.
- *
- * @module publicize
- *
- * @since 2.2.1
- *
- * @param string $this->GLOBAL_CAP default capability in control of global Publicize connection options. Default to edit_others_posts.
- */
- $this->GLOBAL_CAP = apply_filters( 'jetpack_publicize_global_connections_cap', $this->GLOBAL_CAP );
-
- // stage 1 and 2 of 3-stage Publicize. Flag for Publicize on creation, save meta,
- // then check meta and publicize based on that. stage 3 implemented on wpcom
- add_action( 'transition_post_status', array( $this, 'flag_post_for_publicize' ), 10, 3 );
- add_action( 'save_post', array( &$this, 'save_meta' ), 20, 2 );
-
- // Default checkbox state for each Connection
- add_filter( 'publicize_checkbox_default', array( $this, 'publicize_checkbox_default' ), 10, 4 );
-
- // Alter the "Post Publish" admin notice to mention the Connections we Publicized to.
- add_filter( 'post_updated_messages', array( $this, 'update_published_message' ), 20, 1 );
-
- // Connection test callback
- add_action( 'wp_ajax_test_publicize_conns', array( $this, 'test_publicize_conns' ) );
-
- add_action( 'init', array( $this, 'add_post_type_support' ) );
- add_action( 'init', array( $this, 'register_post_meta' ), 20 );
- add_action( 'jetpack_register_gutenberg_extensions', array( $this, 'register_gutenberg_extension' ) );
- }
-
-/*
- * Services: Facebook, Twitter, etc.
- */
-
- /**
- * Get services for the given blog and user.
- *
- * Can return all available services or just the ones with an active connection.
- *
- * @param string $filter
- * 'all' (default) - Get all services available for connecting
- * 'connected' - Get all services currently connected
- * @param false|int $_blog_id The blog ID. Use false (default) for the current blog
- * @param false|int $_user_id The user ID. Use false (default) for the current user
- * @return array
- */
- abstract function get_services( $filter = 'all', $_blog_id = false, $_user_id = false );
-
- function can_connect_service( $service_name ) {
- return true;
- }
-
- /**
- * Does the given user have a connection to the service on the given blog?
- *
- * @param string $service_name 'facebook', 'twitter', etc.
- * @param false|int $_blog_id The blog ID. Use false (default) for the current blog
- * @param false|int $_user_id The user ID. Use false (default) for the current user
- * @return bool
- */
- function is_enabled( $service_name, $_blog_id = false, $_user_id = false ) {
- if ( !$_blog_id )
- $_blog_id = $this->blog_id();
-
- if ( !$_user_id )
- $_user_id = $this->user_id();
-
- $connections = $this->get_connections( $service_name, $_blog_id, $_user_id );
- return ( is_array( $connections ) && count( $connections ) > 0 ? true : false );
- }
-
- /**
- * Generates a connection URL.
- *
- * This is the URL, which, when visited by the user, starts the authentication
- * process required to forge a connection.
- *
- * @param string $service_name 'facebook', 'twitter', etc.
- * @return string
- */
- abstract function connect_url( $service_name );
-
- /**
- * Generates a Connection refresh URL.
- *
- * This is the URL, which, when visited by the user, re-authenticates their
- * connection to the service.
- *
- * @param string $service_name 'facebook', 'twitter', etc.
- * @return string
- */
- abstract function refresh_url( $service_name );
-
- /**
- * Generates a disconnection URL.
- *
- * This is the URL, which, when visited by the user, breaks their connection
- * with the service.
- *
- * @param string $service_name 'facebook', 'twitter', etc.
- * @param string $connection_id Connection ID
- * @return string
- */
- abstract function disconnect_url( $service_name, $connection_id );
-
- /**
- * Returns a display name for the Service
- *
- * @param string $service_name 'facebook', 'twitter', etc.
- * @return string
- */
- public static function get_service_label( $service_name ) {
- switch ( $service_name ) {
- case 'linkedin':
- return 'LinkedIn';
- break;
- case 'twitter':
- case 'facebook':
- case 'tumblr':
- default:
- return ucfirst( $service_name );
- break;
- }
- }
-
-/*
- * Connections: For each Service, there can be multiple connections
- * for a given user. For example, one user could be connected to Twitter
- * as both @jetpack and as @wordpressdotcom
- *
- * For historical reasons, Connections are represented as an object
- * on WordPress.com and as an array in Jetpack.
- */
-
- /**
- * Get the active Connections of a Service
- *
- * @param string $service_name 'facebook', 'twitter', etc.
- * @param false|int $_blog_id The blog ID. Use false (default) for the current blog
- * @param false|int $_user_id The user ID. Use false (default) for the current user
- * @return false|object[]|array[] false if no connections exist
- */
- abstract function get_connections( $service_name, $_blog_id = false, $_user_id = false );
-
- /**
- * Get a single Connection of a Service
- *
- * @param string $service_name 'facebook', 'twitter', etc.
- * @param string $connection_id Connection ID
- * @param false|int $_blog_id The blog ID. Use false (default) for the current blog
- * @param false|int $_user_id The user ID. Use false (default) for the current user
- * @return false|object[]|array[] false if no connections exist
- */
- abstract function get_connection( $service_name, $connection_id, $_blog_id = false, $_user_id = false );
-
- /**
- * Get the Connection ID.
- *
- * Note that this is different than the Connection's uniqueid.
- *
- * Via a quirk of history, ID is globally unique and unique_id
- * is only unique per site.
- *
- * @param object|array The Connection object (WordPress.com) or array (Jetpack)
- * @return string
- */
- abstract function get_connection_id( $connection );
-
- /**
- * Get the Connection unique_id
- *
- * Note that this is different than the Connections ID.
- *
- * Via a quirk of history, ID is globally unique and unique_id
- * is only unique per site.
- *
- * @param object|array The Connection object (WordPress.com) or array (Jetpack)
- * @return string
- */
- abstract function get_connection_unique_id( $connection );
-
- /**
- * Get the Connection's Meta data
- *
- * @param object|array Connection
- * @return array Connection Meta
- */
- abstract function get_connection_meta( $connection );
-
- /**
- * Disconnect a Connection
- *
- * @param string $service_name 'facebook', 'twitter', etc.
- * @param string $connection_id Connection ID
- * @param false|int $_blog_id The blog ID. Use false (default) for the current blog
- * @param false|int $_user_id The user ID. Use false (default) for the current user
- * @param bool $force_delete Whether to skip permissions checks
- * @return false|void False on failure. Void on success.
- */
- abstract function disconnect( $service_name, $connection_id, $_blog_id = false, $_user_id = false, $force_delete = false );
-
- /**
- * Globalizes a Connection
- *
- * @param string $connection_id Connection ID
- * @return bool Falsey on failure. Truthy on success.
- */
- abstract function globalize_connection( $connection_id );
-
- /**
- * Unglobalizes a Connection
- *
- * @param string $connection_id Connection ID
- * @return bool Falsey on failure. Truthy on success.
- */
- abstract function unglobalize_connection( $connection_id );
-
- /**
- * Returns an external URL to the Connection's profile
- *
- * @param string $service_name 'facebook', 'twitter', etc.
- * @param object|array The Connection object (WordPress.com) or array (Jetpack)
- * @return false|string False on failure. URL on success.
- */
- function get_profile_link( $service_name, $connection ) {
- $cmeta = $this->get_connection_meta( $connection );
-
- if ( isset( $cmeta['connection_data']['meta']['link'] ) ) {
- if ( 'facebook' == $service_name && 0 === strpos( parse_url( $cmeta['connection_data']['meta']['link'], PHP_URL_PATH ), '/app_scoped_user_id/' ) ) {
- // App-scoped Facebook user IDs are not usable profile links
- return false;
- }
-
- return $cmeta['connection_data']['meta']['link'];
- } elseif ( 'facebook' == $service_name && isset( $cmeta['connection_data']['meta']['facebook_page'] ) ) {
- return 'https://facebook.com/' . $cmeta['connection_data']['meta']['facebook_page'];
- } elseif ( 'tumblr' == $service_name && isset( $cmeta['connection_data']['meta']['tumblr_base_hostname'] ) ) {
- return 'http://' . $cmeta['connection_data']['meta']['tumblr_base_hostname'];
- } elseif ( 'twitter' == $service_name ) {
- return 'https://twitter.com/' . substr( $cmeta['external_display'], 1 ); // Has a leading '@'
- } else if ( 'linkedin' == $service_name ) {
- if ( !isset( $cmeta['connection_data']['meta']['profile_url'] ) ) {
- return false;
- }
-
- $profile_url_query = parse_url( $cmeta['connection_data']['meta']['profile_url'], PHP_URL_QUERY );
- wp_parse_str( $profile_url_query, $profile_url_query_args );
- if ( isset( $profile_url_query_args['key'] ) ) {
- $id = $profile_url_query_args['key'];
- } elseif ( isset( $profile_url_query_args['id'] ) ) {
- $id = $profile_url_query_args['id'];
- } else {
- return false;
- }
-
- return esc_url_raw( add_query_arg( 'id', urlencode( $id ), 'http://www.linkedin.com/profile/view' ) );
- } else {
- return false; // no fallback. we just won't link it
- }
- }
-
- /**
- * Returns a display name for the Connection
- *
- * @param string $service_name 'facebook', 'twitter', etc.
- * @param object|array The Connection object (WordPress.com) or array (Jetpack)
- * @return string
- */
- function get_display_name( $service_name, $connection ) {
- $cmeta = $this->get_connection_meta( $connection );
-
- if ( isset( $cmeta['connection_data']['meta']['display_name'] ) ) {
- return $cmeta['connection_data']['meta']['display_name'];
- } elseif ( $service_name == 'tumblr' && isset( $cmeta['connection_data']['meta']['tumblr_base_hostname'] ) ) {
- return $cmeta['connection_data']['meta']['tumblr_base_hostname'];
- } elseif ( $service_name == 'twitter' ) {
- return $cmeta['external_display'];
- } else {
- $connection_display = $cmeta['external_display'];
- if ( empty( $connection_display ) )
- $connection_display = $cmeta['external_name'];
- return $connection_display;
- }
- }
-
- /**
- * Whether the user needs to select additional options after connecting
- *
- * @param string $service_name 'facebook', 'twitter', etc.
- * @param object|array The Connection object (WordPress.com) or array (Jetpack)
- * @return bool
- */
- function show_options_popup( $service_name, $connection ) {
- $cmeta = $this->get_connection_meta( $connection );
-
- // always show if no selection has been made for facebook
- if ( 'facebook' == $service_name && empty( $cmeta['connection_data']['meta']['facebook_profile'] ) && empty( $cmeta['connection_data']['meta']['facebook_page'] ) )
- return true;
-
- // always show if no selection has been made for tumblr
- if ( 'tumblr' == $service_name && empty ( $cmeta['connection_data']['meta']['tumblr_base_hostname'] ) )
- return true;
-
- // if we have the specific connection info..
- if ( isset( $_GET['id'] ) ) {
- if ( $cmeta['connection_data']['id'] == $_GET['id'] )
- return true;
- } else {
- // otherwise, just show if this is the completed step / first load
- if ( !empty( $_GET['action'] ) && 'completed' == $_GET['action'] && !empty( $_GET['service'] ) && $service_name == $_GET['service'] && ! in_array( $_GET['service'], array( 'facebook', 'tumblr' ) ) )
- return true;
- }
-
- return false;
- }
-
- /**
- * Whether the Connection is "valid" wrt Facebook's requirements.
- *
- * Must be connected to a Page (not a Profile).
- * (Also returns true if we're in the middle of the connection process)
- *
- * @param object|array The Connection object (WordPress.com) or array (Jetpack)
- * @return bool
- */
- function is_valid_facebook_connection( $connection ) {
- if ( $this->is_connecting_connection( $connection ) ) {
- return true;
- }
- $connection_meta = $this->get_connection_meta( $connection );
- $connection_data = $connection_meta['connection_data'];
- return isset( $connection_data[ 'meta' ][ 'facebook_page' ] );
- }
-
- /**
- * LinkedIn needs to be reauthenticated to use v2 of their API.
- * If it's using LinkedIn old API, it's an 'invalid' connection
- *
- * @param object|array The Connection object (WordPress.com) or array (Jetpack)
- * @return bool
- */
- function is_invalid_linkedin_connection( $connection ) {
- // LinkedIn API v1 included the profile link in the connection data.
- $connection_meta = $this->get_connection_meta( $connection );
- return isset( $connection_meta['connection_data']['meta']['profile_url'] );
- }
-
- /**
- * Whether the Connection currently being connected
- *
- * @param object|array The Connection object (WordPress.com) or array (Jetpack)
- * @return bool
- */
- function is_connecting_connection( $connection ) {
- $connection_meta = $this->get_connection_meta( $connection );
- $connection_data = $connection_meta['connection_data'];
- return isset( $connection_data[ 'meta' ]['options_responses'] );
- }
-
- /**
- * AJAX Handler to run connection tests on all Connections
- * @return void
- */
- function test_publicize_conns() {
- wp_send_json_success( $this->get_publicize_conns_test_results() );
- }
-
- /**
- * Run connection tests on all Connections
- *
- * @return array {
- * Array of connection test results.
- *
- * @type string 'connectionID' Connection identifier string that is unique for each connection
- * @type string 'serviceName' Slug of the connection's service (facebook, twitter, ...)
- * @type bool 'connectionTestPassed' Whether the connection test was successful
- * @type string 'connectionTestMessage' Test success or error message
- * @type bool 'userCanRefresh' Whether the user can re-authenticate their connection to the service
- * @type string 'refreshText' Message instructing user to re-authenticate their connection to the service
- * @type string 'refreshURL' URL, which, when visited by the user, re-authenticates their connection to the service.
- * @type string 'unique_id' ID string representing connection
- * }
- */
- function get_publicize_conns_test_results() {
- $test_results = array();
-
- foreach ( (array) $this->get_services( 'connected' ) as $service_name => $connections ) {
- foreach ( $connections as $connection ) {
-
- $id = $this->get_connection_id( $connection );
-
- $connection_test_passed = true;
- $connection_test_message = __( 'This connection is working correctly.' , 'jetpack' );
- $user_can_refresh = false;
- $refresh_text = '';
- $refresh_url = '';
-
- $connection_test_result = true;
- if ( method_exists( $this, 'test_connection' ) ) {
- $connection_test_result = $this->test_connection( $service_name, $connection );
- }
-
- if ( is_wp_error( $connection_test_result ) ) {
- $connection_test_passed = false;
- $connection_test_message = $connection_test_result->get_error_message();
- $error_data = $connection_test_result->get_error_data();
-
- $user_can_refresh = $error_data['user_can_refresh'];
- $refresh_text = $error_data['refresh_text'];
- $refresh_url = $error_data['refresh_url'];
- }
- // Mark facebook profiles as deprecated
- if ( 'facebook' === $service_name ) {
- if ( ! $this->is_valid_facebook_connection( $connection ) ) {
- $connection_test_passed = false;
- $user_can_refresh = false;
- $connection_test_message = __( 'Please select a Facebook Page to publish updates.', 'jetpack' );
- }
- }
-
- // LinkedIn needs reauthentication to be compatible with v2 of their API
- if ( 'linkedin' === $service_name && $this->is_invalid_linkedin_connection( $connection ) ) {
- $connection_test_passed = 'must_reauth';
- $user_can_refresh = false;
- $connection_test_message = esc_html__( 'Your LinkedIn connection needs to be reauthenticated to continue working – head to Sharing to take care of it.', 'jetpack' );
- }
-
- $unique_id = null;
- if ( ! empty( $connection->unique_id ) ) {
- $unique_id = $connection->unique_id;
- } else if ( ! empty( $connection['connection_data']['token_id'] ) ) {
- $unique_id = $connection['connection_data']['token_id'];
- }
-
- $test_results[] = array(
- 'connectionID' => $id,
- 'serviceName' => $service_name,
- 'connectionTestPassed' => $connection_test_passed,
- 'connectionTestMessage' => esc_attr( $connection_test_message ),
- 'userCanRefresh' => $user_can_refresh,
- 'refreshText' => esc_attr( $refresh_text ),
- 'refreshURL' => $refresh_url,
- 'unique_id' => $unique_id,
- );
- }
- }
-
- return $test_results;
- }
-
- /**
- * Run the connection test for the Connection
- *
- * @param string $service_name 'facebook', 'twitter', etc.
- * @param object|array The Connection object (WordPress.com) or array (Jetpack)
- * @return WP_Error|true WP_Error on failure. True on success
- */
- abstract function test_connection( $service_name, $connection );
-
- /**
- * Retrieves current list of connections and applies filters.
- *
- * Retrieves current available connections and checks if the connections
- * have already been used to share current post. Finally, the checkbox
- * form UI fields are calculated. This function exposes connection form
- * data directly as array so it can be retrieved for static HTML generation
- * or JSON consumption.
- *
- * @since 6.7.0
- *
- * @param integer $selected_post_id Optional. Post ID to query connection status for.
- *
- * @return array {
- * Array of UI setup data for connection list form.
- *
- * @type string 'unique_id' ID string representing connection
- * @type string 'service_name' Slug of the connection's service (facebook, twitter, ...)
- * @type string 'service_label' Service Label (Facebook, Twitter, ...)
- * @type string 'display_name' Connection's human-readable Username: "@jetpack"
- * @type bool 'enabled' Default value for the connection (e.g., for a checkbox).
- * @type bool 'done' Has this connection already been publicized to?
- * @type bool 'toggleable' Is the user allowed to change the value for the connection?
- * @type bool 'global' Is this connection a global one?
- * }
- */
- public function get_filtered_connection_data( $selected_post_id = null ) {
- $connection_list = array();
-
- $post = get_post( $selected_post_id ); // Defaults to current post if $post_id is null.
- // Handle case where there is no current post.
- if ( ! empty( $post ) ) {
- $post_id = $post->ID;
- } else {
- $post_id = null;
- }
-
- $services = $this->get_services( 'connected' );
- $all_done = $this->post_is_done_sharing( $post_id );
-
- // We don't allow Publicizing to the same external id twice, to prevent spam.
- $service_id_done = (array) get_post_meta( $post_id, $this->POST_SERVICE_DONE, true );
-
- foreach ( $services as $service_name => $connections ) {
- foreach ( $connections as $connection ) {
- $connection_meta = $this->get_connection_meta( $connection );
- $connection_data = $connection_meta['connection_data'];
-
- $unique_id = $this->get_connection_unique_id( $connection );
-
-
- // Was this connection (OR, old-format service) already Publicized to?
- $done = ! empty( $post ) && (
- // New flags
- 1 == get_post_meta( $post->ID, $this->POST_DONE . $unique_id, true )
- ||
- // old flags
- 1 == get_post_meta( $post->ID, $this->POST_DONE . $service_name, true )
- );
-
- /**
- * Filter whether a post should be publicized to a given service.
- *
- * @module publicize
- *
- * @since 2.0.0
- *
- * @param bool true Should the post be publicized to a given service? Default to true.
- * @param int $post_id Post ID.
- * @param string $service_name Service name.
- * @param array $connection_data Array of information about all Publicize details for the site.
- */
- if ( ! apply_filters( 'wpas_submit_post?', true, $post_id, $service_name, $connection_data ) ) {
- continue;
- }
-
- // Should we be skipping this one?
- $skip = (
- (
- ! empty( $post )
- &&
- in_array( $post->post_status, array( 'publish', 'draft', 'future' ) )
- &&
- (
- // New flags
- get_post_meta( $post->ID, $this->POST_SKIP . $unique_id, true )
- ||
- // Old flags
- get_post_meta( $post->ID, $this->POST_SKIP . $service_name )
- )
- )
- ||
- (
- is_array( $connection )
- &&
- isset( $connection_meta['external_id'] ) && ! empty( $service_id_done[ $service_name ][ $connection_meta['external_id'] ] )
- )
- );
-
- // If this one has already been publicized to, don't let it happen again.
- $toggleable = ! $done && ! $all_done;
-
- // Determine the state of the checkbox (on/off) and allow filtering.
- $enabled = $done || ! $skip;
- /**
- * Filter the checkbox state of each Publicize connection appearing in the post editor.
- *
- * @module publicize
- *
- * @since 2.0.1
- *
- * @param bool $enabled Should the Publicize checkbox be enabled for a given service.
- * @param int $post_id Post ID.
- * @param string $service_name Service name.
- * @param array $connection Array of connection details.
- */
- $enabled = apply_filters( 'publicize_checkbox_default', $enabled, $post_id, $service_name, $connection );
-
- /**
- * If this is a global connection and this user doesn't have enough permissions to modify
- * those connections, don't let them change it.
- */
- if ( ! $done && ( 0 == $connection_data['user_id'] && ! current_user_can( $this->GLOBAL_CAP ) ) ) {
- $toggleable = false;
-
- /**
- * Filters the checkboxes for global connections with non-prilvedged users.
- *
- * @module publicize
- *
- * @since 3.7.0
- *
- * @param bool $enabled Indicates if this connection should be enabled. Default true.
- * @param int $post_id ID of the current post
- * @param string $service_name Name of the connection (Facebook, Twitter, etc)
- * @param array $connection Array of data about the connection.
- */
- $enabled = apply_filters( 'publicize_checkbox_global_default', $enabled, $post_id, $service_name, $connection );
- }
-
- // Force the checkbox to be checked if the post was DONE, regardless of what the filter does.
- if ( $done ) {
- $enabled = true;
- }
-
- $connection_list[] = array(
- 'unique_id' => $unique_id,
- 'service_name' => $service_name,
- 'service_label' => $this->get_service_label( $service_name ),
- 'display_name' => $this->get_display_name( $service_name, $connection ),
-
- 'enabled' => $enabled,
- 'done' => $done,
- 'toggleable' => $toggleable,
- 'global' => 0 == $connection_data['user_id'],
- );
- }
- }
-
- return $connection_list;
- }
-
- /**
- * Checks if post has already been shared by Publicize in the past.
- *
- * @since 6.7.0
- *
- * @param integer $post_id Optional. Post ID to query connection status for: will use current post if missing.
- *
- * @return bool True if post has already been shared by Publicize, false otherwise.
- */
- abstract public function post_is_done_sharing( $post_id = null );
-
- /**
- * Retrieves full list of available Publicize connection services.
- *
- * Retrieves current available publicize service connections
- * with associated labels and URLs.
- *
- * @since 6.7.0
- *
- * @return array {
- * Array of UI service connection data for all services
- *
- * @type string 'name' Name of service.
- * @type string 'label' Display label for service.
- * @type string 'url' URL for adding connection to service.
- * }
- */
- function get_available_service_data() {
- $available_services = $this->get_services( 'all' );
- $available_service_data = array();
-
- foreach ( $available_services as $service_name => $service ) {
- $available_service_data[] = array(
- 'name' => $service_name,
- 'label' => $this->get_service_label( $service_name ),
- 'url' => $this->connect_url( $service_name ),
- );
- }
-
- return $available_service_data;
- }
-
-/*
- * Site Data
- */
-
- function user_id() {
- return get_current_user_id();
- }
-
- function blog_id() {
- return get_current_blog_id();
- }
-
-/*
- * Posts
- */
-
- /**
- * Checks old and new status to see if the post should be flagged as
- * ready to Publicize.
- *
- * Attached to the `transition_post_status` filter.
- *
- * @param string $new_status
- * @param string $old_status
- * @param WP_Post $post
- * @return void
- */
- abstract function flag_post_for_publicize( $new_status, $old_status, $post );
-
- /**
- * Ensures the Post internal post-type supports `publicize`
- *
- * This feature support flag is used by the REST API.
- */
- function add_post_type_support() {
- add_post_type_support( 'post', 'publicize' );
- }
-
- /**
- * Register the Publicize Gutenberg extension
- */
- function register_gutenberg_extension() {
- // TODO: The `gutenberg/available-extensions` endpoint currently doesn't accept a post ID,
- // so we cannot pass one to `$this->current_user_can_access_publicize_data()`.
-
- if ( $this->current_user_can_access_publicize_data() ) {
- Jetpack_Gutenberg::set_extension_available( 'jetpack/publicize' );
- } else {
- Jetpack_Gutenberg::set_extension_unavailable( 'jetpack/publicize', 'unauthorized' );
-
- }
- }
-
- /**
- * Can the current user access Publicize Data.
- *
- * @param int $post_id. 0 for general access. Post_ID for specific access.
- * @return bool
- */
- function current_user_can_access_publicize_data( $post_id = 0 ) {
- /**
- * Filter what user capability is required to use the publicize form on the edit post page. Useful if publish post capability has been removed from role.
- *
- * @module publicize
- *
- * @since 4.1.0
- *
- * @param string $capability User capability needed to use publicize
- */
- $capability = apply_filters( 'jetpack_publicize_capability', 'publish_posts' );
-
- if ( 'publish_posts' === $capability && $post_id ) {
- return current_user_can( 'publish_post', $post_id );
- }
-
- return current_user_can( $capability );
- }
-
- /**
- * Auth callback for the protected ->POST_MESS post_meta
- *
- * @param bool $allowed
- * @param string $meta_key
- * @param int $object_id Post ID
- * @return bool
- */
- function message_meta_auth_callback( $allowed, $meta_key, $object_id ) {
- return $this->current_user_can_access_publicize_data( $object_id );
- }
-
- /**
- * Registers the ->POST_MESS post_meta for use in the REST API.
- *
- * Registers for each post type that with `publicize` feature support.
- */
- function register_post_meta() {
- $args = array(
- 'type' => 'string',
- 'description' => __( 'The message to use instead of the title when sharing to Publicize Services', 'jetpack' ),
- 'single' => true,
- 'default' => '',
- 'show_in_rest' => array(
- 'name' => 'jetpack_publicize_message'
- ),
- 'auth_callback' => array( $this, 'message_meta_auth_callback' ),
- );
-
- foreach ( get_post_types() as $post_type ) {
- if ( ! $this->post_type_is_publicizeable( $post_type ) ) {
- continue;
- }
-
- $args['object_subtype'] = $post_type;
-
- register_meta( 'post', $this->POST_MESS, $args );
- }
- }
-
- /**
- * Fires when a post is saved, checks conditions and saves state in postmeta so that it
- * can be picked up later by @see ::publicize_post() on WordPress.com codebase.
- *
- * Attached to the `save_post` action.
- *
- * @param int $post_id
- * @param WP_Post $post
- * @return void
- */
- function save_meta( $post_id, $post ) {
- $cron_user = null;
- $submit_post = true;
-
- if ( ! $this->post_type_is_publicizeable( $post->post_type ) )
- return;
-
- // Don't Publicize during certain contexts:
-
- // - import
- if ( defined( 'WP_IMPORTING' ) && WP_IMPORTING ) {
- $submit_post = false;
- }
-
- // - on quick edit, autosave, etc but do fire on p2, quickpress, and instapost ajax
- if (
- defined( 'DOING_AJAX' )
- &&
- DOING_AJAX
- &&
- !did_action( 'p2_ajax' )
- &&
- !did_action( 'wp_ajax_json_quickpress_post' )
- &&
- !did_action( 'wp_ajax_instapost_publish' )
- &&
- !did_action( 'wp_ajax_post_reblog' )
- &&
- !did_action( 'wp_ajax_press-this-save-post' )
- ) {
- $submit_post = false;
- }
-
- // - bulk edit
- if ( isset( $_GET['bulk_edit'] ) ) {
- $submit_post = false;
- }
-
- // - API/XML-RPC Test Posts
- if (
- (
- defined( 'XMLRPC_REQUEST' )
- &&
- XMLRPC_REQUEST
- ||
- defined( 'APP_REQUEST' )
- &&
- APP_REQUEST
- )
- &&
- 0 === strpos( $post->post_title, 'Temporary Post Used For Theme Detection' )
- ) {
- $submit_post = false;
- }
-
- // only work with certain statuses (avoids inherits, auto drafts etc)
- if ( !in_array( $post->post_status, array( 'publish', 'draft', 'future' ) ) ) {
- $submit_post = false;
- }
-
- // don't publish password protected posts
- if ( '' !== $post->post_password ) {
- $submit_post = false;
- }
-
- // Did this request happen via wp-admin?
- $from_web = isset( $_SERVER['REQUEST_METHOD'] )
- &&
- 'post' == strtolower( $_SERVER['REQUEST_METHOD'] )
- &&
- isset( $_POST[$this->ADMIN_PAGE] );
-
- if ( ( $from_web || defined( 'POST_BY_EMAIL' ) ) && isset( $_POST['wpas_title'] ) ) {
- if ( empty( $_POST['wpas_title'] ) ) {
- delete_post_meta( $post_id, $this->POST_MESS );
- } else {
- update_post_meta( $post_id, $this->POST_MESS, trim( stripslashes( $_POST['wpas_title'] ) ) );
- }
- }
-
- // change current user to provide context for get_services() if we're running during cron
- if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
- $cron_user = (int) $GLOBALS['user_ID'];
- wp_set_current_user( $post->post_author );
- }
-
- /**
- * In this phase, we mark connections that we want to SKIP. When Publicize is actually triggered,
- * it will Publicize to everything *except* those marked for skipping.
- */
- foreach ( (array) $this->get_services( 'connected' ) as $service_name => $connections ) {
- foreach ( $connections as $connection ) {
- $connection_data = '';
- if ( method_exists( $connection, 'get_meta' ) )
- $connection_data = $connection->get_meta( 'connection_data' );
- elseif ( ! empty( $connection['connection_data'] ) )
- $connection_data = $connection['connection_data'];
-
- /** This action is documented in modules/publicize/ui.php */
- if ( false == apply_filters( 'wpas_submit_post?', $submit_post, $post_id, $service_name, $connection_data ) ) {
- delete_post_meta( $post_id, $this->PENDING );
- continue;
- }
-
- if ( !empty( $connection->unique_id ) )
- $unique_id = $connection->unique_id;
- else if ( !empty( $connection['connection_data']['token_id'] ) )
- $unique_id = $connection['connection_data']['token_id'];
-
- // This was a wp-admin request, so we need to check the state of checkboxes
- if ( $from_web ) {
- // delete stray service-based post meta
- delete_post_meta( $post_id, $this->POST_SKIP . $service_name );
-
- // We *unchecked* this stream from the admin page, or it's set to readonly, or it's a new addition
- if ( empty( $_POST[$this->ADMIN_PAGE]['submit'][$unique_id] ) ) {
- // Also make sure that the service-specific input isn't there.
- // If the user connected to a new service 'in-page' then a hidden field with the service
- // name is added, so we just assume they wanted to Publicize to that service.
- if ( empty( $_POST[$this->ADMIN_PAGE]['submit'][$service_name] ) ) {
- // Nothing seems to be checked, so we're going to mark this one to be skipped
- update_post_meta( $post_id, $this->POST_SKIP . $unique_id, 1 );
- continue;
- } else {
- // clean up any stray post meta
- delete_post_meta( $post_id, $this->POST_SKIP . $unique_id );
- }
- } else {
- // The checkbox for this connection is explicitly checked -- make sure we DON'T skip it
- delete_post_meta( $post_id, $this->POST_SKIP . $unique_id );
- }
- }
-
- /**
- * Fires right before the post is processed for Publicize.
- * Users may hook in here and do anything else they need to after meta is written,
- * and before the post is processed for Publicize.
- *
- * @since 2.1.2
- *
- * @param bool $submit_post Should the post be publicized.
- * @param int $post->ID Post ID.
- * @param string $service_name Service name.
- * @param array $connection Array of connection details.
- */
- do_action( 'publicize_save_meta', $submit_post, $post_id, $service_name, $connection );
- }
- }
-
- if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
- wp_set_current_user( $cron_user );
- }
-
- // Next up will be ::publicize_post()
- }
-
- /**
- * Alters the "Post Published" message to include information about where the post
- * was Publicized to.
- *
- * Attached to the `post_updated_messages` filter
- *
- * @param string[] $messages
- * @return string[]
- */
- public function update_published_message( $messages ) {
- global $post_type, $post_type_object, $post;
- if ( ! $this->post_type_is_publicizeable( $post_type ) ) {
- return $messages;
- }
-
- // Bail early if the post is private.
- if ( 'publish' !== $post->post_status ) {
- return $messages;
- }
-
- $view_post_link_html = '';
- $viewable = is_post_type_viewable( $post_type_object );
- if ( $viewable ) {
- $view_text = esc_html__( 'View post' ); // intentionally omitted domain
-
- if ( 'jetpack-portfolio' == $post_type ) {
- $view_text = esc_html__( 'View project', 'jetpack' );
- }
-
- $view_post_link_html = sprintf( ' <a href="%1$s">%2$s</a>',
- esc_url( get_permalink( $post ) ),
- $view_text
- );
- }
-
- $services = $this->get_publicizing_services( $post->ID );
- if ( empty( $services ) ) {
- return $messages;
- }
-
- $labels = array();
- foreach ( $services as $service_name => $display_names ) {
- $labels[] = sprintf(
- /* translators: Service name is %1$s, and account name is %2$s. */
- esc_html__( '%1$s (%2$s)', 'jetpack' ),
- esc_html( $service_name ),
- esc_html( implode( ', ', $display_names ) )
- );
- }
-
- $messages['post'][6] = sprintf(
- /* translators: %1$s is a comma-separated list of services and accounts. Ex. Facebook (@jetpack), Twitter (@jetpack) */
- esc_html__( 'Post published and sharing on %1$s.', 'jetpack' ),
- implode( ', ', $labels )
- ) . $view_post_link_html;
-
- if ( $post_type == 'post' && class_exists('Jetpack_Subscriptions' ) ) {
- $subscription = Jetpack_Subscriptions::init();
- if ( $subscription->should_email_post_to_subscribers( $post ) ) {
- $messages['post'][6] = sprintf(
- /* translators: %1$s is a comma-separated list of services and accounts. Ex. Facebook (@jetpack), Twitter (@jetpack) */
- esc_html__( 'Post published, sending emails to subscribers and sharing post on %1$s.', 'jetpack' ),
- implode( ', ', $labels )
- ) . $view_post_link_html;
- }
- }
-
- $messages['jetpack-portfolio'][6] = sprintf(
- /* translators: %1$s is a comma-separated list of services and accounts. Ex. Facebook (@jetpack), Twitter (@jetpack) */
- esc_html__( 'Project published and sharing project on %1$s.', 'jetpack' ),
- implode( ', ', $labels )
- ) . $view_post_link_html;
-
- return $messages;
- }
-
- /**
- * Get the Connections the Post was just Publicized to.
- *
- * Only reliable just after the Post was published.
- *
- * @param int $post_id
- * @return string[] Array of Service display name => Connection display name
- */
- function get_publicizing_services( $post_id ) {
- $services = array();
-
- foreach ( (array) $this->get_services( 'connected' ) as $service_name => $connections ) {
- // services have multiple connections.
- foreach ( $connections as $connection ) {
- $unique_id = '';
- if ( ! empty( $connection->unique_id ) )
- $unique_id = $connection->unique_id;
- else if ( ! empty( $connection['connection_data']['token_id'] ) )
- $unique_id = $connection['connection_data']['token_id'];
-
- // Did we skip this connection?
- if ( get_post_meta( $post_id, $this->POST_SKIP . $unique_id, true ) ) {
- continue;
- }
- $services[ $this->get_service_label( $service_name ) ][] = $this->get_display_name( $service_name, $connection );
- }
- }
-
- return $services;
- }
-
- /**
- * Is the post Publicize-able?
- *
- * Only valid prior to Publicizing a Post.
- *
- * @param WP_Post $post
- * @return bool
- */
- function post_is_publicizeable( $post ) {
- if ( ! $this->post_type_is_publicizeable( $post->post_type ) )
- return false;
-
- // This is more a precaution. To only publicize posts that are published. (Mostly relevant for Jetpack sites)
- if ( 'publish' !== $post->post_status ) {
- return false;
- }
-
- // If it's not flagged as ready, then abort. @see ::flag_post_for_publicize()
- if ( ! get_post_meta( $post->ID, $this->PENDING, true ) )
- return false;
-
- return true;
- }
-
- /**
- * Is a given post type Publicize-able?
- *
- * Not every CPT lends itself to Publicize-ation. Allow CPTs to register by adding their CPT via
- * the publicize_post_types array filter.
- *
- * @param string $post_type The post type to check.
- * @return bool True if the post type can be Publicized.
- */
- function post_type_is_publicizeable( $post_type ) {
- if ( 'post' == $post_type )
- return true;
-
- return post_type_supports( $post_type, 'publicize' );
- }
-
- /**
- * Already-published posts should not be Publicized by default. This filter sets checked to
- * false if a post has already been published.
- *
- * Attached to the `publicize_checkbox_default` filter
- *
- * @param bool $checked
- * @param int $post_id
- * @param string $service_name 'facebook', 'twitter', etc
- * @param object|array The Connection object (WordPress.com) or array (Jetpack)
- * @return bool
- */
- function publicize_checkbox_default( $checked, $post_id, $service_name, $connection ) {
- if ( 'publish' == get_post_status( $post_id ) ) {
- return false;
- }
-
- return $checked;
- }
-
-/*
- * Util
- */
-
- /**
- * Converts a Publicize message template string into a sprintf format string
- *
- * @param string[] $args
- * 0 - The Publicize message template: 'Check out my post: %title% @ %url'
- * ... - The template tags 'title', 'url', etc.
- * @return string
- */
- protected static function build_sprintf( $args ) {
- $search = array();
- $replace = array();
- foreach ( $args as $k => $arg ) {
- if ( 0 == $k ) {
- $string = $arg;
- continue;
- }
- $search[] = "%$arg%";
- $replace[] = "%$k\$s";
- }
- return str_replace( $search, $replace, $string );
- }
-}
-
-function publicize_calypso_url() {
- $calypso_sharing_url = 'https://wordpress.com/sharing/';
- if ( class_exists( 'Jetpack' ) && method_exists( 'Jetpack', 'build_raw_urls' ) ) {
- $site_suffix = Jetpack::build_raw_urls( home_url() );
- } elseif ( class_exists( 'WPCOM_Masterbar' ) && method_exists( 'WPCOM_Masterbar', 'get_calypso_site_slug' ) ) {
- $site_suffix = WPCOM_Masterbar::get_calypso_site_slug( get_current_blog_id() );
- }
-
- if ( $site_suffix ) {
- return $calypso_sharing_url . $site_suffix;
- } else {
- return $calypso_sharing_url;
- }
-}
diff --git a/plugins/jetpack/modules/publicize/ui.php b/plugins/jetpack/modules/publicize/ui.php
deleted file mode 100644
index 43a6c05f..00000000
--- a/plugins/jetpack/modules/publicize/ui.php
+++ /dev/null
@@ -1,657 +0,0 @@
-<?php
-
-/**
-* Only user facing pieces of Publicize are found here.
-*/
-class Publicize_UI {
-
- /**
- * Contains an instance of class 'publicize' which loads Keyring, sets up services, etc.
- */
- public $publicize;
-
- /**
- * @var string URL to Sharing settings page in wordpress.com
- */
- protected $publicize_settings_url = '';
-
- /**
- * Hooks into WordPress to display the various pieces of UI and load our assets
- */
- function __construct() {
- global $publicize;
-
- $this->publicize = $publicize = new Publicize;
-
- add_action( 'init', array( $this, 'init' ) );
- }
-
- function init() {
- $this->publicize_settings_url = publicize_calypso_url();
-
- // Show only to users with the capability required to manage their Publicize connections.
- if ( ! $this->publicize->current_user_can_access_publicize_data() ) {
- return;
- }
-
- // assets (css, js)
- if ( $this->in_jetpack ) {
- add_action( 'load-settings_page_sharing', array( $this, 'load_assets' ) );
- }
- add_action( 'admin_head-post.php', array( $this, 'post_page_metabox_assets' ) );
- add_action( 'admin_head-post-new.php', array( $this, 'post_page_metabox_assets' ) );
-
- // management of publicize (sharing screen, ajax/lightbox popup, and metabox on post screen)
- add_action( 'pre_admin_screen_sharing', array( $this, 'admin_page' ) );
- add_action( 'post_submitbox_misc_actions', array( $this, 'post_page_metabox' ) );
- }
-
- /**
- * If the ShareDaddy plugin is not active we need to add the sharing settings page to the menu still
- */
- function sharing_menu() {
- add_submenu_page(
- 'options-general.php',
- esc_html__( 'Sharing Settings', 'jetpack' ),
- esc_html__( 'Sharing', 'jetpack' ),
- 'publish_posts',
- 'sharing',
- array( $this, 'wrapper_admin_page' )
- );
- }
-
- function wrapper_admin_page() {
- Jetpack_Admin_Page::wrap_ui( array( $this, 'management_page' ) );
- }
-
- /**
- * Management page to load if Sharedaddy is not active so the 'pre_admin_screen_sharing' action exists.
- */
- function management_page() { ?>
- <div class="wrap">
- <div class="icon32" id="icon-options-general"><br /></div>
- <h1><?php esc_html_e( 'Sharing Settings', 'jetpack' ); ?></h1>
-
- <?php
- /** This action is documented in modules/sharedaddy/sharing.php */
- do_action( 'pre_admin_screen_sharing' );
- ?>
-
- </div> <?php
- }
-
- /**
- * styling for the sharing screen and popups
- * JS for the options and switching
- */
- function load_assets() {
- Jetpack_Admin_Page::load_wrapper_styles();
- }
-
- /**
- * Lists the current user's publicized accounts for the blog
- * looks exactly like Publicize v1 for now, UI and functionality updates will come after the move to keyring
- */
- function admin_page() {
- ?>
- <h2 id="publicize"><?php esc_html_e( 'Publicize', 'jetpack' ) ?></h2>
- <p><?php esc_html_e( 'Connect social media services to automatically share new posts.', 'jetpack' ) ?></p>
- <h4><?php
- printf(
- wp_kses(
- __( "We've made some updates to Publicize. Please visit the <a href='%s' class='jptracks' data-jptracks-name='legacy_publicize_settings'>WordPress.com sharing page</a> to manage your publicize connections or use the button below.", 'jetpack' ),
- array( 'a' => array( 'href' => array(), 'class' => array(), 'data-jptracks-name' => array() ) )
- ),
- esc_url( publicize_calypso_url() )
- );
- ?>
- </h4>
-
- <a href="<?php echo esc_url( publicize_calypso_url() ); ?>" class="button button-primary jptracks" data-jptracks-name='legacy_publicize_settings'><?php esc_html_e( 'Publicize Settings', 'jetpack' ); ?></a>
- <?php
- }
-
- /**
- * CSS for styling the publicize message box and counter that displays on the post page.
- * There is also some JavaScript for length counting and some basic display effects.
- */
- function post_page_metabox_assets() {
- global $post;
- $user_id = empty( $post->post_author ) ? $GLOBALS['user_ID'] : $post->post_author;
-
- $default_prefix = $this->publicize->default_prefix;
- $default_prefix = preg_replace( '/%([0-9])\$s/', "' + %\\1\$s + '", esc_js( $default_prefix ) );
-
- $default_message = $this->publicize->default_message;
- $default_message = preg_replace( '/%([0-9])\$s/', "' + %\\1\$s + '", esc_js( $default_message ) );
-
- $default_suffix = $this->publicize->default_suffix;
- $default_suffix = preg_replace( '/%([0-9])\$s/', "' + %\\1\$s + '", esc_js( $default_suffix ) );
-
- $max_length = defined( 'JETPACK_PUBLICIZE_TWITTER_LENGTH' ) ? JETPACK_PUBLICIZE_TWITTER_LENGTH : 280;
- $max_length = $max_length - 24; // t.co link, space
-
- ?>
-
-<script type="text/javascript">
-jQuery( function($) {
- var wpasTitleCounter = $( '#wpas-title-counter' ),
- wpasTwitterCheckbox = $( '.wpas-submit-twitter' ).length,
- postTitle = $( '#title' ),
- wpasTitle = $( '#wpas-title' ).keyup( function() {
- var postTitleVal,
- length = wpasTitle.val().length;
-
- if ( ! length ) {
- length = wpasTitle.attr( 'placeholder' ).length;
- }
-
- wpasTitleCounter.text( length ).trigger( 'change' );
- } ),
- authClick = false;
-
- wpasTitleCounter.on( 'change', function( e ) {
- if ( wpasTwitterCheckbox && parseInt( $( e.currentTarget ).text(), 10 ) > <?php echo (int) $max_length; ?> ) {
- wpasTitleCounter.addClass( 'wpas-twitter-length-limit' );
- } else {
- wpasTitleCounter.removeClass( 'wpas-twitter-length-limit' );
- }
- } );
-
- // Keep the postTitle and the placeholder in sync
- postTitle.on( 'keyup', function( e ) {
- var url = $( '#sample-permalink' ).text();
- var defaultMessage = $.trim( '<?php printf( $default_prefix, 'url' ); printf( $default_message, 'e.currentTarget.value', 'url' ); printf( $default_suffix, 'url' ); ?>' )
- .replace( /<[^>]+>/g,'');
-
- wpasTitle.attr( 'placeholder', defaultMessage );
- wpasTitle.trigger( 'keyup' );
- } );
-
- // set the initial placeholder
- postTitle.trigger( 'keyup' );
-
- // If a custom message has been provided, open the UI so the author remembers
- if ( wpasTitle.val() && ! wpasTitle.prop( 'disabled' ) && wpasTitle.attr( 'placeholder' ) !== wpasTitle.val() ) {
- $( '#publicize-form' ).show();
- $( '#publicize-defaults' ).hide();
- $( '#publicize-form-edit' ).hide();
- }
-
- $('#publicize-disconnected-form-show').click( function() {
- $('#publicize-form').slideDown( 'fast' );
- $(this).hide();
- } );
-
- $('#publicize-disconnected-form-hide').click( function() {
- $('#publicize-form').slideUp( 'fast' );
- $('#publicize-disconnected-form-show').show();
- } );
-
- $('#publicize-form-edit').click( function() {
- $('#publicize-form').slideDown( 'fast', function() {
- var selBeg = 0, selEnd = 0;
- wpasTitle.focus();
-
- if ( ! wpasTitle.text() ) {
- wpasTitle.text( wpasTitle.attr( 'placeholder' ) );
-
- selBeg = wpasTitle.text().indexOf( postTitle.val() );
- if ( selBeg < 0 ) {
- selBeg = 0;
- } else {
- selEnd = selBeg + postTitle.val().length;
- }
-
- var domObj = wpasTitle.get(0);
- if ( domObj.setSelectionRange ) {
- domObj.setSelectionRange( selBeg, selEnd );
- } else if ( domObj.createTextRange ) {
- var r = domObj.createTextRange();
- r.moveStart( 'character', selBeg );
- r.moveEnd( 'character', selEnd );
- r.select();
- }
- }
- } );
-
- $('#publicize-defaults').hide();
- $(this).hide();
- return false;
- } );
-
- $('#publicize-form-hide').click( function() {
- var newList = $.map( $('#publicize-form').slideUp( 'fast' ).find( ':checked' ), function( el ) {
- return $.trim( $(el).parent( 'label' ).text() );
- } );
- $('#publicize-defaults').html( '<strong>' + newList.join( '</strong>, <strong>' ) + '</strong>' ).show();
- $('#publicize-form-edit').show();
- return false;
- } );
-
- $('.authorize-link').click( function() {
- if ( authClick ) {
- return false;
- }
- authClick = true;
- $(this).after( '<img src="images/loading.gif" class="alignleft" style="margin: 0 .5em" />' );
- $.ajaxSetup( { async: false } );
-
- if ( window.wp && window.wp.autosave ) {
- window.wp.autosave.server.triggerSave();
- } else {
- autosave();
- }
-
- return true;
- } );
-
- $( '.pub-service' ).click( function() {
- var service = $(this).data( 'service' ),
- fakebox = '<input id="wpas-submit-' + service + '" type="hidden" value="1" name="wpas[submit][' + service + ']" />';
- $( '#add-publicize-check' ).append( fakebox );
- } );
-
- publicizeConnTestStart = function() {
- $( '#pub-connection-tests' )
- .removeClass( 'below-h2' )
- .removeClass( 'error' )
- .removeClass( 'publicize-token-refresh-message' )
- .addClass( 'test-in-progress' )
- .html( '' );
- $.post( ajaxurl, { action: 'test_publicize_conns' }, publicizeConnTestComplete );
- }
-
- publicizeConnRefreshClick = function( event ) {
- event.preventDefault();
- var popupURL = event.currentTarget.href;
- var popupTitle = event.currentTarget.title;
- // open a popup window
- // when it is closed, kick off the tests again
- var popupWin = window.open( popupURL, popupTitle, '' );
- var popupWinTimer= window.setInterval( function() {
- if ( popupWin.closed !== false ) {
- window.clearInterval( popupWinTimer );
- publicizeConnTestStart();
- }
- }, 500 );
- }
-
- publicizeConnTestComplete = function( response ) {
- var testsSelector = $( '#pub-connection-tests' );
- testsSelector
- .removeClass( 'test-in-progress' )
- .removeClass( 'below-h2' )
- .removeClass( 'error' )
- .removeClass( 'publicize-token-refresh-message' )
- .html( '' );
-
- // If any of the tests failed, show some stuff
- var somethingShownAlready = false;
- var facebookNotice = false;
- $.each( response.data, function( index, testResult ) {
- // find the li for this connection
- if ( ! testResult.connectionTestPassed && testResult.userCanRefresh ) {
- if ( ! somethingShownAlready ) {
- testsSelector
- .addClass( 'below-h2' )
- .addClass( 'error' )
- .addClass( 'publicize-token-refresh-message' )
- .append( "<p><?php echo esc_html( __( 'Before you hit Publish, please refresh the following connection(s) to make sure we can Publicize your post:', 'jetpack' ) ); ?></p>" );
- somethingShownAlready = true;
- }
-
- if ( testResult.userCanRefresh ) {
- testsSelector.append( '<p/>' );
- $( '<a/>', {
- 'class' : 'pub-refresh-button button',
- 'title' : testResult.refreshText,
- 'href' : testResult.refreshURL,
- 'text' : testResult.refreshText,
- 'target' : '_refresh_' + testResult.serviceName
- } )
- .appendTo( testsSelector.children().last() )
- .click( publicizeConnRefreshClick );
- }
- }
-
- if( ! testResult.connectionTestPassed && ! testResult.userCanRefresh ) {
- $( '#wpas-submit-' + testResult.unique_id ).prop( "checked", false ).prop( "disabled", true );
- if ( ! facebookNotice ) {
- var message = '<p>'
- + testResult.connectionTestMessage
- + '</p><p>'
- + ' <a class="button" href="<?php echo esc_url( $this->publicize_settings_url ); ?>" rel="noopener noreferrer" target="_blank">'
- + '<?php echo esc_html( __( 'Update Your Sharing Settings' ,'jetpack' ) ); ?>'
- + '</a>'
- + '<p>';
-
- testsSelector
- .addClass( 'below-h2' )
- .addClass( 'error' )
- .addClass( 'publicize-token-refresh-message' )
- .append( message );
- facebookNotice = true;
- }
- }
- } );
- }
-
- $( document ).ready( function() {
- // If we have the #pub-connection-tests div present, kick off the connection test
- if ( $( '#pub-connection-tests' ).length ) {
- publicizeConnTestStart();
- }
- } );
-
-} );
-</script>
-
-<style type="text/css">
-#publicize {
- line-height: 1.5;
-}
-#publicize ul {
- margin: 4px 0 4px 6px;
-}
-#publicize li {
- margin: 0;
-}
-#publicize textarea {
- margin: 4px 0 0;
- width: 100%
-}
-#publicize ul.not-connected {
- list-style: square;
- padding-left: 1em;
-}
-.publicize__notice-warning {
- display: block;
- padding: 7px 10px;
- margin: 5px 0;
- border-left-width: 4px;
- border-left-style: solid;
- font-size: 12px;
- box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1);
-}
-.publicize-external-link {
- display: block;
- text-decoration: none;
- margin-top: 8px;
-}
-.publicize-external-link__text {
- text-decoration: underline;
-}
-#publicize-title:before {
- content: "\f237";
- font: normal 20px/1 dashicons;
- speak: none;
- margin-left: -1px;
- padding-right: 3px;
- vertical-align: top;
- -webkit-font-smoothing: antialiased;
- color: #82878c;
-}
-.post-new-php .authorize-link, .post-php .authorize-link {
- line-height: 1.5em;
-}
-.post-new-php .authorize-message, .post-php .authorize-message {
- margin-bottom: 0;
-}
-#poststuff #publicize .updated p {
- margin: .5em 0;
-}
-.wpas-twitter-length-limit {
- color: red;
-}
-.publicize__notice-warning .dashicons {
- font-size: 16px;
- text-decoration: none;
-}
-</style><?php
- }
-
- /**
- * @param string $service_label Service's human-readable Label ("Facebook", "Twitter", ...)
- * @param string $display_name Connection's human-readable Username ("@jetpack", ...)
- * @return string
- */
- private function connection_label( $service_label, $display_name ) {
- return sprintf(
- /* translators: %1$s: Service Name (Facebook, Twitter, ...), %2$s: Username on Service (@jetpack, ...) */
- __( '%1$s: %2$s', 'jetpack' ),
- $service_label,
- $display_name
- );
- }
-
- /**
- * Extracts the connections that require reauthentication, for example, LinkedIn, when it switched v1 to v2 of its API.
- *
- * @return array Connections that must be reauthenticated
- */
- function get_must_reauth_connections() {
- $must_reauth = array();
- $connections = $this->publicize->get_connections( 'linkedin' );
- if ( is_array( $connections ) ) {
- foreach ( $connections as $index => $connection ) {
- if ( $this->publicize->is_invalid_linkedin_connection( $connection ) ) {
- $must_reauth[ $index ] = 'LinkedIn';
- }
- }
- }
- return $must_reauth;
- }
-
- /**
- * Controls the metabox that is displayed on the post page
- * Allows the user to customize the message that will be sent out to the social network, as well as pick which
- * networks to publish to. Also displays the character counter and some other information.
- */
- function post_page_metabox() {
- global $post;
-
- if ( ! $this->publicize->post_type_is_publicizeable( $post->post_type ) )
- return;
-
- $user_id = empty( $post->post_author ) ? $GLOBALS['user_ID'] : $post->post_author;
- $connections_data = $this->publicize->get_filtered_connection_data();
-
- $available_services = $this->publicize->get_services( 'all' );
-
- if ( ! is_array( $available_services ) )
- $available_services = array();
-
- if ( ! is_array( $connections_data ) )
- $connections_data = array();
- ?>
- <div id="publicize" class="misc-pub-section misc-pub-section-last">
- <span id="publicize-title">
- <?php
- esc_html_e( 'Publicize:', 'jetpack' );
-
- if ( 0 < count( $connections_data ) ) :
- $publicize_form = $this->get_metabox_form_connected( $connections_data );
-
- $must_reauth = $this->get_must_reauth_connections();
- if ( ! empty( $must_reauth ) ) {
- foreach ( $must_reauth as $connection_name ) {
- ?>
- <span class="notice-warning publicize__notice-warning">
- <?php
- /* translators: %s is the name of a Pubilicize service like "LinkedIn" */
- printf( esc_html__(
- 'Your %s connection needs to be reauthenticated to continue working – head to Sharing to take care of it.',
- 'jetpack'
- ), $connection_name );
- ?>
- <a
- class="publicize-external-link"
- href="<?php echo publicize_calypso_url() ?>"
- target="_blank"
- >
- <span class="publicize-external-link__text"><?php esc_html_e( 'Go to Sharing settings', 'jetpack' ); ?></span>
- <span class="dashicons dashicons-external"></span>
- </a>
- </span>
- <?php
- }
- ?>
- <?php
- }
-
- $labels = array();
- foreach ( $connections_data as $connection_data ) {
- if ( ! $connection_data['enabled'] ) {
- continue;
- }
-
- $labels[] = sprintf(
- '<strong>%s</strong>',
- esc_html( $this->connection_label( $connection_data['service_label'], $connection_data['display_name'] ) )
- );
- }
-
- ?>
- <span id="publicize-defaults"><?php echo join( ', ', $labels ); ?></span>
- <a href="#" id="publicize-form-edit"><?php esc_html_e( 'Edit', 'jetpack' ); ?></a>&nbsp;<a href="<?php echo esc_url( $this->publicize_settings_url ); ?>" rel="noopener noreferrer" target="_blank"><?php _e( 'Settings', 'jetpack' ); ?></a><br />
- <?php
-
- else :
- $publicize_form = $this->get_metabox_form_disconnected( $available_services );
-
- ?>
- <strong><?php echo __( 'Not Connected', 'jetpack' ); ?></strong>
- <a href="#" id="publicize-disconnected-form-show"><?php esc_html_e( 'Edit', 'jetpack' ); ?></a><br />
- <?php
-
- endif;
- ?>
- </span>
- <?php
- /**
- * Filter the Publicize details form.
- *
- * @module publicize
- *
- * @since 2.0.0
- *
- * @param string $publicize_form Publicize Details form appearing above Publish button in the editor.
- */
- echo apply_filters( 'publicize_form', $publicize_form );
- ?>
- </div> <?php // #publicize
- }
-
- /**
- * Generates HTML content for connections form.
- *
- * @since 6.7
- *
- * @global WP_Post $post The current post instance being published.
- *
- * @param array $connections_data
- *
- * @return array {
- * Array of content for generating connection form.
- *
- * @type string HTML content of form
- * @type array {
- * Array of connection labels for active connections only.
- *
- * @type string Connection label string.
- * }
- * }
- */
- private function get_metabox_form_connected( $connections_data ) {
- global $post;
-
- $all_done = $this->publicize->post_is_done_sharing();
- $all_connections_done = true;
-
- ob_start();
-
- ?>
- <div id="publicize-form" class="hide-if-js">
- <ul>
- <?php
-
- foreach ( $connections_data as $connection_data ) {
- $all_connections_done = $all_connections_done && $connection_data['done'];
- ?>
-
- <li>
- <label for="wpas-submit-<?php echo esc_attr( $connection_data['unique_id'] ); ?>">
- <input
- type="checkbox"
- name="wpas[submit][<?php echo esc_attr( $connection_data['unique_id'] ); ?>]"
- id="wpas-submit-<?php echo esc_attr( $connection_data['unique_id'] ); ?>"
- class="wpas-submit-<?php echo esc_attr( $connection_data['service_name'] ); ?>"
- value="1"
- <?php
- checked( true, $connection_data['enabled'] );
- disabled( false, $connection_data['toggleable'] );
- ?>
- />
- <?php if ( $connection_data['enabled'] && ! $connection_data['toggleable'] ) : // Need to submit a value to force a global connection to POST ?>
- <input
- type="hidden"
- name="wpas[submit][<?php echo esc_attr( $connection_data['unique_id'] ); ?>]"
- value="1"
- />
- <?php endif; ?>
-
- <?php echo esc_html( $this->connection_label( $connection_data['service_label'], $connection_data['display_name'] ) ); ?>
-
- </label>
- </li>
- <?php
- }
-
- $title = get_post_meta( $post->ID, $this->publicize->POST_MESS, true );
- if ( ! $title ) {
- $title = '';
- }
-
- $all_done = $all_done || $all_connections_done;
-
- ?>
-
- </ul>
-
- <label for="wpas-title"><?php _e( 'Custom Message:', 'jetpack' ); ?></label>
- <span id="wpas-title-counter" class="alignright hide-if-no-js">0</span>
- <textarea name="wpas_title" id="wpas-title"<?php disabled( $all_done ); ?>><?php echo esc_textarea( $title ); ?></textarea>
- <a href="#" class="hide-if-no-js button" id="publicize-form-hide"><?php esc_html_e( 'OK', 'jetpack' ); ?></a>
- <input type="hidden" name="wpas[0]" value="1" />
- </div>
-
- <?php if ( ! $all_done ) : ?>
- <div id="pub-connection-tests"></div>
- <?php endif; ?>
- <?php // #publicize-form
-
- return ob_get_clean();
- }
-
- private function get_metabox_form_disconnected( $available_services ) {
- ob_start();
- ?><div id="publicize-form" class="hide-if-js">
- <div id="add-publicize-check" style="display: none;"></div>
-
- <?php _e( 'Connect to', 'jetpack' ); ?>:
-
- <ul class="not-connected">
- <?php foreach ( $available_services as $service_name => $service ) : ?>
- <li>
- <a class="pub-service" data-service="<?php echo esc_attr( $service_name ); ?>" title="<?php echo esc_attr( sprintf( __( 'Connect and share your posts on %s', 'jetpack' ), $this->publicize->get_service_label( $service_name ) ) ); ?>" rel="noopener noreferrer" target="_blank" href="<?php echo esc_url( $this->publicize->connect_url( $service_name ) ); ?>">
- <?php echo esc_html( $this->publicize->get_service_label( $service_name ) ); ?>
- </a>
- </li>
- <?php endforeach; ?>
- </ul>
- <a href="#" class="hide-if-no-js button" id="publicize-disconnected-form-hide"><?php esc_html_e( 'OK', 'jetpack' ); ?></a>
- </div><?php // #publicize-form
- return ob_get_clean();
- }
-}
diff --git a/plugins/jetpack/modules/pwa.php b/plugins/jetpack/modules/pwa.php
deleted file mode 100644
index b5e5e6a2..00000000
--- a/plugins/jetpack/modules/pwa.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-/**
- * Module Name: Progressive Web Apps
- * Module Description: Speed up and improve the reliability of your site using the latest in web technology.
- * Sort Order: 38
- * Recommendation Order: 18
- * First Introduced: 5.6.0
- * Requires Connection: Yes
- * Auto Activate: No
- * Module Tags: Developers
- * Feature: Traffic
- * Additional Search Queries: manifest, pwa, progressive
- */
-
-require_once ( JETPACK__PLUGIN_DIR . 'modules/pwa/class.jetpack-pwa-helpers.php' );
-require_once ( JETPACK__PLUGIN_DIR . 'modules/pwa/class.jetpack-pwa-manifest.php' );
-
-class Jetpack_PWA {
- /**
- * @var Jetpack_PWA
- */
- private static $__instance = null;
-
- /**
- * Singleton implementation
- *
- * @return Jetpack_PWA
- */
- public static function instance() {
- if ( is_null( self::$__instance ) ) {
- self::$__instance = new Jetpack_PWA;
- }
-
- return self::$__instance;
- }
-
- private function __construct() {
- Jetpack_PWA_Manifest::instance();
- }
-}
-
-Jetpack_PWA::instance();
diff --git a/plugins/jetpack/modules/pwa/class.jetpack-pwa-helpers.php b/plugins/jetpack/modules/pwa/class.jetpack-pwa-helpers.php
deleted file mode 100644
index 4ac7602d..00000000
--- a/plugins/jetpack/modules/pwa/class.jetpack-pwa-helpers.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-class Jetpack_PWA_Helpers {
- public static function get_default_manifest_icon_sizes() {
- // These icon sizes based on conversation here:
- // https://github.com/GoogleChrome/lighthouse/issues/291
- return array(
- 192,
- 512,
- );
- }
-
- public static function site_icon_url( $size = 512 ) {
- $url = get_site_icon_url( $size );
-
- // Fall back to built-in WordPress icon
- if ( ! $url && in_array( $size, self::get_default_manifest_icon_sizes() ) ) {
- $url = esc_url_raw(
- plugins_url( "modules/pwa/images/wp-$size.png", JETPACK__PLUGIN_FILE )
- );
- }
-
- return $url;
- }
-
- public static function get_theme_color() {
- $theme_color = false;
-
- // if we have AMP enabled, use those colors?
- if ( class_exists( 'AMP_Customizer_Settings' ) ) {
- /* This filter is documented in wp-content/plugins/amp/includes/class-amp-post-template.php */
- $amp_settings = apply_filters(
- 'amp_post_template_customizer_settings',
- AMP_Customizer_Settings::get_settings(),
- null
- );
-
- if ( isset( $amp_settings['header_background_color'] ) ) {
- $theme_color = $amp_settings['header_background_color'];
- }
- }
-
- if ( ! $theme_color && current_theme_supports( 'custom-background' ) ) {
- $background_color = get_background_color(); // Returns hex key without hash or empty string
- if ( $background_color ) {
- $theme_color = "#$background_color";
- }
- }
-
- if ( ! $theme_color ) {
- $theme_color = '#fff';
- }
-
- /**
- * Allows overriding the PWA theme color which is used when loading the app.
- *
- * @since 5.6.0
- *
- * @param string $theme_color
- */
- return apply_filters( 'jetpack_pwa_background_color', $theme_color );
- }
-}
diff --git a/plugins/jetpack/modules/pwa/class.jetpack-pwa-manifest.php b/plugins/jetpack/modules/pwa/class.jetpack-pwa-manifest.php
deleted file mode 100644
index c294c2d0..00000000
--- a/plugins/jetpack/modules/pwa/class.jetpack-pwa-manifest.php
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-
-class Jetpack_PWA_Manifest {
- /**
- * @var Jetpack_PWA_Manifest
- */
- private static $__instance = null;
-
- /**
- * When this query var is present, display the PWA manifest.
- *
- * @var string
- */
- const PWA_MANIFEST_QUERY_VAR = 'jetpack_app_manifest';
-
- /**
- * Singleton implementation
- *
- * @return Jetpack_PWA_Manifest
- */
- public static function instance() {
- if ( is_null( self::$__instance ) ) {
- self::$__instance = new Jetpack_PWA_Manifest;
- }
-
- return self::$__instance;
- }
-
- /**
- * Registers actions the first time that instance() is called.
- */
- private function __construct() {
- add_action( 'wp_head', array( $this, 'render_manifest_link' ) );
- add_action( 'amp_post_template_head', array( $this, 'render_manifest_link' ) );
- add_action( 'template_redirect', array( $this, 'render_manifest_json' ), 2 );
- }
-
- function render_manifest_link() {
- ?>
- <link rel="manifest" href="<?php echo esc_url_raw( $this->get_manifest_url() ); ?>">
- <meta name="theme-color" content="<?php echo esc_attr( Jetpack_PWA_Helpers::get_theme_color() ); ?>">
- <?php
- }
-
- public function get_manifest_url() {
- return add_query_arg(
- self::PWA_MANIFEST_QUERY_VAR, '1', home_url()
- );
- }
-
- function render_manifest_json() {
- // Do not load manifest in multiple locations
- if ( is_front_page() && isset( $_GET[ self::PWA_MANIFEST_QUERY_VAR ] ) && $_GET[ self::PWA_MANIFEST_QUERY_VAR ] ) {
- @ini_set( 'display_errors', false ); // Display errors can cause the XML to be not well formed.
-
- $theme_color = Jetpack_PWA_Helpers::get_theme_color();
-
- $manifest = array(
- 'name' => get_bloginfo( 'name' ),
- 'start_url' => get_home_url(),
- 'short_name' => substr( get_bloginfo( 'name' ), 0, 12 ),
- 'display' => 'standalone',
- 'background_color' => $theme_color,
- 'theme_color' => $theme_color,
- );
-
- if ( $description = get_bloginfo( 'description' ) ) {
- $manifest['description'] = $description;
- }
-
- $manifest['icons'] = array_map(
- array( $this, 'build_icon_object' ),
- Jetpack_PWA_Helpers::get_default_manifest_icon_sizes()
- );
-
- /**
- * Allow overriding the manifest.
- *
- * @since 5.6.0
- *
- * @param array $manifest
- */
- $manifest = apply_filters( 'jetpack_pwa_manifest', $manifest );
-
- wp_send_json( $manifest );
- }
- }
-
- function build_icon_object( $size ) {
- return array(
- 'src' => Jetpack_PWA_Helpers::site_icon_url( $size ),
- 'sizes' => sprintf( '%1$dx%1$d', $size ),
- );
- }
-}
diff --git a/plugins/jetpack/modules/pwa/images/wp-192.png b/plugins/jetpack/modules/pwa/images/wp-192.png
deleted file mode 100644
index 9bfd50f7..00000000
--- a/plugins/jetpack/modules/pwa/images/wp-192.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/pwa/images/wp-512.png b/plugins/jetpack/modules/pwa/images/wp-512.png
deleted file mode 100644
index 36106626..00000000
--- a/plugins/jetpack/modules/pwa/images/wp-512.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/random-redirect.php b/plugins/jetpack/modules/random-redirect.php
deleted file mode 100644
index 88c13090..00000000
--- a/plugins/jetpack/modules/random-redirect.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Deprecated. No longer needed.
- *
- * @package Jetpack
- */
diff --git a/plugins/jetpack/modules/related-posts.php b/plugins/jetpack/modules/related-posts.php
deleted file mode 100644
index 11a71201..00000000
--- a/plugins/jetpack/modules/related-posts.php
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-/**
- * Module Name: Related posts
- * Module Description: Keep visitors engaged on your blog by highlighting relevant and new content at the bottom of each published post.
- * First Introduced: 2.9
- * Sort Order: 29
- * Recommendation Order: 9
- * Requires Connection: Yes
- * Auto Activate: No
- * Module Tags: Recommended
- * Feature: Engagement
- * Additional Search Queries: related, jetpack related posts, related posts for wordpress, related posts, popular posts, popular, related content, related post, contextual, context, contextual related posts, related articles, similar posts, easy related posts, related page, simple related posts, free related posts, related thumbnails, similar, engagement, yet another related posts plugin
- */
-class Jetpack_RelatedPosts_Module {
- /**
- * Class variables
- */
- private static $__instance = null;
-
- /**
- * Singleton implementation
- *
- * @return object
- */
- public static function instance() {
- if ( ! is_a( self::$__instance, 'Jetpack_RelatedPosts_Module' ) )
- self::$__instance = new Jetpack_RelatedPosts_Module();
-
- return self::$__instance;
- }
-
- /**
- * Register actions and filters
- *
- * @uses add_action, add_filter
- */
- private function __construct() {
- add_action( 'jetpack_module_loaded_related-posts', array( $this, 'action_on_load' ) );
- }
-
- /**
- * This action triggers if the module is in an active state, load related posts and options.
- *
- * @uses Jetpack_RelatedPosts::init, is_admin, Jetpack::enable_module_configurable, Jetpack::module_configuration_load, Jetpack_Sync::sync_posts
- * @return null
- */
- public function action_on_load() {
- require_once 'related-posts/jetpack-related-posts.php';
- Jetpack_RelatedPosts::init();
-
- if ( is_admin() ) {
- // Enable "Configure" button on module card
- Jetpack::enable_module_configurable( __FILE__ );
- Jetpack::module_configuration_load( __FILE__, array( $this, 'module_configuration_load' ) );
- }
-
- // Load Customizer controls.
- if ( class_exists( 'WP_Customize_Manager' ) ) {
- require_once 'related-posts/class.related-posts-customize.php';
- }
- }
-
- /**
- * Redirect configure button to Settings > Reading
- *
- * @uses wp_safe_redirect, admin_url
- * @return null
- */
- public function module_configuration_load() {
- wp_safe_redirect( admin_url( 'options-reading.php#jetpack_relatedposts' ) );
- exit;
- }
-
-}
-
-// Do it.
-Jetpack_RelatedPosts_Module::instance();
diff --git a/plugins/jetpack/modules/related-posts/class.related-posts-customize.php b/plugins/jetpack/modules/related-posts/class.related-posts-customize.php
deleted file mode 100644
index 8f15ca69..00000000
--- a/plugins/jetpack/modules/related-posts/class.related-posts-customize.php
+++ /dev/null
@@ -1,300 +0,0 @@
-<?php
-
-// Exit if file is accessed directly
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-/**
- * Class to include elements to modify Related Posts look in Customizer.
- *
- * @since 4.4.0
- */
-class Jetpack_Related_Posts_Customize {
-
- /**
- * Key for panel, section and prefix for options. Same option name than in Options > Reading.
- *
- * @var string
- */
- var $prefix = 'jetpack_relatedposts';
-
- /**
- * @var string Control to focus when customizer loads.
- */
- var $focus = '';
-
- /**
- * Class initialization.
- *
- * @since 4.4.0
- */
- function __construct() {
- add_action( 'customize_register', array( $this, 'customize_register' ) );
- add_action( 'customize_controls_enqueue_scripts', array( $this, 'customize_controls_enqueue_scripts' ) );
- }
-
- /**
- * Initialize Customizer controls.
- *
- * @since 4.4.0
- *
- * @param WP_Customize_Manager $wp_customize Customizer instance.
- */
- function customize_register( $wp_customize ) {
-
- $wp_customize->add_section( $this->prefix,
- array(
- 'title' => esc_html__( 'Related Posts', 'jetpack' ),
- 'description' => '',
- 'capability' => 'edit_theme_options',
- 'priority' => 200,
- )
- );
-
- $selective_options = array();
-
- foreach ( $this->get_options( $wp_customize ) as $key => $field ) {
- $control_id = "$this->prefix[$key]";
- $selective_options[] = $control_id;
- $wp_customize->add_setting( $control_id,
- array(
- 'default' => isset( $field['default'] ) ? $field['default'] : '',
- 'type' => isset( $field['setting_type'] ) ? $field['setting_type'] : 'option',
- 'capability' => isset( $field['capability'] ) ? $field['capability'] : 'edit_theme_options',
- 'transport' => isset( $field['transport'] ) ? $field['transport'] : 'postMessage',
- )
- );
- $control_settings = array(
- 'label' => isset( $field['label'] ) ? $field['label'] : '',
- 'description' => isset( $field['description'] ) ? $field['description'] : '',
- 'settings' => $control_id,
- 'type' => isset( $field['control_type'] ) ? $field['control_type'] : 'text',
- 'section' => $this->prefix,
- 'priority' => 10,
- 'active_callback' => isset( $field['active_callback'] ) ? $field['active_callback'] : __CLASS__ . '::is_single',
- );
- switch ( $field['control_type'] ) {
- case 'text':
- case 'checkbox':
- default:
- $wp_customize->add_control( new WP_Customize_Control( $wp_customize, $control_id, $control_settings ) );
- break;
- case 'select':
- if ( isset( $field['choices'] ) ) {
- $control_settings['choices'] = $field['choices'];
- $wp_customize->add_control( new WP_Customize_Control( $wp_customize, $control_id, $control_settings ) );
- }
- break;
- case 'message':
- $wp_customize->add_control( new Jetpack_Message_Control( $wp_customize, $control_id, $control_settings ) );
- break;
- }
- }
-
- // If selective refresh is available, implement it.
- if ( isset( $wp_customize->selective_refresh ) ) {
- $wp_customize->selective_refresh->add_partial( "$this->prefix", array(
- 'selector' => '.jp-relatedposts:not(.jp-relatedposts-block)',
- 'settings' => $selective_options,
- 'render_callback' => __CLASS__ . '::render_callback',
- 'container_inclusive' => false,
- ) );
- }
-
- }
-
- /**
- * Callback that outputs the headline based on user choice.
- *
- * @since 4.4.0
- */
- public static function render_callback() {
- echo Jetpack_RelatedPosts::init()->get_headline();
- }
-
- /**
- * Check whether the current post contains a Related Posts block.
- *
- * @since 6.9.0
- *
- * @return bool
- */
- public static function contains_related_posts_block() {
- if ( has_block( 'jetpack/related-posts' ) ) {
- return true;
- }
-
- return false;
- }
-
- /**
- * Check that we're in a single post view.
- * Will return `false` if the current post contains a Related Posts block,
- * because in that case we want to hide the Customizer controls.
- *
- * @since 4.4.0
- *
- * @return bool
- */
- public static function is_single() {
- if ( self::contains_related_posts_block() ) {
- return false;
- }
- return is_single();
- }
-
- /**
- * Check that we're not in a single post view.
- * Will return `false` if the current post contains a Related Posts block,
- * because in that case we want to hide the Customizer controls.
- *
- * @since 4.4.0
- *
- * @return bool
- */
- public static function is_not_single() {
- if ( self::contains_related_posts_block() ) {
- return false;
- }
- return ! is_single();
- }
-
- /**
- * Return list of options to modify.
- *
- * @since 4.4.0
- *
- * @param object $wp_customize Instance of WP Customizer
- *
- * @return mixed|void
- */
- function get_options( $wp_customize ) {
- $transport = isset( $wp_customize->selective_refresh ) ? 'postMessage' : 'refresh';
-
- $switched_locale = switch_to_locale( get_user_locale() );
- $headline = __( 'Related', 'jetpack' );
- if ( $switched_locale ) {
- restore_previous_locale();
- }
-
- /**
- * The filter allows you to change the options used to display Related Posts in the Customizer.
- *
- * @module related-posts
- *
- * @since 4.4.0
- *
- * @param array $options Array of options used to display Related Posts in the Customizer.
- */
- return apply_filters(
- 'jetpack_related_posts_customize_options', array(
- 'enabled' => array(
- 'control_type' => 'hidden',
- 'default' => 1,
- 'setting_type' => 'option',
- 'transport' => $transport,
- ),
- 'show_headline' => array(
- 'label' => esc_html__( 'Show a headline', 'jetpack' ),
- 'description' => esc_html__( 'This helps to clearly separate the related posts from post content.', 'jetpack' ),
- 'control_type' => 'checkbox',
- 'default' => 1,
- 'setting_type' => 'option',
- 'transport' => $transport,
- ),
- 'headline' => array(
- 'label' => '',
- 'description' => esc_html__( 'Enter text to use as headline.', 'jetpack' ),
- 'control_type' => 'text',
- 'default' => esc_html( $headline ),
- 'setting_type' => 'option',
- 'transport' => $transport,
- ),
- 'show_thumbnails' => array(
- 'label' => esc_html__( 'Show thumbnails', 'jetpack' ),
- 'description' => esc_html__( 'Show a thumbnail image where available.', 'jetpack' ),
- 'control_type' => 'checkbox',
- 'default' => 1,
- 'setting_type' => 'option',
- 'transport' => $transport,
- ),
- 'show_date' => array(
- 'label' => esc_html__( 'Show date', 'jetpack' ),
- 'description' => esc_html__( 'Display date when entry was published.', 'jetpack' ),
- 'control_type' => 'checkbox',
- 'default' => 1,
- 'setting_type' => 'option',
- 'transport' => $transport,
- ),
- 'show_context' => array(
- 'label' => esc_html__( 'Show context', 'jetpack' ),
- 'description' => esc_html__( "Display entry's category or tag.", 'jetpack' ),
- 'control_type' => 'checkbox',
- 'default' => 1,
- 'setting_type' => 'option',
- 'transport' => $transport,
- ),
- 'layout' => array(
- 'label' => esc_html__( 'Layout', 'jetpack' ),
- 'description' => esc_html__( 'Arrange entries in different layouts.', 'jetpack' ),
- 'control_type' => 'select',
- 'choices' => array(
- 'grid' => esc_html__( 'Grid', 'jetpack' ),
- 'list' => esc_html__( 'List', 'jetpack' ),
- ),
- 'default' => 'grid',
- 'setting_type' => 'option',
- 'transport' => $transport,
- ),
- 'msg_go_to_single' => array(
- 'description' => esc_html__( 'Please visit a single post view to reveal the customization options.', 'jetpack' ),
- 'control_type' => 'message',
- 'active_callback' => __CLASS__ . '::is_not_single',
- ),
- 'msg_example' => array(
- 'description' => esc_html__( 'Please note that the related posts displayed now are only for previewing purposes.', 'jetpack' ),
- 'control_type' => 'message',
- ),
- )
- );
- }
-
- /**
- * Enqueue assets for Customizer controls.
- *
- * @since 4.4.0
- */
- function customize_controls_enqueue_scripts() {
- wp_enqueue_script(
- 'jetpack_related-posts-customizer',
- Jetpack::get_file_url_for_environment(
- '_inc/build/related-posts/related-posts-customizer.min.js',
- 'modules/related-posts/related-posts-customizer.js'
- ),
- array( 'customize-controls' ),
- JETPACK__VERSION
- );
- }
-
-} // class end
-
-/**
- * Control that displays a message in Customizer.
- *
- * @since 4.4.0
- */
-class Jetpack_Message_Control extends WP_Customize_Control {
-
- /**
- * Render the message.
- *
- * @since 4.4.0
- */
- public function render_content() {
- echo '<p class="description">' . esc_html( $this->description ) . '</p>';
- }
-} // class end
-
-// Initialize controls
-new Jetpack_Related_Posts_Customize;
diff --git a/plugins/jetpack/modules/related-posts/jetpack-related-posts.php b/plugins/jetpack/modules/related-posts/jetpack-related-posts.php
deleted file mode 100644
index ebd91cf1..00000000
--- a/plugins/jetpack/modules/related-posts/jetpack-related-posts.php
+++ /dev/null
@@ -1,1801 +0,0 @@
-<?php
-class Jetpack_RelatedPosts {
- const VERSION = '20190204';
- const SHORTCODE = 'jetpack-related-posts';
-
- private static $instance = null;
- private static $instance_raw = null;
-
- /**
- * Creates and returns a static instance of Jetpack_RelatedPosts.
- *
- * @return Jetpack_RelatedPosts
- */
- public static function init() {
- if ( ! self::$instance ) {
- if ( class_exists('WPCOM_RelatedPosts') && method_exists( 'WPCOM_RelatedPosts', 'init' ) ) {
- self::$instance = WPCOM_RelatedPosts::init();
- } else {
- self::$instance = new Jetpack_RelatedPosts();
- }
- }
-
- return self::$instance;
- }
-
- /**
- * Creates and returns a static instance of Jetpack_RelatedPosts_Raw.
- *
- * @return Jetpack_RelatedPosts
- */
- public static function init_raw() {
- if ( ! self::$instance_raw ) {
- if ( class_exists('WPCOM_RelatedPosts') && method_exists( 'WPCOM_RelatedPosts', 'init_raw' ) ) {
- self::$instance_raw = WPCOM_RelatedPosts::init_raw();
- } else {
- self::$instance_raw = new Jetpack_RelatedPosts_Raw();
- }
- }
-
- return self::$instance_raw;
- }
-
- protected $_options;
- protected $_allow_feature_toggle;
- protected $_blog_charset;
- protected $_convert_charset;
- protected $_previous_post_id;
- protected $_found_shortcode = false;
-
- /**
- * Constructor for Jetpack_RelatedPosts.
- *
- * @uses get_option, add_action, apply_filters
- * @return null
- */
- public function __construct() {
- $this->_blog_charset = get_option( 'blog_charset' );
- $this->_convert_charset = ( function_exists( 'iconv' ) && ! preg_match( '/^utf\-?8$/i', $this->_blog_charset ) );
-
- add_action( 'admin_init', array( $this, 'action_admin_init' ) );
- add_action( 'wp', array( $this, 'action_frontend_init' ) );
-
- if ( ! class_exists( 'Jetpack_Media_Summary' ) ) {
- jetpack_require_lib( 'class.media-summary' );
- }
-
- // Add Related Posts to the REST API Post response.
- add_action( 'rest_api_init', array( $this, 'rest_register_related_posts' ) );
-
- jetpack_register_block(
- 'jetpack/related-posts',
- array(
- 'render_callback' => array( $this, 'render_block' ),
- )
- );
- }
-
- protected function get_blog_id() {
- return Jetpack_Options::get_option( 'id' );
- }
-
- /**
- * =================
- * ACTIONS & FILTERS
- * =================
- */
-
- /**
- * Add a checkbox field to Settings > Reading for enabling related posts.
- *
- * @action admin_init
- * @uses add_settings_field, __, register_setting, add_action
- * @return null
- */
- public function action_admin_init() {
-
- // Add the setting field [jetpack_relatedposts] and place it in Settings > Reading
- add_settings_field( 'jetpack_relatedposts', '<span id="jetpack_relatedposts">' . __( 'Related posts', 'jetpack' ) . '</span>', array( $this, 'print_setting_html' ), 'reading' );
- register_setting( 'reading', 'jetpack_relatedposts', array( $this, 'parse_options' ) );
- add_action('admin_head', array( $this, 'print_setting_head' ) );
-
- if( 'options-reading.php' == $GLOBALS['pagenow'] ) {
- // Enqueue style for live preview on the reading settings page
- $this->_enqueue_assets( false, true );
- }
- }
-
- /**
- * Load related posts assets if it's a elegiable front end page or execute search and return JSON if it's an endpoint request.
- *
- * @global $_GET
- * @action wp
- * @uses add_shortcode, get_the_ID
- * @returns null
- */
- public function action_frontend_init() {
- // Add a shortcode handler that outputs nothing, this gets overridden later if we can display related content
- add_shortcode( self::SHORTCODE, array( $this, 'get_target_html_unsupported' ) );
-
- if ( ! $this->_enabled_for_request() )
- return;
-
- if ( isset( $_GET['relatedposts'] ) ) {
- $excludes = $this->parse_numeric_get_arg( 'relatedposts_exclude' );
- $this->_action_frontend_init_ajax( $excludes );
- } else {
- if ( isset( $_GET['relatedposts_hit'], $_GET['relatedposts_origin'], $_GET['relatedposts_position'] ) ) {
- $this->_log_click( $_GET['relatedposts_origin'], get_the_ID(), $_GET['relatedposts_position'] );
- $this->_previous_post_id = (int) $_GET['relatedposts_origin'];
- }
-
- $this->_action_frontend_init_page();
- }
-
- }
-
- /**
- * Render insertion point.
- *
- * @since 4.2.0
- *
- * @return string
- */
- public function get_headline() {
- $options = $this->get_options();
-
- if ( $options['show_headline'] ) {
- $headline = sprintf(
- /** This filter is already documented in modules/sharedaddy/sharing-service.php */
- apply_filters( 'jetpack_sharing_headline_html', '<h3 class="jp-relatedposts-headline"><em>%s</em></h3>', esc_html( $options['headline'] ), 'related-posts' ),
- esc_html( $options['headline'] )
- );
- } else {
- $headline = '';
- }
- return $headline;
- }
-
- /**
- * Adds a target to the post content to load related posts into if a shortcode for it did not already exist.
- * Will skip adding the target if the post content contains a Related Posts block.
- *
- * @filter the_content
- * @param string $content
- * @returns string
- */
- public function filter_add_target_to_dom( $content ) {
- if ( has_block( 'jetpack/related-posts', $content ) ) {
- return $content;
- }
-
- if ( ! $this->_found_shortcode ) {
- $content .= "\n" . $this->get_target_html();
- }
-
- return $content;
- }
-
- /**
- * Looks for our shortcode on the unfiltered content, this has to execute early.
- *
- * @filter the_content
- * @param string $content
- * @uses has_shortcode
- * @returns string
- */
- public function test_for_shortcode( $content ) {
- $this->_found_shortcode = has_shortcode( $content, self::SHORTCODE );
-
- return $content;
- }
-
- /**
- * Returns the HTML for the related posts section.
- *
- * @uses esc_html__, apply_filters
- * @returns string
- */
- public function get_target_html() {
- require_once JETPACK__PLUGIN_DIR . '/sync/class.jetpack-sync-settings.php';
- if ( Jetpack_Sync_Settings::is_syncing() ) {
- return '';
- }
-
- /**
- * Filter the Related Posts headline.
- *
- * @module related-posts
- *
- * @since 3.0.0
- *
- * @param string $headline Related Posts heading.
- */
- $headline = apply_filters( 'jetpack_relatedposts_filter_headline', $this->get_headline() );
-
- if ( $this->_previous_post_id ) {
- $exclude = "data-exclude='{$this->_previous_post_id}'";
- } else {
- $exclude = "";
- }
-
- return <<<EOT
-<div id='jp-relatedposts' class='jp-relatedposts' $exclude>
- $headline
-</div>
-EOT;
- }
-
- /**
- * Returns the HTML for the related posts section if it's running in the loop or other instances where we don't support related posts.
- *
- * @returns string
- */
- public function get_target_html_unsupported() {
- require_once JETPACK__PLUGIN_DIR . '/sync/class.jetpack-sync-settings.php';
- if ( Jetpack_Sync_Settings::is_syncing() ) {
- return '';
- }
- return "\n\n<!-- Jetpack Related Posts is not supported in this context. -->\n\n";
- }
-
- /**
- * ===============
- * GUTENBERG BLOCK
- * ===============
- */
-
- /**
- * Echoes out items for the Gutenberg block
- *
- * @param array $related_post The post oject.
- * @param array $block_attributes The block attributes.
- */
- public function render_block_item( $related_post, $block_attributes ) {
- $instance_id = 'related-posts-item-' . uniqid();
- $label_id = $instance_id . '-label';
-
- $item_markup = sprintf(
- '<ul id="%1$s" aria-labelledby="%2$s" class="jp-related-posts-i2__post" role="menuitem">',
- esc_attr( $instance_id ),
- esc_attr( $label_id )
- );
-
- $item_markup .= sprintf(
- '<li class="jp-related-posts-i2__post-link"><a id="%1$s" href="%2$s" rel="%4$s">%3$s</a></li>',
- esc_attr( $label_id ),
- esc_url( $related_post['url'] ),
- esc_attr( $related_post['title'] ),
- esc_attr( $related_post['rel'] )
- );
-
- if ( ! empty( $block_attributes['show_thumbnails'] ) && ! empty( $related_post['img']['src'] ) ) {
- $img_link = sprintf(
- '<li class="jp-related-posts-i2__post-img-link"><a href="%1$s" rel="%2$s"><img src="%3$s" width="%4$s" alt="%5$s" /></a></li>',
- esc_url( $related_post['url'] ),
- esc_attr( $related_post['rel'] ),
- esc_url( $related_post['img']['src'] ),
- esc_attr( $related_post['img']['width'] ),
- esc_attr( $related_post['img']['alt_text'] )
- );
-
- $item_markup .= $img_link;
- }
-
- if ( $block_attributes['show_date'] ) {
- $date_tag = sprintf(
- '<li class="jp-related-posts-i2__post-date">%1$s</li>',
- esc_html( $related_post['date'] )
- );
-
- $item_markup .= $date_tag;
- }
-
- if ( ( $block_attributes['show_context'] ) && ! empty( $related_post['context'] ) ) {
- $context_tag = sprintf(
- '<li class="jp-related-posts-i2__post-context">%1$s</li>',
- esc_html( $related_post['context'] )
- );
-
- $item_markup .= $context_tag;
- }
-
- $item_markup .= '</ul>';
-
- return $item_markup;
- }
-
- /**
- * Render a related posts row.
- *
- * @param array $posts The posts to render into the row.
- * @param array $block_attributes Block attributes.
- */
- public function render_block_row( $posts, $block_attributes ) {
- $rows_markup = '';
- foreach ( $posts as $post ) {
- $rows_markup .= $this->render_block_item( $post, $block_attributes );
- }
- return sprintf(
- '<div class="jp-related-posts-i2__row" data-post-count="%1$s">%2$s</div>',
- count( $posts ),
- $rows_markup
- );
- }
-
- /**
- * Render the related posts markup.
- *
- * @param array $attributes Block attributes.
- * @return string
- */
- public function render_block( $attributes ) {
- $block_attributes = array(
- 'show_thumbnails' => isset( $attributes['displayThumbnails'] ) && $attributes['displayThumbnails'],
- 'show_date' => isset( $attributes['displayDate'] ) ? (bool) $attributes['displayDate'] : true,
- 'show_context' => isset( $attributes['displayContext'] ) && $attributes['displayContext'],
- 'layout' => isset( $attributes['postLayout'] ) && 'list' === $attributes['postLayout'] ? $attributes['postLayout'] : 'grid',
- 'size' => ! empty( $attributes['postsToShow'] ) ? absint( $attributes['postsToShow'] ) : 3,
- );
-
- $excludes = $this->parse_numeric_get_arg( 'relatedposts_origin' );
- $related_posts = $this->get_for_post_id(
- get_the_ID(),
- array(
- 'size' => $block_attributes['size'],
- 'exclude_post_ids' => $excludes,
- )
- );
-
- $display_lower_row = $block_attributes['size'] > 3;
-
- if ( empty( $related_posts ) ) {
- return '';
- }
-
- switch ( count( $related_posts ) ) {
- case 2:
- case 4:
- case 5:
- $top_row_end = 2;
- break;
-
- default:
- $top_row_end = 3;
- break;
- }
-
- $upper_row_posts = array_slice( $related_posts, 0, $top_row_end );
- $lower_row_posts = array_slice( $related_posts, $top_row_end );
-
- $rows_markup = $this->render_block_row( $upper_row_posts, $block_attributes );
- if ( $display_lower_row ) {
- $rows_markup .= $this->render_block_row( $lower_row_posts, $block_attributes );
- }
-
- $target_to_dom_priority = has_filter(
- 'the_content',
- array( $this, 'filter_add_target_to_dom' )
- );
- remove_filter(
- 'the_content',
- array( $this, 'filter_add_target_to_dom' ),
- $target_to_dom_priority
- );
-
- /*
- Below is a hack to get the block content to render correctly.
-
- This functionality should be covered in /inc/blocks.php but due to an error,
- this has not been fixed as of this writing.
-
- Alda has submitted a patch to Core in order to have this issue fixed at
- https://core.trac.wordpress.org/attachment/ticket/45495/do_blocks.diff and
- hopefully it makes to to the final RC of WP 5.1.
- */
- $priority = has_filter( 'the_content', 'wpautop' );
- remove_filter( 'the_content', 'wpautop', $priority );
- add_filter( 'the_content', '_restore_wpautop_hook', $priority + 1 );
-
- return sprintf(
- '<nav class="jp-relatedposts-i2" data-layout="%1$s">%2$s</nav>',
- esc_attr( $block_attributes['layout'] ),
- $rows_markup
- );
- }
-
- /**
- * ========================
- * PUBLIC UTILITY FUNCTIONS
- * ========================
- */
-
- /**
- * Parse a numeric GET variable to an array of values.
- *
- * @since 6.9.0
- *
- * @uses absint
- *
- * @param string $arg Name of the GET variable
- * @return array $result Parsed value(s)
- */
- public function parse_numeric_get_arg( $arg ) {
- $result = array();
-
- if ( isset( $_GET[ $arg ] ) ) {
- if ( is_string( $_GET[ $arg ] ) ) {
- $result = explode( ',', $_GET[ $arg ] );
- } elseif ( is_array( $_GET[ $arg ] ) ) {
- $result = array_values( $_GET[ $arg ] );
- }
-
- $result = array_unique( array_filter( array_map( 'absint', $result ) ) );
- }
-
- return $result;
- }
-
- /**
- * Gets options set for Jetpack_RelatedPosts and merge with defaults.
- *
- * @uses Jetpack_Options::get_option, apply_filters
- * @return array
- */
- public function get_options() {
- if ( null === $this->_options ) {
- $this->_options = Jetpack_Options::get_option( 'relatedposts', array() );
- if ( ! is_array( $this->_options ) )
- $this->_options = array();
- if ( ! isset( $this->_options['enabled'] ) )
- $this->_options['enabled'] = true;
- if ( ! isset( $this->_options['show_headline'] ) )
- $this->_options['show_headline'] = true;
- if ( ! isset( $this->_options['show_thumbnails'] ) )
- $this->_options['show_thumbnails'] = false;
- if ( ! isset( $this->_options['show_date'] ) ) {
- $this->_options['show_date'] = true;
- }
- if ( ! isset( $this->_options['show_context'] ) ) {
- $this->_options['show_context'] = true;
- }
- if ( ! isset( $this->_options['layout'] ) ) {
- $this->_options['layout'] = 'grid';
- }
- if ( ! isset( $this->_options['headline'] ) ) {
- $this->_options['headline'] = esc_html__( 'Related', 'jetpack' );
- }
- if ( empty( $this->_options['size'] ) || (int)$this->_options['size'] < 1 )
- $this->_options['size'] = 3;
-
- /**
- * Filter Related Posts basic options.
- *
- * @module related-posts
- *
- * @since 2.8.0
- *
- * @param array $this->_options Array of basic Related Posts options.
- */
- $this->_options = apply_filters( 'jetpack_relatedposts_filter_options', $this->_options );
- }
-
- return $this->_options;
- }
-
- public function get_option( $option_name ) {
- $options = $this->get_options();
-
- if ( isset( $options[ $option_name ] ) ) {
- return $options[ $option_name ];
- }
-
- return false;
- }
-
- /**
- * Parses input and returns normalized options array.
- *
- * @param array $input
- * @uses self::get_options
- * @return array
- */
- public function parse_options( $input ) {
- $current = $this->get_options();
-
- if ( !is_array( $input ) )
- $input = array();
-
- if (
- ! isset( $input['enabled'] )
- || isset( $input['show_date'] )
- || isset( $input['show_context'] )
- || isset( $input['layout'] )
- || isset( $input['headline'] )
- ) {
- $input['enabled'] = '1';
- }
-
- if ( '1' == $input['enabled'] ) {
- $current['enabled'] = true;
- $current['show_headline'] = ( isset( $input['show_headline'] ) && '1' == $input['show_headline'] );
- $current['show_thumbnails'] = ( isset( $input['show_thumbnails'] ) && '1' == $input['show_thumbnails'] );
- $current['show_date'] = ( isset( $input['show_date'] ) && '1' == $input['show_date'] );
- $current['show_context'] = ( isset( $input['show_context'] ) && '1' == $input['show_context'] );
- $current['layout'] = isset( $input['layout'] ) && in_array( $input['layout'], array( 'grid', 'list' ), true ) ? $input['layout'] : 'grid';
- $current['headline'] = isset( $input['headline'] ) ? $input['headline'] : esc_html__( 'Related', 'jetpack' );
- } else {
- $current['enabled'] = false;
- }
-
- if ( isset( $input['size'] ) && (int)$input['size'] > 0 )
- $current['size'] = (int)$input['size'];
- else
- $current['size'] = null;
-
- return $current;
- }
-
- /**
- * HTML for admin settings page.
- *
- * @uses self::get_options, checked, esc_html__
- * @returns null
- */
- public function print_setting_html() {
- $options = $this->get_options();
-
- $ui_settings_template = <<<EOT
-<p class="description">%s</p>
-<ul id="settings-reading-relatedposts-customize">
- <li>
- <label><input name="jetpack_relatedposts[show_headline]" type="checkbox" value="1" %s /> %s</label>
- </li>
- <li>
- <label><input name="jetpack_relatedposts[show_thumbnails]" type="checkbox" value="1" %s /> %s</label>
- </li>
- <li>
- <label><input name="jetpack_relatedposts[show_date]" type="checkbox" value="1" %s /> %s</label>
- </li>
- <li>
- <label><input name="jetpack_relatedposts[show_context]" type="checkbox" value="1" %s /> %s</label>
- </li>
-</ul>
-<div id='settings-reading-relatedposts-preview'>
- %s
- <div id="jp-relatedposts" class="jp-relatedposts"></div>
-</div>
-EOT;
- $ui_settings = sprintf(
- $ui_settings_template,
- esc_html__( 'The following settings will impact all related posts on your site, except for those you created via the block editor:', 'jetpack' ),
- checked( $options['show_headline'], true, false ),
- esc_html__( 'Highlight related content with a heading', 'jetpack' ),
- checked( $options['show_thumbnails'], true, false ),
- esc_html__( 'Show a thumbnail image where available', 'jetpack' ),
- checked( $options['show_date'], true, false ),
- esc_html__( 'Show entry date', 'jetpack' ),
- checked( $options['show_context'], true, false ),
- esc_html__( 'Show context (category or tag)', 'jetpack' ),
- esc_html__( 'Preview:', 'jetpack' )
- );
-
- if ( !$this->_allow_feature_toggle() ) {
- $template = <<<EOT
-<input type="hidden" name="jetpack_relatedposts[enabled]" value="1" />
-%s
-EOT;
- printf(
- $template,
- $ui_settings
- );
- } else {
- $template = <<<EOT
-<ul id="settings-reading-relatedposts">
- <li>
- <label><input type="radio" name="jetpack_relatedposts[enabled]" value="0" class="tog" %s /> %s</label>
- </li>
- <li>
- <label><input type="radio" name="jetpack_relatedposts[enabled]" value="1" class="tog" %s /> %s</label>
- %s
- </li>
-</ul>
-EOT;
- printf(
- $template,
- checked( $options['enabled'], false, false ),
- esc_html__( 'Hide related content after posts', 'jetpack' ),
- checked( $options['enabled'], true, false ),
- esc_html__( 'Show related content after posts', 'jetpack' ),
- $ui_settings
- );
- }
- }
-
- /**
- * Head JS/CSS for admin settings page.
- *
- * @uses esc_html__
- * @returns null
- */
- public function print_setting_head() {
-
- // only dislay the Related Posts JavaScript on the Reading Settings Admin Page
- $current_screen = get_current_screen();
-
- if ( is_null( $current_screen ) ) {
- return;
- }
-
- if( 'options-reading' != $current_screen->id )
- return;
-
- $related_headline = sprintf(
- '<h3 class="jp-relatedposts-headline"><em>%s</em></h3>',
- esc_html__( 'Related', 'jetpack' )
- );
-
- $href_params = 'class="jp-relatedposts-post-a" href="#jetpack_relatedposts" rel="nofollow" data-origin="0" data-position="0"';
- $related_with_images = <<<EOT
-<div class="jp-relatedposts-items jp-relatedposts-items-visual">
- <div class="jp-relatedposts-post jp-relatedposts-post0 jp-relatedposts-post-thumbs" data-post-id="0" data-post-format="image">
- <a $href_params>
- <img class="jp-relatedposts-post-img" src="https://jetpackme.files.wordpress.com/2019/03/cat-blog.png" width="350" alt="Big iPhone/iPad Update Now Available" scale="0">
- </a>
- <h4 class="jp-relatedposts-post-title">
- <a $href_params>Big iPhone/iPad Update Now Available</a>
- </h4>
- <p class="jp-relatedposts-post-excerpt">Big iPhone/iPad Update Now Available</p>
- <p class="jp-relatedposts-post-context">In "Mobile"</p>
- </div>
- <div class="jp-relatedposts-post jp-relatedposts-post1 jp-relatedposts-post-thumbs" data-post-id="0" data-post-format="image">
- <a $href_params>
- <img class="jp-relatedposts-post-img" src="https://jetpackme.files.wordpress.com/2019/03/devices.jpg" width="350" alt="The WordPress for Android App Gets a Big Facelift" scale="0">
- </a>
- <h4 class="jp-relatedposts-post-title">
- <a $href_params>The WordPress for Android App Gets a Big Facelift</a>
- </h4>
- <p class="jp-relatedposts-post-excerpt">The WordPress for Android App Gets a Big Facelift</p>
- <p class="jp-relatedposts-post-context">In "Mobile"</p>
- </div>
- <div class="jp-relatedposts-post jp-relatedposts-post2 jp-relatedposts-post-thumbs" data-post-id="0" data-post-format="image">
- <a $href_params>
- <img class="jp-relatedposts-post-img" src="https://jetpackme.files.wordpress.com/2019/03/mobile-wedding.jpg" width="350" alt="Upgrade Focus: VideoPress For Weddings" scale="0">
- </a>
- <h4 class="jp-relatedposts-post-title">
- <a $href_params>Upgrade Focus: VideoPress For Weddings</a>
- </h4>
- <p class="jp-relatedposts-post-excerpt">Upgrade Focus: VideoPress For Weddings</p>
- <p class="jp-relatedposts-post-context">In "Upgrade"</p>
- </div>
-</div>
-EOT;
- $related_with_images = str_replace( "\n", '', $related_with_images );
- $related_without_images = <<<EOT
-<div class="jp-relatedposts-items jp-relatedposts-items-minimal">
- <p class="jp-relatedposts-post jp-relatedposts-post0" data-post-id="0" data-post-format="image">
- <span class="jp-relatedposts-post-title"><a $href_params>Big iPhone/iPad Update Now Available</a></span>
- <span class="jp-relatedposts-post-context">In "Mobile"</span>
- </p>
- <p class="jp-relatedposts-post jp-relatedposts-post1" data-post-id="0" data-post-format="image">
- <span class="jp-relatedposts-post-title"><a $href_params>The WordPress for Android App Gets a Big Facelift</a></span>
- <span class="jp-relatedposts-post-context">In "Mobile"</span>
- </p>
- <p class="jp-relatedposts-post jp-relatedposts-post2" data-post-id="0" data-post-format="image">
- <span class="jp-relatedposts-post-title"><a $href_params>Upgrade Focus: VideoPress For Weddings</a></span>
- <span class="jp-relatedposts-post-context">In "Upgrade"</span>
- </p>
-</div>
-EOT;
- $related_without_images = str_replace( "\n", '', $related_without_images );
-
- if ( $this->_allow_feature_toggle() ) {
- $extra_css = '#settings-reading-relatedposts-customize { padding-left:2em; margin-top:.5em; }';
- } else {
- $extra_css = '';
- }
-
- echo <<<EOT
-<style type="text/css">
- #settings-reading-relatedposts .disabled { opacity:.5; filter:Alpha(opacity=50); }
- #settings-reading-relatedposts-preview .jp-relatedposts { background:#fff; padding:.5em; width:75%; }
- $extra_css
-</style>
-<script type="text/javascript">
- jQuery( document ).ready( function($) {
- var update_ui = function() {
- var is_enabled = true;
- if ( 'radio' == $( 'input[name="jetpack_relatedposts[enabled]"]' ).attr('type') ) {
- if ( '0' == $( 'input[name="jetpack_relatedposts[enabled]"]:checked' ).val() ) {
- is_enabled = false;
- }
- }
- if ( is_enabled ) {
- $( '#settings-reading-relatedposts-customize' )
- .removeClass( 'disabled' )
- .find( 'input' )
- .attr( 'disabled', false );
- $( '#settings-reading-relatedposts-preview' )
- .removeClass( 'disabled' );
- } else {
- $( '#settings-reading-relatedposts-customize' )
- .addClass( 'disabled' )
- .find( 'input' )
- .attr( 'disabled', true );
- $( '#settings-reading-relatedposts-preview' )
- .addClass( 'disabled' );
- }
- };
-
- var update_preview = function() {
- var html = '';
- if ( $( 'input[name="jetpack_relatedposts[show_headline]"]:checked' ).length ) {
- html += '$related_headline';
- }
- if ( $( 'input[name="jetpack_relatedposts[show_thumbnails]"]:checked' ).length ) {
- html += '$related_with_images';
- } else {
- html += '$related_without_images';
- }
- $( '#settings-reading-relatedposts-preview .jp-relatedposts' ).html( html );
- if ( $( 'input[name="jetpack_relatedposts[show_date]"]:checked' ).length ) {
- $( '.jp-relatedposts-post-title' ).each( function() {
- $( this ).after( $( '<span>August 8, 2005</span>' ) );
- } );
- }
- if ( $( 'input[name="jetpack_relatedposts[show_context]"]:checked' ).length ) {
- $( '.jp-relatedposts-post-context' ).show();
- } else {
- $( '.jp-relatedposts-post-context' ).hide();
- }
- $( '#settings-reading-relatedposts-preview .jp-relatedposts' ).show();
- };
-
- // Update on load
- update_preview();
- update_ui();
-
- // Update on change
- $( '#settings-reading-relatedposts-customize input' )
- .change( update_preview );
- $( '#settings-reading-relatedposts' )
- .find( 'input.tog' )
- .change( update_ui );
- });
-</script>
-EOT;
- }
-
- /**
- * Gets an array of related posts that match the given post_id.
- *
- * @param int $post_id Post which we want to find related posts for.
- * @param array $args - params to use when building Elasticsearch filters to narrow down the search domain.
- * @uses self::get_options, get_post_type, wp_parse_args, apply_filters
- * @return array
- */
- public function get_for_post_id( $post_id, array $args ) {
- $options = $this->get_options();
-
- if ( ! empty( $args['size'] ) ) {
- $options['size'] = $args['size'];
- }
-
- if (
- ! $options['enabled']
- || 0 === (int) $post_id
- || empty( $options['size'] )
- ) {
- return array();
- }
-
- $defaults = array(
- 'size' => (int) $options['size'],
- 'post_type' => get_post_type( $post_id ),
- 'post_formats' => array(),
- 'has_terms' => array(),
- 'date_range' => array(),
- 'exclude_post_ids' => array(),
- );
- $args = wp_parse_args( $args, $defaults );
- /**
- * Filter the arguments used to retrieve a list of Related Posts.
- *
- * @module related-posts
- *
- * @since 2.8.0
- *
- * @param array $args Array of options to retrieve Related Posts.
- * @param string $post_id Post ID of the post for which we are retrieving Related Posts.
- */
- $args = apply_filters( 'jetpack_relatedposts_filter_args', $args, $post_id );
-
- $filters = $this->_get_es_filters_from_args( $post_id, $args );
- /**
- * Filter Elasticsearch options used to calculate Related Posts.
- *
- * @module related-posts
- *
- * @since 2.8.0
- *
- * @param array $filters Array of Elasticsearch filters based on the post_id and args.
- * @param string $post_id Post ID of the post for which we are retrieving Related Posts.
- */
- $filters = apply_filters( 'jetpack_relatedposts_filter_filters', $filters, $post_id );
-
- $results = $this->_get_related_posts( $post_id, $args['size'], $filters );
- /**
- * Filter the array of related posts matched by Elasticsearch.
- *
- * @module related-posts
- *
- * @since 2.8.0
- *
- * @param array $results Array of related posts matched by Elasticsearch.
- * @param string $post_id Post ID of the post for which we are retrieving Related Posts.
- */
- return apply_filters( 'jetpack_relatedposts_returned_results', $results, $post_id );
- }
-
- /**
- * =========================
- * PRIVATE UTILITY FUNCTIONS
- * =========================
- */
-
- /**
- * Creates an array of Elasticsearch filters based on the post_id and args.
- *
- * @param int $post_id
- * @param array $args
- * @uses apply_filters, get_post_types, get_post_format_strings
- * @return array
- */
- protected function _get_es_filters_from_args( $post_id, array $args ) {
- $filters = array();
-
- /**
- * Filter the terms used to search for Related Posts.
- *
- * @module related-posts
- *
- * @since 2.8.0
- *
- * @param array $args['has_terms'] Array of terms associated to the Related Posts.
- * @param string $post_id Post ID of the post for which we are retrieving Related Posts.
- */
- $args['has_terms'] = apply_filters( 'jetpack_relatedposts_filter_has_terms', $args['has_terms'], $post_id );
- if ( ! empty( $args['has_terms'] ) ) {
- foreach( (array)$args['has_terms'] as $term ) {
- if ( mb_strlen( $term->taxonomy ) ) {
- switch ( $term->taxonomy ) {
- case 'post_tag':
- $tax_fld = 'tag.slug';
- break;
- case 'category':
- $tax_fld = 'category.slug';
- break;
- default:
- $tax_fld = 'taxonomy.' . $term->taxonomy . '.slug';
- break;
- }
- $filters[] = array( 'term' => array( $tax_fld => $term->slug ) );
- }
- }
- }
-
- /**
- * Filter the Post Types where we search Related Posts.
- *
- * @module related-posts
- *
- * @since 2.8.0
- *
- * @param array $args['post_type'] Array of Post Types.
- * @param string $post_id Post ID of the post for which we are retrieving Related Posts.
- */
- $args['post_type'] = apply_filters( 'jetpack_relatedposts_filter_post_type', $args['post_type'], $post_id );
- $valid_post_types = get_post_types();
- if ( is_array( $args['post_type'] ) ) {
- $sanitized_post_types = array();
- foreach ( $args['post_type'] as $pt ) {
- if ( in_array( $pt, $valid_post_types ) )
- $sanitized_post_types[] = $pt;
- }
- if ( ! empty( $sanitized_post_types ) )
- $filters[] = array( 'terms' => array( 'post_type' => $sanitized_post_types ) );
- } else if ( in_array( $args['post_type'], $valid_post_types ) && 'all' != $args['post_type'] ) {
- $filters[] = array( 'term' => array( 'post_type' => $args['post_type'] ) );
- }
-
- /**
- * Filter the Post Formats where we search Related Posts.
- *
- * @module related-posts
- *
- * @since 3.3.0
- *
- * @param array $args['post_formats'] Array of Post Formats.
- * @param string $post_id Post ID of the post for which we are retrieving Related Posts.
- */
- $args['post_formats'] = apply_filters( 'jetpack_relatedposts_filter_post_formats', $args['post_formats'], $post_id );
- $valid_post_formats = get_post_format_strings();
- $sanitized_post_formats = array();
- foreach ( $args['post_formats'] as $pf ) {
- if ( array_key_exists( $pf, $valid_post_formats ) ) {
- $sanitized_post_formats[] = $pf;
- }
- }
- if ( ! empty( $sanitized_post_formats ) ) {
- $filters[] = array( 'terms' => array( 'post_format' => $sanitized_post_formats ) );
- }
-
- /**
- * Filter the date range used to search Related Posts.
- *
- * @module related-posts
- *
- * @since 2.8.0
- *
- * @param array $args['date_range'] Array of a month interval where we search Related Posts.
- * @param string $post_id Post ID of the post for which we are retrieving Related Posts.
- */
- $args['date_range'] = apply_filters( 'jetpack_relatedposts_filter_date_range', $args['date_range'], $post_id );
- if ( is_array( $args['date_range'] ) && ! empty( $args['date_range'] ) ) {
- $args['date_range'] = array_map( 'intval', $args['date_range'] );
- if ( !empty( $args['date_range']['from'] ) && !empty( $args['date_range']['to'] ) ) {
- $filters[] = array(
- 'range' => array(
- 'date_gmt' => $this->_get_coalesced_range( $args['date_range'] ),
- )
- );
- }
- }
-
- /**
- * Filter the Post IDs excluded from appearing in Related Posts.
- *
- * @module related-posts
- *
- * @since 2.9.0
- *
- * @param array $args['exclude_post_ids'] Array of Post IDs.
- * @param string $post_id Post ID of the post for which we are retrieving Related Posts.
- */
- $args['exclude_post_ids'] = apply_filters( 'jetpack_relatedposts_filter_exclude_post_ids', $args['exclude_post_ids'], $post_id );
- if ( !empty( $args['exclude_post_ids'] ) && is_array( $args['exclude_post_ids'] ) ) {
- $excluded_post_ids = array();
- foreach ( $args['exclude_post_ids'] as $exclude_post_id) {
- $exclude_post_id = (int)$exclude_post_id;
- if ( $exclude_post_id > 0 )
- $excluded_post_ids[] = $exclude_post_id;
- }
- $filters[] = array( 'not' => array( 'terms' => array( 'post_id' => $excluded_post_ids ) ) );
- }
-
- return $filters;
- }
-
- /**
- * Takes a range and coalesces it into a month interval bracketed by a time as determined by the blog_id to enhance caching.
- *
- * @param array $date_range
- * @return array
- */
- protected function _get_coalesced_range( array $date_range ) {
- $now = time();
- $coalesce_time = $this->get_blog_id() % 86400;
- $current_time = $now - strtotime( 'today', $now );
-
- if ( $current_time < $coalesce_time && '01' == date( 'd', $now ) ) {
- // Move back 1 period
- return array(
- 'from' => date( 'Y-m-01', strtotime( '-1 month', $date_range['from'] ) ) . ' ' . date( 'H:i:s', $coalesce_time ),
- 'to' => date( 'Y-m-01', $date_range['to'] ) . ' ' . date( 'H:i:s', $coalesce_time ),
- );
- } else {
- // Use current period
- return array(
- 'from' => date( 'Y-m-01', $date_range['from'] ) . ' ' . date( 'H:i:s', $coalesce_time ),
- 'to' => date( 'Y-m-01', strtotime( '+1 month', $date_range['to'] ) ) . ' ' . date( 'H:i:s', $coalesce_time ),
- );
- }
- }
-
- /**
- * Generate and output ajax response for related posts API call.
- * NOTE: Calls exit() to end all further processing after payload has been outputed.
- *
- * @param array $excludes array of post_ids to exclude
- * @uses send_nosniff_header, self::get_for_post_id, get_the_ID
- * @return null
- */
- protected function _action_frontend_init_ajax( array $excludes ) {
- define( 'DOING_AJAX', true );
-
- header( 'Content-type: application/json; charset=utf-8' ); // JSON can only be UTF-8
- send_nosniff_header();
-
- $options = $this->get_options();
-
- if ( isset( $_GET['jetpackrpcustomize'] ) ) {
-
- // If we're in the customizer, add dummy content.
- $date_now = current_time( get_option( 'date_format' ) );
- $related_posts = array(
- array(
- 'id' => - 1,
- 'url' => 'https://jetpackme.files.wordpress.com/2019/03/cat-blog.png',
- 'url_meta' => array(
- 'origin' => 0,
- 'position' => 0
- ),
- 'title' => esc_html__( 'Big iPhone/iPad Update Now Available', 'jetpack' ),
- 'date' => $date_now,
- 'format' => false,
- 'excerpt' => esc_html__( 'It is that time of the year when devices are shiny again.', 'jetpack' ),
- 'rel' => 'nofollow',
- 'context' => esc_html__( 'In "Mobile"', 'jetpack' ),
- 'img' => array(
- 'src' => 'https://jetpackme.files.wordpress.com/2019/03/cat-blog.png',
- 'width' => 350,
- 'height' => 200
- ),
- 'classes' => array()
- ),
- array(
- 'id' => - 1,
- 'url' => 'https://jetpackme.files.wordpress.com/2019/03/devices.jpg',
- 'url_meta' => array(
- 'origin' => 0,
- 'position' => 0
- ),
- 'title' => esc_html__( 'The WordPress for Android App Gets a Big Facelift', 'jetpack' ),
- 'date' => $date_now,
- 'format' => false,
- 'excerpt' => esc_html__( 'Writing is new again in Android with the new WordPress app.', 'jetpack' ),
- 'rel' => 'nofollow',
- 'context' => esc_html__( 'In "Mobile"', 'jetpack' ),
- 'img' => array(
- 'src' => 'https://jetpackme.files.wordpress.com/2019/03/devices.jpg',
- 'width' => 350,
- 'height' => 200
- ),
- 'classes' => array()
- ),
- array(
- 'id' => - 1,
- 'url' => 'https://jetpackme.files.wordpress.com/2019/03/mobile-wedding.jpg',
- 'url_meta' => array(
- 'origin' => 0,
- 'position' => 0
- ),
- 'title' => esc_html__( 'Upgrade Focus, VideoPress for weddings', 'jetpack' ),
- 'date' => $date_now,
- 'format' => false,
- 'excerpt' => esc_html__( 'Weddings are in the spotlight now with VideoPress for weddings.', 'jetpack' ),
- 'rel' => 'nofollow',
- 'context' => esc_html__( 'In "Mobile"', 'jetpack' ),
- 'img' => array(
- 'src' => 'https://jetpackme.files.wordpress.com/2019/03/mobile-wedding.jpg',
- 'width' => 350,
- 'height' => 200
- ),
- 'classes' => array()
- ),
- );
-
- for ( $total = 0; $total < $options['size'] - 3; $total++ ) {
- $related_posts[] = $related_posts[ $total ];
- }
-
- $current_post = get_post();
-
- // Exclude current post after filtering to make sure it's excluded and not lost during filtering.
- $excluded_posts = array_merge(
- /** This filter is already documented in modules/related-posts/jetpack-related-posts.php */
- apply_filters( 'jetpack_relatedposts_filter_exclude_post_ids', array() ),
- array( $current_post->ID )
- );
-
- // Fetch posts with featured image.
- $with_post_thumbnails = get_posts( array(
- 'posts_per_page' => $options['size'],
- 'post__not_in' => $excluded_posts,
- 'post_type' => $current_post->post_type,
- 'meta_key' => '_thumbnail_id',
- 'suppress_filters' => false,
- ) );
-
- // If we don't have enough, fetch posts without featured image.
- if ( 0 < ( $more = $options['size'] - count( $with_post_thumbnails ) ) ) {
- $no_post_thumbnails = get_posts( array(
- 'posts_per_page' => $more,
- 'post__not_in' => $excluded_posts,
- 'post_type' => $current_post->post_type,
- 'meta_query' => array(
- array(
- 'key' => '_thumbnail_id',
- 'compare' => 'NOT EXISTS',
- ),
- ),
- 'suppress_filters' => false,
- ) );
- } else {
- $no_post_thumbnails = array();
- }
-
- foreach ( array_merge( $with_post_thumbnails, $no_post_thumbnails ) as $index => $real_post ) {
- $related_posts[ $index ]['id'] = $real_post->ID;
- $related_posts[ $index ]['url'] = esc_url( get_permalink( $real_post ) );
- $related_posts[ $index ]['title'] = $this->_to_utf8( $this->_get_title( $real_post->post_title, $real_post->post_content ) );
- $related_posts[ $index ]['date'] = get_the_date( '', $real_post );
- $related_posts[ $index ]['excerpt'] = html_entity_decode( $this->_to_utf8( $this->_get_excerpt( $real_post->post_excerpt, $real_post->post_content ) ), ENT_QUOTES, 'UTF-8' );
- $related_posts[ $index ]['img'] = $this->_generate_related_post_image_params( $real_post->ID );
- $related_posts[ $index ]['context'] = $this->_generate_related_post_context( $real_post->ID );
- }
- } else {
- $related_posts = $this->get_for_post_id(
- get_the_ID(),
- array(
- 'exclude_post_ids' => $excludes,
- )
- );
- }
-
- $response = array(
- 'version' => self::VERSION,
- 'show_thumbnails' => (bool) $options['show_thumbnails'],
- 'show_date' => (bool) $options['show_date'],
- 'show_context' => (bool) $options['show_context'],
- 'layout' => (string) $options['layout'],
- 'headline' => (string) $options['headline'],
- 'items' => array(),
- );
-
- if ( count( $related_posts ) == $options['size'] )
- $response['items'] = $related_posts;
-
- echo json_encode( $response );
-
- exit();
- }
-
- /**
- * Returns a UTF-8 encoded array of post information for the given post_id
- *
- * @param int $post_id
- * @param int $position
- * @param int $origin The post id that this is related to
- * @uses get_post, get_permalink, remove_query_arg, get_post_format, apply_filters
- * @return array
- */
- public function get_related_post_data_for_post( $post_id, $position, $origin ) {
- $post = get_post( $post_id );
-
- return array(
- 'id' => $post->ID,
- 'url' => get_permalink( $post->ID ),
- 'url_meta' => array( 'origin' => $origin, 'position' => $position ),
- 'title' => $this->_to_utf8( $this->_get_title( $post->post_title, $post->post_content ) ),
- 'date' => get_the_date( '', $post->ID ),
- 'format' => get_post_format( $post->ID ),
- 'excerpt' => html_entity_decode( $this->_to_utf8( $this->_get_excerpt( $post->post_excerpt, $post->post_content ) ), ENT_QUOTES, 'UTF-8' ),
- /**
- * Filters the rel attribute for the Related Posts' links.
- *
- * @module related-posts
- *
- * @since 3.7.0
- *
- * @param string nofollow Link rel attribute for Related Posts' link. Default is nofollow.
- * @param int $post->ID Post ID.
- */
- 'rel' => apply_filters( 'jetpack_relatedposts_filter_post_link_rel', 'nofollow', $post->ID ),
- /**
- * Filter the context displayed below each Related Post.
- *
- * @module related-posts
- *
- * @since 3.0.0
- *
- * @param string $this->_to_utf8( $this->_generate_related_post_context( $post->ID ) ) Context displayed below each related post.
- * @param string $post_id Post ID of the post for which we are retrieving Related Posts.
- */
- 'context' => apply_filters(
- 'jetpack_relatedposts_filter_post_context',
- $this->_to_utf8( $this->_generate_related_post_context( $post->ID ) ),
- $post->ID
- ),
- 'img' => $this->_generate_related_post_image_params( $post->ID ),
- /**
- * Filter the post css classes added on HTML markup.
- *
- * @module related-posts
- *
- * @since 3.8.0
- *
- * @param array array() CSS classes added on post HTML markup.
- * @param string $post_id Post ID.
- */
- 'classes' => apply_filters(
- 'jetpack_relatedposts_filter_post_css_classes',
- array(),
- $post->ID
- ),
- );
- }
-
- /**
- * Returns either the title or a small excerpt to use as title for post.
- *
- * @param string $post_title
- * @param string $post_content
- * @uses strip_shortcodes, wp_trim_words, __
- * @return string
- */
- protected function _get_title( $post_title, $post_content ) {
- if ( ! empty( $post_title ) ) {
- return wp_strip_all_tags( $post_title );
- }
-
- $post_title = wp_trim_words( wp_strip_all_tags( strip_shortcodes( $post_content ) ), 5, '…' );
- if ( ! empty( $post_title ) ) {
- return $post_title;
- }
-
- return __( 'Untitled Post', 'jetpack' );
- }
-
- /**
- * Returns a plain text post excerpt for title attribute of links.
- *
- * @param string $post_excerpt
- * @param string $post_content
- * @uses strip_shortcodes, wp_strip_all_tags, wp_trim_words
- * @return string
- */
- protected function _get_excerpt( $post_excerpt, $post_content ) {
- if ( empty( $post_excerpt ) )
- $excerpt = $post_content;
- else
- $excerpt = $post_excerpt;
-
- return wp_trim_words( wp_strip_all_tags( strip_shortcodes( $excerpt ) ), 50, '…' );
- }
-
- /**
- * Generates the thumbnail image to be used for the post. Uses the
- * image as returned by Jetpack_PostImages::get_image()
- *
- * @param int $post_id
- * @uses self::get_options, apply_filters, Jetpack_PostImages::get_image, Jetpack_PostImages::fit_image_url
- * @return string
- */
- protected function _generate_related_post_image_params( $post_id ) {
- $options = $this->get_options();
- $image_params = array(
- 'alt_text' => '',
- 'src' => '',
- 'width' => 0,
- 'height' => 0,
- );
-
- /**
- * Filter the size of the Related Posts images.
- *
- * @module related-posts
- *
- * @since 2.8.0
- *
- * @param array array( 'width' => 350, 'height' => 200 ) Size of the images displayed below each Related Post.
- */
- $thumbnail_size = apply_filters(
- 'jetpack_relatedposts_filter_thumbnail_size',
- array( 'width' => 350, 'height' => 200 )
- );
- if ( !is_array( $thumbnail_size ) ) {
- $thumbnail_size = array(
- 'width' => (int)$thumbnail_size,
- 'height' => (int)$thumbnail_size
- );
- }
-
- // Try to get post image
- if ( class_exists( 'Jetpack_PostImages' ) ) {
- $img_url = '';
- $post_image = Jetpack_PostImages::get_image(
- $post_id,
- $thumbnail_size
- );
-
- if ( is_array($post_image) ) {
- $img_url = $post_image['src'];
- } elseif ( class_exists( 'Jetpack_Media_Summary' ) ) {
- $media = Jetpack_Media_Summary::get( $post_id );
-
- if ( is_array($media) && !empty( $media['image'] ) ) {
- $img_url = $media['image'];
- }
- }
-
- if ( ! empty( $img_url ) ) {
- if ( ! empty( $post_image['alt_text'] ) ) {
- $image_params['alt_text'] = $post_image['alt_text'];
- } else {
- $image_params['alt_text'] = '';
- }
- $image_params['width'] = $thumbnail_size['width'];
- $image_params['height'] = $thumbnail_size['height'];
- $image_params['src'] = Jetpack_PostImages::fit_image_url(
- $img_url,
- $thumbnail_size['width'],
- $thumbnail_size['height']
- );
- }
- }
-
- return $image_params;
- }
-
- /**
- * Returns the string UTF-8 encoded
- *
- * @param string $text
- * @return string
- */
- protected function _to_utf8( $text ) {
- if ( $this->_convert_charset ) {
- return iconv( $this->_blog_charset, 'UTF-8', $text );
- } else {
- return $text;
- }
- }
-
- /**
- * =============================================
- * PROTECTED UTILITY FUNCTIONS EXTENDED BY WPCOM
- * =============================================
- */
-
- /**
- * Workhorse method to return array of related posts matched by Elasticsearch.
- *
- * @param int $post_id
- * @param int $size
- * @param array $filters
- * @uses wp_remote_post, is_wp_error, get_option, wp_remote_retrieve_body, get_post, add_query_arg, remove_query_arg, get_permalink, get_post_format, apply_filters
- * @return array
- */
- protected function _get_related_posts( $post_id, $size, array $filters ) {
- $hits = $this->_filter_non_public_posts(
- $this->_get_related_post_ids(
- $post_id,
- $size,
- $filters
- )
- );
-
- /**
- * Filter the Related Posts matched by Elasticsearch.
- *
- * @module related-posts
- *
- * @since 2.9.0
- *
- * @param array $hits Array of Post IDs matched by Elasticsearch.
- * @param string $post_id Post ID of the post for which we are retrieving Related Posts.
- */
- $hits = apply_filters( 'jetpack_relatedposts_filter_hits', $hits, $post_id );
-
- $related_posts = array();
- foreach ( $hits as $i => $hit ) {
- $related_posts[] = $this->get_related_post_data_for_post( $hit['id'], $i, $post_id );
- }
- return $related_posts;
- }
-
- /**
- * Get array of related posts matched by Elasticsearch.
- *
- * @param int $post_id
- * @param int $size
- * @param array $filters
- * @uses wp_remote_post, is_wp_error, wp_remote_retrieve_body, get_post_meta, update_post_meta
- * @return array
- */
- protected function _get_related_post_ids( $post_id, $size, array $filters ) {
- $now_ts = time();
- $cache_meta_key = '_jetpack_related_posts_cache';
-
- $body = array(
- 'size' => (int) $size,
- );
-
- if ( !empty( $filters ) )
- $body['filter'] = array( 'and' => $filters );
-
- // Build cache key
- $cache_key = md5( serialize( $body ) );
-
- // Load all cached values
- if ( wp_using_ext_object_cache() ) {
- $transient_name = "{$cache_meta_key}_{$cache_key}_{$post_id}";
- $cache = get_transient( $transient_name );
- if ( false !== $cache ) {
- return $cache;
- }
- } else {
- $cache = get_post_meta( $post_id, $cache_meta_key, true );
-
- if ( empty( $cache ) )
- $cache = array();
-
-
- // Cache is valid! Return cached value.
- if ( isset( $cache[ $cache_key ] ) && is_array( $cache[ $cache_key ] ) && $cache[ $cache_key ][ 'expires' ] > $now_ts ) {
- return $cache[ $cache_key ][ 'payload' ];
- }
- }
-
- $response = wp_remote_post(
- "https://public-api.wordpress.com/rest/v1/sites/{$this->get_blog_id()}/posts/$post_id/related/",
- array(
- 'timeout' => 10,
- 'user-agent' => 'jetpack_related_posts',
- 'sslverify' => true,
- 'body' => $body,
- )
- );
-
- // Oh no... return nothing don't cache errors.
- if ( is_wp_error( $response ) ) {
- if ( isset( $cache[ $cache_key ] ) && is_array( $cache[ $cache_key ] ) )
- return $cache[ $cache_key ][ 'payload' ]; // return stale
- else
- return array();
- }
-
- $results = json_decode( wp_remote_retrieve_body( $response ), true );
- $related_posts = array();
- if ( is_array( $results ) && !empty( $results['hits'] ) ) {
- foreach( $results['hits'] as $hit ) {
- $related_posts[] = array(
- 'id' => $hit['fields']['post_id'],
- );
- }
- }
-
- // An empty array might indicate no related posts or that posts
- // are not yet synced to WordPress.com, so we cache for only 1
- // minute in this case
- if ( empty( $related_posts ) ) {
- $cache_ttl = 60;
- } else {
- $cache_ttl = 12 * HOUR_IN_SECONDS;
- }
-
- // Update cache
- if ( wp_using_ext_object_cache() ) {
- set_transient( $transient_name, $related_posts, $cache_ttl );
- } else {
- // Copy all valid cache values
- $new_cache = array();
- foreach ( $cache as $k => $v ) {
- if ( is_array( $v ) && $v[ 'expires' ] > $now_ts ) {
- $new_cache[ $k ] = $v;
- }
- }
-
- // Set new cache value
- $cache_expires = $cache_ttl + $now_ts;
- $new_cache[ $cache_key ] = array(
- 'expires' => $cache_expires,
- 'payload' => $related_posts,
- );
- update_post_meta( $post_id, $cache_meta_key, $new_cache );
- }
-
- return $related_posts;
- }
-
- /**
- * Filter out any hits that are not public anymore.
- *
- * @param array $related_posts
- * @uses get_post_stati, get_post_status
- * @return array
- */
- protected function _filter_non_public_posts( array $related_posts ) {
- $public_stati = get_post_stati( array( 'public' => true ) );
-
- $filtered = array();
- foreach ( $related_posts as $hit ) {
- if ( in_array( get_post_status( $hit['id'] ), $public_stati ) ) {
- $filtered[] = $hit;
- }
- }
- return $filtered;
- }
-
- /**
- * Generates a context for the related content (second line in related post output).
- * Order of importance:
- * - First category (Not 'Uncategorized')
- * - First post tag
- * - Number of comments
- *
- * @param int $post_id
- * @uses get_the_category, get_the_terms, get_comments_number, number_format_i18n, __, _n
- * @return string
- */
- protected function _generate_related_post_context( $post_id ) {
- $categories = get_the_category( $post_id );
- if ( is_array( $categories ) ) {
- foreach ( $categories as $category ) {
- if ( 'uncategorized' != $category->slug && '' != trim( $category->name ) ) {
- $post_cat_context = sprintf(
- esc_html_x( 'In “%s”', 'in {category/tag name}', 'jetpack' ),
- $category->name
- );
- /**
- * Filter the "In Category" line displayed in the post context below each Related Post.
- *
- * @module related-posts
- *
- * @since 3.2.0
- *
- * @param string $post_cat_context "In Category" line displayed in the post context below each Related Post.
- * @param array $category Array containing information about the category.
- */
- return apply_filters( 'jetpack_relatedposts_post_category_context', $post_cat_context, $category );
- }
- }
- }
-
- $tags = get_the_terms( $post_id, 'post_tag' );
- if ( is_array( $tags ) ) {
- foreach ( $tags as $tag ) {
- if ( '' != trim( $tag->name ) ) {
- $post_tag_context = sprintf(
- _x( 'In "%s"', 'in {category/tag name}', 'jetpack' ),
- $tag->name
- );
- /**
- * Filter the "In Tag" line displayed in the post context below each Related Post.
- *
- * @module related-posts
- *
- * @since 3.2.0
- *
- * @param string $post_tag_context "In Tag" line displayed in the post context below each Related Post.
- * @param array $tag Array containing information about the tag.
- */
- return apply_filters( 'jetpack_relatedposts_post_tag_context', $post_tag_context, $tag );
- }
- }
- }
-
- $comment_count = get_comments_number( $post_id );
- if ( $comment_count > 0 ) {
- return sprintf(
- _n( 'With 1 comment', 'With %s comments', $comment_count, 'jetpack' ),
- number_format_i18n( $comment_count )
- );
- }
-
- return __( 'Similar post', 'jetpack' );
- }
-
- /**
- * Logs clicks for clickthrough analysis and related result tuning.
- *
- * @return null
- */
- protected function _log_click( $post_id, $to_post_id, $link_position ) {
-
- }
-
- /**
- * Determines if the current post is able to use related posts.
- *
- * @uses self::get_options, is_admin, is_single, apply_filters
- * @return bool
- */
- protected function _enabled_for_request() {
- $enabled = is_single()
- &&
- ! is_admin()
- &&
- ( !$this->_allow_feature_toggle() || $this->get_option( 'enabled' ) )
- &&
- ! Jetpack_AMP_Support::is_amp_request();
-
- /**
- * Filter the Enabled value to allow related posts to be shown on pages as well.
- *
- * @module related-posts
- *
- * @since 3.3.0
- *
- * @param bool $enabled Should Related Posts be enabled on the current page.
- */
- return apply_filters( 'jetpack_relatedposts_filter_enabled_for_request', $enabled );
- }
-
- /**
- * Adds filters and enqueues assets.
- *
- * @uses self::_enqueue_assets, self::_setup_shortcode, add_filter
- * @return null
- */
- protected function _action_frontend_init_page() {
- $this->_enqueue_assets( true, true );
- $this->_setup_shortcode();
-
- add_filter( 'the_content', array( $this, 'filter_add_target_to_dom' ), 40 );
- }
-
- /**
- * Enqueues assets needed to do async loading of related posts.
- *
- * @uses wp_enqueue_script, wp_enqueue_style, plugins_url
- * @return null
- */
- protected function _enqueue_assets( $script, $style ) {
- $dependencies = is_customize_preview() ? array( 'customize-base' ) : array( 'jquery' );
- if ( $script ) {
- wp_enqueue_script(
- 'jetpack_related-posts',
- Jetpack::get_file_url_for_environment(
- '_inc/build/related-posts/related-posts.min.js',
- 'modules/related-posts/related-posts.js'
- ),
- $dependencies,
- self::VERSION
- );
- $related_posts_js_options = array(
- /**
- * Filter each Related Post Heading structure.
- *
- * @since 4.0.0
- *
- * @param string $str Related Post Heading structure. Default to h4.
- */
- 'post_heading' => apply_filters( 'jetpack_relatedposts_filter_post_heading', esc_attr( 'h4' ) ),
- );
- wp_localize_script( 'jetpack_related-posts', 'related_posts_js_options', $related_posts_js_options );
- }
- if ( $style ){
- wp_enqueue_style( 'jetpack_related-posts', plugins_url( 'related-posts.css', __FILE__ ), array(), self::VERSION );
- wp_style_add_data( 'jetpack_related-posts', 'rtl', 'replace' );
- }
- }
-
- /**
- * Sets up the shortcode processing.
- *
- * @uses add_filter, add_shortcode
- * @return null
- */
- protected function _setup_shortcode() {
- add_filter( 'the_content', array( $this, 'test_for_shortcode' ), 0 );
-
- add_shortcode( self::SHORTCODE, array( $this, 'get_target_html' ) );
- }
-
- protected function _allow_feature_toggle() {
- if ( null === $this->_allow_feature_toggle ) {
- /**
- * Filter the display of the Related Posts toggle in Settings > Reading.
- *
- * @module related-posts
- *
- * @since 2.8.0
- *
- * @param bool false Display a feature toggle. Default to false.
- */
- $this->_allow_feature_toggle = apply_filters( 'jetpack_relatedposts_filter_allow_feature_toggle', false );
- }
- return $this->_allow_feature_toggle;
- }
-
- /**
- * ===================================================
- * FUNCTIONS EXPOSING RELATED POSTS IN THE WP REST API
- * ===================================================
- */
-
- /**
- * Add Related Posts to the REST API Post response.
- *
- * @since 4.4.0
- *
- * @action rest_api_init
- * @uses register_rest_field, self::rest_get_related_posts
- * @return null
- */
- public function rest_register_related_posts() {
- register_rest_field( 'post',
- 'jetpack-related-posts',
- array(
- 'get_callback' => array( $this, 'rest_get_related_posts' ),
- 'update_callback' => null,
- 'schema' => null,
- )
- );
- }
-
- /**
- * Build an array of Related Posts.
- * By default returns cached results that are stored for up to 12 hours.
- *
- * @since 4.4.0
- *
- * @param array $object Details of current post.
- * @param string $field_name Name of field.
- * @param WP_REST_Request $request Current request
- *
- * @uses self::get_for_post_id
- *
- * @return array
- */
- public function rest_get_related_posts( $object, $field_name, $request ) {
- return $this->get_for_post_id( $object['id'], array( 'size' => 6 ) );
- }
-}
-
-class Jetpack_RelatedPosts_Raw extends Jetpack_RelatedPosts {
- protected $_query_name;
-
- /**
- * Allows callers of this class to tag each query with a unique name for tracking purposes.
- *
- * @param string $name
- * @return Jetpack_RelatedPosts_Raw
- */
- public function set_query_name( $name ) {
- $this->_query_name = (string) $name;
- return $this;
- }
-
- /**
- * The raw related posts class can be used by other plugins or themes
- * to get related content. This class wraps the existing RelatedPosts
- * logic thus we never want to add anything to the DOM or do anything
- * for event hooks. We will also not present any settings for this
- * class and keep it enabled as calls to this class is done
- * programmatically.
- */
- public function action_admin_init() {}
- public function action_frontend_init() {}
- public function get_options() {
- return array(
- 'enabled' => true,
- );
- }
-
- /**
- * Workhorse method to return array of related posts ids matched by Elasticsearch.
- *
- * @param int $post_id
- * @param int $size
- * @param array $filters
- * @uses wp_remote_post, is_wp_error, wp_remote_retrieve_body
- * @return array
- */
- protected function _get_related_posts( $post_id, $size, array $filters ) {
- $hits = $this->_filter_non_public_posts(
- $this->_get_related_post_ids(
- $post_id,
- $size,
- $filters
- )
- );
-
- /** This filter is already documented in modules/related-posts/related-posts.php */
- $hits = apply_filters( 'jetpack_relatedposts_filter_hits', $hits, $post_id );
-
- return $hits;
- }
-}
diff --git a/plugins/jetpack/modules/related-posts/related-posts-customizer.js b/plugins/jetpack/modules/related-posts/related-posts-customizer.js
deleted file mode 100644
index 8364f7c4..00000000
--- a/plugins/jetpack/modules/related-posts/related-posts-customizer.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Adds functionality for Related Posts controls in Customizer.
- */
-(function( api ) {
- 'use strict';
-
- api( 'jetpack_relatedposts[show_headline]', function( showHeadlineSetting ) {
-
- var setupHeadlineControl = function( headlineControl ) {
- var setActiveState, isDisplayed;
-
- isDisplayed = function() {
- return showHeadlineSetting.findControls()[0].active.get() && showHeadlineSetting.get();
- };
-
- setActiveState = function() {
- headlineControl.active.set( isDisplayed() );
- };
-
- headlineControl.active.validate = isDisplayed;
-
- setActiveState();
-
- showHeadlineSetting.bind( setActiveState );
- };
-
- api.control( 'jetpack_relatedposts[headline]', setupHeadlineControl );
- } );
-
-})( wp.customize );
diff --git a/plugins/jetpack/modules/related-posts/related-posts-rtl.css b/plugins/jetpack/modules/related-posts/related-posts-rtl.css
deleted file mode 100644
index 1ad313f5..00000000
--- a/plugins/jetpack/modules/related-posts/related-posts-rtl.css
+++ /dev/null
@@ -1 +0,0 @@
-.jp-related-posts-i2__row{display:flex;margin-top:1.5rem}.jp-related-posts-i2__row:first-child{margin-top:0}.jp-related-posts-i2__post{flex-grow:1;flex-basis:0;margin:0 10px;display:flex;flex-direction:column;padding-right:0}.jp-related-posts-i2__row[data-post-count="3"] .jp-related-posts-i2__post{max-width:calc(33% - 20px)}.jp-related-posts-i2__row[data-post-count="1"] .jp-related-posts-i2__post,.jp-related-posts-i2__row[data-post-count="2"] .jp-related-posts-i2__post{max-width:calc(50% - 20px)}.jp-related-posts-i2__post-context,.jp-related-posts-i2__post-date,.jp-related-posts-i2__post-heading,.jp-related-posts-i2__post-img-link{flex-direction:row;display:block}.jp-related-posts-i2__post-heading{margin:.5rem 0;font-size:1rem;line-height:1.2em}.jp-related-posts-i2__post-link{display:block;width:100%;line-height:1.2em}.jp-related-posts-i2__post-img-link{order:-1;line-height:1em}.jp-relatedposts-i2[data-layout=list] .jp-related-posts-i2__post{max-width:none;margin:0}.jp-relatedposts-i2[data-layout=list].jp-related-posts-i2__post-img-link{margin-top:1rem}@media only screen and (max-width:640px){.jp-related-posts-i2__row{margin-top:0;display:block}.jp-related-posts-i2__row[data-post-count] .jp-related-posts-i2__post{max-width:none;margin:0;margin-top:1rem}.jp-related-posts-i2__post-img-link{margin-top:1rem}}.jp-relatedposts:after{content:'';display:block;clear:both}#jp-relatedposts h3.jp-relatedposts-headline{margin:0 0 1em 0;display:inline-block;float:right;font-size:9pt;font-weight:700;font-family:inherit}#jp-relatedposts h3.jp-relatedposts-headline em:before{content:"";display:block;width:100%;min-width:30px;border-top:1px solid #ddd;border-top:1px solid rgba(0,0,0,.2);margin-bottom:1em}#jp-relatedposts h3.jp-relatedposts-headline em{font-style:normal;font-weight:700}#jp-relatedposts .jp-relatedposts-items{clear:right}#jp-relatedposts .jp-relatedposts-items-visual{margin-left:-20px}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{float:right;width:33%;margin:0 0 1em;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post{padding-left:20px;-moz-opacity:.8;opacity:.8}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n+4),#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post:nth-child(3n+4){clear:both}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover .jp-relatedposts-post-title a{text-decoration:underline}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover{-moz-opacity:1;opacity:1}#jp-relatedposts .jp-relatedposts-items p,#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{font-size:14px;line-height:20px;margin:0}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs{position:relative}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs a.jp-relatedposts-post-aoverlay{position:absolute;top:0;bottom:0;right:0;left:0;display:block;border-bottom:0}#jp-relatedposts .jp-relatedposts-items p{margin-bottom:0}#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{text-transform:none;margin:0;font-family:inherit;display:block;max-width:100%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a{font-size:inherit;font-weight:400;text-decoration:none;-moz-opacity:1;opacity:1}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a:hover{text-decoration:underline}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post span{display:block;max-width:90%;overflow:hidden;text-overflow:ellipsis}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post span{max-width:100%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-context,#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{opacity:.6}.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{display:none}#jp-relatedposts .jp-relatedposts-items-visual div.jp-relatedposts-post-thumbs p.jp-relatedposts-post-excerpt{display:none}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs p.jp-relatedposts-post-excerpt{overflow:hidden}#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs span{margin-bottom:1em}#jp-relatedposts .jp-relatedposts-list .jp-relatedposts-post{clear:both;width:100%}#jp-relatedposts .jp-relatedposts-list .jp-relatedposts-post img.jp-relatedposts-post-img{float:right;overflow:hidden;max-width:33%;margin-left:3%}#jp-relatedposts .jp-relatedposts-list h4.jp-relatedposts-post-title{display:inline-block;max-width:63%}@media only screen and (max-width:640px){#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{width:50%}#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n){clear:right}#jp-relatedposts .jp-relatedposts-items-visual{margin-left:20px}}@media only screen and (max-width:320px){#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post{width:100%;clear:both;margin:0 0 1em}#jp-relatedposts .jp-relatedposts-list .jp-relatedposts-post img.jp-relatedposts-post-img,#jp-relatedposts .jp-relatedposts-list h4.jp-relatedposts-post-title{float:none;max-width:100%;margin-left:0}} \ No newline at end of file
diff --git a/plugins/jetpack/modules/related-posts/related-posts.css b/plugins/jetpack/modules/related-posts/related-posts.css
deleted file mode 100644
index b75da46d..00000000
--- a/plugins/jetpack/modules/related-posts/related-posts.css
+++ /dev/null
@@ -1,315 +0,0 @@
-/**
- * Jetpack related posts
- */
-
-/**
- * The Gutenberg block
- */
-
-.jp-related-posts-i2__row {
- display: flex;
- margin-top: 1.5rem;
-}
-
-.jp-related-posts-i2__row:first-child {
- margin-top: 0;
-}
-
-.jp-related-posts-i2__post {
- flex-grow: 1;
- flex-basis: 0;
- margin: 0 10px;
- display: flex;
- flex-direction: column;
- padding-left: 0;
-}
-
-.jp-related-posts-i2__row[data-post-count="3"] .jp-related-posts-i2__post {
- max-width: calc(33% - 20px);
-}
-
-.jp-related-posts-i2__row[data-post-count="2"] .jp-related-posts-i2__post,
-.jp-related-posts-i2__row[data-post-count="1"] .jp-related-posts-i2__post {
- max-width: calc(50% - 20px);
-}
-
-.jp-related-posts-i2__post-heading, .jp-related-posts-i2__post-img-link,
-.jp-related-posts-i2__post-date, .jp-related-posts-i2__post-context {
- flex-direction: row;
- display: block;
-}
-
-.jp-related-posts-i2__post-heading {
- margin: 0.5rem 0;
- font-size: 1rem;
- line-height: 1.2em;
-}
-
-.jp-related-posts-i2__post-link {
- display: block;
- width: 100%;
- line-height: 1.2em;
-}
-
-.jp-related-posts-i2__post-img-link {
- order: -1;
- line-height: 1em;
- img {
- width: 100%;
- }
-}
-
-/* List view */
-
-.jp-relatedposts-i2[data-layout="list"] .jp-related-posts-i2__row{
- margin-top: 0;
- display: block;
-}
-
-.jp-relatedposts-i2[data-layout="list"] .jp-related-posts-i2__post {
- max-width: none;
- margin: 0;
-}
-
-.jp-relatedposts-i2[data-layout="list"].jp-related-posts-i2__post-img-link {
- margin-top: 1rem;
-}
-
-/* Breakpoints */
-@media only screen and (max-width: 640px) {
- .jp-related-posts-i2__row {
- margin-top: 0;
- display: block;
- }
- .jp-related-posts-i2__row[data-post-count] .jp-related-posts-i2__post {
- max-width: none;
- margin: 0;
- margin-top: 1rem;
- }
- .jp-related-posts-i2__post-img-link {
- margin-top: 1rem;
- img {
- width: 350px;
- }
- }
-}
-
-/* Container */
-
-#jp-relatedposts {
- display: none;
- padding-top: 1em;
- margin: 1em 0;
- position: relative;
- clear: both;
-}
-
-.jp-relatedposts:after {
- content: '';
- display: block;
- clear: both;
-}
-
-/* Headline above related posts section, labeled "Related" */
-
-#jp-relatedposts h3.jp-relatedposts-headline {
- margin: 0 0 1em 0;
- display: inline-block;
- float: left;
- font-size: 9pt;
- font-weight: bold;
- font-family: inherit;
-}
-
-#jp-relatedposts h3.jp-relatedposts-headline em:before {
- content: "";
- display: block;
- width: 100%;
- min-width: 30px;
- border-top: 1px solid #ddd;
- border-top: 1px solid rgba(0,0,0,.2);
- margin-bottom: 1em;
-}
-
-#jp-relatedposts h3.jp-relatedposts-headline em {
- font-style: normal;
- font-weight: bold;
-}
-
-/* Related posts items (wrapping items) */
-
-#jp-relatedposts .jp-relatedposts-items {
- clear: left;
-}
-
-#jp-relatedposts .jp-relatedposts-items-visual {
- margin-right: -20px;
-}
-
-/* Related posts item */
-
-#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post {
- float: left;
- width: 33%;
- margin: 0 0 1em; /* Needs to be same as the main outer wrapper for Related Posts */
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
-}
-
-#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post {
- padding-right: 20px;
- filter: alpha(opacity=80);
- -moz-opacity: .8;
- opacity: .8;
-}
-
-#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n+4),
-#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post:nth-child(3n+4) {
- clear: both;
-}
-
-#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover .jp-relatedposts-post-title a {
- text-decoration: underline;
-}
-
-#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover {
- filter: alpha(opacity=100);
- -moz-opacity: 1;
- opacity: 1;
-}
-
-/* Related posts item content */
-
-#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
-#jp-relatedposts .jp-relatedposts-items p {
- font-size: 14px;
- line-height: 20px;
- margin: 0;
-}
-#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs {
- position:relative;
-}
-#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs a.jp-relatedposts-post-aoverlay {
- position:absolute;
- top:0;
- bottom:0;
- left:0;
- right:0;
- display:block;
- border-bottom: 0;
-}
-
-#jp-relatedposts .jp-relatedposts-items p {
- margin-bottom: 0;
-}
-
-#jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title {
- text-transform: none;
- margin: 0;
- font-family: inherit;
- display: block;
- max-width: 100%;
-}
-
-#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a {
- font-size: inherit;
- font-weight: normal;
- text-decoration: none;
- filter: alpha(opacity=100);
- -moz-opacity: 1;
- opacity: 1;
-}
-
-#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a:hover {
- text-decoration: underline;
-}
-
-#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post img.jp-relatedposts-post-img,
-#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post span {
- display: block;
- max-width: 90%;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post img.jp-relatedposts-post-img,
-#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post span {
- max-width: 100%;
-}
-
-#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date,
-#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-context {
- opacity: .6;
-}
-
-/* Hide the date by default, but leave the element there if a theme wants to use css to make it visible. */
-.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date {
- display: none;
-}
-
-/* Behavior when there are thumbnails in visual mode */
-#jp-relatedposts .jp-relatedposts-items-visual div.jp-relatedposts-post-thumbs p.jp-relatedposts-post-excerpt {
- display: none;
-}
-
-/* Behavior when there are no thumbnails in visual mode */
-#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs p.jp-relatedposts-post-excerpt {
- overflow: hidden;
-}
-#jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post-nothumbs span {
- margin-bottom: 1em;
-}
-
-/* List Layout */
-#jp-relatedposts .jp-relatedposts-list .jp-relatedposts-post {
- clear: both;
- width: 100%;
-}
-
-#jp-relatedposts .jp-relatedposts-list .jp-relatedposts-post img.jp-relatedposts-post-img {
- float: left;
- overflow: hidden;
- max-width: 33%;
- margin-right: 3%;
-}
-
-#jp-relatedposts .jp-relatedposts-list h4.jp-relatedposts-post-title {
- display: inline-block;
- max-width: 63%;
-}
-
-/*
- * Responsive
- */
-
-@media only screen and (max-width: 640px) {
-
- #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post {
- width: 50%;
- }
-
- #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:nth-child(3n) {
- clear: left;
- }
-
- #jp-relatedposts .jp-relatedposts-items-visual {
- margin-right: 20px;
- }
-}
-
-@media only screen and (max-width: 320px) {
-
- #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post {
- width: 100%;
- clear: both;
- margin: 0 0 1em;
- }
-
- #jp-relatedposts .jp-relatedposts-list .jp-relatedposts-post img.jp-relatedposts-post-img,
- #jp-relatedposts .jp-relatedposts-list h4.jp-relatedposts-post-title {
- float: none;
- max-width: 100%;
- margin-right: 0;
- }
-}
diff --git a/plugins/jetpack/modules/related-posts/related-posts.js b/plugins/jetpack/modules/related-posts/related-posts.js
deleted file mode 100644
index c3cc1c53..00000000
--- a/plugins/jetpack/modules/related-posts/related-posts.js
+++ /dev/null
@@ -1,267 +0,0 @@
-/* jshint onevar: false */
-/* globals related_posts_js_options */
-
-/**
- * Load related posts
- */
-(function($) {
- var jprp = {
- response: null,
-
- /**
- * Utility get related posts JSON endpoint from URLs
- *
- * @param {string} URL (optional)
- * @return {string} Endpoint URL
- */
- getEndpointURL: function( URL ) {
- var locationObject,
- is_customizer = 'undefined' !== typeof wp && wp.customize && wp.customize.settings && wp.customize.settings.url && wp.customize.settings.url.self;
-
- // If we're in Customizer, write the correct URL.
- if ( is_customizer ) {
- locationObject = document.createElement( 'a' );
- locationObject.href = wp.customize.settings.url.self;
- } else {
- locationObject = document.location;
- }
-
- if ( 'string' === typeof( URL ) && URL.match( /^https?:\/\// ) ) {
- locationObject = document.createElement( 'a' );
- locationObject.href = URL;
- }
-
- var args = 'relatedposts=1';
- if ( $( '#jp-relatedposts' ).data( 'exclude' ) ) {
- args += '&relatedposts_exclude=' + $( '#jp-relatedposts' ).data( 'exclude' );
- }
-
- if ( is_customizer ) {
- args += '&jetpackrpcustomize=1';
- }
-
- var pathname = locationObject.pathname;
- if ( '/' !== pathname[0] ) {
- pathname = '/' + pathname;
- }
-
- if ( '' === locationObject.search ) {
- return pathname + '?' + args;
- } else {
- return pathname + locationObject.search + '&' + args;
- }
- },
-
- getAnchor: function( post, classNames ) {
- var anchor_title = post.title;
- if ( '' !== ( '' + post.excerpt ) ) {
- anchor_title += '\n\n' + post.excerpt;
- }
-
- var anchor = $( '<a>' );
-
- anchor.attr({
- 'class': classNames,
- 'href': post.url,
- 'title': anchor_title,
- 'rel': post.rel,
- 'data-origin': post.url_meta.origin,
- 'data-position': post.url_meta.position
- });
-
- var anchor_html = $( '<div>' ).append( anchor ).html();
- return [
- anchor_html.substring( 0, anchor_html.length-4 ),
- '</a>'
- ];
- },
-
- generateMinimalHtml: function( posts, options ) {
- var self = this;
- var html = '';
-
- $.each( posts, function( index, post ) {
- var anchor = self.getAnchor( post, 'jp-relatedposts-post-a' );
- var classes = 'jp-relatedposts-post jp-relatedposts-post' + index;
-
- if ( post.classes.length > 0 ) {
- classes += ' ' + post.classes.join( ' ' );
- }
-
- html += '<p class="' + classes + '" data-post-id="' + post.id + '" data-post-format="' + post.format + '">';
- html += '<span class="jp-relatedposts-post-title">' + anchor[0] + post.title + anchor[1] + '</span>';
- if ( options.showDate ) {
- html += '<span class="jp-relatedposts-post-date">' + post.date + '</span>';
- }
- if ( options.showContext ) {
- html += '<span class="jp-relatedposts-post-context">' + post.context + '</span>';
- }
- html += '</p>';
- } );
- return '<div class="jp-relatedposts-items jp-relatedposts-items-minimal jp-relatedposts-' + options.layout + ' ">' + html + '</div>';
- },
-
- generateVisualHtml: function( posts, options ) {
- var self = this;
- var html = '';
-
- $.each( posts, function( index, post ) {
- var anchor = self.getAnchor( post, 'jp-relatedposts-post-a' );
- var classes = 'jp-relatedposts-post jp-relatedposts-post' + index;
-
- if ( post.classes.length > 0 ) {
- classes += ' ' + post.classes.join( ' ' );
- }
-
- if ( ! post.img.src ) {
- classes += ' jp-relatedposts-post-nothumbs';
- } else {
- classes += ' jp-relatedposts-post-thumbs';
- }
-
- html += '<div class="' + classes + '" data-post-id="' + post.id + '" data-post-format="' + post.format + '">';
- if ( post.img.src ) {
- html += anchor[0] + '<img class="jp-relatedposts-post-img" src="' + post.img.src + '" width="' + post.img.width + '" alt="' + post.title + '" />' + anchor[1];
- } else {
- var anchor_overlay = self.getAnchor( post, 'jp-relatedposts-post-a jp-relatedposts-post-aoverlay' );
- html += anchor_overlay[0] + anchor_overlay[1];
- }
- html += '<' + related_posts_js_options.post_heading + ' class="jp-relatedposts-post-title">' + anchor[0] + post.title + anchor[1] + '</' + related_posts_js_options.post_heading + '>';
- html += '<p class="jp-relatedposts-post-excerpt">' + $( '<p>' ).text( post.excerpt ).html() + '</p>';
- if ( options.showDate ) {
- html += '<p class="jp-relatedposts-post-date">' + post.date + '</p>';
- }
- if ( options.showContext ) {
- html += '<p class="jp-relatedposts-post-context">' + post.context + '</p>';
- }
- html += '</div>';
- } );
- return '<div class="jp-relatedposts-items jp-relatedposts-items-visual jp-relatedposts-' + options.layout + ' ">' + html + '</div>';
- },
-
- /**
- * We want to set a max height on the excerpt however we want to set
- * this according to the natual pacing of the page as we never want to
- * cut off a line of text in the middle so we need to do some detective
- * work.
- */
- setVisualExcerptHeights: function() {
- var elements = $( '#jp-relatedposts .jp-relatedposts-post-nothumbs .jp-relatedposts-post-excerpt' );
-
- if ( 0 >= elements.length ) {
- return;
- }
-
- var fontSize = parseInt( elements.first().css( 'font-size' ), 10 ),
- lineHeight = parseInt( elements.first().css( 'line-height' ), 10 );
-
- // Show 5 lines of text
- elements.css(
- 'max-height',
- ( 5 * lineHeight / fontSize ) + 'em'
- );
- },
-
- getTrackedUrl: function( anchor ) {
- var args = 'relatedposts_hit=1';
- args += '&relatedposts_origin=' + $( anchor ).data( 'origin' );
- args += '&relatedposts_position=' + $( anchor ).data( 'position' );
-
- var pathname = anchor.pathname;
- if ( '/' !== pathname[0] ) {
- pathname = '/' + pathname;
- }
-
- if ( '' === anchor.search ) {
- return pathname + '?' + args;
- } else {
- return pathname + anchor.search + '&' + args;
- }
- },
-
- cleanupTrackedUrl: function() {
- if ( 'function' !== typeof history.replaceState ) {
- return;
- }
-
- var cleaned_search = document.location.search.replace( /\brelatedposts_[a-z]+=[0-9]*&?\b/gi, '' );
- if ( '?' === cleaned_search ) {
- cleaned_search = '';
- }
- if ( document.location.search !== cleaned_search ) {
- history.replaceState( {}, document.title, document.location.pathname + cleaned_search );
- }
- }
- };
-
- function afterPostsHaveLoaded() {
- jprp.setVisualExcerptHeights();
- $( '#jp-relatedposts a.jp-relatedposts-post-a' ).click( function() {
- this.href = jprp.getTrackedUrl( this );
- } );
- }
-
- /**
- * Initialize Related Posts.
- */
- function startRelatedPosts() {
- jprp.cleanupTrackedUrl();
-
- var endpointURL = jprp.getEndpointURL(),
- $relatedPosts = $( '#jp-relatedposts' );
-
- if ( $( '#jp-relatedposts .jp-relatedposts-post' ).length ) {
- afterPostsHaveLoaded();
- return;
- }
-
- $.getJSON( endpointURL, function( response ) {
- if ( 0 === response.items.length || 0 === $relatedPosts.length ) {
- return;
- }
-
- jprp.response = response;
-
- var html,
- showThumbnails,
- options = {};
-
- if ( 'undefined' !== typeof wp && wp.customize ) {
- showThumbnails = wp.customize.instance( 'jetpack_relatedposts[show_thumbnails]' ).get();
- options.showDate = wp.customize.instance( 'jetpack_relatedposts[show_date]' ).get();
- options.showContext = wp.customize.instance( 'jetpack_relatedposts[show_context]' ).get();
- options.layout = wp.customize.instance( 'jetpack_relatedposts[layout]' ).get();
- } else {
- showThumbnails = response.show_thumbnails;
- options.showDate = response.show_date;
- options.showContext = response.show_context;
- options.layout = response.layout;
- }
-
- html = ! showThumbnails ? jprp.generateMinimalHtml( response.items, options ) : jprp.generateVisualHtml( response.items, options );
-
- $relatedPosts.append( html );
- if ( options.showDate ) {
- $relatedPosts.find( '.jp-relatedposts-post-date' ).show();
- }
- $relatedPosts.show();
- afterPostsHaveLoaded();
- } );
- }
-
- $( function() {
- if ( 'undefined' !== typeof wp && wp.customize ) {
- if ( wp.customize.selectiveRefresh ) {
- wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function( placement ) {
- if ( 'jetpack_relatedposts' === placement.partial.id ) {
- startRelatedPosts();
- }
- } );
- }
- wp.customize.bind( 'preview-ready', startRelatedPosts );
- } else {
- startRelatedPosts();
- }
- } );
-
-})(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/modules/related-posts/rtl/related-posts-rtl.css b/plugins/jetpack/modules/related-posts/rtl/related-posts-rtl.css
deleted file mode 100644
index f50c41f3..00000000
--- a/plugins/jetpack/modules/related-posts/rtl/related-posts-rtl.css
+++ /dev/null
@@ -1,190 +0,0 @@
-/* This file was automatically generated on Dec 01 2014 22:02:36 */
-
-/**
- * Styles for Jetpack related posts
- */
-
-/* Container */
-
-div#jp-relatedposts {
- display: none;
- padding-top: 1em;
- margin: 1em 0;
- position: relative;
-}
-
-div.jp-relatedposts:after {
- content: '';
- display: block;
- clear: both;
-}
-
-/* Headline above related posts section, labeled "Related" */
-
-div#jp-relatedposts h3.jp-relatedposts-headline {
- margin: 0 0 1em 0;
- display: inline-block;
- float: right;
- font-size: 9pt;
- font-weight: bold;
- font-family: inherit;
-}
-
-div#jp-relatedposts h3.jp-relatedposts-headline em:before {
- content: "";
- display: block;
- width: 100%;
- min-width: 30px;
- border-top: 1px solid #ddd;
- border-top: 1px solid rgba(0,0,0,.2);
- margin-bottom: 1em;
-}
-
-div#jp-relatedposts h3.jp-relatedposts-headline em {
- font-style: normal;
- font-weight: bold;
-}
-
-/* Related posts items (wrapping items) */
-
-div#jp-relatedposts div.jp-relatedposts-items {
- clear: right;
-}
-
-div#jp-relatedposts div.jp-relatedposts-items-visual {
- margin-left: -20px;
-}
-
-/* Related posts item */
-
-div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post {
- float: right;
- width: 33%;
- margin: 0 0 1em; /* Needs to be same as the main outer wrapper for Related Posts */
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
-}
-
-div#jp-relatedposts div.jp-relatedposts-items-visual .jp-relatedposts-post {
- padding-left: 20px;
- /*cursor: pointer;*/
- filter: alpha(opacity=80);
- -moz-opacity: .8;
- opacity: .8;
-}
-
-div#jp-relatedposts div.jp-relatedposts-items div.jp-relatedposts-post:hover .jp-relatedposts-post-title a {
- text-decoration: underline;
-}
-
-div#jp-relatedposts div.jp-relatedposts-items div.jp-relatedposts-post:hover {
- filter: alpha(opacity=100);
- -moz-opacity: 1;
- opacity: 1;
-}
-
-/* Related posts item content */
-
-div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
-div#jp-relatedposts div.jp-relatedposts-items p {
- font-size: 14px;
- line-height: 20px;
- margin: 0;
-}
-div#jp-relatedposts div.jp-relatedposts-items-visual div.jp-relatedposts-post-nothumbs {
- position:relative;
-}
-div#jp-relatedposts div.jp-relatedposts-items-visual div.jp-relatedposts-post-nothumbs a.jp-relatedposts-post-aoverlay {
- position:absolute;
- top:0;
- bottom:0;
- right:0;
- left:0;
- display:block;
-}
-
-div#jp-relatedposts div.jp-relatedposts-items p {
- margin-bottom: 0;
-}
-
-div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title {
- text-transform: none;
- margin: 0;
- font-family: inherit;
- display: block;
- max-width: 100%;
-}
-
-div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a {
- font-size: inherit;
- font-weight: normal;
- text-decoration: none;
- filter: alpha(opacity=100);
- -moz-opacity: 1;
- opacity: 1;
-}
-
-div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a:hover {
- text-decoration: underline;
-}
-
-div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post img.jp-relatedposts-post-img,
-div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post span {
- display: block;
- max-width: 90%;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-div#jp-relatedposts div.jp-relatedposts-items-visual .jp-relatedposts-post img.jp-relatedposts-post-img,
-div#jp-relatedposts div.jp-relatedposts-items-visual .jp-relatedposts-post span {
- max-width: 100%;
-}
-
-div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-context {
- opacity: .6;
-}
-
-/* Behavior when there are thumbnails in visual mode */
-div#jp-relatedposts div.jp-relatedposts-items-visual div.jp-relatedposts-post-thumbs p.jp-relatedposts-post-excerpt {
- display: none;
-}
-
-/* Behavior when there are no thumbnails in visual mode */
-div#jp-relatedposts div.jp-relatedposts-items-visual div.jp-relatedposts-post-nothumbs p.jp-relatedposts-post-excerpt {
- overflow: hidden;
-}
-div#jp-relatedposts div.jp-relatedposts-items-visual div.jp-relatedposts-post-nothumbs span {
- margin-bottom: 1em;
-}
-
-/**
- * Responsive
- */
-
-@media only screen and (max-width: 640px) {
-
- div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post {
- width: 50%;
- }
-
- div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post:nth-child(3n) {
- clear: right;
- }
-
- div#jp-relatedposts div.jp-relatedposts-items-visual {
- margin-left: 20px;
- }
-
-}
-
-@media only screen and (max-width: 320px) {
-
- div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post {
- width: 100%;
- clear: both;
- margin: 0 0 1em;
- }
-
-}
diff --git a/plugins/jetpack/modules/search.php b/plugins/jetpack/modules/search.php
deleted file mode 100644
index 0f94315b..00000000
--- a/plugins/jetpack/modules/search.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-/**
- * Module Name: Search
- * Module Description: Enhanced search, powered by Elasticsearch, a powerful replacement for WordPress search.
- * First Introduced: 5.0
- * Sort Order: 34
- * Free: false
- * Requires Connection: Yes
- * Auto Activate: No
- * Feature: Search
- * Additional Search Queries: search, elastic, elastic search, elasticsearch, fast search, search results, search performance, google search
- * Plans: business
- */
-
-require_once( dirname( __FILE__ ) . '/search/class.jetpack-search.php' );
-
-Jetpack_Search::instance();
diff --git a/plugins/jetpack/modules/search/class.jetpack-search-helpers.php b/plugins/jetpack/modules/search/class.jetpack-search-helpers.php
deleted file mode 100644
index 27526b4c..00000000
--- a/plugins/jetpack/modules/search/class.jetpack-search-helpers.php
+++ /dev/null
@@ -1,699 +0,0 @@
-<?php
-/**
- * Jetpack Search: Jetpack_Search_Helpers class
- *
- * @package Jetpack
- * @subpackage Jetpack Search
- * @since 5.8.0
- */
-
-/**
- * Various helper functions for reuse throughout the Jetpack Search code.
- *
- * @since 5.8.0
- */
-class Jetpack_Search_Helpers {
-
- /**
- * The search widget's base ID.
- *
- * @since 5.8.0
- * @var string
- */
- const FILTER_WIDGET_BASE = 'jetpack-search-filters';
-
- /**
- * Create a URL for the current search that doesn't include the "paged" parameter.
- *
- * @since 5.8.0
- *
- * @return string The search URL.
- */
- static function get_search_url() {
- $query_args = stripslashes_deep( $_GET );
-
- // Handle the case where a permastruct is being used, such as /search/{$query}
- if ( ! isset( $query_args['s'] ) ) {
- $query_args['s'] = get_search_query();
- }
-
- if ( isset( $query_args['paged'] ) ) {
- unset( $query_args['paged'] );
- }
-
- $query = http_build_query( $query_args );
-
- return home_url( "?{$query}" );
- }
-
- /**
- * Wraps add_query_arg() with the URL defaulting to the current search URL.
- *
- * @see add_query_arg()
- *
- * @since 5.8.0
- *
- * @param string|array $key Either a query variable key, or an associative array of query variables.
- * @param string $value Optional. A query variable value.
- * @param bool|string $url Optional. A URL to act upon. Defaults to the current search URL.
- *
- * @return string New URL query string (unescaped).
- */
- static function add_query_arg( $key, $value = false, $url = false ) {
- $url = empty( $url ) ? self::get_search_url() : $url;
- if ( is_array( $key ) ) {
- return add_query_arg( $key, $url );
- }
-
- return add_query_arg( $key, $value, $url );
- }
-
- /**
- * Wraps remove_query_arg() with the URL defaulting to the current search URL.
- *
- * @see remove_query_arg()
- *
- * @since 5.8.0
- *
- * @param string|array $key Query key or keys to remove.
- * @param bool|string $query Optional. A URL to act upon. Defaults to the current search URL.
- *
- * @return string New URL query string (unescaped).
- */
- static function remove_query_arg( $key, $url = false ) {
- $url = empty( $url ) ? self::get_search_url() : $url;
-
- return remove_query_arg( $key, $url );
- }
-
- /**
- * Returns the name of the search widget's option.
- *
- * @since 5.8.0
- *
- * @return string The search widget option name.
- */
- static function get_widget_option_name() {
- return sprintf( 'widget_%s', self::FILTER_WIDGET_BASE );
- }
-
- /**
- * Returns the search widget instances from the widget's option.
- *
- * @since 5.8.0
- *
- * @return array The widget options.
- */
- static function get_widgets_from_option() {
- $widget_options = get_option( self::get_widget_option_name(), array() );
-
- // We don't need this
- if ( ! empty( $widget_options ) && isset( $widget_options['_multiwidget'] ) ) {
- unset( $widget_options['_multiwidget'] );
- }
-
- return $widget_options;
- }
-
- /**
- * Returns the widget ID (widget base plus the numeric ID).
- *
- * @param int $number The widget's numeric ID.
- *
- * @return string The widget's numeric ID prefixed with the search widget base.
- */
- static function build_widget_id( $number ) {
- return sprintf( '%s-%d', self::FILTER_WIDGET_BASE, $number );
- }
-
- /**
- * Wrapper for is_active_widget() with the other parameters automatically supplied.
- *
- * @see is_active_widget()
- *
- * @since 5.8.0
- *
- * @param int $widget_id Widget ID.
- *
- * @return bool Whether the widget is active or not.
- */
- static function is_active_widget( $widget_id ) {
- return (bool) is_active_widget( false, $widget_id, self::FILTER_WIDGET_BASE, true );
- }
-
- /**
- * Returns an array of the filters from all active search widgets.
- *
- * @since 5.8.0
- *
- * @return array Active filters.
- */
- static function get_filters_from_widgets() {
- $filters = array();
-
- $widget_options = self::get_widgets_from_option();
- if ( empty( $widget_options ) ) {
- return $filters;
- }
-
- foreach ( (array) $widget_options as $number => $settings ) {
- $widget_id = self::build_widget_id( $number );
- if ( ! self::is_active_widget( $widget_id ) || empty( $settings['filters'] ) ) {
- continue;
- }
-
- foreach ( (array) $settings['filters'] as $widget_filter ) {
- $widget_filter['widget_id'] = $widget_id;
-
- if ( empty( $widget_filter['name'] ) ) {
- $widget_filter['name'] = self::generate_widget_filter_name( $widget_filter );
- }
-
- $key = sprintf( '%s_%d', $widget_filter['type'], count( $filters ) );
-
- $filters[ $key ] = $widget_filter;
- }
- }
-
- return $filters;
- }
-
- /**
- * Get the localized default label for a date filter.
- *
- * @since 5.8.0
- *
- * @param string $type Date type, either year or month.
- * @param bool $is_updated Whether the filter was updated or not (adds "Updated" to the end).
- *
- * @return string The filter label.
- */
- static function get_date_filter_type_name( $type, $is_updated = false ) {
- switch ( $type ) {
- case 'year':
- $string = ( $is_updated )
- ? esc_html_x( 'Year Updated', 'label for filtering posts', 'jetpack' )
- : esc_html_x( 'Year', 'label for filtering posts', 'jetpack' );
- break;
- case 'month':
- default:
- $string = ( $is_updated )
- ? esc_html_x( 'Month Updated', 'label for filtering posts', 'jetpack' )
- : esc_html_x( 'Month', 'label for filtering posts', 'jetpack' );
- break;
- }
-
- return $string;
- }
-
- /**
- * Creates a default name for a filter. Used when the filter label is blank.
- *
- * @since 5.8.0
- *
- * @param array $widget_filter The filter to generate the title for.
- *
- * @return string The suggested filter name.
- */
- static function generate_widget_filter_name( $widget_filter ) {
- $name = '';
-
- switch ( $widget_filter['type'] ) {
- case 'post_type':
- $name = _x( 'Post Types', 'label for filtering posts', 'jetpack' );
- break;
-
- case 'date_histogram':
- $modified_fields = array(
- 'post_modified',
- 'post_modified_gmt',
- );
- switch ( $widget_filter['interval'] ) {
- case 'year':
- $name = self::get_date_filter_type_name(
- 'year',
- in_array( $widget_filter['field'], $modified_fields )
- );
- break;
- case 'month':
- default:
- $name = self::get_date_filter_type_name(
- 'month',
- in_array( $widget_filter['field'], $modified_fields )
- );
- break;
- }
- break;
-
- case 'taxonomy':
- $tax = get_taxonomy( $widget_filter['taxonomy'] );
- if ( ! $tax ) {
- break;
- }
-
- if ( isset( $tax->label ) ) {
- $name = $tax->label;
- } elseif ( isset( $tax->labels ) && isset( $tax->labels->name ) ) {
- $name = $tax->labels->name;
- }
- break;
- }
-
- return $name;
- }
-
- /**
- * Whether we should rerun a search in the customizer preview or not.
- *
- * @since 5.8.0
- *
- * @return bool
- */
- static function should_rerun_search_in_customizer_preview() {
- // Only update when in a customizer preview and data is being posted.
- // Check for $_POST removes an extra update when the customizer loads.
- //
- // Note: We use $GLOBALS['wp_customize'] here instead of is_customize_preview() to support unit tests.
- if ( ! isset( $GLOBALS['wp_customize'] ) || ! $GLOBALS['wp_customize']->is_preview() || empty( $_POST ) ) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Since PHP's built-in array_diff() works by comparing the values that are in array 1 to the other arrays,
- * if there are less values in array 1, it's possible to get an empty diff where one might be expected.
- *
- * @since 5.8.0
- *
- * @param array $array_1
- * @param array $array_2
- *
- * @return array
- */
- static function array_diff( $array_1, $array_2 ) {
- // If the array counts are the same, then the order doesn't matter. If the count of
- // $array_1 is higher than $array_2, that's also fine. If the count of $array_2 is higher,
- // we need to swap the array order though.
- if ( count( $array_1 ) !== count( $array_2 ) && count( $array_2 ) > count( $array_1 ) ) {
- $temp = $array_1;
- $array_1 = $array_2;
- $array_2 = $temp;
- }
-
- // Disregard keys
- return array_values( array_diff( $array_1, $array_2 ) );
- }
-
- /**
- * Given the widget instance, will return true when selected post types differ from searchable post types.
- *
- * @since 5.8.0
- *
- * @param array $post_types An array of post types.
- *
- * @return bool
- */
- static function post_types_differ_searchable( $post_types ) {
- if ( empty( $post_types ) ) {
- return false;
- }
-
- $searchable_post_types = get_post_types( array( 'exclude_from_search' => false ) );
- $diff_of_searchable = self::array_diff( $searchable_post_types, (array) $post_types );
-
- return ! empty( $diff_of_searchable );
- }
-
- /**
- * Given the array of post types, will return true when these differ from the current search query.
- *
- * @since 5.8.0
- *
- * @param array $post_types An array of post types.
- *
- * @return bool
- */
- static function post_types_differ_query( $post_types ) {
- if ( empty( $post_types ) ) {
- return false;
- }
-
- if ( empty( $_GET['post_type'] ) ) {
- $post_types_from_query = array();
- } elseif ( is_array( $_GET['post_type'] ) ) {
- $post_types_from_query = $_GET['post_type'];
- } else {
- $post_types_from_query = (array) explode( ',', $_GET['post_type'] );
- }
-
- $post_types_from_query = array_map( 'trim', $post_types_from_query );
-
- $diff_query = self::array_diff( (array) $post_types, $post_types_from_query );
-
- return ! empty( $diff_query );
- }
-
- /**
- * Determine what Tracks value should be used when updating a widget.
- *
- * @since 5.8.0
- *
- * @param mixed $old_value The old option value.
- * @param mixed $new_value The new option value.
- *
- * @return array|false False if the widget wasn't updated, otherwise an array of the Tracks action and widget properties.
- */
- static function get_widget_tracks_value( $old_value, $new_value ) {
- $old_value = (array) $old_value;
- if ( isset( $old_value['_multiwidget'] ) ) {
- unset( $old_value['_multiwidget'] );
- }
-
- $new_value = (array) $new_value;
- if ( isset( $new_value['_multiwidget'] ) ) {
- unset( $new_value['_multiwidget'] );
- }
-
- $old_keys = array_keys( $old_value );
- $new_keys = array_keys( $new_value );
-
- if ( count( $new_keys ) > count( $old_keys ) ) { // This is the case for a widget being added
- $diff = self::array_diff( $new_keys, $old_keys );
- $action = 'widget_added';
- $widget = empty( $diff ) || ! isset( $new_value[ $diff[0] ] )
- ? false
- : $new_value[ $diff[0] ];
- } elseif ( count( $old_keys ) > count( $new_keys ) ) { // This is the case for a widget being deleted
- $diff = self::array_diff( $old_keys, $new_keys );
- $action = 'widget_deleted';
- $widget = empty( $diff ) || ! isset( $old_value[ $diff[0] ] )
- ? false
- : $old_value[ $diff[0] ];
- } else {
- $action = 'widget_updated';
- $widget = false;
-
- // This is a bit crazy. Since there can be multiple widgets stored in a single option,
- // we need to diff the old and new values to figure out which widget was updated.
- foreach ( $new_value as $key => $new_instance ) {
- if ( ! isset( $old_value[ $key ] ) ) {
- continue;
- }
- $old_instance = $old_value[ $key ];
-
- // First, let's test the keys of each instance
- $diff = self::array_diff( array_keys( $new_instance ), array_keys( $old_instance ) );
- if ( ! empty( $diff ) ) {
- $widget = $new_instance;
- break;
- }
-
- // Next, lets's loop over each value and compare it
- foreach ( $new_instance as $k => $v ) {
- if ( is_scalar( $v ) && (string) $v !== (string) $old_instance[ $k ] ) {
- $widget = $new_instance;
- break;
- }
-
- if ( 'filters' == $k ) {
- if ( count( $new_instance['filters'] ) != count( $old_instance['filters'] ) ) {
- $widget = $new_instance;
- break;
- }
-
- foreach ( $v as $filter_key => $new_filter_value ) {
- $diff = self::array_diff( $new_filter_value, $old_instance['filters'][ $filter_key ] );
- if ( ! empty( $diff ) ) {
- $widget = $new_instance;
- break;
- }
- }
- }
- }
- }
- }
-
- if ( empty( $action ) || empty( $widget ) ) {
- return false;
- }
-
- return array(
- 'action' => $action,
- 'widget' => self::get_widget_properties_for_tracks( $widget ),
- );
- }
-
- /**
- * Creates the widget properties for sending to Tracks.
- *
- * @since 5.8.0
- *
- * @param array $widget The widget instance.
- *
- * @return array The widget properties.
- */
- static function get_widget_properties_for_tracks( $widget ) {
- $sanitized = array();
-
- foreach ( (array) $widget as $key => $value ) {
- if ( '_multiwidget' == $key ) {
- continue;
- }
-
- if ( is_scalar( $value ) ) {
- $key = str_replace( '-', '_', sanitize_key( $key ) );
- $key = "widget_{$key}";
- $sanitized[ $key ] = $value;
- }
- }
-
- $filters_properties = ! empty( $widget['filters'] )
- ? self::get_filter_properties_for_tracks( $widget['filters'] )
- : array();
-
- return array_merge( $sanitized, $filters_properties );
- }
-
- /**
- * Creates the filter properties for sending to Tracks.
- *
- * @since 5.8.0
- *
- * @param array $filters An array of filters.
- *
- * @return array The filter properties.
- */
- static function get_filter_properties_for_tracks( $filters ) {
- if ( empty( $filters ) ) {
- return $filters;
- }
-
- $filters_properties = array(
- 'widget_filter_count' => count( $filters ),
- );
-
- foreach ( $filters as $filter ) {
- if ( empty( $filter['type'] ) ) {
- continue;
- }
-
- $key = sprintf( 'widget_filter_type_%s', $filter['type'] );
- if ( isset( $filters_properties[ $key ] ) ) {
- $filters_properties[ $key ] ++;
- } else {
- $filters_properties[ $key ] = 1;
- }
- }
-
- return $filters_properties;
- }
-
- /**
- * Gets the active post types given a set of filters.
- *
- * @since 5.8.0
- *
- * @param array $filters The active filters for the current query.
- *
- * @return array The active post types.
- */
- public static function get_active_post_types( $filters ) {
- $active_post_types = array();
-
- foreach ( $filters as $item ) {
- if ( ( 'post_type' == $item['type'] ) && isset( $item['query_vars']['post_type'] ) ) {
- $active_post_types[] = $item['query_vars']['post_type'];
- }
- }
-
- return $active_post_types;
- }
-
- /**
- * Sets active to false on all post type buckets.
- *
- * @since 5.8.0
- *
- * @param array $filters The available filters for the current query.
- *
- * @return array The filters for the current query with modified active field.
- */
- public static function remove_active_from_post_type_buckets( $filters ) {
- $modified = $filters;
- foreach ( $filters as $key => $filter ) {
- if ( 'post_type' === $filter['type'] && ! empty( $filter['buckets'] ) ) {
- foreach ( $filter['buckets'] as $k => $bucket ) {
- $bucket['active'] = false;
- $modified[ $key ]['buckets'][ $k ] = $bucket;
- }
- }
- }
-
- return $modified;
- }
-
- /**
- * Given a url and an array of post types, will ensure that the post types are properly applied to the URL as args.
- *
- * @since 5.8.0
- *
- * @param string $url The URL to add post types to.
- * @param array $post_types An array of post types that should be added to the URL.
- *
- * @return string The URL with added post types.
- */
- public static function add_post_types_to_url( $url, $post_types ) {
- $url = Jetpack_Search_Helpers::remove_query_arg( 'post_type', $url );
- if ( empty( $post_types ) ) {
- return $url;
- }
-
- $url = Jetpack_Search_Helpers::add_query_arg(
- 'post_type',
- implode( ',', $post_types ),
- $url
- );
-
- return $url;
- }
-
- /**
- * Since we provide support for the widget restricting post types by adding the selected post types as
- * active filters, if removing a post type filter would result in there no longer be post_type args in the URL,
- * we need to be sure to add them back.
- *
- * @since 5.8.0
- *
- * @param array $filters An array of possible filters for the current query.
- * @param array $post_types The post types to ensure are on the link.
- *
- * @return array The updated array of filters with post typed added to the remove URLs.
- */
- public static function ensure_post_types_on_remove_url( $filters, $post_types ) {
- $modified = $filters;
-
- foreach ( (array) $filters as $filter_key => $filter ) {
- if ( 'post_type' !== $filter['type'] || empty( $filter['buckets'] ) ) {
- $modified[ $filter_key ] = $filter;
- continue;
- }
-
- foreach ( (array) $filter['buckets'] as $bucket_key => $bucket ) {
- if ( empty( $bucket['remove_url'] ) ) {
- continue;
- }
-
- $parsed = wp_parse_url( $bucket['remove_url'] );
- if ( ! $parsed ) {
- continue;
- }
-
- $query = array();
- if ( ! empty( $parsed['query'] ) ) {
- wp_parse_str( $parsed['query'], $query );
- }
-
- if ( empty( $query['post_type'] ) ) {
- $modified[ $filter_key ]['buckets'][ $bucket_key ]['remove_url'] = self::add_post_types_to_url(
- $bucket['remove_url'],
- $post_types
- );
- }
- }
- }
-
- return $modified;
- }
-
- /**
- * Wraps a WordPress filter called "jetpack_search_disable_widget_filters" that allows
- * developers to disable filters supplied by the search widget. Useful if filters are
- * being defined at the code level.
- *
- * @since 5.8.0
- *
- * @return bool
- */
- public static function are_filters_by_widget_disabled() {
- /**
- * Allows developers to disable filters being set by widget, in favor of manually
- * setting filters via `Jetpack_Search::set_filters()`.
- *
- * @module search
- *
- * @since 5.7.0
- *
- * @param bool false
- */
- return apply_filters( 'jetpack_search_disable_widget_filters', false );
- }
-
- /**
- * Returns a boolean for whether the current site has a VIP index.
- *
- * @since 5.8.0
- *
- * @return bool
- */
- public static function site_has_vip_index() {
- $has_vip_index = (
- Jetpack_Constants::is_defined( 'JETPACK_SEARCH_VIP_INDEX' ) &&
- Jetpack_Constants::get_constant( 'JETPACK_SEARCH_VIP_INDEX' )
- );
-
- /**
- * Allows developers to filter whether the current site has a VIP index.
- *
- * @module search
- *
- * @since 5.8.0
- *
- * @param bool $has_vip_index Whether the current site has a VIP index.
- */
- return apply_filters( 'jetpack_search_has_vip_index', $has_vip_index );
- }
-
- /**
- * Returns the maximum posts per page for a search query.
- *
- * @since 5.8.0
- *
- * @return int
- */
- public static function get_max_posts_per_page() {
- return self::site_has_vip_index() ? 1000 : 100;
- }
-
- /**
- * Returns the maximum offset for a search query.
- *
- * @since 5.8.0
- *
- * @return int
- */
- public static function get_max_offset() {
- return self::site_has_vip_index() ? 9000 : 1000;
- }
-}
diff --git a/plugins/jetpack/modules/search/class.jetpack-search-template-tags.php b/plugins/jetpack/modules/search/class.jetpack-search-template-tags.php
deleted file mode 100644
index 303e6caa..00000000
--- a/plugins/jetpack/modules/search/class.jetpack-search-template-tags.php
+++ /dev/null
@@ -1,225 +0,0 @@
-<?php
-/**
- * Jetpack Search: Jetpack_Search_Template_Tags class
- *
- * @package Jetpack
- * @subpackage Jetpack Search
- * @since 5.8.0
- */
-
-/**
- * Class that has various methods for outputting functionality into a theme that doesn't support widgets.
- * Additionally the widget itself makes use of these class.
- *
- * @since 5.8.0
- */
-class Jetpack_Search_Template_Tags {
-
- /**
- * Renders all available filters that can be used to filter down search results on the frontend.
- *
- * @since 5.8.0
- *
- * @param array $filters The available filters for the current query.
- * @param array $post_types An array of post types to make filterable
- */
- public static function render_available_filters( $filters = null, $post_types = null ) {
- if ( is_null( $filters ) ) {
- $filters = Jetpack_Search::instance()->get_filters();
- }
-
- if ( is_null( $post_types ) ) {
- $post_types = get_post_types( array( 'exclude_from_search' => false ) );
- }
-
- /**
- * If the post types specified by the widget differ from the default set of searchable post types,
- * then we need to track their state.
- */
- $active_post_types = array();
- if ( Jetpack_Search_Helpers::post_types_differ_searchable( $post_types ) ) {
- // get the active filter buckets from the query
- $active_buckets = Jetpack_Search::instance()->get_active_filter_buckets();
- $post_types_differ_query = Jetpack_Search_Helpers::post_types_differ_query( $post_types );
-
- // remove any post_type filters from display if the current query
- // already specifies to match all post types
- if ( ! $post_types_differ_query ) {
- $active_buckets = array_filter( $active_buckets, array( __CLASS__, 'is_not_post_type_filter' ) );
- }
-
- $active_post_types = Jetpack_Search_Helpers::get_active_post_types( $active_buckets );
- if ( empty( $active_post_types ) ) {
- $active_post_types = $post_types;
- }
-
- if ( $post_types_differ_query ) {
- $filters = Jetpack_Search_Helpers::ensure_post_types_on_remove_url( $filters, $post_types );
- } else {
- $filters = Jetpack_Search_Helpers::remove_active_from_post_type_buckets( $filters );
- }
- } else {
- $post_types = array();
- }
-
- foreach ( (array) $filters as $filter ) {
- if ( 'post_type' == $filter['type'] ) {
- self::render_filter( $filter, $post_types );
- } else {
- self::render_filter( $filter, $active_post_types );
- }
- }
- }
-
- /**
- * Renders a single filter that can be applied to the current search.
- *
- * @since 5.8.0
- *
- * @param array $filter The filter to render.
- * @param array $default_post_types The default post types for this filter.
- */
- public static function render_filter( $filter, $default_post_types ) {
- if ( empty( $filter ) || empty( $filter['buckets'] ) ) {
- return;
- }
-
- $query_vars = null;
- foreach ( $filter['buckets'] as $item ) {
- if ( $item['active'] ) {
- $query_vars = array_keys( $item['query_vars'] );
- break;
- }
- }
- $clear_url = null;
- if ( ! empty( $query_vars ) ) {
- $clear_url = Jetpack_Search_Helpers::remove_query_arg( $query_vars );
- if ( ! empty( $default_post_types ) ) {
- $clear_url = Jetpack_Search_Helpers::add_post_types_to_url( $clear_url, $default_post_types );
- }
- }
-
- ?>
- <h4 class="jetpack-search-filters-widget__sub-heading">
- <?php echo esc_html( $filter['name'] ); ?>
- </h4>
- <?php if ( $clear_url ) : ?>
- <div class="jetpack-search-filters-widget__clear">
- <a href="<?php echo esc_url( $clear_url ); ?>">
- <?php esc_html_e( '< Clear Filters', 'jetpack' ); ?>
- </a>
- </div>
- <?php endif; ?>
- <ul class="jetpack-search-filters-widget__filter-list">
- <?php
- foreach ( $filter['buckets'] as $item ) :
- $url = ( empty( $item['active'] ) ) ? $item['url'] : $item['remove_url'];
- ?>
- <li>
- <label>
- <input type="checkbox"<?php checked( ! empty( $item['active'] ) ); ?> disabled="disabled" />&nbsp;
- <a href="<?php echo esc_url( $url ); ?>">
- <?php
- echo esc_html( $item['name'] );
- echo '&nbsp;';
- echo esc_html( sprintf(
- '(%s)',
- number_format_i18n( absint( $item['count'] ) )
- ) );
- ?>
- </a>
- </label>
- </li>
- <?php endforeach; ?>
- </ul>
- <?php
- }
-
- /**
- * Outputs the search widget's title.
- *
- * @since 5.8.0
- *
- * @param string $title The widget's title
- * @param string $before_title The HTML tag to display before the title
- * @param string $after_title The HTML tag to display after the title
- */
- public static function render_widget_title( $title, $before_title, $after_title ) {
- echo $before_title . esc_html( $title ) . $after_title;
- }
-
- /**
- * Responsible for rendering the search box within our widget on the frontend.
- *
- * @since 5.8.0
- *
- * @param array $post_types Array of post types to limit search results to.
- * @param string $orderby How to order the search results.
- * @param string $order In what direction to order the search results.
- */
- public static function render_widget_search_form( $post_types, $orderby, $order ) {
- $form = get_search_form( false );
-
- $fields_to_inject = array(
- 'orderby' => $orderby,
- 'order' => $order
- );
-
- // If the widget has specified post types to search within and IF the post types differ
- // from the default post types that would have been searched, set the selected post
- // types via hidden inputs.
- if ( Jetpack_Search_Helpers::post_types_differ_searchable( $post_types ) ) {
- $fields_to_inject['post_type'] = implode( ',', $post_types );
- }
-
- $form = self::inject_hidden_form_fields( $form, $fields_to_inject );
-
- echo '<div class="jetpack-search-form">';
- echo $form;
- echo '</div>';
- }
-
- /**
- * Modifies an HTML form to add some additional hidden fields.
- *
- * @since 5.8.0
- *
- * @param string $form The form HTML to modify.
- * @param array $fields Array of hidden fields to add. Key is field name and value is the field value.
- *
- * @return string The modified form HTML.
- */
- private static function inject_hidden_form_fields( $form, $fields ) {
- $form_injection = '';
-
- foreach ( $fields as $field_name => $field_value ) {
- $form_injection .= sprintf(
- '<input type="hidden" name="%s" value="%s" />',
- esc_attr( $field_name ),
- esc_attr( $field_value )
- );
- }
-
- // This shouldn't need to be escaped since we've escaped above as we built $form_injection
- $form = str_replace(
- '</form>',
- $form_injection . '</form>',
- $form
- );
-
- return $form;
- }
-
- /**
- * Internal method for filtering out non-post_type filters.
- *
- * @since 5.8.0
- *
- * @param array $filter
- *
- * @return bool
- */
- private static function is_not_post_type_filter( $filter ) {
- return 'post_type' !== $filter['type'];
- }
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/search/class.jetpack-search.php b/plugins/jetpack/modules/search/class.jetpack-search.php
deleted file mode 100644
index 40867589..00000000
--- a/plugins/jetpack/modules/search/class.jetpack-search.php
+++ /dev/null
@@ -1,1874 +0,0 @@
-<?php
-/**
- * Jetpack Search: Main Jetpack_Search class
- *
- * @package Jetpack
- * @subpackage Jetpack Search
- * @since 5.0.0
- */
-
-/**
- * The main class for the Jetpack Search module.
- *
- * @since 5.0.0
- */
-class Jetpack_Search {
-
- /**
- * The number of found posts.
- *
- * @since 5.0.0
- *
- * @var int
- */
- protected $found_posts = 0;
-
- /**
- * The search result, as returned by the WordPress.com REST API.
- *
- * @since 5.0.0
- *
- * @var array
- */
- protected $search_result;
-
- /**
- * This site's blog ID on WordPress.com.
- *
- * @since 5.0.0
- *
- * @var int
- */
- protected $jetpack_blog_id;
-
- /**
- * The Elasticsearch aggregations (filters).
- *
- * @since 5.0.0
- *
- * @var array
- */
- protected $aggregations = array();
-
- /**
- * The maximum number of aggregations allowed.
- *
- * @since 5.0.0
- *
- * @var int
- */
- protected $max_aggregations_count = 100;
-
- /**
- * Statistics about the last Elasticsearch query.
- *
- * @since 5.6.0
- *
- * @var array
- */
- protected $last_query_info = array();
-
- /**
- * Statistics about the last Elasticsearch query failure.
- *
- * @since 5.6.0
- *
- * @var array
- */
- protected $last_query_failure_info = array();
-
- /**
- * The singleton instance of this class.
- *
- * @since 5.0.0
- *
- * @var Jetpack_Search
- */
- protected static $instance;
-
- /**
- * Languages with custom analyzers. Other languages are supported, but are analyzed with the default analyzer.
- *
- * @since 5.0.0
- *
- * @var array
- */
- public static $analyzed_langs = array( 'ar', 'bg', 'ca', 'cs', 'da', 'de', 'el', 'en', 'es', 'eu', 'fa', 'fi', 'fr', 'he', 'hi', 'hu', 'hy', 'id', 'it', 'ja', 'ko', 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr', 'zh' );
-
- /**
- * Jetpack_Search constructor.
- *
- * @since 5.0.0
- *
- * Doesn't do anything. This class needs to be initialized via the instance() method instead.
- */
- protected function __construct() {
- }
-
- /**
- * Prevent __clone()'ing of this class.
- *
- * @since 5.0.0
- */
- public function __clone() {
- wp_die( "Please don't __clone Jetpack_Search" );
- }
-
- /**
- * Prevent __wakeup()'ing of this class.
- *
- * @since 5.0.0
- */
- public function __wakeup() {
- wp_die( "Please don't __wakeup Jetpack_Search" );
- }
-
- /**
- * Get singleton instance of Jetpack_Search.
- *
- * Instantiates and sets up a new instance if needed, or returns the singleton.
- *
- * @since 5.0.0
- *
- * @return Jetpack_Search The Jetpack_Search singleton.
- */
- public static function instance() {
- if ( ! isset( self::$instance ) ) {
- self::$instance = new Jetpack_Search();
-
- self::$instance->setup();
- }
-
- return self::$instance;
- }
-
- /**
- * Perform various setup tasks for the class.
- *
- * Checks various pre-requisites and adds hooks.
- *
- * @since 5.0.0
- */
- public function setup() {
- if ( ! Jetpack::is_active() || ! Jetpack_Plan::supports( 'search' ) ) {
- return;
- }
-
- $this->jetpack_blog_id = Jetpack::get_option( 'id' );
-
- if ( ! $this->jetpack_blog_id ) {
- return;
- }
-
- require_once dirname( __FILE__ ) . '/class.jetpack-search-helpers.php';
- require_once dirname( __FILE__ ) . '/class.jetpack-search-template-tags.php';
- require_once JETPACK__PLUGIN_DIR . 'modules/widgets/search.php';
-
- $this->init_hooks();
- }
-
- /**
- * Setup the various hooks needed for the plugin to take over search duties.
- *
- * @since 5.0.0
- */
- public function init_hooks() {
- if ( ! is_admin() ) {
- add_filter( 'posts_pre_query', array( $this, 'filter__posts_pre_query' ), 10, 2 );
-
- add_filter( 'jetpack_search_es_wp_query_args', array( $this, 'filter__add_date_filter_to_query' ), 10, 2 );
-
- add_action( 'did_jetpack_search_query', array( $this, 'store_last_query_info' ) );
- add_action( 'failed_jetpack_search_query', array( $this, 'store_query_failure' ) );
-
- add_action( 'init', array( $this, 'set_filters_from_widgets' ) );
-
- add_action( 'pre_get_posts', array( $this, 'maybe_add_post_type_as_var' ) );
- } else {
- add_action( 'update_option', array( $this, 'track_widget_updates' ), 10, 3 );
- }
-
- add_action( 'jetpack_deactivate_module_search', array( $this, 'move_search_widgets_to_inactive' ) );
- }
-
- /**
- * When an Elasticsearch query fails, this stores it and enqueues some debug information in the footer.
- *
- * @since 5.6.0
- *
- * @param array $meta Information about the failure.
- */
- public function store_query_failure( $meta ) {
- $this->last_query_failure_info = $meta;
- add_action( 'wp_footer', array( $this, 'print_query_failure' ) );
- }
-
- /**
- * Outputs information about the last Elasticsearch failure.
- *
- * @since 5.6.0
- */
- public function print_query_failure() {
- if ( $this->last_query_failure_info ) {
- printf(
- '<!-- Jetpack Search failed with code %s: %s - %s -->',
- esc_html( $this->last_query_failure_info['response_code'] ),
- esc_html( $this->last_query_failure_info['json']['error'] ),
- esc_html( $this->last_query_failure_info['json']['message'] )
- );
- }
- }
-
- /**
- * Stores information about the last Elasticsearch query and enqueues some debug information in the footer.
- *
- * @since 5.6.0
- *
- * @param array $meta Information about the query.
- */
- public function store_last_query_info( $meta ) {
- $this->last_query_info = $meta;
- add_action( 'wp_footer', array( $this, 'print_query_success' ) );
- }
-
- /**
- * Outputs information about the last Elasticsearch search.
- *
- * @since 5.6.0
- */
- public function print_query_success() {
- if ( $this->last_query_info ) {
- printf(
- '<!-- Jetpack Search took %s ms, ES time %s ms -->',
- intval( $this->last_query_info['elapsed_time'] ),
- esc_html( $this->last_query_info['es_time'] )
- );
-
- if ( isset( $_GET['searchdebug'] ) ) {
- printf(
- '<!-- Query response data: %s -->',
- esc_html( print_r( $this->last_query_info, 1 ) )
- );
- }
- }
- }
-
- /**
- * Returns the last query information, or false if no information was stored.
- *
- * @since 5.8.0
- *
- * @return bool|array
- */
- public function get_last_query_info() {
- return empty( $this->last_query_info ) ? false : $this->last_query_info;
- }
-
- /**
- * Returns the last query failure information, or false if no failure information was stored.
- *
- * @since 5.8.0
- *
- * @return bool|array
- */
- public function get_last_query_failure_info() {
- return empty( $this->last_query_failure_info ) ? false : $this->last_query_failure_info;
- }
-
- /**
- * Wraps a WordPress filter called "jetpack_search_disable_widget_filters" that allows
- * developers to disable filters supplied by the search widget. Useful if filters are
- * being defined at the code level.
- *
- * @since 5.7.0
- * @deprecated 5.8.0 Use Jetpack_Search_Helpers::are_filters_by_widget_disabled() directly.
- *
- * @return bool
- */
- public function are_filters_by_widget_disabled() {
- return Jetpack_Search_Helpers::are_filters_by_widget_disabled();
- }
-
- /**
- * Retrieves a list of known Jetpack search filters widget IDs, gets the filters for each widget,
- * and applies those filters to this Jetpack_Search object.
- *
- * @since 5.7.0
- */
- public function set_filters_from_widgets() {
- if ( Jetpack_Search_Helpers::are_filters_by_widget_disabled() ) {
- return;
- }
-
- $filters = Jetpack_Search_Helpers::get_filters_from_widgets();
-
- if ( ! empty( $filters ) ) {
- $this->set_filters( $filters );
- }
- }
-
- /**
- * Restricts search results to certain post types via a GET argument.
- *
- * @since 5.8.0
- *
- * @param WP_Query $query A WP_Query instance.
- */
- public function maybe_add_post_type_as_var( WP_Query $query ) {
- if ( $this->should_handle_query( $query ) && ! empty( $_GET['post_type'] ) ) {
- $post_types = ( is_string( $_GET['post_type'] ) && false !== strpos( $_GET['post_type'], ',' ) )
- ? $post_type = explode( ',', $_GET['post_type'] )
- : (array) $_GET['post_type'];
- $post_types = array_map( 'sanitize_key', $post_types );
- $query->set( 'post_type', $post_types );
- }
- }
-
- /*
- * Run a search on the WordPress.com public API.
- *
- * @since 5.0.0
- *
- * @param array $es_args Args conforming to the WP.com /sites/<blog_id>/search endpoint.
- *
- * @return object|WP_Error The response from the public API, or a WP_Error.
- */
- public function search( array $es_args ) {
- $endpoint = sprintf( '/sites/%s/search', $this->jetpack_blog_id );
- $service_url = 'https://public-api.wordpress.com/rest/v1' . $endpoint;
-
- $do_authenticated_request = false;
-
- if ( class_exists( 'Jetpack_Client' ) &&
- isset( $es_args['authenticated_request'] ) &&
- true === $es_args['authenticated_request'] ) {
- $do_authenticated_request = true;
- }
-
- unset( $es_args['authenticated_request'] );
-
- $request_args = array(
- 'headers' => array(
- 'Content-Type' => 'application/json',
- ),
- 'timeout' => 10,
- 'user-agent' => 'jetpack_search',
- );
-
- $request_body = wp_json_encode( $es_args );
-
- $start_time = microtime( true );
-
- if ( $do_authenticated_request ) {
- $request_args['method'] = 'POST';
-
- $request = Jetpack_Client::wpcom_json_api_request_as_blog( $endpoint, Jetpack_Client::WPCOM_JSON_API_VERSION, $request_args, $request_body );
- } else {
- $request_args = array_merge( $request_args, array(
- 'body' => $request_body,
- ) );
-
- $request = wp_remote_post( $service_url, $request_args );
- }
-
- $end_time = microtime( true );
-
- if ( is_wp_error( $request ) ) {
- return $request;
- }
-
- $response_code = wp_remote_retrieve_response_code( $request );
-
- $response = json_decode( wp_remote_retrieve_body( $request ), true );
-
- $took = is_array( $response ) && ! empty( $response['took'] )
- ? $response['took']
- : null;
-
- $query = array(
- 'args' => $es_args,
- 'response' => $response,
- 'response_code' => $response_code,
- 'elapsed_time' => ( $end_time - $start_time ) * 1000, // Convert from float seconds to ms.
- 'es_time' => $took,
- 'url' => $service_url,
- );
-
- /**
- * Fires after a search request has been performed.
- *
- * Includes the following info in the $query parameter:
- *
- * array args Array of Elasticsearch arguments for the search
- * array response Raw API response, JSON decoded
- * int response_code HTTP response code of the request
- * float elapsed_time Roundtrip time of the search request, in milliseconds
- * float es_time Amount of time Elasticsearch spent running the request, in milliseconds
- * string url API url that was queried
- *
- * @module search
- *
- * @since 5.0.0
- * @since 5.8.0 This action now fires on all queries instead of just successful queries.
- *
- * @param array $query Array of information about the query performed
- */
- do_action( 'did_jetpack_search_query', $query );
-
- if ( ! $response_code || $response_code < 200 || $response_code >= 300 ) {
- /**
- * Fires after a search query request has failed
- *
- * @module search
- *
- * @since 5.6.0
- *
- * @param array Array containing the response code and response from the failed search query
- */
- do_action( 'failed_jetpack_search_query', array(
- 'response_code' => $response_code,
- 'json' => $response,
- ) );
-
- return new WP_Error( 'invalid_search_api_response', 'Invalid response from API - ' . $response_code );
- }
-
- return $response;
- }
-
- /**
- * Bypass the normal Search query and offload it to Jetpack servers.
- *
- * This is the main hook of the plugin and is responsible for returning the posts that match the search query.
- *
- * @since 5.0.0
- *
- * @param array $posts Current array of posts (still pre-query).
- * @param WP_Query $query The WP_Query being filtered.
- *
- * @return array Array of matching posts.
- */
- public function filter__posts_pre_query( $posts, $query ) {
- if ( ! $this->should_handle_query( $query ) ) {
- return $posts;
- }
-
- $this->do_search( $query );
-
- if ( ! is_array( $this->search_result ) ) {
- return $posts;
- }
-
- // If no results, nothing to do
- if ( ! count( $this->search_result['results']['hits'] ) ) {
- return array();
- }
-
- $post_ids = array();
-
- foreach ( $this->search_result['results']['hits'] as $result ) {
- $post_ids[] = (int) $result['fields']['post_id'];
- }
-
- // Query all posts now
- $args = array(
- 'post__in' => $post_ids,
- 'orderby' => 'post__in',
- 'perm' => 'readable',
- 'post_type' => 'any',
- 'ignore_sticky_posts' => true,
- 'suppress_filters' => true,
- );
-
- $posts_query = new WP_Query( $args );
-
- // WP Core doesn't call the set_found_posts and its filters when filtering posts_pre_query like we do, so need to do these manually.
- $query->found_posts = $this->found_posts;
- $query->max_num_pages = ceil( $this->found_posts / $query->get( 'posts_per_page' ) );
-
- return $posts_query->posts;
- }
-
- /**
- * Build up the search, then run it against the Jetpack servers.
- *
- * @since 5.0.0
- *
- * @param WP_Query $query The original WP_Query to use for the parameters of our search.
- */
- public function do_search( WP_Query $query ) {
- if ( ! $this->should_handle_query( $query ) ) {
- return;
- }
-
- $page = ( $query->get( 'paged' ) ) ? absint( $query->get( 'paged' ) ) : 1;
-
- // Get maximum allowed offset and posts per page values for the API.
- $max_offset = Jetpack_Search_Helpers::get_max_offset();
- $max_posts_per_page = Jetpack_Search_Helpers::get_max_posts_per_page();
-
- $posts_per_page = $query->get( 'posts_per_page' );
- if ( $posts_per_page > $max_posts_per_page ) {
- $posts_per_page = $max_posts_per_page;
- }
-
- // Start building the WP-style search query args.
- // They'll be translated to ES format args later.
- $es_wp_query_args = array(
- 'query' => $query->get( 's' ),
- 'posts_per_page' => $posts_per_page,
- 'paged' => $page,
- 'orderby' => $query->get( 'orderby' ),
- 'order' => $query->get( 'order' ),
- );
-
- if ( ! empty( $this->aggregations ) ) {
- $es_wp_query_args['aggregations'] = $this->aggregations;
- }
-
- // Did we query for authors?
- if ( $query->get( 'author_name' ) ) {
- $es_wp_query_args['author_name'] = $query->get( 'author_name' );
- }
-
- $es_wp_query_args['post_type'] = $this->get_es_wp_query_post_type_for_query( $query );
- $es_wp_query_args['terms'] = $this->get_es_wp_query_terms_for_query( $query );
-
- /**
- * Modify the search query parameters, such as controlling the post_type.
- *
- * These arguments are in the format of WP_Query arguments
- *
- * @module search
- *
- * @since 5.0.0
- *
- * @param array $es_wp_query_args The current query args, in WP_Query format.
- * @param WP_Query $query The original WP_Query object.
- */
- $es_wp_query_args = apply_filters( 'jetpack_search_es_wp_query_args', $es_wp_query_args, $query );
-
- // If page * posts_per_page is greater than our max offset, send a 404. This is necessary because the offset is
- // capped at Jetpack_Search_Helpers::get_max_offset(), so a high page would always return the last page of results otherwise.
- if ( ( $es_wp_query_args['paged'] * $es_wp_query_args['posts_per_page'] ) > $max_offset ) {
- $query->set_404();
-
- return;
- }
-
- // If there were no post types returned, then 404 to avoid querying against non-public post types, which could
- // happen if we don't add the post type restriction to the ES query.
- if ( empty( $es_wp_query_args['post_type'] ) ) {
- $query->set_404();
-
- return;
- }
-
- // Convert the WP-style args into ES args.
- $es_query_args = $this->convert_wp_es_to_es_args( $es_wp_query_args );
-
- //Only trust ES to give us IDs, not the content since it is a mirror
- $es_query_args['fields'] = array(
- 'post_id',
- );
-
- /**
- * Modify the underlying ES query that is passed to the search endpoint. The returned args must represent a valid ES query
- *
- * This filter is harder to use if you're unfamiliar with ES, but allows complete control over the query
- *
- * @module search
- *
- * @since 5.0.0
- *
- * @param array $es_query_args The raw Elasticsearch query args.
- * @param WP_Query $query The original WP_Query object.
- */
- $es_query_args = apply_filters( 'jetpack_search_es_query_args', $es_query_args, $query );
-
- // Do the actual search query!
- $this->search_result = $this->search( $es_query_args );
-
- if ( is_wp_error( $this->search_result ) || ! is_array( $this->search_result ) || empty( $this->search_result['results'] ) || empty( $this->search_result['results']['hits'] ) ) {
- $this->found_posts = 0;
-
- return;
- }
-
- // If we have aggregations, fix the ordering to match the input order (ES doesn't guarantee the return order).
- if ( isset( $this->search_result['results']['aggregations'] ) && ! empty( $this->search_result['results']['aggregations'] ) ) {
- $this->search_result['results']['aggregations'] = $this->fix_aggregation_ordering( $this->search_result['results']['aggregations'], $this->aggregations );
- }
-
- // Total number of results for paging purposes. Capped at $max_offset + $posts_per_page, as deep paging gets quite expensive.
- $this->found_posts = min( $this->search_result['results']['total'], $max_offset + $posts_per_page );
- }
-
- /**
- * If the query has already been run before filters have been updated, then we need to re-run the query
- * to get the latest aggregations.
- *
- * This is especially useful for supporting widget management in the customizer.
- *
- * @since 5.8.0
- *
- * @return bool Whether the query was successful or not.
- */
- public function update_search_results_aggregations() {
- if ( empty( $this->last_query_info ) || empty( $this->last_query_info['args'] ) ) {
- return false;
- }
-
- $es_args = $this->last_query_info['args'];
- $builder = new Jetpack_WPES_Query_Builder();
- $this->add_aggregations_to_es_query_builder( $this->aggregations, $builder );
- $es_args['aggregations'] = $builder->build_aggregation();
-
- $this->search_result = $this->search( $es_args );
-
- return ! is_wp_error( $this->search_result );
- }
-
- /**
- * Given a WP_Query, convert its WP_Tax_Query (if present) into the WP-style Elasticsearch term arguments for the search.
- *
- * @since 5.0.0
- *
- * @param WP_Query $query The original WP_Query object for which to parse the taxonomy query.
- *
- * @return array The new WP-style Elasticsearch arguments (that will be converted into 'real' Elasticsearch arguments).
- */
- public function get_es_wp_query_terms_for_query( WP_Query $query ) {
- $args = array();
-
- $the_tax_query = $query->tax_query;
-
- if ( ! $the_tax_query ) {
- return $args;
- }
-
-
- if ( ! $the_tax_query instanceof WP_Tax_Query || empty( $the_tax_query->queried_terms ) || ! is_array( $the_tax_query->queried_terms ) ) {
- return $args;
- }
-
- $args = array();
-
- foreach ( $the_tax_query->queries as $tax_query ) {
- // Right now we only support slugs...see note above
- if ( ! is_array( $tax_query ) || 'slug' !== $tax_query['field'] ) {
- continue;
- }
-
- $taxonomy = $tax_query['taxonomy'];
-
- if ( ! isset( $args[ $taxonomy ] ) || ! is_array( $args[ $taxonomy ] ) ) {
- $args[ $taxonomy ] = array();
- }
-
- $args[ $taxonomy ] = array_merge( $args[ $taxonomy ], $tax_query['terms'] );
- }
-
- return $args;
- }
-
- /**
- * Parse out the post type from a WP_Query.
- *
- * Only allows post types that are not marked as 'exclude_from_search'.
- *
- * @since 5.0.0
- *
- * @param WP_Query $query Original WP_Query object.
- *
- * @return array Array of searchable post types corresponding to the original query.
- */
- public function get_es_wp_query_post_type_for_query( WP_Query $query ) {
- $post_types = $query->get( 'post_type' );
-
- // If we're searching 'any', we want to only pass searchable post types to Elasticsearch.
- if ( 'any' === $post_types ) {
- $post_types = array_values( get_post_types( array(
- 'exclude_from_search' => false,
- ) ) );
- }
-
- if ( ! is_array( $post_types ) ) {
- $post_types = array( $post_types );
- }
-
- $post_types = array_unique( $post_types );
-
- $sanitized_post_types = array();
-
- // Make sure the post types are queryable.
- foreach ( $post_types as $post_type ) {
- if ( ! $post_type ) {
- continue;
- }
-
- $post_type_object = get_post_type_object( $post_type );
- if ( ! $post_type_object || $post_type_object->exclude_from_search ) {
- continue;
- }
-
- $sanitized_post_types[] = $post_type;
- }
-
- return $sanitized_post_types;
- }
-
- /**
- * Get the Elasticsearch result.
- *
- * @since 5.0.0
- *
- * @param bool $raw If true, does not check for WP_Error or return the 'results' array - the JSON decoded HTTP response.
- *
- * @return array|bool The search results, or false if there was a failure.
- */
- public function get_search_result( $raw = false ) {
- if ( $raw ) {
- return $this->search_result;
- }
-
- return ( ! empty( $this->search_result ) && ! is_wp_error( $this->search_result ) && is_array( $this->search_result ) && ! empty( $this->search_result['results'] ) ) ? $this->search_result['results'] : false;
- }
-
- /**
- * Add the date portion of a WP_Query onto the query args.
- *
- * @since 5.0.0
- *
- * @param array $es_wp_query_args The Elasticsearch query arguments in WordPress form.
- * @param WP_Query $query The original WP_Query.
- *
- * @return array The es wp query args, with date filters added (as needed).
- */
- public function filter__add_date_filter_to_query( array $es_wp_query_args, WP_Query $query ) {
- if ( $query->get( 'year' ) ) {
- if ( $query->get( 'monthnum' ) ) {
- // Padding
- $date_monthnum = sprintf( '%02d', $query->get( 'monthnum' ) );
-
- if ( $query->get( 'day' ) ) {
- // Padding
- $date_day = sprintf( '%02d', $query->get( 'day' ) );
-
- $date_start = $query->get( 'year' ) . '-' . $date_monthnum . '-' . $date_day . ' 00:00:00';
- $date_end = $query->get( 'year' ) . '-' . $date_monthnum . '-' . $date_day . ' 23:59:59';
- } else {
- $days_in_month = date( 't', mktime( 0, 0, 0, $query->get( 'monthnum' ), 14, $query->get( 'year' ) ) ); // 14 = middle of the month so no chance of DST issues
-
- $date_start = $query->get( 'year' ) . '-' . $date_monthnum . '-01 00:00:00';
- $date_end = $query->get( 'year' ) . '-' . $date_monthnum . '-' . $days_in_month . ' 23:59:59';
- }
- } else {
- $date_start = $query->get( 'year' ) . '-01-01 00:00:00';
- $date_end = $query->get( 'year' ) . '-12-31 23:59:59';
- }
-
- $es_wp_query_args['date_range'] = array(
- 'field' => 'date',
- 'gte' => $date_start,
- 'lte' => $date_end,
- );
- }
-
- return $es_wp_query_args;
- }
-
- /**
- * Converts WP_Query style args to Elasticsearch args.
- *
- * @since 5.0.0
- *
- * @param array $args Array of WP_Query style arguments.
- *
- * @return array Array of ES style query arguments.
- */
- public function convert_wp_es_to_es_args( array $args ) {
- jetpack_require_lib( 'jetpack-wpes-query-builder/jetpack-wpes-query-parser' );
-
- $defaults = array(
- 'blog_id' => get_current_blog_id(),
- 'query' => null, // Search phrase
- 'query_fields' => array(), // list of fields to search
- 'excess_boost' => array(), // map of field to excess boost values (multiply)
- 'post_type' => null, // string or an array
- 'terms' => array(), // ex: array( 'taxonomy-1' => array( 'slug' ), 'taxonomy-2' => array( 'slug-a', 'slug-b' ) )
- 'author' => null, // id or an array of ids
- 'author_name' => array(), // string or an array
- 'date_range' => null, // array( 'field' => 'date', 'gt' => 'YYYY-MM-dd', 'lte' => 'YYYY-MM-dd' ); date formats: 'YYYY-MM-dd' or 'YYYY-MM-dd HH:MM:SS'
- 'orderby' => null, // Defaults to 'relevance' if query is set, otherwise 'date'. Pass an array for multiple orders.
- 'order' => 'DESC',
- 'posts_per_page' => 10,
- 'offset' => null,
- 'paged' => null,
- /**
- * Aggregations. Examples:
- * array(
- * 'Tag' => array( 'type' => 'taxonomy', 'taxonomy' => 'post_tag', 'count' => 10 ) ),
- * 'Post Type' => array( 'type' => 'post_type', 'count' => 10 ) ),
- * );
- */
- 'aggregations' => null,
- );
-
- $args = wp_parse_args( $args, $defaults );
-
- $parser = new Jetpack_WPES_Search_Query_Parser( $args['query'], array( get_locale() ) );
-
- if ( empty( $args['query_fields'] ) ) {
- if ( defined( 'JETPACK_SEARCH_VIP_INDEX' ) && JETPACK_SEARCH_VIP_INDEX ) {
- // VIP indices do not have per language fields
- $match_fields = $this->_get_caret_boosted_fields(
- array(
- 'title' => 0.1,
- 'content' => 0.1,
- 'excerpt' => 0.1,
- 'tag.name' => 0.1,
- 'category.name' => 0.1,
- 'author_login' => 0.1,
- 'author' => 0.1,
- )
- );
-
- $boost_fields = $this->_get_caret_boosted_fields(
- $this->_apply_boosts_multiplier( array(
- 'title' => 2,
- 'tag.name' => 1,
- 'category.name' => 1,
- 'author_login' => 1,
- 'author' => 1,
- ), $args['excess_boost'] )
- );
-
- $boost_phrase_fields = $this->_get_caret_boosted_fields(
- array(
- 'title' => 1,
- 'content' => 1,
- 'excerpt' => 1,
- 'tag.name' => 1,
- 'category.name' => 1,
- 'author' => 1,
- )
- );
- } else {
- $match_fields = $parser->merge_ml_fields(
- array(
- 'title' => 0.1,
- 'content' => 0.1,
- 'excerpt' => 0.1,
- 'tag.name' => 0.1,
- 'category.name' => 0.1,
- ),
- $this->_get_caret_boosted_fields( array(
- 'author_login' => 0.1,
- 'author' => 0.1,
- ) )
- );
-
- $boost_fields = $parser->merge_ml_fields(
- $this->_apply_boosts_multiplier( array(
- 'title' => 2,
- 'tag.name' => 1,
- 'category.name' => 1,
- ), $args['excess_boost'] ),
- $this->_get_caret_boosted_fields( $this->_apply_boosts_multiplier( array(
- 'author_login' => 1,
- 'author' => 1,
- ), $args['excess_boost'] ) )
- );
-
- $boost_phrase_fields = $parser->merge_ml_fields(
- array(
- 'title' => 1,
- 'content' => 1,
- 'excerpt' => 1,
- 'tag.name' => 1,
- 'category.name' => 1,
- ),
- $this->_get_caret_boosted_fields( array(
- 'author' => 1,
- ) )
- );
- }
- } else {
- // If code is overriding the fields, then use that. Important for backwards compatibility.
- $match_fields = $args['query_fields'];
- $boost_phrase_fields = $match_fields;
- $boost_fields = null;
- }
-
- $parser->phrase_filter( array(
- 'must_query_fields' => $match_fields,
- 'boost_query_fields' => null,
- ) );
- $parser->remaining_query( array(
- 'must_query_fields' => $match_fields,
- 'boost_query_fields' => $boost_fields,
- ) );
-
- // Boost on phrase matches
- $parser->remaining_query( array(
- 'boost_query_fields' => $boost_phrase_fields,
- 'boost_query_type' => 'phrase',
- ) );
-
- /**
- * Modify the recency decay parameters for the search query.
- *
- * The recency decay lowers the search scores based on the age of a post relative to an origin date. Basic adjustments:
- * - origin: A date. Posts with this date will have the highest score and no decay applied. Default is today.
- * - offset: Number of days/months/years (eg 30d). All posts within this time range of the origin (before and after) will have no decay applied. Default is no offset.
- * - scale: The number of days/months/years from the origin+offset at which the decay will equal the decay param. Default 360d
- * - decay: The amount of decay applied at offset+scale. Default 0.9.
- *
- * The curve applied is a Gaussian. More details available at {@see https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#function-decay}
- *
- * @module search
- *
- * @since 5.8.0
- *
- * @param array $decay_params The decay parameters.
- * @param array $args The WP query parameters.
- */
- $decay_params = apply_filters(
- 'jetpack_search_recency_score_decay',
- array(
- 'origin' => date( 'Y-m-d' ),
- 'scale' => '360d',
- 'decay' => 0.9,
- ),
- $args
- );
-
- if ( ! empty( $decay_params ) ) {
- // Newer content gets weighted slightly higher
- $parser->add_decay( 'gauss', array(
- 'date_gmt' => $decay_params
- ) );
- }
-
- $es_query_args = array(
- 'blog_id' => absint( $args['blog_id'] ),
- 'size' => absint( $args['posts_per_page'] ),
- );
-
- // ES "from" arg (offset)
- if ( $args['offset'] ) {
- $es_query_args['from'] = absint( $args['offset'] );
- } elseif ( $args['paged'] ) {
- $es_query_args['from'] = max( 0, ( absint( $args['paged'] ) - 1 ) * $es_query_args['size'] );
- }
-
- $es_query_args['from'] = min( $es_query_args['from'], Jetpack_Search_Helpers::get_max_offset() );
-
- if ( ! is_array( $args['author_name'] ) ) {
- $args['author_name'] = array( $args['author_name'] );
- }
-
- // ES stores usernames, not IDs, so transform
- if ( ! empty( $args['author'] ) ) {
- if ( ! is_array( $args['author'] ) ) {
- $args['author'] = array( $args['author'] );
- }
-
- foreach ( $args['author'] as $author ) {
- $user = get_user_by( 'id', $author );
-
- if ( $user && ! empty( $user->user_login ) ) {
- $args['author_name'][] = $user->user_login;
- }
- }
- }
-
- //////////////////////////////////////////////////
- // Build the filters from the query elements.
- // Filters rock because they are cached from one query to the next
- // but they are cached as individual filters, rather than all combined together.
- // May get performance boost by also caching the top level boolean filter too.
-
- if ( $args['post_type'] ) {
- if ( ! is_array( $args['post_type'] ) ) {
- $args['post_type'] = array( $args['post_type'] );
- }
-
- $parser->add_filter( array(
- 'terms' => array(
- 'post_type' => $args['post_type'],
- ),
- ) );
- }
-
- if ( $args['author_name'] ) {
- $parser->add_filter( array(
- 'terms' => array(
- 'author_login' => $args['author_name'],
- ),
- ) );
- }
-
- if ( ! empty( $args['date_range'] ) && isset( $args['date_range']['field'] ) ) {
- $field = $args['date_range']['field'];
-
- unset( $args['date_range']['field'] );
-
- $parser->add_filter( array(
- 'range' => array(
- $field => $args['date_range'],
- ),
- ) );
- }
-
- if ( is_array( $args['terms'] ) ) {
- foreach ( $args['terms'] as $tax => $terms ) {
- $terms = (array) $terms;
-
- if ( count( $terms ) && mb_strlen( $tax ) ) {
- switch ( $tax ) {
- case 'post_tag':
- $tax_fld = 'tag.slug';
-
- break;
-
- case 'category':
- $tax_fld = 'category.slug';
-
- break;
-
- default:
- $tax_fld = 'taxonomy.' . $tax . '.slug';
-
- break;
- }
-
- foreach ( $terms as $term ) {
- $parser->add_filter( array(
- 'term' => array(
- $tax_fld => $term,
- ),
- ) );
- }
- }
- }
- }
-
- if ( ! $args['orderby'] ) {
- if ( $args['query'] ) {
- $args['orderby'] = array( 'relevance' );
- } else {
- $args['orderby'] = array( 'date' );
- }
- }
-
- // Validate the "order" field
- switch ( strtolower( $args['order'] ) ) {
- case 'asc':
- $args['order'] = 'asc';
- break;
-
- case 'desc':
- default:
- $args['order'] = 'desc';
- break;
- }
-
- $es_query_args['sort'] = array();
-
- foreach ( (array) $args['orderby'] as $orderby ) {
- // Translate orderby from WP field to ES field
- switch ( $orderby ) {
- case 'relevance' :
- //never order by score ascending
- $es_query_args['sort'][] = array(
- '_score' => array(
- 'order' => 'desc',
- ),
- );
-
- break;
-
- case 'date' :
- $es_query_args['sort'][] = array(
- 'date' => array(
- 'order' => $args['order'],
- ),
- );
-
- break;
-
- case 'ID' :
- $es_query_args['sort'][] = array(
- 'id' => array(
- 'order' => $args['order'],
- ),
- );
-
- break;
-
- case 'author' :
- $es_query_args['sort'][] = array(
- 'author.raw' => array(
- 'order' => $args['order'],
- ),
- );
-
- break;
- } // End switch().
- } // End foreach().
-
- if ( empty( $es_query_args['sort'] ) ) {
- unset( $es_query_args['sort'] );
- }
-
- // Aggregations
- if ( ! empty( $args['aggregations'] ) ) {
- $this->add_aggregations_to_es_query_builder( $args['aggregations'], $parser );
- }
-
- $es_query_args['filter'] = $parser->build_filter();
- $es_query_args['query'] = $parser->build_query();
- $es_query_args['aggregations'] = $parser->build_aggregation();
-
- return $es_query_args;
- }
-
- /**
- * Given an array of aggregations, parse and add them onto the Jetpack_WPES_Query_Builder object for use in Elasticsearch.
- *
- * @since 5.0.0
- *
- * @param array $aggregations Array of aggregations (filters) to add to the Jetpack_WPES_Query_Builder.
- * @param Jetpack_WPES_Query_Builder $builder The builder instance that is creating the Elasticsearch query.
- */
- public function add_aggregations_to_es_query_builder( array $aggregations, Jetpack_WPES_Query_Builder $builder ) {
- foreach ( $aggregations as $label => $aggregation ) {
- switch ( $aggregation['type'] ) {
- case 'taxonomy':
- $this->add_taxonomy_aggregation_to_es_query_builder( $aggregation, $label, $builder );
-
- break;
-
- case 'post_type':
- $this->add_post_type_aggregation_to_es_query_builder( $aggregation, $label, $builder );
-
- break;
-
- case 'date_histogram':
- $this->add_date_histogram_aggregation_to_es_query_builder( $aggregation, $label, $builder );
-
- break;
- }
- }
- }
-
- /**
- * Given an individual taxonomy aggregation, add it to the Jetpack_WPES_Query_Builder object for use in Elasticsearch.
- *
- * @since 5.0.0
- *
- * @param array $aggregation The aggregation to add to the query builder.
- * @param string $label The 'label' (unique id) for this aggregation.
- * @param Jetpack_WPES_Query_Builder $builder The builder instance that is creating the Elasticsearch query.
- */
- public function add_taxonomy_aggregation_to_es_query_builder( array $aggregation, $label, Jetpack_WPES_Query_Builder $builder ) {
- $field = null;
-
- switch ( $aggregation['taxonomy'] ) {
- case 'post_tag':
- $field = 'tag';
- break;
-
- case 'category':
- $field = 'category';
- break;
-
- default:
- $field = 'taxonomy.' . $aggregation['taxonomy'];
- break;
- }
-
- $builder->add_aggs( $label, array(
- 'terms' => array(
- 'field' => $field . '.slug',
- 'size' => min( (int) $aggregation['count'], $this->max_aggregations_count ),
- ),
- ) );
- }
-
- /**
- * Given an individual post_type aggregation, add it to the Jetpack_WPES_Query_Builder object for use in Elasticsearch.
- *
- * @since 5.0.0
- *
- * @param array $aggregation The aggregation to add to the query builder.
- * @param string $label The 'label' (unique id) for this aggregation.
- * @param Jetpack_WPES_Query_Builder $builder The builder instance that is creating the Elasticsearch query.
- */
- public function add_post_type_aggregation_to_es_query_builder( array $aggregation, $label, Jetpack_WPES_Query_Builder $builder ) {
- $builder->add_aggs( $label, array(
- 'terms' => array(
- 'field' => 'post_type',
- 'size' => min( (int) $aggregation['count'], $this->max_aggregations_count ),
- ),
- ) );
- }
-
- /**
- * Given an individual date_histogram aggregation, add it to the Jetpack_WPES_Query_Builder object for use in Elasticsearch.
- *
- * @since 5.0.0
- *
- * @param array $aggregation The aggregation to add to the query builder.
- * @param string $label The 'label' (unique id) for this aggregation.
- * @param Jetpack_WPES_Query_Builder $builder The builder instance that is creating the Elasticsearch query.
- */
- public function add_date_histogram_aggregation_to_es_query_builder( array $aggregation, $label, Jetpack_WPES_Query_Builder $builder ) {
- $args = array(
- 'interval' => $aggregation['interval'],
- 'field' => ( ! empty( $aggregation['field'] ) && 'post_date_gmt' == $aggregation['field'] ) ? 'date_gmt' : 'date',
- );
-
- if ( isset( $aggregation['min_doc_count'] ) ) {
- $args['min_doc_count'] = intval( $aggregation['min_doc_count'] );
- } else {
- $args['min_doc_count'] = 1;
- }
-
- $builder->add_aggs( $label, array(
- 'date_histogram' => $args,
- ) );
- }
-
- /**
- * And an existing filter object with a list of additional filters.
- *
- * Attempts to optimize the filters somewhat.
- *
- * @since 5.0.0
- *
- * @param array $curr_filter The existing filters to build upon.
- * @param array $filters The new filters to add.
- *
- * @return array The resulting merged filters.
- */
- public static function and_es_filters( array $curr_filter, array $filters ) {
- if ( ! is_array( $curr_filter ) || isset( $curr_filter['match_all'] ) ) {
- if ( 1 === count( $filters ) ) {
- return $filters[0];
- }
-
- return array(
- 'and' => $filters,
- );
- }
-
- return array(
- 'and' => array_merge( array( $curr_filter ), $filters ),
- );
- }
-
- /**
- * Set the available filters for the search.
- *
- * These get rendered via the Jetpack_Search_Widget() widget.
- *
- * Behind the scenes, these are implemented using Elasticsearch Aggregations.
- *
- * If you do not require counts of how many documents match each filter, please consider using regular WP Query
- * arguments instead, such as via the jetpack_search_es_wp_query_args filter
- *
- * @see https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html
- *
- * @since 5.0.0
- *
- * @param array $aggregations Array of filters (aggregations) to apply to the search
- */
- public function set_filters( array $aggregations ) {
- foreach ( (array) $aggregations as $key => $agg ) {
- if ( empty( $agg['name'] ) ) {
- $aggregations[ $key ]['name'] = $key;
- }
- }
- $this->aggregations = $aggregations;
- }
-
- /**
- * Set the search's facets (deprecated).
- *
- * @deprecated 5.0 Please use Jetpack_Search::set_filters() instead.
- *
- * @see Jetpack_Search::set_filters()
- *
- * @param array $facets Array of facets to apply to the search.
- */
- public function set_facets( array $facets ) {
- _deprecated_function( __METHOD__, 'jetpack-5.0', 'Jetpack_Search::set_filters()' );
-
- $this->set_filters( $facets );
- }
-
- /**
- * Get the raw Aggregation results from the Elasticsearch response.
- *
- * @since 5.0.0
- *
- * @see https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html
- *
- * @return array Array of Aggregations performed on the search.
- */
- public function get_search_aggregations_results() {
- $aggregations = array();
-
- $search_result = $this->get_search_result();
-
- if ( ! empty( $search_result ) && ! empty( $search_result['aggregations'] ) ) {
- $aggregations = $search_result['aggregations'];
- }
-
- return $aggregations;
- }
-
- /**
- * Get the raw Facet results from the Elasticsearch response.
- *
- * @deprecated 5.0 Please use Jetpack_Search::get_search_aggregations_results() instead.
- *
- * @see Jetpack_Search::get_search_aggregations_results()
- *
- * @return array Array of Facets performed on the search.
- */
- public function get_search_facets() {
- _deprecated_function( __METHOD__, 'jetpack-5.0', 'Jetpack_Search::get_search_aggregations_results()' );
-
- return $this->get_search_aggregations_results();
- }
-
- /**
- * Get the results of the Filters performed, including the number of matching documents.
- *
- * Returns an array of Filters (keyed by $label, as passed to Jetpack_Search::set_filters()), containing the Filter and all resulting
- * matching buckets, the url for applying/removing each bucket, etc.
- *
- * NOTE - if this is called before the search is performed, an empty array will be returned. Use the $aggregations class
- * member if you need to access the raw filters set in Jetpack_Search::set_filters().
- *
- * @since 5.0.0
- *
- * @param WP_Query $query The optional original WP_Query to use for determining which filters are active. Defaults to the main query.
- *
- * @return array Array of filters applied and info about them.
- */
- public function get_filters( WP_Query $query = null ) {
- if ( ! $query instanceof WP_Query ) {
- global $wp_query;
-
- $query = $wp_query;
- }
-
- $aggregation_data = $this->aggregations;
-
- if ( empty( $aggregation_data ) ) {
- return $aggregation_data;
- }
-
- $aggregation_results = $this->get_search_aggregations_results();
-
- if ( ! $aggregation_results ) {
- return $aggregation_data;
- }
-
- // NOTE - Looping over the _results_, not the original configured aggregations, so we get the 'real' data from ES
- foreach ( $aggregation_results as $label => $aggregation ) {
- if ( empty( $aggregation ) ) {
- continue;
- }
-
- $type = $this->aggregations[ $label ]['type'];
-
- $aggregation_data[ $label ]['buckets'] = array();
-
- $existing_term_slugs = array();
-
- $tax_query_var = null;
-
- // Figure out which terms are active in the query, for this taxonomy
- if ( 'taxonomy' === $this->aggregations[ $label ]['type'] ) {
- $tax_query_var = $this->get_taxonomy_query_var( $this->aggregations[ $label ]['taxonomy'] );
-
- if ( ! empty( $query->tax_query ) && ! empty( $query->tax_query->queries ) && is_array( $query->tax_query->queries ) ) {
- foreach ( $query->tax_query->queries as $tax_query ) {
- if ( is_array( $tax_query ) && $this->aggregations[ $label ]['taxonomy'] === $tax_query['taxonomy'] &&
- 'slug' === $tax_query['field'] &&
- is_array( $tax_query['terms'] ) ) {
- $existing_term_slugs = array_merge( $existing_term_slugs, $tax_query['terms'] );
- }
- }
- }
- }
-
- // Now take the resulting found aggregation items and generate the additional info about them, such as activation/deactivation url, name, count, etc.
- $buckets = array();
-
- if ( ! empty( $aggregation['buckets'] ) ) {
- $buckets = (array) $aggregation['buckets'];
- }
-
- if ( 'date_histogram' == $type ) {
- //re-order newest to oldest
- $buckets = array_reverse( $buckets );
- }
-
- // Some aggregation types like date_histogram don't support the max results parameter
- if ( is_int( $this->aggregations[ $label ]['count'] ) && count( $buckets ) > $this->aggregations[ $label ]['count'] ) {
- $buckets = array_slice( $buckets, 0, $this->aggregations[ $label ]['count'] );
- }
-
- foreach ( $buckets as $item ) {
- $query_vars = array();
- $active = false;
- $remove_url = null;
- $name = '';
-
- // What type was the original aggregation?
- switch ( $type ) {
- case 'taxonomy':
- $taxonomy = $this->aggregations[ $label ]['taxonomy'];
-
- $term = get_term_by( 'slug', $item['key'], $taxonomy );
-
- if ( ! $term || ! $tax_query_var ) {
- continue 2; // switch() is considered a looping structure
- }
-
- $query_vars = array(
- $tax_query_var => implode( '+', array_merge( $existing_term_slugs, array( $term->slug ) ) ),
- );
-
- $name = $term->name;
-
- // Let's determine if this term is active or not
-
- if ( in_array( $item['key'], $existing_term_slugs, true ) ) {
- $active = true;
-
- $slug_count = count( $existing_term_slugs );
-
- if ( $slug_count > 1 ) {
- $remove_url = Jetpack_Search_Helpers::add_query_arg(
- $tax_query_var,
- rawurlencode( implode( '+', array_diff( $existing_term_slugs, array( $item['key'] ) ) ) )
- );
- } else {
- $remove_url = Jetpack_Search_Helpers::remove_query_arg( $tax_query_var );
- }
- }
-
- break;
-
- case 'post_type':
- $post_type = get_post_type_object( $item['key'] );
-
- if ( ! $post_type || $post_type->exclude_from_search ) {
- continue 2; // switch() is considered a looping structure
- }
-
- $query_vars = array(
- 'post_type' => $item['key'],
- );
-
- $name = $post_type->labels->singular_name;
-
- // Is this post type active on this search?
- $post_types = $query->get( 'post_type' );
-
- if ( ! is_array( $post_types ) ) {
- $post_types = array( $post_types );
- }
-
- if ( in_array( $item['key'], $post_types ) ) {
- $active = true;
-
- $post_type_count = count( $post_types );
-
- // For the right 'remove filter' url, we need to remove the post type from the array, or remove the param entirely if it's the only one
- if ( $post_type_count > 1 ) {
- $remove_url = Jetpack_Search_Helpers::add_query_arg(
- 'post_type',
- rawurlencode( implode( ',', array_diff( $post_types, array( $item['key'] ) ) ) )
- );
- } else {
- $remove_url = Jetpack_Search_Helpers::remove_query_arg( 'post_type' );
- }
- }
-
- break;
-
- case 'date_histogram':
- $timestamp = $item['key'] / 1000;
-
- $current_year = $query->get( 'year' );
- $current_month = $query->get( 'monthnum' );
- $current_day = $query->get( 'day' );
-
- switch ( $this->aggregations[ $label ]['interval'] ) {
- case 'year':
- $year = (int) date( 'Y', $timestamp );
-
- $query_vars = array(
- 'year' => $year,
- 'monthnum' => false,
- 'day' => false,
- );
-
- $name = $year;
-
- // Is this year currently selected?
- if ( ! empty( $current_year ) && (int) $current_year === $year ) {
- $active = true;
-
- $remove_url = Jetpack_Search_Helpers::remove_query_arg( array( 'year', 'monthnum', 'day' ) );
- }
-
- break;
-
- case 'month':
- $year = (int) date( 'Y', $timestamp );
- $month = (int) date( 'n', $timestamp );
-
- $query_vars = array(
- 'year' => $year,
- 'monthnum' => $month,
- 'day' => false,
- );
-
- $name = date( 'F Y', $timestamp );
-
- // Is this month currently selected?
- if ( ! empty( $current_year ) && (int) $current_year === $year &&
- ! empty( $current_month ) && (int) $current_month === $month ) {
- $active = true;
-
- $remove_url = Jetpack_Search_Helpers::remove_query_arg( array( 'year', 'monthnum' ) );
- }
-
- break;
-
- case 'day':
- $year = (int) date( 'Y', $timestamp );
- $month = (int) date( 'n', $timestamp );
- $day = (int) date( 'j', $timestamp );
-
- $query_vars = array(
- 'year' => $year,
- 'monthnum' => $month,
- 'day' => $day,
- );
-
- $name = date( 'F jS, Y', $timestamp );
-
- // Is this day currently selected?
- if ( ! empty( $current_year ) && (int) $current_year === $year &&
- ! empty( $current_month ) && (int) $current_month === $month &&
- ! empty( $current_day ) && (int) $current_day === $day ) {
- $active = true;
-
- $remove_url = Jetpack_Search_Helpers::remove_query_arg( array( 'day' ) );
- }
-
- break;
-
- default:
- continue 3; // switch() is considered a looping structure
- } // End switch().
-
- break;
-
- default:
- //continue 2; // switch() is considered a looping structure
- } // End switch().
-
- // Need to urlencode param values since add_query_arg doesn't
- $url_params = urlencode_deep( $query_vars );
-
- $aggregation_data[ $label ]['buckets'][] = array(
- 'url' => Jetpack_Search_Helpers::add_query_arg( $url_params ),
- 'query_vars' => $query_vars,
- 'name' => $name,
- 'count' => $item['doc_count'],
- 'active' => $active,
- 'remove_url' => $remove_url,
- 'type' => $type,
- 'type_label' => $aggregation_data[ $label ]['name'],
- 'widget_id' => ! empty( $aggregation_data[ $label ]['widget_id'] ) ? $aggregation_data[ $label ]['widget_id'] : 0
- );
- } // End foreach().
- } // End foreach().
-
- /**
- * Modify the aggregation filters returned by get_filters().
- *
- * Useful if you are setting custom filters outside of the supported filters (taxonomy, post_type etc.) and
- * want to hook them up so they're returned when you call `get_filters()`.
- *
- * @module search
- *
- * @since 6.9.0
- *
- * @param array $aggregation_data The array of filters keyed on label.
- * @param WP_Query $query The WP_Query object.
- */
- return apply_filters( 'jetpack_search_get_filters', $aggregation_data, $query );
- }
-
- /**
- * Get the results of the facets performed.
- *
- * @deprecated 5.0 Please use Jetpack_Search::get_filters() instead.
- *
- * @see Jetpack_Search::get_filters()
- *
- * @return array $facets Array of facets applied and info about them.
- */
- public function get_search_facet_data() {
- _deprecated_function( __METHOD__, 'jetpack-5.0', 'Jetpack_Search::get_filters()' );
-
- return $this->get_filters();
- }
-
- /**
- * Get the filters that are currently applied to this search.
- *
- * @since 5.0.0
- *
- * @return array Array of filters that were applied.
- */
- public function get_active_filter_buckets() {
- $active_buckets = array();
-
- $filters = $this->get_filters();
-
- if ( ! is_array( $filters ) ) {
- return $active_buckets;
- }
-
- foreach ( $filters as $filter ) {
- if ( isset( $filter['buckets'] ) && is_array( $filter['buckets'] ) ) {
- foreach ( $filter['buckets'] as $item ) {
- if ( isset( $item['active'] ) && $item['active'] ) {
- $active_buckets[] = $item;
- }
- }
- }
- }
-
- return $active_buckets;
- }
-
- /**
- * Get the filters that are currently applied to this search.
- *
- * @deprecated 5.0 Please use Jetpack_Search::get_active_filter_buckets() instead.
- *
- * @see Jetpack_Search::get_active_filter_buckets()
- *
- * @return array Array of filters that were applied.
- */
- public function get_current_filters() {
- _deprecated_function( __METHOD__, 'jetpack-5.0', 'Jetpack_Search::get_active_filter_buckets()' );
-
- return $this->get_active_filter_buckets();
- }
-
- /**
- * Calculate the right query var to use for a given taxonomy.
- *
- * Allows custom code to modify the GET var that is used to represent a given taxonomy, via the jetpack_search_taxonomy_query_var filter.
- *
- * @since 5.0.0
- *
- * @param string $taxonomy_name The name of the taxonomy for which to get the query var.
- *
- * @return bool|string The query var to use for this taxonomy, or false if none found.
- */
- public function get_taxonomy_query_var( $taxonomy_name ) {
- $taxonomy = get_taxonomy( $taxonomy_name );
-
- if ( ! $taxonomy || is_wp_error( $taxonomy ) ) {
- return false;
- }
-
- /**
- * Modify the query var to use for a given taxonomy
- *
- * @module search
- *
- * @since 5.0.0
- *
- * @param string $query_var The current query_var for the taxonomy
- * @param string $taxonomy_name The taxonomy name
- */
- return apply_filters( 'jetpack_search_taxonomy_query_var', $taxonomy->query_var, $taxonomy_name );
- }
-
- /**
- * Takes an array of aggregation results, and ensures the array key ordering matches the key order in $desired
- * which is the input order.
- *
- * Necessary because ES does not always return aggregations in the same order that you pass them in,
- * and it should be possible to control the display order easily.
- *
- * @since 5.0.0
- *
- * @param array $aggregations Aggregation results to be reordered.
- * @param array $desired Array with keys representing the desired ordering.
- *
- * @return array A new array with reordered keys, matching those in $desired.
- */
- public function fix_aggregation_ordering( array $aggregations, array $desired ) {
- if ( empty( $aggregations ) || empty( $desired ) ) {
- return $aggregations;
- }
-
- $reordered = array();
-
- foreach ( array_keys( $desired ) as $agg_name ) {
- if ( isset( $aggregations[ $agg_name ] ) ) {
- $reordered[ $agg_name ] = $aggregations[ $agg_name ];
- }
- }
-
- return $reordered;
- }
-
- /**
- * Sends events to Tracks when a search filters widget is updated.
- *
- * @since 5.8.0
- *
- * @param string $option The option name. Only "widget_jetpack-search-filters" is cared about.
- * @param array $old_value The old option value.
- * @param array $new_value The new option value.
- */
- public function track_widget_updates( $option, $old_value, $new_value ) {
- if ( 'widget_jetpack-search-filters' !== $option ) {
- return;
- }
-
- $event = Jetpack_Search_Helpers::get_widget_tracks_value( $old_value, $new_value );
- if ( ! $event ) {
- return;
- }
-
- jetpack_tracks_record_event(
- wp_get_current_user(),
- sprintf( 'jetpack_search_widget_%s', $event['action'] ),
- $event['widget']
- );
- }
-
- /**
- * Moves any active search widgets to the inactive category.
- *
- * @since 5.9.0
- *
- * @param string $module Unused. The Jetpack module being disabled.
- */
- public function move_search_widgets_to_inactive( $module ) {
- if ( ! is_active_widget( false, false, Jetpack_Search_Helpers::FILTER_WIDGET_BASE, true ) ) {
- return;
- }
-
- $sidebars_widgets = wp_get_sidebars_widgets();
-
- if ( ! is_array( $sidebars_widgets ) ) {
- return;
- }
-
- $changed = false;
-
- foreach ( $sidebars_widgets as $sidebar => $widgets ) {
- if ( 'wp_inactive_widgets' === $sidebar || 'orphaned_widgets' === substr( $sidebar, 0, 16 ) ) {
- continue;
- }
-
- if ( is_array( $widgets ) ) {
- foreach ( $widgets as $key => $widget ) {
- if ( _get_widget_id_base( $widget ) == Jetpack_Search_Helpers::FILTER_WIDGET_BASE ) {
- $changed = true;
-
- array_unshift( $sidebars_widgets['wp_inactive_widgets'], $widget );
- unset( $sidebars_widgets[ $sidebar ][ $key ] );
- }
- }
- }
- }
-
- if ( $changed ) {
- wp_set_sidebars_widgets( $sidebars_widgets );
- }
- }
-
- /**
- * Determine whether a given WP_Query should be handled by ElasticSearch.
- *
- * @param WP_Query $query The WP_Query object.
- *
- * @return bool
- */
- public function should_handle_query( $query ) {
- /**
- * Determine whether a given WP_Query should be handled by ElasticSearch.
- *
- * @module search
- *
- * @since 5.6.0
- *
- * @param bool $should_handle Should be handled by Jetpack Search.
- * @param WP_Query $query The WP_Query object.
- */
- return apply_filters( 'jetpack_search_should_handle_query', $query->is_main_query() && $query->is_search(), $query );
- }
-
- /**
- * Transforms an array with fields name as keys and boosts as value into
- * shorthand "caret" format.
- *
- * @param array $fields_boost [ "title" => "2", "content" => "1" ]
- *
- * @return array [ "title^2", "content^1" ]
- */
- private function _get_caret_boosted_fields( array $fields_boost ) {
- $caret_boosted_fields = array();
- foreach ( $fields_boost as $field => $boost ) {
- $caret_boosted_fields[] = "$field^$boost";
- }
- return $caret_boosted_fields;
- }
-
- /**
- * Apply a multiplier to boost values.
- *
- * @param array $fields_boost [ "title" => 2, "content" => 1 ]
- * @param array $fields_boost_multiplier [ "title" => 0.1234 ]
- *
- * @return array [ "title" => "0.247", "content" => "1.000" ]
- */
- private function _apply_boosts_multiplier( array $fields_boost, array $fields_boost_multiplier ) {
- foreach( $fields_boost as $field_name => $field_boost ) {
- if ( isset( $fields_boost_multiplier[ $field_name ] ) ) {
- $fields_boost[ $field_name ] *= $fields_boost_multiplier[ $field_name ];
- }
-
- // Set a floor and format the number as string
- $fields_boost[ $field_name ] = number_format(
- max( 0.001, $fields_boost[ $field_name ] ),
- 3, '.', ''
- );
- }
-
- return $fields_boost;
- }
-}
diff --git a/plugins/jetpack/modules/seo-tools.php b/plugins/jetpack/modules/seo-tools.php
deleted file mode 100644
index f926c5c4..00000000
--- a/plugins/jetpack/modules/seo-tools.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-/**
- * Module Name: SEO Tools
- * Module Description: Better results on search engines and social media.
- * Sort Order: 35
- * Recommendation Order: 15
- * First Introduced: 4.4
- * Requires Connection: Yes
- * Auto Activate: No
- * Module Tags: Social, Appearance
- * Feature: Traffic
- * Additional Search Queries: search engine optimization, social preview, meta description, custom title format
- * Plans: business, premium
- */
-
-include dirname( __FILE__ ) . '/seo-tools/jetpack-seo.php';
-include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
-
-// Suppress SEO Tools output if any of the following plugins is active.
-$jetpack_seo_conflicting_plugins = array(
- 'wordpress-seo/wp-seo.php',
- 'wordpress-seo-premium/wp-seo-premium.php',
- 'all-in-one-seo-pack/all_in_one_seo_pack.php',
- 'all-in-one-seo-pack-pro/all_in_one_seo_pack.php',
- 'autodescription/autodescription.php',
-);
-
-foreach( $jetpack_seo_conflicting_plugins as $seo_plugin ) {
- if ( Jetpack::is_plugin_active( $seo_plugin ) ) {
- // Disable all custom meta tags that SEO tools manages.
- add_filter( 'jetpack_disable_seo_tools', '__return_true' );
-
- // Also disable default meta tags.
- add_filter( 'jetpack_seo_meta_tags_enabled', '__return_false' );
- break;
- }
-}
-
-new Jetpack_SEO;
diff --git a/plugins/jetpack/modules/seo-tools/jetpack-seo-posts.php b/plugins/jetpack/modules/seo-tools/jetpack-seo-posts.php
deleted file mode 100644
index 677f6c8b..00000000
--- a/plugins/jetpack/modules/seo-tools/jetpack-seo-posts.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-/**
- * Class containing utility static methods for managing SEO custom descriptions for Posts and Pages.
- */
-class Jetpack_SEO_Posts {
- /**
- * Key of the post meta value that will be used to store post custom description.
- */
- const DESCRIPTION_META_KEY = 'advanced_seo_description';
-
- /**
- * Build meta description for post SEO.
- *
- * @param WP_Post $post Source of data for custom description.
- *
- * @return string Post description or empty string.
- */
- public static function get_post_description( $post ) {
- if ( empty( $post ) ) {
- return '';
- }
-
- if ( post_password_required() || ! is_singular() ) {
- return '';
- }
-
- // Business users can overwrite the description
- $custom_description = self::get_post_custom_description( $post );
-
- if ( ! empty( $custom_description ) ) {
- return $custom_description;
- }
-
- if ( ! empty( $post->post_excerpt ) ) {
- return $post->post_excerpt;
- }
-
- return $post->post_content;
- }
-
- /**
- * Returns post's custom meta description if it is set, and if
- * SEO tools are enabled for current blog.
- *
- * @param WP_Post $post Source of data for custom description
- *
- * @return string Custom description or empty string
- */
- public static function get_post_custom_description( $post ) {
- if ( empty( $post ) ) {
- return '';
- }
-
- $custom_description = get_post_meta( $post->ID, self::DESCRIPTION_META_KEY, true );
-
- if ( empty( $custom_description ) || ! Jetpack_SEO_Utils::is_enabled_jetpack_seo() ) {
- return '';
- }
-
- return $custom_description;
- }
-}
diff --git a/plugins/jetpack/modules/seo-tools/jetpack-seo-titles.php b/plugins/jetpack/modules/seo-tools/jetpack-seo-titles.php
deleted file mode 100644
index a1bac401..00000000
--- a/plugins/jetpack/modules/seo-tools/jetpack-seo-titles.php
+++ /dev/null
@@ -1,301 +0,0 @@
-<?php
-
-/*
- * Each title format is an array of arrays containing two values:
- * - type
- * - value
- *
- * Possible values for type are: 'token' and 'string'.
- * Possible values for 'value' are: any string in case that 'type' is set
- * to 'string', or allowed token values for page type in case that 'type'
- * is set to 'token'.
- *
- * Examples of valid formats:
- *
- * [
- * 'front_page' => [
- * [ 'type' => 'string', 'value' => 'Front page title and site name:'],
- * [ 'type' => 'token', 'value' => 'site_name']
- * ],
- * 'posts' => [
- * [ 'type' => 'token', 'value' => 'site_name' ],
- * [ 'type' => 'string', 'value' => ' | ' ],
- * [ 'type' => 'token', 'value' => 'post_title' ]
- * ],
- * 'pages' => [],
- * 'groups' => [],
- * 'archives' => []
- * ]
- * Custom title for given page type is created by concatenating all of the array 'value' parts.
- * Tokens are replaced with their corresponding values for current site.
- * Empty array signals that we are not overriding the default title for particular page type.
- */
-
-/**
- * Class containing utility static methods for managing SEO custom title formats.
- */
-class Jetpack_SEO_Titles {
- /**
- * Site option name used to store custom title formats.
- */
- const TITLE_FORMATS_OPTION = 'advanced_seo_title_formats';
-
- /**
- * Retrieves custom title formats from site option.
- *
- * @return array Array of custom title formats, or empty array.
- */
- public static function get_custom_title_formats() {
- if( Jetpack_SEO_Utils::is_enabled_jetpack_seo() ) {
- return get_option( self::TITLE_FORMATS_OPTION, array() );
- }
-
- return array();
- }
-
- /**
- * Returns tokens that are currently supported for each page type.
- *
- * @return array Array of allowed token strings.
- */
- public static function get_allowed_tokens() {
- return array(
- 'front_page' => array( 'site_name', 'tagline' ),
- 'posts' => array( 'site_name', 'tagline', 'post_title' ),
- 'pages' => array( 'site_name', 'tagline', 'page_title' ),
- 'groups' => array( 'site_name', 'tagline', 'group_title' ),
- 'archives' => array( 'site_name', 'tagline', 'date' ),
- );
- }
-
- /**
- * Used to modify the default title with custom SEO title.
- *
- * @param string $default_title Default title for current page.
- *
- * @return string Custom title with replaced tokens or default title.
- */
- public static function get_custom_title( $default_title = '' ) {
- // Don't filter title for unsupported themes.
- if ( self::is_conflicted_theme() ) {
- return $default_title;
- }
-
- $page_type = self::get_page_type();
-
- // Keep default title if invalid page type is supplied.
- if ( empty( $page_type ) ) {
- return $default_title;
- }
-
- $title_formats = self::get_custom_title_formats();
-
- // Keep default title if user has not defined custom title for this page type.
- if ( empty( $title_formats[ $page_type ] ) ) {
- return $default_title;
- }
-
- if ( ! Jetpack_SEO_Utils::is_enabled_jetpack_seo() ) {
- return $default_title;
- }
-
- $custom_title = '';
- $format_array = $title_formats[ $page_type ];
-
- foreach ( $format_array as $item ) {
- if ( 'token' == $item['type'] ) {
- $custom_title .= self::get_token_value( $item['value'] );
- } else {
- $custom_title .= $item['value'];
- }
- }
-
- return esc_html( $custom_title );
- }
-
- /**
- * Returns string value for given token.
- *
- * @param string $token_name The token name value that should be replaced.
- *
- * @return string Token replacement for current site, or empty string for unknown token name.
- */
- public static function get_token_value( $token_name ) {
-
- switch ( $token_name ) {
- case 'site_name':
- return get_bloginfo( 'name' );
-
- case 'tagline':
- return get_bloginfo( 'description' );
-
- case 'post_title':
- case 'page_title':
- return get_the_title();
-
- case 'group_title':
- return single_tag_title( '', false );
-
- case 'date':
- return self::get_date_for_title();
-
- default:
- return '';
- }
- }
-
- /**
- * Returns page type for current page. We need this helper in order to determine what
- * user defined title format should be used for custom title.
- *
- * @return string|bool Type of current page or false if unsupported.
- */
- public static function get_page_type() {
-
- if ( is_front_page() ) {
- return 'front_page';
- }
-
- if ( is_category() || is_tag() ) {
- return 'groups';
- }
-
- if ( is_archive() && ! is_author() ) {
- return 'archives';
- }
-
- if ( is_page() ) {
- return 'pages';
- }
-
- if ( is_singular() ) {
- return 'posts';
- }
-
- return false;
- }
-
- /**
- * Returns the value that should be used as a replacement for the date token,
- * depending on the archive path specified.
- *
- * @return string Token replacement for a given date, or empty string if no date is specified.
- */
- public static function get_date_for_title() {
- // If archive year, month, and day are specified.
- if ( is_day() ) {
- return get_the_date();
- }
-
- // If archive year, and month are specified.
- if ( is_month() ) {
- return trim( single_month_title( ' ', false ) );
- }
-
- // Only archive year is specified.
- if ( is_year() ) {
- return get_query_var( 'year' );
- }
-
- return '';
- }
-
- /**
- * Checks if current theme is defining custom title that won't work nicely
- * with our custom SEO title override.
- *
- * @return bool True if current theme sets custom title, false otherwise.
- */
- public static function is_conflicted_theme() {
- /**
- * Can be used to specify a list of themes that use their own custom title format.
- *
- * If current site is using one of the themes listed as conflicting,
- * Jetpack SEO custom title formats will be disabled.
- *
- * @module seo-tools
- *
- * @since 4.4.0
- *
- * @param array List of conflicted theme names. Defaults to empty array.
- */
- $conflicted_themes = apply_filters( 'jetpack_seo_custom_title_conflicted_themes', array() );
-
- return isset( $conflicted_themes[ get_option( 'template' ) ] );
- }
-
- /**
- * Checks if a given format conforms to predefined SEO title templates.
- *
- * Every format type and token must be whitelisted.
- * @see get_allowed_tokens()
- *
- * @param array $title_formats Template of SEO title to check.
- *
- * @return bool True if the formats are valid, false otherwise.
- */
- public static function are_valid_title_formats( $title_formats ) {
- $allowed_tokens = self::get_allowed_tokens();
-
- if ( ! is_array( $title_formats ) ) {
- return false;
- }
-
- foreach ( $title_formats as $format_type => $format_array ) {
- if ( ! in_array( $format_type, array_keys( $allowed_tokens ) ) ) {
- return false;
- }
-
- if ( '' === $format_array ) {
- continue;
- }
-
- if ( ! is_array( $format_array ) ) {
- return false;
- }
-
- foreach ( $format_array as $item ) {
- if ( empty( $item['type'] ) || empty( $item['value'] ) ) {
- return false;
- }
-
- if ( 'token' == $item['type'] ) {
- if ( ! in_array( $item['value'], $allowed_tokens[ $format_type ] ) ) {
- return false;
- }
- }
- }
- }
-
- return true;
- }
-
- /**
- * Combines the previous values of title formats, stored as array in site options,
- * with the new values that are provided.
- *
- * @param array $new_formats Array containing new title formats.
- *
- * @return array $result Array of updated title formats, or empty array if no update was performed.
- */
- public static function update_title_formats( $new_formats ) {
- // Empty array signals that custom title shouldn't be used.
- $empty_formats = array(
- 'front_page' => array(),
- 'posts' => array(),
- 'pages' => array(),
- 'groups' => array(),
- 'archives' => array(),
- );
-
- $previous_formats = self::get_custom_title_formats();
-
- $result = array_merge( $empty_formats, $previous_formats, $new_formats );
-
- if ( update_option( self::TITLE_FORMATS_OPTION, $result ) ) {
- return $result;
- }
-
- return array();
- }
-}
diff --git a/plugins/jetpack/modules/seo-tools/jetpack-seo-utils.php b/plugins/jetpack/modules/seo-tools/jetpack-seo-utils.php
deleted file mode 100644
index b7e4362a..00000000
--- a/plugins/jetpack/modules/seo-tools/jetpack-seo-utils.php
+++ /dev/null
@@ -1,126 +0,0 @@
-<?php
-
-/**
- * Class containing utility static methods that other SEO tools are relying on.
- */
-class Jetpack_SEO_Utils {
- /**
- * Site option name used to store front page meta description.
- */
- const FRONT_PAGE_META_OPTION = 'advanced_seo_front_page_description';
-
- /**
- * Old version of option name that was previously used under Free plan.
- */
- const GRANDFATHERED_META_OPTION = 'seo_meta_description';
-
- /**
- * Used to check whether SEO tools are enabled for given site.
- *
- * @param int $site_id Optional. Defaults to current blog id if not given.
- *
- * @return bool True if SEO tools are enabled, false otherwise.
- */
- public static function is_enabled_jetpack_seo( $site_id = 0 ) {
- /**
- * Can be used by SEO plugin authors to disable the conflicting output of SEO Tools.
- *
- * @module seo-tools
- *
- * @since 5.0.0
- *
- * @param bool True if SEO Tools should be disabled, false otherwise.
- */
- if ( apply_filters( 'jetpack_disable_seo_tools', false ) ) {
- return false;
- }
-
- if ( function_exists( 'has_any_blog_stickers' ) ) {
- // For WPCOM sites
- if ( empty( $site_id ) ) {
- $site_id = get_current_blog_id();
- }
-
- return has_any_blog_stickers( array( 'business-plan', 'ecommerce-plan' ), $site_id );
- }
-
- // For all Jetpack sites
- return true;
- }
-
- /**
- * Checks if this option was set while it was still available under free plan.
- *
- * @return bool True if we should enable grandfathering, false otherwise.
- */
- public static function has_grandfathered_front_page_meta() {
- return ! self::is_enabled_jetpack_seo() && get_option( self::GRANDFATHERED_META_OPTION );
- }
-
- /**
- * Returns front page meta description for current site.
- *
- * Since we allowed non-business users to set Front page meta description for some time,
- * before bundling it with other SEO tools features that require a business plan,
- * we are supporting grandfathering here.
- *
- * @return string Front page meta description string or empty string.
- */
- public static function get_front_page_meta_description() {
- if ( self::is_enabled_jetpack_seo() ) {
- $front_page_meta = get_option( self::FRONT_PAGE_META_OPTION );
- return $front_page_meta ? $front_page_meta : get_option( self::GRANDFATHERED_META_OPTION, '' );
- }
-
- // Support grandfathering for non-business users.
- return get_option( self::GRANDFATHERED_META_OPTION, '' );
- }
-
- /**
- * Updates the site option value for front page meta description.
- *
- * We are taking care to update the correct option, in case the value is grandfathered for current site.
- *
- * @param $value string New value for front page meta description.
- *
- * @return string Saved value, or empty string if no update was performed.
- */
- public static function update_front_page_meta_description( $value ) {
- $front_page_description = sanitize_text_field( $value );
-
- /**
- * Can be used to limit the lenght of front page meta description.
- *
- * @module seo-tools
- *
- * @since 4.4.0
- *
- * @param int Maximum length of front page meta description. Defaults to 300.
- */
- $description_max_length = apply_filters( 'jetpack_seo_front_page_description_max_length', 300 );
-
- if ( function_exists( 'mb_substr' ) ) {
- $front_page_description = mb_substr( $front_page_description, 0, $description_max_length );
- } else {
- $front_page_description = substr( $front_page_description, 0, $description_max_length );
- }
-
- $can_set_meta = self::is_enabled_jetpack_seo();
- $grandfathered_meta_option = get_option( self::GRANDFATHERED_META_OPTION );
- $has_old_meta = ! empty( $grandfathered_meta_option );
- $option_name = self::has_grandfathered_front_page_meta() ? self::GRANDFATHERED_META_OPTION : self::FRONT_PAGE_META_OPTION;
-
- $did_update = update_option( $option_name, $front_page_description );
-
- if ( $did_update && $has_old_meta && $can_set_meta ) {
- // Delete grandfathered option if user has switched to Business plan and updated meta description.
- delete_option( 'seo_meta_description' );
- }
-
- if ( $did_update ) {
- return $front_page_description;
- }
-
- return '';
- }
-}
diff --git a/plugins/jetpack/modules/seo-tools/jetpack-seo.php b/plugins/jetpack/modules/seo-tools/jetpack-seo.php
deleted file mode 100644
index d8bccd46..00000000
--- a/plugins/jetpack/modules/seo-tools/jetpack-seo.php
+++ /dev/null
@@ -1,206 +0,0 @@
-<?php
-
-/**
- * An SEO expert walks into a bar, bars, pub, public house, Irish pub, drinks, beer, wine, liquor, Grey Goose, Cristal...
- */
-class Jetpack_SEO {
- public function __construct() {
- add_action( 'init', array( $this, 'init' ) );
- }
-
- public function init() {
- /**
- * Can be used to prevent SEO tools from inserting custom meta tags.
- *
- * @module seo-tools
- *
- * @since 4.4.0
- *
- * @param bool true Should Jetpack's SEO Meta Tags be enabled. Defaults to true.
- */
- if ( apply_filters( 'jetpack_seo_meta_tags_enabled', true ) ) {
- add_action( 'wp_head', array( $this, 'meta_tags' ) );
-
- // Add support for editing page excerpts in pages, regardless of theme support.
- add_post_type_support( 'page', 'excerpt' );
- }
-
- /**
- * Can be used to prevent SEO tools form modifying site titles.
- *
- * @module seo-tools
- *
- * @since 4.4.0
- *
- * @param bool true Should Jetpack SEO modify site titles. Defaults to true.
- */
- if ( apply_filters( 'jetpack_seo_custom_titles', true ) ) {
- // Overwrite page title with custom SEO meta title for themes that support title-tag.
- add_filter( 'pre_get_document_title', array( 'Jetpack_SEO_Titles', 'get_custom_title' ) );
-
- // Add overwrite support for themes that don't support title-tag.
- add_filter( 'wp_title', array( 'Jetpack_SEO_Titles', 'get_custom_title' ) );
- }
-
- add_filter( 'jetpack_open_graph_tags', array( $this, 'set_custom_og_tags' ) );
- }
-
- private function get_authors() {
- global $wp_query;
-
- $authors = array();
-
- foreach ( $wp_query->posts as $post ) {
- $authors[] = get_the_author_meta( 'display_name', (int) $post->post_author );
- }
-
- $authors = array_unique( $authors );
-
- return $authors;
- }
-
- public function set_custom_og_tags( $tags ) {
- $custom_title = Jetpack_SEO_Titles::get_custom_title();
-
- if ( ! empty( $custom_title ) ) {
- $tags['og:title'] = $custom_title;
- }
-
- $post_custom_description = Jetpack_SEO_Posts::get_post_custom_description( get_post() );
- $front_page_meta = Jetpack_SEO_Utils::get_front_page_meta_description();
-
- if ( is_front_page() && ! empty( $front_page_meta ) ) {
- $tags['og:description'] = $front_page_meta;
- } else {
- if ( ! empty( $post_custom_description ) ) {
- $tags['og:description'] = $post_custom_description;
- }
- }
-
- return $tags;
- }
-
- public function meta_tags() {
- global $wp_query;
-
- $period = '';
- $template = '';
- $meta = array();
-
- /**
- * Can be used to specify a list of themes that set their own meta tags.
- *
- * If current site is using one of the themes listed as conflicting, inserting Jetpack SEO
- * meta tags will be prevented.
- *
- * @module seo-tools
- *
- * @since 4.4.0
- *
- * @param array List of conflicted theme names. Defaults to empty array.
- */
- $conflicted_themes = apply_filters( 'jetpack_seo_meta_tags_conflicted_themes', array() );
-
- if ( isset( $conflicted_themes[ get_option( 'template' ) ] ) ) {
- return;
- }
-
- $front_page_meta = Jetpack_SEO_Utils::get_front_page_meta_description();
- $description = $front_page_meta ? $front_page_meta : get_bloginfo( 'description' );
- $meta['description'] = trim( $description );
-
- // Try to target things if we're on a "specific" page of any kind.
- if ( is_singular() ) {
- // Business users can overwrite the description.
- if ( ! ( is_front_page() && Jetpack_SEO_Utils::get_front_page_meta_description() ) ) {
- $description = Jetpack_SEO_Posts::get_post_description( get_post() );
-
- if ( $description ) {
- $description = wp_trim_words( strip_shortcodes( wp_kses( $description, array() ) ) );
- $meta['description'] = $description;
- }
- }
-
- } elseif ( is_author() ) {
- $obj = get_queried_object();
-
- $meta['description'] = sprintf(
- _x( 'Read all of the posts by %1$s on %2$s', 'Read all of the posts by Author Name on Blog Title', 'jetpack' ),
- $obj->display_name,
- get_bloginfo( 'title' )
- );
- } elseif ( is_tag() || is_category() || is_tax() ) {
- $obj = get_queried_object();
-
- $description = get_term_field( 'description', $obj->term_id, $obj->taxonomy, 'raw' );
-
- if ( ! is_wp_error( $description ) && '' != $description ) {
- $meta['description'] = wp_trim_words( $description );
- } else {
- $authors = $this->get_authors();
-
- $meta['description'] = wp_sprintf(
- _x( 'Posts about %1$s written by %2$l', 'Posts about Category written by John and Bob', 'jetpack' ),
- single_term_title( '', false ),
- $authors
- );
- }
- } elseif ( is_date() ) {
- if ( is_year() ) {
- $period = get_query_var( 'year' );
-
- $template = _nx(
- '%1$s post published by %2$l in the year %3$s', // singular
- '%1$s posts published by %2$l in the year %3$s', // plural
- count( $wp_query->posts ), // number
- '10 posts published by John in the year 2012', // context
- 'jetpack'
- );
- } elseif ( is_month() ) {
- $period = date( 'F Y', mktime( 0, 0, 0, get_query_var( 'monthnum' ), 1, get_query_var( 'year' ) ) );
-
- $template = _nx(
- '%1$s post published by %2$l during %3$s', // singular
- '%1$s posts published by %2$l during %3$s', // plural
- count( $wp_query->posts ), // number
- '10 posts publishes by John during May 2012', // context
- 'jetpack'
- );
- } elseif ( is_day() ) {
- $period = date(
- 'F j, Y',
- mktime( 0, 0, 0, get_query_var( 'monthnum' ), get_query_var( 'day' ), get_query_var( 'year' ) )
- );
-
- $template = _nx(
- '%1$s post published by %2$l on %3$s', // singular
- '%1$s posts published by %2$l on %3$s', // plural
- count( $wp_query->posts ), // number
- '10 posts published by John on May 30, 2012', // context
- 'jetpack'
- );
- }
-
- $authors = $this->get_authors();
- $meta['description'] = wp_sprintf( $template, count( $wp_query->posts ), $authors, $period );
- }
-
- /**
- * Can be used to edit the default SEO tools meta tags.
- *
- * @module seo-tools
- *
- * @since 4.4.0
- *
- * @param array Array that consists of meta name and meta content pairs.
- */
- $meta = apply_filters( 'jetpack_seo_meta_tags', $meta );
-
- // Output them
- foreach ( $meta as $name => $content ) {
- if ( ! empty( $content ) ) {
- echo '<meta name="' . esc_attr( $name ) . '" content="' . esc_attr( $content ) . '" />' . "\n";
- }
- }
- }
-}
diff --git a/plugins/jetpack/modules/sharedaddy.php b/plugins/jetpack/modules/sharedaddy.php
deleted file mode 100644
index 1bfcc35b..00000000
--- a/plugins/jetpack/modules/sharedaddy.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-/**
- * Module Name: Sharing
- * Module Description: Add Twitter, Facebook and Google+ buttons at the bottom of each post, making it easy for visitors to share your content.
- * Sort Order: 7
- * Recommendation Order: 6
- * First Introduced: 1.1
- * Major Changes In: 1.2
- * Requires Connection: No
- * Auto Activate: Yes
- * Module Tags: Social, Recommended
- * Feature: Engagement
- * Additional Search Queries: share, sharing, sharedaddy, social buttons, buttons, share facebook, share twitter, social media sharing, social media share, social share, icons, email, facebook, twitter, linkedin, pinterest, pocket, social widget, social media
- */
-
-if ( !function_exists( 'sharing_init' ) )
- include dirname( __FILE__ ).'/sharedaddy/sharedaddy.php';
-
-add_action( 'jetpack_modules_loaded', 'sharedaddy_loaded' );
-
-function sharedaddy_loaded() {
- Jetpack::enable_module_configurable( __FILE__ );
- Jetpack::module_configuration_load( __FILE__, 'sharedaddy_configuration_load' );
-}
-
-function sharedaddy_configuration_load() {
- wp_safe_redirect( menu_page_url( 'sharing', false ) . "#sharing-buttons" );
- exit;
-}
diff --git a/plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.css b/plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.css
deleted file mode 100644
index 04d10acc..00000000
--- a/plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.css
+++ /dev/null
@@ -1,453 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-/**
- * Sharedaddy Admin Styles
- */
-
-#services-config {
- min-width: 700px;
- width: 100%;
- float: right;
-}
-
-#services-config h3 {
- font-weight: normal;
- font-size: 15px;
- margin: 0;
- padding: 8px 10px;
- overflow: hidden;
- white-space: nowrap;
- color: #464646;
-}
-
-#available-services, #enabled-services, #live-preview {
- padding: 0;
- width: 100%;
- padding-top: 20px;
- border-spacing: 0;
-}
-
-#enabled-services .ui-sortable {
- min-height: 50px;
-}
-
-#enabled-services {
- padding-bottom: 20px;
-}
-
-#available-services, #enabled-services {
- border-bottom: 2px solid #cccccc;
-}
-
-#live-preview {
- border-bottom: 1px solid #dfdfdf;
- padding-bottom: 60px;
-}
-
-#available-services h3, #enabled-services h3, #live-preview h3 {
- padding: 0px;
- margin-top: 0px;
- margin-bottom: 1em;
-}
-
-body.settings_page_sharing .description {
- width: 180px;
- vertical-align: top;
-}
-
-body.settings_page_sharing .description p {
- font-size: 13px;
- font-style: italic;
-}
-
-body.settings_page_sharing .services {
- padding: 0px 20px;
- vertical-align: top;
-}
-
-body.settings_page_sharing .services ul li {
- float: right;
- cursor: move;
-}
-
-body.settings_page_sharing .services ul li.divider {
- border: none;
- padding: 0;
- background: none;
- cursor: default;
-}
-
-body.settings_page_sharing ul.services-hidden {
- margin-bottom: 0;
-}
-
-/* Generic style */
-#available-services .service, #enabled-services .service {
- margin-left: 10px;
- padding: 5px 5px 5px 10px;
- border-radius: 3px;
- border: 1px solid #bbb;
- background: #f8f8f8;
- background-repeat: no-repeat;
- background-position: center center;
-}
-
-#available-services .service:hover, #enabled-services .service:hover {
- background: #fff;
- border: 1px solid #bbb;
- box-shadow: 0 1px 3px rgba(0,0,0,0.2);
-}
-
-#available-services .service.share-deprecated,
-#enabled-services .service.share-deprecated {
- opacity: 0.5;
- padding: 5px;
- text-decoration: line-through;
-}
-
-#available-services .service.share-deprecated {
- display: none;
-}
-
-/* Generic style icons */
-li.service span:before {
- color: #555;
- display: inline-block;
- -webkit-font-smoothing: antialiased;
- font: normal 18px/1 'social-logos';
- vertical-align: top;
- position: relative;
- top: 1px;
- margin-left: 3px;
- width: 16px;
- height: 16px;
- text-align: center;
-}
-li.service.share-print span:before {
- content: '\f469';
-}
-li.service.share-digg span:before {
- content: '\f221';
-}
-li.service.share-email span:before {
- content: '\f410';
-}
-li.service.share-linkedin span:before {
- content: '\f207';
-}
-li.service.share-twitter span:before {
- content: '\f202';
-}
-li.service.share-reddit span:before {
- content: '\f222';
-}
-li.service.share-tumblr span:before {
- content: '\f214';
-}
-li.service.share-pocket span:before {
- content: '\f224';
-}
-li.service.share-pinterest span:before {
- content: '\f209';
-}
-li.service.share-facebook span:before {
- content: '\f203';
-}
-li.service.share-press-this span:before { /* Fixme: remove this button in favor of reblog */
- content: '\f205';
-}
-li.service.share-telegram span:before {
- content: '\f606';
-}
-li.service.share-jetpack-whatsapp span:before {
- content: '\f608';
-}
-li.service.share-skype span:before {
- content: '\f220';
-}
-
-/**
- * Preview section
- */
-
-body.settings_page_sharing ul.preview {
- float: right;
- margin: 0px;
-}
-
-body.settings_page_sharing ul.preview li.preview-item, body.settings_page_sharing ul.preview li.preview-item a {
- cursor: default;
- text-decoration: none;
-}
-
-div.sd-social-icon ul.preview li.preview-item a span,
-div.sd-social-icon .inner li.preview-item a span {
- display: none;
-}
-
-div.sd-social-icon ul.preview li.preview-item.preview-custom a span {
- display: inline-block;
-
-}
-
-.services .preview li.share-custom a {
- text-decoration: none;
-}
-
-.services ul li.end-fix {
- clear:both;
- float:none;
- visibility:hidden;
- padding:0;
- margin:0;
- height:20px;
- width:0;
-}
-
-#enabled-services h2{
- font-size:20px;
- padding-top:0px;
- font-weight: normal !important;
- color: #999;
-}
-
-body.settings_page_sharing #live-preview h2 {
- font-size:20px;
- font-weight: normal !important;
- color: #e3e3e3;
-}
-
-body.settings_page_sharing .clearing {
- clear: both;
-}
-
-body.settings_page_sharing .options .options-left {
- float: right;
-}
-
-body.settings_page_sharing .input label {
- font-size: 11px;
- line-height: 16px;
-}
-
-body.settings_page_sharing .advanced-form {
- padding: 10px 10px 8px 14px;
- margin-right: -24px;
- display: none;
- border-top: 1px #e3e3e3 solid;
- margin-top:4px;
-}
-
-body.settings_page_sharing .utility {
- float: left;
- padding-top:10px;
- padding-left: 10px;
- font-size: 10px;
-}
-
-body.settings_page_sharing .advanced input[type=submit] {
- float: right;
- margin-top:10px;
- margin-left: 10px;
-}
-
-.services li.dropzone {
- border: 1px dashed #999;
- border-radius: 3px;
- background: #e3e3e3;
- margin-left: 10px;
- padding: 5px;
- height: 18px;
-}
-
-.advanced-form .form-table th {
- width: auto !important;
-}
-
-.advanced-form .button-secondary {
- margin-top: 0 !important;
-}
-
-#hidden-drop-target {
- background: #e1e1e1;
- border: 1px solid #cdcdcd;
- width: 29%;
- padding: 10px;
- vertical-align: top;
-}
-
-#hidden-drop-target p {
- font-size: 13px;
- font-style: italic;
- margin: 0 0 10px 0;
-}
-
-
-/* Official button previews */
-.preview li.preview-item {
- background-position: 0px 5px;
- cursor: default;
-}
-
-.preview .option-smart-on {
- margin: 3px 0 0 5px;
-}
-
-.preview-digg .option-smart-on {
- background: url(images/smart-digg.png) no-repeat top left;
- background-size: 76px 17px;
- width:76px;
- height:17px;
- margin-top: 2px;
-}
-
-.preview-reddit .option-smart-on {
- background: url(images/smart-reddit.png) no-repeat top left;
- background-size: 104px 21px;
- width:104px;
- height:21px;
-}
-
-.preview-facebook .option-smart-on {
- background: url(images/smart-like.png) no-repeat top left;
- background-size: 85px 20px;
- width:85px;
- height:20px;
-}
-
-.preview-twitter .option-smart-on {
- background: url(images/smart-twitter.png?1) no-repeat top left;
- background-size: 60px 20px;
- width:60px;
- height:20px;
-}
-
-.preview-linkedin .option-smart-on {
- background: url(images/linkedin-smart.png) no-repeat top center;
- background-size: 99px 18px;
- width:99px;
- height:20px;
-}
-
-.preview-tumblr .option-smart-on {
- background: url(images/smart-tumblr.png) no-repeat top left;
- background-size: 62px 20px;
- width: 62px;
- height: 20px;
-}
-
-.preview-pinterest .option-smart-on {
- background: url(images/smart-pinterest.png) no-repeat top left;
- background-size: 39px 20px;
- width: 39px;
- height: 20px;
-}
-
-.preview-pocket .option-smart-on {
- background: url(images/smart-pocket.png) no-repeat top left;
- background-size: 60px 20px;
- width: 60px;
- height: 20px;
-}
-
-.preview-skype .option-smart-on {
- background: url(images/smart-skype.png) no-repeat top left;
- background-size: 60px 20px;
- width: 60px;
- height: 20px;
-}
-
-.preview-item.share-deprecated {
- opacity: 0.5;
-}
-
-.preview-item.share-deprecated a span {
- text-decoration: line-through;
-}
-
-@media
-(-webkit-min-device-pixel-ratio: 1.25),
-(min-resolution: 120dpi) {
- .preview-digg .option-smart-on {
- background-image: url(images/smart-digg@2x.png);
- }
-
- .preview-reddit .option-smart-on {
- background-image: url(images/smart-reddit@2x.png);
- }
-
- .preview-facebook .option-smart-on {
- background-image: url(images/smart-like@2x.png);
- }
-
- .preview-twitter .option-smart-on {
- background-image: url(images/smart-twitter@2x.png?1);
- }
-
- .preview-linkedin .option-smart-on {
- background-image: url(images/linkedin-smart@2x.png);
- }
-
- .preview-tumblr .option-smart-on {
- background-image: url(images/smart-tumblr@2x.png);
- }
-
- .preview-pinterest .option-smart-on {
- background-image: url(images/smart-pinterest@2x.png);
- }
-
- .preview-pocket .option-smart-on {
- background-image: url(images/smart-pocket@2x.png);
- }
-
- .preview-skype .option-smart-on {
- background-image: url(images/smart-skype@2x.png);
- }
-}
-
-/**
- * Overflow sharing dialog
- */
-
-.services .sharing-hidden li {
- background-color: transparent;
-}
-
-.sharing-hidden li.share-end {
- clear: both;
- height: 0;
- padding: 0px !important;
- margin: 0px !important;
- width: 0;
- visibility: hidden;
- float: none;
-}
-
-.preview .sharing-label {
- font-weight: bold;
- border: 0;
- padding: 4px 0 0 6px;
-}
-
-#services-config a.remove {
- background: #ddd;
- color: #fff;
- padding: 0px 4px 2px;
- border-radius: 15px;
- -moz-border-radius: 15px;
- -webkit-border-radius: 15px;
- text-decoration: none;
- font-weight: bold;
- font-size: 10px;
-}
-
-#services-config a.remove:hover {
- background: #f00;
-}
-
-.sd-social-icon .inner a.sd-button span,
-.sd-social-icon .inner a.share-icon span {
- display: inline-block;
- overflow: hidden;
- width: 0;
- text-indent: 100%;
-}
diff --git a/plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.min.css b/plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.min.css
deleted file mode 100644
index db5c3771..00000000
--- a/plugins/jetpack/modules/sharedaddy/admin-sharing-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-#services-config{min-width:700px;width:100%;float:right}#services-config h3{font-weight:400;font-size:15px;margin:0;padding:8px 10px;overflow:hidden;white-space:nowrap;color:#464646}#available-services,#enabled-services,#live-preview{padding:0;width:100%;padding-top:20px;border-spacing:0}#enabled-services .ui-sortable{min-height:50px}#enabled-services{padding-bottom:20px}#available-services,#enabled-services{border-bottom:2px solid #ccc}#live-preview{border-bottom:1px solid #dfdfdf;padding-bottom:60px}#available-services h3,#enabled-services h3,#live-preview h3{padding:0;margin-top:0;margin-bottom:1em}body.settings_page_sharing .description{width:180px;vertical-align:top}body.settings_page_sharing .description p{font-size:13px;font-style:italic}body.settings_page_sharing .services{padding:0 20px;vertical-align:top}body.settings_page_sharing .services ul li{float:right;cursor:move}body.settings_page_sharing .services ul li.divider{border:none;padding:0;background:0 0;cursor:default}body.settings_page_sharing ul.services-hidden{margin-bottom:0}#available-services .service,#enabled-services .service{margin-left:10px;padding:5px 5px 5px 10px;border-radius:3px;border:1px solid #bbb;background:#f8f8f8;background-repeat:no-repeat;background-position:center center}#available-services .service:hover,#enabled-services .service:hover{background:#fff;border:1px solid #bbb;box-shadow:0 1px 3px rgba(0,0,0,.2)}#available-services .service.share-deprecated,#enabled-services .service.share-deprecated{opacity:.5;padding:5px;text-decoration:line-through}#available-services .service.share-deprecated{display:none}li.service span:before{color:#555;display:inline-block;-webkit-font-smoothing:antialiased;font:normal 18px/1 social-logos;vertical-align:top;position:relative;top:1px;margin-left:3px;width:16px;height:16px;text-align:center}li.service.share-print span:before{content:'\f469'}li.service.share-digg span:before{content:'\f221'}li.service.share-email span:before{content:'\f410'}li.service.share-linkedin span:before{content:'\f207'}li.service.share-twitter span:before{content:'\f202'}li.service.share-reddit span:before{content:'\f222'}li.service.share-tumblr span:before{content:'\f214'}li.service.share-pocket span:before{content:'\f224'}li.service.share-pinterest span:before{content:'\f209'}li.service.share-facebook span:before{content:'\f203'}li.service.share-press-this span:before{content:'\f205'}li.service.share-telegram span:before{content:'\f606'}li.service.share-jetpack-whatsapp span:before{content:'\f608'}li.service.share-skype span:before{content:'\f220'}body.settings_page_sharing ul.preview{float:right;margin:0}body.settings_page_sharing ul.preview li.preview-item,body.settings_page_sharing ul.preview li.preview-item a{cursor:default;text-decoration:none}div.sd-social-icon .inner li.preview-item a span,div.sd-social-icon ul.preview li.preview-item a span{display:none}div.sd-social-icon ul.preview li.preview-item.preview-custom a span{display:inline-block}.services .preview li.share-custom a{text-decoration:none}.services ul li.end-fix{clear:both;float:none;visibility:hidden;padding:0;margin:0;height:20px;width:0}#enabled-services h2{font-size:20px;padding-top:0;font-weight:400!important;color:#999}body.settings_page_sharing #live-preview h2{font-size:20px;font-weight:400!important;color:#e3e3e3}body.settings_page_sharing .clearing{clear:both}body.settings_page_sharing .options .options-left{float:right}body.settings_page_sharing .input label{font-size:11px;line-height:16px}body.settings_page_sharing .advanced-form{padding:10px 10px 8px 14px;margin-right:-24px;display:none;border-top:1px #e3e3e3 solid;margin-top:4px}body.settings_page_sharing .utility{float:left;padding-top:10px;padding-left:10px;font-size:10px}body.settings_page_sharing .advanced input[type=submit]{float:right;margin-top:10px;margin-left:10px}.services li.dropzone{border:1px dashed #999;border-radius:3px;background:#e3e3e3;margin-left:10px;padding:5px;height:18px}.advanced-form .form-table th{width:auto!important}.advanced-form .button-secondary{margin-top:0!important}#hidden-drop-target{background:#e1e1e1;border:1px solid #cdcdcd;width:29%;padding:10px;vertical-align:top}#hidden-drop-target p{font-size:13px;font-style:italic;margin:0 0 10px 0}.preview li.preview-item{background-position:0 5px;cursor:default}.preview .option-smart-on{margin:3px 0 0 5px}.preview-digg .option-smart-on{background:url(images/smart-digg.png) no-repeat top left;background-size:76px 17px;width:76px;height:17px;margin-top:2px}.preview-reddit .option-smart-on{background:url(images/smart-reddit.png) no-repeat top left;background-size:104px 21px;width:104px;height:21px}.preview-facebook .option-smart-on{background:url(images/smart-like.png) no-repeat top left;background-size:85px 20px;width:85px;height:20px}.preview-twitter .option-smart-on{background:url(images/smart-twitter.png?1) no-repeat top left;background-size:60px 20px;width:60px;height:20px}.preview-linkedin .option-smart-on{background:url(images/linkedin-smart.png) no-repeat top center;background-size:99px 18px;width:99px;height:20px}.preview-tumblr .option-smart-on{background:url(images/smart-tumblr.png) no-repeat top left;background-size:62px 20px;width:62px;height:20px}.preview-pinterest .option-smart-on{background:url(images/smart-pinterest.png) no-repeat top left;background-size:39px 20px;width:39px;height:20px}.preview-pocket .option-smart-on{background:url(images/smart-pocket.png) no-repeat top left;background-size:60px 20px;width:60px;height:20px}.preview-skype .option-smart-on{background:url(images/smart-skype.png) no-repeat top left;background-size:60px 20px;width:60px;height:20px}.preview-item.share-deprecated{opacity:.5}.preview-item.share-deprecated a span{text-decoration:line-through}@media (-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.preview-digg .option-smart-on{background-image:url(images/smart-digg@2x.png)}.preview-reddit .option-smart-on{background-image:url(images/smart-reddit@2x.png)}.preview-facebook .option-smart-on{background-image:url(images/smart-like@2x.png)}.preview-twitter .option-smart-on{background-image:url(images/smart-twitter@2x.png?1)}.preview-linkedin .option-smart-on{background-image:url(images/linkedin-smart@2x.png)}.preview-tumblr .option-smart-on{background-image:url(images/smart-tumblr@2x.png)}.preview-pinterest .option-smart-on{background-image:url(images/smart-pinterest@2x.png)}.preview-pocket .option-smart-on{background-image:url(images/smart-pocket@2x.png)}.preview-skype .option-smart-on{background-image:url(images/smart-skype@2x.png)}}.services .sharing-hidden li{background-color:transparent}.sharing-hidden li.share-end{clear:both;height:0;padding:0!important;margin:0!important;width:0;visibility:hidden;float:none}.preview .sharing-label{font-weight:700;border:0;padding:4px 0 0 6px}#services-config a.remove{background:#ddd;color:#fff;padding:0 4px 2px;border-radius:15px;-moz-border-radius:15px;-webkit-border-radius:15px;text-decoration:none;font-weight:700;font-size:10px}#services-config a.remove:hover{background:red}.sd-social-icon .inner a.sd-button span,.sd-social-icon .inner a.share-icon span{display:inline-block;overflow:hidden;width:0;text-indent:100%} \ No newline at end of file
diff --git a/plugins/jetpack/modules/sharedaddy/admin-sharing.css b/plugins/jetpack/modules/sharedaddy/admin-sharing.css
deleted file mode 100644
index f7093186..00000000
--- a/plugins/jetpack/modules/sharedaddy/admin-sharing.css
+++ /dev/null
@@ -1,452 +0,0 @@
-/**
- * Sharedaddy Admin Styles
- */
-
-#services-config {
- min-width: 700px;
- width: 100%;
- float: left;
-}
-
-#services-config h3 {
- font-weight: normal;
- font-size: 15px;
- margin: 0;
- padding: 8px 10px;
- overflow: hidden;
- white-space: nowrap;
- color: #464646;
-}
-
-#available-services, #enabled-services, #live-preview {
- padding: 0;
- width: 100%;
- padding-top: 20px;
- border-spacing: 0;
-}
-
-#enabled-services .ui-sortable {
- min-height: 50px;
-}
-
-#enabled-services {
- padding-bottom: 20px;
-}
-
-#available-services, #enabled-services {
- border-bottom: 2px solid #cccccc;
-}
-
-#live-preview {
- border-bottom: 1px solid #dfdfdf;
- padding-bottom: 60px;
-}
-
-#available-services h3, #enabled-services h3, #live-preview h3 {
- padding: 0px;
- margin-top: 0px;
- margin-bottom: 1em;
-}
-
-body.settings_page_sharing .description {
- width: 180px;
- vertical-align: top;
-}
-
-body.settings_page_sharing .description p {
- font-size: 13px;
- font-style: italic;
-}
-
-body.settings_page_sharing .services {
- padding: 0px 20px;
- vertical-align: top;
-}
-
-body.settings_page_sharing .services ul li {
- float: left;
- cursor: move;
-}
-
-body.settings_page_sharing .services ul li.divider {
- border: none;
- padding: 0;
- background: none;
- cursor: default;
-}
-
-body.settings_page_sharing ul.services-hidden {
- margin-bottom: 0;
-}
-
-/* Generic style */
-#available-services .service, #enabled-services .service {
- margin-right: 10px;
- padding: 5px 10px 5px 5px;
- border-radius: 3px;
- border: 1px solid #bbb;
- background: #f8f8f8;
- background-repeat: no-repeat;
- background-position: center center;
-}
-
-#available-services .service:hover, #enabled-services .service:hover {
- background: #fff;
- border: 1px solid #bbb;
- box-shadow: 0 1px 3px rgba(0,0,0,0.2);
-}
-
-#available-services .service.share-deprecated,
-#enabled-services .service.share-deprecated {
- opacity: 0.5;
- padding: 5px;
- text-decoration: line-through;
-}
-
-#available-services .service.share-deprecated {
- display: none;
-}
-
-/* Generic style icons */
-li.service span:before {
- color: #555;
- display: inline-block;
- -webkit-font-smoothing: antialiased;
- font: normal 18px/1 'social-logos';
- vertical-align: top;
- position: relative;
- top: 1px;
- margin-right: 3px;
- width: 16px;
- height: 16px;
- text-align: center;
-}
-li.service.share-print span:before {
- content: '\f469';
-}
-li.service.share-digg span:before {
- content: '\f221';
-}
-li.service.share-email span:before {
- content: '\f410';
-}
-li.service.share-linkedin span:before {
- content: '\f207';
-}
-li.service.share-twitter span:before {
- content: '\f202';
-}
-li.service.share-reddit span:before {
- content: '\f222';
-}
-li.service.share-tumblr span:before {
- content: '\f214';
-}
-li.service.share-pocket span:before {
- content: '\f224';
-}
-li.service.share-pinterest span:before {
- content: '\f209';
-}
-li.service.share-facebook span:before {
- content: '\f203';
-}
-li.service.share-press-this span:before { /* Fixme: remove this button in favor of reblog */
- content: '\f205';
-}
-li.service.share-telegram span:before {
- content: '\f606';
-}
-li.service.share-jetpack-whatsapp span:before {
- content: '\f608';
-}
-li.service.share-skype span:before {
- content: '\f220';
-}
-
-/**
- * Preview section
- */
-
-body.settings_page_sharing ul.preview {
- float: left;
- margin: 0px;
-}
-
-body.settings_page_sharing ul.preview li.preview-item, body.settings_page_sharing ul.preview li.preview-item a {
- cursor: default;
- text-decoration: none;
-}
-
-div.sd-social-icon ul.preview li.preview-item a span,
-div.sd-social-icon .inner li.preview-item a span {
- display: none;
-}
-
-div.sd-social-icon ul.preview li.preview-item.preview-custom a span {
- display: inline-block;
-
-}
-
-.services .preview li.share-custom a {
- text-decoration: none;
-}
-
-.services ul li.end-fix {
- clear:both;
- float:none;
- visibility:hidden;
- padding:0;
- margin:0;
- height:20px;
- width:0;
-}
-
-#enabled-services h2{
- font-size:20px;
- padding-top:0px;
- font-weight: normal !important;
- color: #999;
-}
-
-body.settings_page_sharing #live-preview h2 {
- font-size:20px;
- font-weight: normal !important;
- color: #e3e3e3;
-}
-
-body.settings_page_sharing .clearing {
- clear: both;
-}
-
-body.settings_page_sharing .options .options-left {
- float: left;
-}
-
-body.settings_page_sharing .input label {
- font-size: 11px;
- line-height: 16px;
-}
-
-body.settings_page_sharing .advanced-form {
- padding: 10px 14px 8px 10px;
- margin-left: -24px;
- display: none;
- border-top: 1px #e3e3e3 solid;
- margin-top:4px;
-}
-
-body.settings_page_sharing .utility {
- float: right;
- padding-top:10px;
- padding-right: 10px;
- font-size: 10px;
-}
-
-body.settings_page_sharing .advanced input[type=submit] {
- float: left;
- margin-top:10px;
- margin-right: 10px;
-}
-
-.services li.dropzone {
- border: 1px dashed #999;
- border-radius: 3px;
- background: #e3e3e3;
- margin-right: 10px;
- padding: 5px;
- height: 18px;
-}
-
-.advanced-form .form-table th {
- width: auto !important;
-}
-
-.advanced-form .button-secondary {
- margin-top: 0 !important;
-}
-
-#hidden-drop-target {
- background: #e1e1e1;
- border: 1px solid #cdcdcd;
- width: 29%;
- padding: 10px;
- vertical-align: top;
-}
-
-#hidden-drop-target p {
- font-size: 13px;
- font-style: italic;
- margin: 0 0 10px 0;
-}
-
-
-/* Official button previews */
-.preview li.preview-item {
- background-position: 0px 5px;
- cursor: default;
-}
-
-.preview .option-smart-on {
- margin: 3px 5px 0 0;
-}
-
-.preview-digg .option-smart-on {
- background: url(images/smart-digg.png) no-repeat top left;
- background-size: 76px 17px;
- width:76px;
- height:17px;
- margin-top: 2px;
-}
-
-.preview-reddit .option-smart-on {
- background: url(images/smart-reddit.png) no-repeat top left;
- background-size: 104px 21px;
- width:104px;
- height:21px;
-}
-
-.preview-facebook .option-smart-on {
- background: url(images/smart-like.png) no-repeat top left;
- background-size: 85px 20px;
- width:85px;
- height:20px;
-}
-
-.preview-twitter .option-smart-on {
- background: url(images/smart-twitter.png?1) no-repeat top left;
- background-size: 60px 20px;
- width:60px;
- height:20px;
-}
-
-.preview-linkedin .option-smart-on {
- background: url(images/linkedin-smart.png) no-repeat top center;
- background-size: 99px 18px;
- width:99px;
- height:20px;
-}
-
-.preview-tumblr .option-smart-on {
- background: url(images/smart-tumblr.png) no-repeat top left;
- background-size: 62px 20px;
- width: 62px;
- height: 20px;
-}
-
-.preview-pinterest .option-smart-on {
- background: url(images/smart-pinterest.png) no-repeat top left;
- background-size: 39px 20px;
- width: 39px;
- height: 20px;
-}
-
-.preview-pocket .option-smart-on {
- background: url(images/smart-pocket.png) no-repeat top left;
- background-size: 60px 20px;
- width: 60px;
- height: 20px;
-}
-
-.preview-skype .option-smart-on {
- background: url(images/smart-skype.png) no-repeat top left;
- background-size: 60px 20px;
- width: 60px;
- height: 20px;
-}
-
-.preview-item.share-deprecated {
- opacity: 0.5;
-}
-
-.preview-item.share-deprecated a span {
- text-decoration: line-through;
-}
-
-@media
-(-webkit-min-device-pixel-ratio: 1.25),
-(min-resolution: 120dpi) {
- .preview-digg .option-smart-on {
- background-image: url(images/smart-digg@2x.png);
- }
-
- .preview-reddit .option-smart-on {
- background-image: url(images/smart-reddit@2x.png);
- }
-
- .preview-facebook .option-smart-on {
- background-image: url(images/smart-like@2x.png);
- }
-
- .preview-twitter .option-smart-on {
- background-image: url(images/smart-twitter@2x.png?1);
- }
-
- .preview-linkedin .option-smart-on {
- background-image: url(images/linkedin-smart@2x.png);
- }
-
- .preview-tumblr .option-smart-on {
- background-image: url(images/smart-tumblr@2x.png);
- }
-
- .preview-pinterest .option-smart-on {
- background-image: url(images/smart-pinterest@2x.png);
- }
-
- .preview-pocket .option-smart-on {
- background-image: url(images/smart-pocket@2x.png);
- }
-
- .preview-skype .option-smart-on {
- background-image: url(images/smart-skype@2x.png);
- }
-}
-
-/**
- * Overflow sharing dialog
- */
-
-.services .sharing-hidden li {
- background-color: transparent;
-}
-
-.sharing-hidden li.share-end {
- clear: both;
- height: 0;
- padding: 0px !important;
- margin: 0px !important;
- width: 0;
- visibility: hidden;
- float: none;
-}
-
-.preview .sharing-label {
- font-weight: bold;
- border: 0;
- padding: 4px 6px 0 0;
-}
-
-#services-config a.remove {
- background: #ddd;
- color: #fff;
- padding: 0px 4px 2px;
- border-radius: 15px;
- -moz-border-radius: 15px;
- -webkit-border-radius: 15px;
- text-decoration: none;
- font-weight: bold;
- font-size: 10px;
-}
-
-#services-config a.remove:hover {
- background: #f00;
-}
-
-.sd-social-icon .inner a.sd-button span,
-.sd-social-icon .inner a.share-icon span {
- display: inline-block;
- overflow: hidden;
- width: 0;
- text-indent: 100%;
-}
diff --git a/plugins/jetpack/modules/sharedaddy/admin-sharing.js b/plugins/jetpack/modules/sharedaddy/admin-sharing.js
deleted file mode 100644
index 04a65f5a..00000000
--- a/plugins/jetpack/modules/sharedaddy/admin-sharing.js
+++ /dev/null
@@ -1,446 +0,0 @@
-/* jshint onevar: false, smarttabs: true */
-/* global sharing_loading_icon */
-
-(function($) {
- $( document ).ready(function() {
- function enable_share_button() {
- $( '.preview a.sharing-anchor' ).unbind( 'mouseenter mouseenter' ).hover( function() {
- if ( $( this ).data( 'hasappeared' ) !== true ) {
- var item = $( '.sharing-hidden .inner' );
- var original = $( this ).parents( 'li' );
-
- // Create a timer to make the area appear if the mouse hovers for a period
- var timer = setTimeout( function() {
- $( item ).css( {
- left: $( original ).position().left + 'px',
- top: $( original ).position().top + $( original ).height() + 3 + 'px'
- } ).slideDown( 200, function() {
- // Mark the item as have being appeared by the hover
- $( original ).data( 'hasappeared', true ).data( 'hasoriginal', true ).data( 'hasitem', false );
-
- // Remove all special handlers
- $( item ).mouseleave( handler_item_leave ).mouseenter( handler_item_enter );
- $( original ).mouseleave( handler_original_leave ).mouseenter( handler_original_enter );
-
- // Add a special handler to quickly close the item
- $( original ).click( close_it );
- } );
-
- // The following handlers take care of the mouseenter/mouseleave for the share button and the share area - if both are left then we close the share area
- var handler_item_leave = function() {
- $( original ).data( 'hasitem', false );
-
- if ( $( original ).data( 'hasoriginal' ) === false ) {
- var timer = setTimeout( close_it, 800 );
- $( original ).data( 'timer2', timer );
- }
- };
-
- var handler_item_enter = function() {
- $( original ).data( 'hasitem', true );
- clearTimeout( $( original ).data( 'timer2' ) );
- };
-
- var handler_original_leave = function() {
- $( original ).data( 'hasoriginal', false );
-
- if ( $( original ).data( 'hasitem' ) === false ) {
- var timer = setTimeout( close_it, 800 );
- $( original ).data( 'timer2', timer );
- }
- };
-
- var handler_original_enter = function() {
- $( original ).data( 'hasoriginal', true );
- clearTimeout( $( original ).data( 'timer2' ) );
- };
-
- var close_it = function() {
- item.slideUp( 200 );
-
- // Clear all hooks
- $( original ).unbind( 'mouseleave', handler_original_leave ).unbind( 'mouseenter', handler_original_enter );
- $( item ).unbind( 'mouseleave', handler_item_leave ).unbind( 'mouseenter', handler_item_leave );
- $( original ).data( 'hasappeared', false );
- $( original ).unbind( 'click', close_it );
- return false;
- };
- }, 200 );
-
- // Remember the timer so we can detect it on the mouseout
- $( this ).data( 'timer', timer );
- }
- }, function() {
- // Mouse out - remove any timer
- clearTimeout( $( this ).data( 'timer' ) );
- $( this ).data( 'timer', false );
- } );
- }
-
- function update_preview() {
- var button_style = $( '#button_style' ).val();
-
- // Clear the live preview
- $( '#live-preview ul.preview li' ).remove();
-
- // Add label
- if ( $( '#save-enabled-shares input[name=visible]' ).val() || $( '#save-enabled-shares input[name=hidden]' ).val() ) {
- $( '#live-preview ul.preview' ).append( $( '#live-preview ul.archive .sharing-label' ).clone() );
- }
-
- // Re-insert all the enabled items
- $( 'ul.services-enabled li' ).each( function() {
- if ( $( this ).hasClass( 'service' ) ) {
- var service = $( this ).attr( 'id' );
- $( '#live-preview ul.preview' ).append( $( '#live-preview ul.archive li.preview-' + service ).clone() );
- }
- } );
-
- // Add any hidden items
- if ( $( '#save-enabled-shares input[name=hidden]' ).val() ) {
- // Add share button
- $( '#live-preview ul.preview' ).append( $( '#live-preview ul.archive .share-more' ).parent().clone() );
-
- $( '.sharing-hidden ul li' ).remove();
-
- // Add hidden items into the inner panel
- $( 'ul.services-hidden li' ).each( function( /*pos, item*/ ) {
- if ( $( this ).hasClass( 'service' ) ) {
- var service = $( this ).attr( 'id' );
- $( '.sharing-hidden .inner ul' ).append( $( '#live-preview ul.archive .preview-' + service ).clone() );
- }
- } );
-
- enable_share_button();
- }
-
- $( '#live-preview div.sharedaddy' ).removeClass( 'sd-social-icon' );
- $( '#live-preview li.advanced' ).removeClass( 'no-icon' );
-
- // Button style
- if ( 'icon' === button_style ) {
- $( '#live-preview ul.preview div span, .sharing-hidden .inner ul div span' ).html( '&nbsp;' ).parent().addClass( 'no-text' );
- $( '#live-preview div.sharedaddy' ).addClass( 'sd-social-icon' );
- } else if ( 'official' === button_style ) {
- $( '#live-preview ul.preview .advanced, .sharing-hidden .inner ul .advanced' ).each( function( /*i*/ ) {
- if ( !$( this ).hasClass( 'preview-press-this' ) &&
- !$( this ).hasClass( 'preview-email' ) &&
- !$( this ).hasClass( 'preview-print' ) &&
- !$( this ).hasClass( 'preview-telegram' ) &&
- !$( this ).hasClass( 'preview-jetpack-whatsapp' ) &&
- !$( this ).hasClass( 'share-custom' ) &&
- !$( this ).hasClass( 'share-deprecated' ) ) {
- $( this ).find( '.option a span' ).html( '' ).parent().removeClass( 'sd-button' ).parent().attr( 'class', 'option option-smart-on' );
- }
- } );
- } else if ( 'text' === button_style ) {
- $( '#live-preview li.advanced' ).addClass( 'no-icon' );
- }
-
- }
-
- window.sharing_option_changed = function() {
- var item = this;
-
- // Loading icon
- $( this ).parents( 'li:first' ).css( 'backgroundImage', 'url("' + sharing_loading_icon + '")' );
-
- // Save
- $( this ).parents( 'form' ).ajaxSubmit( function( response ) {
- if ( response.indexOf( '<!---' ) >= 0 ) {
- var button = response.substring( 0, response.indexOf( '<!--->' ) );
- var preview = response.substring( response.indexOf( '<!--->' ) + 6 );
-
- if ( $( item ).is( ':submit' ) === true ) {
- // Update the DOM using a bit of cut/paste technology
-
- $( item ).parents( 'li:first' ).replaceWith( button );
- }
-
- $( '#live-preview ul.archive li.preview-' + $( item ).parents( 'form' ).find( 'input[name=service]' ).val() ).replaceWith( preview );
- }
-
- // Update preview
- update_preview();
-
- // Restore the icon
- $( item ).parents( 'li:first' ).removeAttr( 'style' );
- } );
-
- if ( $( item ).is( ':submit' ) === true ) {
- return false;
- }
- return true;
- };
-
- function showExtraOptions( service ) {
- jQuery( '.' + service + '-extra-options' ).css( { backgroundColor: '#ffffcc' } ).fadeIn();
- }
-
- function hideExtraOptions( service ) {
- jQuery( '.' + service + '-extra-options' ).fadeOut( 'slow' );
- }
-
- function save_services() {
- $( '#enabled-services h3 img' ).show();
-
- // Toggle various dividers/help texts
- if ( $( '#enabled-services ul.services-enabled li.service' ).length > 0 ) {
- $( '#drag-instructions' ).hide();
- }
- else {
- $( '#drag-instructions' ).show();
- }
-
- if ( $( '#enabled-services li.service' ).length > 0 ) {
- $( '#live-preview .services h2' ).hide();
- }
- else {
- $( '#live-preview .services h2' ).show();
- }
-
- // Gather the modules
- var visible = [], hidden = [];
-
- $( 'ul.services-enabled li' ).each( function() {
- if ( $( this ).hasClass( 'service' ) ) {
- // Ready for saving
- visible[visible.length] = $( this ).attr( 'id' );
- showExtraOptions( $( this ).attr( 'id' ) );
- }
- } );
-
- $( 'ul.services-available li' ).each( function() {
- if ( $( this ).hasClass( 'service' ) ) {
- hideExtraOptions( $( this ).attr( 'id' ) );
- }
- } );
-
- $( 'ul.services-hidden li' ).each( function() {
- if ( $( this ).hasClass( 'service' ) ) {
- // Ready for saving
- hidden[hidden.length] = $( this ).attr( 'id' );
- showExtraOptions( $( this ).attr( 'id' ) );
- }
- } );
-
- // Set the hidden element values
- $( '#save-enabled-shares input[name=visible]' ).val( visible.join( ',' ) );
- $( '#save-enabled-shares input[name=hidden]' ).val( hidden.join( ',' ) );
-
- update_preview();
-
- // Save it
- $( '#save-enabled-shares' ).ajaxSubmit( function() {
- $( '#enabled-services h3 img' ).hide();
- } );
- }
-
- $( '#enabled-services .services ul' ).sortable( {
- receive: function( /*event, ui*/ ) {
- save_services();
- },
- stop: function() {
- save_services();
- $( 'li.service' ).enableSelection(); // Fixes a problem with Chrome
- },
- over: function( /*event, ui*/ ) {
- $( this ).find( 'ul' ).addClass( 'dropping' );
-
- // Ensure the 'end-fix' is at the end
- $( '#enabled-services li.end-fix' ).remove();
- $( '#enabled-services ul' ).append( '<li class="end-fix"></li>' );
- },
- out: function( /*event, ui*/ ) {
- $( this ).find( 'ul' ).removeClass( 'dropping' );
-
- // Ensure the 'end-fix' is at the end
- $( '#enabled-services li.end-fix' ).remove();
- $( '#enabled-services ul' ).append( '<li class="end-fix"></li>' );
- },
- helper: function( event, ui ) {
- ui.find( '.advanced-form' ).hide();
-
- return ui.clone();
- },
- start: function( /*event, ui*/ ) {
- // Make sure that the advanced section is closed
- $( '.advanced-form' ).hide();
- $( 'li.service' ).disableSelection(); // Fixes a problem with Chrome
- },
- placeholder: 'dropzone',
- opacity: 0.8,
- delay: 150,
- forcePlaceholderSize: true,
- items: 'li',
- connectWith: '#available-services ul, #enabled-services .services ul',
- cancel: '.advanced-form'
- } );
-
- $( '#available-services ul' ).sortable( {
- opacity: 0.8,
- delay: 150,
- cursor: 'move',
- connectWith: '#enabled-services .services ul',
- placeholder: 'dropzone',
- forcePlaceholderSize: true,
- start: function() {
- $( '.advanced-form' ).hide();
- }
- } );
-
- // Accessibility keyboard shortcurts
- $( '.service' ).on( 'keydown', function ( e ) {
-
- // Reposition if one of the directional keys is pressed
- switch ( e.keyCode ) {
- case 13: keyboardDragDrop( $( this ) ); break; // Enter
- case 32: keyboardDragDrop( $( this ) ); break; // Space
- case 37: keyboardChangeOrder( $( this ), 'left' ); break; // Left
- case 39: keyboardChangeOrder( $( this ), 'right' ); break; // Right
- default: return true; // Exit and bubble
- }
-
- e.preventDefault();
- });
-
- function keyboardChangeOrder( $this, dir ) {
-
- var thisParent = $this.parent(),
- thisParentsChildren = thisParent.find( 'li' ),
- thisPosition = thisParentsChildren.index( $this ) + 1,
- totalChildren = thisParentsChildren.length - 1,
- thisService;
-
- // No need to be able to sort order for the "Available Services" section
- if ( thisParent.hasClass( 'services-available' ) ) {
- return;
- }
-
- if ( 'left' === dir ) {
- if ( 1 === thisPosition ) {
- return;
- }
-
- // Find service to left
- var prevSibling = $this.prev();
-
- // Detach this service from DOM
- thisService = $this.detach();
-
- // Move it to the appropriate area and add focus back to service
- prevSibling.before( thisService );
-
- // Add focus
- prevSibling.prev().focus();
- }
-
- if ( 'right' === dir ) {
- if ( thisPosition === totalChildren ) {
- return;
- }
-
- // Find service to left
- var nextSibling = $this.next();
-
- // Detach this service from DOM
- thisService = $this.detach();
-
- // Move it to the appropriate area and add focus back to service
- nextSibling.after( thisService );
-
- // Add focus
- nextSibling.next().focus();
- }
-
- //Save changes
- save_services();
- }
-
- function keyboardDragDrop( $this ) {
-
- var dropzone,
- thisParent = $this.parent();
-
- // Rotate through 3 available dropzones
- if ( thisParent.hasClass( 'services-available' ) ) {
- dropzone = 'services-enabled';
- } else if ( thisParent.hasClass( 'services-enabled' ) ) {
- dropzone = 'services-hidden';
- } else {
- dropzone = 'services-available';
- }
-
- // Detach this service from DOM
- var thisService = $this.detach();
-
- // Move it to the appropriate area and add focus back to service
- $( '.' + dropzone ).prepend( thisService ).find( 'li:first-child' ).focus();
-
- //Save changes
- save_services();
- }
-
- // Live preview 'hidden' button
- $( '.preview-hidden a' ).click( function() {
- $( this ).parent().find( '.preview' ).toggle();
- return false;
- } );
-
- // Add service
- $( '#new-service form' ).ajaxForm( {
- beforeSubmit: function() {
- $( '#new-service-form .error' ).hide();
- $( '#new-service-form img' ).show();
- $( '#new-service-form input[type=submit]' ).prop( 'disabled', true );
- },
- success: function( response ) {
- $( '#new-service-form img' ).hide();
-
- if ( ( '' + response ) === '1' ) {
- $( '#new-service-form .inerror' ).removeClass( 'inerror' ).addClass( 'error' );
- $( '#new-service-form .error' ).show();
- $( '#new-service-form input[type=submit]' ).prop( 'disabled', false );
- }
- else {
- document.location.reload();
- }
- }
- }
- );
-
- function init_handlers() {
- $( '#services-config a.remove' ).unbind( 'click' ).click( function() {
- var form = $( this ).parent().next();
-
- // Loading icon
- $( this ).parents( 'li:first' ).css( 'backgroundImage', 'url("' + sharing_loading_icon + '")' );
-
- // Save
- form.ajaxSubmit( function( /*response*/ ) {
- // Remove the item
- form.parents( 'li:first' ).fadeOut( function() {
- $( this ).remove();
-
- // Update preview
- update_preview();
- } );
- } );
-
- return false;
- } );
- }
-
- $( '#button_style' ).change( function() {
- update_preview();
- return true;
- } ).change();
-
- $( 'input[name=sharing_label]' ).blur( function() {
- $('#live-preview h3.sd-title').text( $( '<div/>' ).text( $( this ).val() ).html() );
- } );
-
- init_handlers();
- enable_share_button();
- } );
-})( jQuery );
diff --git a/plugins/jetpack/modules/sharedaddy/admin-sharing.min.css b/plugins/jetpack/modules/sharedaddy/admin-sharing.min.css
deleted file mode 100644
index e572752d..00000000
--- a/plugins/jetpack/modules/sharedaddy/admin-sharing.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-#services-config{min-width:700px;width:100%;float:left}#services-config h3{font-weight:400;font-size:15px;margin:0;padding:8px 10px;overflow:hidden;white-space:nowrap;color:#464646}#available-services,#enabled-services,#live-preview{padding:0;width:100%;padding-top:20px;border-spacing:0}#enabled-services .ui-sortable{min-height:50px}#enabled-services{padding-bottom:20px}#available-services,#enabled-services{border-bottom:2px solid #ccc}#live-preview{border-bottom:1px solid #dfdfdf;padding-bottom:60px}#available-services h3,#enabled-services h3,#live-preview h3{padding:0;margin-top:0;margin-bottom:1em}body.settings_page_sharing .description{width:180px;vertical-align:top}body.settings_page_sharing .description p{font-size:13px;font-style:italic}body.settings_page_sharing .services{padding:0 20px;vertical-align:top}body.settings_page_sharing .services ul li{float:left;cursor:move}body.settings_page_sharing .services ul li.divider{border:none;padding:0;background:0 0;cursor:default}body.settings_page_sharing ul.services-hidden{margin-bottom:0}#available-services .service,#enabled-services .service{margin-right:10px;padding:5px 10px 5px 5px;border-radius:3px;border:1px solid #bbb;background:#f8f8f8;background-repeat:no-repeat;background-position:center center}#available-services .service:hover,#enabled-services .service:hover{background:#fff;border:1px solid #bbb;box-shadow:0 1px 3px rgba(0,0,0,.2)}#available-services .service.share-deprecated,#enabled-services .service.share-deprecated{opacity:.5;padding:5px;text-decoration:line-through}#available-services .service.share-deprecated{display:none}li.service span:before{color:#555;display:inline-block;-webkit-font-smoothing:antialiased;font:normal 18px/1 social-logos;vertical-align:top;position:relative;top:1px;margin-right:3px;width:16px;height:16px;text-align:center}li.service.share-print span:before{content:'\f469'}li.service.share-digg span:before{content:'\f221'}li.service.share-email span:before{content:'\f410'}li.service.share-linkedin span:before{content:'\f207'}li.service.share-twitter span:before{content:'\f202'}li.service.share-reddit span:before{content:'\f222'}li.service.share-tumblr span:before{content:'\f214'}li.service.share-pocket span:before{content:'\f224'}li.service.share-pinterest span:before{content:'\f209'}li.service.share-facebook span:before{content:'\f203'}li.service.share-press-this span:before{content:'\f205'}li.service.share-telegram span:before{content:'\f606'}li.service.share-jetpack-whatsapp span:before{content:'\f608'}li.service.share-skype span:before{content:'\f220'}body.settings_page_sharing ul.preview{float:left;margin:0}body.settings_page_sharing ul.preview li.preview-item,body.settings_page_sharing ul.preview li.preview-item a{cursor:default;text-decoration:none}div.sd-social-icon .inner li.preview-item a span,div.sd-social-icon ul.preview li.preview-item a span{display:none}div.sd-social-icon ul.preview li.preview-item.preview-custom a span{display:inline-block}.services .preview li.share-custom a{text-decoration:none}.services ul li.end-fix{clear:both;float:none;visibility:hidden;padding:0;margin:0;height:20px;width:0}#enabled-services h2{font-size:20px;padding-top:0;font-weight:400!important;color:#999}body.settings_page_sharing #live-preview h2{font-size:20px;font-weight:400!important;color:#e3e3e3}body.settings_page_sharing .clearing{clear:both}body.settings_page_sharing .options .options-left{float:left}body.settings_page_sharing .input label{font-size:11px;line-height:16px}body.settings_page_sharing .advanced-form{padding:10px 14px 8px 10px;margin-left:-24px;display:none;border-top:1px #e3e3e3 solid;margin-top:4px}body.settings_page_sharing .utility{float:right;padding-top:10px;padding-right:10px;font-size:10px}body.settings_page_sharing .advanced input[type=submit]{float:left;margin-top:10px;margin-right:10px}.services li.dropzone{border:1px dashed #999;border-radius:3px;background:#e3e3e3;margin-right:10px;padding:5px;height:18px}.advanced-form .form-table th{width:auto!important}.advanced-form .button-secondary{margin-top:0!important}#hidden-drop-target{background:#e1e1e1;border:1px solid #cdcdcd;width:29%;padding:10px;vertical-align:top}#hidden-drop-target p{font-size:13px;font-style:italic;margin:0 0 10px 0}.preview li.preview-item{background-position:0 5px;cursor:default}.preview .option-smart-on{margin:3px 5px 0 0}.preview-digg .option-smart-on{background:url(images/smart-digg.png) no-repeat top left;background-size:76px 17px;width:76px;height:17px;margin-top:2px}.preview-reddit .option-smart-on{background:url(images/smart-reddit.png) no-repeat top left;background-size:104px 21px;width:104px;height:21px}.preview-facebook .option-smart-on{background:url(images/smart-like.png) no-repeat top left;background-size:85px 20px;width:85px;height:20px}.preview-twitter .option-smart-on{background:url(images/smart-twitter.png?1) no-repeat top left;background-size:60px 20px;width:60px;height:20px}.preview-linkedin .option-smart-on{background:url(images/linkedin-smart.png) no-repeat top center;background-size:99px 18px;width:99px;height:20px}.preview-tumblr .option-smart-on{background:url(images/smart-tumblr.png) no-repeat top left;background-size:62px 20px;width:62px;height:20px}.preview-pinterest .option-smart-on{background:url(images/smart-pinterest.png) no-repeat top left;background-size:39px 20px;width:39px;height:20px}.preview-pocket .option-smart-on{background:url(images/smart-pocket.png) no-repeat top left;background-size:60px 20px;width:60px;height:20px}.preview-skype .option-smart-on{background:url(images/smart-skype.png) no-repeat top left;background-size:60px 20px;width:60px;height:20px}.preview-item.share-deprecated{opacity:.5}.preview-item.share-deprecated a span{text-decoration:line-through}@media (-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.preview-digg .option-smart-on{background-image:url(images/smart-digg@2x.png)}.preview-reddit .option-smart-on{background-image:url(images/smart-reddit@2x.png)}.preview-facebook .option-smart-on{background-image:url(images/smart-like@2x.png)}.preview-twitter .option-smart-on{background-image:url(images/smart-twitter@2x.png?1)}.preview-linkedin .option-smart-on{background-image:url(images/linkedin-smart@2x.png)}.preview-tumblr .option-smart-on{background-image:url(images/smart-tumblr@2x.png)}.preview-pinterest .option-smart-on{background-image:url(images/smart-pinterest@2x.png)}.preview-pocket .option-smart-on{background-image:url(images/smart-pocket@2x.png)}.preview-skype .option-smart-on{background-image:url(images/smart-skype@2x.png)}}.services .sharing-hidden li{background-color:transparent}.sharing-hidden li.share-end{clear:both;height:0;padding:0!important;margin:0!important;width:0;visibility:hidden;float:none}.preview .sharing-label{font-weight:700;border:0;padding:4px 6px 0 0}#services-config a.remove{background:#ddd;color:#fff;padding:0 4px 2px;border-radius:15px;-moz-border-radius:15px;-webkit-border-radius:15px;text-decoration:none;font-weight:700;font-size:10px}#services-config a.remove:hover{background:red}.sd-social-icon .inner a.sd-button span,.sd-social-icon .inner a.share-icon span{display:inline-block;overflow:hidden;width:0;text-indent:100%} \ No newline at end of file
diff --git a/plugins/jetpack/modules/sharedaddy/images/after-the-deadline@2x.png b/plugins/jetpack/modules/sharedaddy/images/after-the-deadline@2x.png
deleted file mode 100644
index d06bd260..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/after-the-deadline@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/comments@2x.png b/plugins/jetpack/modules/sharedaddy/images/comments@2x.png
deleted file mode 100644
index f1c8fbf9..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/comments@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/contact-form@2x.png b/plugins/jetpack/modules/sharedaddy/images/contact-form@2x.png
deleted file mode 100644
index 2c38752c..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/contact-form@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/custom.png b/plugins/jetpack/modules/sharedaddy/images/custom.png
deleted file mode 100644
index 46adefa4..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/custom.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/custom@2x.png b/plugins/jetpack/modules/sharedaddy/images/custom@2x.png
deleted file mode 100644
index 9bbfcfb6..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/custom@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/designfloat.png b/plugins/jetpack/modules/sharedaddy/images/designfloat.png
deleted file mode 100644
index e2110bcc..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/designfloat.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/digg.png b/plugins/jetpack/modules/sharedaddy/images/digg.png
deleted file mode 100644
index dc98382c..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/digg.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/digg@2x.png b/plugins/jetpack/modules/sharedaddy/images/digg@2x.png
deleted file mode 100644
index f9bd8a74..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/digg@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/divider.png b/plugins/jetpack/modules/sharedaddy/images/divider.png
deleted file mode 100644
index 00f427ad..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/divider.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/divider@2x.png b/plugins/jetpack/modules/sharedaddy/images/divider@2x.png
deleted file mode 100644
index 901cf653..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/divider@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/draggy.png b/plugins/jetpack/modules/sharedaddy/images/draggy.png
deleted file mode 100644
index b4633d29..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/draggy.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/draggy@2x.png b/plugins/jetpack/modules/sharedaddy/images/draggy@2x.png
deleted file mode 100644
index 133483ad..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/draggy@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/email.png b/plugins/jetpack/modules/sharedaddy/images/email.png
deleted file mode 100644
index 6753619a..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/email.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/email@2x.png b/plugins/jetpack/modules/sharedaddy/images/email@2x.png
deleted file mode 100644
index 6a6f70d2..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/email@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/ember.png b/plugins/jetpack/modules/sharedaddy/images/ember.png
deleted file mode 100644
index 47461ece..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/ember.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/enhanced-distribution@2x.png b/plugins/jetpack/modules/sharedaddy/images/enhanced-distribution@2x.png
deleted file mode 100644
index 694dba27..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/enhanced-distribution@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/facebook.png b/plugins/jetpack/modules/sharedaddy/images/facebook.png
deleted file mode 100644
index 91d3702f..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/facebook.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/facebook@2x.png b/plugins/jetpack/modules/sharedaddy/images/facebook@2x.png
deleted file mode 100644
index 10b36803..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/facebook@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/feed.png b/plugins/jetpack/modules/sharedaddy/images/feed.png
deleted file mode 100644
index 9eeeffd3..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/feed.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/icon-facebook-2x.png b/plugins/jetpack/modules/sharedaddy/images/icon-facebook-2x.png
deleted file mode 100644
index 3f2723fa..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/icon-facebook-2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/icon-facebook.png b/plugins/jetpack/modules/sharedaddy/images/icon-facebook.png
deleted file mode 100644
index bb9edab4..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/icon-facebook.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/icon-twitter-2x.png b/plugins/jetpack/modules/sharedaddy/images/icon-twitter-2x.png
deleted file mode 100644
index a9a90141..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/icon-twitter-2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/icon-twitter.png b/plugins/jetpack/modules/sharedaddy/images/icon-twitter.png
deleted file mode 100644
index ec41046e..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/icon-twitter.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/icon-wordpress-2x.png b/plugins/jetpack/modules/sharedaddy/images/icon-wordpress-2x.png
deleted file mode 100644
index 23439d93..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/icon-wordpress-2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/icon-wordpress.png b/plugins/jetpack/modules/sharedaddy/images/icon-wordpress.png
deleted file mode 100644
index 1ff384a0..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/icon-wordpress.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/kindle.png b/plugins/jetpack/modules/sharedaddy/images/kindle.png
deleted file mode 100644
index a8b235c6..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/kindle.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/kindle@2x.png b/plugins/jetpack/modules/sharedaddy/images/kindle@2x.png
deleted file mode 100644
index dfbcbec3..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/kindle@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/linkedin-horizontal.png b/plugins/jetpack/modules/sharedaddy/images/linkedin-horizontal.png
deleted file mode 100644
index a55a3e60..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/linkedin-horizontal.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/linkedin-horizontal@2x.png b/plugins/jetpack/modules/sharedaddy/images/linkedin-horizontal@2x.png
deleted file mode 100644
index cd400275..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/linkedin-horizontal@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/linkedin-nocount.png b/plugins/jetpack/modules/sharedaddy/images/linkedin-nocount.png
deleted file mode 100644
index a5d4baeb..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/linkedin-nocount.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/linkedin-nocount@2x.png b/plugins/jetpack/modules/sharedaddy/images/linkedin-nocount@2x.png
deleted file mode 100644
index ad599e67..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/linkedin-nocount@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/linkedin-smart.png b/plugins/jetpack/modules/sharedaddy/images/linkedin-smart.png
deleted file mode 100644
index a55a3e60..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/linkedin-smart.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/linkedin-smart@2x.png b/plugins/jetpack/modules/sharedaddy/images/linkedin-smart@2x.png
deleted file mode 100644
index cd400275..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/linkedin-smart@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/linkedin-vertical.png b/plugins/jetpack/modules/sharedaddy/images/linkedin-vertical.png
deleted file mode 100644
index 24bc27d4..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/linkedin-vertical.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/linkedin-vertical@2x.png b/plugins/jetpack/modules/sharedaddy/images/linkedin-vertical@2x.png
deleted file mode 100644
index 3e6216e5..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/linkedin-vertical@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/linkedin.png b/plugins/jetpack/modules/sharedaddy/images/linkedin.png
deleted file mode 100644
index ee860f7f..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/linkedin.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/linkedin@2x.png b/plugins/jetpack/modules/sharedaddy/images/linkedin@2x.png
deleted file mode 100644
index 7139d05f..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/linkedin@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/loading.gif b/plugins/jetpack/modules/sharedaddy/images/loading.gif
deleted file mode 100644
index 85b99d46..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/loading.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/more.png b/plugins/jetpack/modules/sharedaddy/images/more.png
deleted file mode 100644
index eb5bb625..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/more.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/more@2x.png b/plugins/jetpack/modules/sharedaddy/images/more@2x.png
deleted file mode 100644
index 931e9caf..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/more@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/pinterest.png b/plugins/jetpack/modules/sharedaddy/images/pinterest.png
deleted file mode 100644
index d170d748..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/pinterest.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/pinterest@2x.png b/plugins/jetpack/modules/sharedaddy/images/pinterest@2x.png
deleted file mode 100644
index 5229524f..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/pinterest@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/pocket.png b/plugins/jetpack/modules/sharedaddy/images/pocket.png
deleted file mode 100644
index cba4e662..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/pocket.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/pocket@2x.png b/plugins/jetpack/modules/sharedaddy/images/pocket@2x.png
deleted file mode 100644
index 2512c887..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/pocket@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/print.png b/plugins/jetpack/modules/sharedaddy/images/print.png
deleted file mode 100644
index 71fa6bf6..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/print.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/print@2x.png b/plugins/jetpack/modules/sharedaddy/images/print@2x.png
deleted file mode 100644
index bb6b4027..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/print@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/reddit.png b/plugins/jetpack/modules/sharedaddy/images/reddit.png
deleted file mode 100644
index d6644565..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/reddit.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/reddit@2x.png b/plugins/jetpack/modules/sharedaddy/images/reddit@2x.png
deleted file mode 100644
index 11a3f2c3..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/reddit@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/rss.png b/plugins/jetpack/modules/sharedaddy/images/rss.png
deleted file mode 100644
index 7c92968f..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/rss.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/rss@2x.png b/plugins/jetpack/modules/sharedaddy/images/rss@2x.png
deleted file mode 100644
index f007bf2e..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/rss@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/share-bg.png b/plugins/jetpack/modules/sharedaddy/images/share-bg.png
deleted file mode 100644
index 03c2d2bd..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/share-bg.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/sharing-hidden.png b/plugins/jetpack/modules/sharedaddy/images/sharing-hidden.png
deleted file mode 100644
index 3458c7bd..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/sharing-hidden.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/sharing-hidden@2x.png b/plugins/jetpack/modules/sharedaddy/images/sharing-hidden@2x.png
deleted file mode 100644
index 5924c4af..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/sharing-hidden@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/smart-digg.png b/plugins/jetpack/modules/sharedaddy/images/smart-digg.png
deleted file mode 100644
index 6f564b7d..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/smart-digg.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/smart-digg@2x.png b/plugins/jetpack/modules/sharedaddy/images/smart-digg@2x.png
deleted file mode 100644
index 6468a53e..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/smart-digg@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/smart-facebook.png b/plugins/jetpack/modules/sharedaddy/images/smart-facebook.png
deleted file mode 100644
index 799e0986..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/smart-facebook.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/smart-facebook@2x.png b/plugins/jetpack/modules/sharedaddy/images/smart-facebook@2x.png
deleted file mode 100644
index bc277c2f..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/smart-facebook@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/smart-like.png b/plugins/jetpack/modules/sharedaddy/images/smart-like.png
deleted file mode 100644
index 368a6c11..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/smart-like.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/smart-like@2x.png b/plugins/jetpack/modules/sharedaddy/images/smart-like@2x.png
deleted file mode 100644
index 7ad4d638..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/smart-like@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/smart-pinterest.png b/plugins/jetpack/modules/sharedaddy/images/smart-pinterest.png
deleted file mode 100644
index ac78d5ad..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/smart-pinterest.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/smart-pinterest@2x.png b/plugins/jetpack/modules/sharedaddy/images/smart-pinterest@2x.png
deleted file mode 100644
index ea03b942..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/smart-pinterest@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/smart-pocket.png b/plugins/jetpack/modules/sharedaddy/images/smart-pocket.png
deleted file mode 100644
index 4a368a35..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/smart-pocket.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/smart-pocket@2x.png b/plugins/jetpack/modules/sharedaddy/images/smart-pocket@2x.png
deleted file mode 100644
index b84a0d90..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/smart-pocket@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/smart-reddit.png b/plugins/jetpack/modules/sharedaddy/images/smart-reddit.png
deleted file mode 100644
index 5afa0aa6..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/smart-reddit.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/smart-reddit@2x.png b/plugins/jetpack/modules/sharedaddy/images/smart-reddit@2x.png
deleted file mode 100644
index da4b569b..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/smart-reddit@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/smart-skype.png b/plugins/jetpack/modules/sharedaddy/images/smart-skype.png
deleted file mode 100644
index b800d516..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/smart-skype.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/smart-skype@2x.png b/plugins/jetpack/modules/sharedaddy/images/smart-skype@2x.png
deleted file mode 100644
index 6828be4a..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/smart-skype@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/smart-stumbleupon.png b/plugins/jetpack/modules/sharedaddy/images/smart-stumbleupon.png
deleted file mode 100644
index 922d84b9..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/smart-stumbleupon.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/smart-stumbleupon@2x.png b/plugins/jetpack/modules/sharedaddy/images/smart-stumbleupon@2x.png
deleted file mode 100644
index a807aef8..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/smart-stumbleupon@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/smart-tumblr.png b/plugins/jetpack/modules/sharedaddy/images/smart-tumblr.png
deleted file mode 100644
index 147975e1..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/smart-tumblr.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/smart-tumblr@2x.png b/plugins/jetpack/modules/sharedaddy/images/smart-tumblr@2x.png
deleted file mode 100644
index b73b9a26..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/smart-tumblr@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/smart-twitter.png b/plugins/jetpack/modules/sharedaddy/images/smart-twitter.png
deleted file mode 100644
index 299c7d88..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/smart-twitter.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/smart-twitter@2x.png b/plugins/jetpack/modules/sharedaddy/images/smart-twitter@2x.png
deleted file mode 100644
index 0be96c46..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/smart-twitter@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/tumblr.png b/plugins/jetpack/modules/sharedaddy/images/tumblr.png
deleted file mode 100644
index d248cd09..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/tumblr.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/tumblr@2x.png b/plugins/jetpack/modules/sharedaddy/images/tumblr@2x.png
deleted file mode 100644
index f991236c..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/tumblr@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/twitter.png b/plugins/jetpack/modules/sharedaddy/images/twitter.png
deleted file mode 100644
index ec41046e..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/twitter.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/twitter@2x.png b/plugins/jetpack/modules/sharedaddy/images/twitter@2x.png
deleted file mode 100644
index aa666e66..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/twitter@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/wordpress.png b/plugins/jetpack/modules/sharedaddy/images/wordpress.png
deleted file mode 100644
index 94e92823..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/wordpress.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/images/wordpress@2x.png b/plugins/jetpack/modules/sharedaddy/images/wordpress@2x.png
deleted file mode 100644
index 2da25ffc..00000000
--- a/plugins/jetpack/modules/sharedaddy/images/wordpress@2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/sharedaddy/recaptcha.php b/plugins/jetpack/modules/sharedaddy/recaptcha.php
deleted file mode 100644
index 58ae6563..00000000
--- a/plugins/jetpack/modules/sharedaddy/recaptcha.php
+++ /dev/null
@@ -1,188 +0,0 @@
-<?php
-
-/**
- * Class that handles reCAPTCHA.
- */
-class Jetpack_ReCaptcha {
-
- /**
- * URL to which requests are POSTed.
- *
- * @const string
- */
- const VERIFY_URL = 'https://www.google.com/recaptcha/api/siteverify';
-
- /**
- * Site key to use in HTML code.
- *
- * @var string
- */
- private $site_key;
-
- /**
- * Shared secret for the site.
- *
- * @var string
- */
- private $secret_key;
-
- /**
- * Config for reCAPTCHA instance.
- *
- * @var array
- */
- private $config;
-
- /**
- * Error codes returned from reCAPTCHA API.
- *
- * @see https://developers.google.com/recaptcha/docs/verify
- *
- * @var array
- */
- private $error_codes;
-
- /**
- * Create a configured instance to use the reCAPTCHA service.
- *
- * @param string $site_key Site key to use in HTML code.
- * @param string $secret_key Shared secret between site and reCAPTCHA server.
- * @param array $config Config array to optionally configure reCAPTCHA instance.
- */
- public function __construct( $site_key, $secret_key, $config = array() ) {
- $this->site_key = $site_key;
- $this->secret_key = $secret_key;
- $this->config = wp_parse_args( $config, $this->get_default_config() );
-
- $this->error_codes = array(
- 'missing-input-secret' => __( 'The secret parameter is missing', 'jetpack' ),
- 'invalid-input-secret' => __( 'The secret parameter is invalid or malformed', 'jetpack' ),
- 'missing-input-response' => __( 'The response parameter is missing', 'jetpack' ),
- 'invalid-input-response' => __( 'The response parameter is invalid or malformed', 'jetpack' ),
- 'invalid-json' => __( 'Invalid JSON', 'jetpack' ),
- 'unexpected-response' => __( 'Unexpected response', 'jetpack' ),
- 'unexpected-hostname' => __( 'Unexpected hostname', 'jetpack' ),
- );
- }
-
- /**
- * Get default config for this reCAPTCHA instance.
- *
- * @return array Default config
- */
- public function get_default_config() {
- return array(
- 'language' => get_locale(),
- 'script_async' => true,
- 'tag_class' => 'g-recaptcha',
- 'tag_attributes' => array(
- 'theme' => 'light',
- 'type' => 'image',
- 'tabindex' => 0,
- ),
- );
- }
-
- /**
- * Calls the reCAPTCHA siteverify API to verify whether the user passes
- * CAPTCHA test.
- *
- * @param string $response The value of 'g-recaptcha-response' in the submitted
- * form.
- * @param string $remote_ip The end user's IP address.
- *
- * @return bool|WP_Error Returns true if verified. Otherwise WP_Error is returned.
- */
- public function verify( $response, $remote_ip ) {
- // No need make a request if response is empty.
- if ( empty( $response ) ) {
- return new WP_Error( 'missing-input-response', $this->error_codes['missing-input-response'], 400 );
- }
-
- $resp = wp_remote_post( self::VERIFY_URL, $this->get_verify_request_params( $response, $remote_ip ) );
- if ( is_wp_error( $resp ) ) {
- return $resp;
- }
-
- $resp_decoded = json_decode( wp_remote_retrieve_body( $resp ), true );
- if ( ! $resp_decoded ) {
- return new WP_Error( 'invalid-json', $this->error_codes['invalid-json'], 400 );
- }
-
- // Default error code and message.
- $error_code = 'unexpected-response';
- $error_message = $this->error_codes['unexpected-response'];
-
- // Use the first error code if exists.
- if ( isset( $resp_decoded['error-codes'] ) && is_array( $resp_decoded['error-codes'] ) ) {
- if ( isset( $resp_decoded['error-codes'][0] ) && isset( $this->error_codes[ $resp_decoded['error-codes'][0] ] ) ) {
- $error_message = $this->error_codes[ $resp_decoded['error-codes'][0] ];
- $error_code = $resp_decoded['error-codes'][0];
- }
- }
-
- if ( ! isset( $resp_decoded['success'] ) ) {
- return new WP_Error( $error_code, $error_message );
- }
-
- if ( true !== $resp_decoded['success'] ) {
- return new WP_Error( $error_code, $error_message );
- }
-
- // Validate the hostname matches expected source
- if ( isset( $resp_decoded['hostname'] ) ) {
- $url = wp_parse_url( get_home_url() );
- if ( $url['host'] !== $resp_decoded['hostname'] ) {
- return new WP_Error( 'unexpected-host', $this->error_codes['unexpected-hostname'] );
- }
- }
-
- return true;
- }
-
- /**
- * Get siteverify request parameters.
- *
- * @param string $response The value of 'g-recaptcha-response' in the submitted
- * form.
- * @param string $remote_ip The end user's IP address.
- *
- * @return array
- */
- public function get_verify_request_params( $response, $remote_ip ) {
- return array(
- 'body' => array(
- 'secret' => $this->secret_key,
- 'response' => $response,
- 'remoteip' => $remote_ip,
- ),
- 'sslverify' => true,
- );
- }
-
- /**
- * Get reCAPTCHA HTML to render.
- *
- * @return string
- */
- public function get_recaptcha_html() {
- return sprintf(
- '
- <div
- class="%s"
- data-sitekey="%s"
- data-theme="%s"
- data-type="%s"
- data-tabindex="%s"></div>
- <script type="text/javascript" src="https://www.google.com/recaptcha/api.js?hl=%s"%s></script>
- ',
- esc_attr( $this->config['tag_class'] ),
- esc_attr( $this->site_key ),
- esc_attr( $this->config['tag_attributes']['theme'] ),
- esc_attr( $this->config['tag_attributes']['type'] ),
- esc_attr( $this->config['tag_attributes']['tabindex'] ),
- rawurlencode( $this->config['language'] ),
- $this->config['script_async'] ? ' async' : ''
- );
- }
-}
diff --git a/plugins/jetpack/modules/sharedaddy/sharedaddy.php b/plugins/jetpack/modules/sharedaddy/sharedaddy.php
deleted file mode 100644
index 3f34cf32..00000000
--- a/plugins/jetpack/modules/sharedaddy/sharedaddy.php
+++ /dev/null
@@ -1,289 +0,0 @@
-<?php
-/*
-Plugin Name: Sharedaddy
-Description: The most super duper sharing tool on the interwebs.
-Version: 0.3.1
-Author: Automattic, Inc.
-Author URI: http://automattic.com/
-Plugin URI: http://en.blog.wordpress.com/2010/08/24/more-ways-to-share/
-*/
-
-require_once plugin_dir_path( __FILE__ ).'sharing.php';
-
-function sharing_email_send_post( $data ) {
-
- $content = sharing_email_send_post_content( $data );
- // Borrowed from wp_mail();
- $sitename = strtolower( $_SERVER['SERVER_NAME'] );
- if ( substr( $sitename, 0, 4 ) == 'www.' ) {
- $sitename = substr( $sitename, 4 );
- }
-
- /** This filter is documented in core/src/wp-includes/pluggable.php */
- $from_email = apply_filters( 'wp_mail_from', 'wordpress@' . $sitename );
-
- if ( ! empty( $data['name'] ) ) {
- $s_name = (string) $data['name'];
- $name_needs_encoding_regex =
- '/[' .
- // SpamAssasin's list of characters which "need MIME" encoding
- '\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\xff' .
- // Our list of "unsafe" characters
- '<\r\n' .
- ']/';
-
- $needs_encoding =
- // If it contains any blacklisted chars,
- preg_match( $name_needs_encoding_regex, $s_name ) ||
- // Or if we can't use `mb_convert_encoding`
- ! function_exists( 'mb_convert_encoding' ) ||
- // Or if it's not already ASCII
- mb_convert_encoding( $data['name'], 'ASCII' ) !== $s_name;
-
- if ( $needs_encoding ) {
- $data['name'] = sprintf( '=?UTF-8?B?%s?=', base64_encode( $data['name'] ) );
- }
- }
-
- $headers[] = sprintf( 'From: %1$s <%2$s>', $data['name'], $from_email );
- $headers[] = sprintf( 'Reply-To: %1$s <%2$s>', $data['name'], $data['source'] );
-
- // Make sure to pass the title through the normal sharing filters.
- $title = $data['sharing_source']->get_share_title( $data['post']->ID );
-
- /**
- * Filter the Sharing Email Send Post Subject.
- *
- * @module sharedaddy
- *
- * @since 5.8.0
- *
- * @param string $var Sharing Email Send Post Subject. Default is "Shared Post".
- */
- $subject = apply_filters( 'wp_sharing_email_send_post_subject', '[' . __( 'Shared Post', 'jetpack' ) . '] ' . $title );
-
- wp_mail( $data['target'], $subject, $content, $headers );
-}
-
-
-/* Checks for spam using akismet if available. */
-/* Return $data as it if email about to be send out is not spam. */
-function sharing_email_check_for_spam_via_akismet( $data ) {
-
- if ( ! Jetpack::is_akismet_active() )
- return $data;
-
- // Prepare the body_request for akismet
- $body_request = array(
- 'blog' => get_option( 'home' ),
- 'permalink' => $data['sharing_source']->get_share_url( $data['post']->ID ),
- 'comment_type' => 'share',
- 'comment_author' => $data['name'],
- 'comment_author_email' => $data['source'],
- 'comment_content' => sharing_email_send_post_content( $data ),
- 'user_agent' => ( isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : null ),
- );
-
- if ( method_exists( 'Akismet', 'http_post' ) ) {
- $body_request['user_ip'] = Akismet::get_ip_address();
- $response = Akismet::http_post( build_query( $body_request ), 'comment-check' );
- } else {
- global $akismet_api_host, $akismet_api_port;
- $body_request['user_ip'] = ( isset( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : null );
- $response = akismet_http_post( build_query( $body_request ), $akismet_api_host, '/1.1/comment-check', $akismet_api_port );
- }
-
- // The Response is spam lets not send the email.
- if ( ! empty( $response ) && isset( $response[1] ) && 'true' == trim( $response[1] ) ) { // 'true' is spam
- return false; // don't send the email
- }
- return $data;
-}
-
-function sharing_email_send_post_content( $data ) {
- /* translators: included in email when post is shared via email. First item is sender's name. Second is sender's email address. */
- $content = sprintf( __( '%1$s (%2$s) thinks you may be interested in the following post:', 'jetpack' ), $data['name'], $data['source'] );
- $content .= "\n\n";
- // Make sure to pass the title and URL through the normal sharing filters.
- $content .= $data['sharing_source']->get_share_title( $data['post']->ID ) . "\n";
- $content .= $data['sharing_source']->get_share_url( $data['post']->ID ) . "\n";
- return $content;
-}
-
-function sharing_add_meta_box() {
- global $post;
- if ( empty( $post ) ) { // If a current post is not defined, such as when editing a comment.
- return;
- }
-
- /**
- * Filter whether to display the Sharing Meta Box or not.
- *
- * @module sharedaddy
- *
- * @since 3.8.0
- *
- * @param bool true Display Sharing Meta Box.
- * @param $post Post.
- */
- if ( ! apply_filters( 'sharing_meta_box_show', true, $post ) ) {
- return;
- }
-
- $post_types = get_post_types( array( 'public' => true ) );
- /**
- * Filter the Sharing Meta Box title.
- *
- * @module sharedaddy
- *
- * @since 2.2.0
- *
- * @param string $var Sharing Meta Box title. Default is "Sharing".
- */
- $title = apply_filters( 'sharing_meta_box_title', __( 'Sharing', 'jetpack' ) );
- if ( $post->ID !== get_option( 'page_for_posts' ) ) {
- foreach( $post_types as $post_type ) {
- add_meta_box( 'sharing_meta', $title, 'sharing_meta_box_content', $post_type, 'side', 'default' );
- }
- }
-}
-
-
-function sharing_meta_box_content( $post ) {
- /**
- * Fires before the sharing meta box content.
- *
- * @module sharedaddy
- *
- * @since 2.2.0
- *
- * @param WP_Post $post The post to share.
- */
- do_action( 'start_sharing_meta_box_content', $post );
-
- $disabled = get_post_meta( $post->ID, 'sharing_disabled', true ); ?>
-
- <p>
- <label for="enable_post_sharing">
- <input type="checkbox" name="enable_post_sharing" id="enable_post_sharing" value="1" <?php checked( !$disabled ); ?>>
- <?php _e( 'Show sharing buttons.' , 'jetpack'); ?>
- </label>
- <input type="hidden" name="sharing_status_hidden" value="1" />
- </p>
-
- <?php
- /**
- * Fires after the sharing meta box content.
- *
- * @module sharedaddy
- *
- * @since 2.2.0
- *
- * @param WP_Post $post The post to share.
- */
- do_action( 'end_sharing_meta_box_content', $post );
-}
-
-function sharing_meta_box_save( $post_id ) {
- if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
- return $post_id;
-
- // Record sharing disable
- if ( isset( $_POST['post_type'] ) && ( $post_type_object = get_post_type_object( $_POST['post_type'] ) ) && $post_type_object->public ) {
- if ( current_user_can( 'edit_post', $post_id ) ) {
- if ( isset( $_POST['sharing_status_hidden'] ) ) {
- if ( !isset( $_POST['enable_post_sharing'] ) ) {
- update_post_meta( $post_id, 'sharing_disabled', 1 );
- } else {
- delete_post_meta( $post_id, 'sharing_disabled' );
- }
- }
- }
- }
-
- return $post_id;
-}
-
-function sharing_meta_box_protected( $protected, $meta_key, $meta_type ) {
- if ( 'sharing_disabled' == $meta_key )
- $protected = true;
-
- return $protected;
-}
-
-add_filter( 'is_protected_meta', 'sharing_meta_box_protected', 10, 3 );
-
-function sharing_plugin_settings( $links ) {
- $settings_link = '<a href="options-general.php?page=sharing.php">'.__( 'Settings', 'jetpack' ).'</a>';
- array_unshift( $links, $settings_link );
- return $links;
-}
-
-function sharing_add_plugin_settings($links, $file) {
- if ( $file == basename( dirname( __FILE__ ) ).'/'.basename( __FILE__ ) ) {
- $links[] = '<a href="options-general.php?page=sharing.php">' . __( 'Settings', 'jetpack' ) . '</a>';
- $links[] = '<a href="http://support.wordpress.com/sharing/" rel="noopener noreferrer" target="_blank">' . __( 'Support', 'jetpack' ) . '</a>';
- }
-
- return $links;
-}
-
-function sharing_init() {
- if ( Jetpack_Options::get_option_and_ensure_autoload( 'sharedaddy_disable_resources', '0' ) ) {
- add_filter( 'sharing_js', 'sharing_disable_js' );
- remove_action( 'wp_head', 'sharing_add_header', 1 );
- }
-}
-
-function sharing_disable_js() {
- return false;
-}
-
-function sharing_global_resources() {
- $disable = get_option( 'sharedaddy_disable_resources' );
-?>
-<tr valign="top">
- <th scope="row"><label for="disable_css"><?php _e( 'Disable CSS and JS', 'jetpack' ); ?></label></th>
- <td>
- <input id="disable_css" type="checkbox" name="disable_resources" <?php if ( $disable == 1 ) echo ' checked="checked"'; ?>/> <small><em><?php _e( 'Advanced. If this option is checked, you must include these files in your theme manually for the sharing links to work.', 'jetpack' ); ?></em></small>
- </td>
-</tr>
-<?php
-}
-
-function sharing_global_resources_save() {
- update_option( 'sharedaddy_disable_resources', isset( $_POST['disable_resources'] ) ? 1 : 0 );
-}
-
-function sharing_email_dialog() {
- require_once plugin_dir_path( __FILE__ ) . 'recaptcha.php';
-
- $recaptcha = new Jetpack_ReCaptcha( RECAPTCHA_PUBLIC_KEY, RECAPTCHA_PRIVATE_KEY );
- echo $recaptcha->get_recaptcha_html(); // xss ok
-}
-
-function sharing_email_check( $true, $post, $data ) {
- require_once plugin_dir_path( __FILE__ ) . 'recaptcha.php';
-
- $recaptcha = new Jetpack_ReCaptcha( RECAPTCHA_PUBLIC_KEY, RECAPTCHA_PRIVATE_KEY );
- $response = ! empty( $_POST['g-recaptcha-response'] ) ? $_POST['g-recaptcha-response'] : '';
- $result = $recaptcha->verify( $response, $_SERVER['REMOTE_ADDR'] );
-
- return ( true === $result );
-}
-
-add_action( 'init', 'sharing_init' );
-add_action( 'add_meta_boxes', 'sharing_add_meta_box' );
-add_action( 'save_post', 'sharing_meta_box_save' );
-add_action( 'edit_attachment', 'sharing_meta_box_save' );
-add_action( 'sharing_email_send_post', 'sharing_email_send_post' );
-add_filter( 'sharing_email_can_send', 'sharing_email_check_for_spam_via_akismet' );
-add_action( 'sharing_global_options', 'sharing_global_resources', 30 );
-add_action( 'sharing_admin_update', 'sharing_global_resources_save' );
-add_action( 'plugin_action_links_'.basename( dirname( __FILE__ ) ).'/'.basename( __FILE__ ), 'sharing_plugin_settings', 10, 4 );
-add_filter( 'plugin_row_meta', 'sharing_add_plugin_settings', 10, 2 );
-
-if ( defined( 'RECAPTCHA_PUBLIC_KEY' ) && defined( 'RECAPTCHA_PRIVATE_KEY' ) ) {
- add_action( 'sharing_email_dialog', 'sharing_email_dialog' );
- add_filter( 'sharing_email_check', 'sharing_email_check', 10, 3 );
-}
diff --git a/plugins/jetpack/modules/sharedaddy/sharing-service.php b/plugins/jetpack/modules/sharedaddy/sharing-service.php
deleted file mode 100644
index 3f86053e..00000000
--- a/plugins/jetpack/modules/sharedaddy/sharing-service.php
+++ /dev/null
@@ -1,938 +0,0 @@
-<?php
-
-include_once dirname( __FILE__ ) . '/sharing-sources.php';
-
-define( 'WP_SHARING_PLUGIN_VERSION', JETPACK__VERSION );
-
-class Sharing_Service {
- private $global = false;
- public $default_sharing_label = '';
-
- public function __construct() {
- $this->default_sharing_label = __( 'Share this:', 'jetpack' );
- }
-
- /**
- * Gets a generic list of all services, without any config
- */
- public function get_all_services_blog() {
- $options = get_option( 'sharing-options' );
-
- $all = $this->get_all_services();
- $services = array();
-
- foreach ( $all as $id => $name ) {
- if ( isset( $all[ $id ] ) ) {
- $config = array();
-
- // Pre-load custom modules otherwise they won't know who they are
- if ( substr( $id, 0, 7 ) == 'custom-' && is_array( $options[ $id ] ) ) {
- $config = $options[ $id ];
- }
-
- $services[ $id ] = new $all[ $id ]( $id, $config );
- }
- }
-
- return $services;
- }
-
- /**
- * Gets a list of all available service names and classes
- */
- public function get_all_services( $include_custom = true ) {
- // Default services
- // if you update this list, please update the REST API tests
- // in bin/tests/api/suites/SharingTest.php
- $services = array(
- 'print' => 'Share_Print',
- 'facebook' => 'Share_Facebook',
- 'linkedin' => 'Share_LinkedIn',
- 'reddit' => 'Share_Reddit',
- 'twitter' => 'Share_Twitter',
- 'tumblr' => 'Share_Tumblr',
- 'pinterest' => 'Share_Pinterest',
- 'pocket' => 'Share_Pocket',
- 'telegram' => 'Share_Telegram',
- 'jetpack-whatsapp' => 'Jetpack_Share_WhatsApp',
- 'skype' => 'Share_Skype',
-
- // Deprecated
- 'google-plus-1' => 'Share_GooglePlus1',
- );
-
- /**
- * Filters if Email Sharing is enabled.
- *
- * E-Mail sharing is often problematic due to spam concerns, so this filter enables it to be quickly and simply toggled.
- * @module sharedaddy
- *
- * @since 5.1.0
- *
- * @param bool $email Is e-mail sharing enabled? Default false if Akismet is not active or true if Akismet is active.
- */
- if ( apply_filters( 'sharing_services_email', Jetpack::is_akismet_active() ) ) {
- $services['email'] = 'Share_Email';
- }
-
- if ( is_multisite() && is_plugin_active( 'press-this/press-this-plugin.php' ) ) {
- $services['press-this'] = 'Share_PressThis';
- }
-
- if ( $include_custom ) {
- // Add any custom services in
- $options = $this->get_global_options();
- foreach ( (array) $options['custom'] as $custom_id ) {
- $services[ $custom_id ] = 'Share_Custom';
- }
- }
-
- /**
- * Filters the list of available Sharing Services.
- *
- * @module sharedaddy
- *
- * @since 1.1.0
- *
- * @param array $services Array of all available Sharing Services.
- */
- return apply_filters( 'sharing_services', $services );
- }
-
- public function new_service( $label, $url, $icon ) {
- // Validate
- $label = trim( wp_html_excerpt( wp_kses( $label, array() ), 30 ) );
- $url = trim( esc_url_raw( $url ) );
- $icon = trim( esc_url_raw( $icon ) );
-
- if ( $label && $url && $icon ) {
- $options = get_option( 'sharing-options' );
- if ( ! is_array( $options ) ) {
- $options = array();
- }
-
- $service_id = 'custom-' . time();
-
- // Add a new custom service
- $options['global']['custom'][] = $service_id;
- if ( false !== $this->global ) {
- $this->global['custom'][] = $service_id;
- }
-
- update_option( 'sharing-options', $options );
-
- // Create a custom service and set the options for it
- $service = new Share_Custom(
- $service_id, array(
- 'name' => $label,
- 'url' => $url,
- 'icon' => $icon,
- )
- );
- $this->set_service( $service_id, $service );
-
- // Return the service
- return $service;
- }
-
- return false;
- }
-
- public function delete_service( $service_id ) {
- $options = get_option( 'sharing-options' );
- if ( isset( $options[ $service_id ] ) ) {
- unset( $options[ $service_id ] );
- }
-
- $key = array_search( $service_id, $options['global']['custom'] );
- if ( $key !== false ) {
- unset( $options['global']['custom'][ $key ] );
- }
-
- update_option( 'sharing-options', $options );
- return true;
- }
-
- public function set_blog_services( array $visible, array $hidden ) {
- $services = $this->get_all_services();
- // Validate the services
- $available = array_keys( $services );
-
- // Only allow services that we have defined
- $hidden = array_intersect( $hidden, $available );
- $visible = array_intersect( $visible, $available );
-
- // Ensure we don't have the same ones in hidden and visible
- $hidden = array_diff( $hidden, $visible );
-
- /**
- * Control the state of the list of sharing services.
- *
- * @module sharedaddy
- *
- * @since 1.1.0
- *
- * @param array $args {
- * Array of options describing the state of the sharing services.
- *
- * @type array $services List of all available service names and classes.
- * @type array $available Validated list of all available service names and classes.
- * @type array $hidden List of services hidden behind a "More" button.
- * @type array $visible List of visible services.
- * @type array $this->get_blog_services() Array of Sharing Services currently enabled.
- * }
- */
- do_action(
- 'sharing_get_services_state', array(
- 'services' => $services,
- 'available' => $available,
- 'hidden' => $hidden,
- 'visible' => $visible,
- 'currently_enabled' => $this->get_blog_services(),
- )
- );
-
- return update_option(
- 'sharing-services', array(
- 'visible' => $visible,
- 'hidden' => $hidden,
- )
- );
- }
-
- public function get_blog_services() {
- $options = get_option( 'sharing-options' );
- $enabled = get_option( 'sharing-services' );
- $services = $this->get_all_services();
-
- /**
- * Check if options exist and are well formatted.
- * This avoids issues on sites with corrupted options.
- * @see https://github.com/Automattic/jetpack/issues/6121
- */
- if ( ! is_array( $options ) || ! isset( $options['button_style'], $options['global'] ) ) {
- $global_options = array( 'global' => $this->get_global_options() );
- $options = is_array( $options )
- ? array_merge( $options, $global_options )
- : $global_options;
- }
-
- $global = $options['global'];
-
- // Default services
- if ( ! is_array( $enabled ) ) {
- $enabled = array(
- 'visible' => array(),
- 'hidden' => array(),
- );
-
- /**
- * Filters the list of default Sharing Services.
- *
- * @module sharedaddy
- *
- * @since 1.1.0
- *
- * @param array $enabled Array of default Sharing Services.
- */
- $enabled = apply_filters( 'sharing_default_services', $enabled );
- }
-
- // Cleanup after any filters that may have produced duplicate services
- if ( is_array( $enabled['visible'] ) ) {
- $enabled['visible'] = array_unique( $enabled['visible'] );
- } else {
- $enabled['visible'] = array();
- }
-
- if ( is_array( $enabled['hidden'] ) ) {
- $enabled['hidden'] = array_unique( $enabled['hidden'] );
- } else {
- $enabled['hidden'] = array();
- }
-
- // Form the enabled services
- $blog = array(
- 'visible' => array(),
- 'hidden' => array(),
- );
-
- foreach ( $blog as $area => $stuff ) {
- foreach ( (array) $enabled[ $area ] as $service ) {
- if ( isset( $services[ $service ] ) ) {
- if ( ! isset( $options[ $service ] ) || ! is_array( $options[ $service ] ) ) {
- $options[ $service ] = array();
- }
- $blog[ $area ][ $service ] = new $services[ $service ]( $service, array_merge( $global, $options[ $service ] ) );
- }
- }
- }
-
- /**
- * Filters the list of enabled Sharing Services.
- *
- * @module sharedaddy
- *
- * @since 1.1.0
- *
- * @param array $blog Array of enabled Sharing Services.
- */
- $blog = apply_filters( 'sharing_services_enabled', $blog );
-
- // Add CSS for NASCAR
- if ( count( $blog['visible'] ) || count( $blog['hidden'] ) ) {
- add_filter( 'post_flair_block_css', 'post_flair_service_enabled_sharing' );
- }
-
- // Convenience for checking if a service is present
- $blog['all'] = array_flip( array_merge( array_keys( $blog['visible'] ), array_keys( $blog['hidden'] ) ) );
- return $blog;
- }
-
- public function get_service( $service_name ) {
- $services = $this->get_blog_services();
-
- if ( isset( $services['visible'][ $service_name ] ) ) {
- return $services['visible'][ $service_name ];
- }
-
- if ( isset( $services['hidden'][ $service_name ] ) ) {
- return $services['hidden'][ $service_name ];
- }
-
- return false;
- }
-
- public function set_global_options( $data ) {
- $options = get_option( 'sharing-options' );
-
- // No options yet
- if ( ! is_array( $options ) ) {
- $options = array();
- }
-
- // Defaults
- $options['global'] = array(
- 'button_style' => 'icon-text',
- 'sharing_label' => $this->default_sharing_label,
- 'open_links' => 'same',
- 'show' => array(),
- 'custom' => isset( $options['global']['custom'] ) ? $options['global']['custom'] : array(),
- );
-
- /**
- * Filters global sharing settings.
- *
- * @module sharedaddy
- *
- * @since 1.1.0
- *
- * @param array $options['global'] Array of global sharing settings.
- */
- $options['global'] = apply_filters( 'sharing_default_global', $options['global'] );
-
- // Validate options and set from our data
- if ( isset( $data['button_style'] ) && in_array( $data['button_style'], array( 'icon-text', 'icon', 'text', 'official' ) ) ) {
- $options['global']['button_style'] = $data['button_style'];
- }
-
- if ( isset( $data['sharing_label'] ) ) {
- if ( $this->default_sharing_label === $data['sharing_label'] ) {
- $options['global']['sharing_label'] = false;
- } else {
- $options['global']['sharing_label'] = trim( wp_kses( stripslashes( $data['sharing_label'] ), array() ) );
- }
- }
-
- if ( isset( $data['open_links'] ) && in_array( $data['open_links'], array( 'new', 'same' ) ) ) {
- $options['global']['open_links'] = $data['open_links'];
- }
-
- $shows = array_values( get_post_types( array( 'public' => true ) ) );
- $shows[] = 'index';
- if ( isset( $data['show'] ) ) {
- if ( is_scalar( $data['show'] ) ) {
- switch ( $data['show'] ) {
- case 'posts':
- $data['show'] = array( 'post', 'page' );
- break;
- case 'index':
- $data['show'] = array( 'index' );
- break;
- case 'posts-index':
- $data['show'] = array( 'post', 'page', 'index' );
- break;
- }
- }
-
- if ( $data['show'] = array_intersect( $data['show'], $shows ) ) {
- $options['global']['show'] = $data['show'];
- }
- }
-
- update_option( 'sharing-options', $options );
- return $options['global'];
- }
-
- public function get_global_options() {
- if ( $this->global === false ) {
- $options = get_option( 'sharing-options' );
-
- if ( is_array( $options ) && isset( $options['global'] ) && is_array( $options['global'] ) ) {
- $this->global = $options['global'];
- } else {
- $this->global = $this->set_global_options( $options['global'] );
- }
- }
-
- if ( ! isset( $this->global['show'] ) ) {
- $this->global['show'] = array( 'post', 'page' );
- } elseif ( is_scalar( $this->global['show'] ) ) {
- switch ( $this->global['show'] ) {
- case 'posts':
- $this->global['show'] = array( 'post', 'page' );
- break;
- case 'index':
- $this->global['show'] = array( 'index' );
- break;
- case 'posts-index':
- $this->global['show'] = array( 'post', 'page', 'index' );
- break;
- }
- }
-
- if ( false === $this->global['sharing_label'] ) {
- $this->global['sharing_label'] = $this->default_sharing_label;
- }
-
- return $this->global;
- }
-
- public function set_service( $id, Sharing_Source $service ) {
- // Update the options for this service
- $options = get_option( 'sharing-options' );
-
- // No options yet
- if ( ! is_array( $options ) ) {
- $options = array();
- }
-
- /**
- * Get the state of a sharing button.
- *
- * @module sharedaddy
- *
- * @since 1.1.0
- *
- * @param array $args {
- * State of a sharing button.
- *
- * @type string $id Service ID.
- * @type array $options Array of all sharing options.
- * @type array $service Details about a service.
- * }
- */
- do_action(
- 'sharing_get_button_state', array(
- 'id' => $id,
- 'options' => $options,
- 'service' => $service,
- )
- );
-
- $options[ $id ] = $service->get_options();
-
- update_option( 'sharing-options', array_filter( $options ) );
- }
-
- // Soon to come to a .org plugin near you!
- public function get_total( $service_name = false, $post_id = false, $_blog_id = false ) {
- global $wpdb, $blog_id;
- if ( ! $_blog_id ) {
- $_blog_id = $blog_id;
- }
- if ( $service_name == false ) {
- if ( $post_id > 0 ) {
- // total number of shares for this post
- return (int) $wpdb->get_var( $wpdb->prepare( 'SELECT SUM( count ) FROM sharing_stats WHERE blog_id = %d AND post_id = %d', $_blog_id, $post_id ) );
- } else {
- // total number of shares for this blog
- return (int) $wpdb->get_var( $wpdb->prepare( 'SELECT SUM( count ) FROM sharing_stats WHERE blog_id = %d', $_blog_id ) );
- }
- }
-
- if ( $post_id > 0 ) {
- return (int) $wpdb->get_var( $wpdb->prepare( 'SELECT SUM( count ) FROM sharing_stats WHERE blog_id = %d AND post_id = %d AND share_service = %s', $_blog_id, $post_id, $service_name ) );
- } else {
- return (int) $wpdb->get_var( $wpdb->prepare( 'SELECT SUM( count ) FROM sharing_stats WHERE blog_id = %d AND share_service = %s', $_blog_id, $service_name ) );
- }
- }
-
- public function get_services_total( $post_id = false ) {
- $totals = array();
- $services = $this->get_blog_services();
-
- if ( ! empty( $services ) && isset( $services['all'] ) ) {
- foreach ( $services['all'] as $key => $value ) {
- $totals[ $key ] = new Sharing_Service_Total( $key, $this->get_total( $key, $post_id ) );
- }
- }
- usort( $totals, array( 'Sharing_Service_Total', 'cmp' ) );
-
- return $totals;
- }
-
- public function get_posts_total() {
- $totals = array();
- global $wpdb, $blog_id;
-
- $my_data = $wpdb->get_results( $wpdb->prepare( 'SELECT post_id as id, SUM( count ) as total FROM sharing_stats WHERE blog_id = %d GROUP BY post_id ORDER BY count DESC ', $blog_id ) );
-
- if ( ! empty( $my_data ) ) {
- foreach ( $my_data as $row ) {
- $totals[] = new Sharing_Post_Total( $row->id, $row->total );
- }
- }
-
- usort( $totals, array( 'Sharing_Post_Total', 'cmp' ) );
-
- return $totals;
- }
-}
-
-class Sharing_Service_Total {
- public $id = '';
- public $name = '';
- public $service = '';
- public $total = 0;
-
- public function __construct( $id, $total ) {
- $services = new Sharing_Service();
- $this->id = esc_html( $id );
- $this->service = $services->get_service( $id );
- $this->total = (int) $total;
-
- $this->name = $this->service->get_name();
- }
-
- static function cmp( $a, $b ) {
- if ( $a->total == $b->total ) {
- return $a->name < $b->name;
- }
- return $a->total < $b->total;
- }
-}
-
-class Sharing_Post_Total {
- public $id = 0;
- public $total = 0;
- public $title = '';
- public $url = '';
-
- public function __construct( $id, $total ) {
- $this->id = (int) $id;
- $this->total = (int) $total;
- $this->title = get_the_title( $this->id );
- $this->url = get_permalink( $this->id );
- }
-
- static function cmp( $a, $b ) {
- if ( $a->total == $b->total ) {
- return $a->id < $b->id;
- }
- return $a->total < $b->total;
- }
-}
-
-function sharing_register_post_for_share_counts( $post_id ) {
- global $jetpack_sharing_counts;
-
- if ( ! isset( $jetpack_sharing_counts ) || ! is_array( $jetpack_sharing_counts ) ) {
- $jetpack_sharing_counts = array();
- }
-
- $jetpack_sharing_counts[ (int) $post_id ] = get_permalink( $post_id );
-}
-
-function sharing_maybe_enqueue_scripts() {
- $sharer = new Sharing_Service();
- $global_options = $sharer->get_global_options();
-
- $enqueue = false;
- if ( is_singular() && in_array( get_post_type(), $global_options['show'] ) ) {
- $enqueue = true;
- } elseif ( in_array( 'index', $global_options['show'] ) && ( is_home() || is_front_page() || is_archive() || is_search() || in_array( get_post_type(), $global_options['show'] ) ) ) {
- $enqueue = true;
- }
-
- /**
- * Filter to decide when sharing scripts should be enqueued.
- *
- * @module sharedaddy
- *
- * @since 3.2.0
- *
- * @param bool $enqueue Decide if the sharing scripts should be enqueued.
- */
- return (bool) apply_filters( 'sharing_enqueue_scripts', $enqueue );
-}
-
-function sharing_add_footer() {
- if ( Jetpack_AMP_Support::is_amp_request() ) {
- return;
- }
-
- global $jetpack_sharing_counts;
-
- /**
- * Filter all JavaScript output by the sharing module.
- *
- * @module sharedaddy
- *
- * @since 1.1.0
- *
- * @param bool true Control whether the sharing module should add any JavaScript to the site. Default to true.
- */
- if ( apply_filters( 'sharing_js', true ) && sharing_maybe_enqueue_scripts() ) {
-
- /**
- * Filter the display of sharing counts next to the sharing buttons.
- *
- * @module sharedaddy
- *
- * @since 3.2.0
- *
- * @param bool true Control the display of counters next to the sharing buttons. Default to true.
- */
- if ( apply_filters( 'jetpack_sharing_counts', true ) && is_array( $jetpack_sharing_counts ) && count( $jetpack_sharing_counts ) ) :
- $sharing_post_urls = array_filter( $jetpack_sharing_counts );
- if ( $sharing_post_urls ) :
- ?>
-
- <script type="text/javascript">
- window.WPCOM_sharing_counts = <?php echo json_encode( array_flip( $sharing_post_urls ) ); ?>;
- </script>
- <?php
- endif;
- endif;
-
- wp_enqueue_script( 'sharing-js' );
- $sharing_js_options = array(
- 'lang' => get_base_recaptcha_lang_code(),
- /** This filter is documented in modules/sharedaddy/sharing-service.php */
- 'counts' => apply_filters( 'jetpack_sharing_counts', true ),
- 'is_stats_active' => Jetpack::is_module_active( 'stats' ),
- );
- wp_localize_script( 'sharing-js', 'sharing_js_options', $sharing_js_options );
- }
- $sharer = new Sharing_Service();
- $enabled = $sharer->get_blog_services();
- foreach ( array_merge( $enabled['visible'], $enabled['hidden'] ) as $service ) {
- $service->display_footer();
- }
-}
-
-function sharing_add_header() {
- $sharer = new Sharing_Service();
- $enabled = $sharer->get_blog_services();
-
- foreach ( array_merge( $enabled['visible'], $enabled['hidden'] ) as $service ) {
- $service->display_header();
- }
-
- if ( count( $enabled['all'] ) > 0 && sharing_maybe_enqueue_scripts() ) {
- wp_enqueue_style( 'sharedaddy', plugin_dir_url( __FILE__ ) . 'sharing.css', array(), JETPACK__VERSION );
- wp_enqueue_style( 'social-logos' );
- }
-
-}
-add_action( 'wp_head', 'sharing_add_header', 1 );
-
-function sharing_process_requests() {
- global $post;
-
- // Only process if: single post and share=X defined
- if ( ( is_page() || is_single() ) && isset( $_GET['share'] ) ) {
- $sharer = new Sharing_Service();
-
- $service = $sharer->get_service( $_GET['share'] );
- if ( $service ) {
- $service->process_request( $post, $_POST );
- }
- }
-}
-add_action( 'template_redirect', 'sharing_process_requests', 9 );
-
-function sharing_display( $text = '', $echo = false ) {
- global $post, $wp_current_filter;
-
- require_once JETPACK__PLUGIN_DIR . '/sync/class.jetpack-sync-settings.php';
- if ( Jetpack_Sync_Settings::is_syncing() ) {
- return $text;
- }
-
- if ( empty( $post ) ) {
- return $text;
- }
-
- if ( ( is_preview() || is_admin() ) && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
- return $text;
- }
-
- // Don't output flair on excerpts
- if ( in_array( 'get_the_excerpt', (array) $wp_current_filter ) ) {
- return $text;
- }
-
- // Don't allow flair to be added to the_content more than once (prevent infinite loops)
- $done = false;
- foreach ( $wp_current_filter as $filter ) {
- if ( 'the_content' == $filter ) {
- if ( $done ) {
- return $text;
- } else {
- $done = true;
- }
- }
- }
-
- // check whether we are viewing the front page and whether the front page option is checked
- $options = get_option( 'sharing-options' );
- $display_options = $options['global']['show'];
-
- if ( is_front_page() && ( is_array( $display_options ) && ! in_array( 'index', $display_options ) ) ) {
- return $text;
- }
-
- if ( is_attachment() && in_array( 'the_excerpt', (array) $wp_current_filter ) ) {
- // Many themes run the_excerpt() conditionally on an attachment page, then run the_content().
- // We only want to output the sharing buttons once. Let's stick with the_content().
- return $text;
- }
-
- $sharer = new Sharing_Service();
- $global = $sharer->get_global_options();
-
- $show = false;
- if ( ! is_feed() ) {
- if ( is_singular() && in_array( get_post_type(), $global['show'] ) ) {
- $show = true;
- } elseif ( in_array( 'index', $global['show'] ) && ( is_home() || is_front_page() || is_archive() || is_search() || in_array( get_post_type(), $global['show'] ) ) ) {
- $show = true;
- }
- }
-
- /**
- * Filter to decide if sharing buttons should be displayed.
- *
- * @module sharedaddy
- *
- * @since 1.1.0
- *
- * @param bool $show Should the sharing buttons be displayed.
- * @param WP_Post $post The post to share.
- */
- $show = apply_filters( 'sharing_show', $show, $post );
-
- // Disabled for this post?
- $switched_status = get_post_meta( $post->ID, 'sharing_disabled', false );
-
- if ( ! empty( $switched_status ) ) {
- $show = false;
- }
-
- // Private post?
- $post_status = get_post_status( $post->ID );
-
- if ( 'private' === $post_status ) {
- $show = false;
- }
-
- // Allow to be used on P2 ajax requests for latest posts.
- if ( defined( 'DOING_AJAX' ) && DOING_AJAX && isset( $_REQUEST['action'] ) && 'get_latest_posts' == $_REQUEST['action'] ) {
- $show = true;
- }
-
- $sharing_content = '';
- $enabled = false;
-
- if ( $show ) {
- /**
- * Filters the list of enabled Sharing Services.
- *
- * @module sharedaddy
- *
- * @since 2.2.3
- *
- * @param array $sharer->get_blog_services() Array of Sharing Services currently enabled.
- */
- $enabled = apply_filters( 'sharing_enabled', $sharer->get_blog_services() );
-
- if ( count( $enabled['all'] ) > 0 ) {
- global $post;
-
- $dir = get_option( 'text_direction' );
-
- // Wrapper
- $sharing_content .= '<div class="sharedaddy sd-sharing-enabled"><div class="robots-nocontent sd-block sd-social sd-social-' . $global['button_style'] . ' sd-sharing">';
- if ( $global['sharing_label'] != '' ) {
- $sharing_content .= sprintf(
- /**
- * Filter the sharing buttons' headline structure.
- *
- * @module sharedaddy
- *
- * @since 4.4.0
- *
- * @param string $sharing_headline Sharing headline structure.
- * @param string $global['sharing_label'] Sharing title.
- * @param string $sharing Module name.
- */
- apply_filters( 'jetpack_sharing_headline_html', '<h3 class="sd-title">%s</h3>', $global['sharing_label'], 'sharing' ),
- esc_html( $global['sharing_label'] )
- );
- }
- $sharing_content .= '<div class="sd-content"><ul>';
-
- // Visible items
- $visible = '';
- foreach ( $enabled['visible'] as $id => $service ) {
- $klasses = array( 'share-' . $service->get_class() );
- if ( $service->is_deprecated() ) {
- if ( ! current_user_can( 'manage_options' ) ) {
- continue;
- }
- $klasses[] = 'share-deprecated';
- }
- // Individual HTML for sharing service
- $visible .= '<li class="' . implode( ' ', $klasses ) . '">' . $service->get_display( $post ) . '</li>';
- }
-
- $parts = array();
- $parts[] = $visible;
- if ( count( $enabled['hidden'] ) > 0 ) {
- if ( count( $enabled['visible'] ) > 0 ) {
- $expand = __( 'More', 'jetpack' );
- } else {
- $expand = __( 'Share', 'jetpack' );
- }
- $parts[] = '<li><a href="#" class="sharing-anchor sd-button share-more"><span>' . $expand . '</span></a></li>';
- }
-
- if ( $dir == 'rtl' ) {
- $parts = array_reverse( $parts );
- }
-
- $sharing_content .= implode( '', $parts );
- $sharing_content .= '<li class="share-end"></li></ul>';
-
- if ( count( $enabled['hidden'] ) > 0 ) {
- $sharing_content .= '<div class="sharing-hidden"><div class="inner" style="display: none;';
-
- if ( count( $enabled['hidden'] ) == 1 ) {
- $sharing_content .= 'width:150px;';
- }
-
- $sharing_content .= '">';
-
- if ( count( $enabled['hidden'] ) == 1 ) {
- $sharing_content .= '<ul style="background-image:none;">';
- } else {
- $sharing_content .= '<ul>';
- }
-
- $count = 1;
- foreach ( $enabled['hidden'] as $id => $service ) {
- // Individual HTML for sharing service
- $klasses = array( 'share-' . $service->get_class() );
- if ( $service->is_deprecated() ) {
- if ( ! current_user_can( 'manage_options' ) ) {
- continue;
- }
- $klasses[] = 'share-deprecated';
- }
- $sharing_content .= '<li class="' . implode( ' ', $klasses ) . '">';
- $sharing_content .= $service->get_display( $post );
- $sharing_content .= '</li>';
-
- if ( ( $count % 2 ) == 0 ) {
- $sharing_content .= '<li class="share-end"></li>';
- }
-
- $count ++;
- }
-
- // End of wrapper
- $sharing_content .= '<li class="share-end"></li></ul></div></div>';
- }
-
- $sharing_content .= '</div></div></div>';
-
- // Register our JS
- if ( defined( 'JETPACK__VERSION' ) ) {
- $ver = JETPACK__VERSION;
- } else {
- $ver = '20141212';
- }
- wp_register_script(
- 'sharing-js',
- Jetpack::get_file_url_for_environment(
- '_inc/build/sharedaddy/sharing.min.js',
- 'modules/sharedaddy/sharing.js'
- ),
- array( 'jquery' ),
- $ver
- );
-
- // Enqueue scripts for the footer
- add_action( 'wp_footer', 'sharing_add_footer' );
- }
- }
-
- /**
- * Filters the content markup of the Jetpack sharing links
- *
- * @module sharedaddy
- *
- * @since 3.8.0
- * @since 6.2.0 Started sending $enabled as a second parameter.
- *
- * @param string $sharing_content Content markup of the Jetpack sharing links
- * @param array $enabled Array of Sharing Services currently enabled.
- */
- $sharing_markup = apply_filters( 'jetpack_sharing_display_markup', $sharing_content, $enabled );
-
- if ( $echo ) {
- echo $text . $sharing_markup;
- } else {
- return $text . $sharing_markup;
- }
-}
-
-add_filter( 'the_content', 'sharing_display', 19 );
-add_filter( 'the_excerpt', 'sharing_display', 19 );
-function get_base_recaptcha_lang_code() {
-
- $base_recaptcha_lang_code_mapping = array(
- 'en' => 'en',
- 'nl' => 'nl',
- 'fr' => 'fr',
- 'fr-be' => 'fr',
- 'fr-ca' => 'fr',
- 'fr-ch' => 'fr',
- 'de' => 'de',
- 'pt' => 'pt',
- 'pt-br' => 'pt',
- 'ru' => 'ru',
- 'es' => 'es',
- 'tr' => 'tr',
- );
-
- $blog_lang_code = function_exists( 'get_blog_lang_code' ) ? get_blog_lang_code() : get_bloginfo( 'language' );
- if ( isset( $base_recaptcha_lang_code_mapping[ $blog_lang_code ] ) ) {
- return $base_recaptcha_lang_code_mapping[ $blog_lang_code ];
- }
-
- // if no base mapping is found return default 'en'
- return 'en';
-}
diff --git a/plugins/jetpack/modules/sharedaddy/sharing-sources.php b/plugins/jetpack/modules/sharedaddy/sharing-sources.php
deleted file mode 100644
index 4ed1d270..00000000
--- a/plugins/jetpack/modules/sharedaddy/sharing-sources.php
+++ /dev/null
@@ -1,1801 +0,0 @@
-<?php
-
-abstract class Sharing_Source {
- public $button_style;
- public $smart;
- protected $open_link_in_new;
- protected $id;
-
- public function __construct( $id, array $settings ) {
- $this->id = $id;
- /**
- * Filter the way sharing links open.
- *
- * By default, sharing links open in a new window.
- *
- * @module sharedaddy
- *
- * @since 3.4.0
- *
- * @param bool true Should Sharing links open in a new window. Default to true.
- */
- $this->open_link_in_new = apply_filters( 'jetpack_open_sharing_in_new_window', true );
-
- if ( isset( $settings['button_style'] ) ) {
- $this->button_style = $settings['button_style'];
- }
-
- if ( isset( $settings['smart'] ) ) {
- $this->smart = $settings['smart'];
- }
- }
-
- public function is_deprecated() {
- return false;
- }
-
- public function http() {
- return is_ssl() ? 'https' : 'http';
- }
-
- public function get_id() {
- return $this->id;
- }
-
- public function get_class() {
- return $this->id;
- }
-
- public function get_share_url( $post_id ) {
- /**
- * Filter the sharing permalink.
- *
- * @module sharedaddy
- *
- * @since 1.2.0
- *
- * @param string get_permalink( $post_id ) Post Permalink.
- * @param int $post_id Post ID.
- * @param int $this->id Sharing ID.
- */
- return apply_filters( 'sharing_permalink', get_permalink( $post_id ), $post_id, $this->id );
- }
-
- public function get_share_title( $post_id ) {
- $post = get_post( $post_id );
- /**
- * Filter the sharing title.
- *
- * @module sharedaddy
- *
- * @since 2.8.0
- *
- * @param string $post->post_title Post Title.
- * @param int $post_id Post ID.
- * @param int $this->id Sharing ID.
- */
- $title = apply_filters( 'sharing_title', $post->post_title, $post_id, $this->id );
-
- return html_entity_decode( wp_kses( $title, null ) );
- }
-
- public function has_custom_button_style() {
- return false;
- }
-
- public function get_link( $url, $text, $title, $query = '', $id = false ) {
- $args = func_get_args();
- $klasses = array( 'share-' . $this->get_class(), 'sd-button' );
-
- if ( 'icon' == $this->button_style || 'icon-text' == $this->button_style ) {
- $klasses[] = 'share-icon';
- }
-
- if ( 'icon' == $this->button_style ) {
- $text = $title;
- $klasses[] = 'no-text';
-
- if ( true == $this->open_link_in_new ) {
- $text .= __( ' (Opens in new window)', 'jetpack' );
- }
- }
-
- /**
- * Filter the sharing display ID.
- *
- * @module sharedaddy
- *
- * @since 3.4.0
- *
- * @param int|false $id Sharing ID.
- * @param object $this Sharing service properties.
- * @param array $args Array of sharing service options.
- */
- $id = apply_filters( 'jetpack_sharing_display_id', $id, $this, $args );
- /**
- * Filter the sharing display link.
- *
- * @module sharedaddy
- *
- * @since 2.8.0
- *
- * @param string $url Post URL.
- * @param object $this Sharing service properties.
- * @param int|false $id Sharing ID.
- * @param array $args Array of sharing service options.
- */
- $url = apply_filters( 'sharing_display_link', $url, $this, $id, $args ); // backwards compatibility
- /**
- * Filter the sharing display link.
- *
- * @module sharedaddy
- *
- * @since 2.8.0
- *
- * @param string $url Post URL.
- * @param object $this Sharing service properties.
- * @param int|false $id Sharing ID.
- * @param array $args Array of sharing service options.
- */
- $url = apply_filters( 'jetpack_sharing_display_link', $url, $this, $id, $args );
- /**
- * Filter the sharing display query.
- *
- * @module sharedaddy
- *
- * @since 2.8.0
- *
- * @param string $query Sharing service URL parameter.
- * @param object $this Sharing service properties.
- * @param int|false $id Sharing ID.
- * @param array $args Array of sharing service options.
- */
- $query = apply_filters( 'jetpack_sharing_display_query', $query, $this, $id, $args );
-
- if ( ! empty( $query ) ) {
- if ( false === stripos( $url, '?' ) ) {
- $url .= '?' . $query;
- } else {
- $url .= '&amp;' . $query;
- }
- }
-
- if ( 'text' == $this->button_style ) {
- $klasses[] = 'no-icon';
- }
-
- /**
- * Filter the sharing display classes.
- *
- * @module sharedaddy
- *
- * @since 3.4.0
- *
- * @param array $klasses Sharing service classes.
- * @param object $this Sharing service properties.
- * @param int|false $id Sharing ID.
- * @param array $args Array of sharing service options.
- */
- $klasses = apply_filters( 'jetpack_sharing_display_classes', $klasses, $this, $id, $args );
- /**
- * Filter the sharing display title.
- *
- * @module sharedaddy
- *
- * @since 3.4.0
- *
- * @param string $title Sharing service title.
- * @param object $this Sharing service properties.
- * @param int|false $id Sharing ID.
- * @param array $args Array of sharing service options.
- */
- $title = apply_filters( 'jetpack_sharing_display_title', $title, $this, $id, $args );
- /**
- * Filter the sharing display text.
- *
- * @module sharedaddy
- *
- * @since 3.4.0
- *
- * @param string $text Sharing service text.
- * @param object $this Sharing service properties.
- * @param int|false $id Sharing ID.
- * @param array $args Array of sharing service options.
- */
- $text = apply_filters( 'jetpack_sharing_display_text', $text, $this, $id, $args );
-
- return sprintf(
- '<a rel="nofollow%s" data-shared="%s" class="%s" href="%s"%s title="%s"><span%s>%s</span></a>',
- ( true == $this->open_link_in_new ) ? ' noopener noreferrer' : '',
- ( $id ? esc_attr( $id ) : '' ),
- implode( ' ', $klasses ),
- $url,
- ( true == $this->open_link_in_new ) ? ' target="_blank"' : '',
- $title,
- ( 'icon' == $this->button_style ) ? '></span><span class="sharing-screen-reader-text"' : '',
- $text
- );
- }
-
- /**
- * Get an unfiltered post permalink to use when generating a sharing URL with get_link.
- * Use instead of get_share_url for non-official styles as get_permalink ensures that process_request
- * will be executed more reliably, in the case that the filtered URL uses a service that strips query parameters.
- *
- * @since 3.7.0
- * @param int $post_id Post ID.
- * @uses get_permalink
- * @return string get_permalink( $post_id ) Post permalink.
- */
- public function get_process_request_url( $post_id ) {
- return get_permalink( $post_id );
- }
-
- abstract public function get_name();
- abstract public function get_display( $post );
-
- public function display_header() {
- }
-
- public function display_footer() {
- }
-
- public function has_advanced_options() {
- return false;
- }
-
- public function display_preview( $echo = true, $force_smart = false, $button_style = null ) {
- $text = '&nbsp;';
- $button_style = ( ! empty( $button_style ) ) ? $button_style : $this->button_style;
- if ( ! $this->smart && ! $force_smart ) {
- if ( $button_style != 'icon' ) {
- $text = $this->get_name();
- }
- }
-
- $klasses = array( 'share-' . $this->get_class(), 'sd-button' );
-
- if ( $button_style == 'icon' || $button_style == 'icon-text' ) {
- $klasses[] = 'share-icon';
- }
-
- if ( $button_style == 'icon' ) {
- $klasses[] = 'no-text';
- }
-
- if ( $button_style == 'text' ) {
- $klasses[] = 'no-icon';
- }
-
- $is_deprecated = $this->is_deprecated();
-
- $link = sprintf(
- '<a rel="nofollow" class="%s" href="javascript:void(0)" title="%s"><span>%s</span></a>',
- implode( ' ', $klasses ),
- esc_attr(
- $is_deprecated
- ? sprintf( __( 'The %1$s service has shut down. This sharing button is not displayed to your visitors and should be removed.', 'jetpack' ), $this->get_name() )
- : $this->get_name()
- ),
- esc_html(
- $is_deprecated
- ? sprintf( __( '%1$s has shut down', 'jetpack' ), $this->get_name() )
- : $text
- )
- );
-
- $smart = ( $this->smart || $force_smart ) ? 'on' : 'off';
- $return = "<div class='option option-smart-$smart'>$link</div>";
- if ( $echo ) {
- echo $return;
- }
-
- return $return;
- }
-
- public function get_total( $post = false ) {
- global $wpdb, $blog_id;
-
- $name = strtolower( $this->get_id() );
-
- if ( $post == false ) {
- // get total number of shares for service
- return (int) $wpdb->get_var( $wpdb->prepare( 'SELECT SUM( count ) FROM sharing_stats WHERE blog_id = %d AND share_service = %s', $blog_id, $name ) );
- }
-
- // get total shares for a post
- return (int) $wpdb->get_var( $wpdb->prepare( 'SELECT count FROM sharing_stats WHERE blog_id = %d AND post_id = %d AND share_service = %s', $blog_id, $post->ID, $name ) );
- }
-
- public function get_posts_total() {
- global $wpdb, $blog_id;
-
- $totals = array();
- $name = strtolower( $this->get_id() );
-
- $my_data = $wpdb->get_results( $wpdb->prepare( 'SELECT post_id as id, SUM( count ) as total FROM sharing_stats WHERE blog_id = %d AND share_service = %s GROUP BY post_id ORDER BY count DESC ', $blog_id, $name ) );
-
- if ( ! empty( $my_data ) ) {
- foreach ( $my_data as $row ) {
- $totals[] = new Sharing_Post_Total( $row->id, $row->total );
- }
- }
-
- usort( $totals, array( 'Sharing_Post_Total', 'cmp' ) );
-
- return $totals;
- }
-
- public function process_request( $post, array $post_data ) {
- /**
- * Fires when a post is shared via one of the sharing buttons.
- *
- * @module sharedaddy
- *
- * @since 1.1.0
- *
- * @param array $args Aray of information about the sharing service.
- */
- do_action( 'sharing_bump_stats', array( 'service' => $this, 'post' => $post ) );
- }
-
- public function js_dialog( $name, $params = array() ) {
- if ( true !== $this->open_link_in_new ) {
- return;
- }
-
- $defaults = array(
- 'menubar' => 1,
- 'resizable' => 1,
- 'width' => 600,
- 'height' => 400,
- );
- $params = array_merge( $defaults, $params );
- $opts = array();
- foreach ( $params as $key => $val ) {
- $opts[] = "$key=$val";
- }
- $opts = implode( ',', $opts );
-
- // Add JS after sharing-js has been enqueued.
- wp_add_inline_script( 'sharing-js',
- "var windowOpen;
- jQuery( document.body ).on( 'click', 'a.share-$name', function() {
- // If there's another sharing window open, close it.
- if ( 'undefined' !== typeof windowOpen ) {
- windowOpen.close();
- }
- windowOpen = window.open( jQuery( this ).attr( 'href' ), 'wpcom$name', '$opts' );
- return false;
- });"
- );
- }
-}
-
-abstract class Deprecated_Sharing_Source extends Sharing_Source {
- public $button_style = 'text';
- public $smart = false;
- protected $open_link_in_new = false;
- protected $id;
- protected $deprecated = true;
-
- final public function __construct( $id, array $settings ) {
- $this->id = $id;
-
- if ( isset( $settings['button_style'] ) ) {
- $this->button_style = $settings['button_style'];
- }
- }
-
- final public function is_deprecated() {
- return true;
- }
-
- final public function get_share_url( $post_id ) {
- return get_permalink( $post_id );
- }
-
- final public function display_preview( $echo = true, $force_smart = false, $button_style = null ) {
- return parent::display_preview( $echo, false, $button_style );
- }
-
- final public function get_total( $post = false ) {
- return 0;
- }
-
- final public function get_posts_total() {
- return 0;
- }
-
- final public function process_request( $post, array $post_data ) {
- parent::process_request( $post, $post_data );
- }
-
- final public function get_display( $post ) {
- if ( current_user_can( 'manage_options' ) ) {
- return $this->display_deprecated( $post );
- }
-
- return '';
- }
-
- public function display_deprecated( $post ) {
- return $this->get_link(
- $this->get_share_url( $post->ID ),
- sprintf( __( '%1$s has shut down', 'jetpack' ), $this->get_name() ),
- sprintf( __( 'The %1$s service has shut down. This sharing button is not displayed to your visitors and should be removed.', 'jetpack' ), $this->get_name() )
- );
- }
-}
-
-abstract class Sharing_Advanced_Source extends Sharing_Source {
- public function has_advanced_options() {
- return true;
- }
-
- abstract public function display_options();
- abstract public function update_options( array $data );
- abstract public function get_options();
-}
-
-class Share_Email extends Sharing_Source {
- public $shortname = 'email';
- public $icon = '\f410';
- public function __construct( $id, array $settings ) {
- parent::__construct( $id, $settings );
-
- if ( 'official' == $this->button_style ) {
- $this->smart = true;
- } else {
- $this->smart = false;
- }
- }
-
- public function get_name() {
- return _x( 'Email', 'as sharing source', 'jetpack' );
- }
-
- // Default does nothing
- public function process_request( $post, array $post_data ) {
- $ajax = false;
- if ( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) == 'xmlhttprequest' ) {
- $ajax = true;
- }
-
- $source_email = $target_email = $source_name = false;
-
- if ( isset( $post_data['source_email'] ) && is_email( $post_data['source_email'] ) ) {
- $source_email = $post_data['source_email'];
- }
-
- if ( isset( $post_data['target_email'] ) && is_email( $post_data['target_email'] ) ) {
- $target_email = $post_data['target_email'];
- }
-
- if ( isset( $post_data['source_name'] ) && strlen( $post_data['source_name'] ) < 200 ) {
- $source_name = $post_data['source_name'];
- } elseif ( isset( $post_data['source_name'] ) ) {
- $source_name = substr( $post_data['source_name'], 0, 200 );
- } else {
- $source_name = '';
- }
-
- // Test email
- $error = 1; // Failure in data
- if ( empty( $post_data['source_f_name'] ) && $source_email && $target_email && $source_name ) {
- /**
- * Allow plugins to stop the email sharing button from running the shared message through Akismet.
- *
- * @module sharedaddy
- *
- * @since 1.1.0
- *
- * @param bool true Should we check if the message isn't spam?
- * @param object $post Post information.
- * @param array $post_data Information about the shared message.
- */
- if ( apply_filters( 'sharing_email_check', true, $post, $post_data ) ) {
- $data = array(
- 'post' => $post,
- 'source' => $source_email,
- 'target' => $target_email,
- 'name' => $source_name,
- 'sharing_source' => $this,
- );
- // todo: implement an error message when email doesn't get sent.
- /**
- * Filter whether an email can be sent from the Email sharing button.
- *
- * @module sharedaddy
- *
- * @since 1.1.0
- *
- * @param array $data Array of information about the shared message.
- */
- if ( ( $data = apply_filters( 'sharing_email_can_send', $data ) ) !== false ) {
- // Record stats
- parent::process_request( $data['post'], $post_data );
-
- /**
- * Fires when an email is sent via the Email sharing button.
- *
- * @module sharedaddy
- *
- * @since 1.1.0
- *
- * @param array $data Array of information about the shared message.
- */
- do_action( 'sharing_email_send_post', $data );
- }
-
- // Return a positive regardless of whether the user is subscribed or not
- if ( $ajax ) {
-?>
-<div class="response">
- <div class="response-title"><?php _e( 'This post has been shared!', 'jetpack' ); ?></div>
- <div class="response-sub"><?php printf( __( 'You have shared this post with %s', 'jetpack' ), esc_html( $target_email ) ); ?></div>
- <div class="response-close"><a href="#" class="sharing_cancel"><?php _e( 'Close', 'jetpack' ); ?></a></div>
-</div>
-<?php
- } else {
- wp_safe_redirect( get_permalink( $post->ID ) . '?shared=email' );
- }
-
- die();
- } else {
- $error = 2; // Email check failed
- }
- }
-
- if ( $ajax ) {
- echo $error;
- } else {
- wp_safe_redirect( get_permalink( $post->ID ) . '?shared=email&msg=fail' );
- }
-
- die();
- }
-
- public function get_display( $post ) {
- return $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'Email', 'share to', 'jetpack' ), __( 'Click to email this to a friend', 'jetpack' ), 'share=email' );
- }
-
- /**
- * Outputs the hidden email dialog
- */
- public function display_footer() {
- global $current_user;
-
- $visible = $status = false;
-?>
- <div id="sharing_email" style="display: none;">
- <form action="<?php echo esc_url( $_SERVER['REQUEST_URI'] ); ?>" method="post">
- <label for="target_email"><?php _e( 'Send to Email Address', 'jetpack' ) ?></label>
- <input type="email" name="target_email" id="target_email" value="" />
-
- <?php if ( is_user_logged_in() ) : ?>
- <input type="hidden" name="source_name" value="<?php echo esc_attr( $current_user->display_name ); ?>" />
- <input type="hidden" name="source_email" value="<?php echo esc_attr( $current_user->user_email ); ?>" />
- <?php else : ?>
-
- <label for="source_name"><?php _e( 'Your Name', 'jetpack' ) ?></label>
- <input type="text" name="source_name" id="source_name" value="" />
-
- <label for="source_email"><?php _e( 'Your Email Address', 'jetpack' ) ?></label>
- <input type="email" name="source_email" id="source_email" value="" />
-
- <?php endif; ?>
- <input type="text" id="jetpack-source_f_name" name="source_f_name" class="input" value="" size="25" autocomplete="off" title="<?php esc_attr_e( 'This field is for validation and should not be changed', 'jetpack' ); ?>" />
- <?php
- /**
- * Fires when the Email sharing dialog is loaded.
- *
- * @module sharedaddy
- *
- * @since 1.1.0
- *
- * @param string jetpack Eail sharing source.
- */
- do_action( 'sharing_email_dialog', 'jetpack' );
- ?>
-
- <img style="float: right; display: none" class="loading" src="<?php
- /** This filter is documented in modules/stats.php */
- echo apply_filters( 'jetpack_static_url', plugin_dir_url( __FILE__ ) . 'images/loading.gif' ); ?>" alt="loading" width="16" height="16" />
- <input type="submit" value="<?php esc_attr_e( 'Send Email', 'jetpack' ); ?>" class="sharing_send" />
- <a rel="nofollow" href="#cancel" class="sharing_cancel" role="button"><?php _e( 'Cancel', 'jetpack' ); ?></a>
-
- <div class="errors errors-1" style="display: none;">
- <?php _e( 'Post was not sent - check your email addresses!', 'jetpack' ); ?>
- </div>
-
- <div class="errors errors-2" style="display: none;">
- <?php _e( 'Email check failed, please try again', 'jetpack' ); ?>
- </div>
-
- <div class="errors errors-3" style="display: none;">
- <?php _e( 'Sorry, your blog cannot share posts by email.', 'jetpack' ); ?>
- </div>
- </form>
- </div>
-<?php
- }
-}
-
-class Share_Twitter extends Sharing_Source {
- public $shortname = 'twitter';
- public $icon = '\f202';
- // 'https://dev.twitter.com/rest/reference/get/help/configuration' ( 2015/02/06 ) short_url_length is 22, short_url_length_https is 23
- public $short_url_length = 24;
-
- public function __construct( $id, array $settings ) {
- parent::__construct( $id, $settings );
-
- if ( 'official' == $this->button_style ) {
- $this->smart = true;
- } else {
- $this->smart = false;
- }
- }
-
- public function get_name() {
- return __( 'Twitter', 'jetpack' );
- }
-
- /**
- * Determine the Twitter 'via' value for a post.
- *
- * @param WP_Post|int $post Post object or post ID.
- * @return string Twitter handle without the preceding @.
- **/
- public static function sharing_twitter_via( $post ) {
- $post = get_post( $post );
- /**
- * Allow third-party plugins to customize the Twitter username used as "twitter:site" Twitter Card Meta Tag.
- *
- * @module sharedaddy
- *
- * @since 3.0.0
- *
- * @param string $string Twitter Username.
- * @param array $args Array of Open Graph Meta Tags and Twitter Cards tags.
- */
- $twitter_site_tag_value = apply_filters(
- 'jetpack_twitter_cards_site_tag',
- '',
- /** This action is documented in modules/sharedaddy/sharing-sources.php */
- array( 'twitter:creator' => apply_filters( 'jetpack_sharing_twitter_via', '', $post->ID ) )
- );
-
- /*
- * Hack to remove the unwanted behavior of adding 'via @jetpack' which
- * was introduced with the adding of the Twitter cards.
- * This should be a temporary solution until a better method is setup.
- */
- if ( 'jetpack' == $twitter_site_tag_value ) {
- $twitter_site_tag_value = '';
- }
-
- /**
- * Filters the Twitter username used as "via" in the Twitter sharing button.
- *
- * @module sharedaddy
- *
- * @since 1.7.0
- *
- * @param string $twitter_site_tag_value Twitter Username.
- * @param int $post->ID Post ID.
- */
- $twitter_site_tag_value = apply_filters( 'jetpack_sharing_twitter_via', $twitter_site_tag_value, $post->ID );
-
- // Strip out anything other than a letter, number, or underscore.
- // This will prevent the inadvertent inclusion of an extra @, as well as normalizing the handle.
- return preg_replace( '/[^\da-z_]+/i', '', $twitter_site_tag_value );
- }
-
- /**
- * Determine the 'related' Twitter accounts for a post.
- *
- * @param WP_Post|int $post Post object or post ID.
- * @return string Comma-separated list of Twitter handles.
- **/
- public static function get_related_accounts( $post ) {
- $post = get_post( $post );
- /**
- * Filter the list of related Twitter accounts added to the Twitter sharing button.
- *
- * @module sharedaddy
- *
- * @since 1.7.0
- *
- * @param array $args Array of Twitter usernames. Format is 'username' => 'Optional description'
- * @param int $post->ID Post ID.
- */
- $related_accounts = apply_filters( 'jetpack_sharing_twitter_related', array(), $post->ID );
-
- // Example related string: account1,account2:Account 2 description,account3
- $related = array();
-
- foreach ( $related_accounts as $related_account_username => $related_account_description ) {
- // Join the description onto the end of the username
- if ( $related_account_description ) {
- $related_account_username .= ':' . $related_account_description;
- }
-
- $related[] = $related_account_username;
- }
-
- return implode( ',', $related );
- }
-
- public function get_display( $post ) {
- $via = $this->sharing_twitter_via( $post );
-
- if ( $via ) {
- $via = 'data-via="' . esc_attr( $via ) . '"';
- } else {
- $via = '';
- }
-
- $related = $this->get_related_accounts( $post );
- if ( ! empty( $related ) && $related !== $via ) {
- $related = 'data-related="' . esc_attr( $related ) . '"';
- } else {
- $related = '';
- }
-
- if ( $this->smart ) {
- $share_url = $this->get_share_url( $post->ID );
- $post_title = $this->get_share_title( $post->ID );
- return sprintf(
- '<a href="https://twitter.com/share" class="twitter-share-button" data-url="%1$s" data-text="%2$s" %3$s %4$s>Tweet</a>',
- esc_url( $share_url ),
- esc_attr( $post_title ),
- $via,
- $related
- );
- } else {
- if (
- /**
- * Allow plugins to disable sharing counts for specific sharing services.
- *
- * @module sharedaddy
- *
- * @since 3.0.0
- *
- * @param bool true Should sharing counts be enabled for this specific service. Default to true.
- * @param int $post->ID Post ID.
- * @param string $str Sharing service name.
- */
- apply_filters( 'jetpack_register_post_for_share_counts', true, $post->ID, 'twitter' )
- ) {
- sharing_register_post_for_share_counts( $post->ID );
- }
- return $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'Twitter', 'share to', 'jetpack' ), __( 'Click to share on Twitter', 'jetpack' ), 'share=twitter', 'sharing-twitter-' . $post->ID );
- }
- }
-
- public function process_request( $post, array $post_data ) {
- $post_title = $this->get_share_title( $post->ID );
- $post_link = $this->get_share_url( $post->ID );
-
- if ( function_exists( 'mb_stripos' ) ) {
- $strlen = 'mb_strlen';
- $substr = 'mb_substr';
- } else {
- $strlen = 'strlen';
- $substr = 'substr';
- }
-
- $via = $this->sharing_twitter_via( $post );
- $related = $this->get_related_accounts( $post );
- if ( $via ) {
- $sig = " via @$via";
- if ( $related === $via ) {
- $related = false;
- }
- } else {
- $via = false;
- $sig = '';
- }
-
- $suffix_length = $this->short_url_length + $strlen( $sig );
- // $sig is handled by twitter in their 'via' argument.
- // $post_link is handled by twitter in their 'url' argument.
- if ( 280 < $strlen( $post_title ) + $suffix_length ) {
- // The -1 is for "\xE2\x80\xA6", a UTF-8 ellipsis.
- $text = $substr( $post_title, 0, 280 - $suffix_length - 1 ) . "\xE2\x80\xA6";
- } else {
- $text = $post_title;
- }
-
- // Record stats
- parent::process_request( $post, $post_data );
-
- $url = $post_link;
- $twitter_url = add_query_arg(
- rawurlencode_deep( array_filter( compact( 'via', 'related', 'text', 'url' ) ) ),
- 'https://twitter.com/intent/tweet'
- );
-
- // Redirect to Twitter
- wp_redirect( $twitter_url );
- die();
- }
-
- public function has_custom_button_style() {
- return $this->smart;
- }
-
- public function display_footer() {
- if ( $this->smart ) {
- ?>
- <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
- <?php
- } else {
- $this->js_dialog( $this->shortname, array( 'height' => 350 ) );
- }
- }
-}
-
-
-class Share_Reddit extends Sharing_Source {
- public $shortname = 'reddit';
- public $icon = '\f222';
- public function __construct( $id, array $settings ) {
- parent::__construct( $id, $settings );
-
- if ( 'official' == $this->button_style ) {
- $this->smart = true;
- } else {
- $this->smart = false;
- }
- }
-
- public function get_name() {
- return __( 'Reddit', 'jetpack' );
- }
-
- public function get_display( $post ) {
- if ( $this->smart ) {
- return '<div class="reddit_button"><iframe src="' . $this->http() . '://www.reddit.com/static/button/button1.html?newwindow=true&width=120&amp;url=' . rawurlencode( $this->get_share_url( $post->ID ) ) . '&amp;title=' . rawurlencode( $this->get_share_title( $post->ID ) ) . '" height="22" width="120" scrolling="no" frameborder="0"></iframe></div>';
- } else {
- return $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'Reddit', 'share to', 'jetpack' ), __( 'Click to share on Reddit', 'jetpack' ), 'share=reddit' );
- }
- }
-
- public function process_request( $post, array $post_data ) {
- $reddit_url = $this->http() . '://reddit.com/submit?url=' . rawurlencode( $this->get_share_url( $post->ID ) ) . '&title=' . rawurlencode( $this->get_share_title( $post->ID ) );
-
- // Record stats
- parent::process_request( $post, $post_data );
-
- // Redirect to Reddit
- wp_redirect( $reddit_url );
- die();
- }
-}
-
-class Share_LinkedIn extends Sharing_Source {
- public $shortname = 'linkedin';
- public $icon = '\f207';
- public function __construct( $id, array $settings ) {
- parent::__construct( $id, $settings );
-
- if ( 'official' == $this->button_style ) {
- $this->smart = true;
- } else {
- $this->smart = false;
- }
- }
-
- public function get_name() {
- return __( 'LinkedIn', 'jetpack' );
- }
-
- public function has_custom_button_style() {
- return $this->smart;
- }
-
- public function get_display( $post ) {
- $display = '';
-
- if ( $this->smart ) {
- $share_url = $this->get_share_url( $post->ID );
- $display .= sprintf( '<div class="linkedin_button"><script type="in/share" data-url="%s" data-counter="right"></script></div>', esc_url( $share_url ) );
- } else {
- $display = $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'LinkedIn', 'share to', 'jetpack' ), __( 'Click to share on LinkedIn', 'jetpack' ), 'share=linkedin', 'sharing-linkedin-' . $post->ID );
- }
-
- /** This filter is already documented in modules/sharedaddy/sharing-sources.php */
- if ( apply_filters( 'jetpack_register_post_for_share_counts', true, $post->ID, 'linkedin' ) ) {
- sharing_register_post_for_share_counts( $post->ID );
- }
-
- return $display;
- }
-
- public function process_request( $post, array $post_data ) {
-
- $post_link = $this->get_share_url( $post->ID );
-
- // Using the same URL as the official button, which is *not* LinkedIn's documented sharing link
- // https://www.linkedin.com/cws/share?url={url}&token=&isFramed=false
- $linkedin_url = add_query_arg( array(
- 'url' => rawurlencode( $post_link ),
- ), 'https://www.linkedin.com/cws/share?token=&isFramed=false' );
-
- // Record stats
- parent::process_request( $post, $post_data );
-
- // Redirect to LinkedIn
- wp_redirect( $linkedin_url );
- die();
- }
-
- public function display_footer() {
- if ( ! $this->smart ) {
- $this->js_dialog( $this->shortname, array( 'width' => 580, 'height' => 450 ) );
- } else {
- ?><script type="text/javascript">
- jQuery( document ).ready( function() {
- jQuery.getScript( 'https://platform.linkedin.com/in.js?async=true', function success() {
- IN.init();
- });
- });
- jQuery( document.body ).on( 'post-load', function() {
- if ( typeof IN != 'undefined' )
- IN.parse();
- });
- </script><?php
- }
- }
-}
-
-class Share_Facebook extends Sharing_Source {
- public $shortname = 'facebook';
- public $icon = '\f204';
- private $share_type = 'default';
-
- public function __construct( $id, array $settings ) {
- parent::__construct( $id, $settings );
-
- if ( isset( $settings['share_type'] ) ) {
- $this->share_type = $settings['share_type'];
- }
-
- if ( 'official' == $this->button_style ) {
- $this->smart = true;
- } else {
- $this->smart = false;
- }
- }
-
- public function get_name() {
- return __( 'Facebook', 'jetpack' );
- }
-
- public function display_header() {
- }
-
- function guess_locale_from_lang( $lang ) {
- if ( 'en' == $lang || 'en_US' == $lang || ! $lang ) {
- return 'en_US';
- }
-
- if ( ! class_exists( 'GP_Locales' ) ) {
- if ( ! defined( 'JETPACK__GLOTPRESS_LOCALES_PATH' ) || ! file_exists( JETPACK__GLOTPRESS_LOCALES_PATH ) ) {
- return false;
- }
-
- require JETPACK__GLOTPRESS_LOCALES_PATH;
- }
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- // WP.com: get_locale() returns 'it'
- $locale = GP_Locales::by_slug( $lang );
- } else {
- // Jetpack: get_locale() returns 'it_IT';
- $locale = GP_Locales::by_field( 'wp_locale', $lang );
- }
-
- if ( ! $locale ) {
- return false;
- }
-
- if ( empty( $locale->facebook_locale ) ) {
- if ( empty( $locale->wp_locale ) ) {
- return false;
- } else {
- // Facebook SDK is smart enough to fall back to en_US if a
- // locale isn't supported. Since supported Facebook locales
- // can fall out of sync, we'll attempt to use the known
- // wp_locale value and rely on said fallback.
- return $locale->wp_locale;
- }
- }
-
- return $locale->facebook_locale;
- }
-
- public function get_display( $post ) {
- if ( $this->smart ) {
- $share_url = $this->get_share_url( $post->ID );
- $fb_share_html = '<div class="fb-share-button" data-href="' . esc_attr( $share_url ) . '" data-layout="button_count"></div>';
- /**
- * Filter the output of the Facebook Sharing button.
- *
- * @module sharedaddy
- *
- * @since 3.6.0
- *
- * @param string $fb_share_html Facebook Sharing button HTML.
- * @param string $share_url URL of the post to share.
- */
- return apply_filters( 'jetpack_sharing_facebook_official_button_output', $fb_share_html, $share_url );
- }
-
- /** This filter is already documented in modules/sharedaddy/sharing-sources.php */
- if ( apply_filters( 'jetpack_register_post_for_share_counts', true, $post->ID, 'facebook' ) ) {
- sharing_register_post_for_share_counts( $post->ID );
- }
- return $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'Facebook', 'share to', 'jetpack' ), __( 'Click to share on Facebook', 'jetpack' ), 'share=facebook', 'sharing-facebook-' . $post->ID );
- }
-
- public function process_request( $post, array $post_data ) {
- $fb_url = $this->http() . '://www.facebook.com/sharer.php?u=' . rawurlencode( $this->get_share_url( $post->ID ) ) . '&t=' . rawurlencode( $this->get_share_title( $post->ID ) );
-
- // Record stats
- parent::process_request( $post, $post_data );
-
- // Redirect to Facebook
- wp_redirect( $fb_url );
- die();
- }
-
- public function display_footer() {
- $this->js_dialog( $this->shortname );
- if ( $this->smart ) {
- $locale = $this->guess_locale_from_lang( get_locale() );
- if ( ! $locale ) {
- $locale = 'en_US';
- }
- /**
- * Filter the App ID used in the official Facebook Share button.
- *
- * @since 3.8.0
- *
- * @param int $fb_app_id Facebook App ID. Default to 249643311490 (WordPress.com's App ID).
- */
- $fb_app_id = apply_filters( 'jetpack_sharing_facebook_app_id', '249643311490' );
- if ( is_numeric( $fb_app_id ) ) {
- $fb_app_id = '&appId=' . $fb_app_id;
- } else {
- $fb_app_id = '';
- }
- ?><div id="fb-root"></div>
- <script>(function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = 'https://connect.facebook.net/<?php echo $locale; ?>/sdk.js#xfbml=1<?php echo $fb_app_id; ?>&version=v2.3'; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));</script>
- <script>
- jQuery( document.body ).on( 'post-load', function() {
- if ( 'undefined' !== typeof FB ) {
- FB.XFBML.parse();
- }
- } );
- </script>
- <?php
- }
- }
-}
-
-class Share_Print extends Sharing_Source {
- public $shortname = 'print';
- public $icon = '\f469';
- public function __construct( $id, array $settings ) {
- parent::__construct( $id, $settings );
-
- if ( 'official' == $this->button_style ) {
- $this->smart = true;
- } else {
- $this->smart = false;
- }
- }
-
- public function get_name() {
- return __( 'Print', 'jetpack' );
- }
-
- public function get_display( $post ) {
- return $this->get_link( $this->get_process_request_url( $post->ID ) . ( ( is_single() || is_page() ) ? '#print': '' ), _x( 'Print', 'share to', 'jetpack' ), __( 'Click to print', 'jetpack' ) );
- }
-}
-
-class Share_PressThis extends Sharing_Source {
- public $shortname = 'pressthis';
- public $icon = '\f205';
- public function __construct( $id, array $settings ) {
- parent::__construct( $id, $settings );
-
- if ( 'official' == $this->button_style ) {
- $this->smart = true;
- } else {
- $this->smart = false;
- }
- }
-
- public function get_name() {
- return __( 'Press This', 'jetpack' );
- }
-
- public function process_request( $post, array $post_data ) {
- global $current_user;
-
- $primary_blog = (int) get_user_meta( $current_user->ID, 'primary_blog', true );
- if ( $primary_blog ) {
- $primary_blog_details = get_blog_details( $primary_blog );
- } else {
- $primary_blog_details = false;
- }
-
- if ( $primary_blog_details ) {
- $blogs = array( $primary_blog_details );
- } elseif ( function_exists( 'get_active_blogs_for_user' ) ) {
- $blogs = get_active_blogs_for_user();
- if ( empty( $blogs ) ) {
- $blogs = get_blogs_of_user( $current_user->ID );
- }
- } else {
- $blogs = get_blogs_of_user( $current_user->ID );
- }
-
- if ( empty( $blogs ) ) {
- wp_safe_redirect( get_permalink( $post->ID ) );
- die();
- }
-
- $blog = current( $blogs );
-
- $args = array(
- 'u' => rawurlencode( $this->get_share_url( $post->ID ) ),
- );
-
- $args[ 'url-scan-submit' ] = 'Scan';
- $args[ '_wpnonce' ] = wp_create_nonce( 'scan-site' );
-
- $url = $blog->siteurl . '/wp-admin/press-this.php';
- $url = add_query_arg( $args, $url );
-
- // Record stats
- parent::process_request( $post, $post_data );
-
- // Redirect to Press This
- wp_redirect( $url );
- die();
- }
-
- public function get_display( $post ) {
- return $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'Press This', 'share to', 'jetpack' ), __( 'Click to Press This!', 'jetpack' ), 'share=press-this' );
- }
-}
-
-class Share_GooglePlus1 extends Deprecated_Sharing_Source {
- public $shortname = 'googleplus1';
-
- public function get_name() {
- return __( 'Google+', 'jetpack' );
- }
-}
-
-class Share_Custom extends Sharing_Advanced_Source {
- private $name;
- private $icon;
- private $url;
- public $smart = true;
- public $shortname;
-
- public function get_class() {
- return 'custom share-custom-' . sanitize_html_class( strtolower( $this->name ) );
- }
-
- public function __construct( $id, array $settings ) {
- parent::__construct( $id, $settings );
-
- $opts = $this->get_options();
-
- if ( isset( $settings['name'] ) ) {
- $this->name = $settings['name'];
- $this->shortname = preg_replace( '/[^a-z0-9]*/', '', $settings['name'] );
- }
-
- if ( isset( $settings['icon'] ) ) {
- $this->icon = $settings['icon'];
-
- $new_icon = esc_url_raw( wp_specialchars_decode( $this->icon, ENT_QUOTES ) );
- $i = 0;
- while ( $new_icon != $this->icon ) {
- if ( $i > 5 ) {
- $this->icon = false;
- break;
- } else {
- $this->icon = $new_icon;
- $new_icon = esc_url_raw( wp_specialchars_decode( $this->icon, ENT_QUOTES ) );
- }
- $i++;
- }
- }
-
- if ( isset( $settings['url'] ) ) {
- $this->url = $settings['url'];
- }
- }
-
- public function get_name() {
- return $this->name;
- }
-
- public function get_display( $post ) {
- $str = $this->get_link( $this->get_process_request_url( $post->ID ), esc_html( $this->name ), sprintf( __( 'Click to share on %s', 'jetpack' ), esc_attr( $this->name ) ), 'share=' . $this->id );
- return str_replace( '<span>', '<span style="' . esc_attr( 'background-image:url("' . addcslashes( esc_url_raw( $this->icon ), '"' ) . '");' ) . '">', $str );
- }
-
- public function process_request( $post, array $post_data ) {
- $url = str_replace( '&amp;', '&', $this->url );
- $url = str_replace( '%post_id%', rawurlencode( $post->ID ), $url );
- $url = str_replace( '%post_url%', rawurlencode( $this->get_share_url( $post->ID ) ), $url );
- $url = str_replace( '%post_full_url%', rawurlencode( get_permalink( $post->ID ) ), $url );
- $url = str_replace( '%post_title%', rawurlencode( $this->get_share_title( $post->ID ) ), $url );
- $url = str_replace( '%home_url%', rawurlencode( home_url() ), $url );
- $url = str_replace( '%post_slug%', rawurlencode( $post->post_name ), $url );
-
- if ( strpos( $url, '%post_tags%' ) !== false ) {
- $tags = get_the_tags( $post->ID );
- $tagged = '';
-
- if ( $tags ) {
- $tagged_raw = array();
- foreach ( $tags as $tag ) {
- $tagged_raw[] = rawurlencode( $tag->name );
- }
-
- $tagged = implode( ',', $tagged_raw );
- }
-
- $url = str_replace( '%post_tags%', $tagged, $url );
- }
-
- if ( strpos( $url, '%post_excerpt%' ) !== false ) {
- $url_excerpt = $post->post_excerpt;
- if ( empty( $url_excerpt ) ) {
- $url_excerpt = $post->post_content;
- }
-
- $url_excerpt = strip_tags( strip_shortcodes( $url_excerpt ) );
- $url_excerpt = wp_html_excerpt( $url_excerpt, 100 );
- $url_excerpt = rtrim( preg_replace( '/[^ .]*$/', '', $url_excerpt ) );
- $url = str_replace( '%post_excerpt%', rawurlencode( $url_excerpt ), $url );
- }
-
- // Record stats
- parent::process_request( $post, $post_data );
-
- // Redirect
- wp_redirect( $url );
- die();
- }
-
- public function display_options() {
-?>
-<div class="input">
- <table class="form-table">
- <tbody>
- <tr>
- <th scope="row"><?php _e( 'Label', 'jetpack' ); ?></th>
- <td><input type="text" name="name" value="<?php echo esc_attr( $this->name ); ?>" /></td>
- </tr>
-
- <tr>
- <th scope="row"><?php _e( 'URL', 'jetpack' ); ?></th>
- <td><input type="text" name="url" value="<?php echo esc_attr( $this->url ); ?>" /></td>
- </tr>
-
- <tr>
- <th scope="row"><?php _e( 'Icon', 'jetpack' ); ?></th>
- <td><input type="text" name="icon" value="<?php echo esc_attr( $this->icon ); ?>" /></td>
- </tr>
-
- <tr>
- <th scope="row"></th>
- <td>
- <input class="button-secondary" type="submit" value="<?php esc_attr_e( 'Save', 'jetpack' ); ?>" />
- <a href="#" class="remove"><small><?php _e( 'Remove Service', 'jetpack' ); ?></small></a>
- </td>
- </tr>
- </tbody>
- </table>
-</div>
-<?php
- }
-
- public function update_options( array $data ) {
- $name = trim( wp_html_excerpt( wp_kses( stripslashes( $data['name'] ), array() ), 30 ) );
- $url = trim( esc_url_raw( $data['url'] ) );
- $icon = trim( esc_url_raw( $data['icon'] ) );
-
- if ( $name ) {
- $this->name = $name;
- }
-
- if ( $url ) {
- $this->url = $url;
- }
-
- if ( $icon ) {
- $this->icon = $icon;
- }
- }
-
- public function get_options() {
- return array(
- 'name' => $this->name,
- 'icon' => $this->icon,
- 'url' => $this->url,
- );
- }
-
- public function display_preview( $echo = true, $force_smart = false, $button_style = null ) {
- $opts = $this->get_options();
-
- $text = '&nbsp;';
- if ( ! $this->smart ) {
- if ( $this->button_style != 'icon' ) {
- $text = $this->get_name();
- }
- }
-
- $klasses = array( 'share-' . $this->shortname );
-
- if ( $this->button_style == 'icon' || $this->button_style == 'icon-text' ) {
- $klasses[] = 'share-icon';
- }
-
- if ( $this->button_style == 'icon' ) {
- $text = '';
- $klasses[] = 'no-text';
- }
-
- if ( $this->button_style == 'text' ) {
- $klasses[] = 'no-icon';
- }
-
- $link = sprintf(
- '<a rel="nofollow" class="%s" href="javascript:void(0)" title="%s"><span style="background-image:url(&quot;%s&quot;) !important;background-position:left center;background-repeat:no-repeat;">%s</span></a>',
- implode( ' ', $klasses ),
- $this->get_name(),
- addcslashes( esc_url_raw( $opts['icon'] ), '"' ),
- $text
- );
- ?>
- <div class="option option-smart-off">
- <?php echo $link ; ?>
- </div><?php
- }
-}
-
-class Share_Tumblr extends Sharing_Source {
- public $shortname = 'tumblr';
- public $icon = '\f214';
- public function __construct( $id, array $settings ) {
- parent::__construct( $id, $settings );
- if ( 'official' == $this->button_style ) {
- $this->smart = true;
- } else {
- $this->smart = false;
- }
- }
-
- public function get_name() {
- return __( 'Tumblr', 'jetpack' );
- }
-
- public function get_display( $post ) {
- if ( $this->smart ) {
- $target = '';
- if ( true == $this->open_link_in_new ) {
- $target = '_blank';
- }
-
- /**
- * If we are looking at a single post, let Tumblr figure out the post type (text, photo, link, quote, chat, or video)
- * based on the content available on the page.
- * If we are not looking at a single post, content from other posts can appear on the page and Tumblr will pick that up.
- * In this case, we want Tumblr to focus on our current post, so we will limit the post type to link, where we can give Tumblr a link to our post.
- */
- if ( ! is_single() ) {
- $posttype = 'data-posttype="link"';
- } else {
- $posttype = '';
- }
-
- // Documentation: https://www.tumblr.com/docs/en/share_button
- return sprintf(
- '<a class="tumblr-share-button" target="%1$s" href="%2$s" data-title="%3$s" data-content="%4$s" title="%5$s"%6$s>%5$s</a>',
- $target,
- 'https://www.tumblr.com/share',
- $this->get_share_title( $post->ID ),
- $this->get_share_url( $post->ID ),
- __( 'Share on Tumblr', 'jetpack' ),
- $posttype
- );
- } else {
- return $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'Tumblr', 'share to', 'jetpack' ), __( 'Click to share on Tumblr', 'jetpack' ), 'share=tumblr' );
- }
- }
-
- public function process_request( $post, array $post_data ) {
- // Record stats
- parent::process_request( $post, $post_data );
-
- // Redirect to Tumblr's sharing endpoint (a la their bookmarklet)
- $url = 'https://www.tumblr.com/share?v=3&u=' . rawurlencode( $this->get_share_url( $post->ID ) ) . '&t=' . rawurlencode( $this->get_share_title( $post->ID ) ) . '&s=';
- wp_redirect( $url );
- die();
- }
-
- public function display_footer() {
- if ( $this->smart ) {
- ?><script id="tumblr-js" type="text/javascript" src="https://assets.tumblr.com/share-button.js"></script><?php
- } else {
- $this->js_dialog( $this->shortname, array( 'width' => 450, 'height' => 450 ) );
- }
- }
-}
-
-class Share_Pinterest extends Sharing_Source {
- public $shortname = 'pinterest';
- public $icon = '\f209';
-
- public function __construct( $id, array $settings ) {
- parent::__construct( $id, $settings );
- if ( 'official' == $this->button_style ) {
- $this->smart = true;
- } else {
- $this->smart = false;
- }
- }
-
- public function get_name() {
- return __( 'Pinterest', 'jetpack' );
- }
-
- public function get_image( $post ) {
- if ( class_exists( 'Jetpack_PostImages' ) ) {
- $image = Jetpack_PostImages::get_image( $post->ID, array( 'fallback_to_avatars' => true ) );
- if ( ! empty( $image ) ) {
- return $image['src'];
- }
- }
-
- /**
- * Filters the default image used by the Pinterest Pin It share button.
- *
- * @module sharedaddy
- *
- * @since 3.6.0
- *
- * @param string $url Default image URL.
- */
- return apply_filters( 'jetpack_sharing_pinterest_default_image', 'https://s0.wp.com/i/blank.jpg' );
- }
-
- public function get_external_url( $post ) {
- $url = 'https://www.pinterest.com/pin/create/button/?url=' . rawurlencode( $this->get_share_url( $post->ID ) ) . '&media=' . rawurlencode( $this->get_image( $post ) ) . '&description=' . rawurlencode( $post->post_title );
-
- /**
- * Filters the Pinterest share URL used in sharing button output.
- *
- * @module sharedaddy
- *
- * @since 3.6.0
- *
- * @param string $url Pinterest share URL.
- */
- return apply_filters( 'jetpack_sharing_pinterest_share_url', $url );
- }
-
- public function get_widget_type() {
- /**
- * Filters the Pinterest widget type.
- *
- * @see https://business.pinterest.com/en/widget-builder
- *
- * @module sharedaddy
- *
- * @since 3.6.0
- *
- * @param string $type Pinterest widget type. Default of 'buttonPin' for single-image selection. 'buttonBookmark' for multi-image modal.
- */
- return apply_filters( 'jetpack_sharing_pinterest_widget_type', 'buttonPin' );
- }
-
- public function get_display( $post ) {
- $display = '';
-
- if ( $this->smart ) {
- $display = sprintf(
- '<div class="pinterest_button"><a href="%s" data-pin-do="%s" data-pin-config="beside"><img src="//assets.pinterest.com/images/pidgets/pinit_fg_en_rect_gray_20.png" /></a></div>',
- esc_url( $this->get_external_url( $post ) ),
- esc_attr( $this->get_widget_type() )
- );
- } else {
- $display = $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'Pinterest', 'share to', 'jetpack' ), __( 'Click to share on Pinterest', 'jetpack' ), 'share=pinterest', 'sharing-pinterest-' . $post->ID );
- }
-
- /** This filter is already documented in modules/sharedaddy/sharing-sources.php */
- if ( apply_filters( 'jetpack_register_post_for_share_counts', true, $post->ID, 'linkedin' ) ) {
- sharing_register_post_for_share_counts( $post->ID );
- }
-
- return $display;
- }
-
- public function process_request( $post, array $post_data ) {
- // Record stats
- parent::process_request( $post, $post_data );
- // If we're triggering the multi-select panel, then we don't need to redirect to Pinterest
- if ( ! isset( $_GET['js_only'] ) ) {
- $pinterest_url = esc_url_raw( $this->get_external_url( $post ) );
- wp_redirect( $pinterest_url );
- } else {
- echo '// share count bumped';
- }
- die();
- }
-
- public function display_footer() {
- /**
- * Filter the Pin it button appearing when hovering over images when using the official button style.
- *
- * @module sharedaddy
- *
- * @since 3.6.0
- *
- * @param bool $jetpack_pinit_over True by default, displays the Pin it button when hovering over images.
- */
- $jetpack_pinit_over = apply_filters( 'jetpack_pinit_over_button', true );
- ?>
- <?php if ( $this->smart ) : ?>
- <script type="text/javascript">
- // Pinterest shared resources
- var s = document.createElement("script");
- s.type = "text/javascript";
- s.async = true;
- <?php if ( $jetpack_pinit_over ) {
- echo "s.setAttribute('data-pin-hover', true);";
- } ?>
- s.src = window.location.protocol + "//assets.pinterest.com/js/pinit.js";
- var x = document.getElementsByTagName("script")[0];
- x.parentNode.insertBefore(s, x);
- // if 'Pin it' button has 'counts' make container wider
- jQuery(window).load( function(){ jQuery( 'li.share-pinterest a span:visible' ).closest( '.share-pinterest' ).width( '80px' ); } );
- </script>
- <?php elseif ( 'buttonPin' != $this->get_widget_type() ) : ?>
- <script type="text/javascript">
- jQuery(document).ready( function(){
- jQuery('body').on('click', 'a.share-pinterest', function(e){
- e.preventDefault();
- // Load Pinterest Bookmarklet code
- var s = document.createElement("script");
- s.type = "text/javascript";
- s.src = window.location.protocol + "//assets.pinterest.com/js/pinmarklet.js?r=" + ( Math.random() * 99999999 );
- var x = document.getElementsByTagName("script")[0];
- x.parentNode.insertBefore(s, x);
- // Trigger Stats
- var s = document.createElement("script");
- s.type = "text/javascript";
- s.src = this + ( this.toString().indexOf( '?' ) ? '&' : '?' ) + 'js_only=1';
- var x = document.getElementsByTagName("script")[0];
- x.parentNode.insertBefore(s, x);
- });
- });
- </script>
- <?php endif;
- }
-}
-
-class Share_Pocket extends Sharing_Source {
- public $shortname = 'pocket';
- public $icon = '\f224';
-
- public function __construct( $id, array $settings ) {
- parent::__construct( $id, $settings );
-
- if ( 'official' == $this->button_style ) {
- $this->smart = true;
- } else {
- $this->smart = false;
- }
- }
-
- public function get_name() {
- return __( 'Pocket', 'jetpack' );
- }
-
- public function process_request( $post, array $post_data ) {
- // Record stats
- parent::process_request( $post, $post_data );
-
- $pocket_url = esc_url_raw( 'https://getpocket.com/save/?url=' . rawurlencode( $this->get_share_url( $post->ID ) ) . '&title=' . rawurlencode( $this->get_share_title( $post->ID ) ) );
- wp_redirect( $pocket_url );
- exit;
- }
-
- public function get_display( $post ) {
- if ( $this->smart ) {
- $post_count = 'horizontal';
-
- $button = '';
- $button .= '<div class="pocket_button">';
- $button .= sprintf( '<a href="https://getpocket.com/save" class="pocket-btn" data-lang="%s" data-save-url="%s" data-pocket-count="%s" >%s</a>', 'en', esc_attr( $this->get_share_url( $post->ID ) ), $post_count, esc_attr__( 'Pocket', 'jetpack' ) );
- $button .= '</div>';
-
- return $button;
- } else {
- return $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'Pocket', 'share to', 'jetpack' ), __( 'Click to share on Pocket', 'jetpack' ), 'share=pocket' );
- }
-
- }
-
- function display_footer() {
- if ( $this->smart ) :
- ?>
- <script>
- // Don't use Pocket's default JS as it we need to force init new Pocket share buttons loaded via JS.
- function jetpack_sharing_pocket_init() {
- jQuery.getScript( 'https://widgets.getpocket.com/v1/j/btn.js?v=1' );
- }
- jQuery( document ).ready( jetpack_sharing_pocket_init );
- jQuery( document.body ).on( 'post-load', jetpack_sharing_pocket_init );
- </script>
- <?php
- else :
- $this->js_dialog( $this->shortname, array( 'width' => 450, 'height' => 450 ) );
- endif;
-
- }
-
-}
-
-class Share_Telegram extends Sharing_Source {
- public $shortname = 'telegram';
-
- public function __construct( $id, array $settings ) {
- parent::__construct( $id, $settings );
- }
-
- public function get_name() {
- return __( 'Telegram', 'jetpack' );
- }
- public function process_request( $post, array $post_data ) {
- // Record stats
- parent::process_request( $post, $post_data );
- $telegram_url = esc_url_raw( 'https://telegram.me/share/url?url=' . rawurlencode( $this->get_share_url( $post->ID ) ) . '&text=' . rawurlencode( $this->get_share_title( $post->ID ) ) );
- wp_redirect( $telegram_url );
- exit;
- }
-
- public function get_display( $post ) {
- return $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'Telegram', 'share to', 'jetpack' ), __( 'Click to share on Telegram', 'jetpack' ), 'share=telegram' );
- }
-
- function display_footer() {
- $this->js_dialog( $this->shortname, array( 'width' => 450, 'height' => 450 ) );
- }
-}
-
-class Jetpack_Share_WhatsApp extends Sharing_Source {
- public $shortname = 'jetpack-whatsapp';
-
- public function __construct( $id, array $settings ) {
- parent::__construct( $id, $settings );
- }
-
- public function get_name() {
- return __( 'WhatsApp', 'jetpack' );
- }
-
- public function get_display( $post ) {
- return $this->get_link( $this->get_process_request_url( $post->ID ), _x( 'WhatsApp', 'share to', 'jetpack' ), __( 'Click to share on WhatsApp', 'jetpack' ), 'share=jetpack-whatsapp' );
- }
-
- public function process_request( $post, array $post_data ) {
- // Record stats
- parent::process_request( $post, $post_data );
- $url = 'https://api.whatsapp.com/send?text=' . rawurlencode( $this->get_share_title( $post->ID ) . ' ' . $this->get_share_url( $post->ID ) );
- wp_redirect( $url );
- exit;
- }
-}
-
-class Share_Skype extends Sharing_Source {
- public $shortname = 'skype';
- public $icon = '\f220';
- private $share_type = 'default';
-
- public function __construct( $id, array $settings ) {
- parent::__construct( $id, $settings );
-
- if ( isset( $settings['share_type'] ) ) {
- $this->share_type = $settings['share_type'];
- }
-
- if ( 'official' == $this->button_style ) {
- $this->smart = true;
- } else {
- $this->smart = false;
- }
-
- }
-
- public function get_name() {
- return __( 'Skype', 'jetpack' );
- }
-
- public function get_display( $post ) {
- if ( $this->smart ) {
- $skype_share_html = sprintf(
- '<div class="skype-share" data-href="%1$s" data-lang="%2$s" data-style="small" data-source="jetpack" ></div>',
- esc_attr( $this->get_share_url( $post->ID ) ),
- 'en-US'
- );
- return $skype_share_html;
- }
-
- /** This filter is already documented in modules/sharedaddy/sharing-sources.php */
- if ( apply_filters( 'jetpack_register_post_for_share_counts', true, $post->ID, 'skype' ) ) {
- sharing_register_post_for_share_counts( $post->ID );
- }
- return $this->get_link(
- $this->get_process_request_url( $post->ID ), _x( 'Skype', 'share to', 'jetpack' ), __( 'Click to share on Skype', 'jetpack' ), 'share=skype', 'sharing-skype-' . $post->ID );
- }
-
- public function process_request( $post, array $post_data ) {
- $skype_url = sprintf(
- 'https://web.skype.com/share?url=%1$s&lang=%2$s=&source=jetpack',
- rawurlencode( $this->get_share_url( $post->ID ) ),
- 'en-US'
- );
-
- // Record stats
- parent::process_request( $post, $post_data );
-
- // Redirect to Skype
- wp_redirect( $skype_url );
- die();
- }
-
- public function display_footer() {
- if ( $this->smart ) :
- ?>
- <script>
- (function(r, d, s) {
- r.loadSkypeWebSdkAsync = r.loadSkypeWebSdkAsync || function(p) {
- var js, sjs = d.getElementsByTagName(s)[0];
- if (d.getElementById(p.id)) { return; }
- js = d.createElement(s);
- js.id = p.id;
- js.src = p.scriptToLoad;
- js.onload = p.callback
- sjs.parentNode.insertBefore(js, sjs);
- };
- var p = {
- scriptToLoad: 'https://swx.cdn.skype.com/shared/v/latest/skypewebsdk.js',
- id: 'skype_web_sdk'
- };
- r.loadSkypeWebSdkAsync(p);
- })(window, document, 'script');
- </script>
- <?php
- else :
- $this->js_dialog( $this->shortname, array( 'width' => 305, 'height' => 665 ) );
- endif;
- }
-}
diff --git a/plugins/jetpack/modules/sharedaddy/sharing.css b/plugins/jetpack/modules/sharedaddy/sharing.css
deleted file mode 100644
index 6bd41be9..00000000
--- a/plugins/jetpack/modules/sharedaddy/sharing.css
+++ /dev/null
@@ -1,752 +0,0 @@
-/**
- * Sharedaddy Base Styles
- *
- * Contains styles for modules, containers, buttons
- */
-
-
-/* Master container */
-#jp-post-flair {
- padding-top: .5em;
-}
-
-
-/* Overall Sharedaddy block title */
-div.sharedaddy,
-#content div.sharedaddy,
-#main div.sharedaddy {
- clear: both;
-}
-
-div.sharedaddy h3.sd-title {
- margin: 0 0 1em 0;
- display: inline-block;
- line-height: 1.2;
- font-size: 9pt;
- font-weight: bold;
-}
-
-div.sharedaddy h3.sd-title:before {
- content: "";
- display: block;
- width: 100%;
- min-width: 30px;
- border-top: 1px solid #ddd;
- margin-bottom: 1em;
-}
-
-body.highlander-light h3.sd-title:before {
- border-top: 1px solid rgba(0,0,0,.2);
-}
-
-body.highlander-dark h3.sd-title:before {
- border-top: 1px solid rgba(255,255,255,.4);
-}
-
-
-/* Sharing services list */
-.sd-content ul {
- padding: 0 !important;
- margin: 0 0 .7em 0 !important;
- list-style: none !important;
-}
-
-.sd-content ul li {
- display: inline-block;
-}
-
-.sd-content ul li.share-deprecated {
- opacity: 0.5;
-}
-
-.sd-content ul li.share-deprecated a span {
- text-decoration: line-through;
-}
-
-.sd-block.sd-gplus {
- margin: 0 0 .5em 0;
-}
-
-.sd-gplus .sd-content {
- font-size: 12px;
-}
-
-
-/* Buttons */
-.sd-social-icon .sd-content ul li a.sd-button,
-.sd-social-text .sd-content ul li a.sd-button,
-.sd-content ul li a.sd-button,
-.sd-content ul li .option a.share-ustom, /* Ugh. */
-.sd-content ul li.preview-item div.option.option-smart-off a,
-.sd-content ul li.advanced a.share-more,
-.sd-social-icon-text .sd-content ul li a.sd-button,
-.sd-social-official .sd-content>ul>li>a.sd-button,
-#sharing_email .sharing_send,
-.sd-social-official .sd-content>ul>li .digg_button >a { /* official Digg button no longer works, needs cleaning */
- text-decoration: none !important;
- display: inline-block;
- font-size: 12px;
- font-family: "Open Sans", sans-serif;
- font-weight: normal;
- border-radius: 3px;
- color: #777 !important;
- background: #f8f8f8;
- border: 1px solid #cccccc;
- box-shadow: 0 1px 0 rgba(0,0,0,.08);
- text-shadow: none;
- line-height: 23px;
- padding: 1px 8px 0px 5px;
-}
-
-.sd-social-text .sd-content ul li a.sd-button span,
-.sd-content ul li a.sd-button>span,
-.sd-content ul li .option a.share-ustom span, /* Ugh. */
-.sd-content ul li.preview-item div.option.option-smart-off a span,
-.sd-content ul li.advanced a.share-more span,
-.sd-social-icon-text .sd-content ul li a.sd-button>span,
-.sd-social-official .sd-content>ul>li>a.sd-button span,
-.sd-social-official .sd-content>ul>li .digg_button >a span { /* official Digg button no longer works, needs cleaning */
- line-height: 23px;
-}
-
-
-
-/* Our gray buttons should be smaller when seen with the official ones */
-.sd-social-official .sd-content>ul>li>a.sd-button,
-.sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button,
-.sd-social-official .sd-content>ul>li .digg_button>a,
-.sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a {
- line-height: 17px;
- box-shadow: none; /* No shadow on gray buttons between the official ones */
- vertical-align: top;
-}
-
-.sd-social-official .sd-content ul li a.sd-button>span {
- line-height: 17px;
-}
-.sd-social-official .sd-content>ul>li>a.sd-button:before,
-.sd-social-official .sd-content>ul>li .digg_button>a:before,
-.sd-social-official .sd-content .sharing-hidden .inner>ul>li>a.sd-button:before,
-.sd-social-official .sd-content .sharing-hidden .inner>ul>li .digg_button>a:before {
- margin-bottom: -1px;
-}
-
-.sd-social-icon .sd-content ul li a.sd-button:hover,
-.sd-social-icon .sd-content ul li a.sd-button:active,
-.sd-social-text .sd-content ul li a.sd-button:hover,
-.sd-social-text .sd-content ul li a.sd-button:active,
-.sd-social-icon-text .sd-content ul li a.sd-button:hover,
-.sd-social-icon-text .sd-content ul li a.sd-button:active,
-.sd-social-official .sd-content>ul>li>a.sd-button:hover,
-.sd-social-official .sd-content>ul>li>a.sd-button:active,
-.sd-social-official .sd-content>ul>li .digg_button>a:hover,
-.sd-social-official .sd-content>ul>li .digg_button>a:active {
- color: #555;
- background: #fafafa;
- border: 1px solid #999999;
-}
-
-.sd-social-icon .sd-content ul li a.sd-button:active,
-.sd-social-text .sd-content ul li a.sd-button:active,
-.sd-social-icon-text .sd-content ul li a.sd-button:active,
-.sd-social-official .sd-content>ul>li>a.sd-button:active,
-.sd-social-official .sd-content>ul>li .digg_button>a:active {
- box-shadow: inset 0 1px 0 rgba(0,0,0,.16);
-}
-
-/* All icons */
-.sd-content ul li a.sd-button:before {
- display: inline-block;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- font: normal 18px/1 'social-logos';
- vertical-align: top;
- text-align: center;
-}
-/* text + icon styles should have relative and top position */
-.sd-social-icon-text ul li a.sd-button:before {
- position: relative;
- top: 2px;
-}
-
-/* Make it look great in Chrome and Safari */
-@media screen and (-webkit-min-device-pixel-ratio:0) {
- .sd-content ul li a.sd-button:before {
- position: relative;
- top: 2px;
- }
-}
-
-.sd-social-official ul li a.sd-button:before {
- position: relative;
- top: -2px;
-}
-/* Make it look great in Chrome and Safari */
-@media screen and (-webkit-min-device-pixel-ratio:0) {
- .sd-social-official ul li a.sd-button:before {
- top: 0px;
- }
-}
-
-.sd-content ul li {
- margin: 0 5px 5px 0;
- padding: 0;
-}
-/* Add more pading on touch devices */
-.jp-sharing-input-touch .sd-content ul li { padding-left: 10px; }
-
-/* Text + icon & Official */
-.sd-social-icon-text .sd-content ul li a span,
-.sd-social-official .sd-content ul li a.sd-button span,
-.sd-content ul li.preview-item a.sd-button span {
- margin-left: 3px;
-}
-.sd-content ul li.preview-item.no-icon a.sd-button span {
- margin-left: 0;
-}
-
-/* Text only */
-.sd-social-text .sd-content ul li a:before,
-.sd-content ul li.no-icon a:before {
- display: none;
-}
-body .sd-social-text .sd-content ul li.share-custom a span,
-body .sd-content ul li.share-custom.no-icon a span {
- background-image: none;
- background-position: -500px -500px !important; /* hack to work around !important inline style */
- background-repeat: no-repeat !important;
- padding-left: 0;
- height: 0;
- line-height: inherit;
-}
-
-.sd-social-icon .sd-content ul li a.share-more {
- position: relative;
- top: -4px;
-}
-@media screen and (-webkit-min-device-pixel-ratio:0) {
- .sd-social-icon .sd-content ul li a.share-more {
- top: 2px;
- }
-}
-/* Firefox specific hack to make the share more button look better on Firefox. */
-@-moz-document url-prefix() {
- .sd-social-icon .sd-content ul li a.share-more {
- top: 2px;
- }
-}
-
-.sd-social-icon .sd-content ul li a.share-more span {
- margin-left: 3px;
-}
-
-
-/* Individual icons */
-.sd-social-icon .sd-content ul li.share-print a:before,
-.sd-social-text .sd-content ul li.share-print a:before,
-.sd-content ul li.share-print div.option.option-smart-off a:before,
-.sd-social-icon-text .sd-content li.share-print a:before,
-.sd-social-official .sd-content li.share-print a:before {
- content: '\f469';
-}
-
-.sd-social-icon .sd-content ul li.share-email a:before,
-.sd-social-text .sd-content ul li.share-email a:before,
-.sd-content ul li.share-email div.option.option-smart-off a:before,
-.sd-social-icon-text .sd-content li.share-email a:before,
-.sd-social-official .sd-content li.share-email a:before {
- content: '\f410';
-}
-.sd-social-icon .sd-content ul li.share-linkedin a:before,
-.sd-social-text .sd-content ul li.share-linkedin a:before,
-.sd-content ul li.share-linkedin div.option.option-smart-off a:before,
-.sd-social-icon-text .sd-content li.share-linkedin a:before {
- content: '\f207';
-}
-.sd-social-icon .sd-content ul li.share-twitter a:before,
-.sd-social-text .sd-content ul li.share-twitter a:before,
-.sd-content ul li.share-twitter div.option.option-smart-off a:before,
-.sd-social-icon-text .sd-content li.share-twitter a:before {
- content: '\f202';
-}
-.sd-social-icon .sd-content ul li.share-reddit a:before,
-.sd-social-text .sd-content ul li.share-reddit a:before,
-.sd-content ul li.share-reddit div.option.option-smart-off a:before,
-.sd-social-icon-text .sd-content li.share-reddit a:before {
- content: '\f222';
-}
-.sd-social-icon .sd-content ul li.share-tumblr a:before,
-.sd-social-text .sd-content ul li.share-tumblr a:before,
-.sd-content ul li.share-tumblr div.option.option-smart-off a:before,
-.sd-social-icon-text .sd-content li.share-tumblr a:before {
- content: '\f607';
-}
-
-.sd-social-icon .sd-content ul li.share-pocket a:before,
-.sd-social-text .sd-content ul li.share-pocket a:before,
-.sd-content ul li.share-pocket div.option.option-smart-off a:before,
-.sd-social-icon-text .sd-content li.share-pocket a:before {
- content: '\f224';
-}
-.sd-social-icon .sd-content ul li.share-pinterest a:before,
-.sd-social-text .sd-content ul li.share-pinterest a:before,
-.sd-content ul li.share-pinterest div.option.option-smart-off a:before,
-.sd-social-icon-text .sd-content li.share-pinterest a:before {
- content: '\f210';
-}
-.sd-social-icon .sd-content ul li.share-facebook a:before,
-.sd-social-text .sd-content ul li.share-facebook a:before,
-.sd-content ul li.share-facebook div.option.option-smart-off a:before,
-.sd-social-icon-text .sd-content li.share-facebook a:before {
- content: '\f203';
-}
-.sd-social-icon .sd-content ul li.share-press-this a:before,
-.sd-social-text .sd-content ul li.share-press-this a:before,
-.sd-content ul li.share-press-this div.option.option-smart-off a:before,
-.sd-social-icon-text .sd-content li.share-press-this a:before,
-.sd-social-official .sd-content li.share-press-this a:before {
- content: '\f205';
-}
-.sd-social-official .sd-content li.share-press-this a:before {
- color: #2ba1cb;
-}
-.sd-social-icon .sd-content ul li.share-telegram a:before,
-.sd-social-text .sd-content ul li.share-telegram a:before,
-.sd-content ul li.share-telegram div.option.option-smart-off a:before,
-.sd-social-icon-text .sd-content li.share-telegram a:before,
-.sd-social-official .sd-content li.share-telegram a:before {
- content: '\f606';
-}
-.sd-social-official .sd-content li.share-telegram a:before {
- color: #0088cc;
-}
-.sd-social-icon .sd-content ul li.share-skype a:before,
-.sd-social-text .sd-content ul li.share-skype a:before,
-.sd-content ul li.share-skype div.option.option-smart-off a:before,
-.sd-social-icon-text .sd-content li.share-skype a:before {
- content: '\f220';
-}
-.sd-social-icon .sd-content ul a.share-more:before,
-.sd-social-text .sd-content ul a.share-more:before,
-.sd-content ul li.advanced a.share-more:before,
-.sd-social-icon-text .sd-content a.share-more:before,
-.sd-social-official .sd-content a.share-more:before {
- content: '\f415';
-}
-.sd-social-official .sd-content a.share-more:before {
- color: #2ba1cb;
-}
-
-.sd-social-icon .sd-content ul li.share-jetpack-whatsapp a:before,
-.sd-social-text .sd-content ul li.share-jetpack-whatsapp a:before,
-.sd-content ul li.share-jetpack-whatsapp div.option.option-smart-off a:before,
-.sd-social-icon-text .sd-content li.share-jetpack-whatsapp a:before,
-.sd-social-official .sd-content li.share-jetpack-whatsapp a:before {
- content: '\f608';
-}
-.sd-social-official .sd-content li.share-jetpack-whatsapp a:before {
- color: #43d854;
-}
-.sd-social-icon .sd-content ul li[class*='share-'].share-jetpack-whatsapp a.sd-button {
- background: #43d854;
- color: #fff !important;
-}
-
-
-.sd-social-icon .sd-content ul li.share-deprecated a:before,
-.sd-social-icon-text .sd-content li.share-deprecated a:before,
-.sd-social-official .sd-content li.share-deprecated a:before,
-.sd-content ul li.share-deprecated div.option.option-smart-off a:before {
- width: 1em;
- height: 1em;
- content: "\1F6AB";
-}
-
-/* Share count */
-.sd-social .sd-button .share-count {
- background: #2ea2cc;
- color: #fff;
- -moz-border-radius: 10px;
- border-radius: 10px;
- display: inline-block;
- text-align: center;
- font-size: 10px;
- padding: 1px 3px;
- line-height: 1;
-}
-
-
-/* Official buttons */
-.sd-social-official .sd-content ul, .sd-social-official .sd-content ul li {
- line-height: 25px !important;
-}
-
-.sd-social-official .sd-content>ul>li>a.sd-button span {
- line-height: 1;
-}
-
-.sd-social-official .sd-content ul:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden;
-}
-
-.sd-social-official .sd-content li.share-press-this a {
- margin: 0 0 5px 0;
-}
-
-.sd-social-official .sd-content ul>li {
- display: block;
- float: left;
- margin: 0 10px 5px 0 !important;
- height: 25px;
-}
-
-.sd-social-official .fb-share-button > span {
- vertical-align: top !important;
-}
-
-.sd-social-official .sd-content .pocket_button iframe {
- width: 98px;
-}
-
-
-/* Individual official buttons */
-.reddit_button iframe {
- margin-top: 1px;
-}
-
-.pocket_button iframe, .pinterest_button, .twitter_button, .linkedin_button>span {
- margin: 0 !important;
-}
-
-.sd-social-official .sd-content .share-skype {
- width: 55px;
-}
-
-body .sd-social-official li.share-print ,
-body .sd-social-official li.share-email a,
-body .sd-social-official li.share-custom a,
-body .sd-social-official li a.share-more,
-body .sd-social-official li.share-digg a,
-body .sd-social-official li.share-press-this a
-{
- position: relative;
- top: 0;
-}
-
-
-/* Custom icons */
-body .sd-social-icon .sd-content li.share-custom>a {
- padding: 2px 3px 0 3px;
- position: relative;
- top: 4px;
-}
-
-body .sd-social-icon .sd-content li.share-custom a span,
-body .sd-social-icon-text .sd-content li.share-custom a span,
-body .sd-social-text .sd-content li.share-custom a span,
-body .sd-social-official .sd-content li.share-custom a span,
-body .sd-content ul li.share-custom a.share-icon span
-{
- background-size: 16px 16px;
- background-repeat: no-repeat;
- margin-left: 0;
- padding: 0 0 0 19px;
- display: inline-block;
- height: 21px;
- line-height: 16px;
-}
-
-body .sd-social-icon .sd-content li.share-custom a span {
- width: 0;
-}
-
-body .sd-social-icon .sd-content li.share-custom a span {
- padding-left: 16px !important;
-}
-
-
-/* Overflow Sharing dialog */
-.sharing-hidden .inner {
- position: absolute;
- z-index: 2;
- border: 1px solid #ccc;
- padding: 10px;
- background: #fff;
- box-shadow: 0px 5px 20px rgba(0,0,0,.2);
- -webkit-border-radius: 2px;
- -moz-border-radius: 2px;
- border-radius: 2px;
- margin-top: 5px;
- max-width: 400px;
-}
-
-.sharing-hidden .inner ul{
- margin: 0 !important;
-}
-
-.sd-social-official .sd-content .sharing-hidden ul>li.share-end {
- clear: both;
- margin: 0 !important;
- height: 0 !important;
-}
-
-.sharing-hidden .inner:before, .sharing-hidden .inner:after {
- position: absolute;
- z-index: 1;
- top: -8px;
- left: 20px;
- width: 0;
- height: 0;
- border-left: 6px solid transparent;
- border-right: 6px solid transparent;
- border-bottom: 8px solid #ccc;
- content: "";
- display: block;
-}
-
-.sharing-hidden .inner:after {
- z-index: 2;
- top: -7px;
- border-left: 6px solid transparent;
- border-right: 6px solid transparent;
- border-bottom: 8px solid #fff;
-}
-
-.sharing-hidden ul {
- margin: 0;
-}
-
-
-/**
- * Special colorful look for "Icon Only" option
- */
-
-.sd-social-icon .sd-content ul li[class*='share-'] a,
-.sd-social-icon .sd-content ul li[class*='share-'] a:hover,
-.sd-social-icon .sd-content ul li[class*='share-'] div.option a {
- border-radius: 50%;
- -webkit-border-radius: 50%;
- border: 0;
- box-shadow: none;
- padding: 7px;
- position: relative;
- top: -2px;
- line-height: 1;
- width: auto;
- height: auto;
- margin-bottom: 0;
-}
-
-.sd-social-icon .sd-content ul li[class*='share-'] a.sd-button>span,
-.sd-social-icon .sd-content ul li[class*='share-'] div.option a span {
- line-height: 1;
-}
-
-.sd-social-icon .sd-content ul li[class*='share-'] a:hover,
-.sd-social-icon .sd-content ul li[class*='share-'] div.option a:hover {
- border: none;
- opacity: .6;
-}
-
-
-
-.sd-social-icon .sd-content ul li[class*='share-'] a.sd-button:before {
- top: 1px;
- top: 0px\9; /* IE8 and below */
-}
-
-.sd-social-icon .sd-content ul li[class*='share-'] a.sd-button.share-custom {
- padding: 8px 8px 6px 8px;
- top: 5px;
-}
-
-.sd-social-icon .sd-content ul li a.sd-button.share-more {
- margin-left: 10px;
-}
-
-.sd-social-icon .sd-content ul li:first-child a.sd-button.share-more {
- margin-left: 0;
-}
-
-
-.sd-social-icon .sd-button span.share-count {
- position: absolute;
- bottom: 0;
- right: 0;
- border-radius: 0;
- background: #555;
- font-size: 9px;
-}
-
-/* Special look colors */
-.sd-social-icon .sd-content ul li[class*='share-'] a.sd-button {
- background: #e9e9e9;
- margin-top: 2px;
- text-indent: 0;
-}
-
-.sd-social-icon .sd-content ul li[class*='share-'].share-tumblr a.sd-button {
- background: #2c4762;
- color: #fff !important;
-}
-
-.sd-social-icon .sd-content ul li[class*='share-'].share-facebook a.sd-button {
- background: #3b5998;
- color: #fff !important;
-}
-
-.sd-social-icon .sd-content ul li[class*='share-'].share-twitter a.sd-button {
- background: #00acee;
- color: #fff !important;
-}
-
-.sd-social-icon .sd-content ul li[class*='share-'].share-pinterest a.sd-button {
- background: #ca1f27;
- color: #fff !important;
-}
-
-.sd-social-icon .sd-content ul li[class*='share-'].share-digg a.sd-button {
- color: #555555 !important;
-}
-
-.sd-social-icon .sd-content ul li[class*='share-'].share-press-this a.sd-button {
- background: #1e8cbe;
- color: #fff !important;
-}
-
-.sd-social-icon .sd-content ul li[class*='share-'].share-telegram a.sd-button {
- background: #0088cc;
- color: #fff !important;
-}
-
-.sd-social-icon .sd-content ul li[class*='share-'].share-linkedin a.sd-button {
- background: #0077b5;
- color: #fff !important;
-}
-
-.sd-social-icon .sd-content ul li[class*='share-'].share-pocket a.sd-button {
- background: #ee4056;
- color: #fff !important;
-}
-
-.sd-social-icon .sd-content ul li[class*='share-'].share-reddit a.sd-button {
- background: #cee3f8;
- color: #555555 !important;
-}
-
-.sd-social-icon .sd-content ul li[class*='share-'].share-skype a.sd-button {
- background: #00AFF0;
- color: #fff !important;
-}
-
-/**
- * Screen Reader Text for "Icon Only" option
- */
-
-.sharing-screen-reader-text {
- clip: rect(1px, 1px, 1px, 1px);
- position: absolute !important;
- height: 1px;
- width: 1px;
- overflow: hidden;
-}
-
-.sharing-screen-reader-text:hover,
-.sharing-screen-reader-text:active,
-.sharing-screen-reader-text:focus {
- background-color: #f1f1f1;
- border-radius: 3px;
- box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6);
- clip: auto !important;
- color: #21759b;
- display: block;
- font-size: 14px;
- font-weight: bold;
- height: auto;
- left: 5px;
- line-height: normal;
- padding: 15px 23px 14px;
- text-decoration: none;
- top: 5px;
- width: auto;
- z-index: 100000; /* Above WP toolbar */
-}
-
-
-/**
- * Sharing Email Dialog
- */
-
-#sharing_email {
- width: 342px;
- position: absolute;
- z-index: 1001;
- border: 1px solid #ccc;
- padding: 15px;
- background: #fff;
- box-shadow: 0px 5px 20px rgba(0,0,0,.2);
- text-align: left;
-}
-
-div.sharedaddy.sharedaddy-dark #sharing_email {
- border-color: #fff;
-}
-
-#sharing_email .errors {
- color: #fff;
- background-color: #771a09;
- font-size: 12px;
- padding: 5px 8px;
- line-height: 1;
- margin: 10px 0 0 0;
-}
-
-#sharing_email label {
- font-size: 12px;
- color: #333;
- font-weight: bold;
- display: block;
- padding: 0 0 4px 0;
- text-align: left;
- text-shadow: none;
-}
-
-#sharing_email form {
- margin: 0;
-}
-
-#sharing_email input[type="text"], #sharing_email input[type="email"] {
- width: 100%;
- box-sizing: border-box;
- -moz-box-sizing:border-box;
- -webkit-box-sizing:border-box;
- border: 1px solid #ccc;
- margin-bottom: 1em;
- background: #fff;
- font-size: 12px;
- color: #333;
- max-width: none;
- padding: 1px 3px;
-}
-#jetpack-source_f_name {
- display: none!important;
- position: absolute !important;
- left: -9000px;
-}
-
-#sharing_email .sharing_cancel {
- padding: 0 0 0 1em;
- font-size: 12px;
- text-shadow: none;
-}
-
-#sharing_email .recaptcha {
- width: 312px;
- height: 123px;
- margin: 0 0 1em 0;
-}
-
diff --git a/plugins/jetpack/modules/sharedaddy/sharing.js b/plugins/jetpack/modules/sharedaddy/sharing.js
deleted file mode 100644
index c38877b6..00000000
--- a/plugins/jetpack/modules/sharedaddy/sharing.js
+++ /dev/null
@@ -1,437 +0,0 @@
-/* global WPCOM_sharing_counts, grecaptcha */
-/* jshint unused:false */
-var sharing_js_options;
-if ( sharing_js_options && sharing_js_options.counts ) {
- var WPCOMSharing = {
- done_urls : [],
- get_counts : function() {
- var url, requests, id, service, service_request;
-
- if ( 'undefined' === typeof WPCOM_sharing_counts ) {
- return;
- }
-
- for ( url in WPCOM_sharing_counts ) {
- id = WPCOM_sharing_counts[ url ];
-
- if ( 'undefined' !== typeof WPCOMSharing.done_urls[ id ] ) {
- continue;
- }
-
- requests = {
- // Pinterest handles share counts for both http and https
- pinterest: [
- window.location.protocol +
- '//api.pinterest.com/v1/urls/count.json?callback=WPCOMSharing.update_pinterest_count&url=' +
- encodeURIComponent( url )
- ],
- // Facebook protocol summing has been shown to falsely double counts, so we only request the current URL
- facebook: [
- window.location.protocol +
- '//graph.facebook.com/?callback=WPCOMSharing.update_facebook_count&ids=' +
- encodeURIComponent( url )
- ]
- };
-
- for ( service in requests ) {
- if ( ! jQuery( 'a[data-shared=sharing-' + service + '-' + id + ']' ).length ) {
- continue;
- }
-
- while ( ( service_request = requests[ service ].pop() ) ) {
- jQuery.getScript( service_request );
- }
-
- if ( sharing_js_options.is_stats_active ) {
- WPCOMSharing.bump_sharing_count_stat( service );
- }
- }
-
- WPCOMSharing.done_urls[ id ] = true;
- }
- },
-
- // get the version of the url that was stored in the dom (sharing-$service-URL)
- get_permalink: function( url ) {
- if ( 'https:' === window.location.protocol ) {
- url = url.replace( /^http:\/\//i, 'https://' );
- } else {
- url = url.replace( /^https:\/\//i, 'http://' );
- }
-
- return url;
- },
- update_facebook_count: function( data ) {
- var url, permalink;
-
- if ( ! data ) {
- return;
- }
-
- for ( url in data ) {
- if ( ! data.hasOwnProperty( url ) || ! data[ url ].share || ! data[ url ].share.share_count ) {
- continue;
- }
-
- permalink = WPCOMSharing.get_permalink( url );
-
- if ( ! ( permalink in WPCOM_sharing_counts ) ) {
- continue;
- }
-
- WPCOMSharing.inject_share_count( 'sharing-facebook-' + WPCOM_sharing_counts[ permalink ], data[ url ].share.share_count );
- }
- },
- update_pinterest_count : function( data ) {
- if ( 'undefined' !== typeof data.count && ( data.count * 1 ) > 0 ) {
- WPCOMSharing.inject_share_count( 'sharing-pinterest-' + WPCOM_sharing_counts[ data.url ], data.count );
- }
- },
- inject_share_count : function( id, count ) {
- var $share = jQuery( 'a[data-shared=' + id + '] > span');
- $share.find( '.share-count' ).remove();
- $share.append( '<span class="share-count">' + WPCOMSharing.format_count( count ) + '</span>' );
- },
- format_count : function( count ) {
- if ( count < 1000 ) {
- return count;
- }
- if ( count >= 1000 && count < 10000 ) {
- return String( count ).substring( 0, 1 ) + 'K+';
- }
- return '10K+';
- },
- bump_sharing_count_stat: function( service ) {
- new Image().src = document.location.protocol + '//pixel.wp.com/g.gif?v=wpcom-no-pv&x_sharing-count-request=' + service + '&r=' + Math.random();
- }
- };
-}
-
-(function($){
- var $body, $sharing_email;
-
- $.fn.extend( {
- share_is_email: function() {
- return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test( this.val() );
- }
- } );
-
- $body = $( document.body ).on( 'post-load', WPCOMSharing_do );
- $( document ).ready( function() {
- $sharing_email = $( '#sharing_email' );
- $body.append( $sharing_email );
- WPCOMSharing_do();
- } );
-
- function WPCOMSharing_do() {
- var $more_sharing_buttons;
- if ( 'undefined' !== typeof WPCOMSharing ) {
- WPCOMSharing.get_counts();
- }
- $more_sharing_buttons = $( '.sharedaddy a.sharing-anchor' );
-
- $more_sharing_buttons.click( function() {
- return false;
- } );
-
- $( '.sharedaddy a' ).each( function() {
- if ( $( this ).attr( 'href' ) && $( this ).attr( 'href' ).indexOf( 'share=' ) !== -1 ) {
- $( this ).attr( 'href', $( this ).attr( 'href' ) + '&nb=1' );
- }
- } );
-
- // Show hidden buttons
-
- // Touchscreen device: use click.
- // Non-touchscreen device: use click if not already appearing due to a hover event
- $more_sharing_buttons.on( 'click', function() {
- var $more_sharing_button = $( this ),
- $more_sharing_pane = $more_sharing_button.parents( 'div:first' ).find( '.inner' );
-
- if ( $more_sharing_pane.is( ':animated' ) ) {
- // We're in the middle of some other event's animation
- return;
- }
-
- if ( true === $more_sharing_pane.data( 'justSlid' ) ) {
- // We just finished some other event's animation - don't process click event so that slow-to-react-clickers don't get confused
- return;
- }
-
- $sharing_email.slideUp( 200 );
-
- $more_sharing_pane.css( {
- left: $more_sharing_button.position().left + 'px',
- top: $more_sharing_button.position().top + $more_sharing_button.height() + 3 + 'px'
- } ).slideToggle( 200 );
- } );
-
- if ( document.ontouchstart === undefined ) {
- // Non-touchscreen device: use hover/mouseout with delay
- $more_sharing_buttons.hover( function() {
- var $more_sharing_button = $( this ),
- $more_sharing_pane = $more_sharing_button.parents( 'div:first' ).find( '.inner' ),
- timer;
-
- if ( ! $more_sharing_pane.is( ':animated' ) ) {
- // Create a timer to make the area appear if the mouse hovers for a period
- timer = setTimeout( function() {
- var handler_item_leave, handler_item_enter, handler_original_leave, handler_original_enter, close_it;
-
- $sharing_email.slideUp( 200 );
-
- $more_sharing_pane.data( 'justSlid', true );
- $more_sharing_pane.css( {
- left: $more_sharing_button.position().left + 'px',
- top: $more_sharing_button.position().top + $more_sharing_button.height() + 3 + 'px'
- } ).slideDown( 200, function() {
- // Mark the item as have being appeared by the hover
- $more_sharing_button.data( 'hasoriginal', true ).data( 'hasitem', false );
-
- setTimeout( function() {
- $more_sharing_pane.data( 'justSlid', false );
- }, 300 );
-
- $more_sharing_pane.mouseleave( handler_item_leave ).mouseenter( handler_item_enter );
- $more_sharing_button.mouseleave( handler_original_leave ).mouseenter( handler_original_enter );
- } );
-
- // The following handlers take care of the mouseenter/mouseleave for the share button and the share area - if both are left then we close the share area
- handler_item_leave = function() {
- $more_sharing_button.data( 'hasitem', false );
-
- if ( $more_sharing_button.data( 'hasoriginal' ) === false ) {
- var timer = setTimeout( close_it, 800 );
- $more_sharing_button.data( 'timer2', timer );
- }
- };
-
- handler_item_enter = function() {
- $more_sharing_button.data( 'hasitem', true );
- clearTimeout( $more_sharing_button.data( 'timer2' ) );
- };
-
- handler_original_leave = function() {
- $more_sharing_button.data( 'hasoriginal', false );
-
- if ( $more_sharing_button.data( 'hasitem' ) === false ) {
- var timer = setTimeout( close_it, 800 );
- $more_sharing_button.data( 'timer2', timer );
- }
- };
-
- handler_original_enter = function() {
- $more_sharing_button.data( 'hasoriginal', true );
- clearTimeout( $more_sharing_button.data( 'timer2' ) );
- };
-
- close_it = function() {
- $more_sharing_pane.data( 'justSlid', true );
- $more_sharing_pane.slideUp( 200, function() {
- setTimeout( function() {
- $more_sharing_pane.data( 'justSlid', false );
- }, 300 );
- } );
-
- // Clear all hooks
- $more_sharing_button.unbind( 'mouseleave', handler_original_leave ).unbind( 'mouseenter', handler_original_enter );
- $more_sharing_pane.unbind( 'mouseleave', handler_item_leave ).unbind( 'mouseenter', handler_item_leave );
- return false;
- };
- }, 200 );
-
- // Remember the timer so we can detect it on the mouseout
- $more_sharing_button.data( 'timer', timer );
- }
- }, function() {
- // Mouse out - remove any timer
- $more_sharing_buttons.each( function() {
- clearTimeout( $( this ).data( 'timer' ) );
- } );
- $more_sharing_buttons.data( 'timer', false );
- } );
- } else {
- $( document.body ).addClass( 'jp-sharing-input-touch' );
- }
-
- $( document ).click(function() {
-
- // Click outside
- // remove any timer
- $more_sharing_buttons.each( function() {
- clearTimeout( $( this ).data( 'timer' ) );
- } );
- $more_sharing_buttons.data( 'timer', false );
-
- // slide down forcibly
- $( '.sharedaddy .inner' ).slideUp();
-
- });
-
- // Add click functionality
- $( '.sharedaddy ul' ).each( function() {
-
- if ( 'yep' === $( this ).data( 'has-click-events' ) ) {
- return;
- }
- $( this ).data( 'has-click-events', 'yep' );
-
- var printUrl = function ( uniqueId, urlToPrint ) {
- $( 'body:first' ).append( '<iframe style="position:fixed;top:100;left:100;height:1px;width:1px;border:none;" id="printFrame-' + uniqueId + '" name="printFrame-' + uniqueId + '" src="' + urlToPrint + '" onload="frames[\'printFrame-' + uniqueId + '\'].focus();frames[\'printFrame-' + uniqueId + '\'].print();"></iframe>' );
- };
-
- // Print button
- $( this ).find( 'a.share-print' ).click( function() {
- var ref = $( this ).attr( 'href' ),
- do_print = function() {
- if ( ref.indexOf( '#print' ) === -1 ) {
- var uid = new Date().getTime();
- printUrl( uid , ref );
- } else {
- print();
- }
- };
-
- // Is the button in a dropdown?
- if ( $( this ).parents( '.sharing-hidden' ).length > 0 ) {
- $( this ).parents( '.inner' ).slideUp( 0, function() {
- do_print();
- } );
- } else {
- do_print();
- }
-
- return false;
- } );
-
- // Press This button
- $( this ).find( 'a.share-press-this' ).click( function() {
- var s = '';
-
- if ( window.getSelection ) {
- s = window.getSelection();
- } else if( document.getSelection ) {
- s = document.getSelection();
- } else if( document.selection ) {
- s = document.selection.createRange().text;
- }
-
- if ( s ) {
- $( this ).attr( 'href', $( this ).attr( 'href' ) + '&sel=' + encodeURI( s ) );
- }
-
- if ( !window.open( $( this ).attr( 'href' ), 't', 'toolbar=0,resizable=1,scrollbars=1,status=1,width=720,height=570' ) ) {
- document.location.href = $( this ).attr( 'href' );
- }
-
- return false;
- } );
-
- // Email button
- $( 'a.share-email', this ).on( 'click', function() {
- var url = $( this ).attr( 'href' );
- var currentDomain = window.location.protocol + '//' + window.location.hostname + '/';
- if ( url.indexOf( currentDomain ) !== 0 ) {
- return true;
- }
-
- if ( $sharing_email.is( ':visible' ) ) {
- $sharing_email.slideUp( 200 );
- } else {
- $( '.sharedaddy .inner' ).slideUp();
-
- $( '#sharing_email .response' ).remove();
- $( '#sharing_email form' ).show();
- $( '#sharing_email form input[type=submit]' ).removeAttr( 'disabled' );
- $( '#sharing_email form a.sharing_cancel' ).show();
-
- // Reset reCATPCHA if exists.
- if ( 'object' === typeof grecaptcha && 'function' === typeof grecaptcha.reset && window.___grecaptcha_cfg.count ) {
- grecaptcha.reset();
- }
-
- // Show dialog
- $sharing_email.css( {
- left: $( this ).offset().left + 'px',
- top: $( this ).offset().top + $( this ).height() + 'px'
- } ).slideDown( 200 );
-
- // Hook up other buttons
- $( '#sharing_email a.sharing_cancel' ).unbind( 'click' ).click( function() {
- $( '#sharing_email .errors' ).hide();
- $sharing_email.slideUp( 200 );
- $( '#sharing_background' ).fadeOut();
- return false;
- } );
-
- // Submit validation
- $( '#sharing_email input[type=submit]' ).unbind( 'click' ).click( function() {
- var form = $( this ).parents( 'form' );
- var source_email_input = form.find( 'input[name=source_email]' );
- var target_email_input = form.find( 'input[name=target_email]' );
-
- // Disable buttons + enable loading icon
- $( this ).prop( 'disabled', true );
- form.find( 'a.sharing_cancel' ).hide();
- form.find( 'img.loading' ).show();
-
- $( '#sharing_email .errors' ).hide();
- $( '#sharing_email .error' ).removeClass( 'error' );
-
- if ( ! source_email_input.share_is_email() ) {
- source_email_input.addClass( 'error' );
- }
-
- if ( ! target_email_input.share_is_email() ) {
- target_email_input.addClass( 'error' );
- }
-
- if ( $( '#sharing_email .error' ).length === 0 ) {
- // AJAX send the form
- $.ajax( {
- url: url,
- type: 'POST',
- data: form.serialize(),
- success: function( response ) {
- form.find( 'img.loading' ).hide();
-
- if ( response === '1' || response === '2' || response === '3' ) {
- $( '#sharing_email .errors-' + response ).show();
- form.find( 'input[type=submit]' ).removeAttr( 'disabled' );
- form.find( 'a.sharing_cancel' ).show();
-
- if ( 'object' === typeof grecaptcha && 'function' === typeof grecaptcha.reset ) {
- grecaptcha.reset();
- }
- }
- else {
- $( '#sharing_email form' ).hide();
- $sharing_email.append( response );
- $( '#sharing_email a.sharing_cancel' ).click( function() {
- $sharing_email.slideUp( 200 );
- $( '#sharing_background' ).fadeOut();
- return false;
- } );
- }
- }
- } );
-
- return false;
- }
-
- form.find( 'img.loading' ).hide();
- form.find( 'input[type=submit]' ).removeAttr( 'disabled' );
- form.find( 'a.sharing_cancel' ).show();
- $( '#sharing_email .errors-1' ).show();
-
- return false;
- } );
- }
-
- return false;
- } );
- } );
-
- $( 'li.share-email, li.share-custom a.sharing-anchor' ).addClass( 'share-service-visible' );
- }
-})( jQuery );
diff --git a/plugins/jetpack/modules/sharedaddy/sharing.php b/plugins/jetpack/modules/sharedaddy/sharing.php
deleted file mode 100644
index b2d4872c..00000000
--- a/plugins/jetpack/modules/sharedaddy/sharing.php
+++ /dev/null
@@ -1,619 +0,0 @@
-<?php
-if ( ! defined( 'WP_SHARING_PLUGIN_URL' ) ) {
- define( 'WP_SHARING_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
- define( 'WP_SHARING_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
-}
-
-class Sharing_Admin {
- public function __construct() {
- require_once WP_SHARING_PLUGIN_DIR . 'sharing-service.php';
-
- add_action( 'admin_init', array( &$this, 'admin_init' ) );
- add_action( 'admin_menu', array( &$this, 'subscription_menu' ) );
-
- // Insert our CSS and JS
- add_action( 'load-settings_page_sharing', array( &$this, 'sharing_head' ) );
-
- // Catch AJAX
- add_action( 'wp_ajax_sharing_save_services', array( &$this, 'ajax_save_services' ) );
- add_action( 'wp_ajax_sharing_save_options', array( &$this, 'ajax_save_options' ) );
- add_action( 'wp_ajax_sharing_new_service', array( &$this, 'ajax_new_service' ) );
- add_action( 'wp_ajax_sharing_delete_service', array( &$this, 'ajax_delete_service' ) );
- }
-
- public function sharing_head() {
- wp_enqueue_script(
- 'sharing-js',
- Jetpack::get_file_url_for_environment(
- '_inc/build/sharedaddy/admin-sharing.min.js',
- 'modules/sharedaddy/admin-sharing.js'
- ),
- array( 'jquery-ui-draggable', 'jquery-ui-droppable', 'jquery-ui-sortable', 'jquery-form' ),
- 2
- );
-
- /**
- * Filters the switch that if set to true allows Jetpack to use minified assets. Defaults to true
- * if the SCRIPT_DEBUG constant is not set or set to false. The filter overrides it.
- *
- * @since 6.2.0
- *
- * @param boolean $var should Jetpack use minified assets.
- */
- $postfix = apply_filters( 'jetpack_should_use_minified_assets', true ) ? '.min' : '';
- if ( is_rtl() ) {
- wp_enqueue_style( 'sharing-admin', WP_SHARING_PLUGIN_URL . 'admin-sharing-rtl' . $postfix . '.css', false, JETPACK__VERSION );
- } else {
- wp_enqueue_style( 'sharing-admin', WP_SHARING_PLUGIN_URL . 'admin-sharing' . $postfix . '.css', false, JETPACK__VERSION );
- }
- wp_enqueue_style( 'sharing', WP_SHARING_PLUGIN_URL . 'sharing.css', false, JETPACK__VERSION );
-
- wp_enqueue_style( 'social-logos' );
- wp_enqueue_script( 'sharing-js-fe', WP_SHARING_PLUGIN_URL . 'sharing.js', array(), 4 );
- add_thickbox();
-
- // On Jetpack sites, make sure we include CSS to style the admin page.
- if ( ! defined( 'IS_WPCOM' ) || ! IS_WPCOM ) {
- Jetpack_Admin_Page::load_wrapper_styles();
- }
- }
-
- public function admin_init() {
- if ( isset( $_GET['page'] ) && ( $_GET['page'] == 'sharing.php' || $_GET['page'] == 'sharing' ) ) {
- $this->process_requests();
- }
- }
-
- public function process_requests() {
- if ( isset( $_POST['_wpnonce'] ) && wp_verify_nonce( $_POST['_wpnonce'], 'sharing-options' ) ) {
- $sharer = new Sharing_Service();
- $sharer->set_global_options( $_POST );
- /**
- * Fires when updating sharing settings.
- *
- * @module sharedaddy
- *
- * @since 1.1.0
- */
- do_action( 'sharing_admin_update' );
-
- wp_safe_redirect( admin_url( 'options-general.php?page=sharing&update=saved' ) );
- die();
- }
- }
-
- public function subscription_menu( $user ) {
- if ( ! defined( 'IS_WPCOM' ) || ! IS_WPCOM ) {
- $active = Jetpack::get_active_modules();
- if ( ! in_array( 'publicize', $active ) && ! current_user_can( 'manage_options' ) ) {
- return;
- }
- }
-
- add_submenu_page(
- 'options-general.php',
- __( 'Sharing Settings', 'jetpack' ),
- __( 'Sharing', 'jetpack' ),
- 'publish_posts',
- 'sharing',
- array( &$this, 'wrapper_admin_page' )
- );
- }
-
- public function ajax_save_services() {
- if ( isset( $_POST['_wpnonce'] ) && wp_verify_nonce( $_POST['_wpnonce'], 'sharing-options' ) && isset( $_POST['hidden'] ) && isset( $_POST['visible'] ) ) {
- $sharer = new Sharing_Service();
-
- $sharer->set_blog_services( explode( ',', $_POST['visible'] ), explode( ',', $_POST['hidden'] ) );
- die();
- }
- }
-
- public function ajax_new_service() {
- if ( isset( $_POST['_wpnonce'] ) && isset( $_POST['sharing_name'] ) && isset( $_POST['sharing_url'] ) && isset( $_POST['sharing_icon'] ) && wp_verify_nonce( $_POST['_wpnonce'], 'sharing-new_service' ) ) {
- $sharer = new Sharing_Service();
- if ( $service = $sharer->new_service( stripslashes( $_POST['sharing_name'] ), stripslashes( $_POST['sharing_url'] ), stripslashes( $_POST['sharing_icon'] ) ) ) {
- $this->output_service( $service->get_id(), $service );
- echo '<!--->';
- $service->button_style = 'icon-text';
- $this->output_preview( $service );
-
- die();
- }
- }
-
- // Fail
- die( '1' );
- }
-
- public function ajax_delete_service() {
- if ( isset( $_POST['_wpnonce'] ) && isset( $_POST['service'] ) && wp_verify_nonce( $_POST['_wpnonce'], 'sharing-options_' . $_POST['service'] ) ) {
- $sharer = new Sharing_Service();
- $sharer->delete_service( $_POST['service'] );
- }
- }
-
- public function ajax_save_options() {
- if ( isset( $_POST['_wpnonce'] ) && isset( $_POST['service'] ) && wp_verify_nonce( $_POST['_wpnonce'], 'sharing-options_' . $_POST['service'] ) ) {
- $sharer = new Sharing_Service();
- $service = $sharer->get_service( $_POST['service'] );
-
- if ( $service && $service instanceof Sharing_Advanced_Source ) {
- $service->update_options( $_POST );
-
- $sharer->set_service( $_POST['service'], $service );
- }
-
- $this->output_service( $service->get_id(), $service, true );
- echo '<!--->';
- $service->button_style = 'icon-text';
- $this->output_preview( $service );
- die();
- }
- }
-
- public function output_preview( $service ) {
-
- $klasses = array( 'advanced', 'preview-item' );
-
- if ( $service->button_style != 'text' || $service->has_custom_button_style() ) {
- $klasses[] = 'preview-' . $service->get_class();
- $klasses[] = 'share-' . $service->get_class();
- if ( $service->is_deprecated() ) {
- $klasses[] = 'share-deprecated';
- }
-
- if ( $service->get_class() != $service->get_id() ) {
- $klasses[] = 'preview-' . $service->get_id();
- }
- }
-
- echo '<li class="' . implode( ' ', $klasses ) . '">';
- $service->display_preview();
- echo '</li>';
- }
-
- public function output_service( $id, $service, $show_dropdown = false ) {
- $title = '';
- $klasses = array( 'service', 'advanced', 'share-' . $service->get_class() );
- if ( $service->is_deprecated() ) {
- $title = sprintf( __( 'The %1$s service has shut down. This sharing button is not displayed to your visitors and should be removed.', 'jetpack' ), $service->get_name() );
- $klasses[] = 'share-deprecated';
- }
-
-?>
- <li class="<?php echo implode( ' ', $klasses ); ?>" id="<?php echo $service->get_id(); ?>" tabindex="0" title="<?php echo esc_attr( $title ); ?>">
- <span class="options-left"><?php echo esc_html( $service->get_name() ); ?></span>
- <?php if ( 0 === strpos( $service->get_id(), 'custom-' ) || $service->has_advanced_options() ) : ?>
- <span class="close"><a href="#" class="remove">&times;</a></span>
- <form method="post" action="<?php echo admin_url( 'admin-ajax.php' ); ?>">
- <input type="hidden" name="action" value="sharing_delete_service" />
- <input type="hidden" name="service" value="<?php echo esc_attr( $id ); ?>" />
- <input type="hidden" name="_wpnonce" value="<?php echo wp_create_nonce( 'sharing-options_' . $id );?>" />
- </form>
- <?php endif; ?>
- </li>
-<?php
- }
-
- public function wrapper_admin_page() {
- Jetpack_Admin_Page::wrap_ui( array( &$this, 'management_page' ), array( 'is-wide' =>true ) );
- }
-
- public function management_page() {
- $sharer = new Sharing_Service();
- $enabled = $sharer->get_blog_services();
- $global = $sharer->get_global_options();
-
- $shows = array_values( get_post_types( array( 'public' => true ) ) );
- array_unshift( $shows, 'index' );
-
- if ( false == function_exists( 'mb_stripos' ) ) {
- echo '<div id="message" class="updated fade"><h3>' . __( 'Warning! Multibyte support missing!', 'jetpack' ) . '</h3>';
- echo '<p>' . sprintf( __( 'This plugin will work without it, but multibyte support is used <a href="%s" rel="noopener noreferrer" target="_blank">if available</a>. You may see minor problems with Tweets and other sharing services.', 'jetpack' ), 'http://www.php.net/manual/en/mbstring.installation.php' ) . '</p></div>';
- }
-
- if ( isset( $_GET['update'] ) && $_GET['update'] == 'saved' ) {
- echo '<div class="updated"><p>' . __( 'Settings have been saved', 'jetpack' ) . '</p></div>';
- }
-
- if ( ! isset( $global['sharing_label'] ) ) {
- $global['sharing_label'] = __( 'Share this:', 'jetpack' );
- }
-?>
-
- <div class="wrap">
- <div class="icon32" id="icon-options-general"><br /></div>
- <h1><?php _e( 'Sharing Settings', 'jetpack' ); ?></h1>
-
- <?php
- /**
- * Fires at the top of the admin sharing settings screen.
- *
- * @module sharedaddy
- *
- * @since 1.6.0
- */
- do_action( 'pre_admin_screen_sharing' );
- ?>
-
- <?php if ( current_user_can( 'manage_options' ) ) : ?>
-
- <div class="share_manage_options">
- <h2><?php _e( 'Sharing Buttons', 'jetpack' ) ?></h2>
- <p><?php _e( 'Add sharing buttons to your blog and allow your visitors to share posts with their friends.', 'jetpack' ) ?></p>
-
- <div id="services-config">
- <table id="available-services">
- <tr>
- <td class="description">
- <h3><?php _e( 'Available Services', 'jetpack' ); ?></h3>
- <p><?php _e( "Drag and drop the services you'd like to enable into the box below.", 'jetpack' ); ?></p>
- <p><a href="#TB_inline?height=395&amp;width=600&amp;inlineId=new-service" class="thickbox" id="add-a-new-service"><?php _e( 'Add a new service', 'jetpack' ); ?></a></p>
- </td>
- <td class="services">
- <ul class="services-available" style="height: 100px;">
- <?php foreach ( $sharer->get_all_services_blog() as $id => $service ) : ?>
- <?php
- if ( ! isset( $enabled['all'][ $id ] ) ) {
- $this->output_service( $id, $service );
- }
- ?>
- <?php endforeach; ?>
- </ul>
- <?php
- if ( -1 == get_option( 'blog_public' ) ) {
- echo '<p><strong>' . __( 'Please note that your services have been restricted because your site is private.', 'jetpack' ) . '</strong></p>';
- }
- ?>
- <br class="clearing" />
- </td>
- </tr>
- </table>
-
- <table id="enabled-services">
- <tr>
- <td class="description">
- <h3>
- <?php _e( 'Enabled Services', 'jetpack' ); ?>
- <img src="<?php echo admin_url( 'images/loading.gif' ); ?>" width="16" height="16" alt="loading" style="vertical-align: middle; display: none" />
- </h3>
- <p><?php _e( 'Services dragged here will appear individually.', 'jetpack' ); ?></p>
- </td>
- <td class="services" id="share-drop-target">
- <h2 id="drag-instructions" <?php if ( count( $enabled['visible'] ) > 0 ) { echo ' style="display: none"';} ?>><?php _e( 'Drag and drop available services here.', 'jetpack' ); ?></h2>
-
- <ul class="services-enabled">
- <?php foreach ( $enabled['visible'] as $id => $service ) : ?>
- <?php $this->output_service( $id, $service, true ); ?>
- <?php endforeach; ?>
-
- <li class="end-fix"></li>
- </ul>
- </td>
- <td id="hidden-drop-target" class="services">
- <p><?php _e( 'Services dragged here will be hidden behind a share button.', 'jetpack' ); ?></p>
-
- <ul class="services-hidden">
- <?php foreach ( $enabled['hidden'] as $id => $service ) : ?>
- <?php $this->output_service( $id, $service, true ); ?>
- <?php endforeach; ?>
- <li class="end-fix"></li>
- </ul>
- </td>
- </tr>
- </table>
-
- <table id="live-preview">
- <tr>
- <td class="description">
- <h3><?php _e( 'Live Preview', 'jetpack' ); ?></h3>
- </td>
- <td class="services">
- <h2 <?php echo ( count( $enabled['all'] ) > 0 ) ? ' style="display: none"' : ''; ?>><?php _e( 'Sharing is off. Add services above to enable.', 'jetpack' ); ?></h2>
- <div class="sharedaddy sd-sharing-enabled">
- <?php if ( count( $enabled['all'] ) > 0 ) : ?>
- <h3 class="sd-title"><?php echo esc_html( $global['sharing_label'] ); ?></h3>
- <?php endif; ?>
- <div class="sd-content">
- <ul class="preview">
- <?php foreach ( $enabled['visible'] as $id => $service ) : ?>
- <?php $this->output_preview( $service ); ?>
- <?php endforeach; ?>
-
- <?php if ( count( $enabled['hidden'] ) > 0 ) : ?>
- <li class="advanced"><a href="#" class="sharing-anchor sd-button share-more"><span><?php _e( 'More', 'jetpack' ); ?></span></a></li>
- <?php endif; ?>
- </ul>
-
- <?php if ( count( $enabled['hidden'] ) > 0 ) : ?>
- <div class="sharing-hidden">
- <div class="inner" style="display: none; <?php echo count( $enabled['hidden'] ) == 1 ? 'width:150px;' : ''; ?>">
- <?php if ( count( $enabled['hidden'] ) == 1 ) : ?>
- <ul style="background-image:none;">
- <?php else : ?>
- <ul>
- <?php endif; ?>
-
- <?php
- foreach ( $enabled['hidden'] as $id => $service ) {
- $this->output_preview( $service );
- }
- ?>
- </ul>
- </div>
- </div>
- <?php endif; ?>
-
- <ul class="archive" style="display:none;">
- <?php
- foreach ( $sharer->get_all_services_blog() as $id => $service ) :
- if ( isset( $enabled['visible'][ $id ] ) ) {
- $service = $enabled['visible'][ $id ];
- } elseif ( isset( $enabled['hidden'][ $id ] ) ) {
- $service = $enabled['hidden'][ $id ];
- }
-
- $service->button_style = 'icon-text'; // The archive needs the full text, which is removed in JS later
- $service->smart = false;
- $this->output_preview( $service );
- endforeach; ?>
- <li class="advanced"><a href="#" class="sharing-anchor sd-button share-more"><span><?php _e( 'More', 'jetpack' ); ?></span></a></li>
- </ul>
- </div>
- </div>
- <br class="clearing" />
- </td>
- </tr>
- </table>
-
- <form method="post" action="<?php echo admin_url( 'admin-ajax.php' ); ?>" id="save-enabled-shares">
- <input type="hidden" name="action" value="sharing_save_services" />
- <input type="hidden" name="visible" value="<?php echo implode( ',', array_keys( $enabled['visible'] ) ); ?>" />
- <input type="hidden" name="hidden" value="<?php echo implode( ',', array_keys( $enabled['hidden'] ) ); ?>" />
- <input type="hidden" name="_wpnonce" value="<?php echo wp_create_nonce( 'sharing-options' );?>" />
- </form>
- </div>
-
- <form method="post" action="">
- <table class="form-table">
- <tbody>
- <tr valign="top">
- <th scope="row"><label><?php _e( 'Button style', 'jetpack' ); ?></label></th>
- <td>
- <select name="button_style" id="button_style">
- <option<?php echo ( $global['button_style'] == 'icon-text' ) ? ' selected="selected"' : ''; ?> value="icon-text"><?php _e( 'Icon + text', 'jetpack' ); ?></option>
- <option<?php echo ( $global['button_style'] == 'icon' ) ? ' selected="selected"' : ''; ?> value="icon"><?php _e( 'Icon only', 'jetpack' ); ?></option>
- <option<?php echo ( $global['button_style'] == 'text' ) ? ' selected="selected"' : ''; ?> value="text"><?php _e( 'Text only', 'jetpack' ); ?></option>
- <option<?php echo ( $global['button_style'] == 'official' ) ? ' selected="selected"' : ''; ?> value="official"><?php _e( 'Official buttons', 'jetpack' ); ?></option>
- </select>
- </td>
- </tr>
- <tr valign="top">
- <th scope="row"><label><?php _e( 'Sharing label', 'jetpack' ); ?></label></th>
- <td>
- <input type="text" name="sharing_label" value="<?php echo esc_attr( $global['sharing_label'] ); ?>" />
- </td>
- </tr>
- <?php
- /**
- * Filters the HTML at the beginning of the "Show button on" row.
- *
- * @module sharedaddy
- *
- * @since 2.1.0
- *
- * @param string $var Opening HTML tag at the beginning of the "Show button on" row.
- */
- echo apply_filters( 'sharing_show_buttons_on_row_start', '<tr valign="top">' );
- ?>
- <th scope="row"><label><?php _e( 'Show buttons on', 'jetpack' ); ?></label></th>
- <td>
- <?php
- $br = false;
- foreach ( $shows as $show ) :
- if ( 'index' == $show ) {
- $label = __( 'Front Page, Archive Pages, and Search Results', 'jetpack' );
- } else {
- $post_type_object = get_post_type_object( $show );
- $label = $post_type_object->labels->name;
- }
- ?>
- <?php
- if ( $br ) {
- echo '<br />';
- }
- ?>
- <label><input type="checkbox"<?php checked( in_array( $show, $global['show'] ) ); ?> name="show[]" value="<?php echo esc_attr( $show ); ?>" /> <?php echo esc_html( $label ); ?></label>
- <?php
- $br = true;
- endforeach;
- ?>
- </td>
- <?php
- /**
- * Filters the HTML at the end of the "Show button on" row.
- *
- * @module sharedaddy
- *
- * @since 2.1.0
- *
- * @param string $var Closing HTML tag at the end of the "Show button on" row.
- */
- echo apply_filters( 'sharing_show_buttons_on_row_end', '</tr>' );
- ?>
-
- <?php
- /**
- * Fires at the end of the sharing global options settings table.
- *
- * @module sharedaddy
- *
- * @since 1.1.0
- */
- do_action( 'sharing_global_options' );
- ?>
- </tbody>
- </table>
-
- <p class="submit">
- <input type="submit" name="submit" class="button-primary" value="<?php esc_attr_e( 'Save Changes', 'jetpack' ); ?>" />
- </p>
-
- <input type="hidden" name="_wpnonce" value="<?php echo wp_create_nonce( 'sharing-options' );?>" />
- </form>
-
- <div id="new-service" style="display: none">
- <form method="post" action="<?php echo admin_url( 'admin-ajax.php' ); ?>" id="new-service-form">
- <table class="form-table">
- <tbody>
- <tr valign="top">
- <th scope="row" width="100"><label><?php _e( 'Service name', 'jetpack' ); ?></label></th>
- <td>
- <input type="text" name="sharing_name" id="new_sharing_name" size="40" />
- </td>
- </tr>
- <tr valign="top">
- <th scope="row" width="100"><label><?php _e( 'Sharing URL', 'jetpack' ); ?></label></th>
- <td>
- <input type="text" name="sharing_url" id="new_sharing_url" size="40" />
-
- <p><?php _e( 'You can add the following variables to your service sharing URL:', 'jetpack' ); ?><br/>
- <code>%post_id%</code>, <code>%post_title%</code>, <code>%post_slug%</code>, <code>%post_url%</code>, <code>%post_full_url%</code>, <code>%post_excerpt%</code>, <code>%post_tags%</code>, <code>%home_url%</code></p>
- </td>
- </tr>
- <tr valign="top">
- <th scope="row" width="100"><label><?php _e( 'Icon URL', 'jetpack' ); ?></label></th>
- <td>
- <input type="text" name="sharing_icon" id="new_sharing_icon" size="40" />
- <p><?php _e( 'Enter the URL of a 16x16px icon you want to use for this service.', 'jetpack' ); ?></p>
- </td>
- </tr>
- <tr valign="top" width="100">
- <th scope="row"></th>
- <td>
- <input type="submit" class="button-primary" value="<?php esc_attr_e( 'Create Share Button', 'jetpack' ); ?>" />
- <img src="<?php echo admin_url( 'images/loading.gif' ); ?>" width="16" height="16" alt="loading" style="vertical-align: middle; display: none" />
- </td>
- </tr>
-
- <?php
- /**
- * Fires after the custom sharing service form
- *
- * @module sharedaddy
- *
- * @since 1.1.0
- */
- do_action( 'sharing_new_service_form' );
- ?>
- </tbody>
- </table>
-
- <?php
- /**
- * Fires at the bottom of the admin sharing settings screen.
- *
- * @module sharedaddy
- *
- * @since 1.6.0
- */
- do_action( 'post_admin_screen_sharing' );
- ?>
-
- <div class="inerror" style="display: none; margin-top: 15px">
- <p><?php _e( 'An error occurred creating your new sharing service - please check you gave valid details.', 'jetpack' ); ?></p>
- </div>
-
- <input type="hidden" name="action" value="sharing_new_service" />
- <input type="hidden" name="_wpnonce" value="<?php echo wp_create_nonce( 'sharing-new_service' );?>" />
- </form>
- </div>
- </div>
-
- <?php endif; ?>
-
-
- </div>
-
- <script type="text/javascript">
- var sharing_loading_icon = '<?php echo esc_js( admin_url( '/images/loading.gif' ) ); ?>';
- <?php if ( isset( $_GET['create_new_service'] ) && 'true' == $_GET['create_new_service'] ) : ?>
- jQuery(document).ready(function() {
- // Prefill new service box and then open it
- jQuery( '#new_sharing_name' ).val( '<?php echo esc_js( $_GET['name'] ); ?>' );
- jQuery( '#new_sharing_url' ).val( '<?php echo esc_js( $_GET['url'] ); ?>' );
- jQuery( '#new_sharing_icon' ).val( '<?php echo esc_js( $_GET['icon'] ); ?>' );
- jQuery( '#add-a-new-service' ).click();
- });
- <?php endif; ?>
- </script>
-<?php
- }
-}
-
-/**
- * Callback to get the value for the jetpack_sharing_enabled field.
- *
- * When the sharing_disabled post_meta is unset, we follow the global setting in Sharing.
- * When it is set to 1, we disable sharing on the post, regardless of the global setting.
- * It is not possible to enable sharing on a post if it is disabled globally.
- */
-function jetpack_post_sharing_get_value( array $post ) {
- // if sharing IS disabled on this post, enabled=false, so negate the meta
- return (bool) ! get_post_meta( $post['id'], 'sharing_disabled', true );
-}
-
-/**
- * Callback to set sharing_disabled post_meta when the
- * jetpack_sharing_enabled field is updated.
- *
- * When the sharing_disabled post_meta is unset, we follow the global setting in Sharing.
- * When it is set to 1, we disable sharing on the post, regardless of the global setting.
- * It is not possible to enable sharing on a post if it is disabled globally.
- *
- */
-function jetpack_post_sharing_update_value( $enable_sharing, $post_object ) {
- if ( $enable_sharing ) {
- // delete the override if we want to enable sharing
- return delete_post_meta( $post_object->ID, 'sharing_disabled' );
- } else {
- return update_post_meta( $post_object->ID, 'sharing_disabled', true );
- }
-}
-
-/**
- * Add Sharing post_meta to the REST API Post response.
- *
- * @action rest_api_init
- * @uses register_rest_field
- * @link https://developer.wordpress.org/rest-api/extending-the-rest-api/modifying-responses/
- */
-function jetpack_post_sharing_register_rest_field() {
- $post_types = get_post_types( array( 'public' => true ) );
- foreach ( $post_types as $post_type ) {
- register_rest_field(
- $post_type,
- 'jetpack_sharing_enabled',
- array(
- 'get_callback' => 'jetpack_post_sharing_get_value',
- 'update_callback' => 'jetpack_post_sharing_update_value',
- 'schema' => array(
- 'description' => __( 'Are sharing buttons enabled?', 'jetpack' ),
- 'type' => 'boolean',
- ),
- )
- );
- }
-}
-
-// Add Sharing post_meta to the REST API Post response.
-add_action( 'rest_api_init', 'jetpack_post_sharing_register_rest_field' );
-
-function sharing_admin_init() {
- global $sharing_admin;
-
- $sharing_admin = new Sharing_Admin();
-}
-
-add_action( 'init', 'sharing_admin_init' );
diff --git a/plugins/jetpack/modules/shortcodes.php b/plugins/jetpack/modules/shortcodes.php
deleted file mode 100644
index de7828c6..00000000
--- a/plugins/jetpack/modules/shortcodes.php
+++ /dev/null
@@ -1,196 +0,0 @@
-<?php
-
-/**
- * Module Name: Shortcode Embeds
- * Module Description: Embed media from popular sites without any coding.
- * Sort Order: 3
- * First Introduced: 1.1
- * Major Changes In: 1.2
- * Requires Connection: No
- * Auto Activate: Yes
- * Module Tags: Photos and Videos, Social, Writing, Appearance
- * Feature: Writing
- * Additional Search Queries: shortcodes, shortcode, embeds, media, bandcamp, dailymotion, facebook, flickr, google calendars, google maps, google+, polldaddy, recipe, recipes, scribd, slideshare, slideshow, slideshows, soundcloud, ted, twitter, vimeo, vine, youtube
- */
-
-/**
- * Transforms the $atts array into a string that the old functions expected
- *
- * The old way was:
- * [shortcode a=1&b=2&c=3] or [shortcode=1]
- * This is parsed as array( a => '1&b=2&c=3' ) and array( 0 => '=1' ), which is useless
- *
- * @param array $params Array of old shortcode parameters.
- * @param bool $old_format_support true if [shortcode=foo] format is possible.
- *
- * @return string $params
- */
-function shortcode_new_to_old_params( $params, $old_format_support = false ) {
- $str = '';
-
- if ( $old_format_support && isset( $params[0] ) ) {
- $str = ltrim( $params[0], '=' );
- } elseif ( is_array( $params ) ) {
- foreach ( array_keys( $params ) as $key ) {
- if ( ! is_numeric( $key ) ) {
- $str = $key . '=' . $params[ $key ];
- }
- }
- }
-
- return str_replace( array( '&amp;', '&#038;' ), '&', $str );
-}
-
-/**
- * Load all available Jetpack shortcode files.
- */
-function jetpack_load_shortcodes() {
- $shortcode_includes = array();
-
- foreach ( Jetpack::glob_php( dirname( __FILE__ ) . '/shortcodes' ) as $file ) {
- $filename = substr( basename( $file ), 0, -4 );
-
- $shortcode_includes[ $filename ] = $file;
- }
-
- /**
- * This filter allows other plugins to override which shortcodes Jetpack loads.
- *
- * Fires as part of the `plugins_loaded` WP hook, so modifying code needs to be in a plugin, not in a theme's functions.php.
- *
- * @module shortcodes
- *
- * @since 2.2.1
- * @since 4.2.0 Added filename without extension as array key.
- *
- * @param array $shortcode_includes An array of which shortcodes to include.
- */
- $shortcode_includes = apply_filters( 'jetpack_shortcodes_to_include', $shortcode_includes );
-
- foreach ( $shortcode_includes as $include ) {
- include_once $include;
- }
-}
-
-/**
- * Runs preg_replace so that replacements don't happen within open tags.
- * Parameters are the same as preg_replace, with an added optional search param for improved performance
- *
- * @param string $pattern Pattern to search for.
- * @param string $replacement String to replace.
- * @param string $content Post content.
- * @param string $search String to search for.
- *
- * @return string $content Replaced post content.
- */
-function jetpack_preg_replace_outside_tags( $pattern, $replacement, $content, $search = null ) {
- if ( $search && false === strpos( $content, $search ) ) {
- return $content;
- }
-
- $textarr = wp_html_split( $content );
- unset( $content );
- foreach ( $textarr as &$element ) {
- if ( '' === $element || '<' === $element{0} ) {
- continue;
- }
- $element = preg_replace( $pattern, $replacement, $element );
- }
-
- return join( $textarr );
-}
-
-/**
- * Runs preg_replace_callback so that replacements don't happen within open tags.
- * Parameters are the same as preg_replace, with an added optional search param for improved performance.
- *
- * @param string $pattern Pattern to search for.
- * @param string $callback Callback returning the replacement string.
- * @param string $content Post content.
- * @param string $search String to search for.
- *
- * @return string $content Replaced post content.
- */
-function jetpack_preg_replace_callback_outside_tags( $pattern, $callback, $content, $search = null ) {
- if ( $search && false === strpos( $content, $search ) ) {
- return $content;
- }
-
- $textarr = wp_html_split( $content );
- unset( $content );
- foreach ( $textarr as &$element ) {
- if ( '' === $element || '<' === $element{0} ) {
- continue;
- }
- $element = preg_replace_callback( $pattern, $callback, $element );
- }
-
- return join( $textarr );
-}
-
-if ( ! function_exists( 'jetpack_shortcode_get_wpvideo_id' ) ) {
- /**
- * Get VideoPress ID from wpvideo shortcode attributes.
- *
- * @param array $atts Shortcode attributes.
- * @return int $id VideoPress ID.
- */
- function jetpack_shortcode_get_wpvideo_id( $atts ) {
- if ( isset( $atts[0] ) ) {
- return $atts[0];
- } else {
- return 0;
- }
- }
-}
-
-if ( ! function_exists( 'jetpack_shortcode_get_videopress_id' ) ) {
- /**
- * Get VideoPress ID from videopress shortcode attributes.
- *
- * @param array $atts Shortcode attributes.
- * @return int $id VideoPress ID.
- */
- function jetpack_shortcode_get_videopress_id( $atts ) {
- if ( isset( $atts[0] ) ) {
- return $atts[0];
- } else {
- return 0;
- }
- }
-}
-
-/**
- * Common element attributes parsing and sanitizing for src, width and height.
- *
- * @since 4.5.0
- *
- * @param array $attrs With original values.
- *
- * @return array $attrs With sanitized values.
- */
-function wpcom_shortcodereverse_parseattr( $attrs ) {
- $defaults = array(
- 'src' => false,
- 'width' => false,
- 'height' => false,
- );
-
- $attrs = shortcode_atts( $defaults, $attrs );
-
- $attrs['src'] = strip_tags( $attrs['src'] ); // For sanity
- $attrs['width'] = ( is_numeric( $attrs['width'] ) ) ? abs( intval( $attrs['width'] ) ) : $defaults['width'];
- $attrs['height'] = ( is_numeric( $attrs['height'] ) ) ? abs( intval( $attrs['height'] ) ) : $defaults['height'];
-
- return $attrs;
-}
-
-/**
- * When an embed service goes away, we can use this handler
- * to output a link for history's sake.
- */
-function jetpack_deprecated_embed_handler( $matches, $attr, $url ) {
- return sprintf( '<a href="%s">%s</a>', esc_url( $url ), esc_html( esc_url( $url ) ) );
-}
-
-jetpack_load_shortcodes();
diff --git a/plugins/jetpack/modules/shortcodes/archiveorg-book.php b/plugins/jetpack/modules/shortcodes/archiveorg-book.php
deleted file mode 100644
index 88ac328c..00000000
--- a/plugins/jetpack/modules/shortcodes/archiveorg-book.php
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-/**
- * Archive.org Shortcode
- *
- * Usage:
- * [archiveorg-book goodytwoshoes00newyiala]
- * [archiveorg-book http://www.archive.org/stream/goodytwoshoes00newyiala]
- * [archiveorg id=goodytwoshoes00newyiala width=480 height=430]
-
- * <iframe src='https://www.archive.org/stream/goodytwoshoes00newyiala?ui=embed#mode/1up' width='480px' height='430px' frameborder='0' ></iframe>
- *
- * @package Jetpack
- */
-
-/**
- * Get ID of requested archive.org book embed.
- *
- * @since 4.5.0
- *
- * @param array $atts Shortcode attributes.
- *
- * @return int|string
- */
-function jetpack_shortcode_get_archiveorg_book_id( $atts ) {
- if ( isset( $atts[0] ) ) {
- $atts[0] = trim( $atts[0], '=' );
- if ( preg_match( '#archive.org/stream/(.+)/?$#i', $atts[0], $match ) ) {
- $id = $match[1];
- } else {
- $id = $atts[0];
- }
- return $id;
- }
- return 0;
-}
-
-/**
- * Convert an archive.org book shortcode into an embed code.
- *
- * @since 4.5.0
- *
- * @param array $atts An array of shortcode attributes.
- * @return string The embed code for the Archive.org book
- */
-function jetpack_archiveorg_book_shortcode( $atts ) {
- global $content_width;
-
- if ( isset( $atts[0] ) && empty( $atts['id'] ) ) {
- $atts['id'] = jetpack_shortcode_get_archiveorg_book_id( $atts );
- }
-
- $atts = shortcode_atts(
- array(
- 'id' => '',
- 'width' => 480,
- 'height' => 430,
- ),
- $atts
- );
-
- if ( ! $atts['id'] ) {
- return '<!-- error: missing archive.org book ID -->';
- }
-
- $id = $atts['id'];
-
- if ( ! $atts['width'] ) {
- $width = absint( $content_width );
- } else {
- $width = intval( $atts['width'] );
- }
-
- if ( ! $atts['height'] ) {
- $height = round( ( $width / 640 ) * 360 );
- } else {
- $height = intval( $atts['height'] );
- }
-
- $url = esc_url( set_url_scheme( "http://archive.org/stream/{$id}?ui=embed#mode/1up" ) );
-
- $html = "<div class='embed-archiveorg-book' style='text-align:center;'><iframe src='$url' width='$width' height='$height' style='border:0;' webkitallowfullscreen='true' mozallowfullscreen='true' allowfullscreen></iframe></div>";
- return $html;
-}
-
-add_shortcode( 'archiveorg-book', 'jetpack_archiveorg_book_shortcode' );
-
-/**
- * Compose shortcode from archive.org book iframe.
- *
- * @since 4.5.0
- *
- * @param string $content Post content.
- *
- * @return mixed
- */
-function jetpack_archiveorg_book_embed_to_shortcode( $content ) {
- if ( ! is_string( $content ) || false === stripos( $content, 'archive.org/stream/' ) ) {
- return $content;
- }
-
- $regexp = '!<iframe\s+src=[\'"](http|https)://(www.archive|archive)\.org/stream/([^\'"]+)[\'"]((?:\s+\w+(=[\'"][^\'"]*[\'"])?)*)\s></iframe>!i';
-
- if ( ! preg_match_all( $regexp, $content, $matches, PREG_SET_ORDER ) ) {
- return $content;
- }
-
- foreach ( $matches as $match ) {
- $url = explode( '?', $match[3] );
- $id = $url[0];
-
- $params = $match[4];
-
- $params = wp_kses_hair( $params, array( 'http' ) );
-
- $width = isset( $params['width'] ) ? absint( $params['width']['value'] ) : 0;
- $height = isset( $params['height'] ) ? absint( $params['height']['value'] ) : 0;
-
- $wh = '';
- if ( $width && $height ) {
- $wh = ' width=' . $width . ' height=' . $height;
- }
-
- $shortcode = '[archiveorg-book ' . $id . $wh . ']';
- $content = str_replace( $match[0], $shortcode, $content );
- }
-
- return $content;
-}
-
-add_filter( 'pre_kses', 'jetpack_archiveorg_book_embed_to_shortcode' );
diff --git a/plugins/jetpack/modules/shortcodes/archiveorg.php b/plugins/jetpack/modules/shortcodes/archiveorg.php
deleted file mode 100644
index 4a335b32..00000000
--- a/plugins/jetpack/modules/shortcodes/archiveorg.php
+++ /dev/null
@@ -1,160 +0,0 @@
-<?php
-/**
- * Archive.org book shortcode.
- *
- * Usage:
- * [archiveorg Experime1940]
- * [archiveorg http://archive.org/details/Experime1940 poster=http://archive.org/images/map.png]
- * [archiveorg id=Experime1940 width=640 height=480 autoplay=1]
-
- * <iframe src="http://archive.org/embed/Experime1940&autoplay=1&poster=http://archive.org/images/map.png" width="640" height="480" frameborder="0" webkitallowfullscreen="true" mozallowfullscreen="true" allowfullscreen></iframe>
- *
- * @package Jetpack
- */
-
-/**
- * Get ID of requested archive.org embed.
- *
- * @since 4.5.0
- *
- * @param array $atts Shortcode attributes.
- *
- * @return int|string
- */
-function jetpack_shortcode_get_archiveorg_id( $atts ) {
- if ( isset( $atts[0] ) ) {
- $atts[0] = trim( $atts[0], '=' );
- if ( preg_match( '#archive.org/(details|embed)/(.+)/?$#i', $atts[0], $match ) ) {
- $id = $match[2];
- } else {
- $id = $atts[0];
- }
- return $id;
- }
- return 0;
-}
-
-/**
- * Convert an archive.org shortcode into an embed code.
- *
- * @since 4.5.0
- *
- * @param array $atts An array of shortcode attributes.
- * @return string The embed code for the archive.org video.
- */
-function jetpack_archiveorg_shortcode( $atts ) {
- global $content_width;
-
- if ( isset( $atts[0] ) && empty( $atts['id'] ) ) {
- $atts['id'] = jetpack_shortcode_get_archiveorg_id( $atts );
- }
-
- $atts = shortcode_atts(
- array(
- 'id' => '',
- 'width' => 640,
- 'height' => 480,
- 'autoplay' => 0,
- 'poster' => '',
- ),
- $atts
- );
-
- if ( ! $atts['id'] ) {
- return '<!-- error: missing archive.org ID -->';
- }
-
- $id = $atts['id'];
-
- if ( ! $atts['width'] ) {
- $width = absint( $content_width );
- } else {
- $width = intval( $atts['width'] );
- }
-
- if ( ! $atts['height'] ) {
- $height = round( ( $width / 640 ) * 360 );
- } else {
- $height = intval( $atts['height'] );
- }
-
- if ( $atts['autoplay'] ) {
- $autoplay = '&autoplay=1';
- } else {
- $autoplay = '';
- }
-
- if ( $atts['poster'] ) {
- $poster = '&poster=' . $atts['poster'];
- } else {
- $poster = '';
- }
-
- $url = esc_url( set_url_scheme( "https://archive.org/embed/{$id}{$autoplay}{$poster}" ) );
-
- $html = "<div class='embed-archiveorg' style='text-align:center;'><iframe src='$url' width='$width' height='$height' style='border:0;' webkitallowfullscreen='true' mozallowfullscreen='true' allowfullscreen></iframe></div>";
-
- return $html;
-}
-
-add_shortcode( 'archiveorg', 'jetpack_archiveorg_shortcode' );
-
-/**
- * Compose shortcode from archive.org iframe.
- *
- * @since 4.5.0
- *
- * @param string $content Post content.
- *
- * @return mixed
- */
-function jetpack_archiveorg_embed_to_shortcode( $content ) {
- if ( ! is_string( $content ) || false === stripos( $content, 'archive.org/embed/' ) ) {
- return $content;
- }
-
- $regexp = '!<iframe\s+src=[\'"]https?://archive\.org/embed/([^\'"]+)[\'"]((?:\s+\w+(=[\'"][^\'"]*[\'"])?)*)></iframe>!i';
-
- if ( ! preg_match_all( $regexp, $content, $matches, PREG_SET_ORDER ) ) {
- return $content;
- }
-
- foreach ( $matches as $match ) {
- $url = explode( '&amp;', $match[1] );
- $id = 'id=' . $url[0];
-
- $autoplay = '';
- $poster = '';
- $url_count = count( $url );
-
- for ( $ii = 1; $ii < $url_count; $ii++ ) {
- if ( 'autoplay=1' === $url[ $ii ] ) {
- $autoplay = ' autoplay="1"';
- }
-
- $map_matches = array();
- if ( preg_match( '/^poster=(.+)$/', $url[ $ii ], $map_matches ) ) {
- $poster = " poster=\"{$map_matches[1]}\"";
- }
- }
-
- $params = $match[2];
-
- $params = wp_kses_hair( $params, array( 'http' ) );
-
- $width = isset( $params['width'] ) ? (int) $params['width']['value'] : 0;
- $height = isset( $params['height'] ) ? (int) $params['height']['value'] : 0;
-
- $wh = '';
- if ( $width && $height ) {
- $wh = ' width=' . $width . ' height=' . $height;
- }
-
- $shortcode = '[archiveorg ' . $id . $wh . $autoplay . $poster . ']';
- $content = str_replace( $match[0], $shortcode, $content );
- }
-
- return $content;
-}
-
-add_filter( 'pre_kses', 'jetpack_archiveorg_embed_to_shortcode' );
diff --git a/plugins/jetpack/modules/shortcodes/archives.php b/plugins/jetpack/modules/shortcodes/archives.php
deleted file mode 100644
index 173bbbb1..00000000
--- a/plugins/jetpack/modules/shortcodes/archives.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-
-/*
- * Archives shortcode
- * @author bubel & nickmomrik
- * [archives limit=10]
- */
-
-add_shortcode( 'archives', 'archives_shortcode' );
-
-function archives_shortcode( $atts ) {
- if ( is_feed() ) {
- return '[archives]';
- }
-
- global $allowedposttags;
-
- $default_atts = array(
- 'type' => 'postbypost',
- 'limit' => '',
- 'format' => 'html',
- 'showcount' => false,
- 'before' => '',
- 'after' => '',
- 'order' => 'desc',
- );
-
- $attr = shortcode_atts( $default_atts, $atts, 'archives' );
-
- if ( ! in_array( $attr['type'], array( 'yearly', 'monthly', 'daily', 'weekly', 'postbypost' ) ) ) {
- $attr['type'] = 'postbypost';
- }
-
- if ( ! in_array( $attr['format'], array( 'html', 'option', 'custom' ) ) ) {
- $attr['format'] = 'html';
- }
-
- $limit = intval( $attr['limit'] );
- // A Limit of 0 makes no sense so revert back to the default.
- if ( empty( $limit ) ) {
- $limit = '';
- }
-
- $showcount = ( false !== $attr['showcount'] && 'false' !== $attr['showcount'] ) ? true : false;
- $before = wp_kses( $attr['before'], $allowedposttags );
- $after = wp_kses( $attr['after'], $allowedposttags );
-
- // Get the archives
- $archives = wp_get_archives(
- array(
- 'type' => $attr['type'],
- 'limit' => $limit,
- 'format' => $attr['format'],
- 'echo' => false,
- 'show_post_count' => $showcount,
- 'before' => $before,
- 'after' => $after,
- )
- );
-
- if ( 'asc' === $attr['order'] ) {
- $archives = implode( "\n", array_reverse( explode( "\n", $archives ) ) );
- }
-
- // Check to see if there are any archives
- if ( empty( $archives ) ) {
- $archives = '<p>' . __( 'Your blog does not currently have any published posts.', 'jetpack' ) . '</p>';
- } elseif ( 'option' === $attr['format'] ) {
- $archives = '<select name="archive-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;"><option value="' . get_permalink() . '">--</option>' . $archives . '</select>';
- } elseif ( 'html' === $attr['format'] ) {
- $archives = '<ul>' . $archives . '</ul>';
- }
-
- return $archives;
-}
diff --git a/plugins/jetpack/modules/shortcodes/audio.php b/plugins/jetpack/modules/shortcodes/audio.php
deleted file mode 100644
index 88c13090..00000000
--- a/plugins/jetpack/modules/shortcodes/audio.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Deprecated. No longer needed.
- *
- * @package Jetpack
- */
diff --git a/plugins/jetpack/modules/shortcodes/bandcamp.php b/plugins/jetpack/modules/shortcodes/bandcamp.php
deleted file mode 100644
index 312418f7..00000000
--- a/plugins/jetpack/modules/shortcodes/bandcamp.php
+++ /dev/null
@@ -1,229 +0,0 @@
-<?php
-// shortcode handler for [bandcamp], which inserts a bandcamp.com
-// music player (iframe, html5)
-//
-// [bandcamp album=119385304]
-// [bandcamp album=3462839126 bgcol=FFFFFF linkcol=4285BB size=venti]
-// [bandcamp track=2446959313]
-//
-function shortcode_handler_bandcamp( $atts ) {
- // there are no default values, but specify here anyway
- // to explicitly list supported atts
- $attributes = shortcode_atts(
- array(
- 'album' => null, // integer album id
- 'track' => null, // integer track id
- 'video' => null, // integer track id for video player
- 'size' => 'venti', // one of the supported sizes
- 'bgcol' => 'FFFFFF', // hex, no '#' prefix
- 'linkcol' => null, // hex, no '#' prefix
- 'layout' => null, // encoded layout url
- 'width' => null, // integer with optional "%"
- 'height' => null, // integer with optional "%"
- 'notracklist' => null, // may be string "true" (defaults false)
- 'tracklist' => null, // may be string "false" (defaults true)
- 'artwork' => null, // may be string "false" (alternately: "none") or "small" (default is large)
- 'minimal' => null, // may be string "true" (defaults false)
- 'theme' => null, // may be theme identifier string ("light"|"dark" so far)
- 'package' => null, // integer package id
- 't' => null, // integer track number
- 'tracks' => null, // comma separated list of allowed tracks
- 'esig' => null, // hex, no '#' prefix
- ),
- $atts,
- 'bandcamp'
- );
-
- $sizes = array(
- 'venti' => array(
- 'width' => 400,
- 'height' => 100,
- ),
- 'grande' => array(
- 'width' => 300,
- 'height' => 100,
- ),
- 'grande2' => array(
- 'width' => 300,
- 'height' => 355,
- ),
- 'grande3' => array(
- 'width' => 300,
- 'height' => 415,
- ),
- 'tall_album' => array(
- 'width' => 150,
- 'height' => 295,
- ),
- 'tall_track' => array(
- 'width' => 150,
- 'height' => 270,
- ),
- 'tall2' => array(
- 'width' => 150,
- 'height' => 450,
- ),
- 'short' => array(
- 'width' => 46,
- 'height' => 23,
- ),
- 'large' => array(
- 'width' => 350,
- 'height' => 470,
- ),
- 'medium' => array(
- 'width' => 450,
- 'height' => 120,
- ),
- 'small' => array(
- 'width' => 350,
- 'height' => 42,
- ),
- );
-
- $sizekey = $attributes['size'];
- $height = null;
- $width = null;
-
- $isVideo = false;
-
- // Build iframe url. For audio players, args are appended as
- // extra path segments for historical reasons having to
- // do with an IE-only flash bug which required this URL
- // to contain no querystring. Delay the actual joining
- // of args into a string until after we decide if it's
- // a video player or an audio player
- $argparts = array();
-
- if ( ! isset( $attributes['album'] ) && ! isset( $attributes['track'] ) && ! isset( $attributes['video'] ) ) {
- return "[bandcamp: shortcode must include 'track', 'album', or 'video' param]";
- }
-
- if ( isset( $attributes['track'] ) && is_numeric( $attributes['track'] ) ) {
- $track = esc_attr( $attributes['track'] );
- array_push( $argparts, "track={$track}" );
- } elseif ( isset( $attributes['video'] ) && is_numeric( $attributes['video'] ) ) {
- $track = esc_attr( $attributes['video'] ); // videos are referenced by track id
- $urlbase = '//bandcamp.com/EmbeddedPlayer/v=2';
- $isVideo = true;
- array_push( $argparts, "track={$track}" );
- }
- if ( isset( $attributes['album'] ) && is_numeric( $attributes['album'] ) ) {
- $album = esc_attr( $attributes['album'] );
- array_push( $argparts, "album={$album}" );
- }
-
- if ( $sizekey == 'tall' ) {
- if ( isset( $attributes['album'] ) ) {
- $sizekey .= '_album';
- } else {
- $sizekey .= '_track';
- }
- }
-
- // if size specified that we don't recognize, fall back on venti
- if ( empty( $sizes[ $sizekey ] ) ) {
- $sizekey = 'venti';
- $attributes['size'] = 'venti';
- }
-
- // use strict regex for digits + optional % instead of absint for height/width
- // 'width' and 'height' params in the iframe url get the exact string from the shortcode
- // args, whereas the inline style attribute must have "px" added to it if it has no "%"
- if ( isset( $attributes['width'] ) && preg_match( '|^([0-9]+)(%)?$|', $attributes['width'], $matches ) ) {
- $width = $csswidth = $attributes['width'];
- if ( sizeof( $matches ) < 3 ) {
- $csswidth .= 'px';
- }
- }
- if ( isset( $attributes['height'] ) && preg_match( '|^([0-9]+)(%)?$|', $attributes['height'], $matches ) ) {
- $height = $cssheight = $attributes['height'];
- if ( sizeof( $matches ) < 3 ) {
- $cssheight .= 'px';
- }
- }
-
- if ( ! $height ) {
- $height = $sizes[ $sizekey ]['height'];
- $cssheight = $height . 'px';
- }
-
- if ( ! $width ) {
- $width = $sizes[ $sizekey ]['width'];
- $csswidth = $width . 'px';
- }
-
- if ( isset( $attributes['layout'] ) ) {
- array_push( $argparts, "layout={$attributes['layout']}" );
- } elseif ( isset( $attributes['size'] ) && preg_match( '|^[a-zA-Z0-9]+$|', $attributes['size'] ) ) {
- array_push( $argparts, "size={$attributes['size']}" );
- }
-
- if ( isset( $attributes['bgcol'] ) && preg_match( '|^[0-9A-Fa-f]+$|', $attributes['bgcol'] ) ) {
- array_push( $argparts, "bgcol={$attributes['bgcol']}" );
- }
-
- if ( isset( $attributes['linkcol'] ) && preg_match( '|^[0-9A-Fa-f]+$|', $attributes['linkcol'] ) ) {
- array_push( $argparts, "linkcol={$attributes['linkcol']}" );
- }
-
- if ( isset( $attributes['package'] ) && preg_match( '|^[0-9]+$|', $attributes['package'] ) ) {
- array_push( $argparts, "package={$attributes['package']}" );
- }
-
- if ( isset( $attributes['t'] ) && preg_match( '|^[0-9]+$|', $attributes['t'] ) ) {
- array_push( $argparts, "t={$attributes['t']}" );
- }
-
- if ( $attributes['notracklist'] == 'true' ) {
- array_push( $argparts, 'notracklist=true' );
- }
-
- // 'tracklist' arg deprecates 'notracklist=true' to be less weird. note, behavior
- // if both are specified is undefined
- switch ( $attributes['tracklist'] ) {
- case 'false':
- case 'none':
- array_push( $argparts, 'tracklist=false' );
- break;
- }
-
- switch ( $attributes['artwork'] ) {
- case 'false':
- case 'none':
- case 'small':
- array_push( $argparts, 'artwork=' . $attributes['artwork'] );
- break;
- }
-
- if ( $attributes['minimal'] == 'true' ) {
- array_push( $argparts, 'minimal=true' );
- }
-
- if ( isset( $attributes['theme'] ) && preg_match( '|^[a-zA-Z_]+$|', $attributes['theme'] ) ) {
- array_push( $argparts, "theme={$attributes['theme']}" );
- }
-
- // param 'tracks' is signed digest param 'esig'
- if ( isset( $attributes['tracks'] ) && preg_match( '|^[0-9\,]+$|', $attributes['tracks'] ) ) {
- if ( isset( $attributes['esig'] ) && preg_match( '|^[0-9A-Fa-f]+$|', $attributes['esig'] ) ) {
- array_push( $argparts, "tracks={$attributes['tracks']}" );
- array_push( $argparts, "esig={$attributes['esig']}" );
- }
- }
-
- if ( $isVideo ) {
- $url = '//bandcamp.com/VideoEmbed?' . join( '&', $argparts );
- $extraAttrs = " mozallowfullscreen='1' webkitallowfullscreen='1' allowfullscreen='1'";
- } else {
- $url = '//bandcamp.com/EmbeddedPlayer/v=2/' . join( '/', $argparts ) . '/';
- $extraAttrs = '';
- }
-
- $iframe = '<iframe width="%s" height="%s" style="position: relative; display: block; width: %s; height: %s;" src="%s" allowtransparency="true" frameborder="0"%s></iframe>';
- $iframe = sprintf( $iframe, esc_attr( $width ), esc_attr( $height ), esc_attr( $csswidth ), esc_attr( $cssheight ), esc_url( $url ), $extraAttrs );
-
- return $iframe;
-}
-
-add_shortcode( 'bandcamp', 'shortcode_handler_bandcamp' );
diff --git a/plugins/jetpack/modules/shortcodes/brightcove.php b/plugins/jetpack/modules/shortcodes/brightcove.php
deleted file mode 100644
index 5eca5293..00000000
--- a/plugins/jetpack/modules/shortcodes/brightcove.php
+++ /dev/null
@@ -1,295 +0,0 @@
-<?php //phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
-
-/**
- * Brightcove shortcode.
- *
- * Brighcove had renovated their video player embedding code since they introduced their "new studio".
- * See https://support.brightcove.com/en/video-cloud/docs.
- * The new code is not 100% backward compatible, as long as a customized player is used.
- * By the time I wrote this, there were about 150000+ posts embedded legacy players, so it would be a bad
- * idea either to introduce a new brightcove shortcode, or to break those posts completely.
- *
- * That's why we introduce a less aggressive way: leaving the old embedding code untouched, and
- * introduce a new set of shortcode parameters which are translated to the latest Brightcove embedding code.
- *
- * e.g.
- * [brightcove video_id="12345" account_id="99999"] will be translated to the latest embedding code.
- * [brightcove exp=627045696&vid=1415670151] or [brightcove exp=1463233149&vref=1601200825] will be translated
- * to the legacy code.
- */
-class Jetpack_Brightcove_Shortcode {
- /**
- * Shortcode name.
- *
- * @var string
- */
- public static $shortcode = 'brightcove';
-
- /**
- * Parse shortcode arguments and render its output.
- *
- * @since 4.5.0
- *
- * @param array $atts Shortcode parameters.
- *
- * @return string
- */
- public static function convert( $atts ) {
- $normalized_atts = self::normalize_attributes( $atts );
-
- if ( empty( $atts ) ) {
- return '<!-- Missing Brightcove parameters -->';
- }
-
- return self::has_legacy_atts( $normalized_atts )
- ? self::convert_to_legacy_studio( $normalized_atts )
- : self::convert_to_new_studio( $normalized_atts );
- }
-
- /**
- * We need to take care of two kinds of shortcode format here.
- * The latest: [shortcode a=1 b=2] and the legacy: [shortcode a=1&b=2]
- * For an old shortcode: [shortcode a=1&b=2&c=3], it would be parsed into array( 'a' => 1&b=2&c=3' ), which is useless.
- * However, since we want to determine whether to call convert_to_legacy_studio() or convert_to_new_studio() via passed parameters, we still need to parse the two properly.
- * See http://jetpack.wp-a2z.org/oik_api/shortcode_new_to_old_params/
- *
- * @since 4.5.0
- *
- * @param array $atts Shortcode parameters.
- *
- * @return array
- */
- public static function normalize_attributes( $atts ) {
- if ( is_array( $atts ) && 1 === count( $atts ) ) { // this is the case we need to take care of.
- $parsed_atts = array();
- $params = shortcode_new_to_old_params( $atts );
-
- /**
- * Filter the Brightcove shortcode parameters.
- *
- * @module shortcodes
- *
- * @since 4.5.0
- *
- * @param string $params String of shortcode parameters.
- */
- $params = apply_filters( 'brightcove_dimensions', $params );
- parse_str( $params, $parsed_atts );
-
- return $parsed_atts;
- } else {
- return $atts;
- }
- }
-
- /**
- * Check that it has legacy attributes.
- *
- * @since 4.5.0
- *
- * @param array $atts Shortcode parameters.
- *
- * @return bool
- */
- public static function has_legacy_atts( $atts ) {
- return ( isset( $atts['vid'] ) || isset( $atts['vref'] ) )
- && ( isset( $atts['exp'] ) || isset( $atts['exp3'] ) );
- }
-
- /**
- * Convert to latest player format.
- *
- * @since 4.5.0
- *
- * @param array $atts Shortcode parameters.
- *
- * @return string
- */
- public static function convert_to_new_studio( $atts ) {
- $defaults = array(
- 'account_id' => '',
- 'video_id' => '',
- 'player_id' => 'default',
- 'width' => '100%',
- 'height' => '100%',
- );
-
- $atts_applied = shortcode_atts( $defaults, $atts, self::$shortcode );
-
- $player_url = sprintf(
- '//players.brightcove.net/%s/%s_default/index.html?videoId=%s',
- esc_attr( $atts_applied['account_id'] ),
- esc_attr( $atts_applied['player_id'] ),
- esc_attr( $atts_applied['video_id'] )
- );
-
- $output_html = sprintf(
- '<iframe src="' . esc_url( $player_url ) . '" allowfullscreen webkitallowfullscreen mozallowfullscreen style="width: %spx; height: %spx;"></iframe>',
- esc_attr( $atts_applied['width'] ),
- esc_attr( $atts_applied['height'] )
- );
-
- return $output_html;
- }
-
- /**
- * Convert to legacy player format.
- *
- * [brightcove exp=627045696&vid=1415670151] for the older player and backward compatibility
- * [brightcove exp=1463233149&vref=1601200825] for the new player
- *
- * @since 4.5.0
- *
- * @param array $atts Shortcode parameters.
- *
- * @return string
- */
- public static function convert_to_legacy_studio( $atts ) {
- $attr = shortcode_atts(
- array(
- 'bg' => '',
- 'exp' => '',
- 'exp3' => '',
- 'h' => '',
- 'lbu' => '',
- 'pk' => '',
- 'pubid' => '',
- 's' => '',
- 'surl' => '',
- 'vid' => '',
- 'vref' => '',
- 'w' => '',
- ),
- $atts
- );
-
- if ( isset( $attr['pk'] ) ) {
- $attr['pk'] = rawurlencode( preg_replace( '/[^a-zA-Z0-9!*\'();:@&=+$,\/?#\[\]\-_.~ ]/', '', $attr['pk'] ) );
- }
-
- if ( isset( $attr['bg'] ) ) {
- $attr['bg'] = preg_replace( '![^-a-zA-Z0-9#]!', '', $attr['bg'] );
- }
-
- $fv = array(
- 'viewerSecureGatewayURL' => 'https://services.brightcove.com/services/amfgateway',
- 'servicesURL' => 'http://services.brightcove.com/services',
- 'cdnURL' => 'http://admin.brightcove.com',
- 'autoStart' => 'false',
- );
-
- $js_tld = 'com';
- $src = '';
- $name = 'flashObj';
- $html5 = false;
-
- if ( isset( $attr['exp3'] ) ) {
- if ( isset( $attr['surl'] ) && strpos( $attr['surl'], 'brightcove.co.jp' ) ) {
- $js_tld = 'co.jp';
- }
- if ( ! isset( $attr['surl'] ) || ! preg_match( '#^https?://(?:[a-z\d-]+\.)*brightcove\.(?:com|co\.jp)/#', $attr['surl'] ) ) {
- $attr['surl'] = 'http://c.brightcove.com/services';
- }
-
- $attr['exp3'] = intval( $attr['exp3'] );
- $attr['pubid'] = intval( $attr['pubid'] );
- $attr['vid'] = intval( $attr['vid'] );
-
- $fv['servicesURL'] = $attr['surl'];
- $fv['playerID'] = $attr['exp3'];
- $fv['domain'] = 'embed';
- $fv['videoID'] = intval( $attr['vid'] );
-
- $src = sprintf(
- '%s/viewer/federated_f9/%s?isVid=1&amp;isUI=1&amp;publisherID=%s',
- $attr['surl'],
- $attr['exp3'],
- $attr['pubid']
- );
- $html5 = true;
- } elseif ( isset( $attr['exp'] ) ) {
- $attr['exp'] = intval( $attr['exp'] );
- $src = 'http://services.brightcove.com/services/viewer/federated_f8/' . $attr['exp'];
- if ( $attr['vid'] ) {
- $fv['videoId'] = $attr['vid'];
- } elseif ( $attr['vref'] ) {
- $fv['videoRef'] = $attr['vref'];
- }
-
- $fv['playerId'] = $attr['exp'];
- $fv['domain'] = 'embed';
- } else {
- return '<small>brightcove error: missing required parameter exp or exp3</small>';
- }
-
- if ( ! empty( $attr['lbu'] ) ) {
- $fv['linkBaseURL'] = $attr['lbu'];
- }
-
- $flashvars = trim( add_query_arg( array_map( 'urlencode', $fv ), '' ), '?' );
-
- $width = null;
- $height = null;
-
- if ( ! empty( $attr['w'] ) && ! empty( $attr['h'] ) ) {
- $w = abs( (int) $attr['w'] );
- $h = abs( (int) $attr['h'] );
- if ( $w && $h ) {
- $width = $w;
- $height = $h;
- }
- } elseif ( empty( $attr['s'] ) || 'l' === $attr['s'] ) {
- $width = '480';
- $height = '360';
- }
-
- if ( empty( $width ) || empty( $height ) ) {
- $width = '280';
- $height = '210';
- }
-
- if ( $html5 ) {
- wp_enqueue_script(
- 'brightcove-loader',
- Jetpack::get_file_url_for_environment( '_inc/build/shortcodes/js/brightcove.min.js', 'modules/shortcodes/js/brightcove.js' ),
- array( 'jquery' ),
- 20121127,
- false
- );
- wp_localize_script(
- 'brightcove-loader',
- 'brightcoveData',
- array(
- 'tld' => esc_js( $js_tld ),
- )
- );
-
- return '
- <object id="myExperience" class="BrightcoveExperience">
- <param name="bgcolor" value="' . esc_attr( $attr['bg'] ) . '" />
- <param name="width" value="' . esc_attr( $width ) . '" />
- <param name="height" value="' . esc_attr( $height ) . '" />
- <param name="playerID" value="' . esc_attr( $attr['exp3'] ) . '" />
- <param name="@videoPlayer" value="' . esc_attr( $attr['vid'] ) . '" />
- <param name="playerKey" value="' . esc_attr( $attr['pk'] ) . '" />
- <param name="isVid" value="1" />
- <param name="isUI" value="1" />
- <param name="dynamicStreaming" value="true" />
- <param name="autoStart" value="false" />
- <param name="secureConnections" value="true" />
- <param name="secureHTMLConnections" value="true" />
- </object>';
- }
-
- return sprintf(
- '<embed src="%s" bgcolor="#FFFFFF" flashvars="%s" base="http://admin.brightcove.com" name="%s" width="%s" height="%s" allowFullScreen="true" seamlesstabbing="false" type="application/x-shockwave-flash" swLiveConnect="true" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" />',
- esc_url( $src ),
- $flashvars,
- esc_attr( $name ),
- esc_attr( $width ),
- esc_attr( $height )
- );
- }
-}
-
-add_shortcode( Jetpack_Brightcove_Shortcode::$shortcode, array( 'Jetpack_Brightcove_Shortcode', 'convert' ) );
diff --git a/plugins/jetpack/modules/shortcodes/cartodb.php b/plugins/jetpack/modules/shortcodes/cartodb.php
deleted file mode 100644
index 82c925d8..00000000
--- a/plugins/jetpack/modules/shortcodes/cartodb.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-
-/*
- * Carto (formerly CartoDB)
- *
- * example URL: http://osm2.carto.com/viz/08aef918-94da-11e4-ad83-0e0c41326911/public_map
- *
- * possible patterns:
- * [username].carto.com/viz/[map-id]/public_map
- * [username].carto.com/viz/[map-id]/embed_map
- * [username].carto.com/viz/[map-id]/map
- * [organization].carto.com/u/[username]/viz/[map-id]/public_map
- * [organization].carto.com/u/[username]/viz/[map-id]/embed_map
- * [organization].carto.com/u/[username]/viz/[map-id]/map
- *
- * On July 8th, 2016 CartoDB changed its primary domain from cartodb.com to carto.com
- * So this shortcode still supports the cartodb.com domain for oembeds.
-*/
-
-wp_oembed_add_provider( '#https?://(?:www\.)?[^/^\.]+\.carto(db)?\.com/\S+#i', 'https://services.carto.com/oembed', true );
diff --git a/plugins/jetpack/modules/shortcodes/class.filter-embedded-html-objects.php b/plugins/jetpack/modules/shortcodes/class.filter-embedded-html-objects.php
deleted file mode 100644
index d5cfb956..00000000
--- a/plugins/jetpack/modules/shortcodes/class.filter-embedded-html-objects.php
+++ /dev/null
@@ -1,294 +0,0 @@
-<?php
-/**
- * The companion file to shortcodes.php
- *
- * This file contains the code that converts HTML embeds into shortcodes
- * for when the user copy/pastes in HTML.
- */
-
-add_filter( 'pre_kses', array( 'Filter_Embedded_HTML_Objects', 'filter' ), 11 );
-add_filter( 'pre_kses', array( 'Filter_Embedded_HTML_Objects', 'maybe_create_links' ), 100 ); // See WPCom_Embed_Stats::init()
-
-/**
- * Helper class for identifying and parsing known HTML blocks
- *
- * @since 4.5.0
- *
- * @author mdawaffe
- *
- * Not completely done, but seems to work okay
- * Stolen from Mike's Seaside presentation:
- * @link http://mdawaffepresents.wordpress.com/?p=36
- */
-
-class Filter_Embedded_HTML_Objects {
- static public $strpos_filters = array();
- static public $regexp_filters = array();
- static public $current_element = false;
- static public $html_strpos_filters = array();
- static public $html_regexp_filters = array();
- static public $failed_embeds = array();
-
- /**
- * Store tokens found in Syntax Highlighter.
- *
- * @since 4.5.0
- *
- * @var array
- */
- static private $sh_unfiltered_content_tokens;
-
- /**
- * Capture tokens found in Syntax Highlighter and collect them in self::$sh_unfiltered_content_tokens.
- *
- * @since 4.5.0
- *
- * @param array $match
- *
- * @return string
- */
- public static function sh_regexp_callback( $match ) {
- $token = '[prekses-filter-token-' . mt_rand() . '-' . md5( $match[0] ) . '-' . mt_rand() . ']';
- self::$sh_unfiltered_content_tokens[ $token ] = $match[0];
- return $token;
- }
-
- public static function filter( $html ) {
- if ( ! $html || ! is_string( $html ) ) {
- return $html;
- }
-
- $regexps = array(
- 'object' => '%<object[^>]*+>(?>[^<]*+(?><(?!/object>)[^<]*+)*)</object>%i',
- 'embed' => '%<embed[^>]*+>(?:\s*</embed>)?%i',
- 'iframe' => '%<iframe[^>]*+>(?>[^<]*+(?><(?!/iframe>)[^<]*+)*)</iframe>%i',
- 'div' => '%<div[^>]*+>(?>[^<]*+(?><(?!/div>)[^<]*+)*+)(?:</div>)+%i',
- 'script' => '%<script[^>]*+>(?>[^<]*+(?><(?!/script>)[^<]*+)*)</script>%i',
- );
-
- $unfiltered_content_tokens = array();
- self::$sh_unfiltered_content_tokens = array();
-
- // Check here to make sure that SyntaxHighlighter is still used. (Just a little future proofing)
- if ( class_exists( 'SyntaxHighlighter' ) ) {
- // Replace any "code" shortcode blocks with a token that we'll later replace with its original text.
- // This will keep the contents of the shortcode from being filtered
- global $SyntaxHighlighter;
-
- // Check to see if the $SyntaxHighlighter object has been created and is ready for use
- if ( isset( $SyntaxHighlighter ) && is_array( $SyntaxHighlighter->shortcodes ) ) {
- $shortcode_regex = implode( '|', array_map( 'preg_quote', $SyntaxHighlighter->shortcodes ) );
- $html = preg_replace_callback(
- '/\[(' . $shortcode_regex . ')(\s[^\]]*)?\][\s\S]*?\[\/\1\]/m',
- array( __CLASS__, 'sh_regexp_callback' ),
- $html
- );
- $unfiltered_content_tokens = self::$sh_unfiltered_content_tokens;
- }
- }
-
- foreach ( $regexps as $element => $regexp ) {
- self::$current_element = $element;
-
- if ( false !== stripos( $html, "<$element" ) ) {
- if ( $new_html = preg_replace_callback( $regexp, array( __CLASS__, 'dispatch' ), $html ) ) {
- $html = $new_html;
- }
- }
-
- if ( false !== stripos( $html, "&lt;$element" ) ) {
- $regexp_entities = self::regexp_entities( $regexp );
- if ( $new_html = preg_replace_callback( $regexp_entities, array( __CLASS__, 'dispatch_entities' ), $html ) ) {
- $html = $new_html;
- }
- }
- }
-
- if ( count( $unfiltered_content_tokens ) > 0 ) {
- // Replace any tokens generated earlier with their original unfiltered text
- $html = str_replace( array_keys( $unfiltered_content_tokens ), $unfiltered_content_tokens, $html );
- }
-
- return $html;
- }
-
- public static function regexp_entities( $regexp ) {
- return preg_replace(
- '/\[\^&([^\]]+)\]\*\+/',
- '(?>[^&]*+(?>&(?!\1)[^&])*+)*+',
- str_replace( '?&gt;', '?' . '>', htmlspecialchars( $regexp, ENT_NOQUOTES ) )
- );
- }
-
- public static function register( $match, $callback, $is_regexp = false, $is_html_filter = false ) {
- if ( $is_html_filter ) {
- if ( $is_regexp ) {
- self::$html_regexp_filters[ $match ] = $callback;
- } else {
- self::$html_strpos_filters[ $match ] = $callback;
- }
- } else {
- if ( $is_regexp ) {
- self::$regexp_filters[ $match ] = $callback;
- } else {
- self::$strpos_filters[ $match ] = $callback;
- }
- }
- }
-
- public static function unregister( $match ) {
- // Allow themes/plugins to remove registered embeds
- unset( self::$regexp_filters[ $match ] );
- unset( self::$strpos_filters[ $match ] );
- unset( self::$html_regexp_filters[ $match ] );
- unset( self::$html_strpos_filters[ $match ] );
- }
-
- static function dispatch_entities( $matches ) {
- $matches[0] = html_entity_decode( $matches[0] );
-
- return self::dispatch( $matches );
- }
-
- static function dispatch( $matches ) {
- $html = preg_replace( '%&#0*58;//%', '://', $matches[0] );
- $attrs = self::get_attrs( $html );
- if ( isset( $attrs['src'] ) ) {
- $src = $attrs['src'];
- } elseif ( isset( $attrs['movie'] ) ) {
- $src = $attrs['movie'];
- } else {
- // no src found, search html
- foreach ( self::$html_strpos_filters as $match => $callback ) {
- if ( false !== strpos( $html, $match ) ) {
- return call_user_func( $callback, $attrs );
- }
- }
-
- foreach ( self::$html_regexp_filters as $match => $callback ) {
- if ( preg_match( $match, $html ) ) {
- return call_user_func( $callback, $attrs );
- }
- }
-
- return $matches[0];
- }
-
- $src = trim( $src );
-
- // check source filter
- foreach ( self::$strpos_filters as $match => $callback ) {
- if ( false !== strpos( $src, $match ) ) {
- return call_user_func( $callback, $attrs );
- }
- }
-
- foreach ( self::$regexp_filters as $match => $callback ) {
- if ( preg_match( $match, $src ) ) {
- return call_user_func( $callback, $attrs );
- }
- }
-
- // check html filters
- foreach ( self::$html_strpos_filters as $match => $callback ) {
- if ( false !== strpos( $html, $match ) ) {
- return call_user_func( $callback, $attrs );
- }
- }
-
- foreach ( self::$html_regexp_filters as $match => $callback ) {
- if ( preg_match( $match, $html ) ) {
- return call_user_func( $callback, $attrs );
- }
- }
-
- // Log the strip
- if ( function_exists( 'wp_kses_reject' ) ) {
- wp_kses_reject( sprintf( __( '<code>%s</code> HTML tag removed as it is not allowed', 'jetpack' ), '&lt;' . self::$current_element . '&gt;' ), array( self::$current_element => $attrs ) );
- }
-
- // Keep the failed match so we can later replace it with a link,
- // but return the original content to give others a chance too.
- self::$failed_embeds[] = array(
- 'match' => $matches[0],
- 'src' => esc_url( $src ),
- );
-
- return $matches[0];
- }
-
- /**
- * Failed embeds are stripped, so let's convert them to links at least.
- *
- * @param string $string Failed embed string.
- *
- * @return string $string Linkified string.
- */
- public static function maybe_create_links( $string ) {
- if ( empty( self::$failed_embeds ) ) {
- return $string;
- }
-
- foreach ( self::$failed_embeds as $entry ) {
- $html = sprintf( '<a href="%s">%s</a>', esc_url( $entry['src'] ), esc_url( $entry['src'] ) );
- // Check if the string doesn't contain iframe, before replace.
- if ( ! preg_match( '/<iframe /', $string ) ) {
- $string = str_replace( $entry['match'], $html, $string );
- }
- }
-
- self::$failed_embeds = array();
-
- return $string;
- }
-
- static function get_attrs( $html ) {
- if ( ! ( class_exists( 'DOMDocument' ) && function_exists( 'libxml_use_internal_errors' ) && function_exists( 'simplexml_load_string' ) ) ) {
- trigger_error( __( "PHP's XML extension is not available. Please contact your hosting provider to enable PHP's XML extension." ) );
- return array();
- }
- // We have to go through DOM, since it can load non-well-formed XML (i.e. HTML). SimpleXML cannot.
- $dom = new DOMDocument();
- // The @ is not enough to suppress errors when dealing with libxml,
- // we have to tell it directly how we want to handle errors.
- libxml_use_internal_errors( true );
- @$dom->loadHTML( $html ); // suppress parser warnings
- libxml_use_internal_errors( false );
- $xml = false;
- foreach ( $dom->childNodes as $node ) {
- // find the root node (html)
- if ( XML_ELEMENT_NODE == $node->nodeType ) {
- // Use simplexml_load_string rather than simplexml_import_dom as the later doesn't cope well if the XML is malformmed in the DOM See #1688-wpcom
- libxml_use_internal_errors( true );
- $xml = simplexml_load_string( $dom->saveXML( $node->firstChild->firstChild ) ); // html->body->object
- libxml_clear_errors();
- break;
- }
- }
- if ( ! $xml ) {
- return array();
- }
-
- $attrs = array();
- $attrs['_raw_html'] = $html;
-
- // <param> elements
- foreach ( $xml->param as $param ) {
- $attrs[ (string) $param['name'] ] = (string) $param['value'];
- }
-
- // <object> attributes
- foreach ( $xml->attributes() as $name => $attr ) {
- $attrs[ $name ] = (string) $attr;
- }
-
- // <embed> attributes
- if ( $xml->embed ) {
- foreach ( $xml->embed->attributes() as $name => $attr ) {
- $attrs[ $name ] = (string) $attr;
- }
- }
-
- return $attrs;
- }
-}
diff --git a/plugins/jetpack/modules/shortcodes/codepen.php b/plugins/jetpack/modules/shortcodes/codepen.php
deleted file mode 100644
index 45efa774..00000000
--- a/plugins/jetpack/modules/shortcodes/codepen.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-/*
- * CodePen embed
- *
- * example URL: http://codepen.io/css-tricks/pen/wFeaG
-*/
-
-// Register oEmbed provider
-wp_oembed_add_provider( '#https?://codepen.io/([^/]+)/pen/([^/]+)/?#', 'https://codepen.io/api/oembed', true );
diff --git a/plugins/jetpack/modules/shortcodes/crowdsignal.php b/plugins/jetpack/modules/shortcodes/crowdsignal.php
deleted file mode 100644
index e2078a68..00000000
--- a/plugins/jetpack/modules/shortcodes/crowdsignal.php
+++ /dev/null
@@ -1,610 +0,0 @@
-<?php
-
-// Keep compatibility with polldaddy-plugin
-if ( ! class_exists( 'CrowdsignalShortcode' ) && ! class_exists( 'PolldaddyShortcode' ) ) {
-
-/**
-* Class wrapper for Crowdsignal shortcodes
-*/
-
-class CrowdsignalShortcode {
-
- static $add_script = false;
- static $scripts = false;
-
- /**
- * Add all the actions & resgister the shortcode
- */
- function __construct() {
- if ( defined( 'GLOBAL_TAGS' ) == false ) {
- add_shortcode( 'crowdsignal', array( $this, 'crowdsignal_shortcode' ) );
- add_shortcode( 'polldaddy', array( $this, 'crowdsignal_shortcode' ) );
-
- add_filter( 'pre_kses', array( $this, 'crowdsignal_embed_to_shortcode' ) );
- }
- add_action( 'wp_enqueue_scripts', array( $this, 'check_infinite' ) );
- add_action( 'infinite_scroll_render', array( $this, 'crowdsignal_shortcode_infinite' ), 11 );
- }
-
- private function get_async_code( array $settings, $survey_link ) {
- $include = <<<CONTAINER
-( function( d, c, j ) {
- if ( !d.getElementById( j ) ) {
- var pd = d.createElement( c ), s;
- pd.id = j;
- pd.src = 'https://polldaddy.com/survey.js';
- s = d.getElementsByTagName( c )[0];
- s.parentNode.insertBefore( pd, s );
- }
-}( document, 'script', 'pd-embed' ) );
-CONTAINER;
-
- // Compress it a bit
- $include = $this->compress_it( $include );
-
- $placeholder =
- '<div class="cs-embed pd-embed" data-settings="'
- . esc_attr( json_encode( $settings ) )
- . '"></div>';
- if ( 'button' === $settings['type'] ) {
- $placeholder =
- '<a class="cs-embed pd-embed" href="'
- . esc_attr( $survey_link )
- . '" data-settings="'
- . esc_attr( json_encode( $settings ) )
- . '">'
- . esc_html( $settings['title'] )
- . '</a>';
- }
-
- $js_include = $placeholder . "\n";
- $js_include .= '<script type="text/javascript"><!--//--><![CDATA[//><!--' . "\n";
- $js_include .= $include . "\n";
- $js_include .= "//--><!]]></script>\n";
-
- if ( 'button' !== $settings['type'] ) {
- $js_include .= '<noscript>' . $survey_link . "</noscript>\n";
- }
-
- return $js_include;
- }
-
- private function compress_it( $js ) {
- $js = str_replace( array( "\n", "\t", "\r" ), '', $js );
- $js = preg_replace( '/\s*([,:\?\{;\-=\(\)])\s*/', '$1', $js );
- return $js;
- }
-
- /*
- * Crowdsignal Poll Embed script - transforms code that looks like that:
- * <script type="text/javascript" charset="utf-8" async src="http://static.polldaddy.com/p/123456.js"></script>
- * <noscript><a href="http://polldaddy.com/poll/123456/">What is your favourite color?</a></noscript>
- * into the [crowdsignal poll=...] shortcode format
- */
- function crowdsignal_embed_to_shortcode( $content ) {
-
- if ( ! is_string( $content ) || false === strpos( $content, 'polldaddy.com/p/' ) ) {
- return $content;
- }
-
- $regexes = array();
-
- $regexes[] = '#<script[^>]+?src="https?://(secure|static)\.polldaddy\.com/p/([0-9]+)\.js"[^>]*+>\s*?</script>\r?\n?(<noscript>.*?</noscript>)?#i';
-
- $regexes[] = '#&lt;script(?:[^&]|&(?!gt;))+?src="https?://(secure|static)\.polldaddy\.com/p/([0-9]+)\.js"(?:[^&]|&(?!gt;))*+&gt;\s*?&lt;/script&gt;\r?\n?(&lt;noscript&gt;.*?&lt;/noscript&gt;)?#i';
-
- foreach ( $regexes as $regex ) {
- if ( ! preg_match_all( $regex, $content, $matches, PREG_SET_ORDER ) ) {
- continue;
- }
-
- foreach ( $matches as $match ) {
- if ( ! isset( $match[2] ) ) {
- continue;
- }
-
- $id = (int) $match[2];
-
- if ( $id > 0 ) {
- $content = str_replace( $match[0], " [crowdsignal poll=$id]", $content );
- /** This action is documented in modules/shortcodes/youtube.php */
- do_action( 'jetpack_embed_to_shortcode', 'crowdsignal', $id );
- }
- }
- }
-
- return $content;
- }
-
- /**
- * Shortcode for polldadddy
- * [crowdsignal poll|survey|rating="123456"]
- */
- function crowdsignal_shortcode( $atts ) {
- global $post;
- global $content_width;
-
- /**
- * Variables extracted from $atts.
- *
- * @var string $survey
- * @var string $link_text
- * @var string $poll
- * @var string $rating
- * @var string $unique_id
- * @var string $item_id
- * @var string $title
- * @var string $permalink
- * @var int $cb
- * @var string $type
- * @var string $body
- * @var string $button
- * @var string $text_color
- * @var string $back_color
- * @var string $align
- * @var string $style
- * @var int $width
- * @var int $height
- * @var int $delay
- * @var string $visit
- * @var string $domain
- * @var string $id
- */
- extract( shortcode_atts( array(
- 'survey' => null,
- 'link_text' => 'Take Our Survey',
- 'poll' => 'empty',
- 'rating' => 'empty',
- 'unique_id' => null,
- 'item_id' => null,
- 'title' => null,
- 'permalink' => null,
- 'cb' => 0,
- 'type' => 'button',
- 'body' => '',
- 'button' => '',
- 'text_color' => '000000',
- 'back_color' => 'FFFFFF',
- 'align' => '',
- 'style' => '',
- 'width' => $content_width,
- 'height' => floor( $content_width * 3 / 4 ),
- 'delay' => 100,
- 'visit' => 'single',
- 'domain' => '',
- 'id' => '',
- ), $atts, 'crowdsignal' ) );
-
- if ( ! is_array( $atts ) ) {
- return '<!-- Crowdsignal shortcode passed invalid attributes -->';
- }
-
- $inline = ! in_the_loop();
- $no_script = false;
- $infinite_scroll = false;
-
- if ( is_home() && current_theme_supports( 'infinite-scroll' ) ) {
- $infinite_scroll = true;
- }
-
- if ( defined( 'PADPRESS_LOADED' ) ) {
- $inline = true;
- }
-
- if ( function_exists( 'get_option' ) && get_option( 'polldaddy_load_poll_inline' ) ) {
- $inline = true;
- }
-
- if ( is_feed() || ( defined( 'DOING_AJAX' ) && ! $infinite_scroll ) ) {
- $no_script = false;
- }
-
- self::$add_script = $infinite_scroll;
-
- if ( intval( $rating ) > 0 && ! $no_script ) { //rating embed
-
- if ( empty( $unique_id ) ) {
- $unique_id = is_page() ? 'wp-page-' . $post->ID : 'wp-post-' . $post->ID;
- }
-
- if ( empty( $item_id ) ) {
- $item_id = is_page() ? '_page_' . $post->ID : '_post_' . $post->ID;
- }
-
- if ( empty( $title ) ) {
- /** This filter is documented in core/src/wp-includes/general-template.php */
- $title = apply_filters( 'wp_title', $post->post_title, '', '' );
- }
-
- if ( empty( $permalink ) ) {
- $permalink = get_permalink( $post->ID );
- }
-
- $rating = intval( $rating );
- $unique_id = preg_replace( '/[^\-_a-z0-9]/i', '', wp_strip_all_tags( $unique_id ) );
- $item_id = wp_strip_all_tags( $item_id );
- $item_id = preg_replace( '/[^_a-z0-9]/i', '', $item_id );
-
- $settings = json_encode( array(
- 'id' => $rating,
- 'unique_id' => $unique_id,
- 'title' => rawurlencode( trim( $title ) ),
- 'permalink' => esc_url( $permalink ),
- 'item_id' => $item_id,
- ) );
-
- $item_id = esc_js( $item_id );
-
- if ( Jetpack_AMP_Support::is_amp_request() ) {
- return sprintf( '<a href="%s" target="_blank">%s</a>', esc_url( $permalink ), esc_html( trim( $title ) ) );
- } elseif ( $inline ) {
- return <<<SCRIPT
-<div class="cs-rating pd-rating" id="pd_rating_holder_{$rating}{$item_id}"></div>
-<script type="text/javascript" charset="UTF-8"><!--//--><![CDATA[//><!--
-PDRTJS_settings_{$rating}{$item_id}={$settings};
-//--><!]]></script>
-<script type="text/javascript" charset="UTF-8" async src="https://polldaddy.com/js/rating/rating.js"></script>
-SCRIPT;
- } else {
- if ( false === self::$scripts ) {
- self::$scripts = array();
- }
-
- $data = array( 'id' => $rating, 'item_id' => $item_id, 'settings' => $settings );
-
- self::$scripts['rating'][] = $data;
-
- add_action( 'wp_footer', array( $this, 'generate_scripts' ) );
-
- $data = esc_attr( json_encode( $data ) );
-
- if ( $infinite_scroll ) {
- return <<<CONTAINER
-<div class="cs-rating pd-rating" id="pd_rating_holder_{$rating}{$item_id}" data-settings="{$data}"></div>
-CONTAINER;
- } else {
- return <<<CONTAINER
-<div class="cs-rating pd-rating" id="pd_rating_holder_{$rating}{$item_id}"></div>
-CONTAINER;
- }
- }
- } elseif ( intval( $poll ) > 0 ) { //poll embed
-
- if ( empty( $title ) ) {
- $title = __( 'Take Our Poll', 'jetpack' );
- }
-
- $poll = intval( $poll );
- $poll_url = sprintf( 'https://poll.fm/%d', $poll );
- $poll_js = sprintf( 'https://secure.polldaddy.com/p/%d.js', $poll );
- $poll_link = sprintf( '<a href="%s" target="_blank">%s</a>', esc_url( $poll_url ), esc_html( $title ) );
-
- if ( $no_script || Jetpack_AMP_Support::is_amp_request() ) {
- return $poll_link;
- } else {
- if ( $type == 'slider' && !$inline ) {
-
- if ( ! in_array( $visit, array( 'single', 'multiple' ) ) ) {
- $visit = 'single';
- }
-
- $settings = array(
- 'type' => 'slider',
- 'embed' => 'poll',
- 'delay' => intval( $delay ),
- 'visit' => $visit,
- 'id' => intval( $poll )
- );
-
- return $this->get_async_code( $settings, $poll_link );
- } else {
- $cb = ( $cb == 1 ? '?cb='.mktime() : false );
- $margins = '';
- $float = '';
-
- if ( in_array( $align, array( 'right', 'left' ) ) ) {
- $float = sprintf( 'float: %s;', $align );
-
- if ( $align == 'left')
- $margins = 'margin: 0px 10px 0px 0px;';
- elseif ( $align == 'right' )
- $margins = 'margin: 0px 0px 0px 10px';
- }
-
- // Force the normal style embed on single posts/pages otherwise it's not rendered on infinite scroll themed blogs ('infinite_scroll_render' isn't fired)
- if ( is_singular() ) {
- $inline = true;
- }
-
- if ( false === $cb && ! $inline ) {
- if ( false === self::$scripts ) {
- self::$scripts = array();
- }
-
- $data = array( 'url' => $poll_js );
-
- self::$scripts['poll'][intval( $poll )] = $data;
-
- add_action( 'wp_footer', array( $this, 'generate_scripts' ) );
-
- $data = esc_attr( json_encode( $data ) );
-
- $script_url = esc_url_raw( plugins_url( 'js/polldaddy-shortcode.js', __FILE__ ) );
- $str = <<<CONTAINER
-<a name="pd_a_{$poll}"></a>
-<div class="CSS_Poll PDS_Poll" id="PDI_container{$poll}" data-settings="{$data}" style="display:inline-block;{$float}{$margins}"></div>
-<div id="PD_superContainer"></div>
-<noscript>{$poll_link}</noscript>
-CONTAINER;
-
-$loader = <<<SCRIPT
-( function( d, c, j ) {
- if ( ! d.getElementById( j ) ) {
- var pd = d.createElement( c ), s;
- pd.id = j;
- pd.src = '{$script_url}';
- s = d.getElementsByTagName( c )[0];
- s.parentNode.insertBefore( pd, s );
- } else if ( typeof jQuery !== 'undefined' ) {
- jQuery( d.body ).trigger( 'pd-script-load' );
- }
-} ( document, 'script', 'pd-polldaddy-loader' ) );
-SCRIPT;
-
- $loader = $this->compress_it( $loader );
- $loader = "<script type='text/javascript'>\n" . $loader . "\n</script>";
-
- return $str . $loader;
- } else {
- if ( $inline ) {
- $cb = '';
- }
-
- return <<<CONTAINER
-<a id="pd_a_{$poll}"></a>
-<div class="CSS_Poll PDS_Poll" id="PDI_container{$poll}" style="display:inline-block;{$float}{$margins}"></div>
-<div id="PD_superContainer"></div>
-<script type="text/javascript" charset="UTF-8" async src="{$poll_js}{$cb}"></script>
-<noscript>{$poll_link}</noscript>
-CONTAINER;
- }
- }
- }
- } elseif ( ! empty( $survey ) ) { //survey embed
-
- if ( in_array( $type, array( 'iframe', 'button', 'banner', 'slider' ) ) ) {
-
- if ( empty( $title ) ) {
- $title = __( 'Take Our Survey', 'jetpack' );
- if( ! empty( $link_text ) ) {
- $title = $link_text;
- }
- }
-
- if ( $type == 'banner' || $type == 'slider' )
- $inline = false;
-
- $survey = preg_replace( '/[^a-f0-9]/i', '', $survey );
- $survey_url = esc_url( "https://survey.fm/{$survey}" );
- $survey_link = sprintf( '<a href="%s" target="_blank">%s</a>', $survey_url, esc_html( $title ) );
-
- $settings = array();
-
- // Do we want a full embed code or a link?
- if ( $no_script || $inline || $infinite_scroll || Jetpack_AMP_Support::is_amp_request() ) {
- return $survey_link;
- }
-
- if ( $type == 'iframe' ) {
- if ( $height != 'auto' ) {
- if ( isset( $content_width ) && is_numeric( $width ) && $width > $content_width ) {
- $width = $content_width;
- }
-
- if ( ! $width ) {
- $width = '100%';
- } else {
- $width = (int) $width;
- }
-
- if ( ! $height ) {
- $height = '600';
- } else {
- $height = (int) $height;
- }
-
- return <<<CONTAINER
-<iframe src="{$survey_url}?iframe=1" frameborder="0" width="{$width}" height="{$height}" scrolling="auto" allowtransparency="true" marginheight="0" marginwidth="0">{$survey_link}</iframe>
-CONTAINER;
- } elseif ( ! empty( $domain ) && ! empty( $id ) ) {
-
- $domain = preg_replace( '/[^a-z0-9\-]/i', '', $domain );
- $id = preg_replace( '/[\/\?&\{\}]/', '', $id );
-
- $auto_src = esc_url( "https://{$domain}.survey.fm/{$id}" );
- $auto_src = parse_url( $auto_src );
-
- if ( ! is_array( $auto_src ) || count( $auto_src ) == 0 ) {
- return '<!-- no crowdsignal output -->';
- }
-
- if ( ! isset( $auto_src['host'] ) || ! isset( $auto_src['path'] ) ) {
- return '<!-- no crowdsignal output -->';
- }
-
- $domain = $auto_src['host'] . '/';
- $id = ltrim( $auto_src['path'], '/' );
-
- $settings = array(
- 'type' => $type,
- 'auto' => true,
- 'domain' => $domain,
- 'id' => $id
- );
- }
- } else {
- $text_color = preg_replace( '/[^a-f0-9]/i', '', $text_color );
- $back_color = preg_replace( '/[^a-f0-9]/i', '', $back_color );
-
- if (
- ! in_array(
- $align,
- array(
- 'right',
- 'left',
- 'top-left',
- 'top-right',
- 'middle-left',
- 'middle-right',
- 'bottom-left',
- 'bottom-right'
- )
- )
- ) {
- $align = '';
- }
-
- if (
- ! in_array(
- $style,
- array(
- 'inline',
- 'side',
- 'corner',
- 'rounded',
- 'square'
- )
- )
- ) {
- $style = '';
- }
-
- $title = wp_strip_all_tags( $title );
- $body = wp_strip_all_tags( $body );
- $button = wp_strip_all_tags( $button );
-
- $settings = array_filter( array(
- 'title' => $title,
- 'type' => $type,
- 'body' => $body,
- 'button' => $button,
- 'text_color' => $text_color,
- 'back_color' => $back_color,
- 'align' => $align,
- 'style' => $style,
- 'id' => $survey,
- ) );
- }
-
- if ( empty( $settings ) ) {
- return '<!-- no crowdsignal output -->';
- }
-
- return $this->get_async_code( $settings, $survey_link );
- }
- } else {
- return '<!-- no crowdsignal output -->';
- }
- }
-
- function generate_scripts() {
- $script = '';
-
- if ( is_array( self::$scripts ) ) {
- if ( isset( self::$scripts['rating'] ) ) {
- $script = "<script type='text/javascript' charset='UTF-8' id='polldaddyRatings'><!--//--><![CDATA[//><!--\n";
- foreach( self::$scripts['rating'] as $rating ) {
- $script .= "PDRTJS_settings_{$rating['id']}{$rating['item_id']}={$rating['settings']}; if ( typeof PDRTJS_RATING !== 'undefined' ){if ( typeof PDRTJS_{$rating['id']}{$rating['item_id']} == 'undefined' ){PDRTJS_{$rating['id']}{$rating['item_id']} = new PDRTJS_RATING( PDRTJS_settings_{$rating['id']}{$rating['item_id']} );}}";
- }
- $script .= "\n//--><!]]></script><script type='text/javascript' charset='UTF-8' async src='https://polldaddy.com/js/rating/rating.js'></script>";
-
- }
-
- if ( isset( self::$scripts['poll'] ) ) {
- foreach( self::$scripts['poll'] as $poll ) {
- $script .= "<script type='text/javascript' charset='UTF-8' async src='{$poll['url']}'></script>";
- }
- }
- }
-
- self::$scripts = false;
- echo $script;
- }
-
- /**
- * If the theme uses infinite scroll, include jquery at the start
- */
- function check_infinite() {
- if (
- current_theme_supports( 'infinite-scroll' )
- && class_exists( 'The_Neverending_Home_Page' )
- && The_Neverending_Home_Page::archive_supports_infinity()
- ) {
- wp_enqueue_script( 'jquery' );
- }
- }
-
- /**
- * Dynamically load the .js, if needed
- *
- * This hooks in late (priority 11) to infinite_scroll_render to determine
- * a posteriori if a shortcode has been called.
- */
- function crowdsignal_shortcode_infinite() {
- // only try to load if a shortcode has been called and theme supports infinite scroll
- if( self::$add_script ) {
- $script_url = esc_url_raw( plugins_url( 'js/polldaddy-shortcode.js', __FILE__ ) );
-
- // if the script hasn't been loaded, load it
- // if the script loads successfully, fire an 'pd-script-load' event
- echo <<<SCRIPT
- <script type='text/javascript'>
- //<![CDATA[
- ( function( d, c, j ) {
- if ( !d.getElementById( j ) ) {
- var pd = d.createElement( c ), s;
- pd.id = j;
- pd.async = true;
- pd.src = '{$script_url}';
- s = d.getElementsByTagName( c )[0];
- s.parentNode.insertBefore( pd, s );
- } else if ( typeof jQuery !== 'undefined' ) {
- jQuery( d.body ).trigger( 'pd-script-load' );
- }
- } ( document, 'script', 'pd-polldaddy-loader' ) );
- //]]>
- </script>
-SCRIPT;
-
- }
- }
-}
-
-// kick it all off
-new CrowdsignalShortcode();
-
-if ( ! function_exists( 'crowdsignal_link' ) ) {
- // http://polldaddy.com/poll/1562975/?view=results&msg=voted
- function crowdsignal_link( $content ) {
- if ( Jetpack_AMP_Support::is_amp_request() ) {
- return $content;
- }
-
- return preg_replace( '!(?:\n|\A)https?://(polldaddy\.com/poll|poll\.fm)/([0-9]+?)(/.*)?(?:\n|\Z)!i', "\n<script type='text/javascript' charset='utf-8' src='//static.polldaddy.com/p/$2.js'></script><noscript> <a href='https://poll.fm/$2'>View Poll</a></noscript>\n", $content );
- }
-
- // higher priority because we need it before auto-link and autop get to it
- add_filter( 'the_content', 'crowdsignal_link', 1 );
- add_filter( 'the_content_rss', 'crowdsignal_link', 1 );
-}
-
- /**
- * Note that Core has the oembed of '#https?://survey\.fm/.*#i' as of 5.1.
- * This should be removed after Core has the current regex is in our minimum version.
- *
- * @see https://core.trac.wordpress.org/ticket/46467
- * @todo Confirm patch landed and remove once 5.2 is the minimum version.
- */
-wp_oembed_add_provider( '#https?://.+\.survey\.fm/.*#i', 'https://api.crowdsignal.com/oembed', true );
-
-}
diff --git a/plugins/jetpack/modules/shortcodes/css/quiz.css b/plugins/jetpack/modules/shortcodes/css/quiz.css
deleted file mode 100644
index e2a0b36b..00000000
--- a/plugins/jetpack/modules/shortcodes/css/quiz.css
+++ /dev/null
@@ -1,56 +0,0 @@
-div.jetpack-quiz {
- border: 1px solid #deede3;
- background-color: #f3f3f3;
- padding: 1em;
- line-height: 1.3em;
- margin-bottom: 2em;
- border-radius: .2em;
-}
-
-div.jetpack-quiz div.jetpack-quiz-question {
- margin-bottom: .5em;
- font-weight: bold;
-}
-
-div.jetpack-quiz div.jetpack-quiz-answer {
- cursor: pointer;
- margin-bottom: .5em;
- padding: 1em 0 1em 1em;
- border-bottom: 1px dotted #999;
-}
-div.jetpack-quiz div.jetpack-quiz-answer.last {
- padding-bottom: 0;
- margin-bottom: 0;
- border-bottom: 0;
-}
-
-div.jetpack-quiz div.jetpack-quiz-answer.correct {
- color: green;
-}
-
-div.jetpack-quiz div.jetpack-quiz-answer.wrong {
- color: red;
-}
-
-div.jetpack-quiz div.jetpack-quiz-answer div.jetpack-quiz-explanation {
- display: none;
-}
-
-div.jetpack-quiz div.jetpack-quiz-answer.correct div.jetpack-quiz-explanation, div.jetpack-quiz div.jetpack-quiz-answer.wrong div.jetpack-quiz-explanation {
- display: block;
- color: black;
- font-size: 90%;
- margin-top: 1em;
-}
-
-div.jetpack-quiz div.jetpack-quiz-answer.correct div.jetpack-quiz-explanation tt, div.jetpack-quiz div.jetpack-quiz-answer.wrong div.jetpack-quiz-explanation tt {
- font-size: 85%;
-}
-
-div.jetpack-quiz pre {
- font: 15px Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace;
- background: transparent;
- margin: 0;
- padding: 0;
-}
-
diff --git a/plugins/jetpack/modules/shortcodes/css/recipes-print-rtl.css b/plugins/jetpack/modules/shortcodes/css/recipes-print-rtl.css
deleted file mode 100644
index bbea4bf2..00000000
--- a/plugins/jetpack/modules/shortcodes/css/recipes-print-rtl.css
+++ /dev/null
@@ -1 +0,0 @@
-.jetpack-recipe-meta li.jetpack-recipe-print{display:none}.jetpack-recipe-title{font-size:16pt}.jetpack-recipe-content img{display:inline-block!important;max-width:100%}.jetpack-recipe-image{display:none!important}.jetpack-recipe-content .aligncenter{display:block!important;margin:0 auto 1em!important;text-align:center!important}.jetpack-recipe-content .alignright{float:left!important;margin:0 1em .5em 0!important}.jetpack-recipe-content .alignleft{float:right!important;margin:0 0 .5em 1em!important}.jetpack-recipe-content .alignnone{display:inline-block} \ No newline at end of file
diff --git a/plugins/jetpack/modules/shortcodes/css/recipes-print-rtl.min.css b/plugins/jetpack/modules/shortcodes/css/recipes-print-rtl.min.css
deleted file mode 100644
index bbea4bf2..00000000
--- a/plugins/jetpack/modules/shortcodes/css/recipes-print-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.jetpack-recipe-meta li.jetpack-recipe-print{display:none}.jetpack-recipe-title{font-size:16pt}.jetpack-recipe-content img{display:inline-block!important;max-width:100%}.jetpack-recipe-image{display:none!important}.jetpack-recipe-content .aligncenter{display:block!important;margin:0 auto 1em!important;text-align:center!important}.jetpack-recipe-content .alignright{float:left!important;margin:0 1em .5em 0!important}.jetpack-recipe-content .alignleft{float:right!important;margin:0 0 .5em 1em!important}.jetpack-recipe-content .alignnone{display:inline-block} \ No newline at end of file
diff --git a/plugins/jetpack/modules/shortcodes/css/recipes-print.css b/plugins/jetpack/modules/shortcodes/css/recipes-print.css
deleted file mode 100644
index 48e05179..00000000
--- a/plugins/jetpack/modules/shortcodes/css/recipes-print.css
+++ /dev/null
@@ -1,36 +0,0 @@
-.jetpack-recipe-meta li.jetpack-recipe-print {
- display: none;
-}
-
-.jetpack-recipe-title {
- font-size: 16pt;
-}
-
-.jetpack-recipe-content img {
- display: inline-block !important;
- max-width: 100%;
-}
-
-.jetpack-recipe-image {
- display: none !important;
-}
-
-.jetpack-recipe-content .aligncenter {
- display: block !important;
- margin: 0 auto 1em !important;
- text-align: center !important;
-}
-
-.jetpack-recipe-content .alignright {
- float: right !important;
- margin: 0 0 .5em 1em !important;
-}
-
-.jetpack-recipe-content .alignleft {
- float: left !important;
- margin: 0 1em .5em 0 !important;
-}
-
-.jetpack-recipe-content .alignnone {
- display: inline-block;
-}
diff --git a/plugins/jetpack/modules/shortcodes/css/recipes-print.min.css b/plugins/jetpack/modules/shortcodes/css/recipes-print.min.css
deleted file mode 100644
index 52cf81bf..00000000
--- a/plugins/jetpack/modules/shortcodes/css/recipes-print.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-.jetpack-recipe-meta li.jetpack-recipe-print{display:none}.jetpack-recipe-title{font-size:16pt}.jetpack-recipe-content img{display:inline-block!important;max-width:100%}.jetpack-recipe-image{display:none!important}.jetpack-recipe-content .aligncenter{display:block!important;margin:0 auto 1em!important;text-align:center!important}.jetpack-recipe-content .alignright{float:right!important;margin:0 0 .5em 1em!important}.jetpack-recipe-content .alignleft{float:left!important;margin:0 1em .5em 0!important}.jetpack-recipe-content .alignnone{display:inline-block} \ No newline at end of file
diff --git a/plugins/jetpack/modules/shortcodes/css/recipes-rtl.css b/plugins/jetpack/modules/shortcodes/css/recipes-rtl.css
deleted file mode 100644
index a0492b5f..00000000
--- a/plugins/jetpack/modules/shortcodes/css/recipes-rtl.css
+++ /dev/null
@@ -1 +0,0 @@
-.jetpack-recipe{border:1px solid #f2f2f2;border-radius:1px;clear:both;margin:1.5em 1%;padding:1% 2%}.jetpack-recipe-title{border-bottom:1px solid #ccc;margin:.25em 0;padding:.25em 0}.jetpack-recipe .jetpack-recipe-meta{display:block;font-size:.9em;list-style-type:none;margin-left:0;margin-right:0;padding:0;overflow:hidden;width:100%}.jetpack-recipe .jetpack-recipe-meta li{float:right;list-style-type:none;margin:0;padding:0 0 0 5%}.jetpack-recipe-meta li.jetpack-recipe-print{float:left;padding-left:0;text-align:left}.jetpack-recipe-notes{font-style:italic} \ No newline at end of file
diff --git a/plugins/jetpack/modules/shortcodes/css/recipes-rtl.min.css b/plugins/jetpack/modules/shortcodes/css/recipes-rtl.min.css
deleted file mode 100644
index a0492b5f..00000000
--- a/plugins/jetpack/modules/shortcodes/css/recipes-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.jetpack-recipe{border:1px solid #f2f2f2;border-radius:1px;clear:both;margin:1.5em 1%;padding:1% 2%}.jetpack-recipe-title{border-bottom:1px solid #ccc;margin:.25em 0;padding:.25em 0}.jetpack-recipe .jetpack-recipe-meta{display:block;font-size:.9em;list-style-type:none;margin-left:0;margin-right:0;padding:0;overflow:hidden;width:100%}.jetpack-recipe .jetpack-recipe-meta li{float:right;list-style-type:none;margin:0;padding:0 0 0 5%}.jetpack-recipe-meta li.jetpack-recipe-print{float:left;padding-left:0;text-align:left}.jetpack-recipe-notes{font-style:italic} \ No newline at end of file
diff --git a/plugins/jetpack/modules/shortcodes/css/recipes.css b/plugins/jetpack/modules/shortcodes/css/recipes.css
deleted file mode 100644
index 63ab2169..00000000
--- a/plugins/jetpack/modules/shortcodes/css/recipes.css
+++ /dev/null
@@ -1,36 +0,0 @@
-.jetpack-recipe {
- border: 1px solid #f2f2f2;
- border-radius: 1px;
- clear: both;
- margin: 1.5em 1%;
- padding: 1% 2%;
-}
-.jetpack-recipe-title {
- border-bottom: 1px solid #ccc;
- margin: .25em 0;
- padding: .25em 0;
-}
-.jetpack-recipe .jetpack-recipe-meta {
- display: block;
- font-size: .9em;
- list-style-type: none;
- margin-right: 0;
- margin-left: 0;
- padding: 0;
- overflow: hidden;
- width: 100%;
-}
-.jetpack-recipe .jetpack-recipe-meta li {
- float: left;
- list-style-type: none;
- margin: 0;
- padding: 0 5% 0 0;
-}
-.jetpack-recipe-meta li.jetpack-recipe-print {
- float: right;
- padding-right: 0;
- text-align: right;
-}
-.jetpack-recipe-notes {
- font-style: italic;
-}
diff --git a/plugins/jetpack/modules/shortcodes/css/recipes.min.css b/plugins/jetpack/modules/shortcodes/css/recipes.min.css
deleted file mode 100644
index e4e36a3d..00000000
--- a/plugins/jetpack/modules/shortcodes/css/recipes.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-.jetpack-recipe{border:1px solid #f2f2f2;border-radius:1px;clear:both;margin:1.5em 1%;padding:1% 2%}.jetpack-recipe-title{border-bottom:1px solid #ccc;margin:.25em 0;padding:.25em 0}.jetpack-recipe .jetpack-recipe-meta{display:block;font-size:.9em;list-style-type:none;margin-right:0;margin-left:0;padding:0;overflow:hidden;width:100%}.jetpack-recipe .jetpack-recipe-meta li{float:left;list-style-type:none;margin:0;padding:0 5% 0 0}.jetpack-recipe-meta li.jetpack-recipe-print{float:right;padding-right:0;text-align:right}.jetpack-recipe-notes{font-style:italic} \ No newline at end of file
diff --git a/plugins/jetpack/modules/shortcodes/css/slideshow-shortcode-rtl.css b/plugins/jetpack/modules/shortcodes/css/slideshow-shortcode-rtl.css
deleted file mode 100644
index 3defeb94..00000000
--- a/plugins/jetpack/modules/shortcodes/css/slideshow-shortcode-rtl.css
+++ /dev/null
@@ -1,145 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-.slideshow-window {
- background-color: #222;
- border: 20px solid #222;
- border-radius: 10px;
- height: 0;
- margin-bottom: 20px;
- overflow: hidden;
- padding-top: 30px !important;
- padding-bottom: 56.25% !important;
- position: relative;
- z-index: 1;
-}
-
-.slideshow-window.slideshow-white {
- background-color: #fff;
- border-color: #fff;
-}
-
-.slideshow-window, .slideshow-window * {
- box-sizing: content-box;
-}
-
-.slideshow-loading {
- height: 100%;
- text-align: center;
- margin: auto;
-}
-
-body div.slideshow-window * img {
- /* Override any styles that might be present in the page stylesheet */
- background-color: transparent !important;
- background-image: none !important;
- border-width: 0 !important;
- display: block;
- margin: 0 auto;
- max-width: 100%;
- max-height: 100%;
- padding: 0 !important;
- position: relative;
- transform: translateY(-50%);
- top: 50%;
-}
-
-.slideshow-loading img {
- vertical-align: middle;
-}
-
-.slideshow-slide {
- display: none;
- height: 100% !important;
- right: 0;
- margin: auto;
- position: absolute;
- text-align: center;
- top: 0;
- width: 100% !important;
-}
-
-.slideshow-slide img {
- vertical-align: middle;
-}
-
-.slideshow-line-height-hack {
- overflow: hidden;
- width: 0px;
- font-size: 0px;
-}
-
-.slideshow-slide-caption {
- font-size: 13px;
- font-family: "Helvetica Neue", sans-serif;
- color: #f7f7f7;
- text-shadow: #222 -1px 1px 2px;
- line-height: 25px;
- height: 25px;
- position: absolute;
- bottom: 5px;
- right: 0;
- z-index: 100;
- width: 100%;
- text-align: center;
-}
-
-.slideshow-controls {
- z-index: 1000;
- position: absolute;
- bottom: 30px;
- margin: auto;
- text-align: center;
- width: 100%;
- -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
- opacity: 0.5;
- direction:ltr;
- transition: 300ms opacity ease-out;
-}
-
-.slideshow-window:hover .slideshow-controls {
- -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
- opacity: 1;
-}
-
-body div div.slideshow-controls a,
-body div div.slideshow-controls a:hover {
- border:2px solid rgba(255,255,255,0.1) !important;
- background-color: #000 !important;
- background-color: rgba(0,0,0,0.6) !important;
- background-image: url('../img/slideshow-controls.png') !important;
- background-repeat: no-repeat;
- background-size: 142px 16px !important;
- background-position: -34px 8px !important;
- color: #222 !important;
- margin: 0 5px !important;
- padding: 0 !important;
- display: inline-block !important;
- *display: inline;
- zoom: 1;
- height: 32px !important;
- width: 32px !important;
- line-height: 32px !important;
- text-align: center !important;
- border-radius: 10em !important;
- transition: 300ms border-color ease-out;
-}
-
-@media only screen and (-webkit-min-device-pixel-ratio: 1.5) {
- body div div.slideshow-controls a,
- body div div.slideshow-controls a:hover {
- background-image: url('../img/slideshow-controls-2x.png') !important;
- }
-}
-
-body div div.slideshow-controls a:hover {
- border-color: rgba(255,255,255,1) !important;
-}
-
-body div div.slideshow-controls a:first-child { background-position: -76px 8px !important;}
-body div div.slideshow-controls a:last-child { background-position: -117px 8px !important;}
-body div div.slideshow-controls a:nth-child(2) { background-position: -34px 8px !important;}
-body div div.slideshow-controls a.running { background-position: -34px 8px !important;}
-body div div.slideshow-controls a.paused { background-position: 9px 8px !important;}
-
-.slideshow-controls a img {
- border: 50px dotted fuchsia;
-}
diff --git a/plugins/jetpack/modules/shortcodes/css/slideshow-shortcode-rtl.min.css b/plugins/jetpack/modules/shortcodes/css/slideshow-shortcode-rtl.min.css
deleted file mode 100644
index 4342c699..00000000
--- a/plugins/jetpack/modules/shortcodes/css/slideshow-shortcode-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.slideshow-window{background-color:#222;border:20px solid #222;border-radius:10px;height:0;margin-bottom:20px;overflow:hidden;padding-top:30px!important;padding-bottom:56.25%!important;position:relative;z-index:1}.slideshow-window.slideshow-white{background-color:#fff;border-color:#fff}.slideshow-window,.slideshow-window *{box-sizing:content-box}.slideshow-loading{height:100%;text-align:center;margin:auto}body div.slideshow-window * img{background-color:transparent!important;background-image:none!important;border-width:0!important;display:block;margin:0 auto;max-width:100%;max-height:100%;padding:0!important;position:relative;transform:translateY(-50%);top:50%}.slideshow-loading img{vertical-align:middle}.slideshow-slide{display:none;height:100%!important;right:0;margin:auto;position:absolute;text-align:center;top:0;width:100%!important}.slideshow-slide img{vertical-align:middle}.slideshow-line-height-hack{overflow:hidden;width:0;font-size:0}.slideshow-slide-caption{font-size:13px;font-family:"Helvetica Neue",sans-serif;color:#f7f7f7;text-shadow:#222 -1px 1px 2px;line-height:25px;height:25px;position:absolute;bottom:5px;right:0;z-index:100;width:100%;text-align:center}.slideshow-controls{z-index:1000;position:absolute;bottom:30px;margin:auto;text-align:center;width:100%;opacity:.5;direction:ltr;transition:.3s opacity ease-out}.slideshow-window:hover .slideshow-controls{opacity:1}body div div.slideshow-controls a,body div div.slideshow-controls a:hover{border:2px solid rgba(255,255,255,.1)!important;background-color:#000!important;background-color:rgba(0,0,0,.6)!important;background-image:url(../img/slideshow-controls.png)!important;background-repeat:no-repeat;background-size:142px 16px!important;background-position:-34px 8px!important;color:#222!important;margin:0 5px!important;padding:0!important;display:inline-block!important;zoom:1;height:32px!important;width:32px!important;line-height:32px!important;text-align:center!important;border-radius:10em!important;transition:.3s border-color ease-out}@media only screen and (-webkit-min-device-pixel-ratio:1.5){body div div.slideshow-controls a,body div div.slideshow-controls a:hover{background-image:url(../img/slideshow-controls-2x.png)!important}}body div div.slideshow-controls a:hover{border-color:rgba(255,255,255,1)!important}body div div.slideshow-controls a:first-child{background-position:-76px 8px!important}body div div.slideshow-controls a:last-child{background-position:-117px 8px!important}body div div.slideshow-controls a:nth-child(2){background-position:-34px 8px!important}body div div.slideshow-controls a.running{background-position:-34px 8px!important}body div div.slideshow-controls a.paused{background-position:9px 8px!important}.slideshow-controls a img{border:50px dotted #f0f} \ No newline at end of file
diff --git a/plugins/jetpack/modules/shortcodes/css/slideshow-shortcode.css b/plugins/jetpack/modules/shortcodes/css/slideshow-shortcode.css
deleted file mode 100644
index 2e416a44..00000000
--- a/plugins/jetpack/modules/shortcodes/css/slideshow-shortcode.css
+++ /dev/null
@@ -1,157 +0,0 @@
-.slideshow-window {
- background-color: #222;
- border: 20px solid #222;
- border-radius: 10px;
- height: 0;
- margin-bottom: 20px;
- overflow: hidden;
- padding-top: 30px !important;
- padding-bottom: 56.25% !important;
- position: relative;
- z-index: 1;
-}
-
-.slideshow-window.slideshow-white {
- background-color: #fff;
- border-color: #fff;
-}
-
-.slideshow-window, .slideshow-window * {
- -moz-box-sizing: content-box;
- -webkit-box-sizing: content-box;
- box-sizing: content-box;
-}
-
-.slideshow-loading {
- height: 100%;
- text-align: center;
- margin: auto;
-}
-
-body div.slideshow-window * img {
- /* Override any styles that might be present in the page stylesheet */
- background-color: transparent !important;
- background-image: none !important;
- border-width: 0 !important;
- display: block;
- margin: 0 auto;
- max-width: 100%;
- max-height: 100%;
- padding: 0 !important;
- position: relative;
- -webkit-transform: translateY(-50%);
- -ms-transform: translateY(-50%);
- transform: translateY(-50%);
- top: 50%;
-}
-
-.slideshow-loading img {
- vertical-align: middle;
-}
-
-.slideshow-slide {
- display: none;
- height: 100% !important;
- left: 0;
- margin: auto;
- position: absolute;
- text-align: center;
- top: 0;
- width: 100% !important;
-}
-
-.slideshow-slide img {
- vertical-align: middle;
-}
-
-.slideshow-line-height-hack {
- overflow: hidden;
- width: 0px;
- font-size: 0px;
-}
-
-.slideshow-slide-caption {
- font-size: 13px;
- font-family: "Helvetica Neue", sans-serif;
- color: #f7f7f7;
- text-shadow: #222 1px 1px 2px;
- line-height: 25px;
- height: 25px;
- position: absolute;
- bottom: 5px;
- left: 0;
- z-index: 100;
- width: 100%;
- text-align: center;
-}
-
-.slideshow-controls {
- z-index: 1000;
- position: absolute;
- bottom: 30px;
- margin: auto;
- text-align: center;
- width: 100%;
- -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
- opacity: 0.5;
- /*rtl:ignore*/
- direction:ltr;
- -webkit-transition: 300ms opacity ease-out;
- -moz-transition: 300ms opacity ease-out;
- transition: 300ms opacity ease-out;
-}
-
-.slideshow-window:hover .slideshow-controls {
- -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
- opacity: 1;
-}
-
-body div div.slideshow-controls a,
-body div div.slideshow-controls a:hover {
- border:2px solid rgba(255,255,255,0.1) !important;
- background-color: #000 !important;
- background-color: rgba(0,0,0,0.6) !important;
- background-image: url('../img/slideshow-controls.png') !important;
- background-repeat: no-repeat;
- background-size: 142px 16px !important;
- background-position: -34px 8px !important;
- color: #222 !important;
- margin: 0 5px !important;
- padding: 0 !important;
- display: inline-block !important;
- *display: inline;
- zoom: 1;
- height: 32px !important;
- width: 32px !important;
- line-height: 32px !important;
- text-align: center !important;
- -khtml-border-radius: 10em !important;
- -webkit-border-radius: 10em !important;
- -moz-border-radius: 10em !important;
- border-radius: 10em !important;
- -webkit-transition: 300ms border-color ease-out;
- -moz-transition: 300ms border-color ease-out;
- -o-transition: 300ms border-color ease-out;
- transition: 300ms border-color ease-out;
-}
-
-@media only screen and (-webkit-min-device-pixel-ratio: 1.5) {
- body div div.slideshow-controls a,
- body div div.slideshow-controls a:hover {
- background-image: url('../img/slideshow-controls-2x.png') !important;
- }
-}
-
-body div div.slideshow-controls a:hover {
- border-color: rgba(255,255,255,1) !important;
-}
-
-body div div.slideshow-controls a:first-child { background-position: -76px 8px !important;}
-body div div.slideshow-controls a:last-child { background-position: -117px 8px !important;}
-body div div.slideshow-controls a:nth-child(2) { background-position: -34px 8px !important;}
-body div div.slideshow-controls a.running { background-position: -34px 8px !important;}
-body div div.slideshow-controls a.paused { background-position: 9px 8px !important;}
-
-.slideshow-controls a img {
- border: 50px dotted fuchsia;
-}
diff --git a/plugins/jetpack/modules/shortcodes/css/slideshow-shortcode.min.css b/plugins/jetpack/modules/shortcodes/css/slideshow-shortcode.min.css
deleted file mode 100644
index 9642a647..00000000
--- a/plugins/jetpack/modules/shortcodes/css/slideshow-shortcode.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-.slideshow-window{background-color:#222;border:20px solid #222;border-radius:10px;height:0;margin-bottom:20px;overflow:hidden;padding-top:30px!important;padding-bottom:56.25%!important;position:relative;z-index:1}.slideshow-window.slideshow-white{background-color:#fff;border-color:#fff}.slideshow-window,.slideshow-window *{box-sizing:content-box}.slideshow-loading{height:100%;text-align:center;margin:auto}body div.slideshow-window * img{background-color:transparent!important;background-image:none!important;border-width:0!important;display:block;margin:0 auto;max-width:100%;max-height:100%;padding:0!important;position:relative;transform:translateY(-50%);top:50%}.slideshow-loading img{vertical-align:middle}.slideshow-slide{display:none;height:100%!important;left:0;margin:auto;position:absolute;text-align:center;top:0;width:100%!important}.slideshow-slide img{vertical-align:middle}.slideshow-line-height-hack{overflow:hidden;width:0;font-size:0}.slideshow-slide-caption{font-size:13px;font-family:"Helvetica Neue",sans-serif;color:#f7f7f7;text-shadow:#222 1px 1px 2px;line-height:25px;height:25px;position:absolute;bottom:5px;left:0;z-index:100;width:100%;text-align:center}.slideshow-controls{z-index:1000;position:absolute;bottom:30px;margin:auto;text-align:center;width:100%;opacity:.5;direction:ltr;transition:.3s opacity ease-out}.slideshow-window:hover .slideshow-controls{opacity:1}body div div.slideshow-controls a,body div div.slideshow-controls a:hover{border:2px solid rgba(255,255,255,.1)!important;background-color:#000!important;background-color:rgba(0,0,0,.6)!important;background-image:url(../img/slideshow-controls.png)!important;background-repeat:no-repeat;background-size:142px 16px!important;background-position:-34px 8px!important;color:#222!important;margin:0 5px!important;padding:0!important;display:inline-block!important;zoom:1;height:32px!important;width:32px!important;line-height:32px!important;text-align:center!important;border-radius:10em!important;transition:.3s border-color ease-out}@media only screen and (-webkit-min-device-pixel-ratio:1.5){body div div.slideshow-controls a,body div div.slideshow-controls a:hover{background-image:url(../img/slideshow-controls-2x.png)!important}}body div div.slideshow-controls a:hover{border-color:rgba(255,255,255,1)!important}body div div.slideshow-controls a:first-child{background-position:-76px 8px!important}body div div.slideshow-controls a:last-child{background-position:-117px 8px!important}body div div.slideshow-controls a:nth-child(2){background-position:-34px 8px!important}body div div.slideshow-controls a.running{background-position:-34px 8px!important}body div div.slideshow-controls a.paused{background-position:9px 8px!important}.slideshow-controls a img{border:50px dotted #f0f} \ No newline at end of file
diff --git a/plugins/jetpack/modules/shortcodes/css/style.css b/plugins/jetpack/modules/shortcodes/css/style.css
deleted file mode 100644
index 5ef78159..00000000
--- a/plugins/jetpack/modules/shortcodes/css/style.css
+++ /dev/null
@@ -1,188 +0,0 @@
-/**
-* 1. Fullscreen styles
-*/
-html.presentation-wrapper-fullscreen-parent,
-body.presentation-wrapper-fullscreen-parent {
- overflow: hidden !important;
-}
-
-.presentation-wrapper-fullscreen-parent #wpadminbar {
- display: none;
-}
-
-.presentation-wrapper-fullscreen,
-.presentation-wrapper-fullscreen-parent {
- min-width: 100% !important;
- min-height: 100% !important;
- position: absolute !important;
- top: 0 !important;
- right: 0 !important;
- bottom: 0 !important;
- left: 0 !important;
- margin: 0 !important;
- padding: 0 !important;
- z-index: 10000 !important;
-}
-
-.presentation-wrapper-fullscreen {
- background-color: #808080;
- border: none !important;
-}
-
-.presentation-wrapper-fullscreen .nav-arrow-left,
-.presentation-wrapper-fullscreen .nav-arrow-right {
- z-index: 20001;
-}
-
-.presentation-wrapper-fullscreen .nav-fullscreen-button {
- z-index: 20002;
-}
-
-
-/**
- * 2. General presentation styles
- */
-.presentation-wrapper {
- margin: 20px auto;
- border: 1px solid #e5e5e5;
- overflow: hidden;
- line-height: normal;
-}
-
-.presentation {
- position: relative;
- margin: 0;
- overflow: hidden;
- outline: none;
-}
-
-/**
- * jmpress requires that step sizes are explicitly defined
- * as it inserts sizeless divs before the steps. These
- * dimensions are set by the js code on initialization
- */
-.presentation,
-.presentation .step {
- background-repeat: no-repeat;
- background-position: center;
- background-size: 100% 100%;
-}
-
-/**
- * Opacity transition durations are set by the js code
- * so they match the presentation animation durations
- */
-.presentation .step.fade:not(.active) {
- opacity: 0;
-}
-
-.presentation .slide-content {
- padding: 30px;
-}
-
-
-/**
- * 3. Styles for the navigation arrows
- */
-.presentation .nav-arrow-left,
-.presentation .nav-arrow-right,
-.presentation .nav-fullscreen-button {
- position: absolute;
- width: 34px;
- background-repeat: no-repeat;
- z-index: 2;
- opacity: 0;
-
- -webkit-transition : opacity .25s;
- -moz-transition : opacity .25s;
- -ms-transition : opacity .25s;
- -o-transition : opacity .25s;
- transition : opacity .25s;
-}
-
-.presentation .nav-arrow-left,
-.presentation .nav-arrow-right {
- height: 100%;
- background-image: url(../images/slide-nav.png);
- background-size: 450% 61px;
-}
-
-.presentation .nav-arrow-left {
- left: 0;
- background-position: 4px 50%;
-}
-
-.presentation .nav-arrow-right {
- right: 0;
- background-position: -120px 50%;
-}
-
-.presentation .nav-fullscreen-button {
- width: 32px;
- height: 32px;
- margin: 4px;
- bottom: 0;
- right: 0;
- z-index: 3;
- background-image: url(../images/expand.png);
- background-size: 100% 100%;
-}
-
-.presentation:hover .nav-arrow-left,
-.presentation:hover .nav-arrow-right {
- opacity: 1;
-}
-
-.presentation:hover .nav-fullscreen-button {
- opacity: 0.8;
-}
-
-.presentation-wrapper-fullscreen .nav-fullscreen-button {
- background-image: url(../images/collapse.png);
-}
-
-/**
- * 4. Styles for the autoplay overlay
- */
-.presentation .autoplay-overlay {
- height: 15%;
- width: 80%;
- margin: 30% 10%;
- position: relative;
- z-index: 100;
- display: table;
- border-radius: 50px;
- background-color: #e5e5e5;
- background-color: rgba(0, 0, 0, 0.75);
-
- -webkit-transition : opacity .5s;
- -moz-transition : opacity .5s;
- -ms-transition : opacity .5s;
- -o-transition : opacity .5s;
- transition : opacity .5s;
-}
-
-.presentation .autoplay-overlay .overlay-msg {
- position: relative;
- display: table-cell;
- text-align: center;
- vertical-align: middle;
- color: #fff;
-}
-
-/**
- * 5. Styles for fading steps
- */
-.presentation .will-fade {
- opacity: 0;
-}
-
-.presentation .do-fade {
- opacity: 1;
-
- -webkit-transition : opacity .5s;
- -moz-transition : opacity .5s;
- -ms-transition : opacity .5s;
- -o-transition : opacity .5s;
- transition : opacity .5s;
-}
diff --git a/plugins/jetpack/modules/shortcodes/dailymotion.php b/plugins/jetpack/modules/shortcodes/dailymotion.php
deleted file mode 100644
index af503394..00000000
--- a/plugins/jetpack/modules/shortcodes/dailymotion.php
+++ /dev/null
@@ -1,341 +0,0 @@
-<?php
-
-/**
- * Dailymotion code
- * */
-
-/**
- * Original codes:
- *
- * <embed height="270" type="application/x-shockwave-flash" width="480" src="http&#58;//www.dailymotion.com/swf/video/xekmrq?additionalInfos=0" wmode="opaque" pluginspage="http&#58;//www.macromedia.com/go/getflashplayer" allowscriptaccess="never" allownetworking="internal" />
- *
- * <object width="480" height="240"><param name="movie" value="http://www.dailymotion.com/swf/video/xen4ms_ghinzu-cold-love-mirror-mirror_music?additionalInfos=0"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param>
- * <embed type="application/x-shockwave-flash" src="http://www.dailymotion.com/swf/video/xen4ms_ghinzu-cold-love-mirror-mirror_music?additionalInfos=0" width="480" height="240" allowfullscreen="true" allowscriptaccess="always"></embed>
- * </object><br /><b><a href="http://www.dailymotion.com/video/xen4ms_ghinzu-cold-love-mirror-mirror_music">Ghinzu - Cold Love (Mirror Mirror)</a></b><br /><i>Uploaded by <a href="http://www.dailymotion.com/GhinzuTV">GhinzuTV</a>. - <a href="http://www.dailymotion.com/us/channel/music">Watch more music videos, in HD!</a></i>
- *
- * Code as of 01.01.11:
- * <object width="560" height="421"><param name="movie" value="http://www.dailymotion.com/swf/video/xaose5?width=560&theme=denim&foreground=%2392ADE0&highlight=%23A2ACBF&background=%23202226&start=&animatedTitle=&iframe=0&additionalInfos=0&autoPlay=0&hideInfos=0"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed type="application/x-shockwave-flash" src="http://www.dailymotion.com/swf/video/xaose5?width=560&theme=denim&foreground=%2392ADE0&highlight=%23A2ACBF&background=%23202226&start=&animatedTitle=&iframe=0&additionalInfos=0&autoPlay=0&hideInfos=0" width="560" height="421" allowfullscreen="true" allowscriptaccess="always"></embed></object><br /><b><a href="http://www.dailymotion.com/video/x29zm17_funny-videos-of-cats-and-babies-compilation-2015_fun">Funny cats and babies!</a></b><br /><i>Uploaded by <a href="http://www.dailymotion.com/GilLavie">GilLavie</a>. - <a target="_self" href="http://www.dailymotion.com/channel/funny/featured/1">Find more funny videos.</a></i>
- * movie param enforces anti-xss protection
- *
- * Scroll down for the new <iframe> embed code handler.
- */
-
-function dailymotion_embed_to_shortcode( $content ) {
- if ( ! is_string( $content ) || false === stripos( $content, 'www.dailymotion.com/swf/' ) ) {
- return $content;
- }
-
- $regexp = '!<object.*>\s*(<param.*></param>\s*)*<embed((?:\s+\w+="[^"]*")*)\s+src="http(?:\:|&#0*58;)//(www\.dailymotion\.com/swf/[^"]*)"((?:\s+\w+="[^"]*")*)\s*(?:/>|>\s*</embed>)\s*</object><br /><b><a .*>.*</a></b><br /><i>.*</i>!';
- $regexp_ent = str_replace( '&amp;#0*58;', '&amp;#0*58;|&#0*58;', htmlspecialchars( $regexp, ENT_NOQUOTES ) );
-
- foreach ( array( 'regexp', 'regexp_ent' ) as $reg ) {
- if ( ! preg_match_all( $$reg, $content, $matches, PREG_SET_ORDER ) ) {
- continue;
- }
-
- foreach ( $matches as $match ) {
- $src = html_entity_decode( $match[3] );
- $params = $match[2] . $match[4];
-
- if ( 'regexp_ent' == $reg ) {
- $src = html_entity_decode( $src );
- $params = html_entity_decode( $params );
- }
-
- $params = wp_kses_hair( $params, array( 'http' ) );
-
- if ( ! isset( $params['type'] ) || 'application/x-shockwave-flash' != $params['type']['value'] ) {
- continue;
- }
-
- $id = basename( substr( $src, strlen( 'www.dailymotion.com/swf' ) ) );
- $id = preg_replace( '/[^a-z0-9].*$/i', '', $id );
-
- $content = str_replace( $match[0], "[dailymotion id=$id]", $content );
- /** This action is documented in modules/shortcodes/youtube.php */
- do_action( 'jetpack_embed_to_shortcode', 'dailymotion', $id );
- }
- }
- return $content;
-}
-add_filter( 'pre_kses', 'dailymotion_embed_to_shortcode' );
-
-/**
- * DailyMotion shortcode
- *
- * The documented shortcode is:
- * [dailymotion id=x8oma9]
- *
- * Possibilities, according to the old parsing regexp:
- * [dailymotion x8oma9]
- * [dailymotion=x8oma9]
- *
- * Hypothetical option, according to the old shortcode function is
- * [dailymotion id=1&title=2&user=3&video=4]
- *
- * The new style is now:
- * [dailymotion id=x8oma9 title=2 user=3 video=4]
- *
- * Supported parameters for player customization: width, height,
- * autoplay, endscreen-enable, mute, sharing-enabled, start, subtitles-default,
- * ui-highlight, ui-logo, ui-start-screen-info, ui-theme
- * see https://developer.dailymotion.com/player#player-parameters
- *
- * @todo: Update code to sniff for iframe embeds and convert those to shortcodes.
- *
- * @param array $atts
- * @return string html
- */
-
-function dailymotion_shortcode( $atts ) {
- global $content_width;
-
- if ( isset( $atts[0] ) ) {
- $id = ltrim( $atts[0], '=' );
- $atts['id'] = $id;
-
- } else {
- $params = shortcode_new_to_old_params( $atts );
- parse_str( $params, $atts_new );
-
- foreach ( $atts_new as $k => $v ) {
- $atts[ $k ] = $v;
- }
- }
-
- $atts = shortcode_atts(
- array(
- 'id' => '', // string
- 'width' => '', // int
- 'height' => '', // int
- 'title' => '', // string
- 'user' => '', // string
- 'video' => '', // string
- 'autoplay' => 0, // int
- 'endscreen-enable' => 1, // int
- 'mute' => 0, // int
- 'sharing-enable' => 1, // int
- 'start' => '', // int
- 'subtitles-default' => '', // string
- 'ui-highlight' => '', // string
- 'ui-logo' => 1, // int
- 'ui-start-screen-info' => 0, // int
- 'ui-theme' => '', // string
- ),
- $atts,
- 'dailymotion'
- );
-
- if ( isset( $atts['id'] ) && ! empty( $atts['id'] ) ) {
- $id = urlencode( $atts['id'] );
- } else {
- return '<!--Dailymotion error: bad or missing ID-->';
- }
-
- /*set width and height using provided parameters if any */
- $width = isset( $atts['width'] ) ? intval( $atts['width'] ) : 0;
- $height = isset( $atts['height'] ) ? intval( $atts['height'] ) : 0;
-
- if ( ! $width && ! $height ) {
- if ( ! empty( $content_width ) ) {
- $width = absint( $content_width );
- } else {
- $width = 425;
- }
- $height = $width / 425 * 334;
- } elseif ( ! $height ) {
- $height = $width / 425 * 334;
- } elseif ( ! $width ) {
- $width = $height / 334 * 425;
- }
-
- /**
- * Let's add parameters if needed.
- *
- * @see https://developer.dailymotion.com/player
- */
- $player_params = array();
-
- if ( isset( $atts['autoplay'] ) && '1' === $atts['autoplay'] ) {
- $player_params['autoplay'] = '1';
- }
- if ( isset( $atts['endscreen-enable'] ) && '0' === $atts['endscreen-enable'] ) {
- $player_params['endscreen-enable'] = '0';
- }
- if ( isset( $atts['mute'] ) && '1' === $atts['mute'] ) {
- $player_params['mute'] = '1';
- }
- if ( isset( $atts['sharing-enable'] ) && '0' === $atts['sharing-enable'] ) {
- $player_params['sharing-enable'] = '0';
- }
- if ( isset( $atts['start'] ) && ! empty( $atts['start'] ) ) {
- $player_params['start'] = abs( intval( $atts['start'] ) );
- }
- if ( isset( $atts['subtitles-default'] ) && ! empty( $atts['subtitles-default'] ) ) {
- $player_params['subtitles-default'] = esc_attr( $atts['subtitles-default'] );
- }
- if ( isset( $atts['ui-highlight'] ) && ! empty( $atts['ui-highlight'] ) ) {
- $player_params['ui-highlight'] = esc_attr( $atts['ui-highlight'] );
- }
- if ( isset( $atts['ui-logo'] ) && '0' === $atts['ui-logo'] ) {
- $player_params['ui-logo'] = '0';
- }
- if ( isset( $atts['ui-start-screen-info'] ) && '0' === $atts['ui-start-screen-info'] ) {
- $player_params['ui-start-screen-info'] = '0';
- }
- if ( isset( $atts['ui-theme'] ) && in_array( strtolower( $atts['ui-theme'] ), array( 'dark', 'light' ) ) ) {
- $player_params['ui-theme'] = esc_attr( $atts['ui-theme'] );
- }
-
- // Add those parameters to the Video URL.
- $video_url = add_query_arg(
- $player_params,
- 'https://www.dailymotion.com/embed/video/' . $id
- );
-
- $output = '';
-
- if ( preg_match( '/^[A-Za-z0-9]+$/', $id ) ) {
- $output .= '<iframe width="' . esc_attr( $width ) . '" height="' . esc_attr( $height ) . '" src="' . esc_url( $video_url ) . '" style="border:0;" allowfullscreen></iframe>';
-
- if ( array_key_exists( 'video', $atts ) && $video = preg_replace( '/[^-a-z0-9_]/i', '', $atts['video'] ) && array_key_exists( 'title', $atts ) && $title = wp_kses( $atts['title'], array() ) ) {
- $output .= '<br /><strong><a href="' . esc_url( 'http://www.dailymotion.com/video/' . $video ) . '" target="_blank">' . esc_html( $title ) . '</a></strong>';
- }
-
- if ( array_key_exists( 'user', $atts ) && $user = preg_replace( '/[^-a-z0-9_]/i', '', $atts['user'] ) ) {
- /* translators: %s is a Dailymotion user name */
- $output .= '<br /><em>' . wp_kses(
- sprintf( __( 'Uploaded by %s', 'jetpack' ), '<a href="' . esc_url( 'http://www.dailymotion.com/' . $user ) . '" target="_blank">' . esc_html( $user ) . '</a>' ),
- array(
- 'a' => array(
- 'href' => true,
- 'target' => true,
- ),
- )
- ) . '</em>';
- }
- }
-
- return $output;
-}
-
-add_shortcode( 'dailymotion', 'dailymotion_shortcode' );
-
-/**
- * DailyMotion Channel Shortcode
- *
- * Examples:
- * [dailymotion-channel user=MatthewDominick]
- * [dailymotion-channel user=MatthewDominick type=grid] (supports grid, carousel, badge/default)
- */
-function dailymotion_channel_shortcode( $atts ) {
- $username = $atts['user'];
-
- switch ( $atts['type'] ) {
- case 'grid':
- return '<iframe width="300px" height="264px" scrolling="no" style="border:0;" src="' . esc_url( '//www.dailymotion.com/badge/user/' . $username . '?type=grid' ) . '"></iframe>';
- break;
- case 'carousel':
- return '<iframe width="300px" height="360px" scrolling="no" style="border:0;" src="' . esc_url( '//www.dailymotion.com/badge/user/' . $username . '?type=carousel' ) . '"></iframe>';
- break;
- default:
- return '<iframe width="300px" height="78px" scrolling="no" style="border:0;" src="' . esc_url( '//www.dailymotion.com/badge/user/' . $username ) . '"></iframe>';
- }
-}
-
-add_shortcode( 'dailymotion-channel', 'dailymotion_channel_shortcode' );
-
-/**
- * Embed Reversal for Badge/Channel
- */
-function dailymotion_channel_reversal( $content ) {
- if ( ! is_string( $content ) || false === stripos( $content, 'dailymotion.com/badge/' ) ) {
- return $content;
- }
-
- /*
- Sample embed code:
- <iframe width="300px" height="360px" scrolling="no" frameborder="0" src="http://www.dailymotion.com/badge/user/Dailymotion?type=carousel"></iframe>
- */
-
- $regexes = array();
-
- $regexes[] = '#<iframe[^>]+?src=" (?:https?:)?//(?:www\.)?dailymotion\.com/badge/user/([^"\'/]++) "[^>]*+></iframe>#ix';
-
- // Let's play nice with the visual editor too.
- $regexes[] = '#&lt;iframe(?:[^&]|&(?!gt;))+?src=" (?:https?:)?//(?:www\.)?dailymotion\.com/badge/user/([^"\'/]++) "(?:[^&]|&(?!gt;))*+&gt;&lt;/iframe&gt;#ix';
-
- foreach ( $regexes as $regex ) {
- if ( ! preg_match_all( $regex, $content, $matches, PREG_SET_ORDER ) ) {
- continue;
- }
-
- foreach ( $matches as $match ) {
- $url_pieces = parse_url( $match[1] );
-
- if ( 'type=carousel' === $url_pieces['query'] ) {
- $type = 'carousel';
- } elseif ( 'type=grid' === $url_pieces['query'] ) {
- $type = 'grid';
- } else {
- $type = 'badge';
- }
-
- $shortcode = '[dailymotion-channel user=' . esc_attr( $url_pieces['path'] ) . ' type=' . esc_attr( $type ) . ']';
- $replace_regex = sprintf( '#\s*%s\s*#', preg_quote( $match[0], '#' ) );
- $content = preg_replace( $replace_regex, sprintf( "\n\n%s\n\n", $shortcode ), $content );
- }
- }
-
- return $content;
-}
-
-add_filter( 'pre_kses', 'dailymotion_channel_reversal' );
-
-/**
- * Dailymotion Embed Reversal (with new iframe code as of 17.09.2014)
- *
- * Converts a generic HTML embed code from Dailymotion into an
- * oEmbeddable URL.
- */
-
-function jetpack_dailymotion_embed_reversal( $content ) {
- if ( ! is_string( $content ) || false === stripos( $content, 'dailymotion.com/embed' ) ) {
- return $content;
- }
-
- /*
- Sample embed code as of Sep 17th 2014:
-
- <iframe frameborder="0" width="480" height="270" src="//www.dailymotion.com/embed/video/x25x71x" allowfullscreen></iframe><br /><a href="http://www.dailymotion.com/video/x25x71x_dog-with-legs-in-casts-learns-how-to-enter-the-front-door_animals" target="_blank">Dog with legs in casts learns how to enter the...</a> <i>by <a href="http://www.dailymotion.com/videobash" target="_blank">videobash</a></i>
- */
- $regexes = array();
-
- // I'm Konstantin and I love regex.
- $regexes[] = '#<iframe[^>]+?src=" (?:https?:)?//(?:www\.)?dailymotion\.com/embed/video/([^"\'/]++) "[^>]*+>\s*+</iframe>\s*+(?:<br\s*+/>)?\s*+
- (?: <a[^>]+?href=" (?:https?:)?//(?:www\.)?dailymotion\.com/[^"\']++ "[^>]*+>.+?</a>\s*+ )?
- (?: <i>.*?<a[^>]+?href=" (?:https?:)?//(?:www\.)?dailymotion\.com/[^"\']++ "[^>]*+>.+?</a>\s*+</i> )?#ix';
-
- $regexes[] = '#&lt;iframe(?:[^&]|&(?!gt;))+?src=" (?:https?:)?//(?:www\.)?dailymotion\.com/embed/video/([^"\'/]++) "(?:[^&]|&(?!gt;))*+&gt;\s*+&lt;/iframe&gt;\s*+(?:&lt;br\s*+/&gt;)?\s*+
- (?: &lt;a(?:[^&]|&(?!gt;))+?href=" (?:https?:)?//(?:www\.)?dailymotion\.com/[^"\']++ "(?:[^&]|&(?!gt;))*+&gt;.+?&lt;/a&gt;\s*+ )?
- (?: &lt;i&gt;.*?&lt;a(?:[^&]|&(?!gt;))+?href=" (?:https?:)?//(?:www\.)?dailymotion\.com/[^"\']++ "(?:[^&]|&(?!gt;))*+&gt;.+?&lt;/a&gt;\s*+&lt;/i&gt; )?#ix';
-
- foreach ( $regexes as $regex ) {
- if ( ! preg_match_all( $regex, $content, $matches, PREG_SET_ORDER ) ) {
- continue;
- }
-
- foreach ( $matches as $match ) {
- $url = esc_url( sprintf( 'https://dailymotion.com/video/%s', $match[1] ) );
- $replace_regex = sprintf( '#\s*%s\s*#', preg_quote( $match[0], '#' ) );
- $content = preg_replace( $replace_regex, sprintf( "\n\n%s\n\n", $url ), $content );
-
- /** This action is documented in modules/shortcodes/youtube.php */
- do_action( 'jetpack_embed_to_shortcode', 'dailymotion', $url );
- }
- }
-
- return $content;
-}
-
-add_filter( 'pre_kses', 'jetpack_dailymotion_embed_reversal' );
diff --git a/plugins/jetpack/modules/shortcodes/diggthis.php b/plugins/jetpack/modules/shortcodes/diggthis.php
deleted file mode 100644
index 0287218c..00000000
--- a/plugins/jetpack/modules/shortcodes/diggthis.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-
-/**
- * Digg's API is no more and support has been removed
- */
-
-function digg_shortcode( $atts ) {
- return '';
-}
-
-add_shortcode( 'digg', 'digg_shortcode' );
diff --git a/plugins/jetpack/modules/shortcodes/email-subscribe.php b/plugins/jetpack/modules/shortcodes/email-subscribe.php
deleted file mode 100644
index 88c13090..00000000
--- a/plugins/jetpack/modules/shortcodes/email-subscribe.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Deprecated. No longer needed.
- *
- * @package Jetpack
- */
diff --git a/plugins/jetpack/modules/shortcodes/facebook.php b/plugins/jetpack/modules/shortcodes/facebook.php
deleted file mode 100644
index 9a7a53f8..00000000
--- a/plugins/jetpack/modules/shortcodes/facebook.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-/**
- * Facebook embeds
- */
-
-define( 'JETPACK_FACEBOOK_EMBED_REGEX', '#^https?://(www.)?facebook\.com/([^/]+)/(posts|photos)/([^/]+)?#' );
-define( 'JETPACK_FACEBOOK_ALTERNATE_EMBED_REGEX', '#^https?://(www.)?facebook\.com/permalink.php\?([^\s]+)#' );
-define( 'JETPACK_FACEBOOK_PHOTO_EMBED_REGEX', '#^https?://(www.)?facebook\.com/photo.php\?([^\s]+)#' );
-define( 'JETPACK_FACEBOOK_PHOTO_ALTERNATE_EMBED_REGEX', '#^https?://(www.)?facebook\.com/([^/]+)/photos/([^/]+)?#' );
-define( 'JETPACK_FACEBOOK_VIDEO_EMBED_REGEX', '#^https?://(www.)?facebook\.com/video.php\?([^\s]+)#' );
-define( 'JETPACK_FACEBOOK_VIDEO_ALTERNATE_EMBED_REGEX', '#^https?://(www.)?facebook\.com/([^/]+)/videos/([^/]+)?#' );
-
-
-// Example URL: https://www.facebook.com/VenusWilliams/posts/10151647007373076
-wp_embed_register_handler( 'facebook', JETPACK_FACEBOOK_EMBED_REGEX, 'jetpack_facebook_embed_handler' );
-
-// Example URL: https://www.facebook.com/permalink.php?id=222622504529111&story_fbid=559431180743788
-wp_embed_register_handler( 'facebook-alternate', JETPACK_FACEBOOK_ALTERNATE_EMBED_REGEX, 'jetpack_facebook_embed_handler' );
-
-// Photos are handled on a different endpoint; e.g. https://www.facebook.com/photo.php?fbid=10151609960150073&set=a.398410140072.163165.106666030072&type=1
-wp_embed_register_handler( 'facebook-photo', JETPACK_FACEBOOK_PHOTO_EMBED_REGEX, 'jetpack_facebook_embed_handler' );
-
-// Photos (from pages for example) can be at
-wp_embed_register_handler( 'facebook-alternate-photo', JETPACK_FACEBOOK_PHOTO_ALTERNATE_EMBED_REGEX, 'jetpack_facebook_embed_handler' );
-
-// Videos e.g. https://www.facebook.com/video.php?v=772471122790796
-wp_embed_register_handler( 'facebook-video', JETPACK_FACEBOOK_VIDEO_EMBED_REGEX, 'jetpack_facebook_embed_handler' );
-// Videos https://www.facebook.com/WhiteHouse/videos/10153398464269238/
-wp_embed_register_handler( 'facebook-alternate-video', JETPACK_FACEBOOK_VIDEO_ALTERNATE_EMBED_REGEX, 'jetpack_facebook_embed_handler' );
-
-function jetpack_facebook_embed_handler( $matches, $attr, $url ) {
- if ( false !== strpos( $url, 'video.php' ) || false !== strpos( $url, '/videos/' ) ) {
- $embed = sprintf( '<div class="fb-video" data-allowfullscreen="true" data-href="%s"></div>', esc_url( $url ) );
- } else {
- $width = 552; // As of 01/2017, the default width of Facebook embeds when no width attribute provided
-
- global $content_width;
- if ( isset( $content_width ) ) {
- $width = min( $width, $content_width );
- }
-
- $embed = sprintf( '<fb:post href="%s" data-width="%s"></fb:post>', esc_url( $url ), esc_attr( $width ) );
- }
-
- // since Facebook is a faux embed, we need to load the JS SDK in the wpview embed iframe
- if ( defined( 'DOING_AJAX' ) && DOING_AJAX && ! empty( $_POST['action'] ) && 'parse-embed' == $_POST['action'] ) {
- ob_start();
- wp_scripts()->do_items( array( 'jetpack-facebook-embed' ) );
- $scripts = ob_get_clean();
- return $embed . $scripts;
- } else {
- wp_enqueue_script( 'jetpack-facebook-embed' );
- return $embed;
- }
-}
-
-add_shortcode( 'facebook', 'jetpack_facebook_shortcode_handler' );
-
-function jetpack_facebook_shortcode_handler( $atts ) {
- global $wp_embed;
-
- if ( empty( $atts['url'] ) ) {
- return;
- }
-
- if ( ! preg_match( JETPACK_FACEBOOK_EMBED_REGEX, $atts['url'] )
- && ! preg_match( JETPACK_FACEBOOK_PHOTO_EMBED_REGEX, $atts['url'] )
- && ! preg_match( JETPACK_FACEBOOK_VIDEO_EMBED_REGEX, $atts['url'] )
- && ! preg_match( JETPACK_FACEBOOK_VIDEO_ALTERNATE_EMBED_REGEX, $atts['url'] ) ) {
- return;
- }
-
- return $wp_embed->shortcode( $atts, $atts['url'] );
-}
diff --git a/plugins/jetpack/modules/shortcodes/flatio.php b/plugins/jetpack/modules/shortcodes/flatio.php
deleted file mode 100644
index bc0a51a4..00000000
--- a/plugins/jetpack/modules/shortcodes/flatio.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-
-/*
- * Flat.io embed
- *
- * example URL: https://flat.io/score/5a5268ed41396318cbd7772c-string-quartet-for-rainy-days
-*/
-
-// Register oEmbed provider
-wp_oembed_add_provider( 'https://flat.io/score/*', 'https://flat.io/services/oembed', false );
-wp_oembed_add_provider( 'https://*.flat.io/score/*', 'https://flat.io/services/oembed', false );
diff --git a/plugins/jetpack/modules/shortcodes/flickr.php b/plugins/jetpack/modules/shortcodes/flickr.php
deleted file mode 100644
index 3669bbf0..00000000
--- a/plugins/jetpack/modules/shortcodes/flickr.php
+++ /dev/null
@@ -1,200 +0,0 @@
-<?php
-
-/*
- Flickr Short Code
- Author: kellan
- License: BSD/GPL/public domain (take your pick)
-
-[flickr video=http://www.flickr.com/photos/chaddles/2402990826]
-[flickr video=2402990826]
-[flickr video=2402990826 show_info=no]
-[flickr video=2402990826 w=200 h=150]
-[flickr video=2402990826 secret=846d9c1b39]
-*/
-
-/*
- * <object type="application/x-shockwave-flash" width="400" height="300" data="http://www.flickr.com/apps/video/stewart.swf?v=71377" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"> <param name="flashvars" value="intl_lang=en-us&photo_secret=846d9c1be9&photo_id=2345938910"></param> <param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=71377"></param> <param name="bgcolor" value="#000000"></param> <param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=71377" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=en-us&photo_secret=846d9c1be9&photo_id=2345938910" height="300" width="400"></embed></object>
- */
-
-function flickr_embed_to_shortcode( $content ) {
- if ( ! is_string( $content ) || false === stripos( $content, '/www.flickr.com/apps/video/stewart.swf' ) ) {
- return $content;
- }
-
- $regexp = '%(<object.*?(?:<(?!/?(?:object|embed)\s+).*?)*?)?<embed((?:\s+\w+="[^"]*")*)\s+src="http(?:\:|&#0*58;)//www.flickr.com/apps/video/stewart.swf[^"]*"((?:\s+\w+="[^"]*")*)\s*(?:/>|>\s*</embed>)(?(1)\s*</object>)%';
- $regexp_ent = str_replace(
- array(
- '&amp;#0*58;',
- '[^&gt;]*',
- '[^&lt;]*',
- ),
- array(
- '&amp;#0*58;|&#0*58;',
- '[^&]*(?:&(?!gt;)[^&]*)*',
- '[^&]*(?:&(?!lt;)[^&]*)*',
- ),
- htmlspecialchars( $regexp, ENT_NOQUOTES )
- );
-
- foreach ( array( 'regexp', 'regexp_ent' ) as $reg ) {
- if ( ! preg_match_all( $$reg, $content, $matches, PREG_SET_ORDER ) ) {
- continue;
- }
- foreach ( $matches as $match ) {
- $params = $match[2] . $match[3];
-
- if ( 'regexp_ent' == $reg ) {
- $params = html_entity_decode( $params );
- }
-
- $params = wp_kses_hair( $params, array( 'http' ) );
- if ( ! isset( $params['type'] ) || 'application/x-shockwave-flash' != $params['type']['value'] || ! isset( $params['flashvars'] ) ) {
- continue;
- }
-
- wp_parse_str( html_entity_decode( $params['flashvars']['value'] ), $flashvars );
-
- if ( ! isset( $flashvars['photo_id'] ) ) {
- continue;
- }
-
- $code_atts = array( 'video' => $flashvars['photo_id'] );
-
- if ( isset( $flashvars['flickr_show_info_box'] ) && 'true' == $flashvars['flickr_show_info_box'] ) {
- $code_atts['show_info'] = 'true';
- }
-
- if ( ! empty( $flashvars['photo_secret'] ) ) {
- $code_atts['secret'] = $flashvars['photo_secret'];
- }
-
- if ( ! empty( $params['width']['value'] ) ) {
- $code_atts['w'] = (int) $params['width']['value'];
- }
-
- if ( ! empty( $params['height']['value'] ) ) {
- $code_atts['h'] = (int) $params['height']['value'];
- }
-
- $code = '[flickr';
- foreach ( $code_atts as $k => $v ) {
- $code .= " $k=$v";
- }
- $code .= ']';
-
- $content = str_replace( $match[0], $code, $content );
- /** This action is documented in modules/shortcodes/youtube.php */
- do_action( 'jetpack_embed_to_shortcode', 'flickr_video', $flashvars['photo_id'] );
- }
- }
-
- return $content;
-}
-
-add_filter( 'pre_kses', 'flickr_embed_to_shortcode' );
-
-function flickr_shortcode_handler( $atts ) {
- $atts = shortcode_atts(
- array(
- 'video' => 0,
- 'photo' => 0,
- 'show_info' => 0,
- 'w' => 400,
- 'h' => 300,
- 'secret' => 0,
- ),
- $atts,
- 'flickr'
- );
-
- if ( ! empty( $atts['video'] ) ) {
- $showing = 'video';
- $src = $atts['video'];
- } elseif ( ! empty( $atts['photo'] ) ) {
- $showing = 'photo';
- $src = $atts['photo'];
- } else {
- return '';
- }
-
- if ( is_ssl() ) {
- $src = str_replace( 'http://', 'https://', $src );
- }
-
- if ( 'video' === $showing ) {
-
- if ( ! is_numeric( $src ) && ! preg_match( '~^(https?:)?//([\da-z\-]+\.)*?((static)?flickr\.com|flic\.kr)/.*~i', $src ) ) {
- return '';
- }
-
- if ( preg_match( '!photos/(([0-9a-zA-Z-_]+)|([0-9]+@N[0-9]+))/([0-9]+)/?$!', $src, $m ) ) {
- $atts['photo_id'] = $m[4];
- } else {
- $atts['photo_id'] = $atts['video'];
- }
-
- if ( ! isset( $atts['show_info'] ) || in_array( $atts['show_info'], array( 'yes', 'true' ) ) ) {
- $atts['show_info'] = 'true';
- } elseif ( in_array( $atts['show_info'], array( 'false', 'no' ) ) ) {
- $atts['show_info'] = 'false';
- }
-
- if ( isset( $atts['secret'] ) ) {
- $atts['secret'] = preg_replace( '![^\w]+!i', '', $atts['secret'] );
- }
-
- return flickr_shortcode_video_markup( $atts );
- } elseif ( 'photo' == $showing ) {
-
- if ( ! preg_match( '~^(https?:)?//([\da-z\-]+\.)*?((static)?flickr\.com|flic\.kr)/.*~i', $src ) ) {
- return '';
- }
-
- $src = sprintf( '%s/player/', untrailingslashit( $src ) );
-
- return sprintf( '<iframe src="%s" height="%s" width="%s" frameborder="0" allowfullscreen webkitallowfullscreen mozallowfullscreen oallowfullscreen msallowfullscreen></iframe>', esc_url( $src ), esc_attr( $atts['h'] ), esc_attr( $atts['w'] ) );
- }
-
- return false;
-}
-
-function flickr_shortcode_video_markup( $atts ) {
- $atts = array_map( 'esc_attr', $atts );
- $http = ( is_ssl() ) ? 'https://' : 'http://';
-
- $photo_vars = "photo_id=$atts[photo_id]";
- if ( isset( $atts['secret'] ) ) {
- $photo_vars .= "&amp;photo_secret=$atts[secret]";
- }
-
- return <<<EOD
-<object type="application/x-shockwave-flash" width="$atts[w]" height="$atts[h]" data="{$http}www.flickr.com/apps/video/stewart.swf?v=1.161" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"> <param name="flashvars" value="$photo_vars&amp;flickr_show_info_box=$atts[show_info]"></param><param name="movie" value="{$http}www.flickr.com/apps/video/stewart.swf?v=1.161"></param><param name="bgcolor" value="#000000"></param><param name="allowFullScreen" value="true"></param><param name="wmode" value="opaque"></param><embed type="application/x-shockwave-flash" src="{$http}www.flickr.com/apps/video/stewart.swf?v=1.161" bgcolor="#000000" allowfullscreen="true" flashvars="$photo_vars&amp;flickr_show_info_box=$atts[show_info]" wmode="opaque" height="$atts[h]" width="$atts[w]"></embed></object>
-EOD;
-}
-
-add_shortcode( 'flickr', 'flickr_shortcode_handler' );
-
-// Override core's Flickr support because Flickr oEmbed doesn't support web embeds
-wp_embed_register_handler( 'flickr', '#https?://(www\.)?flickr\.com/.*#i', 'jetpack_flickr_oembed_handler' );
-
-function jetpack_flickr_oembed_handler( $matches, $attr, $url ) {
- // Legacy slideshow embeds end with /show/
- // e.g. http://www.flickr.com/photos/yarnaholic/sets/72157615194738969/show/
- if ( '/show/' !== substr( $url, -strlen( '/show/' ) ) ) {
- // These lookups need cached, as they don't use WP_Embed (which caches)
- $cache_key = md5( $url . serialize( $attr ) );
- $cache_group = 'oembed_flickr';
-
- $html = wp_cache_get( $cache_key, $cache_group );
-
- if ( false === $html ) {
- $html = _wp_oembed_get_object()->get_html( $url, $attr );
-
- wp_cache_set( $cache_key, $html, $cache_group, 60 * MINUTE_IN_SECONDS );
- }
-
- return $html;
- }
-
- return flickr_shortcode_handler( array( 'photo' => $url ) );
-}
diff --git a/plugins/jetpack/modules/shortcodes/getty.php b/plugins/jetpack/modules/shortcodes/getty.php
deleted file mode 100644
index d473e726..00000000
--- a/plugins/jetpack/modules/shortcodes/getty.php
+++ /dev/null
@@ -1,222 +0,0 @@
-<?php
-/**
- * Getty shortcode
- *
- * [getty src="82278805" width="$width" height="$height"]
- * <div class="getty embed image" style="background-color:#fff;display:inline-block;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;color:#a7a7a7;font-size:11px;width:100%;max-width:462px;"><div style="padding:0;margin:0;text-align:left;"><a href="http://www.gettyimages.com/detail/82278805" target="_blank" style="color:#a7a7a7;text-decoration:none;font-weight:normal !important;border:none;display:inline-block;">Embed from Getty Images</a></div><div style="overflow:hidden;position:relative;height:0;padding:80.086580% 0 0 0;width:100%;"><iframe src="//embed.gettyimages.com/embed/82278805?et=jGiu6FXXSpJDGf1SnwLV2g&sig=TFVNFtqghwNw5iJQ1MFWnI8f4Y40_sfogfZLhai6SfA=" width="462" height="370" scrolling="no" frameborder="0" style="display:inline-block;position:absolute;top:0;left:0;width:100%;height:100%;"></iframe></div><p style="margin:0;"></p></div>
- *
- * @package Jetpack
- */
-
-if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- add_action( 'init', 'jetpack_getty_enable_embeds' );
-} else {
- jetpack_getty_enable_embeds();
-}
-
-/**
- * Register Getty as oembed provider. Add filter to reverse iframes to shortcode. Register [getty] shortcode.
- *
- * @since 4.5.0
- * @since 5.8.0 removed string parameter.
- */
-function jetpack_getty_enable_embeds() {
-
- // Support their oEmbed Endpoint.
- wp_oembed_add_provider( '#https?://www\.gettyimages\.com/detail/.*#i', 'https://embed.gettyimages.com/oembed/', true );
- wp_oembed_add_provider( '#https?://(www\.)?gty\.im/.*#i', 'https://embed.gettyimages.com/oembed/', true );
-
- // Allow iframes to be filtered to short code (so direct copy+paste can be done).
- add_filter( 'pre_kses', 'wpcom_shortcodereverse_getty' );
-
- // Actually display the Getty Embed.
- add_shortcode( 'getty', 'jetpack_getty_shortcode' );
-}
-
-/**
- * Filters the oEmbed provider URL for Getty URLs to include site URL host as
- * caller if available, falling back to "wordpress.com". Must be applied at
- * time of embed in case that `init` is too early (WP.com REST API).
- *
- * @module shortcodes
- *
- * @since 5.8.0
- *
- * @see WP_oEmbed::fetch
- *
- * @return string oEmbed provider URL
- */
-add_filter( 'oembed_fetch_url', 'getty_add_oembed_endpoint_caller' );
-
-/**
- * Filter the embeds to add a caller parameter.
- *
- * @param string $provider URL of the oEmbed provider.
- */
-function getty_add_oembed_endpoint_caller( $provider ) {
- // By time filter is called, original provider URL has had url, maxwidth,
- // maxheight query parameters added.
- if ( 0 !== strpos( $provider, 'https://embed.gettyimages.com/oembed/' ) ) {
- return $provider;
- }
-
- // Set the caller argument to pass to Getty's oembed provider.
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
-
- // Only include caller for non-private sites.
- if ( ! function_exists( 'is_private_blog' ) || ! is_private_blog() ) {
- $host = wp_parse_url( get_bloginfo( 'url' ), PHP_URL_HOST );
- }
-
- // Fall back to WordPress.com.
- if ( empty( $host ) ) {
- $host = 'wordpress.com';
- }
- } else {
- $host = wp_parse_url( get_home_url(), PHP_URL_HOST );
- }
-
- return add_query_arg( 'caller', $host, $provider );
-}
-
-/**
- * Compose shortcode based on Getty iframes.
- *
- * @since 4.5.0
- *
- * @param string $content Post content.
- *
- * @return mixed
- */
-function wpcom_shortcodereverse_getty( $content ) {
- if ( ! is_string( $content ) || false === stripos( $content, '.gettyimages.com/' ) ) {
- return $content;
- }
-
- $regexp = '!<iframe\s+src=[\'"](https?:)?//embed\.gettyimages\.com/embed(/|/?\?assets=)([a-z0-9_-]+(,[a-z0-9_-]+)*)[^\'"]*?[\'"]((?:\s+\w+=[\'"][^\'"]*[\'"])*)((?:[\s\w]*))></iframe>!i';
- $regexp_ent = str_replace( '&amp;#0*58;', '&amp;#0*58;|&#0*58;', htmlspecialchars( $regexp, ENT_NOQUOTES ) );
-
- // Markup pattern for 2017 embed syntax with significant differences from the prior pattern.
- $regexp_2017 = '!<a.+?class=\'gie-(single|slideshow)\'.+?gie\.widgets\.load\({([^}]+)}\).+?embed-cdn\.gettyimages\.com/widgets\.js.+?</script>!';
- $regexp_2017_ent = str_replace( '&amp;#0*58;', '&amp;#0*58;|&#0*58;', htmlspecialchars( $regexp_2017, ENT_NOQUOTES ) );
-
- foreach ( compact( 'regexp_2017', 'regexp_2017_ent', 'regexp', 'regexp_ent' ) as $reg => $regexp ) {
- if ( ! preg_match_all( $regexp, $content, $matches, PREG_SET_ORDER ) ) {
- continue;
- }
-
- foreach ( $matches as $match ) {
- if ( 'regexp_2017' === $reg || 'regexp_2017_ent' === $reg ) {
- // Extract individual keys from the matched JavaScript object.
- $params = $match[2];
- if ( ! preg_match_all( '!(?P<key>\w+)\s*:\s*([\'"](?P<value>[^\'"]*?)(px)?[\'"])!', $params, $key_matches, PREG_SET_ORDER ) ) {
- continue;
- }
-
- foreach ( $key_matches as $key_match ) {
- switch ( $key_match['key'] ) {
- case 'items':
- $ids = $key_match['value'];
- break;
- case 'w':
- $width = (int) $key_match['value'];
- break;
- case 'h':
- $height = (int) $key_match['value'];
- break;
- case 'tld':
- $tld = $key_match['value'];
- break;
- }
- }
- } else {
- $params = $match[5];
- if ( 'regexp_ent' === $reg ) {
- $params = html_entity_decode( $params );
- }
- $params = wp_kses_hair( $params, array( 'http' ) );
-
- $ids = esc_html( $match[3] );
- $width = isset( $params['width'] ) ? (int) $params['width']['value'] : 0;
- $height = isset( $params['height'] ) ? (int) $params['height']['value'] : 0;
- }
-
- if ( empty( $ids ) ) {
- continue;
- }
-
- $shortcode = '[getty src="' . esc_attr( $ids ) . '"';
- if ( ! empty( $width ) ) {
- $shortcode .= ' width="' . esc_attr( $width ) . '"';
- }
- if ( ! empty( $height ) ) {
- $shortcode .= ' height="' . esc_attr( $height ) . '"';
- }
- /*
- * While it does not appear to have any practical impact, Getty has
- * requested that we include TLD in the embed request
- */
- if ( ! empty( $tld ) ) {
- $shortcode .= ' tld="' . esc_attr( $tld ) . '"';
- }
- $shortcode .= ']';
-
- $content = str_replace( $match[0], $shortcode, $content );
- }
- }
-
- // strip out enclosing div and any other markup.
- $regexp = '%<div class="getty\s[^>]*+>.*?<div[^>]*+>(\[getty[^\]]*+\])\s*</div>.*?</div>%is';
- $regexp_ent = str_replace( array( '&amp;#0*58;', '[^&gt;]' ), array( '&amp;#0*58;|&#0*58;', '[^&]' ), htmlspecialchars( $regexp, ENT_NOQUOTES ) );
-
- foreach ( compact( 'regexp', 'regexp_ent' ) as $reg => $regexp ) {
- if ( ! preg_match_all( $regexp, $content, $matches, PREG_SET_ORDER ) ) {
- continue;
- }
-
- foreach ( $matches as $match ) {
- $content = str_replace( $match[0], $match[1], $content );
- }
- }
-
- /** This action is documented in modules/widgets/social-media-icons.php */
- do_action( 'jetpack_bump_stats_extras', 'html_to_shortcode', 'getty' );
-
- return $content;
-}
-
-/**
- * Parse shortcode arguments and render its output.
- *
- * @since 4.5.0
- *
- * @param array $atts Shortcode parameters.
- * @param string $content Content enclosed by shortcode tags.
- *
- * @return string
- */
-function jetpack_getty_shortcode( $atts, $content = '' ) {
-
- if ( ! empty( $content ) ) {
- $src = $content;
- } elseif ( ! empty( $atts['src'] ) ) {
- $src = $atts['src'];
- } elseif ( ! empty( $atts[0] ) ) {
- $src = $atts[0];
- } else {
- return '<!-- Missing Getty Source ID -->';
- }
-
- $src = preg_replace( '/^([\da-z-]+(,[\da-z-]+)*).*$/', '$1', $src );
-
- $params = array(
- 'width' => isset( $atts['width'] ) ? (int) $atts['width'] : null,
- 'height' => isset( $atts['height'] ) ? (int) $atts['height'] : null,
- );
-
- if ( ! empty( $atts['tld'] ) ) {
- $params['tld'] = $atts['tld'];
- }
-
- return wp_oembed_get( 'https://gty.im/' . $src, array_filter( $params ) );
-}
diff --git a/plugins/jetpack/modules/shortcodes/gist.php b/plugins/jetpack/modules/shortcodes/gist.php
deleted file mode 100644
index 968e9e75..00000000
--- a/plugins/jetpack/modules/shortcodes/gist.php
+++ /dev/null
@@ -1,141 +0,0 @@
-<?php
-/**
- * GitHub's Gist site supports oEmbed but their oembed provider only
- * returns raw HTML (no styling) and the first little bit of the code.
- *
- * Their JavaScript-based embed method is a lot better, so that's what we're using.
- */
-
-wp_embed_register_handler( 'github-gist', '#https?://gist\.github\.com/([a-zA-Z0-9/]+)(\#file\-[a-zA-Z0-9\_\-]+)?#', 'github_gist_embed_handler' );
-add_shortcode( 'gist', 'github_gist_shortcode' );
-
-/**
- * Handle gist embeds.
- *
- * @since 2.8.0
- *
- * @global WP_Embed $wp_embed
- *
- * @param array $matches Results after parsing the URL using the regex in wp_embed_register_handler().
- * @param array $attr Embed attributes.
- * @param string $url The original URL that was matched by the regex.
- * @param array $rawattr The original unmodified attributes.
- * @return string The embed HTML.
- */
-function github_gist_embed_handler( $matches, $attr, $url, $rawattr ) {
- // Let the shortcode callback do all the work
- return github_gist_shortcode( $matches, $url );
-}
-
-/**
- * Callback for gist shortcode.
- *
- * @since 2.8.0
- *
- * @param array $atts Attributes found in the shortcode.
- * @param string $content Content enclosed by the shortcode.
- *
- * @return string The gist HTML.
- */
-function github_gist_shortcode( $atts, $content = '' ) {
-
- if ( empty( $atts[0] ) && empty( $content ) ) {
- return '<!-- Missing Gist ID -->';
- }
-
- $id = ( ! empty( $content ) ) ? $content : $atts[0];
-
- // Parse a URL
- if ( ! is_numeric( $id ) ) {
- $id = preg_replace( '#https?://gist.github.com/([a-zA-Z0-9]+)#', '$1', $id );
- }
-
- if ( ! $id ) {
- return '<!-- Invalid Gist ID -->';
- }
-
- if ( Jetpack_AMP_Support::is_amp_request() ) {
- /*
- * According to <https://www.ampproject.org/docs/reference/components/amp-gist#height-(required)>:
- *
- * > Note: You must find the height of the gist by inspecting it with your browser (e.g., Chrome Developer Tools).
- *
- * However, this does not seem to be the case any longer. The actual height of the content does get set in the
- * page after loading. So this is just the initial height.
- * See <https://github.com/ampproject/amphtml/pull/17738>.
- */
- $height = 240;
-
- $parsed_url = wp_parse_url( $id );
-
- // Strip Github user name.
- $id = preg_replace( '#^.*/(?=[a-z0-9]+)#', '', $parsed_url['path'] );
-
- $file = null;
- if ( ! empty( $parsed_url['query'] ) ) {
- $query_args = wp_parse_args( $parsed_url['query'] );
- if ( isset( $query_args['file'] ) ) {
- $file = $query_args['file'];
- }
- }
- if ( ! $file && ! empty( $parsed_url['fragment'] ) && preg_match( '#^file-(.+)#', $parsed_url['fragment'], $matches ) ) {
- $file = $matches[1];
-
- // Make best guess of file for fragment that was slugified.
- $file = preg_replace( '/-(\w+)/', '.$1', $file );
- }
-
- $amp_tag = sprintf(
- '<amp-gist layout="fixed-height" data-gistid="%s" height="%s"',
- esc_attr( basename( $id, '.json' ) ),
- esc_attr( $height )
- );
- if ( ! empty( $file ) ) {
- $amp_tag .= sprintf( ' data-file="%s"', esc_attr( $file ) );
- }
- $amp_tag .= '></amp-gist>';
- return $amp_tag;
- }
-
- wp_enqueue_script(
- 'jetpack-gist-embed',
- Jetpack::get_file_url_for_environment( '_inc/build/shortcodes/js/gist.min.js', 'modules/shortcodes/js/gist.js' ),
- array( 'jquery' ),
- false,
- true
- );
-
- if ( false !== strpos( $id, '#file-' ) ) {
- // URL points to a specific file in the gist
- $id = str_replace( '#file-', '.json?file=', $id );
- $id = preg_replace( '/\-(?!.*\-)/', '.', $id );
- } else {
- $file = ( ! empty( $atts['file'] ) ) ? '?file=' . urlencode( $atts['file'] ) : '';
- // URL points to the entire gist
- $id .= ".json$file";
- }
-
- // inline style to prevent the bottom margin to the embed that themes like TwentyTen, et al., add to tables
- $return = '<style>.gist table { margin-bottom: 0; }</style><div class="gist-oembed" data-gist="' . esc_attr( $id ) . '"></div>';
-
- if ( isset( $_POST['type'] ) && 'embed' === $_POST['type'] &&
- isset( $_POST['action'] ) && 'parse-embed' === $_POST['action'] ) {
- return github_gist_simple_embed( $id );
- }
-
- return $return;
-}
-
-/**
- * Use script tag to load shortcode in editor.
- *
- * @since 3.9.0
- *
- * @param string $id The ID of the gist.
- *
- * @return string
- */
-function github_gist_simple_embed( $id ) {
- $id = str_replace( 'json', 'js', $id );
- return '<script type="text/javascript" src="https://gist.github.com/' . $id . '"></script>';
-}
diff --git a/plugins/jetpack/modules/shortcodes/googleapps.php b/plugins/jetpack/modules/shortcodes/googleapps.php
deleted file mode 100644
index 55c4580e..00000000
--- a/plugins/jetpack/modules/shortcodes/googleapps.php
+++ /dev/null
@@ -1,255 +0,0 @@
-<?php
-/**
- * Google Docs and Google Calendar Shortcode
- *
- * Presentation:
- * <iframe src="https://docs.google.com/present/embed?id=dhfhrphh_123drp8s65c&interval=15&autoStart=true&loop=true&size=l" frameborder="0" width="700" height="559"></iframe>
- * <iframe src="https://docs.google.com/presentation/embed?id=13ItX4jV0SOSdr-ZjHarcpTh9Lr4omfsHAp87jpxv8-0&start=false&loop=false&delayms=3000" frameborder="0" width="960" height="749" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe>
- *
- * Document:
- * <iframe src="https://docs.google.com/document/pub?id=1kDatklacdZ_tZUOpWtt_ONzY97Ldj2zFcuO9LBY2Ln4&amp;embedded=true"></iframe>
- * <iframe src="https://docs.google.com/document/d/1kDatklacdZ_tZUOpWtt_ONzY97Ldj2zFcuO9LBY2Ln4/pub?embedded=true"></iframe>
- * <iframe src="https://docs.google.com/document/d/e/2PACX-1vRkpIdasKL-eKXDjJgpEONduUspZTz0YmKaajfie0eJYnzikuyusuG1_V8X8T9XflN9l8A1oCM2sgEA/pub?embedded=true"></iframe>
- *
- * External document:
- * <iframe width=100% height=560px frameborder=0 src=https://docs.google.com/a/pranab.in/viewer?a=v&pid=explorer&chrome=false&embedded=true&srcid=1VTMwdgGiDMt8MCr75-YkQP-4u9WmEp1Qvf6C26KYBgFilxU2qndpd-VHhBIn&hl=en></iframe>
- *
- * Spreadsheet Form:
- * <iframe src="https://spreadsheets.google.com/embeddedform?formkey=dEVOYnMzZG5jMUpGbjFMYjFYNVB3NkE6MQ" width="760" height="710" frameborder="0" marginheight="0" marginwidth="0">Loading...</iframe>
- *
- * Spreadsheet Widget:
- * <iframe width='500' height='300' frameborder='0' src='https://spreadsheets1.google.com/a/petedavies.com/pub?hl=en&hl=en&key=0AjSij7nlnXvKdHNsNjRSWG12YmVfOEFwdlMxQ3J1S1E&single=true&gid=0&output=html&widget=true'></iframe>
- * <iframe width='500' height='300' frameborder='0' src='https://spreadsheets.google.com/spreadsheet/pub?hl=en&hl=en&key=0AhInIwfvYrIUdGJiTXhtUEhBSFVPUzdRZU5OMDlqdnc&output=html&widget=true'></iframe>
- *
- * Calendar:
- * <iframe src="https://www.google.com/calendar/embed?src=serjant%40gmail.com&ctz=Europe/Sofia" style="border: 0" width="800" height="600" frameborder="0" scrolling="no"></iframe>
- * <iframe src="http://www.google.com/calendar/hosted/belcastro.com/embed?src=n8nr8sd6v9hnus3nmlk7ed1238%40group.calendar.google.com&ctz=Europe/Zurich" style="border: 0" width="800" height="600" frameborder="0" scrolling="no"></iframe>
- *
- * Customized calendar:
- * <iframe src="https://www.google.com/calendar/embed?title=asdf&amp;showTitle=0&amp;showNav=0&amp;showDate=0&amp;showPrint=0&amp;showTabs=0&amp;showCalendars=0&amp;
- * showTz=0&amp;mode=AGENDA&amp;height=300&amp;wkst=2&amp;hl=fi&amp;bgcolor=%23ffcccc&amp;src=m52gdmbgelo3itf00u1v44g0ns%40group.calendar.google.com&amp;color=%234E5D6C&amp;
- * src=serjant%40gmail.com&amp;color=%235229A3&amp;ctz=Europe%2FRiga" style=" border:solid 1px #777 " width="500" height="300" frameborder="0" scrolling="no"></iframe>
- *
- * Generic
- * <iframe src="https://docs.google.com/file/d/0B0SIdZW7iu-zX1RWREJpMXVHZVU/preview" width="640" height="480"></iframe>
- *
- * @package Jetpack
- */
-
-add_filter( 'pre_kses', 'googleapps_embed_to_shortcode' );
-add_shortcode( 'googleapps', 'googleapps_shortcode' );
-
-/**
- * Reverse iframe embed to shortcode mapping HTML attributes to shortcode attributes.
- *
- * @since 4.5.0
- *
- * @param string $content Post content.
- *
- * @return mixed
- */
-function googleapps_embed_to_shortcode( $content ) {
- if (
- ! is_string( $content )
- || false === stripos( $content, '<iframe' )
- && false === stripos( $content, '.google.com' )
- ) {
- return $content;
- }
-
- $regexp = '#<iframe((?:\s+\w+="[^"]*")*?)\s*src="https?://(docs|drive|spreadsheets\d*|calendar|www)*\.google\.com/(?!maps)([-\w\./]+)(?:\?)?([^"]+)?"\s*((?:\s+\w+="[^"]*")*?)>.*?</iframe>#i';
- $regexp_ent = str_replace( '&amp;#0*58;', '&amp;#0*58;|&#0*58;', htmlspecialchars( $regexp, ENT_NOQUOTES ) );
- $regexp_squot = str_replace( '"', "'", $regexp );
- $regexp_ent_squot = str_replace( '"', "'", $regexp_ent );
- $regexp_noquot = '!<iframe(.*?)src=https://(docs|drive)\.google\.com/[-\.\w/]*?(viewer)\?(.*?)>(.*?)</iframe>!';
- $regexp_ent_noquot = str_replace( '&amp;#0*58;', '&amp;#0*58;|&#0*58;', htmlspecialchars( $regexp_noquot, ENT_NOQUOTES ) );
-
- foreach ( compact( 'regexp', 'regexp_ent', 'regexp_squot', 'regexp_ent_squot', 'regexp_noquot', 'regexp_ent_noquot' ) as $reg => $regexp ) {
- if ( ! preg_match_all( $regexp, $content, $matches, PREG_SET_ORDER ) ) {
- continue;
- }
-
- foreach ( $matches as $match ) {
- $params = $match[1] . $match[5];
- if ( in_array( $reg, array( 'regexp_ent', 'regexp_ent_squot' ), true ) ) {
- $params = html_entity_decode( $params );
- }
-
- $params = wp_kses_hair( $params, array( 'http' ) );
-
- $width = 0;
- $height = 0;
-
- if ( isset( $params['width'] ) ) {
- $width = (int) $params['width']['value'];
- }
-
- if ( isset( $params['height'] ) ) {
- $height = (int) $params['height']['value'];
- }
-
- // allow the user to specify width greater than 200 inside text widgets.
- if (
- $width > 400
- // We don't need to check a nonce here. A nonce is already checked "further up" in most code paths.
- // In the case where no nonce is ever checked, setting this $_POST parameter doesn't do anything the submitter couldn't already do (set the width/height).
- && isset( $_POST['widget-text'] ) // phpcs:ignore WordPress.Security.NonceVerification.Missing
- ) {
- $width = 200;
- $height = 200;
- }
-
- $attributes = '';
- if ( isset( $params['width'] ) && '100%' === $params['width']['value'] ) {
- $width = '100%';
- }
-
- if ( $width ) {
- $attributes = ' width="' . $width . '"';
- }
-
- if ( $height ) {
- $attributes .= ' height="' . $height . '"';
- }
-
- $domain = 'spreadsheets';
- if ( in_array( $match[2], array( 'docs', 'drive', 'www', 'calendar' ), true ) ) {
- $domain = $match[2];
- }
-
- // Make sure this is actually something that the shortcode supports. If it's not, leave the HTML alone.
- if ( ! googleapps_validate_domain_and_dir( $domain, $match[3] ) ) {
- continue;
- }
-
- /** This action is documented in modules/widgets/social-media-icons.php */
- do_action( 'jetpack_bump_stats_extras', 'html_to_shortcode', googleapps_service_name( $domain, $match[3] ) );
-
- $content = str_replace( $match[0], '[googleapps domain="' . $domain . '" dir="' . $match[3] . '" query="' . esc_attr( $match[4] ) . '"' . $attributes . ' /]', $content );
- }
- }
-
- return $content;
-}
-
-/**
- * Parse shortcode attributes and output a Google Docs embed.
- *
- * @since 4.5.0
- *
- * @param array $atts Shortcode attributes.
- *
- * @return string
- */
-function googleapps_shortcode( $atts ) {
- global $content_width;
-
- $attr = shortcode_atts(
- array(
- 'width' => '100%',
- 'height' => '560',
- 'domain' => 'docs',
- 'dir' => 'document',
- 'query' => '',
- 'src' => '',
- ),
- $atts
- );
-
- if ( isset( $content_width ) && is_numeric( $attr['width'] ) && $attr['width'] > $content_width ) {
- $attr['width'] = $content_width;
- }
-
- if ( isset( $content_width ) && '560' === $attr['height'] ) {
- $attr['height'] = floor( $content_width * 3 / 4 );
- }
-
- if ( isset( $atts[0] ) && $atts[0] ) {
- $attr['src'] = $atts[0];
- }
-
- if ( $attr['src'] && preg_match( '!https?://(docs|drive|spreadsheets\d*|calendar|www)*\.google\.com/([-\w\./]+)\?([^"]+)!', $attr['src'], $matches ) ) {
- $attr['domain'] = $matches[1];
- $attr['dir'] = $matches[2];
- parse_str( htmlspecialchars_decode( $matches[3] ), $query_ar );
- $query_ar['chrome'] = 'false';
- $query_ar['embedded'] = 'true';
- $attr['query'] = http_build_query( $query_ar );
- }
-
- if ( ! googleapps_validate_domain_and_dir( $attr['domain'], $attr['dir'] ) ) {
- return '<!-- Unsupported URL -->';
- }
-
- $attr['query'] = $attr['dir'] . '?' . $attr['query'];
-
- /** This action is documented in modules/widgets/social-media-icons.php */
- do_action( 'jetpack_bump_stats_extras', 'embeds', googleapps_service_name( $attr['domain'], $attr['dir'] ) );
-
- return sprintf(
- '<iframe src="%s" frameborder="0" width="%s" height="%s" marginheight="0" marginwidth="0" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe>',
- esc_url( 'https://' . $attr['domain'] . '.google.com/' . $attr['query'] ),
- esc_attr( $attr['width'] ),
- esc_attr( $attr['height'] )
- );
-}
-
-/**
- * Check that the domain blogs to a Google Apps domain.
- *
- * @since 4.5.0
- *
- * @param string $domain Google subdomain.
- * @param string $dir Subdirectory of the shared URL.
- *
- * @return bool
- */
-function googleapps_validate_domain_and_dir( $domain, $dir ) {
- if ( ! in_array( $domain, array( 'docs', 'drive', 'www', 'spreadsheets', 'calendar' ), true ) ) {
- return false;
- }
-
- // Calendars.
- if ( ( 'www' === $domain || 'calendar' === $domain ) && 'calendar/' !== substr( $dir, 0, 9 ) ) {
- return false;
- }
-
- // Docs.
- if ( in_array( $domain, array( 'docs', 'drive' ), true ) && ! preg_match( '![-\.\w/]*(presentation/embed|presentation/d/(.*)|present/embed|document/pub|spreadsheets/d/(.*)|document/d/(e/)?[\w-]+/pub|file/d/[\w-]+/preview|viewer|forms/d/(.*)/viewform|spreadsheet/\w+)$!', $dir ) ) {
- return false;
- }
-
- // Spreadsheets.
- if ( 'spreadsheets' === $domain && ! preg_match( '!^([-\.\w/]+/pub|[-\.\w/]*embeddedform)$!', $dir ) ) {
- return false;
- }
-
- return true;
-}
-
-/**
- * Get the name of the service we'll be embedding.
- *
- * @since 4.5.0
- *
- * @param string $domain Google subdomain.
- * @param string $dir Subdirectory of the shared URL.
- *
- * @return string
- */
-function googleapps_service_name( $domain, $dir ) {
- switch ( $domain ) {
- case 'drive':
- case 'docs':
- $service_name = ( 'present/embed' === $dir ) ? 'googledocs_presentation' : 'googledocs_document';
- break;
- case 'spreadsheets':
- $service_name = ( 'embeddedform' === $dir ) ? 'googledocs_form' : 'googledocs_spreadsheet';
- break;
- case 'calendar':
- default:
- $service_name = 'google_calendar';
- }
-
- return $service_name;
-}
diff --git a/plugins/jetpack/modules/shortcodes/googlemaps.php b/plugins/jetpack/modules/shortcodes/googlemaps.php
deleted file mode 100644
index 21d86088..00000000
--- a/plugins/jetpack/modules/shortcodes/googlemaps.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-
-/*
- * Google maps iframe - transforms code that looks like that:
- * <iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=bg&amp;geocode=&amp;q=%D0%9C%D0%BB%D0%B0%D0%B4%D0%BE%D1%81%D1%82+1,+%D0%A1%D0%BE%D1%84%D0%B8%D1%8F,+%D0%91%D1%8A%D0%BB%D0%B3%D0%B0%D1%80%D0%B8%D1%8F&amp;sll=37.0625,-95.677068&amp;sspn=40.545434,79.013672&amp;ie=UTF8&amp;hq=&amp;hnear=%D0%9C%D0%BB%D0%B0%D0%B4%D0%BE%D1%81%D1%82+1&amp;ll=42.654446,23.372061&amp;spn=0.036864,0.077162&amp;t=h&amp;z=14&amp;output=embed"></iframe><br /><small><a href="http://maps.google.com/maps?f=q&amp;source=embed&amp;hl=bg&amp;geocode=&amp;q=%D0%9C%D0%BB%D0%B0%D0%B4%D0%BE%D1%81%D1%82+1,+%D0%A1%D0%BE%D1%84%D0%B8%D1%8F,+%D0%91%D1%8A%D0%BB%D0%B3%D0%B0%D1%80%D0%B8%D1%8F&amp;sll=37.0625,-95.677068&amp;sspn=40.545434,79.013672&amp;ie=UTF8&amp;hq=&amp;hnear=%D0%9C%D0%BB%D0%B0%D0%B4%D0%BE%D1%81%D1%82+1&amp;ll=42.654446,23.372061&amp;spn=0.036864,0.077162&amp;t=h&amp;z=14" style="color:#0000FF;text-align:left">Вижте по-голяма карта</a></small>
- * into the [googlemaps http://...] shortcode format
- */
-function jetpack_googlemaps_embed_to_short_code( $content ) {
-
- if ( ! is_string( $content ) || ( false === strpos( $content, 'maps.google.' ) && 1 !== preg_match( '@google\.[^/]+/maps?@', $content ) ) ) {
- return $content;
- }
-
- // IE and TinyMCE format things differently
- // &lt;iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="<a href="https://maps.google.co.uk/maps/ms?msa=0&amp;amp;msid=206216869547772496318.0004bf5f0ff25aea47bd9&amp;amp;hl=en&amp;amp;ie=UTF8&amp;amp;t=m&amp;amp;ll=50.91917,-1.398808&amp;amp;spn=0.013225,0.011794&amp;amp;output=embed&quot;&gt;&lt;/iframe&gt;&lt;br">https://maps.google.co.uk/maps/ms?msa=0&amp;amp;msid=206216869547772496318.0004bf5f0ff25aea47bd9&amp;amp;hl=en&amp;amp;ie=UTF8&amp;amp;t=m&amp;amp;ll=50.91917,-1.398808&amp;amp;spn=0.013225,0.011794&amp;amp;output=embed"&gt;&lt;/iframe&gt;&lt;br</a> /&gt;&lt;small&gt;View &lt;a href="<a href="https://maps.google.co.uk/maps/ms?msa=0&amp;amp;msid=206216869547772496318.0004bf5f0ff25aea47bd9&amp;amp;hl=en&amp;amp;ie=UTF8&amp;amp;t=m&amp;amp;ll=50.91917,-1.398808&amp;amp;spn=0.013225,0.011794&amp;amp;source=embed">https://maps.google.co.uk/maps/ms?msa=0&amp;amp;msid=206216869547772496318.0004bf5f0ff25aea47bd9&amp;amp;hl=en&amp;amp;ie=UTF8&amp;amp;t=m&amp;amp;ll=50.91917,-1.398808&amp;amp;spn=0.013225,0.011794&amp;amp;source=embed</a>" style="color:#0000FF;text-align:left"&gt;OARA Membership Discount Map&lt;/a&gt; in a larger map&lt;/small&gt;
- if ( strpos( $content, 'src="<a href="' ) !== false ) {
- $content = preg_replace_callback( '#&lt;iframe\s[^&]*?(?:&(?!gt;)[^&]*?)*?src="<a href="https?://(.*)?\.google\.(.*?)/(.*?)\?(.+?)&quot;[^&]*?(?:&(?!gt;)[^&]*?)*?&gt;\s*&lt;/iframe&gt;&lt;br">[^"]*?"&gt;\s*&lt;/iframe&gt;(?:&lt;br</a>\s*/&gt;\s*&lt;small&gt;.*?&lt;/small&gt;)?#i', 'jetpack_googlemaps_embed_to_short_code_callback', $content );
- return $content;
- }
-
- $content = preg_replace_callback( '!\<iframe\s[^>]*?src="https?://(.*)?\.google\.(.*?)/(.*?)\?(.+?)"[^>]*?\>\s*\</iframe\>(?:\s*(?:\<br\s*/?\>)?\s*\<small\>.*?\</small\>)?!i', 'jetpack_googlemaps_embed_to_short_code_callback', $content );
-
- $content = preg_replace_callback( '#&lt;iframe\s[^&]*?(?:&(?!gt;)[^&]*?)*?src="https?://(.*)?\.google\.(.*?)/(.*?)\?(.+?)"[^&]*?(?:&(?!gt;)[^&]*?)*?&gt;\s*&lt;/iframe&gt;(?:\s*(?:&lt;br\s*/?&gt;)?\s*&lt;small&gt;.*?&lt;/small&gt;)?#i', 'jetpack_googlemaps_embed_to_short_code_callback', $content );
-
- return $content;
-}
-
-function jetpack_googlemaps_embed_to_short_code_callback( $match ) {
-
- if ( preg_match( '/\bwidth=[\'"](\d+)(%)?/', $match[0], $width ) ) {
- $percent = ! empty( $width[2] ) ? '%' : '';
- $width = absint( $width[1] ) . $percent;
- } else {
- $width = 425;
- }
-
- if ( preg_match( '/\bheight=[\'"](\d+)(%)?/', $match[0], $height ) ) {
- $percent = ! empty( $height[2] ) ? '%' : '';
- $height = absint( $height[1] ) . $percent;
- } else {
- $height = 350;
- }
-
- $url = "https://{$match[1]}.google.{$match[2]}/{$match[3]}?{$match[4]}&amp;w={$width}&amp;h={$height}";
-
- /** This action is documented in modules/shortcodes/youtube.php */
- do_action( 'jetpack_embed_to_shortcode', 'googlemaps', $url );
-
- return "[googlemaps $url]";
-}
-
-add_filter( 'pre_kses', 'jetpack_googlemaps_embed_to_short_code' );
-
-/**
- * [googlemaps] shortcode
- *
- * Example usage:
- * [googlemaps https://maps.google.com/maps?f=q&hl=en&geocode=&q=San+Francisco,+CA&sll=43.469466,-83.998504&sspn=0.01115,0.025942&g=San+Francisco,+CA&ie=UTF8&z=12&iwloc=addr&ll=37.808156,-122.402458&output=embed&s=AARTsJp56EajYksz3JXgNCwT3LJnGsqqAQ&w=425&h=350]
- * [googlemaps https://mapsengine.google.com/map/embed?mid=zbBhkou4wwtE.kUmp8K6QJ7SA&w=640&h=480]
- */
-function jetpack_googlemaps_shortcode( $atts ) {
- if ( ! isset( $atts[0] ) ) {
- return '';
- }
-
- $params = ltrim( $atts[0], '=' );
-
- $width = 425;
- $height = 350;
-
- if ( preg_match( '!^https?://(www|maps|mapsengine)\.google(\.co|\.com)?(\.[a-z]+)?/.*?(\?.+)!i', $params, $match ) ) {
- $params = str_replace( '&amp;amp;', '&amp;', $params );
- $params = str_replace( '&amp;', '&', $params );
- parse_str( $params, $arg );
-
- if ( isset( $arg['hq'] ) ) {
- unset( $arg['hq'] );
- }
-
- $url = '';
- foreach ( (array) $arg as $key => $value ) {
- if ( 'w' == $key ) {
- $percent = ( '%' == substr( $value, -1 ) ) ? '%' : '';
- $width = (int) $value . $percent;
- } elseif ( 'h' == $key ) {
- $height = (int) $value;
- } else {
- $key = str_replace( '_', '.', $key );
- $url .= esc_attr( "$key=$value&amp;" );
- }
- }
- $url = substr( $url, 0, -5 );
-
- if ( is_ssl() ) {
- $url = str_replace( 'http://', 'https://', $url );
- }
-
- $css_class = 'googlemaps';
-
- if ( ! empty( $atts['align'] ) && in_array( strtolower( $atts['align'] ), array( 'left', 'center', 'right' ), true ) ) {
- $atts['align'] = strtolower( $atts['align'] );
-
- if ( $atts['align'] === 'left' ) {
- $css_class .= ' alignleft';
- } elseif ( $atts['align'] === 'center' ) {
- $css_class .= ' aligncenter';
- } elseif ( $atts['align'] === 'right' ) {
- $css_class .= ' alignright';
- }
- }
-
- return '<div class="' . esc_attr( $css_class ) . '"><iframe width="' . $width . '" height="' . $height . '" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="' . $url . '"></iframe></div>';
- }
-}
-add_shortcode( 'googlemaps', 'jetpack_googlemaps_shortcode' );
diff --git a/plugins/jetpack/modules/shortcodes/googleplus.php b/plugins/jetpack/modules/shortcodes/googleplus.php
deleted file mode 100644
index 8c9118e1..00000000
--- a/plugins/jetpack/modules/shortcodes/googleplus.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-/**
- * Google+ embeds
- * Google+ has shut down. Output the link for history's sake.
- * Other than that, there's not much we can do.
- */
-
-define( 'JETPACK_GOOGLEPLUS_EMBED_REGEX', '#^https?://plus\.(sandbox\.)?google\.com/(u/\d+/)?([^/]+)/posts/([^/]+)$#' );
-
-// Example URL: https://plus.google.com/114986219448604314131/posts/LgHkesWCmJo
-// Alternate example: https://plus.google.com/u/0/100004581596612508203/posts/2UKwN67MBQs (note the /u/0/)
-wp_embed_register_handler( 'googleplus', JETPACK_GOOGLEPLUS_EMBED_REGEX, 'jetpack_deprecated_embed_handler' );
-
-add_shortcode( 'googleplus', 'jetpack_googleplus_shortcode_handler' );
-
-function jetpack_googleplus_shortcode_handler( $atts ) {
- global $wp_embed;
-
- if ( empty( $atts['url'] ) ) {
- return;
- }
-
- if ( ! preg_match( JETPACK_GOOGLEPLUS_EMBED_REGEX, $atts['url'] ) ) {
- return;
- }
-
- return sprintf( '<p>%s</p>', $wp_embed->shortcode( $atts, $atts['url'] ) );
-}
diff --git a/plugins/jetpack/modules/shortcodes/googlevideo.php b/plugins/jetpack/modules/shortcodes/googlevideo.php
deleted file mode 100644
index bf3ad707..00000000
--- a/plugins/jetpack/modules/shortcodes/googlevideo.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-/**
- * google video is replaced by youtube, but its embeds will probably continue working indefinitely.
- * [googlevideo=http://video.google.com/googleplayer.swf?docId=-6006084025483872237]
- */
-
-function googlevideo_shortcode( $atts ) {
- if ( ! isset( $atts[0] ) ) {
- return '';
- }
-
- $src = ltrim( $atts[0], '=' );
-
- if ( 0 !== strpos( $src, 'http://video.google.com/googleplayer.swf' ) ) {
- if ( ! preg_match( '|^http://(video\.google\.[a-z]{2,3}(?:.[a-z]{2})?)/|', $src ) || ! preg_match( '|.*docid=([0-9-]+).*|i', $src, $match ) || ! is_numeric( $match[1] ) ) {
- return '<!--Google Video Error: bad URL entered-->';
- }
-
- $src = 'http://video.google.com/googleplayer.swf?docId=' . $match[1];
- }
-
- // default width should be 400 unless the theme's content width is smaller than that
- global $content_width;
- $default_width = intval( ! empty( $content_width ) ? min( $content_width, 400 ) : 400 );
- $height = intval( 0.825 * $default_width );
- $src = esc_attr( $src );
-
- return "<span style='text-align:center;display:block;'><object width='{$default_width}' height='{$height}' type='application/x-shockwave-flash' data='{$src}'><param name='allowScriptAccess' value='never' /><param name='movie' value='$src'/><param name='quality' value='best'/><param name='bgcolor' value='#ffffff' /><param name='scale' value='noScale' /><param name='wmode' value='opaque' /></object></span>";
-}
-add_shortcode( 'googlevideo', 'googlevideo_shortcode' );
diff --git a/plugins/jetpack/modules/shortcodes/gravatar.php b/plugins/jetpack/modules/shortcodes/gravatar.php
deleted file mode 100644
index cb709af9..00000000
--- a/plugins/jetpack/modules/shortcodes/gravatar.php
+++ /dev/null
@@ -1,163 +0,0 @@
-<?php
-/**
- * Gravatar shortcode for avatar and profile.
- *
- * Usage:
- *
- * [gravatar email="user@example.org" size="48"]
- * [gravatar_profile who="user@example.org"]
- *
- * @package Jetpack
- */
-
-add_shortcode( 'gravatar', 'jetpack_gravatar_shortcode' );
-add_shortcode( 'gravatar_profile', 'jetpack_gravatar_profile_shortcode' );
-
-/**
- * Get gravatar using the email provided at the specified size.
- *
- * @since 4.5.0
- *
- * @param array $atts Shortcode attributes.
- *
- * @return bool|string
- */
-function jetpack_gravatar_shortcode( $atts ) {
- $atts = shortcode_atts(
- array(
- 'email' => '',
- 'size' => 96,
- ),
- $atts
- );
-
- if ( empty( $atts['email'] ) || ! is_email( $atts['email'] ) ) {
- return false;
- }
-
- $atts['size'] = intval( $atts['size'] );
- if ( 0 > $atts['size'] ) {
- $atts['size'] = 96;
- }
-
- return get_avatar( $atts['email'], $atts['size'] );
-}
-
-/**
- * Display Gravatar profile
- *
- * @since 4.5.0
- *
- * @param array $atts Shortcode attributes.
- *
- * @uses shortcode_atts()
- * @uses get_user_by()
- * @uses is_email()
- * @uses sanitize_email()
- * @uses sanitize_user()
- * @uses set_url_scheme()
- * @uses wpcom_get_avatar_url()
- * @uses get_user_attribute()
- * @uses esc_url()
- * @uses esc_html()
- * @uses _e()
- *
- * @return string
- */
-function jetpack_gravatar_profile_shortcode( $atts ) {
- // Give each use of the shortcode a unique ID.
- static $instance = 0;
-
- // Process passed attributes.
- $atts = shortcode_atts(
- array(
- 'who' => null,
- ),
- $atts,
- 'jetpack_gravatar_profile'
- );
-
- // Can specify username, user ID, or email address.
- if ( is_numeric( $atts['who'] ) ) {
- $user = get_user_by( 'id', (int) $atts['who'] );
- } elseif ( is_email( $atts['who'] ) ) {
- $user = get_user_by( 'email', sanitize_email( $atts['who'] ) );
- } elseif ( is_string( $atts['who'] ) ) {
- $user = get_user_by( 'login', sanitize_user( $atts['who'] ) );
- } else {
- $user = false;
- }
-
- // Bail if we don't have a user.
- if ( false === $user ) {
- return false;
- }
-
- // Render the shortcode.
- $gravatar_url = set_url_scheme( 'http://gravatar.com/' . $user->user_login );
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $avatar_url = wpcom_get_avatar_url( $user->ID, 96 );
- $avatar_url = $avatar_url[0];
- $user_location = get_user_attribute( $user->ID, 'location' );
- } else {
- $avatar_url = get_avatar_url( $user->user_email, array( 'size' => 96 ) );
- $user_location = get_user_meta( $user->ID, 'location', true );
- }
-
- ob_start();
-
- ?>
- <script type="text/javascript">
- ( function() {
- if ( null === document.getElementById( 'gravatar-profile-embed-styles' ) ) {
- var headID = document.getElementsByTagName( 'head' )[0];
- var styleNode = document.createElement( 'style' );
- styleNode.type = 'text/css';
- styleNode.id = 'gravatar-profile-embed-styles';
-
- var gCSS = '.grofile-wrap { border: solid 1px #eee; padding: 10px; } .grofile { padding: 0 0 5px 0; } .grofile-left { float: left; display: block; width: 96px; margin-right: 15px; } .grofile .gravatar { margin-bottom: 5px; } .grofile-clear { clear: left; font-size: 1px; height: 1px; } .grofile ul li a { text-indent: -99999px; } .grofile .grofile-left a:hover { text-decoration: none !important; border: none !important; } .grofile-name { margin-top: 0; }';
-
- if ( document.all ) {
- styleNode.innerText = gCSS;
- } else {
- styleNode.textContent = gCSS;
- }
-
- headID.appendChild( styleNode );
- }
- } )();
- </script>
-
- <div class="grofile vcard" id="grofile-embed-<?php echo esc_attr( $instance ); ?>">
- <div class="grofile-inner">
- <div class="grofile-left">
- <div class="grofile-img">
- <a href="<?php echo esc_url( $gravatar_url ); ?>">
- <img src="<?php echo esc_url( $avatar_url ); ?>" width="96" height="96" class="no-grav gravatar photo" />
- </a>
- </div>
- </div>
- <div class="grofile-right">
- <p class="grofile-name fn">
- <strong><?php echo esc_html( $user->display_name ); ?></strong>
- <?php
- if ( ! empty( $user_location ) ) :
- ?>
- <br><span class="grofile-location adr"><?php echo esc_html( $user_location ); ?></span><?php endif; ?>
- </p>
- <p class="grofile-bio"><strong><?php esc_html_e( 'Bio:', 'jetpack' ); ?></strong> <?php echo wp_kses_post( $user->description ); ?></p>
- <p class="grofile-view">
- <a href="<?php echo esc_url( $gravatar_url ); ?>"><?php esc_html_e( 'View complete profile', 'jetpack' ); ?></a>
- </p>
- </div>
- <span class="grofile-clear">&nbsp;</span>
- </div>
- </div>
- <?php
-
- // Increment and return the rendered profile.
- $instance++;
-
- return ob_get_clean();
-}
diff --git a/plugins/jetpack/modules/shortcodes/houzz.php b/plugins/jetpack/modules/shortcodes/houzz.php
deleted file mode 100644
index 9d9b3131..00000000
--- a/plugins/jetpack/modules/shortcodes/houzz.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-/*
- * Houzz Embed
- *
- * Examples:
- * Post content:
- * - [houzz=http://www.houzz.com/pro/james-crisp]
- * - http://www.houzz.com/pro/james-crisp
- * Blog sidebar: [houzz=http://www.houzz.com/profile/alon w=200 h=300]
- */
-
-// Register oEmbed provider
-wp_oembed_add_provider( '#https?://(.+?\.)?houzz\.(com|co\.uk|com\.au|de|fr|ru|jp|it|es|dk|se)/.*#i', 'https://www.houzz.com/oembed', true );
-
-// Create Shortcode
-function jetpack_houzz_shortcode( $atts, $content = null ) {
- $url = substr( $atts[0], 1 );
- $args = array();
- if ( isset( $atts['w'] ) && is_numeric( $atts['w'] ) ) {
- $args['width'] = $atts['w'];
- }
- if ( isset( $atts['h'] ) && is_numeric( $atts['h'] ) ) {
- $args['height'] = $atts['h'];
- }
- $oembed = _wp_oembed_get_object();
- return $oembed->get_html( $url, $args );
-}
-add_shortcode( 'houzz', 'jetpack_houzz_shortcode' );
diff --git a/plugins/jetpack/modules/shortcodes/hulu.php b/plugins/jetpack/modules/shortcodes/hulu.php
deleted file mode 100644
index 38203d4c..00000000
--- a/plugins/jetpack/modules/shortcodes/hulu.php
+++ /dev/null
@@ -1,275 +0,0 @@
-<?php
-/**
- * Hulu Shortcode
- *
- * [hulu 369061]
- * [hulu id=369061]
- * [hulu id=369061 width=512 height=288 start_time="10" end_time="20" thumbnail_frame="10"]
- * [hulu http://www.hulu.com/watch/369061]
- * [hulu id=gQ6Z0I990IWv_VFQI2J7Eg width=512 height=288]
- *
- * <object width="512" height="288">
- * <param name="movie" value="http://www.hulu.com/embed/gQ6Z0I990IWv_VFQI2J7Eg"></param>
- * <param name="allowFullScreen" value="true"></param>
- * <embed src="http://www.hulu.com/embed/gQ6Z0I990IWv_VFQI2J7Eg" type="application/x-shockwave-flash" width="512" height="288" allowFullScreen="true"></embed>
- * </object>
- *
- * @package Jetpack
- */
-
-if ( get_option( 'embed_autourls' ) ) {
-
- // Convert hulu URLS to shortcodes for old comments, saved before comments for shortcodes were enabled.
- add_filter( 'comment_text', 'jetpack_hulu_link', 1 );
-}
-
-add_shortcode( 'hulu', 'jetpack_hulu_shortcode' );
-
-/**
- * Return a Hulu video ID from a given set to attributes.
- *
- * @since 4.5.0
- *
- * @param array $atts Shortcode parameters.
- *
- * @return string $id Hulu video ID.
- */
-function jetpack_shortcode_get_hulu_id( $atts ) {
- // This will catch an id explicitly defined as such, or assume any param without a label is the id. First found is used.
- if ( isset( $atts['id'] ) ) {
- // First we check to see if [hulu id=369061] or [hulu id=gQ6Z0I990IWv_VFQI2J7Eg] was used.
- $id = esc_attr( $atts['id'] );
- } elseif ( isset( $atts[0] ) && preg_match( '|www\.hulu\.com/watch/(\d+)|i', $atts[0], $match ) ) {
- // this checks for [hulu http://www.hulu.com/watch/369061].
- $id = (int) $match[1];
- } elseif ( isset( $atts[0] ) ) {
- // This checks for [hulu 369061] or [hulu 65yppv6xqa45s5n7_m1wng].
- $id = esc_attr( $atts[0] );
- } else {
- $id = 0;
- }
-
- return $id;
-}
-
-/**
- * Convert a Hulu shortcode into an embed code.
- *
- * @since 4.5.0
- *
- * @param array $atts An array of shortcode attributes.
- *
- * @return string The embed code for the Hulu video.
- */
-function jetpack_hulu_shortcode( $atts ) {
- global $content_width;
-
- // Set a default content width, if it's not specified.
- $attr = shortcode_atts(
- array(
- 'id' => '',
- 'width' => $content_width ? $content_width : 640,
- 'start_time' => '',
- 'end_time' => '',
- 'thumbnail_frame' => '',
- ),
- $atts
- );
-
- $id = jetpack_shortcode_get_hulu_id( $atts );
- if ( ! $id ) {
- return '<!-- Hulu Error: Hulu shortcode syntax invalid. -->';
- }
-
- $start_time = 0;
- if ( is_numeric( $attr['start_time'] ) ) {
- $start_time = intval( $attr['start_time'] );
- }
- if ( is_numeric( $attr['end_time'] ) && intval( $attr['end_time'] ) > $start_time ) {
- $end_time = intval( $attr['end_time'] );
- }
- if ( is_numeric( $attr['thumbnail_frame'] ) ) {
- $thumbnail_frame = intval( $attr['thumbnail_frame'] );
- }
-
- // check to see if $id is 76560 else we assume it's gQ6Z0I990IWv_VFQI2J7Eg
- // If id is numeric, we'll send it off to the hulu oembed api to get the embed URL (and non-numeric id).
- if ( is_numeric( $id ) ) {
- $transient_key = "hulu-$id";
- $transient_value = get_transient( $transient_key );
-
- if ( false === $transient_value ) {
- // let's make a cross-site http request out to the hulu oembed api.
- $oembed_url = sprintf(
- 'https://www.hulu.com/api/oembed.json?url=%s',
- rawurlencode( 'https://www.hulu.com/watch/' . esc_attr( $id ) )
- );
- $response = wp_remote_get( $oembed_url );
- $response_code = wp_remote_retrieve_response_code( $response );
- $response_message = wp_remote_retrieve_response_message( $response );
- if ( 200 !== $response_code && ! empty( $response_message ) ) {
- return "<!-- Hulu Error: Hulu shortcode http error $response_message -->";
- } elseif ( 200 !== $response_code ) {
- return "<!-- Hulu Error: Hulu shortcode unknown error occurred, $response_code -->";
- } else {
- $response_body = wp_remote_retrieve_body( $response );
- $json = json_decode( $response_body );
-
- // Pull out id from embed url (from oembed API).
- $embed_url_params = array();
- parse_str( wp_parse_url( $json->embed_url, PHP_URL_QUERY ), $embed_url_params );
-
- if ( isset( $embed_url_params['eid'] ) ) {
- $id = $embed_url_params['eid'];
- }
- // let's cache this response indefinitely.
- set_transient( $transient_key, $id );
- }
- } else {
- $id = $transient_value;
- }
- }
-
- if ( ! $id ) {
- return '<!-- Hulu Error: Not a Hulu video. -->';
- }
-
- $query_args = array();
- $query_args['eid'] = esc_attr( $id );
- if ( isset( $start_time ) ) {
- $query_args['st'] = intval( $start_time );
- }
- if ( isset( $end_time ) ) {
- $query_args['et'] = intval( $end_time );
- }
- if ( isset( $thumbnail_frame ) ) {
- $query_args['it'] = 'i' . intval( $thumbnail_frame );
- }
-
- $iframe_url = add_query_arg( $query_args, 'https://www.hulu.com/embed.html' );
- $width = intval( $attr['width'] );
- $height = round( ( $width / 640 ) * 360 );
-
- $html = sprintf(
- '<div class="embed-hulu" style="text-align: center;"><iframe src="%s" width="%s" height="%s" style="border:0;" scrolling="no" webkitAllowFullScreen
-mozallowfullscreen allowfullscreen></iframe></div>',
- esc_url( $iframe_url ),
- esc_attr( $width ),
- esc_attr( $height )
- );
- $html = apply_filters( 'video_embed_html', $html );
-
- return $html;
-}
-
-/**
- * Callback to convert Hulu links in comments into a embed src.
- *
- * @since 4.5.0
- *
- * @param array $matches Array of matches from regex.
- *
- * @return string
- */
-function jetpack_hulu_link_callback( $matches ) {
- $video_id = $matches[4];
-
- // Make up an embed src to pass to the shortcode reversal function.
- $attrs = array(
- 'src' => 'https://www.hulu.com/embed.html?eid=' . esc_attr( $video_id ),
- );
-
- return wpcom_shortcodereverse_huluhelper( $attrs );
-}
-
-/**
- * Convert Hulu links in comments into a Hulu shortcode.
- *
- * @since 4.5.0
- *
- * @param string $content Post content.
- *
- * @return string
- */
-function jetpack_hulu_link( $content ) {
- $content = preg_replace_callback( '!^(http(s)?://)?(www\.)?hulu\.com\/watch\/([0-9]+)$!im', 'jetpack_hulu_link_callback', $content );
-
- return $content;
-}
-
-/**
- * Makes a Hulu shortcode from $attrs and $pattern
- *
- * @since 4.5.0
- *
- * @param array $attrs Shortcode attributes.
- *
- * @return string
- */
-function wpcom_shortcodereverse_huluhelper( $attrs ) {
- $attrs = wpcom_shortcodereverse_parseattr( $attrs );
-
- $src_attributes = array();
- parse_str( wp_parse_url( $attrs['src'], PHP_URL_QUERY ), $src_attributes );
-
- $attrs = array_merge( $attrs, $src_attributes );
-
- // If we don't have an eid, we can't do anything. Just send back the src string.
- if ( ! isset( $attrs['eid'] ) ) {
- return $attrs['src'];
- }
-
- $shortcode = '[hulu id=' . esc_attr( $attrs['eid'] );
-
- if ( $attrs['width'] ) {
- $shortcode .= ' width=' . intval( $attrs['width'] );
- }
-
- if ( $attrs['height'] ) {
- $shortcode .= ' height=' . intval( $attrs['height'] );
- }
-
- if ( $attrs['st'] ) {
- $shortcode .= ' start_time=' . intval( $attrs['st'] );
- }
-
- if ( $attrs['et'] ) {
- $shortcode .= ' end_time=' . intval( $attrs['et'] );
- }
-
- if ( $attrs['it'] ) {
- // the thumbnail frame attribute comes with an i in front of the value, so we've got to remove that.
- $shortcode .= ' thumbnail_frame=' . intval( ltrim( $attrs['it'], 'i' ) );
- }
- $shortcode .= ']';
-
- return $shortcode;
-}
-
-/**
- * Initiates process to convert iframe HTML into a Hulu shortcode.
- *
- * Example:
- * <iframe width="512" height="288" src="http://www.hulu.com/embed.html?eid=nlg_ios3tutcfrhatkiaow&et=20&st=10&it=i11" frameborder="0" scrolling="no" webkitAllowFullScreen mozallowfullscreen allowfullscreen></iframe>
- *
- * Converts to:
- * [hulu id=nlg_ios3tutcfrhatkiaow width=512 height=288 start_time=10 end_time=20 thumbnail_frame=11]
- *
- * @since 4.5.0
- *
- * @param array $attrs Shortcode attributes.
- *
- * @return string
- */
-function wpcom_shortcodereverse_huluembed( $attrs ) {
-
- $shortcode = wpcom_shortcodereverse_huluhelper( $attrs );
-
- if ( '[' === substr( $shortcode, 0, 1 ) ) {
- /** This action is documented in modules/widgets/social-media-icons.php */
- do_action( 'jetpack_bump_stats_extras', 'html_to_shortcode', 'hulu-embed' );
- }
-
- return $shortcode;
-}
-Filter_Embedded_HTML_Objects::register( '#^https?://www.hulu.com/embed.html#i', 'wpcom_shortcodereverse_huluembed', true );
diff --git a/plugins/jetpack/modules/shortcodes/images/collapse.png b/plugins/jetpack/modules/shortcodes/images/collapse.png
deleted file mode 100644
index 921057f1..00000000
--- a/plugins/jetpack/modules/shortcodes/images/collapse.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/shortcodes/images/expand.png b/plugins/jetpack/modules/shortcodes/images/expand.png
deleted file mode 100644
index b1e0c56f..00000000
--- a/plugins/jetpack/modules/shortcodes/images/expand.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/shortcodes/images/slide-nav.png b/plugins/jetpack/modules/shortcodes/images/slide-nav.png
deleted file mode 100644
index 7fa82c4f..00000000
--- a/plugins/jetpack/modules/shortcodes/images/slide-nav.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/shortcodes/img/slideshow-controls-2x.png b/plugins/jetpack/modules/shortcodes/img/slideshow-controls-2x.png
deleted file mode 100644
index 2c76ac05..00000000
--- a/plugins/jetpack/modules/shortcodes/img/slideshow-controls-2x.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/shortcodes/img/slideshow-controls.png b/plugins/jetpack/modules/shortcodes/img/slideshow-controls.png
deleted file mode 100644
index 09ca4871..00000000
--- a/plugins/jetpack/modules/shortcodes/img/slideshow-controls.png
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/shortcodes/img/slideshow-loader.gif b/plugins/jetpack/modules/shortcodes/img/slideshow-loader.gif
deleted file mode 100644
index ce1c594e..00000000
--- a/plugins/jetpack/modules/shortcodes/img/slideshow-loader.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/jetpack/modules/shortcodes/instagram.php b/plugins/jetpack/modules/shortcodes/instagram.php
deleted file mode 100644
index 656703bd..00000000
--- a/plugins/jetpack/modules/shortcodes/instagram.php
+++ /dev/null
@@ -1,243 +0,0 @@
-<?php
-
-
-/**
- * Embed Reversal for Instagram
- *
- * Hooked to pre_kses, converts an embed code from Instagram.com to an oEmbeddable URL.
- *
- * @return string The filtered or the original content.
- **/
-function jetpack_instagram_embed_reversal( $content ) {
- if ( ! is_string( $content ) || false === stripos( $content, 'instagram.com' ) ) {
- return $content;
- }
-
- /*
- Sample embed code:
- <blockquote class="instagram-media" data-instgrm-captioned data-instgrm-version="2" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"><div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding-bottom:55%; padding-top:45%; text-align:center; width:100%;"><div style="position:relative;"><div style=" -webkit-animation:dkaXkpbBxI 1s ease-out infinite; animation:dkaXkpbBxI 1s ease-out infinite; background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-44px; width:44px;"></div><span style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:12px; font-style:normal; font-weight:bold; position:relative; top:15px;">Loading</span></div></div><p style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin:8px 0 0 0; padding:0 4px; word-wrap:break-word;"> Balloons</p><p style=" line-height:32px; margin-bottom:0; margin-top:8px; padding:0; text-align:center;"> <a href="https://instagram.com/p/r9vfPrmjeB/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; text-decoration:none;" target="_top"> View on Instagram</a></p></div><style>@-webkit-keyframes"dkaXkpbBxI"{ 0%{opacity:0.5;} 50%{opacity:1;} 100%{opacity:0.5;} } @keyframes"dkaXkpbBxI"{ 0%{opacity:0.5;} 50%{opacity:1;} 100%{opacity:0.5;} }</style></blockquote>
- <script async defer src="https://platform.instagram.com/en_US/embeds.js"></script>
- */
-
- $regexes = array();
-
- // new style js.
- $regexes[] = '#<blockquote[^>]+?class="instagram-media"[^>].+?>(.+?)</blockquote><script[^>]+?src="(https?:)?//platform\.instagram\.com/(.+?)/embeds\.js"></script>#ix';
-
- // Let's play nice with the visual editor too.
- $regexes[] = '#&lt;blockquote(?:[^&]|&(?!gt;))+?class="instagram-media"(?:[^&]|&(?!gt;)).+?&gt;(.+?)&lt;/blockquote&gt;&lt;script(?:[^&]|&(?!gt;))+?src="(https?:)?//platform\.instagram\.com/(.+?)/embeds\.js"(?:[^&]|&(?!gt;))*+&gt;&lt;/script&gt;#ix';
-
- // old style iframe.
- $regexes[] = '#<iframe[^>]+?src="((?:https?:)?//(?:www\.)?instagram\.com/p/([^"\'/]++)[^"\']*?)"[^>]*+>\s*?</iframe>#i';
-
- // Let's play nice with the visual editor too.
- $regexes[] = '#&lt;iframe(?:[^&]|&(?!gt;))+?src="((?:https?:)?//(?:www\.)instagram\.com/p/([^"\'/]++)[^"\']*?)"(?:[^&]|&(?!gt;))*+&gt;\s*?&lt;/iframe&gt;#i';
-
- foreach ( $regexes as $regex ) {
- if ( ! preg_match_all( $regex, $content, $matches, PREG_SET_ORDER ) ) {
- continue;
- }
-
- foreach ( $matches as $match ) {
- if ( ! preg_match( '#(https?:)?//(?:www\.)?instagr(\.am|am\.com)/p/([^/]*)#i', $match[1], $url_matches ) ) {
- continue;
- }
-
- // Since we support Instagram via oEmbed, we simply leave a link on a line by itself.
- $replace_regex = sprintf( '#\s*%s\s*#', preg_quote( $match[0], '#' ) );
- $url = esc_url( $url_matches[0] );
-
- $content = preg_replace( $replace_regex, sprintf( "\n\n%s\n\n", $url ), $content );
- /** This action is documented in modules/shortcodes/youtube.php */
- do_action( 'jetpack_embed_to_shortcode', 'instagram', $url );
- }
- }
-
- return $content;
-}
-
-add_filter( 'pre_kses', 'jetpack_instagram_embed_reversal' );
-
-/**
- * Instagram's custom Embed provider.
- * We first remove 2 different embed providers, both registered by Core.
- * - The first is the original provider,that only supports images.
- * - The second is tne new provider that replaced the first one in Core when Core added support for videos. https://core.trac.wordpress.org/changeset/44486
- *
- * Once the core embed provider is removed (one or the other, depending on your version of Core), we declare our own.
- */
-wp_oembed_remove_provider( '#https?://(www\.)?instagr(\.am|am\.com)/p/.*#i' );
-wp_oembed_remove_provider( '#https?://(www\.)?instagr(\.am|am\.com)/(p|tv)/.*#i' );
-wp_embed_register_handler(
- 'jetpack_instagram',
- '#http(s?)://(www\.)?instagr(\.am|am\.com)/(p|tv)/([^\/]*)#i',
- 'jetpack_instagram_handler'
-);
-
-/**
- * Handle Instagram embeds (build embed from regex).
- *
- * @param array $matches Array of matches from the regex.
- * @param array $atts The original unmodified attributes.
- * @param string $url The original URL that was matched by the regex.
- */
-function jetpack_instagram_handler( $matches, $atts, $url ) {
- global $content_width;
-
- // keep a copy of the passed-in URL since it's modified below
- $passed_url = $url;
-
- $max_width = 698;
- $min_width = 320;
-
- if ( is_feed() ) {
- // Instagram offers direct links to images, but not to videos.
- if ( 'p' === $matches[1] ) {
- $media_url = sprintf( 'http://instagr.am/p/%1$s/media/?size=l', $matches[2] );
- return sprintf(
- '<a href="%1$s" title="%2$s" target="_blank"><img src="%3$s" alt="%4$s" /></a>',
- esc_url( $url ),
- esc_attr__( 'View on Instagram', 'jetpack' ),
- esc_url( $media_url ),
- esc_html__( 'Instagram Photo', 'jetpack' )
- );
- } elseif ( 'tv' === $matches[1] ) {
- return sprintf(
- '<a href="%1$s" title="%2$s" target="_blank">%3$s</a>',
- esc_url( $url ),
- esc_attr__( 'View on Instagram', 'jetpack' ),
- esc_html__( 'Instagram Video', 'jetpack' )
- );
- }
- }
-
- $atts = shortcode_atts(
- array(
- 'width' => isset( $content_width ) ? $content_width : $max_width,
- 'hidecaption' => false,
- ),
- $atts
- );
-
- $atts['width'] = absint( $atts['width'] );
- if ( $atts['width'] > $max_width ) {
- $atts['width'] = $max_width;
- } elseif ( $atts['width'] < $min_width ) {
- $atts['width'] = $min_width;
- }
-
- // remove the modal param from the URL
- $url = remove_query_arg( 'modal', $url );
-
- // force .com instead of .am for https support
- $url = str_replace( 'instagr.am', 'instagram.com', $url );
-
- // The oembed endpoint expects HTTP, but HTTP requests 301 to HTTPS
- $instagram_http_url = str_replace( 'https://', 'http://', $url );
- $instagram_https_url = str_replace( 'http://', 'https://', $url );
-
- $url_args = array(
- 'url' => $instagram_http_url,
- 'maxwidth' => $atts['width'],
- );
-
- if ( $atts['hidecaption'] ) {
- $url_args['hidecaption'] = 'true';
- }
-
- $url = esc_url_raw( add_query_arg( $url_args, 'https://api.instagram.com/oembed/' ) );
-
- /**
- * Filter Object Caching for response from Instagram.
- *
- * Allow enabling of object caching for the response sent by Instagram when querying for Instagram image HTML.
- *
- * @module shortcodes
- *
- * @since 3.3.0
- *
- * @param bool false Object caching is off by default.
- * @param array $matches Array of Instagram URLs found in the post.
- * @param array $atts Instagram Shortcode attributes.
- * @param string $passed_url Instagram API URL.
- */
- $response_body_use_cache = apply_filters( 'instagram_cache_oembed_api_response_body', false, $matches, $atts, $passed_url );
- $response_body = false;
- if ( $response_body_use_cache ) {
- $cache_key = 'oembed_response_body_' . md5( $url );
- $response_body = wp_cache_get( $cache_key, 'instagram_embeds' );
- }
-
- if ( ! $response_body ) {
- // Not using cache (default case) or cache miss
- $instagram_response = wp_remote_get( $url, array( 'redirection' => 0 ) );
- if ( is_wp_error( $instagram_response ) || 200 != $instagram_response['response']['code'] || empty( $instagram_response['body'] ) ) {
- return '<!-- instagram error: invalid instagram resource -->';
- }
-
- $response_body = json_decode( $instagram_response['body'] );
- if ( $response_body_use_cache ) {
- // if caching it is short-lived since this is a "Cache-Control: no-cache" resource
- wp_cache_set( $cache_key, $response_body, 'instagram_embeds', HOUR_IN_SECONDS + mt_rand( 0, HOUR_IN_SECONDS ) );
- }
- }
-
- if ( ! empty( $response_body->html ) ) {
- wp_enqueue_script(
- 'jetpack-instagram-embed',
- Jetpack::get_file_url_for_environment( '_inc/build/shortcodes/js/instagram.min.js', 'modules/shortcodes/js/instagram.js' ),
- array( 'jquery' ),
- false,
- true
- );
- // there's a script in the response, which we strip on purpose since it's added by this ^ script
- $ig_embed = preg_replace( '@<(script)[^>]*?>.*?</\\1>@si', '', $response_body->html );
-
- return $ig_embed;
- }
-
- return '<!-- instagram error: no embed found -->';
-}
-
-/**
- * Handle an alternate Instagram URL format, where the username is also part of the URL.
- * We do not actually need that username for the embed.
- */
-wp_embed_register_handler(
- 'jetpack_instagram_alternate_format',
- '#https?://(?:www\.)?instagr(?:\.am|am\.com)/(?:[^/]*)/(p|tv)/([^\/]*)#i',
- 'jetpack_instagram_alternate_format_handler'
-);
-
-/**
- * Handle alternate Instagram embeds (build embed from regex).
- *
- * @param array $matches Array of matches from the regex.
- * @param array $atts The original unmodified attributes.
- * @param string $url The original URL that was matched by the regex.
- */
-function jetpack_instagram_alternate_format_handler( $matches, $atts, $url ) {
- // Replace URL saved by original Instagram URL (no username).
- $matches[0] = esc_url_raw(
- sprintf(
- 'https://www.instagram.com/%1$s/%2$s',
- $matches[1],
- $matches[2]
- )
- );
-
- return jetpack_instagram_handler( $matches, $atts, $url );
-}
-
-// [instagram url="http://instagram.com/p/PSbF9sEIGP/"]
-// [instagram url="http://instagram.com/p/PSbF9sEIGP/" width="300"]
-add_shortcode( 'instagram', 'jetpack_shortcode_instagram' );
-function jetpack_shortcode_instagram( $atts ) {
- global $wp_embed;
-
- if ( empty( $atts['url'] ) ) {
- return '';
- }
-
- return $wp_embed->shortcode( $atts, $atts['url'] );
-}
diff --git a/plugins/jetpack/modules/shortcodes/js/brightcove.js b/plugins/jetpack/modules/shortcodes/js/brightcove.js
deleted file mode 100644
index c4f8ba50..00000000
--- a/plugins/jetpack/modules/shortcodes/js/brightcove.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/* global brightcove, brightcoveData */
-(function($){
- var script = document.createElement('script'),
- tld = 'co.jp' === brightcoveData.tld ? 'co.jp' : 'com',
- timer = false;
-
- // Load Brightcove script
- script.src = 'https://sadmin.brightcove.' + tld + '/js/BrightcoveExperiences.js';
- script.type = 'text/javascript';
- script.language = 'JavaScript';
- document.head.appendChild( script );
-
- // Start detection for Brightcove script loading in its object
- try_brightcove();
-
- // Detect if Brightcove script has loaded and bind some events once loaded
- function try_brightcove() {
- clearTimeout( timer );
-
- if ( 'object' === typeof brightcove ) {
- $( document ).ready( brightcove.createExperiences );
- $( 'body' ).on( 'post-load', brightcove.createExperiences );
-
- brightcove.createExperiences();
- } else {
- timer = setTimeout( try_brightcove, 100 );
- }
- }
-})(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/modules/shortcodes/js/gist.js b/plugins/jetpack/modules/shortcodes/js/gist.js
deleted file mode 100644
index 2714add4..00000000
--- a/plugins/jetpack/modules/shortcodes/js/gist.js
+++ /dev/null
@@ -1,28 +0,0 @@
-;(function( $, undefined ) {
- var gistStylesheetLoaded = false,
- gistEmbed = function() {
- $( '.gist-oembed' ).each( function( i, el ) {
- var url = 'https://gist.github.com/' + $( el ).data( 'gist' );
-
- $.ajax( {
- url: url,
- dataType: 'jsonp'
- } ).done( function( response ) {
- $( el ).replaceWith( response.div );
-
- if ( ! gistStylesheetLoaded ) {
- var stylesheet = '<link rel="stylesheet" href="' +
- response.stylesheet +
- '" type="text/css" />';
-
- $( 'head' ).append( stylesheet );
-
- gistStylesheetLoaded = true;
- }
- } );
- } );
- };
-
- $( document ).ready( gistEmbed );
- $( 'body' ).on( 'post-load', gistEmbed );
-})( jQuery );
diff --git a/plugins/jetpack/modules/shortcodes/js/instagram.js b/plugins/jetpack/modules/shortcodes/js/instagram.js
deleted file mode 100644
index dfcc09ea..00000000
--- a/plugins/jetpack/modules/shortcodes/js/instagram.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/* global window */
-
-(function() {
- var instagramEmbed = function() {
- if ( 'undefined' !== typeof window.instgrm && window.instgrm.Embeds && 'function' === typeof window.instgrm.Embeds.process ) {
- window.instgrm.Embeds.process();
- } else {
- var s = document.createElement( 'script' );
- s.async = true;
- s.defer = true;
- s.src = '//platform.instagram.com/en_US/embeds.js';
- document.getElementsByTagName( 'body' )[0].appendChild( s );
- }
- };
-
- if ( 'undefined' !== typeof jQuery && 'undefined' !== typeof infiniteScroll ) {
- jQuery( document.body ).on( 'post-load', instagramEmbed );
- }
-
- instagramEmbed();
-})(); \ No newline at end of file
diff --git a/plugins/jetpack/modules/shortcodes/js/jmpress.js b/plugins/jetpack/modules/shortcodes/js/jmpress.js
deleted file mode 100644
index 385bb2a7..00000000
--- a/plugins/jetpack/modules/shortcodes/js/jmpress.js
+++ /dev/null
@@ -1,2710 +0,0 @@
-/**
- * jmpress.js v0.4.5
- * http://jmpressjs.github.com/jmpress.js
- *
- * A jQuery plugin to build a website on the infinite canvas.
- *
- * Copyright 2013 Kyle Robinson Young @shama & Tobias Koppers @sokra
- * Licensed MIT
- * http://www.opensource.org/licenses/mit-license.php
- *
- * Based on the foundation laid by Bartek Szopka @bartaz
- *//*
- * core.js
- * The core of jmpress.js
- */
-(function( $, document, window, undefined ) {
-
- 'use strict';
-
- /**
- * Set supported prefixes
- *
- * @access protected
- * @return Function to get prefixed property
- */
- var pfx = (function () {
- var style = document.createElement('dummy').style,
- prefixes = 'Webkit Moz O ms Khtml'.split(' '),
- memory = {};
- return function ( prop ) {
- if ( typeof memory[ prop ] === "undefined" ) {
- var ucProp = prop.charAt(0).toUpperCase() + prop.substr(1),
- props = (prop + ' ' + prefixes.join(ucProp + ' ') + ucProp).split(' ');
- memory[ prop ] = null;
- for ( var i in props ) {
- if ( style[ props[i] ] !== undefined ) {
- memory[ prop ] = props[i];
- break;
- }
- }
- }
- return memory[ prop ];
- };
- }());
-
- /**
- * map ex. "WebkitTransform" to "-webkit-transform"
- */
- function mapProperty( name ) {
- if(!name) {
- return;
- }
- var index = 1 + name.substr(1).search(/[A-Z]/);
- var prefix = name.substr(0, index).toLowerCase();
- var postfix = name.substr(index).toLowerCase();
- return "-" + prefix + "-" + postfix;
- }
- function addComma( attribute ) {
- if(!attribute) {
- return "";
- }
- return attribute + ",";
- }
- /**
- * Return an jquery object only if it's not empty
- */
- function ifNotEmpty(el) {
- if(el.length > 0) {
- return el;
- }
- return null;
- }
-
- /**
- * Default Settings
- */
- var defaults = {
- /* CLASSES */
- stepSelector: '.step'
- ,containerClass: ''
- ,canvasClass: ''
- ,areaClass: ''
- ,notSupportedClass: 'not-supported'
-
- /* CONFIG */
- ,fullscreen: true
-
- /* ANIMATION */
- ,animation: {
- transformOrigin: 'top left'
- ,transitionProperty: addComma(mapProperty(pfx('transform'))) + addComma(mapProperty(pfx('perspective'))) + 'opacity'
- ,transitionDuration: '1s'
- ,transitionDelay: '500ms'
- ,transitionTimingFunction: 'ease-in-out'
- ,transformStyle: "preserve-3d"
- }
- ,transitionDuration: 1500
- };
- var callbacks = {
- 'beforeChange': 1
- ,'beforeInitStep': 1
- ,'initStep': 1
- ,'beforeInit': 1
- ,'afterInit': 1
- ,'beforeDeinit': 1
- ,'afterDeinit': 1
- ,'applyStep': 1
- ,'unapplyStep': 1
- ,'setInactive': 1
- ,'beforeActive': 1
- ,'setActive': 1
- ,'selectInitialStep': 1
- ,'selectPrev': 1
- ,'selectNext': 1
- ,'selectHome': 1
- ,'selectEnd': 1
- ,'idle': 1
- ,'applyTarget': 1
- };
- for(var callbackName in callbacks) {
- defaults[callbackName] = [];
- }
-
-
- /**
- * Initialize jmpress
- */
- function init( args ) {
- args = $.extend(true, {}, args || {});
-
- // accept functions and arrays of functions as callbacks
- var callbackArgs = {};
- var callbackName = null;
- for (callbackName in callbacks) {
- callbackArgs[callbackName] = $.isFunction( args[callbackName] ) ?
- [ args[callbackName] ] :
- args[callbackName];
- args[callbackName] = [];
- }
-
- // MERGE SETTINGS
- var settings = $.extend(true, {}, defaults, args);
-
- for (callbackName in callbacks) {
- if (callbackArgs[callbackName]) {
- Array.prototype.push.apply(settings[callbackName], callbackArgs[callbackName]);
- }
- }
-
- /*** MEMBER VARS ***/
-
- var jmpress = $( this )
- ,container = null
- ,area = null
- ,oldStyle = {
- container: ""
- ,area: ""
- }
- ,canvas = null
- ,current = null
- ,active = false
- ,activeSubstep = null
- ,activeDelegated = false;
-
-
- /*** MEMBER FUNCTIONS ***/
- // functions have to be called with this
-
- /**
- * Init a single step
- *
- * @param element the element of the step
- * @param idx number of step
- */
- function doStepInit( element, idx ) {
- var data = dataset( element );
- var step = {
- oldStyle: $(element).attr("style") || ""
- };
-
- var callbackData = {
- data: data
- ,stepData: step
- };
- callCallback.call(this, 'beforeInitStep', $(element), callbackData);
- step.delegate = data.delegate;
- callCallback.call(this, 'initStep', $(element), callbackData);
-
- $(element).data('stepData', step);
-
- if ( !$(element).attr('id') ) {
- $(element).attr('id', 'step-' + (idx + 1));
- }
-
- callCallback.call(this, 'applyStep', $(element), callbackData);
- }
- /**
- * Deinit a single step
- *
- * @param element the element of the step
- */
- function doStepDeinit( element ) {
- var stepData = $(element).data('stepData');
-
- $(element).attr("style", stepData.oldStyle);
-
- callCallback.call(this, 'unapplyStep', $(element), {
- stepData: stepData
- });
- }
- /**
- * Reapplies stepData to the element
- *
- * @param element
- */
- function doStepReapply( element ) {
- callCallback.call(this, 'unapplyStep', $(element), {
- stepData: element.data("stepData")
- });
-
- callCallback.call(this, 'applyStep', $(element), {
- stepData: element.data("stepData")
- });
- }
- /**
- * Completly deinit jmpress
- *
- */
- function deinit() {
- if ( active ) {
- callCallback.call(this, 'setInactive', active, {
- stepData: $(active).data('stepData')
- ,reason: "deinit"
- } );
- }
- if (current.jmpressClass) {
- $(jmpress).removeClass(current.jmpressClass);
- }
-
- callCallback.call(this, 'beforeDeinit', $(this), {});
-
- $(settings.stepSelector, jmpress).each(function( idx ) {
- doStepDeinit.call(jmpress, this );
- });
-
- container.attr("style", oldStyle.container);
- if(settings.fullscreen) {
- $("html").attr("style", "");
- }
- area.attr("style", oldStyle.area);
- $(canvas).children().each(function() {
- jmpress.append( $( this ) );
- });
- if( settings.fullscreen ) {
- canvas.remove();
- } else {
- canvas.remove();
- area.remove();
- }
-
- callCallback.call(this, 'afterDeinit', $(this), {});
-
- $(jmpress).data("jmpressmethods", false);
- }
- /**
- * Call a callback
- *
- * @param callbackName String callback which should be called
- * @param element some arguments to the callback
- * @param eventData
- */
- function callCallback( callbackName, element, eventData ) {
- eventData.settings = settings;
- eventData.current = current;
- eventData.container = container;
- eventData.parents = element ? getStepParents(element) : null;
- eventData.current = current;
- eventData.jmpress = this;
- var result = {};
- $.each( settings[callbackName], function(idx, callback) {
- result.value = callback.call( jmpress, element, eventData ) || result.value;
- });
- return result.value;
- }
- /**
- *
- */
- function getStepParents( el ) {
- return $(el).parentsUntil(jmpress).not(jmpress).filter(settings.stepSelector);
- }
- /**
- * Reselect the active step
- *
- * @param String type reason of reselecting step
- */
- function reselect( type ) {
- return select( { step: active, substep: activeSubstep }, type);
- }
- /**
- * Select a given step
- *
- * @param el element to select
- * @param type reason of changing step
- * @return Object element selected
- */
- function select( el, type ) {
- var substep;
- if ( $.isPlainObject( el ) ) {
- substep = el.substep;
- el = el.step;
- }
- if ( typeof el === 'string') {
- el = jmpress.find( el ).first();
- }
- if ( !el || !$(el).data('stepData') ) {
- return false;
- }
-
- scrollFix.call(this);
-
- var step = $(el).data('stepData');
-
- var cancelSelect = false;
- callCallback.call(this, "beforeChange", el, {
- stepData: step
- ,reason: type
- ,cancel: function() {
- cancelSelect = true;
- }
- });
- if (cancelSelect) {
- return undefined;
- }
-
- var target = {};
-
- var delegated = el;
- if($(el).data("stepData").delegate) {
- delegated = ifNotEmpty($(el).parentsUntil(jmpress).filter(settings.stepSelector).filter(step.delegate)) ||
- ifNotEmpty($(el).near(step.delegate)) ||
- ifNotEmpty($(el).near(step.delegate, true)) ||
- ifNotEmpty($(step.delegate, jmpress));
- if(delegated) {
- step = delegated.data("stepData");
- } else {
- // Do not delegate if expression not found
- delegated = el;
- }
- }
- if ( activeDelegated ) {
- callCallback.call(this, 'setInactive', activeDelegated, {
- stepData: $(activeDelegated).data('stepData')
- ,delegatedFrom: active
- ,reason: type
- ,target: target
- ,nextStep: delegated
- ,nextSubstep: substep
- ,nextStepData: step
- } );
- }
- var callbackData = {
- stepData: step
- ,delegatedFrom: el
- ,reason: type
- ,target: target
- ,substep: substep
- ,prevStep: activeDelegated
- ,prevSubstep: activeSubstep
- ,prevStepData: activeDelegated && $(activeDelegated).data('stepData')
- };
- callCallback.call(this, 'beforeActive', delegated, callbackData);
- callCallback.call(this, 'setActive', delegated, callbackData);
-
- // Set on step class on root element
- if (current.jmpressClass) {
- $(jmpress).removeClass(current.jmpressClass);
- }
- $(jmpress).addClass(current.jmpressClass = 'step-' + $(delegated).attr('id') );
- if (current.jmpressDelegatedClass) {
- $(jmpress).removeClass(current.jmpressDelegatedClass);
- }
- $(jmpress).addClass(current.jmpressDelegatedClass = 'delegating-step-' + $(el).attr('id') );
-
- callCallback.call(this, "applyTarget", delegated, $.extend({
- canvas: canvas
- ,area: area
- ,beforeActive: activeDelegated
- }, callbackData));
-
- active = el;
- activeSubstep = callbackData.substep;
- activeDelegated = delegated;
-
- if(current.idleTimeout) {
- clearTimeout(current.idleTimeout);
- }
- current.idleTimeout = setTimeout(function() {
- callCallback.call(this, 'idle', delegated, callbackData);
- }, Math.max(1, settings.transitionDuration - 100));
-
- return delegated;
- }
- /**
- * This should fix ANY kind of buggy scrolling
- */
- function scrollFix() {
- (function fix() {
- if ($(container)[0].tagName === "BODY") {
- try {
- window.scrollTo(0, 0);
- } catch(e) {}
- }
- $(container).scrollTop(0);
- $(container).scrollLeft(0);
- function check() {
- if ($(container).scrollTop() !== 0 ||
- $(container).scrollLeft() !== 0) {
- fix();
- }
- }
- setTimeout(check, 1);
- setTimeout(check, 10);
- setTimeout(check, 100);
- setTimeout(check, 200);
- setTimeout(check, 400);
- }());
- }
- /**
- * Alias for select
- */
- function goTo( el ) {
- return select.call(this, el, "jump" );
- }
- /**
- * Goto Next Slide
- *
- * @return Object newly active slide
- */
- function next() {
- return select.call(this, callCallback.call(this, 'selectNext', active, {
- stepData: $(active).data('stepData')
- ,substep: activeSubstep
- }), "next" );
- }
- /**
- * Goto Previous Slide
- *
- * @return Object newly active slide
- */
- function prev() {
- return select.call(this, callCallback.call(this, 'selectPrev', active, {
- stepData: $(active).data('stepData')
- ,substep: activeSubstep
- }), "prev" );
- }
- /**
- * Goto First Slide
- *
- * @return Object newly active slide
- */
- function home() {
- return select.call(this, callCallback.call(this, 'selectHome', active, {
- stepData: $(active).data('stepData')
- }), "home" );
- }
- /**
- * Goto Last Slide
- *
- * @return Object newly active slide
- */
- function end() {
- return select.call(this, callCallback.call(this, 'selectEnd', active, {
- stepData: $(active).data('stepData')
- }), "end" );
- }
- /**
- * Manipulate the canvas
- *
- * @param props
- * @return Object
- */
- function canvasMod( props ) {
- css(canvas, props || {});
- return $(canvas);
- }
- /**
- * Return current step
- *
- * @return Object
- */
- function getActive() {
- return activeDelegated && $(activeDelegated);
- }
- /**
- * fire a callback
- *
- * @param callbackName
- * @param element
- * @param eventData
- * @return void
- */
- function fire( callbackName, element, eventData ) {
- if( !callbacks[callbackName] ) {
- $.error( "callback " + callbackName + " is not registered." );
- } else {
- return callCallback.call(this, callbackName, element, eventData);
- }
- }
-
- /**
- * PUBLIC METHODS LIST
- */
- jmpress.data("jmpressmethods", {
- select: select
- ,reselect: reselect
- ,scrollFix: scrollFix
- ,goTo: goTo
- ,next: next
- ,prev: prev
- ,home: home
- ,end: end
- ,canvas: canvasMod
- ,container: function() { return container; }
- ,settings: function() { return settings; }
- ,active: getActive
- ,current: function() { return current; }
- ,fire: fire
- ,init: function(step) {
- doStepInit.call(this, $(step), current.nextIdNumber++);
- }
- ,deinit: function(step) {
- if(step) {
- doStepDeinit.call(this, $(step));
- } else {
- deinit.call(this);
- }
- }
- ,reapply: doStepReapply
- });
-
- /**
- * Check for support
- * This will be removed in near future, when support is coming
- *
- * @access protected
- * @return void
- */
- function checkSupport() {
- var ua = navigator.userAgent.toLowerCase();
- return (ua.search(/(iphone)|(ipod)|(android)/) === -1) || (ua.search(/(chrome)/) !== -1);
- }
-
- // BEGIN INIT
-
- // CHECK FOR SUPPORT
- if (checkSupport() === false) {
- if (settings.notSupportedClass) {
- jmpress.addClass(settings.notSupportedClass);
- }
- return;
- } else {
- if (settings.notSupportedClass) {
- jmpress.removeClass(settings.notSupportedClass);
- }
- }
-
- // grabbing all steps
- var steps = $(settings.stepSelector, jmpress);
-
- // GERNERAL INIT OF FRAME
- container = jmpress;
- area = $('<div />');
- canvas = $('<div />');
- $(jmpress).children().filter(steps).each(function() {
- canvas.append( $( this ) );
- });
- if(settings.fullscreen) {
- container = $('body');
- $("html").css({
- overflow: 'hidden'
- });
- area = jmpress;
- }
- oldStyle.area = area.attr("style") || "";
- oldStyle.container = container.attr("style") || "";
- if(settings.fullscreen) {
- container.css({
- height: '100%'
- });
- jmpress.append( canvas );
- } else {
- container.css({
- position: "relative"
- });
- area.append( canvas );
- jmpress.append( area );
- }
-
- $(container).addClass(settings.containerClass);
- $(area).addClass(settings.areaClass);
- $(canvas).addClass(settings.canvasClass);
-
- document.documentElement.style.height = "100%";
- container.css({
- overflow: 'hidden'
- });
-
- var props = {
- position: "absolute"
- ,transitionDuration: '0s'
- };
- props = $.extend({}, settings.animation, props);
- css(area, props);
- css(area, {
- top: '50%'
- ,left: '50%'
- ,perspective: '1000px'
- });
- css(canvas, props);
-
- current = {};
-
- callCallback.call(this, 'beforeInit', null, {});
-
- // INITIALIZE EACH STEP
- steps.each(function( idx ) {
- doStepInit.call(jmpress, this, idx );
- });
- current.nextIdNumber = steps.length;
-
- callCallback.call(this, 'afterInit', null, {});
-
- // START
- select.call(this, callCallback.call(this, 'selectInitialStep', "init", {}) );
-
- if (settings.initClass) {
- $(steps).removeClass(settings.initClass);
- }
- }
- /**
- * Return default settings
- *
- * @return Object
- */
- function getDefaults() {
- return defaults;
- }
- /**
- * Register a callback or a jmpress function
- *
- * @access public
- * @param name String the name of the callback or function
- * @param func Function? the function to be added
- */
- function register(name, func) {
- if( $.isFunction(func) ) {
- if( methods[name] ) {
- $.error( "function " + name + " is already registered." );
- } else {
- methods[name] = func;
- }
- } else {
- if( callbacks[name] ) {
- $.error( "callback " + name + " is already registered." );
- } else {
- callbacks[name] = 1;
- defaults[name] = [];
- }
- }
- }
- /**
- * Set CSS on element w/ prefixes
- *
- * @return Object element which properties were set
- *
- * TODO: Consider bypassing pfx and blindly set as jQuery
- * already checks for support
- */
- function css( el, props ) {
- var key, pkey, cssObj = {};
- for ( key in props ) {
- if ( props.hasOwnProperty(key) ) {
- pkey = pfx(key);
- if ( pkey !== null ) {
- cssObj[pkey] = props[key];
- }
- }
- }
- $(el).css(cssObj);
- return el;
- }
- /**
- * Return dataset for element
- *
- * @param el element
- * @return Object
- */
- function dataset( el ) {
- if ( $(el)[0].dataset ) {
- return $.extend({}, $(el)[0].dataset);
- }
- function toCamelcase( str ) {
- str = str.split( '-' );
- for( var i = 1; i < str.length; i++ ) {
- str[i] = str[i].substr(0, 1).toUpperCase() + str[i].substr(1);
- }
- return str.join( '' );
- }
- var returnDataset = {};
- var attrs = $(el)[0].attributes;
- $.each(attrs, function ( idx, attr ) {
- if ( attr.nodeName.substr(0, 5) === "data-" ) {
- returnDataset[ toCamelcase(attr.nodeName.substr(5)) ] = attr.nodeValue;
- }
- });
- return returnDataset;
- }
- /**
- * Returns true, if jmpress is initialized
- *
- * @return bool
- */
- function initialized() {
- return !!$(this).data("jmpressmethods");
- }
-
-
- /**
- * PUBLIC STATIC METHODS LIST
- */
- var methods = {
- init: init
- ,initialized: initialized
- ,deinit: function() {}
- ,css: css
- ,pfx: pfx
- ,defaults: getDefaults
- ,register: register
- ,dataset: dataset
- };
-
- /**
- * $.jmpress()
- */
- $.fn.jmpress = function( method ) {
- function f() {
- var jmpressmethods = $(this).data("jmpressmethods");
- if ( jmpressmethods && jmpressmethods[method] ) {
- return jmpressmethods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
- } else if ( methods[method] ) {
- return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
- } else if ( callbacks[method] && jmpressmethods ) {
- var settings = jmpressmethods.settings();
- var func = Array.prototype.slice.call( arguments, 1 )[0];
- if ($.isFunction( func )) {
- settings[method] = settings[method] || [];
- settings[method].push(func);
- }
- } else if ( typeof method === 'object' || ! method ) {
- return init.apply( this, arguments );
- } else {
- $.error( 'Method ' + method + ' does not exist on jQuery.jmpress' );
- }
- // to allow chaining
- return this;
- }
- var args = arguments;
- var result;
- $(this).each(function(idx, element) {
- result = f.apply(element, args);
- });
- return result;
- };
- $.extend({
- jmpress: function( method ) {
- if ( methods[method] ) {
- return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
- } else if ( callbacks[method] ) {
- // plugin interface
- var func = Array.prototype.slice.call( arguments, 1 )[0];
- if ($.isFunction( func )) {
- defaults[method].push(func);
- } else {
- $.error( 'Second parameter should be a function: $.jmpress( callbackName, callbackFunction )' );
- }
- } else {
- $.error( 'Method ' + method + ' does not exist on jQuery.jmpress' );
- }
- }
- });
-
-}(jQuery, document, window));
-
-/*
- * near.js
- * Find steps near each other
- */
-(function( $, document, window, undefined ) {
-
- 'use strict';
-
- // add near( selector, backwards = false) to jquery
-
-
- function checkAndGo( elements, func, selector, backwards ) {
- var next;
- elements.each(function(idx, element) {
- if(backwards) {
- next = func(element, selector, backwards);
- if (next) {
- return false;
- }
- }
- if( $(element).is(selector) ) {
- next = element;
- return false;
- }
- if(!backwards) {
- next = func(element, selector, backwards);
- if (next) {
- return false;
- }
- }
- });
- return next;
- }
- function findNextInChildren(item, selector, backwards) {
- var children = $(item).children();
- if(backwards) {
- children = $(children.get().reverse());
- }
- return checkAndGo( children, findNextInChildren, selector, backwards );
- }
- function findNextInSiblings(item, selector, backwards) {
- return checkAndGo(
- $(item)[backwards ? "prevAll" : "nextAll"](),
- findNextInChildren, selector, backwards );
- }
- function findNextInParents(item, selector, backwards) {
- var next;
- var parents = $(item).parents();
- parents = $(parents.get());
- $.each(parents.get(), function(idx, element) {
- if( backwards && $(element).is(selector) ) {
- next = element;
- return false;
- }
- next = findNextInSiblings(element, selector, backwards);
- if(next) {
- return false;
- }
- });
- return next;
- }
-
- $.fn.near = function( selector, backwards ) {
- var array = [];
- $(this).each(function(idx, element) {
- var near = (backwards ?
- false :
- findNextInChildren( element, selector, backwards )) ||
- findNextInSiblings( element, selector, backwards ) ||
- findNextInParents( element, selector, backwards );
- if( near ) {
- array.push(near);
- }
- });
- return $(array);
- };
-}(jQuery, document, window));
-/*
- * transform.js
- * The engine that powers the transforms or falls back to other methods
- */
-(function( $, document, window, undefined ) {
-
- 'use strict';
-
- /* FUNCTIONS */
- function toCssNumber(number) {
- return (Math.round(10000*number)/10000)+"";
- }
-
- /**
- * 3D and 2D engines
- */
- var engines = {
- 3: {
- transform: function( el, data ) {
- var transform = 'translate(-50%,-50%)';
- $.each(data, function(idx, item) {
- var coord = ["X", "Y", "Z"];
- var i;
- if(item[0] === "translate") { // ["translate", x, y, z]
- transform += " translate3d(" + toCssNumber(item[1] || 0) + "px," + toCssNumber(item[2] || 0) + "px," + toCssNumber(item[3] || 0) + "px)";
- } else if(item[0] === "rotate") {
- var order = item[4] ? [1, 2, 3] : [3, 2, 1];
- for(i = 0; i < 3; i++) {
- transform += " rotate" + coord[order[i]-1] + "(" + toCssNumber(item[order[i]] || 0) + "deg)";
- }
- } else if(item[0] === "scale") {
- for(i = 0; i < 3; i++) {
- transform += " scale" + coord[i] + "(" + toCssNumber(item[i+1] || 1) + ")";
- }
- }
- });
- $.jmpress("css", el, $.extend({}, { transform: transform }));
- }
- }
- ,2: {
- transform: function( el, data ) {
- var transform = 'translate(-50%,-50%)';
- $.each(data, function(idx, item) {
- var coord = ["X", "Y"];
- if(item[0] === "translate") { // ["translate", x, y, z]
- transform += " translate(" + toCssNumber(item[1] || 0) + "px," + toCssNumber(item[2] || 0) + "px)";
- } else if(item[0] === "rotate") {
- transform += " rotate(" + toCssNumber(item[3] || 0) + "deg)";
- } else if(item[0] === "scale") {
- for(var i = 0; i < 2; i++) {
- transform += " scale" + coord[i] + "(" + toCssNumber(item[i+1] || 1) + ")";
- }
- }
- });
- $.jmpress("css", el, $.extend({}, { transform: transform }));
- }
- }
- ,1: {
- // CHECK IF SUPPORT IS REALLY NEEDED?
- // this not even work without scaling...
- // it may better to display the normal view
- transform: function( el, data ) {
- var anitarget = { top: 0, left: 0 };
- $.each(data, function(idx, item) {
- var coord = ["X", "Y"];
- if(item[0] === "translate") { // ["translate", x, y, z]
- anitarget.left = Math.round(item[1] || 0) + "px";
- anitarget.top = Math.round(item[2] || 0) + "px";
- }
- });
- el.animate(anitarget, 1000); // TODO: Use animation duration
- }
- }
- };
-
- /**
- * Engine to power cross-browser translate, scale and rotate.
- */
- var engine = (function() {
- if ($.jmpress("pfx", "perspective")) {
- return engines[3];
- } else if ($.jmpress("pfx", "transform")) {
- return engines[2];
- } else {
- // CHECK IF SUPPORT IS REALLY NEEDED?
- return engines[1];
- }
- }());
-
- $.jmpress("defaults").reasonableAnimation = {};
- $.jmpress("initStep", function( step, eventData ) {
- var data = eventData.data;
- var stepData = eventData.stepData;
- var pf = parseFloat;
- $.extend(stepData, {
- x: pf(data.x) || 0
- ,y: pf(data.y) || 0
- ,z: pf(data.z) || 0
- ,r: pf(data.r) || 0
- ,phi: pf(data.phi) || 0
- ,rotate: pf(data.rotate) || 0
- ,rotateX: pf(data.rotateX) || 0
- ,rotateY: pf(data.rotateY) || 0
- ,rotateZ: pf(data.rotateZ) || 0
- ,revertRotate: false
- ,scale: pf(data.scale) || 1
- ,scaleX: pf(data.scaleX) || false
- ,scaleY: pf(data.scaleY) || false
- ,scaleZ: pf(data.scaleZ) || 1
- });
- });
- $.jmpress("afterInit", function( nil, eventData ) {
- var stepSelector = eventData.settings.stepSelector,
- current = eventData.current;
- current.perspectiveScale = 1;
- current.maxNestedDepth = 0;
- var nestedSteps = $(eventData.jmpress).find(stepSelector).children(stepSelector);
- while(nestedSteps.length) {
- current.maxNestedDepth++;
- nestedSteps = nestedSteps.children(stepSelector);
- }
- });
- $.jmpress("applyStep", function( step, eventData ) {
- $.jmpress("css", $(step), {
- position: "absolute"
- ,transformStyle: "preserve-3d"
- });
- if ( eventData.parents.length > 0 ) {
- $.jmpress("css", $(step), {
- top: "50%"
- ,left: "50%"
- });
- }
- var sd = eventData.stepData;
- var transform = [
- ["translate",
- sd.x || (sd.r * Math.sin(sd.phi*Math.PI/180)),
- sd.y || (-sd.r * Math.cos(sd.phi*Math.PI/180)),
- sd.z],
- ["rotate",
- sd.rotateX,
- sd.rotateY,
- sd.rotateZ || sd.rotate,
- true],
- ["scale",
- sd.scaleX || sd.scale,
- sd.scaleY || sd.scale,
- sd.scaleZ || sd.scale]
- ];
- engine.transform( step, transform );
- });
- $.jmpress("setActive", function( element, eventData ) {
- var target = eventData.target;
- var step = eventData.stepData;
- var tf = target.transform = [];
- target.perspectiveScale = 1;
-
- for(var i = eventData.current.maxNestedDepth; i > (eventData.parents.length || 0); i--) {
- tf.push(["scale"], ["rotate"], ["translate"]);
- }
-
- tf.push(["scale",
- 1 / (step.scaleX || step.scale),
- 1 / (step.scaleY || step.scale),
- 1 / (step.scaleZ)]);
- tf.push(["rotate",
- -step.rotateX,
- -step.rotateY,
- -(step.rotateZ || step.rotate)]);
- tf.push(["translate",
- -(step.x || (step.r * Math.sin(step.phi*Math.PI/180))),
- -(step.y || (-step.r * Math.cos(step.phi*Math.PI/180))),
- -step.z]);
- target.perspectiveScale *= (step.scaleX || step.scale);
-
- $.each(eventData.parents, function(idx, element) {
- var step = $(element).data("stepData");
- tf.push(["scale",
- 1 / (step.scaleX || step.scale),
- 1 / (step.scaleY || step.scale),
- 1 / (step.scaleZ)]);
- tf.push(["rotate",
- -step.rotateX,
- -step.rotateY,
- -(step.rotateZ || step.rotate)]);
- tf.push(["translate",
- -(step.x || (step.r * Math.sin(step.phi*Math.PI/180))),
- -(step.y || (-step.r * Math.cos(step.phi*Math.PI/180))),
- -step.z]);
- target.perspectiveScale *= (step.scaleX || step.scale);
- });
-
- $.each(tf, function(idx, item) {
- if(item[0] !== "rotate") {
- return;
- }
- function lowRotate(name) {
- if(eventData.current["rotate"+name+"-"+idx] === undefined) {
- eventData.current["rotate"+name+"-"+idx] = item[name] || 0;
- }
- var cur = eventData.current["rotate"+name+"-"+idx], tar = item[name] || 0,
- curmod = cur % 360, tarmod = tar % 360;
- if(curmod < 0) {
- curmod += 360;
- }
- if(tarmod < 0) {
- tarmod += 360;
- }
- var diff = tarmod - curmod;
- if(diff < -180) {
- diff += 360;
- } else if(diff > 180) {
- diff -= 360;
- }
- eventData.current["rotate"+name+"-"+idx] = item[name] = cur + diff;
- }
- lowRotate(1);
- lowRotate(2);
- lowRotate(3);
- });
- });
- $.jmpress("applyTarget", function( active, eventData ) {
-
- var target = eventData.target,
- props, step = eventData.stepData,
- settings = eventData.settings,
- zoomin = target.perspectiveScale * 1.3 < eventData.current.perspectiveScale,
- zoomout = target.perspectiveScale > eventData.current.perspectiveScale * 1.3;
-
- // extract first scale from transform
- var lastScale = -1;
- $.each(target.transform, function(idx, item) {
- if(item.length <= 1) {
- return;
- }
- if(item[0] === "rotate" &&
- item[1] % 360 === 0 &&
- item[2] % 360 === 0 &&
- item[3] % 360 === 0) {
- return;
- }
- if(item[0] === "scale") {
- lastScale = idx;
- } else {
- return false;
- }
- });
-
- if(lastScale !== eventData.current.oldLastScale) {
- zoomin = zoomout = false;
- eventData.current.oldLastScale = lastScale;
- }
-
- var extracted = [];
- if(lastScale !== -1) {
- while(lastScale >= 0) {
- if(target.transform[lastScale][0] === "scale") {
- extracted.push(target.transform[lastScale]);
- target.transform[lastScale] = ["scale"];
- }
- lastScale--;
- }
- }
-
- var animation = settings.animation;
- if(settings.reasonableAnimation[eventData.reason]) {
- animation = $.extend({},
- animation,
- settings.reasonableAnimation[eventData.reason]);
- }
-
- props = {
- // to keep the perspective look similar for different scales
- // we need to 'scale' the perspective, too
- perspective: Math.round(target.perspectiveScale * 1000) + "px"
- };
- props = $.extend({}, animation, props);
- if (!zoomin) {
- props.transitionDelay = '0s';
- }
- if (!eventData.beforeActive) {
- props.transitionDuration = '0s';
- props.transitionDelay = '0s';
- }
- $.jmpress("css", eventData.area, props);
- engine.transform(eventData.area, extracted);
-
- props = $.extend({}, animation);
- if (!zoomout) {
- props.transitionDelay = '0s';
- }
- if (!eventData.beforeActive) {
- props.transitionDuration = '0s';
- props.transitionDelay = '0s';
- }
-
- eventData.current.perspectiveScale = target.perspectiveScale;
-
- $.jmpress("css", eventData.canvas, props);
- engine.transform(eventData.canvas, target.transform);
- });
-
-}(jQuery, document, window));
-/*
- * active.js
- * Set the active classes on steps
- */
-(function( $, document, window, undefined ) {
-
- 'use strict';
- var $jmpress = $.jmpress;
-
- /* DEFINES */
- var activeClass = 'activeClass',
- nestedActiveClass = 'nestedActiveClass';
-
- /* DEFAULTS */
- var defaults = $jmpress( 'defaults' );
- defaults[nestedActiveClass] = "nested-active";
- defaults[activeClass] = "active";
-
- /* HOOKS */
- $jmpress( 'setInactive', function( step, eventData ) {
- var settings = eventData.settings,
- activeClassSetting = settings[activeClass],
- nestedActiveClassSettings = settings[nestedActiveClass];
- if(activeClassSetting) {
- $(step).removeClass( activeClassSetting );
- }
- if(nestedActiveClassSettings) {
- $.each(eventData.parents, function(idx, element) {
- $(element).removeClass(nestedActiveClassSettings);
- });
- }
- });
- $jmpress( 'setActive', function( step, eventData ) {
- var settings = eventData.settings,
- activeClassSetting = settings[activeClass],
- nestedActiveClassSettings = settings[nestedActiveClass];
- if(activeClassSetting) {
- $(step).addClass( activeClassSetting );
- }
- if(nestedActiveClassSettings) {
- $.each(eventData.parents, function(idx, element) {
- $(element).addClass(nestedActiveClassSettings);
- });
- }
- });
-
-}(jQuery, document, window));
-/*
- * circular.js
- * Repeat from start after end
- */
-(function( $, document, window, undefined ) {
-
- 'use strict';
- var $jmpress = $.jmpress;
-
- /* FUNCTIONS */
- function firstSlide( step, eventData ) {
- return $(this).find(eventData.settings.stepSelector).first();
- }
- function prevOrNext( jmpress, step, eventData, prev) {
- if (!step) {
- return false;
- }
- var stepSelector = eventData.settings.stepSelector;
- step = $(step);
- do {
- var item = step.near( stepSelector, prev );
- if (item.length === 0 || item.closest(jmpress).length === 0) {
- item = $(jmpress).find(stepSelector)[prev?"last":"first"]();
- }
- if (!item.length) {
- return false;
- }
- step = item;
- } while( step.data("stepData").exclude );
- return step;
- }
-
- /* HOOKS */
- $jmpress( 'initStep', function( step, eventData ) {
- eventData.stepData.exclude = eventData.data.exclude && ["false", "no"].indexOf(eventData.data.exclude) === -1;
- });
- $jmpress( 'selectInitialStep', firstSlide);
- $jmpress( 'selectHome', firstSlide);
- $jmpress( 'selectEnd', function( step, eventData ) {
- return $(this).find(eventData.settings.stepSelector).last();
- });
- $jmpress( 'selectPrev', function( step, eventData ) {
- return prevOrNext(this, step, eventData, true);
- });
- $jmpress( 'selectNext', function( step, eventData ) {
- return prevOrNext(this, step, eventData);
- });
-}(jQuery, document, window));
-/*
- * start.js
- * Set the first step to start on
- */
-(function( $, document, window, undefined ) {
-
- 'use strict';
-
- /* HOOKS */
- $.jmpress( 'selectInitialStep', function( nil, eventData ) {
- return eventData.settings.start;
- });
-
-}(jQuery, document, window));
-/*
- * ways.js
- * Control the flow of the steps
- */
-(function( $, document, window, undefined ) {
-
- 'use strict';
- var $jmpress = $.jmpress;
-
- /* FUNCTIONS */
- function routeFunc( jmpress, route, type ) {
- for(var i = 0; i < route.length - 1; i++) {
- var from = route[i];
- var to = route[i+1];
- if($(jmpress).jmpress("initialized")) {
- $(from, jmpress).data("stepData")[type] = to;
- } else {
- $(from, jmpress).attr('data-' + type, to);
- }
- }
- }
- function selectPrevOrNext( step, eventData, attr, prev ) {
- var stepData = eventData.stepData;
- if(stepData[attr]) {
- var near = $(step).near(stepData[attr], prev);
- if(near && near.length) {
- return near;
- }
- near = $(stepData[attr], this)[prev?"last":"first"]();
- if(near && near.length) {
- return near;
- }
- }
- }
-
- /* EXPORTED FUNCTIONS */
- $jmpress( 'register', 'route', function( route, unidirectional, reversedRoute ) {
- if( typeof route === "string" ) {
- route = [route, route];
- }
- routeFunc(this, route, reversedRoute ? "prev" : "next");
- if (!unidirectional) {
- routeFunc(this, route.reverse(), reversedRoute ? "next" : "prev");
- }
- });
-
- /* HOOKS */
- $jmpress( 'initStep', function( step, eventData ) {
- for(var attr in {next:1,prev:1}) {
- eventData.stepData[attr] = eventData.data[attr];
- }
- });
- $jmpress( 'selectNext', function( step, eventData ) {
- return selectPrevOrNext.call(this, step, eventData, "next");
- });
- $jmpress( 'selectPrev', function( step, eventData ) {
- return selectPrevOrNext.call(this, step, eventData, "prev", true);
- });
-
-}(jQuery, document, window));
-/*
- * ajax.js
- * Load steps via ajax
- */
-(function( $, document, window, undefined ) {
-
- 'use strict';
- var $jmpress = $.jmpress;
-
- /* DEFINES */
- var afterStepLoaded = 'ajax:afterStepLoaded',
- loadStep = 'ajax:loadStep';
-
- /* REGISTER EVENTS */
- $jmpress('register', loadStep);
- $jmpress('register', afterStepLoaded);
-
- /* DEFAULTS */
- $jmpress('defaults').ajaxLoadedClass = "loaded";
-
- /* HOOKS */
- $jmpress('initStep', function( step, eventData ) {
- eventData.stepData.src = $(step).attr('href') || eventData.data.src || false;
- eventData.stepData.srcLoaded = false;
- });
- $jmpress(loadStep, function( step, eventData ) {
- var stepData = eventData.stepData,
- href = stepData && stepData.src,
- settings = eventData.settings;
- if ( href ) {
- $(step).addClass( settings.ajaxLoadedClass );
- stepData.srcLoaded = true;
- $(step).load(href, function(response, status, xhr) {
- $(eventData.jmpress).jmpress('fire', afterStepLoaded, step, $.extend({}, eventData, {
- response: response
- ,status: status
- ,xhr: xhr
- }));
- });
- }
- });
- $jmpress('idle', function( step, eventData ) {
- if (!step) {
- return;
- }
- var settings = eventData.settings,
- jmpress = $(this),
- stepData = eventData.stepData;
- var siblings = $(step)
- .add( $(step).near( settings.stepSelector ) )
- .add( $(step).near( settings.stepSelector, true) )
- .add( jmpress.jmpress('fire', 'selectPrev', step, {
- stepData: $(step).data('stepData')
- }))
- .add( jmpress.jmpress('fire', 'selectNext', step, {
- stepData: $(step).data('stepData')
- }));
- siblings.each(function() {
- var step = this,
- stepData = $(step).data("stepData");
- if(!stepData.src || stepData.srcLoaded) {
- return;
- }
- jmpress.jmpress('fire', loadStep, step, {
- stepData: $(step).data('stepData')
- });
- });
- });
- $jmpress("setActive", function(step, eventData) {
- var stepData = $(step).data("stepData");
- if(!stepData.src || stepData.srcLoaded) {
- return;
- }
- $(this).jmpress('fire', loadStep, step, {
- stepData: $(step).data('stepData')
- });
- });
-
-}(jQuery, document, window));
-/*
- * hash.js
- * Detect and set the URL hash
- */
-(function( $, document, window, undefined ) {
-
- 'use strict';
- var $jmpress = $.jmpress,
- hashLink = "a[href^='#']";
-
- /* FUNCTIONS */
- function randomString() {
- return "" + Math.round(Math.random() * 100000, 0);
- }
- /**
- * getElementFromUrl
- *
- * @return String or undefined
- */
- function getElementFromUrl(settings) {
- // get id from url # by removing `#` or `#/` from the beginning,
- // so both "fallback" `#slide-id` and "enhanced" `#/slide-id` will work
- // TODO SECURITY check user input to be valid!
- try {
- var el = $( '#' + window.location.hash.replace(/^#\/?/,"") );
- return el.length > 0 && el.is(settings.stepSelector) ? el : undefined;
- } catch(e) {}
- }
- function setHash(stepid) {
- var shouldBeHash = "#/" + stepid;
- if(window.history && window.history.pushState) {
- // shouldBeHash = "#" + stepid;
- // consider this for future versions
- // it has currently issues, when startup with a link with hash (webkit)
- if(window.location.hash !== shouldBeHash) {
- window.history.pushState({}, '', shouldBeHash);
- }
- } else {
- if(window.location.hash !== shouldBeHash) {
- window.location.hash = shouldBeHash;
- }
- }
- }
-
- /* DEFAULTS */
- $jmpress('defaults').hash = {
- use: true
- ,update: true
- ,bindChange: true
- // NOTICE: {use: true, update: false, bindChange: true}
- // will cause a error after clicking on a link to the current step
- };
-
- /* HOOKS */
- $jmpress('selectInitialStep', function( step, eventData ) {
- var settings = eventData.settings,
- hashSettings = settings.hash,
- current = eventData.current,
- jmpress = $(this);
- eventData.current.hashNamespace = ".jmpress-"+randomString();
- // HASH CHANGE EVENT
- if ( hashSettings.use ) {
- if ( hashSettings.bindChange ) {
- $(window).bind('hashchange'+current.hashNamespace, function(event) {
- var urlItem = getElementFromUrl(settings);
- if ( jmpress.jmpress('initialized') ) {
- jmpress.jmpress("scrollFix");
- }
- if(urlItem && urlItem.length) {
- if(urlItem.attr("id") !== jmpress.jmpress("active").attr("id")) {
- jmpress.jmpress('select', urlItem);
- }
- setHash(urlItem.attr("id"));
- }
- event.preventDefault();
- });
- $(hashLink).on("click"+current.hashNamespace, function(event) {
- var href = $(this).attr("href");
- try {
- if($(href).is(settings.stepSelector)) {
- jmpress.jmpress("select", href);
- event.preventDefault();
- event.stopPropagation();
- }
- } catch(e) {}
- });
- }
- return getElementFromUrl(settings);
- }
- });
- $jmpress('afterDeinit', function( nil, eventData ) {
- $(hashLink).off(eventData.current.hashNamespace);
- $(window).unbind(eventData.current.hashNamespace);
- });
- $jmpress('setActive', function( step, eventData ) {
- var settings = eventData.settings,
- current = eventData.current;
- // `#/step-id` is used instead of `#step-id` to prevent default browser
- // scrolling to element in hash
- if ( settings.hash.use && settings.hash.update ) {
- clearTimeout(current.hashtimeout);
- current.hashtimeout = setTimeout(function() {
- setHash($(eventData.delegatedFrom).attr('id'));
- }, settings.transitionDuration + 200);
- }
- });
-
-}(jQuery, document, window));
-/*
- * keyboard.js
- * Keyboard event mapping and default keyboard actions
- */
-(function( $, document, window, undefined ) {
-
- 'use strict';
- var $jmpress = $.jmpress,
- jmpressNext = "next",
- jmpressPrev = "prev";
-
- /* FUNCTIONS */
- function randomString() {
- return "" + Math.round(Math.random() * 100000, 0);
- }
- function stopEvent(event) {
- event.preventDefault();
- event.stopPropagation();
- }
-
- /* DEFAULTS */
- $jmpress('defaults').keyboard = {
- use: true
- ,keys: {
- 33: jmpressPrev // pg up
- ,37: jmpressPrev // left
- ,38: jmpressPrev // up
-
- ,9: jmpressNext+":"+jmpressPrev // tab
- ,32: jmpressNext // space
- ,34: jmpressNext // pg down
- ,39: jmpressNext // right
- ,40: jmpressNext // down
-
- ,36: "home" // home
-
- ,35: "end" // end
- }
- ,ignore: {
- "INPUT": [
- 32 // space
- ,37 // left
- ,38 // up
- ,39 // right
- ,40 // down
- ]
- ,"TEXTAREA": [
- 32 // space
- ,37 // left
- ,38 // up
- ,39 // right
- ,40 // down
- ]
- ,"SELECT": [
- 38 // up
- ,40 // down
- ]
- }
- ,tabSelector: "a[href]:visible, :input:visible"
- };
-
- /* HOOKS */
- $jmpress('afterInit', function( nil, eventData ) {
- var settings = eventData.settings,
- keyboardSettings = settings.keyboard,
- ignoreKeyboardSettings = keyboardSettings.ignore,
- current = eventData.current,
- jmpress = $(this);
-
- // tabindex make it focusable so that it can receive key events
- if(!settings.fullscreen) {
- jmpress.attr("tabindex", 0);
- }
-
- current.keyboardNamespace = ".jmpress-"+randomString();
-
- // KEYPRESS EVENT: this fixes a Opera bug
- $(settings.fullscreen ? document : jmpress)
- .bind("keypress"+current.keyboardNamespace, function( event ) {
-
- for( var nodeName in ignoreKeyboardSettings ) {
- if ( event.target.nodeName === nodeName && ignoreKeyboardSettings[nodeName].indexOf(event.which) !== -1 ) {
- return;
- }
- }
- if(event.which >= 37 && event.which <= 40 || event.which === 32) {
- stopEvent(event);
- }
- });
- // KEYDOWN EVENT
- $(settings.fullscreen ? document : jmpress)
- .bind("keydown"+current.keyboardNamespace, function( event ) {
- var eventTarget = $(event.target);
-
- if ( !settings.fullscreen && !eventTarget.closest(jmpress).length || !keyboardSettings.use ) {
- return;
- }
-
- for( var nodeName in ignoreKeyboardSettings ) {
- if ( eventTarget[0].nodeName === nodeName && ignoreKeyboardSettings[nodeName].indexOf(event.which) !== -1 ) {
- return;
- }
- }
-
- var reverseSelect = false;
- var nextFocus;
- if (event.which === 9) {
- // tab
- if ( !eventTarget.closest( jmpress.jmpress('active') ).length ) {
- if ( !event.shiftKey ) {
- nextFocus = jmpress.jmpress('active').find("a[href], :input").filter(":visible").first();
- } else {
- reverseSelect = true;
- }
- } else {
- nextFocus = eventTarget.near( keyboardSettings.tabSelector, event.shiftKey );
- if( !$(nextFocus)
- .closest( settings.stepSelector )
- .is(jmpress.jmpress('active') ) ) {
- nextFocus = undefined;
- }
- }
- if( nextFocus && nextFocus.length > 0 ) {
- nextFocus.focus();
- jmpress.jmpress("scrollFix");
- stopEvent(event);
- return;
- } else {
- if(event.shiftKey) {
- reverseSelect = true;
- }
- }
- }
-
- var action = keyboardSettings.keys[ event.which ];
- if ( typeof action === "string" ) {
- if (action.indexOf(":") !== -1) {
- action = action.split(":");
- action = event.shiftKey ? action[1] : action[0];
- }
- jmpress.jmpress( action );
- stopEvent(event);
- } else if ( $.isFunction(action) ) {
- action.call(jmpress, event);
- } else if ( action ) {
- jmpress.jmpress.apply( jmpress, action );
- stopEvent(event);
- }
-
- if (reverseSelect) {
- // tab
- nextFocus = jmpress.jmpress('active').find("a[href], :input").filter(":visible").last();
- nextFocus.focus();
- jmpress.jmpress("scrollFix");
- }
- });
- });
- $jmpress('afterDeinit', function( nil, eventData ) {
- $(document).unbind(eventData.current.keyboardNamespace);
- });
-
-
-}(jQuery, document, window));
-/*
- * viewport.js
- * Scale to fit a given viewport
- */
-(function( $, document, window, undefined ) {
-
- 'use strict';
-
- function randomString() {
- return "" + Math.round(Math.random() * 100000, 0);
- }
-
- var browser = (function() {
- var ua = navigator.userAgent.toLowerCase();
- var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
- /(webkit)[ \/]([\w.]+)/.exec(ua) ||
- /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
- /(msie) ([\w.]+)/.exec(ua) ||
- ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
- [];
- return match[1] || "";
- }());
-
- var defaults = $.jmpress("defaults");
- defaults.viewPort = {
- width: false
- ,height: false
- ,maxScale: 0
- ,minScale: 0
- ,zoomable: 0
- ,zoomBindMove: true
- ,zoomBindWheel: true
- };
- var keys = defaults.keyboard.keys;
- keys[browser === 'mozilla' ? 107 : 187] = "zoomIn"; // +
- keys[browser === 'mozilla' ? 109 : 189] = "zoomOut"; // -
- defaults.reasonableAnimation.resize = {
- transitionDuration: '0s'
- ,transitionDelay: '0ms'
- };
- defaults.reasonableAnimation.zoom = {
- transitionDuration: '0s'
- ,transitionDelay: '0ms'
- };
- $.jmpress("initStep", function( step, eventData ) {
- for(var variable in {"viewPortHeight":1, "viewPortWidth":1, "viewPortMinScale":1, "viewPortMaxScale":1, "viewPortZoomable":1}) {
- eventData.stepData[variable] = eventData.data[variable] && parseFloat(eventData.data[variable]);
- }
- });
- $.jmpress("afterInit", function( nil, eventData ) {
- var jmpress = this;
- eventData.current.viewPortNamespace = ".jmpress-"+randomString();
- $(window).bind("resize"+eventData.current.viewPortNamespace, function (event) {
- $(jmpress).jmpress("reselect", "resize");
- });
- eventData.current.userZoom = 0;
- eventData.current.userTranslateX = 0;
- eventData.current.userTranslateY = 0;
- if(eventData.settings.viewPort.zoomBindWheel) {
- $(eventData.settings.fullscreen ? document : this)
- .bind("mousewheel"+eventData.current.viewPortNamespace+" DOMMouseScroll"+eventData.current.viewPortNamespace, function( event, delta ) {
- delta = delta || event.originalEvent.wheelDelta || -event.originalEvent.detail /* mozilla */;
- var direction = (delta / Math.abs(delta));
- if(direction < 0) {
- $(eventData.jmpress).jmpress("zoomOut", event.originalEvent.x, event.originalEvent.y);
- } else if(direction > 0) {
- $(eventData.jmpress).jmpress("zoomIn", event.originalEvent.x, event.originalEvent.y);
- }
- return false;
- });
- }
- if(eventData.settings.viewPort.zoomBindMove) {
- $(eventData.settings.fullscreen ? document : this).bind("mousedown"+eventData.current.viewPortNamespace, function (event) {
- if(eventData.current.userZoom) {
- eventData.current.userTranslating = { x: event.clientX, y: event.clientY };
- event.preventDefault();
- event.stopImmediatePropagation();
- }
- }).bind("mousemove"+eventData.current.viewPortNamespace, function (event) {
- var userTranslating = eventData.current.userTranslating;
- if(userTranslating) {
- $(jmpress).jmpress("zoomTranslate", event.clientX - userTranslating.x, event.clientY - userTranslating.y);
- userTranslating.x = event.clientX;
- userTranslating.y = event.clientY;
- event.preventDefault();
- event.stopImmediatePropagation();
- }
- }).bind("mouseup"+eventData.current.viewPortNamespace, function (event) {
- if(eventData.current.userTranslating) {
- eventData.current.userTranslating = undefined;
- event.preventDefault();
- event.stopImmediatePropagation();
- }
- });
- }
- });
- function maxAbs(value, range) {
- return Math.max(Math.min(value, range), -range);
- }
- function zoom(x, y, direction) {
- var current = $(this).jmpress("current"),
- settings = $(this).jmpress("settings"),
- stepData = $(this).jmpress("active").data("stepData"),
- container = $(this).jmpress("container");
- if(current.userZoom === 0 && direction < 0) {
- return;
- }
- var zoomableSteps = stepData.viewPortZoomable || settings.viewPort.zoomable;
- if(current.userZoom === zoomableSteps && direction > 0) {
- return;
- }
- current.userZoom += direction;
-
- var halfWidth = $(container).innerWidth()/2,
- halfHeight = $(container).innerHeight()/2;
-
- x = x ? x - halfWidth : x;
- y = y ? y - halfHeight : y;
-
- // TODO this is not perfect... too much math... :(
- current.userTranslateX =
- maxAbs(current.userTranslateX - direction * x / current.zoomOriginWindowScale / zoomableSteps,
- halfWidth * current.userZoom * current.userZoom / zoomableSteps);
- current.userTranslateY =
- maxAbs(current.userTranslateY - direction * y / current.zoomOriginWindowScale / zoomableSteps,
- halfHeight * current.userZoom * current.userZoom / zoomableSteps);
-
- $(this).jmpress("reselect", "zoom");
- }
- $.jmpress("register", "zoomIn", function(x, y) {
- zoom.call(this, x||0, y||0, 1);
- });
- $.jmpress("register", "zoomOut", function(x, y) {
- zoom.call(this, x||0, y||0, -1);
- });
- $.jmpress("register", "zoomTranslate", function(x, y) {
- var current = $(this).jmpress("current"),
- settings = $(this).jmpress("settings"),
- stepData = $(this).jmpress("active").data("stepData"),
- container = $(this).jmpress("container");
- var zoomableSteps = stepData.viewPortZoomable || settings.viewPort.zoomable;
- var halfWidth = $(container).innerWidth(),
- halfHeight = $(container).innerHeight();
- current.userTranslateX =
- maxAbs(current.userTranslateX + x / current.zoomOriginWindowScale,
- halfWidth * current.userZoom * current.userZoom / zoomableSteps);
- current.userTranslateY =
- maxAbs(current.userTranslateY + y / current.zoomOriginWindowScale,
- halfHeight * current.userZoom * current.userZoom / zoomableSteps);
- $(this).jmpress("reselect", "zoom");
- });
- $.jmpress('afterDeinit', function( nil, eventData ) {
- $(eventData.settings.fullscreen ? document : this).unbind(eventData.current.viewPortNamespace);
- $(window).unbind(eventData.current.viewPortNamespace);
- });
- $.jmpress("setActive", function( step, eventData ) {
- var viewPort = eventData.settings.viewPort;
- var viewPortHeight = eventData.stepData.viewPortHeight || viewPort.height;
- var viewPortWidth = eventData.stepData.viewPortWidth || viewPort.width;
- var viewPortMaxScale = eventData.stepData.viewPortMaxScale || viewPort.maxScale;
- var viewPortMinScale = eventData.stepData.viewPortMinScale || viewPort.minScale;
- // Correct the scale based on the window's size
- var windowScaleY = viewPortHeight && $(eventData.container).innerHeight()/viewPortHeight;
- var windowScaleX = viewPortWidth && $(eventData.container).innerWidth()/viewPortWidth;
- var windowScale = (windowScaleX || windowScaleY) && Math.min( windowScaleX || windowScaleY, windowScaleY || windowScaleX );
-
- if(windowScale) {
- windowScale = windowScale || 1;
- if(viewPortMaxScale) {
- windowScale = Math.min(windowScale, viewPortMaxScale);
- }
- if(viewPortMinScale) {
- windowScale = Math.max(windowScale, viewPortMinScale);
- }
-
- var zoomableSteps = eventData.stepData.viewPortZoomable || eventData.settings.viewPort.zoomable;
- if(zoomableSteps) {
- var diff = (1/windowScale) - (1/viewPortMaxScale);
- diff /= zoomableSteps;
- windowScale = 1/((1/windowScale) - diff * eventData.current.userZoom);
- }
-
- eventData.target.transform.reverse();
- if(eventData.current.userTranslateX && eventData.current.userTranslateY) {
- eventData.target.transform.push(["translate", eventData.current.userTranslateX, eventData.current.userTranslateY, 0]);
- } else {
- eventData.target.transform.push(["translate"]);
- }
- eventData.target.transform.push(["scale",
- windowScale,
- windowScale,
- 1]);
- eventData.target.transform.reverse();
- eventData.target.perspectiveScale /= windowScale;
- }
- eventData.current.zoomOriginWindowScale = windowScale;
- });
- $.jmpress("setInactive", function( step, eventData ) {
- if(!eventData.nextStep || !step || $(eventData.nextStep).attr("id") !== $(step).attr("id")) {
- eventData.current.userZoom = 0;
- eventData.current.userTranslateX = 0;
- eventData.current.userTranslateY = 0;
- }
- });
-
-}(jQuery, document, window));
-
-/*
- * mouse.js
- * Clicking to select a step
- */
-(function( $, document, window, undefined ) {
-
- 'use strict';
- var $jmpress = $.jmpress;
-
- /* FUNCTIONS */
- function randomString() {
- return "" + Math.round(Math.random() * 100000, 0);
- }
-
- /* DEFAULTS */
- $jmpress("defaults").mouse = {
- clickSelects: true
- };
-
- /* HOOKS */
- $jmpress("afterInit", function( nil, eventData ) {
- var settings = eventData.settings,
- stepSelector = settings.stepSelector,
- current = eventData.current,
- jmpress = $(this);
- current.clickableStepsNamespace = ".jmpress-"+randomString();
- jmpress.bind("click"+current.clickableStepsNamespace, function(event) {
- if (!settings.mouse.clickSelects || current.userZoom) {
- return;
- }
-
- // get clicked step
- var clickedStep = $(event.target).closest(stepSelector);
-
- // clicks on the active step do default
- if ( clickedStep.is( jmpress.jmpress("active") ) ) {
- return;
- }
-
- if (clickedStep.length) {
- // select the clicked step
- jmpress.jmpress("select", clickedStep[0], "click");
- event.preventDefault();
- event.stopPropagation();
- }
- });
- });
- $jmpress('afterDeinit', function( nil, eventData ) {
- $(this).unbind(eventData.current.clickableStepsNamespace);
- });
-
-}(jQuery, document, window));
-/*
- * mobile.js
- * Adds support for swipe on touch supported browsers
- */
-(function( $, document, window, undefined ) {
-
- 'use strict';
- var $jmpress = $.jmpress;
-
- /* FUNCTIONS */
- function randomString() {
- return "" + Math.round(Math.random() * 100000, 0);
- }
-
- /* HOOKS */
- $jmpress( 'afterInit', function( step, eventData ) {
- var settings = eventData.settings,
- current = eventData.current,
- jmpress = eventData.jmpress;
- current.mobileNamespace = ".jmpress-"+randomString();
- var data, start = [0,0];
- $(settings.fullscreen ? document : jmpress)
- .bind("touchstart"+current.mobileNamespace, function( event ) {
-
- data = event.originalEvent.touches[0];
- start = [ data.pageX, data.pageY ];
-
- }).bind("touchmove"+current.mobileNamespace, function( event ) {
- data = event.originalEvent.touches[0];
- event.preventDefault();
- return false;
- }).bind("touchend"+current.mobileNamespace, function( event ) {
- var end = [ data.pageX, data.pageY ],
- diff = [ end[0]-start[0], end[1]-start[1] ];
-
- if(Math.max(Math.abs(diff[0]), Math.abs(diff[1])) > 50) {
- diff = Math.abs(diff[0]) > Math.abs(diff[1]) ? diff[0] : diff[1];
- $(jmpress).jmpress(diff > 0 ? "prev" : "next");
- event.preventDefault();
- return false;
- }
- });
- });
- $jmpress('afterDeinit', function( nil, eventData ) {
- var settings = eventData.settings,
- current = eventData.current,
- jmpress = eventData.jmpress;
- $(settings.fullscreen ? document : jmpress).unbind(current.mobileNamespace);
- });
-
-}(jQuery, document, window));
-/*
- * templates.js
- * The amazing template engine
- */
-(function( $, document, window, undefined ) {
-
- 'use strict';
- var $jmpress = $.jmpress,
- templateFromParentIdent = "_template_",
- templateFromApplyIdent = "_applied_template_";
-
- /* STATIC VARS */
- var templates = {};
-
- /* FUNCTIONS */
- function addUndefined( target, values, prefix ) {
- for( var name in values ) {
- var targetName = name;
- if ( prefix ) {
- targetName = prefix + targetName.substr(0, 1).toUpperCase() + targetName.substr(1);
- }
- if ( $.isPlainObject(values[name]) ) {
- addUndefined( target, values[name], targetName );
- } else if( target[targetName] === undefined ) {
- target[targetName] = values[name];
- }
- }
- }
- function applyChildrenTemplates( children, templateChildren ) {
- if ($.isArray(templateChildren)) {
- if (templateChildren.length < children.length) {
- $.error("more nested steps than children in template");
- } else {
- children.each(function(idx, child) {
- child = $(child);
- var tmpl = child.data(templateFromParentIdent) || {};
- addUndefined(tmpl, templateChildren[idx]);
- child.data(templateFromParentIdent, tmpl);
- });
- }
- } else if($.isFunction(templateChildren)) {
- children.each(function(idx, child) {
- child = $(child);
- var tmpl = child.data(templateFromParentIdent) || {};
- addUndefined(tmpl, templateChildren(idx, child, children));
- child.data(templateFromParentIdent, tmpl);
- });
- } // TODO: else if(object)
- }
- function applyTemplate( data, element, template, eventData ) {
- if (template.children) {
- var children = element.children( eventData.settings.stepSelector );
- applyChildrenTemplates( children, template.children );
- }
- applyTemplateData( data, template );
- }
- function applyTemplateData( data, template ) {
- addUndefined(data, template);
- }
-
- /* HOOKS */
- $jmpress("beforeInitStep", function( step, eventData ) {
- step = $(step);
- var data = eventData.data,
- templateFromAttr = data.template,
- templateFromApply = step.data(templateFromApplyIdent),
- templateFromParent = step.data(templateFromParentIdent);
- if(templateFromAttr) {
- $.each(templateFromAttr.split(" "), function(idx, tmpl) {
- var template = templates[tmpl];
- applyTemplate( data, step, template, eventData );
- });
- }
- if (templateFromApply) {
- applyTemplate( data, step, templateFromApply, eventData );
- }
- if (templateFromParent) {
- applyTemplate( data, step, templateFromParent, eventData );
- step.data(templateFromParentIdent, null);
- if(templateFromParent.template) {
- $.each(templateFromParent.template.split(" "), function(idx, tmpl) {
- var template = templates[tmpl];
- applyTemplate( data, step, template, eventData );
- });
- }
- }
- });
- $jmpress("beforeInit", function( nil, eventData ) {
- var data = $jmpress("dataset", this),
- dataTemplate = data.template,
- stepSelector = eventData.settings.stepSelector;
- if (dataTemplate) {
- var template = templates[dataTemplate];
- applyChildrenTemplates( $(this).find(stepSelector).filter(function() {
- return !$(this).parent().is(stepSelector);
- }), template.children );
- }
- });
-
- /* EXPORTED FUNCTIONS */
- $jmpress("register", "template", function( name, tmpl ) {
- if (templates[name]) {
- templates[name] = $.extend(true, {}, templates[name], tmpl);
- } else {
- templates[name] = $.extend(true, {}, tmpl);
- }
- });
- $jmpress("register", "apply", function( selector, tmpl ) {
- if( !tmpl ) {
- // TODO ERROR because settings not found
- var stepSelector = $(this).jmpress("settings").stepSelector;
- applyChildrenTemplates( $(this).find(stepSelector).filter(function() {
- return !$(this).parent().is(stepSelector);
- }), selector );
- } else if($.isArray(tmpl)) {
- applyChildrenTemplates( $(selector), tmpl );
- } else {
- var template;
- if(typeof tmpl === "string") {
- template = templates[tmpl];
- } else {
- template = $.extend(true, {}, tmpl);
- }
- $(selector).each(function(idx, element) {
- element = $(element);
- var tmpl = element.data(templateFromApplyIdent) || {};
- addUndefined(tmpl, template);
- element.data(templateFromApplyIdent, tmpl);
- });
- }
- });
-
-}(jQuery, document, window));
-/*
- * jqevents.js
- * Fires jQuery events
- */
-(function( $, document, window, undefined ) {
-
- 'use strict';
-
- /* HOOKS */
- // the events should not bubble up the tree
- // elsewise nested jmpress would cause buggy behavior
- $.jmpress("setActive", function( step, eventData ) {
- if(eventData.prevStep !== step) {
- $(step).triggerHandler("enterStep");
- }
- });
- $.jmpress("setInactive", function( step, eventData ) {
- if(eventData.nextStep !== step) {
- $(step).triggerHandler("leaveStep");
- }
- });
-
-}(jQuery, document, window));
-/*
- * animation.js
- * Apply custom animations to steps
- */
-(function( $, document, window, undefined ) {
-
- 'use strict';
-
- function parseSubstepInfo(str) {
- var arr = str.split(" ");
- var className = arr[0];
- var config = { willClass: "will-"+className, doClass: "do-"+className, hasClass: "has-"+className };
- var state = "";
- for(var i = 1; i < arr.length; i++) {
- var s = arr[i];
- switch(state) {
- case "":
- if(s === "after") {
- state = "after";
- } else {
- $.warn("unknown keyword in '"+str+"'. '"+s+"' unknown.");
- }
- break;
- case "after":
- if(s.match(/^[1-9][0-9]*m?s?/)) {
- var value = parseFloat(s);
- if(s.indexOf("ms") !== -1) {
- value *= 1;
- } else if(s.indexOf("s") !== -1) {
- value *= 1000;
- } else if(s.indexOf("m") !== -1) {
- value *= 60000;
- }
- config.delay = value;
- } else {
- config.after = Array.prototype.slice.call(arr, i).join(" ");
- i = arr.length;
- }
- }
- }
- return config;
- }
- function find(array, selector, start, end) {
- end = end || (array.length - 1);
- start = start || 0;
- for(var i = start; i < end + 1; i++) {
- if($(array[i].element).is(selector)) {
- return i;
- }
- }
- }
- function addOn(list, substep, delay) {
- $.each(substep._on, function(idx, child) {
- list.push({substep: child.substep, delay: child.delay + delay});
- addOn(list, child.substep, child.delay + delay);
- });
- }
- $.jmpress("defaults").customAnimationDataAttribute = "jmpress";
- $.jmpress("afterInit", function( nil, eventData ) {
- eventData.current.animationTimeouts = [];
- eventData.current.animationCleanupWaiting = [];
- });
- $.jmpress("applyStep", function( step, eventData ) {
- // read custom animation from elements
- var substepsData = {};
- var listOfSubsteps = [];
- $(step).find("[data-"+eventData.settings.customAnimationDataAttribute+"]")
- .each(function(idx, element) {
- if($(element).closest(eventData.settings.stepSelector).is(step)) {
- listOfSubsteps.push({element: element});
- }
- });
- if(listOfSubsteps.length === 0) {
- return;
- }
- $.each(listOfSubsteps, function(idx, substep) {
- substep.info = parseSubstepInfo(
- $(substep.element).data(eventData.settings.customAnimationDataAttribute));
- $(substep.element).addClass(substep.info.willClass);
- substep._on = [];
- substep._after = null;
- });
- var current = {_after: undefined, _on: [], info: {}}; // virtual zero step
- $.each(listOfSubsteps, function(idx, substep) {
- var other = substep.info.after;
- if(other) {
- if(other === "step") {
- other = current;
- } else if(other === "prev") {
- other = listOfSubsteps[idx-1];
- } else {
- var index = find(listOfSubsteps, other, 0, idx - 1);
- if(index === undefined) {
- index = find(listOfSubsteps, other);
- }
- other = (index === undefined || index === idx) ? listOfSubsteps[idx-1] : listOfSubsteps[index];
- }
- } else {
- other = listOfSubsteps[idx-1];
- }
- if(other) {
- if(!substep.info.delay) {
- if(!other._after) {
- other._after = substep;
- return;
- }
- other = other._after;
- }
- other._on.push({substep: substep, delay: substep.info.delay || 0});
- }
- });
- if(current._after === undefined && current._on.length === 0) {
- var startStep = find(listOfSubsteps, eventData.stepData.startSubstep) || 0;
- current._after = listOfSubsteps[startStep];
- }
- var substepsInOrder = [];
- function findNextFunc(idx, item) {
- if(item.substep._after) {
- current = item.substep._after;
- return false;
- }
- }
- do {
- var substepList = [{substep: current, delay: 0}];
- addOn(substepList, current, 0);
- substepsInOrder.push(substepList);
- current = null;
- $.each(substepList, findNextFunc);
- } while(current);
- substepsData.list = substepsInOrder;
- $(step).data("substepsData", substepsData);
- });
- $.jmpress("unapplyStep", function( step, eventData ) {
- var substepsData = $(step).data("substepsData");
- if(substepsData) {
- $.each(substepsData.list, function(idx, activeSubsteps) {
- $.each(activeSubsteps, function(idx, substep) {
- if(substep.substep.info.willClass) {
- $(substep.substep.element).removeClass(substep.substep.info.willClass);
- }
- if(substep.substep.info.hasClass) {
- $(substep.substep.element).removeClass(substep.substep.info.hasClass);
- }
- if(substep.substep.info.doClass) {
- $(substep.substep.element).removeClass(substep.substep.info.doClass);
- }
- });
- });
- }
- });
- $.jmpress("setActive", function(step, eventData) {
- var substepsData = $(step).data("substepsData");
- if(!substepsData) {
- return;
- }
- if(eventData.substep === undefined) {
- eventData.substep =
- (eventData.reason === "prev" ?
- substepsData.list.length-1 :
- 0
- );
- }
- var substep = eventData.substep;
- $.each(eventData.current.animationTimeouts, function(idx, timeout) {
- clearTimeout(timeout);
- });
- eventData.current.animationTimeouts = [];
- $.each(substepsData.list, function(idx, activeSubsteps) {
- var applyHas = idx < substep;
- var applyDo = idx <= substep;
- $.each(activeSubsteps, function(idx, substep) {
- if(substep.substep.info.hasClass) {
- $(substep.substep.element)[(applyHas?"add":"remove")+"Class"](substep.substep.info.hasClass);
- }
- function applyIt() {
- $(substep.substep.element).addClass(substep.substep.info.doClass);
- }
- if(applyDo && !applyHas && substep.delay && eventData.reason !== "prev") {
- if(substep.substep.info.doClass) {
- $(substep.substep.element).removeClass(substep.substep.info.doClass);
- eventData.current.animationTimeouts.push(setTimeout(applyIt, substep.delay));
- }
- } else {
- if(substep.substep.info.doClass) {
- $(substep.substep.element)[(applyDo?"add":"remove")+"Class"](substep.substep.info.doClass);
- }
- }
- });
- });
- });
- $.jmpress("setInactive", function(step, eventData) {
- if(eventData.nextStep === step) {
- return;
- }
- function cleanupAnimation( substepsData ) {
- $.each(substepsData.list, function(idx, activeSubsteps) {
- $.each(activeSubsteps, function(idx, substep) {
- if(substep.substep.info.hasClass) {
- $(substep.substep.element).removeClass(substep.substep.info.hasClass);
- }
- if(substep.substep.info.doClass) {
- $(substep.substep.element).removeClass(substep.substep.info.doClass);
- }
- });
- });
- }
- $.each(eventData.current.animationCleanupWaiting, function(idx, item) {
- cleanupAnimation(item);
- });
- eventData.current.animationCleanupWaiting = [];
- var substepsData = $(step).data("substepsData");
- if(substepsData) {
- eventData.current.animationCleanupWaiting.push( substepsData );
- }
- });
- $.jmpress("selectNext", function( step, eventData ) {
- if(eventData.substep === undefined) {
- return;
- }
- var substepsData = $(step).data("substepsData");
- if(!substepsData) {
- return;
- }
- if(eventData.substep < substepsData.list.length-1) {
- return {step: step, substep: eventData.substep+1};
- }
- });
- $.jmpress("selectPrev", function( step, eventData ) {
- if(eventData.substep === undefined) {
- return;
- }
- var substepsData = $(step).data("substepsData");
- if(!substepsData) {
- return;
- }
- if(eventData.substep > 0) {
- return {step: step, substep: eventData.substep-1};
- }
- });
-
-}(jQuery, document, window));
-/*!
- * plugin for jmpress.js v0.4.5
- *
- * Copyright 2013 Kyle Robinson Young @shama & Tobias Koppers @sokra
- * Licensed MIT
- * http://www.opensource.org/licenses/mit-license.php
- *//*
- * jmpress.toggle plugin
- * For binding a key to toggle de/initialization of jmpress.js.
- */
-(function( $, document, window, undefined ) {
- 'use strict';
- $.jmpress("register", "toggle", function( key, config, initial ) {
- var jmpress = this;
- $(document).bind("keydown", function( event ) {
- if ( event.keyCode === key ) {
- if ($(jmpress).jmpress("initialized")) {
- $(jmpress).jmpress("deinit");
- } else {
- $(jmpress).jmpress(config);
- }
- }
- });
- if ( initial ) {
- $(jmpress).jmpress(config);
- }
- });
-}(jQuery, document, window));
-
-/*
- * jmpress.secondary plugin
- * Apply a secondary animation when step is selected.
- */
-(function( $, document, window, undefined ) {
- 'use strict';
- $.jmpress("initStep", function( step, eventData ) {
- for(var name in eventData.data) {
- if(name.indexOf("secondary") === 0) {
- eventData.stepData[name] = eventData.data[name];
- }
- }
- });
- function exchangeIf(childStepData, condition, step) {
- if(childStepData.secondary &&
- childStepData.secondary.split(" ").indexOf(condition) !== -1) {
- for(var name in childStepData) {
- if(name.length > 9 && name.indexOf("secondary") === 0) {
- var tmp = childStepData[name];
- var normal = name.substr(9);
- normal = normal.substr(0, 1).toLowerCase() + normal.substr(1);
- childStepData[name] = childStepData[normal];
- childStepData[normal] = tmp;
- }
- }
- $(this).jmpress("reapply", $(step));
- }
- }
- $.jmpress("beforeActive", function( step, eventData ) {
- exchangeIf.call(eventData.jmpress, $(step).data("stepData"), "self", step);
- var parent = $(step).parent();
- $(parent)
- .children(eventData.settings.stepSelector)
- .each(function(idx, child) {
- var childStepData = $(child).data("stepData");
- exchangeIf.call(eventData.jmpress, childStepData, "siblings", child);
- });
- function grandchildrenFunc(idx, child) {
- var childStepData = $(child).data("stepData");
- exchangeIf.call(eventData.jmpress, childStepData, "grandchildren", child);
- }
- for(var i = 1; i < eventData.parents.length; i++) {
- $(eventData.parents[i])
- .children(eventData.settings.stepSelector)
- .each();
- }
- });
- $.jmpress("setInactive", function( step, eventData ) {
- exchangeIf.call(eventData.jmpress, $(step).data("stepData"), "self", step);
- var parent = $(step).parent();
- $(parent)
- .children(eventData.settings.stepSelector)
- .each(function(idx, child) {
- var childStepData = $(child).data("stepData");
- exchangeIf.call(eventData.jmpress, childStepData, "siblings", child);
- });
- function grandchildrenFunc(idx, child) {
- var childStepData = $(child).data("stepData");
- exchangeIf.call(eventData.jmpress, childStepData, "grandchildren", child);
- }
- for(var i = 1; i < eventData.parents.length; i++) {
- $(eventData.parents[i])
- .children(eventData.settings.stepSelector)
- .each(grandchildrenFunc);
- }
- });
-}(jQuery, document, window));
-
-/*
- * jmpress.duration plugin
- * For auto advancing steps after a given duration and optionally displaying a
- * progress bar.
- */
-(function( $, document, window, undefined ) {
- 'use strict';
-
- $.jmpress("defaults").duration = {
- defaultValue: -1
- ,defaultAction: "next"
- ,barSelector: undefined
- ,barProperty: "width"
- ,barPropertyStart: "0"
- ,barPropertyEnd: "100%"
- };
- $.jmpress("initStep", function( step, eventData ) {
- eventData.stepData.duration = eventData.data.duration && parseInt(eventData.data.duration, 10);
- eventData.stepData.durationAction = eventData.data.durationAction;
- });
- $.jmpress("setInactive", function( step, eventData ) {
- var settings = eventData.settings,
- durationSettings = settings.duration,
- current = eventData.current;
- var dur = eventData.stepData.duration || durationSettings.defaultValue;
- if( current.durationTimeout ) {
- if( durationSettings.barSelector ) {
- var css = {
- transitionProperty: durationSettings.barProperty
- ,transitionDuration: '0'
- ,transitionDelay: '0'
- ,transitionTimingFunction: 'linear'
- };
- css[durationSettings.barProperty] = durationSettings.barPropertyStart;
- var bars = $(durationSettings.barSelector);
- $.jmpress("css", bars, css);
- bars.each(function(idx, element) {
- var next = $(element).next();
- var parent = $(element).parent();
- $(element).detach();
- if(next.length) {
- next.insertBefore(element);
- } else {
- parent.append(element);
- }
- });
- }
- clearTimeout(current.durationTimeout);
- delete current.durationTimeout;
- }
- });
- $.jmpress("setActive", function( step, eventData ) {
- var settings = eventData.settings,
- durationSettings = settings.duration,
- current = eventData.current;
- var dur = eventData.stepData.duration || durationSettings.defaultValue;
- if( dur && dur > 0 ) {
- if( durationSettings.barSelector ) {
- var css = {
- transitionProperty: durationSettings.barProperty
- ,transitionDuration: (dur-settings.transitionDuration*2/3-100)+"ms"
- ,transitionDelay: (settings.transitionDuration*2/3)+'ms'
- ,transitionTimingFunction: 'linear'
- };
- css[durationSettings.barProperty] = durationSettings.barPropertyEnd;
- $.jmpress("css", $(durationSettings.barSelector), css);
- }
- var jmpress = this;
- if(current.durationTimeout) {
- clearTimeout(current.durationTimeout);
- current.durationTimeout = undefined;
- }
- current.durationTimeout = setTimeout(function() {
- var action = eventData.stepData.durationAction || durationSettings.defaultAction;
- $(jmpress).jmpress(action);
- }, dur);
- }
- });
-}(jQuery, document, window));
-
-/*
- * jmpress.presentation-mode plugin
- * Display a window for the presenter with notes and a control and view of the
- * presentation
- */
-(function( $, document, window, undefined ) {
-
- 'use strict';
- var $jmpress = $.jmpress;
-
- var PREFIX = "jmpress-presentation-";
-
- /* FUNCTIONS */
- function randomString() {
- return "" + Math.round(Math.random() * 100000, 0);
- }
-
- /* DEFAULTS */
- $jmpress("defaults").presentationMode = {
- use: true,
- url: "presentation-screen.html",
- notesUrl: false,
- transferredValues: ["userZoom", "userTranslateX", "userTranslateY"]
- };
- $jmpress("defaults").keyboard.keys[80] = "presentationPopup"; // p key
-
- /* HOOKS */
- $jmpress("afterInit", function( nil, eventData) {
- var current = eventData.current;
-
- current.selectMessageListeners = [];
-
- if(eventData.settings.presentationMode.use) {
-
- window.addEventListener("message", function(event) {
- // We do not test orgin, because we want to accept messages
- // from all orgins
- try {
- if(typeof event.data !== "string" || event.data.indexOf(PREFIX) !== 0) {
- return;
- }
- var json = JSON.parse(event.data.slice(PREFIX.length));
- switch(json.type) {
- case "select":
- $.each(eventData.settings.presentationMode.transferredValues, function(idx, name) {
- eventData.current[name] = json[name];
- });
- if(/[a-z0-9\-]+/i.test(json.targetId) && typeof json.substep in {number:1,undefined:1}) {
- $(eventData.jmpress).jmpress("select", {step: "#"+json.targetId, substep: json.substep}, json.reason);
- } else {
- $.error("For security reasons the targetId must match /[a-z0-9\\-]+/i and substep must be a number.");
- }
- break;
- case "listen":
- current.selectMessageListeners.push(event.source);
- break;
- case "ok":
- clearTimeout(current.presentationPopupTimeout);
- break;
- case "read":
- try {
- event.source.postMessage(PREFIX + JSON.stringify({type: "url", url: window.location.href, notesUrl: eventData.settings.presentationMode.notesUrl}), "*");
- } catch(e) {
- $.error("Cannot post message to source: " + e);
- }
- break;
- default:
- throw "Unknown message type: " + json.type;
- }
- } catch(e) {
- $.error("Received message is malformed: " + e);
- }
- });
- try {
- if(window.parent && window.parent !== window) {
- window.parent.postMessage(PREFIX + JSON.stringify({
- "type": "afterInit"
- }), "*");
- }
- } catch(e) {
- $.error("Cannot post message to parent: " + e);
- }
- }
- });
- $jmpress("afterDeinit", function( nil, eventData) {
- if(eventData.settings.presentationMode.use) {
- try {
- if(window.parent && window.parent !== window) {
- window.parent.postMessage(PREFIX + JSON.stringify({
- "type": "afterDeinit"
- }), "*");
- }
- } catch(e) {
- $.error("Cannot post message to parent: " + e);
- }
- }
- });
- $jmpress("setActive", function( step, eventData) {
- var stepId = $(eventData.delegatedFrom).attr("id"),
- substep = eventData.substep,
- reason = eventData.reason;
- $.each(eventData.current.selectMessageListeners, function(idx, listener) {
- try {
- var msg = {
- "type": "select",
- "targetId": stepId,
- "substep": substep,
- "reason": reason
- };
- $.each(eventData.settings.presentationMode.transferredValues, function(idx, name) {
- msg[name] = eventData.current[name];
- });
- listener.postMessage(PREFIX + JSON.stringify(msg), "*");
- } catch(e) {
- $.error("Cannot post message to listener: " + e);
- }
- });
- });
- $jmpress("register", "presentationPopup", function() {
- function trySend() {
- jmpress.jmpress("current").presentationPopupTimeout = setTimeout(trySend, 100);
- try {
- popup.postMessage(PREFIX + JSON.stringify({type: "url", url: window.location.href, notesUrl: jmpress.jmpress("settings").presentationMode.notesUrl}), "*");
- } catch(e) {
- }
- }
- var jmpress = $(this),
- popup;
- if(jmpress.jmpress("settings").presentationMode.use) {
- popup = window.open($(this).jmpress("settings").presentationMode.url);
- jmpress.jmpress("current").presentationPopupTimeout = setTimeout(trySend, 100);
- }
- });
-}(jQuery, document, window));
diff --git a/plugins/jetpack/modules/shortcodes/js/jquery.cycle.min.js b/plugins/jetpack/modules/shortcodes/js/jquery.cycle.min.js
deleted file mode 100644
index 35a4d0cf..00000000
--- a/plugins/jetpack/modules/shortcodes/js/jquery.cycle.min.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!
- * jQuery Cycle Plugin (with Transition Definitions)
- * Examples and documentation at: http://jquery.malsup.com/cycle/
- * Copyright (c) 2007-2010 M. Alsup
- * Version: 2.9999.8 (26-OCT-2012)
- * Dual licensed under the MIT and GPL licenses.
- * http://jquery.malsup.com/license.html
- */
-!function(e,t){"use strict";function n(t){e.fn.cycle.debug&&i(t)}function i(){window.console&&console.log&&console.log("[cycle] "+Array.prototype.join.call(arguments," "))}function c(t,n,i){var c=e(t).data("cycle.opts");if(c){var s=!!t.cyclePause;s&&c.paused?c.paused(t,c,n,i):!s&&c.resumed&&c.resumed(t,c,n,i)}}function s(n,s,o){function l(t,n,c){if(!t&&n===!0){var s=e(c).data("cycle.opts");if(!s)return i("options not found, can not resume"),!1;c.cycleTimeout&&(clearTimeout(c.cycleTimeout),c.cycleTimeout=0),d(s.elements,s,1,!s.backwards)}}if(n.cycleStop===t&&(n.cycleStop=0),s!==t&&null!==s||(s={}),s.constructor==String){switch(s){case"destroy":case"stop":var a=e(n).data("cycle.opts");return a?(n.cycleStop++,n.cycleTimeout&&clearTimeout(n.cycleTimeout),n.cycleTimeout=0,a.elements&&e(a.elements).stop(),e(n).removeData("cycle.opts"),"destroy"==s&&r(n,a),!1):!1;case"toggle":return n.cyclePause=1===n.cyclePause?0:1,l(n.cyclePause,o,n),c(n),!1;case"pause":return n.cyclePause=1,c(n),!1;case"resume":return n.cyclePause=0,l(!1,o,n),c(n),!1;case"prev":case"next":return(a=e(n).data("cycle.opts"))?(e.fn.cycle[s](a),!1):(i('options not found, "prev/next" ignored'),!1);default:s={fx:s}}return s}if(s.constructor==Number){var f=s;return(s=e(n).data("cycle.opts"))?0>f||f>=s.elements.length?(i("invalid slide index: "+f),!1):(s.nextSlide=f,n.cycleTimeout&&(clearTimeout(n.cycleTimeout),n.cycleTimeout=0),"string"==typeof o&&(s.oneTimeFx=o),d(s.elements,s,1,f>=s.currSlide),!1):(i("options not found, can not advance slide"),!1)}return s}function o(t,n){if(!e.support.opacity&&n.cleartype&&t.style.filter)try{t.style.removeAttribute("filter")}catch(i){}}function r(t,n){n.next&&e(n.next).unbind(n.prevNextEvent),n.prev&&e(n.prev).unbind(n.prevNextEvent),(n.pager||n.pagerAnchorBuilder)&&e.each(n.pagerAnchors||[],function(){this.unbind().remove()}),n.pagerAnchors=null,e(t).unbind("mouseenter.cycle mouseleave.cycle"),n.destroy&&n.destroy(n)}function l(n,s,r,l,h){var g,x=e.extend({},e.fn.cycle.defaults,l||{},e.metadata?n.metadata():e.meta?n.data():{}),v=e.isFunction(n.data)?n.data(x.metaAttr):null;v&&(x=e.extend(x,v)),x.autostop&&(x.countdown=x.autostopCount||r.length);var w=n[0];if(n.data("cycle.opts",x),x.$cont=n,x.stopCount=w.cycleStop,x.elements=r,x.before=x.before?[x.before]:[],x.after=x.after?[x.after]:[],!e.support.opacity&&x.cleartype&&x.after.push(function(){o(this,x)}),x.continuous&&x.after.push(function(){d(r,x,0,!x.backwards)}),a(x),e.support.opacity||!x.cleartype||x.cleartypeNoBg||y(s),"static"==n.css("position")&&n.css("position","relative"),x.width&&n.width(x.width),x.height&&"auto"!=x.height&&n.height(x.height),x.startingSlide!==t?(x.startingSlide=parseInt(x.startingSlide,10),x.startingSlide>=r.length||x.startSlide<0?x.startingSlide=0:g=!0):x.backwards?x.startingSlide=r.length-1:x.startingSlide=0,x.random){x.randomMap=[];for(var b=0;b<r.length;b++)x.randomMap.push(b);if(x.randomMap.sort(function(){return Math.random()-.5}),g)for(var S=0;S<r.length;S++)x.startingSlide==x.randomMap[S]&&(x.randomIndex=S);else x.randomIndex=1,x.startingSlide=x.randomMap[1]}else x.startingSlide>=r.length&&(x.startingSlide=0);x.currSlide=x.startingSlide||0;var B=x.startingSlide;s.css({position:"absolute",top:0,left:0}).hide().each(function(t){var n;n=x.backwards?B?B>=t?r.length+(t-B):B-t:r.length-t:B?t>=B?r.length-(t-B):B-t:r.length-t,e(this).css("z-index",n)}),e(r[B]).css("opacity",1).show(),o(r[B],x),x.fit&&(x.aspect?s.each(function(){var t=e(this),n=x.aspect===!0?t.width()/t.height():x.aspect;x.width&&t.width()!=x.width&&(t.width(x.width),t.height(x.width/n)),x.height&&t.height()<x.height&&(t.height(x.height),t.width(x.height*n))}):(x.width&&s.width(x.width),x.height&&"auto"!=x.height&&s.height(x.height))),!x.center||x.fit&&!x.aspect||s.each(function(){var t=e(this);t.css({"margin-left":x.width?(x.width-t.width())/2+"px":0,"margin-top":x.height?(x.height-t.height())/2+"px":0})}),!x.center||x.fit||x.slideResize||s.each(function(){var t=e(this);t.css({"margin-left":x.width?(x.width-t.width())/2+"px":0,"margin-top":x.height?(x.height-t.height())/2+"px":0})});var I=(x.containerResize||x.containerResizeHeight)&&!n.innerHeight();if(I){for(var O=0,F=0,A=0;A<r.length;A++){var H=e(r[A]),k=H[0],T=H.outerWidth(),R=H.outerHeight();T||(T=k.offsetWidth||k.width||H.attr("width")),R||(R=k.offsetHeight||k.height||H.attr("height")),O=T>O?T:O,F=R>F?R:F}x.containerResize&&O>0&&F>0&&n.css({width:O+"px",height:F+"px"}),x.containerResizeHeight&&F>0&&n.css({height:F+"px"})}var W=!1;if(x.pause&&n.bind("mouseenter.cycle",function(){W=!0,this.cyclePause++,c(w,!0)}).bind("mouseleave.cycle",function(){W&&this.cyclePause--,c(w,!0)}),f(x)===!1)return!1;var P=!1;if(l.requeueAttempts=l.requeueAttempts||0,s.each(function(){var t=e(this);if(this.cycleH=x.fit&&x.height?x.height:t.height()||this.offsetHeight||this.height||t.attr("height")||0,this.cycleW=x.fit&&x.width?x.width:t.width()||this.offsetWidth||this.width||t.attr("width")||0,t.is("img")){var n=e.browser.msie&&28==this.cycleW&&30==this.cycleH&&!this.complete,c=e.browser.mozilla&&34==this.cycleW&&19==this.cycleH&&!this.complete,s=e.browser.opera&&(42==this.cycleW&&19==this.cycleH||37==this.cycleW&&17==this.cycleH)&&!this.complete,o=0===this.cycleH&&0===this.cycleW&&!this.complete;if(n||c||s||o){if(h.s&&x.requeueOnImageNotLoaded&&++l.requeueAttempts<100)return i(l.requeueAttempts," - img slide not loaded, requeuing slideshow: ",this.src,this.cycleW,this.cycleH),setTimeout(function(){e(h.s,h.c).cycle(l)},x.requeueTimeout),P=!0,!1;i("could not determine size of image: "+this.src,this.cycleW,this.cycleH)}}return!0}),P)return!1;if(x.cssBefore=x.cssBefore||{},x.cssAfter=x.cssAfter||{},x.cssFirst=x.cssFirst||{},x.animIn=x.animIn||{},x.animOut=x.animOut||{},s.not(":eq("+B+")").css(x.cssBefore),e(s[B]).css(x.cssFirst),x.timeout){x.timeout=parseInt(x.timeout,10),x.speed.constructor==String&&(x.speed=e.fx.speeds[x.speed]||parseInt(x.speed,10)),x.sync||(x.speed=x.speed/2);for(var z="none"==x.fx?0:"shuffle"==x.fx?500:250;x.timeout-x.speed<z;)x.timeout+=x.speed}if(x.easing&&(x.easeIn=x.easeOut=x.easing),x.speedIn||(x.speedIn=x.speed),x.speedOut||(x.speedOut=x.speed),x.slideCount=r.length,x.currSlide=x.lastSlide=B,x.random?(++x.randomIndex==r.length&&(x.randomIndex=0),x.nextSlide=x.randomMap[x.randomIndex]):x.backwards?x.nextSlide=0===x.startingSlide?r.length-1:x.startingSlide-1:x.nextSlide=x.startingSlide>=r.length-1?0:x.startingSlide+1,!x.multiFx){var C=e.fn.cycle.transitions[x.fx];if(e.isFunction(C))C(n,s,x);else if("custom"!=x.fx&&!x.multiFx)return i("unknown transition: "+x.fx,"; slideshow terminating"),!1}var E=s[B];return x.skipInitializationCallbacks||(x.before.length&&x.before[0].apply(E,[E,E,x,!0]),x.after.length&&x.after[0].apply(E,[E,E,x,!0])),x.next&&e(x.next).bind(x.prevNextEvent,function(){return p(x,1)}),x.prev&&e(x.prev).bind(x.prevNextEvent,function(){return p(x,0)}),(x.pager||x.pagerAnchorBuilder)&&m(r,x),u(x,r),x}function a(t){t.original={before:[],after:[]},t.original.cssBefore=e.extend({},t.cssBefore),t.original.cssAfter=e.extend({},t.cssAfter),t.original.animIn=e.extend({},t.animIn),t.original.animOut=e.extend({},t.animOut),e.each(t.before,function(){t.original.before.push(this)}),e.each(t.after,function(){t.original.after.push(this)})}function f(t){var c,s,o=e.fn.cycle.transitions;if(t.fx.indexOf(",")>0){for(t.multiFx=!0,t.fxs=t.fx.replace(/\s*/g,"").split(","),c=0;c<t.fxs.length;c++){var r=t.fxs[c];s=o[r],s&&o.hasOwnProperty(r)&&e.isFunction(s)||(i("discarding unknown transition: ",r),t.fxs.splice(c,1),c--)}if(!t.fxs.length)return i("No valid transitions named; slideshow terminating."),!1}else if("all"==t.fx){t.multiFx=!0,t.fxs=[];for(var l in o)o.hasOwnProperty(l)&&(s=o[l],o.hasOwnProperty(l)&&e.isFunction(s)&&t.fxs.push(l))}if(t.multiFx&&t.randomizeEffects){var a=Math.floor(20*Math.random())+30;for(c=0;a>c;c++){var f=Math.floor(Math.random()*t.fxs.length);t.fxs.push(t.fxs.splice(f,1)[0])}n("randomized fx sequence: ",t.fxs)}return!0}function u(t,n){t.addSlide=function(i,c){var s=e(i),o=s[0];t.autostopCount||t.countdown++,n[c?"unshift":"push"](o),t.els&&t.els[c?"unshift":"push"](o),t.slideCount=n.length,t.random&&(t.randomMap.push(t.slideCount-1),t.randomMap.sort(function(){return Math.random()-.5})),s.css("position","absolute"),s[c?"prependTo":"appendTo"](t.$cont),c&&(t.currSlide++,t.nextSlide++),e.support.opacity||!t.cleartype||t.cleartypeNoBg||y(s),t.fit&&t.width&&s.width(t.width),t.fit&&t.height&&"auto"!=t.height&&s.height(t.height),o.cycleH=t.fit&&t.height?t.height:s.height(),o.cycleW=t.fit&&t.width?t.width:s.width(),s.css(t.cssBefore),(t.pager||t.pagerAnchorBuilder)&&e.fn.cycle.createPagerAnchor(n.length-1,o,e(t.pager),n,t),e.isFunction(t.onAddSlide)?t.onAddSlide(s):s.hide()}}function d(i,c,s,o){function r(){var e=0;c.timeout;c.timeout&&!c.continuous?(e=h(i[c.currSlide],i[c.nextSlide],c,o),"shuffle"==c.fx&&(e-=c.speedOut)):c.continuous&&l.cyclePause&&(e=10),e>0&&(l.cycleTimeout=setTimeout(function(){d(i,c,0,!c.backwards)},e))}var l=c.$cont[0],a=i[c.currSlide],f=i[c.nextSlide];if(s&&c.busy&&c.manualTrump&&(n("manualTrump in go(), stopping active transition"),e(i).stop(!0,!0),c.busy=0,clearTimeout(l.cycleTimeout)),c.busy)return void n("transition active, ignoring new tx request");if(l.cycleStop==c.stopCount&&(0!==l.cycleTimeout||s)){if(!s&&!l.cyclePause&&!c.bounce&&(c.autostop&&--c.countdown<=0||c.nowrap&&!c.random&&c.nextSlide<c.currSlide))return void(c.end&&c.end(c));var u=!1;if(!s&&l.cyclePause||c.nextSlide==c.currSlide)r();else{u=!0;var p=c.fx;a.cycleH=a.cycleH||e(a).height(),a.cycleW=a.cycleW||e(a).width(),f.cycleH=f.cycleH||e(f).height(),f.cycleW=f.cycleW||e(f).width(),c.multiFx&&(o&&(c.lastFx===t||++c.lastFx>=c.fxs.length)?c.lastFx=0:!o&&(c.lastFx===t||--c.lastFx<0)&&(c.lastFx=c.fxs.length-1),p=c.fxs[c.lastFx]),c.oneTimeFx&&(p=c.oneTimeFx,c.oneTimeFx=null),e.fn.cycle.resetState(c,p),c.before.length&&e.each(c.before,function(e,t){l.cycleStop==c.stopCount&&t.apply(f,[a,f,c,o])});var m=function(){c.busy=0,e.each(c.after,function(e,t){l.cycleStop==c.stopCount&&t.apply(f,[a,f,c,o])}),l.cycleStop||r()};n("tx firing("+p+"); currSlide: "+c.currSlide+"; nextSlide: "+c.nextSlide),c.busy=1,c.fxFn?c.fxFn(a,f,c,m,o,s&&c.fastOnEvent):e.isFunction(e.fn.cycle[c.fx])?e.fn.cycle[c.fx](a,f,c,m,o,s&&c.fastOnEvent):e.fn.cycle.custom(a,f,c,m,o,s&&c.fastOnEvent)}if(u||c.nextSlide==c.currSlide){var y;c.lastSlide=c.currSlide,c.random?(c.currSlide=c.nextSlide,++c.randomIndex==i.length&&(c.randomIndex=0,c.randomMap.sort(function(){return Math.random()-.5})),c.nextSlide=c.randomMap[c.randomIndex],c.nextSlide==c.currSlide&&(c.nextSlide=c.currSlide==c.slideCount-1?0:c.currSlide+1)):c.backwards?(y=c.nextSlide-1<0,y&&c.bounce?(c.backwards=!c.backwards,c.nextSlide=1,c.currSlide=0):(c.nextSlide=y?i.length-1:c.nextSlide-1,c.currSlide=y?0:c.nextSlide+1)):(y=c.nextSlide+1==i.length,y&&c.bounce?(c.backwards=!c.backwards,c.nextSlide=i.length-2,c.currSlide=i.length-1):(c.nextSlide=y?0:c.nextSlide+1,c.currSlide=y?i.length-1:c.nextSlide-1))}u&&c.pager&&c.updateActivePagerLink(c.pager,c.currSlide,c.activePagerClass)}}function h(e,t,i,c){if(i.timeoutFn){for(var s=i.timeoutFn.call(e,e,t,i,c);"none"!=i.fx&&s-i.speed<250;)s+=i.speed;if(n("calculated timeout: "+s+"; speed: "+i.speed),s!==!1)return s}return i.timeout}function p(t,n){var i=n?1:-1,c=t.elements,s=t.$cont[0],o=s.cycleTimeout;if(o&&(clearTimeout(o),s.cycleTimeout=0),t.random&&0>i)t.randomIndex--,-2==--t.randomIndex?t.randomIndex=c.length-2:-1==t.randomIndex&&(t.randomIndex=c.length-1),t.nextSlide=t.randomMap[t.randomIndex];else if(t.random)t.nextSlide=t.randomMap[t.randomIndex];else if(t.nextSlide=t.currSlide+i,t.nextSlide<0){if(t.nowrap)return!1;t.nextSlide=c.length-1}else if(t.nextSlide>=c.length){if(t.nowrap)return!1;t.nextSlide=0}var r=t.onPrevNextEvent||t.prevNextClick;return e.isFunction(r)&&r(i>0,t.nextSlide,c[t.nextSlide]),d(c,t,1,n),!1}function m(t,n){var i=e(n.pager);e.each(t,function(c,s){e.fn.cycle.createPagerAnchor(c,s,i,t,n)}),n.updateActivePagerLink(n.pager,n.startingSlide,n.activePagerClass)}function y(t){function i(e){return e=parseInt(e,10).toString(16),e.length<2?"0"+e:e}function c(t){for(;t&&"html"!=t.nodeName.toLowerCase();t=t.parentNode){var n=e.css(t,"background-color");if(n&&n.indexOf("rgb")>=0){var c=n.match(/\d+/g);return"#"+i(c[0])+i(c[1])+i(c[2])}if(n&&"transparent"!=n)return n}return"#ffffff"}n("applying clearType background-color hack"),t.each(function(){e(this).css("background-color",c(this))})}var g="2.9999.8";e.support===t&&(e.support={opacity:!e.browser.msie}),e.expr[":"].paused=function(e){return e.cyclePause},e.fn.cycle=function(t,c){var o={s:this.selector,c:this.context};return 0===this.length&&"stop"!=t?!e.isReady&&o.s?(i("DOM not ready, queuing slideshow"),e(function(){e(o.s,o.c).cycle(t,c)}),this):(i("terminating; zero elements found by selector"+(e.isReady?"":" (DOM not ready)")),this):this.each(function(){var r=s(this,t,c);if(r!==!1){r.updateActivePagerLink=r.updateActivePagerLink||e.fn.cycle.updateActivePagerLink,this.cycleTimeout&&clearTimeout(this.cycleTimeout),this.cycleTimeout=this.cyclePause=0,this.cycleStop=0;var a=e(this),f=r.slideExpr?e(r.slideExpr,this):a.children(),u=f.get();if(u.length<2)return void i("terminating; too few slides: "+u.length);var p=l(a,f,u,r,o);if(p!==!1){var m=p.continuous?10:h(u[p.currSlide],u[p.nextSlide],p,!p.backwards);m&&(m+=p.delay||0,10>m&&(m=10),n("first timeout: "+m),this.cycleTimeout=setTimeout(function(){d(u,p,0,!r.backwards)},m))}}})},e.fn.cycle.resetState=function(t,n){n=n||t.fx,t.before=[],t.after=[],t.cssBefore=e.extend({},t.original.cssBefore),t.cssAfter=e.extend({},t.original.cssAfter),t.animIn=e.extend({},t.original.animIn),t.animOut=e.extend({},t.original.animOut),t.fxFn=null,e.each(t.original.before,function(){t.before.push(this)}),e.each(t.original.after,function(){t.after.push(this)});var i=e.fn.cycle.transitions[n];e.isFunction(i)&&i(t.$cont,e(t.elements),t)},e.fn.cycle.updateActivePagerLink=function(t,n,i){e(t).each(function(){e(this).children().removeClass(i).eq(n).addClass(i)})},e.fn.cycle.next=function(e){p(e,1)},e.fn.cycle.prev=function(e){p(e,0)},e.fn.cycle.createPagerAnchor=function(t,i,s,o,r){var l;if(e.isFunction(r.pagerAnchorBuilder)?(l=r.pagerAnchorBuilder(t,i),n("pagerAnchorBuilder("+t+", el) returned: "+l)):l='<a href="#">'+(t+1)+"</a>",l){var a=e(l);if(0===a.parents("body").length){var f=[];s.length>1?(s.each(function(){var t=a.clone(!0);e(this).append(t),f.push(t[0])}),a=e(f)):a.appendTo(s)}r.pagerAnchors=r.pagerAnchors||[],r.pagerAnchors.push(a);var u=function(n){n.preventDefault(),r.nextSlide=t;var i=r.$cont[0],c=i.cycleTimeout;c&&(clearTimeout(c),i.cycleTimeout=0);var s=r.onPagerEvent||r.pagerClick;e.isFunction(s)&&s(r.nextSlide,o[r.nextSlide]),d(o,r,1,r.currSlide<t)};/mouseenter|mouseover/i.test(r.pagerEvent)?a.hover(u,function(){}):a.bind(r.pagerEvent,u),/^click/.test(r.pagerEvent)||r.allowPagerClickBubble||a.bind("click.cycle",function(){return!1});var h=r.$cont[0],p=!1;r.pauseOnPagerHover&&a.hover(function(){p=!0,h.cyclePause++,c(h,!0,!0)},function(){p&&h.cyclePause--,c(h,!0,!0)})}},e.fn.cycle.hopsFromLast=function(e,t){var n,i=e.lastSlide,c=e.currSlide;return n=t?c>i?c-i:e.slideCount-i:i>c?i-c:i+e.slideCount-c},e.fn.cycle.commonReset=function(t,n,i,c,s,o){e(i.elements).not(t).hide(),"undefined"==typeof i.cssBefore.opacity&&(i.cssBefore.opacity=1),i.cssBefore.display="block",i.slideResize&&c!==!1&&n.cycleW>0&&(i.cssBefore.width=n.cycleW),i.slideResize&&s!==!1&&n.cycleH>0&&(i.cssBefore.height=n.cycleH),i.cssAfter=i.cssAfter||{},i.cssAfter.display="none",e(t).css("zIndex",i.slideCount+(o===!0?1:0)),e(n).css("zIndex",i.slideCount+(o===!0?0:1))},e.fn.cycle.custom=function(t,n,i,c,s,o){var r=e(t),l=e(n),a=i.speedIn,f=i.speedOut,u=i.easeIn,d=i.easeOut;l.css(i.cssBefore),o&&(a=f="number"==typeof o?o:1,u=d=null);var h=function(){l.animate(i.animIn,a,u,function(){c()})};r.animate(i.animOut,f,d,function(){r.css(i.cssAfter),i.sync||h()}),i.sync&&h()},e.fn.cycle.transitions={fade:function(t,n,i){n.not(":eq("+i.currSlide+")").css("opacity",0),i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i),i.cssBefore.opacity=0}),i.animIn={opacity:1},i.animOut={opacity:0},i.cssBefore={top:0,left:0}}},e.fn.cycle.ver=function(){return g},e.fn.cycle.defaults={activePagerClass:"activeSlide",after:null,allowPagerClickBubble:!1,animIn:null,animOut:null,aspect:!1,autostop:0,autostopCount:0,backwards:!1,before:null,center:null,cleartype:!e.support.opacity,cleartypeNoBg:!1,containerResize:1,containerResizeHeight:0,continuous:0,cssAfter:null,cssBefore:null,delay:0,easeIn:null,easeOut:null,easing:null,end:null,fastOnEvent:0,fit:0,fx:"fade",fxFn:null,height:"auto",manualTrump:!0,metaAttr:"cycle",next:null,nowrap:0,onPagerEvent:null,onPrevNextEvent:null,pager:null,pagerAnchorBuilder:null,pagerEvent:"click.cycle",pause:0,pauseOnPagerHover:0,prev:null,prevNextEvent:"click.cycle",random:0,randomizeEffects:1,requeueOnImageNotLoaded:!0,requeueTimeout:250,rev:0,shuffle:null,skipInitializationCallbacks:!1,slideExpr:null,slideResize:1,speed:1e3,speedIn:null,speedOut:null,startingSlide:t,sync:1,timeout:4e3,timeoutFn:null,updateActivePagerLink:null,width:null}}(jQuery),function(e){"use strict";e.fn.cycle.transitions.none=function(t,n,i){i.fxFn=function(t,n,i,c){e(n).show(),e(t).hide(),c()}},e.fn.cycle.transitions.fadeout=function(t,n,i){n.not(":eq("+i.currSlide+")").css({display:"block",opacity:1}),i.before.push(function(t,n,i,c,s,o){e(t).css("zIndex",i.slideCount+(o!==!0?1:0)),e(n).css("zIndex",i.slideCount+(o!==!0?0:1))}),i.animIn.opacity=1,i.animOut.opacity=0,i.cssBefore.opacity=1,i.cssBefore.display="block",i.cssAfter.zIndex=0},e.fn.cycle.transitions.scrollUp=function(t,n,i){t.css("overflow","hidden"),i.before.push(e.fn.cycle.commonReset);var c=t.height();i.cssBefore.top=c,i.cssBefore.left=0,i.cssFirst.top=0,i.animIn.top=0,i.animOut.top=-c},e.fn.cycle.transitions.scrollDown=function(t,n,i){t.css("overflow","hidden"),i.before.push(e.fn.cycle.commonReset);var c=t.height();i.cssFirst.top=0,i.cssBefore.top=-c,i.cssBefore.left=0,i.animIn.top=0,i.animOut.top=c},e.fn.cycle.transitions.scrollLeft=function(t,n,i){t.css("overflow","hidden"),i.before.push(e.fn.cycle.commonReset);var c=t.width();i.cssFirst.left=0,i.cssBefore.left=c,i.cssBefore.top=0,i.animIn.left=0,i.animOut.left=0-c},e.fn.cycle.transitions.scrollRight=function(t,n,i){t.css("overflow","hidden"),i.before.push(e.fn.cycle.commonReset);var c=t.width();i.cssFirst.left=0,i.cssBefore.left=-c,i.cssBefore.top=0,i.animIn.left=0,i.animOut.left=c},e.fn.cycle.transitions.scrollHorz=function(t,n,i){t.css("overflow","hidden").width(),i.before.push(function(t,n,i,c){i.rev&&(c=!c),e.fn.cycle.commonReset(t,n,i),i.cssBefore.left=c?n.cycleW-1:1-n.cycleW,i.animOut.left=c?-t.cycleW:t.cycleW}),i.cssFirst.left=0,i.cssBefore.top=0,i.animIn.left=0,i.animOut.top=0},e.fn.cycle.transitions.scrollVert=function(t,n,i){t.css("overflow","hidden"),i.before.push(function(t,n,i,c){i.rev&&(c=!c),e.fn.cycle.commonReset(t,n,i),i.cssBefore.top=c?1-n.cycleH:n.cycleH-1,i.animOut.top=c?t.cycleH:-t.cycleH}),i.cssFirst.top=0,i.cssBefore.left=0,i.animIn.top=0,i.animOut.left=0},e.fn.cycle.transitions.slideX=function(t,n,i){i.before.push(function(t,n,i){e(i.elements).not(t).hide(),e.fn.cycle.commonReset(t,n,i,!1,!0),i.animIn.width=n.cycleW}),i.cssBefore.left=0,i.cssBefore.top=0,i.cssBefore.width=0,i.animIn.width="show",i.animOut.width=0},e.fn.cycle.transitions.slideY=function(t,n,i){i.before.push(function(t,n,i){e(i.elements).not(t).hide(),e.fn.cycle.commonReset(t,n,i,!0,!1),i.animIn.height=n.cycleH}),i.cssBefore.left=0,i.cssBefore.top=0,i.cssBefore.height=0,i.animIn.height="show",i.animOut.height=0},e.fn.cycle.transitions.shuffle=function(t,n,i){var c,s=t.css("overflow","visible").width();for(n.css({left:0,top:0}),i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!0,!0,!0)}),i.speedAdjusted||(i.speed=i.speed/2,i.speedAdjusted=!0),i.random=0,i.shuffle=i.shuffle||{left:-s,top:15},i.els=[],c=0;c<n.length;c++)i.els.push(n[c]);for(c=0;c<i.currSlide;c++)i.els.push(i.els.shift());i.fxFn=function(t,n,i,c,s){i.rev&&(s=!s);var o=e(s?t:n);e(n).css(i.cssBefore);var r=i.slideCount;o.animate(i.shuffle,i.speedIn,i.easeIn,function(){for(var n=e.fn.cycle.hopsFromLast(i,s),l=0;n>l;l++)s?i.els.push(i.els.shift()):i.els.unshift(i.els.pop());if(s)for(var a=0,f=i.els.length;f>a;a++)e(i.els[a]).css("z-index",f-a+r);else{var u=e(t).css("z-index");o.css("z-index",parseInt(u,10)+1+r)}o.animate({left:0,top:0},i.speedOut,i.easeOut,function(){e(s?this:t).hide(),c&&c()})})},e.extend(i.cssBefore,{display:"block",opacity:1,top:0,left:0})},e.fn.cycle.transitions.turnUp=function(t,n,i){i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!0,!1),i.cssBefore.top=n.cycleH,i.animIn.height=n.cycleH,i.animOut.width=n.cycleW}),i.cssFirst.top=0,i.cssBefore.left=0,i.cssBefore.height=0,i.animIn.top=0,i.animOut.height=0},e.fn.cycle.transitions.turnDown=function(t,n,i){i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!0,!1),i.animIn.height=n.cycleH,i.animOut.top=t.cycleH}),i.cssFirst.top=0,i.cssBefore.left=0,i.cssBefore.top=0,i.cssBefore.height=0,i.animOut.height=0},e.fn.cycle.transitions.turnLeft=function(t,n,i){i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!1,!0),i.cssBefore.left=n.cycleW,i.animIn.width=n.cycleW}),i.cssBefore.top=0,i.cssBefore.width=0,i.animIn.left=0,i.animOut.width=0},e.fn.cycle.transitions.turnRight=function(t,n,i){i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!1,!0),i.animIn.width=n.cycleW,i.animOut.left=t.cycleW}),e.extend(i.cssBefore,{top:0,left:0,width:0}),i.animIn.left=0,i.animOut.width=0},e.fn.cycle.transitions.zoom=function(t,n,i){i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!1,!1,!0),i.cssBefore.top=n.cycleH/2,i.cssBefore.left=n.cycleW/2,e.extend(i.animIn,{top:0,left:0,width:n.cycleW,height:n.cycleH}),e.extend(i.animOut,{width:0,height:0,top:t.cycleH/2,left:t.cycleW/2})}),i.cssFirst.top=0,i.cssFirst.left=0,i.cssBefore.width=0,i.cssBefore.height=0},e.fn.cycle.transitions.fadeZoom=function(t,n,i){i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!1,!1),i.cssBefore.left=n.cycleW/2,i.cssBefore.top=n.cycleH/2,e.extend(i.animIn,{top:0,left:0,width:n.cycleW,height:n.cycleH})}),i.cssBefore.width=0,i.cssBefore.height=0,i.animOut.opacity=0},e.fn.cycle.transitions.blindX=function(t,n,i){var c=t.css("overflow","hidden").width();i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i),i.animIn.width=n.cycleW,i.animOut.left=t.cycleW}),i.cssBefore.left=c,i.cssBefore.top=0,i.animIn.left=0,i.animOut.left=c},e.fn.cycle.transitions.blindY=function(t,n,i){var c=t.css("overflow","hidden").height();i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i),i.animIn.height=n.cycleH,i.animOut.top=t.cycleH}),i.cssBefore.top=c,i.cssBefore.left=0,i.animIn.top=0,i.animOut.top=c},e.fn.cycle.transitions.blindZ=function(t,n,i){var c=t.css("overflow","hidden").height(),s=t.width();i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i),i.animIn.height=n.cycleH,i.animOut.top=t.cycleH}),i.cssBefore.top=c,i.cssBefore.left=s,i.animIn.top=0,i.animIn.left=0,i.animOut.top=c,i.animOut.left=s},e.fn.cycle.transitions.growX=function(t,n,i){i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!1,!0),i.cssBefore.left=this.cycleW/2,i.animIn.left=0,i.animIn.width=this.cycleW,i.animOut.left=0}),i.cssBefore.top=0,i.cssBefore.width=0},e.fn.cycle.transitions.growY=function(t,n,i){i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!0,!1),i.cssBefore.top=this.cycleH/2,i.animIn.top=0,i.animIn.height=this.cycleH,i.animOut.top=0}),i.cssBefore.height=0,i.cssBefore.left=0},e.fn.cycle.transitions.curtainX=function(t,n,i){i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!1,!0,!0),i.cssBefore.left=n.cycleW/2,i.animIn.left=0,i.animIn.width=this.cycleW,i.animOut.left=t.cycleW/2,i.animOut.width=0}),i.cssBefore.top=0,i.cssBefore.width=0},e.fn.cycle.transitions.curtainY=function(t,n,i){i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!0,!1,!0),i.cssBefore.top=n.cycleH/2,i.animIn.top=0,i.animIn.height=n.cycleH,i.animOut.top=t.cycleH/2,i.animOut.height=0}),i.cssBefore.height=0,i.cssBefore.left=0},e.fn.cycle.transitions.cover=function(t,n,i){var c=i.direction||"left",s=t.css("overflow","hidden").width(),o=t.height();i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i),i.cssAfter.display="","right"==c?i.cssBefore.left=-s:"up"==c?i.cssBefore.top=o:"down"==c?i.cssBefore.top=-o:i.cssBefore.left=s}),i.animIn.left=0,i.animIn.top=0,i.cssBefore.top=0,i.cssBefore.left=0},e.fn.cycle.transitions.uncover=function(t,n,i){var c=i.direction||"left",s=t.css("overflow","hidden").width(),o=t.height();i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!0,!0,!0),"right"==c?i.animOut.left=s:"up"==c?i.animOut.top=-o:"down"==c?i.animOut.top=o:i.animOut.left=-s}),i.animIn.left=0,i.animIn.top=0,i.cssBefore.top=0,i.cssBefore.left=0},e.fn.cycle.transitions.toss=function(t,n,i){var c=t.css("overflow","visible").width(),s=t.height();i.before.push(function(t,n,i){e.fn.cycle.commonReset(t,n,i,!0,!0,!0),i.animOut.left||i.animOut.top?i.animOut.opacity=0:e.extend(i.animOut,{left:2*c,top:-s/2,opacity:0})}),i.cssBefore.left=0,i.cssBefore.top=0,i.animIn.left=0},e.fn.cycle.transitions.wipe=function(t,n,i){var c=t.css("overflow","hidden").width(),s=t.height();i.cssBefore=i.cssBefore||{};var o;if(i.clip)if(/l2r/.test(i.clip))o="rect(0px 0px "+s+"px 0px)";else if(/r2l/.test(i.clip))o="rect(0px "+c+"px "+s+"px "+c+"px)";else if(/t2b/.test(i.clip))o="rect(0px "+c+"px 0px 0px)";else if(/b2t/.test(i.clip))o="rect("+s+"px "+c+"px "+s+"px 0px)";else if(/zoom/.test(i.clip)){var r=parseInt(s/2,10),l=parseInt(c/2,10);o="rect("+r+"px "+l+"px "+r+"px "+l+"px)"}i.cssBefore.clip=i.cssBefore.clip||o||"rect(0px 0px 0px 0px)";var a=i.cssBefore.clip.match(/(\d+)/g),f=parseInt(a[0],10),u=parseInt(a[1],10),d=parseInt(a[2],10),h=parseInt(a[3],10);i.before.push(function(t,n,i){if(t!=n){var o=e(t),r=e(n);e.fn.cycle.commonReset(t,n,i,!0,!0,!1),i.cssAfter.display="block";var l=1,a=parseInt(i.speedIn/13,10)-1;!function p(){var e=f?f-parseInt(l*(f/a),10):0,t=h?h-parseInt(l*(h/a),10):0,n=s>d?d+parseInt(l*((s-d)/a||1),10):s,i=c>u?u+parseInt(l*((c-u)/a||1),10):c;r.css({clip:"rect("+e+"px "+i+"px "+n+"px "+t+"px)"}),l++<=a?setTimeout(p,13):o.css("display","none")}()}}),e.extend(i.cssBefore,{display:"block",opacity:1,top:0,left:0}),i.animIn={left:0},i.animOut={left:0}}}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/modules/shortcodes/js/main.js b/plugins/jetpack/modules/shortcodes/js/main.js
deleted file mode 100644
index c6ed9d07..00000000
--- a/plugins/jetpack/modules/shortcodes/js/main.js
+++ /dev/null
@@ -1,258 +0,0 @@
-(function($){
- var jmpressOpts = {
- fullscreen : false,
- hash : { use : false },
- mouse : { clickSelects : false },
- keyboard : { use : true },
- animation : { transitionDuration : '1s' },
- presentationMode : false,
- stepSelector : '.step',
- duration : {
- defaultValue: 0
- }
- };
-
- /**
- * Presentation constructor
- */
- function Presentation (wrapper) {
- var _self, duration, new_css, ie_regex, matches;
-
- _self = this;
-
- _self.wrapper = $(wrapper); // The wrapper for toggling fullscreen
- _self.slideshow = $('.presentation', wrapper); // Holds the slides for jmpress
- _self.navLeft = $('.nav-arrow-left', wrapper);
- _self.navRight = $('.nav-arrow-right', wrapper);
- _self.expandButton = $('.nav-fullscreen-button', wrapper);
- _self.overlay = $('.autoplay-overlay', wrapper);
- _self.fullscreen = false;
- _self.autoPlaying = false;
- _self.autoplayTime = parseFloat(_self.slideshow.attr('data-autoplay'), 10) || 0;
-
- // The wrapper is scaled to the contents' size so that its border wraps tightly
- _self.wrapper.css({
- width: _self.slideshow.width(),
- height: _self.slideshow.height()
- });
-
- duration = _self.slideshow.attr('duration') || '1s';
- jmpressOpts.animation.transitionDuration = duration;
-
- // Compensate for transition times
- if( _self.autoplayTime ) {
- _self.autoplayTime += parseFloat(duration, 10) * 1000;
- }
-
- // Set the opacity transition duration
- // as it is delegated by css and not jmpress
- duration = 'opacity ' + duration;
- new_css = {
- 'width' : _self.slideshow.width(),
- 'height' : _self.slideshow.height(),
- '-webkit-transition': duration,
- '-moz-transition' : duration,
- '-ms-transition' : duration,
- '-o-transition' : duration,
- 'transition' : duration
- };
-
- $('.step', _self.slideshow).each(function(i, step) {
- $(step).css(new_css);
- });
-
- // Apply attribute to allow fading individual bullets here,
- // otherwise wp_kses will strip the attribute out
- $('.step.fadebullets li', _self.slideshow).each(function(i, step) {
- $(step).attr('data-jmpress', 'fade');
- });
-
- // Register resizing to window when fullscreen
- $(window).resize(function() {
- if ( _self.fullscreen ) {
- _self.resizePresentation();
- }
- });
-
- // Register the nav bars to move the slides
- _self.navLeft.on('click', function(){
- _self.slideshow.jmpress('prev');
- _self.overlay.css('opacity', 0);
- return false;
- });
-
- _self.navRight.on('click', function(){
- _self.slideshow.jmpress('next');
- _self.overlay.css('opacity', 0);
- return false;
- });
-
- _self.slideshow.on('click', function() {
- _self.setAutoplay(true);
- return false;
- });
-
- _self.slideshow.on('focusout', function() {
- _self.setAutoplay(false);
- });
-
- // Register toggling fullscreen except for IE 9 or lower
- ie_regex = /MSIE\s(\d+)\.\d+/;
- matches = ie_regex.exec(navigator.userAgent);
-
- if ( matches && parseInt(matches[1], 10) < 10 ) {
- _self.expandButton.remove();
- _self.expandButton = null;
- } else {
- _self.expandButton.on('click', function() {
- _self.setFullscreen( !_self.fullscreen );
- return false;
- });
- }
-
- // Register ESC key to exit fullscreen
- $(window).on('keydown', function( event ) {
- if ( event.which === 27 ) {
- _self.setFullscreen( false );
- }
- });
-
- // Start the presentation
- _self.slideshow.jmpress(jmpressOpts);
-
- // Make content visible and remove error message on jmpress success
- if ( _self.slideshow.jmpress('initialized') ) {
- _self.slideshow.css('display', '');
- _self.overlay.css('display', '');
- $('.not-supported-msg', _self.wrapper).remove();
- }
-
- // A bug in Firefox causes issues with the nav arrows appearing
- // on hover in presentation mode. Explicitly disabling fullscreen
- // on init seems to fix the issue
- _self.setFullscreen( false );
- }
-
- $.extend( Presentation.prototype, {
- resizePresentation: function () {
- var scale, duration, settings, new_css, widthScale, heightScale;
-
- // Set the animation duration to 0 during resizing
- // so that there isn't an animation delay when scaling
- // up the slide contents
- settings = this.slideshow.jmpress('settings');
- duration = settings.animation.transitionDuration;
-
- settings.animation.transitionDuration = '0s';
- this.slideshow.jmpress('reselect');
-
- scale = 1;
- new_css = {
- top : 0,
- left : 0,
- zoom : 1
- };
-
- // Expand the presentation to fill the lesser of the max width or height
- // This avoids content moving past the window for certain window sizes
- if ( this.fullscreen ) {
- widthScale = $(window).width() / this.slideshow.width();
- heightScale = $(window).height() / this.slideshow.height();
-
- scale = Math.min(widthScale, heightScale);
-
- new_css.top = ( $(window).height() - (scale * this.slideshow.height()) ) / 2;
- new_css.left = ( $(window).width() - (scale * this.slideshow.width() ) ) / 2;
- }
-
- // Firefox does not support the zoom property; IE does, but it does not work
- // well like in webkit, so we manually transform and position the slideshow
- if ( this.slideshow.css('-moz-transform') || this.slideshow.css('-ms-transform') ) {
- // Firefox keeps the center of the element in place and expands outward
- // so we must shift everything to compensate
- new_css.top += (scale - 1) * this.slideshow.height() / 2;
- new_css.left += (scale - 1) * this.slideshow.width() / 2;
-
- scale = 'scale(' + scale + ')';
-
- $.extend(new_css, {
- '-moz-transform' : scale,
- '-ms-transform' : scale,
- 'transform' : scale
- });
- } else {
- // webkit scales everything with zoom so we need to offset the right amount
- // so that the content is vertically centered after scaling effects
- new_css.top /= scale;
- new_css.left /= scale;
- new_css.zoom = scale;
- }
-
- this.slideshow.css(new_css);
-
- settings.animation.transitionDuration = duration;
- this.slideshow.jmpress('reselect');
- },
-
- setFullscreen: function ( on ) {
- this.fullscreen = on;
- this.setAutoplay(false);
-
- // Save the scroll positions before going into fullscreen mode
- if ( on ) {
- this.scrollVert = $(window).scrollTop();
- this.scrollHoriz = $(window).scrollLeft();
-
- // Chrome Bug: Force scroll to be at top
- // otherwise the presentation can end up offscreen
- $(window).scrollTop(0);
- $(window).scrollLeft(0);
- }
-
- $('html').toggleClass('presentation-global-fullscreen', on);
- $('body').toggleClass('presentation-global-fullscreen', on);
-
- this.wrapper.toggleClass('presentation-wrapper-fullscreen', on);
-
- this.wrapper.parents().each(function(i, e){
- $(e).toggleClass('presentation-wrapper-fullscreen-parent', on);
- });
-
- this.resizePresentation();
-
- // Reset the scroll positions after exiting fullscreen mode
- if ( !on ) {
- $(window).scrollTop(this.scrollVert);
- $(window).scrollLeft(this.scrollHoriz);
- }
- },
-
- setAutoplay: function ( on ) {
- var _self = this, newAutoplayTime;
-
- if ( _self.autoPlaying === on ) {
- return;
- }
-
- newAutoplayTime = (on && _self.autoplayTime > 0) ? _self.autoplayTime : 0;
- _self.slideshow.jmpress('settings').duration.defaultValue = newAutoplayTime;
-
- // Move to the next slide when activating autoplay
- if( newAutoplayTime ) {
- _self.slideshow.jmpress('next');
- _self.overlay.css('opacity', 0);
- } else {
- _self.slideshow.jmpress('reselect');
- }
-
- _self.autoPlaying = on;
- }
- });
-
- $( document ).ready( function(){
- $('.presentation-wrapper').map(function() {
- new Presentation(this);
- });
- });
-
-})(jQuery);
diff --git a/plugins/jetpack/modules/shortcodes/js/quiz.js b/plugins/jetpack/modules/shortcodes/js/quiz.js
deleted file mode 100644
index 5a43c9bc..00000000
--- a/plugins/jetpack/modules/shortcodes/js/quiz.js
+++ /dev/null
@@ -1,55 +0,0 @@
-(function($){
- $.fn.shuffleQuiz = function() {
- var allElems = this.get(),
- getRandom = function(max) {
- return Math.floor(Math.random() * max);
- },
- shuffled = $.map(allElems, function(){
- var random = getRandom(allElems.length),
- randEl = $(allElems[random]).clone(true)[0];
- allElems.splice(random, 1);
- return randEl;
- });
-
- this.each(function(i){
- $(this).replaceWith($(shuffled[i]));
- });
-
- return $(shuffled);
- };
-})(jQuery);
-
-jQuery( function( $ ) {
- $( '.jetpack-quiz' ).each( function() {
- var quiz = $(this);
- quiz.find( 'div.jetpack-quiz-answer' ).shuffleQuiz();
- quiz.find( 'div[data-correct]' ).removeAttr( 'data-correct' ).data( 'correct', 1 );
- quiz.find( 'div.jetpack-quiz-answer:last' ).addClass( 'last' );
- });
-
- $( 'div.jetpack-quiz' ).on( 'click', 'div.jetpack-quiz-answer', function() {
- var trackid, answer = $( this ),
- quiz = answer.closest( 'div.jetpack-quiz' );
-
- if ( quiz.data( 'a8ctraining' ) ) {
- new Image().src = '//pixel.wp.com/b.gif?v=wpcom-no-pv&x_trainingchaos-' + quiz.data( 'username' ) + '=' + quiz.data( 'a8ctraining' ) + '&rand=' + Math.random();
- quiz.data( 'a8ctraining', false );
- quiz.data( 'trackid', false );
- }
-
- trackid = quiz.data( 'trackid' );
- if ( answer.data( 'correct' ) ) {
- answer.addClass( 'correct' );
- if ( trackid ) {
- new Image().src = '//pixel.wp.com/b.gif?v=wpcom-no-pv&x_quiz-' + trackid + '=correct&rand=' + Math.random();
- }
- } else {
- answer.addClass( 'wrong' );
- if ( trackid ) {
- new Image().src = '//pixel.wp.com/b.gif?v=wpcom-no-pv&x_quiz-' + trackid + '=wrong&rand=' + Math.random();
- }
- }
- // only track the first answer
- quiz.data( 'trackid', false );
- });
-} );
diff --git a/plugins/jetpack/modules/shortcodes/js/recipes-printthis.js b/plugins/jetpack/modules/shortcodes/js/recipes-printthis.js
deleted file mode 100644
index 4561642d..00000000
--- a/plugins/jetpack/modules/shortcodes/js/recipes-printthis.js
+++ /dev/null
@@ -1,289 +0,0 @@
-// jshint ignore: start
-/*
- * printThis v1.9.0
- * @desc Printing plug-in for jQuery
- * @author Jason Day
- *
- * Resources (based on) :
- * jPrintArea: http://plugins.jquery.com/project/jPrintArea
- * jqPrint: https://github.com/permanenttourist/jquery.jqprint
- * Ben Nadal: http://www.bennadel.com/blog/1591-Ask-Ben-Print-Part-Of-A-Web-Page-With-jQuery.htm
- *
- * Licensed under the MIT licence:
- * http://www.opensource.org/licenses/mit-license.php
- *
- * (c) Jason Day 2015
- *
- * Usage:
- *
- * $("#mySelector").printThis({
- * debug: false, * show the iframe for debugging
- * importCSS: true, * import page CSS
- * importStyle: false, * import style tags
- * printContainer: true, * grab outer container as well as the contents of the selector
- * loadCSS: "path/to/my.css", * path to additional css file - us an array [] for multiple
- * pageTitle: "", * add title to print page
- * removeInline: false, * remove all inline styles from print elements
- * printDelay: 333, * variable print delay
- * header: null, * prefix to html
- * footer: null, * postfix to html
- * base: false, * preserve the BASE tag, or accept a string for the URL
- * formValues: true * preserve input/form values
- * canvas: false * copy canvas elements (experimental)
- * doctypeString: '...' * enter a different doctype for older markup
- * });
- *
- * Notes:
- * - the loadCSS will load additional css (with or without @media print) into the iframe, adjusting layout
- *
- * jshint onevar: false, smarttabs: true, devel: true
- */
-;
-(function($) {
- var opt;
- $.fn.printThis = function(options) {
- opt = $.extend({}, $.fn.printThis.defaults, options);
- var $element = this instanceof jQuery ? this : $(this);
-
- var strFrameName = "printThis-" + (new Date()).getTime();
-
- if (window.location.hostname !== document.domain && navigator.userAgent.match(/msie/i)) {
- // Ugly IE hacks due to IE not inheriting document.domain from parent
- // checks if document.domain is set by comparing the host name against document.domain
- var iframeSrc = "javascript:document.write(\"<head><script>document.domain=\\\"" + document.domain + "\\\";</s" + "cript></head><body></body>\")";
- var printI = document.createElement('iframe');
- printI.name = "printIframe";
- printI.id = strFrameName;
- printI.className = "MSIE";
- document.body.appendChild(printI);
- printI.src = iframeSrc;
-
- } else {
- // other browsers inherit document.domain, and IE works if document.domain is not explicitly set
- var $frame = $("<iframe id='" + strFrameName + "' name='printIframe' />");
- $frame.appendTo("body");
- }
-
-
- var $iframe = $("#" + strFrameName);
-
- // show frame if in debug mode
- if (!opt.debug) $iframe.css({
- position: "absolute",
- width: "0px",
- height: "0px",
- left: "-600px",
- top: "-600px"
- });
-
- // $iframe.ready() and $iframe.load were inconsistent between browsers
- setTimeout(function() {
-
- // Add doctype to fix the style difference between printing and render
- function setDocType($iframe,doctype){
- var win, doc;
- win = $iframe.get(0);
- win = win.contentWindow || win.contentDocument || win;
- doc = win.document || win.contentDocument || win;
- doc.open();
- doc.write(doctype);
- doc.close();
- }
- if(opt.doctypeString){
- setDocType($iframe,opt.doctypeString);
- }
-
- var $doc = $iframe.contents(),
- $head = $doc.find("head"),
- $body = $doc.find("body"),
- $base = $('base'),
- baseURL;
-
- // add base tag to ensure elements use the parent domain
- if (opt.base === true && $base.length > 0) {
- // take the base tag from the original page
- baseURL = $base.attr('href');
- } else if (typeof opt.base === 'string') {
- // An exact base string is provided
- baseURL = opt.base;
- } else {
- // Use the page URL as the base
- baseURL = document.location.protocol + '//' + document.location.host;
- }
-
- $head.append('<base href="' + baseURL + '">');
-
- // import page stylesheets
- if (opt.importCSS) $("link[rel=stylesheet]").each(function() {
- var href = $(this).attr("href");
- if (href) {
- var media = $(this).attr("media") || "all";
- $head.append("<link type='text/css' rel='stylesheet' href='" + href + "' media='" + media + "'>");
- }
- });
-
- // import style tags
- if (opt.importStyle) $("style").each(function() {
- $(this).clone().appendTo($head);
- });
-
- // add title of the page
- if (opt.pageTitle) $head.append("<title>" + opt.pageTitle + "</title>");
-
- // import additional stylesheet(s)
- if (opt.loadCSS) {
- if( $.isArray(opt.loadCSS)) {
- jQuery.each(opt.loadCSS, function(index, value) {
- $head.append("<link type='text/css' rel='stylesheet' href='" + this + "'>");
- });
- } else {
- $head.append("<link type='text/css' rel='stylesheet' href='" + opt.loadCSS + "'>");
- }
- }
-
- // print header
- if (opt.header) $body.append(opt.header);
-
- if (opt.canvas) {
- // add canvas data-ids for easy access after the cloning.
- var canvasId = 0;
- $element.find('canvas').each(function(){
- $(this).attr('data-printthis', canvasId++);
- });
- }
-
- // grab $.selector as container
- if (opt.printContainer) $body.append($element.outer());
-
- // otherwise just print interior elements of container
- else $element.each(function() {
- $body.append($(this).html());
- });
-
- if (opt.canvas) {
- // Re-draw new canvases by referencing the originals
- $body.find('canvas').each(function(){
- var cid = $(this).data('printthis'),
- $src = $('[data-printthis="' + cid + '"]');
-
- this.getContext('2d').drawImage($src[0], 0, 0);
-
- // Remove the mark-up from the original
- $src.removeData('printthis');
- });
- }
-
- // capture form/field values
- if (opt.formValues) {
- // loop through inputs
- var $input = $element.find('input');
- if ($input.length) {
- $input.each(function() {
- var $this = $(this),
- $name = $(this).attr('name'),
- $checker = $this.is(':checkbox') || $this.is(':radio'),
- $iframeInput = $doc.find('input[name="' + $name + '"]'),
- $value = $this.val();
-
- // order matters here
- if (!$checker) {
- $iframeInput.val($value);
- } else if ($this.is(':checked')) {
- if ($this.is(':checkbox')) {
- $iframeInput.attr('checked', 'checked');
- } else if ($this.is(':radio')) {
- $doc.find('input[name="' + $name + '"][value="' + $value + '"]').attr('checked', 'checked');
- }
- }
-
- });
- }
-
- // loop through selects
- var $select = $element.find('select');
- if ($select.length) {
- $select.each(function() {
- var $this = $(this),
- $name = $(this).attr('name'),
- $value = $this.val();
- $doc.find('select[name="' + $name + '"]').val($value);
- });
- }
-
- // loop through textareas
- var $textarea = $element.find('textarea');
- if ($textarea.length) {
- $textarea.each(function() {
- var $this = $(this),
- $name = $(this).attr('name'),
- $value = $this.val();
- $doc.find('textarea[name="' + $name + '"]').val($value);
- });
- }
- } // end capture form/field values
-
- // remove inline styles
- if (opt.removeInline) {
- // $.removeAttr available jQuery 1.7+
- if ($.isFunction($.removeAttr)) {
- $doc.find("body *").removeAttr("style");
- } else {
- $doc.find("body *").attr("style", "");
- }
- }
-
- // print "footer"
- if (opt.footer) $body.append(opt.footer);
-
- setTimeout(function() {
- if ($iframe.hasClass("MSIE")) {
- // check if the iframe was created with the ugly hack
- // and perform another ugly hack out of neccessity
- window.frames["printIframe"].focus();
- $head.append("<script> window.print(); </s" + "cript>");
- } else {
- // proper method
- if (document.queryCommandSupported("print")) {
- $iframe[0].contentWindow.document.execCommand("print", false, null);
- } else {
- $iframe[0].contentWindow.focus();
- $iframe[0].contentWindow.print();
- }
- }
-
- // remove iframe after print
- if (!opt.debug) {
- setTimeout(function() {
- $iframe.remove();
- }, 1000);
- }
-
- }, opt.printDelay);
-
- }, 333);
-
- };
-
- // defaults
- $.fn.printThis.defaults = {
- debug: false, // show the iframe for debugging
- importCSS: true, // import parent page css
- importStyle: false, // import style tags
- printContainer: true, // print outer container/$.selector
- loadCSS: "", // load an additional css file - load multiple stylesheets with an array []
- pageTitle: "", // add title to print page
- removeInline: false, // remove all inline styles
- printDelay: 333, // variable print delay
- header: null, // prefix to html
- footer: null, // postfix to html
- formValues: true, // preserve input/form values
- canvas: false, // Copy canvas content (experimental)
- base: false, // preserve the BASE tag, or accept a string for the URL
- doctypeString: '<!DOCTYPE html>' // html doctype
- };
-
- // $.selector container
- jQuery.fn.outer = function() {
- return $($("<div></div>").html(this.clone())).html();
- }
-})(jQuery);
diff --git a/plugins/jetpack/modules/shortcodes/js/recipes.js b/plugins/jetpack/modules/shortcodes/js/recipes.js
deleted file mode 100644
index 3c987acc..00000000
--- a/plugins/jetpack/modules/shortcodes/js/recipes.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/* global jetpack_recipes_vars */
-( function( $ ) {
- $( window ).load( function() {
- $( '.jetpack-recipe-print a' ).click( function( event ) {
- event.preventDefault();
-
- // Print the DIV.
- $( this ).closest( '.jetpack-recipe' ).printThis( { pageTitle: jetpack_recipes_vars.pageTitle, loadCSS: jetpack_recipes_vars.loadCSS } );
- } );
- } );
-} )( jQuery );
diff --git a/plugins/jetpack/modules/shortcodes/js/slideshow-shortcode.js b/plugins/jetpack/modules/shortcodes/js/slideshow-shortcode.js
deleted file mode 100644
index e17a2d74..00000000
--- a/plugins/jetpack/modules/shortcodes/js/slideshow-shortcode.js
+++ /dev/null
@@ -1,194 +0,0 @@
-/* jshint onevar:false, loopfunc:true */
-/* global jetpackSlideshowSettings, escape */
-
-function JetpackSlideshow( element, transition, autostart ) {
- this.element = element;
- this.images = [];
- this.controls = {};
- this.transition = transition || 'fade';
- this.autostart = autostart;
-}
-
-JetpackSlideshow.prototype.showLoadingImage = function( toggle ) {
- if ( toggle ) {
- this.loadingImage_ = document.createElement( 'div' );
- this.loadingImage_.className = 'slideshow-loading';
- var img = document.createElement( 'img' );
- img.src = jetpackSlideshowSettings.spinner;
- this.loadingImage_.appendChild( img );
- this.loadingImage_.appendChild( this.makeZeroWidthSpan() );
- this.element.append( this.loadingImage_ );
- } else if ( this.loadingImage_ ) {
- this.loadingImage_.parentNode.removeChild( this.loadingImage_ );
- this.loadingImage_ = null;
- }
-};
-
-JetpackSlideshow.prototype.init = function() {
- this.showLoadingImage(true);
-
- var self = this;
- // Set up DOM.
- for ( var i = 0; i < this.images.length; i++ ) {
- var imageInfo = this.images[i];
- var img = document.createElement( 'img' );
- img.src = imageInfo.src;
- img.title = typeof( imageInfo.title ) !== 'undefined' ? imageInfo.title : '';
- img.alt = typeof( imageInfo.alt ) !== 'undefined' ? imageInfo.alt : '';
- img.align = 'middle';
- img.setAttribute('itemprop','image');
- img.nopin = 'nopin';
- var caption = document.createElement( 'div' );
- caption.className = 'slideshow-slide-caption';
- caption.setAttribute('itemprop','caption description');
- caption.innerHTML = imageInfo.caption;
- var container = document.createElement('div');
- container.className = 'slideshow-slide';
- container.setAttribute('itemprop','associatedMedia');
- container.setAttribute('itemscope','');
- container.setAttribute('itemtype','https://schema.org/ImageObject');
-
- // Hide loading image once first image has loaded.
- if ( i === 0 ) {
- if ( img.complete ) {
- // IE, image in cache
- setTimeout( function() {
- self.finishInit_();
- }, 1);
- } else {
- jQuery( img ).load(function() {
- self.finishInit_();
- });
- }
- }
- container.appendChild( img );
- // I'm not sure where these were coming from, but IE adds
- // bad values for width/height for portrait-mode images
- img.removeAttribute('width');
- img.removeAttribute('height');
- container.appendChild( this.makeZeroWidthSpan() );
- container.appendChild( caption );
- this.element.append( container );
- }
-};
-
-JetpackSlideshow.prototype.makeZeroWidthSpan = function() {
- var emptySpan = document.createElement( 'span' );
- emptySpan.className = 'slideshow-line-height-hack';
- // Having a NBSP makes IE act weird during transitions, but other
- // browsers ignore a text node with a space in it as whitespace.
- if ( -1 !== window.navigator.userAgent.indexOf( 'MSIE ' ) ) {
- emptySpan.appendChild( document.createTextNode(' ') );
- } else {
- emptySpan.innerHTML = '&nbsp;';
- }
- return emptySpan;
-};
-
-JetpackSlideshow.prototype.finishInit_ = function() {
- this.showLoadingImage( false );
- this.renderControls_();
-
- var self = this;
- if ( this.images.length > 1 ) {
- // Initialize Cycle instance.
- this.element.cycle( {
- fx: this.transition,
- prev: this.controls.prev,
- next: this.controls.next,
- timeout: jetpackSlideshowSettings.speed,
- slideExpr: '.slideshow-slide',
- onPrevNextEvent: function() {
- return self.onCyclePrevNextClick_.apply( self, arguments );
- }
- } );
-
- var slideshow = this.element;
-
- if ( ! this.autostart ) {
- slideshow.cycle( 'pause' );
- jQuery(this.controls.stop).removeClass( 'running' );
- jQuery(this.controls.stop).addClass( 'paused' );
- }
-
- jQuery( this.controls.stop ).click( function() {
- var button = jQuery(this);
- if ( ! button.hasClass( 'paused' ) ) {
- slideshow.cycle( 'pause' );
- button.removeClass( 'running' );
- button.addClass( 'paused' );
- } else {
- button.addClass( 'running' );
- button.removeClass( 'paused' );
- slideshow.cycle( 'resume', true );
- }
- return false;
- } );
- } else {
- this.element.children( ':first' ).show();
- this.element.css( 'position', 'relative' );
- }
- this.initialized_ = true;
-};
-
-JetpackSlideshow.prototype.renderControls_ = function() {
- if ( this.controlsDiv_ ) {
- return;
- }
-
- var controlsDiv = document.createElement( 'div' );
- controlsDiv.className = 'slideshow-controls';
-
- var controls = [ 'prev', 'stop', 'next' ];
- for ( var i = 0; i < controls.length; i++ ) {
- var controlName = controls[i];
- var a = document.createElement( 'a' );
- a.href = '#';
- controlsDiv.appendChild( a );
- this.controls[controlName] = a;
- }
- this.element.append( controlsDiv );
- this.controlsDiv_ = controlsDiv;
-};
-
-JetpackSlideshow.prototype.onCyclePrevNextClick_ = function( isNext, i/*, slideElement*/ ) {
- // If blog_id not present don't track page views
- if ( ! jetpackSlideshowSettings.blog_id ) {
- return;
- }
-
- var postid = this.images[i].id;
- var stats = new Image();
- stats.src = document.location.protocol +
- '//pixel.wp.com/g.gif?host=' +
- escape( document.location.host ) +
- '&rand=' + Math.random() +
- '&blog=' + jetpackSlideshowSettings.blog_id +
- '&subd=' + jetpackSlideshowSettings.blog_subdomain +
- '&user_id=' + jetpackSlideshowSettings.user_id +
- '&post=' + postid +
- '&ref=' + escape( document.location );
-};
-
-( function ( $ ) {
- function jetpack_slideshow_init() {
- $( '.jetpack-slideshow-noscript' ).remove();
-
- $( '.jetpack-slideshow' ).each( function () {
- var container = $( this );
-
- if ( container.data( 'processed' ) ) {
- return;
- }
-
- var slideshow = new JetpackSlideshow( container, container.data( 'trans' ), container.data( 'autostart' ) );
- slideshow.images = container.data( 'gallery' );
- slideshow.init();
-
- container.data( 'processed', true );
- } );
- }
-
- $( document ).ready( jetpack_slideshow_init );
- $( 'body' ).on( 'post-load', jetpack_slideshow_init );
-} )( jQuery );
diff --git a/plugins/jetpack/modules/shortcodes/kickstarter.php b/plugins/jetpack/modules/shortcodes/kickstarter.php
deleted file mode 100644
index 1e6664bb..00000000
--- a/plugins/jetpack/modules/shortcodes/kickstarter.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-/**
- * Kickstarter shortcode
- *
- * Usage:
- * [kickstarter url="https://www.kickstarter.com/projects/peaktoplateau/yak-wool-baselayers-from-tibet-to-the-world" width="480" height=""]
- *
- * @package Jetpack
- */
-
-add_shortcode( 'kickstarter', 'jetpack_kickstarter_shortcode' );
-add_filter( 'pre_kses', 'jetpack_kickstarter_embed_to_shortcode' );
-
-/**
- * Parse shortcode arguments and render its output.
- *
- * @since 4.5.0
- *
- * @param array $atts Shortcode parameters.
- *
- * @return string
- */
-function jetpack_kickstarter_shortcode( $atts ) {
- if ( empty( $atts['url'] ) ) {
- return '';
- }
-
- $url = esc_url_raw( $atts['url'] );
- if ( ! preg_match( '#^(www\.)?kickstarter\.com$#i', wp_parse_url( $url, PHP_URL_HOST ) ) ) {
- return '<!-- Invalid Kickstarter URL -->';
- }
-
- global $wp_embed;
- return $wp_embed->shortcode( $atts, $url );
-}
-
-/**
- * Converts Kickstarter iframe embeds to a shortcode.
- *
- * EG: <iframe width="480" height="360" src="http://www.kickstarter.com/projects/deweymac/dewey-mac-kid-detective-book-make-diy-and-stem-spy/widget/video.html" frameborder="0" scrolling="no"> </iframe>
- *
- * @since 4.5.0
- *
- * @param string $content Entry content that possibly includes a Kickstarter embed.
- *
- * @return string
- */
-function jetpack_kickstarter_embed_to_shortcode( $content ) {
- if ( ! is_string( $content ) || false === stripos( $content, 'www.kickstarter.com/projects' ) ) {
- return $content;
- }
-
- $regexp = '!<iframe((?:\s+\w+=[\'"][^\'"]*[\'"])*)\s+src=[\'"](http://www\.kickstarter\.com/projects/[^/]+/[^/]+)/[^\'"]+[\'"]((?:\s+\w+=[\'"][^\'"]*[\'"])*)>[\s]*</iframe>!i';
- $regexp_ent = str_replace( '&amp;#0*58;', '&amp;#0*58;|&#0*58;', htmlspecialchars( $regexp, ENT_NOQUOTES ) ); // phpcs:ignore
-
- foreach ( array( 'regexp', 'regexp_ent' ) as $reg ) {
- if ( ! preg_match_all( $$reg, $content, $matches, PREG_SET_ORDER ) ) {
- continue;
- }
-
- foreach ( $matches as $match ) {
- $url = esc_url( $match[2] );
-
- $params = $match[1] . $match[3];
-
- if ( 'regexp_ent' === $reg ) {
- $params = html_entity_decode( $params );
- }
-
- $params = wp_kses_hair( $params, array( 'http' ) );
-
- $width = isset( $params['width'] ) ? (int) $params['width']['value'] : 0;
-
- $shortcode = '[kickstarter url=' . $url . ( ( ! empty( $width ) ) ? " width=$width" : '' ) . ']';
- $content = str_replace( $match[0], $shortcode, $content );
- }
- }
-
- return $content;
-}
diff --git a/plugins/jetpack/modules/shortcodes/mailchimp.php b/plugins/jetpack/modules/shortcodes/mailchimp.php
deleted file mode 100644
index ce815673..00000000
--- a/plugins/jetpack/modules/shortcodes/mailchimp.php
+++ /dev/null
@@ -1,226 +0,0 @@
-<?php //phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
-/**
- * MailChimp Subscriber Popup Form shortcode
- *
- * Example:
- * [mailchimp_subscriber_popup baseUrl="mc.us11.list-manage.com" uuid="1ca7856462585a934b8674c71" lid="2d24f1898b"]
- *
- * Embed code example:
- * <script type="text/javascript" src="//downloads.mailchimp.com/js/signup-forms/popup/unique-methods/embed.js" data-dojo-config="usePlainJson: true, isDebug: false"></script><script type="text/javascript">window.dojoRequire(["mojo/signup-forms/Loader"], function(L) { L.start({"baseUrl":"mc.us11.list-manage.com","uuid":"1ca7856462585a934b8674c71","lid":"2d24f1898b","uniqueMethods":true}) })</script>
- */
-
-/**
- * Register [mailchimp_subscriber_popup] shortcode and add a filter to 'pre_kses' queue to reverse MailChimp embed to shortcode.
- *
- * @since 4.5.0
- */
-function jetpack_mailchimp_subscriber_popup() {
- add_shortcode(
- 'mailchimp_subscriber_popup',
- array(
- 'MailChimp_Subscriber_Popup',
- 'shortcode',
- )
- );
- add_filter(
- 'pre_kses',
- array(
- 'MailChimp_Subscriber_Popup',
- 'reversal',
- )
- );
-}
-
-if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- add_action( 'init', 'jetpack_mailchimp_subscriber_popup' );
-} else {
- jetpack_mailchimp_subscriber_popup();
-}
-
-/**
- * Class MailChimp_Subscriber_Popup
- *
- * @since 4.5.0
- */
-class MailChimp_Subscriber_Popup {
-
- /**
- * Regular expressions to reverse script tags to shortcodes.
- *
- * @var array
- */
- private static $reversal_regexes = array(
- /* raw examplejs */
- '/<script type="text\/javascript" src="(https?:)?\/\/downloads\.mailchimp\.com\/js\/signup-forms\/popup\/unique-methods\/embed\.js" data-dojo-config="([^"]*?)"><\/script><script type="text\/javascript">window.dojoRequire\(\["mojo\/signup-forms\/Loader"\]\, function\(L\) { L\.start\({([^}]*?)}\) }\)<\/script>/s', //phpcs:ignore
- /* visual editor */
- '/&lt;script type="text\/javascript" src="(https?:)?\/\/downloads\.mailchimp\.com\/js\/signup-forms\/popup\/unique-methods\/embed\.js" data-dojo-config="([^"]*?)"&gt;&lt;\/script&gt;&lt;script type="text\/javascript"&gt;window.dojoRequire\(\["mojo\/signup-forms\/Loader"]\, function\(L\) { L\.start\({([^}]*?)}\) }\)&lt;\/script&gt;/s',
- );
-
- /**
- * Allowed configuration attributes. Used in reversal when checking allowed attributes.
- *
- * @var array
- */
- private static $allowed_config = array(
- 'usePlainJson' => 'true',
- 'isDebug' => 'false',
- );
-
- /**
- * Allowed JS variables. Used in reversal to whitelist variables.
- *
- * @var array
- */
- private static $allowed_js_vars = array(
- 'baseUrl',
- 'uuid',
- 'lid',
- );
-
- /**
- * Runs the whole reversal.
- *
- * @since 4.5.0
- *
- * @param string $content Post Content.
- *
- * @return string Content with embeds replaced
- */
- public static function reversal( $content ) {
- // Bail without the js src.
- if ( ! is_string( $content ) || false === stripos( $content, 'downloads.mailchimp.com/js/signup-forms/popup/unique-methods/embed.js' ) ) {
- return $content;
- }
-
- require_once ABSPATH . WPINC . '/class-json.php';
- $wp_json = new Services_JSON();
-
- // loop through our rules and find valid embeds.
- foreach ( self::$reversal_regexes as $regex ) {
-
- if ( ! preg_match_all( $regex, $content, $matches ) ) {
- continue;
- }
-
- foreach ( $matches[3] as $index => $js_vars ) {
- // the regex rule for a specific embed.
- $replace_regex = sprintf( '#\s*%s\s*#', preg_quote( $matches[0][ $index ], '#' ) );
-
- $attrs = $wp_json->decode( '{' . $js_vars . '}' );
-
- if ( $matches[2][ $index ] ) {
- $config_attrs = $wp_json->decode( '{' . $matches[2][ $index ] . '}' );
- foreach ( $config_attrs as $key => $value ) {
- $attrs->$key = ( 1 === $value ) ? 'true' : 'false';
- }
- }
-
- $shortcode = self::build_shortcode_from_reversal_attrs( $attrs );
-
- $content = preg_replace( $replace_regex, "\n\n$shortcode\n\n", $content );
-
- /** This action is documented in modules/widgets/social-media-icons.php */
- do_action( 'jetpack_bump_stats_extras', 'html_to_shortcode', 'mailchimp_subscriber_popup' );
- }
- }
-
- return $content;
- }
-
- /**
- * Builds the actual shortcode based on passed in attributes.
- *
- * @since 4.5.0
- *
- * @param array $attrs A valid list of attributes (gets matched against self::$allowed_config and self::$allowed_js_vars).
- *
- * @return string
- */
- private static function build_shortcode_from_reversal_attrs( $attrs ) {
- $shortcode = '[mailchimp_subscriber_popup ';
-
- foreach ( $attrs as $key => $value ) {
- // skip unsupported keys.
- if (
- ! in_array( $key, array_keys( self::$allowed_config ), true )
- && ! in_array( $key, self::$allowed_js_vars, true )
- ) {
- continue;
- }
-
- $value = esc_attr( $value );
- $shortcode .= "$key='$value' ";
- }
- return trim( $shortcode ) . ']';
- }
-
- /**
- * Parses the shortcode back out to embedded information.
- *
- * @since 4.5.0
- *
- * @param array $lcase_attrs Lowercase shortcode attributes.
- *
- * @return string
- */
- public static function shortcode( $lcase_attrs ) {
- static $displayed_once = false;
-
- // Limit to one form per page load.
- if ( $displayed_once ) {
- return '';
- }
-
- if ( empty( $lcase_attrs ) ) {
- return '<!-- Missing MailChimp baseUrl, uuid or lid -->';
- }
-
- $defaults = array_fill_keys( self::$allowed_js_vars, '' );
- $defaults = array_merge( $defaults, self::$allowed_config );
-
- // Convert $attrs back to proper casing since they come through in all lowercase.
- $attrs = array();
- foreach ( $defaults as $key => $value ) {
- if ( array_key_exists( strtolower( $key ), $lcase_attrs ) ) {
- $attrs[ $key ] = $lcase_attrs[ strtolower( $key ) ];
- }
- }
- $attrs = array_map( 'esc_js', array_filter( shortcode_atts( $defaults, $attrs ) ) );
-
- // Split config & js vars.
- $js_vars = array();
- $config_vars = array();
- foreach ( $attrs as $key => $value ) {
- if (
- 'baseUrl' === $key
- && (
- ! preg_match( '#mc\.us\d+\.list-manage\d?\.com#', $value, $matches )
- || $value !== $matches[0]
- )
- ) {
- return '<!-- Invalid MailChimp baseUrl -->';
- }
-
- if ( in_array( $key, self::$allowed_js_vars, true ) ) {
- $js_vars[ $key ] = $value;
- } else {
- $config_vars[] = "$key: $value";
- }
- }
-
- // If one of these parameters is missing we can't render the form so exist.
- if ( empty( $js_vars['baseUrl'] ) || empty( $js_vars['uuid'] ) || empty( $js_vars['lid'] ) ) {
- return '<!-- Missing MailChimp baseUrl, uuid or lid -->';
- }
-
- // Add a uniqueMethods parameter if it is missing from the data we got from the embed code.
- $js_vars['uniqueMethods'] = true;
-
- /** This action is already documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'mailchimp_subscriber_popup', 'view' );
-
- $displayed_once = true;
-
- return "\n\n" . '<script type="text/javascript" data-dojo-config="' . esc_attr( implode( ', ', $config_vars ) ) . '">jQuery.getScript( "//downloads.mailchimp.com/js/signup-forms/popup/unique-methods/embed.js", function( data, textStatus, jqxhr ) { window.dojoRequire(["mojo/signup-forms/Loader"], function(L) { L.start(' . wp_json_encode( $js_vars ) . ') });} );</script>' . "\n\n";
- }
-}
diff --git a/plugins/jetpack/modules/shortcodes/medium.php b/plugins/jetpack/modules/shortcodes/medium.php
deleted file mode 100644
index 02d02aaf..00000000
--- a/plugins/jetpack/modules/shortcodes/medium.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-
-// Embed support for Medium https://medium.com/p/3eaed64aed8a
-
-/**
- * Faux-oembed support for Medium permalinks
- *
- * e.g.
- * https://medium.com/help-center
- * https://medium.com/@richroll
- */
-wp_embed_register_handler( 'medium', '#^https?://medium.com/([a-zA-z0-9-_@]+)#', 'jetpack_embed_medium_oembed' );
-
-function jetpack_embed_medium_oembed( $matches, $attr, $url ) {
- $attr = jetpack_embed_medium_args( $attr );
- $attr['url'] = $url;
-
- return jetpack_embed_medium_embed_html( $attr );
-}
-
-function jetpack_embed_medium_embed_html( $args ) {
- $args = jetpack_embed_medium_args( $args );
-
- if ( empty( $args['url'] ) ) {
- return;
- }
-
- $args['type'] = jetpack_embed_medium_get_embed_type( $args['url'] );
-
- return sprintf( '<script async src="https://static.medium.com/embed.js"></script><a class="m-%1$s" href="%2$s" target="_blank" data-width="%3$s" data-border="%4$s" data-collapsed="%5$s">View %1$s at Medium.com</a>', esc_attr( $args['type'] ), esc_url( $args['url'] ), esc_attr( $args['width'] ), esc_attr( $args['border'] ), esc_attr( $args['collapsed'] ) );
-}
-
-/**
- * Shortcode support that allows passing in URL
- *
- * [medium url="https://medium.com/help-center" width="100%" border="false" collapsed="true"]
- */
-add_shortcode( 'medium', 'jetpack_embed_medium_shortcode' );
-
-function jetpack_embed_medium_shortcode( $atts ) {
- $atts = jetpack_embed_medium_args( $atts );
-
- if ( ! empty( $atts['url'] ) ) {
- global $wp_embed;
- return $wp_embed->shortcode( $atts, $atts['url'] );
- }
-}
-
-function jetpack_embed_medium_get_embed_type( $url ) {
- $url_path = parse_url( $url, PHP_URL_PATH );
- if ( preg_match( '/^\/@[\.\w]+$/', $url_path ) ) {
- return 'profile';
- } elseif ( preg_match( '/^\/[\da-zA-Z-]+$/', $url_path ) ) {
- return 'collection';
- }
-
- return 'story';
-}
-
-function jetpack_embed_medium_args( $atts ) {
- return shortcode_atts(
- array(
- 'url' => '',
- 'width' => '400',
- 'border' => true,
- 'collapsed' => false,
- ),
- $atts,
- 'medium'
- );
-}
diff --git a/plugins/jetpack/modules/shortcodes/mixcloud.php b/plugins/jetpack/modules/shortcodes/mixcloud.php
deleted file mode 100644
index 3580a924..00000000
--- a/plugins/jetpack/modules/shortcodes/mixcloud.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-/*
- * Mixcloud embeds
- *
- * examples:
- * [mixcloud MalibuRum/play-6-kissy-sellouts-winter-sun-house-party-mix/ /]
- * [mixcloud MalibuRum/play-6-kissy-sellouts-winter-sun-house-party-mix/ width=640 height=480 /]
- * [mixcloud http://www.mixcloud.com/MalibuRum/play-6-kissy-sellouts-winter-sun-house-party-mix/ /]
- * [mixcloud http://www.mixcloud.com/MalibuRum/play-6-kissy-sellouts-winter-sun-house-party-mix/ width=640 height=480 /]
- * [mixcloud]http://www.mixcloud.com/MalibuRum/play-6-kissy-sellouts-winter-sun-house-party-mix/[/mixcloud]
- * [mixcloud]MalibuRum/play-6-kissy-sellouts-winter-sun-house-party-mix/[/mixcloud]
- * [mixcloud http://www.mixcloud.com/mat/playlists/classics/ width=660 height=208 hide_cover=1 hide_tracklist=1]
-*/
-
-// Register oEmbed provider
-// Example URL: http://www.mixcloud.com/oembed/?url=http://www.mixcloud.com/MalibuRum/play-6-kissy-sellouts-winter-sun-house-party-mix/
-wp_oembed_add_provider( '#https?://(?:www\.)?mixcloud\.com/\S*#i', 'https://www.mixcloud.com/oembed', true );
-
-// Register mixcloud shortcode
-add_shortcode( 'mixcloud', 'mixcloud_shortcode' );
-function mixcloud_shortcode( $atts, $content = null ) {
-
- if ( empty( $atts[0] ) && empty( $content ) ) {
- return '<!-- mixcloud error: invalid mixcloud resource -->';
- }
-
- $regular_expression = '/((?<=mixcloud\\.com\\/)[\\w-\\/]+$)|(^[\\w-\\/]+$)/i';
- preg_match( $regular_expression, $content, $match );
- if ( ! empty( $match ) ) {
- $resource_id = trim( $match[0] );
- } else {
- preg_match( $regular_expression, $atts[0], $match );
- if ( ! empty( $match ) ) {
- $resource_id = trim( $match[0] );
- }
- }
-
- if ( empty( $resource_id ) ) {
- return '<!-- mixcloud error: invalid mixcloud resource -->';
- }
-
- $mixcloud_url = 'https://mixcloud.com/' . $resource_id;
-
- $atts = shortcode_atts(
- array(
- 'width' => false,
- 'height' => false,
- 'color' => false,
- 'light' => false,
- 'dark' => false,
- 'hide_tracklist' => false,
- 'hide_cover' => false,
- 'mini' => false,
- 'hide_followers' => false,
- 'hide_artwork' => false,
- ),
- $atts
- );
-
- // remove falsey values
- $atts = array_filter( $atts );
-
- $query_args = array( 'url' => $mixcloud_url );
- $query_args = array_merge( $query_args, $atts );
-
- $url = add_query_arg( urlencode_deep( $query_args ), 'https://www.mixcloud.com/oembed/' );
- $mixcloud_response = wp_remote_get( $url, array( 'redirection' => 0 ) );
- if ( is_wp_error( $mixcloud_response ) || 200 !== $mixcloud_response['response']['code'] || empty( $mixcloud_response['body'] ) ) {
- return '<!-- mixcloud error: invalid mixcloud resource -->';
- }
-
- $response_body = json_decode( $mixcloud_response['body'] );
-
- return $response_body->html;
-}
diff --git a/plugins/jetpack/modules/shortcodes/pinterest.php b/plugins/jetpack/modules/shortcodes/pinterest.php
deleted file mode 100644
index caecc619..00000000
--- a/plugins/jetpack/modules/shortcodes/pinterest.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-/**
- * Pinterest embeds
- *
- * Based on "Board Widget" example here: http://business.pinterest.com/widget-builder/#code
- */
-
-// Example URL: http://pinterest.com/pinterest/pin-pets/
-// Second Example URL: https://uk.pinterest.com/annsawesomepins/travel/
-wp_embed_register_handler(
- 'pinterest',
- '#'
- . 'https?://'
- . '(?:www\.)?'
- . '(?:[a-z]{2}\.)?'
- . 'pinterest\.[a-z.]+/'
- . '([^/]+)'
- . '(/[^/]+)?'
- . '#',
- 'pinterest_embed_handler'
-);
-
-function pinterest_embed_handler( $matches, $attr, $url ) {
- // Pinterest's JS handles making the embed
- $script_src = '//assets.pinterest.com/js/pinit.js';
- wp_enqueue_script( 'pinterest-embed', $script_src, array(), false, true );
-
- $path = parse_url( $url, PHP_URL_PATH );
- if ( 0 === strpos( $path, '/pin/' ) ) {
- $embed_type = 'embedPin';
- } elseif ( preg_match( '#^/([^/]+)/?$#', $path ) ) {
- $embed_type = 'embedUser';
- } elseif ( preg_match( '#^/([^/]+)/([^/]+)/?$#', $path ) ) {
- $embed_type = 'embedBoard';
- } else {
- if ( current_user_can( 'edit_posts' ) ) {
- return __( 'Sorry, that Pinterest URL was not recognized.', 'jetpack' );
- }
- return;
- }
-
- $return = sprintf( '<a data-pin-do="%s" href="%s"></a>', esc_attr( $embed_type ), esc_url( $url ) );
-
- // If we're generating an embed view for the WordPress Admin via ajax...
- if ( doing_action( 'wp_ajax_parse-embed' ) ) {
- $return .= sprintf( '<script src="%s"></script>', esc_url( $script_src ) );
- }
-
- return $return;
-}
diff --git a/plugins/jetpack/modules/shortcodes/polldaddy.php b/plugins/jetpack/modules/shortcodes/polldaddy.php
deleted file mode 100644
index 10a62d65..00000000
--- a/plugins/jetpack/modules/shortcodes/polldaddy.php
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php
-/**
- * Deprecated alias for Crowdsignal.
- */
diff --git a/plugins/jetpack/modules/shortcodes/presentations.php b/plugins/jetpack/modules/shortcodes/presentations.php
deleted file mode 100644
index 77089189..00000000
--- a/plugins/jetpack/modules/shortcodes/presentations.php
+++ /dev/null
@@ -1,465 +0,0 @@
-<?php
-/*
-Plugin Name: Presentations
-Plugin URI: http://automattic.com/wordpress-plugins/
-Description: Presentations plugin based on the work done by <a href="http://darylkoop.com/">Daryl Koopersmith</a>. Powered by jmpress.js
-Version: 0.2
-Author: Automattic
-Author URI: http://automattic.com/wordpress-plugins/
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-*/
-
-
-/**
- * Known issues:
- *
- * - IE 7/8 are not supported by jmpress and presentations will not work
- * - IE 9 will not animate transitions at all, though it's possible to at least
- * switch between slides.
- * - Infinite Scroll themes will not load presentations properly unless the post
- * happens to be on the first loaded page. The permalink page will function
- * properly, however.
- * - Exiting fullscreen mode will not properly reset the scroll locations in Safari
- */
-
-
-/*
-HOW TO: How the plugin settings are organized and which features are supported.
-
-The entire presentation should be wrapped with a [presentation] shortcode, and every
-individual slide should be wrapped with a [slide] shortcode. Any settings supported
-by [slide] can be set into [presentation], which will apply that setting for the entire
-presentation unless overridden by individual slides.
-
-- [presentation] only settings:
- - duration: transition durations, default is one second.
- - height: content height, default is 400px
- - width: content width, default is 550px
- - autoplay: delay between transitions in seconds, default 3s
- when set the presentation will automatically transition between slides
- as long as the presentation remains in focus
-
-- [slide] settings:
- - transition: specifies where the next slide will be placed relative
- to the last one before it. Supported values are "up", "down"
- "left", "right", or "none". Default value is "down".
-
- - scale: scales the content relative to other slides, default value is one
-
- - rotate: rotates the content by the specified degrees, default is zero
-
- - fade: slides will fade in and out during transition. Values of "on" or
- "true" will enable fading, while values of "no" or "false" will
- disable it. Default value is "on"
-
- - bgcolor: specifies a background color for the slides. Any CSS valid value
- is permitted. Default color is transparent.
-
- - bgimg: specifies an image url which will fill the background. Image is
- set to fill the background 100% width and height
-
- - fadebullets: any html <li> tags will start out with an opacity of 0 and any
- subsequent slide transitions will show the bullets one by one
-*/
-
-if ( ! class_exists( 'Presentations' ) ) :
- class Presentations {
-
- private $presentation_settings;
- private $presentation_initialized;
- private $scripts_and_style_included;
-
- /**
- * Constructor
- */
- function __construct() {
- $this->presentation_initialized = false;
- $this->scripts_and_style_included = false;
-
- // Registers shortcodes
- add_action( 'wp_head', array( &$this, 'add_scripts' ), 1 );
-
- add_shortcode( 'presentation', array( &$this, 'presentation_shortcode' ) );
- add_shortcode( 'slide', array( &$this, 'slide_shortcode' ) );
- }
-
- function add_scripts() {
- $this->scripts_and_style_included = false;
-
- if ( empty( $GLOBALS['posts'] ) || ! is_array( $GLOBALS['posts'] ) ) {
- return;
- }
-
- foreach ( $GLOBALS['posts'] as $p ) {
- if ( has_shortcode( $p->post_content, 'presentation' ) ) {
- $this->scripts_and_style_included = true;
- break;
- }
- }
-
- if ( ! $this->scripts_and_style_included ) {
- return;
- }
-
- $plugin = plugin_dir_url( __FILE__ );
- // Add CSS
- wp_enqueue_style( 'presentations', $plugin . 'css/style.css' );
- // Add JavaScript
- wp_enqueue_script( 'jquery' );
- wp_enqueue_script(
- 'jmpress',
- Jetpack::get_file_url_for_environment( '_inc/build/shortcodes/js/jmpress.min.js', 'modules/shortcodes/js/jmpress.js' ),
- array( 'jquery' ),
- '0.4.5',
- true
- );
- wp_enqueue_script(
- 'presentations',
- Jetpack::get_file_url_for_environment( '_inc/build/shortcodes/js/main.min.js', 'modules/shortcodes/js/main.js' ),
- array( 'jquery', 'jmpress' ),
- false,
- true
- );
- }
-
- function presentation_shortcode( $atts, $content = '' ) {
- // Mark that we've found a valid [presentation] shortcode
- $this->presentation_initialized = true;
-
- $atts = shortcode_atts(
- array(
- 'duration' => '',
- 'height' => '',
- 'width' => '',
- 'bgcolor' => '',
- 'bgimg' => '',
- 'autoplay' => '',
-
- // Settings
- 'transition' => '',
- 'scale' => '',
- 'rotate' => '',
- 'fade' => '',
- 'fadebullets' => '',
- ),
- $atts,
- 'presentation'
- );
-
- $this->presentation_settings = array(
- 'transition' => 'down',
- 'scale' => 1,
- 'rotate' => 0,
- 'fade' => 'on',
- 'fadebullets' => 0,
- 'last' => array(
- 'x' => 0,
- 'y' => 0,
- 'scale' => 1,
- 'rotate' => 0,
- ),
- );
-
- // Set the presentation-wide settings
- if ( '' != trim( $atts['transition'] ) ) {
- $this->presentation_settings['transition'] = $atts['transition'];
- }
-
- if ( '' != trim( $atts['scale'] ) ) {
- $this->presentation_settings['scale'] = floatval( $atts['scale'] );
- }
-
- if ( '' != trim( $atts['rotate'] ) ) {
- $this->presentation_settings['rotate'] = floatval( $atts['rotate'] );
- }
-
- if ( '' != trim( $atts['fade'] ) ) {
- $this->presentation_settings['fade'] = $atts['fade'];
- }
-
- if ( '' != trim( $atts['fadebullets'] ) ) {
- $this->presentation_settings['fadebullets'] = $atts['fadebullets'];
- }
-
- // Set any settings the slides don't care about
- if ( '' != trim( $atts['duration'] ) ) {
- $duration = floatval( $atts['duration'] ) . 's';
- } else {
- $duration = '1s';
- }
-
- // Autoplay durations are set in milliseconds
- if ( '' != trim( $atts['autoplay'] ) ) {
- $autoplay = floatval( $atts['autoplay'] ) * 1000;
- } else {
- $autoplay = 0;
- } // No autoplay
-
- // Set the presentation size as specified or with some nicely sized dimensions
- if ( '' != trim( $atts['width'] ) ) {
- $this->presentation_settings['width'] = intval( $atts['width'] );
- } else {
- $this->presentation_settings['width'] = 480;
- }
-
- if ( '' != trim( $atts['height'] ) ) {
- $this->presentation_settings['height'] = intval( $atts['height'] );
- } else {
- $this->presentation_settings['height'] = 370;
- }
-
- // Hide the content by default in case the scripts fail
- $style = 'display: none; width: ' . $this->presentation_settings['width'] . 'px; height: ' . $this->presentation_settings['height'] . 'px;';
-
- // Check for background color XOR background image
- // Use a white background if nothing specified
- if ( preg_match( '/https?\:\/\/[^\'"\s]*/', $atts['bgimg'], $matches ) ) {
- $style .= ' background-image: url("' . esc_url( $matches[0] ) . '");';
- } elseif ( '' != trim( $atts['bgcolor'] ) ) {
- $style .= ' background-color: ' . esc_attr( $atts['bgcolor'] ) . ';';
- } else {
- $style .= ' background-color: #fff;';
- }
-
- // Not supported message style is inlined incase the style sheet doesn't get included
- $out = "<section class='presentation-wrapper'>";
- $out .= "<p class='not-supported-msg' style='display: inherit; padding: 25%; text-align: center;'>";
- $out .= __( 'This slideshow could not be started. Try refreshing the page or viewing it in another browser.', 'jetpack' ) . '</p>';
-
- // Bail out unless the scripts were added
- if ( $this->scripts_and_style_included ) {
- $out .= sprintf(
- '<div class="presentation" duration="%s" data-autoplay="%s" style="%s">',
- esc_attr( $duration ),
- esc_attr( $autoplay ),
- esc_attr( $style )
- );
- $out .= "<div class='nav-arrow-left'></div>";
- $out .= "<div class='nav-arrow-right'></div>";
- $out .= "<div class='nav-fullscreen-button'></div>";
-
- if ( $autoplay ) {
- $out .= '<div class="autoplay-overlay" style="display: none;"><p class="overlay-msg">';
- $out .= __( 'Click to autoplay the presentation!', 'jetpack' );
- $out .= '</p></div>';
- }
-
- $out .= do_shortcode( $content );
- }
-
- $out .= '</section>';
-
- $this->presentation_initialized = false;
-
- return $out;
- }
-
- function slide_shortcode( $atts, $content = '' ) {
- // Bail out unless wrapped by a [presentation] shortcode
- if ( ! $this->presentation_initialized ) {
- return $content;
- }
-
- $atts = shortcode_atts(
- array(
- 'transition' => '',
- 'scale' => '',
- 'rotate' => '',
- 'fade' => '',
- 'fadebullets' => '',
- 'bgcolor' => '',
- 'bgimg' => '',
- ),
- $atts,
- 'slide'
- );
-
- // Determine positioning based on transition
- if ( '' == trim( $atts['transition'] ) ) {
- $atts['transition'] = $this->presentation_settings['transition'];
- }
-
- // Setting the content scale
- if ( '' == trim( $atts['scale'] ) ) {
- $atts['scale'] = $this->presentation_settings['scale'];
- }
-
- if ( '' == trim( $atts['scale'] ) ) {
- $scale = 1;
- } else {
- $scale = floatval( $atts['scale'] );
- }
-
- if ( $scale < 0 ) {
- $scale *= -1;
- }
-
- // Setting the content rotation
- if ( '' == trim( $atts['rotate'] ) ) {
- $atts['rotate'] = $this->presentation_settings['rotate'];
- }
-
- if ( '' == trim( $atts['rotate'] ) ) {
- $rotate = 0;
- } else {
- $rotate = floatval( $atts['rotate'] );
- }
-
- // Setting if the content should fade
- if ( '' == trim( $atts['fade'] ) ) {
- $atts['fade'] = $this->presentation_settings['fade'];
- }
-
- if ( 'on' == $atts['fade'] || 'true' == $atts['fade'] ) {
- $fade = 'fade';
- } else {
- $fade = '';
- }
-
- // Setting if bullets should fade on step changes
- if ( '' == trim( $atts['fadebullets'] ) ) {
- $atts['fadebullets'] = $this->presentation_settings['fadebullets'];
- }
-
- if ( 'on' == $atts['fadebullets'] || 'true' == $atts['fadebullets'] ) {
- $fadebullets = 'fadebullets';
- } else {
- $fadebullets = '';
- }
-
- $coords = $this->get_coords(
- array(
- 'transition' => $atts['transition'],
- 'scale' => $scale,
- 'rotate' => $rotate,
- )
- );
-
- $x = $coords['x'];
- $y = $coords['y'];
-
- // Check for background color XOR background image
- // Use a white background if nothing specified
- if ( preg_match( '/https?\:\/\/[^\'"\s]*/', $atts['bgimg'], $matches ) ) {
- $style = 'background-image: url("' . esc_url( $matches[0] ) . '");';
- } elseif ( '' != trim( $atts['bgcolor'] ) ) {
- $style = 'background-color: ' . esc_attr( $atts['bgcolor'] ) . ';';
- } else {
- $style = '';
- }
-
- // Put everything together and let jmpress do the magic!
- $out = sprintf(
- '<div class="step %s %s" data-x="%s" data-y="%s" data-scale="%s" data-rotate="%s" style="%s">',
- esc_attr( $fade ),
- esc_attr( $fadebullets ),
- esc_attr( $x ),
- esc_attr( $y ),
- esc_attr( $scale ),
- esc_attr( $rotate ),
- esc_attr( $style )
- );
-
- $out .= '<div class="slide-content">';
- $out .= do_shortcode( $content );
- $out .= '</div></div>';
-
- return $out;
- }
-
- /**
- * Determines the position of the next slide based on the position and scaling of the previous slide.
- *
- * @param array $args : an array with the following key-value pairs
- * string $transition: the transition name, "up", "down", "left", or "right"
- * float $scale: the scale of the next slide (used to determine the position of the slide after that)
- *
- * @return array with the 'x' and 'y' coordinates of the slide
- */
- function get_coords( $args ) {
- if ( 0 == $args['scale'] ) {
- $args['scale'] = 1;
- }
-
- $width = $this->presentation_settings['width'];
- $height = $this->presentation_settings['height'];
- $last = $this->presentation_settings['last'];
- $scale = $last['scale'];
-
- $next = array(
- 'x' => $last['x'],
- 'y' => $last['y'],
- 'scale' => $args['scale'],
- 'rotate' => $args['rotate'],
- );
-
- // All angles are measured from the vertical axis, so everything is backwards!
- $diagAngle = atan2( $width, $height );
- $diagonal = sqrt( pow( $width, 2 ) + pow( $height, 2 ) );
-
- // We offset the angles by the angle formed by the diagonal so that
- // we can multiply the sines directly against the diagonal length
- $theta = deg2rad( $last['rotate'] ) - $diagAngle;
- $phi = deg2rad( $next['rotate'] ) - $diagAngle;
-
- // We start by displacing by the slide dimensions
- $totalHorizDisp = $width * $scale;
- $totalVertDisp = $height * $scale;
-
- // If the previous slide was rotated, we add the incremental offset from the rotation
- // Namely the difference between the regular dimension (no rotation) and the component
- // of the diagonal for that angle
- $totalHorizDisp += ( ( ( abs( sin( $theta ) ) * $diagonal ) - $width ) / 2 ) * $scale;
- $totalVertDisp += ( ( ( abs( cos( $theta ) ) * $diagonal ) - $height ) / 2 ) * $scale;
-
- // Similarly, we check if the current slide has been rotated and add whatever additional
- // offset has been added. This is so that two rotated corners don't clash with each other.
- // Note: we are checking the raw angle relative to the vertical axis, NOT the diagonal angle.
- if ( 0 !== $next['rotate'] % 180 ) {
- $totalHorizDisp += ( abs( ( sin( $phi ) * $diagonal ) - $width ) / 2 ) * $next['scale'];
- $totalVertDisp += ( abs( ( cos( $phi ) * $diagonal ) - $height ) / 2 ) * $next['scale'];
- }
-
- switch ( trim( $args['transition'] ) ) {
- case 'none':
- break;
-
- case 'left':
- $next['x'] -= $totalHorizDisp;
- break;
-
- case 'right':
- $next['x'] += $totalHorizDisp;
- break;
-
- case 'up':
- $next['y'] -= $totalVertDisp;
- break;
-
- case 'down':
- default:
- $next['y'] += $totalVertDisp;
- break;
- }
-
- $this->presentation_settings['last'] = $next;
-
- return $next;
- }
- }
-
- $GLOBALS['presentations'] = new Presentations();
-endif;
diff --git a/plugins/jetpack/modules/shortcodes/quiz.php b/plugins/jetpack/modules/shortcodes/quiz.php
deleted file mode 100644
index fa4ed960..00000000
--- a/plugins/jetpack/modules/shortcodes/quiz.php
+++ /dev/null
@@ -1,309 +0,0 @@
-<?php //phpcs:ignore WordPress.Files.FileName.InvalidClassFileNam
-/**
- * Quiz shortcode.
- *
- * Usage:
- *
- * [quiz]
- * [question]What's the right answer?[/question]
- * [wrong]This one?[explanation]Nope[/explanation][/wrong]
- * [answer]Yes, this is the one![explanation]Yay![/explanation][/answer]
- * [wrong]Maybe this one[explanation]Keep trying[/explanation][/wrong]
- * [wrong]How about this one?[explanation]Try again[/explanation][/wrong]
- * [/quiz]
- */
-class Quiz_Shortcode {
-
- /**
- * Parameters admitted by [quiz] shortcode.
- *
- * @since 4.5.0
- *
- * @var array
- */
- private static $quiz_params = array();
-
- /**
- * Whether the scripts were enqueued.
- *
- * @since 4.5.0
- *
- * @var bool
- */
- private static $scripts_enqueued = false;
-
- /**
- * In a8c training, store user currently logged in.
- *
- * @since 4.5.0
- *
- * @var null
- */
- private static $username = null;
-
- /**
- * Whether the noscript tag was already printed.
- *
- * @since 4.5.0
- *
- * @var bool
- */
- private static $noscript_info_printed = false;
-
- /**
- * Whether JavaScript is available.
- *
- * @since 4.5.0
- *
- * @var null
- */
- private static $javascript_unavailable = null;
-
- /**
- * Register all shortcodes.
- *
- * @since 4.5.0
- */
- public static function init() {
- add_shortcode( 'quiz', array( __CLASS__, 'shortcode' ) );
- add_shortcode( 'question', array( __CLASS__, 'question_shortcode' ) );
- add_shortcode( 'answer', array( __CLASS__, 'answer_shortcode' ) );
- add_shortcode( 'wrong', array( __CLASS__, 'wrong_shortcode' ) );
- add_shortcode( 'explanation', array( __CLASS__, 'explanation_shortcode' ) );
- }
-
- /**
- * Enqueue assets needed by the quiz,
- *
- * @since 4.5.0
- */
- private static function enqueue_scripts() {
- wp_enqueue_style( 'quiz', plugins_url( 'css/quiz.css', __FILE__ ), array(), JETPACK__VERSION );
- wp_enqueue_script(
- 'quiz',
- Jetpack::get_file_url_for_environment( '_inc/build/shortcodes/js/quiz.min.js', 'modules/shortcodes/js/quiz.js' ),
- array( 'jquery' ),
- JETPACK__VERSION,
- true
- );
- }
-
- /**
- * Check if this is a feed and thus JS is unavailable.
- *
- * @since 4.5.0
- *
- * @return bool|null
- */
- private static function is_javascript_unavailable() {
- if ( ! is_null( self::$javascript_unavailable ) ) {
- return self::$javascript_unavailable;
- }
-
- if ( is_feed() ) {
- self::$javascript_unavailable = true;
- return self::$javascript_unavailable;
- }
-
- self::$javascript_unavailable = false;
- return self::$javascript_unavailable;
- }
-
- /**
- * Display message when JS is not available.
- *
- * @since 4.5.0
- *
- * @return string
- */
- private static function noscript_info() {
- if ( self::$noscript_info_printed ) {
- return '';
- }
- self::$noscript_info_printed = true;
- return '<noscript><div><i>' . esc_html__( 'Please view this post in your web browser to complete the quiz.', 'jetpack' ) . '</i></div></noscript>';
- }
-
- /**
- * Check if we're in WordPress.com.
- *
- * @since 4.5.0
- *
- * @return bool
- */
- public static function is_wpcom() {
- return defined( 'IS_WPCOM' ) && IS_WPCOM;
- }
-
- /**
- * Parse shortcode arguments and render its output.
- *
- * @since 4.5.0
- *
- * @param array $atts Shortcode parameters.
- * @param string $content Content enclosed by shortcode tags.
- *
- * @return string
- */
- public static function shortcode( $atts, $content = null ) {
-
- // There's nothing to do if there's nothing enclosed.
- if ( empty( $content ) ) {
- return '';
- }
-
- $id = '';
-
- if ( self::is_javascript_unavailable() ) {
- // in an e-mail print the question and the info sentence once per question, too.
- self::$noscript_info_printed = false;
- } else {
-
- if ( ! self::$scripts_enqueued ) {
- // lazy enqueue cannot use the wp_enqueue_scripts action anymore.
- self::enqueue_scripts();
- self::$scripts_enqueued = true;
- }
-
- $default_atts = self::is_wpcom()
- ? array(
- 'trackid' => '',
- 'a8ctraining' => '',
- )
- : array(
- 'trackid' => '',
- );
-
- self::$quiz_params = shortcode_atts( $default_atts, $atts );
-
- if ( ! empty( self::$quiz_params['trackid'] ) ) {
- $id .= ' data-trackid="' . esc_attr( self::$quiz_params['trackid'] ) . '"';
- }
- if ( self::is_wpcom() && ! empty( self::$quiz_params['a8ctraining'] ) ) {
- if ( is_null( self::$username ) ) {
- self::$username = wp_get_current_user()->user_login;
- }
- $id .= ' data-a8ctraining="' . esc_attr( self::$quiz_params['a8ctraining'] ) . '" data-username="' . esc_attr( self::$username ) . '"';
- }
- }
-
- $quiz = self::do_shortcode( $content );
- return '<div class="jetpack-quiz quiz"' . $id . '>' . $quiz . '</div>';
- }
-
- /**
- * Strip line breaks, restrict allowed HTML to a few whitelisted tags and execute nested shortcodes.
- *
- * @since 4.5.0
- *
- * @param string $content Post content.
- *
- * @return mixed|string
- */
- private static function do_shortcode( $content ) {
- // strip autoinserted line breaks.
- $content = preg_replace( '#(<(?:br /|/?p)>\n?)*(\[/?[a-z]+\])(<(?:br /|/?p)>\n?)*#', '$2', $content );
-
- // Add internal parameter so it's only rendered when it has it.
- $content = preg_replace( '/\[(question|answer|wrong|explanation)\]/i', '[$1 quiz_item="true"]', $content );
- $content = do_shortcode( $content );
- $content = wp_kses(
- $content,
- array(
- 'tt' => array(),
- 'a' => array( 'href' => true ),
- 'pre' => array(),
- 'strong' => array(),
- 'i' => array(),
- 'br' => array(),
- 'img' => array( 'src' => true ),
- 'div' => array(
- 'class' => true,
- 'data-correct' => 1,
- 'data-track-id' => 1,
- 'data-a8ctraining' => 1,
- 'data-username' => 1,
- ),
- )
- );
- return $content;
- }
-
- /**
- * Render question.
- *
- * @since 4.5.0
- *
- * @param array $atts Shortcode attributes.
- * @param null $content Post content.
- *
- * @return string
- */
- public static function question_shortcode( $atts, $content = null ) {
- return isset( $atts['quiz_item'] )
- ? '<div class="jetpack-quiz-question question">' . self::do_shortcode( $content ) . '</div>'
- : '';
- }
-
- /**
- * Render correct answer.
- *
- * @since 4.5.0
- *
- * @param array $atts Shortcode attributes.
- * @param null $content Post content.
- *
- * @return string
- */
- public static function answer_shortcode( $atts, $content = null ) {
- if ( self::is_javascript_unavailable() ) {
- return self::noscript_info();
- }
-
- return isset( $atts['quiz_item'] )
- ? '<div class="jetpack-quiz-answer answer" data-correct="1">' . self::do_shortcode( $content ) . '</div>'
- : '';
- }
-
- /**
- * Render wrong response.
- *
- * @since 4.5.0
- *
- * @param array $atts Shortcode attributes.
- * @param null $content Post content.
- *
- * @return string
- */
- public static function wrong_shortcode( $atts, $content = null ) {
- if ( self::is_javascript_unavailable() ) {
- return self::noscript_info();
- }
-
- return isset( $atts['quiz_item'] )
- ? '<div class="jetpack-quiz-answer answer">' . self::do_shortcode( $content ) . '</div>'
- : '';
- }
-
- /**
- * Render explanation for wrong or right answer.
- *
- * @since 4.5.0
- *
- * @param array $atts Shortcode attributes.
- * @param null $content Post content.
- *
- * @return string
- */
- public static function explanation_shortcode( $atts, $content = null ) {
- if ( self::is_javascript_unavailable() ) {
- return self::noscript_info();
- }
-
- return isset( $atts['quiz_item'] )
- ? '<div class="jetpack-quiz-explanation explanation">' . self::do_shortcode( $content ) . '</div>'
- : '';
- }
-}
-
-Quiz_Shortcode::init();
diff --git a/plugins/jetpack/modules/shortcodes/recipe.php b/plugins/jetpack/modules/shortcodes/recipe.php
deleted file mode 100644
index 7846b154..00000000
--- a/plugins/jetpack/modules/shortcodes/recipe.php
+++ /dev/null
@@ -1,515 +0,0 @@
-<?php
-
-/**
- * Embed recipe 'cards' in post, with basic styling and print functionality
- *
- * To Do
- * - defaults settings
- * - basic styles/themecolor styles
- * - validation/sanitization
- * - print styles
- */
-class Jetpack_Recipes {
-
- private $scripts_and_style_included = false;
-
- function __construct() {
- add_action( 'init', array( $this, 'action_init' ) );
-
- add_filter( 'wp_kses_allowed_html', array( $this, 'add_recipes_kses_rules' ), 10, 2 );
- }
-
- /**
- * Add Schema-specific attributes to our allowed tags in wp_kses,
- * so we can have better Schema.org compliance.
- *
- * @param array $allowedtags Array of allowed HTML tags in recipes.
- * @param array $context Context to judge allowed tags by.
- */
- function add_recipes_kses_rules( $allowedtags, $context ) {
- if ( in_array( $context, array( '', 'post', 'data' ) ) ) :
- // Create an array of all the tags we'd like to add the itemprop attribute to.
- $tags = array( 'li', 'ol', 'ul', 'img', 'p', 'h3', 'time' );
- foreach ( $tags as $tag ) {
- $allowedtags = $this->add_kses_rule(
- $allowedtags,
- $tag,
- array(
- 'class' => array(),
- 'itemprop' => array(),
- 'datetime' => array(),
- )
- );
- }
-
- // Allow itemscope and itemtype for divs.
- $allowedtags = $this->add_kses_rule(
- $allowedtags,
- 'div',
- array(
- 'class' => array(),
- 'itemscope' => array(),
- 'itemtype' => array(),
- )
- );
- endif;
-
- return $allowedtags;
- }
-
- /**
- * Function to add a new property rule to our kses array.
- * Used by add_recipe_kses_rules() above.
- *
- * @param array $all_tags Array of allowed HTML tags in recipes.
- * @param string $tag New HTML tag to add to the array of allowed HTML.
- * @param array $rules Array of allowed attributes for that HTML tag.
- */
- private function add_kses_rule( $all_tags, $tag, $rules ) {
-
- // If the tag doesn't already exist, add it.
- if ( ! isset( $all_tags[ $tag ] ) ) {
- $all_tags[ $tag ] = array();
- }
-
- // Merge the new tags with existing tags.
- $all_tags[ $tag ] = array_merge( $all_tags[ $tag ], $rules );
-
- return $all_tags;
- }
-
- /**
- * Register our shortcode and enqueue necessary files.
- */
- function action_init() {
- // Enqueue styles if [recipe] exists.
- add_action( 'wp_head', array( $this, 'add_scripts' ), 1 );
-
- // Render [recipe], along with other shortcodes that can be nested within.
- add_shortcode( 'recipe', array( $this, 'recipe_shortcode' ) );
- add_shortcode( 'recipe-notes', array( $this, 'recipe_notes_shortcode' ) );
- add_shortcode( 'recipe-ingredients', array( $this, 'recipe_ingredients_shortcode' ) );
- add_shortcode( 'recipe-directions', array( $this, 'recipe_directions_shortcode' ) );
- }
-
- /**
- * Enqueue scripts and styles
- */
- function add_scripts() {
- if ( empty( $GLOBALS['posts'] ) || ! is_array( $GLOBALS['posts'] ) ) {
- return;
- }
-
- foreach ( $GLOBALS['posts'] as $p ) {
- if ( has_shortcode( $p->post_content, 'recipe' ) ) {
- $this->scripts_and_style_included = true;
- break;
- }
- }
-
- if ( ! $this->scripts_and_style_included ) {
- return;
- }
-
- wp_enqueue_style( 'jetpack-recipes-style', plugins_url( '/css/recipes.css', __FILE__ ), array(), '20130919' );
- wp_style_add_data( 'jetpack-recipes-style', 'rtl', 'replace' );
-
- // add $themecolors-defined styles.
- wp_add_inline_style( 'jetpack-recipes-style', self::themecolor_styles() );
-
- wp_enqueue_script(
- 'jetpack-recipes-printthis',
- Jetpack::get_file_url_for_environment( '_inc/build/shortcodes/js/recipes-printthis.min.js', 'modules/shortcodes/js/recipes-printthis.js' ),
- array( 'jquery' ),
- '20170202'
- );
-
- wp_enqueue_script(
- 'jetpack-recipes-js',
- Jetpack::get_file_url_for_environment( '_inc/build/shortcodes/js/recipes.min.js', 'modules/shortcodes/js/recipes.js' ),
- array( 'jquery', 'jetpack-recipes-printthis' ),
- '20131230'
- );
-
- $title_var = wp_title( '|', false, 'right' );
- $rtl = is_rtl() ? '-rtl' : '';
- $print_css_var = plugins_url( "/css/recipes-print{$rtl}.css", __FILE__ );
-
- wp_localize_script(
- 'jetpack-recipes-js',
- 'jetpack_recipes_vars',
- array(
- 'pageTitle' => $title_var,
- 'loadCSS' => $print_css_var,
- )
- );
- }
-
- /**
- * Our [recipe] shortcode.
- * Prints recipe data styled to look good on *any* theme.
- *
- * @param array $atts Array of shortcode attributes.
- * @param string $content Post content.
- *
- * @return string HTML for recipe shortcode.
- */
- static function recipe_shortcode( $atts, $content = '' ) {
- $atts = shortcode_atts(
- array(
- 'title' => '', // string.
- 'servings' => '', // intval.
- 'time' => '', // string.
- 'difficulty' => '', // string.
- 'print' => '', // string.
- 'source' => '', // string.
- 'sourceurl' => '', // string.
- 'image' => '', // string.
- 'description' => '', // string.
- ),
- $atts,
- 'recipe'
- );
-
- return self::recipe_shortcode_html( $atts, $content );
- }
-
- /**
- * The recipe output
- *
- * @param array $atts Array of shortcode attributes.
- * @param string $content Post content.
- *
- * @return string HTML output
- */
- static function recipe_shortcode_html( $atts, $content = '' ) {
-
- $html = '<div class="hrecipe jetpack-recipe" itemscope itemtype="https://schema.org/Recipe">';
-
- // Print the recipe title if exists.
- if ( '' !== $atts['title'] ) {
- $html .= '<h3 class="jetpack-recipe-title" itemprop="name">' . esc_html( $atts['title'] ) . '</h3>';
- }
-
- // Print the recipe meta if exists.
- if ( '' !== $atts['servings'] || '' != $atts['time'] || '' != $atts['difficulty'] || '' != $atts['print'] ) {
- $html .= '<ul class="jetpack-recipe-meta">';
-
- if ( '' !== $atts['servings'] ) {
- $html .= sprintf(
- '<li class="jetpack-recipe-servings" itemprop="recipeYield"><strong>%1$s: </strong>%2$s</li>',
- esc_html_x( 'Servings', 'recipe', 'jetpack' ),
- esc_html( $atts['servings'] )
- );
- }
-
- if ( '' !== $atts['time'] ) {
- // Get a time that's supported by Schema.org.
- $duration = WPCOM_JSON_API_Date::format_duration( $atts['time'] );
- // If no duration can be calculated, let's output what the user provided.
- if ( empty( $duration ) ) {
- $duration = $atts['time'];
- }
-
- $html .= sprintf(
- '<li class="jetpack-recipe-time">
- <time itemprop="totalTime" datetime="%3$s"><strong>%1$s: </strong>%2$s</time>
- </li>',
- esc_html_x( 'Time', 'recipe', 'jetpack' ),
- esc_html( $atts['time'] ),
- esc_attr( $duration )
- );
- }
-
- if ( '' !== $atts['difficulty'] ) {
- $html .= sprintf(
- '<li class="jetpack-recipe-difficulty"><strong>%1$s: </strong>%2$s</li>',
- esc_html_x( 'Difficulty', 'recipe', 'jetpack' ),
- esc_html( $atts['difficulty'] )
- );
- }
-
- if ( '' !== $atts['source'] ) {
- $html .= sprintf(
- '<li class="jetpack-recipe-source"><strong>%1$s: </strong>',
- esc_html_x( 'Source', 'recipe', 'jetpack' )
- );
-
- if ( '' !== $atts['sourceurl'] ) :
- // Show the link if we have one.
- $html .= sprintf(
- '<a href="%2$s">%1$s</a>',
- esc_html( $atts['source'] ),
- esc_url( $atts['sourceurl'] )
- );
- else :
- // Skip the link.
- $html .= sprintf(
- '%1$s',
- esc_html( $atts['source'] )
- );
- endif;
-
- $html .= '</li>';
- }
-
- if ( 'false' !== $atts['print'] ) {
- $html .= sprintf(
- '<li class="jetpack-recipe-print"><a href="#">%1$s</a></li>',
- esc_html_x( 'Print', 'recipe', 'jetpack' )
- );
- }
-
- $html .= '</ul>';
- } // End if().
-
- // Output the image, if we have one.
- if ( '' !== $atts['image'] ) {
- $html .= sprintf(
- '<img class="jetpack-recipe-image" itemprop="image" src="%1$s" />',
- esc_url( $atts['image'] )
- );
- }
-
- // Output the description, if we have one.
- if ( '' !== $atts['description'] ) {
- $html .= sprintf(
- '<p class="jetpack-recipe-description" itemprop="description">%1$s</p>',
- esc_html( $atts['description'] )
- );
- }
-
- // Print content between codes.
- $html .= '<div class="jetpack-recipe-content">' . do_shortcode( $content ) . '</div>';
-
- // Close it up.
- $html .= '</div>';
-
- // If there is a recipe within a recipe, remove the shortcode.
- if ( has_shortcode( $html, 'recipe' ) ) {
- remove_shortcode( 'recipe' );
- }
-
- // Sanitize html.
- $html = wp_kses_post( $html );
-
- // Return the HTML block.
- return $html;
- }
-
- /**
- * Our [recipe-notes] shortcode.
- * Outputs ingredients, styled in a div.
- *
- * @param array $atts Array of shortcode attributes.
- * @param string $content Post content.
- *
- * @return string HTML for recipe notes shortcode.
- */
- static function recipe_notes_shortcode( $atts, $content = '' ) {
- $atts = shortcode_atts(
- array(
- 'title' => '', // string.
- ),
- $atts,
- 'recipe-notes'
- );
-
- $html = '';
-
- // Print a title if one exists.
- if ( '' !== $atts['title'] ) {
- $html .= '<h4 class="jetpack-recipe-notes-title">' . esc_html( $atts['title'] ) . '</h4>';
- }
-
- $html .= '<div class="jetpack-recipe-notes">';
-
- // Format content using list functionality, if desired.
- $html .= self::output_list_content( $content, 'notes' );
-
- $html .= '</div>';
-
- // Sanitize html.
- $html = wp_kses_post( $html );
-
- // Return the HTML block.
- return $html;
- }
-
- /**
- * Our [recipe-ingredients] shortcode.
- * Outputs notes, styled in a div.
- *
- * @param array $atts Array of shortcode attributes.
- * @param string $content Post content.
- *
- * @return string HTML for recipe ingredients shortcode.
- */
- static function recipe_ingredients_shortcode( $atts, $content = '' ) {
- $atts = shortcode_atts(
- array(
- 'title' => esc_html_x( 'Ingredients', 'recipe', 'jetpack' ), // string.
- ),
- $atts,
- 'recipe-ingredients'
- );
-
- $html = '<div class="jetpack-recipe-ingredients">';
-
- // Print a title unless the user has opted to exclude it.
- if ( 'false' !== $atts['title'] ) {
- $html .= '<h4 class="jetpack-recipe-ingredients-title">' . esc_html( $atts['title'] ) . '</h4>';
- }
-
- // Format content using list functionality.
- $html .= self::output_list_content( $content, 'ingredients' );
-
- $html .= '</div>';
-
- // Sanitize html.
- $html = wp_kses_post( $html );
-
- // Return the HTML block.
- return $html;
- }
-
- /**
- * Reusable function to check for shortened formatting.
- * Basically, users can create lists with the following shorthand:
- * - item one
- * - item two
- * - item three
- * And we'll magically convert it to a list. This has the added benefit
- * of including itemprops for the recipe schema.
- *
- * @param string $content HTML content.
- * @param string $type Type of list.
- *
- * @return string content formatted as a list item
- */
- static function output_list_content( $content, $type ) {
- $html = '';
-
- switch ( $type ) {
- case 'directions':
- $list_item_replacement = '<li class="jetpack-recipe-directions">${1}</li>';
- $itemprop = ' itemprop="recipeInstructions"';
- $listtype = 'ol';
- break;
- case 'ingredients':
- $list_item_replacement = '<li class="jetpack-recipe-ingredient" itemprop="recipeIngredient">${1}</li>';
- $itemprop = '';
- $listtype = 'ul';
- break;
- default:
- $list_item_replacement = '<li class="jetpack-recipe-notes">${1}</li>';
- $itemprop = '';
- $listtype = 'ul';
- }
-
- // Check to see if the user is trying to use shortened formatting.
- if (
- strpos( $content, '&#8211;' ) !== false ||
- strpos( $content, '&#8212;' ) !== false ||
- strpos( $content, '-' ) !== false ||
- strpos( $content, '*' ) !== false ||
- strpos( $content, '#' ) !== false ||
- strpos( $content, '–' ) !== false || // ndash.
- strpos( $content, '—' ) !== false || // mdash.
- preg_match( '/\d+\.\s/', $content )
- ) {
- // Remove breaks and extra whitespace.
- $content = str_replace( "<br />\n", "\n", $content );
- $content = trim( $content );
-
- $ul_pattern = '/(?:^|\n|\<p\>)+(?:[\-–—]+|\&#8211;|\&#8212;|\*)+\h+(.*)/mi';
- $ol_pattern = '/(?:^|\n|\<p\>)+(?:\d+\.|#+)+\h+(.*)/mi';
-
- preg_match_all( $ul_pattern, $content, $ul_matches );
- preg_match_all( $ol_pattern, $content, $ol_matches );
-
- if ( 0 !== count( $ul_matches[0] ) || 0 !== count( $ol_matches[0] ) ) {
-
- if ( 0 !== count( $ol_matches[0] ) ) {
- $listtype = 'ol';
- $list_item_pattern = $ol_pattern;
- } else {
- $listtype = 'ul';
- $list_item_pattern = $ul_pattern;
- }
- $html .= '<' . $listtype . $itemprop . '>';
- $html .= preg_replace( $list_item_pattern, $list_item_replacement, $content );
- $html .= '</' . $listtype . '>';
-
- // Strip out any empty <p> tags and stray </p> tags, because those are just silly.
- $empty_p_pattern = '/(<p>)*\s*<\/p>/mi';
- $html = preg_replace( $empty_p_pattern, '', $html );
- } else {
- $html .= do_shortcode( $content );
- }
- } else {
- $html .= do_shortcode( $content );
- }
-
- // Return our formatted content.
- return $html;
- }
-
- /**
- * Our [recipe-directions] shortcode.
- * Outputs directions, styled in a div.
- *
- * @param array $atts Array of shortcode attributes.
- * @param string $content Post content.
- *
- * @return string HTML for recipe directions shortcode.
- */
- static function recipe_directions_shortcode( $atts, $content = '' ) {
- $atts = shortcode_atts(
- array(
- 'title' => esc_html_x( 'Directions', 'recipe', 'jetpack' ), // string.
- ),
- $atts,
- 'recipe-directions'
- );
-
- $html = '<div class="jetpack-recipe-directions">';
-
- // Print a title unless the user has specified to exclude it.
- if ( 'false' !== $atts['title'] ) {
- $html .= '<h4 class="jetpack-recipe-directions-title">' . esc_html( $atts['title'] ) . '</h4>';
- }
-
- // Format content using list functionality.
- $html .= self::output_list_content( $content, 'directions' );
-
- $html .= '</div>';
-
- // Sanitize html.
- $html = wp_kses_post( $html );
-
- // Return the HTML block.
- return $html;
- }
-
- /**
- * Use $themecolors array to style the Recipes shortcode
- *
- * @print style block
- * @return string $style
- */
- function themecolor_styles() {
- global $themecolors;
- $style = '';
-
- if ( isset( $themecolors ) ) {
- $style .= '.jetpack-recipe { border-color: #' . esc_attr( $themecolors['border'] ) . '; }';
- $style .= '.jetpack-recipe-title { border-bottom-color: #' . esc_attr( $themecolors['link'] ) . '; }';
- }
-
- return $style;
- }
-
-}
-
-new Jetpack_Recipes();
diff --git a/plugins/jetpack/modules/shortcodes/scribd.php b/plugins/jetpack/modules/shortcodes/scribd.php
deleted file mode 100644
index 1810c2fa..00000000
--- a/plugins/jetpack/modules/shortcodes/scribd.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-
-/*
- Scribd Short Code
-Author: Nick Momrik
-
-[scribd id=DOCUMENT_ID key=DOCUMENT_KEY mode=MODE]
-DOCUMENT_ID is an integer (also used as an object_id)
-DOCUMENT_KEY is an alphanumeric hash ('-' character as well)
-MODE can be 'list', 'book', 'slide', 'slideshow', or 'tile'
-
-[scribd id=39027960 key=key-3kaiwcjqhtipf25m8tw mode=list]
-*/
-
-function scribd_shortcode_handler( $atts ) {
- $atts = shortcode_atts(
- array(
- 'id' => 0,
- 'key' => 0,
- 'mode' => '',
- ),
- $atts,
- 'scribd'
- );
-
- $modes = array( 'list', 'book', 'slide', 'slideshow', 'tile' );
-
- $atts['id'] = (int) $atts['id'];
- if ( preg_match( '/^[A-Za-z0-9-]+$/', $atts['key'], $m ) ) {
- $atts['key'] = $m[0];
-
- if ( ! in_array( $atts['mode'], $modes ) ) {
- $atts['mode'] = '';
- }
-
- return scribd_shortcode_markup( $atts );
- } else {
- return '';
- }
-}
-
-function scribd_shortcode_markup( $atts ) {
- $markup = <<<EOD
-<iframe class="scribd_iframe_embed" src="//www.scribd.com/embeds/$atts[id]/content?start_page=1&view_mode=$atts[mode]&access_key=$atts[key]" data-auto-height="true" scrolling="no" id="scribd_$atts[id]" width="100%" height="500" frameborder="0"></iframe>
-<div style="font-size:10px;text-align:center;width:100%"><a href="http://www.scribd.com/doc/$atts[id]" target="_blank">View this document on Scribd</a></div>
-EOD;
-
- return $markup;
-}
-
-add_shortcode( 'scribd', 'scribd_shortcode_handler' );
-
-// Scribd supports HTTPS, so use that endpoint to get HTTPS-compatible embeds
-function scribd_https_oembed( $providers ) {
- if ( isset( $providers['#https?://(www\.)?scribd\.com/doc/.*#i'] ) ) {
- $providers['#https?://(www\.)?scribd\.com/doc/.*#i'][0] = 'https://www.scribd.com/services/oembed';
- }
-
- return $providers;
-}
-
-add_filter( 'oembed_providers', 'scribd_https_oembed' );
diff --git a/plugins/jetpack/modules/shortcodes/sitemap.php b/plugins/jetpack/modules/shortcodes/sitemap.php
deleted file mode 100644
index d26210f0..00000000
--- a/plugins/jetpack/modules/shortcodes/sitemap.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-/**
- * Sitemap shortcode.
- *
- * Usage: [sitemap]
- *
- * @package Jetpack
- */
-
-add_shortcode( 'sitemap', 'jetpack_sitemap_shortcode' );
-
-/**
- * Renders a tree of pages.
- *
- * @since 4.5.0
- *
- * @return string
- */
-function jetpack_sitemap_shortcode() {
- $tree = wp_list_pages(
- array(
- 'title_li' => '<b><a href="/">' . esc_html( get_bloginfo( 'name' ) ) . '</a></b>',
- 'exclude' => get_option( 'page_on_front' ),
- 'echo' => false,
- )
- );
- return empty( $tree )
- ? ''
- : '<ul class="jetpack-sitemap-shortcode">' . $tree . '</ul>';
-}
diff --git a/plugins/jetpack/modules/shortcodes/slideshare.php b/plugins/jetpack/modules/shortcodes/slideshare.php
deleted file mode 100644
index 898ae57e..00000000
--- a/plugins/jetpack/modules/shortcodes/slideshare.php
+++ /dev/null
@@ -1,121 +0,0 @@
-<?php
-/**
- * Slideshare shortcode format:
- * Old style (still compatible): [slideshare id=5342235&doc=camprock-101002163655-phpapp01&w=300&h=200]
- * New style: [slideshare id=5342235&w=300&h=200&fb=0&mw=0&mh=0&sc=no]
- *
- * Legend:
- * id = Document ID provided by Slideshare
- * w = Width of iFrame (int)
- * h = Height of iFrame (int)
- * fb = iFrame frameborder (int)
- * mw = iFrame marginwidth (int)
- * mh = iFrame marginheight (int)
- * sc = iFrame Scrollbar (yes/no)
- * pro = Slideshare Pro (yes/no)
- * style = Inline CSS (string)
- **/
-
-add_shortcode( 'slideshare', 'slideshare_shortcode' );
-
-function slideshare_shortcode( $atts ) {
- global $content_width;
-
- $params = shortcode_new_to_old_params( $atts );
- parse_str( $params, $arguments );
-
- if ( empty( $arguments ) ) {
- return '<!-- SlideShare error: no arguments -->';
- }
-
- $attr = shortcode_atts(
- array(
- 'id' => '',
- 'w' => '',
- 'h' => '',
- 'fb' => '',
- 'mw' => '',
- 'mh' => '',
- 'sc' => '',
- 'pro' => '',
- 'style' => '',
- ),
- $arguments
- );
-
- // check that the Slideshare ID contains letters, numbers and query strings
- $pattern = '/[^-_a-zA-Z0-9?=&]/';
- if ( empty( $attr['id'] ) || preg_match( $pattern, $attr['id'] ) ) {
- return '<!-- SlideShare error: id is missing or has illegal characters -->';
- }
-
- // check the width/height
- $w = $attr['w'];
- if ( empty( $w ) && ! empty( $content_width ) ) {
- $w = intval( $content_width );
- } elseif ( ! ( $w = intval( $w ) ) || $w < 300 || $w > 1600 ) {
- $w = 425;
- } else {
- $w = intval( $w );
- }
-
- $h = ceil( $w * 348 / 425 ); // Note: user-supplied height is ignored.
-
- if ( isset( $attr['pro'] ) && $attr['pro'] ) {
- $source = 'https://www.slideshare.net/slidesharepro/' . $attr['id'];
- } else {
- $source = 'https://www.slideshare.net/slideshow/embed_code/' . $attr['id'];
- }
-
- if ( isset( $rel ) ) {
- $source = add_query_arg( 'rel', intval( $rel ), $source );
- }
-
- if ( isset( $startSlide ) ) {
- $source = add_query_arg( 'startSlide', intval( $startSlide ), $source );
- }
-
- $player = sprintf( "<iframe src='%s' width='%d' height='%d'", esc_url( $source ), $w, $h );
-
- // check the frameborder
- if ( ! empty( $attr['fb'] ) || '0' === $attr['fb'] ) {
- $player .= " frameborder='" . intval( $attr['fb'] ) . "'";
- }
-
- // check the margin width; if not empty, cast as int
- if ( ! empty( $attr['mw'] ) || '0' === $attr['mw'] ) {
- $player .= " marginwidth='" . intval( $attr['mw'] ) . "'";
- }
-
- // check the margin height, if not empty, cast as int
- if ( ! empty( $attr['mh'] ) || '0' === $attr['mh'] ) {
- $player .= " marginheight='" . intval( $attr['mh'] ) . "'";
- }
-
- if ( ! empty( $attr['style'] ) ) {
- $player .= " style='" . esc_attr( $attr['style'] ) . "'";
- }
-
- // check the scrollbar; cast as a lowercase string for comparison
- if ( ! empty( $attr['sc'] ) ) {
- $sc = strtolower( $attr['sc'] );
-
- if ( in_array( $sc, array( 'yes', 'no' ) ) ) {
- $player .= " scrolling='" . $sc . "'";
- }
- }
-
- $player .= ' allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe>';
-
- /**
- * Filter the returned SlideShare shortcode.
- *
- * @module shortcodes
- *
- * @since 4.7.0
- *
- * @param string $player The iframe to return.
- * @param array $atts The attributes specified in the shortcode.
- */
- return apply_filters( 'jetpack_slideshare_shortcode', $player, $atts );
-}
diff --git a/plugins/jetpack/modules/shortcodes/slideshow.php b/plugins/jetpack/modules/shortcodes/slideshow.php
deleted file mode 100644
index 43428dc8..00000000
--- a/plugins/jetpack/modules/shortcodes/slideshow.php
+++ /dev/null
@@ -1,316 +0,0 @@
-<?php
-
-/**
- * Slideshow shortcode usage: [gallery type="slideshow"] or the older [slideshow]
- */
-class Jetpack_Slideshow_Shortcode {
- public $instance_count = 0;
-
- function __construct() {
- global $shortcode_tags;
-
- // Only if the slideshow shortcode has not already been defined.
- if ( ! array_key_exists( 'slideshow', $shortcode_tags ) ) {
- add_shortcode( 'slideshow', array( $this, 'shortcode_callback' ) );
- }
-
- // Only if the gallery shortcode has not been redefined.
- if ( isset( $shortcode_tags['gallery'] ) && 'gallery_shortcode' === $shortcode_tags['gallery'] ) {
- add_filter( 'post_gallery', array( $this, 'post_gallery' ), 1002, 2 );
- add_filter( 'jetpack_gallery_types', array( $this, 'add_gallery_type' ), 10 );
- }
-
- /**
- * For the moment, comment out the setting for v2.8.
- * The remainder should work as it always has.
- * See: https://github.com/Automattic/jetpack/pull/85/files
- */
- // add_action( 'admin_init', array( $this, 'register_settings' ), 5 );
- }
-
- /**
- * Responds to the [gallery] shortcode, but not an actual shortcode callback.
- *
- * @param $value string An empty string if nothing has modified the gallery output, the output html otherwise
- * @param $attr array The shortcode attributes array
- *
- * @return string The (un)modified $value
- */
- function post_gallery( $value, $attr ) {
- // Bail if somebody else has done something
- if ( ! empty( $value ) ) {
- return $value;
- }
-
- // If [gallery type="slideshow"] have it behave just like [slideshow]
- if ( ! empty( $attr['type'] ) && 'slideshow' == $attr['type'] ) {
- return $this->shortcode_callback( $attr );
- }
-
- return $value;
- }
-
- /**
- * Add the Slideshow type to gallery settings
- *
- * @see Jetpack_Tiled_Gallery::media_ui_print_templates
- *
- * @param $types array An array of types where the key is the value, and the value is the caption.
- *
- * @return array
- */
- function add_gallery_type( $types = array() ) {
- $types['slideshow'] = esc_html__( 'Slideshow', 'jetpack' );
-
- return $types;
- }
-
- function register_settings() {
- add_settings_section( 'slideshow_section', __( 'Image Gallery Slideshow', 'jetpack' ), '__return_empty_string', 'media' );
-
- add_settings_field( 'jetpack_slideshow_background_color', __( 'Background color', 'jetpack' ), array( $this, 'slideshow_background_color_callback' ), 'media', 'slideshow_section' );
-
- register_setting( 'media', 'jetpack_slideshow_background_color', array( $this, 'slideshow_background_color_sanitize' ) );
- }
-
- function slideshow_background_color_callback() {
- $options = array(
- 'black' => __( 'Black', 'jetpack' ),
- 'white' => __( 'White', 'jetpack' ),
- );
- $this->settings_select( 'jetpack_slideshow_background_color', $options );
- }
-
- function settings_select( $name, $values, $extra_text = '' ) {
- if ( empty( $name ) || empty( $values ) || ! is_array( $values ) ) {
- return;
- }
- $option = get_option( $name );
- ?>
- <fieldset>
- <select name="<?php echo esc_attr( $name ); ?>" id="<?php echo esc_attr( $name ); ?>">
- <?php foreach ( $values as $key => $value ) : ?>
- <option value="<?php echo esc_attr( $key ); ?>" <?php selected( $key, $option ); ?>>
- <?php echo esc_html( $value ); ?>
- </option>
- <?php endforeach; ?>
- </select>
- <?php if ( ! empty( $extra_text ) ) : ?>
- <p class="description"><?php echo esc_html( $extra_text ); ?></p>
- <?php endif; ?>
- </fieldset>
- <?php
- }
-
- function slideshow_background_color_sanitize( $value ) {
- return ( 'white' == $value ) ? 'white' : 'black';
- }
-
- function shortcode_callback( $attr ) {
- $post_id = get_the_ID();
-
- $attr = shortcode_atts(
- array(
- 'trans' => 'fade',
- 'order' => 'ASC',
- 'orderby' => 'menu_order ID',
- 'id' => $post_id,
- 'include' => '',
- 'exclude' => '',
- 'autostart' => true,
- 'size' => '',
- ),
- $attr,
- 'slideshow'
- );
-
- if ( 'rand' == strtolower( $attr['order'] ) ) {
- $attr['orderby'] = 'none';
- }
-
- $attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] );
- if ( ! $attr['orderby'] ) {
- $attr['orderby'] = 'menu_order ID';
- }
-
- if ( ! $attr['size'] ) {
- $attr['size'] = 'full';
- }
-
- // Don't restrict to the current post if include
- $post_parent = ( empty( $attr['include'] ) ) ? intval( $attr['id'] ) : null;
-
- $attachments = get_posts(
- array(
- 'post_status' => 'inherit',
- 'post_type' => 'attachment',
- 'post_mime_type' => 'image',
- 'posts_per_page' => - 1,
- 'post_parent' => $post_parent,
- 'order' => $attr['order'],
- 'orderby' => $attr['orderby'],
- 'include' => $attr['include'],
- 'exclude' => $attr['exclude'],
- 'suppress_filters' => false,
- )
- );
-
- if ( count( $attachments ) < 1 ) {
- return false;
- }
-
- $gallery_instance = sprintf( 'gallery-%d-%d', $attr['id'], ++$this->instance_count );
-
- $gallery = array();
- foreach ( $attachments as $attachment ) {
- $attachment_image_src = wp_get_attachment_image_src( $attachment->ID, $attr['size'] );
- $attachment_image_src = $attachment_image_src[0]; // [url, width, height]
- $attachment_image_title = get_the_title( $attachment->ID );
- $attachment_image_alt = get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true );
- /**
- * Filters the Slideshow slide caption.
- *
- * @module shortcodes
- *
- * @since 2.3.0
- *
- * @param string wptexturize( strip_tags( $attachment->post_excerpt ) ) Post excerpt.
- * @param string $attachment ->ID Attachment ID.
- */
- $caption = apply_filters( 'jetpack_slideshow_slide_caption', wptexturize( strip_tags( $attachment->post_excerpt ) ), $attachment->ID );
-
- $gallery[] = (object) array(
- 'src' => (string) esc_url_raw( $attachment_image_src ),
- 'id' => (string) $attachment->ID,
- 'title' => (string) esc_attr( $attachment_image_title ),
- 'alt' => (string) esc_attr( $attachment_image_alt ),
- 'caption' => (string) $caption,
- 'itemprop' => 'image',
- );
- }
-
- $color = Jetpack_Options::get_option( 'slideshow_background_color', 'black' );
-
- $js_attr = array(
- 'gallery' => $gallery,
- 'selector' => $gallery_instance,
- 'trans' => $attr['trans'] ? $attr['trans'] : 'fade',
- 'autostart' => $attr['autostart'] ? $attr['autostart'] : 'true',
- 'color' => $color,
- );
-
- // Show a link to the gallery in feeds.
- if ( is_feed() ) {
- return sprintf(
- '<a href="%s">%s</a>',
- esc_url( get_permalink( $post_id ) . '#' . $gallery_instance . '-slideshow' ),
- esc_html__( 'Click to view slideshow.', 'jetpack' )
- );
- }
-
- return $this->slideshow_js( $js_attr );
- }
-
- /**
- * Render the slideshow js
- *
- * Returns the necessary markup and js to fire a slideshow.
- *
- * @param $attr array Attributes for the slideshow.
- *
- * @uses $this->enqueue_scripts()
- *
- * @return string HTML output.
- */
- function slideshow_js( $attr ) {
- // Enqueue scripts
- $this->enqueue_scripts();
-
- $output = '';
-
- if ( defined( 'JSON_HEX_AMP' ) ) {
- // This is nice to have, but not strictly necessary since we use _wp_specialchars() below
- $gallery = json_encode( $attr['gallery'], JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT ); // phpcs:ignore PHPCompatibility
- } else {
- $gallery = json_encode( $attr['gallery'] );
- }
-
- $output .= '<p class="jetpack-slideshow-noscript robots-nocontent">' . esc_html__( 'This slideshow requires JavaScript.', 'jetpack' ) . '</p>';
- $output .= sprintf(
- '<div id="%s" class="slideshow-window jetpack-slideshow slideshow-%s" data-trans="%s" data-autostart="%s" data-gallery="%s" itemscope itemtype="https://schema.org/ImageGallery"></div>',
- esc_attr( $attr['selector'] . '-slideshow' ),
- esc_attr( $attr['color'] ),
- esc_attr( $attr['trans'] ),
- esc_attr( $attr['autostart'] ),
- /*
- * The input to json_encode() above can contain '&quot;'.
- *
- * For calls to json_encode() lacking the JSON_HEX_AMP option,
- * that '&quot;' is left unaltered. Running '&quot;' through esc_attr()
- * also leaves it unaltered since esc_attr() does not double-encode.
- *
- * This means we end up with an attribute like
- * `data-gallery="{&quot;foo&quot;:&quot;&quot;&quot;}"`,
- * which is interpreted by the browser as `{"foo":"""}`,
- * which cannot be JSON decoded.
- *
- * The preferred workaround is to include the JSON_HEX_AMP (and friends)
- * options, but these are not available until 5.3.0.
- * Alternatively, we can use _wp_specialchars( , , , true ) instead of
- * esc_attr(), which will double-encode.
- *
- * Since we can't rely on JSON_HEX_AMP, we do both.
- */
- _wp_specialchars( wp_check_invalid_utf8( $gallery ), ENT_QUOTES, false, true )
- );
-
- return $output;
- }
-
- /**
- * Actually enqueues the scripts and styles.
- */
- function enqueue_scripts() {
-
- wp_enqueue_script( 'jquery-cycle', plugins_url( '/js/jquery.cycle.min.js', __FILE__ ), array( 'jquery' ), '20161231', true );
- wp_enqueue_script(
- 'jetpack-slideshow',
- Jetpack::get_file_url_for_environment( '_inc/build/shortcodes/js/slideshow-shortcode.min.js', 'modules/shortcodes/js/slideshow-shortcode.js' ),
- array( 'jquery-cycle' ),
- '20160119.1',
- true
- );
- wp_enqueue_style( 'jetpack-slideshow', plugins_url( '/css/slideshow-shortcode.css', __FILE__ ) );
- wp_style_add_data( 'jetpack-slideshow', 'rtl', 'replace' );
-
- wp_localize_script(
- 'jetpack-slideshow',
- 'jetpackSlideshowSettings',
- /**
- * Filters the slideshow JavaScript spinner.
- *
- * @module shortcodes
- *
- * @since 2.1.0
- * @since 4.7.0 Added the `speed` option to the array of options.
- *
- * @param array $args
- * - string - spinner - URL of the spinner image.
- * - string - speed - Speed of the slideshow. Defaults to 4000.
- */
- apply_filters(
- 'jetpack_js_slideshow_settings',
- array(
- 'spinner' => plugins_url( '/img/slideshow-loader.gif', __FILE__ ),
- 'speed' => '4000',
- )
- )
- );
- }
-
- public static function init() {
- new Jetpack_Slideshow_Shortcode();
- }
-}
-
-Jetpack_Slideshow_Shortcode::init();
diff --git a/plugins/jetpack/modules/shortcodes/soundcloud.php b/plugins/jetpack/modules/shortcodes/soundcloud.php
deleted file mode 100644
index 71f281c3..00000000
--- a/plugins/jetpack/modules/shortcodes/soundcloud.php
+++ /dev/null
@@ -1,327 +0,0 @@
-<?php
-/*
-Plugin Name: SoundCloud Shortcode
-Plugin URI: https://wordpress.org/extend/plugins/soundcloud-shortcode/
-Description: Converts SoundCloud WordPress shortcodes to a SoundCloud widget. Example: [soundcloud]http://soundcloud.com/forss/flickermood[/soundcloud]
-Version: 2.3
-Author: SoundCloud Inc., simplified for Jetpack by Automattic, Inc.
-Author URI: http://soundcloud.com
-License: GPLv2
-
-Original version: Johannes Wagener <johannes@soundcloud.com>
-Options support: Tiffany Conroy <tiffany@soundcloud.com>
-HTML5 & oEmbed support: Tim Bormans <tim@soundcloud.com>
-*/
-
-/*
-A8C: Taken from http://plugins.svn.wordpress.org/soundcloud-shortcode/trunk/
-at revision 664386.
-
-Commenting out (instead of removing) and replacing code with custom modifs
-so it's eqsy to see what differs from the standard DOTORG version.
-
-All custom modifs are annoted with "A8C" keyword in comment.
-*/
-
-/**
- * Register oEmbed provider
- */
-
-/*
- A8C: oEmbed is handled now in core; see wp-includes/class-oembed.php
-wp_oembed_add_provider( '#https?://(?:api\.)?soundcloud\.com/.*#i', 'http://soundcloud.com/oembed', true );
-*/
-
-
-/**
- * Register SoundCloud shortcode
- */
-
-add_shortcode( 'soundcloud', 'soundcloud_shortcode' );
-
-/**
- * SoundCloud shortcode handler
- *
- * @param string|array $atts The attributes passed to the shortcode like [soundcloud attr1="value" /].
- * Is an empty string when no arguments are given.
- * @param string $content The content between non-self closing [soundcloud]...[/soundcloud] tags.
- *
- * @return string Widget embed code HTML
- */
-function soundcloud_shortcode( $atts, $content = null ) {
-
- // Custom shortcode options
- $shortcode_options = array_merge( array( 'url' => trim( $content ) ), is_array( $atts ) ? $atts : array() );
-
- // Turn shortcode option "param" (param=value&param2=value) into array
- $shortcode_params = array();
- if ( isset( $shortcode_options['params'] ) ) {
- parse_str( html_entity_decode( $shortcode_options['params'] ), $shortcode_params );
- }
- $shortcode_options['params'] = $shortcode_params;
-
- /*
- A8C: The original plugin exposes options we don't. SoundCloud omits "visual" shortcode
- option when false, so if logic here remains, impossible to have non-visual shortcode.
- $player_type = soundcloud_get_option( 'player_type', 'visual' );
- $isIframe = $player_type !== 'flash';
- $isVisual = ! $player_type || $player_type === 'visual' || $shortcode_options['visual'];
- */
-
- // User preference options
- $plugin_options = array_filter(
- array(
- 'iframe' => true, // A8C: See above comment; flash is not a supported option
- 'width' => soundcloud_get_option( 'player_width' ),
- 'height' => soundcloud_url_has_tracklist( $shortcode_options['url'] ) ? soundcloud_get_option( 'player_height_multi' ) : soundcloud_get_option( 'player_height' ),
- 'params' => array_filter(
- array(
- 'auto_play' => soundcloud_get_option( 'auto_play' ),
- 'show_comments' => soundcloud_get_option( 'show_comments' ),
- 'color' => soundcloud_get_option( 'color' ),
- 'visual' => 'false', // A8C: Merged with params below at $options assignment
- )
- ),
- )
- );
-
- // Needs to be an array
- if ( ! isset( $plugin_options['params'] ) ) {
- $plugin_options['params'] = array();
- }
-
- // plugin options < shortcode options
- $options = array_merge(
- $plugin_options,
- $shortcode_options
- );
-
- // plugin params < shortcode params
- $options['params'] = array_merge(
- $plugin_options['params'],
- $shortcode_options['params']
- );
-
- // The "url" option is required
- if ( ! isset( $options['url'] ) ) {
- return '';
- } else {
- $options['url'] = trim( $options['url'] );
- }
-
- // Both "width" and "height" need to be integers
- if ( isset( $options['width'] ) && ! preg_match( '/^\d+$/', $options['width'] ) ) {
- // set to 0 so oEmbed will use the default 100% and WordPress themes will leave it alone
- $options['width'] = 0;
- }
- if ( isset( $options['height'] ) && ! preg_match( '/^\d+$/', $options['height'] ) ) {
- unset( $options['height'] );
- }
-
- // The "iframe" option must be true to load the iframe widget
- $iframe = soundcloud_booleanize( $options['iframe'] );
-
- // Remove visual parameter from Flash widget, when it's false because that's the default, or when displaying the smallest player
- if ( $options['params']['visual'] && ( ! $iframe || ! soundcloud_booleanize( $options['params']['visual'] ) || ( isset( $options['height'] ) && '20' == $options['height'] ) ) ) {
- unset( $options['params']['visual'] );
- }
-
- // Merge in "url" value
- $options['params'] = array_merge(
- array(
- 'url' => $options['url'],
- ),
- $options['params']
- );
-
- // Return html embed code
- if ( $iframe ) {
- return soundcloud_iframe_widget( $options );
- } else {
- return soundcloud_flash_widget( $options );
- }
-}
-
-/**
- * Plugin options getter
- *
- * @param string|array $option Option name
- * @param mixed $default Default value
- *
- * @return mixed Option value
- */
-function soundcloud_get_option( $option, $default = false ) {
- $value = get_option( 'soundcloud_' . $option );
-
- return $value === '' ? $default : $value;
-}
-
-/**
- * Booleanize a value
- *
- * @param boolean|string $value
- *
- * @return boolean
- */
-function soundcloud_booleanize( $value ) {
- return is_bool( $value ) ? $value : $value === 'true' ? true : false;
-}
-
-/**
- * Decide if a url has a tracklist
- *
- * @param string $url
- *
- * @return boolean
- */
-function soundcloud_url_has_tracklist( $url ) {
- return preg_match( '/^(.+?)\/(sets|groups|playlists)\/(.+?)$/', $url );
-}
-
-/**
- * Parameterize url
- *
- * @param array $match Matched regex
- *
- * @return string Parameterized url
- */
-function soundcloud_oembed_params_callback( $match ) {
- global $soundcloud_oembed_params;
-
- // Convert URL to array
- $url = parse_url( urldecode( $match[1] ) );
- // Convert URL query to array
- parse_str( $url['query'], $query_array );
- // Build new query string
- $query = http_build_query( array_merge( $query_array, $soundcloud_oembed_params ) );
-
- return 'src="' . $url['scheme'] . '://' . $url['host'] . $url['path'] . '?' . $query;
-}
-
-/**
- * Iframe widget embed code
- *
- * @param array $options Parameters
- *
- * @return string Iframe embed code
- */
-function soundcloud_iframe_widget( $options ) {
-
- // Build URL
- $url = set_url_scheme( 'https://w.soundcloud.com/player/?' . http_build_query( $options['params'] ) );
- // Set default width if not defined
- $width = isset( $options['width'] ) && $options['width'] !== 0 ? $options['width'] : '100%';
- // Set default height if not defined
- $height = isset( $options['height'] ) && $options['height'] !== 0
- ? $options['height']
- : ( soundcloud_url_has_tracklist( $options['url'] ) || ( isset( $options['params']['visual'] ) && soundcloud_booleanize( $options['params']['visual'] ) ) ? '450' : '166' );
-
- return sprintf( '<iframe width="%s" height="%s" scrolling="no" frameborder="no" src="%s"></iframe>', $width, $height, $url );
-}
-
-/**
- * Legacy Flash widget embed code
- *
- * @param array $options Parameters
- *
- * @return string Flash embed code
- */
-function soundcloud_flash_widget( $options ) {
- // Build URL
- $url = set_url_scheme( 'https://player.soundcloud.com/player.swf?' . http_build_query( $options['params'] ) );
- // Set default width if not defined
- $width = isset( $options['width'] ) && $options['width'] !== 0 ? $options['width'] : '100%';
- // Set default height if not defined
- $height = isset( $options['height'] ) && $options['height'] !== 0 ? $options['height'] : ( soundcloud_url_has_tracklist( $options['url'] ) ? '255' : '81' );
-
- return preg_replace(
- '/\s\s+/',
- '',
- sprintf(
- '<object width="%s" height="%s">
- <param name="movie" value="%s" />
- <param name="allowscriptaccess" value="always" />
- <embed width="%s" height="%s" src="%s" allowscriptaccess="always" type="application/x-shockwave-flash"></embed>
- </object>',
- $width,
- $height,
- $url,
- $width,
- $height,
- $url
- )
- );
-}
-
-/**
- * SoundCloud Embed Reversal
- *
- * Converts a generic HTML embed code from SoundClound into a
- * WordPress.com-compatibly shortcode.
- *
- * @param string $content HTML content.
- *
- * @return string Parsed content.
- */
-function jetpack_soundcloud_embed_reversal( $content ) {
- if ( ! is_string( $content ) || false === stripos( $content, 'w.soundcloud.com/player' ) ) {
- return $content;
- }
-
- /*
- Sample embed code:
-
- <iframe width="100%" height="450" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/150745932&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&amp;visual=true"></iframe>
- */
-
- $regexes = array();
-
- $regexes[] = '#<iframe[^>]+?src="((?:https?:)?//w\.soundcloud\.com/player/[^"\']++)"[^>]*+>\s*?</iframe>#i';
- $regexes[] = '#&lt;iframe(?:[^&]|&(?!gt;))+?src="((?:https?:)?//w\.soundcloud\.com/player/[^"\']++)"(?:[^&]|&(?!gt;))*+&gt;\s*?&lt;/iframe&gt;#i';
-
- foreach ( $regexes as $regex ) {
- if ( ! preg_match_all( $regex, $content, $matches, PREG_SET_ORDER ) ) {
- continue;
- }
-
- foreach ( $matches as $match ) {
-
- // if pasted from the visual editor - prevent double encoding
- $match[1] = str_replace( '&amp;amp;', '&amp;', $match[1] );
-
- $args = parse_url( html_entity_decode( $match[1] ), PHP_URL_QUERY );
- $args = wp_parse_args( $args );
-
- if ( ! preg_match( '#^(?:https?:)?//api\.soundcloud\.com/.+$#i', $args['url'], $url_matches ) ) {
- continue;
- }
-
- if ( ! preg_match( '#height="(\d+)"#i', $match[0], $hmatch ) ) {
- $height = '';
- } else {
- $height = ' height="' . intval( $hmatch[1] ) . '"';
- }
-
- unset( $args['url'] );
- $params = 'params="';
- if ( count( $args ) > 0 ) {
- foreach ( $args as $key => $value ) {
- $params .= esc_html( $key ) . '=' . esc_html( $value ) . '&amp;';
- }
- $params = substr( $params, 0, -5 );
- }
- $params .= '"';
-
- $shortcode = '[soundcloud url="' . esc_url( $url_matches[0] ) . '" ' . $params . ' width="100%"' . $height . ' iframe="true" /]';
-
- $replace_regex = sprintf( '#\s*%s\s*#', preg_quote( $match[0], '#' ) );
- $content = preg_replace( $replace_regex, sprintf( "\n\n%s\n\n", $shortcode ), $content );
- /** This action is documented in modules/shortcodes/youtube.php */
- do_action( 'jetpack_embed_to_shortcode', 'soundcloud', $url_matches[0] );
- }
- }
-
- return $content;
-}
-
-add_filter( 'pre_kses', 'jetpack_soundcloud_embed_reversal' );
diff --git a/plugins/jetpack/modules/shortcodes/spotify.php b/plugins/jetpack/modules/shortcodes/spotify.php
deleted file mode 100644
index 632838f1..00000000
--- a/plugins/jetpack/modules/shortcodes/spotify.php
+++ /dev/null
@@ -1,97 +0,0 @@
-<?php
-/**
- * Spotify shortcode.
- *
- * Usage:
- * [spotify id="spotify:track:4bz7uB4edifWKJXSDxwHcs" width="400" height="100"]
- */
-
-if ( ! shortcode_exists( 'spotify' ) ) {
- add_shortcode( 'spotify', 'jetpack_spotify_shortcode' );
-
- if ( get_option( 'embed_autourls' ) ) {
- // If user enabled autourls, also convert syntax like spotify:track:4bz7uB4edifWKJXSDxwHcs
- add_filter( 'the_content', 'jetpack_spotify_embed_ids', 7 );
- }
-}
-
-/**
- * Parse shortcode arguments and render its output.
- *
- * @since 4.5.0
- *
- * @param array $atts
- * @param string $content
- *
- * @return string
- */
-function jetpack_spotify_shortcode( $atts = array(), $content = '' ) {
-
- if ( ! empty( $content ) ) {
- $id = $content;
- } elseif ( ! empty( $atts['id'] ) ) {
- $id = $atts['id'];
- } elseif ( ! empty( $atts[0] ) ) {
- $id = $atts[0];
- } else {
- return '<!-- Missing Spotify ID -->';
- }
-
- if ( empty( $atts['width'] ) ) {
- $atts['width'] = 300;
- }
-
- if ( empty( $atts['height'] ) ) {
- $atts['height'] = 380;
- }
-
- $atts['width'] = (int) $atts['width'];
- $atts['height'] = (int) $atts['height'];
-
- // Spotify accepts both URLs and their Spotify ID format, so let them sort it out and validate
- $embed_url = add_query_arg( 'uri', urlencode( $id ), 'https://embed.spotify.com/' );
-
- return '<iframe src="' . esc_url( $embed_url ) . '" style="display:block; margin:0 auto; width:' . esc_attr( $atts['width'] ) . 'px; height:' . esc_attr( $atts['height'] ) . 'px;" frameborder="0" allowtransparency="true"></iframe>';
-}
-
-/**
- * Turn text like this on it's own line into an embed: spotify:track:4bz7uB4edifWKJXSDxwHcs
- * The core WordPress embed functionality only works with URLs
- * Modified version of WP_Embed::autoembed()
- *
- * @since 4.5.0
- *
- * @param $content
- *
- * @return string
- */
-function jetpack_spotify_embed_ids( $content ) {
- $textarr = wp_html_split( $content );
-
- foreach ( $textarr as &$element ) {
- if ( '' == $element || '<' === $element[0] ) {
- continue;
- }
-
- if ( substr( ltrim( $element ), 0, 8 ) !== 'spotify:' ) {
- continue;
- }
-
- $element = preg_replace_callback( '|^\s*(spotify:[^\s"]+:[^\s"]+)\s*$|im', 'jetpack_spotify_embed_ids_callback', $element );
- }
-
- return implode( '', $textarr );
-}
-
-/**
- * Call shortcode with ID provided by matching pattern.
- *
- * @since 4.5.0
- *
- * @param array $matches
- *
- * @return string
- */
-function jetpack_spotify_embed_ids_callback( $matches ) {
- return "\n" . jetpack_spotify_shortcode( array(), $matches[1] ) . "\n";
-}
diff --git a/plugins/jetpack/modules/shortcodes/ted.php b/plugins/jetpack/modules/shortcodes/ted.php
deleted file mode 100644
index f66f77d5..00000000
--- a/plugins/jetpack/modules/shortcodes/ted.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-/*
- * TED Player embed code
- * http://www.ted.com
- *
- * http://www.ted.com/talks/view/id/210
- * http://www.ted.com/talks/marc_goodman_a_vision_of_crimes_in_the_future.html
- * [ted id="210" lang="en"]
- * [ted id="http://www.ted.com/talks/view/id/210" lang="en"]
- * [ted id=1539 lang=fr width=560 height=315]
- */
-
-wp_oembed_add_provider( '!https?://(www\.)?ted.com/talks/view/id/.+!i', 'http://www.ted.com/talks/oembed.json', true );
-wp_oembed_add_provider( '!https?://(www\.)?ted.com/talks/[a-zA-Z\-\_]+\.html!i', 'http://www.ted.com/talks/oembed.json', true );
-
-function jetpack_shortcode_get_ted_id( $atts ) {
- return ( ! empty( $atts['id'] ) ? $atts['id'] : 0 );
-}
-
-add_shortcode( 'ted', 'shortcode_ted' );
-function shortcode_ted( $atts ) {
- global $wp_embed;
-
- $defaults = array(
- 'id' => '',
- 'width' => '',
- 'height' => '',
- 'lang' => 'en',
- );
- $atts = shortcode_atts( $defaults, $atts, 'ted' );
-
- if ( empty( $atts['id'] ) ) {
- return '<!-- Missing TED ID -->';
- }
-
- $url = '';
- if ( preg_match( '#^[\d]+$#', $atts['id'], $matches ) ) {
- $url = 'http://ted.com/talks/view/id/' . $matches[0];
- } elseif ( preg_match( '#^https?://(www\.)?ted\.com/talks/view/id/[0-9]+$#', $atts['id'], $matches ) ) {
- $url = $matches[0];
- }
-
- unset( $atts['id'] );
-
- $args = array();
- if ( is_numeric( $atts['width'] ) ) {
- $args['width'] = $atts['width'];
- } elseif ( $embed_size_w = get_option( 'embed_size_w' ) ) {
- $args['width'] = $embed_size_w;
- } elseif ( ! empty( $GLOBALS['content_width'] ) ) {
- $args['width'] = (int) $GLOBALS['content_width'];
- } else {
- $args['width'] = 500;
- }
-
- // Default to a 16x9 aspect ratio if there's no height set
- if ( is_numeric( $atts['height'] ) ) {
- $args['height'] = $atts['height'];
- } else {
- $args['height'] = $args['width'] * 0.5625;
- }
-
- if ( ! empty( $atts['lang'] ) ) {
- $args['lang'] = sanitize_key( $atts['lang'] );
- add_filter( 'oembed_fetch_url', 'ted_filter_oembed_fetch_url', 10, 3 );
- }
- $retval = $wp_embed->shortcode( $args, $url );
- remove_filter( 'oembed_fetch_url', 'ted_filter_oembed_fetch_url', 10 );
-
- return $retval;
-}
-
-/**
- * Filter the request URL to also include the $lang parameter
- */
-function ted_filter_oembed_fetch_url( $provider, $url, $args ) {
- return add_query_arg( 'lang', $args['lang'], $provider );
-}
diff --git a/plugins/jetpack/modules/shortcodes/tweet.php b/plugins/jetpack/modules/shortcodes/tweet.php
deleted file mode 100644
index 5d6acd29..00000000
--- a/plugins/jetpack/modules/shortcodes/tweet.php
+++ /dev/null
@@ -1,276 +0,0 @@
-<?php //phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
-/**
- * Tweet shortcode.
- * Params map to key value pairs, and all but tweet are optional:
- * tweet = id or permalink url* (Required)
- * align = none|left|right|center
- * width = number in pixels example: width="300"
- * lang = en|fr|de|ko|etc... language country code.
- * hide_thread = true | false **
- * hide_media = true | false **
- *
- * Basic:
- * [tweet https://twitter.com/jack/statuses/20 width="350"]
- *
- * More parameters and another tweet syntax admitted:
- * [tweet tweet="https://twitter.com/jack/statuses/20" align="left" width="350" align="center" lang="es"]
- *
- * @package Jetpack
- */
-
-add_shortcode( 'tweet', array( 'Jetpack_Tweet', 'jetpack_tweet_shortcode' ) );
-
-/**
- * Tweet Shortcode class.
- */
-class Jetpack_Tweet {
-
- /**
- * Array of arguments about a tweet.
- *
- * @var array
- */
- public static $provider_args;
-
- /**
- * Parse shortcode arguments and render its output.
- *
- * @since 4.5.0
- *
- * @param array $atts Shortcode parameters.
- *
- * @return string
- */
- public static function jetpack_tweet_shortcode( $atts ) {
- global $wp_embed;
-
- $default_atts = array(
- 'tweet' => '',
- 'align' => 'none',
- 'width' => '',
- 'lang' => 'en',
- 'hide_thread' => 'false',
- 'hide_media' => 'false',
- );
-
- $attr = shortcode_atts( $default_atts, $atts );
-
- self::$provider_args = $attr;
-
- /*
- * figure out the tweet id for the requested tweet
- * supporting both omitted attributes and tweet="tweet_id"
- * and supporting both an id and a URL
- */
- if ( empty( $attr['tweet'] ) && ! empty( $atts[0] ) ) {
- $attr['tweet'] = $atts[0];
- }
-
- if ( ctype_digit( $attr['tweet'] ) ) {
- $id = 'https://twitter.com/jetpack/status/' . $attr['tweet'];
- $tweet_id = intval( $attr['tweet'] );
- } else {
- preg_match( '/^http(s|):\/\/twitter\.com(\/\#\!\/|\/)([a-zA-Z0-9_]{1,20})\/status(es)*\/(\d+)$/', $attr['tweet'], $urlbits );
-
- if ( isset( $urlbits[5] ) && intval( $urlbits[5] ) ) {
- $id = 'https://twitter.com/' . $urlbits[3] . '/status/' . intval( $urlbits[5] );
- $tweet_id = intval( $urlbits[5] );
- } else {
- return '<!-- Invalid tweet id -->';
- }
- }
-
- /*
- * Fetch tweet.
- *
- * On WordPress.com, we also cache tweets for better performance and less requests.
- */
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- /*
- * See if we have the tweet stored in our tweet store
- * if not get_tweet_store queues up a job to request
- */
- $data = get_tweet_store( $tweet_id );
- if ( $data ) {
- $tweet_handler = new Tweet_Handler();
-
- /*
- * Replace Unicode characters with ther entities like Blackbird Pie v 0.3.2 did
- * to store tweets from other languages (important for non-english bloggers)
- */
- $data->text = $tweet_handler->unicode_replace_entities( $data->text );
- $data->user->screen_name = $tweet_handler->unicode_replace_entities( $data->user->screen_name );
- $data->user->name = $tweet_handler->unicode_replace_entities( $data->user->name );
-
- $tweet = esc_html( $data->text );
- $tweet = $tweet_handler->expand_tco_links( $tweet, $data );
-
- $tweet = $tweet_handler->autolink( $tweet );
-
- $screen_name = esc_html( $data->user->screen_name );
- $name = esc_html( $data->user->name );
-
- $url = 'https://twitter.com/' . $screen_name . '/status/' . intval( $data->id );
-
- // Only show the user's real name if they set it to something different from their screename.
- if ( $screen_name !== $name ) {
- $real_name = '<br />' . $name;
- } else {
- $real_name = '<br />&nbsp;';
- }
-
- $time = strtotime( $data->created_at );
- $human_readable = date( 'F d, Y', $time );
- $data_datetime = date( 'Y-m-d\TH:i:sP', $time );
-
- /*
- * Additional params.
- */
-
- // align (float).
- $extra_classes = '';
- if ( in_array( $attr['align'], array( 'left', 'right', 'center' ), true ) ) {
- $extra_classes = ' tw-align-' . $attr['align'];
- }
-
- if ( 'true' === $attr['hide_thread'] ) {
- $extra_classes .= ' tw-hide-thread';
- }
-
- if ( 'true' === $attr['hide_media'] ) {
- $extra_classes .= ' tw-hide-media';
- }
-
- // lang.
- $lang = substr( $attr['lang'], 0, 2 );
- if ( empty( $lang ) ) {
- $lang = 'en';
- }
-
- // width.
- $width_html = '';
- $width = intval( $attr['width'] );
- if ( $width > 100 ) {
- $width_html = ' width="' . esc_attr( $width ) . '"';
- }
-
- // in reply to id (conversation tweets).
- $in_reply_to_html = '';
- $in_reply_to = intval( $data->in_reply_to_status_id );
- if ( ! empty( $in_reply_to ) && 'false' === $attr['hide_thread'] ) {
- $in_reply_to_html = ' data-in-reply-to="' . esc_attr( $in_reply_to ) . '"';
- }
-
- // Generate the HTML output.
- $output = sprintf(
- '<blockquote class="twitter-tweet%1$s"%2$s%3$s lang="%4$s"><p>%5$s</p>&mdash; %6$s (@%7$s) <a href="%8$s" data-datetime="%9$s">%10$s</a></blockquote>',
- esc_attr( $extra_classes ),
- $width_html,
- $in_reply_to_html,
- esc_attr( $lang ),
- $tweet,
- wp_kses( $real_name, array( 'br' => array() ) ),
- esc_html( $screen_name ),
- esc_url( $url ),
- esc_attr( $data_datetime ),
- esc_html( $human_readable )
- );
- } else {
- /**
- * Filter the default display when a tweet is not available in the store.
- * Not available in Jetpack.
- *
- * @module shortcodes
- *
- * @since 5.1.0
- *
- * @param string $message Default display when a tweet is not available.
- * @param string $id Twitter URL.
- * @param array $attr Shortcode attributes.
- */
- return apply_filters( 'tweet_shortcode_pending_tweet', '', $id, $attr );
- }
- } else {
- // Add shortcode arguments to provider URL.
- add_filter( 'oembed_fetch_url', array( 'Jetpack_Tweet', 'jetpack_tweet_url_extra_args' ), 10, 3 );
-
- /*
- * In Jetpack, we use $wp_embed->shortcode() to return the tweet output.
- * @see https://github.com/Automattic/jetpack/pull/11173
- */
- $output = $wp_embed->shortcode( $atts, $id );
-
- // Clean up filter.
- remove_filter( 'oembed_fetch_url', array( 'Jetpack_Tweet', 'jetpack_tweet_url_extra_args' ), 10 );
- }
-
- // Add Twitter widgets.js script to the footer.
- add_action( 'wp_footer', array( 'Jetpack_Tweet', 'jetpack_tweet_shortcode_script' ) );
-
- /** This action is documented in modules/widgets/social-media-icons.php */
- do_action( 'jetpack_bump_stats_extras', 'embeds', 'tweet' );
-
- return $output;
- }
-
- /**
- * Adds parameters to URL used to fetch the tweet.
- *
- * @since 4.5.0
- *
- * @param string $provider URL of provider that supplies the tweet we're requesting.
- * @param string $url URL of tweet to embed.
- * @param array $args Parameters supplied to shortcode and passed to wp_oembed_get.
- *
- * @return string
- */
- public static function jetpack_tweet_url_extra_args( $provider, $url, $args = array() ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
- foreach ( self::$provider_args as $key => $value ) {
- switch ( $key ) {
- case 'align':
- case 'lang':
- case 'hide_thread':
- case 'hide_media':
- $provider = add_query_arg( $key, $value, $provider );
- break;
- }
- }
-
- // Disable script since we're enqueing it in our own way in the footer.
- $provider = add_query_arg( 'omit_script', 'true', $provider );
-
- // Twitter doesn't support maxheight so don't send it.
- $provider = remove_query_arg( 'maxheight', $provider );
-
- /**
- * Filter the Twitter Partner ID.
- *
- * @module shortcodes
- *
- * @since 4.6.0
- *
- * @param string $partner_id Twitter partner ID.
- */
- $partner = apply_filters( 'jetpack_twitter_partner_id', 'jetpack' );
-
- // Add Twitter partner ID to track embeds from Jetpack.
- if ( ! empty( $partner ) ) {
- $provider = add_query_arg( 'partner', $partner, $provider );
- }
-
- return $provider;
- }
-
- /**
- * Enqueue front end assets.
- *
- * @since 4.5.0
- */
- public static function jetpack_tweet_shortcode_script() {
- if ( ! wp_script_is( 'twitter-widgets', 'registered' ) ) {
- wp_register_script( 'twitter-widgets', 'https://platform.twitter.com/widgets.js', array(), JETPACK__VERSION, true );
- wp_print_scripts( 'twitter-widgets' );
- }
- }
-
-} // class end
diff --git a/plugins/jetpack/modules/shortcodes/twitchtv.php b/plugins/jetpack/modules/shortcodes/twitchtv.php
deleted file mode 100644
index a5439d05..00000000
--- a/plugins/jetpack/modules/shortcodes/twitchtv.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-/**
- * twitch.tv shortcode
- * [twitchtv url='http://www.twitch.tv/paperbat' height='378' width='620' autoplay='false']
- * [twitchtv url='http://www.twitch.tv/paperbat/b/323486192' height='378' width='620' autoplay='false']
- **/
-
-/**
- * (Live URL) http://www.twitch.tv/paperbat
- *
- * <iframe src="https://player.twitch.tv/?autoplay=false&#038;muted=false&#038;channel=paperbat" width="620" height="378" frameborder="0" scrolling="no" allowfullscreen></iframe>
- *
- * (Archive URL) http://www.twitch.tv/paperbat/v/323486192
- *
- * <iframe src="https://player.twitch.tv/?autoplay=false&#038;muted=false&#038;video=v323486192" width="620" height="378" frameborder="0" scrolling="no" allowfullscreen></iframe>
- *
- * @param $atts array User supplied shortcode arguments.
- *
- * @return string HTML output of the shortcode.
- */
-function wpcom_twitchtv_shortcode( $atts ) {
- $attr = shortcode_atts(
- array(
- 'height' => 378,
- 'width' => 620,
- 'url' => '',
- 'autoplay' => 'false',
- 'muted' => 'false',
- 'time' => null,
- ),
- $atts
- );
-
- if ( empty( $attr['url'] ) ) {
- return '<!-- Invalid twitchtv URL -->';
- }
-
- preg_match( '|^http://www.twitch.tv/([^/?]+)(/v/(\d+))?|i', $attr['url'], $match );
-
- $url_args = array(
- 'autoplay' => ( false !== $attr['autoplay'] && 'false' !== $attr['autoplay'] ) ? 'true' : 'false',
- 'muted' => ( false !== $attr['muted'] && 'false' !== $attr['muted'] ) ? 'true' : 'false',
- 'time' => $attr['time'],
- );
-
- $width = intval( $attr['width'] );
- $height = intval( $attr['height'] );
-
- $user_id = $match[1];
- $video_id = 0;
- if ( ! empty( $match[3] ) ) {
- $video_id = (int) $match[3];
- }
-
- do_action( 'jetpack_bump_stats_extras', 'twitchtv', 'shortcode' );
-
- if ( $video_id > 0 ) {
- $url_args['video'] = 'v' . $video_id;
- } else {
- $url_args['channel'] = $user_id;
- }
-
- $url = add_query_arg( $url_args, 'https://player.twitch.tv/' );
-
- return sprintf(
- '<iframe src="%s" width="%d" height="%d" frameborder="0" scrolling="no" allowfullscreen></iframe>',
- esc_url( $url ),
- esc_attr( $width ),
- esc_attr( $height )
- );
-}
-
-add_shortcode( 'twitch', 'wpcom_twitchtv_shortcode' );
-add_shortcode( 'twitchtv', 'wpcom_twitchtv_shortcode' );
diff --git a/plugins/jetpack/modules/shortcodes/twitter-timeline.php b/plugins/jetpack/modules/shortcodes/twitter-timeline.php
deleted file mode 100644
index 38558b49..00000000
--- a/plugins/jetpack/modules/shortcodes/twitter-timeline.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-add_shortcode( 'twitter-timeline', 'twitter_timeline_shortcode' );
-
-function twitter_timeline_shortcode( $atts ) {
- $default_atts = array(
- 'username' => '',
- 'id' => '',
- 'width' => '450',
- 'height' => '282',
- );
-
- $atts = shortcode_atts( $default_atts, $atts, 'twitter-timeline' );
-
- $atts['username'] = preg_replace( '/[^A-Za-z0-9_]+/', '', $atts['username'] );
-
- if ( empty( $atts['username'] ) && ! is_numeric( $atts['id'] ) ) {
- return '<!-- ' . __( 'Must specify Twitter Timeline id or username.', 'jetpack' ) . ' -->';
- }
-
- $output = '<a class="twitter-timeline"';
-
- /** This filter is documented in modules/shortcodes/tweet.php */
- $partner = apply_filters( 'jetpack_twitter_partner_id', 'jetpack' );
- if ( ! empty( $partner ) ) {
- $output .= ' data-partner="' . esc_attr( $partner ) . '"';
- }
- if ( is_numeric( $atts['width'] ) ) {
- $output .= ' data-width="' . esc_attr( $atts['width'] ) . '"';
- }
- if ( is_numeric( $atts['height'] ) ) {
- $output .= ' data-height="' . esc_attr( $atts['height'] ) . '"';
- }
- if ( is_numeric( $atts['id'] ) ) {
- $output .= ' data-widget-id="' . esc_attr( $atts['id'] ) . '"';
- }
- if ( ! empty( $atts['username'] ) ) {
- $output .= ' href="' . esc_url( 'https://twitter.com/' . $atts['username'] ) . '"';
- }
-
- $output .= '>';
-
- $output .= sprintf( __( 'Tweets by @%s', 'jetpack' ), $atts['username'] );
-
- $output .= '</a>';
-
- wp_enqueue_script( 'jetpack-twitter-timeline' );
-
- return $output;
-}
-
-function twitter_timeline_js() {
- if ( is_customize_preview() ) {
- wp_enqueue_script( 'jetpack-twitter-timeline' );
- }
-}
-add_action( 'wp_enqueue_scripts', 'twitter_timeline_js' );
diff --git a/plugins/jetpack/modules/shortcodes/unavailable.php b/plugins/jetpack/modules/shortcodes/unavailable.php
deleted file mode 100644
index 9a6bb201..00000000
--- a/plugins/jetpack/modules/shortcodes/unavailable.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php //phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
-/**
- * Display a message on the frontend when we retire a shortcode,
- * explaining why the shortcode is not available anymore.
- *
- * @package Jetpack
- */
-
-/**
- * Class Jetpack_Shortcode_Unavailable
- */
-class Jetpack_Shortcode_Unavailable {
- /**
- * Set up the actions and filters for the class to listen to.
- *
- * @param array $shortcodes An associative array of keys being the shortcodes that are unavailable, and a string explaining why.
- */
- public function __construct( $shortcodes ) {
- $this->shortcodes = $shortcodes;
-
- add_action( 'template_redirect', array( $this, 'add_shortcodes' ) );
- }
-
- /**
- * For all of our defined unavailable shortcodes, if something else hasn't
- * already claimed them, add a handler to nullify their output.
- */
- public function add_shortcodes() {
- foreach ( array_keys( $this->shortcodes ) as $shortcode ) {
- if ( ! shortcode_exists( $shortcode ) ) {
- add_shortcode( $shortcode, array( $this, 'stub_shortcode' ) );
- }
- }
- }
-
- /**
- * Nullify the output of unavailable shortcodes. Includes a filter to make
- * it easier to notify admins that a shortcode that they used is unavailable.
- *
- * @param array $atts Shortcode attributes.
- * @param string $content Post content.
- * @param string $shortcode Shortcode name.
- *
- * @return mixed|void
- */
- public function stub_shortcode( $atts, $content = '', $shortcode = '' ) {
- $str = '';
- if ( current_user_can( 'edit_posts' ) && ! empty( $this->shortcodes[ $shortcode ] ) ) {
- $str = sprintf( '<div><strong>%s</strong></div>', $this->shortcodes[ $shortcode ] );
- }
- /**
- * Filter the front-end output of unavailable shortcodes.
- *
- * @module shortcodes
- *
- * @since 4.5.0
- *
- * @param string $str The html displayed in lieu of the shortcode.
- * @param array $atts The attributes (numeric or named) passed to the shortcode.
- * @param string $content The content (if any) between the opening and closing tags.
- * @param string $shortcode The shortcode tag used to invoke this.
- */
- return apply_filters( 'jetpack_stub_shortcode', $str, $atts, $content, $shortcode );
- }
-}
-
-/**
- * Init class.
- */
-function jetpack_init_shortcode_unavailable() {
- new Jetpack_Shortcode_Unavailable(
- array(
- 'blip.tv' => __( 'The Blip.tv service has been shut down since August 20th, 2015.', 'jetpack' ),
- 'lytro' => __( 'Lytro has been shut down since March 2019.', 'jetpack' ),
- )
- );
-}
-add_action( 'init', 'jetpack_init_shortcode_unavailable' );
diff --git a/plugins/jetpack/modules/shortcodes/untappd-menu.php b/plugins/jetpack/modules/shortcodes/untappd-menu.php
deleted file mode 100644
index f8f62f0b..00000000
--- a/plugins/jetpack/modules/shortcodes/untappd-menu.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-/**
- * Untappd Shortcodes
- *
- * @author kraftbj
- *
- * [untappd-menu location="123" theme="123"]
- * @since 4.1.0
- * @param location int Location ID for the Untappd venue. Required.
- * @param theme int Theme ID for the Untappd menu. Required.
- */
-
-class Jetpack_Untappd {
-
- function __construct() {
- add_action( 'init', array( $this, 'action_init' ) );
- }
-
- function action_init() {
- add_shortcode( 'untappd-menu', array( $this, 'menu_shortcode' ) );
- }
-
- /**
- * [untappd-menu] shortcode.
- */
- static function menu_shortcode( $atts, $content = '' ) {
- // Let's bail if we don't have location or theme.
- if ( ! isset( $atts['location'] ) || ! isset( $atts['theme'] ) ) {
- if ( current_user_can( 'edit_posts' ) ) {
- return __( 'No location or theme ID provided in the untappd-menu shortcode.', 'jetpack' );
- }
- return;
- }
-
- // Let's apply some defaults.
- $atts = shortcode_atts(
- array(
- 'location' => '',
- 'theme' => '',
- ),
- $atts,
- 'untappd-menu'
- );
-
- // We're going to clean the user input.
- $atts = array_map( 'absint', $atts );
-
- if ( $atts['location'] < 1 || $atts['theme'] < 1 ) {
- return;
- }
-
- static $untappd_menu = 1;
-
- $html = '<div id="menu-container-untappd-' . $untappd_menu . '" class="untappd-menu"></div>';
- $html .= '<script type="text/javascript">' . PHP_EOL;
- $html .= '!function(e,n){var t=document.createElement("script"),a=document.getElementsByTagName("script")[0];' . PHP_EOL;
- $html .= 't.async=1,a.parentNode.insertBefore(t,a),t.onload=t.onreadystatechange=function(e,a){' . PHP_EOL;
- $html .= '(a||!t.readyState||/loaded|complete/.test(t.readyState))&&(t.onload=t.onreadystatechange=null,t=void 0,a||n&&n())},' . PHP_EOL;
- $html .= 't.src=e}("https://embed-menu-preloader.untappdapi.com/embed-menu-preloader.min.js",function(){' . PHP_EOL;
- $html .= 'PreloadEmbedMenu( "menu-container-untappd-' . $untappd_menu . '",' . $atts['location'] . ',' . $atts['theme'] . ' )});' . PHP_EOL;
- $html .= '</script>';
-
- $untappd_menu++;
-
- return $html;
- }
-}
-
-new Jetpack_Untappd();
diff --git a/plugins/jetpack/modules/shortcodes/upcoming-events.php b/plugins/jetpack/modules/shortcodes/upcoming-events.php
deleted file mode 100644
index 02f6dda1..00000000
--- a/plugins/jetpack/modules/shortcodes/upcoming-events.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-/**
- * Most of the heavy lifting done in iCalendarReader class
- */
-class Upcoming_Events_Shortcode {
-
- public static function init() {
- add_shortcode( 'upcomingevents', array( __CLASS__, 'shortcode' ) );
- }
-
- public static function shortcode( $atts = array() ) {
- jetpack_require_lib( 'icalendar-reader' );
- $atts = shortcode_atts(
- array(
- 'url' => '',
- 'number' => 0,
- ),
- $atts,
- 'upcomingevents'
- );
- $args = array(
- 'context' => 'shortcode',
- 'number' => absint( $atts['number'] ),
- );
- $events = icalendar_render_events( $atts['url'], $args );
-
- if ( ! $events ) {
- $events = sprintf( '<p>%s</p>', __( 'No upcoming events', 'jetpack' ) );
- }
-
- return $events;
- }
-}
-
-add_action( 'plugins_loaded', array( 'Upcoming_Events_Shortcode', 'init' ), 101 );
diff --git a/plugins/jetpack/modules/shortcodes/ustream.php b/plugins/jetpack/modules/shortcodes/ustream.php
deleted file mode 100644
index 0ab664c1..00000000
--- a/plugins/jetpack/modules/shortcodes/ustream.php
+++ /dev/null
@@ -1,135 +0,0 @@
-<?php
-/**
- * Ustream.tv shortcode
- *
- * Example:
- * [ustream id=1524 live=1]
- * [ustreamsocial id=12980237 width="500"]
- *
- * Embed code example, from http://www.ustream.tv/leolaporte
- * <iframe src="http://www.ustream.tv/embed/recorded/1524?v=3&#038;wmode=direct" width="480" height="296" scrolling="no" frameborder="0" style="border: 0 none transparent;"></iframe>
- *
- * @package Jetpack
- */
-
-add_shortcode( 'ustream', 'ustream_shortcode' );
-add_shortcode( 'ustreamsocial', 'ustreamsocial_shortcode' );
-
-/**
- * Parse shortcode arguments and render output for ustream single video.
- *
- * @since 4.5.0
- *
- * @param array $atts array of user-supplied arguments.
- *
- * @return string HTML output.
- */
-function ustream_shortcode( $atts ) {
- if ( isset( $atts[0] ) ) {
- return '<!-- ustream error: bad parameters -->';
- }
-
- $defaults = array(
- 'width' => 480,
- 'height' => 296,
- 'id' => 0,
- 'live' => 0,
- 'highlight' => 0,
- 'version' => 3,
- 'hwaccel' => 1,
- );
- $atts = array_map( 'intval', shortcode_atts( $defaults, $atts ) );
-
- if ( 0 >= $atts['id'] ) {
- return '<!-- ustream error: bad video ID -->';
- }
-
- if ( 0 >= $atts['height'] ) {
- return '<!-- ustream error: height invalid -->';
- }
-
- if ( 0 >= $atts['width'] ) {
- return '<!-- ustream error: width invalid -->';
- }
-
- if ( $atts['live'] ) {
- $recorded = '';
- } else {
- $recorded = 'recorded/';
- }
-
- if ( ! $atts['live'] && ( 0 < $atts['highlight'] ) ) {
- $highlight = sprintf( '/highlight/%d', esc_attr( $atts['highlight'] ) );
- } else {
- $highlight = '';
- }
-
- $url_base = sprintf(
- 'https://www.ustream.tv/embed/%s%d%s',
- $recorded,
- esc_attr( $atts['id'] ),
- $highlight
- );
-
- $video_options = array(
- 'html5ui' => 1,
- 'v' => absint( $atts['version'] ),
- );
-
- if ( 0 < $atts['hwaccel'] ) {
- $video_options['wmode'] = 'direct';
- }
-
- $url = add_query_arg(
- $video_options,
- $url_base
- );
-
- $output = sprintf(
- '<iframe src="%1$s" width="%2$d" height="%3$d" scrolling="no" style="border: 0 none transparent;"></iframe>',
- esc_url( $url ),
- absint( $atts['width'] ),
- absint( $atts['height'] )
- );
-
- return $output;
-}
-
-/**
- * Parse shortcode arguments and render output for ustream's Social Stream.
- *
- * @since 4.5.0
- *
- * @param array $atts array of user-supplied arguments.
- *
- * @return string HTML output.
- */
-function ustreamsocial_shortcode( $atts ) {
- $defaults = array(
- 'id' => 0,
- 'height' => 420,
- 'width' => 320,
- );
- $atts = array_map( 'intval', shortcode_atts( $defaults, $atts ) );
-
- if ( 0 >= $atts['id'] ) {
- return '<!-- ustreamsocial error: bad social stream ID -->';
- }
-
- if ( 0 >= $atts['height'] ) {
- return '<!-- ustreamsocial error: height invalid -->';
- }
-
- if ( 0 >= $atts['width'] ) {
- return '<!-- ustreamsocial error: width invalid -->';
- }
-
- $url = 'https://www.ustream.tv/socialstream/' . esc_attr( $atts['id'] );
-
- return sprintf(
- '<iframe id="SocialStream" src="%1$s" class="" name="SocialStream" width="%2$d" height="%3$d" scrolling="no" allowtransparency="true" style="visibility: visible; margin-top: 0; margin-bottom: 0; border: 0;"></iframe>',
- esc_url( $url ),
- absint( $atts['width'] ),
- absint( $atts['height'] )
- );
-}
diff --git a/plugins/jetpack/modules/shortcodes/videopress.php b/plugins/jetpack/modules/shortcodes/videopress.php
deleted file mode 100644
index a4bfd167..00000000
--- a/plugins/jetpack/modules/shortcodes/videopress.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-/**
- * Provides VideoPress videos support when module is disabled.
- *
- * @since 2.4
- * @since 3.9.5 Added compatibility with refactored VideoPress module.
- */
-
-if ( ! Jetpack::is_module_active( 'videopress' ) ) {
-
- Jetpack::dns_prefetch(
- array(
- '//v0.wordpress.com',
- )
- );
-
- include_once JETPACK__PLUGIN_DIR . 'modules/videopress/utility-functions.php';
- include_once JETPACK__PLUGIN_DIR . 'modules/videopress/shortcode.php';
-
-}
diff --git a/plugins/jetpack/modules/shortcodes/vimeo.php b/plugins/jetpack/modules/shortcodes/vimeo.php
deleted file mode 100644
index 91492d9c..00000000
--- a/plugins/jetpack/modules/shortcodes/vimeo.php
+++ /dev/null
@@ -1,301 +0,0 @@
-<?php
-
-/*
-[vimeo 141358]
-[vimeo http://vimeo.com/141358]
-[vimeo 141358 h=500&w=350]
-[vimeo id=141358 width=350 height=500]
-
-<iframe src="http://player.vimeo.com/video/18427511" width="400" height="225" frameborder="0"></iframe><p><a href="http://vimeo.com/18427511">Eskmo 'We Got More' (Official Video)</a> from <a href="http://vimeo.com/ninjatune">Ninja Tune</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
-*/
-
-function jetpack_shortcode_get_vimeo_id( $atts ) {
- if ( isset( $atts[0] ) ) {
- $atts[0] = trim( $atts[0], '=' );
- $id = false;
- if ( is_numeric( $atts[0] ) ) {
- $id = (int) $atts[0];
- } elseif ( preg_match( '|vimeo\.com/(\d+)/?$|i', $atts[0], $match ) ) {
- $id = (int) $match[1];
- } elseif ( preg_match( '|player\.vimeo\.com/video/(\d+)/?$|i', $atts[0], $match ) ) {
- $id = (int) $match[1];
- }
-
- return $id;
- }
-
- return 0;
-}
-
-/**
- * Convert a Vimeo shortcode into an embed code.
- *
- * @param array $atts An array of shortcode attributes.
- *
- * @return string The embed code for the Vimeo video.
- */
-function vimeo_shortcode( $atts ) {
- global $content_width;
-
- $attr = array_map(
- 'intval',
- shortcode_atts(
- array(
- 'id' => 0,
- 'width' => 0,
- 'height' => 0,
- 'autoplay' => 0,
- 'loop' => 0,
- ),
- $atts
- )
- );
-
- if ( isset( $atts[0] ) ) {
- $attr['id'] = jetpack_shortcode_get_vimeo_id( $atts );
- }
-
- if ( ! $attr['id'] ) {
- return '<!-- vimeo error: not a vimeo video -->';
- }
-
- // [vimeo 141358 h=500&w=350]
- $params = shortcode_new_to_old_params( $atts ); // h=500&w=350
- $params = str_replace( array( '&amp;', '&#038;' ), '&', $params );
- parse_str( $params, $args );
-
- $width = intval( $attr['width'] );
- $height = intval( $attr['height'] );
-
- // Support w and h argument as fallback.
- if ( empty( $width ) && isset( $args['w'] ) ) {
- $width = intval( $args['w'] );
-
- if ( empty( $height ) && ! isset( $args['h'] ) ) {
- // The case where w=300 is specified without h=200, otherwise $height
- // will always equal the default of 300, no matter what w was set to.
- $height = round( ( $width / 640 ) * 360 );
- }
- }
-
- if ( empty( $height ) && isset( $args['h'] ) ) {
- $height = (int) $args['h'];
-
- if ( ! isset( $args['w'] ) ) {
- $width = round( ( $height / 360 ) * 640 );
- }
- }
-
- if ( ! $width && ! empty( $content_width ) ) {
- $width = absint( $content_width );
- }
-
- // If setting the width with content_width has failed, defaulting
- if ( ! $width ) {
- $width = 640;
- }
-
- if ( ! $height ) {
- $height = round( ( $width / 640 ) * 360 );
- }
-
- /**
- * Filter the Vimeo player width.
- *
- * @module shortcodes
- *
- * @since 3.4.0
- *
- * @param int $width Width of the Vimeo player in pixels.
- */
- $width = (int) apply_filters( 'vimeo_width', $width );
-
- /**
- * Filter the Vimeo player height.
- *
- * @module shortcodes
- *
- * @since 3.4.0
- *
- * @param int $height Height of the Vimeo player in pixels.
- */
- $height = (int) apply_filters( 'vimeo_height', $height );
-
- $url = esc_url( 'https://player.vimeo.com/video/' . $attr['id'] );
-
- // Handle autoplay and loop arguments.
- if (
- isset( $args['autoplay'] ) && '1' === $args['autoplay'] // Parsed from the embedded URL.
- || $attr['autoplay'] // Parsed from shortcode arguments.
- || in_array( 'autoplay', $atts ) // Catch the argument passed without a value.
- ) {
- $url = add_query_arg( 'autoplay', 1, $url );
- }
-
- if (
- isset( $args['loop'] ) && '1' === $args['loop'] // Parsed from the embedded URL.
- || $attr['loop'] // Parsed from shortcode arguments.
- || in_array( 'loop', $atts ) // Catch the argument passed without a value.
- ) {
- $url = add_query_arg( 'loop', 1, $url );
- }
-
- $html = sprintf(
- '<div class="embed-vimeo" style="text-align: center;"><iframe src="%1$s" width="%2$u" height="%3$u" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></div>',
- esc_url( $url ),
- esc_attr( $width ),
- esc_attr( $height )
- );
-
- /**
- * Filter the Vimeo player HTML.
- *
- * @module shortcodes
- *
- * @since 1.2.3
- *
- * @param string $html Embedded Vimeo player HTML.
- */
- $html = apply_filters( 'video_embed_html', $html );
-
- return $html;
-}
-
-add_shortcode( 'vimeo', 'vimeo_shortcode' );
-
-/**
- * Callback to modify output of embedded Vimeo video using Jetpack's shortcode.
- *
- * @since 3.9
- *
- * @param array $matches Regex partial matches against the URL passed.
- * @param array $attr Attributes received in embed response
- * @param array $url Requested URL to be embedded
- *
- * @return string Return output of Vimeo shortcode with the proper markup.
- */
-function wpcom_vimeo_embed_url( $matches, $attr, $url ) {
- return vimeo_shortcode( array( $url ) );
-}
-
-/**
- * For bare URLs on their own line of the form
- * http://vimeo.com/12345
- *
- * @since 3.9
- *
- * @uses wpcom_vimeo_embed_url
- */
-function wpcom_vimeo_embed_url_init() {
- wp_embed_register_handler( 'wpcom_vimeo_embed_url', '#https?://(.+\.)?vimeo\.com/#i', 'wpcom_vimeo_embed_url' );
-}
-
-// Register handler to modify Vimeo embeds using Jetpack's shortcode output.
-add_action( 'init', 'wpcom_vimeo_embed_url_init' );
-
-function vimeo_embed_to_shortcode( $content ) {
- if ( ! is_string( $content ) || false === stripos( $content, 'player.vimeo.com/video/' ) ) {
- return $content;
- }
-
- $regexp = '!<iframe\s+src=[\'"](https?:)?//player\.vimeo\.com/video/(\d+)[\w=&;?]*[\'"]((?:\s+\w+=[\'"][^\'"]*[\'"])*)((?:[\s\w]*))></iframe>!i';
- $regexp_ent = str_replace( '&amp;#0*58;', '&amp;#0*58;|&#0*58;', htmlspecialchars( $regexp, ENT_NOQUOTES ) );
-
- foreach ( array( 'regexp', 'regexp_ent' ) as $reg ) {
- if ( ! preg_match_all( $$reg, $content, $matches, PREG_SET_ORDER ) ) {
- continue;
- }
-
- foreach ( $matches as $match ) {
- $id = (int) $match[2];
-
- $params = $match[3];
-
- if ( 'regexp_ent' == $reg ) {
- $params = html_entity_decode( $params );
- }
-
- $params = wp_kses_hair( $params, array( 'http' ) );
-
- $width = isset( $params['width'] ) ? (int) $params['width']['value'] : 0;
- $height = isset( $params['height'] ) ? (int) $params['height']['value'] : 0;
-
- $wh = '';
- if ( $width && $height ) {
- $wh = ' w=' . $width . ' h=' . $height;
- }
-
- $shortcode = '[vimeo ' . $id . $wh . ']';
- $content = str_replace( $match[0], $shortcode, $content );
- }
- }
-
- return $content;
-}
-
-add_filter( 'pre_kses', 'vimeo_embed_to_shortcode' );
-
-/**
- * Replaces shortcodes and plain-text URLs to Vimeo videos with Vimeo embeds.
- * Covers shortcode usage [vimeo 1234] | [vimeo https://vimeo.com/1234] | [vimeo http://vimeo.com/1234]
- * Or plain text URLs https://vimeo.com/1234 | vimeo.com/1234 | //vimeo.com/1234
- * Links are left intact.
- *
- * @since 3.7.0
- * @since 3.9.5 One regular expression matches shortcodes and plain URLs.
- *
- * @param string $content HTML content
- * @return string The content with embeds instead of URLs
- */
-function vimeo_link( $content ) {
- /**
- * [vimeo 12345]
- * [vimeo http://vimeo.com/12345]
- */
- $shortcode = '(?:\[vimeo\s+[^0-9]*)([0-9]+)(?:\])';
-
- /**
- * http://vimeo.com/12345
- * https://vimeo.com/12345
- * //vimeo.com/12345
- * vimeo.com/some/descender/12345
- *
- * Should not capture inside HTML attributes
- * [Not] <a href="vimeo.com/12345">Cool Video</a>
- * [Not] <a href="https://vimeo.com/12345">vimeo.com/12345</a>
- *
- * Could erroneously capture:
- * <a href="some.link/maybe/even/vimeo">This video (vimeo.com/12345) is teh cat's meow!</a>
- */
- $plain_url = "(?:[^'\">]?\/?(?:https?:\/\/)?vimeo\.com[^0-9]+)([0-9]+)(?:[^'\"0-9<]|$)";
-
- return jetpack_preg_replace_callback_outside_tags(
- sprintf( '#%s|%s#i', $shortcode, $plain_url ),
- 'vimeo_link_callback',
- $content,
- 'vimeo'
- );
-}
-
-/**
- * Callback function for the regex that replaces Vimeo URLs with Vimeo embeds.
- *
- * @since 3.7.0
- *
- * @param array $matches An array containing a Vimeo URL.
- * @return string The Vimeo HTML embed code.
- */
-function vimeo_link_callback( $matches ) {
- $id = isset( $matches[2] ) ? $matches[2] : $matches[1];
- if ( isset( $id ) && ctype_digit( $id ) ) {
- return "\n" . vimeo_shortcode( array( 'id' => $id ) ) . "\n";
- }
- return $matches[0];
-}
-
-/** This filter is documented in modules/shortcodes/youtube.php */
-if ( ! is_admin() && apply_filters( 'jetpack_comments_allow_oembed', true ) ) {
- // We attach wp_kses_post to comment_text in default-filters.php with priority of 10 anyway, so the iframe gets filtered out.
- // Higher priority because we need it before auto-link and autop get to it
- add_filter( 'comment_text', 'vimeo_link', 1 );
-}
diff --git a/plugins/jetpack/modules/shortcodes/vine.php b/plugins/jetpack/modules/shortcodes/vine.php
deleted file mode 100644
index 444b9999..00000000
--- a/plugins/jetpack/modules/shortcodes/vine.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-/**
- * Vine shortcode
- */
-
-/**
- * Vine embed code:
- * <iframe class="vine-embed" src="https://vine.co/v/bjHh0zHdgZT" width="600" height="600" frameborder="0"></iframe>
- * <script async src="//platform.vine.co/static/scripts/embed.js" charset="utf-8"></script>
- *
- * URL example:
- * https://vine.co/v/bjHh0zHdgZT/
- *
- * Embed shortcode examples:
- * [embed]https://vine.co/v/bjHh0zHdgZT[/embed]
- * [embed width="300"]https://vine.co/v/bjHh0zHdgZT[/embed]
- * [embed type="postcard" width="300"]https://vine.co/v/bjHh0zHdgZT[/embed]
- **/
-
-function vine_embed_video( $matches, $attr, $url, $rawattr ) {
- static $vine_flag_embedded_script;
-
- $max_height = 300;
- $type = 'simple';
-
- // Only allow 'postcard' or 'simple' types
- if ( isset( $rawattr['type'] ) && $rawattr['type'] === 'postcard' ) {
- $type = 'postcard';
- }
-
- $vine_size = Jetpack::get_content_width();
-
- // If the user enters a value for width or height, we ignore the Jetpack::get_content_width()
- if ( isset( $rawattr['width'] ) || isset( $rawattr['height'] ) ) {
- // 300 is the minimum size that Vine provides for embeds. Lower than that, the postcard embeds looks weird.
- $vine_size = max( $max_height, min( $attr['width'], $attr['height'] ) );
- }
-
- if ( empty( $vine_size ) ) {
- $vine_size = $max_height;
- }
-
- $url = 'https://vine.co/v/' . $matches[1] . '/embed/' . $type;
- $vine_html = sprintf( '<span class="embed-vine" style="display: block;"><iframe class="vine-embed" src="%s" width="%s" height="%s" frameborder="0"></iframe></span>', esc_url( $url ), (int) $vine_size, (int) $vine_size );
-
- if ( $vine_flag_embedded_script !== true ) {
- $vine_html .= '<script async src="//platform.vine.co/static/scripts/embed.js" charset="utf-8"></script>';
- $vine_flag_embedded_script = true;
- }
-
- return $vine_html;
-}
-wp_embed_register_handler( 'jetpack_vine', '#https?://vine.co/v/([a-z0-9]+).*#i', 'vine_embed_video' );
-
-function vine_shortcode( $atts ) {
- global $wp_embed;
-
- if ( empty( $atts['url'] ) ) {
- return '';
- }
-
- if ( ! preg_match( '#https?://vine.co/v/([a-z0-9]+).*#i', $atts['url'] ) ) {
- return '';
- }
-
- return $wp_embed->shortcode( $atts, $atts['url'] );
-}
-add_shortcode( 'vine', 'vine_shortcode' );
diff --git a/plugins/jetpack/modules/shortcodes/vr.php b/plugins/jetpack/modules/shortcodes/vr.php
deleted file mode 100644
index 0df06a4d..00000000
--- a/plugins/jetpack/modules/shortcodes/vr.php
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-
-// VR Viewer Shortcode
-// converts [vr] shortcode to an iframe viewer hosted on vr.me.sh
-
-
-/**
- * Scrub URL paramaters for VR viewer
- *
- * @param url_params - parameter array which is passed to the jetpack_vr_viewer
- * @param url_params['url'] - url of 360 media
- * @param url_params['guid'] - guid for videopress
- * @param url_params['view'] - cinema, 360 - controls if panaroma view, or 360
- * @param url_params['rotation'] - number for rotating media
- * @param url_params['preview'] - show preview image or not
- * @return url_params array or false
- */
-function jetpack_vr_viewer_get_viewer_url_params( $params ) {
- $url_params = array();
-
- if ( isset( $params['rotation'] ) ) {
- $url_params['rotation'] = intval( $params['rotation'], 10 );
- }
-
- if ( isset( $params['view'] ) && in_array( $params['view'], array( 'cinema', '360' ), true ) ) {
- $url_params['view'] = $params['view'];
- }
-
- if ( isset( $params['preview'] ) && $params['preview'] ) {
- $url_params['preview'] = 1;
- }
-
- if ( isset( $params['url'] ) ) {
- return array_merge( $url_params, array( 'url' => $params['url'] ) );
- } elseif ( isset( $params['guid'] ) ) {
- return array_merge( $url_params, array( 'guid' => $params['guid'] ) );
- }
-
- return false;
-}
-
-/**
- * Get padding for IFRAME depending on view type
- *
- * @param view - string cinema, 360 - default cinema
- * @return css padding
- */
-function jetpack_vr_viewer_iframe_padding( $view ) {
- if ( $view === '360' ) {
- return '100%'; // 1:1 square aspect for 360
- }
-
- return '50%'; // 2:1 panorama aspect
-}
-
-/**
- * Create HTML for VR Viewer IFRAME and wrapper
- * The viewer code is hosted on vr.me.sh site which is then displayed
- * within posts via an IFRAME. This function returns the IFRAME html.
- *
- * @param url_params - parameter array which is passed to the jetpack_vr_viewer
- * @param url_params['url'] - url of 360 media
- * @param url_params['guid'] - guid for videopress
- * @param url_params['view'] - cinema, 360 - controls if panaroma view, or 360
- * @param url_params['rotation'] - number for rotating media
- * @param url_params['preview'] - show preview image or not
- * @return html - an iframe for viewer
- */
-function jetpack_vr_viewer_get_html( $url_params ) {
- global $content_width;
-
- $iframe = add_query_arg( $url_params, 'https://vr.me.sh/view/' );
-
- // set some defaults
- $maxwidth = ( isset( $content_width ) ) ? $content_width : 720;
- $view = ( isset( $url_params['view'] ) ) ? $url_params['view'] : 'cinema';
-
- $rtn = '<div style="position: relative; max-width: ' . $maxwidth . 'px; margin-left: auto; margin-right: auto; overflow: hidden;">';
- $rtn .= '<div style="padding-top: ' . jetpack_vr_viewer_iframe_padding( $view ) . ';"></div>';
- $rtn .= '<iframe style="position: absolute; top: 0; right: 0; bottom: 0; left: 0; height: 100%" allowfullscreen="true" frameborder="0" width="100%" height="300" src="' . esc_url( $iframe ) . '">';
- $rtn .= '</iframe>';
- $rtn .= '</div>';
-
- return $rtn;
-}
-
-/**
- * Convert [vr] shortcode to viewer
- *
- * Shortcode example:
- * [vr url="https://en-blog.files.wordpress.com/2016/12/regents_park.jpg" view="360"]
- *
- * VR Viewer embed code:
- * <div style="position: relative; max-width: 720px; margin-left: auto; margin-right: auto; overflow: hidden;">
- * <div style="padding-top: 100%;"></div>
- * <iframe style="position: absolute; top: 0; right: 0; bottom: 0; left: 0; height: 100%" allowfullscreen="true" frameborder="0" width="100%" height="400" src="https://vr.me.sh/view/?view=360&amp;url=https://en-blog.files.wordpress.com/2016/12/regents_park.jpg">
- * </iframe>
- * </div>
- *
- * @return html - complete vr viewer html
- */
-function jetpack_vr_viewer_shortcode( $atts ) {
- $params = shortcode_atts(
- array(
- 0 => null,
- 'url' => null,
- 'src' => null,
- 'guid' => null,
- 'rotation' => null,
- 'view' => null,
- 'preview' => false,
- ),
- $atts
- );
-
- // We offer a few ways to specify the URL
- if ( $params[0] ) {
- $params['url'] = $params[0];
- } elseif ( $params['src'] ) {
- $params['url'] = $params['src'];
- }
-
- $url_params = jetpack_vr_viewer_get_viewer_url_params( $params );
- if ( $url_params ) {
- return jetpack_vr_viewer_get_html( $url_params );
- }
-
- // add check for user
- if ( current_user_can( 'edit_posts' ) ) {
- return '[vr] shortcode requires a data source to be given';
- } else {
- return '';
- }
-}
-
-add_shortcode( 'vr', 'jetpack_vr_viewer_shortcode' );
diff --git a/plugins/jetpack/modules/shortcodes/wordads.php b/plugins/jetpack/modules/shortcodes/wordads.php
deleted file mode 100644
index bca6c48a..00000000
--- a/plugins/jetpack/modules/shortcodes/wordads.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-/**
- * Embed WordAds 'ad' in post
- */
-class Jetpack_WordAds_Shortcode {
-
- private $scripts_and_style_included = false;
-
- function __construct() {
- add_action( 'init', array( $this, 'action_init' ) );
- }
-
- /**
- * Register our shortcode and enqueue necessary files.
- */
- function action_init() {
- global $wordads;
-
- if ( empty( $wordads ) ) {
- return null;
- }
-
- add_shortcode( 'wordads', array( $this, 'wordads_shortcode' ) );
- }
-
- /**
- * Our [wordads] shortcode.
- * Prints a WordAds Ad.
- *
- * @param array $atts Array of shortcode attributes.
- * @param string $content Post content.
- *
- * @return string HTML for WordAds shortcode.
- */
- static function wordads_shortcode( $atts, $content = '' ) {
- $atts = shortcode_atts( array(), $atts, 'wordads' );
-
- return self::wordads_shortcode_html( $atts, $content );
- }
-
- /**
- * The shortcode output
- *
- * @param array $atts Array of shortcode attributes.
- * @param string $content Post content.
- *
- * @return string HTML output
- */
- static function wordads_shortcode_html( $atts, $content = '' ) {
- global $wordads;
-
- if ( empty( $wordads ) ) {
- return '<div>' . __( 'The WordAds module is not active', 'jetpack' ) . '</div>';
- }
-
- $html = '<div class="jetpack-wordad" itemscope itemtype="https://schema.org/WPAdBlock"></div>';
- $html = $wordads->insert_inline_ad( $html );
-
- return $html;
- }
-}
-
-new Jetpack_WordAds_Shortcode();
diff --git a/plugins/jetpack/modules/shortcodes/wufoo.php b/plugins/jetpack/modules/shortcodes/wufoo.php
deleted file mode 100644
index fbe6fe70..00000000
--- a/plugins/jetpack/modules/shortcodes/wufoo.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-/*
-Plugin Name: Wufoo Shortcode Plugin
-Description: Enables shortcode to embed Wufoo forms. Usage: [wufoo username="chriscoyier" formhash="x7w3w3" autoresize="true" height="458" header="show"]
-Author: Chris Coyier / Wufoo, evansolomon
-
-Based on https://wordpress.org/extend/plugins/wufoo-shortcode/
-https://wufoo.com/docs/code-manager/wordpress-shortcode-plugin/
-*/
-
-
-function wufoo_shortcode( $atts ) {
- $attr = shortcode_atts(
- array(
- 'username' => '',
- 'formhash' => '',
- 'autoresize' => true,
- 'height' => '500',
- 'header' => 'show',
- ),
- $atts
- );
-
- // Check username and formhash to ensure they only have alphanumeric characters or underscores, and aren't empty.
- if ( ! preg_match( '/^[a-zA-Z0-9_]+$/', $attr['username'] ) || ! preg_match( '/^[a-zA-Z0-9_]+$/', $attr['formhash'] ) ) {
-
- /**
- * Return an error to the users with instructions if one of these params is invalid
- * They don't have default values because they are user/form-specific
- */
- $return_error = sprintf( __( 'Something is wrong with your Wufoo shortcode. If you copy and paste it from the %1$sWufoo Code Manager%2$s, you should be golden.', 'jetpack' ), '<a href="https://wufoo.com/docs/code-manager/" target="_blank">', '</a>' );
-
- return '
- <div style="border: 20px solid red; border-radius: 40px; padding: 40px; margin: 50px 0 70px;">
- <h3>Uh oh!</h3>
- <p style="margin: 0;">' . $return_error . '</p>
- </div>';
- }
-
- /**
- * Placeholder which will tell Wufoo where to render the form.
- */
- $js_embed_placeholder = '<div id="wufoo-' . $attr['formhash'] . '"></div>';
-
- /**
- * Required parameters are present.
- * An error will be returned inside the form if they are invalid.
- */
- $js_embed = '(function(){try{var wufoo_' . $attr['formhash'] . ' = new WufooForm();';
- $js_embed .= 'wufoo_' . $attr['formhash'] . '.initialize({';
- $js_embed .= "'userName':'" . $attr['username'] . "', ";
- $js_embed .= "'formHash':'" . $attr['formhash'] . "', ";
- $js_embed .= "'autoResize':" . (bool) ( $attr['autoresize'] ) . ',';
- $js_embed .= "'height':'" . (int) $attr['height'] . "',";
- $js_embed .= "'header':'" . esc_js( $attr['header'] ) . "',";
- $js_embed .= "'ssl':true,'async':true});";
- $js_embed .= 'wufoo_' . $attr['formhash'] . '.display();';
- $js_embed .= '}catch(e){}})();';
-
- /**
- * iframe embed, loaded inside <noscript> tags.
- */
- $iframe_embed = '<iframe ';
- $iframe_embed .= 'height="' . (int) $attr['height'] . '" ';
- $iframe_embed .= 'allowTransparency="true" frameborder="0" scrolling="no" style="width:100%;border:none;"';
- $iframe_embed .= 'src="https://' . $attr['username'] . '.wufoo.com/embed/' . $attr['formhash'] . '/">';
- $iframe_embed .= '<a href="https://' . $attr['username'] . '.wufoo.com/forms/' . $attr['formhash'] . '/" ';
- $iframe_embed .= 'rel="nofollow" target="_blank">' . __( 'Fill out my Wufoo form!', 'jetpack' ) . '</a></iframe>';
-
- wp_enqueue_script(
- 'wufoo-form',
- 'https://www.wufoo.com/scripts/embed/form.js',
- array(),
- false,
- true
- );
-
- wp_add_inline_script( 'wufoo-form', $js_embed );
-
- /** This action is already documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'embeds', 'wufoo' );
-
- /**
- * Return embed in JS and iframe.
- */
- return "$js_embed_placeholder<noscript>$iframe_embed</noscript>";
-}
-
-add_shortcode( 'wufoo', 'wufoo_shortcode' );
diff --git a/plugins/jetpack/modules/shortcodes/youtube.php b/plugins/jetpack/modules/shortcodes/youtube.php
deleted file mode 100644
index 048eb09b..00000000
--- a/plugins/jetpack/modules/shortcodes/youtube.php
+++ /dev/null
@@ -1,396 +0,0 @@
-<?php
-
-/**
- * youtube shortcode
- *
- * Contains shortcode + some improvements over the Embeds syntax @
- * http://codex.wordpress.org/Embeds
- *
- * @example [youtube=http://www.youtube.com/watch?v=wq0rXGLs0YM&amp;fs=1&amp;hl=bg_BG]
- */
-
-/**
- * Replaces YouTube embeds with YouTube shortcodes.
- *
- * @param string $content HTML content.
- * @return string The content with YouTube embeds replaced with YouTube shortcodes.
- */
-// 2008-07-15:
-// <object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/bZBHZT3a-FA&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/bZBHZT3a-FA&hl=en&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>
-// around 2008-06-06 youtube changed their old embed code to this:
-// <object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/M1D30gS7Z8U&hl=en"></param><embed src="http://www.youtube.com/v/M1D30gS7Z8U&hl=en" type="application/x-shockwave-flash" width="425" height="344"></embed></object>
-// old style was:
-// <object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/dGY28Qbj76A&rel=0"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/dGY28Qbj76A&rel=0" type="application/x-shockwave-flash" wmode="transparent" width="425" height="344"></embed></object>
-// 12-2010:
-// <object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/3H8bnKdf654?fs=1&amp;hl=en_GB"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/3H8bnKdf654?fs=1&amp;hl=en_GB" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object>
-// 01-2011:
-// <iframe title="YouTube video player" class="youtube-player" type="text/html" width="640" height="390" src="http://www.youtube.com/embed/Qq9El3ki0_g" frameborder="0" allowFullScreen></iframe>
-// <iframe class="youtube-player" type="text/html" width="640" height="385" src="http://www.youtube.com/embed/VIDEO_ID" frameborder="0"></iframe>
-function youtube_embed_to_short_code( $content ) {
- if ( ! is_string( $content ) || false === strpos( $content, 'youtube.com' ) ) {
- return $content;
- }
-
- // older codes
- $regexp = '!<object(.*?)>.*?<param\s+name=[\'"]movie[\'"]\s+value=[\'"](https?:)?//www\.youtube\.com/v/([^\'"]+)[\'"].*?>.*?</object>!i';
- $regexp_ent = htmlspecialchars( $regexp, ENT_NOQUOTES );
- $old_regexp = '!<embed(?:\s+\w+="[^"]*")*\s+src="https?(?:\:|&#0*58;)//www\.youtube\.com/v/([^"]+)"(?:\s+\w+="[^"]*")*\s*(?:/>|>\s*</embed>)!';
- $old_regexp_ent = str_replace( '&amp;#0*58;', '&amp;#0*58;|&#0*58;', htmlspecialchars( $old_regexp, ENT_NOQUOTES ) );
-
- // new code
- $ifr_regexp = '!<iframe((?:\s+\w+="[^"]*")*?)\s+src="(https?:)?//(?:www\.)*youtube.com/embed/([^"]+)".*?</iframe>!i';
- $ifr_regexp_ent = str_replace( '&amp;#0*58;', '&amp;#0*58;|&#0*58;', htmlspecialchars( $ifr_regexp, ENT_NOQUOTES ) );
-
- foreach ( array( 'regexp', 'regexp_ent', 'old_regexp', 'old_regexp_ent', 'ifr_regexp', 'ifr_regexp_ent' ) as $reg ) {
- if ( ! preg_match_all( $$reg, $content, $matches, PREG_SET_ORDER ) ) {
- continue;
- }
-
- foreach ( $matches as $match ) {
- // Hack, but '?' should only ever appear once, and
- // it should be for the 1st field-value pair in query string,
- // if it is present
- // YouTube changed their embed code.
- // Example of how it is now:
- // <object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/aP9AaD4tgBY?fs=1&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/aP9AaD4tgBY?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object>
- // As shown at the start of function, previous YouTube didn't '?'
- // the 1st field-value pair.
- if ( in_array( $reg, array( 'ifr_regexp', 'ifr_regexp_ent', 'regexp', 'regexp_ent' ) ) ) {
- $params = $match[1];
-
- if ( in_array( $reg, array( 'ifr_regexp_ent', 'regexp_ent' ) ) ) {
- $params = html_entity_decode( $params );
- }
-
- $params = wp_kses_hair( $params, array( 'http' ) );
-
- $width = isset( $params['width'] ) ? (int) $params['width']['value'] : 0;
- $height = isset( $params['height'] ) ? (int) $params['height']['value'] : 0;
- $wh = '';
-
- if ( $width && $height ) {
- $wh = "&w=$width&h=$height";
- }
-
- $url = esc_url_raw( "https://www.youtube.com/watch?v={$match[3]}{$wh}" );
- } else {
- $match[1] = str_replace( '?', '&', $match[1] );
-
- $url = esc_url_raw( 'https://www.youtube.com/watch?v=' . html_entity_decode( $match[1] ) );
- }
-
- $content = str_replace( $match[0], "[youtube $url]", $content );
-
- /**
- * Fires before the YouTube embed is transformed into a shortcode.
- *
- * @module shortcodes
- *
- * @since 1.2.0
- *
- * @param string youtube Shortcode name.
- * @param string $url YouTube video URL.
- */
- do_action( 'jetpack_embed_to_shortcode', 'youtube', $url );
- }
- }
-
- return $content;
-}
-
-add_filter( 'pre_kses', 'youtube_embed_to_short_code' );
-
-/**
- * Replaces plain-text links to YouTube videos with YouTube embeds.
- *
- * @param string $content HTML content
- * @return string The content with embeds instead of URLs
- */
-function youtube_link( $content ) {
- return jetpack_preg_replace_callback_outside_tags( '!(?:\n|\A)https?://(?:www\.)?(?:youtube.com/(?:v/|playlist|watch[/\#?])|youtu\.be/)[^\s]+?(?:\n|\Z)!i', 'youtube_link_callback', $content, 'youtube.com/' );
-}
-
-/**
- * Callback function for the regex that replaces YouTube URLs with
- * YouTube embeds.
- */
-function youtube_link_callback( $matches ) {
- return "\n" . youtube_id( $matches[0] ) . "\n";
-}
-
-/**
- * Normalizes a YouTube URL to include a v= parameter and a query string free of encoded ampersands.
- *
- * @param string $url
- * @return string The normalized URL
- */
-if ( ! function_exists( 'youtube_sanitize_url' ) ) :
- function youtube_sanitize_url( $url ) {
- $url = trim( $url, ' "' );
- $url = trim( $url );
- $url = str_replace( array( 'youtu.be/', '/v/', '#!v=', '&amp;', '&#038;', 'playlist' ), array( 'youtu.be/?v=', '/?v=', '?v=', '&', '&', 'videoseries' ), $url );
-
- // Replace any extra question marks with ampersands - the result of a URL like "http://www.youtube.com/v/9FhMMmqzbD8?fs=1&hl=en_US" being passed in.
- $query_string_start = strpos( $url, '?' );
-
- if ( false !== $query_string_start ) {
- $url = substr( $url, 0, $query_string_start + 1 ) . str_replace( '?', '&', substr( $url, $query_string_start + 1 ) );
- }
-
- return $url;
- }
-endif;
-
-/*
- * url can be:
- * http://www.youtube.com/embed/videoseries?list=PL94269DA08231042B&amp;hl=en_US
- * http://www.youtube.com/watch#!v=H2Ncxw1xfck
- * http://www.youtube.com/watch?v=H2Ncxw1xfck
- * http://www.youtube.com/watch?v=H2Ncxw1xfck&w=320&h=240&fmt=1&rel=0&showsearch=1&hd=0
- * http://www.youtube.com/v/jF-kELmmvgA
- * http://www.youtube.com/v/9FhMMmqzbD8?fs=1&hl=en_US
- * http://youtu.be/Rrohlqeir5E
- */
-
-/**
- * Converts a YouTube URL into an embedded YouTube video.
- */
-function youtube_id( $url ) {
- if ( ! $id = jetpack_get_youtube_id( $url ) ) {
- return '<!--YouTube Error: bad URL entered-->';
- }
-
- $url = youtube_sanitize_url( $url );
- $url = parse_url( $url );
-
- if ( ! isset( $url['query'] ) ) {
- return false;
- }
-
- if ( isset( $url['fragment'] ) ) {
- wp_parse_str( $url['fragment'], $fargs );
- } else {
- $fargs = array();
- }
- wp_parse_str( $url['query'], $qargs );
-
- $qargs = array_merge( $fargs, $qargs );
-
- // calculate the width and height, taking content_width into consideration
- global $content_width;
-
- $input_w = ( isset( $qargs['w'] ) && intval( $qargs['w'] ) ) ? intval( $qargs['w'] ) : 0;
- $input_h = ( isset( $qargs['h'] ) && intval( $qargs['h'] ) ) ? intval( $qargs['h'] ) : 0;
-
- // If we have $content_width, use it.
- if ( ! empty( $content_width ) ) {
- $default_width = $content_width;
- } else {
- // Otherwise get default width from the old, now deprecated embed_size_w option.
- $default_width = get_option( 'embed_size_w' );
- }
-
- // If we don't know those 2 values use a hardcoded width.h
- if ( empty( $default_width ) ) {
- $default_width = 640;
- }
-
- if ( $input_w > 0 && $input_h > 0 ) {
- $w = $input_w;
- $h = $input_h;
- } elseif ( 0 == $input_w && 0 == $input_h ) {
- if ( isset( $qargs['fmt'] ) && intval( $qargs['fmt'] ) ) {
- $w = ( ! empty( $content_width ) ? min( $content_width, 480 ) : 480 );
- } else {
- $w = ( ! empty( $content_width ) ? min( $content_width, $default_width ) : $default_width );
- $h = ceil( ( $w / 16 ) * 9 );
- }
- } elseif ( $input_w > 0 ) {
- $w = $input_w;
- $h = ceil( ( $w / 16 ) * 9 );
- } else {
- if ( isset( $qargs['fmt'] ) && intval( $qargs['fmt'] ) ) {
- $w = ( ! empty( $content_width ) ? min( $content_width, 480 ) : 480 );
- } else {
- $w = ( ! empty( $content_width ) ? min( $content_width, $default_width ) : $default_width );
- $h = $input_h;
- }
- }
-
- /**
- * Filter the YouTube player width.
- *
- * @module shortcodes
- *
- * @since 1.1.0
- *
- * @param int $w Width of the YouTube player in pixels.
- */
- $w = (int) apply_filters( 'youtube_width', $w );
-
- /**
- * Filter the YouTube player height.
- *
- * @module shortcodes
- *
- * @since 1.1.0
- *
- * @param int $h Height of the YouTube player in pixels.
- */
- $h = (int) apply_filters( 'youtube_height', $h );
-
- $rel = ( isset( $qargs['rel'] ) && 0 == $qargs['rel'] ) ? 0 : 1;
- $search = ( isset( $qargs['showsearch'] ) && 1 == $qargs['showsearch'] ) ? 1 : 0;
- $info = ( isset( $qargs['showinfo'] ) && 0 == $qargs['showinfo'] ) ? 0 : 1;
- $iv = ( isset( $qargs['iv_load_policy'] ) && 3 == $qargs['iv_load_policy'] ) ? 3 : 1;
-
- $fmt = ( isset( $qargs['fmt'] ) && intval( $qargs['fmt'] ) ) ? '&fmt=' . (int) $qargs['fmt'] : '';
-
- if ( ! isset( $qargs['autohide'] ) || ( $qargs['autohide'] < 0 || 2 < $qargs['autohide'] ) ) {
- $autohide = '&autohide=2';
- } else {
- $autohide = '&autohide=' . absint( $qargs['autohide'] );
- }
-
- $start = 0;
- if ( isset( $qargs['start'] ) ) {
- $start = intval( $qargs['start'] );
- } elseif ( isset( $qargs['t'] ) ) {
- $time_pieces = preg_split( '/(?<=\D)(?=\d+)/', $qargs['t'] );
-
- foreach ( $time_pieces as $time_piece ) {
- $int = (int) $time_piece;
- switch ( substr( $time_piece, -1 ) ) {
- case 'h':
- $start += $int * 3600;
- break;
- case 'm':
- $start += $int * 60;
- break;
- case 's':
- $start += $int;
- break;
- }
- }
- }
-
- $start = $start ? '&start=' . $start : '';
- $end = ( isset( $qargs['end'] ) && intval( $qargs['end'] ) ) ? '&end=' . (int) $qargs['end'] : '';
- $hd = ( isset( $qargs['hd'] ) && intval( $qargs['hd'] ) ) ? '&hd=' . (int) $qargs['hd'] : '';
-
- $vq = ( isset( $qargs['vq'] ) && in_array( $qargs['vq'], array( 'hd720', 'hd1080' ) ) ) ? '&vq=' . $qargs['vq'] : '';
-
- $cc = ( isset( $qargs['cc_load_policy'] ) ) ? '&cc_load_policy=1' : '';
- $cc_lang = ( isset( $qargs['cc_lang_pref'] ) ) ? '&cc_lang_pref=' . preg_replace( '/[^_a-z0-9-]/i', '', $qargs['cc_lang_pref'] ) : '';
-
- $wmode = ( isset( $qargs['wmode'] ) && in_array( strtolower( $qargs['wmode'] ), array( 'opaque', 'window', 'transparent' ) ) ) ? $qargs['wmode'] : 'transparent';
-
- $theme = ( isset( $qargs['theme'] ) && in_array( strtolower( $qargs['theme'] ), array( 'dark', 'light' ) ) ) ? '&theme=' . $qargs['theme'] : '';
-
- $autoplay = '';
- /**
- * Allow YouTube videos to start playing automatically.
- *
- * @module shortcodes
- *
- * @since 2.2.2
- *
- * @param bool false Enable autoplay for YouTube videos.
- */
- if ( apply_filters( 'jetpack_youtube_allow_autoplay', false ) && isset( $qargs['autoplay'] ) ) {
- $autoplay = '&autoplay=' . (int) $qargs['autoplay'];
- }
-
- if ( ( isset( $url['path'] ) && '/videoseries' == $url['path'] ) || isset( $qargs['list'] ) ) {
- $html = "<iframe class='youtube-player' type='text/html' width='$w' height='$h' src='" . esc_url( "https://www.youtube.com/embed/videoseries?list=$id&hl=en_US" ) . "' allowfullscreen='true' style='border:0;'></iframe>";
- } else {
- $html = "<iframe class='youtube-player' type='text/html' width='$w' height='$h' src='" . esc_url( "https://www.youtube.com/embed/$id?version=3&rel=$rel&fs=1$fmt$autohide&showsearch=$search&showinfo=$info&iv_load_policy=$iv$start$end$hd&wmode=$wmode$theme$autoplay{$cc}{$cc_lang}" ) . "' allowfullscreen='true' style='border:0;'></iframe>";
- }
-
- // Let's do some alignment wonder in a span, unless we're producing a feed
- if ( ! is_feed() ) {
- $alignmentcss = 'text-align:center;';
- if ( isset( $qargs['align'] ) ) {
- switch ( $qargs['align'] ) {
- case 'left':
- $alignmentcss = "float:left; width:{$w}px; height:{$h}px; margin-right:10px; margin-bottom: 10px;";
- break;
- case 'right':
- $alignmentcss = "float:right; width:{$w}px; height:{$h}px; margin-left:10px; margin-bottom: 10px;";
- break;
- }
- }
-
- $html = sprintf(
- '<span class="embed-youtube" style="%s display: block;">%s</span>',
- esc_attr( $alignmentcss ),
- $html
- );
-
- }
-
- /**
- * Filter the YouTube video HTML output.
- *
- * @module shortcodes
- *
- * @since 1.2.3
- *
- * @param string $html YouTube video HTML output.
- */
- $html = apply_filters( 'video_embed_html', $html );
-
- return $html;
-}
-
-function youtube_shortcode( $atts ) {
- return youtube_id( ( isset( $atts[0] ) ) ? ltrim( $atts[0], '=' ) : shortcode_new_to_old_params( $atts ) );
-}
-
-add_shortcode( 'youtube', 'youtube_shortcode' );
-
-/**
- * For bare URLs on their own line of the form
- * http://www.youtube.com/v/9FhMMmqzbD8?fs=1&hl=en_US
- */
-function wpcom_youtube_embed_crazy_url( $matches, $attr, $url ) {
- return youtube_id( $url );
-}
-
-function wpcom_youtube_embed_crazy_url_init() {
- wp_embed_register_handler( 'wpcom_youtube_embed_crazy_url', '#https?://(?:www\.)?(?:youtube.com/(?:v/|playlist|watch[/\#?])|youtu\.be/).*#i', 'wpcom_youtube_embed_crazy_url' );
-}
-
-add_action( 'init', 'wpcom_youtube_embed_crazy_url_init' );
-
-/**
- * Allow oEmbeds in Jetpack's Comment form.
- *
- * @module shortcodes
- *
- * @since 2.8.0
- *
- * @param int get_option('embed_autourls') Option to automatically embed all plain text URLs.
- */
-if ( ! is_admin() && apply_filters( 'jetpack_comments_allow_oembed', true ) ) {
- // We attach wp_kses_post to comment_text in default-filters.php with priority of 10 anyway, so the iframe gets filtered out.
- // Higher priority because we need it before auto-link and autop get to it
- add_filter( 'comment_text', 'youtube_link', 1 );
-}
-
-/**
- * Core changes to do_shortcode (https://core.trac.wordpress.org/changeset/34747) broke "improper" shortcodes
- * with the format [shortcode=http://url.com].
- *
- * This removes the "=" from the shortcode so it can be parsed.
- *
- * @see https://github.com/Automattic/jetpack/issues/3121
- */
-function jetpack_fix_youtube_shortcode_display_filter( $content ) {
- if ( strpos( $content, '[youtube=' ) !== false ) {
- $content = preg_replace( '@\[youtube=(.*?)\]@', '[youtube $1]', $content );
- }
-
- return $content;
-}
-add_filter( 'the_content', 'jetpack_fix_youtube_shortcode_display_filter', 7 );
diff --git a/plugins/jetpack/modules/shortlinks.php b/plugins/jetpack/modules/shortlinks.php
deleted file mode 100644
index cd06f43d..00000000
--- a/plugins/jetpack/modules/shortlinks.php
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-/**
- * Module Name: WP.me Shortlinks
- * Module Description: Create short and simple links for all posts and pages.
- * Sort Order: 8
- * First Introduced: 1.1
- * Requires Connection: Yes
- * Auto Activate: Yes
- * Module Tags: Social
- * Feature: Writing
- * Additional Search Queries: shortlinks, wp.me
- */
-
-add_filter( 'pre_get_shortlink', 'wpme_get_shortlink_handler', 1, 4 );
-
-if ( !function_exists( 'wpme_dec2sixtwo' ) ) {
- function wpme_dec2sixtwo( $num ) {
- $index = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
- $out = "";
-
- if ( $num < 0 ) {
- $out = '-';
- $num = abs( $num );
- }
-
- for ( $t = floor( log10( $num ) / log10( 62 ) ); $t >= 0; $t-- ) {
- $a = floor( $num / pow( 62, $t ) );
- $out = $out . substr( $index, $a, 1 );
- $num = $num - ( $a * pow( 62, $t ) );
- }
-
- return $out;
- }
-}
-
-function wpme_get_shortlink( $id = 0, $context = 'post', $allow_slugs = true ) {
- global $wp_query;
-
- $blog_id = Jetpack_Options::get_option( 'id' );
-
- if ( 'query' == $context ) {
- if ( is_singular() ) {
- $id = $wp_query->get_queried_object_id();
- $context = 'post';
- } elseif ( is_front_page() ) {
- $context = 'blog';
- } else {
- return '';
- }
- }
-
- if ( 'blog' == $context ) {
- if ( empty( $id ) )
- $id = $blog_id;
-
- return 'https://wp.me/' . wpme_dec2sixtwo( $id );
- }
-
- $post = get_post( $id );
-
- if ( empty( $post ) )
- return '';
-
- $post_id = $post->ID;
- $type = '';
-
- if ( $allow_slugs && 'publish' == $post->post_status && 'post' == $post->post_type && strlen( $post->post_name ) <= 8 && false === strpos( $post->post_name, '%' )
- && false === strpos( $post->post_name, '-' ) ) {
- $id = $post->post_name;
- $type = 's';
- } else {
- $id = wpme_dec2sixtwo( $post_id );
- if ( 'page' == $post->post_type )
- $type = 'P';
- elseif ( 'post' == $post->post_type || post_type_supports( $post->post_type, 'shortlinks' ) )
- $type= 'p';
- elseif ( 'attachment' == $post->post_type )
- $type = 'a';
- }
-
- if ( empty( $type ) )
- return '';
-
- return 'https://wp.me/' . $type . wpme_dec2sixtwo( $blog_id ) . '-' . $id;
-}
-
-function wpme_get_shortlink_handler( $shortlink, $id, $context, $allow_slugs ) {
- return wpme_get_shortlink( $id, $context, $allow_slugs );
-}
-
-/**
- * Add Shortlinks to the REST API Post response.
- *
- * @since 6.9.0
- *
- * @action rest_api_init
- * @uses register_rest_field, wpme_rest_get_shortlink
- */
-function wpme_rest_register_shortlinks() {
- register_rest_field(
- 'post',
- 'jetpack_shortlink',
- array(
- 'get_callback' => 'wpme_rest_get_shortlink',
- 'update_callback' => null,
- 'schema' => null,
- )
- );
-}
-
-/**
- * Get the shortlink of a post.
- *
- * @since 6.9.0
- *
- * @param array $object Details of current post.
- *
- * @uses wpme_get_shortlink
- *
- * @return string
- */
-function wpme_rest_get_shortlink( $object ) {
- return wpme_get_shortlink( $object['id'], array() );
-}
-
-// Add shortlinks to the REST API Post response.
-add_action( 'rest_api_init', 'wpme_rest_register_shortlinks' );
-
-/**
- * Set the Shortlink Gutenberg extension as available.
- */
-function wpme_set_extension_available() {
- Jetpack_Gutenberg::set_extension_available( 'jetpack/shortlinks' );
-}
-
-add_action( 'init', 'wpme_set_extension_available' );
diff --git a/plugins/jetpack/modules/simple-payments/paypal-express-checkout.js b/plugins/jetpack/modules/simple-payments/paypal-express-checkout.js
deleted file mode 100644
index c166931a..00000000
--- a/plugins/jetpack/modules/simple-payments/paypal-express-checkout.js
+++ /dev/null
@@ -1,212 +0,0 @@
-/**
- * This PaypalExpressCheckout global is included by wp_enqueue_script( 'paypal-express-checkout' );
- * It handles communication with Paypal Express checkout and public-api.wordpress.com for the purposes
- * of simple-payments module.
- */
-
-/* global paypal */
-/* global jQuery */
-/* exported PaypalExpressCheckout */
-/* jshint unused:false, es3:false, esversion:5 */
-var PaypalExpressCheckout = {
- primaryCssClassName: 'jetpack-simple-payments',
- messageCssClassName: 'jetpack-simple-payments-purchase-message',
-
- wpRestAPIHost: 'https://public-api.wordpress.com',
- wpRestAPIVersion: '/wpcom/v2',
-
- getEnvironment: function() {
- if ( localStorage && localStorage.getItem && localStorage.getItem( 'simple-payments-env' ) === 'sandbox' ) {
- return 'sandbox';
- }
- return 'production';
- },
-
- getCreatePaymentEndpoint: function( blogId ) {
- return PaypalExpressCheckout.wpRestAPIHost + PaypalExpressCheckout.wpRestAPIVersion + '/sites/' + blogId + '/simple-payments/paypal/payment';
- },
-
- getExecutePaymentEndpoint: function( blogId, paymentId ) {
- return PaypalExpressCheckout.wpRestAPIHost + PaypalExpressCheckout.wpRestAPIVersion + '/sites/' + blogId + '/simple-payments/paypal/' + paymentId + '/execute';
- },
-
- getNumberOfItems: function( field, enableMultiple ) {
- if ( enableMultiple !== '1' ) {
- return 1;
- }
-
- var numberField = document.getElementById( field );
-
- if ( ! numberField ) {
- return 1;
- }
-
- var number = Number( numberField.value );
-
- if ( isNaN( number ) ) {
- return 1;
- }
- return number;
- },
-
- /**
- * Get the DOM element-placeholder used to show message
- * about the transaction. If it doesn't exist then the function will create a new one.
- *
- * @param string domId id of the payment button placeholder
- * @return Element the dom element to print the message
- */
- getMessageContainer: function( domId ) {
- return document.getElementById( domId + '-message-container' );
- },
-
- /**
- * Show a messange close to the Paypal button.
- * Use this function to give feedback to the user according
- * to the transaction result.
- *
- * @param {String} message message to show
- * @param {String} domId paypal-button element dom identifier
- * @param {Boolean} [error] defines if it's a message error. Not TRUE as default.
- */
- showMessage: function( message, domId, isError ) {
- var domEl = PaypalExpressCheckout.getMessageContainer( domId );
-
- // set css classes
- var cssClasses = PaypalExpressCheckout.messageCssClassName + ' show ';
- cssClasses += isError ? 'error' : 'success';
-
- // show message 1s after PayPal popup is closed
- setTimeout( function() {
- domEl.innerHTML = message;
- domEl.setAttribute( 'class', cssClasses );
- }, 1000 );
- },
-
- showError: function( message, domId ) {
- PaypalExpressCheckout.showMessage( message, domId, true );
- },
-
- processErrorMessage: function( errorResponse ) {
- var error = errorResponse ? errorResponse.responseJSON : null;
- var defaultMessage = 'There was an issue processing your payment.';
-
- if ( ! error ) {
- return '<p>' + defaultMessage + '</p>';
- }
-
- if ( error.additional_errors ) {
- var messages = [];
- error.additional_errors.forEach( function( additionalError ) {
- if ( additionalError.message ) {
- messages.push( '<p>' + additionalError.message.toString() + '</p>' );
- }
- } );
- return messages.join('');
- }
-
- return '<p>' + ( error.message || defaultMessage ) + '</p>';
- },
-
- processSuccessMessage: function( successResponse ) {
- var message = successResponse.message;
- var defaultMessage = 'Thank you. Your purchase was successful!';
-
- if ( ! message ) {
- return '<p>' + defaultMessage + '</p>';
- }
-
- return '<p>' + message + '</p>';
- },
-
- cleanAndHideMessage: function( domId ) {
- var domEl = PaypalExpressCheckout.getMessageContainer( domId );
- domEl.setAttribute( 'class', PaypalExpressCheckout.messageCssClassName );
- domEl.innerHTML = '';
- },
-
- renderButton: function( blogId, buttonId, domId, enableMultiple ) {
- var env = PaypalExpressCheckout.getEnvironment();
-
- if ( ! paypal ) {
- throw new Error( 'PayPal module is required by PaypalExpressCheckout' );
- }
-
- var buttonDomId = domId + '_button';
-
- paypal.Button.render( {
- env: env,
- commit: true,
-
- style: {
- label: 'pay',
- shape: 'rect',
- color: 'silver',
- fundingicons: true,
- },
-
- payment: function() {
- PaypalExpressCheckout.cleanAndHideMessage( domId );
-
- var payload = {
- number: PaypalExpressCheckout.getNumberOfItems( domId + '_number', enableMultiple ),
- buttonId: buttonId,
- env: env
- };
-
- return new paypal.Promise( function( resolve, reject ) {
- jQuery.post( PaypalExpressCheckout.getCreatePaymentEndpoint( blogId ), payload )
- .done( function( paymentResponse ) {
- if ( ! paymentResponse ) {
- PaypalExpressCheckout.showError( PaypalExpressCheckout.processErrorMessage(), domId );
- return reject( new Error( 'server_error' ) );
- }
-
- resolve( paymentResponse.id );
- } )
- .fail( function( paymentError ) {
- var paymentErrorMessage = PaypalExpressCheckout.processErrorMessage( paymentError );
- PaypalExpressCheckout.showError( paymentErrorMessage, domId );
-
- var code = paymentError.responseJSON && paymentError.responseJSON.code ?
- paymentError.responseJSON.code : 'server_error';
-
- reject( new Error( code ) );
- } );
- } );
- },
-
- onAuthorize: function( onAuthData ) {
- var payload = {
- buttonId: buttonId,
- payerId: onAuthData.payerID,
- env: env
- };
- return new paypal.Promise( function( resolve, reject ) {
- jQuery.post( PaypalExpressCheckout.getExecutePaymentEndpoint( blogId, onAuthData.paymentID ), payload )
- .done( function( authResponse ) {
- if ( ! authResponse ) {
- PaypalExpressCheckout.showError( PaypalExpressCheckout.processErrorMessage(), domId );
- return reject( new Error( 'server_error' ) );
- }
-
- PaypalExpressCheckout.showMessage(
- PaypalExpressCheckout.processSuccessMessage( authResponse ),
- domId
- );
- resolve();
- } )
- .fail( function( authError ) {
- var authErrorMessage = PaypalExpressCheckout.processErrorMessage( authError );
- PaypalExpressCheckout.showError( authErrorMessage, domId );
-
- var code = authError.responseJSON && authError.responseJSON.code ?
- authError.responseJSON.code : 'server_error';
-
- reject( new Error( code ) );
- } );
- } );
- }
- }, buttonDomId );
- }
-};
diff --git a/plugins/jetpack/modules/simple-payments/simple-payments.css b/plugins/jetpack/modules/simple-payments/simple-payments.css
deleted file mode 100644
index dd479fc1..00000000
--- a/plugins/jetpack/modules/simple-payments/simple-payments.css
+++ /dev/null
@@ -1,129 +0,0 @@
-.jetpack-simple-payments-wrapper {
- margin-bottom: 1.5em;
-}
-
-/* Higher specificity in order to reset paragraph style */
-body .jetpack-simple-payments-wrapper .jetpack-simple-payments-details p {
- margin: 0 0 1.5em;
- padding: 0;
-}
-
-.jetpack-simple-payments-product {
- display: flex;
- flex-direction: column;
-}
-
-.jetpack-simple-payments-product-image {
- flex: 0 0 30%;
- margin-bottom: 1.5em;
-}
-
-.jetpack-simple-payments-image {
- box-sizing: border-box;
- min-width: 70px;
- padding-top: 100%;
- position: relative;
-}
-
-/* Higher specificity in order to trump theme's style */
-body .jetpack-simple-payments-wrapper .jetpack-simple-payments-product-image .jetpack-simple-payments-image img.size-full {
- border: 0;
- border-radius: 0;
- height: auto;
- left: 50%;
- margin: 0;
- max-height: 100%;
- max-width: 100%;
- padding: 0;
- position: absolute;
- top: 50%;
- transform: translate(-50%, -50%);
- width: auto;
-}
-
-.jetpack-simple-payments-title p,
-.jetpack-simple-payments-price p {
- font-weight: bold;
-}
-
-.jetpack-simple-payments-purchase-box {
- align-items: flex-start;
- display: flex;
-}
-
-.jetpack-simple-payments-items {
- flex: 0 0 auto;
- margin-right: 10px;
-}
-
-input[type="number"].jetpack-simple-payments-items-number {
- font-size: 16px;
- line-height: 1;
- max-width: 60px;
- padding: 4px 8px;
-}
-
-.jetpack-simple-payments-button iframe {
- margin: 0;
-}
-
-.jetpack-simple-payments-purchase-message {
- background-color: rgba(255, 255, 255, 0.7);
- border: 2px solid #fff;
- border-radius: 2px;
- box-shadow: 0 0 0 1px rgba(200, 215, 225, 0.5), 0 1px 2px #e9eff3;
- display: none;
- margin-bottom: 1.5em;
- min-height: 48px;
- padding: 1em;
- position: relative;
-}
-
-.jetpack-simple-payments-purchase-message:before {
- font-family: dashicons !important;
- font-size: 48px !important;
- line-height: 1 !important;
- position: absolute;
- speak: none;
- top: 50%;
- left: 0;
- transform: translateY(-50%);
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-.jetpack-simple-payments-purchase-message.show {
- display: block;
-}
-
-.jetpack-simple-payments-purchase-message.success:before {
- color: #4ab866;
- content: "\f147";
-}
-
-.jetpack-simple-payments-purchase-message.error:before {
- color: #d94f4f;
- content: "\f335";
-}
-
-/* Higher specificity in order to reset */
-body .jetpack-simple-payments-wrapper .jetpack-simple-payments-purchase-message p {
- color: #222;
- margin: 0 0 0.5em;
- padding: 0 0 0 40px;
-}
-
-body .jetpack-simple-payments-wrapper .jetpack-simple-payments-purchase-message p:last-child {
- margin: 0;
-}
-
-@media screen and (min-width: 400px) {
- .jetpack-simple-payments-product {
- flex-direction: row;
- }
-
- .jetpack-simple-payments-product-image + .jetpack-simple-payments-details {
- flex-basis: 70%;
- padding-left: 1em;
- }
-}
diff --git a/plugins/jetpack/modules/simple-payments/simple-payments.php b/plugins/jetpack/modules/simple-payments/simple-payments.php
deleted file mode 100644
index e1b7f8d7..00000000
--- a/plugins/jetpack/modules/simple-payments/simple-payments.php
+++ /dev/null
@@ -1,683 +0,0 @@
-<?php
-/*
- * Simple Payments lets users embed a PayPal button fully integrated with wpcom to sell products on the site.
- * This is not a proper module yet, because not all the pieces are in place. Until everything is shipped, it can be turned
- * into module that can be enabled/disabled.
-*/
-class Jetpack_Simple_Payments {
- // These have to be under 20 chars because that is CPT limit.
- static $post_type_order = 'jp_pay_order';
- static $post_type_product = 'jp_pay_product';
-
- static $shortcode = 'simple-payment';
-
- static $css_classname_prefix = 'jetpack-simple-payments';
-
- // Increase this number each time there's a change in CSS or JS to bust cache.
- static $version = '0.25';
-
- // Classic singleton pattern:
- private static $instance;
- private function __construct() {}
- static function getInstance() {
- if ( ! self::$instance ) {
- self::$instance = new self();
- self::$instance->register_init_hooks();
- }
- return self::$instance;
- }
-
- private function register_scripts_and_styles() {
- /**
- * Paypal heavily discourages putting that script in your own server:
- * @see https://developer.paypal.com/docs/integration/direct/express-checkout/integration-jsv4/add-paypal-button/
- */
- wp_register_script( 'paypal-checkout-js', 'https://www.paypalobjects.com/api/checkout.js', array(), null, true );
- wp_register_script( 'paypal-express-checkout', plugins_url( '/paypal-express-checkout.js', __FILE__ ),
- array( 'jquery', 'paypal-checkout-js' ), self::$version );
- wp_register_style( 'jetpack-simple-payments', plugins_url( '/simple-payments.css', __FILE__ ), array( 'dashicons' ) );
- }
-
- private function register_init_hooks() {
- add_action( 'init', array( $this, 'init_hook_action' ) );
- add_action( 'jetpack_register_gutenberg_extensions', array( $this, 'register_gutenberg_block' ) );
- add_action( 'rest_api_init', array( $this, 'register_meta_fields_in_rest_api' ) );
- }
-
- private function register_shortcode() {
- add_shortcode( self::$shortcode, array( $this, 'parse_shortcode' ) );
- }
-
- public function init_hook_action() {
- add_filter( 'rest_api_allowed_post_types', array( $this, 'allow_rest_api_types' ) );
- add_filter( 'jetpack_sync_post_meta_whitelist', array( $this, 'allow_sync_post_meta' ) );
- if ( ! is_admin() ) {
- $this->register_scripts_and_styles();
- }
- $this->register_shortcode();
- $this->setup_cpts();
-
- add_filter( 'the_content', array( $this, 'remove_auto_paragraph_from_product_description' ), 0 );
- }
-
- function register_gutenberg_block() {
- if ( $this->is_enabled_jetpack_simple_payments() ) {
- jetpack_register_block( 'jetpack/simple-payments' );
- } else {
- Jetpack_Gutenberg::set_extension_unavailable( 'jetpack/simple-payments', 'missing_plan' );
- }
- }
-
- function remove_auto_paragraph_from_product_description( $content ) {
- if ( get_post_type() === self::$post_type_product ) {
- remove_filter( 'the_content', 'wpautop' );
- }
-
- return $content;
- }
-
- function get_blog_id() {
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- return get_current_blog_id();
- }
-
- return Jetpack_Options::get_option( 'id' );
- }
-
- /**
- * Used to check whether Simple Payments are enabled for given site.
- *
- * @return bool True if Simple Payments are enabled, false otherwise.
- */
- function is_enabled_jetpack_simple_payments() {
- /**
- * Can be used by plugin authors to disable the conflicting output of Simple Payments.
- *
- * @since 6.3.0
- *
- * @param bool True if Simple Payments should be disabled, false otherwise.
- */
- if ( apply_filters( 'jetpack_disable_simple_payments', false ) ) {
- return false;
- }
-
- // For WPCOM sites
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM && function_exists( 'has_any_blog_stickers' ) ) {
- $site_id = $this->get_blog_id();
- return has_any_blog_stickers( array( 'premium-plan', 'business-plan', 'ecommerce-plan' ), $site_id );
- }
-
- // For all Jetpack sites
- return Jetpack::is_active() && Jetpack_Plan::supports( 'simple-payments');
- }
-
- function parse_shortcode( $attrs, $content = false ) {
- if ( empty( $attrs['id'] ) ) {
- return;
- }
- $product = get_post( $attrs['id'] );
- if ( ! $product || is_wp_error( $product ) ) {
- return;
- }
- if ( $product->post_type !== self::$post_type_product || 'publish' !== $product->post_status ) {
- return;
- }
-
- // We allow for overriding the presentation labels
- $data = shortcode_atts( array(
- 'blog_id' => $this->get_blog_id(),
- 'dom_id' => uniqid( self::$css_classname_prefix . '-' . $product->ID . '_', true ),
- 'class' => self::$css_classname_prefix . '-' . $product->ID,
- 'title' => get_the_title( $product ),
- 'description' => $product->post_content,
- 'cta' => get_post_meta( $product->ID, 'spay_cta', true ),
- 'multiple' => get_post_meta( $product->ID, 'spay_multiple', true ) || '0'
- ), $attrs );
-
- $data['price'] = $this->format_price(
- get_post_meta( $product->ID, 'spay_price', true ),
- get_post_meta( $product->ID, 'spay_currency', true )
- );
-
- $data['id'] = $attrs['id'];
-
- if( ! wp_style_is( 'jetpack-simple-payments', 'enqueued' ) ) {
- wp_enqueue_style( 'jetpack-simple-payments' );
- }
-
- if ( ! $this->is_enabled_jetpack_simple_payments() ) {
- return $this->output_admin_warning( $data );
- }
-
- if ( ! wp_script_is( 'paypal-express-checkout', 'enqueued' ) ) {
- wp_enqueue_script( 'paypal-express-checkout' );
- }
-
- wp_add_inline_script( 'paypal-express-checkout', sprintf(
- "try{PaypalExpressCheckout.renderButton( '%d', '%d', '%s', '%d' );}catch(e){}",
- esc_js( $data['blog_id'] ),
- esc_js( $attrs['id'] ),
- esc_js( $data['dom_id'] ),
- esc_js( $data['multiple'] )
- ) );
-
- return $this->output_shortcode( $data );
- }
-
- function output_admin_warning( $data ) {
- if ( ! current_user_can( 'manage_options' ) ) {
- return;
- }
- $css_prefix = self::$css_classname_prefix;
-
- $support_url = ( defined( 'IS_WPCOM' ) && IS_WPCOM )
- ? 'https://support.wordpress.com/simple-payments/'
- : 'https://jetpack.com/support/simple-payment-button/';
-
- return sprintf( '
-<div class="%1$s">
- <div class="%2$s">
- <div class="%3$s">
- <div class="%4$s" id="%5$s">
- <p>%6$s</p>
- <p>%7$s</p>
- </div>
- </div>
- </div>
-</div>
-',
- esc_attr( "{$data['class']} ${css_prefix}-wrapper" ),
- esc_attr( "${css_prefix}-product" ),
- esc_attr( "${css_prefix}-details" ),
- esc_attr( "${css_prefix}-purchase-message show error" ),
- esc_attr( "{$data['dom_id']}-message-container" ),
- sprintf(
- wp_kses(
- __( 'Your plan doesn\'t include Simple Payments. <a href="%s" rel="noopener noreferrer" target="_blank">Learn more and upgrade</a>.', 'jetpack' ),
- array( 'a' => array( 'href' => array(), 'rel' => array(), 'target' => array() ) )
- ),
- esc_url( $support_url )
- ),
- esc_html__( '(Only administrators will see this message.)', 'jetpack' )
- );
- }
-
- function output_shortcode( $data ) {
- $items = '';
- $css_prefix = self::$css_classname_prefix;
-
- if ( $data['multiple'] ) {
- $items = sprintf( '
- <div class="%1$s">
- <input class="%2$s" type="number" value="1" min="1" id="%3$s" />
- </div>
- ',
- esc_attr( "${css_prefix}-items" ),
- esc_attr( "${css_prefix}-items-number" ),
- esc_attr( "{$data['dom_id']}_number" )
- );
- }
- $image = "";
- if( has_post_thumbnail( $data['id'] ) ) {
- $image = sprintf( '<div class="%1$s"><div class="%2$s">%3$s</div></div>',
- esc_attr( "${css_prefix}-product-image" ),
- esc_attr( "${css_prefix}-image" ),
- get_the_post_thumbnail( $data['id'], 'full' )
- );
- }
- return sprintf( '
-<div class="%1$s">
- <div class="%2$s">
- %3$s
- <div class="%4$s">
- <div class="%5$s"><p>%6$s</p></div>
- <div class="%7$s"><p>%8$s</p></div>
- <div class="%9$s"><p>%10$s</p></div>
- <div class="%11$s" id="%12$s"></div>
- <div class="%13$s">
- %14$s
- <div class="%15$s" id="%16$s"></div>
- </div>
- </div>
- </div>
-</div>
-',
- esc_attr( "{$data['class']} ${css_prefix}-wrapper" ),
- esc_attr( "${css_prefix}-product" ),
- $image,
- esc_attr( "${css_prefix}-details" ),
- esc_attr( "${css_prefix}-title" ),
- $data['title'],
- esc_attr( "${css_prefix}-description" ),
- $data['description'],
- esc_attr( "${css_prefix}-price" ),
- esc_html( $data['price'] ),
- esc_attr( "${css_prefix}-purchase-message" ),
- esc_attr( "{$data['dom_id']}-message-container" ),
- esc_attr( "${css_prefix}-purchase-box" ),
- $items,
- esc_attr( "${css_prefix}-button" ),
- esc_attr( "{$data['dom_id']}_button" )
- );
- }
-
- /**
- * Format a price with currency
- *
- * Uses currency-aware formatting to output a formatted price with a simple fallback.
- *
- * Largely inspired by WordPress.com's Store_Price::display_currency
- *
- * @param string $price Price.
- * @param string $currency Currency.
- * @return string Formatted price.
- */
- private function format_price( $price, $currency ) {
- $currency_details = self::get_currency( $currency );
-
- if ( $currency_details ) {
- // Ensure USD displays as 1234.56 even in non-US locales.
- $amount = 'USD' === $currency
- ? number_format( $price, $currency_details['decimal'], '.', ',' )
- : number_format_i18n( $price, $currency_details['decimal'] );
-
- return sprintf(
- $currency_details['format'],
- $currency_details['symbol'],
- $amount
- );
- }
-
- // Fall back to unspecified currency symbol like `¤1,234.05`.
- // @link https://en.wikipedia.org/wiki/Currency_sign_(typography).
- if ( ! $currency ) {
- return '¤' . number_format_i18n( $price, 2 );
- }
-
- return number_format_i18n( $price, 2 ) . ' ' . $currency;
- }
-
- /**
- * Allows custom post types to be used by REST API.
- * @param $post_types
- * @see hook 'rest_api_allowed_post_types'
- * @return array
- */
- function allow_rest_api_types( $post_types ) {
- $post_types[] = self::$post_type_order;
- $post_types[] = self::$post_type_product;
- return $post_types;
- }
-
- function allow_sync_post_meta( $post_meta ) {
- return array_merge( $post_meta, array(
- 'spay_paypal_id',
- 'spay_status',
- 'spay_product_id',
- 'spay_quantity',
- 'spay_price',
- 'spay_customer_email',
- 'spay_currency',
- 'spay_cta',
- 'spay_email',
- 'spay_multiple',
- 'spay_formatted_price',
- ) );
- }
-
- /**
- * Enable Simple payments custom meta values for access through the REST API.
- * Field’s value will be exposed on a .meta key in the endpoint response,
- * and WordPress will handle setting up the callbacks for reading and writing
- * to that meta key.
- *
- * @link https://developer.wordpress.org/rest-api/extending-the-rest-api/modifying-responses/
- */
- public function register_meta_fields_in_rest_api() {
- register_meta( 'post', 'spay_price', array(
- 'description' => esc_html__( 'Simple payments; price.', 'jetpack' ),
- 'object_subtype' => self::$post_type_product,
- 'sanitize_callback' => array( $this, 'sanitize_price' ),
- 'show_in_rest' => true,
- 'single' => true,
- 'type' => 'number',
- ) );
-
- register_meta( 'post', 'spay_currency', array(
- 'description' => esc_html__( 'Simple payments; currency code.', 'jetpack' ),
- 'object_subtype' => self::$post_type_product,
- 'sanitize_callback' => array( $this, 'sanitize_currency' ),
- 'show_in_rest' => true,
- 'single' => true,
- 'type' => 'string',
- ) );
-
- register_meta( 'post', 'spay_cta', array(
- 'description' => esc_html__( 'Simple payments; text with "Buy" or other CTA', 'jetpack' ),
- 'object_subtype' => self::$post_type_product,
- 'sanitize_callback' => 'sanitize_text_field',
- 'show_in_rest' => true,
- 'single' => true,
- 'type' => 'string',
- ) );
-
- register_meta( 'post', 'spay_multiple', array(
- 'description' => esc_html__( 'Simple payments; allow multiple items', 'jetpack' ),
- 'object_subtype' => self::$post_type_product,
- 'sanitize_callback' => 'rest_sanitize_boolean',
- 'show_in_rest' => true,
- 'single' => true,
- 'type' => 'boolean',
- ) );
-
- register_meta( 'post', 'spay_email', array(
- 'description' => esc_html__( 'Simple payments button; paypal email.', 'jetpack' ),
- 'sanitize_callback' => 'sanitize_email',
- 'show_in_rest' => true,
- 'single' => true,
- 'type' => 'string',
- ) );
-
- register_meta( 'post', 'spay_status', array(
- 'description' => esc_html__( 'Simple payments; status.', 'jetpack' ),
- 'object_subtype' => self::$post_type_product,
- 'sanitize_callback' => 'sanitize_text_field',
- 'show_in_rest' => true,
- 'single' => true,
- 'type' => 'string',
- ) );
- }
-
- /**
- * Sanitize three-character ISO-4217 Simple payments currency
- *
- * List has to be in sync with list at the client side:
- * @link https://github.com/Automattic/wp-calypso/blob/6d02ffe73cc073dea7270a22dc30881bff17d8fb/client/lib/simple-payments/constants.js
- *
- * Currencies should be supported by PayPal:
- * @link https://developer.paypal.com/docs/integration/direct/rest/currency-codes/
- */
- public static function sanitize_currency( $currency ) {
- $valid_currencies = array(
- 'USD',
- 'EUR',
- 'AUD',
- 'BRL',
- 'CAD',
- 'CZK',
- 'DKK',
- 'HKD',
- 'HUF',
- 'ILS',
- 'JPY',
- 'MYR',
- 'MXN',
- 'TWD',
- 'NZD',
- 'NOK',
- 'PHP',
- 'PLN',
- 'GBP',
- 'RUB',
- 'SGD',
- 'SEK',
- 'CHF',
- 'THB',
- );
-
- return in_array( $currency, $valid_currencies ) ? $currency : false;
- }
-
- /**
- * Sanitize price:
- *
- * Positive integers and floats
- * Supports two decimal places.
- * Maximum length: 10.
- *
- * See `price` from PayPal docs:
- * @link https://developer.paypal.com/docs/api/orders/v1/#definition-item
- *
- * @param $value
- * @return null|string
- */
- public static function sanitize_price( $price ) {
- return preg_match( '/^[0-9]{0,10}(\.[0-9]{0,2})?$/', $price ) ? $price : false;
- }
-
- /**
- * Sets up the custom post types for the module.
- */
- function setup_cpts() {
-
- /*
- * ORDER data structure. holds:
- * title = customer_name | 4xproduct_name
- * excerpt = customer_name + customer contact info + customer notes from paypal form
- * metadata:
- * spay_paypal_id - paypal id of transaction
- * spay_status
- * spay_product_id - post_id of bought product
- * spay_quantity - quantity of product
- * spay_price - item price at the time of purchase
- * spay_customer_email - customer email
- * ... (WIP)
- */
- $order_capabilities = array(
- 'edit_post' => 'edit_posts',
- 'read_post' => 'read_private_posts',
- 'delete_post' => 'delete_posts',
- 'edit_posts' => 'edit_posts',
- 'edit_others_posts' => 'edit_others_posts',
- 'publish_posts' => 'publish_posts',
- 'read_private_posts' => 'read_private_posts',
- );
- $order_args = array(
- 'label' => esc_html_x( 'Order', 'noun: a quantity of goods or items purchased or sold', 'jetpack' ),
- 'description' => esc_html__( 'Simple Payments orders', 'jetpack' ),
- 'supports' => array( 'custom-fields', 'excerpt' ),
- 'hierarchical' => false,
- 'public' => false,
- 'show_ui' => false,
- 'show_in_menu' => false,
- 'show_in_admin_bar' => false,
- 'show_in_nav_menus' => false,
- 'can_export' => true,
- 'has_archive' => false,
- 'exclude_from_search' => true,
- 'publicly_queryable' => false,
- 'rewrite' => false,
- 'capabilities' => $order_capabilities,
- 'show_in_rest' => true,
- );
- register_post_type( self::$post_type_order, $order_args );
-
- /*
- * PRODUCT data structure. Holds:
- * title - title
- * content - description
- * thumbnail - image
- * metadata:
- * spay_price - price
- * spay_formatted_price
- * spay_currency - currency code
- * spay_cta - text with "Buy" or other CTA
- * spay_email - paypal email
- * spay_multiple - allow for multiple items
- * spay_status - status. { enabled | disabled }
- */
- $product_capabilities = array(
- 'edit_post' => 'edit_posts',
- 'read_post' => 'read_private_posts',
- 'delete_post' => 'delete_posts',
- 'edit_posts' => 'publish_posts',
- 'edit_others_posts' => 'edit_others_posts',
- 'publish_posts' => 'publish_posts',
- 'read_private_posts' => 'read_private_posts',
- );
- $product_args = array(
- 'label' => esc_html__( 'Product', 'jetpack' ),
- 'description' => esc_html__( 'Simple Payments products', 'jetpack' ),
- 'supports' => array( 'title', 'editor','thumbnail', 'custom-fields', 'author' ),
- 'hierarchical' => false,
- 'public' => false,
- 'show_ui' => false,
- 'show_in_menu' => false,
- 'show_in_admin_bar' => false,
- 'show_in_nav_menus' => false,
- 'can_export' => true,
- 'has_archive' => false,
- 'exclude_from_search' => true,
- 'publicly_queryable' => false,
- 'rewrite' => false,
- 'capabilities' => $product_capabilities,
- 'show_in_rest' => true,
- );
- register_post_type( self::$post_type_product, $product_args );
- }
-
- /**
- * Format a price for display
- *
- * Largely taken from WordPress.com Store_Price class
- *
- * The currency array will have the shape:
- * format => string sprintf format with placeholders `%1$s`: Symbol `%2$s`: Price.
- * symbol => string Symbol string
- * desc => string Text description of currency
- * decimal => int Number of decimal places
- *
- * @param string $the_currency The desired currency, e.g. 'USD'.
- * @return ?array Currency object or null if not found.
- */
- private static function get_currency( $the_currency ) {
- $currencies = array(
- 'USD' => array(
- 'format' => '%1$s%2$s', // 1: Symbol 2: currency value
- 'symbol' => '$',
- 'decimal' => 2,
- ),
- 'GBP' => array(
- 'format' => '%1$s%2$s', // 1: Symbol 2: currency value
- 'symbol' => '&#163;',
- 'decimal' => 2,
- ),
- 'JPY' => array(
- 'format' => '%1$s%2$s', // 1: Symbol 2: currency value
- 'symbol' => '&#165;',
- 'decimal' => 0,
- ),
- 'BRL' => array(
- 'format' => '%1$s%2$s', // 1: Symbol 2: currency value
- 'symbol' => 'R$',
- 'decimal' => 2,
- ),
- 'EUR' => array(
- 'format' => '%1$s%2$s', // 1: Symbol 2: currency value
- 'symbol' => '&#8364;',
- 'decimal' => 2,
- ),
- 'NZD' => array(
- 'format' => '%1$s%2$s', // 1: Symbol 2: currency value
- 'symbol' => 'NZ$',
- 'decimal' => 2,
- ),
- 'AUD' => array(
- 'format' => '%1$s%2$s', // 1: Symbol 2: currency value
- 'symbol' => 'A$',
- 'decimal' => 2,
- ),
- 'CAD' => array(
- 'format' => '%1$s%2$s', // 1: Symbol 2: currency value
- 'symbol' => 'C$',
- 'decimal' => 2,
- ),
- 'ILS' => array(
- 'format' => '%2$s %1$s', // 1: Symbol 2: currency value
- 'symbol' => '₪',
- 'decimal' => 2,
- ),
- 'RUB' => array(
- 'format' => '%2$s %1$s', // 1: Symbol 2: currency value
- 'symbol' => '₽',
- 'decimal' => 2,
- ),
- 'MXN' => array(
- 'format' => '%1$s%2$s', // 1: Symbol 2: currency value
- 'symbol' => 'MX$',
- 'decimal' => 2,
- ),
- 'MYR' => array(
- 'format' => '%2$s%1$s', // 1: Symbol 2: currency value
- 'symbol' => 'RM',
- 'decimal' => 2,
- ),
- 'SEK' => array(
- 'format' => '%2$s %1$s', // 1: Symbol 2: currency value
- 'symbol' => 'Skr',
- 'decimal' => 2,
- ),
- 'HUF' => array(
- 'format' => '%2$s %1$s', // 1: Symbol 2: currency value
- 'symbol' => 'Ft',
- 'decimal' => 0, // Decimals are supported by Stripe but not by PayPal.
- ),
- 'CHF' => array(
- 'format' => '%2$s %1$s', // 1: Symbol 2: currency value
- 'symbol' => 'CHF',
- 'decimal' => 2,
- ),
- 'CZK' => array(
- 'format' => '%2$s %1$s', // 1: Symbol 2: currency value
- 'symbol' => 'Kč',
- 'decimal' => 2,
- ),
- 'DKK' => array(
- 'format' => '%2$s %1$s', // 1: Symbol 2: currency value
- 'symbol' => 'Dkr',
- 'decimal' => 2,
- ),
- 'HKD' => array(
- 'format' => '%2$s %1$s', // 1: Symbol 2: currency value
- 'symbol' => 'HK$',
- 'decimal' => 2,
- ),
- 'NOK' => array(
- 'format' => '%2$s %1$s', // 1: Symbol 2: currency value
- 'symbol' => 'Kr',
- 'decimal' => 2,
- ),
- 'PHP' => array(
- 'format' => '%2$s %1$s', // 1: Symbol 2: currency value
- 'symbol' => '₱',
- 'decimal' => 2,
- ),
- 'PLN' => array(
- 'format' => '%2$s %1$s', // 1: Symbol 2: currency value
- 'symbol' => 'PLN',
- 'decimal' => 2,
- ),
- 'SGD' => array(
- 'format' => '%1$s%2$s', // 1: Symbol 2: currency value
- 'symbol' => 'S$',
- 'decimal' => 2,
- ),
- 'TWD' => array(
- 'format' => '%1$s%2$s', // 1: Symbol 2: currency value
- 'symbol' => 'NT$',
- 'decimal' => 0, // Decimals are supported by Stripe but not by PayPal.
- ),
- 'THB' => array(
- 'format' => '%2$s%1$s', // 1: Symbol 2: currency value
- 'symbol' => '฿',
- 'decimal' => 2,
- ),
- );
-
- if ( isset( $currencies[ $the_currency ] ) ) {
- return $currencies[ $the_currency ];
- }
- return null;
- }
-}
-Jetpack_Simple_Payments::getInstance();
diff --git a/plugins/jetpack/modules/site-icon.php b/plugins/jetpack/modules/site-icon.php
deleted file mode 100644
index af374467..00000000
--- a/plugins/jetpack/modules/site-icon.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Deprecated. No longer needed. Site Icons are in Core.
- *
- * @package Jetpack
- */
diff --git a/plugins/jetpack/modules/site-icon/site-icon-functions.php b/plugins/jetpack/modules/site-icon/site-icon-functions.php
deleted file mode 100644
index 7adaf6fa..00000000
--- a/plugins/jetpack/modules/site-icon/site-icon-functions.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-if( ! function_exists( 'jetpack_site_icon_url' ) ) :
- function jetpack_site_icon_url( $blog_id = null, $size = '512', $default = false ) {
- $url = '';
- if( ! is_int( $blog_id ) )
- $blog_id = get_current_blog_id();
- if( function_exists( 'get_blog_option' ) ) {
- $site_icon_id = get_blog_option( $blog_id, 'jetpack_site_icon_id' );
- } else {
- $site_icon_id = Jetpack_Options::get_option( 'site_icon_id' );
- }
- if( ! $site_icon_id ) {
- if( $default === false && defined( 'SITE_ICON_DEFAULT_URL' ) )
- $url = SITE_ICON_DEFAULT_URL;
- else
- $url = $default;
- } else {
- if( $size >= 512 ) {
- $size_data = 'full';
- } else {
- $size_data = array( $size, $size );
- }
- $url_data = wp_get_attachment_image_src( $site_icon_id, $size_data );
- $url = $url_data[0];
- }
- return $url;
- }
-endif;
diff --git a/plugins/jetpack/modules/sitemaps.php b/plugins/jetpack/modules/sitemaps.php
deleted file mode 100644
index dfd59719..00000000
--- a/plugins/jetpack/modules/sitemaps.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-/**
- * Module Name: Sitemaps
- * Module Description: Make it easy for search engines to find your site.
- * Sort Order: 13
- * First Introduced: 3.9
- * Requires Connection: No
- * Auto Activate: Public
- * Module Tags: Recommended, Traffic
- * Feature: Recommended
- * Additional Search Queries: sitemap, traffic, search, site map, seo
- *
- * @package Jetpack
- */
-
-/**
- * Disable direct access and execution.
- */
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-if ( '1' == get_option( 'blog_public' ) ) { // loose comparison okay.
- include_once 'sitemaps/sitemaps.php';
-}
-
-add_action( 'jetpack_activate_module_sitemaps', 'jetpack_sitemap_on_activate' );
-
-/**
- * Run when Sitemaps module is activated.
- *
- * @since 4.8.0
- */
-function jetpack_sitemap_on_activate() {
- wp_clear_scheduled_hook( 'jp_sitemap_cron_hook' );
- require_once dirname( __FILE__ ) . '/sitemaps/sitemap-constants.php';
- require_once dirname( __FILE__ ) . '/sitemaps/sitemap-buffer.php';
- require_once dirname( __FILE__ ) . '/sitemaps/sitemap-stylist.php';
- require_once dirname( __FILE__ ) . '/sitemaps/sitemap-librarian.php';
- require_once dirname( __FILE__ ) . '/sitemaps/sitemap-finder.php';
- require_once dirname( __FILE__ ) . '/sitemaps/sitemap-builder.php';
-}
diff --git a/plugins/jetpack/modules/sitemaps/sitemap-buffer-fallback.php b/plugins/jetpack/modules/sitemaps/sitemap-buffer-fallback.php
deleted file mode 100644
index 46758766..00000000
--- a/plugins/jetpack/modules/sitemaps/sitemap-buffer-fallback.php
+++ /dev/null
@@ -1,146 +0,0 @@
-<?php
-/**
- * The fallback buffer for users with no XML support.
- *
- * @since 5.3.0
- * @package Jetpack
- */
-
-/**
- * A buffer for constructing master sitemap xml files.
- *
- * @since 5.1.0
- */
-abstract class Jetpack_Sitemap_Buffer_Fallback extends Jetpack_Sitemap_Buffer {
-
- /**
- * The buffer contents.
- *
- * @access protected
- * @since 5.3.0
- * @var string The buffer contents.
- */
- protected $buffer;
-
- public function __construct( $item_limit, $byte_limit, $time = '1970-01-01 00:00:00' ) {
- $this->is_full_flag = false;
- $this->is_empty_flag = true;
- $this->timestamp = $time;
-
- $this->finder = new Jetpack_Sitemap_Finder();
-
- $this->item_capacity = max( 1, intval( $item_limit ) );
- $this->byte_capacity = max( 1, intval( $byte_limit ) ) - strlen( $this->contents() );
- }
-
- /**
- * Append an item to the buffer, if there is room for it,
- * and set is_empty_flag to false. If there is no room,
- * we set is_full_flag to true. If $item is null,
- * don't do anything and report success.
- *
- * @since 5.3.0
- *
- * @param array $array The item to be added.
- *
- * @return bool True if the append succeeded, False if not.
- */
- public function append( $array ) {
- if ( is_null( $array ) ) {
- return true;
- }
-
- if ( $this->is_full_flag ) {
- return false;
- }
-
- if ( 0 >= $this->item_capacity || 0 >= $this->byte_capacity ) {
- $this->is_full_flag = true;
- return false;
- } else {
- $this->item_capacity -= 1;
- $added_string = $this->array_to_xml_string( $array );
- $this->buffer .= $added_string;
- $this->is_empty_flag = false;
-
- mbstring_binary_safe_encoding(); // So we can safely use strlen().
- $this->byte_capacity -= strlen( $added_string );
- reset_mbstring_encoding();
-
- return true;
- }
- }
-
- /**
- * Detect whether the buffer is empty.
- *
- * @since 5.3.0
- *
- * @return bool True if the buffer is empty, false otherwise.
- */
- public function is_empty() {
- return $this->is_empty_flag;
- }
-
- /**
- * Retrieve the contents of the buffer.
- *
- * @since 5.3.0
- *
- * @return string The contents of the buffer (with the footer included).
- */
- public function contents() {
- $root = $this->get_root_element();
-
- return '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL . $root[0] . $this->buffer . $root[1] . PHP_EOL;
- }
-
- /**
- * Legacy implementation of array to XML conversion without using DOMDocument.
- *
- * @param Array $array
- * @return String $result
- */
- public function array_to_xml_string( $array, $parent = null, $root = null ) {
- $string = '';
-
- foreach ( $array as $key => $value ) {
- // Only allow a-z, A-Z, colon, underscore, and hyphen.
- $tag = preg_replace( '/[^a-zA-Z:_-]/', '_', $key );
-
- if ( is_array( $value ) ) {
- $string .= "<$tag>";
- $string .= $this->array_to_xml_string( $value );
- $string .= "</$tag>";
- } elseif ( is_null( $value ) ) {
- $string .= "<$tag />";
- } else {
- $string .= "<$tag>" . htmlspecialchars( $value ) . "</$tag>";
- }
- }
-
- return $string;
- }
-
- /**
- * Render an associative array of XML attribute key/value pairs.
- *
- * @access public
- * @since 5.3.0
- *
- * @param array $array Key/value array of attributes.
- *
- * @return string The rendered attribute string.
- */
- public static function array_to_xml_attr_string( $array ) {
- $string = '';
-
- foreach ( $array as $key => $value ) {
- $key = preg_replace( '/[^a-zA-Z:_-]/', '_', $key );
- $string .= ' ' . $key . '="' . esc_attr( $value ) . '"';
- }
-
- return $string;
- }
-
-}
diff --git a/plugins/jetpack/modules/sitemaps/sitemap-buffer-image-fallback.php b/plugins/jetpack/modules/sitemaps/sitemap-buffer-image-fallback.php
deleted file mode 100644
index 33628711..00000000
--- a/plugins/jetpack/modules/sitemaps/sitemap-buffer-image-fallback.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-/**
- * Sitemaps (per the protocol) are essentially lists of XML fragments;
- * lists which are subject to size constraints. The Jetpack_Sitemap_Buffer_Image
- * extends the Jetpack_Sitemap_Buffer class to represent the single image sitemap
- * buffer.
- *
- * @since 5.3.0
- * @package Jetpack
- */
-
-/**
- * A buffer for constructing sitemap image xml files for users that have no libxml support.
- *
- * @since 5.3.0
- */
-class Jetpack_Sitemap_Buffer_Image extends Jetpack_Sitemap_Buffer_Fallback {
-
- protected function get_root_element() {
- if ( ! isset( $this->root ) ) {
-
- /**
- * Filter the XML namespaces included in image sitemaps.
- *
- * @module sitemaps
- *
- * @since 4.8.0
- *
- * @param array $namespaces Associative array with namespaces and namespace URIs.
- */
- $namespaces = apply_filters(
- 'jetpack_sitemap_image_ns',
- array(
- 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
- 'xsi:schemaLocation' => 'http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd',
- 'xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9',
- 'xmlns:image' => 'http://www.google.com/schemas/sitemap-image/1.1',
- )
- );
-
- $sitemap_xsl_url = $this->finder->construct_sitemap_url( 'sitemap.xsl' );
- $jetpack_version = JETPACK__VERSION;
-
- $this->root = array(
- "<!-- generator='jetpack-{$jetpack_version}' -->" . PHP_EOL
- . "<?xml-stylesheet type='text/xsl' href='{$sitemap_xsl_url}'?>" . PHP_EOL
- . '<urlset ' . $this->array_to_xml_attr_string( $namespaces ) . '>' . PHP_EOL,
- '</urlset>',
- );
-
- $this->byte_capacity -= strlen( join( '', $this->root ) );
- }
-
- return $this->root;
- }
-}
diff --git a/plugins/jetpack/modules/sitemaps/sitemap-buffer-image.php b/plugins/jetpack/modules/sitemaps/sitemap-buffer-image.php
deleted file mode 100644
index e452fcbf..00000000
--- a/plugins/jetpack/modules/sitemaps/sitemap-buffer-image.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-/**
- * Sitemaps (per the protocol) are essentially lists of XML fragments;
- * lists which are subject to size constraints. The Jetpack_Sitemap_Buffer_Image
- * extends the Jetpack_Sitemap_Buffer class to represent the single image sitemap
- * buffer.
- *
- * @since 5.3.0
- * @package Jetpack
- */
-
-/**
- * A buffer for constructing sitemap image xml files.
- *
- * @since 5.3.0
- */
-class Jetpack_Sitemap_Buffer_Image extends Jetpack_Sitemap_Buffer {
-
- public function __construct( $item_limit, $byte_limit, $time = '1970-01-01 00:00:00' ) {
- parent::__construct( $item_limit, $byte_limit, $time );
-
- $this->doc->appendChild(
- $this->doc->createComment( "generator='jetpack-" . JETPACK__VERSION . "'" )
- );
-
- $this->doc->appendChild(
- $this->doc->createProcessingInstruction(
- 'xml-stylesheet',
- 'type="text/xsl" href="' . $this->finder->construct_sitemap_url( 'image-sitemap.xsl' ) . '"'
- )
- );
- }
-
- protected function get_root_element() {
- if ( ! isset( $this->root ) ) {
-
- /**
- * Filter the XML namespaces included in image sitemaps.
- *
- * @module sitemaps
- *
- * @since 4.8.0
- *
- * @param array $namespaces Associative array with namespaces and namespace URIs.
- */
- $namespaces = apply_filters(
- 'jetpack_sitemap_image_ns',
- array(
- 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
- 'xsi:schemaLocation' => 'http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd',
- 'xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9',
- 'xmlns:image' => 'http://www.google.com/schemas/sitemap-image/1.1',
- )
- );
-
- $this->root = $this->doc->createElement( 'urlset' );
-
- foreach ( $namespaces as $name => $value ) {
- $this->root->setAttribute( $name, $value );
- }
-
- $this->doc->appendChild( $this->root );
- $this->byte_capacity -= strlen( $this->doc->saveXML( $this->root ) );
- }
-
- return $this->root;
- }
-}
diff --git a/plugins/jetpack/modules/sitemaps/sitemap-buffer-master-fallback.php b/plugins/jetpack/modules/sitemaps/sitemap-buffer-master-fallback.php
deleted file mode 100644
index b63c5328..00000000
--- a/plugins/jetpack/modules/sitemaps/sitemap-buffer-master-fallback.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-/**
- * Sitemaps (per the protocol) are essentially lists of XML fragments;
- * lists which are subject to size constraints. The Jetpack_Sitemap_Buffer_Master
- * extends the Jetpack_Sitemap_Buffer class to represent the master sitemap
- * buffer.
- *
- * @since 5.3.0
- * @package Jetpack
- */
-
-/**
- * A buffer for constructing master sitemap xml files for users without libxml support.
- *
- * @since 5.3.0
- */
-class Jetpack_Sitemap_Buffer_Master extends Jetpack_Sitemap_Buffer_Fallback {
-
- protected function get_root_element() {
-
- if ( ! isset( $this->root ) ) {
-
- $sitemap_index_xsl_url = $this->finder->construct_sitemap_url( 'sitemap-index.xsl' );
- $jetpack_version = JETPACK__VERSION;
-
- $this->root = array(
- "<!-- generator='jetpack-{$jetpack_version}' -->" . PHP_EOL
- . "<?xml-stylesheet type='text/xsl' href='{$sitemap_index_xsl_url}'?>" . PHP_EOL
- . "<sitemapindex xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>" . PHP_EOL,
- '</sitemapindex>',
- );
-
- $this->byte_capacity -= strlen( join( '', $this->root ) );
- }
-
- return $this->root;
- }
-}
diff --git a/plugins/jetpack/modules/sitemaps/sitemap-buffer-master.php b/plugins/jetpack/modules/sitemaps/sitemap-buffer-master.php
deleted file mode 100644
index fc6be602..00000000
--- a/plugins/jetpack/modules/sitemaps/sitemap-buffer-master.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/**
- * Sitemaps (per the protocol) are essentially lists of XML fragments;
- * lists which are subject to size constraints. The Jetpack_Sitemap_Buffer_Master
- * extends the Jetpack_Sitemap_Buffer class to represent the master sitemap
- * buffer.
- *
- * @since 5.3.0
- * @package Jetpack
- */
-
-/**
- * A buffer for constructing master sitemap xml files.
- *
- * @since 5.3.0
- */
-class Jetpack_Sitemap_Buffer_Master extends Jetpack_Sitemap_Buffer {
-
- public function __construct( $item_limit, $byte_limit, $time = '1970-01-01 00:00:00' ) {
- parent::__construct( $item_limit, $byte_limit, $time );
-
- $this->doc->appendChild(
- $this->doc->createComment( "generator='jetpack-" . JETPACK__VERSION . "'" )
- );
-
- $this->doc->appendChild(
- $this->doc->createProcessingInstruction(
- 'xml-stylesheet',
- 'type="text/xsl" href="' . $this->finder->construct_sitemap_url( 'sitemap-index.xsl' ) . '"'
- )
- );
- }
-
- protected function get_root_element() {
- if ( ! isset( $this->root ) ) {
- $this->root = $this->doc->createElement( 'sitemapindex' );
- $this->root->setAttribute( 'xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9' );
- $this->doc->appendChild( $this->root );
- $this->byte_capacity -= strlen( $this->doc->saveXML( $this->root ) );
- }
-
- return $this->root;
- }
-}
diff --git a/plugins/jetpack/modules/sitemaps/sitemap-buffer-news-fallback.php b/plugins/jetpack/modules/sitemaps/sitemap-buffer-news-fallback.php
deleted file mode 100644
index 05d4c631..00000000
--- a/plugins/jetpack/modules/sitemaps/sitemap-buffer-news-fallback.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-/**
- * Sitemaps (per the protocol) are essentially lists of XML fragments;
- * lists which are subject to size constraints. The Jetpack_Sitemap_Buffer_News
- * extends the Jetpack_Sitemap_Buffer class to represent the single news sitemap
- * buffer.
- *
- * @since 5.3.0
- * @package Jetpack
- */
-
-/**
- * A buffer for constructing sitemap image xml files for users without libxml support.
- *
- * @since 5.3.0
- */
-class Jetpack_Sitemap_Buffer_News extends Jetpack_Sitemap_Buffer_Fallback {
-
- protected function get_root_element() {
- if ( ! isset( $this->root ) ) {
-
- /**
- * Filter the attribute value pairs used for namespace and namespace URI mappings.
- *
- * @module sitemaps
- *
- * @since 4.8.0
- *
- * @param array $namespaces Associative array with namespaces and namespace URIs.
- */
- $namespaces = apply_filters(
- 'jetpack_sitemap_news_ns',
- array(
- 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
- 'xsi:schemaLocation' => 'http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd',
- 'xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9',
- 'xmlns:news' => 'http://www.google.com/schemas/sitemap-news/0.9',
- )
- );
-
- $jetpack_version = JETPACK__VERSION;
- $news_sitemap_xsl_url = $this->finder->construct_sitemap_url( 'news-sitemap.xsl' );
-
- $this->root = array(
- "<!-- generator='jetpack-{$jetpack_version}' -->" . PHP_EOL
- . "<?xml-stylesheet type='text/xsl' href='{$news_sitemap_xsl_url}'?>" . PHP_EOL
- . '<urlset ' . $this->array_to_xml_attr_string( $namespaces ) . '>',
- '</urlset>',
- );
-
- $this->byte_capacity -= strlen( join( '', $this->root ) );
- }
-
- return $this->root;
- }
-}
diff --git a/plugins/jetpack/modules/sitemaps/sitemap-buffer-news.php b/plugins/jetpack/modules/sitemaps/sitemap-buffer-news.php
deleted file mode 100644
index 0e5b0327..00000000
--- a/plugins/jetpack/modules/sitemaps/sitemap-buffer-news.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-/**
- * Sitemaps (per the protocol) are essentially lists of XML fragments;
- * lists which are subject to size constraints. The Jetpack_Sitemap_Buffer_News
- * extends the Jetpack_Sitemap_Buffer class to represent the single news sitemap
- * buffer.
- *
- * @since 5.3.0
- * @package Jetpack
- */
-
-/**
- * A buffer for constructing sitemap image xml files.
- *
- * @since 5.3.0
- */
-class Jetpack_Sitemap_Buffer_News extends Jetpack_Sitemap_Buffer {
-
- public function __construct( $item_limit, $byte_limit, $time = '1970-01-01 00:00:00' ) {
- parent::__construct( $item_limit, $byte_limit, $time );
-
- $this->doc->appendChild(
- $this->doc->createComment( "generator='jetpack-" . JETPACK__VERSION . "'" )
- );
-
- $this->doc->appendChild(
- $this->doc->createProcessingInstruction(
- 'xml-stylesheet',
- 'type="text/xsl" href="' . $this->finder->construct_sitemap_url( 'news-sitemap.xsl' ) . '"'
- )
- );
- }
-
- protected function get_root_element() {
- if ( ! isset( $this->root ) ) {
-
- /**
- * Filter the attribute value pairs used for namespace and namespace URI mappings.
- *
- * @module sitemaps
- *
- * @since 4.8.0
- *
- * @param array $namespaces Associative array with namespaces and namespace URIs.
- */
- $namespaces = apply_filters(
- 'jetpack_sitemap_news_ns',
- array(
- 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
- 'xsi:schemaLocation' => 'http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd',
- 'xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9',
- 'xmlns:news' => 'http://www.google.com/schemas/sitemap-news/0.9',
- )
- );
-
- $this->root = $this->doc->createElement( 'urlset' );
-
- foreach ( $namespaces as $name => $value ) {
- $this->root->setAttribute( $name, $value );
- }
-
- $this->doc->appendChild( $this->root );
- $this->byte_capacity -= strlen( $this->doc->saveXML( $this->root ) );
- }
-
- return $this->root;
- }
-}
diff --git a/plugins/jetpack/modules/sitemaps/sitemap-buffer-page-fallback.php b/plugins/jetpack/modules/sitemaps/sitemap-buffer-page-fallback.php
deleted file mode 100644
index 7cc67af8..00000000
--- a/plugins/jetpack/modules/sitemaps/sitemap-buffer-page-fallback.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-/**
- * Sitemaps (per the protocol) are essentially lists of XML fragments;
- * lists which are subject to size constraints. The Jetpack_Sitemap_Buffer_Page
- * extends the Jetpack_Sitemap_Buffer class to represent the single page sitemap
- * buffer.
- *
- * @since 5.3.0
- * @package Jetpack
- */
-
-/**
- * A buffer for constructing sitemap page xml files for users with no libxml support.
- *
- * @since 5.3.0
- */
-class Jetpack_Sitemap_Buffer_Page extends Jetpack_Sitemap_Buffer_Fallback {
-
- protected function get_root_element() {
- if ( ! isset( $this->root ) ) {
-
- /**
- * Filter the attribute value pairs used for namespace and namespace URI mappings.
- *
- * @module sitemaps
- *
- * @since 3.9.0
- *
- * @param array $namespaces Associative array with namespaces and namespace URIs.
- */
- $namespaces = apply_filters(
- 'jetpack_sitemap_ns',
- array(
- 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
- 'xsi:schemaLocation' => 'http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd',
- 'xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9',
- )
- );
-
- $jetpack_version = JETPACK__VERSION;
- $sitemap_xsl_url = $this->finder->construct_sitemap_url( 'sitemap.xsl' );
-
- $this->root = array(
- "<!-- generator='jetpack-{$jetpack_version}' -->" . PHP_EOL
- . "<?xml-stylesheet type='text/xsl' href='{$sitemap_xsl_url}'?>" . PHP_EOL
- . '<urlset ' . $this->array_to_xml_attr_string( $namespaces ) . '>',
- '</urlset>',
- );
-
- $this->byte_capacity -= strlen( join( '', $this->root ) );
- }
-
- return $this->root;
- }
-}
diff --git a/plugins/jetpack/modules/sitemaps/sitemap-buffer-page.php b/plugins/jetpack/modules/sitemaps/sitemap-buffer-page.php
deleted file mode 100644
index d6885900..00000000
--- a/plugins/jetpack/modules/sitemaps/sitemap-buffer-page.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-/**
- * Sitemaps (per the protocol) are essentially lists of XML fragments;
- * lists which are subject to size constraints. The Jetpack_Sitemap_Buffer_Page
- * extends the Jetpack_Sitemap_Buffer class to represent the single page sitemap
- * buffer.
- *
- * @since 5.3.0
- * @package Jetpack
- */
-
-/**
- * A buffer for constructing sitemap page xml files.
- *
- * @since 5.3.0
- */
-class Jetpack_Sitemap_Buffer_Page extends Jetpack_Sitemap_Buffer {
-
- public function __construct( $item_limit, $byte_limit, $time = '1970-01-01 00:00:00' ) {
- parent::__construct( $item_limit, $byte_limit, $time );
-
- $this->doc->appendChild(
- $this->doc->createComment( "generator='jetpack-" . JETPACK__VERSION . "'" )
- );
-
- $this->doc->appendChild(
- $this->doc->createProcessingInstruction(
- 'xml-stylesheet',
- 'type="text/xsl" href="' . $this->finder->construct_sitemap_url( 'sitemap.xsl' ) . '"'
- )
- );
- }
-
- protected function get_root_element() {
- if ( ! isset( $this->root ) ) {
-
- /**
- * Filter the attribute value pairs used for namespace and namespace URI mappings.
- *
- * @module sitemaps
- *
- * @since 3.9.0
- *
- * @param array $namespaces Associative array with namespaces and namespace URIs.
- */
- $namespaces = apply_filters(
- 'jetpack_sitemap_ns',
- array(
- 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
- 'xsi:schemaLocation' => 'http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd',
- 'xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9',
- )
- );
-
- $this->root = $this->doc->createElement( 'urlset' );
-
- foreach ( $namespaces as $name => $value ) {
- $this->root->setAttribute( $name, $value );
- }
-
- $this->doc->appendChild( $this->root );
- $this->byte_capacity -= strlen( $this->doc->saveXML( $this->root ) );
- }
-
- return $this->root;
- }
-}
diff --git a/plugins/jetpack/modules/sitemaps/sitemap-buffer-video-fallback.php b/plugins/jetpack/modules/sitemaps/sitemap-buffer-video-fallback.php
deleted file mode 100644
index 5efe8247..00000000
--- a/plugins/jetpack/modules/sitemaps/sitemap-buffer-video-fallback.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-/**
- * Sitemaps (per the protocol) are essentially lists of XML fragments;
- * lists which are subject to size constraints. The Jetpack_Sitemap_Buffer_Video
- * extends the Jetpack_Sitemap_Buffer class to represent the single video sitemap
- * buffer.
- *
- * @since 5.3.0
- * @package Jetpack
- */
-
-/**
- * A buffer for constructing sitemap video xml files for users without libxml support.
- *
- * @since 5.3.0
- */
-class Jetpack_Sitemap_Buffer_Video extends Jetpack_Sitemap_Buffer_Fallback {
-
- protected function get_root_element() {
- if ( ! isset( $this->root ) ) {
-
- /**
- * Filter the XML namespaces included in video sitemaps.
- *
- * @module sitemaps
- *
- * @since 4.8.0
- *
- * @param array $namespaces Associative array with namespaces and namespace URIs.
- */
- $namespaces = apply_filters(
- 'jetpack_sitemap_video_ns',
- array(
- 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
- 'xsi:schemaLocation' => 'http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd',
- 'xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9',
- 'xmlns:video' => 'http://www.google.com/schemas/sitemap-video/1.1',
- )
- );
-
- $video_sitemap_xsl_url = $this->finder->construct_sitemap_url( 'video-sitemap.xsl' );
- $jetpack_version = JETPACK__VERSION;
-
- $this->root = array(
- "<!-- generator='jetpack-{$jetpack_version}' -->" . PHP_EOL
- . "<?xml-stylesheet type='text/xsl' href='{$video_sitemap_xsl_url}'?>" . PHP_EOL
- . '<urlset ' . $this->array_to_xml_attr_string( $namespaces ) . '>',
- '</urlset>',
- );
-
- $this->byte_capacity -= strlen( join( '', $this->root ) );
- }
-
- return $this->root;
- }
-}
diff --git a/plugins/jetpack/modules/sitemaps/sitemap-buffer-video.php b/plugins/jetpack/modules/sitemaps/sitemap-buffer-video.php
deleted file mode 100644
index c6faff36..00000000
--- a/plugins/jetpack/modules/sitemaps/sitemap-buffer-video.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-/**
- * Sitemaps (per the protocol) are essentially lists of XML fragments;
- * lists which are subject to size constraints. The Jetpack_Sitemap_Buffer_Video
- * extends the Jetpack_Sitemap_Buffer class to represent the single video sitemap
- * buffer.
- *
- * @since 5.3.0
- * @package Jetpack
- */
-
-/**
- * A buffer for constructing sitemap video xml files.
- *
- * @since 5.3.0
- */
-class Jetpack_Sitemap_Buffer_Video extends Jetpack_Sitemap_Buffer {
-
- public function __construct( $item_limit, $byte_limit, $time = '1970-01-01 00:00:00' ) {
- parent::__construct( $item_limit, $byte_limit, $time );
-
- $this->doc->appendChild(
- $this->doc->createComment( "generator='jetpack-" . JETPACK__VERSION . "'" )
- );
-
- $this->doc->appendChild(
- $this->doc->createProcessingInstruction(
- 'xml-stylesheet',
- 'type="text/xsl" href="' . $this->finder->construct_sitemap_url( 'video-sitemap.xsl' ) . '"'
- )
- );
- }
-
- protected function get_root_element() {
- if ( ! isset( $this->root ) ) {
-
- /**
- * Filter the XML namespaces included in video sitemaps.
- *
- * @module sitemaps
- *
- * @since 4.8.0
- *
- * @param array $namespaces Associative array with namespaces and namespace URIs.
- */
- $namespaces = apply_filters(
- 'jetpack_sitemap_video_ns',
- array(
- 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
- 'xsi:schemaLocation' => 'http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd',
- 'xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9',
- 'xmlns:video' => 'http://www.google.com/schemas/sitemap-video/1.1',
- )
- );
-
- $this->root = $this->doc->createElement( 'urlset' );
-
- foreach ( $namespaces as $name => $value ) {
- $this->root->setAttribute( $name, $value );
- }
-
- $this->doc->appendChild( $this->root );
- $this->byte_capacity -= strlen( $this->doc->saveXML( $this->root ) );
- }
-
- return $this->root;
- }
-}
diff --git a/plugins/jetpack/modules/sitemaps/sitemap-buffer.php b/plugins/jetpack/modules/sitemaps/sitemap-buffer.php
deleted file mode 100644
index 98751664..00000000
--- a/plugins/jetpack/modules/sitemaps/sitemap-buffer.php
+++ /dev/null
@@ -1,325 +0,0 @@
-<?php
-/**
- * Sitemaps (per the protocol) are essentially lists of XML fragments;
- * lists which are subject to size constraints. The Jetpack_Sitemap_Buffer
- * class abstracts the details of constructing these lists while
- * maintaining the constraints.
- *
- * @since 4.8.0
- * @package Jetpack
- */
-
-/**
- * A buffer for constructing sitemap xml files.
- *
- * Models a list of strings such that
- *
- * 1. the list must have a bounded number of entries,
- * 2. the concatenation of the strings must have bounded
- * length (including some header and footer strings), and
- * 3. each item has a timestamp, and we need to keep track
- * of the most recent timestamp of the items in the list.
- *
- * @since 4.8.0
- */
-abstract class Jetpack_Sitemap_Buffer {
-
- /**
- * Largest number of items the buffer can hold.
- *
- * @access protected
- * @since 4.8.0
- * @var int $item_capacity The item capacity.
- */
- protected $item_capacity;
-
- /**
- * Largest number of bytes the buffer can hold.
- *
- * @access protected
- * @since 4.8.0
- * @var int $byte_capacity The byte capacity.
- */
- protected $byte_capacity;
-
- /**
- * Flag which detects when the buffer is full.
- *
- * @access protected
- * @since 4.8.0
- * @var bool $is_full_flag The flag value. This flag is set to false on construction and only flipped to true if we've tried to add something and failed.
- */
- protected $is_full_flag;
-
- /**
- * Flag which detects when the buffer is empty.
- *
- * @access protected
- * @since 4.8.0
- * @var bool $is_empty_flag The flag value. This flag is set to true on construction and only flipped to false if we've tried to add something and succeeded.
- */
- protected $is_empty_flag;
-
- /**
- * The most recent timestamp seen by the buffer.
- *
- * @access protected
- * @since 4.8.0
- * @var string $timestamp Must be in 'YYYY-MM-DD hh:mm:ss' format.
- */
- protected $timestamp;
-
- /**
- * The DOM document object that is currently being used to construct the XML doc.
- *
- * @access protected
- * @since 5.3.0
- * @var DOMDocument $doc
- */
- protected $doc = null;
-
- /**
- * The root DOM element object that holds everything inside. Do not use directly, call
- * the get_root_element getter method instead.
- *
- * @access protected
- * @since 5.3.0
- * @var DOMElement $doc
- */
- protected $root = null;
-
- /**
- * Helper class to construct sitemap paths.
- *
- * @since 5.3.0
- * @protected
- * @var Jetpack_Sitemap_Finder
- */
- protected $finder;
-
- /**
- * Construct a new Jetpack_Sitemap_Buffer.
- *
- * @since 4.8.0
- *
- * @param int $item_limit The maximum size of the buffer in items.
- * @param int $byte_limit The maximum size of the buffer in bytes.
- * @param string $time The initial datetime of the buffer. Must be in 'YYYY-MM-DD hh:mm:ss' format.
- */
- public function __construct( $item_limit, $byte_limit, $time ) {
- $this->is_full_flag = false;
- $this->timestamp = $time;
-
- $this->finder = new Jetpack_Sitemap_Finder();
- $this->doc = new DOMDocument( '1.0', 'UTF-8' );
-
- $this->item_capacity = max( 1, intval( $item_limit ) );
- $this->byte_capacity = max( 1, intval( $byte_limit ) ) - strlen( $this->doc->saveXML() );
- }
-
- /**
- * Returns a DOM element that contains all sitemap elements.
- *
- * @access protected
- * @since 5.3.0
- * @return DOMElement $root
- */
- abstract protected function get_root_element();
-
- /**
- * Append an item to the buffer, if there is room for it,
- * and set is_empty_flag to false. If there is no room,
- * we set is_full_flag to true. If $item is null,
- * don't do anything and report success.
- *
- * @since 4.8.0
- * @deprecated 5.3.0 Use Jetpack_Sitemap_Buffer::append.
- *
- * @param string $item The item to be added.
- */
- public function try_to_add_item( $item ) {
- _deprecated_function(
- 'Jetpack_Sitemap_Buffer::try_to_add_item',
- '5.3.0',
- 'Jetpack_Sitemap_Buffer::append'
- );
- $this->append( $item );
- }
-
- /**
- * Append an item to the buffer, if there is room for it,
- * and set is_empty_flag to false. If there is no room,
- * we set is_full_flag to true. If $item is null,
- * don't do anything and report success.
- *
- * @since 5.3.0
- *
- * @param array $array The item to be added.
- *
- * @return bool True if the append succeeded, False if not.
- */
- public function append( $array ) {
- if ( is_null( $array ) ) {
- return true;
- }
-
- if ( $this->is_full_flag ) {
- return false;
- }
-
- if ( 0 >= $this->item_capacity || 0 >= $this->byte_capacity ) {
- $this->is_full_flag = true;
- return false;
- } else {
- $this->item_capacity -= 1;
- $added_element = $this->array_to_xml_string( $array, $this->get_root_element(), $this->doc );
-
- $this->byte_capacity -= strlen( $this->doc->saveXML( $added_element ) );
-
- return true;
- }
- }
-
- /**
- * Retrieve the contents of the buffer.
- *
- * @since 4.8.0
- *
- * @return string The contents of the buffer (with the footer included).
- */
- public function contents() {
- if ( $this->is_empty() ) {
- // The sitemap should have at least the root element added to the DOM.
- $this->get_root_element();
- }
- return $this->doc->saveXML();
- }
-
- /**
- * Retrieve the document object.
- *
- * @since 5.3.0
- * @return DOMDocument $doc
- */
- public function get_document() {
- return $this->doc;
- }
-
- /**
- * Detect whether the buffer is full.
- *
- * @since 4.8.0
- *
- * @return bool True if the buffer is full, false otherwise.
- */
- public function is_full() {
- return $this->is_full_flag;
- }
-
- /**
- * Detect whether the buffer is empty.
- *
- * @since 4.8.0
- *
- * @return bool True if the buffer is empty, false otherwise.
- */
- public function is_empty() {
- return (
- ! isset( $this->root )
- || ! $this->root->hasChildNodes()
- );
- }
-
- /**
- * Update the timestamp of the buffer.
- *
- * @since 4.8.0
- *
- * @param string $new_time A datetime string in 'YYYY-MM-DD hh:mm:ss' format.
- */
- public function view_time( $new_time ) {
- $this->timestamp = max( $this->timestamp, $new_time );
- }
-
- /**
- * Retrieve the timestamp of the buffer.
- *
- * @since 4.8.0
- *
- * @return string A datetime string in 'YYYY-MM-DD hh:mm:ss' format.
- */
- public function last_modified() {
- return $this->timestamp;
- }
-
- /**
- * Render an associative array as an XML string. This is needed because
- * SimpleXMLElement only handles valid XML, but we sometimes want to
- * pass around (possibly invalid) fragments. Note that 'null' values make
- * a tag self-closing; this is only sometimes correct (depending on the
- * version of HTML/XML); see the list of 'void tags'.
- *
- * Example:
- *
- * array(
- * 'html' => array( |<html xmlns="foo">
- * 'head' => array( | <head>
- * 'title' => 'Woo!', | <title>Woo!</title>
- * ), | </head>
- * 'body' => array( ==> | <body>
- * 'h2' => 'Some thing', | <h2>Some thing</h2>
- * 'p' => 'it's all up ons', | <p>it's all up ons</p>
- * 'br' => null, | <br />
- * ), | </body>
- * ), |</html>
- * )
- *
- * @access protected
- * @since 3.9.0
- * @since 4.8.0 Rename, add $depth parameter, and change return type.
- * @since 5.3.0 Refactor, remove $depth parameter, add $parent and $root, make access protected.
- *
- * @param array $array A recursive associative array of tag/child relationships.
- * @param DOMElement $parent (optional) an element to which new children should be added.
- * @param DOMDocument $root (optional) the parent document.
- *
- * @return string|DOMDocument The rendered XML string or an object if root element is specified.
- */
- protected function array_to_xml_string( $array, $parent = null, $root = null ) {
- $return_string = false;
-
- if ( null === $parent ) {
- $return_string = true;
- $parent = $root = new DOMDocument();
- }
-
- if ( is_array( $array ) ) {
-
- foreach ( $array as $key => $value ) {
- $element = $root->createElement( $key );
- $parent->appendChild( $element );
-
- if ( is_array( $value ) ) {
- foreach ( $value as $child_key => $child_value ) {
- $child = $root->createElement( $child_key );
- $element->appendChild( $child );
- $child->appendChild( self::array_to_xml_string( $child_value, $child, $root ) );
- }
- } else {
- $element->appendChild(
- $root->createTextNode( $value )
- );
- }
- }
- } else {
- $element = $root->createTextNode( $array );
- $parent->appendChild( $element );
- }
-
- if ( $return_string ) {
- return $root->saveHTML();
- } else {
- return $element;
- }
- }
-}
diff --git a/plugins/jetpack/modules/sitemaps/sitemap-builder.php b/plugins/jetpack/modules/sitemaps/sitemap-builder.php
deleted file mode 100644
index e04f58d5..00000000
--- a/plugins/jetpack/modules/sitemaps/sitemap-builder.php
+++ /dev/null
@@ -1,1468 +0,0 @@
-<?php
-/**
- * Build the sitemap tree.
- *
- * @package Jetpack
- * @since 4.8.0
- * @author Automattic
- */
-
-/* Include sitemap subclasses, if not already, and include proper buffer based on phpxml's availability. */
-require_once dirname( __FILE__ ) . '/sitemap-constants.php';
-require_once dirname( __FILE__ ) . '/sitemap-buffer.php';
-
-if ( ! class_exists( 'DOMDocument' ) ) {
- require_once dirname( __FILE__ ) . '/sitemap-buffer-fallback.php';
- require_once dirname( __FILE__ ) . '/sitemap-buffer-image-fallback.php';
- require_once dirname( __FILE__ ) . '/sitemap-buffer-master-fallback.php';
- require_once dirname( __FILE__ ) . '/sitemap-buffer-news-fallback.php';
- require_once dirname( __FILE__ ) . '/sitemap-buffer-page-fallback.php';
- require_once dirname( __FILE__ ) . '/sitemap-buffer-video-fallback.php';
-} else {
- require_once dirname( __FILE__ ) . '/sitemap-buffer-image.php';
- require_once dirname( __FILE__ ) . '/sitemap-buffer-master.php';
- require_once dirname( __FILE__ ) . '/sitemap-buffer-news.php';
- require_once dirname( __FILE__ ) . '/sitemap-buffer-page.php';
- require_once dirname( __FILE__ ) . '/sitemap-buffer-video.php';
-}
-
-require_once dirname( __FILE__ ) . '/sitemap-librarian.php';
-require_once dirname( __FILE__ ) . '/sitemap-finder.php';
-require_once dirname( __FILE__ ) . '/sitemap-state.php';
-
-if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
- require_once dirname( __FILE__ ) . '/sitemap-logger.php';
-}
-
-/**
- * Simple class for rendering an empty sitemap with a short TTL
- */
-class Jetpack_Sitemap_Buffer_Empty extends Jetpack_Sitemap_Buffer {
-
- public function __construct() {
- parent::__construct( JP_SITEMAP_MAX_ITEMS, JP_SITEMAP_MAX_BYTES, '1970-01-01 00:00:00' );
-
- $this->doc->appendChild(
- $this->doc->createComment( "generator='jetpack-" . JETPACK__VERSION . "'" )
- );
-
- $this->doc->appendChild(
- $this->doc->createProcessingInstruction(
- 'xml-stylesheet',
- 'type="text/xsl" href="' . $this->finder->construct_sitemap_url( 'sitemap-index.xsl' ) . '"'
- )
- );
- }
-
- protected function get_root_element() {
- if ( ! isset( $this->root ) ) {
- $this->root = $this->doc->createElement( 'sitemapindex' );
- $this->root->setAttribute( 'xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9' );
- $this->doc->appendChild( $this->root );
- $this->byte_capacity -= strlen( $this->doc->saveXML( $this->root ) );
- }
-
- return $this->root;
- }
-}
-
-/**
- * The Jetpack_Sitemap_Builder object handles the construction of
- * all sitemap files (except the XSL files, which are handled by
- * Jetpack_Sitemap_Stylist.) Other than the constructor, there are
- * only two public functions: build_all_sitemaps and news_sitemap_xml.
- *
- * @since 4.8.0
- */
-class Jetpack_Sitemap_Builder {
-
- /**
- * Librarian object for storing and retrieving sitemap data.
- *
- * @access private
- * @since 4.8.0
- * @var $librarian Jetpack_Sitemap_Librarian
- */
- private $librarian;
-
- /**
- * Logger object for reporting debug messages.
- *
- * @access private
- * @since 4.8.0
- * @var $logger Jetpack_Sitemap_Logger
- */
- private $logger = false;
-
- /**
- * Finder object for dealing with sitemap URIs.
- *
- * @access private
- * @since 4.8.0
- * @var $finder Jetpack_Sitemap_Finder
- */
- private $finder;
-
- /**
- * Construct a new Jetpack_Sitemap_Builder object.
- *
- * @access public
- * @since 4.8.0
- */
- public function __construct() {
- $this->librarian = new Jetpack_Sitemap_Librarian();
- $this->finder = new Jetpack_Sitemap_Finder();
-
- if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
- $this->logger = new Jetpack_Sitemap_Logger();
- }
-
- update_option(
- 'jetpack_sitemap_post_types',
- /**
- * The array of post types to be included in the sitemap.
- *
- * Add your custom post type name to the array to have posts of
- * that type included in the sitemap. The default array includes
- * 'page' and 'post'.
- *
- * The result of this filter is cached in an option, 'jetpack_sitemap_post_types',
- * so this filter only has to be applied once per generation.
- *
- * @since 4.8.0
- */
- apply_filters(
- 'jetpack_sitemap_post_types',
- array( 'post', 'page' )
- )
- );
- }
-
- /**
- * Update the sitemap.
- *
- * All we do here is call build_next_sitemap_file a bunch of times.
- *
- * @since 4.8.0
- */
- public function update_sitemap() {
- if ( $this->logger ) {
- $this->logger->report( '-- Updating...' );
- if ( ! class_exists( 'DOMDocument' ) ) {
- $this->logger->report(
- __(
- 'Jetpack can not load necessary XML manipulation libraries. Please ask your hosting provider to refer to our server requirements at https://jetpack.com/support/server-requirements/ .',
- 'jetpack'
- ),
- true
- );
- }
- }
-
- for ( $i = 1; $i <= JP_SITEMAP_UPDATE_SIZE; $i++ ) {
- if ( true === $this->build_next_sitemap_file() ) {
- break; // All finished!
- }
- }
-
- if ( $this->logger ) {
- $this->logger->report( '-- ...done for now.' );
- $this->logger->time();
- }
- }
-
- /**
- * Generate the next sitemap file.
- *
- * Reads the most recent state of the sitemap generation phase,
- * constructs the next file, and updates the state.
- *
- * @since 4.8.0
- *
- * @return bool True when finished.
- */
- private function build_next_sitemap_file() {
- $finished = false; // Initialize finished flag.
-
- // Get the most recent state, and lock the state.
- $state = Jetpack_Sitemap_State::check_out();
-
- // Do nothing if the state was locked.
- if ( false === $state ) {
- return false;
- }
-
- // Otherwise, branch on the sitemap-type key of $state.
- switch ( $state['sitemap-type'] ) {
- case JP_PAGE_SITEMAP_TYPE:
- $this->build_next_sitemap_of_type(
- JP_PAGE_SITEMAP_TYPE,
- array( $this, 'build_one_page_sitemap' ),
- $state
- );
- break;
-
- case JP_PAGE_SITEMAP_INDEX_TYPE:
- $this->build_next_sitemap_index_of_type(
- JP_PAGE_SITEMAP_INDEX_TYPE,
- JP_IMAGE_SITEMAP_TYPE,
- $state
- );
- break;
-
- case JP_IMAGE_SITEMAP_TYPE:
- $this->build_next_sitemap_of_type(
- JP_IMAGE_SITEMAP_TYPE,
- array( $this, 'build_one_image_sitemap' ),
- $state
- );
- break;
-
- case JP_IMAGE_SITEMAP_INDEX_TYPE:
- $this->build_next_sitemap_index_of_type(
- JP_IMAGE_SITEMAP_INDEX_TYPE,
- JP_VIDEO_SITEMAP_TYPE,
- $state
- );
- break;
-
- case JP_VIDEO_SITEMAP_TYPE:
- $this->build_next_sitemap_of_type(
- JP_VIDEO_SITEMAP_TYPE,
- array( $this, 'build_one_video_sitemap' ),
- $state
- );
- break;
-
- case JP_VIDEO_SITEMAP_INDEX_TYPE:
- $this->build_next_sitemap_index_of_type(
- JP_VIDEO_SITEMAP_INDEX_TYPE,
- JP_MASTER_SITEMAP_TYPE,
- $state
- );
- break;
-
- case JP_MASTER_SITEMAP_TYPE:
- $this->build_master_sitemap( $state['max'] );
-
- // Reset the state and quit.
- Jetpack_Sitemap_State::reset(
- JP_PAGE_SITEMAP_TYPE
- );
-
- if ( $this->logger ) {
- $this->logger->report( '-- Finished.' );
- $this->logger->time();
- }
- $finished = true;
-
- break;
-
- default:
- Jetpack_Sitemap_State::reset(
- JP_PAGE_SITEMAP_TYPE
- );
- $finished = true;
-
- break;
- } // End switch.
-
- // Unlock the state.
- Jetpack_Sitemap_State::unlock();
-
- return $finished;
- }
-
- /**
- * Build the next sitemap of a given type and update the sitemap state.
- *
- * @since 4.8.0
- *
- * @param string $sitemap_type The type of the sitemap being generated.
- * @param callback $build_one A callback which builds a single sitemap file.
- * @param array $state A sitemap state.
- */
- private function build_next_sitemap_of_type( $sitemap_type, $build_one, $state ) {
- $index_type = jp_sitemap_index_type_of( $sitemap_type );
-
- // Try to build a sitemap.
- $result = call_user_func_array(
- $build_one,
- array(
- $state['number'] + 1,
- $state['last-added'],
- )
- );
-
- if ( false === $result ) {
- // If no sitemap was generated, advance to the next type.
- Jetpack_Sitemap_State::check_in(
- array(
- 'sitemap-type' => $index_type,
- 'last-added' => 0,
- 'number' => 0,
- 'last-modified' => '1970-01-01 00:00:00',
- )
- );
-
- if ( $this->logger ) {
- $this->logger->report( "-- Cleaning Up $sitemap_type" );
- }
-
- // Clean up old files.
- $this->librarian->delete_numbered_sitemap_rows_after(
- $state['number'],
- $sitemap_type
- );
-
- return;
- }
-
- // Otherwise, update the state.
- Jetpack_Sitemap_State::check_in(
- array(
- 'sitemap-type' => $state['sitemap-type'],
- 'last-added' => $result['last_id'],
- 'number' => $state['number'] + 1,
- 'last-modified' => $result['last_modified'],
- )
- );
-
- if ( true === $result['any_left'] ) {
- // If there's more work to be done with this type, return.
- return;
- }
-
- // Otherwise, advance state to the next sitemap type.
- Jetpack_Sitemap_State::check_in(
- array(
- 'sitemap-type' => $index_type,
- 'last-added' => 0,
- 'number' => 0,
- 'last-modified' => '1970-01-01 00:00:00',
- )
- );
-
- if ( $this->logger ) {
- $this->logger->report( "-- Cleaning Up $sitemap_type" );
- }
-
- // Clean up old files.
- $this->librarian->delete_numbered_sitemap_rows_after(
- $state['number'] + 1,
- $sitemap_type
- );
- }
-
- /**
- * Build the next sitemap index of a given type and update the state.
- *
- * @since 4.8.0
- *
- * @param string $index_type The type of index being generated.
- * @param string $next_type The next type to generate after this one.
- * @param array $state A sitemap state.
- */
- private function build_next_sitemap_index_of_type( $index_type, $next_type, $state ) {
- $sitemap_type = jp_sitemap_child_type_of( $index_type );
-
- // If only 0 or 1 sitemaps were built, advance to the next type and return.
- if ( 1 >= $state['max'][ $sitemap_type ]['number'] ) {
- Jetpack_Sitemap_State::check_in(
- array(
- 'sitemap-type' => $next_type,
- 'last-added' => 0,
- 'number' => 0,
- 'last-modified' => '1970-01-01 00:00:00',
- )
- );
-
- if ( $this->logger ) {
- $this->logger->report( "-- Cleaning Up $index_type" );
- }
-
- // There are no indices of this type.
- $this->librarian->delete_numbered_sitemap_rows_after(
- 0,
- $index_type
- );
-
- return;
- }
-
- // Otherwise, try to build a sitemap index.
- $result = $this->build_one_sitemap_index(
- $state['number'] + 1,
- $state['last-added'],
- $state['last-modified'],
- $index_type
- );
-
- // If no index was built, advance to the next type and return.
- if ( false === $result ) {
- Jetpack_Sitemap_State::check_in(
- array(
- 'sitemap-type' => $next_type,
- 'last-added' => 0,
- 'number' => 0,
- 'last-modified' => '1970-01-01 00:00:00',
- )
- );
-
- if ( $this->logger ) {
- $this->logger->report( "-- Cleaning Up $index_type" );
- }
-
- // Clean up old files.
- $this->librarian->delete_numbered_sitemap_rows_after(
- $state['number'],
- $index_type
- );
-
- return;
- }
-
- // Otherwise, check in the state.
- Jetpack_Sitemap_State::check_in(
- array(
- 'sitemap-type' => $index_type,
- 'last-added' => $result['last_id'],
- 'number' => $state['number'] + 1,
- 'last-modified' => $result['last_modified'],
- )
- );
-
- // If there are still sitemaps left to index, return.
- if ( true === $result['any_left'] ) {
- return;
- }
-
- // Otherwise, advance to the next type.
- Jetpack_Sitemap_State::check_in(
- array(
- 'sitemap-type' => $next_type,
- 'last-added' => 0,
- 'number' => 0,
- 'last-modified' => '1970-01-01 00:00:00',
- )
- );
-
- if ( $this->logger ) {
- $this->logger->report( "-- Cleaning Up $index_type" );
- }
-
- // We're done generating indices of this type.
- $this->librarian->delete_numbered_sitemap_rows_after(
- $state['number'] + 1,
- $index_type
- );
- }
-
- /**
- * Builds the master sitemap index.
- *
- * @param array $max Array of sitemap types with max index and datetime.
- *
- * @since 4.8.0
- */
- private function build_master_sitemap( $max ) {
- $page = array();
- $image = array();
- $video = array();
- if ( $this->logger ) {
- $this->logger->report( '-- Building Master Sitemap.' );
- }
-
- $buffer = new Jetpack_Sitemap_Buffer_Master(
- JP_SITEMAP_MAX_ITEMS,
- JP_SITEMAP_MAX_BYTES
- );
-
- if ( 0 < $max[ JP_PAGE_SITEMAP_TYPE ]['number'] ) {
- if ( 1 === $max[ JP_PAGE_SITEMAP_TYPE ]['number'] ) {
- $page['filename'] = jp_sitemap_filename( JP_PAGE_SITEMAP_TYPE, 1 );
- $page['last_modified'] = jp_sitemap_datetime( $max[ JP_PAGE_SITEMAP_TYPE ]['lastmod'] );
- } else {
- $page['filename'] = jp_sitemap_filename(
- JP_PAGE_SITEMAP_INDEX_TYPE,
- $max[ JP_PAGE_SITEMAP_INDEX_TYPE ]['number']
- );
- $page['last_modified'] = jp_sitemap_datetime( $max[ JP_PAGE_SITEMAP_INDEX_TYPE ]['lastmod'] );
- }
-
- $buffer->append(
- array(
- 'sitemap' => array(
- 'loc' => $this->finder->construct_sitemap_url( $page['filename'] ),
- 'lastmod' => $page['last_modified'],
- ),
- )
- );
- }
-
- if ( 0 < $max[ JP_IMAGE_SITEMAP_TYPE ]['number'] ) {
- if ( 1 === $max[ JP_IMAGE_SITEMAP_TYPE ]['number'] ) {
- $image['filename'] = jp_sitemap_filename( JP_IMAGE_SITEMAP_TYPE, 1 );
- $image['last_modified'] = jp_sitemap_datetime( $max[ JP_IMAGE_SITEMAP_TYPE ]['lastmod'] );
- } else {
- $image['filename'] = jp_sitemap_filename(
- JP_IMAGE_SITEMAP_INDEX_TYPE,
- $max[ JP_IMAGE_SITEMAP_INDEX_TYPE ]['number']
- );
- $image['last_modified'] = jp_sitemap_datetime( $max[ JP_IMAGE_SITEMAP_INDEX_TYPE ]['lastmod'] );
- }
-
- $buffer->append(
- array(
- 'sitemap' => array(
- 'loc' => $this->finder->construct_sitemap_url( $image['filename'] ),
- 'lastmod' => $image['last_modified'],
- ),
- )
- );
- }
-
- if ( 0 < $max[ JP_VIDEO_SITEMAP_TYPE ]['number'] ) {
- if ( 1 === $max[ JP_VIDEO_SITEMAP_TYPE ]['number'] ) {
- $video['filename'] = jp_sitemap_filename( JP_VIDEO_SITEMAP_TYPE, 1 );
- $video['last_modified'] = jp_sitemap_datetime( $max[ JP_VIDEO_SITEMAP_TYPE ]['lastmod'] );
- } else {
- $video['filename'] = jp_sitemap_filename(
- JP_VIDEO_SITEMAP_INDEX_TYPE,
- $max[ JP_VIDEO_SITEMAP_INDEX_TYPE ]['number']
- );
- $video['last_modified'] = jp_sitemap_datetime( $max[ JP_VIDEO_SITEMAP_INDEX_TYPE ]['lastmod'] );
- }
-
- $buffer->append(
- array(
- 'sitemap' => array(
- 'loc' => $this->finder->construct_sitemap_url( $video['filename'] ),
- 'lastmod' => $video['last_modified'],
- ),
- )
- );
- }
-
- $this->librarian->store_sitemap_data(
- 0,
- JP_MASTER_SITEMAP_TYPE,
- $buffer->contents(),
- ''
- );
- }
-
- /**
- * Build and store a single page sitemap. Returns false if no sitemap is built.
- *
- * Side effect: Create/update a sitemap row.
- *
- * @access private
- * @since 4.8.0
- *
- * @param int $number The number of the current sitemap.
- * @param int $from_id The greatest lower bound of the IDs of the posts to be included.
- *
- * @return bool|array @args {
- * @type int $last_id The ID of the last item to be successfully added to the buffer.
- * @type bool $any_left 'true' if there are items which haven't been saved to a sitemap, 'false' otherwise.
- * @type string $last_modified The most recent timestamp to appear on the sitemap.
- * }
- */
- public function build_one_page_sitemap( $number, $from_id ) {
- $last_post_id = $from_id;
- $any_posts_left = true;
-
- if ( $this->logger ) {
- $debug_name = jp_sitemap_filename( JP_PAGE_SITEMAP_TYPE, $number );
- $this->logger->report( "-- Building $debug_name" );
- }
-
- $buffer = new Jetpack_Sitemap_Buffer_Page(
- JP_SITEMAP_MAX_ITEMS,
- JP_SITEMAP_MAX_BYTES
- );
-
- // Add entry for the main page (only if we're at the first one) and it isn't already going to be included as a page.
- if ( 1 === $number && 'page' !== get_option( 'show_on_front' ) ) {
- $item_array = array(
- 'url' => array(
- 'loc' => home_url(),
- ),
- );
-
- /**
- * Filter associative array with data to build <url> node
- * and its descendants for site home.
- *
- * @module sitemaps
- *
- * @since 3.9.0
- *
- * @param array $blog_home Data to build parent and children nodes for site home.
- */
- $item_array = apply_filters( 'jetpack_sitemap_url_home', $item_array );
-
- $buffer->append( $item_array );
- }
-
- // Add as many items to the buffer as possible.
- while ( $last_post_id >= 0 && false === $buffer->is_full() ) {
- $posts = $this->librarian->query_posts_after_id(
- $last_post_id,
- JP_SITEMAP_BATCH_SIZE
- );
-
- if ( null == $posts ) { // WPCS: loose comparison ok.
- $any_posts_left = false;
- break;
- }
-
- foreach ( $posts as $post ) {
- $current_item = $this->post_to_sitemap_item( $post );
-
- if ( true === $buffer->append( $current_item['xml'] ) ) {
- $last_post_id = $post->ID;
- $buffer->view_time( $current_item['last_modified'] );
- } else {
- break;
- }
- }
- }
-
- // Handle other page sitemap URLs.
- if ( false === $any_posts_left || $last_post_id < 0 ) {
- // Negative IDs are used to track URL indexes.
- $last_post_id = min( 0, $last_post_id );
- $any_posts_left = true; // Reinitialize.
-
- /**
- * Filter other page sitemap URLs.
- *
- * @module sitemaps
- *
- * @since 6.1.0
- *
- * @param array $urls An array of other URLs.
- */
- $other_urls = apply_filters( 'jetpack_page_sitemap_other_urls', array() );
-
- if ( $other_urls ) { // Start with index [1].
- $other_urls = array_values( $other_urls );
- array_unshift( $other_urls, $other_urls[0] );
- unset( $other_urls[0] );
- }
-
- // Add as many items to the buffer as possible.
- while ( false === $buffer->is_full() ) {
- $last_post_id_index = abs( $last_post_id );
- $start_from_post_id_index = $last_post_id_index ? $last_post_id_index + 1 : 0;
- $urls = array_slice(
- $other_urls,
- $start_from_post_id_index,
- JP_SITEMAP_BATCH_SIZE,
- true
- );
-
- if ( ! $urls ) {
- $any_posts_left = false;
- break;
- }
-
- foreach ( $urls as $index => $url ) {
- if ( ! is_array( $url ) ) {
- $url = array( 'loc' => $url );
- }
- $item = array( 'xml' => compact( 'url' ) );
-
- if ( true === $buffer->append( $item['xml'] ) ) {
- $last_post_id = -$index;
- } else {
- break;
- }
- }
- }
- }
-
- // If no items were added, return false.
- if ( true === $buffer->is_empty() ) {
- return false;
- }
-
- /**
- * Filter sitemap before rendering it as XML.
- *
- * @module sitemaps
- *
- * @since 3.9.0
- * @since 5.3.0 returns an element of DOMDocument type instead of SimpleXMLElement
- *
- * @param DOMDocument $doc Data tree for sitemap.
- * @param string $last_modified Date of last modification.
- */
- $tree = apply_filters(
- 'jetpack_print_sitemap',
- $buffer->get_document(),
- $buffer->last_modified()
- );
-
- // Store the buffer as the content of a sitemap row.
- $this->librarian->store_sitemap_data(
- $number,
- JP_PAGE_SITEMAP_TYPE,
- $buffer->contents(),
- $buffer->last_modified()
- );
-
- /*
- * Now report back with the ID of the last post ID to be
- * successfully added and whether there are any posts left.
- */
- return array(
- 'last_id' => $last_post_id,
- 'any_left' => $any_posts_left,
- 'last_modified' => $buffer->last_modified(),
- );
- }
-
- /**
- * Build and store a single image sitemap. Returns false if no sitemap is built.
- *
- * Side effect: Create/update an image sitemap row.
- *
- * @access private
- * @since 4.8.0
- *
- * @param int $number The number of the current sitemap.
- * @param int $from_id The greatest lower bound of the IDs of the posts to be included.
- *
- * @return bool|array @args {
- * @type int $last_id The ID of the last item to be successfully added to the buffer.
- * @type bool $any_left 'true' if there are items which haven't been saved to a sitemap, 'false' otherwise.
- * @type string $last_modified The most recent timestamp to appear on the sitemap.
- * }
- */
- public function build_one_image_sitemap( $number, $from_id ) {
- $last_post_id = $from_id;
- $any_posts_left = true;
-
- if ( $this->logger ) {
- $debug_name = jp_sitemap_filename( JP_IMAGE_SITEMAP_TYPE, $number );
- $this->logger->report( "-- Building $debug_name" );
- }
-
- $buffer = new Jetpack_Sitemap_Buffer_Image(
- JP_SITEMAP_MAX_ITEMS,
- JP_SITEMAP_MAX_BYTES
- );
-
- // Add as many items to the buffer as possible.
- while ( false === $buffer->is_full() ) {
- $posts = $this->librarian->query_images_after_id(
- $last_post_id,
- JP_SITEMAP_BATCH_SIZE
- );
-
- if ( null == $posts ) { // WPCS: loose comparison ok.
- $any_posts_left = false;
- break;
- }
-
- foreach ( $posts as $post ) {
- $current_item = $this->image_post_to_sitemap_item( $post );
-
- if ( true === $buffer->append( $current_item['xml'] ) ) {
- $last_post_id = $post->ID;
- $buffer->view_time( $current_item['last_modified'] );
- } else {
- break;
- }
- }
- }
-
- // If no items were added, return false.
- if ( true === $buffer->is_empty() ) {
- return false;
- }
-
- // Store the buffer as the content of a jp_sitemap post.
- $this->librarian->store_sitemap_data(
- $number,
- JP_IMAGE_SITEMAP_TYPE,
- $buffer->contents(),
- $buffer->last_modified()
- );
-
- /*
- * Now report back with the ID of the last post to be
- * successfully added and whether there are any posts left.
- */
- return array(
- 'last_id' => $last_post_id,
- 'any_left' => $any_posts_left,
- 'last_modified' => $buffer->last_modified(),
- );
- }
-
- /**
- * Build and store a single video sitemap. Returns false if no sitemap is built.
- *
- * Side effect: Create/update an video sitemap row.
- *
- * @access private
- * @since 4.8.0
- *
- * @param int $number The number of the current sitemap.
- * @param int $from_id The greatest lower bound of the IDs of the posts to be included.
- *
- * @return bool|array @args {
- * @type int $last_id The ID of the last item to be successfully added to the buffer.
- * @type bool $any_left 'true' if there are items which haven't been saved to a sitemap, 'false' otherwise.
- * @type string $last_modified The most recent timestamp to appear on the sitemap.
- * }
- */
- public function build_one_video_sitemap( $number, $from_id ) {
- $last_post_id = $from_id;
- $any_posts_left = true;
-
- if ( $this->logger ) {
- $debug_name = jp_sitemap_filename( JP_VIDEO_SITEMAP_TYPE, $number );
- $this->logger->report( "-- Building $debug_name" );
- }
-
- $buffer = new Jetpack_Sitemap_Buffer_Video(
- JP_SITEMAP_MAX_ITEMS,
- JP_SITEMAP_MAX_BYTES
- );
-
- // Add as many items to the buffer as possible.
- while ( false === $buffer->is_full() ) {
- $posts = $this->librarian->query_videos_after_id(
- $last_post_id,
- JP_SITEMAP_BATCH_SIZE
- );
-
- if ( null == $posts ) { // WPCS: loose comparison ok.
- $any_posts_left = false;
- break;
- }
-
- foreach ( $posts as $post ) {
- $current_item = $this->video_post_to_sitemap_item( $post );
-
- if ( true === $buffer->append( $current_item['xml'] ) ) {
- $last_post_id = $post->ID;
- $buffer->view_time( $current_item['last_modified'] );
- } else {
- break;
- }
- }
- }
-
- // If no items were added, return false.
- if ( true === $buffer->is_empty() ) {
- return false;
- }
-
- if ( false === $buffer->is_empty() ) {
- $this->librarian->store_sitemap_data(
- $number,
- JP_VIDEO_SITEMAP_TYPE,
- $buffer->contents(),
- $buffer->last_modified()
- );
- }
-
- /*
- * Now report back with the ID of the last post to be
- * successfully added and whether there are any posts left.
- */
- return array(
- 'last_id' => $last_post_id,
- 'any_left' => $any_posts_left,
- 'last_modified' => $buffer->last_modified(),
- );
- }
-
- /**
- * Build and store a single page sitemap index. Return false if no index is built.
- *
- * Side effect: Create/update a sitemap index row.
- *
- * @access private
- * @since 4.8.0
- *
- * @param int $number The number of the current sitemap index.
- * @param int $from_id The greatest lower bound of the IDs of the sitemaps to be included.
- * @param string $datetime Datetime of previous sitemap in 'YYYY-MM-DD hh:mm:ss' format.
- * @param string $index_type Sitemap index type.
- *
- * @return bool|array @args {
- * @type int $last_id The ID of the last item to be successfully added to the buffer.
- * @type bool $any_left 'true' if there are items which haven't been saved to a sitemap, 'false' otherwise.
- * @type string $last_modified The most recent timestamp to appear on the sitemap.
- * }
- */
- private function build_one_sitemap_index( $number, $from_id, $datetime, $index_type ) {
- $last_sitemap_id = $from_id;
- $any_sitemaps_left = true;
-
- // Check the datetime format.
- $datetime = jp_sitemap_datetime( $datetime );
-
- $sitemap_type = jp_sitemap_child_type_of( $index_type );
-
- if ( $this->logger ) {
- $index_debug_name = jp_sitemap_filename( $index_type, $number );
- $this->logger->report( "-- Building $index_debug_name" );
- }
-
- $buffer = new Jetpack_Sitemap_Buffer_Master(
- JP_SITEMAP_MAX_ITEMS,
- JP_SITEMAP_MAX_BYTES,
- $datetime
- );
-
- // Add pointer to the previous sitemap index (unless we're at the first one).
- if ( 1 !== $number ) {
- $i = $number - 1;
- $prev_index_url = $this->finder->construct_sitemap_url(
- jp_sitemap_filename( $index_type, $i )
- );
-
- $item_array = array(
- 'sitemap' => array(
- 'loc' => $prev_index_url,
- 'lastmod' => $datetime,
- ),
- );
-
- $buffer->append( $item_array );
- }
-
- // Add as many items to the buffer as possible.
- while ( false === $buffer->is_full() ) {
- // Retrieve a batch of posts (in order).
- $posts = $this->librarian->query_sitemaps_after_id(
- $sitemap_type,
- $last_sitemap_id,
- JP_SITEMAP_BATCH_SIZE
- );
-
- // If there were no posts to get, make a note.
- if ( null == $posts ) { // WPCS: loose comparison ok.
- $any_sitemaps_left = false;
- break;
- }
-
- // Otherwise, loop through each post in the batch.
- foreach ( $posts as $post ) {
- // Generate the sitemap XML for the post.
- $current_item = $this->sitemap_row_to_index_item( (array) $post );
-
- // Try adding this item to the buffer.
- if ( true === $buffer->append( $current_item['xml'] ) ) {
- $last_sitemap_id = $post['ID'];
- $buffer->view_time( $current_item['last_modified'] );
- } else {
- // Otherwise stop looping through posts.
- break;
- }
- }
- }
-
- // If no items were added, return false.
- if ( true === $buffer->is_empty() ) {
- return false;
- }
-
- $this->librarian->store_sitemap_data(
- $number,
- $index_type,
- $buffer->contents(),
- $buffer->last_modified()
- );
-
- /*
- * Now report back with the ID of the last sitemap post ID to
- * be successfully added, whether there are any sitemap posts
- * left, and the most recent modification time seen.
- */
- return array(
- 'last_id' => $last_sitemap_id,
- 'any_left' => $any_sitemaps_left,
- 'last_modified' => $buffer->last_modified(),
- );
- }
-
- /**
- * Construct the sitemap index url entry for a sitemap row.
- *
- * @link http://www.sitemaps.org/protocol.html#sitemapIndex_sitemap
- *
- * @access private
- * @since 4.8.0
- *
- * @param array $row The sitemap data to be processed.
- *
- * @return string An XML fragment representing the post URL.
- */
- private function sitemap_row_to_index_item( $row ) {
- $url = $this->finder->construct_sitemap_url( $row['post_title'] );
-
- $item_array = array(
- 'sitemap' => array(
- 'loc' => $url,
- 'lastmod' => jp_sitemap_datetime( $row['post_date'] ),
- ),
- );
-
- return array(
- 'xml' => $item_array,
- 'last_modified' => $row['post_date'],
- );
- }
-
-
- /**
- * This is served instead of a 404 when the master sitemap is requested
- * but not yet generated.
- *
- * @access public
- * @since 6.7.0
- *
- * @return string The empty sitemap xml.
- */
- public function empty_sitemap_xml() {
- $empty_sitemap = new Jetpack_Sitemap_Buffer_Empty();
- return $empty_sitemap->contents();
- }
-
- /**
- * Build and return the news sitemap xml. Note that the result of this
- * function is cached in the transient 'jetpack_news_sitemap_xml'.
- *
- * @access public
- * @since 4.8.0
- *
- * @return string The news sitemap xml.
- */
- public function news_sitemap_xml() {
- $the_stored_news_sitemap = get_transient( 'jetpack_news_sitemap_xml' );
-
- if ( false === $the_stored_news_sitemap ) {
-
- if ( $this->logger ) {
- $this->logger->report( 'Beginning news sitemap generation.' );
- }
-
- /**
- * Filter limit of entries to include in news sitemap.
- *
- * @module sitemaps
- *
- * @since 3.9.0
- *
- * @param int $count Number of entries to include in news sitemap.
- */
- $item_limit = apply_filters(
- 'jetpack_sitemap_news_sitemap_count',
- JP_NEWS_SITEMAP_MAX_ITEMS
- );
-
- $buffer = new Jetpack_Sitemap_Buffer_News(
- min( $item_limit, JP_NEWS_SITEMAP_MAX_ITEMS ),
- JP_SITEMAP_MAX_BYTES
- );
-
- $posts = $this->librarian->query_most_recent_posts( JP_NEWS_SITEMAP_MAX_ITEMS );
-
- foreach ( $posts as $post ) {
- $current_item = $this->post_to_news_sitemap_item( $post );
-
- if ( false === $buffer->append( $current_item['xml'] ) ) {
- break;
- }
- }
-
- if ( $this->logger ) {
- $this->logger->time( 'End news sitemap generation.' );
- }
-
- $the_stored_news_sitemap = $buffer->contents();
-
- set_transient(
- 'jetpack_news_sitemap_xml',
- $the_stored_news_sitemap,
- JP_NEWS_SITEMAP_INTERVAL
- );
- } // End if.
-
- return $the_stored_news_sitemap;
- }
-
- /**
- * Construct the sitemap url entry for a WP_Post.
- *
- * @link http://www.sitemaps.org/protocol.html#urldef
- * @access private
- * @since 4.8.0
- *
- * @param WP_Post $post The post to be processed.
- *
- * @return array
- * @type array $xml An XML fragment representing the post URL.
- * @type string $last_modified Date post was last modified.
- */
- private function post_to_sitemap_item( $post ) {
-
- /**
- * Filter condition to allow skipping specific posts in sitemap.
- *
- * @module sitemaps
- *
- * @since 3.9.0
- *
- * @param bool $skip Current boolean. False by default, so no post is skipped.
- * @param object $post Current post in the form of a $wpdb result object. Not WP_Post.
- */
- if ( true === apply_filters( 'jetpack_sitemap_skip_post', false, $post ) ) {
- return array(
- 'xml' => null,
- 'last_modified' => null,
- );
- }
-
- $url = esc_url( get_permalink( $post ) );
-
- /*
- * Spec requires the URL to be <=2048 bytes.
- * In practice this constraint is unlikely to be violated.
- */
- if ( 2048 < strlen( $url ) ) {
- $url = home_url() . '/?p=' . $post->ID;
- }
-
- $last_modified = $post->post_modified_gmt;
-
- // Check for more recent comments.
- // Note that 'Y-m-d h:i:s' strings sort lexicographically.
- if ( 0 < $post->comment_count ) {
- $last_modified = max(
- $last_modified,
- $this->librarian->query_latest_approved_comment_time_on_post( $post->ID )
- );
- }
-
- $item_array = array(
- 'url' => array(
- 'loc' => $url,
- 'lastmod' => jp_sitemap_datetime( $last_modified ),
- ),
- );
-
- /**
- * Filter sitemap URL item before rendering it as XML.
- *
- * @module sitemaps
- *
- * @since 3.9.0
- *
- * @param array $tree Associative array representing sitemap URL element.
- * @param int $post_id ID of the post being processed.
- */
- $item_array = apply_filters( 'jetpack_sitemap_url', $item_array, $post->ID );
-
- return array(
- 'xml' => $item_array,
- 'last_modified' => $last_modified,
- );
- }
-
- /**
- * Construct the image sitemap url entry for a WP_Post of image type.
- *
- * @link http://www.sitemaps.org/protocol.html#urldef
- *
- * @access private
- * @since 4.8.0
- *
- * @param WP_Post $post The image post to be processed.
- *
- * @return array
- * @type array $xml An XML fragment representing the post URL.
- * @type string $last_modified Date post was last modified.
- */
- private function image_post_to_sitemap_item( $post ) {
-
- /**
- * Filter condition to allow skipping specific image posts in the sitemap.
- *
- * @module sitemaps
- *
- * @since 4.8.0
- *
- * @param bool $skip Current boolean. False by default, so no post is skipped.
- * @param WP_POST $post Current post object.
- */
- if ( apply_filters( 'jetpack_sitemap_image_skip_post', false, $post ) ) {
- return array(
- 'xml' => null,
- 'last_modified' => null,
- );
- }
-
- $url = wp_get_attachment_url( $post->ID );
-
- // Do not include the image if the attached parent is not published.
- // Unattached will be published. Otherwise, will inherit parent status.
- if ( 'publish' !== get_post_status( $post ) ) {
- return array(
- 'xml' => null,
- 'last_modified' => null,
- );
- }
-
- $parent_url = get_permalink( get_post( $post->post_parent ) );
- if ( '' == $parent_url ) { // WPCS: loose comparison ok.
- $parent_url = get_permalink( $post );
- }
-
- $item_array = array(
- 'url' => array(
- 'loc' => $parent_url,
- 'lastmod' => jp_sitemap_datetime( $post->post_modified_gmt ),
- 'image:image' => array(
- 'image:loc' => $url,
- ),
- ),
- );
-
- $item_array['url']['image:image']['image:title'] = $post->post_title;
- $item_array['url']['image:image']['image:caption'] = $post->post_excerpt;
-
- /**
- * Filter associative array with data to build <url> node
- * and its descendants for current post in image sitemap.
- *
- * @module sitemaps
- *
- * @since 4.8.0
- *
- * @param array $item_array Data to build parent and children nodes for current post.
- * @param int $post_id Current image post ID.
- */
- $item_array = apply_filters(
- 'jetpack_sitemap_image_sitemap_item',
- $item_array,
- $post->ID
- );
-
- return array(
- 'xml' => $item_array,
- 'last_modified' => $post->post_modified_gmt,
- );
- }
-
- /**
- * Construct the video sitemap url entry for a WP_Post of video type.
- *
- * @link http://www.sitemaps.org/protocol.html#urldef
- * @link https://developers.google.com/webmasters/videosearch/sitemaps
- *
- * @access private
- * @since 4.8.0
- *
- * @param WP_Post $post The video post to be processed.
- *
- * @return array
- * @type array $xml An XML fragment representing the post URL.
- * @type string $last_modified Date post was last modified.
- */
- private function video_post_to_sitemap_item( $post ) {
-
- /**
- * Filter condition to allow skipping specific image posts in the sitemap.
- *
- * @module sitemaps
- *
- * @since 4.8.0
- *
- * @param bool $skip Current boolean. False by default, so no post is skipped.
- * @param WP_POST $post Current post object.
- */
- if ( apply_filters( 'jetpack_sitemap_video_skip_post', false, $post ) ) {
- return array(
- 'xml' => null,
- 'last_modified' => null,
- );
- }
-
- // Do not include the video if the attached parent is not published.
- // Unattached will be published. Otherwise, will inherit parent status.
- if ( 'publish' !== get_post_status( $post ) ) {
- return array(
- 'xml' => null,
- 'last_modified' => null,
- );
- }
-
- $parent_url = esc_url( get_permalink( get_post( $post->post_parent ) ) );
- if ( '' == $parent_url ) { // WPCS: loose comparison ok.
- $parent_url = esc_url( get_permalink( $post ) );
- }
-
- // Prepare the content like get_the_content_feed().
- $content = $post->post_content;
- /** This filter is already documented in core/wp-includes/post-template.php */
- $content = apply_filters( 'the_content', $content );
-
- /** This filter is already documented in core/wp-includes/feed.php */
- $content = apply_filters( 'the_content_feed', $content, 'rss2' );
-
- // Include thumbnails for VideoPress videos, use blank image for others
- if ( 'complete' === get_post_meta( $post->ID, 'videopress_status', true ) && has_post_thumbnail( $post ) ) {
- $video_thumbnail_url = get_the_post_thumbnail_url( $post );
- } else {
- /**
- * Filter the thumbnail image used in the video sitemap for non-VideoPress videos.
- *
- * @since 7.2.0
- *
- * @param string $str Image URL.
- */
- $video_thumbnail_url = apply_filters( 'jetpack_video_sitemap_default_thumbnail', 'https://s0.wp.com/i/blank.jpg' );
- }
-
- $item_array = array(
- 'url' => array(
- 'loc' => $parent_url,
- 'lastmod' => jp_sitemap_datetime( $post->post_modified_gmt ),
- 'video:video' => array(
- /** This filter is already documented in core/wp-includes/feed.php */
- 'video:title' => apply_filters( 'the_title_rss', $post->post_title ),
- 'video:thumbnail_loc' => esc_url( $video_thumbnail_url ),
- 'video:description' => $content,
- 'video:content_loc' => esc_url( wp_get_attachment_url( $post->ID ) ),
- ),
- ),
- );
-
- // TODO: Integrate with VideoPress here.
- // cf. video:player_loc tag in video sitemap spec.
-
- /**
- * Filter associative array with data to build <url> node
- * and its descendants for current post in video sitemap.
- *
- * @module sitemaps
- *
- * @since 4.8.0
- *
- * @param array $item_array Data to build parent and children nodes for current post.
- * @param int $post_id Current video post ID.
- */
- $item_array = apply_filters(
- 'jetpack_sitemap_video_sitemap_item',
- $item_array,
- $post->ID
- );
-
- return array(
- 'xml' => $item_array,
- 'last_modified' => $post->post_modified_gmt,
- );
- }
-
- /**
- * Construct the news sitemap url entry for a WP_Post.
- *
- * @link http://www.sitemaps.org/protocol.html#urldef
- *
- * @access private
- * @since 4.8.0
- *
- * @param WP_Post $post The post to be processed.
- *
- * @return string An XML fragment representing the post URL.
- */
- private function post_to_news_sitemap_item( $post ) {
-
- /**
- * Filter condition to allow skipping specific posts in news sitemap.
- *
- * @module sitemaps
- *
- * @since 3.9.0
- *
- * @param bool $skip Current boolean. False by default, so no post is skipped.
- * @param WP_POST $post Current post object.
- */
- if ( apply_filters( 'jetpack_sitemap_news_skip_post', false, $post ) ) {
- return array(
- 'xml' => null,
- );
- }
-
- $url = get_permalink( $post );
-
- /*
- * Spec requires the URL to be <=2048 bytes.
- * In practice this constraint is unlikely to be violated.
- */
- if ( 2048 < strlen( $url ) ) {
- $url = home_url() . '/?p=' . $post->ID;
- }
-
- /*
- * Trim the locale to an ISO 639 language code as required by Google.
- * Special cases are zh-cn (Simplified Chinese) and zh-tw (Traditional Chinese).
- * @link http://www.loc.gov/standards/iso639-2/php/code_list.php
- */
- $language = strtolower( get_locale() );
-
- if ( in_array( $language, array( 'zh_tw', 'zh_cn' ), true ) ) {
- $language = str_replace( '_', '-', $language );
- } else {
- $language = preg_replace( '/(_.*)$/i', '', $language );
- }
-
- $item_array = array(
- 'url' => array(
- 'loc' => $url,
- 'lastmod' => jp_sitemap_datetime( $post->post_modified_gmt ),
- 'news:news' => array(
- 'news:publication' => array(
- 'news:name' => html_entity_decode( get_bloginfo( 'name' ) ),
- 'news:language' => $language,
- ),
- /** This filter is already documented in core/wp-includes/feed.php */
- 'news:title' => apply_filters( 'the_title_rss', $post->post_title ),
- 'news:publication_date' => jp_sitemap_datetime( $post->post_date_gmt ),
- 'news:genres' => 'Blog',
- ),
- ),
- );
-
- /**
- * Filter associative array with data to build <url> node
- * and its descendants for current post in news sitemap.
- *
- * @module sitemaps
- *
- * @since 3.9.0
- *
- * @param array $item_array Data to build parent and children nodes for current post.
- * @param int $post_id Current post ID.
- */
- $item_array = apply_filters(
- 'jetpack_sitemap_news_sitemap_item',
- $item_array,
- $post->ID
- );
-
- return array(
- 'xml' => $item_array,
- );
- }
-}
diff --git a/plugins/jetpack/modules/sitemaps/sitemap-constants.php b/plugins/jetpack/modules/sitemaps/sitemap-constants.php
deleted file mode 100644
index e91a3341..00000000
--- a/plugins/jetpack/modules/sitemaps/sitemap-constants.php
+++ /dev/null
@@ -1,216 +0,0 @@
-<?php
-/**
- * Sitemap-related constants.
- *
- * @package Jetpack
- * @since 4.8.0
- * @author Automattic
- */
-
-/**
- * Maximum size (in bytes) of a sitemap xml file.
- * Max is 716800 = 700kb to avoid potential failures for default memcached limits (1MB)
- *
- * @link http://www.sitemaps.org/
- * @since 4.8.0
- */
-if ( ! defined( 'JP_SITEMAP_MAX_BYTES' ) ) {
- define( 'JP_SITEMAP_MAX_BYTES', 716800 );
-}
-
-/**
- * Maximum size (in url nodes) of a sitemap xml file.
- * Per the spec, max value is 50000.
- *
- * @link http://www.sitemaps.org/
- * @since 4.8.0
- */
-if ( ! defined( 'JP_SITEMAP_MAX_ITEMS' ) ) {
- define( 'JP_SITEMAP_MAX_ITEMS', 2000 );
-}
-
-/**
- * Maximum size (in url nodes) of a news sitemap xml file.
- * Per the spec, max value is 1000.
- *
- * @link https://support.google.com/news/publisher/answer/74288?hl=en
- * @since 4.8.0
- */
-if ( ! defined( 'JP_NEWS_SITEMAP_MAX_ITEMS' ) ) {
- define( 'JP_NEWS_SITEMAP_MAX_ITEMS', 1000 );
-}
-
-/**
- * Batch size for database queries.
- *
- * @since 4.8.0
- */
-if ( ! defined( 'JP_SITEMAP_BATCH_SIZE' ) ) {
- define( 'JP_SITEMAP_BATCH_SIZE', 50 );
-}
-
-/**
- * Number of sitemap files to update on each run.
- *
- * @since 4.8.0
- */
-if ( ! defined( 'JP_SITEMAP_UPDATE_SIZE' ) ) {
- define( 'JP_SITEMAP_UPDATE_SIZE', 100 );
-}
-
-/**
- * Number of seconds between sitemap updates.
- *
- * @since 4.8.0
- */
-if ( ! defined( 'JP_SITEMAP_INTERVAL' ) ) {
- define( 'JP_SITEMAP_INTERVAL', 12 * HOUR_IN_SECONDS );
-}
-
-/**
- * Number of seconds to lock the sitemap state.
- *
- * @since 4.8.0
- */
-if ( ! defined( 'JP_SITEMAP_LOCK_INTERVAL' ) ) {
- define( 'JP_SITEMAP_LOCK_INTERVAL', 15 * MINUTE_IN_SECONDS );
-}
-
-/**
- * Cache lifetime of news sitemap (in seconds).
- *
- * @since 4.8.0
- */
-if ( ! defined( 'JP_NEWS_SITEMAP_INTERVAL' ) ) {
- define( 'JP_NEWS_SITEMAP_INTERVAL', 12 * HOUR_IN_SECONDS );
-}
-
-/*
- * These constants represent the types of various kinds of sitemaps.
- * Note: these strings are used as 'post_types' in the database, and
- * so must be at most 20 characters long.
- */
-
-if ( ! defined( 'JP_MASTER_SITEMAP_TYPE' ) ) {
- define( 'JP_MASTER_SITEMAP_TYPE', 'jp_sitemap_master' );
-}
-
-if ( ! defined( 'JP_PAGE_SITEMAP_TYPE' ) ) {
- define( 'JP_PAGE_SITEMAP_TYPE', 'jp_sitemap' );
-}
-
-if ( ! defined( 'JP_PAGE_SITEMAP_INDEX_TYPE' ) ) {
- define( 'JP_PAGE_SITEMAP_INDEX_TYPE', 'jp_sitemap_index' );
-}
-
-if ( ! defined( 'JP_IMAGE_SITEMAP_TYPE' ) ) {
- define( 'JP_IMAGE_SITEMAP_TYPE', 'jp_img_sitemap' );
-}
-
-if ( ! defined( 'JP_IMAGE_SITEMAP_INDEX_TYPE' ) ) {
- define( 'JP_IMAGE_SITEMAP_INDEX_TYPE', 'jp_img_sitemap_index' );
-}
-
-if ( ! defined( 'JP_VIDEO_SITEMAP_TYPE' ) ) {
- define( 'JP_VIDEO_SITEMAP_TYPE', 'jp_vid_sitemap' );
-}
-
-if ( ! defined( 'JP_VIDEO_SITEMAP_INDEX_TYPE' ) ) {
- define( 'JP_VIDEO_SITEMAP_INDEX_TYPE', 'jp_vid_sitemap_index' );
-}
-
-/**
- * The name (with extension) of a sitemap file of the given
- * type and number.
- *
- * @since 4.8.0
- *
- * @param string $type The sitemap type.
- * @param string $number The sitemap number.
- *
- * @return string The filename.
- */
-function jp_sitemap_filename( $type, $number = null ) {
- if ( is_null( $number ) ) {
- return "error-not-int-$type-$number.xml";
- } elseif ( JP_MASTER_SITEMAP_TYPE === $type ) {
- return 'sitemap.xml';
- } elseif ( JP_PAGE_SITEMAP_TYPE === $type ) {
- return "sitemap-$number.xml";
- } elseif ( JP_PAGE_SITEMAP_INDEX_TYPE === $type ) {
- return "sitemap-index-$number.xml";
- } elseif ( JP_IMAGE_SITEMAP_TYPE === $type ) {
- return "image-sitemap-$number.xml";
- } elseif ( JP_IMAGE_SITEMAP_INDEX_TYPE === $type ) {
- return "image-sitemap-index-$number.xml";
- } elseif ( JP_VIDEO_SITEMAP_TYPE === $type ) {
- return "video-sitemap-$number.xml";
- } elseif ( JP_VIDEO_SITEMAP_INDEX_TYPE === $type ) {
- return "video-sitemap-index-$number.xml";
- } else {
- return "error-bad-type-$type-$number.xml";
- }
-}
-
-/**
- * The index type corresponding to a sitemap type.
- *
- * @since 4.8.0
- *
- * @param string $type The sitemap type.
- *
- * @return string The index type.
- */
-function jp_sitemap_index_type_of( $type ) {
- if ( JP_PAGE_SITEMAP_TYPE === $type ) {
- return JP_PAGE_SITEMAP_INDEX_TYPE;
- } elseif ( JP_IMAGE_SITEMAP_TYPE === $type ) {
- return JP_IMAGE_SITEMAP_INDEX_TYPE;
- } elseif ( JP_VIDEO_SITEMAP_TYPE === $type ) {
- return JP_VIDEO_SITEMAP_INDEX_TYPE;
- } else {
- return "error-bad-type-$type";
- }
-}
-
-/**
- * The sitemap type corresponding to an index type.
- *
- * @since 4.8.0
- *
- * @param string $type The index type.
- *
- * @return string The sitemap type.
- */
-function jp_sitemap_child_type_of( $type ) {
- if ( JP_PAGE_SITEMAP_INDEX_TYPE === $type ) {
- return JP_PAGE_SITEMAP_TYPE;
- } elseif ( JP_IMAGE_SITEMAP_INDEX_TYPE === $type ) {
- return JP_IMAGE_SITEMAP_TYPE;
- } elseif ( JP_VIDEO_SITEMAP_INDEX_TYPE === $type ) {
- return JP_VIDEO_SITEMAP_TYPE;
- } else {
- return "error-bad-type-$type";
- }
-}
-
-/**
- * Convert '0000-00-00 00:00:00' to '0000-00-00T00:00:00Z'.
- * Note that the input is assumed to be in UTC (a.k.a. GMT).
- *
- * @link https://www.w3.org/TR/NOTE-datetime
- * @since 4.8.0
- *
- * @param string $datetime The timestamp to convert.
- *
- * @return string The converted timestamp.
- */
-function jp_sitemap_datetime( $datetime ) {
- $regex = '/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/';
-
- if ( preg_match( $regex, $datetime ) ) {
- return str_replace( ' ', 'T', $datetime ) . 'Z';
- } else {
- return $datetime;
- }
-}
diff --git a/plugins/jetpack/modules/sitemaps/sitemap-finder.php b/plugins/jetpack/modules/sitemaps/sitemap-finder.php
deleted file mode 100644
index ae6335ce..00000000
--- a/plugins/jetpack/modules/sitemaps/sitemap-finder.php
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-/**
- * The functions in this class provide an API for handling
- * sitemap related URIs.
- *
- * @package Jetpack
- * @since 4.8.0
- * @author Automattic
- */
-
-/**
- * The Jetpack_Sitemap_Finder object deals with constructing
- * sitemap URIs.
- *
- * @since 4.8.0
- */
-class Jetpack_Sitemap_Finder {
-
- /**
- * Construct the complete URL of a sitemap file. Depends on
- * permalink settings.
- *
- * @access public
- * @since 4.8.0
- * @since 4.8.1 Call jetpack_sitemap_uri()
- *
- * @param string $filename The filename of the sitemap.
- *
- * @return string Complete URI of the given sitemap file.
- */
- public function construct_sitemap_url( $filename ) {
- $url = jetpack_sitemap_uri( $filename );
-
- if ( pathinfo( $filename, PATHINFO_EXTENSION ) === 'xsl' ) {
- // strip scheme for sites where sitemap could be access via http or https
- $url = preg_replace( '/^https?:/', '', $url );
- }
-
- return $url;
- }
-
- /**
- * Path and query prefix of sitemap files. Depends on permalink
- * settings.
- *
- * @access public
- * @since 4.8.0
- *
- * @return string The path+query prefix.
- */
- public function the_jetpack_sitemap_path_and_query_prefix() {
- global $wp_rewrite;
-
- // Get path fragment from home_url().
- $home = wp_parse_url( home_url() );
- if ( isset( $home['path'] ) ) {
- $home_path = $home['path'];
- } else {
- $home_path = '';
- }
-
- // Get additional path fragment from filter.
- $location = Jetpack_Options::get_option_and_ensure_autoload(
- 'jetpack_sitemap_location',
- ''
- );
-
- if ( $wp_rewrite->using_index_permalinks() ) {
- return $home_path . '/index.php' . $location . '/';
- } elseif ( $wp_rewrite->using_permalinks() ) {
- return $home_path . $location . '/';
- } else {
- return $home_path . $location . '/?jetpack-sitemap=';
- }
- }
-
- /**
- * Examine a path+query URI fragment looking for a sitemap request.
- *
- * @access public
- * @since 4.8.0
- *
- * @param string $raw_uri A URI (path+query only) to test for sitemap-ness.
- *
- * @return array @args {
- * @type string $sitemap_name The recognized sitemap name (or null).
- * }
- */
- public function recognize_sitemap_uri( $raw_uri ) {
- // The path+query where sitemaps are served.
- $sitemap_path = $this->the_jetpack_sitemap_path_and_query_prefix();
-
- // A regex which detects $sitemap_path at the beginning of a string.
- $path_regex = '/^' . preg_quote( $sitemap_path, '/' ) . '/';
-
- // Check that the request URI begins with the sitemap path.
- if ( preg_match( $path_regex, $raw_uri ) ) {
- // Strip off the $sitemap_path and any trailing slash.
- $stripped_uri = preg_replace( $path_regex, '', rtrim( $raw_uri, '/' ) );
- } else {
- $stripped_uri = '';
- }
-
- // Check that the stripped uri begins with one of the sitemap prefixes.
- if ( preg_match( '/^sitemap|^image-s|^news-s|^video-s/', $stripped_uri ) ) {
- $filename = $stripped_uri;
- } else {
- $filename = null;
- }
-
- return array(
- 'sitemap_name' => $filename,
- );
- }
-
-}
diff --git a/plugins/jetpack/modules/sitemaps/sitemap-librarian.php b/plugins/jetpack/modules/sitemaps/sitemap-librarian.php
deleted file mode 100644
index c923c952..00000000
--- a/plugins/jetpack/modules/sitemaps/sitemap-librarian.php
+++ /dev/null
@@ -1,431 +0,0 @@
-<?php
-/**
- * Sitemaps are stored in the database using a custom table. This class
- * provides a small API for storing and retrieving sitemap data so we can
- * avoid lots of explicit SQL juggling while building sitemaps. This file
- * also includes the SQL used to retrieve posts and images to be included
- * in the sitemaps.
- *
- * @since 4.8.0
- * @package Jetpack
- */
-
-/* Ensure sitemap constants are available. */
-require_once dirname( __FILE__ ) . '/sitemap-constants.php';
-
-/**
- * This object handles any database interaction required
- * for sitemap generation.
- *
- * @since 4.8.0
- */
-class Jetpack_Sitemap_Librarian {
-
- /**
- * Retrieve a single sitemap with given name and type.
- * Returns null if no such sitemap exists.
- *
- * @access public
- * @since 4.8.0
- *
- * @param string $name Name of the sitemap to be retrieved.
- * @param string $type Type of the sitemap to be retrieved.
- *
- * @return array $args {
- * @type int $id ID number of the sitemap in the database.
- * @type string $timestamp Most recent timestamp of the resources pointed to.
- * @type string $name Name of the sitemap in the database.
- * @type string $type Type of the sitemap in the database.
- * @type string $text The content of the sitemap.
- * }
- */
- public function read_sitemap_data( $name, $type ) {
- $post_array = get_posts(
- array(
- 'numberposts' => 1,
- 'title' => $name,
- 'post_type' => $type,
- 'post_status' => 'draft',
- )
- );
-
- $the_post = array_shift( $post_array );
-
- if ( null === $the_post ) {
- return null;
- } else {
- return array(
- 'id' => $the_post->ID,
- 'timestamp' => $the_post->post_date,
- 'name' => $the_post->post_title,
- 'type' => $the_post->post_type,
- 'text' => base64_decode( $the_post->post_content ),
- );
- }
- }
-
- /**
- * Store a sitemap of given type and index in the database.
- * Note that the timestamp is reencoded as 'Y-m-d H:i:s'.
- *
- * If a sitemap with that type and name does not exist, create it.
- * If a sitemap with that type and name does exist, update it.
- *
- * @access public
- * @since 4.8.0
- *
- * @param string $index Index of the sitemap to be stored.
- * @param string $type Type of the sitemap to be stored.
- * @param string $contents Contents of the sitemap to be stored.
- * @param string $timestamp Timestamp of the sitemap to be stored, in 'YYYY-MM-DD hh:mm:ss' format.
- */
- public function store_sitemap_data( $index, $type, $contents, $timestamp ) {
- $name = jp_sitemap_filename( $type, $index );
-
- $the_post = $this->read_sitemap_data( $name, $type );
-
- if ( null === $the_post ) {
- // Post does not exist.
- wp_insert_post(
- array(
- 'post_title' => $name,
- 'post_content' => base64_encode( $contents ),
- 'post_type' => $type,
- 'post_date' => date( 'Y-m-d H:i:s', strtotime( $timestamp ) ),
- )
- );
- } else {
- // Post does exist.
- wp_insert_post(
- array(
- 'ID' => $the_post['id'],
- 'post_title' => $name,
- 'post_content' => base64_encode( $contents ),
- 'post_type' => $type,
- 'post_date' => date( 'Y-m-d H:i:s', strtotime( $timestamp ) ),
- )
- );
- }
- }
-
- /**
- * Delete a sitemap by name and type.
- *
- * @access public
- * @since 4.8.0
- *
- * @param string $name Row name.
- * @param string $type Row type.
- *
- * @return bool 'true' if a row was deleted, 'false' otherwise.
- */
- public function delete_sitemap_data( $name, $type ) {
- $the_post = $this->read_sitemap_data( $name, $type );
-
- if ( null === $the_post ) {
- return false;
- } else {
- wp_delete_post( $the_post['id'] );
- return true;
- }
- }
-
- /**
- * Retrieve the contents of a sitemap with given name and type.
- * If no such sitemap exists, return the empty string. Note that the
- * returned string is run through wp_specialchars_decode.
- *
- * @access public
- * @since 4.8.0
- *
- * @param string $name Row name.
- * @param string $type Row type.
- *
- * @return string Text of the specified sitemap, or the empty string.
- */
- public function get_sitemap_text( $name, $type ) {
- $row = $this->read_sitemap_data( $name, $type );
-
- if ( null === $row ) {
- return '';
- } else {
- return $row['text'];
- }
- }
-
- /**
- * Delete numbered sitemaps named prefix-(p+1), prefix-(p+2), ...
- * until the first nonexistent sitemap is found.
- *
- * @access public
- * @since 4.8.0
- *
- * @param int $position Number before the first sitemap to be deleted.
- * @param string $type Sitemap type.
- */
- public function delete_numbered_sitemap_rows_after( $position, $type ) {
- $any_left = true;
-
- while ( true === $any_left ) {
- $position++;
- $name = jp_sitemap_filename( $type, $position );
- $any_left = $this->delete_sitemap_data( $name, $type );
- }
- }
-
- /**
- * Deletes all stored sitemap data.
- *
- * @access public
- * @since 4.8.0
- */
- public function delete_all_stored_sitemap_data() {
- $this->delete_sitemap_type_data( JP_MASTER_SITEMAP_TYPE );
- $this->delete_sitemap_type_data( JP_PAGE_SITEMAP_TYPE );
- $this->delete_sitemap_type_data( JP_PAGE_SITEMAP_INDEX_TYPE );
- $this->delete_sitemap_type_data( JP_IMAGE_SITEMAP_TYPE );
- $this->delete_sitemap_type_data( JP_IMAGE_SITEMAP_INDEX_TYPE );
- $this->delete_sitemap_type_data( JP_VIDEO_SITEMAP_TYPE );
- $this->delete_sitemap_type_data( JP_VIDEO_SITEMAP_INDEX_TYPE );
- }
-
- /**
- * Deletes all sitemap data of specific type
- *
- * @access protected
- * @since 5.3.0
- *
- * @param String $type Type of sitemap.
- */
- protected function delete_sitemap_type_data( $type ) {
- $ids = get_posts(
- array(
- 'post_type' => $type,
- 'post_status' => 'draft',
- 'fields' => 'ids',
- )
- );
-
- foreach ( $ids as $id ) {
- wp_trash_post( $id );
- }
- }
-
- /**
- * Retrieve an array of sitemap rows (of a given type) sorted by ID.
- *
- * Returns the smallest $num_posts sitemap rows (measured by ID)
- * of the given type which are larger than $from_id.
- *
- * @access public
- * @since 4.8.0
- *
- * @param string $type Type of the sitemap rows to retrieve.
- * @param int $from_id Greatest lower bound of retrieved sitemap post IDs.
- * @param int $num_posts Largest number of sitemap posts to retrieve.
- *
- * @return array The sitemaps, as an array of associative arrays.
- */
- public function query_sitemaps_after_id( $type, $from_id, $num_posts ) {
- global $wpdb;
-
- return $wpdb->get_results(
- $wpdb->prepare(
- "SELECT *
- FROM $wpdb->posts
- WHERE post_type=%s
- AND post_status=%s
- AND ID>%d
- ORDER BY ID ASC
- LIMIT %d;",
- $type,
- 'draft',
- $from_id,
- $num_posts
- ),
- ARRAY_A
- ); // WPCS: db call ok; no-cache ok.
- }
-
- /**
- * Retrieve an array of posts sorted by ID.
- *
- * More precisely, returns the smallest $num_posts posts
- * (measured by ID) which are larger than $from_id.
- *
- * @access public
- * @since 4.8.0
- *
- * @param int $from_id Greatest lower bound of retrieved post IDs.
- * @param int $num_posts Largest number of posts to retrieve.
- *
- * @return array The posts.
- */
- public function query_posts_after_id( $from_id, $num_posts ) {
- global $wpdb;
-
- // Get the list of post types to include and prepare for query.
- $post_types = Jetpack_Options::get_option_and_ensure_autoload(
- 'jetpack_sitemap_post_types',
- array( 'page', 'post' )
- );
- foreach ( (array) $post_types as $i => $post_type ) {
- $post_types[ $i ] = $wpdb->prepare( '%s', $post_type );
- }
- $post_types_list = join( ',', $post_types );
-
- return $wpdb->get_results(
- $wpdb->prepare(
- "SELECT *
- FROM $wpdb->posts
- WHERE post_status='publish'
- AND post_type IN ($post_types_list)
- AND ID>%d
- ORDER BY ID ASC
- LIMIT %d;",
- $from_id,
- $num_posts
- )
- ); // WPCS: db call ok; no-cache ok.
- }
-
- /**
- * Get the most recent timestamp among approved comments for the given post_id.
- *
- * @access public
- * @since 4.8.0
- *
- * @param int $post_id Post identifier.
- *
- * @return int Timestamp in 'Y-m-d h:i:s' format (UTC) of the most recent comment on the given post, or null if no such comments exist.
- */
- public function query_latest_approved_comment_time_on_post( $post_id ) {
- global $wpdb;
-
- return $wpdb->get_var(
- $wpdb->prepare(
- "SELECT MAX(comment_date_gmt)
- FROM $wpdb->comments
- WHERE comment_post_ID = %d AND comment_approved = '1' AND comment_type=''",
- $post_id
- )
- );
- }
-
- /**
- * Retrieve an array of image posts sorted by ID.
- *
- * More precisely, returns the smallest $num_posts image posts
- * (measured by ID) which are larger than $from_id.
- *
- * @access public
- * @since 4.8.0
- *
- * @param int $from_id Greatest lower bound of retrieved image post IDs.
- * @param int $num_posts Largest number of image posts to retrieve.
- *
- * @return array The posts.
- */
- public function query_images_after_id( $from_id, $num_posts ) {
- global $wpdb;
-
- return $wpdb->get_results(
- $wpdb->prepare(
- "SELECT *
- FROM $wpdb->posts
- WHERE post_type='attachment'
- AND post_mime_type LIKE %s
- AND ID>%d
- ORDER BY ID ASC
- LIMIT %d;",
- 'image/%',
- $from_id,
- $num_posts
- )
- ); // WPCS: db call ok; no-cache ok.
- }
-
- /**
- * Retrieve an array of video posts sorted by ID.
- *
- * More precisely, returns the smallest $num_posts video posts
- * (measured by ID) which are larger than $from_id.
- *
- * @access public
- * @since 4.8.0
- *
- * @param int $from_id Greatest lower bound of retrieved video post IDs.
- * @param int $num_posts Largest number of video posts to retrieve.
- *
- * @return array The posts.
- */
- public function query_videos_after_id( $from_id, $num_posts ) {
- global $wpdb;
-
- return $wpdb->get_results(
- $wpdb->prepare(
- "SELECT *
- FROM $wpdb->posts
- WHERE post_type='attachment'
- AND post_mime_type LIKE %s
- AND ID>%d
- ORDER BY ID ASC
- LIMIT %d;",
- 'video/%',
- $from_id,
- $num_posts
- )
- ); // WPCS: db call ok; no-cache ok.
- }
-
- /**
- * Retrieve an array of published posts from the last 2 days.
- *
- * @access public
- * @since 4.8.0
- *
- * @param int $num_posts Largest number of posts to retrieve.
- *
- * @return array The posts.
- */
- public function query_most_recent_posts( $num_posts ) {
- global $wpdb;
-
- $two_days_ago = date( 'Y-m-d', strtotime( '-2 days' ) );
-
- /**
- * Filter post types to be included in news sitemap.
- *
- * @module sitemaps
- *
- * @since 3.9.0
- *
- * @param array $post_types Array with post types to include in news sitemap.
- */
- $post_types = apply_filters(
- 'jetpack_sitemap_news_sitemap_post_types',
- array( 'page', 'post' )
- );
-
- foreach ( (array) $post_types as $i => $post_type ) {
- $post_types[ $i ] = $wpdb->prepare( '%s', $post_type );
- }
-
- $post_types_list = join( ',', $post_types );
-
- return $wpdb->get_results(
- $wpdb->prepare(
- "SELECT *
- FROM $wpdb->posts
- WHERE post_status='publish'
- AND post_date >= '%s'
- AND post_type IN ($post_types_list)
- ORDER BY post_date DESC
- LIMIT %d;",
- $two_days_ago,
- $num_posts
- )
- ); // WPCS: db call ok; no-cache ok.
- }
-
-}
diff --git a/plugins/jetpack/modules/sitemaps/sitemap-logger.php b/plugins/jetpack/modules/sitemaps/sitemap-logger.php
deleted file mode 100644
index 1173aa79..00000000
--- a/plugins/jetpack/modules/sitemaps/sitemap-logger.php
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-/**
- * A message logger for the Jetpack Sitemap module.
- *
- * @package Jetpack
- * @since 4.8.0
- */
-
-/**
- * Handles logging errors and debug messages for sitemap generator.
- *
- * A Jetpack_Sitemap_Logger object keeps track of its birth time as well
- * as a "unique" ID string. Calling the report() method writes a message
- * to the PHP error log as well as the ID string for easier grepping.
- *
- * @since 4.8.0
- */
-class Jetpack_Sitemap_Logger {
- /**
- * A unique-ish string for each logger, enabling us to grep
- * for the messages written by an individual generation phase.
- *
- * @access private
- * @since 4.8.0
- * @var string $key The key string.
- */
- private $key;
-
- /**
- * The birth time of this object in microseconds.
- *
- * @access private
- * @since 4.8.0
- * @var int $starttime The birth time.
- */
- private $starttime;
-
- /**
- * Initializes a new logger object.
- *
- * @access public
- * @since 4.8.0
- *
- * @param string $message An optional message string to be written to the debug log on initialization.
- */
- public function __construct( $message = null ) {
- $this->key = wp_generate_password( 5, false );
- $this->starttime = microtime( true );
- if ( ! is_null( $message ) ) {
- $this->report( $message );
- }
- }
-
- /**
- * Writes a string to the debug log, including the logger's ID string.
- *
- * @access public
- * @since 4.8.0
- *
- * @param string $message The string to be written to the log.
- * @param boolean $is_error If true, $message will be logged even if JETPACK_DEV_DEBUG is not enabled.
- */
- public function report( $message, $is_error = false ) {
- $message = 'jp-sitemap-' . $this->key . ': ' . $message;
- if ( ! ( defined( 'WP_DEBUG' ) && WP_DEBUG ) ) {
- return;
- }
- if ( ! $is_error && ! ( defined( 'JETPACK_DEV_DEBUG' ) && JETPACK_DEV_DEBUG ) ) {
- return;
- }
- error_log( $message ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
- }
-
- /**
- * Writes the elapsed lifetime of the logger to the debug log, with an optional message.
- *
- * @access public
- * @since 4.8.0
- *
- * @param string $message The optional message string. Default is the empty string.
- */
- public function time( $message = '' ) {
- $time = round( microtime( true ) - $this->starttime, 3 );
- $this->report( $message . ' ' . $time . ' seconds elapsed.' );
- }
-}
diff --git a/plugins/jetpack/modules/sitemaps/sitemap-state.php b/plugins/jetpack/modules/sitemaps/sitemap-state.php
deleted file mode 100644
index 2157628e..00000000
--- a/plugins/jetpack/modules/sitemaps/sitemap-state.php
+++ /dev/null
@@ -1,144 +0,0 @@
-<?php
-/**
- * Abstract sitemap generation state class.
- *
- * @package Jetpack
- * @since 4.8.0
- * @author Automattic
- */
-
-/* Include standard constants and librarian. */
-require_once dirname( __FILE__ ) . '/sitemap-constants.php';
-require_once dirname( __FILE__ ) . '/sitemap-librarian.php';
-
-if ( defined( 'WP_DEBUG' ) && ( true === WP_DEBUG ) ) {
- require_once dirname( __FILE__ ) . '/sitemap-logger.php';
-}
-
-/**
- * This class provides an interface for storing and retrieving
- * the state of a sitemap generation phase. Whenever the builder
- * wants to build a new sitemap page, it uses this class to see
- * what the current state of the sitemap is. The lock is stored
- * as a transient with max lifetime of 15 minutes; this way if our
- * builder times out before unlocking the state, the lock will expire
- * before the builder tries again.
- *
- * @since 4.8.0
- */
-class Jetpack_Sitemap_State {
-
- /**
- * Initial state for the sitemap generator.
- *
- * @access public
- * @since 4.8.0
- *
- * @param string $type The initial sitemap type.
- *
- * @return array $args {
- * @type string sitemap-type The type of sitemap to be generated.
- * @type int last-added The largest index to be added to a generated sitemap page.
- * @type int number The index of the last sitemap to be generated.
- * @type string last-modified The latest timestamp seen.
- * @type array max The latest index of each sitemap type seen.
- * }
- */
- private static function initial( $type = JP_PAGE_SITEMAP_TYPE ) {
- return array(
- 'sitemap-type' => $type,
- 'last-added' => 0,
- 'number' => 0,
- 'last-modified' => '1970-01-01 00:00:00',
- 'max' => array(),
- );
- }
-
- /**
- * Reset the sitemap state.
- *
- * @param string $type The initial sitemap type.
- *
- * @access public
- * @since 4.8.0
- */
- public static function reset( $type ) {
- delete_transient( 'jetpack-sitemap-state-lock' );
- update_option(
- 'jetpack-sitemap-state',
- self::initial( $type )
- );
- }
-
- /**
- * Store a sitemap state, and unlock it.
- *
- * @access public
- * @since 4.8.0
- *
- * @param array $state Array of the Sitemap state details.
- * @type string sitemap-type The type of sitemap to be generated.
- * @type int last-added The largest index to be added to a generated sitemap page.
- * @type int number The index of the last sitemap to be generated.
- * @type string last-modified The latest timestamp seen.
- */
- public static function check_in( $state ) {
- // Get the old max value.
- $sitemap_old = get_option( 'jetpack-sitemap-state', self::initial() );
- $state['max'] = $sitemap_old['max'];
-
- // Update the max value of the current type.
- $state['max'][ $state['sitemap-type'] ]['number'] = $state['number'];
- $state['max'][ $state['sitemap-type'] ]['lastmod'] = $state['last-modified'];
-
- update_option( 'jetpack-sitemap-state', $state );
- }
-
- /**
- * Unlock the sitemap state.
- *
- * @access public
- * @since 4.8.0
- */
- public static function unlock() {
- delete_transient( 'jetpack-sitemap-state-lock' );
- }
-
- /**
- * Read the stored sitemap state. Returns false if the state is locked.
- *
- * @access public
- * @since 4.8.0
- *
- * @return bool|array $args {
- * @type string sitemap-type The type of sitemap to be generated.
- * @type int last-added The largest index to be added to a generated sitemap page.
- * @type int number The index of the last sitemap to be generated.
- * @type string last-modified The latest timestamp seen.
- * @type array max The latest index of each sitemap type seen.
- * }
- */
- public static function check_out() {
- // See if the state is locked.
- if ( true === get_transient( 'jetpack-sitemap-state-lock' ) ) {
- // If it is, return false.
- return false;
- } else {
- // Otherwise, lock the state for 15 minutes and then return it.
- set_transient( 'jetpack-sitemap-state-lock', true, JP_SITEMAP_LOCK_INTERVAL );
- return get_option( 'jetpack-sitemap-state', self::initial() );
- }
- }
-
- /**
- * Delete the stored state and lock.
- *
- * @access public
- * @since 4.8.0
- */
- public static function delete() {
- delete_transient( 'jetpack-sitemap-state-lock' );
- delete_option( 'jetpack-sitemap-state' );
- }
-
-}
diff --git a/plugins/jetpack/modules/sitemaps/sitemap-stylist.php b/plugins/jetpack/modules/sitemaps/sitemap-stylist.php
deleted file mode 100644
index ce883d7f..00000000
--- a/plugins/jetpack/modules/sitemaps/sitemap-stylist.php
+++ /dev/null
@@ -1,783 +0,0 @@
-<?php
-/**
- * The XSL used to style sitemaps is essentially a bunch of
- * static strings. This class handles the construction of
- * those strings.
- *
- * @package Jetpack
- * @since 4.8.0
- */
-
-/**
- * Builds the XSL files required by Jetpack_Sitemap_Manager.
- *
- * @since 4.8.0
- */
-class Jetpack_Sitemap_Stylist {
-
- /**
- * Convert named entities, strip all HTML except anchor tags,
- * and interpolate with vsprintf. This is a helper function
- * for all the internationalized UI strings in this class
- * which have to include URLs.
- *
- * Note that $url_array should be indexed by integers like so:
- *
- * array(
- * 1 => 'example.com',
- * 2 => 'example.org',
- * );
- *
- * Then '%1$s' in the format string will substitute 'example.com'
- * and '%2$s' will substitute 'example.org'.
- *
- * @access private
- * @since 4.8.0
- * @link http://php.net/manual/en/function.vsprintf.php Format string documentation.
- *
- * @param string $format A vsprintf-style format string to be sanitized.
- * @param array $url_array The string substitution array to be passed to vsprintf.
- *
- * @return string The sanitized string.
- */
- private static function sanitize_with_links( $format, $url_array ) {
- return vsprintf(
- wp_kses(
- ent2ncr( $format ),
- array(
- 'a' => array(
- 'href' => true,
- 'title' => true,
- ),
- )
- ),
- $url_array
- );
- }
-
- /**
- * Returns the xsl of a sitemap xml file as a string.
- *
- * @access public
- * @since 4.8.0
- *
- * @return string The contents of the xsl file.
- */
- public static function sitemap_xsl() {
- $title = esc_html( ent2ncr( __( 'XML Sitemap', 'jetpack' ) ) );
- $header_url = esc_html( ent2ncr( __( 'URL', 'jetpack' ) ) );
- $header_lastmod = esc_html( ent2ncr( __( 'Last Modified', 'jetpack' ) ) );
-
- $description = self::sanitize_with_links(
- __(
- 'This is an XML Sitemap generated by <a href="%1$s" rel="noopener noreferrer" target="_blank">Jetpack</a>, meant to be consumed by search engines like <a href="%2$s" rel="noopener noreferrer" target="_blank">Google</a> or <a href="%3$s" rel="noopener noreferrer" target="_blank">Bing</a>.',
- 'jetpack'
- ),
- array(
- 1 => 'http://jetpack.com/',
- 2 => 'https://www.google.com/',
- 3 => 'https://www.bing.com/',
- )
- );
-
- $more_info = self::sanitize_with_links(
- __(
- 'You can find more information on XML sitemaps at <a href="%1$s" rel="noopener noreferrer" target="_blank">sitemaps.org</a>',
- 'jetpack'
- ),
- array(
- 1 => 'http://sitemaps.org',
- )
- );
-
- $generated_by = self::sanitize_with_links(
- __(
- 'Generated by <a href="%s" rel="noopener noreferrer" target="_blank">Jetpack for WordPress</a>',
- 'jetpack'
- ),
- array(
- 1 => 'https://jetpack.com',
- )
- );
-
- $css = self::sitemap_xsl_css();
-
- return <<<XSL
-<?xml version='1.0' encoding='UTF-8'?>
-<xsl:stylesheet version='2.0'
- xmlns:html='http://www.w3.org/TR/REC-html40'
- xmlns:sitemap='http://www.sitemaps.org/schemas/sitemap/0.9'
- xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
-<xsl:output method='html' version='1.0' encoding='UTF-8' indent='yes'/>
-<xsl:template match="/">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <title>$title</title>
- <meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
- <style type='text/css'>
-$css
- </style>
-</head>
-<body>
- <div id='description'>
- <h1>$title</h1>
- <p>$description</p>
- <p>$more_info</p>
- </div>
- <div id='content'>
- <!-- <xsl:value-of select="count(sitemap:urlset/sitemap:url)"/> -->
- <table>
- <tr>
- <th>#</th>
- <th>$header_url</th>
- <th>$header_lastmod</th>
- </tr>
- <xsl:for-each select="sitemap:urlset/sitemap:url">
- <tr>
- <xsl:choose>
- <xsl:when test='position() mod 2 != 1'>
- <xsl:attribute name="class">odd</xsl:attribute>
- </xsl:when>
- </xsl:choose>
- <td>
- <xsl:value-of select = "position()" />
- </td>
- <td>
- <xsl:variable name='itemURL'>
- <xsl:value-of select='sitemap:loc'/>
- </xsl:variable>
- <a href='{\$itemURL}'>
- <xsl:value-of select='sitemap:loc'/>
- </a>
- </td>
- <td>
- <xsl:value-of select='sitemap:lastmod'/>
- </td>
- </tr>
- </xsl:for-each>
- </table>
- </div>
- <div id='footer'>
- <p>$generated_by</p>
- </div>
-</body>
-</html>
-</xsl:template>
-</xsl:stylesheet>\n
-XSL;
- }
-
- /**
- * Returns the xsl of a sitemap index xml file as a string.
- *
- * @access public
- * @since 4.8.0
- *
- * @return string The contents of the xsl file.
- */
- public static function sitemap_index_xsl() {
- $title = esc_html( ent2ncr( __( 'XML Sitemap Index', 'jetpack' ) ) );
- $header_url = esc_html( ent2ncr( __( 'Sitemap URL', 'jetpack' ) ) );
- $header_lastmod = esc_html( ent2ncr( __( 'Last Modified', 'jetpack' ) ) );
-
- $description = self::sanitize_with_links(
- __(
- 'This is an XML Sitemap Index generated by <a href="%1$s" rel="noopener noreferrer" target="_blank">Jetpack</a>, meant to be consumed by search engines like <a href="%2$s" rel="noopener noreferrer" target="_blank">Google</a> or <a href="%3$s" rel="noopener noreferrer" target="_blank">Bing</a>.',
- 'jetpack'
- ),
- array(
- 1 => 'http://jetpack.com/',
- 2 => 'https://www.google.com/',
- 3 => 'https://www.bing.com/',
- )
- );
-
- if ( current_user_can( 'manage_options' ) ) {
- $next = human_time_diff( wp_next_scheduled( 'jp_sitemap_cron_hook' ) );
- /* translators: %s is a human_time_diff until next sitemap generation. */
- $no_nodes_warning = sprintf( __( 'No sitemap found. The system will try to build it again in %s.', 'jetpack' ), $next );
- } else {
- $no_nodes_warning = '';
- }
-
- $more_info = self::sanitize_with_links(
- __(
- 'You can find more information on XML sitemaps at <a href="%1$s" rel="noopener noreferrer" target="_blank">sitemaps.org</a>',
- 'jetpack'
- ),
- array(
- 1 => 'http://sitemaps.org',
- )
- );
-
- $generated_by = self::sanitize_with_links(
- __(
- 'Generated by <a href="%s" rel="noopener noreferrer" target="_blank">Jetpack for WordPress</a>',
- 'jetpack'
- ),
- array(
- 1 => 'https://jetpack.com',
- )
- );
-
- $css = self::sitemap_xsl_css();
-
- return <<<XSL
-<?xml version='1.0' encoding='UTF-8'?>
-<xsl:stylesheet version='2.0'
- xmlns:html='http://www.w3.org/TR/REC-html40'
- xmlns:sitemap='http://www.sitemaps.org/schemas/sitemap/0.9'
- xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
-<xsl:output method='html' version='1.0' encoding='UTF-8' indent='yes'/>
-<xsl:template match="/">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <title>$title</title>
- <meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
- <style type='text/css'>
-$css
- </style>
-</head>
-<body>
- <div id='description'>
- <h1>$title</h1>
- <xsl:choose>
- <xsl:when test='not(sitemap:sitemapindex/sitemap:sitemap)'>
- <p><strong>$no_nodes_warning</strong></p>
- </xsl:when>
- </xsl:choose>
- <p>$description</p>
- <p>$more_info</p>
- </div>
- <div id='content'>
- <table>
- <tr>
- <th>#</th>
- <th>$header_url</th>
- <th>$header_lastmod</th>
- </tr>
- <xsl:for-each select='sitemap:sitemapindex/sitemap:sitemap'>
- <tr>
- <xsl:choose>
- <xsl:when test='position() mod 2 != 1'>
- <xsl:attribute name="class">odd</xsl:attribute>
- </xsl:when>
- </xsl:choose>
- <td>
- <xsl:value-of select = "position()" />
- </td>
- <td>
- <xsl:variable name='itemURL'>
- <xsl:value-of select='sitemap:loc'/>
- </xsl:variable>
- <a href='{\$itemURL}'>
- <xsl:value-of select='sitemap:loc'/>
- </a>
- </td>
- <td>
- <xsl:value-of select='sitemap:lastmod'/>
- </td>
- </tr>
- </xsl:for-each>
- </table>
- </div>
- <div id='footer'>
- <p>$generated_by</p>
- </div>
-</body>
-</html>
-</xsl:template>
-</xsl:stylesheet>\n
-XSL;
- }
-
- /**
- * Returns the xsl of an image sitemap xml file as a string.
- *
- * @access public
- * @since 4.8.0
- *
- * @return string The contents of the xsl file.
- */
- public static function image_sitemap_xsl() {
- $title = esc_html( ent2ncr( __( 'XML Image Sitemap', 'jetpack' ) ) );
- $header_url = esc_html( ent2ncr( __( 'Page URL', 'jetpack' ) ) );
- $header_image_url = esc_html( ent2ncr( __( 'Image URL', 'jetpack' ) ) );
- $header_thumbnail = esc_html( ent2ncr( __( 'Thumbnail', 'jetpack' ) ) );
- $header_title = esc_html( ent2ncr( __( 'Title', 'jetpack' ) ) );
- $header_lastmod = esc_html( ent2ncr( __( 'Last Modified', 'jetpack' ) ) );
- $header_caption = esc_html( ent2ncr( __( 'Caption', 'jetpack' ) ) );
-
- $description = self::sanitize_with_links(
- __(
- 'This is an XML Image Sitemap generated by <a href="%1$s" rel="noopener noreferrer" target="_blank">Jetpack</a>, meant to be consumed by search engines like <a href="%2$s" rel="noopener noreferrer" target="_blank">Google</a> or <a href="%3$s" rel="noopener noreferrer" target="_blank">Bing</a>.',
- 'jetpack'
- ),
- array(
- 1 => 'http://jetpack.com/',
- 2 => 'https://www.google.com/',
- 3 => 'https://www.bing.com/',
- )
- );
-
- $more_info = self::sanitize_with_links(
- __(
- 'You can find more information on XML sitemaps at <a href="%1$s" rel="noopener noreferrer" target="_blank">sitemaps.org</a>',
- 'jetpack'
- ),
- array(
- 1 => 'http://sitemaps.org',
- )
- );
-
- $generated_by = self::sanitize_with_links(
- __(
- 'Generated by <a href="%s" rel="noopener noreferrer" target="_blank">Jetpack for WordPress</a>',
- 'jetpack'
- ),
- array(
- 1 => 'https://jetpack.com',
- )
- );
-
- $css = self::sitemap_xsl_css();
-
- return <<<XSL
-<?xml version='1.0' encoding='UTF-8'?>
-<xsl:stylesheet version='2.0'
- xmlns:html='http://www.w3.org/TR/REC-html40'
- xmlns:sitemap='http://www.sitemaps.org/schemas/sitemap/0.9'
- xmlns:image='http://www.google.com/schemas/sitemap-image/1.1'
- xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
-<xsl:output method='html' version='1.0' encoding='UTF-8' indent='yes'/>
-<xsl:template match="/">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <title>$title</title>
- <meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
- <style type='text/css'>
-$css
- </style>
-</head>
-<body>
- <div id='description'>
- <h1>$title</h1>
- <p>$description</p>
- <p>$more_info</p>
- </div>
- <div id='content'>
- <!-- <xsl:value-of select="count(sitemap:urlset/sitemap:url)"/> -->
- <table>
- <tr>
- <th>#</th>
- <th>$header_url</th>
- <th>$header_image_url</th>
- <th>$header_title</th>
- <th>$header_caption</th>
- <th>$header_lastmod</th>
- <th>$header_thumbnail</th>
- </tr>
- <xsl:for-each select="sitemap:urlset/sitemap:url">
- <tr>
- <xsl:choose>
- <xsl:when test='position() mod 2 != 1'>
- <xsl:attribute name="class">odd</xsl:attribute>
- </xsl:when>
- </xsl:choose>
- <td>
- <xsl:value-of select = "position()" />
- </td>
- <td>
- <xsl:variable name='pageURL'>
- <xsl:value-of select='sitemap:loc'/>
- </xsl:variable>
- <a href='{\$pageURL}'>
- <xsl:value-of select='sitemap:loc'/>
- </a>
- </td>
- <xsl:variable name='itemURL'>
- <xsl:value-of select='image:image/image:loc'/>
- </xsl:variable>
- <td>
- <a href='{\$itemURL}'>
- <xsl:value-of select='image:image/image:loc'/>
- </a>
- </td>
- <td>
- <xsl:value-of select='image:image/image:title'/>
- </td>
- <td>
- <xsl:value-of select='image:image/image:caption'/>
- </td>
- <td>
- <xsl:value-of select='sitemap:lastmod'/>
- </td>
- <td>
- <a href='{\$itemURL}'>
- <img class='thumbnail' src='{\$itemURL}'/>
- </a>
- </td>
- </tr>
- </xsl:for-each>
- </table>
- </div>
- <div id='footer'>
- <p>$generated_by</p>
- </div>
-</body>
-</html>
-</xsl:template>
-</xsl:stylesheet>\n
-XSL;
- }
-
- /**
- * Returns the xsl of a video sitemap xml file as a string.
- *
- * @access public
- * @since 4.8.0
- *
- * @return string The contents of the xsl file.
- */
- public static function video_sitemap_xsl() {
- $title = esc_html( ent2ncr( __( 'XML Video Sitemap', 'jetpack' ) ) );
- $header_url = esc_html( ent2ncr( __( 'Page URL', 'jetpack' ) ) );
- $header_image_url = esc_html( ent2ncr( __( 'Video URL', 'jetpack' ) ) );
- $header_thumbnail = esc_html( ent2ncr( __( 'Thumbnail', 'jetpack' ) ) );
- $header_title = esc_html( ent2ncr( __( 'Title', 'jetpack' ) ) );
- $header_lastmod = esc_html( ent2ncr( __( 'Last Modified', 'jetpack' ) ) );
- $header_description = esc_html( ent2ncr( __( 'Description', 'jetpack' ) ) );
-
- $description = self::sanitize_with_links(
- __(
- 'This is an XML Video Sitemap generated by <a href="%1$s" rel="noopener noreferrer" target="_blank">Jetpack</a>, meant to be consumed by search engines like <a href="%2$s" rel="noopener noreferrer" target="_blank">Google</a> or <a href="%3$s" rel="noopener noreferrer" target="_blank">Bing</a>.',
- 'jetpack'
- ),
- array(
- 1 => 'http://jetpack.com/',
- 2 => 'https://www.google.com/',
- 3 => 'https://www.bing.com/',
- )
- );
-
- $more_info = self::sanitize_with_links(
- __(
- 'You can find more information on XML sitemaps at <a href="%1$s" rel="noopener noreferrer" target="_blank">sitemaps.org</a>',
- 'jetpack'
- ),
- array(
- 1 => 'http://sitemaps.org',
- )
- );
-
- $generated_by = self::sanitize_with_links(
- __(
- 'Generated by <a href="%s" rel="noopener noreferrer" target="_blank">Jetpack for WordPress</a>',
- 'jetpack'
- ),
- array(
- 1 => 'https://jetpack.com',
- )
- );
-
- $css = self::sitemap_xsl_css();
-
- return <<<XSL
-<?xml version='1.0' encoding='UTF-8'?>
-<xsl:stylesheet version='2.0'
- xmlns:html='http://www.w3.org/TR/REC-html40'
- xmlns:sitemap='http://www.sitemaps.org/schemas/sitemap/0.9'
- xmlns:video='http://www.google.com/schemas/sitemap-video/1.1'
- xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
-<xsl:output method='html' version='1.0' encoding='UTF-8' indent='yes'/>
-<xsl:template match="/">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <title>$title</title>
- <meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
- <style type='text/css'>
-$css
- </style>
-</head>
-<body>
- <div id='description'>
- <h1>$title</h1>
- <p>$description</p>
- <p>$more_info</p>
- </div>
- <div id='content'>
- <!-- <xsl:value-of select="count(sitemap:urlset/sitemap:url)"/> -->
- <table>
- <tr>
- <th>#</th>
- <th>$header_url</th>
- <th>$header_image_url</th>
- <th>$header_title</th>
- <th>$header_description</th>
- <th>$header_lastmod</th>
- <th>$header_thumbnail</th>
- </tr>
- <xsl:for-each select="sitemap:urlset/sitemap:url">
- <tr>
- <xsl:choose>
- <xsl:when test='position() mod 2 != 1'>
- <xsl:attribute name="class">odd</xsl:attribute>
- </xsl:when>
- </xsl:choose>
- <td>
- <xsl:value-of select = "position()" />
- </td>
- <td>
- <xsl:variable name='pageURL'>
- <xsl:value-of select='sitemap:loc'/>
- </xsl:variable>
- <a href='{\$pageURL}'>
- <xsl:value-of select='sitemap:loc'/>
- </a>
- </td>
- <xsl:variable name='itemURL'>
- <xsl:value-of select='video:video/video:content_loc'/>
- </xsl:variable>
- <td>
- <a href='{\$itemURL}'>
- <xsl:value-of select='video:video/video:content_loc'/>
- </a>
- </td>
- <td>
- <xsl:value-of select='video:video/video:title'/>
- </td>
- <td>
- <xsl:value-of select='video:video/video:description'/>
- </td>
- <td>
- <xsl:value-of select='sitemap:lastmod'/>
- </td>
- <td>
- <xsl:variable name='thumbURL'>
- <xsl:value-of select='video:video/video:thumbnail_loc'/>
- </xsl:variable>
- <a href='{\$thumbURL}'>
- <img class='thumbnail' src='{\$thumbURL}'/>
- </a>
- </td>
- </tr>
- </xsl:for-each>
- </table>
- </div>
- <div id='footer'>
- <p>$generated_by</p>
- </div>
-</body>
-</html>
-</xsl:template>
-</xsl:stylesheet>\n
-XSL;
- }
-
- /**
- * Returns the xsl of a news sitemap xml file as a string.
- *
- * @access public
- * @since 4.8.0
- *
- * @return string The contents of the xsl file.
- */
- public static function news_sitemap_xsl() {
- $title = esc_html( ent2ncr( __( 'XML News Sitemap', 'jetpack' ) ) );
- $header_url = esc_html( ent2ncr( __( 'Page URL', 'jetpack' ) ) );
- $header_title = esc_html( ent2ncr( __( 'Title', 'jetpack' ) ) );
- $header_pubdate = esc_html( ent2ncr( __( 'Publication Date', 'jetpack' ) ) );
-
- $description = self::sanitize_with_links(
- __(
- 'This is an XML News Sitemap generated by <a href="%1$s" rel="noopener noreferrer" target="_blank">Jetpack</a>, meant to be consumed by search engines like <a href="%2$s" rel="noopener noreferrer" target="_blank">Google</a> or <a href="%3$s" rel="noopener noreferrer" target="_blank">Bing</a>.',
- 'jetpack'
- ),
- array(
- 1 => 'http://jetpack.com/',
- 2 => 'https://www.google.com/',
- 3 => 'https://www.bing.com/',
- )
- );
-
- $more_info = self::sanitize_with_links(
- __(
- 'You can find more information on XML sitemaps at <a href="%1$s" rel="noopener noreferrer" target="_blank">sitemaps.org</a>',
- 'jetpack'
- ),
- array(
- 1 => 'http://sitemaps.org',
- )
- );
-
- $generated_by = self::sanitize_with_links(
- __(
- 'Generated by <a href="%s" rel="noopener noreferrer" target="_blank">Jetpack for WordPress</a>',
- 'jetpack'
- ),
- array(
- 1 => 'https://jetpack.com',
- )
- );
-
- $css = self::sitemap_xsl_css();
-
- return <<<XSL
-<?xml version='1.0' encoding='UTF-8'?>
-<xsl:stylesheet version='2.0'
- xmlns:html='http://www.w3.org/TR/REC-html40'
- xmlns:sitemap='http://www.sitemaps.org/schemas/sitemap/0.9'
- xmlns:news='http://www.google.com/schemas/sitemap-news/0.9'
- xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
-<xsl:output method='html' version='1.0' encoding='UTF-8' indent='yes'/>
-<xsl:template match="/">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <title>$title</title>
- <meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
- <style type='text/css'>
-$css
- </style>
-</head>
-<body>
- <div id='description'>
- <h1>$title</h1>
- <p>$description</p>
- <p>$more_info</p>
- </div>
- <div id='content'>
- <!-- <xsl:value-of select="count(sitemap:urlset/sitemap:url)"/> -->
- <table>
- <tr>
- <th>#</th>
- <th>$header_url</th>
- <th>$header_title</th>
- <th>$header_pubdate</th>
- </tr>
- <xsl:for-each select="sitemap:urlset/sitemap:url">
- <tr>
- <xsl:choose>
- <xsl:when test='position() mod 2 != 1'>
- <xsl:attribute name="class">odd</xsl:attribute>
- </xsl:when>
- </xsl:choose>
- <td>
- <xsl:value-of select = "position()" />
- </td>
- <xsl:variable name='pageURL'>
- <xsl:value-of select='sitemap:loc'/>
- </xsl:variable>
- <td>
- <a href='{\$pageURL}'>
- <xsl:value-of select='sitemap:loc'/>
- </a>
- </td>
- <td>
- <a href='{\$pageURL}'>
- <xsl:value-of select='news:news/news:title'/>
- </a>
- </td>
- <td>
- <xsl:value-of select='news:news/news:publication_date'/>
- </td>
- </tr>
- </xsl:for-each>
- </table>
- </div>
- <div id='footer'>
- <p>$generated_by</p>
- </div>
-</body>
-</html>
-</xsl:template>
-</xsl:stylesheet>\n
-XSL;
- }
-
- /**
- * The CSS to be included in sitemap xsl stylesheets;
- * factored out for uniformity.
- *
- * @access public
- * @since 4.8.0
- *
- * @return string The CSS.
- */
- public static function sitemap_xsl_css() {
- return <<<CSS
- body {
- font: 14px 'Open Sans', Helvetica, Arial, sans-serif;
- margin: 0;
- }
-
- a {
- color: #3498db;
- text-decoration: none;
- }
-
- h1 {
- margin: 0;
- }
-
- #description {
- background-color: #81a844;
- color: #FFF;
- padding: 30px 30px 20px;
- }
-
- #description a {
- color: #fff;
- }
-
- #content {
- padding: 10px 30px 30px;
- background: #fff;
- }
-
- a:hover {
- border-bottom: 1px solid;
- }
-
- th, td {
- font-size: 12px;
- }
-
- th {
- text-align: left;
- border-bottom: 1px solid #ccc;
- }
-
- th, td {
- padding: 10px 15px;
- }
-
- .odd {
- background-color: #E7F1D4;
- }
-
- #footer {
- margin: 20px 30px;
- font-size: 12px;
- color: #999;
- }
-
- #footer a {
- color: inherit;
- }
-
- #description a, #footer a {
- border-bottom: 1px solid;
- }
-
- #description a:hover, #footer a:hover {
- border-bottom: none;
- }
-
- img.thumbnail {
- max-height: 100px;
- max-width: 100px;
- }
-CSS;
- }
-
-}
diff --git a/plugins/jetpack/modules/sitemaps/sitemaps.php b/plugins/jetpack/modules/sitemaps/sitemaps.php
deleted file mode 100644
index 7078fb8a..00000000
--- a/plugins/jetpack/modules/sitemaps/sitemaps.php
+++ /dev/null
@@ -1,578 +0,0 @@
-<?php
-/**
- * Generate sitemap files in base XML as well as some namespace extensions.
- *
- * This module generates two different base sitemaps.
- *
- * 1. sitemap.xml
- * The basic sitemap is updated regularly by wp-cron. It is stored in the
- * database and retrieved when requested. This sitemap aims to include canonical
- * URLs for all published content and abide by the sitemap spec. This is the root
- * of a tree of sitemap and sitemap index xml files, depending on the number of URLs.
- *
- * By default the sitemap contains published posts of type 'post' and 'page', as
- * well as the home url. To include other post types use the 'jetpack_sitemap_post_types'
- * filter.
- *
- * @link http://sitemaps.org/protocol.php Base sitemaps protocol.
- * @link https://support.google.com/webmasters/answer/178636 Image sitemap extension.
- * @link https://developers.google.com/webmasters/videosearch/sitemaps Video sitemap extension.
- *
- * 2. news-sitemap.xml
- * The news sitemap is generated on the fly when requested. It does not aim for
- * completeness, instead including at most 1000 of the most recent published posts
- * from the previous 2 days, per the news-sitemap spec.
- *
- * @link http://www.google.com/support/webmasters/bin/answer.py?answer=74288 News sitemap extension.
- *
- * @package Jetpack
- * @since 3.9.0
- * @since 4.8.0 Remove 1000 post limit.
- * @author Automattic
- */
-
-/* Include all of the sitemap subclasses. */
-require_once dirname( __FILE__ ) . '/sitemap-constants.php';
-require_once dirname( __FILE__ ) . '/sitemap-buffer.php';
-require_once dirname( __FILE__ ) . '/sitemap-stylist.php';
-require_once dirname( __FILE__ ) . '/sitemap-librarian.php';
-require_once dirname( __FILE__ ) . '/sitemap-finder.php';
-require_once dirname( __FILE__ ) . '/sitemap-builder.php';
-
-if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
- require_once dirname( __FILE__ ) . '/sitemap-logger.php';
-}
-
-/**
- * Governs the generation, storage, and serving of sitemaps.
- *
- * @since 4.8.0
- */
-class Jetpack_Sitemap_Manager {
-
- /**
- * Librarian object for storing and retrieving sitemap data.
- *
- * @see Jetpack_Sitemap_Librarian
- * @since 4.8.0
- * @var Jetpack_Sitemap_Librarian $librarian Librarian object for storing and retrieving sitemap data.
- */
- private $librarian;
-
- /**
- * Logger object for reporting debug messages.
- *
- * @see Jetpack_Sitemap_Logger
- * @since 4.8.0
- * @var Jetpack_Sitemap_Logger $logger Logger object for reporting debug messages.
- */
- private $logger;
-
- /**
- * Finder object for handling sitemap URIs.
- *
- * @see Jetpack_Sitemap_Finder
- * @since 4.8.0
- * @var Jetpack_Sitemap_Finder $finder Finder object for handling with sitemap URIs.
- */
- private $finder;
-
- /**
- * Construct a new Jetpack_Sitemap_Manager.
- *
- * @access public
- * @since 4.8.0
- */
- public function __construct() {
- $this->librarian = new Jetpack_Sitemap_Librarian();
- $this->finder = new Jetpack_Sitemap_Finder();
-
- if ( defined( 'WP_DEBUG' ) && ( true === WP_DEBUG ) ) {
- $this->logger = new Jetpack_Sitemap_Logger();
- }
-
- // Add callback for sitemap URL handler.
- add_action(
- 'init',
- array( $this, 'callback_action_catch_sitemap_urls' ),
- defined( 'IS_WPCOM' ) && IS_WPCOM ? 100 : 10
- );
-
- // Add generator to wp_cron task list.
- $this->schedule_sitemap_generation();
-
- // Add sitemap to robots.txt.
- add_action(
- 'do_robotstxt',
- array( $this, 'callback_action_do_robotstxt' ),
- 20
- );
-
- // The news sitemap is cached; here we add a callback to
- // flush the cached news sitemap when a post is published.
- add_action(
- 'publish_post',
- array( $this, 'callback_action_flush_news_sitemap_cache' ),
- 10
- );
-
- // In case we need to purge all sitemaps, we do this.
- add_action(
- 'jetpack_sitemaps_purge_data',
- array( $this, 'callback_action_purge_data' )
- );
-
- /*
- * Module parameters are stored as options in the database.
- * This allows us to avoid having to process all of init
- * before serving the sitemap data. The following actions
- * process and store these filters.
- */
-
- // Process filters and store location string for sitemap.
- add_action(
- 'init',
- array( $this, 'callback_action_filter_sitemap_location' ),
- 999
- );
- }
-
- /**
- * Echo a raw string of given content-type.
- *
- * @access private
- * @since 4.8.0
- *
- * @param string $the_content_type The content type to be served.
- * @param string $the_content The string to be echoed.
- */
- private function serve_raw_and_die( $the_content_type, $the_content ) {
- header( 'Content-Type: ' . $the_content_type . '; charset=UTF-8' );
-
- global $wp_query;
- $wp_query->is_feed = true;
- set_query_var( 'feed', 'sitemap' );
-
- if ( '' === $the_content ) {
- $error = __( 'No sitemap found. Please try again later.', 'jetpack' );
- if ( current_user_can( 'manage_options' ) ) {
- $next = human_time_diff( wp_next_scheduled( 'jp_sitemap_cron_hook' ) );
- /* translators: %s is a human_time_diff until next sitemap generation. */
- $error = sprintf( __( 'No sitemap found. The system will try to build it again in %s.', 'jetpack' ), $next );
- }
-
- wp_die(
- esc_html( $error ),
- esc_html__( 'Sitemaps', 'jetpack' ),
- array(
- 'response' => 404,
- )
- );
- }
-
- echo $the_content;
-
- die();
- }
-
- /**
- * Callback to intercept sitemap url requests and serve sitemap files.
- *
- * @access public
- * @since 4.8.0
- */
- public function callback_action_catch_sitemap_urls() {
- // Regular expressions for sitemap URL routing.
- $regex = array(
- 'master' => '/^sitemap\.xml$/',
- 'sitemap' => '/^sitemap-[1-9][0-9]*\.xml$/',
- 'index' => '/^sitemap-index-[1-9][0-9]*\.xml$/',
- 'sitemap-style' => '/^sitemap\.xsl$/',
- 'index-style' => '/^sitemap-index\.xsl$/',
- 'image' => '/^image-sitemap-[1-9][0-9]*\.xml$/',
- 'image-index' => '/^image-sitemap-index-[1-9][0-9]*\.xml$/',
- 'image-style' => '/^image-sitemap\.xsl$/',
- 'video' => '/^video-sitemap-[1-9][0-9]*\.xml$/',
- 'video-index' => '/^video-sitemap-index-[1-9][0-9]*\.xml$/',
- 'video-style' => '/^video-sitemap\.xsl$/',
- 'news' => '/^news-sitemap\.xml$/',
- 'news-style' => '/^news-sitemap\.xsl$/',
- );
-
- // The raw path(+query) of the requested URI.
- if ( isset( $_SERVER['REQUEST_URI'] ) ) { // WPCS: Input var okay.
- $raw_uri = sanitize_text_field(
- wp_unslash( $_SERVER['REQUEST_URI'] ) // WPCS: Input var okay.
- );
- } else {
- $raw_uri = '';
- }
-
- $request = $this->finder->recognize_sitemap_uri( $raw_uri );
-
- if ( isset( $request['sitemap_name'] ) ) {
-
- /**
- * Filter the content type used to serve the sitemap XML files.
- *
- * @module sitemaps
- *
- * @since 3.9.0
- *
- * @param string $xml_content_type By default, it's 'text/xml'.
- */
- $xml_content_type = apply_filters( 'jetpack_sitemap_content_type', 'text/xml' );
-
- // Catch master sitemap xml.
- if ( preg_match( $regex['master'], $request['sitemap_name'] ) ) {
- $sitemap_content = $this->librarian->get_sitemap_text(
- jp_sitemap_filename( JP_MASTER_SITEMAP_TYPE, 0 ),
- JP_MASTER_SITEMAP_TYPE
- );
-
- // if there is no master sitemap yet, let's just return an empty sitemap with a short TTL instead of a 404
- if ( empty( $sitemap_content ) ) {
- $builder = new Jetpack_Sitemap_Builder();
- $sitemap_content = $builder->empty_sitemap_xml();
- }
-
- $this->serve_raw_and_die(
- $xml_content_type,
- $sitemap_content
- );
- }
-
- // Catch sitemap xml.
- if ( preg_match( $regex['sitemap'], $request['sitemap_name'] ) ) {
- $this->serve_raw_and_die(
- $xml_content_type,
- $this->librarian->get_sitemap_text(
- $request['sitemap_name'],
- JP_PAGE_SITEMAP_TYPE
- )
- );
- }
-
- // Catch sitemap index xml.
- if ( preg_match( $regex['index'], $request['sitemap_name'] ) ) {
- $this->serve_raw_and_die(
- $xml_content_type,
- $this->librarian->get_sitemap_text(
- $request['sitemap_name'],
- JP_PAGE_SITEMAP_INDEX_TYPE
- )
- );
- }
-
- // Catch sitemap xsl.
- if ( preg_match( $regex['sitemap-style'], $request['sitemap_name'] ) ) {
- $this->serve_raw_and_die(
- 'application/xml',
- Jetpack_Sitemap_Stylist::sitemap_xsl()
- );
- }
-
- // Catch sitemap index xsl.
- if ( preg_match( $regex['index-style'], $request['sitemap_name'] ) ) {
- $this->serve_raw_and_die(
- 'application/xml',
- Jetpack_Sitemap_Stylist::sitemap_index_xsl()
- );
- }
-
- // Catch image sitemap xml.
- if ( preg_match( $regex['image'], $request['sitemap_name'] ) ) {
- $this->serve_raw_and_die(
- $xml_content_type,
- $this->librarian->get_sitemap_text(
- $request['sitemap_name'],
- JP_IMAGE_SITEMAP_TYPE
- )
- );
- }
-
- // Catch image sitemap index xml.
- if ( preg_match( $regex['image-index'], $request['sitemap_name'] ) ) {
- $this->serve_raw_and_die(
- $xml_content_type,
- $this->librarian->get_sitemap_text(
- $request['sitemap_name'],
- JP_IMAGE_SITEMAP_INDEX_TYPE
- )
- );
- }
-
- // Catch image sitemap xsl.
- if ( preg_match( $regex['image-style'], $request['sitemap_name'] ) ) {
- $this->serve_raw_and_die(
- 'application/xml',
- Jetpack_Sitemap_Stylist::image_sitemap_xsl()
- );
- }
-
- // Catch video sitemap xml.
- if ( preg_match( $regex['video'], $request['sitemap_name'] ) ) {
- $this->serve_raw_and_die(
- $xml_content_type,
- $this->librarian->get_sitemap_text(
- $request['sitemap_name'],
- JP_VIDEO_SITEMAP_TYPE
- )
- );
- }
-
- // Catch video sitemap index xml.
- if ( preg_match( $regex['video-index'], $request['sitemap_name'] ) ) {
- $this->serve_raw_and_die(
- $xml_content_type,
- $this->librarian->get_sitemap_text(
- $request['sitemap_name'],
- JP_VIDEO_SITEMAP_INDEX_TYPE
- )
- );
- }
-
- // Catch video sitemap xsl.
- if ( preg_match( $regex['video-style'], $request['sitemap_name'] ) ) {
- $this->serve_raw_and_die(
- 'application/xml',
- Jetpack_Sitemap_Stylist::video_sitemap_xsl()
- );
- }
-
- // Catch news sitemap xml.
- if ( preg_match( $regex['news'], $request['sitemap_name'] ) ) {
- $sitemap_builder = new Jetpack_Sitemap_Builder();
- $this->serve_raw_and_die(
- $xml_content_type,
- $sitemap_builder->news_sitemap_xml()
- );
- }
-
- // Catch news sitemap xsl.
- if ( preg_match( $regex['news-style'], $request['sitemap_name'] ) ) {
- $this->serve_raw_and_die(
- 'application/xml',
- Jetpack_Sitemap_Stylist::news_sitemap_xsl()
- );
- }
- }
- }
-
- /**
- * Callback for adding sitemap-interval to the list of schedules.
- *
- * @access public
- * @since 4.8.0
- *
- * @param array $schedules The array of WP_Cron schedules.
- *
- * @return array The updated array of WP_Cron schedules.
- */
- public function callback_add_sitemap_schedule( $schedules ) {
- $schedules['sitemap-interval'] = array(
- 'interval' => JP_SITEMAP_INTERVAL,
- 'display' => __( 'Sitemap Interval', 'jetpack' ),
- );
- return $schedules;
- }
-
- /**
- * Callback handler for sitemap cron hook
- *
- * @access public
- */
- public function callback_sitemap_cron_hook() {
- $sitemap_builder = new Jetpack_Sitemap_Builder();
- $sitemap_builder->update_sitemap();
- }
-
- /**
- * Add actions to schedule sitemap generation.
- * Should only be called once, in the constructor.
- *
- * @access private
- * @since 4.8.0
- */
- private function schedule_sitemap_generation() {
- // Add cron schedule.
- add_filter( 'cron_schedules', array( $this, 'callback_add_sitemap_schedule' ) ); // phpcs:ignore WordPress.WP.CronInterval.ChangeDetected
-
- add_action(
- 'jp_sitemap_cron_hook',
- array( $this, 'callback_sitemap_cron_hook' )
- );
-
- if ( ! wp_next_scheduled( 'jp_sitemap_cron_hook' ) ) {
- /**
- * Filter the delay in seconds until sitemap generation cron job is started.
- *
- * This filter allows a site operator or hosting provider to potentialy spread out sitemap generation for a
- * lot of sites over time. By default, it will be randomly done over 15 minutes.
- *
- * @module sitemaps
- * @since 6.6.1
- *
- * @param int $delay Time to delay in seconds.
- */
- $delay = apply_filters( 'jetpack_sitemap_generation_delay', MINUTE_IN_SECONDS * wp_rand( 1, 15 ) ); // Randomly space it out to start within next fifteen minutes.
- wp_schedule_event(
- time() + $delay,
- 'sitemap-interval',
- 'jp_sitemap_cron_hook'
- );
- }
- }
-
- /**
- * Callback to add sitemap to robots.txt.
- *
- * @access public
- * @since 4.8.0
- */
- public function callback_action_do_robotstxt() {
-
- /**
- * Filter whether to make the default sitemap discoverable to robots or not. Default true.
- *
- * @module sitemaps
- * @since 3.9.0
- *
- * @param bool $discover_sitemap Make default sitemap discoverable to robots.
- */
- $discover_sitemap = apply_filters( 'jetpack_sitemap_generate', true );
-
- if ( true === $discover_sitemap ) {
- $sitemap_url = $this->finder->construct_sitemap_url( 'sitemap.xml' );
- echo 'Sitemap: ' . esc_url( $sitemap_url ) . "\n";
- }
-
- /**
- * Filter whether to make the news sitemap discoverable to robots or not. Default true.
- *
- * @module sitemaps
- * @since 3.9.0
- *
- * @param bool $discover_news_sitemap Make default news sitemap discoverable to robots.
- */
- $discover_news_sitemap = apply_filters( 'jetpack_news_sitemap_generate', true );
-
- if ( true === $discover_news_sitemap ) {
- $news_sitemap_url = $this->finder->construct_sitemap_url( 'news-sitemap.xml' );
- echo 'Sitemap: ' . esc_url( $news_sitemap_url ) . "\n";
- }
- }
-
- /**
- * Callback to delete the news sitemap cache.
- *
- * @access public
- * @since 4.8.0
- */
- public function callback_action_flush_news_sitemap_cache() {
- delete_transient( 'jetpack_news_sitemap_xml' );
- }
-
- /**
- * Callback for resetting stored sitemap data.
- *
- * @access public
- * @since 5.3.0
- * @since 6.7.0 Schedules a regeneration.
- */
- public function callback_action_purge_data() {
- $this->callback_action_flush_news_sitemap_cache();
- $this->librarian->delete_all_stored_sitemap_data();
- /** This filter is documented in modules/sitemaps/sitemaps.php */
- $delay = apply_filters( 'jetpack_sitemap_generation_delay', MINUTE_IN_SECONDS * wp_rand( 1, 15 ) ); // Randomly space it out to start within next fifteen minutes.
- wp_schedule_single_event( time() + $delay, 'jp_sitemap_cron_hook' );
- }
-
- /**
- * Callback to set the sitemap location.
- *
- * @access public
- * @since 4.8.0
- */
- public function callback_action_filter_sitemap_location() {
- update_option(
- 'jetpack_sitemap_location',
- /**
- * Additional path for sitemap URIs. Default value is empty.
- *
- * This string is any additional path fragment you want included between
- * the home URL and the sitemap filenames. Exactly how this fragment is
- * interpreted depends on your permalink settings. For example:
- *
- * Pretty permalinks:
- * home_url() . jetpack_sitemap_location . '/sitemap.xml'
- *
- * Plain ("ugly") permalinks:
- * home_url() . jetpack_sitemap_location . '/?jetpack-sitemap=sitemap.xml'
- *
- * PATHINFO permalinks:
- * home_url() . '/index.php' . jetpack_sitemap_location . '/sitemap.xml'
- *
- * where 'sitemap.xml' is the name of a specific sitemap file.
- * The value of this filter must be a valid path fragment per RFC 3986;
- * in particular it must either be empty or begin with a '/'.
- * Also take care that any restrictions on sitemap location imposed by
- * the sitemap protocol are satisfied.
- *
- * The result of this filter is stored in an option, 'jetpack_sitemap_location';
- * that option is what gets read when the sitemap location is needed.
- * This way we don't have to wait for init to finish before building sitemaps.
- *
- * @link https://tools.ietf.org/html/rfc3986#section-3.3 RFC 3986
- * @link http://www.sitemaps.org/ The sitemap protocol
- *
- * @since 4.8.0
- */
- apply_filters(
- 'jetpack_sitemap_location',
- ''
- )
- );
- }
-
-} // End Jetpack_Sitemap_Manager class.
-
-new Jetpack_Sitemap_Manager();
-
-/**
- * Absolute URL of the current blog's sitemap.
- *
- * @module sitemaps
- *
- * @since 3.9.0
- * @since 4.8.1 Code uses method found in Jetpack_Sitemap_Finder::construct_sitemap_url in 4.8.0.
- * It has been moved here to avoid fatal errors with other plugins that were expecting to find this function.
- *
- * @param string $filename Sitemap file name. Defaults to 'sitemap.xml', the initial sitemaps page.
- *
- * @return string Sitemap URL.
- */
-function jetpack_sitemap_uri( $filename = 'sitemap.xml' ) {
- global $wp_rewrite;
-
- $location = Jetpack_Options::get_option_and_ensure_autoload( 'jetpack_sitemap_location', '' );
-
- if ( $wp_rewrite->using_index_permalinks() ) {
- $sitemap_url = home_url( '/index.php' . $location . '/' . $filename );
- } elseif ( $wp_rewrite->using_permalinks() ) {
- $sitemap_url = home_url( $location . '/' . $filename );
- } else {
- $sitemap_url = home_url( $location . '/?jetpack-sitemap=' . $filename );
- }
-
- /**
- * Filter sitemap URL relative to home URL.
- *
- * @module sitemaps
- *
- * @since 3.9.0
- *
- * @param string $sitemap_url Sitemap URL.
- */
- return apply_filters( 'jetpack_sitemap_location', $sitemap_url );
-}
diff --git a/plugins/jetpack/modules/social-links.php b/plugins/jetpack/modules/social-links.php
deleted file mode 100644
index 88c13090..00000000
--- a/plugins/jetpack/modules/social-links.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Deprecated. No longer needed.
- *
- * @package Jetpack
- */
diff --git a/plugins/jetpack/modules/sso.php b/plugins/jetpack/modules/sso.php
deleted file mode 100644
index cb45ed3b..00000000
--- a/plugins/jetpack/modules/sso.php
+++ /dev/null
@@ -1,1155 +0,0 @@
-<?php
-require_once( JETPACK__PLUGIN_DIR . 'modules/sso/class.jetpack-sso-helpers.php' );
-require_once( JETPACK__PLUGIN_DIR . 'modules/sso/class.jetpack-sso-notices.php' );
-
-/**
- * Module Name: Secure Sign On
- * Module Description: Allow users to log into this site using WordPress.com accounts
- * Jumpstart Description: Lets you log in to all your Jetpack-enabled sites with one click using your WordPress.com account.
- * Sort Order: 30
- * Recommendation Order: 5
- * First Introduced: 2.6
- * Requires Connection: Yes
- * Auto Activate: No
- * Module Tags: Developers
- * Feature: Security, Jumpstart
- * Additional Search Queries: sso, single sign on, login, log in
- */
-
-class Jetpack_SSO {
- static $instance = null;
-
- private function __construct() {
-
- self::$instance = $this;
-
- add_action( 'admin_init', array( $this, 'maybe_authorize_user_after_sso' ), 1 );
- add_action( 'admin_init', array( $this, 'register_settings' ) );
- add_action( 'login_init', array( $this, 'login_init' ) );
- add_action( 'delete_user', array( $this, 'delete_connection_for_user' ) );
- add_filter( 'jetpack_xmlrpc_methods', array( $this, 'xmlrpc_methods' ) );
- add_action( 'init', array( $this, 'maybe_logout_user' ), 5 );
- add_action( 'jetpack_modules_loaded', array( $this, 'module_configure_button' ) );
- add_action( 'login_form_logout', array( $this, 'store_wpcom_profile_cookies_on_logout' ) );
- add_action( 'jetpack_unlinked_user', array( $this, 'delete_connection_for_user') );
- add_action( 'wp_login', array( 'Jetpack_SSO', 'clear_cookies_after_login' ) );
- add_action( 'jetpack_jitm_received_envelopes', array( $this, 'inject_sso_jitm' ) );
-
- // Adding this action so that on login_init, the action won't be sanitized out of the $action global.
- add_action( 'login_form_jetpack-sso', '__return_true' );
- }
-
- /**
- * Returns the single instance of the Jetpack_SSO object
- *
- * @since 2.8
- * @return Jetpack_SSO
- **/
- public static function get_instance() {
- if ( ! is_null( self::$instance ) ) {
- return self::$instance;
- }
-
- return self::$instance = new Jetpack_SSO;
- }
-
- /**
- * Add configure button and functionality to the module card on the Jetpack screen
- **/
- public static function module_configure_button() {
- Jetpack::enable_module_configurable( __FILE__ );
- Jetpack::module_configuration_load( __FILE__, array( __CLASS__, 'module_configuration_load' ) );
- Jetpack::module_configuration_head( __FILE__, array( __CLASS__, 'module_configuration_head' ) );
- Jetpack::module_configuration_screen( __FILE__, array( __CLASS__, 'module_configuration_screen' ) );
- }
-
- public static function module_configuration_load() {}
-
- public static function module_configuration_head() {}
-
- public static function module_configuration_screen() {
- ?>
- <form method="post" action="options.php">
- <?php settings_fields( 'jetpack-sso' ); ?>
- <?php do_settings_sections( 'jetpack-sso' ); ?>
- <?php submit_button(); ?>
- </form>
- <?php
- }
-
- /**
- * If jetpack_force_logout == 1 in current user meta the user will be forced
- * to logout and reauthenticate with the site.
- **/
- public function maybe_logout_user() {
- global $current_user;
-
- if ( 1 == $current_user->jetpack_force_logout ) {
- delete_user_meta( $current_user->ID, 'jetpack_force_logout' );
- self::delete_connection_for_user( $current_user->ID );
- wp_logout();
- wp_safe_redirect( wp_login_url() );
- exit;
- }
- }
-
- /**
- * Adds additional methods the WordPress xmlrpc API for handling SSO specific features
- *
- * @param array $methods
- * @return array
- **/
- public function xmlrpc_methods( $methods ) {
- $methods['jetpack.userDisconnect'] = array( $this, 'xmlrpc_user_disconnect' );
- return $methods;
- }
-
- /**
- * Marks a user's profile for disconnect from WordPress.com and forces a logout
- * the next time the user visits the site.
- **/
- public function xmlrpc_user_disconnect( $user_id ) {
- $user_query = new WP_User_Query(
- array(
- 'meta_key' => 'wpcom_user_id',
- 'meta_value' => $user_id,
- )
- );
- $user = $user_query->get_results();
- $user = $user[0];
-
- if ( $user instanceof WP_User ) {
- $user = wp_set_current_user( $user->ID );
- update_user_meta( $user->ID, 'jetpack_force_logout', '1' );
- self::delete_connection_for_user( $user->ID );
- return true;
- }
- return false;
- }
-
- /**
- * Enqueues scripts and styles necessary for SSO login.
- */
- public function login_enqueue_scripts() {
- global $action;
-
- if ( ! Jetpack_SSO_Helpers::display_sso_form_for_action( $action ) ) {
- return;
- }
-
- if ( is_rtl() ) {
- wp_enqueue_style( 'jetpack-sso-login', plugins_url( 'modules/sso/jetpack-sso-login-rtl.css', JETPACK__PLUGIN_FILE ), array( 'login', 'genericons' ), JETPACK__VERSION );
- } else {
- wp_enqueue_style( 'jetpack-sso-login', plugins_url( 'modules/sso/jetpack-sso-login.css', JETPACK__PLUGIN_FILE ), array( 'login', 'genericons' ), JETPACK__VERSION );
- }
-
- wp_enqueue_script( 'jetpack-sso-login', plugins_url( 'modules/sso/jetpack-sso-login.js', JETPACK__PLUGIN_FILE ), array( 'jquery' ), JETPACK__VERSION );
- }
-
- /**
- * Adds Jetpack SSO classes to login body
- *
- * @param array $classes Array of classes to add to body tag
- * @return array Array of classes to add to body tag
- */
- public function login_body_class( $classes ) {
- global $action;
-
- if ( ! Jetpack_SSO_Helpers::display_sso_form_for_action( $action ) ) {
- return $classes;
- }
-
- // Always add the jetpack-sso class so that we can add SSO specific styling even when the SSO form isn't being displayed.
- $classes[] = 'jetpack-sso';
-
- if ( ! Jetpack::is_staging_site() ) {
- /**
- * Should we show the SSO login form?
- *
- * $_GET['jetpack-sso-default-form'] is used to provide a fallback in case JavaScript is not enabled.
- *
- * The default_to_sso_login() method allows us to dynamically decide whether we show the SSO login form or not.
- * The SSO module uses the method to display the default login form if we can not find a user to log in via SSO.
- * But, the method could be filtered by a site admin to always show the default login form if that is preferred.
- */
- if ( empty( $_GET['jetpack-sso-show-default-form'] ) && Jetpack_SSO_Helpers::show_sso_login() ) {
- $classes[] = 'jetpack-sso-form-display';
- }
- }
-
- return $classes;
- }
-
- public function print_inline_admin_css() {
- ?>
- <style>
- .jetpack-sso .message {
- margin-top: 20px;
- }
-
- .jetpack-sso #login .message:first-child,
- .jetpack-sso #login h1 + .message {
- margin-top: 0;
- }
- </style>
- <?php
- }
-
- /**
- * Adds settings fields to Settings > General > Secure Sign On that allows users to
- * turn off the login form on wp-login.php
- *
- * @since 2.7
- **/
- public function register_settings() {
-
- add_settings_section(
- 'jetpack_sso_settings',
- __( 'Secure Sign On' , 'jetpack' ),
- '__return_false',
- 'jetpack-sso'
- );
-
- /*
- * Settings > General > Secure Sign On
- * Require two step authentication
- */
- register_setting(
- 'jetpack-sso',
- 'jetpack_sso_require_two_step',
- array( $this, 'validate_jetpack_sso_require_two_step' )
- );
-
- add_settings_field(
- 'jetpack_sso_require_two_step',
- '', // __( 'Require Two-Step Authentication' , 'jetpack' ),
- array( $this, 'render_require_two_step' ),
- 'jetpack-sso',
- 'jetpack_sso_settings'
- );
-
- /*
- * Settings > General > Secure Sign On
- */
- register_setting(
- 'jetpack-sso',
- 'jetpack_sso_match_by_email',
- array( $this, 'validate_jetpack_sso_match_by_email' )
- );
-
- add_settings_field(
- 'jetpack_sso_match_by_email',
- '', // __( 'Match by Email' , 'jetpack' ),
- array( $this, 'render_match_by_email' ),
- 'jetpack-sso',
- 'jetpack_sso_settings'
- );
- }
-
- /**
- * Builds the display for the checkbox allowing user to require two step
- * auth be enabled on WordPress.com accounts before login. Displays in Settings > General
- *
- * @since 2.7
- **/
- public function render_require_two_step() {
- ?>
- <label>
- <input
- type="checkbox"
- name="jetpack_sso_require_two_step"
- <?php checked( Jetpack_SSO_Helpers::is_two_step_required() ); ?>
- <?php disabled( Jetpack_SSO_Helpers::is_require_two_step_checkbox_disabled() ); ?>
- >
- <?php esc_html_e( 'Require Two-Step Authentication' , 'jetpack' ); ?>
- </label>
- <?php
- }
-
- /**
- * Validate the require two step checkbox in Settings > General
- *
- * @since 2.7
- * @return boolean
- **/
- public function validate_jetpack_sso_require_two_step( $input ) {
- return ( ! empty( $input ) ) ? 1 : 0;
- }
-
- /**
- * Builds the display for the checkbox allowing the user to allow matching logins by email
- * Displays in Settings > General
- *
- * @since 2.9
- **/
- public function render_match_by_email() {
- ?>
- <label>
- <input
- type="checkbox"
- name="jetpack_sso_match_by_email"
- <?php checked( Jetpack_SSO_Helpers::match_by_email() ); ?>
- <?php disabled( Jetpack_SSO_Helpers::is_match_by_email_checkbox_disabled() ); ?>
- >
- <?php esc_html_e( 'Match by Email', 'jetpack' ); ?>
- </label>
- <?php
- }
-
- /**
- * Validate the match by email check in Settings > General
- *
- * @since 2.9
- * @return boolean
- **/
- public function validate_jetpack_sso_match_by_email( $input ) {
- return ( ! empty( $input ) ) ? 1 : 0;
- }
-
- /**
- * Checks to determine if the user wants to login on wp-login
- *
- * This function mostly exists to cover the exceptions to login
- * that may exist as other parameters to $_GET[action] as $_GET[action]
- * does not have to exist. By default WordPress assumes login if an action
- * is not set, however this may not be true, as in the case of logout
- * where $_GET[loggedout] is instead set
- *
- * @return boolean
- **/
- private function wants_to_login() {
- $wants_to_login = false;
-
- // Cover default WordPress behavior
- $action = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : 'login';
-
- // And now the exceptions
- $action = isset( $_GET['loggedout'] ) ? 'loggedout' : $action;
-
- if ( Jetpack_SSO_Helpers::display_sso_form_for_action( $action ) ) {
- $wants_to_login = true;
- }
-
- return $wants_to_login;
- }
-
- function login_init() {
- global $action;
-
- if ( Jetpack_SSO_Helpers::should_hide_login_form() ) {
- /**
- * Since the default authenticate filters fire at priority 20 for checking username and password,
- * let's fire at priority 30. wp_authenticate_spam_check is fired at priority 99, but since we return a
- * WP_Error in disable_default_login_form, then we won't trigger spam processing logic.
- */
- add_filter( 'authenticate', array( 'Jetpack_SSO_Notices', 'disable_default_login_form' ), 30 );
-
- /**
- * Filter the display of the disclaimer message appearing when default WordPress login form is disabled.
- *
- * @module sso
- *
- * @since 2.8.0
- *
- * @param bool true Should the disclaimer be displayed. Default to true.
- */
- $display_sso_disclaimer = apply_filters( 'jetpack_sso_display_disclaimer', true );
- if ( $display_sso_disclaimer ) {
- add_filter( 'login_message', array( 'Jetpack_SSO_Notices', 'msg_login_by_jetpack' ) );
- }
- }
-
- if ( 'jetpack-sso' === $action ) {
- if ( isset( $_GET['result'], $_GET['user_id'], $_GET['sso_nonce'] ) && 'success' == $_GET['result'] ) {
- $this->handle_login();
- $this->display_sso_login_form();
- } else {
- if ( Jetpack::is_staging_site() ) {
- add_filter( 'login_message', array( 'Jetpack_SSO_Notices', 'sso_not_allowed_in_staging' ) );
- } else {
- // Is it wiser to just use wp_redirect than do this runaround to wp_safe_redirect?
- add_filter( 'allowed_redirect_hosts', array( 'Jetpack_SSO_Helpers', 'allowed_redirect_hosts' ) );
- $reauth = ! empty( $_GET['force_reauth'] );
- $sso_url = $this->get_sso_url_or_die( $reauth );
-
- // Is this our first SSO Login. Set an option.
- if ( ! Jetpack_Options::get_option( 'sso_first_login' ) ) {
- Jetpack_options::update_option( 'sso_first_login', true );
- }
-
- JetpackTracking::record_user_event( 'sso_login_redirect_success' );
- wp_safe_redirect( $sso_url );
- exit;
- }
- }
- } else if ( Jetpack_SSO_Helpers::display_sso_form_for_action( $action ) ) {
-
- // Save cookies so we can handle redirects after SSO
- $this->save_cookies();
-
- /**
- * Check to see if the site admin wants to automagically forward the user
- * to the WordPress.com login page AND that the request to wp-login.php
- * is not something other than login (Like logout!)
- */
- if ( Jetpack_SSO_Helpers::bypass_login_forward_wpcom() && $this->wants_to_login() ) {
- add_filter( 'allowed_redirect_hosts', array( 'Jetpack_SSO_Helpers', 'allowed_redirect_hosts' ) );
- $reauth = ! empty( $_GET['force_reauth'] );
- $sso_url = $this->get_sso_url_or_die( $reauth );
- JetpackTracking::record_user_event( 'sso_login_redirect_bypass_success' );
- wp_safe_redirect( $sso_url );
- exit;
- }
-
- $this->display_sso_login_form();
- }
- }
-
- /**
- * Ensures that we can get a nonce from WordPress.com via XML-RPC before setting
- * up the hooks required to display the SSO form.
- */
- public function display_sso_login_form() {
- add_filter( 'login_body_class', array( $this, 'login_body_class' ) );
- add_action( 'login_head', array( $this, 'print_inline_admin_css' ) );
-
- if ( Jetpack::is_staging_site() ) {
- add_filter( 'login_message', array( 'Jetpack_SSO_Notices', 'sso_not_allowed_in_staging' ) );
- return;
- }
-
- $sso_nonce = self::request_initial_nonce();
- if ( is_wp_error( $sso_nonce ) ) {
- return;
- }
-
- add_action( 'login_form', array( $this, 'login_form' ) );
- add_action( 'login_enqueue_scripts', array( $this, 'login_enqueue_scripts' ) );
- }
-
- /**
- * Conditionally save the redirect_to url as a cookie.
- *
- * @since 4.6.0 Renamed to save_cookies from maybe_save_redirect_cookies
- */
- public static function save_cookies() {
- if ( headers_sent() ) {
- return new WP_Error( 'headers_sent', __( 'Cannot deal with cookie redirects, as headers are already sent.', 'jetpack' ) );
- }
-
- setcookie(
- 'jetpack_sso_original_request',
- esc_url_raw( set_url_scheme( $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ) ),
- time() + HOUR_IN_SECONDS,
- COOKIEPATH,
- COOKIE_DOMAIN,
- is_ssl(),
- true
- );
-
- if ( ! empty( $_GET['redirect_to'] ) ) {
- // If we have something to redirect to
- $url = esc_url_raw( $_GET['redirect_to'] );
- setcookie( 'jetpack_sso_redirect_to', $url, time() + HOUR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN, is_ssl(), true );
- } elseif ( ! empty( $_COOKIE['jetpack_sso_redirect_to'] ) ) {
- // Otherwise, if it's already set, purge it.
- setcookie( 'jetpack_sso_redirect_to', ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
- }
- }
-
- /**
- * Outputs the Jetpack SSO button and description as well as the toggle link
- * for switching between Jetpack SSO and default login.
- */
- function login_form() {
- $site_name = get_bloginfo( 'name' );
- if ( ! $site_name ) {
- $site_name = get_bloginfo( 'url' );
- }
-
- $display_name = ! empty( $_COOKIE[ 'jetpack_sso_wpcom_name_' . COOKIEHASH ] )
- ? $_COOKIE[ 'jetpack_sso_wpcom_name_' . COOKIEHASH ]
- : false;
- $gravatar = ! empty( $_COOKIE[ 'jetpack_sso_wpcom_gravatar_' . COOKIEHASH ] )
- ? $_COOKIE[ 'jetpack_sso_wpcom_gravatar_' . COOKIEHASH ]
- : false;
-
- ?>
- <div id="jetpack-sso-wrap">
- <?php if ( $display_name && $gravatar ) : ?>
- <div id="jetpack-sso-wrap__user">
- <img width="72" height="72" src="<?php echo esc_html( $gravatar ); ?>" />
-
- <h2>
- <?php
- echo wp_kses(
- sprintf( __( 'Log in as <span>%s</span>', 'jetpack' ), esc_html( $display_name ) ),
- array( 'span' => true )
- );
- ?>
- </h2>
- </div>
-
- <?php endif; ?>
-
-
- <div id="jetpack-sso-wrap__action">
- <?php echo $this->build_sso_button( array(), 'is_primary' ); ?>
-
- <?php if ( $display_name && $gravatar ) : ?>
- <a rel="nofollow" class="jetpack-sso-wrap__reauth" href="<?php echo esc_url( $this->build_sso_button_url( array( 'force_reauth' => '1' ) ) ); ?>">
- <?php esc_html_e( 'Log in as a different WordPress.com user', 'jetpack' ); ?>
- </a>
- <?php else : ?>
- <p>
- <?php
- echo esc_html(
- sprintf(
- __( 'You can now save time spent logging in by connecting your WordPress.com account to %s.', 'jetpack' ),
- esc_html( $site_name )
- )
- );
- ?>
- </p>
- <?php endif; ?>
- </div>
-
- <?php if ( ! Jetpack_SSO_Helpers::should_hide_login_form() ) : ?>
- <div class="jetpack-sso-or">
- <span><?php esc_html_e( 'Or', 'jetpack' ); ?></span>
- </div>
-
- <a href="<?php echo esc_url( add_query_arg( 'jetpack-sso-show-default-form', '1' ) ); ?>" class="jetpack-sso-toggle wpcom">
- <?php
- esc_html_e( 'Log in with username and password', 'jetpack' )
- ?>
- </a>
-
- <a href="<?php echo esc_url( add_query_arg( 'jetpack-sso-show-default-form', '0' ) ); ?>" class="jetpack-sso-toggle default">
- <?php
- esc_html_e( 'Log in with WordPress.com', 'jetpack' )
- ?>
- </a>
- <?php endif; ?>
- </div>
- <?php
- }
-
- /**
- * Clear the cookies that store the profile information for the last
- * WPCOM user to connect.
- */
- static function clear_wpcom_profile_cookies() {
- if ( isset( $_COOKIE[ 'jetpack_sso_wpcom_name_' . COOKIEHASH ] ) ) {
- setcookie(
- 'jetpack_sso_wpcom_name_' . COOKIEHASH,
- ' ',
- time() - YEAR_IN_SECONDS,
- COOKIEPATH,
- COOKIE_DOMAIN,
- is_ssl()
- );
- }
-
- if ( isset( $_COOKIE[ 'jetpack_sso_wpcom_gravatar_' . COOKIEHASH ] ) ) {
- setcookie(
- 'jetpack_sso_wpcom_gravatar_' . COOKIEHASH,
- ' ',
- time() - YEAR_IN_SECONDS,
- COOKIEPATH,
- COOKIE_DOMAIN,
- is_ssl()
- );
- }
- }
-
- /**
- * Clear cookies that are no longer needed once the user has logged in.
- *
- * @since 4.8.0
- */
- static function clear_cookies_after_login() {
- self::clear_wpcom_profile_cookies();
- if ( isset( $_COOKIE[ 'jetpack_sso_nonce' ] ) ) {
- setcookie(
- 'jetpack_sso_nonce',
- ' ',
- time() - YEAR_IN_SECONDS,
- COOKIEPATH,
- COOKIE_DOMAIN,
- is_ssl()
- );
- }
-
- if ( isset( $_COOKIE[ 'jetpack_sso_original_request' ] ) ) {
- setcookie(
- 'jetpack_sso_original_request',
- ' ',
- time() - YEAR_IN_SECONDS,
- COOKIEPATH,
- COOKIE_DOMAIN,
- is_ssl()
- );
- }
-
- if ( isset( $_COOKIE[ 'jetpack_sso_redirect_to' ] ) ) {
- setcookie(
- 'jetpack_sso_redirect_to',
- ' ',
- time() - YEAR_IN_SECONDS,
- COOKIEPATH,
- COOKIE_DOMAIN,
- is_ssl()
- );
- }
- }
-
- static function delete_connection_for_user( $user_id ) {
- if ( ! $wpcom_user_id = get_user_meta( $user_id, 'wpcom_user_id', true ) ) {
- return;
- }
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client( array(
- 'wpcom_user_id' => $user_id,
- ) );
- $xml->query( 'jetpack.sso.removeUser', $wpcom_user_id );
-
- if ( $xml->isError() ) {
- return false;
- }
-
- // Clean up local data stored for SSO
- delete_user_meta( $user_id, 'wpcom_user_id' );
- delete_user_meta( $user_id, 'wpcom_user_data' );
- self::clear_wpcom_profile_cookies();
-
- return $xml->getResponse();
- }
-
- static function request_initial_nonce() {
- $nonce = ! empty( $_COOKIE[ 'jetpack_sso_nonce' ] )
- ? $_COOKIE[ 'jetpack_sso_nonce' ]
- : false;
-
- if ( ! $nonce ) {
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client( array(
- 'user_id' => get_current_user_id(),
- ) );
- $xml->query( 'jetpack.sso.requestNonce' );
-
- if ( $xml->isError() ) {
- return new WP_Error( $xml->getErrorCode(), $xml->getErrorMessage() );
- }
-
- $nonce = $xml->getResponse();
-
- setcookie(
- 'jetpack_sso_nonce',
- $nonce,
- time() + ( 10 * MINUTE_IN_SECONDS ),
- COOKIEPATH,
- COOKIE_DOMAIN,
- is_ssl()
- );
- }
-
- return sanitize_key( $nonce );
- }
-
- /**
- * The function that actually handles the login!
- */
- function handle_login() {
- $wpcom_nonce = sanitize_key( $_GET['sso_nonce'] );
- $wpcom_user_id = (int) $_GET['user_id'];
-
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_Client( array(
- 'user_id' => get_current_user_id(),
- ) );
- $xml->query( 'jetpack.sso.validateResult', $wpcom_nonce, $wpcom_user_id );
-
- $user_data = $xml->isError() ? false : $xml->getResponse();
- if ( empty( $user_data ) ) {
- add_filter( 'jetpack_sso_default_to_sso_login', '__return_false' );
- add_filter( 'login_message', array( 'Jetpack_SSO_Notices', 'error_invalid_response_data' ) );
- return;
- }
-
- $user_data = (object) $user_data;
- $user = null;
-
- /**
- * Fires before Jetpack's SSO modifies the log in form.
- *
- * @module sso
- *
- * @since 2.6.0
- *
- * @param object $user_data WordPress.com User information.
- */
- do_action( 'jetpack_sso_pre_handle_login', $user_data );
-
- if ( Jetpack_SSO_Helpers::is_two_step_required() && 0 === (int) $user_data->two_step_enabled ) {
- $this->user_data = $user_data;
-
- JetpackTracking::record_user_event( 'sso_login_failed', array(
- 'error_message' => 'error_msg_enable_two_step'
- ) );
-
- /** This filter is documented in core/src/wp-includes/pluggable.php */
- do_action( 'wp_login_failed', $user_data->login );
- add_filter( 'login_message', array( 'Jetpack_SSO_Notices', 'error_msg_enable_two_step' ) );
- return;
- }
-
- $user_found_with = '';
- if ( empty( $user ) && isset( $user_data->external_user_id ) ) {
- $user_found_with = 'external_user_id';
- $user = get_user_by( 'id', intval( $user_data->external_user_id ) );
- if ( $user ) {
- update_user_meta( $user->ID, 'wpcom_user_id', $user_data->ID );
- }
- }
-
- // If we don't have one by wpcom_user_id, try by the email?
- if ( empty( $user ) && Jetpack_SSO_Helpers::match_by_email() ) {
- $user_found_with = 'match_by_email';
- $user = get_user_by( 'email', $user_data->email );
- if ( $user ) {
- update_user_meta( $user->ID, 'wpcom_user_id', $user_data->ID );
- }
- }
-
- // If we've still got nothing, create the user.
- $new_user_override_role = false;
- if ( empty( $user ) && ( get_option( 'users_can_register' ) || ( $new_user_override_role = Jetpack_SSO_Helpers::new_user_override( $user_data ) ) ) ) {
- /**
- * If not matching by email we still need to verify the email does not exist
- * or this blows up
- *
- * If match_by_email is true, we know the email doesn't exist, as it would have
- * been found in the first pass. If get_user_by( 'email' ) doesn't find the
- * user, then we know that email is unused, so it's safe to add.
- */
- if ( Jetpack_SSO_Helpers::match_by_email() || ! get_user_by( 'email', $user_data->email ) ) {
-
- if ( $new_user_override_role ) {
- $user_data->role = $new_user_override_role;
- }
-
- $user = Jetpack_SSO_Helpers::generate_user( $user_data );
- if ( ! $user ) {
- JetpackTracking::record_user_event( 'sso_login_failed', array(
- 'error_message' => 'could_not_create_username'
- ) );
- add_filter( 'login_message', array( 'Jetpack_SSO_Notices', 'error_unable_to_create_user' ) );
- return;
- }
-
- $user_found_with = $new_user_override_role
- ? 'user_created_new_user_override'
- : 'user_created_users_can_register';
- } else {
- JetpackTracking::record_user_event( 'sso_login_failed', array(
- 'error_message' => 'error_msg_email_already_exists'
- ) );
-
- $this->user_data = $user_data;
- add_action( 'login_message', array( 'Jetpack_SSO_Notices', 'error_msg_email_already_exists' ) );
- return;
- }
- }
-
- /**
- * Fires after we got login information from WordPress.com.
- *
- * @module sso
- *
- * @since 2.6.0
- *
- * @param array $user Local User information.
- * @param object $user_data WordPress.com User Login information.
- */
- do_action( 'jetpack_sso_handle_login', $user, $user_data );
-
- if ( $user ) {
- // Cache the user's details, so we can present it back to them on their user screen
- update_user_meta( $user->ID, 'wpcom_user_data', $user_data );
-
- add_filter( 'auth_cookie_expiration', array( 'Jetpack_SSO_Helpers', 'extend_auth_cookie_expiration_for_sso' ) );
- wp_set_auth_cookie( $user->ID, true );
- remove_filter( 'auth_cookie_expiration', array( 'Jetpack_SSO_Helpers', 'extend_auth_cookie_expiration_for_sso' ) );
-
- /** This filter is documented in core/src/wp-includes/user.php */
- do_action( 'wp_login', $user->user_login, $user );
-
- wp_set_current_user( $user->ID );
-
- $_request_redirect_to = isset( $_REQUEST['redirect_to'] ) ? esc_url_raw( $_REQUEST['redirect_to'] ) : '';
- $redirect_to = user_can( $user, 'edit_posts' ) ? admin_url() : self::profile_page_url();
-
- // If we have a saved redirect to request in a cookie
- if ( ! empty( $_COOKIE['jetpack_sso_redirect_to'] ) ) {
- // Set that as the requested redirect to
- $redirect_to = $_request_redirect_to = esc_url_raw( $_COOKIE['jetpack_sso_redirect_to'] );
- }
-
- $json_api_auth_environment = Jetpack_SSO_Helpers::get_json_api_auth_environment();
-
- $is_json_api_auth = ! empty( $json_api_auth_environment );
- $is_user_connected = Jetpack::is_user_connected( $user->ID );
- JetpackTracking::record_user_event( 'sso_user_logged_in', array(
- 'user_found_with' => $user_found_with,
- 'user_connected' => (bool) $is_user_connected,
- 'user_role' => Jetpack::translate_current_user_to_role(),
- 'is_json_api_auth' => (bool) $is_json_api_auth,
- ) );
-
- if ( $is_json_api_auth ) {
- Jetpack::init()->verify_json_api_authorization_request( $json_api_auth_environment );
- Jetpack::init()->store_json_api_authorization_token( $user->user_login, $user );
-
- } else if ( ! $is_user_connected ) {
- $calypso_env = ! empty( $_GET['calypso_env'] )
- ? sanitize_key( $_GET['calypso_env'] )
- : '';
-
- wp_safe_redirect(
- add_query_arg(
- array(
- 'redirect_to' => $redirect_to,
- 'request_redirect_to' => $_request_redirect_to,
- 'calypso_env' => $calypso_env,
- 'jetpack-sso-auth-redirect' => '1',
- ),
- admin_url()
- )
- );
- exit;
- }
-
- add_filter( 'allowed_redirect_hosts', array( 'Jetpack_SSO_Helpers', 'allowed_redirect_hosts' ) );
- wp_safe_redirect(
- /** This filter is documented in core/src/wp-login.php */
- apply_filters( 'login_redirect', $redirect_to, $_request_redirect_to, $user )
- );
- exit;
- }
-
- add_filter( 'jetpack_sso_default_to_sso_login', '__return_false' );
-
- JetpackTracking::record_user_event( 'sso_login_failed', array(
- 'error_message' => 'cant_find_user'
- ) );
-
- $this->user_data = $user_data;
- /** This filter is documented in core/src/wp-includes/pluggable.php */
- do_action( 'wp_login_failed', $user_data->login );
- add_filter( 'login_message', array( 'Jetpack_SSO_Notices', 'cant_find_user' ) );
- }
-
- static function profile_page_url() {
- return admin_url( 'profile.php' );
- }
-
- /**
- * Builds the "Login to WordPress.com" button that is displayed on the login page as well as user profile page.
- *
- * @param array $args An array of arguments to add to the SSO URL.
- * @param boolean $is_primary Should the button have the `button-primary` class?
- * @return string Returns the HTML markup for the button.
- */
- function build_sso_button( $args = array(), $is_primary = false ) {
- $url = $this->build_sso_button_url( $args );
- $classes = $is_primary
- ? 'jetpack-sso button button-primary'
- : 'jetpack-sso button';
-
- return sprintf(
- '<a rel="nofollow" href="%1$s" class="%2$s"><span>%3$s %4$s</span></a>',
- esc_url( $url ),
- $classes,
- '<span class="genericon genericon-wordpress"></span>',
- esc_html__( 'Log in with WordPress.com', 'jetpack' )
- );
- }
-
- /**
- * Builds a URL with `jetpack-sso` action and option args which is used to setup SSO.
- *
- * @param array $args An array of arguments to add to the SSO URL.
- * @return string The URL used for SSO.
- */
- function build_sso_button_url( $args = array() ) {
- $defaults = array(
- 'action' => 'jetpack-sso',
- );
-
- $args = wp_parse_args( $args, $defaults );
-
- if ( ! empty( $_GET['redirect_to'] ) ) {
- $args['redirect_to'] = urlencode( esc_url_raw( $_GET['redirect_to'] ) );
- }
-
- return add_query_arg( $args, wp_login_url() );
- }
-
- /**
- * Retrieves a WordPress.com SSO URL with appropriate query parameters or dies.
- *
- * @param boolean $reauth Should the user be forced to reauthenticate on WordPress.com?
- * @param array $args Optional query parameters.
- * @return string The WordPress.com SSO URL.
- */
- function get_sso_url_or_die( $reauth = false, $args = array() ) {
- if ( empty( $reauth ) ) {
- $sso_redirect = $this->build_sso_url( $args );
- } else {
- self::clear_wpcom_profile_cookies();
- $sso_redirect = $this->build_reauth_and_sso_url( $args );
- }
-
- // If there was an error retrieving the SSO URL, then error.
- if ( is_wp_error( $sso_redirect ) ) {
- $error_message = sanitize_text_field(
- sprintf( '%s: %s', $sso_redirect->get_error_code(), $sso_redirect->get_error_message() )
- );
- JetpackTracking::record_user_event( 'sso_login_redirect_failed', array(
- 'error_message' => $error_message
- ) );
- wp_die( $error_message );
- }
-
- return $sso_redirect;
- }
-
- /**
- * Build WordPress.com SSO URL with appropriate query parameters.
- *
- * @param array $args Optional query parameters.
- * @return string WordPress.com SSO URL
- */
- function build_sso_url( $args = array() ) {
- $sso_nonce = ! empty( $args['sso_nonce'] ) ? $args['sso_nonce'] : self::request_initial_nonce();
- $defaults = array(
- 'action' => 'jetpack-sso',
- 'site_id' => Jetpack_Options::get_option( 'id' ),
- 'sso_nonce' => $sso_nonce,
- 'calypso_auth' => '1',
- );
-
- $args = wp_parse_args( $args, $defaults );
-
- if ( is_wp_error( $args['sso_nonce'] ) ) {
- return $args['sso_nonce'];
- }
-
- return add_query_arg( $args, 'https://wordpress.com/wp-login.php' );
- }
-
- /**
- * Build WordPress.com SSO URL with appropriate query parameters,
- * including the parameters necessary to force the user to reauthenticate
- * on WordPress.com.
- *
- * @param array $args Optional query parameters.
- * @return string WordPress.com SSO URL
- */
- function build_reauth_and_sso_url( $args = array() ) {
- $sso_nonce = ! empty( $args['sso_nonce'] ) ? $args['sso_nonce'] : self::request_initial_nonce();
- $redirect = $this->build_sso_url( array( 'force_auth' => '1', 'sso_nonce' => $sso_nonce ) );
-
- if ( is_wp_error( $redirect ) ) {
- return $redirect;
- }
-
- $defaults = array(
- 'action' => 'jetpack-sso',
- 'site_id' => Jetpack_Options::get_option( 'id' ),
- 'sso_nonce' => $sso_nonce,
- 'reauth' => '1',
- 'redirect_to' => urlencode( $redirect ),
- 'calypso_auth' => '1',
- );
-
- $args = wp_parse_args( $args, $defaults );
-
- if ( is_wp_error( $args['sso_nonce'] ) ) {
- return $args['sso_nonce'];
- }
-
- return add_query_arg( $args, 'https://wordpress.com/wp-login.php' );
- }
-
- /**
- * Determines local user associated with a given WordPress.com user ID.
- *
- * @since 2.6.0
- *
- * @param int $wpcom_user_id User ID from WordPress.com
- * @return object Local user object if found, null if not.
- */
- static function get_user_by_wpcom_id( $wpcom_user_id ) {
- $user_query = new WP_User_Query( array(
- 'meta_key' => 'wpcom_user_id',
- 'meta_value' => intval( $wpcom_user_id ),
- 'number' => 1,
- ) );
-
- $users = $user_query->get_results();
- return $users ? array_shift( $users ) : null;
- }
-
- /**
- * When jetpack-sso-auth-redirect query parameter is set, will redirect user to
- * WordPress.com authorization flow.
- *
- * We redirect here instead of in handle_login() because Jetpack::init()->build_connect_url
- * calls menu_page_url() which doesn't work properly until admin menus are registered.
- */
- function maybe_authorize_user_after_sso() {
- if ( empty( $_GET['jetpack-sso-auth-redirect'] ) ) {
- return;
- }
-
- $redirect_to = ! empty( $_GET['redirect_to'] ) ? esc_url_raw( $_GET['redirect_to'] ) : admin_url();
- $request_redirect_to = ! empty( $_GET['request_redirect_to'] ) ? esc_url_raw( $_GET['request_redirect_to'] ) : $redirect_to;
-
- /** This filter is documented in core/src/wp-login.php */
- $redirect_after_auth = apply_filters( 'login_redirect', $redirect_to, $request_redirect_to, wp_get_current_user() );
-
- /**
- * Since we are passing this redirect to WordPress.com and therefore can not use wp_safe_redirect(),
- * let's sanitize it here to make sure it's safe. If the redirect is not safe, then use admin_url().
- */
- $redirect_after_auth = wp_sanitize_redirect( $redirect_after_auth );
- $redirect_after_auth = wp_validate_redirect( $redirect_after_auth, admin_url() );
-
- /**
- * Return the raw connect URL with our redirect and attribute connection to SSO.
- */
- $connect_url = Jetpack::init()->build_connect_url( true, $redirect_after_auth, 'sso' );
-
- add_filter( 'allowed_redirect_hosts', array( 'Jetpack_SSO_Helpers', 'allowed_redirect_hosts' ) );
- wp_safe_redirect( $connect_url );
- exit;
- }
-
- /**
- * Cache user's display name and Gravatar so it can be displayed on the login screen. These cookies are
- * stored when the user logs out, and then deleted when the user logs in.
- */
- function store_wpcom_profile_cookies_on_logout() {
- if ( ! Jetpack::is_user_connected( get_current_user_id() ) ) {
- return;
- }
-
- $user_data = $this->get_user_data( get_current_user_id() );
- if ( ! $user_data ) {
- return;
- }
-
- setcookie(
- 'jetpack_sso_wpcom_name_' . COOKIEHASH,
- $user_data->display_name,
- time() + WEEK_IN_SECONDS,
- COOKIEPATH,
- COOKIE_DOMAIN,
- is_ssl()
- );
-
- setcookie(
- 'jetpack_sso_wpcom_gravatar_' . COOKIEHASH,
- get_avatar_url(
- $user_data->email,
- array( 'size' => 144, 'default' => 'mystery' )
- ),
- time() + WEEK_IN_SECONDS,
- COOKIEPATH,
- COOKIE_DOMAIN,
- is_ssl()
- );
- }
-
- /**
- * Determines if a local user is connected to WordPress.com
- *
- * @since 2.8
- * @param integer $user_id - Local user id
- * @return boolean
- **/
- public function is_user_connected( $user_id ) {
- return $this->get_user_data( $user_id );
- }
-
- /**
- * Retrieves a user's WordPress.com data
- *
- * @since 2.8
- * @param integer $user_id - Local user id
- * @return mixed null or stdClass
- **/
- public function get_user_data( $user_id ) {
- return get_user_meta( $user_id, 'wpcom_user_data', true );
- }
-
- /**
- * Mark SSO as discovered when an SSO JITM is viewed.
- *
- * @since 6.9.0
- *
- * @param array $envelopes Array of JITM messages received after API call.
- *
- * @return array $envelopes New array of JITM messages. May now contain only one message, about SSO.
- */
- public function inject_sso_jitm( $envelopes ) {
- // Bail early if that's not the first time the user uses SSO.
- if ( true != Jetpack_Options::get_option( 'sso_first_login' ) ) {
- return $envelopes;
- }
-
- // Update our option to mark that SSO was discovered.
- Jetpack_Options::update_option( 'sso_first_login', false );
-
- return $this->prepare_sso_first_login_jitm();
- }
-
- /**
- * Prepare JITM array for new SSO users
- *
- * @since 6.9.0
- *
- * @return array $sso_first_login_jitm array containting one object of information about our message.
- */
- private function prepare_sso_first_login_jitm() {
- // Build our custom SSO JITM.
- $discover_sso_message = array(
- 'content' => array(
- 'message' => esc_html__( "You've successfully signed in with WordPress.com Secure Sign On!", 'jetpack' ),
- 'icon' => 'jetpack',
- 'list' => array(),
- 'description' => esc_html__( 'Interested in learning more about how Secure Sign On keeps your site safer?', 'jetpack' ),
- 'classes' => '',
- ),
- 'CTA' => array(
- 'message' => esc_html__( 'Learn More', 'jetpack' ),
- 'hook' => '',
- 'newWindow' => true,
- 'primary' => true,
- ),
- 'template' => 'default',
- 'ttl' => 300,
- 'id' => 'sso_discover',
- 'feature_class' => 'sso',
- 'expires' => 3628800,
- 'max_dismissal' => 1,
- 'activate_module' => null,
- );
-
- return array( json_decode( json_encode( $discover_sso_message ) ) );
- }
-}
-
-Jetpack_SSO::get_instance();
diff --git a/plugins/jetpack/modules/sso/class.jetpack-sso-helpers.php b/plugins/jetpack/modules/sso/class.jetpack-sso-helpers.php
deleted file mode 100644
index 307e3786..00000000
--- a/plugins/jetpack/modules/sso/class.jetpack-sso-helpers.php
+++ /dev/null
@@ -1,325 +0,0 @@
-<?php
-
-if ( ! class_exists( 'Jetpack_SSO_Helpers' ) ) :
-
-/**
- * A collection of helper functions used in the SSO module.
- *
- * @since 4.1.0
- */
-class Jetpack_SSO_Helpers {
- /**
- * Determine if the login form should be hidden or not
- *
- * @return bool
- **/
- static function should_hide_login_form() {
- /**
- * Remove the default log in form, only leave the WordPress.com log in button.
- *
- * @module sso
- *
- * @since 3.1.0
- *
- * @param bool get_option( 'jetpack_sso_remove_login_form', false ) Should the default log in form be removed. Default to false.
- */
- return (bool) apply_filters( 'jetpack_remove_login_form', get_option( 'jetpack_sso_remove_login_form', false ) );
- }
-
- /**
- * Returns a boolean value for whether logging in by matching the WordPress.com user email to a
- * Jetpack site user's email is allowed.
- *
- * @return bool
- */
- static function match_by_email() {
- $match_by_email = ( 1 == get_option( 'jetpack_sso_match_by_email', true ) ) ? true: false;
- $match_by_email = defined( 'WPCC_MATCH_BY_EMAIL' ) ? WPCC_MATCH_BY_EMAIL : $match_by_email;
-
- /**
- * Link the local account to an account on WordPress.com using the same email address.
- *
- * @module sso
- *
- * @since 2.6.0
- *
- * @param bool $match_by_email Should we link the local account to an account on WordPress.com using the same email address. Default to false.
- */
- return (bool) apply_filters( 'jetpack_sso_match_by_email', $match_by_email );
- }
-
- /**
- * Returns a boolean for whether users are allowed to register on the Jetpack site with SSO,
- * even though the site disallows normal registrations.
- *
- * @return bool
- */
- static function new_user_override( $user_data = null ) {
- $new_user_override = defined( 'WPCC_NEW_USER_OVERRIDE' ) ? WPCC_NEW_USER_OVERRIDE : false;
-
- /**
- * Allow users to register on your site with a WordPress.com account, even though you disallow normal registrations.
- * If you return a string that corresponds to a user role, the user will be given that role.
- *
- * @module sso
- *
- * @since 2.6.0
- * @since 4.6 $user_data object is now passed to the jetpack_sso_new_user_override filter
- *
- * @param bool $new_user_override Allow users to register on your site with a WordPress.com account. Default to false.
- * @param object|null $user_data An object containing the user data returned from WordPress.com.
- */
- $role = apply_filters( 'jetpack_sso_new_user_override', $new_user_override, $user_data );
-
- if ( $role ) {
- if ( is_string( $role ) && get_role( $role ) ) {
- return $role;
- } else {
- return get_option( 'default_role' );
- }
- }
-
- return false;
- }
-
- /**
- * Returns a boolean value for whether two-step authentication is required for SSO.
- *
- * @since 4.1.0
- *
- * @return bool
- */
- static function is_two_step_required() {
- /**
- * Is it required to have 2-step authentication enabled on WordPress.com to use SSO?
- *
- * @module sso
- *
- * @since 2.8.0
- *
- * @param bool get_option( 'jetpack_sso_require_two_step' ) Does SSO require 2-step authentication?
- */
- return (bool) apply_filters( 'jetpack_sso_require_two_step', get_option( 'jetpack_sso_require_two_step', false ) );
- }
-
- /**
- * Returns a boolean for whether a user that is attempting to log in will be automatically
- * redirected to WordPress.com to begin the SSO flow.
- *
- * @return bool
- */
- static function bypass_login_forward_wpcom() {
- /**
- * Redirect the site's log in form to WordPress.com's log in form.
- *
- * @module sso
- *
- * @since 3.1.0
- *
- * @param bool false Should the site's log in form be automatically forwarded to WordPress.com's log in form.
- */
- return (bool) apply_filters( 'jetpack_sso_bypass_login_forward_wpcom', false );
- }
-
- /**
- * Returns a boolean for whether the SSO login form should be displayed as the default
- * when both the default and SSO login form allowed.
- *
- * @since 4.1.0
- *
- * @return bool
- */
- static function show_sso_login() {
- if ( self::should_hide_login_form() ) {
- return true;
- }
-
- /**
- * Display the SSO login form as the default when both the default and SSO login forms are enabled.
- *
- * @module sso
- *
- * @since 4.1.0
- *
- * @param bool true Should the SSO login form be displayed by default when the default login form is also enabled?
- */
- return (bool) apply_filters( 'jetpack_sso_default_to_sso_login', true );
- }
-
- /**
- * Returns a boolean for whether the two step required checkbox, displayed on the Jetpack admin page, should be disabled.
- *
- * @since 4.1.0
- *
- * @return bool
- */
- static function is_require_two_step_checkbox_disabled() {
- return (bool) has_filter( 'jetpack_sso_require_two_step' );
- }
-
- /**
- * Returns a boolean for whether the match by email checkbox, displayed on the Jetpack admin page, should be disabled.
- *
- * @since 4.1.0
- *
- * @return bool
- */
- static function is_match_by_email_checkbox_disabled() {
- return defined( 'WPCC_MATCH_BY_EMAIL' ) || has_filter( 'jetpack_sso_match_by_email' );
- }
-
- /**
- * Returns an array of hosts that SSO will redirect to.
- *
- * Instead of accessing JETPACK__API_BASE within the method directly, we set it as the
- * default for $api_base due to restrictions with testing constants in our tests.
- *
- * @since 4.3.0
- * @since 4.6.0 Added public-api.wordpress.com as an allowed redirect
- *
- * @param array $hosts
- * @param string $api_base
- *
- * @return array
- */
- static function allowed_redirect_hosts( $hosts, $api_base = JETPACK__API_BASE ) {
- if ( empty( $hosts ) ) {
- $hosts = array();
- }
-
- $hosts[] = 'wordpress.com';
- $hosts[] = 'jetpack.wordpress.com';
- $hosts[] = 'public-api.wordpress.com';
-
- if ( false === strpos( $api_base, 'jetpack.wordpress.com/jetpack' ) ) {
- $base_url_parts = parse_url( esc_url_raw( $api_base ) );
- if ( $base_url_parts && ! empty( $base_url_parts[ 'host' ] ) ) {
- $hosts[] = $base_url_parts[ 'host' ];
- }
- }
-
- return array_unique( $hosts );
- }
-
- static function generate_user( $user_data ) {
- $username = $user_data->login;
- /**
- * Determines how many times the SSO module can attempt to randomly generate a user.
- *
- * @module sso
- *
- * @since 4.3.2
- *
- * @param int 5 By default, SSO will attempt to random generate a user up to 5 times.
- */
- $num_tries = intval( apply_filters( 'jetpack_sso_allowed_username_generate_retries', 5 ) );
-
- $tries = 0;
- while ( ( $exists = username_exists( $username ) ) && $tries++ < $num_tries ) {
- $username = $user_data->login . '_' . $user_data->ID . '_' . mt_rand();
- }
-
- if ( $exists ) {
- return false;
- }
-
- $user = (object) array();
- $user->user_pass = wp_generate_password( 20 );
- $user->user_login = wp_slash( $username );
- $user->user_email = wp_slash( $user_data->email );
- $user->display_name = $user_data->display_name;
- $user->first_name = $user_data->first_name;
- $user->last_name = $user_data->last_name;
- $user->url = $user_data->url;
- $user->description = $user_data->description;
-
- if ( isset( $user_data->role ) && $user_data->role ) {
- $user->role = $user_data->role;
- }
-
- $created_user_id = wp_insert_user( $user );
-
- update_user_meta( $created_user_id, 'wpcom_user_id', $user_data->ID );
- return get_userdata( $created_user_id );
- }
-
- static function extend_auth_cookie_expiration_for_sso() {
- /**
- * Determines how long the auth cookie is valid for when a user logs in with SSO.
- *
- * @module sso
- *
- * @since 4.4.0
- * @since 6.1.0 Fixed a typo. Filter was previously jetpack_sso_auth_cookie_expirtation.
- *
- * @param int YEAR_IN_SECONDS
- */
- return intval( apply_filters( 'jetpack_sso_auth_cookie_expiration', YEAR_IN_SECONDS ) );
- }
-
- /**
- * Determines if the SSO form should be displayed for the current action.
- *
- * @since 4.6.0
- *
- * @param string $action
- *
- * @return bool Is SSO allowed for the current action?
- */
- static function display_sso_form_for_action( $action ) {
- /**
- * Allows plugins the ability to overwrite actions where the SSO form is allowed to be used.
- *
- * @module sso
- *
- * @since 4.6.0
- *
- * @param array $allowed_actions_for_sso
- */
- $allowed_actions_for_sso = (array) apply_filters( 'jetpack_sso_allowed_actions', array(
- 'login',
- 'jetpack-sso',
- 'jetpack_json_api_authorization',
- ) );
- return in_array( $action, $allowed_actions_for_sso );
- }
-
- /**
- * This method returns an environment array that is meant to simulate `$_REQUEST` when the initial
- * JSON API auth request was made.
- *
- * @since 4.6.0
- *
- * @return array|bool
- */
- static function get_json_api_auth_environment() {
- if ( empty( $_COOKIE['jetpack_sso_original_request'] ) ) {
- return false;
- }
-
- $original_request = esc_url_raw( $_COOKIE['jetpack_sso_original_request'] );
-
- $parsed_url = wp_parse_url( $original_request );
- if ( empty( $parsed_url ) || empty( $parsed_url['query'] ) ) {
- return false;
- }
-
- $args = array();
- wp_parse_str( $parsed_url['query'], $args );
-
- if ( empty( $args ) || empty( $args['action'] ) ) {
- return false;
- }
-
- if ( 'jetpack_json_api_authorization' != $args['action'] ) {
- return false;
- }
-
- return array_merge(
- $args,
- array( 'jetpack_json_api_original_query' => $original_request )
- );
- }
-}
-
-endif;
diff --git a/plugins/jetpack/modules/sso/class.jetpack-sso-notices.php b/plugins/jetpack/modules/sso/class.jetpack-sso-notices.php
deleted file mode 100644
index 138222ab..00000000
--- a/plugins/jetpack/modules/sso/class.jetpack-sso-notices.php
+++ /dev/null
@@ -1,203 +0,0 @@
-<?php
-
-if ( ! class_exists( 'Jetpack_SSO_Notices' ) ) :
-
-/**
- * A collection of helper functions used in the SSO module.
- *
- * @since 4.4.0
- */
-class Jetpack_SSO_Notices {
- /**
- * Error message displayed on the login form when two step is required and
- * the user's account on WordPress.com does not have two step enabled.
- *
- * @since 2.7
- * @param string $message
- * @return string
- **/
- public static function error_msg_enable_two_step( $message ) {
- $error = sprintf(
- wp_kses(
- __(
- 'Two-Step Authentication is required to access this site. Please visit your <a href="%1$s" rel="noopener noreferrer" target="_blank">Security Settings</a> to configure <a href="%2$s" rel="noopener noreferrer" target="_blank">Two-step Authentication</a> for your account.',
- 'jetpack'
- ),
- array( 'a' => array( 'href' => array() ) )
- ),
- 'https://wordpress.com/me/security/two-step',
- 'https://support.wordpress.com/security/two-step-authentication/'
- );
-
- $message .= sprintf( '<p class="message" id="login_error">%s</p>', $error );
-
- return $message;
- }
-
- /**
- * Error message displayed when the user tries to SSO, but match by email
- * is off and they already have an account with their email address on
- * this site.
- *
- * @param string $message
- * @return string
- */
- public static function error_msg_email_already_exists( $message ) {
- $error = sprintf(
- wp_kses(
- __(
- 'You already have an account on this site. Please <a href="%1$s">sign in</a> with your username and password and then connect to WordPress.com.',
- 'jetpack'
- ),
- array( 'a' => array( 'href' => array() ) )
- ),
- esc_url_raw( add_query_arg( 'jetpack-sso-show-default-form', '1', wp_login_url() ) )
- );
-
- $message .= sprintf( '<p class="message" id="login_error">%s</p>', $error );
-
- return $message;
- }
-
- /**
- * Error message that is displayed when the current site is in an identity crisis and SSO can not be used.
- *
- * @since 4.3.2
- *
- * @param $message
- *
- * @return string
- */
- public static function error_msg_identity_crisis( $message ) {
- $error = esc_html__( 'Logging in with WordPress.com is not currently available because this site is experiencing connection problems.', 'jetpack' );
- $message .= sprintf( '<p class="message" id="login_error">%s</p>', $error );
- return $message;
- }
-
- /**
- * Error message that is displayed when we are not able to verify the SSO nonce due to an XML error or
- * failed validation. In either case, we prompt the user to try again or log in with username and password.
- *
- * @since 4.3.2
- *
- * @param $message
- *
- * @return string
- */
- public static function error_invalid_response_data( $message ) {
- $error = esc_html__(
- 'There was an error logging you in via WordPress.com, please try again or try logging in with your username and password.',
- 'jetpack'
- );
- $message .= sprintf( '<p class="message" id="login_error">%s</p>', $error );
- return $message;
- }
-
- /**
- * Error message that is displayed when we were not able to automatically create an account for a user
- * after a user has logged in via SSO. By default, this message is triggered after trying to create an account 5 times.
- *
- * @since 4.3.2
- *
- * @param $message
- *
- * @return string
- */
- public static function error_unable_to_create_user( $message ) {
- $error = esc_html__(
- 'There was an error creating a user for you. Please contact the administrator of your site.',
- 'jetpack'
- );
- $message .= sprintf( '<p class="message" id="login_error">%s</p>', $error );
- return $message;
- }
-
- /**
- * When the default login form is hidden, this method is called on the 'authenticate' filter with a priority of 30.
- * This method disables the ability to submit the default login form.
- *
- * @param $user
- *
- * @return WP_Error
- */
- public static function disable_default_login_form( $user ) {
- if ( is_wp_error( $user ) ) {
- return $user;
- }
-
- /**
- * Since we're returning an error that will be shown as a red notice, let's remove the
- * informational "blue" notice.
- */
- remove_filter( 'login_message', array( 'Jetpack_SSO_Notices', 'msg_login_by_jetpack' ) );
- return new WP_Error( 'jetpack_sso_required', self::get_sso_required_message() );
- }
-
- /**
- * Message displayed when the site admin has disabled the default WordPress
- * login form in Settings > General > Secure Sign On
- *
- * @since 2.7
- * @param string $message
- *
- * @return string
- **/
- public static function msg_login_by_jetpack( $message ) {
- $message .= sprintf( '<p class="message">%s</p>', self::get_sso_required_message() );
- return $message;
- }
-
- public static function get_sso_required_message() {
- $msg = esc_html__(
- 'A WordPress.com account is required to access this site. Click the button below to sign in or create a free WordPress.com account.',
- 'jetpack'
- );
-
- /**
- * Filter the message displayed when the default WordPress login form is disabled.
- *
- * @module sso
- *
- * @since 2.8.0
- *
- * @param string $msg Disclaimer when default WordPress login form is disabled.
- */
- return apply_filters( 'jetpack_sso_disclaimer_message', $msg );
- }
-
- /**
- * Message displayed when the user can not be found after approving the SSO process on WordPress.com
- *
- * @param string $message
- * @return string
- */
- public static function cant_find_user( $message ) {
- $error = esc_html__(
- "We couldn't find your account. If you already have an account, make sure you have connected to WordPress.com.",
- 'jetpack'
- );
- $message .= sprintf( '<p class="message" id="login_error">%s</p>', $error );
-
- return $message;
- }
-
- /**
- * Error message that is displayed when the current site is in an identity crisis and SSO can not be used.
- *
- * @since 4.4.0
- *
- * @param $message
- *
- * @return string
- */
- public static function sso_not_allowed_in_staging( $message ) {
- $error = esc_html__(
- 'Logging in with WordPress.com is disabled for sites that are in staging mode.',
- 'jetpack'
- );
- $message .= sprintf( '<p class="message">%s</p>', $error );
- return $message;
- }
-}
-
-endif;
diff --git a/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.css b/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.css
deleted file mode 100644
index ea07b3ff..00000000
--- a/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.css
+++ /dev/null
@@ -1,177 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-#loginform {
- /* We set !important because sometimes static is added inline */
- position: relative !important;
- padding-bottom: 92px;
-}
-
-.jetpack-sso-repositioned #loginform {
- padding-bottom: 26px;
-}
-
-#loginform #jetpack-sso-wrap,
-#loginform #jetpack-sso-wrap * {
- box-sizing: border-box;
-}
-
-
-#jetpack-sso-wrap__action,
-#jetpack-sso-wrap__user{
- display: none;
-}
-
-.jetpack-sso-form-display #jetpack-sso-wrap__action,
-.jetpack-sso-form-display #jetpack-sso-wrap__user {
- display: block;
-}
-
-#jetpack-sso-wrap {
- position: absolute;
- bottom: 20px;
- padding: 0 24px;
- margin-right: -24px;
- margin-left: -24px;
- width: 100%;
-}
-
-.jetpack-sso-repositioned #jetpack-sso-wrap {
- position: relative;
- bottom: auto;
- padding: 0;
- margin-top: 16px;
- margin-right: 0;
- margin-left: 0;
-}
-
-.jetpack-sso-form-display #jetpack-sso-wrap {
- position: relative;
- bottom: auto;
- padding: 0;
- margin-top: 0;
- margin-right: 0;
- margin-left: 0;
-}
-
-#loginform #jetpack-sso-wrap p {
- color: #777777;
- margin-bottom: 16px;
-}
-
-#jetpack-sso-wrap a {
- display: block;
- width: 100%;
- text-align: center;
- text-decoration: none;
-}
-
-#jetpack-sso-wrap .jetpack-sso-toggle.wpcom {
- display: none;
-}
-
-.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.wpcom {
- display: block;
-}
-
-
-.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.default {
- display: none;
-}
-
-
-.jetpack-sso-form-display #loginform > p,
-.jetpack-sso-form-display #loginform > div {
- display: none;
-}
-
-.jetpack-sso-form-display #loginform #jetpack-sso-wrap {
- display: block;
-}
-
-.jetpack-sso-form-display #loginform {
- padding: 26px 24px;
-}
-
-.jetpack-sso-or {
- margin-bottom: 16px;
- position: relative;
- text-align: center;
-}
-
-.jetpack-sso-or:before {
- background: #E5E5E5;
- content: '';
- height: 1px;
- position: absolute;
- right: 0;
- top: 50%;
- width: 100%;
-}
-.jetpack-sso-or span {
- background: #fff;
- color: #777;
- position: relative;
- padding: 0 8px;
- text-transform: uppercase
-}
-
-.jetpack-sso.button {
- height: 36px;
- line-height: 34px;
- float: none;
- margin-bottom: 16px;
- position: relative;
- width: 100%;
-}
-
-.jetpack-sso.button > span {
- position: relative;
- padding-right: 30px;
-}
-
-.jetpack-sso.button .genericon-wordpress {
- position: absolute;
- right: 0;
- top: -3px;
- font-size: 24px;
-}
-
-@media screen and ( max-width: 782px ) {
- .jetpack-sso.button {
- line-height: 22px;
- }
-}
-
-#jetpack-sso-wrap__user img {
- border-radius: 50%;
- display: block;
- margin: 0 auto 16px;
-}
-
-#jetpack-sso-wrap__user h2 {
- font-size: 21px;
- font-weight: 300;
- margin-bottom: 16px;
- text-align: center;
-}
-
-#jetpack-sso-wrap__user h2 span {
- font-weight: bold;
-}
-
-.jetpack-sso-wrap__reauth {
- margin-bottom: 16px;
-}
-
-.jetpack-sso-form-display #nav {
- display: none;
-}
-
-.jetpack-sso-form-display #backtoblog {
- margin: 24px 0 0;
-}
-
-.jetpack-sso-clear:after {
- content: "";
- display: table;
- clear: both;
-}
diff --git a/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.min.css b/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.min.css
deleted file mode 100644
index 513d726f..00000000
--- a/plugins/jetpack/modules/sso/jetpack-sso-login-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-#loginform{position:relative!important;padding-bottom:92px}.jetpack-sso-repositioned #loginform{padding-bottom:26px}#loginform #jetpack-sso-wrap,#loginform #jetpack-sso-wrap *{box-sizing:border-box}#jetpack-sso-wrap__action,#jetpack-sso-wrap__user{display:none}.jetpack-sso-form-display #jetpack-sso-wrap__action,.jetpack-sso-form-display #jetpack-sso-wrap__user{display:block}#jetpack-sso-wrap{position:absolute;bottom:20px;padding:0 24px;margin-right:-24px;margin-left:-24px;width:100%}.jetpack-sso-repositioned #jetpack-sso-wrap{position:relative;bottom:auto;padding:0;margin-top:16px;margin-right:0;margin-left:0}.jetpack-sso-form-display #jetpack-sso-wrap{position:relative;bottom:auto;padding:0;margin-top:0;margin-right:0;margin-left:0}#loginform #jetpack-sso-wrap p{color:#777;margin-bottom:16px}#jetpack-sso-wrap a{display:block;width:100%;text-align:center;text-decoration:none}#jetpack-sso-wrap .jetpack-sso-toggle.wpcom{display:none}.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.wpcom{display:block}.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.default{display:none}.jetpack-sso-form-display #loginform>div,.jetpack-sso-form-display #loginform>p{display:none}.jetpack-sso-form-display #loginform #jetpack-sso-wrap{display:block}.jetpack-sso-form-display #loginform{padding:26px 24px}.jetpack-sso-or{margin-bottom:16px;position:relative;text-align:center}.jetpack-sso-or:before{background:#e5e5e5;content:'';height:1px;position:absolute;right:0;top:50%;width:100%}.jetpack-sso-or span{background:#fff;color:#777;position:relative;padding:0 8px;text-transform:uppercase}.jetpack-sso.button{height:36px;line-height:34px;float:none;margin-bottom:16px;position:relative;width:100%}.jetpack-sso.button>span{position:relative;padding-right:30px}.jetpack-sso.button .genericon-wordpress{position:absolute;right:0;top:-3px;font-size:24px}@media screen and (max-width:782px){.jetpack-sso.button{line-height:22px}}#jetpack-sso-wrap__user img{border-radius:50%;display:block;margin:0 auto 16px}#jetpack-sso-wrap__user h2{font-size:21px;font-weight:300;margin-bottom:16px;text-align:center}#jetpack-sso-wrap__user h2 span{font-weight:700}.jetpack-sso-wrap__reauth{margin-bottom:16px}.jetpack-sso-form-display #nav{display:none}.jetpack-sso-form-display #backtoblog{margin:24px 0 0}.jetpack-sso-clear:after{content:"";display:table;clear:both} \ No newline at end of file
diff --git a/plugins/jetpack/modules/sso/jetpack-sso-login.css b/plugins/jetpack/modules/sso/jetpack-sso-login.css
deleted file mode 100644
index 3160bcb6..00000000
--- a/plugins/jetpack/modules/sso/jetpack-sso-login.css
+++ /dev/null
@@ -1,176 +0,0 @@
-#loginform {
- /* We set !important because sometimes static is added inline */
- position: relative !important;
- padding-bottom: 92px;
-}
-
-.jetpack-sso-repositioned #loginform {
- padding-bottom: 26px;
-}
-
-#loginform #jetpack-sso-wrap,
-#loginform #jetpack-sso-wrap * {
- box-sizing: border-box;
-}
-
-
-#jetpack-sso-wrap__action,
-#jetpack-sso-wrap__user{
- display: none;
-}
-
-.jetpack-sso-form-display #jetpack-sso-wrap__action,
-.jetpack-sso-form-display #jetpack-sso-wrap__user {
- display: block;
-}
-
-#jetpack-sso-wrap {
- position: absolute;
- bottom: 20px;
- padding: 0 24px;
- margin-left: -24px;
- margin-right: -24px;
- width: 100%;
-}
-
-.jetpack-sso-repositioned #jetpack-sso-wrap {
- position: relative;
- bottom: auto;
- padding: 0;
- margin-top: 16px;
- margin-left: 0;
- margin-right: 0;
-}
-
-.jetpack-sso-form-display #jetpack-sso-wrap {
- position: relative;
- bottom: auto;
- padding: 0;
- margin-top: 0;
- margin-left: 0;
- margin-right: 0;
-}
-
-#loginform #jetpack-sso-wrap p {
- color: #777777;
- margin-bottom: 16px;
-}
-
-#jetpack-sso-wrap a {
- display: block;
- width: 100%;
- text-align: center;
- text-decoration: none;
-}
-
-#jetpack-sso-wrap .jetpack-sso-toggle.wpcom {
- display: none;
-}
-
-.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.wpcom {
- display: block;
-}
-
-
-.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.default {
- display: none;
-}
-
-
-.jetpack-sso-form-display #loginform > p,
-.jetpack-sso-form-display #loginform > div {
- display: none;
-}
-
-.jetpack-sso-form-display #loginform #jetpack-sso-wrap {
- display: block;
-}
-
-.jetpack-sso-form-display #loginform {
- padding: 26px 24px;
-}
-
-.jetpack-sso-or {
- margin-bottom: 16px;
- position: relative;
- text-align: center;
-}
-
-.jetpack-sso-or:before {
- background: #E5E5E5;
- content: '';
- height: 1px;
- position: absolute;
- left: 0;
- top: 50%;
- width: 100%;
-}
-.jetpack-sso-or span {
- background: #fff;
- color: #777;
- position: relative;
- padding: 0 8px;
- text-transform: uppercase
-}
-
-.jetpack-sso.button {
- height: 36px;
- line-height: 34px;
- float: none;
- margin-bottom: 16px;
- position: relative;
- width: 100%;
-}
-
-.jetpack-sso.button > span {
- position: relative;
- padding-left: 30px;
-}
-
-.jetpack-sso.button .genericon-wordpress {
- position: absolute;
- left: 0;
- top: -3px;
- font-size: 24px;
-}
-
-@media screen and ( max-width: 782px ) {
- .jetpack-sso.button {
- line-height: 22px;
- }
-}
-
-#jetpack-sso-wrap__user img {
- border-radius: 50%;
- display: block;
- margin: 0 auto 16px;
-}
-
-#jetpack-sso-wrap__user h2 {
- font-size: 21px;
- font-weight: 300;
- margin-bottom: 16px;
- text-align: center;
-}
-
-#jetpack-sso-wrap__user h2 span {
- font-weight: bold;
-}
-
-.jetpack-sso-wrap__reauth {
- margin-bottom: 16px;
-}
-
-.jetpack-sso-form-display #nav {
- display: none;
-}
-
-.jetpack-sso-form-display #backtoblog {
- margin: 24px 0 0;
-}
-
-.jetpack-sso-clear:after {
- content: "";
- display: table;
- clear: both;
-}
diff --git a/plugins/jetpack/modules/sso/jetpack-sso-login.js b/plugins/jetpack/modules/sso/jetpack-sso-login.js
deleted file mode 100644
index 9487aef0..00000000
--- a/plugins/jetpack/modules/sso/jetpack-sso-login.js
+++ /dev/null
@@ -1,32 +0,0 @@
-jQuery( document ).ready( function( $ ) {
- var body = $( 'body' ),
- toggleSSO = $( '.jetpack-sso-toggle' ),
- userLogin = $( '#user_login' ),
- ssoWrap = $( '#jetpack-sso-wrap' ),
- loginForm = $( '#loginform' ),
- overflow = $( '<div class="jetpack-sso-clear"></div>' );
-
- // The overflow div is a poor man's clearfloat. We reposition the remember me
- // checkbox and the submit button within that to clear the float on the
- // remember me checkbox. This is important since we're positioning the SSO
- // UI under the submit button.
- //
- // @TODO: Remove this approach once core ticket 28528 is in and we have more actions in wp-login.php.
- // See - https://core.trac.wordpress.org/ticket/28528
- loginForm.append( overflow );
- overflow.append( $( 'p.forgetmenot' ), $( 'p.submit' ) );
-
- // We reposition the SSO UI at the bottom of the login form which
- // fixes a tab order issue. Then we override any styles for absolute
- // positioning of the SSO UI.
- loginForm.append( ssoWrap );
- body.addClass( 'jetpack-sso-repositioned' );
-
- toggleSSO.on( 'click', function( e ) {
- e.preventDefault();
- body.toggleClass( 'jetpack-sso-form-display' );
- if ( ! body.hasClass( 'jetpack-sso-form-display' ) ) {
- userLogin.focus();
- }
- } );
-} );
diff --git a/plugins/jetpack/modules/sso/jetpack-sso-login.min.css b/plugins/jetpack/modules/sso/jetpack-sso-login.min.css
deleted file mode 100644
index eeaeff27..00000000
--- a/plugins/jetpack/modules/sso/jetpack-sso-login.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-#loginform{position:relative!important;padding-bottom:92px}.jetpack-sso-repositioned #loginform{padding-bottom:26px}#loginform #jetpack-sso-wrap,#loginform #jetpack-sso-wrap *{box-sizing:border-box}#jetpack-sso-wrap__action,#jetpack-sso-wrap__user{display:none}.jetpack-sso-form-display #jetpack-sso-wrap__action,.jetpack-sso-form-display #jetpack-sso-wrap__user{display:block}#jetpack-sso-wrap{position:absolute;bottom:20px;padding:0 24px;margin-left:-24px;margin-right:-24px;width:100%}.jetpack-sso-repositioned #jetpack-sso-wrap{position:relative;bottom:auto;padding:0;margin-top:16px;margin-left:0;margin-right:0}.jetpack-sso-form-display #jetpack-sso-wrap{position:relative;bottom:auto;padding:0;margin-top:0;margin-left:0;margin-right:0}#loginform #jetpack-sso-wrap p{color:#777;margin-bottom:16px}#jetpack-sso-wrap a{display:block;width:100%;text-align:center;text-decoration:none}#jetpack-sso-wrap .jetpack-sso-toggle.wpcom{display:none}.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.wpcom{display:block}.jetpack-sso-form-display #jetpack-sso-wrap .jetpack-sso-toggle.default{display:none}.jetpack-sso-form-display #loginform>div,.jetpack-sso-form-display #loginform>p{display:none}.jetpack-sso-form-display #loginform #jetpack-sso-wrap{display:block}.jetpack-sso-form-display #loginform{padding:26px 24px}.jetpack-sso-or{margin-bottom:16px;position:relative;text-align:center}.jetpack-sso-or:before{background:#e5e5e5;content:'';height:1px;position:absolute;left:0;top:50%;width:100%}.jetpack-sso-or span{background:#fff;color:#777;position:relative;padding:0 8px;text-transform:uppercase}.jetpack-sso.button{height:36px;line-height:34px;float:none;margin-bottom:16px;position:relative;width:100%}.jetpack-sso.button>span{position:relative;padding-left:30px}.jetpack-sso.button .genericon-wordpress{position:absolute;left:0;top:-3px;font-size:24px}@media screen and (max-width:782px){.jetpack-sso.button{line-height:22px}}#jetpack-sso-wrap__user img{border-radius:50%;display:block;margin:0 auto 16px}#jetpack-sso-wrap__user h2{font-size:21px;font-weight:300;margin-bottom:16px;text-align:center}#jetpack-sso-wrap__user h2 span{font-weight:700}.jetpack-sso-wrap__reauth{margin-bottom:16px}.jetpack-sso-form-display #nav{display:none}.jetpack-sso-form-display #backtoblog{margin:24px 0 0}.jetpack-sso-clear:after{content:"";display:table;clear:both} \ No newline at end of file
diff --git a/plugins/jetpack/modules/stats.php b/plugins/jetpack/modules/stats.php
deleted file mode 100644
index 6169caa6..00000000
--- a/plugins/jetpack/modules/stats.php
+++ /dev/null
@@ -1,1845 +0,0 @@
-<?php
-/**
- * Module Name: Site Stats
- * Module Description: Collect valuable traffic stats and insights.
- * Sort Order: 1
- * Recommendation Order: 2
- * First Introduced: 1.1
- * Requires Connection: Yes
- * Auto Activate: Yes
- * Module Tags: Site Stats, Recommended
- * Feature: Engagement
- * Additional Search Queries: statistics, tracking, analytics, views, traffic, stats
- *
- * @package Jetpack
- */
-
-if ( defined( 'STATS_VERSION' ) ) {
- return;
-}
-
-define( 'STATS_VERSION', '9' );
-defined( 'STATS_DASHBOARD_SERVER' ) or define( 'STATS_DASHBOARD_SERVER', 'dashboard.wordpress.com' );
-
-add_action( 'jetpack_modules_loaded', 'stats_load' );
-
-/**
- * Load Stats.
- *
- * @access public
- * @return void
- */
-function stats_load() {
- Jetpack::enable_module_configurable( __FILE__ );
- Jetpack::module_configuration_load( __FILE__, 'stats_configuration_load' );
- Jetpack::module_configuration_head( __FILE__, 'stats_configuration_head' );
- Jetpack::module_configuration_screen( __FILE__, 'stats_configuration_screen' );
-
- // Generate the tracking code after wp() has queried for posts.
- add_action( 'template_redirect', 'stats_template_redirect', 1 );
-
- add_action( 'wp_head', 'stats_admin_bar_head', 100 );
-
- add_action( 'wp_head', 'stats_hide_smile_css' );
-
- add_action( 'jetpack_admin_menu', 'stats_admin_menu' );
-
- // Map stats caps.
- add_filter( 'map_meta_cap', 'stats_map_meta_caps', 10, 3 );
-
- if ( isset( $_GET['oldwidget'] ) ) {
- // Old one.
- add_action( 'wp_dashboard_setup', 'stats_register_dashboard_widget' );
- } else {
- add_action( 'admin_init', 'stats_merged_widget_admin_init' );
- }
-
- add_filter( 'jetpack_xmlrpc_methods', 'stats_xmlrpc_methods' );
-
- add_filter( 'pre_option_db_version', 'stats_ignore_db_version' );
-
- // Add an icon to see stats in WordPress.com for a particular post
- add_action( 'admin_print_styles-edit.php', 'jetpack_stats_load_admin_css' );
- add_filter( 'manage_posts_columns', 'jetpack_stats_post_table' );
- add_filter( 'manage_pages_columns', 'jetpack_stats_post_table' );
- add_action( 'manage_posts_custom_column', 'jetpack_stats_post_table_cell', 10, 2 );
- add_action( 'manage_pages_custom_column', 'jetpack_stats_post_table_cell', 10, 2 );
-}
-
-/**
- * Delay conditional for current_user_can to after init.
- *
- * @access public
- * @return void
- */
-function stats_merged_widget_admin_init() {
- if ( current_user_can( 'view_stats' ) ) {
- add_action( 'load-index.php', 'stats_enqueue_dashboard_head' );
- add_action( 'wp_dashboard_setup', 'stats_register_widget_control_callback' ); // Hacky but works.
- add_action( 'jetpack_dashboard_widget', 'stats_jetpack_dashboard_widget' );
- }
-}
-
-/**
- * Enqueue Stats Dashboard
- *
- * @access public
- * @return void
- */
-function stats_enqueue_dashboard_head() {
- add_action( 'admin_head', 'stats_dashboard_head' );
-}
-
-/**
- * Checks if filter is set and dnt is enabled.
- *
- * @return bool
- */
-function jetpack_is_dnt_enabled() {
- /**
- * Filter the option which decides honor DNT or not.
- *
- * @module stats
- * @since 6.1.0
- *
- * @param bool false Honors DNT for clients who don't want to be tracked. Defaults to false. Set to true to enable.
- */
- if ( false === apply_filters( 'jetpack_honor_dnt_header_for_stats', false ) ) {
- return false;
- }
-
- foreach ( $_SERVER as $name => $value ) {
- if ( 'http_dnt' == strtolower( $name ) && 1 == $value ) {
- return true;
- }
- }
-
- return false;
-}
-
-/**
- * Prevent sparkline img requests being redirected to upgrade.php.
- * See wp-admin/admin.php where it checks $wp_db_version.
- *
- * @access public
- * @param mixed $version Version.
- * @return string $version.
- */
-function stats_ignore_db_version( $version ) {
- if (
- is_admin() &&
- isset( $_GET['page'] ) && 'stats' === $_GET['page'] &&
- isset( $_GET['chart'] ) && strpos($_GET['chart'], 'admin-bar-hours') === 0
- ) {
- global $wp_db_version;
- return $wp_db_version;
- }
- return $version;
-}
-
-/**
- * Maps view_stats cap to read cap as needed.
- *
- * @access public
- * @param mixed $caps Caps.
- * @param mixed $cap Cap.
- * @param mixed $user_id User ID.
- * @return array Possibly mapped capabilities for meta capability.
- */
-function stats_map_meta_caps( $caps, $cap, $user_id ) {
- // Map view_stats to exists.
- if ( 'view_stats' === $cap ) {
- $user = new WP_User( $user_id );
- $user_role = array_shift( $user->roles );
- $stats_roles = stats_get_option( 'roles' );
-
- // Is the users role in the available stats roles?
- if ( is_array( $stats_roles ) && in_array( $user_role, $stats_roles ) ) {
- $caps = array( 'read' );
- }
- }
-
- return $caps;
-}
-
-/**
- * Stats Template Redirect.
- *
- * @access public
- * @return void
- */
-function stats_template_redirect() {
- global $current_user, $rendered_stats_footer;
-
- if ( is_feed() || is_robots() || is_trackback() || is_preview() || jetpack_is_dnt_enabled() ) {
- return;
- }
-
- // Should we be counting this user's views?
- if ( ! empty( $current_user->ID ) ) {
- $count_roles = stats_get_option( 'count_roles' );
- if ( ! is_array( $count_roles ) || ! array_intersect( $current_user->roles, $count_roles ) ) {
- return;
- }
- }
-
- add_action( 'wp_footer', 'stats_footer', 101 );
- add_action( 'wp_head', 'stats_add_shutdown_action' );
-
- $rendered_stats_footer = false;
-}
-
-
-/**
- * Stats Build View Data.
- *
- * @access public
- * @return array.
- */
-function stats_build_view_data() {
- global $wp_the_query;
-
- $blog = Jetpack_Options::get_option( 'id' );
- $tz = get_option( 'gmt_offset' );
- $v = 'ext';
- $blog_url = wp_parse_url( site_url() );
- $srv = $blog_url['host'];
- $j = sprintf( '%s:%s', JETPACK__API_VERSION, JETPACK__VERSION );
- if ( $wp_the_query->is_single || $wp_the_query->is_page || $wp_the_query->is_posts_page ) {
- // Store and reset the queried_object and queried_object_id
- // Otherwise, redirect_canonical() will redirect to home_url( '/' ) for show_on_front = page sites where home_url() is not all lowercase.
- // Repro:
- // 1. Set home_url = https://ExamPle.com/
- // 2. Set show_on_front = page
- // 3. Set page_on_front = something
- // 4. Visit https://example.com/ !
- $queried_object = ( isset( $wp_the_query->queried_object ) ) ? $wp_the_query->queried_object : null;
- $queried_object_id = ( isset( $wp_the_query->queried_object_id ) ) ? $wp_the_query->queried_object_id : null;
- $post = $wp_the_query->get_queried_object_id();
- $wp_the_query->queried_object = $queried_object;
- $wp_the_query->queried_object_id = $queried_object_id;
- } else {
- $post = '0';
- }
-
- return compact( 'v', 'j', 'blog', 'post', 'tz', 'srv' );
-}
-
-/**
- * Stats Add Shutdown Action.
- *
- * @access public
- * @return void
- */
-function stats_add_shutdown_action() {
- // Just in case wp_footer isn't in your theme.
- add_action( 'shutdown', 'stats_footer', 101 );
-}
-
-/**
- * Stats Footer.
- *
- * @access public
- * @return void
- */
-function stats_footer() {
- global $rendered_stats_footer;
-
- if ( ! $rendered_stats_footer ) {
- $data = stats_build_view_data();
- if ( Jetpack_AMP_Support::is_amp_request() ) {
- stats_render_amp_footer( $data );
- } else {
- stats_render_footer( $data );
- }
- $rendered_stats_footer = true;
- }
-}
-
-function stats_render_footer( $data ) {
- $script = 'https://stats.wp.com/e-' . gmdate( 'YW' ) . '.js';
- $data_stats_array = stats_array( $data );
-
- $stats_footer = <<<END
-<script type='text/javascript' src='{$script}' async='async' defer='defer'></script>
-<script type='text/javascript'>
- _stq = window._stq || [];
- _stq.push([ 'view', {{$data_stats_array}} ]);
- _stq.push([ 'clickTrackerInit', '{$data['blog']}', '{$data['post']}' ]);
-</script>
-
-END;
- print $stats_footer;
-}
-
-function stats_render_amp_footer( $data ) {
- $data['host'] = isset( $_SERVER['HTTP_HOST'] ) ? sanitize_text_field( wp_unslash( $_SERVER['HTTP_HOST'] ) ) : ''; // input var ok.
- $data['rand'] = 'RANDOM'; // AMP placeholder.
- $data['ref'] = 'DOCUMENT_REFERRER'; // AMP placeholder.
- $data = array_map( 'rawurlencode', $data );
- $pixel_url = add_query_arg( $data, 'https://pixel.wp.com/g.gif' );
-
- ?>
- <amp-pixel src="<?php echo esc_url( $pixel_url ); ?>"></amp-pixel>
- <?php
-}
-
-/**
- * Stats Get Options.
- *
- * @access public
- * @return array.
- */
-function stats_get_options() {
- $options = get_option( 'stats_options' );
-
- if ( ! isset( $options['version'] ) || $options['version'] < STATS_VERSION ) {
- $options = stats_upgrade_options( $options );
- }
-
- return $options;
-}
-
-/**
- * Get Stats Options.
- *
- * @access public
- * @param mixed $option Option.
- * @return mixed|null.
- */
-function stats_get_option( $option ) {
- $options = stats_get_options();
-
- if ( 'blog_id' === $option ) {
- return Jetpack_Options::get_option( 'id' );
- }
-
- if ( isset( $options[ $option ] ) ) {
- return $options[ $option ];
- }
-
- return null;
-}
-
-/**
- * Stats Set Options.
- *
- * @access public
- * @param mixed $option Option.
- * @param mixed $value Value.
- * @return bool.
- */
-function stats_set_option( $option, $value ) {
- $options = stats_get_options();
-
- $options[ $option ] = $value;
-
- return stats_set_options( $options );
-}
-
-/**
- * Stats Set Options.
- *
- * @access public
- * @param mixed $options Options.
- * @return bool
- */
-function stats_set_options( $options ) {
- return update_option( 'stats_options', $options );
-}
-
-/**
- * Stats Upgrade Options.
- *
- * @access public
- * @param mixed $options Options.
- * @return array|bool
- */
-function stats_upgrade_options( $options ) {
- $defaults = array(
- 'admin_bar' => true,
- 'roles' => array( 'administrator' ),
- 'count_roles' => array(),
- 'blog_id' => Jetpack_Options::get_option( 'id' ),
- 'do_not_track' => true, // @todo
- 'hide_smile' => true,
- );
-
- if ( isset( $options['reg_users'] ) ) {
- if ( ! function_exists( 'get_editable_roles' ) ) {
- require_once ABSPATH . 'wp-admin/includes/user.php';
- }
- if ( $options['reg_users'] ) {
- $options['count_roles'] = array_keys( get_editable_roles() );
- }
- unset( $options['reg_users'] );
- }
-
- if ( is_array( $options ) && ! empty( $options ) ) {
- $new_options = array_merge( $defaults, $options );
- } else { $new_options = $defaults;
- }
-
- $new_options['version'] = STATS_VERSION;
-
- if ( ! stats_set_options( $new_options ) ) {
- return false;
- }
-
- stats_update_blog();
-
- return $new_options;
-}
-
-/**
- * Stats Array.
- *
- * @access public
- * @param mixed $kvs KVS.
- * @return array
- */
-function stats_array( $kvs ) {
- /**
- * Filter the options added to the JavaScript Stats tracking code.
- *
- * @module stats
- *
- * @since 1.1.0
- *
- * @param array $kvs Array of options about the site and page you're on.
- */
- $kvs = apply_filters( 'stats_array', $kvs );
- $kvs = array_map( 'addslashes', $kvs );
- foreach ( $kvs as $k => $v ) {
- $jskvs[] = "$k:'$v'";
- }
- return join( ',', $jskvs );
-}
-
-/**
- * Admin Pages.
- *
- * @access public
- * @return void
- */
-function stats_admin_menu() {
- global $pagenow;
-
- // If we're at an old Stats URL, redirect to the new one.
- // Don't even bother with caps, menu_page_url(), etc. Just do it.
- if ( 'index.php' === $pagenow && isset( $_GET['page'] ) && 'stats' === $_GET['page'] ) {
- $redirect_url = str_replace( array( '/wp-admin/index.php?', '/wp-admin/?' ), '/wp-admin/admin.php?', $_SERVER['REQUEST_URI'] );
- $relative_pos = strpos( $redirect_url, '/wp-admin/' );
- if ( false !== $relative_pos ) {
- wp_safe_redirect( admin_url( substr( $redirect_url, $relative_pos + 10 ) ) );
- exit;
- }
- }
-
- $hook = add_submenu_page( 'jetpack', __( 'Site Stats', 'jetpack' ), __( 'Site Stats', 'jetpack' ), 'view_stats', 'stats', 'jetpack_admin_ui_stats_report_page_wrapper' );
- add_action( "load-$hook", 'stats_reports_load' );
-}
-
-/**
- * Stats Admin Path.
- *
- * @access public
- * @return string
- */
-function stats_admin_path() {
- return Jetpack::module_configuration_url( __FILE__ );
-}
-
-/**
- * Stats Reports Load.
- *
- * @access public
- * @return void
- */
-function stats_reports_load() {
- wp_enqueue_script( 'jquery' );
- wp_enqueue_script( 'postbox' );
- wp_enqueue_script( 'underscore' );
-
- Jetpack_Admin_Page::load_wrapper_styles();
- add_action( 'admin_print_styles', 'stats_reports_css' );
-
- if ( isset( $_GET['nojs'] ) && $_GET['nojs'] ) {
- $parsed = wp_parse_url( admin_url() );
- // Remember user doesn't want JS.
- setcookie( 'stnojs', '1', time() + 172800, $parsed['path'] ); // 2 days.
- }
-
- if ( isset( $_COOKIE['stnojs'] ) && $_COOKIE['stnojs'] ) {
- // Detect if JS is on. If so, remove cookie so next page load is via JS.
- add_action( 'admin_print_footer_scripts', 'stats_js_remove_stnojs_cookie' );
- } else if ( ! isset( $_GET['noheader'] ) && empty( $_GET['nojs'] ) ) {
- // Normal page load. Load page content via JS.
- add_action( 'admin_print_footer_scripts', 'stats_js_load_page_via_ajax' );
- }
-}
-
-/**
- * Stats Reports CSS.
- *
- * @access public
- * @return void
- */
-function stats_reports_css() {
-?>
-<style type="text/css">
-#jp-stats-wrap {
- max-width: 1040px;
- margin: 0 auto;
- overflow: hidden;
-}
-
-#stats-loading-wrap p {
- text-align: center;
- font-size: 2em;
- margin: 7.5em 15px 0 0;
- height: 64px;
- line-height: 64px;
-}
-</style>
-<?php
-}
-
-
-/**
- * Detect if JS is on. If so, remove cookie so next page load is via JS.
- *
- * @access public
- * @return void
- */
-function stats_js_remove_stnojs_cookie() {
- $parsed = wp_parse_url( admin_url() );
-?>
-<script type="text/javascript">
-/* <![CDATA[ */
-document.cookie = 'stnojs=0; expires=Wed, 9 Mar 2011 16:55:50 UTC; path=<?php echo esc_js( $parsed['path'] ); ?>';
-/* ]]> */
-</script>
-<?php
-}
-
-/**
- * Normal page load. Load page content via JS.
- *
- * @access public
- * @return void
- */
-function stats_js_load_page_via_ajax() {
-?>
-<script type="text/javascript">
-/* <![CDATA[ */
-if ( -1 == document.location.href.indexOf( 'noheader' ) ) {
- jQuery( function( $ ) {
- $.get( document.location.href + '&noheader', function( responseText ) {
- $( '#stats-loading-wrap' ).replaceWith( responseText );
- } );
- } );
-}
-/* ]]> */
-</script>
-<?php
-}
-
-function jetpack_admin_ui_stats_report_page_wrapper() {
- if( ! isset( $_GET['noheader'] ) && empty( $_GET['nojs'] ) && empty( $_COOKIE['stnojs'] ) ) {
- Jetpack_Admin_Page::wrap_ui( 'stats_reports_page', array( 'is-wide' => true ) );
- } else {
- stats_reports_page();
- }
-
-}
-
-/**
- * Stats Report Page.
- *
- * @access public
- * @param bool $main_chart_only (default: false) Main Chart Only.
- */
-function stats_reports_page( $main_chart_only = false ) {
-
- if ( isset( $_GET['dashboard'] ) ) {
- return stats_dashboard_widget_content();
- }
-
- $blog_id = stats_get_option( 'blog_id' );
- $domain = Jetpack::build_raw_urls( get_home_url() );
-
- $jetpack_admin_url = admin_url() . 'admin.php?page=jetpack';
-
- if ( ! $main_chart_only && ! isset( $_GET['noheader'] ) && empty( $_GET['nojs'] ) && empty( $_COOKIE['stnojs'] ) ) {
- $nojs_url = add_query_arg( 'nojs', '1' );
- $http = is_ssl() ? 'https' : 'http';
- // Loading message. No JS fallback message.
-?>
-
- <div id="jp-stats-wrap">
- <div class="wrap">
- <h2><?php esc_html_e( 'Site Stats', 'jetpack' ); ?> <?php if ( current_user_can( 'jetpack_manage_modules' ) ) : ?><a style="font-size:13px;" href="<?php echo esc_url( admin_url( 'admin.php?page=jetpack&configure=stats' ) ); ?>"><?php esc_html_e( 'Configure', 'jetpack' ); ?></a><?php endif; ?></h2>
- </div>
- <div id="stats-loading-wrap" class="wrap">
- <p class="hide-if-no-js"><img width="32" height="32" alt="<?php esc_attr_e( 'Loading&hellip;', 'jetpack' ); ?>" src="<?php
- echo esc_url(
- /**
- * Sets external resource URL.
- *
- * @module stats
- *
- * @since 1.4.0
- *
- * @param string $args URL of external resource.
- */
- apply_filters( 'jetpack_static_url', "{$http}://en.wordpress.com/i/loading/loading-64.gif" )
- ); ?>" /></p>
- <p style="font-size: 11pt; margin: 0;"><a href="https://wordpress.com/stats/<?php echo esc_attr( $domain ); ?>" target="_blank"><?php esc_html_e( 'View stats on WordPress.com right now', 'jetpack' ); ?></a></p>
- <p class="hide-if-js"><?php esc_html_e( 'Your Site Stats work better with JavaScript enabled.', 'jetpack' ); ?><br />
- <a href="<?php echo esc_url( $nojs_url ); ?>"><?php esc_html_e( 'View Site Stats without JavaScript', 'jetpack' ); ?></a>.</p>
- </div>
- </div>
-<?php
- return;
- }
-
- $day = isset( $_GET['day'] ) && preg_match( '/^\d{4}-\d{2}-\d{2}$/', $_GET['day'] ) ? $_GET['day'] : false;
- $q = array(
- 'noheader' => 'true',
- 'proxy' => '',
- 'page' => 'stats',
- 'day' => $day,
- 'blog' => $blog_id,
- 'charset' => get_option( 'blog_charset' ),
- 'color' => get_user_option( 'admin_color' ),
- 'ssl' => is_ssl(),
- 'j' => sprintf( '%s:%s', JETPACK__API_VERSION, JETPACK__VERSION ),
- );
- if ( get_locale() !== 'en_US' ) {
- $q['jp_lang'] = get_locale();
- }
- // Only show the main chart, without extra header data, or metaboxes.
- $q['main_chart_only'] = $main_chart_only;
- $args = array(
- 'view' => array( 'referrers', 'postviews', 'searchterms', 'clicks', 'post', 'table' ),
- 'numdays' => 'int',
- 'day' => 'date',
- 'unit' => array( 1, 7, 31, 'human' ),
- 'humanize' => array( 'true' ),
- 'num' => 'int',
- 'summarize' => null,
- 'post' => 'int',
- 'width' => 'int',
- 'height' => 'int',
- 'data' => 'data',
- 'blog_subscribers' => 'int',
- 'comment_subscribers' => null,
- 'type' => array( 'wpcom', 'email', 'pending' ),
- 'pagenum' => 'int',
- );
- foreach ( $args as $var => $vals ) {
- if ( ! isset( $_REQUEST[$var] ) )
- continue;
- if ( is_array( $vals ) ) {
- if ( in_array( $_REQUEST[$var], $vals ) )
- $q[$var] = $_REQUEST[$var];
- } elseif ( 'int' === $vals ) {
- $q[$var] = intval( $_REQUEST[$var] );
- } elseif ( 'date' === $vals ) {
- if ( preg_match( '/^\d{4}-\d{2}-\d{2}$/', $_REQUEST[$var] ) )
- $q[$var] = $_REQUEST[$var];
- } elseif ( null === $vals ) {
- $q[$var] = '';
- } elseif ( 'data' === $vals ) {
- if ( 'index.php' === substr( $_REQUEST[$var], 0, 9 ) )
- $q[$var] = $_REQUEST[$var];
- }
- }
-
- if ( isset( $_GET['chart'] ) ) {
- if ( preg_match( '/^[a-z0-9-]+$/', $_GET['chart'] ) ) {
- $chart = sanitize_title( $_GET['chart'] );
- $url = 'https://' . STATS_DASHBOARD_SERVER . "/wp-includes/charts/{$chart}.php";
- }
- } else {
- $url = 'https://' . STATS_DASHBOARD_SERVER . "/wp-admin/index.php";
- }
-
- $url = add_query_arg( $q, $url );
- $method = 'GET';
- $timeout = 90;
- $user_id = JETPACK_MASTER_USER; // means send the wp.com user_id
-
- $get = Jetpack_Client::remote_request( compact( 'url', 'method', 'timeout', 'user_id' ) );
- $get_code = wp_remote_retrieve_response_code( $get );
- if ( is_wp_error( $get ) || ( 2 !== intval( $get_code / 100 ) && 304 !== $get_code ) || empty( $get['body'] ) ) {
- stats_print_wp_remote_error( $get, $url );
- } else {
- if ( ! empty( $get['headers']['content-type'] ) ) {
- $type = $get['headers']['content-type'];
- if ( substr( $type, 0, 5 ) === 'image' ) {
- $img = $get['body'];
- header( 'Content-Type: ' . $type );
- header( 'Content-Length: ' . strlen( $img ) );
- echo $img;
- die();
- }
- }
- $body = stats_convert_post_titles( $get['body'] );
- $body = stats_convert_chart_urls( $body );
- $body = stats_convert_image_urls( $body );
- $body = stats_convert_admin_urls( $body );
- echo $body;
- }
-
- if ( isset( $_GET['page'] ) && 'stats' === $_GET['page'] && ! isset( $_GET['chart'] ) ) {
- JetpackTracking::record_user_event( 'wpa_page_view', array( 'path' => 'old_stats' ) );
- }
-
- if ( isset( $_GET['noheader'] ) ) {
- die;
- }
-}
-
-/**
- * Stats Convert Admin Urls.
- *
- * @access public
- * @param mixed $html HTML.
- * @return string
- */
-function stats_convert_admin_urls( $html ) {
- return str_replace( 'index.php?page=stats', 'admin.php?page=stats', $html );
-}
-
-/**
- * Stats Convert Image URLs.
- *
- * @access public
- * @param mixed $html HTML.
- * @return string
- */
-function stats_convert_image_urls( $html ) {
- $url = set_url_scheme( 'https://' . STATS_DASHBOARD_SERVER );
- $html = preg_replace( '|(["\'])(/i/stats.+)\\1|', '$1' . $url . '$2$1', $html );
- return $html;
-}
-
-/**
- * Callback for preg_replace_callback used in stats_convert_chart_urls()
- *
- * @since 5.6.0
- *
- * @param array $matches The matches resulting from the preg_replace_callback call.
- * @return string The admin url for the chart.
- */
-function jetpack_stats_convert_chart_urls_callback( $matches ) {
- // If there is a query string, change the beginning '?' to a '&' so it fits into the middle of this query string.
- return 'admin.php?page=stats&noheader&chart=' . $matches[1] . str_replace( '?', '&', $matches[2] );
-}
-
-/**
- * Stats Convert Chart URLs.
- *
- * @access public
- * @param mixed $html HTML.
- * @return string
- */
-function stats_convert_chart_urls( $html ) {
- $html = preg_replace_callback(
- '|https?://[-.a-z0-9]+/wp-includes/charts/([-.a-z0-9]+).php(\??)|',
- 'jetpack_stats_convert_chart_urls_callback',
- $html
- );
- return $html;
-}
-
-/**
- * Stats Convert Post Title HTML
- *
- * @access public
- * @param mixed $html HTML.
- * @return string
- */
-function stats_convert_post_titles( $html ) {
- global $stats_posts;
- $pattern = "<span class='post-(\d+)-link'>.*?</span>";
- if ( ! preg_match_all( "!$pattern!", $html, $matches ) ) {
- return $html;
- }
- $posts = get_posts(
- array(
- 'include' => implode( ',', $matches[1] ),
- 'post_type' => 'any',
- 'post_status' => 'any',
- 'numberposts' => -1,
- 'suppress_filters' => false,
- )
- );
- foreach ( $posts as $post ) {
- $stats_posts[ $post->ID ] = $post;
- }
- $html = preg_replace_callback( "!$pattern!", 'stats_convert_post_title', $html );
- return $html;
-}
-
-/**
- * Stats Convert Post Title Matches.
- *
- * @access public
- * @param mixed $matches Matches.
- * @return string
- */
-function stats_convert_post_title( $matches ) {
- global $stats_posts;
- $post_id = $matches[1];
- if ( isset( $stats_posts[$post_id] ) )
- return '<a href="' . get_permalink( $post_id ) . '" target="_blank">' . get_the_title( $post_id ) . '</a>';
- return $matches[0];
-}
-
-/**
- * Stats Configuration Load.
- *
- * @access public
- * @return void
- */
-function stats_configuration_load() {
- if ( isset( $_POST['action'] ) && 'save_options' === $_POST['action'] && $_POST['_wpnonce'] === wp_create_nonce( 'stats' ) ) {
- $options = stats_get_options();
- $options['admin_bar'] = isset( $_POST['admin_bar'] ) && $_POST['admin_bar'];
- $options['hide_smile'] = isset( $_POST['hide_smile'] ) && $_POST['hide_smile'];
-
- $options['roles'] = array( 'administrator' );
- foreach ( get_editable_roles() as $role => $details ) {
- if ( isset( $_POST["role_$role"] ) && $_POST["role_$role"] ) {
- $options['roles'][] = $role;
- }
- }
-
- $options['count_roles'] = array();
- foreach ( get_editable_roles() as $role => $details ) {
- if ( isset( $_POST["count_role_$role"] ) && $_POST["count_role_$role"] ) {
- $options['count_roles'][] = $role;
- }
- }
-
- stats_set_options( $options );
- stats_update_blog();
- Jetpack::state( 'message', 'module_configured' );
- wp_safe_redirect( Jetpack::module_configuration_url( 'stats' ) );
- exit;
- }
-}
-
-/**
- * Stats Configuration Head.
- *
- * @access public
- * @return void
- */
-function stats_configuration_head() {
-?>
- <style type="text/css">
- #statserror {
- border: 1px solid #766;
- background-color: #d22;
- padding: 1em 3em;
- }
- .stats-smiley {
- vertical-align: 1px;
- }
- </style>
- <?php
-}
-
-/**
- * Stats Configuration Screen.
- *
- * @access public
- * @return void
- */
-function stats_configuration_screen() {
- $options = stats_get_options();
-?>
- <div class="narrow">
- <p><?php printf( __( 'Visit <a href="%s">Site Stats</a> to see your stats.', 'jetpack' ), esc_url( menu_page_url( 'stats', false ) ) ); ?></p>
- <form method="post">
- <input type='hidden' name='action' value='save_options' />
- <?php wp_nonce_field( 'stats' ); ?>
- <table id="menu" class="form-table">
- <tr valign="top"><th scope="row"><label for="admin_bar"><?php esc_html_e( 'Admin bar' , 'jetpack' ); ?></label></th>
- <td><label><input type='checkbox'<?php checked( $options['admin_bar'] ); ?> name='admin_bar' id='admin_bar' /> <?php esc_html_e( 'Put a chart showing 48 hours of views in the admin bar.', 'jetpack' ); ?></label></td></tr>
- <tr valign="top"><th scope="row"><?php esc_html_e( 'Registered users', 'jetpack' ); ?></th>
- <td>
- <?php esc_html_e( "Count the page views of registered users who are logged in.", 'jetpack' ); ?><br/>
- <?php
- $count_roles = stats_get_option( 'count_roles' );
- foreach ( get_editable_roles() as $role => $details ) {
-?>
- <label><input type='checkbox' name='count_role_<?php echo $role; ?>'<?php checked( in_array( $role, $count_roles ) ); ?> /> <?php echo translate_user_role( $details['name'] ); ?></label><br/>
- <?php
- }
-?>
- </td></tr>
- <tr valign="top"><th scope="row"><?php esc_html_e( 'Smiley' , 'jetpack' ); ?></th>
- <td><label><input type='checkbox'<?php checked( isset( $options['hide_smile'] ) && $options['hide_smile'] ); ?> name='hide_smile' id='hide_smile' /> <?php esc_html_e( 'Hide the stats smiley face image.', 'jetpack' ); ?></label><br /> <span class="description"><?php echo wp_kses( __( 'The image helps collect stats and <strong>makes the world a better place</strong> but should still work when hidden', 'jetpack' ), array( 'strong' => array() ) ); ?> <img class="stats-smiley" alt="<?php esc_attr_e( 'Smiley face', 'jetpack' ); ?>" src="<?php echo esc_url( plugins_url( 'images/stats-smiley.gif', dirname( __FILE__ ) ) ); ?>" width="6" height="5" /></span></td></tr>
- <tr valign="top"><th scope="row"><?php esc_html_e( 'Report visibility' , 'jetpack' ); ?></th>
- <td>
- <?php esc_html_e( 'Select the roles that will be able to view stats reports.', 'jetpack' ); ?><br/>
- <?php
- $stats_roles = stats_get_option( 'roles' );
- foreach ( get_editable_roles() as $role => $details ) {
-?>
- <label><input type='checkbox' <?php if ( 'administrator' === $role ) echo "disabled='disabled' "; ?>name='role_<?php echo $role; ?>'<?php checked( 'administrator' === $role || in_array( $role, $stats_roles ) ); ?> /> <?php echo translate_user_role( $details['name'] ); ?></label><br/>
- <?php
- }
-?>
- </td></tr>
- </table>
- <p class="submit"><input type='submit' class='button-primary' value='<?php echo esc_attr( __( 'Save configuration', 'jetpack' ) ); ?>' /></p>
- </form>
- </div>
- <?php
-}
-
-/**
- * Stats Hide Smile.
- *
- * @access public
- * @return void
- */
-function stats_hide_smile_css() {
- $options = stats_get_options();
- if ( isset( $options['hide_smile'] ) && $options['hide_smile'] ) {
-?>
-<style type='text/css'>img#wpstats{display:none}</style><?php
- }
-}
-
-/**
- * Stats Admin Bar Head.
- *
- * @access public
- * @return void
- */
-function stats_admin_bar_head() {
- if ( ! stats_get_option( 'admin_bar' ) )
- return;
-
- if ( ! current_user_can( 'view_stats' ) )
- return;
-
- if ( ! is_admin_bar_showing() ) {
- return;
- }
-
- add_action( 'admin_bar_menu', 'stats_admin_bar_menu', 100 );
-?>
-
-<style type='text/css'>
-#wpadminbar .quicklinks li#wp-admin-bar-stats {
- height: 32px;
-}
-#wpadminbar .quicklinks li#wp-admin-bar-stats a {
- height: 32px;
- padding: 0;
-}
-#wpadminbar .quicklinks li#wp-admin-bar-stats a div {
- height: 32px;
- width: 95px;
- overflow: hidden;
- margin: 0 10px;
-}
-#wpadminbar .quicklinks li#wp-admin-bar-stats a:hover div {
- width: auto;
- margin: 0 8px 0 10px;
-}
-#wpadminbar .quicklinks li#wp-admin-bar-stats a img {
- height: 24px;
- margin: 4px 0;
- max-width: none;
- border: none;
-}
-</style>
-<?php
-}
-
-/**
- * Stats AdminBar.
- *
- * @access public
- * @param mixed $wp_admin_bar WPAdminBar.
- * @return void
- */
-function stats_admin_bar_menu( &$wp_admin_bar ) {
- $url = add_query_arg( 'page', 'stats', admin_url( 'admin.php' ) ); // no menu_page_url() blog-side.
-
- $img_src = esc_attr( add_query_arg( array( 'noheader' => '', 'proxy' => '', 'chart' => 'admin-bar-hours-scale' ), $url ) );
- $img_src_2x = esc_attr( add_query_arg( array( 'noheader' => '', 'proxy' => '', 'chart' => 'admin-bar-hours-scale-2x' ), $url ) );
-
- $alt = esc_attr( __( 'Stats', 'jetpack' ) );
-
- $title = esc_attr( __( 'Views over 48 hours. Click for more Site Stats.', 'jetpack' ) );
-
- $menu = array(
- 'id' => 'stats',
- 'href' => $url,
- );
- if ( Jetpack_AMP_Support::is_amp_request() ) {
- $menu['title'] = "<amp-img src='$img_src_2x' width=112 height=24 layout=fixed alt='$alt' title='$title'></amp-img>";
- } else {
- $menu['title'] = "<div><script type='text/javascript'>var src;if(typeof(window.devicePixelRatio)=='undefined'||window.devicePixelRatio<2){src='$img_src';}else{src='$img_src_2x';}document.write('<img src=\''+src+'\' alt=\'$alt\' title=\'$title\' />');</script></div>";
- }
-
- $wp_admin_bar->add_menu( $menu );
-}
-
-/**
- * Stats Update Blog.
- *
- * @access public
- * @return void
- */
-function stats_update_blog() {
- Jetpack::xmlrpc_async_call( 'jetpack.updateBlog', stats_get_blog() );
-}
-
-/**
- * Stats Get Blog.
- *
- * @access public
- * @return string
- */
-function stats_get_blog() {
- $home = parse_url( trailingslashit( get_option( 'home' ) ) );
- $blog = array(
- 'host' => $home['host'],
- 'path' => $home['path'],
- 'blogname' => get_option( 'blogname' ),
- 'blogdescription' => get_option( 'blogdescription' ),
- 'siteurl' => get_option( 'siteurl' ),
- 'gmt_offset' => get_option( 'gmt_offset' ),
- 'timezone_string' => get_option( 'timezone_string' ),
- 'stats_version' => STATS_VERSION,
- 'stats_api' => 'jetpack',
- 'page_on_front' => get_option( 'page_on_front' ),
- 'permalink_structure' => get_option( 'permalink_structure' ),
- 'category_base' => get_option( 'category_base' ),
- 'tag_base' => get_option( 'tag_base' ),
- );
- $blog = array_merge( stats_get_options(), $blog );
- unset( $blog['roles'], $blog['blog_id'] );
- return stats_esc_html_deep( $blog );
-}
-
-/**
- * Modified from stripslashes_deep()
- *
- * @access public
- * @param mixed $value Value.
- * @return string
- */
-function stats_esc_html_deep( $value ) {
- if ( is_array( $value ) ) {
- $value = array_map( 'stats_esc_html_deep', $value );
- } elseif ( is_object( $value ) ) {
- $vars = get_object_vars( $value );
- foreach ( $vars as $key => $data ) {
- $value->{$key} = stats_esc_html_deep( $data );
- }
- } elseif ( is_string( $value ) ) {
- $value = esc_html( $value );
- }
-
- return $value;
-}
-
-/**
- * Stats xmlrpc_methods function.
- *
- * @access public
- * @param mixed $methods Methods.
- * @return array
- */
-function stats_xmlrpc_methods( $methods ) {
- $my_methods = array(
- 'jetpack.getBlog' => 'stats_get_blog',
- );
-
- return array_merge( $methods, $my_methods );
-}
-
-/**
- * Register Stats Dashboard Widget.
- *
- * @access public
- * @return void
- */
-function stats_register_dashboard_widget() {
- if ( ! current_user_can( 'view_stats' ) )
- return;
-
- // With wp_dashboard_empty: we load in the content after the page load via JS.
- wp_add_dashboard_widget( 'dashboard_stats', __( 'Site Stats', 'jetpack' ), 'wp_dashboard_empty', 'stats_dashboard_widget_control' );
-
- add_action( 'admin_head', 'stats_dashboard_head' );
-}
-
-/**
- * Stats Dashboard Widget Options.
- *
- * @access public
- * @return array
- */
-function stats_dashboard_widget_options() {
- $defaults = array( 'chart' => 1, 'top' => 1, 'search' => 7 );
- if ( ( ! $options = get_option( 'stats_dashboard_widget' ) ) || ! is_array( $options ) ) {
- $options = array();
- }
-
- // Ignore obsolete option values.
- $intervals = array( 1, 7, 31, 90, 365 );
- foreach ( array( 'top', 'search' ) as $key ) {
- if ( isset( $options[ $key ] ) && ! in_array( $options[ $key ], $intervals ) ) {
- unset( $options[ $key ] );
- }
- }
-
- return array_merge( $defaults, $options );
-}
-
-/**
- * Stats Dashboard Widget Control.
- *
- * @access public
- * @return void
- */
-function stats_dashboard_widget_control() {
- $periods = array(
- '1' => __( 'day', 'jetpack' ),
- '7' => __( 'week', 'jetpack' ),
- '31' => __( 'month', 'jetpack' ),
- );
- $intervals = array(
- '1' => __( 'the past day', 'jetpack' ),
- '7' => __( 'the past week', 'jetpack' ),
- '31' => __( 'the past month', 'jetpack' ),
- '90' => __( 'the past quarter', 'jetpack' ),
- '365' => __( 'the past year', 'jetpack' ),
- );
- $defaults = array(
- 'top' => 1,
- 'search' => 7,
- );
-
- $options = stats_dashboard_widget_options();
-
- if ( 'post' === strtolower( $_SERVER['REQUEST_METHOD'] ) && isset( $_POST['widget_id'] ) && 'dashboard_stats' === $_POST['widget_id'] ) {
- if ( isset( $periods[ $_POST['chart'] ] ) ) {
- $options['chart'] = $_POST['chart'];
- }
- foreach ( array( 'top', 'search' ) as $key ) {
- if ( isset( $intervals[ $_POST[ $key ] ] ) ) {
- $options[ $key ] = $_POST[ $key ];
- } else { $options[ $key ] = $defaults[ $key ];
- }
- }
- update_option( 'stats_dashboard_widget', $options );
- }
-?>
- <p>
- <label for="chart"><?php esc_html_e( 'Chart stats by' , 'jetpack' ); ?></label>
- <select id="chart" name="chart">
- <?php
- foreach ( $periods as $val => $label ) {
-?>
- <option value="<?php echo $val; ?>"<?php selected( $val, $options['chart'] ); ?>><?php echo esc_html( $label ); ?></option>
- <?php
- }
-?>
- </select>.
- </p>
-
- <p>
- <label for="top"><?php esc_html_e( 'Show top posts over', 'jetpack' ); ?></label>
- <select id="top" name="top">
- <?php
- foreach ( $intervals as $val => $label ) {
-?>
- <option value="<?php echo $val; ?>"<?php selected( $val, $options['top'] ); ?>><?php echo esc_html( $label ); ?></option>
- <?php
- }
-?>
- </select>.
- </p>
-
- <p>
- <label for="search"><?php esc_html_e( 'Show top search terms over', 'jetpack' ); ?></label>
- <select id="search" name="search">
- <?php
- foreach ( $intervals as $val => $label ) {
-?>
- <option value="<?php echo $val; ?>"<?php selected( $val, $options['search'] ); ?>><?php echo esc_html( $label ); ?></option>
- <?php
- }
-?>
- </select>.
- </p>
- <?php
-}
-
-/**
- * Jetpack Stats Dashboard Widget.
- *
- * @access public
- * @return void
- */
-function stats_jetpack_dashboard_widget() {
-?>
- <form id="stats_dashboard_widget_control" action="<?php echo esc_url( admin_url() ); ?>" method="post">
- <?php stats_dashboard_widget_control(); ?>
- <?php wp_nonce_field( 'edit-dashboard-widget_dashboard_stats', 'dashboard-widget-nonce' ); ?>
- <input type="hidden" name="widget_id" value="dashboard_stats" />
- <?php submit_button( __( 'Submit', 'jetpack' ) ); ?>
- </form>
- <span class="js-toggle-stats_dashboard_widget_control">
- <?php esc_html_e( 'Configure', 'jetpack' ); ?>
- </span>
- <div id="dashboard_stats">
- <div class="inside">
- <div style="height: 250px;"></div>
- </div>
- </div>
- <script>
- jQuery(document).ready(function($){
- var $toggle = $('.js-toggle-stats_dashboard_widget_control');
-
- $toggle.parent().prev().append( $toggle );
- $toggle.show().click(function(e){
- e.preventDefault();
- e.stopImmediatePropagation();
- $(this).parent().toggleClass('controlVisible');
- $('#stats_dashboard_widget_control').slideToggle();
- });
- });
- </script>
- <style>
- .js-toggle-stats_dashboard_widget_control {
- display: none;
- float: right;
- margin-top: 0.2em;
- font-weight: 400;
- color: #444;
- font-size: .8em;
- text-decoration: underline;
- cursor: pointer;
- }
- #stats_dashboard_widget_control {
- display: none;
- padding: 0 10px;
- overflow: hidden;
- }
- #stats_dashboard_widget_control .button-primary {
- float: right;
- }
- #dashboard_stats {
- box-sizing: border-box;
- width: 100%;
- padding: 0 10px;
- }
- </style>
- <?php
-}
-
-/**
- * Register Stats Widget Control Callback.
- *
- * @access public
- * @return void
- */
-function stats_register_widget_control_callback() {
- $GLOBALS['wp_dashboard_control_callbacks']['dashboard_stats'] = 'stats_dashboard_widget_control';
-}
-
-/**
- * JavaScript and CSS for dashboard widget.
- *
- * @access public
- * @return void
- */
-function stats_dashboard_head() { ?>
-<script type="text/javascript">
-/* <![CDATA[ */
-jQuery( function($) {
- var dashStats = jQuery( '#dashboard_stats div.inside' );
-
- if ( dashStats.find( '.dashboard-widget-control-form' ).length ) {
- return;
- }
-
- if ( ! dashStats.length ) {
- dashStats = jQuery( '#dashboard_stats div.dashboard-widget-content' );
- var h = parseInt( dashStats.parent().height() ) - parseInt( dashStats.prev().height() );
- var args = 'width=' + dashStats.width() + '&height=' + h.toString();
- } else {
- if ( jQuery('#dashboard_stats' ).hasClass('postbox') ) {
- var args = 'width=' + ( dashStats.prev().width() * 2 ).toString();
- } else {
- var args = 'width=' + ( dashStats.width() * 2 ).toString();
- }
- }
-
- dashStats
- .not( '.dashboard-widget-control' )
- .load( 'admin.php?page=stats&noheader&dashboard&' + args );
-
- jQuery( window ).one( 'resize', function() {
- jQuery( '#stat-chart' ).css( 'width', 'auto' );
- } );
-} );
-/* ]]> */
-</script>
-<style type="text/css">
-/* <![CDATA[ */
-#stat-chart {
- background: none !important;
-}
-#dashboard_stats .inside {
- margin: 10px 0 0 0 !important;
-}
-#dashboard_stats #stats-graph {
- margin: 0;
-}
-#stats-info {
- border-top: 1px solid #dfdfdf;
- margin: 7px -10px 0 -10px;
- padding: 10px;
- background: #fcfcfc;
- -moz-box-shadow:inset 0 1px 0 #fff;
- -webkit-box-shadow:inset 0 1px 0 #fff;
- box-shadow:inset 0 1px 0 #fff;
- overflow: hidden;
- border-radius: 0 0 2px 2px;
- -webkit-border-radius: 0 0 2px 2px;
- -moz-border-radius: 0 0 2px 2px;
- -khtml-border-radius: 0 0 2px 2px;
-}
-#stats-info #top-posts, #stats-info #top-search {
- float: left;
- width: 50%;
-}
-#stats-info #top-posts {
- padding-right: 3%;
-}
-#top-posts .stats-section-inner p {
- white-space: nowrap;
- overflow: hidden;
-}
-#top-posts .stats-section-inner p a {
- overflow: hidden;
- text-overflow: ellipsis;
-}
-#stats-info div#active {
- border-top: 1px solid #dfdfdf;
- margin: 0 -10px;
- padding: 10px 10px 0 10px;
- -moz-box-shadow:inset 0 1px 0 #fff;
- -webkit-box-shadow:inset 0 1px 0 #fff;
- box-shadow:inset 0 1px 0 #fff;
- overflow: hidden;
-}
-#top-search p {
- color: #999;
-}
-#stats-info h3 {
- font-size: 1em;
- margin: 0 0 .5em 0 !important;
-}
-#stats-info p {
- margin: 0 0 .25em;
- color: #999;
-}
-#stats-info p.widget-loading {
- margin: 1em 0 0;
- color: #333;
-}
-#stats-info p a {
- display: block;
-}
-#stats-info p a.button {
- display: inline;
-}
-/* ]]> */
-</style>
-<?php
-}
-
-/**
- * Stats Dashboard Widget Content.
- *
- * @access public
- * @return void
- */
-function stats_dashboard_widget_content() {
- if ( ! isset( $_GET['width'] ) || ( ! $width = (int) ( $_GET['width'] / 2 ) ) || $width < 250 ) {
- $width = 370;
- }
- if ( ! isset( $_GET['height'] ) || ( ! $height = (int) $_GET['height'] - 36 ) || $height < 230 ) {
- $height = 180;
- }
-
- $_width = $width - 5;
- $_height = $height - ( $GLOBALS['is_winIE'] ? 16 : 5 ); // Hack!
-
- $options = stats_dashboard_widget_options();
- $blog_id = Jetpack_Options::get_option( 'id' );
-
- $q = array(
- 'noheader' => 'true',
- 'proxy' => '',
- 'blog' => $blog_id,
- 'page' => 'stats',
- 'chart' => '',
- 'unit' => $options['chart'],
- 'color' => get_user_option( 'admin_color' ),
- 'width' => $_width,
- 'height' => $_height,
- 'ssl' => is_ssl(),
- 'j' => sprintf( '%s:%s', JETPACK__API_VERSION, JETPACK__VERSION ),
- );
-
- $url = 'https://' . STATS_DASHBOARD_SERVER . "/wp-admin/index.php";
-
- $url = add_query_arg( $q, $url );
- $method = 'GET';
- $timeout = 90;
- $user_id = JETPACK_MASTER_USER;
-
- $get = Jetpack_Client::remote_request( compact( 'url', 'method', 'timeout', 'user_id' ) );
- $get_code = wp_remote_retrieve_response_code( $get );
- if ( is_wp_error( $get ) || ( 2 !== intval( $get_code / 100 ) && 304 !== $get_code ) || empty( $get['body'] ) ) {
- stats_print_wp_remote_error( $get, $url );
- } else {
- $body = stats_convert_post_titles( $get['body'] );
- $body = stats_convert_chart_urls( $body );
- $body = stats_convert_image_urls( $body );
- echo $body;
- }
-
- $post_ids = array();
-
- $csv_end_date = date( 'Y-m-d', current_time( 'timestamp' ) );
- $csv_args = array( 'top' => "&limit=8&end=$csv_end_date", 'search' => "&limit=5&end=$csv_end_date" );
- /* Translators: Stats dashboard widget postviews list: "$post_title $views Views". */
- $printf = __( '%1$s %2$s Views' , 'jetpack' );
-
- foreach ( $top_posts = stats_get_csv( 'postviews', "days=$options[top]$csv_args[top]" ) as $i => $post ) {
- if ( 0 === $post['post_id'] ) {
- unset( $top_posts[$i] );
- continue;
- }
- $post_ids[] = $post['post_id'];
- }
-
- // Cache.
- get_posts( array( 'include' => join( ',', array_unique( $post_ids ) ) ) );
-
- $searches = array();
- foreach ( $search_terms = stats_get_csv( 'searchterms', "days=$options[search]$csv_args[search]" ) as $search_term ) {
- if ( 'encrypted_search_terms' === $search_term['searchterm'] ) {
- continue;
- }
- $searches[] = esc_html( $search_term['searchterm'] );
- }
-
-?>
-<div id="stats-info">
- <div id="top-posts" class='stats-section'>
- <div class="stats-section-inner">
- <h3 class="heading"><?php esc_html_e( 'Top Posts' , 'jetpack' ); ?></h3>
- <?php
- if ( empty( $top_posts ) ) {
-?>
- <p class="nothing"><?php esc_html_e( 'Sorry, nothing to report.', 'jetpack' ); ?></p>
- <?php
- } else {
- foreach ( $top_posts as $post ) {
- if ( ! get_post( $post['post_id'] ) ) {
- continue;
- }
-?>
- <p><?php printf(
- $printf,
- '<a href="' . get_permalink( $post['post_id'] ) . '">' . get_the_title( $post['post_id'] ) . '</a>',
- number_format_i18n( $post['views'] )
- ); ?></p>
- <?php
- }
- }
-?>
- </div>
- </div>
- <div id="top-search" class='stats-section'>
- <div class="stats-section-inner">
- <h3 class="heading"><?php esc_html_e( 'Top Searches' , 'jetpack' ); ?></h3>
- <?php
- if ( empty( $searches ) ) {
-?>
- <p class="nothing"><?php esc_html_e( 'Sorry, nothing to report.', 'jetpack' ); ?></p>
- <?php
- } else {
- foreach ( $searches as $search_term_item ) {
- printf(
- '<p>%s</p>',
- $search_term_item
- );
- }
- }
-?>
- </div>
- </div>
-</div>
-<div class="clear"></div>
-<div class="stats-view-all">
-<?php
- printf(
- '<a class="button" target="_blank" rel="noopener noreferrer" href="%1$s">%2$s</a>',
- esc_url( "https://wordpress.com/stats/day/" . Jetpack::build_raw_urls( get_home_url() ) ),
- esc_html__( 'View all stats', 'jetpack' )
- );
-?>
-</div>
-<div class="clear"></div>
-<?php
- exit;
-}
-
-/**
- * Stats Print WP Remote Error.
- *
- * @access public
- * @param mixed $get Get.
- * @param mixed $url URL.
- * @return void
- */
-function stats_print_wp_remote_error( $get, $url ) {
- $state_name = 'stats_remote_error_' . substr( md5( $url ), 0, 8 );
- $previous_error = Jetpack::state( $state_name );
- $error = md5( serialize( compact( 'get', 'url' ) ) );
- Jetpack::state( $state_name, $error );
- if ( $error !== $previous_error ) {
-?>
- <div class="wrap">
- <p><?php esc_html_e( 'We were unable to get your stats just now. Please reload this page to try again.', 'jetpack' ); ?></p>
- </div>
-<?php
- return;
- }
-?>
- <div class="wrap">
- <p><?php printf( __( 'We were unable to get your stats just now. Please reload this page to try again. If this error persists, please <a href="%1$s" target="_blank">contact support</a>. In your report please include the information below.', 'jetpack' ), 'https://support.wordpress.com/contact/?jetpack=needs-service' ); ?></p>
- <pre>
- User Agent: "<?php echo esc_html( $_SERVER['HTTP_USER_AGENT'] ); ?>"
- Page URL: "http<?php echo (is_ssl()?'s':'') . '://' . esc_html( $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ); ?>"
- API URL: "<?php echo esc_url( $url ); ?>"
-<?php
-if ( is_wp_error( $get ) ) {
- foreach ( $get->get_error_codes() as $code ) {
- foreach ( $get->get_error_messages( $code ) as $message ) {
-?>
-<?php print $code . ': "' . $message . '"' ?>
-
-<?php
- }
- }
-} else {
- $get_code = wp_remote_retrieve_response_code( $get );
- $content_length = strlen( wp_remote_retrieve_body( $get ) );
-?>
-Response code: "<?php print $get_code ?>"
-Content length: "<?php print $content_length ?>"
-
-<?php
-}
- ?></pre>
- </div>
- <?php
-}
-
-/**
- * Get stats from WordPress.com
- *
- * @param string $table The stats which you want to retrieve: postviews, or searchterms.
- * @param array $args {
- * An associative array of arguments.
- *
- * @type bool $end The last day of the desired time frame. Format is 'Y-m-d' (e.g. 2007-05-01)
- * and default timezone is UTC date. Default value is Now.
- * @type string $days The length of the desired time frame. Default is 30. Maximum 90 days.
- * @type int $limit The maximum number of records to return. Default is 10. Maximum 100.
- * @type int $post_id The ID of the post to retrieve stats data for
- * @type string $summarize If present, summarizes all matching records. Default Null.
- *
- * }
- *
- * @return array {
- * An array of post view data, each post as an array
- *
- * array {
- * The post view data for a single post
- *
- * @type string $post_id The ID of the post
- * @type string $post_title The title of the post
- * @type string $post_permalink The permalink for the post
- * @type string $views The number of views for the post within the $num_days specified
- * }
- * }
- */
-function stats_get_csv( $table, $args = null ) {
- $defaults = array( 'end' => false, 'days' => false, 'limit' => 3, 'post_id' => false, 'summarize' => '' );
-
- $args = wp_parse_args( $args, $defaults );
- $args['table'] = $table;
- $args['blog_id'] = Jetpack_Options::get_option( 'id' );
-
- $stats_csv_url = add_query_arg( $args, 'https://stats.wordpress.com/csv.php' );
-
- $key = md5( $stats_csv_url );
-
- // Get cache.
- $stats_cache = get_option( 'stats_cache' );
- if ( ! $stats_cache || ! is_array( $stats_cache ) ) {
- $stats_cache = array();
- }
-
- // Return or expire this key.
- if ( isset( $stats_cache[ $key ] ) ) {
- $time = key( $stats_cache[ $key ] );
- if ( time() - $time < 300 ) {
- return $stats_cache[ $key ][ $time ];
- }
- unset( $stats_cache[ $key ] );
- }
-
- $stats_rows = array();
- do {
- if ( ! $stats = stats_get_remote_csv( $stats_csv_url ) ) {
- break;
- }
-
- $labels = array_shift( $stats );
-
- if ( 0 === stripos( $labels[0], 'error' ) ) {
- break;
- }
-
- $stats_rows = array();
- for ( $s = 0; isset( $stats[ $s ] ); $s++ ) {
- $row = array();
- foreach ( $labels as $col => $label ) {
- $row[ $label ] = $stats[ $s ][ $col ];
- }
- $stats_rows[] = $row;
- }
- } while ( 0 );
-
- // Expire old keys.
- foreach ( $stats_cache as $k => $cache ) {
- if ( ! is_array( $cache ) || 300 < time() - key( $cache ) ) {
- unset( $stats_cache[ $k ] );
- }
- }
-
- // Set cache.
- $stats_cache[ $key ] = array( time() => $stats_rows );
- update_option( 'stats_cache', $stats_cache );
-
- return $stats_rows;
-}
-
-/**
- * Stats get remote CSV.
- *
- * @access public
- * @param mixed $url URL.
- * @return array
- */
-function stats_get_remote_csv( $url ) {
- $method = 'GET';
- $timeout = 90;
- $user_id = JETPACK_MASTER_USER;
-
- $get = Jetpack_Client::remote_request( compact( 'url', 'method', 'timeout', 'user_id' ) );
- $get_code = wp_remote_retrieve_response_code( $get );
- if ( is_wp_error( $get ) || ( 2 !== intval( $get_code / 100 ) && 304 !== $get_code ) || empty( $get['body'] ) ) {
- return array(); // @todo: return an error?
- } else {
- return stats_str_getcsv( $get['body'] );
- }
-}
-
-/**
- * Rather than parsing the csv and its special cases, we create a new file and do fgetcsv on it.
- *
- * @access public
- * @param mixed $csv CSV.
- * @return array.
- */
-function stats_str_getcsv( $csv ) {
- if ( function_exists( 'str_getcsv' ) ) {
- $lines = str_getcsv( $csv, "\n" ); // phpcs:ignore PHPCompatibility.PHP.NewFunctions.str_getcsvFound
- return array_map( 'str_getcsv', $lines );
- }
- if ( ! $temp = tmpfile() ) { // The tmpfile() automatically unlinks.
- return false;
- }
-
- $data = array();
-
- fwrite( $temp, $csv, strlen( $csv ) );
- fseek( $temp, 0 );
- while ( false !== $row = fgetcsv( $temp, 2000 ) ) {
- $data[] = $row;
- }
- fclose( $temp );
-
- return $data;
-}
-
-/**
- * Abstract out building the rest api stats path.
- *
- * @param string $resource Resource.
- * @return string
- */
-function jetpack_stats_api_path( $resource = '' ) {
- $resource = ltrim( $resource, '/' );
- return sprintf( '/sites/%d/stats/%s', stats_get_option( 'blog_id' ), $resource );
-}
-
-/**
- * Fetches stats data from the REST API. Caches locally for 5 minutes.
- *
- * @link: https://developer.wordpress.com/docs/api/1.1/get/sites/%24site/stats/
- * @access public
- * @param array $args (default: array()) The args that are passed to the endpoint.
- * @param string $resource (default: '') Optional sub-endpoint following /stats/.
- * @return array|WP_Error.
- */
-function stats_get_from_restapi( $args = array(), $resource = '' ) {
- $endpoint = jetpack_stats_api_path( $resource );
- $api_version = '1.1';
- $args = wp_parse_args( $args, array() );
- $cache_key = md5( implode( '|', array( $endpoint, $api_version, serialize( $args ) ) ) );
-
- // Get cache.
- $stats_cache = Jetpack_Options::get_option( 'restapi_stats_cache', array() );
- if ( ! is_array( $stats_cache ) ) {
- $stats_cache = array();
- }
-
- // Return or expire this key.
- if ( isset( $stats_cache[ $cache_key ] ) ) {
- $time = key( $stats_cache[ $cache_key ] );
- if ( time() - $time < ( 5 * MINUTE_IN_SECONDS ) ) {
- $cached_stats = $stats_cache[ $cache_key ][ $time ];
- if ( is_wp_error( $cached_stats ) ) {
- return $cached_stats;
- }
- $cached_stats = (object) array_merge( array( 'cached_at' => $time ), (array) $cached_stats );
- return $cached_stats;
- }
- unset( $stats_cache[ $cache_key ] );
- }
-
- // Do the dirty work.
- $response = Jetpack_Client::wpcom_json_api_request_as_blog( $endpoint, $api_version, $args );
- if ( 200 !== wp_remote_retrieve_response_code( $response ) ) {
- $data = is_wp_error( $response ) ? $response : new WP_Error( 'stats_error' );
- } else {
- $data = json_decode( wp_remote_retrieve_body( $response ) );
- }
-
- // Expire old keys.
- foreach ( $stats_cache as $k => $cache ) {
- if ( ! is_array( $cache ) || ( 5 * MINUTE_IN_SECONDS ) < time() - key( $cache ) ) {
- unset( $stats_cache[ $k ] );
- }
- }
-
- // Set cache.
- $stats_cache[ $cache_key ] = array(
- time() => $data,
- );
- Jetpack_Options::update_option( 'restapi_stats_cache', $stats_cache, false );
-
- return $data;
-}
-
-/**
- * Load CSS needed for Stats column width in WP-Admin area.
- *
- * @since 4.7.0
- */
-function jetpack_stats_load_admin_css() {
- ?>
- <style type="text/css">
- .fixed .column-stats {
- width: 5em;
- }
- </style>
- <?php
-}
-
-/**
- * Set header for column that allows to go to WordPress.com to see an entry's stats.
- *
- * @param array $columns An array of column names.
- *
- * @since 4.7.0
- *
- * @return mixed
- */
-function jetpack_stats_post_table( $columns ) { // Adds a stats link on the edit posts page
- if ( ! current_user_can( 'view_stats' ) || ! Jetpack::is_user_connected() ) {
- return $columns;
- }
- // Array-Fu to add before comments
- $pos = array_search( 'comments', array_keys( $columns ) );
- if ( ! is_int( $pos ) ) {
- return $columns;
- }
- $chunks = array_chunk( $columns, $pos, true );
- $chunks[0]['stats'] = esc_html__( 'Stats', 'jetpack' );
-
- return call_user_func_array( 'array_merge', $chunks );
-}
-
-/**
- * Set content for cell with link to an entry's stats in WordPress.com.
- *
- * @param string $column The name of the column to display.
- * @param int $post_id The current post ID.
- *
- * @since 4.7.0
- *
- * @return mixed
- */
-function jetpack_stats_post_table_cell( $column, $post_id ) {
- if ( 'stats' == $column ) {
- if ( 'publish' != get_post_status( $post_id ) ) {
- printf(
- '<span aria-hidden="true">—</span><span class="screen-reader-text">%s</span>',
- esc_html__( 'No stats', 'jetpack' )
- );
- } else {
- printf(
- '<a href="%s" title="%s" class="dashicons dashicons-chart-bar" target="_blank"></a>',
- esc_url( "https://wordpress.com/stats/post/$post_id/" . Jetpack::build_raw_urls( get_home_url() ) ),
- esc_html__( 'View stats for this post in WordPress.com', 'jetpack' )
- );
- }
- }
-}
diff --git a/plugins/jetpack/modules/subscriptions.php b/plugins/jetpack/modules/subscriptions.php
deleted file mode 100644
index aa00cf13..00000000
--- a/plugins/jetpack/modules/subscriptions.php
+++ /dev/null
@@ -1,787 +0,0 @@
-<?php
-/**
- * Module Name: Subscriptions
- * Module Description: Allow users to subscribe to your posts and comments and receive notifications via email
- * Sort Order: 9
- * Recommendation Order: 8
- * First Introduced: 1.2
- * Requires Connection: Yes
- * Auto Activate: Yes
- * Module Tags: Social
- * Feature: Engagement
- * Additional Search Queries: subscriptions, subscription, email, follow, followers, subscribers, signup
- */
-
-add_action( 'jetpack_modules_loaded', 'jetpack_subscriptions_load' );
-
-function jetpack_subscriptions_load() {
- Jetpack::enable_module_configurable( __FILE__ );
- Jetpack::module_configuration_load( __FILE__, 'jetpack_subscriptions_configuration_load' );
-}
-
-function jetpack_subscriptions_configuration_load() {
- wp_safe_redirect( admin_url( 'options-discussion.php#jetpack-subscriptions-settings' ) );
- exit;
-}
-
-/**
- * Cherry picks keys from `$_SERVER` array.
- *
- * @since 6.0.0
- *
- * @return array An array of server data.
- */
-function jetpack_subscriptions_cherry_pick_server_data() {
- $data = array();
-
- foreach ( $_SERVER as $key => $value ) {
- if ( ! is_string( $value ) || 0 === strpos( $key, 'HTTP_COOKIE' ) ) {
- continue;
- }
-
- if ( 0 === strpos( $key, 'HTTP_' ) || in_array( $key, array( 'REMOTE_ADDR', 'REQUEST_URI', 'DOCUMENT_URI' ), true ) ) {
- $data[ $key ] = $value;
- }
- }
-
- return $data;
-}
-
-class Jetpack_Subscriptions {
- public $jetpack = false;
-
- public static $hash;
-
- /**
- * Singleton
- * @static
- */
- static function init() {
- static $instance = false;
-
- if ( !$instance ) {
- $instance = new Jetpack_Subscriptions;
- }
-
- return $instance;
- }
-
- function __construct() {
- $this->jetpack = Jetpack::init();
-
- // Don't use COOKIEHASH as it could be shared across installs && is non-unique in multisite.
- // @see: https://twitter.com/nacin/status/378246957451333632
- self::$hash = md5( get_option( 'siteurl' ) );
-
- add_filter( 'jetpack_xmlrpc_methods', array( $this, 'xmlrpc_methods' ) );
-
- // @todo remove sync from subscriptions and move elsewhere...
-
- // Add Configuration Page
- add_action( 'admin_init', array( $this, 'configure' ) );
-
- // Catch subscription widget submits
- if ( isset( $_REQUEST['jetpack_subscriptions_widget'] ) )
- add_action( 'template_redirect', array( $this, 'widget_submit' ) );
-
- // Set up the comment subscription checkboxes
- add_filter( 'comment_form_submit_button', array( $this, 'comment_subscribe_init' ), 10, 2 );
-
- // Catch comment posts and check for subscriptions.
- add_action( 'comment_post', array( $this, 'comment_subscribe_submit' ), 50, 2 );
-
- // Adds post meta checkbox in the post submit metabox
- add_action( 'post_submitbox_misc_actions', array( $this, 'subscription_post_page_metabox' ) );
-
- add_action( 'transition_post_status', array( $this, 'maybe_send_subscription_email' ), 10, 3 );
-
- add_filter( 'jetpack_published_post_flags', array( $this, 'set_post_flags' ), 10, 2 );
-
- add_filter( 'post_updated_messages', array( $this, 'update_published_message' ), 18, 1 );
- }
-
- /**
- * Jetpack_Subscriptions::xmlrpc_methods()
- *
- * Register subscriptions methods with the Jetpack XML-RPC server.
- * @param array $methods
- */
- function xmlrpc_methods( $methods ) {
- return array_merge(
- $methods,
- array(
- 'jetpack.subscriptions.subscribe' => array( $this, 'subscribe' ),
- )
- );
- }
-
- /*
- * Disable Subscribe on Single Post
- * Register post meta
- */
- function subscription_post_page_metabox() {
- if (
- /**
- * Filter whether or not to show the per-post subscription option.
- *
- * @module subscriptions
- *
- * @since 3.7.0
- *
- * @param bool true = show checkbox option on all new posts | false = hide the option.
- */
- ! apply_filters( 'jetpack_allow_per_post_subscriptions', false ) )
- {
- return;
- }
-
- if ( has_filter( 'jetpack_subscriptions_exclude_these_categories' ) || has_filter( 'jetpack_subscriptions_include_only_these_categories' ) ) {
- return;
- }
-
- global $post;
- $disable_subscribe_value = get_post_meta( $post->ID, '_jetpack_dont_email_post_to_subs', true );
- // only show checkbox if post hasn't been published and is a 'post' post type.
- if ( get_post_status( $post->ID ) !== 'publish' && get_post_type( $post->ID ) == 'post' ) :
- // Nonce it
- wp_nonce_field( 'disable_subscribe', 'disable_subscribe_nonce' );
- ?>
- <div class="misc-pub-section">
- <label for="_jetpack_dont_email_post_to_subs"><?php _e( 'Jetpack Subscriptions:', 'jetpack' ); ?></label><br>
- <input type="checkbox" name="_jetpack_dont_email_post_to_subs" id="jetpack-per-post-subscribe" value="1" <?php checked( $disable_subscribe_value, 1, true ); ?> />
- <?php _e( 'Don&#8217;t send this to subscribers', 'jetpack' ); ?>
- </div>
- <?php endif;
- }
-
- /**
- * Checks whether or not the post should be emailed to subscribers
- *
- * It checks for the following things in order:
- * - Usage of filter jetpack_subscriptions_exclude_these_categories
- * - Usage of filter jetpack_subscriptions_include_only_these_categories
- * - Existence of the per-post checkbox option
- *
- * Only one of these can be used at any given time.
- *
- * @param $new_status string - the "new" post status of the transition when saved
- * @param $old_status string - the "old" post status of the transition when saved
- * @param $post obj - The post object
- */
- function maybe_send_subscription_email( $new_status, $old_status, $post ) {
-
- if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
- return;
- }
-
- // Make sure that the checkbox is preseved
- if ( ! empty( $_POST['disable_subscribe_nonce'] ) && wp_verify_nonce( $_POST['disable_subscribe_nonce'], 'disable_subscribe' ) ) {
- $set_checkbox = isset( $_POST['_jetpack_dont_email_post_to_subs'] ) ? 1 : 0;
- update_post_meta( $post->ID, '_jetpack_dont_email_post_to_subs', $set_checkbox );
- }
- }
-
- function update_published_message( $messages ) {
- global $post;
- if ( ! $this->should_email_post_to_subscribers( $post ) ) {
- return $messages;
- }
-
- $view_post_link_html = sprintf( ' <a href="%1$s">%2$s</a>',
- esc_url( get_permalink( $post ) ),
- __( 'View post', 'jetpack' )
- );
-
- $messages['post'][6] = sprintf(
- /* translators: Message shown after a post is published */
- esc_html__( 'Post published and sending emails to subscribers.', 'jetpack' )
- ) . $view_post_link_html;
- return $messages;
- }
-
- public function should_email_post_to_subscribers( $post ) {
- $should_email = true;
- if ( get_post_meta( $post->ID, '_jetpack_dont_email_post_to_subs', true ) ) {
- return false;
- }
-
- // Only posts are currently supported
- if ( $post->post_type !== 'post' ) {
- return false;
- }
-
- // Private posts are not sent to subscribers.
- if ( 'private' === $post->post_status ) {
- return false;
- }
-
- /**
- * Array of categories that will never trigger subscription emails.
- *
- * Will not send subscription emails from any post from within these categories.
- *
- * @module subscriptions
- *
- * @since 3.7.0
- *
- * @param array $args Array of category slugs or ID's.
- */
- $excluded_categories = apply_filters( 'jetpack_subscriptions_exclude_these_categories', array() );
-
- // Never email posts from these categories
- if ( ! empty( $excluded_categories ) && in_category( $excluded_categories, $post->ID ) ) {
- $should_email = false;
- }
-
- /**
- * ONLY send subscription emails for these categories
- *
- * Will ONLY send subscription emails to these categories.
- *
- * @module subscriptions
- *
- * @since 3.7.0
- *
- * @param array $args Array of category slugs or ID's.
- */
- $only_these_categories = apply_filters( 'jetpack_subscriptions_exclude_all_categories_except', array() );
-
- // Only emails posts from these categories
- if ( ! empty( $only_these_categories ) && ! in_category( $only_these_categories, $post->ID ) ) {
- $should_email = false;
- }
-
- return $should_email;
- }
-
- function set_post_flags( $flags, $post ) {
- $flags['send_subscription'] = $this->should_email_post_to_subscribers( $post );
- return $flags;
- }
-
- /**
- * Jetpack_Subscriptions::configure()
- *
- * Jetpack Subscriptions configuration screen.
- */
- function configure() {
- // Create the section
- add_settings_section(
- 'jetpack_subscriptions',
- __( 'Jetpack Subscriptions Settings', 'jetpack' ),
- array( $this, 'subscriptions_settings_section' ),
- 'discussion'
- );
-
- /** Subscribe to Posts ***************************************************/
-
- add_settings_field(
- 'jetpack_subscriptions_post_subscribe',
- __( 'Follow Blog', 'jetpack' ),
- array( $this, 'subscription_post_subscribe_setting' ),
- 'discussion',
- 'jetpack_subscriptions'
- );
-
- register_setting(
- 'discussion',
- 'stb_enabled'
- );
-
- /** Subscribe to Comments ******************************************************/
-
- add_settings_field(
- 'jetpack_subscriptions_comment_subscribe',
- __( 'Follow Comments', 'jetpack' ),
- array( $this, 'subscription_comment_subscribe_setting' ),
- 'discussion',
- 'jetpack_subscriptions'
- );
-
- register_setting(
- 'discussion',
- 'stc_enabled'
- );
-
- /** Subscription Messaging Options ******************************************************/
-
- register_setting(
- 'reading',
- 'subscription_options',
- array( $this, 'validate_settings' )
- );
-
- add_settings_section(
- 'email_settings',
- __( 'Follower Settings', 'jetpack' ),
- array( $this, 'reading_section' ),
- 'reading'
- );
-
- add_settings_field(
- 'invitation',
- __( 'Blog follow email text', 'jetpack' ),
- array( $this, 'setting_invitation' ),
- 'reading',
- 'email_settings'
- );
-
- add_settings_field(
- 'comment-follow',
- __( 'Comment follow email text', 'jetpack' ),
- array( $this, 'setting_comment_follow' ),
- 'reading',
- 'email_settings'
- );
- }
-
- /**
- * Discussions setting section blurb
- *
- */
- function subscriptions_settings_section() {
- ?>
- <p id="jetpack-subscriptions-settings"><?php _e( 'Change whether your visitors can subscribe to your posts or comments or both.', 'jetpack' ); ?></p>
-
- <?php
- }
-
- /**
- * Post Subscriptions Toggle
- *
- */
- function subscription_post_subscribe_setting() {
-
- $stb_enabled = get_option( 'stb_enabled', 1 ); ?>
-
- <p class="description">
- <input type="checkbox" name="stb_enabled" id="jetpack-post-subscribe" value="1" <?php checked( $stb_enabled, 1 ); ?> />
- <?php _e( "Show a <em>'follow blog'</em> option in the comment form", 'jetpack' ); ?>
- </p>
- <?php
- }
-
- /**
- * Comments Subscriptions Toggle
- *
- */
- function subscription_comment_subscribe_setting() {
-
- $stc_enabled = get_option( 'stc_enabled', 1 ); ?>
-
- <p class="description">
- <input type="checkbox" name="stc_enabled" id="jetpack-comment-subscribe" value="1" <?php checked( $stc_enabled, 1 ); ?> />
- <?php _e( "Show a <em>'follow comments'</em> option in the comment form", 'jetpack' ); ?>
- </p>
-
- <?php
- }
-
- function validate_settings( $settings ) {
- global $allowedposttags;
-
- $default = $this->get_default_settings();
-
- // Blog Follow
- $settings['invitation'] = trim( wp_kses( $settings['invitation'], $allowedposttags ) );
- if ( empty( $settings['invitation'] ) )
- $settings['invitation'] = $default['invitation'];
-
- // Comments Follow (single post)
- $settings['comment_follow'] = trim( wp_kses( $settings['comment_follow'], $allowedposttags ) );
- if ( empty( $settings['comment_follow'] ) )
- $settings['comment_follow'] = $default['comment_follow'];
-
- return $settings;
- }
-
- public function reading_section() {
- echo '<p id="follower-settings">';
- _e( 'These settings change emails sent from your blog to followers.', 'jetpack' );
- echo '</p>';
- }
-
- public function setting_invitation() {
- $settings = $this->get_settings();
- echo '<textarea name="subscription_options[invitation]" class="large-text" cols="50" rows="5">' . esc_textarea( $settings['invitation'] ) . '</textarea>';
- echo '<p><span class="description">'.__( 'Introduction text sent when someone follows your blog. (Site and confirmation details will be automatically added for you.)', 'jetpack' ).'</span></p>';
- }
-
- public function setting_comment_follow() {
- $settings = $this->get_settings();
- echo '<textarea name="subscription_options[comment_follow]" class="large-text" cols="50" rows="5">' . esc_textarea( $settings['comment_follow'] ) . '</textarea>';
- echo '<p><span class="description">'.__( 'Introduction text sent when someone follows a post on your blog. (Site and confirmation details will be automatically added for you.)', 'jetpack' ).'</span></p>';
- }
-
- function get_default_settings() {
- return array(
- 'invitation' => __( "Howdy.\n\nYou recently followed this blog's posts. This means you will receive each new post by email.\n\nTo activate, click confirm below. If you believe this is an error, ignore this message and we'll never bother you again.", 'jetpack' ),
- 'comment_follow' => __( "Howdy.\n\nYou recently followed one of my posts. This means you will receive an email when new comments are posted.\n\nTo activate, click confirm below. If you believe this is an error, ignore this message and we'll never bother you again.", 'jetpack' )
- );
- }
-
- function get_settings() {
- return wp_parse_args( (array) get_option( 'subscription_options', array() ), $this->get_default_settings() );
- }
-
- /**
- * Jetpack_Subscriptions::subscribe()
- *
- * Send a synchronous XML-RPC subscribe to blog posts or subscribe to post comments request.
- *
- * @param string $email
- * @param array $post_ids (optional) defaults to 0 for blog posts only: array of post IDs to subscribe to blog's posts
- * @param bool $async (optional) Should the subscription be performed asynchronously? Defaults to true.
- *
- * @return true|Jetpack_Error true on success
- * invalid_email : not a valid email address
- * invalid_post_id : not a valid post ID
- * unknown_post_id : unknown post
- * not_subscribed : strange error. Jetpack servers at WordPress.com could subscribe the email.
- * disabled : Site owner has disabled subscriptions.
- * active : Already subscribed.
- * unknown : strange error. Jetpack servers at WordPress.com returned something malformed.
- * unknown_status : strange error. Jetpack servers at WordPress.com returned something I didn't understand.
- */
- function subscribe( $email, $post_ids = 0, $async = true, $extra_data = array() ) {
- if ( !is_email( $email ) ) {
- return new Jetpack_Error( 'invalid_email' );
- }
-
- if ( !$async ) {
- Jetpack::load_xml_rpc_client();
- $xml = new Jetpack_IXR_ClientMulticall();
- }
-
- foreach ( (array) $post_ids as $post_id ) {
- $post_id = (int) $post_id;
- if ( $post_id < 0 ) {
- return new Jetpack_Error( 'invalid_post_id' );
- } else if ( $post_id && !$post = get_post( $post_id ) ) {
- return new Jetpack_Error( 'unknown_post_id' );
- }
-
- if ( $async ) {
- Jetpack::xmlrpc_async_call( 'jetpack.subscribeToSite', $email, $post_id, serialize( $extra_data ) );
- } else {
- $xml->addCall( 'jetpack.subscribeToSite', $email, $post_id, serialize( $extra_data ) );
- }
- }
-
- if ( $async ) {
- return;
- }
-
- // Call
- $xml->query();
-
- if ( $xml->isError() ) {
- return $xml->get_jetpack_error();
- }
-
- $responses = $xml->getResponse();
-
- $r = array();
- foreach ( (array) $responses as $response ) {
- if ( isset( $response['faultCode'] ) || isset( $response['faultString'] ) ) {
- $r[] = $xml->get_jetpack_error( $response['faultCode'], $response['faultString'] );
- continue;
- }
-
- if ( !is_array( $response[0] ) || empty( $response[0]['status'] ) ) {
- $r[] = new Jetpack_Error( 'unknown' );
- continue;
- }
-
- switch ( $response[0]['status'] ) {
- case 'error' :
- $r[] = new Jetpack_Error( 'not_subscribed' );
- continue 2;
- case 'disabled' :
- $r[] = new Jetpack_Error( 'disabled' );
- continue 2;
- case 'active' :
- $r[] = new Jetpack_Error( 'active' );
- continue 2;
- case 'pending' :
- $r[] = true;
- continue 2;
- default :
- $r[] = new Jetpack_Error( 'unknown_status', (string) $response[0]['status'] );
- continue 2;
- }
- }
-
- return $r;
- }
-
- /**
- * Jetpack_Subscriptions::widget_submit()
- *
- * When a user submits their email via the blog subscription widget, check the details and call the subsribe() method.
- */
- function widget_submit() {
- // Check the nonce.
- if ( is_user_logged_in() ) {
- check_admin_referer( 'blogsub_subscribe_' . get_current_blog_id() );
- }
-
- if ( empty( $_REQUEST['email'] ) )
- return false;
-
- $redirect_fragment = false;
- if ( isset( $_REQUEST['redirect_fragment'] ) ) {
- $redirect_fragment = preg_replace( '/[^a-z0-9_-]/i', '', $_REQUEST['redirect_fragment'] );
- }
- if ( !$redirect_fragment ) {
- $redirect_fragment = 'subscribe-blog';
- }
-
- $subscribe = Jetpack_Subscriptions::subscribe(
- $_REQUEST['email'],
- 0,
- false,
- array(
- 'source' => 'widget',
- 'widget-in-use' => is_active_widget( false, false, 'blog_subscription', true ) ? 'yes' : 'no',
- 'comment_status' => '',
- 'server_data' => jetpack_subscriptions_cherry_pick_server_data(),
- )
- );
-
- if ( is_wp_error( $subscribe ) ) {
- $error = $subscribe->get_error_code();
- } else {
- $error = false;
- foreach ( $subscribe as $response ) {
- if ( is_wp_error( $response ) ) {
- $error = $response->get_error_code();
- break;
- }
- }
- }
-
- switch ( $error ) {
- case false:
- $result = 'success';
- break;
- case 'invalid_email':
- $result = $error;
- break;
- case 'blocked_email':
- $result = 'opted_out';
- break;
- case 'active':
- case 'pending':
- $result = 'already';
- break;
- default:
- $result = 'error';
- break;
- }
-
- $redirect = add_query_arg( 'subscribe', $result );
-
- /**
- * Fires on each subscription form submission.
- *
- * @module subscriptions
- *
- * @since 3.7.0
- *
- * @param string $result Result of form submission: success, invalid_email, already, error.
- */
- do_action( 'jetpack_subscriptions_form_submission', $result );
-
- wp_safe_redirect( "$redirect#$redirect_fragment" );
- exit;
- }
-
- /**
- * Jetpack_Subscriptions::comment_subscribe_init()
- *
- * Set up and add the comment subscription checkbox to the comment form.
- *
- * @param string $submit_button HTML markup for the submit button.
- * @param array $args Arguments passed to `comment_form()`.
- */
- function comment_subscribe_init( $submit_button, $args ) {
- global $post;
-
- $comments_checked = '';
- $blog_checked = '';
-
- // Check for a comment / blog submission and set a cookie to retain the setting and check the boxes.
- if ( isset( $_COOKIE[ 'jetpack_comments_subscribe_' . self::$hash . '_' . $post->ID ] ) ) {
- $comments_checked = ' checked="checked"';
- }
-
- if ( isset( $_COOKIE[ 'jetpack_blog_subscribe_' . self::$hash ] ) ) {
- $blog_checked = ' checked="checked"';
- }
-
- // Some themes call this function, don't show the checkbox again
- remove_action( 'comment_form', 'subscription_comment_form' );
-
- // Check if Mark Jaquith's Subscribe to Comments plugin is active - if so, suppress Jetpack checkbox
-
- $str = '';
-
- if ( FALSE === has_filter( 'comment_form', 'show_subscription_checkbox' ) && 1 == get_option( 'stc_enabled', 1 ) && empty( $post->post_password ) && 'post' == get_post_type() ) {
- // Subscribe to comments checkbox
- $str .= '<p class="comment-subscription-form"><input type="checkbox" name="subscribe_comments" id="subscribe_comments" value="subscribe" style="width: auto; -moz-appearance: checkbox; -webkit-appearance: checkbox;"' . $comments_checked . ' /> ';
- $comment_sub_text = __( 'Notify me of follow-up comments by email.', 'jetpack' );
- $str .= '<label class="subscribe-label" id="subscribe-label" for="subscribe_comments">' . esc_html(
- /**
- * Filter the Subscribe to comments text appearing below the comment form.
- *
- * @module subscriptions
- *
- * @since 3.4.0
- *
- * @param string $comment_sub_text Subscribe to comments text.
- */
- apply_filters( 'jetpack_subscribe_comment_label', $comment_sub_text )
- ) . '</label>';
- $str .= '</p>';
- }
-
- if ( 1 == get_option( 'stb_enabled', 1 ) ) {
- // Subscribe to blog checkbox
- $str .= '<p class="comment-subscription-form"><input type="checkbox" name="subscribe_blog" id="subscribe_blog" value="subscribe" style="width: auto; -moz-appearance: checkbox; -webkit-appearance: checkbox;"' . $blog_checked . ' /> ';
- $blog_sub_text = __( 'Notify me of new posts by email.', 'jetpack' );
- $str .= '<label class="subscribe-label" id="subscribe-blog-label" for="subscribe_blog">' . esc_html(
- /**
- * Filter the Subscribe to blog text appearing below the comment form.
- *
- * @module subscriptions
- *
- * @since 3.4.0
- *
- * @param string $comment_sub_text Subscribe to blog text.
- */
- apply_filters( 'jetpack_subscribe_blog_label', $blog_sub_text )
- ) . '</label>';
- $str .= '</p>';
- }
-
- /**
- * Filter the output of the subscription options appearing below the comment form.
- *
- * @module subscriptions
- *
- * @since 1.2.0
- *
- * @param string $str Comment Subscription form HTML output.
- */
- $str = apply_filters( 'jetpack_comment_subscription_form', $str );
-
- return $str . $submit_button;
- }
-
- /**
- * Jetpack_Subscriptions::comment_subscribe_init()
- *
- * When a user checks the comment subscribe box and submits a comment, subscribe them to the comment thread.
- */
- function comment_subscribe_submit( $comment_id, $approved ) {
- if ( 'spam' === $approved ) {
- return;
- }
-
- $comment = get_comment( $comment_id );
-
- // Set cookies for this post/comment
- $this->set_cookies( isset( $_REQUEST['subscribe_comments'] ), $comment->comment_post_ID, isset( $_REQUEST['subscribe_blog'] ) );
-
- if ( !isset( $_REQUEST['subscribe_comments'] ) && !isset( $_REQUEST['subscribe_blog'] ) )
- return;
-
- $post_ids = array();
-
- if ( isset( $_REQUEST['subscribe_comments'] ) )
- $post_ids[] = $comment->comment_post_ID;
-
- if ( isset( $_REQUEST['subscribe_blog'] ) )
- $post_ids[] = 0;
-
- $result = Jetpack_Subscriptions::subscribe(
- $comment->comment_author_email,
- $post_ids,
- true,
- array(
- 'source' => 'comment-form',
- 'widget-in-use' => is_active_widget( false, false, 'blog_subscription', true ) ? 'yes' : 'no',
- 'comment_status' => $approved,
- 'server_data' => jetpack_subscriptions_cherry_pick_server_data(),
- )
- );
-
- /**
- * Fires on each comment subscription form submission.
- *
- * @module subscriptions
- *
- * @since 5.5.0
- *
- * @param NULL|WP_Error $result Result of form submission: NULL on success, WP_Error otherwise.
- * @param Array $post_ids An array of post IDs that the user subscribed to, 0 means blog subscription.
- */
- do_action( 'jetpack_subscriptions_comment_form_submission', $result, $post_ids );
- }
-
- /**
- * Jetpack_Subscriptions::set_cookies()
- *
- * Set a cookie to save state on the comment and post subscription checkboxes.
- *
- * @param bool $subscribe_to_post Whether the user chose to subscribe to subsequent comments on this post.
- * @param int $post_id If $subscribe_to_post is true, the post ID they've subscribed to.
- * @param bool $subscribe_to_blog Whether the user chose to subscribe to all new posts on the blog.
- */
- function set_cookies( $subscribe_to_post = false, $post_id = null, $subscribe_to_blog = false ) {
- $post_id = intval( $post_id );
-
- /** This filter is already documented in core/wp-includes/comment-functions.php */
- $cookie_lifetime = apply_filters( 'comment_cookie_lifetime', 30000000 );
-
- /**
- * Filter the Jetpack Comment cookie path.
- *
- * @module subscriptions
- *
- * @since 2.5.0
- *
- * @param string COOKIEPATH Cookie path.
- */
- $cookie_path = apply_filters( 'jetpack_comment_cookie_path', COOKIEPATH );
-
- /**
- * Filter the Jetpack Comment cookie domain.
- *
- * @module subscriptions
- *
- * @since 2.5.0
- *
- * @param string COOKIE_DOMAIN Cookie domain.
- */
- $cookie_domain = apply_filters( 'jetpack_comment_cookie_domain', COOKIE_DOMAIN );
-
- if ( $subscribe_to_post && $post_id >= 0 ) {
- setcookie( 'jetpack_comments_subscribe_' . self::$hash . '_' . $post_id, 1, time() + $cookie_lifetime, $cookie_path, $cookie_domain );
- } else {
- setcookie( 'jetpack_comments_subscribe_' . self::$hash . '_' . $post_id, '', time() - 3600, $cookie_path, $cookie_domain );
- }
-
- if ( $subscribe_to_blog ) {
- setcookie( 'jetpack_blog_subscribe_' . self::$hash, 1, time() + $cookie_lifetime, $cookie_path, $cookie_domain );
- } else {
- setcookie( 'jetpack_blog_subscribe_' . self::$hash, '', time() - 3600, $cookie_path, $cookie_domain );
- }
- }
-
-}
-
-Jetpack_Subscriptions::init();
-
-include dirname( __FILE__ ) . '/subscriptions/views.php';
diff --git a/plugins/jetpack/modules/subscriptions/readme.md b/plugins/jetpack/modules/subscriptions/readme.md
deleted file mode 100644
index 44680150..00000000
--- a/plugins/jetpack/modules/subscriptions/readme.md
+++ /dev/null
@@ -1,12 +0,0 @@
-## Assets for Subscriptions
-
-### subscriptions.css
-
-CSS required to render the subscription widget
-
-### views.php
-
-This file handles the registration of various subscriptions
-views, i.e. a widget and a block for the post editor.
-
-This file is shared with wordpress.com
diff --git a/plugins/jetpack/modules/subscriptions/subscriptions.css b/plugins/jetpack/modules/subscriptions/subscriptions.css
deleted file mode 100644
index 2bd1bd23..00000000
--- a/plugins/jetpack/modules/subscriptions/subscriptions.css
+++ /dev/null
@@ -1,29 +0,0 @@
-#subscribe-email input {
- width: 95%;
-}
-
-.comment-subscription-form {
- margin-bottom: 1em;
-}
-
-.comment-subscription-form .subscribe-label {
- display: inline !important;
-}
-
-/*
-Text meant only for screen readers.
-Provides support for themes that do not bundle this CSS yet.
-@see https://make.wordpress.org/accessibility/2015/02/09/hiding-text-for-screen-readers-with-wordpress-core/
-***********************************/
-.screen-reader-text {
- border: 0;
- clip: rect(1px, 1px, 1px, 1px);
- clip-path: inset(50%);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute ! important;
- width: 1px;
- word-wrap: normal ! important;
-}
diff --git a/plugins/jetpack/modules/subscriptions/views.php b/plugins/jetpack/modules/subscriptions/views.php
deleted file mode 100644
index 6a332f8f..00000000
--- a/plugins/jetpack/modules/subscriptions/views.php
+++ /dev/null
@@ -1,755 +0,0 @@
-<?php
-
-class Jetpack_Subscriptions_Widget extends WP_Widget {
- static $instance_count = 0;
- /**
- * @var array When printing the submit button, what tags are allowed
- */
- static $allowed_html_tags_for_submit_button = array( 'br' => array() );
-
- function __construct() {
- $widget_ops = array(
- 'classname' => 'widget_blog_subscription jetpack_subscription_widget',
- 'description' => __( 'Add an email signup form to allow people to subscribe to your blog.', 'jetpack' ),
- 'customize_selective_refresh' => true,
- );
-
- $name = self::is_jetpack() ?
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', __( 'Blog Subscriptions', 'jetpack' ) ) :
- __( 'Follow Blog', 'jetpack' );
-
- parent::__construct(
- 'blog_subscription',
- $name,
- $widget_ops
- );
-
- if ( self::is_jetpack() &&
- (
- is_active_widget( false, false, $this->id_base ) ||
- is_active_widget( false, false, 'monster' ) ||
- is_customize_preview()
- )
- ) {
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ) );
- }
- }
-
- /**
- * Enqueue the form's CSS.
- *
- * @since 4.5.0
- */
- function enqueue_style() {
- wp_register_style(
- 'jetpack-subscriptions',
- plugins_url( 'subscriptions.css', __FILE__ ),
- array(),
- JETPACK__VERSION
- );
- wp_enqueue_style( 'jetpack-subscriptions' );
- }
-
- /**
- * Renders a full widget either within the context of WordPress widget, or in response to a shortcode.
- *
- * @param array $args Display arguments including 'before_title', 'after_title', 'before_widget', and 'after_widget'.
- * @param array $instance The settings for the particular instance of the widget.
- */
- function widget( $args, $instance ) {
- if ( self::is_jetpack() &&
- /** This filter is documented in modules/contact-form/grunion-contact-form.php */
- false === apply_filters( 'jetpack_auto_fill_logged_in_user', false )
- ) {
- $subscribe_email = '';
- } else {
- $current_user = wp_get_current_user();
- if ( ! empty( $current_user->user_email ) ) {
- $subscribe_email = esc_attr( $current_user->user_email );
- } else {
- $subscribe_email = '';
- }
- }
-
- $stats_action = self::is_jetpack() ? 'jetpack_subscriptions' : 'follow_blog';
- /** This action is documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', $stats_action );
-
- $after_widget = isset( $args['after_widget'] ) ? $args['after_widget'] : '';
- $before_widget = isset( $args['before_widget'] ) ? $args['before_widget'] : '';
- $instance = wp_parse_args( (array) $instance, $this->defaults() );
-
- echo $before_widget;
-
- Jetpack_Subscriptions_Widget::$instance_count ++;
-
- self::render_widget_title( $args, $instance );
-
- self::render_widget_status_messages( $instance );
-
- if ( self::is_current_user_subscribed() ) {
- self::render_widget_already_subscribed( $instance );
- } else {
- self::render_widget_subscription_form( $args, $instance, $subscribe_email );
- }
-
- echo "\n" . $after_widget;
- }
-
- /**
- * Prints the widget's title. If show_only_email_and_button is true, we will not show a title.
- *
- * @param array $args Display arguments including 'before_title', 'after_title', 'before_widget', and 'after_widget'.
- * @param array $instance The settings for the particular instance of the widget.
- */
- static function render_widget_title( $args, $instance ) {
- $show_only_email_and_button = $instance['show_only_email_and_button'];
- $before_title = isset( $args['before_title'] ) ? $args['before_title'] : '';
- $after_title = isset( $args['after_title'] ) ? $args['after_title'] : '';
- if ( self::is_wpcom() && ! $show_only_email_and_button ) {
- if ( self::is_current_user_subscribed() ) {
- if ( ! empty( $instance['title_following'] ) ) {
- echo $before_title . '<label for="subscribe-field' . ( Jetpack_Subscriptions_Widget::$instance_count > 1 ? '-' . Jetpack_Subscriptions_Widget::$instance_count : '' ) . '">' . esc_attr( $instance['title_following'] ) . '</label>' . $after_title . "\n";
- }
- } else {
- if ( ! empty( $instance['title'] ) ) {
- echo $before_title . '<label for="subscribe-field' . ( Jetpack_Subscriptions_Widget::$instance_count > 1 ? '-' . Jetpack_Subscriptions_Widget::$instance_count : '' ) . '">' . esc_attr( $instance['title'] ) . '</label>' . $after_title . "\n";
- }
- }
- }
-
- if ( self::is_jetpack() && empty( $instance['show_only_email_and_button'] ) ) {
- echo $args['before_title'] . esc_attr( $instance['title'] ) . $args['after_title'] . "\n";
- }
- }
-
- /**
- * Prints the subscription block's status messages after someone has attempted to subscribe.
- * Either a success message or an error message.
- *
- * @param array $instance The settings for the particular instance of the widget.
- */
- static function render_widget_status_messages( $instance ) {
- if ( self::is_jetpack() && isset( $_GET['subscribe'] ) ) {
- $success_message = isset( $instance['success_message'] ) ? stripslashes( $instance['success_message'] ) : '';
- $subscribers_total = self::fetch_subscriber_count();
- switch ( $_GET['subscribe'] ) :
- case 'invalid_email' : ?>
- <p class="error"><?php esc_html_e( 'The email you entered was invalid. Please check and try again.', 'jetpack' ); ?></p>
- <?php break;
- case 'opted_out' : ?>
- <p class="error"><?php printf( __( 'The email address has opted out of subscription emails. <br /> You can manage your preferences at <a href="%1$s" title="%2$s" target="_blank">subscribe.wordpress.com</a>', 'jetpack' ),
- 'https://subscribe.wordpress.com/',
- __( 'Manage your email preferences.', 'jetpack' )
- ); ?></p>
- <?php break;
- case 'already' : ?>
- <p class="error"><?php printf( __( 'You have already subscribed to this site. Please check your inbox. <br /> You can manage your preferences at <a href="%1$s" title="%2$s" target="_blank">subscribe.wordpress.com</a>', 'jetpack' ),
- 'https://subscribe.wordpress.com/',
- __( 'Manage your email preferences.', 'jetpack' )
- ); ?></p>
- <?php break;
- case 'success' : ?>
- <div class="success"><?php echo wpautop( str_replace( '[total-subscribers]', number_format_i18n( $subscribers_total['value'] ), $success_message ) ); ?></div>
- <?php break;
- default : ?>
- <p class="error"><?php esc_html_e( 'There was an error when subscribing. Please try again.', 'jetpack' ); ?></p>
- <?php break;
- endswitch;
- }
-
- if ( self::is_wpcom() && self::wpcom_has_status_message() ) {
- global $themecolors;
- switch ( $_GET['blogsub'] ) {
- case 'confirming':
- echo "<div style='background-color: #{$themecolors['bg']}; border: 1px solid #{$themecolors['border']}; color: #{$themecolors['text']}; padding-left: 5px; padding-right: 5px; margin-bottom: 10px;'>";
- _e( 'Thanks for subscribing! You&rsquo;ll get an email with a link to confirm your subscription. If you don&rsquo;t get it, please <a href="http://en.support.wordpress.com/contact/">contact us</a>.' );
- echo "</div>";
- break;
- case 'blocked':
- echo "<div style='background-color: #{$themecolors['bg']}; border: 1px solid #{$themecolors['border']}; color: #{$themecolors['text']}; padding-left: 5px; padding-right: 5px; margin-bottom: 10px;'>";
- _e( 'Subscriptions have been blocked for this email address.' );
- echo "</div>";
- break;
- case 'flooded':
- echo "<div style='background-color: #{$themecolors['bg']}; border: 1px solid #{$themecolors['border']}; color: #{$themecolors['text']}; padding-left: 5px; padding-right: 5px; margin-bottom: 10px;'>";
- _e( 'You already have several pending email subscriptions. Approve or delete a few through your <a href="https://subscribe.wordpress.com/">Subscription Manager</a> before attempting to subscribe to more blogs.' );
- echo "</div>";
- break;
- case 'spammed':
- echo "<div style='background-color: #{$themecolors['bg']}; border: 1px solid #{$themecolors['border']}; color: #{$themecolors['text']}; padding-left: 5px; padding-right: 5px; margin-bottom: 10px;'>";
- echo wp_kses_post( sprintf( __( 'Because there are many pending subscriptions for this email address, we have blocked the subscription. Please <a href="%s">activate or delete</a> pending subscriptions before attempting to subscribe.' ), 'https://subscribe.wordpress.com/' ) );
- echo "</div>";
- break;
- case 'subscribed':
- echo "<div style='background-color: #{$themecolors['bg']}; border: 1px solid #{$themecolors['border']}; color: #{$themecolors['text']}; padding-left: 5px; padding-right: 5px; margin-bottom: 10px;'>";
- _e( 'You&rsquo;re already subscribed to this site.' );
- echo "</div>";
- break;
- case 'pending':
- echo "<div style='background-color: #{$themecolors['bg']}; border: 1px solid #{$themecolors['border']}; color: #{$themecolors['text']}; padding-left: 5px; padding-right: 5px; margin-bottom: 10px;'>";
- _e( 'You have a pending subscription already; we just sent you another email. Click the link or <a href="http://en.support.wordpress.com/contact/">contact us</a> if you don&rsquo;t receive it.' );
- echo "</div>";
- break;
- case 'confirmed':
- echo "<div style='background-color: #{$themecolors['bg']}; border: 1px solid #{$themecolors['border']}; color: #{$themecolors['text']}; padding-left: 5px; padding-right: 5px; margin-bottom: 10px;'>";
- _e( 'Congrats, you&rsquo;re subscribed! You&rsquo;ll get an email with the details of your subscription and an unsubscribe link.' );
- echo "</div>";
- break;
- }
- }
- }
-
- /**
- * Renders a message to folks who are already subscribed.
- *
- * @param array $instance The settings for the particular instance of the widget.
- *
- * @return void
- */
- static function render_widget_already_subscribed( $instance ) {
- if ( self::is_wpcom() ) {
- $subscribers_total = self::fetch_subscriber_count();
- $edit_subs_url = 'https://wordpress.com/following/edit/';
- if ( function_exists( 'localized_wpcom_url' ) ) {
- $edit_subs_url = localized_wpcom_url( http() . '://wordpress.com/following/edit/', get_user_locale() );
- }
- $show_subscribers_total = (bool) $instance['show_subscribers_total'];
- if ( $show_subscribers_total && $subscribers_total > 1 ) :
- $subscribers_not_me = $subscribers_total - 1;
- /* translators: %s: number of folks following the blog */
- ?>
- <p><?php printf( _n( 'You are following this blog, along with %s other amazing person (<a href="%s">manage</a>).', 'You are following this blog, along with %s other amazing people (<a href="%s">manage</a>).', $subscribers_not_me ), number_format_i18n( $subscribers_not_me ), $edit_subs_url ) ?></p><?php
- else :
- ?>
- <p><?php printf( __( 'You are following this blog (<a href="%s">manage</a>).' ), $edit_subs_url ) ?></p><?php
- endif;
- }
- }
-
- /**
- * Renders a form allowing folks to subscribe to the blog.
- *
- * @param array $args Display arguments including 'before_title', 'after_title', 'before_widget', and 'after_widget'.
- * @param array $instance The settings for the particular instance of the widget.
- * @param string $subscribe_email The email to use to prefill the form.
- */
- static function render_widget_subscription_form( $args, $instance, $subscribe_email ) {
- $show_only_email_and_button = $instance['show_only_email_and_button'];
- $subscribe_logged_in = isset( $instance['subscribe_logged_in'] ) ? stripslashes( $instance['subscribe_logged_in'] ) : '';
- $show_subscribers_total = (bool) $instance['show_subscribers_total'];
- $subscribe_text = empty( $instance['show_only_email_and_button'] ) ?
- stripslashes( $instance['subscribe_text'] ) :
- false;
- $referer = ( is_ssl() ? 'https' : 'http' ) . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
- $source = 'widget';
- $widget_id = esc_attr( ! empty( $args['widget_id'] ) ? esc_attr( $args['widget_id'] ) : mt_rand( 450, 550 ) );
- $subscribe_button = ! empty( $instance['submit_button_text'] ) ? $instance['submit_button_text'] : $instance['subscribe_button'];
- $subscribers_total = self::fetch_subscriber_count();
- $subscribe_placeholder = isset( $instance['subscribe_placeholder'] ) ? stripslashes( $instance['subscribe_placeholder'] ) : '';
- $submit_button_classes = isset( $instance['submit_button_classes'] ) ? $instance['submit_button_classes'] : '';
- $submit_button_styles = isset( $instance['submit_button_styles'] ) ? $instance['submit_button_styles'] : '';
-
- if ( self::is_wpcom() && ! self::wpcom_has_status_message() ) {
- global $current_blog;
- $url = defined( 'SUBSCRIBE_BLOG_URL' ) ? SUBSCRIBE_BLOG_URL : '';
- ?>
- <form action="<?php echo $url; ?>" method="post" accept-charset="utf-8"
- id="subscribe-blog<?php if ( Jetpack_Subscriptions_Widget::$instance_count > 1 ) {
- echo '-' . Jetpack_Subscriptions_Widget::$instance_count;
- } ?>">
- <?php if ( is_user_logged_in() ) : ?>
- <?php
- if ( ! $show_only_email_and_button ) {
- echo wpautop( $subscribe_logged_in );
- }
- if ( $show_subscribers_total && $subscribers_total ) {
- /* translators: %s: number of folks following the blog */
- echo wpautop( sprintf( _n( 'Join %s other follower', 'Join %s other followers', $subscribers_total ), number_format_i18n( $subscribers_total ) ) );
- }
- ?>
- <?php else : ?>
- <?php
- if ( ! $show_only_email_and_button ) {
- echo wpautop( $subscribe_text );
- }
- if ( $show_subscribers_total && $subscribers_total ) {
- /* translators: %s: number of folks following the blog */
- echo wpautop( sprintf( _n( 'Join %s other follower', 'Join %s other followers', $subscribers_total ), number_format_i18n( $subscribers_total ) ) );
- }
- ?>
- <p><input type="text" name="email" style="width: 95%; padding: 1px 2px"
- placeholder="<?php esc_attr_e( 'Enter your email address' ); ?>" value=""
- id="subscribe-field<?php if ( Jetpack_Subscriptions_Widget::$instance_count > 1 ) {
- echo '-' . Jetpack_Subscriptions_Widget::$instance_count;
- } ?>"/></p>
- <?php endif; ?>
-
- <p>
- <input type="hidden" name="action" value="subscribe"/>
- <input type="hidden" name="blog_id" value="<?php echo (int) $current_blog->blog_id; ?>"/>
- <input type="hidden" name="source" value="<?php echo esc_url( $referer ); ?>"/>
- <input type="hidden" name="sub-type" value="<?php echo esc_attr( $source ); ?>"/>
- <input type="hidden" name="redirect_fragment" value="<?php echo esc_attr( $widget_id ); ?>"/>
- <?php wp_nonce_field( 'blogsub_subscribe_' . $current_blog->blog_id, '_wpnonce', false ); ?>
- <button type="submit"
- <?php if ( ! empty( $submit_button_classes ) ) { ?>
- class="<?php echo esc_attr( $submit_button_classes ); ?>"
- <?php }; ?>
- <?php if ( ! empty( $submit_button_styles ) ) { ?>
- style="<?php echo esc_attr( $submit_button_styles ); ?>"
- <?php }; ?>
- >
- <?php
- echo wp_kses(
- $subscribe_button,
- self::$allowed_html_tags_for_submit_button
- );
- ?>
- </button>
- </p>
- </form>
- <?php
- }
-
- if ( self::is_jetpack() ) {
- /**
- * Filter the subscription form's ID prefix.
- *
- * @module subscriptions
- *
- * @since 2.7.0
- *
- * @param string subscribe-field Subscription form field prefix.
- * @param int $widget_id Widget ID.
- */
- $subscribe_field_id = apply_filters( 'subscribe_field_id', 'subscribe-field', $widget_id );
- ?>
- <form action="#" method="post" accept-charset="utf-8" id="subscribe-blog-<?php echo $widget_id; ?>">
- <?php
- if ( $subscribe_text && ( ! isset ( $_GET['subscribe'] ) || 'success' != $_GET['subscribe'] ) ) {
- ?>
- <div id="subscribe-text"><?php echo wpautop( str_replace( '[total-subscribers]', number_format_i18n( $subscribers_total['value'] ), $subscribe_text ) ); ?></div><?php
- }
-
- if ( $show_subscribers_total && 0 < $subscribers_total['value'] ) {
- /* translators: %s: number of folks following the blog */
- echo wpautop( sprintf( _n( 'Join %s other subscriber', 'Join %s other subscribers', $subscribers_total['value'], 'jetpack' ), number_format_i18n( $subscribers_total['value'] ) ) );
- }
- if ( ! isset ( $_GET['subscribe'] ) || 'success' != $_GET['subscribe'] ) { ?>
- <p id="subscribe-email">
- <label id="jetpack-subscribe-label"
- class="screen-reader-text"
- for="<?php echo esc_attr( $subscribe_field_id ) . '-' . esc_attr( $widget_id ); ?>">
- <?php echo ! empty( $subscribe_placeholder ) ? esc_html( $subscribe_placeholder ) : esc_html__( 'Email Address:', 'jetpack' ); ?>
- </label>
- <input type="email" name="email" required="required" class="required"
- value="<?php echo esc_attr( $subscribe_email ); ?>"
- id="<?php echo esc_attr( $subscribe_field_id ) . '-' . esc_attr( $widget_id ); ?>"
- placeholder="<?php echo esc_attr( $subscribe_placeholder ); ?>"/>
- </p>
-
- <p id="subscribe-submit">
- <input type="hidden" name="action" value="subscribe"/>
- <input type="hidden" name="source" value="<?php echo esc_url( $referer ); ?>"/>
- <input type="hidden" name="sub-type" value="<?php echo esc_attr( $source ); ?>"/>
- <input type="hidden" name="redirect_fragment" value="<?php echo $widget_id; ?>"/>
- <?php
- if ( is_user_logged_in() ) {
- wp_nonce_field( 'blogsub_subscribe_' . get_current_blog_id(), '_wpnonce', false );
- }
- ?>
- <button type="submit"
- <?php if ( ! empty( $submit_button_classes ) ) { ?>
- class="<?php echo esc_attr( $submit_button_classes ); ?>"
- <?php }; ?>
- <?php if ( ! empty( $submit_button_styles ) ) { ?>
- style="<?php echo esc_attr( $submit_button_styles ); ?>"
- <?php }; ?>
- name="jetpack_subscriptions_widget"
- >
- <?php
- echo wp_kses(
- $subscribe_button,
- self::$allowed_html_tags_for_submit_button
- ); ?>
- </button>
- </p>
- <?php } ?>
- </form>
- <?php }
- }
-
- /**
- * Determines if the current user is subscribed to the blog.
- *
- * @return bool Is the person already subscribed.
- */
- static function is_current_user_subscribed() {
- $subscribed = isset( $_GET['subscribe'] ) && 'success' == $_GET['subscribe'];
-
- if ( self::is_wpcom() && class_exists( 'Blog_Subscription' ) && class_exists( 'Blog_Subscriber' ) ) {
- $subscribed = is_user_logged_in() && Blog_Subscription::is_subscribed( new Blog_Subscriber() );
- }
-
- return $subscribed;
- }
-
- /**
- * Is this script running in the wordpress.com environment?
- *
- * @return bool
- */
- static function is_wpcom() {
- return defined( 'IS_WPCOM' ) && IS_WPCOM;
- }
-
- /**
- * Is this script running in a self-hosted environment?
- *
- * @return bool
- */
- static function is_jetpack() {
- return ! self::is_wpcom();
- }
-
- /**
- * Used to determine if there is a valid status slug within the wordpress.com environment.
- *
- * @return bool
- */
- static function wpcom_has_status_message() {
- return isset( $_GET['blogsub'] ) &&
- in_array(
- $_GET['blogsub'],
- array(
- 'confirming',
- 'blocked',
- 'flooded',
- 'spammed',
- 'subscribed',
- 'pending',
- 'confirmed',
- )
- );
- }
-
- /**
- * Determine the amount of folks currently subscribed to the blog.
- *
- * @return int|array
- */
- static function fetch_subscriber_count() {
- $subs_count = 0;
-
- if ( self::is_jetpack() ) {
- $subs_count = get_transient( 'wpcom_subscribers_total' );
- if ( false === $subs_count || 'failed' == $subs_count['status'] ) {
- Jetpack::load_xml_rpc_client();
-
- $xml = new Jetpack_IXR_Client( array( 'user_id' => JETPACK_MASTER_USER, ) );
-
- $xml->query( 'jetpack.fetchSubscriberCount' );
-
- if ( $xml->isError() ) { // if we get an error from .com, set the status to failed so that we will try again next time the data is requested
- $subs_count = array(
- 'status' => 'failed',
- 'code' => $xml->getErrorCode(),
- 'message' => $xml->getErrorMessage(),
- 'value' => ( isset( $subs_count['value'] ) ) ? $subs_count['value'] : 0,
- );
- } else {
- $subs_count = array(
- 'status' => 'success',
- 'value' => $xml->getResponse(),
- );
- }
-
- set_transient( 'wpcom_subscribers_total', $subs_count, 3600 ); // try to cache the result for at least 1 hour
- }
- }
-
- if ( self::is_wpcom() && function_exists( 'wpcom_reach_total_for_blog' ) ) {
- $subs_count = wpcom_reach_total_for_blog();
- }
-
- return $subs_count;
- }
-
- /**
- * Updates a particular instance of a widget when someone saves it in wp-admin.
- *
- * @param array $new_instance
- * @param array $old_instance
- *
- * @return array
- */
- function update( $new_instance, $old_instance ) {
- $instance = $old_instance;
-
- if ( self::is_jetpack() ) {
- $instance['title'] = wp_kses( stripslashes( $new_instance['title'] ), array() );
- $instance['subscribe_placeholder'] = wp_kses( stripslashes( $new_instance['subscribe_placeholder'] ), array() );
- $instance['subscribe_button'] = wp_kses( stripslashes( $new_instance['subscribe_button'] ), array() );
- $instance['success_message'] = wp_kses( stripslashes( $new_instance['success_message'] ), array() );
- }
-
- if ( self::is_wpcom() ) {
- $instance['title'] = strip_tags( stripslashes( $new_instance['title'] ) );
- $instance['title_following'] = strip_tags( stripslashes( $new_instance['title_following'] ) );
- $instance['subscribe_logged_in'] = wp_filter_post_kses( stripslashes( $new_instance['subscribe_logged_in'] ) );
- $instance['subscribe_button'] = strip_tags( stripslashes( $new_instance['subscribe_button'] ) );
- }
-
- $instance['show_subscribers_total'] = isset( $new_instance['show_subscribers_total'] ) && $new_instance['show_subscribers_total'];
- $instance['show_only_email_and_button'] = isset( $new_instance['show_only_email_and_button'] ) && $new_instance['show_only_email_and_button'];
- $instance['subscribe_text'] = wp_filter_post_kses( stripslashes( $new_instance['subscribe_text'] ) );
-
- return $instance;
- }
-
- /**
- * The default args for rendering a subscription form.
- *
- * @return array
- */
- static function defaults() {
- $defaults = array(
- 'show_subscribers_total' => true,
- 'show_only_email_and_button' => false
- );
-
- if ( self::is_jetpack() ) {
- $defaults['title'] = esc_html__( 'Subscribe to Blog via Email', 'jetpack' );
- $defaults['subscribe_text'] = esc_html__( 'Enter your email address to subscribe to this blog and receive notifications of new posts by email.', 'jetpack' );
- $defaults['subscribe_placeholder'] = esc_html__( 'Email Address', 'jetpack' );
- $defaults['subscribe_button'] = esc_html__( 'Subscribe', 'jetpack' );
- $defaults['success_message'] = esc_html__( "Success! An email was just sent to confirm your subscription. Please find the email now and click 'Confirm Follow' to start subscribing.", 'jetpack' );
- }
-
- if ( self::is_wpcom() ) {
- $defaults['title'] = __( 'Follow Blog via Email' );
- $defaults['title_following'] = __( 'You are following this blog' );
- $defaults['subscribe_text'] = __( 'Enter your email address to follow this blog and receive notifications of new posts by email.' );
- $defaults['subscribe_button'] = __( 'Follow' );
- $defaults['subscribe_logged_in'] = __( 'Click to follow this blog and receive notifications of new posts by email.' );
- }
-
- return $defaults;
- }
-
- /**
- * Renders the widget's options form in wp-admin.
- *
- * @param array $instance
- */
- function form( $instance ) {
- $instance = wp_parse_args( (array) $instance, $this->defaults() );
- $show_subscribers_total = checked( $instance['show_subscribers_total'], true, false );
-
-
- if ( self::is_wpcom() ) {
- $title = esc_attr( stripslashes( $instance['title'] ) );
- $title_following = esc_attr( stripslashes( $instance['title_following'] ) );
- $subscribe_text = esc_attr( stripslashes( $instance['subscribe_text'] ) );
- $subscribe_logged_in = esc_attr( stripslashes( $instance['subscribe_logged_in'] ) );
- $subscribe_button = esc_attr( stripslashes( $instance['subscribe_button'] ) );
- $subscribers_total = self::fetch_subscriber_count();
- }
-
- if ( self::is_jetpack() ) {
- $title = stripslashes( $instance['title'] );
- $subscribe_text = stripslashes( $instance['subscribe_text'] );
- $subscribe_placeholder = stripslashes( $instance['subscribe_placeholder'] );
- $subscribe_button = stripslashes( $instance['subscribe_button'] );
- $success_message = stripslashes( $instance['success_message'] );
- $subs_fetch = self::fetch_subscriber_count();
- if ( 'failed' == $subs_fetch['status'] ) {
- printf( '<div class="error inline"><p>%s: %s</p></div>', esc_html( $subs_fetch['code'] ), esc_html( $subs_fetch['message'] ) );
- }
- $subscribers_total = number_format_i18n( $subs_fetch['value'] );
- }
-
- if ( self::is_wpcom() ) : ?>
- <p>
- <label for="<?php echo $this->get_field_id( 'title' ); ?>">
- <?php _e( 'Widget title for non-followers:' ); ?>
- <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>"
- name="<?php echo $this->get_field_name( 'title' ); ?>" type="text"
- value="<?php echo $title; ?>"/>
- </label>
- </p>
- <p>
- <label for="<?php echo $this->get_field_id( 'title_following' ); ?>">
- <?php _e( 'Widget title for followers:' ); ?>
- <input class="widefat" id="<?php echo $this->get_field_id( 'title_following' ); ?>"
- name="<?php echo $this->get_field_name( 'title_following' ); ?>" type="text"
- value="<?php echo $title_following; ?>"/>
- </label>
- </p>
- <p>
- <label for="<?php echo $this->get_field_id( 'subscribe_logged_in' ); ?>">
- <?php _e( 'Optional text to display to logged in WordPress.com users:' ); ?>
- <textarea style="width: 95%" id="<?php echo $this->get_field_id( 'subscribe_logged_in' ); ?>"
- name="<?php echo $this->get_field_name( 'subscribe_logged_in' ); ?>"
- type="text"><?php echo $subscribe_logged_in; ?></textarea>
- </label>
- </p>
- <p>
- <label for="<?php echo $this->get_field_id( 'subscribe_text' ); ?>">
- <?php _e( 'Optional text to display to non-WordPress.com users:' ); ?>
- <textarea style="width: 95%" id="<?php echo $this->get_field_id( 'subscribe_text' ); ?>"
- name="<?php echo $this->get_field_name( 'subscribe_text' ); ?>"
- type="text"><?php echo $subscribe_text; ?></textarea>
- </label>
- </p>
- <p>
- <label for="<?php echo $this->get_field_id( 'subscribe_button' ); ?>">
- <?php _e( 'Follow Button Text:' ); ?>
- <input class="widefat" id="<?php echo $this->get_field_id( 'subscribe_button' ); ?>"
- name="<?php echo $this->get_field_name( 'subscribe_button' ); ?>" type="text"
- value="<?php echo $subscribe_button; ?>"/>
- </label>
- </p>
- <p>
- <label for="<?php echo $this->get_field_id( 'show_subscribers_total' ); ?>">
- <input type="checkbox" id="<?php echo $this->get_field_id( 'show_subscribers_total' ); ?>"
- name="<?php echo $this->get_field_name( 'show_subscribers_total' ); ?>"
- value="1"<?php echo $show_subscribers_total; ?> />
- <?php echo esc_html( sprintf( _n( 'Show total number of followers? (%s follower)', 'Show total number of followers? (%s followers)', $subscribers_total ), number_format_i18n( $subscribers_total ) ) ); ?>
- </label>
- </p>
- <?php endif;
-
- if ( self::is_jetpack() ) : ?>
- <p>
- <label for="<?php echo $this->get_field_id( 'title' ); ?>">
- <?php _e( 'Widget title:', 'jetpack' ); ?>
- <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>"
- name="<?php echo $this->get_field_name( 'title' ); ?>" type="text"
- value="<?php echo esc_attr( $title ); ?>"/>
- </label>
- </p>
- <p>
- <label for="<?php echo $this->get_field_id( 'subscribe_text' ); ?>">
- <?php _e( 'Optional text to display to your readers:', 'jetpack' ); ?>
- <textarea class="widefat" id="<?php echo $this->get_field_id( 'subscribe_text' ); ?>"
- name="<?php echo $this->get_field_name( 'subscribe_text' ); ?>"
- rows="3"><?php echo esc_html( $subscribe_text ); ?></textarea>
- </label>
- </p>
- <p>
- <label for="<?php echo $this->get_field_id( 'subscribe_placeholder' ); ?>">
- <?php esc_html_e( 'Subscribe Placeholder:', 'jetpack' ); ?>
- <input class="widefat" id="<?php echo $this->get_field_id( 'subscribe_placeholder' ); ?>"
- name="<?php echo $this->get_field_name( 'subscribe_placeholder' ); ?>" type="text"
- value="<?php echo esc_attr( $subscribe_placeholder ); ?>"/>
- </label>
- </p>
- <p>
- <label for="<?php echo $this->get_field_id( 'subscribe_button' ); ?>">
- <?php _e( 'Subscribe Button:', 'jetpack' ); ?>
- <input class="widefat" id="<?php echo $this->get_field_id( 'subscribe_button' ); ?>"
- name="<?php echo $this->get_field_name( 'subscribe_button' ); ?>" type="text"
- value="<?php echo esc_attr( $subscribe_button ); ?>"/>
- </label>
- </p>
- <p>
- <label for="<?php echo $this->get_field_id( 'success_message' ); ?>">
- <?php _e( 'Success Message Text:', 'jetpack' ); ?>
- <textarea class="widefat" id="<?php echo $this->get_field_id( 'success_message' ); ?>"
- name="<?php echo $this->get_field_name( 'success_message' ); ?>"
- rows="5"><?php echo esc_html( $success_message ); ?></textarea>
- </label>
- </p>
- <p>
- <label for="<?php echo $this->get_field_id( 'show_subscribers_total' ); ?>">
- <input type="checkbox" id="<?php echo $this->get_field_id( 'show_subscribers_total' ); ?>"
- name="<?php echo $this->get_field_name( 'show_subscribers_total' ); ?>"
- value="1"<?php echo $show_subscribers_total; ?> />
- <?php echo esc_html( sprintf( _n( 'Show total number of subscribers? (%s subscriber)', 'Show total number of subscribers? (%s subscribers)', $subscribers_total, 'jetpack' ), $subscribers_total ) ); ?>
- </label>
- </p>
- <?php endif;
- }
-}
-
-if ( defined( 'IS_WPCOM' ) && IS_WPCOM && function_exists( 'class_alias' ) ) {
- class_alias( 'Jetpack_Subscriptions_Widget', 'Blog_Subscription_Widget' );
-}
-
-function get_jetpack_blog_subscriptions_widget_classname() {
- return ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ?
- 'Blog_Subscription_Widget' :
- 'Jetpack_Subscriptions_Widget';
-}
-
-function jetpack_do_subscription_form( $instance ) {
- if ( empty( $instance ) || ! is_array( $instance ) ) {
- $instance = array();
- }
-
- if ( empty( $instance['show_subscribers_total'] ) || 'false' === $instance['show_subscribers_total'] ) {
- $instance['show_subscribers_total'] = false;
- } else {
- $instance['show_subscribers_total'] = true;
- }
-
- $show_only_email_and_button = isset( $instance['show_only_email_and_button'] ) ? $instance['show_only_email_and_button'] : false;
- $submit_button_text = isset( $instance['submit_button_text'] ) ? $instance['submit_button_text'] : '';
-
-
-
- // Build up a string with the submit button's classes and styles and set it on the instance
- $submit_button_classes = isset( $instance['submit_button_classes'] ) ? $instance['submit_button_classes'] : '';
- $submit_button_styles = '';
- if ( isset( $instance['custom_background_button_color'] ) ) {
- $submit_button_styles .= 'background-color: ' . $instance['custom_background_button_color'] . '; ';
- }
- if ( isset( $instance['custom_text_button_color'] ) ) {
- $submit_button_styles .= 'color: ' . $instance['custom_text_button_color'] . ';';
- }
-
- $instance = shortcode_atts(
- Jetpack_Subscriptions_Widget::defaults(),
- $instance,
- 'jetpack_subscription_form'
- );
-
- // These must come after the call to shortcode_atts()
- $instance['submit_button_text'] = $submit_button_text;
- $instance['show_only_email_and_button'] = $show_only_email_and_button;
- if ( ! empty( $submit_button_classes ) ) {
- $instance['submit_button_classes'] = $submit_button_classes;
- }
- if ( ! empty ( $submit_button_styles ) ) {
- $instance['submit_button_styles'] = $submit_button_styles;
- }
-
- $args = array(
- 'before_widget' => '<div class="jetpack_subscription_widget">',
- );
- ob_start();
- the_widget( get_jetpack_blog_subscriptions_widget_classname(), $instance, $args );
- $output = ob_get_clean();
-
- return $output;
-}
-
-add_shortcode( 'jetpack_subscription_form', 'jetpack_do_subscription_form' );
-add_shortcode( 'blog_subscription_form', 'jetpack_do_subscription_form' );
-
-function jetpack_blog_subscriptions_init() {
- register_widget( get_jetpack_blog_subscriptions_widget_classname() );
-}
-
-add_action( 'widgets_init', 'jetpack_blog_subscriptions_init' );
-
-function jetpack_register_subscriptions_block() {
- if ( class_exists( 'WP_Block_Type_Registry' ) && ! WP_Block_Type_Registry::get_instance()->is_registered( 'jetpack/subscriptions' ) ) {
- jetpack_register_block( 'jetpack/subscriptions' );
- }
-}
-
-add_action( 'init', 'jetpack_register_subscriptions_block' );
diff --git a/plugins/jetpack/modules/theme-tools.php b/plugins/jetpack/modules/theme-tools.php
deleted file mode 100644
index afb8b000..00000000
--- a/plugins/jetpack/modules/theme-tools.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-/*
- * Load code specific to themes or theme tools
- * This file is special, and is not an actual `module` as such.
- * It is included by ./module-extras.php
- */
-
-function jetpack_load_theme_tools() {
- if ( current_theme_supports( 'tonesque' ) ) {
- jetpack_require_lib( 'tonesque' );
- }
-}
-add_action( 'init', 'jetpack_load_theme_tools', 30 );
-
-/**
- * Load theme compat file if it exists.
- */
-function jetpack_load_theme_compat() {
-
- /**
- * Filter theme compat files.
- *
- * Themes can add their own compat files here if they like. For example:
- *
- * add_filter( 'jetpack_theme_compat_files', 'mytheme_jetpack_compat_file' );
- * function mytheme_jetpack_compat_file( $files ) {
- * $files['mytheme'] = locate_template( 'jetpack-compat.php' );
- * return $files;
- * }
- *
- * @module theme-tools
- *
- * @since 2.8.0
- *
- * @param array Associative array of theme compat files to load.
- */
- $compat_files = apply_filters( 'jetpack_theme_compat_files', array(
- 'twentyfourteen' => JETPACK__PLUGIN_DIR . 'modules/theme-tools/compat/twentyfourteen.php',
- 'twentyfifteen' => JETPACK__PLUGIN_DIR . 'modules/theme-tools/compat/twentyfifteen.php',
- 'twentysixteen' => JETPACK__PLUGIN_DIR . 'modules/theme-tools/compat/twentysixteen.php',
- 'twentyseventeen' => JETPACK__PLUGIN_DIR . 'modules/theme-tools/compat/twentyseventeen.php',
- 'twentynineteen' => JETPACK__PLUGIN_DIR . 'modules/theme-tools/compat/twentynineteen.php',
- ) );
-
- _jetpack_require_compat_file( get_stylesheet(), $compat_files );
-
- if ( is_child_theme() ) {
- _jetpack_require_compat_file( get_template(), $compat_files );
- }
-}
-add_action( 'after_setup_theme', 'jetpack_load_theme_compat', -1 );
-
-
-/**
- * Requires a file once, if the passed key exists in the files array.
- *
- * @access private
- * @param string $key
- * @param array $files
- * @return void
- */
-function _jetpack_require_compat_file( $key, $files ) {
- if ( ! is_string( $key ) ) {
- return new WP_Error( 'key_not_string', 'The specified key is not actually a string.', compact( 'key' ) );
- }
-
- if ( array_key_exists( $key, $files ) && is_readable( $files[ $key ] ) ) {
- require_once $files[ $key ];
- }
-}
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentyfifteen-rtl.css b/plugins/jetpack/modules/theme-tools/compat/twentyfifteen-rtl.css
deleted file mode 100644
index 7557cfd5..00000000
--- a/plugins/jetpack/modules/theme-tools/compat/twentyfifteen-rtl.css
+++ /dev/null
@@ -1,744 +0,0 @@
-/**
- * Jetpack Portfolio Shortcode
- */
-
-.site .portfolio-entry {
- margin-bottom: 1.6em;
-}
-
-.site .portfolio-entry-title,
-.site .portfolio-entry-meta,
-.site .portfolio-entry-content {
- font-size: 1.2rem;
- font-size: 12px;
- line-height: 1.5;
-}
-
-.site .portfolio-featured-image + .portfolio-entry-title {
- margin-top: 0.75em;
- margin-bottom: 0.75em;
-}
-
-.site .portfolio-entry-meta {
- font-family: "Noto Sans", sans-serif;
-}
-
-.site .portfolio-entry-content .more-link:after {
- font-size: 16px;
- top: 1px;
-}
-
-/**
- * Jetpack Widgets
- */
-
-/* Blog Subscriptions Widget */
-.jetpack_subscription_widget #subscribe-email input {
- padding: 0.375em;
- width: 100%;
-}
-
-.jetpack_subscription_widget form > :last-child {
- margin-bottom: 0;
-}
-
-/* Display WordPress Posts Widget */
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts {
- margin: 0;
-}
-
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4 {
- font-size: inherit;
- margin: 0 0 1.6em;
-}
-
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts img {
- margin: 0 0 1.6em;
-}
-
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
- font-size: inherit;
- line-height: 1.6 !important;
- margin: 0 0 1.6em !important;
-}
-
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts > :last-child {
- margin-bottom: 0 !important;
-}
-
-/* Gallery Widget */
-.widget-gallery .slideshow-window {
- border-radius: 0;
-}
-
-/* Gravatar Profile Widget */
-.widget-area .widget-grofile .grofile-thumbnail {
- border-radius: 50%;
- max-width: 200px;
-}
-
-.widget-area .widget-grofile h4 {
- margin: 1.6em 0 0;
-}
-
-.widget-area .widget-grofile .grofile-accounts {
- margin-top: 0.8em;
-}
-
-/* Image Widget */
-.widget_image .wp-caption {
- margin-bottom: 0;
-}
-
-.widget_image .wp-caption-text {
- padding-bottom: 0;
-}
-
-/* RSS Links Widget */
-.widget_rss_links img {
- position: relative;
- top: -2px;
-}
-
-
-/* List type widgets */
-.widget_rss_links ul,
-.widget_top-posts ul ,
-.widget_upcoming_events_widget ul {
- list-style: none;
- margin: 0;
-}
-
-.widget_rss_links li,
-.widget_top-posts li,
-.widget_upcoming_events_widget li {
- border-top: 1px solid #eaeaea;
- border-top: 1px solid rgba(51, 51, 51, 0.1);
- padding: 0.7667em 0;
-}
-
-.widget_rss_links li:first-child,
-.widget_top-posts li:first-child,
-.widget_upcoming_events_widget li:first-child {
- border-top: 0;
- padding-top: 0;
-}
-
-.widget_rss_links li:last-child,
-.widget_top-posts li:last-child,
-.widget_upcoming_events_widget li:last-child {
- padding-bottom: 0;
-}
-
-
-/**
- * Shortcodes Embeds
- */
-
-/* Facebook */
-.fb_iframe_widget {
- margin-bottom: 1.6em;
- max-width: 100%;
-}
-
-.fb_iframe_widget span {
- max-width: 100%;
-}
-
-/* Gist */
-.gist table {
- table-layout: auto;
-}
-
-.site .gist .gist-file {
- margin-bottom: 1.5em;
-}
-
-/* Googlemaps */
-.googlemaps {
- margin-bottom: 1.6em;
-}
-
-.googlemaps iframe {
- margin-bottom: 0;
-}
-
-/* Crowdsignal */
-.PDS_Poll,
-.CSS_Poll {
- display: block !important;
- margin-bottom: 1.6em;
-}
-
-.PDS_Poll .pds-box,
-.CSS_Poll .css-box {
- max-width: 100%;
- width: auto;
-}
-
-/* Presentation */
-.site .presentation-wrapper {
- margin: 0 auto 1.6em;
-}
-
-/* Recipes */
-.site .jetpack-recipe {
- border: 0;
- margin: 0 0 1.6em;
- padding: 0;
-}
-
-.site .jetpack-recipe-title {
- border: 0;
- margin-top: 0;
- padding: 0;
-}
-
-.site .jetpack-recipe .jetpack-recipe-meta {
- font-size: inherit;
- margin: 0;
-}
-
-/* Slideshow */
-.site .slideshow-window {
- border-radius: 0;
- margin-bottom: 1.6em;
-}
-
-/* Twitter-timeline */
-iframe[id*="twitter-widget-"] {
- display: block;
-}
-
-/* Vine */
-.vine-embed {
- display: block;
-}
-
-/* VideoPress */
-.site .video-player {
- margin-bottom: 1.6em;
- padding: 0;
-}
-
-.video-player object {
- margin-bottom: 0;
-}
-
-
-/**
- * Tiled gallery
- */
-
-.site .tiled-gallery {
- margin-bottom: 1.6em;
-}
-
-
-/**
- * Jetpack Comments
- */
-
-.comment-form iframe {
- margin: 0;
-}
-
-.comment-form .subscribe-label {
- font-weight: 400;
- text-transform: none;
-}
-
-.comment-subscription-form {
- font-size: 12px;
- font-size: 1.2rem;
- line-height: 1.5em;
- margin: 2em 0 0;
-}
-
-.comment-subscription-form + .comment-subscription-form {
- margin-top: 1em;
-}
-
-
-/**
- * Sharing
- */
-
-.hentry div.sharedaddy h3.sd-title,
-.hentry h3.sd-title {
- font-family: "Noto Sans", sans-serif;
- font-size: 12px;
- font-size: 1.2rem;
- line-height: 1;
- margin: 0 0 1em 0;
- opacity: 0.7;
- text-transform: uppercase;
-}
-
-
-/**
- * Related Posts
- */
-
-.hentry #jp-relatedposts {
- margin: 0;
- padding-top: 0;
-}
-
-.hentry .jp-relatedposts-post-title a {
- border-bottom: 0;
-}
-
-.hentry .jp-relatedposts-headline em:before {
- opacity: 0.7;
-}
-
-.hentry div#jp-relatedposts h3.jp-relatedposts-headline {
- font-family: "Noto Sans", sans-serif;
- font-size: 12px;
- font-size: 1.2rem;
- opacity: 0.7;
- text-transform: uppercase;
-}
-
-.hentry div#jp-relatedposts div.jp-relatedposts-items-visual {
- margin-left: 0;
-}
-
-.hentry div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post {
- margin-bottom: 1.6em;
- opacity: 1;
-}
-
-.hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
-.hentry div#jp-relatedposts div.jp-relatedposts-items p {
- font-size: 1.2rem;
- font-size: 12px;
- line-height: 1.5;
-}
-
-.hentry .jp-relatedposts-post-title {
- font-weight: 700;
-}
-
-.hentry div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a {
- font-weight: inherit;
-}
-
-.hentry div#jp-relatedposts div.jp-relatedposts-items div.jp-relatedposts-post:hover .jp-relatedposts-post-title a,
-.hentry div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a {
- text-decoration: none;
-}
-
-.hentry div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-context,
-.hentry div#jp-relatedposts div.jp-relatedposts-items-visual div.jp-relatedposts-post-nothumbs p.jp-relatedposts-post-excerpt {
- opacity: 0.7;
-}
-
-.hentry .jp-relatedposts-post-img {
- margin-bottom: 0.6em;
-}
-
-
-/**
- * Stats
- */
-
-#wpstats {
- display: none;
-}
-
-
-/**
- * Media Queries
- */
-
-@media screen and (min-width: 46.25em) {
- .site .portfolio-entry {
- margin-bottom: 1.6471em;
- }
-
- .site .portfolio-entry-title,
- .site .portfolio-entry-meta,
- .site .portfolio-entry-content {
- font-size: 1.4rem;
- font-size: 14px;
- }
-
- .site .portfolio-entry-content .more-link:after {
- top: 3px;
- }
-
- .site .hentry .gist .gist-file {
- margin-bottom: 1.75em;
- }
-
- .site .widget .gist .gist-file {
- margin-bottom: 1.3125em;
- }
-
- .hentry .fb_iframe_widget,
- .hentry .googlemaps,
- .hentry .PDS_Poll,
- .hentry .CSS_Poll,
- .site .hentry .presentation-wrapper,
- .site .hentry .jetpack-recipe,
- .site .hentry .slideshow-window,
- .site .hentry .video-player {
- margin-bottom: 1.6471em;
- }
-
- .widget .fb_iframe_widget,
- .widget .googlemaps,
- .widget .PDS_Poll,
- .widget .CSS_Poll,
- .site .widget .presentation-wrapper,
- .site .widget .jetpack-recipe,
- .site .widget .slideshow-window,
- .site .widget .video-player {
- margin-bottom: 1.5em;
- }
-
- .widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4,
- .widget_jetpack_display_posts_widget .jetpack-display-remote-posts img {
- margin: 0 0 1.5em;
- }
-
- .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
- line-height: 1.5 !important;
- margin: 0 0 1.5em !important;
- }
-
- .widget-area .widget-grofile h4 {
- margin: 1.5em 0 0;
- }
-
- .widget-area .widget-grofile .grofile-accounts {
- margin-top: 0.75em;
- }
-
- .jetpack_subscription_widget #subscribe-email input {
- padding: 0.5625em;
- }
-
- .widget_rss_links li,
- .widget_top-posts li,
- .widget_upcoming_events_widget li {
- padding: 0.9643em 0;
- }
-
- .site .tiled-gallery {
- margin-bottom: 1.6471em;
- }
-
- .jetpack-video-wrapper {
- margin-bottom: 1.6471em;
- }
-
- .comment-subscription-form {
- font-size: 14px;
- font-size: 1.4rem;
- }
-
- .hentry div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post {
- margin-bottom: 0;
- }
-
- .hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
- .hentry div#jp-relatedposts div.jp-relatedposts-items p {
- font-size: 1.4rem;
- font-size: 14px;
- }
-
- .jp-relatedposts-post-img {
- margin-bottom: 0.6176em;
- }
-}
-
-@media screen and (min-width: 55em) {
- .site .portfolio-entry {
- margin-bottom: 1.6842em
- }
-
- .site .portfolio-entry-title,
- .site .portfolio-entry-meta,
- .site .portfolio-entry-content {
- font-size: 1.6rem;
- font-size: 16px;
- }
-
- .site .portfolio-entry-content .more-link:after {
- font-size: 24px;
- top: 0;
- }
-
- .site .hentry .gist .gist-file {
- margin-bottom: 2em;
- }
-
- .site .widget .gist .gist-file {
- margin-bottom: 1.5em;
- }
-
- .hentry .fb_iframe_widget,
- .hentry .googlemaps,
- .hentry .PDS_Poll,
- .hentry .CSS_Poll,
- .site .hentry .presentation-wrapper,
- .site .hentry .jetpack-recipe,
- .site .hentry .slideshow-window,
- .site .hentry .video-player {
- margin-bottom: 1.6842em;
- }
-
- .site .tiled-gallery {
- margin-bottom: 1.6842em;
- }
-
- .jetpack_subscription_widget #subscribe-email input {
- padding: 0.75em;
- }
-
- .widget_rss_links li,
- .widget_top-posts li,
- .widget_upcoming_events_widget li {
- padding: 0.7188em 0;
- }
-
- .jetpack-video-wrapper {
- margin-bottom: 1.6842em;
- }
-
- .comment-subscription-form {
- font-size: 16px;
- font-size: 1.6rem;
- }
-
- .hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
- .hentry div#jp-relatedposts div.jp-relatedposts-items p {
- font-size: 1.6rem;
- font-size: 16px;
- line-height: 1.5em;
- }
-
- .jp-relatedposts-post-img {
- margin-bottom: 0.6315em;
- }
-}
-
-@media screen and (min-width: 59.6875em) {
- .site .portfolio-entry {
- margin-bottom: 1.6em
- }
-
- .site .portfolio-entry-title,
- .site .portfolio-entry-meta,
- .site .portfolio-entry-content {
- font-size: 1.2rem;
- font-size: 12px;
- }
-
- .site .portfolio-entry-content .more-link:after {
- font-size: 16px;
- top: 1px;
- }
-
- .site .hentry .gist .gist-file {
- margin-bottom: 1.5em;
- }
-
- .site .widget .gist .gist-file {
- margin-bottom: 1.125em;
- }
-
- .hentry .fb_iframe_widget,
- .hentry .googlemaps,
- .hentry .PDS_Poll,
- .hentry .CSS_Poll,
- .site .hentry .presentation-wrapper,
- .site .hentry .jetpack-recipe,
- .site .hentry .slideshow-window,
- .site .hentry .video-player {
- margin-bottom: 1.6em;
- }
-
- .site .tiled-gallery {
- margin-bottom: 1.6em;
- }
-
- .jetpack_subscription_widget #subscribe-email input {
- padding: 0.4583em;
- }
-
- .jetpack-video-wrapper {
- margin-bottom: 1.6em;
- }
-
- .widget-area .widget-grofile .grofile-thumbnail {
- max-width: 100%;
- }
-
- .widget_rss_links li,
- .widget_top-posts li,
- .widget_upcoming_events_widget li {
- padding: 0.4583em 0;
- }
-
- .comment-subscription-form {
- font-size: 12px;
- font-size: 1.2rem;
- }
-
- .hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
- .hentry div#jp-relatedposts div.jp-relatedposts-items p {
- font-size: 1.2rem;
- font-size: 12px;
- line-height: 1.5;
- }
-
- .jp-relatedposts-post-img {
- margin-bottom: 0.6em;
- }
-}
-
-@media screen and (min-width: 68.75em) {
- .site .portfolio-entry {
- margin-bottom: 1.6471em
- }
-
- .site .portfolio-entry-title,
- .site .portfolio-entry-meta,
- .site .portfolio-entry-content {
- font-size: 1.4rem;
- font-size: 14px;
- }
-
- .site .portfolio-entry-content .more-link:after {
- top: 3px;
- }
-
- .site .hentry .gist .gist-file {
- margin-bottom: 1.75em;
- }
-
- .site .widget .gist .gist-file {
- margin-bottom: 1.3125em;
- }
-
- .hentry .fb_iframe_widget,
- .hentry .googlemaps,
- .hentry .PDS_Poll,
- .hentry .CSS_Poll,
- .site .hentry .presentation-wrapper,
- .site .hentry .jetpack-recipe,
- .site .hentry .slideshow-window,
- .site .hentry .video-player {
- margin-bottom: 1.6471em;
- }
-
- .site .tiled-gallery {
- margin-bottom: 1.6471em;
- }
-
- .jetpack_subscription_widget #subscribe-email input {
- padding: 0.5em;
- }
-
- .widget_rss_links li,
- .widget_top-posts li,
- .widget_upcoming_events_widget li {
- padding: 0.4643em 0;
- }
-
- .jetpack-video-wrapper {
- margin-bottom: 1.6471em;
- }
-
- .comment-subscription-form {
- font-size: 14px;
- font-size: 1.4rem;
- }
-
- .hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
- .hentry div#jp-relatedposts div.jp-relatedposts-items p {
- font-size: 14px;
- font-size: 1.4rem;
- }
-
- .jp-relatedposts-post-img {
- margin-bottom: 0.6176em;
- }
-}
-
-@media screen and (min-width: 77.5em) {
- .site .portfolio-entry {
- margin-bottom: 1.6842em
- }
-
- .site .portfolio-entry-title,
- .site .portfolio-entry-meta,
- .site .portfolio-entry-content {
- font-size: 1.6rem;
- font-size: 16px;
- }
-
- .site .portfolio-entry-content .more-link:after {
- font-size: 24px;
- top: 0;
- }
-
- .site .hentry .gist .gist-file {
- margin-bottom: 2em;
- }
-
- .site .widget .gist .gist-file {
- margin-bottom: 1.5em;
- }
-
- .hentry .fb_iframe_widget,
- .hentry .googlemaps,
- .hentry .PDS_Poll,
- .hentry .CSS_Poll,
- .site .hentry .presentation-wrapper,
- .site .hentry .jetpack-recipe,
- .site .hentry .slideshow-window,
- .site .hentry .video-player {
- margin-bottom: 1.6842em;
- }
-
- .widget_rss_links li,
- .widget_top-posts li,
- .widget_upcoming_events_widget li {
- padding: 0.4688em 0;
- }
-
- .site .tiled-gallery {
- margin-bottom: 1.6842em;
- }
-
- .jetpack-video-wrapper {
- margin-bottom: 1.6842em;
- }
-
- .hentry div.sharedaddy h3.sd-title,
- .hentry div#jp-relatedposts h3.jp-relatedposts-headline {
- font-size: 13px;
- font-size: 1.3rem;
- }
-
- .comment-subscription-form {
- font-size: 16px;
- font-size: 1.6rem;
- }
-
- .hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
- .hentry div#jp-relatedposts div.jp-relatedposts-items p {
- font-size: 16px;
- font-size: 1.6rem;
- line-height: 1.5em;
- }
-
- .jp-relatedposts-post-img {
- margin-bottom: 0.6315em;
- }
-}
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentyfifteen.css b/plugins/jetpack/modules/theme-tools/compat/twentyfifteen.css
deleted file mode 100644
index cd343681..00000000
--- a/plugins/jetpack/modules/theme-tools/compat/twentyfifteen.css
+++ /dev/null
@@ -1,769 +0,0 @@
-/**
- * Jetpack Portfolio Shortcode
- */
-
-.site .portfolio-entry {
- margin-bottom: 1.6em;
-}
-
-.site .portfolio-entry-title,
-.site .portfolio-entry-meta,
-.site .portfolio-entry-content {
- font-size: 1.2rem;
- font-size: 12px;
- line-height: 1.5;
-}
-
-.site .portfolio-featured-image + .portfolio-entry-title {
- margin-top: 0.75em;
- margin-bottom: 0.75em;
-}
-
-.site .portfolio-entry-meta {
- font-family: "Noto Sans", sans-serif;
-}
-
-.site .portfolio-entry-content .more-link:after {
- font-size: 16px;
- top: 1px;
-}
-
-/**
- * Jetpack Widgets
- */
-
-/* Blog Subscriptions Widget */
-.jetpack_subscription_widget #subscribe-email input {
- padding: 0.375em;
- width: 100%;
-}
-
-.jetpack_subscription_widget form > :last-child {
- margin-bottom: 0;
-}
-
-/* Display WordPress Posts Widget */
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts {
- margin: 0;
-}
-
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4 {
- font-size: inherit;
- margin: 0 0 1.6em;
-}
-
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts img {
- margin: 0 0 1.6em;
-}
-
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
- font-size: inherit;
- line-height: 1.6 !important;
- margin: 0 0 1.6em !important;
-}
-
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts > :last-child {
- margin-bottom: 0 !important;
-}
-
-/* Gallery Widget */
-.widget-gallery .slideshow-window {
- border-radius: 0;
-}
-
-/* Gravatar Profile Widget */
-.widget-area .widget-grofile .grofile-thumbnail {
- border-radius: 50%;
- max-width: 200px;
-}
-
-.widget-area .widget-grofile h4 {
- margin: 1.6em 0 0;
-}
-
-.widget-area .widget-grofile .grofile-accounts {
- margin-top: 0.8em;
-}
-
-/* Image Widget */
-.widget_image .wp-caption {
- margin-bottom: 0;
-}
-
-.widget_image .wp-caption-text {
- padding-bottom: 0;
-}
-
-/* RSS Links Widget */
-.widget_rss_links img {
- position: relative;
- top: -2px;
-}
-
-
-/* List type widgets */
-.widget_rss_links ul,
-.widget_top-posts ul ,
-.widget_upcoming_events_widget ul {
- list-style: none;
- margin: 0;
-}
-
-.widget_rss_links li,
-.widget_top-posts li,
-.widget_upcoming_events_widget li {
- border-top: 1px solid #eaeaea;
- border-top: 1px solid rgba(51, 51, 51, 0.1);
- padding: 0.7667em 0;
-}
-
-.widget_rss_links li:first-child,
-.widget_top-posts li:first-child,
-.widget_upcoming_events_widget li:first-child {
- border-top: 0;
- padding-top: 0;
-}
-
-.widget_rss_links li:last-child,
-.widget_top-posts li:last-child,
-.widget_upcoming_events_widget li:last-child {
- padding-bottom: 0;
-}
-
-/* Authors Widget */
-.widget_authors > ul > li > a {
- margin-bottom: 1em;
- display: inline-block;
-}
-
-.widget_authors ul {
- list-style: none;
- margin: 0;
-}
-
-.widget_authors li {
- border-top: 1px solid #eaeaea;
- border-top: 1px solid rgba(51, 51, 51, 0.1);
- padding: 0.7667em 0;
-}
-
-.widget_authors li:first-child {
- border-top: 0;
- padding-top: 0;
-}
-
-.widget_authors li:last-child {
- padding-bottom: 0;
-}
-
-/**
- * Shortcodes Embeds
- */
-
-/* Facebook */
-.fb_iframe_widget {
- margin-bottom: 1.6em;
- max-width: 100%;
-}
-
-.fb_iframe_widget span {
- max-width: 100%;
-}
-
-/* Gist */
-.gist table {
- table-layout: auto;
-}
-
-.site .gist .gist-file {
- margin-bottom: 1.5em;
-}
-
-/* Googlemaps */
-.googlemaps {
- margin-bottom: 1.6em;
-}
-
-.googlemaps iframe {
- margin-bottom: 0;
-}
-
-/* Crowdsignal */
-.PDS_Poll,
-.CSS_Poll {
- display: block !important;
- margin-bottom: 1.6em;
-}
-
-.PDS_Poll .pds-box,
-.CSS_Poll .css-box {
- max-width: 100%;
- width: auto;
-}
-
-/* Presentation */
-.site .presentation-wrapper {
- margin: 0 auto 1.6em;
-}
-
-/* Recipes */
-.site .jetpack-recipe {
- border: 0;
- margin: 0 0 1.6em;
- padding: 0;
-}
-
-.site .jetpack-recipe-title {
- border: 0;
- margin-top: 0;
- padding: 0;
-}
-
-.site .jetpack-recipe .jetpack-recipe-meta {
- font-size: inherit;
- margin: 0;
-}
-
-/* Slideshow */
-.site .slideshow-window {
- border-radius: 0;
- margin-bottom: 1.6em;
-}
-
-/* Twitter-timeline */
-iframe[id*="twitter-widget-"] {
- display: block;
-}
-
-/* Vine */
-.vine-embed {
- display: block;
-}
-
-/* VideoPress */
-.site .video-player {
- margin-bottom: 1.6em;
- padding: 0;
-}
-
-.video-player object {
- margin-bottom: 0;
-}
-
-
-/**
- * Tiled gallery
- */
-
-.site .tiled-gallery {
- margin-bottom: 1.6em;
-}
-
-
-/**
- * Jetpack Comments
- */
-
-.comment-form iframe {
- margin: 0;
-}
-
-.comment-form .subscribe-label {
- font-weight: 400;
- text-transform: none;
-}
-
-.comment-subscription-form {
- font-size: 12px;
- font-size: 1.2rem;
- line-height: 1.5em;
- margin: 2em 0 0;
-}
-
-.comment-subscription-form + .comment-subscription-form {
- margin-top: 1em;
-}
-
-
-/**
- * Sharing
- */
-
-.hentry div.sharedaddy h3.sd-title,
-.hentry h3.sd-title {
- font-family: "Noto Sans", sans-serif;
- font-size: 12px;
- font-size: 1.2rem;
- line-height: 1;
- margin: 0 0 1em 0;
- opacity: 0.7;
- text-transform: uppercase;
-}
-
-
-/**
- * Related Posts
- */
-
-.hentry #jp-relatedposts {
- margin: 0;
- padding-top: 0;
-}
-
-.hentry .jp-relatedposts-post-title a {
- border-bottom: 0;
-}
-
-.hentry .jp-relatedposts-headline em:before {
- opacity: 0.7;
-}
-
-.hentry div#jp-relatedposts h3.jp-relatedposts-headline {
- font-family: "Noto Sans", sans-serif;
- font-size: 12px;
- font-size: 1.2rem;
- opacity: 0.7;
- text-transform: uppercase;
-}
-
-.hentry div#jp-relatedposts div.jp-relatedposts-items-visual {
- margin-right: 0;
-}
-
-.hentry div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post {
- margin-bottom: 1.6em;
- opacity: 1;
-}
-
-.hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
-.hentry div#jp-relatedposts div.jp-relatedposts-items p {
- font-size: 1.2rem;
- font-size: 12px;
- line-height: 1.5;
-}
-
-.hentry .jp-relatedposts-post-title {
- font-weight: 700;
-}
-
-.hentry div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a {
- font-weight: inherit;
-}
-
-.hentry div#jp-relatedposts div.jp-relatedposts-items div.jp-relatedposts-post:hover .jp-relatedposts-post-title a,
-.hentry div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a {
- text-decoration: none;
-}
-
-.hentry div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-context,
-.hentry div#jp-relatedposts div.jp-relatedposts-items-visual div.jp-relatedposts-post-nothumbs p.jp-relatedposts-post-excerpt {
- opacity: 0.7;
-}
-
-.hentry .jp-relatedposts-post-img {
- margin-bottom: 0.6em;
-}
-
-
-/**
- * Stats
- */
-
-#wpstats {
- display: none;
-}
-
-
-/**
- * Media Queries
- */
-
-@media screen and (min-width: 46.25em) {
- .site .portfolio-entry {
- margin-bottom: 1.6471em;
- }
-
- .site .portfolio-entry-title,
- .site .portfolio-entry-meta,
- .site .portfolio-entry-content {
- font-size: 1.4rem;
- font-size: 14px;
- }
-
- .site .portfolio-entry-content .more-link:after {
- top: 3px;
- }
-
- .site .hentry .gist .gist-file {
- margin-bottom: 1.75em;
- }
-
- .site .widget .gist .gist-file {
- margin-bottom: 1.3125em;
- }
-
- .hentry .fb_iframe_widget,
- .hentry .googlemaps,
- .hentry .PDS_Poll,
- .hentry .CSS_Poll,
- .site .hentry .presentation-wrapper,
- .site .hentry .jetpack-recipe,
- .site .hentry .slideshow-window,
- .site .hentry .video-player {
- margin-bottom: 1.6471em;
- }
-
- .widget .fb_iframe_widget,
- .widget .googlemaps,
- .widget .PDS_Poll,
- .widget .CSS_Poll,
- .site .widget .presentation-wrapper,
- .site .widget .jetpack-recipe,
- .site .widget .slideshow-window,
- .site .widget .video-player {
- margin-bottom: 1.5em;
- }
-
- .widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4,
- .widget_jetpack_display_posts_widget .jetpack-display-remote-posts img {
- margin: 0 0 1.5em;
- }
-
- .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
- line-height: 1.5 !important;
- margin: 0 0 1.5em !important;
- }
-
- .widget-area .widget-grofile h4 {
- margin: 1.5em 0 0;
- }
-
- .widget-area .widget-grofile .grofile-accounts {
- margin-top: 0.75em;
- }
-
- .jetpack_subscription_widget #subscribe-email input {
- padding: 0.5625em;
- }
-
- .widget_rss_links li,
- .widget_top-posts li,
- .widget_upcoming_events_widget li {
- padding: 0.9643em 0;
- }
-
- .site .tiled-gallery {
- margin-bottom: 1.6471em;
- }
-
- .jetpack-video-wrapper {
- margin-bottom: 1.6471em;
- }
-
- .comment-subscription-form {
- font-size: 14px;
- font-size: 1.4rem;
- }
-
- .hentry div#jp-relatedposts div.jp-relatedposts-items .jp-relatedposts-post {
- margin-bottom: 0;
- }
-
- .hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
- .hentry div#jp-relatedposts div.jp-relatedposts-items p {
- font-size: 1.4rem;
- font-size: 14px;
- }
-
- .jp-relatedposts-post-img {
- margin-bottom: 0.6176em;
- }
-}
-
-@media screen and (min-width: 55em) {
- .site .portfolio-entry {
- margin-bottom: 1.6842em
- }
-
- .site .portfolio-entry-title,
- .site .portfolio-entry-meta,
- .site .portfolio-entry-content {
- font-size: 1.6rem;
- font-size: 16px;
- }
-
- .site .portfolio-entry-content .more-link:after {
- font-size: 24px;
- top: 0;
- }
-
- .site .hentry .gist .gist-file {
- margin-bottom: 2em;
- }
-
- .site .widget .gist .gist-file {
- margin-bottom: 1.5em;
- }
-
- .hentry .fb_iframe_widget,
- .hentry .googlemaps,
- .hentry .PDS_Poll,
- .hentry .CSS_Poll,
- .site .hentry .presentation-wrapper,
- .site .hentry .jetpack-recipe,
- .site .hentry .slideshow-window,
- .site .hentry .video-player {
- margin-bottom: 1.6842em;
- }
-
- .site .tiled-gallery {
- margin-bottom: 1.6842em;
- }
-
- .jetpack_subscription_widget #subscribe-email input {
- padding: 0.75em;
- }
-
- .widget_rss_links li,
- .widget_top-posts li,
- .widget_upcoming_events_widget li {
- padding: 0.7188em 0;
- }
-
- .jetpack-video-wrapper {
- margin-bottom: 1.6842em;
- }
-
- .comment-subscription-form {
- font-size: 16px;
- font-size: 1.6rem;
- }
-
- .hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
- .hentry div#jp-relatedposts div.jp-relatedposts-items p {
- font-size: 1.6rem;
- font-size: 16px;
- line-height: 1.5em;
- }
-
- .jp-relatedposts-post-img {
- margin-bottom: 0.6315em;
- }
-}
-
-@media screen and (min-width: 59.6875em) {
- .site .portfolio-entry {
- margin-bottom: 1.6em
- }
-
- .site .portfolio-entry-title,
- .site .portfolio-entry-meta,
- .site .portfolio-entry-content {
- font-size: 1.2rem;
- font-size: 12px;
- }
-
- .site .portfolio-entry-content .more-link:after {
- font-size: 16px;
- top: 1px;
- }
-
- .site .hentry .gist .gist-file {
- margin-bottom: 1.5em;
- }
-
- .site .widget .gist .gist-file {
- margin-bottom: 1.125em;
- }
-
- .hentry .fb_iframe_widget,
- .hentry .googlemaps,
- .hentry .PDS_Poll,
- .hentry .CSS_Poll,
- .site .hentry .presentation-wrapper,
- .site .hentry .jetpack-recipe,
- .site .hentry .slideshow-window,
- .site .hentry .video-player {
- margin-bottom: 1.6em;
- }
-
- .site .tiled-gallery {
- margin-bottom: 1.6em;
- }
-
- .jetpack_subscription_widget #subscribe-email input {
- padding: 0.4583em;
- }
-
- .jetpack-video-wrapper {
- margin-bottom: 1.6em;
- }
-
- .widget-area .widget-grofile .grofile-thumbnail {
- max-width: 100%;
- }
-
- .widget_rss_links li,
- .widget_top-posts li,
- .widget_upcoming_events_widget li {
- padding: 0.4583em 0;
- }
-
- .comment-subscription-form {
- font-size: 12px;
- font-size: 1.2rem;
- }
-
- .hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
- .hentry div#jp-relatedposts div.jp-relatedposts-items p {
- font-size: 1.2rem;
- font-size: 12px;
- line-height: 1.5;
- }
-
- .jp-relatedposts-post-img {
- margin-bottom: 0.6em;
- }
-}
-
-@media screen and (min-width: 68.75em) {
- .site .portfolio-entry {
- margin-bottom: 1.6471em
- }
-
- .site .portfolio-entry-title,
- .site .portfolio-entry-meta,
- .site .portfolio-entry-content {
- font-size: 1.4rem;
- font-size: 14px;
- }
-
- .site .portfolio-entry-content .more-link:after {
- top: 3px;
- }
-
- .site .hentry .gist .gist-file {
- margin-bottom: 1.75em;
- }
-
- .site .widget .gist .gist-file {
- margin-bottom: 1.3125em;
- }
-
- .hentry .fb_iframe_widget,
- .hentry .googlemaps,
- .hentry .PDS_Poll,
- .hentry .CSS_Poll,
- .site .hentry .presentation-wrapper,
- .site .hentry .jetpack-recipe,
- .site .hentry .slideshow-window,
- .site .hentry .video-player {
- margin-bottom: 1.6471em;
- }
-
- .site .tiled-gallery {
- margin-bottom: 1.6471em;
- }
-
- .jetpack_subscription_widget #subscribe-email input {
- padding: 0.5em;
- }
-
- .widget_rss_links li,
- .widget_top-posts li,
- .widget_upcoming_events_widget li {
- padding: 0.4643em 0;
- }
-
- .jetpack-video-wrapper {
- margin-bottom: 1.6471em;
- }
-
- .comment-subscription-form {
- font-size: 14px;
- font-size: 1.4rem;
- }
-
- .hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
- .hentry div#jp-relatedposts div.jp-relatedposts-items p {
- font-size: 14px;
- font-size: 1.4rem;
- }
-
- .jp-relatedposts-post-img {
- margin-bottom: 0.6176em;
- }
-}
-
-@media screen and (min-width: 77.5em) {
- .site .portfolio-entry {
- margin-bottom: 1.6842em
- }
-
- .site .portfolio-entry-title,
- .site .portfolio-entry-meta,
- .site .portfolio-entry-content {
- font-size: 1.6rem;
- font-size: 16px;
- }
-
- .site .portfolio-entry-content .more-link:after {
- font-size: 24px;
- top: 0;
- }
-
- .site .hentry .gist .gist-file {
- margin-bottom: 2em;
- }
-
- .site .widget .gist .gist-file {
- margin-bottom: 1.5em;
- }
-
- .hentry .fb_iframe_widget,
- .hentry .googlemaps,
- .hentry .PDS_Poll,
- .hentry .CSS_Poll,
- .site .hentry .presentation-wrapper,
- .site .hentry .jetpack-recipe,
- .site .hentry .slideshow-window,
- .site .hentry .video-player {
- margin-bottom: 1.6842em;
- }
-
- .widget_rss_links li,
- .widget_top-posts li,
- .widget_upcoming_events_widget li {
- padding: 0.4688em 0;
- }
-
- .site .tiled-gallery {
- margin-bottom: 1.6842em;
- }
-
- .jetpack-video-wrapper {
- margin-bottom: 1.6842em;
- }
-
- .hentry div.sharedaddy h3.sd-title,
- .hentry div#jp-relatedposts h3.jp-relatedposts-headline {
- font-size: 13px;
- font-size: 1.3rem;
- }
-
- .comment-subscription-form {
- font-size: 16px;
- font-size: 1.6rem;
- }
-
- .hentry div#jp-relatedposts div.jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
- .hentry div#jp-relatedposts div.jp-relatedposts-items p {
- font-size: 16px;
- font-size: 1.6rem;
- line-height: 1.5em;
- }
-
- .jp-relatedposts-post-img {
- margin-bottom: 0.6315em;
- }
-}
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentyfifteen.php b/plugins/jetpack/modules/theme-tools/compat/twentyfifteen.php
deleted file mode 100644
index adaa42b7..00000000
--- a/plugins/jetpack/modules/theme-tools/compat/twentyfifteen.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * Jetpack Compatibility File
- * See: http://jetpack.com/
- */
-
-function twentyfifteen_jetpack_setup() {
- /**
- * Add theme support for Responsive Videos.
- */
- add_theme_support( 'jetpack-responsive-videos' );
-
- /**
- * Add theme support for geo-location.
- */
- add_theme_support( 'jetpack-geo-location' );
-}
-add_action( 'after_setup_theme', 'twentyfifteen_jetpack_setup' );
-
-function twentyfifteen_init_jetpack() {
- /**
- * Add our compat CSS file for custom widget stylings and such.
- * Set the version equal to filemtime for development builds, and the JETPACK__VERSION for production
- * or skip it entirely for wpcom.
- */
- if ( ! is_admin() ) {
- $version = false;
- if ( method_exists( 'Jetpack', 'is_development_version' ) ) {
- $version = Jetpack::is_development_version() ? filemtime( plugin_dir_path( __FILE__ ) . 'twentyfifteen.css' ) : JETPACK__VERSION;
- }
- wp_enqueue_style( 'twentyfifteen-jetpack', plugins_url( 'twentyfifteen.css', __FILE__ ), array(), $version );
- wp_style_add_data( 'twentyfifteen-jetpack', 'rtl', 'replace' );
- }
-}
-add_action( 'init', 'twentyfifteen_init_jetpack' );
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentyfourteen-rtl.css b/plugins/jetpack/modules/theme-tools/compat/twentyfourteen-rtl.css
deleted file mode 100644
index 66e74dbd..00000000
--- a/plugins/jetpack/modules/theme-tools/compat/twentyfourteen-rtl.css
+++ /dev/null
@@ -1,370 +0,0 @@
-/**
- * Jetpack compat stylesheet for Twenty Fourteen.
- */
-
-#jp-post-flair:empty {
- display: none;
-}
-
-.site-content #jp-post-flair {
- margin: 24px 0;
-}
-
-.widget #jp-post-flair {
- padding-top: 0;
-}
-
-.entry-content div.jp-relatedposts {
- margin: 0;
-}
-
-div.jp-relatedposts .jp-relatedposts-headline em:after {
- content: ":";
-}
-
-#page .entry-content div.sharedaddy h3,
-#page .entry-summary div.sharedaddy h3,
-#page .entry-content h3.sd-title,
-#page .entry-summary h3.sd-title,
-#primary div.sharedaddy .jp-relatedposts-headline em,
-.pd-rating,
-.cs-rating {
- color: #767676;
- font-size: 11px;
- text-transform: uppercase;
-}
-
-.pd-rating,
-.cs-rating {
- min-height: 23px;
- margin-bottom: 5px;
-}
-
-.wp-multiplayer,
-.PDS_Poll,
-.CSS_Poll,
-.entry-content .slideshow-window {
- margin-bottom: 24px;
-}
-
-.entry-content .gist table {
- margin-bottom: 0;
-}
-
-.entry-content .slideshow-window {
- border-radius: 0;
-}
-
-.entry-content .video-player {
- padding: 0 0 24px;
-}
-
-.highlander-enabled #respond {
- margin: 0;
- padding: 0;
-}
-
-.highlander-enabled #respond h3 {
- margin: 0 0 24px;
-}
-
-.highlander-enabled #respond h3 small a {
- width: 24px;
-}
-
-.wpcnt {
- margin-bottom: 15px; /* 24-9 */
-}
-
-#wpstats {
- display: none;
-}
-
-img[id*="botd"] {
- position: absolute;
-}
-
-
-/**
- * Widgets
- * -----------------------------------------------------------------------------
- */
-
-/* About.me Widget*/
-
-.aboutme_widget #am_thumbnail {
- margin-bottom: 18px;
-}
-
-.aboutme_widget #am_thumbnail img {
- border: 0;
- max-width: 100%;
-}
-
-.aboutme_widget #am_name {
- font-weight: 900;
- margin: 0;
-}
-
-.aboutme_widget #am_headline {
- font-size: 14px;
- line-height: 1.2857142857;
- margin: 0;
-}
-
-.aboutme_widget #am_bio {
- margin: 18px 0;
-}
-
-.aboutme_widget #am_bio p {
- margin-bottom: 6px;
-}
-
-.aboutme_widget #am_bio:empty {
- margin: 0;
-}
-
-.aboutme_widget #am_services {
- margin-top: 18px;
-}
-
-/* Akismet Widget */
-
-.widget_akismet_widget a,
-.content-sidebar .widget_akismet_widget a {
- color: rgba(255,255,255,0.5) !important;
-}
-
-.widget_akismet_widget a:hover,
-.content-sidebar .widget_akismet_widget a:hover {
- color: rgba(255,255,255,0.7) !important;
-}
-
-/* Authors Widget */
-
-.widget_authors li {
- margin-bottom: 9px;
-}
-
-.widget_authors li:last-child {
- margin-bottom: 0;
-}
-
-.widget_authors img {
- margin-left: 5px;
-}
-
-/* Contact Info Widget */
-
-.widget_contact_info > div {
- margin-bottom: 18px;
-}
-
-.widget_contact_info > div:last-child {
- margin-bottom: 0;
-}
-
-/* Display WordPress Posts Widget */
-
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4 {
- font-size: 14px;
- line-height: 1.2857142857;
- margin: 0 0 9px;
-}
-
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
- font-size: 14px;
- line-height: 1.2857142857 !important;
-}
-
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
- margin: 9px 0 18px !important;
-}
-
-/* Follow Button Widget */
-
-.widget_follow_button_widget iframe {
- margin-bottom: 0;
-}
-
-/* Gravatar & Gravatar Profile Widget */
-
-.widget_gravatar img.avatar,
-.widget-grofile .grofile-thumbnail {
- height: auto;
- max-width: 100% !important;
-}
-
-.widget-area .widget-grofile h4 {
- font-size: 12px;
- line-height: 1.2857142857;
- margin: 18px 0 9px;
- text-transform: uppercase;
-}
-
-.widget-area .widget-grofile .grofile-meta h4 {
- font-size: 18px;
- line-height: 1;
- text-transform: none;
-}
-
-/* Image Widget */
-
-.widget_image .wp-caption,
-.widget_image .wp-caption-text {
- margin-bottom: 0;
-}
-
-.widget_image img {
- height: auto;
-}
-
-/* Posts I Like Widget */
-
-.widget_jetpack_posts_i_like .widgets-list-layout li {
- margin: 0;
-}
-
-/* Recent Comments Widget */
-
-.widget_recent_comments table,
-.widget_recent_comments td {
- border: 0;
-}
-
-.widget_recent_comments td.recentcommentsavatartop,
-.widget_recent_comments td.recentcommentsavatarend {
- padding: 5px 0 5px 5px;
-}
-
-.widget_recent_comments td.recentcommentstexttop,
-.widget_recent_comments td.recentcommentstextend {
- padding: 5px 5px 5px 0;
- vertical-align: top;
-}
-
-/* Recent Images Widget */
-
-.widget_recent_images img {
- height: auto;
-}
-
-/* Top Posts & Pages Widget */
-
-.widget_top-posts .widgets-list-layout li {
- margin-bottom: 0;
-}
-
-/* Twitter(old) Widget */
-
-.widget_twitter li {
- margin-bottom: 18px;
-}
-
-.widget_twitter li:last-child {
- margin-bottom: 0;
-}
-
-.widget_twitter iframe {
- margin: 18px 0 0;
-}
-
-/* List type Widgets */
-
-.widget_jp_blogs_i_follow li,
-.widget_delicious li,
-.widgets-list-layout li,
-.widget_top-clicks li,
-.widget_top-posts li,
-.top_rated li,
-.widget_upcoming_events_widget .upcoming-events li {
- border-top: 1px solid rgba(255, 255, 255, 0.2);
- padding: 8px 0 9px;
-}
-
-.widget_jp_blogs_i_follow li:first-child,
-.widgets-list-layout li:first-child,
-.widget_top-clicks li:first-child,
-.widget_top-posts li:first-child,
-.top_rated li:first-child,
-.widget_upcoming_events_widget .upcoming-events li:first-child {
- border-top: 0;
-}
-
-.content-sidebar .widget_jp_blogs_i_follow li,
-.content-sidebar .widgets-list-layout li,
-.content-sidebar .widget_top-clicks li,
-.content-sidebar .widget_top-posts li,
-.content-sidebar .top_rated li,
-.content-sidebar .widget_upcoming_events_widget .upcoming-events li {
- border-color: rgba(0, 0, 0, 0.1);
-}
-
-.content-sidebar widget-area .widget-grofile h4 {
- font-weight: 900;
-}
-
-
-/**
- * Media Queries
- * -----------------------------------------------------------------------------
- */
-
-@media screen and (min-width: 1008px) {
- .footer-sidebar .widget_jp_blogs_i_follow li,
- .footer-sidebar .widget_jp_blogs_i_follow li,
- .footer-sidebar .widget_top-clicks li,
- .footer-sidebar .widget_top-posts li,
- .footer-sidebar .top_rated li,
- .footer-sidebar .widget_upcoming_events_widget .upcoming-events li,
- .primary-sidebar .widget_jp_blogs_i_follow li,
- .primary-sidebar .widget_jp_blogs_i_follow li,
- .primary-sidebar .widget_top-clicks li,
- .primary-sidebar .widget_top-posts li,
- .primary-sidebar .top_rated li {
- border-top: 0;
- padding: 0 0 6px;
- }
-
- .footer-sidebar .widget_jp_blogs_i_follow li:last-child,
- .footer-sidebar .widget_jp_blogs_i_follow li:last-child,
- .footer-sidebar .widget_top-clicks li:last-child,
- .footer-sidebar .widget_top-posts li:last-child,
- .footer-sidebar .top_rated li:last-child,
- .footer-sidebar .widget_upcoming_events_widget .upcoming-events li:last-child,
- .primary-sidebar .widget_jp_blogs_i_follow li:last-child,
- .primary-sidebar .widget_jp_blogs_i_follow li:last-child,
- .primary-sidebar .widget_top-clicks li:last-child,
- .primary-sidebar .widget_top-posts li:last-child,
- .primary-sidebar .top_rated li:last-child {
- padding: 0;
- }
-
- .primary-sidebar .widget_blog_subscription input[type="text"],
- .footer-sidebar .widget_blog_subscription input[type="text"] {
- padding: 3px 2px !important;
- }
-
- .footer-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4,
- .primary-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4,
- .footer-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p,
- .primary-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p,
- .footer-sidebar .widget-grofile .grofile-meta h4,
- .primary-sidebar .widget-grofile .grofile-meta h4 {
- font-size: 12px;
- line-height: 1.5;
- }
-
- .footer-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p,
- .primary-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
- line-height: 1.5 !important;
- }
-
- .footer-sidebar .widget-grofile h4,
- .primary-sidebar .widget-grofile h4,
- .footer-sidebar .top_rated div > p:first-of-type,
- .primary-sidebar .top_rated div > p:first-of-type {
- font-size: 11px;
- line-height: 1.6363636363;
- }
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentyfourteen.css b/plugins/jetpack/modules/theme-tools/compat/twentyfourteen.css
deleted file mode 100644
index 903bc3de..00000000
--- a/plugins/jetpack/modules/theme-tools/compat/twentyfourteen.css
+++ /dev/null
@@ -1,365 +0,0 @@
-/**
- * Jetpack compat stylesheet for Twenty Fourteen.
- */
-
-#jp-post-flair:empty {
- display: none;
-}
-
-.site-content #jp-post-flair {
- margin: 24px 0;
-}
-
-.widget #jp-post-flair {
- padding-top: 0;
-}
-
-.entry-content div.jp-relatedposts {
- margin: 0;
-}
-
-#page .entry-content div.sharedaddy h3,
-#page .entry-summary div.sharedaddy h3,
-#page .entry-content h3.sd-title,
-#page .entry-summary h3.sd-title,
-#primary div.sharedaddy .jp-relatedposts-headline em,
-.pd-rating,
-.cs-rating {
- color: #767676;
- font-size: 11px;
- text-transform: uppercase;
-}
-
-.pd-rating,
-.cs-rating {
- min-height: 23px;
- margin-bottom: 5px;
-}
-
-.wp-multiplayer,
-.PDS_Poll,
-.CSS_Poll,
-.entry-content .slideshow-window {
- margin-bottom: 24px;
-}
-
-.entry-content .gist table {
- margin-bottom: 0;
-}
-
-.entry-content .slideshow-window {
- border-radius: 0;
-}
-
-.entry-content .video-player {
- padding: 0 0 24px;
-}
-
-.highlander-enabled #respond {
- margin: 0;
- padding: 0;
-}
-
-.highlander-enabled #respond h3 {
- margin: 0 0 24px;
-}
-
-.highlander-enabled #respond h3 small a {
- width: 24px;
-}
-
-.wpcnt {
- margin-bottom: 15px; /* 24-9 */
-}
-
-#wpstats {
- display: none;
-}
-
-img[id*="botd"] {
- position: absolute;
-}
-
-
-/**
- * Widgets
- * -----------------------------------------------------------------------------
- */
-
-/* About.me Widget*/
-
-.aboutme_widget #am_thumbnail {
- margin-bottom: 18px;
-}
-
-.aboutme_widget #am_thumbnail img {
- border: 0;
- max-width: 100%;
-}
-
-.aboutme_widget #am_name {
- font-weight: 900;
- margin: 0;
-}
-
-.aboutme_widget #am_headline {
- font-size: 14px;
- line-height: 1.2857142857;
- margin: 0;
-}
-
-.aboutme_widget #am_bio {
- margin: 18px 0;
-}
-
-.aboutme_widget #am_bio p {
- margin-bottom: 6px;
-}
-
-.aboutme_widget #am_bio:empty {
- margin: 0;
-}
-
-.aboutme_widget #am_services {
- margin-top: 18px;
-}
-
-/* Akismet Widget */
-
-.widget_akismet_widget a,
-.content-sidebar .widget_akismet_widget a {
- color: rgba(255,255,255,0.5) !important;
-}
-
-.widget_akismet_widget a:hover,
-.content-sidebar .widget_akismet_widget a:hover {
- color: rgba(255,255,255,0.7) !important;
-}
-
-/* Authors Widget */
-.widget.widget_authors li > ul {
- margin-left: 0;
-}
-
-.widget_authors li {
- margin-bottom: 9px;
-}
-
-.widget_authors li:last-child {
- margin-bottom: 0;
-}
-
-/* Contact Info Widget */
-
-.widget_contact_info > div {
- margin-bottom: 18px;
-}
-
-.widget_contact_info > div:last-child {
- margin-bottom: 0;
-}
-
-/* Display WordPress Posts Widget */
-
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4 {
- font-size: 14px;
- line-height: 1.2857142857;
- margin: 0 0 9px;
-}
-
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
- font-size: 14px;
- line-height: 1.2857142857 !important;
-}
-
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
- margin: 9px 0 18px !important;
-}
-
-/* Follow Button Widget */
-
-.widget_follow_button_widget iframe {
- margin-bottom: 0;
-}
-
-/* Gravatar & Gravatar Profile Widget */
-
-.widget_gravatar img.avatar,
-.widget-grofile .grofile-thumbnail {
- height: auto;
- max-width: 100% !important;
-}
-
-.widget-area .widget-grofile h4 {
- font-size: 12px;
- line-height: 1.2857142857;
- margin: 18px 0 9px;
- text-transform: uppercase;
-}
-
-.widget-area .widget-grofile .grofile-meta h4 {
- font-size: 18px;
- line-height: 1;
- text-transform: none;
-}
-
-/* Image Widget */
-
-.widget_image .wp-caption,
-.widget_image .wp-caption-text {
- margin-bottom: 0;
-}
-
-.widget_image img {
- height: auto;
-}
-
-/* Posts I Like Widget */
-
-.widget_jetpack_posts_i_like .widgets-list-layout li {
- margin: 0;
-}
-
-/* Recent Comments Widget */
-
-.widget_recent_comments table,
-.widget_recent_comments td {
- border: 0;
-}
-
-.widget_recent_comments td.recentcommentsavatartop,
-.widget_recent_comments td.recentcommentsavatarend {
- padding: 5px 5px 5px 0;
-}
-
-.widget_recent_comments td.recentcommentstexttop,
-.widget_recent_comments td.recentcommentstextend {
- padding: 5px 0 5px 5px;
- vertical-align: top;
-}
-
-/* Recent Images Widget */
-
-.widget_recent_images img {
- height: auto;
-}
-
-/* Top Posts & Pages Widget */
-
-.widget_top-posts .widgets-list-layout li {
- margin-bottom: 0;
-}
-
-/* Twitter(old) Widget */
-
-.widget_twitter li {
- margin-bottom: 18px;
-}
-
-.widget_twitter li:last-child {
- margin-bottom: 0;
-}
-
-.widget_twitter iframe {
- margin: 18px 0 0;
-}
-
-/* List type Widgets */
-
-.widget_jp_blogs_i_follow li,
-.widget_delicious li,
-.widgets-list-layout li,
-.widget_top-clicks li,
-.widget_top-posts li,
-.top_rated li,
-.widget_upcoming_events_widget .upcoming-events li {
- border-top: 1px solid rgba(255, 255, 255, 0.2);
- padding: 8px 0 9px;
-}
-
-.widget_jp_blogs_i_follow li:first-child,
-.widgets-list-layout li:first-child,
-.widget_top-clicks li:first-child,
-.widget_top-posts li:first-child,
-.top_rated li:first-child,
-.widget_upcoming_events_widget .upcoming-events li:first-child {
- border-top: 0;
-}
-
-.content-sidebar .widget_jp_blogs_i_follow li,
-.content-sidebar .widgets-list-layout li,
-.content-sidebar .widget_top-clicks li,
-.content-sidebar .widget_top-posts li,
-.content-sidebar .top_rated li,
-.content-sidebar .widget_upcoming_events_widget .upcoming-events li {
- border-color: rgba(0, 0, 0, 0.1);
-}
-
-.content-sidebar widget-area .widget-grofile h4 {
- font-weight: 900;
-}
-
-
-/**
- * Media Queries
- * -----------------------------------------------------------------------------
- */
-
-@media screen and (min-width: 1008px) {
- .footer-sidebar .widget_jp_blogs_i_follow li,
- .footer-sidebar .widget_jp_blogs_i_follow li,
- .footer-sidebar .widget_top-clicks li,
- .footer-sidebar .widget_top-posts li,
- .footer-sidebar .top_rated li,
- .footer-sidebar .widget_upcoming_events_widget .upcoming-events li,
- .primary-sidebar .widget_jp_blogs_i_follow li,
- .primary-sidebar .widget_jp_blogs_i_follow li,
- .primary-sidebar .widget_top-clicks li,
- .primary-sidebar .widget_top-posts li,
- .primary-sidebar .top_rated li {
- border-top: 0;
- padding: 0 0 6px;
- }
-
- .footer-sidebar .widget_jp_blogs_i_follow li:last-child,
- .footer-sidebar .widget_jp_blogs_i_follow li:last-child,
- .footer-sidebar .widget_top-clicks li:last-child,
- .footer-sidebar .widget_top-posts li:last-child,
- .footer-sidebar .top_rated li:last-child,
- .footer-sidebar .widget_upcoming_events_widget .upcoming-events li:last-child,
- .primary-sidebar .widget_jp_blogs_i_follow li:last-child,
- .primary-sidebar .widget_jp_blogs_i_follow li:last-child,
- .primary-sidebar .widget_top-clicks li:last-child,
- .primary-sidebar .widget_top-posts li:last-child,
- .primary-sidebar .top_rated li:last-child {
- padding: 0;
- }
-
- .primary-sidebar .widget_blog_subscription input[type="text"],
- .footer-sidebar .widget_blog_subscription input[type="text"] {
- padding: 3px 2px !important;
- }
-
- .footer-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4,
- .primary-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4,
- .footer-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p,
- .primary-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p,
- .footer-sidebar .widget-grofile .grofile-meta h4,
- .primary-sidebar .widget-grofile .grofile-meta h4 {
- font-size: 12px;
- line-height: 1.5;
- }
-
- .footer-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p,
- .primary-sidebar .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
- line-height: 1.5 !important;
- }
-
- .footer-sidebar .widget-grofile h4,
- .primary-sidebar .widget-grofile h4,
- .footer-sidebar .top_rated div > p:first-of-type,
- .primary-sidebar .top_rated div > p:first-of-type {
- font-size: 11px;
- line-height: 1.6363636363;
- }
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentyfourteen.php b/plugins/jetpack/modules/theme-tools/compat/twentyfourteen.php
deleted file mode 100644
index 202dfbf3..00000000
--- a/plugins/jetpack/modules/theme-tools/compat/twentyfourteen.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-/**
- * A last try to show posts, in case the Featured Content plugin returns no IDs.
- *
- * @param array $featured_ids
- * @return array
- */
-function twentyfourteen_featured_content_post_ids( $featured_ids ) {
- if ( empty( $featured_ids ) ) {
- $featured_ids = array_slice( get_option( 'sticky_posts', array() ), 0, 6 );
- }
-
- return $featured_ids;
-}
-add_action( 'featured_content_post_ids', 'twentyfourteen_featured_content_post_ids' );
-
-/**
- * Set the default tag name for Featured Content.
- *
- * @param WP_Customize_Manager $wp_customize Theme Customizer object.
- * @return void
- */
-function twentyfourteen_customizer_default( $wp_customize ) {
- $wp_customize->get_setting( 'featured-content[tag-name]' )->default = 'featured';
-}
-add_action( 'customize_register', 'twentyfourteen_customizer_default' );
-
-/**
- * Sets a default tag of 'featured' for Featured Content.
- *
- * @param array $settings
- * @return array
- */
-function twentyfourteen_featured_content_default_settings( $settings ) {
- $settings['tag-name'] = 'featured';
-
- return $settings;
-}
-add_action( 'featured_content_default_settings', 'twentyfourteen_featured_content_default_settings' );
-
-/**
- * Removes sharing markup from post content if we're not in the loop and it's a
- * formatted post.
- *
- * @param bool $show Whether to show sharing options.
- * @param WP_Post $post The post to share.
- * @return bool
- */
-function twentyfourteen_mute_content_filters( $show, $post ) {
- $formats = get_theme_support( 'post-formats' );
- if ( ! in_the_loop() && has_post_format( $formats[0], $post ) ) {
- $show = false;
- }
- return $show;
-}
-add_filter( 'sharing_show', 'twentyfourteen_mute_content_filters', 10, 2 );
-
-function twentyfourteen_init_jetpack() {
- /**
- * Add our compat CSS file for custom widget stylings and such.
- * Set the version equal to filemtime for development builds, and the JETPACK__VERSION for production.
- */
- if ( ! is_admin() ) {
- $version = false;
- if ( method_exists( 'Jetpack', 'is_development_version' ) ) {
- $version = Jetpack::is_development_version() ? filemtime( plugin_dir_path( __FILE__ ) . 'twentyfourteen.css' ) : JETPACK__VERSION;
- }
- wp_enqueue_style( 'twentyfourteen-jetpack', plugins_url( 'twentyfourteen.css', __FILE__ ), array(), $version );
- wp_style_add_data( 'twentyfourteen-jetpack', 'rtl', 'replace' );
- }
-}
-add_action( 'init', 'twentyfourteen_init_jetpack' );
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentynineteen-rtl.css b/plugins/jetpack/modules/theme-tools/compat/twentynineteen-rtl.css
deleted file mode 100644
index 2cf7d0bb..00000000
--- a/plugins/jetpack/modules/theme-tools/compat/twentynineteen-rtl.css
+++ /dev/null
@@ -1 +0,0 @@
-.infinite-scroll .pagination,.infinite-scroll .posts-navigation,.infinite-scroll.neverending .site-footer{display:none}.infinity-end.neverending .site-footer{display:block}.infinite-loader{margin:calc(3 * 1rem) auto}.infinite-loader .spinner{margin:0 auto;right:inherit!important}.site-main #infinite-handle{margin:calc(2 * 1rem) auto}.site-main #infinite-handle span{background:100% 0;display:block;font-size:.8888888889em;text-align:center}.site-main #infinite-handle span button,.site-main #infinite-handle span button:focus,.site-main #infinite-handle span button:hover{transition:background 150ms ease-in-out;background:#0073aa;border:none;border-radius:5px;box-sizing:border-box;color:#fff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:.8888888889em;font-weight:600;line-height:1.2;outline:0;padding:.66rem 1rem}.site-main #infinite-handle span button:hover{cursor:pointer}.site-main #infinite-handle span button:focus,.site-main #infinite-handle span button:hover{background:#111}.site-main #infinite-handle span button:focus{outline:thin dotted;outline-offset:-4px}.site-main .infinite-wrap .entry:first-of-type{margin-top:calc(6 * 1rem)}.entry .jetpack-video-wrapper{margin-bottom:1.75em}.sd-block{line-height:1}.entry div.sharedaddy h3.sd-title,.entry h3.sd-title{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:1.125em;font-weight:700;letter-spacing:-.02em;line-height:1.2;margin-bottom:.5em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.entry div.sharedaddy h3.sd-title:before,.entry h3.sd-title:before{background:#767676;border-top:none;content:"\020";display:block;height:2px;margin:1rem 0;width:1em;min-width:inherit}.sd-social-icon-text .sd-content ul,.sd-social-text .sd-content ul{margin-bottom:-.3125em!important}.sd-social-icon .sd-content ul,.sd-social-official .sd-content ul{margin-bottom:0!important}.entry #sharing_email .sharing_send,.entry .sd-content ul li .option a.share-ustom,.entry .sd-content ul li a.sd-button,.entry .sd-content ul li.advanced a.share-more,.entry .sd-content ul li.preview-item div.option.option-smart-off a,.entry .sd-social-icon .sd-content ul li a.sd-button,.entry .sd-social-icon-text .sd-content ul li a.sd-button,.entry .sd-social-official .sd-content>ul>li .digg_button>a,.entry .sd-social-official .sd-content>ul>li>a.sd-button,.entry .sd-social-text .sd-content ul li a.sd-button{box-shadow:none}.entry #jp-relatedposts{padding-top:0;margin-top:32px;margin-bottom:32px}.entry #jp-relatedposts h3.jp-relatedposts-headline{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:1.125em;font-weight:700;letter-spacing:-.02em;line-height:1.2;margin-bottom:.5em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.entry #jp-relatedposts h3.jp-relatedposts-headline:before{background:#767676;border-top:none;content:"\020";display:block;height:2px;margin:1rem 0;width:1em;min-width:inherit}.entry #jp-relatedposts h3.jp-relatedposts-headline em:before{display:none}.entry #jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post{opacity:1}.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post,.entry #jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:1em;letter-spacing:-.02em;line-height:1.2;margin-bottom:.5em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post span a,.entry #jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title a{font-weight:700}.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-excerpt,.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title{margin-top:.5em;margin-bottom:.5em}.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-context,.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:13px;font-weight:500}.entry #jp-relatedposts .jp-relatedposts-items p,.entry #jp-relatedposts .jp-relatedposts-items-visual .entry h4.jp-relatedposts-post-title{letter-spacing:normal}#wpstats{display:none}.comments-area .comments-title-wrap+.comment-respond .comment-reply-title{display:none}.widget_author_grid ul,.widget_authors ul,.widget_jp_blogs_i_follow ul,.widget_links ul,.widget_rss_links ul{list-style:none;padding-right:0;padding-left:0}.widget_jp_blogs_i_follow li,.widget_links li,.widget_rss_links li{color:#767676;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:calc(22px * 1.125);font-weight:700;line-height:1.2;margin-top:.5rem;margin-bottom:.5rem}.widget.widget_authors ul li>ul{list-style-type:disc;padding-right:4.25rem}.rtl .widget.widget_authors ul li>ul{padding-right:0;padding-left:1rem}.widget_authors>ul>li>a{display:block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;position:relative}.widget.widget_authors li a strong{line-height:1.2;position:absolute;top:0}.widget.widget_authors .avatar{float:right;margin-left:1em}.widget_authors li>ul{clear:both}.widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4{font-size:100%;margin:1rem 0}.widget_goodreads div[class^=gr_custom_container]{border:none}.widget_goodreads div[class^=gr_custom_each_container]{border-bottom:none;margin-bottom:1rem;padding-bottom:0}.widget_goodreads div[class^=gr_custom_author],.widget_goodreads h2[class^=gr_custom_header]{font-size:inherit;line-height:1.15}.widget_eu_cookie_law_widget #eu-cookie-law{border-color:#ccc;color:#767676;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;font-size:.68182em;padding:.5rem 1rem}.widget_eu_cookie_law_widget #eu-cookie-law .accept{font-size:1em;padding:10px 12px}.widget_rss li a.rsswidget{display:block;margin:1rem 0 .5rem}.widget_rss .rssSummary{font-family:NonBreakingSpaceOverride,"Hoefler Text","Baskerville Old Face",Garamond,"Times New Roman",serif;font-weight:400;font-size:22px}.widget_rss .rss-date,.widget_rss cite{color:#9c9c9c;display:block;font-size:.71111em;font-weight:500;margin:.5rem 0}.widget_rss cite{font-style:normal}.widget_rss cite:before{content:"\2014\00a0"}.widget_top-posts .widgets-list-layout-links{float:inherit;margin-right:calc(40px + 1rem);width:inherit}@media only screen and (min-width:600px){.widget.widget_search .search-field{max-width:calc(50vw - 20%)}}.twentynineteen-customizer .entry .entry-footer>span,.twentynineteen-customizer .entry .entry-meta>span{display:inline} \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentynineteen.css b/plugins/jetpack/modules/theme-tools/compat/twentynineteen.css
deleted file mode 100644
index 4ba953f0..00000000
--- a/plugins/jetpack/modules/theme-tools/compat/twentynineteen.css
+++ /dev/null
@@ -1,374 +0,0 @@
-/* Infinite scroll */
-
-/* Globally hidden elements when Infinite Scroll is supported and in use. */
-.infinite-scroll .pagination,
-.infinite-scroll .posts-navigation,
-.infinite-scroll.neverending .site-footer {
- /* Theme Footer (when set to scrolling) */
- display: none;
-}
-
- /* When Infinite Scroll has reached its end we need to re-display elements that were hidden (via .neverending) before. */
-.infinity-end.neverending .site-footer {
- display: block;
-}
-
-.infinite-loader {
- margin: calc(3 * 1rem) auto;
-}
-
-.infinite-loader .spinner {
- margin: 0 auto;
- left: inherit !important;
-}
-
-.site-main #infinite-handle {
- margin: calc(2 * 1rem) auto;
-}
-
-.site-main #infinite-handle span {
- background: transparent;
- display: block;
- font-size: 0.8888888889em;
- text-align: center;
-}
-
-.site-main #infinite-handle span button,
-.site-main #infinite-handle span button:hover,
-.site-main #infinite-handle span button:focus {
- transition: background 150ms ease-in-out;
- background: #0073aa;
- border: none;
- border-radius: 5px;
- box-sizing: border-box;
- color: white;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
- font-size: 0.8888888889em;
- font-weight: 600;
- line-height: 1.2;
- outline: none;
- padding: 0.66rem 1rem;
-}
-
-.site-main #infinite-handle span button:hover {
- cursor: pointer;
-}
-
-.site-main #infinite-handle span button:hover,
-.site-main #infinite-handle span button:focus {
- background: #111;
-}
-
-.site-main #infinite-handle span button:focus {
- outline: thin dotted;
- outline-offset: -4px;
-}
-
-.site-main .infinite-wrap .entry:first-of-type {
- margin-top: calc(6 * 1rem);
-}
-
-/**
- * Responsive Videos
- */
-.entry .jetpack-video-wrapper {
- margin-bottom: 1.75em;
-}
-
-/**
- * Sharing
- */
-
-.sd-block {
- line-height: 1;
-}
-
-.entry div.sharedaddy h3.sd-title,
-.entry h3.sd-title {
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
- font-size: 1.125em;
- font-weight: 700;
- letter-spacing: -0.02em;
- line-height: 1.2;
- margin-bottom: 0.5em;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-.entry div.sharedaddy h3.sd-title:before,
-.entry h3.sd-title:before {
- background: #767676;
- border-top: none;
- content: "\020";
- display: block;
- height: 2px;
- margin: 1rem 0;
- width: 1em;
- min-width: inherit;
-}
-
-.sd-social-icon-text .sd-content ul,
-.sd-social-text .sd-content ul {
- margin-bottom: -0.3125em !important;
-}
-
-.sd-social-icon .sd-content ul,
-.sd-social-official .sd-content ul {
- margin-bottom: 0 !important;
-}
-
-.entry #sharing_email .sharing_send,
-.entry .sd-content ul li .option a.share-ustom,
-.entry .sd-content ul li a.sd-button,
-.entry .sd-content ul li.advanced a.share-more,
-.entry .sd-content ul li.preview-item div.option.option-smart-off a,
-.entry .sd-social-icon .sd-content ul li a.sd-button,
-.entry .sd-social-icon-text .sd-content ul li a.sd-button,
-.entry .sd-social-official .sd-content > ul > li .digg_button > a,
-.entry .sd-social-official .sd-content > ul > li > a.sd-button,
-.entry .sd-social-text .sd-content ul li a.sd-button {
- box-shadow: none;
-}
-
-
-/**
- * Related Posts
- */
-
-.entry #jp-relatedposts {
- padding-top: 0;
- margin-top: 32px;
- margin-bottom: 32px;
-}
-
-.entry #jp-relatedposts h3.jp-relatedposts-headline {
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
- font-size: 1.125em;
- font-weight: 700;
- letter-spacing: -0.02em;
- line-height: 1.2;
- margin-bottom: 0.5em;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-.entry #jp-relatedposts h3.jp-relatedposts-headline:before {
- background: #767676;
- border-top: none;
- content: "\020";
- display: block;
- height: 2px;
- margin: 1rem 0;
- width: 1em;
- min-width: inherit;
-}
-
-.entry #jp-relatedposts h3.jp-relatedposts-headline em:before {
- display: none;
-}
-
-.entry #jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post {
- opacity: 1;
-}
-
-.entry #jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title,
-.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post {
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
- font-size: 1em;
- letter-spacing: -0.02em;
- line-height: 1.2;
- margin-bottom: 0.5em;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-.entry #jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title a,
-.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post span a {
- font-weight: 700;
-}
-
-.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title,
-.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-excerpt {
- margin-top: 0.5em;
- margin-bottom: 0.5em;
-}
-
-.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-context,
-.entry #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date {
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
- font-size: 13px;
- font-weight: 500;
-}
-
-.entry #jp-relatedposts .jp-relatedposts-items p,
-.entry #jp-relatedposts .jp-relatedposts-items-visual
-.entry h4.jp-relatedposts-post-title {
- letter-spacing: normal;
-}
-
-
-/**
- * Stats
- */
-
-#wpstats {
- display: none;
-}
-
-
-/**
- * Comments
- */
-
-.comments-area .comments-title-wrap + .comment-respond .comment-reply-title {
- display: none;
-}
-
-
-/**
- * Widgets
- */
-
-/* Widget List Resets */
-.widget_authors ul,
-.widget_author_grid ul,
-.widget_jp_blogs_i_follow ul,
-.widget_links ul,
-.widget_rss_links ul {
- list-style: none;
- padding-left: 0;
- padding-right: 0;
-}
-
-.widget_links li,
-.widget_jp_blogs_i_follow li,
-.widget_rss_links li {
- color: #767676;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
- font-size: calc(22px * 1.125);
- font-weight: 700;
- line-height: 1.2;
- margin-top: 0.5rem;
- margin-bottom: 0.5rem;
-}
-
-
-/* Authors Widget */
-.widget.widget_authors ul li > ul {
- list-style-type: disc;
- padding-left: 4.25rem;
-}
-
-.rtl .widget.widget_authors ul li > ul {
- padding-left: 0;
- padding-right: 1rem;
-}
-
-.widget_authors > ul > li > a {
- display: block;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
- position: relative;
-}
-
-.widget.widget_authors li a strong {
- line-height: 1.2;
- position: absolute;
- top: 0;
-}
-
-.widget.widget_authors .avatar {
- float: left;
- margin-right: 1em;
-}
-
-.widget_authors li > ul {
- clear: both;
-}
-
-/* Display WordPress Posts */
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4 {
- font-size: 100%;
- margin: 1rem 0;
-}
-
-/* GoodReads */
-.widget_goodreads div[class^="gr_custom_container"] {
- border: none;
-}
-
-.widget_goodreads div[class^="gr_custom_each_container"] {
- border-bottom: none;
- margin-bottom: 1rem;
- padding-bottom: 0;
-}
-
-.widget_goodreads h2[class^="gr_custom_header"],
-.widget_goodreads div[class^="gr_custom_author"] {
- font-size: inherit;
- line-height: 1.15;
-}
-
-/* EU cookie law */
-.widget_eu_cookie_law_widget #eu-cookie-law {
- border-color: #ccc;
- color: #767676;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
- font-size: 0.68182em;
- padding: 0.5rem 1rem;
-}
-
-.widget_eu_cookie_law_widget #eu-cookie-law .accept {
- font-size: 1em;
- padding: 10px 12px;
-}
-
-/* RSS Feed Widget */
-.widget_rss li a.rsswidget {
- display: block;
- margin: 1rem 0 0.5rem;
-}
-
-.widget_rss .rssSummary {
- font-family: "NonBreakingSpaceOverride", "Hoefler Text", "Baskerville Old Face", Garamond, "Times New Roman", serif;
- font-weight: 400;
- font-size: 22px;
-}
-
-.widget_rss cite,
-.widget_rss .rss-date {
- color: #9c9c9c;
- display: block;
- font-size: 0.71111em;
- font-weight: 500;
- margin: 0.5rem 0;
-}
-
-.widget_rss cite {
- font-style: normal;
-}
-
-.widget_rss cite:before {
- content: "\2014\00a0";
-}
-
-/* Top Posts & Pages Widget */
-.widget_top-posts .widgets-list-layout-links {
- float: inherit;
- margin-left: calc(40px + 1rem);
- width: inherit;
-}
-
-/* Search widget override */
-@media only screen and (min-width: 600px) {
- .widget.widget_search .search-field {
- max-width: calc( 50vw - 20% );
- }
-}
-
-/**
- * Content Options
- */
-.twentynineteen-customizer .entry .entry-meta > span,
-.twentynineteen-customizer .entry .entry-footer > span {
- display: inline;
-}
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentynineteen.php b/plugins/jetpack/modules/theme-tools/compat/twentynineteen.php
deleted file mode 100644
index fcc8b8c1..00000000
--- a/plugins/jetpack/modules/theme-tools/compat/twentynineteen.php
+++ /dev/null
@@ -1,126 +0,0 @@
-<?php
-/**
- * Jetpack Compatibility File
- * See: http://jetpack.com/
- */
-
-function twentynineteen_jetpack_setup() {
-
- /**
- * Add theme support for Infinite Scroll.
- */
- add_theme_support( 'infinite-scroll', array(
- 'type' => 'click',
- 'container' => 'main',
- 'render' => 'twentynineteen_infinite_scroll_render',
- 'footer' => 'page',
- ) );
-
- /**
- * Add theme support for Responsive Videos.
- */
- add_theme_support( 'jetpack-responsive-videos' );
-
- /**
- * Add theme support for geo-location.
- */
- add_theme_support( 'jetpack-geo-location' );
-
- /**
- * Add theme support for Content Options.
- */
- add_theme_support( 'jetpack-content-options', array(
- 'blog-display' => array( 'content', 'excerpt' ),
- 'post-details' => array(
- 'stylesheet' => 'twentynineteen-style',
- 'date' => '.posted-on',
- 'categories' => '.cat-links',
- 'tags' => '.tags-links',
- 'author' => '.byline',
- 'comment' => '.comments-link',
- ),
- 'featured-images' => array(
- 'archive' => true,
- 'post' => true,
- 'page' => true,
- ),
- ) );
-}
-add_action( 'after_setup_theme', 'twentynineteen_jetpack_setup' );
-
-/**
- * Custom render function for Infinite Scroll.
- */
-function twentynineteen_infinite_scroll_render() {
- while ( have_posts() ) {
- the_post();
- get_template_part( 'template-parts/content/content' );
- }
-}
-
-function twentynineteen_init_jetpack() {
- /**
- * Add our compat CSS file for Infinite Scroll and custom widget stylings and such.
- * Set the version equal to filemtime for development builds, and the JETPACK__VERSION for production
- * or skip it entirely for wpcom.
- */
- if ( ! is_admin() ) {
- $version = false;
- if ( method_exists( 'Jetpack', 'is_development_version' ) ) {
- $version = Jetpack::is_development_version() ? filemtime( plugin_dir_path( __FILE__ ) . 'twentynineteen.css' ) : JETPACK__VERSION;
- }
- wp_enqueue_style( 'twentynineteen-jetpack', plugins_url( 'twentynineteen.css', __FILE__ ), array(), $version );
- wp_style_add_data( 'twentynineteen-jetpack', 'rtl', 'replace' );
- }
-}
-add_action( 'init', 'twentynineteen_init_jetpack' );
-
-/**
- * Alter gallery widget default width.
- */
-function twentynineteen_gallery_widget_content_width( $width ) {
- return 390;
-}
-add_filter( 'gallery_widget_content_width', 'twentynineteen_gallery_widget_content_width' );
-
-/**
- * Alter featured-image default visibility for content-options.
- */
-function twentynineteen_override_post_thumbnail( $width ) {
- $options = get_theme_support( 'jetpack-content-options' );
- $featured_images = ( ! empty( $options[0]['featured-images'] ) ) ? $options[0]['featured-images'] : null;
-
- $settings = array(
- 'post-default' => ( isset( $featured_images['post-default'] ) && false === $featured_images['post-default'] ) ? '' : 1,
- 'page-default' => ( isset( $featured_images['page-default'] ) && false === $featured_images['page-default'] ) ? '' : 1,
- );
-
- $settings = array_merge( $settings, array(
- 'post-option' => get_option( 'jetpack_content_featured_images_post', $settings['post-default'] ),
- 'page-option' => get_option( 'jetpack_content_featured_images_page', $settings['page-default'] ),
- ) );
-
- if ( ( ! $settings['post-option'] && is_single() )
- || ( ! $settings['page-option'] && is_singular() && is_page() ) ) {
- return false;
- } else {
- return ! post_password_required() && ! is_attachment() && has_post_thumbnail();
- }
-}
-add_filter( 'twentynineteen_can_show_post_thumbnail', 'twentynineteen_override_post_thumbnail', 10, 2 );
-
-/**
- * Adds custom classes to the array of body classes.
- *
- * @param array $classes Classes for the body element.
- * @return array
- */
-function twentynineteen_jetpack_body_classes( $classes ) {
- // Adds a class if we're in the Customizer
- if ( is_customize_preview() ) :
- $classes[] = 'twentynineteen-customizer';
- endif;
-
- return $classes;
-}
-add_filter( 'body_class', 'twentynineteen_jetpack_body_classes' );
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentyseventeen.php b/plugins/jetpack/modules/theme-tools/compat/twentyseventeen.php
deleted file mode 100644
index 4a60e504..00000000
--- a/plugins/jetpack/modules/theme-tools/compat/twentyseventeen.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-/**
- * Jetpack Compatibility File
- * See: http://jetpack.com/
- */
-
-function twentyseventeen_jetpack_setup() {
- /**
- * Add theme support for geo-location.
- */
- add_theme_support( 'jetpack-geo-location' );
-}
-add_action( 'after_setup_theme', 'twentyseventeen_jetpack_setup' );
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentysixteen-rtl.css b/plugins/jetpack/modules/theme-tools/compat/twentysixteen-rtl.css
deleted file mode 100644
index d60c31a4..00000000
--- a/plugins/jetpack/modules/theme-tools/compat/twentysixteen-rtl.css
+++ /dev/null
@@ -1,832 +0,0 @@
-/**
- * Jetpack Comments
- */
-
-.comment-form iframe {
- margin: 0;
-}
-
-.comment-form .subscribe-label {
- font-weight: 400;
- letter-spacing: 0;
- text-transform: none;
-}
-
-.comment-subscription-form {
- margin: 1.75em 0 0;
-}
-
-.comment-subscription-form + .comment-subscription-form {
- margin-top: 0;
-}
-
-
-/**
- * Extra Widgets
- */
-
- /* Blog Subscriptions Widget */
-.jetpack_subscription_widget #subscribe-email input {
- padding: 0.625em 0.4375em;
- width: 100%;
-}
-
-.jetpack_subscription_widget form > :last-child {
- margin-bottom: 0;
-}
-
- /* Contact Info Widget */
-.widget_contact_info .contact-map {
- margin-bottom: 1.75em;
-}
-
-/* Display WordPress Posts Widget */
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts {
- margin: 0;
-}
-
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4 {
- font-size: inherit;
- margin: 0 0 0.875em;
-}
-
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts img {
- margin-bottom: 0.875em;
-}
-
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
- font-size: inherit;
- line-height: 1.75 !important;
- margin: 0 0 1.75em !important;
-}
-
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts > :last-child {
- margin-bottom: 0 !important;
-}
-
-/* Gallery Widget */
-.widget-gallery .slideshow-window {
- border-radius: 0;
-}
-
-/* Goodreads Widget */
-.widget_goodreads div[class^="gr_custom_container"] {
- background-color: transparent;
- border: 0;
- border-radius: 0;
- color: inherit;
- padding: 0;
-}
-
-.widget_goodreads div[class^="gr_custom_container"] a {
- color: inherit;
-}
-
-.widget_goodreads div[class^="gr_custom_each_container"] {
- border: 0;
- margin-bottom: 1.75em;
- padding-bottom: 0;
-}
-
-.widget_goodreads h2[class^="gr_custom_header"],
-.widget_goodreads div[class^="gr_custom_author"] {
- font-size: inherit;
-}
-
-/* Gravatar Profile Widget */
-.widget-grofile .grofile-thumbnail {
- width: 300px;
-}
-
-.widget-area .widget-grofile h4 {
- font-size: inherit;
- font-weight: 900;
- margin: 1.75em 0 0;
-}
-
-.widget-area .widget-grofile .grofile-accounts {
- margin-top: 0.4375em;
-}
-
-/* Image Widget */
-.widget_image .wp-caption {
- margin-bottom: 0;
-}
-
-/* RSS Links Widget */
-.widget_rss_links img {
- position: relative;
- top: -1px;
-}
-
-/* Social Media Icon Widget */
-.widget.widget_wpcom_social_media_icons_widget ul {
- margin: 0 0 -0.4375em;
-}
-
-.widget.widget_wpcom_social_media_icons_widget ul:before,
-.widget.widget_wpcom_social_media_icons_widget ul:after {
- content: "";
- display: table;
-}
-
-.widget.widget_wpcom_social_media_icons_widget ul:after {
- clear: both;
-}
-
-.widget.widget_wpcom_social_media_icons_widget li {
- float: right;
- margin: 0 0 0.4375em 0.4375em;
-}
-
-.widget.widget_wpcom_social_media_icons_widget li a {
- border: 1px solid currentColor;
- border-radius: 50%;
- color: inherit;
- display: block;
- height: 35px;
- position: relative;
- width: 35px;
-}
-
-.widget.widget_wpcom_social_media_icons_widget li a:before {
- height: 33px;
- line-height: 33px;
- text-align: center;
- width: 33px;
-}
-
-.widget.widget_wpcom_social_media_icons_widget li a:hover:before,
-.widget.widget_wpcom_social_media_icons_widget li a:focus:before {
- opacity: 0.8;
-}
-
-/* Social Icons Widget */
-.widget.jetpack_widget_social_icons ul {
- margin: 0 0 -0.4375em;
-}
-
-.widget.jetpack_widget_social_icons ul:before,
-.widget.jetpack_widget_social_icons ul:after {
- content: "";
- display: table;
-}
-
-.widget.jetpack_widget_social_icons ul:after {
- clear: both;
-}
-
-.widget.jetpack_widget_social_icons li {
- float: right;
- margin: 0 0 0.4375em 0.4375em;
-}
-
-.widget.jetpack_widget_social_icons li a {
- border: 1px solid currentColor;
- border-radius: 50%;
- color: inherit;
- display: block;
- position: relative;
-}
-
-.widget.jetpack_widget_social_icons li a:hover,
-.widget.jetpack_widget_social_icons li a:focus {
- opacity: 0.8;
-}
-
-.widget.jetpack_widget_social_icons ul.size-small a {
- height: 38px;
- padding: 6px;
- width: 38px;
-}
-
-.widget.jetpack_widget_social_icons ul.size-small svg {
- height: 24px;
- width: 24px;
-}
-
-.widget.jetpack_widget_social_icons ul.size-medium a {
- height: 50px;
- padding: 8px;
- width: 50px;
-}
-
-.widget.jetpack_widget_social_icons ul.size-medium svg {
- height: 32px;
- width: 32px;
-}
-
-.widget.jetpack_widget_social_icons ul.size-large a {
- height: 70px;
- padding: 10px;
- width: 70px;
-}
-
-.widget.jetpack_widget_social_icons ul.size-large svg {
- height: 48px;
- width: 48px;
-}
-
-/* Top Posts & Pages Widget */
-.widget_top-posts .widgets-list-layout .widgets-list-layout-blavatar {
- margin-top: 0.25em;
-}
-
-.widget_top-posts .widgets-list-layout-links {
- width: -webkit-calc(100% - 3.375em);
- width: calc(100% - 3.375em);
-}
-
-.widget_top-posts .widgets-list-layout li {
- margin-bottom: 0.875em;
-}
-
-.widget_top-posts .widgets-list-layout li:last-child {
- margin-bottom: 0;
-}
-
-.widget-grid-view-image:nth-child(odd) {
- clear: both;
-}
-
-/* Upcoming Events Widget */
-.widget_upcoming_events_widget .upcoming-events li {
- margin-bottom: 0.875em
-}
-
-
-/**
- * Shortcodes
- */
-
-/* Contact Form */
-.entry-content .contact-form label {
- color: inherit;
- display: block;
- font-family: Montserrat, "Helvetica Neue", sans-serif;
- font-size: 13px;
- font-size: 0.8125rem;
- font-weight: 400;
- letter-spacing: 0.076923077em;
- line-height: 1.6153846154;
- margin-bottom: 0.5384615385em;
- text-transform: uppercase;
-}
-
-.entry-content .contact-form label span {
- color: inherit;
- letter-spacing: 0;
- opacity: 0.7;
- text-transform: capitalize;
-}
-
-.entry-content .contact-form input[type="text"],
-.entry-content .contact-form input[type="email"],
-.entry-content .contact-form textarea {
- margin-bottom: 1.75em;
- max-width: 100%;
- width: 100%;
-}
-
-.entry-content .contact-form label.checkbox,
-.entry-content .contact-form label.radio {
- font-family: inherit;
- font-size: inherit;
- letter-spacing: 0;
- margin-bottom: 0;
- text-transform: none;
-}
-
-.entry-content .contact-form label.checkbox:nth-last-child(2),
-.entry-content .contact-form label.radio:nth-last-child(2) {
- margin-bottom: 0.875em;
-}
-
-.entry-content .contact-form input[type="radio"],
-.entry-content .contact-form input[type="checkbox"] {
- margin-bottom: 0.875em;
-}
-
-.entry-content .contact-form select {
- margin-bottom: 1.75em;
-}
-
-/* Facebook */
-.fb_iframe_widget {
- margin-bottom: 1.75em;
- max-width: 100%;
-}
-
-.fb_iframe_widget span {
- max-width: 100%;
-}
-
-/* Gist */
-.gist table {
- table-layout: auto;
-}
-
-.entry-content .gist .gist-file {
- margin-bottom: 1.75em;
-}
-
-/* Instagram */
-.instagram-media {
- margin-bottom: 1.75em !important;
-}
-
-/* Mixclound */
-iframe[src^="http://api.mixcloud.com/"] {
- margin-right: -8px;
- max-width: -webkit-calc(100% + 8px);
- max-width: calc(100% + 8px);
-}
-
-/* Crowdsignal */
-.PDS_Poll,
-.CSS_Poll {
- display: block !important;
- margin-bottom: 1.75em;
-}
-
-.PDS_Poll .pds-box,
-.CSS_Poll .css-box {
- max-width: 100%;
- width: auto;
-}
-
-/* Portfolio */
-.entry-content .portfolio-entry {
- margin-bottom: 1.75em;
-}
-
-.entry-content .portfolio-entry-title,
-.entry-content .portfolio-entry-meta {
- font-family: Montserrat, "Helvetica Neue", sans-serif;
-}
-
-.entry-content .portfolio-entry-title a,
-.entry-content .portfolio-entry-meta a {
- box-shadow: none;
-}
-
-.entry-content .portfolio-entry-title a:hover,
-.entry-content .portfolio-entry-meta a:hover {
- box-shadow: 0 1px 0 0 currentColor;
-}
-
-.entry-content .portfolio-entry-meta span,
-.entry-content .portfolio-entry-meta a {
- font-size: 1em;
-}
-
-.entry-content .portfolio-entry-title {
- font-size: inherit;
- line-height: 1.3125;
-}
-
-.entry-content .portfolio-featured-image + .portfolio-entry-title {
- margin-top: 0.875em;
- margin-bottom: 0.4375em;
-}
-
-.entry-content .portfolio-entry-meta,
-.entry-content .portfolio-entry-content p {
- font-size: 13px;
- font-size: 0.8125em;
- line-height: 1.615384615;
-}
-
-.entry-content .portfolio-entry-content p:last-child {
- margin-bottom: 0;
-}
-
-.entry-content .portfolio-entry-title + .portfolio-entry-meta {
- margin-top: 0.538461538em;
-}
-
-.entry-content .portfolio-entry-content {
- margin-top: 0.875em;
-}
-
-.entry-content .portfolio-entry-content p {
- margin-bottom: 1.615384615em;
-}
-
-/* Presentation */
-.entry-content .presentation-wrapper {
- margin: 0 0 1.75em;
- max-width: 100%;
-}
-
-.presentation {
- max-width: 100%;
-}
-
-/* Recipes */
-.entry-content .jetpack-recipe {
- border: 0;
- margin: 0 0 1.75em;
- padding: 0;
-}
-
-.entry-content .jetpack-recipe-title {
- border: 0;
- margin-top: 0;
- padding: 0;
-}
-
-.entry-content .jetpack-recipe .jetpack-recipe-meta {
- font-size: inherit;
- margin: 0;
-}
-
-/* Scribd */
-.scribd_iframe_embed + div {
- margin-bottom: 28px;
-}
-
-/* Slideshow */
-.entry-content .slideshow-window {
- border-radius: 0;
- margin-bottom: 1.75em;
-}
-
-/* Subscription Form */
-.entry-content .jetpack_subscription_widget {
- border-top: 0;
- font-size: inherit;
- margin-bottom: 1.75em;
- padding: 0;
-}
-
-.entry-content #subscribe-email input {
- font-size: inherit;
- line-height: normal;
- padding: 0.625em 0.4375em;
- width: 100%;
-}
-
-.entry-content .jetpack_subscription_widget input[type="submit"] {
- font-size: inherit;
- padding: 0.84375em 0.875em 0.78125em;
-}
-
-/* Testimonial */
-.entry-content .testimonial-entry {
- margin-bottom: 1.75em;
-}
-
-.entry-content .testimonial-entry-content {
- margin: 0;
-}
-
-.entry-content .testimonial-entry-title,
-.entry-content .testimonial-entry-content p {
- font-size: 13px;
- font-size: 0.8125em;
- line-height: 1.615384615;
- margin: 0;
-}
-
-.entry-content .testimonial-entry-content p {
- margin-bottom: 1.615384615em;
-}
-
-.entry-content .testimonial-entry-title {
- float: right;
-}
-
-.entry-content .testimonial-entry-title a {
- box-shadow: none;
-}
-
-.entry-content .testimonial-entry-title a:hover {
- box-shadow: 0 1px 0 0 currentColor;
-}
-
-.entry-content .testimonial-featured-image img {
- float: left;
- max-width: 42px;
-}
-
-/* Twitter-timeline */
-.twitter-timeline {
- margin-bottom: 1.75em !important;
-}
-
-
-/**
- * Responsive Videos
- */
-.hentry .jetpack-video-wrapper {
- margin-bottom: 1.75em;
-}
-
-
-/**
- * Related Posts
- */
-
-.entry-content #jp-relatedposts {
- margin: 0;
- padding: 1.75em 0;
- position: relative;
-}
-
-.jp-relatedposts:before,
-.jp-relatedposts:last-child:after {
- background-color: currentColor;
- content: "";
- height: 1px;
- opacity: 0.2;
- position: absolute;
- top: 0;
- right: 0;
- width: 100%;
-}
-
-.jp-relatedposts:last-child:after {
- bottom: 0;
- top: auto;
-}
-
-.entry-content #jp-relatedposts h3.jp-relatedposts-headline {
- color: inherit;
- font-family: Montserrat, "Helvetica Neue", sans-serif;
- font-size: 13px;
- font-size: 0.8125rem;
- font-weight: 400;
- line-height: 1;
- margin-bottom: 1.076923077em;
-}
-
-.entry-content #jp-relatedposts h3.jp-relatedposts-headline em:before {
- display: none;
-}
-
-.entry-content #jp-relatedposts h3.jp-relatedposts-headline em {
- font-weight: 400;
-}
-
-.entry-content #jp-relatedposts .jp-relatedposts-headline em:after {
- content: ":";
-}
-
-.jp-relatedposts-items:before,
-.jp-relatedposts-items:after {
- content: "";
- display: table;
-}
-
-.jp-relatedposts-items:after {
- clear: both;
-}
-
-.entry-content .jp-relatedposts-post-aoverlay,
-.entry-content .jp-relatedposts-post-a {
- box-shadow: none;
-}
-
-.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post {
- margin-bottom: 1.75em;
- width: 100%;
-}
-
-.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:last-child {
- margin-bottom: 0;
-}
-
-.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post span {
- max-width: 100%;
-}
-
-.entry-content #jp-relatedposts .jp-relatedposts-items p,
-.entry-content #jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title {
- font-size: 13px;
- font-size: 0.8125rem;
- letter-spacing: 0;
- line-height: 1.615384615;
-}
-
-.jp-relatedposts-post-date,
-.jp-relatedposts-post-context {
- font-family: Montserrat, "Helvetica Neue", sans-serif;
-}
-
-.jp-relatedposts-post-title,
-#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post-excerpt,
-.entry-content #jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title {
- margin-bottom: 1.076923077em;
-}
-
-.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a {
- font-weight: 700;
-}
-
-.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a:hover,
-.entry-content .jp-relatedposts-post-aoverlay:hover + .jp-relatedposts-post-title .jp-relatedposts-post-a {
- box-shadow: 0 1px 0 0 currentColor;
-}
-
-.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a:hover,
-.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover .jp-relatedposts-post-title a {
- text-decoration: none;
-}
-
-.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date,
-.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-context,
-.entry-content #jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post {
- opacity: 1;
-}
-
-.entry-content #jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post {
- padding-left: 0;
-}
-
-.entry-content .jp-relatedposts-post-a:hover img.jp-relatedposts-post-img,
-.entry-content .jp-relatedposts-post-a:focus img.jp-relatedposts-post-img {
- opacity: 0.85;
-}
-
-.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post img.jp-relatedposts-post-img {
- margin-bottom: 0.875em;
- max-width: 100%;
-}
-
-
-/**
- * Sharing
- */
-
-.sharedaddy {
- padding: 1.75em 0;
- position: relative;
-}
-
-.sharedaddy:before,
-.sharedaddy:last-child:after {
- background-color: currentColor;
- content: "";
- height: 1px;
- opacity: 0.2;
- position: absolute;
- top: 0;
- width: 100%;
-}
-
-.sharedaddy:last-child:after {
- bottom: 0;
- top: auto;
-}
-
-.sd-block {
- line-height: 1;
-}
-
-.sd-like {
- padding-bottom: 1.125em;
-}
-
-.hentry div.sharedaddy h3.sd-title,
-.hentry h3.sd-title {
- color: inherit;
- font-family: Montserrat, "Helvetica Neue", sans-serif;
- font-size: 13px;
- font-size: 0.8125rem;
- font-weight: 400;
- line-height: 1;
- margin-bottom: 1.076923077em;
-}
-
-.hentry div.sharedaddy h3.sd-title:before {
- display: none;
-}
-
-.sd-social-icon-text .sd-content ul,
-.sd-social-text .sd-content ul {
- margin-bottom: -0.3125em !important;
-}
-
-.sd-social-icon .sd-content ul {
- margin-bottom: 0 !important;
-}
-
-.sd-social-official .sd-content ul {
- margin-bottom: -0.625em !important;
-}
-
-.hentry #sharing_email .sharing_send,
-.hentry .sd-content ul li .option a.share-ustom,
-.hentry .sd-content ul li a.sd-button,
-.hentry .sd-content ul li.advanced a.share-more,
-.hentry .sd-content ul li.preview-item div.option.option-smart-off a,
-.hentry .sd-social-icon .sd-content ul li a.sd-button,
-.hentry .sd-social-icon-text .sd-content ul li a.sd-button,
-.hentry .sd-social-official .sd-content > ul > li .digg_button > a,
-.hentry .sd-social-official .sd-content > ul > li > a.sd-button,
-.hentry .sd-social-text .sd-content ul li a.sd-button {
- box-shadow: none;
-}
-
-
-/**
- * Stats
- */
-
-#wpstats {
- display: none;
-}
-
-
-/**
- * Tiled gallery
- */
-
-.entry-content .tiled-gallery {
- margin-bottom: 1.75em;
-}
-
-
-/**
- * Media Queries
- */
-
-@media screen and (min-width: 56.875em) {
- .widget-area .jetpack_subscription_widget #subscribe-email input {
- padding: 0.4615384615em 0.5384615385em;
- }
-
- .widget_contact_info .contact-map {
- margin-bottom: 1.615384615em;
- }
-
- .widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4,
- .widget_jetpack_display_posts_widget .jetpack-display-remote-posts img {
- margin-bottom: 1.076923077em;
- }
-
- .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
- line-height: 1.615384615em !important;
- margin: 0 0 1.615384615em !important;
- }
-
- .widget_goodreads div[class^="gr_custom_each_container"] {
- margin-bottom: 1.615384615em;
- }
-
- .widget-area .widget-grofile h4 {
- margin: 1.615384615em 0 0;
- }
-
- .widget-area .widget-grofile .grofile-accounts {
- margin-top: 0.538461538em;
- }
-
- .widget.widget_wpcom_social_media_icons_widget ul {
- margin: 0 0 -0.538461538em;
- }
-
- .widget.widget_wpcom_social_media_icons_widget li {
- margin: 0 0 0.538461538em 0.538461538em;
- }
-
- .widget_top-posts .widgets-list-layout .widgets-list-layout-blavatar {
- margin-top: 0.153846154em;
- }
-
- .widget_top-posts .widgets-list-layout-links {
- width: -webkit-calc(100% - 4.153846154em);
- width: calc(100% - 4.153846154em);
- }
-
- .widget_top-posts .widgets-list-layout li {
- margin-bottom: 1.076923077em;
- }
-
- .widget_upcoming_events_widget .upcoming-events li {
- margin-bottom: 1.076923077em
- }
-
- .entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post {
- margin-bottom: 0;
- padding-left: 0.875em;
- width: 33%;
- }
-}
-
-@media screen and (min-width: 61.5625em) {
- body:not(.search-results) article:not(.type-page) .sharedaddy:last-child,
- body:not(.search-results) article:not(.type-page) .jp-relatedposts:last-child {
- padding-bottom: 0;
- }
-
- body:not(.search-results) article:not(.type-page) .sharedaddy:last-child:after,
- body:not(.search-results) article:not(.type-page) .jp-relatedposts:last-child:after {
- display: none;
- }
-
- body:not(.search-results) article:not(.type-page) img.below-entry-meta {
- width: auto;
- }
-}
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentysixteen.css b/plugins/jetpack/modules/theme-tools/compat/twentysixteen.css
deleted file mode 100644
index acc056cf..00000000
--- a/plugins/jetpack/modules/theme-tools/compat/twentysixteen.css
+++ /dev/null
@@ -1,827 +0,0 @@
-/**
- * Jetpack Comments
- */
-
-.comment-form iframe {
- margin: 0;
-}
-
-.comment-form .subscribe-label {
- font-weight: 400;
- letter-spacing: 0;
- text-transform: none;
-}
-
-.comment-subscription-form {
- margin: 1.75em 0 0;
-}
-
-.comment-subscription-form + .comment-subscription-form {
- margin-top: 0;
-}
-
-
-/**
- * Extra Widgets
- */
-
- /* Blog Subscriptions Widget */
-.jetpack_subscription_widget #subscribe-email input {
- padding: 0.625em 0.4375em;
- width: 100%;
-}
-
-.jetpack_subscription_widget form > :last-child {
- margin-bottom: 0;
-}
-
- /* Contact Info Widget */
-.widget_contact_info .contact-map {
- margin-bottom: 1.75em;
-}
-
-/* Display WordPress Posts Widget */
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts {
- margin: 0;
-}
-
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4 {
- font-size: inherit;
- margin: 0 0 0.875em;
-}
-
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts img {
- margin-bottom: 0.875em;
-}
-
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
- font-size: inherit;
- line-height: 1.75 !important;
- margin: 0 0 1.75em !important;
-}
-
-.widget_jetpack_display_posts_widget .jetpack-display-remote-posts > :last-child {
- margin-bottom: 0 !important;
-}
-
-/* Gallery Widget */
-.widget-gallery .slideshow-window {
- border-radius: 0;
-}
-
-/* Goodreads Widget */
-.widget_goodreads div[class^="gr_custom_container"] {
- background-color: transparent;
- border: 0;
- border-radius: 0;
- color: inherit;
- padding: 0;
-}
-
-.widget_goodreads div[class^="gr_custom_container"] a {
- color: inherit;
-}
-
-.widget_goodreads div[class^="gr_custom_each_container"] {
- border: 0;
- margin-bottom: 1.75em;
- padding-bottom: 0;
-}
-
-.widget_goodreads h2[class^="gr_custom_header"],
-.widget_goodreads div[class^="gr_custom_author"] {
- font-size: inherit;
-}
-
-/* Gravatar Profile Widget */
-.widget-grofile .grofile-thumbnail {
- width: 300px;
-}
-
-.widget-area .widget-grofile h4 {
- font-size: inherit;
- font-weight: 900;
- margin: 1.75em 0 0;
-}
-
-.widget-area .widget-grofile .grofile-accounts {
- margin-top: 0.4375em;
-}
-
-/* Image Widget */
-.widget_image .wp-caption {
- margin-bottom: 0;
-}
-
-/* RSS Links Widget */
-.widget_rss_links img {
- position: relative;
- top: -1px;
-}
-
-/* Social Media Icon Widget */
-.widget.widget_wpcom_social_media_icons_widget ul {
- margin: 0 0 -0.4375em;
-}
-
-.widget.widget_wpcom_social_media_icons_widget ul:before,
-.widget.widget_wpcom_social_media_icons_widget ul:after {
- content: "";
- display: table;
-}
-
-.widget.widget_wpcom_social_media_icons_widget ul:after {
- clear: both;
-}
-
-.widget.widget_wpcom_social_media_icons_widget li {
- float: left;
- margin: 0 0.4375em 0.4375em 0;
-}
-
-.widget.widget_wpcom_social_media_icons_widget li a {
- border: 1px solid currentColor;
- border-radius: 50%;
- color: inherit;
- display: block;
- height: 35px;
- position: relative;
- width: 35px;
-}
-
-.widget.widget_wpcom_social_media_icons_widget li a:before {
- height: 33px;
- line-height: 33px;
- text-align: center;
- width: 33px;
-}
-
-.widget.widget_wpcom_social_media_icons_widget li a:hover:before,
-.widget.widget_wpcom_social_media_icons_widget li a:focus:before {
- opacity: 0.8;
-}
-
-/* Social Icons Widget */
-.widget.jetpack_widget_social_icons ul {
- margin: 0 0 -0.4375em;
-}
-
-.widget.jetpack_widget_social_icons ul:before,
-.widget.jetpack_widget_social_icons ul:after {
- content: "";
- display: table;
-}
-
-.widget.jetpack_widget_social_icons ul:after {
- clear: both;
-}
-
-.widget.jetpack_widget_social_icons li {
- float: left;
- margin: 0 0.4375em 0.4375em 0;
-}
-
-.widget.jetpack_widget_social_icons li a {
- border: 1px solid currentColor;
- border-radius: 50%;
- color: inherit;
- display: block;
- position: relative;
-}
-
-.widget.jetpack_widget_social_icons li a:hover,
-.widget.jetpack_widget_social_icons li a:focus {
- opacity: 0.8;
-}
-
-.widget.jetpack_widget_social_icons ul.size-small a {
- height: 38px;
- padding: 6px;
- width: 38px;
-}
-
-.widget.jetpack_widget_social_icons ul.size-small svg {
- height: 24px;
- width: 24px;
-}
-
-.widget.jetpack_widget_social_icons ul.size-medium a {
- height: 50px;
- padding: 8px;
- width: 50px;
-}
-
-.widget.jetpack_widget_social_icons ul.size-medium svg {
- height: 32px;
- width: 32px;
-}
-
-.widget.jetpack_widget_social_icons ul.size-large a {
- height: 70px;
- padding: 10px;
- width: 70px;
-}
-
-.widget.jetpack_widget_social_icons ul.size-large svg {
- height: 48px;
- width: 48px;
-}
-
-/* Top Posts & Pages Widget */
-.widget_top-posts .widgets-list-layout .widgets-list-layout-blavatar {
- margin-top: 0.25em;
-}
-
-.widget_top-posts .widgets-list-layout-links {
- width: -webkit-calc(100% - 3.375em);
- width: calc(100% - 3.375em);
-}
-
-.widget_top-posts .widgets-list-layout li {
- margin-bottom: 0.875em;
-}
-
-.widget_top-posts .widgets-list-layout li:last-child {
- margin-bottom: 0;
-}
-
-.widget-grid-view-image:nth-child(odd) {
- clear: both;
-}
-
-/* Upcoming Events Widget */
-.widget_upcoming_events_widget .upcoming-events li {
- margin-bottom: 0.875em
-}
-
-/**
- * Shortcodes
- */
-
-/* Contact Form */
-.entry-content .contact-form label {
- color: inherit;
- display: block;
- font-family: Montserrat, "Helvetica Neue", sans-serif;
- font-size: 13px;
- font-size: 0.8125rem;
- font-weight: 400;
- letter-spacing: 0.076923077em;
- line-height: 1.6153846154;
- margin-bottom: 0.5384615385em;
- text-transform: uppercase;
-}
-
-.entry-content .contact-form label span {
- color: inherit;
- letter-spacing: 0;
- opacity: 0.7;
- text-transform: capitalize;
-}
-
-.entry-content .contact-form input[type="text"],
-.entry-content .contact-form input[type="email"],
-.entry-content .contact-form textarea {
- margin-bottom: 1.75em;
- max-width: 100%;
- width: 100%;
-}
-
-.entry-content .contact-form label.checkbox,
-.entry-content .contact-form label.radio {
- font-family: inherit;
- font-size: inherit;
- letter-spacing: 0;
- margin-bottom: 0;
- text-transform: none;
-}
-
-.entry-content .contact-form label.checkbox:nth-last-child(2),
-.entry-content .contact-form label.radio:nth-last-child(2) {
- margin-bottom: 0.875em;
-}
-
-.entry-content .contact-form input[type="radio"],
-.entry-content .contact-form input[type="checkbox"] {
- margin-bottom: 0.875em;
-}
-
-.entry-content .contact-form select {
- margin-bottom: 1.75em;
-}
-
-/* Facebook */
-.fb_iframe_widget {
- margin-bottom: 1.75em;
- max-width: 100%;
-}
-
-.fb_iframe_widget span {
- max-width: 100%;
-}
-
-/* Gist */
-.gist table {
- table-layout: auto;
-}
-
-.entry-content .gist .gist-file {
- margin-bottom: 1.75em;
-}
-
-/* Instagram */
-.instagram-media {
- margin-bottom: 1.75em !important;
-}
-
-/* Mixclound */
-iframe[src^="http://api.mixcloud.com/"] {
- margin-left: -8px;
- max-width: -webkit-calc(100% + 8px);
- max-width: calc(100% + 8px);
-}
-
-/* Crowdsignal */
-.PDS_Poll,
-.CSS_Poll {
- display: block !important;
- margin-bottom: 1.75em;
-}
-
-.PDS_Poll .pds-box,
-.CSS_Poll .css-box {
- max-width: 100%;
- width: auto;
-}
-
-/* Portfolio */
-.entry-content .portfolio-entry {
- margin-bottom: 1.75em;
-}
-
-.entry-content .portfolio-entry-title,
-.entry-content .portfolio-entry-meta {
- font-family: Montserrat, "Helvetica Neue", sans-serif;
-}
-
-.entry-content .portfolio-entry-title a,
-.entry-content .portfolio-entry-meta a {
- box-shadow: none;
-}
-
-.entry-content .portfolio-entry-title a:hover,
-.entry-content .portfolio-entry-meta a:hover {
- box-shadow: 0 1px 0 0 currentColor;
-}
-
-.entry-content .portfolio-entry-meta span,
-.entry-content .portfolio-entry-meta a {
- font-size: 1em;
-}
-
-.entry-content .portfolio-entry-title {
- font-size: inherit;
- line-height: 1.3125;
-}
-
-.entry-content .portfolio-featured-image + .portfolio-entry-title {
- margin-top: 0.875em;
- margin-bottom: 0.4375em;
-}
-
-.entry-content .portfolio-entry-meta,
-.entry-content .portfolio-entry-content p {
- font-size: 13px;
- font-size: 0.8125em;
- line-height: 1.615384615;
-}
-
-.entry-content .portfolio-entry-content p:last-child {
- margin-bottom: 0;
-}
-
-.entry-content .portfolio-entry-title + .portfolio-entry-meta {
- margin-top: 0.538461538em;
-}
-
-.entry-content .portfolio-entry-content {
- margin-top: 0.875em;
-}
-
-.entry-content .portfolio-entry-content p {
- margin-bottom: 1.615384615em;
-}
-
-/* Presentation */
-.entry-content .presentation-wrapper {
- margin: 0 0 1.75em;
- max-width: 100%;
-}
-
-.presentation {
- max-width: 100%;
-}
-
-/* Recipes */
-.entry-content .jetpack-recipe {
- border: 0;
- margin: 0 0 1.75em;
- padding: 0;
-}
-
-.entry-content .jetpack-recipe-title {
- border: 0;
- margin-top: 0;
- padding: 0;
-}
-
-.entry-content .jetpack-recipe .jetpack-recipe-meta {
- font-size: inherit;
- margin: 0;
-}
-
-/* Scribd */
-.scribd_iframe_embed + div {
- margin-bottom: 28px;
-}
-
-/* Slideshow */
-.entry-content .slideshow-window {
- border-radius: 0;
- margin-bottom: 1.75em;
-}
-
-/* Subscription Form */
-.entry-content .jetpack_subscription_widget {
- border-top: 0;
- font-size: inherit;
- margin-bottom: 1.75em;
- padding: 0;
-}
-
-.entry-content #subscribe-email input {
- font-size: inherit;
- line-height: normal;
- padding: 0.625em 0.4375em;
- width: 100%;
-}
-
-.entry-content .jetpack_subscription_widget input[type="submit"] {
- font-size: inherit;
- padding: 0.84375em 0.875em 0.78125em;
-}
-
-/* Testimonial */
-.entry-content .testimonial-entry {
- margin-bottom: 1.75em;
-}
-
-.entry-content .testimonial-entry-content {
- margin: 0;
-}
-
-.entry-content .testimonial-entry-title,
-.entry-content .testimonial-entry-content p {
- font-size: 13px;
- font-size: 0.8125em;
- line-height: 1.615384615;
- margin: 0;
-}
-
-.entry-content .testimonial-entry-content p {
- margin-bottom: 1.615384615em;
-}
-
-.entry-content .testimonial-entry-title {
- float: left;
-}
-
-.entry-content .testimonial-entry-title a {
- box-shadow: none;
-}
-
-.entry-content .testimonial-entry-title a:hover {
- box-shadow: 0 1px 0 0 currentColor;
-}
-
-.entry-content .testimonial-featured-image img {
- float: right;
- max-width: 42px;
-}
-
-/* Twitter-timeline */
-.twitter-timeline {
- margin-bottom: 1.75em !important;
-}
-
-
-/**
- * Responsive Videos
- */
-.hentry .jetpack-video-wrapper {
- margin-bottom: 1.75em;
-}
-
-
-/**
- * Related Posts
- */
-
-.entry-content #jp-relatedposts {
- margin: 0;
- padding: 1.75em 0;
- position: relative;
-}
-
-.jp-relatedposts:before,
-.jp-relatedposts:last-child:after {
- background-color: currentColor;
- content: "";
- height: 1px;
- opacity: 0.2;
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
-}
-
-.jp-relatedposts:last-child:after {
- bottom: 0;
- top: auto;
-}
-
-.entry-content #jp-relatedposts h3.jp-relatedposts-headline {
- color: inherit;
- font-family: Montserrat, "Helvetica Neue", sans-serif;
- font-size: 13px;
- font-size: 0.8125rem;
- font-weight: 400;
- line-height: 1;
- margin-bottom: 1.076923077em;
-}
-
-.entry-content #jp-relatedposts h3.jp-relatedposts-headline em:before {
- display: none;
-}
-
-.entry-content #jp-relatedposts h3.jp-relatedposts-headline em {
- font-weight: 400;
-}
-
-.jp-relatedposts-items:before,
-.jp-relatedposts-items:after {
- content: "";
- display: table;
-}
-
-.jp-relatedposts-items:after {
- clear: both;
-}
-
-.entry-content .jp-relatedposts-post-aoverlay,
-.entry-content .jp-relatedposts-post-a {
- box-shadow: none;
-}
-
-.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post {
- margin-bottom: 1.75em;
- width: 100%;
-}
-
-.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:last-child {
- margin-bottom: 0;
-}
-
-.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post span {
- max-width: 100%;
-}
-
-.entry-content #jp-relatedposts .jp-relatedposts-items p,
-.entry-content #jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title {
- font-size: 13px;
- font-size: 0.8125rem;
- letter-spacing: 0;
- line-height: 1.615384615;
-}
-
-.jp-relatedposts-post-date,
-.jp-relatedposts-post-context {
- font-family: Montserrat, "Helvetica Neue", sans-serif;
-}
-
-.jp-relatedposts-post-title,
-#jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post-excerpt,
-.entry-content #jp-relatedposts .jp-relatedposts-items-visual h4.jp-relatedposts-post-title {
- margin-bottom: 1.076923077em;
-}
-
-.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a {
- font-weight: 700;
-}
-
-.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a:hover,
-.entry-content .jp-relatedposts-post-aoverlay:hover + .jp-relatedposts-post-title .jp-relatedposts-post-a {
- box-shadow: 0 1px 0 0 currentColor;
-}
-
-.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-title a:hover,
-.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post:hover .jp-relatedposts-post-title a {
- text-decoration: none;
-}
-
-.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-date,
-.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post .jp-relatedposts-post-context,
-.entry-content #jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post {
- opacity: 1;
-}
-
-.entry-content #jp-relatedposts .jp-relatedposts-items-visual .jp-relatedposts-post {
- padding-right: 0;
-}
-
-.entry-content .jp-relatedposts-post-a:hover img.jp-relatedposts-post-img,
-.entry-content .jp-relatedposts-post-a:focus img.jp-relatedposts-post-img {
- opacity: 0.85;
-}
-
-.entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post img.jp-relatedposts-post-img {
- margin-bottom: 0.875em;
- max-width: 100%;
-}
-
-
-/**
- * Sharing
- */
-
-.sharedaddy {
- padding: 1.75em 0;
- position: relative;
-}
-
-.sharedaddy:before,
-.sharedaddy:last-child:after {
- background-color: currentColor;
- content: "";
- height: 1px;
- opacity: 0.2;
- position: absolute;
- top: 0;
- width: 100%;
-}
-
-.sharedaddy:last-child:after {
- bottom: 0;
- top: auto;
-}
-
-.sd-block {
- line-height: 1;
-}
-
-.sd-like {
- padding-bottom: 1.125em;
-}
-
-.hentry div.sharedaddy h3.sd-title,
-.hentry h3.sd-title {
- color: inherit;
- font-family: Montserrat, "Helvetica Neue", sans-serif;
- font-size: 13px;
- font-size: 0.8125rem;
- font-weight: 400;
- line-height: 1;
- margin-bottom: 1.076923077em;
-}
-
-.hentry div.sharedaddy h3.sd-title:before {
- display: none;
-}
-
-.sd-social-icon-text .sd-content ul,
-.sd-social-text .sd-content ul {
- margin-bottom: -0.3125em !important;
-}
-
-.sd-social-icon .sd-content ul {
- margin-bottom: 0 !important;
-}
-
-.sd-social-official .sd-content ul {
- margin-bottom: -0.625em !important;
-}
-
-.hentry #sharing_email .sharing_send,
-.hentry .sd-content ul li .option a.share-ustom,
-.hentry .sd-content ul li a.sd-button,
-.hentry .sd-content ul li.advanced a.share-more,
-.hentry .sd-content ul li.preview-item div.option.option-smart-off a,
-.hentry .sd-social-icon .sd-content ul li a.sd-button,
-.hentry .sd-social-icon-text .sd-content ul li a.sd-button,
-.hentry .sd-social-official .sd-content > ul > li .digg_button > a,
-.hentry .sd-social-official .sd-content > ul > li > a.sd-button,
-.hentry .sd-social-text .sd-content ul li a.sd-button {
- box-shadow: none;
-}
-
-
-/**
- * Stats
- */
-
-#wpstats {
- display: none;
-}
-
-
-/**
- * Tiled gallery
- */
-
-.entry-content .tiled-gallery {
- margin-bottom: 1.75em;
-}
-
-
-/**
- * Media Queries
- */
-
-@media screen and (min-width: 56.875em) {
- .widget-area .jetpack_subscription_widget #subscribe-email input {
- padding: 0.4615384615em 0.5384615385em;
- }
-
- .widget_contact_info .contact-map {
- margin-bottom: 1.615384615em;
- }
-
- .widget_jetpack_display_posts_widget .jetpack-display-remote-posts h4,
- .widget_jetpack_display_posts_widget .jetpack-display-remote-posts img {
- margin-bottom: 1.076923077em;
- }
-
- .widget_jetpack_display_posts_widget .jetpack-display-remote-posts p {
- line-height: 1.615384615em !important;
- margin: 0 0 1.615384615em !important;
- }
-
- .widget_goodreads div[class^="gr_custom_each_container"] {
- margin-bottom: 1.615384615em;
- }
-
- .widget-area .widget-grofile h4 {
- margin: 1.615384615em 0 0;
- }
-
- .widget-area .widget-grofile .grofile-accounts {
- margin-top: 0.538461538em;
- }
-
- .widget.widget_wpcom_social_media_icons_widget ul {
- margin: 0 0 -0.538461538em;
- }
-
- .widget.widget_wpcom_social_media_icons_widget li {
- margin: 0 0.538461538em 0.538461538em 0;
- }
-
- .widget_top-posts .widgets-list-layout .widgets-list-layout-blavatar {
- margin-top: 0.153846154em;
- }
-
- .widget_top-posts .widgets-list-layout-links {
- width: -webkit-calc(100% - 4.153846154em);
- width: calc(100% - 4.153846154em);
- }
-
- .widget_top-posts .widgets-list-layout li {
- margin-bottom: 1.076923077em;
- }
-
- .widget_upcoming_events_widget .upcoming-events li {
- margin-bottom: 1.076923077em
- }
-
- .entry-content #jp-relatedposts .jp-relatedposts-items .jp-relatedposts-post {
- margin-bottom: 0;
- padding-right: 0.875em;
- width: 33%;
- }
-}
-
-@media screen and (min-width: 61.5625em) {
- body:not(.search-results) article:not(.type-page) .sharedaddy:last-child,
- body:not(.search-results) article:not(.type-page) .jp-relatedposts:last-child {
- padding-bottom: 0;
- }
-
- body:not(.search-results) article:not(.type-page) .sharedaddy:last-child:after,
- body:not(.search-results) article:not(.type-page) .jp-relatedposts:last-child:after {
- display: none;
- }
-
- body:not(.search-results) article:not(.type-page) img.below-entry-meta {
- width: auto;
- }
-}
diff --git a/plugins/jetpack/modules/theme-tools/compat/twentysixteen.php b/plugins/jetpack/modules/theme-tools/compat/twentysixteen.php
deleted file mode 100644
index 816a74b5..00000000
--- a/plugins/jetpack/modules/theme-tools/compat/twentysixteen.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-/**
- * Jetpack Compatibility File
- * See: http://jetpack.com/
- */
-
-function twentysixteen_jetpack_setup() {
- /**
- * Add theme support for Responsive Videos.
- */
- add_theme_support( 'jetpack-responsive-videos' );
-
- /**
- * Add theme support for geo-location.
- */
- add_theme_support( 'jetpack-geo-location' );
-}
-add_action( 'after_setup_theme', 'twentysixteen_jetpack_setup' );
-
-function twentysixteen_init_jetpack() {
- /**
- * Add our compat CSS file for custom widget stylings and such.
- * Set the version equal to filemtime for development builds, and the JETPACK__VERSION for production
- * or skip it entirely for wpcom.
- */
- if ( ! is_admin() ) {
- $version = false;
- if ( method_exists( 'Jetpack', 'is_development_version' ) ) {
- $version = Jetpack::is_development_version() ? filemtime( plugin_dir_path( __FILE__ ) . 'twentysixteen.css' ) : JETPACK__VERSION;
- }
- wp_enqueue_style( 'twentysixteen-jetpack', plugins_url( 'twentysixteen.css', __FILE__ ), array(), $version );
- wp_style_add_data( 'twentysixteen-jetpack', 'rtl', 'replace' );
- }
-}
-add_action( 'init', 'twentysixteen_init_jetpack' );
-
-/**
- * Alter gallery widget default width.
- */
-function twentysixteen_gallery_widget_content_width( $width ) {
- return 390;
-}
-add_filter( 'gallery_widget_content_width', 'twentysixteen_gallery_widget_content_width' );
-
-/**
- * Remove ratings from excerpts that are used as intro on blog index, single, and archive pages.
- */
-function twentysixteen_remove_share() {
- if ( is_single() || is_archive() || is_home() ) {
- remove_filter( 'the_excerpt', 'sharing_display', 19 );
- if ( class_exists( 'Jetpack_Likes' ) ) {
- remove_filter( 'the_excerpt', array( Jetpack_Likes::init(), 'post_likes' ), 30, 1 );
- }
- }
-}
-add_action( 'loop_start', 'twentysixteen_remove_share' );
-
-function twentysixteen_jetpack_lazy_images_compat() {
- // Since TwentySixteen outdents when window is resized, let's trigger a window resize
- // every time we lazy load an image on the TwentySixteen theme.
- wp_add_inline_script(
- 'jetpack-lazy-images',
- "jQuery( document.body ).on( 'jetpack-lazy-loaded-image', function () { jQuery( window ).trigger( 'resize' ); } );"
- );
-}
-
-// Priority needs to be 11 here so that we have already enqueued jetpack-lazy-images.
-add_action( 'wp_enqueue_scripts', 'twentysixteen_jetpack_lazy_images_compat', 11 );
diff --git a/plugins/jetpack/modules/theme-tools/content-options.php b/plugins/jetpack/modules/theme-tools/content-options.php
deleted file mode 100644
index 118e31db..00000000
--- a/plugins/jetpack/modules/theme-tools/content-options.php
+++ /dev/null
@@ -1,137 +0,0 @@
-<?php
-/**
- * Content Options.
- *
- * This feature will only be activated for themes that declare their support.
- * This can be done by adding code similar to the following during the
- * 'after_setup_theme' action:
- *
- add_theme_support( 'jetpack-content-options', array(
- 'blog-display' => 'content', // the default setting of the theme: 'content', 'excerpt' or array( 'content', 'excerpt' ) for themes mixing both display.
- 'author-bio' => true, // display or not the author bio: true or false.
- 'author-bio-default' => false, // the default setting of the author bio, if it's being displayed or not: true or false (only required if false).
- 'masonry' => '.site-main', // a CSS selector matching the elements that triggers a masonry refresh if the theme is using a masonry layout.
- 'post-details' => array(
- 'stylesheet' => 'themeslug-style', // name of the theme's stylesheet.
- 'date' => '.posted-on', // a CSS selector matching the elements that display the post date.
- 'categories' => '.cat-links', // a CSS selector matching the elements that display the post categories.
- 'tags' => '.tags-links', // a CSS selector matching the elements that display the post tags.
- 'author' => '.byline', // a CSS selector matching the elements that display the post author.
- 'comment' => '.comments-link', // a CSS selector matching the elements that display the comment link.
- ),
- 'featured-images' => array(
- 'archive' => true, // enable or not the featured image check for archive pages: true or false.
- 'archive-default' => false, // the default setting of the featured image on archive pages, if it's being displayed or not: true or false (only required if false).
- 'post' => true, // enable or not the featured image check for single posts: true or false.
- 'post-default' => false, // the default setting of the featured image on single posts, if it's being displayed or not: true or false (only required if false).
- 'page' => true, // enable or not the featured image check for single pages: true or false.
- 'page-default' => false, // the default setting of the featured image on single pages, if it's being displayed or not: true or false (only required if false).
- 'portfolio' => true, // enable or not the featured image check for single projects: true or false.
- 'portfolio-default' => false, // the default setting of the featured image on single projects, if it's being displayed or not: true or false (only required if false).
- 'fallback' => true, // enable or not the featured image fallback: true or false.
- 'fallback-default' => true, // the default setting for featured image fallbacks: true or false (only required if false)
- ),
- ) );
- */
-
-/**
- * Activate the Content Options plugin.
- *
- * @uses current_theme_supports()
- */
-function jetpack_content_options_init() {
- // If the theme doesn't support 'jetpack-content-options', don't continue.
- if ( ! current_theme_supports( 'jetpack-content-options' ) ) {
- return;
- }
-
- // Load the Customizer options.
- require dirname( __FILE__ ) . '/content-options/customizer.php';
-
- // Load Blog Display function.
- require dirname( __FILE__ ) . '/content-options/blog-display.php';
-
- // Load Author Bio function.
- require dirname( __FILE__ ) . '/content-options/author-bio.php';
-
- // Load Post Details function.
- require dirname( __FILE__ ) . '/content-options/post-details.php';
-
- // Load Featured Images function.
- if ( jetpack_featured_images_should_load() ) {
- require dirname( __FILE__ ) . '/content-options/featured-images.php';
- }
-
- // Load Featured Images Fallback function.
- if ( jetpack_featured_images_fallback_should_load() ) {
- require dirname( __FILE__ ) . '/content-options/featured-images-fallback.php';
- }
-}
-add_action( 'init', 'jetpack_content_options_init' );
-
-function jetpack_featured_images_get_settings() {
- $options = get_theme_support( 'jetpack-content-options' );
-
- $featured_images = ( ! empty( $options[0]['featured-images'] ) ) ? $options[0]['featured-images'] : null;
-
- $settings = array(
- 'archive' => ( ! empty( $featured_images['archive'] ) ) ? $featured_images['archive'] : null,
- 'post' => ( ! empty( $featured_images['post'] ) ) ? $featured_images['post'] : null,
- 'page' => ( ! empty( $featured_images['page'] ) ) ? $featured_images['page'] : null,
- 'portfolio' => ( ! empty( $featured_images['portfolio'] ) ) ? $featured_images['portfolio'] : null,
- 'archive-default' => ( isset( $featured_images['archive-default'] ) && false === $featured_images['archive-default'] ) ? '' : 1,
- 'post-default' => ( isset( $featured_images['post-default'] ) && false === $featured_images['post-default'] ) ? '' : 1,
- 'page-default' => ( isset( $featured_images['page-default'] ) && false === $featured_images['page-default'] ) ? '' : 1,
- 'portfolio-default' => ( isset( $featured_images['portfolio-default'] ) && false === $featured_images['portfolio-default'] ) ? '' : 1,
- 'fallback' => ( ! empty( $featured_images['fallback'] ) ) ? $featured_images['fallback'] : null,
- 'fallback-default' => ( isset( $featured_images['fallback-default'] ) && false === $featured_images['fallback-default'] ) ? '' : 1,
- );
-
- $settings = array_merge(
- $settings,
- array(
- 'archive-option' => get_option( 'jetpack_content_featured_images_archive', $settings['archive-default'] ),
- 'post-option' => get_option( 'jetpack_content_featured_images_post', $settings['post-default'] ),
- 'page-option' => get_option( 'jetpack_content_featured_images_page', $settings['page-default'] ),
- 'portfolio-option' => get_option( 'jetpack_content_featured_images_portfolio', $settings['portfolio-default'] ),
- 'fallback-option' => get_option( 'jetpack_content_featured_images_fallback', $settings['fallback-default'] ),
- )
- );
-
- return $settings;
-}
-
-function jetpack_featured_images_should_load() {
- // If the theme doesn't support post thumbnails, don't continue.
- if ( ! current_theme_supports( 'post-thumbnails' ) ) {
- return false;
- }
-
- $opts = jetpack_featured_images_get_settings();
-
- // If the theme doesn't support archive, post and page or if all the options are ticked and we aren't in the customizer, don't continue.
- if (
- ( true !== $opts['archive'] && true !== $opts['post'] && true !== $opts['page'] )
- || ( 1 === $opts['archive-option'] && 1 === $opts['post-option'] && 1 === $opts['page-option'] && ! is_customize_preview() )
- ) {
- return false;
- }
-
- return true;
-}
-
-function jetpack_featured_images_fallback_should_load() {
- // If the theme doesn't support post thumbnails, don't continue.
- if ( ! current_theme_supports( 'post-thumbnails' ) ) {
- return false;
- }
-
- $opts = jetpack_featured_images_get_settings();
-
- // If the theme doesn't support fallback, don't continue.
- if ( true !== $opts['fallback'] ) {
- return false;
- }
-
- return true;
-}
diff --git a/plugins/jetpack/modules/theme-tools/content-options/author-bio.php b/plugins/jetpack/modules/theme-tools/content-options/author-bio.php
deleted file mode 100644
index 89d4603c..00000000
--- a/plugins/jetpack/modules/theme-tools/content-options/author-bio.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-/**
- * The function to display Author Bio in a theme.
- */
-function jetpack_author_bio() {
- // If the theme doesn't support 'jetpack-content-options', don't continue.
- if ( ! current_theme_supports( 'jetpack-content-options' ) ) {
- return;
- }
-
- $options = get_theme_support( 'jetpack-content-options' );
- $author_bio = ( ! empty( $options[0]['author-bio'] ) ) ? $options[0]['author-bio'] : null;
- $author_bio_default = ( isset( $options[0]['author-bio-default'] ) && false === $options[0]['author-bio-default'] ) ? '' : 1;
-
- // If the theme doesn't support 'jetpack-content-options[ 'author-bio' ]', don't continue.
- if ( true !== $author_bio ) {
- return;
- }
-
- // If 'jetpack_content_author_bio' is false, don't continue.
- if ( ! get_option( 'jetpack_content_author_bio', $author_bio_default ) ) {
- return;
- }
-
- // If we aren't on a single post, don't continue.
- if ( ! is_single() ) {
- return;
- }
- ?>
- <div class="entry-author">
- <div class="author-avatar">
- <?php
- /**
- * Filter the author bio avatar size.
- *
- * @param int $size The avatar height and width size in pixels.
- *
- * @module theme-tools
- *
- * @since 4.5.0
- */
- $author_bio_avatar_size = apply_filters( 'jetpack_author_bio_avatar_size', 48 );
-
- echo get_avatar( get_the_author_meta( 'user_email' ), $author_bio_avatar_size );
- ?>
- </div><!-- .author-avatar -->
-
- <div class="author-heading">
- <h2 class="author-title"><?php printf( esc_html__( 'Published by %s', 'jetpack' ), '<span class="author-name">' . get_the_author() . '</span>' ); ?></h2>
- </div><!-- .author-heading -->
-
- <p class="author-bio">
- <?php the_author_meta( 'description' ); ?>
- <a class="author-link" href="<?php echo esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ); ?>" rel="author">
- <?php printf( esc_html__( 'View all posts by %s', 'jetpack' ), get_the_author() ); ?>
- </a>
- </p><!-- .author-bio -->
- </div><!-- .entry-auhtor -->
- <?php
-}
diff --git a/plugins/jetpack/modules/theme-tools/content-options/blog-display.php b/plugins/jetpack/modules/theme-tools/content-options/blog-display.php
deleted file mode 100644
index a3f74d0b..00000000
--- a/plugins/jetpack/modules/theme-tools/content-options/blog-display.php
+++ /dev/null
@@ -1,240 +0,0 @@
-<?php
-/**
- * The functions to display Content or Excerpt in a theme.
- */
-
-/**
- * If the theme doesn't support 'jetpack-content-options', don't continue.
- */
-if ( ! current_theme_supports( 'jetpack-content-options' ) ) {
- return;
-}
-
-/**
- * Get the Blog Display setting.
- * If theme is using both 'Content' and 'Excerpt' then this setting will be called 'Mixed'.
- */
-$options = get_theme_support( 'jetpack-content-options' );
-$blog_display = ( ! empty( $options[0]['blog-display'] ) ) ? $options[0]['blog-display'] : null;
-$blog_display = preg_grep( '/^(content|excerpt)$/', (array) $blog_display );
-sort( $blog_display );
-$blog_display = implode( ', ', $blog_display );
-$blog_display = ( 'content, excerpt' === $blog_display ) ? 'mixed' : $blog_display;
-
-/**
- * If the theme doesn't support 'jetpack-content-options[ 'blog-display' ]', don't continue.
- */
-if ( ! in_array( $blog_display, array( 'content', 'excerpt', 'mixed' ) ) ) {
- return;
-}
-
-/**
- * Apply Content filters.
- */
-function jetpack_blog_display_custom_excerpt( $content ) {
- $post = get_post();
- if ( empty( $post->post_excerpt ) ) {
- $text = strip_shortcodes( $post->post_content );
- $text = str_replace( ']]>', ']]&gt;', $text );
- $text = strip_tags( $text );
- /** This filter is documented in wp-includes/formatting.php */
- $excerpt_length = apply_filters( 'excerpt_length', 55 );
- /** This filter is documented in wp-includes/formatting.php */
- $excerpt_more = apply_filters( 'excerpt_more', ' ' . '[...]' );
-
- /*
- * translators: If your word count is based on single characters (e.g. East Asian characters),
- * enter 'characters_excluding_spaces' or 'characters_including_spaces'. Otherwise, enter 'words'.
- * Do not translate into your own language.
- */
- if ( strpos( _x( 'words', 'Word count type. Do not translate!' ), 'characters' ) === 0 && preg_match( '/^utf\-?8$/i', get_option( 'blog_charset' ) ) ) {
- $text = trim( preg_replace( "/[\n\r\t ]+/", ' ', $text ), ' ' );
- preg_match_all( '/./u', $text, $words );
- $words = array_slice( $words[0], 0, $excerpt_length + 1 );
- $sep = '';
- } else {
- $words = preg_split( "/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY );
- $sep = ' ';
- }
-
- if ( count( $words ) > $excerpt_length ) {
- array_pop( $words );
- $text = implode( $sep, $words );
- $text = $text . $excerpt_more;
- } else {
- $text = implode( $sep, $words );
- }
- } else {
- $text = wp_kses_post( $post->post_excerpt );
- }
- return sprintf( '<p>%s</p>', $text );
-}
-
-/**
- * Display Excerpt instead of Content.
- */
-function jetpack_the_content_to_the_excerpt( $content ) {
- if ( ( is_home() || is_archive() ) && ! is_post_type_archive( array( 'jetpack-testimonial', 'jetpack-portfolio', 'product' ) ) ) {
- if ( post_password_required() ) {
- $content = sprintf( '<p>%s</p>', esc_html__( 'There is no excerpt because this is a protected post.', 'jetpack' ) );
- } else {
- $content = jetpack_blog_display_custom_excerpt( $content );
- }
- }
- return $content;
-}
-
-/**
- * Display Content instead of Excerpt.
- */
-function jetpack_the_excerpt_to_the_content( $content ) {
- if ( ( is_home() || is_archive() ) && ! is_post_type_archive( array( 'jetpack-testimonial', 'jetpack-portfolio', 'product' ) ) ) {
- ob_start();
- the_content(
- sprintf(
- wp_kses(
- /* translators: %s: Name of current post. Only visible to screen readers */
- __( 'Continue reading<span class="screen-reader-text"> "%s"</span>', 'jetpack' ),
- array(
- 'span' => array(
- 'class' => array(),
- ),
- )
- ),
- get_the_title()
- )
- );
- $content = ob_get_clean();
- }
- return $content;
-}
-
-/**
- * Display both Content and Excerpt instead of Content in the Customizer so live preview can switch between them.
- */
-function jetpack_the_content_customizer( $content ) {
- $class = jetpack_the_content_customizer_class();
- if ( ( is_home() || is_archive() ) && ! is_post_type_archive( array( 'jetpack-testimonial', 'jetpack-portfolio', 'product' ) ) ) {
- if ( post_password_required() ) {
- $excerpt = sprintf( '<p>%s</p>', esc_html__( 'There is no excerpt because this is a protected post.', 'jetpack' ) );
- } else {
- $excerpt = jetpack_blog_display_custom_excerpt( $content );
- }
- }
- if ( empty( $excerpt ) ) {
- return $content;
- } else {
- return sprintf( '<div class="jetpack-blog-display %s jetpack-the-content">%s</div><div class="jetpack-blog-display %s jetpack-the-excerpt">%s</div>', $class, $content, $class, $excerpt );
- }
-}
-
-/**
- * Display both Content and Excerpt instead of Excerpt in the Customizer so live preview can switch between them.
- */
-function jetpack_the_excerpt_customizer( $excerpt ) {
- if ( ( is_home() || is_archive() ) && ! is_post_type_archive( array( 'jetpack-testimonial', 'jetpack-portfolio', 'product' ) ) ) {
- ob_start();
- the_content(
- sprintf(
- wp_kses(
- /* translators: %s: Name of current post. Only visible to screen readers */
- __( 'Continue reading<span class="screen-reader-text"> "%s"</span>', 'jetpack' ),
- array(
- 'span' => array(
- 'class' => array(),
- ),
- )
- ),
- get_the_title()
- )
- );
- $content = ob_get_clean();
- }
- if ( empty( $content ) ) {
- return $excerpt;
- } else {
- return sprintf( '<div class="jetpack-blog-display jetpack-the-content">%s</div><div class="jetpack-blog-display jetpack-the-excerpt">%s</div>', $content, $excerpt );
- }
-}
-
-/**
- * Display Content instead of Excerpt in the Customizer when theme uses a 'Mixed' display.
- */
-function jetpack_the_excerpt_mixed_customizer( $content ) {
- if ( ( is_home() || is_archive() ) && ! is_post_type_archive( array( 'jetpack-testimonial', 'jetpack-portfolio', 'product' ) ) ) {
- jetpack_the_content_customizer_class( 'output-the-excerpt' );
- ob_start();
- the_content();
- $content = ob_get_clean();
- }
- return $content;
-}
-
-/**
- * Returns a class value, `output-the-content` by default.
- * Used for themes with a 'Mixed' Blog Display so we can tell which output is by default.
- */
-function jetpack_the_content_customizer_class( $new_class = null ) {
- static $class;
- if ( isset( $new_class ) ) {
- // Assign a new class and return.
- $class = $new_class;
- } elseif ( isset( $class ) ) {
- // Reset the class after getting value.
- $prev_class = $class;
- $class = null;
- return $prev_class;
- } else {
- // Return default class value.
- return 'output-the-content';
- }
-}
-
-if ( is_customize_preview() ) {
- /*
- * Display Content and Excerpt if the default Blog Display is 'Content'
- * and we are in the Customizer.
- */
- if ( 'content' === $blog_display ) {
- add_filter( 'the_content', 'jetpack_the_content_customizer' );
- }
-
- /*
- * Display Content and Excerpt if the default Blog Display is 'Excerpt'
- * and we are in the Customizer.
- */
- if ( 'excerpt' === $blog_display ) {
- add_filter( 'the_excerpt', 'jetpack_the_excerpt_customizer' );
- }
-
- /*
- * Display Content and Excerpt if the default Blog Display is 'Mixed'
- * and we are in the Customizer.
- */
- if ( 'mixed' === $blog_display ) {
- add_filter( 'the_content', 'jetpack_the_content_customizer' );
- add_filter( 'the_excerpt', 'jetpack_the_excerpt_mixed_customizer' );
- }
-} else {
- $display_option = get_option( 'jetpack_content_blog_display', $blog_display );
-
- /*
- * Display Excerpt if the default Blog Display is 'Content'
- * or default Blog Display is 'Mixed'
- * and the Option picked is 'Post Excerpt'
- * and we aren't in the Customizer.
- */
- if ( ( 'content' === $blog_display || 'mixed' === $blog_display ) && 'excerpt' === $display_option ) {
- add_filter( 'the_content', 'jetpack_the_content_to_the_excerpt' );
- }
-
- /*
- * Display Content if the default Blog Display is 'Excerpt'
- * or default Blog Display is 'Mixed'
- * and the Option picked is 'Full Post'
- * and we aren't in the Customizer.
- */
- if ( ( 'excerpt' === $blog_display || 'mixed' === $blog_display ) && 'content' === $display_option ) {
- add_filter( 'the_excerpt', 'jetpack_the_excerpt_to_the_content' );
- }
-}
diff --git a/plugins/jetpack/modules/theme-tools/content-options/customizer.js b/plugins/jetpack/modules/theme-tools/content-options/customizer.js
deleted file mode 100644
index e6b9b132..00000000
--- a/plugins/jetpack/modules/theme-tools/content-options/customizer.js
+++ /dev/null
@@ -1,217 +0,0 @@
-/* global blogDisplay, postDetails */
-
-/**
- * customizer.js
- *
- * Theme Customizer enhancements for a better user experience.
- *
- * Contains handlers to make Theme Customizer preview reload changes asynchronously.
- */
-
-( function( $ ) {
- // Blog Display
- wp.customize( 'jetpack_content_blog_display', function( value ) {
- if ( 'content' === blogDisplay.display ) {
- $( '.jetpack-blog-display.jetpack-the-excerpt' ).css( {
- 'clip': 'rect(1px, 1px, 1px, 1px)',
- 'position': 'absolute'
- } );
- $( '.jetpack-blog-display.jetpack-the-content' ).css( {
- 'clip': 'auto',
- 'position': 'relative'
- } );
- } else if ( 'excerpt' === blogDisplay.display ) {
- $( '.jetpack-blog-display.jetpack-the-content' ).css( {
- 'clip': 'rect(1px, 1px, 1px, 1px)',
- 'position': 'absolute'
- } );
- $( '.jetpack-blog-display.jetpack-the-excerpt' ).css( {
- 'clip': 'auto',
- 'position': 'relative'
- } );
- } else if ( 'mixed' === blogDisplay.display ) {
- $( '.jetpack-blog-display.jetpack-the-content.output-the-content' ).css( {
- 'clip': 'auto',
- 'position': 'relative'
- } );
- $( '.jetpack-blog-display.jetpack-the-excerpt.output-the-content' ).css( {
- 'clip': 'rect(1px, 1px, 1px, 1px)',
- 'position': 'absolute'
- } );
- $( '.jetpack-blog-display.jetpack-the-content.output-the-excerpt' ).css( {
- 'clip': 'rect(1px, 1px, 1px, 1px)',
- 'position': 'absolute'
- } );
- $( '.jetpack-blog-display.jetpack-the-excerpt.output-the-excerpt' ).css( {
- 'clip': 'auto',
- 'position': 'relative'
- } );
- }
- value.bind( function( to ) {
- if ( 'content' === to ) {
- $( '.jetpack-blog-display.jetpack-the-excerpt' ).css( {
- 'clip': 'rect(1px, 1px, 1px, 1px)',
- 'position': 'absolute'
- } );
- $( '.jetpack-blog-display.jetpack-the-content' ).css( {
- 'clip': 'auto',
- 'position': 'relative'
- } );
- } else if ( 'excerpt' === to ) {
- $( '.jetpack-blog-display.jetpack-the-content' ).css( {
- 'clip': 'rect(1px, 1px, 1px, 1px)',
- 'position': 'absolute'
- } );
- $( '.jetpack-blog-display.jetpack-the-excerpt' ).css( {
- 'clip': 'auto',
- 'position': 'relative'
- } );
- } else if ( 'mixed' === to ) {
- $( '.jetpack-blog-display.jetpack-the-content.output-the-content' ).css( {
- 'clip': 'auto',
- 'position': 'relative'
- } );
- $( '.jetpack-blog-display.jetpack-the-excerpt.output-the-content' ).css( {
- 'clip': 'rect(1px, 1px, 1px, 1px)',
- 'position': 'absolute'
- } );
- $( '.jetpack-blog-display.jetpack-the-content.output-the-excerpt' ).css( {
- 'clip': 'rect(1px, 1px, 1px, 1px)',
- 'position': 'absolute'
- } );
- $( '.jetpack-blog-display.jetpack-the-excerpt.output-the-excerpt' ).css( {
- 'clip': 'auto',
- 'position': 'relative'
- } );
- }
- if ( blogDisplay.masonry ) {
- $( blogDisplay.masonry ).masonry();
- }
- } );
- } );
-
- // Post Details: Date.
- wp.customize( 'jetpack_content_post_details_date', function( value ) {
- value.bind( function( to ) {
- if ( false === to ) {
- $( postDetails.date ).css( {
- 'clip': 'rect(1px, 1px, 1px, 1px)',
- 'height': '1px',
- 'overflow': 'hidden',
- 'position': 'absolute',
- 'width': '1px'
- } );
- $( 'body' ).addClass( 'date-hidden' );
- } else {
- $( postDetails.date ).css( {
- 'clip': 'auto',
- 'height': 'auto',
- 'overflow': 'auto',
- 'position': 'relative',
- 'width': 'auto'
- } );
- $( 'body' ).removeClass( 'date-hidden' );
- }
- } );
- } );
-
- // Post Details: Categories.
- wp.customize( 'jetpack_content_post_details_categories', function( value ) {
- value.bind( function( to ) {
- if ( false === to ) {
- $( postDetails.categories ).css( {
- 'clip': 'rect(1px, 1px, 1px, 1px)',
- 'height': '1px',
- 'overflow': 'hidden',
- 'position': 'absolute',
- 'width': '1px'
- } );
- $( 'body' ).addClass( 'categories-hidden' );
- } else {
- $( postDetails.categories ).css( {
- 'clip': 'auto',
- 'height': 'auto',
- 'overflow': 'auto',
- 'position': 'relative',
- 'width': 'auto'
- } );
- $( 'body' ).removeClass( 'categories-hidden' );
- }
- } );
- } );
-
- // Post Details: Tags.
- wp.customize( 'jetpack_content_post_details_tags', function( value ) {
- value.bind( function( to ) {
- if ( false === to ) {
- $( postDetails.tags ).css( {
- 'clip': 'rect(1px, 1px, 1px, 1px)',
- 'height': '1px',
- 'overflow': 'hidden',
- 'position': 'absolute',
- 'width': '1px'
- } );
- $( 'body' ).addClass( 'tags-hidden' );
- } else {
- $( postDetails.tags ).css( {
- 'clip': 'auto',
- 'height': 'auto',
- 'overflow': 'auto',
- 'position': 'relative',
- 'width': 'auto'
- } );
- $( 'body' ).removeClass( 'tags-hidden' );
- }
- } );
- } );
-
- // Post Details: Author.
- wp.customize( 'jetpack_content_post_details_author', function( value ) {
- value.bind( function( to ) {
- if ( false === to ) {
- $( postDetails.author ).css( {
- 'clip': 'rect(1px, 1px, 1px, 1px)',
- 'height': '1px',
- 'overflow': 'hidden',
- 'position': 'absolute',
- 'width': '1px'
- } );
- $( 'body' ).addClass( 'author-hidden' );
- } else {
- $( postDetails.author ).css( {
- 'clip': 'auto',
- 'height': 'auto',
- 'overflow': 'auto',
- 'position': 'relative',
- 'width': 'auto'
- } );
- $( 'body' ).removeClass( 'author-hidden' );
- }
- } );
- } );
-
- // Post Details: Comment link.
- wp.customize( 'jetpack_content_post_details_comment', function( value ) {
- value.bind( function( to ) {
- if ( false === to ) {
- $( postDetails.comment ).css( {
- 'clip': 'rect(1px, 1px, 1px, 1px)',
- 'height': '1px',
- 'overflow': 'hidden',
- 'position': 'absolute',
- 'width': '1px'
- } );
- $( 'body' ).addClass( 'comment-hidden' );
- } else {
- $( postDetails.comment ).css( {
- 'clip': 'auto',
- 'height': 'auto',
- 'overflow': 'auto',
- 'position': 'relative',
- 'width': 'auto'
- } );
- $( 'body' ).removeClass( 'comment-hidden' );
- }
- } );
- } );
-} )( jQuery );
diff --git a/plugins/jetpack/modules/theme-tools/content-options/customizer.php b/plugins/jetpack/modules/theme-tools/content-options/customizer.php
deleted file mode 100644
index 844e5074..00000000
--- a/plugins/jetpack/modules/theme-tools/content-options/customizer.php
+++ /dev/null
@@ -1,482 +0,0 @@
-<?php
-/**
- * Add Content section to the Theme Customizer.
- *
- * @param WP_Customize_Manager $wp_customize Theme Customizer object.
- */
-function jetpack_content_options_customize_register( $wp_customize ) {
- $options = get_theme_support( 'jetpack-content-options' );
- $blog_display = ( ! empty( $options[0]['blog-display'] ) ) ? $options[0]['blog-display'] : null;
- $blog_display = preg_grep( '/^(content|excerpt)$/', (array) $blog_display );
- sort( $blog_display );
- $blog_display = implode( ', ', $blog_display );
- $blog_display = ( 'content, excerpt' === $blog_display ) ? 'mixed' : $blog_display;
- $author_bio = ( ! empty( $options[0]['author-bio'] ) ) ? $options[0]['author-bio'] : null;
- $author_bio_default = ( isset( $options[0]['author-bio-default'] ) && false === $options[0]['author-bio-default'] ) ? '' : 1;
- $post_details = ( ! empty( $options[0]['post-details'] ) ) ? $options[0]['post-details'] : null;
- $date = ( ! empty( $post_details['date'] ) ) ? $post_details['date'] : null;
- $categories = ( ! empty( $post_details['categories'] ) ) ? $post_details['categories'] : null;
- $tags = ( ! empty( $post_details['tags'] ) ) ? $post_details['tags'] : null;
- $author = ( ! empty( $post_details['author'] ) ) ? $post_details['author'] : null;
- $comment = ( ! empty( $post_details['comment'] ) ) ? $post_details['comment'] : null;
- $featured_images = ( ! empty( $options[0]['featured-images'] ) ) ? $options[0]['featured-images'] : null;
- $fi_archive = ( ! empty( $featured_images['archive'] ) ) ? $featured_images['archive'] : null;
- $fi_post = ( ! empty( $featured_images['post'] ) ) ? $featured_images['post'] : null;
- $fi_page = ( ! empty( $featured_images['page'] ) ) ? $featured_images['page'] : null;
- $fi_portfolio = ( ! empty( $featured_images['portfolio'] ) ) ? $featured_images['portfolio'] : null;
- $fi_fallback = ( ! empty( $featured_images['fallback'] ) ) ? $featured_images['fallback'] : null;
- $fi_archive_default = ( isset( $featured_images['archive-default'] ) && false === $featured_images['archive-default'] ) ? '' : 1;
- $fi_post_default = ( isset( $featured_images['post-default'] ) && false === $featured_images['post-default'] ) ? '' : 1;
- $fi_page_default = ( isset( $featured_images['page-default'] ) && false === $featured_images['page-default'] ) ? '' : 1;
- $fi_portfolio_default = ( isset( $featured_images['portfolio-default'] ) && false === $featured_images['portfolio-default'] ) ? '' : 1;
- $fi_fallback_default = ( isset( $featured_images['fallback-default'] ) && false === $featured_images['fallback-default'] ) ? '' : 1;
-
- // If the theme doesn't support 'jetpack-content-options[ 'blog-display' ]', 'jetpack-content-options[ 'author-bio' ]', 'jetpack-content-options[ 'post-details' ]' and 'jetpack-content-options[ 'featured-images' ]', don't continue.
- if ( ( ! in_array( $blog_display, array( 'content', 'excerpt', 'mixed' ) ) )
- && ( true !== $author_bio )
- && ( ( empty( $post_details['stylesheet'] ) )
- && ( empty( $date )
- || empty( $categories )
- || empty( $tags )
- || empty( $author )
- || empty( $comment ) ) )
- && ( true !== $fi_archive && true !== $fi_post && true !== $fi_page && true !== $fi_portfolio && true !== $fi_fallback ) ) {
- return;
- }
-
- // New control type: Title.
- class Jetpack_Customize_Control_Title extends WP_Customize_Control {
- public $type = 'title';
-
- public function render_content() {
- ?>
- <span class="customize-control-title"><?php echo wp_kses_post( $this->label ); ?></span>
- <?php
- }
- }
-
- // Add Content section.
- $wp_customize->add_section(
- 'jetpack_content_options',
- array(
- 'title' => esc_html__( 'Content Options', 'jetpack' ),
- 'theme_supports' => 'jetpack-content-options',
- 'priority' => 100,
- )
- );
-
- // Add Blog Display option.
- if ( in_array( $blog_display, array( 'content', 'excerpt', 'mixed' ) ) ) {
- if ( 'mixed' === $blog_display ) {
- $blog_display_choices = array(
- 'content' => esc_html__( 'Full post', 'jetpack' ),
- 'excerpt' => esc_html__( 'Post excerpt', 'jetpack' ),
- 'mixed' => esc_html__( 'Default', 'jetpack' ),
- );
-
- $blog_display_description = esc_html__( 'Choose between a full post or an excerpt for the blog and archive pages, or opt for the theme\'s default combination of excerpt and full post.', 'jetpack' );
- } else {
- $blog_display_choices = array(
- 'content' => esc_html__( 'Full post', 'jetpack' ),
- 'excerpt' => esc_html__( 'Post excerpt', 'jetpack' ),
- );
-
- $blog_display_description = esc_html__( 'Choose between a full post or an excerpt for the blog and archive pages.', 'jetpack' );
-
- if ( 'mixed' === get_option( 'jetpack_content_blog_display' ) ) {
- update_option( 'jetpack_content_blog_display', $blog_display );
- }
- }
-
- $wp_customize->add_setting(
- 'jetpack_content_blog_display',
- array(
- 'default' => $blog_display,
- 'type' => 'option',
- 'transport' => 'postMessage',
- 'sanitize_callback' => 'jetpack_content_options_sanitize_blog_display',
- )
- );
-
- $wp_customize->add_control(
- 'jetpack_content_blog_display',
- array(
- 'section' => 'jetpack_content_options',
- 'label' => esc_html__( 'Blog Display', 'jetpack' ),
- 'description' => $blog_display_description,
- 'type' => 'radio',
- 'choices' => $blog_display_choices,
- )
- );
- }
-
- // Add Author Bio option.
- if ( true === $author_bio ) {
- $wp_customize->add_setting( 'jetpack_content_author_bio_title' );
-
- $wp_customize->add_control(
- new Jetpack_Customize_Control_Title(
- $wp_customize,
- 'jetpack_content_author_bio_title',
- array(
- 'section' => 'jetpack_content_options',
- 'label' => esc_html__( 'Author Bio', 'jetpack' ),
- 'type' => 'title',
- )
- )
- );
-
- $wp_customize->add_setting(
- 'jetpack_content_author_bio',
- array(
- 'default' => $author_bio_default,
- 'type' => 'option',
- 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
- )
- );
-
- $wp_customize->add_control(
- 'jetpack_content_author_bio',
- array(
- 'section' => 'jetpack_content_options',
- 'label' => esc_html__( 'Display on single posts', 'jetpack' ),
- 'type' => 'checkbox',
- )
- );
- }
-
- // Add Post Details options.
- if ( ( ! empty( $post_details ) )
- && ( ! empty( $post_details['stylesheet'] ) )
- && ( ! empty( $date )
- || ! empty( $categories )
- || ! empty( $tags )
- || ! empty( $author )
- || ! empty( $comment ) ) ) {
- $wp_customize->add_setting( 'jetpack_content_post_details_title' );
-
- $wp_customize->add_control(
- new Jetpack_Customize_Control_Title(
- $wp_customize,
- 'jetpack_content_post_details_title',
- array(
- 'section' => 'jetpack_content_options',
- 'label' => esc_html__( 'Post Details', 'jetpack' ),
- 'type' => 'title',
- )
- )
- );
-
- // Post Details: Date
- if ( ! empty( $date ) ) {
- $wp_customize->add_setting(
- 'jetpack_content_post_details_date',
- array(
- 'default' => 1,
- 'type' => 'option',
- 'transport' => 'postMessage',
- 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
- )
- );
-
- $wp_customize->add_control(
- 'jetpack_content_post_details_date',
- array(
- 'section' => 'jetpack_content_options',
- 'label' => esc_html__( 'Display date', 'jetpack' ),
- 'type' => 'checkbox',
- )
- );
- }
-
- // Post Details: Categories
- if ( ! empty( $categories ) ) {
- $wp_customize->add_setting(
- 'jetpack_content_post_details_categories',
- array(
- 'default' => 1,
- 'type' => 'option',
- 'transport' => 'postMessage',
- 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
- )
- );
-
- $wp_customize->add_control(
- 'jetpack_content_post_details_categories',
- array(
- 'section' => 'jetpack_content_options',
- 'label' => esc_html__( 'Display categories', 'jetpack' ),
- 'type' => 'checkbox',
- )
- );
- }
-
- // Post Details: Tags
- if ( ! empty( $tags ) ) {
- $wp_customize->add_setting(
- 'jetpack_content_post_details_tags',
- array(
- 'default' => 1,
- 'type' => 'option',
- 'transport' => 'postMessage',
- 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
- )
- );
-
- $wp_customize->add_control(
- 'jetpack_content_post_details_tags',
- array(
- 'section' => 'jetpack_content_options',
- 'label' => esc_html__( 'Display tags', 'jetpack' ),
- 'type' => 'checkbox',
- )
- );
- }
-
- // Post Details: Author
- if ( ! empty( $author ) ) {
- $wp_customize->add_setting(
- 'jetpack_content_post_details_author',
- array(
- 'default' => 1,
- 'type' => 'option',
- 'transport' => 'postMessage',
- 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
- )
- );
-
- $wp_customize->add_control(
- 'jetpack_content_post_details_author',
- array(
- 'section' => 'jetpack_content_options',
- 'label' => esc_html__( 'Display author', 'jetpack' ),
- 'type' => 'checkbox',
- )
- );
- }
-
- // Post Details: Comment link
- if ( ! empty( $comment ) ) {
- $wp_customize->add_setting(
- 'jetpack_content_post_details_comment',
- array(
- 'default' => 1,
- 'type' => 'option',
- 'transport' => 'postMessage',
- 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
- )
- );
-
- $wp_customize->add_control(
- 'jetpack_content_post_details_comment',
- array(
- 'section' => 'jetpack_content_options',
- 'label' => esc_html__( 'Display comment link', 'jetpack' ),
- 'type' => 'checkbox',
- )
- );
- }
- }
-
- // Add Featured Images options.
- if ( true === $fi_archive || true === $fi_post || true === $fi_page || true === $fi_portfolio || true === $fi_fallback ) {
- $wp_customize->add_setting( 'jetpack_content_featured_images_title' );
-
- $wp_customize->add_control(
- new Jetpack_Customize_Control_Title(
- $wp_customize,
- 'jetpack_content_featured_images_title',
- array(
- 'section' => 'jetpack_content_options',
- 'label' => esc_html__( 'Featured Images', 'jetpack' ) . sprintf( '<a href="https://en.support.wordpress.com/featured-images/" class="customize-help-toggle dashicons dashicons-editor-help" title="%1$s" rel="noopener noreferrer" target="_blank"><span class="screen-reader-text">%1$s</span></a>', esc_html__( 'Learn more about Featured Images', 'jetpack' ) ),
- 'type' => 'title',
- 'active_callback' => 'jetpack_post_thumbnail_supports',
- )
- )
- );
-
- // Featured Images: Archive
- if ( true === $fi_archive ) {
- $wp_customize->add_setting(
- 'jetpack_content_featured_images_archive',
- array(
- 'default' => $fi_archive_default,
- 'type' => 'option',
- 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
- )
- );
-
- $wp_customize->add_control(
- 'jetpack_content_featured_images_archive',
- array(
- 'section' => 'jetpack_content_options',
- 'label' => esc_html__( 'Display on blog and archives', 'jetpack' ),
- 'type' => 'checkbox',
- 'active_callback' => 'jetpack_post_thumbnail_supports',
- )
- );
- }
-
- // Featured Images: Post
- if ( true === $fi_post ) {
- $wp_customize->add_setting(
- 'jetpack_content_featured_images_post',
- array(
- 'default' => $fi_post_default,
- 'type' => 'option',
- 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
- )
- );
-
- $wp_customize->add_control(
- 'jetpack_content_featured_images_post',
- array(
- 'section' => 'jetpack_content_options',
- 'label' => esc_html__( 'Display on single posts', 'jetpack' ),
- 'type' => 'checkbox',
- 'active_callback' => 'jetpack_post_thumbnail_supports',
- )
- );
- }
-
- // Featured Images: Page
- if ( true === $fi_page ) {
- $wp_customize->add_setting(
- 'jetpack_content_featured_images_page',
- array(
- 'default' => $fi_page_default,
- 'type' => 'option',
- 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
- )
- );
-
- $wp_customize->add_control(
- 'jetpack_content_featured_images_page',
- array(
- 'section' => 'jetpack_content_options',
- 'label' => esc_html__( 'Display on pages', 'jetpack' ),
- 'type' => 'checkbox',
- 'active_callback' => 'jetpack_post_thumbnail_supports',
- )
- );
- }
-
- // Featured Images: Portfolio
- if ( true === $fi_portfolio && post_type_exists( 'jetpack-portfolio' ) ) {
- $wp_customize->add_setting(
- 'jetpack_content_featured_images_portfolio',
- array(
- 'default' => $fi_portfolio_default,
- 'type' => 'option',
- 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
- )
- );
-
- $wp_customize->add_control(
- 'jetpack_content_featured_images_portfolio',
- array(
- 'section' => 'jetpack_content_options',
- 'label' => esc_html__( 'Display on single projects', 'jetpack' ),
- 'type' => 'checkbox',
- 'active_callback' => 'jetpack_post_thumbnail_supports',
- )
- );
- }
-
- // Featured Images: Fallback
- if ( true === $fi_fallback ) {
- $wp_customize->add_setting(
- 'jetpack_content_featured_images_fallback',
- array(
- 'default' => $fi_fallback_default,
- 'type' => 'option',
- 'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
- )
- );
-
- $wp_customize->add_control(
- 'jetpack_content_featured_images_fallback',
- array(
- 'section' => 'jetpack_content_options',
- 'label' => esc_html__( 'Automatically use first image in post', 'jetpack' ),
- 'type' => 'checkbox',
- 'active_callback' => 'jetpack_post_thumbnail_supports',
- )
- );
- }
- }
-}
-add_action( 'customize_register', 'jetpack_content_options_customize_register' );
-
-/**
- * Return whether the theme supports Post Thumbnails.
- */
-function jetpack_post_thumbnail_supports() {
- return ( current_theme_supports( 'post-thumbnails' ) );
-}
-
-/**
- * Sanitize the checkbox.
- *
- * @param int $input.
- * @return boolean|string
- */
-function jetpack_content_options_sanitize_checkbox( $input ) {
- return ( 1 == $input ) ? 1 : '';
-}
-
-/**
- * Sanitize the Display value.
- *
- * @param string $display.
- * @return string.
- */
-function jetpack_content_options_sanitize_blog_display( $display ) {
- if ( ! in_array( $display, array( 'content', 'excerpt', 'mixed' ) ) ) {
- $display = 'content';
- }
- return $display;
-}
-
-/**
- * Binds JS handlers to make Theme Customizer preview reload changes asynchronously.
- */
-function jetpack_content_options_customize_preview_js() {
- $options = get_theme_support( 'jetpack-content-options' );
- $blog_display = ( ! empty( $options[0]['blog-display'] ) ) ? $options[0]['blog-display'] : null;
- $blog_display = preg_grep( '/^(content|excerpt)$/', (array) $blog_display );
- sort( $blog_display );
- $blog_display = implode( ', ', $blog_display );
- $blog_display = ( 'content, excerpt' === $blog_display ) ? 'mixed' : $blog_display;
- $masonry = ( ! empty( $options[0]['masonry'] ) ) ? $options[0]['masonry'] : null;
- $post_details = ( ! empty( $options[0]['post-details'] ) ) ? $options[0]['post-details'] : null;
- $date = ( ! empty( $post_details['date'] ) ) ? $post_details['date'] : null;
- $categories = ( ! empty( $post_details['categories'] ) ) ? $post_details['categories'] : null;
- $tags = ( ! empty( $post_details['tags'] ) ) ? $post_details['tags'] : null;
- $author = ( ! empty( $post_details['author'] ) ) ? $post_details['author'] : null;
- $comment = ( ! empty( $post_details['comment'] ) ) ? $post_details['comment'] : null;
-
- wp_enqueue_script( 'jetpack-content-options-customizer', plugins_url( 'customizer.js', __FILE__ ), array( 'customize-preview' ), '1.0', true );
-
- wp_localize_script(
- 'jetpack-content-options-customizer',
- 'blogDisplay',
- array(
- 'display' => get_option( 'jetpack_content_blog_display', $blog_display ),
- 'masonry' => $masonry,
- )
- );
-
- wp_localize_script(
- 'jetpack-content-options-customizer',
- 'postDetails',
- array(
- 'date' => $date,
- 'categories' => $categories,
- 'tags' => $tags,
- 'author' => $author,
- 'comment' => $comment,
- )
- );
-}
-add_action( 'customize_preview_init', 'jetpack_content_options_customize_preview_js' );
diff --git a/plugins/jetpack/modules/theme-tools/content-options/featured-images-fallback.php b/plugins/jetpack/modules/theme-tools/content-options/featured-images-fallback.php
deleted file mode 100644
index dc8d92d6..00000000
--- a/plugins/jetpack/modules/theme-tools/content-options/featured-images-fallback.php
+++ /dev/null
@@ -1,161 +0,0 @@
-<?php
-/**
- * Get one image from a specified post in the following order:
- * Featured Image then first image from the_content HTML
- * and filter the post_thumbnail_html
- *
- * @param string $html The HTML for the image markup.
- * @param int $post_id The post ID to check.
- * @param int $post_thumbnail_id The ID of the featured image.
- * @param string $size The image size to return, defaults to 'post-thumbnail'.
- * @param string|array $attr Optional. Query string or array of attributes.
- *
- * @return string $html Thumbnail image with markup.
- */
-function jetpack_featured_images_fallback_get_image( $html, $post_id, $post_thumbnail_id, $size, $attr ) {
- $opts = jetpack_featured_images_get_settings();
-
- if ( ! empty( $html ) || (bool) 1 !== (bool) $opts['fallback-option'] ) {
- return trim( $html );
- }
-
- if ( jetpack_featured_images_should_load() ) {
- if (
- ( true === $opts['archive'] && ( is_home() || is_archive() || is_search() ) && ! $opts['archive-option'] )
- || ( true === $opts['post'] && is_single() && ! $opts['post-option'] )
- || ! $opts['fallback-option']
- ) {
- return trim( $html );
- }
- }
-
- if ( class_exists( 'Jetpack_PostImages' ) ) {
- global $_wp_additional_image_sizes;
-
- $args = array(
- 'from_thumbnail' => false,
- 'from_slideshow' => true,
- 'from_gallery' => true,
- 'from_attachment' => false,
- );
-
- $image = Jetpack_PostImages::get_image( $post_id, $args );
-
- if ( ! empty( $image ) ) {
- $image['width'] = '';
- $image['height'] = '';
- $image['crop'] = '';
-
- if ( array_key_exists( $size, $_wp_additional_image_sizes ) ) {
- $image['width'] = $_wp_additional_image_sizes[ $size ]['width'];
- $image['height'] = $_wp_additional_image_sizes[ $size ]['height'];
- $image['crop'] = $_wp_additional_image_sizes[ $size ]['crop'];
- }
-
- $image_src = Jetpack_PostImages::fit_image_url( $image['src'], $image['width'], $image['height'] );
-
- // Use the theme's crop setting rather than forcing to true
- $image_src = add_query_arg( 'crop', $image['crop'], $image_src );
-
- $html = '<img src="' . esc_url( $image_src ) . '" title="' . esc_attr( strip_tags( get_the_title() ) ) . '" class="attachment-' . esc_attr( $size ) . ' wp-post-image" />';
-
- return trim( $html );
- }
- }
-
- return trim( $html );
-}
-add_filter( 'post_thumbnail_html', 'jetpack_featured_images_fallback_get_image', 10, 5 );
-
-/**
- * Get URL of one image from a specified post in the following order:
- * Featured Image then first image from the_content HTML
- *
- * @param int $post_id The post ID to check.
- * @param int $post_thumbnail_id The ID of the featured image.
- * @param string $size The image size to return, defaults to 'post-thumbnail'.
- *
- * @return string|null $image_src The URL of the thumbnail image.
- */
-function jetpack_featured_images_fallback_get_image_src( $post_id, $post_thumbnail_id, $size ) {
- $image_src = wp_get_attachment_image_src( $post_thumbnail_id, $size );
- $image_src = ( ! empty( $image_src[0] ) ) ? $image_src[0] : null;
- $opts = jetpack_featured_images_get_settings();
-
- if ( ! empty( $image_src ) || (bool) 1 !== (bool) $opts['fallback-option'] ) {
- return esc_url( $image_src );
- }
-
- if ( jetpack_featured_images_should_load() ) {
- if ( ( true === $opts['archive'] && ( is_home() || is_archive() || is_search() ) && ! $opts['archive-option'] )
- || ( true === $opts['post'] && is_single() && ! $opts['post-option'] ) ) {
- return esc_url( $image_src );
- }
- }
-
- if ( class_exists( 'Jetpack_PostImages' ) ) {
- global $_wp_additional_image_sizes;
-
- $args = array(
- 'from_thumbnail' => false,
- 'from_slideshow' => true,
- 'from_gallery' => true,
- 'from_attachment' => false,
- );
-
- $image = Jetpack_PostImages::get_image( $post_id, $args );
-
- if ( ! empty( $image ) ) {
- $image['width'] = '';
- $image['height'] = '';
- $image['crop'] = '';
-
- if ( array_key_exists( $size, $_wp_additional_image_sizes ) ) {
- $image['width'] = $_wp_additional_image_sizes[ $size ]['width'];
- $image['height'] = $_wp_additional_image_sizes[ $size ]['height'];
- $image['crop'] = $_wp_additional_image_sizes[ $size ]['crop'];
- }
-
- $image_src = Jetpack_PostImages::fit_image_url( $image['src'], $image['width'], $image['height'] );
-
- // Use the theme's crop setting rather than forcing to true
- $image_src = add_query_arg( 'crop', $image['crop'], $image_src );
-
- return esc_url( $image_src );
- }
- }
-
- return esc_url( $image_src );
-}
-
-/**
- * Check if post has an image attached, including a fallback.
- *
- * @param int $post The post ID to check.
- *
- * @return bool
- */
-function jetpack_has_featured_image( $post = null ) {
- return (bool) get_the_post_thumbnail( $post );
-}
-
-/**
- * Adds custom class to the array of post classes.
- *
- * @param array $classes Classes for the post element.
- * @param array $class Optional. Comma separated list of additional classes.
- * @param array $post_id Unique The post ID to check
- *
- * @return array $classes
- */
-function jetpack_featured_images_post_class( $classes, $class, $post_id ) {
- $post_password_required = post_password_required( $post_id );
- $opts = jetpack_featured_images_get_settings();
-
- if ( jetpack_has_featured_image( $post_id ) && (bool) 1 === (bool) $opts['fallback-option'] && ! is_attachment() && ! $post_password_required && 'post' === get_post_type() ) {
- $classes[] = 'has-post-thumbnail';
- }
-
- return $classes;
-}
-add_filter( 'post_class', 'jetpack_featured_images_post_class', 10, 3 );
diff --git a/plugins/jetpack/modules/theme-tools/content-options/featured-images.php b/plugins/jetpack/modules/theme-tools/content-options/featured-images.php
deleted file mode 100644
index d6855f6c..00000000
--- a/plugins/jetpack/modules/theme-tools/content-options/featured-images.php
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-/**
- * The function to prevent for Featured Images to be displayed in a theme.
- */
-function jetpack_featured_images_remove_post_thumbnail( $metadata, $object_id, $meta_key, $single ) {
- $opts = jetpack_featured_images_get_settings();
-
- // Automatically return metadata if it's a PayPal product - we don't want to hide the Featured Image.
- if ( 'jp_pay_product' === get_post_type( $object_id ) ) {
- return $metadata;
- }
-
- // Return false if the archive option or singular option is unticked.
- if (
- ( true === $opts['archive']
- && ( is_home() || is_archive() || is_search() )
- && ! jetpack_is_shop_page()
- && ! $opts['archive-option']
- && ( isset( $meta_key )
- && '_thumbnail_id' === $meta_key )
- && in_the_loop()
- )
- || ( true === $opts['post']
- && is_single()
- && ! jetpack_is_product()
- && ! $opts['post-option']
- && ( isset( $meta_key )
- && '_thumbnail_id' === $meta_key )
- && in_the_loop()
- )
- || ( true === $opts['page']
- && is_singular()
- && is_page()
- && ! $opts['page-option']
- && ( isset( $meta_key )
- && '_thumbnail_id' === $meta_key )
- && in_the_loop()
- )
- || ( true === $opts['portfolio']
- && post_type_exists( 'jetpack-portfolio' )
- && is_singular( 'jetpack-portfolio' )
- && ! $opts['portfolio-option']
- && ( isset( $meta_key )
- && '_thumbnail_id' === $meta_key )
- && in_the_loop()
- )
- ) {
- return false;
- } else {
- return $metadata;
- }
-}
-add_filter( 'get_post_metadata', 'jetpack_featured_images_remove_post_thumbnail', true, 4 );
-
-/**
- * Check if we are in a WooCommerce Product in order to exclude it from the is_single check.
- */
-function jetpack_is_product() {
- return ( function_exists( 'is_product' ) ) ? is_product() : false;
-}
-
-/**
- * Check if we are in a WooCommerce Shop in order to exclude it from the is_archive check.
- */
-function jetpack_is_shop_page() {
- // Check if WooCommerce is active first.
- if ( ! class_exists( 'WooCommerce' ) ) {
- return false;
- }
-
- global $wp_query;
-
- $front_page_id = get_option( 'page_on_front' );
- $current_page_id = $wp_query->get( 'page_id' );
- $is_static_front_page = 'page' === get_option( 'show_on_front' );
-
- if ( $is_static_front_page && $front_page_id === $current_page_id ) {
- $is_shop_page = ( $current_page_id === wc_get_page_id( 'shop' ) ) ? true : false;
- } else {
- $is_shop_page = is_shop();
- }
-
- return $is_shop_page;
-}
diff --git a/plugins/jetpack/modules/theme-tools/content-options/post-details.php b/plugins/jetpack/modules/theme-tools/content-options/post-details.php
deleted file mode 100644
index 7851a5be..00000000
--- a/plugins/jetpack/modules/theme-tools/content-options/post-details.php
+++ /dev/null
@@ -1,150 +0,0 @@
-<?php
-/**
- * The function to include Post Details in a theme's stylesheet.
- */
-function jetpack_post_details_enqueue_scripts() {
- // Make sure we can proceed.
- list( $should_run, $options, $definied, $post_details ) = jetpack_post_details_should_run();
-
- if ( ! $should_run ) {
- return;
- }
-
- list( $date_option, $categories_option, $tags_option, $author_option, $comment_option ) = $options;
- list( $date, $categories, $tags, $author, $comment ) = $definied;
-
- $elements = array();
-
- // If date option is unticked, add it to the list of classes.
- if ( 1 != $date_option && ! empty( $date ) ) {
- $elements[] = $date;
- }
-
- // If categories option is unticked, add it to the list of classes.
- if ( 1 != $categories_option && ! empty( $categories ) ) {
- $elements[] = $categories;
- }
-
- // If tags option is unticked, add it to the list of classes.
- if ( 1 != $tags_option && ! empty( $tags ) ) {
- $elements[] = $tags;
- }
-
- // If author option is unticked, add it to the list of classes.
- if ( 1 != $author_option && ! empty( $author ) ) {
- $elements[] = $author;
- }
-
- // If comment option is unticked, add it to the list of classes.
- if ( 1 != $comment_option && ! empty( $comment ) ) {
- $elements[] = $comment;
- }
-
- // Get the list of classes.
- $elements = implode( ', ', $elements );
-
- // Hide the classes with CSS.
- $css = $elements . ' { clip: rect(1px, 1px, 1px, 1px); height: 1px; position: absolute; overflow: hidden; width: 1px; }';
-
- // Add the CSS to the stylesheet.
- wp_add_inline_style( $post_details['stylesheet'], $css );
-}
-add_action( 'wp_enqueue_scripts', 'jetpack_post_details_enqueue_scripts' );
-
-/**
- * Adds custom classes to the array of body classes.
- */
-function jetpack_post_details_body_classes( $classes ) {
- // Make sure we can proceed.
- list( $should_run, $options, $definied ) = jetpack_post_details_should_run();
-
- if ( ! $should_run ) {
- return $classes;
- }
-
- list( $date_option, $categories_option, $tags_option, $author_option, $comment_option ) = $options;
- list( $date, $categories, $tags, $author, $comment ) = $definied;
-
- // If date option is unticked, add a class of 'date-hidden' to the body.
- if ( 1 != $date_option && ! empty( $date ) ) {
- $classes[] = 'date-hidden';
- }
-
- // If categories option is unticked, add a class of 'categories-hidden' to the body.
- if ( 1 != $categories_option && ! empty( $categories ) ) {
- $classes[] = 'categories-hidden';
- }
-
- // If tags option is unticked, add a class of 'tags-hidden' to the body.
- if ( 1 != $tags_option && ! empty( $tags ) ) {
- $classes[] = 'tags-hidden';
- }
-
- // If author option is unticked, add a class of 'author-hidden' to the body.
- if ( 1 != $author_option && ! empty( $author ) ) {
- $classes[] = 'author-hidden';
- }
-
- // If comment option is unticked, add a class of 'comment-hidden' to the body.
- if ( 1 != $comment_option && ! empty( $comment ) ) {
- $classes[] = 'comment-hidden';
- }
-
- return $classes;
-}
-add_filter( 'body_class', 'jetpack_post_details_body_classes' );
-
-/**
- * Determines if Post Details should run.
- */
-function jetpack_post_details_should_run() {
- // Empty value representing falsy return value.
- $void = array( false, null, null, null );
-
- // If the theme doesn't support 'jetpack-content-options', don't continue.
- if ( ! current_theme_supports( 'jetpack-content-options' ) ) {
- return $void;
- }
-
- $options = get_theme_support( 'jetpack-content-options' );
- $post_details = ( ! empty( $options[0]['post-details'] ) ) ? $options[0]['post-details'] : null;
-
- // If the theme doesn't support 'jetpack-content-options[ 'post-details' ]', don't continue.
- if ( empty( $post_details ) ) {
- return $void;
- }
-
- $date = ( ! empty( $post_details['date'] ) ) ? $post_details['date'] : null;
- $categories = ( ! empty( $post_details['categories'] ) ) ? $post_details['categories'] : null;
- $tags = ( ! empty( $post_details['tags'] ) ) ? $post_details['tags'] : null;
- $author = ( ! empty( $post_details['author'] ) ) ? $post_details['author'] : null;
- $comment = ( ! empty( $post_details['comment'] ) ) ? $post_details['comment'] : null;
-
- // If there is no stylesheet and there are no date, categories, tags, author or comment declared, don't continue.
- if (
- empty( $post_details['stylesheet'] )
- && ( empty( $date )
- || empty( $categories )
- || empty( $tags )
- || empty( $author )
- || empty( $comment ) )
- ) {
- return $void;
- }
-
- $date_option = get_option( 'jetpack_content_post_details_date', 1 );
- $categories_option = get_option( 'jetpack_content_post_details_categories', 1 );
- $tags_option = get_option( 'jetpack_content_post_details_tags', 1 );
- $author_option = get_option( 'jetpack_content_post_details_author', 1 );
- $comment_option = get_option( 'jetpack_content_post_details_comment', 1 );
-
- $options = array( $date_option, $categories_option, $tags_option, $author_option, $comment_option );
- $definied = array( $date, $categories, $tags, $author, $comment );
-
- // If all the options are ticked, don't continue.
- if ( array( 1, 1, 1, 1, 1 ) === $options ) {
- return $void;
- }
-
- return array( true, $options, $definied, $post_details );
-}
diff --git a/plugins/jetpack/modules/theme-tools/featured-content.php b/plugins/jetpack/modules/theme-tools/featured-content.php
deleted file mode 100644
index 3ffc9687..00000000
--- a/plugins/jetpack/modules/theme-tools/featured-content.php
+++ /dev/null
@@ -1,722 +0,0 @@
-<?php
-
-if ( ! class_exists( 'Featured_Content' ) && isset( $GLOBALS['pagenow'] ) && 'plugins.php' !== $GLOBALS['pagenow'] ) {
-
- /**
- * Featured Content.
- *
- * This module will allow users to define a subset of posts to be displayed in a
- * theme-designated featured content area.
- *
- * This feature will only be activated for themes that declare that they support
- * it. This can be done by adding code similar to the following during the
- * "after_setup_theme" action:
- *
- * add_theme_support( 'featured-content', array(
- * 'filter' => 'mytheme_get_featured_content',
- * 'max_posts' => 20,
- * 'post_types' => array( 'post', 'page' ),
- * ) );
- *
- * For maximum compatibility with different methods of posting users will
- * designate a featured post tag to associate posts with. Since this tag now has
- * special meaning beyond that of a normal tags, users will have the ability to
- * hide it from the front-end of their site.
- */
- class Featured_Content {
-
- /**
- * The maximum number of posts that a Featured Content area can contain. We
- * define a default value here but themes can override this by defining a
- * "max_posts" entry in the second parameter passed in the call to
- * add_theme_support( 'featured-content' ).
- *
- * @see Featured_Content::init()
- */
- public static $max_posts = 15;
-
- /**
- * The registered post types supported by Featured Content. Themes can add
- * Featured Content support for registered post types by defining a
- * 'post_types' argument (string|array) in the call to
- * add_theme_support( 'featured-content' ).
- *
- * @see Featured_Content::init()
- */
- public static $post_types = array( 'post' );
-
- /**
- * The tag that is used to mark featured content. Users can define
- * a custom tag name that will be stored in this variable.
- *
- * @see Featured_Content::hide_featured_term
- */
- public static $tag;
-
- /**
- * Instantiate.
- *
- * All custom functionality will be hooked into the "init" action.
- */
- public static function setup() {
- add_action( 'init', array( __CLASS__, 'init' ), 30 );
- }
-
- /**
- * Conditionally hook into WordPress.
- *
- * Themes must declare that they support this module by adding
- * add_theme_support( 'featured-content' ); during after_setup_theme.
- *
- * If no theme support is found there is no need to hook into WordPress. We'll
- * just return early instead.
- *
- * @uses Featured_Content::$max_posts
- */
- public static function init() {
- $theme_support = get_theme_support( 'featured-content' );
-
- // Return early if theme does not support featured content.
- if ( ! $theme_support ) {
- return;
- }
-
- /*
- * An array of named arguments must be passed as the second parameter
- * of add_theme_support().
- */
- if ( ! isset( $theme_support[0] ) ) {
- return;
- }
-
- if ( isset( $theme_support[0]['featured_content_filter'] ) ) {
- $theme_support[0]['filter'] = $theme_support[0]['featured_content_filter'];
- unset( $theme_support[0]['featured_content_filter'] );
- }
-
- // Return early if "filter" has not been defined.
- if ( ! isset( $theme_support[0]['filter'] ) ) {
- return;
- }
-
- // Theme can override the number of max posts.
- if ( isset( $theme_support[0]['max_posts'] ) ) {
- self::$max_posts = absint( $theme_support[0]['max_posts'] );
- }
-
- add_filter( $theme_support[0]['filter'], array( __CLASS__, 'get_featured_posts' ) );
- add_action( 'customize_register', array( __CLASS__, 'customize_register' ), 9 );
- add_action( 'admin_init', array( __CLASS__, 'register_setting' ) );
- add_action( 'save_post', array( __CLASS__, 'delete_transient' ) );
- add_action( 'delete_post_tag', array( __CLASS__, 'delete_post_tag' ) );
- add_action( 'customize_controls_enqueue_scripts', array( __CLASS__, 'enqueue_scripts' ) );
- add_action( 'pre_get_posts', array( __CLASS__, 'pre_get_posts' ) );
- add_action( 'switch_theme', array( __CLASS__, 'switch_theme' ) );
- add_action( 'switch_theme', array( __CLASS__, 'delete_transient' ) );
- add_action( 'wp_loaded', array( __CLASS__, 'wp_loaded' ) );
- add_action( 'update_option_featured-content', array( __CLASS__, 'flush_post_tag_cache' ), 10, 2 );
- add_action( 'delete_option_featured-content', array( __CLASS__, 'flush_post_tag_cache' ), 10, 2 );
- add_action( 'split_shared_term', array( __CLASS__, 'jetpack_update_featured_content_for_split_terms', 10, 4 ) );
-
- if ( isset( $theme_support[0]['additional_post_types'] ) ) {
- $theme_support[0]['post_types'] = array_merge( array( 'post' ), (array) $theme_support[0]['additional_post_types'] );
- unset( $theme_support[0]['additional_post_types'] );
- }
-
- // Themes can allow Featured Content pages
- if ( isset( $theme_support[0]['post_types'] ) ) {
- self::$post_types = array_merge( self::$post_types, (array) $theme_support[0]['post_types'] );
- self::$post_types = array_unique( self::$post_types );
-
- // register post_tag support for each post type
- foreach ( self::$post_types as $post_type ) {
- register_taxonomy_for_object_type( 'post_tag', $post_type );
- }
- }
- }
-
- /**
- * Hide "featured" tag from the front-end.
- *
- * Has to run on wp_loaded so that the preview filters of the customizer
- * have a chance to alter the value.
- */
- public static function wp_loaded() {
- if ( self::get_setting( 'hide-tag' ) ) {
- $settings = self::get_setting();
-
- // This is done before setting filters for get_terms in order to avoid an infinite filter loop
- self::$tag = get_term_by( 'name', $settings['tag-name'], 'post_tag' );
-
- add_filter( 'get_terms', array( __CLASS__, 'hide_featured_term' ), 10, 3 );
- add_filter( 'get_the_terms', array( __CLASS__, 'hide_the_featured_term' ), 10, 3 );
- }
- }
-
- /**
- * Get featured posts
- *
- * This method is not intended to be called directly. Theme developers should
- * place a filter directly in their theme and then pass its name as a value of
- * the "filter" key in the array passed as the $args parameter during the call
- * to: add_theme_support( 'featured-content', $args ).
- *
- * @uses Featured_Content::get_featured_post_ids()
- *
- * @return array
- */
- public static function get_featured_posts() {
- $post_ids = self::get_featured_post_ids();
-
- // No need to query if there is are no featured posts.
- if ( empty( $post_ids ) ) {
- return array();
- }
-
- $featured_posts = get_posts(
- array(
- 'include' => $post_ids,
- 'posts_per_page' => count( $post_ids ),
- 'post_type' => self::$post_types,
- 'suppress_filters' => false,
- )
- );
-
- return $featured_posts;
- }
-
- /**
- * Get featured post IDs
- *
- * This function will return the an array containing the post IDs of all
- * featured posts.
- *
- * Sets the "featured_content_ids" transient.
- *
- * @return array Array of post IDs.
- */
- public static function get_featured_post_ids() {
- // Return array of cached results if they exist.
- $featured_ids = get_transient( 'featured_content_ids' );
- if ( ! empty( $featured_ids ) ) {
- return array_map(
- 'absint',
- /**
- * Filter the list of Featured Posts IDs.
- *
- * @module theme-tools
- *
- * @since 2.7.0
- *
- * @param array $featured_ids Array of post IDs.
- */
- apply_filters( 'featured_content_post_ids', (array) $featured_ids )
- );
- }
-
- $settings = self::get_setting();
-
- // Return empty array if no tag name is set.
- $term = get_term_by( 'name', $settings['tag-name'], 'post_tag' );
- if ( ! $term ) {
- $term = get_term_by( 'id', $settings['tag-id'], 'post_tag' );
- }
- if ( $term ) {
- $tag = $term->term_id;
- } else {
- /** This action is documented in modules/theme-tools/featured-content.php */
- return apply_filters( 'featured_content_post_ids', array() );
- }
-
- // Back compat for installs that have the quantity option still set.
- $quantity = isset( $settings['quantity'] ) ? $settings['quantity'] : self::$max_posts;
-
- // Query for featured posts.
- $featured = get_posts(
- array(
- 'numberposts' => $quantity,
- 'post_type' => self::$post_types,
- 'suppress_filters' => false,
- 'tax_query' => array(
- array(
- 'field' => 'term_id',
- 'taxonomy' => 'post_tag',
- 'terms' => $tag,
- ),
- ),
- )
- );
-
- // Return empty array if no featured content exists.
- if ( ! $featured ) {
- /** This action is documented in modules/theme-tools/featured-content.php */
- return apply_filters( 'featured_content_post_ids', array() );
- }
-
- // Ensure correct format before save/return.
- $featured_ids = wp_list_pluck( (array) $featured, 'ID' );
- $featured_ids = array_map( 'absint', $featured_ids );
-
- set_transient( 'featured_content_ids', $featured_ids );
-
- /** This action is documented in modules/theme-tools/featured-content.php */
- return apply_filters( 'featured_content_post_ids', $featured_ids );
- }
-
- /**
- * Delete Transient.
- *
- * Hooks in the "save_post" action.
- *
- * @see Featured_Content::validate_settings().
- */
- public static function delete_transient() {
- delete_transient( 'featured_content_ids' );
- }
-
- /**
- * Flush the Post Tag relationships cache.
- *
- * Hooks in the "update_option_featured-content" action.
- */
- public static function flush_post_tag_cache( $prev, $opts ) {
- if ( ! empty( $opts ) && ! empty( $opts['tag-id'] ) ) {
- $query = new WP_Query(
- array(
- 'tag_id' => (int) $opts['tag-id'],
- 'posts_per_page' => -1,
- )
- );
- foreach ( $query->posts as $post ) {
- wp_cache_delete( $post->ID, 'post_tag_relationships' );
- }
- }
- }
-
- /**
- * Exclude featured posts from the blog query when the blog is the front-page,
- * and user has not checked the "Also display tagged posts outside the Featured Content area" checkbox.
- *
- * Filter the home page posts, and remove any featured post ID's from it.
- * Hooked onto the 'pre_get_posts' action, this changes the parameters of the
- * query before it gets any posts.
- *
- * @uses Featured_Content::get_featured_post_ids();
- * @uses Featured_Content::get_setting();
- * @param WP_Query $query
- * @return WP_Query Possibly modified WP_Query
- */
- public static function pre_get_posts( $query ) {
-
- // Bail if not home or not main query.
- if ( ! $query->is_home() || ! $query->is_main_query() ) {
- return;
- }
-
- // Bail if the blog page is not the front page.
- if ( 'posts' !== get_option( 'show_on_front' ) ) {
- return;
- }
-
- $featured = self::get_featured_post_ids();
-
- // Bail if no featured posts.
- if ( ! $featured ) {
- return;
- }
-
- $settings = self::get_setting();
-
- // Bail if the user wants featured posts always displayed.
- if ( true == $settings['show-all'] ) {
- return;
- }
-
- // We need to respect post ids already in the blacklist.
- $post__not_in = $query->get( 'post__not_in' );
-
- if ( ! empty( $post__not_in ) ) {
- $featured = array_merge( (array) $post__not_in, $featured );
- $featured = array_unique( $featured );
- }
-
- $query->set( 'post__not_in', $featured );
- }
-
- /**
- * Reset tag option when the saved tag is deleted.
- *
- * It's important to mention that the transient needs to be deleted, too.
- * While it may not be obvious by looking at the function alone, the transient
- * is deleted by Featured_Content::validate_settings().
- *
- * Hooks in the "delete_post_tag" action.
- *
- * @see Featured_Content::validate_settings().
- *
- * @param int $tag_id The term_id of the tag that has been deleted.
- * @return void
- */
- public static function delete_post_tag( $tag_id ) {
- $settings = self::get_setting();
-
- if ( empty( $settings['tag-id'] ) || $tag_id != $settings['tag-id'] ) {
- return;
- }
-
- $settings['tag-id'] = 0;
- $settings = self::validate_settings( $settings );
- update_option( 'featured-content', $settings );
- }
-
- /**
- * Hide featured tag from displaying when global terms are queried from
- * the front-end.
- *
- * Hooks into the "get_terms" filter.
- *
- * @uses Featured_Content::get_setting()
- *
- * @param array $terms A list of term objects. This is the return value of get_terms().
- * @param array $taxonomies An array of taxonomy slugs.
- * @return array $terms
- */
- public static function hide_featured_term( $terms, $taxonomies, $args ) {
-
- // This filter is only appropriate on the front-end.
- if ( is_admin() || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) || ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) ) {
- return $terms;
- }
-
- // We only want to hide the featured tag.
- if ( ! in_array( 'post_tag', $taxonomies ) ) {
- return $terms;
- }
-
- // Bail if no terms were returned.
- if ( empty( $terms ) ) {
- return $terms;
- }
-
- // Bail if term objects are unavailable.
- if ( 'all' != $args['fields'] ) {
- return $terms;
- }
-
- $settings = self::get_setting();
-
- if ( false !== self::$tag ) {
- foreach ( $terms as $order => $term ) {
- if (
- is_object( $term )
- && (
- $settings['tag-id'] === $term->term_id
- || $settings['tag-name'] === $term->name
- )
- ) {
- unset( $terms[ $order ] );
- }
- }
- }
-
- return $terms;
- }
-
- /**
- * Hide featured tag from displaying when terms associated with a post object
- * are queried from the front-end.
- *
- * Hooks into the "get_the_terms" filter.
- *
- * @uses Featured_Content::get_setting()
- *
- * @param array $terms A list of term objects. This is the return value of get_the_terms().
- * @param int $id The ID field for the post object that terms are associated with.
- * @param array $taxonomy An array of taxonomy slugs.
- * @return array $terms
- */
- public static function hide_the_featured_term( $terms, $id, $taxonomy ) {
-
- // This filter is only appropriate on the front-end.
- if ( is_admin() ) {
- return $terms;
- }
-
- // Make sure we are in the correct taxonomy.
- if ( 'post_tag' != $taxonomy ) {
- return $terms;
- }
-
- // No terms? Return early!
- if ( empty( $terms ) ) {
- return $terms;
- }
-
- $settings = self::get_setting();
- $tag = get_term_by( 'name', $settings['tag-name'], 'post_tag' );
-
- if ( false !== $tag ) {
- foreach ( $terms as $order => $term ) {
- if ( $settings['tag-id'] === $term->term_id || $settings['tag-name'] === $term->name ) {
- unset( $terms[ $order ] );
- }
- }
- }
-
- return $terms;
- }
-
- /**
- * Register custom setting on the Settings -> Reading screen.
- *
- * @uses Featured_Content::render_form()
- * @uses Featured_Content::validate_settings()
- *
- * @return void
- */
- public static function register_setting() {
- add_settings_field( 'featured-content', __( 'Featured Content', 'jetpack' ), array( __class__, 'render_form' ), 'reading' );
-
- // Register sanitization callback for the Customizer.
- register_setting( 'featured-content', 'featured-content', array( __class__, 'validate_settings' ) );
- }
-
- /**
- * Add settings to the Customizer.
- *
- * @param WP_Customize_Manager $wp_customize Theme Customizer object.
- */
- public static function customize_register( $wp_customize ) {
- $wp_customize->add_section(
- 'featured_content',
- array(
- 'title' => esc_html__( 'Featured Content', 'jetpack' ),
- 'description' => sprintf( __( 'Easily feature all posts with the <a href="%1$s">"featured" tag</a> or a tag of your choice. Your theme supports up to %2$s posts in its featured content area.', 'jetpack' ), admin_url( '/edit.php?tag=featured' ), absint( self::$max_posts ) ),
- 'priority' => 130,
- 'theme_supports' => 'featured-content',
- )
- );
-
- /*
- Add Featured Content settings.
- *
- * Sanitization callback registered in Featured_Content::validate_settings().
- * See http://themeshaper.com/2013/04/29/validation-sanitization-in-customizer/comment-page-1/#comment-12374
- */
- $wp_customize->add_setting(
- 'featured-content[tag-name]',
- array(
- 'type' => 'option',
- 'sanitize_js_callback' => array( __CLASS__, 'delete_transient' ),
- )
- );
- $wp_customize->add_setting(
- 'featured-content[hide-tag]',
- array(
- 'default' => true,
- 'type' => 'option',
- 'sanitize_js_callback' => array( __CLASS__, 'delete_transient' ),
- )
- );
- $wp_customize->add_setting(
- 'featured-content[show-all]',
- array(
- 'default' => false,
- 'type' => 'option',
- 'sanitize_js_callback' => array( __CLASS__, 'delete_transient' ),
- )
- );
-
- // Add Featured Content controls.
- $wp_customize->add_control(
- 'featured-content[tag-name]',
- array(
- 'label' => esc_html__( 'Tag name', 'jetpack' ),
- 'section' => 'featured_content',
- 'theme_supports' => 'featured-content',
- 'priority' => 20,
- )
- );
- $wp_customize->add_control(
- 'featured-content[hide-tag]',
- array(
- 'label' => esc_html__( 'Do not display tag in post details and tag clouds.', 'jetpack' ),
- 'section' => 'featured_content',
- 'theme_supports' => 'featured-content',
- 'type' => 'checkbox',
- 'priority' => 30,
- )
- );
- $wp_customize->add_control(
- 'featured-content[show-all]',
- array(
- 'label' => esc_html__( 'Also display tagged posts outside the Featured Content area.', 'jetpack' ),
- 'section' => 'featured_content',
- 'theme_supports' => 'featured-content',
- 'type' => 'checkbox',
- 'priority' => 40,
- )
- );
- }
-
- /**
- * Enqueue the tag suggestion script.
- */
- public static function enqueue_scripts() {
- wp_enqueue_script( 'featured-content-suggest', plugins_url( 'js/suggest.js', __FILE__ ), array( 'suggest' ), '20131022', true );
- }
-
- /**
- * Renders all form fields on the Settings -> Reading screen.
- */
- public static function render_form() {
- printf( __( 'The settings for Featured Content have <a href="%s">moved to Appearance &rarr; Customize</a>.', 'jetpack' ), admin_url( 'customize.php?#accordion-section-featured_content' ) );
- }
-
- /**
- * Get settings
- *
- * Get all settings recognized by this module. This function will return all
- * settings whether or not they have been stored in the database yet. This
- * ensures that all keys are available at all times.
- *
- * In the event that you only require one setting, you may pass its name as the
- * first parameter to the function and only that value will be returned.
- *
- * @param string $key The key of a recognized setting.
- * @return mixed Array of all settings by default. A single value if passed as first parameter.
- */
- public static function get_setting( $key = 'all' ) {
- $saved = (array) get_option( 'featured-content' );
-
- /**
- * Filter Featured Content's default settings.
- *
- * @module theme-tools
- *
- * @since 2.7.0
- *
- * @param array $args {
- * Array of Featured Content Settings
- *
- * @type int hide-tag Default is 1.
- * @type int tag-id Default is 0.
- * @type string tag-name Default is empty.
- * @type int show-all Default is 0.
- * }
- */
- $defaults = apply_filters(
- 'featured_content_default_settings',
- array(
- 'hide-tag' => 1,
- 'tag-id' => 0,
- 'tag-name' => '',
- 'show-all' => 0,
- )
- );
-
- $options = wp_parse_args( $saved, $defaults );
- $options = array_intersect_key( $options, $defaults );
-
- if ( 'all' != $key ) {
- return isset( $options[ $key ] ) ? $options[ $key ] : false;
- }
-
- return $options;
- }
-
- /**
- * Validate settings
- *
- * Make sure that all user supplied content is in an expected format before
- * saving to the database. This function will also delete the transient set in
- * Featured_Content::get_featured_content().
- *
- * @uses Featured_Content::delete_transient()
- *
- * @param array $input
- * @return array $output
- */
- public static function validate_settings( $input ) {
- $output = array();
-
- if ( empty( $input['tag-name'] ) ) {
- $output['tag-id'] = 0;
- } else {
- $term = get_term_by( 'name', $input['tag-name'], 'post_tag' );
-
- if ( $term ) {
- $output['tag-id'] = $term->term_id;
- } else {
- $new_tag = wp_create_tag( $input['tag-name'] );
-
- if ( ! is_wp_error( $new_tag ) && isset( $new_tag['term_id'] ) ) {
- $output['tag-id'] = $new_tag['term_id'];
- }
- }
-
- $output['tag-name'] = $input['tag-name'];
- }
-
- $output['hide-tag'] = isset( $input['hide-tag'] ) && $input['hide-tag'] ? 1 : 0;
-
- $output['show-all'] = isset( $input['show-all'] ) && $input['show-all'] ? 1 : 0;
-
- self::delete_transient();
-
- return $output;
- }
-
- /**
- * Removes the quantity setting from the options array.
- *
- * @return void
- */
- public static function switch_theme() {
- $option = (array) get_option( 'featured-content' );
-
- if ( isset( $option['quantity'] ) ) {
- unset( $option['quantity'] );
- update_option( 'featured-content', $option );
- }
- }
-
- public static function jetpack_update_featured_content_for_split_terms( $old_term_id, $new_term_id, $term_taxonomy_id, $taxonomy ) {
- $featured_content_settings = get_option( 'featured-content', array() );
-
- // Check to see whether the stored tag ID is the one that's just been split.
- if ( isset( $featured_content_settings['tag-id'] ) && $old_term_id == $featured_content_settings['tag-id'] && 'post_tag' == $taxonomy ) {
- // We have a match, so we swap out the old tag ID for the new one and resave the option.
- $featured_content_settings['tag-id'] = $new_term_id;
- update_option( 'featured-content', $featured_content_settings );
- }
- }
- }
-
- /**
- * Adds the featured content plugin to the set of files for which action
- * handlers should be copied when the theme context is loaded by the REST API.
- *
- * @param array $copy_dirs Copy paths with actions to be copied
- * @return array Copy paths with featured content plugin
- */
- function wpcom_rest_api_featured_content_copy_plugin_actions( $copy_dirs ) {
- $copy_dirs[] = __FILE__;
- return $copy_dirs;
- }
- add_action( 'restapi_theme_action_copy_dirs', 'wpcom_rest_api_featured_content_copy_plugin_actions' );
-
- /**
- * Delayed initialization for API Requests.
- */
- function wpcom_rest_request_before_callbacks( $request ) {
- Featured_Content::init();
- return $request;
- }
-
- if ( Jetpack_Constants::is_true( 'IS_WPCOM' ) && Jetpack_Constants::is_true( 'REST_API_REQUEST' ) ) {
- add_filter( 'rest_request_before_callbacks', 'wpcom_rest_request_before_callbacks');
- }
-
- Featured_Content::setup();
-} // end if ( ! class_exists( 'Featured_Content' ) && isset( $GLOBALS['pagenow'] ) && 'plugins.php' !== $GLOBALS['pagenow'] ) {
diff --git a/plugins/jetpack/modules/theme-tools/infinite-scroll.php b/plugins/jetpack/modules/theme-tools/infinite-scroll.php
deleted file mode 100644
index ac5a0aa8..00000000
--- a/plugins/jetpack/modules/theme-tools/infinite-scroll.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-/**
- * INFINITE SCROLL
- */
-
-/**
- * Load theme's infinite scroll annotation file, if present in the IS plugin.
- * The `setup_theme` action is used because the annotation files should be using `after_setup_theme` to register support for IS.
- *
- * As released in Jetpack 2.0, a child theme's parent wasn't checked for in the plugin's bundled support, hence the convoluted way the parent is checked for now.
- *
- * @uses is_admin, wp_get_theme, apply_filters
- * @action setup_theme
- * @return null
- */
-function jetpack_load_infinite_scroll_annotation() {
- if ( is_admin() && isset( $_GET['page'] ) && 'jetpack' == $_GET['page'] ) {
- $theme = wp_get_theme();
-
- if ( ! is_a( $theme, 'WP_Theme' ) && ! is_array( $theme ) ) {
- return;
- }
-
- /** This filter is already documented in modules/infinite-scroll/infinity.php */
- $customization_file = apply_filters( 'infinite_scroll_customization_file', dirname( __FILE__ ) . "/infinite-scroll/themes/{$theme['Stylesheet']}.php", $theme['Stylesheet'] );
-
- if ( is_readable( $customization_file ) ) {
- require_once $customization_file;
- } elseif ( ! empty( $theme['Template'] ) ) {
- $customization_file = dirname( __FILE__ ) . "/infinite-scroll/themes/{$theme['Template']}.php";
-
- if ( is_readable( $customization_file ) ) {
- require_once $customization_file;
- }
- }
- }
-}
-add_action( 'setup_theme', 'jetpack_load_infinite_scroll_annotation' );
-
-/**
- * Prevent IS from being activated if theme doesn't support it
- *
- * @param bool $can_activate
- * @filter jetpack_can_activate_infinite-scroll
- * @return bool
- */
-function jetpack_can_activate_infinite_scroll() {
- return (bool) current_theme_supports( 'infinite-scroll' );
-}
-add_filter( 'jetpack_can_activate_infinite-scroll', 'jetpack_can_activate_infinite_scroll' );
diff --git a/plugins/jetpack/modules/theme-tools/js/suggest.js b/plugins/jetpack/modules/theme-tools/js/suggest.js
deleted file mode 100644
index 4385fb5f..00000000
--- a/plugins/jetpack/modules/theme-tools/js/suggest.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/* global ajaxurl:true */
-jQuery( function( $ ) {
- $( '#customize-control-featured-content-tag-name input' ).suggest( ajaxurl + '?action=ajax-tag-search&tax=post_tag', { delay: 500, minchars: 2 } );
-} );
diff --git a/plugins/jetpack/modules/theme-tools/random-redirect.php b/plugins/jetpack/modules/theme-tools/random-redirect.php
deleted file mode 100644
index d866d336..00000000
--- a/plugins/jetpack/modules/theme-tools/random-redirect.php
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-/*
-Plugin Name: Random Redirect
-Plugin URI: https://wordpress.org/extend/plugins/random-redirect/
-Description: Allows you to create a link to yourblog.example.com/?random which will redirect someone to a random post on your blog, in a StumbleUpon-like fashion.
-Version: 1.2-wpcom
-Author: Matt Mullenweg
-Author URI: http://photomatt.net/
-*/
-
-function jetpack_matt_random_redirect() {
- // Verify that the Random Redirect plugin this code is from is not active
- // See http://plugins.trac.wordpress.org/ticket/1898
- if ( ! ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ) {
- require_once ABSPATH . 'wp-admin/includes/plugin.php';
- if ( is_plugin_active( 'random-redirect/random-redirect.php' ) ) {
- return;
- }
- }
-
- // Set default post type.
- $post_type = get_post_type();
-
- // Set default category type
- if ( is_category() ) {
- $category = get_the_category();
- if ( isset( $category ) && ! empty( $category ) ) {
- $random_cat_id = $category[0]->term_id;
- }
- }
-
- // Set author name if we're on an author archive.
- if ( is_author() ) {
- $random_author_name = get_the_author_meta( 'user_login' );
- $random_author_query = 'AND user_login = "' . $random_author_name . '"';
- } else {
- $random_author_query = '';
- }
-
- // Acceptable URL formats: /[...]/?random=[post type], /?random, /&random, /&random=1
- if ( ! isset( $_GET['random'] ) && ! in_array( strtolower( $_SERVER['REQUEST_URI'] ), array( '/&random', '/&random=1' ) ) ) {
- return;
- }
-
- // Ignore POST requests.
- if ( ! empty( $_POST ) ) {
- return;
- }
-
- // Persistent AppEngine abuse. ORDER BY RAND is expensive.
- if ( strstr( $_SERVER['HTTP_USER_AGENT'], 'AppEngine-Google' ) ) {
- wp_die( 'Please <a href="http://en.support.wordpress.com/contact/" rel="noopener noreferrer" target="_blank">contact support</a>' );
- }
-
- // Set the category ID if the parameter is set.
- if ( isset( $_GET['random_cat_id'] ) ) {
- $random_cat_id = (int) $_GET['random_cat_id'];
- }
-
- // Change the post type if the parameter is set.
- if ( isset( $_GET['random_post_type'] ) && post_type_exists( $_GET['random_post_type'] ) ) {
- $post_type = $_GET['random_post_type'];
- }
-
- // Don't show a random page if 'page' isn't specified as the post type specifically.
- if ( 'page' === $post_type && is_front_page() && ! isset( $_GET['random_post_type'] ) ) {
- $post_type = 'post';
- }
-
- global $wpdb;
-
- if ( isset( $random_cat_id ) ) {
- $random_id = $wpdb->get_var( $wpdb->prepare( "SELECT DISTINCT ID FROM $wpdb->posts AS p INNER JOIN $wpdb->term_relationships AS tr ON (p.ID = tr.object_id AND tr.term_taxonomy_id = %s) INNER JOIN $wpdb->term_taxonomy AS tt ON(tr.term_taxonomy_id = tt.term_taxonomy_id AND taxonomy = 'category') WHERE p.post_type = %s AND post_password = '' AND post_status = 'publish' %s ORDER BY RAND() LIMIT 1", $random_cat_id, $post_type, $random_author_query ) );
- } else {
- $random_id = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type = %s AND post_password = '' AND post_status = 'publish' %s ORDER BY RAND() LIMIT 1", $post_type, $random_author_query ) );
- }
-
- $permalink = get_permalink( $random_id );
- wp_safe_redirect( $permalink );
- exit;
-}
-
-add_action( 'template_redirect', 'jetpack_matt_random_redirect' );
diff --git a/plugins/jetpack/modules/theme-tools/responsive-videos.php b/plugins/jetpack/modules/theme-tools/responsive-videos.php
deleted file mode 100644
index 61987a8d..00000000
--- a/plugins/jetpack/modules/theme-tools/responsive-videos.php
+++ /dev/null
@@ -1,152 +0,0 @@
-<?php
-
-/**
- * Load the Responsive videos plugin
- */
-function jetpack_responsive_videos_init() {
-
- /* If the doesn't theme support 'jetpack-responsive-videos', don't continue */
- if ( ! current_theme_supports( 'jetpack-responsive-videos' ) ) {
- return;
- }
-
- /* If the theme does support 'jetpack-responsive-videos', wrap the videos */
- add_filter( 'wp_video_shortcode', 'jetpack_responsive_videos_embed_html' );
- add_filter( 'video_embed_html', 'jetpack_responsive_videos_embed_html' );
-
- /* Only wrap oEmbeds if video */
- add_filter( 'embed_oembed_html', 'jetpack_responsive_videos_maybe_wrap_oembed', 10, 2 );
- add_filter( 'embed_handler_html', 'jetpack_responsive_videos_maybe_wrap_oembed', 10, 2 );
-
- /* Wrap videos in Buddypress */
- add_filter( 'bp_embed_oembed_html', 'jetpack_responsive_videos_embed_html' );
-
- /* Wrap Slideshare shortcodes */
- add_filter( 'jetpack_slideshare_shortcode', 'jetpack_responsive_videos_embed_html' );
-
- // Remove the Jetpack Responsive video wrapper in embed blocks on sites that support core Responsive embeds.
- if ( current_theme_supports( 'responsive-embeds' ) ) {
- add_filter( 'render_block', 'jetpack_responsive_videos_remove_wrap_oembed', 10, 2 );
- }
-}
-add_action( 'after_setup_theme', 'jetpack_responsive_videos_init', 99 );
-
-
-/**
- * Adds a wrapper to videos and enqueue script
- *
- * @return string
- */
-function jetpack_responsive_videos_embed_html( $html ) {
- if ( empty( $html ) || ! is_string( $html ) ) {
- return $html;
- }
-
- // The customizer video widget wraps videos with a class of wp-video
- // mejs as of 4.9 apparently resizes videos too which causes issues
- // skip the video if it is wrapped in wp-video.
- $video_widget_wrapper = 'class="wp-video"';
-
- $mejs_wrapped = strpos( $html, $video_widget_wrapper );
-
- // If this is a video widget wrapped by mejs, return the html.
- if ( false !== $mejs_wrapped ) {
- return $html;
- }
-
- if ( defined( 'SCRIPT_DEBUG' ) && true == SCRIPT_DEBUG ) {
- wp_enqueue_script( 'jetpack-responsive-videos-script', plugins_url( 'responsive-videos/responsive-videos.js', __FILE__ ), array( 'jquery' ), '1.3', true );
- } else {
- wp_enqueue_script( 'jetpack-responsive-videos-min-script', plugins_url( 'responsive-videos/responsive-videos.min.js', __FILE__ ), array( 'jquery' ), '1.3', true );
- }
-
- // Enqueue CSS to ensure compatibility with all themes
- wp_enqueue_style( 'jetpack-responsive-videos-style', plugins_url( 'responsive-videos/responsive-videos.css', __FILE__ ) );
-
- return '<div class="jetpack-video-wrapper">' . $html . '</div>';
-}
-
-/**
- * Check if oEmbed is a `$video_patterns` provider video before wrapping.
- *
- * @param mixed $html The cached HTML result, stored in post meta.
- * @param string $url he attempted embed URL.
- *
- * @return string
- */
-function jetpack_responsive_videos_maybe_wrap_oembed( $html, $url = null ) {
- if ( empty( $html ) || ! is_string( $html ) || ! $url ) {
- return $html;
- }
-
- $jetpack_video_wrapper = '<div class="jetpack-video-wrapper">';
-
- $already_wrapped = strpos( $html, $jetpack_video_wrapper );
-
- // If the oEmbed has already been wrapped, return the html.
- if ( false !== $already_wrapped ) {
- return $html;
- }
-
- /**
- * oEmbed Video Providers.
- *
- * A whitelist of oEmbed video provider Regex patterns to check against before wrapping the output.
- *
- * @module theme-tools
- *
- * @since 3.8.0
- *
- * @param array $video_patterns oEmbed video provider Regex patterns.
- */
- $video_patterns = apply_filters(
- 'jetpack_responsive_videos_oembed_videos',
- array(
- 'https?://((m|www)\.)?youtube\.com/watch',
- 'https?://((m|www)\.)?youtube\.com/playlist',
- 'https?://youtu\.be/',
- 'https?://(.+\.)?vimeo\.com/',
- 'https?://(www\.)?dailymotion\.com/',
- 'https?://dai.ly/',
- 'https?://(www\.)?hulu\.com/watch/',
- 'https?://wordpress.tv/',
- 'https?://(www\.)?funnyordie\.com/videos/',
- 'https?://vine.co/v/',
- 'https?://(www\.)?collegehumor\.com/video/',
- 'https?://(www\.|embed\.)?ted\.com/talks/',
- )
- );
-
- // Merge patterns to run in a single preg_match call.
- $video_patterns = '(' . implode( '|', $video_patterns ) . ')';
-
- $is_video = preg_match( $video_patterns, $url );
-
- // If the oEmbed is a video, wrap it in the responsive wrapper.
- if ( false === $already_wrapped && 1 === $is_video ) {
- return jetpack_responsive_videos_embed_html( $html );
- }
-
- return $html;
-}
-
-/**
- * Remove the Jetpack Responsive video wrapper in embed blocks.
- *
- * @since 7.0.0
- *
- * @param string $block_content The block content about to be appended.
- * @param array $block The full block, including name and attributes.
- *
- * @return string $block_content String of rendered HTML.
- */
-function jetpack_responsive_videos_remove_wrap_oembed( $block_content, $block ) {
- if (
- isset( $block['blockName'] )
- && false !== strpos( $block['blockName'], 'core-embed' )
- ) {
- $block_content = preg_replace( '#<div class="jetpack-video-wrapper">(.*?)</div>#', '${1}', $block_content );
- }
-
- return $block_content;
-}
diff --git a/plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.css b/plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.css
deleted file mode 100644
index 056f1829..00000000
--- a/plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.css
+++ /dev/null
@@ -1,10 +0,0 @@
-.jetpack-video-wrapper {
- margin-bottom: 1.6em;
-}
-
-.jetpack-video-wrapper > embed,
-.jetpack-video-wrapper > iframe,
-.jetpack-video-wrapper > object,
-.jetpack-video-wrapper > .wp-video {
- margin-bottom: 0;
-}
diff --git a/plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.js b/plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.js
deleted file mode 100644
index 7e95b3fb..00000000
--- a/plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.js
+++ /dev/null
@@ -1,67 +0,0 @@
-( function( $ ) {
-
- var resizeTimer;
-
- function responsiveVideos() {
-
- $( '.jetpack-video-wrapper' ).find( 'embed, iframe, object' ).each( function() {
- var _this, videoWidth, videoHeight, videoRatio, videoWrapper, videoMargin, containerWidth;
-
- _this = $( this );
- videoMargin = 0;
-
- if ( _this.parents( '.jetpack-video-wrapper' ).prev( 'p' ).css( 'text-align' ) === 'center' ) {
- videoMargin = '0 auto';
- }
-
- if ( ! _this.attr( 'data-ratio' ) ) {
- _this
- .attr( 'data-ratio', this.height / this.width )
- .attr( 'data-width', this.width )
- .attr( 'data-height', this.height )
- .css( {
- 'display' : 'block',
- 'margin' : videoMargin
- } );
- }
-
- videoWidth = _this.attr( 'data-width' );
- videoHeight = _this.attr( 'data-height' );
- videoRatio = _this.attr( 'data-ratio' );
- videoWrapper = _this.parent();
- containerWidth = videoWrapper.width();
-
- if ( videoRatio === 'Infinity' ) {
- videoWidth = '100%';
- }
-
- _this
- .removeAttr( 'height' )
- .removeAttr( 'width' );
-
- if ( videoWidth > containerWidth ) {
- _this
- .width( containerWidth )
- .height( containerWidth * videoRatio );
- } else {
- _this
- .width( videoWidth )
- .height( videoHeight );
- }
-
- } );
-
- }
-
- $( document ).ready( function() {
- $( window )
- .on( 'load.jetpack', responsiveVideos )
- .on( 'resize.jetpack', function() {
- clearTimeout( resizeTimer );
- resizeTimer = setTimeout( responsiveVideos, 500 );
- } )
- .on( 'post-load.jetpack', responsiveVideos )
- .resize();
- } );
-
-} )( jQuery );
diff --git a/plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.min.js b/plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.min.js
deleted file mode 100644
index ff419935..00000000
--- a/plugins/jetpack/modules/theme-tools/responsive-videos/responsive-videos.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(t){function a(){t(".jetpack-video-wrapper").find("embed, iframe, object").each(function(){var a,e,i,r,h,d,o;a=t(this),d=0,"center"===a.parents(".jetpack-video-wrapper").prev("p").css("text-align")&&(d="0 auto"),a.attr("data-ratio")||a.attr("data-ratio",this.height/this.width).attr("data-width",this.width).attr("data-height",this.height).css({display:"block",margin:d}),e=a.attr("data-width"),i=a.attr("data-height"),r=a.attr("data-ratio"),h=a.parent(),o=h.width(),"Infinity"===r&&(e="100%"),a.removeAttr("height").removeAttr("width"),e>o?a.width(o).height(o*r):a.width(e).height(i)})}var e;t(document).ready(function(){t(window).on("load.jetpack",a).on("resize.jetpack",function(){clearTimeout(e),e=setTimeout(a,500)}).on("post-load.jetpack",a).resize()})}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/site-breadcrumbs.php b/plugins/jetpack/modules/theme-tools/site-breadcrumbs.php
deleted file mode 100644
index 2f266738..00000000
--- a/plugins/jetpack/modules/theme-tools/site-breadcrumbs.php
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-/**
- * Plugin Name: Site Breadcrumbs
- * Plugin URI: https://wordpress.com
- * Description: Quickly add breadcrumbs to the single view of a hierarchical post type or a hierarchical taxonomy.
- * Author: Automattic
- * Version: 1.0
- * Author URI: https://wordpress.com
- * License: GPL2 or later
- */
-
-function jetpack_breadcrumbs() {
- $taxonomy = is_category() ? 'category' : get_query_var( 'taxonomy' );
- $is_taxonomy_hierarchical = is_taxonomy_hierarchical( $taxonomy );
-
- $post_type = is_page() ? 'page' : get_query_var( 'post_type' );
- $is_post_type_hierarchical = is_post_type_hierarchical( $post_type );
-
- if ( ! ( $is_post_type_hierarchical || $is_taxonomy_hierarchical ) || is_front_page() ) {
- return;
- }
-
- $breadcrumb = '';
-
- if ( $is_post_type_hierarchical ) {
- $post_id = get_queried_object_id();
- $ancestors = array_reverse( get_post_ancestors( $post_id ) );
- if ( $ancestors ) {
- foreach ( $ancestors as $ancestor ) {
- $breadcrumb .= '<span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"><a href="' . esc_url( get_permalink( $ancestor ) ) . '" itemprop="item"><span itemprop="name">' . esc_html( get_the_title( $ancestor ) ) . '</span></a></span>';
- }
- }
- $breadcrumb .= '<span class="current-page" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"><span itemprop="name">' . esc_html( get_the_title( $post_id ) ) . '</span></span>';
- } elseif ( $is_taxonomy_hierarchical ) {
- $current = get_term( get_queried_object_id(), $taxonomy );
-
- if ( is_wp_error( $current ) ) {
- return;
- }
-
- if ( $current->parent ) {
- $breadcrumb = jetpack_get_term_parents( $current->parent, $taxonomy );
- }
-
- $breadcrumb .= '<span class="current-category" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"><span itemprop="name">' . esc_html( $current->name ) . '</span></span>';
- }
-
- $home = '<span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem"><a href="' . esc_url( home_url( '/' ) ) . '" class="home-link" itemprop="item" rel="home"><span itemprop="name">' . esc_html__( 'Home', 'jetpack' ) . '</span></a></span>';
-
- echo '<nav class="entry-breadcrumbs" itemscope itemtype="https://schema.org/BreadcrumbList">' . $home . $breadcrumb . '</nav>';
-}
-
-/**
- * Return the parents for a given taxonomy term ID.
- *
- * @param int $term Taxonomy term whose parents will be returned.
- * @param string $taxonomy Taxonomy name that the term belongs to.
- * @param array $visited Terms already added to prevent duplicates.
- *
- * @return string A list of links to the term parents.
- */
-function jetpack_get_term_parents( $term, $taxonomy, $visited = array() ) {
- $parent = get_term( $term, $taxonomy );
-
- if ( is_wp_error( $parent ) ) {
- return $parent;
- }
-
- $chain = '';
-
- if ( $parent->parent && ( $parent->parent != $parent->term_id ) && ! in_array( $parent->parent, $visited ) ) {
- $visited[] = $parent->parent;
- $chain .= jetpack_get_term_parents( $parent->parent, $taxonomy, $visited );
- }
-
- $chain .= '<a href="' . esc_url( get_category_link( $parent->term_id ) ) . '">' . $parent->name . '</a>';
-
- return $chain;
-}
diff --git a/plugins/jetpack/modules/theme-tools/site-logo.php b/plugins/jetpack/modules/theme-tools/site-logo.php
deleted file mode 100644
index 04f16b71..00000000
--- a/plugins/jetpack/modules/theme-tools/site-logo.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-/*
- * Site Logo.
- * @see http://jetpack.com/support/site-logo/
- *
- * This feature will only be activated for themes that declare their support.
- * This can be done by adding code similar to the following during the
- * 'after_setup_theme' action:
- *
- * $args = array(
- * 'header-text' => array(
- * 'site-title',
- * 'site-description',
- * ),
- * 'size' => 'medium',
- * );
- * add_theme_support( 'site-logo', $args );
- *
- */
-
-/**
- * Activate the Site Logo plugin.
- *
- * @uses current_theme_supports()
- * @since 3.2
- */
-function site_logo_init() {
- // For transferring existing site logo from Jetpack -> Core
- if ( current_theme_supports( 'custom-logo' ) && ! get_theme_mod( 'custom_logo' ) && $jp_logo = get_option( 'site_logo' ) ) {
- set_theme_mod( 'custom_logo', $jp_logo['id'] );
- delete_option( 'site_logo' );
- }
-
- // Only load our code if our theme declares support, and the standalone plugin is not activated.
- if ( current_theme_supports( 'site-logo' ) && ! class_exists( 'Site_Logo', false ) ) {
- // Load our class for namespacing.
- require dirname( __FILE__ ) . '/site-logo/inc/class-site-logo.php';
-
- // Load template tags.
- require dirname( __FILE__ ) . '/site-logo/inc/functions.php';
-
- // Load backwards-compatible template tags.
- require dirname( __FILE__ ) . '/site-logo/inc/compat.php';
- }
-}
-add_action( 'init', 'site_logo_init' );
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control-rtl.css b/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control-rtl.css
deleted file mode 100644
index d5441db1..00000000
--- a/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control-rtl.css
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * RTL styles for the Site Logo control. Just swaps the button sides.
- */
-#customize-control-site_logo .remove {
- float: right;
- margin-left: 3px;
-}
-
-#customize-control-site_logo .new,
-#customize-control-site_logo .change {
- float: left;
-}
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control-rtl.min.css b/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control-rtl.min.css
deleted file mode 100644
index 1893fe9c..00000000
--- a/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-#customize-control-site_logo .remove{float:right;margin-left:3px}#customize-control-site_logo .change,#customize-control-site_logo .new{float:left} \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control.css b/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control.css
deleted file mode 100644
index b9a10fe6..00000000
--- a/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control.css
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Styles for the Site Logo control.
- */
-#customize-control-site_logo .current {
- margin-bottom: 6px;
-}
-
-#customize-control-site_logo .current span {
- border: 1px solid #eee;
- -webkit-border-radius: 2px;
- border-radius: 2px;
- color: #555;
- display: block;
- overflow: hidden;
- line-height: 40px;
- min-height: 40px;
- padding: 0 6px;
- text-align: center;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-#customize-control-site_logo .current img {
- max-width: 100%;
-}
-
-#customize-control-site_logo button.new,
-#customize-control-site_logo button.change,
-#customize-control-site_logo button.remove {
- height: auto;
- width: 48%;
- white-space: normal;
-}
-
-#customize-control-site_logo .remove {
- float: left;
- margin-right: 3px;
-}
-
-#customize-control-site_logo .new,
-#customize-control-site_logo .change {
- float: right;
-}
-
-#customize-control-site_logo .customize-control-description {
- display: block;
- clear: both;
- margin-bottom: 10px;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control.min.css b/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control.min.css
deleted file mode 100644
index 7fcee5ae..00000000
--- a/plugins/jetpack/modules/theme-tools/site-logo/css/site-logo-control.min.css
+++ /dev/null
@@ -1 +0,0 @@
-#customize-control-site_logo .current{margin-bottom:6px}#customize-control-site_logo .current span{border:1px solid #eee;-webkit-border-radius:2px;border-radius:2px;color:#555;display:block;overflow:hidden;line-height:40px;min-height:40px;padding:0 6px;text-align:center;text-overflow:ellipsis;white-space:nowrap}#customize-control-site_logo .current img{max-width:100%}#customize-control-site_logo button.change,#customize-control-site_logo button.new,#customize-control-site_logo button.remove{height:auto;width:48%;white-space:normal}#customize-control-site_logo .remove{float:left;margin-right:3px}#customize-control-site_logo .change,#customize-control-site_logo .new{float:right}#customize-control-site_logo .customize-control-description{display:block;clear:both;margin-bottom:10px} \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo-control.php b/plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo-control.php
deleted file mode 100644
index 5e23507d..00000000
--- a/plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo-control.php
+++ /dev/null
@@ -1,109 +0,0 @@
-<?php
-/**
- * Custom logo uploader control for the Customizer.
- *
- * @package Jetpack
- */
-class Site_Logo_Image_Control extends WP_Customize_Control {
- /**
- * Constructor for our custom control.
- *
- * @param object $wp_customize
- * @param string $control_id
- * @param array $args
- * @uses Site_Logo_Image_Control::l10n()
- */
- public function __construct( $wp_customize, $control_id, $args = array() ) {
- // declare these first so they can be overridden
- $this->l10n = array(
- 'upload' => __( 'Add logo', 'jetpack' ),
- 'set' => __( 'Set as logo', 'jetpack' ),
- 'choose' => __( 'Choose logo', 'jetpack' ),
- 'change' => __( 'Change logo', 'jetpack' ),
- 'remove' => __( 'Remove logo', 'jetpack' ),
- 'placeholder' => __( 'No logo set', 'jetpack' ),
- );
-
- parent::__construct( $wp_customize, $control_id, $args );
- }
-
- /**
- * This will be critical for our JS constructor.
- */
- public $type = 'site_logo';
-
- /**
- * Allows overriding of global labels by a specific control.
- */
- public $l10n = array();
-
- /**
- * The type of files that should be allowed by the media modal.
- */
- public $mime_type = 'image';
-
- /**
- * Enqueue our media manager resources, scripts, and styles.
- *
- * @uses wp_enqueue_media()
- * @uses wp_enqueue_style()
- * @uses wp_enqueue_script()
- * @uses plugins_url()
- */
- public function enqueue() {
- // Enqueues all needed media resources.
- wp_enqueue_media();
-
- // Enqueue our control script and styles.
- wp_enqueue_style( 'site-logo-control', plugins_url( '../css/site-logo-control.css', __FILE__ ) );
- wp_enqueue_script( 'site-logo-control', plugins_url( '../js/site-logo-control.js', __FILE__ ), array( 'media-views', 'customize-controls', 'underscore' ), '', true );
- }
-
- /**
- * Check if we have an active site logo.
- *
- * @uses get_option()
- * @return boolean
- */
- public function has_site_logo() {
- $logo = get_option( 'site_logo' );
-
- if ( empty( $logo['url'] ) ) {
- return false;
- } else {
- return true;
- }
- }
-
- /**
- * Display our custom control in the Customizer.
- *
- * @uses Site_Logo_Image_Control::l10n()
- * @uses Site_Logo_Image_Control::mime_type()
- * @uses Site_Logo_Image_Control::label()
- * @uses Site_Logo_Image_Control::description()
- * @uses esc_attr()
- * @uses esc_html()
- */
- public function render_content() {
- // We do this to allow the upload control to specify certain labels
- $l10n = json_encode( $this->l10n );
-
- // Control title
- printf(
- '<span class="customize-control-title" data-l10n="%s" data-mime="%s">%s</span>',
- esc_attr( $l10n ),
- esc_attr( $this->mime_type ),
- esc_html( $this->label )
- );
-
- // Control description
- if ( ! empty( $this->description ) ) : ?>
- <span class="description customize-control-description"><?php echo $this->description; ?></span>
- <?php endif; ?>
-
- <div class="current"></div>
- <div class="actions"></div>
- <?php
- }
-}
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo.php b/plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo.php
deleted file mode 100644
index 75fe80b1..00000000
--- a/plugins/jetpack/modules/theme-tools/site-logo/inc/class-site-logo.php
+++ /dev/null
@@ -1,377 +0,0 @@
-<?php
-/**
- * Our Site Logo class for managing a theme-agnostic logo through the Customizer.
- *
- * @package Jetpack
- */
-class Site_Logo {
- /**
- * Stores our single instance.
- */
- private static $instance;
-
- /**
- * Stores our current logo settings.
- */
- public $logo;
-
- /**
- * Return our instance, creating a new one if necessary.
- *
- * @uses Site_Logo::$instance
- * @return object Site_Logo
- */
- public static function instance() {
- if ( ! isset( self::$instance ) ) {
- self::$instance = new Site_Logo();
- self::$instance->register_hooks();
- }
-
- return self::$instance;
- }
-
- /**
- * Get our current logo settings stored in options.
- *
- * @uses get_option()
- */
- private function __construct() {
- $this->logo = get_option( 'site_logo', null );
- }
-
- /**
- * Register our actions and filters.
- *
- * @uses Site_Logo::head_text_styles()
- * @uses Site_Logo::customize_register()
- * @uses Site_Logo::preview_enqueue()
- * @uses Site_Logo::body_classes()
- * @uses Site_Logo::media_manager_image_sizes()
- * @uses add_action
- * @uses add_filter
- */
- public function register_hooks() {
- // This would only happen if a theme supports BOTH site-logo and custom-logo for some reason
- if ( current_theme_supports( 'custom-logo' ) ) {
- return;
- }
-
- add_action( 'wp_head', array( $this, 'head_text_styles' ) );
- add_action( 'customize_register', array( $this, 'customize_register' ) );
- add_action( 'customize_preview_init', array( $this, 'preview_enqueue' ) );
- add_action( 'delete_attachment', array( $this, 'reset_on_attachment_delete' ) );
- add_filter( 'body_class', array( $this, 'body_classes' ) );
- add_filter( 'image_size_names_choose', array( $this, 'media_manager_image_sizes' ) );
- add_filter( 'display_media_states', array( $this, 'add_media_state' ) );
- }
-
- /**
- * Add our logo uploader to the Customizer.
- *
- * @param object $wp_customize Customizer object.
- * @uses current_theme_supports()
- * @uses current_theme_supports()
- * @uses WP_Customize_Manager::add_setting()
- * @uses WP_Customize_Manager::add_control()
- * @uses Site_Logo::sanitize_checkbox()
- */
- public function customize_register( $wp_customize ) {
- // Include our custom control.
- require dirname( __FILE__ ) . '/class-site-logo-control.php';
-
- // Add a setting to hide header text if the theme isn't supporting the feature itself
- if ( ! current_theme_supports( 'custom-header' ) ) {
- $wp_customize->add_setting(
- 'site_logo_header_text',
- array(
- 'default' => 1,
- 'sanitize_callback' => array( $this, 'sanitize_checkbox' ),
- 'transport' => 'postMessage',
- )
- );
-
- $wp_customize->add_control(
- new WP_Customize_Control(
- $wp_customize,
- 'site_logo_header_text',
- array(
- 'label' => __( 'Display Header Text', 'jetpack' ),
- 'section' => 'title_tagline',
- 'settings' => 'site_logo_header_text',
- 'type' => 'checkbox',
- )
- )
- );
- }
-
- // Add the setting for our logo value.
- $wp_customize->add_setting(
- 'site_logo',
- array(
- 'capability' => 'manage_options',
- 'default' => array(
- 'id' => 0,
- 'sizes' => array(),
- 'url' => false,
- ),
- 'sanitize_callback' => array( $this, 'sanitize_logo_setting' ),
- 'transport' => 'postMessage',
- 'type' => 'option',
- )
- );
-
- // Add our image uploader.
- $wp_customize->add_control(
- new Site_Logo_Image_Control(
- $wp_customize,
- 'site_logo',
- array(
- 'label' => __( 'Logo', 'jetpack' ),
- 'section' => 'title_tagline',
- 'settings' => 'site_logo',
- )
- )
- );
- }
-
- /**
- * Enqueue scripts for the Customizer live preview.
- *
- * @uses wp_enqueue_script()
- * @uses plugins_url()
- * @uses current_theme_supports()
- * @uses Site_Logo::header_text_classes()
- * @uses wp_localize_script()
- */
- public function preview_enqueue() {
- wp_enqueue_script( 'site-logo-preview', plugins_url( '../js/site-logo.js', __FILE__ ), array( 'media-views' ), '', true );
-
- // Don't bother passing in header text classes if the theme supports custom headers.
- if ( ! current_theme_supports( 'custom-header' ) ) {
- $classes = jetpack_sanitize_header_text_classes( $this->header_text_classes() );
- wp_enqueue_script( 'site-logo-header-text', plugins_url( '../js/site-logo-header-text.js', __FILE__ ), array( 'media-views' ), '', true );
- wp_localize_script( 'site-logo-header-text', 'site_logo_header_classes', $classes );
- }
- }
-
- /**
- * Get header text classes. If not defined in add_theme_support(), defaults from Underscores will be used.
- *
- * @uses get_theme_support
- * @return string String of classes to hide
- */
- public function header_text_classes() {
- $args = get_theme_support( 'site-logo' );
-
- if ( isset( $args[0]['header-text'] ) ) {
- // Use any classes defined in add_theme_support().
- $classes = $args[0]['header-text'];
- } else {
- // Otherwise, use these defaults, which will work with any Underscores-based theme.
- $classes = array(
- 'site-title',
- 'site-description',
- );
- }
-
- // If we've got an array, reduce them to a string for output
- if ( is_array( $classes ) ) {
- $classes = (string) '.' . implode( ', .', $classes );
- } else {
- $classes = (string) '.' . $classes;
- }
-
- return $classes;
- }
-
- /**
- * Hide header text on front-end if necessary.
- *
- * @uses current_theme_supports()
- * @uses get_theme_mod()
- * @uses Site_Logo::header_text_classes()
- * @uses esc_html()
- */
- public function head_text_styles() {
- // Bail if our theme supports custom headers.
- if ( current_theme_supports( 'custom-header' ) ) {
- return;
- }
-
- // Is Display Header Text unchecked? If so, we need to hide our header text.
- if ( ! get_theme_mod( 'site_logo_header_text', 1 ) ) {
- $classes = $this->header_text_classes();
- ?>
- <!-- Site Logo: hide header text -->
- <style type="text/css">
- <?php echo jetpack_sanitize_header_text_classes( $classes ); ?> {
- position: absolute;
- clip: rect(1px, 1px, 1px, 1px);
- }
- </style>
- <?php
- }
- }
-
- /**
- * Determine image size to use for the logo.
- *
- * @uses get_theme_support()
- * @return string Size specified in add_theme_support declaration, or 'thumbnail' default
- */
- public function theme_size() {
- $args = get_theme_support( 'site-logo' );
- $valid_sizes = get_intermediate_image_sizes();
-
- // Add 'full' to the list of accepted values.
- $valid_sizes[] = 'full';
-
- // If the size declared in add_theme_support is valid, use it; otherwise, just go with 'thumbnail'.
- $size = ( isset( $args[0]['size'] ) && in_array( $args[0]['size'], $valid_sizes ) ) ? $args[0]['size'] : 'thumbnail';
-
- return $size;
- }
-
- /**
- * Make custom image sizes available to the media manager.
- *
- * @param array $sizes
- * @uses get_intermediate_image_sizes()
- * @return array All default and registered custom image sizes.
- */
- public function media_manager_image_sizes( $sizes ) {
- // Get an array of all registered image sizes.
- $intermediate = get_intermediate_image_sizes();
-
- // Have we got anything fun to work with?
- if ( is_array( $intermediate ) && ! empty( $intermediate ) ) {
- foreach ( $intermediate as $key => $size ) {
- // If the size isn't already in the $sizes array, add it.
- if ( ! array_key_exists( $size, $sizes ) ) {
- $sizes[ $size ] = $size;
- }
- }
- }
-
- return $sizes;
- }
-
- /**
- * Add site logos to media states in the Media Manager.
- *
- * @return array The current attachment's media states.
- */
- public function add_media_state( $media_states ) {
- // Only bother testing if we have a site logo set.
- if ( $this->has_site_logo() ) {
- global $post;
-
- // If our attachment ID and the site logo ID match, this image is the site logo.
- if ( $post->ID == $this->logo['id'] ) {
- $media_states[] = __( 'Site Logo', 'jetpack' );
- }
- }
-
- return $media_states;
- }
-
- /**
- * Reset the site logo if the current logo is deleted in the media manager.
- *
- * @param int $site_id
- * @uses Site_Logo::remove_site_logo()
- */
- public function reset_on_attachment_delete( $post_id ) {
- if ( $this->logo['id'] == $post_id ) {
- $this->remove_site_logo();
- }
- }
-
- /**
- * Determine if a site logo is assigned or not.
- *
- * @uses Site_Logo::$logo
- * @return boolean True if there is an active logo, false otherwise
- */
- public function has_site_logo() {
- return ( isset( $this->logo['id'] ) && 0 !== $this->logo['id'] ) ? true : false;
- }
-
- /**
- * Reset the site logo option to zero (empty).
- *
- * @uses update_option()
- */
- public function remove_site_logo() {
- update_option(
- 'site_logo',
- array(
- 'id' => (int) 0,
- 'sizes' => array(),
- 'url' => '',
- )
- );
- }
-
- /**
- * Adds custom classes to the array of body classes.
- *
- * @uses Site_Logo::has_site_logo()
- * @return array Array of <body> classes
- */
- public function body_classes( $classes ) {
- // Add a class if a Site Logo is active
- if ( $this->has_site_logo() ) {
- $classes[] = 'has-site-logo';
- }
-
- return $classes;
- }
-
- /**
- * Sanitize our header text Customizer setting.
- *
- * @param $input
- * @return mixed 1 if checked, empty string if not checked.
- */
- public function sanitize_checkbox( $input ) {
- return ( 1 == $input ) ? 1 : '';
- }
-
- /**
- * Validate and sanitize a new site logo setting.
- *
- * @param $input
- * @return mixed 1 if checked, empty string if not checked.
- */
- public function sanitize_logo_setting( $input ) {
- $input['id'] = absint( $input['id'] );
- $input['url'] = esc_url_raw( $input['url'] );
-
- // If the new setting doesn't point to a valid attachment, just reset the whole thing.
- if ( false == wp_get_attachment_image_src( $input['id'] ) ) {
- $input = array(
- 'id' => (int) 0,
- 'sizes' => array(),
- 'url' => '',
- );
- }
-
- return $input;
- }
-}
-
-/**
- * Allow themes and plugins to access Site_Logo methods and properties.
- *
- * @uses Site_Logo::instance()
- * @return object Site_Logo
- */
-function site_logo() {
- return Site_Logo::instance();
-}
-
-/**
- * One site logo, please.
- */
-site_logo();
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/inc/compat.php b/plugins/jetpack/modules/theme-tools/site-logo/inc/compat.php
deleted file mode 100644
index d1098536..00000000
--- a/plugins/jetpack/modules/theme-tools/site-logo/inc/compat.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/**
- * Functions for maintaining backwards compatibility with unprefixed template tags from the original Site Logo plugin.
- * These should never be used in themes; instead, use the template tags in functions.php.
- * See: https://github.com/Automattic/jetpack/pull/956
- *
- * @package Jetpack
- */
-
-if ( ! function_exists( 'the_site_logo' ) ) :
- /**
- * Unprefixed, backwards-compatible function for outputting the site logo.
- *
- * @uses jetpack_the_site_logo()
- */
- function the_site_logo() {
- jetpack_the_site_logo();
- }
-endif;
-
-if ( ! function_exists( 'has_site_logo' ) ) :
- /**
- * Unprefixed, backwards-compatible function for determining if a site logo has been set.
- *
- * @uses jetpack_has_site_logo()
- * @return bool True if a site logo is set, false otherwise.
- */
- function has_site_logo() {
- return jetpack_has_site_logo();
- }
-endif;
-
-if ( ! function_exists( 'get_site_logo' ) ) :
- /**
- * Unprefixed, backwards-compatible function for getting either the site logo's image URL or its ID.
- *
- * @param string $show Return the site logo URL or ID.
- * @uses jetpack_get_site_logo()
- * @return string Site logo ID or URL (the default).
- */
- function get_site_logo( $show = 'url' ) {
- return jetpack_get_site_logo( $show );
- }
-endif;
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/inc/functions.php b/plugins/jetpack/modules/theme-tools/site-logo/inc/functions.php
deleted file mode 100644
index 3b27b32f..00000000
--- a/plugins/jetpack/modules/theme-tools/site-logo/inc/functions.php
+++ /dev/null
@@ -1,176 +0,0 @@
-<?php
-/**
- * Functions and template tags for using site logos.
- *
- * @package Jetpack
- */
-
-/**
- * Retrieve the site logo URL or ID (URL by default). Pass in the string 'id' for ID.
- *
- * @uses get_option()
- * @uses esc_url_raw()
- * @uses set_url_scheme()
- * @return mixed The URL or ID of our site logo, false if not set
- * @since 1.0
- */
-function jetpack_get_site_logo( $show = 'url' ) {
- $logo = site_logo()->logo;
-
- // Return false if no logo is set
- if ( ! isset( $logo['id'] ) || 0 == $logo['id'] ) {
- return false;
- }
-
- // Return the ID if specified, otherwise return the URL by default
- if ( 'id' == $show ) {
- return $logo['id'];
- } else {
- return esc_url_raw( set_url_scheme( $logo['url'] ) );
- }
-}
-
-/**
- * Retrieve an array of the dimensions of the Site Logo.
- *
- * @uses Site_Logo::theme_size()
- * @uses get_option( 'thumbnail_size_w' )
- * @uses get_option( 'thumbnail_size_h' )
- * @uses global $_wp_additional_image_sizes;
- *
- * @since 3.6.0
- *
- * @return array $dimensions {
- * An array of dimensions of the Site Logo.
- *
- * @type string $width Width of the logo in pixels.
- * @type string $height Height of the logo in pixels.
- * }
- */
-function jetpack_get_site_logo_dimensions() {
- // Get the image size to use with the logo.
- $size = site_logo()->theme_size();
-
- // If the size is the default `thumbnail`, get its dimensions. Otherwise, get them from $_wp_additional_image_sizes
- if ( empty( $size ) ) {
- return false;
- } elseif ( 'thumbnail' == $size ) {
- $dimensions = array(
- 'width' => get_option( 'thumbnail_size_w' ),
- 'height' => get_option( 'thumbnail_size_h' ),
- );
- } else {
- global $_wp_additional_image_sizes;
-
- if ( ! isset( $_wp_additional_image_sizes[ $size ] ) ) {
- return false;
- }
-
- $dimensions = array(
- 'width' => $_wp_additional_image_sizes[ $size ]['width'],
- 'height' => $_wp_additional_image_sizes[ $size ]['height'],
- );
- }
-
- return $dimensions;
-}
-
-/**
- * Determine if a site logo is assigned or not.
- *
- * @uses get_option
- * @return boolean True if there is an active logo, false otherwise
- */
-function jetpack_has_site_logo() {
- return site_logo()->has_site_logo();
-}
-
-/**
- * Output an <img> tag of the site logo, at the size specified
- * in the theme's add_theme_support() declaration.
- *
- * @uses Site_Logo::logo
- * @uses Site_Logo::theme_size()
- * @uses jetpack_has_site_logo()
- * @uses jetpack_is_customize_preview()
- * @uses esc_url()
- * @uses home_url()
- * @uses esc_attr()
- * @uses wp_get_attachment_image()
- * @uses apply_filters()
- * @since 1.0
- */
-function jetpack_the_site_logo() {
- $logo = site_logo()->logo;
- $logo_id = get_theme_mod( 'custom_logo' ); // Check for WP 4.5 Site Logo
- $logo_id = $logo_id ? $logo_id : $logo['id']; // Use WP Core logo if present, otherwise use Jetpack's.
- $size = site_logo()->theme_size();
- $html = '';
-
- // If no logo is set, but we're in the Customizer, leave a placeholder (needed for the live preview).
- if ( ! jetpack_has_site_logo() ) {
- if ( jetpack_is_customize_preview() ) {
- $html = sprintf(
- '<a href="%1$s" class="site-logo-link" style="display:none;"><img class="site-logo" data-size="%2$s" /></a>',
- esc_url( home_url( '/' ) ),
- esc_attr( $size )
- );
- }
- }
-
- // We have a logo. Logo is go.
- else {
- $html = sprintf(
- '<a href="%1$s" class="site-logo-link" rel="home" itemprop="url">%2$s</a>',
- esc_url( home_url( '/' ) ),
- wp_get_attachment_image(
- $logo_id,
- $size,
- false,
- array(
- 'class' => "site-logo attachment-$size",
- 'data-size' => $size,
- 'itemprop' => 'logo',
- )
- )
- );
- }
-
- /**
- * Filter the Site Logo output.
- *
- * @module theme-tools
- *
- * @since 3.2.0
- *
- * @param string $html Site Logo HTML output.
- * @param array $logo Array of Site Logo details.
- * @param string $size Size specified in add_theme_support declaration, or 'thumbnail' default.
- */
- echo apply_filters( 'jetpack_the_site_logo', $html, $logo, $size );
-}
-
-/**
- * Whether the site is being previewed in the Customizer.
- * Duplicate of core function until 4.0 is released.
- *
- * @global WP_Customize_Manager $wp_customize Customizer instance.
- * @return bool True if the site is being previewed in the Customizer, false otherwise.
- */
-function jetpack_is_customize_preview() {
- global $wp_customize;
-
- return is_a( $wp_customize, 'WP_Customize_Manager' ) && $wp_customize->is_preview();
-}
-
-/**
- * Sanitize the string of classes used for header text.
- * Limit to A-Z,a-z,0-9,(space),(comma),_,-
- *
- * @return string Sanitized string of CSS classes.
- */
-function jetpack_sanitize_header_text_classes( $classes ) {
- $classes = preg_replace( '/[^A-Za-z0-9\,\ ._-]/', '', $classes );
-
- return $classes;
-}
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.js b/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.js
deleted file mode 100644
index 133fd9b9..00000000
--- a/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.js
+++ /dev/null
@@ -1,155 +0,0 @@
-/**
- * JS for handling the Site Logo Customizer control.
- */
-(function( wp, $ ){
- // nice shortcut
- var api = wp.customize;
- /**
- * The Customizer looks for wp.customizer.controlConstructor[type] functions
- * where type == the type member of a WP_Customize_Control
- */
- api.controlConstructor.site_logo = api.Control.extend({
- /**
- * This method is called when the control is ready to run.
- * Do all of your setup and event binding here.
- */
- ready: function() {
- // this.container is a jQuery object of your container
-
- // grab the bits of data from the title for specifying this control
- var data = this.container.find( '.customize-control-title' ).data();
-
- // Use specific l10n data for this control where available
- this.l10n = data.l10n;
- // Grab mime type
- this.mime = data.mime;
-
- // Set up image container and button elements. Cache for re-use.
- this.$imgContainer = $( '#customize-control-site_logo .current' );
- this.$btnContainer = $( '#customize-control-site_logo .actions' );
- this.$img = $( '<img class="site-logo-thumbnail" />' ).prependTo( this.$imgContainer );
- this.$placeholder = $( '<span>' + this.l10n.placeholder + '</span>' ).prependTo( this.$imgContainer );
- this.$btnAdd = $( '<button type="button" class="button new">' + this.l10n.upload + '</button>' ).prependTo( this.$btnContainer );
- this.$btnChange = $( '<button type="button" class="button change">' + this.l10n.change + '</button>' ).prependTo( this.$btnContainer );
- this.$btnRemove = $( '<button type="button" class="button remove">' + this.l10n.remove + '</button>' ).prependTo( this.$btnContainer );
-
- // handy shortcut so we don't have to us _.bind every time we add a callback
- _.bindAll( this, 'removeImg', 'upload', 'render', 'pick' );
-
- this.$btnAdd.on( 'click', this.upload );
- this.$btnChange.on( 'click', this.upload );
- this.$btnRemove.on( 'click', this.removeImg );
-
- // Call render method whenever setting is changed.
- this.setting.bind( 'change', this.render );
- // Do initial rendering.
- this.render();
- },
- /**
- * Remember that _.bind was used to maintain `this` as the control
- * object rather than the usual jQuery way of binding to the DOM element.
- */
- upload: function( event ) {
- event.preventDefault();
-
- if ( ! this.frame ) {
- this.initFrame();
- }
-
- this.frame.open();
- },
- /**
- * Set the media frame so that it can be reused and accessed when needed.
- */
- initFrame: function() {
- this.frame = wp.media({
- // The title of the media modal
- title: this.l10n.choose,
- // restrict to specified mime type
- library: {
- type: this.mime
- },
- // Customize the submit button.
- button: {
- // Set the text of the button.
- text: this.l10n.set
- },
- // Just one, thanks.
- multiple: false
- });
-
- // When an image is selected, run a callback.
- this.frame.on( 'select', this.pick );
- },
- /**
- * Fired when an image is selected in the media modal. Gets the selected
- * image information, and sets it within the control.
- */
- pick: function() {
- // get the attachment from the modal frame
- var attachment = this.frame.state().get( 'selection' ).single();
- if ( 'image' === attachment.get( 'type' ) ) {
- // set the setting - the callback will take care of rendering
- this.setting( this.reduceMembers( attachment.toJSON() ) );
- }
- },
- /**
- * Reduces the attachment object to just the few desired members.
- * @param {object} attachment An attachment object provided by the
- * medial modal.
- * @return {object} A reduced media object.
- */
- reduceMembers: function( attachment ) {
- var desired = [
- 'id',
- 'sizes',
- 'url'
- ],
- output = {};
- $.each( desired, function( i, key ){
- output[key] = attachment[key];
- });
- return output;
- },
- /**
- * Called on init and whenever a setting is changed. Shows the thumbnail
- * when there is one or the upload button when there isn't.
- */
- render: function() {
- var value = this.setting();
-
- if ( value && value.url ) {
- this.$placeholder.hide();
- if ( ! value.sizes || ! value.sizes.medium ) {
- this.$img.attr( 'src', value.url );
- } else {
- this.$img.attr( 'src', value.sizes.medium.url );
- }
- this.$img.show();
- this.$btnRemove.show();
- this.$btnChange.show();
- this.$btnAdd.hide();
- } else {
- this.$img.hide();
- this.$placeholder.show();
- this.$btnRemove.hide();
- this.$btnChange.hide();
- this.$btnAdd.show();
- }
- },
- /**
- * Called when the "Remove Image" link is clicked. Sets thes setting back
- * to its default state.
- * @param {object} event jQuery Event object from click event
- */
- removeImg: function( event ) {
- event.preventDefault();
- this.setting( {
- url: '',
- id: 0
- } );
- }
-
- });
-
-})( this.wp, jQuery ); \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.min.js b/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.min.js
deleted file mode 100644
index 171d98e8..00000000
--- a/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-control.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(a,c){var b=a.customize;b.controlConstructor.site_logo=b.Control.extend({ready:function(){var d=this.container.find(".customize-control-title").data();this.l10n=d.l10n;this.mime=d.mime;this.$imgContainer=c("#customize-control-site_logo .current");this.$btnContainer=c("#customize-control-site_logo .actions");this.$img=c('<img class="site-logo-thumbnail" />').prependTo(this.$imgContainer);this.$placeholder=c("<span>"+this.l10n.placeholder+"</span>").prependTo(this.$imgContainer);this.$btnAdd=c('<button type="button" class="button new">'+this.l10n.upload+"</button>").prependTo(this.$btnContainer);this.$btnChange=c('<button type="button" class="button change">'+this.l10n.change+"</button>").prependTo(this.$btnContainer);this.$btnRemove=c('<button type="button" class="button remove">'+this.l10n.remove+"</button>").prependTo(this.$btnContainer);_.bindAll(this,"removeImg","upload","render","pick");this.$btnAdd.on("click",this.upload);this.$btnChange.on("click",this.upload);this.$btnRemove.on("click",this.removeImg);this.setting.bind("change",this.render);this.render()},upload:function(d){d.preventDefault();if(!this.frame){this.initFrame()}this.frame.open()},initFrame:function(){this.frame=a.media({title:this.l10n.choose,library:{type:this.mime},button:{text:this.l10n.set},multiple:false});this.frame.on("select",this.pick)},pick:function(){var d=this.frame.state().get("selection").first().toJSON();d=this.reduceMembers(d);this.setting(d)},reduceMembers:function(f){var e=["id","sizes","url"],d={};c.each(e,function(h,g){d[g]=f[g]});return d},render:function(){var d=this.setting();if(d&&d.url){this.$placeholder.hide();if(!d.sizes||!d.sizes.medium){this.$img.attr("src",d.url)}else{this.$img.attr("src",d.sizes.medium.url)}this.$img.show();this.$btnRemove.show();this.$btnChange.show();this.$btnAdd.hide()}else{this.$img.hide();this.$placeholder.show();this.$btnRemove.hide();this.$btnChange.hide();this.$btnAdd.show()}},removeImg:function(d){d.preventDefault();this.setting({url:"",id:0})}})})(this.wp,jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-header-text.js b/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-header-text.js
deleted file mode 100644
index 48736bc9..00000000
--- a/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-header-text.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/* global site_logo_header_classes */
-/**
- * JS for handling the "Display Header Text" setting's realtime preview.
- */
-(function($){
- var api = wp.customize,
- $classes = site_logo_header_classes;
-
- api( 'site_logo_header_text', function( value ) {
- value.bind( function( to ) {
- if ( true === to ) {
- $( $classes ).css({
- 'position': 'static',
- 'clip': 'auto'
- });
- } else {
- $( $classes ).css({
- 'position': 'absolute',
- 'clip': 'rect(1px 1px 1px 1px)'
- });
- }
- });
- });
-})(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-header-text.min.js b/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-header-text.min.js
deleted file mode 100644
index 39c56ec0..00000000
--- a/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo-header-text.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(t){var i=wp.customize,o=site_logo_header_classes;i("site_logo_header_text",function(i){i.bind(function(i){t(o).css(!0===i?{position:"static",clip:"auto"}:{position:"absolute",clip:"rect(1px 1px 1px 1px)"})})})}(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo.js b/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo.js
deleted file mode 100644
index b0c1c1f5..00000000
--- a/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * JS for handling the Site Logo real-time display in the Customizer preview frame.
- */
-(function($){
- var api = wp.customize,
- $body, $anchor, $logo, size;
-
- function cacheSelectors() {
- $body = $( 'body' );
- $anchor = $( '.site-logo-link' );
- $logo = $( '.site-logo' );
- size = $logo.attr( 'data-size' );
- }
-
- api( 'site_logo', function( value ){
- value.bind( function( newVal ){
- // grab selectors the first time through
- if ( ! $body ) {
- cacheSelectors();
- }
-
- // Let's update our preview logo.
- if ( newVal && newVal.url ) {
- // If the source was smaller than the size required by the theme, give the biggest we've got.
- if ( ! newVal.sizes[ size ] ) {
- size = 'full';
- }
-
- $logo.attr({
- height: newVal.sizes[ size ].height,
- width: newVal.sizes[ size ].width,
- src: newVal.sizes[ size ].url
- });
-
- $anchor.show();
- $body.addClass( 'has-site-logo' );
- } else {
- $anchor.hide();
- $body.removeClass( 'has-site-logo' );
- }
- });
- });
-})(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo.min.js b/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo.min.js
deleted file mode 100644
index a6fe41eb..00000000
--- a/plugins/jetpack/modules/theme-tools/site-logo/js/site-logo.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(d){var e=wp.customize,c,f,g,a;e("site_logo",function(e){e.bind(function(b){c||(c=d("body"),f=d(".site-logo-link"),g=d(".site-logo"),a=g.attr("data-size"));b&&b.url?(b.sizes[a]||(a="full"),g.attr({height:b.sizes[a].height,width:b.sizes[a].width,src:b.sizes[a].url}),f.show(),c.addClass("has-site-logo")):(f.hide(),c.removeClass("has-site-logo"))})})})(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/modules/theme-tools/social-links.php b/plugins/jetpack/modules/theme-tools/social-links.php
deleted file mode 100644
index 44b2cbc8..00000000
--- a/plugins/jetpack/modules/theme-tools/social-links.php
+++ /dev/null
@@ -1,252 +0,0 @@
-<?php
-/**
- * Social Links.
- *
- * This feature will only be activated for themes that declare their support.
- * This can be done by adding code similar to the following during the
- * 'after_setup_theme' action:
- *
- * add_theme_support( 'social-links', array(
- * 'facebook', 'twitter', 'linkedin', 'tumblr', 'google_plus',
- * ) );
- */
-
-function jetpack_theme_supports_social_links() {
- if ( current_theme_supports( 'social-links' ) && function_exists( 'publicize_init' ) ) {
- new Social_Links();
- }
-}
-add_action( 'init', 'jetpack_theme_supports_social_links', 30 );
-
-if ( ! class_exists( 'Social_Links' ) ) {
-
- class Social_Links {
-
- /**
- * The links the user set for each service.
- *
- * @var array
- */
- private $links;
-
- /**
- * A Publicize object.
- *
- * @var Publicize
- */
- private $publicize;
-
- /**
- * An array with all services that are supported by both Publicize and the
- * currently active theme.
- *
- * @var array
- */
- private $services = array();
-
- /**
- * An array of the services the theme supports
- *
- * @var array
- */
- private $theme_supported_services = array();
-
- /**
- * Constructor.
- */
- public function __construct() {
- $theme_support = get_theme_support( 'social-links' );
-
- /*
- An array of named arguments must be passed as the second parameter
- * of add_theme_support().
- */
- if ( empty( $theme_support[0] ) ) {
- return;
- }
-
- $this->theme_supported_services = $theme_support[0];
- $this->links = Jetpack_Options::get_option( 'social_links', array() );
-
- $this->admin_setup();
-
- add_filter( 'jetpack_has_social_links', array( $this, 'has_social_links' ) );
- add_filter( 'jetpack_get_social_links', array( $this, 'get_social_links' ) );
-
- foreach ( $theme_support[0] as $service ) {
- add_filter( "pre_option_jetpack-$service", array( $this, 'get_social_link_filter' ) ); // get_option( 'jetpack-service' );
- add_filter( "theme_mod_jetpack-$service", array( $this, 'get_social_link_filter' ) ); // get_theme_mod( 'jetpack-service' );
- }
- }
-
- public function admin_setup() {
- if ( ! current_user_can( 'manage_options' ) ) {
- return;
- }
-
- if ( ! is_admin() && ! $this->is_customize_preview() ) {
- return;
- }
-
- $this->publicize = publicize_init();
- $publicize_services = $this->publicize->get_services( 'connected' );
- $this->services = array_intersect( array_keys( $publicize_services ), $this->theme_supported_services );
-
- add_action( 'publicize_connected', array( $this, 'check_links' ), 20 );
- add_action( 'publicize_disconnected', array( $this, 'check_links' ), 20 );
- add_action( 'customize_register', array( $this, 'customize_register' ) );
- add_filter( 'sanitize_option_jetpack_options', array( $this, 'sanitize_link' ) );
- }
-
- /**
- * Compares the currently saved links with the connected services and removes
- * links from services that are no longer connected.
- *
- * @return void
- */
- public function check_links() {
- $active_links = array_intersect_key( $this->links, array_flip( $this->services ) );
-
- if ( $active_links !== $this->links ) {
- $this->links = $active_links;
- Jetpack_Options::update_option( 'social_links', $active_links );
- }
- }
-
- /**
- * Add social link dropdown to the Customizer.
- *
- * @param WP_Customize_Manager $wp_customize Theme Customizer object.
- */
- public function customize_register( $wp_customize ) {
- $wp_customize->add_section(
- 'jetpack_social_links',
- array(
- 'title' => esc_html__( 'Connect', 'jetpack' ),
- 'priority' => 35,
- )
- );
-
- foreach ( array_keys( $this->publicize->get_services( 'all' ) ) as $service ) {
- $choices = $this->get_customize_select( $service );
-
- if ( empty( $choices ) ) {
- continue;
- }
-
- $wp_customize->add_setting(
- "jetpack_options[social_links][$service]",
- array(
- 'type' => 'option',
- 'default' => '',
- )
- );
-
- $wp_customize->add_control(
- "jetpack-$service",
- array(
- 'label' => $this->publicize->get_service_label( $service ),
- 'section' => 'jetpack_social_links',
- 'settings' => "jetpack_options[social_links][$service]",
- 'type' => 'select',
- 'choices' => $choices,
- )
- );
- }
- }
-
- /**
- * Sanitizes social links.
- *
- * @param array $option The incoming values to be sanitized.
- * @returns array
- */
- public function sanitize_link( $option ) {
- foreach ( $this->services as $service ) {
- if ( ! empty( $option['social_links'][ $service ] ) ) {
- $option['social_links'][ $service ] = esc_url_raw( $option['social_links'][ $service ] );
- } else {
- unset( $option['social_links'][ $service ] );
- }
- }
-
- return $option;
- }
-
- /**
- * Returns whether there are any social links set.
- *
- * @returns bool
- */
- public function has_social_links() {
- return ! empty( $this->links );
- }
-
- /**
- * Return available social links.
- *
- * @returns array
- */
- public function get_social_links() {
- return $this->links;
- }
-
- /**
- * Short-circuits get_option and get_theme_mod calls.
- *
- * @param string $link The incoming value to be replaced.
- * @returns string $link The social link that we've got.
- */
- public function get_social_link_filter( $link ) {
- if ( preg_match( '/_jetpack-(.+)$/i', current_filter(), $matches ) && ! empty( $this->links[ $matches[1] ] ) ) {
- return $this->links[ $matches[1] ];
- }
-
- return $link;
- }
-
- /**
- * Puts together an array of choices for a specific service.
- *
- * @param string $service The social service.
- * @return array An associative array with profile links and display names.
- */
- private function get_customize_select( $service ) {
- $choices = array(
- '' => __( '&mdash; Select &mdash;', 'jetpack' ),
- );
-
- if ( isset( $this->links[ $service ] ) ) {
- $choices[ $this->links[ $service ] ] = $this->links[ $service ];
- }
-
- $connected_services = $this->publicize->get_services( 'connected' );
- if ( isset( $connected_services[ $service ] ) ) {
- foreach ( $connected_services[ $service ] as $c ) {
- $profile_link = $this->publicize->get_profile_link( $service, $c );
-
- if ( false === $profile_link ) {
- continue;
- }
-
- $choices[ $profile_link ] = $this->publicize->get_display_name( $service, $c );
- }
- }
-
- if ( 1 === count( $choices ) ) {
- return array();
- }
-
- return $choices;
- }
-
- /**
- * Back-compat function for versions prior to 4.0.
- */
- private function is_customize_preview() {
- global $wp_customize;
- return is_a( $wp_customize, 'WP_Customize_Manager' ) && $wp_customize->is_preview();
- }
- }
-
-} // end if ( ! class_exists( 'Social_Links' )
diff --git a/plugins/jetpack/modules/theme-tools/social-menu.php b/plugins/jetpack/modules/theme-tools/social-menu.php
deleted file mode 100644
index 16c66b6a..00000000
--- a/plugins/jetpack/modules/theme-tools/social-menu.php
+++ /dev/null
@@ -1,113 +0,0 @@
-<?php
-/**
- * Social Menu.
- *
- * This feature will only be activated for themes that declare their support.
- * This can be done by adding code similar to the following during the
- * 'after_setup_theme' action:
- *
- * add_theme_support( 'jetpack-social-menu' );
- */
-
-/**
- * Activate the Social Menu plugin.
- *
- * @uses current_theme_supports()
- */
-function jetpack_social_menu_init() {
- // Only load our code if our theme declares support
- if ( ! current_theme_supports( 'jetpack-social-menu' ) ) {
- return;
- }
-
- /*
- * Social Menu description.
- *
- * Rename the social menu description.
- *
- * @module theme-tools
- *
- * @since 3.9.0
- *
- * @param string $social_menu_description Social Menu description
- */
- $social_menu_description = apply_filters( 'jetpack_social_menu_description', __( 'Social Menu', 'jetpack' ) );
-
- // Register a new menu location
- register_nav_menus(
- array(
- 'jetpack-social-menu' => esc_html( $social_menu_description ),
- )
- );
-
- // Enqueue CSS
- add_action( 'wp_enqueue_scripts', 'jetpack_social_menu_style' );
-
- // Load SVG icons related functions and filters
- if ( 'svg' === jetpack_social_menu_get_type() ) {
- require dirname( __FILE__ ) . '/social-menu/icon-functions.php';
- }
-}
-add_action( 'after_setup_theme', 'jetpack_social_menu_init', 99 );
-
-/**
- * Return the type of menu the theme is using.
- *
- * @uses get_theme_support()
- * @return null|string $menu_type
- */
-function jetpack_social_menu_get_type() {
- $options = get_theme_support( 'jetpack-social-menu' );
-
- if ( empty( $options ) ) {
- $menu_type = null;
- } else {
- $menu_type = ( in_array( $options[0], array( 'genericons', 'svg' ) ) ) ? $options[0] : 'genericons';
- }
-
- return $menu_type;
-}
-
-/**
- * Function to enqueue the CSS.
- */
-function jetpack_social_menu_style() {
- $menu_type = jetpack_social_menu_get_type();
-
- if ( ! $menu_type ) {
- return;
- }
-
- $deps = ( 'genericons' === $menu_type ) ? array( 'genericons' ) : null;
-
- if ( has_nav_menu( 'jetpack-social-menu' ) ) {
- wp_enqueue_style( 'jetpack-social-menu', plugins_url( 'social-menu/social-menu.css', __FILE__ ), $deps, '1.0' );
- }
-}
-
-/**
- * Create the function for the menu.
- */
-function jetpack_social_menu() {
- if ( has_nav_menu( 'jetpack-social-menu' ) ) :
- $menu_type = jetpack_social_menu_get_type();
- $link_after = '</span>';
-
- if ( 'svg' === $menu_type ) {
- $link_after .= jetpack_social_menu_get_svg( array( 'icon' => 'chain' ) );
- } ?>
- <nav class="jetpack-social-navigation jetpack-social-navigation-<?php echo esc_attr( $menu_type ); ?>" role="navigation" aria-label="<?php esc_html_e( 'Social Links Menu', 'jetpack' ); ?>">
- <?php
- wp_nav_menu(
- array(
- 'theme_location' => 'jetpack-social-menu',
- 'link_before' => '<span class="screen-reader-text">',
- 'link_after' => $link_after,
- 'depth' => 1,
- )
- );
- ?>
- </nav><!-- .jetpack-social-navigation -->
- <?php
- endif;
-}
diff --git a/plugins/jetpack/modules/theme-tools/social-menu/icon-functions.php b/plugins/jetpack/modules/theme-tools/social-menu/icon-functions.php
deleted file mode 100644
index c8cec4a2..00000000
--- a/plugins/jetpack/modules/theme-tools/social-menu/icon-functions.php
+++ /dev/null
@@ -1,175 +0,0 @@
-<?php
-/**
- * SVG icons related functions and filters
- */
-
-if ( ! function_exists( 'jetpack_social_menu_include_svg_icons' ) ) :
- /**
- * Add SVG definitions to the footer.
- */
- function jetpack_social_menu_include_svg_icons() {
- // Define SVG sprite file.
- $svg_icons = dirname( __FILE__ ) . '/social-menu.svg';
-
- // If it exists, include it.
- if ( file_exists( $svg_icons ) ) {
- require_once $svg_icons;
- }
- }
- add_action( 'wp_footer', 'jetpack_social_menu_include_svg_icons', 9999 );
-endif;
-
-if ( ! function_exists( 'jetpack_social_menu_get_svg' ) ) :
- /**
- * Return SVG markup.
- *
- * @param array $args {
- * Parameters needed to display an SVG.
- *
- * @type string $icon Required SVG icon filename.
- * }
- * @return string SVG markup.
- */
- function jetpack_social_menu_get_svg( $args = array() ) {
- // Make sure $args are an array.
- if ( empty( $args ) ) {
- return esc_html__( 'Please define default parameters in the form of an array.', 'jetpack' );
- }
-
- // Define an icon.
- if ( false === array_key_exists( 'icon', $args ) ) {
- return esc_html__( 'Please define an SVG icon filename.', 'jetpack' );
- }
-
- // Set defaults.
- $defaults = array(
- 'icon' => '',
- 'fallback' => false,
- );
-
- // Parse args.
- $args = wp_parse_args( $args, $defaults );
-
- // Set aria hidden.
- $aria_hidden = ' aria-hidden="true"';
-
- // Begin SVG markup.
- $svg = '<svg class="icon icon-' . esc_attr( $args['icon'] ) . '"' . $aria_hidden . ' role="img">';
-
- /*
- * Display the icon.
- *
- * The whitespace around `<use>` is intentional - it is a work around to a keyboard navigation bug in Safari 10.
- *
- * See https://core.trac.wordpress.org/ticket/38387.
- */
- $svg .= ' <use href="#icon-' . esc_html( $args['icon'] ) . '" xlink:href="#icon-' . esc_html( $args['icon'] ) . '"></use> ';
-
- // Add some markup to use as a fallback for browsers that do not support SVGs.
- if ( $args['fallback'] ) {
- $svg .= '<span class="svg-fallback icon-' . esc_attr( $args['icon'] ) . '"></span>';
- }
-
- $svg .= '</svg>';
-
- return $svg;
- }
-endif;
-
-if ( ! function_exists( 'jetpack_social_menu_nav_menu_social_icons' ) ) :
- /**
- * Display SVG icons in social links menu.
- *
- * @param string $item_output The menu item output.
- * @param WP_Post $item Menu item object.
- * @param int $depth Depth of the menu.
- * @param array $args wp_nav_menu() arguments.
- * @return string $item_output The menu item output with social icon.
- */
- function jetpack_social_menu_nav_menu_social_icons( $item_output, $item, $depth, $args ) {
- // Get supported social icons.
- $social_icons = jetpack_social_menu_social_links_icons();
-
- // Change SVG icon inside social links menu if there is supported URL.
- if ( 'jetpack-social-menu' === $args->theme_location ) {
- foreach ( $social_icons as $attr => $value ) {
- if ( false !== strpos( $item_output, $attr ) ) {
- $item_output = str_replace( $args->link_after, '</span>' . jetpack_social_menu_get_svg( array( 'icon' => esc_attr( $value ) ) ), $item_output );
- }
- }
- }
-
- return $item_output;
- }
- add_filter( 'walker_nav_menu_start_el', 'jetpack_social_menu_nav_menu_social_icons', 10, 4 );
-endif;
-
-if ( ! function_exists( 'jetpack_social_menu_social_links_icons' ) ) :
- /**
- * Returns an array of supported social links (URL and icon name).
- *
- * @return array $social_links_icons
- */
- function jetpack_social_menu_social_links_icons() {
- // Supported social links icons.
- $social_links_icons = array(
- '500px.com' => '500px',
- 'amazon.cn' => 'amazon',
- 'amazon.in' => 'amazon',
- 'amazon.fr' => 'amazon',
- 'amazon.de' => 'amazon',
- 'amazon.it' => 'amazon',
- 'amazon.nl' => 'amazon',
- 'amazon.es' => 'amazon',
- 'amazon.co' => 'amazon',
- 'amazon.ca' => 'amazon',
- 'amazon.com' => 'amazon',
- 'apple.com' => 'apple',
- 'itunes.com' => 'apple',
- 'bandcamp.com' => 'bandcamp',
- 'behance.net' => 'behance',
- 'codepen.io' => 'codepen',
- 'deviantart.com' => 'deviantart',
- 'discord.gg' => 'discord',
- 'discordapp.com' => 'discord',
- 'digg.com' => 'digg',
- 'dribbble.com' => 'dribbble',
- 'dropbox.com' => 'dropbox',
- 'etsy.com' => 'etsy',
- 'facebook.com' => 'facebook',
- '/feed/' => 'feed',
- 'flickr.com' => 'flickr',
- 'foursquare.com' => 'foursquare',
- 'goodreads.com' => 'goodreads',
- 'plus.google.com' => 'google-plus',
- 'google.com' => 'google',
- 'github.com' => 'github',
- 'instagram.com' => 'instagram',
- 'linkedin.com' => 'linkedin',
- 'mailto:' => 'mail',
- 'meetup.com' => 'meetup',
- 'medium.com' => 'medium',
- 'pinterest.' => 'pinterest',
- 'getpocket.com' => 'pocket',
- 'reddit.com' => 'reddit',
- 'skype.com' => 'skype',
- 'skype:' => 'skype',
- 'slideshare.net' => 'slideshare',
- 'snapchat.com' => 'snapchat',
- 'soundcloud.com' => 'soundcloud',
- 'spotify.com' => 'spotify',
- 'stumbleupon.com' => 'stumbleupon',
- 'tumblr.com' => 'tumblr',
- 'twitch.tv' => 'twitch',
- 'twitter.com' => 'twitter',
- 'vimeo.com' => 'vimeo',
- 'vk.com' => 'vk',
- 'wordpress.org' => 'wordpress',
- 'wordpress.com' => 'wordpress',
- 'yelp.com' => 'yelp',
- 'youtube.com' => 'youtube',
- );
-
- return $social_links_icons;
- }
-endif;
diff --git a/plugins/jetpack/modules/theme-tools/social-menu/social-menu.css b/plugins/jetpack/modules/theme-tools/social-menu/social-menu.css
deleted file mode 100644
index 57a3d7c1..00000000
--- a/plugins/jetpack/modules/theme-tools/social-menu/social-menu.css
+++ /dev/null
@@ -1,197 +0,0 @@
-/*--------------------------------------------------------------
-Global
---------------------------------------------------------------*/
-.jetpack-social-navigation ul {
- display: block;
- margin: 0 0 1.5em;
- padding: 0;
-}
-
-.jetpack-social-navigation li {
- display: inline-block;
- margin: 0;
- line-height: 1;
-}
-
-.jetpack-social-navigation a {
- border: 0;
- height: 1em;
- text-decoration: none;
- width: 1em;
-}
-
-/*--------------------------------------------------------------
-SVG
---------------------------------------------------------------*/
-.jetpack-social-navigation-svg .icon {
- color: inherit;
- fill: currentColor;
- height: 1em;
- vertical-align: middle;
- width: 1em;
-}
-
-/*--------------------------------------------------------------
-Genericons
---------------------------------------------------------------*/
-.jetpack-social-navigation-genericons a:before {
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- display: inline-block;
- font-family: Genericons;
- font-size: 1em;
- font-style: normal;
- font-weight: normal;
- height: 1em;
- line-height: 1;
- speak: none;
- text-decoration: inherit;
- vertical-align: top;
- width: 1em;
-}
-
-/* Default */
-.jetpack-social-navigation-genericons a:before {
- content: "\f415";
-}
-
-/* CodePen */
-.jetpack-social-navigation-genericons a[href*="codepen.io"]:before {
- content: "\f216";
-}
-
-/* Digg */
-.jetpack-social-navigation-genericons a[href*="digg.com"]:before {
- content: "\f221";
-}
-
-/* Dribbble */
-.jetpack-social-navigation-genericons a[href*="dribbble.com"]:before {
- content: "\f201";
-}
-
-/* Dropbox */
-.jetpack-social-navigation-genericons a[href*="dropbox.com"]:before {
- content: "\f225";
-}
-
-/* Email */
-.jetpack-social-navigation-genericons a[href*="mailto:"]:before {
- content: "\f410";
-}
-
-/* Facebook */
-.jetpack-social-navigation-genericons a[href*="facebook.com"]:before {
- content: "\f203";
-}
-
-/* Flickr */
-.jetpack-social-navigation-genericons a[href*="flickr.com"]:before {
- content: "\f211";
-}
-
-/* Foursquare */
-.jetpack-social-navigation-genericons a[href*="foursquare.com"]:before {
- content: "\f226";
-}
-
-/* GitHub */
-.jetpack-social-navigation-genericons a[href*="github.com"]:before {
- content: "\f200";
-}
-
-/* Google Plus */
-.jetpack-social-navigation-genericons a[href*="plus.google.com"]:before {
- content: "\f206";
-}
-
-/* Instagram */
-.jetpack-social-navigation-genericons a[href*="instagram.com"]:before {
- content: "\f215";
-}
-
-/* LinkedIn */
-.jetpack-social-navigation-genericons a[href*="linkedin.com"]:before {
- content: "\f208";
-}
-
-/* Path */
-.jetpack-social-navigation-genericons a[href*="path.com"]:before {
- content: "\f219";
-}
-
-/* Pinterest */
-.jetpack-social-navigation-genericons a[href*="pinterest."]:before {
- content: "\f210";
-}
-
-/* Pocket */
-.jetpack-social-navigation-genericons a[href*="getpocket.com"]:before {
- content: "\f224";
-}
-
-/* Polldaddy */
-.jetpack-social-navigation-genericons a[href*="polldaddy.com"]:before {
- content: "\f217";
-}
-
-/* Reddit */
-.jetpack-social-navigation-genericons a[href*="reddit.com"]:before {
- content: "\f222";
-}
-
-/* RSS Feed */
-.jetpack-social-navigation-genericons a[href$="/feed/"]:before {
- content: "\f413";
-}
-
-/* Skype */
-.jetpack-social-navigation-genericons a[href*="skype:"]:before {
- content: "\f220";
-}
-
-/* Spotify */
-.jetpack-social-navigation-genericons a[href*="spotify.com"]:before {
- content: "\f515";
-}
-
-/* StumbleUpon */
-.jetpack-social-navigation-genericons a[href*="stumbleupon.com"]:before {
- content: "\f223";
-}
-
-/* Tumblr */
-.jetpack-social-navigation-genericons a[href*="tumblr.com"]:before {
- content: "\f214";
-}
-
-/* Twitch */
-.jetpack-social-navigation-genericons a[href*="twitch.tv"]:before {
- content: "\f516";
-}
-
-/* Twitter */
-.jetpack-social-navigation-genericons a[href*="twitter.com"]:before {
- content: "\f202";
-}
-
-/* Vimeo */
-.jetpack-social-navigation-genericons a[href*="vimeo.com"]:before {
- content: "\f212";
-}
-
-/* Vine */
-.jetpack-social-navigation-genericons a[href*="vine.co"]:before {
- content: "\f517";
-}
-
-/* WordPress */
-.jetpack-social-navigation-genericons a[href*="wordpress.com"]:before,
-.jetpack-social-navigation-genericons a[href*="wordpress.org"]:before {
- content: "\f205";
-}
-
-/* YouTube */
-.jetpack-social-navigation-genericons a[href*="youtube.com"]:before {
- content: "\f213";
-}
diff --git a/plugins/jetpack/modules/theme-tools/social-menu/social-menu.svg b/plugins/jetpack/modules/theme-tools/social-menu/social-menu.svg
deleted file mode 100644
index aae2867a..00000000
--- a/plugins/jetpack/modules/theme-tools/social-menu/social-menu.svg
+++ /dev/null
@@ -1,134 +0,0 @@
-<svg style="position: absolute; width: 0; height: 0; overflow: hidden;" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<defs>
-<symbol id="icon-500px" viewBox="0 0 24 24">
-<path d="M6.94026,15.1412c.00437.01213.108.29862.168.44064a6.55008,6.55008,0,1,0,6.03191-9.09557,6.68654,6.68654,0,0,0-2.58357.51467A8.53914,8.53914,0,0,0,8.21268,8.61344L8.209,8.61725V3.22948l9.0504-.00008c.32934-.0036.32934-.46353.32934-.61466s0-.61091-.33035-.61467L7.47248,2a.43.43,0,0,0-.43131.42692v7.58355c0,.24466.30476.42131.58793.4819.553.11812.68074-.05864.81617-.2457l.018-.02481A10.52673,10.52673,0,0,1,9.32258,9.258a5.35268,5.35268,0,1,1,7.58985,7.54976,5.417,5.417,0,0,1-3.80867,1.56365,5.17483,5.17483,0,0,1-2.69822-.74478l.00342-4.61111a2.79372,2.79372,0,0,1,.71372-1.78792,2.61611,2.61611,0,0,1,1.98282-.89477,2.75683,2.75683,0,0,1,1.95525.79477,2.66867,2.66867,0,0,1,.79656,1.909,2.724,2.724,0,0,1-2.75849,2.748,4.94651,4.94651,0,0,1-.86254-.13719c-.31234-.093-.44519.34058-.48892.48349-.16811.54966.08453.65862.13687.67489a3.75751,3.75751,0,0,0,1.25234.18375,3.94634,3.94634,0,1,0-2.82444-6.742,3.67478,3.67478,0,0,0-1.13028,2.584l-.00041.02323c-.0035.11667-.00579,2.881-.00644,3.78811l-.00407-.00451a6.18521,6.18521,0,0,1-1.0851-1.86092c-.10544-.27856-.34358-.22925-.66857-.12917-.14192.04372-.57386.17677-.47833.489Zm4.65165-1.08338a.51346.51346,0,0,0,.19513.31818l.02276.022a.52945.52945,0,0,0,.3517.18416.24242.24242,0,0,0,.16577-.0611c.05473-.05082.67382-.67812.73287-.738l.69041.68819a.28978.28978,0,0,0,.21437.11032.53239.53239,0,0,0,.35708-.19486c.29792-.30419.14885-.46821.07676-.54751l-.69954-.69975.72952-.73469c.16-.17311.01874-.35708-.12218-.498-.20461-.20461-.402-.25742-.52855-.14083l-.7254.72665-.73354-.73375a.20128.20128,0,0,0-.14179-.05695.54135.54135,0,0,0-.34379.19648c-.22561.22555-.274.38149-.15656.5059l.73374.7315-.72942.73072A.26589.26589,0,0,0,11.59191,14.05782Zm1.59866-9.915A8.86081,8.86081,0,0,0,9.854,4.776a.26169.26169,0,0,0-.16938.22759.92978.92978,0,0,0,.08619.42094c.05682.14524.20779.531.50006.41955a8.40969,8.40969,0,0,1,2.91968-.55484,7.87875,7.87875,0,0,1,3.086.62286,8.61817,8.61817,0,0,1,2.30562,1.49315.2781.2781,0,0,0,.18318.07586c.15529,0,.30425-.15253.43167-.29551.21268-.23861.35873-.4369.1492-.63538a8.50425,8.50425,0,0,0-2.62312-1.694A9.0177,9.0177,0,0,0,13.19058,4.14283ZM19.50945,18.6236h0a.93171.93171,0,0,0-.36642-.25406.26589.26589,0,0,0-.27613.06613l-.06943.06929A7.90606,7.90606,0,0,1,7.60639,18.505a7.57284,7.57284,0,0,1-1.696-2.51537,8.58715,8.58715,0,0,1-.5147-1.77754l-.00871-.04864c-.04939-.25873-.28755-.27684-.62981-.22448-.14234.02178-.5755.088-.53426.39969l.001.00712a9.08807,9.08807,0,0,0,15.406,4.99094c.00193-.00192.04753-.04718.0725-.07436C19.79425,19.16234,19.87422,18.98728,19.50945,18.6236Z"/>
-</symbol>
-<symbol id="icon-amazon" viewBox="0 0 24 24">
-<path d="M13.582,8.182C11.934,8.367,9.78,8.49,8.238,9.166c-1.781,0.769-3.03,2.337-3.03,4.644 c0,2.953,1.86,4.429,4.253,4.429c2.02,0,3.125-0.477,4.685-2.065c0.516,0.747,0.685,1.109,1.629,1.894 c0.212,0.114,0.483,0.103,0.672-0.066l0.006,0.006c0.567-0.505,1.599-1.401,2.18-1.888c0.231-0.188,0.19-0.496,0.009-0.754 c-0.52-0.718-1.072-1.303-1.072-2.634V8.305c0-1.876,0.133-3.599-1.249-4.891C15.23,2.369,13.422,2,12.04,2 C9.336,2,6.318,3.01,5.686,6.351C5.618,6.706,5.877,6.893,6.109,6.945l2.754,0.298C9.121,7.23,9.308,6.977,9.357,6.72 c0.236-1.151,1.2-1.706,2.284-1.706c0.584,0,1.249,0.215,1.595,0.738c0.398,0.584,0.346,1.384,0.346,2.061V8.182z M13.049,14.088 c-0.451,0.8-1.169,1.291-1.967,1.291c-1.09,0-1.728-0.83-1.728-2.061c0-2.42,2.171-2.86,4.227-2.86v0.615 C13.582,12.181,13.608,13.104,13.049,14.088z M20.683,19.339C18.329,21.076,14.917,22,11.979,22c-4.118,0-7.826-1.522-10.632-4.057 c-0.22-0.199-0.024-0.471,0.241-0.317c3.027,1.762,6.771,2.823,10.639,2.823c2.608,0,5.476-0.541,8.115-1.66 C20.739,18.62,21.072,19.051,20.683,19.339z M21.336,21.043c-0.194,0.163-0.379,0.076-0.293-0.139 c0.284-0.71,0.92-2.298,0.619-2.684c-0.301-0.386-1.99-0.183-2.749-0.092c-0.23,0.027-0.266-0.173-0.059-0.319 c1.348-0.946,3.555-0.673,3.811-0.356C22.925,17.773,22.599,19.986,21.336,21.043z"/>
-</symbol>
-<symbol id="icon-apple" viewBox="0 0 24 24">
-<path d="M20.07,17.586a10.874,10.874,0,0,1-1.075,1.933,9.822,9.822,0,0,1-1.385,1.674,2.687,2.687,0,0,1-1.78.784,4.462,4.462,0,0,1-1.644-.393,4.718,4.718,0,0,0-1.77-.391,4.878,4.878,0,0,0-1.82.391A4.9,4.9,0,0,1,9.021,22a2.53,2.53,0,0,1-1.82-.8A10.314,10.314,0,0,1,5.752,19.46,11.987,11.987,0,0,1,4.22,16.417a11.143,11.143,0,0,1-.643-3.627,6.623,6.623,0,0,1,.87-3.465A5.1,5.1,0,0,1,6.268,7.483a4.9,4.9,0,0,1,2.463-.695,5.8,5.8,0,0,1,1.9.443,6.123,6.123,0,0,0,1.511.444,9.04,9.04,0,0,0,1.675-.523,5.537,5.537,0,0,1,2.277-.4,4.835,4.835,0,0,1,3.788,1.994,4.213,4.213,0,0,0-2.235,3.827,4.222,4.222,0,0,0,1.386,3.181,4.556,4.556,0,0,0,1.385.909q-.167.483-.353.927ZM16.211,2.4a4.267,4.267,0,0,1-1.094,2.8,3.726,3.726,0,0,1-3.1,1.528A3.114,3.114,0,0,1,12,6.347a4.384,4.384,0,0,1,1.16-2.828,4.467,4.467,0,0,1,1.414-1.061A4.215,4.215,0,0,1,16.19,2a3.633,3.633,0,0,1,.021.4Z"/>
-</symbol>
-<symbol id="icon-bandcamp" viewBox="0 0 24 24">
-<path d="M15.27 17.289 3 17.289 8.73 6.711 21 6.711 15.27 17.289"/>
-</symbol>
-<symbol id="icon-behance" viewBox="0 0 24 24">
-<path d="M7.799,5.698c0.589,0,1.12,0.051,1.606,0.156c0.482,0.102,0.894,0.273,1.241,0.507c0.344,0.235,0.612,0.546,0.804,0.938 c0.188,0.387,0.281,0.871,0.281,1.443c0,0.619-0.141,1.137-0.421,1.551c-0.284,0.413-0.7,0.751-1.255,1.014 c0.756,0.218,1.317,0.601,1.689,1.146c0.374,0.549,0.557,1.205,0.557,1.975c0,0.623-0.12,1.161-0.359,1.612 c-0.241,0.457-0.569,0.828-0.973,1.114c-0.408,0.288-0.876,0.5-1.399,0.637C9.052,17.931,8.514,18,7.963,18H2V5.698H7.799 M7.449,10.668c0.481,0,0.878-0.114,1.192-0.345c0.311-0.228,0.463-0.603,0.463-1.119c0-0.286-0.051-0.523-0.152-0.707 C8.848,8.315,8.711,8.171,8.536,8.07C8.362,7.966,8.166,7.894,7.94,7.854c-0.224-0.044-0.457-0.06-0.697-0.06H4.709v2.874H7.449z M7.6,15.905c0.267,0,0.521-0.024,0.759-0.077c0.243-0.053,0.457-0.137,0.637-0.261c0.182-0.12,0.332-0.283,0.441-0.491 C9.547,14.87,9.6,14.602,9.6,14.278c0-0.633-0.18-1.084-0.533-1.357c-0.356-0.27-0.83-0.404-1.413-0.404H4.709v3.388L7.6,15.905z M16.162,15.864c0.367,0.358,0.897,0.538,1.583,0.538c0.493,0,0.92-0.125,1.277-0.374c0.354-0.248,0.571-0.514,0.654-0.79h2.155 c-0.347,1.072-0.872,1.838-1.589,2.299C19.534,18,18.67,18.23,17.662,18.23c-0.701,0-1.332-0.113-1.899-0.337 c-0.567-0.227-1.041-0.544-1.439-0.958c-0.389-0.415-0.689-0.907-0.904-1.484c-0.213-0.574-0.32-1.21-0.32-1.899 c0-0.666,0.11-1.288,0.329-1.863c0.222-0.577,0.529-1.075,0.933-1.492c0.406-0.42,0.885-0.751,1.444-0.994 c0.558-0.241,1.175-0.363,1.857-0.363c0.754,0,1.414,0.145,1.98,0.44c0.563,0.291,1.026,0.686,1.389,1.181 c0.363,0.493,0.622,1.057,0.783,1.69c0.16,0.632,0.217,1.292,0.171,1.983h-6.428C15.557,14.84,15.795,15.506,16.162,15.864 M18.973,11.184c-0.291-0.321-0.783-0.496-1.384-0.496c-0.39,0-0.714,0.066-0.973,0.2c-0.254,0.132-0.461,0.297-0.621,0.491 c-0.157,0.197-0.265,0.405-0.328,0.628c-0.063,0.217-0.101,0.413-0.111,0.587h3.98C19.478,11.969,19.265,11.509,18.973,11.184z M15.057,7.738h4.985V6.524h-4.985L15.057,7.738z"/>
-</symbol>
-<symbol id="icon-chain" viewBox="0 0 24 24">
-<path d="M19.647,16.706a1.134,1.134,0,0,0-.343-.833l-2.549-2.549a1.134,1.134,0,0,0-.833-.343,1.168,1.168,0,0,0-.883.392l.233.226q.2.189.264.264a2.922,2.922,0,0,1,.184.233.986.986,0,0,1,.159.312,1.242,1.242,0,0,1,.043.337,1.172,1.172,0,0,1-1.176,1.176,1.237,1.237,0,0,1-.337-.043,1,1,0,0,1-.312-.159,2.76,2.76,0,0,1-.233-.184q-.073-.068-.264-.264l-.226-.233a1.19,1.19,0,0,0-.4.895,1.134,1.134,0,0,0,.343.833L15.837,19.3a1.13,1.13,0,0,0,.833.331,1.18,1.18,0,0,0,.833-.318l1.8-1.789a1.12,1.12,0,0,0,.343-.821Zm-8.615-8.64a1.134,1.134,0,0,0-.343-.833L8.163,4.7a1.134,1.134,0,0,0-.833-.343,1.184,1.184,0,0,0-.833.331L4.7,6.473a1.12,1.12,0,0,0-.343.821,1.134,1.134,0,0,0,.343.833l2.549,2.549a1.13,1.13,0,0,0,.833.331,1.184,1.184,0,0,0,.883-.38L8.728,10.4q-.2-.189-.264-.264A2.922,2.922,0,0,1,8.28,9.9a.986.986,0,0,1-.159-.312,1.242,1.242,0,0,1-.043-.337A1.172,1.172,0,0,1,9.254,8.079a1.237,1.237,0,0,1,.337.043,1,1,0,0,1,.312.159,2.761,2.761,0,0,1,.233.184q.073.068.264.264l.226.233a1.19,1.19,0,0,0,.4-.895ZM22,16.706a3.343,3.343,0,0,1-1.042,2.488l-1.8,1.789a3.536,3.536,0,0,1-4.988-.025l-2.525-2.537a3.384,3.384,0,0,1-1.017-2.488,3.448,3.448,0,0,1,1.078-2.561l-1.078-1.078a3.434,3.434,0,0,1-2.549,1.078,3.4,3.4,0,0,1-2.5-1.029L3.029,9.794A3.4,3.4,0,0,1,2,7.294,3.343,3.343,0,0,1,3.042,4.806l1.8-1.789A3.384,3.384,0,0,1,7.331,2a3.357,3.357,0,0,1,2.5,1.042l2.525,2.537a3.384,3.384,0,0,1,1.017,2.488,3.448,3.448,0,0,1-1.078,2.561l1.078,1.078a3.551,3.551,0,0,1,5.049-.049l2.549,2.549A3.4,3.4,0,0,1,22,16.706Z"/>
-</symbol>
-<symbol id="icon-codepen" viewBox="0 0 24 24">
-<path d="M22.016,8.84c-0.002-0.013-0.005-0.025-0.007-0.037c-0.005-0.025-0.008-0.048-0.015-0.072 c-0.003-0.015-0.01-0.028-0.013-0.042c-0.008-0.02-0.015-0.04-0.023-0.062c-0.007-0.015-0.013-0.028-0.02-0.042 c-0.008-0.02-0.018-0.037-0.03-0.057c-0.007-0.013-0.017-0.027-0.025-0.038c-0.012-0.018-0.023-0.035-0.035-0.052 c-0.01-0.013-0.02-0.025-0.03-0.037c-0.015-0.017-0.028-0.032-0.043-0.045c-0.01-0.012-0.022-0.023-0.035-0.035 c-0.015-0.015-0.032-0.028-0.048-0.04c-0.012-0.01-0.025-0.02-0.037-0.03c-0.005-0.003-0.01-0.008-0.015-0.012l-9.161-6.096 c-0.289-0.192-0.666-0.192-0.955,0L2.359,8.237C2.354,8.24,2.349,8.245,2.344,8.249L2.306,8.277 c-0.017,0.013-0.033,0.027-0.048,0.04C2.246,8.331,2.234,8.342,2.222,8.352c-0.015,0.015-0.028,0.03-0.042,0.047 c-0.012,0.013-0.022,0.023-0.03,0.037C2.139,8.453,2.125,8.471,2.115,8.488C2.107,8.501,2.099,8.514,2.09,8.526 C2.079,8.548,2.069,8.565,2.06,8.585C2.054,8.6,2.047,8.613,2.04,8.626C2.032,8.648,2.025,8.67,2.019,8.69 c-0.005,0.013-0.01,0.027-0.013,0.042C1.999,8.755,1.995,8.778,1.99,8.803C1.989,8.817,1.985,8.828,1.984,8.84 C1.978,8.879,1.975,8.915,1.975,8.954v6.093c0,0.037,0.003,0.075,0.008,0.112c0.002,0.012,0.005,0.025,0.007,0.038 c0.005,0.023,0.008,0.047,0.015,0.072c0.003,0.015,0.008,0.028,0.013,0.04c0.007,0.022,0.013,0.042,0.022,0.063 c0.007,0.015,0.013,0.028,0.02,0.04c0.008,0.02,0.018,0.038,0.03,0.058c0.007,0.013,0.015,0.027,0.025,0.038 c0.012,0.018,0.023,0.035,0.035,0.052c0.01,0.013,0.02,0.025,0.03,0.037c0.013,0.015,0.028,0.032,0.042,0.045 c0.012,0.012,0.023,0.023,0.035,0.035c0.015,0.013,0.032,0.028,0.048,0.04l0.038,0.03c0.005,0.003,0.01,0.007,0.013,0.01 l9.163,6.095C11.668,21.953,11.833,22,12,22c0.167,0,0.332-0.047,0.478-0.144l9.163-6.095l0.015-0.01 c0.013-0.01,0.027-0.02,0.037-0.03c0.018-0.013,0.035-0.028,0.048-0.04c0.013-0.012,0.025-0.023,0.035-0.035 c0.017-0.015,0.03-0.032,0.043-0.045c0.01-0.013,0.02-0.025,0.03-0.037c0.013-0.018,0.025-0.035,0.035-0.052 c0.008-0.013,0.018-0.027,0.025-0.038c0.012-0.02,0.022-0.038,0.03-0.058c0.007-0.013,0.013-0.027,0.02-0.04 c0.008-0.022,0.015-0.042,0.023-0.063c0.003-0.013,0.01-0.027,0.013-0.04c0.007-0.025,0.01-0.048,0.015-0.072 c0.002-0.013,0.005-0.027,0.007-0.037c0.003-0.042,0.007-0.079,0.007-0.117V8.954C22.025,8.915,22.022,8.879,22.016,8.84z M12.862,4.464l6.751,4.49l-3.016,2.013l-3.735-2.492V4.464z M11.138,4.464v4.009l-3.735,2.494L4.389,8.954L11.138,4.464z M3.699,10.562L5.853,12l-2.155,1.438V10.562z M11.138,19.536l-6.749-4.491l3.015-2.011l3.735,2.492V19.536z M12,14.035L8.953,12 L12,9.966L15.047,12L12,14.035z M12.862,19.536v-4.009l3.735-2.492l3.016,2.011L12.862,19.536z M20.303,13.438L18.147,12 l2.156-1.438L20.303,13.438z"/>
-</symbol>
-<symbol id="icon-deviantart" viewBox="0 0 24 24">
-<path d="M 18.19 5.636 18.19 2 18.188 2 14.553 2 14.19 2.366 12.474 5.636 11.935 6 5.81 6 5.81 10.994 9.177 10.994 9.477 11.357 5.81 18.363 5.81 22 5.811 22 9.447 22 9.81 21.634 11.526 18.364 12.065 18 18.19 18 18.19 13.006 14.823 13.006 14.523 12.641 18.19 5.636z"/>
-</symbol>
-<symbol id="icon-digg" viewBox="0 0 24 24">
-<path d="M4.5,5.4h2.2V16H1V8.5h3.5V5.4L4.5,5.4z M4.5,14.2v-4H3.2v4H4.5z M7.6,8.5V16h2.2V8.5C9.8,8.5,7.6,8.5,7.6,8.5z M7.6,5.4 v2.2h2.2V5.4C9.8,5.4,7.6,5.4,7.6,5.4z M10.7,8.5h5.7v10.1h-5.7v-1.8h3.5V16h-3.5C10.7,16,10.7,8.5,10.7,8.5z M14.2,14.2v-4h-1.3v4 H14.2z M17.3,8.5H23v10.1h-5.7v-1.8h3.5V16h-3.5C17.3,16,17.3,8.5,17.3,8.5z M20.8,14.2v-4h-1.3v4H20.8z"/>
-</symbol>
-<symbol id="icon-discord" viewBox="0 0 24 24">
-<path d="M10.227 9.957c-.559 0-1 .48-1 1.063 0 .585.453 1.066 1 1.066.558 0 1-.48 1-1.066.007-.582-.442-1.063-1-1.063zm3.574 0c-.559 0-.996.48-.996 1.063 0 .585.449 1.066.996 1.066.558 0 1-.48 1-1.066 0-.582-.442-1.063-1-1.063zm0 0 M18.563 1.918H5.438c-1.11 0-2.008.879-2.008 1.973v12.957c0 1.093.898 1.972 2.007 1.972h11.11l-.52-1.773 1.254 1.14 1.184 1.075 2.105 1.82V3.891c0-1.094-.898-1.973-2.008-1.973zM14.78 14.434s-.351-.414-.644-.778c1.281-.355 1.773-1.14 1.773-1.14a5.745 5.745 0 0 1-1.129.566c-.488.2-.96.336-1.418.41a7.07 7.07 0 0 1-2.539-.008 8.133 8.133 0 0 1-1.441-.414 6.219 6.219 0 0 1-.715-.324c-.027-.02-.059-.027-.086-.047a.113.113 0 0 1-.039-.031c-.176-.094-.273-.16-.273-.16s.468.765 1.71 1.129c-.293.363-.656.797-.656.797-2.164-.067-2.984-1.457-2.984-1.457 0-3.086 1.41-5.586 1.41-5.586 1.41-1.036 2.75-1.008 2.75-1.008l.098.113c-1.762.5-2.575 1.258-2.575 1.258s.215-.117.579-.277c1.046-.454 1.878-.579 2.222-.606.059-.008.11-.02.168-.02a8.728 8.728 0 0 1 1.977-.019c.933.106 1.93.375 2.949.922 0 0-.773-.719-2.438-1.219l.137-.152s1.34-.028 2.75 1.008c0 0 1.414 2.5 1.414 5.586 0 0-.836 1.39-3 1.457zm0 0"/>
-</symbol>
-<symbol id="icon-dribbble" viewBox="0 0 24 24">
-<path d="M12,22C6.486,22,2,17.514,2,12S6.486,2,12,2c5.514,0,10,4.486,10,10S17.514,22,12,22z M20.434,13.369 c-0.292-0.092-2.644-0.794-5.32-0.365c1.117,3.07,1.572,5.57,1.659,6.09C18.689,17.798,20.053,15.745,20.434,13.369z M15.336,19.876c-0.127-0.749-0.623-3.361-1.822-6.477c-0.019,0.006-0.038,0.013-0.056,0.019c-4.818,1.679-6.547,5.02-6.701,5.334 c1.448,1.129,3.268,1.803,5.243,1.803C13.183,20.555,14.311,20.313,15.336,19.876z M5.654,17.724 c0.193-0.331,2.538-4.213,6.943-5.637c0.111-0.036,0.224-0.07,0.337-0.102c-0.214-0.485-0.448-0.971-0.692-1.45 c-4.266,1.277-8.405,1.223-8.778,1.216c-0.003,0.087-0.004,0.174-0.004,0.261C3.458,14.207,4.29,16.21,5.654,17.724z M3.639,10.264 c0.382,0.005,3.901,0.02,7.897-1.041c-1.415-2.516-2.942-4.631-3.167-4.94C5.979,5.41,4.193,7.613,3.639,10.264z M9.998,3.709 c0.236,0.316,1.787,2.429,3.187,5c3.037-1.138,4.323-2.867,4.477-3.085C16.154,4.286,14.17,3.471,12,3.471 C11.311,3.471,10.641,3.554,9.998,3.709z M18.612,6.612C18.432,6.855,17,8.69,13.842,9.979c0.199,0.407,0.389,0.821,0.567,1.237 c0.063,0.148,0.124,0.295,0.184,0.441c2.842-0.357,5.666,0.215,5.948,0.275C20.522,9.916,19.801,8.065,18.612,6.612z"/>
-</symbol>
-<symbol id="icon-dropbox" viewBox="0 0 24 24">
-<path d="M12,6.134L6.069,9.797L2,6.54l5.883-3.843L12,6.134z M2,13.054l5.883,3.843L12,13.459L6.069,9.797L2,13.054z M12,13.459 l4.116,3.439L22,13.054l-4.069-3.257L12,13.459z M22,6.54l-5.884-3.843L12,6.134l5.931,3.663L22,6.54z M12.011,14.2l-4.129,3.426 l-1.767-1.153v1.291l5.896,3.539l5.897-3.539v-1.291l-1.769,1.153L12.011,14.2z"/>
-</symbol>
-<symbol id="icon-etsy" viewBox="0 0 24 24">
-<path d="M9.16033,4.038c0-.27174.02717-.43478.48913-.43478h6.22283c1.087,0,1.68478.92391,2.11957,2.663l.35326,1.38587h1.05978C19.59511,3.712,19.75815,2,19.75815,2s-2.663.29891-4.23913.29891h-7.962L3.29076,2.163v1.1413L4.731,3.57609c1.00543.19022,1.25.40761,1.33152,1.33152,0,0,.08152,2.71739.08152,7.20109s-.08152,7.17391-.08152,7.17391c0,.81522-.32609,1.11413-1.33152,1.30435l-1.44022.27174V22l4.2663-.13587h7.11957c1.60326,0,5.32609.13587,5.32609.13587.08152-.97826.625-5.40761.70652-5.89674H19.7038L18.644,18.52174c-.84239,1.90217-2.06522,2.038-3.42391,2.038H11.1712c-1.3587,0-2.01087-.54348-2.01087-1.712V12.65217s3.0163,0,3.99457.08152c.76087.05435,1.22283.27174,1.46739,1.33152l.32609,1.413h1.16848l-.08152-3.55978.163-3.587H15.02989l-.38043,1.57609c-.24457,1.03261-.40761,1.22283-1.46739,1.33152-1.38587.13587-4.02174.1087-4.02174.1087Z"/>
-</symbol>
-<symbol id="icon-facebook" viewBox="0 0 24 24">
-<path d="M20.007,3H3.993C3.445,3,3,3.445,3,3.993v16.013C3,20.555,3.445,21,3.993,21h8.621v-6.971h-2.346v-2.717h2.346V9.31 c0-2.325,1.42-3.591,3.494-3.591c0.993,0,1.847,0.074,2.096,0.107v2.43l-1.438,0.001c-1.128,0-1.346,0.536-1.346,1.323v1.734h2.69 l-0.35,2.717h-2.34V21h4.587C20.555,21,21,20.555,21,20.007V3.993C21,3.445,20.555,3,20.007,3z"/>
-</symbol>
-<symbol id="icon-feed" viewBox="0 0 24 24">
-<path d="M2,8.667V12c5.515,0,10,4.485,10,10h3.333C15.333,14.637,9.363,8.667,2,8.667z M2,2v3.333 c9.19,0,16.667,7.477,16.667,16.667H22C22,10.955,13.045,2,2,2z M4.5,17C3.118,17,2,18.12,2,19.5S3.118,22,4.5,22S7,20.88,7,19.5 S5.882,17,4.5,17z"/>
-</symbol>
-<symbol id="icon-flickr" viewBox="0 0 24 24">
-<path d="M6.5,7c-2.75,0-5,2.25-5,5s2.25,5,5,5s5-2.25,5-5S9.25,7,6.5,7z M17.5,7c-2.75,0-5,2.25-5,5s2.25,5,5,5s5-2.25,5-5 S20.25,7,17.5,7z"/>
-</symbol>
-<symbol id="icon-foursquare" viewBox="0 0 24 24">
-<path d="M17.573,2c0,0-9.197,0-10.668,0S5,3.107,5,3.805s0,16.948,0,16.948c0,0.785,0.422,1.077,0.66,1.172 c0.238,0.097,0.892,0.177,1.285-0.275c0,0,5.035-5.843,5.122-5.93c0.132-0.132,0.132-0.132,0.262-0.132h3.26 c1.368,0,1.588-0.977,1.732-1.552c0.078-0.318,0.692-3.428,1.225-6.122l0.675-3.368C19.56,2.893,19.14,2,17.573,2z M16.495,7.22 c-0.053,0.252-0.372,0.518-0.665,0.518c-0.293,0-4.157,0-4.157,0c-0.467,0-0.802,0.318-0.802,0.787v0.508 c0,0.467,0.337,0.798,0.805,0.798c0,0,3.197,0,3.528,0s0.655,0.362,0.583,0.715c-0.072,0.353-0.407,2.102-0.448,2.295 c-0.04,0.193-0.262,0.523-0.655,0.523c-0.33,0-2.88,0-2.88,0c-0.523,0-0.683,0.068-1.033,0.503 c-0.35,0.437-3.505,4.223-3.505,4.223c-0.032,0.035-0.063,0.027-0.063-0.015V4.852c0-0.298,0.26-0.648,0.648-0.648 c0,0,8.228,0,8.562,0c0.315,0,0.61,0.297,0.528,0.683L16.495,7.22z"/>
-</symbol>
-<symbol id="icon-goodreads" viewBox="0 0 24 24">
-<path d="M17.3,17.5c-0.2,0.8-0.5,1.4-1,1.9c-0.4,0.5-1,0.9-1.7,1.2C13.9,20.9,13.1,21,12,21c-0.6,0-1.3-0.1-1.9-0.2 c-0.6-0.1-1.1-0.4-1.6-0.7c-0.5-0.3-0.9-0.7-1.2-1.2c-0.3-0.5-0.5-1.1-0.5-1.7h1.5c0.1,0.5,0.2,0.9,0.5,1.2 c0.2,0.3,0.5,0.6,0.9,0.8c0.3,0.2,0.7,0.3,1.1,0.4c0.4,0.1,0.8,0.1,1.2,0.1c1.4,0,2.5-0.4,3.1-1.2c0.6-0.8,1-2,1-3.5v-1.7h0 c-0.4,0.8-0.9,1.4-1.6,1.9c-0.7,0.5-1.5,0.7-2.4,0.7c-1,0-1.9-0.2-2.6-0.5C8.7,15,8.1,14.5,7.7,14c-0.5-0.6-0.8-1.3-1-2.1 c-0.2-0.8-0.3-1.6-0.3-2.5c0-0.9,0.1-1.7,0.4-2.5c0.3-0.8,0.6-1.5,1.1-2c0.5-0.6,1.1-1,1.8-1.4C10.3,3.2,11.1,3,12,3 c0.5,0,0.9,0.1,1.3,0.2c0.4,0.1,0.8,0.3,1.1,0.5c0.3,0.2,0.6,0.5,0.9,0.8c0.3,0.3,0.5,0.6,0.6,1h0V3.4h1.5V15 C17.6,15.9,17.5,16.7,17.3,17.5z M13.8,14.1c0.5-0.3,0.9-0.7,1.3-1.1c0.3-0.5,0.6-1,0.8-1.6c0.2-0.6,0.3-1.2,0.3-1.9 c0-0.6-0.1-1.2-0.2-1.9c-0.1-0.6-0.4-1.2-0.7-1.7c-0.3-0.5-0.7-0.9-1.3-1.2c-0.5-0.3-1.1-0.5-1.9-0.5s-1.4,0.2-1.9,0.5 c-0.5,0.3-1,0.7-1.3,1.2C8.5,6.4,8.3,7,8.1,7.6C8,8.2,7.9,8.9,7.9,9.5c0,0.6,0.1,1.3,0.2,1.9C8.3,12,8.6,12.5,8.9,13 c0.3,0.5,0.8,0.8,1.3,1.1c0.5,0.3,1.1,0.4,1.9,0.4C12.7,14.5,13.3,14.4,13.8,14.1z"/>
-</symbol>
-<symbol id="icon-google-plus" viewBox="0 0 24 24">
-<path d="M8,11h6.61c0.06,0.35,0.11,0.7,0.11,1.16c0,4-2.68,6.84-6.72,6.84c-3.87,0-7-3.13-7-7s3.13-7,7-7 c1.89,0,3.47,0.69,4.69,1.83l-1.9,1.83C10.27,8.16,9.36,7.58,8,7.58c-2.39,0-4.34,1.98-4.34,4.42S5.61,16.42,8,16.42 c2.77,0,3.81-1.99,3.97-3.02H8V11L8,11z M23,11h-2V9h-2v2h-2v2h2v2h2v-2h2"/>
-</symbol>
-<symbol id="icon-google" viewBox="0 0 24 24">
-<path d="M12.02,10.18v3.72v0.01h5.51c-0.26,1.57-1.67,4.22-5.5,4.22c-3.31,0-6.01-2.75-6.01-6.12s2.7-6.12,6.01-6.12 c1.87,0,3.13,0.8,3.85,1.48l2.84-2.76C16.99,2.99,14.73,2,12.03,2c-5.52,0-10,4.48-10,10s4.48,10,10,10c5.77,0,9.6-4.06,9.6-9.77 c0-0.83-0.11-1.42-0.25-2.05H12.02z"/>
-</symbol>
-<symbol id="icon-github" viewBox="0 0 24 24">
-<path d="M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833
-c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z"/>
-</symbol>
-<symbol id="icon-instagram" viewBox="0 0 24 24">
-<path d="M12,4.622c2.403,0,2.688,0.009,3.637,0.052c0.877,0.04,1.354,0.187,1.671,0.31c0.42,0.163,0.72,0.358,1.035,0.673 c0.315,0.315,0.51,0.615,0.673,1.035c0.123,0.317,0.27,0.794,0.31,1.671c0.043,0.949,0.052,1.234,0.052,3.637 s-0.009,2.688-0.052,3.637c-0.04,0.877-0.187,1.354-0.31,1.671c-0.163,0.42-0.358,0.72-0.673,1.035 c-0.315,0.315-0.615,0.51-1.035,0.673c-0.317,0.123-0.794,0.27-1.671,0.31c-0.949,0.043-1.233,0.052-3.637,0.052 s-2.688-0.009-3.637-0.052c-0.877-0.04-1.354-0.187-1.671-0.31c-0.42-0.163-0.72-0.358-1.035-0.673 c-0.315-0.315-0.51-0.615-0.673-1.035c-0.123-0.317-0.27-0.794-0.31-1.671C4.631,14.688,4.622,14.403,4.622,12 s0.009-2.688,0.052-3.637c0.04-0.877,0.187-1.354,0.31-1.671c0.163-0.42,0.358-0.72,0.673-1.035 c0.315-0.315,0.615-0.51,1.035-0.673c0.317-0.123,0.794-0.27,1.671-0.31C9.312,4.631,9.597,4.622,12,4.622 M12,3 C9.556,3,9.249,3.01,8.289,3.054C7.331,3.098,6.677,3.25,6.105,3.472C5.513,3.702,5.011,4.01,4.511,4.511 c-0.5,0.5-0.808,1.002-1.038,1.594C3.25,6.677,3.098,7.331,3.054,8.289C3.01,9.249,3,9.556,3,12c0,2.444,0.01,2.751,0.054,3.711 c0.044,0.958,0.196,1.612,0.418,2.185c0.23,0.592,0.538,1.094,1.038,1.594c0.5,0.5,1.002,0.808,1.594,1.038 c0.572,0.222,1.227,0.375,2.185,0.418C9.249,20.99,9.556,21,12,21s2.751-0.01,3.711-0.054c0.958-0.044,1.612-0.196,2.185-0.418 c0.592-0.23,1.094-0.538,1.594-1.038c0.5-0.5,0.808-1.002,1.038-1.594c0.222-0.572,0.375-1.227,0.418-2.185 C20.99,14.751,21,14.444,21,12s-0.01-2.751-0.054-3.711c-0.044-0.958-0.196-1.612-0.418-2.185c-0.23-0.592-0.538-1.094-1.038-1.594 c-0.5-0.5-1.002-0.808-1.594-1.038c-0.572-0.222-1.227-0.375-2.185-0.418C14.751,3.01,14.444,3,12,3L12,3z M12,7.378 c-2.552,0-4.622,2.069-4.622,4.622S9.448,16.622,12,16.622s4.622-2.069,4.622-4.622S14.552,7.378,12,7.378z M12,15 c-1.657,0-3-1.343-3-3s1.343-3,3-3s3,1.343,3,3S13.657,15,12,15z M16.804,6.116c-0.596,0-1.08,0.484-1.08,1.08 s0.484,1.08,1.08,1.08c0.596,0,1.08-0.484,1.08-1.08S17.401,6.116,16.804,6.116z"/>
-</symbol>
-<symbol id="icon-linkedin" viewBox="0 0 24 24">
-<path d="M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z"/>
-</symbol>
-<symbol id="icon-mail" viewBox="0 0 24 24">
-<path d="M20,4H4C2.895,4,2,4.895,2,6v12c0,1.105,0.895,2,2,2h16c1.105,0,2-0.895,2-2V6C22,4.895,21.105,4,20,4z M20,8.236l-8,4.882 L4,8.236V6h16V8.236z"/>
-</symbol>
-<symbol id="icon-meetup" viewBox="0 0 24 24">
-<path d="M19.24775,14.722a3.57032,3.57032,0,0,1-2.94457,3.52073,3.61886,3.61886,0,0,1-.64652.05634c-.07314-.0008-.10187.02846-.12507.09547A2.38881,2.38881,0,0,1,13.49453,20.094a2.33092,2.33092,0,0,1-1.827-.50716.13635.13635,0,0,0-.19878-.00408,3.191,3.191,0,0,1-2.104.60248,3.26309,3.26309,0,0,1-3.00324-2.71993,2.19076,2.19076,0,0,1-.03512-.30865c-.00156-.08579-.03413-.1189-.11608-.13493a2.86421,2.86421,0,0,1-1.23189-.56111,2.945,2.945,0,0,1-1.166-2.05749,2.97484,2.97484,0,0,1,.87524-2.50774.112.112,0,0,0,.02091-.16107,2.7213,2.7213,0,0,1-.36648-1.48A2.81256,2.81256,0,0,1,6.57673,7.58838a.35764.35764,0,0,0,.28869-.22819,4.2208,4.2208,0,0,1,6.02892-1.90111.25161.25161,0,0,0,.22023.0243,3.65608,3.65608,0,0,1,3.76031.90678A3.57244,3.57244,0,0,1,17.95918,8.626a2.97339,2.97339,0,0,1,.01829.57356.10637.10637,0,0,0,.0853.12792,1.97669,1.97669,0,0,1,1.27939,1.33733,2.00266,2.00266,0,0,1-.57112,2.12652c-.05284.05166-.04168.08328-.01173.13489A3.51189,3.51189,0,0,1,19.24775,14.722Zm-6.35959-.27836a1.6984,1.6984,0,0,0,1.14556,1.61113,3.82039,3.82039,0,0,0,1.036.17935,1.46888,1.46888,0,0,0,.73509-.12255.44082.44082,0,0,0,.26057-.44274.45312.45312,0,0,0-.29211-.43375.97191.97191,0,0,0-.20678-.063c-.21326-.03806-.42754-.0701-.63973-.11215a.54787.54787,0,0,1-.50172-.60926,2.75864,2.75864,0,0,1,.1773-.901c.1763-.535.414-1.045.64183-1.55913A12.686,12.686,0,0,0,15.85,10.47863a1.58461,1.58461,0,0,0,.04861-.87208,1.04531,1.04531,0,0,0-.85432-.83981,1.60658,1.60658,0,0,0-1.23654.16594.27593.27593,0,0,1-.36286-.03413c-.085-.0747-.16594-.15379-.24918-.23055a.98682.98682,0,0,0-1.33577-.04933,6.1468,6.1468,0,0,1-.4989.41615.47762.47762,0,0,1-.51535.03566c-.17448-.09307-.35512-.175-.53531-.25665a1.74949,1.74949,0,0,0-.56476-.2016,1.69943,1.69943,0,0,0-1.61654.91787,8.05815,8.05815,0,0,0-.32952.80126c-.45471,1.2557-.82507,2.53825-1.20838,3.81639a1.24151,1.24151,0,0,0,.51532,1.44389,1.42659,1.42659,0,0,0,1.22008.17166,1.09728,1.09728,0,0,0,.66994-.69764c.44145-1.04111.839-2.09989,1.25981-3.14926.11581-.28876.22792-.57874.35078-.86438a.44548.44548,0,0,1,.69189-.19539.50521.50521,0,0,1,.15044.43836,1.75625,1.75625,0,0,1-.14731.50453c-.27379.69219-.55265,1.38236-.82766,2.074a2.0836,2.0836,0,0,0-.14038.42876.50719.50719,0,0,0,.27082.57722.87236.87236,0,0,0,.66145.02739.99137.99137,0,0,0,.53406-.532q.61571-1.20914,1.228-2.42031.28423-.55863.57585-1.1133a.87189.87189,0,0,1,.29055-.35253.34987.34987,0,0,1,.37634-.01265.30291.30291,0,0,1,.12434.31459.56716.56716,0,0,1-.04655.1915c-.05318.12739-.10286.25669-.16183.38156-.34118.71775-.68754,1.43273-1.02568,2.152A2.00213,2.00213,0,0,0,12.88816,14.44366Zm4.78568,5.28972a.88573.88573,0,0,0-1.77139.00465.8857.8857,0,0,0,1.77139-.00465Zm-14.83838-7.296a.84329.84329,0,1,0,.00827-1.68655.8433.8433,0,0,0-.00827,1.68655Zm10.366-9.43673a.83506.83506,0,1,0-.0091,1.67.83505.83505,0,0,0,.0091-1.67Zm6.85014,5.22a.71651.71651,0,0,0-1.433.0093.71656.71656,0,0,0,1.433-.0093ZM5.37528,6.17908A.63823.63823,0,1,0,6.015,5.54483.62292.62292,0,0,0,5.37528,6.17908Zm6.68214,14.80843a.54949.54949,0,1,0-.55052.541A.54556.54556,0,0,0,12.05742,20.98752Zm8.53235-8.49689a.54777.54777,0,0,0-.54027.54023.53327.53327,0,0,0,.532.52293.51548.51548,0,0,0,.53272-.5237A.53187.53187,0,0,0,20.58977,12.49063ZM7.82846,2.4715a.44927.44927,0,1,0,.44484.44766A.43821.43821,0,0,0,7.82846,2.4715Zm13.775,7.60492a.41186.41186,0,0,0-.40065.39623.40178.40178,0,0,0,.40168.40168A.38994.38994,0,0,0,22,10.48172.39946.39946,0,0,0,21.60349,10.07642ZM5.79193,17.96207a.40469.40469,0,0,0-.397-.39646.399.399,0,0,0-.396.405.39234.39234,0,0,0,.39939.389A.39857.39857,0,0,0,5.79193,17.96207Z"/>
-</symbol>
-<symbol id="icon-medium" viewBox="0 0 24 24">
-<path d="M20.962,7.257l-5.457,8.867l-3.923-6.375l3.126-5.08c0.112-0.182,0.319-0.286,0.527-0.286c0.05,0,0.1,0.008,0.149,0.02 c0.039,0.01,0.078,0.023,0.114,0.041l5.43,2.715l0.006,0.003c0.004,0.002,0.007,0.006,0.011,0.008 C20.971,7.191,20.98,7.227,20.962,7.257z M9.86,8.592v5.783l5.14,2.57L9.86,8.592z M15.772,17.331l4.231,2.115 C20.554,19.721,21,19.529,21,19.016V8.835L15.772,17.331z M8.968,7.178L3.665,4.527C3.569,4.479,3.478,4.456,3.395,4.456 C3.163,4.456,3,4.636,3,4.938v11.45c0,0.306,0.224,0.669,0.498,0.806l4.671,2.335c0.12,0.06,0.234,0.088,0.337,0.088 c0.29,0,0.494-0.225,0.494-0.602V7.231C9,7.208,8.988,7.188,8.968,7.178z"/>
-</symbol>
-<symbol id="icon-pinterest" viewBox="0 0 24 24">
-<path d="M12.289,2C6.617,2,3.606,5.648,3.606,9.622c0,1.846,1.025,4.146,2.666,4.878c0.25,0.111,0.381,0.063,0.439-0.169 c0.044-0.175,0.267-1.029,0.365-1.428c0.032-0.128,0.017-0.237-0.091-0.362C6.445,11.911,6.01,10.75,6.01,9.668 c0-2.777,2.194-5.464,5.933-5.464c3.23,0,5.49,2.108,5.49,5.122c0,3.407-1.794,5.768-4.13,5.768c-1.291,0-2.257-1.021-1.948-2.277 c0.372-1.495,1.089-3.112,1.089-4.191c0-0.967-0.542-1.775-1.663-1.775c-1.319,0-2.379,1.309-2.379,3.059 c0,1.115,0.394,1.869,0.394,1.869s-1.302,5.279-1.54,6.261c-0.405,1.666,0.053,4.368,0.094,4.604 c0.021,0.126,0.167,0.169,0.25,0.063c0.129-0.165,1.699-2.419,2.142-4.051c0.158-0.59,0.817-2.995,0.817-2.995 c0.43,0.784,1.681,1.446,3.013,1.446c3.963,0,6.822-3.494,6.822-7.833C20.394,5.112,16.849,2,12.289,2"/>
-</symbol>
-<symbol id="icon-pocket" viewBox="0 0 24 24">
-<path d="M21.927,4.194C21.667,3.48,20.982,3,20.222,3h-0.01h-1.721H3.839C3.092,3,2.411,3.47,2.145,4.17 C2.066,4.378,2.026,4.594,2.026,4.814v6.035l0.069,1.2c0.29,2.73,1.707,5.115,3.899,6.778c0.039,0.03,0.079,0.059,0.119,0.089 l0.025,0.018c1.175,0.859,2.491,1.441,3.91,1.727c0.655,0.132,1.325,0.2,1.991,0.2c0.615,0,1.232-0.057,1.839-0.17 c0.073-0.014,0.145-0.028,0.219-0.044c0.02-0.004,0.042-0.012,0.064-0.023c1.359-0.297,2.621-0.864,3.753-1.691l0.025-0.018 c0.04-0.029,0.08-0.058,0.119-0.089c2.192-1.664,3.609-4.049,3.898-6.778l0.069-1.2V4.814C22.026,4.605,22,4.398,21.927,4.194z M17.692,10.481l-4.704,4.512c-0.266,0.254-0.608,0.382-0.949,0.382c-0.342,0-0.684-0.128-0.949-0.382l-4.705-4.512 C5.838,9.957,5.82,9.089,6.344,8.542c0.524-0.547,1.392-0.565,1.939-0.04l3.756,3.601l3.755-3.601 c0.547-0.524,1.415-0.506,1.939,0.04C18.256,9.089,18.238,9.956,17.692,10.481z"/>
-</symbol>
-<symbol id="icon-reddit" viewBox="0 0 24 24">
-<path d="M22,11.816c0-1.256-1.021-2.277-2.277-2.277c-0.593,0-1.122,0.24-1.526,0.614c-1.481-0.965-3.455-1.594-5.647-1.69 l1.171-3.702l3.18,0.748c0.008,1.028,0.846,1.862,1.876,1.862c1.035,0,1.877-0.842,1.877-1.878c0-1.035-0.842-1.877-1.877-1.877 c-0.769,0-1.431,0.466-1.72,1.13l-3.508-0.826c-0.203-0.047-0.399,0.067-0.46,0.261l-1.35,4.268 c-2.316,0.038-4.411,0.67-5.97,1.671C5.368,9.765,4.853,9.539,4.277,9.539C3.021,9.539,2,10.56,2,11.816 c0,0.814,0.433,1.523,1.078,1.925c-0.037,0.221-0.061,0.444-0.061,0.672c0,3.292,4.011,5.97,8.941,5.97s8.941-2.678,8.941-5.97 c0-0.214-0.02-0.424-0.053-0.632C21.533,13.39,22,12.661,22,11.816z M18.776,4.394c0.606,0,1.1,0.493,1.1,1.1s-0.493,1.1-1.1,1.1 s-1.1-0.494-1.1-1.1S18.169,4.394,18.776,4.394z M2.777,11.816c0-0.827,0.672-1.5,1.499-1.5c0.313,0,0.598,0.103,0.838,0.269 c-0.851,0.676-1.477,1.479-1.812,2.36C2.983,12.672,2.777,12.27,2.777,11.816z M11.959,19.606c-4.501,0-8.164-2.329-8.164-5.193 S7.457,9.22,11.959,9.22s8.164,2.329,8.164,5.193S16.46,19.606,11.959,19.606z M20.636,13.001c-0.326-0.89-0.948-1.701-1.797-2.384 c0.248-0.186,0.55-0.301,0.883-0.301c0.827,0,1.5,0.673,1.5,1.5C21.223,12.299,20.992,12.727,20.636,13.001z M8.996,14.704 c-0.76,0-1.397-0.616-1.397-1.376c0-0.76,0.637-1.397,1.397-1.397c0.76,0,1.376,0.637,1.376,1.397 C10.372,14.088,9.756,14.704,8.996,14.704z M16.401,13.328c0,0.76-0.616,1.376-1.376,1.376c-0.76,0-1.399-0.616-1.399-1.376 c0-0.76,0.639-1.397,1.399-1.397C15.785,11.931,16.401,12.568,16.401,13.328z M15.229,16.708c0.152,0.152,0.152,0.398,0,0.55 c-0.674,0.674-1.727,1.002-3.219,1.002c-0.004,0-0.007-0.002-0.011-0.002c-0.004,0-0.007,0.002-0.011,0.002 c-1.492,0-2.544-0.328-3.218-1.002c-0.152-0.152-0.152-0.398,0-0.55c0.152-0.152,0.399-0.151,0.55,0 c0.521,0.521,1.394,0.775,2.669,0.775c0.004,0,0.007,0.002,0.011,0.002c0.004,0,0.007-0.002,0.011-0.002 c1.275,0,2.148-0.253,2.669-0.775C14.831,16.556,15.078,16.556,15.229,16.708z"/>
-</symbol>
-<symbol id="icon-skype" viewBox="0 0 24 24">
-<path d="M10.113,2.699c0.033-0.006,0.067-0.013,0.1-0.02c0.033,0.017,0.066,0.033,0.098,0.051L10.113,2.699z M2.72,10.223 c-0.006,0.034-0.011,0.069-0.017,0.103c0.018,0.032,0.033,0.064,0.051,0.095L2.72,10.223z M21.275,13.771 c0.007-0.035,0.011-0.071,0.018-0.106c-0.018-0.031-0.033-0.064-0.052-0.095L21.275,13.771z M13.563,21.199 c0.032,0.019,0.065,0.035,0.096,0.053c0.036-0.006,0.071-0.011,0.105-0.017L13.563,21.199z M22,16.386 c0,1.494-0.581,2.898-1.637,3.953c-1.056,1.057-2.459,1.637-3.953,1.637c-0.967,0-1.914-0.251-2.75-0.725 c0.036-0.006,0.071-0.011,0.105-0.017l-0.202-0.035c0.032,0.019,0.065,0.035,0.096,0.053c-0.543,0.096-1.099,0.147-1.654,0.147 c-1.275,0-2.512-0.25-3.676-0.743c-1.125-0.474-2.135-1.156-3.002-2.023c-0.867-0.867-1.548-1.877-2.023-3.002 c-0.493-1.164-0.743-2.401-0.743-3.676c0-0.546,0.049-1.093,0.142-1.628c0.018,0.032,0.033,0.064,0.051,0.095L2.72,10.223 c-0.006,0.034-0.011,0.069-0.017,0.103C2.244,9.5,2,8.566,2,7.615c0-1.493,0.582-2.898,1.637-3.953 c1.056-1.056,2.46-1.638,3.953-1.638c0.915,0,1.818,0.228,2.622,0.655c-0.033,0.007-0.067,0.013-0.1,0.02l0.199,0.031 c-0.032-0.018-0.066-0.034-0.098-0.051c0.002,0,0.003-0.001,0.004-0.001c0.586-0.112,1.187-0.169,1.788-0.169 c1.275,0,2.512,0.249,3.676,0.742c1.124,0.476,2.135,1.156,3.002,2.024c0.868,0.867,1.548,1.877,2.024,3.002 c0.493,1.164,0.743,2.401,0.743,3.676c0,0.575-0.054,1.15-0.157,1.712c-0.018-0.031-0.033-0.064-0.052-0.095l0.034,0.201 c0.007-0.035,0.011-0.071,0.018-0.106C21.754,14.494,22,15.432,22,16.386z M16.817,14.138c0-1.331-0.613-2.743-3.033-3.282 l-2.209-0.49c-0.84-0.192-1.807-0.444-1.807-1.237c0-0.794,0.679-1.348,1.903-1.348c2.468,0,2.243,1.696,3.468,1.696 c0.645,0,1.209-0.379,1.209-1.031c0-1.521-2.435-2.663-4.5-2.663c-2.242,0-4.63,0.952-4.63,3.488c0,1.221,0.436,2.521,2.839,3.123 l2.984,0.745c0.903,0.223,1.129,0.731,1.129,1.189c0,0.762-0.758,1.507-2.129,1.507c-2.679,0-2.307-2.062-3.743-2.062 c-0.645,0-1.113,0.444-1.113,1.078c0,1.236,1.501,2.886,4.856,2.886C15.236,17.737,16.817,16.199,16.817,14.138z"/>
-</symbol>
-<symbol id="icon-slideshare" viewBox="0 0 24 24">
-<path d="M11.738,10.232a2.142,2.142,0,0,1-.721,1.619,2.556,2.556,0,0,1-3.464,0,2.183,2.183,0,0,1,0-3.243,2.572,2.572,0,0,1,3.464,0A2.136,2.136,0,0,1,11.738,10.232Zm5.7,0a2.15,2.15,0,0,1-.715,1.619,2.563,2.563,0,0,1-3.469,0,2.183,2.183,0,0,1,0-3.243,2.58,2.58,0,0,1,3.469,0A2.144,2.144,0,0,1,17.439,10.232Zm2.555,2.045V4.7a2.128,2.128,0,0,0-.363-1.4,1.614,1.614,0,0,0-1.261-.415H5.742a1.656,1.656,0,0,0-1.278.386A2.246,2.246,0,0,0,4.129,4.7v7.643a8.212,8.212,0,0,0,1,.454q.516.193.92.318a6.847,6.847,0,0,0,.92.21q.516.085.806.125a6.615,6.615,0,0,0,.795.045l.665.006q.16,0,.642-.023t.506-.023a1.438,1.438,0,0,1,1.079.307,1.134,1.134,0,0,0,.114.1,7.215,7.215,0,0,0,.693.579q.079-1.033,1.34-.988.057,0,.415.017l.488.023q.13.006.517.011t.6-.011l.619-.051a5.419,5.419,0,0,0,.693-.1l.7-.153a5.353,5.353,0,0,0,.761-.221q.345-.131.766-.307a8.727,8.727,0,0,0,.818-.392Zm1.851-.057a10.4,10.4,0,0,1-4.225,2.862,6.5,6.5,0,0,1-.261,5.281,3.524,3.524,0,0,1-2.078,1.681,2.452,2.452,0,0,1-2.067-.17,1.915,1.915,0,0,1-.931-1.863l-.011-3.7V16.3l-.279-.068q-.188-.045-.267-.057l-.011,3.839a1.9,1.9,0,0,1-.943,1.863,2.481,2.481,0,0,1-2.078.17,3.519,3.519,0,0,1-2.067-1.7,6.546,6.546,0,0,1-.25-5.258A10.4,10.4,0,0,1,2.152,12.22a.56.56,0,0,1-.045-.715q.238-.3.681.011l.125.079a.767.767,0,0,1,.125.091V3.8a1.987,1.987,0,0,1,.534-1.4,1.7,1.7,0,0,1,1.295-.579H19.141a1.7,1.7,0,0,1,1.295.579,1.985,1.985,0,0,1,.534,1.4v7.882l.238-.17q.443-.307.681-.011a.56.56,0,0,1-.045.715Z"/>
-</symbol>
-<symbol id="icon-snapchat" viewBox="0 0 24 24">
-<path d="M12.065,2a5.526,5.526,0,0,1,3.132.892A5.854,5.854,0,0,1,17.326,5.4a5.821,5.821,0,0,1,.351,2.33q0,.612-.117,2.487a.809.809,0,0,0,.365.091,1.93,1.93,0,0,0,.664-.176,1.93,1.93,0,0,1,.664-.176,1.3,1.3,0,0,1,.729.234.7.7,0,0,1,.351.6.839.839,0,0,1-.41.7,2.732,2.732,0,0,1-.9.41,3.192,3.192,0,0,0-.9.378.728.728,0,0,0-.41.618,1.575,1.575,0,0,0,.156.56,6.9,6.9,0,0,0,1.334,1.953,5.6,5.6,0,0,0,1.881,1.315,5.875,5.875,0,0,0,1.042.3.42.42,0,0,1,.365.456q0,.911-2.852,1.341a1.379,1.379,0,0,0-.143.507,1.8,1.8,0,0,1-.182.605.451.451,0,0,1-.429.241,5.878,5.878,0,0,1-.807-.085,5.917,5.917,0,0,0-.833-.085,4.217,4.217,0,0,0-.807.065,2.42,2.42,0,0,0-.82.293,6.682,6.682,0,0,0-.755.5q-.351.267-.755.527a3.886,3.886,0,0,1-.989.436A4.471,4.471,0,0,1,11.831,22a4.307,4.307,0,0,1-1.256-.176,3.784,3.784,0,0,1-.976-.436q-.4-.26-.749-.527a6.682,6.682,0,0,0-.755-.5,2.422,2.422,0,0,0-.807-.293,4.432,4.432,0,0,0-.82-.065,5.089,5.089,0,0,0-.853.1,5,5,0,0,1-.762.1.474.474,0,0,1-.456-.241,1.819,1.819,0,0,1-.182-.618,1.411,1.411,0,0,0-.143-.521q-2.852-.429-2.852-1.341a.42.42,0,0,1,.365-.456,5.793,5.793,0,0,0,1.042-.3,5.524,5.524,0,0,0,1.881-1.315,6.789,6.789,0,0,0,1.334-1.953A1.575,1.575,0,0,0,6,12.9a.728.728,0,0,0-.41-.618,3.323,3.323,0,0,0-.9-.384,2.912,2.912,0,0,1-.9-.41.814.814,0,0,1-.41-.684.71.71,0,0,1,.338-.593,1.208,1.208,0,0,1,.716-.241,1.976,1.976,0,0,1,.625.169,2.008,2.008,0,0,0,.69.169.919.919,0,0,0,.416-.091q-.117-1.849-.117-2.474A5.861,5.861,0,0,1,6.385,5.4,5.516,5.516,0,0,1,8.625,2.819,7.075,7.075,0,0,1,12.062,2Z"/>
-</symbol>
-<symbol id="icon-soundcloud" viewBox="0 0 24 24">
-<path d="M8.9,16.1L9,14L8.9,9.5c0-0.1,0-0.1-0.1-0.1c0,0-0.1-0.1-0.1-0.1c-0.1,0-0.1,0-0.1,0.1c0,0-0.1,0.1-0.1,0.1L8.3,14l0.1,2.1 c0,0.1,0,0.1,0.1,0.1c0,0,0.1,0.1,0.1,0.1C8.8,16.3,8.9,16.3,8.9,16.1z M11.4,15.9l0.1-1.8L11.4,9c0-0.1,0-0.2-0.1-0.2 c0,0-0.1,0-0.1,0s-0.1,0-0.1,0c-0.1,0-0.1,0.1-0.1,0.2l0,0.1l-0.1,5c0,0,0,0.7,0.1,2v0c0,0.1,0,0.1,0.1,0.1c0.1,0.1,0.1,0.1,0.2,0.1 c0.1,0,0.1,0,0.2-0.1c0.1,0,0.1-0.1,0.1-0.2L11.4,15.9z M2.4,12.9L2.5,14l-0.2,1.1c0,0.1,0,0.1-0.1,0.1c0,0-0.1,0-0.1-0.1L2.1,14 l0.1-1.1C2.2,12.9,2.3,12.9,2.4,12.9C2.3,12.9,2.4,12.9,2.4,12.9z M3.1,12.2L3.3,14l-0.2,1.8c0,0.1,0,0.1-0.1,0.1 c-0.1,0-0.1,0-0.1-0.1L2.8,14L3,12.2C3,12.2,3,12.2,3.1,12.2C3.1,12.2,3.1,12.2,3.1,12.2z M3.9,11.9L4.1,14l-0.2,2.1 c0,0.1,0,0.1-0.1,0.1c-0.1,0-0.1,0-0.1-0.1L3.5,14l0.2-2.1c0-0.1,0-0.1,0.1-0.1C3.9,11.8,3.9,11.8,3.9,11.9z M4.7,11.9L4.9,14 l-0.2,2.1c0,0.1-0.1,0.1-0.1,0.1c-0.1,0-0.1,0-0.1-0.1L4.3,14l0.2-2.2c0-0.1,0-0.1,0.1-0.1C4.7,11.7,4.7,11.8,4.7,11.9z M5.6,12 l0.2,2l-0.2,2.1c0,0.1-0.1,0.1-0.1,0.1c0,0-0.1,0-0.1,0c0,0,0-0.1,0-0.1L5.1,14l0.2-2c0,0,0-0.1,0-0.1s0.1,0,0.1,0 C5.5,11.9,5.5,11.9,5.6,12L5.6,12z M6.4,10.7L6.6,14l-0.2,2.1c0,0,0,0.1,0,0.1c0,0-0.1,0-0.1,0c-0.1,0-0.1-0.1-0.2-0.2L5.9,14 l0.2-3.3c0-0.1,0.1-0.2,0.2-0.2c0,0,0.1,0,0.1,0C6.4,10.7,6.4,10.7,6.4,10.7z M7.2,10l0.2,4.1l-0.2,2.1c0,0,0,0.1,0,0.1 c0,0-0.1,0-0.1,0c-0.1,0-0.2-0.1-0.2-0.2l-0.1-2.1L6.8,10c0-0.1,0.1-0.2,0.2-0.2c0,0,0.1,0,0.1,0S7.2,9.9,7.2,10z M8,9.6L8.2,14 L8,16.1c0,0.1-0.1,0.2-0.2,0.2c-0.1,0-0.2-0.1-0.2-0.2L7.5,14l0.1-4.4c0-0.1,0-0.1,0.1-0.1c0,0,0.1-0.1,0.1-0.1c0.1,0,0.1,0,0.1,0.1 C8,9.6,8,9.6,8,9.6z M11.4,16.1L11.4,16.1L11.4,16.1z M9.7,9.6L9.8,14l-0.1,2.1c0,0.1,0,0.1-0.1,0.2s-0.1,0.1-0.2,0.1 c-0.1,0-0.1,0-0.1-0.1s-0.1-0.1-0.1-0.2L9.2,14l0.1-4.4c0-0.1,0-0.1,0.1-0.2s0.1-0.1,0.2-0.1c0.1,0,0.1,0,0.2,0.1S9.7,9.5,9.7,9.6 L9.7,9.6z M10.6,9.8l0.1,4.3l-0.1,2c0,0.1,0,0.1-0.1,0.2c0,0-0.1,0.1-0.2,0.1c-0.1,0-0.1,0-0.2-0.1c0,0-0.1-0.1-0.1-0.2L10,14 l0.1-4.3c0-0.1,0-0.1,0.1-0.2c0,0,0.1-0.1,0.2-0.1c0.1,0,0.1,0,0.2,0.1S10.6,9.7,10.6,9.8z M12.4,14l-0.1,2c0,0.1,0,0.1-0.1,0.2 c-0.1,0.1-0.1,0.1-0.2,0.1c-0.1,0-0.1,0-0.2-0.1c-0.1-0.1-0.1-0.1-0.1-0.2l-0.1-1l-0.1-1l0.1-5.5v0c0-0.1,0-0.2,0.1-0.2 c0.1,0,0.1-0.1,0.2-0.1c0,0,0.1,0,0.1,0c0.1,0,0.1,0.1,0.1,0.2L12.4,14z M22.1,13.9c0,0.7-0.2,1.3-0.7,1.7c-0.5,0.5-1.1,0.7-1.7,0.7 h-6.8c-0.1,0-0.1,0-0.2-0.1c-0.1-0.1-0.1-0.1-0.1-0.2V8.2c0-0.1,0.1-0.2,0.2-0.3c0.5-0.2,1-0.3,1.6-0.3c1.1,0,2.1,0.4,2.9,1.1 c0.8,0.8,1.3,1.7,1.4,2.8c0.3-0.1,0.6-0.2,1-0.2c0.7,0,1.3,0.2,1.7,0.7C21.8,12.6,22.1,13.2,22.1,13.9L22.1,13.9z"/>
-</symbol>
-<symbol id="icon-spotify" viewBox="0 0 24 24">
-<path d="M12,2C6.477,2,2,6.477,2,12c0,5.523,4.477,10,10,10c5.523,0,10-4.477,10-10C22,6.477,17.523,2,12,2 M16.586,16.424 c-0.18,0.295-0.563,0.387-0.857,0.207c-2.348-1.435-5.304-1.76-8.785-0.964c-0.335,0.077-0.67-0.133-0.746-0.469 c-0.077-0.335,0.132-0.67,0.469-0.746c3.809-0.871,7.077-0.496,9.713,1.115C16.673,15.746,16.766,16.13,16.586,16.424 M17.81,13.7 c-0.226,0.367-0.706,0.482-1.072,0.257c-2.687-1.652-6.785-2.131-9.965-1.166C6.36,12.917,5.925,12.684,5.8,12.273 C5.675,11.86,5.908,11.425,6.32,11.3c3.632-1.102,8.147-0.568,11.234,1.328C17.92,12.854,18.035,13.335,17.81,13.7 M17.915,10.865 c-3.223-1.914-8.54-2.09-11.618-1.156C5.804,9.859,5.281,9.58,5.131,9.086C4.982,8.591,5.26,8.069,5.755,7.919 c3.532-1.072,9.404-0.865,13.115,1.338c0.445,0.264,0.59,0.838,0.327,1.282C18.933,10.983,18.359,11.129,17.915,10.865"/>
-</symbol>
-<symbol id="icon-stumbleupon" viewBox="0 0 24 24">
-<path d="M12,4.294c-2.469,0-4.471,2.002-4.471,4.471v6.353c0,0.585-0.474,1.059-1.059,1.059c-0.585,0-1.059-0.474-1.059-1.059 v-2.824H2v2.941c0,2.469,2.002,4.471,4.471,4.471c2.469,0,4.471-2.002,4.471-4.471V8.765c0-0.585,0.474-1.059,1.059-1.059 s1.059,0.474,1.059,1.059v1.294l1.412,0.647l2-0.647V8.765C16.471,6.296,14.469,4.294,12,4.294z M13.059,12.353v2.882 c0,2.469,2.002,4.471,4.471,4.471S22,17.704,22,15.235v-2.824h-3.412v2.824c0,0.585-0.474,1.059-1.059,1.059 c-0.585,0-1.059-0.474-1.059-1.059v-2.882l-2,0.647L13.059,12.353z"/>
-</symbol>
-<symbol id="icon-tumblr" viewBox="0 0 24 24">
-<path d="M16.749,17.396c-0.357,0.17-1.041,0.319-1.551,0.332c-1.539,0.041-1.837-1.081-1.85-1.896V9.847h3.861V6.937h-3.847V2.039 c0,0-2.77,0-2.817,0c-0.046,0-0.127,0.041-0.138,0.144c-0.165,1.499-0.867,4.13-3.783,5.181v2.484h1.945v6.282 c0,2.151,1.587,5.206,5.775,5.135c1.413-0.024,2.982-0.616,3.329-1.126L16.749,17.396z"/>
-</symbol>
-<symbol id="icon-twitch" viewBox="0 0 24 24">
-<path d="M16.499,8.089h-1.636v4.91h1.636V8.089z M12,8.089h-1.637v4.91H12V8.089z M4.228,3.178L3,6.451v13.092h4.499V22h2.456 l2.454-2.456h3.681L21,14.636V3.178H4.228z M19.364,13.816l-2.864,2.865H12l-2.453,2.453V16.68H5.863V4.814h13.501V13.816z"/>
-</symbol>
-<symbol id="icon-twitter" viewBox="0 0 24 24">
-<path d="M22.23,5.924c-0.736,0.326-1.527,0.547-2.357,0.646c0.847-0.508,1.498-1.312,1.804-2.27 c-0.793,0.47-1.671,0.812-2.606,0.996C18.324,4.498,17.257,4,16.077,4c-2.266,0-4.103,1.837-4.103,4.103 c0,0.322,0.036,0.635,0.106,0.935C8.67,8.867,5.647,7.234,3.623,4.751C3.27,5.357,3.067,6.062,3.067,6.814 c0,1.424,0.724,2.679,1.825,3.415c-0.673-0.021-1.305-0.206-1.859-0.513c0,0.017,0,0.034,0,0.052c0,1.988,1.414,3.647,3.292,4.023 c-0.344,0.094-0.707,0.144-1.081,0.144c-0.264,0-0.521-0.026-0.772-0.074c0.522,1.63,2.038,2.816,3.833,2.85 c-1.404,1.1-3.174,1.756-5.096,1.756c-0.331,0-0.658-0.019-0.979-0.057c1.816,1.164,3.973,1.843,6.29,1.843 c7.547,0,11.675-6.252,11.675-11.675c0-0.178-0.004-0.355-0.012-0.531C20.985,7.47,21.68,6.747,22.23,5.924z"/>
-</symbol>
-<symbol id="icon-vimeo" viewBox="0 0 24 24">
-<path d="M22.396,7.164c-0.093,2.026-1.507,4.799-4.245,8.32C15.322,19.161,12.928,21,10.97,21c-1.214,0-2.24-1.119-3.079-3.359 c-0.56-2.053-1.119-4.106-1.68-6.159C5.588,9.243,4.921,8.122,4.206,8.122c-0.156,0-0.701,0.328-1.634,0.98L1.594,7.841 c1.027-0.902,2.04-1.805,3.037-2.708C6.001,3.95,7.03,3.327,7.715,3.264c1.619-0.156,2.616,0.951,2.99,3.321 c0.404,2.557,0.685,4.147,0.841,4.769c0.467,2.121,0.981,3.181,1.542,3.181c0.435,0,1.09-0.688,1.963-2.065 c0.871-1.376,1.338-2.422,1.401-3.142c0.125-1.187-0.343-1.782-1.401-1.782c-0.498,0-1.012,0.115-1.541,0.341 c1.023-3.35,2.977-4.977,5.862-4.884C21.511,3.066,22.52,4.453,22.396,7.164z"/>
-</symbol>
-<symbol id="icon-vk" viewBox="0 0 24 24">
-<path d="M22,7.1c0.2,0.4-0.4,1.5-1.6,3.1c-0.2,0.2-0.4,0.5-0.7,0.9c-0.5,0.7-0.9,1.1-0.9,1.4c-0.1,0.3-0.1,0.6,0.1,0.8 c0.1,0.1,0.4,0.4,0.8,0.9h0l0,0c1,0.9,1.6,1.7,2,2.3c0,0,0,0.1,0.1,0.1c0,0.1,0,0.1,0.1,0.3c0,0.1,0,0.2,0,0.4 c0,0.1-0.1,0.2-0.3,0.3c-0.1,0.1-0.4,0.1-0.6,0.1l-2.7,0c-0.2,0-0.4,0-0.6-0.1c-0.2-0.1-0.4-0.1-0.5-0.2l-0.2-0.1 c-0.2-0.1-0.5-0.4-0.7-0.7s-0.5-0.6-0.7-0.8c-0.2-0.2-0.4-0.4-0.6-0.6C14.8,15,14.6,15,14.4,15c0,0,0,0-0.1,0c0,0-0.1,0.1-0.2,0.2 c-0.1,0.1-0.2,0.2-0.2,0.3c-0.1,0.1-0.1,0.3-0.2,0.5c-0.1,0.2-0.1,0.5-0.1,0.8c0,0.1,0,0.2,0,0.3c0,0.1-0.1,0.2-0.1,0.2l0,0.1 c-0.1,0.1-0.3,0.2-0.6,0.2h-1.2c-0.5,0-1,0-1.5-0.2c-0.5-0.1-1-0.3-1.4-0.6s-0.7-0.5-1.1-0.7s-0.6-0.4-0.7-0.6l-0.3-0.3 c-0.1-0.1-0.2-0.2-0.3-0.3s-0.4-0.5-0.7-0.9s-0.7-1-1.1-1.6c-0.4-0.6-0.8-1.3-1.3-2.2C2.9,9.4,2.5,8.5,2.1,7.5C2,7.4,2,7.3,2,7.2 c0-0.1,0-0.1,0-0.2l0-0.1c0.1-0.1,0.3-0.2,0.6-0.2l2.9,0c0.1,0,0.2,0,0.2,0.1S5.9,6.9,5.9,7L6,7c0.1,0.1,0.2,0.2,0.3,0.3 C6.4,7.7,6.5,8,6.7,8.4C6.9,8.8,7,9,7.1,9.2l0.2,0.3c0.2,0.4,0.4,0.8,0.6,1.1c0.2,0.3,0.4,0.5,0.5,0.7s0.3,0.3,0.4,0.4 c0.1,0.1,0.3,0.1,0.4,0.1c0.1,0,0.2,0,0.3-0.1c0,0,0,0,0.1-0.1c0,0,0.1-0.1,0.1-0.2c0.1-0.1,0.1-0.3,0.1-0.5c0-0.2,0.1-0.5,0.1-0.8 c0-0.4,0-0.8,0-1.3c0-0.3,0-0.5-0.1-0.8c0-0.2-0.1-0.4-0.1-0.5L9.6,7.6C9.4,7.3,9.1,7.2,8.7,7.1C8.6,7.1,8.6,7,8.7,6.9 C8.9,6.7,9,6.6,9.1,6.5c0.4-0.2,1.2-0.3,2.5-0.3c0.6,0,1,0.1,1.4,0.1c0.1,0,0.3,0.1,0.3,0.1c0.1,0.1,0.2,0.1,0.2,0.3 c0,0.1,0.1,0.2,0.1,0.3s0,0.3,0,0.5c0,0.2,0,0.4,0,0.6c0,0.2,0,0.4,0,0.7c0,0.3,0,0.6,0,0.9c0,0.1,0,0.2,0,0.4c0,0.2,0,0.4,0,0.5 c0,0.1,0,0.3,0,0.4s0.1,0.3,0.1,0.4c0.1,0.1,0.1,0.2,0.2,0.3c0.1,0,0.1,0,0.2,0c0.1,0,0.2,0,0.3-0.1c0.1-0.1,0.2-0.2,0.4-0.4 s0.3-0.4,0.5-0.7c0.2-0.3,0.5-0.7,0.7-1.1c0.4-0.7,0.8-1.5,1.1-2.3c0-0.1,0.1-0.1,0.1-0.2c0-0.1,0.1-0.1,0.1-0.1l0,0l0.1,0 c0,0,0,0,0.1,0s0.2,0,0.2,0l3,0c0.3,0,0.5,0,0.7,0S21.9,7,21.9,7L22,7.1z"/>
-</symbol>
-<symbol id="icon-wordpress" viewBox="0 0 24 24">
-<path d="M12.158,12.786L9.46,20.625c0.806,0.237,1.657,0.366,2.54,0.366c1.047,0,2.051-0.181,2.986-0.51 c-0.024-0.038-0.046-0.079-0.065-0.124L12.158,12.786z M3.009,12c0,3.559,2.068,6.634,5.067,8.092L3.788,8.341 C3.289,9.459,3.009,10.696,3.009,12z M18.069,11.546c0-1.112-0.399-1.881-0.741-2.48c-0.456-0.741-0.883-1.368-0.883-2.109 c0-0.826,0.627-1.596,1.51-1.596c0.04,0,0.078,0.005,0.116,0.007C16.472,3.904,14.34,3.009,12,3.009 c-3.141,0-5.904,1.612-7.512,4.052c0.211,0.007,0.41,0.011,0.579,0.011c0.94,0,2.396-0.114,2.396-0.114 C7.947,6.93,8.004,7.642,7.52,7.699c0,0-0.487,0.057-1.029,0.085l3.274,9.739l1.968-5.901l-1.401-3.838 C9.848,7.756,9.389,7.699,9.389,7.699C8.904,7.67,8.961,6.93,9.446,6.958c0,0,1.484,0.114,2.368,0.114 c0.94,0,2.397-0.114,2.397-0.114c0.485-0.028,0.542,0.684,0.057,0.741c0,0-0.488,0.057-1.029,0.085l3.249,9.665l0.897-2.996 C17.841,13.284,18.069,12.316,18.069,11.546z M19.889,7.686c0.039,0.286,0.06,0.593,0.06,0.924c0,0.912-0.171,1.938-0.684,3.22 l-2.746,7.94c2.673-1.558,4.47-4.454,4.47-7.771C20.991,10.436,20.591,8.967,19.889,7.686z M12,22C6.486,22,2,17.514,2,12 C2,6.486,6.486,2,12,2c5.514,0,10,4.486,10,10C22,17.514,17.514,22,12,22z"/>
-</symbol>
-<symbol id="icon-yelp" viewBox="0 0 24 24">
-<path d="M12.271,16.718v1.417q-.011,3.257-.067,3.4a.707.707,0,0,1-.569.446,4.637,4.637,0,0,1-2.024-.424A4.609,4.609,0,0,1,7.8,20.565a.844.844,0,0,1-.19-.4.692.692,0,0,1,.044-.29,3.181,3.181,0,0,1,.379-.524q.335-.412,2.019-2.409.011,0,.669-.781a.757.757,0,0,1,.44-.274.965.965,0,0,1,.552.039.945.945,0,0,1,.418.324.732.732,0,0,1,.139.468Zm-1.662-2.8a.783.783,0,0,1-.58.781l-1.339.435q-3.067.981-3.257.981a.711.711,0,0,1-.6-.4,2.636,2.636,0,0,1-.19-.836,9.134,9.134,0,0,1,.011-1.857,3.559,3.559,0,0,1,.335-1.389.659.659,0,0,1,.625-.357,22.629,22.629,0,0,1,2.253.859q.781.324,1.283.524l.937.379a.771.771,0,0,1,.4.34A.982.982,0,0,1,10.609,13.917Zm9.213,3.313a4.467,4.467,0,0,1-1.021,1.8,4.559,4.559,0,0,1-1.512,1.417.671.671,0,0,1-.7-.078q-.156-.112-2.052-3.2l-.524-.859a.761.761,0,0,1-.128-.513.957.957,0,0,1,.217-.513.774.774,0,0,1,.926-.29q.011.011,1.327.446,2.264.736,2.7.887a2.082,2.082,0,0,1,.524.229.673.673,0,0,1,.245.68Zm-7.5-7.049q.056,1.137-.6,1.361-.647.19-1.272-.792L6.237,4.08a.7.7,0,0,1,.212-.691,5.788,5.788,0,0,1,2.314-1,5.928,5.928,0,0,1,2.5-.352.681.681,0,0,1,.547.5q.034.2.245,3.407T12.327,10.181Zm7.384,1.2a.679.679,0,0,1-.29.658q-.167.112-3.67.959-.747.167-1.015.257l.011-.022a.769.769,0,0,1-.513-.044.914.914,0,0,1-.413-.357.786.786,0,0,1,0-.971q.011-.011.836-1.137,1.394-1.908,1.673-2.275a2.423,2.423,0,0,1,.379-.435A.7.7,0,0,1,17.435,8a4.482,4.482,0,0,1,1.372,1.489,4.81,4.81,0,0,1,.9,1.868v.034Z"/>
-</symbol>
-<symbol id="icon-youtube" viewBox="0 0 24 24">
-<path d="M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z"/>
-</symbol>
-</defs>
-</svg>
diff --git a/plugins/jetpack/modules/tiled-gallery.php b/plugins/jetpack/modules/tiled-gallery.php
deleted file mode 100644
index 19b87c52..00000000
--- a/plugins/jetpack/modules/tiled-gallery.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/**
- * Module Name: Tiled Galleries
- * Module Description: Display image galleries in a variety of elegant arrangements.
- * First Introduced: 2.1
- * Requires Connection: No
- * Auto Activate: No
- * Module Tags: Photos and Videos
- * Feature: Appearance
- * Sort Order: 24
- * Additional Search Queries: gallery, tiles, tiled, grid, mosaic, images
- */
-
-function jetpack_load_tiled_gallery() {
- include dirname( __FILE__ ) . "/tiled-gallery/tiled-gallery.php";
-}
-
-add_action( 'jetpack_modules_loaded', 'jetpack_tiled_gallery_loaded' );
-
-function jetpack_tiled_gallery_loaded() {
- Jetpack::enable_module_configurable( __FILE__ );
- Jetpack::module_configuration_load( __FILE__, 'jetpack_tiled_gallery_configuration_load' );
- add_filter( 'jetpack_module_configuration_url_tiled-gallery', 'jetpack_tiled_gallery_configuration_url' );
-}
-
-function jetpack_tiled_gallery_configuration_load() {
- wp_safe_redirect( admin_url( 'options-media.php' ) );
- exit;
-}
-
-/**
- * Overrides default configuration url
- *
- * @uses admin_url
- * @return string module settings URL
- */
-function jetpack_tiled_gallery_configuration_url() {
- return admin_url( 'options-media.php' );
-}
-
-jetpack_load_tiled_gallery();
diff --git a/plugins/jetpack/modules/tiled-gallery/math/class-constrained-array-rounding.php b/plugins/jetpack/modules/tiled-gallery/math/class-constrained-array-rounding.php
deleted file mode 100644
index d01a114a..00000000
--- a/plugins/jetpack/modules/tiled-gallery/math/class-constrained-array-rounding.php
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-
-/**
- * Lets you round the numeric elements of an array to integers while preserving their sum.
- *
- * Usage:
- *
- * Jetpack_Constrained_Array_Rounding::get_rounded_constrained_array( $bound_array )
- * if a specific sum doesn't need to be specified for the bound array
- *
- * Jetpack_Constrained_Array_Rounding::get_rounded_constrained_array( $bound_array, $sum )
- * If the sum of $bound_array must equal $sum after rounding.
- *
- * If $sum is less than the sum of the floor of the elements of the array, the class defaults to using the sum of the array elements.
- */
-class Jetpack_Constrained_Array_Rounding {
- public static function get_rounded_constrained_array( $bound_array, $sum = false ) {
- // Convert associative arrays before working with them and convert them back before returning the values
- $keys = array_keys( $bound_array );
- $bound_array = array_values( $bound_array );
-
- $bound_array_int = self::get_int_floor_array( $bound_array );
-
- $lower_sum = array_sum( wp_list_pluck( $bound_array_int, 'floor' ) );
- if ( ! $sum || ( $sum < $lower_sum ) ) {
- // If value of sum is not supplied or is invalid, calculate the sum that the returned array is constrained to match
- $sum = array_sum( $bound_array );
- }
- $diff_sum = $sum - $lower_sum;
-
- self::adjust_constrained_array( $bound_array_int, $diff_sum );
-
- $bound_array_fin = wp_list_pluck( $bound_array_int, 'floor' );
- return array_combine( $keys, $bound_array_fin );
- }
-
- private static function get_int_floor_array( $bound_array ) {
- $bound_array_int_floor = array();
- foreach ( $bound_array as $i => $value ) {
- $bound_array_int_floor[ $i ] = array(
- 'floor' => (int) floor( $value ),
- 'fraction' => $value - floor( $value ),
- 'index' => $i,
- );
- }
-
- return $bound_array_int_floor;
- }
-
- private static function adjust_constrained_array( &$bound_array_int, $adjustment ) {
- usort( $bound_array_int, array( 'self', 'cmp_desc_fraction' ) );
-
- $start = 0;
- $end = $adjustment - 1;
- $length = count( $bound_array_int );
-
- for ( $i = $start; $i <= $end; $i++ ) {
- $bound_array_int[ $i % $length ]['floor']++;
- }
-
- usort( $bound_array_int, array( 'self', 'cmp_asc_index' ) );
- }
-
- private static function cmp_desc_fraction( $a, $b ) {
- if ( $a['fraction'] == $b['fraction'] ) {
- return 0;
- }
- return $a['fraction'] > $b['fraction'] ? -1 : 1;
- }
-
- private static function cmp_asc_index( $a, $b ) {
- if ( $a['index'] == $b['index'] ) {
- return 0;
- }
- return $a['index'] < $b['index'] ? -1 : 1;
- }
-}
diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery.php b/plugins/jetpack/modules/tiled-gallery/tiled-gallery.php
deleted file mode 100644
index 479eadc2..00000000
--- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery.php
+++ /dev/null
@@ -1,295 +0,0 @@
-<?php
-
-// Include the class file containing methods for rounding constrained array elements.
-// Here the constrained array element is the dimension of a row, group or an image in the tiled gallery.
-require_once dirname( __FILE__ ) . '/math/class-constrained-array-rounding.php';
-
-// Layouts
-require_once dirname( __FILE__ ) . '/tiled-gallery/tiled-gallery-rectangular.php';
-require_once dirname( __FILE__ ) . '/tiled-gallery/tiled-gallery-square.php';
-require_once dirname( __FILE__ ) . '/tiled-gallery/tiled-gallery-circle.php';
-
-class Jetpack_Tiled_Gallery {
- private static $talaveras = array( 'rectangular', 'square', 'circle', 'rectangle', 'columns' );
-
- public function __construct() {
- add_action( 'admin_init', array( $this, 'settings_api_init' ) );
- add_filter( 'jetpack_gallery_types', array( $this, 'jetpack_gallery_types' ), 9 );
- add_filter( 'jetpack_default_gallery_type', array( $this, 'jetpack_default_gallery_type' ) );
- }
-
- public function tiles_enabled() {
- // Check the setting status
- return '' != Jetpack_Options::get_option_and_ensure_autoload( 'tiled_galleries', '' );
- }
-
- public function set_atts( $atts ) {
- global $post;
-
- $this->atts = shortcode_atts(
- array(
- 'order' => 'ASC',
- 'orderby' => 'menu_order ID',
- 'id' => isset( $post->ID ) ? $post->ID : 0,
- 'include' => '',
- 'exclude' => '',
- 'type' => '',
- 'grayscale' => false,
- 'link' => '',
- 'columns' => 3,
- ),
- $atts,
- 'gallery'
- );
-
- $this->atts['id'] = (int) $this->atts['id'];
- $this->float = is_rtl() ? 'right' : 'left';
-
- // Default to rectangular is tiled galleries are checked
- if ( $this->tiles_enabled() && ( ! $this->atts['type'] || 'default' == $this->atts['type'] ) ) {
- /** This filter is already documented in functions.gallery.php */
- $this->atts['type'] = apply_filters( 'jetpack_default_gallery_type', 'rectangular' );
- }
-
- if ( ! $this->atts['orderby'] ) {
- $this->atts['orderby'] = sanitize_sql_orderby( $this->atts['orderby'] );
- if ( ! $this->atts['orderby'] ) {
- $this->atts['orderby'] = 'menu_order ID';
- }
- }
-
- if ( 'rand' == strtolower( $this->atts['order'] ) ) {
- $this->atts['orderby'] = 'rand';
- }
-
- // We shouldn't have more than 20 columns.
- if ( ! is_numeric( $this->atts['columns'] ) || 20 < $this->atts['columns'] ) {
- $this->atts['columns'] = 3;
- }
- }
-
- public function get_attachments() {
- extract( $this->atts );
-
- if ( ! empty( $include ) ) {
- $include = preg_replace( '/[^0-9,]+/', '', $include );
- $_attachments = get_posts(
- array(
- 'include' => $include,
- 'post_status' => 'inherit',
- 'post_type' => 'attachment',
- 'post_mime_type' => 'image',
- 'order' => $order,
- 'orderby' => $orderby,
- 'suppress_filters' => false,
- )
- );
-
- $attachments = array();
- foreach ( $_attachments as $key => $val ) {
- $attachments[ $val->ID ] = $_attachments[ $key ];
- }
- } elseif ( 0 == $id ) {
- // Should NEVER Happen but infinite_scroll_load_other_plugins_scripts means it does
- // Querying with post_parent == 0 can generate stupidly memcache sets on sites with 10000's of unattached attachments as get_children puts every post in the cache.
- // TODO Fix this properly
- $attachments = array();
- } elseif ( ! empty( $exclude ) ) {
- $exclude = preg_replace( '/[^0-9,]+/', '', $exclude );
- $attachments = get_children(
- array(
- 'post_parent' => $id,
- 'exclude' => $exclude,
- 'post_status' => 'inherit',
- 'post_type' => 'attachment',
- 'post_mime_type' => 'image',
- 'order' => $order,
- 'orderby' => $orderby,
- 'suppress_filters' => false,
- )
- );
- } else {
- $attachments = get_children(
- array(
- 'post_parent' => $id,
- 'post_status' => 'inherit',
- 'post_type' => 'attachment',
- 'post_mime_type' => 'image',
- 'order' => $order,
- 'orderby' => $orderby,
- 'suppress_filters' => false,
- )
- );
- }
- return $attachments;
- }
-
- public static function default_scripts_and_styles() {
- wp_enqueue_script(
- 'tiled-gallery',
- Jetpack::get_file_url_for_environment(
- '_inc/build/tiled-gallery/tiled-gallery/tiled-gallery.min.js',
- 'modules/tiled-gallery/tiled-gallery/tiled-gallery.js'
- ),
- array( 'jquery' )
- );
- wp_enqueue_style( 'tiled-gallery', plugins_url( 'tiled-gallery/tiled-gallery.css', __FILE__ ), array(), '2012-09-21' );
- wp_style_add_data( 'tiled-gallery', 'rtl', 'replace' );
- }
-
- public function gallery_shortcode( $val, $atts ) {
- if ( ! empty( $val ) ) { // something else is overriding post_gallery, like a custom VIP shortcode
- return $val;
- }
-
- global $post;
-
- $this->set_atts( $atts );
-
- $attachments = $this->get_attachments();
- if ( empty( $attachments ) ) {
- return '';
- }
-
- if ( is_feed() || defined( 'IS_HTML_EMAIL' ) ) {
- return '';
- }
-
- if (
- in_array(
- $this->atts['type'],
- /**
- * Filters the permissible Tiled Gallery types.
- *
- * @module tiled-gallery
- *
- * @since 3.7.0
- *
- * @param array Array of allowed types. Default: 'rectangular', 'square', 'circle', 'rectangle', 'columns'.
- */
- $talaveras = apply_filters( 'jetpack_tiled_gallery_types', self::$talaveras )
- )
- ) {
- // Enqueue styles and scripts
- self::default_scripts_and_styles();
-
- // Generate gallery HTML
- $gallery_class = 'Jetpack_Tiled_Gallery_Layout_' . ucfirst( $this->atts['type'] );
- $gallery = new $gallery_class( $attachments, $this->atts['link'], $this->atts['grayscale'], (int) $this->atts['columns'] );
- $gallery_html = $gallery->HTML();
-
- if ( $gallery_html && class_exists( 'Jetpack' ) && class_exists( 'Jetpack_Photon' ) ) {
- // Tiled Galleries in Jetpack require that Photon be active.
- // If it's not active, run it just on the gallery output.
- if ( ! in_array( 'photon', Jetpack::get_active_modules() ) && ! Jetpack::is_development_mode() ) {
- $gallery_html = Jetpack_Photon::filter_the_content( $gallery_html );
- }
- }
-
- return trim( preg_replace( '/\s+/', ' ', $gallery_html ) ); // remove any new lines from the output so that the reader parses it better
- }
-
- return '';
- }
-
- public static function gallery_already_redefined() {
- global $shortcode_tags;
- $redefined = false;
- if ( ! isset( $shortcode_tags['gallery'] ) || $shortcode_tags['gallery'] !== 'gallery_shortcode' ) {
- $redefined = true;
- }
- /**
- * Filter the output of the check for another plugin or theme affecting WordPress galleries.
- *
- * This will let folks that replace core’s shortcode confirm feature parity with it, so Jetpack's Tiled Galleries can still work.
- *
- * @module tiled-gallery
- *
- * @since 3.1.0
- *
- * @param bool $redefined Does another plugin or theme already redefines the default WordPress gallery?
- */
- return apply_filters( 'jetpack_tiled_gallery_shortcode_redefined', $redefined );
- }
-
- public static function init() {
- if ( self::gallery_already_redefined() ) {
- return;
- }
-
- $gallery = new Jetpack_Tiled_Gallery();
- add_filter( 'post_gallery', array( $gallery, 'gallery_shortcode' ), 1001, 2 );
- }
-
- public static function get_content_width() {
- $tiled_gallery_content_width = Jetpack::get_content_width();
-
- if ( ! $tiled_gallery_content_width ) {
- $tiled_gallery_content_width = 500;
- }
-
- /**
- * Filter overwriting the default content width.
- *
- * @module tiled-gallery
- *
- * @since 2.1.0
- *
- * @param string $tiled_gallery_content_width Default Tiled Gallery content width.
- */
- return apply_filters( 'tiled_gallery_content_width', $tiled_gallery_content_width );
- }
-
- /**
- * Media UI integration
- */
- function jetpack_gallery_types( $types ) {
- if ( get_option( 'tiled_galleries' ) && isset( $types['default'] ) ) {
- // Tiled is set as the default, meaning that type='default'
- // will still display the mosaic.
- $types['thumbnails'] = $types['default'];
- unset( $types['default'] );
- }
-
- $types['rectangular'] = __( 'Tiled Mosaic', 'jetpack' );
- $types['square'] = __( 'Square Tiles', 'jetpack' );
- $types['circle'] = __( 'Circles', 'jetpack' );
- $types['columns'] = __( 'Tiled Columns', 'jetpack' );
-
- return $types;
- }
-
- function jetpack_default_gallery_type() {
- return ( get_option( 'tiled_galleries' ) ? 'rectangular' : 'default' );
- }
-
- static function get_talaveras() {
- return self::$talaveras;
- }
-
- /**
- * Add a checkbox field to the Carousel section in Settings > Media
- * for setting tiled galleries as the default.
- */
- function settings_api_init() {
- global $wp_settings_sections;
-
- // Add the setting field [tiled_galleries] and place it in Settings > Media
- if ( isset( $wp_settings_sections['media']['carousel_section'] ) ) {
- $section = 'carousel_section';
- } else {
- $section = 'default';
- }
-
- add_settings_field( 'tiled_galleries', __( 'Tiled Galleries', 'jetpack' ), array( $this, 'setting_html' ), 'media', $section );
- register_setting( 'media', 'tiled_galleries', 'esc_attr' );
- }
-
- function setting_html() {
- echo '<label><input name="tiled_galleries" type="checkbox" value="1" ' .
- checked( 1, '' != get_option( 'tiled_galleries' ), false ) . ' /> ' .
- __( 'Display all your gallery pictures in a cool mosaic.', 'jetpack' ) . '</br></label>';
- }
-}
-
-add_action( 'init', array( 'Jetpack_Tiled_Gallery', 'init' ) );
diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/rtl/tiled-gallery-rtl.css b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/rtl/tiled-gallery-rtl.css
deleted file mode 100644
index f5cab8ea..00000000
--- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/rtl/tiled-gallery-rtl.css
+++ /dev/null
@@ -1,96 +0,0 @@
-/* This file was automatically generated on Oct 01 2015 20:17:19 */
-
-/* =Tiled Gallery Default Styles
--------------------------------------------------------------- */
-
-.tiled-gallery {
- clear: both;
- margin: 0 0 20px;
- overflow: hidden;
-}
-.tiled-gallery img {
- margin: 2px !important; /* Ensure that this value isn't overridden by themes that give content images blanket margins */
-}
-.tiled-gallery .gallery-group {
- float: right;
- position: relative;
-}
-.tiled-gallery .tiled-gallery-item {
- float: right;
- margin: 0;
- position: relative;
- width: inherit; /* prevents ie8 bug with inline width styles */
-}
-.tiled-gallery .gallery-row {
- overflow: hidden;
-}
-.tiled-gallery .tiled-gallery-item a { /* Needs to reset some properties for theme compatibility */
- background: transparent;
- border: none;
- color: inherit;
- margin: 0;
- padding: 0;
- text-decoration: none;
- width: auto;
-}
-.tiled-gallery .tiled-gallery-item img,
-.tiled-gallery .tiled-gallery-item img:hover { /* Needs to reset some properties for theme compatibility */
- background: none;
- border: none;
- box-shadow: none;
- max-width: 100%;
- padding: 0;
- vertical-align: middle;
-}
-.tiled-gallery-caption { /* Captions */
- background: #eee;
- background: rgba( 255,255,255,0.8 );
- color: #333;
- font-size: 13px;
- font-weight: 400;
- overflow: hidden;
- padding: 10px 0;
- position: absolute;
- bottom: 0;
- text-indent: 10px;
- text-overflow: ellipsis;
- width: 100%;
- white-space: nowrap;
-}
-.tiled-gallery .tiled-gallery-item-small .tiled-gallery-caption { /* Smaller captions */
- font-size: 11px;
-}
-
-/* Hide galleries in widgets until they've been resized to fit.
- Gallery widgets are almost guaranteed to need resizing, and
- the jump is a little more obvious than galleries in content. */
-.widget-gallery .tiled-gallery-unresized {
- visibility: hidden;
- height: 0px;
- overflow: hidden;
-}
-
-/* =Greyscale
--------------------------------------------------------------- */
-
-.tiled-gallery .tiled-gallery-item img.grayscale {
- position: absolute;
- right: 0;
- top: 0;
-}
-.tiled-gallery .tiled-gallery-item img.grayscale:hover {
- opacity: 0;
-}
-
-
-/* =Circles Layout
--------------------------------------------------------------- */
-
-.tiled-gallery.type-circle .tiled-gallery-item img {
- border-radius: 50% !important; /* Ensure that circles are displayed in themes that add border-radius to all images as a default */
-}
-.tiled-gallery.type-circle .tiled-gallery-caption {
- display: none;
- opacity: 0;
-}
-
diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/carousel-container.php b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/carousel-container.php
deleted file mode 100644
index 6fb74a20..00000000
--- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/carousel-container.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-if ( defined( 'JSON_HEX_AMP' ) ) {
- // see shortcodes/slideshow.php
- // This is nice to have, but not strictly necessary since we use _wp_specialchars() below
- // phpcs:ignore PHPCompatibility
- $extra = json_encode( $this->get_container_extra_data(), JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT );
-} else {
- $extra = json_encode( $this->get_container_extra_data() );
-}
-?>
-<div
- class="tiled-gallery type-<?php echo $this->type; ?> tiled-gallery-unresized"
- data-original-width="<?php echo esc_attr( Jetpack_Tiled_Gallery::get_content_width() ); ?>"
- <?php if ( isset( $extra ) ) : ?>
- data-carousel-extra='<?php echo _wp_specialchars( wp_check_invalid_utf8( $extra ), ENT_QUOTES, false, true ); ?>'
- <?php endif; ?>
- itemscope itemtype="http://schema.org/ImageGallery"
- >
- <?php $this->template( "$this->type-layout", $context ); ?>
-</div>
diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/circle-layout.php b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/circle-layout.php
deleted file mode 100644
index 7c8430dd..00000000
--- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/circle-layout.php
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
-$this->template( 'square-layout', $context );
-
diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/partials/carousel-image-args.php b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/partials/carousel-image-args.php
deleted file mode 100644
index c28d9512..00000000
--- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/partials/carousel-image-args.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-// See https://github.com/Automattic/jetpack/issues/2765
-$fuzzy_image_meta = $item->fuzzy_image_meta();
-if ( isset( $fuzzy_image_meta['keywords'] ) ) {
- unset( $fuzzy_image_meta['keywords'] );
-}
-
-if ( defined( 'JSON_HEX_AMP' ) ) {
- // see shortcodes/slideshow.php
- // This is nice to have, but not strictly necessary since we use _wp_specialchars() below
- // phpcs:ignore PHPCompatibility
- $fuzzy_image_meta = json_encode( array_map( 'strval', $fuzzy_image_meta ), JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT );
-} else {
- $fuzzy_image_meta = json_encode( array_map( 'strval', $fuzzy_image_meta ) );
-}
-?>
-data-attachment-id="<?php echo esc_attr( $item->image->ID ); ?>"
-data-orig-file="<?php echo esc_url( wp_get_attachment_url( $item->image->ID ) ); ?>"
-data-orig-size="<?php echo esc_attr( $item->meta_width() ); ?>,<?php echo esc_attr( $item->meta_height() ); ?>"
-data-comments-opened="<?php echo esc_attr( comments_open( $item->image->ID ) ); ?>"
-data-image-meta="<?php echo _wp_specialchars( wp_check_invalid_utf8( $fuzzy_image_meta ), ENT_QUOTES, false, true ); ?>"
-data-image-title="<?php echo esc_attr( htmlspecialchars( wptexturize( $item->image->post_title ) ) ); ?>"
-data-image-description="<?php echo esc_attr( htmlspecialchars( wpautop( wptexturize( $item->image->post_content ) ) ) ); ?>"
-data-medium-file="<?php echo esc_url( $item->medium_file() ); ?>"
-data-large-file="<?php echo esc_url( $item->large_file() ); ?>"
diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/partials/item.php b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/partials/item.php
deleted file mode 100644
index 8bb2ae7e..00000000
--- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/partials/item.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-$add_link = 'none' !== $this->link;
-
-// We do this for accessibility. Titles without alt's break screen readers.
-if ( empty( $item->image_alt ) && ! empty( $item->image_title ) ) {
- $item->image_alt = $item->image_title;
-}
-?>
-<div class="tiled-gallery-item
-<?php
-if ( isset( $item->size ) ) {
- echo " tiled-gallery-item-$item->size";}
-?>
-" itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
- <?php if ( $add_link ) : ?>
- <a href="<?php echo $item->link; ?>" border="0" itemprop="url">
- <?php endif; ?>
- <meta itemprop="width" content="<?php echo esc_attr( $item->image->width ); ?>">
- <meta itemprop="height" content="<?php echo esc_attr( $item->image->height ); ?>">
- <img
- <?php $this->partial( 'carousel-image-args', array( 'item' => $item ) ); ?>
- src="<?php echo esc_url( $item->img_src ); ?>"
- width="<?php echo esc_attr( $item->image->width ); ?>"
- height="<?php echo esc_attr( $item->image->height ); ?>"
- data-original-width="<?php echo esc_attr( $item->image->width ); ?>"
- data-original-height="<?php echo esc_attr( $item->image->height ); ?>"
- itemprop="http://schema.org/image"
- title="<?php echo esc_attr( $item->image_title ); ?>"
- alt="<?php echo esc_attr( $item->image_alt ); ?>"
- style="width: <?php echo esc_attr( $item->image->width ); ?>px; height: <?php echo esc_attr( $item->image->height ); ?>px;"
- />
- <?php if ( $add_link ) : ?>
- </a>
- <?php endif; ?>
-
- <?php if ( $this->grayscale == true ) : ?>
- <?php if ( $add_link ) : ?>
- <a href="<?php echo $item->link; ?>" border="0" itemprop="url">
- <?php endif; ?>
- <meta itemprop="width" content="<?php echo esc_attr( $item->image->width ); ?>">
- <meta itemprop="height" content="<?php echo esc_attr( $item->image->height ); ?>">
- <img
- class="grayscale"
- src="<?php echo esc_url( $item->img_src_grayscale ); ?>"
- width="<?php echo esc_attr( $item->image->width ); ?>"
- height="<?php echo esc_attr( $item->image->height ); ?>"
- data-original-width="<?php echo esc_attr( $item->image->width ); ?>"
- data-original-height="<?php echo esc_attr( $item->image->height ); ?>"
- itemprop="http://schema.org/image"
- title="<?php echo esc_attr( $item->image_title ); ?>"
- align="left"
- alt="<?php echo esc_attr( $item->image_alt ); ?>"
- style="width: <?php echo esc_attr( $item->image->width ); ?>px; height: <?php echo esc_attr( $item->image->height ); ?>px;"
- />
- <?php if ( $add_link ) : ?>
- </a>
- <?php endif; ?>
- <?php endif; ?>
-
- <?php if ( trim( $item->image->post_excerpt ) ) : ?>
- <div class="tiled-gallery-caption" itemprop="caption description">
- <?php echo wptexturize( $item->image->post_excerpt ); ?>
- </div>
- <?php endif; ?>
-</div>
diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/rectangular-layout.php b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/rectangular-layout.php
deleted file mode 100644
index 802f3bff..00000000
--- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/rectangular-layout.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-foreach ( $rows as $row ) : ?>
- <div
- class="gallery-row"
- style="width: <?php echo esc_attr( $row->width ); ?>px; height: <?php echo esc_attr( $row->height ); ?>px;"
- data-original-width="<?php echo esc_attr( $row->width ); ?>"
- data-original-height="<?php echo esc_attr( $row->height ); ?>"
-
- >
- <?php foreach ( $row->groups as $group ) : ?>
- <div
- class="gallery-group images-<?php echo esc_attr( count( $group->images ) ); ?>"
- style="width: <?php echo esc_attr( $group->width ); ?>px; height: <?php echo esc_attr( $group->height ); ?>px;"
- data-original-width="<?php echo esc_attr( $group->width ); ?>"
- data-original-height="<?php echo esc_attr( $group->height ); ?>"
- >
- <?php foreach ( $group->items( $needs_attachment_link, $grayscale ) as $item ) : ?>
- <?php
- $this->partial(
- 'item',
- array(
- 'item' => $item,
- 'link' => $link,
- )
- );
- ?>
- <?php endforeach; ?>
- </div> <!-- close group -->
- <?php endforeach; ?>
- </div> <!-- close row -->
-<?php endforeach; ?>
diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/square-layout.php b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/square-layout.php
deleted file mode 100644
index d743c038..00000000
--- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/templates/square-layout.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-foreach ( $rows as $row ) : ?>
- <div class="gallery-row"
- style="width: <?php echo esc_attr( $row->width ); ?>px; height: <?php echo esc_attr( $row->height ); ?>px;"
- data-original-width="<?php echo esc_attr( $row->width ); ?>"
- data-original-height="<?php echo esc_attr( $row->height ); ?>"
- >
- <?php $add_link = 'none' !== $link; ?>
- <?php foreach ( $row->images as $item ) : ?>
- <div class="gallery-group"
- style="width: <?php echo esc_attr( $row->group_size ); ?>px; height: <?php echo esc_attr( $row->group_size ); ?>px;"
- data-original-width="<?php echo esc_attr( $row->group_size ); ?>"
- data-original-height="<?php echo esc_attr( $row->group_size ); ?>"
- >
- <?php
- $this->partial(
- 'item',
- array(
- 'item' => $item,
- 'link' => $link,
- )
- );
- ?>
- </div>
- <?php endforeach; ?>
- </div>
-<?php endforeach; ?>
diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-circle.php b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-circle.php
deleted file mode 100644
index 1addcb91..00000000
--- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-circle.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-require_once dirname( __FILE__ ) . '/tiled-gallery-square.php';
-
-class Jetpack_Tiled_Gallery_Layout_Circle extends Jetpack_Tiled_Gallery_Layout_Square {
- protected $type = 'circle';
-}
-
-
diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-item.php b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-item.php
deleted file mode 100644
index 423f9e1c..00000000
--- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-item.php
+++ /dev/null
@@ -1,107 +0,0 @@
-<?php
-abstract class Jetpack_Tiled_Gallery_Item {
- public $image;
-
- public function __construct( $attachment_image, $needs_attachment_link, $grayscale ) {
- $this->image = $attachment_image;
- $this->grayscale = $grayscale;
-
- $this->image_title = $this->image->post_title;
-
- $this->image_alt = get_post_meta( $this->image->ID, '_wp_attachment_image_alt', true );
- // If no Alt value, use the caption
- if ( empty( $this->image_alt ) && ! empty( $this->image->post_excerpt ) ) {
- $this->image_alt = trim( strip_tags( $this->image->post_excerpt ) );
- }
- // If still no Alt value, use the title
- if ( empty( $this->image_alt ) && ! empty( $this->image->post_title ) ) {
- $this->image_alt = trim( strip_tags( $this->image->post_title ) );
- }
-
- $this->orig_file = wp_get_attachment_url( $this->image->ID );
- $this->link = $needs_attachment_link
- ? get_attachment_link( $this->image->ID )
- // The filter will photonize the URL if and only if Photon is active
- : apply_filters( 'jetpack_photon_url', $this->orig_file );
-
- $img_args = array(
- 'w' => $this->image->width,
- 'h' => $this->image->height,
- );
- // If h and w are the same, there's a reasonably good chance the image will need cropping to avoid being stretched.
- if ( $this->image->height == $this->image->width ) {
- $img_args['crop'] = true;
- }
- // The function will always photonoize the URL (even if Photon is
- // not active). We need to photonize the URL to set the width/height.
- $this->img_src = jetpack_photon_url( $this->orig_file, $img_args );
- }
-
- public function fuzzy_image_meta() {
- $meta = wp_get_attachment_metadata( $this->image->ID );
- $img_meta = ( ! empty( $meta['image_meta'] ) ) ? (array) $meta['image_meta'] : array();
- if ( ! empty( $img_meta ) ) {
- foreach ( $img_meta as $k => $v ) {
- if ( 'latitude' == $k || 'longitude' == $k ) {
- unset( $img_meta[ $k ] );
- }
- }
- }
-
- return $img_meta;
- }
-
- public function meta_width() {
- $meta = wp_get_attachment_metadata( $this->image->ID );
- return isset( $meta['width'] ) ? intval( $meta['width'] ) : '';
- }
-
- public function meta_height() {
- $meta = wp_get_attachment_metadata( $this->image->ID );
- return isset( $meta['height'] ) ? intval( $meta['height'] ) : '';
- }
-
- public function medium_file() {
- $medium_file_info = wp_get_attachment_image_src( $this->image->ID, 'medium' );
- $medium_file = isset( $medium_file_info[0] ) ? $medium_file_info[0] : '';
- return $medium_file;
- }
-
- public function large_file() {
- $large_file_info = wp_get_attachment_image_src( $this->image->ID, 'large' );
- $large_file = isset( $large_file_info[0] ) ? $large_file_info[0] : '';
- return $large_file;
- }
-}
-
-class Jetpack_Tiled_Gallery_Rectangular_Item extends Jetpack_Tiled_Gallery_Item {
- public function __construct( $attachment_image, $needs_attachment_link, $grayscale ) {
- parent::__construct( $attachment_image, $needs_attachment_link, $grayscale );
- $this->img_src_grayscale = jetpack_photon_url( $this->img_src, array( 'filter' => 'grayscale' ) );
-
- $this->size = 'large';
-
- if ( $this->image->width < 250 ) {
- $this->size = 'small';
- }
- }
-}
-
-class Jetpack_Tiled_Gallery_Square_Item extends Jetpack_Tiled_Gallery_Item {
- public function __construct( $attachment_image, $needs_attachment_link, $grayscale ) {
- parent::__construct( $attachment_image, $needs_attachment_link, $grayscale );
- $this->img_src_grayscale = jetpack_photon_url(
- $this->img_src,
- array(
- 'filter' => 'grayscale',
- 'resize' => array(
- $this->image->width,
- $this->image->height,
- ),
- )
- );
- }
-}
-
-class Jetpack_Tiled_Gallery_Circle_Item extends Jetpack_Tiled_Gallery_Square_Item {
-}
diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-layout.php b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-layout.php
deleted file mode 100644
index acaa0088..00000000
--- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-layout.php
+++ /dev/null
@@ -1,110 +0,0 @@
-<?php
-abstract class Jetpack_Tiled_Gallery_Layout {
- // Template whitelist
- private static $templates = array( 'carousel-container', 'circle-layout', 'rectangular-layout', 'square-layout' );
- private static $partials = array( 'carousel-image-args', 'item' );
-
- protected $type; // Defined in child classes
- public $attachments;
- public $link;
- public $grayscale;
- public $columns;
- public function __construct( $attachments, $link, $grayscale, $columns ) {
-
- $this->attachments = $attachments;
- $this->link = $link;
- $this->needs_attachment_link = ! ( isset( $link ) && $link == 'file' );
- $this->grayscale = $grayscale;
- $this->columns = $columns;
- }
-
- public function HTML( $context = array() ) {
- // Render the carousel container template, which will take the
- // appropriate strategy to fill it
- ob_start();
- $this->template(
- 'carousel-container',
- array_merge(
- $context,
- array(
- 'attachments' => $this->attachments,
- 'link' => $this->link,
- 'needs_attachment_link' => $this->needs_attachment_link,
- 'grayscale' => $this->grayscale,
- )
- )
- );
- $html = ob_get_clean();
-
- return $html;
- }
-
- private function template( $name, $context = null ) {
- if ( ! in_array( $name, self::$templates ) ) {
- return;
- }
-
- if ( isset( $context ) ) {
- extract( $context );
- }
-
- /**
- * Filters the Tiled Gallery template path
- *
- * @module tiled-gallery
- * @since 4.4.0
- *
- * @param string $path Template path.
- * @param string $path Template name.
- * @param array $context Context array passed to the template.
- */
- require apply_filters( 'jetpack_tiled_gallery_template', dirname( __FILE__ ) . "/templates/$name.php", $name, $context );
- }
-
- private function partial( $name, $context = null ) {
- if ( ! in_array( $name, self::$partials ) ) {
- return;
- }
-
- if ( isset( $context ) ) {
- extract( $context );
- }
-
- /**
- * Filters the Tiled Gallery partial path
- *
- * @module tiled-gallery
- * @since 4.4.0
- *
- * @param string $path Partial path.
- * @param string $path Partial name.
- * @param array $context Context array passed to the partial.
- */
- require apply_filters( 'jetpack_tiled_gallery_partial', dirname( __FILE__ ) . "/templates/partials/$name.php", $name, $context );
- }
-
- protected function get_container_extra_data() {
- global $post;
-
- $blog_id = (int) get_current_blog_id();
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $likes_blog_id = $blog_id;
- } else {
- $likes_blog_id = Jetpack_Options::get_option( 'id' );
- }
-
- if ( class_exists( 'Jetpack_Carousel' ) || in_array( 'carousel', Jetpack::get_active_modules() ) || 'carousel' == $this->link ) {
- $extra_data = array(
- 'blog_id' => $blog_id,
- 'permalink' => get_permalink( isset( $post->ID ) ? $post->ID : 0 ),
- 'likes_blog_id' => $likes_blog_id,
- );
- } else {
- $extra_data = null;
- }
-
- return $extra_data;
- }
-}
-
diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-rectangular.php b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-rectangular.php
deleted file mode 100644
index 9ea272fc..00000000
--- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-rectangular.php
+++ /dev/null
@@ -1,223 +0,0 @@
-<?php
-require_once dirname( __FILE__ ) . '/tiled-gallery-layout.php';
-require_once dirname( __FILE__ ) . '/tiled-gallery-shape.php';
-require_once dirname( __FILE__ ) . '/tiled-gallery-item.php';
-
-class Jetpack_Tiled_Gallery_Layout_Rectangular extends Jetpack_Tiled_Gallery_Layout {
- protected $type = 'rectangular';
-
- public function HTML( $context = array() ) {
- $grouper = new Jetpack_Tiled_Gallery_Grouper( $this->attachments );
- Jetpack_Tiled_Gallery_Shape::reset_last_shape();
-
- return parent::HTML( array( 'rows' => $grouper->grouped_images ) );
- }
-}
-
-class Jetpack_Tiled_Gallery_Layout_Columns extends Jetpack_Tiled_Gallery_Layout {
- protected $type = 'rectangular'; // It doesn't need separate template for now
-
- public function HTML( $context = array() ) {
- $grouper = new Jetpack_Tiled_Gallery_Grouper( $this->attachments, array( 'Three_Columns', 'Two' ) );
-
- return parent::HTML( array( 'rows' => $grouper->grouped_images ) );
- }
-}
-
-// Alias
-class Jetpack_Tiled_Gallery_Layout_Rectangle extends Jetpack_Tiled_Gallery_Layout_Rectangular {}
-
-// Image grouping and HTML generation logic
-class Jetpack_Tiled_Gallery_Grouper {
- public $margin = 4;
-
- // This list is ordered. If you put a shape that's likely to occur on top, it will happen all the time.
- public $shapes = array(
- 'Reverse_Symmetric_Row',
- 'Long_Symmetric_Row',
- 'Symmetric_Row',
- 'One_Three',
- 'Three_One',
- 'One_Two',
- 'Five',
- 'Four',
- 'Three',
- 'Two_One',
- 'Panoramic',
- );
-
- public function __construct( $attachments, $shapes = array() ) {
- $content_width = Jetpack_Tiled_Gallery::get_content_width();
-
- $this->overwrite_shapes( $shapes );
- $this->last_shape = '';
- $this->images = $this->get_images_with_sizes( $attachments );
- $this->grouped_images = $this->get_grouped_images();
- $this->apply_content_width( $content_width );
- }
-
- public function overwrite_shapes( $shapes ) {
- if ( ! empty( $shapes ) ) {
- $this->shapes = $shapes;
- }
- }
-
- public function get_current_row_size() {
- $images_left = count( $this->images );
- if ( $images_left < 3 ) {
- return array_fill( 0, $images_left, 1 );
- }
-
- foreach ( $this->shapes as $shape_name ) {
- $class_name = "Jetpack_Tiled_Gallery_$shape_name";
- $shape = new $class_name( $this->images );
- if ( $shape->is_possible() ) {
- Jetpack_Tiled_Gallery_Shape::set_last_shape( $class_name );
- return $shape->shape;
- }
- }
-
- Jetpack_Tiled_Gallery_Shape::set_last_shape( 'Two' );
- return array( 1, 1 );
- }
-
- public function get_images_with_sizes( $attachments ) {
- $images_with_sizes = array();
-
- foreach ( $attachments as $image ) {
- $meta = wp_get_attachment_metadata( $image->ID );
- $image->width_orig = ( isset( $meta['width'] ) && $meta['width'] > 0 ) ? $meta['width'] : 1;
- $image->height_orig = ( isset( $meta['height'] ) && $meta['height'] > 0 ) ? $meta['height'] : 1;
- $image->ratio = $image->width_orig / $image->height_orig;
- $image->ratio = $image->ratio ? $image->ratio : 1;
- $images_with_sizes[] = $image;
- }
-
- return $images_with_sizes;
- }
-
- public function read_row() {
- $vector = $this->get_current_row_size();
-
- $row = array();
- foreach ( $vector as $group_size ) {
- $row[] = new Jetpack_Tiled_Gallery_Group( array_splice( $this->images, 0, $group_size ) );
- }
-
- return $row;
- }
-
- public function get_grouped_images() {
- $grouped_images = array();
-
- while ( ! empty( $this->images ) ) {
- $grouped_images[] = new Jetpack_Tiled_Gallery_Row( $this->read_row() );
- }
-
- return $grouped_images;
- }
-
- // todo: split in functions
- // todo: do not stretch images
- public function apply_content_width( $width ) {
- foreach ( $this->grouped_images as $row ) {
- $row->width = $width;
- $row->raw_height = 1 / $row->ratio * ( $width - $this->margin * ( count( $row->groups ) - $row->weighted_ratio ) );
- $row->height = round( $row->raw_height );
-
- $this->calculate_group_sizes( $row );
- }
- }
-
- public function calculate_group_sizes( $row ) {
- // Storing the calculated group heights in an array for rounding them later while preserving their sum
- // This fixes the rounding error that can lead to a few ugly pixels sticking out in the gallery
- $group_widths_array = array();
- foreach ( $row->groups as $group ) {
- $group->height = $row->height;
- // Storing the raw calculations in a separate property to prevent rounding errors from cascading down and for diagnostics
- $group->raw_width = ( $row->raw_height - $this->margin * count( $group->images ) ) * $group->ratio + $this->margin;
- $group_widths_array[] = $group->raw_width;
- }
- $rounded_group_widths_array = Jetpack_Constrained_Array_Rounding::get_rounded_constrained_array( $group_widths_array, $row->width );
-
- foreach ( $row->groups as $group ) {
- $group->width = array_shift( $rounded_group_widths_array );
- $this->calculate_image_sizes( $group );
- }
- }
-
- public function calculate_image_sizes( $group ) {
- // Storing the calculated image heights in an array for rounding them later while preserving their sum
- // This fixes the rounding error that can lead to a few ugly pixels sticking out in the gallery
- $image_heights_array = array();
- foreach ( $group->images as $image ) {
- $image->width = $group->width - $this->margin;
- // Storing the raw calculations in a separate property for diagnostics
- $image->raw_height = ( $group->raw_width - $this->margin ) / $image->ratio;
- $image_heights_array[] = $image->raw_height;
- }
-
- $image_height_sum = $group->height - count( $image_heights_array ) * $this->margin;
- $rounded_image_heights_array = Jetpack_Constrained_Array_Rounding::get_rounded_constrained_array( $image_heights_array, $image_height_sum );
-
- foreach ( $group->images as $image ) {
- $image->height = array_shift( $rounded_image_heights_array );
- }
- }
-}
-
-class Jetpack_Tiled_Gallery_Row {
- public function __construct( $groups ) {
- $this->groups = $groups;
- $this->ratio = $this->get_ratio();
- $this->weighted_ratio = $this->get_weighted_ratio();
- }
-
- public function get_ratio() {
- $ratio = 0;
- foreach ( $this->groups as $group ) {
- $ratio += $group->ratio;
- }
- return $ratio > 0 ? $ratio : 1;
- }
-
- public function get_weighted_ratio() {
- $weighted_ratio = 0;
- foreach ( $this->groups as $group ) {
- $weighted_ratio += $group->ratio * count( $group->images );
- }
- return $weighted_ratio > 0 ? $weighted_ratio : 1;
- }
-}
-
-class Jetpack_Tiled_Gallery_Group {
- public function __construct( $images ) {
- $this->images = $images;
- $this->ratio = $this->get_ratio();
- }
-
- public function get_ratio() {
- $ratio = 0;
- foreach ( $this->images as $image ) {
- if ( $image->ratio ) {
- $ratio += 1 / $image->ratio;
- }
- }
- if ( ! $ratio ) {
- return 1;
- }
-
- return 1 / $ratio;
- }
-
- public function items( $needs_attachment_link, $grayscale ) {
- $items = array();
- foreach ( $this->images as $image ) {
- $items[] = new Jetpack_Tiled_Gallery_Rectangular_Item( $image, $needs_attachment_link, $grayscale );
- }
-
- return $items;
- }
-}
-
diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-rtl.css b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-rtl.css
deleted file mode 100644
index 34e50334..00000000
--- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-rtl.css
+++ /dev/null
@@ -1 +0,0 @@
-.tiled-gallery{clear:both;margin:0 0 20px;overflow:hidden}.tiled-gallery img{margin:2px!important}.tiled-gallery .gallery-group{float:right;position:relative}.tiled-gallery .tiled-gallery-item{float:right;margin:0;position:relative;width:inherit}.tiled-gallery .gallery-row{overflow:hidden}.tiled-gallery .tiled-gallery-item a{background:100% 0;border:none;color:inherit;margin:0;padding:0;text-decoration:none;width:auto}.tiled-gallery .tiled-gallery-item img,.tiled-gallery .tiled-gallery-item img:hover{background:100% 0;border:none;box-shadow:none;max-width:100%;padding:0;vertical-align:middle}.tiled-gallery-caption{background:#eee;background:rgba(255,255,255,.8);color:#333;font-size:13px;font-weight:400;overflow:hidden;padding:10px 0;position:absolute;bottom:0;text-indent:10px;text-overflow:ellipsis;width:100%;white-space:nowrap}.tiled-gallery .tiled-gallery-item-small .tiled-gallery-caption{font-size:11px}.widget-gallery .tiled-gallery-unresized{visibility:hidden;height:0;overflow:hidden}.tiled-gallery .tiled-gallery-item img.grayscale{position:absolute;right:0;top:0}.tiled-gallery .tiled-gallery-item img.grayscale:hover{opacity:0}.tiled-gallery.type-circle .tiled-gallery-item img{border-radius:50%!important}.tiled-gallery.type-circle .tiled-gallery-caption{display:none;opacity:0} \ No newline at end of file
diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-shape.php b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-shape.php
deleted file mode 100644
index bc243966..00000000
--- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-shape.php
+++ /dev/null
@@ -1,209 +0,0 @@
-<?php
-class Jetpack_Tiled_Gallery_Shape {
- static $shapes_used = array();
-
- public function __construct( $images ) {
- $this->images = $images;
- $this->images_left = count( $images );
- }
-
- public function sum_ratios( $number_of_images = 3 ) {
- return array_sum( array_slice( wp_list_pluck( $this->images, 'ratio' ), 0, $number_of_images ) );
- }
-
- public function next_images_are_symmetric() {
- return $this->images_left > 2 && $this->images[0]->ratio == $this->images[2]->ratio;
- }
-
- public function is_not_as_previous( $n = 1 ) {
- return ! in_array( get_class( $this ), array_slice( self::$shapes_used, -$n ) );
- }
-
- public function is_wide_theme() {
- return Jetpack::get_content_width() > 1000;
- }
-
- public function image_is_landscape( $image ) {
- return $image->ratio >= 1 && $image->ratio < 2;
- }
-
- public function image_is_portrait( $image ) {
- return $image->ratio < 1;
- }
-
- public function image_is_panoramic( $image ) {
- return $image->ratio >= 2;
- }
-
- public static function set_last_shape( $last_shape ) {
- self::$shapes_used[] = $last_shape;
- }
-
- public static function reset_last_shape() {
- self::$shapes_used = array();
- }
-}
-
-class Jetpack_Tiled_Gallery_Three extends Jetpack_Tiled_Gallery_Shape {
- public $shape = array( 1, 1, 1 );
-
- public function is_possible() {
- $ratio = $this->sum_ratios( 3 );
- $has_enough_images = $this->images_left >= 3 && ! in_array( $this->images_left, array( 4, 6 ) );
- return $has_enough_images && $this->is_not_as_previous( 3 ) &&
- ( ( $ratio < 2.5 ) || ( $ratio < 5 && $this->next_images_are_symmetric() ) || $this->is_wide_theme() );
- }
-}
-
-class Jetpack_Tiled_Gallery_Four extends Jetpack_Tiled_Gallery_Shape {
- public $shape = array( 1, 1, 1, 1 );
-
- public function is_possible() {
- return $this->is_not_as_previous() &&
- (
- ( $this->sum_ratios( 4 ) < 3.5 && $this->images_left > 5 ) ||
- ( $this->sum_ratios( 4 ) < 7 && $this->images_left == 4 )
- );
- }
-}
-
-class Jetpack_Tiled_Gallery_Five extends Jetpack_Tiled_Gallery_Shape {
- public $shape = array( 1, 1, 1, 1, 1 );
-
- public function is_possible() {
- return $this->is_wide_theme() && $this->is_not_as_previous() && $this->sum_ratios( 5 ) < 5 &&
- ( $this->images_left == 5 || ( $this->images_left != 10 && $this->images_left > 6 ) );
- }
-}
-
-class Jetpack_Tiled_Gallery_Two_One extends Jetpack_Tiled_Gallery_Shape {
- public $shape = array( 2, 1 );
-
- public function is_possible() {
- return $this->is_not_as_previous( 3 ) && $this->images_left >= 2 &&
- $this->images[2]->ratio < 1.6 && $this->images[0]->ratio >= 0.9 && $this->images[0]->ratio < 2.0 && $this->images[1]->ratio >= 0.9 && $this->images[1]->ratio < 2.0;
- }
-}
-
-class Jetpack_Tiled_Gallery_One_Two extends Jetpack_Tiled_Gallery_Shape {
- public $shape = array( 1, 2 );
-
- public function is_possible() {
- return $this->is_not_as_previous( 3 ) && $this->images_left >= 2 &&
- $this->images[0]->ratio < 1.6 && $this->images[1]->ratio >= 0.9 && $this->images[1]->ratio < 2.0 && $this->images[2]->ratio >= 0.9 && $this->images[2]->ratio < 2.0;
- }
-}
-
-class Jetpack_Tiled_Gallery_One_Three extends Jetpack_Tiled_Gallery_Shape {
- public $shape = array( 1, 3 );
-
- public function is_possible() {
- return $this->is_not_as_previous( 3 ) && $this->images_left > 3 &&
- $this->image_is_portrait( $this->images[0] ) &&
- $this->image_is_landscape( $this->images[1] ) &&
- $this->image_is_landscape( $this->images[2] ) &&
- $this->image_is_landscape( $this->images[3] );
- }
-}
-
-class Jetpack_Tiled_Gallery_Three_One extends Jetpack_Tiled_Gallery_Shape {
- public $shape = array( 3, 1 );
-
- public function is_possible() {
- return $this->is_not_as_previous( 3 ) && $this->images_left > 3 &&
- $this->image_is_portrait( $this->images[3] ) &&
- $this->image_is_landscape( $this->images[0] ) &&
- $this->image_is_landscape( $this->images[1] ) &&
- $this->image_is_landscape( $this->images[2] );
- }
-}
-
-class Jetpack_Tiled_Gallery_Panoramic extends Jetpack_Tiled_Gallery_Shape {
- public $shape = array( 1 );
-
- public function is_possible() {
- return $this->image_is_panoramic( $this->images[0] );
- }
-}
-
-class Jetpack_Tiled_Gallery_Symmetric_Row extends Jetpack_Tiled_Gallery_Shape {
- public $shape = array( 1, 2, 1 );
-
- public function is_possible() {
- return $this->is_not_as_previous( 5 ) &&
- $this->images_left > 3 &&
- $this->images_left != 5 &&
- $this->image_is_portrait( $this->images[0] ) &&
- $this->image_is_landscape( $this->images[1] ) &&
- $this->image_is_landscape( $this->images[2] ) &&
- $this->image_is_portrait( $this->images[3] );
- }
-}
-class Jetpack_Tiled_Gallery_Reverse_Symmetric_Row extends Jetpack_Tiled_Gallery_Shape {
- public $shape = array( 2, 1, 2 );
-
- public function is_possible() {
- return $this->is_not_as_previous( 5 ) && $this->images_left > 15 &&
- $this->image_is_landscape( $this->images[0] ) &&
- $this->image_is_landscape( $this->images[1] ) &&
- $this->image_is_portrait( $this->images[2] ) &&
- $this->image_is_landscape( $this->images[3] ) &&
- $this->image_is_landscape( $this->images[4] );
- }
-}
-
-class Jetpack_Tiled_Gallery_Long_Symmetric_Row extends Jetpack_Tiled_Gallery_Shape {
- public $shape = array( 3, 1, 3 );
-
- public function is_possible() {
- return $this->is_not_as_previous( 5 ) && $this->images_left > 15 &&
- $this->image_is_landscape( $this->images[0] ) &&
- $this->image_is_landscape( $this->images[1] ) &&
- $this->image_is_landscape( $this->images[2] ) &&
- $this->image_is_portrait( $this->images[3] ) &&
- $this->image_is_landscape( $this->images[4] ) &&
- $this->image_is_landscape( $this->images[5] ) &&
- $this->image_is_landscape( $this->images[6] );
- }
-}
-
-class Jetpack_Tiled_Gallery_Three_Columns extends Jetpack_Tiled_Gallery_Shape {
- public $shape = array();
-
- public function __construct( $images ) {
- parent::__construct( $images );
-
- $total_ratio = $this->sum_ratios( $this->images_left );
- $approximate_column_ratio = $total_ratio / 3;
- $column_one_images = $column_two_images = $column_three_images = $sum = 0;
-
- foreach ( $this->images as $image ) {
- if ( $sum <= $approximate_column_ratio ) {
- $column_one_images++;
- }
-
- if ( $sum > $approximate_column_ratio && $sum <= 2 * $approximate_column_ratio ) {
- $column_two_images++;
- }
- $sum += $image->ratio;
- }
-
- $column_three_images = $this->images_left - $column_two_images - $column_one_images;
-
- if ( $column_one_images ) {
- $this->shape[] = $column_one_images;
- }
-
- if ( $column_two_images ) {
- $this->shape[] = $column_two_images;
- }
-
- if ( $column_three_images ) {
- $this->shape[] = $column_three_images;
- }
- }
-
- public function is_possible() {
- return ! empty( $this->shape );
- }
-}
diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-square.php b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-square.php
deleted file mode 100644
index 735c19eb..00000000
--- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery-square.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-require_once dirname( __FILE__ ) . '/tiled-gallery-layout.php';
-require_once dirname( __FILE__ ) . '/tiled-gallery-item.php';
-
-class Jetpack_Tiled_Gallery_Layout_Square extends Jetpack_Tiled_Gallery_Layout {
- protected $type = 'square';
-
- private function compute_items() {
- $content_width = Jetpack_Tiled_Gallery::get_content_width();
- $images_per_row = ( $this->columns > 1 ? $this->columns : 1 );
- $margin = 2;
-
- $margin_space = ( $images_per_row * $margin ) * 2;
- $size = floor( ( $content_width - $margin_space ) / $images_per_row );
- $img_size = $remainder_size = $size;
- $remainder = count( $this->attachments ) % $images_per_row;
- if ( $remainder > 0 ) {
- $remainder_space = ( $remainder * $margin ) * 2;
- $remainder_size = floor( ( $content_width - $remainder_space ) / $remainder );
- }
-
- $c = 1;
- $items_in_row = 0;
- $rows = array();
- $row = new stdClass();
- $row->images = array();
- foreach ( $this->attachments as $image ) {
- if ( $remainder > 0 && $c <= $remainder ) {
- $img_size = $remainder_size;
- } else {
- $img_size = $size;
- }
-
- $image->width = $image->height = $img_size;
-
- $item = new Jetpack_Tiled_Gallery_Square_Item( $image, $this->needs_attachment_link, $this->grayscale );
-
- $row->images[] = $item;
- $c ++;
- $items_in_row++;
-
- if ( $images_per_row === $items_in_row || $remainder + 1 == $c ) {
- $rows[] = $row;
- $items_in_row = 0;
-
- $row->height = $img_size + $margin * 2;
- $row->width = $content_width;
- $row->group_size = $img_size + 2 * $margin;
-
- $row = new stdClass();
- $row->images = array();
- }
- }
-
- if ( ! empty( $row->images ) ) {
- $row->height = $img_size + $margin * 2;
- $row->width = $content_width;
- $row->group_size = $img_size + 2 * $margin;
-
- $rows[] = $row;
- }
-
- return $rows;
- }
-
- public function HTML( $context = array() ) {
- return parent::HTML( array( 'rows' => $this->compute_items() ) );
- }
-}
-
diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery.css b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery.css
deleted file mode 100644
index b4cdc576..00000000
--- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery.css
+++ /dev/null
@@ -1,94 +0,0 @@
-/* =Tiled Gallery Default Styles
--------------------------------------------------------------- */
-
-.tiled-gallery {
- clear: both;
- margin: 0 0 20px;
- overflow: hidden;
-}
-.tiled-gallery img {
- margin: 2px !important; /* Ensure that this value isn't overridden by themes that give content images blanket margins */
-}
-.tiled-gallery .gallery-group {
- float: left;
- position: relative;
-}
-.tiled-gallery .tiled-gallery-item {
- float: left;
- margin: 0;
- position: relative;
- width: inherit; /* prevents ie8 bug with inline width styles */
-}
-.tiled-gallery .gallery-row {
- overflow: hidden;
-}
-.tiled-gallery .tiled-gallery-item a { /* Needs to reset some properties for theme compatibility */
- background: transparent;
- border: none;
- color: inherit;
- margin: 0;
- padding: 0;
- text-decoration: none;
- width: auto;
-}
-.tiled-gallery .tiled-gallery-item img,
-.tiled-gallery .tiled-gallery-item img:hover { /* Needs to reset some properties for theme compatibility */
- background: none;
- border: none;
- box-shadow: none;
- max-width: 100%;
- padding: 0;
- vertical-align: middle;
-}
-.tiled-gallery-caption { /* Captions */
- background: #eee;
- background: rgba( 255,255,255,0.8 );
- color: #333;
- font-size: 13px;
- font-weight: 400;
- overflow: hidden;
- padding: 10px 0;
- position: absolute;
- bottom: 0;
- text-indent: 10px;
- text-overflow: ellipsis;
- width: 100%;
- white-space: nowrap;
-}
-.tiled-gallery .tiled-gallery-item-small .tiled-gallery-caption { /* Smaller captions */
- font-size: 11px;
-}
-
-/* Hide galleries in widgets until they've been resized to fit.
- Gallery widgets are almost guaranteed to need resizing, and
- the jump is a little more obvious than galleries in content. */
-.widget-gallery .tiled-gallery-unresized {
- visibility: hidden;
- height: 0px;
- overflow: hidden;
-}
-
-/* =Greyscale
--------------------------------------------------------------- */
-
-.tiled-gallery .tiled-gallery-item img.grayscale {
- position: absolute;
- left: 0;
- top: 0;
-}
-.tiled-gallery .tiled-gallery-item img.grayscale:hover {
- opacity: 0;
-}
-
-
-/* =Circles Layout
--------------------------------------------------------------- */
-
-.tiled-gallery.type-circle .tiled-gallery-item img {
- border-radius: 50% !important; /* Ensure that circles are displayed in themes that add border-radius to all images as a default */
-}
-.tiled-gallery.type-circle .tiled-gallery-caption {
- display: none;
- opacity: 0;
-}
-
diff --git a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery.js b/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery.js
deleted file mode 100644
index f8f02f37..00000000
--- a/plugins/jetpack/modules/tiled-gallery/tiled-gallery/tiled-gallery.js
+++ /dev/null
@@ -1,176 +0,0 @@
-/* jshint onevar:false, smarttabs:true */
-
-( function($) {
-
- function TiledGalleryCollection() {
- this.galleries = [];
- this.findAndSetupNewGalleries();
- }
-
- TiledGalleryCollection.prototype.findAndSetupNewGalleries = function() {
- var self = this;
- $( '.tiled-gallery.tiled-gallery-unresized' ).each( function() {
- self.galleries.push( new TiledGallery( $( this ) ) );
- } );
- };
-
- TiledGalleryCollection.prototype.resizeAll = function() {
- $.each(this.galleries, function(i, gallery) {
- gallery.resize();
- } );
- };
-
- function TiledGallery( galleryElem ) {
- this.gallery = galleryElem;
-
- this.addCaptionEvents();
-
- // Resize when initialized to fit the gallery to window dimensions
- this.resize();
-
- // Displays the gallery and prevents it from being initialized again
- this.gallery.removeClass( 'tiled-gallery-unresized' );
- }
-
- /**
- * Selector for all resizeable elements inside a Tiled Gallery
- */
-
- TiledGallery.prototype.resizeableElementsSelector = '.gallery-row, .gallery-group, .tiled-gallery-item img';
-
- /**
- * Story
- */
-
- TiledGallery.prototype.addCaptionEvents = function() {
- // Hide captions
- this.gallery.find( '.tiled-gallery-caption' ).hide();
-
- // Add hover effects to bring the caption up and down for each item
- this.gallery.find( '.tiled-gallery-item' ).hover(
- function() { $( this ).find( '.tiled-gallery-caption' ).stop(true, true).slideDown( 'fast' ); },
- function() { $( this ).find( '.tiled-gallery-caption' ).stop(true, true).slideUp( 'fast' ); }
- );
- };
-
- TiledGallery.prototype.getExtraDimension = function( el, attribute, mode ) {
- if ( mode === 'horizontal' ) {
- var left = ( attribute === 'border' ) ? 'borderLeftWidth' : attribute + 'Left';
- var right = ( attribute === 'border' ) ? 'borderRightWidth' : attribute + 'Right';
- return ( parseInt( el.css( left ), 10 ) || 0 ) + ( parseInt( el.css( right ), 10 ) || 0 );
- } else if ( mode === 'vertical' ) {
- var top = ( attribute === 'border' ) ? 'borderTopWidth' : attribute + 'Top';
- var bottom = ( attribute === 'border' ) ? 'borderBottomWidth' : attribute + 'Bottom';
- return ( parseInt( el.css( top ), 10 ) || 0 ) + ( parseInt( el.css( bottom ), 10 ) || 0 );
- } else {
- return 0;
- }
- };
-
- TiledGallery.prototype.resize = function() {
- // Resize everything in the gallery based on the ratio of the current content width
- // to the original content width;
- var originalWidth = this.gallery.data( 'original-width' );
- var currentWidth = this.gallery.parent().width();
- var resizeRatio = Math.min( 1, currentWidth / originalWidth );
-
- var self = this;
- this.gallery.find( this.resizeableElementsSelector ).each( function () {
- var thisGalleryElement = $( this );
-
- var marginWidth = self.getExtraDimension( thisGalleryElement, 'margin', 'horizontal' );
- var marginHeight = self.getExtraDimension( thisGalleryElement, 'margin', 'vertical' );
-
- var paddingWidth = self.getExtraDimension( thisGalleryElement, 'padding', 'horizontal' );
- var paddingHeight = self.getExtraDimension( thisGalleryElement, 'padding', 'vertical' );
-
- var borderWidth = self.getExtraDimension( thisGalleryElement, 'border', 'horizontal' );
- var borderHeight = self.getExtraDimension( thisGalleryElement, 'border', 'vertical' );
-
- // Take all outer dimensions into account when resizing so that images
- // scale with constant empty space between them
- var outerWidth = thisGalleryElement.data( 'original-width' ) + paddingWidth + borderWidth + marginWidth;
- var outerHeight = thisGalleryElement.data( 'original-height' ) + paddingHeight + borderHeight + marginHeight;
-
- // Subtract margins so that images don't overflow on small browser windows
- thisGalleryElement
- .width( Math.floor( resizeRatio * outerWidth ) - marginWidth )
- .height( Math.floor( resizeRatio * outerHeight ) - marginHeight );
- } );
- };
-
- /**
- * Resizing logic
- */
-
- var requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
-
- function attachResizeInAnimationFrames( tiledGalleries ) {
- var resizing = false;
- var resizeTimeout = null;
-
- function handleFrame() {
- tiledGalleries.resizeAll();
- if ( resizing ) {
- requestAnimationFrame( handleFrame );
- }
- }
-
- $( window ).resize( function() {
- clearTimeout( resizeTimeout );
-
- if ( ! resizing ) {
- requestAnimationFrame( handleFrame );
- }
- resizing = true;
- resizeTimeout = setTimeout( function() {
- resizing = false;
- }, 15 );
- } );
- }
-
- function attachPlainResize( tiledGalleries ) {
- $( window ).resize( function() {
- tiledGalleries.resizeAll();
- } );
- }
-
- /**
- * Ready, set...
- */
-
- $( document ).ready( function() {
- var tiledGalleries = new TiledGalleryCollection();
-
- $( 'body' ).on( 'post-load', function( e, maybeResize ) {
- if ( 'string' === typeof maybeResize && 'resize' === maybeResize ) {
- tiledGalleries.resizeAll();
- } else {
- tiledGalleries.findAndSetupNewGalleries();
- }
- } );
- $( document ).on( 'page-rendered.wpcom-newdash', function() {
- tiledGalleries.findAndSetupNewGalleries();
- } );
-
- // Chrome is a unique snow flake and will start lagging on occasion
- // It helps if we only resize on animation frames
- //
- // For other browsers it seems like there is no lag even if we resize every
- // time there is an event
- if ( window.chrome && requestAnimationFrame ) {
- attachResizeInAnimationFrames( tiledGalleries );
- } else {
- attachPlainResize( tiledGalleries );
- }
-
- if ( 'undefined' !== typeof wp && wp.customize && wp.customize.selectiveRefresh ) {
- wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function( placement ) {
- if ( wp.isJetpackWidgetPlaced( placement, 'gallery' ) ) {
- tiledGalleries.findAndSetupNewGalleries();
- }
- } );
- }
- });
-
-})(jQuery);
diff --git a/plugins/jetpack/modules/tonesque.php b/plugins/jetpack/modules/tonesque.php
deleted file mode 100644
index 88c13090..00000000
--- a/plugins/jetpack/modules/tonesque.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Deprecated. No longer needed.
- *
- * @package Jetpack
- */
diff --git a/plugins/jetpack/modules/vaultpress.php b/plugins/jetpack/modules/vaultpress.php
deleted file mode 100644
index 656af6ef..00000000
--- a/plugins/jetpack/modules/vaultpress.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-/**
- * Module Name: Backups and Scanning
- * Module Description: Protect your site with daily or real-time backups and automated virus scanning and threat detection.
- * First Introduced: 0:1.2
- * Sort Order: 32
- * Deactivate: false
- * Free: false
- * Requires Connection: Yes
- * Auto Activate: Yes
- * Feature: Security, Health
- * Additional Search Queries: backup, cloud backup, database backup, restore, wordpress backup, backup plugin, wordpress backup plugin, back up, backup wordpress, backwpup, vaultpress, backups, off-site backups, offsite backup, offsite, off-site, antivirus, malware scanner, security, virus, viruses, prevent viruses, scan, anti-virus, antimalware, protection, safe browsing, malware, wp security, wordpress security
- * Plans: personal, business, premium
- */
-
-add_action( 'jetpack_modules_loaded', 'vaultpress_jetpack_stub' );
-
-function vaultpress_jetpack_stub() {
- if ( class_exists( 'VaultPress' ) || function_exists( 'vaultpress_contact_service' ) ) {
- Jetpack::enable_module_configurable( __FILE__ );
- Jetpack::module_configuration_load( __FILE__, 'vaultpress_jetpack_configure' );
- add_filter( 'jetpack_module_free_text_vaultpress', 'vaultpress_jetpack_module_free_text' );
- }
-}
-
-function vaultpress_jetpack_module_free_text() {
- return __( 'Active', 'jetpack' );
-}
-
-function vaultpress_jetpack_configure() {
- wp_safe_redirect( menu_page_url( 'vaultpress', false ) );
- exit;
-}
diff --git a/plugins/jetpack/modules/verification-tools.php b/plugins/jetpack/modules/verification-tools.php
deleted file mode 100644
index c9eb9b7d..00000000
--- a/plugins/jetpack/modules/verification-tools.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-/**
- * Module Name: Site verification
- * Module Description: Establish your site's authenticity with external services.
- * First Introduced: 3.0
- * Sort Order: 33
- * Requires Connection: No
- * Auto Activate: Yes
- * Feature: Engagement
- * Additional Search Queries: webmaster, seo, google, bing, pinterest, search, console
- */
-
-function jetpack_load_verification_tools() {
- include dirname( __FILE__ ) . "/verification-tools/blog-verification-tools.php";
-}
-
-function jetpack_verification_tools_loaded() {
- Jetpack::enable_module_configurable( __FILE__ );
- Jetpack::module_configuration_load( __FILE__, 'jetpack_verification_tools_configuration_load' );
-}
-add_action( 'jetpack_modules_loaded', 'jetpack_verification_tools_loaded' );
-
-function jetpack_verification_tools_configuration_load() {
- wp_safe_redirect( admin_url( 'tools.php' ) );
- exit;
-}
-
-jetpack_load_verification_tools();
diff --git a/plugins/jetpack/modules/verification-tools/blog-verification-tools.php b/plugins/jetpack/modules/verification-tools/blog-verification-tools.php
deleted file mode 100644
index 593e80c5..00000000
--- a/plugins/jetpack/modules/verification-tools/blog-verification-tools.php
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-
-// Edit here to add new services
-function jetpack_verification_services() {
- return array(
- 'google' => array(
- 'name' => 'Google Search Console',
- 'key' => 'google-site-verification',
- 'format' => 'dBw5CvburAxi537Rp9qi5uG2174Vb6JwHwIRwPSLIK8',
- 'url' => 'https://www.google.com/webmasters/tools/',
- ),
- 'bing' => array(
- 'name' => 'Bing Webmaster Center',
- 'key' => 'msvalidate.01',
- 'format' => '12C1203B5086AECE94EB3A3D9830B2E',
- 'url' => 'http://www.bing.com/webmaster/',
- ),
- 'pinterest' => array(
- 'name' => 'Pinterest Site Verification',
- 'key' => 'p:domain_verify',
- 'format' => 'f100679e6048d45e4a0b0b92dce1efce',
- 'url' => 'https://pinterest.com/website/verify/',
- ),
- 'yandex' => array(
- 'name' => 'Yandex.Webmaster',
- 'key' => 'yandex-verification',
- 'format' => '44d68e1216009f40',
- 'url' => 'https://webmaster.yandex.com/sites/',
- ),
- );
-}
-
-function jetpack_verification_options_init() {
- register_setting(
- 'verification_services_codes_fields',
- 'verification_services_codes',
- array( 'sanitize_callback' => 'jetpack_verification_validate' )
- );
-}
-add_action( 'admin_init', 'jetpack_verification_options_init' );
-add_action( 'rest_api_init', 'jetpack_verification_options_init' );
-
-function jetpack_verification_print_meta() {
- $verification_services_codes = Jetpack_Options::get_option_and_ensure_autoload( 'verification_services_codes', '0' );
- if ( is_array( $verification_services_codes ) ) {
- $ver_output = "<!-- Jetpack Site Verification Tags -->\n";
- foreach ( jetpack_verification_services() as $name => $service ) {
- if ( is_array( $service ) && ! empty( $verification_services_codes[ "$name" ] ) ) {
- if ( preg_match( '#^<meta name="([a-z0-9_\-.:]+)?" content="([a-z0-9_-]+)?" />$#i', $verification_services_codes[ "$name" ], $matches ) ) {
- $verification_code = $matches[2];
- } else {
- $verification_code = $verification_services_codes[ "$name" ];
- }
- $ver_tag = sprintf( '<meta name="%s" content="%s" />', esc_attr( $service['key'] ), esc_attr( $verification_code ) );
- /**
- * Filter the meta tag template used for all verification tools.
- *
- * @module verification-tools
- *
- * @since 3.0.0
- *
- * @param string $ver_tag Verification Tool meta tag.
- */
- $ver_output .= apply_filters( 'jetpack_site_verification_output', $ver_tag );
- $ver_output .= "\n";
- }
- }
- echo $ver_output;
- }
-}
-add_action( 'wp_head', 'jetpack_verification_print_meta', 1 );
-
-function jetpack_verification_tool_box() {
- ?>
- <div class="jp-verification-tools card">
- <h3 class="title"><?php _e( 'Website Verification Services', 'jetpack' ); ?>&nbsp;<a href="https://jetpack.com/support/site-verification-tools/" rel="noopener noreferrer" target="_blank">(?)</a></h3>
- <p>
- <?php printf( __( 'You can verify your site using the <a href="%s">"Site verification" tool in Jetpack Settings</a>.', 'jetpack' ), esc_url( admin_url( 'admin.php?page=jetpack#/traffic' ) ) ); ?>
- </p>
- </div>
- <?php
-}
-
-add_action( 'tool_box', 'jetpack_verification_tool_box', 25 );
diff --git a/plugins/jetpack/modules/verification-tools/verification-tools-utils.php b/plugins/jetpack/modules/verification-tools/verification-tools-utils.php
deleted file mode 100644
index fad2e0c4..00000000
--- a/plugins/jetpack/modules/verification-tools/verification-tools-utils.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-/*
- * Helper functions that are called from API even when module is inactive should be added here.
- * This file will be included in module-extras.php.
- */
-
-function jetpack_verification_validate( $verification_services_codes ) {
- foreach ( $verification_services_codes as $key => $code ) {
- // Parse html meta tag if it does not look like a valid code
- if ( ! preg_match( '/^[a-z0-9_-]+$/i', $code ) ) {
- $code = jetpack_verification_get_code( $code );
- }
-
- $code = esc_attr( trim( $code ) );
-
- // limit length to 100 chars.
- $code = substr( $code, 0, 100 );
-
- /**
- * Fire after each Verification code was validated.
- *
- * @module verification-tools
- *
- * @since 3.0.0
- *
- * @param string $key Verification service name.
- * @param string $code Verification service code provided in field in the Tools menu.
- */
- do_action( 'jetpack_site_verification_validate', $key, $code );
-
- $verification_services_codes[ $key ] = $code;
- }
- return $verification_services_codes;
-}
-
-function jetpack_verification_get_code( $code ) {
- $pattern = '/content=["\']?([^"\' ]*)["\' ]/is';
- preg_match( $pattern, $code, $match );
- if ( $match ) {
- return urldecode( $match[1] );
- } else {
- return false;
- }
-}
diff --git a/plugins/jetpack/modules/videopress.php b/plugins/jetpack/modules/videopress.php
deleted file mode 100644
index 8d272b02..00000000
--- a/plugins/jetpack/modules/videopress.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Module Name: VideoPress
- * Module Description: Save on hosting storage and bandwidth costs by streaming fast, ad-free video from our global network.
- * First Introduced: 2.5
- * Free: false
- * Requires Connection: Yes
- * Sort Order: 27
- * Module Tags: Photos and Videos
- * Feature: Writing
- * Additional Search Queries: video, videos, videopress, video gallery, video player, videoplayer, mobile video, vimeo, youtube, html5 video, stream
- * Plans: business, premium
- */
-
-include_once dirname( __FILE__ ) . '/videopress/shortcode.php';
-include_once dirname( __FILE__ ) . '/videopress/class.videopress-options.php';
-include_once dirname( __FILE__ ) . '/videopress/class.videopress-scheduler.php';
-include_once dirname( __FILE__ ) . '/videopress/class.videopress-xmlrpc.php';
-include_once dirname( __FILE__ ) . '/videopress/class.videopress-cli.php';
-include_once dirname( __FILE__ ) . '/videopress/class.jetpack-videopress.php';
-
-if ( is_admin() ) {
- include_once dirname( __FILE__ ) . '/videopress/editor-media-view.php';
- include_once dirname( __FILE__ ) . '/videopress/class.videopress-edit-attachment.php';
- include_once dirname( __FILE__ ) . '/videopress/class.videopress-ajax.php';
-}
diff --git a/plugins/jetpack/modules/videopress/class.jetpack-videopress.php b/plugins/jetpack/modules/videopress/class.jetpack-videopress.php
deleted file mode 100644
index a1073f05..00000000
--- a/plugins/jetpack/modules/videopress/class.jetpack-videopress.php
+++ /dev/null
@@ -1,340 +0,0 @@
-<?php
-
-/**
- * VideoPress in Jetpack
- */
-class Jetpack_VideoPress {
- /** @var string */
- public $module = 'videopress';
-
- /** @var int */
- public $version = 5;
-
- /**
- * Singleton
- */
- public static function init() {
- static $instance = false;
-
- if ( ! $instance ) {
- $instance = new Jetpack_VideoPress();
- }
-
- return $instance;
- }
-
- /**
- * Jetpack_VideoPress constructor.
- *
- * Sets up the initializer and makes sure that videopress activates and deactivates properly.
- */
- private function __construct() {
- // $this->version = time(); // <s>ghost</s> cache busters!
- add_action( 'init', array( $this, 'on_init' ) );
- add_action( 'jetpack_deactivate_module_videopress', array( $this, 'jetpack_module_deactivated' ) );
- }
-
- /**
- * Fires on init
- */
- public function on_init() {
- add_action( 'wp_enqueue_media', array( $this, 'enqueue_admin_scripts' ) );
- add_filter( 'plupload_default_settings', array( $this, 'videopress_pluploder_config' ) );
- add_filter( 'wp_get_attachment_url', array( $this, 'update_attachment_url_for_videopress' ), 10, 2 );
-
- if ( Jetpack_Plan::supports( 'videopress' ) ) {
- add_filter( 'upload_mimes', array( $this, 'add_video_upload_mimes' ), 999 );
- }
-
- add_action( 'admin_print_footer_scripts', array( $this, 'print_in_footer_open_media_add_new' ) );
- add_action( 'admin_head', array( $this, 'enqueue_admin_styles' ) );
-
- add_filter( 'wp_mime_type_icon', array( $this, 'wp_mime_type_icon' ), 10, 3 );
-
- add_filter( 'wp_video_extensions', array( $this, 'add_videopress_extenstion' ) );
-
- VideoPress_Scheduler::init();
- VideoPress_XMLRPC::init();
- }
-
- /**
- * Runs when the VideoPress module is deactivated.
- */
- public function jetpack_module_deactivated() {
- VideoPress_Options::delete_options();
- }
-
- /**
- * A can of coke
- *
- * Similar to current_user_can, but internal to VideoPress. Returns
- * true if the given VideoPress capability is allowed by the given user.
- */
- public function can( $cap, $user_id = false ) {
- if ( ! $user_id ) {
- $user_id = get_current_user_id();
- }
-
- // Connection owners are allowed to do all the things.
- if ( $this->is_connection_owner( $user_id ) ) {
- return true;
- }
-
- // Additional and internal caps checks
- if ( ! user_can( $user_id, 'upload_files' ) ) {
- return false;
- }
-
- if ( 'edit_videos' == $cap && ! user_can( $user_id, 'edit_others_posts' ) ) {
- return false;
- }
-
- if ( 'delete_videos' == $cap && ! user_can( $user_id, 'delete_others_posts' ) ) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Returns true if the provided user is the Jetpack connection owner.
- */
- public function is_connection_owner( $user_id = false ) {
- if ( ! $user_id ) {
- $user_id = get_current_user_id();
- }
-
- $user_token = Jetpack_Data::get_access_token( JETPACK_MASTER_USER );
-
- return $user_token && is_object( $user_token ) && isset( $user_token->external_user_id ) && $user_id === $user_token->external_user_id;
- }
-
- /**
- * Register and enqueue VideoPress admin styles.
- */
- public function enqueue_admin_styles() {
- wp_register_style( 'videopress-admin', plugins_url( 'videopress-admin.css', __FILE__ ), array(), $this->version );
- wp_enqueue_style( 'videopress-admin' );
- }
-
- /**
- * Register VideoPress admin scripts.
- */
- public function enqueue_admin_scripts() {
- if ( did_action( 'videopress_enqueue_admin_scripts' ) ) {
- return;
- }
-
- if ( $this->should_override_media_uploader() ) {
- wp_enqueue_script(
- 'videopress-plupload',
- Jetpack::get_file_url_for_environment(
- '_inc/build/videopress/js/videopress-plupload.min.js',
- 'modules/videopress/js/videopress-plupload.js'
- ),
- array(
- 'jquery',
- 'wp-plupload',
- ),
- $this->version
- );
-
- wp_enqueue_script(
- 'videopress-uploader',
- Jetpack::get_file_url_for_environment(
- '_inc/build/videopress/js/videopress-uploader.min.js',
- 'modules/videopress/js/videopress-uploader.js'
- ),
- array(
- 'videopress-plupload',
- ),
- $this->version
- );
-
- wp_enqueue_script(
- 'media-video-widget-extensions',
- Jetpack::get_file_url_for_environment(
- '_inc/build/videopress/js/media-video-widget-extensions.min.js',
- 'modules/videopress/js/media-video-widget-extensions.js'
- ),
- array(),
- $this->version,
- true
- );
- }
-
- /**
- * Fires after VideoPress scripts are enqueued in the dashboard.
- *
- * @since 2.5.0
- */
- do_action( 'videopress_enqueue_admin_scripts' );
- }
-
- /**
- * An override for the attachment url, which returns back the WPCOM VideoPress processed url.
- *
- * This is an action proxy to the videopress_get_attachment_url() utility function.
- *
- * @param string $url
- * @param int $post_id
- *
- * @return string
- */
- public function update_attachment_url_for_videopress( $url, $post_id ) {
- if ( $videopress_url = videopress_get_attachment_url( $post_id ) ) {
- return $videopress_url;
- }
-
- return $url;
- }
-
- /**
- * Modify the default plupload config to turn on videopress specific filters.
- */
- public function videopress_pluploder_config( $config ) {
-
- if ( ! isset( $config['filters']['max_file_size'] ) ) {
- $config['filters']['max_file_size'] = wp_max_upload_size() . 'b';
- }
-
- $config['filters']['videopress_check_uploads'] = $config['filters']['max_file_size'];
-
- // We're doing our own check in the videopress_check_uploads filter.
- unset( $config['filters']['max_file_size'] );
-
- return $config;
- }
-
-
- /**
- * Helper function to determine if the media uploader should be overridden.
- *
- * The rules are simple, only try to load the script when on the edit post or new post pages.
- *
- * @return bool
- */
- protected function should_override_media_uploader() {
- global $pagenow;
-
- // Only load in the admin
- if ( ! is_admin() ) {
- return false;
- }
-
- $acceptable_pages = array(
- 'post-new.php',
- 'post.php',
- 'upload.php',
- 'customize.php',
- );
-
- // Only load on the post, new post, or upload pages.
- if ( ! in_array( $pagenow, $acceptable_pages ) ) {
- return false;
- }
-
- $options = VideoPress_Options::get_options();
-
- return $options['shadow_blog_id'] > 0;
- }
-
- /**
- * A work-around / hack to make it possible to go to the media library with the add new box open.
- *
- * @return bool
- */
- public function print_in_footer_open_media_add_new() {
- global $pagenow;
-
- // Only load in the admin
- if ( ! is_admin() ) {
- return false;
- }
-
- if ( $pagenow !== 'upload.php' ) {
- return false;
- }
-
- if ( ! isset( $_GET['action'] ) || $_GET['action'] !== 'add-new' ) {
- return false;
- }
-
- ?>
- <script type="text/javascript">
- ( function( $ ) {
- window.setTimeout( function() {
- $('#wp-media-grid .page-title-action').click();
- }, 500 );
-
- }( jQuery ) );
- </script>
- <?php
- }
-
- /**
- * Makes sure that all video mimes are added in, as multi site installs can remove them.
- *
- * @param array $existing_mimes
- * @return array
- */
- public function add_video_upload_mimes( $existing_mimes = array() ) {
- $mime_types = wp_get_mime_types();
- $video_types = array_filter( $mime_types, array( $this, 'filter_video_mimes' ) );
-
- foreach ( $video_types as $key => $value ) {
- $existing_mimes[ $key ] = $value;
- }
-
- // Make sure that videopress mimes are considered videos.
- $existing_mimes['videopress'] = 'video/videopress';
-
- return $existing_mimes;
- }
-
- /**
- * Filter designed to get rid of non video mime types.
- *
- * @param string $value
- * @return int
- */
- public function filter_video_mimes( $value ) {
- return preg_match( '@^video/@', $value );
- }
-
- /**
- * @param string $icon
- * @param string $mime
- * @param int $post_id
- *
- * @return string
- */
- public function wp_mime_type_icon( $icon, $mime, $post_id ) {
-
- if ( $mime !== 'video/videopress' ) {
- return $icon;
- }
-
- $status = get_post_meta( $post_id, 'videopress_status', true );
-
- if ( $status === 'complete' ) {
- return $icon;
- }
-
- return 'https://wordpress.com/wp-content/mu-plugins/videopress/images/media-video-processing-icon.png';
- }
-
- /**
- * @param array $extensions
- *
- * @return array
- */
- public function add_videopress_extenstion( $extensions ) {
- $extensions[] = 'videopress';
-
- return $extensions;
- }
-}
-
-// Initialize the module.
-Jetpack_VideoPress::init();
diff --git a/plugins/jetpack/modules/videopress/class.videopress-ajax.php b/plugins/jetpack/modules/videopress/class.videopress-ajax.php
deleted file mode 100644
index e1943c0b..00000000
--- a/plugins/jetpack/modules/videopress/class.videopress-ajax.php
+++ /dev/null
@@ -1,103 +0,0 @@
-<?php
-
-class VideoPress_AJAX {
-
- /**
- * @var VideoPress_AJAX
- **/
- private static $instance = null;
-
- /**
- * Private VideoPress_AJAX constructor.
- *
- * Use the VideoPress_AJAX::init() method to get an instance.
- */
- private function __construct() {
- add_action( 'wp_ajax_videopress-get-upload-token', array( $this, 'wp_ajax_videopress_get_upload_token' ) );
-
- add_action(
- 'wp_ajax_videopress-update-transcoding-status',
- array(
- $this,
- 'wp_ajax_update_transcoding_status',
- ),
- -1
- );
- }
-
- /**
- * Initialize the VideoPress_AJAX and get back a singleton instance.
- *
- * @return VideoPress_AJAX
- */
- public static function init() {
- if ( is_null( self::$instance ) ) {
- self::$instance = new VideoPress_AJAX();
- }
-
- return self::$instance;
- }
-
- /**
- * Ajax method that is used by the VideoPress uploader to get a token to upload a file to the wpcom api.
- *
- * @return void
- */
- public function wp_ajax_videopress_get_upload_token() {
-
- $options = VideoPress_Options::get_options();
-
- $args = array(
- 'method' => 'POST',
- // 'sslverify' => false,
- );
-
- $endpoint = "sites/{$options['shadow_blog_id']}/media/token";
- $result = Jetpack_Client::wpcom_json_api_request_as_blog( $endpoint, Jetpack_Client::WPCOM_JSON_API_VERSION, $args );
-
- if ( is_wp_error( $result ) ) {
- wp_send_json_error( array( 'message' => __( 'Could not obtain a VideoPress upload token. Please try again later.', 'jetpack' ) ) );
- return;
- }
-
- $response = json_decode( $result['body'], true );
-
- if ( empty( $response['upload_token'] ) ) {
- wp_send_json_error( array( 'message' => __( 'Could not obtain a VideoPress upload token. Please try again later.', 'jetpack' ) ) );
- return;
- }
-
- $response['upload_action_url'] = videopress_make_media_upload_path( $options['shadow_blog_id'] );
-
- wp_send_json_success( $response );
- }
-
- /**
- * Ajax action to update the video transcoding status from the WPCOM API.
- *
- * @return void
- */
- public function wp_ajax_update_transcoding_status() {
- if ( ! isset( $_POST['post_id'] ) ) {
- wp_send_json_error( array( 'message' => __( 'A valid post_id is required.', 'jetpack' ) ) );
- return;
- }
-
- $post_id = (int) $_POST['post_id'];
-
- if ( ! videopress_update_meta_data( $post_id ) ) {
- wp_send_json_error( array( 'message' => __( 'That post does not have a VideoPress video associated to it.', 'jetpack' ) ) );
- return;
- }
-
- wp_send_json_success(
- array(
- 'message' => __( 'Status updated', 'jetpack' ),
- 'status' => videopress_get_transcoding_status( $post_id ),
- )
- );
- }
-}
-
-// Let's start this thing up.
-VideoPress_AJAX::init();
diff --git a/plugins/jetpack/modules/videopress/class.videopress-cli.php b/plugins/jetpack/modules/videopress/class.videopress-cli.php
deleted file mode 100644
index e1200da0..00000000
--- a/plugins/jetpack/modules/videopress/class.videopress-cli.php
+++ /dev/null
@@ -1,167 +0,0 @@
-<?php
-
-if ( defined( 'WP_CLI' ) && WP_CLI ) {
-
- /**
- * VideoPress command line utilities.
- */
- class VideoPress_CLI extends WP_CLI_Command {
- /**
- * Import a VideoPress Video
- *
- * ## OPTIONS
- *
- * <guid>: Import the video with the specified guid
- *
- * ## EXAMPLES
- *
- * wp videopress import kUJmAcSf
- */
- public function import( $args ) {
- $guid = $args[0];
- $attachment_id = create_local_media_library_for_videopress_guid( $guid );
- if ( $attachment_id && ! is_wp_error( $attachment_id ) ) {
- WP_CLI::success( sprintf( __( 'The video has been imported as Attachment ID %d', 'jetpack' ), $attachment_id ) );
- } else {
- WP_CLI::error( __( 'An error has been encountered.', 'jetpack' ) );
- }
- }
-
- /**
- * Manually runs the job to cleanup videos from the media library that failed during the upload process.
- *
- * ## EXAMPLES
- *
- * wp videopress cleanup_videos
- */
- public function cleanup_videos() {
- $num_cleaned = videopress_cleanup_media_library();
-
- WP_CLI::success( sprintf( _n( 'Cleaned up %d video.', 'Cleaned up a total of %d videos.', $num_cleaned, 'jetpack' ), $num_cleaned ) );
- }
-
- /**
- * List out all of the crons that can be run.
- *
- * ## EXAMPLES
- *
- * wp videopress list_crons
- */
- public function list_crons() {
-
- $scheduler = VideoPress_Scheduler::init();
- $crons = $scheduler->get_crons();
-
- $schedules = wp_get_schedules();
-
- if ( count( $crons ) === 0 ) {
- WP_CLI::success( __( 'Found no available cron jobs.', 'jetpack' ) );
-
- } else {
- WP_CLI::success( sprintf( _n( 'Found %d available cron job.', 'Found %d available cron jobs.', count( $crons ), 'jetpack' ), count( $crons ) ) );
- }
-
- foreach ( $crons as $cron_name => $cron ) {
- $interval = isset( $schedules[ $cron['interval'] ]['display'] ) ? $schedules[ $cron['interval'] ]['display'] : $cron['interval'];
- $runs_next = $scheduler->check_cron( $cron_name );
- $status = $runs_next ? sprintf( 'Scheduled - Runs Next at %s GMT', gmdate( 'Y-m-d H:i:s', $runs_next ) ) : 'Not Scheduled';
-
- WP_CLI::log( 'Name: ' . $cron_name );
- WP_CLI::log( 'Method: ' . $cron['method'] );
- WP_CLI::log( 'Interval: ' . $interval );
- WP_CLI::log( 'Status: ' . $status );
- }
- }
-
- /**
- * Checks for the current status of a cron job.
- *
- * ## OPTIONS
- *
- * <cron_name>: The name of the cron job to check
- *
- * ## EXAMPLES
- *
- * wp videopress cron_status cleanup
- */
- public function cron_status( $args ) {
-
- if ( ! isset( $args[0] ) ) {
- return WP_CLI::error( __( 'You need to provide the name of the cronjob to schedule.', 'jetpack' ) );
- }
-
- $scheduler = VideoPress_Scheduler::init();
-
- if ( ! $scheduler->is_cron_valid( $args[0] ) ) {
- return WP_CLI::error( sprintf( __( 'There is no cron named %s.', 'jetpack' ), $args[0] ) );
- }
-
- $time = $scheduler->check_cron( $args[0] );
-
- if ( ! $time ) {
- WP_CLI::success( __( 'The cron is not scheduled to run.', 'jetpack' ) );
-
- } else {
- WP_CLI::success( sprintf( __( 'Cron will run at: %s GMT', 'jetpack' ), gmdate( 'Y-m-d H:i:s', $time ) ) );
- }
- }
-
- /**
- * Actives the given cron job
- *
- * ## OPTIONS
- *
- * <cron_name>: The name of the cron job to check
- *
- * ## EXAMPLES
- *
- * wp videopress activate_cron cleanup
- */
- public function activate_cron( $args ) {
-
- if ( ! isset( $args[0] ) ) {
- WP_CLI::error( __( 'You need to provide the name of the cronjob to schedule.', 'jetpack' ) );
- }
-
- $scheduler = VideoPress_Scheduler::init();
-
- if ( ! $scheduler->is_cron_valid( $args[0] ) ) {
- return WP_CLI::error( sprintf( __( 'There is no cron named %s.', 'jetpack' ), $args[0] ) );
- }
-
- $scheduler->activate_cron( $args[0] );
-
- WP_CLI::success( sprintf( __( 'The cron named `%s` was scheduled.', 'jetpack' ), $args[0] ) );
- }
-
- /**
- * Actives the given cron job
- *
- * ## OPTIONS
- *
- * <cron_name>: The name of the cron job to check
- *
- * ## EXAMPLES
- *
- * wp videopress deactivate_cron cleanup
- */
- public function deactivate_cron( $args ) {
-
- if ( ! isset( $args[0] ) ) {
- WP_CLI::error( __( 'You need to provide the name of the cronjob to schedule.', 'jetpack' ) );
- }
-
- $scheduler = VideoPress_Scheduler::init();
-
- if ( ! $scheduler->is_cron_valid( $args[0] ) ) {
- return WP_CLI::error( sprintf( __( 'There is no cron named %s.', 'jetpack' ), $args[0] ) );
- }
-
- $scheduler->deactivate_cron( $args[0] );
-
- WP_CLI::success( sprintf( __( 'The cron named `%s` was removed from the schedule.', 'jetpack' ), $args[0] ) );
- }
- }
-
- WP_CLI::add_command( 'videopress', 'VideoPress_CLI' );
-}
diff --git a/plugins/jetpack/modules/videopress/class.videopress-edit-attachment.php b/plugins/jetpack/modules/videopress/class.videopress-edit-attachment.php
deleted file mode 100644
index be7ddfde..00000000
--- a/plugins/jetpack/modules/videopress/class.videopress-edit-attachment.php
+++ /dev/null
@@ -1,388 +0,0 @@
-<?php
-/**
- * VideoPress edit attachment screen
- *
- * @since 4.1
- */
-class VideoPress_Edit_Attachment {
-
- /**
- * Singleton method to initialize the object only once.
- *
- * @return VideoPress_Edit_Attachment
- */
- public static function init() {
- static $instance = null;
-
- if ( ! $instance ) {
- $instance = new VideoPress_Edit_Attachment();
- }
-
- return $instance;
- }
-
- /**
- * VideoPress_Edit_Attachment constructor.
- *
- * Adds in appropriate actions for attachment fields editor, meta boxes and saving.
- */
- public function __construct() {
- add_filter( 'attachment_fields_to_edit', array( $this, 'fields_to_edit' ), 10, 2 );
- add_filter( 'attachment_fields_to_save', array( $this, 'save_fields' ), 10, 2 );
- add_filter( 'wp_ajax_save-attachment', array( $this, 'save_fields' ), -1 );
- add_filter( 'wp_ajax_save-attachment-compat', array( $this, 'save_fields' ), -1 );
-
- add_action( 'add_meta_boxes', array( $this, 'configure_meta_boxes' ), 10, 2 );
- }
-
- /**
- * @param string $post_type
- * @param object $post
- */
- public function configure_meta_boxes( $post_type = 'unknown', $post = null ) {
- if ( null == $post ) {
- $post = (object) array( 'ID' => 0 );
- }
-
- if ( 'attachment' != $post_type ) {
- return;
- }
-
- // If this has not been processed by videopress, we can skip the rest.
- if ( ! is_videopress_attachment( $post->ID ) ) {
- return;
- }
-
- add_meta_box( 'videopress-media-info', __( 'VideoPress Information', 'jetpack' ), array( $this, 'videopress_information_box' ), 'attachment', 'side', 'core' );
- }
-
- /**
- * @param array $post
- * @param array|null $attachment
- *
- * @return array
- */
- public function save_fields( $post, $attachment = null ) {
- if ( $attachment === null && isset( $_POST['attachment'] ) ) {
- $attachment = $_POST['attachment'];
- }
-
- if ( ! isset( $attachment['is_videopress_attachment'] ) || $attachment['is_videopress_attachment'] !== 'yes' ) {
- return $post;
- }
-
- $post_id = absint( $post['ID'] );
-
- $meta = wp_get_attachment_metadata( $post_id );
-
- // If this has not been processed by videopress, we can skip the rest.
- if ( ! is_videopress_attachment( $post['ID'] ) ) {
- return $post;
- }
-
- $values = array();
-
- // Add the video title & description in, so that we save it properly.
- if ( isset( $_POST['post_title'] ) ) {
- $values['title'] = trim( strip_tags( $_POST['post_title'] ) );
- }
-
- if ( isset( $_POST['post_excerpt'] ) ) {
- $values['description'] = trim( strip_tags( $_POST['post_excerpt'] ) );
- }
-
- if ( isset( $attachment['rating'] ) ) {
- $rating = $attachment['rating'];
-
- if ( ! empty( $rating ) && in_array( $rating, array( 'G', 'PG-13', 'R-17', 'X-18' ) ) ) {
- $values['rating'] = $rating;
- }
- }
-
- // We set a default here, as if it isn't selected, then we'll turn it off.
- $values['display_embed'] = 0;
- if ( isset( $attachment['display_embed'] ) ) {
- $display_embed = $attachment['display_embed'];
-
- $values['display_embed'] = 'on' === $display_embed ? 1 : 0;
- }
-
- $args = array(
- 'method' => 'POST',
- );
-
- $guid = get_post_meta( $post_id, 'videopress_guid', true );
-
- $endpoint = "videos/{$guid}";
- $result = Jetpack_Client::wpcom_json_api_request_as_blog( $endpoint, Jetpack_Client::WPCOM_JSON_API_VERSION, $args, $values );
-
- if ( is_wp_error( $result ) ) {
- $post['errors']['videopress']['errors'][] = __( 'There was an issue saving your updates to the VideoPress service. Please try again later.', 'jetpack' );
- return $post;
- }
-
- if ( isset( $values['display_embed'] ) ) {
- $meta['videopress']['display_embed'] = $values['display_embed'];
- }
-
- if ( isset( $values['rating'] ) ) {
- $meta['videopress']['rating'] = $values['rating'];
- }
-
- wp_update_attachment_metadata( $post_id, $meta );
-
- $response = json_decode( $result['body'], true );
-
- if ( 'true' !== $response ) {
- return $post;
- }
-
- return $post;
- }
-
-
- /**
- * Get the upload api path.
- *
- * @param string $guid
- * @return string
- */
- public function make_video_api_path( $guid ) {
- return sprintf(
- '%s://%s/rest/v%s/videos/%s',
- 'https',
- 'public-api.wordpress.com', // JETPACK__WPCOM_JSON_API_HOST,
- Jetpack_Client::WPCOM_JSON_API_VERSION,
- $guid
- );
- }
-
-
- /**
- * Creates an array of video fields to edit based on transcoded videos.
- *
- * @param array $fields video fields of interest
- * @param stdClass $post post object
- * @return array modified version of video fields for administrative interface display
- */
- public function fields_to_edit( $fields, $post ) {
- $post_id = absint( $post->ID );
-
- $meta = wp_get_attachment_metadata( $post_id );
-
- // If this has not been processed by videopress, we can skip the rest.
- if ( ! is_videopress_attachment( $post_id ) || ! isset( $meta['videopress'] ) ) {
- return $fields;
- }
-
- $info = (object) $meta['videopress'];
- $file_statuses = isset( $meta['file_statuses'] ) ? $meta['file_statuses'] : array();
-
- $guid = get_post_meta( $post_id, 'videopress_guid', true );
-
- unset( $fields['url'] );
- unset( $fields['post_content'] );
-
- if ( isset( $file_statuses['ogg'] ) && 'done' === $file_statuses['ogg'] ) {
- $v_name = preg_replace( '/\.\w+/', '', basename( $info->path ) );
- $video_name = $v_name . '_fmt1.ogv';
- $ogg_url = videopress_cdn_file_url( $guid, $video_name );
-
- $fields['video-ogg'] = array(
- 'label' => __( 'Ogg File URL', 'jetpack' ),
- 'input' => 'html',
- 'html' => "<input type='text' class='urlfield' readonly='readonly' name='attachments[$post_id][oggurl]' value='" . esc_url( $ogg_url, array( 'http', 'https' ) ) . "' />",
- 'helps' => __( 'Location of the Ogg video file.', 'jetpack' ),
- );
- }
-
- $fields['post_title']['helps'] = __( 'Title will appear on the first frame of your video', 'jetpack' );
-
- $fields['post_excerpt']['label'] = _x( 'Description', 'A header for the short description display', 'jetpack' );
- $fields['post_excerpt']['input'] = 'textarea';
- $fields['post_excerpt']['value'] = $info->description;
-
- $fields['is_videopress_attachment'] = array(
- 'input' => 'hidden',
- 'value' => 'yes',
- );
-
- $fields['videopress_shortcode'] = array(
- 'label' => _x( 'Shortcode', 'A header for the shortcode display', 'jetpack' ),
- 'input' => 'html',
- 'html' => "<input type=\"text\" name=\"videopress_shortcode\" value=\"[videopress {$guid}]\" readonly=\"readonly\"/>",
- 'show_in_modal' => true,
- 'show_in_edit' => false,
- );
-
- $fields['display_embed'] = array(
- 'label' => _x( 'Share', 'A header for the video sharing options area', 'jetpack' ),
- 'input' => 'html',
- 'html' => $this->display_embed_choice( $info ),
- );
-
- $fields['video-rating'] = array(
- 'label' => _x( 'Rating', 'A header for the video rating area', 'jetpack' ),
- 'input' => 'html',
- 'html' => $this->display_rating( $info ),
- );
-
- return $fields;
- }
-
- /**
- * @param stdClass $post
- */
- public function videopress_information_box( $post ) {
- $post_id = absint( $post->ID );
-
- $meta = wp_get_attachment_metadata( $post_id );
- $guid = get_post_meta( $post_id, 'videopress_guid', true );
-
- // If this has not been processed by videopress, we can skip the rest.
- if ( ! is_videopress_attachment( $post_id ) ) {
- return;
- }
-
- $info = (object) $meta['videopress'];
-
- $status = videopress_get_transcoding_status( $post_id );
-
- $formats = array(
- 'std_mp4' => 'Standard MP4',
- 'std_ogg' => 'OGG Vorbis',
- 'dvd_mp4' => 'DVD',
- 'hd_mp4' => 'High Definition',
- );
-
- $embed = "[videopress {$guid}]";
-
- $shortcode = '<input type="text" id="plugin-embed" readonly="readonly" style="width:180px;" value="' . esc_attr( $embed ) . '" onclick="this.focus();this.select();" />';
-
- $trans_status = '';
- $all_trans_done = true;
- foreach ( $formats as $status_key => $name ) {
- if ( 'DONE' !== $status[ $status_key ] ) {
- $all_trans_done = false;
- }
-
- $trans_status .= '- <strong>' . $name . ":</strong> <span id=\"status_$status_key\">" . ( 'DONE' === $status[ $status_key ] ? 'Done' : 'Processing' ) . '</span><br>';
- }
-
- $nonce = wp_create_nonce( 'videopress-update-transcoding-status' );
-
- $url = 'empty';
- if ( ! empty( $guid ) ) {
- $url = videopress_build_url( $guid );
- $url = "<a href=\"{$url}\">{$url}</a>";
- }
-
- $poster = '<em>Still Processing</em>';
- if ( ! empty( $info->poster ) ) {
- $poster = "<br><img src=\"{$info->poster}\" width=\"175px\">";
- }
-
- $status_update = '';
- if ( ! $all_trans_done ) {
- $status_update = ' (<a href="javascript:;" id="videopress-update-transcoding-status">update</a>)';
- }
-
- $html = <<< HTML
-
-<div class="misc-pub-section misc-pub-shortcode">
- <strong>Shortcode</strong><br>
- {$shortcode}
-</div>
-<div class="misc-pub-section misc-pub-url">
- <strong>Url</strong>
- {$url}
-</div>
-<div class="misc-pub-section misc-pub-poster">
- <strong>Poster</strong>
- {$poster}
-</div>
-<div class="misc-pub-section misc-pub-status">
- <strong>Transcoding Status$status_update:</strong>
- <div id="videopress-transcoding-status">{$trans_status}</div>
-</div>
-
-
-
-<script>
- jQuery( function($) {
- $( '#videopress-update-transcoding-status' ).on( "click", function() {
- jQuery.ajax( {
- type: 'post',
- url: 'admin-ajax.php',
- data: {
- action: 'videopress-update-transcoding-status',
- post_id: '{$post_id}',
- _ajax_nonce: '{$nonce}'
- },
- complete: function( response ) {
- if ( 200 === response.status ) {
- var statuses = response.responseJSON.data.status;
-
- for (var key in statuses) {
- $('#status_' + key).text( 'DONE' === statuses[key] ? 'Done' : 'Processing' );
- }
- }
- }
- });
- } );
- } );
-</script>
-HTML;
-
- echo $html;
- }
-
- /**
- * Build HTML to display a form checkbox for embedcode display preference
- *
- * @param object $info database row from the videos table
- * @return string input element of type checkbox set to checked state based on stored embed preference
- */
- protected function display_embed_choice( $info ) {
- $id = "attachments-{$info->post_id}-displayembed";
- $out = "<label for='$id'><input type='checkbox' name='attachments[{$info->post_id}][display_embed]' id='$id'";
- if ( $info->display_embed ) {
- $out .= ' checked="checked"';
- }
- $out .= ' />' . __( 'Display share menu and allow viewers to embed or download this video', 'jetpack' ) . '</label>';
- return $out;
- }
-
- /**
- * Build HTML to display a form input radio button for video ratings
- *
- * @param object $info database row from the videos table
- * @return string input elements of type radio with existing stored value selected
- */
- protected function display_rating( $info ) {
- $out = '';
-
- $ratings = array(
- 'G' => 'G',
- 'PG-13' => 'PG-13',
- 'R-17' => 'R',
- 'X-18' => 'X',
- );
-
- foreach ( $ratings as $r => $label ) {
- $id = "attachments-{$info->post_id}-rating-$r";
- $out .= "<label for=\"$id\"><input type=\"radio\" name=\"attachments[{$info->post_id}][rating]\" id=\"$id\" value=\"$r\"";
- if ( $info->rating == $r ) {
- $out .= ' checked="checked"';
- }
-
- $out .= " />$label</label>";
- unset( $id );
- }
-
- return $out;
- }
-}
-
-// Let's start this thing up.
-VideoPress_Edit_Attachment::init();
diff --git a/plugins/jetpack/modules/videopress/class.videopress-gutenberg.php b/plugins/jetpack/modules/videopress/class.videopress-gutenberg.php
deleted file mode 100644
index be0bd1db..00000000
--- a/plugins/jetpack/modules/videopress/class.videopress-gutenberg.php
+++ /dev/null
@@ -1,169 +0,0 @@
-<?php
-/**
- * Block Editor functionality for VideoPress users.
- *
- * @package Jetpack
- */
-
-/**
- * Register a VideoPress extension to replace the default Core Video block.
- */
-class VideoPress_Gutenberg {
-
- /**
- * Singleton
- */
- public static function init() {
- static $instance = false;
-
- if ( ! $instance ) {
- $instance = new VideoPress_Gutenberg();
- }
-
- return $instance;
- }
-
- /**
- * VideoPress_Gutenberg constructor.
- *
- * Initialize the VideoPress Gutenberg extension
- */
- private function __construct() {
- add_action( 'init', array( $this, 'register_video_block_with_videopress' ) );
- add_action( 'jetpack_register_gutenberg_extensions', array( $this, 'set_extension_availability' ) );
- }
-
- /**
- * Used to check whether VideoPress is enabled for given site.
- *
- * @todo Create a global `jetpack_check_module_availability( $module )` helper so we can re-use it on other modules.
- * This global helper should be created in a file synced with WordPress.com so we can use it there too.
- * @see https://github.com/Automattic/jetpack/pull/11321#discussion_r255477815
- *
- * @return array Associative array indicating if the module is available (key `available`) and the reason why it is
- * unavailable (key `unavailable_reason`)
- */
- public function check_videopress_availability() {
- // It is available on Simple Sites having the appropriate a plan.
- if (
- defined( 'IS_WPCOM' ) && IS_WPCOM
- && method_exists( 'Store_Product_List', 'get_site_specific_features_data' )
- ) {
- $features = Store_Product_List::get_site_specific_features_data();
- if ( in_array( 'videopress', $features['active'], true ) ) {
- return array( 'available' => true );
- } else {
- return array(
- 'available' => false,
- 'unavailable_reason' => 'missing_plan',
- );
- }
- }
-
- // It is available on Jetpack Sites having the module active.
- if (
- method_exists( 'Jetpack', 'is_active' ) && Jetpack::is_active()
- && method_exists( 'Jetpack', 'is_module_active' )
- && method_exists( 'Jetpack_Plan', 'supports' )
- ) {
- if ( Jetpack::is_module_active( 'videopress' ) ) {
- return array( 'available' => true );
- } elseif ( ! Jetpack_Plan::supports( 'videopress' ) ) {
- return array(
- 'available' => false,
- 'unavailable_reason' => 'missing_plan',
- );
- } else {
- return array(
- 'available' => false,
- 'unavailable_reason' => 'missing_module',
- );
- }
- }
-
- return array(
- 'available' => false,
- 'unavailable_reason' => 'unknown',
- );
- }
-
- /**
- * Set the Jetpack Gutenberg extension availability.
- */
- public function set_extension_availability() {
- $availability = $this->check_videopress_availability();
- if ( $availability['available'] ) {
- Jetpack_Gutenberg::set_extension_available( 'jetpack/videopress' );
- } else {
- Jetpack_Gutenberg::set_extension_unavailable( 'jetpack/videopress', $availability['unavailable_reason'] );
- }
- }
-
- /**
- * Register the core video block as a dynamic block.
- *
- * It defines a server-side rendering that adds VideoPress support to the core video block.
- */
- public function register_video_block_with_videopress() {
- jetpack_register_block(
- 'core/video',
- array(
- 'render_callback' => array( $this, 'render_video_block_with_videopress' ),
- )
- );
- }
-
- /**
- * Render the core video block replacing the src attribute with the VideoPress URL
- *
- * @param array $attributes Array containing the video block attributes.
- * @param string $content String containing the video block content.
- *
- * @return string
- */
- public function render_video_block_with_videopress( $attributes, $content ) {
- if ( ! isset( $attributes['id'] ) || isset( $attributes['guid'] ) ) {
- return $content;
- }
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $blog_id = get_current_blog_id();
- } elseif ( method_exists( 'Jetpack', 'is_active' ) && Jetpack::is_active() ) {
- /**
- * We're intentionally not using `get_current_blog_id` because it was returning unexpected values.
- *
- * @see https://github.com/Automattic/jetpack/pull/11193#issuecomment-457883886
- * @see https://github.com/Automattic/jetpack/pull/11193/commits/215cf789f3d8bd03ff9eb1bbdb693acb8831d273
- */
- $blog_id = Jetpack_Options::get_option( 'id' );
- }
-
- if ( ! isset( $blog_id ) ) {
- return $content;
- }
-
- $post_id = absint( $attributes['id'] );
- $videopress_id = video_get_info_by_blogpostid( $blog_id, $post_id )->guid;
- $videopress_data = videopress_get_video_details( $videopress_id );
-
- if ( empty( $videopress_data->file_url_base->https ) || empty( $videopress_data->files->hd->mp4 ) ) {
- return $content;
- }
-
- $videopress_url = $videopress_data->file_url_base->https . $videopress_data->files->hd->mp4;
-
- $pattern = '/(\s)src=([\'"])(?:(?!\2).)+?\2/';
-
- return preg_replace(
- $pattern,
- sprintf(
- '\1src="%1$s"',
- esc_url_raw( $videopress_url )
- ),
- $content,
- 1
- );
- }
-}
-
-VideoPress_Gutenberg::init();
diff --git a/plugins/jetpack/modules/videopress/class.videopress-options.php b/plugins/jetpack/modules/videopress/class.videopress-options.php
deleted file mode 100644
index b8049e37..00000000
--- a/plugins/jetpack/modules/videopress/class.videopress-options.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-class VideoPress_Options {
-
- /** @var string */
- public static $option_name = 'videopress';
-
- /** @var array */
- protected static $options = array();
-
- /**
- * Get VideoPress options
- */
- public static function get_options() {
- // Make sure we only get options from the database and services once per connection.
- if ( count( self::$options ) > 0 ) {
- return self::$options;
- }
-
- $defaults = array(
- 'meta' => array(
- 'max_upload_size' => 0,
- ),
- );
-
- self::$options = Jetpack_Options::get_option( self::$option_name, array() );
- self::$options = array_merge( $defaults, self::$options );
-
- // Make sure that the shadow blog id never comes from the options, but instead uses the
- // associated shadow blog id, if videopress is enabled.
- self::$options['shadow_blog_id'] = 0;
-
- // Use the Jetpack ID for the shadow blog ID if we have a plan that supports VideoPress
- if ( Jetpack_Plan::supports( 'videopress' ) ) {
- self::$options['shadow_blog_id'] = Jetpack_Options::get_option( 'id' );
- }
-
- return self::$options;
- }
-
- /**
- * Update VideoPress options
- */
- public static function update_options( $options ) {
- Jetpack_Options::update_option( self::$option_name, $options );
-
- self::$options = $options;
- }
-
- /**
- * Runs when the VideoPress module is deactivated.
- */
- public static function delete_options() {
- Jetpack_Options::delete_option( self::$option_name );
-
- self::$options = array();
- }
-
-}
diff --git a/plugins/jetpack/modules/videopress/class.videopress-player.php b/plugins/jetpack/modules/videopress/class.videopress-player.php
deleted file mode 100644
index 669523c9..00000000
--- a/plugins/jetpack/modules/videopress/class.videopress-player.php
+++ /dev/null
@@ -1,880 +0,0 @@
-<?php
-/**
- * VideoPress playback module markup generator.
- *
- * @since 1.3
- */
-class VideoPress_Player {
- /**
- * Video data for the requested guid and maximum width
- *
- * @since 1.3
- * @var VideoPress_Video
- */
- protected $video;
-
- /**
- * DOM identifier of the video container
- *
- * @var string
- * @since 1.3
- */
- protected $video_container_id;
-
- /**
- * DOM identifier of the video element (video, object, embed)
- *
- * @var string
- * @since 1.3
- */
- protected $video_id;
-
- /**
- * Array of playback options: force_flash or freedom
- *
- * @var array
- * @since 1.3
- */
- protected $options;
-
- /**
- * Array of video GUIDs shown and their counts,
- * moved from the old VideoPress class.
- */
- public static $shown = array();
-
- /**
- * Initiate a player object based on shortcode values and possible blog-level option overrides
- *
- * @since 1.3
- * @var string $guid VideoPress unique identifier
- * @var int $maxwidth maximum desired width of the video player if specified
- * @var array $options player customizations
- */
- public function __construct( $guid, $maxwidth = 0, $options = array() ) {
- if ( empty( self::$shown[ $guid ] ) ) {
- self::$shown[ $guid ] = 0;
- }
-
- self::$shown[ $guid ]++;
-
- $this->video_container_id = 'v-' . $guid . '-' . self::$shown[ $guid ];
- $this->video_id = $this->video_container_id . '-video';
-
- if ( is_array( $options ) ) {
- $this->options = $options;
- } else {
- $this->options = array();
- }
-
- // set up the video
- $cache_key = null;
-
- // disable cache in debug mode
- if ( defined( 'WP_DEBUG' ) && WP_DEBUG === true ) {
- $cached_video = null;
- } else {
- $cache_key_pieces = array( 'video' );
-
- if ( is_multisite() && is_subdomain_install() ) {
- $cache_key_pieces[] = get_current_blog_id();
- }
-
- $cache_key_pieces[] = $guid;
- if ( $maxwidth > 0 ) {
- $cache_key_pieces[] = $maxwidth;
- }
- if ( is_ssl() ) {
- $cache_key_pieces[] = 'ssl';
- }
- $cache_key = implode( '-', $cache_key_pieces );
- unset( $cache_key_pieces );
- $cached_video = wp_cache_get( $cache_key, 'video' );
- }
- if ( empty( $cached_video ) ) {
- $video = new VideoPress_Video( $guid, $maxwidth );
- if ( empty( $video ) ) {
- return;
- } elseif ( isset( $video->error ) ) {
- $this->video = $video->error;
- return;
- } elseif ( is_wp_error( $video ) ) {
- $this->video = $video;
- return;
- }
-
- $this->video = $video;
- unset( $video );
-
- if ( ! defined( 'WP_DEBUG' ) || WP_DEBUG !== true ) {
- $expire = 3600;
- if ( isset( $video->expires ) && is_int( $video->expires ) ) {
- $expires_diff = time() - $video->expires;
- if ( $expires_diff > 0 && $expires_diff < 86400 ) { // allowed range: 1 second to 1 day
- $expire = $expires_diff;
- }
- unset( $expires_diff );
- }
-
- wp_cache_set( $cache_key, serialize( $this->video ), 'video', $expire );
- unset( $expire );
- }
- } else {
- $this->video = unserialize( $cached_video );
- }
- unset( $cache_key );
- unset( $cached_video );
- }
-
- /**
- * Wrap output in a VideoPress player container
- *
- * @since 1.3
- * @var string $content HTML string
- * @return string HTML string or blank string if nothing to wrap
- */
- private function html_wrapper( $content ) {
- if ( empty( $content ) ) {
- return '';
- } else {
- return '<div id="' . esc_attr( $this->video_container_id ) . '" class="video-player">' . $content . '</div>';
- }
- }
-
- /**
- * Output content suitable for a feed reader displaying RSS or Atom feeds
- * We do not display error messages in the feed view due to caching concerns.
- * Flash content presented using <embed> markup for feed reader compatibility.
- *
- * @since 1.3
- * @return string HTML string or empty string if error
- */
- public function asXML() {
- if ( empty( $this->video ) || is_wp_error( $this->video ) ) {
- return '';
- }
-
- if ( isset( $this->options['force_flash'] ) && true === $this->options['force_flash'] ) {
- $content = $this->flash_embed();
-
- } else {
- $content = $this->html5_static();
- }
-
- return $this->html_wrapper( $content );
- }
-
- /**
- * Video player markup for best matching the current request and publisher options
- *
- * @since 1.3
- * @return string HTML markup string or empty string if no video property found
- */
- public function asHTML() {
- if ( empty( $this->video ) ) {
- $content = '';
-
- } elseif ( is_wp_error( $this->video ) ) {
- $content = $this->error_message( $this->video );
-
- } elseif ( isset( $this->options['force_flash'] ) && true === $this->options['force_flash'] ) {
- $content = $this->flash_object();
-
- } elseif ( isset( $this->video->restricted_embed ) && true === $this->video->restricted_embed ) {
-
- if ( $this->options['forcestatic'] ) {
- $content = $this->flash_object();
-
- } else {
- $content = $this->html5_dynamic();
- }
- } elseif ( isset( $this->options['freedom'] ) && true === $this->options['freedom'] ) {
- $content = $this->html5_static();
-
- } else {
- $content = $this->html5_dynamic();
- }
-
- return $this->html_wrapper( $content );
- }
-
- /**
- * Display an error message to users capable of doing something about the error
- *
- * @since 1.3
- * @uses current_user_can() to test if current user has edit_posts capability
- * @var WP_Error $error WordPress error
- * @return string HTML string
- */
- private function error_message( $error ) {
- if ( ! current_user_can( 'edit_posts' ) || empty( $error ) ) {
- return '';
- }
-
- $html = '<div class="videopress-error" style="background-color:rgb(255,0,0);color:rgb(255,255,255);font-family:font-family:\'Helvetica Neue\',Arial,Helvetica,\'Nimbus Sans L\',sans-serif;font-size:140%;min-height:10em;padding-top:1.5em;padding-bottom:1.5em">';
- $html .= '<h1 style="font-size:180%;font-style:bold;line-height:130%;text-decoration:underline">' . esc_html( sprintf( __( '%s Error', 'jetpack' ), 'VideoPress' ) ) . '</h1>';
- foreach ( $error->get_error_messages() as $message ) {
- $html .= $message;
- }
- $html .= '</div>';
- return $html;
- }
-
- /**
- * Rating agencies and industry associations require a potential viewer verify his or her age before a video or its poster frame are displayed.
- * Content rated for audiences 17 years of age or older requires such verification across multiple rating agencies and industry associations
- *
- * @since 1.3
- * @return bool true if video requires the viewer verify he or she is 17 years of age or older
- */
- private function age_gate_required() {
- if ( isset( $this->video->age_rating ) && $this->video->age_rating >= 17 ) {
- return true;
- } else {
- return false;
- }
- }
-
- /**
- * Select a date of birth using HTML form elements.
- *
- * @since 1.5
- * @return string HTML markup
- */
- private function html_age_gate() {
- global $wp_locale;
- $text_align = 'left';
- if ( $this->video->text_direction === 'rtl' ) {
- $text_align = 'right';
- }
-
- $html = '<div class="videopress-age-gate" style="margin:0 60px">';
- $html .= '<p class="instructions" style="color:rgb(255, 255, 255);font-size:21px;padding-top:60px;padding-bottom:20px;text-align:' . $text_align . '">' . esc_html( __( 'This video is intended for mature audiences.', 'jetpack' ) ) . '<br />' . esc_html( __( 'Please verify your birthday.', 'jetpack' ) ) . '</p>';
- $html .= '<fieldset id="birthday" style="border:0 none;text-align:' . $text_align . ';padding:0;">';
- $inputs_style = 'border:1px solid #444;margin-';
- if ( $this->video->text_direction === 'rtl' ) {
- $inputs_style .= 'left';
- } else {
- $inputs_style .= 'right';
- }
- $inputs_style .= ':10px;background-color:rgb(0, 0, 0);font-size:14px;color:rgb(255,255,255);padding:4px 6px;line-height: 2em;vertical-align: middle';
-
- /**
- * Display a list of months in the Gregorian calendar.
- * Set values to 0-based to match JavaScript Date.
- *
- * @link https://developer.mozilla.org/en/JavaScript/Reference/global_objects/date Mozilla JavaScript Reference: Date
- */
- $html .= '<select name="month" style="' . $inputs_style . '">';
-
- for ( $i = 0; $i < 12; $i++ ) {
- $html .= '<option value="' . esc_attr( $i ) . '">' . esc_html( $wp_locale->get_month( $i + 1 ) ) . '</option>';
- }
- $html .= '</select>';
-
- /**
- * todo: numdays variance by month
- */
- $html .= '<select name="day" style="' . $inputs_style . '">';
- for ( $i = 1; $i < 32; $i++ ) {
- $html .= '<option>' . $i . '</option>';
- }
- $html .= '</select>';
-
- /**
- * Current record for human life is 122. Go back 130 years and no one is left out.
- * Don't ask infants younger than 2 for their birthday
- * Default to 13
- */
- $html .= '<select name="year" style="' . $inputs_style . '">';
- $start_year = date( 'Y' ) - 2;
- $default_year = $start_year - 11;
- $end_year = $start_year - 128;
- for ( $year = $start_year; $year > $end_year; $year-- ) {
- $html .= '<option';
- if ( $year === $default_year ) {
- $html .= ' selected="selected"';
- }
- $html .= '>' . $year . '</option>';
- }
- unset( $start_year );
- unset( $default_year );
- unset( $end_year );
- $html .= '</select>';
-
- $html .= '<input type="submit" value="' . __( 'Submit', 'jetpack' ) . '" style="cursor:pointer;border-radius: 1em;border:1px solid #333;background-color:#333;background:-webkit-gradient( linear, left top, left bottom, color-stop(0.0, #444), color-stop(1, #111) );background:-moz-linear-gradient(center top, #444 0%, #111 100%);font-size:13px;padding:4px 10px 5px;line-height:1em;vertical-align:top;color:white;text-decoration:none;margin:0" />';
-
- $html .= '</fieldset>';
- $html .= '<p style="padding-top:20px;padding-bottom:60px;text-align:' . $text_align . ';"><a rel="nofollow noopener noreferrer" href="http://videopress.com/" target="_blank" style="color:rgb(128,128,128);text-decoration:underline;font-size:15px">' . __( 'More information', 'jetpack' ) . '</a></p>';
-
- $html .= '</div>';
- return $html;
- }
-
- /**
- * Return HTML5 video static markup for the given video parameters.
- * Use default browser player controls.
- * No Flash fallback.
- *
- * @since 1.2
- * @link http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html HTML5 video
- * @return string HTML5 video element and children
- */
- private function html5_static() {
- wp_enqueue_script( 'videopress' );
- $thumbnail = esc_url( $this->video->poster_frame_uri );
- $html = "<video id=\"{$this->video_id}\" width=\"{$this->video->calculated_width}\" height=\"{$this->video->calculated_height}\" poster=\"$thumbnail\" controls=\"true\"";
- if ( isset( $this->options['autoplay'] ) && $this->options['autoplay'] === true ) {
- $html .= ' autoplay="true"';
- } else {
- $html .= ' preload="metadata"';
- }
- if ( isset( $this->video->text_direction ) ) {
- $html .= ' dir="' . esc_attr( $this->video->text_direction ) . '"';
- }
- if ( isset( $this->video->language ) ) {
- $html .= ' lang="' . esc_attr( $this->video->language ) . '"';
- }
- $html .= '>';
- if ( ! isset( $this->options['freedom'] ) || $this->options['freedom'] === false ) {
- $mp4 = $this->video->videos->mp4->url;
- if ( ! empty( $mp4 ) ) {
- $html .= '<source src="' . esc_url( $mp4 ) . '" type="video/mp4; codecs=&quot;' . esc_attr( $this->video->videos->mp4->codecs ) . '&quot;" />';
- }
- unset( $mp4 );
- }
-
- if ( isset( $this->video->videos->ogv ) ) {
- $ogg = $this->video->videos->ogv->url;
- if ( ! empty( $ogg ) ) {
- $html .= '<source src="' . esc_url( $ogg ) . '" type="video/ogg; codecs=&quot;' . esc_attr( $this->video->videos->ogv->codecs ) . '&quot;" />';
- }
-
- unset( $ogg );
- }
-
- $html .= '<div><img alt="';
- if ( isset( $this->video->title ) ) {
- $html .= esc_attr( $this->video->title );
- }
- $html .= '" src="' . $thumbnail . '" width="' . $this->video->calculated_width . '" height="' . $this->video->calculated_height . '" /></div>';
- if ( isset( $this->options['freedom'] ) && $this->options['freedom'] === true ) {
- $html .= '<p class="robots-nocontent">' . sprintf( __( 'You do not have sufficient <a rel="nofollow noopener noreferrer" href="%s" target="_blank">freedom levels</a> to view this video. Support free software and upgrade.', 'jetpack' ), 'http://www.gnu.org/philosophy/free-sw.html' ) . '</p>';
- } elseif ( isset( $this->video->title ) ) {
- $html .= '<p>' . esc_html( $this->video->title ) . '</p>';
- }
- $html .= '</video>';
- return $html;
- }
-
- /**
- * Click to play dynamic HTML5-capable player.
- * The player displays a video preview section including poster frame,
- * video title, play button and watermark on the original page load
- * and calculates the playback capabilities of the browser. The video player
- * is loaded when the visitor clicks on the video preview area.
- * If Flash Player 10 or above is available the browser will display
- * the Flash version of the video. If HTML5 video appears to be supported
- * and the browser may be capable of MP4 (H.264, AAC) or OGV (Theora, Vorbis)
- * playback the browser will display its native HTML5 player.
- *
- * @since 1.5
- * @return string HTML markup
- */
- private function html5_dynamic() {
-
- /**
- * Filter the VideoPress legacy player feature
- *
- * This filter allows you to control whether the legacy VideoPress player should be used
- * instead of the improved one.
- *
- * @module videopress
- *
- * @since 3.7.0
- *
- * @param boolean $videopress_use_legacy_player
- */
- if ( ! apply_filters( 'jetpack_videopress_use_legacy_player', false ) ) {
- return $this->html5_dynamic_next();
- }
-
- wp_enqueue_script( 'videopress' );
- $video_placeholder_id = $this->video_container_id . '-placeholder';
- $age_gate_required = $this->age_gate_required();
- $width = absint( $this->video->calculated_width );
- $height = absint( $this->video->calculated_height );
-
- $html = '<div id="' . $video_placeholder_id . '" class="videopress-placeholder" style="';
- if ( $age_gate_required ) {
- $html .= "min-width:{$width}px;min-height:{$height}px";
- } else {
- $html .= "width:{$width}px;height:{$height}px";
- }
- $html .= ';display:none;cursor:pointer !important;position:relative;';
- if ( isset( $this->video->skin ) && isset( $this->video->skin->background_color ) ) {
- $html .= 'background-color:' . esc_attr( $this->video->skin->background_color ) . ';';
- }
- $html .= 'font-family: \'Helvetica Neue\',Arial,Helvetica,\'Nimbus Sans L\',sans-serif;font-weight:bold;font-size:18px">' . PHP_EOL;
-
- /**
- * Do not display a poster frame, title, or any other content hints for mature content.
- */
- if ( ! $age_gate_required ) {
- if ( ! empty( $this->video->title ) ) {
- $html .= '<div class="videopress-title" style="display:inline;position:absolute;margin:20px 20px 0 20px;padding:4px 8px;vertical-align:top;text-align:';
- if ( $this->video->text_direction === 'rtl' ) {
- $html .= 'right" dir="rtl"';
- } else {
- $html .= 'left" dir="ltr"';
- }
- if ( isset( $this->video->language ) ) {
- $html .= ' lang="' . esc_attr( $this->video->language ) . '"';
- }
- $html .= '><span style="padding:3px 0;line-height:1.5em;';
- if ( isset( $this->video->skin ) && isset( $this->video->skin->background_color ) ) {
- $html .= 'background-color:';
- if ( $this->video->skin->background_color === 'rgb(0,0,0)' ) {
- $html .= 'rgba(0,0,0,0.8)';
- } else {
- $html .= esc_attr( $this->video->skin->background_color );
- }
- $html .= ';';
- }
- $html .= 'color:rgb(255,255,255)">' . esc_html( $this->video->title ) . '</span></div>';
- }
- $html .= '<img class="videopress-poster" alt="';
- if ( ! empty( $this->video->title ) ) {
- $html .= esc_attr( $this->video->title ) . '" title="' . esc_attr( sprintf( _x( 'Watch: %s', 'watch a video title', 'jetpack' ), $this->video->title ) );
- }
- $html .= '" src="' . esc_url( $this->video->poster_frame_uri, array( 'http', 'https' ) ) . '" width="' . $width . '" height="' . $height . '" />' . PHP_EOL;
-
- // style a play button hovered over the poster frame
- $html .= '<div class="play-button"><span style="z-index:2;display:block;position:absolute;top:50%;left:50%;text-align:center;vertical-align:middle;color:rgb(255,255,255);opacity:0.9;margin:0 0 0 -0.45em;padding:0;line-height:0;font-size:500%;text-shadow:0 0 40px rgba(0,0,0,0.5)">&#9654;</span></div>' . PHP_EOL;
-
- // watermark
- if ( isset( $this->video->skin ) && isset( $this->video->skin->watermark ) ) {
- $html .= '<div style="position:relative;margin-top:-40px;height:25px;margin-bottom:35px;';
- if ( $this->video->text_direction === 'rtl' ) {
- $html .= 'margin-left:20px;text-align:left;';
- } else {
- $html .= 'margin-right:20px;text-align:right;';
- }
- $html .= 'vertical-align:bottom;z-index:3">';
- $html .= '<img alt="" src="' . esc_url( $this->video->skin->watermark, array( 'http', 'https' ) ) . '" width="90" height="13" style="background-color:transparent;background-image:none;background-repeat:no-repeat;border:none;margin:0;padding:0"/>';
- $html .= '</div>' . PHP_EOL;
- }
- }
-
- $data = array(
- 'blog' => absint( $this->video->blog_id ),
- 'post' => absint( $this->video->post_id ),
- 'duration' => absint( $this->video->duration ),
- 'poster' => esc_url_raw( $this->video->poster_frame_uri, array( 'http', 'https' ) ),
- 'hd' => (bool) $this->options['hd'],
- );
- if ( isset( $this->video->videos ) ) {
- if ( isset( $this->video->videos->mp4 ) && isset( $this->video->videos->mp4->url ) ) {
- $data['mp4'] = array(
- 'size' => $this->video->videos->mp4->format,
- 'uri' => esc_url_raw( $this->video->videos->mp4->url, array( 'http', 'https' ) ),
- );
- }
- if ( isset( $this->video->videos->ogv ) && isset( $this->video->videos->ogv->url ) ) {
- $data['ogv'] = array(
- 'size' => 'std',
- 'uri' => esc_url_raw( $this->video->videos->ogv->url, array( 'http', 'https' ) ),
- );
- }
- }
- $locale = array( 'dir' => $this->video->text_direction );
- if ( isset( $this->video->language ) ) {
- $locale['lang'] = $this->video->language;
- }
- $data['locale'] = $locale;
- unset( $locale );
-
- $guid = $this->video->guid;
- $guid_js = json_encode( $guid );
- $html .= '<script type="text/javascript">' . PHP_EOL;
- $html .= 'jQuery(document).ready(function() {';
-
- $html .= 'if ( !jQuery.VideoPress.data[' . json_encode( $guid ) . '] ) { jQuery.VideoPress.data[' . json_encode( $guid ) . '] = new Array(); }' . PHP_EOL;
- $html .= 'jQuery.VideoPress.data[' . json_encode( $guid ) . '][' . self::$shown[ $guid ] . ']=' . json_encode( $data ) . ';' . PHP_EOL;
- unset( $data );
-
- $jq_container = json_encode( '#' . $this->video_container_id );
- $jq_placeholder = json_encode( '#' . $video_placeholder_id );
- $player_config = "{width:{$width},height:{$height},";
- if ( isset( $this->options['freedom'] ) && $this->options['freedom'] === true ) {
- $player_config .= 'freedom:"true",';
- }
- $player_config .= 'container:jQuery(' . $jq_container . ')}';
-
- $html .= "jQuery({$jq_placeholder}).show(0,function(){jQuery.VideoPress.analytics.impression({$guid_js})});" . PHP_EOL;
-
- if ( $age_gate_required ) {
- $html .= 'if ( jQuery.VideoPress.support.flash() ) {' . PHP_EOL;
- /**
- * @link http://code.google.com/p/swfobject/wiki/api#swfobject.embedSWF(swfUrlStr,_replaceElemIdStr,_widthStr,_height
- */
- $html .= 'swfobject.embedSWF(' . implode(
- ',',
- array(
- 'jQuery.VideoPress.video.flash.player_uri',
- json_encode( $this->video_container_id ),
- json_encode( $width ),
- json_encode( $height ),
- 'jQuery.VideoPress.video.flash.min_version',
- 'jQuery.VideoPress.video.flash.expressinstall', // attempt to upgrade the Flash player if less than min_version. requires a 310x137 container or larger but we will always try to include
- '{guid:' . $guid_js . '}', // FlashVars
- 'jQuery.VideoPress.video.flash.params',
- 'null', // no attributes
- 'jQuery.VideoPress.video.flash.embedCallback', // error fallback
- )
- ) . ');';
- $html .= '} else {' . PHP_EOL;
- $html .= "if ( jQuery.VideoPress.video.prepare({$guid_js},{$player_config}," . self::$shown[ $guid ] . ') ) {' . PHP_EOL;
- $html .= 'if ( jQuery(' . $jq_container . ').data( "player" ) === "flash" ){jQuery.VideoPress.video.play(jQuery(' . json_encode( '#' . $this->video_container_id ) . '));}else{';
- $html .= 'jQuery(' . $jq_placeholder . ').html(' . json_encode( $this->html_age_date() ) . ');' . PHP_EOL;
- $html .= 'jQuery(' . json_encode( '#' . $video_placeholder_id . ' input[type=submit]' ) . ').one("click", function(event){jQuery.VideoPress.requirements.isSufficientAge(jQuery(' . $jq_container . '),' . absint( $this->video->age_rating ) . ')});' . PHP_EOL;
- $html .= '}}}' . PHP_EOL;
- } else {
- $html .= "if ( jQuery.VideoPress.video.prepare({$guid_js}, {$player_config}," . self::$shown[ $guid ] . ') ) {' . PHP_EOL;
- if ( isset( $this->options['autoplay'] ) && $this->options['autoplay'] === true ) {
- $html .= "jQuery.VideoPress.video.play(jQuery({$jq_container}));";
- } else {
- $html .= 'jQuery(' . $jq_placeholder . ').one("click",function(){jQuery.VideoPress.video.play(jQuery(' . $jq_container . '))});';
- }
- $html .= '}';
-
- // close the jQuery(document).ready() function
- $html .= '});';
- }
- $html .= '</script>' . PHP_EOL;
- $html .= '</div>' . PHP_EOL;
-
- /*
- * JavaScript required
- */
- $noun = __( 'this video', 'jetpack' );
- if ( ! $age_gate_required ) {
- $vid_type = '';
- if ( ( isset( $this->options['freedom'] ) && $this->options['freedom'] === true ) && ( isset( $this->video->videos->ogv ) && isset( $this->video->videos->ogv->url ) ) ) {
- $vid_type = 'ogv';
- } elseif ( isset( $this->video->videos->mp4 ) && isset( $this->video->videos->mp4->url ) ) {
- $vid_type = 'mp4';
- } elseif ( isset( $this->video->videos->ogv ) && isset( $this->video->videos->ogv->url ) ) {
- $vid_type = 'ogv';
- }
-
- if ( $vid_type !== '' ) {
- $noun = '<a ';
- if ( isset( $this->video->language ) ) {
- $noun .= 'hreflang="' . esc_attr( $this->video->language ) . '" ';
- }
- if ( $vid_type === 'mp4' ) {
- $noun .= 'type="video/mp4" href="' . esc_url( $this->video->videos->mp4->url, array( 'http', 'https' ) );
- } elseif ( $vid_type === 'ogv' ) {
- $noun .= 'type="video/ogv" href="' . esc_url( $this->video->videos->ogv->url, array( 'http', 'https' ) );
- }
- $noun .= '">';
- if ( isset( $this->video->title ) ) {
- $noun .= esc_html( $this->video->title );
- } else {
- $noun .= __( 'this video', 'jetpack' );
- }
- $noun .= '</a>';
- } elseif ( ! empty( $this->title ) ) {
- $noun = esc_html( $this->title );
- }
- unset( $vid_type );
- }
- $html .= '<noscript><p>' . sprintf( _x( 'JavaScript required to play %s.', 'Play as in playback or view a movie', 'jetpack' ), $noun ) . '</p></noscript>';
-
- return $html;
- }
-
- function html5_dynamic_next() {
- $video_container_id = 'v-' . $this->video->guid;
-
- // Must not use iframes for IE11 due to a fullscreen bug
- if ( isset( $_SERVER['HTTP_USER_AGENT'] ) && stristr( $_SERVER['HTTP_USER_AGENT'], 'Trident/7.0; rv:11.0' ) ) {
- $iframe_embed = false;
- } else {
-
- /**
- * Filter the VideoPress iframe embed
- *
- * This filter allows you to control whether the videos will be embedded using an iframe.
- * Set this to false in order to use an in-page embed rather than an iframe.
- *
- * @module videopress
- *
- * @since 3.7.0
- *
- * @param boolean $videopress_player_use_iframe
- */
- $iframe_embed = apply_filters( 'jetpack_videopress_player_use_iframe', true );
- }
-
- if ( ! array_key_exists( 'hd', $this->options ) ) {
- $this->options['hd'] = (bool) get_option( 'video_player_high_quality', false );
- }
-
- $videopress_options = array(
- 'width' => absint( $this->video->calculated_width ),
- 'height' => absint( $this->video->calculated_height ),
- );
- foreach ( $this->options as $option => $value ) {
- switch ( $option ) {
- case 'at':
- if ( intval( $value ) ) {
- $videopress_options[ $option ] = intval( $value );
- }
- break;
- case 'autoplay':
- $option = 'autoPlay';
- case 'hd':
- case 'loop':
- case 'permalink':
- if ( in_array( $value, array( 1, 'true' ) ) ) {
- $videopress_options[ $option ] = true;
- } elseif ( in_array( $value, array( 0, 'false' ) ) ) {
- $videopress_options[ $option ] = false;
- }
- break;
- case 'defaultlangcode':
- $option = 'defaultLangCode';
- if ( $value ) {
- $videopress_options[ $option ] = $value;
- }
- break;
- }
- }
-
- if ( $iframe_embed ) {
- $iframe_url = "https://videopress.com/embed/{$this->video->guid}";
-
- foreach ( $videopress_options as $option => $value ) {
- if ( ! in_array( $option, array( 'width', 'height' ) ) ) {
-
- // add_query_arg ignores false as a value, so replacing it with 0
- $iframe_url = add_query_arg( $option, ( false === $value ) ? 0 : $value, $iframe_url );
- }
- }
-
- $js_url = 'https://s0.wp.com/wp-content/plugins/video/assets/js/next/videopress-iframe.js';
-
- return "<iframe width='" . esc_attr( $videopress_options['width'] )
- . "' height='" . esc_attr( $videopress_options['height'] )
- . "' src='" . esc_attr( $iframe_url )
- . "' frameborder='0' allowfullscreen></iframe>"
- . "<script src='" . esc_attr( $js_url ) . "'></script>";
-
- } else {
- $videopress_options = json_encode( $videopress_options );
- $js_url = 'https://s0.wp.com/wp-content/plugins/video/assets/js/next/videopress.js';
-
- return "<div id='{$video_container_id}'></div>
- <script src='{$js_url}'></script>
- <script>
- videopress('{$this->video->guid}', document.querySelector('#{$video_container_id}'), {$videopress_options});
- </script>";
- }
- }
-
- /**
- * Only allow legitimate Flash parameters and their values
- *
- * @since 1.2
- * @link http://kb2.adobe.com/cps/127/tn_12701.html Flash object and embed attributes
- * @link http://kb2.adobe.com/cps/133/tn_13331.html devicefont
- * @link http://kb2.adobe.com/cps/164/tn_16494.html allowscriptaccess
- * @link http://www.adobe.com/devnet/flashplayer/articles/full_screen_mode.html full screen mode
- * @link http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001079.html allownetworking
- * @param array $flash_params Flash parameters expressed in key-value form
- * @return array validated Flash parameters
- */
- public static function esc_flash_params( $flash_params ) {
- $allowed_params = array(
- 'swliveconnect' => array( 'true', 'false' ),
- 'play' => array( 'true', 'false' ),
- 'loop' => array( 'true', 'false' ),
- 'menu' => array( 'true', 'false' ),
- 'quality' => array( 'low', 'autolow', 'autohigh', 'medium', 'high', 'best' ),
- 'scale' => array( 'default', 'noborder', 'exactfit', 'noscale' ),
- 'align' => array( 'l', 'r', 't' ),
- 'salign' => array( 'l', 'r', 't', 'tl', 'tr', 'bl', 'br' ),
- 'wmode' => array( 'window', 'opaque', 'transparent', 'direct', 'gpu' ),
- 'devicefont' => array( '_sans', '_serif', '_typewriter' ),
- 'allowscriptaccess' => array( 'always', 'samedomain', 'never' ),
- 'allownetworking' => array( 'all', 'internal', 'none' ),
- 'seamlesstabbing' => array( 'true', 'false' ),
- 'allowfullscreen' => array( 'true', 'false' ),
- 'fullScreenAspectRatio' => array( 'portrait', 'landscape' ),
- 'base',
- 'bgcolor',
- 'flashvars',
- );
-
- $allowed_params_keys = array_keys( $allowed_params );
-
- $filtered_params = array();
- foreach ( $flash_params as $param => $value ) {
- if ( empty( $param ) || empty( $value ) ) {
- continue;
- }
- $param = strtolower( $param );
- if ( in_array( $param, $allowed_params_keys ) ) {
- if ( isset( $allowed_params[ $param ] ) && is_array( $allowed_params[ $param ] ) ) {
- $value = strtolower( $value );
- if ( in_array( $value, $allowed_params[ $param ] ) ) {
- $filtered_params[ $param ] = $value;
- }
- } else {
- $filtered_params[ $param ] = $value;
- }
- }
- }
- unset( $allowed_params_keys );
-
- /**
- * Flash specifies sameDomain, not samedomain. change from lowercase value for preciseness
- */
- if ( isset( $filtered_params['allowscriptaccess'] ) && $filtered_params['allowscriptaccess'] === 'samedomain' ) {
- $filtered_params['allowscriptaccess'] = 'sameDomain';
- }
-
- return $filtered_params;
- }
-
- /**
- * Filter Flash variables from the response, taking into consideration player options.
- *
- * @since 1.3
- * @return array Flash variable key value pairs
- */
- private function get_flash_variables() {
- if ( ! isset( $this->video->players->swf->vars ) ) {
- return array();
- }
-
- $flashvars = (array) $this->video->players->swf->vars;
- if ( isset( $this->options['autoplay'] ) && $this->options['autoplay'] === true ) {
- $flashvars['autoPlay'] = 'true';
- }
- return $flashvars;
- }
-
- /**
- * Validate and filter Flash parameters
- *
- * @since 1.3
- * @return array Flash parameters passed through key and value validation
- */
- private function get_flash_parameters() {
- if ( ! isset( $this->video->players->swf->params ) ) {
- return array();
- } else {
- return self::esc_flash_params(
- /**
- * Filters the Flash parameters of the VideoPress player.
- *
- * @module videopress
- *
- * @since 1.2.0
- *
- * @param array $this->video->players->swf->params Array of swf parameters for the VideoPress flash player.
- */
- apply_filters( 'video_flash_params', (array) $this->video->players->swf->params, 10, 1 )
- );
- }
- }
-
- /**
- * Flash player markup in a HTML embed element.
- *
- * @since 1.1
- * @link http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#the-embed-element embed element
- * @link http://www.google.com/support/reader/bin/answer.py?answer=70664 Google Reader markup support
- * @return string HTML markup. Embed element with no children
- */
- private function flash_embed() {
- wp_enqueue_script( 'videopress' );
- if ( ! isset( $this->video->players->swf ) || ! isset( $this->video->players->swf->url ) ) {
- return '';
- }
-
- $embed = array(
- 'id' => $this->video_id,
- 'src' => esc_url_raw( $this->video->players->swf->url . '&' . http_build_query( $this->get_flash_variables(), null, '&' ), array( 'http', 'https' ) ),
- 'type' => 'application/x-shockwave-flash',
- 'width' => $this->video->calculated_width,
- 'height' => $this->video->calculated_height,
- );
- if ( isset( $this->video->title ) ) {
- $embed['title'] = $this->video->title;
- }
- $embed = array_merge( $embed, $this->get_flash_parameters() );
-
- $html = '<embed';
- foreach ( $embed as $attribute => $value ) {
- $html .= ' ' . esc_html( $attribute ) . '="' . esc_attr( $value ) . '"';
- }
- unset( $embed );
- $html .= '></embed>';
- return $html;
- }
-
- /**
- * Double-baked Flash object markup for Internet Explorer and more standards-friendly consuming agents.
- *
- * @since 1.1
- * @return HTML markup. Object and children.
- */
- private function flash_object() {
- wp_enqueue_script( 'videopress' );
- if ( ! isset( $this->video->players->swf ) || ! isset( $this->video->players->swf->url ) ) {
- return '';
- }
-
- $thumbnail_html = '<img alt="';
- if ( isset( $this->video->title ) ) {
- $thumbnail_html .= esc_attr( $this->video->title );
- }
- $thumbnail_html .= '" src="' . esc_url( $this->video->poster_frame_uri, array( 'http', 'https' ) ) . '" width="' . $this->video->calculated_width . '" height="' . $this->video->calculated_height . '" />';
- $flash_vars = esc_attr( http_build_query( $this->get_flash_variables(), null, '&' ) );
- $flash_params = '';
- foreach ( $this->get_flash_parameters() as $attribute => $value ) {
- $flash_params .= '<param name="' . esc_attr( $attribute ) . '" value="' . esc_attr( $value ) . '" />';
- }
- $flash_help = sprintf( __( 'This video requires <a rel="nofollow noopener noreferrer" href="%s" target="_blank">Adobe Flash</a> for playback.', 'jetpack' ), 'http://www.adobe.com/go/getflashplayer' );
- $flash_player_url = esc_url( $this->video->players->swf->url, array( 'http', 'https' ) );
- $description = '';
- if ( isset( $this->video->title ) ) {
- $standby = $this->video->title;
- $description = '<p><strong>' . esc_html( $this->video->title ) . '</strong></p>';
- } else {
- $standby = __( 'Loading video...', 'jetpack' );
- }
- $standby = ' standby="' . esc_attr( $standby ) . '"';
- return <<<OBJECT
-<script type="text/javascript">if(typeof swfobject!=="undefined"){swfobject.registerObject("{$this->video_id}", "{$this->video->players->swf->version}");}</script>
-<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="{$this->video->calculated_width}" height="{$this->video->calculated_height}" id="{$this->video_id}"{$standby}>
- <param name="movie" value="{$flash_player_url}" />
- {$flash_params}
- <param name="flashvars" value="{$flash_vars}" />
- <!--[if !IE]>-->
- <object type="application/x-shockwave-flash" data="{$flash_player_url}" width="{$this->video->calculated_width}" height="{$this->video->calculated_height}"{$standby}>
- {$flash_params}
- <param name="flashvars" value="{$flash_vars}" />
- <!--<![endif]-->
- {$thumbnail_html}{$description}<p class="robots-nocontent">{$flash_help}</p>
- <!--[if !IE]>-->
- </object>
- <!--<![endif]-->
-</object>
-OBJECT;
- }
-}
diff --git a/plugins/jetpack/modules/videopress/class.videopress-scheduler.php b/plugins/jetpack/modules/videopress/class.videopress-scheduler.php
deleted file mode 100644
index bff33684..00000000
--- a/plugins/jetpack/modules/videopress/class.videopress-scheduler.php
+++ /dev/null
@@ -1,197 +0,0 @@
-<?php
-/**
- * VideoPress playback module markup generator.
- *
- * @since 1.3
- */
-class VideoPress_Scheduler {
-
- /**
- * The name of the function used to run the cleanup cron.
- */
- const CLEANUP_CRON_METHOD = 'videopress_cleanup_media_library';
-
- /**
- * @var VideoPress_Scheduler
- **/
- private static $instance = null;
-
- /**
- * A list of all of the crons that are to be activated, along with their interval timings.
- *
- * @var array
- */
- protected $crons = array(
- // 'cleanup' => array(
- // 'method' => self::CLEANUP_CRON_METHOD,
- // 'interval' => 'minutes_30',
- // ),
- );
-
-
- /**
- * Private VideoPress_Scheduler constructor.
- *
- * Use the VideoPress_Scheduler::init() method to get an instance.
- */
- private function __construct() {
- add_filter( 'cron_schedules', array( $this, 'add_30_minute_cron_interval' ) );
-
- // Activate the cleanup cron if videopress is enabled, jetpack is activated, or jetpack is updated.
- add_action( 'jetpack_activate_module_videopress', array( $this, 'activate_all_crons' ) );
- add_action( 'updating_jetpack_version', array( $this, 'activate_all_crons' ) );
- add_action( 'activated_plugin', array( $this, 'activate_crons_on_jetpack_activation' ) );
-
- // Deactivate the cron if either videopress is disabled or Jetpack is disabled.
- add_action( 'jetpack_deactivate_module_videopress', array( $this, 'deactivate_all_crons' ) );
- register_deactivation_hook( plugin_basename( JETPACK__PLUGIN_FILE ), array( $this, 'deactivate_all_crons' ) );
- }
-
- /**
- * Initialize the VideoPress_Scheduler and get back a singleton instance.
- *
- * @return VideoPress_Scheduler
- */
- public static function init() {
- if ( is_null( self::$instance ) ) {
- self::$instance = new VideoPress_Scheduler();
- }
-
- return self::$instance;
- }
-
- /**
- * Adds 30 minute running interval to the cron schedules.
- *
- * @param array $current_schedules Currently defined schedules list.
- *
- * @return array
- */
- public function add_30_minute_cron_interval( $current_schedules ) {
-
- // Only add the 30 minute interval if it wasn't already set.
- if ( ! isset( $current_schedules['minutes_30'] ) ) {
- $current_schedules['minutes_30'] = array(
- 'interval' => 30 * MINUTE_IN_SECONDS,
- 'display' => 'Every 30 minutes',
- );
- }
-
- return $current_schedules;
- }
-
- /**
- * Activate a single cron
- *
- * @param string $cron_name
- *
- * @return bool
- */
- public function activate_cron( $cron_name ) {
-
- if ( ! $this->is_cron_valid( $cron_name ) ) {
- return false;
- }
-
- if ( ! $this->check_cron( $cron_name ) ) {
- wp_schedule_event( time(), $this->crons[ $cron_name ]['interval'], $this->crons[ $cron_name ]['method'] );
- }
- }
-
- /**
- * Activates widget update cron task.
- */
- public function activate_all_crons() {
-
- if ( ! Jetpack::is_module_active( 'videopress' ) ) {
- return false;
- }
-
- foreach ( $this->crons as $cron_name => $cron ) {
- if ( ! $this->check_cron( $cron_name ) ) {
- wp_schedule_event( time(), $cron['interval'], $cron['method'] );
- }
- }
- }
-
- /**
- * Only activate the crons if it is Jetpack that was activated.
- *
- * @param string $plugin_file_name
- */
- public function activate_crons_on_jetpack_activation( $plugin_file_name ) {
-
- if ( plugin_basename( JETPACK__PLUGIN_FILE ) === $plugin_file_name ) {
- $this->activate_all_crons();
- }
- }
-
- /**
- * Deactivates any crons associated with the VideoPress module.
- *
- * @return bool
- */
- public function deactivate_cron( $cron_name ) {
-
- if ( ! $this->is_cron_valid( $cron_name ) ) {
- return false;
- }
-
- $next_scheduled_time = $this->check_cron( $cron_name );
- wp_unschedule_event( $next_scheduled_time, $this->crons[ $cron_name ]['method'] );
-
- return true;
- }
-
- /**
- * Deactivates any crons associated with the VideoPress module..
- */
- public function deactivate_all_crons() {
-
- foreach ( $this->crons as $cron_name => $cron ) {
- $this->deactivate_cron( $cron_name );
- }
- }
-
- /**
- * Is the given cron job currently active?
- *
- * If so, return when it will next run,
- *
- * @param string $cron_name
- *
- * @return int|bool Timestamp of the next run time OR false.
- */
- public function check_cron( $cron_name ) {
- if ( ! $this->is_cron_valid( $cron_name ) ) {
- return false;
- }
-
- return wp_next_scheduled( $this->crons[ $cron_name ]['method'] );
- }
-
- /**
- * Check that the given cron job name is valid.
- *
- * @param string $cron_name
- *
- * @return bool
- */
- public function is_cron_valid( $cron_name ) {
-
- if ( ! isset( $this->crons[ $cron_name ]['method'] ) || ! isset( $this->crons[ $cron_name ]['interval'] ) ) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Get a list of all of the crons that are available.
- *
- * @return array
- */
- public function get_crons() {
- return $this->crons;
- }
-}
diff --git a/plugins/jetpack/modules/videopress/class.videopress-video.php b/plugins/jetpack/modules/videopress/class.videopress-video.php
deleted file mode 100644
index a8c3a6b8..00000000
--- a/plugins/jetpack/modules/videopress/class.videopress-video.php
+++ /dev/null
@@ -1,378 +0,0 @@
-<?php
-/**
- * VideoPress video object retrieved from VideoPress servers and parsed.
- *
- * @since 1.3
- */
-class VideoPress_Video {
- public $version = 3;
-
- /**
- * Manifest version returned by remote service.
- *
- * @var string
- * @since 1.3
- */
- const manifest_version = '1.5';
-
- /**
- * Expiration of the video expressed in Unix time
- *
- * @var int
- * @since 1.3
- */
- public $expires;
-
- /**
- * VideoPress unique identifier
- *
- * @var string
- * @since 1.3
- */
- public $guid;
-
- /**
- * WordPress.com blog identifier
- *
- * @var int
- * @since 1.5
- */
- public $blog_id;
-
- /**
- * Remote blog attachment identifier
- *
- * @var int
- * @since 1.5
- */
- public $post_id;
-
- /**
- * Maximum desired width.
- *
- * @var int
- * @since 1.3
- */
- public $maxwidth;
-
- /**
- * Video width calculated based on original video dimensions and the requested maxwidth
- *
- * @var int
- * @since 1.3
- */
- public $calculated_width;
-
- /**
- * Video height calculated based on original video dimensions and the requested maxwidth
- *
- * @var int
- * @since 1.3
- */
- public $calculated_height;
-
- /**
- * Video title
- *
- * @var string
- * @since 1.3
- */
- public $title;
-
- /**
- * Video description
- *
- * @var string
- * @since 4.4
- */
- public $description;
-
- /**
- * Directionality of title text. ltr or rtl
- *
- * @var string
- * @since 1.3
- */
- public $text_direction;
-
- /**
- * Text and audio language as ISO 639-2 language code
- *
- * @var string
- * @since 1.3
- */
- public $language;
-
- /**
- * Video duration in whole seconds
- *
- * @var int
- * @since 1.3
- */
- public $duration;
-
- /**
- * Recommended minimum age of the viewer.
- *
- * @var int
- * @since 1.3
- */
- public $age_rating;
-
- /**
- * Video author has restricted video embedding or sharing
- *
- * @var bool
- * @since 1.3
- */
- public $restricted_embed;
-
- /**
- * Poster frame image URI for the given video guid and calculated dimensions.
- *
- * @var string
- * @since 1.3
- */
- public $poster_frame_uri;
-
- /**
- * Video files associated with the given guid for the calculated dimensions.
- *
- * @var stdClass
- * @since 1.3
- */
- public $videos;
-
- /**
- * Video player information
- *
- * @var stdClass
- * @since 1.3
- */
- public $players;
-
- /**
- * Video player skinning preferences including background color and watermark
- *
- * @var array
- * @since 1.5
- */
- public $skin;
-
- /**
- * Closed captions if available for the given video. Associative array of ISO 639-2 language code and a WebVTT URI
- *
- * @var array
- * @since 1.5
- */
- public $captions;
-
- /**
- * Setup the object.
- * Request video information from VideoPress servers and process the response.
- *
- * @since 1.3
- * @var string $guid VideoPress unique identifier
- * @var int $maxwidth maximum requested video width. final width and height are calculated on VideoPress servers based on the aspect ratio of the original video upload.
- */
- public function __construct( $guid, $maxwidth = 640 ) {
- $this->guid = $guid;
-
- $maxwidth = absint( $maxwidth );
- if ( $maxwidth > 0 ) {
- $this->maxwidth = $maxwidth;
- }
-
- $data = $this->get_data();
- if ( is_wp_error( $data ) || empty( $data ) ) {
- /** This filter is documented in modules/videopress/class.videopress-player.php */
- if ( ! apply_filters( 'jetpack_videopress_use_legacy_player', false ) ) {
- // Unlike the Flash player, the new player does it's own error checking, age gate, etc.
- $data = (object) array(
- 'guid' => $guid,
- 'width' => $maxwidth,
- 'height' => $maxwidth / 16 * 9,
- );
- } else {
- $this->error = $data;
- return;
- }
- }
-
- if ( isset( $data->blog_id ) ) {
- $this->blog_id = absint( $data->blog_id );
- }
-
- if ( isset( $data->post_id ) ) {
- $this->post_id = absint( $data->post_id );
- }
-
- if ( isset( $data->title ) && $data->title !== '' ) {
- $this->title = trim( str_replace( '&nbsp;', ' ', $data->title ) );
- }
-
- if ( isset( $data->description ) && $data->description !== '' ) {
- $this->description = trim( $data->description );
- }
-
- if ( isset( $data->text_direction ) && $data->text_direction === 'rtl' ) {
- $this->text_direction = 'rtl';
- } else {
- $this->text_direction = 'ltr';
- }
-
- if ( isset( $data->language ) ) {
- $this->language = $data->language;
- }
-
- if ( isset( $data->duration ) && $data->duration > 0 ) {
- $this->duration = absint( $data->duration );
- }
-
- if ( isset( $data->width ) && $data->width > 0 ) {
- $this->calculated_width = absint( $data->width );
- }
-
- if ( isset( $data->height ) && $data->height > 0 ) {
- $this->calculated_height = absint( $data->height );
- }
-
- if ( isset( $data->age_rating ) ) {
- $this->age_rating = absint( $this->age_rating );
- }
-
- if ( isset( $data->restricted_embed ) && $data->restricted_embed === true ) {
- $this->restricted_embed = true;
- } else {
- $this->restricted_embed = false;
- }
-
- if ( isset( $data->posterframe ) && $data->posterframe !== '' ) {
- $this->poster_frame_uri = esc_url_raw( $data->posterframe, array( 'http', 'https' ) );
- }
-
- if ( isset( $data->mp4 ) || isset( $data->ogv ) ) {
- $this->videos = new stdClass();
- if ( isset( $data->mp4 ) ) {
- $this->videos->mp4 = $data->mp4;
- }
- if ( isset( $data->ogv ) ) {
- $this->videos->ogv = $data->ogv;
- }
- }
-
- if ( isset( $data->swf ) ) {
- if ( ! isset( $this->players ) ) {
- $this->players = new stdClass();
- }
- $this->players->swf = $data->swf;
- }
-
- if ( isset( $data->skin ) ) {
- $this->skin = $data->skin;
- }
-
- if ( isset( $data->captions ) ) {
- $this->captions = (array) $data->captions;
- }
- }
-
- /**
- * Convert an Expires HTTP header value into Unix time for use in WP Cache
- *
- * @since 1.3
- * @var string $expires_header
- * @return int|bool Unix time or false
- */
- public static function calculate_expiration( $expires_header ) {
- if ( empty( $expires_header ) || ! is_string( $expires_header ) ) {
- return false;
- }
-
- if (
- class_exists( 'DateTimeZone' )
- && method_exists( 'DateTime', 'createFromFormat' )
- ) {
- $expires_date = DateTime::createFromFormat( 'D, d M Y H:i:s T', $expires_header, new DateTimeZone( 'UTC' ) );
- if ( $expires_date instanceof DateTime ) {
- return date_format( $expires_date, 'U' );
- }
- } else {
- $expires_array = strptime( $expires_header, '%a, %d %b %Y %H:%M:%S %Z' );
- if ( is_array( $expires_array ) && isset( $expires_array['tm_hour'] ) && isset( $expires_array['tm_min'] ) && isset( $expires_array['tm_sec'] ) && isset( $expires_array['tm_mon'] ) && isset( $expires_array['tm_mday'] ) && isset( $expires_array['tm_year'] ) ) {
- return gmmktime( $expires_array['tm_hour'], $expires_array['tm_min'], $expires_array['tm_sec'], 1 + $expires_array['tm_mon'], $expires_array['tm_mday'], 1900 + $expires_array['tm_year'] );
- }
- }
- return false;
- }
-
- /**
- * Extract the site's host domain for statistics and comparison against an allowed site list in the case of restricted embeds.
- *
- * @since 1.2
- * @param string $url absolute URL
- * @return bool|string host component of the URL, or false if none found
- */
- public static function hostname( $url ) {
- return parse_url( esc_url_raw( $url ), PHP_URL_HOST );
- }
-
-
- /**
- * Request data from WordPress.com for the given guid, maxwidth, and calculated blog hostname.
- *
- * @since 1.3
- * @return stdClass|WP_Error parsed JSON response or WP_Error if request unsuccessful
- */
- private function get_data() {
- global $wp_version;
-
- $domain = self::hostname( home_url() );
- $request_params = array(
- 'guid' => $this->guid,
- 'domain' => $domain,
- );
- if ( isset( $this->maxwidth ) && $this->maxwidth > 0 ) {
- $request_params['maxwidth'] = $this->maxwidth;
- }
-
- $url = 'http://videopress.com/data/wordpress.json';
- if ( is_ssl() ) {
- $url = 'https://v.wordpress.com/data/wordpress.json';
- }
-
- $response = wp_remote_get(
- add_query_arg( $request_params, $url ),
- array(
- 'redirection' => 1,
- 'user-agent' => 'VideoPress plugin ' . $this->version . '; WordPress ' . $wp_version . ' (' . home_url( '/' ) . ')',
- )
- );
-
- unset( $request_params );
- unset( $url );
- $response_body = wp_remote_retrieve_body( $response );
- $response_code = absint( wp_remote_retrieve_response_code( $response ) );
-
- if ( is_wp_error( $response ) ) {
- return $response;
- } elseif ( $response_code === 400 ) {
- return new WP_Error( 'bad_config', __( 'The VideoPress plugin could not communicate with the VideoPress servers. This error is most likely caused by a misconfigured plugin. Please reinstall or upgrade.', 'jetpack' ) );
- } elseif ( $response_code === 403 ) {
- return new WP_Error( 'http_forbidden', '<p>' . sprintf( __( '<strong>%s</strong> is not an allowed embed site.', 'jetpack' ), esc_html( $domain ) ) . '</p><p>' . __( 'Publisher limits playback of video embeds.', 'jetpack' ) . '</p>' );
- } elseif ( $response_code === 404 ) {
- return new WP_Error( 'http_not_found', '<p>' . sprintf( __( 'No data found for VideoPress identifier: <strong>%s</strong>.', 'jetpack' ), $this->guid ) . '</p>' );
- } elseif ( $response_code !== 200 || empty( $response_body ) ) {
- return;
- } else {
- $expires_header = wp_remote_retrieve_header( $response, 'Expires' );
- if ( ! empty( $expires_header ) ) {
- $expires = self::calculate_expiration( $expires_header );
- if ( ! empty( $expires ) ) {
- $this->expires = $expires;
- }
- }
- return json_decode( $response_body );
- }
- }
-}
diff --git a/plugins/jetpack/modules/videopress/class.videopress-xmlrpc.php b/plugins/jetpack/modules/videopress/class.videopress-xmlrpc.php
deleted file mode 100644
index 73c67d7d..00000000
--- a/plugins/jetpack/modules/videopress/class.videopress-xmlrpc.php
+++ /dev/null
@@ -1,173 +0,0 @@
-<?php
-/**
- * VideoPress playback module markup generator.
- *
- * @since 1.3
- */
-class VideoPress_XMLRPC {
-
- /**
- * @var VideoPress_XMLRPC
- **/
- private static $instance = null;
-
-
- /**
- * Private VideoPress_XMLRPC constructor.
- *
- * Use the VideoPress_XMLRPC::init() method to get an instance.
- */
- private function __construct() {
- add_filter( 'jetpack_xmlrpc_methods', array( $this, 'xmlrpc_methods' ) );
- }
-
- /**
- * Initialize the VideoPress_XMLRPC and get back a singleton instance.
- *
- * @return VideoPress_XMLRPC
- */
- public static function init() {
- if ( is_null( self::$instance ) ) {
- self::$instance = new VideoPress_XMLRPC();
- }
-
- return self::$instance;
- }
-
- /**
- * Adds additional methods the WordPress xmlrpc API for handling VideoPress specific features
- *
- * @param array $methods
- *
- * @return array
- */
- public function xmlrpc_methods( $methods ) {
-
- $methods['jetpack.createMediaItem'] = array( $this, 'create_media_item' );
- $methods['jetpack.updateVideoPressMediaItem'] = array( $this, 'update_videopress_media_item' );
- $methods['jetpack.updateVideoPressPosterImage'] = array( $this, 'update_poster_image' );
-
- return $methods;
- }
-
- /**
- * This is used by the WPCOM VideoPress uploader in order to create a media item with
- * specific meta data about an uploaded file. After this, the transcoding session will
- * update the meta information via the update_videopress_media_item() method.
- *
- * Note: This method technically handles the creation of multiple media objects, though
- * in practice this is never done.
- *
- * @param array $media
- * @return array
- */
- public function create_media_item( $media ) {
- foreach ( $media as & $media_item ) {
- $title = sanitize_title( basename( $media_item['url'] ) );
- $guid = isset( $media['guid'] ) ? $media['guid'] : null;
-
- $media_id = videopress_create_new_media_item( $title, $guid );
-
- wp_update_attachment_metadata(
- $media_id,
- array(
- 'original' => array(
- 'url' => $media_item['url'],
- ),
- )
- );
-
- $media_item['post'] = get_post( $media_id );
- }
-
- return array( 'media' => $media );
- }
-
- /**
- * @param array $request
- *
- * @return bool
- */
- public function update_videopress_media_item( $request ) {
-
- $id = $request['post_id'];
- $status = $request['status'];
- $format = $request['format'];
- $info = $request['info'];
-
- if ( ! $attachment = get_post( $id ) ) {
- return false;
- }
-
- $attachment->guid = $info['original'];
-
- wp_update_post( $attachment );
-
- // Update the vp guid and set it to a direct meta property.
- update_post_meta( $id, 'videopress_guid', $info['guid'] );
-
- $meta = wp_get_attachment_metadata( $id );
-
- $meta['width'] = $info['width'];
- $meta['height'] = $info['height'];
- $meta['original']['url'] = $info['original'];
- $meta['videopress'] = $info;
- $meta['videopress']['url'] = 'https://videopress.com/v/' . $info['guid'];
-
- // Update file statuses
- $valid_formats = array( 'hd', 'ogg', 'mp4', 'dvd' );
- if ( in_array( $format, $valid_formats ) ) {
- $meta['file_statuses'][ $format ] = $status;
- }
-
- if ( ! get_post_meta( $id, '_thumbnail_id', true ) ) {
- // Update the poster in the VideoPress info.
- $thumbnail_id = videopress_download_poster_image( $info['poster'], $id );
-
- if ( is_int( $thumbnail_id ) ) {
- update_post_meta( $id, '_thumbnail_id', $thumbnail_id );
- }
- }
-
- wp_update_attachment_metadata( $id, $meta );
-
- videopress_update_meta_data( $id );
-
- // update the meta to tell us that we're processing or complete
- update_post_meta( $id, 'videopress_status', videopress_is_finished_processing( $id ) ? 'complete' : 'processing' );
-
- return true;
- }
-
- /**
- * @param array $request
- * @return bool
- */
- public function update_poster_image( $request ) {
-
- $post_id = $request['post_id'];
- $poster = $request['poster'];
-
- if ( ! $attachment = get_post( $post_id ) ) {
- return false;
- }
-
- // We add ssl => 1 to make sure that the videos.files.wordpress.com domain is parsed as photon.
- $poster = apply_filters( 'jetpack_photon_url', $poster, array( 'ssl' => 1 ), 'https' );
-
- $meta = wp_get_attachment_metadata( $post_id );
- $meta['videopress']['poster'] = $poster;
- wp_update_attachment_metadata( $post_id, $meta );
-
- // Update the poster in the VideoPress info.
- $thumbnail_id = videopress_download_poster_image( $poster, $post_id );
-
- if ( ! is_int( $thumbnail_id ) ) {
- return false;
- }
-
- update_post_meta( $post_id, '_thumbnail_id', $thumbnail_id );
-
- return true;
- }
-}
diff --git a/plugins/jetpack/modules/videopress/css/editor-rtl.css b/plugins/jetpack/modules/videopress/css/editor-rtl.css
deleted file mode 100644
index 12945cb6..00000000
--- a/plugins/jetpack/modules/videopress/css/editor-rtl.css
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-/* VideoPress Settings Modal style overrides */
-.mce-videopress-field-guid,
-.mce-videopress-field-freedom,
-.mce-videopress-field-flashonly {
- display: none;
-}
-
-.mce-videopress-checkbox .mce-checkbox {
- right: 120px !important;
- width: 100% !important; /* assigning a full width so the label area is clickable */
-}
-
-.mce-videopress-checkbox .mce-label {
- right: 150px !important;
-}
-
-.mce-videopress-checkbox .mce-label-unit {
- position: absolute;
- right: 210px;
- top: 5px;
-}
-
-.mce-videopress-checkbox i.mce-i-checkbox {
- background-color: #fff;
- color: #1e8cbe;
-}
-
-.mce-videopress-checkbox .mce-i-checkbox:before {
- display: inline-block;
- vertical-align: middle;
- width: 16px;
- font: 400 21px/1 dashicons;
- speak: none;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- margin: -3px -3px 0 0;
- content: "\f147";
-}
-
-.mce-videopress-checkbox .mce-i-checkbox.mce-checked:before {
- content: "\f147";
-}
-
-div[class*=mce-videopress-field] input[type=number] {
- width: 70px !important;
- right: 120px !important;
-}
-
-.mce-videopress-field-w .mce-label,
-.mce-videopress-field-at .mce-label {
- width: 115px !important;
- text-align: left;
-}
-
-.mce-videopress-field-unit {
- position: absolute;
- right: 210px;
- top: 5px;
-}
diff --git a/plugins/jetpack/modules/videopress/css/editor-rtl.min.css b/plugins/jetpack/modules/videopress/css/editor-rtl.min.css
deleted file mode 100644
index 460d6f03..00000000
--- a/plugins/jetpack/modules/videopress/css/editor-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.mce-videopress-field-flashonly,.mce-videopress-field-freedom,.mce-videopress-field-guid{display:none}.mce-videopress-checkbox .mce-checkbox{right:120px!important;width:100%!important}.mce-videopress-checkbox .mce-label{right:150px!important}.mce-videopress-checkbox .mce-label-unit{position:absolute;right:210px;top:5px}.mce-videopress-checkbox i.mce-i-checkbox{background-color:#fff;color:#1e8cbe}.mce-videopress-checkbox .mce-i-checkbox:before{display:inline-block;vertical-align:middle;width:16px;font:400 21px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:-3px -3px 0 0;content:"\f147"}.mce-videopress-checkbox .mce-i-checkbox.mce-checked:before{content:"\f147"}div[class*=mce-videopress-field] input[type=number]{width:70px!important;right:120px!important}.mce-videopress-field-at .mce-label,.mce-videopress-field-w .mce-label{width:115px!important;text-align:left}.mce-videopress-field-unit{position:absolute;right:210px;top:5px} \ No newline at end of file
diff --git a/plugins/jetpack/modules/videopress/css/editor.css b/plugins/jetpack/modules/videopress/css/editor.css
deleted file mode 100644
index 69b79dfe..00000000
--- a/plugins/jetpack/modules/videopress/css/editor.css
+++ /dev/null
@@ -1,59 +0,0 @@
-/* VideoPress Settings Modal style overrides */
-.mce-videopress-field-guid,
-.mce-videopress-field-freedom,
-.mce-videopress-field-flashonly {
- display: none;
-}
-
-.mce-videopress-checkbox .mce-checkbox {
- left: 120px !important;
- width: 100% !important; /* assigning a full width so the label area is clickable */
-}
-
-.mce-videopress-checkbox .mce-label {
- left: 150px !important;
-}
-
-.mce-videopress-checkbox .mce-label-unit {
- position: absolute;
- left: 210px;
- top: 5px;
-}
-
-.mce-videopress-checkbox i.mce-i-checkbox {
- background-color: #fff;
- color: #1e8cbe;
-}
-
-.mce-videopress-checkbox .mce-i-checkbox:before {
- display: inline-block;
- vertical-align: middle;
- width: 16px;
- font: 400 21px/1 dashicons;
- speak: none;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- margin: -3px 0 0 -3px;
- content: "\f147";
-}
-
-.mce-videopress-checkbox .mce-i-checkbox.mce-checked:before {
- content: "\f147";
-}
-
-div[class*=mce-videopress-field] input[type=number] {
- width: 70px !important;
- left: 120px !important;
-}
-
-.mce-videopress-field-w .mce-label,
-.mce-videopress-field-at .mce-label {
- width: 115px !important;
- text-align: right;
-}
-
-.mce-videopress-field-unit {
- position: absolute;
- left: 210px;
- top: 5px;
-}
diff --git a/plugins/jetpack/modules/videopress/css/editor.min.css b/plugins/jetpack/modules/videopress/css/editor.min.css
deleted file mode 100644
index f3a010b7..00000000
--- a/plugins/jetpack/modules/videopress/css/editor.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-.mce-videopress-field-flashonly,.mce-videopress-field-freedom,.mce-videopress-field-guid{display:none}.mce-videopress-checkbox .mce-checkbox{left:120px!important;width:100%!important}.mce-videopress-checkbox .mce-label{left:150px!important}.mce-videopress-checkbox .mce-label-unit{position:absolute;left:210px;top:5px}.mce-videopress-checkbox i.mce-i-checkbox{background-color:#fff;color:#1e8cbe}.mce-videopress-checkbox .mce-i-checkbox:before{display:inline-block;vertical-align:middle;width:16px;font:400 21px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:-3px 0 0 -3px;content:"\f147"}.mce-videopress-checkbox .mce-i-checkbox.mce-checked:before{content:"\f147"}div[class*=mce-videopress-field] input[type=number]{width:70px!important;left:120px!important}.mce-videopress-field-at .mce-label,.mce-videopress-field-w .mce-label{width:115px!important;text-align:right}.mce-videopress-field-unit{position:absolute;left:210px;top:5px} \ No newline at end of file
diff --git a/plugins/jetpack/modules/videopress/css/videopress-editor-style-rtl.css b/plugins/jetpack/modules/videopress/css/videopress-editor-style-rtl.css
deleted file mode 100644
index c3af72cf..00000000
--- a/plugins/jetpack/modules/videopress/css/videopress-editor-style-rtl.css
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-/**
- * VideoPress styles for Editor
- */
-.videopress-editor-wrapper {
- position: relative;
- max-width: 100%;
- padding: 56.25% 0 0;
- height: 0;
- overflow: hidden;
-}
-.tmpl-videopress_iframe_next iframe {
- position: absolute;
- top: 0;
- right: 0;
- max-width: 100%;
- max-height: 100%;
-}
-body.rtl .tmpl-videopress_iframe_next iframe {
- right: auto;
- left: 0;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/videopress/css/videopress-editor-style-rtl.min.css b/plugins/jetpack/modules/videopress/css/videopress-editor-style-rtl.min.css
deleted file mode 100644
index 53c667e8..00000000
--- a/plugins/jetpack/modules/videopress/css/videopress-editor-style-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.videopress-editor-wrapper{position:relative;max-width:100%;padding:56.25% 0 0;height:0;overflow:hidden}.tmpl-videopress_iframe_next iframe{position:absolute;top:0;right:0;max-width:100%;max-height:100%}body.rtl .tmpl-videopress_iframe_next iframe{right:auto;left:0} \ No newline at end of file
diff --git a/plugins/jetpack/modules/videopress/css/videopress-editor-style.css b/plugins/jetpack/modules/videopress/css/videopress-editor-style.css
deleted file mode 100644
index b2c29c5f..00000000
--- a/plugins/jetpack/modules/videopress/css/videopress-editor-style.css
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * VideoPress styles for Editor
- */
-.videopress-editor-wrapper {
- position: relative;
- max-width: 100%;
- padding: 56.25% 0 0;
- height: 0;
- overflow: hidden;
-}
-.tmpl-videopress_iframe_next iframe {
- position: absolute;
- top: 0;
- left: 0;
- max-width: 100%;
- max-height: 100%;
-}
-body.rtl .tmpl-videopress_iframe_next iframe {
- left: auto;
- right: 0;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/videopress/css/videopress-editor-style.min.css b/plugins/jetpack/modules/videopress/css/videopress-editor-style.min.css
deleted file mode 100644
index 546cfc5c..00000000
--- a/plugins/jetpack/modules/videopress/css/videopress-editor-style.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-.videopress-editor-wrapper{position:relative;max-width:100%;padding:56.25% 0 0;height:0;overflow:hidden}.tmpl-videopress_iframe_next iframe{position:absolute;top:0;left:0;max-width:100%;max-height:100%}body.rtl .tmpl-videopress_iframe_next iframe{left:auto;right:0} \ No newline at end of file
diff --git a/plugins/jetpack/modules/videopress/editor-media-view.php b/plugins/jetpack/modules/videopress/editor-media-view.php
deleted file mode 100644
index ed65a08c..00000000
--- a/plugins/jetpack/modules/videopress/editor-media-view.php
+++ /dev/null
@@ -1,236 +0,0 @@
-<?php
-
-/**
- * WordPress Shortcode Editor View JS Code
- */
-function videopress_handle_editor_view_js() {
- global $content_width;
- $current_screen = get_current_screen();
- if ( ! isset( $current_screen->id ) || $current_screen->base !== 'post' ) {
- return;
- }
-
- add_action( 'admin_print_footer_scripts', 'videopress_editor_view_js_templates' );
-
- wp_enqueue_style( 'videopress-editor-ui', plugins_url( 'css/editor.css', __FILE__ ) );
- wp_enqueue_script(
- 'videopress-editor-view',
- Jetpack::get_file_url_for_environment(
- '_inc/build/videopress/js/editor-view.min.js',
- 'modules/videopress/js/editor-view.js'
- ),
- array( 'wp-util', 'jquery' ),
- false,
- true
- );
- wp_localize_script(
- 'videopress-editor-view',
- 'vpEditorView',
- array(
- 'home_url_host' => parse_url( home_url(), PHP_URL_HOST ),
- 'min_content_width' => VIDEOPRESS_MIN_WIDTH,
- 'content_width' => $content_width,
- 'modal_labels' => array(
- 'title' => esc_html__( 'VideoPress Shortcode', 'jetpack' ),
- 'guid' => esc_html__( 'Video ID', 'jetpack' ),
- 'w' => esc_html__( 'Video Width', 'jetpack' ),
- 'w_unit' => esc_html__( 'pixels', 'jetpack' ),
- /* Translators: example of usage of this is "Start Video After 10 seconds" */
- 'at' => esc_html__( 'Start Video After', 'jetpack' ),
- 'at_unit' => esc_html__( 'seconds', 'jetpack' ),
- 'hd' => esc_html__( 'High definition on by default', 'jetpack' ),
- 'permalink' => esc_html__( 'Link the video title to its URL on VideoPress.com', 'jetpack' ),
- 'autoplay' => esc_html__( 'Autoplay video on page load', 'jetpack' ),
- 'loop' => esc_html__( 'Loop video playback', 'jetpack' ),
- 'freedom' => esc_html__( 'Use only Open Source codecs (may degrade performance)', 'jetpack' ),
- 'flashonly' => esc_html__( 'Use legacy Flash Player (not recommended)', 'jetpack' ),
- ),
- )
- );
-
- add_editor_style( plugins_url( 'css/videopress-editor-style.css', __FILE__ ) );
-}
-add_action( 'admin_notices', 'videopress_handle_editor_view_js' );
-
-/**
- * WordPress Editor Views
- */
-function videopress_editor_view_js_templates() {
- /**
- * This template uses the following parameters, and displays the video as an iframe:
- * - data.guid // The guid of the video.
- * - data.width // The width of the iframe.
- * - data.height // The height of the iframe.
- * - data.urlargs // Arguments serialized into a get string.
- *
- * In addition, the calling script will need to ensure that the following
- * JS file is added to the header of the editor iframe:
- * - https://s0.wp.com/wp-content/plugins/video/assets/js/next/videopress-iframe.js
- */
- ?>
- <script type="text/html" id="tmpl-videopress_iframe_vnext">
- <div class="tmpl-videopress_iframe_next" style="max-height:{{ data.height }}px;">
- <div class="videopress-editor-wrapper" style="padding-top:{{ data.ratio }}%;">
- <iframe style="display: block;" width="{{ data.width }}" height="{{ data.height }}" src="https://videopress.com/embed/{{ data.guid }}?{{ data.urlargs }}" frameborder='0' allowfullscreen></iframe>
- </div>
- </div>
- </script>
- <?php
-}
-
-/*************************************************\
-| This is the chunk that handles overriding core |
-| media stuff so VideoPress can display natively. |
-\*/
-
-/**
- * Media Grid:
- * Filter out any videopress video posters that we've downloaded,
- * so that they don't seem to display twice.
- */
-add_filter( 'ajax_query_attachments_args', 'videopress_ajax_query_attachments_args' );
-function videopress_ajax_query_attachments_args( $args ) {
- $meta_query = array(
- array(
- 'key' => 'videopress_poster_image',
- 'compare' => 'NOT EXISTS',
- ),
- );
-
- // If there was already a meta query, let's AND it via
- // nesting it with our new one. No need to specify the
- // relation, as it defaults to AND.
- if ( ! empty( $args['meta_query'] ) ) {
- $meta_query[] = $args['meta_query'];
- }
- $args['meta_query'] = $meta_query;
-
- return $args;
-}
-
-/**
- * Media List:
- * Do the same as ^^ but for the list view.
- */
-add_action( 'pre_get_posts', 'videopress_media_list_table_query' );
-function videopress_media_list_table_query( $query ) {
-
- if (
- ! function_exists( 'get_current_screen' )
- || is_null( get_current_screen() )
- ) {
- return;
- }
-
- if ( is_admin() && $query->is_main_query() && ( 'upload' === get_current_screen()->id ) ) {
- $meta_query = array(
- array(
- 'key' => 'videopress_poster_image',
- 'compare' => 'NOT EXISTS',
- ),
- );
-
- if ( $old_meta_query = $query->get( 'meta_query' ) ) {
- $meta_query[] = $old_meta_query;
- }
-
- $query->set( 'meta_query', $meta_query );
- }
-}
-
-/**
- * Make sure that any Video that has a VideoPress GUID passes that data back.
- */
-add_filter( 'wp_prepare_attachment_for_js', 'videopress_prepare_attachment_for_js' );
-function videopress_prepare_attachment_for_js( $post ) {
- if ( 'video' === $post['type'] ) {
- $guid = get_post_meta( $post['id'], 'videopress_guid' );
- if ( $guid ) {
- $post['videopress_guid'] = $guid;
- }
- }
- return $post;
-}
-
-/**
- * Wherever the Media Modal is deployed, also deploy our overrides.
- */
-add_action( 'wp_enqueue_media', 'add_videopress_media_overrides' );
-function add_videopress_media_overrides() {
- add_action( 'admin_print_footer_scripts', 'videopress_override_media_templates', 11 );
-}
-
-/**
- * Our video overrides!
- *
- * We have a template for the iframe to get injected.
- */
-function videopress_override_media_templates() {
- ?>
- <script type="text/html" id="tmpl-videopress_iframe_vnext">
- <iframe style="display: block; max-width: 100%;" width="{{ data.width }}" height="{{ data.height }}" src="https://videopress.com/embed/{{ data.guid }}?{{ data.urlargs }}" frameborder='0' allowfullscreen></iframe>
- </script>
- <script>
- (function( media ){
- // This handles the media library modal attachment details display.
- if ( 'undefined' !== typeof media.view.Attachment.Details.TwoColumn ) {
- var TwoColumn = media.view.Attachment.Details.TwoColumn,
- old_render = TwoColumn.prototype.render,
- vp_template = wp.template('videopress_iframe_vnext');
-
- TwoColumn.prototype.render = function() {
- // Have the original renderer run first.
- old_render.apply( this, arguments );
-
- // Now our stuff!
- if ( 'video' === this.model.get('type') ) {
- if ( this.model.get('videopress_guid') ) {
- this.$('.attachment-media-view .thumbnail-video').html( vp_template( {
- guid : this.model.get('videopress_guid'),
- width : this.model.get('width'),
- height : this.model.get('height')
- }));
- }
- }
- };
- } else { /* console.log( 'media.view.Attachment.Details.TwoColumn undefined' ); */ }
-
- // This handles the recreating of the core video shortcode when editing the mce embed.
- if ( 'undefined' !== typeof media.video ) {
- media.video.defaults.videopress_guid = '';
-
- // For some reason, even though we're not currently changing anything, the following proxy
- // function is necessary to include the above default `videopress_guid` param. ¯\_(ツ)_/¯
- var old_video_shortcode = media.video.shortcode;
- media.video.shortcode = function( model ) {
- // model.videopress_guid = 'FOOBAR';
- return old_video_shortcode( model );
- };
- } else { /* console.log( 'media.video undefined' ); */ }
-
- })( wp.media );
- </script>
- <?php
-}
-
-/**
- * Properly inject VideoPress data into Core shortcodes, and
- * generate videopress shortcodes for purely remote videos.
- */
-add_filter( 'media_send_to_editor', 'videopress_media_send_to_editor', 10, 3 );
-function videopress_media_send_to_editor( $html, $id, $attachment ) {
- $videopress_guid = get_post_meta( $id, 'videopress_guid', true );
- if ( $videopress_guid && videopress_is_valid_guid( $videopress_guid ) ) {
- if ( '[video ' === substr( $html, 0, 7 ) ) {
- $html = sprintf( '[videopress %1$s]', esc_attr( $videopress_guid ) );
-
- } elseif ( '<a href=' === substr( $html, 0, 8 ) ) {
- // We got here because `wp_attachment_is()` returned false for
- // video, because there isn't a local copy of the file.
- $html = sprintf( '[videopress %1$s]', esc_attr( $videopress_guid ) );
- }
- } elseif ( videopress_is_attachment_without_guid( $id ) ) {
- $html = sprintf( '[videopress postid=%d]', $id );
- }
- return $html;
-}
diff --git a/plugins/jetpack/modules/videopress/js/editor-view.js b/plugins/jetpack/modules/videopress/js/editor-view.js
deleted file mode 100644
index 9f64859f..00000000
--- a/plugins/jetpack/modules/videopress/js/editor-view.js
+++ /dev/null
@@ -1,264 +0,0 @@
-/* global tinyMCE, vpEditorView */
-(function( $, wp, vpEditorView ){
- wp.mce = wp.mce || {};
- if ( 'undefined' === typeof wp.mce.views ) {
- return;
- }
- wp.mce.videopress_wp_view_renderer = {
- shortcode_string : 'videopress',
- shortcode_data : {},
- defaults : {
- w : '',
- at : '',
- permalink : true,
- hd : false,
- loop : false,
- freedom : false,
- autoplay : false,
- flashonly : false
- },
- coerce : wp.media.coerce,
- template : wp.template( 'videopress_iframe_vnext' ),
- getContent : function() {
- var urlargs = 'for=' + encodeURIComponent( vpEditorView.home_url_host ),
- named = this.shortcode.attrs.named,
- options, key, width;
-
- for ( key in named ) {
- switch ( key ) {
- case 'at' :
- if ( parseInt( named[ key ], 10 ) ) {
- urlargs += '&' + key + '=' + parseInt( named[ key ], 10 );
- } // Else omit, as it's the default.
- break;
- case 'permalink' :
- if ( 'false' === named[ key ] ) {
- urlargs += '&' + key + '=0';
- } // Else omit, as it's the default.
- break;
- case 'hd' :
- case 'loop' :
- case 'autoplay' :
- if ( 'true' === named[ key ] ) {
- urlargs += '&' + key + '=1';
- } // Else omit, as it's the default.
- break;
- default:
- // Unknown parameters? Ditch it!
- break;
- }
- }
-
- options = {
- width : vpEditorView.content_width,
- height : ( vpEditorView.content_width * 0.5625 ),
- guid : this.shortcode.attrs.numeric[0],
- urlargs : urlargs
- };
-
- if ( typeof named.w !== 'undefined' ) {
- width = parseInt( named.w, 10 );
- if ( width >= vpEditorView.min_content_width && width < vpEditorView.content_width ) {
- options.width = width;
- options.height = parseInt( width * 0.5625, 10 );
- }
- }
-
- options.ratio = 100 * ( options.height / options.width );
-
- return this.template( options );
- },
- edit: function( data ) {
- var shortcode_data = wp.shortcode.next( this.shortcode_string, data),
- named = shortcode_data.shortcode.attrs.named,
- editor = tinyMCE.activeEditor,
- renderer = this,
- oldRenderFormItem = tinyMCE.ui.FormItem.prototype.renderHtml;
-
- /**
- * Override TextBox renderHtml to support html5 attrs.
- * @link https://github.com/tinymce/tinymce/pull/2784
- *
- * @returns {string}
- */
- tinyMCE.ui.TextBox.prototype.renderHtml = function() {
- var self = this,
- settings = self.settings,
- element = document.createElement( settings.multiline ? 'textarea' : 'input' ),
- extraAttrs = [
- 'rows',
- 'spellcheck',
- 'maxLength',
- 'size',
- 'readonly',
- 'min',
- 'max',
- 'step',
- 'list',
- 'pattern',
- 'placeholder',
- 'required',
- 'multiple'
- ],
- i, key;
-
- for ( i = 0; i < extraAttrs.length; i++ ) {
- key = extraAttrs[ i ];
- if ( typeof settings[ key ] !== 'undefined' ) {
- element.setAttribute( key, settings[ key ] );
- }
- }
-
- if ( settings.multiline ) {
- element.innerText = self.state.get( 'value' );
- } else {
- element.setAttribute( 'type', settings.subtype ? settings.subtype : 'text' );
- element.setAttribute( 'value', self.state.get( 'value' ) );
- }
-
- element.id = self._id;
- element.className = self.classes;
- element.setAttribute( 'hidefocus', 1 );
- if ( self.disabled() ) {
- element.disabled = true;
- }
-
- return element.outerHTML;
- };
-
- tinyMCE.ui.FormItem.prototype.renderHtml = function() {
- _.each( vpEditorView.modal_labels, function( value, key ) {
- if ( value === this.settings.items.text ) {
- this.classes.add( 'videopress-field-' + key );
- }
- }, this );
-
- if ( _.contains( [
- vpEditorView.modal_labels.hd,
- vpEditorView.modal_labels.permalink,
- vpEditorView.modal_labels.autoplay,
- vpEditorView.modal_labels.loop,
- vpEditorView.modal_labels.freedom,
- vpEditorView.modal_labels.flashonly
- ], this.settings.items.text ) ) {
- this.classes.add( 'videopress-checkbox' );
- }
- return oldRenderFormItem.call( this );
- };
-
- /**
- * Populate the defaults.
- */
- _.each( this.defaults, function( value, key ) {
- named[ key ] = this.coerce( named, key);
- }, this );
-
- /**
- * Declare the fields that will show in the popup when editing the shortcode.
- */
- editor.windowManager.open( {
- title : vpEditorView.modal_labels.title,
- id : 'videopress-shortcode-settings-modal',
- width : 520,
- height : 240,
- body : [
- {
- type : 'textbox',
- disabled : true,
- name : 'guid',
- label : vpEditorView.modal_labels.guid,
- value : shortcode_data.shortcode.attrs.numeric[0]
- }, {
- type : 'textbox',
- subtype : 'number',
- min : vpEditorView.min_content_width, // The `min` may supported be in the future. https://github.com/tinymce/tinymce/pull/2784
- name : 'w',
- label : vpEditorView.modal_labels.w,
- value : named.w
- }, {
- type : 'textbox',
- subtype : 'number',
- min : 0, // The `min` may supported be in the future. https://github.com/tinymce/tinymce/pull/2784
- name : 'at',
- label : vpEditorView.modal_labels.at,
- value : named.at
- }, {
- type : 'checkbox',
- name : 'hd',
- label : vpEditorView.modal_labels.hd,
- checked : named.hd
- }, {
- type : 'checkbox',
- name : 'permalink',
- label : vpEditorView.modal_labels.permalink,
- checked : named.permalink
- }, {
- type : 'checkbox',
- name : 'autoplay',
- label : vpEditorView.modal_labels.autoplay,
- checked : named.autoplay
- }, {
- type : 'checkbox',
- name : 'loop',
- label : vpEditorView.modal_labels.loop,
- checked : named.loop
- }, {
- type : 'checkbox',
- name : 'freedom',
- label : vpEditorView.modal_labels.freedom,
- checked : named.freedom
- }, {
- type : 'checkbox',
- name : 'flashonly',
- label : vpEditorView.modal_labels.flashonly,
- checked : named.flashonly
- }
- ],
- onsubmit : function( e ) {
- var args = {
- tag : renderer.shortcode_string,
- type : 'single',
- attrs : {
- named : _.pick( e.data, _.keys( renderer.defaults ) ),
- numeric : [ e.data.guid ]
- }
- };
-
- if ( '0' === args.attrs.named.at ) {
- args.attrs.named.at = '';
- }
-
- _.each( renderer.defaults, function( value, key ) {
- args.attrs.named[ key ] = this.coerce( args.attrs.named, key );
-
- if ( value === args.attrs.named[ key ] ) {
- delete args.attrs.named[ key ];
- }
- }, renderer );
-
- editor.insertContent( wp.shortcode.string( args ) );
- },
- onopen : function ( e ) {
- var prefix = 'mce-videopress-field-';
- _.each( ['w', 'at'], function( value ) {
- e.target.$el.find( '.' + prefix + value + ' .mce-container-body' ).append( '<span class="' + prefix + 'unit ' + prefix + 'unit-' + value + '">' + vpEditorView.modal_labels[ value + '_unit' ] );
- } );
- $('body').addClass( 'modal-open' );
- },
- onclose: function () {
- $('body').removeClass( 'modal-open' );
- }
- } );
-
- // Set it back to its original renderer.
- tinyMCE.ui.FormItem.prototype.renderHtml = oldRenderFormItem;
- }
- };
- wp.mce.views.register( 'videopress', wp.mce.videopress_wp_view_renderer );
-
- // Extend the videopress one to also handle `wpvideo` instances.
- wp.mce.wpvideo_wp_view_renderer = _.extend( {}, wp.mce.videopress_wp_view_renderer, {
- shortcode_string : 'wpvideo'
- });
- wp.mce.views.register( 'wpvideo', wp.mce.wpvideo_wp_view_renderer );
-}( jQuery, wp, vpEditorView ));
diff --git a/plugins/jetpack/modules/videopress/js/media-video-widget-extensions.js b/plugins/jetpack/modules/videopress/js/media-video-widget-extensions.js
deleted file mode 100644
index 2fa8c93b..00000000
--- a/plugins/jetpack/modules/videopress/js/media-video-widget-extensions.js
+++ /dev/null
@@ -1,45 +0,0 @@
-window.wp = window.wp || {};
-
-( function( wp ) {
- if ( wp.mediaWidgets ) {
-
- // Over-ride core media_video#mapMediaToModelProps to set the url based upon videopress_guid if it exists.
- wp.mediaWidgets.controlConstructors.media_video.prototype.mapMediaToModelProps = ( function( originalMapMediaToModelProps ) {
- return function( mediaFrameProps ) {
- var newProps, originalProps, videoPressGuid;
- originalProps = originalMapMediaToModelProps.call( this, mediaFrameProps );
- newProps = _.extend( {}, originalProps );
-
- // API response on new media will have the guid at videopress.guid.
- if ( mediaFrameProps.videopress && mediaFrameProps.videopress.guid ) {
- videoPressGuid = mediaFrameProps.videopress.guid;
- }
-
- // Selecting an existing VideoPress file will have the guid at .videopress_guid[ 0 ].
- if ( ! videoPressGuid && mediaFrameProps.videopress_guid && mediaFrameProps.videopress_guid.length ) {
- videoPressGuid = mediaFrameProps.videopress_guid[ 0 ];
- }
-
- if ( videoPressGuid ) {
- newProps = _.extend( {}, originalProps, {
- url: 'https://videopress.com/v/' + videoPressGuid,
- attachment_id: 0
- });
- }
- return newProps;
- };
- }( wp.mediaWidgets.controlConstructors.media_video.prototype.mapMediaToModelProps ));
-
- // Over-ride core media_video#isHostedVideo() to add support for videopress oembed urls.
- wp.mediaWidgets.controlConstructors.media_video.prototype.isHostedVideo = (function( originalIsHostedVideo ) {
- return function( url ) {
- var parsedUrl = document.createElement( 'a' );
- parsedUrl.href = url;
- if ( 'videopress.com' === parsedUrl.hostname ) {
- return true;
- }
- return originalIsHostedVideo.call( this, url );
- };
- }( wp.mediaWidgets.controlConstructors.media_video.prototype.isHostedVideo ));
- }
-} )( window.wp );
diff --git a/plugins/jetpack/modules/videopress/js/videopress-plupload.js b/plugins/jetpack/modules/videopress/js/videopress-plupload.js
deleted file mode 100644
index 9c8d6240..00000000
--- a/plugins/jetpack/modules/videopress/js/videopress-plupload.js
+++ /dev/null
@@ -1,461 +0,0 @@
-/* global pluploadL10n, plupload, _wpPluploadSettings, JSON */
-
-window.wp = window.wp || {};
-
-( function( exports, $ ) {
- var Uploader, vp;
-
- if ( typeof _wpPluploadSettings === 'undefined' ) {
- return;
- }
-
- /**
- * A WordPress uploader.
- *
- * The Plupload library provides cross-browser uploader UI integration.
- * This object bridges the Plupload API to integrate uploads into the
- * WordPress back end and the WordPress media experience.
- *
- * @param {object} options The options passed to the new plupload instance.
- * @param {object} options.container The id of uploader container.
- * @param {object} options.browser The id of button to trigger the file select.
- * @param {object} options.dropzone The id of file drop target.
- * @param {object} options.plupload An object of parameters to pass to the plupload instance.
- * @param {object} options.params An object of parameters to pass to $_POST when uploading the file.
- * Extends this.plupload.multipart_params under the hood.
- */
- Uploader = function( options ) {
- var self = this,
- isIE = navigator.userAgent.indexOf('Trident/') !== -1 || navigator.userAgent.indexOf('MSIE ') !== -1,
- elements = {
- container: 'container',
- browser: 'browse_button',
- dropzone: 'drop_element'
- },
- key, error;
-
- this.supports = {
- upload: Uploader.browser.supported
- };
-
- this.supported = this.supports.upload;
-
- if ( ! this.supported ) {
- return;
- }
-
- // Arguments to send to pluplad.Uploader().
- // Use deep extend to ensure that multipart_params and other objects are cloned.
- this.plupload = $.extend( true, { multipart_params: {} }, Uploader.defaults );
- this.container = document.body; // Set default container.
-
- // Extend the instance with options.
- //
- // Use deep extend to allow options.plupload to override individual
- // default plupload keys.
- $.extend( true, this, options );
-
- // Proxy all methods so this always refers to the current instance.
- for ( key in this ) {
- if ( $.isFunction( this[ key ] ) ) {
- this[ key ] = $.proxy( this[ key ], this );
- }
- }
-
- // Ensure all elements are jQuery elements and have id attributes,
- // then set the proper plupload arguments to the ids.
- for ( key in elements ) {
- if ( ! this[ key ] ) {
- continue;
- }
-
- this[ key ] = $( this[ key ] ).first();
-
- if ( ! this[ key ].length ) {
- delete this[ key ];
- continue;
- }
-
- if ( ! this[ key ].prop('id') ) {
- this[ key ].prop( 'id', '__wp-uploader-id-' + Uploader.uuid++ );
- }
-
- this.plupload[ elements[ key ] ] = this[ key ].prop('id');
- }
-
- // If the uploader has neither a browse button nor a dropzone, bail.
- if ( ! ( this.browser && this.browser.length ) && ! ( this.dropzone && this.dropzone.length ) ) {
- return;
- }
-
- // Make sure flash sends cookies (seems in IE it does without switching to urlstream mode)
- if ( ! isIE && 'flash' === plupload.predictRuntime( this.plupload ) &&
- ( ! this.plupload.required_features || ! this.plupload.required_features.hasOwnProperty( 'send_binary_string' ) ) ) {
-
- this.plupload.required_features = this.plupload.required_features || {};
- this.plupload.required_features.send_binary_string = true;
- }
-
- // Initialize the plupload instance.
- this.uploader = new plupload.Uploader( this.plupload );
- delete this.plupload;
-
- // Set default params and remove this.params alias.
- this.param( this.params || {} );
- delete this.params;
-
- // Make sure that the VideoPress object is available
- if ( typeof exports.VideoPress !== 'undefined' ) {
- vp = exports.VideoPress;
-
- } else {
- window.console && window.console.error( 'The VideoPress object was not loaded. Errors may occur.' );
- }
-
- /**
- * Custom error callback.
- *
- * Add a new error to the errors collection, so other modules can track
- * and display errors. @see wp.Uploader.errors.
- *
- * @param {string} message
- * @param {object} data
- * @param {plupload.File} file File that was uploaded.
- */
- error = function( message, data, file ) {
- if ( file.attachment ) {
- file.attachment.destroy();
- }
-
- Uploader.errors.unshift({
- message: message || pluploadL10n.default_error,
- data: data,
- file: file
- });
-
- self.error( message, data, file );
- };
-
- /**
- * After the Uploader has been initialized, initialize some behaviors for the dropzone.
- *
- * @param {plupload.Uploader} uploader Uploader instance.
- */
- this.uploader.bind( 'init', function( uploader ) {
- var timer, active, dragdrop,
- dropzone = self.dropzone;
-
- dragdrop = self.supports.dragdrop = uploader.features.dragdrop && ! Uploader.browser.mobile;
-
- // Generate drag/drop helper classes.
- if ( ! dropzone ) {
- return;
- }
-
- dropzone.toggleClass( 'supports-drag-drop', !! dragdrop );
-
- if ( ! dragdrop ) {
- return dropzone.unbind('.wp-uploader');
- }
-
- // 'dragenter' doesn't fire correctly, simulate it with a limited 'dragover'.
- dropzone.bind( 'dragover.wp-uploader', function() {
- if ( timer ) {
- clearTimeout( timer );
- }
-
- if ( active ) {
- return;
- }
-
- dropzone.trigger('dropzone:enter').addClass('drag-over');
- active = true;
- });
-
- dropzone.bind('dragleave.wp-uploader, drop.wp-uploader', function() {
- // Using an instant timer prevents the drag-over class from
- // being quickly removed and re-added when elements inside the
- // dropzone are repositioned.
- //
- // @see https://core.trac.wordpress.org/ticket/21705
- timer = setTimeout( function() {
- active = false;
- dropzone.trigger('dropzone:leave').removeClass('drag-over');
- }, 0 );
- });
-
- self.ready = true;
- $(self).trigger( 'uploader:ready' );
- });
-
- this.uploader.bind( 'postinit', function( up ) {
- up.refresh();
- self.init();
- });
-
- this.uploader.init();
-
- if ( this.browser ) {
- this.browser.on( 'mouseenter', this.refresh );
- } else {
- this.uploader.disableBrowse( true );
- // If HTML5 mode, hide the auto-created file container.
- $('#' + this.uploader.id + '_html5_container').hide();
- }
-
- /**
- * After files were filtered and added to the queue, create a model for each.
- *
- * @event FilesAdded
- * @param {plupload.Uploader} uploader Uploader instance.
- * @param {Array} files Array of file objects that were added to queue by the user.
- */
- this.uploader.bind( 'FilesAdded', function( up, files ) {
- _.each( files, function( file ) {
- var attributes, image;
-
- // Ignore failed uploads.
- if ( plupload.FAILED === file.status ) {
- return;
- }
-
- // Generate attributes for a new `Attachment` model.
- attributes = _.extend({
- file: file,
- uploading: true,
- date: new Date(),
- filename: file.name,
- menuOrder: 0,
- uploadedTo: wp.media.model.settings.post.id
- }, _.pick( file, 'loaded', 'size', 'percent' ) );
-
- // Handle early mime type scanning for images.
- image = /(?:jpe?g|png|gif)$/i.exec( file.name );
-
- // For images set the model's type and subtype attributes.
- if ( image ) {
- attributes.type = 'image';
-
- // `jpeg`, `png` and `gif` are valid subtypes.
- // `jpg` is not, so map it to `jpeg`.
- attributes.subtype = ( 'jpg' === image[0] ) ? 'jpeg' : image[0];
- }
-
- // Create a model for the attachment, and add it to the Upload queue collection
- // so listeners to the upload queue can track and display upload progress.
- file.attachment = wp.media.model.Attachment.create( attributes );
- Uploader.queue.add( file.attachment );
-
- self.added( file.attachment );
- });
-
- up.refresh();
- up.start();
- });
-
- this.uploader.bind( 'UploadProgress', function( up, file ) {
- file.attachment.set( _.pick( file, 'loaded', 'percent' ) );
- self.progress( file.attachment );
- });
-
- /**
- * After a file is successfully uploaded, update its model.
- *
- * @param {plupload.Uploader} uploader Uploader instance.
- * @param {plupload.File} file File that was uploaded.
- * @param {Object} response Object with response properties.
- * @return {mixed}
- */
- this.uploader.bind( 'FileUploaded', function( up, file, response ) {
- var complete;
-
- try {
- response = JSON.parse( response.response );
- } catch ( e ) {
- return error( pluploadL10n.default_error, e, file );
- }
-
- if ( typeof response.media !== 'undefined' ) {
- response = vp.handleRestApiResponse( response, file );
- } else {
- response = vp.handleStandardResponse( response, file );
- }
-
- _.each(['file','loaded','size','percent'], function( key ) {
- file.attachment.unset( key );
- });
-
- file.attachment.set( _.extend( response.data, { uploading: false }) );
- wp.media.model.Attachment.get( response.data.id, file.attachment );
-
- complete = Uploader.queue.all( function( attachment ) {
- return ! attachment.get('uploading');
- });
-
- if ( complete ) {
- vp && vp.resetToOriginalOptions( up );
- Uploader.queue.reset();
- }
-
- self.success( file.attachment );
- });
-
- /**
- * When plupload surfaces an error, send it to the error handler.
- *
- * @param {plupload.Uploader} uploader Uploader instance.
- * @param {Object} error Contains code, message and sometimes file and other details.
- */
- this.uploader.bind( 'Error', function( up, pluploadError ) {
- var message = pluploadL10n.default_error,
- key;
-
- // Check for plupload errors.
- for ( key in Uploader.errorMap ) {
- if ( pluploadError.code === plupload[ key ] ) {
- message = Uploader.errorMap[ key ];
-
- if ( _.isFunction( message ) ) {
- message = message( pluploadError.file, pluploadError );
- }
-
- break;
- }
- }
-
- error( message, pluploadError, pluploadError.file );
- vp && vp.resetToOriginalOptions( up );
- up.refresh();
- });
-
- /**
- * Add in a way for the uploader to reset itself when uploads are complete.
- */
- this.uploader.bind( 'UploadComplete', function( up ) {
- vp && vp.resetToOriginalOptions( up );
- });
-
- /**
- * Before we upload, check to see if this file is a videopress upload, if so, set new options and save the old ones.
- */
- this.uploader.bind( 'BeforeUpload', function( up, file ) {
- if ( typeof file.videopress !== 'undefined' ) {
- vp.originalOptions.url = up.getOption( 'url' );
- vp.originalOptions.multipart_params = up.getOption( 'multipart_params' );
- vp.originalOptions.file_data_name = up.getOption( 'file_data_name' );
-
- up.setOption( 'file_data_name', 'media[]' );
- up.setOption( 'url', file.videopress.upload_action_url );
- up.setOption( 'headers', {
- Authorization: 'X_UPLOAD_TOKEN token="' + file.videopress.upload_token + '" blog_id="' + file.videopress.upload_blog_id + '"'
- });
- }
- });
- };
-
- // Adds the 'defaults' and 'browser' properties.
- $.extend( Uploader, _wpPluploadSettings );
-
- Uploader.uuid = 0;
-
- // Map Plupload error codes to user friendly error messages.
- Uploader.errorMap = {
- 'FAILED': pluploadL10n.upload_failed,
- 'FILE_EXTENSION_ERROR': pluploadL10n.invalid_filetype,
- 'IMAGE_FORMAT_ERROR': pluploadL10n.not_an_image,
- 'IMAGE_MEMORY_ERROR': pluploadL10n.image_memory_exceeded,
- 'IMAGE_DIMENSIONS_ERROR': pluploadL10n.image_dimensions_exceeded,
- 'GENERIC_ERROR': pluploadL10n.upload_failed,
- 'IO_ERROR': pluploadL10n.io_error,
- 'HTTP_ERROR': pluploadL10n.http_error,
- 'SECURITY_ERROR': pluploadL10n.security_error,
-
- 'FILE_SIZE_ERROR': function( file ) {
- return pluploadL10n.file_exceeds_size_limit.replace('%s', file.name);
- }
- };
-
- $.extend( Uploader.prototype, {
- /**
- * Acts as a shortcut to extending the uploader's multipart_params object.
- *
- * param( key )
- * Returns the value of the key.
- *
- * param( key, value )
- * Sets the value of a key.
- *
- * param( map )
- * Sets values for a map of data.
- */
- param: function( key, value ) {
- if ( arguments.length === 1 && typeof key === 'string' ) {
- return this.uploader.settings.multipart_params[ key ];
- }
-
- if ( arguments.length > 1 ) {
- this.uploader.settings.multipart_params[ key ] = value;
- } else {
- $.extend( this.uploader.settings.multipart_params, key );
- }
- },
-
- /**
- * Make a few internal event callbacks available on the wp.Uploader object
- * to change the Uploader internals if absolutely necessary.
- */
- init: function() {},
- error: function() {},
- success: function() {},
- added: function() {},
- progress: function() {},
- complete: function() {},
- refresh: function() {
- var node, attached, container, id;
-
- if ( this.browser ) {
- node = this.browser[0];
-
- // Check if the browser node is in the DOM.
- while ( node ) {
- if ( node === document.body ) {
- attached = true;
- break;
- }
- node = node.parentNode;
- }
-
- // If the browser node is not attached to the DOM, use a
- // temporary container to house it, as the browser button
- // shims require the button to exist in the DOM at all times.
- if ( ! attached ) {
- id = 'wp-uploader-browser-' + this.uploader.id;
-
- container = $( '#' + id );
- if ( ! container.length ) {
- container = $('<div class="wp-uploader-browser" />').css({
- position: 'fixed',
- top: '-1000px',
- left: '-1000px',
- height: 0,
- width: 0
- }).attr( 'id', 'wp-uploader-browser-' + this.uploader.id ).appendTo('body');
- }
-
- container.append( this.browser );
- }
- }
-
- this.uploader.refresh();
- }
- });
-
- // Create a collection of attachments in the upload queue,
- // so that other modules can track and display upload progress.
- Uploader.queue = new wp.media.model.Attachments( [], { query: false });
-
- // Create a collection to collect errors incurred while attempting upload.
- Uploader.errors = new Backbone.Collection();
-
- exports.Uploader = Uploader;
-})( wp, jQuery );
diff --git a/plugins/jetpack/modules/videopress/js/videopress-uploader.js b/plugins/jetpack/modules/videopress/js/videopress-uploader.js
deleted file mode 100644
index 1967f72b..00000000
--- a/plugins/jetpack/modules/videopress/js/videopress-uploader.js
+++ /dev/null
@@ -1,157 +0,0 @@
-/* globals plupload, pluploadL10n, error */
-window.wp = window.wp || {};
-
-( function( wp ) {
- var VideoPress = {
- originalOptions: {},
-
- /**
- * This is the standard uploader response handler.
- */
- handleStandardResponse: function( response, file ) {
- if ( ! _.isObject( response ) || _.isUndefined( response.success ) ) {
- return error(pluploadL10n.default_error, null, file);
-
- } else if ( ! response.success ) {
- return error(response.data && response.data.message, response.data, file);
- }
-
- return response;
- },
-
- /**
- * Handle response from the WPCOM Rest API.
- */
- handleRestApiResponse: function( response, file ) {
- if ( response.media.length !== 1) {
- return error( pluploadL10n.default_error, null, file );
- }
-
- var media = response.media[0],
- mimeParts = media.mime_type.split('/'),
- data = {
- alt : '',
- author : media.author_ID || 0,
- authorName: '',
- caption: '',
- compat: { item: '', meta: '' },
- date: media.date || '',
- dateFormatted: media.date || '',
- description: media.description || '',
- editLink: '',
- filename: media.file || '',
- filesizeHumanReadable: '',
- filesizeInBytes: '',
- height: media.height,
- icon: media.icon || '',
- id: media.ID || '',
- link: media.URL || '',
- menuOrder: 0,
- meta: false,
- mime: media.mime_type || '',
- modified: 0,
- name: '',
- nonces: { update: '', 'delete': '', edit: '' },
- orientation: '',
- sizes: undefined,
- status: '',
- subtype: mimeParts[1] || '',
- title: media.title || '',
- type: mimeParts[0] || '',
- uploadedTo: 1,
- uploadedToLink: '',
- uploadedToTitle: '',
- url: media.URL || '',
- width: media.width,
- success: '',
- videopress: {
- guid: media.videopress_guid || null,
- processing_done: media.videopress_processing_done || false
- }
- };
-
- response.data = data;
-
- return response;
- },
-
- /**
- * Make sure that all of the original variables have been reset, so the uploader
- * doesn't try to go to VideoPress again next time.
- *
- * @param up
- */
- resetToOriginalOptions: function( up ) {
- if ( typeof VideoPress.originalOptions.url !== 'undefined' ) {
- up.setOption( 'url', VideoPress.originalOptions.url );
- delete VideoPress.originalOptions.url;
- }
-
- if ( typeof VideoPress.originalOptions.multipart_params !== 'undefined' ) {
- up.setOption( 'multipart_params', VideoPress.originalOptions.multipart_params );
- delete VideoPress.originalOptions.multipart_params;
- }
-
- if ( typeof VideoPress.originalOptions.file_data_name !== 'undefined' ) {
- up.setOption( 'file_data_name', VideoPress.originalOptions.file_data_name );
- delete VideoPress.originalOptions.file_data_name;
- }
- }
- };
-
- if (typeof wp.Uploader !== 'undefined') {
- var media = wp.media;
-
- /**
- * A plupload code specifically for videopress failures.
- *
- * @type {string}
- */
- plupload.VIDEOPRESS_TOKEN_FAILURE = 'VP_TOKEN_FAILURE';
-
- /**
- * Adds a filter that checks all files to see if they are videopress files and if they are
- * it will download extra metadata for them.
- */
- plupload.addFileFilter( 'videopress_check_uploads', function( maxSize, file, cb ) {
- var mimeParts = file.type.split('/');
- var self = this;
-
- if ( mimeParts[0] === 'video' ) {
- media.ajax( 'videopress-get-upload-token', { async: false, data: { filename: file.name } } ).done( function ( response ) {
- file.videopress = response;
- cb( true );
-
- }).fail( function ( response ) {
- self.trigger( 'Error', {
- code : plupload.VIDEOPRESS_TOKEN_FAILURE,
- message : plupload.translate( 'Could not get the VideoPress token needed for uploading' ),
- file : file,
- response : response
- } );
- cb( false );
- });
-
- } else {
- // Handles the normal max_file_size functionality.
- var undef;
-
- // Invalid file size
- if (file.size !== undef && maxSize && file.size > maxSize) {
- this.trigger('Error', {
- code: plupload.FILE_SIZE_ERROR,
- message: plupload.translate( 'File size error.' ),
- file: file
- });
- cb(false);
- } else {
- cb(true);
- }
- }
- });
- }
-
- wp.VideoPress = VideoPress;
-
-} )( window.wp );
-
diff --git a/plugins/jetpack/modules/videopress/shortcode.php b/plugins/jetpack/modules/videopress/shortcode.php
deleted file mode 100644
index 21b163ef..00000000
--- a/plugins/jetpack/modules/videopress/shortcode.php
+++ /dev/null
@@ -1,248 +0,0 @@
-<?php
-
-/**
- * VideoPress Shortcode Handler
- *
- * This file may or may not be included from the Jetpack VideoPress module.
- */
-
-class VideoPress_Shortcode {
- /** @var VideoPress_Shortcode */
- protected static $instance;
-
- protected function __construct() {
-
- // By explicitly declaring the provider here, we can speed things up by not relying on oEmbed discovery.
- wp_oembed_add_provider( '#^https?://videopress.com/v/.*#', 'http://public-api.wordpress.com/oembed/1.0/', true );
-
- add_shortcode( 'videopress', array( $this, 'shortcode_callback' ) );
- add_shortcode( 'wpvideo', array( $this, 'shortcode_callback' ) );
-
- add_filter( 'wp_video_shortcode_override', array( $this, 'video_shortcode_override' ), 10, 4 );
-
- add_filter( 'oembed_fetch_url', array( $this, 'add_oembed_for_parameter' ) );
-
- $this->add_video_embed_hander();
- }
-
- /**
- * @return VideoPress_Shortcode
- */
- public static function initialize() {
- if ( ! isset( self::$instance ) ) {
- self::$instance = new self();
- }
-
- return self::$instance;
- }
-
- /**
- * Translate a 'videopress' or 'wpvideo' shortcode and arguments into a video player display.
- *
- * Expected input formats:
- *
- * [videopress OcobLTqC]
- * [wpvideo OcobLTqC]
- *
- * @link http://codex.wordpress.org/Shortcode_API Shortcode API
- * @param array $attr shortcode attributes
- * @return string HTML markup or blank string on fail
- */
- public function shortcode_callback( $attr ) {
- global $content_width;
-
- /**
- * We only accept GUIDs as a first unnamed argument.
- */
- $guid = isset( $attr[0] ) ? $attr[0] : null;
-
- if ( isset( $attr['postid'] ) ) {
- $guid = get_post_meta( $attr['postid'], 'videopress_guid', true );
- }
-
- /**
- * Make sure the GUID passed in matches how actual GUIDs are formatted.
- */
- if ( ! videopress_is_valid_guid( $guid ) ) {
- return '';
- }
-
- /**
- * Set the defaults
- */
- $defaults = array(
- 'w' => 0, // Width of the video player, in pixels
- 'at' => 0, // How many seconds in to initially seek to
- 'hd' => true, // Whether to display a high definition version
- 'loop' => false, // Whether to loop the video repeatedly
- 'freedom' => false, // Whether to use only free/libre codecs
- 'autoplay' => false, // Whether to autoplay the video on load
- 'permalink' => true, // Whether to display the permalink to the video
- 'flashonly' => false, // Whether to support the Flash player exclusively
- 'defaultlangcode' => false, // Default language code
- );
-
- $attr = shortcode_atts( $defaults, $attr, 'videopress' );
-
- /**
- * Cast the attributes, post-input.
- */
- $attr['width'] = absint( $attr['w'] );
- $attr['hd'] = (bool) $attr['hd'];
- $attr['freedom'] = (bool) $attr['freedom'];
-
- /**
- * If the provided width is less than the minimum allowed
- * width, or greater than `$content_width` ignore.
- */
- if ( $attr['width'] < VIDEOPRESS_MIN_WIDTH ) {
- $attr['width'] = 0;
- } elseif ( isset( $content_width ) && $content_width > VIDEOPRESS_MIN_WIDTH && $attr['width'] > $content_width ) {
- $attr['width'] = 0;
- }
-
- /**
- * If there was an invalid or unspecified width, set the width equal to the theme's `$content_width`.
- */
- if ( 0 === $attr['width'] && isset( $content_width ) && $content_width >= VIDEOPRESS_MIN_WIDTH ) {
- $attr['width'] = $content_width;
- }
-
- /**
- * If the width isn't an even number, reduce it by one (making it even).
- */
- if ( 1 === ( $attr['width'] % 2 ) ) {
- $attr['width'] --;
- }
-
- /**
- * Filter the default VideoPress shortcode options.
- *
- * @module videopress
- *
- * @since 2.5.0
- *
- * @param array $args Array of VideoPress shortcode options.
- */
- $options = apply_filters(
- 'videopress_shortcode_options',
- array(
- 'at' => (int) $attr['at'],
- 'hd' => $attr['hd'],
- 'loop' => $attr['loop'],
- 'freedom' => $attr['freedom'],
- 'autoplay' => $attr['autoplay'],
- 'permalink' => $attr['permalink'],
- 'force_flash' => (bool) $attr['flashonly'],
- 'defaultlangcode' => $attr['defaultlangcode'],
- 'forcestatic' => false, // This used to be a displayed option, but now is only
- // accessible via the `videopress_shortcode_options` filter.
- )
- );
-
- // Register VideoPress scripts
- wp_register_script( 'videopress', 'https://v0.wordpress.com/js/videopress.js', array( 'jquery', 'swfobject' ), '1.09' );
-
- require_once dirname( __FILE__ ) . '/class.videopress-video.php';
- require_once dirname( __FILE__ ) . '/class.videopress-player.php';
-
- $player = new VideoPress_Player( $guid, $attr['width'], $options );
-
- if ( is_feed() ) {
- return $player->asXML();
- } else {
- return $player->asHTML();
- }
- }
-
- /**
- * Override the standard video short tag to also process videopress files as well.
- *
- * This will, parse the src given, and if it is a videopress file, it will parse as the
- * VideoPress shortcode instead.
- *
- * @param string $html Empty variable to be replaced with shortcode markup.
- * @param array $attr Attributes of the video shortcode.
- * @param string $content Video shortcode content.
- * @param int $instance Unique numeric ID of this video shortcode instance.
- *
- * @return string
- */
- public function video_shortcode_override( $html, $attr, $content, $instance ) {
-
- $videopress_guid = null;
-
- if ( isset( $attr['videopress_guid'] ) ) {
- $videopress_guid = $attr['videopress_guid'];
-
- } else {
- // Handle the different possible url attributes
- $url_keys = array( 'src', 'mp4' );
-
- foreach ( $url_keys as $key ) {
- if ( isset( $attr[ $key ] ) ) {
- $url = $attr[ $key ];
- // phpcs:ignore WordPress.WP.CapitalPDangit
- if ( preg_match( '@videos.(videopress\.com|files\.wordpress\.com)/([a-z0-9]{8})/@i', $url, $matches ) ) {
- $videopress_guid = $matches[2];
- }
-
- // Also test for videopress oembed url, which is used by the Video Media Widget.
- if ( ! $videopress_guid && preg_match( '@https://videopress.com/v/([a-z0-9]{8})@i', $url, $matches ) ) {
- $videopress_guid = $matches[1];
- }
-
- break;
- }
- }
- }
-
- if ( $videopress_guid ) {
- $videopress_attr = array( $videopress_guid );
- if ( isset( $attr['width'] ) ) {
- $videopress_attr['w'] = (int) $attr['width'];
- }
- if ( isset( $attr['autoplay'] ) ) {
- $videopress_attr['autoplay'] = $attr['autoplay'];
- }
- if ( isset( $attr['loop'] ) ) {
- $videopress_attr['loop'] = $attr['loop'];
- }
-
- // Then display the VideoPress version of the stored GUID!
- return $this->shortcode_callback( $videopress_attr );
- }
-
- return '';
- }
-
- /**
- * Adds a `for` query parameter to the oembed provider request URL.
- *
- * @param String $oembed_provider
- * @return String $ehnanced_oembed_provider
- */
- public function add_oembed_for_parameter( $oembed_provider ) {
- if ( false === stripos( $oembed_provider, 'videopress.com' ) ) {
- return $oembed_provider;
- }
- return add_query_arg( 'for', parse_url( home_url(), PHP_URL_HOST ), $oembed_provider );
- }
-
- /**
- * Register a VideoPress handler for direct links to .mov files (and potential other non-handled types later).
- */
- public function add_video_embed_hander() {
- // These are the video extensions that VideoPress can transcode and considers video as well (even if core does not).
- $extensions = array( 'mov' );
- $override_extensions = implode( '|', $extensions );
-
- $regex = "#^https?://videos.(videopress.com|files.wordpress.com)/.+?.($override_extensions)$#i";
-
- /** This filter is already documented in core/wp-includes/embed.php */
- $filter = apply_filters( 'wp_video_embed_handler', 'wp_embed_handler_video' );
- wp_embed_register_handler( 'video', $regex, $filter, 10 );
- }
-}
-
-VideoPress_Shortcode::initialize();
diff --git a/plugins/jetpack/modules/videopress/utility-functions.php b/plugins/jetpack/modules/videopress/utility-functions.php
deleted file mode 100644
index 345fa719..00000000
--- a/plugins/jetpack/modules/videopress/utility-functions.php
+++ /dev/null
@@ -1,692 +0,0 @@
-<?php
-
-/**
- * We won't have any videos less than sixty pixels wide. That would be silly.
- */
-defined( 'VIDEOPRESS_MIN_WIDTH' ) or define( 'VIDEOPRESS_MIN_WIDTH', 60 );
-
-/**
- * Validate user-supplied guid values against expected inputs
- *
- * @since 1.1
- * @param string $guid video identifier
- * @return bool true if passes validation test
- */
-function videopress_is_valid_guid( $guid ) {
- if ( ! empty( $guid ) && is_string( $guid ) && strlen( $guid ) === 8 && ctype_alnum( $guid ) ) {
- return true;
- }
- return false;
-}
-
-/**
- * Get details about a specific video by GUID:
- *
- * @param $guid string
- * @return object
- */
-function videopress_get_video_details( $guid ) {
- if ( ! videopress_is_valid_guid( $guid ) ) {
- return new WP_Error( 'bad-guid-format', __( 'Invalid Video GUID!', 'jetpack' ) );
- }
-
- $version = '1.1';
- $endpoint = sprintf( '/videos/%1$s', $guid );
- $query_url = sprintf(
- 'https://public-api.wordpress.com/rest/v%1$s%2$s',
- $version,
- $endpoint
- );
-
- // Look for data in our transient. If nothing, let's make a new query.
- $data_from_cache = get_transient( 'jetpack_videopress_' . $guid );
- if ( false === $data_from_cache ) {
- $response = wp_remote_get( esc_url_raw( $query_url ) );
- $data = json_decode( wp_remote_retrieve_body( $response ) );
-
- // Cache the response for an hour.
- set_transient( 'jetpack_videopress_' . $guid, $data, HOUR_IN_SECONDS );
- } else {
- $data = $data_from_cache;
- }
-
- /**
- * Allow functions to modify fetched video details.
- *
- * This filter allows third-party code to modify the return data
- * about a given video. It may involve swapping some data out or
- * adding new parameters.
- *
- * @since 4.0.0
- *
- * @param object $data The data returned by the WPCOM API. See: https://developer.wordpress.com/docs/api/1.1/get/videos/%24guid/
- * @param string $guid The GUID of the VideoPress video in question.
- */
- return apply_filters( 'videopress_get_video_details', $data, $guid );
-}
-
-
-/**
- * Get an attachment ID given a URL.
- *
- * Modified from http://wpscholar.com/blog/get-attachment-id-from-wp-image-url/
- *
- * @todo: Add some caching in here.
- *
- * @param string $url
- *
- * @return int|bool Attachment ID on success, false on failure
- */
-function videopress_get_attachment_id_by_url( $url ) {
- $wp_upload_dir = wp_upload_dir();
- // Strip out protocols, so it doesn't fail because searching for http: in https: dir.
- $dir = set_url_scheme( trailingslashit( $wp_upload_dir['baseurl'] ), 'relative' );
-
- // Is URL in uploads directory?
- if ( false !== strpos( $url, $dir ) ) {
-
- $file = basename( $url );
-
- $query_args = array(
- 'post_type' => 'attachment',
- 'post_status' => 'inherit',
- 'fields' => 'ids',
- 'meta_query' => array(
- array(
- 'key' => '_wp_attachment_metadata',
- 'compare' => 'LIKE',
- 'value' => $file,
- ),
- ),
- );
-
- $query = new WP_Query( $query_args );
-
- if ( $query->have_posts() ) {
- foreach ( $query->posts as $attachment_id ) {
- $meta = wp_get_attachment_metadata( $attachment_id );
- $original_file = basename( $meta['file'] );
- $cropped_files = wp_list_pluck( $meta['sizes'], 'file' );
-
- if ( $original_file === $file || in_array( $file, $cropped_files ) ) {
- return (int) $attachment_id;
- }
- }
- }
- }
-
- return false;
-}
-
-/**
- * Similar to `media_sideload_image` -- but returns an ID.
- *
- * @param $url
- * @param $attachment_id
- *
- * @return int|mixed|object|WP_Error
- */
-function videopress_download_poster_image( $url, $attachment_id ) {
- // Set variables for storage, fix file filename for query strings.
- preg_match( '/[^\?]+\.(jpe?g|jpe|gif|png)\b/i', $url, $matches );
- if ( ! $matches ) {
- return new WP_Error( 'image_sideload_failed', __( 'Invalid image URL', 'jetpack' ) );
- }
-
- $file_array = array();
- $file_array['name'] = basename( $matches[0] );
- $file_array['tmp_name'] = download_url( $url );
-
- // If error storing temporarily, return the error.
- if ( is_wp_error( $file_array['tmp_name'] ) ) {
- return $file_array['tmp_name'];
- }
-
- // Do the validation and storage stuff.
- $thumbnail_id = media_handle_sideload( $file_array, $attachment_id, null );
-
- // Flag it as poster image, so we can exclude it from display.
- update_post_meta( $thumbnail_id, 'videopress_poster_image', 1 );
-
- return $thumbnail_id;
-}
-
-/**
- * Creates a local media library item of a remote VideoPress video.
- *
- * @param $guid
- * @param int $parent_id
- *
- * @return int|object
- */
-function create_local_media_library_for_videopress_guid( $guid, $parent_id = 0 ) {
- $vp_data = videopress_get_video_details( $guid );
- if ( ! $vp_data || is_wp_error( $vp_data ) ) {
- return $vp_data;
- }
-
- $args = array(
- 'post_date' => $vp_data->upload_date,
- 'post_title' => wp_kses( $vp_data->title, array() ),
- 'post_content' => wp_kses( $vp_data->description, array() ),
- 'post_mime_type' => 'video/videopress',
- 'guid' => sprintf( 'https://videopress.com/v/%s', $guid ),
- );
-
- $attachment_id = wp_insert_attachment( $args, null, $parent_id );
-
- if ( ! is_wp_error( $attachment_id ) ) {
- update_post_meta( $attachment_id, 'videopress_guid', $guid );
- wp_update_attachment_metadata(
- $attachment_id,
- array(
- 'width' => $vp_data->width,
- 'height' => $vp_data->height,
- )
- );
-
- $thumbnail_id = videopress_download_poster_image( $vp_data->poster, $attachment_id );
- update_post_meta( $attachment_id, '_thumbnail_id', $thumbnail_id );
- }
-
- return $attachment_id;
-}
-
-/**
- * Helper that will look for VideoPress media items that are more than 30 minutes old,
- * that have not had anything attached to them by a wpcom upload and deletes the ghost
- * attachment.
- *
- * These happen primarily because of failed upload attempts.
- *
- * @return int The number of items that were cleaned up.
- */
-function videopress_cleanup_media_library() {
-
- // Disable this job for now.
- return 0;
- $query_args = array(
- 'post_type' => 'attachment',
- 'post_status' => 'inherit',
- 'post_mime_type' => 'video/videopress',
- 'meta_query' => array(
- array(
- 'key' => 'videopress_status',
- 'value' => 'new',
- ),
- ),
- );
-
- $query = new WP_Query( $query_args );
-
- $cleaned = 0;
-
- $now = current_time( 'timestamp' );
-
- if ( $query->have_posts() ) {
- foreach ( $query->posts as $post ) {
- $post_time = strtotime( $post->post_date_gmt );
-
- // If the post is older than 30 minutes, it is safe to delete it.
- if ( $now - $post_time > MINUTE_IN_SECONDS * 30 ) {
- // Force delete the attachment, because we don't want it appearing in the trash.
- wp_delete_attachment( $post->ID, true );
-
- $cleaned++;
- }
- }
- }
-
- return $cleaned;
-}
-
-/**
- * Return an absolute URI for a given filename and guid on the CDN.
- * No check is performed to ensure the guid exists or the file is present. Simple centralized string builder.
- *
- * @param string $guid VideoPress identifier
- * @param string $filename name of file associated with the guid (video file name or thumbnail file name)
- *
- * @return string Absolute URL of VideoPress file for the given guid.
- */
-function videopress_cdn_file_url( $guid, $filename ) {
- return "https://videos.files.wordpress.com/{$guid}/{$filename}";
-}
-
-/**
- * Get an array of the transcoding status for the given video post.
- *
- * @since 4.4
- * @param int $post_id
- * @return array|bool Returns an array of statuses if this is a VideoPress post, otherwise it returns false.
- */
-function videopress_get_transcoding_status( $post_id ) {
- $meta = wp_get_attachment_metadata( $post_id );
-
- // If this has not been processed by videopress, we can skip the rest.
- if ( ! $meta || ! isset( $meta['file_statuses'] ) ) {
- return false;
- }
-
- $info = (object) $meta['file_statuses'];
-
- $status = array(
- 'std_mp4' => isset( $info->mp4 ) ? $info->mp4 : null,
- 'std_ogg' => isset( $info->ogg ) ? $info->ogg : null,
- 'dvd_mp4' => isset( $info->dvd ) ? $info->dvd : null,
- 'hd_mp4' => isset( $info->hd ) ? $info->hd : null,
- );
-
- return $status;
-}
-
-/**
- * Get the direct url to the video.
- *
- * @since 4.4
- * @param string $guid
- * @return string
- */
-function videopress_build_url( $guid ) {
-
- // No guid, no videopress url.
- if ( ! $guid ) {
- return '';
- }
-
- return 'https://videopress.com/v/' . $guid;
-}
-
-/**
- * Create an empty videopress media item that will be filled out later by an xmlrpc
- * callback from the VideoPress servers.
- *
- * @since 4.4
- * @param string $title
- * @return int|WP_Error
- */
-function videopress_create_new_media_item( $title, $guid = null ) {
- $post = array(
- 'post_type' => 'attachment',
- 'post_mime_type' => 'video/videopress',
- 'post_title' => $title,
- 'post_content' => '',
- 'guid' => videopress_build_url( $guid ),
- );
-
- $media_id = wp_insert_post( $post );
-
- add_post_meta( $media_id, 'videopress_status', 'initiated' );
-
- add_post_meta( $media_id, 'videopress_guid', $guid );
-
- return $media_id;
-}
-
-
-/**
- * @param array $current_status
- * @param array $new_meta
- * @return array
- */
-function videopress_merge_file_status( $current_status, $new_meta ) {
- $new_statuses = array();
-
- if ( isset( $new_meta['videopress']['files_status']['hd'] ) ) {
- $new_statuses['hd'] = $new_meta['videopress']['files_status']['hd'];
- }
-
- if ( isset( $new_meta['videopress']['files_status']['dvd'] ) ) {
- $new_statuses['dvd'] = $new_meta['videopress']['files_status']['dvd'];
- }
-
- if ( isset( $new_meta['videopress']['files_status']['std']['mp4'] ) ) {
- $new_statuses['mp4'] = $new_meta['videopress']['files_status']['std']['mp4'];
- }
-
- if ( isset( $new_meta['videopress']['files_status']['std']['ogg'] ) ) {
- $new_statuses['ogg'] = $new_meta['videopress']['files_status']['std']['ogg'];
- }
-
- foreach ( $new_statuses as $format => $status ) {
- if ( ! isset( $current_status[ $format ] ) ) {
- $current_status[ $format ] = $status;
- continue;
- }
-
- if ( $current_status[ $format ] !== 'DONE' ) {
- $current_status[ $format ] = $status;
- }
- }
-
- return $current_status;
-}
-
-/**
- * Check to see if a video has completed processing.
- *
- * @since 4.4
- * @param int $post_id
- * @return bool
- */
-function videopress_is_finished_processing( $post_id ) {
- $post = get_post( $post_id );
-
- if ( is_wp_error( $post ) ) {
- return false;
- }
-
- $meta = wp_get_attachment_metadata( $post->ID );
-
- if ( ! isset( $meta['file_statuses'] ) || ! is_array( $meta['file_statuses'] ) ) {
- return false;
- }
-
- $check_statuses = array( 'hd', 'dvd', 'mp4', 'ogg' );
-
- foreach ( $check_statuses as $status ) {
- if ( ! isset( $meta['file_statuses'][ $status ] ) || $meta['file_statuses'][ $status ] != 'DONE' ) {
- return false;
- }
- }
-
- return true;
-}
-
-
-/**
- * Update the meta information status for the given video post.
- *
- * @since 4.4
- * @param int $post_id
- * @return bool
- */
-function videopress_update_meta_data( $post_id ) {
-
- $meta = wp_get_attachment_metadata( $post_id );
-
- // If this has not been processed by VideoPress, we can skip the rest.
- if ( ! $meta || ! isset( $meta['videopress'] ) ) {
- return false;
- }
-
- $info = (object) $meta['videopress'];
-
- $args = array(
- // 'sslverify' => false,
- );
-
- $result = wp_remote_get( videopress_make_video_get_path( $info->guid ), $args );
-
- if ( is_wp_error( $result ) ) {
- return false;
- }
-
- $response = json_decode( $result['body'], true );
-
- // Update the attachment metadata.
- $meta['videopress'] = $response;
-
- wp_update_attachment_metadata( $post_id, $meta );
-
- return true;
-}
-
-/**
- * Check to see if this is a VideoPress post that hasn't had a guid set yet.
- *
- * @param int $post_id
- * @return bool
- */
-function videopress_is_attachment_without_guid( $post_id ) {
- $post = get_post( $post_id );
-
- if ( is_wp_error( $post ) ) {
- return false;
- }
-
- if ( $post->post_mime_type !== 'video/videopress' ) {
- return false;
- }
-
- $videopress_guid = get_post_meta( $post_id, 'videopress_guid', true );
-
- if ( $videopress_guid ) {
- return false;
- }
-
- return true;
-}
-
-/**
- * Check to see if this is a VideoPress attachment.
- *
- * @param int $post_id
- * @return bool
- */
-function is_videopress_attachment( $post_id ) {
- $post = get_post( $post_id );
-
- if ( is_wp_error( $post ) ) {
- return false;
- }
-
- if ( $post->post_mime_type !== 'video/videopress' ) {
- return false;
- }
-
- return true;
-}
-
-/**
- * Get the video update path
- *
- * @since 4.4
- * @param string $guid
- * @return string
- */
-function videopress_make_video_get_path( $guid ) {
- return sprintf(
- '%s://%s/rest/v%s/videos/%s',
- 'https',
- JETPACK__WPCOM_JSON_API_HOST,
- Jetpack_Client::WPCOM_JSON_API_VERSION,
- $guid
- );
-}
-
-/**
- * Get the upload api path.
- *
- * @since 4.4
- * @param int $blog_id The id of the blog we're uploading to.
- * @return string
- */
-function videopress_make_media_upload_path( $blog_id ) {
- return sprintf(
- 'https://public-api.wordpress.com/rest/v1.1/sites/%s/media/new',
- $blog_id
- );
-}
-
-/**
- * This is a mock of the internal VideoPress method, which is meant to duplicate the functionality
- * of the WPCOM API, so that the Jetpack REST API returns the same data with no modifications.
- *
- * @param int $blog_id Blog ID.
- * @param int $post_id Post ID.
- * @return bool|stdClass
- */
-function video_get_info_by_blogpostid( $blog_id, $post_id ) {
- $post = get_post( $post_id );
-
- $video_info = new stdClass();
- $video_info->post_id = $post_id;
- $video_info->blog_id = $blog_id;
- $video_info->guid = null;
- $video_info->finish_date_gmt = '0000-00-00 00:00:00';
-
- if ( is_wp_error( $post ) ) {
- return $video_info;
- }
-
- if ( 'video/videopress' !== $post->post_mime_type ) {
- return $video_info;
- }
-
- // Since this is a VideoPress post, lt's fill out the rest of the object.
- $video_info->guid = get_post_meta( $post_id, 'videopress_guid', true );
-
- if ( videopress_is_finished_processing( $post_id ) ) {
- $video_info->finish_date_gmt = date( 'Y-m-d H:i:s' );
- }
-
- return $video_info;
-}
-
-
-/**
- * Check that a VideoPress video format has finished processing.
- *
- * This uses the info object, because that is what the WPCOM endpoint
- * uses, however we don't have a complete info object in the same way
- * WPCOM does, so we pull the meta information out of the post
- * options instead.
- *
- * Note: This mimics the WPCOM function of the same name and helps the media
- * API endpoint add all needed VideoPress data.
- *
- * @param stdClass $info
- * @param string $format
- * @return bool
- */
-function video_format_done( $info, $format ) {
-
- // Avoids notice when a non-videopress item is found.
- if ( ! is_object( $info ) ) {
- return false;
- }
-
- $post_id = $info->post_id;
-
- if ( get_post_mime_type( $post_id ) !== 'video/videopress' ) {
- return false;
- }
-
- $post = get_post( $post_id );
-
- if ( is_wp_error( $post ) ) {
- return false;
- }
-
- $meta = wp_get_attachment_metadata( $post->ID );
-
- switch ( $format ) {
- case 'fmt_hd':
- return isset( $meta['videopress']['files']['hd']['mp4'] );
- break;
-
- case 'fmt_dvd':
- return isset( $meta['videopress']['files']['dvd']['mp4'] );
- break;
-
- case 'fmt_std':
- return isset( $meta['videopress']['files']['std']['mp4'] );
- break;
-
- case 'fmt_ogg':
- return isset( $meta['videopress']['files']['std']['ogg'] );
- break;
- }
-
- return false;
-}
-
-/**
- * Get the image URL for the given VideoPress GUID
- *
- * We look up by GUID, because that is what WPCOM does and this needs to be
- * parameter compatible with that.
- *
- * Note: This mimics the WPCOM function of the same name and helps the media
- * API endpoint add all needed VideoPress data.
- *
- * @param string $guid
- * @param string $format
- * @return string
- */
-function video_image_url_by_guid( $guid, $format ) {
-
- $post = video_get_post_by_guid( $guid );
-
- if ( is_wp_error( $post ) ) {
- return null;
- }
-
- $meta = wp_get_attachment_metadata( $post->ID );
-
- // We add ssl => 1 to make sure that the videos.files.wordpress.com domain is parsed as photon.
- $poster = apply_filters( 'jetpack_photon_url', $meta['videopress']['poster'], array( 'ssl' => 1 ), 'https' );
-
- return $poster;
-}
-
-/**
- * Using a GUID, find a post.
- *
- * @param string $guid
- * @return WP_Post
- */
-function video_get_post_by_guid( $guid ) {
- $args = array(
- 'post_type' => 'attachment',
- 'post_mime_type' => 'video/videopress',
- 'post_status' => 'inherit',
- 'meta_query' => array(
- array(
- 'key' => 'videopress_guid',
- 'value' => $guid,
- 'compare' => '=',
- ),
- ),
- );
-
- $query = new WP_Query( $args );
-
- $post = $query->next_post();
-
- return $post;
-}
-
-/**
- * From the given VideoPress post_id, return back the appropriate attachment URL.
- *
- * When the MP4 hasn't been processed yet or this is not a VideoPress video, this will return null.
- *
- * @param int $post_id Post ID of the attachment.
- * @return string|null
- */
-function videopress_get_attachment_url( $post_id ) {
-
- // We only handle VideoPress attachments.
- if ( get_post_mime_type( $post_id ) !== 'video/videopress' ) {
- return null;
- }
-
- $meta = wp_get_attachment_metadata( $post_id );
-
- if ( ! isset( $meta['videopress']['files']['hd']['mp4'] ) ) {
- // Use the original file as the url if it isn't transcoded yet.
- if ( isset( $meta['original'] ) ) {
- $return = $meta['original'];
- } else {
- // Otherwise, there isn't much we can do.
- return null;
- }
- } else {
- $return = $meta['videopress']['file_url_base']['https'] . $meta['videopress']['files']['hd']['mp4'];
- }
-
- // If the URL is a string, return it. Otherwise, we shouldn't to avoid errors downstream, so null.
- return ( is_string( $return ) ) ? $return : null;
-}
diff --git a/plugins/jetpack/modules/videopress/videopress-admin-rtl.css b/plugins/jetpack/modules/videopress/videopress-admin-rtl.css
deleted file mode 100644
index afb09c61..00000000
--- a/plugins/jetpack/modules/videopress/videopress-admin-rtl.css
+++ /dev/null
@@ -1,106 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-/**
- * VideoPress admin media styles
- */
-.videopress-modal-backdrop {
- background: #000;
- opacity: 0.7;
- position: absolute;
- top: 0;
- width: 100%;
- height: 100%;
- overflow: hidden;
- z-index: 100;
-}
-
-.videopress-modal {
- padding: 10px 20px;
- background: white;
- position: absolute;
- top: 0;
- width: 440px;
- overflow: hidden;
- right: 50%;
- margin-right: -220px;
- z-index: 101;
- box-shadow: -2px 2px 5px 2px rgba( 0, 0, 0, 0.5 );
- -webkit-border-bottom-left-radius: 2px;
- -webkit-border-bottom-right-radius: 2px;
- border-bottom-left-radius: 2px;
- border-bottom-right-radius: 2px;
-}
-
-.videopress-modal .submit {
- text-align: left;
- padding: 10px 0 5px;
-}
-
-.videopress-preview {
- display: block;
- float: left;
- width: 65%;
- margin-top: 18px;
- background: black;
- min-height: 97px;
- text-decoration: none;
-}
-
-.vp-preview span.videopress-preview-unavailable {
- width: 65%;
- float: left;
- text-align: right;
- margin-left: 0;
-}
-
-.videopress-preview img {
- float: right;
- width: 100%;
-}
-
-.videopress-preview span {
- display: block;
- padding-top: 40px;
- color: white !important;
- text-align: center;
-}
-
-.vp-setting .help {
- margin: 0 35% 4px 0;
-}
-
-.media-sidebar .vp-setting input[type="checkbox"] {
- float: right;
- margin-top: 10px;
-}
-
-.vp-setting label {
- float: right;
- margin: 8px 5px 0 8px;
- max-width: 135px;
-}
-
-.vp-setting input[type='radio'] {
- float: right;
- margin-top: 9px;
- width: auto;
-}
-
-.vp-preview span {
- margin-top: 18px;
-}
-
-.uploader-videopress {
- margin: 16px;
-}
-
-.uploader-videopress .videopress-errors div {
- margin: 16px 0;
-}
-
-.compat-field-video-rating input[type="radio"],
-.compat-field-display_embed input[type="checkbox"]{
- margin-top: -1px !important;
- margin-left: 5px !important;
- margin-right: 5px !important;
- vertical-align: middle;
-}
diff --git a/plugins/jetpack/modules/videopress/videopress-admin-rtl.min.css b/plugins/jetpack/modules/videopress/videopress-admin-rtl.min.css
deleted file mode 100644
index a4675e9e..00000000
--- a/plugins/jetpack/modules/videopress/videopress-admin-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.videopress-modal-backdrop{background:#000;opacity:.7;position:absolute;top:0;width:100%;height:100%;overflow:hidden;z-index:100}.videopress-modal{padding:10px 20px;background:#fff;position:absolute;top:0;width:440px;overflow:hidden;right:50%;margin-right:-220px;z-index:101;box-shadow:-2px 2px 5px 2px rgba(0,0,0,.5);-webkit-border-bottom-left-radius:2px;-webkit-border-bottom-right-radius:2px;border-bottom-left-radius:2px;border-bottom-right-radius:2px}.videopress-modal .submit{text-align:left;padding:10px 0 5px}.videopress-preview{display:block;float:left;width:65%;margin-top:18px;background:#000;min-height:97px;text-decoration:none}.vp-preview span.videopress-preview-unavailable{width:65%;float:left;text-align:right;margin-left:0}.videopress-preview img{float:right;width:100%}.videopress-preview span{display:block;padding-top:40px;color:#fff!important;text-align:center}.vp-setting .help{margin:0 35% 4px 0}.media-sidebar .vp-setting input[type=checkbox]{float:right;margin-top:10px}.vp-setting label{float:right;margin:8px 5px 0 8px;max-width:135px}.vp-setting input[type=radio]{float:right;margin-top:9px;width:auto}.vp-preview span{margin-top:18px}.uploader-videopress{margin:16px}.uploader-videopress .videopress-errors div{margin:16px 0}.compat-field-display_embed input[type=checkbox],.compat-field-video-rating input[type=radio]{margin-top:-1px!important;margin-left:5px!important;margin-right:5px!important;vertical-align:middle} \ No newline at end of file
diff --git a/plugins/jetpack/modules/videopress/videopress-admin.css b/plugins/jetpack/modules/videopress/videopress-admin.css
deleted file mode 100644
index 4741b551..00000000
--- a/plugins/jetpack/modules/videopress/videopress-admin.css
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- * VideoPress admin media styles
- */
-.videopress-modal-backdrop {
- background: #000;
- opacity: 0.7;
- position: absolute;
- top: 0;
- width: 100%;
- height: 100%;
- overflow: hidden;
- z-index: 100;
-}
-
-.videopress-modal {
- padding: 10px 20px;
- background: white;
- position: absolute;
- top: 0;
- width: 440px;
- overflow: hidden;
- left: 50%;
- margin-left: -220px;
- z-index: 101;
- box-shadow: 2px 2px 5px 2px rgba( 0, 0, 0, 0.5 );
- -webkit-border-bottom-right-radius: 2px;
- -webkit-border-bottom-left-radius: 2px;
- border-bottom-right-radius: 2px;
- border-bottom-left-radius: 2px;
-}
-
-.videopress-modal .submit {
- text-align: right;
- padding: 10px 0 5px;
-}
-
-.videopress-preview {
- display: block;
- float: right;
- width: 65%;
- margin-top: 18px;
- background: black;
- min-height: 97px;
- text-decoration: none;
-}
-
-.vp-preview span.videopress-preview-unavailable {
- width: 65%;
- float: right;
- text-align: left;
- margin-right: 0;
-}
-
-.videopress-preview img {
- float: left;
- width: 100%;
-}
-
-.videopress-preview span {
- display: block;
- padding-top: 40px;
- color: white !important;
- text-align: center;
-}
-
-.vp-setting .help {
- margin: 0 0 4px 35%;
-}
-
-.media-sidebar .vp-setting input[type="checkbox"] {
- float: left;
- margin-top: 10px;
-}
-
-.vp-setting label {
- float: left;
- margin: 8px 8px 0 5px;
- max-width: 135px;
-}
-
-.vp-setting input[type='radio'] {
- float: left;
- margin-top: 9px;
- width: auto;
-}
-
-.vp-preview span {
- margin-top: 18px;
-}
-
-.uploader-videopress {
- margin: 16px;
-}
-
-.uploader-videopress .videopress-errors div {
- margin: 16px 0;
-}
-
-.compat-field-video-rating input[type="radio"],
-.compat-field-display_embed input[type="checkbox"]{
- margin-top: -1px !important;
- margin-right: 5px !important;
- margin-left: 5px !important;
- vertical-align: middle;
-}
diff --git a/plugins/jetpack/modules/videopress/videopress-admin.min.css b/plugins/jetpack/modules/videopress/videopress-admin.min.css
deleted file mode 100644
index aace7ec9..00000000
--- a/plugins/jetpack/modules/videopress/videopress-admin.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-.videopress-modal-backdrop{background:#000;opacity:.7;position:absolute;top:0;width:100%;height:100%;overflow:hidden;z-index:100}.videopress-modal{padding:10px 20px;background:#fff;position:absolute;top:0;width:440px;overflow:hidden;left:50%;margin-left:-220px;z-index:101;box-shadow:2px 2px 5px 2px rgba(0,0,0,.5);-webkit-border-bottom-right-radius:2px;-webkit-border-bottom-left-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:2px}.videopress-modal .submit{text-align:right;padding:10px 0 5px}.videopress-preview{display:block;float:right;width:65%;margin-top:18px;background:#000;min-height:97px;text-decoration:none}.vp-preview span.videopress-preview-unavailable{width:65%;float:right;text-align:left;margin-right:0}.videopress-preview img{float:left;width:100%}.videopress-preview span{display:block;padding-top:40px;color:#fff!important;text-align:center}.vp-setting .help{margin:0 0 4px 35%}.media-sidebar .vp-setting input[type=checkbox]{float:left;margin-top:10px}.vp-setting label{float:left;margin:8px 8px 0 5px;max-width:135px}.vp-setting input[type=radio]{float:left;margin-top:9px;width:auto}.vp-preview span{margin-top:18px}.uploader-videopress{margin:16px}.uploader-videopress .videopress-errors div{margin:16px 0}.compat-field-display_embed input[type=checkbox],.compat-field-video-rating input[type=radio]{margin-top:-1px!important;margin-right:5px!important;margin-left:5px!important;vertical-align:middle} \ No newline at end of file
diff --git a/plugins/jetpack/modules/widget-visibility.php b/plugins/jetpack/modules/widget-visibility.php
deleted file mode 100644
index 25dece2b..00000000
--- a/plugins/jetpack/modules/widget-visibility.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-/**
- * Module Name: Widget Visibility
- * Module Description: Control where widgets appear on your site.
- * First Introduced: 2.4
- * Requires Connection: No
- * Auto Activate: Yes
- * Sort Order: 17
- * Module Tags: Appearance
- * Feature: Appearance
- * Additional Search Queries: widget visibility, logic, conditional, widgets, widget
- */
-
-include dirname( __FILE__ ) . "/widget-visibility/widget-conditions.php";
diff --git a/plugins/jetpack/modules/widget-visibility/widget-conditions.php b/plugins/jetpack/modules/widget-visibility/widget-conditions.php
deleted file mode 100644
index f5e12cbb..00000000
--- a/plugins/jetpack/modules/widget-visibility/widget-conditions.php
+++ /dev/null
@@ -1,852 +0,0 @@
-<?php
-
-
-/**
- * Hide or show widgets conditionally.
- */
-
-class Jetpack_Widget_Conditions {
- static $passed_template_redirect = false;
-
- public static function init() {
- if ( is_admin() ) {
- add_action( 'sidebar_admin_setup', array( __CLASS__, 'widget_admin_setup' ) );
- add_filter( 'widget_update_callback', array( __CLASS__, 'widget_update' ), 10, 3 );
- add_action( 'in_widget_form', array( __CLASS__, 'widget_conditions_admin' ), 10, 3 );
- } elseif ( ! in_array( $GLOBALS['pagenow'], array( 'wp-login.php', 'wp-register.php' ) ) ) {
- add_filter( 'widget_display_callback', array( __CLASS__, 'filter_widget' ) );
- add_filter( 'sidebars_widgets', array( __CLASS__, 'sidebars_widgets' ) );
- add_action( 'template_redirect', array( __CLASS__, 'template_redirect' ) );
- }
- }
-
- public static function widget_admin_setup() {
- wp_enqueue_style( 'widget-conditions', plugins_url( 'widget-conditions/widget-conditions.css', __FILE__ ) );
- wp_style_add_data( 'widget-conditions', 'rtl', 'replace' );
- wp_enqueue_script(
- 'widget-conditions',
- Jetpack::get_file_url_for_environment(
- '_inc/build/widget-visibility/widget-conditions/widget-conditions.min.js',
- 'modules/widget-visibility/widget-conditions/widget-conditions.js'
- ),
- array( 'jquery', 'jquery-ui-core' ),
- 20171227,
- true
- );
-
- // Set up a single copy of all of the data that Widget Visibility needs.
- // This allows all widget conditions to reuse the same data, keeping page size down
- // and eliminating the AJAX calls we used to have to use to fetch the minor rule options.
- $widget_conditions_data = array();
-
- $widget_conditions_data['category'] = array();
- $widget_conditions_data['category'][] = array( '', __( 'All category pages', 'jetpack' ) );
-
- $categories = get_categories(
- array(
- 'number' => 1000,
- 'orderby' => 'count',
- 'order' => 'DESC',
- )
- );
- usort( $categories, array( __CLASS__, 'strcasecmp_name' ) );
-
- foreach ( $categories as $category ) {
- $widget_conditions_data['category'][] = array( (string) $category->term_id, $category->name );
- }
-
- $widget_conditions_data['loggedin'] = array();
- $widget_conditions_data['loggedin'][] = array( 'loggedin', __( 'Logged In', 'jetpack' ) );
- $widget_conditions_data['loggedin'][] = array( 'loggedout', __( 'Logged Out', 'jetpack' ) );
-
- $widget_conditions_data['author'] = array();
- $widget_conditions_data['author'][] = array( '', __( 'All author pages', 'jetpack' ) );
-
- // Only users with publish caps
- $authors = get_users(
- array(
- 'orderby' => 'name',
- 'who' => 'authors',
- )
- );
-
- foreach ( $authors as $author ) {
- $widget_conditions_data['author'][] = array( (string) $author->ID, $author->display_name );
- }
-
- $widget_conditions_data['role'] = array();
-
- global $wp_roles;
-
- foreach ( $wp_roles->roles as $role_key => $role ) {
- $widget_conditions_data['role'][] = array( (string) $role_key, $role['name'] );
- }
-
- $widget_conditions_data['tag'] = array();
- $widget_conditions_data['tag'][] = array( '', __( 'All tag pages', 'jetpack' ) );
-
- $tags = get_tags(
- array(
- 'number' => 1000,
- 'orderby' => 'count',
- 'order' => 'DESC',
- )
- );
- usort( $tags, array( __CLASS__, 'strcasecmp_name' ) );
-
- foreach ( $tags as $tag ) {
- $widget_conditions_data['tag'][] = array( (string) $tag->term_id, $tag->name );
- }
-
- $widget_conditions_data['date'] = array();
- $widget_conditions_data['date'][] = array( '', __( 'All date archives', 'jetpack' ) );
- $widget_conditions_data['date'][] = array( 'day', __( 'Daily archives', 'jetpack' ) );
- $widget_conditions_data['date'][] = array( 'month', __( 'Monthly archives', 'jetpack' ) );
- $widget_conditions_data['date'][] = array( 'year', __( 'Yearly archives', 'jetpack' ) );
-
- $widget_conditions_data['page'] = array();
- $widget_conditions_data['page'][] = array( 'front', __( 'Front page', 'jetpack' ) );
- $widget_conditions_data['page'][] = array( 'posts', __( 'Posts page', 'jetpack' ) );
- $widget_conditions_data['page'][] = array( 'archive', __( 'Archive page', 'jetpack' ) );
- $widget_conditions_data['page'][] = array( '404', __( '404 error page', 'jetpack' ) );
- $widget_conditions_data['page'][] = array( 'search', __( 'Search results', 'jetpack' ) );
-
- $post_types = get_post_types( array( 'public' => true ), 'objects' );
-
- $widget_conditions_post_types = array();
- $widget_conditions_post_type_archives = array();
-
- foreach ( $post_types as $post_type ) {
- $widget_conditions_post_types[] = array( 'post_type-' . $post_type->name, $post_type->labels->singular_name );
- $widget_conditions_post_type_archives[] = array( 'post_type_archive-' . $post_type->name, $post_type->labels->name );
- }
-
- $widget_conditions_data['page'][] = array( __( 'Post type:', 'jetpack' ), $widget_conditions_post_types );
-
- $widget_conditions_data['page'][] = array( __( 'Post type Archives:', 'jetpack' ), $widget_conditions_post_type_archives );
-
- $pages_dropdown = preg_replace( '/<\/?select[^>]*?>/i', '', wp_dropdown_pages( array( 'echo' => false ) ) );
-
- preg_match_all( '/value=.([0-9]+).[^>]*>([^<]+)</', $pages_dropdown, $page_ids_and_titles, PREG_SET_ORDER );
-
- $static_pages = array();
-
- foreach ( $page_ids_and_titles as $page_id_and_title ) {
- $static_pages[] = array( (string) $page_id_and_title[1], $page_id_and_title[2] );
- }
-
- $widget_conditions_data['page'][] = array( __( 'Static page:', 'jetpack' ), $static_pages );
-
- $widget_conditions_data['taxonomy'] = array();
- $widget_conditions_data['taxonomy'][] = array( '', __( 'All taxonomy pages', 'jetpack' ) );
-
- $taxonomies = get_taxonomies(
- /**
- * Filters args passed to get_taxonomies.
- *
- * @see https://developer.wordpress.org/reference/functions/get_taxonomies/
- *
- * @since 5.3.0
- *
- * @module widget-visibility
- *
- * @param array $args Widget Visibility taxonomy arguments.
- */
- apply_filters( 'jetpack_widget_visibility_tax_args', array( '_builtin' => false ) ),
- 'objects'
- );
-
- usort( $taxonomies, array( __CLASS__, 'strcasecmp_name' ) );
-
- foreach ( $taxonomies as $taxonomy ) {
- $taxonomy_terms = get_terms(
- array( $taxonomy->name ),
- array(
- 'number' => 250,
- 'hide_empty' => false,
- )
- );
-
- $widget_conditions_terms = array();
- $widget_conditions_terms[] = array( $taxonomy->name, __( 'All pages', 'jetpack' ) );
-
- foreach ( $taxonomy_terms as $term ) {
- $widget_conditions_terms[] = array( $taxonomy->name . '_tax_' . $term->term_id, $term->name );
- }
-
- $widget_conditions_data['taxonomy'][] = array( $taxonomy->labels->name . ':', $widget_conditions_terms );
- }
-
- wp_localize_script( 'widget-conditions', 'widget_conditions_data', $widget_conditions_data );
-
- // Save a list of the IDs of all pages that have children for dynamically showing the "Include children" checkbox.
- $all_pages = get_pages();
- $all_parents = array();
-
- foreach ( $all_pages as $page ) {
- if ( $page->post_parent ) {
- $all_parents[ (string) $page->post_parent ] = true;
- }
- }
-
- $front_page_id = get_option( 'page_on_front' );
-
- if ( isset( $all_parents[ $front_page_id ] ) ) {
- $all_parents['front'] = true;
- }
-
- wp_localize_script( 'widget-conditions', 'widget_conditions_parent_pages', $all_parents );
- }
-
- /**
- * Add the widget conditions to each widget in the admin.
- *
- * @param $widget unused.
- * @param $return unused.
- * @param array $instance The widget settings.
- */
- public static function widget_conditions_admin( $widget, $return, $instance ) {
- $conditions = array();
-
- if ( isset( $instance['conditions'] ) ) {
- $conditions = $instance['conditions'];
- }
-
- if ( ! isset( $conditions['action'] ) ) {
- $conditions['action'] = 'show';
- }
-
- if ( empty( $conditions['rules'] ) ) {
- $conditions['rules'][] = array(
- 'major' => '',
- 'minor' => '',
- 'has_children' => '',
- );
- }
-
- if ( empty( $conditions['match_all'] ) ) {
- $conditions['match_all'] = false;
- }
-
- ?>
- <div
- class="
- widget-conditional
- <?php
- if (
- empty( $_POST['widget-conditions-visible'] )
- || $_POST['widget-conditions-visible'] == '0'
- ) {
- ?>
- widget-conditional-hide
- <?php
- }
- ?>
- <?php
- if ( ! empty( $conditions['match_all'] ) && $conditions['match_all'] ) {
- ?>
- intersection
- <?php
- } else {
- ?>
- conjunction
- <?php
- }
- ?>
- ">
- <input type="hidden" name="widget-conditions-visible" value="
- <?php
- if ( isset( $_POST['widget-conditions-visible'] ) ) {
- echo esc_attr( $_POST['widget-conditions-visible'] ); } else {
- ?>
- 0<?php } ?>" />
- <?php
- if ( ! isset( $_POST['widget-conditions-visible'] ) ) {
- ?>
- <a href="#" class="button display-options"><?php _e( 'Visibility', 'jetpack' ); ?></a><?php } ?>
- <div class="widget-conditional-inner">
- <div class="condition-top">
- <?php printf( _x( '%s if:', 'placeholder: dropdown menu to select widget visibility; hide if or show if', 'jetpack' ), '<select name="conditions[action]"><option value="show" ' . selected( $conditions['action'], 'show', false ) . '>' . esc_html_x( 'Show', 'Used in the "%s if:" translation for the widget visibility dropdown', 'jetpack' ) . '</option><option value="hide" ' . selected( $conditions['action'], 'hide', false ) . '>' . esc_html_x( 'Hide', 'Used in the "%s if:" translation for the widget visibility dropdown', 'jetpack' ) . '</option></select>' ); ?>
- </div><!-- .condition-top -->
-
- <div class="conditions">
- <?php
-
- foreach ( $conditions['rules'] as $rule_index => $rule ) {
- $rule = wp_parse_args(
- $rule,
- array(
- 'major' => '',
- 'minor' => '',
- 'has_children' => '',
- )
- );
- ?>
- <div class="condition" data-rule-major="<?php echo esc_attr( $rule['major'] ); ?>" data-rule-minor="<?php echo esc_attr( $rule['minor'] ); ?>" data-rule-has-children="<?php echo esc_attr( $rule['has_children'] ); ?>">
- <div class="selection alignleft">
- <select class="conditions-rule-major" name="conditions[rules_major][]">
- <option value="" <?php selected( '', $rule['major'] ); ?>><?php echo esc_html_x( '-- Select --', 'Used as the default option in a dropdown list', 'jetpack' ); ?></option>
- <option value="category" <?php selected( 'category', $rule['major'] ); ?>><?php esc_html_e( 'Category', 'jetpack' ); ?></option>
- <option value="author" <?php selected( 'author', $rule['major'] ); ?>><?php echo esc_html_x( 'Author', 'Noun, as in: "The author of this post is..."', 'jetpack' ); ?></option>
-
- <?php if ( ! ( defined( 'IS_WPCOM' ) && IS_WPCOM ) ) { // this doesn't work on .com because of caching ?>
- <option value="loggedin" <?php selected( 'loggedin', $rule['major'] ); ?>><?php echo esc_html_x( 'User', 'Noun', 'jetpack' ); ?></option>
- <option value="role" <?php selected( 'role', $rule['major'] ); ?>><?php echo esc_html_x( 'Role', 'Noun, as in: "The user role of that can access this widget is..."', 'jetpack' ); ?></option>
- <?php } ?>
-
- <option value="tag" <?php selected( 'tag', $rule['major'] ); ?>><?php echo esc_html_x( 'Tag', 'Noun, as in: "This post has one tag."', 'jetpack' ); ?></option>
- <option value="date" <?php selected( 'date', $rule['major'] ); ?>><?php echo esc_html_x( 'Date', 'Noun, as in: "This page is a date archive."', 'jetpack' ); ?></option>
- <option value="page" <?php selected( 'page', $rule['major'] ); ?>><?php echo esc_html_x( 'Page', 'Example: The user is looking at a page, not a post.', 'jetpack' ); ?></option>
- <?php if ( get_taxonomies( array( '_builtin' => false ) ) ) : ?>
- <option value="taxonomy" <?php selected( 'taxonomy', $rule['major'] ); ?>><?php echo esc_html_x( 'Taxonomy', 'Noun, as in: "This post has one taxonomy."', 'jetpack' ); ?></option>
- <?php endif; ?>
- </select>
-
- <?php _ex( 'is', 'Widget Visibility: {Rule Major [Page]} is {Rule Minor [Search results]}', 'jetpack' ); ?>
-
- <select class="conditions-rule-minor" name="conditions[rules_minor][]"
- <?php
- if ( ! $rule['major'] ) {
- ?>
- disabled="disabled"<?php } ?>>
- <?php
- /*
- Include the currently selected value so that if the widget is saved without
- expanding the Visibility section, we don't lose the minor part of the rule.
- If it is opened, this list is cleared out and populated with all the values. */
- ?>
- <option value="<?php echo esc_attr( $rule['minor'] ); ?>" selected="selected"></option>
- </select>
-
- <span class="conditions-rule-has-children"
- <?php
- if ( ! $rule['has_children'] ) {
- ?>
- style="display: none;"<?php } ?>>
- <label>
- <input type="checkbox" name="conditions[page_children][<?php echo $rule_index; ?>]" value="has" <?php checked( $rule['has_children'], true ); ?> />
- <?php echo esc_html_x( 'Include children', 'Checkbox on Widget Visibility if children of the selected page should be included in the visibility rule.', 'jetpack' ); ?>
- </label>
- </span>
- </div>
-
- <div class="condition-control">
- <span class="condition-conjunction">
- <?php echo esc_html_x( 'or', 'Shown between widget visibility conditions.', 'jetpack' ); ?>
- </span>
- <span class="condition-intersection">
- <?php echo esc_html_x( 'and', 'Shown between widget visibility conditions.', 'jetpack' ); ?>
- </span>
- <div class="actions alignright">
- <a href="#" class="delete-condition dashicons dashicons-no"><?php esc_html_e( 'Delete', 'jetpack' ); ?></a><a href="#" class="add-condition dashicons dashicons-plus"><?php esc_html_e( 'Add', 'jetpack' ); ?></a>
- </div>
- </div>
-
- </div><!-- .condition -->
- <?php
- }
-
- ?>
- </div><!-- .conditions -->
- <div class="conditions">
- <div class="condition-top">
- <label>
- <input
- type="checkbox"
- name="conditions[match_all]"
- value="1"
- class="conditions-match-all"
- <?php checked( $conditions['match_all'], '1' ); ?> />
- <?php esc_html_e( 'Match all conditions', 'jetpack' ); ?>
- </label>
- </div><!-- .condition-top -->
- </div><!-- .conditions -->
- </div><!-- .widget-conditional-inner -->
- </div><!-- .widget-conditional -->
- <?php
- }
-
- /**
- * On an AJAX update of the widget settings, process the display conditions.
- *
- * @param array $new_instance New settings for this instance as input by the user.
- * @param array $old_instance Old settings for this instance.
- * @return array Modified settings.
- */
- public static function widget_update( $instance, $new_instance, $old_instance ) {
- if ( empty( $_POST['conditions'] ) ) {
- return $instance;
- }
-
- $conditions = array();
- $conditions['action'] = $_POST['conditions']['action'];
- $conditions['match_all'] = ( isset( $_POST['conditions']['match_all'] ) ? '1' : '0' );
- $conditions['rules'] = array();
-
- foreach ( $_POST['conditions']['rules_major'] as $index => $major_rule ) {
- if ( ! $major_rule ) {
- continue;
- }
-
- $conditions['rules'][] = array(
- 'major' => $major_rule,
- 'minor' => isset( $_POST['conditions']['rules_minor'][ $index ] ) ? $_POST['conditions']['rules_minor'][ $index ] : '',
- 'has_children' => isset( $_POST['conditions']['page_children'][ $index ] ) ? true : false,
- );
- }
-
- if ( ! empty( $conditions['rules'] ) ) {
- $instance['conditions'] = $conditions;
- } else {
- unset( $instance['conditions'] );
- }
-
- if (
- ( isset( $instance['conditions'] ) && ! isset( $old_instance['conditions'] ) )
- ||
- (
- isset( $instance['conditions'], $old_instance['conditions'] )
- &&
- serialize( $instance['conditions'] ) != serialize( $old_instance['conditions'] )
- )
- ) {
-
- /**
- * Fires after the widget visibility conditions are saved.
- *
- * @module widget-visibility
- *
- * @since 2.4.0
- */
- do_action( 'widget_conditions_save' );
- } elseif ( ! isset( $instance['conditions'] ) && isset( $old_instance['conditions'] ) ) {
-
- /**
- * Fires after the widget visibility conditions are deleted.
- *
- * @module widget-visibility
- *
- * @since 2.4.0
- */
- do_action( 'widget_conditions_delete' );
- }
-
- return $instance;
- }
-
- /**
- * Filter the list of widgets for a sidebar so that active sidebars work as expected.
- *
- * @param array $widget_areas An array of widget areas and their widgets.
- * @return array The modified $widget_area array.
- */
- public static function sidebars_widgets( $widget_areas ) {
- $settings = array();
-
- foreach ( $widget_areas as $widget_area => $widgets ) {
- if ( empty( $widgets ) ) {
- continue;
- }
-
- if ( ! is_array( $widgets ) ) {
- continue;
- }
-
- if ( 'wp_inactive_widgets' == $widget_area ) {
- continue;
- }
-
- foreach ( $widgets as $position => $widget_id ) {
- // Find the conditions for this widget.
- if ( preg_match( '/^(.+?)-(\d+)$/', $widget_id, $matches ) ) {
- $id_base = $matches[1];
- $widget_number = intval( $matches[2] );
- } else {
- $id_base = $widget_id;
- $widget_number = null;
- }
-
- if ( ! isset( $settings[ $id_base ] ) ) {
- $settings[ $id_base ] = get_option( 'widget_' . $id_base );
- }
-
- // New multi widget (WP_Widget)
- if ( ! is_null( $widget_number ) ) {
- if ( isset( $settings[ $id_base ][ $widget_number ] ) && false === self::filter_widget( $settings[ $id_base ][ $widget_number ] ) ) {
- unset( $widget_areas[ $widget_area ][ $position ] );
- }
- }
-
- // Old single widget
- elseif ( ! empty( $settings[ $id_base ] ) && false === self::filter_widget( $settings[ $id_base ] ) ) {
- unset( $widget_areas[ $widget_area ][ $position ] );
- }
- }
- }
-
- return $widget_areas;
- }
-
- public static function template_redirect() {
- self::$passed_template_redirect = true;
- }
-
- /**
- * Generates a condition key based on the rule array
- *
- * @param array $rule
- * @return string key used to retrieve the condition.
- */
- static function generate_condition_key( $rule ) {
- if ( isset( $rule['has_children'] ) ) {
- return $rule['major'] . ':' . $rule['minor'] . ':' . $rule['has_children'];
- }
- return $rule['major'] . ':' . $rule['minor'];
- }
-
- /**
- * Determine whether the widget should be displayed based on conditions set by the user.
- *
- * @param array $instance The widget settings.
- * @return array Settings to display or bool false to hide.
- */
- public static function filter_widget( $instance ) {
- global $wp_query;
-
- if ( empty( $instance['conditions'] ) || empty( $instance['conditions']['rules'] ) ) {
- return $instance;
- }
-
- // Store the results of all in-page condition lookups so that multiple widgets with
- // the same visibility conditions don't result in duplicate DB queries.
- static $condition_result_cache = array();
-
- $condition_result = false;
-
- foreach ( $instance['conditions']['rules'] as $rule ) {
- $condition_result = false;
- $condition_key = self::generate_condition_key( $rule );
-
- if ( isset( $condition_result_cache[ $condition_key ] ) ) {
- $condition_result = $condition_result_cache[ $condition_key ];
- } else {
- switch ( $rule['major'] ) {
- case 'date':
- switch ( $rule['minor'] ) {
- case '':
- $condition_result = is_date();
- break;
- case 'month':
- $condition_result = is_month();
- break;
- case 'day':
- $condition_result = is_day();
- break;
- case 'year':
- $condition_result = is_year();
- break;
- }
- break;
- case 'page':
- // Previously hardcoded post type options.
- if ( 'post' == $rule['minor'] ) {
- $rule['minor'] = 'post_type-post';
- } elseif ( ! $rule['minor'] ) {
- $rule['minor'] = 'post_type-page';
- }
-
- switch ( $rule['minor'] ) {
- case '404':
- $condition_result = is_404();
- break;
- case 'search':
- $condition_result = is_search();
- break;
- case 'archive':
- $condition_result = is_archive();
- break;
- case 'posts':
- $condition_result = $wp_query->is_posts_page;
- break;
- case 'home':
- $condition_result = is_home();
- break;
- case 'front':
- if ( current_theme_supports( 'infinite-scroll' ) ) {
- $condition_result = is_front_page();
- } else {
- $condition_result = is_front_page() && ! is_paged();
- }
- break;
- default:
- if ( substr( $rule['minor'], 0, 10 ) == 'post_type-' ) {
- $condition_result = is_singular( substr( $rule['minor'], 10 ) );
- } elseif ( substr( $rule['minor'], 0, 18 ) == 'post_type_archive-' ) {
- $condition_result = is_post_type_archive( substr( $rule['minor'], 18 ) );
- } elseif ( $rule['minor'] == get_option( 'page_for_posts' ) ) {
- // If $rule['minor'] is a page ID which is also the posts page
- $condition_result = $wp_query->is_posts_page;
- } else {
- // $rule['minor'] is a page ID
- $condition_result = is_page() && ( $rule['minor'] == get_the_ID() );
-
- // Check if $rule['minor'] is parent of page ID
- if ( ! $condition_result && isset( $rule['has_children'] ) && $rule['has_children'] ) {
- $condition_result = wp_get_post_parent_id( get_the_ID() ) == $rule['minor'];
- }
- }
- break;
- }
- break;
- case 'tag':
- // All tag pages.
- if ( ! $rule['minor'] ) {
- if ( is_tag() ) {
- $condition_result = true;
- } elseif ( is_singular() ) {
- if ( in_array( 'post_tag', get_post_taxonomies() ) ) {
- $condition_result = true;
- }
- }
- break;
- }
-
- // All pages with the specified tag term.
- if ( is_tag( $rule['minor'] ) ) {
- $condition_result = true;
- } elseif ( is_singular() && has_term( $rule['minor'], 'post_tag' ) ) {
- $condition_result = true;
- }
- break;
- case 'category':
- // All category pages.
- if ( ! $rule['minor'] ) {
- if ( is_category() ) {
- $condition_result = true;
- } elseif ( is_singular() ) {
- if ( in_array( 'category', get_post_taxonomies() ) ) {
- $condition_result = true;
- }
- }
- break;
- }
-
- // All pages with the specified category term.
- if ( is_category( $rule['minor'] ) ) {
- $condition_result = true;
- } elseif ( is_singular() && has_term( $rule['minor'], 'category' ) ) {
- $condition_result = true;
- }
- break;
- case 'loggedin':
- $condition_result = is_user_logged_in();
- if ( 'loggedin' !== $rule['minor'] ) {
- $condition_result = ! $condition_result;
- }
- break;
- case 'author':
- $post = get_post();
- if ( ! $rule['minor'] && is_author() ) {
- $condition_result = true;
- } elseif ( $rule['minor'] && is_author( $rule['minor'] ) ) {
- $condition_result = true;
- } elseif ( is_singular() && $rule['minor'] && $rule['minor'] == $post->post_author ) {
- $condition_result = true;
- }
- break;
- case 'role':
- if ( is_user_logged_in() ) {
- $current_user = wp_get_current_user();
-
- $user_roles = $current_user->roles;
-
- if ( in_array( $rule['minor'], $user_roles ) ) {
- $condition_result = true;
- } else {
- $condition_result = false;
- }
- } else {
- $condition_result = false;
- }
- break;
- case 'post_type':
- if ( substr( $rule['minor'], 0, 10 ) == 'post_type-' ) {
- $condition_result = is_singular( substr( $rule['minor'], 10 ) );
- } elseif ( substr( $rule['minor'], 0, 18 ) == 'post_type_archive-' ) {
- $condition_result = is_post_type_archive( substr( $rule['minor'], 18 ) );
- }
- break;
- case 'taxonomy':
- // All taxonomy pages.
- if ( ! $rule['minor'] ) {
- if ( is_archive() ) {
- if ( is_tag() || is_category() || is_tax() ) {
- $condition_result = true;
- }
- } elseif ( is_singular() ) {
- $post_taxonomies = get_post_taxonomies();
- $condition_result = ! empty( $post_taxonomies );
- }
- break;
- }
-
- // Specified taxonomy page.
- $term = explode( '_tax_', $rule['minor'] ); // $term[0] = taxonomy name; $term[1] = term id
- if ( isset( $term[0] ) && isset( $term[1] ) ) {
- $term[1] = self::maybe_get_split_term( $term[1], $term[0] );
- }
-
- // All pages of the specified taxonomy.
- if ( ! isset( $term[1] ) || ! $term[1] ) {
- if ( is_tax( $term[0] ) ) {
- $condition_result = true;
- } elseif ( is_singular() ) {
- if ( in_array( $term[0], get_post_taxonomies() ) ) {
- $condition_result = true;
- }
- }
- break;
- }
-
- // All pages with the specified taxonomy term.
- if ( is_tax( $term[0], $term[1] ) ) {
- $condition_result = true;
- } elseif ( is_singular() && has_term( $term[1], $term[0] ) ) {
- $condition_result = true;
- }
- break;
- }
-
- if ( $condition_result || self::$passed_template_redirect ) {
- // Some of the conditions will return false when checked before the template_redirect
- // action has been called, like is_page(). Only store positive lookup results, which
- // won't be false positives, before template_redirect, and everything after.
- $condition_result_cache[ $condition_key ] = $condition_result;
- }
- }
-
- if (
- isset( $instance['conditions']['match_all'] )
- && $instance['conditions']['match_all'] == '1'
- && ! $condition_result
- ) {
-
- // In case the match_all flag was set we quit on first failed condition
- break;
- } elseif (
- (
- empty( $instance['conditions']['match_all'] )
- || $instance['conditions']['match_all'] !== '1'
- )
- && $condition_result
- ) {
-
- // Only quit on first condition if the match_all flag was not set
- break;
- }
- }
-
- if (
- (
- 'show' == $instance['conditions']['action']
- && ! $condition_result
- ) || (
- 'hide' == $instance['conditions']['action']
- && $condition_result
- )
- ) {
- return false;
- }
-
- return $instance;
- }
-
- public static function strcasecmp_name( $a, $b ) {
- return strcasecmp( $a->name, $b->name );
- }
-
- public static function maybe_get_split_term( $old_term_id = '', $taxonomy = '' ) {
- $term_id = $old_term_id;
-
- if ( 'tag' == $taxonomy ) {
- $taxonomy = 'post_tag';
- }
-
- if ( $new_term_id = wp_get_split_term( $old_term_id, $taxonomy ) ) {
- $term_id = $new_term_id;
- }
-
- return $term_id;
- }
-
- /**
- * Upgrade routine to go through all widgets and move the Post Type
- * setting to its newer location.
- *
- * @since 4.7.1
- */
- static function migrate_post_type_rules() {
- global $wp_registered_widgets;
-
- $sidebars_widgets = get_option( 'sidebars_widgets' );
-
- // Going through all sidebars and through inactive and orphaned widgets
- foreach ( $sidebars_widgets as $s => $sidebar ) {
- if ( ! is_array( $sidebar ) ) {
- continue;
- }
-
- foreach ( $sidebar as $w => $widget ) {
- // $widget is the id of the widget
- if ( empty( $wp_registered_widgets[ $widget ] ) ) {
- continue;
- }
-
- $opts = $wp_registered_widgets[ $widget ];
- $instances = get_option( $opts['callback'][0]->option_name );
-
- // Going through each instance of the widget
- foreach ( $instances as $number => $instance ) {
- if (
- ! is_array( $instance ) ||
- empty( $instance['conditions'] ) ||
- empty( $instance['conditions']['rules'] )
- ) {
- continue;
- }
-
- // Going through all visibility rules
- foreach ( $instance['conditions']['rules'] as $index => $rule ) {
-
- // We only need Post Type rules
- if ( 'post_type' !== $rule['major'] ) {
- continue;
- }
-
- $rule_type = false;
-
- // Post type or type archive rule
- if ( 0 === strpos( $rule['minor'], 'post_type_archive' ) ) {
- $rule_type = 'post_type_archive';
- } elseif ( 0 === strpos( $rule['minor'], 'post_type' ) ) {
- $rule_type = 'post_type';
- }
-
- if ( $rule_type ) {
- $post_type = substr( $rule['minor'], strlen( $rule_type ) + 1 );
- $rule['minor'] = $rule_type . '-' . $post_type;
- $rule['major'] = 'page';
-
- $instances[ $number ]['conditions']['rules'][ $index ] = $rule;
- }
- }
- }
-
- update_option( $opts['callback'][0]->option_name, $instances );
- }
- }
- }
-
-}
-
-add_action( 'init', array( 'Jetpack_Widget_Conditions', 'init' ) );
diff --git a/plugins/jetpack/modules/widget-visibility/widget-conditions/rtl/widget-conditions-rtl.css b/plugins/jetpack/modules/widget-visibility/widget-conditions/rtl/widget-conditions-rtl.css
deleted file mode 100644
index d2770de6..00000000
--- a/plugins/jetpack/modules/widget-visibility/widget-conditions/rtl/widget-conditions-rtl.css
+++ /dev/null
@@ -1,115 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-.wp-customizer .expanded .widget-conditional .widget-conditional-inner {
- width: 98%; /* Safari/Chrome, other WebKit */ /* Firefox, other Gecko */
- box-sizing: border-box;
-}
-
-.wp-customizer .expanded .widget-conditional .form{
- overflow: scroll;
- margin-bottom: 20px;
-}
-.widget-liquid-right .widget.expanded {
- overflow: visible;
-}
-.widget-conditional-hide {
- display: none;
-}
-.widget-conditional .widget-conditional-inner {
- background: #F9F9F9;
- border: 1px solid #DFDFDF;
- padding: 12px 10px 0;
-
-}
-.widget-conditional {
- margin-bottom: 12px;
-}
-.widget-conditional .conditions{
- margin-bottom: 12px;
-}
-.widget-conditional .condition,
-.widget-conditional .condition-top {
- clear:both;
-}
-.widget-conditional .condition {
- padding-top: 12px;
- position: relative;
-}
-.widget-conditional .condition select {
- width: 120px;
- position: relative;
- z-index: 2;
-}
-.widget-conditional .condition-top select {
- width: auto;
-}
-.widget-conditional .condition-control {
- padding-top: 4px;
- clear: both;
- margin-top: -20px;
-}
-.widget-conditional .selection {
- margin-left: 50px;
- margin-right: 20px;
-}
-.widget-conditional .conditions-rule-has-children {
- display: block;
-}
-.widget-conditional .condition .actions {
- margin-top: -28px;
-}.widget-conditional .condition .actions {
- margin-top: -28px;
-}
-
-.widget-conditional .condition-control a {
- text-decoration: none;
- position: absolute;
- top: 17px;
- text-indent: -9999px;
- z-index: 1;
-}
-.widget-conditional .condition-control a:before {
- position: absolute;
- text-indent: 0;
- right: 0;
-}
-.widget-conditional .condition-control .delete-condition {
- right: 0;
- color: #f11;
-}
-.widget-conditional .condition-control .add-condition {
- left: 0;
-}
-
-.widget-conditional .condition:last-child .condition-conjunction,
-.widget-conditional .condition:last-child .condition-intersection {
- display: none;
-}
-
-.widget-conditional.conjunction .condition-intersection {
- display: none;
-}
-
-.widget-conditional.intersection .condition-conjunction {
- display: none;
-}
-
-.wp-core-ui .button.display-options {
- margin-left: 5px;
-}
-.wp-core-ui .button.display-options:hover {
- text-decoration: none;
-}
-
-.wp-customizer .widget-conditional select {
- min-width: 0;
- max-width: none;
- height: auto;
-}
-.wp-customizer .widget-conditional .condition-control a {
- top: 15px;
-}
-@media screen and ( max-width: 782px ) {
- .widget-conditional .condition-control a {
- top: 20px;
- }
-}
diff --git a/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions-rtl.css b/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions-rtl.css
deleted file mode 100644
index 69d6031f..00000000
--- a/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions-rtl.css
+++ /dev/null
@@ -1,116 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-.wp-customizer .expanded .widget-conditional .widget-conditional-inner {
- width: 98%; /* Safari/Chrome, other WebKit */ /* Firefox, other Gecko */
- box-sizing: border-box;
-}
-
-.wp-customizer .expanded .widget-conditional .form{
- overflow: scroll;
- margin-bottom: 20px;
-}
-.widget-liquid-right .widget.expanded {
- overflow: visible;
-}
-.widget-conditional-hide {
- display: none;
-}
-.widget-conditional .widget-conditional-inner {
- background: #F9F9F9;
- border: 1px solid #DFDFDF;
- padding: 12px 10px 0;
-
-}
-.widget-conditional {
- margin-bottom: 12px;
-}
-.widget-conditional .conditions{
- margin-bottom: 12px;
-}
-.widget-conditional .condition,
-.widget-conditional .condition-top {
- clear:both;
-}
-.widget-conditional .condition {
- padding-top: 12px;
- position: relative;
-}
-.widget-conditional .condition select {
- width: 120px;
- position: relative;
- z-index: 2;
-}
-.widget-conditional .condition-top select {
- width: auto;
-}
-.widget-conditional .condition-control {
- padding-top: 4px;
- clear: both;
- margin-top: -20px;
-}
-.widget-conditional .selection {
- margin-left: 50px;
- margin-right: 20px;
-}
-.widget-conditional .conditions-rule-has-children {
- display: block;
-}
-.widget-conditional .condition .actions {
- margin-top: -28px;
-}.widget-conditional .condition .actions {
- margin-top: -28px;
-}
-
-.widget-conditional .condition-control a {
- text-decoration: none;
- position: absolute;
- top: 17px;
- text-indent: -9999px;
- z-index: 1;
-}
-.widget-conditional .condition-control a:before {
- position: absolute;
- text-indent: 0;
- top: 0;
- right: 0;
-}
-.widget-conditional .condition-control .delete-condition {
- right: 0;
- color: #f11;
-}
-.widget-conditional .condition-control .add-condition {
- left: 0;
-}
-
-.widget-conditional .condition:last-child .condition-conjunction,
-.widget-conditional .condition:last-child .condition-intersection {
- display: none;
-}
-
-.widget-conditional.conjunction .condition-intersection {
- display: none;
-}
-
-.widget-conditional.intersection .condition-conjunction {
- display: none;
-}
-
-.wp-core-ui .button.display-options {
- margin-left: 5px;
-}
-.wp-core-ui .button.display-options:hover {
- text-decoration: none;
-}
-
-.wp-customizer .widget-conditional select {
- min-width: 0;
- max-width: none;
- height: auto;
-}
-.wp-customizer .widget-conditional .condition-control a {
- top: 15px;
-}
-@media screen and ( max-width: 782px ) {
- .widget-conditional .condition-control a {
- top: 20px;
- }
-}
diff --git a/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions-rtl.min.css b/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions-rtl.min.css
deleted file mode 100644
index 410e7a46..00000000
--- a/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.wp-customizer .expanded .widget-conditional .widget-conditional-inner{width:98%;box-sizing:border-box}.wp-customizer .expanded .widget-conditional .form{overflow:scroll;margin-bottom:20px}.widget-liquid-right .widget.expanded{overflow:visible}.widget-conditional-hide{display:none}.widget-conditional .widget-conditional-inner{background:#f9f9f9;border:1px solid #dfdfdf;padding:12px 10px 0}.widget-conditional{margin-bottom:12px}.widget-conditional .conditions{margin-bottom:12px}.widget-conditional .condition,.widget-conditional .condition-top{clear:both}.widget-conditional .condition{padding-top:12px;position:relative}.widget-conditional .condition select{width:120px;position:relative;z-index:2}.widget-conditional .condition-top select{width:auto}.widget-conditional .condition-control{padding-top:4px;clear:both;margin-top:-20px}.widget-conditional .selection{margin-left:50px;margin-right:20px}.widget-conditional .conditions-rule-has-children{display:block}.widget-conditional .condition .actions{margin-top:-28px}.widget-conditional .condition .actions{margin-top:-28px}.widget-conditional .condition-control a{text-decoration:none;position:absolute;top:17px;text-indent:-9999px;z-index:1}.widget-conditional .condition-control a:before{position:absolute;text-indent:0;top:0;right:0}.widget-conditional .condition-control .delete-condition{right:0;color:#f11}.widget-conditional .condition-control .add-condition{left:0}.widget-conditional .condition:last-child .condition-conjunction,.widget-conditional .condition:last-child .condition-intersection{display:none}.widget-conditional.conjunction .condition-intersection{display:none}.widget-conditional.intersection .condition-conjunction{display:none}.wp-core-ui .button.display-options{margin-left:5px}.wp-core-ui .button.display-options:hover{text-decoration:none}.wp-customizer .widget-conditional select{min-width:0;max-width:none;height:auto}.wp-customizer .widget-conditional .condition-control a{top:15px}@media screen and (max-width:782px){.widget-conditional .condition-control a{top:20px}} \ No newline at end of file
diff --git a/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.css b/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.css
deleted file mode 100644
index 72d27b8b..00000000
--- a/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.css
+++ /dev/null
@@ -1,117 +0,0 @@
-.wp-customizer .expanded .widget-conditional .widget-conditional-inner {
- width: 98%;
- -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
- -moz-box-sizing: border-box; /* Firefox, other Gecko */
- box-sizing: border-box;
-}
-
-.wp-customizer .expanded .widget-conditional .form{
- overflow: scroll;
- margin-bottom: 20px;
-}
-.widget-liquid-right .widget.expanded {
- overflow: visible;
-}
-.widget-conditional-hide {
- display: none;
-}
-.widget-conditional .widget-conditional-inner {
- background: #F9F9F9;
- border: 1px solid #DFDFDF;
- padding: 12px 10px 0;
-
-}
-.widget-conditional {
- margin-bottom: 12px;
-}
-.widget-conditional .conditions{
- margin-bottom: 12px;
-}
-.widget-conditional .condition,
-.widget-conditional .condition-top {
- clear:both;
-}
-.widget-conditional .condition {
- padding-top: 12px;
- position: relative;
-}
-.widget-conditional .condition select {
- width: 120px;
- position: relative;
- z-index: 2;
-}
-.widget-conditional .condition-top select {
- width: auto;
-}
-.widget-conditional .condition-control {
- padding-top: 4px;
- clear: both;
- margin-top: -20px;
-}
-.widget-conditional .selection {
- margin-right: 50px;
- margin-left: 20px;
-}
-.widget-conditional .conditions-rule-has-children {
- display: block;
-}
-.widget-conditional .condition .actions {
- margin-top: -28px;
-}.widget-conditional .condition .actions {
- margin-top: -28px;
-}
-
-.widget-conditional .condition-control a {
- text-decoration: none;
- position: absolute;
- top: 17px;
- text-indent: -9999px;
- z-index: 1;
-}
-.widget-conditional .condition-control a:before {
- position: absolute;
- text-indent: 0;
- top: 0;
- left: 0;
-}
-.widget-conditional .condition-control .delete-condition {
- left: 0;
- color: #f11;
-}
-.widget-conditional .condition-control .add-condition {
- right: 0;
-}
-
-.widget-conditional .condition:last-child .condition-conjunction,
-.widget-conditional .condition:last-child .condition-intersection {
- display: none;
-}
-
-.widget-conditional.conjunction .condition-intersection {
- display: none;
-}
-
-.widget-conditional.intersection .condition-conjunction {
- display: none;
-}
-
-.wp-core-ui .button.display-options {
- margin-right: 5px;
-}
-.wp-core-ui .button.display-options:hover {
- text-decoration: none;
-}
-
-.wp-customizer .widget-conditional select {
- min-width: 0;
- max-width: none;
- height: auto;
-}
-.wp-customizer .widget-conditional .condition-control a {
- top: 15px;
-}
-@media screen and ( max-width: 782px ) {
- .widget-conditional .condition-control a {
- top: 20px;
- }
-}
diff --git a/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.js b/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.js
deleted file mode 100644
index 4a9eac59..00000000
--- a/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.js
+++ /dev/null
@@ -1,265 +0,0 @@
-/* jshint onevar: false, smarttabs: true */
-/* global isRtl */
-/* global widget_conditions_parent_pages */
-/* global widget_conditions_data */
-/* global jQuery */
-
-jQuery( function( $ ) {
- var widgets_shell = $( 'div#widgets-right' );
-
- if ( ! widgets_shell.length || ! $( widgets_shell ).find( '.widget-control-actions' ).length ) {
- widgets_shell = $( 'form#customize-controls' );
- }
-
- function setWidgetMargin( $widget ) {
- var currentWidth,
- extra;
-
- if ( $( 'body' ).hasClass( 'wp-customizer' ) ) {
- // set the inside widget 2 top this way we can see the widget settings
- $widget.find( '.widget-inside' ).css( 'top', 0 );
-
- return;
- }
-
- if ( $widget.hasClass( 'expanded' ) ) {
- // The expanded widget must be at least 400px wide in order to
- // contain the visibility settings. IE wasn't handling the
- // margin-left value properly.
-
- if ( $widget.attr( 'style' ) ) {
- $widget.data( 'original-style', $widget.attr( 'style' ) );
- }
-
- currentWidth = $widget.width();
-
- if ( currentWidth < 400 ) {
- extra = 400 - currentWidth;
- if ( isRtl ) {
- $widget.css( 'position', 'relative' ).css( 'right', '-' + extra + 'px' ).css( 'width', '400px' );
- } else {
- $widget.css( 'position', 'relative' ).css( 'left', '-' + extra + 'px' ).css( 'width', '400px' );
- }
- }
- } else if ( $widget.data( 'original-style' ) ) {
- // Restore any original inline styles when visibility is toggled off.
- $widget.attr( 'style', $widget.data( 'original-style' ) ).data( 'original-style', null );
- } else {
- $widget.removeAttr( 'style' );
- }
- }
-
- function moveWidgetVisibilityButton( $widget ) {
- var $displayOptionsButton = $widget.find( 'a.display-options' ).first();
- $displayOptionsButton.insertBefore( $widget.find( 'input.widget-control-save' ) );
-
- // Widgets with no configurable options don't show the Save button's container.
- $displayOptionsButton
- .parent()
- .removeClass( 'widget-control-noform' )
- .find( '.spinner' )
- .remove()
- .css( 'float', 'left' )
- .prependTo( $displayOptionsButton.parent() );
- }
-
- $( '.widget' ).each( function() {
- moveWidgetVisibilityButton( $( this ) );
- } );
-
- $( document ).on( 'widget-added', function( e, $widget ) {
- if ( $widget.find( 'div.widget-control-actions a.display-options' ).length === 0 ) {
- moveWidgetVisibilityButton( $widget );
- }
- } );
-
- widgets_shell.on( 'click.widgetconditions', 'a.add-condition', function( e ) {
- var $condition = $( this ).closest( 'div.condition' ),
- $conditionClone = $condition.clone().data( 'rule-major', '' ).data( 'rule-minor', '' ).data( 'has-children','' ).insertAfter( $condition );
-
- e.preventDefault();
-
- $conditionClone.find( 'select.conditions-rule-major' ).val( '' );
- $conditionClone.find( 'select.conditions-rule-minor' ).html( '' ).attr( 'disabled' );
- $conditionClone.find( 'span.conditions-rule-has-children' ).hide().find( 'input[type="checkbox"]' ).removeAttr( 'checked' );
-
- resetRuleIndexes( $conditionClone.closest( '.conditions' ) );
- } );
-
- widgets_shell.on( 'click.widgetconditions', 'a.display-options', function( e ) {
- var $displayOptionsButton = $( this ),
- $widget = $displayOptionsButton.closest( 'div.widget' );
-
- e.preventDefault();
-
- $widget.find( 'div.widget-conditional' ).toggleClass( 'widget-conditional-hide' );
- $( this ).toggleClass( 'active' );
- $widget.toggleClass( 'expanded' );
- setWidgetMargin( $widget );
-
- if ( $( this ).hasClass( 'active' ) ) {
- $widget.find( 'input[name=widget-conditions-visible]' ).val( '1' );
- $widget.find( '.condition' ).each( function() {
- buildMinorConditions( $( this ) );
- } );
- } else {
- $widget.find( 'input[name=widget-conditions-visible]' ).val( '0' );
- }
- } );
-
- widgets_shell.on( 'click.widgetconditions', 'a.delete-condition', function( e ) {
- var $condition = $( this ).closest( 'div.condition' );
-
- e.preventDefault();
-
- if ( $condition.is( ':first-child' ) && $condition.is( ':last-child' ) ) {
- $( this ).closest( 'div.widget' ).find( 'a.display-options' ).click();
- $condition.find( 'select.conditions-rule-major' ).val( '' ).change();
- } else {
- $condition.find( 'select.conditions-rule-major' ).change();
- $condition.detach();
- }
-
- resetRuleIndexes( $condition.closest( '.conditions' ) );
- } );
-
- widgets_shell.on( 'click.widgetconditions', 'div.widget-top', function() {
- var $widget = $( this ).closest( 'div.widget' ),
- $displayOptionsButton = $widget.find( 'a.display-options' );
-
- if ( $displayOptionsButton.hasClass( 'active' ) ) {
- $displayOptionsButton.attr( 'opened', 'true' );
- }
-
- if ( $displayOptionsButton.attr( 'opened' ) ) {
- $displayOptionsButton.removeAttr( 'opened' );
- $widget.toggleClass( 'expanded' );
- setWidgetMargin( $widget );
- }
- } );
-
- widgets_shell.on( 'change.widgetconditions', 'input.conditions-match-all', function() {
- $( this ).parents( '.widget-conditional' )
- .toggleClass( 'conjunction' )
- .toggleClass( 'intersection' );
- } );
-
- $( document ).on( 'change.widgetconditions', 'select.conditions-rule-major', function() {
- var $conditionsRuleMajor = $( this ),
- $conditionsRuleMinor = $conditionsRuleMajor.siblings( 'select.conditions-rule-minor:first' ),
- $conditionsRuleHasChildren = $conditionsRuleMajor.siblings( 'span.conditions-rule-has-children' ),
- $condition = $conditionsRuleMinor.closest( '.condition' );
-
- $condition.data( 'rule-minor', '' ).data( 'rule-major', $conditionsRuleMajor.val() );
-
- if ( $conditionsRuleMajor.val() ) {
- buildMinorConditions( $condition );
- } else {
- $conditionsRuleMajor.siblings( 'select.conditions-rule-minor' ).attr( 'disabled', 'disabled' ).html( '' );
- $conditionsRuleHasChildren.hide().find( 'input[type="checkbox"]' ).removeAttr( 'checked' );
- }
- } );
-
- $( document ).on( 'change.widgetconditions', 'select.conditions-rule-minor', function() {
- var $conditionsRuleMinor = $( this ),
- $conditionsRuleMajor = $conditionsRuleMinor.siblings( 'select.conditions-rule-major' ),
- $conditionsRuleHasChildren = $conditionsRuleMinor.siblings( 'span.conditions-rule-has-children' ),
- $condition = $conditionsRuleMinor.closest( '.condition' );
-
- $condition.data( 'rule-minor', $conditionsRuleMinor.val() );
-
- if ( $conditionsRuleMajor.val() === 'page' ) {
- if ( $conditionsRuleMinor.val() in widget_conditions_parent_pages ) {
- $conditionsRuleHasChildren.show();
- } else {
- $conditionsRuleHasChildren.hide().find( 'input[type="checkbox"]' ).removeAttr( 'checked' );
- }
- } else {
- $conditionsRuleHasChildren.hide().find( 'input[type="checkbox"]' ).removeAttr( 'checked' );
- }
- } );
-
- $( document ).on( 'widget-updated widget-synced', function( e, widget ) {
- widget.find( '.condition' ).each( function() {
- buildMinorConditions( $( this ) );
- } );
- } );
-
- function buildMinorConditions( condition ) {
- var minor,
- hasChildren,
- majorData,
- i,
- j,
- key,
- val,
- _len,
- _jlen,
- subkey,
- subval,
- optgroup,
- select = condition.find( '.conditions-rule-minor' ).html( '' ),
- major = condition.data( 'rule-major' );
-
- // Disable the select, if major rule is empty or if it's a `post_type`.
- // "Post Type" rule has been removed in Jetpack 4.7, and
- // because it breaks all other rules we should `return`.
- if ( ! major || 'post_type' === major ) {
- select.attr( 'disabled', 'disabled' );
- return;
- }
-
- minor = condition.data( 'rule-minor' );
- hasChildren = condition.data( 'rule-has-children' );
- majorData = widget_conditions_data[ major ];
-
- for ( i = 0, _len = majorData.length; i < _len; i++ ) {
- key = majorData[i][0];
- val = majorData[i][1];
-
- if ( typeof val === 'object' ) {
- optgroup = $( '<optgroup/>' ).attr( 'label', key );
-
- for ( j = 0, _jlen = val.length; j < _jlen; j++ ) {
- subkey = majorData[i][1][j][0];
- subval = majorData[i][1][j][1];
-
- optgroup.append( $( '<option/>' ).val( subkey ).text( decodeEntities( subval.replace( /&nbsp;/g, '\xA0' ) ) ) );
- }
-
- select.append( optgroup );
- } else {
- select.append( $( '<option/>' ).val( key ).text( decodeEntities( val.replace( /&nbsp;/g, '\xA0' ) ) ) );
- }
- }
-
- select.removeAttr( 'disabled' );
- select.val( minor );
-
- if ( 'page' === major && minor in widget_conditions_parent_pages ) {
- select.siblings( 'span.conditions-rule-has-children' ).show();
-
- if ( hasChildren ) {
- select.siblings( 'span.conditions-rule-has-children' ).find( 'input[type="checkbox"]' ).attr( 'checked', 'checked' );
- }
- } else {
- select.siblings( 'span.conditions-rule-has-children' ).hide().find( 'input[type="checkbox"]' ).removeAttr( 'checked' );
- }
- }
-
- function resetRuleIndexes( widget ) {
- var index = 0;
- widget.find( 'span.conditions-rule-has-children' )
- .find( 'input[type="checkbox"]' )
- .each( function() {
- $( this ).attr( 'name', 'conditions[page_children][' + index + ']' );
- index++;
- } );
- }
-
- function decodeEntities( encodedString ) {
- var textarea = document.createElement( 'textarea' );
- textarea.innerHTML = encodedString;
- return textarea.value;
- }
-} );
diff --git a/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.min.css b/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.min.css
deleted file mode 100644
index 33ba43d1..00000000
--- a/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-.wp-customizer .expanded .widget-conditional .widget-conditional-inner{width:98%;box-sizing:border-box}.wp-customizer .expanded .widget-conditional .form{overflow:scroll;margin-bottom:20px}.widget-liquid-right .widget.expanded{overflow:visible}.widget-conditional-hide{display:none}.widget-conditional .widget-conditional-inner{background:#f9f9f9;border:1px solid #dfdfdf;padding:12px 10px 0}.widget-conditional{margin-bottom:12px}.widget-conditional .conditions{margin-bottom:12px}.widget-conditional .condition,.widget-conditional .condition-top{clear:both}.widget-conditional .condition{padding-top:12px;position:relative}.widget-conditional .condition select{width:120px;position:relative;z-index:2}.widget-conditional .condition-top select{width:auto}.widget-conditional .condition-control{padding-top:4px;clear:both;margin-top:-20px}.widget-conditional .selection{margin-right:50px;margin-left:20px}.widget-conditional .conditions-rule-has-children{display:block}.widget-conditional .condition .actions{margin-top:-28px}.widget-conditional .condition .actions{margin-top:-28px}.widget-conditional .condition-control a{text-decoration:none;position:absolute;top:17px;text-indent:-9999px;z-index:1}.widget-conditional .condition-control a:before{position:absolute;text-indent:0;top:0;left:0}.widget-conditional .condition-control .delete-condition{left:0;color:#f11}.widget-conditional .condition-control .add-condition{right:0}.widget-conditional .condition:last-child .condition-conjunction,.widget-conditional .condition:last-child .condition-intersection{display:none}.widget-conditional.conjunction .condition-intersection{display:none}.widget-conditional.intersection .condition-conjunction{display:none}.wp-core-ui .button.display-options{margin-right:5px}.wp-core-ui .button.display-options:hover{text-decoration:none}.wp-customizer .widget-conditional select{min-width:0;max-width:none;height:auto}.wp-customizer .widget-conditional .condition-control a{top:15px}@media screen and (max-width:782px){.widget-conditional .condition-control a{top:20px}} \ No newline at end of file
diff --git a/plugins/jetpack/modules/widgets.php b/plugins/jetpack/modules/widgets.php
deleted file mode 100644
index 24f63779..00000000
--- a/plugins/jetpack/modules/widgets.php
+++ /dev/null
@@ -1,97 +0,0 @@
-<?php
-/**
- * Module Name: Extra Sidebar Widgets
- * Module Description: Add images, Twitter streams, and more to your sidebar.
- * Sort Order: 4
- * First Introduced: 1.2
- * Requires Connection: No
- * Auto Activate: Yes
- * Module Tags: Social, Appearance
- * Feature: Appearance
- * Additional Search Queries: widget, widgets, facebook, gallery, twitter, gravatar, image, rss
- */
-
-function jetpack_load_widgets() {
- $widgets_include = array();
-
- foreach ( Jetpack::glob_php( dirname( __FILE__ ) . '/widgets' ) as $file ) {
- $widgets_include[] = $file;
- }
- /**
- * Modify which Jetpack Widgets to register.
- *
- * @module widgets
- *
- * @since 2.2.1
- *
- * @param array $widgets_include An array of widgets to be registered.
- */
- $widgets_include = apply_filters( 'jetpack_widgets_to_include', $widgets_include );
-
- foreach( $widgets_include as $include ) {
- include_once $include;
- }
-
- include_once dirname( __FILE__ ) . '/widgets/migrate-to-core/image-widget.php';
- include_once dirname( __FILE__ ) . '/widgets/migrate-to-core/gallery-widget.php';
-}
-
-add_action( 'jetpack_modules_loaded', 'jetpack_widgets_loaded' );
-
-function jetpack_widgets_loaded() {
- Jetpack::enable_module_configurable( __FILE__ );
- Jetpack::module_configuration_load( __FILE__, 'jetpack_widgets_configuration_load' );
- add_filter( 'jetpack_module_configuration_url_widgets', 'jetpack_widgets_configuration_url' );
-}
-
-function jetpack_widgets_configuration_load() {
- wp_safe_redirect( admin_url( 'widgets.php' ) );
- exit;
-}
-
-/**
- * Overrides default configuration url
- *
- * @uses admin_url
- * @return string module settings URL
- */
-function jetpack_widgets_configuration_url() {
- return admin_url( 'customize.php?autofocus[panel]=widgets' );
-}
-
-jetpack_load_widgets();
-
-/**
- * Enqueue utilities to work with widgets in Customizer.
- *
- * @since 4.4.0
- */
-function jetpack_widgets_customizer_assets_preview() {
- wp_enqueue_script( 'jetpack-customizer-widget-utils', plugins_url( '/widgets/customizer-utils.js', __FILE__ ), array( 'customize-base' ) );
-}
-add_action( 'customize_preview_init', 'jetpack_widgets_customizer_assets_preview' );
-
-/**
- * Enqueue styles to stylize widgets in Customizer.
- *
- * @since 4.4.0
- */
-function jetpack_widgets_customizer_assets_controls() {
- wp_enqueue_style( 'jetpack-customizer-widget-controls', plugins_url( '/widgets/customizer-controls.css', __FILE__ ), array( 'customize-widgets' ) );
-}
-add_action( 'customize_controls_enqueue_scripts', 'jetpack_widgets_customizer_assets_controls' );
-
-function jetpack_widgets_remove_old_widgets() {
- $old_widgets = array(
- 'googleplus-badge',
- );
-
- // Don't bother cleaning up the sidebars_widgets data.
- // That will get cleaned up the next time a widget is
- // added, removed, moved, etc.
- foreach ( $old_widgets as $old_widget ) {
- delete_option( "widget_{$old_widget}" );
- }
-}
-
-add_action( 'updating_jetpack_version', 'jetpack_widgets_remove_old_widgets' );
diff --git a/plugins/jetpack/modules/widgets/authors.php b/plugins/jetpack/modules/widgets/authors.php
deleted file mode 100644
index dfc78652..00000000
--- a/plugins/jetpack/modules/widgets/authors.php
+++ /dev/null
@@ -1,271 +0,0 @@
-<?php
-/**
- * Disable direct access/execution to/of the widget code.
- */
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-/**
- * Widget to display blog authors with avatars and recent posts.
- *
- * Configurable parameters include:
- * 1. Whether to display authors who haven't written any posts
- * 2. The number of posts to be displayed per author (defaults to 0)
- * 3. Avatar size
- *
- * @since 4.5.0
- */
-class Jetpack_Widget_Authors extends WP_Widget {
- public function __construct() {
- parent::__construct(
- 'authors',
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', __( 'Authors', 'jetpack' ) ),
- array(
- 'classname' => 'widget_authors',
- 'description' => __( 'Display blogs authors with avatars and recent posts.', 'jetpack' ),
- 'customize_selective_refresh' => true,
- )
- );
-
- if ( is_active_widget( false, false, $this->id_base ) || is_active_widget( false, false, 'monster' ) || is_customize_preview() ) {
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ) );
- }
-
- add_action( 'publish_post', array( __CLASS__, 'flush_cache' ) );
- add_action( 'deleted_post', array( __CLASS__, 'flush_cache' ) );
- add_action( 'switch_theme', array( __CLASS__, 'flush_cache' ) );
- }
-
- /**
- * Enqueue stylesheet to adapt the widget to various themes.
- *
- * @since 4.5.0
- */
- function enqueue_style() {
- wp_register_style( 'jetpack-authors-widget', plugins_url( 'authors/style.css', __FILE__ ), array(), '20161228' );
- wp_enqueue_style( 'jetpack-authors-widget' );
- }
-
- public static function flush_cache() {
- wp_cache_delete( 'widget_authors', 'widget' );
- wp_cache_delete( 'widget_authors_ssl', 'widget' );
- }
-
- public function widget( $args, $instance ) {
- $cache_bucket = is_ssl() ? 'widget_authors_ssl' : 'widget_authors';
-
- if ( '%BEG_OF_TITLE%' != $args['before_title'] ) {
- if ( $output = wp_cache_get( $cache_bucket, 'widget' ) ) {
- echo $output;
- return;
- }
-
- ob_start();
- }
-
- $instance = wp_parse_args(
- $instance, array(
- 'title' => __( 'Authors', 'jetpack' ),
- 'all' => false,
- 'number' => 5,
- 'avatar_size' => 48,
- )
- );
- $instance['number'] = min( 10, max( 0, (int) $instance['number'] ) );
-
- // We need to query at least one post to determine whether an author has written any posts or not
- $query_number = max( $instance['number'], 1 );
-
- $default_excluded_authors = array();
- /**
- * Filter authors from the Widget Authors widget.
- *
- * @module widgets
- *
- * @since 4.5.0
- *
- * @param array $default_excluded_authors Array of user ID's that will be excluded
- */
- $excluded_authors = apply_filters( 'jetpack_widget_authors_exclude', $default_excluded_authors );
-
- $authors = get_users(
- array(
- 'fields' => 'all',
- 'who' => 'authors',
- 'exclude' => (array) $excluded_authors,
- )
- );
-
- echo $args['before_widget'];
- /** This filter is documented in core/src/wp-includes/default-widgets.php */
- $title = apply_filters( 'widget_title', $instance['title'] );
- echo $args['before_title'] . esc_html( $title ) . $args['after_title'];
- echo '<ul>';
-
- $default_post_type = 'post';
- /**
- * Filter types of posts that will be counted in the widget
- *
- * @module widgets
- *
- * @since 4.5.0
- *
- * @param string|array $default_post_type type(s) of posts to count for the widget.
- */
- $post_types = apply_filters( 'jetpack_widget_authors_post_types', $default_post_type );
-
- foreach ( $authors as $author ) {
- $r = new WP_Query(
- array(
- 'author' => $author->ID,
- 'posts_per_page' => $query_number,
- 'post_type' => $post_types,
- 'post_status' => 'publish',
- 'no_found_rows' => true,
- 'has_password' => false,
- )
- );
-
- if ( ! $r->have_posts() && ! $instance['all'] ) {
- continue;
- }
-
- echo '<li>';
-
- // Display avatar and author name
- if ( $r->have_posts() ) {
- echo '<a href="' . get_author_posts_url( $author->ID ) . '">';
-
- if ( $instance['avatar_size'] > 1 ) {
- echo ' ' . get_avatar( $author->ID, $instance['avatar_size'], '', true ) . ' ';
- }
-
- echo '<strong>' . esc_html( $author->display_name ) . '</strong>';
- echo '</a>';
- } elseif ( $instance['all'] ) {
- if ( $instance['avatar_size'] > 1 ) {
- echo get_avatar( $author->ID, $instance['avatar_size'], '', true ) . ' ';
- }
-
- echo '<strong>' . esc_html( $author->display_name ) . '</strong>';
- }
-
- if ( 0 == $instance['number'] ) {
- echo '</li>';
- continue;
- }
-
- // Display a short list of recent posts for this author
-
- if ( $r->have_posts() ) {
- echo '<ul>';
-
- while ( $r->have_posts() ) {
- $r->the_post();
- echo '<li><a href="' . get_permalink() . '">';
-
- if ( get_the_title() ) {
- echo get_the_title();
- } else {
- echo get_the_ID();
- }
-
- echo '</a></li>';
- }
-
- echo '</ul>';
- }
-
- echo '</li>';
- }
-
- echo '</ul>';
- echo $args['after_widget'];
-
- wp_reset_postdata();
-
- if ( '%BEG_OF_TITLE%' != $args['before_title'] ) {
- wp_cache_add( $cache_bucket, ob_get_flush(), 'widget' );
- }
-
- /** This action is documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', 'authors' );
- }
-
- public function form( $instance ) {
- $instance = wp_parse_args(
- $instance, array(
- 'title' => '',
- 'all' => false,
- 'avatar_size' => 48,
- 'number' => 5,
- )
- );
-
- ?>
- <p>
- <label>
- <?php _e( 'Title:', 'jetpack' ); ?>
- <input class="widefat" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" />
- </label>
- </p>
- <p>
- <label>
- <input class="checkbox" type="checkbox" <?php checked( $instance['all'] ); ?> name="<?php echo $this->get_field_name( 'all' ); ?>" />
- <?php _e( 'Display all authors (including those who have not written any posts)', 'jetpack' ); ?>
- </label>
- </p>
- <p>
- <label>
- <?php _e( 'Number of posts to show for each author:', 'jetpack' ); ?>
- <input style="width: 50px; text-align: center;" name="<?php echo $this->get_field_name( 'number' ); ?>" type="text" value="<?php echo esc_attr( $instance['number'] ); ?>" />
- <?php _e( '(at most 10)', 'jetpack' ); ?>
- </label>
- </p>
- <p>
- <label>
- <?php _e( 'Avatar Size (px):', 'jetpack' ); ?>
- <select name="<?php echo $this->get_field_name( 'avatar_size' ); ?>">
- <?php
- foreach ( array(
- '1' => __( 'No Avatars', 'jetpack' ),
- '16' => '16x16',
- '32' => '32x32',
- '48' => '48x48',
- '96' => '96x96',
- '128' => '128x128',
- ) as $value => $label ) {
-?>
- <option value="<?php echo esc_attr( $value ); ?>" <?php selected( $value, $instance['avatar_size'] ); ?>><?php echo esc_html( $label ); ?></option>
- <?php } ?>
- </select>
- </label>
- </p>
- <?php
- }
-
- /**
- * Updates the widget on save and flushes cache.
- *
- * @param array $new_instance
- * @param array $old_instance
- * @return array
- */
- public function update( $new_instance, $old_instance ) {
- $new_instance['title'] = strip_tags( $new_instance['title'] );
- $new_instance['all'] = isset( $new_instance['all'] );
- $new_instance['number'] = (int) $new_instance['number'];
- $new_instance['avatar_size'] = (int) $new_instance['avatar_size'];
-
- Jetpack_Widget_Authors::flush_cache();
-
- return $new_instance;
- }
-}
-
-add_action( 'widgets_init', 'jetpack_register_widget_authors' );
-function jetpack_register_widget_authors() {
- register_widget( 'Jetpack_Widget_Authors' );
-};
diff --git a/plugins/jetpack/modules/widgets/authors/style.css b/plugins/jetpack/modules/widgets/authors/style.css
deleted file mode 100644
index 17ca1b69..00000000
--- a/plugins/jetpack/modules/widgets/authors/style.css
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Authors Widget */
-.widget_authors > ul, .widget.widget_authors li > ul {
- margin-left: inherit;
- padding-left: 0;
-}
-.widget_authors ul li li {
- padding-left: 0;
-}
-
-.widget_authors > ul > li {
- margin-bottom: 1em;
- list-style: none;
-}
-
-.widget_authors > ul > li + li {
- border-top: 0;
-}
-
-.widget.widget_authors img {
- margin-right: 5px;
- margin-bottom: 5px;
- vertical-align: middle;
- -webkit-box-shadow: none;
- box-shadow: none;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/widgets/blog-stats.php b/plugins/jetpack/modules/widgets/blog-stats.php
deleted file mode 100644
index e89db686..00000000
--- a/plugins/jetpack/modules/widgets/blog-stats.php
+++ /dev/null
@@ -1,173 +0,0 @@
-<?php
-/**
- * Blog Stats Widget.
- *
- * @since 4.5.0
- *
- * @package Jetpack
- */
-
-/**
- * Disable direct access/execution to/of the widget code.
- */
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-/**
- * Blog Stats Widget.
- *
- * Displays all time stats for that site.
- *
- * @since 4.5.0
- */
-class Jetpack_Blog_Stats_Widget extends WP_Widget {
-
- /**
- * Constructor
- */
- function __construct() {
- $widget_ops = array(
- 'classname' => 'blog-stats',
- 'description' => esc_html__( 'Show a hit counter for your blog.', 'jetpack' ),
- 'customize_selective_refresh' => true,
- );
- parent::__construct(
- 'blog-stats',
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', esc_html__( 'Blog Stats', 'jetpack' ) ),
- $widget_ops
- );
- $this->alt_option_name = 'widget_statscounter';
- }
-
- /**
- * Return an associative array of default values
- *
- * These values are used in new widgets.
- *
- * @return array Array of default values for the Widget's options
- */
- public function defaults() {
- return array(
- 'title' => esc_html__( 'Blog Stats', 'jetpack' ),
- /* Translators: Number of views, plural */
- 'hits' => esc_html__( 'hits', 'jetpack' ),
- );
- }
-
- /**
- * Return All Time Stats for that blog.
- *
- * We query the WordPress.com Stats REST API endpoint.
- *
- * @uses stats_get_from_restapi(). That function caches data locally for 5 minutes.
- *
- * @return string|false $views All Time Stats for that blog.
- */
- public function get_stats() {
- // Get data from the WordPress.com Stats REST API endpoint.
- $stats = stats_get_from_restapi( array( 'fields' => 'stats' ) );
-
- if ( isset( $stats->stats->views ) ) {
- return $stats->stats->views;
- } else {
- return false;
- }
- }
-
- /**
- * Back end widget form.
- *
- * @see WP_Widget::form()
- *
- * @param array $instance Previously saved values from database.
- *
- * @return void
- */
- function form( $instance ) {
- $instance = wp_parse_args( $instance, $this->defaults() );
- ?>
-
- <p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_html_e( 'Title:', 'jetpack' ); ?></label>
- <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" />
- </p>
- <p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'hits' ) ); ?>"><?php echo number_format_i18n( '12345' ); ?></label>
- <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'hits' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'hits' ) ); ?>" type="text" value="<?php echo esc_attr( $instance['hits'] ); ?>" />
- </p>
- <p><?php esc_html_e( 'Hit counter is delayed by up to 60 seconds.', 'jetpack' ); ?></p>
-
- <?php
- }
-
- /**
- * Sanitize widget form values as they are saved.
- *
- * @see WP_Widget::update()
- *
- * @param array $new_instance Values just sent to be saved.
- * @param array $old_instance Previously saved values from database.
- *
- * @return array Updated safe values to be saved.
- */
- function update( $new_instance, $old_instance ) {
- $instance = array();
- $instance['title'] = wp_kses( $new_instance['title'], array() );
- $instance['hits'] = wp_kses( $new_instance['hits'], array() );
-
- return $instance;
- }
-
- /**
- * Front-end display of widget.
- *
- * @see WP_Widget::widget()
- *
- * @param array $args Widget arguments.
- * @param array $instance Saved values from database.
- */
- function widget( $args, $instance ) {
- $instance = wp_parse_args( $instance, $this->defaults() );
-
- /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
- $title = apply_filters( 'widget_title', $instance['title'] );
-
- echo $args['before_widget'];
-
- if ( ! empty( $title ) ) {
- echo $args['before_title'] . esc_html( $title ) . $args['after_title'];
- }
-
- // Get the Site Stats.
- $views = $this->get_stats();
-
- if ( ! empty( $views ) ) {
- printf(
- '<ul><li>%1$s %2$s</li></ul>',
- number_format_i18n( $views ),
- isset( $instance['hits'] ) ? esc_html( $instance['hits'] ) : ''
- );
- } else {
- esc_html_e( 'There was an issue retrieving stats. Please try again later.', 'jetpack' );
- }
-
- echo $args['after_widget'];
-
- /** This action is already documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', 'blog_stats' );
- }
-}
-
-/**
- * If the Stats module is active in a recent version of Jetpack, register the widget.
- *
- * @since 4.5.0
- */
-function jetpack_blog_stats_widget_init() {
- if ( function_exists( 'stats_get_from_restapi' ) ) {
- register_widget( 'Jetpack_Blog_Stats_Widget' );
- }
-}
-add_action( 'widgets_init', 'jetpack_blog_stats_widget_init' );
diff --git a/plugins/jetpack/modules/widgets/contact-info.php b/plugins/jetpack/modules/widgets/contact-info.php
deleted file mode 100644
index 7a0a373e..00000000
--- a/plugins/jetpack/modules/widgets/contact-info.php
+++ /dev/null
@@ -1,391 +0,0 @@
-<?php
-
-if ( ! class_exists( 'Jetpack_Contact_Info_Widget' ) ) {
-
- //register Contact_Info_Widget widget
- function jetpack_contact_info_widget_init() {
- register_widget( 'Jetpack_Contact_Info_Widget' );
- }
-
- add_action( 'widgets_init', 'jetpack_contact_info_widget_init' );
-
- /**
- * Makes a custom Widget for displaying Restaurant Location/Map, Hours, and Contact Info available.
- *
- * @package WordPress
- */
- class Jetpack_Contact_Info_Widget extends WP_Widget {
-
- /**
- * Constructor
- */
- function __construct() {
- $widget_ops = array(
- 'classname' => 'widget_contact_info',
- 'description' => __( 'Display a map with your location, hours, and contact information.', 'jetpack' ),
- 'customize_selective_refresh' => true,
- );
- parent::__construct(
- 'widget_contact_info',
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', __( 'Contact Info & Map', 'jetpack' ) ),
- $widget_ops
- );
- $this->alt_option_name = 'widget_contact_info';
-
- if ( is_customize_preview() ) {
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
- }
- }
-
- /**
- * Enqueue scripts and styles.
- */
- public function enqueue_scripts() {
- wp_enqueue_style( 'contact-info-map-css', plugins_url( 'contact-info/contact-info-map.css', __FILE__ ), null, 20160623 );
- }
-
-
- /**
- * Return an associative array of default values
- *
- * These values are used in new widgets.
- *
- * @return array Array of default values for the Widget's options
- */
- public function defaults() {
- return array(
- 'title' => __( 'Hours & Info', 'jetpack' ),
- 'address' => __( "3999 Mission Boulevard,\nSan Diego CA 92109", 'jetpack' ),
- 'phone' => _x( '1-202-555-1212', 'Example of a phone number', 'jetpack' ),
- 'hours' => __( "Lunch: 11am - 2pm \nDinner: M-Th 5pm - 11pm, Fri-Sat:5pm - 1am", 'jetpack' ),
- 'email' => null,
- 'showmap' => 0,
- 'apikey' => null,
- 'lat' => null,
- 'lon' => null,
- );
- }
-
- /**
- * Outputs the HTML for this widget.
- *
- * @param array $args An array of standard parameters for widgets in this theme
- * @param array $instance An array of settings for this widget instance
- *
- * @return void Echoes it's output
- **/
- function widget( $args, $instance ) {
- $instance = wp_parse_args( $instance, $this->defaults() );
-
- echo $args['before_widget'];
-
- if ( '' != $instance['title'] ) {
- echo $args['before_title'] . $instance['title'] . $args['after_title'];
- }
-
- /**
- * Fires at the beginning of the Contact Info widget, after the title.
- *
- * @module widgets
- *
- * @since 3.9.2
- */
- do_action( 'jetpack_contact_info_widget_start' );
-
- echo '<div itemscope itemtype="http://schema.org/LocalBusiness">';
-
- if ( '' != $instance['address'] ) {
-
- $showmap = $instance['showmap'];
-
- /** This action is documented in modules/widgets/contact-info.php */
- if ( $showmap && $this->has_good_map( $instance ) ) {
- /**
- * Set a Google Maps API Key.
- *
- * @since 4.1.0
- *
- * @param string $api_key Google Maps API Key
- */
- $api_key = apply_filters( 'jetpack_google_maps_api_key', $instance['apikey'] );
- echo $this->build_map( $instance['address'], $api_key );
- }
-
- $map_link = $this->build_map_link( $instance['address'] );
-
- echo '<div class="confit-address" itemscope itemtype="http://schema.org/PostalAddress" itemprop="address"><a href="' . esc_url( $map_link ) . '" target="_blank">' . str_replace( "\n", '<br/>', esc_html( $instance['address'] ) ) . '</a></div>';
- }
-
- if ( '' != $instance['phone'] ) {
- if ( wp_is_mobile() ) {
- echo '<div class="confit-phone"><span itemprop="telephone"><a href="' . esc_url( 'tel:' . $instance['phone'] ) . '">' . esc_html( $instance['phone'] ) . '</a></span></div>';
- } else {
- echo '<div class="confit-phone"><span itemprop="telephone">' . esc_html( $instance['phone'] ) . '</span></div>';
- }
- }
-
- if ( is_email( trim( $instance['email'] ) ) ) {
- printf(
- '<div class="confit-email"><a href="mailto:%1$s">%1$s</a></div>',
- esc_html( $instance['email'] )
- );
- }
-
- if ( '' != $instance['hours'] ) {
- echo '<div class="confit-hours" itemprop="openingHours">' . str_replace( "\n", '<br/>', esc_html( $instance['hours'] ) ) . '</div>';
- }
-
- echo '</div>';
-
- /**
- * Fires at the end of Contact Info widget.
- *
- * @module widgets
- *
- * @since 3.9.2
- */
- do_action( 'jetpack_contact_info_widget_end' );
-
- echo $args['after_widget'];
-
- /** This action is documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', 'contact_info' );
- }
-
-
- /**
- * Deals with the settings when they are saved by the admin. Here is
- * where any validation should be dealt with.
- *
- * @param array $new_instance New configuration values
- * @param array $old_instance Old configuration values
- *
- * @return array
- */
- function update( $new_instance, $old_instance ) {
- $update_lat_lon = false;
- if (
- ! isset( $old_instance['address'] ) ||
- $this->urlencode_address( $old_instance['address'] ) != $this->urlencode_address( $new_instance['address'] )
- ) {
- $update_lat_lon = true;
- }
-
- $instance = array();
- $instance['title'] = wp_kses( $new_instance['title'], array() );
- $instance['address'] = wp_kses( $new_instance['address'], array() );
- $instance['phone'] = wp_kses( $new_instance['phone'], array() );
- $instance['email'] = wp_kses( $new_instance['email'], array() );
- $instance['hours'] = wp_kses( $new_instance['hours'], array() );
- $instance['apikey'] = wp_kses( isset( $new_instance['apikey'] ) ? $new_instance['apikey'] : $old_instance['apikey'], array() );
- $instance['lat'] = isset( $old_instance['lat'] ) ? floatval( $old_instance['lat'] ) : 0;
- $instance['lon'] = isset( $old_instance['lon'] ) ? floatval( $old_instance['lon'] ) : 0;
-
- if ( ! $instance['lat'] || ! $instance['lon'] ) {
- $update_lat_lon = true;
- }
-
- if ( $instance['address'] && $update_lat_lon ) {
-
- // Get the lat/lon of the user specified address.
- $address = $this->urlencode_address( $instance['address'] );
- $path = 'https://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=' . $address;
- /** This action is documented in modules/widgets/contact-info.php */
- $key = apply_filters( 'jetpack_google_maps_api_key', $instance['apikey'] );
-
- if ( ! empty( $key ) ) {
- $path = add_query_arg( 'key', $key, $path );
- }
- $json = wp_remote_retrieve_body( wp_remote_get( esc_url( $path, null, null ) ) );
-
- if ( ! $json ) {
- // The read failed :(
- esc_html_e( 'There was a problem getting the data to display this address on a map. Please refresh your browser and try again.', 'jetpack' );
- die();
- }
-
- $json_obj = json_decode( $json );
-
- if ( 'ZERO_RESULTS' == $json_obj->status ) {
- // The address supplied does not have a matching lat / lon.
- // No map is available.
- $instance['lat'] = '0';
- $instance['lon'] = '0';
- } else {
-
- $loc = $json_obj->results[0]->geometry->location;
-
- $lat = floatval( $loc->lat );
- $lon = floatval( $loc->lng );
-
- $instance['lat'] = "$lat";
- $instance['lon'] = "$lon";
- }
- }
-
- if ( ! isset( $new_instance['showmap'] ) ) {
- $instance['showmap'] = 0;
- } else {
- $instance['showmap'] = intval( $new_instance['showmap'] );
- }
-
- return $instance;
- }
-
-
- /**
- * Displays the form for this widget on the Widgets page of the WP Admin area.
- *
- * @param array $instance Instance configuration.
- *
- * @return void
- */
- function form( $instance ) {
- $instance = wp_parse_args( $instance, $this->defaults() );
- wp_enqueue_script(
- 'contact-info-admin',
- Jetpack::get_file_url_for_environment(
- '_inc/build/widgets/contact-info/contact-info-admin.min.js',
- 'modules/widgets/contact-info/contact-info-admin.js'
- ),
- array( 'jquery' ),
- 20160727
- );
-
- ?>
- <p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_html_e( 'Title:', 'jetpack' ); ?></label>
- <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" />
- </p>
-
- <p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'address' ) ); ?>"><?php esc_html_e( 'Address:', 'jetpack' ); ?></label>
- <textarea class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'address' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'address' ) ); ?>"><?php echo esc_textarea( $instance['address'] ); ?></textarea>
- <?php
- if ( $this->has_good_map( $instance ) ) {
- ?>
- <input class="jp-contact-info-showmap" id="<?php echo esc_attr( $this->get_field_id( 'showmap' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'showmap' ) ); ?>" value="1" type="checkbox" <?php checked( $instance['showmap'], 1 ); ?> />
- <label for="<?php echo esc_attr( $this->get_field_id( 'showmap' ) ); ?>"><?php esc_html_e( 'Show map', 'jetpack' ); ?></label>
- <?php
- } else {
- ?>
- <span class="error-message"><?php _e( 'Sorry. We can not plot this address. A map will not be displayed. Is the address formatted correctly?', 'jetpack' ); ?></span>
- <input id="<?php echo esc_attr( $this->get_field_id( 'showmap' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'showmap' ) ); ?>" value="<?php echo( intval( $instance['showmap'] ) ); ?>" type="hidden" />
- <?php
- }
- ?>
- </p>
-
- <p class="jp-contact-info-apikey" style="<?php echo $instance['showmap'] ? '' : 'display: none;'; ?>">
- <label for="<?php echo esc_attr( $this->get_field_id( 'apikey' ) ); ?>">
- <?php _e( 'Google Maps API Key', 'jetpack' ); ?>
- <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'apikey' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'apikey' ) ); ?>" type="text" value="<?php echo esc_attr( $instance['apikey'] ); ?>" />
- <br />
- <small><?php printf( wp_kses( __( 'Google now requires an API key to use their maps on your site. <a href="%s">See our documentation</a> for instructions on acquiring a key.', 'jetpack' ), array( 'a' => array( 'href' => true ) ) ), 'https://jetpack.com/support/extra-sidebar-widgets/contact-info-widget/' ); ?></small>
- </label>
- </p>
-
- <p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'phone' ) ); ?>"><?php esc_html_e( 'Phone:', 'jetpack' ); ?></label>
- <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'phone' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'phone' ) ); ?>" type="text" value="<?php echo esc_attr( $instance['phone'] ); ?>" />
- </p>
-
- <p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'email' ) ); ?>"><?php esc_html_e( 'Email Address:', 'jetpack' ); ?></label>
- <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'email' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'email' ) ); ?>" type="text" value="<?php echo esc_attr( $instance['email'] ); ?>" />
- </p>
-
- <p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'hours' ) ); ?>"><?php esc_html_e( 'Hours:', 'jetpack' ); ?></label>
- <textarea class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'hours' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'hours' ) ); ?>"><?php echo esc_textarea( $instance['hours'] ); ?></textarea>
- </p>
-
- <?php
- }
-
-
- /**
- * Generate a Google Maps link for the supplied address.
- *
- * @param string $address Address to link to.
- *
- * @return string
- */
- function build_map_link( $address ) {
- // Google map urls have lots of available params but zoom (z) and query (q) are enough.
- return 'https://maps.google.com/maps?z=16&q=' . $this->urlencode_address( $address );
- }
-
-
- /**
- * Builds map display HTML code from the supplied latitude and longitude.
- *
- * @param string $address Address.
- * @param string $api_key API Key.
- *
- * @return string HTML of the map.
- */
- function build_map( $address, $api_key = null ) {
- $this->enqueue_scripts();
- $src = add_query_arg( 'q', rawurlencode( $address ), 'https://www.google.com/maps/embed/v1/place' );
- if ( ! empty( $api_key ) ) {
- $src = add_query_arg( 'key', $api_key, $src );
- }
-
- $height = 216;
-
- $iframe_attributes = sprintf(
- ' height="%d" frameborder="0" src="%s" class="contact-map"',
- esc_attr( $height ),
- esc_url( $src )
- );
-
- $iframe_html = sprintf( '<iframe width="600" %s></iframe>', $iframe_attributes );
-
- if ( ! Jetpack_AMP_Support::is_amp_request() ) {
- return $iframe_html;
- }
-
- $amp_iframe_html = sprintf( '<amp-iframe layout="fixed-height" width="auto" sandbox="allow-scripts allow-same-origin" %s>', $iframe_attributes );
-
- // Add placeholder to avoid AMP error: <amp-iframe> elements must be positioned outside the first 75% of the viewport or 600px from the top (whichever is smaller).
- $amp_iframe_html .= sprintf( '<span placeholder>%s</span>', esc_html__( 'Loading map&hellip;', 'jetpack' ) );
-
- // Add original iframe as fallback in case JavaScript is disabled.
- $amp_iframe_html .= sprintf( '<noscript>%s</noscript>', $iframe_html );
-
- $amp_iframe_html .= '</amp-iframe>';
- return $amp_iframe_html;
- }
-
- /**
- * Encode an URL
- *
- * @param string $address The URL to encode
- *
- * @return string The encoded URL
- */
- function urlencode_address( $address ) {
-
- $address = strtolower( $address );
- $address = preg_replace( '/\s+/', ' ', trim( $address ) ); // Get rid of any unwanted whitespace
- $address = str_ireplace( ' ', '+', $address ); // Use + not %20
- return urlencode( $address );
- }
-
- /**
- * Check if the instance has a valid Map location.
- *
- * @param array $instance Widget instance configuration.
- *
- * @return bool Whether or not there is a valid map.
- */
- function has_good_map( $instance ) {
- // The lat and lon of an address that could not be plotted will have values of 0 and 0.
- return ! ( '0' == $instance['lat'] && '0' == $instance['lon'] );
- }
-
- }
-
-}
diff --git a/plugins/jetpack/modules/widgets/contact-info/contact-info-admin.js b/plugins/jetpack/modules/widgets/contact-info/contact-info-admin.js
deleted file mode 100644
index e38f0dac..00000000
--- a/plugins/jetpack/modules/widgets/contact-info/contact-info-admin.js
+++ /dev/null
@@ -1,8 +0,0 @@
-(function( $ ) {
- $( document ).on( 'change', '.jp-contact-info-showmap', function() {
- var $checkbox = $( this ),
- isChecked = $checkbox.is( ':checked' );
-
- $checkbox.closest( '.widget' ).find( '.jp-contact-info-apikey' ).toggle( isChecked );
- });
-})( window.jQuery );
diff --git a/plugins/jetpack/modules/widgets/contact-info/contact-info-map.css b/plugins/jetpack/modules/widgets/contact-info/contact-info-map.css
deleted file mode 100644
index 7aa9e698..00000000
--- a/plugins/jetpack/modules/widgets/contact-info/contact-info-map.css
+++ /dev/null
@@ -1,4 +0,0 @@
-.contact-map {
- max-width: 100%;
- border: 0;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/widgets/customizer-controls.css b/plugins/jetpack/modules/widgets/customizer-controls.css
deleted file mode 100644
index 847bc2f3..00000000
--- a/plugins/jetpack/modules/widgets/customizer-controls.css
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * Utilities to stylize widget in Customizer controls.
- */
-
-/* My Community */
-#available-widgets [class*="community"] .widget-title:before { content: "\f307"; } \ No newline at end of file
diff --git a/plugins/jetpack/modules/widgets/customizer-utils.js b/plugins/jetpack/modules/widgets/customizer-utils.js
deleted file mode 100644
index da73225c..00000000
--- a/plugins/jetpack/modules/widgets/customizer-utils.js
+++ /dev/null
@@ -1,95 +0,0 @@
-/* global wp, gapi, FB, twttr, PaypalExpressCheckout */
-
-/**
- * Utilities to work with widgets in Customizer.
- */
-
-/**
- * Checks whether this Customizer supports partial widget refresh.
- * @returns {boolean}
- */
-wp.customizerHasPartialWidgetRefresh = function() {
- return 'object' === typeof wp && 'function' === typeof wp.customize && 'object' === typeof wp.customize.selectiveRefresh && 'object' === typeof wp.customize.widgetsPreview && 'function' === typeof wp.customize.widgetsPreview.WidgetPartial;
-};
-
-/**
- * Verifies that the placed widget ID contains the widget name.
- * @param {object} placement
- * @param {string} widgetName
- * @returns {*|boolean}
- */
-wp.isJetpackWidgetPlaced = function( placement, widgetName ) {
- return placement.partial.widgetId && 0 === placement.partial.widgetId.indexOf( widgetName );
-};
-
-/**
- * Bind events for selective refresh in Customizer.
- */
-(function($){
-
- $( document ).ready( function() {
-
- if ( wp && wp.customize && wp.customizerHasPartialWidgetRefresh() ) {
-
- // Refresh widget contents when a partial is rendered.
- wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function ( placement ) {
- if ( placement.container ) {
-
- // Refresh Google+
- if ( wp.isJetpackWidgetPlaced( placement, 'googleplus-badge' ) && 'object' === typeof gapi && gapi.person && 'function' === typeof gapi.person.go ) {
- gapi.person.go( placement.container[0] );
- }
-
- // Refresh Facebook XFBML
- else if ( wp.isJetpackWidgetPlaced( placement, 'facebook-likebox' ) && 'object' === typeof FB && 'object' === typeof FB.XFBML && 'function' === typeof FB.XFBML.parse ) {
- FB.XFBML.parse( placement.container[0], function() {
- var $fbContainer = $( placement.container[0] ).find( '.fb_iframe_widget' ),
- fbWidth = $fbContainer.data( 'width' ),
- fbHeight = $fbContainer.data( 'height' );
- $fbContainer.find( 'span' ).css( { 'width': fbWidth, 'height': fbHeight } );
- setTimeout( function() {
- $fbContainer.find( 'iframe' ).css( { 'width': fbWidth, 'height': fbHeight, 'position': 'relative' } );
- }, 1 );
- } );
- }
-
- // Refresh Twitter
- else if ( wp.isJetpackWidgetPlaced( placement, 'twitter_timeline' ) && 'object' === typeof twttr && 'object' === typeof twttr.widgets && 'function' === typeof twttr.widgets.load ) {
- twttr.widgets.load( placement.container[0] );
- } else if ( wp.isJetpackWidgetPlaced( placement, 'eu_cookie_law_widget' ) ) {
- // Refresh EU Cookie Law
- if ( $( '#eu-cookie-law' ).hasClass( 'top' ) ) {
- $( '.widget_eu_cookie_law_widget' ).addClass( 'top' );
- } else {
- $( '.widget_eu_cookie_law_widget' ).removeClass( 'top' );
- }
- placement.container.fadeIn();
- } else if ( wp.isJetpackWidgetPlaced( placement, 'jetpack_simple_payments_widget' ) ) {
- // Refresh Simple Payments Widget
- try {
- var buttonId = $( '.jetpack-simple-payments-button', placement.container ).attr( 'id' ).replace( '_button', '' );
- PaypalExpressCheckout.renderButton( null, null, buttonId, null );
- } catch ( e ) {
- // PaypalExpressCheckout may fail.
- // For the same usage, see also:
- // https://github.com/Automattic/jetpack/blob/6c1971e6bed7d3df793392a7a58ffe0afaeeb5fe/modules/simple-payments/simple-payments.php#L111
- }
- }
- }
- } );
-
- // Refresh widgets when they're moved.
- wp.customize.selectiveRefresh.bind( 'partial-content-moved', function( placement ) {
- if ( placement.container ) {
- // Refresh Twitter timeline iframe, since it has to be re-built.
- if ( wp.isJetpackWidgetPlaced( placement, 'twitter_timeline' ) && placement.container.find( 'iframe.twitter-timeline:not([src]):first' ).length ) {
- placement.partial.refresh();
- } else if ( wp.isJetpackWidgetPlaced( placement, 'jetpack_simple_payments_widget' ) ) {
- // Refresh Simple Payments Widget
- placement.partial.refresh();
- }
- }
- } );
- }
- } );
-} )( jQuery );
diff --git a/plugins/jetpack/modules/widgets/eu-cookie-law.php b/plugins/jetpack/modules/widgets/eu-cookie-law.php
deleted file mode 100644
index 62acda4a..00000000
--- a/plugins/jetpack/modules/widgets/eu-cookie-law.php
+++ /dev/null
@@ -1,301 +0,0 @@
-<?php
-
-/**
- * Disable direct access/execution to/of the widget code.
- */
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-if ( ! class_exists( 'Jetpack_EU_Cookie_Law_Widget' ) ) {
- /**
- * EU Cookie Law Widget
- *
- * Display the EU Cookie Law banner in the bottom part of the screen.
- */
- class Jetpack_EU_Cookie_Law_Widget extends WP_Widget {
- /**
- * EU Cookie Law cookie name.
- *
- * @var string
- */
- public static $cookie_name = 'eucookielaw';
-
- /**
- * Default hide options.
- *
- * @var array
- */
- private $hide_options = array(
- 'button',
- 'scroll',
- 'time',
- );
-
- /**
- * Default text options.
- *
- * @var array
- */
- private $text_options = array(
- 'default',
- 'custom',
- );
-
- /**
- * Default color scheme options.
- *
- * @var array
- */
- private $color_scheme_options = array(
- 'default',
- 'negative',
- );
-
- /**
- * Default policy URL options.
- *
- * @var array
- */
- private $policy_url_options = array(
- 'default',
- 'custom',
- );
-
- /**
- * Widget position options.
- *
- * @var array
- */
- private $position_options = array(
- 'bottom',
- 'top',
- );
-
- /**
- * Constructor.
- */
- function __construct() {
- parent::__construct(
- 'eu_cookie_law_widget',
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', esc_html__( 'Cookies & Consents Banner', 'jetpack' ) ),
- array(
- 'description' => esc_html__( 'Display a banner for EU Cookie Law and GDPR compliance.', 'jetpack' ),
- 'customize_selective_refresh' => true,
- ),
- array()
- );
-
- if ( is_active_widget( false, false, $this->id_base ) || is_customize_preview() ) {
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_frontend_scripts' ) );
- }
- }
-
- /**
- * Enqueue scripts and styles.
- */
- function enqueue_frontend_scripts() {
- wp_enqueue_style( 'eu-cookie-law-style', plugins_url( 'eu-cookie-law/style.css', __FILE__ ), array(), '20170403' );
- wp_enqueue_script(
- 'eu-cookie-law-script',
- Jetpack::get_file_url_for_environment(
- '_inc/build/widgets/eu-cookie-law/eu-cookie-law.min.js',
- 'modules/widgets/eu-cookie-law/eu-cookie-law.js'
- ),
- array( 'jquery' ),
- '20180522',
- true
- );
- }
-
- /**
- * Return an associative array of default values.
- *
- * These values are used in new widgets.
- *
- * @return array Default values for the widget options.
- */
- public function defaults() {
- return array(
- 'hide' => $this->hide_options[0],
- 'hide-timeout' => 30,
- 'consent-expiration' => 180,
- 'text' => $this->text_options[0],
- 'customtext' => '',
- 'color-scheme' => $this->color_scheme_options[0],
- 'policy-url' => get_option( 'wp_page_for_privacy_policy' ) ? $this->policy_url_options[1] : $this->policy_url_options[0],
- 'default-policy-url' => 'https://automattic.com/cookies/',
- 'custom-policy-url' => get_option( 'wp_page_for_privacy_policy' ) ? get_permalink( (int) get_option( 'wp_page_for_privacy_policy' ) ) : '',
- 'position' => $this->position_options[0],
- 'policy-link-text' => esc_html__( 'Cookie Policy', 'jetpack' ),
- 'button' => esc_html__( 'Close and accept', 'jetpack' ),
- 'default-text' => esc_html__( "Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use. \r\nTo find out more, including how to control cookies, see here:", 'jetpack' ),
- );
- }
-
- /**
- * Front-end display of the widget.
- *
- * @param array $args Widget arguments.
- * @param array $instance Saved values from database.
- */
- public function widget( $args, $instance ) {
- /**
- * Filters the display of the EU Cookie Law widget.
- *
- * @since 6.1.1
- *
- * @param bool true Should the EU Cookie Law widget be disabled. Default to false.
- */
- if ( apply_filters( 'jetpack_disable_eu_cookie_law_widget', false ) ) {
- return;
- }
-
- $instance = wp_parse_args( $instance, $this->defaults() );
-
- $classes = array();
- $classes['hide'] = 'hide-on-' . esc_attr( $instance['hide'] );
- if ( 'negative' === $instance['color-scheme'] ) {
- $classes['negative'] = 'negative';
- }
-
- if ( 'top' === $instance['position'] ) {
- $classes['top'] = 'top';
- }
-
- if ( Jetpack::is_module_active( 'wordads' ) ) {
- $classes['ads'] = 'ads-active';
- $classes['hide'] = 'hide-on-button';
- }
-
- echo $args['before_widget'];
- require( dirname( __FILE__ ) . '/eu-cookie-law/widget.php' );
- echo $args['after_widget'];
- /** This action is already documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', 'eu_cookie_law' );
- }
-
- /**
- * Back-end widget form.
- *
- * @param array $instance Previously saved values from database.
- */
- public function form( $instance ) {
- $instance = wp_parse_args( $instance, $this->defaults() );
- if ( Jetpack::is_module_active( 'wordads' ) ) {
- $instance['hide'] = 'button';
- }
-
- wp_enqueue_script(
- 'eu-cookie-law-widget-admin',
- Jetpack::get_file_url_for_environment(
- '_inc/build/widgets/eu-cookie-law/eu-cookie-law-admin.min.js',
- 'modules/widgets/eu-cookie-law/eu-cookie-law-admin.js'
- ),
- array( 'jquery' ),
- 20180417
- );
-
- require( dirname( __FILE__ ) . '/eu-cookie-law/form.php' );
- }
-
- /**
- * Sanitize widget form values as they are saved.
- *
- * @param array $new_instance Values just sent to be saved.
- * @param array $old_instance Previously saved values from database.
- * @return array Updated safe values to be saved.
- */
- public function update( $new_instance, $old_instance ) {
- $instance = array();
- $defaults = $this->defaults();
-
- $instance['hide'] = $this->filter_value( isset( $new_instance['hide'] ) ? $new_instance['hide'] : '', $this->hide_options );
- $instance['text'] = $this->filter_value( isset( $new_instance['text'] ) ? $new_instance['text'] : '', $this->text_options );
- $instance['color-scheme'] = $this->filter_value( isset( $new_instance['color-scheme'] ) ? $new_instance['color-scheme'] : '', $this->color_scheme_options );
- $instance['policy-url'] = $this->filter_value( isset( $new_instance['policy-url'] ) ? $new_instance['policy-url'] : '', $this->policy_url_options );
- $instance['position'] = $this->filter_value( isset( $new_instance['position'] ) ? $new_instance['position'] : '', $this->position_options );
-
- if ( isset( $new_instance['hide-timeout'] ) ) {
- // Time can be a value between 3 and 1000 seconds.
- $instance['hide-timeout'] = min( 1000, max( 3, intval( $new_instance['hide-timeout'] ) ) );
- }
-
- if ( isset( $new_instance['consent-expiration'] ) ) {
- // Time can be a value between 1 and 365 days.
- $instance['consent-expiration'] = min( 365, max( 1, intval( $new_instance['consent-expiration'] ) ) );
- }
-
- if ( isset( $new_instance['customtext'] ) ) {
- $instance['customtext'] = mb_substr( wp_kses( $new_instance['customtext'], array() ), 0, 4096 );
- } else {
- $instance['text'] = $this->text_options[0];
- }
-
- if ( isset( $new_instance['policy-url'] ) ) {
- $instance['policy-url'] = 'custom' === $new_instance['policy-url']
- ? 'custom'
- : 'default';
- } else {
- $instance['policy-url'] = $this->policy_url_options[0];
- }
-
- if ( 'custom' === $instance['policy-url'] && isset( $new_instance['custom-policy-url'] ) ) {
- $instance['custom-policy-url'] = esc_url( $new_instance['custom-policy-url'], array( 'http', 'https' ) );
-
- if ( strlen( $instance['custom-policy-url'] ) < 10 ) {
- unset( $instance['custom-policy-url'] );
- global $wp_customize;
- if ( ! isset( $wp_customize ) ) {
- $instance['policy-url'] = $this->policy_url_options[0];
- }
- }
- }
-
- if ( isset( $new_instance['policy-link-text'] ) ) {
- $instance['policy-link-text'] = trim( mb_substr( wp_kses( $new_instance['policy-link-text'], array() ), 0, 100 ) );
- }
-
- if ( empty( $instance['policy-link-text'] ) || $instance['policy-link-text'] == $defaults['policy-link-text'] ) {
- unset( $instance['policy-link-text'] );
- }
-
- if ( isset( $new_instance['button'] ) ) {
- $instance['button'] = trim( mb_substr( wp_kses( $new_instance['button'], array() ), 0, 100 ) );
- }
-
- if ( empty( $instance['button'] ) || $instance['button'] == $defaults['button'] ) {
- unset( $instance['button'] );
- }
-
- // Show the banner again if a setting has been changed.
- setcookie( self::$cookie_name, '', time() - 86400, '/' );
-
- return $instance;
- }
-
- /**
- * Check if the value is allowed and not empty.
- *
- * @param string $value Value to check.
- * @param array $allowed Array of allowed values.
- *
- * @return string $value if pass the check or first value from allowed values.
- */
- function filter_value( $value, $allowed = array() ) {
- $allowed = (array) $allowed;
- if ( empty( $value ) || ( ! empty( $allowed ) && ! in_array( $value, $allowed ) ) ) {
- $value = $allowed[0];
- }
- return $value;
- }
- }
-
- // Register Jetpack_EU_Cookie_Law_Widget widget.
- function jetpack_register_eu_cookie_law_widget() {
- register_widget( 'Jetpack_EU_Cookie_Law_Widget' );
- };
-
- add_action( 'widgets_init', 'jetpack_register_eu_cookie_law_widget' );
-}
diff --git a/plugins/jetpack/modules/widgets/eu-cookie-law/eu-cookie-law-admin.js b/plugins/jetpack/modules/widgets/eu-cookie-law/eu-cookie-law-admin.js
deleted file mode 100644
index b0bfd484..00000000
--- a/plugins/jetpack/modules/widgets/eu-cookie-law/eu-cookie-law-admin.js
+++ /dev/null
@@ -1,30 +0,0 @@
-
-/* eslint no-var: 0 */
-
-( function( $ ) {
- var $document = $( document );
-
- $document.on( 'ready', function() {
- var maybeShowNotice = function( e, policyUrl ) {
- var $policyUrl = $( policyUrl || this )
- .closest( '.eu-cookie-law-widget-policy-url' );
-
- if ( $policyUrl.find( 'input[type="radio"][value="default"]' ).is( ':checked' ) ) {
- $policyUrl.find( '.notice.default-policy' ).css( 'display', 'block' );
- $policyUrl.find( '.notice.custom-policy' ).hide();
- } else {
- $policyUrl.find( '.notice.default-policy' ).hide();
- $policyUrl.find( '.notice.custom-policy' ).css( 'display', 'block' );
- }
- };
-
- $document.on( 'click', '.eu-cookie-law-widget-policy-url input[type="radio"]', maybeShowNotice );
- $document.on( 'widget-updated widget-added', function( e, widget ) {
- var widgetId = $( widget ).attr( 'id' );
- if ( widgetId.indexOf( 'eu_cookie_law_widget' ) !== -1 ) {
- maybeShowNotice( null, $( '#' + widgetId + ' .eu-cookie-law-widget-policy-url' ) );
- }
- } );
- $( '.eu-cookie-law-widget-policy-url' ).each( maybeShowNotice );
- } );
-} )( jQuery );
diff --git a/plugins/jetpack/modules/widgets/eu-cookie-law/eu-cookie-law.js b/plugins/jetpack/modules/widgets/eu-cookie-law/eu-cookie-law.js
deleted file mode 100644
index b7f8c7db..00000000
--- a/plugins/jetpack/modules/widgets/eu-cookie-law/eu-cookie-law.js
+++ /dev/null
@@ -1,63 +0,0 @@
-( function( $ ) {
- var cookieValue = document.cookie.replace( /(?:(?:^|.*;\s*)eucookielaw\s*\=\s*([^;]*).*$)|^.*$/, '$1' ),
- overlay = $( '#eu-cookie-law' ),
- initialScrollPosition,
- scrollFunction;
-
- if ( overlay.hasClass( 'top' ) ) {
- $( '.widget_eu_cookie_law_widget' ).addClass( 'top' );
- }
-
- if ( overlay.hasClass( 'ads-active' ) ) {
- var adsCookieValue = document.cookie.replace( /(?:(?:^|.*;\s*)personalized-ads-consent\s*\=\s*([^;]*).*$)|^.*$/, '$1' );
- if ( '' !== cookieValue && '' !== adsCookieValue ) {
- overlay.remove();
- }
- } else if ( '' !== cookieValue ) {
- overlay.remove();
- }
-
- $( '.widget_eu_cookie_law_widget' ).appendTo( 'body' ).fadeIn();
-
- overlay.find( 'form' ).on( 'submit', accept );
-
- if ( overlay.hasClass( 'hide-on-scroll' ) ) {
- initialScrollPosition = $( window ).scrollTop();
- scrollFunction = function() {
- if ( Math.abs( $( window ).scrollTop() - initialScrollPosition ) > 50 ) {
- accept();
- }
- };
- $( window ).on( 'scroll', scrollFunction );
- } else if ( overlay.hasClass( 'hide-on-time' ) ) {
- setTimeout( accept, overlay.data( 'hide-timeout' ) * 1000 );
- }
-
- var accepted = false;
- function accept( event ) {
- if ( accepted ) {
- return;
- }
- accepted = true;
-
- if ( event && event.preventDefault ) {
- event.preventDefault();
- }
-
- if ( overlay.hasClass( 'hide-on-scroll' ) ) {
- $( window ).off( 'scroll', scrollFunction );
- }
-
- var expireTime = new Date();
- expireTime.setTime( expireTime.getTime() + ( overlay.data( 'consent-expiration' ) * 24 * 60 * 60 * 1000 ) );
-
- document.cookie = 'eucookielaw=' + expireTime.getTime() + ';path=/;expires=' + expireTime.toGMTString();
- if ( overlay.hasClass( 'ads-active' ) && overlay.hasClass( 'hide-on-button' ) ) {
- document.cookie = 'personalized-ads-consent=' + expireTime.getTime() + ';path=/;expires=' + expireTime.toGMTString();
- }
-
- overlay.fadeOut( 400, function() {
- overlay.remove();
- } );
- }
-} )( jQuery );
diff --git a/plugins/jetpack/modules/widgets/eu-cookie-law/form.php b/plugins/jetpack/modules/widgets/eu-cookie-law/form.php
deleted file mode 100644
index 7b00877b..00000000
--- a/plugins/jetpack/modules/widgets/eu-cookie-law/form.php
+++ /dev/null
@@ -1,277 +0,0 @@
-<p>
- <strong>
- <?php esc_html_e( 'Banner text', 'jetpack' ); ?>
- </strong>
- <ul>
- <li>
- <label>
- <input
- <?php checked( $instance['text'], 'default' ); ?>
- name="<?php echo esc_attr( $this->get_field_name( 'text' ) ); ?>"
- type="radio"
- value="default"
- />
- <?php esc_html_e( 'Default', 'jetpack' ); ?>
- </label>
- </li>
- <li>
- <label>
- <input
- <?php checked( $instance['text'], 'custom' ); ?>
- name="<?php echo esc_attr( $this->get_field_name( 'text' ) ); ?>"
- type="radio"
- value="custom"
- />
- <?php esc_html_e( 'Custom:', 'jetpack' ); ?>
- </label>
- </li>
- </ul>
- <textarea
- class="widefat"
- name="<?php echo esc_attr( $this->get_field_name( 'customtext' ) ); ?>"
- placeholder="<?php echo esc_attr( $instance['default-text'] ); ?>"
- ><?php echo esc_html( $instance['customtext'] ); ?></textarea>
-</p>
-
-<hr />
-
-<p>
- <strong>
- <?php esc_html_e( 'Privacy Policy Link', 'jetpack' ); ?>
- </strong>
- <ul class="eu-cookie-law-widget-policy-url">
- <li>
- <label>
- <input
- <?php checked( $instance['policy-url'], 'default' ); ?>
- name="<?php echo esc_attr( $this->get_field_name( 'policy-url' ) ); ?>"
- type="radio"
- value="default"
- />
- <?php esc_html_e( 'Default', 'jetpack' ); ?>
- </label>
- </li>
- <li>
- <label>
- <input
- <?php checked( $instance['policy-url'], 'custom' ); ?>
- name="<?php echo esc_attr( $this->get_field_name( 'policy-url' ) ); ?>"
- type="radio"
- value="custom"
- />
- <?php esc_html_e( 'Custom URL:', 'jetpack' ); ?>
- </label>
- <input
- class="widefat"
- name="<?php echo esc_attr( $this->get_field_name( 'custom-policy-url' ) ); ?>"
- placeholder="<?php echo esc_url( $instance['default-policy-url'] ); ?>"
- style="margin-top: .5em;"
- type="text"
- value="<?php echo esc_url( $instance['custom-policy-url'] ); ?>"
- />
- <span class="notice notice-warning default-policy" style="display: none;">
- <span style="display: block; margin: .5em 0;">
- <strong><?php esc_html_e( 'Caution:', 'jetpack' ); ?></strong>
- <?php esc_html_e( 'The default policy URL only covers cookies set by Jetpack. If you’re running other plugins, custom cookies, or third-party tracking technologies, you should create and link to your own cookie statement.', 'jetpack' ); ?>
- </span>
- </span>
- <?php if ( Jetpack::is_module_active( 'wordads' ) ) : ?>
- <span class="notice notice-warning custom-policy" style="display: none;">
- <span style="display: block; margin: .5em 0;">
- <strong><?php esc_html_e( 'Caution:', 'jetpack' ); ?></strong>
- <?php echo sprintf(
- __( 'For GDPR compliance, please make sure your policy contains <a href="%s" target="_blank">privacy information relating to Jetpack Ads</a>.', 'jetpack' ),
- esc_url( 'https://jetpack.com/support/ads/#privacy' )
- ); ?>
- </span>
- </span>
- <?php endif; ?>
- </li>
- </ul>
-</p>
-
-<p>
- <strong>
- <?php esc_html_e( 'Link text', 'jetpack' ); ?>
- </strong>
- <label>
- <input
- class="widefat"
- name="<?php echo $this->get_field_name( 'policy-link-text' ); ?>"
- type="text"
- value="<?php echo esc_attr( $instance['policy-link-text'] ); ?>"
- />
- </label>
-</p>
-
-<hr />
-
-<p>
- <strong>
- <?php esc_html_e( 'Button text', 'jetpack' ); ?>
- </strong>
- <label>
- <input
- class="widefat"
- name="<?php echo $this->get_field_name( 'button' ); ?>"
- type="text"
- value="<?php echo esc_attr( $instance['button'] ); ?>"
- />
- </label>
-</p>
-
-<hr />
-
-<p>
- <strong>
- <?php _ex( 'Capture consent & hide the banner', 'action', 'jetpack' ); ?>
- </strong>
- <ul>
- <li>
- <label>
- <input
- <?php checked( $instance['hide'], 'button' ); ?>
- name="<?php echo esc_attr( $this->get_field_name( 'hide' ) ); ?>"
- type="radio"
- value="button"
- <?php echo Jetpack::is_module_active( 'wordads' ) ? 'disabled' : ''; ?>
- />
- <?php esc_html_e( 'after the user clicks the dismiss button', 'jetpack' ); ?>
- </label>
- </li>
- <li>
- <label>
- <input
- <?php checked( $instance['hide'], 'scroll' ); ?>
- name="<?php echo esc_attr( $this->get_field_name( 'hide' ) ); ?>"
- type="radio"
- value="scroll"
- <?php echo Jetpack::is_module_active( 'wordads' ) ? 'disabled' : ''; ?>
- />
- <?php esc_html_e( 'after the user scrolls the page', 'jetpack' ); ?>
- </label>
- </li>
- <li>
- <label>
- <input
- <?php checked( $instance['hide'], 'time' ); ?>
- name="<?php echo esc_attr( $this->get_field_name( 'hide' ) ); ?>"
- type="radio"
- value="time"
- <?php echo Jetpack::is_module_active( 'wordads' ) ? 'disabled' : ''; ?>
- />
- <?php esc_html_e( 'after this amount of time', 'jetpack' ); ?>
- </label>
- <input
- max="1000"
- min="3"
- name="<?php echo esc_attr( $this->get_field_name( 'hide-timeout' ) ); ?>"
- style="padding: 3px 5px; width: 3em;"
- type="number"
- value="<?php echo esc_attr( $instance['hide-timeout'] ); ?>"
- />
- <?php esc_html_e( 'seconds', 'jetpack' ); ?>
- </li>
- </ul>
- <?php if ( Jetpack::is_module_active( 'wordads' ) ) : ?>
- <span class="notice notice-warning" style="display: block;">
- <span style="display: block; margin: .5em 0;">
- <?php esc_html_e( 'Visitors must provide consent by clicking the dismiss button when Jetpack Ads is turned on.', 'jetpack' ); ?>
- </span>
- </span>
- <?php endif; ?>
-</p>
-
-<hr />
-
-<p>
- <strong>
- <?php _ex( 'Consent expires after', 'action', 'jetpack' ); ?>
- </strong>
- <ul>
- <li>
- <input
- max="365"
- min="1"
- name="<?php echo esc_attr( $this->get_field_name( 'consent-expiration' ) ); ?>"
- style="padding: 3px 5px; width: 3.75em;"
- type="number"
- value="<?php echo esc_attr( $instance['consent-expiration'] ); ?>"
- />
- <?php esc_html_e( 'days', 'jetpack' ); ?>
- </li>
- </ul>
-</p>
-
-<hr />
-
-<p>
- <strong>
- <?php _e( 'Color scheme', 'jetpack' ); ?>
- </strong>
- <ul>
- <li>
- <label>
- <input
- <?php checked( $instance['color-scheme'], 'default' ); ?>
- name="<?php echo esc_attr( $this->get_field_name( 'color-scheme' ) ); ?>"
- type="radio"
- value="default"
- />
- <?php esc_html_e( 'Light', 'jetpack' ); ?>
- </label>
- </li>
- <li>
- <label>
- <input
- <?php checked( $instance['color-scheme'], 'negative' ); ?>
- name="<?php echo esc_attr( $this->get_field_name( 'color-scheme' ) ); ?>"
- type="radio"
- value="negative"
- />
- <?php esc_html_e( 'Dark', 'jetpack' ); ?>
- </label>
- </li>
- </ul>
-</p>
-
-<hr />
-
-<p>
- <strong>
- <?php _e( 'Position', 'jetpack' ); ?>
- </strong>
- <ul>
- <li>
- <label>
- <input
- <?php checked( $instance['position'], 'bottom' ); ?>
- name="<?php echo esc_attr( $this->get_field_name( 'position' ) ); ?>"
- type="radio"
- value="bottom"
- />
- <?php esc_html_e( 'Bottom', 'jetpack' ); ?>
- </label>
- </li>
- <li>
- <label>
- <input
- <?php checked( $instance['position'], 'top' ); ?>
- name="<?php echo esc_attr( $this->get_field_name( 'position' ) ); ?>"
- type="radio"
- value="top"
- />
- <?php esc_html_e( 'Top', 'jetpack' ); ?>
- </label>
- </li>
- </ul>
-</p>
-
-<hr />
-
-<p class="small">
- <?php esc_html_e( 'It is your own responsibility to ensure that your site complies with the relevant laws.', 'jetpack' ); ?>
- <a href="https://jetpack.com/support/extra-sidebar-widgets/eu-cookie-law-widget/">
- <?php esc_html_e( 'Click here for more information', 'jetpack' ); ?>
- </a>
-</p>
diff --git a/plugins/jetpack/modules/widgets/eu-cookie-law/style.css b/plugins/jetpack/modules/widgets/eu-cookie-law/style.css
deleted file mode 100644
index 07d5a9f6..00000000
--- a/plugins/jetpack/modules/widgets/eu-cookie-law/style.css
+++ /dev/null
@@ -1,105 +0,0 @@
-.widget_eu_cookie_law_widget {
- border: none;
- bottom: 1em;
- display: none;
- left: 1em;
- margin: 0;
- padding: 0;
- position: fixed;
- right: 1em;
- width: auto;
- z-index: 50001;
-}
-
-.widget_eu_cookie_law_widget.widget.top {
- bottom: auto;
- top: 1em;
-}
-
-.admin-bar .widget_eu_cookie_law_widget.widget.top {
- top: 3em;
-}
-
-#eu-cookie-law {
- background-color: #fff;
- border: 1px solid #dedede;
- color: #2e4467;
- font-size: 12px;
- line-height: 1.5;
- overflow: hidden;
- padding: 6px 6px 6px 15px;
- position: relative;
-}
-
-#eu-cookie-law a,
-#eu-cookie-law a:active,
-#eu-cookie-law a:visited {
- color: inherit;
- cursor: inherit;
- text-decoration: underline;
-}
-
-#eu-cookie-law a:hover {
- cursor: pointer;
- text-decoration: none;
-}
-
-#eu-cookie-law.negative {
- background-color: #000;
- border: none;
- color: #fff;
-}
-
-/**
- * Using a highly-specific rule to make sure that certain form styles
- * will be reset
- */
-#eu-cookie-law form {
- margin-bottom: 0;
- position: static;
-}
-
-/**
- * Using a highly-specific rule to make sure that all button styles
- * will be reset
- */
-#eu-cookie-law input,
-#eu-cookie-law input:hover,
-#eu-cookie-law input:focus {
- background: #f3f3f3;
- border: 1px solid #dedede;
- border-radius: 4px;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- color: #2e4453;
- cursor: pointer;
- display: inline;
- float: right;
- font-family: inherit;
- font-size: 14px;
- font-weight: inherit;
- line-height: inherit;
- margin: 0 0 0 5%;
- padding: 8px 12px;
- position: static;
- text-transform: none;
-}
-
-#eu-cookie-law.negative input,
-#eu-cookie-law.negative input:hover,
-#eu-cookie-law.negative input:focus {
- background: #282828;
- border-color: #535353;
- color: #fff;
-}
-
-@media ( max-width: 600px ) {
- #eu-cookie-law {
- padding-bottom: 55px;
- }
- #eu-cookie-law input.accept {
- bottom: 8px;
- position: absolute;
- right: 8px;
- }
-}
diff --git a/plugins/jetpack/modules/widgets/eu-cookie-law/widget.php b/plugins/jetpack/modules/widgets/eu-cookie-law/widget.php
deleted file mode 100644
index cd016a3e..00000000
--- a/plugins/jetpack/modules/widgets/eu-cookie-law/widget.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<div
- class="<?php echo implode( ' ', $classes ); ?>"
- data-hide-timeout="<?php echo intval( $instance['hide-timeout'] ); ?>"
- data-consent-expiration="<?php echo intval( $instance['consent-expiration'] ); ?>"
- id="eu-cookie-law"
->
- <form method="post">
- <input type="submit" value="<?php echo esc_attr( $instance['button'] ); ?>" class="accept" />
- </form>
-
- <?php if ( 'default' == $instance['text'] || empty( $instance['customtext'] ) ) {
- echo nl2br( $instance['default-text'] );
- } else {
- echo nl2br( esc_html( $instance['customtext'] ) );
- } ?>
-
- <a href="<?php
- $policy_link_text = 'default' === $instance['policy-url'] || empty( $instance['custom-policy-url'] )
- ? $instance['default-policy-url']
- : $instance['custom-policy-url'];
- echo esc_url( $policy_link_text );
- ?>" >
- <?php echo esc_html( $instance['policy-link-text'] ); ?>
- </a>
-</div>
diff --git a/plugins/jetpack/modules/widgets/facebook-likebox.php b/plugins/jetpack/modules/widgets/facebook-likebox.php
deleted file mode 100644
index 5fbc23e0..00000000
--- a/plugins/jetpack/modules/widgets/facebook-likebox.php
+++ /dev/null
@@ -1,309 +0,0 @@
-<?php
-
-/**
- * Register the widget for use in Appearance -> Widgets
- */
-add_action( 'widgets_init', 'jetpack_facebook_likebox_init' );
-
-function jetpack_facebook_likebox_init() {
- register_widget( 'WPCOM_Widget_Facebook_LikeBox' );
-}
-
-/**
- * Facebook Page Plugin (formerly known as the Like Box)
- * Display a Facebook Page Plugin as a widget (replaces the old like box plugin)
- * https://developers.facebook.com/docs/plugins/page-plugin
- */
-class WPCOM_Widget_Facebook_LikeBox extends WP_Widget {
-
- private $default_height = 580;
- private $default_width = 340;
- private $max_width = 500;
- private $min_width = 180;
- private $max_height = 9999;
- private $min_height = 130;
-
- function __construct() {
- parent::__construct(
- 'facebook-likebox',
- /**
- * Filter the name of a widget included in the Extra Sidebar Widgets module.
- *
- * @module widgets
- *
- * @since 2.1.2
- *
- * @param string $widget_name Widget title.
- */
- apply_filters( 'jetpack_widget_name', __( 'Facebook Page Plugin', 'jetpack' ) ),
- array(
- 'classname' => 'widget_facebook_likebox',
- 'description' => __( 'Use the Facebook Page Plugin to connect visitors to your Facebook Page', 'jetpack' ),
- 'customize_selective_refresh' => true,
- )
- );
-
- if ( is_active_widget( false, false, $this->id_base ) || is_active_widget( false, false, 'monster' ) || is_customize_preview() ) {
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
- }
- }
-
- /**
- * Enqueue scripts.
- */
- public function enqueue_scripts() {
- wp_enqueue_script( 'jetpack-facebook-embed' );
- wp_enqueue_style( 'jetpack_facebook_likebox', plugins_url( 'facebook-likebox/style.css', __FILE__ ) );
- wp_style_add_data( 'jetpack_facebook_likebox', 'jetpack-inline', true );
- }
-
- function widget( $args, $instance ) {
- extract( $args );
-
- $like_args = $this->normalize_facebook_args( $instance['like_args'] );
-
- if ( empty( $like_args['href'] ) || ! $this->is_valid_facebook_url( $like_args['href'] ) ) {
- if ( current_user_can( 'edit_theme_options' ) ) {
- echo $before_widget;
- echo '<p>' . sprintf( __( 'It looks like your Facebook URL is incorrectly configured. Please check it in your <a href="%s">widget settings</a>.', 'jetpack' ), admin_url( 'widgets.php' ) ) . '</p>';
- echo $after_widget;
- }
- echo '<!-- Invalid Facebook Page URL -->';
- return;
- }
-
- /** This filter is documented in core/src/wp-includes/default-widgets.php */
- $title = apply_filters( 'widget_title', $instance['title'] );
- $page_url = set_url_scheme( $like_args['href'], 'https' );
-
- $like_args['show_faces'] = (bool) $like_args['show_faces'] ? 'true' : 'false';
- $like_args['stream'] = (bool) $like_args['stream'] ? 'true' : 'false';
- $like_args['cover'] = (bool) $like_args['cover'] ? 'false' : 'true';
-
- echo $before_widget;
-
- if ( ! empty( $title ) ) :
- echo $before_title;
-
- $likebox_widget_title = '<a href="' . esc_url( $page_url ) . '">' . esc_html( $title ) . '</a>';
-
- /**
- * Filter Facebook Likebox's widget title.
- *
- * @module widgets
- *
- * @since 3.3.0
- *
- * @param string $likebox_widget_title Likebox Widget title (including a link to the Page URL).
- * @param string $title Widget title as set in the widget settings.
- * @param string $page_url Facebook Page URL.
- */
- echo apply_filters( 'jetpack_facebook_likebox_title', $likebox_widget_title, $title, $page_url );
-
- echo $after_title;
- endif;
-
- ?>
- <div id="fb-root"></div>
- <div class="fb-page" data-href="<?php echo esc_url( $page_url ); ?>" data-width="<?php echo intval( $like_args['width'] ); ?>" data-height="<?php echo intval( $like_args['height'] ); ?>" data-hide-cover="<?php echo esc_attr( $like_args['cover'] ); ?>" data-show-facepile="<?php echo esc_attr( $like_args['show_faces'] ); ?>" data-show-posts="<?php echo esc_attr( $like_args['stream'] ); ?>">
- <div class="fb-xfbml-parse-ignore"><blockquote cite="<?php echo esc_url( $page_url ); ?>"><a href="<?php echo esc_url( $page_url ); ?>"><?php echo esc_html( $title ); ?></a></blockquote></div>
- </div>
- <?php
- wp_enqueue_script( 'jetpack-facebook-embed' );
- echo $after_widget;
-
- /** This action is documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', 'facebook-likebox' );
- }
-
- function update( $new_instance, $old_instance ) {
- $instance = array(
- 'title' => '',
- 'like_args' => $this->get_default_args(),
- );
-
- $instance['title'] = trim( strip_tags( stripslashes( $new_instance['title'] ) ) );
-
- // Set up widget values
- $instance['like_args'] = array(
- 'href' => trim( strip_tags( stripslashes( $new_instance['href'] ) ) ),
- 'width' => (int) $new_instance['width'],
- 'height' => (int) $new_instance['height'],
- 'show_faces' => isset( $new_instance['show_faces'] ),
- 'stream' => isset( $new_instance['stream'] ),
- 'cover' => isset( $new_instance['cover'] ),
- );
-
- $instance['like_args'] = $this->normalize_facebook_args( $instance['like_args'] );
-
- return $instance;
- }
-
- function form( $instance ) {
- $instance = wp_parse_args(
- (array) $instance, array(
- 'title' => '',
- 'like_args' => $this->get_default_args(),
- )
- );
- $like_args = $this->normalize_facebook_args( $instance['like_args'] );
- ?>
-
- <p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>">
- <?php _e( 'Title', 'jetpack' ); ?>
- <input type="text" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" value="<?php echo esc_attr( $instance['title'] ); ?>" class="widefat" />
- </label>
- </p>
-
- <p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'href' ) ); ?>">
- <?php _e( 'Facebook Page URL', 'jetpack' ); ?>
- <input type="text" name="<?php echo esc_attr( $this->get_field_name( 'href' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'href' ) ); ?>" value="<?php echo esc_url( $like_args['href'] ); ?>" class="widefat" />
- <br />
- <small><?php _e( 'The widget only works with Facebook Pages.', 'jetpack' ); ?></small>
- </label>
- </p>
-
- <p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'width' ) ); ?>">
- <?php _e( 'Width in pixels', 'jetpack' ); ?>
- <input type="number" class="smalltext" min="<?php echo esc_attr( $this->min_width ); ?>" max="<?php echo esc_attr( $this->max_width ); ?>" maxlength="3" name="<?php echo esc_attr( $this->get_field_name( 'width' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'width' ) ); ?>" value="<?php echo esc_attr( $like_args['width'] ); ?>" style="text-align: center;" />
- <small><?php echo sprintf( __( 'Minimum: %s', 'jetpack' ), $this->min_width ); ?> / <?php echo sprintf( __( 'Maximum: %s', 'jetpack' ), $this->max_width ); ?></small>
- </label>
- </p>
-
- <p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'height' ) ); ?>">
- <?php _e( 'Height in pixels', 'jetpack' ); ?>
- <input type="number" class="smalltext" min="<?php echo esc_attr( $this->min_height ); ?>" max="<?php echo esc_attr( $this->max_height ); ?>" maxlength="3" name="<?php echo esc_attr( $this->get_field_name( 'height' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'height' ) ); ?>" value="<?php echo esc_attr( $like_args['height'] ); ?>" style="text-align: center;" />
- <small><?php echo sprintf( __( 'Minimum: %s', 'jetpack' ), $this->min_height ); ?> / <?php echo sprintf( __( 'Maximum: %s', 'jetpack' ), $this->max_height ); ?></small>
- </label>
- </p>
-
- <p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'show_faces' ) ); ?>">
- <input type="checkbox" name="<?php echo esc_attr( $this->get_field_name( 'show_faces' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'show_faces' ) ); ?>" <?php checked( $like_args['show_faces'] ); ?> />
- <?php _e( 'Show Faces', 'jetpack' ); ?>
- <br />
- <small><?php _e( 'Show profile photos in the plugin.', 'jetpack' ); ?></small>
- </label>
- </p>
-
- <p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'stream' ) ); ?>">
- <input type="checkbox" name="<?php echo esc_attr( $this->get_field_name( 'stream' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'stream' ) ); ?>" <?php checked( $like_args['stream'] ); ?> />
- <?php _e( 'Show Stream', 'jetpack' ); ?>
- <br />
- <small><?php _e( 'Show Page Posts.', 'jetpack' ); ?></small>
- </label>
- </p>
-
- <p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'cover' ) ); ?>">
- <input type="checkbox" name="<?php echo esc_attr( $this->get_field_name( 'cover' ) ); ?>" id="<?php echo esc_attr( $this->get_field_id( 'cover' ) ); ?>" <?php checked( $like_args['cover'] ); ?> />
- <?php _e( 'Show Cover Photo', 'jetpack' ); ?>
- <br />
- </label>
- </p>
-
- <?php
- }
-
- function get_default_args() {
- $defaults = array(
- 'href' => '',
- 'width' => $this->default_width,
- 'height' => $this->default_height,
- 'show_faces' => 'true',
- 'stream' => '',
- 'cover' => 'true',
- );
-
- /**
- * Filter Facebook Likebox default options.
- *
- * @module widgets
- *
- * @since 1.3.1
- *
- * @param array $defaults Array of default options.
- */
- return apply_filters( 'jetpack_facebook_likebox_defaults', $defaults );
- }
-
- function normalize_facebook_args( $args ) {
- $args = wp_parse_args( (array) $args, $this->get_default_args() );
-
- // Validate the Facebook Page URL
- if ( $this->is_valid_facebook_url( $args['href'] ) ) {
- $temp = explode( '?', $args['href'] );
- $args['href'] = str_replace( array( 'http://facebook.com', 'https://facebook.com' ), array( 'http://www.facebook.com', 'https://www.facebook.com' ), $temp[0] );
- } else {
- $args['href'] = '';
- }
-
- $args['width'] = $this->normalize_int_value( (int) $args['width'], $this->default_width, $this->max_width, $this->min_width );
- $args['height'] = $this->normalize_int_value( (int) $args['height'], $this->default_height, $this->max_height, $this->min_height );
- $args['show_faces'] = (bool) $args['show_faces'];
- $args['stream'] = (bool) $args['stream'];
- $args['cover'] = (bool) $args['cover'];
-
- // The height used to be dependent on other widget settings
- // If the user changes those settings but doesn't customize the height,
- // let's intelligently assign a new height.
- if ( in_array( $args['height'], array( 580, 110, 432 ) ) ) {
- if ( $args['show_faces'] && $args['stream'] ) {
- $args['height'] = 580;
- } elseif ( ! $args['show_faces'] && ! $args['stream'] ) {
- $args['height'] = 130;
- } else {
- $args['height'] = 432;
- }
- }
-
- return $args;
- }
-
- function is_valid_facebook_url( $url ) {
- return ( false !== strpos( $url, 'facebook.com' ) ) ? true : false;
- }
-
- function normalize_int_value( $value, $default = 0, $max = 0, $min = 0 ) {
- $value = (int) $value;
-
- if ( $value > $max ) {
- $value = $max;
- } elseif ( $value < $min ) {
- $value = $min;
- }
-
- return (int) $value;
- }
-
- function normalize_text_value( $value, $default = '', $allowed = array() ) {
- $allowed = (array) $allowed;
-
- if ( empty( $value ) || ( ! empty( $allowed ) && ! in_array( $value, $allowed ) ) ) {
- $value = $default;
- }
-
- return $value;
- }
-
- /**
- * @deprecated
- */
- function guess_locale_from_lang( $lang ) {
- _deprecated_function( __METHOD__, '4.0.0', 'Jetpack::guess_locale_from_lang()' );
- Jetpack::$instance->guess_locale_from_lang( $lang );
- }
-
- /**
- * @deprecated
- */
- function get_locale() {
- _deprecated_function( __METHOD__, '4.0.0', 'Jetpack::get_locale()' );
- Jetpack::$instance->get_locale();
- }
-}
diff --git a/plugins/jetpack/modules/widgets/facebook-likebox/style.css b/plugins/jetpack/modules/widgets/facebook-likebox/style.css
deleted file mode 100644
index d5d554ba..00000000
--- a/plugins/jetpack/modules/widgets/facebook-likebox/style.css
+++ /dev/null
@@ -1,3 +0,0 @@
-.widget_facebook_likebox {
- overflow: hidden;
-}
diff --git a/plugins/jetpack/modules/widgets/flickr.php b/plugins/jetpack/modules/widgets/flickr.php
deleted file mode 100644
index a7867612..00000000
--- a/plugins/jetpack/modules/widgets/flickr.php
+++ /dev/null
@@ -1,218 +0,0 @@
-<?php
-/**
- * Disable direct access/execution to/of the widget code.
- */
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-if ( ! class_exists( 'Jetpack_Flickr_Widget' ) ) {
- /**
- * Flickr Widget
- *
- * Display your recent Flickr photos.
- */
- class Jetpack_Flickr_Widget extends WP_Widget {
- /**
- * Constructor.
- */
- function __construct() {
- parent::__construct(
- 'flickr',
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', esc_html__( 'Flickr', 'jetpack' ) ),
- array(
- 'description' => esc_html__( 'Display your recent Flickr photos.', 'jetpack' ),
- 'customize_selective_refresh' => true,
- ),
- array()
- );
-
- if ( is_active_widget( false, false, $this->id_base ) || is_customize_preview() ) {
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ) );
- }
- }
-
- /**
- * Enqueue style.
- */
- function enqueue_style() {
- wp_enqueue_style( 'flickr-widget-style', plugins_url( 'flickr/style.css', __FILE__ ), array(), '20170405' );
- }
-
- /**
- * Return an associative array of default values.
- *
- * These values are used in new widgets.
- *
- * @return array Default values for the widget options.
- */
- public function defaults() {
- return array(
- 'title' => esc_html__( 'Flickr Photos', 'jetpack' ),
- 'items' => 4,
- 'flickr_image_size' => 'thumbnail',
- 'flickr_rss_url' => '',
- );
- }
-
- /**
- * Front-end display of the widget.
- *
- * @param array $args Widget arguments.
- * @param array $instance Saved values from database.
- */
- public function widget( $args, $instance ) {
- $instance = wp_parse_args( $instance, $this->defaults() );
-
- $image_size_string = 'small' == $instance['flickr_image_size'] ? '_m.jpg' : '_t.jpg';
-
- if ( ! empty( $instance['flickr_rss_url'] ) ) {
-
- /*
- * Parse the URL, and rebuild a URL that's sure to display images.
- * Some Flickr Feeds do not display images by default.
- */
- $flickr_parameters = parse_url( htmlspecialchars_decode( $instance['flickr_rss_url'] ) );
-
- // Is it a Flickr Feed.
- if (
- ! empty( $flickr_parameters['host'] )
- && ! empty( $flickr_parameters['query'] )
- && false !== strpos( $flickr_parameters['host'], 'flickr' )
- ) {
- parse_str( $flickr_parameters['query'], $vars );
-
- // Do we have an ID in the feed? Let's continue.
- if ( isset( $vars['id'] ) ) {
-
- // Flickr Feeds can be used for groups or for individuals.
- if (
- ! empty( $flickr_parameters['path'] )
- && false !== strpos( $flickr_parameters['path'], 'groups' )
- ) {
- $feed_url = 'https://api.flickr.com/services/feeds/groups_pool.gne';
- } else {
- $feed_url = 'https://api.flickr.com/services/feeds/photos_public.gne';
- }
-
- // Build our new RSS feed.
- $rss_url = sprintf(
- '%1$s?id=%2$s&format=rss_200_enc',
- esc_url( $feed_url ),
- esc_attr( $vars['id'] )
- );
- }
- }
- } // End if().
-
- // Still no RSS feed URL? Get a default feed from Flickr to grab interesting photos.
- if ( empty( $rss_url ) ) {
- $rss_url = 'https://api.flickr.com/services/feeds/photos_interesting.gne?format=rss_200';
- }
-
- $rss = fetch_feed( $rss_url );
-
- $photos = '';
- if ( ! is_wp_error( $rss ) ) {
- foreach ( $rss->get_items( 0, $instance['items'] ) as $photo ) {
- switch ( $instance['flickr_image_size'] ) {
- case 'thumbnail':
- $src = $photo->get_enclosure()->get_thumbnail();
- break;
- case 'small':
- $src = preg_match( '/src="(.*?)"/i', $photo->get_description(), $p );
- $src = $p[1];
- break;
- case 'large':
- $src = $photo->get_enclosure()->get_link();
- break;
- }
-
- $photos .= '<a href="' . esc_url( $photo->get_permalink(), array( 'http', 'https' ) ) . '">';
- $photos .= '<img src="' . esc_url( $src, array( 'http', 'https' ) ) . '" ';
- $photos .= 'alt="' . esc_attr( $photo->get_title() ) . '" ';
- $photos .= 'title="' . esc_attr( $photo->get_title() ) . '" ';
- $photos .= ' /></a>';
- }
- if ( ! empty( $photos ) && class_exists( 'Jetpack_Photon' ) && Jetpack::is_module_active( 'photon' ) ) {
- $photos = Jetpack_Photon::filter_the_content( $photos );
- }
-
- $flickr_home = $rss->get_link();
- }
-
- echo $args['before_widget'];
- if ( empty( $photos ) ) {
- if ( current_user_can( 'edit_theme_options' ) ) {
- printf(
- '<p>%1$s<br />%2$s</p>',
- esc_html__( 'There are no photos to display. Make sure your Flickr feed URL is correct, and that your pictures are publicly accessible.', 'jetpack' ),
- esc_html__( '(Only admins can see this message)', 'jetpack' )
- );
- }
- } else {
- echo $args['before_title'] . esc_html( $instance['title'] ) . $args['after_title'];
- require( dirname( __FILE__ ) . '/flickr/widget.php' );
- }
- echo $args['after_widget'];
- /** This action is already documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', 'flickr' );
- }
-
- /**
- * Back-end widget form.
- *
- * @param array $instance Previously saved values from database.
- */
- public function form( $instance ) {
- $instance = wp_parse_args( $instance, $this->defaults() );
- require( dirname( __FILE__ ) . '/flickr/form.php' );
- }
-
- /**
- * Sanitize widget form values as they are saved.
- *
- * @param array $new_instance Values just sent to be saved.
- * @param array $old_instance Previously saved values from database.
- * @return array Updated safe values to be saved.
- */
- public function update( $new_instance, $old_instance ) {
- $instance = array();
- $defaults = $this->defaults();
-
- if ( isset( $new_instance['title'] ) ) {
- $instance['title'] = wp_kses( $new_instance['title'], array() );
- }
-
- if ( isset( $new_instance['items'] ) ) {
- $instance['items'] = intval( $new_instance['items'] );
- }
-
- if (
- isset( $new_instance['flickr_image_size'] ) &&
- in_array( $new_instance['flickr_image_size'], array( 'thumbnail', 'small', 'large' ) )
- ) {
- $instance['flickr_image_size'] = $new_instance['flickr_image_size'];
- } else {
- $instance['flickr_image_size'] = 'thumbnail';
- }
-
- if ( isset( $new_instance['flickr_rss_url'] ) ) {
- $instance['flickr_rss_url'] = esc_url( $new_instance['flickr_rss_url'], array( 'http', 'https' ) );
-
- if ( strlen( $instance['flickr_rss_url'] ) < 10 ) {
- $instance['flickr_rss_url'] = '';
- }
- }
-
- return $instance;
- }
- }
-
- // Register Jetpack_Flickr_Widget widget.
- function jetpack_register_flickr_widget() {
- register_widget( 'Jetpack_Flickr_Widget' );
- }
- add_action( 'widgets_init', 'jetpack_register_flickr_widget' );
-}
diff --git a/plugins/jetpack/modules/widgets/flickr/form.php b/plugins/jetpack/modules/widgets/flickr/form.php
deleted file mode 100644
index b08e7c4d..00000000
--- a/plugins/jetpack/modules/widgets/flickr/form.php
+++ /dev/null
@@ -1,93 +0,0 @@
-<p>
- <label>
- <?php esc_html_e( 'Title:', 'jetpack' ); ?>
- </label>
- <input
- class="widefat"
- name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>"
- type="text"
- value="<?php echo esc_attr( $instance['title'] ); ?>"
- />
-</p>
-
-<p>
- <label>
- <?php esc_html_e( 'Flickr RSS URL:', 'jetpack' ); ?>
- </label>
- <input
- class="widefat"
- name="<?php echo esc_attr( $this->get_field_name( 'flickr_rss_url' ) ); ?>"
- type="text"
- value="<?php echo esc_attr( $instance['flickr_rss_url'] ); ?>"
- />
-</p>
-<p>
- <small>
- <?php esc_html_e( 'To find your Flickr RSS URL, go to your photostream, add "?details=1" to the URL, and hit enter. Scroll down until you see the RSS icon or the "Latest" link. Right-click on either options and copy the URL. Paste into the box above.', 'jetpack' ); ?>
- </small>
-</p>
-<p>
- <small>
- <?php printf(
- __( 'Leave the Flickr RSS URL field blank to display <a target="_blank" href="%s">interesting</a> Flickr photos.', 'jetpack' ),
- 'http://www.flickr.com/explore/interesting'
- ); ?>
- </small>
-</p>
-
-<p>
- <label>
- <?php esc_html_e( 'How many photos would you like to display?', 'jetpack' ); ?>
- </label>
- <select name="<?php echo esc_attr( $this->get_field_name( 'items' ) ); ?>">
- <?php for ( $i = 1; $i <= 10; ++$i ) { ?>
- <option
- <?php selected( $instance['items'], $i ); ?>
- value="<?php echo $i; ?>"
- >
- <?php echo $i; ?>
- </option>
- <?php } ?>
- </select>
-</p>
-
-<p>
- <div>
- <?php esc_html_e( 'What size photos would you like to display?', 'jetpack' ); ?>
- </div>
- <ul>
- <li>
- <label>
- <input
- <?php checked( $instance['flickr_image_size'], 'thumbnail' ); ?>
- name="<?php echo esc_attr( $this->get_field_name( 'flickr_image_size' ) ); ?>"
- type="radio"
- value="thumbnail"
- />
- <?php esc_html_e( 'Thumbnail', 'jetpack' ); ?>
- </label>
- </li>
- <li>
- <label>
- <input
- <?php checked( $instance['flickr_image_size'], 'small' ); ?>
- name="<?php echo esc_attr( $this->get_field_name( 'flickr_image_size' ) ); ?>"
- type="radio"
- value="small"
- />
- <?php esc_html_e( 'Medium', 'jetpack' ); ?>
- </label>
- </li>
- <li>
- <label>
- <input
- <?php checked( $instance['flickr_image_size'], 'large' ); ?>
- name="<?php echo esc_attr( $this->get_field_name( 'flickr_image_size' ) ); ?>"
- type="radio"
- value="large"
- />
- <?php esc_html_e( 'Large', 'jetpack' ); ?>
- </label>
- </li>
- </ul>
-</p>
diff --git a/plugins/jetpack/modules/widgets/flickr/style.css b/plugins/jetpack/modules/widgets/flickr/style.css
deleted file mode 100644
index 689e240a..00000000
--- a/plugins/jetpack/modules/widgets/flickr/style.css
+++ /dev/null
@@ -1,16 +0,0 @@
-.flickr-images {
- text-align: center;
-}
-
-.flickr-size-thumbnail .flickr-images {
- align-content: space-between;
- align-items: center;
- display: flex;
- flex-flow: row wrap;
- justify-content: center;
-}
-
-.flickr-images img {
- max-width: 100%;
- margin: 5px;
-}
diff --git a/plugins/jetpack/modules/widgets/flickr/widget.php b/plugins/jetpack/modules/widgets/flickr/widget.php
deleted file mode 100644
index 0c45f3f0..00000000
--- a/plugins/jetpack/modules/widgets/flickr/widget.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<!-- Start of Flickr Widget -->
-<div class="flickr-wrapper flickr-size-<?php echo esc_attr( $instance['flickr_image_size'] ); ?>">
- <div class="flickr-images">
- <?php echo $photos; ?>
- </div>
-
- <?php if ( isset( $flickr_home ) ) { ?>
- <a class="flickr-more" href="<?php echo esc_url( $flickr_home, array( 'http', 'https' ) ); ?>">
- <?php esc_html_e( 'More Photos', 'jetpack' ); ?>
- </a>
- <?php } ?>
-</div>
-<!-- End of Flickr Widget -->
diff --git a/plugins/jetpack/modules/widgets/gallery.php b/plugins/jetpack/modules/widgets/gallery.php
deleted file mode 100644
index 8cb24d01..00000000
--- a/plugins/jetpack/modules/widgets/gallery.php
+++ /dev/null
@@ -1,464 +0,0 @@
-<?php
-
-/*
-Plugin Name: Gallery
-Description: Gallery widget
-Author: Automattic Inc.
-Version: 1.0
-Author URI: http://automattic.com
-*/
-
-class Jetpack_Gallery_Widget extends WP_Widget {
- const THUMB_SIZE = 45;
- const DEFAULT_WIDTH = 265;
-
- protected $_instance_width;
-
- public function __construct() {
- $widget_ops = array(
- 'classname' => 'widget-gallery',
- 'description' => __( 'Display a photo gallery or slideshow', 'jetpack' ),
- 'customize_selective_refresh' => true,
- );
-
- add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_scripts' ) );
-
- parent::__construct(
- 'gallery',
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', __( 'Gallery', 'jetpack' ) ),
- $widget_ops
- );
-
- if ( is_customize_preview() ) {
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_frontend_scripts' ) );
-
- if ( class_exists( 'Jetpack_Tiled_Gallery' ) ) {
- add_action( 'wp_enqueue_scripts', array( 'Jetpack_Tiled_Gallery', 'default_scripts_and_styles' ) );
- }
-
- if ( class_exists( 'Jetpack_Slideshow_Shortcode' ) ) {
- $slideshow = new Jetpack_Slideshow_Shortcode();
- add_action( 'wp_enqueue_scripts', array( $slideshow, 'enqueue_scripts' ) );
- }
-
- if ( class_exists( 'Jetpack_Carousel' ) ) {
- $carousel = new Jetpack_Carousel();
- add_action( 'wp_enqueue_scripts', array( $carousel, 'enqueue_assets' ) );
- }
- }
- }
-
- /**
- * @param array $args Display arguments including before_title, after_title, before_widget, and after_widget.
- * @param array $instance The settings for the particular instance of the widget.
- */
- public function widget( $args, $instance ) {
- $instance = wp_parse_args( (array) $instance, $this->defaults() );
-
- $this->enqueue_frontend_scripts();
-
- extract( $args );
-
- $instance['attachments'] = $this->get_attachments( $instance );
-
- $classes = array();
-
- $classes[] = 'widget-gallery-' . $instance['type'];
-
- // Due to a bug in the carousel plugin, carousels will be triggered for all tiled galleries that exist on a page
- // with other tiled galleries, regardless of whether or not the widget was set to Carousel mode. The onClick selector
- // is simply too broad, since it was not written with widgets in mind. This special class prevents that behavior, via
- // an override handler in gallery.js
- if ( 'carousel' != $instance['link'] && 'slideshow' != $instance['type'] ) {
- $classes[] = 'no-carousel';
- } else {
- $classes[] = 'carousel';
- }
-
- $classes = implode( ' ', $classes );
-
- if ( 'carousel' == $instance['link'] ) {
- require_once plugin_dir_path( realpath( dirname( __FILE__ ) . '/../carousel/jetpack-carousel.php' ) ) . 'jetpack-carousel.php';
-
- if ( class_exists( 'Jetpack_Carousel' ) ) {
- // Create new carousel so we can use the enqueue_assets() method. Not ideal, but there is a decent amount
- // of logic in that method that shouldn't be duplicated.
- $carousel = new Jetpack_Carousel();
-
- // First parameter is $output, which comes from filters, and causes bypass of the asset enqueuing. Passing null is correct.
- $carousel->enqueue_assets( null );
- }
- }
-
- echo $before_widget . "\n";
-
- /** This filter is documented in core/src/wp-includes/default-widgets.php */
- $title = apply_filters( 'widget_title', $instance['title'] );
-
- if ( $title ) {
- echo $before_title . esc_html( $title ) . $after_title . "\n";
- }
-
- echo '<div class="' . esc_attr( $classes ) . '">' . "\n";
-
- $method = $instance['type'] . '_widget';
-
- /**
- * Allow the width of a gallery to be altered by themes or other code.
- *
- * @module widgets
- *
- * @since 2.5.0
- *
- * @param int self::DEFAULT_WIDTH Default gallery width. Default is 265.
- * @param string $args Display arguments including before_title, after_title, before_widget, and after_widget.
- * @param array $instance The settings for the particular instance of the widget.
- */
- $this->_instance_width = apply_filters( 'gallery_widget_content_width', self::DEFAULT_WIDTH, $args, $instance );
-
- // Register a filter to modify the tiled_gallery_content_width, so Jetpack_Tiled_Gallery
- // can appropriately size the tiles.
- add_filter( 'tiled_gallery_content_width', array( $this, 'tiled_gallery_content_width' ) );
-
- if ( method_exists( $this, $method ) ) {
- echo $this->$method( $args, $instance );
- }
-
- // Remove the stored $_instance_width, as it is no longer needed
- $this->_instance_width = null;
-
- // Remove the filter, so any Jetpack_Tiled_Gallery in a post is not affected
- remove_filter( 'tiled_gallery_content_width', array( $this, 'tiled_gallery_content_width' ) );
-
- echo "\n" . '</div>'; // .widget-gallery-$type
-
- echo "\n" . $after_widget;
-
- /** This action is documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', 'gallery' );
- }
-
- /**
- * Fetch the images attached to the gallery Widget
- *
- * @param array $instance The Widget instance for which you'd like attachments
- * @return array Array of attachment objects for the Widget in $instance
- */
- public function get_attachments( $instance ) {
- $ids = explode( ',', $instance['ids'] );
-
- if ( isset( $instance['random'] ) && 'on' == $instance['random'] ) {
- shuffle( $ids );
- }
-
- $attachments_query = new WP_Query(
- array(
- 'post__in' => $ids,
- 'post_status' => 'inherit',
- 'post_type' => 'attachment',
- 'post_mime_type' => 'image',
- 'posts_per_page' => -1,
- 'orderby' => 'post__in',
- )
- );
-
- $attachments = $attachments_query->get_posts();
-
- wp_reset_postdata();
-
- return $attachments;
- }
-
- /**
- * Generate HTML for a rectangular, tiled Widget
- *
- * @param array $args Display arguments including before_title, after_title, before_widget, and after_widget.
- * @param array $instance The Widget instance to generate HTML for
- * @return string String of HTML representing a rectangular gallery
- */
- public function rectangular_widget( $args, $instance ) {
- if ( ! class_exists( 'Jetpack_Tiled_Gallery' )
- && ! class_exists( 'Jetpack_Tiled_Gallery_Layout_Rectangular' ) ) {
- return;
- }
-
- Jetpack_Tiled_Gallery::default_scripts_and_styles();
-
- $layout = new Jetpack_Tiled_Gallery_Layout_Rectangular( $instance['attachments'], $instance['link'], false, 3 );
- return $layout->HTML();
- }
-
- /**
- * Generate HTML for a square (grid style) Widget
- *
- * @param array $args Display arguments including before_title, after_title, before_widget, and after_widget.
- * @param array $instance The Widget instance to generate HTML for
- * @return string String of HTML representing a square gallery
- */
- public function square_widget( $args, $instance ) {
- if ( ! class_exists( 'Jetpack_Tiled_Gallery' )
- && ! class_exists( 'Jetpack_Tiled_Gallery_Layout_Square' ) ) {
- return;
- }
-
- Jetpack_Tiled_Gallery::default_scripts_and_styles();
-
- $layout = new Jetpack_Tiled_Gallery_Layout_Square( $instance['attachments'], $instance['link'], false, 3 );
- return $layout->HTML();
- }
-
- /**
- * Generate HTML for a circular (grid style) Widget
- *
- * @param array $args Display arguments including before_title, after_title, before_widget, and after_widget.
- * @param array $instance The Widget instance to generate HTML for
- * @return string String of HTML representing a circular gallery
- */
- public function circle_widget( $args, $instance ) {
- if ( ! class_exists( 'Jetpack_Tiled_Gallery' )
- && ! class_exists( 'Jetpack_Tiled_Gallery_Layout_Circle' ) ) {
- return;
- }
-
- Jetpack_Tiled_Gallery::default_scripts_and_styles();
-
- $layout = new Jetpack_Tiled_Gallery_Layout_Circle( $instance['attachments'], $instance['link'], false, 3 );
- return $layout->HTML();
- }
-
- /**
- * Generate HTML for a slideshow Widget
- *
- * @param array $args Display arguments including before_title, after_title, before_widget, and after_widget.
- * @param array $instance The Widget instance to generate HTML for
- * @return string String of HTML representing a slideshow gallery
- */
- public function slideshow_widget( $args, $instance ) {
- global $content_width;
-
- require_once plugin_dir_path( realpath( dirname( __FILE__ ) . '/../shortcodes/slideshow.php' ) ) . 'slideshow.php';
-
- if ( ! class_exists( 'Jetpack_Slideshow_Shortcode' ) ) {
- return;
- }
-
- if ( count( $instance['attachments'] ) < 1 ) {
- return;
- }
-
- $slideshow = new Jetpack_Slideshow_Shortcode();
-
- $slideshow->enqueue_scripts();
-
- $gallery_instance = 'widget-' . $args['widget_id'];
-
- $gallery = array();
-
- foreach ( $instance['attachments'] as $attachment ) {
- $attachment_image_src = wp_get_attachment_image_src( $attachment->ID, 'full' );
- $attachment_image_src = jetpack_photon_url( $attachment_image_src[0], array( 'w' => $this->_instance_width ) ); // [url, width, height]
-
- $caption = wptexturize( strip_tags( $attachment->post_excerpt ) );
-
- $gallery[] = (object) array(
- 'src' => (string) esc_url_raw( $attachment_image_src ),
- 'id' => (string) $attachment->ID,
- 'caption' => (string) $caption,
- );
- }
-
- $max_width = intval( get_option( 'large_size_w' ) );
- $max_height = 175;
-
- if ( intval( $content_width ) > 0 ) {
- $max_width = min( intval( $content_width ), $max_width );
- }
-
- $color = Jetpack_Options::get_option( 'slideshow_background_color', 'black' );
- $autostart = isset( $attr['autostart'] ) ? $attr['autostart'] : true;
-
- $js_attr = array(
- 'gallery' => $gallery,
- 'selector' => $gallery_instance,
- 'width' => $max_width,
- 'height' => $max_height,
- 'trans' => 'fade',
- 'color' => $color,
- 'autostart' => $autostart,
- );
-
- $html = $slideshow->slideshow_js( $js_attr );
-
- return $html;
- }
-
- /**
- * tiled_gallery_content_width filter
- *
- * Used to adjust the content width of Jetpack_Tiled_Gallery's in sidebars
- *
- * $this->_instance_width is filtered in widget() and this filter is added then removed in widget()
- *
- * @param int $width int The original width value
- * @return int The filtered width
- */
- public function tiled_gallery_content_width( $width ) {
- return $this->_instance_width;
- }
-
- public function form( $instance ) {
- $defaults = $this->defaults();
- $allowed_values = $this->allowed_values();
-
- $instance = wp_parse_args( (array) $instance, $defaults );
-
- include dirname( __FILE__ ) . '/gallery/templates/form.php';
- }
-
- public function update( $new_instance, $old_instance ) {
- $instance = $this->sanitize( $new_instance );
-
- return $instance;
- }
-
- /**
- * Sanitize the $instance's values to the set of allowed values. If a value is not acceptable,
- * it is set to its default.
- *
- * Helps keep things nice and secure by whitelisting only allowed values
- *
- * @param array $instance The Widget instance to sanitize values for
- * @return array $instance The Widget instance with values sanitized
- */
- public function sanitize( $instance ) {
- $allowed_values = $this->allowed_values();
- $defaults = $this->defaults();
-
- foreach ( $instance as $key => $value ) {
- $value = trim( $value );
-
- if ( isset( $allowed_values[ $key ] ) && $allowed_values[ $key ] && ! array_key_exists( $value, $allowed_values[ $key ] ) ) {
- $instance[ $key ] = $defaults[ $key ];
- } else {
- $instance[ $key ] = sanitize_text_field( $value );
- }
- }
-
- return $instance;
- }
-
- /**
- * Return a multi-dimensional array of allowed values (and their labels) for all widget form
- * elements
- *
- * To allow all values on an input, omit it from the returned array
- *
- * @return array Array of allowed values for each option
- */
- public function allowed_values() {
- $max_columns = 5;
-
- // Create an associative array of allowed column values. This just automates the generation of
- // column <option>s, from 1 to $max_columns
- $allowed_columns = array_combine( range( 1, $max_columns ), range( 1, $max_columns ) );
-
- return array(
- 'type' => array(
- 'rectangular' => __( 'Tiles', 'jetpack' ),
- 'square' => __( 'Square Tiles', 'jetpack' ),
- 'circle' => __( 'Circles', 'jetpack' ),
- 'slideshow' => __( 'Slideshow', 'jetpack' ),
- ),
- 'columns' => $allowed_columns,
- 'link' => array(
- 'carousel' => __( 'Carousel', 'jetpack' ),
- 'post' => __( 'Attachment Page', 'jetpack' ),
- 'file' => __( 'Media File', 'jetpack' ),
- ),
- );
- }
-
- /**
- * Return an associative array of default values
- *
- * These values are used in new widgets as well as when sanitizing input. If a given value is not allowed,
- * as defined in allowed_values(), that input is set to the default value defined here.
- *
- * @return array Array of default values for the Widget's options
- */
- public function defaults() {
- return array(
- 'title' => '',
- 'type' => 'rectangular',
- 'ids' => '',
- 'columns' => 3,
- 'link' => 'carousel',
- );
- }
-
- public function enqueue_frontend_scripts() {
- wp_register_script(
- 'gallery-widget',
- Jetpack::get_file_url_for_environment(
- '_inc/build/widgets/gallery/js/gallery.min.js',
- 'modules/widgets/gallery/js/gallery.js'
- )
- );
-
- wp_enqueue_script( 'gallery-widget' );
- }
-
- public function enqueue_admin_scripts() {
- global $pagenow;
-
- if ( 'widgets.php' == $pagenow || 'customize.php' == $pagenow ) {
- wp_enqueue_media();
-
- wp_enqueue_script(
- 'gallery-widget-admin',
- Jetpack::get_file_url_for_environment(
- '_inc/build/widgets/gallery/js/admin.min.js',
- 'modules/widgets/gallery/js/admin.js'
- ),
- array(
- 'media-models',
- 'media-views',
- ),
- '20150501'
- );
-
- $js_settings = array(
- 'thumbSize' => self::THUMB_SIZE,
- );
-
- wp_localize_script( 'gallery-widget-admin', '_wpGalleryWidgetAdminSettings', $js_settings );
- wp_enqueue_style( 'gallery-widget-admin', plugins_url( '/gallery/css/admin.css', __FILE__ ) );
- wp_style_add_data( 'gallery-widget-admin', 'rtl', 'replace' );
- }
- }
-}
-
-add_action( 'widgets_init', 'jetpack_gallery_widget_init' );
-
-function jetpack_gallery_widget_init() {
- /**
- * Allow the Gallery Widget to be enabled even when Core supports the Media Gallery Widget
- *
- * @module widgets
- *
- * @since 5.5.0
- *
- * @param bool false Whether to force-enable the gallery widget
- */
- if (
- ! apply_filters( 'jetpack_force_enable_gallery_widget', false )
- && class_exists( 'WP_Widget_Media_Gallery' )
- && Jetpack_Options::get_option( 'gallery_widget_migration' )
- ) {
- return;
- }
- if ( ! method_exists( 'Jetpack', 'is_module_active' ) || Jetpack::is_module_active( 'tiled-gallery' ) ) {
- register_widget( 'Jetpack_Gallery_Widget' );
- }
-}
diff --git a/plugins/jetpack/modules/widgets/gallery/css/admin-rtl.css b/plugins/jetpack/modules/widgets/gallery/css/admin-rtl.css
deleted file mode 100644
index afd9550d..00000000
--- a/plugins/jetpack/modules/widgets/gallery/css/admin-rtl.css
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-.gallery-widget-thumbs-wrapper {
- margin: -5px 0 0.3em 0;
-}
-
-.gallery-widget-thumbs img {
- border: 1px solid #ccc;
- padding: 2px;
- background-color: #fff;
- margin: 0 0 5px 5px;
- float: right;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/widgets/gallery/css/admin-rtl.min.css b/plugins/jetpack/modules/widgets/gallery/css/admin-rtl.min.css
deleted file mode 100644
index de937320..00000000
--- a/plugins/jetpack/modules/widgets/gallery/css/admin-rtl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.gallery-widget-thumbs-wrapper{margin:-5px 0 .3em 0}.gallery-widget-thumbs img{border:1px solid #ccc;padding:2px;background-color:#fff;margin:0 0 5px 5px;float:right} \ No newline at end of file
diff --git a/plugins/jetpack/modules/widgets/gallery/css/admin.css b/plugins/jetpack/modules/widgets/gallery/css/admin.css
deleted file mode 100644
index c3d96d80..00000000
--- a/plugins/jetpack/modules/widgets/gallery/css/admin.css
+++ /dev/null
@@ -1,11 +0,0 @@
-.gallery-widget-thumbs-wrapper {
- margin: -5px 0 0.3em 0;
-}
-
-.gallery-widget-thumbs img {
- border: 1px solid #ccc;
- padding: 2px;
- background-color: #fff;
- margin: 0 5px 5px 0;
- float: left;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/widgets/gallery/css/admin.min.css b/plugins/jetpack/modules/widgets/gallery/css/admin.min.css
deleted file mode 100644
index 743791f9..00000000
--- a/plugins/jetpack/modules/widgets/gallery/css/admin.min.css
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Do not modify this file directly. It is concatenated from individual module CSS files. */
-.gallery-widget-thumbs-wrapper{margin:-5px 0 .3em 0}.gallery-widget-thumbs img{border:1px solid #ccc;padding:2px;background-color:#fff;margin:0 5px 5px 0;float:left} \ No newline at end of file
diff --git a/plugins/jetpack/modules/widgets/gallery/css/rtl/admin-rtl.css b/plugins/jetpack/modules/widgets/gallery/css/rtl/admin-rtl.css
deleted file mode 100644
index e0e4b615..00000000
--- a/plugins/jetpack/modules/widgets/gallery/css/rtl/admin-rtl.css
+++ /dev/null
@@ -1,13 +0,0 @@
-/* This file was automatically generated on Mar 22 2013 21:33:14 */
-
-.gallery-widget-thumbs-wrapper {
- margin: -5px 0 0.3em 0;
-}
-
-.gallery-widget-thumbs img {
- border: 1px solid #ccc;
- padding: 2px;
- background-color: #fff;
- margin: 0 0 5px 5px;
- float: right;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/widgets/gallery/js/admin.js b/plugins/jetpack/modules/widgets/gallery/js/admin.js
deleted file mode 100644
index 1f4526e2..00000000
--- a/plugins/jetpack/modules/widgets/gallery/js/admin.js
+++ /dev/null
@@ -1,225 +0,0 @@
-/* jshint onevar: false, multistr: true */
-/* global _wpMediaViewsL10n, _wpGalleryWidgetAdminSettings */
-
-(function($){
- var $ids;
- var $thumbs;
-
- $(function(){
- $( document.body ) .on( 'click', '.gallery-widget-choose-images', function( event ) {
- event.preventDefault();
-
- var widget_form = $( this ).closest( 'form, .form' );
-
- $ids = widget_form.find( '.gallery-widget-ids' );
- $thumbs = widget_form.find( '.gallery-widget-thumbs' );
-
- var idsString = $ids.val();
-
- var attachments = getAttachments( idsString );
-
- var selection = null;
- var editing = false;
-
- if ( attachments ) {
- selection = getSelection( attachments );
-
- editing = true;
- }
-
- var options = {
- state: 'gallery-edit',
- title: wp.media.view.l10n.addMedia,
- multiple: true,
- editing: editing,
- selection: selection
- };
-
- var workflow = getWorkflow( options );
-
- workflow.open();
- });
-
- // Setup an onchange handler to toggle various options when changing style. The different style options
- // require different form inputs to be presented in the widget; this event will keep the UI in sync
- // with the selected style
- $( '.widget-inside' ).on( 'change', '.gallery-widget-style', setupStyleOptions);
-
- // Setup the Link To options for all forms currently on the page. Does the same as the onChange handler, but
- // is called once to display the correct form inputs for each widget on the page
- setupStyleOptions();
- });
-
- var media = wp.media,
- l10n;
-
- // Link any localized strings.
- l10n = media.view.l10n = typeof _wpMediaViewsL10n === 'undefined' ? {} : _wpMediaViewsL10n;
-
- /**
- * wp.media.view.MediaFrame.GalleryWidget
- *
- * This behavior can be very nearly had by setting the workflow's state to 'gallery-edit', but
- * we cannot use the custom WidgetGalleryEdit controller with it (must overide createStates(),
- * which is necessary to disable the sidebar gallery settings in the media browser)
- */
- media.view.MediaFrame.GalleryWidget = media.view.MediaFrame.Post.extend({
- createStates: function() {
- var options = this.options;
-
- // `CollectionEdit` and `CollectionAdd` were only introduced in r27214-core,
- // so they may not be available yet.
- if ( 'CollectionEdit' in media.controller ) {
- this.states.add([
- new media.controller.CollectionEdit({
- type: 'image',
- collectionType: 'gallery',
- title: l10n.editGalleryTitle,
- SettingsView: media.view.Settings.Gallery,
- library: options.selection,
- editing: options.editing,
- menu: 'gallery'
- }),
- new media.controller.CollectionAdd({
- type: 'image',
- collectionType: 'gallery',
- title: l10n.addToGalleryTitle
- })
- ]);
- } else {
- // If `CollectionEdit` is not available, then use the old approach.
-
- if ( ! ( 'WidgetGalleryEdit' in media.controller ) ) {
- // Remove the gallery settings sidebar when editing widgets.
- media.controller.WidgetGalleryEdit = media.controller.GalleryEdit.extend({
- gallerySettings: function( /*browser*/ ) {
- return;
- }
- });
- }
-
- this.states.add([
- new media.controller.WidgetGalleryEdit({
- library: options.selection,
- editing: options.editing,
- menu: 'gallery'
- }),
- new media.controller.GalleryAdd({ })
- ]);
- }
- }
- });
-
- function setupStyleOptions(){
- $( '.widget-inside .gallery-widget-style' ).each( function( /*i*/ ){
- var style = $( this ).val();
-
- var form = $( this ).parents( 'form' );
-
- switch ( style ) {
- case 'slideshow':
- form.find( '.gallery-widget-link-wrapper' ).hide();
- form.find( '.gallery-widget-columns-wrapper' ).hide();
-
- break;
-
- default:
- form.find( '.gallery-widget-link-wrapper' ).show();
- form.find( '.gallery-widget-columns-wrapper' ).show();
- }
- });
- }
-
- /**
- * Take a given Selection of attachments and a thumbs wrapper div (jQuery object)
- * and fill it with thumbnails
- */
- function setupThumbs( selection, wrapper ){
- wrapper.empty();
-
- var imageSize = _wpGalleryWidgetAdminSettings.thumbSize;
-
- selection.each( function( model ){
- var sizedUrl = model.get('url') + '?w=' + imageSize + '&h=' + imageSize + '&crop=true';
-
- var thumb = jQuery('<img>', { 'src' : sizedUrl, 'alt': model.get('title'), 'title': model.get('title'), 'width': imageSize, 'height': imageSize, 'class': 'thumb' });
-
- wrapper.append( thumb );
- });
- }
-
- /**
- * Take a csv string of ids (as stored in db) and fetch a full Attachments collection
- */
- function getAttachments( idsString ) {
- if ( ! idsString ) {
- return null;
- }
-
- // Found in /wp-includes/js/media-editor.js
- var shortcode = wp.shortcode.next( 'gallery', '[gallery ids="' + idsString + '"]' );
-
- // Ignore the rest of the match object, to give attachments() below what it expects
- shortcode = shortcode.shortcode;
-
- var attachments = wp.media.gallery.attachments( shortcode );
-
- return attachments;
- }
-
- /**
- * Take an Attachments collection and return a corresponding Selection model that can be
- * passed to a MediaFrame to prepopulate the gallery picker
- */
- function getSelection( attachments ) {
- var selection = new wp.media.model.Selection( attachments.models, {
- props: attachments.props.toJSON(),
- multiple: true
- });
-
- selection.gallery = attachments.gallery;
-
- // Fetch the query's attachments, and then break ties from the
- // query to allow for sorting.
- selection.more().done( function() {
- // Break ties with the query.
- selection.props.set( { query: false } );
- selection.unmirror();
- selection.props.unset( 'orderby' );
- });
-
- return selection;
- }
-
- /**
- * Create a media 'workflow' (MediaFrame). This is the main entry point for the media picker
- */
- function getWorkflow( options ) {
- var workflow = new wp.media.view.MediaFrame.GalleryWidget( options );
-
- workflow.on( 'update', function( selection ) {
- var state = workflow.state();
-
- selection = selection || state.get( 'selection' );
-
- if ( ! selection ) {
- return;
- }
-
- // Map the Models down into a simple array of ids that can be easily imploded to a csv string
- var ids = selection.map( function( model ){
- return model.get( 'id' );
- } );
-
- var id_string = ids.join( ',' );
-
- $ids.val( id_string ).trigger( 'change' );
-
- setupThumbs( selection, $thumbs );
- }, this );
-
- workflow.setState( workflow.options.state );
-
- return workflow;
- }
-})(jQuery);
diff --git a/plugins/jetpack/modules/widgets/gallery/js/gallery.js b/plugins/jetpack/modules/widgets/gallery/js/gallery.js
deleted file mode 100644
index 1740262e..00000000
--- a/plugins/jetpack/modules/widgets/gallery/js/gallery.js
+++ /dev/null
@@ -1,10 +0,0 @@
-(function($){
- // Fixes a bug with carousels being triggered even when a widget's Link To option is not set to carousel.
- // Happens when another gallery is loaded on the page, either in a post or separate widget
- $( 'body' ).on( 'click', '.widget-gallery .no-carousel .tiled-gallery-item a', function( event ){
- // Have to trigger default, instead of carousel
- event.stopPropagation();
-
- return true;
- });
-})(jQuery); \ No newline at end of file
diff --git a/plugins/jetpack/modules/widgets/gallery/templates/form.php b/plugins/jetpack/modules/widgets/gallery/templates/form.php
deleted file mode 100644
index f24cf1c2..00000000
--- a/plugins/jetpack/modules/widgets/gallery/templates/form.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<p>
- <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php esc_html_e( 'Title:', 'jetpack' ); ?>
- <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>"
- type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" />
- </label>
-</p>
-
-<p>
- <label>
- <?php esc_html_e( 'Images:', 'jetpack' ); ?>
- </label>
-</p>
-
-<div class="gallery-widget-thumbs-wrapper">
- <div class="gallery-widget-thumbs">
- <?php
-
- // Add the thumbnails to the widget box
- $attachments = $this->get_attachments( $instance );
-
- foreach( $attachments as $attachment ){
- $url = add_query_arg( array(
- 'w' => self::THUMB_SIZE,
- 'h' => self::THUMB_SIZE,
- 'crop' => 'true'
- ), wp_get_attachment_url( $attachment->ID ) );
-
- ?>
-
- <img src="<?php echo esc_url( $url ); ?>" title="<?php echo esc_attr( $attachment->post_title ); ?>" alt="<?php echo esc_attr( $attachment->post_title ); ?>"
- width="<?php echo self::THUMB_SIZE; ?>" height="<?php echo self::THUMB_SIZE; ?>" class="thumb" />
- <?php } ?>
- </div>
-
- <div style="clear: both;"></div>
-</div>
-
-<p>
- <a class="button gallery-widget-choose-images"><span class="wp-media-buttons-icon"></span> <?php esc_html_e( 'Choose Images', 'jetpack' ); ?></a>
-</p>
-
-<p class="gallery-widget-link-wrapper">
- <label for="<?php echo $this->get_field_id( 'link' ); ?>"><?php esc_html_e( 'Link To:', 'jetpack' ); ?></label>
- <select name="<?php echo $this->get_field_name( 'link' ); ?>" id="<?php echo $this->get_field_id( 'link' ); ?>" class="widefat">
- <?php foreach ( $allowed_values['link'] as $key => $label ) {
- $selected = '';
-
- if ( $instance['link'] == $key ) {
- $selected = "selected='selected' ";
- } ?>
-
- <option value="<?php echo $key; ?>" <?php echo $selected; ?>><?php echo esc_html( $label, 'jetpack' ); ?></option>
- <?php } ?>
- </select>
-</p>
-
-<p>
- <label for="<?php echo $this->get_field_id( 'random' ); ?>"><?php esc_html_e( 'Random Order:', 'jetpack' ); ?></label>
- <?php $checked = '';
-
- if ( isset( $instance['random'] ) && $instance['random'] )
- $checked = 'checked="checked"';
-
- ?>
- <input name="<?php echo $this->get_field_name( 'random' ); ?>" id="<?php echo $this->get_field_id( 'random' ); ?>" type="checkbox" <?php echo $checked; ?>>
-</p>
-
-<p class="gallery-widget-style-wrapper">
- <label for="<?php echo $this->get_field_id( 'type' ); ?>"><?php esc_html_e( 'Style:', 'jetpack' ); ?></label>
- <select name="<?php echo $this->get_field_name( 'type' ); ?>" id="<?php echo $this->get_field_id( 'type' ); ?>" class="widefat gallery-widget-style">
- <?php foreach ( $allowed_values['type'] as $key => $label ) {
- $selected = '';
-
- if ( $instance['type'] == $key ) {
- $selected = "selected='selected' ";
- } ?>
-
- <option value="<?php echo $key; ?>" <?php echo $selected; ?>><?php echo esc_html( $label, 'jetpack' ); ?></option>
- <?php } ?>
- </select>
-</p>
-
-<?php
-
-
-?>
-
-<?php // Hidden input to hold the selected image ids as a csv list ?>
-<input type="hidden" class="gallery-widget-ids" name="<?php echo $this->get_field_name( 'ids' ); ?>" id="<?php echo $this->get_field_id( 'ids' ); ?>" value="<?php echo esc_attr( $instance['ids'] ); ?>" />
diff --git a/plugins/jetpack/modules/widgets/goodreads.php b/plugins/jetpack/modules/widgets/goodreads.php
deleted file mode 100644
index 4160c868..00000000
--- a/plugins/jetpack/modules/widgets/goodreads.php
+++ /dev/null
@@ -1,157 +0,0 @@
-<?php
-/**
- * Register the widget for use in Appearance -> Widgets
- */
-add_action( 'widgets_init', 'jetpack_goodreads_widget_init' );
-
-function jetpack_goodreads_widget_init() {
- register_widget( 'WPCOM_Widget_Goodreads' );
-}
-
-/**
- * Goodreads widget class
- * Display a user's Goodreads shelf.
- * Customize user_id, title, and shelf
- *
- */
-class WPCOM_Widget_Goodreads extends WP_Widget {
-
- private $goodreads_widget_id = 0;
-
- function __construct() {
- parent::__construct(
- 'wpcom-goodreads',
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', __( 'Goodreads', 'jetpack' ) ),
- array(
- 'classname' => 'widget_goodreads',
- 'description' => __( 'Display your books from Goodreads', 'jetpack' ),
- 'customize_selective_refresh' => true,
- )
- );
- // For user input sanitization and display
- $this->shelves = array(
- 'read' => _x( 'Read', 'past participle: books I have read', 'jetpack' ),
- 'currently-reading' => __( 'Currently Reading', 'jetpack' ),
- 'to-read' => _x( 'To Read', 'my list of books to read', 'jetpack' ),
- );
-
- if ( is_active_widget( '', '', 'wpcom-goodreads' ) || is_customize_preview() ) {
- add_action( 'wp_print_styles', array( $this, 'enqueue_style' ) );
- }
- }
-
- function enqueue_style() {
- wp_enqueue_style( 'goodreads-widget', plugins_url( 'goodreads/css/goodreads.css', __FILE__ ) );
- wp_style_add_data( 'goodreads-widget', 'rtl', 'replace' );
- }
-
- function widget( $args, $instance ) {
- /** This action is documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', 'goodreads' );
-
- /** This filter is documented in core/src/wp-includes/default-widgets.php */
- $title = apply_filters( 'widget_title', isset( $instance['title'] ) ? $instance['title'] : '' );
-
- if ( empty( $instance['user_id'] ) || 'invalid' === $instance['user_id'] ) {
- if ( current_user_can( 'edit_theme_options' ) ) {
- echo $args['before_widget'];
- echo '<p>' . sprintf(
- __( 'You need to enter your numeric user ID for the <a href="%1$s">Goodreads Widget</a> to work correctly. <a href="%2$s" target="_blank">Full instructions</a>.', 'jetpack' ),
- esc_url( admin_url( 'widgets.php' ) ),
- 'https://support.wordpress.com/widgets/goodreads-widget/#goodreads-user-id'
- ) . '</p>';
- echo $args['after_widget'];
- }
- return;
- }
-
- if ( ! array_key_exists( $instance['shelf'], $this->shelves ) ) {
- return;
- }
-
- $instance['user_id'] = absint( $instance['user_id'] );
-
- // Set widget ID based on shelf.
- $this->goodreads_widget_id = $instance['user_id'] . '_' . $instance['shelf'];
-
- if ( empty( $title ) ) {
- $title = esc_html__( 'Goodreads', 'jetpack' );
- }
-
- echo $args['before_widget'];
- echo $args['before_title'] . $title . $args['after_title'];
-
- $goodreads_url = 'https://www.goodreads.com/review/custom_widget/' . urlencode( $instance['user_id'] ) . '.' . urlencode( $instance['title'] ) . ':%20' . urlencode( $instance['shelf'] ) . '?cover_position=&cover_size=small&num_books=5&order=d&shelf=' . urlencode( $instance['shelf'] ) . '&sort=date_added&widget_bg_transparent=&widget_id=' . esc_attr( $this->goodreads_widget_id );
-
- echo '<div class="gr_custom_widget" id="gr_custom_widget_' . esc_attr( $this->goodreads_widget_id ) . '"></div>' . "\n";
- echo '<script src="' . esc_url( $goodreads_url ) . '"></script>' . "\n";
-
- echo $args['after_widget'];
- }
-
- function goodreads_user_id_exists( $user_id ) {
- $url = "https://www.goodreads.com/user/show/$user_id/";
- $response = wp_remote_head(
- $url, array(
- 'httpversion' => '1.1',
- 'timeout' => 3,
- 'redirection' => 2,
- )
- );
- if ( 200 === wp_remote_retrieve_response_code( $response ) ) {
- return true;
- } else {
- return false;
- }
- }
-
- function update( $new_instance, $old_instance ) {
- $instance = $old_instance;
-
- $instance['user_id'] = trim( wp_kses( stripslashes( $new_instance['user_id'] ), array() ) );
- if ( ! empty( $instance['user_id'] ) && ( ! isset( $old_instance['user_id'] ) || $instance['user_id'] !== $old_instance['user_id'] ) ) {
- if ( ! $this->goodreads_user_id_exists( $instance['user_id'] ) ) {
- $instance['user_id'] = 'invalid';
- }
- }
- $instance['title'] = wp_kses( stripslashes( $new_instance['title'] ), array() );
- $shelf = wp_kses( stripslashes( $new_instance['shelf'] ), array() );
- if ( array_key_exists( $shelf, $this->shelves ) ) {
- $instance['shelf'] = $shelf;
- }
-
- return $instance;
- }
-
- function form( $instance ) {
- //Defaults
- $instance = wp_parse_args(
- (array) $instance, array(
- 'user_id' => '',
- 'title' => 'Goodreads',
- 'shelf' => 'read',
- )
- );
-
- echo '<p><label for="' . esc_attr( $this->get_field_id( 'title' ) ) . '">' . esc_html__( 'Title:', 'jetpack' ) . '
- <input class="widefat" id="' . esc_attr( $this->get_field_id( 'title' ) ) . '" name="' . esc_attr( $this->get_field_name( 'title' ) ) . '" type="text" value="' . esc_attr( $instance['title'] ) . '" />
- </label></p>
- <p><label for="' . esc_attr( $this->get_field_id( 'user_id' ) ) . '">';
- printf( __( 'Goodreads numeric user ID <a href="%s" target="_blank">(instructions)</a>:', 'jetpack' ), 'https://en.support.wordpress.com/widgets/goodreads-widget/#goodreads-user-id' );
- if ( 'invalid' === $instance['user_id'] ) {
- printf( '<br /><small class="error">%s</small>&nbsp;', __( 'Invalid User ID, please verify and re-enter your Goodreads numeric user ID.', 'jetpack' ) );
- $instance['user_id'] = '';
- }
- echo '<input class="widefat" id="' . esc_attr( $this->get_field_id( 'user_id' ) ) . '" name="' . esc_attr( $this->get_field_name( 'user_id' ) ) . '" type="text" value="' . esc_attr( $instance['user_id'] ) . '" />
- </label></p>
- <p><label for="' . esc_attr( $this->get_field_id( 'shelf' ) ) . '">' . esc_html__( 'Shelf:', 'jetpack' ) . '
- <select class="widefat" id="' . esc_attr( $this->get_field_id( 'shelf' ) ) . '" name="' . esc_attr( $this->get_field_name( 'shelf' ) ) . '" >';
- foreach ( $this->shelves as $_shelf_value => $_shelf_display ) {
- echo "\t<option value='" . esc_attr( $_shelf_value ) . "'" . selected( $_shelf_value, $instance['shelf'] ) . '>' . $_shelf_display . "</option>\n";
- }
- echo '</select>
- </label></p>
- ';
- }
-}
diff --git a/plugins/jetpack/modules/widgets/goodreads/css/goodreads.css b/plugins/jetpack/modules/widgets/goodreads/css/goodreads.css
deleted file mode 100644
index d329cb7e..00000000
--- a/plugins/jetpack/modules/widgets/goodreads/css/goodreads.css
+++ /dev/null
@@ -1,48 +0,0 @@
-div[class^="gr_custom_container"] {
- /* customize your Goodreads widget container here*/
- border: 1px solid gray;
- border-radius:10px;
- padding: 10px 5px 10px 5px;
- background-color: #FFF;
- color: #000;
-}
-
-div[class^="gr_custom_container"] a {
- color: #000;
-}
-
-h2[class^="gr_custom_header"] {
- /* customize your Goodreads header here*/
- display: none;
-}
-div[class^="gr_custom_each_container"] {
- /* customize each individual book container here */
- width: 100%;
- clear: both;
- margin-bottom: 10px;
- overflow: auto;
- padding-bottom: 4px;
- border-bottom: 1px solid #aaa;
-}
-div[class^="gr_custom_book_container"] {
- /* customize your book covers here */
- float: right;
- overflow: hidden;
- height: 60px;
- margin-left: 4px;
- width: 39px;
-}
-div[class^="gr_custom_author"] {
- /* customize your author names here */
- font-size: 10px;
-}
-div[class^="gr_custom_tags"] {
- /* customize your tags here */
- font-size: 10px;
- color: gray;
-}
-div[class^="gr_custom_review"] {
-}
-div[class^="gr_custom_rating"] {
- display: none;
-}
diff --git a/plugins/jetpack/modules/widgets/goodreads/css/rtl/goodreads-rtl.css b/plugins/jetpack/modules/widgets/goodreads/css/rtl/goodreads-rtl.css
deleted file mode 100644
index ff600c49..00000000
--- a/plugins/jetpack/modules/widgets/goodreads/css/rtl/goodreads-rtl.css
+++ /dev/null
@@ -1,50 +0,0 @@
-/* This file was automatically generated on Nov 19 2013 15:54:57 */
-
-div[class^="gr_custom_container"] {
- /* customize your Goodreads widget container here*/
- border: 1px solid gray;
- border-radius:10px;
- padding: 10px 5px 10px 5px;
- background-color: #FFF;
- color: #000;
-}
-
-div[class^="gr_custom_container"] a {
- color: #000;
-}
-
-h2[class^="gr_custom_header"] {
- /* customize your Goodreads header here*/
- display: none;
-}
-div[class^="gr_custom_each_container"] {
- /* customize each individual book container here */
- width: 100%;
- clear: both;
- margin-bottom: 10px;
- overflow: auto;
- padding-bottom: 4px;
- border-bottom: 1px solid #aaa;
-}
-div[class^="gr_custom_book_container"] {
- /* customize your book covers here */
- float: left;
- overflow: hidden;
- height: 60px;
- margin-right: 4px;
- width: 39px;
-}
-div[class^="gr_custom_author"] {
- /* customize your author names here */
- font-size: 10px;
-}
-div[class^="gr_custom_tags"] {
- /* customize your tags here */
- font-size: 10px;
- color: gray;
-}
-div[class^="gr_custom_review"] {
-}
-div[class^="gr_custom_rating"] {
- display: none;
-}
diff --git a/plugins/jetpack/modules/widgets/google-translate.php b/plugins/jetpack/modules/widgets/google-translate.php
deleted file mode 100644
index 241fb8ed..00000000
--- a/plugins/jetpack/modules/widgets/google-translate.php
+++ /dev/null
@@ -1,203 +0,0 @@
-<?php
-/**
- * Plugin Name: Google Translate Widget for WordPress.com
- * Plugin URI: http://automattic.com
- * Description: Add a widget for automatic translation
- * Author: Artur Piszek
- * Version: 0.1
- * Author URI: http://automattic.com
- * Text Domain: jetpack
- */
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-class Jetpack_Google_Translate_Widget extends WP_Widget {
- static $instance = null;
-
- /**
- * Default widget title.
- *
- * @var string $default_title
- */
- var $default_title;
-
- /**
- * Register widget with WordPress.
- */
- function __construct() {
- parent::__construct(
- 'google_translate_widget',
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', __( 'Google Translate', 'jetpack' ) ),
- array(
- 'description' => __( 'Provide your readers with the option to translate your site into their preferred language.', 'jetpack' ),
- 'customize_selective_refresh' => true,
- )
- );
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
-
- $this->default_title = esc_html__( 'Translate', 'jetpack' );
- }
-
- /**
- * Enqueue frontend JS scripts.
- */
- public function enqueue_scripts() {
- wp_register_script(
- 'google-translate-init',
- Jetpack::get_file_url_for_environment(
- '_inc/build/widgets/google-translate/google-translate.min.js',
- 'modules/widgets/google-translate/google-translate.js'
- )
- );
- wp_register_script( 'google-translate', '//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit', array( 'google-translate-init' ) );
- // Admin bar is also displayed on top of the site which causes google translate bar to hide beneath.
- // Overwrite position of body.admin-bar
- // This is a hack to show google translate bar a bit lower.
- $lowerTranslateBar = '
- .admin-bar {
- position: inherit !important;
- top: auto !important;
- }
- .admin-bar .goog-te-banner-frame {
- top: 32px !important
- }
- @media screen and (max-width: 782px) {
- .admin-bar .goog-te-banner-frame {
- top: 46px !important;
- }
- }
- @media screen and (max-width: 480px) {
- .admin-bar .goog-te-banner-frame {
- position: absolute;
- }
- }
- ';
- wp_add_inline_style( 'admin-bar', $lowerTranslateBar );
- wp_add_inline_style( 'wpcom-admin-bar', $lowerTranslateBar );
- }
-
- /**
- * Display the Widget.
- *
- * @see WP_Widget::widget()
- *
- * @param array $args Display arguments.
- * @param array $instance The settings for the particular instance of the widget.
- */
- public function widget( $args, $instance ) {
- // We never should show more than 1 instance of this.
- if ( null === self::$instance ) {
- $instance = wp_parse_args(
- $instance, array(
- 'title' => $this->default_title,
- )
- );
-
- /**
- * Filter the layout of the Google Translate Widget.
- *
- * 3 different integers are accepted.
- * 0 for the vertical layout.
- * 1 for the horizontal layout.
- * 2 for the dropdown only.
- *
- * @see https://translate.google.com/manager/website/
- *
- * @module widgets
- *
- * @since 5.5.0
- *
- * @param string $layout layout of the Google Translate Widget.
- */
- $button_layout = apply_filters( 'jetpack_google_translate_widget_layout', 0 );
-
- if (
- ! is_int( $button_layout )
- || 0 > $button_layout
- || 2 < $button_layout
- ) {
- $button_layout = 0;
- }
-
- wp_localize_script(
- 'google-translate-init',
- '_wp_google_translate_widget',
- array(
- 'lang' => get_locale(),
- 'layout' => intval( $button_layout ),
- )
- );
- wp_enqueue_script( 'google-translate-init' );
- wp_enqueue_script( 'google-translate' );
-
- $title = $instance['title'];
-
- if ( ! isset( $title ) ) {
- $title = $this->default_title;
- }
-
- /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
- $title = apply_filters( 'widget_title', $title );
-
- echo $args['before_widget'];
- if ( ! empty( $title ) ) {
- echo $args['before_title'] . esc_html( $title ) . $args['after_title'];
- }
- echo '<div id="google_translate_element"></div>';
- echo $args['after_widget'];
- self::$instance = $instance;
- /** This action is documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', 'google-translate' );
- }
- }
-
- /**
- * Widget form in the dashboard.
- *
- * @see WP_Widget::form()
- *
- * @param array $instance Previously saved values from database.
- */
- public function form( $instance ) {
- $title = isset( $instance['title'] ) ? $instance['title'] : false;
- if ( false === $title ) {
- $title = $this->default_title;
- }
- ?>
-<p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_html_e( 'Title:', 'jetpack' ); ?></label>
- <input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
-</p>
- <?php
- }
-
- /**
- * Sanitize widget form values as they are saved.
- *
- * @see WP_Widget::update()
- *
- * @param array $new_instance Values just sent to be saved.
- * @param array $old_instance Previously saved values from database.
- *
- * @return array $instance Updated safe values to be saved.
- */
- public function update( $new_instance, $old_instance ) {
- $instance = array();
- $instance['title'] = wp_kses( $new_instance['title'], array() );
- if ( $instance['title'] === $this->default_title ) {
- $instance['title'] = false; // Store as false in case of language change
- }
- return $instance;
- }
-
-}
-
-/**
- * Register the widget for use in Appearance -> Widgets.
- */
-function jetpack_google_translate_widget_init() {
- register_widget( 'Jetpack_Google_Translate_Widget' );
-}
-add_action( 'widgets_init', 'jetpack_google_translate_widget_init' );
diff --git a/plugins/jetpack/modules/widgets/google-translate/google-translate.js b/plugins/jetpack/modules/widgets/google-translate/google-translate.js
deleted file mode 100644
index 301f13a7..00000000
--- a/plugins/jetpack/modules/widgets/google-translate/google-translate.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/*global google:true*/
-/*global _wp_google_translate_widget:true*/
-/*exported googleTranslateElementInit*/
-function googleTranslateElementInit() {
- var lang = 'en';
- var langParam;
- var langRegex = /[?&#]lang=([a-zA-Z\-_]+)/;
- if ( typeof _wp_google_translate_widget === 'object' && typeof _wp_google_translate_widget.lang === 'string' ) {
- lang = _wp_google_translate_widget.lang;
- }
- langParam = window.location.href.match( langRegex );
- if ( langParam ) {
- window.location.href = window.location.href.replace( langRegex, '' ).replace( /#googtrans\([a-zA-Z\-_|]+\)/, '' ) + '#googtrans(' + lang + '|' + langParam[ 1 ] + ')';
- }
- new google.translate.TranslateElement( {
- pageLanguage: lang,
- layout: _wp_google_translate_widget.layout,
- autoDisplay: false
- }, 'google_translate_element' );
-}
diff --git a/plugins/jetpack/modules/widgets/gravatar-profile.css b/plugins/jetpack/modules/widgets/gravatar-profile.css
deleted file mode 100644
index 5316f6a3..00000000
--- a/plugins/jetpack/modules/widgets/gravatar-profile.css
+++ /dev/null
@@ -1,46 +0,0 @@
-.widget-grofile {
-}
- .widget-grofile h4 {
- margin: 1em 0 .5em;
- }
- .widget-grofile ul.grofile-urls {
- margin-left: 0;
- overflow: hidden;
- }
- .widget-grofile ul.grofile-accounts li {
- list-style: none;
- display: inline;
- }
-
- .widget-grofile ul.grofile-accounts li::before {
- content: "" !important; /* Kubrick :( */
- }
- .widget-grofile .grofile-accounts-logo {
- background-image: url('https://secure.gravatar.com/images/grav-share-sprite.png');
- background-repeat: no-repeat;
- /*background-position: -16px -16px;*/
- width: 16px; /* So we don't show the topmost logo */
- height: 16px; /* So we don't show the topmost logo */
- float: left;
- margin-right: 8px;
- margin-bottom: 8px;
- }
- .rtl .widget-grofile .grofile-accounts-logo {
- margin-left: 8px;
- margin-right: 0;
- }
-
- .grofile-thumbnail {
- width: 500px;
- max-width: 100%;
- }
- @media
-only screen and (-webkit-min-device-pixel-ratio: 1.5),
-only screen and (-o-min-device-pixel-ratio: 3/2),
-only screen and (min--moz-device-pixel-ratio: 1.5),
-only screen and (min-device-pixel-ratio: 1.5) {
- .widget-grofile .grofile-accounts-logo {
- background-image: url('https://secure.gravatar.com/images/grav-share-sprite-2x.png');
- background-size: 16px 784px;
- }
-}
diff --git a/plugins/jetpack/modules/widgets/gravatar-profile.php b/plugins/jetpack/modules/widgets/gravatar-profile.php
deleted file mode 100644
index f5171665..00000000
--- a/plugins/jetpack/modules/widgets/gravatar-profile.php
+++ /dev/null
@@ -1,435 +0,0 @@
-<?php
-
-/**
- * Register the widget for use in Appearance -> Widgets
- */
-add_action( 'widgets_init', 'jetpack_gravatar_profile_widget_init' );
-
-function jetpack_gravatar_profile_widget_init() {
- register_widget( 'Jetpack_Gravatar_Profile_Widget' );
-}
-
-/**
- * Display a widgetized version of your Gravatar Profile
- * http://blog.gravatar.com/2010/03/26/gravatar-profiles/
- */
-class Jetpack_Gravatar_Profile_Widget extends WP_Widget {
-
- function __construct() {
- parent::__construct(
- 'grofile',
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', __( 'Gravatar Profile', 'jetpack' ) ),
- array(
- 'classname' => 'widget-grofile grofile',
- 'description' => __( 'Display a mini version of your Gravatar Profile', 'jetpack' ),
- 'customize_selective_refresh' => true,
- )
- );
-
- if ( is_admin() ) {
- add_action( 'admin_footer-widgets.php', array( $this, 'admin_script' ) );
- }
-
- if ( is_customize_preview() ) {
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
- }
- }
-
- function widget( $args, $instance ) {
- /**
- * Fires when an item is displayed on the front end.
- *
- * Can be used to track stats about the number of displays for a specific item
- *
- * @module widgets, shortcodes
- *
- * @since 1.6.0
- *
- * @param string widget_view Item type (e.g. widget, or embed).
- * @param string grofile Item description (e.g. grofile, goodreads).
- */
- do_action( 'jetpack_stats_extra', 'widget_view', 'grofile' );
-
- $instance = wp_parse_args(
- $instance, array(
- 'title' => '',
- 'email' => '',
- )
- );
-
- /** This filter is documented in core/src/wp-includes/default-widgets.php */
- $title = apply_filters( 'widget_title', $instance['title'] );
-
- if ( ! $instance['email'] ) {
- if ( current_user_can( 'edit_theme_options' ) ) {
- echo $args['before_widget'];
- if ( ! empty( $title ) ) {
- echo $args['before_title'] . $title . $args['after_title'];
- }
- echo '<p>' . sprintf( __( 'You need to select what to show in this <a href="%s">Gravatar Profile widget</a>.', 'jetpack' ), admin_url( 'widgets.php' ) ) . '</p>';
- echo $args['after_widget'];
- }
- return;
- }
-
- echo $args['before_widget'];
- if ( ! empty( $title ) ) {
- echo $args['before_title'] . $title . $args['after_title'];
- }
-
- $profile = $this->get_profile( $instance['email'] );
-
- if ( ! empty( $profile ) ) {
- $profile = wp_parse_args(
- $profile, array(
- 'thumbnailUrl' => '',
- 'profileUrl' => '',
- 'displayName' => '',
- 'aboutMe' => '',
- 'urls' => array(),
- 'accounts' => array(),
- )
- );
- $gravatar_url = add_query_arg( 's', 320, $profile['thumbnailUrl'] ); // the default grav returned by grofiles is super small
-
- // Enqueue front end assets.
- $this->enqueue_scripts();
-
- ?>
- <img src="<?php echo esc_url( $gravatar_url ); ?>" class="grofile-thumbnail no-grav" alt="<?php echo esc_attr( $profile['displayName'] ); ?>" />
- <div class="grofile-meta">
- <h4><a href="<?php echo esc_url( $profile['profileUrl'] ); ?>"><?php echo esc_html( $profile['displayName'] ); ?></a></h4>
- <p><?php echo wp_kses_post( $profile['aboutMe'] ); ?></p>
- </div>
-
- <?php
-
- if ( $instance['show_personal_links'] ) {
- $this->display_personal_links( (array) $profile['urls'] );
- }
-
- if ( $instance['show_account_links'] ) {
- $this->display_accounts( (array) $profile['accounts'] );
- }
-
- ?>
-
- <p><a href="<?php echo esc_url( $profile['profileUrl'] ); ?>" class="grofile-full-link">
- <?php
- echo esc_html(
- /**
- * Filter the Gravatar Profile widget's profile link title.
- *
- * @module widgets
- *
- * @since 2.8.0
- *
- * @param string $str Profile link title.
- */
- apply_filters(
- 'jetpack_gravatar_full_profile_title',
- __( 'View Full Profile &rarr;', 'jetpack' )
- )
- );
- ?>
- </a></p>
-
- <?php
- } else {
- if ( current_user_can( 'edit_theme_options' ) ) {
- echo '<p>' . esc_html__( 'Error loading profile', 'jetpack' ) . '</p>';
- }
- }
-
- echo $args['after_widget'];
- }
-
- function display_personal_links( $personal_links = array() ) {
- if ( empty( $personal_links ) ) {
- return;
- }
- ?>
-
- <h4>
- <?php
- echo esc_html(
- apply_filters(
- /**
- * Filter the Gravatar Profile widget's "Personal Links" section title.
- *
- * @module widgets
- *
- * @since 2.8.0
- *
- * @param string $str "Personal Links" section title.
- */
- 'jetpack_gravatar_personal_links_title',
- __( 'Personal Links', 'jetpack' )
- )
- );
- ?>
- </h4>
- <ul class="grofile-urls grofile-links">
-
- <?php foreach ( $personal_links as $personal_link ) : ?>
- <li>
- <a href="<?php echo esc_url( $personal_link['value'] ); ?>">
- <?php
- $link_title = ( ! empty( $personal_link['title'] ) ) ? $personal_link['title'] : $personal_link['value'];
- echo esc_html( $link_title );
- ?>
- </a>
- </li>
- <?php endforeach; ?>
- </ul>
-
- <?php
- }
-
- function display_accounts( $accounts = array() ) {
- if ( empty( $accounts ) ) {
- return;
- }
- ?>
-
- <h4>
- <?php
- echo esc_html(
- /**
- * Filter the Gravatar Profile widget's "Verified Services" section title.
- *
- * @module widgets
- *
- * @since 2.8.0
- *
- * @param string $str "Verified Services" section title.
- */
- apply_filters(
- 'jetpack_gravatar_verified_services_title',
- __( 'Verified Services', 'jetpack' )
- )
- );
- ?>
- </h4>
- <ul class="grofile-urls grofile-accounts">
-
- <?php
- foreach ( $accounts as $account ) :
- if ( $account['verified'] != 'true' ) {
- continue;
- }
-
- $sanitized_service_name = $this->get_sanitized_service_name( $account['shortname'] );
- ?>
-
- <li>
- <a href="<?php echo esc_url( $account['url'] ); ?>" title="<?php echo sprintf( _x( '%1$s on %2$s', '1: User Name, 2: Service Name (Facebook, Twitter, ...)', 'jetpack' ), esc_html( $account['display'] ), esc_html( $sanitized_service_name ) ); ?>">
- <span class="grofile-accounts-logo grofile-accounts-<?php echo esc_attr( $account['shortname'] ); ?> accounts_<?php echo esc_attr( $account['shortname'] ); ?>"></span>
- </a>
- </li>
-
- <?php endforeach; ?>
- </ul>
-
- <?php
- }
-
- /**
- * Enqueue CSS and JavaScript.
- *
- * @since 4.0.0
- */
- function enqueue_scripts() {
- wp_enqueue_style(
- 'gravatar-profile-widget',
- plugins_url( 'gravatar-profile.css', __FILE__ ),
- array(),
- '20120711'
- );
-
- wp_enqueue_style(
- 'gravatar-card-services',
- 'https://secure.gravatar.com/css/services.css',
- array(),
- defined( 'GROFILES__CACHE_BUSTER' ) ? GROFILES__CACHE_BUSTER : gmdate( 'YW' )
- );
- }
-
- function form( $instance ) {
- $title = isset( $instance['title'] ) ? $instance['title'] : '';
- $email = isset( $instance['email'] ) ? $instance['email'] : '';
- $email_user = isset( $instance['email_user'] ) ? $instance['email_user'] : get_current_user_id();
- $show_personal_links = isset( $instance['show_personal_links'] ) ? (bool) $instance['show_personal_links'] : '';
- $show_account_links = isset( $instance['show_account_links'] ) ? (bool) $instance['show_account_links'] : '';
- $profile_url = 'https://gravatar.com/profile/edit';
-
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $profile_url = admin_url( 'profile.php' );
-
- if ( isset( $_REQUEST['calypso'] ) ) {
- $profile_url = 'https://wordpress.com/me';
- }
- }
- ?>
- <p>
- <label for="<?php echo $this->get_field_id( 'title' ); ?>">
- <?php esc_html_e( 'Title', 'jetpack' ); ?> <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
- </label>
- </p>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'email_user' ); ?>">
- <?php esc_html_e( 'Select a user or pick "custom" and enter a custom email address.', 'jetpack' ); ?>
- <br />
-
- <?php
- wp_dropdown_users(
- array(
- 'show_option_none' => __( 'Custom', 'jetpack' ),
- 'selected' => $email_user,
- 'name' => $this->get_field_name( 'email_user' ),
- 'id' => $this->get_field_id( 'email_user' ),
- 'class' => 'gravatar-profile-user-select',
- )
- );
- ?>
- </label>
- </p>
-
- <p class="gprofile-email-container <?php echo empty( $email_user ) || $email_user == -1 ? '' : 'hidden'; ?>">
- <label for="<?php echo $this->get_field_id( 'email' ); ?>"><?php esc_html_e( 'Custom Email Address', 'jetpack' ); ?>
- <input class="widefat" id="<?php echo $this->get_field_id( 'email' ); ?>" name="<?php echo $this->get_field_name( 'email' ); ?>" type="text" value="<?php echo esc_attr( $email ); ?>" />
- </label>
- </p>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'show_personal_links' ); ?>">
- <input type="checkbox" name="<?php echo $this->get_field_name( 'show_personal_links' ); ?>" id="<?php echo $this->get_field_id( 'show_personal_links' ); ?>" <?php checked( $show_personal_links ); ?> />
- <?php esc_html_e( 'Show Personal Links', 'jetpack' ); ?>
- <br />
- <small><?php esc_html_e( 'Links to your websites, blogs, or any other sites that help describe who you are.', 'jetpack' ); ?></small>
- </label>
- </p>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'show_account_links' ); ?>">
- <input type="checkbox" name="<?php echo $this->get_field_name( 'show_account_links' ); ?>" id="<?php echo $this->get_field_id( 'show_account_links' ); ?>" <?php checked( $show_account_links ); ?> />
- <?php esc_html_e( 'Show Account Links', 'jetpack' ); ?>
- <br />
- <small><?php esc_html_e( 'Links to services that you use across the web.', 'jetpack' ); ?></small>
- </label>
- </p>
-
- <p><a href="<?php echo esc_url( $profile_url ); ?>" target="_blank" title="<?php esc_attr_e( 'Opens in new window', 'jetpack' ); ?>"><?php esc_html_e( 'Edit Your Profile', 'jetpack' ); ?></a> | <a href="https://gravatar.com" target="_blank" title="<?php esc_attr_e( 'Opens in new window', 'jetpack' ); ?>"><?php esc_html_e( "What's a Gravatar?", 'jetpack' ); ?></a></p>
-
- <?php
- }
-
- function admin_script() {
- ?>
- <script>
- jQuery( function( $ ) {
- $( '.wrap' ).on( 'change', '.gravatar-profile-user-select', function() {
- var $input = $(this).closest('.widget-inside').find('.gprofile-email-container');
- if ( '-1' === this.value.toLowerCase() ) {
- $input.show();
- } else {
- $input.hide();
- }
- });
- } );
- </script>
- <?php
- }
-
- function update( $new_instance, $old_instance ) {
-
- $instance = array();
-
- $instance['title'] = isset( $new_instance['title'] ) ? wp_kses( $new_instance['title'], array() ) : '';
- $instance['email'] = isset( $new_instance['email'] ) ? wp_kses( $new_instance['email'], array() ) : '';
- $instance['email_user'] = isset( $new_instance['email_user'] ) ? intval( $new_instance['email_user'] ) : -1;
- $instance['show_personal_links'] = isset( $new_instance['show_personal_links'] ) ? (bool) $new_instance['show_personal_links'] : false;
- $instance['show_account_links'] = isset( $new_instance['show_account_links'] ) ? (bool) $new_instance['show_account_links'] : false;
-
- if ( $instance['email_user'] > 0 ) {
- $user = get_userdata( $instance['email_user'] );
- $instance['email'] = $user->user_email;
- }
-
- $hashed_email = md5( strtolower( trim( $instance['email'] ) ) );
- $cache_key = 'grofile-' . $hashed_email;
- delete_transient( $cache_key );
-
- return $instance;
- }
-
- private function get_profile( $email ) {
- $hashed_email = md5( strtolower( trim( $email ) ) );
- $cache_key = 'grofile-' . $hashed_email;
-
- if ( ! $profile = get_transient( $cache_key ) ) {
- $profile_url = sprintf(
- 'https://secure.gravatar.com/%s.json',
- $hashed_email
- );
-
- $expire = 300;
- $response = wp_remote_get(
- esc_url_raw( $profile_url ),
- array( 'User-Agent' => 'WordPress.com Gravatar Profile Widget' )
- );
- $response_code = wp_remote_retrieve_response_code( $response );
- if ( 200 == $response_code ) {
- $profile = wp_remote_retrieve_body( $response );
- $profile = json_decode( $profile, true );
-
- if ( is_array( $profile ) && ! empty( $profile['entry'] ) && is_array( $profile['entry'] ) ) {
- $expire = 900; // cache for 15 minutes
- $profile = $profile['entry'][0];
- } else {
- // Something strange happened. Cache for 5 minutes.
- $profile = array();
- }
- } else {
- $expire = 900; // cache for 15 minutes
- $profile = array();
- }
-
- set_transient( $cache_key, $profile, $expire );
- }
- return $profile;
- }
-
- private function get_sanitized_service_name( $shortname ) {
- // Some services have stylized or mixed cap names *cough* WP *cough*
- switch ( $shortname ) {
- case 'friendfeed':
- return 'FriendFeed';
- case 'linkedin':
- return 'LinkedIn';
- case 'yahoo':
- return 'Yahoo!';
- case 'youtube':
- return 'YouTube';
- // phpcs:ignore WordPress.WP.CapitalPDangit
- case 'wordpress':
- return 'WordPress';
- case 'tripit':
- return 'TripIt';
- case 'myspace':
- return 'MySpace';
- case 'foursquare':
- return 'foursquare';
- case 'google':
- return 'Google+';
- default:
- // Others don't
- $shortname = ucwords( $shortname );
- }
- return $shortname;
- }
-}
-
-// END
diff --git a/plugins/jetpack/modules/widgets/image-widget.php b/plugins/jetpack/modules/widgets/image-widget.php
deleted file mode 100644
index 37a353c1..00000000
--- a/plugins/jetpack/modules/widgets/image-widget.php
+++ /dev/null
@@ -1,274 +0,0 @@
-<?php
-/**
- * Module Name: Image Widget
- * Module Description: Easily add images to your theme's sidebar.
- * Sort Order: 20
- * First Introduced: 1.2
- */
-
-/**
-* Register the widget for use in Appearance -> Widgets
-*/
-add_action( 'widgets_init', 'jetpack_image_widget_init', 11 );
-function jetpack_image_widget_init() {
- if ( class_exists( 'WP_Widget_Media_Image' ) && Jetpack_Options::get_option( 'image_widget_migration' ) ) {
- return;
- }
- register_widget( 'Jetpack_Image_Widget' );
-}
-
-class Jetpack_Image_Widget extends WP_Widget {
- /**
- * Register widget with WordPress.
- */
- public function __construct() {
- parent::__construct(
- 'image',
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', esc_html__( 'Image', 'jetpack' ) ),
- array(
- 'classname' => 'widget_image',
- 'description' => __( 'Display an image in your sidebar', 'jetpack' ),
- 'customize_selective_refresh' => true,
- )
- );
-
- if ( is_active_widget( false, false, $this->id_base ) || is_active_widget( false, false, 'monster' ) || is_customize_preview() ) {
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ) );
- }
- }
-
- /**
- * Loads file for front-end widget style.
- *
- * @uses wp_enqueue_style(), plugins_url()
- */
- public function enqueue_style() {
- wp_enqueue_style( 'jetpack_image_widget', plugins_url( 'image-widget/style.css', __FILE__ ), array(), '20140808' );
- }
-
- /**
- * Front-end display of widget.
- *
- * @see WP_Widget::widget()
- *
- * @param array $args Widget arguments.
- * @param array $instance Saved values from database.
- */
- public function widget( $args, $instance ) {
- echo $args['before_widget'];
-
- $instance = wp_parse_args(
- $instance, array(
- 'title' => '',
- 'img_url' => '',
- )
- );
-
- /** This filter is documented in core/src/wp-includes/default-widgets.php */
- $title = apply_filters( 'widget_title', $instance['title'] );
-
- if ( $title ) {
- echo $args['before_title'] . esc_html( $title ) . $args['after_title'];
- }
-
- if ( '' != $instance['img_url'] ) {
-
- $output = '<img src="' . esc_url( $instance['img_url'] ) . '" ';
-
- if ( '' != $instance['alt_text'] ) {
- $output .= 'alt="' . esc_attr( $instance['alt_text'] ) . '" ';
- }
- if ( '' != $instance['img_title'] ) {
- $output .= 'title="' . esc_attr( $instance['img_title'] ) . '" ';
- }
- if ( '' == $instance['caption'] ) {
- $output .= 'class="align' . esc_attr( $instance['align'] ) . '" ';
- }
- if ( '' != $instance['img_width'] ) {
- $output .= 'width="' . esc_attr( $instance['img_width'] ) . '" ';
- }
- if ( '' != $instance['img_height'] ) {
- $output .= 'height="' . esc_attr( $instance['img_height'] ) . '" ';
- }
- $output .= '/>';
-
- if ( class_exists( 'Jetpack_Photon' ) && Jetpack::is_module_active( 'photon' ) ) {
- $output = Jetpack_Photon::filter_the_content( $output );
- }
-
- if ( '' != $instance['link'] ) {
- $target = ! empty( $instance['link_target_blank'] )
- ? 'target="_blank"'
- : '';
- $output = '<a ' . $target . ' href="' . esc_url( $instance['link'] ) . '">' . $output . '</a>';
- }
- if ( '' != $instance['caption'] ) {
- /** This filter is documented in core/src/wp-includes/default-widgets.php */
- $caption = apply_filters( 'widget_text', $instance['caption'] );
- $img_width = ( ! empty( $instance['img_width'] ) ? 'style="width: ' . esc_attr( $instance['img_width'] ) . 'px"' : '' );
- $output = '<figure ' . $img_width . ' class="wp-caption align' . esc_attr( $instance['align'] ) . '">
- ' . $output . '
- <figcaption class="wp-caption-text">' . $caption . '</figcaption>
- </figure>'; // wp_kses_post caption on update
- }
- echo '<div class="jetpack-image-container">' . do_shortcode( $output ) . '</div>';
- } else {
- if ( current_user_can( 'edit_theme_options' ) ) {
- echo '<p>' . sprintf( __( 'Image missing or invalid URL. Please check the Image widget URL in your <a href="%s">widget settings</a>.', 'jetpack' ), admin_url( 'widgets.php' ) ) . '</p>';
- }
- }
-
- echo "\n" . $args['after_widget'];
-
- /** This action is documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', 'image' );
- }
-
- /**
- * Sanitize widget form values as they are saved.
- *
- * @see WP_Widget::update()
- *
- * @param array $new_instance Values just sent to be saved.
- * @param array $old_instance Previously saved values from database.
- *
- * @return array Updated safe values to be saved.
- */
- public function update( $new_instance, $old_instance ) {
- $allowed_caption_html = array(
- 'a' => array(
- 'href' => array(),
- 'title' => array(),
- ),
- 'b' => array(),
- 'em' => array(),
- 'i' => array(),
- 'p' => array(),
- 'strong' => array(),
- );
-
- $instance = $old_instance;
-
- $instance['title'] = strip_tags( $new_instance['title'] );
- $instance['img_url'] = esc_url( trim( $new_instance['img_url'] ) );
- $instance['alt_text'] = strip_tags( $new_instance['alt_text'] );
- $instance['img_title'] = strip_tags( $new_instance['img_title'] );
- $instance['caption'] = wp_kses( stripslashes( $new_instance['caption'] ), $allowed_caption_html );
- $instance['align'] = $new_instance['align'];
- $instance['link'] = esc_url( trim( $new_instance['link'] ) );
- $instance['link_target_blank'] = isset( $new_instance['link_target_blank'] ) ? (bool) $new_instance['link_target_blank'] : false;
-
- $new_img_width = absint( $new_instance['img_width'] );
- $new_img_height = absint( $new_instance['img_height'] );
-
- if ( ! empty( $instance['img_url'] ) && '' == $new_img_width && '' == $new_img_height ) {
- // Download the url to a local temp file and then process it with getimagesize so we can optimize browser layout
- $tmp_file = download_url( $instance['img_url'], 10 );
- if ( ! is_wp_error( $tmp_file ) ) {
- $size = getimagesize( $tmp_file );
-
- $width = $size[0];
- $instance['img_width'] = absint( $width );
-
- $height = $size[1];
- $instance['img_height'] = absint( $height );
-
- unlink( $tmp_file );
- } else {
- $instance['img_width'] = $new_img_width;
- $instance['img_height'] = $new_img_height;
- }
- } else {
- $instance['img_width'] = $new_img_width;
- $instance['img_height'] = $new_img_height;
- }
-
- return $instance;
- }
-
- /**
- * Back end widget form.
- *
- * @see WP_Widget::form()
- *
- * @param array $instance Previously saved values from database.
- */
- public function form( $instance ) {
- // Defaults
- $instance = wp_parse_args(
- (array) $instance, array(
- 'title' => '',
- 'img_url' => '',
- 'alt_text' => '',
- 'img_title' => '',
- 'caption' => '',
- 'align' => 'none',
- 'img_width' => '',
- 'img_height' => '',
- 'link' => '',
- 'link_target_blank' => false,
- )
- );
-
- $title = esc_attr( $instance['title'] );
- $img_url = esc_url( $instance['img_url'], null, 'display' );
- $alt_text = esc_attr( $instance['alt_text'] );
- $img_title = esc_attr( $instance['img_title'] );
- $caption = esc_textarea( $instance['caption'] );
- $align = esc_attr( $instance['align'] );
- $img_width = esc_attr( $instance['img_width'] );
- $img_height = esc_attr( $instance['img_height'] );
- $link_target_blank = checked( $instance['link_target_blank'], true, false );
-
- $link = esc_url( $instance['link'], null, 'display' );
-
- echo '<p><label for="' . $this->get_field_id( 'title' ) . '">' . esc_html__( 'Widget title:', 'jetpack' ) . '
- <input class="widefat" id="' . $this->get_field_id( 'title' ) . '" name="' . $this->get_field_name( 'title' ) . '" type="text" value="' . $title . '" />
- </label></p>
- <p><label for="' . $this->get_field_id( 'img_url' ) . '">' . esc_html__( 'Image URL:', 'jetpack' ) . '
- <input class="widefat" id="' . $this->get_field_id( 'img_url' ) . '" name="' . $this->get_field_name( 'img_url' ) . '" type="text" value="' . $img_url . '" />
- </label></p>
- <p><label for="' . $this->get_field_id( 'alt_text' ) . '">' . esc_html__( 'Alternate text:', 'jetpack' ) . ' <a href="http://support.wordpress.com/widgets/image-widget/#image-widget-alt-text" target="_blank">( ? )</a>
- <input class="widefat" id="' . $this->get_field_id( 'alt_text' ) . '" name="' . $this->get_field_name( 'alt_text' ) . '" type="text" value="' . $alt_text . '" />
- </label></p>
- <p><label for="' . $this->get_field_id( 'img_title' ) . '">' . esc_html__( 'Image title:', 'jetpack' ) . ' <a href="http://support.wordpress.com/widgets/image-widget/#image-widget-title" target="_blank">( ? )</a>
- <input class="widefat" id="' . $this->get_field_id( 'img_title' ) . '" name="' . $this->get_field_name( 'img_title' ) . '" type="text" value="' . $img_title . '" />
- </label></p>
- <p><label for="' . $this->get_field_id( 'caption' ) . '">' . esc_html__( 'Caption:', 'jetpack' ) . ' <a href="http://support.wordpress.com/widgets/image-widget/#image-widget-caption" target="_blank">( ? )</a>
- <textarea class="widefat" id="' . $this->get_field_id( 'caption' ) . '" name="' . $this->get_field_name( 'caption' ) . '" rows="2" cols="20">' . $caption . '</textarea>
- </label></p>';
-
- $alignments = array(
- 'none' => __( 'None', 'jetpack' ),
- 'left' => __( 'Left', 'jetpack' ),
- 'center' => __( 'Center', 'jetpack' ),
- 'right' => __( 'Right', 'jetpack' ),
- );
- echo '<p><label for="' . $this->get_field_id( 'align' ) . '">' . esc_html__( 'Image Alignment:', 'jetpack' ) . '
- <select id="' . $this->get_field_id( 'align' ) . '" name="' . $this->get_field_name( 'align' ) . '">';
- foreach ( $alignments as $alignment => $alignment_name ) {
- echo '<option value="' . esc_attr( $alignment ) . '" ';
- if ( $alignment == $align ) {
- echo 'selected="selected" ';
- }
- echo '>' . esc_html( $alignment_name ) . "</option>\n";
- }
- echo '</select></label></p>';
-
- echo '<p><label for="' . $this->get_field_id( 'img_width' ) . '">' . esc_html__( 'Width in pixels:', 'jetpack' ) . '
- <input size="3" id="' . $this->get_field_id( 'img_width' ) . '" name="' . $this->get_field_name( 'img_width' ) . '" type="text" value="' . $img_width . '" />
- </label>
- <label for="' . $this->get_field_id( 'img_height' ) . '">' . esc_html__( 'Height in pixels:', 'jetpack' ) . '
- <input size="3" id="' . $this->get_field_id( 'img_height' ) . '" name="' . $this->get_field_name( 'img_height' ) . '" type="text" value="' . $img_height . '" />
- </label><br />
- <small>' . esc_html__( 'If empty, we will attempt to determine the image size.', 'jetpack' ) . '</small></p>
- <p><label for="' . $this->get_field_id( 'link' ) . '">' . esc_html__( 'Link URL (when the image is clicked):', 'jetpack' ) . '
- <input class="widefat" id="' . $this->get_field_id( 'link' ) . '" name="' . $this->get_field_name( 'link' ) . '" type="text" value="' . $link . '" />
- </label>
- <label for="' . $this->get_field_id( 'link_target_blank' ) . '">
- <input type="checkbox" name="' . $this->get_field_name( 'link_target_blank' ) . '" id="' . $this->get_field_id( 'link_target_blank' ) . '" value="1"' . $link_target_blank . '/>
- ' . esc_html__( 'Open link in a new window/tab', 'jetpack' ) . '
- </label></p>';
- }
-} // Class Jetpack_Image_Widget
diff --git a/plugins/jetpack/modules/widgets/image-widget/style.css b/plugins/jetpack/modules/widgets/image-widget/style.css
deleted file mode 100644
index ae650f2a..00000000
--- a/plugins/jetpack/modules/widgets/image-widget/style.css
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- * Image Widget styles for Jetpack
- */
-
-/* Clear floats */
-.jetpack-image-container:after {
- clear: both;
-}
-.jetpack-image-container:before,
-.jetpack-image-container:after {
- display: table;
- content: "";
-}
diff --git a/plugins/jetpack/modules/widgets/internet-defense-league.php b/plugins/jetpack/modules/widgets/internet-defense-league.php
deleted file mode 100644
index 9a69d1ab..00000000
--- a/plugins/jetpack/modules/widgets/internet-defense-league.php
+++ /dev/null
@@ -1,153 +0,0 @@
-<?php
-
-class Jetpack_Internet_Defense_League_Widget extends WP_Widget {
-
- public $defaults = array();
-
- public $variant;
- public $variants = array();
-
- public $campaign;
- public $campaigns = array();
- public $no_current = true;
-
- public $badge;
- public $badges = array();
-
- function __construct() {
- parent::__construct(
- 'internet_defense_league_widget',
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', esc_html__( 'Internet Defense League', 'jetpack' ) ),
- array(
- 'description' => esc_html__( 'Show your support for the Internet Defense League.', 'jetpack' ),
- 'customize_selective_refresh' => true,
- )
- );
-
- // When enabling campaigns other than 'none' or empty, change $no_current to false above.
- $this->campaigns = array(
- '' => esc_html__( 'All current and future campaigns', 'jetpack' ),
- 'none' => esc_html__( 'None, just display the badge please', 'jetpack' ),
- );
-
- $this->variants = array(
- 'banner' => esc_html__( 'Banner at the top of my site', 'jetpack' ),
- 'modal' => esc_html__( 'Modal (Overlay Box)', 'jetpack' ),
- );
-
- $this->badges = array(
- 'shield_badge' => esc_html__( 'Shield Badge', 'jetpack' ),
- 'super_badge' => esc_html__( 'Super Badge', 'jetpack' ),
- 'side_bar_badge' => esc_html__( 'Red Cat Badge', 'jetpack' ),
- );
-
- if ( $this->no_current === false ) {
- $this->badges['none'] = esc_html__( 'Don\'t display a badge (just the campaign)', 'jetpack' );
- }
-
- $this->defaults = array(
- 'campaign' => key( $this->campaigns ),
- 'variant' => key( $this->variants ),
- 'badge' => key( $this->badges ),
- );
- }
-
- public function widget( $args, $instance ) {
- $instance = wp_parse_args( $instance, $this->defaults );
-
- if ( 'none' != $instance['badge'] ) {
- if ( ! isset( $this->badges[ $instance['badge'] ] ) ) {
- $instance['badge'] = $this->defaults['badge'];
- }
- $badge_url = esc_url( 'https://internetdefenseleague.org/images/badges/final/' . $instance['badge'] . '.png' );
- $photon_badge_url = jetpack_photon_url( $badge_url );
- $alt_text = esc_html__( 'Member of The Internet Defense League', 'jetpack' );
- echo $args['before_widget'];
- echo '<p><a href="https://internetdefenseleague.org/"><img src="' . $photon_badge_url . '" alt="' . $alt_text . '" style="max-width: 100%; height: auto;" /></a></p>';
- echo $args['after_widget'];
- }
-
- if ( 'none' != $instance['campaign'] ) {
- $this->campaign = $instance['campaign'];
- $this->variant = $instance['variant'];
- add_action( 'wp_footer', array( $this, 'footer_script' ) );
- }
-
- /** This action is already documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', 'internet_defense_league' );
- }
-
- public function footer_script() {
- if ( ! isset( $this->campaigns[ $this->campaign ] ) ) {
- $this->campaign = $this->defaults['campaign'];
- }
-
- if ( ! isset( $this->variants[ $this->variant ] ) ) {
- $this->variant = $this->defaults['variant'];
- }
- ?>
- <script type="text/javascript">
- window._idl = {};
- _idl.campaign = "<?php echo esc_js( $this->campaign ); ?>";
- _idl.variant = "<?php echo esc_js( $this->variant ); ?>";
- (function() {
- var idl = document.createElement('script');
- idl.type = 'text/javascript';
- idl.async = true;
- idl.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'members.internetdefenseleague.org/include/?url=' + (_idl.url || '') + '&campaign=' + (_idl.campaign || '') + '&variant=' + (_idl.variant || 'banner');
- document.getElementsByTagName('body')[0].appendChild(idl);
- })();
- </script>
- <?php
- }
-
- public function form( $instance ) {
- $instance = wp_parse_args( $instance, $this->defaults );
-
- // Hide first two form fields if no current campaigns.
- if ( false === $this->no_current ) {
- echo '<p><label>';
- echo esc_html__( 'Which Internet Defense League campaign do you want to participate in?', 'jetpack' ) . '<br />';
- $this->select( 'campaign', $this->campaigns, $instance['campaign'] );
- echo '</label></p>';
-
- echo '<p><label>';
- echo esc_html__( 'How do you want to promote the campaign?', 'jetpack' ) . '<br />';
- $this->select( 'variant', $this->variants, $instance['variant'] );
- echo '</label></p>';
- }
-
- echo '<p><label>';
- echo esc_html__( 'Which badge would you like to display?', 'jetpack' ) . '<br />';
- $this->select( 'badge', $this->badges, $instance['badge'] );
- echo '</label></p>';
-
- /* translators: %s is a name of an internet campaign called the "Internet Defense League" */
- echo '<p>' . sprintf( _x( 'Learn more about the %s', 'the Internet Defense League', 'jetpack' ), '<a href="https://www.internetdefenseleague.org/">Internet Defense League</a>' ) . '</p>';
- }
-
- public function select( $field_name, $options, $default = null ) {
- echo '<select class="widefat" name="' . $this->get_field_name( $field_name ) . '">';
- foreach ( $options as $option_slug => $option_name ) {
- echo '<option value="' . esc_attr( $option_slug ) . '"' . selected( $option_slug, $default, false ) . '>' . esc_html( $option_name ) . '</option>';
- }
- echo '</select>';
- }
-
- public function update( $new_instance, $old_instance ) {
- $instance = array();
-
- $instance['campaign'] = ( isset( $new_instance['campaign'] ) && isset( $this->campaigns[ $new_instance['campaign'] ] ) ) ? $new_instance['campaign'] : $this->defaults['campaign'];
- $instance['variant'] = ( isset( $new_instance['variant'] ) && isset( $this->variants[ $new_instance['variant'] ] ) ) ? $new_instance['variant'] : $this->defaults['variant'];
- $instance['badge'] = ( isset( $new_instance['badge'] ) && isset( $this->badges[ $new_instance['badge'] ] ) ) ? $new_instance['badge'] : $this->defaults['badge'];
-
- return $instance;
- }
-}
-
-function jetpack_internet_defense_league_init() {
- register_widget( 'Jetpack_Internet_Defense_League_Widget' );
-}
-
-add_action( 'widgets_init', 'jetpack_internet_defense_league_init' );
diff --git a/plugins/jetpack/modules/widgets/mailchimp.php b/plugins/jetpack/modules/widgets/mailchimp.php
deleted file mode 100644
index a2aff1ba..00000000
--- a/plugins/jetpack/modules/widgets/mailchimp.php
+++ /dev/null
@@ -1,103 +0,0 @@
-<?php
-
-if ( ! class_exists( 'Jetpack_MailChimp_Subscriber_Popup_Widget' ) ) {
-
- if ( ! class_exists( 'MailChimp_Subscriber_Popup' ) ) {
- include_once JETPACK__PLUGIN_DIR . 'modules/shortcodes/mailchimp.php';
- }
-
- //register MailChimp Subscriber Popup widget
- function jetpack_mailchimp_subscriber_popup_widget_init() {
- register_widget( 'Jetpack_MailChimp_Subscriber_Popup_Widget' );
- }
-
- add_action( 'widgets_init', 'jetpack_mailchimp_subscriber_popup_widget_init' );
-
- /**
- * Add a MailChimp subscription form.
- */
- class Jetpack_MailChimp_Subscriber_Popup_Widget extends WP_Widget {
-
- /**
- * Constructor
- */
- function __construct() {
- parent::__construct(
- 'widget_mailchimp_subscriber_popup',
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', __( 'MailChimp Subscriber Popup', 'jetpack' ) ),
- array(
- 'classname' => 'widget_mailchimp_subscriber_popup',
- 'description' => __( 'Allows displaying a popup subscription form to visitors.', 'jetpack' ),
- 'customize_selective_refresh' => true,
- )
- );
- }
-
- /**
- * Outputs the HTML for this widget.
- *
- * @param array $args An array of standard parameters for widgets in this theme
- * @param array $instance An array of settings for this widget instance
- *
- * @return void Echoes it's output
- **/
- function widget( $args, $instance ) {
- $instance = wp_parse_args( $instance, array( 'code' => '' ) );
-
- // Regular expresion that will match maichimp shortcode.
- $regex = '(\[mailchimp_subscriber_popup[^\]]+\])';
-
- // Check if the shortcode exists.
- preg_match( $regex, $instance['code'], $matches );
-
- // Process the shortcode only, if exists.
- if ( ! empty( $matches[0] ) ) {
- echo do_shortcode( $matches[0] );
- }
-
- /** This action is documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', 'mailchimp_subscriber_popup' );
- }
-
-
- /**
- * Deals with the settings when they are saved by the admin.
- *
- * @param array $new_instance New configuration values
- * @param array $old_instance Old configuration values
- *
- * @return array
- */
- function update( $new_instance, $old_instance ) {
- $instance = array();
- $instance['code'] = MailChimp_Subscriber_Popup::reversal( $new_instance['code'] );
-
- return $instance;
- }
-
-
- /**
- * Displays the form for this widget on the Widgets page of the WP Admin area.
- *
- * @param array $instance Instance configuration.
- *
- * @return void
- */
- function form( $instance ) {
- $instance = wp_parse_args( $instance, array( 'code' => '' ) );
- ?>
-
- <p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'code' ) ); ?>">
- <?php printf( __( 'Code: <a href="%s" target="_blank">( ? )</a>', 'jetpack' ), 'https://en.support.wordpress.com/mailchimp/' ); ?>
- </label>
- <textarea class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'code' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'code' ) ); ?>" rows="3"><?php echo esc_textarea( $instance['code'] ); ?></textarea>
- </p>
-
- <?php
- }
-
- }
-
-}
diff --git a/plugins/jetpack/modules/widgets/migrate-to-core/gallery-widget.php b/plugins/jetpack/modules/widgets/migrate-to-core/gallery-widget.php
deleted file mode 100644
index 8cf2900f..00000000
--- a/plugins/jetpack/modules/widgets/migrate-to-core/gallery-widget.php
+++ /dev/null
@@ -1,198 +0,0 @@
-<?php
-/**
- * Migration from Jetpack's Gallery Widget to WordPress' Core Gallery Widget.
- *
- * @since 5.5
- *
- * @package Jetpack
- */
-/**
- * Migrates all active instances of Jetpack's Gallery widget to Core's Media Gallery widget.
- */
-function jetpack_migrate_gallery_widget() {
- // Only trigger the migration from wp-admin and outside unit tests
- if ( ! is_admin() || defined( 'PHPUNIT_JETPACK_TESTSUITE' ) ) {
- return;
- }
-
- // Only migrate if the new widget is available and we haven't yet migrated
- if ( ! class_exists( 'WP_Widget_Media_Gallery' ) || Jetpack_Options::get_option( 'gallery_widget_migration' ) ) {
- return;
- }
-
- $old_widgets = get_option( 'widget_gallery', array() );
- $media_gallery = get_option( 'widget_media_gallery', array() );
- $sidebars_widgets = wp_get_sidebars_widgets();
-
- // Array to store legacy widget ids in to unregister on success.
- $widgets_to_unregister = array();
-
- $old_widgets = array_filter( $old_widgets, 'jetpack_migrate_gallery_widget_is_importable' );
- foreach ( $old_widgets as $id => $widget ) {
- $new_id = $id;
- // Try to get an unique id for the new type of widget.
- // It may be the case that the user has already created a core Gallery Widget
- // before the migration begins. (Maybe Jetpack was deactivated during core's upgrade).
- for( $i = 0; $i < 10 && in_array( $new_id, array_keys( $media_gallery ) ); $i++, $new_id++ );
-
- $widget_copy = jetpack_migrate_gallery_widget_upgrade_widget( $widget );
-
- if ( null === $widget_copy ) {
- jetpack_migrate_gallery_widget_bump_stats( 'gallery-widget-skipped' );
- continue;
- }
-
- $media_gallery[ $new_id ] = $widget_copy;
-
- $sidebars_widgets = jetpack_migrate_gallery_widget_update_sidebars( $sidebars_widgets, $id, $new_id );
-
- $widgets_to_unregister[ $id ] = $new_id;
- }
-
- if ( update_option( 'widget_media_gallery', $media_gallery ) ) {
-
- // Now un-register old widgets and register new.
- foreach ( $widgets_to_unregister as $id => $new_id ) {
- wp_unregister_sidebar_widget( "gallery-${id}" );
-
- // register new widget.
- $media_gallery_widget = new WP_Widget_Media_Gallery();
- $media_gallery_widget->_set( $new_id );
- $media_gallery_widget->_register_one( $new_id );
- }
-
- wp_set_sidebars_widgets( $sidebars_widgets );
-
- // Log if we migrated all, or some for this site.
- foreach ( $widgets_to_unregister as $w ) {
- jetpack_migrate_gallery_widget_bump_stats( 'gallery-widget-migrated' );
- }
-
- // We need to refresh on widgets page for changes to take effect.
- // The jetpack_refresh_on_widget_page function is already defined in migrate-to-core/image-widget.php
- add_action( 'current_screen', 'jetpack_refresh_on_widget_page' );
- }
- Jetpack_Options::update_option( 'gallery_widget_migration', true );
-}
-
-function jetpack_migrate_gallery_widget_is_importable( $widget ) {
- // Can be caused by instantiating but not populating a widget in the Customizer.
- if ( empty( $widget ) ) {
- return false;
- }
- // The array as stored in the option constains two keys and one
- // is a string `_multiwidget` which does not represent a widget, so we skip it
- if ( ! is_array( $widget ) ) {
- return false;
- }
- return true;
-}
-
-/**
- * Returns a transformed version of the Gallery Widget.
- * Will return null if the widget is either empty, is not an array or has more keys than expected
- *
- * @param $widget One of the Jetpack Gallery widgets to be transformed into a new Core Media Gallery Widget
- *
- * @return array|null
- */
-function jetpack_migrate_gallery_widget_upgrade_widget( $widget ) {
- $whitelisted_keys = array(
- 'ids' => '',
- 'link' => '',
- 'title' => '',
- 'type' => '',
- 'random' => '',
- 'conditions' => '',
- );
-
- $default_data = array(
- 'columns' => 3,
- 'ids' => array(),
- 'link_type' => '',
- 'orderby_random' => false,
- 'size' => 'thumbnail',
- 'title' => '',
- 'type' => '',
- );
-
- if ( ! jetpack_migrate_gallery_widget_is_importable( $widget ) ) {
- return null;
- }
- // Ensure widget has no keys other than those expected.
- // Not all widgets have conditions, so lets add it in.
- $widget_copy = array_merge( array( 'conditions' => null ), $widget );
- $non_whitelisted_keys = array_diff_key( $widget_copy, $whitelisted_keys );
- if ( count( $non_whitelisted_keys ) > 0 ) {
- jetpack_migrate_gallery_widget_bump_stats( 'extra-key' );
-
- // Log the names of the keys not in our whitelist.
- foreach ( $non_whitelisted_keys as $key => $value ) {
- jetpack_migrate_gallery_widget_bump_stats( "extra-key-$key", "migration-extra-key" );
- }
- }
-
- $widget_copy = array_merge( $default_data, $widget, array(
- // ids in Jetpack's Gallery are a string of comma-separated values.
- // Core's Media Gallery Widget stores ids in an array
- 'ids' => explode( ',', $widget['ids'] ),
- 'link_type' => $widget['link'],
- 'orderby_random' => isset( $widget['random'] ) && $widget['random'] === 'on',
- ) );
-
- // Unsetting old widget fields
- $widget_copy = array_diff_key( $widget_copy, array(
- 'link' => false,
- 'random' => false,
- ) );
-
- return $widget_copy;
-}
-
-/**
- * Replaces the references to Jetpack Gallery Widget in the sidebars for references to the new version of the widget
- *
- * @param $sidebars_widgets The sidebar widgets array to update
- * @param $id Old id of the widget (basically its index in the array )
- * @param $new_id New id that will be using on the sidebar as a new widget
- *
- * @return mixed Updated sidebar widgets array
- */
-function jetpack_migrate_gallery_widget_update_sidebars( $sidebars_widgets, $id, $new_id ) {
- foreach ( $sidebars_widgets as $sidebar => $widgets ) {
- if (
- is_array( $widgets )
- && false !== ( $key = array_search( "gallery-{$id}", $widgets, true ) )
- ) {
- $sidebars_widgets[ $sidebar ][ $key ] = "media_gallery-{$new_id}";
- // Check if the inactive widgets sidebar exists
- // Related: https://core.trac.wordpress.org/ticket/14893
- if ( ! isset( $sidebars_widgets['wp_inactive_widgets'] ) || ! is_array( $sidebars_widgets['wp_inactive_widgets'] ) ) {
- $sidebars_widgets['wp_inactive_widgets'] = array();
- }
- $sidebars_widgets['wp_inactive_widgets'][ $key ] = "gallery-{$id}";
- }
- }
- return $sidebars_widgets;
-}
-
-/**
- * Will bump stat in jetpack_gallery_widget_migration group.
- *
- * @param string $bin The bin to log into.
- * @param string $group The group name. Defaults to "widget-migration".
- */
-function jetpack_migrate_gallery_widget_bump_stats( $bin, $group = 'widget-migration' ) {
- // If this is being run on .com bumps_stats_extra exists, but using the filter looks more elegant.
- if ( function_exists( 'bump_stats_extras' ) ) {
- $group = "jetpack-$group";
- do_action( 'jetpack_bump_stats_extra', $group, $bin );
- } else {
- // $group is prepended with 'jetpack-'
- $jetpack = Jetpack::init();
- $jetpack->stat( $group, $bin ) ;
- }
-
-}
-
-add_action( 'widgets_init', 'jetpack_migrate_gallery_widget' );
diff --git a/plugins/jetpack/modules/widgets/migrate-to-core/image-widget.php b/plugins/jetpack/modules/widgets/migrate-to-core/image-widget.php
deleted file mode 100644
index 70d2d12b..00000000
--- a/plugins/jetpack/modules/widgets/migrate-to-core/image-widget.php
+++ /dev/null
@@ -1,220 +0,0 @@
-<?php
-/**
- * Migration from Jetpack's Image Widget to WordPress' Core Image Widget.
- *
- * @since 4.9
- *
- * @package Jetpack
- */
-
-/**
- * Migrates all active instances of Jetpack's image widget to Core's media image widget.
- */
-function jetpack_migrate_image_widget() {
- // Only trigger the migration from wp-admin
- if ( ! is_admin() ) {
- return;
- }
-
- // Only migrate if the new widget is available and we haven't yet migrated
- if ( ! class_exists( 'WP_Widget_Media_Image' ) || Jetpack_Options::get_option( 'image_widget_migration' ) ) {
- return;
- }
-
- $default_data = array(
- 'attachment_id' => 0,
- 'url' => '',
- 'title' => '',
- 'size' => 'custom',
- 'width' => 0,
- 'height' => 0,
- 'align' => 'none',
- 'caption' => '',
- 'alt' => '',
- 'link_type' => '',
- 'link_url' => '',
- 'image_classes' => '',
- 'link_classes' => '',
- 'link_rel' => '',
- 'image_title' => '',
- 'link_target_blank' => false,
- 'conditions' => null,
- );
-
- $old_widgets = get_option( 'widget_image', array() );
- $media_image = get_option( 'widget_media_image', array() );
- $sidebars_widgets = wp_get_sidebars_widgets();
-
- // Persist old and current widgets in backup table.
- jetpack_store_migration_data( 'widget_image', maybe_serialize( $old_widgets ) );
- if ( jetpack_get_migration_data( 'widget_image' ) !== $old_widgets ) {
- return false;
- }
-
- jetpack_store_migration_data( 'sidebars_widgets', maybe_serialize( $sidebars_widgets ) );
- if ( jetpack_get_migration_data( 'sidebars_widgets' ) !== $sidebars_widgets ) {
- return false;
- }
-
- // Array to store legacy widget ids in to unregister on success.
- $widgets_to_unregister = array();
-
- foreach ( $old_widgets as $id => $widget ) {
- if ( is_string( $id ) ) {
- continue;
- }
-
- // Can be caused by instanciating but not populating a widget in the Customizer.
- if ( empty( $widget ) ) {
- continue;
- }
-
- // Ensure widget has no keys other than those expected.
- // Not all widgets have conditions, so lets add it in.
- $widget_copy = array_merge( array( 'conditions' => null ), $widget );
- $non_whitelisted_keys = array_diff_key( $widget_copy, array(
- 'title' => '',
- 'img_url' => '',
- 'alt_text' => '',
- 'img_title' => '',
- 'caption' => '',
- 'align' => '',
- 'img_width' => '',
- 'img_height' => '',
- 'link' => '',
- 'link_target_blank' => '',
- 'conditions' => '',
- ) );
-
- if ( count( $non_whitelisted_keys ) > 0 ) {
- // skipping the widget in question
- continue;
- }
-
- $media_image[ $id ] = array_merge( $default_data, $widget, array(
- 'alt' => $widget['alt_text'],
- 'height' => $widget['img_height'],
- 'image_classes' => ! empty( $widget['align'] ) ? 'align' . $widget['align'] : '',
- 'image_title' => $widget['img_title'],
- 'link_url' => $widget['link'],
- 'url' => $widget['img_url'],
- 'width' => $widget['img_width'],
- ) );
-
- // Unsetting old widget fields
- $media_image[ $id ] = array_diff_key( $media_image[ $id ], array(
- 'align' => false,
- 'alt_text' => false,
- 'img_height' => false,
- 'img_title' => false,
- 'img_url' => false,
- 'img_width' => false,
- 'link' => false,
- ) );
-
- // Check if the image is in the media library.
- $image_basename = basename( $widget['img_url'] );
-
- if ( empty( $image_basename ) ) {
- continue;
- }
-
- $attachment_ids = get_posts( array(
- 'fields' => 'ids',
- 'meta_query' => array(
- array(
- 'value' => basename( $image_basename ),
- 'compare' => 'LIKE',
- 'key' => '_wp_attachment_metadata',
- ),
- ),
- 'post_status' => 'inherit',
- 'post_type' => 'attachment',
- 'suppress_filters' => false,
- ) );
-
- foreach ( $attachment_ids as $attachment_id ) {
- $image_meta = wp_get_attachment_metadata( $attachment_id );
-
- // Is it a full size image?
- $image_path_pieces = explode( '/', $image_meta['file'] );
- if ( $image_basename === array_pop( $image_path_pieces ) ) {
- $media_image[ $id ]['attachment_id'] = $attachment_id;
-
- // Set correct size if dimensions fit.
- if (
- $media_image[ $id ]['width'] == $image_meta['width'] ||
- $media_image[ $id ]['height'] == $image_meta['height']
- ) {
- $media_image[ $id ]['size'] = 'full';
- }
- break;
- }
-
- // Is it a down-sized image?
- foreach ( $image_meta['sizes'] as $size => $image ) {
- if ( false !== array_search( $image_basename, $image ) ) {
- $media_image[ $id ]['attachment_id'] = $attachment_id;
-
- // Set correct size if dimensions fit.
- if (
- $media_image[ $id ]['width'] == $image['width'] ||
- $media_image[ $id ]['height'] == $image['height']
- ) {
- $media_image[ $id ]['size'] = $size;
- }
- break 2;
- }
- }
- }
-
- if ( ! empty( $widget['link'] ) ) {
- $media_image[ $id ]['link_type'] = $widget['link'] === $widget['img_url'] ? 'file' : 'custom';
- }
-
- foreach ( $sidebars_widgets as $sidebar => $widgets ) {
- if (
- is_array( $widgets )
- && false !== ( $key = array_search( "image-{$id}", $widgets, true ) )
- ) {
- $sidebars_widgets[ $sidebar ][ $key ] = "media_image-{$id}";
- }
- }
-
- $widgets_to_unregister[] = $id;
- }
-
- if ( update_option( 'widget_media_image', $media_image ) ) {
- delete_option( 'widget_image' );
-
- // Now un-register old widgets and register new.
- foreach ( $widgets_to_unregister as $id ) {
- wp_unregister_sidebar_widget( "image-${id}" );
-
- // register new widget.
- $media_image_widget = new WP_Widget_Media_Image();
- $media_image_widget->_set( $id );
- $media_image_widget->_register_one( $id );
- }
-
- wp_set_sidebars_widgets( $sidebars_widgets );
-
- // We need to refresh on widgets page for changes to take effect.
- add_action( 'current_screen', 'jetpack_refresh_on_widget_page' );
- } else {
- $widget_media_image = get_option( 'widget_media_image' );
- if ( is_array( $widget_media_image ) ) {
- delete_option( 'widget_image' );
- }
- }
-
- Jetpack_Options::update_option( 'image_widget_migration', true );
-}
-add_action( 'widgets_init', 'jetpack_migrate_image_widget' );
-
-function jetpack_refresh_on_widget_page( $current ) {
- if ( 'widgets' === $current->base ) {
- wp_safe_redirect( admin_url( 'widgets.php' ) );
- exit;
- }
-}
diff --git a/plugins/jetpack/modules/widgets/milestone.php b/plugins/jetpack/modules/widgets/milestone.php
deleted file mode 100644
index 0dd2140e..00000000
--- a/plugins/jetpack/modules/widgets/milestone.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-/**
- * Register the milestone widget. This makes it easier to keep the /milestone/ dir content in sync with wpcom.
- */
-include dirname( __FILE__ ) . '/milestone/milestone.php';
diff --git a/plugins/jetpack/modules/widgets/milestone/admin.js b/plugins/jetpack/modules/widgets/milestone/admin.js
deleted file mode 100644
index bc7cdb2b..00000000
--- a/plugins/jetpack/modules/widgets/milestone/admin.js
+++ /dev/null
@@ -1,25 +0,0 @@
-( function( $ ) {
- // We could either be in wp-admin/widgets.php or the customizer.
- var $container = $( '#customize-controls' );
-
- if ( ! $container.length ) {
- $container = $( '#wpbody' );
- }
-
- $container.on( 'change', '.milestone-type', function() {
- var $messageWrapper = $( this ).parent().find( '.milestone-message-wrapper' );
-
- $( this ).find( 'input[type="radio"]:checked' ).val() === 'since' ? $messageWrapper.hide() : $messageWrapper.show();
- } );
-
- function triggerChange() {
- $container.find( '.milestone-type' ).trigger( 'change' );
- }
-
- // Used when adding widget via customizer or saving settings.
- $( document ).on( 'widget-added widget-updated', function() {
- triggerChange();
- } );
-
- triggerChange();
-} )( jQuery );
diff --git a/plugins/jetpack/modules/widgets/milestone/milestone.js b/plugins/jetpack/modules/widgets/milestone/milestone.js
deleted file mode 100644
index 01c761f1..00000000
--- a/plugins/jetpack/modules/widgets/milestone/milestone.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/* global MilestoneConfig */
-
-var Milestone = ( function( $ ) {
- var Milestone = function ( args ) {
- var $widget = $( '#' + args.id ),
- id = args.id,
- refresh = args.refresh * 1000;
-
- this.timer = function() {
- var instance = this;
-
- $.ajax( {
- url: MilestoneConfig.api_root + 'jetpack/v4/widgets/' + id,
- success: function( result ) {
- $widget.find( '.milestone-countdown' ).replaceWith( result.message );
- refresh = result.refresh * 1000;
-
- if ( ! refresh ) {
- return;
- }
-
- setTimeout(
- function() {
- instance.timer();
- },
- refresh
- );
- }
- } );
-
- };
-
- if ( refresh > 0 ) {
- this.timer();
- }
- };
- return function ( args ) {
- return new Milestone( args );
- };
-} )( jQuery );
-
-( function() {
- var i, MilestoneInstances = {};
-
- if ( typeof( MilestoneConfig ) === 'undefined' ) {
- return;
- }
-
- for ( i = 0; i < MilestoneConfig.instances.length; i++ ) {
- MilestoneInstances[i] = new Milestone( MilestoneConfig.instances[i] );
- }
-} )();
diff --git a/plugins/jetpack/modules/widgets/milestone/milestone.php b/plugins/jetpack/modules/widgets/milestone/milestone.php
deleted file mode 100644
index 8490a8ec..00000000
--- a/plugins/jetpack/modules/widgets/milestone/milestone.php
+++ /dev/null
@@ -1,683 +0,0 @@
-<?php
-/*
-Plugin Name: Milestone
-Description: Countdown to a specific date.
-Version: 1.0
-Author: Automattic Inc.
-Author URI: http://automattic.com/
-License: GPLv2 or later
-*/
-
-function jetpack_register_widget_milestone() {
- register_widget( 'Milestone_Widget' );
-}
-add_action( 'widgets_init', 'jetpack_register_widget_milestone' );
-
-class Milestone_Widget extends WP_Widget {
- private static $dir = null;
- private static $url = null;
- private static $defaults = null;
- private static $config_js = null;
-
- /**
- * Available time units sorted in descending order.
- * @var Array
- */
- protected $available_units = array(
- 'years',
- 'months',
- 'days',
- 'hours',
- 'minutes',
- 'seconds'
- );
-
- function __construct() {
- $widget = array(
- 'classname' => 'milestone-widget',
- 'description' => __( 'Display a countdown to a certain date.', 'jetpack' ),
- );
-
- parent::__construct(
- 'Milestone_Widget',
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', __( 'Milestone', 'jetpack' ) ),
- $widget
- );
-
- self::$dir = trailingslashit( dirname( __FILE__ ) );
- self::$url = plugin_dir_url( __FILE__ );
-
- add_action( 'wp_enqueue_scripts', array( __class__, 'enqueue_template' ) );
- add_action( 'admin_enqueue_scripts', array( __class__, 'enqueue_admin' ) );
- add_action( 'wp_footer', array( $this, 'localize_script' ) );
-
- if ( is_active_widget( false, false, $this->id_base, true ) || is_active_widget( false, false, 'monster', true ) || is_customize_preview() ) {
- add_action( 'wp_head', array( __class__, 'styles_template' ) );
- }
- }
-
- public static function enqueue_admin( $hook_suffix ) {
- if ( 'widgets.php' == $hook_suffix ) {
- wp_enqueue_style( 'milestone-admin', self::$url . 'style-admin.css', array(), '20161215' );
- wp_enqueue_script(
- 'milestone-admin-js',
- Jetpack::get_file_url_for_environment(
- '_inc/build/widgets/milestone/admin.min.js',
- 'modules/widgets/milestone/admin.js'
- ),
- array( 'jquery' ),
- '20170915',
- true
- );
- }
- }
-
- public static function enqueue_template() {
- if ( Jetpack_AMP_Support::is_amp_request() ) {
- return;
- }
-
- wp_enqueue_script(
- 'milestone',
- Jetpack::get_file_url_for_environment(
- '_inc/build/widgets/milestone/milestone.min.js',
- 'modules/widgets/milestone/milestone.js'
- ),
- array( 'jquery' ),
- '20160520',
- true
- );
- }
-
- public static function styles_template() {
- global $themecolors;
- $colors = wp_parse_args( $themecolors, array(
- 'bg' => 'ffffff',
- 'border' => 'cccccc',
- 'text' => '333333',
- ) );
-?>
-<style>
-.milestone-widget {
- margin-bottom: 1em;
-}
-.milestone-content {
- line-height: 2;
- margin-top: 5px;
- max-width: 100%;
- padding: 0;
- text-align: center;
-}
-.milestone-header {
- background-color: <?php echo self::sanitize_color_hex( $colors['text'] ); ?>;
- color: <?php echo self::sanitize_color_hex( $colors['bg'] ); ?>;
- line-height: 1.3;
- margin: 0;
- padding: .8em;
-}
-.milestone-header .event,
-.milestone-header .date {
- display: block;
-}
-.milestone-header .event {
- font-size: 120%;
-}
-.milestone-countdown .difference {
- display: block;
- font-size: 500%;
- font-weight: bold;
- line-height: 1.2;
-}
-.milestone-countdown,
-.milestone-message {
- background-color: <?php echo self::sanitize_color_hex( $colors['bg'] ); ?>;
- border: 1px solid <?php echo self::sanitize_color_hex( $colors['border'] ); ?>;
- border-top: 0;
- color: <?php echo self::sanitize_color_hex( $colors['text'] ); ?>;
- padding-bottom: 1em;
-}
-.milestone-message {
- padding-top: 1em
-}
-</style>
-<?php
- }
-
- /**
- * Ensure that a string representing a color in hexadecimal
- * notation is safe for use in css and database saves.
- *
- * @param string Color in hexadecimal notation. "#" may or may not be prepended to the string.
- * @return string Color in hexadecimal notation on success - the string "transparent" otherwise.
- */
- public static function sanitize_color_hex( $hex, $prefix = '#' ) {
- $hex = trim( $hex );
-
- /* Strip recognized prefixes. */
- if ( 0 === strpos( $hex, '#' ) ) {
- $hex = substr( $hex, 1 );
- } elseif ( 0 === strpos( $hex, '%23' ) ) {
- $hex = substr( $hex, 3 );
- }
-
- if ( 0 !== preg_match( '/^[0-9a-fA-F]{6}$/', $hex ) ) {
- return $prefix . $hex;
- }
-
- return 'transparent';
- }
-
- /**
- * Localize Front-end Script.
- *
- * Print the javascript configuration array only if the
- * current template has an instance of the widget that
- * is still counting down. In all other cases, this
- * function will dequeue milestone.js.
- *
- * Hooks into the "wp_footer" action.
- */
- function localize_script() {
- if ( Jetpack_AMP_Support::is_amp_request() ) {
- return;
- }
-
- if ( empty( self::$config_js['instances'] ) ) {
- wp_dequeue_script( 'milestone' );
- return;
- }
- self::$config_js['api_root'] = esc_url_raw( rest_url() );
- wp_localize_script( 'milestone', 'MilestoneConfig', self::$config_js );
- }
-
- /**
- * Widget
- */
- function widget( $args, $instance ) {
- echo $args['before_widget'];
-
- /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
- $title = apply_filters( 'widget_title', $instance['title'] );
- if ( ! empty( $title ) ) {
- echo $args['before_title'] . $title . $args['after_title'];
- }
-
- $data = $this->get_widget_data( $instance );
-
- self::$config_js['instances'][] = array(
- 'id' => $args['widget_id'],
- 'message' => $data['message'],
- 'refresh' => $data['refresh']
- );
-
- echo '<div class="milestone-content">';
-
- echo '<div class="milestone-header">';
- echo '<strong class="event">' . esc_html( $instance['event'] ) . '</strong>';
- echo '<span class="date">' . esc_html( date_i18n( get_option( 'date_format' ), $data['milestone'] ) ) . '</span>';
- echo '</div>';
-
- echo $data['message'];
-
- echo '</div><!--milestone-content-->';
-
- echo $args['after_widget'];
-
- /** This action is documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', 'milestone' );
- }
-
- function get_widget_data( $instance ) {
- $data = array();
-
- $instance = $this->sanitize_instance( $instance );
-
- $milestone = mktime( $instance['hour'], $instance['min'], 0, $instance['month'], $instance['day'], $instance['year'] );
- $now = (int) current_time( 'timestamp' );
- $type = $instance['type'];
-
- if ( 'since' === $type ) {
- $diff = (int) floor( $now - $milestone );
- } else {
- $diff = (int) floor( $milestone - $now );
- }
-
- $data['diff'] = $diff;
- $data['unit'] = $this->get_unit( $diff, $instance['unit'] );
-
- // Setting the refresh counter to equal the number of seconds it takes to flip a unit
- $refresh_intervals = array(
- 0, // should be YEAR_IN_SECONDS, but doing setTimeout for a year doesn't seem to be logical
- 0, // same goes for MONTH_IN_SECONDS,
- DAY_IN_SECONDS,
- HOUR_IN_SECONDS,
- MINUTE_IN_SECONDS,
- 1
- );
-
- $data['refresh'] = $refresh_intervals[ array_search( $data['unit'], $this->available_units ) ];
- $data['milestone'] = $milestone;
-
- if ( ( 1 > $diff ) && ( 'until' === $type ) ) {
- $data['message'] = '<div class="milestone-message">' . $instance['message'] . '</div>';
- $data['refresh'] = 0; // No need to refresh, the milestone has been reached
- } else {
- $interval_text = $this->get_interval_in_units( $diff, $data['unit'] );
- $interval = intval( $interval_text );
-
- if ( 'since' === $type ) {
-
- switch ( $data['unit'] ) {
- case 'years':
- $data['message'] = sprintf(
- _n(
- '<span class="difference">%s</span> <span class="label">year ago.</span>',
- '<span class="difference">%s</span> <span class="label">years ago.</span>',
- $interval,
- 'jetpack'
- ),
- $interval_text
- );
- break;
- case 'months':
- $data['message'] = sprintf(
- _n(
- '<span class="difference">%s</span> <span class="label">month ago.</span>',
- '<span class="difference">%s</span> <span class="label">months ago.</span>',
- $interval,
- 'jetpack'
- ),
- $interval_text
- );
- break;
- case 'days':
- $data['message'] = sprintf(
- _n(
- '<span class="difference">%s</span> <span class="label">day ago.</span>',
- '<span class="difference">%s</span> <span class="label">days ago.</span>',
- $interval,
- 'jetpack'
- ),
- $interval_text
- );
- break;
- case 'hours':
- $data['message'] = sprintf(
- _n(
- '<span class="difference">%s</span> <span class="label">hour ago.</span>',
- '<span class="difference">%s</span> <span class="label">hours ago.</span>',
- $interval,
- 'jetpack'
- ),
- $interval_text
- );
- break;
- case 'minutes':
- $data['message'] = sprintf(
- _n(
- '<span class="difference">%s</span> <span class="label">minute ago.</span>',
- '<span class="difference">%s</span> <span class="label">minutes ago.</span>',
- $interval,
- 'jetpack'
- ),
- $interval_text
- );
- break;
- case 'seconds':
- $data['message'] = sprintf(
- _n(
- '<span class="difference">%s</span> <span class="label">second ago.</span>',
- '<span class="difference">%s</span> <span class="label">seconds ago.</span>',
- $interval,
- 'jetpack'
- ),
- $interval_text
- );
- break;
- }
- } else {
- switch ( $this->get_unit( $diff, $instance['unit'] ) ) {
- case 'years':
- $data['message'] = sprintf(
- _n(
- '<span class="difference">%s</span> <span class="label">year to go.</span>',
- '<span class="difference">%s</span> <span class="label">years to go.</span>',
- $interval,
- 'jetpack'
- ),
- $interval_text
- );
- break;
- case 'months':
- $data['message'] = sprintf(
- _n(
- '<span class="difference">%s</span> <span class="label">month to go.</span>',
- '<span class="difference">%s</span> <span class="label">months to go.</span>',
- $interval,
- 'jetpack'
- ),
- $interval_text
- );
- break;
- case 'days':
- $data['message'] = sprintf(
- _n(
- '<span class="difference">%s</span> <span class="label">day to go.</span>',
- '<span class="difference">%s</span> <span class="label">days to go.</span>',
- $interval,
- 'jetpack'
- ),
- $interval_text
- );
- break;
- case 'hours':
- $data['message'] = sprintf(
- _n(
- '<span class="difference">%s</span> <span class="label">hour to go.</span>',
- '<span class="difference">%s</span> <span class="label">hours to go.</span>',
- $interval,
- 'jetpack'
- ),
- $interval_text
- );
- break;
- case 'minutes':
- $data['message'] = sprintf(
- _n(
- '<span class="difference">%s</span> <span class="label">minute to go.</span>',
- '<span class="difference">%s</span> <span class="label">minutes to go.</span>',
- $interval,
- 'jetpack'
- ),
- $interval_text
- );
- break;
- case 'seconds':
- $data['message'] = sprintf(
- _n(
- '<span class="difference">%s</span> <span class="label">second to go.</span>',
- '<span class="difference">%s</span> <span class="label">seconds to go.</span>',
- $interval,
- 'jetpack'
- ),
- $interval_text
- );
- break;
- }
- }
- $data['message'] = '<div class="milestone-countdown">' . $data['message'] . '</div>';
- }
-
- return $data;
- }
-
- /**
- * Return the largest possible time unit that the difference will be displayed in.
- *
- * @param Integer $seconds the interval in seconds
- * @param String $maximum_unit the maximum unit that will be used. Optional.
- * @return String $calculated_unit
- */
- protected function get_unit( $seconds, $maximum_unit = 'automatic' ) {
- $unit = '';
-
- if ( $seconds >= YEAR_IN_SECONDS * 2 ) {
- // more than 2 years - show in years, one decimal point
- $unit = 'years';
-
- } else if ( $seconds >= YEAR_IN_SECONDS ) {
- if ( 'years' === $maximum_unit ) {
- $unit = 'years';
- } else {
- // automatic mode - showing months even if it's between one and two years
- $unit = 'months';
- }
-
- } else if ( $seconds >= MONTH_IN_SECONDS * 3 ) {
- // fewer than 2 years - show in months
- $unit = 'months';
-
- } else if ( $seconds >= MONTH_IN_SECONDS ) {
- if ( 'months' === $maximum_unit ) {
- $unit = 'months';
- } else {
- // automatic mode - showing days even if it's between one and three months
- $unit = 'days';
- }
-
- } else if ( $seconds >= DAY_IN_SECONDS - 1 ) {
- // fewer than a month - show in days
- $unit = 'days';
-
- } else if ( $seconds >= HOUR_IN_SECONDS - 1 ) {
- // less than 1 day - show in hours
- $unit = 'hours';
-
- } else if ( $seconds >= MINUTE_IN_SECONDS - 1 ) {
- // less than 1 hour - show in minutes
- $unit = 'minutes';
-
- } else {
- // less than 1 minute - show in seconds
- $unit = 'seconds';
- }
-
- $maximum_unit_index = array_search( $maximum_unit, $this->available_units );
- $unit_index = array_search( $unit, $this->available_units );
-
- if (
- false === $maximum_unit_index // the maximum unit parameter is automatic
- || $unit_index > $maximum_unit_index // there is not enough seconds for even one maximum time unit
- ) {
- return $unit;
- }
- return $maximum_unit;
- }
-
- /**
- * Returns a time difference value in specified units.
- *
- * @param Integer $seconds
- * @param String $units
- * @return Integer|String $time_in_units
- */
- protected function get_interval_in_units( $seconds, $units ) {
- switch ( $units ) {
- case 'years':
- $years = $seconds / YEAR_IN_SECONDS;
- $decimals = abs( round( $years, 1 ) - round( $years ) ) > 0 ? 1 : 0;
- return number_format_i18n( $years, $decimals );
- case 'months':
- return (int) ( $seconds / 60 / 60 / 24 / 30 );
- case 'days':
- return (int) ( $seconds / 60 / 60 / 24 + 1 );
- case 'hours':
- return (int) ( $seconds / 60 / 60 );
- case 'minutes':
- return (int) ( $seconds / 60 + 1 );
- default:
- return $seconds;
- }
- }
-
- /**
- * Update
- */
- function update( $new_instance, $old_instance ) {
- return $this->sanitize_instance( $new_instance );
- }
-
- /*
- * Make sure that a number is within a certain range.
- * If the number is too small it will become the possible lowest value.
- * If the number is too large it will become the possible highest value.
- *
- * @param int $n The number to check.
- * @param int $floor The lowest possible value.
- * @param int $ceil The highest possible value.
- */
- function sanitize_range( $n, $floor, $ceil ) {
- $n = (int) $n;
- if ( $n < $floor ) {
- $n = $floor;
- } elseif ( $n > $ceil ) {
- $n = $ceil;
- }
- return $n;
- }
-
- /*
- * Sanitize an instance of this widget.
- *
- * Date ranges match the documentation for mktime in the php manual.
- * @see http://php.net/manual/en/function.mktime.php#refsect1-function.mktime-parameters
- *
- * @uses Milestone_Widget::sanitize_range().
- */
- function sanitize_instance( $dirty ) {
- $now = (int) current_time( 'timestamp' );
-
- $dirty = wp_parse_args( $dirty, array(
- 'title' => '',
- 'event' => __( 'The Big Day', 'jetpack' ),
- 'unit' => 'automatic',
- 'type' => 'until',
- 'message' => __( 'The big day is here.', 'jetpack' ),
- 'day' => date( 'd', $now ),
- 'month' => date( 'm', $now ),
- 'year' => date( 'Y', $now ),
- 'hour' => 0,
- 'min' => 0,
- ) );
-
- $allowed_tags = array(
- 'a' => array( 'title' => array(), 'href' => array(), 'target' => array() ),
- 'em' => array( 'title' => array() ),
- 'strong' => array( 'title' => array() ),
- );
-
- $clean = array(
- 'title' => trim( strip_tags( stripslashes( $dirty['title'] ) ) ),
- 'event' => trim( strip_tags( stripslashes( $dirty['event'] ) ) ),
- 'unit' => $dirty['unit'],
- 'type' => $dirty['type'],
- 'message' => wp_kses( $dirty['message'], $allowed_tags ),
- 'year' => $this->sanitize_range( $dirty['year'], 1901, 2037 ),
- 'month' => $this->sanitize_range( $dirty['month'], 1, 12 ),
- 'hour' => $this->sanitize_range( $dirty['hour'], 0, 23 ),
- 'min' => zeroise( $this->sanitize_range( $dirty['min'], 0, 59 ), 2 ),
- );
-
- $clean['day'] = $this->sanitize_range( $dirty['day'], 1, date( 't', mktime( 0, 0, 0, $clean['month'], 1, $clean['year'] ) ) );
-
- return $clean;
- }
-
- /**
- * Form
- */
- function form( $instance ) {
- $instance = $this->sanitize_instance( $instance );
-
- $units = array(
- 'automatic' => _x( 'Automatic', 'Milestone widget: mode in which the date unit is determined automatically', 'jetpack' ),
- 'years' => _x( 'Years', 'Milestone widget: mode in which the date unit is set to years', 'jetpack' ),
- 'months' => _x( 'Months', 'Milestone widget: mode in which the date unit is set to months', 'jetpack' ),
- 'days' => _x( 'Days', 'Milestone widget: mode in which the date unit is set to days', 'jetpack' ),
- 'hours' => _x( 'Hours', 'Milestone widget: mode in which the date unit is set to hours', 'jetpack' ),
- );
- ?>
-
- <div class="milestone-widget">
- <p>
- <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title', 'jetpack' ); ?></label>
- <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" />
- </p>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'event' ); ?>"><?php _e( 'Description', 'jetpack' ); ?></label>
- <input class="widefat" id="<?php echo $this->get_field_id( 'event' ); ?>" name="<?php echo $this->get_field_name( 'event' ); ?>" type="text" value="<?php echo esc_attr( $instance['event'] ); ?>" />
- </p>
-
- <fieldset class="jp-ms-data-time">
- <legend><?php esc_html_e( 'Date', 'jetpack' ); ?></legend>
-
- <label for="<?php echo $this->get_field_id( 'month' ); ?>" class="assistive-text"><?php _e( 'Month', 'jetpack' ); ?></label>
- <select id="<?php echo $this->get_field_id( 'month' ); ?>" class="month" name="<?php echo $this->get_field_name( 'month' ); ?>"><?php
- global $wp_locale;
- for ( $i = 1; $i < 13; $i++ ) {
- $monthnum = zeroise( $i, 2 );
- echo '<option value="' . esc_attr( $monthnum ) . '"' . selected( $i, $instance['month'], false ) . '>' . $monthnum . '-' . $wp_locale->get_month_abbrev( $wp_locale->get_month( $i ) ) . '</option>';
- }
- ?></select>
-
- <label for="<?php echo $this->get_field_id( 'day' ); ?>" class="assistive-text"><?php _e( 'Day', 'jetpack' ); ?></label>
- <input id="<?php echo $this->get_field_id( 'day' ); ?>" class="day" name="<?php echo $this->get_field_name( 'day' ); ?>" type="text" value="<?php echo esc_attr( $instance['day'] ); ?>">,
-
- <label for="<?php echo $this->get_field_id( 'year' ); ?>" class="assistive-text"><?php _e( 'Year', 'jetpack' ); ?></label>
- <input id="<?php echo $this->get_field_id( 'year' ); ?>" class="year" name="<?php echo $this->get_field_name( 'year' ); ?>" type="text" value="<?php echo esc_attr( $instance['year'] ); ?>">
- </fieldset>
-
- <fieldset class="jp-ms-data-time">
- <legend><?php esc_html_e( 'Time', 'jetpack' ); ?></legend>
-
- <label for="<?php echo $this->get_field_id( 'hour' ); ?>" class="assistive-text"><?php _e( 'Hour', 'jetpack' ); ?></label>
- <input id="<?php echo $this->get_field_id( 'hour' ); ?>" class="hour" name="<?php echo $this->get_field_name( 'hour' ); ?>" type="text" value="<?php echo esc_attr( $instance['hour'] ); ?>">
-
- <label for="<?php echo $this->get_field_id( 'min' ); ?>" class="assistive-text"><?php _e( 'Minutes', 'jetpack' ); ?></label>
-
- <span class="time-separator">:</span>
-
- <input id="<?php echo $this->get_field_id( 'min' ); ?>" class="minutes" name="<?php echo $this->get_field_name( 'min' ); ?>" type="text" value="<?php echo esc_attr( $instance['min'] ); ?>">
- </fieldset>
-
- <fieldset class="jp-ms-data-unit">
- <legend><?php esc_html_e( 'Time Unit', 'jetpack' ); ?></legend>
-
- <label for="<?php echo $this->get_field_id( 'unit' ); ?>" class="assistive-text">
- <?php _e( 'Time Unit', 'jetpack' ); ?>
- </label>
- <select id="<?php echo $this->get_field_id( 'unit' ); ?>" class="unit" name="<?php echo $this->get_field_name( 'unit' ); ?>">
- <?php
- foreach ( $units as $key => $unit ) {
- echo '<option value="' . esc_attr( $key ) . '"' . selected( $key, $instance['unit'], false ) . '>' . $unit . '</option>';
- }
- ?></select>
- </fieldset>
-
- <ul class="milestone-type">
- <li>
- <label>
- <input
- <?php checked( $instance['type'], 'until' ); ?>
- name="<?php echo esc_attr( $this->get_field_name( 'type' ) ); ?>"
- type="radio"
- value="until"
- />
- <?php esc_html_e( 'Until your milestone', 'jetpack' ); ?>
- </label>
- </li>
-
- <li>
- <label>
- <input
- <?php checked( $instance['type'], 'since' ); ?>
- name="<?php echo esc_attr( $this->get_field_name( 'type' ) ); ?>"
- type="radio"
- value="since"
- />
- <?php esc_html_e( 'Since your milestone', 'jetpack' ); ?>
- </label>
- </li>
- </ul>
-
- <p class="milestone-message-wrapper">
- <label for="<?php echo $this->get_field_id( 'message' ); ?>"><?php _e( 'Milestone Reached Message', 'jetpack' ); ?></label>
- <textarea id="<?php echo $this->get_field_id( 'message' ); ?>" name="<?php echo $this->get_field_name( 'message' ); ?>" class="widefat" rows="3"><?php echo esc_textarea( $instance['message'] ); ?></textarea>
- </p>
- </div>
-
- <?php
- }
-}
diff --git a/plugins/jetpack/modules/widgets/milestone/style-admin.css b/plugins/jetpack/modules/widgets/milestone/style-admin.css
deleted file mode 100644
index 15a97102..00000000
--- a/plugins/jetpack/modules/widgets/milestone/style-admin.css
+++ /dev/null
@@ -1,50 +0,0 @@
-.milestone-widget fieldset {
- margin-bottom: 1em;
-}
-
-.milestone-widget fieldset * {
- vertical-align: middle;
-}
-
-.jp-ms-data-time input[type="text"] {
- text-align: right;
- width: 2.1em;
-}
-
-.jp-ms-data-time .month {
- width: 5.4em;
-
-}
-
-.jp-ms-data-time .year[type="text"] {
- text-align: right;
- width: 3.2em;
-}
-
-.jp-ms-data-time input[type="text"] {
- text-align: right;
- width: 3.2em;
-}
-
-.jp-ms-data-time .year[type="text"] {
- width: 4.5em;
-}
-
-.jp-ms-data-time .assistive-text,
-.jp-ms-data-unit .assistive-text {
- position: absolute !important;
- clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
- clip: rect(1px, 1px, 1px, 1px);
-}
-
-@media screen and (max-width: 782px) {
- .jp-ms-data-time input[type="text"],
- .jp-ms-data-time .year[type="text"] {
- width: 2.8em;
-
- }
-
- .jp-ms-data-time .year[type="text"] {
- width: 4em;
- }
-}
diff --git a/plugins/jetpack/modules/widgets/my-community.php b/plugins/jetpack/modules/widgets/my-community.php
deleted file mode 100644
index 03958c38..00000000
--- a/plugins/jetpack/modules/widgets/my-community.php
+++ /dev/null
@@ -1,297 +0,0 @@
-<?php
-/**
- * Disable direct access/execution to/of the widget code.
- */
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-/**
- * Jetpack_My_Community_Widget displays community members of this site.
- *
- * A community member is a WordPress.com user that liked or commented on an entry or subscribed to the site.
- * Requires WordPress.com connection to work. Otherwise it won't be visible in Widgets screen in admin.
- */
-class Jetpack_My_Community_Widget extends WP_Widget {
- /**
- * Transient expiration time.
- *
- * @var int $expiration
- */
- static $expiration = 600;
-
- /**
- * Default widget title.
- *
- * @var string $default_title
- */
- var $default_title;
-
- /**
- * Registers the widget with WordPress.
- */
- function __construct() {
- parent::__construct(
- 'jetpack_my_community', // Base ID
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', esc_html__( 'My Community', 'jetpack' ) ),
- array(
- 'description' => esc_html__( "Display members of your site's community.", 'jetpack' ),
- 'customize_selective_refresh' => true,
- )
- );
-
- if ( is_active_widget( false, false, $this->id_base ) || is_active_widget( false, false, 'monster' ) || is_customize_preview() ) {
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ) );
- }
-
- $this->default_title = esc_html__( 'Community', 'jetpack' );
- }
-
- /**
- * Enqueue stylesheet for grid layout.
- */
- function enqueue_style() {
- wp_register_style( 'jetpack-my-community-widget', plugins_url( 'my-community/style.css', __FILE__ ), array(), '20160129' );
- wp_enqueue_style( 'jetpack-my-community-widget' );
- }
-
- /**
- * Back end widget form.
- *
- * @see WP_Widget::form()
- *
- * @param array $instance Previously saved values from database.
- *
- * @return string|void
- */
- function form( $instance ) {
- $title = isset( $instance['title'] ) ? $instance['title'] : false;
- if ( false === $title ) {
- $title = $this->default_title;
- }
-
- $number = isset( $instance['number'] ) ? $instance['number'] : 10;
- if ( ! in_array( $number, array( 10, 50 ) ) ) {
- $number = 10;
- }
-
- $include_likers = isset( $instance['include_likers'] ) ? (bool) $instance['include_likers'] : true;
- $include_followers = isset( $instance['include_followers'] ) ? (bool) $instance['include_followers'] : true;
- $include_commenters = isset( $instance['include_commenters'] ) ? (bool) $instance['include_commenters'] : true;
- ?>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php esc_html_e( 'Title:', 'jetpack' ); ?></label>
- <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
- </p>
-
- <p>
- <label><?php esc_html_e( 'Show a maximum of', 'jetpack' ); ?></label>
- </p>
- <ul>
- <li><label><input id="<?php echo $this->get_field_id( 'number' ); ?>-few" name="<?php echo $this->get_field_name( 'number' ); ?>" type="radio" value="10" <?php checked( '10', $number ); ?> /> <?php esc_html_e( '10 community members', 'jetpack' ); ?></label></li>
- <li><label><input id="<?php echo $this->get_field_id( 'number' ); ?>-lots" name="<?php echo $this->get_field_name( 'number' ); ?>" type="radio" value="50" <?php checked( '50', $number ); ?> /> <?php esc_html_e( '50 community members', 'jetpack' ); ?></label></li>
- </ul>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'include_likers' ); ?>">
- <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id( 'include_likers' ); ?>" name="<?php echo $this->get_field_name( 'include_likers' ); ?>" value="1" <?php checked( $include_likers, 1 ); ?> />
- <?php esc_html_e( 'Include activity from likers', 'jetpack' ); ?>
- </label>
- </p>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'include_followers' ); ?>">
- <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id( 'include_followers' ); ?>" name="<?php echo $this->get_field_name( 'include_followers' ); ?>" value="1" <?php checked( $include_followers, 1 ); ?> />
- <?php esc_html_e( 'Include activity from followers', 'jetpack' ); ?>
- </label>
- </p>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'include_commenters' ); ?>">
- <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id( 'include_commenters' ); ?>" name="<?php echo $this->get_field_name( 'include_commenters' ); ?>" value="1" <?php checked( $include_commenters, 1 ); ?> />
- <?php esc_html_e( 'Include activity from commenters', 'jetpack' ); ?>
- </label>
- </p>
-
- <?php
- }
-
- /**
- * Sanitize widget form values as they are saved.
- *
- * @see WP_Widget::update()
- *
- * @param array $new_instance Values just sent to be saved.
- * @param array $old_instance Previously saved values from database.
- *
- * @return array Updated safe values to be saved.
- */
- function update( $new_instance, $old_instance ) {
- $instance = array();
- $instance['title'] = wp_kses( $new_instance['title'], array() );
- if ( $instance['title'] === $this->default_title ) {
- $instance['title'] = false; // Store as false in case of language change
- }
-
- $instance['number'] = (int) $new_instance['number'];
- if ( ! in_array( $instance['number'], array( 10, 50 ) ) ) {
- $instance['number'] = 10;
- }
-
- $instance['include_likers'] = (bool) $new_instance['include_likers'];
- $instance['include_followers'] = (bool) $new_instance['include_followers'];
- $instance['include_commenters'] = (bool) $new_instance['include_commenters'];
-
- delete_transient( "$this->id-v2-{$instance['number']}" . (int) $instance['include_likers'] . (int) $instance['include_followers'] . (int) $instance['include_commenters'] );
-
- return $instance;
- }
-
- /**
- * Front-end display of widget.
- *
- * @see WP_Widget::widget()
- *
- * @param array $args Widget arguments.
- * @param array $instance Saved values from database.
- */
- function widget( $args, $instance ) {
- $instance = wp_parse_args(
- $instance, array(
- 'title' => false,
- 'number' => true,
- 'include_likers' => true,
- 'include_followers' => true,
- 'include_commenters' => true,
- )
- );
-
- $title = $instance['title'];
-
- if ( false === $title ) {
- $title = $this->default_title;
- }
-
- /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
- $title = apply_filters( 'widget_title', $title );
-
- echo $args['before_widget'];
-
- if ( ! empty( $title ) ) {
- echo $args['before_title'] . $title . $args['after_title'];
- }
-
- $transient_name = "$this->id-v2-{$instance['number']}" . (int) $instance['include_likers'] . (int) $instance['include_followers'] . (int) $instance['include_commenters'];
-
- $my_community = get_transient( $transient_name );
-
- if ( empty( $my_community ) ) {
- $my_community = $this->get_community( $instance );
-
- set_transient( $transient_name, $my_community, self::$expiration );
- }
-
- echo $my_community;
-
- echo $args['after_widget'];
-
- /** This action is documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', 'my_community' );
- }
-
- /**
- * Initiate request and render the response.
- *
- * @since 4.0
- *
- * @param array $query
- *
- * @return string
- */
- function get_community( $query ) {
- $members = $this->fetch_remote_community( $query );
-
- if ( ! empty( $members ) ) {
-
- $my_community = '<div class="widgets-multi-column-grid"><ul>';
-
- foreach ( $members as $member ) {
- $my_community .= sprintf(
- '<li><a href="%s" title="%s"><img alt="%s" src="%s" class="avatar avatar-48" height="48" width="48"></a></li>',
- esc_url( $member->profile_URL ),
- esc_attr( $member->name ),
- esc_attr( $member->name ),
- esc_url( $member->avatar_URL )
- );
- }
-
- $my_community .= '</ul></div>';
-
- } else {
- if ( current_user_can( 'edit_theme_options' ) ) {
- $my_community = '<p>' . wp_kses(
- sprintf(
- __( 'There are no users to display in this <a href="%1$s">My Community widget</a>. <a href="%2$s">Want more traffic?</a>', 'jetpack' ),
- admin_url( 'widgets.php' ),
- 'https://jetpack.com/support/getting-more-views-and-traffic/'
- ), array( 'a' => array( 'href' => true ) )
- ) . '</p>';
- } else {
- $my_community = '<p>' . esc_html__( "I'm just starting out; leave me a comment or a like :)", 'jetpack' ) . '</p>';
- }
- }
-
- return $my_community;
- }
-
- /**
- * Request community members to WordPress.com endpoint.
- *
- * @since 4.0
- *
- * @param $query
- *
- * @return array
- */
- function fetch_remote_community( $query ) {
- $jetpack_blog_id = Jetpack_Options::get_option( 'id' );
- $url = add_query_arg(
- array(
- 'number' => $query['number'],
- 'likers' => (int) $query['include_likers'],
- 'followers' => (int) $query['include_followers'],
- 'commenters' => (int) $query['include_commenters'],
- ),
- "https://public-api.wordpress.com/rest/v1.1/sites/$jetpack_blog_id/community"
- );
- $response = wp_remote_get( $url );
- $response_body = wp_remote_retrieve_body( $response );
-
- if ( empty( $response_body ) ) {
- return array();
- }
-
- $response_body = json_decode( $response_body );
-
- if ( isset( $response_body->users ) ) {
- return $response_body->users;
- }
-
- return array();
- }
-}
-
-/**
- * If site is connected to WordPress.com, register the widget.
- *
- * @since 4.0
- */
-function jetpack_my_community_init() {
- if ( Jetpack::is_active() ) {
- register_widget( 'Jetpack_My_Community_Widget' );
- }
-}
-
-add_action( 'widgets_init', 'jetpack_my_community_init' );
diff --git a/plugins/jetpack/modules/widgets/my-community/style.css b/plugins/jetpack/modules/widgets/my-community/style.css
deleted file mode 100644
index 5616e890..00000000
--- a/plugins/jetpack/modules/widgets/my-community/style.css
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Multi-Column Grid Layout */
-.widgets-multi-column-grid ul {
- overflow: hidden;
- padding: 0;
- margin: 0;
- list-style-type: none;
-}
-
-.widgets-multi-column-grid ul li {
- background: none;
- clear: none;
- float: left;
- margin: 0 -5px -3px 0;
- padding: 0 8px 6px 0;
- border: none;
- list-style-type: none !important;
-}
-
-.widgets-multi-column-grid ul li a {
- background: none;
- margin: 0;
- padding: 0;
- border: 0;
-}
-
-.widgets-multi-column-grid .avatar {
- vertical-align: middle;
-}
-
-/* Ensure My Community images fit the 48 pixel grid. */
-.widget_jetpack_my_community .avatar-48,
-.widget_jetpack_my_community .avatar-240 {
- max-width: 48px;
- max-height: 48px;
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/widgets/rsslinks-widget.php b/plugins/jetpack/modules/widgets/rsslinks-widget.php
deleted file mode 100644
index 01d1ee2d..00000000
--- a/plugins/jetpack/modules/widgets/rsslinks-widget.php
+++ /dev/null
@@ -1,242 +0,0 @@
-<?php
-/**
- * Module Name: RSS Links Widget
- * Module Description: Easily add RSS links to your theme's sidebar.
- * Sort Order: 20
- * First Introduced: 1.2
- */
-
-class Jetpack_RSS_Links_Widget extends WP_Widget {
-
- function __construct() {
- $widget_ops = array(
- 'classname' => 'widget_rss_links',
- 'description' => __( "Links to your blog's RSS feeds", 'jetpack' ),
- 'customize_selective_refresh' => true,
- );
- parent::__construct(
- 'rss_links',
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', __( 'RSS Links', 'jetpack' ) ),
- $widget_ops
- );
- }
-
- function widget( $args, $instance ) {
- $instance = wp_parse_args( (array) $instance, $this->defaults() );
-
- extract( $args );
-
- /** This filter is documented in core/src/wp-includes/default-widgets.php */
- $title = apply_filters( 'widget_title', $instance['title'] );
- echo $before_widget;
-
- if ( $title ) {
- echo $before_title . stripslashes( $title ) . $after_title;
- }
-
- if ( 'text' == $instance['format'] ) {
- echo '<ul>';
- }
-
- if ( 'posts' == $instance['display'] ) {
- $this->_rss_link( 'posts', $instance );
- } elseif ( 'comments' == $instance['display'] ) {
- $this->_rss_link( 'comments', $instance );
- } elseif ( 'posts-comments' == $instance['display'] ) {
- $this->_rss_link( 'posts', $instance );
- $this->_rss_link( 'comments', $instance );
- }
-
- if ( 'text' == $instance['format'] ) {
- echo '</ul>';
- }
-
- echo "\n" . $after_widget;
-
- /** This action is documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', 'rss-links' );
- }
-
- /**
- * Return an associative array of default values
- * These values are used in new widgets as well as when sanitizing input.
- *
- * @return array Array of default values for the Widget's options
- */
- function defaults() {
- return array(
- 'title' => '',
- 'display' => 'posts-comments',
- 'format' => 'text',
- );
- }
-
- function update( $new_instance, $old_instance ) {
- $instance = $old_instance;
-
- $instance['title'] = wp_filter_nohtml_kses( $new_instance['title'] );
- $instance['display'] = $new_instance['display'];
- $instance['format'] = $new_instance['format'];
- $instance['imagesize'] = $new_instance['imagesize'];
- $instance['imagecolor'] = $new_instance['imagecolor'];
-
- return $instance;
- }
-
- function form( $instance ) {
- $instance = wp_parse_args( (array) $instance, $this->defaults() );
-
- $title = stripslashes( $instance['title'] );
- $display = $instance['display'];
- $format = $instance['format'];
- $image_size = isset( $instance['imagesize'] ) ? $instance['imagesize'] : 0;
- $image_color = isset( $instance['imagecolor'] ) ? $instance['imagecolor'] : 'red';
-
- echo '<p><label for="' . $this->get_field_id( 'title' ) . '">' . esc_html__( 'Title:', 'jetpack' ) . '
- <input class="widefat" id="' . $this->get_field_id( 'title' ) . '" name="' . $this->get_field_name( 'title' ) . '" type="text" value="' . esc_attr( $title ) . '" />
- </label></p>';
-
- $displays = array(
- 'posts' => __( 'Posts', 'jetpack' ),
- 'comments' => __( 'Comments', 'jetpack' ),
- 'posts-comments' => __( 'Posts & Comments', 'jetpack' ),
- );
- echo '<p><label for="' . $this->get_field_id( 'display' ) . '">' . esc_html__( 'Feed(s) to Display:', 'jetpack' ) . '
- <select class="widefat" id="' . $this->get_field_id( 'display' ) . '" name="' . $this->get_field_name( 'display' ) . '">';
- foreach ( $displays as $display_option => $label ) {
- echo '<option value="' . esc_attr( $display_option ) . '"';
- if ( $display_option == $display ) {
- echo ' selected="selected"';
- }
- echo '>' . esc_html( $label ) . '</option>' . "\n";
- }
- echo '</select></label></p>';
-
- $formats = array(
- 'text' => __( 'Text Link', 'jetpack' ),
- 'image' => __( 'Image Link', 'jetpack' ),
- 'text-image' => __( 'Text & Image Links', 'jetpack' ),
- );
- echo '<p><label for="' . $this->get_field_id( 'format' ) . '">' . _x( 'Format:', 'Noun', 'jetpack' ) . '
- <select class="widefat" id="' . $this->get_field_id( 'format' ) . '" name="' . $this->get_field_name( 'format' ) . '" onchange="if ( this.value == \'text\' ) jQuery( \'#' . $this->get_field_id( 'image-settings' ) . '\' ).fadeOut(); else jQuery( \'#' . $this->get_field_id( 'image-settings' ) . '\' ).fadeIn();">';
- foreach ( $formats as $format_option => $label ) {
- echo '<option value="' . esc_attr( $format_option ) . '"';
- if ( $format_option == $format ) {
- echo ' selected="selected"';
- }
- echo '>' . esc_html( $label ) . '</option>' . "\n";
- }
- echo '</select></label></p>';
-
- echo '<div id="' . $this->get_field_id( 'image-settings' ) . '"';
- if ( 'text' == $format ) {
- echo ' style="display: none;"';
- }
- echo '><h3>' . esc_html__( 'Image Settings:', 'jetpack' ) . '</h3>';
-
- $sizes = array(
- 'small' => __( 'Small', 'jetpack' ),
- 'medium' => __( 'Medium', 'jetpack' ),
- 'large' => __( 'Large', 'jetpack' ),
- );
- echo '<p><label for="' . $this->get_field_id( 'imagesize' ) . '">' . esc_html__( 'Image Size:', 'jetpack' ) . '
- <select class="widefat" id="' . $this->get_field_id( 'imagesize' ) . '" name="' . $this->get_field_name( 'imagesize' ) . '">';
- foreach ( $sizes as $size => $label ) {
- echo '<option value="' . esc_attr( $size ) . '"';
- if ( $size == $image_size ) {
- echo ' selected="selected"';
- }
- echo '>' . esc_html( $label ) . '</option>' . "\n";
- }
- echo '</select></label></p>';
-
- $colors = array(
- 'red' => __( 'Red', 'jetpack' ),
- 'orange' => __( 'Orange', 'jetpack' ),
- 'green' => __( 'Green', 'jetpack' ),
- 'blue' => __( 'Blue', 'jetpack' ),
- 'purple' => __( 'Purple', 'jetpack' ),
- 'pink' => __( 'Pink', 'jetpack' ),
- 'silver' => __( 'Silver', 'jetpack' ),
- );
- echo '<p><label for="' . $this->get_field_id( 'imagecolor' ) . '">' . esc_html__( 'Image Color:', 'jetpack' ) . '
- <select class="widefat" id="' . $this->get_field_id( 'imagecolor' ) . '" name="' . $this->get_field_name( 'imagecolor' ) . '">';
- foreach ( $colors as $color => $label ) {
- echo '<option value="' . esc_attr( $color ) . '"';
- if ( $color == $image_color ) {
- echo ' selected="selected"';
- }
- echo '>' . esc_html( $label ) . '</option>' . "\n";
- }
- echo '</select></label></p></div>';
- }
-
- function _rss_link( $type = 'posts', $args ) {
- if ( 'posts' == $type ) {
- $type_text = __( 'Posts', 'jetpack' );
- $rss_type = 'rss2_url';
- } elseif ( 'comments' == $type ) {
- $type_text = __( 'Comments', 'jetpack' );
- $rss_type = 'comments_rss2_url';
- }
-
- $subscribe_to = sprintf( __( 'Subscribe to %s', 'jetpack' ), $type_text );
-
- $link_item = '';
- $format = $args['format'];
-
- /**
- * Filters the target link attribute for the RSS link in the RSS widget.
- *
- * @module widgets
- *
- * @since 3.4.0
- *
- * @param bool false Control whether the link should open in a new tab. Default to false.
- */
- if ( apply_filters( 'jetpack_rsslinks_widget_target_blank', false ) ) {
- $link_target = '_blank';
- } else {
- $link_target = '_self';
- }
-
- if ( 'image' == $format || 'text-image' == $format ) {
- /**
- * Filters the image used as RSS icon in the RSS widget.
- *
- * @module widgets
- *
- * @since 3.6.0
- *
- * @param string $var URL of RSS Widget icon.
- */
- $link_image = apply_filters( 'jetpack_rss_widget_icon', plugins_url( 'images/rss/' . $args['imagecolor'] . '-' . $args['imagesize'] . '.png', dirname( dirname( __FILE__ ) ) ) );
- $link_item = '<a target="' . $link_target . '" href="' . get_bloginfo( $rss_type ) . '" title="' . esc_attr( $subscribe_to ) . '"><img src="' . esc_url( $link_image ) . '" alt="RSS Feed" /></a>';
- }
- if ( 'text-image' == $format ) {
- $link_item .= '&nbsp;<a target="' . $link_target . '" href="' . get_bloginfo( $rss_type ) . '" title="' . esc_attr( $subscribe_to ) . '">' . esc_html__( 'RSS - ' . $type_text, 'jetpack' ) . '</a>';
- }
- if ( 'text' == $format ) {
- $link_item = '<a target="' . $link_target . '" href="' . get_bloginfo( $rss_type ) . '" title="' . esc_attr( $subscribe_to ) . '">' . esc_html__( 'RSS - ' . $type_text, 'jetpack' ) . '</a>';
- }
-
- if ( 'text' == $format ) {
- echo '<li>';
- } else {
- echo '<p>';
- }
- echo $link_item;
- if ( 'text' == $format ) {
- echo '</li>';
- } else {
- echo '</p>';
- }
-
- }
-} // Class Jetpack_RSS_Links_Widget
-
-function jetpack_rss_links_widget_init() {
- register_widget( 'Jetpack_RSS_Links_Widget' );
-}
-add_action( 'widgets_init', 'jetpack_rss_links_widget_init' );
diff --git a/plugins/jetpack/modules/widgets/search.php b/plugins/jetpack/modules/widgets/search.php
deleted file mode 100644
index 54d866b5..00000000
--- a/plugins/jetpack/modules/widgets/search.php
+++ /dev/null
@@ -1,815 +0,0 @@
-<?php
-/**
- * Jetpack Search: Jetpack_Search_Widget class
- *
- * @package Jetpack
- * @subpackage Jetpack Search
- * @since 5.0.0
- */
-
-add_action( 'widgets_init', 'jetpack_search_widget_init' );
-
-function jetpack_search_widget_init() {
- if ( ! Jetpack::is_active() || ! Jetpack_Plan::supports( 'search' ) ) {
- return;
- }
-
- require_once JETPACK__PLUGIN_DIR . 'modules/search/class.jetpack-search-helpers.php';
-
- register_widget( 'Jetpack_Search_Widget' );
-}
-
-/**
- * Provides a widget to show available/selected filters on searches.
- *
- * @since 5.0.0
- *
- * @see WP_Widget
- */
-class Jetpack_Search_Widget extends WP_Widget {
-
- /**
- * The Jetpack_Search instance.
- *
- * @since 5.7.0
- * @var Jetpack_Search
- */
- protected $jetpack_search;
-
- /**
- * Number of aggregations (filters) to show by default.
- *
- * @since 5.8.0
- * @var int
- */
- const DEFAULT_FILTER_COUNT = 5;
-
- /**
- * Default sort order for search results.
- *
- * @since 5.8.0
- * @var string
- */
- const DEFAULT_SORT = 'relevance_desc';
-
- /**
- * Jetpack_Search_Widget constructor.
- *
- * @since 5.0.0
- */
- public function __construct( $name = null ) {
- if ( empty( $name ) ) {
- $name = esc_html__( 'Search', 'jetpack' );
- }
- parent::__construct(
- Jetpack_Search_Helpers::FILTER_WIDGET_BASE,
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', $name ),
- array(
- 'classname' => 'jetpack-filters widget_search',
- 'description' => __( 'Replaces the default search with an Elasticsearch-powered search interface and filters.', 'jetpack' ),
- )
- );
-
- if (
- Jetpack_Search_Helpers::is_active_widget( $this->id ) &&
- ! $this->is_search_active()
- ) {
- $this->activate_search();
- }
-
- if ( is_admin() ) {
- add_action( 'sidebar_admin_setup', array( $this, 'widget_admin_setup' ) );
- } else {
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_frontend_scripts' ) );
- }
-
- add_action( 'jetpack_search_render_filters_widget_title', array( 'Jetpack_Search_Template_Tags', 'render_widget_title' ), 10, 3 );
- add_action( 'jetpack_search_render_filters', array( 'Jetpack_Search_Template_Tags', 'render_available_filters' ), 10, 2 );
- }
-
- /**
- * Check whether search is currently active
- *
- * @since 6.3
- */
- public function is_search_active() {
- return Jetpack::is_module_active( 'search' );
- }
-
- /**
- * Activate search
- *
- * @since 6.3
- */
- public function activate_search() {
- Jetpack::activate_module( 'search', false, false );
- }
-
-
- /**
- * Enqueues the scripts and styles needed for the customizer.
- *
- * @since 5.7.0
- */
- public function widget_admin_setup() {
- wp_enqueue_style( 'widget-jetpack-search-filters', plugins_url( 'search/css/search-widget-admin-ui.css', __FILE__ ) );
-
- // Required for Tracks
- wp_register_script(
- 'jp-tracks',
- '//stats.wp.com/w.js',
- array(),
- gmdate( 'YW' ),
- true
- );
-
- wp_register_script(
- 'jp-tracks-functions',
- plugins_url( '_inc/lib/tracks/tracks-callables.js', JETPACK__PLUGIN_FILE ),
- array(),
- JETPACK__VERSION,
- false
- );
-
- wp_register_script(
- 'jetpack-search-widget-admin',
- plugins_url( 'search/js/search-widget-admin.js', __FILE__ ),
- array( 'jquery', 'jquery-ui-sortable', 'jp-tracks', 'jp-tracks-functions' ),
- JETPACK__VERSION
- );
-
- wp_localize_script(
- 'jetpack-search-widget-admin', 'jetpack_search_filter_admin', array(
- 'defaultFilterCount' => self::DEFAULT_FILTER_COUNT,
- 'tracksUserData' => Jetpack_Tracks_Client::get_connected_user_tracks_identity(),
- 'tracksEventData' => array(
- 'is_customizer' => (int) is_customize_preview(),
- ),
- 'i18n' => array(
- 'month' => Jetpack_Search_Helpers::get_date_filter_type_name( 'month', false ),
- 'year' => Jetpack_Search_Helpers::get_date_filter_type_name( 'year', false ),
- 'monthUpdated' => Jetpack_Search_Helpers::get_date_filter_type_name( 'month', true ),
- 'yearUpdated' => Jetpack_Search_Helpers::get_date_filter_type_name( 'year', true ),
- ),
- )
- );
-
- wp_enqueue_script( 'jetpack-search-widget-admin' );
- }
-
- /**
- * Enqueue scripts and styles for the frontend.
- *
- * @since 5.8.0
- */
- public function enqueue_frontend_scripts() {
- if ( ! is_active_widget( false, false, $this->id_base, true ) ) {
- return;
- }
-
- wp_enqueue_script(
- 'jetpack-search-widget',
- plugins_url( 'search/js/search-widget.js', __FILE__ ),
- array( 'jquery' ),
- JETPACK__VERSION,
- true
- );
-
- wp_enqueue_style( 'jetpack-search-widget', plugins_url( 'search/css/search-widget-frontend.css', __FILE__ ) );
- }
-
- /**
- * Get the list of valid sort types/orders.
- *
- * @since 5.8.0
- *
- * @return array The sort orders.
- */
- private function get_sort_types() {
- return array(
- 'relevance|DESC' => is_admin() ? esc_html__( 'Relevance (recommended)', 'jetpack' ) : esc_html__( 'Relevance', 'jetpack' ),
- 'date|DESC' => esc_html__( 'Newest first', 'jetpack' ),
- 'date|ASC' => esc_html__( 'Oldest first', 'jetpack' ),
- );
- }
-
- /**
- * Callback for an array_filter() call in order to only get filters for the current widget.
- *
- * @see Jetpack_Search_Widget::widget()
- *
- * @since 5.7.0
- *
- * @param array $item Filter item.
- *
- * @return bool Whether the current filter item is for the current widget.
- */
- function is_for_current_widget( $item ) {
- return isset( $item['widget_id'] ) && $this->id == $item['widget_id'];
- }
-
- /**
- * This method returns a boolean for whether the widget should show site-wide filters for the site.
- *
- * This is meant to provide backwards-compatibility for VIP, and other professional plan users, that manually
- * configured filters via `Jetpack_Search::set_filters()`.
- *
- * @since 5.7.0
- *
- * @return bool Whether the widget should display site-wide filters or not.
- */
- public function should_display_sitewide_filters() {
- $filter_widgets = get_option( 'widget_jetpack-search-filters' );
-
- // This shouldn't be empty, but just for sanity
- if ( empty( $filter_widgets ) ) {
- return false;
- }
-
- // If any widget has any filters, return false
- foreach ( $filter_widgets as $number => $widget ) {
- $widget_id = sprintf( '%s-%d', $this->id_base, $number );
- if ( ! empty( $widget['filters'] ) && is_active_widget( false, $widget_id, $this->id_base ) ) {
- return false;
- }
- }
-
- return true;
- }
-
- public function jetpack_search_populate_defaults( $instance ) {
- $instance = wp_parse_args(
- (array) $instance, array(
- 'title' => '',
- 'search_box_enabled' => true,
- 'user_sort_enabled' => true,
- 'sort' => self::DEFAULT_SORT,
- 'filters' => array( array() ),
- 'post_types' => array(),
- )
- );
-
- return $instance;
- }
-
- /**
- * Responsible for rendering the widget on the frontend.
- *
- * @since 5.0.0
- *
- * @param array $args Widgets args supplied by the theme.
- * @param array $instance The current widget instance.
- */
- public function widget( $args, $instance ) {
- $instance = $this->jetpack_search_populate_defaults( $instance );
-
- $display_filters = false;
-
- if ( Jetpack::is_development_mode() ) {
- echo $args['before_widget'];
- ?><div id="<?php echo esc_attr( $this->id ); ?>-wrapper">
- <div class="jetpack-search-sort-wrapper">
- <label>
- <?php esc_html_e( 'Jetpack Search not supported in Development Mode', 'jetpack' ); ?>
- </label>
- </div>
- </div><?php
- echo $args['after_widget'];
- return;
- }
-
- if ( is_search() ) {
- if ( Jetpack_Search_Helpers::should_rerun_search_in_customizer_preview() ) {
- Jetpack_Search::instance()->update_search_results_aggregations();
- }
-
- $filters = Jetpack_Search::instance()->get_filters();
-
- if ( ! Jetpack_Search_Helpers::are_filters_by_widget_disabled() && ! $this->should_display_sitewide_filters() ) {
- $filters = array_filter( $filters, array( $this, 'is_for_current_widget' ) );
- }
-
- if ( ! empty( $filters ) ) {
- $display_filters = true;
- }
- }
-
- if ( ! $display_filters && empty( $instance['search_box_enabled'] ) && empty( $instance['user_sort_enabled'] ) ) {
- return;
- }
-
- $title = isset( $instance['title'] ) ? $instance['title'] : '';
-
- if ( empty( $title ) ) {
- $title = '';
- }
-
- /** This filter is documented in core/src/wp-includes/default-widgets.php */
- $title = apply_filters( 'widget_title', $title, $instance, $this->id_base );
-
- echo $args['before_widget'];
- ?><div id="<?php echo esc_attr( $this->id ); ?>-wrapper">
- <?php
-
- if ( ! empty( $title ) ) {
- /**
- * Responsible for displaying the title of the Jetpack Search filters widget.
- *
- * @module search
- *
- * @since 5.7.0
- *
- * @param string $title The widget's title
- * @param string $args['before_title'] The HTML tag to display before the title
- * @param string $args['after_title'] The HTML tag to display after the title
- */
- do_action( 'jetpack_search_render_filters_widget_title', $title, $args['before_title'], $args['after_title'] );
- }
-
- $default_sort = isset( $instance['sort'] ) ? $instance['sort'] : self::DEFAULT_SORT;
- list( $orderby, $order ) = $this->sorting_to_wp_query_param( $default_sort );
- $current_sort = "{$orderby}|{$order}";
-
- // we need to dynamically inject the sort field into the search box when the search box is enabled, and display
- // it separately when it's not.
- if ( ! empty( $instance['search_box_enabled'] ) ) {
- Jetpack_Search_Template_Tags::render_widget_search_form( $instance['post_types'], $orderby, $order );
- }
-
- if ( ! empty( $instance['search_box_enabled'] ) && ! empty( $instance['user_sort_enabled'] ) ) :
- ?>
- <div class="jetpack-search-sort-wrapper">
- <label>
- <?php esc_html_e( 'Sort by', 'jetpack' ); ?>
- <select class="jetpack-search-sort">
- <?php foreach ( $this->get_sort_types() as $sort => $label ) { ?>
- <option value="<?php echo esc_attr( $sort ); ?>" <?php selected( $current_sort, $sort ); ?>>
- <?php echo esc_html( $label ); ?>
- </option>
- <?php } ?>
- </select>
- </label>
- </div>
- <?php
- endif;
-
- if ( $display_filters ) {
- /**
- * Responsible for rendering filters to narrow down search results.
- *
- * @module search
- *
- * @since 5.8.0
- *
- * @param array $filters The possible filters for the current query.
- * @param array $post_types An array of post types to limit filtering to.
- */
- do_action(
- 'jetpack_search_render_filters',
- $filters,
- isset( $instance['post_types'] ) ? $instance['post_types'] : null
- );
- }
-
- $this->maybe_render_sort_javascript( $instance, $order, $orderby );
-
- echo '</div>';
- echo $args['after_widget'];
- }
-
- /**
- * Renders JavaScript for the sorting controls on the frontend.
- *
- * This JS is a bit complicated, but here's what it's trying to do:
- * - find the search form
- * - find the orderby/order fields and set default values
- * - detect changes to the sort field, if it exists, and use it to set the order field values
- *
- * @since 5.8.0
- *
- * @param array $instance The current widget instance.
- * @param string $order The order to initialize the select with.
- * @param string $orderby The orderby to initialize the select with.
- */
- private function maybe_render_sort_javascript( $instance, $order, $orderby ) {
- if ( ! empty( $instance['user_sort_enabled'] ) ) :
- ?>
- <script type="text/javascript">
- jQuery( document ).ready( function( $ ) {
- var orderByDefault = '<?php echo 'date' === $orderby ? 'date' : 'relevance'; ?>',
- orderDefault = '<?php echo 'ASC' === $order ? 'ASC' : 'DESC'; ?>',
- widgetId = decodeURIComponent( '<?php echo rawurlencode( $this->id ); ?>' ),
- searchQuery = decodeURIComponent( '<?php echo rawurlencode( get_query_var( 's', '' ) ); ?>' ),
- isSearch = <?php echo (int) is_search(); ?>;
-
- var container = $( '#' + widgetId + '-wrapper' ),
- form = container.find('.jetpack-search-form form'),
- orderBy = form.find( 'input[name=orderby]'),
- order = form.find( 'input[name=order]'),
- searchInput = form.find( 'input[name="s"]' );
-
- orderBy.val( orderByDefault );
- order.val( orderDefault );
-
- // Some themes don't set the search query, which results in the query being lost
- // when doing a sort selection. So, if the query isn't set, let's set it now. This approach
- // is chosen over running a regex over HTML for every search query performed.
- if ( isSearch && ! searchInput.val() ) {
- searchInput.val( searchQuery );
- }
-
- searchInput.addClass( 'show-placeholder' );
-
- container.find( '.jetpack-search-sort' ).change( function( event ) {
- var values = event.target.value.split( '|' );
- orderBy.val( values[0] );
- order.val( values[1] );
-
- form.submit();
- });
- } );
- </script>
- <?php
- endif;
- }
-
- /**
- * Convert a sort string into the separate order by and order parts.
- *
- * @since 5.8.0
- *
- * @param string $sort A sort string.
- *
- * @return array Order by and order.
- */
- private function sorting_to_wp_query_param( $sort ) {
- $parts = explode( '|', $sort );
- $orderby = isset( $_GET['orderby'] )
- ? $_GET['orderby']
- : $parts[0];
-
- $order = isset( $_GET['order'] )
- ? strtoupper( $_GET['order'] )
- : ( ( isset( $parts[1] ) && 'ASC' === strtoupper( $parts[1] ) ) ? 'ASC' : 'DESC' );
-
- return array( $orderby, $order );
- }
-
- /**
- * Updates a particular instance of the widget. Validates and sanitizes the options.
- *
- * @since 5.0.0
- *
- * @param array $new_instance New settings for this instance as input by the user via Jetpack_Search_Widget::form().
- * @param array $old_instance Old settings for this instance.
- *
- * @return array Settings to save.
- */
- public function update( $new_instance, $old_instance ) {
- $instance = array();
-
- $instance['title'] = sanitize_text_field( $new_instance['title'] );
- $instance['search_box_enabled'] = empty( $new_instance['search_box_enabled'] ) ? '0' : '1';
- $instance['user_sort_enabled'] = empty( $new_instance['user_sort_enabled'] ) ? '0' : '1';
- $instance['sort'] = $new_instance['sort'];
- $instance['post_types'] = empty( $new_instance['post_types'] ) || empty( $instance['search_box_enabled'] )
- ? array()
- : array_map( 'sanitize_key', $new_instance['post_types'] );
-
- $filters = array();
- if ( isset( $new_instance['filter_type'] ) ) {
- foreach ( (array) $new_instance['filter_type'] as $index => $type ) {
- $count = intval( $new_instance['num_filters'][ $index ] );
- $count = min( 50, $count ); // Set max boundary at 50.
- $count = max( 1, $count ); // Set min boundary at 1.
-
- switch ( $type ) {
- case 'taxonomy':
- $filters[] = array(
- 'name' => sanitize_text_field( $new_instance['filter_name'][ $index ] ),
- 'type' => 'taxonomy',
- 'taxonomy' => sanitize_key( $new_instance['taxonomy_type'][ $index ] ),
- 'count' => $count,
- );
- break;
- case 'post_type':
- $filters[] = array(
- 'name' => sanitize_text_field( $new_instance['filter_name'][ $index ] ),
- 'type' => 'post_type',
- 'count' => $count,
- );
- break;
- case 'date_histogram':
- $filters[] = array(
- 'name' => sanitize_text_field( $new_instance['filter_name'][ $index ] ),
- 'type' => 'date_histogram',
- 'count' => $count,
- 'field' => sanitize_key( $new_instance['date_histogram_field'][ $index ] ),
- 'interval' => sanitize_key( $new_instance['date_histogram_interval'][ $index ] ),
- );
- break;
- }
- }
- }
-
- if ( ! empty( $filters ) ) {
- $instance['filters'] = $filters;
- }
-
- return $instance;
- }
-
- /**
- * Outputs the settings update form.
- *
- * @since 5.0.0
- *
- * @param array $instance Current settings.
- */
- public function form( $instance ) {
- $instance = $this->jetpack_search_populate_defaults( $instance );
-
- $title = strip_tags( $instance['title'] );
-
- $hide_filters = Jetpack_Search_Helpers::are_filters_by_widget_disabled();
-
- $classes = sprintf(
- 'jetpack-search-filters-widget %s %s %s',
- $hide_filters ? 'hide-filters' : '',
- $instance['search_box_enabled'] ? '' : 'hide-post-types',
- $this->id
- );
- ?>
- <div class="<?php echo esc_attr( $classes ); ?>">
- <p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>">
- <?php esc_html_e( 'Title (optional):', 'jetpack' ); ?>
- </label>
- <input
- class="widefat"
- id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"
- name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>"
- type="text"
- value="<?php echo esc_attr( $title ); ?>"
- />
- </p>
-
- <p>
- <label>
- <input
- type="checkbox"
- class="jetpack-search-filters-widget__search-box-enabled"
- name="<?php echo esc_attr( $this->get_field_name( 'search_box_enabled' ) ); ?>"
- <?php checked( $instance['search_box_enabled'] ); ?>
- />
- <?php esc_html_e( 'Show search box', 'jetpack' ); ?>
- </label>
- </p>
- <p>
- <label>
- <input
- type="checkbox"
- class="jetpack-search-filters-widget__sort-controls-enabled"
- name="<?php echo esc_attr( $this->get_field_name( 'user_sort_enabled' ) ); ?>"
- <?php checked( $instance['user_sort_enabled'] ); ?>
- <?php disabled( ! $instance['search_box_enabled'] ); ?>
- />
- <?php esc_html_e( 'Show sort selection dropdown', 'jetpack' ); ?>
- </label>
- </p>
-
- <p class="jetpack-search-filters-widget__post-types-select">
- <label><?php esc_html_e( 'Post types to search (minimum of 1):', 'jetpack' ); ?></label>
- <?php foreach ( get_post_types( array( 'exclude_from_search' => false ), 'objects' ) as $post_type ) : ?>
- <label>
- <input
- type="checkbox"
- value="<?php echo esc_attr( $post_type->name ); ?>"
- name="<?php echo esc_attr( $this->get_field_name( 'post_types' ) ); ?>[]"
- <?php checked( empty( $instance['post_types'] ) || in_array( $post_type->name, $instance['post_types'] ) ); ?>
- />&nbsp;
- <?php echo esc_html( $post_type->label ); ?>
- </label>
- <?php endforeach; ?>
- </p>
-
- <p>
- <label>
- <?php esc_html_e( 'Default sort order:', 'jetpack' ); ?>
- <select
- name="<?php echo esc_attr( $this->get_field_name( 'sort' ) ); ?>"
- class="widefat jetpack-search-filters-widget__sort-order">
- <?php foreach ( $this->get_sort_types() as $sort_type => $label ) { ?>
- <option value="<?php echo esc_attr( $sort_type ); ?>" <?php selected( $instance['sort'], $sort_type ); ?>>
- <?php echo esc_html( $label ); ?>
- </option>
- <?php } ?>
- </select>
- </label>
- </p>
-
- <?php if ( ! $hide_filters ) : ?>
- <script class="jetpack-search-filters-widget__filter-template" type="text/template">
- <?php echo $this->render_widget_edit_filter( array(), true ); ?>
- </script>
- <div class="jetpack-search-filters-widget__filters">
- <?php foreach ( (array) $instance['filters'] as $filter ) : ?>
- <?php $this->render_widget_edit_filter( $filter ); ?>
- <?php endforeach; ?>
- </div>
- <p class="jetpack-search-filters-widget__add-filter-wrapper">
- <a class="button jetpack-search-filters-widget__add-filter" href="#">
- <?php esc_html_e( 'Add a filter', 'jetpack' ); ?>
- </a>
- </p>
- <noscript>
- <p class="jetpack-search-filters-help">
- <?php echo esc_html_e( 'Adding filters requires JavaScript!', 'jetpack' ); ?>
- </p>
- </noscript>
- <?php if ( is_customize_preview() ) : ?>
- <p class="jetpack-search-filters-help">
- <a href="https://jetpack.com/support/search/#filters-not-showing-up" target="_blank">
- <?php esc_html_e( "Why aren't my filters appearing?", 'jetpack' ); ?>
- </a>
- </p>
- <?php endif; ?>
- <?php endif; ?>
- </div>
- <?php
- }
-
- /**
- * We need to render HTML in two formats: an Underscore template (client-side)
- * and native PHP (server-side). This helper function allows for easy rendering
- * of attributes in both formats.
- *
- * @since 5.8.0
- *
- * @param string $name Attribute name.
- * @param string $value Attribute value.
- * @param bool $is_template Whether this is for an Underscore template or not.
- */
- private function render_widget_attr( $name, $value, $is_template ) {
- echo $is_template ? "<%= $name %>" : esc_attr( $value );
- }
-
- /**
- * We need to render HTML in two formats: an Underscore template (client-size)
- * and native PHP (server-side). This helper function allows for easy rendering
- * of the "selected" attribute in both formats.
- *
- * @since 5.8.0
- *
- * @param string $name Attribute name.
- * @param string $value Attribute value.
- * @param string $compare Value to compare to the attribute value to decide if it should be selected.
- * @param bool $is_template Whether this is for an Underscore template or not.
- */
- private function render_widget_option_selected( $name, $value, $compare, $is_template ) {
- $compare_js = rawurlencode( $compare );
- echo $is_template ? "<%= decodeURIComponent( '$compare_js' ) === $name ? 'selected=\"selected\"' : '' %>" : selected( $value, $compare );
- }
-
- /**
- * Responsible for rendering a single filter in the customizer or the widget administration screen in wp-admin.
- *
- * We use this method for two purposes - rendering the fields server-side, and also rendering a script template for Underscore.
- *
- * @since 5.7.0
- *
- * @param array $filter The filter to render.
- * @param bool $is_template Whether this is for an Underscore template or not.
- */
- public function render_widget_edit_filter( $filter, $is_template = false ) {
- $args = wp_parse_args(
- $filter, array(
- 'name' => '',
- 'type' => 'taxonomy',
- 'taxonomy' => '',
- 'post_type' => '',
- 'field' => '',
- 'interval' => '',
- 'count' => self::DEFAULT_FILTER_COUNT,
- )
- );
-
- $args['name_placeholder'] = Jetpack_Search_Helpers::generate_widget_filter_name( $args );
-
- ?>
- <div class="jetpack-search-filters-widget__filter is-<?php $this->render_widget_attr( 'type', $args['type'], $is_template ); ?>">
- <p class="jetpack-search-filters-widget__type-select">
- <label>
- <?php esc_html_e( 'Filter Type:', 'jetpack' ); ?>
- <select name="<?php echo esc_attr( $this->get_field_name( 'filter_type' ) ); ?>[]" class="widefat filter-select">
- <option value="taxonomy" <?php $this->render_widget_option_selected( 'type', $args['type'], 'taxonomy', $is_template ); ?>>
- <?php esc_html_e( 'Taxonomy', 'jetpack' ); ?>
- </option>
- <option value="post_type" <?php $this->render_widget_option_selected( 'type', $args['type'], 'post_type', $is_template ); ?>>
- <?php esc_html_e( 'Post Type', 'jetpack' ); ?>
- </option>
- <option value="date_histogram" <?php $this->render_widget_option_selected( 'type', $args['type'], 'date_histogram', $is_template ); ?>>
- <?php esc_html_e( 'Date', 'jetpack' ); ?>
- </option>
- </select>
- </label>
- </p>
-
- <p class="jetpack-search-filters-widget__taxonomy-select">
- <label>
- <?php
- esc_html_e( 'Choose a taxonomy:', 'jetpack' );
- $seen_taxonomy_labels = array();
- ?>
- <select name="<?php echo esc_attr( $this->get_field_name( 'taxonomy_type' ) ); ?>[]" class="widefat taxonomy-select">
- <?php foreach ( get_taxonomies( array( 'public' => true ), 'objects' ) as $taxonomy ) : ?>
- <option value="<?php echo esc_attr( $taxonomy->name ); ?>" <?php $this->render_widget_option_selected( 'taxonomy', $args['taxonomy'], $taxonomy->name, $is_template ); ?>>
- <?php
- $label = in_array( $taxonomy->label, $seen_taxonomy_labels )
- ? sprintf(
- /* translators: %1$s is the taxonomy name, %2s is the name of its type to help distinguish between several taxonomies with the same name, e.g. category and tag. */
- _x( '%1$s (%2$s)', 'A label for a taxonomy selector option', 'jetpack' ),
- $taxonomy->label,
- $taxonomy->name
- )
- : $taxonomy->label;
- echo esc_html( $label );
- $seen_taxonomy_labels[] = $taxonomy->label;
- ?>
- </option>
- <?php endforeach; ?>
- </select>
- </label>
- </p>
-
- <p class="jetpack-search-filters-widget__date-histogram-select">
- <label>
- <?php esc_html_e( 'Choose a field:', 'jetpack' ); ?>
- <select name="<?php echo esc_attr( $this->get_field_name( 'date_histogram_field' ) ); ?>[]" class="widefat date-field-select">
- <option value="post_date" <?php $this->render_widget_option_selected( 'field', $args['field'], 'post_date', $is_template ); ?>>
- <?php esc_html_e( 'Date', 'jetpack' ); ?>
- </option>
- <option value="post_date_gmt" <?php $this->render_widget_option_selected( 'field', $args['field'], 'post_date_gmt', $is_template ); ?>>
- <?php esc_html_e( 'Date GMT', 'jetpack' ); ?>
- </option>
- <option value="post_modified" <?php $this->render_widget_option_selected( 'field', $args['field'], 'post_modified', $is_template ); ?>>
- <?php esc_html_e( 'Modified', 'jetpack' ); ?>
- </option>
- <option value="post_modified_gmt" <?php $this->render_widget_option_selected( 'field', $args['field'], 'post_modified_gmt', $is_template ); ?>>
- <?php esc_html_e( 'Modified GMT', 'jetpack' ); ?>
- </option>
- </select>
- </label>
- </p>
-
- <p class="jetpack-search-filters-widget__date-histogram-select">
- <label>
- <?php esc_html_e( 'Choose an interval:' ); ?>
- <select name="<?php echo esc_attr( $this->get_field_name( 'date_histogram_interval' ) ); ?>[]" class="widefat date-interval-select">
- <option value="month" <?php $this->render_widget_option_selected( 'interval', $args['interval'], 'month', $is_template ); ?>>
- <?php esc_html_e( 'Month', 'jetpack' ); ?>
- </option>
- <option value="year" <?php $this->render_widget_option_selected( 'interval', $args['interval'], 'year', $is_template ); ?>>
- <?php esc_html_e( 'Year', 'jetpack' ); ?>
- </option>
- </select>
- </label>
- </p>
-
- <p class="jetpack-search-filters-widget__title">
- <label>
- <?php esc_html_e( 'Title:', 'jetpack' ); ?>
- <input
- class="widefat"
- type="text"
- name="<?php echo esc_attr( $this->get_field_name( 'filter_name' ) ); ?>[]"
- value="<?php $this->render_widget_attr( 'name', $args['name'], $is_template ); ?>"
- placeholder="<?php $this->render_widget_attr( 'name_placeholder', $args['name_placeholder'], $is_template ); ?>"
- />
- </label>
- </p>
-
- <p>
- <label>
- <?php esc_html_e( 'Maximum number of filters (1-50):', 'jetpack' ); ?>
- <input
- class="widefat filter-count"
- name="<?php echo esc_attr( $this->get_field_name( 'num_filters' ) ); ?>[]"
- type="number"
- value="<?php $this->render_widget_attr( 'count', $args['count'], $is_template ); ?>"
- min="1"
- max="50"
- step="1"
- required
- />
- </label>
- </p>
-
- <p class="jetpack-search-filters-widget__controls">
- <a href="#" class="delete"><?php esc_html_e( 'Remove', 'jetpack' ); ?></a>
- </p>
- </div>
- <?php
- }
-}
diff --git a/plugins/jetpack/modules/widgets/search/css/search-widget-admin-ui.css b/plugins/jetpack/modules/widgets/search/css/search-widget-admin-ui.css
deleted file mode 100644
index a3313f05..00000000
--- a/plugins/jetpack/modules/widgets/search/css/search-widget-admin-ui.css
+++ /dev/null
@@ -1,87 +0,0 @@
-.jetpack-search-filters-widget__filter {
- background: #f9f9f9;
- border: 1px solid #dfdfdf;
- padding: 0 12px;
- margin-bottom: 12px;
- cursor: move;
-}
-
-.jetpack-search-filters-widget__controls {
- text-align: right;
-}
-
-.jetpack-search-filters-widget .jetpack-search-filters-widget__sort-controls-enabled {
- margin-left: 24px;
-}
-
-.jetpack-search-filters-widget__controls .delete {
- color: #a00;
-}
-
-.jetpack-search-filters-widget.hide-filters .jetpack-search-filters-widget__filter {
- display: none;
-}
-
-.button.jetpack-search-filters-widget__add-filter {
- margin-bottom: 10px;
-}
-
-/* Assume that taxonomy select is the default selected. Other controls should be hidden here. */
-.jetpack-search-filters-widget__post-type-select {
- display: none;
-}
-
-.jetpack-search-filters-widget__date-histogram-select {
- display: none;
-}
-
-.jetpack-search-filters-widget__filter-placeholder {
- border: 1px #555 dashed;
- background-color: #eee;
- height: 286px;
- margin-bottom: 12px;
-}
-
-/* When post type is selected, remove the other controls */
-.jetpack-search-filters-widget__filter.is-post_type .jetpack-search-filters-widget__taxonomy-select {
- display: none;
-}
-
-/* When date is selected, remove the other controls */
-.jetpack-search-filters-widget__filter.is-date_histogram .jetpack-search-filters-widget__date-histogram-select {
- display: inline;
-}
-
-.jetpack-search-filters-widget__filter.is-date_histogram .jetpack-search-filters-widget__taxonomy-select {
- display: none;
-}
-
-.jetpack-search-filters-widget.hide-post-types .jetpack-search-filters-widget__post-types-select {
- display: none;
-}
-
-.jetpack-search-filters-help:before {
- display: inline-block;
- position: relative;
- font-family: dashicons;
- font-size: 20px;
- top: 5px;
- line-height: 1px;
- content:"\f223";
-}
-.jetpack-search-filters-help {
- padding: 5px 5px 15px 0;
-}
-
-.jetpack-search-filters-widget__post-types-select label {
- display: block;
- margin-bottom: 4px;
-}
-
-.jetpack-search-filters-widget__post-types-select input[type="checkbox"] {
- margin-left: 24px;
-}
-
-body.no-js .jetpack-search-filters-widget__add-filter-wrapper {
- display: none;
-}
diff --git a/plugins/jetpack/modules/widgets/search/css/search-widget-frontend.css b/plugins/jetpack/modules/widgets/search/css/search-widget-frontend.css
deleted file mode 100644
index 58c7cf3e..00000000
--- a/plugins/jetpack/modules/widgets/search/css/search-widget-frontend.css
+++ /dev/null
@@ -1,66 +0,0 @@
-.jetpack-search-filters-widget__sub-heading {
- font-size: inherit;
- font-weight: bold;
- margin: 0 0 .5em;
- padding: 0;
-}
-
-/* The first heading after the form */
-.jetpack-search-form + .jetpack-search-filters-widget__sub-heading {
- margin-top: 1.5em;
- margin-bottom: 0.5em !important;
-}
-
-.jetpack-search-filters-widget__clear {
- margin-top: 0.5em;
- margin-bottom: 0.5em;
-}
-
-.jetpack-search-sort-wrapper {
- margin-top: 1em;
- margin-bottom: 1.5em;
-}
-
-.jetpack-search-sort-wrapper label {
- display: inherit;
-}
-
-.widget_search .jetpack-search-filters-widget__filter-list input[type="checkbox"] {
- width: auto;
- height: auto;
-}
-
-ul.jetpack-search-filters-widget__filter-list li {
- border: none;
- padding: 0;
- list-style: none;
-}
-
-ul.jetpack-search-filters-widget__filter-list li a {
- text-decoration: none;
-}
-
-ul.jetpack-search-filters-widget__filter-list li a:hover {
- box-shadow: none;
-}
-
-ul.jetpack-search-filters-widget__filter-list li label {
- font-weight: inherit;
- display: inherit;
-}
-
-.jetpack-search-filters-widget__filter-list {
- list-style: none;
-}
-
-ul.jetpack-search-filters-widget__filter-list {
- margin-bottom: 1.5em;
-}
-
-body.search .jetpack-search-form input[name="s"]::placeholder {
- color: transparent;
-}
-
-body.search .jetpack-search-form input[name="s"].show-placeholder::placeholder {
- color: inherit;
-}
diff --git a/plugins/jetpack/modules/widgets/search/js/search-widget-admin.js b/plugins/jetpack/modules/widgets/search/js/search-widget-admin.js
deleted file mode 100644
index 5840a408..00000000
--- a/plugins/jetpack/modules/widgets/search/js/search-widget-admin.js
+++ /dev/null
@@ -1,360 +0,0 @@
-/* globals jetpack_search_filter_admin, jQuery, analytics */
-
-( function( $, args ) {
- var defaultFilterCount = ( 'undefined' !== typeof args && args.defaultFilterCount ) ?
- args.defaultFilterCount :
- 5; // Just in case we couldn't find the defaultFiltercount arg
-
- $( document ).ready( function() {
- setListeners();
-
- window.JetpackSearch = window.JetpackSearch || {};
- window.JetpackSearch.addFilter = addFilter;
-
- // Initialize Tracks
- if ( 'undefined' !== typeof analytics && args.tracksUserData ) {
- analytics.initialize( args.tracksUserData.userid, args.tracksUserData.username );
- }
- } );
-
- function generateFilterTitlePlaceholder( container ) {
- var placeholder = null,
- isModified = null,
- isMonth = null,
- type = container.find( '.filter-select' ).val();
-
- if ( 'taxonomy' === type ) {
- placeholder = container.find('.taxonomy-select option:selected').text().trim();
- } else if ( 'date_histogram' === type && args && args.i18n ) {
- isModified = ( -1 !== container.find( '.date-field-select' ).val().indexOf( 'modified' ) );
- isMonth = ( 'month' === container.find( '.date-interval-select' ).val() );
-
- if ( isMonth ) {
- placeholder = isModified ?
- args.i18n.monthUpdated :
- args.i18n.month;
- } else {
- placeholder = isModified ?
- args.i18n.yearUpdated :
- args.i18n.year;
- }
- } else {
- placeholder = container.find('.filter-select option:selected').text().trim();
- }
-
- $( container ).find('.jetpack-search-filters-widget__title input').prop( 'placeholder', placeholder );
- }
-
- var addFilter = function( filtersContainer, args ) {
- var template = _.template(
- filtersContainer
- .closest( '.jetpack-search-filters-widget' )
- .find( '.jetpack-search-filters-widget__filter-template' )
- .html()
- );
- generateFilterTitlePlaceholder( filtersContainer.append( template( args ) ) );
- };
-
- var setListeners = function( widget ) {
- widget = ( 'undefined' === typeof widget ) ?
- $( '.jetpack-search-filters-widget' ):
- widget;
-
- var getContainer = function( el ) {
- return $( el ).closest('.jetpack-search-filters-widget__filter');
- };
-
- widget.on( 'change', '.filter-select', function() {
- var select = $( this ),
- selectVal = select.val(),
- eventArgs = {
- is_customizer: args.tracksEventData.is_customizer
- };
-
- eventArgs.type = selectVal;
-
- select
- .closest( '.jetpack-search-filters-widget__filter' )
- .attr( 'class', 'jetpack-search-filters-widget__filter' )
- .addClass( 'is-' + selectVal );
-
- generateFilterTitlePlaceholder( getContainer( this ) );
-
- trackAndBumpMCStats( 'changed_filter_type', eventArgs );
- } );
-
- // enable showing sort controls only if showing search box is enabled
- widget.on( 'change', '.jetpack-search-filters-widget__search-box-enabled', function() {
- var checkbox = $( this ),
- checkboxVal = checkbox.is(':checked'),
- filterParent = checkbox.closest( '.jetpack-search-filters-widget' ),
- sortControl = filterParent.find( '.jetpack-search-filters-widget__sort-controls-enabled' );
-
- filterParent.toggleClass( 'hide-post-types' );
-
- if ( checkboxVal ) {
- sortControl.removeAttr( 'disabled' );
- trackAndBumpMCStats( 'enabled_search_box', args.tracksEventData );
- } else {
- sortControl.prop( 'checked', false );
- sortControl.prop( 'disabled', true );
- trackAndBumpMCStats( 'disabled_search_box', args.tracksEventData );
- }
- } );
-
- widget.on( 'change', '.jetpack-search-filters-widget__sort-controls-enabled', function() {
- if ( $( this ).is( ':checked' ) ) {
- trackAndBumpMCStats( 'enabled_sort_controls', args.tracksEventData );
- } else {
- trackAndBumpMCStats( 'disabled_sort_controls', args.tracksEventData );
- }
- } );
-
- widget.on( 'click', '.jetpack-search-filters-widget__post-types-select input[type="checkbox"]', function( e ) {
- var t = $( this );
- var siblingsChecked = t.closest( '.jetpack-search-filters-widget' )
- .find( '.jetpack-search-filters-widget__post-types-select input[type="checkbox"]:checked' );
-
- if ( 0 === siblingsChecked.length ) {
- e.preventDefault();
- e.stopPropagation();
-
- trackAndBumpMCStats( 'attempted_no_post_types', args.tracksEventData );
- }
- } );
-
- widget.on( 'change', '.jetpack-search-filters-widget__post-types-select input[type="checkbox"]', function() {
- var t = $( this );
- var eventArgs = {
- is_customizer: args.tracksEventData.is_customizer,
- post_type: t.val()
- };
-
- if ( wp && wp.customize ) {
- wp.customize.state( 'saved' ).set( false );
- }
-
- if ( t.is( ':checked' ) ) {
- trackAndBumpMCStats( 'added_post_type', eventArgs );
- } else {
- trackAndBumpMCStats( 'removed_post_type', eventArgs );
- }
- } );
-
- widget.on( 'change', '.jetpack-search-filters-widget__sort-order', function() {
- var eventArgs = {
- is_customizer: args.tracksEventData.is_customizer
- };
-
- eventArgs.order = $( this ).val();
-
- if ( wp && wp.customize ) {
- wp.customize.state( 'saved' ).set( false );
- }
-
- trackAndBumpMCStats( 'changed_sort_order', eventArgs );
- } );
-
- widget.on( 'change', '.jetpack-search-filters-widget__taxonomy-select select', function() {
- var eventArgs = {
- is_customizer: args.tracksEventData.is_customizer
- };
-
- eventArgs.taxonomy = $( this ).val();
-
- generateFilterTitlePlaceholder( getContainer( this ) );
-
- if ( wp && wp.customize ) {
- wp.customize.state( 'saved' ).set( false );
- }
-
- trackAndBumpMCStats( 'changed_taxonomy', eventArgs );
- } );
-
- widget.on( 'change', 'select.date-field-select', function() {
- var eventArgs = {
- is_customizer: args.tracksEventData.is_customizer
- };
-
- eventArgs.field = $( this ).val();
-
- generateFilterTitlePlaceholder( getContainer( this ) );
-
- if ( wp && wp.customize ) {
- wp.customize.state( 'saved' ).set( false );
- }
-
- trackAndBumpMCStats( 'changed_date_field', eventArgs );
- } );
-
- widget.on( 'change', 'select.date-interval-select', function() {
- var eventArgs = {
- is_customizer: args.tracksEventData.is_customizer
- };
-
- eventArgs.interval = $( this ).val();
-
- generateFilterTitlePlaceholder( getContainer( this ) );
-
- if ( wp && wp.customize ) {
- wp.customize.state( 'saved' ).set( false );
- }
-
- trackAndBumpMCStats( 'changed_date_interval', eventArgs );
- } );
-
- widget.on( 'change', 'input.filter-count', function() {
- var eventArgs = {
- is_customizer: args.tracksEventData.is_customizer
- };
-
- eventArgs.count = $( this ).val();
-
- if ( wp && wp.customize ) {
- wp.customize.state( 'saved' ).set( false );
- }
-
- trackAndBumpMCStats( 'changed_filter_count', eventArgs );
- } );
-
- // add filter button
- widget.on( 'click', '.jetpack-search-filters-widget__add-filter', function( e ) {
- e.preventDefault();
-
- var filtersContainer = $( this )
- .closest( '.jetpack-search-filters-widget' )
- .find( '.jetpack-search-filters-widget__filters' );
-
- addFilter( filtersContainer, {
- type: 'taxonomy',
- taxonomy: '',
- post_type: '',
- field: '',
- interval: '',
- count: defaultFilterCount,
- name_placeholder: '',
- name: ''
- } );
-
- if ( wp && wp.customize ) {
- wp.customize.state( 'saved' ).set( false );
- }
-
- // Trigger change event to let legacy widget admin know the widget state is "dirty"
- filtersContainer
- .find( '.jetpack-search-filters-widget__filter' )
- .find( 'input, textarea, select' )
- .change();
-
- trackAndBumpMCStats( 'added_filter', args.tracksEventData );
- } );
-
- widget.on( 'click', '.jetpack-search-filters-widget__controls .delete', function( e ) {
- e.preventDefault();
- var filter = $( this ).closest( '.jetpack-search-filters-widget__filter' ),
- eventArgs = {
- is_customizer: args.tracksEventData.is_customizer
- };
-
- eventArgs.type = filter.find( '.filter-select' ).val();
-
- switch ( eventArgs.type ) {
- case 'taxonomy':
- eventArgs.taxonomy = filter.find( '.jetpack-search-filters-widget__taxonomy-select select' ).val();
- break;
- case 'date_histogram':
- eventArgs.dateField = filter.find( '.jetpack-search-filters-widget__date-histogram-select:first select' ).val();
- eventArgs.dateInterval = filter.find( '.jetpack-search-filters-widget__date-histogram-select:nth-child( 2 ) select' ).val();
- break;
- }
-
- eventArgs.filterCount = filter.find( '.filter-count' ).val();
-
- trackAndBumpMCStats( 'deleted_filter', eventArgs );
-
- filter.find( 'input, textarea, select' ).change();
- filter.remove();
-
- if ( wp && wp.customize ) {
- wp.customize.state( 'saved' ).set( false );
- }
- } );
-
- // make the filters sortable
- $( '.jetpack-search-filters-widget__filters' ).sortable( {
- placeholder: 'jetpack-search-filters-widget__filter-placeholder',
- axis: 'y',
- revert: true,
- cancel: 'input,textarea,button,select,option,.jetpack-search-filters-widget__controls a',
- change: function() {
- if ( wp && wp.customize ) {
- wp.customize.state( 'saved' ).set( false );
- }
- },
- update: function( e, ui ) {
- $( ui.item ).find( 'input, textarea, select' ).change();
- }
- } )
- .disableSelection();
- };
-
- // When widgets are updated, remove and re-add listeners
- $( document ).on( 'widget-updated widget-added', function( e, widget ) {
- widget = $( widget );
-
- var id = widget.attr( 'id' ),
- isJetpackSearch = ( id && ( -1 !== id.indexOf( 'jetpack-search-filters' ) ) );
-
- if ( ! isJetpackSearch ) {
- return;
- }
-
- // Intentionally not tracking widget additions and updates here as these events
- // seem noisy in the customizer. We'll track those via PHP.
-
- widget.off( 'change', '.filter-select' );
- widget.off( 'click', '.jetpack-search-filters-widget__controls .delete' );
- widget.off( 'change', '.jetpack-search-filters-widget__use-filters' );
- widget.off( 'change', '.jetpack-search-filters-widget__search-box-enabled' );
- widget.off( 'change', '.jetpack-search-filters-widget__sort-controls-enabled' );
- widget.off( 'change', '.jetpack-search-filters-widget__sort-controls-enabled' );
- widget.off( 'change', '.jetpack-search-filters-widget__post-type-selector' );
- widget.off( 'change', '.jetpack-search-filters-widget__sort-order' );
- widget.off( 'change', '.jetpack-search-filters-widget__taxonomy-select' );
- widget.off( 'change', '.jetpack-search-filters-widget__date-histogram-select:first select' );
- widget.off( 'change', '.jetpack-search-filters-widget__date-histogram-select:eq(1) select' );
- widget.off( 'click', '.jetpack-search-filters-widget__post-types-select input[type="checkbox"]' );
- widget.off( 'click', '.jetpack-search-filters-widget__add-filter');
-
- setListeners( widget );
- } );
-
- /**
- * This function will fire both a Tracks and MC stat.
- *
- * Tracks: Will be prefixed by 'jetpack_widget_search_' and use underscores.
- * MC: Will not be prefixed, and will use dashes.
- *
- * Logic borrowed from `idc-notice.js`.
- *
- * @param eventName string
- * @param extraProps object
- */
- function trackAndBumpMCStats( eventName, extraProps ) {
- if ( 'undefined' === typeof extraProps || 'object' !== typeof extraProps ) {
- extraProps = {};
- }
-
- if ( eventName && eventName.length && 'undefined' !== typeof analytics && analytics.tracks && analytics.mc ) {
- // Format for Tracks
- eventName = eventName.replace( /-/g, '_' );
- eventName = eventName.indexOf( 'jetpack_widget_search_' ) !== 0 ? 'jetpack_widget_search_' + eventName : eventName;
- analytics.tracks.recordEvent( eventName, extraProps );
-
- // Now format for MC stats
- eventName = eventName.replace( 'jetpack_widget_search_', '' );
- eventName = eventName.replace( /_/g, '-' );
- analytics.mc.bumpStat( 'jetpack-search-widget', eventName );
- }
- }
-} )( jQuery, jetpack_search_filter_admin );
diff --git a/plugins/jetpack/modules/widgets/search/js/search-widget.js b/plugins/jetpack/modules/widgets/search/js/search-widget.js
deleted file mode 100644
index 8d1c4775..00000000
--- a/plugins/jetpack/modules/widgets/search/js/search-widget.js
+++ /dev/null
@@ -1,15 +0,0 @@
-jQuery( document ).ready( function() {
- var filter_list = jQuery( '.jetpack-search-filters-widget__filter-list' );
-
- filter_list.on( 'click', 'a', function() {
- var checkbox = jQuery( this ).siblings( 'input[type="checkbox"]' );
- checkbox.prop( 'checked', ! checkbox.prop( 'checked' ) );
- } );
-
- filter_list.find( 'input[type="checkbox"]' ).prop( 'disabled', false ).css( 'cursor', 'inherit' ).on( 'click', function() {
- var anchor = jQuery( this ).siblings( 'a' );
- if ( anchor.length ) {
- window.location.href = anchor.prop( 'href' );
- }
- } );
-} );
diff --git a/plugins/jetpack/modules/widgets/simple-payments.php b/plugins/jetpack/modules/widgets/simple-payments.php
deleted file mode 100644
index 4eb60bdb..00000000
--- a/plugins/jetpack/modules/widgets/simple-payments.php
+++ /dev/null
@@ -1,544 +0,0 @@
-<?php
-/**
- * Disable direct access/execution to/of the widget code.
- */
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-if ( ! class_exists( 'Jetpack_Simple_Payments_Widget' ) ) {
- /**
- * Simple Payments Button
- *
- * Display a Simple Payments Button as a Widget.
- */
- class Jetpack_Simple_Payments_Widget extends WP_Widget {
- // https://developer.paypal.com/docs/integration/direct/rest/currency-codes/
- private static $supported_currency_list = array(
- 'USD' => '$',
- 'GBP' => '&#163;',
- 'JPY' => '&#165;',
- 'BRL' => 'R$',
- 'EUR' => '&#8364;',
- 'NZD' => 'NZ$',
- 'AUD' => 'A$',
- 'CAD' => 'C$',
- 'INR' => '₹',
- 'ILS' => '₪',
- 'RUB' => '₽',
- 'MXN' => 'MX$',
- 'SEK' => 'Skr',
- 'HUF' => 'Ft',
- 'CHF' => 'CHF',
- 'CZK' => 'Kč',
- 'DKK' => 'Dkr',
- 'HKD' => 'HK$',
- 'NOK' => 'Kr',
- 'PHP' => '₱',
- 'PLN' => 'PLN',
- 'SGD' => 'S$',
- 'TWD' => 'NT$',
- 'THB' => '฿',
- );
-
- /**
- * Constructor.
- */
- function __construct() {
- parent::__construct(
- 'jetpack_simple_payments_widget',
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', __( 'Simple Payments', 'jetpack' ) ),
- array(
- 'classname' => 'jetpack-simple-payments',
- 'description' => __( 'Add a Simple Payments Button as a Widget.', 'jetpack' ),
- 'customize_selective_refresh' => true,
- )
- );
-
- global $pagenow;
- if ( is_customize_preview() || 'widgets.php' === $pagenow ) {
- add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_styles' ) );
- }
-
- $jetpack_simple_payments = Jetpack_Simple_Payments::getInstance();
- if ( is_customize_preview() && $jetpack_simple_payments->is_enabled_jetpack_simple_payments() ) {
- add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
-
- add_filter( 'customize_refresh_nonces', array( $this, 'filter_nonces' ) );
- add_action( 'wp_ajax_customize-jetpack-simple-payments-buttons-get', array( $this, 'ajax_get_payment_buttons' ) );
- add_action( 'wp_ajax_customize-jetpack-simple-payments-button-save', array( $this, 'ajax_save_payment_button' ) );
- add_action( 'wp_ajax_customize-jetpack-simple-payments-button-delete', array( $this, 'ajax_delete_payment_button' ) );
- }
-
- if ( is_active_widget( false, false, $this->id_base ) || is_customize_preview() ) {
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ) );
- }
- }
-
- /**
- * Return an associative array of default values.
- *
- * These values are used in new widgets.
- *
- * @return array Default values for the widget options.
- */
- private function defaults() {
- $current_user = wp_get_current_user();
- $default_product_id = $this->get_first_product_id();
-
- return array(
- 'title' => '',
- 'product_post_id' => $default_product_id,
- 'form_action' => '',
- 'form_product_id' => 0,
- 'form_product_title' => '',
- 'form_product_description' => '',
- 'form_product_image_id' => 0,
- 'form_product_image_src' => '',
- 'form_product_currency' => '',
- 'form_product_price' => '',
- 'form_product_multiple' => '',
- 'form_product_email' => $current_user->user_email,
- );
- }
-
- /**
- * Adds a nonce for customizing menus.
- *
- * @param array $nonces Array of nonces.
- * @return array $nonces Modified array of nonces.
- */
- function filter_nonces( $nonces ) {
- $nonces['customize-jetpack-simple-payments'] = wp_create_nonce( 'customize-jetpack-simple-payments' );
- return $nonces;
- }
-
- function enqueue_style() {
- wp_enqueue_style( 'jetpack-simple-payments-widget-style', plugins_url( 'simple-payments/style.css', __FILE__ ), array(), '20180518' );
- }
-
- function admin_enqueue_styles() {
- wp_enqueue_style( 'jetpack-simple-payments-widget-customizer', plugins_url( 'simple-payments/customizer.css', __FILE__ ) );
- }
-
- function admin_enqueue_scripts() {
- wp_enqueue_media();
- wp_enqueue_script( 'jetpack-simple-payments-widget-customizer', plugins_url( '/simple-payments/customizer.js', __FILE__ ), array( 'jquery' ), false, true );
- wp_localize_script(
- 'jetpack-simple-payments-widget-customizer', 'jpSimplePaymentsStrings', array(
- 'deleteConfirmation' => __( 'Are you sure you want to delete this item? It will be disabled and removed from all locations where it currently appears.', 'jetpack' ),
- )
- );
- }
-
- public function ajax_get_payment_buttons() {
- if ( ! check_ajax_referer( 'customize-jetpack-simple-payments', 'customize-jetpack-simple-payments-nonce', false ) ) {
- wp_send_json_error( 'bad_nonce', 400 );
- }
-
- if ( ! current_user_can( 'customize' ) ) {
- wp_send_json_error( 'customize_not_allowed', 403 );
- }
-
- $post_type_object = get_post_type_object( Jetpack_Simple_Payments::$post_type_product );
- if ( ! current_user_can( $post_type_object->cap->create_posts ) || ! current_user_can( $post_type_object->cap->publish_posts ) ) {
- wp_send_json_error( 'insufficient_post_permissions', 403 );
- }
-
- $product_posts = get_posts(
- array(
- 'numberposts' => 100,
- 'orderby' => 'date',
- 'post_type' => Jetpack_Simple_Payments::$post_type_product,
- 'post_status' => 'publish',
- )
- );
-
- $formatted_products = array_map( array( $this, 'format_product_post_for_ajax_reponse' ), $product_posts );
-
- wp_send_json_success( $formatted_products );
- }
-
- public function format_product_post_for_ajax_reponse( $product_post ) {
- return array(
- 'ID' => $product_post->ID,
- 'post_title' => $product_post->post_title,
- );
- }
-
- public function ajax_save_payment_button() {
- if ( ! check_ajax_referer( 'customize-jetpack-simple-payments', 'customize-jetpack-simple-payments-nonce', false ) ) {
- wp_send_json_error( 'bad_nonce', 400 );
- }
-
- if ( ! current_user_can( 'customize' ) ) {
- wp_send_json_error( 'customize_not_allowed', 403 );
- }
-
- $post_type_object = get_post_type_object( Jetpack_Simple_Payments::$post_type_product );
- if ( ! current_user_can( $post_type_object->cap->create_posts ) || ! current_user_can( $post_type_object->cap->publish_posts ) ) {
- wp_send_json_error( 'insufficient_post_permissions', 403 );
- }
-
- if ( empty( $_POST['params'] ) || ! is_array( $_POST['params'] ) ) {
- wp_send_json_error( 'missing_params', 400 );
- }
-
- $params = wp_unslash( $_POST['params'] );
- $errors = $this->validate_ajax_params( $params );
- if ( ! empty( $errors->errors ) ) {
- wp_send_json_error( $errors );
- }
-
- $product_post_id = isset( $params['product_post_id'] ) ? intval( $params['product_post_id'] ) : 0;
-
- $product_post = array(
- 'ID' => $product_post_id,
- 'post_type' => Jetpack_Simple_Payments::$post_type_product,
- 'post_status' => 'publish',
- 'post_title' => $params['post_title'],
- 'post_content' => $params['post_content'],
- '_thumbnail_id' => ! empty( $params['image_id'] ) ? $params['image_id'] : -1,
- 'meta_input' => array(
- 'spay_currency' => $params['currency'],
- 'spay_price' => $params['price'],
- 'spay_multiple' => isset( $params['multiple'] ) ? intval( $params['multiple'] ) : 0,
- 'spay_email' => is_email( $params['email'] ),
- ),
- );
-
- if ( empty( $product_post_id ) ) {
- $product_post_id = wp_insert_post( $product_post );
- } else {
- $product_post_id = wp_update_post( $product_post );
- }
-
- if ( ! $product_post_id || is_wp_error( $product_post_id ) ) {
- wp_send_json_error( $product_post_id );
- }
-
- $tracks_properties = array(
- 'id' => $product_post_id,
- 'currency' => $params['currency'],
- 'price' => $params['price'],
- );
- if ( 0 === $product_post['ID'] ) {
- $this->record_event( 'created', 'create', $tracks_properties );
- } else {
- $this->record_event( 'updated', 'update', $tracks_properties );
- }
-
- wp_send_json_success(
- array(
- 'product_post_id' => $product_post_id,
- 'product_post_title' => $params['post_title'],
- )
- );
- }
-
- public function ajax_delete_payment_button() {
- if ( ! check_ajax_referer( 'customize-jetpack-simple-payments', 'customize-jetpack-simple-payments-nonce', false ) ) {
- wp_send_json_error( 'bad_nonce', 400 );
- }
-
- if ( ! current_user_can( 'customize' ) ) {
- wp_send_json_error( 'customize_not_allowed', 403 );
- }
-
- if ( empty( $_POST['params'] ) || ! is_array( $_POST['params'] ) ) {
- wp_send_json_error( 'missing_params', 400 );
- }
-
- $params = wp_unslash( $_POST['params'] );
- $illegal_params = array_diff( array_keys( $params ), array( 'product_post_id' ) );
- if ( ! empty( $illegal_params ) ) {
- wp_send_json_error( 'illegal_params', 400 );
- }
-
- $product_id = (int) $params['product_post_id'];
- $product_post = get_post( $product_id );
-
- $return = array( 'status' => $product_post->post_status );
-
- wp_delete_post( $product_id, true );
- $status = get_post_status( $product_id );
- if ( false === $status ) {
- $return['status'] = 'deleted';
- }
-
- $this->record_event( 'deleted', 'delete', array( 'id' => $product_id ) );
-
- wp_send_json_success( $return );
- }
-
- /**
- * Returns the number of decimal places on string representing a price.
- *
- * @param string $number Price to check.
- * @return number number of decimal places.
- */
- private function get_decimal_places( $number ) {
- $parts = explode( '.', $number );
- if ( count( $parts ) > 2 ) {
- return null;
- }
-
- return isset( $parts[1] ) ? strlen( $parts[1] ) : 0;
- }
-
- public function validate_ajax_params( $params ) {
- $errors = new WP_Error();
-
- $illegal_params = array_diff( array_keys( $params ), array( 'product_post_id', 'post_title', 'post_content', 'image_id', 'currency', 'price', 'multiple', 'email' ) );
- if ( ! empty( $illegal_params ) ) {
- $errors->add( 'illegal_params', __( 'Invalid parameters.', 'jetpack' ) );
- }
-
- if ( empty( $params['post_title'] ) ) {
- $errors->add( 'post_title', __( "People need to know what they're paying for! Please add a brief title.", 'jetpack' ) );
- }
-
- if ( empty( $params['price'] ) || ! is_numeric( $params['price'] ) || floatval( $params['price'] ) <= 0 ) {
- $errors->add( 'price', __( 'Everything comes with a price tag these days. Please add a your product price.', 'jetpack' ) );
- }
-
- // Japan's Yen is the only supported currency with a zero decimal precision.
- $precision = strtoupper( $params['currency'] ) === 'JPY' ? 0 : 2;
- $price_decimal_places = $this->get_decimal_places( $params['price'] );
- if ( is_null( $price_decimal_places ) || $price_decimal_places > $precision ) {
- $errors->add( 'price', __( 'Invalid price', 'jetpack' ) );
- }
-
- if ( empty( $params['email'] ) || ! is_email( $params['email'] ) ) {
- $errors->add( 'email', __( 'We want to make sure payments reach you, so please add an email address.', 'jetpack' ) );
- }
-
- return $errors;
- }
-
- function get_first_product_id() {
- $product_posts = get_posts(
- array(
- 'numberposts' => 1,
- 'orderby' => 'date',
- 'post_type' => Jetpack_Simple_Payments::$post_type_product,
- 'post_status' => 'publish',
- )
- );
-
- return ! empty( $product_posts ) ? $product_posts[0]->ID : null;
- }
-
- /**
- * Front-end display of widget.
- *
- * @see WP_Widget::widget()
- *
- * @param array $args Widget arguments.
- * @param array $instance Saved values from database.
- */
- function widget( $args, $instance ) {
- $instance = wp_parse_args( $instance, $this->defaults() );
-
- echo $args['before_widget'];
-
- /** This filter is documented in core/src/wp-includes/default-widgets.php */
- $title = apply_filters( 'widget_title', $instance['title'] );
- if ( ! empty( $title ) ) {
- echo $args['before_title'] . $title . $args['after_title'];
- }
-
- echo '<div class="jetpack-simple-payments-content">';
-
- if ( ! empty( $instance['form_action'] ) && in_array( $instance['form_action'], array( 'add', 'edit' ) ) && is_customize_preview() ) {
- require( dirname( __FILE__ ) . '/simple-payments/widget.php' );
- } else {
- $jsp = Jetpack_Simple_Payments::getInstance();
- $simple_payments_button = $jsp->parse_shortcode(
- array(
- 'id' => $instance['product_post_id'],
- )
- );
-
- if ( ! is_null( $simple_payments_button ) || is_customize_preview() ) {
- echo $simple_payments_button;
- }
- }
-
- echo '</div><!--simple-payments-->';
-
- echo $args['after_widget'];
-
- /** This action is already documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', 'simple_payments' );
- }
-
- /**
- * Gets the latests field value from either the old instance or the new instance.
- *
- * @param array $mixed Array of values for the new form instance.
- * @param array $mixed Array of values for the old form instance.
- * @return mixed $mixed Field value.
- */
- private function get_latest_field_value( $new_instance, $old_instance, $field ) {
- return ! empty( $new_instance[ $field ] )
- ? sanitize_text_field( $new_instance[ $field ] )
- : $old_instance[ $field ];
- }
-
- /**
- * Gets the product fields from the product post. If no post found
- * it returns the default values.
- *
- * @param int Product Post ID.
- * @return array $fields Product Fields from the Product Post.
- */
- private function get_product_from_post( $product_post_id ) {
- $product_post = get_post( $product_post_id );
- $form_product_id = $product_post_id;
- if ( ! empty( $product_post ) ) {
- $form_product_image_id = get_post_thumbnail_id( $product_post_id );
-
- return array(
- 'form_product_id' => $form_product_id,
- 'form_product_title' => get_the_title( $product_post ),
- 'form_product_description' => $product_post->post_content,
- 'form_product_image_id' => $form_product_image_id,
- 'form_product_image_src' => wp_get_attachment_image_url( $form_product_image_id, 'thumbnail' ),
- 'form_product_currency' => get_post_meta( $product_post_id, 'spay_currency', true ),
- 'form_product_price' => get_post_meta( $product_post_id, 'spay_price', true ),
- 'form_product_multiple' => get_post_meta( $product_post_id, 'spay_multiple', true ) || '0',
- 'form_product_email' => get_post_meta( $product_post_id, 'spay_email', true ),
- );
- }
-
- return $this->defaults();
- }
-
- /**
- * Record a Track event and bump a MC stat.
- *
- * @param string $stat_name
- * @param string $event_action
- * @param array $event_properties
- */
- private function record_event( $stat_name, $event_action, $event_properties = array() ) {
- $current_user = wp_get_current_user();
-
- // `bumps_stats_extra` only exists on .com
- if ( function_exists( 'bump_stats_extras' ) ) {
- require_lib( 'tracks/client' );
- tracks_record_event( $current_user, 'simple_payments_button_' . $event_action, $event_properties );
- /** This action is documented in modules/widgets/social-media-icons.php */
- do_action( 'jetpack_bump_stats_extra', 'jetpack-simple_payments', $stat_name );
- return;
- }
-
- jetpack_tracks_record_event( $current_user, 'jetpack_wpa_simple_payments_button_' . $event_action, $event_properties );
- $jetpack = Jetpack::init();
- // $jetpack->stat automatically prepends the stat group with 'jetpack-'
- $jetpack->stat( 'simple_payments', $stat_name );
- $jetpack->do_stats( 'server_side' );
- }
-
- /**
- * Sanitize widget form values as they are saved.
- *
- * @see WP_Widget::update()
- *
- * @param array $new_instance Values just sent to be saved.
- * @param array $old_instance Previously saved values from database.
- *
- * @return array Updated safe values to be saved.
- */
- function update( $new_instance, $old_instance ) {
- $defaults = $this->defaults();
- //do not overrite `product_post_id` for `$new_instance` with the defaults
- $new_instance = wp_parse_args( $new_instance, array_diff_key( $defaults, array( 'product_post_id' => 0 ) ) );
- $old_instance = wp_parse_args( $old_instance, $defaults );
-
- $required_widget_props = array(
- 'title' => $this->get_latest_field_value( $new_instance, $old_instance, 'title' ),
- 'product_post_id' => $this->get_latest_field_value( $new_instance, $old_instance, 'product_post_id' ),
- 'form_action' => $this->get_latest_field_value( $new_instance, $old_instance, 'form_action' ),
- );
-
- if ( strcmp( $new_instance['form_action'], $old_instance['form_action'] ) !== 0 ) {
- if ( $new_instance['form_action'] == 'edit' ) {
- return array_merge( $this->get_product_from_post( (int) $old_instance['product_post_id'] ), $required_widget_props );
- }
-
- if ( $new_instance['form_action'] == 'clear' ) {
- return array_merge( $this->defaults(), $required_widget_props );
- }
- }
-
- $form_product_image_id = (int) $new_instance['form_product_image_id'];
-
- $form_product_email = ! empty( $new_instance['form_product_email'] )
- ? sanitize_text_field( $new_instance['form_product_email'] )
- : $defaults['form_product_email'];
-
- return array_merge(
- $required_widget_props, array(
- 'form_product_id' => (int) $new_instance['form_product_id'],
- 'form_product_title' => sanitize_text_field( $new_instance['form_product_title'] ),
- 'form_product_description' => sanitize_text_field( $new_instance['form_product_description'] ),
- 'form_product_image_id' => $form_product_image_id,
- 'form_product_image_src' => wp_get_attachment_image_url( $form_product_image_id, 'thumbnail' ),
- 'form_product_currency' => sanitize_text_field( $new_instance['form_product_currency'] ),
- 'form_product_price' => sanitize_text_field( $new_instance['form_product_price'] ),
- 'form_product_multiple' => sanitize_text_field( $new_instance['form_product_multiple'] ),
- 'form_product_email' => $form_product_email,
- )
- );
- }
-
- /**
- * Back-end widget form.
- *
- * @see WP_Widget::form()
- *
- * @param array $instance Previously saved values from database.
- */
- function form( $instance ) {
- $jetpack_simple_payments = Jetpack_Simple_Payments::getInstance();
- if ( ! method_exists( $jetpack_simple_payments, 'is_enabled_jetpack_simple_payments' ) ) {
- return;
- }
- if ( ! $jetpack_simple_payments->is_enabled_jetpack_simple_payments() ) {
- require dirname( __FILE__ ) . '/simple-payments/admin-warning.php';
- return;
- }
-
- $instance = wp_parse_args( $instance, $this->defaults() );
-
- $product_posts = get_posts(
- array(
- 'numberposts' => 100,
- 'orderby' => 'date',
- 'post_type' => Jetpack_Simple_Payments::$post_type_product,
- 'post_status' => 'publish',
- )
- );
-
- require dirname( __FILE__ ) . '/simple-payments/form.php';
- }
- }
-
- // Register Jetpack_Simple_Payments_Widget widget.
- function register_widget_jetpack_simple_payments() {
- if ( ! class_exists( 'Jetpack_Simple_Payments' ) ) {
- return;
- }
-
- $jetpack_simple_payments = Jetpack_Simple_Payments::getInstance();
- if ( ! $jetpack_simple_payments->is_enabled_jetpack_simple_payments() ) {
- return;
- }
-
- register_widget( 'Jetpack_Simple_Payments_Widget' );
- }
- add_action( 'widgets_init', 'register_widget_jetpack_simple_payments' );
-}
diff --git a/plugins/jetpack/modules/widgets/simple-payments/admin-warning.php b/plugins/jetpack/modules/widgets/simple-payments/admin-warning.php
deleted file mode 100644
index f66e4413..00000000
--- a/plugins/jetpack/modules/widgets/simple-payments/admin-warning.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<div class='jetpack-simple-payments-disabled-error'>
- <p>
- <?php
- $support_url = ( defined( 'IS_WPCOM' ) && IS_WPCOM )
- ? 'https://support.wordpress.com/simple-payments/'
- : 'https://jetpack.com/support/simple-payment-button/';
- printf(
- wp_kses(
- __( 'Your plan doesn\'t include Simple Payments. <a href="%s" rel="noopener noreferrer" target="_blank">Learn more and upgrade</a>.', 'jetpack' ),
- array( 'a' => array( 'href' => array(), 'rel' => array(), 'target' => array() ) )
- ),
- esc_url( $support_url )
- );
- ?>
- </p>
-</div>
diff --git a/plugins/jetpack/modules/widgets/simple-payments/customizer.css b/plugins/jetpack/modules/widgets/simple-payments/customizer.css
deleted file mode 100644
index 12278a60..00000000
--- a/plugins/jetpack/modules/widgets/simple-payments/customizer.css
+++ /dev/null
@@ -1,80 +0,0 @@
-.widget-content .jetpack-simple-payments,
-.widget-content .jetpack-simple-payments-form {
- clear: both;
-}
-
-.widget-content .jetpack-simple-payments-disabled-error {
- background: #fff;
- border-left: 4px solid #dc3232;
- box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
- margin: 5px 0 15px;
- padding: 1px 12px;
-}
-
-.widget-content .jetpack-simple-payments-form .invalid {
- border: 1px solid #dc3232;
-}
-
-.widget-content .jetpack-simple-payments-form .cost label {
- display: block;
-}
-
-.widget-content .jetpack-simple-payments-image-fieldset {
- position: relative;
- width: 100%;
-}
-
-.widget-content .jetpack-simple-payments-image-fieldset .placeholder {
- border: 1px dashed #b4b9be;
- box-sizing: border-box;
- cursor: pointer;
- line-height: 20px;
- padding: 9px 0;
- position: relative;
- text-align: center;
- width: 100%;
- margin: 4px 0 1em;
-}
-
-.widget-content .jetpack-simple-payments-image {
- max-width: 100%;
- margin-top: 4px;
- position: relative;
- text-align: center;
-}
-
-.widget-content .jetpack-simple-payments-image img {
- max-width: 100%;
- box-sizing: border-box;
- border: 1px dashed #b4b9be;
- padding: 4px;
- height: auto;
- cursor: pointer;
-}
-
-.widget-content .jetpack-simple-payments-image img:hover {
- border-style: solid;
-}
-
-.widget-content .jetpack-simple-payments-form .field-currency {
- display: inline-block;
- vertical-align: top;
- width: 40%;
-}
-
-.widget-content .jetpack-simple-payments-form .field-price {
- display: inline-block;
- line-height: 20px;
- width: 58%;
-}
-
-.widget-content .jetpack-simple-payments-form .alignleft button,
-.widget-content .jetpack-simple-payments-form .alignright span {
- display: inline-block;
- margin-top: 5px;
-}
-
-.widget-content .button-link:disabled,
-.widget-content .button-link:hover[disabled] {
- color: #a0a5aa;
-}
diff --git a/plugins/jetpack/modules/widgets/simple-payments/customizer.js b/plugins/jetpack/modules/widgets/simple-payments/customizer.js
deleted file mode 100644
index 132ae55d..00000000
--- a/plugins/jetpack/modules/widgets/simple-payments/customizer.js
+++ /dev/null
@@ -1,390 +0,0 @@
-/* global jQuery, jpSimplePaymentsStrings, confirm, _ */
-/* eslint no-var: 0, quote-props: 0 */
-
-( function( api, wp, $ ) {
- var $document = $( document );
-
- $document.ready( function() {
- $document.on( 'widget-added', function( event, widgetContainer ) {
- if ( widgetContainer.is( '[id*="jetpack_simple_payments_widget"]' ) ) {
- initWidget( widgetContainer );
- }
- } );
-
- $document.on( 'widget-synced widget-updated', function( event, widgetContainer ) {
- //this fires for all widgets, this prevent errors for non SP widgets
- if ( ! widgetContainer.is( '[id*="jetpack_simple_payments_widget"]' ) ) {
- return;
- }
-
- event.preventDefault();
-
- syncProductLists();
-
- var widgetForm = widgetContainer.find( '> .widget-inside > .form, > .widget-inside > form' );
-
- enableFormActions( widgetForm );
-
- updateProductImage( widgetForm );
- } );
- } );
-
- function initWidget( widgetContainer ) {
- var widgetForm = widgetContainer.find( '> .widget-inside > .form, > .widget-inside > form' );
-
- //Add New Button
- widgetForm.find( '.jetpack-simple-payments-add-product' ).on( 'click', showAddNewForm( widgetForm ) );
- //Edit Button
- widgetForm.find( '.jetpack-simple-payments-edit-product' ).on( 'click', showEditForm( widgetForm ) );
- //Select an Image
- widgetForm.find( '.jetpack-simple-payments-image-fieldset .placeholder, .jetpack-simple-payments-image > img' ).on( 'click', selectImage( widgetForm ) );
- //Remove Image Button
- widgetForm.find( '.jetpack-simple-payments-remove-image' ).on( 'click', removeImage( widgetForm ) );
- //Save Product button
- widgetForm.find( '.jetpack-simple-payments-save-product' ).on( 'click', saveChanges( widgetForm ) );
- //Cancel Button
- widgetForm.find( '.jetpack-simple-payments-cancel-form' ).on( 'click', clearForm( widgetForm ) );
- //Delete Selected Product
- widgetForm.find( '.jetpack-simple-payments-delete-product' ).on( 'click', deleteProduct( widgetForm ) );
- //Input, Select and Checkbox change
- widgetForm.find( 'select, input, textarea, checkbox' ).on( 'change input propertychange', _.debounce( function() {
- disableFormActions( widgetForm );
- }, 250 ) );
- }
-
- function syncProductLists() {
- var request = wp.ajax.post( 'customize-jetpack-simple-payments-buttons-get', {
- 'customize-jetpack-simple-payments-nonce': api.settings.nonce[ 'customize-jetpack-simple-payments' ],
- 'customize_changeset_uuid': api.settings.changeset.uuid
- } );
-
- request.done( function( data ) {
- var selectedProduct = 0;
-
- $( document ).find( 'select.jetpack-simple-payments-products' ).each( function( index, select ) {
- var $select = $( select );
- selectedProduct = $select.val();
-
- $select.find( 'option' ).remove();
- $select.append( $.map( data, function( product ) {
- return $( '<option>', { value: product.ID, text: product.post_title } );
- } ) );
- $select.val( selectedProduct );
- } );
- } );
- }
-
- function showForm( widgetForm ) {
- //reset validations
- widgetForm.find( '.invalid' ).removeClass( 'invalid' );
- //disable widget title and product selector
- widgetForm.find( '.jetpack-simple-payments-widget-title' )
- .add( '.jetpack-simple-payments-products' )
- //disable add and edit buttons
- .add( '.jetpack-simple-payments-add-product' )
- .add( '.jetpack-simple-payments-edit-product' )
- //disable save, delete and cancel until the widget update event is fired
- .add( '.jetpack-simple-payments-save-product' )
- .add( '.jetpack-simple-payments-cancel-form' )
- .add( '.jetpack-simple-payments-delete-product' )
- .attr( 'disabled', 'disabled' );
- //show form
- widgetForm.find( '.jetpack-simple-payments-form' ).show();
- }
-
- function hideForm( widgetForm ) {
- //enable widget title and product selector
- widgetForm.find( '.jetpack-simple-payments-widget-title' )
- .add( '.jetpack-simple-payments-products' )
- .removeAttr( 'disabled' );
- //hide the form
- widgetForm.find( '.jetpack-simple-payments-form' ).hide();
- }
-
- function changeFormAction( widgetForm, action ) {
- widgetForm.find( '.jetpack-simple-payments-form-action' ).val( action ).change();
- }
-
- function showAddNewForm( widgetForm ) {
- return function( event ) {
- event.preventDefault();
-
- showForm( widgetForm );
- changeFormAction( widgetForm, 'add' );
- };
- }
-
- function showEditForm( widgetForm ) {
- return function( event ) {
- event.preventDefault();
-
- showForm( widgetForm );
- changeFormAction( widgetForm, 'edit' );
- };
- }
-
- function clearForm( widgetForm ) {
- return function( event ) {
- event.preventDefault();
-
- hideForm( widgetForm );
- widgetForm.find( '.jetpack-simple-payments-add-product, .jetpack-simple-payments-edit-product' ).attr( 'disabled', 'disabled' );
- changeFormAction( widgetForm, 'clear' );
- };
- }
-
- function enableFormActions( widgetForm ) {
- var isFormVisible = widgetForm.find( '.jetpack-simple-payments-form' ).is( ':visible' );
- var isProductSelectVisible = widgetForm.find( '.jetpack-simple-payments-products' ).is( ':visible' ); //areProductsVisible ?
- var isEdit = widgetForm.find( '.jetpack-simple-payments-form-action' ).val() === 'edit';
-
- if ( isFormVisible ) {
- widgetForm.find( '.jetpack-simple-payments-save-product' )
- .add( '.jetpack-simple-payments-cancel-form' )
- .removeAttr( 'disabled' );
- } else {
- widgetForm.find( '.jetpack-simple-payments-add-product' ).removeAttr( 'disabled' );
- }
-
- if ( isFormVisible && isEdit ) {
- widgetForm.find( '.jetpack-simple-payments-delete-product' ).removeAttr( 'disabled' );
- }
-
- if ( isProductSelectVisible && ! isFormVisible ) {
- widgetForm.find( '.jetpack-simple-payments-edit-product' ).removeAttr( 'disabled' );
- }
- }
-
- function disableFormActions( widgetForm ) {
- widgetForm.find( '.jetpack-simple-payments-add-product' )
- .add( '.jetpack-simple-payments-edit-product' )
- .add( '.jetpack-simple-payments-save-product' )
- .add( '.jetpack-simple-payments-cancel-form' )
- .add( '.jetpack-simple-payments-delete-product' )
- .attr( 'disabled', 'disabled' );
- }
-
- function selectImage( widgetForm ) {
- return function( event ) {
- event.preventDefault();
-
- var imageContainer = widgetForm.find( '.jetpack-simple-payments-image' );
-
- var mediaFrame = new wp.media.view.MediaFrame.Select( {
- title: 'Choose Product Image',
- multiple: false,
- library: { type: 'image' },
- button: { text: 'Choose Image' }
- } );
-
- mediaFrame.on( 'select', function() {
- var selection = mediaFrame.state().get( 'selection' ).first().toJSON();
- //hide placeholder
- widgetForm.find( '.jetpack-simple-payments-image-fieldset .placeholder' ).hide();
-
- //load image from media library
- imageContainer.find( 'img' )
- .attr( 'src', selection.url )
- .show();
-
- //show image and remove button
- widgetForm.find( '.jetpack-simple-payments-image' ).show();
-
- //set hidden field for the selective refresh
- widgetForm.find( '.jetpack-simple-payments-form-image-id' ).val( selection.id ).change();
- } );
-
- mediaFrame.open();
- };
- }
-
- function removeImage( widgetForm ) {
- return function( event ) {
- event.preventDefault();
-
- //show placeholder
- widgetForm.find( '.jetpack-simple-payments-image-fieldset .placeholder' ).show();
-
- //hide image and remove button
- widgetForm.find( '.jetpack-simple-payments-image' ).hide();
-
- //set hidden field for the selective refresh
- widgetForm.find( '.jetpack-simple-payments-form-image-id' ).val( '' ).change();
- };
- }
-
- function updateProductImage( widgetForm ) {
- var newImageId = parseInt( widgetForm.find( '.jetpack-simple-payments-form-image-id' ).val(), 10 );
- var newImageSrc = widgetForm.find( '.jetpack-simple-payments-form-image-src' ).val();
-
- var placeholder = widgetForm.find( '.jetpack-simple-payments-image-fieldset .placeholder' );
- var image = widgetForm.find( '.jetpack-simple-payments-image > img' );
- var imageControls = widgetForm.find( '.jetpack-simple-payments-image' );
-
- if ( newImageId && newImageSrc ) {
- image.attr( 'src', newImageSrc );
- placeholder.hide();
- imageControls.show();
- } else {
- placeholder.show();
- image.removeAttr( 'src' );
- imageControls.hide();
- }
- }
-
- function decimalPlaces( number ) {
- var parts = number.split( '.' );
- if ( parts.length > 2 ) {
- return null;
- }
-
- return parts[ 1 ] ? parts[ 1 ].length : 0;
- }
-
- function isFormValid( widgetForm ) {
- widgetForm.find( '.invalid' ).removeClass( 'invalid' );
-
- var errors = false;
-
- var postTitle = widgetForm.find( '.jetpack-simple-payments-form-product-title' ).val();
- if ( ! postTitle ) {
- widgetForm.find( '.jetpack-simple-payments-form-product-title' ).addClass( 'invalid' );
- errors = true;
- }
-
- var productPrice = widgetForm.find( '.jetpack-simple-payments-form-product-price' ).val();
- if ( ! productPrice || isNaN( productPrice ) || parseFloat( productPrice ) <= 0 ) {
- widgetForm.find( '.jetpack-simple-payments-form-product-price' ).addClass( 'invalid' );
- errors = true;
- }
-
- // Japan's Yen is the only supported currency with a zero decimal precision.
- var precision = widgetForm.find( '.jetpack-simple-payments-form-product-currency' ).val() === 'JPY' ? 0 : 2;
- var priceDecimalPlaces = decimalPlaces( productPrice );
- if ( priceDecimalPlaces === null || priceDecimalPlaces > precision ) {
- widgetForm.find( '.jetpack-simple-payments-form-product-price' ).addClass( 'invalid' );
- errors = true;
- }
-
- var productEmail = widgetForm.find( '.jetpack-simple-payments-form-product-email' ).val();
- var isProductEmailValid = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test( productEmail );
- if ( ! productEmail || ! isProductEmailValid ) {
- widgetForm.find( '.jetpack-simple-payments-form-product-email' ).addClass( 'invalid' );
- errors = true;
- }
-
- return ! errors;
- }
-
- function saveChanges( widgetForm ) {
- return function( event ) {
- event.preventDefault();
- var productPostId = widgetForm.find( '.jetpack-simple-payments-form-product-id' ).val();
-
- if ( ! isFormValid( widgetForm ) ) {
- return;
- }
-
- disableFormActions( widgetForm );
-
- widgetForm.find( '.spinner' ).show();
-
- var request = wp.ajax.post( 'customize-jetpack-simple-payments-button-save', {
- 'customize-jetpack-simple-payments-nonce': api.settings.nonce[ 'customize-jetpack-simple-payments' ],
- 'customize_changeset_uuid': api.settings.changeset.uuid,
- 'params': {
- 'product_post_id': productPostId,
- 'post_title': widgetForm.find( '.jetpack-simple-payments-form-product-title' ).val(),
- 'post_content': widgetForm.find( '.jetpack-simple-payments-form-product-description' ).val(),
- 'image_id': widgetForm.find( '.jetpack-simple-payments-form-image-id' ).val(),
- 'currency': widgetForm.find( '.jetpack-simple-payments-form-product-currency' ).val(),
- 'price': widgetForm.find( '.jetpack-simple-payments-form-product-price' ).val(),
- 'multiple': widgetForm.find( '.jetpack-simple-payments-form-product-multiple' ).is( ':checked' ) ? 1 : 0,
- 'email': widgetForm.find( '.jetpack-simple-payments-form-product-email' ).val()
- }
- } );
-
- request.done( function( data ) {
- var select = widgetForm.find( 'select.jetpack-simple-payments-products' );
- var productOption = select.find( 'option[value="' + productPostId + '"]' );
-
- if ( productOption.length > 0 ) {
- productOption.text( data.product_post_title );
- } else {
- select.append(
- $( '<option>', {
- value: data.product_post_id,
- text: data.product_post_title
- } )
- );
- select.val( data.product_post_id ).change();
- }
-
- widgetForm.find( '.jetpack-simple-payments-products-fieldset' ).show();
- widgetForm.find( '.jetpack-simple-payments-products-warning' ).hide();
-
- changeFormAction( widgetForm, 'clear' );
- hideForm( widgetForm );
- } );
-
- request.fail( function( data ) {
- var validCodes = {
- 'post_title': 'product-title',
- 'price': 'product-price',
- 'email': 'product-email'
- };
-
- data.forEach( function( item ) {
- if ( validCodes.hasOwnProperty( item.code ) ) {
- widgetForm.find( '.jetpack-simple-payments-form-' + validCodes[ item.code ] ).addClass( 'invalid' );
- }
- } );
-
- enableFormActions( widgetForm );
- } );
- };
- }
-
- function deleteProduct( widgetForm ) {
- return function( event ) {
- event.preventDefault();
-
- if ( ! confirm( jpSimplePaymentsStrings.deleteConfirmation ) ) {
- return;
- }
-
- var formProductId = parseInt( widgetForm.find( '.jetpack-simple-payments-form-product-id' ).val(), 10 );
- if ( ! formProductId ) {
- return;
- }
-
- disableFormActions( widgetForm );
-
- widgetForm.find( '.spinner' ).show();
-
- var request = wp.ajax.post( 'customize-jetpack-simple-payments-button-delete', {
- 'customize-jetpack-simple-payments-nonce': api.settings.nonce[ 'customize-jetpack-simple-payments' ],
- 'customize_changeset_uuid': api.settings.changeset.uuid,
- 'params': {
- 'product_post_id': formProductId
- }
- } );
-
- request.done( function() {
- var productList = widgetForm.find( 'select.jetpack-simple-payments-products' )[ 0 ];
- productList.remove( productList.selectedIndex );
- productList.dispatchEvent( new Event( 'change' ) );
-
- if ( $( productList ).has( 'option' ).length === 0 ) {
- //hide products select and label
- widgetForm.find( '.jetpack-simple-payments-products-fieldset' ).hide();
- //show empty products list warning
- widgetForm.find( '.jetpack-simple-payments-products-warning' ).show();
- }
-
- changeFormAction( widgetForm, 'clear' );
- hideForm( widgetForm );
- } );
- };
- }
-}( wp.customize, wp, jQuery ) );
diff --git a/plugins/jetpack/modules/widgets/simple-payments/form.php b/plugins/jetpack/modules/widgets/simple-payments/form.php
deleted file mode 100644
index 7732be5d..00000000
--- a/plugins/jetpack/modules/widgets/simple-payments/form.php
+++ /dev/null
@@ -1,205 +0,0 @@
-<?php
-/**
- * Display the Simple Payments Form.
- *
- * @package Jetpack
- */
-
-?>
-<p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>">
- <?php esc_html_e( 'Widget Title', 'jetpack' ); ?>
- </label>
- <input
- type="text"
- class="widefat jetpack-simple-payments-widget-title"
- id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"
- name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>"
- value="<?php echo esc_attr( $instance['title'] ); ?>" />
-</p>
-<p class="jetpack-simple-payments-products-fieldset" <?php if ( empty( $product_posts ) ) { echo 'style="display:none;"'; } ?>>
- <label for="<?php echo esc_attr( $this->get_field_id( 'product_post_id' ) ); ?>">
- <?php esc_html_e( 'Select a Simple Payments Button:', 'jetpack' ); ?>
- </label>
- <select
- class="widefat jetpack-simple-payments-products"
- id="<?php echo esc_attr( $this->get_field_id( 'product_post_id' ) ); ?>"
- name="<?php echo esc_attr( $this->get_field_name( 'product_post_id' ) ); ?>">
- <?php foreach ( $product_posts as $product_post ) { ?>
- <option value="<?php echo esc_attr( $product_post->ID ); ?>" <?php selected( (int) $instance['product_post_id'], $product_post->ID ); ?>>
- <?php echo esc_attr( get_the_title( $product_post ) ); ?>
- </option>
- <?php } ?>
- </select>
-</p>
-<?php if ( is_customize_preview() ) { ?>
-<p class="jetpack-simple-payments-products-warning" <?php if ( ! empty( $product_posts ) ) { echo 'style="display:none;"'; } ?>>
- <?php esc_html_e( "Looks like you don't have any products. You can create one using the Add New button below.", 'jetpack' ); ?>
-</p>
-<p>
- <div class="alignleft">
- <button class="button jetpack-simple-payments-edit-product" <?php disabled( empty( $product_posts ), true ); ?>>
- <?php esc_html_e( 'Edit Selected', 'jetpack' ); ?>
- </button>
- </div>
- <div class="alignright">
- <button class="button jetpack-simple-payments-add-product"><?php esc_html_e( 'Add New', 'jetpack' ); ?></button>
- </div>
- <br class="clear">
-</p>
-<hr />
-<div class="jetpack-simple-payments-form" style="display: none;">
- <input
- type="hidden"
- id="<?php echo esc_attr( $this->get_field_id( 'form_action' ) ); ?>"
- name="<?php echo esc_attr( $this->get_field_name( 'form_action' ) ); ?>"
- value="<?php echo esc_attr( $instance['form_action'] ); ?>"
- class="jetpack-simple-payments-form-action" />
- <input
- type="hidden"
- id="<?php echo esc_attr( $this->get_field_id( 'form_product_id' ) ); ?>"
- name="<?php echo esc_attr( $this->get_field_name( 'form_product_id' ) ); ?>"
- value="<?php echo esc_attr( $instance['form_product_id'] ); ?>"
- class="jetpack-simple-payments-form-product-id" />
- <input
- type="hidden"
- id="<?php echo esc_attr( $this->get_field_id( 'form_product_image_id' ) ); ?>"
- name="<?php echo esc_attr( $this->get_field_name( 'form_product_image_id' ) ); ?>"
- value="<?php echo esc_attr( $instance['form_product_image_id'] ); ?>"
- class="jetpack-simple-payments-form-image-id" />
- <input
- type="hidden"
- id="<?php echo esc_attr( $this->get_field_id( 'form_product_image_src' ) ); ?>"
- name="<?php echo esc_attr( $this->get_field_name( 'form_product_image_src' ) ); ?>"
- value="<?php echo esc_attr( $instance['form_product_image_src'] ); ?>"
- class="jetpack-simple-payments-form-image-src" />
- <p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'form_product_title' ) ); ?>">
- <?php esc_html_e( 'What is this payment for?', 'jetpack' ); ?>
- </label>
- <input
- type="text"
- class="widefat field-title jetpack-simple-payments-form-product-title"
- id="<?php echo esc_attr( $this->get_field_id( 'form_product_title' ) ); ?>"
- name="<?php echo esc_attr( $this->get_field_name( 'form_product_title' ) ); ?>"
- value="<?php echo esc_attr( $instance['form_product_title'] ); ?>" />
- <br />
- <small>
- <?php esc_html_e( 'For example: event tickets, charitable donations, training courses, coaching fees, etc.', 'jetpack' ); ?>
- </small>
- </p>
- <div class="jetpack-simple-payments-image-fieldset">
- <label><?php esc_html_e( 'Product image', 'jetpack' ); ?></label>
- <div class="placeholder" <?php if ( ! empty( $instance['form_product_image_id'] ) ) echo 'style="display:none;"'; ?>>
- <?php esc_html_e( 'Select an image', 'jetpack' ); ?>
- </div>
- <div class="jetpack-simple-payments-image" <?php if ( empty( $instance['form_product_image_id'] ) ) echo 'style="display:none;"'; ?>>
- <img src="<?php echo esc_url( $instance['form_product_image_src'] ); ?>" />
- <button class="button jetpack-simple-payments-remove-image"><?php esc_html_e( 'Remove image', 'jetpack' ); ?></button>
- </div>
- </div>
- <p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'form_product_description' ) ); ?>">
- <?php esc_html_e( 'Description', 'jetpack' ); ?>
- </label>
- <textarea
- class="field-description widefat jetpack-simple-payments-form-product-description"
- rows=5
- id="<?php echo esc_attr( $this->get_field_id( 'form_product_description' ) ); ?>"
- name="<?php echo esc_attr( $this->get_field_name( 'form_product_description' ) ); ?>"><?php echo esc_textarea( $instance['form_product_description'] ); ?></textarea>
- </p>
- <p class="cost">
- <label for="<?php echo esc_attr( $this->get_field_id( 'form_product_price' ) ); ?>">
- <?php esc_html_e( 'Price', 'jetpack' ); ?>
- </label>
- <select
- class="field-currency widefat jetpack-simple-payments-form-product-currency"
- id="<?php echo esc_attr( $this->get_field_id( 'form_product_currency' ) ); ?>"
- name="<?php echo esc_attr( $this->get_field_name( 'form_product_currency' ) ); ?>">
- <?php foreach ( Jetpack_Simple_Payments_Widget::$supported_currency_list as $code => $currency ) { ?>
- <option value="<?php echo esc_attr( $code ); ?>"<?php selected( $instance['form_product_currency'], $code ); ?>>
- <?php echo esc_html( "$code $currency" ); ?>
- </option>
- <?php } ?>
- </select>
- <input
- type="text"
- class="field-price widefat jetpack-simple-payments-form-product-price"
- id="<?php echo esc_attr( $this->get_field_id( 'form_product_price' ) ); ?>"
- name="<?php echo esc_attr( $this->get_field_name( 'form_product_price' ) ); ?>"
- value="<?php echo esc_attr( $instance['form_product_price'] ); ?>"
- placeholder="1.00" />
- </p>
- <p>
- <input
- class="field-multiple jetpack-simple-payments-form-product-multiple"
- id="<?php echo esc_attr( $this->get_field_id( 'form_product_multiple' ) ); ?>"
- name="<?php echo esc_attr( $this->get_field_name( 'form_product_multiple' ) ); ?>"
- type="checkbox"
- value="1"
- <?php checked( $instance['form_product_multiple'], '1' ); ?> />
- <label for="<?php echo esc_attr( $this->get_field_id( 'form_product_multiple' ) ); ?>">
- <?php esc_html_e( 'Allow people to buy more than one item at a time.', 'jetpack' ); ?>
- </label>
- </p>
- <p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'form_product_email' ) ); ?>">
- <?php esc_html_e( 'Email', 'jetpack' ); ?>
- </label>
- <input
- class="field-email widefat jetpack-simple-payments-form-product-email"
- id="<?php echo esc_attr( $this->get_field_id( 'form_product_email' ) ); ?>"
- name="<?php echo esc_attr( $this->get_field_name( 'form_product_email' ) ); ?>"
- type="email"
- value="<?php echo esc_attr( $instance['form_product_email'] ); ?>" />
- <small>
- <?php
- printf(
- wp_kses(
- /* Translators: placeholders are a link to Paypal website and a target attribute. */
- __( 'This is where PayPal will send your money. To claim a payment, you\'ll need a <a href="%1$s" %2$s>PayPal account</a> connected to a bank account.', 'jetpack' ),
- array(
- 'a' => array(
- 'href' => array(),
- 'target' => array(),
- ),
- )
- ),
- 'https://paypal.com',
- 'target="_blank"'
- );
- ?>
- </small>
- </p>
- <p>
- <div class="alignleft">
- <button type="button" class="button-link button-link-delete jetpack-simple-payments-delete-product">
- <?php esc_html_e( 'Delete Product', 'jetpack' ); ?>
- </button>
- </div>
- <div class="alignright">
- <button name="<?php echo esc_attr( $this->get_field_name( 'save' ) ); ?>" class="button jetpack-simple-payments-save-product"><?php esc_html_e( 'Save', 'jetpack' ); ?></button>
- <span> | <button type="button" class="button-link jetpack-simple-payments-cancel-form"><?php esc_html_e( 'Cancel', 'jetpack' ); ?></button></span>
- </div>
- <br class="clear">
- </p>
- <hr />
-</div>
-<?php } else { ?>
-<p class="jetpack-simple-payments-products-warning">
- <?php
- printf(
- wp_kses(
- /* Translators: placeholder is a link to the customizer. */
- __( 'This widget adds a payment button of your choice to your sidebar. To create or edit the payment buttons themselves, <a href="%s">use the Customizer</a>.', 'jetpack' ),
- array(
- 'a' => array(
- 'href' => array(),
- ),
- )
- ),
- esc_url( add_query_arg( array( 'autofocus[panel]' => 'widgets' ), admin_url( 'customize.php' ) ) )
- );
- ?>
-</p>
-<?php } ?>
diff --git a/plugins/jetpack/modules/widgets/simple-payments/style.css b/plugins/jetpack/modules/widgets/simple-payments/style.css
deleted file mode 100644
index 3a701e01..00000000
--- a/plugins/jetpack/modules/widgets/simple-payments/style.css
+++ /dev/null
@@ -1,8 +0,0 @@
-@media screen and (min-width: 400px) {
- .widget.jetpack-simple-payments .jetpack-simple-payments-product {
- flex-direction: column;
- }
- .widget.jetpack-simple-payments .jetpack-simple-payments-details {
- padding-left: 0;
- }
-}
diff --git a/plugins/jetpack/modules/widgets/simple-payments/widget.php b/plugins/jetpack/modules/widgets/simple-payments/widget.php
deleted file mode 100644
index 001635ba..00000000
--- a/plugins/jetpack/modules/widgets/simple-payments/widget.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-/**
- * Display the Simple Payments Widget.
- *
- * @package Jetpack
- */
-
-?>
-<div class='jetpack-simple-payments-wrapper'>
- <div class='jetpack-simple-payments-product'>
- <div class='jetpack-simple-payments-product-image' <?php if ( empty( $instance['form_product_image_id'] ) ) echo 'style="display:none;"'; ?>>
- <div class='jetpack-simple-payments-image'>
- <?php echo wp_get_attachment_image( $instance['form_product_image_id'], 'full' ); ?>
- </div>
- </div>
- <div class='jetpack-simple-payments-details'>
- <div class='jetpack-simple-payments-title'><p><?php echo esc_html( $instance['form_product_title'] ); ?></p></div>
- <div class='jetpack-simple-payments-description'><p><?php echo esc_html( $instance['form_product_description'] ); ?></p></div>
- <div class='jetpack-simple-payments-price'><p><?php echo esc_html( $instance['form_product_price'] ); ?> <?php echo esc_html( $instance['form_product_currency'] ); ?></p></div>
- <div class='jetpack-simple-payments-purchase-box'>
- <?php if ( $instance['form_product_multiple'] ) { ?>
- <div class='jetpack-simple-payments-items'>
- <input
- type='number'
- class='jetpack-simple-payments-items-number'
- value='1'
- min='1' />
- </div>
- <?php } ?>
- </div>
- </div>
- </div>
-</div>
diff --git a/plugins/jetpack/modules/widgets/social-icons.php b/plugins/jetpack/modules/widgets/social-icons.php
deleted file mode 100644
index a8ed7920..00000000
--- a/plugins/jetpack/modules/widgets/social-icons.php
+++ /dev/null
@@ -1,685 +0,0 @@
-<?php
-class Jetpack_Widget_Social_Icons extends WP_Widget {
- /**
- * @var array Default widget options.
- */
- protected $defaults;
-
- /**
- * Widget constructor.
- */
- public function __construct() {
- global $pagenow;
-
- $widget_ops = array(
- 'classname' => 'jetpack_widget_social_icons',
- 'description' => __( 'Add social-media icons to your site.', 'jetpack' ),
- 'customize_selective_refresh' => true,
- );
-
- parent::__construct(
- 'jetpack_widget_social_icons',
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', __( 'Social Icons', 'jetpack' ) ),
- $widget_ops
- );
-
- $this->defaults = array(
- 'title' => __( 'Follow Us', 'jetpack' ),
- 'icon-size' => 'medium',
- 'new-tab' => false,
- 'icons' => array(
- array(
- 'url' => '',
- ),
- ),
- );
-
- // Enqueue admin scrips and styles, only in the customizer or the old widgets page.
- if ( is_customize_preview() || 'widgets.php' === $pagenow ) {
- add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_scripts' ) );
- add_action( 'admin_print_footer_scripts', array( $this, 'render_admin_js' ) );
- }
-
- // Enqueue scripts and styles for the display of the widget, on the frontend or in the customizer.
- if ( is_active_widget( false, $this->id, $this->id_base, true ) || is_customize_preview() ) {
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_icon_scripts' ) );
- add_action( 'wp_footer', array( $this, 'include_svg_icons' ), 9999 );
- }
- }
-
- /**
- * Script & styles for admin widget form.
- */
- public function enqueue_admin_scripts() {
- wp_enqueue_script( 'jetpack-widget-social-icons-script', plugins_url( 'social-icons/social-icons-admin.js', __FILE__ ), array( 'jquery-ui-sortable' ), '20170506' );
- wp_enqueue_style( 'jetpack-widget-social-icons-admin', plugins_url( 'social-icons/social-icons-admin.css', __FILE__ ), array(), '20170506' );
- }
-
- /**
- * Styles for front-end widget.
- */
- public function enqueue_icon_scripts() {
- wp_enqueue_style( 'jetpack-widget-social-icons-styles', plugins_url( 'social-icons/social-icons.css', __FILE__ ), array(), '20170506' );
- }
-
- /**
- * JavaScript for admin widget form.
- */
- public function render_admin_js() {
- ?>
- <script type="text/html" id="tmpl-jetpack-widget-social-icons-template">
- <?php self::render_icons_template(); ?>
- </script>
- <?php
- }
-
- /**
- * Add SVG definitions to the footer.
- */
- public function include_svg_icons() {
- // Define SVG sprite file in Jetpack
- $svg_icons = dirname( dirname( __FILE__ ) ) . '/theme-tools/social-menu/social-menu.svg';
-
- // Define SVG sprite file in WPCOM
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $svg_icons = dirname( dirname( __FILE__ ) ) . '/social-menu/social-menu.svg';
- }
-
- // If it exists, include it.
- if ( is_file( $svg_icons ) ) {
- require_once( $svg_icons );
- }
- }
-
- /**
- * Front-end display of widget.
- *
- * @see WP_Widget::widget()
- *
- * @param array $args Widget arguments.
- * @param array $instance Saved values from database.
- */
- public function widget( $args, $instance ) {
- $instance = wp_parse_args( $instance, $this->defaults );
-
- /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
- $title = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );
-
- echo $args['before_widget'];
-
- if ( ! empty( $title ) ) {
- echo $args['before_title'] . esc_html( $title ) . $args['after_title'];
- }
-
- if ( ! empty( $instance['icons'] ) ) :
-
- // Get supported social icons.
- $social_icons = $this->get_supported_icons();
- $default_icon = $this->get_svg_icon( array( 'icon' => 'chain' ) );
-
- // Set target attribute for the link
- if ( true === $instance['new-tab'] ) {
- $target = '_blank';
- } else {
- $target = '_self';
- }
- ?>
-
- <ul class="jetpack-social-widget-list size-<?php echo esc_attr( $instance['icon-size'] ); ?>">
-
- <?php foreach ( $instance['icons'] as $icon ) : ?>
-
- <?php if ( ! empty( $icon['url'] ) ) : ?>
- <li class="jetpack-social-widget-item">
- <a href="<?php echo esc_url( $icon['url'], array( 'http', 'https', 'mailto', 'skype' ) ); ?>" target="<?php echo $target; ?>">
- <?php
- $found_icon = false;
-
- foreach ( $social_icons as $social_icon ) {
- if ( false !== stripos( $icon['url'], $social_icon['url'] ) ) {
- echo '<span class="screen-reader-text">' . esc_attr( $social_icon['label'] ) . '</span>';
- echo $this->get_svg_icon( array( 'icon' => esc_attr( $social_icon['icon'] ) ) );
- $found_icon = true;
- break;
- }
- }
-
- if ( ! $found_icon ) {
- echo $default_icon;
- }
- ?>
- </a>
- </li>
- <?php endif; ?>
-
- <?php endforeach; ?>
-
- </ul>
-
- <?php
- endif;
-
- echo $args['after_widget'];
-
- /** This action is documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', 'social_icons' );
- }
-
- /**
- * Sanitize widget form values as they are saved.
- *
- * @see WP_Widget::update()
- *
- * @param array $new_instance Values just sent to be saved.
- * @param array $old_instance Previously saved values from database.
- *
- * @return array Updated safe values to be saved.
- */
- public function update( $new_instance, $old_instance ) {
- $instance['title'] = sanitize_text_field( $new_instance['title'] );
- $instance['icon-size'] = $this->defaults['icon-size'];
-
- if ( in_array( $new_instance['icon-size'], array( 'small', 'medium', 'large' ) ) ) {
- $instance['icon-size'] = $new_instance['icon-size'];
- }
-
- $instance['new-tab'] = isset( $new_instance['new-tab'] ) ? (bool) $new_instance['new-tab'] : false;
- $icon_count = count( $new_instance['url-icons'] );
- $instance['icons'] = array();
-
- foreach ( $new_instance['url-icons'] as $url ) {
- $url = filter_var( $url, FILTER_SANITIZE_URL );
-
- if ( ! empty( $url ) ) {
- $instance['icons'][] = array(
- 'url' => $url,
- );
- }
- }
-
- return $instance;
- }
-
- /**
- * Back-end widget form.
- *
- * @see WP_Widget::form()
- *
- * @param array $instance Previously saved values from database.
- *
- * @return string|void
- */
- public function form( $instance ) {
- $instance = wp_parse_args( $instance, $this->defaults );
- $title = sanitize_text_field( $instance['title'] );
- $sizes = array(
- 'small' => __( 'Small', 'jetpack' ),
- 'medium' => __( 'Medium', 'jetpack' ),
- 'large' => __( 'Large', 'jetpack' ),
- );
- $new_tab = isset( $instance['new-tab'] ) ? (bool) $instance['new-tab'] : false;
- ?>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php esc_html_e( 'Title:', 'jetpack' ); ?></label>
- <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
- </p>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'icon-size' ); ?>"><?php esc_html_e( 'Size:', 'jetpack' ); ?></label>
- <select class="widefat" name="<?php echo $this->get_field_name( 'icon-size' ); ?>">
- <?php foreach ( $sizes as $value => $label ) : ?>
- <option value="<?php echo esc_attr( $value ); ?>" <?php selected( $value, $instance['icon-size'] ); ?>><?php echo esc_attr( $label ); ?></option>
- <?php endforeach; ?>
- </select>
- </p>
-
- <div class="jetpack-social-icons-widget-list"
- data-url-icon-id="<?php echo $this->get_field_id( 'url-icons' ); ?>"
- data-url-icon-name="<?php echo $this->get_field_name( 'url-icons' ); ?>"
- >
-
- <?php
- foreach ( $instance['icons'] as $icon ) {
- self::render_icons_template(
- array(
- 'url-icon-id' => $this->get_field_id( 'url-icons' ),
- 'url-icon-name' => $this->get_field_name( 'url-icons' ),
- 'url-value' => $icon['url'],
- )
- );
- }
- ?>
-
- </div>
-
- <p class="jetpack-social-icons-widget add-button">
- <button type="button" class="button jetpack-social-icons-add-button">
- <?php esc_html_e( 'Add an icon', 'jetpack' ); ?>
- </button>
- </p>
-
- <?php
- switch ( get_locale() ) {
- case 'es':
- $support = 'https://es.support.wordpress.com/social-media-icons-widget/#iconos-disponibles';
- break;
-
- case 'pt-br':
- $support = 'https://br.support.wordpress.com/widgets/widget-de-icones-sociais/#ícones-disponíveis';
- break;
-
- default:
- $support = 'https://en.support.wordpress.com/widgets/social-media-icons-widget/#available-icons';
- }
- ?>
-
- <p>
- <em><a href="<?php echo esc_url( $support ); ?>" target="_blank">
- <?php esc_html_e( 'View available icons', 'jetpack' ); ?>
- </a></em>
- </p>
-
- <p>
- <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id( 'new-tab' ); ?>" name="<?php echo $this->get_field_name( 'new-tab' ); ?>" <?php checked( $new_tab ); ?> />
- <label for="<?php echo $this->get_field_id( 'new-tab' ); ?>"><?php esc_html_e( 'Open link in a new tab', 'jetpack' ); ?></label>
- </p>
-
- <?php
- }
-
- /**
- * Generates template to add icons.
- *
- * @param array $args Template arguments
- */
- static function render_icons_template( $args = array() ) {
- $defaults = array(
- 'url-icon-id' => '',
- 'url-icon-name' => '',
- 'url-value' => '',
- );
-
- $args = wp_parse_args( $args, $defaults );
- ?>
-
- <div class="jetpack-social-icons-widget-item">
- <div class="jetpack-social-icons-widget-item-wrapper">
- <div class="handle"></div>
-
- <p class="jetpack-widget-social-icons-url">
- <?php
- printf(
- '<input class="widefat id="%1$s" name="%2$s[]" type="text" placeholder="%3$s" value="%4$s"/>',
- esc_attr( $args['url-icon-id'] ),
- esc_attr( $args['url-icon-name'] ),
- esc_attr__( 'Account URL', 'jetpack' ),
- esc_url( $args['url-value'], array( 'http', 'https', 'mailto', 'skype' ) )
- );
- ?>
- </p>
-
- <p class="jetpack-widget-social-icons-remove-item">
- <a class="jetpack-widget-social-icons-remove-item-button" href="javascript:;">
- <?php esc_html_e( 'Remove', 'jetpack' ); ?>
- </a>
- </p>
- </div>
- </div>
-
- <?php
- }
-
- /**
- * Return SVG markup.
- *
- * @param array $args {
- * Parameters needed to display an SVG.
- *
- * @type string $icon Required SVG icon filename.
- * }
- * @return string SVG markup.
- */
- public function get_svg_icon( $args = array() ) {
- // Make sure $args are an array.
- if ( empty( $args ) ) {
- return esc_html__( 'Please define default parameters in the form of an array.', 'jetpack' );
- }
-
- // Set defaults.
- $defaults = array(
- 'icon' => '',
- );
-
- // Parse args.
- $args = wp_parse_args( $args, $defaults );
-
- // Define an icon.
- if ( false === array_key_exists( 'icon', $args ) ) {
- return esc_html__( 'Please define an SVG icon filename.', 'jetpack' );
- }
-
- // Set aria hidden.
- $aria_hidden = ' aria-hidden="true"';
-
- // Begin SVG markup.
- $svg = '<svg class="icon icon-' . esc_attr( $args['icon'] ) . '"' . $aria_hidden . ' role="img">';
-
- /*
- * Display the icon.
- *
- * The whitespace around `<use>` is intentional - it is a work around to a keyboard navigation bug in Safari 10.
- *
- * See https://core.trac.wordpress.org/ticket/38387.
- */
- $svg .= ' <use href="#icon-' . esc_html( $args['icon'] ) . '" xlink:href="#icon-' . esc_html( $args['icon'] ) . '"></use> ';
-
- $svg .= '</svg>';
-
- return $svg;
- }
-
- /**
- * Returns an array of supported social links (URL, icon, and label).
- *
- * @return array $social_links_icons
- */
- public function get_supported_icons() {
- $social_links_icons = array(
- array(
- 'url' => '500px.com',
- 'icon' => '500px',
- 'label' => '500px',
- ),
- array(
- 'url' => 'amazon.cn',
- 'icon' => 'amazon',
- 'label' => 'Amazon',
- ),
- array(
- 'url' => 'amazon.in',
- 'icon' => 'amazon',
- 'label' => 'Amazon',
- ),
- array(
- 'url' => 'amazon.fr',
- 'icon' => 'amazon',
- 'label' => 'Amazon',
- ),
- array(
- 'url' => 'amazon.de',
- 'icon' => 'amazon',
- 'label' => 'Amazon',
- ),
- array(
- 'url' => 'amazon.it',
- 'icon' => 'amazon',
- 'label' => 'Amazon',
- ),
- array(
- 'url' => 'amazon.nl',
- 'icon' => 'amazon',
- 'label' => 'Amazon',
- ),
- array(
- 'url' => 'amazon.es',
- 'icon' => 'amazon',
- 'label' => 'Amazon',
- ),
- array(
- 'url' => 'amazon.co',
- 'icon' => 'amazon',
- 'label' => 'Amazon',
- ),
- array(
- 'url' => 'amazon.ca',
- 'icon' => 'amazon',
- 'label' => 'Amazon',
- ),
- array(
- 'url' => 'amazon.com',
- 'icon' => 'amazon',
- 'label' => 'Amazon',
- ),
- array(
- 'url' => 'apple.com',
- 'icon' => 'apple',
- 'label' => 'Apple',
- ),
- array(
- 'url' => 'itunes.com',
- 'icon' => 'apple',
- 'label' => 'iTunes',
- ),
- array(
- 'url' => 'bandcamp.com',
- 'icon' => 'bandcamp',
- 'label' => 'Bandcamp',
- ),
- array(
- 'url' => 'behance.net',
- 'icon' => 'behance',
- 'label' => 'Behance',
- ),
- array(
- 'url' => 'codepen.io',
- 'icon' => 'codepen',
- 'label' => 'CodePen',
- ),
- array(
- 'url' => 'deviantart.com',
- 'icon' => 'deviantart',
- 'label' => 'DeviantArt',
- ),
- array(
- 'url' => 'digg.com',
- 'icon' => 'digg',
- 'label' => 'Digg',
- ),
- array(
- 'url' => 'discord.gg',
- 'icon' => 'discord',
- 'label' => 'Discord',
- ),
- array(
- 'url' => 'discordapp.com',
- 'icon' => 'discord',
- 'label' => 'Discord',
- ),
- array(
- 'url' => 'dribbble.com',
- 'icon' => 'dribbble',
- 'label' => 'Dribbble',
- ),
- array(
- 'url' => 'dropbox.com',
- 'icon' => 'dropbox',
- 'label' => 'Dropbox',
- ),
- array(
- 'url' => 'etsy.com',
- 'icon' => 'etsy',
- 'label' => 'Etsy',
- ),
- array(
- 'url' => 'facebook.com',
- 'icon' => 'facebook',
- 'label' => 'Facebook',
- ),
- array(
- 'url' => '/feed/',
- 'icon' => 'feed',
- 'label' => __( 'RSS Feed', 'jetpack' ),
- ),
- array(
- 'url' => 'flickr.com',
- 'icon' => 'flickr',
- 'label' => 'Flickr',
- ),
- array(
- 'url' => 'foursquare.com',
- 'icon' => 'foursquare',
- 'label' => 'Foursquare',
- ),
- array(
- 'url' => 'goodreads.com',
- 'icon' => 'goodreads',
- 'label' => 'Goodreads',
- ),
- array(
- 'url' => 'google.com/+',
- 'icon' => 'google-plus',
- 'label' => 'Google +',
- ),
- array(
- 'url' => 'plus.google.com',
- 'icon' => 'google-plus',
- 'label' => 'Google +',
- ),
- array(
- 'url' => 'google.com',
- 'icon' => 'google',
- 'label' => 'Google',
- ),
- array(
- 'url' => 'github.com',
- 'icon' => 'github',
- 'label' => 'GitHub',
- ),
- array(
- 'url' => 'instagram.com',
- 'icon' => 'instagram',
- 'label' => 'Instagram',
- ),
- array(
- 'url' => 'linkedin.com',
- 'icon' => 'linkedin',
- 'label' => 'LinkedIn',
- ),
- array(
- 'url' => 'mailto:',
- 'icon' => 'mail',
- 'label' => __( 'Email', 'jetpack' ),
- ),
- array(
- 'url' => 'meetup.com',
- 'icon' => 'meetup',
- 'label' => 'Meetup',
- ),
- array(
- 'url' => 'medium.com',
- 'icon' => 'medium',
- 'label' => 'Medium',
- ),
- array(
- 'url' => 'pinterest.',
- 'icon' => 'pinterest',
- 'label' => 'Pinterest',
- ),
- array(
- 'url' => 'getpocket.com',
- 'icon' => 'pocket',
- 'label' => 'Pocket',
- ),
- array(
- 'url' => 'reddit.com',
- 'icon' => 'reddit',
- 'label' => 'Reddit',
- ),
- array(
- 'url' => 'skype.com',
- 'icon' => 'skype',
- 'label' => 'Skype',
- ),
- array(
- 'url' => 'skype:',
- 'icon' => 'skype',
- 'label' => 'Skype',
- ),
- array(
- 'url' => 'slideshare.net',
- 'icon' => 'slideshare',
- 'label' => 'SlideShare',
- ),
- array(
- 'url' => 'snapchat.com',
- 'icon' => 'snapchat',
- 'label' => 'Snapchat',
- ),
- array(
- 'url' => 'soundcloud.com',
- 'icon' => 'soundcloud',
- 'label' => 'SoundCloud',
- ),
- array(
- 'url' => 'spotify.com',
- 'icon' => 'spotify',
- 'label' => 'Spotify',
- ),
- array(
- 'url' => 'stumbleupon.com',
- 'icon' => 'stumbleupon',
- 'label' => 'StumbleUpon',
- ),
- array(
- 'url' => 'tumblr.com',
- 'icon' => 'tumblr',
- 'label' => 'Tumblr',
- ),
- array(
- 'url' => 'twitch.tv',
- 'icon' => 'twitch',
- 'label' => 'Twitch',
- ),
- array(
- 'url' => 'twitter.com',
- 'icon' => 'twitter',
- 'label' => 'Twitter',
- ),
- array(
- 'url' => 'vimeo.com',
- 'icon' => 'vimeo',
- 'label' => 'Vimeo',
- ),
- array(
- 'url' => 'vk.com',
- 'icon' => 'vk',
- 'label' => 'VK',
- ),
- array(
- 'url' => 'wordpress.com',
- 'icon' => 'wordpress',
- 'label' => 'WordPress.com',
- ),
- array(
- 'url' => 'wordpress.org',
- 'icon' => 'wordpress',
- 'label' => 'WordPress',
- ),
- array(
- 'url' => 'yelp.com',
- 'icon' => 'yelp',
- 'label' => 'Yelp',
- ),
- array(
- 'url' => 'youtube.com',
- 'icon' => 'youtube',
- 'label' => 'YouTube',
- ),
- );
-
- return $social_links_icons;
- }
-} // Jetpack_Widget_Social_Icons
-
-/**
- * Register and load the widget.
- *
- * @access public
- * @return void
- */
-function jetpack_widget_social_icons_load() {
- register_widget( 'Jetpack_Widget_Social_Icons' );
-}
-add_action( 'widgets_init', 'jetpack_widget_social_icons_load' );
diff --git a/plugins/jetpack/modules/widgets/social-icons/social-icons-admin.css b/plugins/jetpack/modules/widgets/social-icons/social-icons-admin.css
deleted file mode 100644
index 575ac09f..00000000
--- a/plugins/jetpack/modules/widgets/social-icons/social-icons-admin.css
+++ /dev/null
@@ -1,94 +0,0 @@
-.jetpack-social-icons-widget-item {
- background: #fff;
- border: 1px solid #e5e5e5;
- cursor: move;
- margin: 0;
-}
-
-html[class*='wordpress_com'] .jetpack-social-icons-widget-item,
-.in-calypso .jetpack-social-icons-widget-item {
- border-color: #c8d7e1;
-}
-
-.jetpack-social-icons-widget-item:hover {
- outline: 1px solid #999;
- outline-offset: -1px;
-}
-
-html[class*='wordpress_com'] .jetpack-social-icons-widget-item:hover,
-.in-calypso .jetpack-social-icons-widget-item:hover {
- outline-color: #a8bece;
-}
-
-.jetpack-social-icons-widget-item.ui-sortable-helper {
- border-color: #999;
-}
-
-html[class*='wordpress_com'] .jetpack-social-icons-widget-item.ui-sortable-helper,
-.in-calypso .jetpack-social-icons-widget-item.ui-sortable-helper {
- border-color: #a8bece;
-}
-
-.jetpack-social-icons-widget-item.ui-sortable-helper {
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
-}
-
-.jetpack-social-icons-widget-item.ui-state-placeholder {
- border-color: #a0a5aa;
- border-style: dashed;
- margin: 0 0 1px;
-}
-
-.jetpack-social-icons-widget-item + .jetpack-social-icons-widget-item:not(.ui-state-placeholder) {
- margin-top: -1px;
-}
-
-.jetpack-social-icons-widget-item-wrapper {
- padding: 1em;
- position: relative;
-}
-
-.jetpack-social-icons-widget-item .handle {
- display: block;
- height: 100%;
- left: 0;
- position: absolute;
- top: 0;
- width: 100%;
-}
-
-.jetpack-social-icons-widget-item p {
- margin: 0;
- position: relative;
-}
-
-.jetpack-social-icons-widget-item p + p {
- margin-top: 1em;
-}
-
-.jetpack-widget-social-icons-remove-item {
- display: inline-block;
-}
-
-.jetpack-widget-social-icons-remove-item-button {
- color: #a00;
- text-decoration: none;
-}
-
-.jetpack-widget-social-icons-remove-item-button:focus,
-.jetpack-widget-social-icons-remove-item-button:hover {
- color: #f00;
-}
-
-.jetpack-social-icons-add-button:before {
- content: "\f132";
- display: inline-block;
- position: relative;
- left: -2px;
- top: -1px;
- font: 400 20px/1 dashicons;
- vertical-align: middle;
- transition: all 0.2s;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
diff --git a/plugins/jetpack/modules/widgets/social-icons/social-icons-admin.js b/plugins/jetpack/modules/widgets/social-icons/social-icons-admin.js
deleted file mode 100644
index 61abb228..00000000
--- a/plugins/jetpack/modules/widgets/social-icons/social-icons-admin.js
+++ /dev/null
@@ -1,111 +0,0 @@
-( function( $ ) {
- var timeout = null;
-
- // Make the list of items sortable.
- function initWidget( widget ) {
- widget.find( '.jetpack-social-icons-widget-list' ).sortable( {
- items: '> .jetpack-social-icons-widget-item',
- handle: '.handle',
- cursor: 'move',
- placeholder: 'jetpack-social-icons-widget-item ui-state-placeholder',
- containment: widget,
- forcePlaceholderSize: true,
- update: function() {
- livePreviewUpdate( $( this ).parents( '.form' ).find( '.widget-control-save' ) );
- }
- } );
- }
-
- // Live preview update.
- function livePreviewUpdate( button ) {
- if ( ! $( document.body ).hasClass( 'wp-customizer' ) || ! button.length ) {
- return;
- }
-
- button.trigger( 'click' ).hide();
- }
-
- $( document ).ready( function() {
- // Add an item.
- $( document ).on( 'click', '.jetpack-social-icons-widget.add-button button', function( event ) {
- event.preventDefault();
-
- var template, widgetContent, widgetList, widgetLastItem, urlId, urlName;
-
- template = $( $.trim( $( '#tmpl-jetpack-widget-social-icons-template' ).html() ) );
- widgetContent = $( this ).parents( '.widget-content' );
- widgetList = widgetContent.find( '.jetpack-social-icons-widget-list' );
- urlId = widgetList.data( 'url-icon-id');
- urlName = widgetList.data( 'url-icon-name' );
-
- template.find( '.jetpack-widget-social-icons-url input' ).attr( 'id', urlId ).attr( 'name', urlName + '[]' );
-
- widgetList.append( template );
-
- widgetLastItem = widgetContent.find( '.jetpack-social-icons-widget-item:last' );
- widgetLastItem.find( 'input:first' ).trigger( 'focus' );
- } );
-
- // Remove an item.
- $( document ).on( 'click', '.jetpack-widget-social-icons-remove-item-button', function( event ) {
- event.preventDefault();
-
- var button = $( this ).parents( '.form' ).find( '.widget-control-save' );
-
- $( this ).parents( '.jetpack-social-icons-widget-item' ).remove();
-
- livePreviewUpdate( button );
- } );
-
- // Event handler for widget open button.
- $( document ).on( 'click', 'div.widget[id*="jetpack_widget_social_icons"] .widget-title, div.widget[id*="jetpack_widget_social_icons"] .widget-action', function() {
- if ( $( this ).parents( '#available-widgets' ).length ) {
- return;
- }
-
- initWidget( $( this ).parents( '.widget[id*="jetpack_widget_social_icons"]' ) );
- } );
-
- // Event handler for widget added.
- $( document ).on( 'widget-added', function( event, widget ) {
- if ( widget.is( '[id*="jetpack_widget_social_icons"]' ) ) {
- event.preventDefault();
- initWidget( widget );
- }
- } );
-
- // Event handler for widget updated.
- $( document ).on( 'widget-updated', function( event, widget ) {
- if ( widget.is( '[id*="jetpack_widget_social_icons"]' ) ) {
- event.preventDefault();
- initWidget( widget );
- }
- } );
-
- // Live preview update on input focus out.
- $( document ).on( 'focusout', 'input[name*="jetpack_widget_social_icons"]', function() {
- livePreviewUpdate( $( this ).parents( '.form' ).find( '.widget-control-save' ) );
- } );
-
- // Live preview update on input enter key.
- $( document ).on( 'keydown', 'input[name*="jetpack_widget_social_icons"]', function( event ) {
- if ( event.keyCode === 13 ) {
- livePreviewUpdate( $( this ).parents( '.form' ).find( '.widget-control-save' ) );
- }
- } );
-
- // Live preview update on input key up 1s.
- $( document ).on( 'keyup', 'input[name*="jetpack_widget_social_icons"]', function() {
- clearTimeout( timeout );
-
- timeout = setTimeout( function() {
- livePreviewUpdate( $( this ).parents( '.form' ).find( '.widget-control-save' ) );
- }, 1000 );
- } );
-
- // Live preview update on select change.
- $( document ).on( 'change', 'select[name*="jetpack_widget_social_icons"]', function() {
- livePreviewUpdate( $( this ).parents( '.form' ).find( '.widget-control-save' ) );
- } );
- } );
-} )( jQuery );
diff --git a/plugins/jetpack/modules/widgets/social-icons/social-icons.css b/plugins/jetpack/modules/widgets/social-icons/social-icons.css
deleted file mode 100644
index 505f0663..00000000
--- a/plugins/jetpack/modules/widgets/social-icons/social-icons.css
+++ /dev/null
@@ -1,75 +0,0 @@
-.jetpack_widget_social_icons ul,
-.jetpack_widget_social_icons li {
- list-style: none;
-}
-
-.jetpack_widget_social_icons ul {
- display: block;
- margin: 0 0 1.5em;
- padding: 0;
-}
-
-.jetpack_widget_social_icons ul li {
- border: 0;
- display: inline-block;
- line-height: 1;
- margin: 0;
- padding: 0;
-}
-
-.jetpack_widget_social_icons ul li:before,
-.jetpack_widget_social_icons ul li:after {
- display: none;
-}
-
-.jetpack_widget_social_icons a {
- border: 0;
- box-shadow: none;
- display: block;
- height: 24px;
- text-decoration: none;
- width: 24px;
-}
-
-.jetpack_widget_social_icons svg {
- color: inherit;
- fill: currentColor;
- height: inherit;
- vertical-align: middle;
- width: inherit;
-}
-
-/* Sizes */
-
-.jetpack_widget_social_icons ul.size-small a {
- height: 24px;
- width: 24px;
-}
-
-.jetpack_widget_social_icons ul.size-medium a {
- height: 32px;
- width: 32px;
-}
-
-.jetpack_widget_social_icons ul.size-large a {
- height: 48px;
- width: 48px;
-}
-
-/*
-Text meant only for screen readers.
-Provides support for themes that do not bundle this CSS yet.
-@see https://make.wordpress.org/accessibility/2015/02/09/hiding-text-for-screen-readers-with-wordpress-core/
-***********************************/
-.screen-reader-text {
- border: 0;
- clip: rect(1px, 1px, 1px, 1px);
- clip-path: inset(50%);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute ! important;
- width: 1px;
- word-wrap: normal ! important;
-}
diff --git a/plugins/jetpack/modules/widgets/social-media-icons.php b/plugins/jetpack/modules/widgets/social-media-icons.php
deleted file mode 100644
index 0e8028ef..00000000
--- a/plugins/jetpack/modules/widgets/social-media-icons.php
+++ /dev/null
@@ -1,346 +0,0 @@
-<?php
-/*
-Plugin Name: Social Media Icons Widget
-Description: A simple widget that displays social media icons
-Author: Automattic Inc.
-
-This widget is now deprecated.
-Any new features should go into modules/widgets/social-icons.php instead.
-@see https://github.com/Automattic/jetpack/pull/8498
-
-*/
-
-
-/**
- * WPCOM_social_media_icons_widget class.
- *
- * @extends WP_Widget
- */
-class WPCOM_social_media_icons_widget extends WP_Widget {
-
- /**
- * Defaults
- *
- * @var mixed
- * @access private
- */
- private $defaults;
-
- /**
- * Services
- *
- * @var mixed
- * @access private
- */
- private $services;
-
-
- /**
- * __construct function.
- *
- * @access public
- * @return void
- */
- public function __construct() {
- parent::__construct(
- 'wpcom_social_media_icons_widget',
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', esc_html__( 'Social Media Icons (Deprecated)', 'jetpack' ) ),
- array(
- 'description' => __( 'A simple widget that displays social media icons.', 'jetpack' ),
- 'customize_selective_refresh' => true,
- )
- );
- $this->defaults = array(
- 'title' => __( 'Social', 'jetpack' ),
- 'facebook_username' => '',
- 'twitter_username' => '',
- 'instagram_username' => '',
- 'pinterest_username' => '',
- 'linkedin_username' => '',
- 'github_username' => '',
- 'youtube_username' => '',
- 'vimeo_username' => '',
- 'googleplus_username' => '',
- 'flickr_username' => '',
- 'wordpress_username' => '',
- 'twitch_username' => '',
- 'tumblr_username' => '',
- );
- $this->services = array(
- 'facebook' => array( 'Facebook', 'https://www.facebook.com/%s/' ),
- 'twitter' => array( 'Twitter', 'https://twitter.com/%s/' ),
- 'instagram' => array( 'Instagram', 'https://www.instagram.com/%s/' ),
- 'pinterest' => array( 'Pinterest', 'https://www.pinterest.com/%s/' ),
- 'linkedin' => array( 'LinkedIn', 'https://www.linkedin.com/in/%s/' ),
- 'github' => array( 'GitHub', 'https://github.com/%s/' ),
- 'youtube' => array( 'YouTube', 'https://www.youtube.com/%s/' ),
- 'vimeo' => array( 'Vimeo', 'https://vimeo.com/%s/' ),
- 'googleplus' => array( 'Google+', 'https://plus.google.com/u/0/%s/' ),
- 'flickr' => array( 'Flickr', 'https://www.flickr.com/photos/%s/' ),
- 'wordpress' => array( 'WordPress.org', 'https://profiles.wordpress.org/%s/' ),
- 'twitch' => array( 'Twitch', 'https://www.twitch.tv/%s/' ),
- 'tumblr' => array( 'Tumblr', 'https://%s.tumblr.com' ),
- );
- if ( is_active_widget( false, false, $this->id_base ) || is_customize_preview() ) {
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ) );
- }
- }
-
- /**
- * Enqueue Style.
- *
- * @access public
- * @return void
- */
- public function enqueue_style() {
- wp_register_style( 'jetpack_social_media_icons_widget', plugins_url( 'social-media-icons/style.css', __FILE__ ), array(), '20150602' );
- wp_enqueue_style( 'jetpack_social_media_icons_widget' );
- }
-
- /**
- * Check Genericons.
- *
- * @access private
- * @return Bool.
- */
- private function check_genericons() {
- global $wp_styles;
- foreach ( $wp_styles->queue as $handle ) {
- if ( false !== stristr( $handle, 'genericons' ) ) {
- return $handle;
- }
- }
- return false;
- }
-
- /**
- * Widget Front End.
- *
- * @access public
- * @param mixed $args Arguments.
- * @param mixed $instance Instance.
- * @return void
- */
- public function widget( $args, $instance ) {
- $instance = wp_parse_args( (array) $instance, $this->defaults );
- /** This filter is documented in core/src/wp-includes/default-widgets.php */
- $instance['title'] = apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base );
- if ( ! $this->check_genericons() ) {
- wp_enqueue_style( 'genericons' );
- }
- $index = 10;
- $html = array();
- $alt_text = esc_attr__( 'View %1$s&#8217;s profile on %2$s', 'jetpack' );
- foreach ( $this->services as $service => $data ) {
- list( $service_name, $url ) = $data;
- if ( ! isset( $instance[ $service . '_username' ] ) ) {
- continue;
- }
- $username = $link_username = $instance[ $service . '_username' ];
- if ( empty( $username ) ) {
- continue;
- }
- $index += 10;
- $predefined_url = false;
-
- /** Check if full URL entered in configuration, use it instead of tinkering **/
- if (
- in_array(
- parse_url( $username, PHP_URL_SCHEME ),
- array( 'http', 'https' )
- )
- ) {
- $predefined_url = $username;
-
- // In case of a predefined link we only display the service name
- // for screen readers
- $alt_text = '%2$s';
- }
-
- if ( 'googleplus' === $service
- && ! is_numeric( $username )
- && substr( $username, 0, 1 ) !== '+'
- ) {
- $link_username = '+' . $username;
- }
- if ( 'youtube' === $service && 'UC' === substr( $username, 0, 2 ) ) {
- $link_username = 'channel/' . $username;
- } elseif ( 'youtube' === $service ) {
- $link_username = 'user/' . $username;
- }
-
- if ( ! $predefined_url ) {
- $predefined_url = sprintf( $url, $link_username );
- }
- /**
- * Fires for each profile link in the social icons widget. Can be used
- * to change the links for certain social networks if needed. All URLs
- * will be passed through `esc_attr` on output.
- *
- * @module widgets
- *
- * @since 3.8.0
- *
- * @param string $url the currently processed URL
- * @param string $service the lowercase service slug, e.g. 'facebook', 'youtube', etc.
- */
- $link = apply_filters(
- 'jetpack_social_media_icons_widget_profile_link',
- $predefined_url,
- $service
- );
- $html[ $index ] = sprintf(
- '<a href="%1$s" class="genericon genericon-%2$s" target="_blank"><span class="screen-reader-text">%3$s</span></a>',
- esc_attr( $link ),
- esc_attr( $service ),
- sprintf( $alt_text, esc_html( $username ), $service_name )
- );
- }
- /**
- * Fires at the end of the list of Social Media accounts.
- * Can be used to add a new Social Media Site to the Social Media Icons Widget.
- * The filter function passed the array of HTML entries that will be sorted
- * by key, each wrapped in a list item element and output as an unsorted list.
- *
- * @module widgets
- *
- * @since 3.8.0
- *
- * @param array $html Associative array of HTML snippets per each icon.
- */
- $html = apply_filters( 'jetpack_social_media_icons_widget_array', $html );
- ksort( $html );
- $html = '<ul><li>' . join( '</li><li>', $html ) . '</li></ul>';
- if ( ! empty( $instance['title'] ) ) {
- $html = $args['before_title'] . esc_html( $instance['title'] ) . $args['after_title'] . $html;
- }
- $html = $args['before_widget'] . $html . $args['after_widget'];
-
- /** This action is documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', 'social_media_icons' );
-
- /**
- * Filters the Social Media Icons widget output.
- *
- * @module widgets
- *
- * @since 3.6.0
- *
- * @param string $html Social Media Icons widget html output.
- */
- echo apply_filters( 'jetpack_social_media_icons_widget_output', $html );
- }
-
- /**
- * Widget Settings.
- *
- * @access public
- * @param mixed $instance Instance.
- * @return void
- */
- public function form( $instance ) {
- $instance = wp_parse_args( (array) $instance, $this->defaults );
- ?>
- <p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php esc_attr_e( 'Title:', 'jetpack' ); ?></label>
- <input
- class="widefat"
- id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"
- name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>"
- type="text"
- value="<?php echo esc_attr( $instance['title'] ); ?>"
- />
- </p>
- <?php
- foreach ( $this->services as $service => $data ) {
- list( $service_name, $url ) = $data;
- ?>
- <p>
- <label for="<?php echo esc_attr( $this->get_field_id( $service . '_username' ) ); ?>">
- <?php
- /* translators: %s is a social network name, e.g. Facebook. */
- printf( __( '%s username:', 'jetpack' ), $service_name );
- ?>
- </label>
- <input
- class="widefat"
- id="<?php echo esc_attr( $this->get_field_id( $service . '_username' ) ); ?>"
- name="<?php echo esc_attr( $this->get_field_name( $service . '_username' ) ); ?>"
- type="text"
- value="<?php echo esc_attr( $instance[ $service . '_username' ] ); ?>"
- />
- </p>
- <?php
- }
- }
-
- /**
- * Update Widget Settings.
- *
- * @access public
- * @param mixed $new_instance New Instance.
- * @param mixed $old_instance Old Instance.
- * @return Instance.
- */
- public function update( $new_instance, $old_instance ) {
- $instance = (array) $old_instance;
- foreach ( $new_instance as $field => $value ) {
- $instance[ $field ] = sanitize_text_field( $new_instance[ $field ] );
- }
- // Stats.
- $stats = $instance;
- unset( $stats['title'] );
- $stats = array_filter( $stats );
- $stats = array_keys( $stats );
- $stats = array_map( array( $this, 'remove_username' ), $stats );
- foreach ( $stats as $val ) {
- /**
- * Fires for each Social Media account being saved in the Social Media Widget settings.
- *
- * @module widgets
- *
- * @since 3.6.0
- *
- * @param string social-media-links-widget-svcs Type of action to track.
- * @param string $val Name of the Social Media account being saved.
- */
- do_action( 'jetpack_bump_stats_extras', 'social-media-links-widget-svcs', $val );
- }
- return $instance;
- }
-
- /**
- * Remove username from value before to save stats.
- *
- * @access public
- * @param mixed $val Value.
- * @return Value.
- */
- public function remove_username( $val ) {
- return str_replace( '_username', '', $val );
- }
-} // End Class.
-
-/**
- * Register and load the widget.
- *
- * @access public
- * @return void
- */
-function wpcom_social_media_icons_widget_load_widget() {
- $transient = 'wpcom_social_media_icons_widget::is_active';
- $has_widget = get_transient( $transient );
-
- if ( false === $has_widget ) {
- $is_active_widget = is_active_widget( false, false, 'wpcom_social_media_icons_widget', false );
- $has_widget = (int) ! empty( $is_active_widget );
- set_transient( $transient, $has_widget, 1 * HOUR_IN_SECONDS );
- }
-
- // [DEPRECATION]: Only register widget if active widget exists already
- if ( $has_widget ) {
- register_widget( 'wpcom_social_media_icons_widget' );
- }
-}
-add_action( 'widgets_init', 'wpcom_social_media_icons_widget_load_widget' );
diff --git a/plugins/jetpack/modules/widgets/social-media-icons/style.css b/plugins/jetpack/modules/widgets/social-media-icons/style.css
deleted file mode 100644
index 665d1c7d..00000000
--- a/plugins/jetpack/modules/widgets/social-media-icons/style.css
+++ /dev/null
@@ -1,49 +0,0 @@
-.widget_wpcom_social_media_icons_widget ul {
- list-style-type: none;
- margin-left: 0;
-}
-
-.widget_wpcom_social_media_icons_widget ul li {
- border: 0 none;
- display: inline;
- margin-right: 0.5em;
-}
-
-.widget_wpcom_social_media_icons_widget li a {
- border: 0 none;
- text-decoration: none;
-}
-
-.widget_wpcom_social_media_icons_widget .genericon {
- font-family: 'Genericons';
-}
-
-.widget_wpcom_social_media_icons_widget .screen-reader-text {
- clip: rect(1px, 1px, 1px, 1px);
- position: absolute !important;
- height: 1px;
- width: 1px;
- overflow: hidden;
-}
-
-.widget_wpcom_social_media_icons_widget .screen-reader-text:hover,
-.widget_wpcom_social_media_icons_widget .screen-reader-text:active,
-.widget_wpcom_social_media_icons_widget .screen-reader-text:focus {
- background-color: #f1f1f1;
- border-radius: 3px;
- box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6);
- clip: auto !important;
- color: #21759b;
- display: block;
- font-size: 14px;
- font-size: 0.875rem;
- font-weight: bold;
- height: auto;
- left: 5px;
- line-height: normal;
- padding: 15px 23px 14px;
- text-decoration: none;
- top: 5px;
- width: auto;
- z-index: 100000; /* Above WP toolbar. */
-} \ No newline at end of file
diff --git a/plugins/jetpack/modules/widgets/top-posts.php b/plugins/jetpack/modules/widgets/top-posts.php
deleted file mode 100644
index cdcd59d1..00000000
--- a/plugins/jetpack/modules/widgets/top-posts.php
+++ /dev/null
@@ -1,674 +0,0 @@
-<?php
-
-/*
- * Currently, this widget depends on the Stats Module. To not load this file
- * when the Stats Module is not active would potentially bypass Jetpack's
- * fatal error detection on module activation, so we always load this file.
- * Instead, we don't register the widget if the Stats Module isn't active.
- */
-
-/**
- * Register the widget for use in Appearance -> Widgets
- */
-add_action( 'widgets_init', 'jetpack_top_posts_widget_init' );
-
-function jetpack_top_posts_widget_init() {
- // Currently, this widget depends on the Stats Module
- if (
- ( ! defined( 'IS_WPCOM' ) || ! IS_WPCOM )
- &&
- ! function_exists( 'stats_get_from_restapi' )
- ) {
- return;
- }
-
- register_widget( 'Jetpack_Top_Posts_Widget' );
-}
-
-class Jetpack_Top_Posts_Widget extends WP_Widget {
- public $alt_option_name = 'widget_stats_topposts';
- public $default_title = '';
-
- function __construct() {
- parent::__construct(
- 'top-posts',
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', __( 'Top Posts &amp; Pages', 'jetpack' ) ),
- array(
- 'description' => __( 'Shows your most viewed posts and pages.', 'jetpack' ),
- 'customize_selective_refresh' => true,
- )
- );
-
- $this->default_title = __( 'Top Posts &amp; Pages', 'jetpack' );
-
- if ( is_active_widget( false, false, $this->id_base ) || is_customize_preview() ) {
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_style' ) );
- }
-
- /**
- * Add explanation about how the statistics are calculated.
- *
- * @module widgets
- *
- * @since 3.9.3
- */
- add_action( 'jetpack_widget_top_posts_after_fields', array( $this, 'stats_explanation' ) );
- }
-
- function enqueue_style() {
- wp_register_style( 'jetpack-top-posts-widget', plugins_url( 'top-posts/style.css', __FILE__ ), array(), '20141013' );
- wp_enqueue_style( 'jetpack-top-posts-widget' );
- }
-
- function form( $instance ) {
- $instance = wp_parse_args( (array) $instance, $this->defaults() );
-
- if ( false === $instance['title'] ) {
- $instance['title'] = $this->default_title;
- }
- $title = stripslashes( $instance['title'] );
-
- $count = isset( $instance['count'] ) ? (int) $instance['count'] : 10;
- if ( $count < 1 || 10 < $count ) {
- $count = 10;
- }
-
- $allowed_post_types = array_values( get_post_types( array( 'public' => true ) ) );
- $types = isset( $instance['types'] ) ? (array) $instance['types'] : array( 'post', 'page' );
-
- // 'likes' are not available in Jetpack
- $ordering = isset( $instance['ordering'] ) && 'likes' === $instance['ordering'] ? 'likes' : 'views';
-
- if ( isset( $instance['display'] ) && in_array( $instance['display'], array( 'grid', 'list', 'text' ) ) ) {
- $display = $instance['display'];
- } else {
- $display = 'text';
- }
-
- ?>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php esc_html_e( 'Title:', 'jetpack' ); ?></label>
- <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
- </p>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'count' ); ?>"><?php esc_html_e( 'Maximum number of posts to show (no more than 10):', 'jetpack' ); ?></label>
- <input id="<?php echo $this->get_field_id( 'count' ); ?>" name="<?php echo $this->get_field_name( 'count' ); ?>" type="number" value="<?php echo (int) $count; ?>" min="1" max="10" />
- </p>
-
- <?php if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) : ?>
- <p>
- <label><?php esc_html_e( 'Order Top Posts &amp; Pages By:', 'jetpack' ); ?></label>
- <ul>
- <li><label><input id="<?php echo $this->get_field_id( 'ordering' ); ?>-likes" name="<?php echo $this->get_field_name( 'ordering' ); ?>" type="radio" value="likes" <?php checked( 'likes', $ordering ); ?> /> <?php esc_html_e( 'Likes', 'jetpack' ); ?></label></li>
- <li><label><input id="<?php echo $this->get_field_id( 'ordering' ); ?>-views" name="<?php echo $this->get_field_name( 'ordering' ); ?>" type="radio" value="views" <?php checked( 'views', $ordering ); ?> /> <?php esc_html_e( 'Views', 'jetpack' ); ?></label></li>
- </ul>
- </p>
- <?php endif; ?>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'types' ); ?>"><?php esc_html_e( 'Types of pages to display:', 'jetpack' ); ?></label>
- <ul>
- <?php
- foreach ( $allowed_post_types as $type ) {
- // Get the Post Type name to display next to the checkbox
- $post_type_object = get_post_type_object( $type );
- $label = $post_type_object->labels->name;
-
- $checked = '';
- if ( in_array( $type, $types ) ) {
- $checked = 'checked="checked" ';
- }
- ?>
-
- <li><label>
- <input value="<?php echo esc_attr( $type ); ?>" name="<?php echo $this->get_field_name( 'types' ); ?>[]" id="<?php echo $this->get_field_id( 'types' ); ?>-<?php echo $type; ?>" type="checkbox" <?php echo $checked; ?>>
- <?php echo esc_html( $label ); ?>
- </label></li>
-
- <?php } // End foreach ?>
- </ul>
- </p>
-
- <p>
- <label><?php esc_html_e( 'Display as:', 'jetpack' ); ?></label>
- <ul>
- <li><label><input id="<?php echo $this->get_field_id( 'display' ); ?>-text" name="<?php echo $this->get_field_name( 'display' ); ?>" type="radio" value="text" <?php checked( 'text', $display ); ?> /> <?php esc_html_e( 'Text List', 'jetpack' ); ?></label></li>
- <li><label><input id="<?php echo $this->get_field_id( 'display' ); ?>-list" name="<?php echo $this->get_field_name( 'display' ); ?>" type="radio" value="list" <?php checked( 'list', $display ); ?> /> <?php esc_html_e( 'Image List', 'jetpack' ); ?></label></li>
- <li><label><input id="<?php echo $this->get_field_id( 'display' ); ?>-grid" name="<?php echo $this->get_field_name( 'display' ); ?>" type="radio" value="grid" <?php checked( 'grid', $display ); ?> /> <?php esc_html_e( 'Image Grid', 'jetpack' ); ?></label></li>
- </ul>
- </p>
- <?php
-
- /**
- * Fires after the fields are displayed in the Top Posts Widget settings in wp-admin.
- *
- * Allow adding extra content after the fields are displayed.
- *
- * @module widgets
- *
- * @since 3.9.3
- *
- * @param array $args {
- * @param array $instance The widget instance.
- * @param object $this The class object.
- * }
- */
- do_action( 'jetpack_widget_top_posts_after_fields', array( $instance, $this ) );
- }
-
- /**
- * Explains how the statics are calculated.
- */
- function stats_explanation() {
- ?>
-
- <p><?php esc_html_e( 'Top Posts &amp; Pages by views are calculated from 24-48 hours of stats. They take a while to change.', 'jetpack' ); ?></p>
- <?php
- }
-
- function update( $new_instance, $old_instance ) {
- $instance = array();
- $instance['title'] = wp_kses( $new_instance['title'], array() );
- if ( $instance['title'] === $this->default_title ) {
- $instance['title'] = false; // Store as false in case of language change
- }
-
- $instance['count'] = (int) $new_instance['count'];
- if ( $instance['count'] < 1 || 10 < $instance['count'] ) {
- $instance['count'] = 10;
- }
-
- // 'likes' are not available in Jetpack
- $instance['ordering'] = isset( $new_instance['ordering'] ) && 'likes' == $new_instance['ordering'] ? 'likes' : 'views';
-
- $allowed_post_types = array_values( get_post_types( array( 'public' => true ) ) );
- $instance['types'] = $new_instance['types'];
- foreach ( $new_instance['types'] as $key => $type ) {
- if ( ! in_array( $type, $allowed_post_types ) ) {
- unset( $new_instance['types'][ $key ] );
- }
- }
-
- if ( isset( $new_instance['display'] ) && in_array( $new_instance['display'], array( 'grid', 'list', 'text' ) ) ) {
- $instance['display'] = $new_instance['display'];
- } else {
- $instance['display'] = 'text';
- }
-
- /**
- * Filters Top Posts Widget settings before they're saved.
- *
- * @module widgets
- *
- * @since 3.9.3
- *
- * @param array $instance The santized widget instance. Only contains data processed by the current widget.
- * @param array $new_instance The new widget instance before sanitization.
- */
- $instance = apply_filters( 'jetpack_top_posts_saving', $instance, $new_instance );
-
- return $instance;
- }
-
- function widget( $args, $instance ) {
- /** This action is documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', 'top_posts' );
-
- $instance = wp_parse_args( (array) $instance, $this->defaults() );
-
- $title = isset( $instance['title'] ) ? $instance['title'] : false;
- if ( false === $title ) {
- $title = $this->default_title;
- }
- /** This filter is documented in core/src/wp-includes/default-widgets.php */
- $title = apply_filters( 'widget_title', $title );
-
- $count = isset( $instance['count'] ) ? (int) $instance['count'] : false;
- if ( $count < 1 || 10 < $count ) {
- $count = 10;
- }
- /**
- * Control the number of displayed posts.
- *
- * @module widgets
- *
- * @since 3.3.0
- *
- * @param string $count Number of Posts displayed in the Top Posts widget. Default is 10.
- */
- $count = apply_filters( 'jetpack_top_posts_widget_count', $count );
-
- $types = isset( $instance['types'] ) ? (array) $instance['types'] : array( 'post', 'page' );
-
- // 'likes' are not available in Jetpack
- $ordering = isset( $instance['ordering'] ) && 'likes' == $instance['ordering'] ? 'likes' : 'views';
-
- if ( isset( $instance['display'] ) && in_array( $instance['display'], array( 'grid', 'list', 'text' ) ) ) {
- $display = $instance['display'];
- } else {
- $display = 'text';
- }
-
- if ( 'text' != $display ) {
- $get_image_options = array(
- 'fallback_to_avatars' => true,
- /** This filter is documented in modules/stats.php */
- 'gravatar_default' => apply_filters( 'jetpack_static_url', set_url_scheme( 'https://en.wordpress.com/i/logo/white-gray-80.png' ) ),
- 'avatar_size' => 40,
- 'width' => null,
- 'height' => null,
- );
- if ( 'grid' == $display ) {
- $get_image_options['avatar_size'] = 200;
- }
- /**
- * Top Posts Widget Image options.
- *
- * @module widgets
- *
- * @since 1.8.0
- *
- * @param array $get_image_options {
- * Array of Image options.
- * @type bool true Should we default to Gravatars when no image is found? Default is true.
- * @type string $gravatar_default Default Image URL if no Gravatar is found.
- * @type int $avatar_size Default Image size.
- * @type mixed $width Image width, not set by default and $avatar_size is used instead.
- * @type mixed $height Image height, not set by default and $avatar_size is used instead.
- * }
- */
- $get_image_options = apply_filters( 'jetpack_top_posts_widget_image_options', $get_image_options );
- }
-
- if ( function_exists( 'wpl_get_blogs_most_liked_posts' ) && 'likes' == $ordering ) {
- $posts = $this->get_by_likes( $count );
- } else {
- $posts = $this->get_by_views( $count, $args );
- }
-
- // Filter the returned posts. Remove all posts that do not match the chosen Post Types.
- if ( isset( $types ) ) {
- foreach ( $posts as $k => $post ) {
- if ( ! in_array( $post['post_type'], $types ) ) {
- unset( $posts[ $k ] );
- }
- }
- }
-
- if ( ! $posts ) {
- $posts = $this->get_fallback_posts();
- }
-
- echo $args['before_widget'];
- if ( ! empty( $title ) ) {
- echo $args['before_title'] . $title . $args['after_title'];
- }
-
- if ( ! $posts ) {
- $link = 'https://jetpack.com/support/getting-more-views-and-traffic/';
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $link = 'http://en.support.wordpress.com/getting-more-site-traffic/';
- }
-
- if ( current_user_can( 'edit_theme_options' ) ) {
- echo '<p>' . sprintf(
- __( 'There are no posts to display. <a href="%s" target="_blank">Want more traffic?</a>', 'jetpack' ),
- esc_url( $link )
- ) . '</p>';
- }
-
- echo $args['after_widget'];
- return;
- }
-
- /**
- * Filter the layout of the Top Posts Widget
- *
- * @module widgets
- *
- * @since 6.4.0
- *
- * @param string $layout layout of the Top Posts Widget (empty string)
- * @param array $posts IDs of the posts to be displayed
- * @param array $display Display option from widget form
- */
- $layout = apply_filters( 'jetpack_top_posts_widget_layout', '', $posts, $display );
- if ( ! empty( $layout ) ) {
- echo $layout;
- echo $args['after_widget'];
- return;
- }
-
- switch ( $display ) {
- case 'list':
- case 'grid':
- // Keep the avatar_size as default dimensions for backward compatibility.
- $width = (int) $get_image_options['avatar_size'];
- $height = (int) $get_image_options['avatar_size'];
-
- // Check if the user has changed the width.
- if ( ! empty( $get_image_options['width'] ) ) {
- $width = (int) $get_image_options['width'];
- }
-
- // Check if the user has changed the height.
- if ( ! empty( $get_image_options['height'] ) ) {
- $height = (int) $get_image_options['height'];
- }
-
- foreach ( $posts as &$post ) {
- $image = Jetpack_PostImages::get_image(
- $post['post_id'],
- array(
- 'fallback_to_avatars' => true,
- 'width' => (int) $width,
- 'height' => (int) $height,
- 'avatar_size' => (int) $get_image_options['avatar_size'],
- )
- );
- $post['image'] = $image['src'];
- if ( 'blavatar' != $image['from'] && 'gravatar' != $image['from'] ) {
- $post['image'] = jetpack_photon_url( $post['image'], array( 'resize' => "$width,$height" ) );
- }
- }
-
- unset( $post );
-
- if ( 'grid' == $display ) {
- echo "<div class='widgets-grid-layout no-grav'>\n";
- foreach ( $posts as $post ) :
- ?>
- <div class="widget-grid-view-image">
- <?php
- /**
- * Fires before each Top Post result, inside <li>.
- *
- * @module widgets
- *
- * @since 3.2.0
- *
- * @param string $post['post_id'] Post ID.
- */
- do_action( 'jetpack_widget_top_posts_before_post', $post['post_id'] );
-
- /**
- * Filter the permalink of items in the Top Posts widget.
- *
- * @module widgets
- *
- * @since 4.4.0
- *
- * @param string $post['permalink'] Post permalink.
- * @param array $post Post array.
- */
- $filtered_permalink = apply_filters( 'jetpack_top_posts_widget_permalink', $post['permalink'], $post );
-
- ?>
- <a href="<?php echo esc_url( $filtered_permalink ); ?>" title="<?php echo esc_attr( wp_kses( $post['title'], array() ) ); ?>" class="bump-view" data-bump-view="tp">
- <img width="<?php echo absint( $width ); ?>" height="<?php echo absint( $height ); ?>" src="<?php echo esc_url( $post['image'] ); ?>" alt="<?php echo esc_attr( wp_kses( $post['title'], array() ) ); ?>" data-pin-nopin="true" />
- </a>
- <?php
- /**
- * Fires after each Top Post result, inside <li>.
- *
- * @module widgets
- *
- * @since 3.2.0
- *
- * @param string $post['post_id'] Post ID.
- */
- do_action( 'jetpack_widget_top_posts_after_post', $post['post_id'] );
- ?>
- </div>
- <?php
- endforeach;
- echo "</div>\n";
- } else {
- echo "<ul class='widgets-list-layout no-grav'>\n";
- foreach ( $posts as $post ) :
- ?>
- <li>
- <?php
- /** This action is documented in modules/widgets/top-posts.php */
- do_action( 'jetpack_widget_top_posts_before_post', $post['post_id'] );
-
- /** This filter is documented in modules/widgets/top-posts.php */
- $filtered_permalink = apply_filters( 'jetpack_top_posts_widget_permalink', $post['permalink'], $post );
- ?>
- <a href="<?php echo esc_url( $filtered_permalink ); ?>" title="<?php echo esc_attr( wp_kses( $post['title'], array() ) ); ?>" class="bump-view" data-bump-view="tp">
- <img width="<?php echo absint( $width ); ?>" height="<?php echo absint( $height ); ?>" src="<?php echo esc_url( $post['image'] ); ?>" class='widgets-list-layout-blavatar' alt="<?php echo esc_attr( wp_kses( $post['title'], array() ) ); ?>" data-pin-nopin="true" />
- </a>
- <div class="widgets-list-layout-links">
- <a href="<?php echo esc_url( $filtered_permalink ); ?>" class="bump-view" data-bump-view="tp">
- <?php echo esc_html( wp_kses( $post['title'], array() ) ); ?>
- </a>
- </div>
- <?php
- /** This action is documented in modules/widgets/top-posts.php */
- do_action( 'jetpack_widget_top_posts_after_post', $post['post_id'] );
- ?>
- </li>
- <?php
- endforeach;
- echo "</ul>\n";
- }
- break;
- default:
- echo '<ul>';
- foreach ( $posts as $post ) :
- ?>
- <li>
- <?php
- /** This action is documented in modules/widgets/top-posts.php */
- do_action( 'jetpack_widget_top_posts_before_post', $post['post_id'] );
-
- /** This filter is documented in modules/widgets/top-posts.php */
- $filtered_permalink = apply_filters( 'jetpack_top_posts_widget_permalink', $post['permalink'], $post );
- ?>
- <a href="<?php echo esc_url( $filtered_permalink ); ?>" class="bump-view" data-bump-view="tp">
- <?php echo esc_html( wp_kses( $post['title'], array() ) ); ?>
- </a>
- <?php
- /** This action is documented in modules/widgets/top-posts.php */
- do_action( 'jetpack_widget_top_posts_after_post', $post['post_id'] );
- ?>
- </li>
- <?php
- endforeach;
- echo '</ul>';
- }
-
- echo $args['after_widget'];
- }
-
- public static function defaults() {
- return array(
- 'title' => esc_html__( 'Top Posts &amp; Pages', 'jetpack' ),
- 'count' => absint( 10 ),
- 'types' => array( 'post', 'page' ),
- 'ordering' => 'views',
- 'display' => 'text',
- );
- }
-
- /*
- * Get most liked posts
- *
- * ONLY TO BE USED IN WPCOM
- */
- function get_by_likes( $count ) {
- $post_likes = wpl_get_blogs_most_liked_posts();
- if ( ! $post_likes ) {
- return array();
- }
-
- return $this->get_posts( array_keys( $post_likes ), $count );
- }
-
- function get_by_views( $count, $args ) {
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- global $wpdb;
-
- $post_views = wp_cache_get( "get_top_posts_$count", 'stats' );
- if ( false === $post_views ) {
- $post_views = array_shift( stats_get_daily_history( false, get_current_blog_id(), 'postviews', 'post_id', false, 2, '', $count * 2 + 10, true ) );
- unset( $post_views[0] );
- wp_cache_add( "get_top_posts_$count", $post_views, 'stats', 1200 );
- }
-
- return $this->get_posts( array_keys( $post_views ), $count );
- }
-
- /**
- * Filter the number of days used to calculate Top Posts for the Top Posts widget.
- * We do not recommend accessing more than 10 days of results at one.
- * When more than 10 days of results are accessed at once, results should be cached via the WordPress transients API.
- * Querying for -1 days will give results for an infinite number of days.
- *
- * @module widgets
- *
- * @since 3.9.3
- *
- * @param int 2 Number of days. Default is 2.
- * @param array $args The widget arguments.
- */
- $days = (int) apply_filters( 'jetpack_top_posts_days', 2, $args );
-
- /** Handling situations where the number of days makes no sense - allows for unlimited days where $days = -1 */
- if ( 0 == $days || false == $days ) {
- $days = 2;
- }
-
- $post_view_posts = stats_get_from_restapi( array(), 'top-posts?max=11&summarize=1&num=' . intval( $days ) );
-
- if ( ! isset( $post_view_posts->summary ) || empty( $post_view_posts->summary->postviews ) ) {
- return array();
- }
-
- $post_view_ids = array_filter( wp_list_pluck( $post_view_posts->summary->postviews, 'id' ) );
-
- if ( ! $post_view_ids ) {
- return array();
- }
-
- return $this->get_posts( $post_view_ids, $count );
- }
-
- function get_fallback_posts() {
- if ( current_user_can( 'edit_theme_options' ) ) {
- return array();
- }
-
- $post_query = new WP_Query;
-
- $posts = $post_query->query(
- array(
- 'posts_per_page' => 1,
- 'post_status' => 'publish',
- 'post_type' => array( 'post', 'page' ),
- 'no_found_rows' => true,
- )
- );
-
- if ( ! $posts ) {
- return array();
- }
-
- $post = array_pop( $posts );
-
- return $this->get_posts( $post->ID, 1 );
- }
-
- function get_posts( $post_ids, $count ) {
- $counter = 0;
-
- $posts = array();
- foreach ( (array) $post_ids as $post_id ) {
- $post = get_post( $post_id );
-
- if ( ! $post ) {
- continue;
- }
-
- /**
- * Attachment pages use the 'inherit' post status by default.
- * To be able to remove attachment pages from private and password protect posts,
- * we need to replace their post status by the parent post' status.
- */
- if ( 'inherit' == $post->post_status && 'attachment' == $post->post_type ) {
- $post->post_status = get_post_status( $post_id );
- }
-
- // hide private and password protected posts
- if ( 'publish' != $post->post_status || ! empty( $post->post_password ) ) {
- continue;
- }
-
- // Both get HTML stripped etc on display
- if ( empty( $post->post_title ) ) {
- $title_source = $post->post_content;
- $title = wp_html_excerpt( $title_source, 50 );
- $title .= '&hellip;';
- } else {
- $title = $post->post_title;
- }
-
- $permalink = get_permalink( $post->ID );
-
- $post_type = $post->post_type;
-
- $posts[] = compact( 'title', 'permalink', 'post_id', 'post_type' );
- $counter++;
-
- if ( $counter == $count ) {
- break; // only need to load and show x number of likes
- }
- }
-
- /**
- * Filter the Top Posts and Pages.
- *
- * @module widgets
- *
- * @since 3.0.0
- *
- * @param array $posts Array of the most popular posts.
- * @param array $post_ids Array of Post IDs.
- * @param string $count Number of Top Posts we want to display.
- */
- return apply_filters( 'jetpack_widget_get_top_posts', $posts, $post_ids, $count );
- }
-}
-
-/**
- * Create a shortcode to display the widget anywhere.
- *
- * @since 3.9.2
- */
-function jetpack_do_top_posts_widget( $instance ) {
- // Post Types can't be entered as an array in the shortcode parameters.
- if ( isset( $instance['types'] ) && is_array( $instance['types'] ) ) {
- $instance['types'] = implode( ',', $instance['types'] );
- }
-
- $instance = shortcode_atts(
- Jetpack_Top_Posts_Widget::defaults(),
- $instance,
- 'jetpack_top_posts_widget'
- );
-
- // Add a class to allow styling
- $args = array(
- 'before_widget' => sprintf( '<div class="%s">', 'jetpack_top_posts_widget' ),
- );
-
- ob_start();
- the_widget( 'Jetpack_Top_Posts_Widget', $instance, $args );
- $output = ob_get_clean();
-
- return $output;
-}
-add_shortcode( 'jetpack_top_posts_widget', 'jetpack_do_top_posts_widget' );
diff --git a/plugins/jetpack/modules/widgets/top-posts/style.css b/plugins/jetpack/modules/widgets/top-posts/style.css
deleted file mode 100644
index ceeae12b..00000000
--- a/plugins/jetpack/modules/widgets/top-posts/style.css
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Top Posts Widget styles for Jetpack
- */
-
-/* 2-Column Grid Layout */
-
-.widgets-grid-layout {
- width: 100%;
-}
-
-.widgets-grid-layout:before,
-.widgets-grid-layout:after {
- content: " ";
- display: table;
-}
-
-.widgets-grid-layout:after {
- clear: both;
-}
-
-.widget-grid-view-image {
- float: left;
- max-width: 50%;
-}
-
-.widget-grid-view-image a {
- display: block;
- margin: 0 2px 4px 0;
-}
-
-.widget-grid-view-image:nth-child(even) {
- float: right;
-}
-
-.widget-grid-view-image:nth-child(even) a {
- margin: 0 0 4px 2px;
-}
-
-.widgets-grid-layout .widget-grid-view-image img {
- max-width: 100%;
- height: auto;
-}
-
-/* Multi-Column Grid Layout */
-
-.widgets-multi-column-grid ul {
- overflow: hidden;
- padding: 0;
- margin: 0;
- list-style-type: none;
-}
-
-.widgets-multi-column-grid ul li {
- background: none;
- clear: none;
- float: left;
- margin: 0 -5px -3px 0;
- padding: 0 8px 6px 0;
- border: none;
- list-style-type: none !important;
-}
-
-.widgets-multi-column-grid ul li a {
- background: none;
- margin: 0;
- padding: 0;
- border: 0;
-}
-
-.widgets-multi-column-grid .avatar {
- vertical-align: middle;
-}
-
-/* List Layout */
-
-.widgets-list-layout {
- padding: 0;
- margin: 0;
- list-style-type: none;
-}
-
-.widgets-list-layout li:before,
-.widgets-list-layout li:after {
- content:"";
- display:table;
-}
-.widgets-list-layout li:after {
- clear:both;
-}
-.widgets-list-layout li {
- zoom:1;
- margin-bottom: 1em;
- list-style-type: none !important;
-}
-
-.widgets-list-layout .widgets-list-layout-blavatar {
- float: left;
- width: 21.276596%;
- max-width: 40px;
- height: auto;
-}
-
-.widgets-list-layout-links {
- float: right;
- width: 73.404255%;
-}
-
-.widgets-list-layout span {
- opacity: 0.5;
-}
-
-.widgets-list-layout span:hover {
- opacity: 0.8;
-}
diff --git a/plugins/jetpack/modules/widgets/twitter-timeline-admin.js b/plugins/jetpack/modules/widgets/twitter-timeline-admin.js
deleted file mode 100644
index e6a65140..00000000
--- a/plugins/jetpack/modules/widgets/twitter-timeline-admin.js
+++ /dev/null
@@ -1,35 +0,0 @@
-jQuery( function( $ ) {
- function twitterWidgetTypeChanged( widgetTypeSelector ) {
- var selectedType = $( widgetTypeSelector ).val();
- $( widgetTypeSelector )
- .closest( '.jetpack-twitter-timeline-widget-type-container' )
- .next( '.jetpack-twitter-timeline-widget-id-container' )
- .find( 'label' )
- .css( 'display', function() {
- var labelType = $( this ).data( 'widget-type' );
- if ( selectedType === labelType ) {
- return '';
- } else {
- return 'none';
- }
- } );
- }
-
- // We could either be in wp-admin/widgets.php or the Customizer.
- var $container = $( '#customize-controls' );
- if ( ! $container.length ) {
- $container = $( '#wpbody' );
- }
-
- // Observe widget settings for 'change' events of the 'type' property for
- // current and future Twitter timeline widgets.
- $container.on( 'change', '.jetpack-twitter-timeline-widget-type', function() {
- twitterWidgetTypeChanged( this );
- } );
-
- // Set the labels for currently existing widgets (including the "template"
- // version that is copied when a new widget is added).
- $container.find( '.jetpack-twitter-timeline-widget-type' ).each( function() {
- twitterWidgetTypeChanged( this );
- } );
-} );
diff --git a/plugins/jetpack/modules/widgets/twitter-timeline.php b/plugins/jetpack/modules/widgets/twitter-timeline.php
deleted file mode 100644
index 0f16e330..00000000
--- a/plugins/jetpack/modules/widgets/twitter-timeline.php
+++ /dev/null
@@ -1,503 +0,0 @@
-<?php
-
-/*
- * Based on Evolution Twitter Timeline
- * (https://wordpress.org/extend/plugins/evolution-twitter-timeline/)
- * For details on Twitter Timelines see:
- * - https://twitter.com/settings/widgets
- * - https://dev.twitter.com/docs/embedded-timelines
- */
-
-/**
- * Register the widget for use in Appearance -> Widgets
- */
-add_action( 'widgets_init', 'jetpack_twitter_timeline_widget_init' );
-
-function jetpack_twitter_timeline_widget_init() {
- register_widget( 'Jetpack_Twitter_Timeline_Widget' );
-}
-
-class Jetpack_Twitter_Timeline_Widget extends WP_Widget {
- /**
- * Register widget with WordPress.
- */
- public function __construct() {
- parent::__construct(
- 'twitter_timeline',
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', esc_html__( 'Twitter Timeline', 'jetpack' ) ),
- array(
- 'classname' => 'widget_twitter_timeline',
- 'description' => __( 'Display an official Twitter Embedded Timeline widget.', 'jetpack' ),
- 'customize_selective_refresh' => true,
- )
- );
-
- if ( is_active_widget( false, false, $this->id_base ) || is_active_widget( false, false, 'monster' ) || is_customize_preview() ) {
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
- }
-
- add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts' ) );
- }
-
- /**
- * Enqueue scripts.
- */
- public function enqueue_scripts() {
- wp_enqueue_script( 'jetpack-twitter-timeline' );
- }
-
- /**
- * Enqueue Twitter's widget library.
- *
- * @deprecated
- */
- public function library() {
- _deprecated_function( __METHOD__, '4.0.0' );
- wp_print_scripts( array( 'jetpack-twitter-timeline' ) );
- }
-
- /**
- * Enqueue script to improve admin UI
- */
- public function admin_scripts( $hook ) {
- // This is still 'widgets.php' when managing widgets via the Customizer.
- if ( 'widgets.php' === $hook ) {
- wp_enqueue_script(
- 'twitter-timeline-admin',
- Jetpack::get_file_url_for_environment(
- '_inc/build/widgets/twitter-timeline-admin.min.js',
- 'modules/widgets/twitter-timeline-admin.js'
- )
- );
- }
- }
-
- /**
- * Front-end display of widget.
- *
- * @see WP_Widget::widget()
- *
- * @param array $args Widget arguments.
- * @param array $instance Saved values from database.
- */
- public function widget( $args, $instance ) {
- // Twitter deprecated `data-widget-id` on 2018-05-25,
- // with cease support deadline on 2018-07-27.
- if ( isset( $instance['type'] ) && 'widget-id' === $instance['type'] ) {
- if ( current_user_can( 'edit_theme_options' ) ) {
- echo $args['before_widget'];
- echo $args['before_title'] . esc_html__( 'Twitter Timeline', 'jetpack' ) . $args['after_title'];
- echo '<p>' . esc_html__( "The Twitter Timeline widget can't display tweets based on searches or hashtags. To display a simple list of tweets instead, change the Widget ID to a Twitter username. Otherwise, delete this widget.", 'jetpack' ) . '</p>';
- echo '<p>' . esc_html__( '(Only administrators will see this message.)', 'jetpack' ) . '</p>';
- echo $args['after_widget'];
- }
- return;
- }
-
- $instance['lang'] = substr( strtoupper( get_locale() ), 0, 2 );
-
- echo $args['before_widget'];
-
- $title = isset( $instance['title'] ) ? $instance['title'] : '';
-
- /** This filter is documented in core/src/wp-includes/default-widgets.php */
- $title = apply_filters( 'widget_title', $title );
- if ( ! empty( $title ) ) {
- echo $args['before_title'] . $title . $args['after_title'];
- }
-
- if ( isset( $instance['type'] ) && 'widget-id' === $instance['type'] && current_user_can( 'edit_theme_options' ) ) {
- echo '<p>' . esc_html__( 'As of July 27, 2018, the Twitter Timeline widget will no longer display tweets based on searches or hashtags. To display a simple list of tweets instead, change the Widget ID to a Twitter username.', 'jetpack' ) . '</p>';
- echo '<p>' . esc_html__( '(Only administrators will see this message.)', 'jetpack' ) . '</p>';
- }
-
- // Start tag output
- // This tag is transformed into the widget markup by Twitter's
- // widgets.js code
- echo '<a class="twitter-timeline"';
-
- $data_attribs = array(
- 'width',
- 'height',
- 'theme',
- 'link-color',
- 'border-color',
- 'tweet-limit',
- 'lang',
- );
- foreach ( $data_attribs as $att ) {
- if ( ! empty( $instance[ $att ] ) && ! is_array( $instance[ $att ] ) ) {
- echo ' data-' . esc_attr( $att ) . '="' . esc_attr( $instance[ $att ] ) . '"';
- }
- }
-
- /** This filter is documented in modules/shortcodes/tweet.php */
- $partner = apply_filters( 'jetpack_twitter_partner_id', 'jetpack' );
- if ( ! empty( $partner ) ) {
- echo ' data-partner="' . esc_attr( $partner ) . '"';
- }
-
- /**
- * Allow the activation of Do Not Track for the Twitter Timeline Widget.
- *
- * @see https://developer.twitter.com/en/docs/twitter-for-websites/timelines/guides/parameter-reference.html
- *
- * @module widgets
- *
- * @since 6.9.0
- *
- * @param bool false Should the Twitter Timeline use the DNT attribute? Default to false.
- */
- $dnt = apply_filters( 'jetpack_twitter_timeline_default_dnt', false );
- if ( true === $dnt ) {
- echo ' data-dnt="true"';
- }
-
- if ( ! empty( $instance['chrome'] ) && is_array( $instance['chrome'] ) ) {
- echo ' data-chrome="' . esc_attr( join( ' ', $instance['chrome'] ) ) . '"';
- }
-
- $type = ( isset( $instance['type'] ) ? $instance['type'] : '' );
- $widget_id = ( isset( $instance['widget-id'] ) ? $instance['widget-id'] : '' );
- switch ( $type ) {
- case 'profile':
- echo ' href="https://twitter.com/' . esc_attr( $widget_id ) . '"';
- break;
- case 'widget-id':
- default:
- echo ' data-widget-id="' . esc_attr( $widget_id ) . '"';
- break;
- }
- echo ' href="https://twitter.com/' . esc_attr( $widget_id ) . '"';
-
- // End tag output
- echo '>';
-
- $timeline_placeholder = __( 'My Tweets', 'jetpack' );
-
- /**
- * Filter the Timeline placeholder text.
- *
- * @module widgets
- *
- * @since 3.4.0
- *
- * @param string $timeline_placeholder Timeline placeholder text.
- */
- $timeline_placeholder = apply_filters( 'jetpack_twitter_timeline_placeholder', $timeline_placeholder );
-
- echo esc_html( $timeline_placeholder ) . '</a>';
-
- // End tag output
-
- echo $args['after_widget'];
-
- /** This action is documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', 'twitter_timeline' );
- }
-
-
- /**
- * Sanitize widget form values as they are saved.
- *
- * @see WP_Widget::update()
- *
- * @param array $new_instance Values just sent to be saved.
- * @param array $old_instance Previously saved values from database.
- *
- * @return array Updated safe values to be saved.
- */
- public function update( $new_instance, $old_instance ) {
- $instance = array();
-
- $instance['title'] = sanitize_text_field( $new_instance['title'] );
-
- $width = (int) $new_instance['width'];
- if ( $width ) {
- // From publish.twitter.com: 220 <= width <= 1200
- $instance['width'] = min( max( $width, 220 ), 1200 );
- } else {
- $instance['width'] = '';
- }
-
- $height = (int) $new_instance['height'];
- if ( $height ) {
- // From publish.twitter.com: height >= 200
- $instance['height'] = max( $height, 200 );
- } else {
- $instance['height'] = '';
- }
-
- $tweet_limit = (int) $new_instance['tweet-limit'];
- if ( $tweet_limit ) {
- $instance['tweet-limit'] = min( max( $tweet_limit, 1 ), 20 );
- /**
- * A timeline with a specified limit is expanded to the height of those Tweets.
- * The specified height value no longer applies, so reject the height value
- * when a valid limit is set: a widget attempting to save both limit 5 and
- * height 400 would be saved with just limit 5.
- */
- $instance['height'] = '';
- } else {
- $instance['tweet-limit'] = null;
- }
-
- // If they entered something that might be a full URL, try to parse it out
- if ( is_string( $new_instance['widget-id'] ) ) {
- if ( preg_match(
- '#https?://twitter\.com/settings/widgets/(\d+)#s',
- $new_instance['widget-id'],
- $matches
- ) ) {
- $new_instance['widget-id'] = $matches[1];
- }
- }
-
- $instance['widget-id'] = sanitize_text_field( $new_instance['widget-id'] );
-
- $hex_regex = '/#([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?\b/';
- foreach ( array( 'link-color', 'border-color' ) as $color ) {
- $new_color = sanitize_text_field( $new_instance[ $color ] );
- if ( preg_match( $hex_regex, $new_color ) ) {
- $instance[ $color ] = $new_color;
- }
- }
-
- $instance['type'] = 'profile';
-
- $instance['theme'] = 'light';
- if ( in_array( $new_instance['theme'], array( 'light', 'dark' ) ) ) {
- $instance['theme'] = $new_instance['theme'];
- }
-
- $instance['chrome'] = array();
- $chrome_settings = array(
- 'noheader',
- 'nofooter',
- 'noborders',
- 'transparent',
- 'noscrollbar',
- );
- if ( isset( $new_instance['chrome'] ) ) {
- foreach ( $new_instance['chrome'] as $chrome ) {
- if ( in_array( $chrome, $chrome_settings ) ) {
- $instance['chrome'][] = $chrome;
- }
- }
- }
-
- return $instance;
- }
-
- /**
- * Returns a link to the documentation for a feature of this widget on
- * Jetpack or WordPress.com.
- */
- public function get_docs_link( $hash = '' ) {
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $base_url = 'https://support.wordpress.com/widgets/twitter-timeline-widget/';
- } else {
- $base_url = 'https://jetpack.com/support/extra-sidebar-widgets/twitter-timeline-widget/';
- }
- return '<a href="' . $base_url . $hash . '" target="_blank">( ? )</a>';
- }
-
- /**
- * Back end widget form.
- *
- * @see WP_Widget::form()
- *
- * @param array $instance Previously saved values from database.
- */
- public function form( $instance ) {
- $defaults = array(
- 'title' => esc_html__( 'Follow me on Twitter', 'jetpack' ),
- 'width' => '',
- 'height' => '400',
- 'type' => 'profile',
- 'widget-id' => '',
- 'link-color' => '#f96e5b',
- 'border-color' => '#e8e8e8',
- 'theme' => 'light',
- 'chrome' => array(),
- 'tweet-limit' => null,
- );
-
- $instance = wp_parse_args( (array) $instance, $defaults );
-
- if ( 'widget-id' === $instance['type'] ) {
- $instance['widget-id'] = '';
- }
-
- $instance['type'] = 'profile';
- ?>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'title' ); ?>">
- <?php esc_html_e( 'Title:', 'jetpack' ); ?>
- </label>
- <input
- class="widefat"
- id="<?php echo $this->get_field_id( 'title' ); ?>"
- name="<?php echo $this->get_field_name( 'title' ); ?>"
- type="text"
- value="<?php echo esc_attr( $instance['title'] ); ?>"
- />
- </p>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'width' ); ?>">
- <?php esc_html_e( 'Maximum Width (px; 220 to 1200):', 'jetpack' ); ?>
- </label>
- <input
- class="widefat"
- id="<?php echo $this->get_field_id( 'width' ); ?>"
- name="<?php echo $this->get_field_name( 'width' ); ?>"
- type="number" min="220" max="1200"
- value="<?php echo esc_attr( $instance['width'] ); ?>"
- />
- </p>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'height' ); ?>">
- <?php esc_html_e( 'Height (px; at least 200):', 'jetpack' ); ?>
- </label>
- <input
- class="widefat"
- id="<?php echo $this->get_field_id( 'height' ); ?>"
- name="<?php echo $this->get_field_name( 'height' ); ?>"
- type="number" min="200"
- value="<?php echo esc_attr( $instance['height'] ); ?>"
- />
- </p>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'tweet-limit' ); ?>">
- <?php esc_html_e( '# of Tweets Shown (1 to 20):', 'jetpack' ); ?>
- </label>
- <input
- class="widefat"
- id="<?php echo $this->get_field_id( 'tweet-limit' ); ?>"
- name="<?php echo $this->get_field_name( 'tweet-limit' ); ?>"
- type="number" min="1" max="20"
- value="<?php echo esc_attr( $instance['tweet-limit'] ); ?>"
- />
- </p>
-
- <p class="jetpack-twitter-timeline-widget-id-container">
- <label for="<?php echo $this->get_field_id( 'widget-id' ); ?>">
- <?php esc_html_e( 'Twitter Username:', 'jetpack' ); ?>
- <?php echo $this->get_docs_link( '#twitter-username' ); ?>
- </label>
- <input
- class="widefat"
- id="<?php echo $this->get_field_id( 'widget-id' ); ?>"
- name="<?php echo $this->get_field_name( 'widget-id' ); ?>"
- type="text"
- value="<?php echo esc_attr( $instance['widget-id'] ); ?>"
- />
- </p>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'chrome-noheader' ); ?>">
- <?php esc_html_e( 'Layout Options:', 'jetpack' ); ?>
- </label>
- <br />
- <input
- type="checkbox"<?php checked( in_array( 'noheader', $instance['chrome'] ) ); ?>
- id="<?php echo $this->get_field_id( 'chrome-noheader' ); ?>"
- name="<?php echo $this->get_field_name( 'chrome' ); ?>[]"
- value="noheader"
- />
- <label for="<?php echo $this->get_field_id( 'chrome-noheader' ); ?>">
- <?php esc_html_e( 'No Header', 'jetpack' ); ?>
- </label>
- <br />
- <input
- type="checkbox"<?php checked( in_array( 'nofooter', $instance['chrome'] ) ); ?>
- id="<?php echo $this->get_field_id( 'chrome-nofooter' ); ?>"
- name="<?php echo $this->get_field_name( 'chrome' ); ?>[]"
- value="nofooter"
- />
- <label for="<?php echo $this->get_field_id( 'chrome-nofooter' ); ?>">
- <?php esc_html_e( 'No Footer', 'jetpack' ); ?>
- </label>
- <br />
- <input
- type="checkbox"<?php checked( in_array( 'noborders', $instance['chrome'] ) ); ?>
- id="<?php echo $this->get_field_id( 'chrome-noborders' ); ?>"
- name="<?php echo $this->get_field_name( 'chrome' ); ?>[]"
- value="noborders"
- />
- <label for="<?php echo $this->get_field_id( 'chrome-noborders' ); ?>">
- <?php esc_html_e( 'No Borders', 'jetpack' ); ?>
- </label>
- <br />
- <input
- type="checkbox"<?php checked( in_array( 'noscrollbar', $instance['chrome'] ) ); ?>
- id="<?php echo $this->get_field_id( 'chrome-noscrollbar' ); ?>"
- name="<?php echo $this->get_field_name( 'chrome' ); ?>[]"
- value="noscrollbar"
- />
- <label for="<?php echo $this->get_field_id( 'chrome-noscrollbar' ); ?>">
- <?php esc_html_e( 'No Scrollbar', 'jetpack' ); ?>
- </label>
- <br />
- <input
- type="checkbox"<?php checked( in_array( 'transparent', $instance['chrome'] ) ); ?>
- id="<?php echo $this->get_field_id( 'chrome-transparent' ); ?>"
- name="<?php echo $this->get_field_name( 'chrome' ); ?>[]"
- value="transparent"
- />
- <label for="<?php echo $this->get_field_id( 'chrome-transparent' ); ?>">
- <?php esc_html_e( 'Transparent Background', 'jetpack' ); ?>
- </label>
- </p>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'link-color' ); ?>">
- <?php _e( 'Link Color (hex):', 'jetpack' ); ?>
- </label>
- <input
- class="widefat"
- id="<?php echo $this->get_field_id( 'link-color' ); ?>"
- name="<?php echo $this->get_field_name( 'link-color' ); ?>"
- type="text"
- value="<?php echo esc_attr( $instance['link-color'] ); ?>"
- />
- </p>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'border-color' ); ?>">
- <?php _e( 'Border Color (hex):', 'jetpack' ); ?>
- </label>
- <input
- class="widefat"
- id="<?php echo $this->get_field_id( 'border-color' ); ?>"
- name="<?php echo $this->get_field_name( 'border-color' ); ?>"
- type="text"
- value="<?php echo esc_attr( $instance['border-color'] ); ?>"
- />
- </p>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'theme' ); ?>">
- <?php _e( 'Timeline Theme:', 'jetpack' ); ?>
- </label>
- <select
- name="<?php echo $this->get_field_name( 'theme' ); ?>"
- id="<?php echo $this->get_field_id( 'theme' ); ?>"
- class="widefat"
- >
- <option value="light"<?php selected( $instance['theme'], 'light' ); ?>>
- <?php esc_html_e( 'Light', 'jetpack' ); ?>
- </option>
- <option value="dark"<?php selected( $instance['theme'], 'dark' ); ?>>
- <?php esc_html_e( 'Dark', 'jetpack' ); ?>
- </option>
- </select>
- </p>
- <?php
- }
-}
diff --git a/plugins/jetpack/modules/widgets/upcoming-events.php b/plugins/jetpack/modules/widgets/upcoming-events.php
deleted file mode 100644
index 36a0257e..00000000
--- a/plugins/jetpack/modules/widgets/upcoming-events.php
+++ /dev/null
@@ -1,131 +0,0 @@
-<?php
-
-class Jetpack_Upcoming_Events_Widget extends WP_Widget {
- function __construct() {
- parent::__construct(
- 'upcoming_events_widget',
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', __( 'Upcoming Events', 'jetpack' ) ),
- array(
- 'description' => __( 'Display upcoming events from an iCalendar feed.', 'jetpack' ),
- 'customize_selective_refresh' => true,
- )
- );
- if ( is_active_widget( false, false, $this->id_base ) ) {
- add_action( 'wp_head', array( $this, 'css' ) );
- }
- }
-
- function css() {
-?>
-<style type="text/css">
-.upcoming-events li {
- margin-bottom: 10px;
-}
-.upcoming-events li span {
- display: block;
-}
-</style>
-<?php
- }
-
- function form( $instance ) {
- $defaults = array(
- 'title' => __( 'Upcoming Events', 'jetpack' ),
- 'feed-url' => '',
- 'count' => 3,
- );
- $instance = array_merge( $defaults, (array) $instance );
-?>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'jetpack' ); ?></label>
- <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $instance['title'] ); ?>" />
- </p>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'feed-url' ); ?>"><?php _e( 'iCalendar Feed URL:', 'jetpack' ); ?></label>
- <input class="widefat" id="<?php echo $this->get_field_id( 'feed-url' ); ?>" name="<?php echo $this->get_field_name( 'feed-url' ); ?>" type="text" value="<?php echo esc_attr( $instance['feed-url'] ); ?>" />
- </p>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'count' ); ?>"><?php _e( 'Items to show:', 'jetpack' ); ?></label>
- <select id="<?php echo $this->get_field_id( 'count' ); ?>" name="<?php echo $this->get_field_name( 'count' ); ?>">
- <?php
- $i = 1;
- while ( $i <= 10 ) {
- ?>
- <option <?php selected( $instance['count'], $i ); ?>><?php echo $i; ?></option>
- <?php $i++; } ?>
- <option value="0" <?php selected( $instance['count'], 0 ); ?>><?php _e( 'All', 'jetpack' ); ?></option>
- </select>
- </p>
-<?php
- }
-
- function update( $new_instance, $old_instance ) {
- $instance['title'] = strip_tags( $new_instance['title'] );
- $instance['feed-url'] = strip_tags( $new_instance['feed-url'] );
- $instance['count'] = min( absint( $new_instance['count'] ), 10 ); // 10 or less
- return $instance;
- }
-
- function widget( $args, $instance ) {
- jetpack_require_lib( 'icalendar-reader' );
-
- $ical = new iCalendarReader();
- $events = $ical->get_events( $instance['feed-url'], $instance['count'] );
- $events = $this->apply_timezone_offset( $events );
- $ical->timezone = null;
-
- echo $args['before_widget'];
- if ( ! empty( $instance['title'] ) ) {
- echo $args['before_title'];
- echo esc_html( $instance['title'] );
- echo $args['after_title'];
- }
-
- if ( ! $events ) : // nothing to display?
-?>
- <p><?php echo __( 'No upcoming events', 'jetpack' ); ?></p>
-<?php
- else :
-?>
- <ul class="upcoming-events">
- <?php foreach ( $events as $event ) : ?>
- <li>
- <strong class="event-summary"><?php echo $ical->escape( stripslashes( $event['SUMMARY'] ) ); ?></strong>
- <span class="event-when"><?php echo $ical->formatted_date( $event ); ?></span>
- <?php if ( ! empty( $event['LOCATION'] ) ) : ?>
- <span class="event-location"><?php echo $ical->escape( stripslashes( $event['LOCATION'] ) ); ?></span>
- <?php endif; ?>
- <?php if ( ! empty( $event['DESCRIPTION'] ) ) : ?>
- <span class="event-description"><?php echo wp_trim_words( $ical->escape( stripcslashes( $event['DESCRIPTION'] ) ) ); ?></span>
- <?php endif; ?>
- </li>
- <?php endforeach; ?>
- </ul>
-<?php
- endif;
-
- echo $args['after_widget'];
-
- /** This action is documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', 'grofile' );
- }
-
- // Left this function here for backward compatibility
- // just incase a site using jetpack is also using this function
- function apply_timezone_offset( $events ) {
- jetpack_require_lib( 'icalendar-reader' );
-
- $ical = new iCalendarReader();
- return $ical->apply_timezone_offset( $events );
- }
-}
-
-function upcoming_events_register_widgets() {
- register_widget( 'Jetpack_Upcoming_Events_Widget' );
-}
-
-add_action( 'widgets_init', 'upcoming_events_register_widgets' );
diff --git a/plugins/jetpack/modules/widgets/wordpress-post-widget.php b/plugins/jetpack/modules/widgets/wordpress-post-widget.php
deleted file mode 100644
index f518ad61..00000000
--- a/plugins/jetpack/modules/widgets/wordpress-post-widget.php
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-/**
- * Plugin Name: Display Recent WordPress Posts Widget
- * Description: Displays recent posts from a WordPress.com or Jetpack-enabled self-hosted WordPress site.
- * Version: 1.0
- * Author: Brad Angelcyk, Kathryn Presner, Justin Shreve, Carolyn Sonnek
- * Author URI: http://automattic.com
- * License: GPL2
- */
-
-/**
- * Disable direct access/execution to/of the widget code.
- */
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-require dirname( __FILE__ ) . '/wordpress-post-widget/class.jetpack-display-posts-widget-base.php';
-require dirname( __FILE__ ) . '/wordpress-post-widget/class.jetpack-display-posts-widget.php';
-
-add_action( 'widgets_init', 'jetpack_display_posts_widget' );
-function jetpack_display_posts_widget() {
- register_widget( 'Jetpack_Display_Posts_Widget' );
-}
-
-
-/**
- * Cron tasks
- */
-
-add_filter( 'cron_schedules', 'jetpack_display_posts_widget_cron_intervals' );
-
-/**
- * Adds 10 minute running interval to the cron schedules.
- *
- * @param array $current_schedules Currently defined schedules list.
- *
- * @return array
- */
-function jetpack_display_posts_widget_cron_intervals( $current_schedules ) {
-
- /**
- * Only add the 10 minute interval if it wasn't already set.
- */
- if ( ! isset( $current_schedules['minutes_10'] ) ) {
- $current_schedules['minutes_10'] = array(
- 'interval' => 10 * MINUTE_IN_SECONDS,
- 'display' => 'Every 10 minutes',
- );
- }
-
- return $current_schedules;
-}
-
-/**
- * Execute the cron task
- */
-add_action( 'jetpack_display_posts_widget_cron_update', 'jetpack_display_posts_update_cron_action' );
-function jetpack_display_posts_update_cron_action() {
- $widget = new Jetpack_Display_Posts_Widget();
- $widget->cron_task();
-}
-
-/**
- * Handle activation procedures for the cron.
- *
- * `updating_jetpack_version` - Handle cron activation when Jetpack gets updated. It's here
- * to cover the first cron activation after the update.
- *
- * `jetpack_activate_module_widgets` - Activate the cron when the Extra Sidebar widgets are activated.
- *
- * `activated_plugin` - Activate the cron when Jetpack gets activated.
- *
- */
-add_action( 'updating_jetpack_version', 'jetpack_display_posts_widget_conditionally_activate_cron' );
-add_action( 'jetpack_activate_module_widgets', 'Jetpack_Display_Posts_Widget::activate_cron' );
-add_action( 'activated_plugin', 'jetpack_conditionally_activate_cron_on_plugin_activation' );
-
-/**
- * Executed when Jetpack gets activated. Tries to activate the cron if it is needed.
- *
- * @param string $plugin_file_name The plugin file that was activated.
- */
-function jetpack_conditionally_activate_cron_on_plugin_activation( $plugin_file_name ) {
- if ( plugin_basename( JETPACK__PLUGIN_FILE ) === $plugin_file_name ) {
- jetpack_display_posts_widget_conditionally_activate_cron();
- }
-}
-
-/**
- * Activates the cron only when needed.
- * @see Jetpack_Display_Posts_Widget::should_cron_be_running
- */
-function jetpack_display_posts_widget_conditionally_activate_cron() {
- $widget = new Jetpack_Display_Posts_Widget();
- if ( $widget->should_cron_be_running() ) {
- $widget->activate_cron();
- }
-
- unset( $widget );
-}
-
-/**
- * End of cron activation handling.
- */
-
-
-/**
- * Handle deactivation procedures where they are needed.
- *
- * If Extra Sidebar Widgets module is deactivated, the cron is not needed.
- *
- * If Jetpack is deactivated, the cron is not needed.
- */
-add_action( 'jetpack_deactivate_module_widgets', 'Jetpack_Display_Posts_Widget::deactivate_cron_static' );
-register_deactivation_hook( plugin_basename( JETPACK__PLUGIN_FILE ), 'Jetpack_Display_Posts_Widget::deactivate_cron_static' );
diff --git a/plugins/jetpack/modules/widgets/wordpress-post-widget/class.jetpack-display-posts-widget-base.php b/plugins/jetpack/modules/widgets/wordpress-post-widget/class.jetpack-display-posts-widget-base.php
deleted file mode 100644
index 8a59545a..00000000
--- a/plugins/jetpack/modules/widgets/wordpress-post-widget/class.jetpack-display-posts-widget-base.php
+++ /dev/null
@@ -1,843 +0,0 @@
-<?php
-
-/*
- * For back-compat, the final widget class must be named
- * Jetpack_Display_Posts_Widget.
- *
- * For convenience, it's nice to have a widget class constructor with no
- * arguments. Otherwise, we have to register the widget with an instance
- * instead of a class name. This makes unregistering annoying.
- *
- * Both WordPress.com and Jetpack implement the final widget class by
- * extending this __Base class and adding data fetching and storage.
- *
- * This would be a bit cleaner with dependency injection, but we already
- * use mocking to test, so it's not a big win.
- *
- * That this widget is currently implemented as these two classes
- * is an implementation detail and should not be depended on :)
- */
-abstract class Jetpack_Display_Posts_Widget__Base extends WP_Widget {
- /**
- * @var string Remote service API URL prefix.
- */
- public $service_url = 'https://public-api.wordpress.com/rest/v1.1/';
-
- public function __construct() {
- parent::__construct(
- // internal id
- 'jetpack_display_posts_widget',
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', __( 'Display WordPress Posts', 'jetpack' ) ),
- array(
- 'description' => __( 'Displays a list of recent posts from another WordPress.com or Jetpack-enabled blog.', 'jetpack' ),
- 'customize_selective_refresh' => true,
- )
- );
-
- if ( is_customize_preview() ) {
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
- }
- }
-
- /**
- * Enqueue CSS and JavaScript.
- *
- * @since 4.0.0
- */
- public function enqueue_scripts() {
- wp_enqueue_style( 'jetpack_display_posts_widget', plugins_url( 'style.css', __FILE__ ) );
- }
-
-
- // DATA STORE: Must implement
-
- /**
- * Gets blog data from the cache.
- *
- * @param string $site
- *
- * @return array|WP_Error
- */
- abstract public function get_blog_data( $site );
-
- /**
- * Update a widget instance.
- *
- * @param string $site The site to fetch the latest data for.
- *
- * @return array - the new data
- */
- abstract public function update_instance( $site );
-
-
- // WIDGET API
-
- /**
- * Set up the widget display on the front end.
- *
- * @param array $args
- * @param array $instance
- */
- public function widget( $args, $instance ) {
- /** This action is documented in modules/widgets/gravatar-profile.php */
- do_action( 'jetpack_stats_extra', 'widget_view', 'display_posts' );
-
- // Enqueue front end assets.
- $this->enqueue_scripts();
-
- $content = $args['before_widget'];
-
- if ( empty( $instance['url'] ) ) {
- if ( current_user_can( 'manage_options' ) ) {
- $content .= '<p>';
- /* Translators: the "Blog URL" field mentioned is the input field labeled as such in the widget form. */
- $content .= esc_html__( 'The Blog URL is not properly setup in the widget.', 'jetpack' );
- $content .= '</p>';
- }
- $content .= $args['after_widget'];
-
- echo $content;
- return;
- }
-
- $data = $this->get_blog_data( $instance['url'] );
- // check for errors
- if ( is_wp_error( $data ) || empty( $data['site_info']['data'] ) ) {
- $content .= '<p>' . __( 'Cannot load blog information at this time.', 'jetpack' ) . '</p>';
- $content .= $args['after_widget'];
-
- echo $content;
- return;
- }
-
- $site_info = $data['site_info']['data'];
-
- if ( ! empty( $instance['title'] ) ) {
- /** This filter is documented in core/src/wp-includes/default-widgets.php */
- $instance['title'] = apply_filters( 'widget_title', $instance['title'] );
- $content .= $args['before_title'] . esc_html( $instance['title'] . ': ' . $site_info->name ) . $args['after_title'];
- }
- else {
- $content .= $args['before_title'] . esc_html( $site_info->name ) . $args['after_title'];
- }
-
- $content .= '<div class="jetpack-display-remote-posts">';
-
- if ( is_wp_error( $data['posts']['data'] ) || empty( $data['posts']['data'] ) ) {
- $content .= '<p>' . __( 'Cannot load blog posts at this time.', 'jetpack' ) . '</p>';
- $content .= '</div><!-- .jetpack-display-remote-posts -->';
- $content .= $args['after_widget'];
-
- echo $content;
- return;
- }
-
- $posts_list = $data['posts']['data'];
-
- /**
- * Show only as much posts as we need. If we have less than configured amount,
- * we must show only that much posts.
- */
- $number_of_posts = min( $instance['number_of_posts'], count( $posts_list ) );
-
- for ( $i = 0; $i < $number_of_posts; $i ++ ) {
- $single_post = $posts_list[ $i ];
- $post_title = ( $single_post['title'] ) ? $single_post['title'] : '( No Title )';
-
- $target = '';
- if ( isset( $instance['open_in_new_window'] ) && $instance['open_in_new_window'] == true ) {
- $target = ' target="_blank" rel="noopener"';
- }
- $content .= '<h4><a href="' . esc_url( $single_post['url'] ) . '"' . $target . '>' . esc_html( $post_title ) . '</a></h4>' . "\n";
- if ( ( $instance['featured_image'] == true ) && ( ! empty ( $single_post['featured_image'] ) ) ) {
- $featured_image = $single_post['featured_image'];
- /**
- * Allows setting up custom Photon parameters to manipulate the image output in the Display Posts widget.
- *
- * @see https://developer.wordpress.com/docs/photon/
- *
- * @module widgets
- *
- * @since 3.6.0
- *
- * @param array $args Array of Photon Parameters.
- */
- $image_params = apply_filters( 'jetpack_display_posts_widget_image_params', array() );
- $content .= '<a title="' . esc_attr( $post_title ) . '" href="' . esc_url( $single_post['url'] ) . '"' . $target . '><img src="' . jetpack_photon_url( $featured_image, $image_params ) . '" alt="' . esc_attr( $post_title ) . '"/></a>';
- }
-
- if ( $instance['show_excerpts'] == true ) {
- $content .= $single_post['excerpt'];
- }
- }
-
- $content .= '</div><!-- .jetpack-display-remote-posts -->';
- $content .= $args['after_widget'];
-
- /**
- * Filter the WordPress Posts widget content.
- *
- * @module widgets
- *
- * @since 4.7.0
- *
- * @param string $content Widget content.
- */
- echo apply_filters( 'jetpack_display_posts_widget_content', $content );
- }
-
- /**
- * Display the widget administration form.
- *
- * @param array $instance Widget instance configuration.
- *
- * @return string|void
- */
- public function form( $instance ) {
-
- /**
- * Initialize widget configuration variables.
- */
- $title = ( isset( $instance['title'] ) ) ? $instance['title'] : __( 'Recent Posts', 'jetpack' );
- $url = ( isset( $instance['url'] ) ) ? $instance['url'] : '';
- $number_of_posts = ( isset( $instance['number_of_posts'] ) ) ? $instance['number_of_posts'] : 5;
- $open_in_new_window = ( isset( $instance['open_in_new_window'] ) ) ? $instance['open_in_new_window'] : false;
- $featured_image = ( isset( $instance['featured_image'] ) ) ? $instance['featured_image'] : false;
- $show_excerpts = ( isset( $instance['show_excerpts'] ) ) ? $instance['show_excerpts'] : false;
-
-
- /**
- * Check if the widget instance has errors available.
- *
- * Only do so if a URL is set.
- */
- $update_errors = array();
-
- if ( ! empty( $url ) ) {
- $data = $this->get_blog_data( $url );
- $update_errors = $this->extract_errors_from_blog_data( $data );
- }
-
- ?>
- <p>
- <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'jetpack' ); ?></label>
- <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
- </p>
-
- <p>
- <label for="<?php echo $this->get_field_id( 'url' ); ?>"><?php _e( 'Blog URL:', 'jetpack' ); ?></label>
- <input class="widefat" id="<?php echo $this->get_field_id( 'url' ); ?>" name="<?php echo $this->get_field_name( 'url' ); ?>" type="text" value="<?php echo esc_attr( $url ); ?>" />
- <i>
- <?php _e( "Enter a WordPress.com or Jetpack WordPress site URL.", 'jetpack' ); ?>
- </i>
- <?php
- /**
- * Show an error if the URL field was left empty.
- *
- * The error is shown only when the widget was already saved.
- */
- if ( empty( $url ) && ! preg_match( '/__i__|%i%/', $this->id ) ) {
- ?>
- <br />
- <i class="error-message"><?php echo __( 'You must specify a valid blog URL!', 'jetpack' ); ?></i>
- <?php
- }
- ?>
- </p>
- <p>
- <label for="<?php echo $this->get_field_id( 'number_of_posts' ); ?>"><?php _e( 'Number of Posts to Display:', 'jetpack' ); ?></label>
- <select name="<?php echo $this->get_field_name( 'number_of_posts' ); ?>">
- <?php
- for ( $i = 1; $i <= 10; $i ++ ) {
- echo '<option value="' . $i . '" ' . selected( $number_of_posts, $i ) . '>' . $i . '</option>';
- }
- ?>
- </select>
- </p>
- <p>
- <label for="<?php echo $this->get_field_id( 'open_in_new_window' ); ?>"><?php _e( 'Open links in new window/tab:', 'jetpack' ); ?></label>
- <input type="checkbox" name="<?php echo $this->get_field_name( 'open_in_new_window' ); ?>" <?php checked( $open_in_new_window, 1 ); ?> />
- </p>
- <p>
- <label for="<?php echo $this->get_field_id( 'featured_image' ); ?>"><?php _e( 'Show Featured Image:', 'jetpack' ); ?></label>
- <input type="checkbox" name="<?php echo $this->get_field_name( 'featured_image' ); ?>" <?php checked( $featured_image, 1 ); ?> />
- </p>
- <p>
- <label for="<?php echo $this->get_field_id( 'show_excerpts' ); ?>"><?php _e( 'Show Excerpts:', 'jetpack' ); ?></label>
- <input type="checkbox" name="<?php echo $this->get_field_name( 'show_excerpts' ); ?>" <?php checked( $show_excerpts, 1 ); ?> />
- </p>
-
- <?php
-
- /**
- * Show error messages.
- */
- if ( ! empty( $update_errors['message'] ) ) {
-
- /**
- * Prepare the error messages.
- */
-
- $where_message = '';
- switch ( $update_errors['where'] ) {
- case 'posts':
- $where_message .= __( 'An error occurred while downloading blog posts list', 'jetpack' );
- break;
-
- /**
- * If something else, beside `posts` and `site_info` broke,
- * don't handle it and default to blog `information`,
- * as it is generic enough.
- */
- case 'site_info':
- default:
- $where_message .= __( 'An error occurred while downloading blog information', 'jetpack' );
- break;
- }
-
- ?>
- <p class="error-message">
- <?php echo esc_html( $where_message ); ?>:
- <br />
- <i>
- <?php echo esc_html( $update_errors['message'] ); ?>
- <?php
- /**
- * If there is any debug - show it here.
- */
- if ( ! empty( $update_errors['debug'] ) ) {
- ?>
- <br />
- <br />
- <?php esc_html_e( 'Detailed information', 'jetpack' ); ?>:
- <br />
- <?php echo esc_html( $update_errors['debug'] ); ?>
- <?php
- }
- ?>
- </i>
- </p>
-
- <?php
- }
- }
-
- public function update( $new_instance, $old_instance ) {
-
- $instance = array();
- $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
- $instance['url'] = ( ! empty( $new_instance['url'] ) ) ? strip_tags( trim( $new_instance['url'] ) ) : '';
- $instance['url'] = preg_replace( "!^https?://!is", "", $instance['url'] );
- $instance['url'] = untrailingslashit( $instance['url'] );
-
-
- /**
- * Check if the URL should be with or without the www prefix before saving.
- */
- if ( ! empty( $instance['url'] ) ) {
- $blog_data = $this->fetch_blog_data( $instance['url'], array(), true );
-
- if ( is_wp_error( $blog_data['site_info']['error'] ) && 'www.' === substr( $instance['url'], 0, 4 ) ) {
- $blog_data = $this->fetch_blog_data( substr( $instance['url'], 4 ), array(), true );
-
- if ( ! is_wp_error( $blog_data['site_info']['error'] ) ) {
- $instance['url'] = substr( $instance['url'], 4 );
- }
- }
- }
-
- $instance['number_of_posts'] = ( ! empty( $new_instance['number_of_posts'] ) ) ? intval( $new_instance['number_of_posts'] ) : '';
- $instance['open_in_new_window'] = ( ! empty( $new_instance['open_in_new_window'] ) ) ? true : '';
- $instance['featured_image'] = ( ! empty( $new_instance['featured_image'] ) ) ? true : '';
- $instance['show_excerpts'] = ( ! empty( $new_instance['show_excerpts'] ) ) ? true : '';
-
- /**
- * If there is no cache entry for the specified URL, run a forced update.
- *
- * @see get_blog_data Returns WP_Error if the cache is empty, which is what is needed here.
- */
- $cached_data = $this->get_blog_data( $instance['url'] );
-
- if ( is_wp_error( $cached_data ) ) {
- $this->update_instance( $instance['url'] );
- }
-
- return $instance;
- }
-
-
- // DATA PROCESSING
-
- /**
- * Expiring transients have a name length maximum of 45 characters,
- * so this function returns an abbreviated MD5 hash to use instead of
- * the full URI.
- *
- * @param string $site Site to get the hash for.
- *
- * @return string
- */
- public function get_site_hash( $site ) {
- return substr( md5( $site ), 0, 21 );
- }
-
- /**
- * Fetch a remote service endpoint and parse it.
- *
- * Timeout is set to 15 seconds right now, because sometimes the WordPress API
- * takes more than 5 seconds to fully respond.
- *
- * Caching is used here so we can avoid re-downloading the same endpoint
- * in a single request.
- *
- * @param string $endpoint Parametrized endpoint to call.
- *
- * @param int $timeout How much time to wait for the API to respond before failing.
- *
- * @return array|WP_Error
- */
- public function fetch_service_endpoint( $endpoint, $timeout = 15 ) {
-
- /**
- * Holds endpoint request cache.
- */
- static $cache = array();
-
- if ( ! isset( $cache[ $endpoint ] ) ) {
- $raw_data = $this->wp_wp_remote_get( $this->service_url . ltrim( $endpoint, '/' ), array( 'timeout' => $timeout ) );
- $cache[ $endpoint ] = $this->parse_service_response( $raw_data );
- }
-
- return $cache[ $endpoint ];
- }
-
- /**
- * Parse data from service response.
- * Do basic error handling for general service and data errors
- *
- * @param array $service_response Response from the service.
- *
- * @return array|WP_Error
- */
- public function parse_service_response( $service_response ) {
- /**
- * If there is an error, we add the error message to the parsed response
- */
- if ( is_wp_error( $service_response ) ) {
- return new WP_Error(
- 'general_error',
- __( 'An error occurred fetching the remote data.', 'jetpack' ),
- $service_response->get_error_messages()
- );
- }
-
- /**
- * Validate HTTP response code.
- */
- if ( 200 !== wp_remote_retrieve_response_code( $service_response ) ) {
- return new WP_Error(
- 'http_error',
- __( 'An error occurred fetching the remote data.', 'jetpack' ),
- wp_remote_retrieve_response_message( $service_response )
- );
- }
-
-
- /**
- * Extract service response body from the request.
- */
-
- $service_response_body = wp_remote_retrieve_body( $service_response );
-
-
- /**
- * No body has been set in the response. This should be pretty bad.
- */
- if ( ! $service_response_body ) {
- return new WP_Error(
- 'no_body',
- __( 'Invalid remote response.', 'jetpack' ),
- 'No body in response.'
- );
- }
-
- /**
- * Parse the JSON response from the API. Convert to associative array.
- */
- $parsed_data = json_decode( $service_response_body );
-
- /**
- * If there is a problem with parsing the posts return an empty array.
- */
- if ( is_null( $parsed_data ) ) {
- return new WP_Error(
- 'no_body',
- __( 'Invalid remote response.', 'jetpack' ),
- 'Invalid JSON from remote.'
- );
- }
-
- /**
- * Check for errors in the parsed body.
- */
- if ( isset( $parsed_data->error ) ) {
- return new WP_Error(
- 'remote_error',
- __( 'It looks like the WordPress site URL is incorrectly configured. Please check it in your widget settings.', 'jetpack' ),
- $parsed_data->error
- );
- }
-
- /**
- * No errors found, return parsed data.
- */
- return $parsed_data;
- }
-
- /**
- * Fetch site information from the WordPress public API
- *
- * @param string $site URL of the site to fetch the information for.
- *
- * @return array|WP_Error
- */
- public function fetch_site_info( $site ) {
-
- $response = $this->fetch_service_endpoint( sprintf( '/sites/%s', urlencode( $site ) ) );
-
- return $response;
- }
-
- /**
- * Parse external API response from the site info call and handle errors if they occur.
- *
- * @param array|WP_Error $service_response The raw response to be parsed.
- *
- * @return array|WP_Error
- */
- public function parse_site_info_response( $service_response ) {
-
- /**
- * If the service returned an error, we pass it on.
- */
- if ( is_wp_error( $service_response ) ) {
- return $service_response;
- }
-
- /**
- * Check if the service returned proper site information.
- */
- if ( ! isset( $service_response->ID ) ) {
- return new WP_Error(
- 'no_site_info',
- __( 'Invalid site information returned from remote.', 'jetpack' ),
- 'No site ID present in the response.'
- );
- }
-
- return $service_response;
- }
-
- /**
- * Fetch list of posts from the WordPress public API.
- *
- * @param int $site_id The site to fetch the posts for.
- *
- * @return array|WP_Error
- */
- public function fetch_posts_for_site( $site_id ) {
-
- $response = $this->fetch_service_endpoint(
- sprintf(
- '/sites/%1$d/posts/%2$s',
- $site_id,
- /**
- * Filters the parameters used to fetch for posts in the Display Posts Widget.
- *
- * @see https://developer.wordpress.com/docs/api/1.1/get/sites/%24site/posts/
- *
- * @module widgets
- *
- * @since 3.6.0
- *
- * @param string $args Extra parameters to filter posts returned from the WordPress.com REST API.
- */
- apply_filters( 'jetpack_display_posts_widget_posts_params', '' )
- )
- );
-
- return $response;
- }
-
- /**
- * Parse external API response from the posts list request and handle errors if any occur.
- *
- * @param object|WP_Error $service_response The raw response to be parsed.
- *
- * @return array|WP_Error
- */
- public function parse_posts_response( $service_response ) {
-
- /**
- * If the service returned an error, we pass it on.
- */
- if ( is_wp_error( $service_response ) ) {
- return $service_response;
- }
-
- /**
- * Check if the service returned proper posts array.
- */
- if ( ! isset( $service_response->posts ) || ! is_array( $service_response->posts ) ) {
- return new WP_Error(
- 'no_posts',
- __( 'No posts data returned by remote.', 'jetpack' ),
- 'No posts information set in the returned data.'
- );
- }
-
- /**
- * Format the posts to preserve storage space.
- */
-
- return $this->format_posts_for_storage( $service_response );
- }
-
- /**
- * Format the posts for better storage. Drop all the data that is not used.
- *
- * @param object $parsed_data Array of posts returned by the APIs.
- *
- * @return array Formatted posts or an empty array if no posts were found.
- */
- public function format_posts_for_storage( $parsed_data ) {
-
- $formatted_posts = array();
-
- /**
- * Only go through the posts list if we have valid posts array.
- */
- if ( isset( $parsed_data->posts ) && is_array( $parsed_data->posts ) ) {
-
- /**
- * Loop through all the posts and format them appropriately.
- */
- foreach ( $parsed_data->posts as $single_post ) {
-
- $prepared_post = array(
- 'title' => $single_post->title ? $single_post->title : '',
- 'excerpt' => $single_post->excerpt ? $single_post->excerpt : '',
- 'featured_image' => $single_post->featured_image ? $single_post->featured_image : '',
- 'url' => $single_post->URL,
- );
-
- /**
- * Append the formatted post to the results.
- */
- $formatted_posts[] = $prepared_post;
- }
- }
-
- return $formatted_posts;
- }
-
- /**
- * Fetch site information and posts list for a site.
- *
- * @param string $site Site to fetch the data for.
- * @param array $original_data Optional original data to updated.
- *
- * @param bool $site_data_only Fetch only site information, skip posts list.
- *
- * @return array Updated or new data.
- */
- public function fetch_blog_data( $site, $original_data = array(), $site_data_only = false ) {
-
- /**
- * If no optional data is supplied, initialize a new structure
- */
- if ( ! empty( $original_data ) ) {
- $widget_data = $original_data;
- }
- else {
- $widget_data = array(
- 'site_info' => array(
- 'last_check' => null,
- 'last_update' => null,
- 'error' => null,
- 'data' => array(),
- ),
- 'posts' => array(
- 'last_check' => null,
- 'last_update' => null,
- 'error' => null,
- 'data' => array(),
- )
- );
- }
-
- /**
- * Update check time and fetch site information.
- */
- $widget_data['site_info']['last_check'] = time();
-
- $site_info_raw_data = $this->fetch_site_info( $site );
- $site_info_parsed_data = $this->parse_site_info_response( $site_info_raw_data );
-
-
- /**
- * If there is an error with the fetched site info, save the error and update the checked time.
- */
- if ( is_wp_error( $site_info_parsed_data ) ) {
- $widget_data['site_info']['error'] = $site_info_parsed_data;
-
- return $widget_data;
- }
- /**
- * If data is fetched successfully, update the data and set the proper time.
- *
- * Data is only updated if we have valid results. This is done this way so we can show
- * something if external service is down.
- *
- */
- else {
- $widget_data['site_info']['last_update'] = time();
- $widget_data['site_info']['data'] = $site_info_parsed_data;
- $widget_data['site_info']['error'] = null;
- }
-
-
- /**
- * If only site data is needed, return it here, don't fetch posts data.
- */
- if ( true === $site_data_only ) {
- return $widget_data;
- }
-
- /**
- * Update check time and fetch posts list.
- */
- $widget_data['posts']['last_check'] = time();
-
- $site_posts_raw_data = $this->fetch_posts_for_site( $site_info_parsed_data->ID );
- $site_posts_parsed_data = $this->parse_posts_response( $site_posts_raw_data );
-
-
- /**
- * If there is an error with the fetched posts, save the error and update the checked time.
- */
- if ( is_wp_error( $site_posts_parsed_data ) ) {
- $widget_data['posts']['error'] = $site_posts_parsed_data;
-
- return $widget_data;
- }
- /**
- * If data is fetched successfully, update the data and set the proper time.
- *
- * Data is only updated if we have valid results. This is done this way so we can show
- * something if external service is down.
- *
- */
- else {
- $widget_data['posts']['last_update'] = time();
- $widget_data['posts']['data'] = $site_posts_parsed_data;
- $widget_data['posts']['error'] = null;
- }
-
- return $widget_data;
- }
-
- /**
- * Scan and extract first error from blog data array.
- *
- * @param array|WP_Error $blog_data Blog data to scan for errors.
- *
- * @return string First error message found
- */
- public function extract_errors_from_blog_data( $blog_data ) {
-
- $errors = array(
- 'message' => '',
- 'debug' => '',
- 'where' => '',
- );
-
-
- /**
- * When the cache result is an error. Usually when the cache is empty.
- * This is not an error case for now.
- */
- if ( is_wp_error( $blog_data ) ) {
- return $errors;
- }
-
- /**
- * Loop through `site_info` and `posts` keys of $blog_data.
- */
- foreach ( array( 'site_info', 'posts' ) as $info_key ) {
-
- /**
- * Contains information on which stage the error ocurred.
- */
- $errors['where'] = $info_key;
-
- /**
- * If an error is set, we want to check it for usable messages.
- */
- if ( isset( $blog_data[ $info_key ]['error'] ) && ! empty( $blog_data[ $info_key ]['error'] ) ) {
-
- /**
- * Extract error message from the error, if possible.
- */
- if ( is_wp_error( $blog_data[ $info_key ]['error'] ) ) {
- /**
- * In the case of WP_Error we want to have the error message
- * and the debug information available.
- */
- $error_messages = $blog_data[ $info_key ]['error']->get_error_messages();
- $errors['message'] = reset( $error_messages );
-
- $extra_data = $blog_data[ $info_key ]['error']->get_error_data();
- if ( is_array( $extra_data ) ) {
- $errors['debug'] = implode( '; ', $extra_data );
- }
- else {
- $errors['debug'] = $extra_data;
- }
-
- break;
- }
- elseif ( is_array( $blog_data[ $info_key ]['error'] ) ) {
- /**
- * In this case we don't have debug information, because
- * we have no way to know the format. The widget works with
- * WP_Error objects only.
- */
- $errors['message'] = reset( $blog_data[ $info_key ]['error'] );
- break;
- }
-
- /**
- * We do nothing if no usable error is found.
- */
- }
- }
-
- return $errors;
- }
-
- /**
- * This is just to make method mocks in the unit tests easier.
- *
- * @param string $url The URL to fetch
- * @param array $args Optional. Request arguments.
- *
- * @return array|WP_Error
- *
- * @codeCoverageIgnore
- */
- public function wp_wp_remote_get( $url, $args = array() ) {
- return wp_remote_get( $url, $args );
- }
-}
diff --git a/plugins/jetpack/modules/widgets/wordpress-post-widget/class.jetpack-display-posts-widget.php b/plugins/jetpack/modules/widgets/wordpress-post-widget/class.jetpack-display-posts-widget.php
deleted file mode 100644
index 265e2ebb..00000000
--- a/plugins/jetpack/modules/widgets/wordpress-post-widget/class.jetpack-display-posts-widget.php
+++ /dev/null
@@ -1,274 +0,0 @@
-<?php
-
-/*
- * Display a list of recent posts from a WordPress.com or Jetpack-enabled blog.
- */
-
-class Jetpack_Display_Posts_Widget extends Jetpack_Display_Posts_Widget__Base {
- /**
- * @var string Widget options key prefix.
- */
- public $widget_options_key_prefix = 'display_posts_site_data_';
-
- /**
- * @var string The name of the cron that will update widget data.
- */
- public static $cron_name = 'jetpack_display_posts_widget_cron_update';
-
-
- // DATA STORE
-
- /**
- * Gets blog data from the cache.
- *
- * @param string $site
- *
- * @return array|WP_Error
- */
- public function get_blog_data( $site ) {
- // load from cache, if nothing return an error
- $site_hash = $this->get_site_hash( $site );
-
- $cached_data = $this->wp_get_option( $this->widget_options_key_prefix . $site_hash );
-
- /**
- * If the cache is empty, return an empty_cache error.
- */
- if ( false === $cached_data ) {
- return new WP_Error(
- 'empty_cache',
- __( 'Information about this blog is currently being retrieved.', 'jetpack' )
- );
- }
-
- return $cached_data;
-
- }
-
- /**
- * Update a widget instance.
- *
- * @param string $site The site to fetch the latest data for.
- *
- * @return array - the new data
- */
- public function update_instance( $site ) {
-
- /**
- * Fetch current information for a site.
- */
- $site_hash = $this->get_site_hash( $site );
-
- $option_key = $this->widget_options_key_prefix . $site_hash;
-
- $instance_data = $this->wp_get_option( $option_key );
-
- /**
- * Fetch blog data and save it in $instance_data.
- */
- $new_data = $this->fetch_blog_data( $site, $instance_data );
-
- /**
- * If the option doesn't exist yet - create a new option
- */
- if ( false === $instance_data ) {
- $this->wp_add_option( $option_key, $new_data );
- }
- else {
- $this->wp_update_option( $option_key, $new_data );
- }
-
- return $new_data;
- }
-
-
- // WIDGET API
-
- public function update( $new_instance, $old_instance ) {
- $instance = parent::update( $new_instance, $old_instance );
-
- /**
- * Forcefully activate the update cron when saving widget instance.
- *
- * So we can be sure that it will be running later.
- */
- $this->activate_cron();
-
- return $instance;
- }
-
-
- // CRON
-
- /**
- * Activates widget update cron task.
- */
- public static function activate_cron() {
- if ( ! wp_next_scheduled( self::$cron_name ) ) {
- wp_schedule_event( time(), 'minutes_10', self::$cron_name );
- }
- }
-
- /**
- * Deactivates widget update cron task.
- *
- * This is a wrapper over the static method as it provides some syntactic sugar.
- */
- public function deactivate_cron() {
- self::deactivate_cron_static();
- }
-
- /**
- * Deactivates widget update cron task.
- */
- public static function deactivate_cron_static() {
- $next_scheduled_time = wp_next_scheduled( self::$cron_name );
- wp_unschedule_event( $next_scheduled_time, self::$cron_name );
- }
-
- /**
- * Checks if the update cron should be running and returns appropriate result.
- *
- * @return bool If the cron should be running or not.
- */
- public function should_cron_be_running() {
- /**
- * The cron doesn't need to run empty loops.
- */
- $widget_instances = $this->get_instances_sites();
-
- if ( empty( $widget_instances ) || ! is_array( $widget_instances ) ) {
- return false;
- }
-
- if ( ! defined( 'IS_WPCOM' ) || ! IS_WPCOM ) {
- /**
- * If Jetpack is not active or in development mode, we don't want to update widget data.
- */
- if ( ! Jetpack::is_active() && ! Jetpack::is_development_mode() ) {
- return false;
- }
-
- /**
- * If Extra Sidebar Widgets module is not active, we don't need to update widget data.
- */
- if ( ! Jetpack::is_module_active( 'widgets' ) ) {
- return false;
- }
- }
-
- /**
- * If none of the above checks failed, then we definitely want to update widget data.
- */
- return true;
- }
-
- /**
- * Main cron code. Updates all instances of the widget.
- *
- * @return bool
- */
- public function cron_task() {
-
- /**
- * If the cron should not be running, disable it.
- */
- if ( false === $this->should_cron_be_running() ) {
- return true;
- }
-
- $instances_to_update = $this->get_instances_sites();
-
- /**
- * If no instances are found to be updated - stop.
- */
- if ( empty( $instances_to_update ) || ! is_array( $instances_to_update ) ) {
- return true;
- }
-
- foreach ( $instances_to_update as $site_url ) {
- $this->update_instance( $site_url );
- }
-
- return true;
- }
-
- /**
- * Get a list of unique sites from all instances of the widget.
- *
- * @return array|bool
- */
- public function get_instances_sites() {
-
- $widget_settings = $this->wp_get_option( 'widget_jetpack_display_posts_widget' );
-
- /**
- * If the widget still hasn't been added anywhere, the config will not be present.
- *
- * In such case we don't want to continue execution.
- */
- if ( false === $widget_settings || ! is_array( $widget_settings ) ) {
- return false;
- }
-
- $urls = array();
-
- foreach ( $widget_settings as $widget_instance_data ) {
- if ( isset( $widget_instance_data['url'] ) && ! empty( $widget_instance_data['url'] ) ) {
- $urls[] = $widget_instance_data['url'];
- }
- }
-
- /**
- * Make sure only unique URLs are returned.
- */
- $urls = array_unique( $urls );
-
- return $urls;
-
- }
-
-
- // MOCKABLES
-
- /**
- * This is just to make method mocks in the unit tests easier.
- *
- * @param string $param Option key to get
- *
- * @return mixed
- *
- * @codeCoverageIgnore
- */
- public function wp_get_option( $param ) {
- return get_option( $param );
- }
-
- /**
- * This is just to make method mocks in the unit tests easier.
- *
- * @param string $option_name Option name to be added
- * @param mixed $option_value Option value
- *
- * @return mixed
- *
- * @codeCoverageIgnore
- */
- public function wp_add_option( $option_name, $option_value ) {
- return add_option( $option_name, $option_value );
- }
-
- /**
- * This is just to make method mocks in the unit tests easier.
- *
- * @param string $option_name Option name to be updated
- * @param mixed $option_value Option value
- *
- * @return mixed
- *
- * @codeCoverageIgnore
- */
- public function wp_update_option( $option_name, $option_value ) {
- return update_option( $option_name, $option_value );
- }
-}
diff --git a/plugins/jetpack/modules/widgets/wordpress-post-widget/style.css b/plugins/jetpack/modules/widgets/wordpress-post-widget/style.css
deleted file mode 100644
index 651ec153..00000000
--- a/plugins/jetpack/modules/widgets/wordpress-post-widget/style.css
+++ /dev/null
@@ -1,24 +0,0 @@
-.jetpack-display-remote-posts {
- margin: 5px 0 20px 0;
-}
-
-.jetpack-display-remote-posts h4 {
- font-size: 90%;
- margin: 5px 0;
- padding: 0;
-}
-
-.jetpack-display-remote-posts h4 a {
- text-decoration: none;
-}
-
-.jetpack-display-remote-posts p {
- margin: 0 !important;
- padding: 0;
- line-height: 1.4em !important;
- font-size: 90%;
-}
-
-.jetpack-display-remote-posts img {
- max-width: 100%;
-}
diff --git a/plugins/jetpack/modules/woocommerce-analytics/classes/wp-woocommerce-analytics-universal.php b/plugins/jetpack/modules/woocommerce-analytics/classes/wp-woocommerce-analytics-universal.php
deleted file mode 100644
index 5214db3f..00000000
--- a/plugins/jetpack/modules/woocommerce-analytics/classes/wp-woocommerce-analytics-universal.php
+++ /dev/null
@@ -1,399 +0,0 @@
-<?php
-/**
- * Jetpack_WooCommerce_Analytics_Universal
- *
- * @package Jetpack
- * @author Automattic
- */
-
-/**
- * Bail if accessed directly
- */
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-/**
- * Class Jetpack_WooCommerce_Analytics_Universal
- * Filters and Actions added to Store pages to perform analytics
- */
-class Jetpack_WooCommerce_Analytics_Universal {
- /**
- * Jetpack_WooCommerce_Analytics_Universal constructor.
- */
- public function __construct() {
- // loading _wca
- add_action( 'wp_head', array( $this, 'wp_head_top' ), 1 );
-
- // add to carts from non-product pages or lists (search, store etc.)
- add_action( 'wp_head', array( $this, 'loop_session_events' ), 2 );
-
- // loading s.js
- add_action( 'wp_head', array( $this, 'wp_head_bottom' ), 999999 );
-
- // Capture cart events
- add_action( 'woocommerce_add_to_cart', array( $this, 'capture_add_to_cart' ), 10, 6 );
-
- // single product page view
- add_action( 'woocommerce_after_single_product', array( $this, 'capture_product_view' ) );
-
- add_action( 'woocommerce_after_cart', array( $this, 'remove_from_cart' ) );
- add_action( 'woocommerce_after_mini_cart', array( $this, 'remove_from_cart' ) );
- add_action( 'wcct_before_cart_widget', array( $this, 'remove_from_cart' ) );
- add_filter( 'woocommerce_cart_item_remove_link', array( $this, 'remove_from_cart_attributes' ), 10, 2 );
-
- // cart checkout
- add_action( 'woocommerce_after_checkout_form', array( $this, 'checkout_process' ) );
-
- // order confirmed
- add_action( 'woocommerce_thankyou', array( $this, 'order_process' ), 10, 1 );
- add_action( 'woocommerce_after_cart', array( $this, 'remove_from_cart_via_quantity' ), 10, 1 );
- }
-
- /**
- * Make _wca available to queue events
- */
- public function wp_head_top() {
- if ( is_cart() || is_checkout() || is_checkout_pay_page() || is_order_received_page() || is_add_payment_method_page() ) {
- $prevent_referrer_code = '<script>window._wca_prevent_referrer = true;</script>';
- echo "$prevent_referrer_code\r\n";
- }
- $wca_code = '<script>window._wca = window._wca || [];</script>';
- echo "$wca_code\r\n";
- }
-
-
- /**
- * Place script to call s.js, Store Analytics
- */
- public function wp_head_bottom() {
- $filename = 's-' . gmdate( 'YW' ) . '.js';
- $async_code = "<script async src='https://stats.wp.com/" . $filename . "'></script>";
- echo "$async_code\r\n";
- }
-
- /**
- * On product lists or other non-product pages, add an event listener to "Add to Cart" button click
- */
- public function loop_session_events() {
- $blogid = Jetpack::get_option( 'id' );
-
- // check for previous add-to-cart cart events
- if ( is_object( WC()->session ) ) {
- $data = WC()->session->get( 'wca_session_data' );
- if ( ! empty( $data ) ) {
- foreach ( $data as $data_instance ) {
- $product = wc_get_product( $data_instance['product_id'] );
- if ( ! $product ) {
- continue;
- }
- $product_details = $this->get_product_details( $product );
- wc_enqueue_js(
- "_wca.push( {
- '_en': '" . esc_js( $data_instance['event'] ) . "',
- 'blog_id': '" . esc_js( $blogid ) . "',
- 'pi': '" . esc_js( $data_instance['product_id'] ) . "',
- 'pn': '" . esc_js( $product_details['name'] ) . "',
- 'pc': '" . esc_js( $product_details['category'] ) . "',
- 'pp': '" . esc_js( $product_details['price'] ) . "',
- 'pq': '" . esc_js( $data_instance['quantity'] ) . "',
- 'pt': '" . esc_js( $product_details['type'] ) . "',
- 'ui': '" . esc_js( $this->get_user_id() ) . "',
- } );"
- );
- }
- // clear data
- WC()->session->set( 'wca_session_data', '' );
- }
- }
- }
-
- /**
- * On the cart page, add an event listener for removal of product click
- */
- public function remove_from_cart() {
-
- // We listen at div.woocommerce because the cart 'form' contents get forcibly
- // updated and subsequent removals from cart would then not have this click
- // handler attached.
- $blogid = Jetpack::get_option( 'id' );
- wc_enqueue_js(
- "jQuery( 'div.woocommerce' ).on( 'click', 'a.remove', function() {
- var productID = jQuery( this ).data( 'product_id' );
- var quantity = jQuery( this ).parent().parent().find( '.qty' ).val()
- var productDetails = {
- 'id': productID,
- 'quantity': quantity ? quantity : '1',
- };
- _wca.push( {
- '_en': 'woocommerceanalytics_remove_from_cart',
- 'blog_id': '" . esc_js( $blogid ) . "',
- 'pi': productDetails.id,
- 'pq': productDetails.quantity,
- 'ui': '" . esc_js( $this->get_user_id() ) . "',
- } );
- } );"
- );
- }
-
- /**
- * Adds the product ID to the remove product link (for use by remove_from_cart above) if not present
- *
- * @param string $url Full HTML a tag of the link to remove an item from the cart.
- * @param string $key Unique Key ID for a cart item.
- *
- * @return mixed.
- */
- public function remove_from_cart_attributes( $url, $key ) {
- if ( false !== strpos( $url, 'data-product_id' ) ) {
- return $url;
- }
-
- $item = WC()->cart->get_cart_item( $key );
- $product = $item['data'];
-
- $new_attributes = sprintf(
- '" data-product_id="%s">',
- esc_attr( $product->get_id() )
- );
-
- $url = str_replace( '">', $new_attributes, $url );
- return $url;
- }
-
- /**
- * Gather relevant product information
- *
- * @param array $product product
- * @return array
- */
- public function get_product_details( $product ) {
- return array(
- 'id' => $product->get_id(),
- 'name' => $product->get_title(),
- 'category' => $this->get_product_categories_concatenated( $product ),
- 'price' => $product->get_price(),
- 'type' => $product->get_type(),
- );
- }
-
- /**
- * Track a product page view
- */
- public function capture_product_view() {
-
- global $product;
- $blogid = Jetpack::get_option( 'id' );
- $product_details = $this->get_product_details( $product );
-
- wc_enqueue_js(
- "_wca.push( {
- '_en': 'woocommerceanalytics_product_view',
- 'blog_id': '" . esc_js( $blogid ) . "',
- 'pi': '" . esc_js( $product_details['id'] ) . "',
- 'pn': '" . esc_js( $product_details['name'] ) . "',
- 'pc': '" . esc_js( $product_details['category'] ) . "',
- 'pp': '" . esc_js( $product_details['price'] ) . "',
- 'pt': '" . esc_js( $product_details['type'] ) . "',
- 'ui': '" . esc_js( $this->get_user_id() ) . "',
- } );"
- );
- }
-
- /**
- * On the Checkout page, trigger an event for each product in the cart
- */
- public function checkout_process() {
-
- $universal_commands = array();
- $cart = WC()->cart->get_cart();
- $blogid = Jetpack::get_option( 'id' );
-
- foreach ( $cart as $cart_item_key => $cart_item ) {
- /**
- * This filter is already documented in woocommerce/templates/cart/cart.php
- */
- $product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );
-
- if ( ! $product ) {
- continue;
- }
-
- $product_details = $this->get_product_details( $product );
-
- $universal_commands[] = "_wca.push( {
- '_en': 'woocommerceanalytics_product_checkout',
- 'blog_id': '" . esc_js( $blogid ) . "',
- 'pi': '" . esc_js( $product_details['id'] ) . "',
- 'pn': '" . esc_js( $product_details['name'] ) . "',
- 'pc': '" . esc_js( $product_details['category'] ) . "',
- 'pp': '" . esc_js( $product_details['price'] ) . "',
- 'pq': '" . esc_js( $cart_item['quantity'] ) . "',
- 'pt': '" . esc_js( $product_details['type'] ) . "',
- 'ui': '" . esc_js( $this->get_user_id() ) . "',
- } );";
- }
-
- wc_enqueue_js( implode( "\r\n", $universal_commands ) );
- }
-
- /**
- * After the checkout process, fire an event for each item in the order
- *
- * @param string $order_id Order Id.
- */
- public function order_process( $order_id ) {
- $order = wc_get_order( $order_id );
- $universal_commands = array();
- $blogid = Jetpack::get_option( 'id' );
-
- // loop through products in the order and queue a purchase event.
- foreach ( $order->get_items() as $order_item_id => $order_item ) {
- $product = $order->get_product_from_item( $order_item );
-
- $product_details = $this->get_product_details( $product );
-
- $universal_commands[] = "_wca.push( {
- '_en': 'woocommerceanalytics_product_purchase',
- 'blog_id': '" . esc_js( $blogid ) . "',
- 'pi': '" . esc_js( $product_details['id'] ) . "',
- 'pn': '" . esc_js( $product_details['name'] ) . "',
- 'pc': '" . esc_js( $product_details['category'] ) . "',
- 'pp': '" . esc_js( $product_details['price'] ) . "',
- 'pq': '" . esc_js( $order_item->get_quantity() ) . "',
- 'pt': '" . esc_js( $product_details['type'] ) . "',
- 'oi': '" . esc_js( $order->get_order_number() ) . "',
- 'ui': '" . esc_js( $this->get_user_id() ) . "',
- } );";
- }
-
- wc_enqueue_js( implode( "\r\n", $universal_commands ) );
- }
-
- /**
- * Listen for clicks on the "Update Cart" button to know if an item has been removed by
- * updating its quantity to zero
- */
- public function remove_from_cart_via_quantity() {
- $blogid = Jetpack::get_option( 'id' );
-
- wc_enqueue_js(
- "
- jQuery( 'button[name=update_cart]' ).on( 'click', function() {
- var cartItems = jQuery( '.cart_item' );
- cartItems.each( function( item ) {
- var qty = jQuery( this ).find( 'input.qty' );
- if ( qty && qty.val() === '0' ) {
- var productID = jQuery( this ).find( '.product-remove a' ).data( 'product_id' );
- _wca.push( {
- '_en': 'woocommerceanalytics_remove_from_cart',
- 'blog_id': '" . esc_js( $blogid ) . "',
- 'pi': productID,
- 'ui': '" . esc_js( $this->get_user_id() ) . "',
- } );
- }
- } );
- } );
- "
- );
- }
-
- /**
- * Get the current user id
- *
- * @return int
- */
- public function get_user_id() {
- if ( is_user_logged_in() ) {
- $blogid = Jetpack::get_option( 'id' );
- $userid = get_current_user_id();
- return $blogid . ':' . $userid;
- }
- return 'null';
- }
-
- /**
- * @param $cart_item_key
- * @param $product_id
- * @param $quantity
- * @param $variation_id
- * @param $variation
- * @param $cart_item_data
- */
- public function capture_add_to_cart( $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data ) {
- $referer_postid = isset( $_SERVER['HTTP_REFERER'] ) ? url_to_postid( $_SERVER['HTTP_REFERER'] ) : 0;
- // if the referring post is not a product OR the product being added is not the same as post
- // (eg. related product list on single product page) then include a product view event
- if ( ! wc_get_product( $referer_postid ) || $product_id != $referer_postid ) {
- $this->capture_event_in_session_data( $product_id, $quantity, 'woocommerceanalytics_product_view' );
- }
- // add cart event to the session data
- $this->capture_event_in_session_data( $product_id, $quantity, 'woocommerceanalytics_add_to_cart' );
- }
-
- /**
- * @param $product_id
- * @param $quantity
- * @param $event
- */
- public function capture_event_in_session_data( $product_id, $quantity, $event ) {
-
- $product = wc_get_product( $product_id );
- if ( ! $product ) {
- return;
- }
-
- $quantity = ( $quantity == 0 ) ? 1 : $quantity;
-
- // check for existing data
- if ( is_object( WC()->session ) ) {
- $data = WC()->session->get( 'wca_session_data' );
- if ( empty( $data ) || ! is_array( $data ) ) {
- $data = array();
- }
- } else {
- $data = array();
- }
-
- // extract new event data
- $new_data = array(
- 'event' => $event,
- 'product_id' => (string) $product_id,
- 'quantity' => (string) $quantity,
- );
-
- // append new data
- $data[] = $new_data;
-
- WC()->session->set( 'wca_session_data', $data );
- }
-
- /**
- * Gets product categories or varation attributes as a formatted concatenated string
- *
- * @param object $product WC_Product.
- * @return string
- */
- public function get_product_categories_concatenated( $product ) {
-
- if ( ! $product ) {
- return '';
- }
-
- $variation_data = $product->is_type( 'variation' ) ? wc_get_product_variation_attributes( $product->get_id() ) : '';
- if ( is_array( $variation_data ) && ! empty( $variation_data ) ) {
- $line = wc_get_formatted_variation( $variation_data, true );
- } else {
- $out = array();
- $categories = get_the_terms( $product->get_id(), 'product_cat' );
- if ( $categories ) {
- foreach ( $categories as $category ) {
- $out[] = $category->name;
- }
- }
- $line = join( '/', $out );
- }
- return $line;
- }
-
-}
diff --git a/plugins/jetpack/modules/woocommerce-analytics/wp-woocommerce-analytics.php b/plugins/jetpack/modules/woocommerce-analytics/wp-woocommerce-analytics.php
deleted file mode 100644
index d078af40..00000000
--- a/plugins/jetpack/modules/woocommerce-analytics/wp-woocommerce-analytics.php
+++ /dev/null
@@ -1,94 +0,0 @@
-<?php
-/**
- * Jetpack_WooCommerce_Analytics is ported from the Jetpack_Google_Analytics code.
- *
- * @package Jetpack
- */
-
-if ( ! defined( 'ABSPATH' ) ) {
- exit;
-}
-
-require_once plugin_basename( 'classes/wp-woocommerce-analytics-universal.php' );
-
-/**
- * Class Jetpack_WooCommerce_Analytics
- * Instantiate WooCommerce Analytics
- */
-class Jetpack_WooCommerce_Analytics {
-
- /**
- * Instance of this class
- *
- * @var Jetpack_WooCommerce_Analytics - Static property to hold our singleton instance
- */
- private static $instance = false;
-
- /**
- * Instance of the Universal functions
- *
- * @var Static property to hold concrete analytics impl that does the work (universal or legacy)
- */
- private static $analytics = false;
-
- /**
- * WooCommerce Analytics is only available to Jetpack connected WooCommerce stores with both plugins set to active
- * and WooCommerce version 3.0 or higher
- *
- * @return bool
- */
- public static function shouldTrackStore() {
- /**
- * Make sure WooCommerce is installed and active
- *
- * This action is documented in https://docs.woocommerce.com/document/create-a-plugin
- */
- if ( ! in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', Jetpack::get_active_plugins() ) ) ) {
- return false;
- }
- // Tracking only Site pages
- if ( is_admin() ) {
- return false;
- }
- // Don't track site admins
- if ( is_user_logged_in() && in_array( 'administrator', wp_get_current_user()->roles ) ) {
- return false;
- }
- // Make sure Jetpack is installed and active
- if ( ! Jetpack::is_active() ) {
- return false;
- }
- // Ensure the WooCommerce class exists and is a valid version
- $minimum_woocommerce_active = class_exists( 'WooCommerce' ) && version_compare( WC_VERSION, '3.0', '>=' );
- if ( ! $minimum_woocommerce_active ) {
- return false;
- }
- return true;
- }
-
- /**
- * This is our constructor, which is private to force the use of get_instance()
- *
- * @return void
- */
- private function __construct() {
- $analytics = new Jetpack_WooCommerce_Analytics_Universal();
- }
-
- /**
- * Function to instantiate our class and make it a singleton
- */
- public static function get_instance() {
- if ( ! self::shouldTrackStore() ) {
- return;
- }
- if ( ! self::$instance ) {
- self::$instance = new self();
- }
-
- return self::$instance;
- }
-}
-
-global $jetpack_woocommerce_analytics;
-$jetpack_woocommerce_analytics = Jetpack_WooCommerce_Analytics::get_instance();
diff --git a/plugins/jetpack/modules/wordads.php b/plugins/jetpack/modules/wordads.php
deleted file mode 100644
index ea10210d..00000000
--- a/plugins/jetpack/modules/wordads.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-/**
- * Module Name: Ads
- * Module Description: Earn income by allowing Jetpack to display high quality ads.
- * Sort Order: 1
- * First Introduced: 4.5.0
- * Requires Connection: Yes
- * Auto Activate: No
- * Module Tags: Traffic, Appearance
- * Additional Search Queries: advertising, ad codes, ads
- * Plans: premium, business
- */
-
-function jetpack_load_wordads() {
- require_once( dirname( __FILE__ ) . "/wordads/wordads.php" );
-}
-
-jetpack_load_wordads();
diff --git a/plugins/jetpack/modules/wordads/css/style.css b/plugins/jetpack/modules/wordads/css/style.css
deleted file mode 100644
index 687334d6..00000000
--- a/plugins/jetpack/modules/wordads/css/style.css
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- HTML markup structure of an ad:
-
- <div class="wpcnt">
- <div class="wpa [wpmrec|wpwidesky|wpleaderboard]">
- <a class="wpa-about" href="http://wordpress.com/about-these-ads/" rel="nofollow">
- About these ads
- </a>
- <div class="u">
- [ad unit here]
- </div>
- </div>
- </div>
-*/
-
-/* outer container */
-.wpcnt {
- text-align: center;
- line-height: 2;
-}
-
-/* inner container */
-.wpa {
- position: relative;
- overflow: hidden; /* this hides "about these ads" when there's no adfill */
- display: inline-block;
- max-width: 100%; /* important! this bit of CSS will *crop* any ad that's larger than the parent container! */
-}
-
-/* about these ads */
-.wpa-about {
- position: absolute;
- top: 5px;
- left: 0;
- right: 0;
- display: block;
- margin-top: 0;
- color: #888;
- font: 10px/1 "Open Sans", Arial, sans-serif !important;
- text-align: left !important;
- text-decoration: none !important;
- opacity: 0.85;
- border-bottom: none !important; /* some themes ad dotted underlines, that won't look nice */
- box-shadow: none !important;
-}
-
-/* ad unit wrapper */
-.wpa .u>div { /* @todo: deprecate wpdvert */
- display: block;
- margin-top: 5px; /* this makes "about these ads" visible */
- margin-bottom: 1em; /* every ad should have a little space below it */
-}
-
-div.wpa>div {
- margin-top: 20px;
-}
-
-.wpa .u .adsbygoogle {
- display: block;
- margin-top: 17px; /* this makes "about these ads" visible */
- margin-bottom: 1em; /* every ad should have a little space below it */
- background-color: transparent;
-}
diff --git a/plugins/jetpack/modules/wordads/php/admin.php b/plugins/jetpack/modules/wordads/php/admin.php
deleted file mode 100644
index b7071666..00000000
--- a/plugins/jetpack/modules/wordads/php/admin.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-/**
- * The standard set of admin pages for the user if Jetpack is installed
- */
-class WordAds_Admin {
-
- /**
- * @since 4.5.0
- */
- function __construct() {
- global $wordads;
-
- if ( current_user_can( 'manage_options' ) && isset( $_GET['ads_debug'] ) ) {
- WordAds_API::update_wordads_status_from_api();
- add_action( 'admin_notices', array( $this, 'debug_output' ) );
- }
- }
-
- /**
- * Output the API connection debug
- *
- * @since 4.5.0
- */
- function debug_output() {
- global $wordads, $wordads_status_response;
- $response = $wordads_status_response;
- if ( empty( $response ) ) {
- $response = 'No response from API :(';
- } else {
- $response = print_r( $response, 1 );
- }
-
- $status = $wordads->option( 'wordads_approved' ) ?
- '<span style="color:green;">Yes</span>' :
- '<span style="color:red;">No</span>';
-
- $type = $wordads->option( 'wordads_approved' ) ? 'updated' : 'error';
- echo <<<HTML
- <div class="notice $type is-dismissible">
- <p>Status: $status</p>
- <pre>$response</pre>
- </div>
-HTML;
- }
-}
-
-global $wordads_admin;
-$wordads_admin = new WordAds_Admin();
diff --git a/plugins/jetpack/modules/wordads/php/api.php b/plugins/jetpack/modules/wordads/php/api.php
deleted file mode 100644
index 34b5235a..00000000
--- a/plugins/jetpack/modules/wordads/php/api.php
+++ /dev/null
@@ -1,143 +0,0 @@
-<?php
-
-/**
- * Methods for accessing data through the WPCOM REST API
- *
- * @since 4.5.0
- */
-class WordAds_API {
-
- private static $wordads_status = null;
-
- /**
- * Returns site's WordAds status
- *
- * @return array boolean values for 'approved' and 'active'
- *
- * @since 4.5.0
- */
- public static function get_wordads_status() {
- global $wordads_status_response;
- if ( Jetpack::is_development_mode() ) {
- self::$wordads_status = array(
- 'approved' => true,
- 'active' => true,
- 'house' => true,
- 'unsafe' => false,
- );
-
- return self::$wordads_status;
- }
-
- $endpoint = sprintf( '/sites/%d/wordads/status', Jetpack::get_option( 'id' ) );
- $wordads_status_response = $response = Jetpack_Client::wpcom_json_api_request_as_blog( $endpoint );
- if ( 200 !== wp_remote_retrieve_response_code( $response ) ) {
- return new WP_Error( 'api_error', __( 'Error connecting to API.', 'jetpack' ), $response );
- }
-
- $body = json_decode( wp_remote_retrieve_body( $response ) );
- self::$wordads_status = array(
- 'approved' => $body->approved,
- 'active' => $body->active,
- 'house' => $body->house,
- 'unsafe' => $body->unsafe,
- );
-
- return self::$wordads_status;
- }
-
- /**
- * Returns the ads.txt content needed to run WordAds.
- *
- * @return array string contents of the ads.txt file.
- *
- * @since 6.1.0
- */
- public static function get_wordads_ads_txt() {
- $endpoint = sprintf( '/sites/%d/wordads/ads-txt', Jetpack::get_option( 'id' ) );
- $wordads_status_response = $response = Jetpack_Client::wpcom_json_api_request_as_blog( $endpoint );
- if ( 200 !== wp_remote_retrieve_response_code( $response ) ) {
- return new WP_Error( 'api_error', __( 'Error connecting to API.', 'jetpack' ), $response );
- }
-
- $body = json_decode( wp_remote_retrieve_body( $response ) );
- $ads_txt = str_replace( '\\n', PHP_EOL, $body->adstxt );
- return $ads_txt;
- }
-
- /**
- * Returns status of WordAds approval.
- *
- * @return boolean true if site is WordAds approved
- *
- * @since 4.5.0
- */
- public static function is_wordads_approved() {
- if ( is_null( self::$wordads_status ) ) {
- self::get_wordads_status();
- }
-
- return self::$wordads_status['approved'] ? '1' : '0';
- }
-
- /**
- * Returns status of WordAds active.
- *
- * @return boolean true if ads are active on site
- *
- * @since 4.5.0
- */
- public static function is_wordads_active() {
- if ( is_null( self::$wordads_status ) ) {
- self::get_wordads_status();
- }
-
- return self::$wordads_status['active'] ? '1' : '0';
- }
-
- /**
- * Returns status of WordAds house ads.
- *
- * @return boolean true if WP.com house ads should be shown
- *
- * @since 4.5.0
- */
- public static function is_wordads_house() {
- if ( is_null( self::$wordads_status ) ) {
- self::get_wordads_status();
- }
-
- return self::$wordads_status['house'] ? '1' : '0';
- }
-
-
- /**
- * Returns whether or not this site is safe to run ads on.
- *
- * @return boolean true if ads shown not be shown on this site.
- *
- * @since 6.5.0
- */
- public static function is_wordads_unsafe() {
- if ( is_null( self::$wordads_status ) ) {
- self::get_wordads_status();
- }
-
- return self::$wordads_status['unsafe'] ? '1' : '0';
- }
-
- /**
- * Grab WordAds status from WP.com API and store as option
- *
- * @since 4.5.0
- */
- static function update_wordads_status_from_api() {
- $status = self::get_wordads_status();
- if ( ! is_wp_error( $status ) ) {
- update_option( 'wordads_approved', self::is_wordads_approved(), true );
- update_option( 'wordads_active', self::is_wordads_active(), true );
- update_option( 'wordads_house', self::is_wordads_house(), true );
- update_option( 'wordads_unsafe', self::is_wordads_unsafe(), true );
- }
- }
-}
diff --git a/plugins/jetpack/modules/wordads/php/cron.php b/plugins/jetpack/modules/wordads/php/cron.php
deleted file mode 100644
index 88677e53..00000000
--- a/plugins/jetpack/modules/wordads/php/cron.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-
-/**
- * WordAds cron tasks
- *
- * @since 4.5.0
- */
-class WordAds_Cron {
-
- /**
- * Add the actions the cron tasks will use
- *
- * @since 4.5.0
- */
- function __construct() {
- add_action( 'wordads_cron_status', array( $this, 'update_wordads_status' ) );
- }
-
- /**
- * Registered scheduled events on activation
- *
- * @since 4.5.0
- */
- static function activate() {
- wp_schedule_event( time(), 'daily', 'wordads_cron_status' );
- }
-
- /**
- * Clear scheduled hooks on deactivation
- *
- * @since 4.5.0
- */
- static function deactivate() {
- wp_clear_scheduled_hook( 'wordads_cron_status' );
- }
-
- /**
- * Grab WordAds status from WP.com API
- *
- * @since 4.5.0
- */
- static function update_wordads_status() {
- WordAds_API::update_wordads_status_from_api();
- }
-}
-
-global $wordads_cron;
-$wordads_cron = new WordAds_Cron();
diff --git a/plugins/jetpack/modules/wordads/php/networks/amazon.php b/plugins/jetpack/modules/wordads/php/networks/amazon.php
deleted file mode 100644
index 19f53fbe..00000000
--- a/plugins/jetpack/modules/wordads/php/networks/amazon.php
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
-
-// stub
diff --git a/plugins/jetpack/modules/wordads/php/params.php b/plugins/jetpack/modules/wordads/php/params.php
deleted file mode 100644
index ef3f3326..00000000
--- a/plugins/jetpack/modules/wordads/php/params.php
+++ /dev/null
@@ -1,226 +0,0 @@
-<?php
-
-class WordAds_Params {
-
- /**
- * Setup parameters for serving the ads
- *
- * @since 4.5.0
- */
- public function __construct() {
- // WordAds setting => default
- $settings = array(
- 'wordads_approved' => false,
- 'wordads_active' => false,
- 'wordads_house' => true,
- 'wordads_unsafe' => false,
- 'enable_header_ad' => true,
- 'wordads_second_belowpost' => true,
- 'wordads_display_front_page' => true,
- 'wordads_display_post' => true,
- 'wordads_display_page' => true,
- 'wordads_display_archive' => true,
- 'wordads_custom_adstxt' => '',
- );
-
- // grab settings, or set as default if it doesn't exist
- $this->options = array();
- foreach ( $settings as $setting => $default ) {
- $option = get_option( $setting, null );
-
- if ( is_null( $option ) ) {
- update_option( $setting, $default, true );
- $option = $default;
- }
-
- $this->options[ $setting ] = 'wordads_custom_adstxt' !== $setting ? (bool) $option : $option;
- }
-
- $host = 'localhost';
- if ( isset( $_SERVER['HTTP_HOST'] ) ) {
- $host = $_SERVER['HTTP_HOST'];
- }
-
- $this->url = ( is_ssl() ? 'https' : 'http' ) . '://' . $host . $_SERVER['REQUEST_URI'];
- if ( ! ( false === strpos( $this->url, '?' ) ) && ! isset( $_GET['p'] ) ) {
- $this->url = substr( $this->url, 0, strpos( $this->url, '?' ) );
- }
-
- $this->cloudflare = self::is_cloudflare();
- $this->blog_id = Jetpack::get_option( 'id', 0 );
- $this->mobile_device = jetpack_is_mobile( 'any', true );
- $this->targeting_tags = array(
- 'WordAds' => 1,
- 'BlogId' => Jetpack::is_development_mode() ? 0 : Jetpack_Options::get_option( 'id' ),
- 'Domain' => esc_js( parse_url( home_url(), PHP_URL_HOST ) ),
- 'PageURL' => esc_js( $this->url ),
- 'LangId' => false !== strpos( get_bloginfo( 'language' ), 'en' ) ? 1 : 0, // TODO something else?
- 'AdSafe' => 1, // TODO
- );
- }
-
- /**
- * @return boolean true if the user is browsing on a mobile device (iPad not included)
- *
- * @since 4.5.0
- */
- public function is_mobile() {
- return ! empty( $this->mobile_device );
- }
-
- /**
- * @return boolean true if site is being served via CloudFlare
- *
- * @since 4.5.0
- */
- public static function is_cloudflare() {
- if (
- defined( 'WORDADS_CLOUDFLARE' )
- || isset( $_SERVER['HTTP_CF_CONNECTING_IP'] )
- || isset( $_SERVER['HTTP_CF_IPCOUNTRY'] )
- || isset( $_SERVER['HTTP_CF_VISITOR'] )
- ) {
- return true;
- }
-
- return false;
- }
-
- /**
- * @return boolean true if user is browsing in iOS device
- *
- * @since 4.5.0
- */
- public function is_ios() {
- return in_array( $this->get_device(), array( 'ipad', 'iphone', 'ipod' ) );
- }
-
- /**
- * Returns the user's device (see user-agent.php) or 'desktop'
- *
- * @return string user device
- *
- * @since 4.5.0
- */
- public function get_device() {
- global $agent_info;
-
- if ( ! empty( $this->mobile_device ) ) {
- return $this->mobile_device;
- }
-
- if ( $agent_info->is_ipad() ) {
- return 'ipad';
- }
-
- return 'desktop';
- }
-
- /**
- * @return string The type of page that is being loaded
- *
- * @since 4.5.0
- */
- public function get_page_type() {
- if ( ! empty( $this->page_type ) ) {
- return $this->page_type;
- }
-
- if ( self::is_static_home() ) {
- $this->page_type = 'static_home';
- } elseif ( is_home() ) {
- $this->page_type = 'home';
- } elseif ( is_page() ) {
- $this->page_type = 'page';
- } elseif ( is_single() ) {
- $this->page_type = 'post';
- } elseif ( is_search() ) {
- $this->page_type = 'search';
- } elseif ( is_category() ) {
- $this->page_type = 'category';
- } elseif ( is_archive() ) {
- $this->page_type = 'archive';
- } else {
- $this->page_type = 'wtf';
- }
-
- return $this->page_type;
- }
-
- /**
- * @return int The page type code for ipw config
- *
- * @since 5.6.0
- */
- public function get_page_type_ipw() {
- if ( ! empty( $this->page_type_ipw ) ) {
- return $this->page_type_ipw;
- }
-
- $page_type_ipw = 6;
- if ( self::is_static_home() || is_home() || is_front_page() ) {
- $page_type_ipw = 0;
- } elseif ( is_page() ) {
- $page_type_ipw = 2;
- } elseif ( is_singular() ) {
- $page_type_ipw = 1;
- } elseif ( is_search() ) {
- $page_type_ipw = 4;
- } elseif ( is_category() || is_tag() || is_archive() || is_author() ) {
- $page_type_ipw = 3;
- } elseif ( is_404() ) {
- $page_type_ipw = 5;
- }
-
- $this->page_type_ipw = $page_type_ipw;
- return $page_type_ipw;
- }
-
- /**
- * Returns true if page is static home
- *
- * @return boolean true if page is static home
- *
- * @since 4.5.0
- */
- public static function is_static_home() {
- return is_front_page() &&
- 'page' == get_option( 'show_on_front' ) &&
- get_option( 'page_on_front' );
- }
-
- /**
- * Logic for if we should show an ad
- *
- * @since 4.5.0
- */
- public function should_show() {
- global $wp_query;
- if ( ( is_front_page() || is_home() ) && ! $this->options['wordads_display_front_page'] ) {
- return false;
- }
-
- if ( is_single() && ! $this->options['wordads_display_post'] ) {
- return false;
- }
-
- if ( is_page() && ! $this->options['wordads_display_page'] ) {
- return false;
- }
-
- if ( ( is_archive() || is_search() ) && ! $this->options['wordads_display_archive'] ) {
- return false;
- }
-
- if ( is_single() || ( is_page() && ! is_home() ) ) {
- return true;
- }
-
- // TODO this would be a good place for allowing the user to specify
- if ( ( is_home() || is_archive() || is_search() ) && 0 == $wp_query->current_post ) {
- return true;
- }
-
- return false;
- }
-}
diff --git a/plugins/jetpack/modules/wordads/php/widgets.php b/plugins/jetpack/modules/wordads/php/widgets.php
deleted file mode 100644
index 782c2dcd..00000000
--- a/plugins/jetpack/modules/wordads/php/widgets.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-
-/**
- * Widget for inserting an ad into your sidebar
- *
- * @since 4.5.0
- */
-class WordAds_Sidebar_Widget extends WP_Widget {
-
- private static $allowed_tags = array( 'mrec', 'wideskyscraper' );
- private static $num_widgets = 0;
-
- function __construct() {
- parent::__construct(
- 'wordads_sidebar_widget',
- /** This filter is documented in modules/widgets/facebook-likebox.php */
- apply_filters( 'jetpack_widget_name', 'Ads' ),
- array(
- 'description' => __( 'Insert an ad unit wherever you can place a widget.', 'jetpack' ),
- 'customize_selective_refresh' => true,
- )
- );
- }
-
- public function widget( $args, $instance ) {
- global $wordads;
- if ( $wordads->should_bail() ) {
- return false;
- }
-
- if ( ! isset( $instance['unit'] ) ) {
- $instance['unit'] = 'mrec';
- }
-
- self::$num_widgets++;
- $about = __( 'Advertisements', 'jetpack' );
- $width = WordAds::$ad_tag_ids[ $instance['unit'] ]['width'];
- $height = WordAds::$ad_tag_ids[ $instance['unit'] ]['height'];
- $unit_id = 1 == self::$num_widgets ? 3 : self::$num_widgets + 3; // 2nd belowpost is '4'
- $section_id = 0 === $wordads->params->blog_id ?
- WORDADS_API_TEST_ID :
- $wordads->params->blog_id . $unit_id;
-
- $snippet = '';
- if ( $wordads->option( 'wordads_house', true ) ) {
- $unit = 'mrec';
- if ( 'leaderboard' == $instance['unit'] && ! $this->params->mobile_device ) {
- $unit = 'leaderboard';
- } elseif ( 'wideskyscraper' == $instance['unit'] ) {
- $unit = 'widesky';
- }
-
- $snippet = $wordads->get_house_ad( $unit );
- } else {
- $snippet = $wordads->get_ad_snippet( $section_id, $height, $width, 'widget' );
- }
-
- echo <<< HTML
- <div class="wpcnt">
- <div class="wpa">
- <span class="wpa-about">$about</span>
- <div class="u {$instance['unit']}">
- $snippet
- </div>
- </div>
- </div>
-HTML;
- }
-
- public function form( $instance ) {
- // ad unit type
- if ( isset( $instance['unit'] ) ) {
- $unit = $instance['unit'];
- } else {
- $unit = 'mrec';
- }
- ?>
- <p>
- <label for="<?php echo esc_attr( $this->get_field_id( 'unit' ) ); ?>"><?php _e( 'Tag Dimensions:', 'jetpack' ); ?></label>
- <select class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'unit' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'unit' ) ); ?>">
- <?php
- foreach ( WordAds::$ad_tag_ids as $ad_unit => $properties ) {
- if ( ! in_array( $ad_unit, self::$allowed_tags ) ) {
- continue;
- }
-
- $splits = explode( '_', $properties['tag'] );
- $unit_pretty = "{$splits[0]} {$splits[1]}";
- $selected = selected( $ad_unit, $unit, false );
- echo "<option value='", esc_attr( $ad_unit ) ,"' ", $selected, '>', esc_html( $unit_pretty ) , '</option>';
- }
- ?>
- </select>
- </p>
- <?php
- }
-
- public function update( $new_instance, $old_instance ) {
- $instance = $old_instance;
-
- if ( in_array( $new_instance['unit'], self::$allowed_tags ) ) {
- $instance['unit'] = $new_instance['unit'];
- } else {
- $instance['unit'] = 'mrec';
- }
-
- return $instance;
- }
-}
-
-function jetpack_wordads_widgets_init_callback() {
- return register_widget( 'WordAds_Sidebar_Widget' );
-}
-
-add_action( 'widgets_init', 'jetpack_wordads_widgets_init_callback' );
diff --git a/plugins/jetpack/modules/wordads/wordads.php b/plugins/jetpack/modules/wordads/wordads.php
deleted file mode 100644
index 3d3a886f..00000000
--- a/plugins/jetpack/modules/wordads/wordads.php
+++ /dev/null
@@ -1,598 +0,0 @@
-<?php
-
-define( 'WORDADS_ROOT', dirname( __FILE__ ) );
-define( 'WORDADS_BASENAME', plugin_basename( __FILE__ ) );
-define( 'WORDADS_FILE_PATH', WORDADS_ROOT . '/' . basename( __FILE__ ) );
-define( 'WORDADS_URL', plugins_url( '/', __FILE__ ) );
-define( 'WORDADS_API_TEST_ID', '26942' );
-define( 'WORDADS_API_TEST_ID2', '114160' );
-
-require_once WORDADS_ROOT . '/php/widgets.php';
-require_once WORDADS_ROOT . '/php/api.php';
-require_once WORDADS_ROOT . '/php/cron.php';
-
-class WordAds {
-
- public $params = null;
-
- public $ads = array();
-
- /**
- * Array of supported ad types.
- *
- * @var array
- */
- public static $ad_tag_ids = array(
- 'mrec' => array(
- 'tag' => '300x250_mediumrectangle',
- 'height' => '250',
- 'width' => '300',
- ),
- 'leaderboard' => array(
- 'tag' => '728x90_leaderboard',
- 'height' => '90',
- 'width' => '728',
- ),
- 'mobile_leaderboard' => array(
- 'tag' => '320x50_mobileleaderboard',
- 'height' => '50',
- 'width' => '320',
- ),
- 'wideskyscraper' => array(
- 'tag' => '160x600_wideskyscraper',
- 'height' => '600',
- 'width' => '160',
- ),
- );
-
- public static $SOLO_UNIT_CSS = 'float:left;margin-right:5px;margin-top:0px;';
-
- /**
- * Convenience function for grabbing options from params->options
- *
- * @param string $option the option to grab
- * @param mixed $default (optional)
- * @return option or $default if not set
- *
- * @since 4.5.0
- */
- function option( $option, $default = false ) {
- if ( ! isset( $this->params->options[ $option ] ) ) {
- return $default;
- }
-
- return $this->params->options[ $option ];
- }
-
- /**
- * Returns the ad tag property array for supported ad types.
- * @return array array with ad tags
- *
- * @since 7.1.0
- */
- function get_ad_tags() {
- return self::$ad_tag_ids;
- }
-
- /**
- * Returns the solo css for unit
- * @return string the special css for solo units
- *
- * @since 7.1.0
- */
- function get_solo_unit_css() {
- return self::$SOLO_UNIT_CSS;
- }
-
- /**
- * Instantiate the plugin
- *
- * @since 4.5.0
- */
- function __construct() {
- add_action( 'init', array( $this, 'init' ) );
- }
-
- /**
- * Code to run on WordPress 'init' hook
- *
- * @since 4.5.0
- */
- function init() {
- require_once WORDADS_ROOT . '/php/params.php';
- $this->params = new WordAds_Params();
-
- if ( $this->should_bail() || self::is_infinite_scroll() ) {
- return;
- }
-
- if ( is_admin() ) {
- require_once WORDADS_ROOT . '/php/admin.php';
- return;
- }
-
- $this->insert_adcode();
-
- if ( '/ads.txt' === $_SERVER['REQUEST_URI'] ) {
-
- if ( false === ( $ads_txt_transient = get_transient( 'jetpack_ads_txt' ) ) ) {
- $ads_txt_transient = ! is_wp_error( WordAds_API::get_wordads_ads_txt() ) ? WordAds_API::get_wordads_ads_txt() : '';
- set_transient( 'jetpack_ads_txt', $ads_txt_transient, DAY_IN_SECONDS );
- }
-
- /**
- * Provide plugins a way of modifying the contents of the automatically-generated ads.txt file.
- *
- * @module wordads
- *
- * @since 6.1.0
- *
- * @param string WordAds_API::get_wordads_ads_txt() The contents of the ads.txt file.
- */
- $ads_txt_content = apply_filters( 'wordads_ads_txt', $ads_txt_transient );
-
- header( 'Content-Type: text/plain; charset=utf-8' );
- echo esc_html( $ads_txt_content );
- die();
- }
- }
-
- /**
- * Check for Jetpack's The_Neverending_Home_Page and use got_infinity
- *
- * @return boolean true if load came from infinite scroll
- *
- * @since 4.5.0
- */
- public static function is_infinite_scroll() {
- return class_exists( 'The_Neverending_Home_Page' ) && The_Neverending_Home_Page::got_infinity();
- }
-
- /**
- * Add the actions/filters to insert the ads. Checks for mobile or desktop.
- *
- * @since 4.5.0
- */
- private function insert_adcode() {
- add_action( 'wp_head', array( $this, 'insert_head_meta' ), 20 );
- add_action( 'wp_head', array( $this, 'insert_head_iponweb' ), 30 );
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
- add_filter( 'wordads_ads_txt', array( $this, 'insert_custom_adstxt' ) );
-
- /**
- * Filters enabling ads in `the_content` filter
- *
- * @see https://jetpack.com/support/ads/
- *
- * @module wordads
- *
- * @since 5.8.0
- *
- * @param bool True to disable ads in `the_content`
- */
- if ( ! apply_filters( 'wordads_content_disable', false ) ) {
- add_filter( 'the_content', array( $this, 'insert_ad' ) );
- }
-
- /**
- * Filters enabling ads in `the_excerpt` filter
- *
- * @see https://jetpack.com/support/ads/
- *
- * @module wordads
- *
- * @since 5.8.0
- *
- * @param bool True to disable ads in `the_excerpt`
- */
- if ( ! apply_filters( 'wordads_excerpt_disable', false ) ) {
- add_filter( 'the_excerpt', array( $this, 'insert_ad' ) );
- }
-
- if ( $this->option( 'enable_header_ad', true ) ) {
- switch ( get_stylesheet() ) {
- case 'twentyseventeen':
- case 'twentyfifteen':
- case 'twentyfourteen':
- add_action( 'wp_footer', array( $this, 'insert_header_ad_special' ) );
- break;
- default:
- add_action( 'wp_head', array( $this, 'insert_header_ad' ), 100 );
- break;
- }
- }
- }
-
- /**
- * Register desktop scripts and styles
- *
- * @since 4.5.0
- */
- function enqueue_scripts() {
- wp_enqueue_style(
- 'wordads',
- WORDADS_URL . 'css/style.css',
- array(),
- '2015-12-18'
- );
- }
-
- /**
- * IPONWEB metadata used by the various scripts
- *
- * @return [type] [description]
- */
- function insert_head_meta() {
- $themename = esc_js( get_stylesheet() );
- $pagetype = intval( $this->params->get_page_type_ipw() );
- $data_tags = ( $this->params->cloudflare ) ? ' data-cfasync="false"' : '';
- $site_id = $this->params->blog_id;
- $consent = intval( isset( $_COOKIE['personalized-ads-consent'] ) );
- echo <<<HTML
- <script$data_tags type="text/javascript">
- var __ATA_PP = { pt: $pagetype, ht: 2, tn: '$themename', amp: false, siteid: $site_id, consent: $consent };
- var __ATA = __ATA || {};
- __ATA.cmd = __ATA.cmd || [];
- __ATA.criteo = __ATA.criteo || {};
- __ATA.criteo.cmd = __ATA.criteo.cmd || [];
- </script>
-HTML;
- }
-
- /**
- * IPONWEB scripts in <head>
- *
- * @since 4.5.0
- */
- function insert_head_iponweb() {
- $data_tags = ( $this->params->cloudflare ) ? ' data-cfasync="false"' : '';
- echo <<<HTML
- <link rel='dns-prefetch' href='//s.pubmine.com' />
- <link rel='dns-prefetch' href='//x.bidswitch.net' />
- <link rel='dns-prefetch' href='//static.criteo.net' />
- <link rel='dns-prefetch' href='//ib.adnxs.com' />
- <link rel='dns-prefetch' href='//aax.amazon-adsystem.com' />
- <link rel='dns-prefetch' href='//bidder.criteo.com' />
- <link rel='dns-prefetch' href='//cas.criteo.com' />
- <link rel='dns-prefetch' href='//gum.criteo.com' />
- <link rel='dns-prefetch' href='//ads.pubmatic.com' />
- <link rel='dns-prefetch' href='//gads.pubmatic.com' />
- <link rel='dns-prefetch' href='//tpc.googlesyndication.com' />
- <link rel='dns-prefetch' href='//ad.doubleclick.net' />
- <link rel='dns-prefetch' href='//googleads.g.doubleclick.net' />
- <link rel='dns-prefetch' href='//www.googletagservices.com' />
- <script$data_tags async type="text/javascript" src="//s.pubmine.com/head.js"></script>
-HTML;
- }
-
- /**
- * Insert the ad onto the page
- *
- * @since 4.5.0
- */
- function insert_ad( $content ) {
- // Don't insert ads in feeds, or for anything but the main display. (This is required for compatibility with the Publicize module).
- if ( is_feed() || ! is_main_query() || ! in_the_loop() ) {
- return $content;
- }
- /**
- * Allow third-party tools to disable the display of in post ads.
- *
- * @module wordads
- *
- * @since 4.5.0
- *
- * @param bool true Should the in post unit be disabled. Default to false.
- */
- $disable = apply_filters( 'wordads_inpost_disable', false );
- if ( ! $this->params->should_show() || $disable ) {
- return $content;
- }
-
- $ad_type = $this->option( 'wordads_house' ) ? 'house' : 'iponweb';
- return $content . $this->get_ad( 'belowpost', $ad_type );
- }
-
- /**
- * Insert an inline ad into a post content
- * Used for rendering the `wordads` shortcode.
- *
- * @since 6.1.0
- */
- function insert_inline_ad( $content ) {
- // Ad JS won't work in XML feeds.
- if ( is_feed() ) {
- return $content;
- }
- /**
- * Allow third-party tools to disable the display of in post ads.
- *
- * @module wordads
- *
- * @since 4.5.0
- *
- * @param bool true Should the in post unit be disabled. Default to false.
- */
- $disable = apply_filters( 'wordads_inpost_disable', false );
- if ( $disable ) {
- return $content;
- }
-
- $ad_type = $this->option( 'wordads_house' ) ? 'house' : 'iponweb';
- $content .= $this->get_ad( 'inline', $ad_type );
- return $content;
- }
-
- /**
- * Inserts ad into header
- *
- * @since 4.5.0
- */
- function insert_header_ad() {
- /**
- * Allow third-party tools to disable the display of header ads.
- *
- * @module wordads
- *
- * @since 4.5.0
- *
- * @param bool true Should the header unit be disabled. Default to false.
- */
- if ( apply_filters( 'wordads_header_disable', false ) ) {
- return;
- }
-
- $ad_type = $this->option( 'wordads_house' ) ? 'house' : 'iponweb';
- echo $this->get_ad( 'top', $ad_type );
- }
-
- /**
- * Special cases for inserting header unit via jQuery
- *
- * @since 4.5.0
- */
- function insert_header_ad_special() {
- /**
- * Allow third-party tools to disable the display of header ads.
- *
- * @module wordads
- *
- * @since 4.5.0
- *
- * @param bool true Should the header unit be disabled. Default to false.
- */
- if ( apply_filters( 'wordads_header_disable', false ) ) {
- return;
- }
-
- $selector = '#content';
- switch ( get_stylesheet() ) {
- case 'twentyseventeen':
- $selector = '#content';
- break;
- case 'twentyfifteen':
- $selector = '#main';
- break;
- case 'twentyfourteen':
- $selector = 'article:first';
- break;
- }
-
- $ad_type = $this->option( 'wordads_house' ) ? 'house' : 'iponweb';
- echo $this->get_ad( 'top', $ad_type );
- echo <<<HTML
- <script type="text/javascript">
- jQuery('.wpcnt-header').insertBefore('$selector');
- </script>
-HTML;
- }
-
- /**
- * Filter the latest ads.txt to include custom user entries. Strips any tags or whitespace.
- *
- * @param string $adstxt The ads.txt being filtered
- * @return string Filtered ads.txt with custom entries, if applicable
- *
- * @since 6.5.0
- */
- function insert_custom_adstxt( $adstxt ) {
- $custom_adstxt = trim( wp_strip_all_tags( $this->option( 'wordads_custom_adstxt' ) ) );
- if ( $custom_adstxt ) {
- $adstxt .= "\n\n#Jetpack - User Custom Entries\n";
- $adstxt .= $custom_adstxt . "\n";
- }
-
- return $adstxt;
- }
-
- /**
- * Get the ad for the spot and type.
- *
- * @param string $spot top, side, inline, or belowpost
- * @param string $type iponweb or adsense
- */
- function get_ad( $spot, $type = 'iponweb' ) {
- $snippet = '';
- if ( 'iponweb' == $type ) {
- // Default to mrec
- $width = 300;
- $height = 250;
-
- $section_id = WORDADS_API_TEST_ID;
- $second_belowpost = '';
- $snippet = '';
- if ( 'top' == $spot ) {
- // mrec for mobile, leaderboard for desktop
- $section_id = 0 === $this->params->blog_id ? WORDADS_API_TEST_ID : $this->params->blog_id . '2';
- $width = $this->params->mobile_device ? 300 : 728;
- $height = $this->params->mobile_device ? 250 : 90;
- $snippet = $this->get_ad_snippet( $section_id, $height, $width, $spot );
- } elseif ( 'belowpost' == $spot ) {
- $section_id = 0 === $this->params->blog_id ? WORDADS_API_TEST_ID : $this->params->blog_id . '1';
- $width = 300;
- $height = 250;
-
- $snippet = $this->get_ad_snippet( $section_id, $height, $width, $spot, self::$SOLO_UNIT_CSS );
- if ( $this->option( 'wordads_second_belowpost', true ) ) {
- $section_id2 = 0 === $this->params->blog_id ? WORDADS_API_TEST_ID2 : $this->params->blog_id . '4';
- $snippet .= $this->get_ad_snippet( $section_id2, $height, $width, $spot, 'float:left;margin-top:0px;' );
- }
- } elseif ( 'inline' === $spot ) {
- $section_id = 0 === $this->params->blog_id ? WORDADS_API_TEST_ID : $this->params->blog_id . '5';
- $snippet = $this->get_ad_snippet( $section_id, $height, $width, $spot, 'mrec', self::$SOLO_UNIT_CSS );
- }
- } elseif ( 'house' == $type ) {
- $leaderboard = 'top' == $spot && ! $this->params->mobile_device;
- $snippet = $this->get_house_ad( $leaderboard ? 'leaderboard' : 'mrec' );
- if ( 'belowpost' == $spot && $this->option( 'wordads_second_belowpost', true ) ) {
- $snippet .= $this->get_house_ad( $leaderboard ? 'leaderboard' : 'mrec' );
- }
- }
-
- return $this->get_ad_div( $spot, $snippet );
- }
-
-
- /**
- * Returns the snippet to be inserted into the ad unit
- *
- * @param int $section_id
- * @param int $height
- * @param int $width
- * @param int $location
- * @param string $css
- * @return string
- *
- * @since 5.7
- */
- function get_ad_snippet( $section_id, $height, $width, $location = '', $css = '' ) {
- $this->ads[] = array(
- 'location' => $location,
- 'width' => $width,
- 'height' => $height,
- );
- $ad_number = count( $this->ads ) . '-' . uniqid();
-
- $data_tags = $this->params->cloudflare ? ' data-cfasync="false"' : '';
- $css = esc_attr( $css );
-
- return <<<HTML
- <div style="padding-bottom:15px;width:{$width}px;height:{$height}px;$css">
- <div id="atatags-{$ad_number}">
- <script$data_tags type="text/javascript">
- __ATA.cmd.push(function() {
- __ATA.initSlot('atatags-{$ad_number}', {
- collapseEmpty: 'before',
- sectionId: '{$section_id}',
- location: '{$location}',
- width: {$width},
- height: {$height}
- });
- });
- </script>
- </div>
- </div>
-HTML;
- }
-
- /**
- * Returns the complete ad div with snippet to be inserted into the page
- *
- * @param string $spot top, side, inline, or belowpost
- * @param string $snippet The snippet to insert into the div
- * @param array $css_classes
- * @return string The supporting ad unit div
- *
- * @since 7.1
- */
- function get_ad_div( $spot, $snippet, array $css_classes = array() ) {
- if ( empty( $css_classes ) ) {
- $css_classes = array();
- }
-
- $css_classes[] = 'wpcnt';
- if ( 'top' == $spot ) {
- $css_classes[] = 'wpcnt-header';
- }
-
- $spot = esc_attr( $spot );
- $classes = esc_attr( implode( ' ', $css_classes ) );
- $about = esc_html__( 'Advertisements', 'jetpack' );
- return <<<HTML
- <div class="$classes">
- <div class="wpa">
- <span class="wpa-about">$about</span>
- <div class="u $spot">
- $snippet
- </div>
- </div>
- </div>
-HTML;
- }
-
- /**
- * Check the reasons to bail before we attempt to insert ads.
- *
- * @return true if we should bail (don't insert ads)
- *
- * @since 4.5.0
- */
- public function should_bail() {
- return ! $this->option( 'wordads_approved' ) || (bool) $this->option( 'wordads_unsafe' );
- }
-
- /**
- * Returns markup for HTML5 house ad base on unit
- *
- * @param string $unit mrec, widesky, or leaderboard
- * @return string markup for HTML5 house ad
- *
- * @since 4.7.0
- */
- public function get_house_ad( $unit = 'mrec' ) {
-
- switch ( $unit ) {
- case 'widesky':
- $width = 160;
- $height = 600;
- break;
- case 'leaderboard':
- $width = 728;
- $height = 90;
- break;
- case 'mrec':
- default:
- $width = 300;
- $height = 250;
- break;
- }
-
- return <<<HTML
- <iframe
- src="https://s0.wp.com/wp-content/blog-plugins/wordads/house/html5/$unit/index.html"
- width="$width"
- height="$height"
- frameborder="0"
- scrolling="no"
- marginheight="0"
- marginwidth="0">
- </iframe>
-HTML;
- }
-
- /**
- * Activation hook actions
- *
- * @since 4.5.0
- */
- public static function activate() {
- WordAds_API::update_wordads_status_from_api();
- }
-}
-
-add_action( 'jetpack_activate_module_wordads', array( 'WordAds', 'activate' ) );
-add_action( 'jetpack_activate_module_wordads', array( 'WordAds_Cron', 'activate' ) );
-add_action( 'jetpack_deactivate_module_wordads', array( 'WordAds_Cron', 'deactivate' ) );
-
-global $wordads;
-$wordads = new WordAds();
diff --git a/plugins/jetpack/modules/wpcc.php b/plugins/jetpack/modules/wpcc.php
deleted file mode 100644
index 88c13090..00000000
--- a/plugins/jetpack/modules/wpcc.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Deprecated. No longer needed.
- *
- * @package Jetpack
- */
diff --git a/plugins/jetpack/modules/wpgroho.js b/plugins/jetpack/modules/wpgroho.js
deleted file mode 100644
index 92261bdc..00000000
--- a/plugins/jetpack/modules/wpgroho.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/* global WPGroHo:true, Gravatar */
-WPGroHo = jQuery.extend( {
- my_hash: '',
- data: {},
- renderers: {},
- syncProfileData: function( hash, id ) {
- if ( !WPGroHo.data[hash] ) {
- WPGroHo.data[hash] = {};
- jQuery( 'div.grofile-hash-map-' + hash + ' span' ).each( function() {
- WPGroHo.data[hash][this.className] = jQuery( this ).text();
- } );
- }
-
- WPGroHo.appendProfileData( WPGroHo.data[hash], hash, id );
- },
- appendProfileData: function( data, hash, id ) {
- for ( var key in data ) {
- if ( jQuery.isFunction( WPGroHo.renderers[key] ) ) {
- return WPGroHo.renderers[key]( data[key], hash, id, key );
- }
-
- jQuery( '#' + id ).find( 'h4' ).after( jQuery( '<p class="grav-extra ' + key + '" />' ).html( data[key] ) );
- }
- }
-}, WPGroHo );
-
-jQuery( document ).ready( function() {
- if ( 'undefined' === typeof Gravatar ) {
- return;
- }
-
- Gravatar.profile_cb = function( h, d ) {
- WPGroHo.syncProfileData( h, d );
- };
-
- Gravatar.my_hash = WPGroHo.my_hash;
- Gravatar.init( 'body', '#wpadminbar' );
-} );
diff --git a/plugins/jetpack/readme.txt b/plugins/jetpack/readme.txt
deleted file mode 100644
index c9cfcfd9..00000000
--- a/plugins/jetpack/readme.txt
+++ /dev/null
@@ -1,168 +0,0 @@
-=== Jetpack by WordPress.com ===
-Contributors: automattic, adamkheckler, aduth, akirk, allendav, alternatekev, andy, annezazu, apeatling, azaozz, batmoo, barry, beaulebens, blobaugh, cainm, cena, cfinke, chaselivingston, chellycat, clickysteve, csonnek, danielbachhuber, davoraltman, daniloercoli, designsimply, dllh, drawmyface, dsmart, dzver, ebinnion, eliorivero, enej, eoigal, erania-pinnera, ethitter, gcorne, georgestephanis, gibrown, goldsounds, hew, hugobaeta, hypertextranch, iammattthomas, iandunn, jblz, jasmussen, jeffgolenski, jeherve, jenhooks, jenia, jessefriedman, jgs, jkudish, jmdodd, joanrho, johnjamesjacoby, jshreve, keoshi, koke, kraftbj, lancewillett, lschuyler, macmanx, martinremy, matt, matveb, mattwiebe, maverick3x6, mcsf, mdawaffe, MichaelArestad, migueluy, mikeyarce, mkaz, nancythanki, nickmomrik, obenland, oskosk, pento, professor44, rachelsquirrel, rdcoll, ryancowles, richardmuscat, richardmtl, roccotripaldi, samhotchkiss, scarstocea, sdquirk, stephdau, tmoorewp, tyxla, Viper007Bond, westi, yoavf, zinigor
-Tags: Jetpack, WordPress.com, backup, security, related posts, CDN, speed, anti-spam, social sharing, SEO, video, stats
-Stable tag: 7.2.1
-Requires at least: 5.0
-Tested up to: 5.1
-
-The ideal plugin for stats, related posts, search engine optimization, social sharing, protection, backups, security, and more.
-
-== Description ==
-
-Security, performance, and site management: the best way to WordPress is with Jetpack.
-
-= 24/7 Site Security =
-Jetpack is your site's security detail, guarding you against brute-force attacks and unauthorized logins. Basic protection is always free, while premium plans add expanded backup and automated fixes. Jetpack's full suite of site security tools include:
-
-* Brute-force attack protection, spam filtering, and downtime monitoring.
-* Backups of your entire site, either once daily or in real time.
-* Secure login, with optional two-factor authentication.
-* Malware scanning, code scanning, and automated threat resolution.
-* A record of every change on your site to simplify troubleshooting.
-* Fast, priority support from WordPress experts.
-
-= Peak Performance =
-Activate site accelerator tools and watch your page load times and hosting costs drop -- we'll optimize your images and serve them from our own powerful global network, and speed up your mobile site to reduce bandwidth usage (and save money!). Connect Jetpack to take advantage of:
-
-* Images and static files, like CSS and JavaScript, served from our servers, not yours.
-* Elasticsearch-powered related content and site search, for relevant results with no drain on your servers.
-* Lazy image loading for a faster mobile experience.
-* Unlimited and high-speed video via our content delivery network.
-
-= Effortless Site Management =
-Create and customize your WordPress site, optimize it for visitors and revenue, and enjoy watching your stats tick up. Built it, share it, and watch it grow with:
-
-* Advanced site stats and analytics for understanding your audience.
-* Hundreds of professional themes, for a pro site no matter what your niche.
-* Intuitive and powerful customization tools to match your website to your brand.
-* Simple PayPal payment buttons for selling products and services.
-* SEO tools for Google, Bing, Twitter, Facebook, and WordPress.com to maximize your reach.
-* An advertising program that includes the best of AdSense, Facebook Ads, AOL, Amazon, Google AdX, and Yahoo.
-* Integration with the official WordPress mobile apps, to manage your site from anywhere.
-
-= Expert Support =
-We have a global team of Happiness Engineers ready to help you. Ask your questions in the support forum, or [contact us directly](https://jetpack.com/contact-support).
-
-= Paid Services =
-Compare our [simple and affordable plans](https://jetpack.com/pricing?from=wporg) or take a [product tour](https://jetpack.com/features?from=wporg) to learn more.
-
-= Get Started =
-Installation is free, quick, and easy. [Install Jetpack from our site](https://jetpack.com/install?from=wporg) in minutes.
-
-== Installation ==
-
-= Automated Installation =
-Installation is free, quick, and easy. [Install Jetpack from our site](https://jetpack.com/install?from=wporg) in minutes.
-
-= Manual Alternatives =
-Alternatively, install Jetpack via the plugin directory, or upload the files manually to your server and follow the on-screen instructions. If you need additional help [read our detailed instructions](https://jetpack.com/support/installing-jetpack/).
-
-== Frequently Asked Questions ==
-
-= Is Jetpack free? =
-Yes! Jetpack's core features are and always will be free.
-
-These include: [site stats](https://jetpack.com/features/traffic/site-stats), a [high-speed CDN](https://jetpack.com/features/writing/content-delivery-network/) for images, [related posts](https://jetpack.com/features/traffic/related-posts), [downtime monitoring](https://jetpack.com/features/security/downtime-monitoring), brute force [attack protection](https://jetpack.com/features/security/brute-force-attack-protection), [automated sharing](https://jetpack.com/features/traffic/automatic-publishing/) to social networks, [sidebar customization](https://jetpack.com/features/writing/sidebar-customization/), and many more.
-
-= Should I purchase a paid plan? =
-Jetpack's paid services include real-time backups, security scanning, premium themes, spam filtering, video hosting, site monetization, SEO tools, search, priority support, and more.
-
-To learn more about the essential security and WordPress services we provide, visit our [plan comparison page](https://jetpack.com/pricing?from=wporg).
-
-= Why do I need a WordPress.com account? =
-
-Since Jetpack and its services are provided and hosted by WordPress.com, a WordPress.com account is required for Jetpack to function.
-
-= I already have a WordPress account, but Jetpack isn't working. What's going on? =
-
-A WordPress.com account is different from the account you use to log into your self-hosted WordPress. If you can log into [WordPress.com](https://wordpress.com), then you already have a WordPress.com account. If you can't, you can easily create one [during installation](https://jetpack.com/install?from=wporg).
-
-= How do I view my stats? =
-
-Once you've installed Jetpack your stats will be available on [WordPress.com/Stats](https://wordpress.com/stats), on the official [WordPress mobile apps](https://apps.wordpress.com/mobile/), and on your Jetpack dashboard.
-
-= How do I contribute to Jetpack? =
-
-There are opportunities for developers at all levels to contribute. [Learn more about contributing to Jetpack](https://jetpack.com/contribute) or consider [joining our beta program](https://jetpack.com/beta).
-
-
-== Screenshots ==
-
-1. Security: Protection against brute force attacks, spam, and malware. On-demand backups and restores.
-2. Downtime Monitoring: Know right away if and when your site goes down.
-3. Performance: Free high-speed content delivery network for your images.
-4. Analytics: Concise site stats and traffic insights.
-5. Themes: Hundreds of customizable, professional themes.
-6. Apps: Update your site from any device with the free WordPress apps.
-7. Revenue: Sell products and take payments with simple payment buttons.
-8. Sharing: Connect your site to social networks for automated social sharing.
-
-== Changelog ==
-
-= 7.2.1 =
-* Release date: April 04, 2019
-* Release post: https://wp.me/p1moTy-h7o
-
-* Feature Hints: display suggestions only for features available under the site's current plan.
-* Feature Hints: improve visual display to make more distinct from search results.
-* Feature Hints: disable hints once administrators have dismissed three hints.
-* Slideshow Block: resolve an issue that broke navigating between images.
-
-= 7.2 =
-
-* Release date: April 02, 2019
-* Release post: https://wp.me/p1moTy-foe
-
-**Major Enhancements**
-
-* Adds a Repeat Visitor block that controls block visibility based on how often a visitor has viewed the page.
-* New option to disable Ads blocks for visitors on mobile devices.
-
-
-**Enhancements**
-
-* Admin Dashboard: improve text and design to make your administration experience all the better.
-* Jumpstart: streamline what features are suggested to be activated when setting up Jetpack for the first time.
-* Password Checker: adds a password checker class that will help Jetpack let you know if you're using a weak password. More about this coming in a future release!
-* Plans: refactor how Jetpack Plans are coded within Jetpack to improve performance and help prevent any future bugs.
-* Post Images: provide the image itself when requesting an attachment's post image.
-* REST API: Enable Likes and Sharing meta field for all post types.
-* Related Posts: improve HTML markup for related posts, with emphasis on accessibility.
-* Search: add an easy way to see the raw Jetpack Search query results in the search page's source code.
-* Shortcodes: allow links in Quiz shortcode explanations.
-* Widgets: improve the text for the Blog Stats widget when stats data can not be retrieved from WordPress.com.
-
-**Improved compatibility**
-
-* General: require WordPress 5.0! To celebrate, we cleaned out some compatibility code that supported older versions. We know how to party.
-* General: update various parts of Jetpack to fully align with WordPress coding standards to make developing Jetpack easier!
-* Connection: notify site owners when a plugin or theme is double-encoding URL redirects.
-* Shortcodes: update the Ustream shortcode to use the HTML5 player for a better experience on all browsers.
-* Shortcodes: add AMP support for Crowdsignal polls and shortcodes.
-* Sitemaps: add thumbnails to video sitemaps to improve compatibility with Google Search Console. Props Adam Heckler!
-* Sync: improve performance when using the VIP Legacy Redirect plugin.
-* Twenty Nineteen Compatibility: prevent sharing buttons overlapping with the Like button. Props Torres!
-* VideoPress: update right-to-left language CSS to remove extra styles only used on browsers no longer supported.
-* Widgets: improve rendering of Contact Info widget map when using the AMP plugin.
-
-**Bug fixes**
-
-* Admin Dashboard: fix an error that you'd see in the console when changing your Carousel settings.
-* Blocks: fix an issue where sometimes we would attempt to register a particular block twice. I'm looking at you, Related Posts.
-* Blocks: display all Business Hours details, even if they're the default set.
-* Blocks: fix an error that occurred when loading some translations in the Block Editor.
-* Blocks: resolve a conflict between the Ads block and infinite scroll that would cause new posts to sometimes not load.
-* General: ensure the proper Jetpack plan is reflected throughout Jetpack and the administrative dashboard.
-* Plugin Search: display Akismet and VaultPress plugin cards when WordPress.org suggests them.
-* Publicize: remove unused assets, like images and JavaScript that aren't needed anymore.
-* Related Posts: restore use of the jetpack_relatedposts_filter_options filter.
-* Security: Improvements to the Likes feature and the Slideshow block.
-* Sharing: update WhatsApp to be more consistent with the other sharing buttons.
-* Shortcodes: remove Lytro service, which closed in March.
-* Stats: properly handle an error from the REST API that sometimes caused issues with the Stats Dashboard.
-* Widgets: display all characters in an address from Contact Info correctly when sometimes we encoded those that we'd expect in an URL.
-* Widgets: improve the performance of the Contact Info widget by eliminating unused JavaScript.
-
---------
-
-[See the previous changelogs here](https://raw.githubusercontent.com/Automattic/jetpack/master/changelog.txt).
diff --git a/plugins/jetpack/require-lib.php b/plugins/jetpack/require-lib.php
deleted file mode 100644
index 66054c95..00000000
--- a/plugins/jetpack/require-lib.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-function jetpack_require_lib( $slug ) {
- if ( !preg_match( '|^[a-z0-9/_.-]+$|i', $slug ) ) {
- trigger_error( "Cannot load a library with invalid slug $slug.", E_USER_ERROR );
- return;
- }
- $basename = basename( $slug );
-
- if ( defined( 'ABSPATH' ) && ! defined( 'WP_CONTENT_DIR' ) ) {
- define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' ); // no trailing slash, full paths only - WP_CONTENT_URL is defined further down
- }
-
- $lib_dir = WP_CONTENT_DIR . '/lib';
-
- /**
- * Filter the location of the library directory.
- *
- * @since 2.5.0
- *
- * @param string $lib_dir Path to the library directory.
- */
- $lib_dir = apply_filters( 'jetpack_require_lib_dir', $lib_dir );
- $choices = array(
- "$lib_dir/$slug.php",
- "$lib_dir/$slug/0-load.php",
- "$lib_dir/$slug/$basename.php",
- );
- foreach( $choices as $file_name ) {
- if ( is_readable( $file_name ) ) {
- require_once $file_name;
- return;
- }
- }
- trigger_error( "Cannot find a library with slug $slug.", E_USER_ERROR );
-}
diff --git a/plugins/jetpack/sal/class.json-api-date.php b/plugins/jetpack/sal/class.json-api-date.php
deleted file mode 100644
index c5c0cb38..00000000
--- a/plugins/jetpack/sal/class.json-api-date.php
+++ /dev/null
@@ -1,88 +0,0 @@
-<?php
-
-class WPCOM_JSON_API_Date {
- /**
- * Returns ISO 8601 formatted datetime: 2011-12-08T01:15:36-08:00
- *
- * @param $date_gmt (string) GMT datetime string.
- * @param $date (string) Optional. Used to calculate the offset from GMT.
- *
- * @return string
- */
- static function format_date( $date_gmt, $date = null ) {
- $timestamp_gmt = strtotime( "$date_gmt+0000" );
-
- if ( null === $date ) {
- $timestamp = $timestamp_gmt;
- $hours = $minutes = $west = 0;
- } else {
- $date_time = date_create( "$date+0000" );
- if ( $date_time ) {
- $timestamp = date_format( $date_time, 'U' );
- } else {
- $timestamp = 0;
- }
-
- // "0000-00-00 00:00:00" == -62169984000
- if ( - 62169984000 == $timestamp_gmt ) {
- // WordPress sets post_date=now, post_date_gmt="0000-00-00 00:00:00" for all drafts
- // WordPress sets post_modified=now, post_modified_gmt="0000-00-00 00:00:00" for new drafts
-
- // Try to guess the correct offset from the blog's options.
- $timezone_string = get_option( 'timezone_string' );
-
- if ( $timezone_string && $date_time ) {
- $timezone = timezone_open( $timezone_string );
- if ( $timezone ) {
- $offset = $timezone->getOffset( $date_time );
- }
- } else {
- $offset = 3600 * get_option( 'gmt_offset' );
- }
- } else {
- $offset = $timestamp - $timestamp_gmt;
- }
-
- $west = $offset < 0;
- $offset = abs( $offset );
- $hours = (int) floor( $offset / 3600 );
- $offset -= $hours * 3600;
- $minutes = (int) floor( $offset / 60 );
- }
-
- return (string) gmdate( 'Y-m-d\\TH:i:s', $timestamp ) . sprintf( '%s%02d:%02d', $west ? '-' : '+', $hours, $minutes );
- }
-
- /**
- * Returns ISO 8601 formatted duration interval: P0DT1H10M0S
- *
- * @param string $time Duration in minutes or hours.
- *
- * @return null|string
- */
- static function format_duration( $time ) {
- $timestamp = strtotime( $time, 0 );
-
- // Bail early if we don't recognize a date.
- if ( empty( $timestamp ) ) {
- return;
- }
-
- $days = floor( $timestamp / 86400 );
- $timestamp = $timestamp % 86400;
-
- $hours = floor( $timestamp / 3600 );
- $timestamp = $timestamp % 3600;
-
- $minutes = floor( $timestamp / 60 );
- $timestamp = $timestamp % 60;
-
- return (string) sprintf(
- 'P%dDT%dH%dM%dS',
- $days,
- $hours,
- $minutes,
- $timestamp
- );
- }
-}
diff --git a/plugins/jetpack/sal/class.json-api-links.php b/plugins/jetpack/sal/class.json-api-links.php
deleted file mode 100644
index 5b18431f..00000000
--- a/plugins/jetpack/sal/class.json-api-links.php
+++ /dev/null
@@ -1,283 +0,0 @@
-<?php
-
-require_once dirname( __FILE__ ) . '/../class.json-api.php';
-
-class WPCOM_JSON_API_Links {
- private $api;
- private static $instance;
- private $closest_endpoint_cache_by_version = array();
- private $matches_by_version = array();
- private $cache_result = null;
-
- public static function getInstance() {
- if ( null === self::$instance ) {
- self::$instance = new self();
- }
-
- return self::$instance;
- }
-
- // protect these methods for singleton
- protected function __construct() {
- $this->api = WPCOM_JSON_API::init();
- }
- private function __clone() { }
- private function __wakeup() { }
-
- /**
- * Generate a URL to an endpoint
- *
- * Used to construct meta links in API responses
- *
- * @param mixed $args Optional arguments to be appended to URL
- * @return string Endpoint URL
- **/
- function get_link() {
- $args = func_get_args();
- $format = array_shift( $args );
- $base = WPCOM_JSON_API__BASE;
-
- $path = array_pop( $args );
-
- if ( $path ) {
- $path = '/' . ltrim( $path, '/' );
- // tack the path onto the end of the format string
- // have to escape %'s in the path as %% because
- // we're about to pass it through sprintf and we don't
- // want it to see the % as a placeholder
- $format .= str_replace( '%', '%%', $path );
- }
-
- // Escape any % in args before using sprintf
- $escaped_args = array();
- foreach ( $args as $arg_key => $arg_value ) {
- $escaped_args[ $arg_key ] = str_replace( '%', '%%', $arg_value );
- }
-
- $relative_path = vsprintf( $format, $escaped_args );
-
- if ( ! wp_startswith( $relative_path, '.' ) ) {
- // Generic version. Match the requested version as best we can
- $api_version = $this->get_closest_version_of_endpoint( $format, $relative_path );
- $base = substr( $base, 0, - 1 ) . $api_version;
- }
-
- // escape any % in the relative path before running it through sprintf again
- $relative_path = str_replace( '%', '%%', $relative_path );
- // http, WPCOM_JSON_API__BASE, ... , path
- // %s , %s , $format, %s
- return esc_url_raw( sprintf( "https://%s$relative_path", $base ) );
- }
-
- function get_me_link( $path = '' ) {
- return $this->get_link( '/me', $path );
- }
-
- function get_taxonomy_link( $blog_id, $taxonomy_id, $taxonomy_type, $path = '' ) {
- switch ( $taxonomy_type ) {
- case 'category':
- return $this->get_link( '/sites/%d/categories/slug:%s', $blog_id, $taxonomy_id, $path );
-
- case 'post_tag':
- return $this->get_link( '/sites/%d/tags/slug:%s', $blog_id, $taxonomy_id, $path );
-
- default:
- return $this->get_link( '/sites/%d/taxonomies/%s/terms/slug:%s', $blog_id, $taxonomy_type, $taxonomy_id, $path );
- }
- }
-
- function get_media_link( $blog_id, $media_id, $path = '' ) {
- return $this->get_link( '/sites/%d/media/%d', $blog_id, $media_id, $path );
- }
-
- function get_site_link( $blog_id, $path = '' ) {
- return $this->get_link( '/sites/%d', $blog_id, $path );
- }
-
- function get_post_link( $blog_id, $post_id, $path = '' ) {
- return $this->get_link( '/sites/%d/posts/%d', $blog_id, $post_id, $path );
- }
-
- function get_comment_link( $blog_id, $comment_id, $path = '' ) {
- return $this->get_link( '/sites/%d/comments/%d', $blog_id, $comment_id, $path );
- }
-
- function get_publicize_connection_link( $blog_id, $publicize_connection_id, $path = '' ) {
- return $this->get_link( '.1/sites/%d/publicize-connections/%d', $blog_id, $publicize_connection_id, $path );
- }
-
- function get_publicize_connections_link( $keyring_token_id, $path = '' ) {
- return $this->get_link( '.1/me/publicize-connections/?keyring_connection_ID=%d', $keyring_token_id, $path );
- }
-
- function get_keyring_connection_link( $keyring_token_id, $path = '' ) {
- return $this->get_link( '.1/me/keyring-connections/%d', $keyring_token_id, $path );
- }
-
- function get_external_service_link( $external_service, $path = '' ) {
- return $this->get_link( '.1/meta/external-services/%s', $external_service, $path );
- }
-
- /**
- * Try to find the closest supported version of an endpoint to the current endpoint
- *
- * For example, if we were looking at the path /animals/panda:
- * - if the current endpoint is v1.3 and there is a v1.3 of /animals/%s available, we return 1.3
- * - if the current endpoint is v1.3 and there is no v1.3 of /animals/%s known, we fall back to the
- * maximum available version of /animals/%s, e.g. 1.1
- *
- * This method is used in get_link() to construct meta links for API responses.
- *
- * @param $template_path string The generic endpoint path, e.g. /sites/%s
- * @param $path string The current endpoint path, relative to the version, e.g. /sites/12345
- * @param $request_method string Request method used to access the endpoint path
- * @return string The current version, or otherwise the maximum version available
- */
- function get_closest_version_of_endpoint( $template_path, $path, $request_method = 'GET' ) {
- $closest_endpoint_cache_by_version = & $this->closest_endpoint_cache_by_version;
-
- $closest_endpoint_cache = & $closest_endpoint_cache_by_version[ $this->api->version ];
- if ( !$closest_endpoint_cache ) {
- $closest_endpoint_cache_by_version[ $this->api->version ] = array();
- $closest_endpoint_cache = & $closest_endpoint_cache_by_version[ $this->api->version ];
- }
-
- if ( ! isset( $closest_endpoint_cache[ $template_path ] ) ) {
- $closest_endpoint_cache[ $template_path ] = array();
- } elseif ( isset( $closest_endpoint_cache[ $template_path ][ $request_method ] ) ) {
- return $closest_endpoint_cache[ $template_path ][ $request_method ];
- }
-
- $path = untrailingslashit( $path );
-
- // /help is a special case - always use the current request version
- if ( wp_endswith( $path, '/help' ) ) {
- $closest_endpoint_cache[ $template_path ][ $request_method ] = $this->api->version;
- return $this->api->version;
- }
-
- $matches_by_version = & $this->matches_by_version;
-
- // try to match out of saved matches
- if ( ! isset( $matches_by_version[ $this->api->version ] ) ) {
- $matches_by_version[ $this->api->version ] = array();
- }
- foreach ( $matches_by_version[ $this->api->version ] as $match ) {
- $regex = $match->regex;
- if ( preg_match( "#^$regex\$#", $path ) ) {
- $closest_endpoint_cache[ $template_path ][ $request_method ] = $match->version;
- return $match->version;
- }
- }
-
- $endpoint_path_versions = $this->get_endpoint_path_versions();
- $last_path_segment = $this->get_last_segment_of_relative_path( $path );
- $max_version_found = null;
-
- foreach ( $endpoint_path_versions as $endpoint_last_path_segment => $endpoints ) {
-
- // Does the last part of the path match the path key? (e.g. 'posts')
- // If the last part contains a placeholder (e.g. %s), we want to carry on
- if ( $last_path_segment != $endpoint_last_path_segment && ! strstr( $endpoint_last_path_segment, '%' ) ) {
- continue;
- }
-
- foreach ( $endpoints as $endpoint ) {
- // Does the request method match?
- if ( ! in_array( $request_method, $endpoint['request_methods'] ) ) {
- continue;
- }
-
- $endpoint_path = untrailingslashit( $endpoint['path'] );
- $endpoint_path_regex = str_replace( array( '%s', '%d' ), array( '([^/?&]+)', '(\d+)' ), $endpoint_path );
-
- if ( ! preg_match( "#^$endpoint_path_regex\$#", $path ) ) {
- continue;
- }
-
- // Make sure the endpoint exists at the same version
- if ( version_compare( $this->api->version, $endpoint['min_version'], '>=') &&
- version_compare( $this->api->version, $endpoint['max_version'], '<=') ) {
- array_push(
- $matches_by_version[ $this->api->version ],
- (object) array( 'version' => $this->api->version, 'regex' => $endpoint_path_regex )
- );
- $closest_endpoint_cache[ $template_path ][ $request_method ] = $this->api->version;
- return $this->api->version;
- }
-
- // If the endpoint doesn't exist at the same version, record the max version we found
- if ( empty( $max_version_found ) || version_compare( $max_version_found['version'], $endpoint['max_version'], '<' ) ) {
- $max_version_found = array( 'version' => $endpoint['max_version'], 'regex' => $endpoint_path_regex );
- }
- }
- }
-
- // If the endpoint version is less than the requested endpoint version, return the max version found
- if ( ! empty( $max_version_found ) ) {
- array_push(
- $matches_by_version[ $this->api->version ],
- (object) $max_version_found
- );
- $closest_endpoint_cache[ $template_path ][ $request_method ] = $max_version_found['version'];
- return $max_version_found['version'];
- }
-
- // Otherwise, use the API version of the current request
- return $this->api->version;
- }
-
- /**
- * Get an array of endpoint paths with their associated versions
- *
- * @return array Array of endpoint paths, min_versions and max_versions, keyed by last segment of path
- **/
- protected function get_endpoint_path_versions() {
-
- if ( ! empty ( $this->cache_result ) ) {
- return $this->cache_result;
- }
-
- /*
- * Create a map of endpoints and their min/max versions keyed by the last segment of the path (e.g. 'posts')
- * This reduces the search space when finding endpoint matches in get_closest_version_of_endpoint()
- */
- $endpoint_path_versions = array();
-
- foreach ( $this->api->endpoints as $key => $endpoint_objects ) {
-
- // The key contains a serialized path, min_version and max_version
- list( $path, $min_version, $max_version ) = unserialize( $key );
-
- // Grab the last component of the relative path to use as the top-level key
- $last_path_segment = $this->get_last_segment_of_relative_path( $path );
-
- $endpoint_path_versions[ $last_path_segment ][] = array(
- 'path' => $path,
- 'min_version' => $min_version,
- 'max_version' => $max_version,
- 'request_methods' => array_keys( $endpoint_objects )
- );
- }
-
- $this->cache_result = $endpoint_path_versions;
-
- return $endpoint_path_versions;
- }
-
- /**
- * Grab the last segment of a relative path
- *
- * @param string $path Path
- * @return string Last path segment
- */
- protected function get_last_segment_of_relative_path( $path) {
- $path_parts = array_filter( explode( '/', $path ) );
-
- if ( empty( $path_parts ) ) {
- return null;
- }
-
- return end( $path_parts );
- }
-}
diff --git a/plugins/jetpack/sal/class.json-api-metadata.php b/plugins/jetpack/sal/class.json-api-metadata.php
deleted file mode 100644
index b4801d76..00000000
--- a/plugins/jetpack/sal/class.json-api-metadata.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-/**
- * Utility classes that don't necessarily have a home yet
- */
-
-class WPCOM_JSON_API_Metadata {
- public static function is_public( $key ) {
- if ( empty( $key ) )
- return false;
-
- // Default whitelisted meta keys.
- $whitelisted_meta = array( '_thumbnail_id' );
-
- // whitelist of metadata that can be accessed
- /** This filter is documented in json-endpoints/class.wpcom-json-api-post-endpoint.php */
- if ( in_array( $key, apply_filters( 'rest_api_allowed_public_metadata', $whitelisted_meta ) ) )
- return true;
-
- if ( 0 === strpos( $key, 'geo_' ) )
- return true;
-
- if ( 0 === strpos( $key, '_wpas_' ) )
- return true;
-
- return false;
- }
-
- public static function is_internal_only( $key ) {
-
- if ( 0 === strpos( $key, '_jetpack_') )
- return true;
-
- if ( 0 === strpos( $key, '_elasticsearch_') )
- return true;
-
- return false;
- }
-} \ No newline at end of file
diff --git a/plugins/jetpack/sal/class.json-api-platform-jetpack.php b/plugins/jetpack/sal/class.json-api-platform-jetpack.php
deleted file mode 100644
index 6643154c..00000000
--- a/plugins/jetpack/sal/class.json-api-platform-jetpack.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-
-require_once dirname( __FILE__ ) . '/class.json-api-platform.php';
-
-class WPORG_Platform extends SAL_Platform {
- public function get_site( $blog_id ) {
- require_once dirname( __FILE__ ) . '/class.json-api-site-jetpack.php';
- return new Jetpack_Site( $blog_id, $this );
- }
-}
-
-function wpcom_get_sal_platform( $token ) {
- return new WPORG_Platform( $token );
-}
diff --git a/plugins/jetpack/sal/class.json-api-platform.php b/plugins/jetpack/sal/class.json-api-platform.php
deleted file mode 100644
index 42ba5b60..00000000
--- a/plugins/jetpack/sal/class.json-api-platform.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-require_once dirname( __FILE__ ) . '/class.json-api-token.php';
-
-abstract class SAL_Platform {
- public $token;
-
- function __construct( $token ) {
- if ( is_array( $token ) ) {
- $token = SAL_Token::from_rest_token( $token );
- } else {
- $token = SAL_Token::for_anonymous_user();
- }
-
- $this->token = $token;
- }
-
- abstract public function get_site( $blog_id );
-}
-
-if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- require_once dirname( __FILE__ ) . '/class.json-api-platform-wpcom.php';
-} else {
- require_once dirname( __FILE__ ) . '/class.json-api-platform-jetpack.php';
-}
diff --git a/plugins/jetpack/sal/class.json-api-post-base.php b/plugins/jetpack/sal/class.json-api-post-base.php
deleted file mode 100644
index 4ee02cc1..00000000
--- a/plugins/jetpack/sal/class.json-api-post-base.php
+++ /dev/null
@@ -1,682 +0,0 @@
-<?php
-/**
- * This class wraps a WP_Post and proxies any undefined attributes
- * and methods to the wrapped class. We need to do this because at present
- * the WP_Post class is marked as final (in 4.5 this will change, though it's
- * not clear if there will be a mechanism to retrieve from the DB into the over-
- * ridden class dynamically).
- **/
-
-require_once dirname( __FILE__ ) . '/class.json-api-metadata.php';
-require_once dirname( __FILE__ ) . '/class.json-api-date.php';
-require_once ( ABSPATH . "wp-includes/post.php" );
-
-abstract class SAL_Post {
- public $post;
- public $context;
- public $site;
-
- function __construct( $site, $post, $context ) {
- $this->post = $post;
- $this->context = $context;
- $this->site = $site;
- }
-
- public function __set( $key, $value ) {
- $this->post->{ $key } = $value;
- }
-
- public function __get( $key ) {
- if ( $key === 'links' ) {
- require_once dirname( __FILE__ ) . '/class.json-api-links.php';
- return WPCOM_JSON_API_Links::getInstance();
- }
- return $this->post->{ $key };
- }
-
- public function __call( $name, $arguments ) {
- if ( is_callable( array( $this->post, $name ) ) ) {
- return call_user_func_array( array( $this->post, $name ), $arguments );
- } else {
- trigger_error("Call to undefined method '{$name}'");
- }
- }
-
- public function __isset ( $name ) {
- return isset( $this->post->{ $name } );
- }
-
- abstract public function get_like_count();
- abstract public function is_liked();
- abstract public function is_reblogged();
- abstract public function is_following();
- abstract public function get_global_id();
- abstract public function get_geo();
-
- public function get_menu_order() {
- return (int) $this->post->menu_order;
- }
-
- public function get_guid() {
- return (string) $this->post->guid;
- }
-
- public function get_type() {
- return (string) $this->post->post_type;
- }
-
- public function get_terms() {
- $taxonomies = get_object_taxonomies( $this->post, 'objects' );
- $terms = array();
- foreach ( $taxonomies as $taxonomy ) {
- if ( ! $taxonomy->public && ! current_user_can( $taxonomy->cap->assign_terms ) ) {
- continue;
- }
-
- $terms[ $taxonomy->name ] = array();
-
- $taxonomy_terms = wp_get_object_terms( $this->post->ID, $taxonomy->name, array( 'fields' => 'all' ) );
- foreach ( $taxonomy_terms as $term ) {
- $formatted_term = $this->format_taxonomy( $term, $taxonomy->name, 'display' );
- $terms[ $taxonomy->name ][ $term->name ] = $formatted_term;
- }
-
- $terms[ $taxonomy->name ] = (object) $terms[ $taxonomy->name ];
- }
-
- return (object) $terms;
- }
-
- public function get_tags() {
- $tags = array();
- $terms = wp_get_post_tags( $this->post->ID );
- foreach ( $terms as $term ) {
- if ( !empty( $term->name ) ) {
- $tags[$term->name] = $this->format_taxonomy( $term, 'post_tag', 'display' );
- }
- }
- return (object) $tags;
- }
-
- public function get_categories() {
- $categories = array();
- $terms = wp_get_object_terms( $this->post->ID, 'category', array( 'fields' => 'all' ) );
- foreach ( $terms as $term ) {
- if ( !empty( $term->name ) ) {
- $categories[$term->name] = $this->format_taxonomy( $term, 'category', 'display' );
- }
- }
- return (object) $categories;
- }
-
- public function get_attachments_and_count() {
- $attachments = array();
- $_attachments = new WP_Query( array( 'post_parent' => $this->post->ID, 'post_status' => 'inherit', 'post_type' => 'attachment', 'posts_per_page' => '20' ) );
- foreach ( $_attachments->posts as $attachment ) {
- $attachments[$attachment->ID] = $this->get_media_item_v1_1( $attachment->ID );
- }
- return array( (object) $attachments, (int) $_attachments->found_posts );
- }
-
- public function get_metadata() {
- $metadata = array();
- foreach ( (array) has_meta( $this->post->ID ) as $meta ) {
- // Don't expose protected fields.
- $meta_key = $meta['meta_key'];
-
- $show = !( WPCOM_JSON_API_Metadata::is_internal_only( $meta_key ) )
- &&
- (
- WPCOM_JSON_API_Metadata::is_public( $meta_key )
- ||
- current_user_can( 'edit_post_meta', $this->post->ID , $meta_key )
- );
-
- // Only business plan subscribers can view custom meta description
- if ( Jetpack_SEO_Posts::DESCRIPTION_META_KEY == $meta_key && ! Jetpack_SEO_Utils::is_enabled_jetpack_seo() ) {
- $show = false;
- }
-
- if ( $show ) {
- $metadata[] = array(
- 'id' => $meta['meta_id'],
- 'key' => $meta['meta_key'],
- 'value' => maybe_unserialize( $meta['meta_value'] ),
- );
- }
- }
-
- if ( ! empty( $metadata ) ) {
- return $metadata;
- } else {
- return false;
- }
- }
-
- public function get_meta() {
- $meta = (object) array(
- 'links' => (object) array(
- 'self' => (string) $this->get_post_link(),
- 'help' => (string) $this->get_post_link( 'help' ),
- 'site' => (string) $this->get_site_link(),
- 'replies' => (string) $this->get_post_link( 'replies/' ),
- 'likes' => (string) $this->get_post_link( 'likes/' ),
- ),
- );
-
- $amp_permalink = get_post_meta( $this->post->ID, '_jetpack_amp_permalink', true );
-
- if ( ! empty( $amp_permalink ) ) {
- $meta->links->amp = (string) $amp_permalink;
- }
-
- // add autosave link if a more recent autosave exists
- if ( 'edit' === $this->context ) {
- $autosave = wp_get_post_autosave( $this->post->ID );
- if ( $autosave && $autosave->post_modified > $this->post->post_modified )
- $meta->links->autosave = (string) $this->get_post_link() . '/autosave';
- }
-
- return $meta;
- }
-
- public function get_current_user_capabilities() {
- return array(
- 'publish_post' => current_user_can( 'publish_post', $this->post ),
- 'delete_post' => current_user_can( 'delete_post', $this->post ),
- 'edit_post' => current_user_can( 'edit_post', $this->post )
- );
- }
-
- public function get_revisions() {
- if ( 'edit' !== $this->context ) {
- return false;
- }
-
- $revisions = array();
- $post_revisions = wp_get_post_revisions( $this->post->ID );
-
- foreach ( $post_revisions as $_post ) {
- $revisions[] = $_post->ID;
- }
-
- return $revisions;
- }
-
- public function get_other_urls() {
- $other_urls = array();
-
- if ( 'publish' !== $this->post->post_status ) {
- $other_urls = $this->get_permalink_suggestions( $this->post->post_title );
- }
-
- return (object) $other_urls;
- }
-
- protected function get_site_link() {
- return $this->links->get_site_link( $this->site->get_id() );
- }
-
- protected function get_post_link( $path = null ) {
- return $this->links->get_post_link( $this->site->get_id(), $this->post->ID, $path );
- }
-
- public function get_publicize_urls() {
- $publicize_URLs = array();
- $publicize = get_post_meta( $this->post->ID, 'publicize_results', true );
- if ( $publicize ) {
- foreach ( $publicize as $service => $data ) {
- switch ( $service ) {
- case 'twitter' :
- foreach ( $data as $datum ) {
- $publicize_URLs[] = esc_url_raw( "https://twitter.com/{$datum['user_id']}/status/{$datum['post_id']}" );
- }
- break;
- case 'fb' :
- foreach ( $data as $datum ) {
- $publicize_URLs[] = esc_url_raw( "https://www.facebook.com/permalink.php?story_fbid={$datum['post_id']}&id={$datum['user_id']}" );
- }
- break;
- }
- }
- }
- return (array) $publicize_URLs;
- }
-
- public function get_page_template() {
- return (string) get_post_meta( $this->post->ID, '_wp_page_template', true );
- }
-
- // note this is overridden in jetpack-shadow
- public function get_featured_image() {
- $image_attributes = wp_get_attachment_image_src( get_post_thumbnail_id( $this->post->ID ), 'full' );
- if ( is_array( $image_attributes ) && isset( $image_attributes[0] ) ) {
- return (string) $image_attributes[0];
- } else {
- return '';
- }
- }
-
- public function get_post_thumbnail() {
- $thumb = null;
-
- $thumb_id = get_post_thumbnail_id( $this->post->ID );
-
- if ( ! empty( $thumb_id ) ) {
- $attachment = get_post( $thumb_id );
- if ( ! empty( $attachment ) )
- $featured_image_object = $this->get_attachment( $attachment );
-
- if ( ! empty( $featured_image_object ) ) {
- $thumb = (object) $featured_image_object;
- }
- }
-
- return $thumb;
- }
-
- public function get_format() {
- $format = (string) get_post_format( $this->post->ID );
- if ( !$format ) {
- $format = 'standard';
- }
-
- return $format;
- }
-
- private function get_attachment( $attachment ) {
- $metadata = wp_get_attachment_metadata( $attachment->ID );
-
- $result = array(
- 'ID' => (int) $attachment->ID,
- 'URL' => (string) wp_get_attachment_url( $attachment->ID ),
- 'guid' => (string) $attachment->guid,
- 'mime_type' => (string) $attachment->post_mime_type,
- 'width' => (int) isset( $metadata['width'] ) ? $metadata['width'] : 0,
- 'height' => (int) isset( $metadata['height'] ) ? $metadata['height'] : 0,
- );
-
- if ( isset( $metadata['duration'] ) ) {
- $result['duration'] = (int) $metadata['duration'];
- }
-
- /** This filter is documented in class.jetpack-sync.php */
- return (object) apply_filters( 'get_attachment', $result );
- }
-
- public function get_date() {
- return (string) WPCOM_JSON_API_Date::format_date( $this->post->post_date_gmt, $this->post->post_date );
- }
-
- public function get_modified_date() {
- return (string) WPCOM_JSON_API_Date::format_date( $this->post->post_modified_gmt, $this->post->post_modified );
- }
-
- public function get_title() {
- if ( 'display' === $this->context ) {
- return (string) get_the_title( $this->post->ID );
- } else {
- return (string) htmlspecialchars_decode( $this->post->post_title, ENT_QUOTES );
- }
- }
-
- public function get_url() {
- if ( 'revision' === $this->post->post_type ) {
- return (string) esc_url_raw( get_permalink( $this->post->post_parent ) );
- } else {
- return (string) esc_url_raw( get_permalink( $this->post->ID ) );
- }
- }
-
- public function get_shortlink() {
- return (string) esc_url_raw( wp_get_shortlink( $this->post->ID ) );
- }
-
- public function get_content() {
- if ( 'display' === $this->context ) {
- // TODO: move this WPCOM-specific hack
- add_filter( 'the_password_form', array( $this, 'the_password_form' ) );
- $content = (string) $this->get_the_post_content_for_display();
- remove_filter( 'the_password_form', array( $this, 'the_password_form' ) );
- return $content;
- } else {
- return (string) $this->post->post_content;
- }
- }
-
- public function get_excerpt() {
- if ( 'display' === $this->context ) {
- add_filter( 'the_password_form', array( $this, 'the_password_form' ) );
- ob_start();
- the_excerpt();
- $response = (string) ob_get_clean();
- remove_filter( 'the_password_form', array( $this, 'the_password_form' ) );
- } else {
- $response = htmlspecialchars_decode( (string) $this->post->post_excerpt, ENT_QUOTES );
- }
- return $response;
- }
-
- public function get_status() {
- return (string) get_post_status( $this->post->ID );
- }
-
- public function is_sticky() {
- return (bool) is_sticky( $this->post->ID );
- }
-
- public function get_slug() {
- return (string) $this->post->post_name;
- }
-
- public function get_password() {
- $password = (string) $this->post->post_password;
- if ( 'edit' === $this->context ) {
- $password = htmlspecialchars_decode( (string) $password, ENT_QUOTES );
- }
- return $password;
- }
-
- public function get_parent() {
- if ( $this->post->post_parent ) {
- $parent = get_post( $this->post->post_parent );
- if ( 'display' === $this->context ) {
- $parent_title = (string) get_the_title( $parent->ID );
- } else {
- $parent_title = (string) htmlspecialchars_decode( $this->post->post_title, ENT_QUOTES );
- }
- return (object) array(
- 'ID' => (int) $parent->ID,
- 'type' => (string) $parent->post_type,
- 'link' => (string) $this->links->get_post_link( $this->site->get_id(), $parent->ID ),
- 'title' => $parent_title,
- );
- } else {
- return false;
- }
- }
-
- function the_password_form() {
- return __( 'This post is password protected.', 'jetpack' );
- }
-
- public function get_discussion() {
- return array(
- 'comments_open' => (bool) comments_open( $this->post->ID ),
- 'comment_status' => (string) $this->post->comment_status,
- 'pings_open' => (bool) pings_open( $this->post->ID ),
- 'ping_status' => (string) $this->post->ping_status,
- 'comment_count' => (int) $this->post->comment_count,
- );
- }
-
- public function is_likes_enabled() {
- /** This filter is documented in modules/likes.php */
- $sitewide_likes_enabled = (bool) apply_filters( 'wpl_is_enabled_sitewide', ! get_option( 'disabled_likes' ) );
- $post_likes_switched = get_post_meta( $this->post->ID, 'switch_like_status', true );
-
- return $post_likes_switched || ( $sitewide_likes_enabled && $post_likes_switched !== '0' );
- }
-
- public function is_sharing_enabled() {
- $show = true;
- /** This filter is documented in modules/sharedaddy/sharing-service.php */
- $show = apply_filters( 'sharing_show', $show, $this->post );
-
- $switched_status = get_post_meta( $this->post->ID, 'sharing_disabled', false );
-
- if ( !empty( $switched_status ) )
- $show = false;
-
- return (bool) $show;
- }
-
- // No Blog ID parameter. No Post ID parameter. Depends on globals.
- // Expects setup_postdata() to already have been run
- function get_the_post_content_for_display() {
- global $pages, $page;
-
- $old_pages = $pages;
- $old_page = $page;
-
- $content = join( "\n\n", $pages );
- $content = preg_replace( '/<!--more(.*?)?-->/', '', $content );
- $pages = array( $content );
- $page = 1;
-
- ob_start();
- the_content();
- $return = ob_get_clean();
-
- $pages = $old_pages;
- $page = $old_page;
-
- return $return;
- }
-
- public function get_author() {
- if ( 0 == $this->post->post_author )
- return null;
-
- $show_email = $this->context === 'edit' && current_user_can( 'edit_post', $this->post );
-
- $user = get_user_by( 'id', $this->post->post_author );
-
- if ( ! $user || is_wp_error( $user ) ) {
- trigger_error( 'Unknown user', E_USER_WARNING );
-
- return null;
- }
-
- // TODO factor this out
- if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
- $active_blog = get_active_blog_for_user( $user->ID );
- $site_id = $active_blog->blog_id;
- $profile_URL = "http://en.gravatar.com/{$user->user_login}";
- } else {
- $profile_URL = 'http://en.gravatar.com/' . md5( strtolower( trim( $user->user_email ) ) );
- $site_id = -1;
- }
-
- $author = array(
- 'ID' => (int) $user->ID,
- 'login' => (string) $user->user_login,
- 'email' => $show_email ? (string) $user->user_email : false, // (string|bool)
- 'name' => (string) $user->display_name,
- 'first_name' => (string) $user->first_name,
- 'last_name' => (string) $user->last_name,
- 'nice_name' => (string) $user->user_nicename,
- 'URL' => (string) esc_url_raw( $user->user_url ),
- 'avatar_URL' => (string) esc_url_raw( $this->get_avatar_url( $user->user_email ) ),
- 'profile_URL' => (string) esc_url_raw( $profile_URL )
- );
-
- if ($site_id > -1) {
- $author['site_ID'] = (int) $site_id;
- }
-
- return (object) $author;
- }
-
- protected function get_avatar_url( $email, $avatar_size = 96 ) {
- $avatar_url = wpcom_get_avatar_url( $email, $avatar_size, '', true );
- if ( ! $avatar_url || is_wp_error( $avatar_url ) ) {
- return '';
- }
-
- return esc_url_raw( htmlspecialchars_decode( $avatar_url[0] ) );
- }
-
- /**
- * Get extra post permalink suggestions
- * @return array array of permalink suggestions: 'permalink_URL', 'suggested_slug'
- */
- public function get_permalink_suggestions( $title ) {
- $suggestions = array();
- list( $suggestions['permalink_URL'], $suggestions['suggested_slug'] ) = get_sample_permalink( $this->post->ID, $title );
- return $suggestions;
- }
-
- private function format_taxonomy( $taxonomy, $taxonomy_type, $context ) {
- // Permissions
- switch ( $context ) {
- case 'edit' :
- $tax = get_taxonomy( $taxonomy_type );
- if ( !current_user_can( $tax->cap->edit_terms ) )
- return new WP_Error( 'unauthorized', 'User cannot edit taxonomy', 403 );
- break;
- case 'display' :
- if ( -1 == get_option( 'blog_public' ) && ! current_user_can( 'read' ) ) {
- return new WP_Error( 'unauthorized', 'User cannot view taxonomy', 403 );
- }
- break;
- default :
- return new WP_Error( 'invalid_context', 'Invalid API CONTEXT', 400 );
- }
-
- $response = array();
- $response['ID'] = (int) $taxonomy->term_id;
- $response['name'] = (string) $taxonomy->name;
- $response['slug'] = (string) $taxonomy->slug;
- $response['description'] = (string) $taxonomy->description;
- $response['post_count'] = (int) $taxonomy->count;
-
- if ( is_taxonomy_hierarchical( $taxonomy_type ) ) {
- $response['parent'] = (int) $taxonomy->parent;
- }
-
- $response['meta'] = (object) array(
- 'links' => (object) array(
- 'self' => (string) $this->links->get_taxonomy_link( $this->site->get_id(), $taxonomy->slug, $taxonomy_type ),
- 'help' => (string) $this->links->get_taxonomy_link( $this->site->get_id(), $taxonomy->slug, $taxonomy_type, 'help' ),
- 'site' => (string) $this->links->get_site_link( $this->site->get_id() ),
- ),
- );
-
- return (object) $response;
- }
-
- // TODO: factor this out into site
- private function get_media_item_v1_1( $media_id ) {
- $media_item = get_post( $media_id );
-
- if ( ! $media_item || is_wp_error( $media_item ) )
- return new WP_Error( 'unknown_media', 'Unknown Media', 404 );
-
- $file = basename( wp_get_attachment_url( $media_item->ID ) );
- $file_info = pathinfo( $file );
- $ext = $file_info['extension'];
-
- $response = array(
- 'ID' => $media_item->ID,
- 'URL' => wp_get_attachment_url( $media_item->ID ),
- 'guid' => $media_item->guid,
- 'date' => (string) WPCOM_JSON_API_Date::format_date( $media_item->post_date_gmt, $media_item->post_date ),
- 'post_ID' => $media_item->post_parent,
- 'author_ID' => (int) $media_item->post_author,
- 'file' => $file,
- 'mime_type' => $media_item->post_mime_type,
- 'extension' => $ext,
- 'title' => $media_item->post_title,
- 'caption' => $media_item->post_excerpt,
- 'description' => $media_item->post_content,
- 'alt' => get_post_meta( $media_item->ID, '_wp_attachment_image_alt', true ),
- 'thumbnails' => array()
- );
-
- if ( in_array( $ext, array( 'jpg', 'jpeg', 'png', 'gif' ) ) ) {
- $metadata = wp_get_attachment_metadata( $media_item->ID );
- if ( isset( $metadata['height'], $metadata['width'] ) ) {
- $response['height'] = $metadata['height'];
- $response['width'] = $metadata['width'];
- }
-
- if ( isset( $metadata['sizes'] ) ) {
- /**
- * Filter the thumbnail sizes available for each attachment ID.
- *
- * @module json-api
- *
- * @since 3.9.0
- *
- * @param array $metadata['sizes'] Array of thumbnail sizes available for a given attachment ID.
- * @param string $media_id Attachment ID.
- */
- $sizes = apply_filters( 'rest_api_thumbnail_sizes', $metadata['sizes'], $media_id );
- if ( is_array( $sizes ) ) {
- foreach ( $sizes as $size => $size_details ) {
- $response['thumbnails'][ $size ] = dirname( $response['URL'] ) . '/' . $size_details['file'];
- }
- }
- }
-
- if ( isset( $metadata['image_meta'] ) ) {
- $response['exif'] = $metadata['image_meta'];
- }
- }
-
- if ( in_array( $ext, array( 'mp3', 'm4a', 'wav', 'ogg' ) ) ) {
- $metadata = wp_get_attachment_metadata( $media_item->ID );
- $response['length'] = $metadata['length'];
- $response['exif'] = $metadata;
- }
-
- if ( in_array( $ext, array( 'ogv', 'mp4', 'mov', 'wmv', 'avi', 'mpg', '3gp', '3g2', 'm4v' ) ) ) {
- $metadata = wp_get_attachment_metadata( $media_item->ID );
- if ( isset( $metadata['height'], $metadata['width'] ) ) {
- $response['height'] = $metadata['height'];
- $response['width'] = $metadata['width'];
- }
-
- if ( isset( $metadata['length'] ) ) {
- $response['length'] = $metadata['length'];
- }
-
- // add VideoPress info
- if ( function_exists( 'video_get_info_by_blogpostid' ) ) {
- $info = video_get_info_by_blogpostid( $this->site->get_id(), $media_id );
-
- // Thumbnails
- if ( function_exists( 'video_format_done' ) && function_exists( 'video_image_url_by_guid' ) ) {
- $response['thumbnails'] = array( 'fmt_hd' => '', 'fmt_dvd' => '', 'fmt_std' => '' );
- foreach ( $response['thumbnails'] as $size => $thumbnail_url ) {
- if ( video_format_done( $info, $size ) ) {
- $response['thumbnails'][ $size ] = video_image_url_by_guid( $info->guid, $size );
- } else {
- unset( $response['thumbnails'][ $size ] );
- }
- }
- }
-
- $response['videopress_guid'] = $info->guid;
- $response['videopress_processing_done'] = true;
- if ( '0000-00-00 00:00:00' == $info->finish_date_gmt ) {
- $response['videopress_processing_done'] = false;
- }
- }
- }
-
- $response['thumbnails'] = (object) $response['thumbnails'];
-
- $response['meta'] = (object) array(
- 'links' => (object) array(
- 'self' => (string) $this->links->get_media_link( $this->site->get_id(), $media_id ),
- 'help' => (string) $this->links->get_media_link( $this->site->get_id(), $media_id, 'help' ),
- 'site' => (string) $this->links->get_site_link( $this->site->get_id() ),
- ),
- );
-
- // add VideoPress link to the meta
- if ( in_array( $ext, array( 'ogv', 'mp4', 'mov', 'wmv', 'avi', 'mpg', '3gp', '3g2', 'm4v' ) ) ) {
- if ( function_exists( 'video_get_info_by_blogpostid' ) ) {
- $response['meta']->links->videopress = (string) $this->links->get_link( '/videos/%s', $response['videopress_guid'], '' );
- }
- }
-
- if ( $media_item->post_parent > 0 ) {
- $response['meta']->links->parent = (string) $this->links->get_post_link( $this->site->get_id(), $media_item->post_parent );
- }
-
- return (object) $response;
- }
-}
diff --git a/plugins/jetpack/sal/class.json-api-post-jetpack.php b/plugins/jetpack/sal/class.json-api-post-jetpack.php
deleted file mode 100644
index fc283fc2..00000000
--- a/plugins/jetpack/sal/class.json-api-post-jetpack.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-class Jetpack_Post extends SAL_Post {
- public function get_like_count() {
- return 0;
- }
-
- public function is_liked() {
- return false;
- }
-
- public function is_reblogged() {
- return false;
- }
-
- public function is_following() {
- return false;
- }
-
- public function get_global_id() {
- return '';
- }
-
- public function get_geo() {
- return false;
- }
-
- protected function get_avatar_url( $email, $avatar_size = 96 ) {
- $avatar_url = get_avatar_url( $email, array(
- 'size' => $avatar_size,
- ) );
-
- if ( ! $avatar_url || is_wp_error( $avatar_url ) ) {
- return '';
- }
- return $avatar_url;
- }
-}
diff --git a/plugins/jetpack/sal/class.json-api-site-base.php b/plugins/jetpack/sal/class.json-api-site-base.php
deleted file mode 100644
index 02e8959c..00000000
--- a/plugins/jetpack/sal/class.json-api-site-base.php
+++ /dev/null
@@ -1,637 +0,0 @@
-<?php
-
-require_once dirname( __FILE__ ) . '/class.json-api-date.php';
-require_once dirname( __FILE__ ) . '/class.json-api-post-base.php';
-
-/**
- * Base class for the Site Abstraction Layer (SAL)
- * Note that this is the site "as seen by user $user_id with token $token", which
- * is why we pass the token to the platform; these site instances are value objects
- * to be used in the context of a single request for a single user.
- * Also note that at present this class _assumes_ you've "switched to"
- * the site in question, and functions like `get_bloginfo( 'name' )` will
- * therefore return the correct value
- **/
-abstract class SAL_Site {
- public $blog_id;
- public $platform;
-
- public function __construct( $blog_id, $platform ) {
- $this->blog_id = $blog_id;
- $this->platform = $platform;
- }
-
- public function get_id() {
- return $this->blog_id;
- }
-
- public function get_name() {
- return (string) htmlspecialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES );
- }
-
- public function get_description() {
- return (string) htmlspecialchars_decode( get_bloginfo( 'description' ), ENT_QUOTES );
- }
-
- public function get_url() {
- return (string) home_url();
- }
-
- public function get_post_count() {
- return (int) wp_count_posts( 'post' )->publish;
- }
-
- public function get_quota() {
- return null;
- }
-
- abstract public function has_videopress();
-
- abstract public function upgraded_filetypes_enabled();
-
- abstract public function is_mapped_domain();
-
- abstract public function is_redirect();
-
- abstract public function is_headstart_fresh();
-
- abstract public function featured_images_enabled();
-
- abstract public function has_wordads();
-
- abstract public function get_frame_nonce();
-
- abstract public function allowed_file_types();
-
- abstract public function get_post_formats();
-
- abstract public function is_private();
-
- abstract public function is_following();
-
- abstract public function get_subscribers_count();
-
- abstract public function get_locale();
-
- abstract public function is_jetpack();
-
- abstract public function get_jetpack_modules();
-
- abstract public function is_module_active( $module );
-
- abstract public function is_vip();
-
- abstract public function is_multisite();
-
- abstract public function is_single_user_site();
-
- abstract public function get_plan();
-
- abstract public function get_ak_vp_bundle_enabled();
-
- abstract public function get_podcasting_archive();
-
- abstract public function get_jetpack_seo_front_page_description();
-
- abstract public function get_jetpack_seo_title_formats();
-
- abstract public function get_verification_services_codes();
-
- abstract public function before_render();
-
- abstract public function after_render( &$response );
-
- // TODO - factor this out? Seems an odd thing to have on a site
- abstract public function after_render_options( &$options );
-
- // wrap a WP_Post object with SAL methods
- abstract public function wrap_post( $post, $context );
-
- abstract protected function is_a8c_publication( $post_id );
-
- public function is_automated_transfer() {
- /**
- * Filter if a site is an automated-transfer site.
- *
- * @module json-api
- *
- * @since 6.4.0
- *
- * @param bool is_automated_transfer( $this->blog_id )
- * @param int $blog_id Blog identifier.
- */
- return apply_filters(
- 'jetpack_site_automated_transfer',
- false,
- $this->blog_id
- );
- }
-
- public function is_wpcom_store() {
- return false;
- }
-
- public function woocommerce_is_active() {
- return false;
- }
-
- public function get_post_by_id( $post_id, $context ) {
- // Remove the skyword tracking shortcode for posts returned via the API.
- remove_shortcode( 'skyword-tracking' );
- add_shortcode( 'skyword-tracking', '__return_empty_string' );
-
- $post = get_post( $post_id, OBJECT, $context );
-
- if ( ! $post ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
- }
-
- $wrapped_post = $this->wrap_post( $post, $context );
-
- // validate access
- return $this->validate_access( $wrapped_post );
- }
-
- /**
- * Validate current user can access the post
- *
- * @return WP_Error or post
- */
- private function validate_access( $post ) {
- $context = $post->context;
-
- if (
- ! $this->is_post_type_allowed( $post->post_type )
- && ! $this->is_a8c_publication( $post->ID )
- ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
- }
-
- switch ( $context ) {
- case 'edit' :
- if ( ! current_user_can( 'edit_post', $post ) ) {
- return new WP_Error( 'unauthorized', 'User cannot edit post', 403 );
- }
- break;
- case 'display' :
- $can_view = $this->user_can_view_post( $post );
- if ( is_wp_error( $can_view ) ) {
- return $can_view;
- }
- break;
- default :
- return new WP_Error( 'invalid_context', 'Invalid API CONTEXT', 400 );
- }
-
- return $post;
- }
-
- public function current_user_can_access_post_type( $post_type, $context ) {
- $post_type_object = $this->get_post_type_object( $post_type );
- if ( ! $post_type_object ) {
- return false;
- }
-
- switch( $context ) {
- case 'edit':
- return current_user_can( $post_type_object->cap->edit_posts );
- case 'display':
- return $post_type_object->public || current_user_can( $post_type_object->cap->read_private_posts );
- default:
- return false;
- }
- }
-
- protected function get_post_type_object( $post_type ) {
- return get_post_type_object( $post_type );
- }
-
- // copied from class.json-api-endpoints.php
- public function is_post_type_allowed( $post_type ) {
- // if the post type is empty, that's fine, WordPress will default to post
- if ( empty( $post_type ) ) {
- return true;
- }
-
- // allow special 'any' type
- if ( 'any' == $post_type ) {
- return true;
- }
-
- // check for allowed types
- if ( in_array( $post_type, $this->get_whitelisted_post_types() ) ) {
- return true;
- }
-
- if ( $post_type_object = get_post_type_object( $post_type ) ) {
- if ( ! empty( $post_type_object->show_in_rest ) ) {
- return $post_type_object->show_in_rest;
- }
- if ( ! empty( $post_type_object->publicly_queryable ) ) {
- return $post_type_object->publicly_queryable;
- }
- }
-
- return ! empty( $post_type_object->public );
- }
-
- // copied from class.json-api-endpoints.php
- /**
- * Gets the whitelisted post types that JP should allow access to.
- *
- * @return array Whitelisted post types.
- */
- public function get_whitelisted_post_types() {
- $allowed_types = array( 'post', 'page', 'revision' );
-
- /**
- * Filter the post types Jetpack has access to, and can synchronize with WordPress.com.
- *
- * @module json-api
- *
- * @since 2.2.3
- *
- * @param array $allowed_types Array of whitelisted post types. Default to `array( 'post', 'page', 'revision' )`.
- */
- $allowed_types = apply_filters( 'rest_api_allowed_post_types', $allowed_types );
-
- return array_unique( $allowed_types );
- }
-
- // copied and modified a little from class.json-api-endpoints.php
- private function user_can_view_post( $post ) {
- if ( !$post || is_wp_error( $post ) ) {
- return false;
- }
-
- if ( 'inherit' === $post->post_status ) {
- $parent_post = get_post( $post->post_parent );
- $post_status_obj = get_post_status_object( $parent_post->post_status );
- } else {
- $post_status_obj = get_post_status_object( $post->post_status );
- }
-
- $authorized = (
- $post_status_obj->public ||
- ( is_user_logged_in() &&
- (
- ( $post_status_obj->protected && current_user_can( 'edit_post', $post->ID ) ) ||
- ( $post_status_obj->private && current_user_can( 'read_post', $post->ID ) ) ||
- ( 'trash' === $post->post_status && current_user_can( 'edit_post', $post->ID ) ) ||
- 'auto-draft' === $post->post_status
- )
- )
- );
-
- if ( ! $authorized ) {
- return new WP_Error( 'unauthorized', 'User cannot view post', 403 );
- }
-
- if (
- -1 == get_option( 'blog_public' ) &&
- /**
- * Filter access to a specific post.
- *
- * @module json-api
- *
- * @since 3.4.0
- *
- * @param bool current_user_can( 'read_post', $post->ID ) Can the current user access the post.
- * @param WP_Post $post Post data.
- */
- ! apply_filters(
- 'wpcom_json_api_user_can_view_post',
- current_user_can( 'read_post', $post->ID ),
- $post
- )
- ) {
- return new WP_Error( 'unauthorized', 'User cannot view post', array( 'status_code' => 403, 'error' => 'private_blog' ) );
- }
-
- if ( strlen( $post->post_password ) && !current_user_can( 'edit_post', $post->ID ) ) {
- return new WP_Error( 'unauthorized', 'User cannot view password protected post', array( 'status_code' => 403, 'error' => 'password_protected' ) );
- }
-
- return true;
- }
-
- /**
- * Get post ID by name
- *
- * Attempts to match name on post title and page path
- *
- * @param string $name
- *
- * @return int|object Post ID on success, WP_Error object on failure
- */
- public function get_post_id_by_name( $name ) {
- $name = sanitize_title( $name );
-
- if ( ! $name ) {
- return new WP_Error( 'invalid_post', 'Invalid post', 400 );
- }
-
- $posts = get_posts( array(
- 'name' => $name,
- 'numberposts' => 1,
- 'post_type' => $this->get_whitelisted_post_types(),
- ) );
-
- if ( ! $posts || ! isset( $posts[0]->ID ) || ! $posts[0]->ID ) {
- $page = get_page_by_path( $name );
-
- if ( ! $page ) {
- return new WP_Error( 'unknown_post', 'Unknown post', 404 );
- }
-
- return $page->ID;
- }
-
- return (int) $posts[0]->ID;
- }
-
- /**
- * Get post by name
- *
- * Attempts to match name on post title and page path
- *
- * @param string $name
- * @param string $context (display or edit)
- *
- * @return object Post object on success, WP_Error object on failure
- **/
- public function get_post_by_name( $name, $context ) {
- $post_id = $this->get_post_id_by_name( $name );
- if ( is_wp_error( $post_id ) ) {
- return $post_id;
- }
-
- return $this->get_post_by_id( $post_id, $context );
- }
-
- function user_can_manage() {
- current_user_can( 'manage_options' );
- }
-
- function get_xmlrpc_url() {
- $xmlrpc_scheme = apply_filters( 'wpcom_json_api_xmlrpc_scheme', parse_url( get_option( 'home' ), PHP_URL_SCHEME ) );
- return site_url( 'xmlrpc.php', $xmlrpc_scheme );
- }
-
- function get_registered_date() {
- if ( function_exists( 'get_blog_details' ) ) {
- $blog_details = get_blog_details();
- if ( ! empty( $blog_details->registered ) ) {
- return WPCOM_JSON_API_Date::format_date( $blog_details->registered );
- }
- }
-
- return '0000-00-00T00:00:00+00:00';
- }
-
- function get_capabilities() {
- return array(
- 'edit_pages' => current_user_can( 'edit_pages' ),
- 'edit_posts' => current_user_can( 'edit_posts' ),
- 'edit_others_posts' => current_user_can( 'edit_others_posts' ),
- 'edit_others_pages' => current_user_can( 'edit_others_pages' ),
- 'delete_posts' => current_user_can( 'delete_posts' ),
- 'delete_others_posts' => current_user_can( 'delete_others_posts' ),
- 'edit_theme_options' => current_user_can( 'edit_theme_options' ),
- 'edit_users' => current_user_can( 'edit_users' ),
- 'list_users' => current_user_can( 'list_users' ),
- 'manage_categories' => current_user_can( 'manage_categories' ),
- 'manage_options' => current_user_can( 'manage_options' ),
- 'moderate_comments' => current_user_can( 'moderate_comments' ),
- 'activate_wordads' => wpcom_get_blog_owner() === (int) get_current_user_id(),
- 'promote_users' => current_user_can( 'promote_users' ),
- 'publish_posts' => current_user_can( 'publish_posts' ),
- 'upload_files' => current_user_can( 'upload_files' ),
- 'delete_users' => current_user_can( 'delete_users' ),
- 'remove_users' => current_user_can( 'remove_users' ),
- 'view_stats' => stats_is_blog_user( $this->blog_id )
- );
- }
-
- function is_visible() {
- if ( is_user_logged_in() ) {
- $current_user = wp_get_current_user();
- $visible = (array) get_user_meta( $current_user->ID, 'blog_visibility', true );
-
- $is_visible = true;
- if ( isset( $visible[ $this->blog_id ] ) ) {
- $is_visible = (bool) $visible[ $this->blog_id ];
- }
-
- // null and true are visible
- return $is_visible;
- }
-
- return null;
- }
-
- function get_logo() {
-
- // Set an empty response array.
- $logo_setting = array(
- 'id' => (int) 0,
- 'sizes' => array(),
- 'url' => '',
- );
-
- // Get current site logo values.
- $logo = get_option( 'site_logo' );
-
- // Update the response array if there's a site logo currenty active.
- if ( $logo && 0 != $logo['id'] ) {
- $logo_setting['id'] = $logo['id'];
- $logo_setting['url'] = $logo['url'];
-
- foreach ( $logo['sizes'] as $size => $properties ) {
- $logo_setting['sizes'][ $size ] = $properties;
- }
- }
-
- return $logo_setting;
- }
-
- function get_timezone() {
- return (string) get_option( 'timezone_string' );
- }
-
- function get_gmt_offset() {
- return (float) get_option( 'gmt_offset' );
- }
-
- function get_login_url() {
- return wp_login_url();
- }
-
- function get_admin_url() {
- return get_admin_url();
- }
-
- function get_unmapped_url() {
- return get_site_url( get_current_blog_id() );
- }
-
- function get_theme_slug() {
- return get_option( 'stylesheet' );
- }
-
- function get_header_image() {
- return get_theme_mod( 'header_image_data' );
- }
-
- function get_background_color() {
- return get_theme_mod( 'background_color' );
- }
-
- function get_image_default_link_type() {
- return get_option( 'image_default_link_type' );
- }
-
- function get_image_thumbnail_width() {
- return (int) get_option( 'thumbnail_size_w' );
- }
-
- function get_image_thumbnail_height() {
- return (int) get_option( 'thumbnail_size_h' );
- }
-
- function get_image_thumbnail_crop() {
- return get_option( 'thumbnail_crop' );
- }
-
- function get_image_medium_width() {
- return (int) get_option( 'medium_size_w' );
- }
-
- function get_image_medium_height() {
- return (int) get_option( 'medium_size_h' );
- }
-
- function get_image_large_width() {
- return (int) get_option( 'large_size_w' );
- }
-
- function get_image_large_height() {
- return (int) get_option( 'large_size_h' );
- }
-
- function get_permalink_structure() {
- return get_option( 'permalink_structure' );
- }
-
- function get_default_post_format() {
- return get_option( 'default_post_format' );
- }
-
- function get_default_category() {
- return (int) get_option( 'default_category' );
- }
-
- function get_show_on_front() {
- return get_option( 'show_on_front' );
- }
-
- function is_custom_front_page() {
- return ( 'page' === $this->get_show_on_front() );
- }
-
- function get_default_likes_enabled() {
- return (bool) apply_filters( 'wpl_is_enabled_sitewide', ! get_option( 'disabled_likes' ) );
- }
-
- function get_default_sharing_status() {
- $default_sharing_status = false;
- if ( class_exists( 'Sharing_Service' ) ) {
- $ss = new Sharing_Service();
- $blog_services = $ss->get_blog_services();
- $default_sharing_status = ! empty( $blog_services['visible'] );
- }
- return (bool) $default_sharing_status;
- }
-
- function get_default_comment_status() {
- return 'closed' !== get_option( 'default_comment_status' );
- }
-
- function default_ping_status() {
- return 'closed' !== get_option( 'default_ping_status' );
- }
-
- function is_publicize_permanently_disabled() {
- $publicize_permanently_disabled = false;
- if ( function_exists( 'is_publicize_permanently_disabled' ) ) {
- $publicize_permanently_disabled = is_publicize_permanently_disabled( $this->blog_id );
- }
- return $publicize_permanently_disabled;
- }
-
- function get_page_on_front() {
- return (int) get_option( 'page_on_front' );
- }
-
- function get_page_for_posts() {
- return (int) get_option( 'page_for_posts' );
- }
-
- function is_headstart() {
- return get_option( 'headstart' );
- }
-
- function get_wordpress_version() {
- global $wp_version;
- return $wp_version;
- }
-
- function is_domain_only() {
- $options = get_option( 'options' );
- return ! empty ( $options['is_domain_only'] ) ? (bool) $options['is_domain_only'] : false;
- }
-
- function get_blog_public() {
- return (int) get_option( 'blog_public' );
- }
-
- function has_pending_automated_transfer() {
- /**
- * Filter if a site is in pending automated transfer state.
- *
- * @module json-api
- *
- * @since 6.4.0
- *
- * @param bool has_site_pending_automated_transfer( $this->blog_id )
- * @param int $blog_id Blog identifier.
- */
- return apply_filters(
- 'jetpack_site_pending_automated_transfer',
- false,
- $this->blog_id
- );
- }
-
- function signup_is_store() {
- return $this->get_design_type() === 'store';
- }
-
- function get_roles() {
- return new WP_Roles();
- }
-
- function get_design_type() {
- $options = get_option( 'options' );
- return empty( $options[ 'designType'] ) ? null : $options[ 'designType' ];
- }
-
- function get_site_goals() {
- $options = get_option( 'options' );
- return empty( $options[ 'siteGoals'] ) ? null : $options[ 'siteGoals' ];
- }
-
- function get_launch_status() {
- return false;
- }
-}
diff --git a/plugins/jetpack/sal/class.json-api-site-jetpack-base.php b/plugins/jetpack/sal/class.json-api-site-jetpack-base.php
deleted file mode 100644
index d87a2bce..00000000
--- a/plugins/jetpack/sal/class.json-api-site-jetpack-base.php
+++ /dev/null
@@ -1,169 +0,0 @@
-<?php
-require_once dirname( __FILE__ ) . '/class.json-api-site-base.php';
-
-abstract class Abstract_Jetpack_Site extends SAL_Site {
- abstract protected function get_constant( $name );
-
- abstract protected function current_theme_supports( $feature_name );
-
- abstract protected function get_theme_support( $feature_name );
-
- abstract protected function get_mock_option( $name );
-
- abstract public function get_jetpack_version();
-
- abstract public function get_updates();
-
- abstract protected function main_network_site();
-
- abstract protected function wp_version();
-
- abstract protected function max_upload_size();
-
- abstract protected function is_main_network();
-
- abstract protected function is_version_controlled();
-
- abstract protected function file_system_write_access();
-
- function before_render() {
- }
-
- protected function wp_memory_limit() {
- return $this->get_constant( 'WP_MEMORY_LIMIT' );
- }
-
- protected function wp_max_memory_limit() {
- return $this->get_constant( 'WP_MAX_MEMORY_LIMIT' );
- }
-
-
- function after_render( &$response ) {
- // Add the updates only make them visible if the user has manage options permission and the site is the main site of the network
- if ( current_user_can( 'manage_options' ) && $this->is_main_site( $response ) ) {
- $jetpack_update = $this->get_updates();
- if ( ! empty( $jetpack_update ) ) {
- // In previous version of Jetpack 3.4, 3.5, 3.6 we synced the wp_version into to jetpack_updates
- unset( $jetpack_update['wp_version'] );
- // In previous version of Jetpack 3.4, 3.5, 3.6 we synced the site_is_version_controlled into to jetpack_updates
- unset( $jetpack_update['site_is_version_controlled'] );
-
- $response['updates'] = $jetpack_update;
- }
- }
- }
-
- function after_render_options( &$options ) {
-
- $options['jetpack_version'] = $this->get_jetpack_version();
-
- if ( $main_network_site = $this->main_network_site() ) {
- $options['main_network_site'] = (string) rtrim( $main_network_site, '/' );
- }
-
- if ( is_array( $active_modules = Jetpack_Options::get_option( 'active_modules' ) ) ) {
- $options['active_modules'] = (array) array_values( $active_modules );
- }
-
- $options['software_version'] = (string) $this->wp_version();
- $options['max_upload_size'] = $this->max_upload_size();
- $options['wp_memory_limit'] = $this->wp_memory_limit();
- $options['wp_max_memory_limit'] = $this->wp_max_memory_limit();
-
- // Sites have to prove that they are not main_network site.
- // If the sync happends right then we should be able to see that we are not dealing with a network site
- $options['is_multi_network'] = (bool) $this->is_main_network();
- $options['is_multi_site'] = (bool) $this->is_multisite();
-
- $file_mod_disabled_reasons = array_keys( array_filter( array(
- 'automatic_updater_disabled' => (bool) $this->get_constant( 'AUTOMATIC_UPDATER_DISABLED' ),
- // WP AUTO UPDATE CORE defaults to minor, '1' if true and '0' if set to false.
- 'wp_auto_update_core_disabled' => ! ( (bool) $this->get_constant( 'WP_AUTO_UPDATE_CORE' ) ),
- 'is_version_controlled' => (bool) $this->is_version_controlled(),
- // By default we assume that site does have system write access if the value is not set yet.
- 'has_no_file_system_write_access' => ! (bool) $this->file_system_write_access(),
- 'disallow_file_mods' => (bool) $this->get_constant( 'DISALLOW_FILE_MODS' ),
- ) ) );
-
- $options['file_mod_disabled'] = empty( $file_mod_disabled_reasons ) ? false : $file_mod_disabled_reasons;
- }
-
- function get_jetpack_modules() {
- return array_values( Jetpack_Options::get_option( 'active_modules', array() ) );
- }
-
- function is_module_active( $module ) {
- return in_array ( $module, Jetpack_Options::get_option( 'active_modules', array() ), true );
- }
-
- function is_vip() {
- return false; // this may change for VIP Go sites, which sync using Jetpack
- }
-
- function featured_images_enabled() {
- return $this->current_theme_supports( 'post-thumbnails' );
- }
-
- function get_post_formats() {
- // deprecated - see separate endpoint. get a list of supported post formats
- $all_formats = get_post_format_strings();
- $supported = $this->get_theme_support( 'post-formats' );
-
- $supported_formats = array();
-
- if ( isset( $supported[0] ) ) {
- foreach ( $supported[0] as $format ) {
- $supported_formats[ $format ] = $all_formats[ $format ];
- }
- }
-
- return $supported_formats;
- }
-
- function get_icon() {
- $icon_id = get_option( 'site_icon' );
- if ( empty( $icon_id ) ) {
- $icon_id = Jetpack_Options::get_option( 'site_icon_id' );
- }
-
- if ( empty( $icon_id ) ) {
- return null;
- }
-
- $icon = array_filter( array(
- 'img' => wp_get_attachment_image_url( $icon_id, 'full' ),
- 'ico' => wp_get_attachment_image_url( $icon_id, array( 16, 16 ) )
- ) );
-
- if ( empty( $icon ) ) {
- return null;
- }
-
- if ( current_user_can( 'edit_posts', $icon_id ) ) {
- $icon['media_id'] = (int) $icon_id;
- }
-
- return $icon;
- }
-
- /**
- * Private methods
- **/
-
- private function is_main_site( $response ) {
- if ( isset( $response['options']->main_network_site, $response['options']->unmapped_url ) ) {
- $main_network_site_url = set_url_scheme( $response['options']->main_network_site, 'http' );
- $unmapped_url = set_url_scheme( $response['options']->unmapped_url, 'http' );
- if ( $unmapped_url === $main_network_site_url ) {
- return true;
- }
- }
-
- return false;
- }
-
- // For Jetpack sites this will always return false
- protected function is_a8c_publication( $post_id ) {
- return false;
- }
-}
diff --git a/plugins/jetpack/sal/class.json-api-site-jetpack.php b/plugins/jetpack/sal/class.json-api-site-jetpack.php
deleted file mode 100644
index b78ac1b5..00000000
--- a/plugins/jetpack/sal/class.json-api-site-jetpack.php
+++ /dev/null
@@ -1,192 +0,0 @@
-<?php
-
-require_once dirname( __FILE__ ) . '/class.json-api-site-jetpack-base.php';
-require_once dirname( __FILE__ ) . '/class.json-api-post-jetpack.php';
-
-// this code runs on Jetpack (.org) sites
-class Jetpack_Site extends Abstract_Jetpack_Site {
-
- protected function get_mock_option( $name ) {
- return get_option( 'jetpack_'.$name );
- }
-
- protected function get_constant( $name ) {
- if ( defined( $name) ) {
- return constant( $name );
- }
- return null;
- }
-
- protected function main_network_site() {
- return network_site_url();
- }
-
- protected function wp_version() {
- global $wp_version;
- return $wp_version;
- }
-
- protected function max_upload_size() {
- return wp_max_upload_size();
- }
-
- protected function wp_memory_limit() {
- return wp_convert_hr_to_bytes( WP_MEMORY_LIMIT );
- }
-
- protected function wp_max_memory_limit() {
- return wp_convert_hr_to_bytes( WP_MAX_MEMORY_LIMIT );
- }
-
- protected function is_main_network() {
- return Jetpack::is_multi_network();
- }
-
- public function is_multisite() {
- return (bool) is_multisite();
- }
-
- public function is_single_user_site() {
- return (bool) Jetpack::is_single_user_site();
- }
-
- protected function is_version_controlled() {
- return Jetpack_Sync_Functions::is_version_controlled();
- }
-
- protected function file_system_write_access() {
- return Jetpack_Sync_Functions::file_system_write_access();
- }
-
- protected function current_theme_supports( $feature_name ) {
- return current_theme_supports( $feature_name );
- }
-
- protected function get_theme_support( $feature_name ) {
- return get_theme_support( $feature_name );
- }
-
- public function get_updates() {
- return (array) Jetpack::get_updates();
- }
-
- function get_id() {
- return $this->platform->token->blog_id;
- }
-
- function has_videopress() {
- // TODO - this only works on wporg site - need to detect videopress option for remote Jetpack site on WPCOM
- $videopress = Jetpack_Options::get_option( 'videopress', array() );
- if ( isset( $videopress['blog_id'] ) && $videopress['blog_id'] > 0 ) {
- return true;
- }
-
- return false;
- }
-
- function upgraded_filetypes_enabled() {
- return true;
- }
-
- function is_mapped_domain() {
- return true;
- }
-
- function is_redirect() {
- return false;
- }
-
- function is_following() {
- return false;
- }
-
- function has_wordads() {
- return Jetpack::is_module_active( 'wordads' );
- }
-
- function get_frame_nonce() {
- return false;
- }
-
- function is_headstart_fresh() {
- return false;
- }
-
- function allowed_file_types() {
- $allowed_file_types = array();
-
- // http://codex.wordpress.org/Uploading_Files
- $mime_types = get_allowed_mime_types();
- foreach ( $mime_types as $type => $mime_type ) {
- $extras = explode( '|', $type );
- foreach ( $extras as $extra ) {
- $allowed_file_types[] = $extra;
- }
- }
-
- return $allowed_file_types;
- }
-
- function is_private() {
- return false;
- }
-
- function get_plan() {
- return false;
- }
-
- function get_subscribers_count() {
- return 0; // special magic fills this in on the WPCOM side
- }
-
- function get_capabilities() {
- return false;
- }
-
- function get_locale() {
- return get_bloginfo( 'language' );
- }
-
- function is_jetpack() {
- return true;
- }
-
- public function get_jetpack_version() {
- return JETPACK__VERSION;
- }
-
- function get_ak_vp_bundle_enabled() {}
-
- function get_jetpack_seo_front_page_description() {
- return Jetpack_SEO_Utils::get_front_page_meta_description();
- }
-
- function get_jetpack_seo_title_formats() {
- return Jetpack_SEO_Titles::get_custom_title_formats();
- }
-
- function get_verification_services_codes() {
- return get_option( 'verification_services_codes', null );
- }
-
- function get_podcasting_archive() {
- return null;
- }
-
- function is_connected_site() {
- return true;
- }
-
- function current_user_can( $role ) {
- return current_user_can( $role );
- }
-
- /**
- * Post functions
- */
-
- function wrap_post( $post, $context ) {
- return new Jetpack_Post( $this, $post, $context );
- }
-
-}
diff --git a/plugins/jetpack/sal/class.json-api-token.php b/plugins/jetpack/sal/class.json-api-token.php
deleted file mode 100644
index 10b16f6f..00000000
--- a/plugins/jetpack/sal/class.json-api-token.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-/**
- * So that we have a real class instead of just passing around an array
- */
-class SAL_Token {
-
- public $blog_id;
- public $user_id;
- public $scope;
- public $client_id;
- public $external_user_id;
- public $external_user_code;
- public $auth_type;
-
- function __construct( $blog_id, $user_id, $scope, $client_id, $external_user_id, $external_user_code, $auth_type ) {
- $this->blog_id = $blog_id; // if blog_id is set and scope is not global, limit to that blog
- $this->user_id = $user_id;
- $this->client_id = $client_id;
- $this->scope = $scope;
- $this->external_user_id = $external_user_id;
- $this->external_user_code = $external_user_code;
- $this->auth_type = $auth_type;
- }
-
- public function is_global() {
- return $scope === 'global';
- }
-
- static function for_anonymous_user() {
- return new SAL_Token(
- null,
- get_current_user_id(),
- null, // there's only ever one scope in our current API implementation, auth or global
- null,
- null,
- null,
- null
- );
- }
-
- static function from_rest_token( $token ) {
- $user_id = isset( $token['user_id'] ) ? $token['user_id'] : get_current_user_id();
- $scope = isset( $token['scope'] ) ? $token['scope'][0] : null;
- $client_id = isset( $token['client_id'] ) ? $token['client_id'] : null;
- $external_user_id = isset( $token['external_user_id'] ) ? $token['external_user_id'] : null;
- $external_user_code = isset( $token['external_user_code'] ) ? $token['external_user_code'] : null;
- $auth = isset( $token['auth'] ) ? $token['auth'] : null;
-
- return new SAL_Token(
- $token['blog_id'],
- $user_id,
- $scope, // there's only ever one scope in our current API implementation, auth or global
- $client_id,
- $external_user_id,
- $external_user_code,
- $auth
- );
- }
-}
diff --git a/plugins/jetpack/scss/_utilities/_accessibility.scss b/plugins/jetpack/scss/_utilities/_accessibility.scss
deleted file mode 100644
index b21c12d3..00000000
--- a/plugins/jetpack/scss/_utilities/_accessibility.scss
+++ /dev/null
@@ -1,30 +0,0 @@
-// ==========================================================================
-// Accessibility
-// ==========================================================================
-
-// Text meant only for screen readers
-.screen-reader-text {
- clip: rect(1px, 1px, 1px, 1px);
- position: absolute !important;
-
- &:hover,
- &:active,
- &:focus {
- background-color: #f1f1f1;
- border-radius: 3px;
- box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6);
- clip: auto !important;
- color: #21759b;
- display: block;
- font-size: 14px;
- font-weight: bold;
- height: auto;
- left: 5px;
- line-height: normal;
- padding: 15px 23px 14px;
- text-decoration: none;
- top: 5px;
- width: auto;
- z-index: 100000; // Above WP toolbar
- }
-}
diff --git a/plugins/jetpack/scss/_utilities/_grid.scss b/plugins/jetpack/scss/_utilities/_grid.scss
deleted file mode 100644
index 788a377a..00000000
--- a/plugins/jetpack/scss/_utilities/_grid.scss
+++ /dev/null
@@ -1,75 +0,0 @@
-// ==========================================================================
-// Grid styles
-// 12 column grid
-// ==========================================================================
-
-.j-row {
- width: 100%;
- margin: 0 auto;
- &:before,
- &:after {
- content: " ";
- display: table;
- }
-
- &:after {
- clear: both;
- }
-}
-
-.j-col {
- padding: 0.85em;
- width: 100%;
- float: left;
- position: relative;
-}
-
-// Small grid (Mobile first)
-@media only screen {
- // .j-sm-1 {width: 8.33333%;}
- // .j-sm-2 {width: 16.66667%;}
- // .j-sm-3 {width: 25%;}
- // .j-sm-4 {width: 33.33333%;}
- .j-sm-5 {width: 41.66667%;}
- // .j-sm-6 {width: 50%;}
- .j-sm-7 {width: 58.33333%;}
- // .j-sm-8 {width: 66.66667%;}
- // .j-sm-9 {width: 75%;}
- // .j-sm-10 {width: 83.33333%;}
- // .j-sm-11 {width: 91.66667%;}
- .j-sm-12 {width: 100%;}
-}
-
-// Medium grid
-// 530px and up
-@include minbreakpoint(large-phone) {
- // .j-md-1 {width: 8.33333%;}
- // .j-md-2 {width: 16.66667%;}
- // .j-md-3 {width: 25%;}
- .j-md-4 {width: 33.33333%;}
- // .j-md-5 {width: 41.66667%;}
- .j-md-6 {width: 50%;}
- // .j-md-7 {width: 58.33333%;}
- .j-md-8 {width: 66.66667%;}
- // .j-md-9 {width: 75%;}
- // .j-md-10 {width: 83.33333%;}
- // .j-md-11 {width: 91.66667%;}
- .j-md-12 {width: 100%;}
-}
-
-// Large grid
-// 782px and up
-@include minbreakpoint(tablet) {
- // .j-lrg-1 {width: 8.33333%;}
- // .j-lrg-2 {width: 16.66667%;}
- // .j-lrg-3 {width: 25%;}
- .j-lrg-4 {width: 33.33333%;}
- .j-lrg-5 {width: 41.66667%;}
- .j-lrg-6 {width: 50%;}
- .j-lrg-7 {width: 58.33333%;}
- .j-lrg-8 {width: 66.66667%;}
- // .j-lrg-9 {width: 75%;}
- // .j-lrg-10 {width: 83.33333%;}
- // .j-lrg-11 {width: 91.66667%;}
- .j-lrg-12 {width: 100%;}
-}
diff --git a/plugins/jetpack/scss/_utilities/mixins/_breakpoint.scss b/plugins/jetpack/scss/_utilities/mixins/_breakpoint.scss
deleted file mode 100644
index 80cf50f5..00000000
--- a/plugins/jetpack/scss/_utilities/mixins/_breakpoint.scss
+++ /dev/null
@@ -1,46 +0,0 @@
-// ==========================================================================
-// Breakpoint Mixin
-//
-// Uses Sass Maps which requires Sass v3.3.0 or newer
-//
-//
-// EXAMPLE
-//
-// body {
-// @include breakpoint(tablet){
-// font-size: 14px;
-// };
-// }
-
-// ==========================================================================
-
-// Add or remove breakpoints as you desire
-$breakpoints:(
- phone: 320px,
- large-phone: 530px,
- phablet: 600px,
- tablet: 782px,
- desktop: 900px,
- large-desktop: 1147px,
-);
-
-@mixin breakpoint($size){
- @each $breakpoint, $value in $breakpoints {
- @if $size == $breakpoint {
- @media (max-width: map-get($breakpoints, $breakpoint)){
- @content;
- }
- }
- }
-}
-
-// For mobile first
-@mixin minbreakpoint($size){
- @each $breakpoint, $value in $breakpoints {
- @if $size == $breakpoint {
- @media (min-width: map-get($breakpoints, $breakpoint)){
- @content;
- }
- }
- }
-}
diff --git a/plugins/jetpack/scss/atoms/_animations.scss b/plugins/jetpack/scss/atoms/_animations.scss
deleted file mode 100644
index 8f032271..00000000
--- a/plugins/jetpack/scss/atoms/_animations.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-// ==========================================================================
-// Animation for miles!
-// ==========================================================================
-
-@keyframes "candy" {
- 0% {
- transform: scale(1);
- }
- 20% {
- transform: scale(1.15);
- }
- 60% {
- transform: scale(.95);
- }
- 100% {
- transform: scale(1);
- }
-}
diff --git a/plugins/jetpack/scss/atoms/_buttons.scss b/plugins/jetpack/scss/atoms/_buttons.scss
deleted file mode 100644
index 45825f97..00000000
--- a/plugins/jetpack/scss/atoms/_buttons.scss
+++ /dev/null
@@ -1,137 +0,0 @@
-// ==========================================================================
-// Buttony button buttons
-// ==========================================================================
-
-.button,
-.download-jetpack {
- transition: all .1s ease-in-out;
-}
-.jp-button {
- display: inline-block;
- position: relative;
- padding: em(10px, 13px) em(19px, 13px);
- color: #efefef;
- font-weight: bold;
- font-size: 0.9285714286em; // 13/14
- line-height: 1;
- text-shadow: 0 1px 1px rgba(0,0,0,.2);
- background: #6f7476;
- border-radius: 3px;
-
- &:visited {
- color: #efefef;
- }
- &:hover,
- &:focus {
- color: #fff;
- background: #57972d;
- }
- &:active {
- background: #57972d;
- opacity: 0.8;
- }
-}
-.jp-button--settings {
- @extend .jp-button;
- background: #93b45f;
- color: #e8eedf;
-
- &:visited {
- color: #e8eedf
- }
- &:hover,
- &:focus {
- background: #9fbd72;
- color: #fff;
- }
- &.current {
- background: #3c6621;
- color: #fff;
- box-shadow:
- inset 0 2px 0 #365A1F,
- inset 0 1px 3px #3c6621;
- }
-}
-.download-jetpack {
- display: inline-block;
- position: relative;
- padding: em(18px, 28px) em(50px, 46px) em(15px, 28px);
- color: #fff;
- font-weight: 400;
- font-size: 20px;
- line-height: 1;
- background: #518d2a;
- z-index: 3;
- border-radius: 6px;
- box-shadow:
- 0 6px 0 #3e6c20,
- 0 6px 3px rgba(0,0,0,.4);
-
- &:visited {
- color: #fff;
- }
- &:hover,
- &:focus {
- color: #fff;
- background: #57972d;
- box-shadow:
- 0 6px 0 #3e6c20,
- 0 6px 3px rgba(0,0,0,.4);
- }
- &:active {
- top: 6px;
- box-shadow:
- 0 0px 0 #3e6c20,
- 0 0 0 rgba(0,0,0,.4);
-
- &:after {
- // fixes buggy clicks
- top: -6px;
- }
- }
- &:before {
- content: '';
- display: inline-block;
- position: relative;
- top: -2px;
- margin-right: 13px;
- width: 30px;
- height: 30px;
- vertical-align: middle;
- background: url('../images/connect-plug.svg') center center no-repeat;
- background-size: 100%;
- }
- &:after {
- // fixes buggy clicks
- content: '';
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- }
- @include breakpoint(large-desktop){
- font-size: em(18px);
-
- &:before {
- top: -1px;
- width: 23px;
- height: 23px;
- }
- };
- @include breakpoint(desktop){
- &:active {
- top: 0;
- }
- };
- @include breakpoint(large-phone){
- font-size: em(17px);
- font-weight: 600;
-
- &:before {
- width: 19px;
- height: 19px;
- margin-right: 9px;
- }
- };
-}
diff --git a/plugins/jetpack/scss/atoms/colors/_colors.scss b/plugins/jetpack/scss/atoms/colors/_colors.scss
deleted file mode 100644
index 63b869f8..00000000
--- a/plugins/jetpack/scss/atoms/colors/_colors.scss
+++ /dev/null
@@ -1,16 +0,0 @@
-// ==========================================================================
-// Jetpack Colors
-// ==========================================================================
-
-$green: #81a844;
-$white: #fff;
-$red: #d94f4f;
-
-// Blues
-$lightblue: #2ea2cc;
-$wpcom: #0087be;
-$blue-dark: #005082;
-
-// Grays
-$clouds: #f9f9f9;
-$gray-med: #686f72;
diff --git a/plugins/jetpack/scss/atoms/icons/_automatticons.scss b/plugins/jetpack/scss/atoms/icons/_automatticons.scss
deleted file mode 100644
index 01eb9791..00000000
--- a/plugins/jetpack/scss/atoms/icons/_automatticons.scss
+++ /dev/null
@@ -1,32 +0,0 @@
-// ==========================================================================
-// Automatticons
-//
-// A quick reference
-// ==========================================================================
-
-$automatticons: 'automatticons';
-
-// This font was graciously generated by Font Squirrel (http://www.fontsquirrel.com). We love those guys.
-@font-face {
- font-family: 'automatticons';
- src: url('../_inc/fonts/automatticons/automatticons.eot');
- src: url('../_inc/fonts/automatticons/automatticons.eot?#iefix') format('embedded-opentype'),
- url('../_inc/fonts/automatticons/automatticons.woff') format('woff'),
- url('../_inc/fonts/automatticons/automatticons.ttf') format('truetype'),
- url('../_inc/fonts/automatticons/automatticons.svg#automatticonsregular') format('svg');
- font-weight: normal;
- font-style: normal;
-}
-
-// $automattic: 'A';
-// $code-poet: 'C';
-// $facebook: 'F';
-// $gravatar: 'G';
-// $inferno: 'I'; // Not sure what this one is
-// $jetpack: 'J';
-// $akismet: 'K';
-// $polldaddy: 'P';
-// $shield: 's'; // VaultPress shield
-// $vaultpress: 'V';
-// $vaultpress-inverted: 'v';
-// $wordpress: 'W';
diff --git a/plugins/jetpack/scss/atoms/typography/_functions.scss b/plugins/jetpack/scss/atoms/typography/_functions.scss
deleted file mode 100644
index 878bc05e..00000000
--- a/plugins/jetpack/scss/atoms/typography/_functions.scss
+++ /dev/null
@@ -1,12 +0,0 @@
-// ==========================================================================
-// em()
-//
-// Convert px to em in a readable fashion.
-// ==========================================================================
-
-// Examples:
-// 1. font-size: em(14px);
-// 2. font-size: em(30px/14px);
-@function em($value, $context: map-get($root-font, font-size)) {
- @return ($value / $context * 1em);
-}
diff --git a/plugins/jetpack/scss/atoms/typography/_variables.scss b/plugins/jetpack/scss/atoms/typography/_variables.scss
deleted file mode 100644
index e1a912b1..00000000
--- a/plugins/jetpack/scss/atoms/typography/_variables.scss
+++ /dev/null
@@ -1,31 +0,0 @@
-// ==========================================================================
-// Typography variables
-// ==========================================================================
-
-$normal: normal; // Change these values when using custom fonts
-$bold: bold; // For example, bold could change to 400;
-
-$root-font:(
- color: #222,
- font-size: 14px,
- line-height: 1.4
-);
-
-$pre__background: #eee;
-$mark__background: #fff9c0;
-
-// ==========================================================================
-// Typefaces
-// ==========================================================================
-
-$monospace: 'courier new', monospace;
-$serif: Georgia, "Times New Roman", Times, serif;
-$sans: Helvetica, Arial, sans-serif; // 400i,400,600,700,800
-$calluna: 'calluna', $sans; // 400
-$gill: "Gill Sans", "Gill Sans MT", $sans;
-
-// ==========================================================================
-// Icons
-// ==========================================================================
-
-$genericons: 'genericons';
diff --git a/plugins/jetpack/scss/dashboard-widget.scss b/plugins/jetpack/scss/dashboard-widget.scss
deleted file mode 100644
index ee6e1796..00000000
--- a/plugins/jetpack/scss/dashboard-widget.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-// Functions
-@import '_inc/client/scss/functions/rem';
-
-// Variables
-@import '_inc/client/scss/variables/colors';
-@import '_inc/client/scss/variables/layout';
-
-// Mixins
-@import '_inc/client/scss/mixins/breakpoints';
-@import '_inc/client/scss/mixins/clear-fix';
-@import '_inc/client/scss/mixins/long-content-fade';
-
-// Styles
-@import "_inc/client/dashboard-widget/style";
diff --git a/plugins/jetpack/scss/jetpack-admin-jitm.scss b/plugins/jetpack/scss/jetpack-admin-jitm.scss
deleted file mode 100644
index 4a622abe..00000000
--- a/plugins/jetpack/scss/jetpack-admin-jitm.scss
+++ /dev/null
@@ -1,417 +0,0 @@
-// Just in Time Messaging - message prompts
-
-@import '_inc/client/scss/functions/rem';
-@import '_inc/client/scss/variables/colors';
-@import '_inc/client/scss/mixins/breakpoints';
-
-@mixin clear-fix {
- &:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden;
- }
-}
-
-@mixin jitm-banner-color( $color ) {
- border-left-color: $color;
- .jitm-banner__icon {
- color: $color;
- }
- .jitm-banner__icon-circle {
- background-color: $color;
- }
-}
-
-// New JITMS - modified calypso banner styles
-
-.jitm-button {
- background: $white;
- border-color: lighten( $gray, 20% );
- border-style: solid;
- border-width: 1px 1px 2px;
- color: $gray-dark;
- cursor: pointer;
- display: inline-block;
- margin: 0;
- outline: 0;
- overflow: hidden;
- font-weight: 500;
- text-overflow: ellipsis;
- text-decoration: none;
- vertical-align: top;
- box-sizing: border-box;
- font-size: rem( 14px );
- line-height: rem( 21px );
- border-radius: rem( 4px );
- padding: rem( 7px ) rem( 14px ) rem( 9px );
- appearance: none;
-
- &:hover {
- border-color: lighten( $gray, 10% );
- color: $gray-dark;
- }
- &:active {
- border-width: 2px 1px 1px;
- }
- &:visited {
- color: $gray-dark;
- }
- &[disabled],
- &:disabled {
- color: lighten( $gray, 30% );
- background: $white;
- border-color: lighten( $gray, 30% );
- cursor: default;
-
- &:active {
- border-width: 1px 1px 2px;
- }
- }
- &:focus {
- outline: 0;
- border-color: $blue-medium;
- box-shadow: 0 0 0 2px $blue-light;
- }
- &.is-compact {
- padding: rem( 7px );
- color: darken( $gray, 10% );
- font-size: rem( 12px );
- line-height: 1;
-
- &:disabled {
- color: lighten( $gray, 30% );
- }
- }
-
- &.hidden {
- display: none;
- }
-}
-
-// Primary buttons
-.jitm-button.is-primary {
- background: $blue-medium;
- border-color: $blue-wordpress;
- color: $white;
-
- &:hover,
- &:focus {
- border-color: $blue-dark;
- color: $white;
- }
- &[disabled],
- &:disabled {
- background: tint( $blue-light, 50% );
- border-color: tint( $blue-wordpress, 55% );
- color: $white;
- }
- &.is-compact {
- color: $white;
- }
-}
-
-
-.jitm-card {
- display: block;
- clear: both;
- position: relative;
- margin: rem( 48px ) rem( 20px ) 0 auto;
- padding: rem( 16px );
- box-sizing: border-box;
- background: $white;
- box-shadow: 0 0 0 1px transparentize( lighten( $gray, 20% ), .5 ),
- 0 1px 2px lighten( $gray, 30% );
-
- @include clear-fix;
-
- @include breakpoint( ">480px" ) {
- margin-bottom: rem( 16px );
- padding: rem( 24px );
- }
-
- // Compact Card
- &.is-compact {
- margin-bottom: rem( 1px );
-
- @include breakpoint( ">480px" ) {
- margin-bottom: 1px;
- padding: rem( 16px ) rem( 24px );
- }
- }
-
- &.is-card-link {
- padding-right: rem( 48px );
- }
-}
-
-// if JITM appears directly below WordPress "help" menu adjust margins
-#screen-meta-links+.jitm-card {
- margin: rem( 40px ) 1.5385em 0 auto;
-}
-
-// if JITM appears directly below WordPress hello dolly adjust margins
-#dolly+.jitm-card {
- margin: 3rem 1rem 0 auto;
-}
-
-// remove right margin for jitms in the editor
-.post-php .jitm-card {
- margin-right: 0;
-}
-
- // if JITM appears inside of the jetpack dashboard adjust margins
- .jp-lower .jitm-card {
- margin: 3rem 0 rem( 24px );
- }
-
-.jitm-banner.jitm-card {
- border-left: 4px solid;
- display: flex;
- padding: rem( 12px ) rem( 6px ) rem( 12px ) rem( 12px );
- position: relative;
- z-index: 2;
-
- @include breakpoint( "<480px" ) {
- display: block;
- }
-
- &.is-card-link {
- padding: rem( 12px ) rem( 48px ) rem( 12px ) rem( 16px );
- }
- &.is-dismissible {
- padding-right: rem( 48px );
- }
-
- @include jitm-banner-color( $alert-green );
-
- &.is-upgrade-personal {
- @include jitm-banner-color( $alert-yellow );
- }
- &.is-upgrade-premium {
- @include jitm-banner-color( $alert-green );
- }
- &.is-upgrade-business,
- &.woo-jitm {
- @include jitm-banner-color( $alert-purple );
- }
-
- .jitm-card__link-indicator {
- align-items: center;
- color: $blue-wordpress;
- display: flex;
- }
-
- &:hover {
- transition: all 100ms ease-in-out;
- &.is-card-link {
- box-shadow: 0 0 0 1px $gray, 0 2px 4px lighten( $gray, 20% );
- }
- .jitm-card__link-indicator {
- color: $blue-dark;
- }
- }
-
- @include breakpoint( ">480px" ) {
- padding: rem( 12px ) rem( 16px );
-
- &.is-dismissible {
- padding-right: rem( 16px );
- }
- }
-}
-
-.jitm-banner__icons {
- display: flex;
-
- .jitm-banner__icon,
- .jitm-banner__icon-circle {
- border-radius: 50%;
- flex-shrink: 0;
- height: rem( 24px );
- width: rem( 24px );
- margin-right: rem( 16px );
- margin-top: rem( -2px );
- text-align: center;
- top: rem( 4px );
- }
-
- .jitm-banner__icon {
- align-self: center;
- color: $white;
- display: block;
- }
-
- .jitm-banner__icon-circle {
- color: white;
- display: none;
- padding: rem( 3px ) rem( 4px ) rem( 4px ) rem( 3px );
- }
-
- @include breakpoint( ">480px" ) {
- align-items: center;
-
- .jitm-banner__icon {
- display: none;
- }
- .jitm-banner__icon-circle {
- display: block;
- }
- }
-}
-
-.jitm-banner__icon-plan {
- display: flex;
- margin-right: rem( 16px );
-
- .dops-plan-icon {
- height: rem( 32px );
- width: rem( 32px );
- }
-
- .jp-emblem {
- position: relative;
- top: rem( 2px );
-
- @include breakpoint( "<480px" ) {
- margin-bottom: rem( 12px );
- }
-
- svg {
- height: rem( 32px );
- width: rem( 32px );
- fill: $green-primary;
- }
- }
-
- @include breakpoint( ">480px" ) {
- align-items: center;
- }
-}
-
-.jitm-banner__content {
- align-items: center;
- display: flex;
- flex-grow: 1;
- flex-wrap: wrap;
-
- @include breakpoint( ">480px" ) {
- flex-wrap: nowrap;
- }
-}
-
-.jitm-banner__info {
- flex-grow: 1;
- line-height: 1.4;
-
- @include breakpoint( ">480px" ) {
- flex-basis: 50%;
- }
-
- @include breakpoint( ">960px" ) {
- flex-basis: 70%;
- }
-
- .jitm-banner__title,
- .jitm-banner__description {
- color: $gray-dark;
- }
-
- .jitm-banner__title {
- font-size: 14px;
- font-weight: 500;
- }
-
- .jitm-banner__description {
- font-size: rem( 12px );
- line-height: 1.5;
- margin-top: rem( 6px );
- }
-
- .banner__list {
- font-size: 12px;
- list-style: none;
- margin: 10px 0;
- li {
- margin: 6px 0;
- .gridicon {
- fill: $gray;
- display: inline;
- margin-right: 12px;
- vertical-align: bottom;
- }
- }
- }
-}
-
-.jitm-banner__action {
- align-self: center;
- font-size: rem( 12px );
- margin: rem( 8px ) 0 0;
- text-align: left;
- width: 100%;
-
- .jitm-banner__prices {
- display: flex;
- justify-content: flex-start;
-
- .dops-plan-price {
- margin-bottom: 0;
- }
-
- .dops-plan-price.is-discounted,
- .dops-plan-price.is-discounted .dops-plan-price__currency-symbol {
- color: $gray-dark;
- }
-
- .has-call-to-action & .dops-plan-price {
- margin-bottom: rem( 8px );
- }
- }
-
- @include breakpoint( ">480px" ) {
- margin: 0 rem( 4px ) 0 rem( 8px );
- text-align: center;
- width: auto;
-
- .is-dismissible {
- margin-top: rem( 40px );
- }
-
- .jitm-banner__prices {
- justify-content: flex-end;
- text-align: right;
- }
- }
-}
-
-.jitm-banner__dismiss {
- display: block;
- text-decoration: none;
- line-height: .5;
-
- &:before {
- color: darken($gray, 20%);
- font: 400 16px/1 dashicons;
- content: '\f158';
- }
-
- @include breakpoint( ">660px" ) {
- margin-right: rem( -8px );
- }
-
- @include breakpoint( "<480px" ) {
- position: absolute;
- top: rem( 14px );
- right: rem( 14px );
- }
-}
-
-.jitm-banner__action + .jitm-banner__dismiss {
- margin-left: rem( 10px );
-}
-
-#dolly + .jitm-card {
- margin: 3rem 1rem 0 auto;
-}
diff --git a/plugins/jetpack/scss/jetpack-admin.scss b/plugins/jetpack/scss/jetpack-admin.scss
deleted file mode 100644
index e213d34c..00000000
--- a/plugins/jetpack/scss/jetpack-admin.scss
+++ /dev/null
@@ -1,15 +0,0 @@
-@import "atoms/colors/colors", // Color variables
- "atoms/typography/functions",
- "atoms/typography/variables",
- "_utilities/mixins/breakpoint", // Mixins
- "_utilities/grid",
- "atoms/animations",
- "atoms/buttons",
- "atoms/icons/automatticons",
- "molecules/nav-horizontal",
- "templates/main", // Main template
- "templates/settings", // Settings page
- "pages/protect", // Protect config page
- "pages/manage", // Actiavte and confirm manage
- "templates/connection-landing"; // jetpack connection landing, main admin, jumpstart
- \ No newline at end of file
diff --git a/plugins/jetpack/scss/jetpack-banners.scss b/plugins/jetpack/scss/jetpack-banners.scss
deleted file mode 100644
index 0621410a..00000000
--- a/plugins/jetpack/scss/jetpack-banners.scss
+++ /dev/null
@@ -1,4 +0,0 @@
-@import "_utilities/mixins/breakpoint",
- "atoms/typography/variables",
- "atoms/typography/functions",
- "organisms/banners";
diff --git a/plugins/jetpack/scss/jetpack-icons.scss b/plugins/jetpack/scss/jetpack-icons.scss
deleted file mode 100644
index 3dae89d3..00000000
--- a/plugins/jetpack/scss/jetpack-icons.scss
+++ /dev/null
@@ -1,26 +0,0 @@
-// ==========================================================================
-// Admin nav iconx
-// ==========================================================================
-
-@font-face {
- font-family: "jetpack";
- src: url("../_inc/fonts/jetpack/jetpack.eot");
- src: url("../_inc/fonts/jetpack/jetpack.eot?#iefix") format("embedded-opentype"),
- url("../_inc/fonts/jetpack/jetpack.woff") format("woff"),
- url("../_inc/fonts/jetpack/jetpack.ttf") format("truetype"),
- url("../_inc/fonts/jetpack/jetpack.svg#jetpack") format("svg");
- font-weight: normal;
- font-style: normal;
-}
-
-@media screen and (-webkit-min-device-pixel-ratio:0) {
- @font-face {
- font-family: "jetpack";
- src: url("../_inc/fonts/jetpack/jetpack.svg#jetpack") format("svg");
- }
-}
-
-li.toplevel_page_jetpack .wp-menu-image:before {
- font-family: 'jetpack' !important;
- content: '\f100';
-}
diff --git a/plugins/jetpack/scss/jetpack-idc-admin-bar.scss b/plugins/jetpack/scss/jetpack-idc-admin-bar.scss
deleted file mode 100644
index 4091488f..00000000
--- a/plugins/jetpack/scss/jetpack-idc-admin-bar.scss
+++ /dev/null
@@ -1,30 +0,0 @@
-#wp-admin-bar-jetpack-idc.hide {
- display: none;
-}
-
-#wp-admin-bar-jetpack-idc .jp-idc-admin-bar {
- background: #fff;
- border-radius: 2px;
- color: #23282d;
- padding: 4px 8px;
- font-size: 12px;
-}
-
-#wpadminbar #wp-admin-bar-jetpack-idc .dashicons {
- color: #23282d;
- font-family: 'dashicons';
-
- &:before {
- font-size: 16px;
- }
-}
-
-#wpadminbar #wp-admin-bar-jetpack-idc:hover {
- .ab-item {
- background: inherit;
- }
-
- .jp-idc-admin-bar {
- background: #eee;
- }
-}
diff --git a/plugins/jetpack/scss/jetpack-idc.scss b/plugins/jetpack/scss/jetpack-idc.scss
deleted file mode 100644
index 792851a0..00000000
--- a/plugins/jetpack/scss/jetpack-idc.scss
+++ /dev/null
@@ -1,206 +0,0 @@
-@import '../_inc/client/scss/variables/_colors.scss';
-
-.jp-idc-notice,
-.jp-idc-notice * {
- box-sizing: border-box;
-}
-
-.jp-idc-notice {
- margin-left: 0;
- margin-right: 10px;
- margin-top: 10px;
- overflow: hidden;
- padding-bottom: 16px;
- padding-top: 0;
-
- &.is-non-admin {
- padding-bottom: 0;
- }
-}
-
-@media all and ( min-width: 783px ) {
- .jp-idc-notice {
- margin-right: 20px;
- margin-top: 20px;
-
- &.has-help-tabs {
- margin-top: 48px;
- }
- }
-}
-
-.jp-idc-notice p {
- margin: 0;
- padding: 0;
-}
-
-.jp-idc-notice {
- h3, p {
- color: $gray-dark;
- }
-}
-
-.jp-idc-notice a:not( .dops-notice__action ) {
- color: $blue-wordpress;
- text-decoration: none;
-
- &:visited {
- color: $blue-wordpress;
- }
-
- &:hover,
- &:focus,
- &:active {
- color: $link-highlight;
- }
-}
-
-.jp-idc-notice .dops-button {
- align-self: flex-start;
- margin-top: auto;
-}
-
-.jp-idc-notice > div {
- padding: 0 8px;
-}
-
-.jp-idc-notice__first-step {
- display: inline-block;
-}
-
-.jp-idc-notice__second-step {
- display: none;
-}
-
-.jp-idc-notice.jp-idc-show-second-step {
- .jp-idc-notice__first-step {
- display: none;
- }
-
- .jp-idc-notice__second-step {
- display: inline-block;
- }
-}
-
-.jp-idc-notice .jp-idc-notice__header {
- padding-top: 8px;
- padding-bottom: 8px;
-}
-
-.jp-idc-notice__header__emblem {
- fill: $green-primary;
- width: 25px;
- height: 25px;
- margin: 0 1em 0 auto;
- float: left;
-}
-
-.jp-idc-notice__header__text {
- font-size: 14px;
- font-weight: 600;
- line-height: 25px;
- margin: 0;
-}
-
-.jp-idc-notice__content-header {
- margin: 16px 0;
-}
-
-.jp-idc-notice__content-header__lead {
- font-size: 16px;
- font-weight: 600;
- line-height: 21px;
- margin: 0;
-}
-
-.jp-idc-notice__content-header .jp-idc-notice__content-header__explanation {
- font-size: 14px;
- font-weight: 400;
- margin: 8px 0 0;
-}
-
-@media only screen and ( min-width: 960px ) {
- .jp-idc-notice__content-header .jp-idc-notice__content-header__explanation {
- margin: 4px 0 0;
- }
-}
-
-.jp-idc-notice__action {
- border: 1px solid lighten( $gray, 30% );
- border-radius: 4px;
- display: flex;
- padding: 16px;
- flex-direction: column;
- margin-top: auto;
-}
-
-.jp-idc-notice__action:last-child {
- margin: 16px 0 0;
-}
-
-@media only screen and ( min-width: 960px ) {
- .jp-idc-notice__actions {
- display: flex;
- }
-
- .jp-idc-notice__action {
- flex: 1;
- margin: 0 8px 0 0;
- }
-
- .jp-idc-notice__action:last-child {
- margin: 0 0 0 8px;
- }
-
- .jp-idc-notice__action:first-child {
- padding-right: 24px;
- }
-
- .jp-idc-notice__action:last-child {
- padding-left: 24px;
- }
-}
-
-.jp-idc-notice .jp-idc-notice__action__explanation {
- margin: 0 0 16px 0;
-}
-
-
-.jp-idc-notice__separator {
- background-color: lighten( $gray, 30% );
- margin: 0 -10px 0 -10px;
- height: 1px;
-}
-
-.jp-idc-notice.is-dismissible .jp-idc-notice__separator {
- margin-right: -46px;
-}
-
-@media only screen and ( min-width: 782px ) {
- .jp-idc-notice__separator {
- margin: 0 -12px 0 -12px;
- }
-
- .jp-idc-notice.is-dismissible .jp-idc-notice__separator {
- margin-right: -38px;
- }
-}
-
-.jp-idc-notice .jp-idc-notice__unsure-prompt {
- margin: 16px 0 0;
-}
-
-.jp-idc-notice .jp-idc-error__notice {
- display: none;
-
- .dops-notice__icon {
- height: auto;
- width: auto;
- }
-}
-
-@media only screen and ( min-width: 683px ) {
- .jp-idc-notice .jp-idc-error__notice .dops-notice__text {
- line-height: 24px;
- }
-}
diff --git a/plugins/jetpack/scss/molecules/_nav-horizontal.scss b/plugins/jetpack/scss/molecules/_nav-horizontal.scss
deleted file mode 100644
index 0591531d..00000000
--- a/plugins/jetpack/scss/molecules/_nav-horizontal.scss
+++ /dev/null
@@ -1,25 +0,0 @@
-// ==========================================================================
-// Horizontal menu!
-// ==========================================================================
-
-.nav-horizontal {
- &:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden;
- }
-
- a {
- display: inline-block;
- }
- li {
- position: relative;
- float: left;
- }
- ul {
- margin: 0;
- padding: 0;
- }
-} \ No newline at end of file
diff --git a/plugins/jetpack/scss/organisms/_banners.scss b/plugins/jetpack/scss/organisms/_banners.scss
deleted file mode 100644
index b3b2c2f2..00000000
--- a/plugins/jetpack/scss/organisms/_banners.scss
+++ /dev/null
@@ -1,443 +0,0 @@
-@import '_inc/client/scss/functions/rem';
-@import '_inc/client/scss/variables/colors';
-
-.updated { // utlizes some core styles, overrides some others
- &.jp-banner {
- position: relative;
- padding: 0;
- }
-
- .jp-banner__header {
- font-size: rem( 18px ) ;
- font-weight: 400;
- margin-top: 0;
- }
-
- .jp-banner__button-container {
- padding: rem( 32px ) 0 0;
- flex-direction: row-reverse;
- align-items: center;
- justify-content: flex-end;
-
- @include minbreakpoint(phablet) {
- display: flex;
- }
- }
-
- .jp-banner__tos-blurb {
- display: block;
- padding: rem( 6px ) 0;
- line-height: 1.5;
- font-size: rem( 11px );
- color: $gray-dark;
- @include minbreakpoint(phablet) {
- margin-left: rem(18px);
- }
-
- a {
- color: inherit;
- }
- }
-}
-
-.jp-banner .notice-dismiss {
- text-decoration: none;
-}
-
-.jp-banner__description {
- font-size: rem( 14px );
-}
-
-.jp-banner__description-container {
- padding: rem( 16px );
-}
-
-// Full Page Connection Banner
-// only show when Jetpack is disconnected
-.jetpack-disconnected {
- .jp-connect-full__container {
- box-sizing: border-box;
- position: absolute;
- top: 0;
- right: 0;
- bottom: rem( 20px );
- left: 0;
- z-index: 999; // to sit over other elements
- background: rgb( 241, 241, 241 );
- text-align: center;
-
- @include breakpoint(large-phone) {
- top: 42px;
- };
-
- @include minbreakpoint(tablet) {
- left: -20px; // fill gap of wp-admin sidebar right margin on large screens
- };
-
- .jp-connect-full__container-card {
- padding: rem( 64px ) rem( 64px ) rem( 96px );
- background: white;
- margin: 1em;
-
- img.jetpack-logo {
- width: 160px;
- }
-
- img.support-characters {
- margin-top: rem( 24px );
- width: 50%;
- }
- }
-
- h4 {
- line-height: 1.25;
- font-size: rem( 22px );
- font-weight: normal;
- margin: 1em 0;
- }
-
- }
-
- // Full page connection banner in the Jetpack dashboard.
- &.toplevel_page_jetpack .jp-connect-full__container {
- position: relative;
- bottom: 0;
- box-shadow: 0 0 0 1px transparentize( lighten( $gray, 20% ), .5 ),
- 0 1px 2px lighten( $gray, 30% );
-
- .jp-connect-full__container-card {
- margin: 0;
- }
-
- @include minbreakpoint(tablet) {
- left: 0;
- };
-
- @include breakpoint(tablet) {
- top: 46px;
- };
-
- // hide the notice by default. Only display it when it is injected in the middle of the page.
- display: none;
- }
-
- // Only display the banner when it is injected in the middle of the page.
- &.toplevel_page_jetpack .jp-jetpack-connect__container {
- .jp-connect-full__container {
- display: block;
- }
- }
-}
-
-// dismiss
-.jp-connect-full__svg-dismiss {
- position: absolute;
- right: 0;
- top: 0;
- fill: $gray;
- padding: rem( 16px );
- height: rem( 24px );
- width: rem( 24px );
-}
-
-.jp-connect-full__step-header {
- max-width: 700px;
- margin: 0 auto;
- line-height: 1.5;
-
- h2 {
- margin: rem( 24px ) 10% 0;
- font-size: rem( 22px );
- font-weight: bold;
- color: black;
-
- @include breakpoint(large-phone) {
- margin: rem( 24px ) 0 0;
- };
- }
-
- h3 {
- color: $gray-text-min;
- font-size: rem( 16px );
- font-weight: normal;
- margin: rem( 10px ) 0 rem( 24px );
- }
-
- &.bottom {
- margin-top: rem( 80px );
- }
-}
-
-.jp-connect-full__button-container {
- margin: 0;
- .dops-button.is-primary {
- background: $green-primary;
- border-color: $green-secondary;
- padding-left: rem( 24px );
- padding-right: rem( 24px );
-
- &:hover, &:focus {
- background: $green-secondary;
- border-color: $green-dark;
- }
- }
-}
-
-.jp-connect-full__tos-blurb {
- font-size: rem( 11px );
- margin: 0 auto rem( 16px );
-}
-
-.jp-connect-full__dismiss {
- cursor: pointer;
-}
-
-.jp-connect-full__dismiss-paragraph {
- font-size: .6875rem;
-}
-
-.jp-connect-full__tos-blurb a,
-.jp-connect-full__dismiss-paragraph a {
- cursor: pointer;
- color: inherit;
- text-decoration: underline;
-}
-
-.jp-connect-full__row {
- display: flex;
- justify-content: space-evenly;
- text-align: left;
- align-items: baseline;
- margin: 0 auto;
- max-width: 1000px;
-}
-
-.jp-connect-full__slide {
- max-width: 35%;
- margin: rem(48px) 0;
-
- @include breakpoint(tablet) {
- margin: rem(30px) 0;
- }
-
- p {
- font-size: rem(14px);
- }
-
- .illustration {
- padding: rem(12px);
-
- @include minbreakpoint(phablet) {
- margin-bottom: rem(42px);
- };
- }
-}
-
-.jp-connect-full__step-support {
- max-width: 700px;
- margin: 0 auto;
- line-height: 1.25;
-
- h2 {
- margin: rem( 16px ) 0 0;
- font-size: rem( 22px );
- font-weight: normal;
- color: black;
- }
-
- h3 {
- color: $gray-text-min;
- font-size: rem( 16px );
- font-weight: normal;
- margin: rem( 10px ) 0 rem( 24px );
- }
-}
-
-@media screen and (max-width: 480px) {
- .jp-connect-full__row {
- display: block;
- }
- .jp-connect-full__slide {
- margin: 2em 0;
- max-width: 100%;
- }
- .jetpack-disconnected .jp-connect-full__container .jp-connect-full__container-card {
- padding: rem(48px) rem(32px);
- }
-}
-
-
-// Plugin List + wp-admin dashboard Connection Banners (displayed after plugin activation)
-// Written in the style of React to stay consistent with the Jetpack interior
-
-// wp-admin overrides
-.updated.jp-wpcom-connect__container {
- border-left: none;
- padding: 0;
- box-shadow: 0 0 0 1px rgba(200, 215, 225, 0.5), 0 1px 2px #e9eff3;
-
- @media screen and (max-width: 782px) {
- padding: 0 !important; // override core cascades
- }
-}
-
-.updated.jp-wpcom-connect__container .dops-button {
- padding: 7px 14px 9px; // override wp-admin .updated a padding
-}
-
-.updated .notice-dismiss {
- z-index: 1;
- text-decoration: none;
- &:before {
- color: $white;
- }
-}
-// end overrides
-
-.jp-wpcom-connect__container-top-text {
- padding: 15px 35px 25px 15px;
- background-color: $green-primary;
- color: $white;
- display: flex;
- align-items: baseline;
-
- svg {
- width: 24px;
- height: 24px;
- margin-right: 10px;
- position: relative;
- top: 7px;
- @include breakpoint(large-phone) {
- flex: 1;
- }
-
- path {
- fill: #fff;
- }
- }
-
- span {
- display: inline-block;
- @include breakpoint(large-phone) {
- flex: 9;
- }
- }
-}
-
-.jp-wpcom-connect__container {
- display: block;
- position: relative;
- box-sizing: border-box;
- background-color: $green-primary;
-}
-
-.jp-wpcom-connect__inner-container > a:first-child {
- z-index: 1;
-}
-
-.jp-wpcom-connect__inner-container {
- display: flex;
- flex-direction: row;
- flex-wrap: nowrap;
- justify-content: left;
- // border: 4px $green-primary solid;
- background: #fff;
-}
-
-.jp-wpcom-connect__content-container {
- width: 1250px;
- position: relative;
- padding: rem( 32px );
- z-index: 0;
-}
-
-.jp-wpcom-connect__content-container p {
- color: darken( $gray, 20% );
- font-size: rem( 14px );
-}
-
-.jp-wpcom-connect__content-container h2 {
- margin-top: 0;
- line-height: 1.6;
- display: block;
- margin-bottom: rem(24px);
-}
-
-.jp-wpcom-connect__hide-phone-and-smaller {
- @include breakpoint(large-phone) {
- display: none !important;
- }
-}
-
-.jp-wpcom-connect__content-icon {
- margin: 0 rem( 24px );
- display: flex;
- flex-direction: column;
-}
-
-.jp-connect-illo {
- img {
- display: block;
- margin: 0 auto;
-
- &.jetpack-logo {
- margin-bottom: rem(36px);
-
- @include breakpoint(large-phone) {
- margin-left: 0;
- }
- }
- }
-
- @include breakpoint(tablet) {
- width: 100%;
- margin: rem( 8px ) 0;
- display: block;
- }
-}
-
-.jp-wpcom-connect__slide-text {
- @include minbreakpoint(desktop) {
- padding-left: rem( 45px );
- }
-}
-
-.jp-wpcom-connect__slide {
- display: none;
-
- &.jp__slide-is-active {
- display: flex;
- align-items: flex-start;
-
- @include breakpoint(tablet) {
- display: block;
- }
- }
-}
-
-.jp-wpcom-connect__slide ul {
- list-style: disc;
- padding: 0 0 0 rem( 15px );
-}
-
-.jp-wpcom-connect__slide ul li {
- color: darken( $gray, 20% );
- font-size: rem( 12px );
-}
-
-.jp-banner__button-container .dops-button {
- margin: rem( 5px ) 0;
-
- &.is-primary {
- background: $green-primary;
- border-color: $green-secondary;
- padding-left: rem( 24px );
- padding-right: rem( 24px );
- flex-shrink: 0;
-
- &:hover, &:focus {
- background: $green-secondary;
- border-color: $green-dark;
- }
- }
-}
diff --git a/plugins/jetpack/scss/pages/_manage.scss b/plugins/jetpack/scss/pages/_manage.scss
deleted file mode 100644
index 0825429b..00000000
--- a/plugins/jetpack/scss/pages/_manage.scss
+++ /dev/null
@@ -1,40 +0,0 @@
-
-.manage__icon {
- width: 155px;
- height: 155px;
- margin: 20px auto;
-}
-
-.manage-page {
- .manage__description {
- max-width: 600px;
- text-align: center;
- font-size: 22px;
- color: #999;
- margin: 20px auto;
- }
- .manage__button {
- font-size:16px;
- padding: 0 20px;
- height:40px;
- line-height:40px;
- }
-}
-.manage__title .genericon {
- font-size: 38px;
- color: #81A944;
-}
-
-.manage__link {
- font-size: 16px;
- padding: 0 20px;
- height: 40px;
- line-height: 40px;
- font-weight: normal;
-
- .genericon{
- font-size: 28px;
- vertical-align: middle;
- margin-top: -6px;
- }
-}
diff --git a/plugins/jetpack/scss/pages/_protect.scss b/plugins/jetpack/scss/pages/_protect.scss
deleted file mode 100644
index 51120335..00000000
--- a/plugins/jetpack/scss/pages/_protect.scss
+++ /dev/null
@@ -1,90 +0,0 @@
-/* 'Pages' is a temporary location for these styles, until we can break them up into their proper atmoic locations */
-
-// ==========================================================================
-// Jetpack Protect Config Page
-//==========================================================================
-
-
-.configure-module p {
- font-size: 14px;
-
- &.success, &.error {
- color: $white;
- padding: 10px;
- }
-
- &.success {
- background-color: $green;
- }
-
- &.error {
- background-color: $red;
- }
-}
-
-.protect-status {
-
- p {
- font-size: 16px;
- }
-
- strong {
- display: inline-block;
- margin-top: 10px;
- background: #fff;
- padding: 10px;
- border: 1px #ddd solid;
- font-size: 16px;
- color: #000;
- max-width: 100%;
- }
-
- &.attn {
- color: $red;
- }
-
- &.working {
- color: $green;
- }
-} // .protect-status
-
-.protect-whitelist {
-
- textarea {
- width: 100%;
- min-height: 150px;
- }
-}
-
-/* btns + inputs */
-
-.configure-module {
-
- input[disabled] {
- opacity: .5;
- }
-
- input.button-primary {
- font-weight: bold;
- }
-}
-
-/* whitelist table */
-
-@media only screen and (min-width : 1100px) {
-
- .protect-whitelist {
- width: 65%;
- float: left;
- }
-
-} /* end > 1065px */
-
-@media only screen and (max-width : 400px) {
-
- .protect-status strong {
- font-size: 12px;
- overflow: auto;
- }
-
-} /* end < 400px */
diff --git a/plugins/jetpack/scss/templates/_connection-landing.scss b/plugins/jetpack/scss/templates/_connection-landing.scss
deleted file mode 100644
index 95a3d663..00000000
--- a/plugins/jetpack/scss/templates/_connection-landing.scss
+++ /dev/null
@@ -1,82 +0,0 @@
-// ==========================================================================
-// Jetpack Connection Landing Page ('Please connect jetpack')
-//===========================================================================
-
-// ==========================================================================
-// Jetpack NUX Page(s) (main jetpack admin page + jumpstart)
-//===========================================================================
-
-// Needs to be cleaned. Let's remove those important tags and unneeded classes that we can utilize from core. Properly nest elements. migrate into _main.scss
-// Once everything is tested, I'll remove all the comments below as well. - @jeffgolenski
-
-// wrapping these common element names temporarily until I can audit - jeff
-.jp-content {
- .hide {
- display: none;
- }
-
- .landing {
- margin: 0 auto;
- z-index: 2;
- position: relative;
- }
-
- h1 {
- font-weight: 400;
- line-height: 1.75em;
- position: relative;
- z-index: 3;
- width: 100%;
- text-align: center;
-
- &.success {
- color: $green;
- }
- }
- .footer {
- padding-top: 0;
- margin-top: 0;
- background-image: none;
-
- &:before {
- height: inherit;
- }
- }
-
- .more-info:before {
- content: none;
- }
-} //.jp-content
-
-.landing {
- .wpcom-connect {
- min-height: 400px;
- }
-}
-
-.wpcom-connect {
- .j-col {
- padding: 0;
- }
-}
-
-// Breakpoints
-@include breakpoint(large-desktop) {
- .jp-content {
- .landing {
- padding: 0 2em;
- }
-
- .footer {
- padding-top: 1.5em;
- }
- }
-} // large-desktop
-
-@include breakpoint(large-phone) {
- .jp-content {
- .landing {
- padding: 0 .5em;
- }
- }
-} // large-phone
diff --git a/plugins/jetpack/scss/templates/_main.scss b/plugins/jetpack/scss/templates/_main.scss
deleted file mode 100644
index 6aa2b7c2..00000000
--- a/plugins/jetpack/scss/templates/_main.scss
+++ /dev/null
@@ -1,634 +0,0 @@
-// ==========================================================================
-// Main Layout
-// ==========================================================================
-
-.configure .frame.top.fixed {
- @include breakpoint(tablet){
- padding-left: 0;
- };
-}
-
-// ==========================================================================
-// Main author styles
-// ==========================================================================
-
-.wrap.inner,
-.page-content {
- max-width: 950px;
- margin: 0 auto;
-
- li {
- line-height: 23px;
- }
-}
-
-.page-content {
- @include breakpoint(large-phone){
- margin-top: 0;
- };
-}
-
-.wrap.inner {
- @include breakpoint(large-desktop) {
- background: $clouds;
- padding: 15px;
- };
- @include breakpoint(large-phone) {
- margin-top: em(24px);
- };
-}
-
-.page-content.about {
- position: relative;
- z-index: 10;
-
- @include breakpoint(large-desktop){
- background: $clouds;
- padding: 15px;
- };
-}
-
-.page-content.configure {
- @include breakpoint(large-desktop){
- background: $clouds;
- };
-}
-
-.footer nav {
- max-width: 550px;
- margin: 0 auto;
-}
-
-
-// ==========================================================================
-// Main navigation
-// ==========================================================================
-
-.header {
- left: 0;
- right: 0;
- background: $green;
-}
-.header-nav {
- li {
- line-height: 60px;
-
- }
- a {
- padding: 0 em(10px);
- line-height: 24px;
- }
- .jetpack-logo {
- a {
- display: inline-block;
- position: relative;
- width: 214px;
- margin-right: 6px;
- background: url(../images/jetpack-logo.png) center center no-repeat;
- background: url(../images/jetpack-logo.svg) center center no-repeat, none;
- background-size: 183px auto;
- color: #fff;
- line-height: 60px;
- font-weight: normal;
-
- span {
- text-indent: -9999px;
- visibility: hidden;
- }
-
- // needs to be cleaned up and removed - jeffgolenski
- &:before {
- content: '';
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
-
- background-size: 183px 32px;
- }
- }
- }
- .jetpack-modules + .jetpack-modules {
- margin-left: 15px;
- }
-}
-
-.main-nav {
- float: left;
-
- li {
- margin: 0;
- }
- @include breakpoint(desktop){
- font-size: 13px;
- };
-}
-
-// Help tab
-.jetpack-pagestyles {
- #screen-meta {
- margin: 0;
- }
- #screen-meta-links .screen-meta-toggle {
- z-index: 2;
- }
- #screen-options-link-wrap, #contextual-help-link-wrap {
- border: none;
- }
- .update-nag {
- display: none;
- }
-}
-
-// ==========================================================================
-// Modal
-// ==========================================================================
-
-.loading {
- bottom: 50%;
- position: absolute;
- top: 50%;
- width: 100%;
-
- span {
- color: #999;
- }
-}
-.modal {
- background: #fff;
- position: fixed;
- top: 52px;
- bottom: 20px;
- right: 20px;
- left: 20px;
- margin-left: 160px;
- display: none;
- box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1);
- z-index: 500;
-
- .close {
- position: absolute;
- top: 0;
- right: 0;
- font: 300 em(24px) 'genericons' !important;
- color: #777;
- content: '\f405';
- display: inline-block;
- padding: em(4px) em(10px) em(6px);
- z-index: 5;
-
- &:hover {
- background: #eee;
- opacity: 0.8;
- }
- &:active {
- background: #eee;
- opacity: 0.4;
- }
- }
- .content-container {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- overflow: auto;
- padding: em(30px, 14px);
- }
- .content {
- margin: 0 auto;
- max-width: 900px;
- text-align: left;
- }
- h2 {
- text-align: left;
- margin-top: 0;
- color: #5d6d74;
- font-weight: 300;
- line-height: 32px;
- text-shadow: 0 1px 1px #fff;
-
- @include breakpoint(large-phone){
- font-size: 26px;
- };
- }
- h5 {
- clear: left;
- }
- p {
- font-size: em(16px, 13px);
- }
- footer {
- position: absolute;
- left: 0;
- bottom: 0;
- width: 100%;
- padding: 12px 20px;
- border-top: 1px solid #ddd;
- background: #fff;
- text-align: right;
-
- ul {
- margin: 0;
- }
- li {
- display: inline-block;
- margin: 0;
- }
- }
- .button-secondary,
- .button-primary:active {
- // fixing weird core bug thingy
- vertical-align: baseline;
- }
- @include breakpoint(desktop){
- bottom: 5%;
- margin-left: 36px;
- font-size: 80%;
-
- .content {
- top: 38px;
- }
- };
- @include breakpoint(tablet){
- top: 66px;
- margin-left: 0;
- };
- @include breakpoint(phablet){
- top: 10px;
- right: 10px;
- bottom: 10px;
- left: 10px;
- }
-}
-.jp-info-img {
- float: right;
- margin: 0 0 8px 30px;
-
- img {
- border: 1px solid #ddd;
- max-width: 100%;
- height: auto;
-
- &:first-child {
- margin-top: 0;
- }
- }
- @include breakpoint(tablet){
- float: none;
- margin: 0 0 15px;
- };
-}
-.content-container.modal-footer {
- bottom: 53px;
-}
-.shade {
- background: #000;
- bottom: 0;
- cursor: pointer;
- display: none;
- left: 0;
- opacity: 0.2;
- position: fixed;
- right: 0;
- top: 0;
- z-index: 11;
-}
-
-// ==========================================================================
-// Footer Navigation
-// ==========================================================================
-
-// NOTE: .download-jetpack is in _buttons.scss
-.footer {
- margin-top: em(20px);
- position: relative;
- padding: em(140px) 0 em(60px);
- text-align: center;
-
- &:before,
- &:after {
- content: '';
- position: absolute;
- left: 0;
- pointer-events: none;
- }
- &:before {
- top: 0;
- margin-top: -1px; // Removes subpixel gap on retina landscape
- width: 100%;
- height: 195px;
- }
- &:after {
- display: none;
- }
- .download-jetpack {
- margin-bottom: 33px;
- }
- @include minbreakpoint(large-desktop){
- padding-bottom: 35px;
- };
- @include breakpoint(large-desktop) {
- padding-top: 165px;
- padding-bottom: 0;
-
- &:before {
- background-size: 160% auto;
- }
- ul {
- float: none;
- overflow: hidden; // Clears the float
- }
- };
- @include breakpoint(desktop){
- padding-top: 146px;
- };
- @include breakpoint(tablet){
- margin-top: 0;
- };
- @include breakpoint(large-phone){
- margin-top: 0;
- padding-top: 135px;
- };
- @include breakpoint(phone){
- padding-top: 76px;
- };
-}
-.footer nav {
- max-width: 100%;
-
- a,
- a:visited {
- padding: 4px 6px;
- color: #999;
-
- &:hover,
- &:focus {
- color: #81A844;
- }
- }
- @include breakpoint(large-desktop){
- a,
- a:visited {
- &:hover,
- &:focus {
- color: $green;
- }
- }
- };
- @include breakpoint(large-phone){
- li {
- display: block;
- float: none;
- margin: 0;
- text-align: left;
- }
- a {
- display: block;
- padding: 0 16px;
- line-height: 44px;
- }
- };
-}
-.primary {
- padding: 25px 15px 10px 15px;
- border-bottom: 1px solid #eee;
-}
-.secondary-footer {
- margin: 0 auto;
-
- li {
- margin-right: 5px;
- }
- @include minbreakpoint(tablet){
- padding: 8px 15px 10px;
- margin-bottom: 30px;
- border-bottom: 1px solid #eee;
- };
- @include minbreakpoint(large-desktop){
- margin-bottom: 0;
- };
- @include breakpoint(tablet){
- padding: 8px 15px 8px;
- border-bottom: none;
- };
- @include breakpoint(large-phone){
- margin: 0;
- padding: 0;
- border: none;
- font-weight: 400;
-
- a {
- border-top: 1px solid #eee;
- }
- };
-}
-.footer .a8c-attribution {
- margin: 0;
- padding: 0 6px;
- color: #bbb;
- font-size: em(11px);
- font-family: $gill;
- text-transform: uppercase;
-
- a {
- // This may look janky, but if you highlight from
- // "AN" to "TEAM," copy and paste, you'll get the whole
- // "An AUTOMATTIC TEAM" phrase.
- display: inline-block;
- position: relative;
- padding: 4px 16px;
- right: 9999px;
- outline: 0;
-
- &:after {
- content: 'A';
- position: absolute;
- top: 2px;
- right: -9999px;
- height: 100%;
- color: #999;
- font-size: em(17px, 11px);
- font-family: $automatticons;
- text-align: center;
- }
- &:hover {
- &:after {
- animation: candy .4s ease-in-out;
- }
- }
- }
-}
-.secondary {
- @include minbreakpoint(tablet){
- padding: 0 15px 10px 15px;
- border-bottom: 1px solid #eee;
- }
- @include minbreakpoint(large-desktop){
- padding: 0 15px 10px 15px;
- border-bottom: none;
- }
-}
-
-
-// ==========================================================================
-// Messages & Errors
-// ==========================================================================
-
-.jetpack-message {
- background: lighten($green, 5%);
- border: 1px solid darken($green, 5%);
- margin: 33px auto 0;
- max-width: 90%;
- position: relative;
- z-index: 2;
-
- &.is-opt-in {
- margin: 50px 0 0;
- max-width: 100%;
- padding: 10px 15px;
- background: #fff;
- border: 0;
- box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
- font-size: 13px;
- text-align: center;
-
- // page=jetpack specific styling
- .subhead & {
- margin: 0;
- padding-bottom: 0;
- background: transparent;
- box-shadow: none;
-
- .jp-button {
- display: inline-block;
- }
- }
- p {
- color: #3c4549;
- }
- .jp-button {
- margin-top: 15px;
- display: none;
- }
- }
- .squeezer {
- h2 {
- font-size: 1em;
- }
- }
- h2 {
- color: #fff;
- margin: 0;
- }
- p {
- color: #fff;
- margin: 0;
- opacity: 0.7;
- }
- .squeezer {
- padding: 23px 23px 23px 80px;
- position: relative;
- text-align: left;
-
- &:before {
- color: #fff;
- content: '\f418';
- font-family: 'Genericons';
- font-size: 33px;
- height: 33px;
- left: 25px;
- opacity: 0.6;
- position: absolute;
- top: 23px;
- top: calc( 50% - 22px );
- }
- @include breakpoint(large-phone){
- padding: 23px;
-
- &:before {
- display: none;
- }
- }
- a {
- color:#FFF;
- border-bottom:1px solid #D5E4BD;
- } a:hover{
- border-bottom:1px solid #F1F6E9;
- }
- }
- &.error .squeezer:before,
- &.jetpack-err .squeezer:before {
- content: '\f414';
- }
-}
-
-.configure-module .jetpack-message {
- max-width:100%;
-}
-
-// ==========================================================================
-// Uncategorized
-// ==========================================================================
-
-@include breakpoint(large-phone){
- .wrap.inner.jp-support { // Used anywhere?
- .jp-support-column-left {
- width: 100%;
-
- .widget-text {
- margin-right: 0;
- width: 100%;
- }
- }
- .jp-support-column-right {
- width: 100%;
- }
- }
-};
-
-// ==========================================================================
-// Custom Breakpoints
-// ==========================================================================
-
-@media screen and (max-width: 515px) {
- .jp-frame {
- .header-nav {
- padding-bottom: 10px;
-
- li {
- line-height: 30px;
- }
- .jetpack-logo {
- width: 100%;
- text-align: center;
- }
- .jetpack-modules {
- margin: 0;
- width: 50%;
- text-align: right;
- padding: 0 5px;
- }
- .jetpack-modules + .jetpack-modules {
- text-align: left;
- }
- .jetpack-modules:nth-child(4) {
- text-align: center;
- margin: 0 auto;
- width: 100%;
- a {
- padding: 0 10px;
- }
- }
- }
- }
-} // max 515px
-
-// ==========================================================================
-// Fix notice in IE
-// ==========================================================================
-#ie-legacy-notice .dops-notice__content {
- display: inline-block;
- margin-left: 10px;
-}
diff --git a/plugins/jetpack/scss/templates/_settings.scss b/plugins/jetpack/scss/templates/_settings.scss
deleted file mode 100644
index dddf2cba..00000000
--- a/plugins/jetpack/scss/templates/_settings.scss
+++ /dev/null
@@ -1,373 +0,0 @@
-// ==========================================================================
-// Settings
-// ==========================================================================
-
-.page-content.configure {
- margin-top: 0;
-}
-
-.configure .frame {
-
- &.top {
- border: none;
- box-shadow: none;
- padding-top: em(20px);
- position: relative;
- top: auto;
-
- &.fixed {
- background: #f9f9f9;
- border-bottom: 1px solid #e9e9e9;
- padding-left: 160px;
- margin-top: -6px;
- position: fixed;
- right: 0;
- top: 32px;
- width: 100%;
- z-index: 4;
- box-shadow: 0 2px 2px -2px #eee;
-
- @media (max-width: 782px) {
- border: none;
- box-shadow: none;
- padding-top: em(20px);
- position: relative;
- top: auto;
- }
- @media (max-width: 600px) {
- top: 0;
- }
- }
- }
-}
-
-.jp-frame-top-fixed .configure {
- padding-top: 94px;
-}
-
-.filter-search {
- display: none;
- float: right;
- margin-top: 10px;
- @media (max-width: 782px) {
- display: block;
- }
- @media (max-width: 530px) {
- display: none;
- }
-}
-
-.table-bordered.jetpack-modules {
- border: none;
- margin-bottom: 0;
- tr.jetpack-module {
-
- th {
- border-left: 0;
- padding: 14px 4px 0;
- input {
- display: block;
- }
- }
- &:hover {
- .genericon {
- display: inline-block;
- }
- }
- &.active {
- th,
- td {
- background: #f7fcfe;
- }
- th {
- border-left: 4px solid #2ea2cc;
- padding-left: 0px;
- }
- td {
- &:first-child {
- border-left: 4px solid #2ea2cc;
- }
- }
- }
- &.unavailable {
- input {
- display: none;
- }
- }
- &.deprecated {
- span {
- color: #888;
- }
- .dep-msg {
- margin-right: 10px;
- color: #555;
- }
- }
- th,
- td {
- background: #fff;
- margin: 0;
- -webkit-box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
- box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
-
- }
- td {
- padding: 10px 10px 8px 14px;
- line-height: 25px;
-
- &:first-child {
- border-left: 4px solid #fff;
- }
- .row-actions {
- float: right;
- padding: 0 0 1px;
- visibility: visible;
-
- span {
- margin-left: 5px;
- }
-
- @media (max-width: 530px) {
- display: none;
- }
- @include breakpoint(tablet){
- display: block;
- padding-left: 10px;
- visibility: visible;
- };
-
- }
- }
- }
- &.with-transparency tr.jetpack-module {
-
- &:hover {
- td .row-actions span a {
- opacity: 1;
- }
- }
- &.unavailable {
- opacity: 0.3;
- }
- td .row-actions span a {
- opacity: 0;
- &:focus {
- opacity: 1;
- }
- }
- }
- &>thead>tr>th {
- border: 0;
- vertical-align: middle;
-
- &:last-child {
- padding-right: 0;
-
- @include breakpoint(tablet){
- padding-left: 0;
- }
- }
- }
- td {
- background: #fff;
- }
- #doaction {
- margin-top: 0;
-
- @media (max-width: 782px) {
- padding: 10px 7px;
- }
- }
- .checkall {
- margin-top: 1px;
- }
- .filter-search {
- margin-top: 8px;
- }
- .genericon {
- color: #999;
- display: none;
- margin: 7px 3px 0;
-
- @include breakpoint(desktop){
- display: inline-block;
- };
- }
- .med {
- width: 70px;
- }
- .sm {
- width: 30px;
- }
- @media (max-width: 782px) {
- .check-column {
- width: 50px;
- }
- }
-}
-.fixed-top .check-column {
- padding: 8px 10px 0 10px;
- width: 2.2em;
-}
-.wrap {
- margin: 0;
- padding: 0 1.5em 1em;
- overflow: hidden;
-
- h2 {
- font-size: 24px;
- font-weight: 400;
- }
- .manage-left {
- float: left;
- margin: 0;
- padding: 0;
- width: 63%;
-
- table {
- width: 100%;
- }
- th {
- font-weight: 400;
- }
-
- @media (max-width: 782px) {
- width: 100%;
- }
- }
- .manage-right {
- margin: 0;
- padding: 0;
- float: right;
- width: 35%;
- z-index: 1;
-
- p {
- font-size: 12px;
- font-weight: bold;
- color: #bbb;
- padding-top: 2px;
- text-transform: uppercase;
- letter-spacing: 1px;
- clear: left;
- }
- .bumper {
- margin-left: 33px;
- }
- &.show {
- display: block;
- overflow-y: auto;
- overflow-x: hidden;
- position: absolute;
- z-index: 100000; // sits on top of wp-admin bar
- }
- .search-bar {
- margin-bottom: 18px;
- max-width: 300px;
- }
- p.search-box {
- float: none;
- height: auto;
- margin-bottom: 0;
- position: relative;
-
- input[type='search'] {
- padding: 0 8px;
- width: 90%;
- line-height: initial;
-
- @media (max-width: 782px) {
- float: left;
- padding: 9px 8px;
- }
- }
- input[type="submit"] {
- display: none;
- }
- }
- .button-group {
- .button {
- outline: none;
- }
- }
- .subsubsub {
- margin: 0;
- padding: 0;
-
- a {
- padding: 0;
- line-height: inherit;
- }
- .current{
- padding:1px 5px;
- border-radius:2px;
- margin-left:-5px;
- background: #0D72B2;
- color: #fff;
-
- .count{
- color: #BCD7E7;
- font-weight:200;
- }
- }
-
- li {
- display: block;
- text-align: left;
- }
- }
-
- @media (max-width: 782px) {
- background: #fff;
- bottom: 0;
- display: none;
- min-width: 300px;
- position: fixed;
- right: 0;
- top: 0;
- z-index: 13;
- box-shadow: 0 1px 20px 5px rgba(0, 0, 0, 0.1);
-
- .bumper {
- margin: 13px;
- }
- .navbar-form {
- margin: 0;
- padding: 0;
- }
- } // < 782
- }
-}
-
-@media (max-width: 782px) {
-
- // Fix to override particular wp-list-table changes in core - July 2015
- .wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.column-primary):not(.check-column) {
- padding: 11px 10px;
- display: block;
- }
- .manage-right.show .subsubsub li {
- padding: 5px;
- }
-
-} // < 782
-
-@media (max-width: 650px) {
-
- .table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions {
- float: none;
- padding-left: 18px;
- }
-}
-
-@media (max-width: 430px) {
-
- // Hide activate / config links on really small screens. Users can still utlize these actions by tapping on the title of the module
- .table-bordered.jetpack-modules tr.jetpack-module td .row-actions {
- display: none;
- }
-
- .table-bordered.jetpack-modules tr.jetpack-module.deprecated td .row-actions {
- display: block;
- }
-} // < 430
diff --git a/plugins/jetpack/sync/class.jetpack-sync-actions.php b/plugins/jetpack/sync/class.jetpack-sync-actions.php
deleted file mode 100644
index b3fb39ab..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-actions.php
+++ /dev/null
@@ -1,470 +0,0 @@
-<?php
-
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-modules.php';
-
-/**
- * The role of this class is to hook the Sync subsystem into WordPress - when to listen for actions,
- * when to send, when to perform a full sync, etc.
- *
- * It also binds the action to send data to WPCOM to Jetpack's XMLRPC client object.
- */
-class Jetpack_Sync_Actions {
- static $sender = null;
- static $listener = null;
- const DEFAULT_SYNC_CRON_INTERVAL_NAME = 'jetpack_sync_interval';
- const DEFAULT_SYNC_CRON_INTERVAL_VALUE = 300; // 5 * MINUTE_IN_SECONDS;
-
- static function init() {
-
- // everything below this point should only happen if we're a valid sync site
- if ( ! self::sync_allowed() ) {
- return;
- }
-
- if ( self::sync_via_cron_allowed() ) {
- self::init_sync_cron_jobs();
- } elseif ( wp_next_scheduled( 'jetpack_sync_cron' ) ) {
- self::clear_sync_cron_jobs();
- }
- // When importing via cron, do not sync
- add_action( 'wp_cron_importer_hook', array( __CLASS__, 'set_is_importing_true' ), 1 );
-
- // Sync connected user role changes to .com
- require_once dirname( __FILE__ ) . '/class.jetpack-sync-users.php';
-
- // publicize filter to prevent publicizing blacklisted post types
- add_filter( 'publicize_should_publicize_published_post', array( __CLASS__, 'prevent_publicize_blacklisted_posts' ), 10, 2 );
-
- /**
- * Fires on every request before default loading sync listener code.
- * Return false to not load sync listener code that monitors common
- * WP actions to be serialized.
- *
- * By default this returns true for cron jobs, non-GET-requests, or requests where the
- * user is logged-in.
- *
- * @since 4.2.0
- *
- * @param bool should we load sync listener code for this request
- */
- if ( apply_filters( 'jetpack_sync_listener_should_load', true ) ) {
- self::initialize_listener();
- }
-
- add_action( 'init', array( __CLASS__, 'add_sender_shutdown' ), 90 );
- }
-
- static function add_sender_shutdown() {
- /**
- * Fires on every request before default loading sync sender code.
- * Return false to not load sync sender code that serializes pending
- * data and sends it to WPCOM for processing.
- *
- * By default this returns true for cron jobs, POST requests, admin requests, or requests
- * by users who can manage_options.
- *
- * @since 4.2.0
- *
- * @param bool should we load sync sender code for this request
- */
- if ( apply_filters(
- 'jetpack_sync_sender_should_load',
- (
- ( isset( $_SERVER['REQUEST_METHOD'] ) && 'POST' === $_SERVER['REQUEST_METHOD'] )
- ||
- current_user_can( 'manage_options' )
- ||
- is_admin()
- ||
- defined( 'PHPUNIT_JETPACK_TESTSUITE' )
- )
- ) ) {
- self::initialize_sender();
- add_action( 'shutdown', array( self::$sender, 'do_sync' ) );
- add_action( 'shutdown', array( self::$sender, 'do_full_sync' ) );
- }
- }
-
- static function sync_allowed() {
- require_once dirname( __FILE__ ) . '/class.jetpack-sync-settings.php';
- return ( ! Jetpack_Sync_Settings::get_setting( 'disable' )
- && ( doing_action( 'jetpack_user_authorized' ) || Jetpack::is_active() )
- && ! ( Jetpack::is_development_mode() || Jetpack::is_staging_site() ) )
- || defined( 'PHPUNIT_JETPACK_TESTSUITE' );
- }
-
- static function sync_via_cron_allowed() {
- require_once dirname( __FILE__ ) . '/class.jetpack-sync-settings.php';
- return ( Jetpack_Sync_Settings::get_setting( 'sync_via_cron' ) );
- }
-
- static function prevent_publicize_blacklisted_posts( $should_publicize, $post ) {
- require_once dirname( __FILE__ ) . '/class.jetpack-sync-settings.php';
- if ( in_array( $post->post_type, Jetpack_Sync_Settings::get_setting( 'post_types_blacklist' ) ) ) {
- return false;
- }
-
- return $should_publicize;
- }
-
- static function set_is_importing_true() {
- require_once dirname( __FILE__ ) . '/class.jetpack-sync-settings.php';
- Jetpack_Sync_Settings::set_importing( true );
- }
-
- static function send_data( $data, $codec_name, $sent_timestamp, $queue_id, $checkout_duration, $preprocess_duration ) {
- require_once dirname( __FILE__ ) . '/class.jetpack-sync-functions.php';
- Jetpack::load_xml_rpc_client();
-
- $query_args = array(
- 'sync' => '1', // add an extra parameter to the URL so we can tell it's a sync action
- 'codec' => $codec_name, // send the name of the codec used to encode the data
- 'timestamp' => $sent_timestamp, // send current server time so we can compensate for clock differences
- 'queue' => $queue_id, // sync or full_sync
- 'home' => Jetpack_Sync_Functions::home_url(), // Send home url option to check for Identity Crisis server-side
- 'siteurl' => Jetpack_Sync_Functions::site_url(), // Send siteurl option to check for Identity Crisis server-side
- 'cd' => sprintf( '%.4f', $checkout_duration ), // Time spent retrieving queue items from the DB
- 'pd' => sprintf( '%.4f', $preprocess_duration ), // Time spent converting queue items into data to send
- );
-
- // Has the site opted in to IDC mitigation?
- if ( Jetpack::sync_idc_optin() ) {
- $query_args['idc'] = true;
- }
-
- if ( Jetpack_Options::get_option( 'migrate_for_idc', false ) ) {
- $query_args['migrate_for_idc'] = true;
- }
-
- $query_args['timeout'] = Jetpack_Sync_Settings::is_doing_cron() ? 30 : 15;
-
- /**
- * Filters query parameters appended to the Sync request URL sent to WordPress.com.
- *
- * @since 4.7.0
- *
- * @param array $query_args associative array of query parameters.
- */
- $query_args = apply_filters( 'jetpack_sync_send_data_query_args', $query_args );
-
- $url = add_query_arg( $query_args, Jetpack::xmlrpc_api_url() );
-
- $rpc = new Jetpack_IXR_Client(
- array(
- 'url' => $url,
- 'user_id' => JETPACK_MASTER_USER,
- 'timeout' => $query_args['timeout'],
- )
- );
-
- $result = $rpc->query( 'jetpack.syncActions', $data );
-
- if ( ! $result ) {
- return $rpc->get_jetpack_error();
- }
-
- $response = $rpc->getResponse();
-
- // Check if WordPress.com IDC mitigation blocked the sync request
- if ( is_array( $response ) && isset( $response['error_code'] ) ) {
- $error_code = $response['error_code'];
- $allowed_idc_error_codes = array(
- 'jetpack_url_mismatch',
- 'jetpack_home_url_mismatch',
- 'jetpack_site_url_mismatch',
- );
-
- if ( in_array( $error_code, $allowed_idc_error_codes ) ) {
- Jetpack_Options::update_option(
- 'sync_error_idc',
- Jetpack::get_sync_error_idc_option( $response )
- );
- }
-
- return new WP_Error(
- 'sync_error_idc',
- esc_html__( 'Sync has been blocked from WordPress.com because it would cause an identity crisis', 'jetpack' )
- );
- }
-
- return $response;
- }
-
- static function do_initial_sync() {
- // Lets not sync if we are not suppose to.
- if ( ! self::sync_allowed() ) {
- return false;
- }
-
- $initial_sync_config = array(
- 'options' => true,
- 'functions' => true,
- 'constants' => true,
- 'users' => array( get_current_user_id() ),
- );
-
- if ( is_multisite() ) {
- $initial_sync_config['network_options'] = true;
- }
-
- self::do_full_sync( $initial_sync_config );
- }
-
- static function do_full_sync( $modules = null ) {
- if ( ! self::sync_allowed() ) {
- return false;
- }
-
- $full_sync_module = Jetpack_Sync_Modules::get_module( 'full-sync' );
-
- if ( ! $full_sync_module ) {
- return false;
- }
-
- self::initialize_listener();
-
- $full_sync_module->start( $modules );
-
- return true;
- }
-
- static function jetpack_cron_schedule( $schedules ) {
- if ( ! isset( $schedules[ self::DEFAULT_SYNC_CRON_INTERVAL_NAME ] ) ) {
- $schedules[ self::DEFAULT_SYNC_CRON_INTERVAL_NAME ] = array(
- 'interval' => self::DEFAULT_SYNC_CRON_INTERVAL_VALUE,
- 'display' => sprintf(
- esc_html( _n( 'Every minute', 'Every %d minutes', intval( self::DEFAULT_SYNC_CRON_INTERVAL_VALUE / 60 ), 'jetpack' ) ),
- intval( self::DEFAULT_SYNC_CRON_INTERVAL_VALUE / 60 )
- ),
- );
- }
- return $schedules;
- }
-
- static function do_cron_sync() {
- self::do_cron_sync_by_type( 'sync' );
- }
-
- static function do_cron_full_sync() {
- self::do_cron_sync_by_type( 'full_sync' );
- }
-
- /**
- * Try to send actions until we run out of things to send,
- * or have to wait more than 15s before sending again,
- * or we hit a lock or some other sending issue
- *
- * @param string $type Sync type. Can be `sync` or `full_sync`.
- */
- static function do_cron_sync_by_type( $type ) {
- if ( ! self::sync_allowed() || ( 'sync' !== $type && 'full_sync' !== $type ) ) {
- return;
- }
-
- self::initialize_sender();
-
- $time_limit = Jetpack_Sync_Settings::get_setting( 'cron_sync_time_limit' );
- $start_time = time();
-
- do {
- $next_sync_time = self::$sender->get_next_sync_time( $type );
-
- if ( $next_sync_time ) {
- $delay = $next_sync_time - time() + 1;
- if ( $delay > 15 ) {
- break;
- } elseif ( $delay > 0 ) {
- sleep( $delay );
- }
- }
-
- $result = 'full_sync' === $type ? self::$sender->do_full_sync() : self::$sender->do_sync();
- } while ( $result && ! is_wp_error( $result ) && ( $start_time + $time_limit ) > time() );
- }
-
- static function initialize_listener() {
- require_once dirname( __FILE__ ) . '/class.jetpack-sync-listener.php';
- self::$listener = Jetpack_Sync_Listener::get_instance();
- }
-
- static function initialize_sender() {
- require_once dirname( __FILE__ ) . '/class.jetpack-sync-sender.php';
- self::$sender = Jetpack_Sync_Sender::get_instance();
-
- // bind the sending process
- add_filter( 'jetpack_sync_send_data', array( __CLASS__, 'send_data' ), 10, 6 );
- }
-
- static function initialize_woocommerce() {
- if ( false === class_exists( 'WooCommerce' ) ) {
- return;
- }
- add_filter( 'jetpack_sync_modules', array( 'Jetpack_Sync_Actions', 'add_woocommerce_sync_module' ) );
- }
-
- static function add_woocommerce_sync_module( $sync_modules ) {
- require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-woocommerce.php';
- $sync_modules[] = 'Jetpack_Sync_Module_WooCommerce';
- return $sync_modules;
- }
-
- static function initialize_wp_super_cache() {
- if ( false === function_exists( 'wp_cache_is_enabled' ) ) {
- return;
- }
- add_filter( 'jetpack_sync_modules', array( 'Jetpack_Sync_Actions', 'add_wp_super_cache_sync_module' ) );
- }
-
- static function add_wp_super_cache_sync_module( $sync_modules ) {
- require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-wp-super-cache.php';
- $sync_modules[] = 'Jetpack_Sync_Module_WP_Super_Cache';
- return $sync_modules;
- }
-
- static function sanitize_filtered_sync_cron_schedule( $schedule ) {
- $schedule = sanitize_key( $schedule );
- $schedules = wp_get_schedules();
-
- // Make sure that the schedule has actually been registered using the `cron_intervals` filter.
- if ( isset( $schedules[ $schedule ] ) ) {
- return $schedule;
- }
-
- return self::DEFAULT_SYNC_CRON_INTERVAL_NAME;
- }
-
- static function get_start_time_offset( $schedule = '', $hook = '' ) {
- $start_time_offset = is_multisite()
- ? mt_rand( 0, ( 2 * self::DEFAULT_SYNC_CRON_INTERVAL_VALUE ) )
- : 0;
-
- /**
- * Allows overriding the offset that the sync cron jobs will first run. This can be useful when scheduling
- * cron jobs across multiple sites in a network.
- *
- * @since 4.5.0
- *
- * @param int $start_time_offset
- * @param string $hook
- * @param string $schedule
- */
- return intval(
- apply_filters(
- 'jetpack_sync_cron_start_time_offset',
- $start_time_offset,
- $hook,
- $schedule
- )
- );
- }
-
- static function maybe_schedule_sync_cron( $schedule, $hook ) {
- if ( ! $hook ) {
- return;
- }
- $schedule = self::sanitize_filtered_sync_cron_schedule( $schedule );
-
- $start_time = time() + self::get_start_time_offset( $schedule, $hook );
- if ( ! wp_next_scheduled( $hook ) ) {
- // Schedule a job to send pending queue items once a minute
- wp_schedule_event( $start_time, $schedule, $hook );
- } elseif ( $schedule != wp_get_schedule( $hook ) ) {
- // If the schedule has changed, update the schedule
- wp_clear_scheduled_hook( $hook );
- wp_schedule_event( $start_time, $schedule, $hook );
- }
- }
-
- static function clear_sync_cron_jobs() {
- wp_clear_scheduled_hook( 'jetpack_sync_cron' );
- wp_clear_scheduled_hook( 'jetpack_sync_full_cron' );
- }
-
- static function init_sync_cron_jobs() {
- add_filter( 'cron_schedules', array( __CLASS__, 'jetpack_cron_schedule' ) );
-
- add_action( 'jetpack_sync_cron', array( __CLASS__, 'do_cron_sync' ) );
- add_action( 'jetpack_sync_full_cron', array( __CLASS__, 'do_cron_full_sync' ) );
-
- /**
- * Allows overriding of the default incremental sync cron schedule which defaults to once every 5 minutes.
- *
- * @since 4.3.2
- *
- * @param string self::DEFAULT_SYNC_CRON_INTERVAL_NAME
- */
- $incremental_sync_cron_schedule = apply_filters( 'jetpack_sync_incremental_sync_interval', self::DEFAULT_SYNC_CRON_INTERVAL_NAME );
- self::maybe_schedule_sync_cron( $incremental_sync_cron_schedule, 'jetpack_sync_cron' );
-
- /**
- * Allows overriding of the full sync cron schedule which defaults to once every 5 minutes.
- *
- * @since 4.3.2
- *
- * @param string self::DEFAULT_SYNC_CRON_INTERVAL_NAME
- */
- $full_sync_cron_schedule = apply_filters( 'jetpack_sync_full_sync_interval', self::DEFAULT_SYNC_CRON_INTERVAL_NAME );
- self::maybe_schedule_sync_cron( $full_sync_cron_schedule, 'jetpack_sync_full_cron' );
- }
-
- static function cleanup_on_upgrade( $new_version = null, $old_version = null ) {
- if ( wp_next_scheduled( 'jetpack_sync_send_db_checksum' ) ) {
- wp_clear_scheduled_hook( 'jetpack_sync_send_db_checksum' );
- }
-
- $is_new_sync_upgrade = version_compare( $old_version, '4.2', '>=' );
- if ( ! empty( $old_version ) && $is_new_sync_upgrade && version_compare( $old_version, '4.5', '<' ) ) {
- require_once dirname( __FILE__ ) . '/class.jetpack-sync-settings.php';
- self::clear_sync_cron_jobs();
- Jetpack_Sync_Settings::update_settings(
- array(
- 'render_filtered_content' => Jetpack_Sync_Defaults::$default_render_filtered_content,
- )
- );
- }
- }
-
- static function get_sync_status() {
- self::initialize_sender();
-
- $sync_module = Jetpack_Sync_Modules::get_module( 'full-sync' );
- $queue = self::$sender->get_sync_queue();
- $full_queue = self::$sender->get_full_sync_queue();
- $cron_timestamps = array_keys( _get_cron_array() );
- $next_cron = $cron_timestamps[0] - time();
-
- $full_sync_status = ( $sync_module ) ? $sync_module->get_status() : array();
- return array_merge(
- $full_sync_status,
- array(
- 'cron_size' => count( $cron_timestamps ),
- 'next_cron' => $next_cron,
- 'queue_size' => $queue->size(),
- 'queue_lag' => $queue->lag(),
- 'queue_next_sync' => ( self::$sender->get_next_sync_time( 'sync' ) - microtime( true ) ),
- 'full_queue_size' => $full_queue->size(),
- 'full_queue_lag' => $full_queue->lag(),
- 'full_queue_next_sync' => ( self::$sender->get_next_sync_time( 'full_sync' ) - microtime( true ) ),
- )
- );
- }
-}
-
-// Check for WooCommerce support
-add_action( 'plugins_loaded', array( 'Jetpack_Sync_Actions', 'initialize_woocommerce' ), 5 );
-
-// Check for WP Super Cache
-add_action( 'plugins_loaded', array( 'Jetpack_Sync_Actions', 'initialize_wp_super_cache' ), 5 );
-
-/*
- * Init after plugins loaded and before the `init` action. This helps with issues where plugins init
- * with a high priority or sites that use alternate cron.
- */
-add_action( 'plugins_loaded', array( 'Jetpack_Sync_Actions', 'init' ), 90 );
-
-
-
-// We need to define this here so that it's hooked before `updating_jetpack_version` is called
-add_action( 'updating_jetpack_version', array( 'Jetpack_Sync_Actions', 'cleanup_on_upgrade' ), 10, 2 );
-add_action( 'jetpack_user_authorized', array( 'Jetpack_Sync_Actions', 'do_initial_sync' ), 10, 0 );
-
diff --git a/plugins/jetpack/sync/class.jetpack-sync-defaults.php b/plugins/jetpack/sync/class.jetpack-sync-defaults.php
deleted file mode 100644
index 1452bd7e..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-defaults.php
+++ /dev/null
@@ -1,589 +0,0 @@
-<?php
-require_once JETPACK__PLUGIN_DIR . 'modules/sso/class.jetpack-sso-helpers.php';
-
-/**
- * Just some defaults that we share with the server
- */
-class Jetpack_Sync_Defaults {
-
- static $default_options_whitelist = array(
- 'stylesheet',
- 'blogname',
- 'blogdescription',
- 'blog_charset',
- 'permalink_structure',
- 'category_base',
- 'tag_base',
- 'sidebars_widgets',
- 'comment_moderation',
- 'default_comment_status',
- 'page_on_front',
- 'rss_use_excerpt',
- 'subscription_options',
- 'stb_enabled',
- 'stc_enabled',
- 'comment_registration',
- 'show_avatars',
- 'avatar_default',
- 'avatar_rating',
- 'highlander_comment_form_prompt',
- 'jetpack_comment_form_color_scheme',
- 'stats_options',
- 'gmt_offset',
- 'timezone_string',
- 'jetpack_sync_non_public_post_stati',
- 'jetpack_options',
- 'site_icon', // (int) - ID of core's Site Icon attachment ID
- 'default_post_format',
- 'default_category',
- 'large_size_w',
- 'large_size_h',
- 'thumbnail_size_w',
- 'thumbnail_size_h',
- 'medium_size_w',
- 'medium_size_h',
- 'thumbnail_crop',
- 'image_default_link_type',
- 'site_logo',
- 'sharing-options',
- 'sharing-services',
- 'post_count',
- 'default_ping_status',
- 'sticky_posts',
- 'blog_public',
- 'default_pingback_flag',
- 'require_name_email',
- 'close_comments_for_old_posts',
- 'close_comments_days_old',
- 'thread_comments',
- 'thread_comments_depth',
- 'page_comments',
- 'comments_per_page',
- 'default_comments_page',
- 'comment_order',
- 'comments_notify',
- 'moderation_notify',
- 'social_notifications_like',
- 'social_notifications_reblog',
- 'social_notifications_subscribe',
- 'comment_whitelist',
- 'comment_max_links',
- 'moderation_keys',
- 'jetpack_wga',
- 'disabled_likes',
- 'disabled_reblogs',
- 'jetpack_comment_likes_enabled',
- 'twitter_via',
- 'jetpack-twitter-cards-site-tag',
- 'wpcom_publish_posts_with_markdown',
- 'wpcom_publish_comments_with_markdown',
- 'jetpack_activated',
- 'jetpack_available_modules',
- 'jetpack_autoupdate_plugins',
- 'jetpack_autoupdate_plugins_translations',
- 'jetpack_autoupdate_themes',
- 'jetpack_autoupdate_themes_translations',
- 'jetpack_autoupdate_core',
- 'jetpack_autoupdate_translations',
- 'carousel_background_color',
- 'carousel_display_exif',
- 'jetpack_portfolio',
- 'jetpack_portfolio_posts_per_page',
- 'jetpack_testimonial',
- 'jetpack_testimonial_posts_per_page',
- 'tiled_galleries',
- 'gravatar_disable_hovercards',
- 'infinite_scroll',
- 'infinite_scroll_google_analytics',
- 'wp_mobile_excerpt',
- 'wp_mobile_featured_images',
- 'wp_mobile_app_promos',
- 'monitor_receive_notifications',
- 'post_by_email_address',
- 'jetpack_mailchimp',
- 'jetpack_protect_key',
- 'jetpack_protect_global_whitelist',
- 'jetpack_sso_require_two_step',
- 'jetpack_sso_match_by_email',
- 'jetpack_relatedposts',
- 'verification_services_codes',
- 'users_can_register',
- 'active_plugins',
- 'uninstall_plugins',
- 'advanced_seo_front_page_description', // Jetpack_SEO_Utils::FRONT_PAGE_META_OPTION
- 'advanced_seo_title_formats', // Jetpack_SEO_Titles::TITLE_FORMATS_OPTION
- 'jetpack_api_cache_enabled',
- 'start_of_week',
- 'blacklist_keys',
- 'posts_per_page',
- 'posts_per_rss',
- 'show_on_front',
- 'ping_sites',
- 'uploads_use_yearmonth_folders',
- 'date_format',
- 'time_format',
- 'admin_email',
- 'new_admin_email',
- 'default_email_category',
- 'default_role',
- 'page_for_posts',
- 'mailserver_url',
- 'mailserver_login', // Not syncing contents, only the option name
- 'mailserver_pass', // Not syncing contents, only the option name
- 'mailserver_port',
- 'wp_page_for_privacy_policy',
- 'enable_header_ad',
- 'wordads_second_belowpost',
- 'wordads_display_front_page',
- 'wordads_display_post',
- 'wordads_display_page',
- 'wordads_display_archive',
- 'wordads_custom_adstxt',
- 'site_segment',
- 'site_user_type',
- 'site_vertical',
- );
-
- public static function get_options_whitelist() {
- /** This filter is already documented in json-endpoints/jetpack/class.wpcom-json-api-get-option-endpoint.php */
- $options_whitelist = apply_filters( 'jetpack_options_whitelist', self::$default_options_whitelist );
- /**
- * Filter the list of WordPress options that are manageable via the JSON API.
- *
- * @module sync
- *
- * @since 4.8.0
- *
- * @param array The default list of options.
- */
- return apply_filters( 'jetpack_sync_options_whitelist', $options_whitelist );
- }
-
- // Do not sync contents for these events, only the option name
- static $default_options_contentless = array(
- 'mailserver_login',
- 'mailserver_pass',
- );
-
- public static function get_options_contentless() {
- /**
- * Filter the list of WordPress options that should be synced without content
- *
- * @module sync
- *
- * @since 6.1.0
- *
- * @param array The list of options synced without content.
- */
- return apply_filters( 'jetpack_sync_options_contentless', self::$default_options_contentless );
- }
-
- static $default_constants_whitelist = array(
- 'EMPTY_TRASH_DAYS',
- 'WP_POST_REVISIONS',
- 'AUTOMATIC_UPDATER_DISABLED',
- 'ABSPATH',
- 'WP_CONTENT_DIR',
- 'FS_METHOD',
- 'DISALLOW_FILE_EDIT',
- 'DISALLOW_FILE_MODS',
- 'WP_AUTO_UPDATE_CORE',
- 'WP_HTTP_BLOCK_EXTERNAL',
- 'WP_ACCESSIBLE_HOSTS',
- 'JETPACK__VERSION',
- 'IS_PRESSABLE',
- 'DISABLE_WP_CRON',
- 'ALTERNATE_WP_CRON',
- 'WP_CRON_LOCK_TIMEOUT',
- 'PHP_VERSION',
- 'WP_MEMORY_LIMIT',
- 'WP_MAX_MEMORY_LIMIT',
- );
-
- public static function get_constants_whitelist() {
- /**
- * Filter the list of PHP constants that are manageable via the JSON API.
- *
- * @module sync
- *
- * @since 4.8.0
- *
- * @param array The default list of constants options.
- */
- return apply_filters( 'jetpack_sync_constants_whitelist', self::$default_constants_whitelist );
- }
-
- static $default_callable_whitelist = array(
- 'wp_max_upload_size' => 'wp_max_upload_size',
- 'is_main_network' => array( 'Jetpack', 'is_multi_network' ),
- 'is_multi_site' => 'is_multisite',
- 'main_network_site' => array( 'Jetpack_Sync_Functions', 'main_network_site_url' ),
- 'site_url' => array( 'Jetpack_Sync_Functions', 'site_url' ),
- 'home_url' => array( 'Jetpack_Sync_Functions', 'home_url' ),
- 'single_user_site' => array( 'Jetpack', 'is_single_user_site' ),
- 'updates' => array( 'Jetpack', 'get_updates' ),
- 'has_file_system_write_access' => array( 'Jetpack_Sync_Functions', 'file_system_write_access' ),
- 'is_version_controlled' => array( 'Jetpack_Sync_Functions', 'is_version_controlled' ),
- 'taxonomies' => array( 'Jetpack_Sync_Functions', 'get_taxonomies' ),
- 'post_types' => array( 'Jetpack_Sync_Functions', 'get_post_types' ),
- 'post_type_features' => array( 'Jetpack_Sync_Functions', 'get_post_type_features' ),
- 'shortcodes' => array( 'Jetpack_Sync_Functions', 'get_shortcodes' ),
- 'rest_api_allowed_post_types' => array( 'Jetpack_Sync_Functions', 'rest_api_allowed_post_types' ),
- 'rest_api_allowed_public_metadata' => array( 'Jetpack_Sync_Functions', 'rest_api_allowed_public_metadata' ),
- 'sso_is_two_step_required' => array( 'Jetpack_SSO_Helpers', 'is_two_step_required' ),
- 'sso_should_hide_login_form' => array( 'Jetpack_SSO_Helpers', 'should_hide_login_form' ),
- 'sso_match_by_email' => array( 'Jetpack_SSO_Helpers', 'match_by_email' ),
- 'sso_new_user_override' => array( 'Jetpack_SSO_Helpers', 'new_user_override' ),
- 'sso_bypass_default_login_form' => array( 'Jetpack_SSO_Helpers', 'bypass_login_forward_wpcom' ),
- 'wp_version' => array( 'Jetpack_Sync_Functions', 'wp_version' ),
- 'get_plugins' => array( 'Jetpack_Sync_Functions', 'get_plugins' ),
- 'get_plugins_action_links' => array( 'Jetpack_Sync_functions', 'get_plugins_action_links' ),
- 'active_modules' => array( 'Jetpack', 'get_active_modules' ),
- 'hosting_provider' => array( 'Jetpack_Sync_Functions', 'get_hosting_provider' ),
- 'locale' => 'get_locale',
- 'site_icon_url' => array( 'Jetpack_Sync_Functions', 'site_icon_url' ),
- 'roles' => array( 'Jetpack_Sync_Functions', 'roles' ),
- 'timezone' => array( 'Jetpack_Sync_Functions', 'get_timezone' ),
- 'available_jetpack_blocks' => array( 'Jetpack_Gutenberg', 'get_availability' ), // Includes both Gutenberg blocks *and* plugins
- 'paused_themes' => array( 'Jetpack_Sync_Functions', 'get_paused_themes' ),
- 'paused_plugins' => array( 'Jetpack_Sync_Functions', 'get_paused_plugins' ),
- );
-
-
- static $default_post_type_attributes = array(
- 'name' => '',
- 'label' => '',
- 'labels' => array(),
- 'description' => '',
- 'public' => false,
- 'hierarchical' => false,
- 'exclude_from_search' => true,
- 'publicly_queryable' => null,
- 'show_ui' => false,
- 'show_in_menu' => null,
- 'show_in_nav_menus' => null,
- 'show_in_admin_bar' => false,
- 'menu_position' => null,
- 'menu_icon' => null,
- 'supports' => array(),
- 'capability_type' => 'post',
- 'capabilities' => array(),
- 'cap' => array(),
- 'map_meta_cap' => true,
- 'taxonomies' => array(),
- 'has_archive' => false,
- 'rewrite' => true,
- 'query_var' => true,
- 'can_export' => true,
- 'delete_with_user' => null,
- 'show_in_rest' => false,
- 'rest_base' => false,
- '_builtin' => false,
- '_edit_link' => 'post.php?post=%d',
- );
-
- public static function get_callable_whitelist() {
- /**
- * Filter the list of callables that are manageable via the JSON API.
- *
- * @module sync
- *
- * @since 4.8.0
- *
- * @param array The default list of callables.
- */
- return apply_filters( 'jetpack_sync_callable_whitelist', self::$default_callable_whitelist );
- }
-
- static $blacklisted_post_types = array(
- 'ai1ec_event',
- 'bwg_album',
- 'bwg_gallery',
- 'customize_changeset', // WP built-in post type for Customizer changesets
- 'dn_wp_yt_log',
- 'http',
- 'idx_page',
- 'jetpack_migration',
- 'postman_sent_mail',
- 'rssap-feed',
- 'rssmi_feed_item',
- 'secupress_log_action',
- 'sg_optimizer_jobs',
- 'snitch',
- 'wpephpcompat_jobs',
- 'wprss_feed_item',
- 'wp_automatic',
- 'jp_sitemap_master',
- 'jp_sitemap',
- 'jp_sitemap_index',
- 'jp_img_sitemap',
- 'jp_img_sitemap_index',
- 'jp_vid_sitemap',
- 'jp_vid_sitemap_index',
- 'vip-legacy-redirect',
- );
-
- static $default_post_checksum_columns = array(
- 'ID',
- 'post_modified',
- );
-
- static $default_post_meta_checksum_columns = array(
- 'meta_id',
- 'meta_value',
- );
-
- static $default_comment_checksum_columns = array(
- 'comment_ID',
- 'comment_content',
- );
-
- static $default_comment_meta_checksum_columns = array(
- 'meta_id',
- 'meta_value',
- );
-
- static $default_option_checksum_columns = array(
- 'option_name',
- 'option_value',
- );
-
- static $default_multisite_callable_whitelist = array(
- 'network_name' => array( 'Jetpack', 'network_name' ),
- 'network_allow_new_registrations' => array( 'Jetpack', 'network_allow_new_registrations' ),
- 'network_add_new_users' => array( 'Jetpack', 'network_add_new_users' ),
- 'network_site_upload_space' => array( 'Jetpack', 'network_site_upload_space' ),
- 'network_upload_file_types' => array( 'Jetpack', 'network_upload_file_types' ),
- 'network_enable_administration_menus' => array( 'Jetpack', 'network_enable_administration_menus' ),
- );
-
- public static function get_multisite_callable_whitelist() {
- /**
- * Filter the list of multisite callables that are manageable via the JSON API.
- *
- * @module sync
- *
- * @since 4.8.0
- *
- * @param array The default list of multisite callables.
- */
- return apply_filters( 'jetpack_sync_multisite_callable_whitelist', self::$default_multisite_callable_whitelist );
- }
-
- static $post_meta_whitelist = array(
- '_feedback_akismet_values',
- '_feedback_email',
- '_feedback_extra_fields',
- '_g_feedback_shortcode',
- '_jetpack_post_thumbnail',
- '_menu_item_classes',
- '_menu_item_menu_item_parent',
- '_menu_item_object',
- '_menu_item_object_id',
- '_menu_item_orphaned',
- '_menu_item_type',
- '_menu_item_xfn',
- '_publicize_facebook_user',
- '_publicize_twitter_user',
- '_thumbnail_id',
- '_wp_attached_file',
- '_wp_attachment_backup_sizes',
- '_wp_attachment_context',
- '_wp_attachment_image_alt',
- '_wp_attachment_is_custom_background',
- '_wp_attachment_is_custom_header',
- '_wp_attachment_metadata',
- '_wp_page_template',
- '_wp_trash_meta_comments_status',
- '_wpas_mess',
- 'content_width',
- 'custom_css_add',
- 'custom_css_preprocessor',
- 'enclosure',
- 'imagedata',
- 'nova_price',
- 'publicize_results',
- 'sharing_disabled',
- 'switch_like_status',
- 'videopress_guid',
- 'vimeo_poster_image',
- 'advanced_seo_description', // Jetpack_SEO_Posts::DESCRIPTION_META_KEY
- );
-
- public static function get_post_meta_whitelist() {
- /**
- * Filter the list of post meta data that are manageable via the JSON API.
- *
- * @module sync
- *
- * @since 4.8.0
- *
- * @param array The default list of meta data keys.
- */
- return apply_filters( 'jetpack_sync_post_meta_whitelist', self::$post_meta_whitelist );
- }
-
- static $comment_meta_whitelist = array(
- 'hc_avatar',
- 'hc_post_as',
- 'hc_wpcom_id_sig',
- 'hc_foreign_user_id',
- );
-
- public static function get_comment_meta_whitelist() {
- /**
- * Filter the list of comment meta data that are manageable via the JSON API.
- *
- * @module sync
- *
- * @since 5.7.0
- *
- * @param array The default list of comment meta data keys.
- */
- return apply_filters( 'jetpack_sync_comment_meta_whitelist', self::$comment_meta_whitelist );
- }
-
- // TODO: move this to server? - these are theme support values
- // that should be synced as jetpack_current_theme_supports_foo option values
- static $default_theme_support_whitelist = array(
- 'post-thumbnails',
- 'post-formats',
- 'custom-header',
- 'custom-background',
- 'custom-logo',
- 'menus',
- 'automatic-feed-links',
- 'editor-style',
- 'widgets',
- 'html5',
- 'title-tag',
- 'jetpack-social-menu',
- 'jetpack-responsive-videos',
- 'infinite-scroll',
- 'site-logo',
- );
-
- static function is_whitelisted_option( $option ) {
- $whitelisted_options = self::get_options_whitelist();
- foreach ( $whitelisted_options as $whitelisted_option ) {
- if ( $whitelisted_option[0] === '/' && preg_match( $whitelisted_option, $option ) ) {
- return true;
- } elseif ( $whitelisted_option === $option ) {
- return true;
- }
- }
-
- return false;
- }
-
- static $default_capabilities_whitelist = array(
- 'switch_themes',
- 'edit_themes',
- 'edit_theme_options',
- 'install_themes',
- 'activate_plugins',
- 'edit_plugins',
- 'install_plugins',
- 'edit_users',
- 'edit_files',
- 'manage_options',
- 'moderate_comments',
- 'manage_categories',
- 'manage_links',
- 'upload_files',
- 'import',
- 'unfiltered_html',
- 'edit_posts',
- 'edit_others_posts',
- 'edit_published_posts',
- 'publish_posts',
- 'edit_pages',
- 'read',
- 'publish_pages',
- 'edit_others_pages',
- 'edit_published_pages',
- 'delete_pages',
- 'delete_others_pages',
- 'delete_published_pages',
- 'delete_posts',
- 'delete_others_posts',
- 'delete_published_posts',
- 'delete_private_posts',
- 'edit_private_posts',
- 'read_private_posts',
- 'delete_private_pages',
- 'edit_private_pages',
- 'read_private_pages',
- 'delete_users',
- 'create_users',
- 'unfiltered_upload',
- 'edit_dashboard',
- 'customize',
- 'delete_site',
- 'update_plugins',
- 'delete_plugins',
- 'update_themes',
- 'update_core',
- 'list_users',
- 'remove_users',
- 'add_users',
- 'promote_users',
- 'delete_themes',
- 'export',
- 'edit_comment',
- 'upload_plugins',
- 'upload_themes',
- );
-
- public static function get_capabilities_whitelist() {
- /**
- * Filter the list of capabilities that we care about
- *
- * @module sync
- *
- * @since 5.5.0
- *
- * @param array The default list of capabilities.
- */
- return apply_filters( 'jetpack_sync_capabilities_whitelist', self::$default_capabilities_whitelist );
- }
-
- static function get_max_sync_execution_time() {
- $max_exec_time = intval( ini_get( 'max_execution_time' ) );
- if ( 0 === $max_exec_time ) {
- // 0 actually means "unlimited", but let's not treat it that way
- $max_exec_time = 60;
- }
- return floor( $max_exec_time / 3 );
- }
-
- static $default_network_options_whitelist = array(
- 'site_name',
- 'jetpack_protect_key',
- 'jetpack_protect_global_whitelist',
- 'active_sitewide_plugins',
- );
-
- static $default_taxonomy_whitelist = array();
- static $default_dequeue_max_bytes = 500000; // very conservative value, 1/2 MB
- static $default_upload_max_bytes = 600000; // a little bigger than the upload limit to account for serialization
- static $default_upload_max_rows = 500;
- static $default_sync_wait_time = 10; // seconds, between syncs
- static $default_sync_wait_threshold = 5; // only wait before next send if the current send took more than X seconds
- static $default_enqueue_wait_time = 10; // wait between attempting to continue a full sync, via requests
- static $default_max_queue_size = 1000;
- static $default_max_queue_lag = 900; // 15 minutes
- static $default_queue_max_writes_sec = 100; // 100 rows a second
- static $default_post_types_blacklist = array();
- static $default_post_meta_whitelist = array();
- static $default_comment_meta_whitelist = array();
- static $default_disable = 0; // completely disable sending data to wpcom
- static $default_sync_via_cron = 1; // use cron to sync
- static $default_render_filtered_content = 0; // render post_filtered_content
- static $default_max_enqueue_full_sync = 100; // max number of items to enqueue at a time when running full sync
- static $default_max_queue_size_full_sync = 1000; // max number of total items in the full sync queue
- static $default_sync_callables_wait_time = MINUTE_IN_SECONDS; // seconds before sending callables again
- static $default_sync_constants_wait_time = HOUR_IN_SECONDS; // seconds before sending constants again
- static $default_sync_queue_lock_timeout = 120; // 2 minutes
- static $default_cron_sync_time_limit = 30; // 30 seconds
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-functions.php b/plugins/jetpack/sync/class.jetpack-sync-functions.php
deleted file mode 100644
index 609797bb..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-functions.php
+++ /dev/null
@@ -1,403 +0,0 @@
-<?php
-
-/*
- * Utility functions to generate data synced to wpcom
- */
-
-class Jetpack_Sync_Functions {
- const HTTPS_CHECK_OPTION_PREFIX = 'jetpack_sync_https_history_';
- const HTTPS_CHECK_HISTORY = 5;
-
- public static function get_modules() {
- require_once JETPACK__PLUGIN_DIR . 'class.jetpack-admin.php';
-
- return Jetpack_Admin::init()->get_modules();
- }
-
- public static function get_taxonomies() {
- global $wp_taxonomies;
- $wp_taxonomies_without_callbacks = array();
- foreach ( $wp_taxonomies as $taxonomy_name => $taxonomy ) {
- $sanitized_taxonomy = self::sanitize_taxonomy( $taxonomy );
- if ( ! empty( $sanitized_taxonomy ) ) {
- $wp_taxonomies_without_callbacks[ $taxonomy_name ] = $sanitized_taxonomy;
- } else {
- error_log( 'Jetpack: Encountered a recusive taxonomy:' . $taxonomy_name );
- }
- }
- return $wp_taxonomies_without_callbacks;
- }
-
- public static function get_shortcodes() {
- global $shortcode_tags;
- return array_keys( $shortcode_tags );
- }
-
- /**
- * Removes any callback data since we will not be able to process it on our side anyways.
- */
- public static function sanitize_taxonomy( $taxonomy ) {
-
- // Lets clone the taxonomy object instead of modifing the global one.
- $cloned_taxonomy = json_decode( wp_json_encode( $taxonomy ) );
-
- // recursive taxonomies are no fun.
- if ( is_null( $cloned_taxonomy ) ) {
- return null;
- }
- // Remove any meta_box_cb if they are not the default wp ones.
- if ( isset( $cloned_taxonomy->meta_box_cb ) &&
- ! in_array( $cloned_taxonomy->meta_box_cb, array( 'post_tags_meta_box', 'post_categories_meta_box' ) ) ) {
- $cloned_taxonomy->meta_box_cb = null;
- }
- // Remove update call back
- if ( isset( $cloned_taxonomy->update_count_callback ) &&
- ! is_null( $cloned_taxonomy->update_count_callback ) ) {
- $cloned_taxonomy->update_count_callback = null;
- }
- // Remove rest_controller_class if it something other then the default.
- if ( isset( $cloned_taxonomy->rest_controller_class ) &&
- 'WP_REST_Terms_Controller' !== $cloned_taxonomy->rest_controller_class ) {
- $cloned_taxonomy->rest_controller_class = null;
- }
- return $cloned_taxonomy;
- }
-
- public static function get_post_types() {
- global $wp_post_types;
-
- $post_types_without_callbacks = array();
- foreach ( $wp_post_types as $post_type_name => $post_type ) {
- $sanitized_post_type = self::sanitize_post_type( $post_type );
- if ( ! empty( $sanitized_post_type ) ) {
- $post_types_without_callbacks[ $post_type_name ] = $sanitized_post_type;
- } else {
- error_log( 'Jetpack: Encountered a recusive post_type:' . $post_type_name );
- }
- }
- return $post_types_without_callbacks;
- }
-
- public static function sanitize_post_type( $post_type ) {
- // Lets clone the post type object instead of modifing the global one.
- $sanitized_post_type = array();
- foreach ( Jetpack_Sync_Defaults::$default_post_type_attributes as $attribute_key => $default_value ) {
- if ( isset( $post_type->{ $attribute_key } ) ) {
- $sanitized_post_type[ $attribute_key ] = $post_type->{ $attribute_key };
- }
- }
- return (object) $sanitized_post_type;
- }
-
- public static function expand_synced_post_type( $sanitized_post_type, $post_type ) {
- $post_type = sanitize_key( $post_type );
- $post_type_object = new WP_Post_Type( $post_type, $sanitized_post_type );
- $post_type_object->add_supports();
- $post_type_object->add_rewrite_rules();
- $post_type_object->add_hooks();
- $post_type_object->register_taxonomies();
- return (object) $post_type_object;
- }
-
- public static function get_post_type_features() {
- global $_wp_post_type_features;
-
- return $_wp_post_type_features;
- }
-
- public static function get_hosting_provider() {
- if ( defined( 'GD_SYSTEM_PLUGIN_DIR' ) || class_exists( '\\WPaaS\\Plugin' ) ) {
- return 'gd-managed-wp';
- }
- if ( defined( 'MM_BASE_DIR' ) ) {
- return 'bh';
- }
- if ( defined( 'IS_PRESSABLE' ) ) {
- return 'pressable';
- }
- if ( function_exists( 'is_wpe' ) || function_exists( 'is_wpe_snapshot' ) ) {
- return 'wpe';
- }
- if ( defined( 'VIP_GO_ENV' ) && false !== VIP_GO_ENV ) {
- return 'vip-go';
- }
- return 'unknown';
- }
-
- public static function rest_api_allowed_post_types() {
- /** This filter is already documented in class.json-api-endpoints.php */
- return apply_filters( 'rest_api_allowed_post_types', array( 'post', 'page', 'revision' ) );
- }
-
- public static function rest_api_allowed_public_metadata() {
- /** This filter is documented in json-endpoints/class.wpcom-json-api-post-endpoint.php */
- return apply_filters( 'rest_api_allowed_public_metadata', array() );
- }
-
- /**
- * Finds out if a site is using a version control system.
- *
- * @return bool
- **/
- public static function is_version_controlled() {
-
- if ( ! class_exists( 'WP_Automatic_Updater' ) ) {
- require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
- }
- $updater = new WP_Automatic_Updater();
-
- return (bool) strval( $updater->is_vcs_checkout( $context = ABSPATH ) );
- }
-
- /**
- * Returns true if the site has file write access false otherwise.
- *
- * @return bool
- **/
- public static function file_system_write_access() {
- if ( ! function_exists( 'get_filesystem_method' ) ) {
- require_once ABSPATH . 'wp-admin/includes/file.php';
- }
-
- require_once ABSPATH . 'wp-admin/includes/template.php';
-
- $filesystem_method = get_filesystem_method();
- if ( 'direct' === $filesystem_method ) {
- return true;
- }
-
- ob_start();
-
- if ( ! function_exists( 'request_filesystem_credentials' ) ) {
- require_once ABSPATH . 'wp-admin/includes/file.php';
- }
-
- $filesystem_credentials_are_stored = request_filesystem_credentials( self_admin_url() );
- ob_end_clean();
- if ( $filesystem_credentials_are_stored ) {
- return true;
- }
-
- return false;
- }
-
- /**
- * Helper function that is used when getting home or siteurl values. Decides
- * whether to get the raw or filtered value.
- *
- * @return string
- */
- public static function get_raw_or_filtered_url( $url_type ) {
- $url_function = ( 'home' == $url_type )
- ? 'home_url'
- : 'site_url';
-
- if (
- ! Jetpack_Constants::is_defined( 'JETPACK_SYNC_USE_RAW_URL' ) ||
- Jetpack_Constants::get_constant( 'JETPACK_SYNC_USE_RAW_URL' )
- ) {
- $scheme = is_ssl() ? 'https' : 'http';
- $url = self::get_raw_url( $url_type );
- $url = set_url_scheme( $url, $scheme );
- } else {
- $url = self::normalize_www_in_url( $url_type, $url_function );
- }
-
- return self::get_protocol_normalized_url( $url_function, $url );
- }
-
- public static function home_url() {
- $url = self::get_raw_or_filtered_url( 'home' );
-
- /**
- * Allows overriding of the home_url value that is synced back to WordPress.com.
- *
- * @since 5.2.0
- *
- * @param string $home_url
- */
- return esc_url_raw( apply_filters( 'jetpack_sync_home_url', $url ) );
- }
-
- public static function site_url() {
- $url = self::get_raw_or_filtered_url( 'siteurl' );
-
- /**
- * Allows overriding of the site_url value that is synced back to WordPress.com.
- *
- * @since 5.2.0
- *
- * @param string $site_url
- */
- return esc_url_raw( apply_filters( 'jetpack_sync_site_url', $url ) );
- }
-
- public static function main_network_site_url() {
- return self::get_protocol_normalized_url( 'main_network_site_url', network_site_url() );
- }
-
- public static function get_protocol_normalized_url( $callable, $new_value ) {
- $option_key = self::HTTPS_CHECK_OPTION_PREFIX . $callable;
-
- $parsed_url = wp_parse_url( $new_value );
- if ( ! $parsed_url ) {
- return $new_value;
- }
- if ( array_key_exists( 'scheme', $parsed_url ) ) {
- $scheme = $parsed_url['scheme'];
- } else {
- $scheme = '';
- }
- $scheme_history = get_option( $option_key, array() );
- $scheme_history[] = $scheme;
-
- // Limit length to self::HTTPS_CHECK_HISTORY
- $scheme_history = array_slice( $scheme_history, ( self::HTTPS_CHECK_HISTORY * -1 ) );
-
- update_option( $option_key, $scheme_history );
-
- $forced_scheme = in_array( 'https', $scheme_history ) ? 'https' : 'http';
-
- return set_url_scheme( $new_value, $forced_scheme );
- }
-
- public static function get_raw_url( $option_name ) {
- $value = null;
- $constant = ( 'home' == $option_name )
- ? 'WP_HOME'
- : 'WP_SITEURL';
-
- // Since we disregard the constant for multisites in ms-default-filters.php,
- // let's also use the db value if this is a multisite.
- if ( ! is_multisite() && Jetpack_Constants::is_defined( $constant ) ) {
- $value = Jetpack_Constants::get_constant( $constant );
- } else {
- // Let's get the option from the database so that we can bypass filters. This will help
- // ensure that we get more uniform values.
- $value = Jetpack_Options::get_raw_option( $option_name );
- }
-
- return $value;
- }
-
- public static function normalize_www_in_url( $option, $url_function ) {
- $url = wp_parse_url( call_user_func( $url_function ) );
- $option_url = wp_parse_url( get_option( $option ) );
-
- if ( ! $option_url || ! $url ) {
- return $url;
- }
-
- if ( $url['host'] === "www.{$option_url[ 'host' ]}" ) {
- // remove www if not present in option URL
- $url['host'] = $option_url['host'];
- }
- if ( $option_url['host'] === "www.{$url[ 'host' ]}" ) {
- // add www if present in option URL
- $url['host'] = $option_url['host'];
- }
-
- $normalized_url = "{$url['scheme']}://{$url['host']}";
- if ( isset( $url['path'] ) ) {
- $normalized_url .= "{$url['path']}";
- }
-
- if ( isset( $url['query'] ) ) {
- $normalized_url .= "?{$url['query']}";
- }
-
- return $normalized_url;
- }
-
- public static function get_plugins() {
- if ( ! function_exists( 'get_plugins' ) ) {
- require_once ABSPATH . 'wp-admin/includes/plugin.php';
- }
-
- /** This filter is documented in wp-admin/includes/class-wp-plugins-list-table.php */
- return apply_filters( 'all_plugins', get_plugins() );
- }
-
- /**
- * Get custom action link tags that the plugin is using
- * Ref: https://codex.wordpress.org/Plugin_API/Filter_Reference/plugin_action_links_(plugin_file_name)
- *
- * @return array of plugin action links (key: link name value: url)
- */
- public static function get_plugins_action_links( $plugin_file_singular = null ) {
- // Some sites may have DOM disabled in PHP fail early
- if ( ! class_exists( 'DOMDocument' ) ) {
- return array();
- }
- $plugins_action_links = get_option( 'jetpack_plugin_api_action_links', array() );
- if ( ! empty( $plugins_action_links ) ) {
- if ( is_null( $plugin_file_singular ) ) {
- return $plugins_action_links;
- }
- return ( isset( $plugins_action_links[ $plugin_file_singular ] ) ? $plugins_action_links[ $plugin_file_singular ] : null );
- }
- return array();
- }
-
- public static function wp_version() {
- global $wp_version;
- return $wp_version;
- }
-
- public static function site_icon_url( $size = 512 ) {
- $site_icon = get_site_icon_url( $size );
- return $site_icon ? $site_icon : get_option( 'jetpack_site_icon_url' );
- }
-
- public static function roles() {
- $wp_roles = wp_roles();
- return $wp_roles->roles;
- }
-
- /**
- * Determine time zone from WordPress' options "timezone_string"
- * and "gmt_offset".
- *
- * 1. Check if `timezone_string` is set and return it.
- * 2. Check if `gmt_offset` is set, formats UTC-offset from it and return it.
- * 3. Default to "UTC+0" if nothing is set.
- *
- * @return string
- */
- public static function get_timezone() {
- $timezone_string = get_option( 'timezone_string' );
-
- if ( ! empty( $timezone_string ) ) {
- return str_replace( '_', ' ', $timezone_string );
- }
-
- $gmt_offset = get_option( 'gmt_offset', 0 );
-
- $formatted_gmt_offset = sprintf( '%+g', floatval( $gmt_offset ) );
-
- $formatted_gmt_offset = str_replace(
- array( '.25', '.5', '.75' ),
- array( ':15', ':30', ':45' ),
- (string) $formatted_gmt_offset
- );
-
- /* translators: %s is UTC offset, e.g. "+1" */
- return sprintf( __( 'UTC%s', 'jetpack' ), $formatted_gmt_offset );
- }
- // New in WP 5.1
- public static function get_paused_themes() {
- if ( function_exists( 'wp_paused_themes' ) ) {
- $paused_themes = wp_paused_themes();
- return $paused_themes->get_all();
- }
- return false;
- }
- // New in WP 5.1
- public static function get_paused_plugins() {
- if ( function_exists( 'wp_paused_plugins' ) ) {
- $paused_plugins = wp_paused_plugins();
- return $paused_plugins->get_all();
- }
- return false;
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-json-deflate-array-codec.php b/plugins/jetpack/sync/class.jetpack-sync-json-deflate-array-codec.php
deleted file mode 100644
index 04d3dd7d..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-json-deflate-array-codec.php
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-
-require_once dirname( __FILE__ ) . '/interface.jetpack-sync-codec.php';
-
-/**
- * An implementation of iJetpack_Sync_Codec that uses gzip's DEFLATE
- * algorithm to compress objects serialized using json_encode
- */
-class Jetpack_Sync_JSON_Deflate_Array_Codec implements iJetpack_Sync_Codec {
- const CODEC_NAME = 'deflate-json-array';
-
- public function name() {
- return self::CODEC_NAME;
- }
-
- public function encode( $object ) {
- return base64_encode( gzdeflate( $this->json_serialize( $object ) ) );
- }
-
- public function decode( $input ) {
- return $this->json_unserialize( gzinflate( base64_decode( $input ) ) );
- }
-
- // @see https://gist.github.com/muhqu/820694
- protected function json_serialize( $any ) {
- if ( function_exists( 'jetpack_json_wrap' ) ) {
- return wp_json_encode( jetpack_json_wrap( $any ) );
- }
- // This prevents fatal error when updating pre 6.0 via the cli command
- return wp_json_encode( $this->json_wrap( $any ) );
- }
-
- protected function json_unserialize( $str ) {
- return $this->json_unwrap( json_decode( $str, true ) );
- }
-
- private function json_wrap( &$any, $seen_nodes = array() ) {
- if ( is_object( $any ) ) {
- $input = get_object_vars( $any );
- $input['__o'] = 1;
- } else {
- $input = &$any;
- }
-
- if ( is_array( $input ) ) {
- $seen_nodes[] = &$any;
-
- $return = array();
-
- foreach ( $input as $k => &$v ) {
- if ( ( is_array( $v ) || is_object( $v ) ) ) {
- if ( in_array( $v, $seen_nodes, true ) ) {
- continue;
- }
- $return[ $k ] = $this->json_wrap( $v, $seen_nodes );
- } else {
- $return[ $k ] = $v;
- }
- }
-
- return $return;
- }
-
- return $any;
- }
-
- private function json_unwrap( $any ) {
- if ( is_array( $any ) ) {
- foreach ( $any as $k => $v ) {
- if ( '__o' === $k ) {
- continue;
- }
- $any[ $k ] = $this->json_unwrap( $v );
- }
-
- if ( isset( $any['__o'] ) ) {
- unset( $any['__o'] );
- $any = (object) $any;
- }
- }
-
- return $any;
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-listener.php b/plugins/jetpack/sync/class.jetpack-sync-listener.php
deleted file mode 100644
index e0a60617..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-listener.php
+++ /dev/null
@@ -1,316 +0,0 @@
-<?php
-
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-settings.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-queue.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-modules.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-actions.php';
-
-/**
- * This class monitors actions and logs them to the queue to be sent
- */
-class Jetpack_Sync_Listener {
- const QUEUE_STATE_CHECK_TRANSIENT = 'jetpack_sync_last_checked_queue_state';
- const QUEUE_STATE_CHECK_TIMEOUT = 300; // 5 minutes
-
- private $sync_queue;
- private $full_sync_queue;
- private $sync_queue_size_limit;
- private $sync_queue_lag_limit;
-
- // singleton functions
- private static $instance;
-
- public static function get_instance() {
- if ( null === self::$instance ) {
- self::$instance = new self();
- }
-
- return self::$instance;
- }
-
- // this is necessary because you can't use "new" when you declare instance properties >:(
- protected function __construct() {
- $this->set_defaults();
- $this->init();
- }
-
- private function init() {
- $handler = array( $this, 'action_handler' );
- $full_sync_handler = array( $this, 'full_sync_action_handler' );
-
- foreach ( Jetpack_Sync_Modules::get_modules() as $module ) {
- $module->init_listeners( $handler );
- $module->init_full_sync_listeners( $full_sync_handler );
- }
-
- // Module Activation
- add_action( 'jetpack_activate_module', $handler );
- add_action( 'jetpack_deactivate_module', $handler );
-
- // Jetpack Upgrade
- add_action( 'updating_jetpack_version', $handler, 10, 2 );
-
- // Send periodic checksum
- add_action( 'jetpack_sync_checksum', $handler );
- }
-
- function get_sync_queue() {
- return $this->sync_queue;
- }
-
- function get_full_sync_queue() {
- return $this->full_sync_queue;
- }
-
- function set_queue_size_limit( $limit ) {
- $this->sync_queue_size_limit = $limit;
- }
-
- function get_queue_size_limit() {
- return $this->sync_queue_size_limit;
- }
-
- function set_queue_lag_limit( $age ) {
- $this->sync_queue_lag_limit = $age;
- }
-
- function get_queue_lag_limit() {
- return $this->sync_queue_lag_limit;
- }
-
- function force_recheck_queue_limit() {
- delete_transient( self::QUEUE_STATE_CHECK_TRANSIENT . '_' . $this->sync_queue->id );
- delete_transient( self::QUEUE_STATE_CHECK_TRANSIENT . '_' . $this->full_sync_queue->id );
- }
-
- // prevent adding items to the queue if it hasn't sent an item for 15 mins
- // AND the queue is over 1000 items long (by default)
- function can_add_to_queue( $queue ) {
- if ( Jetpack_Sync_Settings::get_setting( 'disable' ) ) {
- return false;
- }
-
- $state_transient_name = self::QUEUE_STATE_CHECK_TRANSIENT . '_' . $queue->id;
-
- $queue_state = get_transient( $state_transient_name );
-
- if ( false === $queue_state ) {
- $queue_state = array( $queue->size(), $queue->lag() );
- set_transient( $state_transient_name, $queue_state, self::QUEUE_STATE_CHECK_TIMEOUT );
- }
-
- list( $queue_size, $queue_age ) = $queue_state;
-
- return ( $queue_age < $this->sync_queue_lag_limit )
- ||
- ( ( $queue_size + 1 ) < $this->sync_queue_size_limit );
- }
-
- function full_sync_action_handler() {
- $args = func_get_args();
- $this->enqueue_action( current_filter(), $args, $this->full_sync_queue );
- }
-
- function action_handler() {
- $args = func_get_args();
- $this->enqueue_action( current_filter(), $args, $this->sync_queue );
- }
-
- // add many actions to the queue directly, without invoking them
- function bulk_enqueue_full_sync_actions( $action_name, $args_array ) {
- $queue = $this->get_full_sync_queue();
-
- // periodically check the size of the queue, and disable adding to it if
- // it exceeds some limit AND the oldest item exceeds the age limit (i.e. sending has stopped)
- if ( ! $this->can_add_to_queue( $queue ) ) {
- return;
- }
-
- // if we add any items to the queue, we should try to ensure that our script
- // can't be killed before they are sent
- if ( function_exists( 'ignore_user_abort' ) ) {
- ignore_user_abort( true );
- }
-
- $data_to_enqueue = array();
- $user_id = get_current_user_id();
- $currtime = microtime( true );
- $is_importing = Jetpack_Sync_Settings::is_importing();
-
- foreach ( $args_array as $args ) {
-
- /**
- * Modify or reject the data within an action before it is enqueued locally.
- *
- * @since 4.2.0
- *
- * @module sync
- *
- * @param array The action parameters
- */
- $args = apply_filters( "jetpack_sync_before_enqueue_$action_name", $args );
-
- // allow listeners to abort
- if ( $args === false ) {
- continue;
- }
-
- $data_to_enqueue[] = array(
- $action_name,
- array( $args ),
- $user_id,
- $currtime,
- $is_importing,
- );
- }
-
- $queue->add_all( $data_to_enqueue );
- }
-
- function enqueue_action( $current_filter, $args, $queue ) {
- // don't enqueue an action during the outbound http request - this prevents recursion
- if ( Jetpack_Sync_Settings::is_sending() ) {
- return;
- }
-
- /**
- * Add an action hook to execute when anything on the whitelist gets sent to the queue to sync.
- *
- * @module sync
- *
- * @since 5.9.0
- */
- do_action( 'jetpack_sync_action_before_enqueue' );
-
- /**
- * Modify or reject the data within an action before it is enqueued locally.
- *
- * @since 4.2.0
- *
- * @param array The action parameters
- */
- $args = apply_filters( "jetpack_sync_before_enqueue_$current_filter", $args );
-
- // allow listeners to abort
- if ( $args === false ) {
- return;
- }
-
- // periodically check the size of the queue, and disable adding to it if
- // it exceeds some limit AND the oldest item exceeds the age limit (i.e. sending has stopped)
- if ( ! $this->can_add_to_queue( $queue ) ) {
- return;
- }
-
- // if we add any items to the queue, we should try to ensure that our script
- // can't be killed before they are sent
- if ( function_exists( 'ignore_user_abort' ) ) {
- ignore_user_abort( true );
- }
-
- if (
- 'sync' === $queue->id ||
- in_array(
- $current_filter,
- array(
- 'jetpack_full_sync_start',
- 'jetpack_full_sync_end',
- 'jetpack_full_sync_cancel',
- )
- )
- ) {
- $queue->add(
- array(
- $current_filter,
- $args,
- get_current_user_id(),
- microtime( true ),
- Jetpack_Sync_Settings::is_importing(),
- $this->get_actor( $current_filter, $args ),
- )
- );
- } else {
- $queue->add(
- array(
- $current_filter,
- $args,
- get_current_user_id(),
- microtime( true ),
- Jetpack_Sync_Settings::is_importing(),
- )
- );
- }
-
- // since we've added some items, let's try to load the sender so we can send them as quickly as possible
- if ( ! Jetpack_Sync_Actions::$sender ) {
- add_filter( 'jetpack_sync_sender_should_load', '__return_true' );
- if ( did_action( 'init' ) ) {
- Jetpack_Sync_Actions::add_sender_shutdown();
- }
- }
- }
-
- function get_actor( $current_filter, $args ) {
- if ( 'wp_login' === $current_filter ) {
- $user = get_user_by( 'ID', $args[1]->data->ID );
- } else {
- $user = wp_get_current_user();
- }
-
- $translated_role = Jetpack::translate_user_to_role( $user );
-
- $actor = array(
- 'wpcom_user_id' => null,
- 'external_user_id' => isset( $user->ID ) ? $user->ID : null,
- 'display_name' => isset( $user->display_name ) ? $user->display_name : null,
- 'user_email' => isset( $user->user_email ) ? $user->user_email : null,
- 'user_roles' => isset( $user->roles ) ? $user->roles : null,
- 'translated_role' => $translated_role ? $translated_role : null,
- 'is_cron' => defined( 'DOING_CRON' ) ? DOING_CRON : false,
- 'is_rest' => defined( 'REST_API_REQUEST' ) ? REST_API_REQUEST : false,
- 'is_xmlrpc' => defined( 'XMLRPC_REQUEST' ) ? XMLRPC_REQUEST : false,
- 'is_wp_rest' => defined( 'REST_REQUEST' ) ? REST_REQUEST : false,
- 'is_ajax' => defined( 'DOING_AJAX' ) ? DOING_AJAX : false,
- 'is_wp_admin' => is_admin(),
- 'is_cli' => defined( 'WP_CLI' ) ? WP_CLI : false,
- 'from_url' => $this->get_request_url(),
- );
-
- if ( $this->should_send_user_data_with_actor( $current_filter ) ) {
- require_once JETPACK__PLUGIN_DIR . 'modules/protect/shared-functions.php';
- $actor['ip'] = jetpack_protect_get_ip();
- $actor['user_agent'] = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : 'unknown';
- }
-
- return $actor;
- }
-
- function should_send_user_data_with_actor( $current_filter ) {
- $should_send = in_array( $current_filter, array( 'jetpack_wp_login', 'wp_logout', 'jetpack_valid_failed_login_attempt' ) );
- /**
- * Allow or deny sending actor's user data ( IP and UA ) during a sync event
- *
- * @since 5.8.0
- *
- * @module sync
- *
- * @param bool True if we should send user data
- * @param string The current filter that is performing the sync action
- */
- return apply_filters( 'jetpack_sync_actor_user_data', $should_send, $current_filter );
- }
-
- function set_defaults() {
- $this->sync_queue = new Jetpack_Sync_Queue( 'sync' );
- $this->full_sync_queue = new Jetpack_Sync_Queue( 'full_sync' );
- $this->set_queue_size_limit( Jetpack_Sync_Settings::get_setting( 'max_queue_size' ) );
- $this->set_queue_lag_limit( Jetpack_Sync_Settings::get_setting( 'max_queue_lag' ) );
- }
-
- function get_request_url() {
- if ( isset( $_SERVER['HTTP_HOST'], $_SERVER['REQUEST_URI'] ) ) {
- return 'http' . ( isset( $_SERVER['HTTPS'] ) ? 's' : '' ) . '://' . "{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
- }
- return is_admin() ? get_admin_url( get_current_blog_id() ) : home_url();
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-module-attachments.php b/plugins/jetpack/sync/class.jetpack-sync-module-attachments.php
deleted file mode 100644
index f68ba832..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-module-attachments.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-class Jetpack_Sync_Module_Attachments extends Jetpack_Sync_Module {
- function name() {
- return 'attachments';
- }
-
- public function init_listeners( $callable ) {
- add_action( 'add_attachment', array( $this, 'process_add' ) );
- add_action( 'attachment_updated', array( $this, 'process_update' ), 10, 3 );
- add_action( 'jetpack_sync_save_update_attachment', $callable, 10, 2 );
- add_action( 'jetpack_sync_save_add_attachment', $callable, 10, 2 );
- add_action( 'jetpack_sync_save_attach_attachment', $callable, 10, 2 );
- }
-
- function process_add( $attachment_id ) {
- $attachment = get_post( $attachment_id );
- /**
- * Fires when the client needs to sync an new attachment
- *
- * @since 4.2.0
- *
- * @param int The attachment ID
- * @param object The attachment
- */
- do_action( 'jetpack_sync_save_add_attachment', $attachment_id, $attachment );
- }
-
- function process_update( $attachment_id, $attachment_after, $attachment_before ) {
- // Check whether attachment was added to a post for the first time
- if ( 0 === $attachment_before->post_parent && 0 !== $attachment_after->post_parent ) {
- /**
- * Fires when an existing attachment is added to a post for the first time
- *
- * @since 6.6.0
- *
- * @param int The attachment ID
- * @param object The attachment
- */
- do_action( 'jetpack_sync_save_attach_attachment', $attachment_id, $attachment_after );
- } else {
- /**
- * Fires when the client needs to sync an updated attachment
- *
- * @since 4.9.0
- *
- * @param int The attachment ID
- * @param object The attachment
- *
- * Previously this action was synced using jetpack_sync_save_add_attachment action.
- */
- do_action( 'jetpack_sync_save_update_attachment', $attachment_id, $attachment_after );
- }
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-module-callables.php b/plugins/jetpack/sync/class.jetpack-sync-module-callables.php
deleted file mode 100644
index 2db509ed..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-module-callables.php
+++ /dev/null
@@ -1,269 +0,0 @@
-<?php
-
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-functions.php';
-
-class Jetpack_Sync_Module_Callables extends Jetpack_Sync_Module {
- const CALLABLES_CHECKSUM_OPTION_NAME = 'jetpack_callables_sync_checksum';
- const CALLABLES_AWAIT_TRANSIENT_NAME = 'jetpack_sync_callables_await';
-
- private $callable_whitelist;
-
- public function name() {
- return 'functions';
- }
-
- public function set_defaults() {
- if ( is_multisite() ) {
- $this->callable_whitelist = array_merge( Jetpack_Sync_Defaults::get_callable_whitelist(), Jetpack_Sync_Defaults::get_multisite_callable_whitelist() );
- } else {
- $this->callable_whitelist = Jetpack_Sync_Defaults::get_callable_whitelist();
- }
- }
-
- public function init_listeners( $callable ) {
- add_action( 'jetpack_sync_callable', $callable, 10, 2 );
- add_action( 'current_screen', array( $this, 'set_plugin_action_links' ), 9999 ); // Should happen very late
-
- // For some options, we should always send the change right away!
- $always_send_updates_to_these_options = array(
- 'jetpack_active_modules',
- 'home',
- 'siteurl',
- 'jetpack_sync_error_idc',
- 'paused_plugins',
- 'paused_themes',
- );
- foreach ( $always_send_updates_to_these_options as $option ) {
- add_action( "update_option_{$option}", array( $this, 'unlock_sync_callable' ) );
- add_action( "delete_option_{$option}", array( $this, 'unlock_sync_callable' ) );
- }
-
- // Provide a hook so that hosts can send changes to certain callables right away.
- // Especially useful when a host uses constants to change home and siteurl.
- add_action( 'jetpack_sync_unlock_sync_callable', array( $this, 'unlock_sync_callable' ) );
-
- // get_plugins and wp_version
- // gets fired when new code gets installed, updates etc.
- add_action( 'upgrader_process_complete', array( $this, 'unlock_plugin_action_link_and_callables' ) );
- add_action( 'update_option_active_plugins', array( $this, 'unlock_plugin_action_link_and_callables' ) );
- }
-
- public function init_full_sync_listeners( $callable ) {
- add_action( 'jetpack_full_sync_callables', $callable );
- }
-
- public function init_before_send() {
- add_action( 'jetpack_sync_before_send_queue_sync', array( $this, 'maybe_sync_callables' ) );
-
- // full sync
- add_filter( 'jetpack_sync_before_send_jetpack_full_sync_callables', array( $this, 'expand_callables' ) );
- }
-
- public function reset_data() {
- delete_option( self::CALLABLES_CHECKSUM_OPTION_NAME );
- delete_transient( self::CALLABLES_AWAIT_TRANSIENT_NAME );
-
- $url_callables = array( 'home_url', 'site_url', 'main_network_site_url' );
- foreach ( $url_callables as $callable ) {
- delete_option( Jetpack_Sync_Functions::HTTPS_CHECK_OPTION_PREFIX . $callable );
- }
- }
-
- function set_callable_whitelist( $callables ) {
- $this->callable_whitelist = $callables;
- }
-
- function get_callable_whitelist() {
- return $this->callable_whitelist;
- }
-
- public function get_all_callables() {
- // get_all_callables should run as the master user always.
- $current_user_id = get_current_user_id();
- wp_set_current_user( Jetpack_Options::get_option( 'master_user' ) );
- $callables = array_combine(
- array_keys( $this->get_callable_whitelist() ),
- array_map( array( $this, 'get_callable' ), array_values( $this->get_callable_whitelist() ) )
- );
- wp_set_current_user( $current_user_id );
- return $callables;
- }
-
- private function get_callable( $callable ) {
- return call_user_func( $callable );
- }
-
- public function enqueue_full_sync_actions( $config, $max_items_to_enqueue, $state ) {
- /**
- * Tells the client to sync all callables to the server
- *
- * @since 4.2.0
- *
- * @param boolean Whether to expand callables (should always be true)
- */
- do_action( 'jetpack_full_sync_callables', true );
-
- // The number of actions enqueued, and next module state (true == done)
- return array( 1, true );
- }
-
- public function estimate_full_sync_actions( $config ) {
- return 1;
- }
-
- public function get_full_sync_actions() {
- return array( 'jetpack_full_sync_callables' );
- }
-
- public function unlock_sync_callable() {
- delete_transient( self::CALLABLES_AWAIT_TRANSIENT_NAME );
- }
-
- public function unlock_plugin_action_link_and_callables() {
- delete_transient( self::CALLABLES_AWAIT_TRANSIENT_NAME );
- delete_transient( 'jetpack_plugin_api_action_links_refresh' );
- add_filter( 'jetpack_check_and_send_callables', '__return_true' );
- }
-
- public function set_plugin_action_links() {
- if (
- ! class_exists( 'DOMDocument' ) ||
- ! function_exists( 'libxml_use_internal_errors' ) ||
- ! function_exists( 'mb_convert_encoding' )
- ) {
- return;
- }
-
- $current_screeen = get_current_screen();
-
- $plugins_action_links = array();
- // Is the transient lock in place?
- $plugins_lock = get_transient( 'jetpack_plugin_api_action_links_refresh', false );
- if ( ! empty( $plugins_lock ) && ( isset( $current_screeen->id ) && $current_screeen->id !== 'plugins' ) ) {
- return;
- }
- $plugins = array_keys( Jetpack_Sync_Functions::get_plugins() );
- foreach ( $plugins as $plugin_file ) {
- /**
- * Plugins often like to unset things but things break if they are not able to.
- */
- $action_links = array(
- 'deactivate' => '',
- 'activate' => '',
- 'details' => '',
- 'delete' => '',
- 'edit' => '',
- );
- /** This filter is documented in src/wp-admin/includes/class-wp-plugins-list-table.php */
- $action_links = apply_filters( 'plugin_action_links', $action_links, $plugin_file, null, 'all' );
- /** This filter is documented in src/wp-admin/includes/class-wp-plugins-list-table.php */
- $action_links = apply_filters( "plugin_action_links_{$plugin_file}", $action_links, $plugin_file, null, 'all' );
- $action_links = array_filter( $action_links );
- $formatted_action_links = null;
- if ( ! empty( $action_links ) && count( $action_links ) > 0 ) {
- $dom_doc = new DOMDocument();
- foreach ( $action_links as $action_link ) {
- // The @ is not enough to suppress errors when dealing with libxml,
- // we have to tell it directly how we want to handle errors.
- libxml_use_internal_errors( true );
- $dom_doc->loadHTML( mb_convert_encoding( $action_link, 'HTML-ENTITIES', 'UTF-8' ) );
- libxml_use_internal_errors( false );
-
- $link_elements = $dom_doc->getElementsByTagName( 'a' );
- if ( $link_elements->length == 0 ) {
- continue;
- }
-
- $link_element = $link_elements->item( 0 );
- if ( $link_element->hasAttribute( 'href' ) && $link_element->nodeValue ) {
- $link_url = trim( $link_element->getAttribute( 'href' ) );
-
- // Add the full admin path to the url if the plugin did not provide it
- $link_url_scheme = wp_parse_url( $link_url, PHP_URL_SCHEME );
- if ( empty( $link_url_scheme ) ) {
- $link_url = admin_url( $link_url );
- }
-
- $formatted_action_links[ $link_element->nodeValue ] = $link_url;
- }
- }
- }
- if ( $formatted_action_links ) {
- $plugins_action_links[ $plugin_file ] = $formatted_action_links;
- }
- }
- // Cache things for a long time
- set_transient( 'jetpack_plugin_api_action_links_refresh', time(), DAY_IN_SECONDS );
- update_option( 'jetpack_plugin_api_action_links', $plugins_action_links );
- }
-
- public function should_send_callable( $callable_checksums, $name, $checksum ) {
- $idc_override_callables = array(
- 'main_network_site',
- 'home_url',
- 'site_url',
- );
- if ( in_array( $name, $idc_override_callables ) && Jetpack_Options::get_option( 'migrate_for_idc' ) ) {
- return true;
- }
-
- return ! $this->still_valid_checksum( $callable_checksums, $name, $checksum );
- }
-
- public function maybe_sync_callables() {
- if ( ! apply_filters( 'jetpack_check_and_send_callables', false ) ) {
- if ( ! is_admin() || Jetpack_Sync_Settings::is_doing_cron() ) {
- return;
- }
-
- if ( get_transient( self::CALLABLES_AWAIT_TRANSIENT_NAME ) ) {
- return;
- }
- }
-
- set_transient( self::CALLABLES_AWAIT_TRANSIENT_NAME, microtime( true ), Jetpack_Sync_Defaults::$default_sync_callables_wait_time );
-
- $callables = $this->get_all_callables();
-
- if ( empty( $callables ) ) {
- return;
- }
-
- $callable_checksums = (array) Jetpack_Options::get_raw_option( self::CALLABLES_CHECKSUM_OPTION_NAME, array() );
-
- // only send the callables that have changed
- foreach ( $callables as $name => $value ) {
- $checksum = $this->get_check_sum( $value );
- // explicitly not using Identical comparison as get_option returns a string
- if ( ! is_null( $value ) && $this->should_send_callable( $callable_checksums, $name, $checksum ) ) {
- /**
- * Tells the client to sync a callable (aka function) to the server
- *
- * @since 4.2.0
- *
- * @param string The name of the callable
- * @param mixed The value of the callable
- */
- do_action( 'jetpack_sync_callable', $name, $value );
- $callable_checksums[ $name ] = $checksum;
- } else {
- $callable_checksums[ $name ] = $checksum;
- }
- }
- Jetpack_Options::update_raw_option( self::CALLABLES_CHECKSUM_OPTION_NAME, $callable_checksums );
- }
-
- public function expand_callables( $args ) {
- if ( $args[0] ) {
- $callables = $this->get_all_callables();
- $callables_checksums = array();
- foreach ( $callables as $name => $value ) {
- $callables_checksums[ $name ] = $this->get_check_sum( $value );
- }
- Jetpack_Options::update_raw_option( self::CALLABLES_CHECKSUM_OPTION_NAME, $callables_checksums );
- return $callables;
- }
-
- return $args;
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-module-comments.php b/plugins/jetpack/sync/class.jetpack-sync-module-comments.php
deleted file mode 100644
index e6c49171..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-module-comments.php
+++ /dev/null
@@ -1,194 +0,0 @@
-<?php
-
-class Jetpack_Sync_Module_Comments extends Jetpack_Sync_Module {
-
- public function name() {
- return 'comments';
- }
-
- public function get_object_by_id( $object_type, $id ) {
- $comment_id = intval( $id );
- if ( $object_type === 'comment' && $comment = get_comment( $comment_id ) ) {
- return $this->filter_comment( $comment );
- }
-
- return false;
- }
-
- public function init_listeners( $callable ) {
- add_action( 'wp_insert_comment', $callable, 10, 2 );
- add_action( 'deleted_comment', $callable );
- add_action( 'trashed_comment', $callable );
- add_action( 'spammed_comment', $callable );
- add_action( 'trashed_post_comments', $callable, 10, 2 );
- add_action( 'untrash_post_comments', $callable );
- add_action( 'comment_approved_to_unapproved', $callable );
- add_action( 'comment_unapproved_to_approved', $callable );
- add_action( 'jetpack_modified_comment_contents', $callable, 10, 2 );
- add_action( 'untrashed_comment', $callable, 10, 2 );
- add_action( 'unspammed_comment', $callable, 10, 2 );
- add_filter( 'wp_update_comment_data', array( $this, 'handle_comment_contents_modification' ), 10, 3 );
-
- // even though it's messy, we implement these hooks because
- // the edit_comment hook doesn't include the data
- // so this saves us a DB read for every comment event
- foreach ( array( '', 'trackback', 'pingback' ) as $comment_type ) {
- foreach ( array( 'unapproved', 'approved' ) as $comment_status ) {
- $comment_action_name = "comment_{$comment_status}_{$comment_type}";
- add_action( $comment_action_name, $callable, 10, 2 );
- }
- }
-
- // listen for meta changes
- $this->init_listeners_for_meta_type( 'comment', $callable );
- $this->init_meta_whitelist_handler( 'comment', array( $this, 'filter_meta' ) );
- }
-
- public function handle_comment_contents_modification( $new_comment, $old_comment, $new_comment_with_slashes ) {
- $content_fields = array(
- 'comment_author',
- 'comment_author_email',
- 'comment_author_url',
- 'comment_content',
- );
- $changes = array();
- foreach ( $content_fields as $field ) {
- if ( $new_comment_with_slashes[ $field ] != $old_comment[ $field ] ) {
- $changes[ $field ] = array( $new_comment[ $field ], $old_comment[ $field ] );
- }
- }
-
- if ( ! empty( $changes ) ) {
- /**
- * Signals to the sync listener that this comment's contents were modified and a sync action
- * reflecting the change(s) to the content should be sent
- *
- * @since 4.9.0
- *
- * @param int $new_comment['comment_ID'] ID of comment whose content was modified
- * @param mixed $changes Array of changed comment fields with before and after values
- */
- do_action( 'jetpack_modified_comment_contents', $new_comment['comment_ID'], $changes );
- }
- return $new_comment;
- }
-
- public function init_full_sync_listeners( $callable ) {
- add_action( 'jetpack_full_sync_comments', $callable ); // also send comments meta
- }
-
- public function init_before_send() {
- add_filter( 'jetpack_sync_before_send_wp_insert_comment', array( $this, 'expand_wp_insert_comment' ) );
-
- foreach ( array( '', 'trackback', 'pingback' ) as $comment_type ) {
- foreach ( array( 'unapproved', 'approved' ) as $comment_status ) {
- $comment_action_name = "comment_{$comment_status}_{$comment_type}";
- add_filter(
- 'jetpack_sync_before_send_' . $comment_action_name,
- array(
- $this,
- 'expand_wp_insert_comment',
- )
- );
- }
- }
-
- // full sync
- add_filter( 'jetpack_sync_before_send_jetpack_full_sync_comments', array( $this, 'expand_comment_ids' ) );
- }
-
- public function enqueue_full_sync_actions( $config, $max_items_to_enqueue, $state ) {
- global $wpdb;
- return $this->enqueue_all_ids_as_action( 'jetpack_full_sync_comments', $wpdb->comments, 'comment_ID', $this->get_where_sql( $config ), $max_items_to_enqueue, $state );
- }
-
- public function estimate_full_sync_actions( $config ) {
- global $wpdb;
-
- $query = "SELECT count(*) FROM $wpdb->comments";
-
- if ( $where_sql = $this->get_where_sql( $config ) ) {
- $query .= ' WHERE ' . $where_sql;
- }
-
- $count = $wpdb->get_var( $query );
-
- return (int) ceil( $count / self::ARRAY_CHUNK_SIZE );
- }
-
- private function get_where_sql( $config ) {
- if ( is_array( $config ) ) {
- return 'comment_ID IN (' . implode( ',', array_map( 'intval', $config ) ) . ')';
- }
-
- return null;
- }
-
- public function get_full_sync_actions() {
- return array( 'jetpack_full_sync_comments' );
- }
-
- public function count_full_sync_actions( $action_names ) {
- return $this->count_actions( $action_names, array( 'jetpack_full_sync_comments' ) );
- }
-
- function expand_wp_comment_status_change( $args ) {
- return array( $args[0], $this->filter_comment( $args[1] ) );
- }
-
- function expand_wp_insert_comment( $args ) {
- return array( $args[0], $this->filter_comment( $args[1] ) );
- }
-
- function filter_comment( $comment ) {
- /**
- * Filters whether to prevent sending comment data to .com
- *
- * Passing true to the filter will prevent the comment data from being sent
- * to the WordPress.com.
- * Instead we pass data that will still enable us to do a checksum against the
- * Jetpacks data but will prevent us from displaying the data on in the API as well as
- * other services.
- *
- * @since 4.2.0
- *
- * @param boolean false prevent post data from bing synced to WordPress.com
- * @param mixed $comment WP_COMMENT object
- */
- if ( apply_filters( 'jetpack_sync_prevent_sending_comment_data', false, $comment ) ) {
- $blocked_comment = new stdClass();
- $blocked_comment->comment_ID = $comment->comment_ID;
- $blocked_comment->comment_date = $comment->comment_date;
- $blocked_comment->comment_date_gmt = $comment->comment_date_gmt;
- $blocked_comment->comment_approved = 'jetpack_sync_blocked';
-
- return $blocked_comment;
- }
-
- return $comment;
- }
-
- // Comment Meta
- function is_whitelisted_comment_meta( $meta_key ) {
- return in_array( $meta_key, Jetpack_Sync_Settings::get_setting( 'comment_meta_whitelist' ) );
- }
-
- function filter_meta( $args ) {
- return ( $this->is_whitelisted_comment_meta( $args[2] ) ? $args : false );
- }
-
- public function expand_comment_ids( $args ) {
- $comment_ids = $args[0];
- $comments = get_comments(
- array(
- 'include_unapproved' => true,
- 'comment__in' => $comment_ids,
- )
- );
-
- return array(
- $comments,
- $this->get_metadata( $comment_ids, 'comment', Jetpack_Sync_Settings::get_setting( 'comment_meta_whitelist' ) ),
- );
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-module-constants.php b/plugins/jetpack/sync/class.jetpack-sync-module-constants.php
deleted file mode 100644
index f3af3195..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-module-constants.php
+++ /dev/null
@@ -1,125 +0,0 @@
-<?php
-
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-defaults.php';
-
-class Jetpack_Sync_Module_Constants extends Jetpack_Sync_Module {
- const CONSTANTS_CHECKSUM_OPTION_NAME = 'jetpack_constants_sync_checksum';
- const CONSTANTS_AWAIT_TRANSIENT_NAME = 'jetpack_sync_constants_await';
-
- public function name() {
- return 'constants';
- }
-
- public function init_listeners( $callable ) {
- add_action( 'jetpack_sync_constant', $callable, 10, 2 );
- }
-
- public function init_full_sync_listeners( $callable ) {
- add_action( 'jetpack_full_sync_constants', $callable );
- }
-
- public function init_before_send() {
- add_action( 'jetpack_sync_before_send_queue_sync', array( $this, 'maybe_sync_constants' ) );
-
- // full sync
- add_filter( 'jetpack_sync_before_send_jetpack_full_sync_constants', array( $this, 'expand_constants' ) );
- }
-
- public function reset_data() {
- delete_option( self::CONSTANTS_CHECKSUM_OPTION_NAME );
- delete_transient( self::CONSTANTS_AWAIT_TRANSIENT_NAME );
- }
-
- function set_constants_whitelist( $constants ) {
- $this->constants_whitelist = $constants;
- }
-
- function get_constants_whitelist() {
- return Jetpack_Sync_Defaults::get_constants_whitelist();
- }
-
- function enqueue_full_sync_actions( $config, $max_items_to_enqueue, $state ) {
- /**
- * Tells the client to sync all constants to the server
- *
- * @since 4.2.0
- *
- * @param boolean Whether to expand constants (should always be true)
- */
- do_action( 'jetpack_full_sync_constants', true );
-
- // The number of actions enqueued, and next module state (true == done)
- return array( 1, true );
- }
-
- function estimate_full_sync_actions( $config ) {
- return 1;
- }
-
- function get_full_sync_actions() {
- return array( 'jetpack_full_sync_constants' );
- }
-
- function maybe_sync_constants() {
- if ( get_transient( self::CONSTANTS_AWAIT_TRANSIENT_NAME ) ) {
- return;
- }
-
- set_transient( self::CONSTANTS_AWAIT_TRANSIENT_NAME, microtime( true ), Jetpack_Sync_Defaults::$default_sync_constants_wait_time );
-
- $constants = $this->get_all_constants();
- if ( empty( $constants ) ) {
- return;
- }
-
- $constants_checksums = (array) get_option( self::CONSTANTS_CHECKSUM_OPTION_NAME, array() );
-
- foreach ( $constants as $name => $value ) {
- $checksum = $this->get_check_sum( $value );
- // explicitly not using Identical comparison as get_option returns a string
- if ( ! $this->still_valid_checksum( $constants_checksums, $name, $checksum ) && ! is_null( $value ) ) {
- /**
- * Tells the client to sync a constant to the server
- *
- * @since 4.2.0
- *
- * @param string The name of the constant
- * @param mixed The value of the constant
- */
- do_action( 'jetpack_sync_constant', $name, $value );
- $constants_checksums[ $name ] = $checksum;
- } else {
- $constants_checksums[ $name ] = $checksum;
- }
- }
- update_option( self::CONSTANTS_CHECKSUM_OPTION_NAME, $constants_checksums );
- }
-
- // public so that we don't have to store an option for each constant
- function get_all_constants() {
- $constants_whitelist = $this->get_constants_whitelist();
- return array_combine(
- $constants_whitelist,
- array_map( array( $this, 'get_constant' ), $constants_whitelist )
- );
- }
-
- private function get_constant( $constant ) {
- return ( defined( $constant ) ) ?
- constant( $constant )
- : null;
- }
-
- public function expand_constants( $args ) {
- if ( $args[0] ) {
- $constants = $this->get_all_constants();
- $constants_checksums = array();
- foreach ( $constants as $name => $value ) {
- $constants_checksums[ $name ] = $this->get_check_sum( $value );
- }
- update_option( self::CONSTANTS_CHECKSUM_OPTION_NAME, $constants_checksums );
- return $constants;
- }
- return $args;
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-module-full-sync.php b/plugins/jetpack/sync/class.jetpack-sync-module-full-sync.php
deleted file mode 100644
index bb936482..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-module-full-sync.php
+++ /dev/null
@@ -1,366 +0,0 @@
-<?php
-
-/**
- * This class does a full resync of the database by
- * enqueuing an outbound action for every single object
- * that we care about.
- *
- * This class, and its related class Jetpack_Sync_Module, contain a few non-obvious optimisations that should be explained:
- * - we fire an action called jetpack_full_sync_start so that WPCOM can erase the contents of the cached database
- * - for each object type, we page through the object IDs and enqueue them by firing some monitored actions
- * - we load the full objects for those IDs in chunks of Jetpack_Sync_Module::ARRAY_CHUNK_SIZE (to reduce the number of MySQL calls)
- * - we fire a trigger for the entire array which the Jetpack_Sync_Listener then serializes and queues.
- */
-
-class Jetpack_Sync_Module_Full_Sync extends Jetpack_Sync_Module {
- const STATUS_OPTION_PREFIX = 'jetpack_sync_full_';
- const FULL_SYNC_TIMEOUT = 3600;
-
- public function name() {
- return 'full-sync';
- }
-
- function init_full_sync_listeners( $callable ) {
- // synthetic actions for full sync
- add_action( 'jetpack_full_sync_start', $callable );
- add_action( 'jetpack_full_sync_end', $callable );
- add_action( 'jetpack_full_sync_cancelled', $callable );
- }
-
- function init_before_send() {
- // this is triggered after actions have been processed on the server
- add_action( 'jetpack_sync_processed_actions', array( $this, 'update_sent_progress_action' ) );
- }
-
- function start( $module_configs = null ) {
- $was_already_running = $this->is_started() && ! $this->is_finished();
-
- // remove all evidence of previous full sync items and status
- $this->reset_data();
-
- if ( $was_already_running ) {
- /**
- * Fires when a full sync is cancelled.
- *
- * @since 4.2.0
- */
- do_action( 'jetpack_full_sync_cancelled' );
- }
-
- $this->update_status_option( 'started', time() );
- $this->update_status_option( 'params', $module_configs );
-
- $enqueue_status = array();
- $full_sync_config = array();
-
- // default value is full sync
- if ( ! is_array( $module_configs ) ) {
- $module_configs = array();
- foreach ( Jetpack_Sync_Modules::get_modules() as $module ) {
- $module_configs[ $module->name() ] = true;
- }
- }
-
- // set default configuration, calculate totals, and save configuration if totals > 0
- foreach ( Jetpack_Sync_Modules::get_modules() as $module ) {
- $module_name = $module->name();
- $module_config = isset( $module_configs[ $module_name ] ) ? $module_configs[ $module_name ] : false;
-
- if ( ! $module_config ) {
- continue;
- }
-
- if ( 'users' === $module_name && 'initial' === $module_config ) {
- $module_config = $module->get_initial_sync_user_config();
- }
-
- $enqueue_status[ $module_name ] = false;
-
- $total_items = $module->estimate_full_sync_actions( $module_config );
-
- // if there's information to process, configure this module
- if ( ! is_null( $total_items ) && $total_items > 0 ) {
- $full_sync_config[ $module_name ] = $module_config;
- $enqueue_status[ $module_name ] = array(
- $total_items, // total
- 0, // queued
- false, // current state
- );
- }
- }
-
- $this->set_config( $full_sync_config );
- $this->set_enqueue_status( $enqueue_status );
-
- /**
- * Fires when a full sync begins. This action is serialized
- * and sent to the server so that it knows a full sync is coming.
- *
- * @since 4.2.0
- */
- do_action( 'jetpack_full_sync_start', $full_sync_config );
-
- $this->continue_enqueuing( $full_sync_config, $enqueue_status );
-
- return true;
- }
-
- function continue_enqueuing( $configs = null, $enqueue_status = null ) {
- if ( ! $this->is_started() || $this->get_status_option( 'queue_finished' ) ) {
- return;
- }
-
- // if full sync queue is full, don't enqueue more items
- $max_queue_size_full_sync = Jetpack_Sync_Settings::get_setting( 'max_queue_size_full_sync' );
- $full_sync_queue = new Jetpack_Sync_Queue( 'full_sync' );
-
- $available_queue_slots = $max_queue_size_full_sync - $full_sync_queue->size();
-
- if ( $available_queue_slots <= 0 ) {
- return;
- } else {
- $remaining_items_to_enqueue = min( Jetpack_Sync_Settings::get_setting( 'max_enqueue_full_sync' ), $available_queue_slots );
- }
-
- if ( ! $configs ) {
- $configs = $this->get_config();
- }
-
- if ( ! $enqueue_status ) {
- $enqueue_status = $this->get_enqueue_status();
- }
-
- foreach ( Jetpack_Sync_Modules::get_modules() as $module ) {
- $module_name = $module->name();
-
- // skip module if not configured for this sync or module is done
- if ( ! isset( $configs[ $module_name ] )
- || // no module config
- ! $configs[ $module_name ]
- || // no enqueue status
- ! $enqueue_status[ $module_name ]
- || // finished enqueuing this module
- true === $enqueue_status[ $module_name ][2] ) {
- continue;
- }
-
- list( $items_enqueued, $next_enqueue_state ) = $module->enqueue_full_sync_actions( $configs[ $module_name ], $remaining_items_to_enqueue, $enqueue_status[ $module_name ][2] );
-
- $enqueue_status[ $module_name ][2] = $next_enqueue_state;
-
- // if items were processed, subtract them from the limit
- if ( ! is_null( $items_enqueued ) && $items_enqueued > 0 ) {
- $enqueue_status[ $module_name ][1] += $items_enqueued;
- $remaining_items_to_enqueue -= $items_enqueued;
- }
-
- // stop processing if we've reached our limit of items to enqueue
- if ( 0 >= $remaining_items_to_enqueue ) {
- $this->set_enqueue_status( $enqueue_status );
- return;
- }
- }
-
- $this->set_enqueue_status( $enqueue_status );
-
- // setting autoload to true means that it's faster to check whether we should continue enqueuing
- $this->update_status_option( 'queue_finished', time(), true );
-
- /**
- * Fires when a full sync ends. This action is serialized
- * and sent to the server.
- *
- * @since 4.2.0
- */
- do_action( 'jetpack_full_sync_end', '' );
- }
-
- function update_sent_progress_action( $actions ) {
-
- // quick way to map to first items with an array of arrays
- $actions_with_counts = array_count_values( array_filter( array_map( array( $this, 'get_action_name' ), $actions ) ) );
-
- if ( ! $this->is_started() || $this->is_finished() ) {
- return;
- }
-
- if ( isset( $actions_with_counts['jetpack_full_sync_start'] ) ) {
- $this->update_status_option( 'send_started', time() );
- }
-
- foreach ( Jetpack_Sync_Modules::get_modules() as $module ) {
- $module_actions = $module->get_full_sync_actions();
- $status_option_name = "{$module->name()}_sent";
- $items_sent = $this->get_status_option( $status_option_name, 0 );
-
- foreach ( $module_actions as $module_action ) {
- if ( isset( $actions_with_counts[ $module_action ] ) ) {
- $items_sent += $actions_with_counts[ $module_action ];
- }
- }
-
- if ( $items_sent > 0 ) {
- $this->update_status_option( $status_option_name, $items_sent );
- }
- }
-
- if ( isset( $actions_with_counts['jetpack_full_sync_end'] ) ) {
- $this->update_status_option( 'finished', time() );
- }
- }
-
- public function get_action_name( $queue_item ) {
- if ( is_array( $queue_item ) && isset( $queue_item[0] ) ) {
- return $queue_item[0];
- }
- return false;
- }
-
- public function is_started() {
- return ! ! $this->get_status_option( 'started' );
- }
-
- public function is_finished() {
- return ! ! $this->get_status_option( 'finished' );
- }
-
- public function get_status() {
- $status = array(
- 'started' => $this->get_status_option( 'started' ),
- 'queue_finished' => $this->get_status_option( 'queue_finished' ),
- 'send_started' => $this->get_status_option( 'send_started' ),
- 'finished' => $this->get_status_option( 'finished' ),
- 'sent' => array(),
- 'queue' => array(),
- 'config' => $this->get_status_option( 'params' ),
- 'total' => array(),
- );
-
- $enqueue_status = $this->get_enqueue_status();
-
- foreach ( Jetpack_Sync_Modules::get_modules() as $module ) {
- $name = $module->name();
-
- if ( ! isset( $enqueue_status[ $name ] ) ) {
- continue;
- }
-
- list( $total, $queued, $state ) = $enqueue_status[ $name ];
-
- if ( $total ) {
- $status['total'][ $name ] = $total;
- }
-
- if ( $queued ) {
- $status['queue'][ $name ] = $queued;
- }
-
- if ( $sent = $this->get_status_option( "{$name}_sent" ) ) {
- $status['sent'][ $name ] = $sent;
- }
- }
-
- return $status;
- }
-
- public function clear_status() {
- $prefix = self::STATUS_OPTION_PREFIX;
- Jetpack_Options::delete_raw_option( "{$prefix}_started" );
- Jetpack_Options::delete_raw_option( "{$prefix}_params" );
- Jetpack_Options::delete_raw_option( "{$prefix}_queue_finished" );
- Jetpack_Options::delete_raw_option( "{$prefix}_send_started" );
- Jetpack_Options::delete_raw_option( "{$prefix}_finished" );
-
- $this->delete_enqueue_status();
-
- foreach ( Jetpack_Sync_Modules::get_modules() as $module ) {
- Jetpack_Options::delete_raw_option( "{$prefix}_{$module->name()}_sent" );
- }
- }
-
- public function reset_data() {
- $this->clear_status();
- $this->delete_config();
- require_once dirname( __FILE__ ) . '/class.jetpack-sync-listener.php';
- $listener = Jetpack_Sync_Listener::get_instance();
- $listener->get_full_sync_queue()->reset();
- }
-
- private function get_status_option( $name, $default = null ) {
- $value = Jetpack_Options::get_raw_option( self::STATUS_OPTION_PREFIX . "_$name", $default );
-
- return is_numeric( $value ) ? intval( $value ) : $value;
- }
-
- private function update_status_option( $name, $value, $autoload = false ) {
- Jetpack_Options::update_raw_option( self::STATUS_OPTION_PREFIX . "_$name", $value, $autoload );
- }
-
- private function set_enqueue_status( $new_status ) {
- Jetpack_Options::update_raw_option( 'jetpack_sync_full_enqueue_status', $new_status );
- }
-
- private function delete_enqueue_status() {
- return Jetpack_Options::delete_raw_option( 'jetpack_sync_full_enqueue_status' );
- }
-
- private function get_enqueue_status() {
- return Jetpack_Options::get_raw_option( 'jetpack_sync_full_enqueue_status' );
- }
-
- private function set_config( $config ) {
- Jetpack_Options::update_raw_option( 'jetpack_sync_full_config', $config );
- }
-
- private function delete_config() {
- return Jetpack_Options::delete_raw_option( 'jetpack_sync_full_config' );
- }
-
- private function get_config() {
- return Jetpack_Options::get_raw_option( 'jetpack_sync_full_config' );
- }
-
- private function write_option( $name, $value ) {
- // we write our own option updating code to bypass filters/caching/etc on set_option/get_option
- global $wpdb;
- $serialized_value = maybe_serialize( $value );
- // try updating, if no update then insert
- // TODO: try to deal with the fact that unchanged values can return updated_num = 0
- // below we used "insert ignore" to at least suppress the resulting error
- $updated_num = $wpdb->query(
- $wpdb->prepare(
- "UPDATE $wpdb->options SET option_value = %s WHERE option_name = %s",
- $serialized_value,
- $name
- )
- );
-
- if ( ! $updated_num ) {
- $updated_num = $wpdb->query(
- $wpdb->prepare(
- "INSERT IGNORE INTO $wpdb->options ( option_name, option_value, autoload ) VALUES ( %s, %s, 'no' )",
- $name,
- $serialized_value
- )
- );
- }
- return $updated_num;
- }
-
- private function read_option( $name, $default = null ) {
- global $wpdb;
- $value = $wpdb->get_var(
- $wpdb->prepare(
- "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1",
- $name
- )
- );
- $value = maybe_unserialize( $value );
-
- if ( $value === null && $default !== null ) {
- return $default;
- }
-
- return $value;
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-module-import.php b/plugins/jetpack/sync/class.jetpack-sync-module-import.php
deleted file mode 100644
index bc30b283..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-module-import.php
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php
-
-class Jetpack_Sync_Module_Import extends Jetpack_Sync_Module {
-
- private $import_end = false;
-
- public function name() {
- return 'import';
- }
-
- public function init_listeners( $callable ) {
- add_action( 'export_wp', $callable );
- add_action( 'jetpack_sync_import_end', $callable, 10, 2 );
-
- // Movable type, RSS, Livejournal
- add_action( 'import_done', array( $this, 'sync_import_done' ) );
-
- // WordPress, Blogger, Livejournal, woo tax rate
- add_action( 'import_end', array( $this, 'sync_import_end' ) );
- }
-
- public function set_defaults() {
- $this->import_end = false;
- }
-
- public function sync_import_done( $importer ) {
- // We already ran an send the import
- if ( $this->import_end ) {
- return;
- }
-
- $importer_name = $this->get_importer_name( $importer );
-
- /**
- * Sync Event that tells that the import is finished
- *
- * @since 5.0.0
- *
- * $param string $importer
- */
- do_action( 'jetpack_sync_import_end', $importer, $importer_name );
- $this->import_end = true;
- }
-
- public function sync_import_end() {
- // We already ran an send the import
- if ( $this->import_end ) {
- return;
- }
-
- $this->import_end = true;
- $importer = 'unknown';
- $backtrace = wp_debug_backtrace_summary( null, 0, false );
- if ( $this->is_importer( $backtrace, 'Blogger_Importer' ) ) {
- $importer = 'blogger';
- }
-
- if ( 'unknown' === $importer && $this->is_importer( $backtrace, 'WC_Tax_Rate_Importer' ) ) {
- $importer = 'woo-tax-rate';
- }
-
- if ( 'unknown' === $importer && $this->is_importer( $backtrace, 'WP_Import' ) ) {
- // phpcs:ignore WordPress.WP.CapitalPDangit
- $importer = 'wordpress';
- }
-
- $importer_name = $this->get_importer_name( $importer );
-
- /** This filter is already documented in sync/class.jetpack-sync-module-posts.php */
- do_action( 'jetpack_sync_import_end', $importer, $importer_name );
- }
-
- private function get_importer_name( $importer ) {
- $importers = get_importers();
- return isset( $importers[ $importer ] ) ? $importers[ $importer ][0] : 'Unknown Importer';
- }
-
- private function is_importer( $backtrace, $class_name ) {
- foreach ( $backtrace as $trace ) {
- if ( strpos( $trace, $class_name ) !== false ) {
- return true;
- }
- }
-
- return false;
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-module-menus.php b/plugins/jetpack/sync/class.jetpack-sync-module-menus.php
deleted file mode 100644
index 86e2279c..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-module-menus.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-
-class Jetpack_Sync_Module_Menus extends Jetpack_Sync_Module {
- private $nav_items_just_added = array();
-
- function name() {
- return 'menus';
- }
-
- public function init_listeners( $callable ) {
- add_action( 'wp_create_nav_menu', $callable, 10, 2 );
- add_action( 'wp_update_nav_menu', array( $this, 'update_nav_menu' ), 10, 2 );
- add_action( 'wp_add_nav_menu_item', array( $this, 'update_nav_menu_add_item' ), 10, 3 );
- add_action( 'wp_update_nav_menu_item', array( $this, 'update_nav_menu_update_item' ), 10, 3 );
- add_action( 'post_updated', array( $this, 'remove_just_added_menu_item' ), 10, 2 );
-
- add_action( 'jetpack_sync_updated_nav_menu', $callable, 10, 2 );
- add_action( 'jetpack_sync_updated_nav_menu_add_item', $callable, 10, 4 );
- add_action( 'jetpack_sync_updated_nav_menu_update_item', $callable, 10, 4 );
- add_action( 'delete_nav_menu', $callable, 10, 3 );
- }
-
- public function update_nav_menu( $menu_id, $menu_data = array() ) {
- if ( empty( $menu_data ) ) {
- return;
- }
- /**
- * Helps sync log that a nav menu was updated.
- *
- * @since 5.0.0
- *
- * @param int $menu_id, the id of the menu
- * @param object $menu_data
- */
- do_action( 'jetpack_sync_updated_nav_menu', $menu_id, $menu_data );
- }
-
- public function update_nav_menu_add_item( $menu_id, $nav_item_id, $nav_item_args ) {
- $menu_data = wp_get_nav_menu_object( $menu_id );
- $this->nav_items_just_added[] = $nav_item_id;
- /**
- * Helps sync log that a new menu item was added.
- *
- * @since 5.0.0
- *
- * @param int $menu_id, the id of the menu
- * @param object $menu_data
- * @param int $nav_item_id
- * @param int $nav_item_args
- */
- do_action( 'jetpack_sync_updated_nav_menu_add_item', $menu_id, $menu_data, $nav_item_id, $nav_item_args );
- }
-
- public function update_nav_menu_update_item( $menu_id, $nav_item_id, $nav_item_args ) {
- if ( in_array( $nav_item_id, $this->nav_items_just_added ) ) {
- return;
- }
- $menu_data = wp_get_nav_menu_object( $menu_id );
- /**
- * Helps sync log that an update to the menu item happened.
- *
- * @since 5.0.0
- *
- * @param int $menu_id, the id of the menu
- * @param object $menu_data
- * @param int $nav_item_id
- * @param int $nav_item_args
- */
- do_action( 'jetpack_sync_updated_nav_menu_update_item', $menu_id, $menu_data, $nav_item_id, $nav_item_args );
- }
-
- public function remove_just_added_menu_item( $nav_item_id, $post_after ) {
- if ( 'nav_menu_item' !== $post_after->post_type ) {
- return;
- }
- $this->nav_items_just_added = array_diff( $this->nav_items_just_added, array( $nav_item_id ) );
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-module-meta.php b/plugins/jetpack/sync/class.jetpack-sync-module-meta.php
deleted file mode 100644
index e3d43544..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-module-meta.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-
-class Jetpack_Sync_Module_Meta extends Jetpack_Sync_Module {
-
- public function name() {
- return 'meta';
- }
-
- /**
- * This implementation of get_objects_by_id() is a bit hacky since we're not passing in an array of meta IDs,
- * but instead an array of post or comment IDs for which to retrieve meta for. On top of that,
- * we also pass in an associative array where we expect there to be 'meta_key' and 'ids' keys present.
- *
- * This seemed to be required since if we have missing meta on WP.com and need to fetch it, we don't know what
- * the meta key is, but we do know that we have missing meta for a given post or comment.
- *
- * @param string $object_type The type of object for which we retrieve meta. Either 'post' or 'comment'
- * @param array $config Must include 'meta_key' and 'ids' keys
- *
- * @return array
- */
- public function get_objects_by_id( $object_type, $config ) {
- global $wpdb;
-
- $table = _get_meta_table( $object_type );
-
- if ( ! $table ) {
- return array();
- }
-
- if ( ! isset( $config['meta_key'] ) || ! isset( $config['ids'] ) || ! is_array( $config['ids'] ) ) {
- return array();
- }
-
- $meta_key = $config['meta_key'];
- $ids = $config['ids'];
- $object_id_column = $object_type . '_id';
-
- // Sanitize so that the array only has integer values
- $ids_string = implode( ', ', array_map( 'intval', $ids ) );
- $metas = $wpdb->get_results(
- $wpdb->prepare(
- "SELECT * FROM {$table} WHERE {$object_id_column} IN ( {$ids_string} ) AND meta_key = %s",
- $meta_key
- )
- );
-
- $meta_objects = array();
- foreach ( (array) $metas as $meta_object ) {
- $meta_object = (array) $meta_object;
- $meta_objects[ $meta_object[ $object_id_column ] ] = array(
- 'meta_type' => $object_type,
- 'meta_id' => $meta_object['meta_id'],
- 'meta_key' => $meta_key,
- 'meta_value' => $meta_object['meta_value'],
- 'object_id' => $meta_object[ $object_id_column ],
- );
- }
-
- return $meta_objects;
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-module-network-options.php b/plugins/jetpack/sync/class.jetpack-sync-module-network-options.php
deleted file mode 100644
index 011e9bba..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-module-network-options.php
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-
-class Jetpack_Sync_Module_Network_Options extends Jetpack_Sync_Module {
- private $network_options_whitelist;
-
- public function name() {
- return 'network_options';
- }
-
- public function init_listeners( $callable ) {
- if ( ! is_multisite() ) {
- return;
- }
-
- // multi site network options
- add_action( 'add_site_option', $callable, 10, 2 );
- add_action( 'update_site_option', $callable, 10, 3 );
- add_action( 'delete_site_option', $callable, 10, 1 );
-
- $whitelist_network_option_handler = array( $this, 'whitelist_network_options' );
- add_filter( 'jetpack_sync_before_enqueue_delete_site_option', $whitelist_network_option_handler );
- add_filter( 'jetpack_sync_before_enqueue_add_site_option', $whitelist_network_option_handler );
- add_filter( 'jetpack_sync_before_enqueue_update_site_option', $whitelist_network_option_handler );
- }
-
- public function init_full_sync_listeners( $callable ) {
- add_action( 'jetpack_full_sync_network_options', $callable );
- }
-
- public function init_before_send() {
- if ( ! is_multisite() ) {
- return;
- }
-
- // full sync
- add_filter(
- 'jetpack_sync_before_send_jetpack_full_sync_network_options',
- array(
- $this,
- 'expand_network_options',
- )
- );
- }
-
- public function set_defaults() {
- $this->network_options_whitelist = Jetpack_Sync_Defaults::$default_network_options_whitelist;
- }
-
- function enqueue_full_sync_actions( $config, $max_items_to_enqueue, $state ) {
- if ( ! is_multisite() ) {
- return array( 0, true );
- }
-
- /**
- * Tells the client to sync all options to the server
- *
- * @since 4.2.0
- *
- * @param boolean Whether to expand options (should always be true)
- */
- do_action( 'jetpack_full_sync_network_options', true );
-
- // The number of actions enqueued, and next module state (true == done)
- return array( 1, true );
- }
-
- function estimate_full_sync_actions( $config ) {
- if ( ! is_multisite() ) {
- return 0;
- }
-
- return 1;
- }
-
- function get_full_sync_actions() {
- return array( 'jetpack_full_sync_network_options' );
- }
-
- function get_all_network_options() {
- $options = array();
- foreach ( $this->network_options_whitelist as $option ) {
- $options[ $option ] = get_site_option( $option );
- }
-
- return $options;
- }
-
- function set_network_options_whitelist( $options ) {
- $this->network_options_whitelist = $options;
- }
-
- function get_network_options_whitelist() {
- return $this->network_options_whitelist;
- }
-
- // reject non-whitelisted network options
- function whitelist_network_options( $args ) {
- if ( ! $this->is_whitelisted_network_option( $args[0] ) ) {
- return false;
- }
-
- return $args;
- }
-
- function is_whitelisted_network_option( $option ) {
- return is_multisite() && in_array( $option, $this->network_options_whitelist );
- }
-
- public function expand_network_options( $args ) {
- if ( $args[0] ) {
- return $this->get_all_network_options();
- }
-
- return $args;
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-module-options.php b/plugins/jetpack/sync/class.jetpack-sync-module-options.php
deleted file mode 100644
index 287e73b9..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-module-options.php
+++ /dev/null
@@ -1,173 +0,0 @@
-<?php
-
-class Jetpack_Sync_Module_Options extends Jetpack_Sync_Module {
- private $options_whitelist, $options_contentless;
-
- public function name() {
- return 'options';
- }
-
- public function init_listeners( $callable ) {
- // options
- add_action( 'added_option', $callable, 10, 2 );
- add_action( 'updated_option', $callable, 10, 3 );
- add_action( 'deleted_option', $callable, 10, 1 );
-
- // Sync Core Icon: Detect changes in Core's Site Icon and make it syncable.
- add_action( 'add_option_site_icon', array( $this, 'jetpack_sync_core_icon' ) );
- add_action( 'update_option_site_icon', array( $this, 'jetpack_sync_core_icon' ) );
- add_action( 'delete_option_site_icon', array( $this, 'jetpack_sync_core_icon' ) );
-
- $whitelist_option_handler = array( $this, 'whitelist_options' );
- add_filter( 'jetpack_sync_before_enqueue_deleted_option', $whitelist_option_handler );
- add_filter( 'jetpack_sync_before_enqueue_added_option', $whitelist_option_handler );
- add_filter( 'jetpack_sync_before_enqueue_updated_option', $whitelist_option_handler );
- }
-
- public function init_full_sync_listeners( $callable ) {
- add_action( 'jetpack_full_sync_options', $callable );
- }
-
- public function init_before_send() {
- // full sync
- add_filter( 'jetpack_sync_before_send_jetpack_full_sync_options', array( $this, 'expand_options' ) );
- }
-
- public function set_defaults() {
- $this->update_options_whitelist();
- $this->update_options_contentless();
- }
-
- public function set_late_default() {
-
- /** This filter is already documented in json-endpoints/jetpack/class.wpcom-json-api-get-option-endpoint.php */
- $late_options = apply_filters( 'jetpack_options_whitelist', array() );
- if ( ! empty( $late_options ) && is_array( $late_options ) ) {
- $this->options_whitelist = array_merge( $this->options_whitelist, $late_options );
- }
- }
-
- function enqueue_full_sync_actions( $config, $max_items_to_enqueue, $state ) {
- /**
- * Tells the client to sync all options to the server
- *
- * @since 4.2.0
- *
- * @param boolean Whether to expand options (should always be true)
- */
- do_action( 'jetpack_full_sync_options', true );
-
- // The number of actions enqueued, and next module state (true == done)
- return array( 1, true );
- }
-
- public function estimate_full_sync_actions( $config ) {
- return 1;
- }
-
- function get_full_sync_actions() {
- return array( 'jetpack_full_sync_options' );
- }
-
- // Is public so that we don't have to store so much data all the options twice.
- function get_all_options() {
- $options = array();
- $random_string = wp_generate_password();
- foreach ( $this->options_whitelist as $option ) {
- $option_value = get_option( $option, $random_string );
- if ( $option_value !== $random_string ) {
- $options[ $option ] = $option_value;
- }
- }
-
- // add theme mods
- $theme_mods_option = 'theme_mods_' . get_option( 'stylesheet' );
- $theme_mods_value = get_option( $theme_mods_option, $random_string );
- if ( $theme_mods_value === $random_string ) {
- return $options;
- }
- $this->filter_theme_mods( $theme_mods_value );
- $options[ $theme_mods_option ] = $theme_mods_value;
- return $options;
- }
-
- function update_options_whitelist() {
- $this->options_whitelist = Jetpack_Sync_Defaults::get_options_whitelist();
- }
-
- function set_options_whitelist( $options ) {
- $this->options_whitelist = $options;
- }
-
- function get_options_whitelist() {
- return $this->options_whitelist;
- }
-
- function update_options_contentless() {
- $this->options_contentless = Jetpack_Sync_Defaults::get_options_contentless();
- }
-
- function get_options_contentless() {
- return $this->options_contentless;
- }
-
- function whitelist_options( $args ) {
- // Reject non-whitelisted options
- if ( ! $this->is_whitelisted_option( $args[0] ) ) {
- return false;
- }
-
- // filter our weird array( false ) value for theme_mods_*
- if ( 'theme_mods_' === substr( $args[0], 0, 11 ) ) {
- $this->filter_theme_mods( $args[1] );
- if ( isset( $args[2] ) ) {
- $this->filter_theme_mods( $args[2] );
- }
- }
-
- // Set value(s) of contentless option to empty string(s)
- if ( $this->is_contentless_option( $args[0] ) ) {
- // Create a new array matching length of $args, containing empty strings
- $empty = array_fill( 0, count( $args ), '' );
- $empty[0] = $args[0];
- return $empty;
- }
-
- return $args;
- }
-
- function is_whitelisted_option( $option ) {
- return in_array( $option, $this->options_whitelist ) || 'theme_mods_' === substr( $option, 0, 11 );
- }
-
- private function is_contentless_option( $option ) {
- return in_array( $option, $this->options_contentless );
- }
-
- private function filter_theme_mods( &$value ) {
- if ( is_array( $value ) && isset( $value[0] ) ) {
- unset( $value[0] );
- }
- }
-
- function jetpack_sync_core_icon() {
- $url = get_site_icon_url();
-
- require_once JETPACK__PLUGIN_DIR . 'modules/site-icon/site-icon-functions.php';
- // If there's a core icon, maybe update the option. If not, fall back to Jetpack's.
- if ( ! empty( $url ) && $url !== jetpack_site_icon_url() ) {
- // This is the option that is synced with dotcom
- Jetpack_Options::update_option( 'site_icon_url', $url );
- } elseif ( empty( $url ) ) {
- Jetpack_Options::delete_option( 'site_icon_url' );
- }
- }
-
- public function expand_options( $args ) {
- if ( $args[0] ) {
- return $this->get_all_options();
- }
-
- return $args;
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-module-plugins.php b/plugins/jetpack/sync/class.jetpack-sync-module-plugins.php
deleted file mode 100644
index 876526ab..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-module-plugins.php
+++ /dev/null
@@ -1,289 +0,0 @@
-<?php
-
-class Jetpack_Sync_Module_Plugins extends Jetpack_Sync_Module {
-
- private $action_handler;
- private $plugin_info = array();
- private $plugins = array();
-
- public function name() {
- return 'plugins';
- }
-
- public function init_listeners( $callable ) {
- $this->action_handler = $callable;
-
- add_action( 'deleted_plugin', array( $this, 'deleted_plugin' ), 10, 2 );
- add_action( 'activated_plugin', $callable, 10, 2 );
- add_action( 'deactivated_plugin', $callable, 10, 2 );
- add_action( 'delete_plugin', array( $this, 'delete_plugin' ) );
- add_filter( 'upgrader_pre_install', array( $this, 'populate_plugins' ), 10, 1 );
- add_action( 'upgrader_process_complete', array( $this, 'on_upgrader_completion' ), 10, 2 );
- add_action( 'jetpack_plugin_installed', $callable, 10, 1 );
- add_action( 'jetpack_plugin_update_failed', $callable, 10, 4 );
- add_action( 'jetpack_plugins_updated', $callable, 10, 2 );
- add_action( 'admin_action_update', array( $this, 'check_plugin_edit' ) );
- add_action( 'jetpack_edited_plugin', $callable, 10, 2 );
- add_action( 'wp_ajax_edit-theme-plugin-file', array( $this, 'plugin_edit_ajax' ), 0 );
- }
-
- public function init_before_send() {
- add_filter( 'jetpack_sync_before_send_activated_plugin', array( $this, 'expand_plugin_data' ) );
- add_filter( 'jetpack_sync_before_send_deactivated_plugin', array( $this, 'expand_plugin_data' ) );
- // Note that we don't simply 'expand_plugin_data' on the 'delete_plugin' action here because the plugin file is deleted when that action finishes
- }
- public function populate_plugins( $response ) {
- $this->plugins = get_plugins();
- return $response;
- }
- public function on_upgrader_completion( $upgrader, $details ) {
- if ( ! isset( $details['type'] ) ) {
- return;
- }
- if ( 'plugin' != $details['type'] ) {
- return;
- }
-
- if ( ! isset( $details['action'] ) ) {
- return;
- }
-
- $plugins = ( isset( $details['plugins'] ) ? $details['plugins'] : null );
- if ( empty( $plugins ) ) {
- $plugins = ( isset( $details['plugin'] ) ? array( $details['plugin'] ) : null );
- }
-
- // for plugin installer
- if ( empty( $plugins ) && method_exists( $upgrader, 'plugin_info' ) ) {
- $plugins = array( $upgrader->plugin_info() );
- }
-
- if ( empty( $plugins ) ) {
- return; // We shouldn't be here
- }
-
- switch ( $details['action'] ) {
- case 'update':
- $state = array(
- 'is_autoupdate' => Jetpack_Constants::is_true( 'JETPACK_PLUGIN_AUTOUPDATE' ),
- );
- $errors = $this->get_errors( $upgrader->skin );
- if ( $errors ) {
- foreach ( $plugins as $slug ) {
- /**
- * Sync that a plugin update failed
- *
- * @since 5.8.0
- *
- * @module sync
- *
- * @param string $plugin , Plugin slug
- * @param string Error code
- * @param string Error message
- */
- do_action( 'jetpack_plugin_update_failed', $this->get_plugin_info( $slug ), $errors['code'], $errors['message'], $state );
- }
-
- return;
- }
- /**
- * Sync that a plugin update
- *
- * @since 5.8.0
- *
- * @module sync
- *
- * @param array () $plugin, Plugin Data
- */
- do_action( 'jetpack_plugins_updated', array_map( array( $this, 'get_plugin_info' ), $plugins ), $state );
- break;
- case 'install':
- }
-
- if ( 'install' === $details['action'] ) {
- /**
- * Signals to the sync listener that a plugin was installed and a sync action
- * reflecting the installation and the plugin info should be sent
- *
- * @since 5.8.0
- *
- * @module sync
- *
- * @param array () $plugin, Plugin Data
- */
- do_action( 'jetpack_plugin_installed', array_map( array( $this, 'get_plugin_info' ), $plugins ) );
-
- return;
- }
- }
-
- private function get_plugin_info( $slug ) {
- $plugins = get_plugins(); // Get the most up to date info
- if ( isset( $plugins[ $slug ] ) ) {
- return array_merge( array( 'slug' => $slug ), $plugins[ $slug ] );
- };
- // Try grabbing the info from before the update
- return isset( $this->plugins[ $slug ] ) ? array_merge( array( 'slug' => $slug ), $this->plugins[ $slug ] ) : array( 'slug' => $slug );
- }
-
- private function get_errors( $skin ) {
- $errors = method_exists( $skin, 'get_errors' ) ? $skin->get_errors() : null;
- if ( is_wp_error( $errors ) ) {
- $error_code = $errors->get_error_code();
- if ( ! empty( $error_code ) ) {
- return array(
- 'code' => $error_code,
- 'message' => $errors->get_error_message(),
- );
- }
- }
-
- if ( isset( $skin->result ) ) {
- $errors = $skin->result;
- if ( is_wp_error( $errors ) ) {
- return array(
- 'code' => $errors->get_error_code(),
- 'message' => $errors->get_error_message(),
- );
- }
-
- if ( false == $skin->result ) {
- return array(
- 'code' => 'unknown',
- 'message' => __( 'Unknown Plugin Update Failure', 'jetpack' ),
- );
- }
- }
- return false;
- }
-
- public function check_plugin_edit() {
- $screen = get_current_screen();
- if ( 'plugin-editor' !== $screen->base ||
- ! isset( $_POST['newcontent'] ) ||
- ! isset( $_POST['plugin'] )
- ) {
- return;
- }
-
- $plugin = $_POST['plugin'];
- $plugins = get_plugins();
- if ( ! isset( $plugins[ $plugin ] ) ) {
- return;
- }
-
- /**
- * Helps Sync log that a plugin was edited
- *
- * @since 4.9.0
- *
- * @param string $plugin, Plugin slug
- * @param mixed $plugins[ $plugin ], Array of plugin data
- */
- do_action( 'jetpack_edited_plugin', $plugin, $plugins[ $plugin ] );
- }
-
- public function plugin_edit_ajax() {
- // this validation is based on wp_edit_theme_plugin_file()
- $args = wp_unslash( $_POST );
- if ( empty( $args['file'] ) ) {
- return;
- }
-
- $file = $args['file'];
- if ( 0 !== validate_file( $file ) ) {
- return;
- }
-
- if ( ! isset( $args['newcontent'] ) ) {
- return;
- }
-
- if ( ! isset( $args['nonce'] ) ) {
- return;
- }
-
- if ( empty( $args['plugin'] ) ) {
- return;
- }
-
- $plugin = $args['plugin'];
- if ( ! current_user_can( 'edit_plugins' ) ) {
- return;
- }
-
- if ( ! wp_verify_nonce( $args['nonce'], 'edit-plugin_' . $file ) ) {
- return;
- }
- $plugins = get_plugins();
- if ( ! array_key_exists( $plugin, $plugins ) ) {
- return;
- }
-
- if ( 0 !== validate_file( $file, get_plugin_files( $plugin ) ) ) {
- return;
- }
-
- $real_file = WP_PLUGIN_DIR . '/' . $file;
-
- if ( ! is_writeable( $real_file ) ) {
- return;
- }
-
- $file_pointer = fopen( $real_file, 'w+' );
- if ( false === $file_pointer ) {
- return;
- }
- fclose( $file_pointer );
- /**
- * This action is documented already in this file
- */
- do_action( 'jetpack_edited_plugin', $plugin, $plugins[ $plugin ] );
- }
-
- public function delete_plugin( $plugin_path ) {
- $full_plugin_path = WP_PLUGIN_DIR . DIRECTORY_SEPARATOR . $plugin_path;
-
- // Checking for file existence because some sync plugin module tests simulate plugin installation and deletion without putting file on disk
- if ( file_exists( $full_plugin_path ) ) {
- $all_plugin_data = get_plugin_data( $full_plugin_path );
- $data = array(
- 'name' => $all_plugin_data['Name'],
- 'version' => $all_plugin_data['Version'],
- );
- } else {
- $data = array(
- 'name' => $plugin_path,
- 'version' => 'unknown',
- );
- }
-
- $this->plugin_info[ $plugin_path ] = $data;
- }
-
- public function deleted_plugin( $plugin_path, $is_deleted ) {
- call_user_func( $this->action_handler, $plugin_path, $is_deleted, $this->plugin_info[ $plugin_path ] );
- unset( $this->plugin_info[ $plugin_path ] );
- }
-
- public function expand_plugin_data( $args ) {
- $plugin_path = $args[0];
- $plugin_data = array();
-
- if ( ! function_exists( 'get_plugins' ) ) {
- require_once ABSPATH . 'wp-admin/includes/plugin.php';
- }
- $all_plugins = get_plugins();
- if ( isset( $all_plugins[ $plugin_path ] ) ) {
- $all_plugin_data = $all_plugins[ $plugin_path ];
- $plugin_data['name'] = $all_plugin_data['Name'];
- $plugin_data['version'] = $all_plugin_data['Version'];
- }
-
- return array(
- $args[0],
- $args[1],
- $plugin_data,
- );
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-module-posts.php b/plugins/jetpack/sync/class.jetpack-sync-module-posts.php
deleted file mode 100644
index 0c4655ff..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-module-posts.php
+++ /dev/null
@@ -1,428 +0,0 @@
-<?php
-
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-settings.php';
-
-class Jetpack_Sync_Module_Posts extends Jetpack_Sync_Module {
-
- private $just_published = array();
- private $previous_status = array();
- private $action_handler;
- private $import_end = false;
-
- const DEFAULT_PREVIOUS_STATE = 'new';
-
- public function name() {
- return 'posts';
- }
-
- public function get_object_by_id( $object_type, $id ) {
- if ( $object_type === 'post' && $post = get_post( intval( $id ) ) ) {
- return $this->filter_post_content_and_add_links( $post );
- }
-
- return false;
- }
-
- public function init_listeners( $callable ) {
- $this->action_handler = $callable;
-
- add_action( 'wp_insert_post', array( $this, 'wp_insert_post' ), 11, 3 );
- add_action( 'jetpack_sync_save_post', $callable, 10, 4 );
-
- add_action( 'deleted_post', $callable, 10 );
- add_action( 'jetpack_published_post', $callable, 10, 2 );
-
- add_action( 'transition_post_status', array( $this, 'save_published' ), 10, 3 );
- add_filter( 'jetpack_sync_before_enqueue_jetpack_sync_save_post', array( $this, 'filter_blacklisted_post_types' ) );
-
- // listen for meta changes
- $this->init_listeners_for_meta_type( 'post', $callable );
- $this->init_meta_whitelist_handler( 'post', array( $this, 'filter_meta' ) );
-
- add_action( 'jetpack_daily_akismet_meta_cleanup_before', array( $this, 'daily_akismet_meta_cleanup_before' ) );
- add_action( 'jetpack_daily_akismet_meta_cleanup_after', array( $this, 'daily_akismet_meta_cleanup_after' ) );
- add_action( 'jetpack_post_meta_batch_delete', $callable, 10, 2 );
-
- }
-
-
- public function daily_akismet_meta_cleanup_before( $feedback_ids ) {
- remove_action( 'deleted_post_meta', $this->action_handler );
- /**
- * Used for syncing deletion of batch post meta
- *
- * @since 6.1.0
- *
- * @module sync
- *
- * @param array $feedback_ids feedback post IDs
- * @param string $meta_key to be deleted
- */
- do_action( 'jetpack_post_meta_batch_delete', $feedback_ids, '_feedback_akismet_values' );
- }
-
- public function daily_akismet_meta_cleanup_after( $feedback_ids ) {
- add_action( 'deleted_post_meta', $this->action_handler );
- }
-
- public function init_full_sync_listeners( $callable ) {
- add_action( 'jetpack_full_sync_posts', $callable ); // also sends post meta
- }
-
- public function init_before_send() {
- add_filter( 'jetpack_sync_before_send_jetpack_sync_save_post', array( $this, 'expand_jetpack_sync_save_post' ) );
-
- // full sync
- add_filter( 'jetpack_sync_before_send_jetpack_full_sync_posts', array( $this, 'expand_post_ids' ) );
- }
-
- public function enqueue_full_sync_actions( $config, $max_items_to_enqueue, $state ) {
- global $wpdb;
-
- return $this->enqueue_all_ids_as_action( 'jetpack_full_sync_posts', $wpdb->posts, 'ID', $this->get_where_sql( $config ), $max_items_to_enqueue, $state );
- }
-
- public function estimate_full_sync_actions( $config ) {
- global $wpdb;
-
- $query = "SELECT count(*) FROM $wpdb->posts WHERE " . $this->get_where_sql( $config );
- $count = $wpdb->get_var( $query );
-
- return (int) ceil( $count / self::ARRAY_CHUNK_SIZE );
- }
-
- private function get_where_sql( $config ) {
- $where_sql = Jetpack_Sync_Settings::get_blacklisted_post_types_sql();
-
- // config is a list of post IDs to sync
- if ( is_array( $config ) ) {
- $where_sql .= ' AND ID IN (' . implode( ',', array_map( 'intval', $config ) ) . ')';
- }
-
- return $where_sql;
- }
-
- function get_full_sync_actions() {
- return array( 'jetpack_full_sync_posts' );
- }
-
- /**
- * Process content before send
- *
- * @param array $args wp_insert_post arguments
- *
- * @return array
- */
- function expand_jetpack_sync_save_post( $args ) {
- list( $post_id, $post, $update, $previous_state ) = $args;
- return array( $post_id, $this->filter_post_content_and_add_links( $post ), $update, $previous_state );
- }
-
- function filter_blacklisted_post_types( $args ) {
- $post = $args[1];
-
- if ( in_array( $post->post_type, Jetpack_Sync_Settings::get_setting( 'post_types_blacklist' ) ) ) {
- return false;
- }
-
- return $args;
- }
-
- // Meta
- function filter_meta( $args ) {
- if ( $this->is_post_type_allowed( $args[1] ) && $this->is_whitelisted_post_meta( $args[2] ) ) {
- return $args;
- }
-
- return false;
- }
-
- function is_whitelisted_post_meta( $meta_key ) {
- // _wpas_skip_ is used by publicize
- return in_array( $meta_key, Jetpack_Sync_Settings::get_setting( 'post_meta_whitelist' ) ) || wp_startswith( $meta_key, '_wpas_skip_' );
- }
-
- function is_post_type_allowed( $post_id ) {
- $post = get_post( intval( $post_id ) );
- if ( $post->post_type ) {
- return ! in_array( $post->post_type, Jetpack_Sync_Settings::get_setting( 'post_types_blacklist' ) );
- }
- return false;
- }
-
- function remove_embed() {
- global $wp_embed;
- remove_filter( 'the_content', array( $wp_embed, 'run_shortcode' ), 8 );
- // remove the embed shortcode since we would do the part later.
- remove_shortcode( 'embed' );
- // Attempts to embed all URLs in a post
- remove_filter( 'the_content', array( $wp_embed, 'autoembed' ), 8 );
- }
-
- function add_embed() {
- global $wp_embed;
- add_filter( 'the_content', array( $wp_embed, 'run_shortcode' ), 8 );
- // Shortcode placeholder for strip_shortcodes()
- add_shortcode( 'embed', '__return_false' );
- // Attempts to embed all URLs in a post
- add_filter( 'the_content', array( $wp_embed, 'autoembed' ), 8 );
- }
-
- // Expands wp_insert_post to include filtered content
- function filter_post_content_and_add_links( $post_object ) {
- global $post;
- $post = $post_object;
-
- // return non existant post
- $post_type = get_post_type_object( $post->post_type );
- if ( empty( $post_type ) || ! is_object( $post_type ) ) {
- $non_existant_post = new stdClass();
- $non_existant_post->ID = $post->ID;
- $non_existant_post->post_modified = $post->post_modified;
- $non_existant_post->post_modified_gmt = $post->post_modified_gmt;
- $non_existant_post->post_status = 'jetpack_sync_non_registered_post_type';
-
- return $non_existant_post;
- }
- /**
- * Filters whether to prevent sending post data to .com
- *
- * Passing true to the filter will prevent the post data from being sent
- * to the WordPress.com.
- * Instead we pass data that will still enable us to do a checksum against the
- * Jetpacks data but will prevent us from displaying the data on in the API as well as
- * other services.
- *
- * @since 4.2.0
- *
- * @param boolean false prevent post data from being synced to WordPress.com
- * @param mixed $post WP_POST object
- */
- if ( apply_filters( 'jetpack_sync_prevent_sending_post_data', false, $post ) ) {
- // We only send the bare necessary object to be able to create a checksum.
- $blocked_post = new stdClass();
- $blocked_post->ID = $post->ID;
- $blocked_post->post_modified = $post->post_modified;
- $blocked_post->post_modified_gmt = $post->post_modified_gmt;
- $blocked_post->post_status = 'jetpack_sync_blocked';
-
- return $blocked_post;
- }
-
- // lets not do oembed just yet.
- $this->remove_embed();
-
- if ( 0 < strlen( $post->post_password ) ) {
- $post->post_password = 'auto-' . wp_generate_password( 10, false );
- }
-
- /** This filter is already documented in core. wp-includes/post-template.php */
- if ( Jetpack_Sync_Settings::get_setting( 'render_filtered_content' ) && $post_type->public ) {
- global $shortcode_tags;
- /**
- * Filter prevents some shortcodes from expanding.
- *
- * Since we can can expand some type of shortcode better on the .com side and make the
- * expansion more relevant to contexts. For example [galleries] and subscription emails
- *
- * @since 4.5.0
- *
- * @param array of shortcode tags to remove.
- */
- $shortcodes_to_remove = apply_filters(
- 'jetpack_sync_do_not_expand_shortcodes',
- array(
- 'gallery',
- 'slideshow',
- )
- );
- $removed_shortcode_callbacks = array();
- foreach ( $shortcodes_to_remove as $shortcode ) {
- if ( isset( $shortcode_tags[ $shortcode ] ) ) {
- $removed_shortcode_callbacks[ $shortcode ] = $shortcode_tags[ $shortcode ];
- }
- }
-
- array_map( 'remove_shortcode', array_keys( $removed_shortcode_callbacks ) );
-
- $post->post_content_filtered = apply_filters( 'the_content', $post->post_content );
- $post->post_excerpt_filtered = apply_filters( 'the_excerpt', $post->post_excerpt );
-
- foreach ( $removed_shortcode_callbacks as $shortcode => $callback ) {
- add_shortcode( $shortcode, $callback );
- }
- }
-
- $this->add_embed();
-
- if ( has_post_thumbnail( $post->ID ) ) {
- $image_attributes = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'full' );
- if ( is_array( $image_attributes ) && isset( $image_attributes[0] ) ) {
- $post->featured_image = $image_attributes[0];
- }
- }
-
- $post->permalink = get_permalink( $post->ID );
- $post->shortlink = wp_get_shortlink( $post->ID );
-
- if ( function_exists( 'amp_get_permalink' ) ) {
- $post->amp_permalink = amp_get_permalink( $post->ID );
- }
-
- return $post;
- }
-
- public function save_published( $new_status, $old_status, $post ) {
- if ( 'publish' === $new_status && 'publish' !== $old_status ) {
- $this->just_published[ $post->ID ] = true;
- }
-
- $this->previous_status[ $post->ID ] = $old_status;
- }
-
- /*
- * When publishing or updating a post, the Gutenberg editor sends two requests:
- * 1. sent to WP REST API endpoint `wp-json/wp/v2/posts/$id`
- * 2. sent to wp-admin/post.php `?post=$id&action=edit&classic-editor=1&meta_box=1`
- *
- * The 2nd request is to update post meta, which is not supported on WP REST API.
- * When syncing post data, we will include if this was a meta box update.
- */
- public function is_gutenberg_meta_box_update() {
- return (
- isset( $_POST['action'], $_GET['classic-editor'], $_GET['meta_box'] ) &&
- 'editpost' === $_POST['action'] &&
- '1' === $_GET['classic-editor'] &&
- '1' === $_GET['meta_box']
- );
- }
-
- public function wp_insert_post( $post_ID, $post = null, $update = null ) {
- if ( ! is_numeric( $post_ID ) || is_null( $post ) ) {
- return;
- }
-
- // workaround for https://github.com/woocommerce/woocommerce/issues/18007
- if ( $post && 'shop_order' === $post->post_type ) {
- $post = get_post( $post_ID );
- }
-
- $previous_status = isset( $this->previous_status[ $post_ID ] ) ?
- $this->previous_status[ $post_ID ] :
- self::DEFAULT_PREVIOUS_STATE;
-
- $just_published = isset( $this->just_published[ $post_ID ] ) ?
- $this->just_published[ $post_ID ] :
- false;
-
- $state = array(
- 'is_auto_save' => (bool) Jetpack_Constants::get_constant( 'DOING_AUTOSAVE' ),
- 'previous_status' => $previous_status,
- 'just_published' => $just_published,
- 'is_gutenberg_meta_box_update' => $this->is_gutenberg_meta_box_update(),
- );
- /**
- * Filter that is used to add to the post flags ( meta data ) when a post gets published
- *
- * @since 5.8.0
- *
- * @param int $post_ID the post ID
- * @param mixed $post WP_POST object
- * @param bool $update Whether this is an existing post being updated or not.
- * @param mixed $state state
- *
- * @module sync
- */
- do_action( 'jetpack_sync_save_post', $post_ID, $post, $update, $state );
- unset( $this->previous_status[ $post_ID ] );
- $this->send_published( $post_ID, $post );
- }
-
- public function send_published( $post_ID, $post ) {
- if ( ! isset( $this->just_published[ $post_ID ] ) ) {
- return;
- }
-
- // Post revisions cause race conditions where this send_published add the action before the actual post gets synced
- if ( wp_is_post_autosave( $post ) || wp_is_post_revision( $post ) ) {
- return;
- }
-
- $post_flags = array(
- 'post_type' => $post->post_type,
- );
-
- $author_user_object = get_user_by( 'id', $post->post_author );
- if ( $author_user_object ) {
- $post_flags['author'] = array(
- 'id' => $post->post_author,
- 'wpcom_user_id' => get_user_meta( $post->post_author, 'wpcom_user_id', true ),
- 'display_name' => $author_user_object->display_name,
- 'email' => $author_user_object->user_email,
- 'translated_role' => Jetpack::translate_user_to_role( $author_user_object ),
- );
- }
-
- /**
- * Filter that is used to add to the post flags ( meta data ) when a post gets published
- *
- * @since 4.4.0
- *
- * @param mixed array post flags that are added to the post
- * @param mixed $post WP_POST object
- */
- $flags = apply_filters( 'jetpack_published_post_flags', $post_flags, $post );
-
- /**
- * Action that gets synced when a post type gets published.
- *
- * @since 4.4.0
- *
- * @param int $post_ID
- * @param mixed array $flags post flags that are added to the post
- */
- do_action( 'jetpack_published_post', $post_ID, $flags );
- unset( $this->just_published[ $post_ID ] );
-
- /**
- * Send additional sync action for Activity Log when post is a Customizer publish
- */
- if ( 'customize_changeset' == $post->post_type ) {
- $post_content = json_decode( $post->post_content, true );
- foreach ( $post_content as $key => $value ) {
- // Skip if it isn't a widget
- if ( 'widget_' != substr( $key, 0, strlen( 'widget_' ) ) ) {
- continue;
- }
- // Change key from "widget_archives[2]" to "archives-2"
- $key = str_replace( 'widget_', '', $key );
- $key = str_replace( '[', '-', $key );
- $key = str_replace( ']', '', $key );
-
- global $wp_registered_widgets;
- if ( isset( $wp_registered_widgets[ $key ] ) ) {
- $widget_data = array(
- 'name' => $wp_registered_widgets[ $key ]['name'],
- 'id' => $key,
- 'title' => $value['value']['title'],
- );
- do_action( 'jetpack_widget_edited', $widget_data );
- }
- }
- }
- }
-
- public function expand_post_ids( $args ) {
- $post_ids = $args[0];
-
- $posts = array_filter( array_map( array( 'WP_Post', 'get_instance' ), $post_ids ) );
- $posts = array_map( array( $this, 'filter_post_content_and_add_links' ), $posts );
- $posts = array_values( $posts ); // reindex in case posts were deleted
-
- return array(
- $posts,
- $this->get_metadata( $post_ids, 'post', Jetpack_Sync_Settings::get_setting( 'post_meta_whitelist' ) ),
- $this->get_term_relationships( $post_ids ),
- );
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-module-protect.php b/plugins/jetpack/sync/class.jetpack-sync-module-protect.php
deleted file mode 100644
index a8dcd43e..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-module-protect.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-/**
- * logs bruteprotect failed logins via sync
- */
-class Jetpack_Sync_Module_Protect extends Jetpack_Sync_Module {
-
- function name() {
- return 'protect';
- }
-
- function init_listeners( $callback ) {
- add_action( 'jpp_log_failed_attempt', array( $this, 'maybe_log_failed_login_attempt' ) );
- add_action( 'jetpack_valid_failed_login_attempt', $callback );
- }
-
- function maybe_log_failed_login_attempt( $failed_attempt ) {
- $protect = Jetpack_Protect_Module::instance();
- if ( $protect->has_login_ability() && ! Jetpack_Constants::is_true( 'XMLRPC_REQUEST' ) ) {
- do_action( 'jetpack_valid_failed_login_attempt', $failed_attempt );
- }
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-module-stats.php b/plugins/jetpack/sync/class.jetpack-sync-module-stats.php
deleted file mode 100644
index d23d3e00..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-module-stats.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-class Jetpack_Sync_Module_Stats extends Jetpack_Sync_Module {
-
- function name() {
- return 'stats';
- }
-
- function init_listeners( $callback ) {
- add_action( 'jetpack_heartbeat', array( $this, 'sync_site_stats' ), 20 );
- add_action( 'jetpack_sync_heartbeat_stats', $callback );
- }
- /*
- * This namespaces the action that we sync.
- * So that we can differentiate it from future actions.
- */
- public function sync_site_stats() {
- do_action( 'jetpack_sync_heartbeat_stats' );
- }
-
- public function init_before_send() {
- add_filter( 'jetpack_sync_before_send_jetpack_sync_heartbeat_stats', array( $this, 'add_stats' ) );
- }
-
- public function add_stats() {
- return array( Jetpack::get_stat_data( false, false ) );
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-module-terms.php b/plugins/jetpack/sync/class.jetpack-sync-module-terms.php
deleted file mode 100644
index 59f3da09..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-module-terms.php
+++ /dev/null
@@ -1,120 +0,0 @@
-<?php
-
-class Jetpack_Sync_Module_Terms extends Jetpack_Sync_Module {
- private $taxonomy_whitelist;
-
- function name() {
- return 'terms';
- }
-
- function init_listeners( $callable ) {
- add_action( 'created_term', array( $this, 'save_term_handler' ), 10, 3 );
- add_action( 'edited_term', array( $this, 'save_term_handler' ), 10, 3 );
- add_action( 'jetpack_sync_save_term', $callable );
- add_action( 'jetpack_sync_add_term', $callable );
- add_action( 'delete_term', $callable, 10, 4 );
- add_action( 'set_object_terms', $callable, 10, 6 );
- add_action( 'deleted_term_relationships', $callable, 10, 2 );
- }
-
- public function init_full_sync_listeners( $callable ) {
- add_action( 'jetpack_full_sync_terms', $callable, 10, 2 );
- }
-
- function init_before_send() {
- // full sync
- add_filter( 'jetpack_sync_before_send_jetpack_full_sync_terms', array( $this, 'expand_term_ids' ) );
- }
-
- function enqueue_full_sync_actions( $config, $max_items_to_enqueue, $state ) {
- global $wpdb;
-
- // TODO: process state
- $taxonomies = get_taxonomies();
- $total_chunks_counter = 0;
- foreach ( $taxonomies as $taxonomy ) {
- // I hope this is never bigger than RAM...
- $term_ids = $wpdb->get_col( $wpdb->prepare( "SELECT term_id FROM $wpdb->term_taxonomy WHERE taxonomy = %s", $taxonomy ) ); // Should we set a limit here?
- // Request posts in groups of N for efficiency
- $chunked_term_ids = array_chunk( $term_ids, self::ARRAY_CHUNK_SIZE );
-
- // Send each chunk as an array of objects
- foreach ( $chunked_term_ids as $chunk ) {
- do_action( 'jetpack_full_sync_terms', $chunk, $taxonomy );
- $total_chunks_counter ++;
- }
- }
-
- return array( $total_chunks_counter, true );
- }
-
- function estimate_full_sync_actions( $config ) {
- // TODO - make this (and method above) more efficient for large numbers of terms or taxonomies
- global $wpdb;
-
- $taxonomies = get_taxonomies();
- $total_chunks_counter = 0;
- foreach ( $taxonomies as $taxonomy ) {
- $total_ids = $wpdb->get_var( $wpdb->prepare( "SELECT count(term_id) FROM $wpdb->term_taxonomy WHERE taxonomy = %s", $taxonomy ) );
- $total_chunks_counter += (int) ceil( $total_ids / self::ARRAY_CHUNK_SIZE );
- }
-
- return $total_chunks_counter;
- }
-
- function get_full_sync_actions() {
- return array( 'jetpack_full_sync_terms' );
- }
-
- function save_term_handler( $term_id, $tt_id, $taxonomy ) {
- if ( class_exists( 'WP_Term' ) ) {
- $term_object = WP_Term::get_instance( $term_id, $taxonomy );
- } else {
- $term_object = get_term_by( 'id', $term_id, $taxonomy );
- }
-
- $current_filter = current_filter();
-
- if ( 'created_term' === $current_filter ) {
- /**
- * Fires when the client needs to add a new term
- *
- * @since 5.0.0
- *
- * @param object the Term object
- */
- do_action( 'jetpack_sync_add_term', $term_object );
- return;
- }
-
- /**
- * Fires when the client needs to update a term
- *
- * @since 4.2.0
- *
- * @param object the Term object
- */
- do_action( 'jetpack_sync_save_term', $term_object );
- }
-
- function set_taxonomy_whitelist( $taxonomies ) {
- $this->taxonomy_whitelist = $taxonomies;
- }
-
- function set_defaults() {
- $this->taxonomy_whitelist = Jetpack_Sync_Defaults::$default_taxonomy_whitelist;
- }
-
- public function expand_term_ids( $args ) {
- $term_ids = $args[0];
- $taxonomy = $args[1];
-
- return get_terms(
- array(
- 'taxonomy' => $taxonomy,
- 'hide_empty' => false,
- 'include' => $term_ids,
- )
- );
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-module-themes.php b/plugins/jetpack/sync/class.jetpack-sync-module-themes.php
deleted file mode 100644
index e8b4185d..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-module-themes.php
+++ /dev/null
@@ -1,612 +0,0 @@
-<?php
-
-class Jetpack_Sync_Module_Themes extends Jetpack_Sync_Module {
- function name() {
- return 'themes';
- }
-
- public function init_listeners( $callable ) {
- add_action( 'switch_theme', array( $this, 'sync_theme_support' ), 10, 3 );
- add_action( 'jetpack_sync_current_theme_support', $callable, 10, 2 );
- add_action( 'upgrader_process_complete', array( $this, 'check_upgrader' ), 10, 2 );
- add_action( 'jetpack_installed_theme', $callable, 10, 2 );
- add_action( 'jetpack_updated_themes', $callable, 10, 2 );
- add_action( 'delete_site_transient_update_themes', array( $this, 'detect_theme_deletion' ) );
- add_action( 'jetpack_deleted_theme', $callable, 10, 2 );
- add_filter( 'wp_redirect', array( $this, 'detect_theme_edit' ) );
- add_action( 'jetpack_edited_theme', $callable, 10, 2 );
- add_action( 'wp_ajax_edit-theme-plugin-file', array( $this, 'theme_edit_ajax' ), 0 );
- add_action( 'update_site_option_allowedthemes', array( $this, 'sync_network_allowed_themes_change' ), 10, 4 );
- add_action( 'jetpack_network_disabled_themes', $callable, 10, 2 );
- add_action( 'jetpack_network_enabled_themes', $callable, 10, 2 );
-
- // Sidebar updates.
- add_action( 'update_option_sidebars_widgets', array( $this, 'sync_sidebar_widgets_actions' ), 10, 2 );
-
- add_action( 'jetpack_widget_added', $callable, 10, 4 );
- add_action( 'jetpack_widget_removed', $callable, 10, 4 );
- add_action( 'jetpack_widget_moved_to_inactive', $callable, 10, 2 );
- add_action( 'jetpack_cleared_inactive_widgets', $callable );
- add_action( 'jetpack_widget_reordered', $callable, 10, 2 );
- add_filter( 'widget_update_callback', array( $this, 'sync_widget_edit' ), 10, 4 );
- add_action( 'jetpack_widget_edited', $callable );
- }
-
- public function sync_widget_edit( $instance, $new_instance, $old_instance, $widget_object ) {
- if ( empty( $old_instance ) ) {
- return $instance;
- }
-
- // Don't trigger sync action if this is an ajax request, because Customizer makes them during preview before saving changes
- if ( defined( 'DOING_AJAX' ) && DOING_AJAX && isset( $_POST['customized'] ) ) {
- return $instance;
- }
-
- $widget = array(
- 'name' => $widget_object->name,
- 'id' => $widget_object->id,
- 'title' => isset( $new_instance['title'] ) ? $new_instance['title'] : '',
- );
- /**
- * Trigger action to alert $callable sync listener that a widget was edited
- *
- * @since 5.0.0
- *
- * @param string $widget_name , Name of edited widget
- */
- do_action( 'jetpack_widget_edited', $widget );
-
- return $instance;
- }
-
- public function sync_network_allowed_themes_change( $option, $value, $old_value, $network_id ) {
- $all_enabled_theme_slugs = array_keys( $value );
-
- if ( count( $old_value ) > count( $value ) ) {
-
- // Suppress jetpack_network_disabled_themes sync action when theme is deleted
- $delete_theme_call = $this->get_delete_theme_call();
- if ( ! empty( $delete_theme_call ) ) {
- return;
- }
-
- $newly_disabled_theme_names = array_keys( array_diff_key( $old_value, $value ) );
- $newly_disabled_themes = $this->get_theme_details_for_slugs( $newly_disabled_theme_names );
- /**
- * Trigger action to alert $callable sync listener that network themes were disabled
- *
- * @since 5.0.0
- *
- * @param mixed $newly_disabled_themes, Array of info about network disabled themes
- * @param mixed $all_enabled_theme_slugs, Array of slugs of all enabled themes
- */
- do_action( 'jetpack_network_disabled_themes', $newly_disabled_themes, $all_enabled_theme_slugs );
- return;
- }
-
- $newly_enabled_theme_names = array_keys( array_diff_key( $value, $old_value ) );
- $newly_enabled_themes = $this->get_theme_details_for_slugs( $newly_enabled_theme_names );
- /**
- * Trigger action to alert $callable sync listener that network themes were enabled
- *
- * @since 5.0.0
- *
- * @param mixed $newly_enabled_themes , Array of info about network enabled themes
- * @param mixed $all_enabled_theme_slugs, Array of slugs of all enabled themes
- */
- do_action( 'jetpack_network_enabled_themes', $newly_enabled_themes, $all_enabled_theme_slugs );
- }
-
- private function get_theme_details_for_slugs( $theme_slugs ) {
- $theme_data = array();
- foreach ( $theme_slugs as $slug ) {
- $theme = wp_get_theme( $slug );
- $theme_data[ $slug ] = array(
- 'name' => $theme->get( 'Name' ),
- 'version' => $theme->get( 'Version' ),
- 'uri' => $theme->get( 'ThemeURI' ),
- 'slug' => $slug,
- );
- }
- return $theme_data;
- }
-
- public function detect_theme_edit( $redirect_url ) {
- $url = wp_parse_url( admin_url( $redirect_url ) );
- $theme_editor_url = wp_parse_url( admin_url( 'theme-editor.php' ) );
-
- if ( $theme_editor_url['path'] !== $url['path'] ) {
- return $redirect_url;
- }
-
- $query_params = array();
- wp_parse_str( $url['query'], $query_params );
- if (
- ! isset( $_POST['newcontent'] ) ||
- ! isset( $query_params['file'] ) ||
- ! isset( $query_params['theme'] ) ||
- ! isset( $query_params['updated'] )
- ) {
- return $redirect_url;
- }
- $theme = wp_get_theme( $query_params['theme'] );
- $theme_data = array(
- 'name' => $theme->get( 'Name' ),
- 'version' => $theme->get( 'Version' ),
- 'uri' => $theme->get( 'ThemeURI' ),
- );
-
- /**
- * Trigger action to alert $callable sync listener that a theme was edited
- *
- * @since 5.0.0
- *
- * @param string $query_params['theme'], Slug of edited theme
- * @param string $theme_data, Information about edited them
- */
- do_action( 'jetpack_edited_theme', $query_params['theme'], $theme_data );
-
- return $redirect_url;
- }
-
- public function theme_edit_ajax() {
- $args = wp_unslash( $_POST );
-
- if ( empty( $args['theme'] ) ) {
- return;
- }
-
- if ( empty( $args['file'] ) ) {
- return;
- }
- $file = $args['file'];
- if ( 0 !== validate_file( $file ) ) {
- return;
- }
-
- if ( ! isset( $args['newcontent'] ) ) {
- return;
- }
-
- if ( ! isset( $args['nonce'] ) ) {
- return;
- }
-
- $stylesheet = $args['theme'];
- if ( 0 !== validate_file( $stylesheet ) ) {
- return;
- }
-
- if ( ! current_user_can( 'edit_themes' ) ) {
- return;
- }
-
- $theme = wp_get_theme( $stylesheet );
- if ( ! $theme->exists() ) {
- return;
- }
-
- $real_file = $theme->get_stylesheet_directory() . '/' . $file;
- if ( ! wp_verify_nonce( $args['nonce'], 'edit-theme_' . $real_file . $stylesheet ) ) {
- return;
- }
-
- if ( $theme->errors() && 'theme_no_stylesheet' === $theme->errors()->get_error_code() ) {
- return;
- }
-
- $editable_extensions = wp_get_theme_file_editable_extensions( $theme );
-
- $allowed_files = array();
- foreach ( $editable_extensions as $type ) {
- switch ( $type ) {
- case 'php':
- $allowed_files = array_merge( $allowed_files, $theme->get_files( 'php', -1 ) );
- break;
- case 'css':
- $style_files = $theme->get_files( 'css', -1 );
- $allowed_files['style.css'] = $style_files['style.css'];
- $allowed_files = array_merge( $allowed_files, $style_files );
- break;
- default:
- $allowed_files = array_merge( $allowed_files, $theme->get_files( $type, -1 ) );
- break;
- }
- }
-
- if ( 0 !== validate_file( $real_file, $allowed_files ) ) {
- return;
- }
-
- // Ensure file is real.
- if ( ! is_file( $real_file ) ) {
- return;
- }
-
- // Ensure file extension is allowed.
- $extension = null;
- if ( preg_match( '/\.([^.]+)$/', $real_file, $matches ) ) {
- $extension = strtolower( $matches[1] );
- if ( ! in_array( $extension, $editable_extensions, true ) ) {
- return;
- }
- }
-
- if ( ! is_writeable( $real_file ) ) {
- return;
- }
-
- $file_pointer = fopen( $real_file, 'w+' );
- if ( false === $file_pointer ) {
- return;
- }
- fclose( $file_pointer );
-
- $theme_data = array(
- 'name' => $theme->get( 'Name' ),
- 'version' => $theme->get( 'Version' ),
- 'uri' => $theme->get( 'ThemeURI' ),
- );
-
- /**
- * This action is documented already in this file
- */
- do_action( 'jetpack_edited_theme', $stylesheet, $theme_data );
-
- }
-
- public function detect_theme_deletion() {
- $delete_theme_call = $this->get_delete_theme_call();
- if ( empty( $delete_theme_call ) ) {
- return;
- }
-
- $slug = $delete_theme_call['args'][0];
- $theme = wp_get_theme( $slug );
- $theme_data = array(
- 'name' => $theme->get( 'Name' ),
- 'version' => $theme->get( 'Version' ),
- 'uri' => $theme->get( 'ThemeURI' ),
- 'slug' => $slug,
- );
-
- /**
- * Signals to the sync listener that a theme was deleted and a sync action
- * reflecting the deletion and theme slug should be sent
- *
- * @since 5.0.0
- *
- * @param string $slug Theme slug
- * @param array $theme_data Theme info Since 5.3
- */
- do_action( 'jetpack_deleted_theme', $slug, $theme_data );
- }
-
- public function check_upgrader( $upgrader, $details ) {
- if ( ! isset( $details['type'] ) ||
- 'theme' !== $details['type'] ||
- is_wp_error( $upgrader->skin->result ) ||
- ! method_exists( $upgrader, 'theme_info' )
- ) {
- return;
- }
-
- if ( 'install' === $details['action'] ) {
- $theme = $upgrader->theme_info();
- if ( ! $theme instanceof WP_Theme ) {
- return;
- }
- $theme_info = array(
- 'name' => $theme->get( 'Name' ),
- 'version' => $theme->get( 'Version' ),
- 'uri' => $theme->get( 'ThemeURI' ),
- );
-
- /**
- * Signals to the sync listener that a theme was installed and a sync action
- * reflecting the installation and the theme info should be sent
- *
- * @since 4.9.0
- *
- * @param string $theme->theme_root Text domain of the theme
- * @param mixed $theme_info Array of abbreviated theme info
- */
- do_action( 'jetpack_installed_theme', $theme->stylesheet, $theme_info );
- }
-
- if ( 'update' === $details['action'] ) {
- $themes = array();
-
- if ( empty( $details['themes'] ) && isset( $details['theme'] ) ) {
- $details['themes'] = array( $details['theme'] );
- }
-
- foreach ( $details['themes'] as $theme_slug ) {
- $theme = wp_get_theme( $theme_slug );
-
- if ( ! $theme instanceof WP_Theme ) {
- continue;
- }
-
- $themes[ $theme_slug ] = array(
- 'name' => $theme->get( 'Name' ),
- 'version' => $theme->get( 'Version' ),
- 'uri' => $theme->get( 'ThemeURI' ),
- 'stylesheet' => $theme->stylesheet,
- );
- }
-
- if ( empty( $themes ) ) {
- return;
- }
-
- /**
- * Signals to the sync listener that one or more themes was updated and a sync action
- * reflecting the update and the theme info should be sent
- *
- * @since 6.2.0
- *
- * @param mixed $themes Array of abbreviated theme info
- */
- do_action( 'jetpack_updated_themes', $themes );
- }
-
- }
-
- public function init_full_sync_listeners( $callable ) {
- add_action( 'jetpack_full_sync_theme_data', $callable );
- }
-
- public function sync_theme_support( $new_name, $new_theme = null, $old_theme = null ) {
- $previous_theme = $this->get_theme_support_info( $old_theme );
-
- /**
- * Fires when the client needs to sync theme support info
- * Only sends theme support attributes whitelisted in Jetpack_Sync_Defaults::$default_theme_support_whitelist
- *
- * @since 4.2.0
- *
- * @param array the theme support array
- * @param array the previous theme since Jetpack 6.5.0
- */
- do_action( 'jetpack_sync_current_theme_support', $this->get_theme_support_info(), $previous_theme );
- }
-
- public function enqueue_full_sync_actions( $config, $max_items_to_enqueue, $state ) {
- /**
- * Tells the client to sync all theme data to the server
- *
- * @since 4.2.0
- *
- * @param boolean Whether to expand theme data (should always be true)
- */
- do_action( 'jetpack_full_sync_theme_data', true );
-
- // The number of actions enqueued, and next module state (true == done)
- return array( 1, true );
- }
-
- public function estimate_full_sync_actions( $config ) {
- return 1;
- }
-
- public function init_before_send() {
- add_filter( 'jetpack_sync_before_send_jetpack_full_sync_theme_data', array( $this, 'expand_theme_data' ) );
- }
-
- function get_full_sync_actions() {
- return array( 'jetpack_full_sync_theme_data' );
- }
-
- function expand_theme_data() {
- return array( $this->get_theme_support_info() );
- }
-
- function get_widget_name( $widget_id ) {
- global $wp_registered_widgets;
- return ( isset( $wp_registered_widgets[ $widget_id ] ) ? $wp_registered_widgets[ $widget_id ]['name'] : null );
- }
-
- function get_sidebar_name( $sidebar_id ) {
- global $wp_registered_sidebars;
- return ( isset( $wp_registered_sidebars[ $sidebar_id ] ) ? $wp_registered_sidebars[ $sidebar_id ]['name'] : null );
- }
-
- function sync_add_widgets_to_sidebar( $new_widgets, $old_widgets, $sidebar ) {
- $added_widgets = array_diff( $new_widgets, $old_widgets );
- if ( empty( $added_widgets ) ) {
- return array();
- }
- $moved_to_sidebar = array();
- $sidebar_name = $this->get_sidebar_name( $sidebar );
-
- // Don't sync jetpack_widget_added if theme was switched
- if ( $this->is_theme_switch() ) {
- return array();
- }
-
- foreach ( $added_widgets as $added_widget ) {
- $moved_to_sidebar[] = $added_widget;
- $added_widget_name = $this->get_widget_name( $added_widget );
- /**
- * Helps Sync log that a widget got added
- *
- * @since 4.9.0
- *
- * @param string $sidebar, Sidebar id got changed
- * @param string $added_widget, Widget id got added
- * @param string $sidebar_name, Sidebar id got changed Since 5.0.0
- * @param string $added_widget_name, Widget id got added Since 5.0.0
- */
- do_action( 'jetpack_widget_added', $sidebar, $added_widget, $sidebar_name, $added_widget_name );
- }
- return $moved_to_sidebar;
- }
-
- function sync_remove_widgets_from_sidebar( $new_widgets, $old_widgets, $sidebar, $inactive_widgets ) {
- $removed_widgets = array_diff( $old_widgets, $new_widgets );
-
- if ( empty( $removed_widgets ) ) {
- return array();
- }
-
- $moved_to_inactive = array();
- $sidebar_name = $this->get_sidebar_name( $sidebar );
-
- foreach ( $removed_widgets as $removed_widget ) {
- // Lets check if we didn't move the widget to in_active_widgets
- if ( isset( $inactive_widgets ) && ! in_array( $removed_widget, $inactive_widgets ) ) {
- $removed_widget_name = $this->get_widget_name( $removed_widget );
- /**
- * Helps Sync log that a widgte got removed
- *
- * @since 4.9.0
- *
- * @param string $sidebar, Sidebar id got changed
- * @param string $removed_widget, Widget id got removed
- * @param string $sidebar_name, Name of the sidebar that changed Since 5.0.0
- * @param string $removed_widget_name, Name of the widget that got removed Since 5.0.0
- */
- do_action( 'jetpack_widget_removed', $sidebar, $removed_widget, $sidebar_name, $removed_widget_name );
- } else {
- $moved_to_inactive[] = $removed_widget;
- }
- }
- return $moved_to_inactive;
-
- }
-
- function sync_widgets_reordered( $new_widgets, $old_widgets, $sidebar ) {
- $added_widgets = array_diff( $new_widgets, $old_widgets );
- if ( ! empty( $added_widgets ) ) {
- return;
- }
- $removed_widgets = array_diff( $old_widgets, $new_widgets );
- if ( ! empty( $removed_widgets ) ) {
- return;
- }
-
- if ( serialize( $old_widgets ) !== serialize( $new_widgets ) ) {
- $sidebar_name = $this->get_sidebar_name( $sidebar );
- /**
- * Helps Sync log that a sidebar id got reordered
- *
- * @since 4.9.0
- *
- * @param string $sidebar, Sidebar id got changed
- * @param string $sidebar_name, Name of the sidebar that changed Since 5.0.0
- */
- do_action( 'jetpack_widget_reordered', $sidebar, $sidebar_name );
- }
-
- }
-
- function sync_sidebar_widgets_actions( $old_value, $new_value ) {
- // Don't really know how to deal with different array_values yet.
- if (
- ( isset( $old_value['array_version'] ) && $old_value['array_version'] !== 3 ) ||
- ( isset( $new_value['array_version'] ) && $new_value['array_version'] !== 3 )
- ) {
- return;
- }
-
- $moved_to_inactive_ids = array();
- $moved_to_sidebar = array();
-
- foreach ( $new_value as $sidebar => $new_widgets ) {
- if ( in_array( $sidebar, array( 'array_version', 'wp_inactive_widgets' ) ) ) {
- continue;
- }
- $old_widgets = isset( $old_value[ $sidebar ] )
- ? $old_value[ $sidebar ]
- : array();
-
- if ( ! is_array( $new_widgets ) ) {
- $new_widgets = array();
- }
-
- $moved_to_inactive_recently = $this->sync_remove_widgets_from_sidebar( $new_widgets, $old_widgets, $sidebar, $new_value['wp_inactive_widgets'] );
- $moved_to_inactive_ids = array_merge( $moved_to_inactive_ids, $moved_to_inactive_recently );
-
- $moved_to_sidebar_recently = $this->sync_add_widgets_to_sidebar( $new_widgets, $old_widgets, $sidebar );
- $moved_to_sidebar = array_merge( $moved_to_sidebar, $moved_to_sidebar_recently );
-
- $this->sync_widgets_reordered( $new_widgets, $old_widgets, $sidebar );
-
- }
-
- // Don't sync either jetpack_widget_moved_to_inactive or jetpack_cleared_inactive_widgets if theme was switched
- if ( $this->is_theme_switch() ) {
- return;
- }
-
- // Treat inactive sidebar a bit differently
- if ( ! empty( $moved_to_inactive_ids ) ) {
- $moved_to_inactive_name = array_map( array( $this, 'get_widget_name' ), $moved_to_inactive_ids );
- /**
- * Helps Sync log that a widgets IDs got moved to in active
- *
- * @since 4.9.0
- *
- * @param array $moved_to_inactive_ids, Array of widgets id that moved to inactive id got changed
- * @param array $moved_to_inactive_names, Array of widgets names that moved to inactive id got changed Since 5.0.0
- */
- do_action( 'jetpack_widget_moved_to_inactive', $moved_to_inactive_ids, $moved_to_inactive_name );
- } elseif ( empty( $moved_to_sidebar ) &&
- empty( $new_value['wp_inactive_widgets'] ) &&
- ! empty( $old_value['wp_inactive_widgets'] ) ) {
- /**
- * Helps Sync log that a got cleared from inactive.
- *
- * @since 4.9.0
- */
- do_action( 'jetpack_cleared_inactive_widgets' );
- }
- }
-
- /**
- * @param null $theme or the theme object
- *
- * @return array
- */
- private function get_theme_support_info( $theme = null ) {
- global $_wp_theme_features;
-
- $theme_support = array();
-
- // We are trying to get the current theme info.
- if ( $theme === null ) {
- $theme = wp_get_theme();
-
- foreach ( Jetpack_Sync_Defaults::$default_theme_support_whitelist as $theme_feature ) {
- $has_support = current_theme_supports( $theme_feature );
- if ( $has_support ) {
- $theme_support[ $theme_feature ] = $_wp_theme_features[ $theme_feature ];
- }
- }
- }
-
- $theme_support['name'] = $theme->get( 'Name' );
- $theme_support['version'] = $theme->get( 'Version' );
- $theme_support['slug'] = $theme->get_stylesheet();
- $theme_support['uri'] = $theme->get( 'ThemeURI' );
-
- return $theme_support;
- }
-
- private function get_delete_theme_call() {
- $backtrace = debug_backtrace();
- $delete_theme_call = null;
- foreach ( $backtrace as $call ) {
- if ( isset( $call['function'] ) && 'delete_theme' === $call['function'] ) {
- $delete_theme_call = $call;
- break;
- }
- }
- return $delete_theme_call;
- }
-
- private function is_theme_switch() {
- return did_action( 'after_switch_theme' );
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-module-updates.php b/plugins/jetpack/sync/class.jetpack-sync-module-updates.php
deleted file mode 100644
index 4da4414f..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-module-updates.php
+++ /dev/null
@@ -1,321 +0,0 @@
-<?php
-
-class Jetpack_Sync_Module_Updates extends Jetpack_Sync_Module {
-
- const UPDATES_CHECKSUM_OPTION_NAME = 'jetpack_updates_sync_checksum';
-
- private $old_wp_version = null;
- private $updates = array();
-
- public function set_defaults() {
- $this->updates = array();
- }
-
- function name() {
- return 'updates';
- }
-
- public function init_listeners( $callable ) {
- global $wp_version;
- $this->old_wp_version = $wp_version;
- add_action( 'set_site_transient_update_plugins', array( $this, 'validate_update_change' ), 10, 3 );
- add_action( 'set_site_transient_update_themes', array( $this, 'validate_update_change' ), 10, 3 );
- add_action( 'set_site_transient_update_core', array( $this, 'validate_update_change' ), 10, 3 );
-
- add_action( 'jetpack_update_plugins_change', $callable );
- add_action( 'jetpack_update_themes_change', $callable );
- add_action( 'jetpack_update_core_change', $callable );
-
- add_filter(
- 'jetpack_sync_before_enqueue_jetpack_update_plugins_change',
- array(
- $this,
- 'filter_update_keys',
- ),
- 10,
- 2
- );
- add_filter(
- 'jetpack_sync_before_enqueue_upgrader_process_complete',
- array(
- $this,
- 'filter_upgrader_process_complete',
- ),
- 10,
- 2
- );
-
- add_action( 'automatic_updates_complete', $callable );
-
- if ( is_multisite() ) {
- add_filter( 'pre_update_site_option_wpmu_upgrade_site', array( $this, 'update_core_network_event' ), 10, 2 );
- add_action( 'jetpack_sync_core_update_network', $callable, 10, 3 );
- }
-
- // Send data when update completes
- add_action( '_core_updated_successfully', array( $this, 'update_core' ) );
- add_action( 'jetpack_sync_core_reinstalled_successfully', $callable );
- add_action( 'jetpack_sync_core_autoupdated_successfully', $callable, 10, 2 );
- add_action( 'jetpack_sync_core_updated_successfully', $callable, 10, 2 );
-
- }
-
- public function init_full_sync_listeners( $callable ) {
- add_action( 'jetpack_full_sync_updates', $callable );
- }
-
- public function init_before_send() {
- add_filter( 'jetpack_sync_before_send_jetpack_full_sync_updates', array( $this, 'expand_updates' ) );
- add_filter( 'jetpack_sync_before_send_jetpack_update_themes_change', array( $this, 'expand_themes' ) );
- }
-
- public function update_core_network_event( $wp_db_version, $old_wp_db_version ) {
- global $wp_version;
- /**
- * Sync event for when core wp network updates to a new db version
- *
- * @since 5.0.0
- *
- * @param int $wp_db_version the latest wp_db_version
- * @param int $old_wp_db_version previous wp_db_version
- * @param string $wp_version the latest wp_version
- */
- do_action( 'jetpack_sync_core_update_network', $wp_db_version, $old_wp_db_version, $wp_version );
- return $wp_db_version;
- }
-
- public function update_core( $new_wp_version ) {
- global $pagenow;
-
- if ( isset( $_GET['action'] ) && 'do-core-reinstall' === $_GET['action'] ) {
- /**
- * Sync event that fires when core reinstall was successful
- *
- * @since 5.0.0
- *
- * @param string $new_wp_version the updated WordPress version
- */
- do_action( 'jetpack_sync_core_reinstalled_successfully', $new_wp_version );
- return;
- }
-
- // Core was autoudpated
- if (
- 'update-core.php' !== $pagenow &&
- ! Jetpack_Constants::is_true( 'REST_API_REQUEST' ) // wp.com rest api calls should never be marked as a core autoupdate
- ) {
- /**
- * Sync event that fires when core autoupdate was successful
- *
- * @since 5.0.0
- *
- * @param string $new_wp_version the updated WordPress version
- * @param string $old_wp_version the previous WordPress version
- */
- do_action( 'jetpack_sync_core_autoupdated_successfully', $new_wp_version, $this->old_wp_version );
- return;
- }
- /**
- * Sync event that fires when core update was successful
- *
- * @since 5.0.0
- *
- * @param string $new_wp_version the updated WordPress version
- * @param string $old_wp_version the previous WordPress version
- */
- do_action( 'jetpack_sync_core_updated_successfully', $new_wp_version, $this->old_wp_version );
- return;
-
- }
-
- public function get_update_checksum( $update, $transient ) {
- $updates = array();
- $no_updated = array();
- switch ( $transient ) {
- case 'update_plugins':
- if ( ! empty( $update->response ) && is_array( $update->response ) ) {
- foreach ( $update->response as $plugin_slug => $response ) {
- if ( ! empty( $plugin_slug ) && isset( $response->new_version ) ) {
- $updates[] = array( $plugin_slug => $response->new_version );
- }
- }
- }
- if ( ! empty( $update->no_update ) ) {
- $no_updated = array_keys( $update->no_update );
- }
-
- if ( ! isset( $no_updated['jetpack/jetpack.php'] ) && isset( $updates['jetpack/jetpack.php'] ) ) {
- return false;
- }
-
- break;
- case 'update_themes':
- if ( ! empty( $update->response ) && is_array( $update->response ) ) {
- foreach ( $update->response as $theme_slug => $response ) {
- if ( ! empty( $theme_slug ) && isset( $response['new_version'] ) ) {
- $updates[] = array( $theme_slug => $response['new_version'] );
- }
- }
- }
-
- if ( ! empty( $update->checked ) ) {
- $no_updated = $update->checked;
- }
-
- break;
- case 'update_core':
- if ( ! empty( $update->updates ) && is_array( $update->updates ) ) {
- foreach ( $update->updates as $response ) {
- if ( ! empty( $response->response ) && $response->response === 'latest' ) {
- continue;
- }
- if ( ! empty( $response->response ) && isset( $response->packages->full ) ) {
- $updates[] = array( $response->response => $response->packages->full );
- }
- }
- }
-
- if ( ! empty( $update->version_checked ) ) {
- $no_updated = $update->version_checked;
- }
-
- if ( empty( $updates ) ) {
- return false;
- }
- break;
-
- }
- if ( empty( $updates ) && empty( $no_updated ) ) {
- return false;
- }
- return $this->get_check_sum( array( $no_updated, $updates ) );
- }
-
- public function validate_update_change( $value, $expiration, $transient ) {
- $new_checksum = $this->get_update_checksum( $value, $transient );
-
- if ( false === $new_checksum ) {
- return;
- }
-
- $checksums = get_option( self::UPDATES_CHECKSUM_OPTION_NAME, array() );
-
- if ( isset( $checksums[ $transient ] ) && $checksums[ $transient ] === $new_checksum ) {
- return;
- }
-
- $checksums[ $transient ] = $new_checksum;
-
- update_option( self::UPDATES_CHECKSUM_OPTION_NAME, $checksums );
- if ( 'update_core' === $transient ) {
- /**
- * jetpack_update_core_change
- *
- * @since 5.1.0
- *
- * @param array containing info that tells us what needs updating
- */
- do_action( 'jetpack_update_core_change', $value );
- return;
- }
- if ( empty( $this->updates ) ) {
- // lets add the shutdown method once and only when the updates move from empty to filled with something
- add_action( 'shutdown', array( $this, 'sync_last_event' ), 9 );
- }
- if ( ! isset( $this->updates[ $transient ] ) ) {
- $this->updates[ $transient ] = array();
- }
- $this->updates[ $transient ][] = $value;
- }
-
- public function sync_last_event() {
- foreach ( $this->updates as $transient => $values ) {
- $value = end( $values ); // only send over the last value
- /**
- * jetpack_{$transient}_change
- * jetpack_update_plugins_change
- * jetpack_update_themes_change
- *
- * @since 5.1.0
- *
- * @param array containing info that tells us what needs updating
- */
- do_action( "jetpack_{$transient}_change", $value );
- }
-
- }
-
- public function enqueue_full_sync_actions( $config, $max_items_to_enqueue, $state ) {
- /**
- * Tells the client to sync all updates to the server
- *
- * @since 4.2.0
- *
- * @param boolean Whether to expand updates (should always be true)
- */
- do_action( 'jetpack_full_sync_updates', true );
-
- // The number of actions enqueued, and next module state (true == done)
- return array( 1, true );
- }
-
- public function estimate_full_sync_actions( $config ) {
- return 1;
- }
-
- function get_full_sync_actions() {
- return array( 'jetpack_full_sync_updates' );
- }
-
- public function get_all_updates() {
- return array(
- 'core' => get_site_transient( 'update_core' ),
- 'plugins' => get_site_transient( 'update_plugins' ),
- 'themes' => get_site_transient( 'update_themes' ),
- );
- }
-
- // removes unnecessary keys from synced updates data
- function filter_update_keys( $args ) {
- $updates = $args[0];
-
- if ( isset( $updates->no_update ) ) {
- unset( $updates->no_update );
- }
-
- return $args;
- }
-
- function filter_upgrader_process_complete( $args ) {
- array_shift( $args );
-
- return $args;
- }
-
- public function expand_updates( $args ) {
- if ( $args[0] ) {
- return $this->get_all_updates();
- }
-
- return $args;
- }
-
- public function expand_themes( $args ) {
- if ( ! isset( $args[0], $args[0]->response ) ) {
- return $args;
- }
- if ( ! is_array( $args[0]->response ) ) {
- trigger_error( 'Warning: Not an Array as expected but -> ' . wp_json_encode( $args[0]->response ) . ' instead', E_USER_WARNING );
- return $args;
- }
- foreach ( $args[0]->response as $stylesheet => &$theme_data ) {
- $theme = wp_get_theme( $stylesheet );
- $theme_data['name'] = $theme->name;
- }
- return $args;
- }
-
- public function reset_data() {
- delete_option( self::UPDATES_CHECKSUM_OPTION_NAME );
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-module-users.php b/plugins/jetpack/sync/class.jetpack-sync-module-users.php
deleted file mode 100644
index 6fb08e98..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-module-users.php
+++ /dev/null
@@ -1,492 +0,0 @@
-<?php
-
-class Jetpack_Sync_Module_Users extends Jetpack_Sync_Module {
- const MAX_INITIAL_SYNC_USERS = 100;
-
- protected $flags = array();
-
- function name() {
- return 'users';
- }
-
- // this is here to support the backfill API
- public function get_object_by_id( $object_type, $id ) {
- if ( $object_type === 'user' && $user = get_user_by( 'id', intval( $id ) ) ) {
- return $this->sanitize_user_and_expand( $user );
- }
-
- return false;
- }
-
- public function init_listeners( $callable ) {
-
- // users
- add_action( 'user_register', array( $this, 'user_register_handler' ) );
- add_action( 'profile_update', array( $this, 'save_user_handler' ), 10, 2 );
-
- add_action( 'add_user_to_blog', array( $this, 'add_user_to_blog_handler' ) );
- add_action( 'jetpack_sync_add_user', $callable, 10, 2 );
-
- add_action( 'jetpack_sync_register_user', $callable, 10, 2 );
- add_action( 'jetpack_sync_save_user', $callable, 10, 2 );
-
- add_action( 'jetpack_sync_user_locale', $callable, 10, 2 );
- add_action( 'jetpack_sync_user_locale_delete', $callable, 10, 1 );
-
- add_action( 'deleted_user', array( $this, 'deleted_user_handler' ), 10, 2 );
- add_action( 'jetpack_deleted_user', $callable, 10, 3 );
- add_action( 'remove_user_from_blog', array( $this, 'remove_user_from_blog_handler' ), 10, 2 );
- add_action( 'jetpack_removed_user_from_blog', $callable, 10, 2 );
-
- // user roles
- add_action( 'add_user_role', array( $this, 'save_user_role_handler' ), 10, 2 );
- add_action( 'set_user_role', array( $this, 'save_user_role_handler' ), 10, 3 );
- add_action( 'remove_user_role', array( $this, 'save_user_role_handler' ), 10, 2 );
-
- // user capabilities
- add_action( 'added_user_meta', array( $this, 'maybe_save_user_meta' ), 10, 4 );
- add_action( 'updated_user_meta', array( $this, 'maybe_save_user_meta' ), 10, 4 );
- add_action( 'deleted_user_meta', array( $this, 'maybe_save_user_meta' ), 10, 4 );
-
- // user authentication
- add_filter( 'authenticate', array( $this, 'authenticate_handler' ), 1000, 3 );
- add_action( 'wp_login', array( $this, 'wp_login_handler' ), 10, 2 );
-
- add_action( 'jetpack_wp_login', $callable, 10, 3 );
-
- add_action( 'wp_logout', $callable, 10, 0 );
- add_action( 'wp_masterbar_logout', $callable, 10, 0 );
-
- // Add on init
- add_filter( 'jetpack_sync_before_enqueue_jetpack_sync_add_user', array( $this, 'expand_action' ) );
- add_filter( 'jetpack_sync_before_enqueue_jetpack_sync_register_user', array( $this, 'expand_action' ) );
- add_filter( 'jetpack_sync_before_enqueue_jetpack_sync_save_user', array( $this, 'expand_action' ) );
- }
-
- public function init_full_sync_listeners( $callable ) {
- add_action( 'jetpack_full_sync_users', $callable );
- }
-
- public function init_before_send() {
-
- add_filter( 'jetpack_sync_before_send_jetpack_wp_login', array( $this, 'expand_login_username' ), 10, 1 );
- add_filter( 'jetpack_sync_before_send_wp_logout', array( $this, 'expand_logout_username' ), 10, 2 );
-
- // full sync
- add_filter( 'jetpack_sync_before_send_jetpack_full_sync_users', array( $this, 'expand_users' ) );
- }
-
- private function get_user( $user ) {
- if ( is_numeric( $user ) ) {
- $user = get_user_by( 'id', $user );
- }
- if ( $user instanceof WP_User ) {
- return $user;
- }
- return null;
- }
-
- public function sanitize_user( $user ) {
- $user = $this->get_user( $user );
- // this create a new user object and stops the passing of the object by reference.
- $user = unserialize( serialize( $user ) );
-
- if ( is_object( $user ) && is_object( $user->data ) ) {
- unset( $user->data->user_pass );
- }
- return $user;
- }
-
- public function expand_user( $user ) {
- if ( ! is_object( $user ) ) {
- return null;
- }
- $user->allowed_mime_types = get_allowed_mime_types( $user );
- $user->allcaps = $this->get_real_user_capabilities( $user );
-
- // Only set the user locale if it is different from the site local
- if ( get_locale() !== get_user_locale( $user->ID ) ) {
- $user->locale = get_user_locale( $user->ID );
- }
-
- return $user;
- }
-
- public function get_real_user_capabilities( $user ) {
- $user_capabilities = array();
- if ( is_wp_error( $user ) ) {
- return $user_capabilities;
- }
- foreach ( Jetpack_Sync_Defaults::get_capabilities_whitelist() as $capability ) {
- if ( $user_has_capabilities = user_can( $user, $capability ) ) {
- $user_capabilities[ $capability ] = true;
- }
- }
- return $user_capabilities;
- }
-
- public function sanitize_user_and_expand( $user ) {
- $user = $this->get_user( $user );
- $user = $this->expand_user( $user );
- return $this->sanitize_user( $user );
- }
-
- public function expand_action( $args ) {
- // the first argument is always the user
- list( $user ) = $args;
- if ( $user ) {
- $args[0] = $this->sanitize_user_and_expand( $user );
- return $args;
- }
-
- return false;
- }
-
- public function expand_login_username( $args ) {
- list( $login, $user, $flags ) = $args;
- $user = $this->sanitize_user( $user );
-
- return array( $login, $user, $flags );
- }
-
- public function expand_logout_username( $args, $user_id ) {
- $user = get_userdata( $user_id );
- $user = $this->sanitize_user( $user );
-
- $login = '';
- if ( is_object( $user ) && is_object( $user->data ) ) {
- $login = $user->data->user_login;
- }
- // if we don't have a user here lets not send anything.
- if ( empty( $login ) ) {
- return false;
- }
-
- return array( $login, $user );
- }
-
- /**
- * Additional processing is needed for wp_login so we introduce this wrapper
- * handler.
- *
- * @param String $user_login the user login.
- * @param WP_User $user the user object.
- */
- function wp_login_handler( $user_login, $user ) {
- /**
- * Fires when a user is logged into a site.
- *
- * @since 7.2.0
- *
- * @param Numeric $user_id The user ID.
- * @param WP_User $user The User Object of the user that currently logged in
- * @param Array $params Any Flags that have been added during login
- */
- do_action( 'jetpack_wp_login', $user->ID, $user, $this->get_flags( $user->ID ) );
- $this->clear_flags( $user->ID );
- }
-
- /**
- * A hook for the authenticate event that checks the password strength.
- *
- * @param WP_Error|WP_User $user the user object, or an error.
- * @param String $username the username.
- * @param Sting $password the password used to authenticate.
- * @return WP_Error|WP_User the same object that was passed into the function.
- */
- public function authenticate_handler( $user, $username, $password ) {
- // In case of cookie authentication we don't do anything here.
- if ( empty( $password ) ) {
- return $user;
- }
-
- // We are only interested in successful authentication events.
- if ( is_wp_error( $user ) || ! ( $user instanceof WP_User ) ) {
- return $user;
- }
-
- jetpack_require_lib( 'class.jetpack-password-checker' );
- $password_checker = new Jetpack_Password_Checker( $user->ID );
-
- $test_results = $password_checker->test( $password, true );
-
- // If the password passes tests, we don't do anything.
- if ( empty( $test_results['test_results']['failed'] ) ) {
- return $user;
- }
-
- $this->add_flags(
- $user->ID,
- array(
- 'warning' => 'The password failed at least one strength test.',
- 'failures' => $test_results['test_results']['failed'],
- )
- );
-
- return $user;
- }
-
- public function deleted_user_handler( $deleted_user_id, $reassigned_user_id = '' ) {
- $is_multisite = is_multisite();
- /**
- * Fires when a user is deleted on a site
- *
- * @since 5.4.0
- *
- * @param int $deleted_user_id - ID of the deleted user
- * @param int $reassigned_user_id - ID of the user the deleted user's posts is reassigned to (if any)
- * @param bool $is_multisite - Whether this site is a multisite installation
- */
- do_action( 'jetpack_deleted_user', $deleted_user_id, $reassigned_user_id, $is_multisite );
- }
-
- function user_register_handler( $user_id, $old_user_data = null ) {
- // ensure we only sync users who are members of the current blog
- if ( ! is_user_member_of_blog( $user_id, get_current_blog_id() ) ) {
- return;
- }
-
- if ( Jetpack_Constants::is_true( 'JETPACK_INVITE_ACCEPTED' ) ) {
- $this->add_flags( $user_id, array( 'invitation_accepted' => true ) );
- }
- /**
- * Fires when a new user is registered on a site
- *
- * @since 4.9.0
- *
- * @param object The WP_User object
- */
- do_action( 'jetpack_sync_register_user', $user_id, $this->get_flags( $user_id ) );
- $this->clear_flags( $user_id );
-
- }
-
- function add_user_to_blog_handler( $user_id, $old_user_data = null ) {
- // ensure we only sync users who are members of the current blog
- if ( ! is_user_member_of_blog( $user_id, get_current_blog_id() ) ) {
- return;
- }
-
- if ( Jetpack_Constants::is_true( 'JETPACK_INVITE_ACCEPTED' ) ) {
- $this->add_flags( $user_id, array( 'invitation_accepted' => true ) );
- }
- /**
- * Fires when a user is added on a site
- *
- * @since 4.9.0
- *
- * @param object The WP_User object
- */
- do_action( 'jetpack_sync_add_user', $user_id, $this->get_flags( $user_id ) );
- $this->clear_flags( $user_id );
- }
-
- function save_user_handler( $user_id, $old_user_data = null ) {
- // ensure we only sync users who are members of the current blog
- if ( ! is_user_member_of_blog( $user_id, get_current_blog_id() ) ) {
- return;
- }
-
- $user = get_user_by( 'id', $user_id );
-
- // Older versions of WP don't pass the old_user_data in ->data
- if ( isset( $old_user_data->data ) ) {
- $old_user = $old_user_data->data;
- } else {
- $old_user = $old_user_data;
- }
-
- if ( $old_user !== null && $user->user_pass !== $old_user->user_pass ) {
- $this->flags[ $user_id ]['password_changed'] = true;
- }
- if ( $old_user !== null && $user->data->user_email !== $old_user->user_email ) {
- // The '_new_email' user meta is deleted right after the call to wp_update_user
- // that got us to this point so if it's still set then this was a user confirming
- // their new email address
- if ( 1 === intval( get_user_meta( $user->ID, '_new_email', true ) ) ) {
- $this->flags[ $user_id ]['email_changed'] = true;
- }
- }
-
- /**
- * Fires when the client needs to sync an updated user
- *
- * @since 4.2.0
- *
- * @param object The WP_User object
- * @param array state - New since 5.8.0
- */
- do_action( 'jetpack_sync_save_user', $user_id, $this->get_flags( $user_id ) );
- $this->clear_flags( $user_id );
- }
-
- function save_user_role_handler( $user_id, $role, $old_roles = null ) {
- $this->add_flags(
- $user_id,
- array(
- 'role_changed' => true,
- 'previous_role' => $old_roles,
- )
- );
-
- // The jetpack_sync_register_user payload is identical to jetpack_sync_save_user, don't send both
- if ( $this->is_create_user() || $this->is_add_user_to_blog() ) {
- return;
- }
- /**
- * This action is documented already in this file
- */
- do_action( 'jetpack_sync_save_user', $user_id, $this->get_flags( $user_id ) );
- $this->clear_flags( $user_id );
- }
-
- function get_flags( $user_id ) {
- if ( isset( $this->flags[ $user_id ] ) ) {
- return $this->flags[ $user_id ];
- }
- return array();
- }
-
- function clear_flags( $user_id ) {
- if ( isset( $this->flags[ $user_id ] ) ) {
- unset( $this->flags[ $user_id ] );
- }
- }
-
- function add_flags( $user_id, $flags ) {
- $this->flags[ $user_id ] = wp_parse_args( $flags, $this->get_flags( $user_id ) );
- }
-
- function maybe_save_user_meta( $meta_id, $user_id, $meta_key, $value ) {
- if ( $meta_key === 'locale' ) {
- $this->add_flags( $user_id, array( 'locale_changed' => true ) );
- }
-
- $user = get_user_by( 'id', $user_id );
- if ( isset( $user->cap_key ) && $meta_key === $user->cap_key ) {
- $this->add_flags( $user_id, array( 'capabilities_changed' => true ) );
- }
-
- if ( $this->is_create_user() || $this->is_add_user_to_blog() || $this->is_delete_user() ) {
- return;
- }
-
- if ( isset( $this->flags[ $user_id ] ) ) {
- /**
- * This action is documented already in this file
- */
- do_action( 'jetpack_sync_save_user', $user_id, $this->get_flags( $user_id ) );
- }
- }
-
- public function enqueue_full_sync_actions( $config, $max_items_to_enqueue, $state ) {
- global $wpdb;
-
- return $this->enqueue_all_ids_as_action( 'jetpack_full_sync_users', $wpdb->usermeta, 'user_id', $this->get_where_sql( $config ), $max_items_to_enqueue, $state );
- }
-
- public function estimate_full_sync_actions( $config ) {
- global $wpdb;
-
- $query = "SELECT count(*) FROM $wpdb->usermeta";
-
- if ( $where_sql = $this->get_where_sql( $config ) ) {
- $query .= ' WHERE ' . $where_sql;
- }
-
- $count = $wpdb->get_var( $query );
-
- return (int) ceil( $count / self::ARRAY_CHUNK_SIZE );
- }
-
- private function get_where_sql( $config ) {
- global $wpdb;
-
- $query = "meta_key = '{$wpdb->prefix}capabilities'";
-
- // config is a list of user IDs to sync
- if ( is_array( $config ) ) {
- $query .= ' AND user_id IN (' . implode( ',', array_map( 'intval', $config ) ) . ')';
- }
-
- return $query;
- }
-
- function get_full_sync_actions() {
- return array( 'jetpack_full_sync_users' );
- }
-
- function get_initial_sync_user_config() {
- global $wpdb;
-
- $user_ids = $wpdb->get_col( "SELECT user_id FROM $wpdb->usermeta WHERE meta_key = '{$wpdb->prefix}user_level' AND meta_value > 0 LIMIT " . ( self::MAX_INITIAL_SYNC_USERS + 1 ) );
-
- if ( count( $user_ids ) <= self::MAX_INITIAL_SYNC_USERS ) {
- return $user_ids;
- } else {
- return false;
- }
- }
-
- public function expand_users( $args ) {
- $user_ids = $args[0];
-
- return array_map( array( $this, 'sanitize_user_and_expand' ), get_users( array( 'include' => $user_ids ) ) );
- }
-
- public function remove_user_from_blog_handler( $user_id, $blog_id ) {
- // User is removed on add, see https://github.com/WordPress/WordPress/blob/0401cee8b36df3def8e807dd766adc02b359dfaf/wp-includes/ms-functions.php#L2114
- if ( $this->is_add_new_user_to_blog() ) {
- return;
- }
-
- $reassigned_user_id = $this->get_reassigned_network_user_id();
-
- // Note that we are in the context of the blog the user is removed from, see https://github.com/WordPress/WordPress/blob/473e1ba73bc5c18c72d7f288447503713d518790/wp-includes/ms-functions.php#L233
- /**
- * Fires when a user is removed from a blog on a multisite installation
- *
- * @since 5.4.0
- *
- * @param int $user_id - ID of the removed user
- * @param int $reassigned_user_id - ID of the user the removed user's posts is reassigned to (if any)
- */
- do_action( 'jetpack_removed_user_from_blog', $user_id, $reassigned_user_id );
- }
-
- protected function is_add_new_user_to_blog() {
- return Jetpack::is_function_in_backtrace( 'add_new_user_to_blog' );
- }
-
- protected function is_add_user_to_blog() {
- return Jetpack::is_function_in_backtrace( 'add_user_to_blog' );
- }
-
- protected function is_delete_user() {
- return Jetpack::is_function_in_backtrace( array( 'wp_delete_user', 'remove_user_from_blog' ) );
- }
-
- protected function is_create_user() {
- $functions = array(
- 'add_new_user_to_blog', // Used to suppress jetpack_sync_save_user in save_user_cap_handler when user registered on multi site
- 'wp_create_user', // Used to suppress jetpack_sync_save_user in save_user_role_handler when user registered on multi site
- 'wp_insert_user', // Used to suppress jetpack_sync_save_user in save_user_cap_handler and save_user_role_handler when user registered on single site
- );
-
- return Jetpack::is_function_in_backtrace( $functions );
- }
-
- protected function get_reassigned_network_user_id() {
- $backtrace = debug_backtrace( false ); // phpcs:ignore PHPCompatibility.PHP.NewFunctionParameters.debug_backtrace_optionsFound
- foreach ( $backtrace as $call ) {
- if (
- 'remove_user_from_blog' === $call['function'] &&
- 3 === count( $call['args'] )
- ) {
- return $call['args'][2];
- }
- }
-
- return false;
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-module-woocommerce.php b/plugins/jetpack/sync/class.jetpack-sync-module-woocommerce.php
deleted file mode 100644
index 962258a2..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-module-woocommerce.php
+++ /dev/null
@@ -1,335 +0,0 @@
-<?php
-
-require_once JETPACK__PLUGIN_DIR . '/sync/class.jetpack-sync-module.php';
-
-class Jetpack_Sync_Module_WooCommerce extends Jetpack_Sync_Module {
-
- private $order_item_meta_whitelist = array(
- // https://github.com/woocommerce/woocommerce/blob/master/includes/data-stores/class-wc-order-item-product-store.php#L20
- '_product_id',
- '_variation_id',
- '_qty',
- // Tax ones also included in below class
- // https://github.com/woocommerce/woocommerce/blob/master/includes/data-stores/class-wc-order-item-fee-data-store.php#L20
- '_tax_class',
- '_tax_status',
- '_line_subtotal',
- '_line_subtotal_tax',
- '_line_total',
- '_line_tax',
- '_line_tax_data',
- // https://github.com/woocommerce/woocommerce/blob/master/includes/data-stores/class-wc-order-item-shipping-data-store.php#L20
- 'method_id',
- 'cost',
- 'total_tax',
- 'taxes',
- // https://github.com/woocommerce/woocommerce/blob/master/includes/data-stores/class-wc-order-item-tax-data-store.php#L20
- 'rate_id',
- 'label',
- 'compound',
- 'tax_amount',
- 'shipping_tax_amount',
- // https://github.com/woocommerce/woocommerce/blob/master/includes/data-stores/class-wc-order-item-coupon-data-store.php
- 'discount_amount',
- 'discount_amount_tax',
- );
-
- private $order_item_table_name;
-
- public function __construct() {
- global $wpdb;
- $this->order_item_table_name = $wpdb->prefix . 'woocommerce_order_items';
-
- // options, constants and post meta whitelists
- add_filter( 'jetpack_sync_options_whitelist', array( $this, 'add_woocommerce_options_whitelist' ), 10 );
- add_filter( 'jetpack_sync_constants_whitelist', array( $this, 'add_woocommerce_constants_whitelist' ), 10 );
- add_filter( 'jetpack_sync_post_meta_whitelist', array( $this, 'add_woocommerce_post_meta_whitelist' ), 10 );
- add_filter( 'jetpack_sync_comment_meta_whitelist', array( $this, 'add_woocommerce_comment_meta_whitelist' ), 10 );
-
- add_filter( 'jetpack_sync_before_enqueue_woocommerce_new_order_item', array( $this, 'filter_order_item' ) );
- add_filter( 'jetpack_sync_before_enqueue_woocommerce_update_order_item', array( $this, 'filter_order_item' ) );
- }
-
- function name() {
- return 'woocommerce';
- }
-
- public function init_listeners( $callable ) {
- // attributes
- add_action( 'woocommerce_attribute_added', $callable, 10, 2 );
- add_action( 'woocommerce_attribute_updated', $callable, 10, 3 );
- add_action( 'woocommerce_attribute_deleted', $callable, 10, 3 );
-
- // orders
- add_action( 'woocommerce_new_order', $callable, 10, 1 );
- add_action( 'woocommerce_order_status_changed', $callable, 10, 3 );
- add_action( 'woocommerce_payment_complete', $callable, 10, 1 );
-
- // order items
- add_action( 'woocommerce_new_order_item', $callable, 10, 4 );
- add_action( 'woocommerce_update_order_item', $callable, 10, 4 );
- add_action( 'woocommerce_delete_order_item', $callable, 10, 1 );
- $this->init_listeners_for_meta_type( 'order_item', $callable );
-
- // payment tokens
- add_action( 'woocommerce_new_payment_token', $callable, 10, 1 );
- add_action( 'woocommerce_payment_token_deleted', $callable, 10, 2 );
- add_action( 'woocommerce_payment_token_updated', $callable, 10, 1 );
- $this->init_listeners_for_meta_type( 'payment_token', $callable );
-
- // product downloads
- add_action( 'woocommerce_downloadable_product_download_log_insert', $callable, 10, 1 );
- add_action( 'woocommerce_grant_product_download_access', $callable, 10, 1 );
-
- // tax rates
- add_action( 'woocommerce_tax_rate_added', $callable, 10, 2 );
- add_action( 'woocommerce_tax_rate_updated', $callable, 10, 2 );
- add_action( 'woocommerce_tax_rate_deleted', $callable, 10, 1 );
-
- // webhooks
- add_action( 'woocommerce_new_webhook', $callable, 10, 1 );
- add_action( 'woocommerce_webhook_deleted', $callable, 10, 2 );
- add_action( 'woocommerce_webhook_updated', $callable, 10, 1 );
- }
-
- public function init_full_sync_listeners( $callable ) {
- add_action( 'jetpack_full_sync_woocommerce_order_items', $callable ); // also sends post meta
- }
-
- public function get_full_sync_actions() {
- return array( 'jetpack_full_sync_woocommerce_order_items' );
- }
-
- public function init_before_send() {
- // full sync
- add_filter( 'jetpack_sync_before_send_jetpack_full_sync_woocommerce_order_items', array( $this, 'expand_order_item_ids' ) );
- }
-
- public function filter_order_item( $args ) {
- // Make sure we always have all the data - prior to WooCommerce 3.0 we only have the user supplied data in the second argument and not the full details
- $args[1] = $this->build_order_item( $args[0] );
- return $args;
- }
-
- public function expand_order_item_ids( $args ) {
- $order_item_ids = $args[0];
-
- global $wpdb;
-
- $order_item_ids_sql = implode( ', ', array_map( 'intval', $order_item_ids ) );
-
- $order_items = $wpdb->get_results(
- "SELECT * FROM $this->order_item_table_name WHERE order_item_id IN ( $order_item_ids_sql )"
- );
-
- return array(
- $order_items,
- $this->get_metadata( $order_item_ids, 'order_item', $this->order_item_meta_whitelist ),
- );
- }
-
- public function build_order_item( $order_item_id ) {
- global $wpdb;
- return $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $this->order_item_table_name WHERE order_item_id = %d", $order_item_id ) );
- }
-
- public function enqueue_full_sync_actions( $config, $max_items_to_enqueue, $state ) {
- global $wpdb;
-
- return $this->enqueue_all_ids_as_action( 'jetpack_full_sync_woocommerce_order_items', $this->order_item_table_name, 'order_item_id', $this->get_where_sql( $config ), $max_items_to_enqueue, $state );
- }
-
- public function estimate_full_sync_actions( $config ) {
- global $wpdb;
-
- $query = "SELECT count(*) FROM $this->order_item_table_name WHERE " . $this->get_where_sql( $config );
- $count = $wpdb->get_var( $query );
-
- return (int) ceil( $count / self::ARRAY_CHUNK_SIZE );
- }
-
- private function get_where_sql( $config ) {
- return '1=1';
- }
-
- public function add_woocommerce_options_whitelist( $list ) {
- return array_merge( $list, self::$wc_options_whitelist );
- }
-
- public function add_woocommerce_constants_whitelist( $list ) {
- return array_merge( $list, self::$wc_constants_whitelist );
- }
-
- public function add_woocommerce_post_meta_whitelist( $list ) {
- return array_merge( $list, self::$wc_post_meta_whitelist );
- }
-
- public function add_woocommerce_comment_meta_whitelist( $list ) {
- return array_merge( $list, self::$wc_comment_meta_whitelist );
- }
-
- private static $wc_options_whitelist = array(
- 'woocommerce_currency',
- 'woocommerce_db_version',
- 'woocommerce_weight_unit',
- 'woocommerce_version',
- 'woocommerce_unforce_ssl_checkout',
- 'woocommerce_tax_total_display',
- 'woocommerce_tax_round_at_subtotal',
- 'woocommerce_tax_display_shop',
- 'woocommerce_tax_display_cart',
- 'woocommerce_prices_include_tax',
- 'woocommerce_price_thousand_sep',
- 'woocommerce_price_num_decimals',
- 'woocommerce_price_decimal_sep',
- 'woocommerce_notify_low_stock',
- 'woocommerce_notify_low_stock_amount',
- 'woocommerce_notify_no_stock',
- 'woocommerce_notify_no_stock_amount',
- 'woocommerce_manage_stock',
- 'woocommerce_force_ssl_checkout',
- 'woocommerce_hide_out_of_stock_items',
- 'woocommerce_file_download_method',
- 'woocommerce_enable_signup_and_login_from_checkout',
- 'woocommerce_enable_shipping_calc',
- 'woocommerce_enable_review_rating',
- 'woocommerce_enable_guest_checkout',
- 'woocommerce_enable_coupons',
- 'woocommerce_enable_checkout_login_reminder',
- 'woocommerce_enable_ajax_add_to_cart',
- 'woocommerce_dimension_unit',
- 'woocommerce_default_country',
- 'woocommerce_default_customer_address',
- 'woocommerce_currency_pos',
- 'woocommerce_api_enabled',
- 'woocommerce_allow_tracking',
- );
-
- private static $wc_constants_whitelist = array(
- // woocommerce options
- 'WC_PLUGIN_FILE',
- 'WC_ABSPATH',
- 'WC_PLUGIN_BASENAME',
- 'WC_VERSION',
- 'WOOCOMMERCE_VERSION',
- 'WC_ROUNDING_PRECISION',
- 'WC_DISCOUNT_ROUNDING_MODE',
- 'WC_TAX_ROUNDING_MODE',
- 'WC_DELIMITER',
- 'WC_LOG_DIR',
- 'WC_SESSION_CACHE_GROUP',
- 'WC_TEMPLATE_DEBUG_MODE',
- );
-
- private static $wc_post_meta_whitelist = array(
- // woocommerce products
- // https://github.com/woocommerce/woocommerce/blob/8ed6e7436ff87c2153ed30edd83c1ab8abbdd3e9/includes/data-stores/class-wc-product-data-store-cpt.php#L21
- '_visibility',
- '_sku',
- '_price',
- '_regular_price',
- '_sale_price',
- '_sale_price_dates_from',
- '_sale_price_dates_to',
- 'total_sales',
- '_tax_status',
- '_tax_class',
- '_manage_stock',
- '_backorders',
- '_sold_individually',
- '_weight',
- '_length',
- '_width',
- '_height',
- '_upsell_ids',
- '_crosssell_ids',
- '_purchase_note',
- '_default_attributes',
- '_product_attributes',
- '_virtual',
- '_downloadable',
- '_download_limit',
- '_download_expiry',
- '_featured',
- '_downloadable_files',
- '_wc_rating_count',
- '_wc_average_rating',
- '_wc_review_count',
- '_variation_description',
- '_thumbnail_id',
- '_file_paths',
- '_product_image_gallery',
- '_product_version',
- '_wp_old_slug',
-
- // woocommerce orders
- // https://github.com/woocommerce/woocommerce/blob/8ed6e7436ff87c2153ed30edd83c1ab8abbdd3e9/includes/data-stores/class-wc-order-data-store-cpt.php#L27
- '_order_key',
- '_order_currency',
- // '_billing_first_name', do not sync these as they contain personal data
- // '_billing_last_name',
- // '_billing_company',
- // '_billing_address_1',
- // '_billing_address_2',
- '_billing_city',
- '_billing_state',
- '_billing_postcode',
- '_billing_country',
- // '_billing_email', do not sync these as they contain personal data
- // '_billing_phone',
- // '_shipping_first_name',
- // '_shipping_last_name',
- // '_shipping_company',
- // '_shipping_address_1',
- // '_shipping_address_2',
- '_shipping_city',
- '_shipping_state',
- '_shipping_postcode',
- '_shipping_country',
- '_completed_date',
- '_paid_date',
- '_cart_discount',
- '_cart_discount_tax',
- '_order_shipping',
- '_order_shipping_tax',
- '_order_tax',
- '_order_total',
- '_payment_method',
- '_payment_method_title',
- // '_transaction_id', do not sync these as they contain personal data
- // '_customer_ip_address',
- // '_customer_user_agent',
- '_created_via',
- '_order_version',
- '_prices_include_tax',
- '_date_completed',
- '_date_paid',
- '_payment_tokens',
- '_billing_address_index',
- '_shipping_address_index',
- '_recorded_sales',
- '_recorded_coupon_usage_counts',
- // https://github.com/woocommerce/woocommerce/blob/8ed6e7436ff87c2153ed30edd83c1ab8abbdd3e9/includes/data-stores/class-wc-order-data-store-cpt.php#L539
- '_download_permissions_granted',
- // https://github.com/woocommerce/woocommerce/blob/8ed6e7436ff87c2153ed30edd83c1ab8abbdd3e9/includes/data-stores/class-wc-order-data-store-cpt.php#L594
- '_order_stock_reduced',
-
- // woocommerce order refunds
- // https://github.com/woocommerce/woocommerce/blob/b8a2815ae546c836467008739e7ff5150cb08e93/includes/data-stores/class-wc-order-refund-data-store-cpt.php#L20
- '_order_currency',
- '_refund_amount',
- '_refunded_by',
- '_refund_reason',
- '_order_shipping',
- '_order_shipping_tax',
- '_order_tax',
- '_order_total',
- '_order_version',
- '_prices_include_tax',
- '_payment_tokens',
- );
-
- private static $wc_comment_meta_whitelist = array(
- 'rating',
- );
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-module-wp-super-cache.php b/plugins/jetpack/sync/class.jetpack-sync-module-wp-super-cache.php
deleted file mode 100644
index 04d6c5dd..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-module-wp-super-cache.php
+++ /dev/null
@@ -1,79 +0,0 @@
-<?php
-
-class Jetpack_Sync_Module_WP_Super_Cache extends Jetpack_Sync_Module {
-
- public function __construct() {
- add_filter( 'jetpack_sync_constants_whitelist', array( $this, 'add_wp_super_cache_constants_whitelist' ), 10 );
- add_filter( 'jetpack_sync_callable_whitelist', array( $this, 'add_wp_super_cache_callable_whitelist' ), 10 );
- }
-
- static $wp_super_cache_constants = array(
- 'WPLOCKDOWN',
- 'WPSC_DISABLE_COMPRESSION',
- 'WPSC_DISABLE_LOCKING',
- 'WPSC_DISABLE_HTACCESS_UPDATE',
- 'ADVANCEDCACHEPROBLEM',
- );
-
- static $wp_super_cache_callables = array(
- 'wp_super_cache_globals' => array( 'Jetpack_Sync_Module_WP_Super_Cache', 'get_wp_super_cache_globals' ),
- );
-
- public function name() {
- return 'wp-super-cache';
- }
-
- public static function get_wp_super_cache_globals() {
- global $wp_cache_mod_rewrite;
- global $cache_enabled;
- global $super_cache_enabled;
- global $ossdlcdn;
- global $cache_rebuild_files;
- global $wp_cache_mobile;
- global $wp_super_cache_late_init;
- global $wp_cache_anon_only;
- global $wp_cache_not_logged_in;
- global $wp_cache_clear_on_post_edit;
- global $wp_cache_mobile_enabled;
- global $wp_super_cache_debug;
- global $cache_max_time;
- global $wp_cache_refresh_single_only;
- global $wp_cache_mfunc_enabled;
- global $wp_supercache_304;
- global $wp_cache_no_cache_for_get;
- global $wp_cache_mutex_disabled;
- global $cache_jetpack;
- global $cache_domain_mapping;
-
- return array(
- 'wp_cache_mod_rewrite' => $wp_cache_mod_rewrite,
- 'cache_enabled' => $cache_enabled,
- 'super_cache_enabled' => $super_cache_enabled,
- 'ossdlcdn' => $ossdlcdn,
- 'cache_rebuild_files' => $cache_rebuild_files,
- 'wp_cache_mobile' => $wp_cache_mobile,
- 'wp_super_cache_late_init' => $wp_super_cache_late_init,
- 'wp_cache_anon_only' => $wp_cache_anon_only,
- 'wp_cache_not_logged_in' => $wp_cache_not_logged_in,
- 'wp_cache_clear_on_post_edit' => $wp_cache_clear_on_post_edit,
- 'wp_cache_mobile_enabled' => $wp_cache_mobile_enabled,
- 'wp_super_cache_debug' => $wp_super_cache_debug,
- 'cache_max_time' => $cache_max_time,
- 'wp_cache_refresh_single_only' => $wp_cache_refresh_single_only,
- 'wp_cache_mfunc_enabled' => $wp_cache_mfunc_enabled,
- 'wp_supercache_304' => $wp_supercache_304,
- 'wp_cache_no_cache_for_get' => $wp_cache_no_cache_for_get,
- 'wp_cache_mutex_disabled' => $wp_cache_mutex_disabled,
- 'cache_jetpack' => $cache_jetpack,
- 'cache_domain_mapping' => $cache_domain_mapping,
- );
- }
-
- public function add_wp_super_cache_constants_whitelist( $list ) {
- return array_merge( $list, self::$wp_super_cache_constants );
- }
-
- public function add_wp_super_cache_callable_whitelist( $list ) {
- return array_merge( $list, self::$wp_super_cache_callables );
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-module.php b/plugins/jetpack/sync/class.jetpack-sync-module.php
deleted file mode 100644
index 619b36d7..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-module.php
+++ /dev/null
@@ -1,160 +0,0 @@
-<?php
-
-/**
- * Basic methods implemented by Jetpack Sync extensions
- */
-abstract class Jetpack_Sync_Module {
- const ARRAY_CHUNK_SIZE = 10;
-
- abstract public function name();
-
- public function get_object_by_id( $object_type, $id ) {
- return false;
- }
-
- // override these to set up listeners and set/reset data/defaults
- public function init_listeners( $callable ) {
- }
-
- public function init_full_sync_listeners( $callable ) {
- }
-
- public function init_before_send() {
- }
-
- public function set_defaults() {
- }
-
- public function reset_data() {
- }
-
- public function enqueue_full_sync_actions( $config, $max_items_to_enqueue, $state ) {
- // in subclasses, return the number of actions enqueued, and next module state (true == done)
- return array( 0, true );
- }
-
- public function estimate_full_sync_actions( $config ) {
- // in subclasses, return the number of items yet to be enqueued
- return 0;
- }
-
- public function get_full_sync_actions() {
- return array();
- }
-
- protected function count_actions( $action_names, $actions_to_count ) {
- return count( array_intersect( $action_names, $actions_to_count ) );
- }
-
- protected function get_check_sum( $values ) {
- return crc32( wp_json_encode( jetpack_json_wrap( $values ) ) );
- }
-
- protected function still_valid_checksum( $sums_to_check, $name, $new_sum ) {
- if ( isset( $sums_to_check[ $name ] ) && $sums_to_check[ $name ] === $new_sum ) {
- return true;
- }
-
- return false;
- }
-
- protected function enqueue_all_ids_as_action( $action_name, $table_name, $id_field, $where_sql, $max_items_to_enqueue, $state ) {
- global $wpdb;
-
- if ( ! $where_sql ) {
- $where_sql = '1 = 1';
- }
-
- $items_per_page = 1000;
- $page = 1;
- $chunk_count = 0;
- $previous_max_id = $state ? $state : '~0';
- $listener = Jetpack_Sync_Listener::get_instance();
-
- // count down from max_id to min_id so we get newest posts/comments/etc first
- while ( $ids = $wpdb->get_col( "SELECT {$id_field} FROM {$table_name} WHERE {$where_sql} AND {$id_field} < {$previous_max_id} ORDER BY {$id_field} DESC LIMIT {$items_per_page}" ) ) {
- // Request posts in groups of N for efficiency
- $chunked_ids = array_chunk( $ids, self::ARRAY_CHUNK_SIZE );
-
- // if we hit our row limit, process and return
- if ( $chunk_count + count( $chunked_ids ) >= $max_items_to_enqueue ) {
- $remaining_items_count = $max_items_to_enqueue - $chunk_count;
- $remaining_items = array_slice( $chunked_ids, 0, $remaining_items_count );
-
- $listener->bulk_enqueue_full_sync_actions( $action_name, $remaining_items );
-
- $last_chunk = end( $remaining_items );
- return array( $remaining_items_count + $chunk_count, end( $last_chunk ) );
- }
-
- $listener->bulk_enqueue_full_sync_actions( $action_name, $chunked_ids );
-
- $chunk_count += count( $chunked_ids );
- $page += 1;
- $previous_max_id = end( $ids );
- }
-
- return array( $chunk_count, true );
- }
-
- protected function get_metadata( $ids, $meta_type, $meta_key_whitelist ) {
- global $wpdb;
- $table = _get_meta_table( $meta_type );
- $id = $meta_type . '_id';
- if ( ! $table ) {
- return array();
- }
-
- $private_meta_whitelist_sql = "'" . implode( "','", array_map( 'esc_sql', $meta_key_whitelist ) ) . "'";
-
- return array_map(
- array( $this, 'unserialize_meta' ),
- $wpdb->get_results(
- "SELECT $id, meta_key, meta_value, meta_id FROM $table WHERE $id IN ( " . implode( ',', wp_parse_id_list( $ids ) ) . ' )' .
- " AND meta_key IN ( $private_meta_whitelist_sql ) ",
- OBJECT
- )
- );
- }
-
- public function init_listeners_for_meta_type( $meta_type, $callable ) {
- add_action( "added_{$meta_type}_meta", $callable, 10, 4 );
- add_action( "updated_{$meta_type}_meta", $callable, 10, 4 );
- add_action( "deleted_{$meta_type}_meta", $callable, 10, 4 );
- }
-
- public function init_meta_whitelist_handler( $meta_type, $whitelist_handler ) {
- add_filter( "jetpack_sync_before_enqueue_added_{$meta_type}_meta", $whitelist_handler );
- add_filter( "jetpack_sync_before_enqueue_updated_{$meta_type}_meta", $whitelist_handler );
- add_filter( "jetpack_sync_before_enqueue_deleted_{$meta_type}_meta", $whitelist_handler );
- }
-
- protected function get_term_relationships( $ids ) {
- global $wpdb;
-
- return $wpdb->get_results( "SELECT object_id, term_taxonomy_id FROM $wpdb->term_relationships WHERE object_id IN ( " . implode( ',', wp_parse_id_list( $ids ) ) . ' )', OBJECT );
- }
-
- public function unserialize_meta( $meta ) {
- $meta->meta_value = maybe_unserialize( $meta->meta_value );
- return $meta;
- }
-
- public function get_objects_by_id( $object_type, $ids ) {
- if ( empty( $ids ) || empty( $object_type ) ) {
- return array();
- }
-
- $objects = array();
- foreach ( (array) $ids as $id ) {
- $object = $this->get_object_by_id( $object_type, $id );
-
- // Only add object if we have the object.
- if ( $object ) {
- $objects[ $id ] = $object;
- }
- }
-
- return $objects;
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-modules.php b/plugins/jetpack/sync/class.jetpack-sync-modules.php
deleted file mode 100644
index 2450bae9..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-modules.php
+++ /dev/null
@@ -1,104 +0,0 @@
-<?php
-
-/**
- * simple wrapper that allows enumerating cached static instances
- * of sync modules
- */
-
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-module.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-posts.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-import.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-comments.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-constants.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-callables.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-options.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-network-options.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-updates.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-users.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-themes.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-menus.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-attachments.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-meta.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-terms.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-plugins.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-full-sync.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-stats.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-module-protect.php';
-
-class Jetpack_Sync_Modules {
-
- private static $default_sync_modules = array(
- 'Jetpack_Sync_Module_Constants',
- 'Jetpack_Sync_Module_Callables',
- 'Jetpack_Sync_Module_Options',
- 'Jetpack_Sync_Module_Network_Options',
- 'Jetpack_Sync_Module_Terms',
- 'Jetpack_Sync_Module_Themes',
- 'Jetpack_Sync_Module_Menus',
- 'Jetpack_Sync_Module_Users',
- 'Jetpack_Sync_Module_Posts',
- 'Jetpack_Sync_Module_Import',
- 'Jetpack_Sync_Module_Protect',
- 'Jetpack_Sync_Module_Comments',
- 'Jetpack_Sync_Module_Updates',
- 'Jetpack_Sync_Module_Attachments',
- 'Jetpack_Sync_Module_Meta',
- 'Jetpack_Sync_Module_Plugins',
- 'Jetpack_Sync_Module_Full_Sync',
- 'Jetpack_Sync_Module_Stats',
- );
-
- private static $initialized_modules = null;
-
- public static function get_modules() {
- if ( null === self::$initialized_modules ) {
- self::$initialized_modules = self::initialize_modules();
- }
-
- return self::$initialized_modules;
- }
-
- public static function set_defaults() {
- foreach ( self::get_modules() as $module ) {
- $module->set_defaults();
- }
- }
-
- public static function get_module( $module_name ) {
- foreach ( self::get_modules() as $module ) {
- if ( $module->name() === $module_name ) {
- return $module;
- }
- }
-
- return false;
- }
-
- static function initialize_modules() {
- /**
- * Filters the list of class names of sync modules.
- * If you add to this list, make sure any classes implement the
- * Jetpack_Sync_Module interface.
- *
- * @since 4.2.0
- */
- $modules = apply_filters( 'jetpack_sync_modules', self::$default_sync_modules );
-
- $modules = array_map( array( 'Jetpack_Sync_Modules', 'load_module' ), $modules );
-
- return array_map( array( 'Jetpack_Sync_Modules', 'set_module_defaults' ), $modules );
- }
-
- static function load_module( $module_name ) {
- return new $module_name();
- }
-
- static function set_module_defaults( $module ) {
- $module->set_defaults();
- if ( method_exists( $module, 'set_late_default' ) ) {
- add_action( 'init', array( $module, 'set_late_default' ), 90 );
- }
- return $module;
- }
-
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-queue.php b/plugins/jetpack/sync/class.jetpack-sync-queue.php
deleted file mode 100644
index ae40a597..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-queue.php
+++ /dev/null
@@ -1,478 +0,0 @@
-<?php
-
-/**
- * A buffer of items from the queue that can be checked out
- */
-class Jetpack_Sync_Queue_Buffer {
- public $id;
- public $items_with_ids;
-
- public function __construct( $id, $items_with_ids ) {
- $this->id = $id;
- $this->items_with_ids = $items_with_ids;
- }
-
- public function get_items() {
- return array_combine( $this->get_item_ids(), $this->get_item_values() );
- }
-
- public function get_item_values() {
- return Jetpack_Sync_Utils::get_item_values( $this->items_with_ids );
- }
-
- public function get_item_ids() {
- return Jetpack_Sync_Utils::get_item_ids( $this->items_with_ids );
- }
-}
-
-/**
- * A persistent queue that can be flushed in increments of N items,
- * and which blocks reads until checked-out buffers are checked in or
- * closed. This uses raw SQL for two reasons: speed, and not triggering
- * tons of added_option callbacks.
- */
-class Jetpack_Sync_Queue {
- public $id;
- private $row_iterator;
-
- function __construct( $id ) {
- $this->id = str_replace( '-', '_', $id ); // necessary to ensure we don't have ID collisions in the SQL
- $this->row_iterator = 0;
- $this->random_int = mt_rand( 1, 1000000 );
- }
-
- function add( $item ) {
- global $wpdb;
- $added = false;
- // this basically tries to add the option until enough time has elapsed that
- // it has a unique (microtime-based) option key
- while ( ! $added ) {
- $rows_added = $wpdb->query(
- $wpdb->prepare(
- "INSERT INTO $wpdb->options (option_name, option_value, autoload) VALUES (%s, %s,%s)",
- $this->get_next_data_row_option_name(),
- serialize( $item ),
- 'no'
- )
- );
- $added = ( 0 !== $rows_added );
- }
- }
-
- // Attempts to insert all the items in a single SQL query. May be subject to query size limits!
- function add_all( $items ) {
- global $wpdb;
- $base_option_name = $this->get_next_data_row_option_name();
-
- $query = "INSERT INTO $wpdb->options (option_name, option_value, autoload) VALUES ";
-
- $rows = array();
-
- for ( $i = 0; $i < count( $items ); $i += 1 ) {
- $option_name = esc_sql( $base_option_name . '-' . $i );
- $option_value = esc_sql( serialize( $items[ $i ] ) );
- $rows[] = "('$option_name', '$option_value', 'no')";
- }
-
- $rows_added = $wpdb->query( $query . join( ',', $rows ) );
-
- if ( count( $items ) === $rows_added ) {
- return new WP_Error( 'row_count_mismatch', "The number of rows inserted didn't match the size of the input array" );
- }
- }
-
- // Peek at the front-most item on the queue without checking it out
- function peek( $count = 1 ) {
- $items = $this->fetch_items( $count );
- if ( $items ) {
- return Jetpack_Sync_Utils::get_item_values( $items );
- }
-
- return array();
- }
-
- // lag is the difference in time between the age of the oldest item
- // (aka first or frontmost item) and the current time
- function lag( $now = null ) {
- global $wpdb;
-
- $first_item_name = $wpdb->get_var(
- $wpdb->prepare(
- "SELECT option_name FROM $wpdb->options WHERE option_name LIKE %s ORDER BY option_name ASC LIMIT 1",
- "jpsq_{$this->id}-%"
- )
- );
-
- if ( ! $first_item_name ) {
- return 0;
- }
-
- if ( null === $now ) {
- $now = microtime( true );
- }
-
- // break apart the item name to get the timestamp
- $matches = null;
- if ( preg_match( '/^jpsq_' . $this->id . '-(\d+\.\d+)-/', $first_item_name, $matches ) ) {
- return $now - floatval( $matches[1] );
- } else {
- return 0;
- }
- }
-
- function reset() {
- global $wpdb;
- $this->delete_checkout_id();
- $wpdb->query(
- $wpdb->prepare(
- "DELETE FROM $wpdb->options WHERE option_name LIKE %s",
- "jpsq_{$this->id}-%"
- )
- );
- }
-
- function size() {
- global $wpdb;
-
- return (int) $wpdb->get_var(
- $wpdb->prepare(
- "SELECT count(*) FROM $wpdb->options WHERE option_name LIKE %s",
- "jpsq_{$this->id}-%"
- )
- );
- }
-
- // we use this peculiar implementation because it's much faster than count(*)
- function has_any_items() {
- global $wpdb;
- $value = $wpdb->get_var(
- $wpdb->prepare(
- "SELECT exists( SELECT option_name FROM $wpdb->options WHERE option_name LIKE %s )",
- "jpsq_{$this->id}-%"
- )
- );
-
- return ( $value === '1' );
- }
-
- function checkout( $buffer_size ) {
- if ( $this->get_checkout_id() ) {
- return new WP_Error( 'unclosed_buffer', 'There is an unclosed buffer' );
- }
-
- $buffer_id = uniqid();
-
- $result = $this->set_checkout_id( $buffer_id );
-
- if ( ! $result || is_wp_error( $result ) ) {
- return $result;
- }
-
- $items = $this->fetch_items( $buffer_size );
-
- if ( count( $items ) === 0 ) {
- return false;
- }
-
- $buffer = new Jetpack_Sync_Queue_Buffer( $buffer_id, array_slice( $items, 0, $buffer_size ) );
-
- return $buffer;
- }
-
- // this checks out rows until it either empties the queue or hits a certain memory limit
- // it loads the sizes from the DB first so that it doesn't accidentally
- // load more data into memory than it needs to.
- // The only way it will load more items than $max_size is if a single queue item
- // exceeds the memory limit, but in that case it will send that item by itself.
- function checkout_with_memory_limit( $max_memory, $max_buffer_size = 500 ) {
- if ( $this->get_checkout_id() ) {
- return new WP_Error( 'unclosed_buffer', 'There is an unclosed buffer' );
- }
-
- $buffer_id = uniqid();
-
- $result = $this->set_checkout_id( $buffer_id );
-
- if ( ! $result || is_wp_error( $result ) ) {
- return $result;
- }
-
- // get the map of buffer_id -> memory_size
- global $wpdb;
-
- $items_with_size = $wpdb->get_results(
- $wpdb->prepare(
- "SELECT option_name AS id, LENGTH(option_value) AS value_size FROM $wpdb->options WHERE option_name LIKE %s ORDER BY option_name ASC LIMIT %d",
- "jpsq_{$this->id}-%",
- $max_buffer_size
- ),
- OBJECT
- );
-
- if ( count( $items_with_size ) === 0 ) {
- return false;
- }
-
- $total_memory = 0;
-
- $min_item_id = $max_item_id = $items_with_size[0]->id;
-
- foreach ( $items_with_size as $id => $item_with_size ) {
- $total_memory += $item_with_size->value_size;
-
- // if this is the first item and it exceeds memory, allow loop to continue
- // we will exit on the next iteration instead
- if ( $total_memory > $max_memory && $id > 0 ) {
- break;
- }
-
- $max_item_id = $item_with_size->id;
- }
-
- $query = $wpdb->prepare(
- "SELECT option_name AS id, option_value AS value FROM $wpdb->options WHERE option_name >= %s and option_name <= %s ORDER BY option_name ASC",
- $min_item_id,
- $max_item_id
- );
-
- $items = $wpdb->get_results( $query, OBJECT );
- foreach ( $items as $item ) {
- $item->value = maybe_unserialize( $item->value );
- }
-
- if ( count( $items ) === 0 ) {
- $this->delete_checkout_id();
-
- return false;
- }
-
- $buffer = new Jetpack_Sync_Queue_Buffer( $buffer_id, $items );
-
- return $buffer;
- }
-
- function checkin( $buffer ) {
- $is_valid = $this->validate_checkout( $buffer );
-
- if ( is_wp_error( $is_valid ) ) {
- return $is_valid;
- }
-
- $this->delete_checkout_id();
-
- return true;
- }
-
- function close( $buffer, $ids_to_remove = null ) {
- $is_valid = $this->validate_checkout( $buffer );
-
- if ( is_wp_error( $is_valid ) ) {
- return $is_valid;
- }
-
- $this->delete_checkout_id();
-
- // by default clear all items in the buffer
- if ( is_null( $ids_to_remove ) ) {
- $ids_to_remove = $buffer->get_item_ids();
- }
-
- global $wpdb;
-
- if ( count( $ids_to_remove ) > 0 ) {
- $sql = "DELETE FROM $wpdb->options WHERE option_name IN (" . implode( ', ', array_fill( 0, count( $ids_to_remove ), '%s' ) ) . ')';
- $query = call_user_func_array( array( $wpdb, 'prepare' ), array_merge( array( $sql ), $ids_to_remove ) );
- $wpdb->query( $query );
- }
-
- return true;
- }
-
- function flush_all() {
- $items = Jetpack_Sync_Utils::get_item_values( $this->fetch_items() );
- $this->reset();
-
- return $items;
- }
-
- function get_all() {
- return $this->fetch_items();
- }
-
- // use with caution, this could allow multiple processes to delete
- // and send from the queue at the same time
- function force_checkin() {
- $this->delete_checkout_id();
- }
-
- // used to lock checkouts from the queue.
- // tries to wait up to $timeout seconds for the queue to be empty
- function lock( $timeout = 30 ) {
- $tries = 0;
-
- while ( $this->has_any_items() && $tries < $timeout ) {
- sleep( 1 );
- $tries += 1;
- }
-
- if ( $tries === 30 ) {
- return new WP_Error( 'lock_timeout', 'Timeout waiting for sync queue to empty' );
- }
-
- if ( $this->get_checkout_id() ) {
- return new WP_Error( 'unclosed_buffer', 'There is an unclosed buffer' );
- }
-
- // hopefully this means we can acquire a checkout?
- $result = $this->set_checkout_id( 'lock' );
-
- if ( ! $result || is_wp_error( $result ) ) {
- return $result;
- }
-
- return true;
- }
-
- function unlock() {
- return $this->delete_checkout_id();
- }
-
- /**
- * This option is specifically chosen to, as much as possible, preserve time order
- * and minimise the possibility of collisions between multiple processes working
- * at the same time.
- *
- * @return string
- */
- protected function generate_option_name_timestamp() {
- return sprintf( '%.6f', microtime( true ) );
- }
-
- private function get_checkout_id() {
- global $wpdb;
- $checkout_value = $wpdb->get_var(
- $wpdb->prepare(
- "SELECT option_value FROM $wpdb->options WHERE option_name = %s",
- $this->get_lock_option_name()
- )
- );
-
- if ( $checkout_value ) {
- list( $checkout_id, $timestamp ) = explode( ':', $checkout_value );
- if ( intval( $timestamp ) > time() ) {
- return $checkout_id;
- }
- }
-
- return false;
- }
-
- private function set_checkout_id( $checkout_id ) {
- global $wpdb;
-
- $expires = time() + Jetpack_Sync_Defaults::$default_sync_queue_lock_timeout;
- $updated_num = $wpdb->query(
- $wpdb->prepare(
- "UPDATE $wpdb->options SET option_value = %s WHERE option_name = %s",
- "$checkout_id:$expires",
- $this->get_lock_option_name()
- )
- );
-
- if ( ! $updated_num ) {
- $updated_num = $wpdb->query(
- $wpdb->prepare(
- "INSERT INTO $wpdb->options ( option_name, option_value, autoload ) VALUES ( %s, %s, 'no' )",
- $this->get_lock_option_name(),
- "$checkout_id:$expires"
- )
- );
- }
-
- return $updated_num;
- }
-
- private function delete_checkout_id() {
- global $wpdb;
- // rather than delete, which causes fragmentation, we update in place
- return $wpdb->query(
- $wpdb->prepare(
- "UPDATE $wpdb->options SET option_value = %s WHERE option_name = %s",
- '0:0',
- $this->get_lock_option_name()
- )
- );
-
- }
-
- private function get_lock_option_name() {
- return "jpsq_{$this->id}_checkout";
- }
-
- private function get_next_data_row_option_name() {
- $timestamp = $this->generate_option_name_timestamp();
-
- // row iterator is used to avoid collisions where we're writing data waaay fast in a single process
- if ( $this->row_iterator === PHP_INT_MAX ) {
- $this->row_iterator = 0;
- } else {
- $this->row_iterator += 1;
- }
-
- return 'jpsq_' . $this->id . '-' . $timestamp . '-' . $this->random_int . '-' . $this->row_iterator;
- }
-
- private function fetch_items( $limit = null ) {
- global $wpdb;
-
- if ( $limit ) {
- $query_sql = $wpdb->prepare( "SELECT option_name AS id, option_value AS value FROM $wpdb->options WHERE option_name LIKE %s ORDER BY option_name ASC LIMIT %d", "jpsq_{$this->id}-%", $limit );
- } else {
- $query_sql = $wpdb->prepare( "SELECT option_name AS id, option_value AS value FROM $wpdb->options WHERE option_name LIKE %s ORDER BY option_name ASC", "jpsq_{$this->id}-%" );
- }
-
- $items = $wpdb->get_results( $query_sql, OBJECT );
- foreach ( $items as $item ) {
- $item->value = maybe_unserialize( $item->value );
- }
-
- return $items;
- }
-
- private function validate_checkout( $buffer ) {
- if ( ! $buffer instanceof Jetpack_Sync_Queue_Buffer ) {
- return new WP_Error( 'not_a_buffer', 'You must checkin an instance of Jetpack_Sync_Queue_Buffer' );
- }
-
- $checkout_id = $this->get_checkout_id();
-
- if ( ! $checkout_id ) {
- return new WP_Error( 'buffer_not_checked_out', 'There are no checked out buffers' );
- }
-
- if ( $checkout_id != $buffer->id ) {
- return new WP_Error( 'buffer_mismatch', 'The buffer you checked in was not checked out' );
- }
-
- return true;
- }
-}
-
-class Jetpack_Sync_Utils {
-
- static function get_item_values( $items ) {
- return array_map( array( __CLASS__, 'get_item_value' ), $items );
- }
-
- static function get_item_ids( $items ) {
- return array_map( array( __CLASS__, 'get_item_id' ), $items );
- }
-
- private static function get_item_value( $item ) {
- return $item->value;
- }
-
- private static function get_item_id( $item ) {
- return $item->id;
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-sender.php b/plugins/jetpack/sync/class.jetpack-sync-sender.php
deleted file mode 100644
index 21f91481..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-sender.php
+++ /dev/null
@@ -1,416 +0,0 @@
-<?php
-
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-queue.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-defaults.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-json-deflate-array-codec.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-simple-codec.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-modules.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-settings.php';
-
-/**
- * This class grabs pending actions from the queue and sends them
- */
-class Jetpack_Sync_Sender {
-
- const NEXT_SYNC_TIME_OPTION_NAME = 'jetpack_next_sync_time';
- const WPCOM_ERROR_SYNC_DELAY = 60;
- const QUEUE_LOCKED_SYNC_DELAY = 10;
-
- private $dequeue_max_bytes;
- private $upload_max_bytes;
- private $upload_max_rows;
- private $max_dequeue_time;
- private $sync_wait_time;
- private $sync_wait_threshold;
- private $enqueue_wait_time;
- private $sync_queue;
- private $full_sync_queue;
- private $codec;
- private $old_user;
-
- // singleton functions
- private static $instance;
-
- public static function get_instance() {
- if ( null === self::$instance ) {
- self::$instance = new self();
- }
-
- return self::$instance;
- }
-
- // this is necessary because you can't use "new" when you declare instance properties >:(
- protected function __construct() {
- $this->set_defaults();
- $this->init();
- }
-
- private function init() {
- add_action( 'jetpack_sync_before_send_queue_sync', array( $this, 'maybe_set_user_from_token' ), 1 );
- add_action( 'jetpack_sync_before_send_queue_sync', array( $this, 'maybe_clear_user_from_token' ), 20 );
- foreach ( Jetpack_Sync_Modules::get_modules() as $module ) {
- $module->init_before_send();
- }
- }
-
- public function maybe_set_user_from_token() {
- $jetpack = Jetpack::init();
- $verified_user = $jetpack->verify_xml_rpc_signature();
- if ( Jetpack_Constants::is_true( 'XMLRPC_REQUEST' ) &&
- ! is_wp_error( $verified_user )
- && $verified_user
- ) {
- $old_user = wp_get_current_user();
- $this->old_user = isset( $old_user->ID ) ? $old_user->ID : 0;
- wp_set_current_user( $verified_user['user_id'] );
- }
- }
-
- public function maybe_clear_user_from_token() {
- if ( isset( $this->old_user ) ) {
- wp_set_current_user( $this->old_user );
- }
- }
-
- public function get_next_sync_time( $queue_name ) {
- return (float) get_option( self::NEXT_SYNC_TIME_OPTION_NAME . '_' . $queue_name, 0 );
- }
-
- public function set_next_sync_time( $time, $queue_name ) {
- return update_option( self::NEXT_SYNC_TIME_OPTION_NAME . '_' . $queue_name, $time, true );
- }
-
- public function do_full_sync() {
- if ( ! Jetpack_Sync_Modules::get_module( 'full-sync' ) ) {
- return;
- }
- $this->continue_full_sync_enqueue();
- return $this->do_sync_and_set_delays( $this->full_sync_queue );
- }
-
- private function continue_full_sync_enqueue() {
- if ( defined( 'WP_IMPORTING' ) && WP_IMPORTING ) {
- return false;
- }
-
- if ( $this->get_next_sync_time( 'full-sync-enqueue' ) > microtime( true ) ) {
- return false;
- }
-
- Jetpack_Sync_Modules::get_module( 'full-sync' )->continue_enqueuing();
-
- $this->set_next_sync_time( time() + $this->get_enqueue_wait_time(), 'full-sync-enqueue' );
- }
-
- public function do_sync() {
- return $this->do_sync_and_set_delays( $this->sync_queue );
- }
-
- public function do_sync_and_set_delays( $queue ) {
- // don't sync if importing
- if ( defined( 'WP_IMPORTING' ) && WP_IMPORTING ) {
- return new WP_Error( 'is_importing' );
- }
-
- // don't sync if we are throttled
- if ( $this->get_next_sync_time( $queue->id ) > microtime( true ) ) {
- return new WP_Error( 'sync_throttled' );
- }
-
- $start_time = microtime( true );
-
- Jetpack_Sync_Settings::set_is_syncing( true );
-
- $sync_result = $this->do_sync_for_queue( $queue );
-
- Jetpack_Sync_Settings::set_is_syncing( false );
-
- $exceeded_sync_wait_threshold = ( microtime( true ) - $start_time ) > (float) $this->get_sync_wait_threshold();
-
- if ( is_wp_error( $sync_result ) ) {
- if ( 'unclosed_buffer' === $sync_result->get_error_code() ) {
- $this->set_next_sync_time( time() + self::QUEUE_LOCKED_SYNC_DELAY, $queue->id );
- }
- if ( 'wpcom_error' === $sync_result->get_error_code() ) {
- $this->set_next_sync_time( time() + self::WPCOM_ERROR_SYNC_DELAY, $queue->id );
- }
- } elseif ( $exceeded_sync_wait_threshold ) {
- // if we actually sent data and it took a while, wait before sending again
- $this->set_next_sync_time( time() + $this->get_sync_wait_time(), $queue->id );
- }
-
- return $sync_result;
- }
-
- public function get_items_to_send( $buffer, $encode = true ) {
- // track how long we've been processing so we can avoid request timeouts
- $start_time = microtime( true );
- $upload_size = 0;
- $items_to_send = array();
- $items = $buffer->get_items();
- // set up current screen to avoid errors rendering content
- require_once ABSPATH . 'wp-admin/includes/class-wp-screen.php';
- require_once ABSPATH . 'wp-admin/includes/screen.php';
- set_current_screen( 'sync' );
- $skipped_items_ids = array();
- // we estimate the total encoded size as we go by encoding each item individually
- // this is expensive, but the only way to really know :/
- foreach ( $items as $key => $item ) {
- // Suspending cache addition help prevent overloading in memory cache of large sites.
- wp_suspend_cache_addition( true );
- /**
- * Modify the data within an action before it is serialized and sent to the server
- * For example, during full sync this expands Post ID's into full Post objects,
- * so that we don't have to serialize the whole object into the queue.
- *
- * @since 4.2.0
- *
- * @param array The action parameters
- * @param int The ID of the user who triggered the action
- */
- $item[1] = apply_filters( 'jetpack_sync_before_send_' . $item[0], $item[1], $item[2] );
- wp_suspend_cache_addition( false );
- if ( $item[1] === false ) {
- $skipped_items_ids[] = $key;
- continue;
- }
- $encoded_item = $encode ? $this->codec->encode( $item ) : $item;
- $upload_size += strlen( $encoded_item );
- if ( $upload_size > $this->upload_max_bytes && count( $items_to_send ) > 0 ) {
- break;
- }
- $items_to_send[ $key ] = $encoded_item;
- if ( microtime( true ) - $start_time > $this->max_dequeue_time ) {
- break;
- }
- }
-
- return array( $items_to_send, $skipped_items_ids, $items, microtime( true ) - $start_time );
- }
-
- private function fastcgi_finish_request() {
- if ( function_exists( 'fastcgi_finish_request' ) && version_compare( phpversion(), '7.0.16', '>=' ) ) {
- fastcgi_finish_request();
- }
- }
-
- public function do_sync_for_queue( $queue ) {
- do_action( 'jetpack_sync_before_send_queue_' . $queue->id );
- if ( $queue->size() === 0 ) {
- return new WP_Error( 'empty_queue_' . $queue->id );
- }
- // now that we're sure we are about to sync, try to
- // ignore user abort so we can avoid getting into a
- // bad state
- if ( function_exists( 'ignore_user_abort' ) ) {
- ignore_user_abort( true );
- }
-
- /* Don't make the request block till we finish, if possible. */
- if ( Jetpack_Constants::is_true( 'REST_REQUEST' ) || Jetpack_Constants::is_true('XMLRPC_REQUEST' ) ) {
- $this->fastcgi_finish_request();
- }
-
- $checkout_start_time = microtime( true );
-
- $buffer = $queue->checkout_with_memory_limit( $this->dequeue_max_bytes, $this->upload_max_rows );
-
- if ( ! $buffer ) {
- // buffer has no items
- return new WP_Error( 'empty_buffer' );
- }
-
- if ( is_wp_error( $buffer ) ) {
- return $buffer;
- }
-
- $checkout_duration = microtime( true ) - $checkout_start_time;
-
- list( $items_to_send, $skipped_items_ids, $items, $preprocess_duration ) = $this->get_items_to_send( $buffer, true );
- if ( ! empty( $items_to_send ) ) {
- /**
- * Fires when data is ready to send to the server.
- * Return false or WP_Error to abort the sync (e.g. if there's an error)
- * The items will be automatically re-sent later
- *
- * @since 4.2.0
- *
- * @param array $data The action buffer
- * @param string $codec The codec name used to encode the data
- * @param double $time The current time
- * @param string $queue The queue used to send ('sync' or 'full_sync')
- */
- Jetpack_Sync_Settings::set_is_sending( true );
- $processed_item_ids = apply_filters( 'jetpack_sync_send_data', $items_to_send, $this->codec->name(), microtime( true ), $queue->id, $checkout_duration, $preprocess_duration );
- Jetpack_Sync_Settings::set_is_sending( false );
- } else {
- $processed_item_ids = $skipped_items_ids;
- $skipped_items_ids = array();
- }
-
- if ( ! $processed_item_ids || is_wp_error( $processed_item_ids ) ) {
- $checked_in_item_ids = $queue->checkin( $buffer );
- if ( is_wp_error( $checked_in_item_ids ) ) {
- error_log( 'Error checking in buffer: ' . $checked_in_item_ids->get_error_message() );
- $queue->force_checkin();
- }
- if ( is_wp_error( $processed_item_ids ) ) {
- return new WP_Error( 'wpcom_error', $processed_item_ids->get_error_code() );
- }
- // returning a WP_Error('wpcom_error') is a sign to the caller that we should wait a while
- // before syncing again
- return new WP_Error( 'wpcom_error', 'jetpack_sync_send_data_false' );
- } else {
- // detect if the last item ID was an error
- $had_wp_error = is_wp_error( end( $processed_item_ids ) );
- if ( $had_wp_error ) {
- $wp_error = array_pop( $processed_item_ids );
- }
- // also checkin any items that were skipped
- if ( count( $skipped_items_ids ) > 0 ) {
- $processed_item_ids = array_merge( $processed_item_ids, $skipped_items_ids );
- }
- $processed_items = array_intersect_key( $items, array_flip( $processed_item_ids ) );
- /**
- * Allows us to keep track of all the actions that have been sent.
- * Allows us to calculate the progress of specific actions.
- *
- * @since 4.2.0
- *
- * @param array $processed_actions The actions that we send successfully.
- */
- do_action( 'jetpack_sync_processed_actions', $processed_items );
- $queue->close( $buffer, $processed_item_ids );
- // returning a WP_Error is a sign to the caller that we should wait a while
- // before syncing again
- if ( $had_wp_error ) {
- return new WP_Error( 'wpcom_error', $wp_error->get_error_code() );
- }
- }
- return true;
- }
-
- function get_sync_queue() {
- return $this->sync_queue;
- }
-
- function get_full_sync_queue() {
- return $this->full_sync_queue;
- }
-
- function get_codec() {
- return $this->codec;
- }
- function set_codec() {
- if ( function_exists( 'gzinflate' ) ) {
- $this->codec = new Jetpack_Sync_JSON_Deflate_Array_Codec();
- } else {
- $this->codec = new Jetpack_Sync_Simple_Codec();
- }
- }
-
- function send_checksum() {
- require_once 'class.jetpack-sync-wp-replicastore.php';
- $store = new Jetpack_Sync_WP_Replicastore();
- do_action( 'jetpack_sync_checksum', $store->checksum_all() );
- }
-
- function reset_sync_queue() {
- $this->sync_queue->reset();
- }
-
- function reset_full_sync_queue() {
- $this->full_sync_queue->reset();
- }
-
- function set_dequeue_max_bytes( $size ) {
- $this->dequeue_max_bytes = $size;
- }
-
- // in bytes
- function set_upload_max_bytes( $max_bytes ) {
- $this->upload_max_bytes = $max_bytes;
- }
-
- // in rows
- function set_upload_max_rows( $max_rows ) {
- $this->upload_max_rows = $max_rows;
- }
-
- // in seconds
- function set_sync_wait_time( $seconds ) {
- $this->sync_wait_time = $seconds;
- }
-
- function get_sync_wait_time() {
- return $this->sync_wait_time;
- }
-
- function set_enqueue_wait_time( $seconds ) {
- $this->enqueue_wait_time = $seconds;
- }
-
- function get_enqueue_wait_time() {
- return $this->enqueue_wait_time;
- }
-
- // in seconds
- function set_sync_wait_threshold( $seconds ) {
- $this->sync_wait_threshold = $seconds;
- }
-
- function get_sync_wait_threshold() {
- return $this->sync_wait_threshold;
- }
-
- // in seconds
- function set_max_dequeue_time( $seconds ) {
- $this->max_dequeue_time = $seconds;
- }
-
-
-
- function set_defaults() {
- $this->sync_queue = new Jetpack_Sync_Queue( 'sync' );
- $this->full_sync_queue = new Jetpack_Sync_Queue( 'full_sync' );
- $this->set_codec();
-
- // saved settings
- Jetpack_Sync_Settings::set_importing( null );
- $settings = Jetpack_Sync_Settings::get_settings();
- $this->set_dequeue_max_bytes( $settings['dequeue_max_bytes'] );
- $this->set_upload_max_bytes( $settings['upload_max_bytes'] );
- $this->set_upload_max_rows( $settings['upload_max_rows'] );
- $this->set_sync_wait_time( $settings['sync_wait_time'] );
- $this->set_enqueue_wait_time( $settings['enqueue_wait_time'] );
- $this->set_sync_wait_threshold( $settings['sync_wait_threshold'] );
- $this->set_max_dequeue_time( Jetpack_Sync_Defaults::get_max_sync_execution_time() );
- }
-
- function reset_data() {
- $this->reset_sync_queue();
- $this->reset_full_sync_queue();
-
- foreach ( Jetpack_Sync_Modules::get_modules() as $module ) {
- $module->reset_data();
- }
-
- foreach ( array( 'sync', 'full_sync', 'full-sync-enqueue' ) as $queue_name ) {
- delete_option( self::NEXT_SYNC_TIME_OPTION_NAME . '_' . $queue_name );
- }
-
- Jetpack_Sync_Settings::reset_data();
- }
-
- function uninstall() {
- // Lets delete all the other fun stuff like transient and option and the sync queue
- $this->reset_data();
-
- // delete the full sync status
- delete_option( 'jetpack_full_sync_status' );
-
- // clear the sync cron.
- wp_clear_scheduled_hook( 'jetpack_sync_cron' );
- wp_clear_scheduled_hook( 'jetpack_sync_full_cron' );
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-server.php b/plugins/jetpack/sync/class.jetpack-sync-server.php
deleted file mode 100644
index dbd9172a..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-server.php
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php
-
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-json-deflate-array-codec.php';
-
-/**
- * Simple version of a Jetpack Sync Server - just receives arrays of events and
- * issues them locally with the 'jetpack_sync_remote_action' action.
- */
-class Jetpack_Sync_Server {
- private $codec;
- const MAX_TIME_PER_REQUEST_IN_SECONDS = 15;
- const BLOG_LOCK_TRANSIENT_PREFIX = 'jp_sync_req_lock_';
- const BLOG_LOCK_TRANSIENT_EXPIRY = 60; // seconds
-
- // this is necessary because you can't use "new" when you declare instance properties >:(
- function __construct() {
- $this->codec = new Jetpack_Sync_JSON_Deflate_Array_Codec();
- }
-
- function set_codec( iJetpack_Sync_Codec $codec ) {
- $this->codec = $codec;
- }
-
- function attempt_request_lock( $blog_id, $expiry = self::BLOG_LOCK_TRANSIENT_EXPIRY ) {
- $transient_name = $this->get_concurrent_request_transient_name( $blog_id );
- $locked_time = get_site_transient( $transient_name );
- if ( $locked_time ) {
- return false;
- }
- set_site_transient( $transient_name, microtime( true ), $expiry );
-
- return true;
- }
-
- private function get_concurrent_request_transient_name( $blog_id ) {
- return self::BLOG_LOCK_TRANSIENT_PREFIX . $blog_id;
- }
-
- function remove_request_lock( $blog_id ) {
- delete_site_transient( $this->get_concurrent_request_transient_name( $blog_id ) );
- }
-
- function receive( $data, $token = null, $sent_timestamp = null, $queue_id = null ) {
- $start_time = microtime( true );
- if ( ! is_array( $data ) ) {
- return new WP_Error( 'action_decoder_error', 'Events must be an array' );
- }
-
- if ( $token && ! $this->attempt_request_lock( $token->blog_id ) ) {
- /**
- * Fires when the server receives two concurrent requests from the same blog
- *
- * @since 4.2.0
- *
- * @param token The token object of the misbehaving site
- */
- do_action( 'jetpack_sync_multi_request_fail', $token );
-
- return new WP_Error( 'concurrent_request_error', 'There is another request running for the same blog ID' );
- }
-
- $events = wp_unslash( array_map( array( $this->codec, 'decode' ), $data ) );
- $events_processed = array();
-
- /**
- * Fires when an array of actions are received from a remote Jetpack site
- *
- * @since 4.2.0
- *
- * @param array Array of actions received from the remote site
- */
- do_action( 'jetpack_sync_remote_actions', $events, $token );
-
- foreach ( $events as $key => $event ) {
- list( $action_name, $args, $user_id, $timestamp, $silent ) = $event;
-
- /**
- * Fires when an action is received from a remote Jetpack site
- *
- * @since 4.2.0
- *
- * @param string $action_name The name of the action executed on the remote site
- * @param array $args The arguments passed to the action
- * @param int $user_id The external_user_id who did the action
- * @param bool $silent Whether the item was created via import
- * @param double $timestamp Timestamp (in seconds) when the action occurred
- * @param double $sent_timestamp Timestamp (in seconds) when the action was transmitted
- * @param string $queue_id ID of the queue from which the event was sent (sync or full_sync)
- * @param array $token The auth token used to invoke the API
- */
- do_action( 'jetpack_sync_remote_action', $action_name, $args, $user_id, $silent, $timestamp, $sent_timestamp, $queue_id, $token );
-
- $events_processed[] = $key;
-
- if ( microtime( true ) - $start_time > self::MAX_TIME_PER_REQUEST_IN_SECONDS ) {
- break;
- }
- }
-
- if ( $token ) {
- $this->remove_request_lock( $token->blog_id );
- }
-
- return $events_processed;
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-settings.php b/plugins/jetpack/sync/class.jetpack-sync-settings.php
deleted file mode 100644
index c581a7dd..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-settings.php
+++ /dev/null
@@ -1,179 +0,0 @@
-<?php
-
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-defaults.php';
-
-class Jetpack_Sync_Settings {
- const SETTINGS_OPTION_PREFIX = 'jetpack_sync_settings_';
-
- static $valid_settings = array(
- 'dequeue_max_bytes' => true,
- 'upload_max_bytes' => true,
- 'upload_max_rows' => true,
- 'sync_wait_time' => true,
- 'sync_wait_threshold' => true,
- 'enqueue_wait_time' => true,
- 'max_queue_size' => true,
- 'max_queue_lag' => true,
- 'queue_max_writes_sec' => true,
- 'post_types_blacklist' => true,
- 'disable' => true,
- 'render_filtered_content' => true,
- 'post_meta_whitelist' => true,
- 'comment_meta_whitelist' => true,
- 'max_enqueue_full_sync' => true,
- 'max_queue_size_full_sync' => true,
- 'sync_via_cron' => true,
- 'cron_sync_time_limit' => true,
- );
-
- static $is_importing;
- static $is_doing_cron;
- static $is_syncing;
- static $is_sending;
-
- static $settings_cache = array(); // some settings can be expensive to compute - let's cache them
-
- static function get_settings() {
- $settings = array();
- foreach ( array_keys( self::$valid_settings ) as $setting ) {
- $settings[ $setting ] = self::get_setting( $setting );
- }
-
- return $settings;
- }
-
- // Fetches the setting. It saves it if the setting doesn't exist, so that it gets
- // autoloaded on page load rather than re-queried every time.
- static function get_setting( $setting ) {
- if ( ! isset( self::$valid_settings[ $setting ] ) ) {
- return false;
- }
-
- if ( isset( self::$settings_cache[ $setting ] ) ) {
- return self::$settings_cache[ $setting ];
- }
-
- $value = get_option( self::SETTINGS_OPTION_PREFIX . $setting );
-
- if ( false === $value ) {
- $default_name = "default_$setting"; // e.g. default_dequeue_max_bytes
- $value = Jetpack_Sync_Defaults::$$default_name;
- update_option( self::SETTINGS_OPTION_PREFIX . $setting, $value, true );
- }
-
- if ( is_numeric( $value ) ) {
- $value = intval( $value );
- }
- $default_array_value = null;
- switch ( $setting ) {
- case 'post_types_blacklist':
- $default_array_value = Jetpack_Sync_Defaults::$blacklisted_post_types;
- break;
- case 'post_meta_whitelist':
- $default_array_value = Jetpack_Sync_Defaults::get_post_meta_whitelist();
- break;
- case 'comment_meta_whitelist':
- $default_array_value = Jetpack_Sync_Defaults::get_comment_meta_whitelist();
- break;
- }
-
- if ( $default_array_value ) {
- if ( is_array( $value ) ) {
- $value = array_unique( array_merge( $value, $default_array_value ) );
- } else {
- $value = $default_array_value;
- }
- }
-
- self::$settings_cache[ $setting ] = $value;
-
- return $value;
- }
-
- static function update_settings( $new_settings ) {
- $validated_settings = array_intersect_key( $new_settings, self::$valid_settings );
- foreach ( $validated_settings as $setting => $value ) {
- update_option( self::SETTINGS_OPTION_PREFIX . $setting, $value, true );
- unset( self::$settings_cache[ $setting ] );
-
- // if we set the disabled option to true, clear the queues
- if ( 'disable' === $setting && ! ! $value ) {
- require_once dirname( __FILE__ ) . '/class.jetpack-sync-listener.php';
- $listener = Jetpack_Sync_Listener::get_instance();
- $listener->get_sync_queue()->reset();
- $listener->get_full_sync_queue()->reset();
- }
- }
- }
-
- // returns escapted SQL that can be injected into a WHERE clause
- static function get_blacklisted_post_types_sql() {
- return 'post_type NOT IN (\'' . join( '\', \'', array_map( 'esc_sql', self::get_setting( 'post_types_blacklist' ) ) ) . '\')';
- }
-
- static function get_whitelisted_post_meta_sql() {
- return 'meta_key IN (\'' . join( '\', \'', array_map( 'esc_sql', self::get_setting( 'post_meta_whitelist' ) ) ) . '\')';
- }
-
- static function get_whitelisted_comment_meta_sql() {
- return 'meta_key IN (\'' . join( '\', \'', array_map( 'esc_sql', self::get_setting( 'comment_meta_whitelist' ) ) ) . '\')';
- }
-
- static function get_comments_filter_sql() {
- return "comment_approved <> 'spam'";
- }
-
- static function reset_data() {
- $valid_settings = self::$valid_settings;
- self::$settings_cache = array();
- foreach ( $valid_settings as $option => $value ) {
- delete_option( self::SETTINGS_OPTION_PREFIX . $option );
- }
- self::set_importing( null );
- self::set_doing_cron( null );
- self::set_is_syncing( null );
- self::set_is_sending( null );
- }
-
- static function set_importing( $is_importing ) {
- // set to NULL to revert to WP_IMPORTING, the standard behavior
- self::$is_importing = $is_importing;
- }
-
- static function is_importing() {
- if ( ! is_null( self::$is_importing ) ) {
- return self::$is_importing;
- }
-
- return defined( 'WP_IMPORTING' ) && WP_IMPORTING;
- }
-
- static function set_doing_cron( $is_doing_cron ) {
- // set to NULL to revert to WP_IMPORTING, the standard behavior
- self::$is_doing_cron = $is_doing_cron;
- }
-
- static function is_doing_cron() {
- if ( ! is_null( self::$is_doing_cron ) ) {
- return self::$is_doing_cron;
- }
-
- return defined( 'DOING_CRON' ) && DOING_CRON;
- }
-
- static function is_syncing() {
- return (bool) self::$is_syncing || ( defined( 'REST_API_REQUEST' ) && REST_API_REQUEST );
- }
-
- static function set_is_syncing( $is_syncing ) {
- self::$is_syncing = $is_syncing;
- }
-
- static function is_sending() {
- return (bool) self::$is_sending;
- }
-
- static function set_is_sending( $is_sending ) {
- self::$is_sending = $is_sending;
- }
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-simple-codec.php b/plugins/jetpack/sync/class.jetpack-sync-simple-codec.php
deleted file mode 100644
index 7bd9aaac..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-simple-codec.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-json-deflate-array-codec.php';
-
-/**
- * An implementation of iJetpack_Sync_Codec that uses gzip's DEFLATE
- * algorithm to compress objects serialized using json_encode
- */
-class Jetpack_Sync_Simple_Codec extends Jetpack_Sync_JSON_Deflate_Array_Codec {
- const CODEC_NAME = 'simple';
-
- public function name() {
- return self::CODEC_NAME;
- }
-
- public function encode( $object ) {
- return base64_encode( $this->json_serialize( $object ) );
- }
-
- public function decode( $input ) {
- return $this->json_unserialize( base64_decode( $input ) );
- }
-
-}
diff --git a/plugins/jetpack/sync/class.jetpack-sync-users.php b/plugins/jetpack/sync/class.jetpack-sync-users.php
deleted file mode 100644
index de032e2d..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-users.php
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
-
-/**
- * Class Jetpack_Sync_Users
- *
- * Responsible for syncing user data changes.
- */
-class Jetpack_Sync_Users {
- static $user_roles = array();
-
- static function init() {
- if ( Jetpack::is_active() ) {
- // Kick off synchronization of user role when it changes
- add_action( 'set_user_role', array( __CLASS__, 'user_role_change' ) );
- }
- }
-
- /**
- * Synchronize connected user role changes
- */
- static function user_role_change( $user_id ) {
- if ( Jetpack::is_user_connected( $user_id ) ) {
- self::update_role_on_com( $user_id );
- // try to choose a new master if we're demoting the current one
- self::maybe_demote_master_user( $user_id );
- }
- }
-
- static function get_role( $user_id ) {
- if ( isset( self::$user_roles[ $user_id ] ) ) {
- return self::$user_roles[ $user_id ];
- }
-
- $current_user_id = get_current_user_id();
- wp_set_current_user( $user_id );
- $role = Jetpack::translate_current_user_to_role();
- wp_set_current_user( $current_user_id );
- $user_roles[ $user_id ] = $role;
-
- return $role;
- }
-
- static function get_signed_role( $user_id ) {
- return Jetpack::sign_role( self::get_role( $user_id ), $user_id );
- }
-
- static function update_role_on_com( $user_id ) {
- $signed_role = self::get_signed_role( $user_id );
- Jetpack::xmlrpc_async_call( 'jetpack.updateRole', $user_id, $signed_role );
- }
-
- static function maybe_demote_master_user( $user_id ) {
- $master_user_id = Jetpack_Options::get_option( 'master_user' );
- $role = self::get_role( $user_id );
- if ( $user_id == $master_user_id && 'administrator' != $role ) {
- $query = new WP_User_Query(
- array(
- 'fields' => array( 'id' ),
- 'role' => 'administrator',
- 'orderby' => 'id',
- 'exclude' => array( $master_user_id ),
- )
- );
- $new_master = false;
- foreach ( $query->results as $result ) {
- $found_user_id = absint( $result->id );
- if ( $found_user_id && Jetpack::is_user_connected( $found_user_id ) ) {
- $new_master = $found_user_id;
- break;
- }
- }
-
- if ( $new_master ) {
- Jetpack_Options::update_option( 'master_user', $new_master );
- }
- // else disconnect..?
- }
- }
-}
-
-Jetpack_Sync_Users::init();
diff --git a/plugins/jetpack/sync/class.jetpack-sync-wp-replicastore.php b/plugins/jetpack/sync/class.jetpack-sync-wp-replicastore.php
deleted file mode 100644
index 2b24caf6..00000000
--- a/plugins/jetpack/sync/class.jetpack-sync-wp-replicastore.php
+++ /dev/null
@@ -1,801 +0,0 @@
-<?php
-
-require_once dirname( __FILE__ ) . '/interface.jetpack-sync-replicastore.php';
-require_once dirname( __FILE__ ) . '/class.jetpack-sync-defaults.php';
-
-/**
- * An implementation of iJetpack_Sync_Replicastore which returns data stored in a WordPress.org DB.
- * This is useful to compare values in the local WP DB to values in the synced replica store
- */
-class Jetpack_Sync_WP_Replicastore implements iJetpack_Sync_Replicastore {
-
-
- public function reset() {
- global $wpdb;
-
- $wpdb->query( "DELETE FROM $wpdb->posts" );
- $wpdb->query( "DELETE FROM $wpdb->comments" );
-
- // also need to delete terms from cache
- $term_ids = $wpdb->get_col( "SELECT term_id FROM $wpdb->terms" );
- foreach ( $term_ids as $term_id ) {
- wp_cache_delete( $term_id, 'terms' );
- }
-
- $wpdb->query( "DELETE FROM $wpdb->terms" );
-
- $wpdb->query( "DELETE FROM $wpdb->term_taxonomy" );
- $wpdb->query( "DELETE FROM $wpdb->term_relationships" );
-
- // callables and constants
- $wpdb->query( "DELETE FROM $wpdb->options WHERE option_name LIKE 'jetpack_%'" );
- $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key NOT LIKE '\_%'" );
- }
-
- function full_sync_start( $config ) {
- $this->reset();
- }
-
- function full_sync_end( $checksum ) {
- // noop right now
- }
-
- public function post_count( $status = null, $min_id = null, $max_id = null ) {
- global $wpdb;
-
- $where = '';
-
- if ( $status ) {
- $where = "post_status = '" . esc_sql( $status ) . "'";
- } else {
- $where = '1=1';
- }
-
- if ( null != $min_id ) {
- $where .= ' AND ID >= ' . intval( $min_id );
- }
-
- if ( null != $max_id ) {
- $where .= ' AND ID <= ' . intval( $max_id );
- }
-
- return $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts WHERE $where" );
- }
-
- // TODO: actually use max_id/min_id
- public function get_posts( $status = null, $min_id = null, $max_id = null ) {
- $args = array(
- 'orderby' => 'ID',
- 'posts_per_page' => -1,
- );
-
- if ( $status ) {
- $args['post_status'] = $status;
- } else {
- $args['post_status'] = 'any';
- }
-
- return get_posts( $args );
- }
-
- public function get_post( $id ) {
- return get_post( $id );
- }
-
- public function upsert_post( $post, $silent = false ) {
- global $wpdb;
-
- // reject the post if it's not a WP_Post
- if ( ! $post instanceof WP_Post ) {
- return;
- }
-
- $post = $post->to_array();
-
- // reject posts without an ID
- if ( ! isset( $post['ID'] ) ) {
- return;
- }
-
- $now = current_time( 'mysql' );
- $now_gmt = get_gmt_from_date( $now );
-
- $defaults = array(
- 'ID' => 0,
- 'post_author' => '0',
- 'post_content' => '',
- 'post_content_filtered' => '',
- 'post_title' => '',
- 'post_name' => '',
- 'post_excerpt' => '',
- 'post_status' => 'draft',
- 'post_type' => 'post',
- 'comment_status' => 'closed',
- 'comment_count' => '0',
- 'ping_status' => '',
- 'post_password' => '',
- 'to_ping' => '',
- 'pinged' => '',
- 'post_parent' => 0,
- 'menu_order' => 0,
- 'guid' => '',
- 'post_date' => $now,
- 'post_date_gmt' => $now_gmt,
- 'post_modified' => $now,
- 'post_modified_gmt' => $now_gmt,
- );
-
- $post = array_intersect_key( $post, $defaults );
-
- $post = sanitize_post( $post, 'db' );
-
- unset( $post['filter'] );
-
- $exists = $wpdb->get_var( $wpdb->prepare( "SELECT EXISTS( SELECT 1 FROM $wpdb->posts WHERE ID = %d )", $post['ID'] ) );
-
- if ( $exists ) {
- $wpdb->update( $wpdb->posts, $post, array( 'ID' => $post['ID'] ) );
- } else {
- $wpdb->insert( $wpdb->posts, $post );
- }
-
- clean_post_cache( $post['ID'] );
- }
-
- public function delete_post( $post_id ) {
- wp_delete_post( $post_id, true );
- }
-
- public function posts_checksum( $min_id = null, $max_id = null ) {
- global $wpdb;
- return $this->table_checksum( $wpdb->posts, Jetpack_Sync_Defaults::$default_post_checksum_columns, 'ID', Jetpack_Sync_Settings::get_blacklisted_post_types_sql(), $min_id, $max_id );
- }
-
- public function post_meta_checksum( $min_id = null, $max_id = null ) {
- global $wpdb;
- return $this->table_checksum( $wpdb->postmeta, Jetpack_Sync_Defaults::$default_post_meta_checksum_columns, 'meta_id', Jetpack_Sync_Settings::get_whitelisted_post_meta_sql(), $min_id, $max_id );
- }
-
- public function comment_count( $status = null, $min_id = null, $max_id = null ) {
- global $wpdb;
-
- $comment_approved = $this->comment_status_to_approval_value( $status );
-
- if ( $comment_approved !== false ) {
- $where = "comment_approved = '" . esc_sql( $comment_approved ) . "'";
- } else {
- $where = '1=1';
- }
-
- if ( $min_id != null ) {
- $where .= ' AND comment_ID >= ' . intval( $min_id );
- }
-
- if ( $max_id != null ) {
- $where .= ' AND comment_ID <= ' . intval( $max_id );
- }
-
- return $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->comments WHERE $where" );
- }
-
- private function comment_status_to_approval_value( $status ) {
- switch ( $status ) {
- case 'approve':
- return '1';
- case 'hold':
- return '0';
- case 'spam':
- return 'spam';
- case 'trash':
- return 'trash';
- case 'any':
- return false;
- case 'all':
- return false;
- default:
- return false;
- }
- }
-
- // TODO: actually use max_id/min_id
- public function get_comments( $status = null, $min_id = null, $max_id = null ) {
- $args = array(
- 'orderby' => 'ID',
- 'status' => 'all',
- );
-
- if ( $status ) {
- $args['status'] = $status;
- }
-
- return get_comments( $args );
- }
-
- public function get_comment( $id ) {
- return WP_Comment::get_instance( $id );
- }
-
- public function upsert_comment( $comment ) {
- global $wpdb;
-
- $comment = $comment->to_array();
-
- // filter by fields on comment table
- $comment_fields_whitelist = array(
- 'comment_ID',
- 'comment_post_ID',
- 'comment_author',
- 'comment_author_email',
- 'comment_author_url',
- 'comment_author_IP',
- 'comment_date',
- 'comment_date_gmt',
- 'comment_content',
- 'comment_karma',
- 'comment_approved',
- 'comment_agent',
- 'comment_type',
- 'comment_parent',
- 'user_id',
- );
-
- foreach ( $comment as $key => $value ) {
- if ( ! in_array( $key, $comment_fields_whitelist ) ) {
- unset( $comment[ $key ] );
- }
- }
-
- $exists = $wpdb->get_var(
- $wpdb->prepare(
- "SELECT EXISTS( SELECT 1 FROM $wpdb->comments WHERE comment_ID = %d )",
- $comment['comment_ID']
- )
- );
-
- if ( $exists ) {
- $wpdb->update( $wpdb->comments, $comment, array( 'comment_ID' => $comment['comment_ID'] ) );
- } else {
- $wpdb->insert( $wpdb->comments, $comment );
- }
-
- wp_update_comment_count( $comment['comment_post_ID'] );
- }
-
- public function trash_comment( $comment_id ) {
- wp_delete_comment( $comment_id );
- }
-
- public function delete_comment( $comment_id ) {
- wp_delete_comment( $comment_id, true );
- }
-
- public function spam_comment( $comment_id ) {
- wp_spam_comment( $comment_id );
- }
-
- public function trashed_post_comments( $post_id, $statuses ) {
- wp_trash_post_comments( $post_id );
- }
-
- public function untrashed_post_comments( $post_id ) {
- wp_untrash_post_comments( $post_id );
- }
-
- public function comments_checksum( $min_id = null, $max_id = null ) {
- global $wpdb;
- return $this->table_checksum( $wpdb->comments, Jetpack_Sync_Defaults::$default_comment_checksum_columns, 'comment_ID', Jetpack_Sync_Settings::get_comments_filter_sql(), $min_id, $max_id );
- }
-
- public function comment_meta_checksum( $min_id = null, $max_id = null ) {
- global $wpdb;
- return $this->table_checksum( $wpdb->commentmeta, Jetpack_Sync_Defaults::$default_comment_meta_checksum_columns, 'meta_id', Jetpack_Sync_Settings::get_whitelisted_comment_meta_sql(), $min_id, $max_id );
- }
-
- public function options_checksum() {
- global $wpdb;
-
- $options_whitelist = "'" . implode( "', '", Jetpack_Sync_Defaults::$default_options_whitelist ) . "'";
- $where_sql = "option_name IN ( $options_whitelist )";
-
- return $this->table_checksum( $wpdb->options, Jetpack_Sync_Defaults::$default_option_checksum_columns, null, $where_sql, null, null );
- }
-
-
- public function update_option( $option, $value ) {
- return update_option( $option, $value );
- }
-
- public function get_option( $option, $default = false ) {
- return get_option( $option, $default );
- }
-
- public function delete_option( $option ) {
- return delete_option( $option );
- }
-
- public function set_theme_support( $theme_support ) {
- // noop
- }
-
- public function current_theme_supports( $feature ) {
- return current_theme_supports( $feature );
- }
-
- public function get_metadata( $type, $object_id, $meta_key = '', $single = false ) {
- return get_metadata( $type, $object_id, $meta_key, $single );
- }
-
- /**
- *
- * Stores remote meta key/values alongside an ID mapping key
- *
- * @param $type
- * @param $object_id
- * @param $meta_key
- * @param $meta_value
- * @param $meta_id
- *
- * @return bool
- */
- public function upsert_metadata( $type, $object_id, $meta_key, $meta_value, $meta_id ) {
-
- $table = _get_meta_table( $type );
- if ( ! $table ) {
- return false;
- }
-
- global $wpdb;
-
- $exists = $wpdb->get_var(
- $wpdb->prepare(
- "SELECT EXISTS( SELECT 1 FROM $table WHERE meta_id = %d )",
- $meta_id
- )
- );
-
- if ( $exists ) {
- $wpdb->update(
- $table,
- array(
- 'meta_key' => $meta_key,
- 'meta_value' => maybe_serialize( $meta_value ),
- ),
- array( 'meta_id' => $meta_id )
- );
- } else {
- $object_id_field = $type . '_id';
- $wpdb->insert(
- $table,
- array(
- 'meta_id' => $meta_id,
- $object_id_field => $object_id,
- 'meta_key' => $meta_key,
- 'meta_value' => maybe_serialize( $meta_value ),
- )
- );
- }
-
- wp_cache_delete( $object_id, $type . '_meta' );
-
- return true;
- }
-
- public function delete_metadata( $type, $object_id, $meta_ids ) {
- global $wpdb;
-
- $table = _get_meta_table( $type );
- if ( ! $table ) {
- return false;
- }
-
- foreach ( $meta_ids as $meta_id ) {
- $wpdb->query( $wpdb->prepare( "DELETE FROM $table WHERE meta_id = %d", $meta_id ) );
- }
-
- // if we don't have an object ID what do we do - invalidate ALL meta?
- if ( $object_id ) {
- wp_cache_delete( $object_id, $type . '_meta' );
- }
- }
-
- // todo: test this out to make sure it works as expected.
- public function delete_batch_metadata( $type, $object_ids, $meta_key ) {
- global $wpdb;
-
- $table = _get_meta_table( $type );
- if ( ! $table ) {
- return false;
- }
- $column = sanitize_key( $type . '_id' );
- $wpdb->query( $wpdb->prepare( "DELETE FROM $table WHERE $column IN (%s) && meta_key = %s", implode( ',', $object_ids ), $meta_key ) );
-
- // if we don't have an object ID what do we do - invalidate ALL meta?
- foreach ( $object_ids as $object_id ) {
- wp_cache_delete( $object_id, $type . '_meta' );
- }
- }
-
- // constants
- public function get_constant( $constant ) {
- $value = get_option( 'jetpack_constant_' . $constant );
-
- if ( $value ) {
- return $value;
- }
-
- return null;
- }
-
- public function set_constant( $constant, $value ) {
- update_option( 'jetpack_constant_' . $constant, $value );
- }
-
- public function get_updates( $type ) {
- $all_updates = get_option( 'jetpack_updates', array() );
-
- if ( isset( $all_updates[ $type ] ) ) {
- return $all_updates[ $type ];
- } else {
- return null;
- }
- }
-
- public function set_updates( $type, $updates ) {
- $all_updates = get_option( 'jetpack_updates', array() );
- $all_updates[ $type ] = $updates;
- update_option( 'jetpack_updates', $all_updates );
- }
-
- // functions
- public function get_callable( $name ) {
- $value = get_option( 'jetpack_' . $name );
-
- if ( $value ) {
- return $value;
- }
-
- return null;
- }
-
- public function set_callable( $name, $value ) {
- update_option( 'jetpack_' . $name, $value );
- }
-
- // network options
- public function get_site_option( $option ) {
- return get_option( 'jetpack_network_' . $option );
- }
-
- public function update_site_option( $option, $value ) {
- return update_option( 'jetpack_network_' . $option, $value );
- }
-
- public function delete_site_option( $option ) {
- return delete_option( 'jetpack_network_' . $option );
- }
-
- // terms
- // terms
- public function get_terms( $taxonomy ) {
- return get_terms( $taxonomy );
- }
-
- public function get_term( $taxonomy, $term_id, $is_term_id = true ) {
- $t = $this->ensure_taxonomy( $taxonomy );
- if ( ! $t || is_wp_error( $t ) ) {
- return $t;
- }
-
- return get_term( $term_id, $taxonomy );
- }
-
- private function ensure_taxonomy( $taxonomy ) {
- if ( ! taxonomy_exists( $taxonomy ) ) {
- // try re-registering synced taxonomies
- $taxonomies = $this->get_callable( 'taxonomies' );
- if ( ! isset( $taxonomies[ $taxonomy ] ) ) {
- // doesn't exist, or somehow hasn't been synced
- return new WP_Error( 'invalid_taxonomy', "The taxonomy '$taxonomy' doesn't exist" );
- }
- $t = $taxonomies[ $taxonomy ];
-
- return register_taxonomy(
- $taxonomy,
- $t->object_type,
- (array) $t
- );
- }
-
- return true;
- }
-
- public function get_the_terms( $object_id, $taxonomy ) {
- return get_the_terms( $object_id, $taxonomy );
- }
-
- public function update_term( $term_object ) {
- $taxonomy = $term_object->taxonomy;
- global $wpdb;
- $exists = $wpdb->get_var(
- $wpdb->prepare(
- "SELECT EXISTS( SELECT 1 FROM $wpdb->terms WHERE term_id = %d )",
- $term_object->term_id
- )
- );
- if ( ! $exists ) {
- $term_object = sanitize_term( clone( $term_object ), $taxonomy, 'db' );
- $term = array(
- 'term_id' => $term_object->term_id,
- 'name' => $term_object->name,
- 'slug' => $term_object->slug,
- 'term_group' => $term_object->term_group,
- );
- $term_taxonomy = array(
- 'term_taxonomy_id' => $term_object->term_taxonomy_id,
- 'term_id' => $term_object->term_id,
- 'taxonomy' => $term_object->taxonomy,
- 'description' => $term_object->description,
- 'parent' => (int) $term_object->parent,
- 'count' => (int) $term_object->count,
- );
- $wpdb->insert( $wpdb->terms, $term );
- $wpdb->insert( $wpdb->term_taxonomy, $term_taxonomy );
-
- return true;
- }
-
- return wp_update_term( $term_object->term_id, $taxonomy, (array) $term_object );
- }
-
- public function delete_term( $term_id, $taxonomy ) {
- return wp_delete_term( $term_id, $taxonomy );
- }
-
- public function update_object_terms( $object_id, $taxonomy, $terms, $append ) {
- wp_set_object_terms( $object_id, $terms, $taxonomy, $append );
- }
-
- public function delete_object_terms( $object_id, $tt_ids ) {
- global $wpdb;
-
- if ( is_array( $tt_ids ) && ! empty( $tt_ids ) ) {
- // escape
- $tt_ids_sanitized = array_map( 'intval', $tt_ids );
-
- $taxonomies = array();
- foreach ( $tt_ids_sanitized as $tt_id ) {
- $term = get_term_by( 'term_taxonomy_id', $tt_id );
- $taxonomies[ $term->taxonomy ][] = $tt_id;
- }
- $in_tt_ids = implode( ', ', $tt_ids_sanitized );
-
- /**
- * Fires immediately before an object-term relationship is deleted.
- *
- * @since 2.9.0
- *
- * @param int $object_id Object ID.
- * @param array $tt_ids An array of term taxonomy IDs.
- */
- do_action( 'delete_term_relationships', $object_id, $tt_ids_sanitized );
- $deleted = $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->term_relationships WHERE object_id = %d AND term_taxonomy_id IN ($in_tt_ids)", $object_id ) );
- foreach ( $taxonomies as $taxonomy => $taxonomy_tt_ids ) {
- $this->ensure_taxonomy( $taxonomy );
- wp_cache_delete( $object_id, $taxonomy . '_relationships' );
- /**
- * Fires immediately after an object-term relationship is deleted.
- *
- * @since 2.9.0
- *
- * @param int $object_id Object ID.
- * @param array $tt_ids An array of term taxonomy IDs.
- */
- do_action( 'deleted_term_relationships', $object_id, $taxonomy_tt_ids );
- wp_update_term_count( $taxonomy_tt_ids, $taxonomy );
- }
-
- return (bool) $deleted;
- }
-
- return false;
- }
-
- // users
- public function user_count() {
-
- }
-
- public function get_user( $user_id ) {
- return WP_User::get_instance( $user_id );
- }
-
- public function upsert_user( $user ) {
- $this->invalid_call();
- }
-
- public function delete_user( $user_id ) {
- $this->invalid_call();
- }
-
- public function upsert_user_locale( $user_id, $local ) {
- $this->invalid_call();
- }
-
- public function delete_user_locale( $user_id ) {
- $this->invalid_call();
- }
-
- public function get_user_locale( $user_id ) {
- return get_user_locale( $user_id );
- }
-
- public function get_allowed_mime_types( $user_id ) {
-
- }
-
- public function checksum_all() {
- $post_meta_checksum = $this->checksum_histogram( 'post_meta', 1 );
- $comment_meta_checksum = $this->checksum_histogram( 'comment_meta', 1 );
-
- return array(
- 'posts' => $this->posts_checksum(),
- 'comments' => $this->comments_checksum(),
- 'post_meta' => reset( $post_meta_checksum ),
- 'comment_meta' => reset( $comment_meta_checksum ),
- );
- }
-
- function checksum_histogram( $object_type, $buckets, $start_id = null, $end_id = null, $columns = null, $strip_non_ascii = true ) {
- global $wpdb;
-
- $wpdb->queries = array();
-
- switch ( $object_type ) {
- case 'posts':
- $object_count = $this->post_count( null, $start_id, $end_id );
- $object_table = $wpdb->posts;
- $id_field = 'ID';
- $where_sql = Jetpack_Sync_Settings::get_blacklisted_post_types_sql();
- if ( empty( $columns ) ) {
- $columns = Jetpack_Sync_Defaults::$default_post_checksum_columns;
- }
- break;
- case 'post_meta':
- $object_table = $wpdb->postmeta;
- $where_sql = Jetpack_Sync_Settings::get_whitelisted_post_meta_sql();
- $object_count = $this->meta_count( $object_table, $where_sql, $start_id, $end_id );
- $id_field = 'meta_id';
-
- if ( empty( $columns ) ) {
- $columns = Jetpack_Sync_Defaults::$default_post_meta_checksum_columns;
- }
- break;
- case 'comments':
- $object_count = $this->comment_count( null, $start_id, $end_id );
- $object_table = $wpdb->comments;
- $id_field = 'comment_ID';
- $where_sql = Jetpack_Sync_Settings::get_comments_filter_sql();
- if ( empty( $columns ) ) {
- $columns = Jetpack_Sync_Defaults::$default_comment_checksum_columns;
- }
- break;
- case 'comment_meta':
- $object_table = $wpdb->commentmeta;
- $where_sql = Jetpack_Sync_Settings::get_whitelisted_comment_meta_sql();
- $object_count = $this->meta_count( $object_table, $where_sql, $start_id, $end_id );
- $id_field = 'meta_id';
- if ( empty( $columns ) ) {
- $columns = Jetpack_Sync_Defaults::$default_post_meta_checksum_columns;
- }
- break;
- default:
- return false;
- }
-
- $bucket_size = intval( ceil( $object_count / $buckets ) );
- $previous_max_id = 0;
- $histogram = array();
-
- $where = '1=1';
-
- if ( $start_id ) {
- $where .= " AND $id_field >= " . intval( $start_id );
- }
-
- if ( $end_id ) {
- $where .= " AND $id_field <= " . intval( $end_id );
- }
-
- do {
- list( $first_id, $last_id ) = $wpdb->get_row(
- "SELECT MIN($id_field) as min_id, MAX($id_field) as max_id FROM ( SELECT $id_field FROM $object_table WHERE $where AND $id_field > $previous_max_id ORDER BY $id_field ASC LIMIT $bucket_size ) as ids",
- ARRAY_N
- );
-
- // get the checksum value
- $value = $this->table_checksum( $object_table, $columns, $id_field, $where_sql, $first_id, $last_id, $strip_non_ascii );
-
- if ( is_wp_error( $value ) ) {
- return $value;
- }
-
- if ( $first_id === null || $last_id === null ) {
- break;
- } elseif ( $first_id === $last_id ) {
- $histogram[ $first_id ] = $value;
- } else {
- $histogram[ "{$first_id}-{$last_id}" ] = $value;
- }
-
- $previous_max_id = $last_id;
- } while ( true );
-
- return $histogram;
- }
-
- private function table_checksum( $table, $columns, $id_column, $where_sql = '1=1', $min_id = null, $max_id = null, $strip_non_ascii = true ) {
- global $wpdb;
-
- // sanitize to just valid MySQL column names
- $sanitized_columns = preg_grep( '/^[0-9,a-z,A-Z$_]+$/i', $columns );
-
- if ( $strip_non_ascii ) {
- $columns_sql = implode( ',', array_map( array( $this, 'strip_non_ascii_sql' ), $sanitized_columns ) );
- } else {
- $columns_sql = implode( ',', $sanitized_columns );
- }
-
- if ( $min_id !== null ) {
- $min_id = intval( $min_id );
- $where_sql .= " AND $id_column >= $min_id";
- }
-
- if ( $max_id !== null ) {
- $max_id = intval( $max_id );
- $where_sql .= " AND $id_column <= $max_id";
- }
-
- $query = <<<ENDSQL
- SELECT CONV(BIT_XOR(CRC32(CONCAT({$columns_sql}))), 10, 16)
- FROM $table
- WHERE $where_sql
-ENDSQL;
- $result = $wpdb->get_var( $query );
-
- if ( $wpdb->last_error ) {
- return new WP_Error( 'database_error', $wpdb->last_error );
- }
-
- return $result;
-
- }
-
- private function meta_count( $table, $where_sql, $min_id, $max_id ) {
- global $wpdb;
-
- if ( $min_id != null ) {
- $where_sql .= ' AND meta_id >= ' . intval( $min_id );
- }
-
- if ( $max_id != null ) {
- $where_sql .= ' AND meta_id <= ' . intval( $max_id );
- }
-
- return $wpdb->get_var( "SELECT COUNT(*) FROM $table WHERE $where_sql" );
- }
-
- /**
- * Wraps a column name in SQL which strips non-ASCII chars.
- * This helps normalize data to avoid checksum differences caused by
- * badly encoded data in the DB
- */
- function strip_non_ascii_sql( $column_name ) {
- return "REPLACE( CONVERT( $column_name USING ascii ), '?', '' )";
- }
-
- private function invalid_call() {
- $backtrace = debug_backtrace();
- $caller = $backtrace[1]['function'];
- throw new Exception( "This function $caller is not supported on the WP Replicastore" );
- }
-}
diff --git a/plugins/jetpack/sync/interface.jetpack-sync-codec.php b/plugins/jetpack/sync/interface.jetpack-sync-codec.php
deleted file mode 100644
index 1405d90c..00000000
--- a/plugins/jetpack/sync/interface.jetpack-sync-codec.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-
-/**
- * Very simple interface for encoding and decoding input
- * This is used to provide compression and serialization to messages
- **/
-interface iJetpack_Sync_Codec {
- // we send this with the payload so we can select the appropriate decoder at the other end
- public function name();
-
- public function encode( $object );
-
- public function decode( $input );
-}
diff --git a/plugins/jetpack/sync/interface.jetpack-sync-replicastore.php b/plugins/jetpack/sync/interface.jetpack-sync-replicastore.php
deleted file mode 100644
index c22f4e51..00000000
--- a/plugins/jetpack/sync/interface.jetpack-sync-replicastore.php
+++ /dev/null
@@ -1,140 +0,0 @@
-<?php
-/**
- * Sync architecture prototype
- *
- * @author Dan Walmsley
- * To run tests: phpunit --testsuite sync --filter New_Sync
- */
-
-/**
- * A high-level interface for objects that store synced WordPress data
- * Useful for ensuring that different storage mechanisms implement the
- * required semantics for storing all the data that we sync
- */
-interface iJetpack_Sync_Replicastore {
- // remove all data
- public function reset();
-
- // trigger setup for sync start/end
- public function full_sync_start( $config );
-
- public function full_sync_end( $checksum );
-
- // posts
- public function post_count( $status = null, $min_id = null, $max_id = null );
-
- public function get_posts( $status = null, $min_id = null, $max_id = null );
-
- public function get_post( $id );
-
- public function upsert_post( $post, $silent = false );
-
- public function delete_post( $post_id );
-
- public function posts_checksum( $min_id = null, $max_id = null );
- public function post_meta_checksum( $min_id = null, $max_id = null );
-
- // comments
- public function comment_count( $status = null, $min_id = null, $max_id = null );
-
- public function get_comments( $status = null, $min_id = null, $max_id = null );
-
- public function get_comment( $id );
-
- public function upsert_comment( $comment );
-
- public function trash_comment( $comment_id );
-
- public function spam_comment( $comment_id );
-
- public function delete_comment( $comment_id );
-
- public function trashed_post_comments( $post_id, $statuses );
-
- public function untrashed_post_comments( $post_id );
-
- public function comments_checksum( $min_id = null, $max_id = null );
- public function comment_meta_checksum( $min_id = null, $max_id = null );
-
- // options
- public function update_option( $option, $value );
-
- public function get_option( $option, $default = false );
-
- public function delete_option( $option );
-
- // themes
- public function set_theme_support( $theme_support );
-
- public function current_theme_supports( $feature );
-
- // meta
- public function get_metadata( $type, $object_id, $meta_key = '', $single = false );
-
- public function upsert_metadata( $type, $object_id, $meta_key, $meta_value, $meta_id );
-
- public function delete_metadata( $type, $object_id, $meta_ids );
-
- public function delete_batch_metadata( $type, $object_ids, $meta_key );
-
- // constants
- public function get_constant( $constant );
-
- public function set_constant( $constant, $value );
-
- // updates
- public function get_updates( $type );
-
- public function set_updates( $type, $updates );
-
- // functions
- public function get_callable( $callable );
-
- public function set_callable( $callable, $value );
-
- // network options
- public function get_site_option( $option );
-
- public function update_site_option( $option, $value );
-
- public function delete_site_option( $option );
-
- // terms
- public function get_terms( $taxonomy );
-
- public function get_term( $taxonomy, $term_id, $is_term_id = true );
-
- public function update_term( $term_object );
-
- public function delete_term( $term_id, $taxonomy );
-
- public function get_the_terms( $object_id, $taxonomy );
-
- public function update_object_terms( $object_id, $taxonomy, $terms, $append );
-
- public function delete_object_terms( $object_id, $tt_ids );
-
- // users
- public function user_count();
-
- public function get_user( $user_id );
-
- public function upsert_user( $user );
-
- public function delete_user( $user_id );
-
- public function upsert_user_locale( $user_id, $locale );
-
- public function delete_user_locale( $user_id );
-
- public function get_user_locale( $user_id );
-
- public function get_allowed_mime_types( $user_id );
-
-
- // full checksum
- public function checksum_all();
-
- // histogram
- public function checksum_histogram( $object_type, $buckets, $start_id = null, $end_id = null );
-}
diff --git a/plugins/jetpack/uninstall.php b/plugins/jetpack/uninstall.php
deleted file mode 100644
index 516fe8c5..00000000
--- a/plugins/jetpack/uninstall.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-if (
- !defined( 'WP_UNINSTALL_PLUGIN' )
- ||
- !WP_UNINSTALL_PLUGIN
- ||
- dirname( WP_UNINSTALL_PLUGIN ) != dirname( plugin_basename( __FILE__ ) )
-) {
- status_header( 404 );
- exit;
-}
-
-define( 'JETPACK__PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
-require_once JETPACK__PLUGIN_DIR . 'class.jetpack-options.php';
-
-Jetpack_Options::delete_all_known_options();
-
-// Delete all legacy options
-delete_option( 'jetpack_was_activated' );
-delete_option( 'jetpack_auto_installed' );
-delete_option( 'jetpack_register' );
-delete_transient( 'jetpack_register' );
-
-// Delete sync options
-//
-// Do not initialize any listeners.
-// Since all the files will be deleted.
-// No need to try to sync anything.
-add_filter( 'jetpack_sync_modules', '__return_empty_array', 100 );
-
-// Jetpack Sync
-require_once JETPACK__PLUGIN_DIR . 'sync/class.jetpack-sync-sender.php';
-Jetpack_Sync_Sender::get_instance()->uninstall();
diff --git a/plugins/jetpack/views/admin/must-connect-main-blog.php b/plugins/jetpack/views/admin/must-connect-main-blog.php
deleted file mode 100644
index decf72bd..00000000
--- a/plugins/jetpack/views/admin/must-connect-main-blog.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<div class="wrap">
- <div class="jetpack-wrap-container dops-card">
- <div class="jetpack-text-container">
- <h1><?php esc_html_e( 'Get started with Jetpack Multisite', 'jetpack' ); ?></h1>
- <p>
- <?php esc_html_e( 'Get started managing your Multisite install of Jetpack by connecting.', 'jetpack' ); ?>
- </p>
- </div>
- <div class="jetpack-install-container">
- <p class="submit"><a href="<?php echo esc_url( $data['url'] ); ?>" class="button-connector dops-button is-primary" id="wpcom-connect"><?php esc_html_e( 'Set up Jetpack', 'jetpack' ); ?></a></p>
- <p class="jetpack-install-blurb">
- <?php jetpack_render_tos_blurb(); ?>
- </p>
- </div>
- </div>
-</div>
diff --git a/plugins/jetpack/views/admin/network-activated-notice.php b/plugins/jetpack/views/admin/network-activated-notice.php
deleted file mode 100644
index 93809035..00000000
--- a/plugins/jetpack/views/admin/network-activated-notice.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php if ( isset( $_GET['jetpack-notice'] ) && 'dismiss' == $_GET['jetpack-notice'] ) : ?>
- <div id="message" class="error">
- <p><?php _e( 'Jetpack is network activated and notices can not be dismissed.', 'jetpack' ); ?></p>
- </div>
-<?php endif; ?>
diff --git a/plugins/jetpack/views/admin/network-admin-alert.php b/plugins/jetpack/views/admin/network-admin-alert.php
deleted file mode 100644
index 434b80f1..00000000
--- a/plugins/jetpack/views/admin/network-admin-alert.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Deprecated. No longer needed.
- *
- * @package Jetpack
- */ \ No newline at end of file
diff --git a/plugins/jetpack/views/admin/network-admin-footer.php b/plugins/jetpack/views/admin/network-admin-footer.php
deleted file mode 100644
index 434b80f1..00000000
--- a/plugins/jetpack/views/admin/network-admin-footer.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * Deprecated. No longer needed.
- *
- * @package Jetpack
- */ \ No newline at end of file
diff --git a/plugins/jetpack/views/admin/network-admin-header.php b/plugins/jetpack/views/admin/network-admin-header.php
deleted file mode 100644
index 2bbe4cf9..00000000
--- a/plugins/jetpack/views/admin/network-admin-header.php
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php
- Jetpack::init()->load_view( 'admin/network-activated-notice.php' );
- /** This action is already documented in views/admin/admin-page.php */
- do_action( 'jetpack_notices' );
diff --git a/plugins/jetpack/views/admin/network-settings.php b/plugins/jetpack/views/admin/network-settings.php
deleted file mode 100644
index 00d23ba4..00000000
--- a/plugins/jetpack/views/admin/network-settings.php
+++ /dev/null
@@ -1,87 +0,0 @@
-<?php extract( $data ); ?>
-
-<?php if ( isset( $_GET['updated'] ) && 'true' == $_GET['updated'] ) : ?>
- <div class="updated"><p><?php esc_html_e( 'Jetpack Network Settings Updated!', 'jetpack' ); ?></p></div>
-<?php endif; ?>
-
-<?php if ( isset( $_GET['error'] ) && 'jetpack_protect_whitelist' == $_GET['error'] ) : ?>
- <div class="error"><p><?php esc_html_e( 'One of your IP addresses was not valid.', 'jetpack' ); ?></p></div>
-<?php endif; ?>
-
-<div class="wrap">
- <h2><?php _e( 'Network Settings', 'jetpack' ); ?></h2>
- <form action="edit.php?action=jetpack-network-settings" method="POST">
- <h3><?php _ex( 'Global', 'Affects all sites in a Multisite network.', 'jetpack' ); ?></h3>
- <p><?php _e( 'These settings affect all sites on the network.', 'jetpack' ); ?></p>
- <?php wp_nonce_field( 'jetpack-network-settings' ); ?>
- <table class="form-table">
-<?php /*
- <tr valign="top">
- <th scope="row"><label for="auto-connect">Auto-Connect New Sites</label></th>
- <td>
- <input type="checkbox" name="auto-connect" id="auto-connect" value="1" <?php checked($options['auto-connect']); ?> />
- <label for="auto-connect">Automagically connect all new sites in the network.</label>
- </td>
- </tr>
-/**/ ?>
- <tr valign="top">
- <th scope="row"><label for="sub-site-override"><?php _e( 'Sub-site override', 'jetpack' ); ?></label></th>
- <td>
- <input type="checkbox" name="sub-site-connection-override" id="sub-site-override" value="1" <?php checked($options['sub-site-connection-override']); ?> />
- <label for="sub-site-override"><?php _e( 'Allow individual site administrators to manage their own connections (connect and disconnect) to <a href="//wordpress.com">WordPress.com</a>', 'jetpack' ); ?></label>
- </td>
- </tr>
-
- <tr valign="top">
- <th scope="row"><label for="sub-site-override"><?php _e( 'Protect whitelist', 'jetpack' ); ?></label></th>
- <td>
- <p><strong><?php printf( __( 'Your current IP: %s', 'jetpack' ), jetpack_protect_get_ip() ); ?></strong></p>
- <textarea name="global-whitelist" style="width: 100%;" rows="8"><?php echo implode( PHP_EOL, $jetpack_protect_whitelist['global'] ); ?></textarea> <br />
- <label for="global-whitelist"><?php _e('IPv4 and IPv6 are acceptable. Enter multiple IPs on separate lines. <br />To specify a range, enter the low value and high value separated by a dash. Example: 12.12.12.1-12.12.12.100', 'jetpack' ); ?></label>
- </td>
- </tr>
-<?php /* Remove the toggles for 2.9, re-evaluate how they're done and added for a 3.0 release. They don't feel quite right yet.
- <tr>
- <th scope="row"><label for="manage_auto_activated_modules">Manage modules</label></th>
- <td>
- <input type="checkbox" name="manage_auto_activated_modules" id="manage_auto_activated_modules" onclick="jQuery('#jpms_settings_modules').toggle();" value="1" <?php checked( $options['manage_auto_activated_modules'] ); ?>/>
- <label for="manage_auto_activated_modules">Control which modules are auto-activated</label>
- </td>
- </tr>
-/**/ ?>
- </table>
-
-<?php /* Remove the toggles for 2.9, re-evaluate how they're done and added for a 3.0 release. They don't feel quite right yet.
- <?php
- $display_modules = ( 1 == $this->get_option( 'manage_auto_activated_modules' ) )? 'block': 'none';
- ?>
- <div id="jpms_settings_modules" style="display: <?php echo $display_modules; ?>">
- <h3><?php _e( 'Modules', 'jetpack' ); ?></h3>
- <p><?php _e( 'Modules to be automatically activated when new sites are created.', 'jetpack' ); ?></p>
- <table>
- <thead>
- <!--
- <tr>
- <td><input type="checkbox"></td>
- <td>Only show checked modules on subsites?</td>
- </tr>
- -->
- </thead>
- <tbody>
-
- <?php foreach( $modules AS $module ) { ?>
- <tr>
- <td><input type="checkbox" name="modules[]" value="<?php echo $module['module']; ?>" id="<?php echo $module['module']; ?>" <?php checked( in_array( $module['module'], $options['modules'] ) ); ?>/></td>
- <td><label for="<?php echo $module['module']; ?>"><?php echo $module['name']; ?></label></td>
- </tr>
-
- <?php } ?>
- </tbody>
- </table>
- </div>
-/**/ ?>
-
- <?php submit_button(); ?>
-
- </form>
-</div>
diff --git a/plugins/jetpack/wpml-config.xml b/plugins/jetpack/wpml-config.xml
deleted file mode 100644
index ff83b64d..00000000
--- a/plugins/jetpack/wpml-config.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<wpml-config>
- <admin-texts>
- <key name="sharing-options">
- <key name="global">
- <key name="sharing_label" />
- </key>
- </key>
- <key name="highlander_comment_form_prompt" />
- </admin-texts>
-</wpml-config> \ No newline at end of file
diff --git a/themes/mantra/admin/main.php b/themes/mantra/admin/main.php
index d769a9e6..8187cbf1 100644
--- a/themes/mantra/admin/main.php
+++ b/themes/mantra/admin/main.php
@@ -204,11 +204,11 @@ function mantra_init_fn(){
add_settings_field('mantra_fheader', __('Featured Images as HEADER Images ','mantra') , 'cryout_setting_fheader_fn', 'mantra-page', 'featured_section');
/*** socials ***/
- add_settings_field('mantra_socials1', __('Link nr. 1','mantra') , 'cryout_setting_socials1_fn', 'mantra-page', 'socials_section');
- add_settings_field('mantra_socials2', __('Link nr. 2','mantra') , 'cryout_setting_socials2_fn', 'mantra-page', 'socials_section');
- add_settings_field('mantra_socials3', __('Link nr. 3','mantra') , 'cryout_setting_socials3_fn', 'mantra-page', 'socials_section');
- add_settings_field('mantra_socials4', __('Link nr. 4','mantra') , 'cryout_setting_socials4_fn', 'mantra-page', 'socials_section');
- add_settings_field('mantra_socials5', __('Link nr. 5','mantra') , 'cryout_setting_socials5_fn', 'mantra-page', 'socials_section');
+ add_settings_field('mantra_socials1', __('Link #1','mantra') , 'cryout_setting_socials1_fn', 'mantra-page', 'socials_section');
+ add_settings_field('mantra_socials2', __('Link #2','mantra') , 'cryout_setting_socials2_fn', 'mantra-page', 'socials_section');
+ add_settings_field('mantra_socials3', __('Link #3','mantra') , 'cryout_setting_socials3_fn', 'mantra-page', 'socials_section');
+ add_settings_field('mantra_socials4', __('Link #4','mantra') , 'cryout_setting_socials4_fn', 'mantra-page', 'socials_section');
+ add_settings_field('mantra_socials5', __('Link #5','mantra') , 'cryout_setting_socials5_fn', 'mantra-page', 'socials_section');
add_settings_field('mantra_socialshow', __('Socials display','mantra') , 'cryout_setting_socialsdisplay_fn', 'mantra-page', 'socials_section');
/*** misc ***/
diff --git a/themes/mantra/admin/settings.php b/themes/mantra/admin/settings.php
index 81875345..fba14efd 100644
--- a/themes/mantra/admin/settings.php
+++ b/themes/mantra/admin/settings.php
@@ -529,7 +529,7 @@ function cryout_setting_fronttext_fn() {
<div class='slidebox'>
<h4 class='slidetitle'><?php _e("Hide areas","mantra")?> </h4>
<div class='slidercontent'>
- <div style='width:100%;'><?php _e("Choose the areas to hide on the first page.","mantra") ?></div>
+ <div style='width:100%;'><?php _e("Choose the areas to hide on the homepage.","mantra") ?></div>
<?php
$options = array( "FronHeader", "FrontMenu", "FrontWidget" , "FrontFooter","FrontBack");
@@ -1552,8 +1552,7 @@ function cryout_setting_fheader_fn() {
echo ">$labels[$id]</option>";
}
echo "</select>";
- echo "<div><small>".__("Show featured images on headers. The header will be replaced with a featured image if you selected it as a Featured Image in the post and
- and if it is bigger or at least equal to the current header size.","mantra")."</small></div>";
+ echo "<div><small>".__("Show featured images on headers. The header will be replaced with a featured image if you selected it as a Featured Image in the post and and if it is bigger or at least equal to the current header size.","mantra")."</small></div>";
}
@@ -1602,15 +1601,15 @@ function cryout_setting_socials2_fn() {
}
function cryout_setting_socials3_fn() {
-cryout_setting_social_master(5);
+ cryout_setting_social_master(5);
}
function cryout_setting_socials4_fn() {
-cryout_setting_social_master(7);
+ cryout_setting_social_master(7);
}
function cryout_setting_socials5_fn() {
-cryout_setting_social_master(9);
+ cryout_setting_social_master(9);
}
function cryout_setting_socialsdisplay_fn() {
diff --git a/themes/mantra/content/content-aside.php b/themes/mantra/content/content-aside.php
index 5b275d81..0ce1ca03 100644
--- a/themes/mantra/content/content-aside.php
+++ b/themes/mantra/content/content-aside.php
@@ -14,7 +14,7 @@
<header class="entry-header">
<h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'mantra' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
<?php cryout_post_title_hook(); ?>
- <div class="entry-meta2">
+ <div class="entry-meta entry-meta2">
<h3 class="entry-format"><?php _e( 'Aside', 'mantra' ); ?></h3>
<?php mantra_posted_on(); ?>
<?php /* if ( comments_open() && ! post_password_required() ) :*/ ?>
diff --git a/themes/mantra/content/content-chat.php b/themes/mantra/content/content-chat.php
index d85f0784..51569e96 100644
--- a/themes/mantra/content/content-chat.php
+++ b/themes/mantra/content/content-chat.php
@@ -14,7 +14,7 @@
<header class="entry-header">
<h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'mantra' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
<?php cryout_post_title_hook(); ?>
- <div class="entry-meta2">
+ <div class="entry-meta entry-meta2">
<h3 class="entry-format"><?php _e( 'Chat', 'mantra' ); ?></h3>
<?php mantra_posted_on(); ?>
<?php /* if ( comments_open() && ! post_password_required() ) :*/ ?>
diff --git a/themes/mantra/content/content-image.php b/themes/mantra/content/content-image.php
index c53ea855..84906277 100644
--- a/themes/mantra/content/content-image.php
+++ b/themes/mantra/content/content-image.php
@@ -13,7 +13,7 @@
<header class="entry-header">
<h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'mantra' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
<?php cryout_post_title_hook(); ?>
- <div class="entry-meta2">
+ <div class="entry-meta entry-meta2">
<h3 class="entry-format"><?php _e( 'Image', 'mantra' ); ?></h3>
<?php mantra_posted_on(); ?>
<?php /* if ( comments_open() && ! post_password_required() ) :*/ ?>
diff --git a/themes/mantra/content/content-link.php b/themes/mantra/content/content-link.php
index e6f6493c..ac9c1d47 100644
--- a/themes/mantra/content/content-link.php
+++ b/themes/mantra/content/content-link.php
@@ -14,7 +14,7 @@
<header class="entry-header">
<h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'mantra' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
<?php cryout_post_title_hook(); ?>
- <div class="entry-meta2">
+ <div class="entry-meta entry-meta2">
<h3 class="entry-format"><?php _e( 'Link', 'mantra' ); ?></h3>
<?php mantra_posted_on(); ?>
<?php /* if ( comments_open() && ! post_password_required() ) :*/ ?>
diff --git a/themes/mantra/content/content-quote.php b/themes/mantra/content/content-quote.php
index b0105a79..695625ab 100644
--- a/themes/mantra/content/content-quote.php
+++ b/themes/mantra/content/content-quote.php
@@ -12,7 +12,7 @@
<header class="entry-header">
<h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'mantra' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
<?php cryout_post_title_hook(); ?>
- <div class="entry-meta2">
+ <div class="entry-meta entry-meta2">
<h3 class="entry-format"><?php _e( 'Quote', 'mantra' ); ?></h3>
<?php mantra_posted_on(); ?>
<?php /* if ( comments_open() && ! post_password_required() ) :*/ ?>
diff --git a/themes/mantra/content/content-status.php b/themes/mantra/content/content-status.php
index 75d91d6b..38ee0abd 100644
--- a/themes/mantra/content/content-status.php
+++ b/themes/mantra/content/content-status.php
@@ -24,7 +24,7 @@
<div class="avatar">
<?php echo get_avatar( get_the_author_meta( 'ID' ), apply_filters( 'mantra_status_avatar', '65' ) ); ?>
</div>
- <div class="entry-meta2">
+ <div class="entry-meta entry-meta2">
<h3 class="entry-format"><?php _e( 'Status', 'mantra' ); ?></h3>
<?php mantra_posted_on(); ?>
<?php /* if ( comments_open() && ! post_password_required() ) :*/ ?>
diff --git a/themes/mantra/functions.php b/themes/mantra/functions.php
index ff875ae0..764325e6 100644
--- a/themes/mantra/functions.php
+++ b/themes/mantra/functions.php
@@ -9,7 +9,7 @@
// theme specifics
define ('_CRYOUT_THEME_NAME','mantra');
-define ('_CRYOUT_THEME_VERSION','3.1.0');
+define ('_CRYOUT_THEME_VERSION','3.2.0');
require_once(get_template_directory() . "/admin/main.php"); // Load necessary admin files
diff --git a/themes/mantra/includes/custom-styles.php b/themes/mantra/includes/custom-styles.php
index 9ec4b91b..aa398636 100644
--- a/themes/mantra/includes/custom-styles.php
+++ b/themes/mantra/includes/custom-styles.php
@@ -1,13 +1,50 @@
<?php
-function cryout_optset($var, $val1, $val2='', $val3='', $val4=''){
- $vals = array( $val1, $val2, $val3, $val4 );
- if ( in_array($var, $vals) ) {
- return false;
- } else {
- return true;
+function mantra_body_classes($classes) {
+ $options = mantra_get_theme_options();
+
+ $classes[] = sprintf( 'mantra-image-%s', strtolower($options['mantra_image']) );
+ $classes[] = sprintf( 'mantra-caption-%s', preg_replace('/[^a-z0-9]/i', '-', strtolower($options['mantra_caption']) ) );
+ $classes[] = sprintf( 'mantra-hratio-%s', intval($options['mantra_hratio']) );
+
+ // layout classes are for frontend reference only; styling is still below, case dependent
+ switch ($options['mantra_side']):
+ case "1c": $classes[] = 'mantra-no-sidebar'; break;
+ case "2cSr": $classes[] = 'mantra-sidebar-right'; break;
+ case "2cSl": $classes[] = 'mantra-sidebar-left'; break;
+ case "3cSr": $classes[] = 'mantra-sidebars-right'; break;
+ case "3cSl": $classes[] = 'mantra-sidebars-left'; break;
+ case "3cSs": $classes[] = 'mantra-sidebars-sided'; break;
+ endswitch;
+
+ $magazine_layout = FALSE;
+ if ($options['mantra_magazinelayout'] == "Enable") {
+ if (is_front_page()) {
+ if ( ($options['mantra_frontpage'] == "Enable") && (($options['mantra_frontposts']) != "Disable") ) { /* not magazine layout */ }
+ else { $magazine_layout = TRUE; }
+ } else {
+ $magazine_layout = TRUE;
+ }
}
-}
+ if ( is_front_page() && ($options['mantra_frontpage'] == "Enable") && (($options['mantra_frontposts']) == "Enable") ) { $magazine_layout = TRUE; }
+ if ($magazine_layout) $classes[] = 'mantra-magazine-layout';
+
+ if ( is_front_page() && ($options['mantra_frontpage'] == "Enable") && (get_option('show_on_front') == 'posts') ) {
+ $classes[] = 'mantra-presentation-page';
+ $classes[] = sprintf( 'mantra-coldisplay-%s', $options['mantra_nrcolumns'] );
+ }
+
+ switch ($options['mantra_menualign']):
+ case "center": $classes[] = 'mantra-menu-center'; break;
+ case "right": $classes[] = 'mantra-menu-right'; break;
+ case "rightmulti": $classes[] = 'mantra-menu-rightmulti'; break;
+ default: $classes[] = 'mantra-menu-left'; break;
+ endswitch;
+
+ return $classes;
+} // mantra_body_classes()
+add_filter( 'body_class', 'mantra_body_classes' );
+
function mantra_custom_styles() {
$options = mantra_get_theme_options();
@@ -141,14 +178,14 @@ function mantra_custom_styles() {
elseif ($mantra_fontsubheader != "Default") { ?> .entry-content h1, .entry-content h2, .entry-content h3, .entry-content h4,
.entry-content h5, .entry-content h6 {font-family:<?php echo $mantra_fontsubheader ?>; }<?php }
- if ($mantra_caption != "Light") { ?> #content .wp-caption { <?php
+/* if ($mantra_caption != "Light") { ?> #content .wp-caption { <?php
if ($mantra_caption == "White") { ?> background-color:#FFF;<?php }
elseif ($mantra_caption == "Light Gray") {?> background-color:#EEE;<?php }
elseif ($mantra_caption == "Gray") {?> background-color:#CCC;<?php }
elseif ($mantra_caption == "Dark Gray") {?> background-color:#444; color:#CCC;<?php }
elseif ($mantra_caption == "Black") {?> background-color:#000; color:#CCC;<?php }
?> }
- <?php }
+ <?php } */
if ($mantra_menurounded == "Disable") { ?> #access ul li {border-radius:0;}<?php }
if ($mantra_metaback == "White") { ?> .entry-meta { background:#FFF;} <?php }
elseif ($mantra_metaback == "None") { ?> .entry-meta { background:#FFF;border:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} <?php }
@@ -197,12 +234,6 @@ function mantra_custom_styles() {
#footer-widget-area a { color:<?php echo esc_attr( $mantra_footertext ); ?>; }
#footer-widget-area a:hover { color:<?php echo esc_attr( $mantra_footerhover ); ?>; } <?php
- switch ($mantra_menualign) {
- case "center": ?> #access ul { display: table; margin: 0 auto; } <?php break;
- case "right": ?> #access .menu-header, div.menu { float: right; } <?php break;
- default: break;
- } // switch ?>
-
#content .wp-caption { background-image:url(<?php echo get_template_directory_uri() . "/resources/images/pins/" . esc_attr($mantra_pin); ?>.png); } <?php
if ($mantra_sidebullet != "arrow_white") { ?> .widget-area ul ul li { background-image: url(<?php echo get_template_directory_uri() . "/resources/images/bullets/" . esc_attr($mantra_sidebullet); ?>.png); background-position: left calc(2em / 2 - 4px); } <?php }
@@ -223,7 +254,6 @@ function mantra_custom_styles() {
if (($mantra_mobile == "Enable") && $mantra_hcontain) { ?> #branding { -webkit-background-size: contain !important; -moz-background-size: contain !important; background-size: contain !important; } <?php } ?>
#branding { height:<?php echo $mantra_hheight; ?>px ;} <?php
- if ($mantra_hratio) { ?> @media (max-width: 800px) {#branding, #bg_image { min-height:inherit !important; } }<?php }
return ob_get_clean();
} // mantra_custom_styles()
diff --git a/themes/mantra/includes/theme-functions.php b/themes/mantra/includes/theme-functions.php
index dfadb1cd..889764e5 100644
--- a/themes/mantra/includes/theme-functions.php
+++ b/themes/mantra/includes/theme-functions.php
@@ -267,7 +267,7 @@ add_filter( 'wp_link_pages_args', 'mantra_nextpage_links' );
function mantra_site_info() { ?>
<div style="text-align:center;clear:both;padding-top:4px;" >
<a href="<?php echo esc_url( home_url( '/' ) ) ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home">
- <?php bloginfo( 'name' ); ?></a> | <?php _e('Powered by','mantra')?> <a target="_blank" href="<?php echo 'http://www.cryoutcreations.eu';?>" title="<?php echo 'Mantra Theme by '.
+ <?php bloginfo( 'name' ); ?></a> | <?php _e('Powered by','mantra')?> <a target="_blank" href="<?php echo 'http://www.cryoutcreations.eu/mantra';?>" title="<?php echo 'Mantra Theme by '.
'Cryout Creations';?>"><?php echo 'Mantra' ?></a> &amp; <a target="_blank" href="<?php echo esc_url('http://wordpress.org/' ); ?>"
title="<?php esc_attr_e('Semantic Personal Publishing Platform', 'mantra'); ?>"> <?php printf(' %s.', 'WordPress' ); ?>
</a>
@@ -282,7 +282,7 @@ add_action( 'cryout_footer_hook', 'mantra_site_info', 12 );
function mantra_copyright() {
global $mantra_options; ?>
<div id="site-copyright">
- <?php echo $mantra_options['mantra_copyright'] ?>
+ <?php echo wp_kses_post( do_shortcode( $mantra_options['mantra_copyright'] ) ) ?>
</div>
<?php
}
@@ -350,4 +350,12 @@ function mantra_fav_icon() {
if ($mantra_options['mantra_favicon']) add_action( 'cryout_header_hook', 'mantra_fav_icon' );
+/**
+* WordPress 5.2+ wp_body_open() support
+*/
+function mantra_wp_body_open() {
+ do_action( 'wp_body_open' );
+}
+add_action( 'cryout_body_hook', 'mantra_wp_body_open', 5 );
+
// FIN \ No newline at end of file
diff --git a/themes/mantra/readme.txt b/themes/mantra/readme.txt
index 563bab36..e5309064 100644
--- a/themes/mantra/readme.txt
+++ b/themes/mantra/readme.txt
@@ -4,8 +4,8 @@ Copyright 2011-19 Cryout Creations
Author: Cryout Creations
Requires at least: 4.2
-Tested up to: 5.0.3
-Stable tag: 3.1.0
+Tested up to: 5.2
+Stable tag: 3.2.0
License: GPLv3
License URI: http://www.gnu.org/licenses/gpl.html
Donate link: https://www.cryoutcreations.eu/donate/
@@ -95,6 +95,15 @@ Turkish - Emre Dalkili�
== Changelog ==
+= 3.2.0 =
+* Added support for WordPress 5.2 wp_body_open() hook
+* Added shortcodes support in custom footer text
+* Rewrote some styling to use body classes instead of generated inline CSS (menu alignment, caption style, image border style, header image ratio)
+* Extended content image border option to apply to Gutenberg inserted images
+* Fixed left/right social icons overlapped by sidebar widget titles on some screen sizes
+* Fixed featured images sometimes getting cropped due to overflowing their container
+* Fixed sidebars sometimes using absolute height on mobile devices
+
= 3.1.0 =
* Added 'mantra_header_image_crop' filter for 'header' image size crop position attribute
* Added HTML markup auto-correction on presentation page extra text areas
diff --git a/themes/mantra/resources/css/style-mobile.css b/themes/mantra/resources/css/style-mobile.css
index 7aea81d3..c7374d6c 100644
--- a/themes/mantra/resources/css/style-mobile.css
+++ b/themes/mantra/resources/css/style-mobile.css
@@ -23,7 +23,7 @@
body {
font-size: .95em;
}
-
+
#content,
#frontpage,
#frontpage + #container > #content,
@@ -65,6 +65,11 @@
width: 100%;
}
+ .mantra-hratio-1 #branding,
+ .mantra-hratio-1 #bg_image {
+ min-height: inherit !important;
+ }
+
#header-container > div {
margin-top: 7px;
margin-left: 14px;
@@ -110,7 +115,7 @@
#primary,
#secondary {
width: 100%;
- height: auto;
+ height: auto !important;
}
#slider,
diff --git a/themes/mantra/style.css b/themes/mantra/style.css
index 7f9f1905..fe8ae72d 100644
--- a/themes/mantra/style.css
+++ b/themes/mantra/style.css
@@ -4,7 +4,7 @@ Theme URI: https://www.cryoutcreations.eu/wordpress-themes/mantra
Description: Mantra is a do-it-yourself WordPress theme, featuring a pack of over 100 customization options and easy to use tweaks capable of tuning WordPress to your very specific needs and likes. With the help of a simple and efficient user interface you can customize everything:the layout (1,2 or 3 columns), total and partial site widths, colors (all texts, links, backgrounds etc.), fonts (over 35 font-families plus all Google Fonts), text and header sizes, post metas, post excerpts, post formats, header and background images, custom menus, 27 social media links and icons, pins, bullets and much much more. With a fully responsive layout,a customizable showcase presentation page, animated slider, magazine and blog layouts, 8 widget areas, modern graphics and an easy and intuitive admin section, you can start creating your dream site right now.
Author: Cryout Creations
Author URI: https://www.cryoutcreations.eu
-Version: 3.1.0
+Version: 3.2.0
License: GNU General Public License v2.0
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: one-column, two-columns, three-columns, right-sidebar, left-sidebar, footer-widgets, grid-layout, custom-background, custom-colors, custom-header, custom-menu, featured-image-header, featured-images, front-page-post-form, full-width-template, microformats, post-formats, rtl-language-support, sticky-post, theme-options, threaded-comments, translation-ready, blog, entertainment, news
@@ -733,8 +733,8 @@ div.menu {
margin-bottom: 0;
}
- #access ul li.current_page_item,
- #access ul li.current-menu-item {
+#access ul li.current_page_item,
+#access ul li.current-menu-item {
background: #fff;
box-shadow: none;
}
@@ -866,6 +866,17 @@ a.continue-reading-link,
color: #5F5B5B;
}
+.mantra-menu-center #access ul {
+ display: table;
+ margin: 0 auto;
+}
+
+.mantra-menu-right #access .menu-header,
+.mantra-menu-right div.menu {
+ float: right;
+}
+
+
/* =Menu -SECONDARY
-------------------------------------------------------------- */
@@ -1531,6 +1542,11 @@ article.format-aside h3.entry-format {
/* =Images
-------------------------------------------------------------- */
+.post-thumbnail {
+ max-width: 100%;
+ height: auto;
+}
+
.entry-content img {
margin: 0;
height: auto;
@@ -1544,21 +1560,24 @@ article.format-aside h3.entry-format {
img:hover {}
.alignleft,
-img.alignleft {
+img.alignleft,
+.alignleft img {
float: left;
margin-right: 24px;
margin-top: 4px;
}
.alignright,
-img.alignright {
+img.alignright,
+.alignright img {
float: right;
margin-top: 4px;
margin-left: 24px;
}
.aligncenter,
-img.aligncenter {
+img.aligncenter,
+.aligncenter img {
clear: both;
margin-right: auto;
margin-left: auto;
@@ -1584,14 +1603,14 @@ img.aligncenter {
.wp-caption img {
width: 100%;
- margin: 0 auto;
+ margin: 0 auto 5px;
padding: 0;
border: none;
box-shadow: none;
}
.wp-caption p.wp-caption-text {
- padding: 10px;
+ padding: 5px;
font-size: .9em;
text-align: center;
text-indent: 0;
@@ -1611,6 +1630,12 @@ img.aligncenter {
height: auto;
}
+.mantra-caption-light #content .wp-caption {}
+.mantra-caption-white #content .wp-caption { background-color: #FFF; }
+.mantra-caption-light-gray #content .wp-caption { background-color: #EEE; }
+.mantra-caption-gray #content .wp-caption { background-color: #CCC; }
+.mantra-caption-dark-gray #content .wp-caption { background-color: #444; color: #CCC; }
+.mantra-caption-black #content .wp-caption { background-color: #000; color: #CCC; }
/* =Navigation
-------------------------------------------------------------- */
@@ -1702,7 +1727,7 @@ h3#comments-title {
margin: 0 0 10px 0;
padding: 0 0px 10px 56px;
position: relative;
- line-height: 24px;
+/* line-height: 24px; */
list-style: none;
background: #FFF;
background-image:none;
@@ -1762,12 +1787,13 @@ h3#comments-title {
.comment-meta {
display: block;
float: left;
- margin-bottom: 5px;
+ margin-bottom: 0;
margin-left: 10px;
font-size: .8em;
text-transform: uppercase;
opacity: 0.5;
letter-spacing: 1px;
+ line-height: 27px;
}
.comment-meta a:link,
@@ -2399,6 +2425,7 @@ img#wpstats {
top: 50%;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
+ z-index: 100;
}
#smenul a,
@@ -2489,15 +2516,24 @@ article.sticky {
}
/* CUSTOM IMAGE BORDER */
-.entry-content .imageOne,
-.entry-summary .imageOne {
+.mantra-image-none .entry-content img[class*='align'],
+.mantra-image-none .entry-content [class*='wp-block'][class*='align'] img,
+.mantra-image-none .entry-summary img[class*='align'],
+.mantra-image-none .entry-summary [class*='wp-block'][class*='align'] img { }
+
+.mantra-image-one .entry-content img[class*='align'],
+.mantra-image-one .entry-content [class*='wp-block'][class*='align'] img,
+.mantra-image-one .entry-summary img[class*='align'],
+.mantra-image-one .entry-summary [class*='wp-block'][class*='align'] img {
height: auto;
padding: 3px;
border: 1px solid #DDD !important;
}
-.entry-content .imageTwo,
-.entry-summary .imageTwo {
+.mantra-image-two .entry-content img[class*='align'],
+.mantra-image-two .entry-content [class*='wp-block'][class*='align'] img,
+.mantra-image-two .entry-summary img[class*='align'],
+.mantra-image-two .entry-summary [class*='wp-block'][class*='align'] img {
padding: 3px;
border: 1px solid #EEE;
background-color: #FFFFFF;
@@ -2505,33 +2541,43 @@ article.sticky {
box-shadow: 0 0 4px #CCC;
}
-.entry-content .imageThree,
-.entry-summary .imageThree {
+.mantra-image-three .entry-content img[class*='align'],
+.mantra-image-three .entry-content [class*='wp-block'][class*='align'] img,
+.mantra-image-three .entry-summary img[class*='align'],
+.mantra-image-three .entry-summary [class*='wp-block'][class*='align'] img {
padding: 3px;
border: 6px solid #EEEEEE;
border-radius: 5px;
background-color: #FFFFFF;
}
-.entry-content .imageFour,
-.entry-summary .imageFour {
+.mantra-image-four .entry-content img[class*='align'],
+.mantra-image-four .entry-content [class*='wp-block'][class*='align'] img,
+.mantra-image-four .entry-summary img[class*='align'],
+.mantra-image-four .entry-summary [class*='wp-block'][class*='align'] img {
border: 1px solid #666 !important;
box-shadow: 0 3px 4px #999;
}
-.entry-content .imageFive,
-.entry-summary .imageFive {
+.mantra-image-five .entry-content img[class*='align'],
+.mantra-image-five .entry-content [class*='wp-block'][class*='align'] img,
+.mantra-image-five .entry-summary img[class*='align'],
+.mantra-image-five .entry-summary [class*='wp-block'][class*='align'] img {
border: 3px solid #DDD !important;
}
-.entry-content .imageSix,
-.entry-summary .imageSix {
+.mantra-image-six .entry-content img[class*='align'],
+.mantra-image-six .entry-content [class*='wp-block'][class*='align'] img,
+.mantra-image-six .entry-summary img[class*='align'],
+.mantra-image-six .entry-summary [class*='wp-block'][class*='align'] img {
border: 8px solid #BBB !important;
box-shadow: 0 0 5px #333;
}
-.entry-content .imageSeven,
-.entry-summary .imageSeven {
+.mantra-image-seven .entry-content img[class*='align'],
+.mantra-image-seven .entry-content [class*='wp-block'][class*='align'] img,
+.mantra-image-seven .entry-summary img[class*='align'],
+.mantra-image-seven .entry-summary [class*='wp-block'][class*='align'] img {
padding: 7px;
border: 1px solid #CCC;
background-color: #FFFFFF;
diff --git a/themes/twentyfifteen/content-link.php b/themes/twentyfifteen/content-link.php
index f9a31997..023e0d6d 100644
--- a/themes/twentyfifteen/content-link.php
+++ b/themes/twentyfifteen/content-link.php
@@ -61,4 +61,4 @@
</footer>
<!-- .entry-footer -->
-</article><!-- #post-## -->
+</article><!-- #post-<?php the_ID(); ?> -->
diff --git a/themes/twentyfifteen/content-page.php b/themes/twentyfifteen/content-page.php
index 5b9e796c..9651518e 100644
--- a/themes/twentyfifteen/content-page.php
+++ b/themes/twentyfifteen/content-page.php
@@ -36,4 +36,4 @@
<?php edit_post_link( __( 'Edit', 'twentyfifteen' ), '<footer class="entry-footer"><span class="edit-link">', '</span></footer><!-- .entry-footer -->' ); ?>
-</article><!-- #post-## -->
+</article><!-- #post-<?php the_ID(); ?> -->
diff --git a/themes/twentyfifteen/content-search.php b/themes/twentyfifteen/content-search.php
index faa79f50..f8091ce6 100644
--- a/themes/twentyfifteen/content-search.php
+++ b/themes/twentyfifteen/content-search.php
@@ -34,4 +34,4 @@
<?php endif; ?>
-</article><!-- #post-## -->
+</article><!-- #post-<?php the_ID(); ?> -->
diff --git a/themes/twentyfifteen/content.php b/themes/twentyfifteen/content.php
index 1ac377af..13799fb0 100644
--- a/themes/twentyfifteen/content.php
+++ b/themes/twentyfifteen/content.php
@@ -61,4 +61,4 @@
<?php edit_post_link( __( 'Edit', 'twentyfifteen' ), '<span class="edit-link">', '</span>' ); ?>
</footer><!-- .entry-footer -->
-</article><!-- #post-## -->
+</article><!-- #post-<?php the_ID(); ?> -->
diff --git a/themes/twentyfifteen/functions.php b/themes/twentyfifteen/functions.php
index 2713ba2c..db6451f0 100644
--- a/themes/twentyfifteen/functions.php
+++ b/themes/twentyfifteen/functions.php
@@ -12,7 +12,7 @@
* the parent theme's file, so the child theme functions would be used.
*
* @link https://codex.wordpress.org/Theme_Development
- * @link https://codex.wordpress.org/Child_Themes
+ * @link https://developer.wordpress.org/themes/advanced-topics/child-themes/
*
* Functions that are not pluggable (not wrapped in function_exists()) are
* instead attached to a filter or action hook.
@@ -75,7 +75,7 @@ if ( ! function_exists( 'twentyfifteen_setup' ) ) :
/*
* Enable support for Post Thumbnails on posts and pages.
*
- * See: https://codex.wordpress.org/Function_Reference/add_theme_support#Post_Thumbnails
+ * See: https://developer.wordpress.org/reference/functions/add_theme_support/#post-thumbnails
*/
add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size( 825, 510, true );
diff --git a/themes/twentyfifteen/header.php b/themes/twentyfifteen/header.php
index 63b04377..41a1e8df 100644
--- a/themes/twentyfifteen/header.php
+++ b/themes/twentyfifteen/header.php
@@ -22,6 +22,7 @@
</head>
<body <?php body_class(); ?>>
+<?php wp_body_open(); ?>
<div id="page" class="hfeed site">
<a class="skip-link screen-reader-text" href="#content"><?php _e( 'Skip to content', 'twentyfifteen' ); ?></a>
diff --git a/themes/twentyfifteen/image.php b/themes/twentyfifteen/image.php
index 5afa773f..3eb25b3f 100644
--- a/themes/twentyfifteen/image.php
+++ b/themes/twentyfifteen/image.php
@@ -74,7 +74,7 @@ get_header(); ?>
<?php edit_post_link( __( 'Edit', 'twentyfifteen' ), '<span class="edit-link">', '</span>' ); ?>
</footer><!-- .entry-footer -->
- </article><!-- #post-## -->
+ </article><!-- #post-<?php the_ID(); ?> -->
<?php
// If comments are open or we have at least one comment, load up the comment template
diff --git a/themes/twentyfifteen/inc/template-tags.php b/themes/twentyfifteen/inc/template-tags.php
index 056d1941..6af6e750 100644
--- a/themes/twentyfifteen/inc/template-tags.php
+++ b/themes/twentyfifteen/inc/template-tags.php
@@ -267,3 +267,21 @@ if ( ! function_exists( 'twentyfifteen_the_custom_logo' ) ) :
}
}
endif;
+
+if ( ! function_exists( 'wp_body_open' ) ) :
+ /**
+ * Fire the wp_body_open action.
+ *
+ * Added for backwards compatibility to support pre 5.2.0 WordPress versions.
+ *
+ * @since Twenty Fifteen 2.5
+ */
+ function wp_body_open() {
+ /**
+ * Triggered after the opening <body> tag.
+ *
+ * @since Twenty Fifteen 2.5
+ */
+ do_action( 'wp_body_open' );
+ }
+endif;
diff --git a/themes/twentyfifteen/readme.txt b/themes/twentyfifteen/readme.txt
index a28aa0cf..fd936ad1 100644
--- a/themes/twentyfifteen/readme.txt
+++ b/themes/twentyfifteen/readme.txt
@@ -1,8 +1,9 @@
=== Twenty Fifteen ===
-Contributors: the WordPress team
+Contributors: wordpressdotorg
Requires at least: WordPress 4.1
Tested up to: WordPress 5.0
-Version: 2.4
+Requires PHP: 5.2.4
+Version: 2.5
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: blog, two-columns, left-sidebar, accessibility-ready, custom-background, custom-colors, custom-header, custom-logo, custom-menu, editor-style, featured-images, microformats, post-formats, rtl-language-support, sticky-post, threaded-comments, translation-ready
@@ -55,6 +56,11 @@ Source: http://www.genericons.com
== Changelog ==
+= 2.5 =
+* Released: May 7, 2019
+
+https://codex.wordpress.org/Twenty_Fifteen_Theme_Changelog#Version_2.5
+
= 2.4 =
* Released: February 21, 2019
diff --git a/themes/twentyfifteen/style.css b/themes/twentyfifteen/style.css
index 49631ce0..4d0d8e79 100644
--- a/themes/twentyfifteen/style.css
+++ b/themes/twentyfifteen/style.css
@@ -4,7 +4,7 @@ Theme URI: https://wordpress.org/themes/twentyfifteen/
Author: the WordPress team
Author URI: https://wordpress.org/
Description: Our 2015 default theme is clean, blog-focused, and designed for clarity. Twenty Fifteen's simple, straightforward typography is readable on a wide variety of screen sizes, and suitable for multiple languages. We designed it using a mobile-first approach, meaning your content takes center-stage, regardless of whether your visitors arrive by smartphone, tablet, laptop, or desktop computer.
-Version: 2.4
+Version: 2.5
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: blog, two-columns, left-sidebar, accessibility-ready, custom-background, custom-colors, custom-header, custom-logo, custom-menu, editor-style, featured-images, microformats, post-formats, rtl-language-support, sticky-post, threaded-comments, translation-ready
@@ -5962,7 +5962,7 @@ p > video {
.page-content,
.comments-area,
.widecolumn {
- background: none !important; /* Make sure color schemes dont't affect to print */
+ background: none !important; /* Make sure color schemes don't affect to print */
}
body,
diff --git a/themes/twentyfourteen/content-aside.php b/themes/twentyfourteen/content-aside.php
index 3fd3acda..b180826d 100644
--- a/themes/twentyfourteen/content-aside.php
+++ b/themes/twentyfourteen/content-aside.php
@@ -63,4 +63,4 @@
</div><!-- .entry-content -->
<?php the_tags( '<footer class="entry-meta"><span class="tag-links">', '', '</span></footer>' ); ?>
-</article><!-- #post-## -->
+</article><!-- #post-<?php the_ID(); ?> -->
diff --git a/themes/twentyfourteen/content-audio.php b/themes/twentyfourteen/content-audio.php
index 4dba002a..36aa5a9d 100644
--- a/themes/twentyfourteen/content-audio.php
+++ b/themes/twentyfourteen/content-audio.php
@@ -63,4 +63,4 @@
</div><!-- .entry-content -->
<?php the_tags( '<footer class="entry-meta"><span class="tag-links">', '', '</span></footer>' ); ?>
-</article><!-- #post-## -->
+</article><!-- #post-<?php the_ID(); ?> -->
diff --git a/themes/twentyfourteen/content-featured-post.php b/themes/twentyfourteen/content-featured-post.php
index d5a16fef..707b9570 100644
--- a/themes/twentyfourteen/content-featured-post.php
+++ b/themes/twentyfourteen/content-featured-post.php
@@ -31,4 +31,4 @@
<?php the_title( '<h1 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h1>' ); ?>
</header><!-- .entry-header -->
-</article><!-- #post-## -->
+</article><!-- #post-<?php the_ID(); ?> -->
diff --git a/themes/twentyfourteen/content-gallery.php b/themes/twentyfourteen/content-gallery.php
index 9ecdfbf9..2f793a8e 100644
--- a/themes/twentyfourteen/content-gallery.php
+++ b/themes/twentyfourteen/content-gallery.php
@@ -63,4 +63,4 @@
</div><!-- .entry-content -->
<?php the_tags( '<footer class="entry-meta"><span class="tag-links">', '', '</span></footer>' ); ?>
-</article><!-- #post-## -->
+</article><!-- #post-<?php the_ID(); ?> -->
diff --git a/themes/twentyfourteen/content-image.php b/themes/twentyfourteen/content-image.php
index 911ef239..5e58bf00 100644
--- a/themes/twentyfourteen/content-image.php
+++ b/themes/twentyfourteen/content-image.php
@@ -63,4 +63,4 @@
</div><!-- .entry-content -->
<?php the_tags( '<footer class="entry-meta"><span class="tag-links">', '', '</span></footer>' ); ?>
-</article><!-- #post-## -->
+</article><!-- #post-<?php the_ID(); ?> -->
diff --git a/themes/twentyfourteen/content-link.php b/themes/twentyfourteen/content-link.php
index 9ad08102..d4c7c8bd 100644
--- a/themes/twentyfourteen/content-link.php
+++ b/themes/twentyfourteen/content-link.php
@@ -63,4 +63,4 @@
</div><!-- .entry-content -->
<?php the_tags( '<footer class="entry-meta"><span class="tag-links">', '', '</span></footer>' ); ?>
-</article><!-- #post-## -->
+</article><!-- #post-<?php the_ID(); ?> -->
diff --git a/themes/twentyfourteen/content-page.php b/themes/twentyfourteen/content-page.php
index ca8ebd9b..5a42117e 100644
--- a/themes/twentyfourteen/content-page.php
+++ b/themes/twentyfourteen/content-page.php
@@ -30,4 +30,4 @@
edit_post_link( __( 'Edit', 'twentyfourteen' ), '<span class="edit-link">', '</span>' );
?>
</div><!-- .entry-content -->
-</article><!-- #post-## -->
+</article><!-- #post-<?php the_ID(); ?> -->
diff --git a/themes/twentyfourteen/content-quote.php b/themes/twentyfourteen/content-quote.php
index 70319087..29e6ec37 100644
--- a/themes/twentyfourteen/content-quote.php
+++ b/themes/twentyfourteen/content-quote.php
@@ -63,4 +63,4 @@
</div><!-- .entry-content -->
<?php the_tags( '<footer class="entry-meta"><span class="tag-links">', '', '</span></footer>' ); ?>
-</article><!-- #post-## -->
+</article><!-- #post-<?php the_ID(); ?> -->
diff --git a/themes/twentyfourteen/content-video.php b/themes/twentyfourteen/content-video.php
index c13d6700..1c1a0efb 100644
--- a/themes/twentyfourteen/content-video.php
+++ b/themes/twentyfourteen/content-video.php
@@ -63,4 +63,4 @@
</div><!-- .entry-content -->
<?php the_tags( '<footer class="entry-meta"><span class="tag-links">', '', '</span></footer>' ); ?>
-</article><!-- #post-## -->
+</article><!-- #post-<?php the_ID(); ?> -->
diff --git a/themes/twentyfourteen/content.php b/themes/twentyfourteen/content.php
index 367cf337..bf053633 100644
--- a/themes/twentyfourteen/content.php
+++ b/themes/twentyfourteen/content.php
@@ -73,4 +73,4 @@
<?php endif; ?>
<?php the_tags( '<footer class="entry-meta"><span class="tag-links">', '', '</span></footer>' ); ?>
-</article><!-- #post-## -->
+</article><!-- #post-<?php the_ID(); ?> -->
diff --git a/themes/twentyfourteen/functions.php b/themes/twentyfourteen/functions.php
index e705a546..c017dac6 100644
--- a/themes/twentyfourteen/functions.php
+++ b/themes/twentyfourteen/functions.php
@@ -12,7 +12,7 @@
* the parent theme's file, so the child theme functions would be used.
*
* @link https://codex.wordpress.org/Theme_Development
- * @link https://codex.wordpress.org/Child_Themes
+ * @link https://developer.wordpress.org/themes/advanced-topics/child-themes/
*
* Functions that are not pluggable (not wrapped in function_exists()) are
* instead attached to a filter or action hook.
diff --git a/themes/twentyfourteen/header.php b/themes/twentyfourteen/header.php
index 1de76b34..88071ec9 100644
--- a/themes/twentyfourteen/header.php
+++ b/themes/twentyfourteen/header.php
@@ -31,6 +31,7 @@
</head>
<body <?php body_class(); ?>>
+<?php wp_body_open(); ?>
<div id="page" class="hfeed site">
<?php if ( get_header_image() ) : ?>
<div id="site-header">
diff --git a/themes/twentyfourteen/image.php b/themes/twentyfourteen/image.php
index f0af8b83..eb4a1658 100644
--- a/themes/twentyfourteen/image.php
+++ b/themes/twentyfourteen/image.php
@@ -61,7 +61,7 @@ get_header();
);
?>
</div><!-- .entry-content -->
- </article><!-- #post-## -->
+ </article><!-- #post-<?php the_ID(); ?> -->
<nav id="image-navigation" class="navigation image-navigation">
<div class="nav-links">
diff --git a/themes/twentyfourteen/inc/template-tags.php b/themes/twentyfourteen/inc/template-tags.php
index 15003864..f1e95294 100644
--- a/themes/twentyfourteen/inc/template-tags.php
+++ b/themes/twentyfourteen/inc/template-tags.php
@@ -232,3 +232,21 @@ if ( ! function_exists( 'twentyfourteen_excerpt_more' ) && ! is_admin() ) :
}
add_filter( 'excerpt_more', 'twentyfourteen_excerpt_more' );
endif;
+
+if ( ! function_exists( 'wp_body_open' ) ) :
+ /**
+ * Fire the wp_body_open action.
+ *
+ * Added for backwards compatibility to support pre 5.2.0 WordPress versions.
+ *
+ * @since Twenty Fourteen 2.7
+ */
+ function wp_body_open() {
+ /**
+ * Triggered after the opening <body> tag.
+ *
+ * @since Twenty Fourteen 2.7
+ */
+ do_action( 'wp_body_open' );
+ }
+endif;
diff --git a/themes/twentyfourteen/inc/widgets.php b/themes/twentyfourteen/inc/widgets.php
index 7ddabec3..0b99fe2a 100644
--- a/themes/twentyfourteen/inc/widgets.php
+++ b/themes/twentyfourteen/inc/widgets.php
@@ -226,7 +226,7 @@ class Twenty_Fourteen_Ephemera_Widget extends WP_Widget {
<?php endif; ?>
</div><!-- .entry-meta -->
</header><!-- .entry-header -->
- </article><!-- #post-## -->
+ </article><!-- #post-<?php the_ID(); ?> -->
</li>
<?php endwhile; ?>
diff --git a/themes/twentyfourteen/page-templates/contributors.php b/themes/twentyfourteen/page-templates/contributors.php
index 6b1d19db..635a259c 100644
--- a/themes/twentyfourteen/page-templates/contributors.php
+++ b/themes/twentyfourteen/page-templates/contributors.php
@@ -35,7 +35,7 @@ if ( is_front_page() && twentyfourteen_has_featured_posts() ) {
edit_post_link( __( 'Edit', 'twentyfourteen' ), '<footer class="entry-meta"><span class="edit-link">', '</span></footer>' );
?>
- </article><!-- #post-## -->
+ </article><!-- #post-<?php the_ID(); ?> -->
<?php
// If comments are open or we have at least one comment, load up the comment template.
diff --git a/themes/twentyfourteen/readme.txt b/themes/twentyfourteen/readme.txt
index 6f1010d2..412c23dc 100644
--- a/themes/twentyfourteen/readme.txt
+++ b/themes/twentyfourteen/readme.txt
@@ -1,8 +1,9 @@
=== Twenty Fourteen ===
-Contributors: the WordPress team
+Contributors: wordpressdotorg
Requires at least: WordPress 3.6
Tested up to: WordPress 5.0
-Stable tag: 2.6
+Requires PHP: 5.2.4
+Stable tag: 2.7
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: blog, news, two-columns, three-columns, left-sidebar, right-sidebar, custom-background, custom-header, custom-menu, editor-style, featured-images, flexible-header, footer-widgets, full-width-template, microformats, post-formats, rtl-language-support, sticky-post, theme-options, translation-ready, accessibility-ready
@@ -50,6 +51,11 @@ Source: http://www.genericons.com
== Changelog ==
+= 2.7 =
+* Released: May 7, 2019
+
+https://codex.wordpress.org/Twenty_Fourteen_Theme_Changelog#Version_2.7
+
= 2.6 =
* Released: February 21, 2019
diff --git a/themes/twentyfourteen/style.css b/themes/twentyfourteen/style.css
index 94ce71b3..85133472 100644
--- a/themes/twentyfourteen/style.css
+++ b/themes/twentyfourteen/style.css
@@ -4,7 +4,7 @@ Theme URI: https://wordpress.org/themes/twentyfourteen/
Author: the WordPress team
Author URI: https://wordpress.org/
Description: In 2014, our default theme lets you create a responsive magazine website with a sleek, modern design. Feature your favorite homepage content in either a grid or a slider. Use the three widget areas to customize your website, and change your content's layout with a full-width page template and a contributor page to show off your authors. Creating a magazine website with WordPress has never been easier.
-Version: 2.6
+Version: 2.7
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: blog, news, two-columns, three-columns, left-sidebar, right-sidebar, custom-background, custom-header, custom-menu, editor-style, featured-images, flexible-header, footer-widgets, full-width-template, microformats, post-formats, rtl-language-support, sticky-post, theme-options, translation-ready, accessibility-ready